olova 2.0.68 → 2.0.71
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/compiler.js +388 -12791
- package/dist/compiler.js.map +1 -1
- package/dist/index.js +394 -12797
- package/dist/index.js.map +1 -1
- package/dist/vite.js +394 -12797
- package/dist/vite.js.map +1 -1
- package/package.json +4 -1
package/dist/compiler.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../node_modules/source-map-js/lib/base64.js","../../node_modules/source-map-js/lib/base64-vlq.js","../../node_modules/source-map-js/lib/util.js","../../node_modules/source-map-js/lib/array-set.js","../../node_modules/source-map-js/lib/mapping-list.js","../../node_modules/source-map-js/lib/source-map-generator.js","../../node_modules/css-tree/lib/tokenizer/types.js","../../node_modules/css-tree/lib/tokenizer/char-code-definitions.js","../../node_modules/css-tree/lib/tokenizer/utils.js","../../node_modules/css-tree/lib/tokenizer/names.js","../../node_modules/css-tree/lib/tokenizer/adopt-buffer.js","../../node_modules/css-tree/lib/tokenizer/OffsetToLocation.js","../../node_modules/css-tree/lib/tokenizer/TokenStream.js","../../node_modules/css-tree/lib/tokenizer/index.js","../../node_modules/css-tree/lib/utils/List.js","../../node_modules/css-tree/lib/utils/create-custom-error.js","../../node_modules/css-tree/lib/parser/SyntaxError.js","../../node_modules/css-tree/lib/parser/sequence.js","../../node_modules/css-tree/lib/parser/create.js","../../node_modules/css-tree/lib/generator/sourceMap.js","../../node_modules/css-tree/lib/generator/token-before.js","../../node_modules/css-tree/lib/generator/create.js","../../node_modules/css-tree/lib/convertor/create.js","../../node_modules/css-tree/lib/walker/create.js","../../node_modules/css-tree/lib/definition-syntax/generate.js","../../node_modules/css-tree/lib/lexer/error.js","../../node_modules/css-tree/lib/utils/names.js","../../node_modules/css-tree/lib/lexer/generic-const.js","../../node_modules/css-tree/lib/lexer/generic-an-plus-b.js","../../node_modules/css-tree/lib/lexer/generic-urange.js","../../node_modules/css-tree/lib/lexer/generic.js","../../node_modules/css-tree/lib/lexer/units.js","../../node_modules/css-tree/lib/definition-syntax/SyntaxError.js","../../node_modules/css-tree/lib/definition-syntax/scanner.js","../../node_modules/css-tree/lib/definition-syntax/parse.js","../../node_modules/css-tree/lib/definition-syntax/walk.js","../../node_modules/css-tree/lib/lexer/prepare-tokens.js","../../node_modules/css-tree/lib/lexer/match-graph.js","../../node_modules/css-tree/lib/lexer/match.js","../../node_modules/css-tree/lib/lexer/trace.js","../../node_modules/css-tree/lib/lexer/search.js","../../node_modules/css-tree/lib/lexer/structure.js","../../node_modules/css-tree/lib/lexer/Lexer.js","../../node_modules/css-tree/lib/syntax/config/mix.js","../../node_modules/css-tree/lib/syntax/create.js","../../node_modules/css-tree/lib/data-patch.js","../../node_modules/css-tree/lib/data.js","../../node_modules/css-tree/lib/syntax/node/index.js","../../node_modules/css-tree/lib/syntax/node/AnPlusB.js","../../node_modules/css-tree/lib/syntax/node/Atrule.js","../../node_modules/css-tree/lib/syntax/node/AtrulePrelude.js","../../node_modules/css-tree/lib/syntax/node/AttributeSelector.js","../../node_modules/css-tree/lib/syntax/node/Block.js","../../node_modules/css-tree/lib/syntax/node/Brackets.js","../../node_modules/css-tree/lib/syntax/node/CDC.js","../../node_modules/css-tree/lib/syntax/node/CDO.js","../../node_modules/css-tree/lib/syntax/node/ClassSelector.js","../../node_modules/css-tree/lib/syntax/node/Combinator.js","../../node_modules/css-tree/lib/syntax/node/Comment.js","../../node_modules/css-tree/lib/syntax/node/Condition.js","../../node_modules/css-tree/lib/syntax/node/Declaration.js","../../node_modules/css-tree/lib/syntax/node/DeclarationList.js","../../node_modules/css-tree/lib/syntax/node/Dimension.js","../../node_modules/css-tree/lib/syntax/node/Feature.js","../../node_modules/css-tree/lib/syntax/node/FeatureFunction.js","../../node_modules/css-tree/lib/syntax/node/FeatureRange.js","../../node_modules/css-tree/lib/syntax/node/Function.js","../../node_modules/css-tree/lib/syntax/node/GeneralEnclosed.js","../../node_modules/css-tree/lib/syntax/node/Hash.js","../../node_modules/css-tree/lib/syntax/node/Identifier.js","../../node_modules/css-tree/lib/syntax/node/IdSelector.js","../../node_modules/css-tree/lib/syntax/node/Layer.js","../../node_modules/css-tree/lib/syntax/node/LayerList.js","../../node_modules/css-tree/lib/syntax/node/MediaQuery.js","../../node_modules/css-tree/lib/syntax/node/MediaQueryList.js","../../node_modules/css-tree/lib/syntax/node/NestingSelector.js","../../node_modules/css-tree/lib/syntax/node/Nth.js","../../node_modules/css-tree/lib/syntax/node/Number.js","../../node_modules/css-tree/lib/syntax/node/Operator.js","../../node_modules/css-tree/lib/syntax/node/Parentheses.js","../../node_modules/css-tree/lib/syntax/node/Percentage.js","../../node_modules/css-tree/lib/syntax/node/PseudoClassSelector.js","../../node_modules/css-tree/lib/syntax/node/PseudoElementSelector.js","../../node_modules/css-tree/lib/syntax/node/Ratio.js","../../node_modules/css-tree/lib/syntax/node/Raw.js","../../node_modules/css-tree/lib/syntax/node/Rule.js","../../node_modules/css-tree/lib/syntax/node/Scope.js","../../node_modules/css-tree/lib/syntax/node/Selector.js","../../node_modules/css-tree/lib/syntax/node/SelectorList.js","../../node_modules/css-tree/lib/syntax/node/String.js","../../node_modules/css-tree/lib/utils/string.js","../../node_modules/css-tree/lib/syntax/node/StyleSheet.js","../../node_modules/css-tree/lib/syntax/node/SupportsDeclaration.js","../../node_modules/css-tree/lib/syntax/node/TypeSelector.js","../../node_modules/css-tree/lib/syntax/node/UnicodeRange.js","../../node_modules/css-tree/lib/syntax/node/Url.js","../../node_modules/css-tree/lib/utils/url.js","../../node_modules/css-tree/lib/syntax/node/Value.js","../../node_modules/css-tree/lib/syntax/node/WhiteSpace.js","../../node_modules/css-tree/lib/syntax/config/lexer.js","../../node_modules/css-tree/lib/syntax/scope/index.js","../../node_modules/css-tree/lib/syntax/scope/default.js","../../node_modules/css-tree/lib/syntax/scope/atrulePrelude.js","../../node_modules/css-tree/lib/syntax/scope/selector.js","../../node_modules/css-tree/lib/syntax/function/expression.js","../../node_modules/css-tree/lib/syntax/function/var.js","../../node_modules/css-tree/lib/syntax/scope/value.js","../../node_modules/css-tree/lib/syntax/atrule/container.js","../../node_modules/css-tree/lib/syntax/atrule/font-face.js","../../node_modules/css-tree/lib/syntax/atrule/import.js","../../node_modules/css-tree/lib/syntax/atrule/layer.js","../../node_modules/css-tree/lib/syntax/atrule/media.js","../../node_modules/css-tree/lib/syntax/atrule/nest.js","../../node_modules/css-tree/lib/syntax/atrule/page.js","../../node_modules/css-tree/lib/syntax/atrule/scope.js","../../node_modules/css-tree/lib/syntax/atrule/starting-style.js","../../node_modules/css-tree/lib/syntax/atrule/supports.js","../../node_modules/css-tree/lib/syntax/atrule/index.js","../../node_modules/css-tree/lib/syntax/pseudo/lang.js","../../node_modules/css-tree/lib/syntax/pseudo/index.js","../../node_modules/css-tree/lib/syntax/node/index-parse.js","../../node_modules/css-tree/lib/syntax/config/parser.js","../../node_modules/css-tree/lib/syntax/config/walker.js","../../node_modules/css-tree/lib/syntax/index.js","../../node_modules/css-tree/lib/index.js","../compiler/css-scope.ts","../compiler/diagnostics.ts","../compiler/parse.ts","../../node_modules/htmlparser2/node_modules/entities/src/decode-codepoint.ts","../../node_modules/htmlparser2/node_modules/entities/src/internal/decode-shared.ts","../../node_modules/htmlparser2/node_modules/entities/src/generated/decode-data-html.ts","../../node_modules/htmlparser2/node_modules/entities/src/generated/decode-data-xml.ts","../../node_modules/htmlparser2/node_modules/entities/src/internal/bin-trie-flags.ts","../../node_modules/htmlparser2/node_modules/entities/src/decode.ts","../../node_modules/htmlparser2/src/Tokenizer.ts","../../node_modules/htmlparser2/src/Parser.ts","../../node_modules/domelementtype/lib/esm/index.js","../../node_modules/domhandler/lib/esm/node.js","../../node_modules/domhandler/lib/esm/index.js","https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/generated/decode-data-html.ts","https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/generated/decode-data-xml.ts","https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/decode_codepoint.ts","https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/decode.ts","https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/generated/encode-html.ts","https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/index.ts","../../node_modules/dom-serializer/lib/esm/foreignNames.js","https://raw.githubusercontent.com/fb55/domutils/0ab8bcf1ecfc70dfc93291a4cb2496578ac25e9c/src/helpers.ts","../../node_modules/htmlparser2/src/index.ts","../compiler/html-parser.ts","../compiler/dom-generator.ts","../compiler/compile.ts"],"names":["exports","number","zero","normalize","length","SourceMapGenerator","name","sourceFile","String","Number","EOF","code","tokenize","balanceStart","tokenType","getCharCode","offset","line","SyntaxError","parse","node","walk","hasOwnProperty","structure","noop","HYPHENMINUS","keyword","property","descriptor","PLUSSIGN","N","isDelim","balancePair","isNumber","angle","decibel","frequency","flex","resolution","semitones","time","F","R","TAB","SPACE","EXCLAMATIONMARK","NUMBERSIGN","QUESTIONMARK","LEFTCURLYBRACKET","terms","combinator","ensureFunction","LEFTPARENTHESIS","RIGHTPARENTHESIS","lastTokenIndex","lexer","syntax","isType","patch","generate","fromPlainObject","toPlainObject","config","require","createRequire","DISALLOW_SIGN","ALLOW_SIGN","checkInteger","consumeB","walkContext","ASTERISK","VERTICALLINE","AMPERSAND","consumeRaw","readSequence","GREATERTHANSIGN","TILDE","SOLIDUS","DOLLARSIGN","readProperty","value","LESSTHANSIGN","EQUALSSIGN","children","FULLSTOP","selector","nth","APOSTROPHE","startsWith","REVERSE_SOLIDUS","QUOTATION_MARK","decode","encode","U","import_default","selectorList","_a","BinTrieFlags","CharCodes","EntityDecoderState","DecodingMode","State","isWhitespace","QuoteType","ElementType","Text","Comment","CDATA","isTag","decodeMap","fromCodePoint","replaceCodePoint","TO_LOWER_BIT","isHexadecimalCharacter","isAsciiAlphaNumeric","isEntityInAttributeInvalidEnd","EntityDecoder","determineBranch","EntityLevel","EncodingMode","DocumentPosition","statement","childExpr","char","prev","id","css"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAA,cAAA,GAAA,UAAA,CAAA;AAAA,EAAA,6CAAA,CAAAA,SAAA,EAAA;AAOA,IAAA,IAAI,YAAA,GAAe,kEAAA,CAAmE,KAAA,CAAM,EAAE,CAAA;AAK9F,IAAAA,SAAA,CAAQ,MAAA,GAAS,SAAUC,OAAAA,EAAQ;AACjC,MAAA,IAAI,CAAA,IAAKA,OAAAA,IAAUA,OAAAA,GAAS,YAAA,CAAa,MAAA,EAAQ;AAC/C,QAAA,OAAO,aAAaA,OAAM,CAAA;AAAA,MAC5B;AACA,MAAA,MAAM,IAAI,SAAA,CAAU,4BAAA,GAA+BA,OAAM,CAAA;AAAA,IAC3D,CAAA;AAMA,IAAAD,SAAA,CAAQ,MAAA,GAAS,SAAU,QAAA,EAAU;AACnC,MAAA,IAAI,IAAA,GAAO,EAAA;AACX,MAAA,IAAI,IAAA,GAAO,EAAA;AAEX,MAAA,IAAI,OAAA,GAAU,EAAA;AACd,MAAA,IAAI,OAAA,GAAU,GAAA;AAEd,MAAA,IAAIE,KAAAA,GAAO,EAAA;AACX,MAAA,IAAI,IAAA,GAAO,EAAA;AAEX,MAAA,IAAI,IAAA,GAAO,EAAA;AACX,MAAA,IAAI,KAAA,GAAQ,EAAA;AAEZ,MAAA,IAAI,YAAA,GAAe,EAAA;AACnB,MAAA,IAAI,YAAA,GAAe,EAAA;AAGnB,MAAA,IAAI,IAAA,IAAQ,QAAA,IAAY,QAAA,IAAY,IAAA,EAAM;AACxC,QAAA,OAAQ,QAAA,GAAW,IAAA;AAAA,MACrB;AAGA,MAAA,IAAI,OAAA,IAAW,QAAA,IAAY,QAAA,IAAY,OAAA,EAAS;AAC9C,QAAA,OAAQ,WAAW,OAAA,GAAU,YAAA;AAAA,MAC/B;AAGA,MAAA,IAAIA,KAAAA,IAAQ,QAAA,IAAY,QAAA,IAAY,IAAA,EAAM;AACxC,QAAA,OAAQ,WAAWA,KAAAA,GAAO,YAAA;AAAA,MAC5B;AAGA,MAAA,IAAI,YAAY,IAAA,EAAM;AACpB,QAAA,OAAO,EAAA;AAAA,MACT;AAGA,MAAA,IAAI,YAAY,KAAA,EAAO;AACrB,QAAA,OAAO,EAAA;AAAA,MACT;AAGA,MAAA,OAAO,EAAA;AAAA,IACT,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;AClEA,IAAA,kBAAA,GAAA,UAAA,CAAA;AAAA,EAAA,iDAAA,CAAAF,SAAA,EAAA;AAqCA,IAAA,IAAI,MAAA,GAAS,cAAA,EAAA;AAcb,IAAA,IAAI,cAAA,GAAiB,CAAA;AAGrB,IAAA,IAAI,WAAW,CAAA,IAAK,cAAA;AAGpB,IAAA,IAAI,gBAAgB,QAAA,GAAW,CAAA;AAG/B,IAAA,IAAI,oBAAA,GAAuB,QAAA;AAQ3B,IAAA,SAAS,YAAY,MAAA,EAAQ;AAC3B,MAAA,OAAO,SAAS,CAAA,GAAA,CACV,CAAC,UAAW,CAAA,IAAK,CAAA,GAAA,CAClB,UAAU,CAAA,IAAK,CAAA;AAAA,IACtB;AAQA,IAAA,SAAS,cAAc,MAAA,EAAQ;AAC7B,MAAA,IAAI,UAAA,GAAA,CAAc,SAAS,CAAA,MAAO,CAAA;AAClC,MAAA,IAAI,UAAU,MAAA,IAAU,CAAA;AACxB,MAAA,OAAO,UAAA,GACH,CAAC,OAAA,GACD,OAAA;AAAA,IACN;AAKA,IAAAA,SAAA,CAAQ,MAAA,GAAS,SAAS,gBAAA,CAAiB,MAAA,EAAQ;AACjD,MAAA,IAAI,OAAA,GAAU,EAAA;AACd,MAAA,IAAI,KAAA;AAEJ,MAAA,IAAI,GAAA,GAAM,YAAY,MAAM,CAAA;AAE5B,MAAA,GAAG;AACD,QAAA,KAAA,GAAQ,GAAA,GAAM,aAAA;AACd,QAAA,GAAA,MAAS,cAAA;AACT,QAAA,IAAI,MAAM,CAAA,EAAG;AAGX,UAAA,KAAA,IAAS,oBAAA;AAAA,QACX;AACA,QAAA,OAAA,IAAW,MAAA,CAAO,OAAO,KAAK,CAAA;AAAA,MAChC,SAAS,GAAA,GAAM,CAAA;AAEf,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAMA,IAAAA,SAAA,CAAQ,MAAA,GAAS,SAAS,gBAAA,CAAiB,IAAA,EAAM,QAAQ,SAAA,EAAW;AAClE,MAAA,IAAI,SAAS,IAAA,CAAK,MAAA;AAClB,MAAA,IAAI,MAAA,GAAS,CAAA;AACb,MAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,MAAA,IAAI,YAAA,EAAc,KAAA;AAElB,MAAA,GAAG;AACD,QAAA,IAAI,UAAU,MAAA,EAAQ;AACpB,UAAA,MAAM,IAAI,MAAM,4CAA4C,CAAA;AAAA,QAC9D;AAEA,QAAA,KAAA,GAAQ,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAC,CAAA;AAC/C,QAAA,IAAI,UAAU,EAAA,EAAI;AAChB,UAAA,MAAM,IAAI,KAAA,CAAM,wBAAA,GAA2B,KAAK,MAAA,CAAO,MAAA,GAAS,CAAC,CAAC,CAAA;AAAA,QACpE;AAEA,QAAA,YAAA,GAAe,CAAC,EAAE,KAAA,GAAQ,oBAAA,CAAA;AAC1B,QAAA,KAAA,IAAS,aAAA;AACT,QAAA,MAAA,GAAS,UAAU,KAAA,IAAS,KAAA,CAAA;AAC5B,QAAA,KAAA,IAAS,cAAA;AAAA,MACX,CAAA,QAAS,YAAA;AAET,MAAA,SAAA,CAAU,KAAA,GAAQ,cAAc,MAAM,CAAA;AACtC,MAAA,SAAA,CAAU,IAAA,GAAO,MAAA;AAAA,IACnB,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;AC3IA,IAAA,YAAA,GAAA,UAAA,CAAA;AAAA,EAAA,2CAAA,CAAAA,SAAA,EAAA;AAiBA,IAAA,SAAS,MAAA,CAAO,KAAA,EAAO,KAAA,EAAO,aAAA,EAAe;AAC3C,MAAA,IAAI,SAAS,KAAA,EAAO;AAClB,QAAA,OAAO,MAAM,KAAK,CAAA;AAAA,MACpB,CAAA,MAAA,IAAW,SAAA,CAAU,MAAA,KAAW,CAAA,EAAG;AACjC,QAAA,OAAO,aAAA;AAAA,MACT,CAAA,MAAO;AACL,QAAA,MAAM,IAAI,KAAA,CAAM,GAAA,GAAM,KAAA,GAAQ,2BAA2B,CAAA;AAAA,MAC3D;AAAA,IACF;AACA,IAAAA,SAAA,CAAQ,MAAA,GAAS,MAAA;AAEjB,IAAA,IAAI,SAAA,GAAY,gEAAA;AAChB,IAAA,IAAI,aAAA,GAAgB,eAAA;AAEpB,IAAA,SAAS,SAAS,IAAA,EAAM;AACtB,MAAA,IAAI,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA;AAChC,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,MAAM,CAAC,CAAA;AAAA,QACf,IAAA,EAAM,MAAM,CAAC,CAAA;AAAA,QACb,IAAA,EAAM,MAAM,CAAC,CAAA;AAAA,QACb,IAAA,EAAM,MAAM,CAAC,CAAA;AAAA,QACb,IAAA,EAAM,MAAM,CAAC;AAAA,OACf;AAAA,IACF;AACA,IAAAA,SAAA,CAAQ,QAAA,GAAW,QAAA;AAEnB,IAAA,SAAS,YAAY,UAAA,EAAY;AAC/B,MAAA,IAAI,GAAA,GAAM,EAAA;AACV,MAAA,IAAI,WAAW,MAAA,EAAQ;AACrB,QAAA,GAAA,IAAO,WAAW,MAAA,GAAS,GAAA;AAAA,MAC7B;AACA,MAAA,GAAA,IAAO,IAAA;AACP,MAAA,IAAI,WAAW,IAAA,EAAM;AACnB,QAAA,GAAA,IAAO,WAAW,IAAA,GAAO,GAAA;AAAA,MAC3B;AACA,MAAA,IAAI,WAAW,IAAA,EAAM;AACnB,QAAA,GAAA,IAAO,UAAA,CAAW,IAAA;AAAA,MACpB;AACA,MAAA,IAAI,WAAW,IAAA,EAAM;AACnB,QAAA,GAAA,IAAO,MAAM,UAAA,CAAW,IAAA;AAAA,MAC1B;AACA,MAAA,IAAI,WAAW,IAAA,EAAM;AACnB,QAAA,GAAA,IAAO,UAAA,CAAW,IAAA;AAAA,MACpB;AACA,MAAA,OAAO,GAAA;AAAA,IACT;AACA,IAAAA,SAAA,CAAQ,WAAA,GAAc,WAAA;AAEtB,IAAA,IAAI,iBAAA,GAAoB,EAAA;AASxB,IAAA,SAAS,WAAW,CAAA,EAAG;AACrB,MAAA,IAAI,QAAQ,EAAC;AAEb,MAAA,OAAO,SAAS,KAAA,EAAO;AACrB,QAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,UAAA,IAAI,KAAA,CAAM,CAAC,CAAA,CAAE,KAAA,KAAU,KAAA,EAAO;AAC5B,YAAA,IAAI,IAAA,GAAO,MAAM,CAAC,CAAA;AAClB,YAAA,KAAA,CAAM,CAAC,CAAA,GAAI,KAAA,CAAM,CAAC,CAAA;AAClB,YAAA,KAAA,CAAM,CAAC,CAAA,GAAI,IAAA;AACX,YAAA,OAAO,KAAA,CAAM,CAAC,CAAA,CAAE,MAAA;AAAA,UAClB;AAAA,QACF;AAEA,QAAA,IAAI,MAAA,GAAS,EAAE,KAAK,CAAA;AAEpB,QAAA,KAAA,CAAM,OAAA,CAAQ;AAAA,UACZ,KAAA;AAAA,UACA;AAAA,SACD,CAAA;AAED,QAAA,IAAI,KAAA,CAAM,SAAS,iBAAA,EAAmB;AACpC,UAAA,KAAA,CAAM,GAAA,EAAI;AAAA,QACZ;AAEA,QAAA,OAAO,MAAA;AAAA,MACT,CAAA;AAAA,IACF;AAaA,IAAA,IAAI,SAAA,GAAY,UAAA,CAAW,SAASG,UAAAA,CAAU,KAAA,EAAO;AACnD,MAAA,IAAI,IAAA,GAAO,KAAA;AACX,MAAA,IAAI,GAAA,GAAM,SAAS,KAAK,CAAA;AACxB,MAAA,IAAI,GAAA,EAAK;AACP,QAAA,IAAI,CAAC,IAAI,IAAA,EAAM;AACb,UAAA,OAAO,KAAA;AAAA,QACT;AACA,QAAA,IAAA,GAAO,GAAA,CAAI,IAAA;AAAA,MACb;AACA,MAAA,IAAI,UAAA,GAAaH,SAAA,CAAQ,UAAA,CAAW,IAAI,CAAA;AAGxC,MAAA,IAAI,QAAQ,EAAC;AACb,MAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,MAAA,IAAI,CAAA,GAAI,CAAA;AACR,MAAA,OAAO,IAAA,EAAM;AACX,QAAA,KAAA,GAAQ,CAAA;AACR,QAAA,CAAA,GAAI,IAAA,CAAK,OAAA,CAAQ,GAAA,EAAK,KAAK,CAAA;AAC3B,QAAA,IAAI,MAAM,EAAA,EAAI;AACZ,UAAA,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,KAAK,CAAC,CAAA;AAC5B,UAAA;AAAA,QACF,CAAA,MAAO;AACL,UAAA,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,KAAA,EAAO,CAAC,CAAC,CAAA;AAC/B,UAAA,OAAO,IAAI,IAAA,CAAK,MAAA,IAAU,IAAA,CAAK,CAAC,MAAM,GAAA,EAAK;AACzC,YAAA,CAAA,EAAA;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAEA,MAAA,KAAA,IAAS,IAAA,EAAM,KAAK,CAAA,EAAG,CAAA,GAAI,MAAM,MAAA,GAAS,CAAA,EAAG,CAAA,IAAK,CAAA,EAAG,CAAA,EAAA,EAAK;AACxD,QAAA,IAAA,GAAO,MAAM,CAAC,CAAA;AACd,QAAA,IAAI,SAAS,GAAA,EAAK;AAChB,UAAA,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,QACnB,CAAA,MAAA,IAAW,SAAS,IAAA,EAAM;AACxB,UAAA,EAAA,EAAA;AAAA,QACF,CAAA,MAAA,IAAW,KAAK,CAAA,EAAG;AACjB,UAAA,IAAI,SAAS,EAAA,EAAI;AAIf,YAAA,KAAA,CAAM,MAAA,CAAO,CAAA,GAAI,CAAA,EAAG,EAAE,CAAA;AACtB,YAAA,EAAA,GAAK,CAAA;AAAA,UACP,CAAA,MAAO;AACL,YAAA,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAA;AACjB,YAAA,EAAA,EAAA;AAAA,UACF;AAAA,QACF;AAAA,MACF;AACA,MAAA,IAAA,GAAO,KAAA,CAAM,KAAK,GAAG,CAAA;AAErB,MAAA,IAAI,SAAS,EAAA,EAAI;AACf,QAAA,IAAA,GAAO,aAAa,GAAA,GAAM,GAAA;AAAA,MAC5B;AAEA,MAAA,IAAI,GAAA,EAAK;AACP,QAAA,GAAA,CAAI,IAAA,GAAO,IAAA;AACX,QAAA,OAAO,YAAY,GAAG,CAAA;AAAA,MACxB;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAC,CAAA;AACD,IAAAA,SAAA,CAAQ,SAAA,GAAY,SAAA;AAkBpB,IAAA,SAAS,IAAA,CAAK,OAAO,KAAA,EAAO;AAC1B,MAAA,IAAI,UAAU,EAAA,EAAI;AAChB,QAAA,KAAA,GAAQ,GAAA;AAAA,MACV;AACA,MAAA,IAAI,UAAU,EAAA,EAAI;AAChB,QAAA,KAAA,GAAQ,GAAA;AAAA,MACV;AACA,MAAA,IAAI,QAAA,GAAW,SAAS,KAAK,CAAA;AAC7B,MAAA,IAAI,QAAA,GAAW,SAAS,KAAK,CAAA;AAC7B,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,KAAA,GAAQ,SAAS,IAAA,IAAQ,GAAA;AAAA,MAC3B;AAGA,MAAA,IAAI,QAAA,IAAY,CAAC,QAAA,CAAS,MAAA,EAAQ;AAChC,QAAA,IAAI,QAAA,EAAU;AACZ,UAAA,QAAA,CAAS,SAAS,QAAA,CAAS,MAAA;AAAA,QAC7B;AACA,QAAA,OAAO,YAAY,QAAQ,CAAA;AAAA,MAC7B;AAEA,MAAA,IAAI,QAAA,IAAY,KAAA,CAAM,KAAA,CAAM,aAAa,CAAA,EAAG;AAC1C,QAAA,OAAO,KAAA;AAAA,MACT;AAGA,MAAA,IAAI,YAAY,CAAC,QAAA,CAAS,IAAA,IAAQ,CAAC,SAAS,IAAA,EAAM;AAChD,QAAA,QAAA,CAAS,IAAA,GAAO,KAAA;AAChB,QAAA,OAAO,YAAY,QAAQ,CAAA;AAAA,MAC7B;AAEA,MAAA,IAAI,MAAA,GAAS,KAAA,CAAM,MAAA,CAAO,CAAC,MAAM,GAAA,GAC7B,KAAA,GACA,SAAA,CAAU,KAAA,CAAM,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAA,GAAI,MAAM,KAAK,CAAA;AAErD,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,QAAA,CAAS,IAAA,GAAO,MAAA;AAChB,QAAA,OAAO,YAAY,QAAQ,CAAA;AAAA,MAC7B;AACA,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAAA,SAAA,CAAQ,IAAA,GAAO,IAAA;AAEf,IAAAA,SAAA,CAAQ,UAAA,GAAa,SAAU,KAAA,EAAO;AACpC,MAAA,OAAO,MAAM,MAAA,CAAO,CAAC,MAAM,GAAA,IAAO,SAAA,CAAU,KAAK,KAAK,CAAA;AAAA,IACxD,CAAA;AAQA,IAAA,SAAS,QAAA,CAAS,OAAO,KAAA,EAAO;AAC9B,MAAA,IAAI,UAAU,EAAA,EAAI;AAChB,QAAA,KAAA,GAAQ,GAAA;AAAA,MACV;AAEA,MAAA,KAAA,GAAQ,KAAA,CAAM,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AAM/B,MAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,MAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,KAAA,GAAQ,GAAG,MAAM,CAAA,EAAG;AACvC,QAAA,IAAI,KAAA,GAAQ,KAAA,CAAM,WAAA,CAAY,GAAG,CAAA;AACjC,QAAA,IAAI,QAAQ,CAAA,EAAG;AACb,UAAA,OAAO,KAAA;AAAA,QACT;AAKA,QAAA,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA;AAC5B,QAAA,IAAI,KAAA,CAAM,KAAA,CAAM,mBAAmB,CAAA,EAAG;AACpC,UAAA,OAAO,KAAA;AAAA,QACT;AAEA,QAAA,EAAE,KAAA;AAAA,MACJ;AAGA,MAAA,OAAO,KAAA,CAAM,KAAA,GAAQ,CAAC,CAAA,CAAE,IAAA,CAAK,KAAK,CAAA,GAAI,KAAA,CAAM,MAAA,CAAO,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AAAA,IACrE;AACA,IAAAA,SAAA,CAAQ,QAAA,GAAW,QAAA;AAEnB,IAAA,IAAI,qBAAqB,WAAY;AACnC,MAAA,IAAI,GAAA,mBAAM,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA;AAC5B,MAAA,OAAO,EAAE,WAAA,IAAe,GAAA,CAAA;AAAA,IAC1B,CAAA,GAAE;AAEF,IAAA,SAAS,SAAU,CAAA,EAAG;AACpB,MAAA,OAAO,CAAA;AAAA,IACT;AAWA,IAAA,SAAS,YAAY,IAAA,EAAM;AACzB,MAAA,IAAI,aAAA,CAAc,IAAI,CAAA,EAAG;AACvB,QAAA,OAAO,GAAA,GAAM,IAAA;AAAA,MACf;AAEA,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAAA,SAAA,CAAQ,WAAA,GAAc,oBAAoB,QAAA,GAAW,WAAA;AAErD,IAAA,SAAS,cAAc,IAAA,EAAM;AAC3B,MAAA,IAAI,aAAA,CAAc,IAAI,CAAA,EAAG;AACvB,QAAA,OAAO,IAAA,CAAK,MAAM,CAAC,CAAA;AAAA,MACrB;AAEA,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAAA,SAAA,CAAQ,aAAA,GAAgB,oBAAoB,QAAA,GAAW,aAAA;AAEvD,IAAA,SAAS,cAAc,CAAA,EAAG;AACxB,MAAA,IAAI,CAAC,CAAA,EAAG;AACN,QAAA,OAAO,KAAA;AAAA,MACT;AAEA,MAAA,IAAII,UAAS,CAAA,CAAE,MAAA;AAEf,MAAA,IAAIA,UAAS,CAAA,EAA4B;AACvC,QAAA,OAAO,KAAA;AAAA,MACT;AAEA,MAAA,IAAI,CAAA,CAAE,UAAA,CAAWA,OAAAA,GAAS,CAAC,CAAA,KAAM,MAC7B,CAAA,CAAE,UAAA,CAAWA,OAAAA,GAAS,CAAC,CAAA,KAAM,EAAA,IAC7B,EAAE,UAAA,CAAWA,OAAAA,GAAS,CAAC,CAAA,KAAM,GAAA,IAC7B,CAAA,CAAE,WAAWA,OAAAA,GAAS,CAAC,CAAA,KAAM,GAAA,IAC7B,CAAA,CAAE,UAAA,CAAWA,UAAS,CAAC,CAAA,KAAM,GAAA,IAC7B,CAAA,CAAE,UAAA,CAAWA,OAAAA,GAAS,CAAC,CAAA,KAAM,GAAA,IAC7B,CAAA,CAAE,UAAA,CAAWA,OAAAA,GAAS,CAAC,MAAM,GAAA,IAC7B,CAAA,CAAE,UAAA,CAAWA,OAAAA,GAAS,CAAC,CAAA,KAAM,EAAA,IAC7B,CAAA,CAAE,UAAA,CAAWA,OAAAA,GAAS,CAAC,CAAA,KAAM,EAAA,EAAe;AAC9C,QAAA,OAAO,KAAA;AAAA,MACT;AAEA,MAAA,KAAA,IAAS,CAAA,GAAIA,OAAAA,GAAS,EAAA,EAAI,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AACrC,QAAA,IAAI,CAAA,CAAE,UAAA,CAAW,CAAC,CAAA,KAAM,EAAA,EAAc;AACpC,UAAA,OAAO,KAAA;AAAA,QACT;AAAA,MACF;AAEA,MAAA,OAAO,IAAA;AAAA,IACT;AAUA,IAAA,SAAS,0BAAA,CAA2B,QAAA,EAAU,QAAA,EAAU,mBAAA,EAAqB;AAC3E,MAAA,IAAI,GAAA,GAAM,MAAA,CAAO,QAAA,CAAS,MAAA,EAAQ,SAAS,MAAM,CAAA;AACjD,MAAA,IAAI,QAAQ,CAAA,EAAG;AACb,QAAA,OAAO,GAAA;AAAA,MACT;AAEA,MAAA,GAAA,GAAM,QAAA,CAAS,eAAe,QAAA,CAAS,YAAA;AACvC,MAAA,IAAI,QAAQ,CAAA,EAAG;AACb,QAAA,OAAO,GAAA;AAAA,MACT;AAEA,MAAA,GAAA,GAAM,QAAA,CAAS,iBAAiB,QAAA,CAAS,cAAA;AACzC,MAAA,IAAI,GAAA,KAAQ,KAAK,mBAAA,EAAqB;AACpC,QAAA,OAAO,GAAA;AAAA,MACT;AAEA,MAAA,GAAA,GAAM,QAAA,CAAS,kBAAkB,QAAA,CAAS,eAAA;AAC1C,MAAA,IAAI,QAAQ,CAAA,EAAG;AACb,QAAA,OAAO,GAAA;AAAA,MACT;AAEA,MAAA,GAAA,GAAM,QAAA,CAAS,gBAAgB,QAAA,CAAS,aAAA;AACxC,MAAA,IAAI,QAAQ,CAAA,EAAG;AACb,QAAA,OAAO,GAAA;AAAA,MACT;AAEA,MAAA,OAAO,MAAA,CAAO,QAAA,CAAS,IAAA,EAAM,QAAA,CAAS,IAAI,CAAA;AAAA,IAC5C;AACA,IAAAJ,SAAA,CAAQ,0BAAA,GAA6B,0BAAA;AAErC,IAAA,SAAS,kCAAA,CAAmC,QAAA,EAAU,QAAA,EAAU,mBAAA,EAAqB;AACnF,MAAA,IAAI,GAAA;AAEJ,MAAA,GAAA,GAAM,QAAA,CAAS,eAAe,QAAA,CAAS,YAAA;AACvC,MAAA,IAAI,QAAQ,CAAA,EAAG;AACb,QAAA,OAAO,GAAA;AAAA,MACT;AAEA,MAAA,GAAA,GAAM,QAAA,CAAS,iBAAiB,QAAA,CAAS,cAAA;AACzC,MAAA,IAAI,GAAA,KAAQ,KAAK,mBAAA,EAAqB;AACpC,QAAA,OAAO,GAAA;AAAA,MACT;AAEA,MAAA,GAAA,GAAM,QAAA,CAAS,kBAAkB,QAAA,CAAS,eAAA;AAC1C,MAAA,IAAI,QAAQ,CAAA,EAAG;AACb,QAAA,OAAO,GAAA;AAAA,MACT;AAEA,MAAA,GAAA,GAAM,QAAA,CAAS,gBAAgB,QAAA,CAAS,aAAA;AACxC,MAAA,IAAI,QAAQ,CAAA,EAAG;AACb,QAAA,OAAO,GAAA;AAAA,MACT;AAEA,MAAA,OAAO,MAAA,CAAO,QAAA,CAAS,IAAA,EAAM,QAAA,CAAS,IAAI,CAAA;AAAA,IAC5C;AACA,IAAAA,SAAA,CAAQ,kCAAA,GAAqC,kCAAA;AAW7C,IAAA,SAAS,mCAAA,CAAoC,QAAA,EAAU,QAAA,EAAU,oBAAA,EAAsB;AACrF,MAAA,IAAI,GAAA,GAAM,QAAA,CAAS,aAAA,GAAgB,QAAA,CAAS,aAAA;AAC5C,MAAA,IAAI,QAAQ,CAAA,EAAG;AACb,QAAA,OAAO,GAAA;AAAA,MACT;AAEA,MAAA,GAAA,GAAM,QAAA,CAAS,kBAAkB,QAAA,CAAS,eAAA;AAC1C,MAAA,IAAI,GAAA,KAAQ,KAAK,oBAAA,EAAsB;AACrC,QAAA,OAAO,GAAA;AAAA,MACT;AAEA,MAAA,GAAA,GAAM,MAAA,CAAO,QAAA,CAAS,MAAA,EAAQ,QAAA,CAAS,MAAM,CAAA;AAC7C,MAAA,IAAI,QAAQ,CAAA,EAAG;AACb,QAAA,OAAO,GAAA;AAAA,MACT;AAEA,MAAA,GAAA,GAAM,QAAA,CAAS,eAAe,QAAA,CAAS,YAAA;AACvC,MAAA,IAAI,QAAQ,CAAA,EAAG;AACb,QAAA,OAAO,GAAA;AAAA,MACT;AAEA,MAAA,GAAA,GAAM,QAAA,CAAS,iBAAiB,QAAA,CAAS,cAAA;AACzC,MAAA,IAAI,QAAQ,CAAA,EAAG;AACb,QAAA,OAAO,GAAA;AAAA,MACT;AAEA,MAAA,OAAO,MAAA,CAAO,QAAA,CAAS,IAAA,EAAM,QAAA,CAAS,IAAI,CAAA;AAAA,IAC5C;AACA,IAAAA,SAAA,CAAQ,mCAAA,GAAsC,mCAAA;AAE9C,IAAA,SAAS,yCAAA,CAA0C,QAAA,EAAU,QAAA,EAAU,oBAAA,EAAsB;AAC3F,MAAA,IAAI,GAAA,GAAM,QAAA,CAAS,eAAA,GAAkB,QAAA,CAAS,eAAA;AAC9C,MAAA,IAAI,GAAA,KAAQ,KAAK,oBAAA,EAAsB;AACrC,QAAA,OAAO,GAAA;AAAA,MACT;AAEA,MAAA,GAAA,GAAM,MAAA,CAAO,QAAA,CAAS,MAAA,EAAQ,QAAA,CAAS,MAAM,CAAA;AAC7C,MAAA,IAAI,QAAQ,CAAA,EAAG;AACb,QAAA,OAAO,GAAA;AAAA,MACT;AAEA,MAAA,GAAA,GAAM,QAAA,CAAS,eAAe,QAAA,CAAS,YAAA;AACvC,MAAA,IAAI,QAAQ,CAAA,EAAG;AACb,QAAA,OAAO,GAAA;AAAA,MACT;AAEA,MAAA,GAAA,GAAM,QAAA,CAAS,iBAAiB,QAAA,CAAS,cAAA;AACzC,MAAA,IAAI,QAAQ,CAAA,EAAG;AACb,QAAA,OAAO,GAAA;AAAA,MACT;AAEA,MAAA,OAAO,MAAA,CAAO,QAAA,CAAS,IAAA,EAAM,QAAA,CAAS,IAAI,CAAA;AAAA,IAC5C;AACA,IAAAA,SAAA,CAAQ,yCAAA,GAA4C,yCAAA;AAEpD,IAAA,SAAS,MAAA,CAAO,OAAO,KAAA,EAAO;AAC5B,MAAA,IAAI,UAAU,KAAA,EAAO;AACnB,QAAA,OAAO,CAAA;AAAA,MACT;AAEA,MAAA,IAAI,UAAU,IAAA,EAAM;AAClB,QAAA,OAAO,CAAA;AAAA,MACT;AAEA,MAAA,IAAI,UAAU,IAAA,EAAM;AAClB,QAAA,OAAO,EAAA;AAAA,MACT;AAEA,MAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,QAAA,OAAO,CAAA;AAAA,MACT;AAEA,MAAA,OAAO,EAAA;AAAA,IACT;AAMA,IAAA,SAAS,mCAAA,CAAoC,UAAU,QAAA,EAAU;AAC/D,MAAA,IAAI,GAAA,GAAM,QAAA,CAAS,aAAA,GAAgB,QAAA,CAAS,aAAA;AAC5C,MAAA,IAAI,QAAQ,CAAA,EAAG;AACb,QAAA,OAAO,GAAA;AAAA,MACT;AAEA,MAAA,GAAA,GAAM,QAAA,CAAS,kBAAkB,QAAA,CAAS,eAAA;AAC1C,MAAA,IAAI,QAAQ,CAAA,EAAG;AACb,QAAA,OAAO,GAAA;AAAA,MACT;AAEA,MAAA,GAAA,GAAM,MAAA,CAAO,QAAA,CAAS,MAAA,EAAQ,QAAA,CAAS,MAAM,CAAA;AAC7C,MAAA,IAAI,QAAQ,CAAA,EAAG;AACb,QAAA,OAAO,GAAA;AAAA,MACT;AAEA,MAAA,GAAA,GAAM,QAAA,CAAS,eAAe,QAAA,CAAS,YAAA;AACvC,MAAA,IAAI,QAAQ,CAAA,EAAG;AACb,QAAA,OAAO,GAAA;AAAA,MACT;AAEA,MAAA,GAAA,GAAM,QAAA,CAAS,iBAAiB,QAAA,CAAS,cAAA;AACzC,MAAA,IAAI,QAAQ,CAAA,EAAG;AACb,QAAA,OAAO,GAAA;AAAA,MACT;AAEA,MAAA,OAAO,MAAA,CAAO,QAAA,CAAS,IAAA,EAAM,QAAA,CAAS,IAAI,CAAA;AAAA,IAC5C;AACA,IAAAA,SAAA,CAAQ,mCAAA,GAAsC,mCAAA;AAO9C,IAAA,SAAS,oBAAoB,GAAA,EAAK;AAChC,MAAA,OAAO,KAAK,KAAA,CAAM,GAAA,CAAI,OAAA,CAAQ,gBAAA,EAAkB,EAAE,CAAC,CAAA;AAAA,IACrD;AACA,IAAAA,SAAA,CAAQ,mBAAA,GAAsB,mBAAA;AAM9B,IAAA,SAAS,gBAAA,CAAiB,UAAA,EAAY,SAAA,EAAW,YAAA,EAAc;AAC7D,MAAA,SAAA,GAAY,SAAA,IAAa,EAAA;AAEzB,MAAA,IAAI,UAAA,EAAY;AAEd,QAAA,IAAI,UAAA,CAAW,WAAW,MAAA,GAAS,CAAC,MAAM,GAAA,IAAO,SAAA,CAAU,CAAC,CAAA,KAAM,GAAA,EAAK;AACrE,UAAA,UAAA,IAAc,GAAA;AAAA,QAChB;AAMA,QAAA,SAAA,GAAY,UAAA,GAAa,SAAA;AAAA,MAC3B;AAgBA,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,IAAI,MAAA,GAAS,SAAS,YAAY,CAAA;AAClC,QAAA,IAAI,CAAC,MAAA,EAAQ;AACX,UAAA,MAAM,IAAI,MAAM,kCAAkC,CAAA;AAAA,QACpD;AACA,QAAA,IAAI,OAAO,IAAA,EAAM;AAEf,UAAA,IAAI,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,WAAA,CAAY,GAAG,CAAA;AACvC,UAAA,IAAI,SAAS,CAAA,EAAG;AACd,YAAA,MAAA,CAAO,OAAO,MAAA,CAAO,IAAA,CAAK,SAAA,CAAU,CAAA,EAAG,QAAQ,CAAC,CAAA;AAAA,UAClD;AAAA,QACF;AACA,QAAA,SAAA,GAAY,IAAA,CAAK,WAAA,CAAY,MAAM,CAAA,EAAG,SAAS,CAAA;AAAA,MACjD;AAEA,MAAA,OAAO,UAAU,SAAS,CAAA;AAAA,IAC5B;AACA,IAAAA,SAAA,CAAQ,gBAAA,GAAmB,gBAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACjlB3B,IAAA,iBAAA,GAAA,UAAA,CAAA;AAAA,EAAA,gDAAA,CAAAA,SAAA,EAAA;AAOA,IAAA,IAAI,IAAA,GAAO,YAAA,EAAA;AACX,IAAA,IAAI,GAAA,GAAM,OAAO,SAAA,CAAU,cAAA;AAC3B,IAAA,IAAI,YAAA,GAAe,OAAO,GAAA,KAAQ,WAAA;AAQlC,IAAA,SAAS,QAAA,GAAW;AAClB,MAAA,IAAA,CAAK,SAAS,EAAC;AACf,MAAA,IAAA,CAAK,OAAO,YAAA,mBAAe,IAAI,KAAI,mBAAI,MAAA,CAAO,OAAO,IAAI,CAAA;AAAA,IAC3D;AAKA,IAAA,QAAA,CAAS,SAAA,GAAY,SAAS,kBAAA,CAAmB,MAAA,EAAQ,gBAAA,EAAkB;AACzE,MAAA,IAAI,GAAA,GAAM,IAAI,QAAA,EAAS;AACvB,MAAA,KAAA,IAAS,IAAI,CAAA,EAAG,GAAA,GAAM,OAAO,MAAA,EAAQ,CAAA,GAAI,KAAK,CAAA,EAAA,EAAK;AACjD,QAAA,GAAA,CAAI,GAAA,CAAI,MAAA,CAAO,CAAC,CAAA,EAAG,gBAAgB,CAAA;AAAA,MACrC;AACA,MAAA,OAAO,GAAA;AAAA,IACT,CAAA;AAQA,IAAA,QAAA,CAAS,SAAA,CAAU,IAAA,GAAO,SAAS,aAAA,GAAgB;AACjD,MAAA,OAAO,YAAA,GAAe,KAAK,IAAA,CAAK,IAAA,GAAO,OAAO,mBAAA,CAAoB,IAAA,CAAK,IAAI,CAAA,CAAE,MAAA;AAAA,IAC/E,CAAA;AAOA,IAAA,QAAA,CAAS,SAAA,CAAU,GAAA,GAAM,SAAS,YAAA,CAAa,MAAM,gBAAA,EAAkB;AACrE,MAAA,IAAI,IAAA,GAAO,YAAA,GAAe,IAAA,GAAO,IAAA,CAAK,YAAY,IAAI,CAAA;AACtD,MAAA,IAAI,WAAA,GAAc,YAAA,GAAe,IAAA,CAAK,GAAA,CAAI,IAAI,IAAI,GAAA,CAAI,IAAA,CAAK,IAAA,CAAK,IAAA,EAAM,IAAI,CAAA;AAC1E,MAAA,IAAI,GAAA,GAAM,KAAK,MAAA,CAAO,MAAA;AACtB,MAAA,IAAI,CAAC,eAAe,gBAAA,EAAkB;AACpC,QAAA,IAAA,CAAK,MAAA,CAAO,KAAK,IAAI,CAAA;AAAA,MACvB;AACA,MAAA,IAAI,CAAC,WAAA,EAAa;AAChB,QAAA,IAAI,YAAA,EAAc;AAChB,UAAA,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,GAAG,CAAA;AAAA,QACzB,CAAA,MAAO;AACL,UAAA,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA,GAAI,GAAA;AAAA,QACpB;AAAA,MACF;AAAA,IACF,CAAA;AAOA,IAAA,QAAA,CAAS,SAAA,CAAU,GAAA,GAAM,SAAS,YAAA,CAAa,IAAA,EAAM;AACnD,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA;AAAA,MAC3B,CAAA,MAAO;AACL,QAAA,IAAI,IAAA,GAAO,IAAA,CAAK,WAAA,CAAY,IAAI,CAAA;AAChC,QAAA,OAAO,GAAA,CAAI,IAAA,CAAK,IAAA,CAAK,IAAA,EAAM,IAAI,CAAA;AAAA,MACjC;AAAA,IACF,CAAA;AAOA,IAAA,QAAA,CAAS,SAAA,CAAU,OAAA,GAAU,SAAS,gBAAA,CAAiB,IAAA,EAAM;AAC3D,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,IAAI,GAAA,GAAM,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA;AAC5B,QAAA,IAAI,OAAO,CAAA,EAAG;AACV,UAAA,OAAO,GAAA;AAAA,QACX;AAAA,MACF,CAAA,MAAO;AACL,QAAA,IAAI,IAAA,GAAO,IAAA,CAAK,WAAA,CAAY,IAAI,CAAA;AAChC,QAAA,IAAI,GAAA,CAAI,IAAA,CAAK,IAAA,CAAK,IAAA,EAAM,IAAI,CAAA,EAAG;AAC7B,UAAA,OAAO,IAAA,CAAK,KAAK,IAAI,CAAA;AAAA,QACvB;AAAA,MACF;AAEA,MAAA,MAAM,IAAI,KAAA,CAAM,GAAA,GAAM,IAAA,GAAO,sBAAsB,CAAA;AAAA,IACrD,CAAA;AAOA,IAAA,QAAA,CAAS,SAAA,CAAU,EAAA,GAAK,SAAS,WAAA,CAAY,IAAA,EAAM;AACjD,MAAA,IAAI,IAAA,IAAQ,CAAA,IAAK,IAAA,GAAO,IAAA,CAAK,OAAO,MAAA,EAAQ;AAC1C,QAAA,OAAO,IAAA,CAAK,OAAO,IAAI,CAAA;AAAA,MACzB;AACA,MAAA,MAAM,IAAI,KAAA,CAAM,wBAAA,GAA2B,IAAI,CAAA;AAAA,IACjD,CAAA;AAOA,IAAA,QAAA,CAAS,SAAA,CAAU,OAAA,GAAU,SAAS,gBAAA,GAAmB;AACvD,MAAA,OAAO,IAAA,CAAK,OAAO,KAAA,EAAM;AAAA,IAC3B,CAAA;AAEA,IAAAA,SAAA,CAAQ,QAAA,GAAW,QAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACxHnB,IAAA,oBAAA,GAAA,UAAA,CAAA;AAAA,EAAA,mDAAA,CAAAA,SAAA,EAAA;AAOA,IAAA,IAAI,IAAA,GAAO,YAAA,EAAA;AAMX,IAAA,SAAS,sBAAA,CAAuB,UAAU,QAAA,EAAU;AAElD,MAAA,IAAI,QAAQ,QAAA,CAAS,aAAA;AACrB,MAAA,IAAI,QAAQ,QAAA,CAAS,aAAA;AACrB,MAAA,IAAI,UAAU,QAAA,CAAS,eAAA;AACvB,MAAA,IAAI,UAAU,QAAA,CAAS,eAAA;AACvB,MAAA,OAAO,KAAA,GAAQ,KAAA,IAAS,KAAA,IAAS,KAAA,IAAS,OAAA,IAAW,WAC9C,IAAA,CAAK,mCAAA,CAAoC,QAAA,EAAU,QAAQ,CAAA,IAAK,CAAA;AAAA,IACzE;AAOA,IAAA,SAAS,WAAA,GAAc;AACrB,MAAA,IAAA,CAAK,SAAS,EAAC;AACf,MAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AAEf,MAAA,IAAA,CAAK,KAAA,GAAQ,EAAC,aAAA,EAAe,EAAA,EAAI,iBAAiB,CAAA,EAAC;AAAA,IACrD;AAQA,IAAA,WAAA,CAAY,SAAA,CAAU,eAAA,GACpB,SAAS,mBAAA,CAAoB,WAAW,QAAA,EAAU;AAChD,MAAA,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,SAAA,EAAW,QAAQ,CAAA;AAAA,IACzC,CAAA;AAOF,IAAA,WAAA,CAAY,SAAA,CAAU,GAAA,GAAM,SAAS,eAAA,CAAgB,QAAA,EAAU;AAC7D,MAAA,IAAI,sBAAA,CAAuB,IAAA,CAAK,KAAA,EAAO,QAAQ,CAAA,EAAG;AAChD,QAAA,IAAA,CAAK,KAAA,GAAQ,QAAA;AACb,QAAA,IAAA,CAAK,MAAA,CAAO,KAAK,QAAQ,CAAA;AAAA,MAC3B,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,OAAA,GAAU,KAAA;AACf,QAAA,IAAA,CAAK,MAAA,CAAO,KAAK,QAAQ,CAAA;AAAA,MAC3B;AAAA,IACF,CAAA;AAWA,IAAA,WAAA,CAAY,SAAA,CAAU,OAAA,GAAU,SAAS,mBAAA,GAAsB;AAC7D,MAAA,IAAI,CAAC,KAAK,OAAA,EAAS;AACjB,QAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,mCAAmC,CAAA;AACzD,QAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AAAA,MACjB;AACA,MAAA,OAAO,IAAA,CAAK,MAAA;AAAA,IACd,CAAA;AAEA,IAAAA,SAAA,CAAQ,WAAA,GAAc,WAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;AC9EtB,IAAA,4BAAA,GAAA,UAAA,CAAA;AAAA,EAAA,2DAAA,CAAAA,SAAA,EAAA;AAOA,IAAA,IAAI,SAAA,GAAY,kBAAA,EAAA;AAChB,IAAA,IAAI,IAAA,GAAO,YAAA,EAAA;AACX,IAAA,IAAI,WAAW,iBAAA,EAAA,CAAuB,QAAA;AACtC,IAAA,IAAI,cAAc,oBAAA,EAAA,CAA0B,WAAA;AAU5C,IAAA,SAASK,oBAAmB,KAAA,EAAO;AACjC,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,KAAA,GAAQ,EAAC;AAAA,MACX;AACA,MAAA,IAAA,CAAK,KAAA,GAAQ,IAAA,CAAK,MAAA,CAAO,KAAA,EAAO,QAAQ,IAAI,CAAA;AAC5C,MAAA,IAAA,CAAK,WAAA,GAAc,IAAA,CAAK,MAAA,CAAO,KAAA,EAAO,cAAc,IAAI,CAAA;AACxD,MAAA,IAAA,CAAK,eAAA,GAAkB,IAAA,CAAK,MAAA,CAAO,KAAA,EAAO,kBAAkB,KAAK,CAAA;AACjE,MAAA,IAAA,CAAK,qBAAA,GAAwB,IAAA,CAAK,MAAA,CAAO,KAAA,EAAO,wBAAwB,KAAK,CAAA;AAC7E,MAAA,IAAA,CAAK,QAAA,GAAW,IAAI,QAAA,EAAS;AAC7B,MAAA,IAAA,CAAK,MAAA,GAAS,IAAI,QAAA,EAAS;AAC3B,MAAA,IAAA,CAAK,SAAA,GAAY,IAAI,WAAA,EAAY;AACjC,MAAA,IAAA,CAAK,gBAAA,GAAmB,IAAA;AAAA,IAC1B;AAEA,IAAAA,mBAAAA,CAAmB,UAAU,QAAA,GAAW,CAAA;AAOxC,IAAAA,mBAAAA,CAAmB,aAAA,GACjB,SAAS,gCAAA,CAAiC,oBAAoB,YAAA,EAAc;AAC1E,MAAA,IAAI,aAAa,kBAAA,CAAmB,UAAA;AACpC,MAAA,IAAI,YAAY,IAAIA,mBAAAA,CAAmB,OAAO,MAAA,CAAO,YAAA,IAAgB,EAAC,EAAG;AAAA,QACvE,MAAM,kBAAA,CAAmB,IAAA;AAAA,QACzB;AAAA,OACD,CAAC,CAAA;AACF,MAAA,kBAAA,CAAmB,WAAA,CAAY,SAAU,OAAA,EAAS;AAChD,QAAA,IAAI,UAAA,GAAa;AAAA,UACf,SAAA,EAAW;AAAA,YACT,MAAM,OAAA,CAAQ,aAAA;AAAA,YACd,QAAQ,OAAA,CAAQ;AAAA;AAClB,SACF;AAEA,QAAA,IAAI,OAAA,CAAQ,UAAU,IAAA,EAAM;AAC1B,UAAA,UAAA,CAAW,SAAS,OAAA,CAAQ,MAAA;AAC5B,UAAA,IAAI,cAAc,IAAA,EAAM;AACtB,YAAA,UAAA,CAAW,MAAA,GAAS,IAAA,CAAK,QAAA,CAAS,UAAA,EAAY,WAAW,MAAM,CAAA;AAAA,UACjE;AAEA,UAAA,UAAA,CAAW,QAAA,GAAW;AAAA,YACpB,MAAM,OAAA,CAAQ,YAAA;AAAA,YACd,QAAQ,OAAA,CAAQ;AAAA,WAClB;AAEA,UAAA,IAAI,OAAA,CAAQ,QAAQ,IAAA,EAAM;AACxB,YAAA,UAAA,CAAW,OAAO,OAAA,CAAQ,IAAA;AAAA,UAC5B;AAAA,QACF;AAEA,QAAA,SAAA,CAAU,WAAW,UAAU,CAAA;AAAA,MACjC,CAAC,CAAA;AACD,MAAA,kBAAA,CAAmB,OAAA,CAAQ,OAAA,CAAQ,SAAU,UAAA,EAAY;AACvD,QAAA,IAAI,cAAA,GAAiB,UAAA;AACrB,QAAA,IAAI,eAAe,IAAA,EAAM;AACvB,UAAA,cAAA,GAAiB,IAAA,CAAK,QAAA,CAAS,UAAA,EAAY,UAAU,CAAA;AAAA,QACvD;AAEA,QAAA,IAAI,CAAC,SAAA,CAAU,QAAA,CAAS,GAAA,CAAI,cAAc,CAAA,EAAG;AAC3C,UAAA,SAAA,CAAU,QAAA,CAAS,IAAI,cAAc,CAAA;AAAA,QACvC;AAEA,QAAA,IAAI,OAAA,GAAU,kBAAA,CAAmB,gBAAA,CAAiB,UAAU,CAAA;AAC5D,QAAA,IAAI,WAAW,IAAA,EAAM;AACnB,UAAA,SAAA,CAAU,gBAAA,CAAiB,YAAY,OAAO,CAAA;AAAA,QAChD;AAAA,MACF,CAAC,CAAA;AACD,MAAA,OAAO,SAAA;AAAA,IACT,CAAA;AAYF,IAAAA,mBAAAA,CAAmB,SAAA,CAAU,UAAA,GAC3B,SAAS,8BAA8B,KAAA,EAAO;AAC5C,MAAA,IAAI,SAAA,GAAY,IAAA,CAAK,MAAA,CAAO,KAAA,EAAO,WAAW,CAAA;AAC9C,MAAA,IAAI,QAAA,GAAW,IAAA,CAAK,MAAA,CAAO,KAAA,EAAO,YAAY,IAAI,CAAA;AAClD,MAAA,IAAI,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,KAAA,EAAO,UAAU,IAAI,CAAA;AAC9C,MAAA,IAAIC,MAAAA,GAAO,IAAA,CAAK,MAAA,CAAO,KAAA,EAAO,QAAQ,IAAI,CAAA;AAE1C,MAAA,IAAI,CAAC,KAAK,eAAA,EAAiB;AACzB,QAAA,IAAI,KAAK,gBAAA,CAAiB,SAAA,EAAW,UAAU,MAAA,EAAQA,MAAI,MAAM,KAAA,EAAO;AACtE,UAAA;AAAA,QACF;AAAA,MACF;AAEA,MAAA,IAAI,UAAU,IAAA,EAAM;AAClB,QAAA,MAAA,GAAS,OAAO,MAAM,CAAA;AACtB,QAAA,IAAI,CAAC,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,MAAM,CAAA,EAAG;AAC9B,UAAA,IAAA,CAAK,QAAA,CAAS,IAAI,MAAM,CAAA;AAAA,QAC1B;AAAA,MACF;AAEA,MAAA,IAAIA,UAAQ,IAAA,EAAM;AAChB,QAAAA,MAAAA,GAAO,OAAOA,MAAI,CAAA;AAClB,QAAA,IAAI,CAAC,IAAA,CAAK,MAAA,CAAO,GAAA,CAAIA,MAAI,CAAA,EAAG;AAC1B,UAAA,IAAA,CAAK,MAAA,CAAO,IAAIA,MAAI,CAAA;AAAA,QACtB;AAAA,MACF;AAEA,MAAA,IAAA,CAAK,UAAU,GAAA,CAAI;AAAA,QACjB,eAAe,SAAA,CAAU,IAAA;AAAA,QACzB,iBAAiB,SAAA,CAAU,MAAA;AAAA,QAC3B,YAAA,EAAc,QAAA,IAAY,IAAA,IAAQ,QAAA,CAAS,IAAA;AAAA,QAC3C,cAAA,EAAgB,QAAA,IAAY,IAAA,IAAQ,QAAA,CAAS,MAAA;AAAA,QAC7C,MAAA;AAAA,QACA,IAAA,EAAMA;AAAA,OACP,CAAA;AAAA,IACH,CAAA;AAKF,IAAAD,oBAAmB,SAAA,CAAU,gBAAA,GAC3B,SAAS,mCAAA,CAAoC,aAAa,cAAA,EAAgB;AACxE,MAAA,IAAI,MAAA,GAAS,WAAA;AACb,MAAA,IAAI,IAAA,CAAK,eAAe,IAAA,EAAM;AAC5B,QAAA,MAAA,GAAS,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,WAAA,EAAa,MAAM,CAAA;AAAA,MACjD;AAEA,MAAA,IAAI,kBAAkB,IAAA,EAAM;AAG1B,QAAA,IAAI,CAAC,KAAK,gBAAA,EAAkB;AAC1B,UAAA,IAAA,CAAK,gBAAA,mBAAmB,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA;AAAA,QAC5C;AACA,QAAA,IAAA,CAAK,gBAAA,CAAiB,IAAA,CAAK,WAAA,CAAY,MAAM,CAAC,CAAA,GAAI,cAAA;AAAA,MACpD,CAAA,MAAA,IAAW,KAAK,gBAAA,EAAkB;AAGhC,QAAA,OAAO,IAAA,CAAK,gBAAA,CAAiB,IAAA,CAAK,WAAA,CAAY,MAAM,CAAC,CAAA;AACrD,QAAA,IAAI,OAAO,IAAA,CAAK,IAAA,CAAK,gBAAgB,CAAA,CAAE,WAAW,CAAA,EAAG;AACnD,UAAA,IAAA,CAAK,gBAAA,GAAmB,IAAA;AAAA,QAC1B;AAAA,MACF;AAAA,IACF,CAAA;AAkBF,IAAAA,oBAAmB,SAAA,CAAU,cAAA,GAC3B,SAAS,iCAAA,CAAkC,kBAAA,EAAoB,aAAa,cAAA,EAAgB;AAC1F,MAAA,IAAI,UAAA,GAAa,WAAA;AAEjB,MAAA,IAAI,eAAe,IAAA,EAAM;AACvB,QAAA,IAAI,kBAAA,CAAmB,QAAQ,IAAA,EAAM;AACnC,UAAA,MAAM,IAAI,KAAA;AAAA,YACR,CAAA,4IAAA;AAAA,WAEF;AAAA,QACF;AACA,QAAA,UAAA,GAAa,kBAAA,CAAmB,IAAA;AAAA,MAClC;AACA,MAAA,IAAI,aAAa,IAAA,CAAK,WAAA;AAEtB,MAAA,IAAI,cAAc,IAAA,EAAM;AACtB,QAAA,UAAA,GAAa,IAAA,CAAK,QAAA,CAAS,UAAA,EAAY,UAAU,CAAA;AAAA,MACnD;AAGA,MAAA,IAAI,UAAA,GAAa,IAAI,QAAA,EAAS;AAC9B,MAAA,IAAI,QAAA,GAAW,IAAI,QAAA,EAAS;AAG5B,MAAA,IAAA,CAAK,SAAA,CAAU,eAAA,CAAgB,SAAU,OAAA,EAAS;AAChD,QAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,UAAA,IAAc,OAAA,CAAQ,gBAAgB,IAAA,EAAM;AAEjE,UAAA,IAAI,QAAA,GAAW,mBAAmB,mBAAA,CAAoB;AAAA,YACpD,MAAM,OAAA,CAAQ,YAAA;AAAA,YACd,QAAQ,OAAA,CAAQ;AAAA,WACjB,CAAA;AACD,UAAA,IAAI,QAAA,CAAS,UAAU,IAAA,EAAM;AAE3B,YAAA,OAAA,CAAQ,SAAS,QAAA,CAAS,MAAA;AAC1B,YAAA,IAAI,kBAAkB,IAAA,EAAM;AAC1B,cAAA,OAAA,CAAQ,MAAA,GAAS,IAAA,CAAK,IAAA,CAAK,cAAA,EAAgB,QAAQ,MAAM,CAAA;AAAA,YAC3D;AACA,YAAA,IAAI,cAAc,IAAA,EAAM;AACtB,cAAA,OAAA,CAAQ,MAAA,GAAS,IAAA,CAAK,QAAA,CAAS,UAAA,EAAY,QAAQ,MAAM,CAAA;AAAA,YAC3D;AACA,YAAA,OAAA,CAAQ,eAAe,QAAA,CAAS,IAAA;AAChC,YAAA,OAAA,CAAQ,iBAAiB,QAAA,CAAS,MAAA;AAClC,YAAA,IAAI,QAAA,CAAS,QAAQ,IAAA,EAAM;AACzB,cAAA,OAAA,CAAQ,OAAO,QAAA,CAAS,IAAA;AAAA,YAC1B;AAAA,UACF;AAAA,QACF;AAEA,QAAA,IAAI,SAAS,OAAA,CAAQ,MAAA;AACrB,QAAA,IAAI,UAAU,IAAA,IAAQ,CAAC,UAAA,CAAW,GAAA,CAAI,MAAM,CAAA,EAAG;AAC7C,UAAA,UAAA,CAAW,IAAI,MAAM,CAAA;AAAA,QACvB;AAEA,QAAA,IAAIC,SAAO,OAAA,CAAQ,IAAA;AACnB,QAAA,IAAIA,UAAQ,IAAA,IAAQ,CAAC,QAAA,CAAS,GAAA,CAAIA,MAAI,CAAA,EAAG;AACvC,UAAA,QAAA,CAAS,IAAIA,MAAI,CAAA;AAAA,QACnB;AAAA,MAEF,GAAG,IAAI,CAAA;AACP,MAAA,IAAA,CAAK,QAAA,GAAW,UAAA;AAChB,MAAA,IAAA,CAAK,MAAA,GAAS,QAAA;AAGd,MAAA,kBAAA,CAAmB,OAAA,CAAQ,OAAA,CAAQ,SAAUC,WAAAA,EAAY;AACvD,QAAA,IAAI,OAAA,GAAU,kBAAA,CAAmB,gBAAA,CAAiBA,WAAU,CAAA;AAC5D,QAAA,IAAI,WAAW,IAAA,EAAM;AACnB,UAAA,IAAI,kBAAkB,IAAA,EAAM;AAC1B,YAAAA,WAAAA,GAAa,IAAA,CAAK,IAAA,CAAK,cAAA,EAAgBA,WAAU,CAAA;AAAA,UACnD;AACA,UAAA,IAAI,cAAc,IAAA,EAAM;AACtB,YAAAA,WAAAA,GAAa,IAAA,CAAK,QAAA,CAAS,UAAA,EAAYA,WAAU,CAAA;AAAA,UACnD;AACA,UAAA,IAAA,CAAK,gBAAA,CAAiBA,aAAY,OAAO,CAAA;AAAA,QAC3C;AAAA,MACF,GAAG,IAAI,CAAA;AAAA,IACT,CAAA;AAaF,IAAAF,mBAAAA,CAAmB,UAAU,gBAAA,GAC3B,SAAS,mCAAmC,UAAA,EAAY,SAAA,EAAW,SACvB,KAAA,EAAO;AAKjD,MAAA,IAAI,SAAA,IAAa,OAAO,SAAA,CAAU,IAAA,KAAS,YAAY,OAAO,SAAA,CAAU,WAAW,QAAA,EAAU;AAC3F,QAAA,IAAI,OAAA,GAAU,8OAAA;AAId,QAAA,IAAI,KAAK,qBAAA,EAAuB;AAC9B,UAAA,IAAI,OAAO,OAAA,KAAY,WAAA,IAAe,OAAA,CAAQ,IAAA,EAAM;AAClD,YAAA,OAAA,CAAQ,KAAK,OAAO,CAAA;AAAA,UACtB;AACA,UAAA,OAAO,KAAA;AAAA,QACT,CAAA,MAAO;AACL,UAAA,MAAM,IAAI,MAAM,OAAO,CAAA;AAAA,QACzB;AAAA,MACF;AAEA,MAAA,IAAI,cAAc,MAAA,IAAU,UAAA,IAAc,QAAA,IAAY,UAAA,IAC/C,WAAW,IAAA,GAAO,CAAA,IAAK,UAAA,CAAW,MAAA,IAAU,KAC5C,CAAC,SAAA,IAAa,CAAC,OAAA,IAAW,CAAC,KAAA,EAAO;AAEvC,QAAA;AAAA,MACF,CAAA,MAAA,IACS,cAAc,MAAA,IAAU,UAAA,IAAc,YAAY,UAAA,IAC/C,SAAA,IAAa,MAAA,IAAU,SAAA,IAAa,QAAA,IAAY,SAAA,IAChD,WAAW,IAAA,GAAO,CAAA,IAAK,UAAA,CAAW,MAAA,IAAU,CAAA,IAC5C,SAAA,CAAU,OAAO,CAAA,IAAK,SAAA,CAAU,MAAA,IAAU,CAAA,IAC1C,OAAA,EAAS;AAEnB,QAAA;AAAA,MACF,CAAA,MACK;AACH,QAAA,IAAI,OAAA,GAAU,mBAAA,GAAsB,IAAA,CAAK,SAAA,CAAU;AAAA,UACjD,SAAA,EAAW,UAAA;AAAA,UACX,MAAA,EAAQ,OAAA;AAAA,UACR,QAAA,EAAU,SAAA;AAAA,UACV,IAAA,EAAM;AAAA,SACP,CAAA;AAED,QAAA,IAAI,KAAK,qBAAA,EAAuB;AAC9B,UAAA,IAAI,OAAO,OAAA,KAAY,WAAA,IAAe,OAAA,CAAQ,IAAA,EAAM;AAClD,YAAA,OAAA,CAAQ,KAAK,OAAO,CAAA;AAAA,UACtB;AACA,UAAA,OAAO,KAAA;AAAA,QACT,CAAA,MAAO;AACL,UAAA,MAAM,IAAI,MAAM,OAAO,CAAA;AAAA,QACzB;AAAA,MACF;AAAA,IACF,CAAA;AAMF,IAAAA,mBAAAA,CAAmB,SAAA,CAAU,kBAAA,GAC3B,SAAS,oCAAA,GAAuC;AAC9C,MAAA,IAAI,uBAAA,GAA0B,CAAA;AAC9B,MAAA,IAAI,qBAAA,GAAwB,CAAA;AAC5B,MAAA,IAAI,sBAAA,GAAyB,CAAA;AAC7B,MAAA,IAAI,oBAAA,GAAuB,CAAA;AAC3B,MAAA,IAAI,YAAA,GAAe,CAAA;AACnB,MAAA,IAAI,cAAA,GAAiB,CAAA;AACrB,MAAA,IAAI,MAAA,GAAS,EAAA;AACb,MAAA,IAAI,IAAA;AACJ,MAAA,IAAI,OAAA;AACJ,MAAA,IAAI,OAAA;AACJ,MAAA,IAAI,SAAA;AAEJ,MAAA,IAAI,QAAA,GAAW,IAAA,CAAK,SAAA,CAAU,OAAA,EAAQ;AACtC,MAAA,KAAA,IAAS,IAAI,CAAA,EAAG,GAAA,GAAM,SAAS,MAAA,EAAQ,CAAA,GAAI,KAAK,CAAA,EAAA,EAAK;AACnD,QAAA,OAAA,GAAU,SAAS,CAAC,CAAA;AACpB,QAAA,IAAA,GAAO,EAAA;AAEP,QAAA,IAAI,OAAA,CAAQ,kBAAkB,qBAAA,EAAuB;AACnD,UAAA,uBAAA,GAA0B,CAAA;AAC1B,UAAA,OAAO,OAAA,CAAQ,kBAAkB,qBAAA,EAAuB;AACtD,YAAA,IAAA,IAAQ,GAAA;AACR,YAAA,qBAAA,EAAA;AAAA,UACF;AAAA,QACF,CAAA,MACK;AACH,UAAA,IAAI,IAAI,CAAA,EAAG;AACT,YAAA,IAAI,CAAC,KAAK,mCAAA,CAAoC,OAAA,EAAS,SAAS,CAAA,GAAI,CAAC,CAAC,CAAA,EAAG;AACvE,cAAA;AAAA,YACF;AACA,YAAA,IAAA,IAAQ,GAAA;AAAA,UACV;AAAA,QACF;AAEA,QAAA,IAAA,IAAQ,SAAA,CAAU,MAAA,CAAO,OAAA,CAAQ,eAAA,GACJ,uBAAuB,CAAA;AACpD,QAAA,uBAAA,GAA0B,OAAA,CAAQ,eAAA;AAElC,QAAA,IAAI,OAAA,CAAQ,UAAU,IAAA,EAAM;AAC1B,UAAA,SAAA,GAAY,IAAA,CAAK,QAAA,CAAS,OAAA,CAAQ,OAAA,CAAQ,MAAM,CAAA;AAChD,UAAA,IAAA,IAAQ,SAAA,CAAU,MAAA,CAAO,SAAA,GAAY,cAAc,CAAA;AACnD,UAAA,cAAA,GAAiB,SAAA;AAGjB,UAAA,IAAA,IAAQ,SAAA,CAAU,MAAA,CAAO,OAAA,CAAQ,YAAA,GAAe,IACnB,oBAAoB,CAAA;AACjD,UAAA,oBAAA,GAAuB,QAAQ,YAAA,GAAe,CAAA;AAE9C,UAAA,IAAA,IAAQ,SAAA,CAAU,MAAA,CAAO,OAAA,CAAQ,cAAA,GACJ,sBAAsB,CAAA;AACnD,UAAA,sBAAA,GAAyB,OAAA,CAAQ,cAAA;AAEjC,UAAA,IAAI,OAAA,CAAQ,QAAQ,IAAA,EAAM;AACxB,YAAA,OAAA,GAAU,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,OAAA,CAAQ,IAAI,CAAA;AAC1C,YAAA,IAAA,IAAQ,SAAA,CAAU,MAAA,CAAO,OAAA,GAAU,YAAY,CAAA;AAC/C,YAAA,YAAA,GAAe,OAAA;AAAA,UACjB;AAAA,QACF;AAEA,QAAA,MAAA,IAAU,IAAA;AAAA,MACZ;AAEA,MAAA,OAAO,MAAA;AAAA,IACT,CAAA;AAEF,IAAAA,oBAAmB,SAAA,CAAU,uBAAA,GAC3B,SAAS,yCAAA,CAA0C,UAAU,WAAA,EAAa;AACxE,MAAA,OAAO,QAAA,CAAS,GAAA,CAAI,SAAU,MAAA,EAAQ;AACpC,QAAA,IAAI,CAAC,KAAK,gBAAA,EAAkB;AAC1B,UAAA,OAAO,IAAA;AAAA,QACT;AACA,QAAA,IAAI,eAAe,IAAA,EAAM;AACvB,UAAA,MAAA,GAAS,IAAA,CAAK,QAAA,CAAS,WAAA,EAAa,MAAM,CAAA;AAAA,QAC5C;AACA,QAAA,IAAI,GAAA,GAAM,IAAA,CAAK,WAAA,CAAY,MAAM,CAAA;AACjC,QAAA,OAAO,MAAA,CAAO,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,IAAA,CAAK,gBAAA,EAAkB,GAAG,CAAA,GAClE,IAAA,CAAK,gBAAA,CAAiB,GAAG,CAAA,GACzB,IAAA;AAAA,MACN,GAAG,IAAI,CAAA;AAAA,IACT,CAAA;AAKF,IAAAA,mBAAAA,CAAmB,SAAA,CAAU,MAAA,GAC3B,SAAS,yBAAA,GAA4B;AACnC,MAAA,IAAI,GAAA,GAAM;AAAA,QACR,SAAS,IAAA,CAAK,QAAA;AAAA,QACd,OAAA,EAAS,IAAA,CAAK,QAAA,CAAS,OAAA,EAAQ;AAAA,QAC/B,KAAA,EAAO,IAAA,CAAK,MAAA,CAAO,OAAA,EAAQ;AAAA,QAC3B,QAAA,EAAU,KAAK,kBAAA;AAAmB,OACpC;AACA,MAAA,IAAI,IAAA,CAAK,SAAS,IAAA,EAAM;AACtB,QAAA,GAAA,CAAI,OAAO,IAAA,CAAK,KAAA;AAAA,MAClB;AACA,MAAA,IAAI,IAAA,CAAK,eAAe,IAAA,EAAM;AAC5B,QAAA,GAAA,CAAI,aAAa,IAAA,CAAK,WAAA;AAAA,MACxB;AACA,MAAA,IAAI,KAAK,gBAAA,EAAkB;AACzB,QAAA,GAAA,CAAI,iBAAiB,IAAA,CAAK,uBAAA,CAAwB,GAAA,CAAI,OAAA,EAAS,IAAI,UAAU,CAAA;AAAA,MAC/E;AAEA,MAAA,OAAO,GAAA;AAAA,IACT,CAAA;AAKF,IAAAA,mBAAAA,CAAmB,SAAA,CAAU,QAAA,GAC3B,SAAS,2BAAA,GAA8B;AACrC,MAAA,OAAO,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,MAAA,EAAQ,CAAA;AAAA,IACrC,CAAA;AAEF,IAAAL,SAAA,CAAQ,kBAAA,GAAqBK,mBAAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACzbtB,IAAM,GAAA,GAAM,CAAA;AACZ,IAAM,KAAA,GAAQ,CAAA;AACd,IAAM,QAAA,GAAW,CAAA;AACjB,IAAM,SAAA,GAAY,CAAA;AAClB,IAAM,IAAA,GAAO,CAAA;AACb,IAAMG,OAAAA,GAAS,CAAA;AACf,IAAM,SAAA,GAAY,CAAA;AAClB,IAAM,GAAA,GAAM,CAAA;AACZ,IAAM,MAAA,GAAS,CAAA;AACf,IAAM,KAAA,GAAQ,CAAA;AACd,IAAMC,OAAAA,GAAS,EAAA;AACf,IAAM,UAAA,GAAa,EAAA;AACnB,IAAM,SAAA,GAAY,EAAA;AAClB,IAAM,UAAA,GAAa,EAAA;AACnB,IAAM,GAAA,GAAM,EAAA;AACZ,IAAM,GAAA,GAAM,EAAA;AACZ,IAAM,KAAA,GAAQ,EAAA;AACd,IAAM,SAAA,GAAY,EAAA;AAClB,IAAM,KAAA,GAAQ,EAAA;AACd,IAAM,iBAAA,GAAoB,EAAA;AAC1B,IAAM,kBAAA,GAAqB,EAAA;AAC3B,IAAM,eAAA,GAAkB,EAAA;AACxB,IAAM,gBAAA,GAAmB,EAAA;AACzB,IAAM,gBAAA,GAAmB,EAAA;AACzB,IAAM,iBAAA,GAAoB,EAAA;AAC1B,IAAM,OAAA,GAAU,EAAA;;;AC3BvB,IAAMC,IAAAA,GAAM,CAAA;AAOL,SAAS,QAAQC,KAAAA,EAAM;AAC1B,EAAA,OAAOA,KAAAA,IAAQ,MAAUA,KAAAA,IAAQ,EAAA;AACrC;AAKO,SAAS,WAAWA,KAAAA,EAAM;AAC7B,EAAA,OACI,QAAQA,KAAI,CAAA;AAAA,EACXA,KAAAA,IAAQ,MAAUA,KAAAA,IAAQ,EAAA;AAAA,EAC1BA,KAAAA,IAAQ,MAAUA,KAAAA,IAAQ,GAAA;AAEnC;AAIO,SAAS,kBAAkBA,KAAAA,EAAM;AACpC,EAAA,OAAOA,KAAAA,IAAQ,MAAUA,KAAAA,IAAQ,EAAA;AACrC;AAIO,SAAS,kBAAkBA,KAAAA,EAAM;AACpC,EAAA,OAAOA,KAAAA,IAAQ,MAAUA,KAAAA,IAAQ,GAAA;AACrC;AAIO,SAAS,SAASA,KAAAA,EAAM;AAC3B,EAAA,OAAO,iBAAA,CAAkBA,KAAI,CAAA,IAAK,iBAAA,CAAkBA,KAAI,CAAA;AAC5D;AASO,SAAS,WAAWA,KAAAA,EAAM;AAC7B,EAAA,OAAOA,KAAAA,IAAQ,GAAA;AACnB;AAIO,SAAS,YAAYA,KAAAA,EAAM;AAC9B,EAAA,OAAO,SAASA,KAAI,CAAA,IAAK,UAAA,CAAWA,KAAI,KAAKA,KAAAA,KAAS,EAAA;AAC1D;AAIO,SAAS,OAAOA,KAAAA,EAAM;AACzB,EAAA,OAAO,YAAYA,KAAI,CAAA,IAAK,OAAA,CAAQA,KAAI,KAAKA,KAAAA,KAAS,EAAA;AAC1D;AAKO,SAAS,eAAeA,KAAAA,EAAM;AACjC,EAAA,OACKA,KAAAA,IAAQ,CAAA,IAAUA,KAAAA,IAAQ,CAAA,IAC1BA,KAAAA,KAAS,MACTA,KAAAA,IAAQ,EAAA,IAAUA,KAAAA,IAAQ,EAAA,IAC1BA,KAAAA,KAAS,GAAA;AAElB;AAMO,SAAS,UAAUA,KAAAA,EAAM;AAC5B,EAAA,OAAOA,KAAAA,KAAS,EAAA,IAAUA,KAAAA,KAAS,EAAA,IAAUA,KAAAA,KAAS,EAAA;AAC1D;AAIO,SAAS,aAAaA,KAAAA,EAAM;AAC/B,EAAA,OAAO,SAAA,CAAUA,KAAI,CAAA,IAAKA,KAAAA,KAAS,MAAUA,KAAAA,KAAS,CAAA;AAC1D;AAGO,SAAS,aAAA,CAAc,OAAO,MAAA,EAAQ;AAEzC,EAAA,IAAI,UAAU,EAAA,EAAQ;AAClB,IAAA,OAAO,KAAA;AAAA,EACX;AAGA,EAAA,IAAI,SAAA,CAAU,MAAM,CAAA,IAAK,MAAA,KAAWD,IAAAA,EAAK;AACrC,IAAA,OAAO,KAAA;AAAA,EACX;AAGA,EAAA,OAAO,IAAA;AACX;AAGO,SAAS,iBAAA,CAAkB,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO;AAIpD,EAAA,IAAI,UAAU,EAAA,EAAQ;AAGlB,IAAA,OACI,YAAY,MAAM,CAAA,IAClB,WAAW,EAAA,IACX,aAAA,CAAc,QAAQ,KAAK,CAAA;AAAA,EAEnC;AAGA,EAAA,IAAI,WAAA,CAAY,KAAK,CAAA,EAAG;AAEpB,IAAA,OAAO,IAAA;AAAA,EACX;AAGA,EAAA,IAAI,UAAU,EAAA,EAAQ;AAElB,IAAA,OAAO,aAAA,CAAc,OAAO,MAAM,CAAA;AAAA,EACtC;AAIA,EAAA,OAAO,KAAA;AACX;AAGO,SAAS,aAAA,CAAc,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO;AAKhD,EAAA,IAAI,KAAA,KAAU,EAAA,IAAU,KAAA,KAAU,EAAA,EAAQ;AAEtC,IAAA,IAAI,OAAA,CAAQ,MAAM,CAAA,EAAG;AACjB,MAAA,OAAO,CAAA;AAAA,IACX;AAKA,IAAA,OAAO,MAAA,KAAW,EAAA,IAAU,OAAA,CAAQ,KAAK,IAAI,CAAA,GAAI,CAAA;AAAA,EACrD;AAGA,EAAA,IAAI,UAAU,EAAA,EAAQ;AAElB,IAAA,OAAO,OAAA,CAAQ,MAAM,CAAA,GAAI,CAAA,GAAI,CAAA;AAAA,EACjC;AAGA,EAAA,IAAI,OAAA,CAAQ,KAAK,CAAA,EAAG;AAEhB,IAAA,OAAO,CAAA;AAAA,EACX;AAIA,EAAA,OAAO,CAAA;AACX;AAOO,SAAS,MAAMC,KAAAA,EAAM;AAExB,EAAA,IAAIA,UAAS,KAAA,EAAQ;AACjB,IAAA,OAAO,CAAA;AAAA,EACX;AAGA,EAAA,IAAIA,UAAS,KAAA,EAAQ;AACjB,IAAA,OAAO,CAAA;AAAA,EACX;AAEA,EAAA,OAAO,CAAA;AACX;AAIA,IAAM,QAAA,GAAW,IAAI,KAAA,CAAM,GAAI,CAAA;AACxB,IAAM,WAAA,GAAc,GAAA;AACpB,IAAM,kBAAA,GAAqB,GAAA;AAC3B,IAAM,aAAA,GAAgB,GAAA;AACtB,IAAM,iBAAA,GAAoB,GAAA;AAC1B,IAAM,oBAAA,GAAuB,GAAA;AAEpC,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,CAAS,QAAQ,CAAA,EAAA,EAAK;AACtC,EAAA,QAAA,CAAS,CAAC,CAAA,GACN,YAAA,CAAa,CAAC,CAAA,IAAK,kBAAA,IACnB,QAAQ,CAAC,CAAA,IAAK,aAAA,IACd,WAAA,CAAY,CAAC,CAAA,IAAK,iBAAA,IAClB,eAAe,CAAC,CAAA,IAAK,wBACrB,CAAA,IAAK,WAAA;AACb;AAEO,SAAS,iBAAiBA,KAAAA,EAAM;AACnC,EAAA,OAAOA,KAAAA,GAAO,GAAA,GAAO,QAAA,CAASA,KAAI,CAAA,GAAI,iBAAA;AAC1C;;;AC1MA,SAAS,WAAA,CAAY,QAAQ,MAAA,EAAQ;AACjC,EAAA,OAAO,SAAS,MAAA,CAAO,MAAA,GAAS,MAAA,CAAO,UAAA,CAAW,MAAM,CAAA,GAAI,CAAA;AAChE;AAEO,SAAS,gBAAA,CAAiB,MAAA,EAAQ,MAAA,EAAQA,KAAAA,EAAM;AACnD,EAAA,IAAIA,UAAS,EAAA,IAAe,WAAA,CAAY,QAAQ,MAAA,GAAS,CAAC,MAAM,EAAA,EAAa;AACzE,IAAA,OAAO,CAAA;AAAA,EACX;AAEA,EAAA,OAAO,CAAA;AACX;AAEO,SAAS,OAAA,CAAQ,OAAA,EAAS,MAAA,EAAQ,aAAA,EAAe;AACpD,EAAA,IAAIA,KAAAA,GAAO,OAAA,CAAQ,UAAA,CAAW,MAAM,CAAA;AAGpC,EAAA,IAAI,iBAAA,CAAkBA,KAAI,CAAA,EAAG;AACzB,IAAAA,QAAOA,KAAAA,GAAO,EAAA;AAAA,EAClB;AAEA,EAAA,OAAOA,KAAAA,KAAS,aAAA;AACpB;AAEO,SAAS,MAAA,CAAO,OAAA,EAAS,KAAA,EAAO,GAAA,EAAK,YAAA,EAAc;AACtD,EAAA,IAAI,GAAA,GAAM,KAAA,KAAU,YAAA,CAAa,MAAA,EAAQ;AACrC,IAAA,OAAO,KAAA;AAAA,EACX;AAEA,EAAA,IAAI,KAAA,GAAQ,CAAA,IAAK,GAAA,GAAM,OAAA,CAAQ,MAAA,EAAQ;AACnC,IAAA,OAAO,KAAA;AAAA,EACX;AAEA,EAAA,KAAA,IAAS,CAAA,GAAI,KAAA,EAAO,CAAA,GAAI,GAAA,EAAK,CAAA,EAAA,EAAK;AAC9B,IAAA,MAAM,aAAA,GAAgB,YAAA,CAAa,UAAA,CAAW,CAAA,GAAI,KAAK,CAAA;AACvD,IAAA,IAAI,QAAA,GAAW,OAAA,CAAQ,UAAA,CAAW,CAAC,CAAA;AAGnC,IAAA,IAAI,iBAAA,CAAkB,QAAQ,CAAA,EAAG;AAC7B,MAAA,QAAA,GAAW,QAAA,GAAW,EAAA;AAAA,IAC1B;AAEA,IAAA,IAAI,aAAa,aAAA,EAAe;AAC5B,MAAA,OAAO,KAAA;AAAA,IACX;AAAA,EACJ;AAEA,EAAA,OAAO,IAAA;AACX;AAEO,SAAS,mBAAA,CAAoB,QAAQ,MAAA,EAAQ;AAChD,EAAA,OAAO,MAAA,IAAU,GAAG,MAAA,EAAA,EAAU;AAC1B,IAAA,IAAI,CAAC,YAAA,CAAa,MAAA,CAAO,UAAA,CAAW,MAAM,CAAC,CAAA,EAAG;AAC1C,MAAA;AAAA,IACJ;AAAA,EACJ;AAEA,EAAA,OAAO,MAAA,GAAS,CAAA;AACpB;AAEO,SAAS,iBAAA,CAAkB,QAAQ,MAAA,EAAQ;AAC9C,EAAA,OAAO,MAAA,GAAS,MAAA,CAAO,MAAA,EAAQ,MAAA,EAAA,EAAU;AACrC,IAAA,IAAI,CAAC,YAAA,CAAa,MAAA,CAAO,UAAA,CAAW,MAAM,CAAC,CAAA,EAAG;AAC1C,MAAA;AAAA,IACJ;AAAA,EACJ;AAEA,EAAA,OAAO,MAAA;AACX;AAEO,SAAS,oBAAA,CAAqB,QAAQ,MAAA,EAAQ;AACjD,EAAA,OAAO,MAAA,GAAS,MAAA,CAAO,MAAA,EAAQ,MAAA,EAAA,EAAU;AACrC,IAAA,IAAI,CAAC,OAAA,CAAQ,MAAA,CAAO,UAAA,CAAW,MAAM,CAAC,CAAA,EAAG;AACrC,MAAA;AAAA,IACJ;AAAA,EACJ;AAEA,EAAA,OAAO,MAAA;AACX;AAGO,SAAS,cAAA,CAAe,QAAQ,MAAA,EAAQ;AAG3C,EAAA,MAAA,IAAU,CAAA;AAGV,EAAA,IAAI,WAAW,WAAA,CAAY,MAAA,EAAQ,MAAA,GAAS,CAAC,CAAC,CAAA,EAAG;AAG7C,IAAA,KAAA,MAAW,SAAA,GAAY,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,MAAA,EAAQ,SAAS,CAAC,CAAA,EAAG,MAAA,GAAS,SAAA,EAAW,MAAA,EAAA,EAAU;AACtF,MAAA,IAAI,CAAC,UAAA,CAAW,WAAA,CAAY,MAAA,EAAQ,MAAM,CAAC,CAAA,EAAG;AAC1C,QAAA;AAAA,MACJ;AAAA,IACJ;AAGA,IAAA,MAAMA,KAAAA,GAAO,WAAA,CAAY,MAAA,EAAQ,MAAM,CAAA;AACvC,IAAA,IAAI,YAAA,CAAaA,KAAI,CAAA,EAAG;AACpB,MAAA,MAAA,IAAU,gBAAA,CAAiB,MAAA,EAAQ,MAAA,EAAQA,KAAI,CAAA;AAAA,IACnD;AAAA,EACJ;AAEA,EAAA,OAAO,MAAA;AACX;AAMO,SAAS,WAAA,CAAY,QAAQ,MAAA,EAAQ;AAGxC,EAAA,OAAO,MAAA,GAAS,MAAA,CAAO,MAAA,EAAQ,MAAA,EAAA,EAAU;AACrC,IAAA,MAAMA,KAAAA,GAAO,MAAA,CAAO,UAAA,CAAW,MAAM,CAAA;AAGrC,IAAA,IAAI,MAAA,CAAOA,KAAI,CAAA,EAAG;AAEd,MAAA;AAAA,IACJ;AAGA,IAAA,IAAI,cAAcA,KAAAA,EAAM,WAAA,CAAY,QAAQ,MAAA,GAAS,CAAC,CAAC,CAAA,EAAG;AAEtD,MAAA,MAAA,GAAS,cAAA,CAAe,MAAA,EAAQ,MAAM,CAAA,GAAI,CAAA;AAC1C,MAAA;AAAA,IACJ;AAIA,IAAA;AAAA,EACJ;AAEA,EAAA,OAAO,MAAA;AACX;AAGO,SAAS,aAAA,CAAc,QAAQ,MAAA,EAAQ;AAC1C,EAAA,IAAIA,KAAAA,GAAO,MAAA,CAAO,UAAA,CAAW,MAAM,CAAA;AAInC,EAAA,IAAIA,KAAAA,KAAS,EAAA,IAAUA,KAAAA,KAAS,EAAA,EAAQ;AACpC,IAAAA,KAAAA,GAAO,MAAA,CAAO,UAAA,CAAW,MAAA,IAAU,CAAC,CAAA;AAAA,EACxC;AAGA,EAAA,IAAI,OAAA,CAAQA,KAAI,CAAA,EAAG;AACf,IAAA,MAAA,GAAS,oBAAA,CAAqB,MAAA,EAAQ,MAAA,GAAS,CAAC,CAAA;AAChD,IAAAA,KAAAA,GAAO,MAAA,CAAO,UAAA,CAAW,MAAM,CAAA;AAAA,EACnC;AAGA,EAAA,IAAIA,KAAAA,KAAS,MAAU,OAAA,CAAQ,MAAA,CAAO,WAAW,MAAA,GAAS,CAAC,CAAC,CAAA,EAAG;AAG3D,IAAA,MAAA,IAAU,CAAA;AAOV,IAAA,MAAA,GAAS,oBAAA,CAAqB,QAAQ,MAAM,CAAA;AAAA,EAChD;AAIA,EAAA,IAAI,OAAA;AAAA,IAAQ,MAAA;AAAA,IAAQ,MAAA;AAAA,IAAQ;AAAA;AAAA,GAAW,EAAG;AACtC,IAAA,IAAI,IAAA,GAAO,CAAA;AACX,IAAAA,KAAAA,GAAO,MAAA,CAAO,UAAA,CAAW,MAAA,GAAS,CAAC,CAAA;AAGnC,IAAA,IAAIA,KAAAA,KAAS,EAAA,IAAUA,KAAAA,KAAS,EAAA,EAAQ;AACpC,MAAA,IAAA,GAAO,CAAA;AACP,MAAAA,KAAAA,GAAO,MAAA,CAAO,UAAA,CAAW,MAAA,GAAS,CAAC,CAAA;AAAA,IACvC;AAGA,IAAA,IAAI,OAAA,CAAQA,KAAI,CAAA,EAAG;AAQf,MAAA,MAAA,GAAS,oBAAA,CAAqB,MAAA,EAAQ,MAAA,GAAS,CAAA,GAAI,OAAO,CAAC,CAAA;AAAA,IAC/D;AAAA,EACJ;AAEA,EAAA,OAAO,MAAA;AACX;AAKO,SAAS,qBAAA,CAAsB,QAAQ,MAAA,EAAQ;AAElD,EAAA,OAAO,MAAA,GAAS,MAAA,CAAO,MAAA,EAAQ,MAAA,EAAA,EAAU;AACrC,IAAA,MAAMA,KAAAA,GAAO,MAAA,CAAO,UAAA,CAAW,MAAM,CAAA;AAIrC,IAAA,IAAIA,UAAS,EAAA,EAAQ;AAEjB,MAAA,MAAA,EAAA;AACA,MAAA;AAAA,IACJ;AAEA,IAAA,IAAI,cAAcA,KAAAA,EAAM,WAAA,CAAY,QAAQ,MAAA,GAAS,CAAC,CAAC,CAAA,EAAG;AAKtD,MAAA,MAAA,GAAS,cAAA,CAAe,QAAQ,MAAM,CAAA;AAAA,IAC1C;AAAA,EACJ;AAEA,EAAA,OAAO,MAAA;AACX;AAIO,SAAS,cAAc,OAAA,EAAS;AAEnC,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,IAAK,CAAC,WAAW,OAAA,CAAQ,UAAA,CAAW,CAAC,CAAC,CAAA,EAAG;AAC5D,IAAA,OAAO,QAAQ,CAAC,CAAA;AAAA,EACpB;AAGA,EAAA,IAAIA,KAAAA,GAAO,QAAA,CAAS,OAAA,EAAS,EAAE,CAAA;AAE/B,EAAA,IACKA,KAAAA,KAAS,CAAA;AAAA,EACTA,KAAAA,IAAQ,SAAUA,KAAAA,IAAQ,KAAA;AAAA,EAC1BA,QAAO,OAAA,EACV;AAEE,IAAAA,KAAAA,GAAO,KAAA;AAAA,EACX;AAGA,EAAA,OAAO,MAAA,CAAO,cAAcA,KAAI,CAAA;AACpC;;;AC7PA,IAAO,aAAA,GAAQ;AAAA,EACX,WAAA;AAAA,EACA,aAAA;AAAA,EACA,gBAAA;AAAA,EACA,kBAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EACA,kBAAA;AAAA,EACA,WAAA;AAAA,EACA,eAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,kBAAA;AAAA,EACA,iBAAA;AAAA,EACA,kBAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,aAAA;AAAA,EACA,iBAAA;AAAA,EACA,aAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA;AACJ,CAAA;;;AC3BA,IAAM,WAAW,EAAA,GAAK,IAAA;AAEf,SAAS,WAAA,CAAY,MAAA,GAAS,IAAA,EAAM,IAAA,EAAM;AAC7C,EAAA,IAAI,MAAA,KAAW,IAAA,IAAQ,MAAA,CAAO,MAAA,GAAS,IAAA,EAAM;AACzC,IAAA,OAAO,IAAI,WAAA,CAAY,IAAA,CAAK,IAAI,IAAA,GAAO,IAAA,EAAM,QAAQ,CAAC,CAAA;AAAA,EAC1D;AAEA,EAAA,OAAO,MAAA;AACX;;;ACLA,IAAM,CAAA,GAAI,EAAA;AACV,IAAM,CAAA,GAAI,EAAA;AACV,IAAM,CAAA,GAAI,EAAA;AAEV,SAAS,uBAAuB,IAAA,EAAM;AAClC,EAAA,MAAM,SAAS,IAAA,CAAK,MAAA;AACpB,EAAA,MAAM,eAAe,MAAA,CAAO,MAAA;AAC5B,EAAA,MAAM,WAAA,GAAc,OAAO,MAAA,GAAS,CAAA,GAAI,MAAM,MAAA,CAAO,UAAA,CAAW,CAAC,CAAC,CAAA,GAAI,CAAA;AACtE,EAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,IAAA,CAAK,KAAA,EAAO,YAAY,CAAA;AAClD,EAAA,MAAM,OAAA,GAAU,WAAA,CAAY,IAAA,CAAK,OAAA,EAAS,YAAY,CAAA;AACtD,EAAA,IAAI,OAAO,IAAA,CAAK,SAAA;AAChB,EAAA,IAAI,SAAS,IAAA,CAAK,WAAA;AAElB,EAAA,KAAA,IAAS,CAAA,GAAI,WAAA,EAAa,CAAA,GAAI,YAAA,EAAc,CAAA,EAAA,EAAK;AAC7C,IAAA,MAAMA,KAAAA,GAAO,MAAA,CAAO,UAAA,CAAW,CAAC,CAAA;AAEhC,IAAA,KAAA,CAAM,CAAC,CAAA,GAAI,IAAA;AACX,IAAA,OAAA,CAAQ,CAAC,CAAA,GAAI,MAAA,EAAA;AAEb,IAAA,IAAIA,KAAAA,KAAS,CAAA,IAAKA,KAAAA,KAAS,CAAA,IAAKA,UAAS,CAAA,EAAG;AACxC,MAAA,IAAIA,KAAAA,KAAS,CAAA,IAAK,CAAA,GAAI,CAAA,GAAI,YAAA,IAAgB,OAAO,UAAA,CAAW,CAAA,GAAI,CAAC,CAAA,KAAM,CAAA,EAAG;AACtE,QAAA,CAAA,EAAA;AACA,QAAA,KAAA,CAAM,CAAC,CAAA,GAAI,IAAA;AACX,QAAA,OAAA,CAAQ,CAAC,CAAA,GAAI,MAAA;AAAA,MACjB;AAEA,MAAA,IAAA,EAAA;AACA,MAAA,MAAA,GAAS,CAAA;AAAA,IACb;AAAA,EACJ;AAEA,EAAA,KAAA,CAAM,YAAY,CAAA,GAAI,IAAA;AACtB,EAAA,OAAA,CAAQ,YAAY,CAAA,GAAI,MAAA;AAExB,EAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,EAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,EAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AACpB;AAEO,IAAM,mBAAN,MAAuB;AAAA,EAC1B,WAAA,CAAY,MAAA,EAAQ,WAAA,EAAa,SAAA,EAAW,WAAA,EAAa;AACrD,IAAA,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,WAAA,EAAa,SAAA,EAAW,WAAW,CAAA;AAC1D,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAA;AACb,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AAAA,EACnB;AAAA,EACA,SAAA,CAAU,SAAS,EAAA,EAAI,WAAA,GAAc,GAAG,SAAA,GAAY,CAAA,EAAG,cAAc,CAAA,EAAG;AACpE,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,WAAA,GAAc,WAAA;AACnB,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA;AACjB,IAAA,IAAA,CAAK,WAAA,GAAc,WAAA;AACnB,IAAA,IAAA,CAAK,QAAA,GAAW,KAAA;AAAA,EACpB;AAAA,EACA,WAAA,CAAY,QAAQ,QAAA,EAAU;AAC1B,IAAA,IAAI,CAAC,KAAK,QAAA,EAAU;AAChB,MAAA,sBAAA,CAAuB,IAAI,CAAA;AAAA,IAC/B;AAEA,IAAA,OAAO;AAAA,MACH,MAAA,EAAQ,QAAA;AAAA,MACR,MAAA,EAAQ,KAAK,WAAA,GAAc,MAAA;AAAA,MAC3B,IAAA,EAAM,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA;AAAA,MACvB,MAAA,EAAQ,IAAA,CAAK,OAAA,CAAQ,MAAM;AAAA,KAC/B;AAAA,EACJ;AAAA,EACA,gBAAA,CAAiB,KAAA,EAAO,GAAA,EAAK,QAAA,EAAU;AACnC,IAAA,IAAI,CAAC,KAAK,QAAA,EAAU;AAChB,MAAA,sBAAA,CAAuB,IAAI,CAAA;AAAA,IAC/B;AAEA,IAAA,OAAO;AAAA,MACH,MAAA,EAAQ,QAAA;AAAA,MACR,KAAA,EAAO;AAAA,QACH,MAAA,EAAQ,KAAK,WAAA,GAAc,KAAA;AAAA,QAC3B,IAAA,EAAM,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AAAA,QACtB,MAAA,EAAQ,IAAA,CAAK,OAAA,CAAQ,KAAK;AAAA,OAC9B;AAAA,MACA,GAAA,EAAK;AAAA,QACD,MAAA,EAAQ,KAAK,WAAA,GAAc,GAAA;AAAA,QAC3B,IAAA,EAAM,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAAA,QACpB,MAAA,EAAQ,IAAA,CAAK,OAAA,CAAQ,GAAG;AAAA;AAC5B,KACJ;AAAA,EACJ;AACJ,CAAA;;;ACrEA,IAAM,WAAA,GAAc,QAAA;AACpB,IAAM,UAAA,GAAa,EAAA;AACnB,IAAM,gBAAA,GAAmB,CAAA;AACzB,IAAM,iBAAA,GAAoB,CAAA;AAC1B,IAAM,WAAA,GAAc,IAAI,UAAA,CAAW,EAAE,CAAA;AACrC,WAAA,CAAY,QAAa,CAAA,GAAI,gBAAA;AAC7B,WAAA,CAAY,eAAe,CAAA,GAAI,gBAAA;AAC/B,WAAA,CAAY,iBAAiB,CAAA,GAAI,kBAAA;AACjC,WAAA,CAAY,gBAAgB,CAAA,GAAI,iBAAA;AAEhC,IAAM,WAAA,GAAc,IAAI,UAAA,CAAW,EAAE,CAAA;AACrC,WAAA,CAAY,QAAa,CAAA,GAAI,gBAAA;AAC7B,WAAA,CAAY,eAAe,CAAA,GAAI,gBAAA;AAC/B,WAAA,CAAY,iBAAiB,CAAA,GAAI,gBAAA;AACjC,WAAA,CAAY,gBAAgB,CAAA,GAAI,gBAAA;AAChC,WAAA,CAAY,gBAAgB,CAAA,GAAI,iBAAA;AAChC,WAAA,CAAY,kBAAkB,CAAA,GAAI,iBAAA;AAClC,WAAA,CAAY,iBAAiB,CAAA,GAAI,iBAAA;AAEjC,SAAS,UAAA,CAAW,KAAA,EAAO,GAAA,EAAK,GAAA,EAAK;AACjC,EAAA,OAAO,KAAA,GAAQ,GAAA,GAAM,GAAA,GAAM,KAAA,GAAQ,MAAM,GAAA,GAAM,KAAA;AACnD;AAEO,IAAM,cAAN,MAAkB;AAAA,EACrB,WAAA,CAAY,QAAQC,SAAAA,EAAU;AAC1B,IAAA,IAAA,CAAK,SAAA,CAAU,QAAQA,SAAQ,CAAA;AAAA,EACnC;AAAA,EACA,KAAA,GAAQ;AACJ,IAAA,IAAA,CAAK,GAAA,GAAM,KAAA;AACX,IAAA,IAAA,CAAK,UAAA,GAAa,EAAA;AAClB,IAAA,IAAA,CAAK,SAAA,GAAY,CAAA;AACjB,IAAA,IAAA,CAAK,aAAa,IAAA,CAAK,eAAA;AACvB,IAAA,IAAA,CAAK,WAAW,IAAA,CAAK,eAAA;AAAA,EACzB;AAAA,EACA,SAAA,CAAU,MAAA,GAAS,EAAA,EAAIA,SAAAA,GAAW,MAAM;AAAA,EAAC,CAAA,EAAG;AACxC,IAAA,MAAA,GAAS,MAAA,CAAO,UAAU,EAAE,CAAA;AAE5B,IAAA,MAAM,eAAe,MAAA,CAAO,MAAA;AAC5B,IAAA,MAAM,gBAAgB,WAAA,CAAY,IAAA,CAAK,aAAA,EAAe,MAAA,CAAO,SAAS,CAAC,CAAA;AACvE,IAAA,MAAM,UAAU,WAAA,CAAY,IAAA,CAAK,OAAA,EAAS,MAAA,CAAO,SAAS,CAAC,CAAA;AAC3D,IAAA,IAAI,UAAA,GAAa,CAAA;AACjB,IAAA,IAAI,eAAA,GAAkB,EAAA;AACtB,IAAA,IAAI,gBAAA,GAAmB,CAAA;AACvB,IAAA,IAAI,eAAe,MAAA,CAAO,MAAA;AAG1B,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAA;AACrB,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AACf,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAEd,IAAAA,SAAAA,CAAS,MAAA,EAAQ,CAAC,IAAA,EAAM,OAAO,GAAA,KAAQ;AACnC,MAAA,MAAM,KAAA,GAAQ,UAAA,EAAA;AAGd,MAAA,aAAA,CAAc,KAAK,CAAA,GAAK,IAAA,IAAQ,UAAA,GAAc,GAAA;AAE9C,MAAA,IAAI,oBAAoB,EAAA,EAAI;AACxB,QAAA,eAAA,GAAkB,KAAA;AAAA,MACtB;AAGA,MAAA,OAAA,CAAQ,KAAK,CAAA,GAAI,YAAA;AAEjB,MAAA,IAAI,SAAS,gBAAA,EAAkB;AAC3B,QAAA,MAAM,gBAAA,GAAmB,QAAQ,YAAY,CAAA;AAG7C,QAAA,OAAA,CAAQ,YAAY,CAAA,GAAI,KAAA;AAGxB,QAAA,YAAA,GAAe,gBAAA;AACf,QAAA,gBAAA,GAAmB,WAAA,CAAY,aAAA,CAAc,gBAAgB,CAAA,IAAK,UAAU,CAAA;AAAA,MAChF,CAAA,MAAA,IAAW,IAAA,CAAK,sBAAA,CAAuB,IAAI,CAAA,EAAG;AAE1C,QAAA,YAAA,GAAe,KAAA;AACf,QAAA,gBAAA,GAAmB,YAAY,IAAI,CAAA;AAAA,MACvC;AAAA,IACJ,CAAC,CAAA;AAGD,IAAA,aAAA,CAAc,UAAU,CAAA,GAAK,GAAA,IAAO,UAAA,GAAc,YAAA;AAClD,IAAA,OAAA,CAAQ,UAAU,CAAA,GAAI,UAAA;AAYtB,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,UAAA,EAAY,CAAA,EAAA,EAAK;AACjC,MAAA,MAAMC,aAAAA,GAAe,QAAQ,CAAC,CAAA;AAE9B,MAAA,IAAIA,iBAAgB,CAAA,EAAG;AACnB,QAAA,MAAM,UAAA,GAAa,QAAQA,aAAY,CAAA;AAEvC,QAAA,IAAI,eAAe,CAAA,EAAG;AAClB,UAAA,OAAA,CAAQ,CAAC,CAAA,GAAI,UAAA;AAAA,QACjB;AAAA,MACJ,CAAA,MAAA,IAAWA,gBAAe,UAAA,EAAY;AAClC,QAAA,OAAA,CAAQ,CAAC,CAAA,GAAI,UAAA;AAAA,MACjB;AAAA,IACJ;AAIA,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,eAAA,GAAkB,eAAA,KAAoB,EAAA,GAAK,CAAA,GAAI,eAAA;AACpD,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,IAAA,IAAA,CAAK,aAAA,GAAgB,aAAA;AACrB,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAEf,IAAA,IAAA,CAAK,KAAA,EAAM;AACX,IAAA,IAAA,CAAK,IAAA,EAAK;AAAA,EACd;AAAA,EAEA,WAAW,MAAA,EAAQ;AACf,IAAA,MAAA,IAAU,IAAA,CAAK,UAAA;AAEf,IAAA,IAAI,MAAA,GAAS,KAAK,UAAA,EAAY;AAC1B,MAAA,OAAO,IAAA,CAAK,aAAA,CAAc,MAAM,CAAA,IAAK,UAAA;AAAA,IACzC;AAEA,IAAA,OAAO,GAAA;AAAA,EACX;AAAA,EACA,gBAAgB,GAAA,EAAK;AACjB,IAAA,KAAA,IAAS,SAAS,IAAA,CAAK,UAAA,EAAY,MAAA,GAAS,IAAA,CAAK,YAAY,MAAA,EAAA,EAAU;AACnE,MAAA,MAAMC,UAAAA,GAAY,IAAA,CAAK,aAAA,CAAc,MAAM,CAAA,IAAK,UAAA;AAEhD,MAAA,IAAIA,UAAAA,KAAc,UAAA,IAAcA,UAAAA,KAAc,OAAA,EAAS;AACnD,QAAA,IAAI,UAAU,CAAA,EAAG;AACb,UAAA,OAAOA,UAAAA;AAAA,QACX;AAAA,MACJ;AAAA,IACJ;AAEA,IAAA,OAAO,GAAA;AAAA,EACX;AAAA,EACA,aAAa,MAAA,EAAQ;AACjB,IAAA,MAAA,IAAU,IAAA,CAAK,UAAA;AAEf,IAAA,IAAI,MAAA,GAAS,KAAK,UAAA,EAAY;AAC1B,MAAA,OAAO,IAAA,CAAK,aAAA,CAAc,MAAA,GAAS,CAAC,CAAA,GAAI,WAAA;AAAA,IAC5C;AAEA,IAAA,OAAO,KAAK,MAAA,CAAO,MAAA;AAAA,EACvB;AAAA,EACA,kBAAkB,GAAA,EAAK;AACnB,IAAA,KAAA,IAAS,SAAS,IAAA,CAAK,UAAA,EAAY,MAAA,GAAS,IAAA,CAAK,YAAY,MAAA,EAAA,EAAU;AACnE,MAAA,MAAMA,UAAAA,GAAY,IAAA,CAAK,aAAA,CAAc,MAAM,CAAA,IAAK,UAAA;AAEhD,MAAA,IAAIA,UAAAA,KAAc,UAAA,IAAcA,UAAAA,KAAc,OAAA,EAAS;AACnD,QAAA,IAAI,UAAU,CAAA,EAAG;AACb,UAAA,OAAO,SAAS,IAAA,CAAK,UAAA;AAAA,QACzB;AAAA,MACJ;AAAA,IACJ;AAEA,IAAA,OAAO,GAAA;AAAA,EACX;AAAA,EACA,WAAA,CAAY,QAAQ,YAAA,EAAc;AAC9B,IAAA,MAAA,IAAU,IAAA,CAAK,UAAA;AAEf,IAAA,IAAI,MAAA,GAAS,KAAK,UAAA,EAAY;AAC1B,MAAA,OAAO,MAAA;AAAA,QACH,IAAA,CAAK,MAAA;AAAA,QACL,IAAA,CAAK,aAAA,CAAc,MAAA,GAAS,CAAC,CAAA,GAAI,WAAA;AAAA,QACjC,IAAA,CAAK,aAAA,CAAc,MAAM,CAAA,GAAI,WAAA;AAAA,QAC7B;AAAA,OACJ;AAAA,IACJ;AAEA,IAAA,OAAO,KAAA;AAAA,EACX;AAAA,EACA,cAAc,UAAA,EAAY;AACtB,IAAA,IAAI,UAAA,KAAe,KAAK,UAAA,EAAY;AAChC,MAAA,OAAO,IAAA,CAAK,UAAA;AAAA,IAChB;AAEA,IAAA,IAAI,aAAa,CAAA,EAAG;AAChB,MAAA,OAAO,UAAA,GAAa,IAAA,CAAK,UAAA,GACnB,IAAA,CAAK,aAAA,CAAc,UAAA,GAAa,CAAC,CAAA,GAAI,WAAA,GACrC,IAAA,CAAK,aAAA,CAAc,IAAA,CAAK,UAAU,CAAA,GAAI,WAAA;AAAA,IAChD;AAEA,IAAA,OAAO,IAAA,CAAK,eAAA;AAAA,EAChB;AAAA,EACA,YAAY,UAAA,EAAY;AACpB,IAAA,IAAI,UAAA,KAAe,KAAK,UAAA,EAAY;AAChC,MAAA,OAAO,IAAA,CAAK,QAAA;AAAA,IAChB;AAEA,IAAA,OAAO,IAAA,CAAK,cAAc,UAAA,CAAW,UAAA,EAAY,GAAG,IAAA,CAAK,UAAU,CAAC,CAAA,GAAI,WAAA;AAAA,EAC5E;AAAA,EACA,aAAa,UAAA,EAAY;AACrB,IAAA,IAAI,UAAA,KAAe,KAAK,UAAA,EAAY;AAChC,MAAA,OAAO,IAAA,CAAK,SAAA;AAAA,IAChB;AAEA,IAAA,OAAO,IAAA,CAAK,cAAc,UAAA,CAAW,UAAA,EAAY,GAAG,IAAA,CAAK,UAAU,CAAC,CAAA,IAAK,UAAA;AAAA,EAC7E;AAAA,EACA,eAAe,KAAA,EAAO;AAClB,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,KAAA,EAAO,KAAK,UAAU,CAAA;AAAA,EACvD;AAAA,EAEA,uBAAuBA,UAAAA,EAAW;AAC9B,IAAA,OAAO,WAAA,CAAYA,UAAS,CAAA,KAAM,gBAAA;AAAA,EACtC;AAAA,EACA,uBAAuBA,UAAAA,EAAW;AAC9B,IAAA,OAAO,WAAA,CAAYA,UAAS,CAAA,KAAM,iBAAA;AAAA,EACtC;AAAA,EACA,uBAAuB,UAAA,EAAY;AAC/B,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,YAAA,CAAa,UAAU,CAAA;AAEzC,IAAA,IAAI,WAAA,CAAY,IAAI,CAAA,KAAM,CAAA,EAAG;AAEzB,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,OAAA,CAAQ,UAAU,CAAA;AACzC,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,YAAA,CAAa,SAAS,CAAA;AAE7C,MAAA,OAAO,WAAA,CAAY,IAAI,CAAA,KAAM,SAAA,GAAY,SAAA,GAAY,EAAA;AAAA,IACzD,CAAA,MAAA,IAAW,WAAA,CAAY,IAAI,CAAA,KAAM,CAAA,EAAG;AAEhC,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,OAAA,CAAQ,UAAU,CAAA;AACzC,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,YAAA,CAAa,SAAS,CAAA;AAE5C,MAAA,OAAO,WAAA,CAAY,QAAQ,CAAA,KAAM,IAAA,GAAO,SAAA,GAAY,EAAA;AAAA,IACxD;AAEA,IAAA,OAAO,EAAA;AAAA,EACX;AAAA,EACA,cAAc,UAAA,EAAY;AACtB,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA,GAAI,UAAA;AAAA,EAC3C;AAAA,EAEA,OAAA,CAAQH,OAAM,MAAA,EAAQ;AAClB,IAAA,IAAI,MAAA,EAAQ;AACR,MAAA,OACI,IAAA,CAAK,UAAA,CAAW,MAAM,CAAA,KAAM,KAAA,IAC5B,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,IAAA,CAAK,YAAA,CAAa,MAAM,CAAC,CAAA,KAAMA,KAAAA;AAAA,IAE9D;AAEA,IAAA,OACI,IAAA,CAAK,cAAc,KAAA,IACnB,IAAA,CAAK,OAAO,UAAA,CAAW,IAAA,CAAK,UAAU,CAAA,KAAMA,KAAAA;AAAA,EAEpD;AAAA,EAEA,KAAK,UAAA,EAAY;AACb,IAAA,IAAI,IAAA,GAAO,KAAK,UAAA,GAAa,UAAA;AAE7B,IAAA,IAAI,IAAA,GAAO,KAAK,UAAA,EAAY;AACxB,MAAA,IAAA,CAAK,UAAA,GAAa,IAAA;AAClB,MAAA,IAAA,CAAK,UAAA,GAAa,IAAA,CAAK,aAAA,CAAc,IAAA,GAAO,CAAC,CAAA,GAAI,WAAA;AACjD,MAAA,IAAA,GAAO,IAAA,CAAK,cAAc,IAAI,CAAA;AAC9B,MAAA,IAAA,CAAK,YAAY,IAAA,IAAQ,UAAA;AACzB,MAAA,IAAA,CAAK,WAAW,IAAA,GAAO,WAAA;AAAA,IAC3B,CAAA,MAAO;AACH,MAAA,IAAA,CAAK,aAAa,IAAA,CAAK,UAAA;AACvB,MAAA,IAAA,CAAK,IAAA,EAAK;AAAA,IACd;AAAA,EACJ;AAAA,EACA,IAAA,GAAO;AACH,IAAA,IAAI,IAAA,GAAO,KAAK,UAAA,GAAa,CAAA;AAE7B,IAAA,IAAI,IAAA,GAAO,KAAK,UAAA,EAAY;AACxB,MAAA,IAAA,CAAK,UAAA,GAAa,IAAA;AAClB,MAAA,IAAA,CAAK,aAAa,IAAA,CAAK,QAAA;AACvB,MAAA,IAAA,GAAO,IAAA,CAAK,cAAc,IAAI,CAAA;AAC9B,MAAA,IAAA,CAAK,YAAY,IAAA,IAAQ,UAAA;AACzB,MAAA,IAAA,CAAK,WAAW,IAAA,GAAO,WAAA;AAAA,IAC3B,CAAA,MAAO;AACH,MAAA,IAAA,CAAK,GAAA,GAAM,IAAA;AACX,MAAA,IAAA,CAAK,aAAa,IAAA,CAAK,UAAA;AACvB,MAAA,IAAA,CAAK,SAAA,GAAY,GAAA;AACjB,MAAA,IAAA,CAAK,UAAA,GAAa,IAAA,CAAK,QAAA,GAAW,IAAA,CAAK,MAAA,CAAO,MAAA;AAAA,IAClD;AAAA,EACJ;AAAA,EACA,MAAA,GAAS;AACL,IAAA,OAAO,IAAA,CAAK,SAAA,KAAc,UAAA,IAAc,IAAA,CAAK,cAAc,OAAA,EAAS;AAChE,MAAA,IAAA,CAAK,IAAA,EAAK;AAAA,IACd;AAAA,EACJ;AAAA,EACA,iBAAA,CAAkB,YAAY,WAAA,EAAa;AACvC,IAAA,IAAI,MAAA,GAAS,UAAA;AACb,IAAA,IAAI,UAAA,GAAa,CAAA;AACjB,IAAA,IAAI,MAAA,GAAS,CAAA;AAEb,IAAA,IAAA;AACA,MAAA,OAAO,MAAA,GAAS,IAAA,CAAK,UAAA,EAAY,MAAA,EAAA,EAAU;AACvC,QAAA,UAAA,GAAa,IAAA,CAAK,QAAQ,MAAM,CAAA;AAGhC,QAAA,IAAI,aAAa,UAAA,EAAY;AACzB,UAAA,MAAM,IAAA;AAAA,QACV;AAEA,QAAA,MAAA,GAAS,MAAA,GAAS,IAAI,IAAA,CAAK,aAAA,CAAc,SAAS,CAAC,CAAA,GAAI,cAAc,IAAA,CAAK,eAAA;AAG1E,QAAA,QAAQ,YAAY,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,MAAM,CAAC,CAAA;AAAG,UACjD,KAAK,CAAA;AACD,YAAA,MAAM,IAAA;AAAA,UAEV,KAAK,CAAA;AACD,YAAA,MAAA,EAAA;AACA,YAAA,MAAM,IAAA;AAAA,UAEV;AAEI,YAAA,IAAI,KAAK,sBAAA,CAAuB,IAAA,CAAK,cAAc,MAAM,CAAA,IAAK,UAAU,CAAA,EAAG;AACvE,cAAA,MAAA,GAAS,UAAA;AAAA,YACb;AAAA;AACR,MACJ;AAEA,IAAA,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,UAAU,CAAA;AAAA,EACtC;AAAA,EAEA,aAAa,EAAA,EAAI;AACb,IAAA,KAAA,IAAS,CAAA,GAAI,GAAG,MAAA,GAAS,IAAA,CAAK,iBAAiB,CAAA,GAAI,IAAA,CAAK,YAAY,CAAA,EAAA,EAAK;AACrE,MAAA,MAAM,KAAA,GAAQ,MAAA;AACd,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,aAAA,CAAc,CAAC,CAAA;AACjC,MAAA,MAAM,MAAM,IAAA,GAAO,WAAA;AACnB,MAAA,MAAM,OAAO,IAAA,IAAQ,UAAA;AAErB,MAAA,MAAA,GAAS,GAAA;AAET,MAAA,EAAA,CAAG,IAAA,EAAM,KAAA,EAAO,GAAA,EAAK,CAAC,CAAA;AAAA,IAC1B;AAAA,EACJ;AAAA,EACA,IAAA,GAAO;AACH,IAAA,MAAM,MAAA,GAAS,IAAI,KAAA,CAAM,IAAA,CAAK,UAAU,CAAA;AAExC,IAAA,IAAA,CAAK,YAAA,CAAa,CAAC,IAAA,EAAM,KAAA,EAAO,KAAK,KAAA,KAAU;AAC3C,MAAA,MAAA,CAAO,KAAK,CAAA,GAAI;AAAA,QACZ,GAAA,EAAK,KAAA;AAAA,QACL,IAAA,EAAM,cAAW,IAAI,CAAA;AAAA,QACrB,KAAA,EAAO,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,OAAO,GAAG,CAAA;AAAA,QACvC,OAAA,EAAS,IAAA,CAAK,OAAA,CAAQ,KAAK;AAAA,OAC/B;AAAA,IACJ,CAAC,CAAA;AAED,IAAA,OAAO,MAAA;AAAA,EACX;AACJ,CAAA;;;ACrVO,SAAS,QAAA,CAAS,QAAQ,OAAA,EAAS;AACtC,EAAA,SAASI,aAAYC,OAAAA,EAAQ;AACzB,IAAA,OAAOA,OAAAA,GAAS,YAAA,GAAe,MAAA,CAAO,UAAA,CAAWA,OAAM,CAAA,GAAI,CAAA;AAAA,EAC/D;AAGA,EAAA,SAAS,mBAAA,GAAsB;AAE3B,IAAA,MAAA,GAAS,aAAA,CAAc,QAAQ,MAAM,CAAA;AAGrC,IAAA,IAAI,iBAAA,CAAkBD,YAAAA,CAAY,MAAM,CAAA,EAAGA,YAAAA,CAAY,MAAA,GAAS,CAAC,CAAA,EAAGA,YAAAA,CAAY,MAAA,GAAS,CAAC,CAAC,CAAA,EAAG;AAI1F,MAAA,IAAA,GAAY,SAAA;AACZ,MAAA,MAAA,GAAS,WAAA,CAAY,QAAQ,MAAM,CAAA;AACnC,MAAA;AAAA,IACJ;AAGA,IAAA,IAAIA,YAAAA,CAAY,MAAM,CAAA,KAAM,EAAA,EAAQ;AAEhC,MAAA,IAAA,GAAY,UAAA;AACZ,MAAA,MAAA,EAAA;AACA,MAAA;AAAA,IACJ;AAGA,IAAA,IAAA,GAAYN,OAAAA;AAAA,EAChB;AAGA,EAAA,SAAS,qBAAA,GAAwB;AAC7B,IAAA,MAAM,eAAA,GAAkB,MAAA;AAGxB,IAAA,MAAA,GAAS,WAAA,CAAY,QAAQ,MAAM,CAAA;AAInC,IAAA,IAAI,MAAA,CAAO,QAAQ,eAAA,EAAiB,MAAA,EAAQ,KAAK,CAAA,IAAKM,YAAAA,CAAY,MAAM,CAAA,KAAM,EAAA,EAAQ;AAElF,MAAA,MAAA,GAAS,iBAAA,CAAkB,MAAA,EAAQ,MAAA,GAAS,CAAC,CAAA;AAK7C,MAAA,IAAIA,aAAY,MAAM,CAAA,KAAM,MACxBA,YAAAA,CAAY,MAAM,MAAM,EAAA,EAAQ;AAChC,QAAA,IAAA,GAAY,QAAA;AACZ,QAAA,MAAA,GAAS,eAAA,GAAkB,CAAA;AAC3B,QAAA;AAAA,MACJ;AAGA,MAAA,eAAA,EAAgB;AAChB,MAAA;AAAA,IACJ;AAIA,IAAA,IAAIA,YAAAA,CAAY,MAAM,CAAA,KAAM,EAAA,EAAQ;AAChC,MAAA,IAAA,GAAY,QAAA;AACZ,MAAA,MAAA,EAAA;AACA,MAAA;AAAA,IACJ;AAGA,IAAA,IAAA,GAAY,KAAA;AAAA,EAChB;AAGA,EAAA,SAAS,mBAAmB,eAAA,EAAiB;AAIzC,IAAA,IAAI,CAAC,eAAA,EAAiB;AAClB,MAAA,eAAA,GAAkBA,aAAY,MAAA,EAAQ,CAAA;AAAA,IAC1C;AAGA,IAAA,IAAA,GAAYP,OAAAA;AAGZ,IAAA,OAAO,MAAA,GAAS,MAAA,CAAO,MAAA,EAAQ,MAAA,EAAA,EAAU;AACrC,MAAA,MAAMG,KAAAA,GAAO,MAAA,CAAO,UAAA,CAAW,MAAM,CAAA;AAErC,MAAA,QAAQ,gBAAA,CAAiBA,KAAI,CAAA;AAAG;AAAA,QAE5B,KAAK,eAAA;AAED,UAAA,MAAA,EAAA;AACA,UAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAQJ,KAAK,kBAAA;AACD,UAAA,IAAI,SAAA,CAAUA,KAAI,CAAA,EAAG;AAGjB,YAAA,MAAA,IAAU,gBAAA,CAAiB,MAAA,EAAQ,MAAA,EAAQA,KAAI,CAAA;AAC/C,YAAA,IAAA,GAAY,SAAA;AACZ,YAAA;AAAA,UACJ;AACA,UAAA;AAAA;AAAA,QAGJ,KAAK,EAAA;AAED,UAAA,IAAI,MAAA,KAAW,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AAC9B,YAAA;AAAA,UACJ;AAEA,UAAA,MAAM,QAAA,GAAWI,YAAAA,CAAY,MAAA,GAAS,CAAC,CAAA;AAGvC,UAAA,IAAI,SAAA,CAAU,QAAQ,CAAA,EAAG;AACrB,YAAA,MAAA,IAAU,gBAAA,CAAiB,MAAA,EAAQ,MAAA,GAAS,CAAA,EAAG,QAAQ,CAAA;AAAA,UAC3D,CAAA,MAAA,IAAW,aAAA,CAAcJ,KAAAA,EAAM,QAAQ,CAAA,EAAG;AAItC,YAAA,MAAA,GAAS,cAAA,CAAe,MAAA,EAAQ,MAAM,CAAA,GAAI,CAAA;AAAA,UAC9C;AACA,UAAA;AAAA;AAIR,IACJ;AAAA,EACJ;AAOA,EAAA,SAAS,eAAA,GAAkB;AAEvB,IAAA,IAAA,GAAY,GAAA;AAGZ,IAAA,MAAA,GAAS,iBAAA,CAAkB,QAAQ,MAAM,CAAA;AAGzC,IAAA,OAAO,MAAA,GAAS,MAAA,CAAO,MAAA,EAAQ,MAAA,EAAA,EAAU;AACrC,MAAA,MAAMA,KAAAA,GAAO,MAAA,CAAO,UAAA,CAAW,MAAM,CAAA;AAErC,MAAA,QAAQ,gBAAA,CAAiBA,KAAI,CAAA;AAAG;AAAA,QAE5B,KAAK,EAAA;AAED,UAAA,MAAA,EAAA;AACA,UAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAQJ,KAAK,kBAAA;AAED,UAAA,MAAA,GAAS,iBAAA,CAAkB,QAAQ,MAAM,CAAA;AAKzC,UAAA,IAAII,aAAY,MAAM,CAAA,KAAM,EAAA,IAAU,MAAA,IAAU,OAAO,MAAA,EAAQ;AAC3D,YAAA,IAAI,MAAA,GAAS,OAAO,MAAA,EAAQ;AACxB,cAAA,MAAA,EAAA;AAAA,YACJ;AACA,YAAA;AAAA,UACJ;AAIA,UAAA,MAAA,GAAS,qBAAA,CAAsB,QAAQ,MAAM,CAAA;AAC7C,UAAA,IAAA,GAAY,MAAA;AACZ,UAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAMJ,KAAK,EAAA;AAAA,QACL,KAAK,EAAA;AAAA,QACL,KAAK,EAAA;AAAA,QACL,KAAK,oBAAA;AAGD,UAAA,MAAA,GAAS,qBAAA,CAAsB,QAAQ,MAAM,CAAA;AAC7C,UAAA,IAAA,GAAY,MAAA;AACZ,UAAA;AAAA;AAAA,QAGJ,KAAK,EAAA;AAGD,UAAA,IAAI,cAAcJ,KAAAA,EAAMI,YAAAA,CAAY,MAAA,GAAS,CAAC,CAAC,CAAA,EAAG;AAC9C,YAAA,MAAA,GAAS,cAAA,CAAe,MAAA,EAAQ,MAAM,CAAA,GAAI,CAAA;AAC1C,YAAA;AAAA,UACJ;AAIA,UAAA,MAAA,GAAS,qBAAA,CAAsB,QAAQ,MAAM,CAAA;AAC7C,UAAA,IAAA,GAAY,MAAA;AACZ,UAAA;AAAA;AAIR,IACJ;AAAA,EACJ;AAGA,EAAA,MAAA,GAAS,MAAA,CAAO,UAAU,EAAE,CAAA;AAE5B,EAAA,MAAM,eAAe,MAAA,CAAO,MAAA;AAC5B,EAAA,IAAI,KAAA,GAAQ,KAAA,CAAMA,YAAAA,CAAY,CAAC,CAAC,CAAA;AAChC,EAAA,IAAI,MAAA,GAAS,KAAA;AACb,EAAA,IAAI,IAAA;AAIJ,EAAA,OAAO,SAAS,YAAA,EAAc;AAC1B,IAAA,MAAMJ,KAAAA,GAAO,MAAA,CAAO,UAAA,CAAW,MAAM,CAAA;AAErC,IAAA,QAAQ,gBAAA,CAAiBA,KAAI,CAAA;AAAG;AAAA,MAE5B,KAAK,kBAAA;AAED,QAAA,IAAA,GAAY,UAAA;AACZ,QAAA,MAAA,GAAS,iBAAA,CAAkB,MAAA,EAAQ,MAAA,GAAS,CAAC,CAAA;AAC7C,QAAA;AAAA;AAAA,MAGJ,KAAK,EAAA;AAED,QAAA,kBAAA,EAAmB;AACnB,QAAA;AAAA;AAAA,MAGJ,KAAK,EAAA;AAED,QAAA,IAAI,MAAA,CAAOI,YAAAA,CAAY,MAAA,GAAS,CAAC,CAAC,CAAA,IAAK,aAAA,CAAcA,YAAAA,CAAY,MAAA,GAAS,CAAC,CAAA,EAAGA,YAAAA,CAAY,MAAA,GAAS,CAAC,CAAC,CAAA,EAAG;AAEpG,UAAA,IAAA,GAAY,IAAA;AAQZ,UAAA,MAAA,GAAS,WAAA,CAAY,MAAA,EAAQ,MAAA,GAAS,CAAC,CAAA;AAAA,QAG3C,CAAA,MAAO;AAEH,UAAA,IAAA,GAAY,KAAA;AACZ,UAAA,MAAA,EAAA;AAAA,QACJ;AAEA,QAAA;AAAA;AAAA,MAGJ,KAAK,EAAA;AAED,QAAA,kBAAA,EAAmB;AACnB,QAAA;AAAA;AAAA,MAGJ,KAAK,EAAA;AAED,QAAA,IAAA,GAAY,eAAA;AACZ,QAAA,MAAA,EAAA;AACA,QAAA;AAAA;AAAA,MAGJ,KAAK,EAAA;AAED,QAAA,IAAA,GAAY,gBAAA;AACZ,QAAA,MAAA,EAAA;AACA,QAAA;AAAA;AAAA,MAGJ,KAAK,EAAA;AAED,QAAA,IAAI,aAAA,CAAcJ,KAAAA,EAAMI,YAAAA,CAAY,MAAA,GAAS,CAAC,GAAGA,YAAAA,CAAY,MAAA,GAAS,CAAC,CAAC,CAAA,EAAG;AAEvE,UAAA,mBAAA,EAAoB;AAAA,QACxB,CAAA,MAAO;AAEH,UAAA,IAAA,GAAY,KAAA;AACZ,UAAA,MAAA,EAAA;AAAA,QACJ;AACA,QAAA;AAAA;AAAA,MAGJ,KAAK,EAAA;AAED,QAAA,IAAA,GAAY,KAAA;AACZ,QAAA,MAAA,EAAA;AACA,QAAA;AAAA;AAAA,MAGJ,KAAK,EAAA;AAED,QAAA,IAAI,aAAA,CAAcJ,KAAAA,EAAMI,YAAAA,CAAY,MAAA,GAAS,CAAC,GAAGA,YAAAA,CAAY,MAAA,GAAS,CAAC,CAAC,CAAA,EAAG;AACvE,UAAA,mBAAA,EAAoB;AAAA,QACxB,CAAA,MAAO;AAEH,UAAA,IAAIA,YAAAA,CAAY,SAAS,CAAC,CAAA,KAAM,MAC5BA,YAAAA,CAAY,MAAA,GAAS,CAAC,CAAA,KAAM,EAAA,EAAQ;AACpC,YAAA,IAAA,GAAY,GAAA;AACZ,YAAA,MAAA,GAAS,MAAA,GAAS,CAAA;AAAA,UACtB,CAAA,MAAO;AAEH,YAAA,IAAI,iBAAA,CAAkBJ,KAAAA,EAAMI,YAAAA,CAAY,MAAA,GAAS,CAAC,GAAGA,YAAAA,CAAY,MAAA,GAAS,CAAC,CAAC,CAAA,EAAG;AAE3E,cAAA,qBAAA,EAAsB;AAAA,YAC1B,CAAA,MAAO;AAEH,cAAA,IAAA,GAAY,KAAA;AACZ,cAAA,MAAA,EAAA;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AACA,QAAA;AAAA;AAAA,MAGJ,KAAK,EAAA;AAED,QAAA,IAAI,aAAA,CAAcJ,KAAAA,EAAMI,YAAAA,CAAY,MAAA,GAAS,CAAC,GAAGA,YAAAA,CAAY,MAAA,GAAS,CAAC,CAAC,CAAA,EAAG;AAEvE,UAAA,mBAAA,EAAoB;AAAA,QACxB,CAAA,MAAO;AAEH,UAAA,IAAA,GAAY,KAAA;AACZ,UAAA,MAAA,EAAA;AAAA,QACJ;AAEA,QAAA;AAAA;AAAA,MAGJ,KAAK,EAAA;AAED,QAAA,IAAIA,YAAAA,CAAY,MAAA,GAAS,CAAC,CAAA,KAAM,EAAA,EAAQ;AAGpC,UAAA,IAAA,GAAY,OAAA;AACZ,UAAA,MAAA,GAAS,MAAA,CAAO,OAAA,CAAQ,IAAA,EAAM,MAAA,GAAS,CAAC,CAAA;AACxC,UAAA,MAAA,GAAS,MAAA,KAAW,EAAA,GAAK,MAAA,CAAO,MAAA,GAAS,MAAA,GAAS,CAAA;AAAA,QACtD,CAAA,MAAO;AACH,UAAA,IAAA,GAAY,KAAA;AACZ,UAAA,MAAA,EAAA;AAAA,QACJ;AACA,QAAA;AAAA;AAAA,MAGJ,KAAK,EAAA;AAED,QAAA,IAAA,GAAY,KAAA;AACZ,QAAA,MAAA,EAAA;AACA,QAAA;AAAA;AAAA,MAGJ,KAAK,EAAA;AAED,QAAA,IAAA,GAAY,SAAA;AACZ,QAAA,MAAA,EAAA;AACA,QAAA;AAAA;AAAA,MAGJ,KAAK,EAAA;AAED,QAAA,IAAIA,YAAAA,CAAY,MAAA,GAAS,CAAC,CAAA,KAAM,MAC5BA,YAAAA,CAAY,MAAA,GAAS,CAAC,CAAA,KAAM,EAAA,IAC5BA,YAAAA,CAAY,MAAA,GAAS,CAAC,MAAM,EAAA,EAAQ;AAEpC,UAAA,IAAA,GAAY,GAAA;AACZ,UAAA,MAAA,GAAS,MAAA,GAAS,CAAA;AAAA,QACtB,CAAA,MAAO;AAEH,UAAA,IAAA,GAAY,KAAA;AACZ,UAAA,MAAA,EAAA;AAAA,QACJ;AAEA,QAAA;AAAA;AAAA,MAGJ,KAAK,EAAA;AAED,QAAA,IAAI,iBAAA,CAAkBA,YAAAA,CAAY,MAAA,GAAS,CAAC,CAAA,EAAGA,YAAAA,CAAY,MAAA,GAAS,CAAC,CAAA,EAAGA,YAAAA,CAAY,MAAA,GAAS,CAAC,CAAC,CAAA,EAAG;AAE9F,UAAA,IAAA,GAAY,SAAA;AACZ,UAAA,MAAA,GAAS,WAAA,CAAY,MAAA,EAAQ,MAAA,GAAS,CAAC,CAAA;AAAA,QAC3C,CAAA,MAAO;AAEH,UAAA,IAAA,GAAY,KAAA;AACZ,UAAA,MAAA,EAAA;AAAA,QACJ;AAEA,QAAA;AAAA;AAAA,MAGJ,KAAK,EAAA;AAED,QAAA,IAAA,GAAY,iBAAA;AACZ,QAAA,MAAA,EAAA;AACA,QAAA;AAAA;AAAA,MAGJ,KAAK,EAAA;AAED,QAAA,IAAI,cAAcJ,KAAAA,EAAMI,YAAAA,CAAY,MAAA,GAAS,CAAC,CAAC,CAAA,EAAG;AAE9C,UAAA,qBAAA,EAAsB;AAAA,QAC1B,CAAA,MAAO;AAEH,UAAA,IAAA,GAAY,KAAA;AACZ,UAAA,MAAA,EAAA;AAAA,QACJ;AACA,QAAA;AAAA;AAAA,MAGJ,KAAK,EAAA;AAED,QAAA,IAAA,GAAY,kBAAA;AACZ,QAAA,MAAA,EAAA;AACA,QAAA;AAAA;AAAA,MAGJ,KAAK,GAAA;AAED,QAAA,IAAA,GAAY,gBAAA;AACZ,QAAA,MAAA,EAAA;AACA,QAAA;AAAA;AAAA,MAGJ,KAAK,GAAA;AAED,QAAA,IAAA,GAAY,iBAAA;AACZ,QAAA,MAAA,EAAA;AACA,QAAA;AAAA;AAAA,MAGJ,KAAK,aAAA;AAED,QAAA,mBAAA,EAAoB;AACpB,QAAA;AAAA;AAAA,MAGJ,KAAK,iBAAA;AAED,QAAA,qBAAA,EAAsB;AACtB,QAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQJ;AAEI,QAAA,IAAA,GAAY,KAAA;AACZ,QAAA,MAAA,EAAA;AAAA;AAIR,IAAA,OAAA,CAAQ,IAAA,EAAM,KAAA,EAAO,KAAA,GAAQ,MAAM,CAAA;AAAA,EACvC;AACJ;;;ACxeA,IAAI,eAAA,GAAkB,IAAA;AAEf,IAAM,IAAA,GAAN,MAAM,KAAA,CAAK;AAAA,EACd,OAAO,WAAW,IAAA,EAAM;AACpB,IAAA,OAAO;AAAA,MACH,IAAA,EAAM,IAAA;AAAA,MACN,IAAA,EAAM,IAAA;AAAA,MACN;AAAA,KACJ;AAAA,EACJ;AAAA,EAEA,WAAA,GAAc;AACV,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AAAA,EAClB;AAAA,EACA,WAAW,IAAA,EAAM;AACb,IAAA,OAAO,KAAA,CAAK,WAAW,IAAI,CAAA;AAAA,EAC/B;AAAA;AAAA,EAGA,cAAA,CAAe,MAAM,IAAA,EAAM;AACvB,IAAA,IAAI,MAAA;AAEJ,IAAA,IAAI,oBAAoB,IAAA,EAAM;AAC1B,MAAA,MAAA,GAAS,eAAA;AACT,MAAA,eAAA,GAAkB,eAAA,CAAgB,MAAA;AAClC,MAAA,MAAA,CAAO,IAAA,GAAO,IAAA;AACd,MAAA,MAAA,CAAO,IAAA,GAAO,IAAA;AACd,MAAA,MAAA,CAAO,SAAS,IAAA,CAAK,MAAA;AAAA,IACzB,CAAA,MAAO;AACH,MAAA,MAAA,GAAS;AAAA,QACL,IAAA;AAAA,QACA,IAAA;AAAA,QACA,QAAQ,IAAA,CAAK;AAAA,OACjB;AAAA,IACJ;AAEA,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAEd,IAAA,OAAO,MAAA;AAAA,EACX;AAAA,EACA,aAAA,GAAgB;AACZ,IAAA,MAAM,EAAE,QAAO,GAAI,IAAA;AAEnB,IAAA,IAAA,CAAK,SAAS,MAAA,CAAO,MAAA;AACrB,IAAA,MAAA,CAAO,IAAA,GAAO,IAAA;AACd,IAAA,MAAA,CAAO,IAAA,GAAO,IAAA;AACd,IAAA,MAAA,CAAO,MAAA,GAAS,eAAA;AAChB,IAAA,eAAA,GAAkB,MAAA;AAAA,EACtB;AAAA,EACA,aAAA,CAAc,OAAA,EAAS,OAAA,EAAS,OAAA,EAAS,OAAA,EAAS;AAC9C,IAAA,IAAI,EAAE,QAAO,GAAI,IAAA;AAEjB,IAAA,OAAO,WAAW,IAAA,EAAM;AACpB,MAAA,IAAI,MAAA,CAAO,SAAS,OAAA,EAAS;AACzB,QAAA,MAAA,CAAO,IAAA,GAAO,OAAA;AAAA,MAClB;AAEA,MAAA,IAAI,MAAA,CAAO,SAAS,OAAA,EAAS;AACzB,QAAA,MAAA,CAAO,IAAA,GAAO,OAAA;AAAA,MAClB;AAEA,MAAA,MAAA,GAAS,MAAA,CAAO,MAAA;AAAA,IACpB;AAAA,EACJ;AAAA,EACA,EAAE,MAAA,CAAO,QAAQ,CAAA,GAAI;AACjB,IAAA,KAAA,IAAS,SAAS,IAAA,CAAK,IAAA,EAAM,WAAW,IAAA,EAAM,MAAA,GAAS,OAAO,IAAA,EAAM;AAChE,MAAA,MAAM,MAAA,CAAO,IAAA;AAAA,IACjB;AAAA,EACJ;AAAA;AAAA,EAGA,IAAI,IAAA,GAAO;AACP,IAAA,IAAI,IAAA,GAAO,CAAA;AAEX,IAAA,KAAA,IAAS,SAAS,IAAA,CAAK,IAAA,EAAM,WAAW,IAAA,EAAM,MAAA,GAAS,OAAO,IAAA,EAAM;AAChE,MAAA,IAAA,EAAA;AAAA,IACJ;AAEA,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EACA,IAAI,OAAA,GAAU;AACV,IAAA,OAAO,KAAK,IAAA,KAAS,IAAA;AAAA,EACzB;AAAA,EACA,IAAI,KAAA,GAAQ;AACR,IAAA,OAAO,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,IAAA,CAAK,IAAA;AAAA,EAClC;AAAA,EACA,IAAI,IAAA,GAAO;AACP,IAAA,OAAO,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,IAAA,CAAK,IAAA;AAAA,EAClC;AAAA;AAAA,EAGA,UAAU,KAAA,EAAO;AACb,IAAA,IAAI,MAAA,GAAS,IAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAEZ,IAAA,KAAA,IAAS,QAAQ,KAAA,EAAO;AACpB,MAAA,MAAM,IAAA,GAAO,KAAA,CAAK,UAAA,CAAW,IAAI,CAAA;AAEjC,MAAA,IAAI,WAAW,IAAA,EAAM;AACjB,QAAA,MAAA,CAAO,IAAA,GAAO,IAAA;AAAA,MAClB,CAAA,MAAO;AACH,QAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAAA,MAChB;AAEA,MAAA,IAAA,CAAK,IAAA,GAAO,MAAA;AACZ,MAAA,MAAA,GAAS,IAAA;AAAA,IACb;AAEA,IAAA,IAAA,CAAK,IAAA,GAAO,MAAA;AACZ,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EACA,OAAA,GAAU;AACN,IAAA,OAAO,CAAC,GAAG,IAAI,CAAA;AAAA,EACnB;AAAA,EACA,MAAA,GAAS;AACL,IAAA,OAAO,CAAC,GAAG,IAAI,CAAA;AAAA,EACnB;AAAA;AAAA,EAGA,OAAA,CAAQ,EAAA,EAAI,OAAA,GAAU,IAAA,EAAM;AAExB,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,cAAA,CAAe,IAAA,EAAM,KAAK,IAAI,CAAA;AAElD,IAAA,OAAO,MAAA,CAAO,SAAS,IAAA,EAAM;AACzB,MAAA,MAAM,OAAO,MAAA,CAAO,IAAA;AACpB,MAAA,MAAA,CAAO,OAAO,IAAA,CAAK,IAAA;AACnB,MAAA,EAAA,CAAG,IAAA,CAAK,OAAA,EAAS,IAAA,CAAK,IAAA,EAAM,MAAM,IAAI,CAAA;AAAA,IAC1C;AAGA,IAAA,IAAA,CAAK,aAAA,EAAc;AAAA,EACvB;AAAA,EACA,YAAA,CAAa,EAAA,EAAI,OAAA,GAAU,IAAA,EAAM;AAE7B,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,MAAM,IAAI,CAAA;AAElD,IAAA,OAAO,MAAA,CAAO,SAAS,IAAA,EAAM;AACzB,MAAA,MAAM,OAAO,MAAA,CAAO,IAAA;AACpB,MAAA,MAAA,CAAO,OAAO,IAAA,CAAK,IAAA;AACnB,MAAA,EAAA,CAAG,IAAA,CAAK,OAAA,EAAS,IAAA,CAAK,IAAA,EAAM,MAAM,IAAI,CAAA;AAAA,IAC1C;AAGA,IAAA,IAAA,CAAK,aAAA,EAAc;AAAA,EACvB;AAAA,EACA,MAAA,CAAO,EAAA,EAAI,YAAA,EAAc,OAAA,GAAU,IAAA,EAAM;AAErC,IAAA,IAAI,MAAA,GAAS,IAAA,CAAK,cAAA,CAAe,IAAA,EAAM,KAAK,IAAI,CAAA;AAChD,IAAA,IAAI,GAAA,GAAM,YAAA;AACV,IAAA,IAAI,IAAA;AAEJ,IAAA,OAAO,MAAA,CAAO,SAAS,IAAA,EAAM;AACzB,MAAA,IAAA,GAAO,MAAA,CAAO,IAAA;AACd,MAAA,MAAA,CAAO,OAAO,IAAA,CAAK,IAAA;AAEnB,MAAA,GAAA,GAAM,GAAG,IAAA,CAAK,OAAA,EAAS,KAAK,IAAA,CAAK,IAAA,EAAM,MAAM,IAAI,CAAA;AAAA,IACrD;AAGA,IAAA,IAAA,CAAK,aAAA,EAAc;AAEnB,IAAA,OAAO,GAAA;AAAA,EACX;AAAA,EACA,WAAA,CAAY,EAAA,EAAI,YAAA,EAAc,OAAA,GAAU,IAAA,EAAM;AAE1C,IAAA,IAAI,MAAA,GAAS,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,MAAM,IAAI,CAAA;AAChD,IAAA,IAAI,GAAA,GAAM,YAAA;AACV,IAAA,IAAI,IAAA;AAEJ,IAAA,OAAO,MAAA,CAAO,SAAS,IAAA,EAAM;AACzB,MAAA,IAAA,GAAO,MAAA,CAAO,IAAA;AACd,MAAA,MAAA,CAAO,OAAO,IAAA,CAAK,IAAA;AAEnB,MAAA,GAAA,GAAM,GAAG,IAAA,CAAK,OAAA,EAAS,KAAK,IAAA,CAAK,IAAA,EAAM,MAAM,IAAI,CAAA;AAAA,IACrD;AAGA,IAAA,IAAA,CAAK,aAAA,EAAc;AAEnB,IAAA,OAAO,GAAA;AAAA,EACX;AAAA,EACA,IAAA,CAAK,EAAA,EAAI,OAAA,GAAU,IAAA,EAAM;AACrB,IAAA,KAAA,IAAS,SAAS,IAAA,CAAK,IAAA,EAAM,WAAW,IAAA,EAAM,MAAA,GAAS,OAAO,IAAA,EAAM;AAChE,MAAA,IAAI,GAAG,IAAA,CAAK,OAAA,EAAS,OAAO,IAAA,EAAM,MAAA,EAAQ,IAAI,CAAA,EAAG;AAC7C,QAAA,OAAO,IAAA;AAAA,MACX;AAAA,IACJ;AAEA,IAAA,OAAO,KAAA;AAAA,EACX;AAAA,EACA,GAAA,CAAI,EAAA,EAAI,OAAA,GAAU,IAAA,EAAM;AACpB,IAAA,MAAM,MAAA,GAAS,IAAI,KAAA,EAAK;AAExB,IAAA,KAAA,IAAS,SAAS,IAAA,CAAK,IAAA,EAAM,WAAW,IAAA,EAAM,MAAA,GAAS,OAAO,IAAA,EAAM;AAChE,MAAA,MAAA,CAAO,UAAA,CAAW,GAAG,IAAA,CAAK,OAAA,EAAS,OAAO,IAAA,EAAM,MAAA,EAAQ,IAAI,CAAC,CAAA;AAAA,IACjE;AAEA,IAAA,OAAO,MAAA;AAAA,EACX;AAAA,EACA,MAAA,CAAO,EAAA,EAAI,OAAA,GAAU,IAAA,EAAM;AACvB,IAAA,MAAM,MAAA,GAAS,IAAI,KAAA,EAAK;AAExB,IAAA,KAAA,IAAS,SAAS,IAAA,CAAK,IAAA,EAAM,WAAW,IAAA,EAAM,MAAA,GAAS,OAAO,IAAA,EAAM;AAChE,MAAA,IAAI,GAAG,IAAA,CAAK,OAAA,EAAS,OAAO,IAAA,EAAM,MAAA,EAAQ,IAAI,CAAA,EAAG;AAC7C,QAAA,MAAA,CAAO,UAAA,CAAW,OAAO,IAAI,CAAA;AAAA,MACjC;AAAA,IACJ;AAEA,IAAA,OAAO,MAAA;AAAA,EACX;AAAA,EAEA,SAAA,CAAU,KAAA,EAAO,EAAA,EAAI,OAAA,GAAU,IAAA,EAAM;AACjC,IAAA,IAAI,UAAU,IAAA,EAAM;AAChB,MAAA;AAAA,IACJ;AAGA,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,cAAA,CAAe,IAAA,EAAM,KAAK,CAAA;AAE9C,IAAA,OAAO,MAAA,CAAO,SAAS,IAAA,EAAM;AACzB,MAAA,MAAM,OAAO,MAAA,CAAO,IAAA;AACpB,MAAA,MAAA,CAAO,OAAO,IAAA,CAAK,IAAA;AACnB,MAAA,IAAI,GAAG,IAAA,CAAK,OAAA,EAAS,KAAK,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA,EAAG;AACzC,QAAA;AAAA,MACJ;AAAA,IACJ;AAGA,IAAA,IAAA,CAAK,aAAA,EAAc;AAAA,EACvB;AAAA,EACA,SAAA,CAAU,KAAA,EAAO,EAAA,EAAI,OAAA,GAAU,IAAA,EAAM;AACjC,IAAA,IAAI,UAAU,IAAA,EAAM;AAChB,MAAA;AAAA,IACJ;AAGA,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,cAAA,CAAe,KAAA,EAAO,IAAI,CAAA;AAE9C,IAAA,OAAO,MAAA,CAAO,SAAS,IAAA,EAAM;AACzB,MAAA,MAAM,OAAO,MAAA,CAAO,IAAA;AACpB,MAAA,MAAA,CAAO,OAAO,IAAA,CAAK,IAAA;AACnB,MAAA,IAAI,GAAG,IAAA,CAAK,OAAA,EAAS,KAAK,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA,EAAG;AACzC,QAAA;AAAA,MACJ;AAAA,IACJ;AAGA,IAAA,IAAA,CAAK,aAAA,EAAc;AAAA,EACvB;AAAA;AAAA,EAGA,KAAA,GAAQ;AACJ,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAAA,EAChB;AAAA,EACA,IAAA,GAAO;AACH,IAAA,MAAM,MAAA,GAAS,IAAI,KAAA,EAAK;AAExB,IAAA,KAAA,IAAS,QAAQ,IAAA,EAAM;AACnB,MAAA,MAAA,CAAO,WAAW,IAAI,CAAA;AAAA,IAC1B;AAEA,IAAA,OAAO,MAAA;AAAA,EACX;AAAA,EACA,QAAQ,IAAA,EAAM;AAIV,IAAA,IAAA,CAAK,aAAA,CAAc,IAAA,EAAM,IAAA,EAAM,IAAA,CAAK,MAAM,IAAI,CAAA;AAG9C,IAAA,IAAI,IAAA,CAAK,SAAS,IAAA,EAAM;AAEpB,MAAA,IAAA,CAAK,KAAK,IAAA,GAAO,IAAA;AAEjB,MAAA,IAAA,CAAK,OAAO,IAAA,CAAK,IAAA;AAAA,IACrB,CAAA,MAAO;AAGH,MAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAAA,IAChB;AAGA,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EACA,YAAY,IAAA,EAAM;AACd,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAK,UAAA,CAAW,IAAI,CAAC,CAAA;AAAA,EAC7C;AAAA,EACA,OAAO,IAAA,EAAM;AACT,IAAA,OAAO,IAAA,CAAK,OAAO,IAAI,CAAA;AAAA,EAC3B;AAAA,EACA,WAAW,IAAA,EAAM;AACb,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,KAAA,CAAK,UAAA,CAAW,IAAI,CAAC,CAAA;AAAA,EAC5C;AAAA,EACA,MAAA,CAAO,IAAA,EAAM,MAAA,GAAS,IAAA,EAAM;AACxB,IAAA,IAAI,WAAW,IAAA,EAAM;AAIjB,MAAA,IAAA,CAAK,aAAA,CAAc,MAAA,CAAO,IAAA,EAAM,IAAA,EAAM,QAAQ,IAAI,CAAA;AAElD,MAAA,IAAI,MAAA,CAAO,SAAS,IAAA,EAAM;AAEtB,QAAA,IAAI,IAAA,CAAK,SAAS,MAAA,EAAQ;AACtB,UAAA,MAAM,IAAI,MAAM,+BAAgC,CAAA;AAAA,QACpD;AAGA,QAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,QAAA,MAAA,CAAO,IAAA,GAAO,IAAA;AACd,QAAA,IAAA,CAAK,IAAA,GAAO,MAAA;AACZ,QAAA,IAAA,CAAK,aAAA,CAAc,MAAM,IAAI,CAAA;AAAA,MACjC,CAAA,MAAO;AAEH,QAAA,MAAA,CAAO,KAAK,IAAA,GAAO,IAAA;AACnB,QAAA,IAAA,CAAK,OAAO,MAAA,CAAO,IAAA;AACnB,QAAA,MAAA,CAAO,IAAA,GAAO,IAAA;AACd,QAAA,IAAA,CAAK,IAAA,GAAO,MAAA;AAAA,MAChB;AAAA,IACJ,CAAA,MAAO;AAIH,MAAA,IAAA,CAAK,aAAA,CAAc,IAAA,CAAK,IAAA,EAAM,IAAA,EAAM,MAAM,IAAI,CAAA;AAG9C,MAAA,IAAI,IAAA,CAAK,SAAS,IAAA,EAAM;AAEpB,QAAA,IAAA,CAAK,KAAK,IAAA,GAAO,IAAA;AAEjB,QAAA,IAAA,CAAK,OAAO,IAAA,CAAK,IAAA;AAAA,MACrB,CAAA,MAAO;AAGH,QAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAAA,MAChB;AAGA,MAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAAA,IAChB;AAEA,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EACA,UAAA,CAAW,MAAM,MAAA,EAAQ;AACrB,IAAA,OAAO,KAAK,MAAA,CAAO,KAAA,CAAK,UAAA,CAAW,IAAI,GAAG,MAAM,CAAA;AAAA,EACpD;AAAA,EACA,OAAO,IAAA,EAAM;AAIT,IAAA,IAAA,CAAK,cAAc,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,IAAA,EAAM,KAAK,IAAI,CAAA;AAEnD,IAAA,IAAI,IAAA,CAAK,SAAS,IAAA,EAAM;AACpB,MAAA,IAAA,CAAK,IAAA,CAAK,OAAO,IAAA,CAAK,IAAA;AAAA,IAC1B,CAAA,MAAO;AACH,MAAA,IAAI,IAAA,CAAK,SAAS,IAAA,EAAM;AACpB,QAAA,MAAM,IAAI,MAAM,6BAA8B,CAAA;AAAA,MAClD;AAEA,MAAA,IAAA,CAAK,OAAO,IAAA,CAAK,IAAA;AAAA,IACrB;AAEA,IAAA,IAAI,IAAA,CAAK,SAAS,IAAA,EAAM;AACpB,MAAA,IAAA,CAAK,IAAA,CAAK,OAAO,IAAA,CAAK,IAAA;AAAA,IAC1B,CAAA,MAAO;AACH,MAAA,IAAI,IAAA,CAAK,SAAS,IAAA,EAAM;AACpB,QAAA,MAAM,IAAI,MAAM,6BAA8B,CAAA;AAAA,MAClD;AAEA,MAAA,IAAA,CAAK,OAAO,IAAA,CAAK,IAAA;AAAA,IACrB;AAEA,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAEZ,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EACA,KAAK,IAAA,EAAM;AACP,IAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAK,UAAA,CAAW,IAAI,CAAC,CAAA;AAAA,EACrC;AAAA,EACA,GAAA,GAAM;AACF,IAAA,OAAO,KAAK,IAAA,KAAS,IAAA,GAAO,KAAK,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,GAAI,IAAA;AAAA,EACzD;AAAA,EACA,QAAQ,IAAA,EAAM;AACV,IAAA,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAK,UAAA,CAAW,IAAI,CAAC,CAAA;AAAA,EACtC;AAAA,EACA,KAAA,GAAQ;AACJ,IAAA,OAAO,KAAK,IAAA,KAAS,IAAA,GAAO,KAAK,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,GAAI,IAAA;AAAA,EACzD;AAAA,EACA,YAAY,IAAA,EAAM;AACd,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,IAAA,EAAM,IAAA,CAAK,IAAI,CAAA;AAAA,EAC1C;AAAA,EACA,WAAW,IAAA,EAAM;AACb,IAAA,OAAO,IAAA,CAAK,WAAW,IAAI,CAAA;AAAA,EAC/B;AAAA,EACA,UAAA,CAAW,MAAM,MAAA,EAAQ;AAErB,IAAA,IAAI,IAAA,CAAK,SAAS,IAAA,EAAM;AACpB,MAAA,OAAO,IAAA;AAAA,IACX;AAEA,IAAA,IAAI,MAAA,KAAW,MAAA,IAAa,MAAA,KAAW,IAAA,EAAM;AACzC,MAAA,IAAA,CAAK,cAAc,MAAA,CAAO,IAAA,EAAM,KAAK,IAAA,EAAM,MAAA,EAAQ,KAAK,IAAI,CAAA;AAG5D,MAAA,IAAI,MAAA,CAAO,SAAS,IAAA,EAAM;AAEtB,QAAA,MAAA,CAAO,IAAA,CAAK,OAAO,IAAA,CAAK,IAAA;AACxB,QAAA,IAAA,CAAK,IAAA,CAAK,OAAO,MAAA,CAAO,IAAA;AAAA,MAC5B,CAAA,MAAO;AACH,QAAA,IAAA,CAAK,OAAO,IAAA,CAAK,IAAA;AAAA,MACrB;AAEA,MAAA,MAAA,CAAO,OAAO,IAAA,CAAK,IAAA;AACnB,MAAA,IAAA,CAAK,KAAK,IAAA,GAAO,MAAA;AAAA,IACrB,CAAA,MAAO;AACH,MAAA,IAAA,CAAK,cAAc,IAAA,CAAK,IAAA,EAAM,KAAK,IAAA,EAAM,IAAA,EAAM,KAAK,IAAI,CAAA;AAGxD,MAAA,IAAI,IAAA,CAAK,SAAS,IAAA,EAAM;AAIpB,QAAA,IAAA,CAAK,IAAA,CAAK,OAAO,IAAA,CAAK,IAAA;AAEtB,QAAA,IAAA,CAAK,IAAA,CAAK,OAAO,IAAA,CAAK,IAAA;AAAA,MAC1B,CAAA,MAAO;AAGH,QAAA,IAAA,CAAK,OAAO,IAAA,CAAK,IAAA;AAAA,MACrB;AAGA,MAAA,IAAA,CAAK,OAAO,IAAA,CAAK,IAAA;AAAA,IACrB;AAEA,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EACA,OAAA,CAAQ,SAAS,aAAA,EAAe;AAC5B,IAAA,IAAI,UAAU,aAAA,EAAe;AACzB,MAAA,IAAA,CAAK,UAAA,CAAW,eAAe,OAAO,CAAA;AAAA,IAC1C,CAAA,MAAO;AACH,MAAA,IAAA,CAAK,MAAA,CAAO,eAAe,OAAO,CAAA;AAAA,IACtC;AAEA,IAAA,IAAA,CAAK,OAAO,OAAO,CAAA;AAAA,EACvB;AACJ,CAAA;;;ACpdO,SAAS,iBAAA,CAAkBT,QAAM,OAAA,EAAS;AAG7C,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,MAAA,CAAO,WAAA,CAAY,SAAS,CAAA;AACjD,EAAA,MAAM,UAAA,GAAa,IAAI,KAAA,EAAM;AAE7B,EAAA,OAAO,MAAA,CAAO,OAAO,KAAA,EAAO;AAAA,IACxB,IAAA,EAAAA,MAAAA;AAAA,IACA,OAAA;AAAA,IACA,IAAI,KAAA,GAAQ;AACR,MAAA,OAAA,CAAQ,UAAA,CAAW,SAAS,EAAA,EAAI,OAAA,CAAQ,gBAAgB,CAAA,EAAGA,MAAI,KAAK,OAAO;AAAA,CAAI,CAAA;AAAA,IACnF;AAAA,GACH,CAAA;AACL;;;ACXA,IAAM,eAAA,GAAkB,GAAA;AACxB,IAAM,iBAAA,GAAoB,EAAA;AAC1B,IAAM,eAAA,GAAkB,MAAA;AAExB,SAAS,cAAA,CAAe,EAAE,MAAA,EAAQ,IAAA,EAAM,QAAQ,QAAA,EAAU,UAAA,IAAc,UAAA,EAAY;AAChF,EAAA,SAAS,YAAA,CAAa,OAAO,GAAA,EAAK;AAC9B,IAAA,OAAO,KAAA,CACF,KAAA,CAAM,KAAA,EAAO,GAAG,CAAA,CAChB,GAAA;AAAA,MAAI,CAACW,KAAAA,EAAM,GAAA,KACR,MAAA,CAAO,KAAA,GAAQ,GAAA,GAAM,CAAC,CAAA,CAAE,QAAA,CAAS,YAAY,CAAA,GAAI,IAAA,GAAOA;AAAA,KAC5D,CAAE,KAAK,IAAI,CAAA;AAAA,EACnB;AAEA,EAAA,MAAM,QAAA,GAAW,KAAK,MAAA,CAAO,IAAA,CAAK,IAAI,QAAA,GAAW,CAAA,EAAG,CAAC,CAAC,CAAA;AACtD,EAAA,MAAM,UAAA,GAAa,IAAI,MAAA,CAAO,IAAA,CAAK,IAAI,UAAA,GAAa,CAAA,EAAG,CAAC,CAAC,CAAA;AACzD,EAAA,MAAM,KAAA,GAAA,CAAS,QAAA,GAAW,UAAA,GAAa,MAAA,EAAQ,MAAM,aAAa,CAAA;AAClE,EAAA,MAAM,YAAY,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,GAAO,UAAU,CAAA,GAAI,CAAA;AACnD,EAAA,MAAM,UAAU,IAAA,CAAK,GAAA,CAAI,OAAO,UAAA,EAAY,KAAA,CAAM,SAAS,CAAC,CAAA;AAC5D,EAAA,MAAM,YAAA,GAAe,KAAK,GAAA,CAAI,CAAA,EAAG,OAAO,OAAO,CAAA,CAAE,MAAM,CAAA,GAAI,CAAA;AAC3D,EAAA,IAAI,OAAA,GAAU,CAAA;AAGd,EAAA,MAAA,IAAA,CAAW,gBAAgB,MAAA,GAAS,CAAA,IAAA,CAAM,KAAA,CAAM,IAAA,GAAO,CAAC,CAAA,CAAE,MAAA,CAAO,CAAA,EAAG,MAAA,GAAS,CAAC,CAAA,CAAE,KAAA,CAAM,KAAK,CAAA,IAAK,EAAC,EAAG,MAAA;AAEpG,EAAA,IAAI,SAAS,eAAA,EAAiB;AAC1B,IAAA,OAAA,GAAU,SAAS,iBAAA,GAAoB,CAAA;AACvC,IAAA,MAAA,GAAS,iBAAA,GAAoB,CAAA;AAAA,EACjC;AAEA,EAAA,KAAA,IAAS,CAAA,GAAI,SAAA,EAAW,CAAA,IAAK,OAAA,EAAS,CAAA,EAAA,EAAK;AACvC,IAAA,IAAI,CAAA,IAAK,CAAA,IAAK,CAAA,GAAI,KAAA,CAAM,MAAA,EAAQ;AAC5B,MAAA,KAAA,CAAM,CAAC,CAAA,GAAI,KAAA,CAAM,CAAC,CAAA,CAAE,OAAA,CAAQ,OAAO,eAAe,CAAA;AAClD,MAAA,KAAA,CAAM,CAAC,CAAA,GAAA,CACF,OAAA,GAAU,CAAA,IAAK,KAAA,CAAM,CAAC,CAAA,CAAE,MAAA,GAAS,OAAA,GAAU,QAAA,GAAW,EAAA,IACvD,KAAA,CAAM,CAAC,EAAE,MAAA,CAAO,OAAA,EAAS,eAAA,GAAkB,CAAC,CAAA,IAC3C,KAAA,CAAM,CAAC,CAAA,CAAE,MAAA,GAAS,OAAA,GAAU,eAAA,GAAkB,CAAA,GAAI,QAAA,GAAW,EAAA,CAAA;AAAA,IACtE;AAAA,EACJ;AAEA,EAAA,OAAO;AAAA,IACH,YAAA,CAAa,WAAW,IAAI,CAAA;AAAA,IAC5B,IAAI,MAAM,MAAA,GAAS,YAAA,GAAe,CAAC,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA,GAAI,GAAA;AAAA,IACjD,YAAA,CAAa,MAAM,OAAO;AAAA,GAC9B,CAAE,MAAA,CAAO,OAAO,CAAA,CACX,IAAA,CAAK,IAAI,CAAA,CACT,OAAA,CAAQ,mBAAA,EAAqB,EAAE,CAAA,CAC/B,OAAA,CAAQ,qBAAqB,EAAE,CAAA;AACxC;AAEO,SAASC,YAAAA,CAAY,SAAS,MAAA,EAAQ,MAAA,EAAQ,MAAM,MAAA,EAAQ,QAAA,GAAW,CAAA,EAAG,UAAA,GAAa,CAAA,EAAG;AAC7F,EAAA,MAAM,QAAQ,MAAA,CAAO,MAAA,CAAO,iBAAA,CAAkB,aAAA,EAAe,OAAO,CAAA,EAAG;AAAA,IACnE,MAAA;AAAA,IACA,MAAA;AAAA,IACA,IAAA;AAAA,IACA,MAAA;AAAA,IACA,eAAe,UAAA,EAAY;AACvB,MAAA,OAAO,cAAA,CAAe,EAAE,MAAA,EAAQ,IAAA,EAAM,MAAA,EAAQ,QAAA,EAAU,UAAA,EAAW,EAAG,KAAA,CAAM,UAAU,CAAA,GAAI,CAAA,GAAI,UAAU,CAAA;AAAA,IAC5G,CAAA;AAAA,IACA,IAAI,gBAAA,GAAmB;AACnB,MAAA,OACI,gBAAgB,OAAO;AAAA,CAAA,GACvB,cAAA,CAAe,EAAE,MAAA,EAAQ,IAAA,EAAM,QAAQ,QAAA,EAAU,UAAA,IAAc,CAAC,CAAA;AAAA,IAExE;AAAA,GACH,CAAA;AAED,EAAA,OAAO,KAAA;AACX;;;ACnEO,SAAS,aAAa,UAAA,EAAY;AACrC,EAAA,MAAM,QAAA,GAAW,KAAK,UAAA,EAAW;AACjC,EAAA,IAAI,KAAA,GAAQ,KAAA;AACZ,EAAA,MAAM,OAAA,GAAU;AAAA,IACZ;AAAA,GACJ;AAEA,EAAA,OAAO,CAAC,KAAK,GAAA,EAAK;AACd,IAAA,QAAQ,KAAK,SAAA;AAAW,MACpB,KAAK,OAAA;AACD,QAAA,IAAA,CAAK,IAAA,EAAK;AACV,QAAA;AAAA,MAEJ,KAAK,UAAA;AACD,QAAA,KAAA,GAAQ,IAAA;AACR,QAAA,IAAA,CAAK,IAAA,EAAK;AACV,QAAA;AAAA;AAGR,IAAA,IAAI,KAAA,GAAQ,UAAA,CAAW,OAAA,CAAQ,IAAA,CAAK,MAAM,OAAO,CAAA;AAEjD,IAAA,IAAI,UAAU,MAAA,EAAW;AACrB,MAAA;AAAA,IACJ;AAEA,IAAA,IAAI,KAAA,EAAO;AACP,MAAA,IAAI,WAAW,YAAA,EAAc;AACzB,QAAA,UAAA,CAAW,YAAA,CAAa,IAAA,CAAK,IAAA,EAAM,KAAA,EAAO,UAAU,OAAO,CAAA;AAAA,MAC/D;AACA,MAAA,KAAA,GAAQ,KAAA;AAAA,IACZ;AAEA,IAAA,QAAA,CAAS,KAAK,KAAK,CAAA;AAAA,EACvB;AAEA,EAAA,IAAI,KAAA,IAAS,WAAW,YAAA,EAAc;AAClC,IAAA,UAAA,CAAW,YAAA,CAAa,IAAA,CAAK,IAAA,EAAM,IAAA,EAAM,UAAU,OAAO,CAAA;AAAA,EAC9D;AAEA,EAAA,OAAO,QAAA;AACX;;;AClBA,IAAM,OAAO,MAAM;AAAC,CAAA;AACpB,IAAM,eAAA,GAAkB,EAAA;AACxB,IAAM,UAAA,GAAa,EAAA;AACnB,IAAM,SAAA,GAAY,EAAA;AAClB,IAAM,gBAAA,GAAmB,GAAA;AACzB,IAAM,IAAA,GAAO,CAAA;AAEb,IAAM,YAAA,GAAe;AAAA,EACjB,UAAA,GAAa;AACT,IAAA,OAAO,EAAC;AAAA,EACZ,CAAA;AAAA,EACA,qBAAqB,IAAA,EAAM;AACvB,IAAA,OAAO,CAAC,IAAI,CAAA;AAAA,EAChB,CAAA;AAAA,EACA,iBAAiB,IAAA,EAAM;AACnB,IAAA,OAAO,IAAA,IAAQ,IAAA,CAAK,CAAC,CAAA,IAAK,IAAA;AAAA,EAC9B,CAAA;AAAA,EACA,gBAAgB,IAAA,EAAM;AAClB,IAAA,OAAO,IAAA,IAAQ,KAAK,MAAA,GAAS,CAAA,GAAI,KAAK,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,GAAI,IAAA;AAAA,EAC7D;AACJ,CAAA;AAEA,IAAM,WAAA,GAAc;AAAA,EAChB,UAAA,GAAa;AACT,IAAA,OAAO,IAAI,IAAA,EAAK;AAAA,EACpB,CAAA;AAAA,EACA,qBAAqB,IAAA,EAAM;AACvB,IAAA,OAAO,IAAI,IAAA,EAAK,CAAE,UAAA,CAAW,IAAI,CAAA;AAAA,EACrC,CAAA;AAAA,EACA,iBAAiB,IAAA,EAAM;AACnB,IAAA,OAAO,QAAQ,IAAA,CAAK,KAAA;AAAA,EACxB,CAAA;AAAA,EACA,gBAAgB,IAAA,EAAM;AAClB,IAAA,OAAO,QAAQ,IAAA,CAAK,IAAA;AAAA,EACxB;AACJ,CAAA;AAEA,SAAS,mBAAmBZ,MAAAA,EAAM;AAC9B,EAAA,OAAO,WAAW;AACd,IAAA,OAAO,IAAA,CAAKA,MAAI,CAAA,EAAE;AAAA,EACtB,CAAA;AACJ;AAEA,SAAS,iBAAiB,IAAA,EAAM;AAC5B,EAAA,MAAM,MAAA,mBAAS,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA;AAEjC,EAAA,KAAA,MAAWA,MAAAA,IAAQ,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,EAAG;AAClC,IAAA,MAAM,IAAA,GAAO,KAAKA,MAAI,CAAA;AACtB,IAAA,MAAM,EAAA,GAAK,KAAK,KAAA,IAAS,IAAA;AAEzB,IAAA,IAAI,EAAA,EAAI;AACJ,MAAA,MAAA,CAAOA,MAAI,CAAA,GAAI,EAAA;AAAA,IACnB;AAAA,EACJ;AAEA,EAAA,OAAO,MAAA;AACX;AAEA,SAAS,cAAc,MAAA,EAAQ;AAC3B,EAAA,MAAM,WAAA,GAAc;AAAA,IAChB,OAAA,kBAAS,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA;AAAA,IAC3B,QAAA,EAAU,OAAO,MAAA,iBAAO,MAAA,CAAO,OAAO,IAAI,CAAA,EAAG,OAAO,QAAQ,CAAA;AAAA,IAC5D,KAAA,EAAO,OAAO,MAAA,iBAAO,MAAA,CAAO,OAAO,IAAI,CAAA,EAAG,OAAO,KAAK,CAAA;AAAA,IACtD,MAAA,EAAQ,gBAAA,CAAiB,MAAA,CAAO,MAAM,CAAA;AAAA,IACtC,MAAA,EAAQ,gBAAA,CAAiB,MAAA,CAAO,MAAM,CAAA;AAAA,IACtC,IAAA,EAAM,gBAAA,CAAiB,MAAA,CAAO,IAAI;AAAA,GACtC;AAEA,EAAA,KAAA,MAAW,CAACA,QAAM,OAAO,CAAA,IAAK,OAAO,OAAA,CAAQ,MAAA,CAAO,YAAY,CAAA,EAAG;AAC/D,IAAA,QAAQ,OAAO,OAAA;AAAS,MACpB,KAAK,UAAA;AACD,QAAA,WAAA,CAAY,OAAA,CAAQA,MAAI,CAAA,GAAI,OAAA;AAC5B,QAAA;AAAA,MAEJ,KAAK,QAAA;AACD,QAAA,WAAA,CAAY,OAAA,CAAQA,MAAI,CAAA,GAAI,kBAAA,CAAmB,OAAO,CAAA;AACtD,QAAA;AAAA;AACR,EACJ;AAEA,EAAA,OAAO;AAAA,IACH,MAAA,EAAQ,WAAA;AAAA,IACR,GAAG,WAAA;AAAA,IACH,GAAG,WAAA,CAAY;AAAA,GACnB;AACJ;AAEO,SAAS,aAAa,MAAA,EAAQ;AACjC,EAAA,IAAI,MAAA,GAAS,EAAA;AACb,EAAA,IAAI,QAAA,GAAW,WAAA;AACf,EAAA,IAAI,aAAA,GAAgB,KAAA;AACpB,EAAA,IAAI,YAAA,GAAe,IAAA;AACnB,EAAA,IAAI,iBAAA,GAAoB,KAAA;AAExB,EAAA,MAAM,WAAA,GAAc,IAAI,gBAAA,EAAiB;AACzC,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,IAAI,WAAA,IAAe,aAAA,CAAc,MAAA,IAAU,EAAE,CAAA,EAAG;AAAA,IACzE,kBAAA,EAAoB,IAAA;AAAA,IACpB,gBAAA,EAAkB,IAAA;AAAA,IAClB,UAAA,EAAY,IAAA;AAAA,IACZ,mBAAA,EAAqB,KAAA;AAAA,IAErB,YAAA;AAAA,IAEA,wBAAwB,MAAM,CAAA;AAAA,IAC9B,6BAA6BK,KAAAA,EAAM;AAC/B,MAAA,OAAOA,KAAAA,KAAS,mBAAmB,CAAA,GAAI,CAAA;AAAA,IAC3C,CAAA;AAAA,IACA,wCAAwCA,KAAAA,EAAM;AAC1C,MAAA,OAAOA,KAAAA,KAAS,gBAAA,IAAoBA,KAAAA,KAAS,SAAA,GAAY,CAAA,GAAI,CAAA;AAAA,IACjE,CAAA;AAAA,IACA,uCAAuCA,KAAAA,EAAM;AACzC,MAAA,OAAOA,KAAAA,KAAS,eAAA,IAAmBA,KAAAA,KAAS,SAAA,GAAY,CAAA,GAAI,CAAA;AAAA,IAChE,CAAA;AAAA,IACA,8BAA8BA,KAAAA,EAAM;AAChC,MAAA,OAAOA,KAAAA,KAAS,YAAY,CAAA,GAAI,CAAA;AAAA,IACpC,CAAA;AAAA,IAEA,UAAA,EAAY,IAAA;AAAA,IACZ,oBAAA,EAAsB,IAAA;AAAA,IACtB,gBAAA,EAAkB,IAAA;AAAA,IAClB,eAAA,EAAiB,IAAA;AAAA,IAEjB,iBAAA,CAAkB,UAAU,QAAA,EAAU;AAClC,MAAA,MAAM,aAAa,IAAA,CAAK,UAAA;AAExB,MAAA,IAAI;AACA,QAAA,OAAO,QAAA,CAAS,KAAK,IAAI,CAAA;AAAA,MAC7B,SAAS,CAAA,EAAG;AACR,QAAA,IAAI,iBAAA,EAAmB;AACnB,UAAA,MAAM,CAAA;AAAA,QACV;AAEA,QAAA,IAAA,CAAK,IAAA,CAAK,UAAA,GAAa,IAAA,CAAK,UAAU,CAAA;AACtC,QAAA,MAAM,YAAA,GAAe,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA;AAEvC,QAAA,iBAAA,GAAoB,IAAA;AACpB,QAAA,YAAA,CAAa,GAAG,YAAY,CAAA;AAC5B,QAAA,iBAAA,GAAoB,KAAA;AAEpB,QAAA,OAAO,YAAA;AAAA,MACX;AAAA,IACJ,CAAA;AAAA,IAEA,gBAAgB,MAAA,EAAQ;AACpB,MAAA,IAAI,IAAA;AAEJ,MAAA,GAAG;AACC,QAAA,IAAA,GAAO,IAAA,CAAK,WAAW,MAAA,EAAQ,CAAA;AAC/B,QAAA,IAAI,IAAA,KAAS,UAAA,IAAc,IAAA,KAAS,OAAA,EAAS;AACzC,UAAA,OAAO,IAAA;AAAA,QACX;AAAA,MACJ,SAAS,IAAA,KAAS,IAAA;AAElB,MAAA,OAAO,IAAA;AAAA,IACX,CAAA;AAAA,IAEA,WAAW,MAAA,EAAQ;AACf,MAAA,OAAO,MAAA,IAAU,KAAK,MAAA,GAAS,MAAA,CAAO,SAAS,MAAA,CAAO,UAAA,CAAW,MAAM,CAAA,GAAI,CAAA;AAAA,IAC/E,CAAA;AAAA,IACA,SAAA,CAAU,aAAa,SAAA,EAAW;AAC9B,MAAA,OAAO,MAAA,CAAO,SAAA,CAAU,WAAA,EAAa,SAAS,CAAA;AAAA,IAClD,CAAA;AAAA,IACA,eAAe,KAAA,EAAO;AAClB,MAAA,OAAO,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,KAAA,EAAO,KAAK,UAAU,CAAA;AAAA,IACvD,CAAA;AAAA,IAEA,OAAA,CAAQ,QAAQ,QAAA,EAAU;AACtB,MAAA,OAAO,OAAA,CAAQ,MAAA,EAAQ,MAAA,EAAQ,QAAQ,CAAA;AAAA,IAC3C,CAAA;AAAA,IACA,MAAA,CAAO,WAAA,EAAa,SAAA,EAAW,GAAA,EAAK;AAChC,MAAA,OAAO,MAAA,CAAO,MAAA,EAAQ,WAAA,EAAa,SAAA,EAAW,GAAG,CAAA;AAAA,IACrD,CAAA;AAAA,IAEA,QAAQG,UAAAA,EAAW;AACf,MAAA,MAAM,QAAQ,IAAA,CAAK,UAAA;AAEnB,MAAA,IAAA,CAAK,IAAIA,UAAS,CAAA;AAElB,MAAA,OAAO,IAAA,CAAK,eAAe,KAAK,CAAA;AAAA,IACpC,CAAA;AAAA,IACA,mBAAA,GAAsB;AAClB,MAAA,MAAMR,SAAO,MAAA,CAAO,SAAA,CAAU,KAAK,UAAA,EAAY,IAAA,CAAK,WAAW,CAAC,CAAA;AAEhE,MAAA,IAAA,CAAK,IAAI,QAAa,CAAA;AAEtB,MAAA,OAAOA,MAAAA;AAAA,IACX,CAAA;AAAA,IACA,cAAc,IAAA,EAAM;AAChB,MAAA,MAAML,OAAAA,GAAS,OAAO,SAAA,CAAU,IAAA,CAAK,YAAY,aAAA,CAAc,MAAA,EAAQ,IAAA,CAAK,UAAU,CAAC,CAAA;AAEvF,MAAA,IAAA,CAAK,IAAI,IAAI,CAAA;AAEb,MAAA,OAAOA,OAAAA;AAAA,IACX,CAAA;AAAA,IAEA,IAAIa,UAAAA,EAAW;AACX,MAAA,IAAI,IAAA,CAAK,cAAcA,UAAAA,EAAW;AAC9B,QAAA,MAAM,YAAY,aAAA,CAAWA,UAAS,CAAA,CAAE,KAAA,CAAM,GAAG,EAAE,CAAA,CAAE,OAAA,CAAQ,IAAA,EAAM,GAAG,CAAA,CAAE,OAAA,CAAQ,MAAM,CAAA,CAAA,KAAK,CAAA,CAAE,aAAa,CAAA;AAC1G,QAAA,IAAI,OAAA,GAAU,GAAG,WAAA,CAAY,IAAA,CAAK,SAAS,CAAA,GAAI,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,CAAA,GAAM,SAAS,CAAA,YAAA,CAAA;AAC3E,QAAA,IAAI,SAAS,IAAA,CAAK,UAAA;AAGlB,QAAA,QAAQA,UAAAA;AAAW,UACf,KAAK,KAAA;AAED,YAAA,IAAI,IAAA,CAAK,SAAA,KAAc,QAAA,IAAiB,IAAA,CAAK,cAAc,GAAA,EAAK;AAC5D,cAAA,MAAA,GAAS,KAAK,QAAA,GAAW,CAAA;AACzB,cAAA,OAAA,GAAU,2CAAA;AAAA,YACd,CAAA,MAAO;AACH,cAAA,OAAA,GAAU,wBAAA;AAAA,YACd;AACA,YAAA;AAAA,UAEJ,KAAK,IAAA;AACD,YAAA,IAAI,IAAA,CAAK,OAAA,CAAQ,UAAU,CAAA,EAAG;AAC1B,cAAA,IAAA,CAAK,IAAA,EAAK;AACV,cAAA,MAAA,EAAA;AACA,cAAA,OAAA,GAAU,kBAAA;AAAA,YACd;AACA,YAAA;AAAA,UAEJ,KAAK,UAAA;AACD,YAAA,IAAI,IAAA,CAAK,cAAcL,OAAAA,EAAa;AAChC,cAAA,MAAA,GAAS,IAAA,CAAK,QAAA;AACd,cAAA,OAAA,GAAU,0BAAA;AAAA,YACd;AACA,YAAA;AAAA;AAGR,QAAA,IAAA,CAAK,KAAA,CAAM,SAAS,MAAM,CAAA;AAAA,MAC9B;AAEA,MAAA,IAAA,CAAK,IAAA,EAAK;AAAA,IACd,CAAA;AAAA,IACA,SAASH,MAAAA,EAAM;AACX,MAAA,IAAI,IAAA,CAAK,cAAc,KAAA,IAAS,IAAA,CAAK,YAAY,CAAA,EAAGA,MAAI,MAAM,KAAA,EAAO;AACjE,QAAA,IAAA,CAAK,KAAA,CAAM,CAAA,YAAA,EAAeA,MAAI,CAAA,aAAA,CAAe,CAAA;AAAA,MACjD;AAEA,MAAA,IAAA,CAAK,IAAA,EAAK;AAAA,IACd,CAAA;AAAA,IACA,SAASK,KAAAA,EAAM;AACX,MAAA,IAAI,CAAC,IAAA,CAAK,OAAA,CAAQA,KAAI,CAAA,EAAG;AACrB,QAAA,IAAA,CAAK,MAAM,CAAA,OAAA,EAAU,MAAA,CAAO,YAAA,CAAaA,KAAI,CAAC,CAAA,aAAA,CAAe,CAAA;AAAA,MACjE;AAEA,MAAA,IAAA,CAAK,IAAA,EAAK;AAAA,IACd,CAAA;AAAA,IAEA,WAAA,CAAY,OAAO,GAAA,EAAK;AACpB,MAAA,IAAI,aAAA,EAAe;AACf,QAAA,OAAO,WAAA,CAAY,gBAAA;AAAA,UACf,KAAA;AAAA,UACA,GAAA;AAAA,UACA;AAAA,SACJ;AAAA,MACJ;AAEA,MAAA,OAAO,IAAA;AAAA,IACX,CAAA;AAAA,IACA,oBAAoB,IAAA,EAAM;AACtB,MAAA,IAAI,aAAA,EAAe;AACf,QAAA,MAAM,IAAA,GAAO,IAAA,CAAK,gBAAA,CAAiB,IAAI,CAAA;AACvC,QAAA,MAAM,IAAA,GAAO,IAAA,CAAK,eAAA,CAAgB,IAAI,CAAA;AACtC,QAAA,OAAO,WAAA,CAAY,gBAAA;AAAA,UACf,IAAA,KAAS,OAAO,IAAA,CAAK,GAAA,CAAI,MAAM,MAAA,GAAS,WAAA,CAAY,cAAc,IAAA,CAAK,UAAA;AAAA,UACvE,IAAA,KAAS,OAAO,IAAA,CAAK,GAAA,CAAI,IAAI,MAAA,GAAS,WAAA,CAAY,cAAc,IAAA,CAAK,UAAA;AAAA,UACrE;AAAA,SACJ;AAAA,MACJ;AAEA,MAAA,OAAO,IAAA;AAAA,IACX,CAAA;AAAA,IAEA,KAAA,CAAM,SAAS,MAAA,EAAQ;AACnB,MAAA,MAAM,QAAA,GAAW,OAAO,MAAA,KAAW,WAAA,IAAe,MAAA,GAAS,OAAO,MAAA,GAC5D,WAAA,CAAY,WAAA,CAAY,MAAM,CAAA,GAC9B,IAAA,CAAK,MACD,WAAA,CAAY,WAAA,CAAY,mBAAA,CAAoB,MAAA,EAAQ,MAAA,CAAO,MAAA,GAAS,CAAC,CAAC,CAAA,GACtE,WAAA,CAAY,WAAA,CAAY,IAAA,CAAK,UAAU,CAAA;AAEjD,MAAA,MAAM,IAAIO,YAAAA;AAAA,QACN,OAAA,IAAW,kBAAA;AAAA,QACX,MAAA;AAAA,QACA,QAAA,CAAS,MAAA;AAAA,QACT,QAAA,CAAS,IAAA;AAAA,QACT,QAAA,CAAS,MAAA;AAAA,QACT,WAAA,CAAY,SAAA;AAAA,QACZ,WAAA,CAAY;AAAA,OAChB;AAAA,IACJ;AAAA,GACH,CAAA;AACD,EAAA,MAAM,wBAAwB,OAAO;AAAA,IACjC,QAAA;AAAA,IACA,MAAA;AAAA,IACA,YAAY,MAAA,CAAO,UAAA;AAAA,IAEnB,YAAA,EAAc,CAAC,KAAA,KACX,MAAA,CAAO,aAAa,KAAK,CAAA;AAAA,IAC7B,kBAAkB,CAAC,KAAA,KACf,cAAW,MAAA,CAAO,YAAA,CAAa,KAAK,CAAC,CAAA;AAAA,IACzC,aAAA,EAAe,CAAC,KAAA,KACZ,MAAA,CAAO,cAAc,KAAK,CAAA;AAAA,IAC9B,WAAA,EAAa,CAAC,KAAA,KACV,MAAA,CAAO,YAAY,KAAK,CAAA;AAAA,IAC5B,aAAA,EAAe,CAAC,KAAA,KACZ,MAAA,CAAO,MAAA,CAAO,SAAA,CAAU,MAAA,CAAO,aAAA,CAAc,KAAK,CAAA,EAAG,MAAA,CAAO,WAAA,CAAY,KAAK,CAAC,CAAA;AAAA,IAElF,SAAA,EAAW,CAAC,KAAA,EAAO,GAAA,KACf,OAAO,MAAA,CAAO,SAAA,CAAU,OAAO,GAAG,CAAA;AAAA,IAEtC,SAAS,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA,EAAG,MAAA,CAAO,aAAa,CAAC,CAAA;AAAA,IACzD,wBAAwB,MAAA,CAAO,sBAAA;AAAA,IAC/B,wBAAwB,MAAA,CAAO,sBAAA;AAAA,IAC/B,sBAAA,EAAwB,CAAC,KAAA,KACrB,MAAA,CAAO,uBAAuB,KAAK,CAAA;AAAA,IAEvC,aAAa,CAAC,MAAA,KACV,WAAA,CAAY,WAAA,CAAY,QAAQ,QAAQ,CAAA;AAAA,IAC5C,gBAAA,EAAkB,CAAC,KAAA,EAAO,GAAA,KACtB,YAAY,gBAAA,CAAiB,KAAA,EAAO,KAAK,QAAQ;AAAA,GACzD,CAAA;AAEA,EAAA,MAAMC,OAAAA,GAAQ,SAAS,OAAA,EAAS,OAAA,EAAS;AACrC,IAAA,MAAA,GAAS,OAAA;AACT,IAAA,OAAA,GAAU,WAAW,EAAC;AAEtB,IAAA,MAAA,CAAO,SAAA,CAAU,QAAQ,QAAQ,CAAA;AACjC,IAAA,WAAA,CAAY,SAAA;AAAA,MACR,MAAA;AAAA,MACA,OAAA,CAAQ,MAAA;AAAA,MACR,OAAA,CAAQ,IAAA;AAAA,MACR,OAAA,CAAQ;AAAA,KACZ;AAEA,IAAA,QAAA,GAAW,QAAQ,QAAA,IAAY,WAAA;AAC/B,IAAA,aAAA,GAAgB,OAAA,CAAQ,QAAQ,SAAS,CAAA;AACzC,IAAA,YAAA,GAAe,OAAO,OAAA,CAAQ,YAAA,KAAiB,UAAA,GAAa,QAAQ,YAAA,GAAe,IAAA;AACnF,IAAA,iBAAA,GAAoB,KAAA;AAEpB,IAAA,MAAA,CAAO,qBAAqB,oBAAA,IAAwB,OAAA,GAAU,OAAA,CAAQ,OAAA,CAAQ,kBAAkB,CAAA,GAAI,IAAA;AACpG,IAAA,MAAA,CAAO,mBAAmB,kBAAA,IAAsB,OAAA,GAAU,OAAA,CAAQ,OAAA,CAAQ,gBAAgB,CAAA,GAAI,IAAA;AAC9F,IAAA,MAAA,CAAO,aAAa,YAAA,IAAgB,OAAA,GAAU,OAAA,CAAQ,OAAA,CAAQ,UAAU,CAAA,GAAI,IAAA;AAC5E,IAAA,MAAA,CAAO,sBAAsB,qBAAA,IAAyB,OAAA,GAAU,OAAA,CAAQ,OAAA,CAAQ,mBAAmB,CAAA,GAAI,KAAA;AAEvG,IAAA,MAAM,EAAE,OAAA,GAAU,SAAA,EAAW,OAAO,IAAA,EAAM,SAAA,EAAW,SAAQ,GAAI,OAAA;AAEjE,IAAA,IAAI,OAAA,IAAW,MAAA,CAAO,OAAA,KAAY,KAAA,EAAO;AACrC,MAAA,MAAM,IAAI,KAAA,CAAM,mBAAA,GAAsB,OAAA,GAAU,GAAG,CAAA;AAAA,IACvD;AAEA,IAAA,MAAA,CAAO,MAAA,CAAO,MAAA,EAAQ,IAAA,GAAO,WAAA,GAAc,YAAY,CAAA;AAEvD,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,EAAG;AACxB,MAAA,MAAA,CAAO,YAAA,CAAa,CAAC,IAAA,EAAM,KAAA,EAAO,GAAA,KAAQ;AACtC,QAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,IAAA,EAAM,KAAA,EAAO,KAAK,CAAA;AAAA,MACrC,CAAC,CAAA;AAAA,IACL,CAAA,MAAA,IAAW,OAAO,OAAA,KAAY,UAAA,EAAY;AACtC,MAAA,MAAA,CAAO,YAAA,CAAa,OAAA,CAAQ,IAAA,CAAK,qBAAA,EAAuB,CAAC,CAAA;AAAA,IAC7D;AAEA,IAAA,IAAI,OAAO,cAAc,UAAA,EAAY;AACjC,MAAA,MAAA,CAAO,YAAA,CAAa,CAAC,IAAA,EAAM,KAAA,EAAO,GAAA,KAAQ;AACtC,QAAA,IAAI,SAAS,OAAA,EAAS;AAClB,UAAA,MAAM,GAAA,GAAM,MAAA,CAAO,WAAA,CAAY,KAAA,EAAO,GAAG,CAAA;AACzC,UAAA,MAAM,QAAQ,MAAA,CAAO,MAAA,EAAQ,MAAM,CAAA,EAAG,GAAA,EAAK,IAAI,CAAA,GACzC,MAAA,CAAO,MAAM,KAAA,GAAQ,CAAA,EAAG,MAAM,CAAC,CAAA,GAC/B,OAAO,KAAA,CAAM,KAAA,GAAQ,GAAG,GAAG,CAAA;AAEjC,UAAA,SAAA,CAAU,OAAO,GAAG,CAAA;AAAA,QACxB;AAAA,MACJ,CAAC,CAAA;AAAA,IACL;AAEA,IAAA,MAAM,MAAM,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,CAAE,IAAA,CAAK,QAAQ,OAAO,CAAA;AAExD,IAAA,IAAI,CAAC,OAAO,GAAA,EAAK;AACb,MAAA,MAAA,CAAO,KAAA,EAAM;AAAA,IACjB;AAEA,IAAA,OAAO,GAAA;AAAA,EACX,CAAA;AAEA,EAAA,OAAO,MAAA,CAAO,OAAOA,OAAAA,EAAO;AAAA,IACxB,WAAA,EAAAD,YAAAA;AAAA,IACA,QAAQ,MAAA,CAAO;AAAA,GAClB,CAAA;AACL;;;AC3ZA,IAAA,2BAAA,GAAmC,OAAA,CAAA,4BAAA,EAAA,CAAA;AAEnC,IAAM,6BAAa,IAAI,GAAA,CAAI,CAAC,QAAA,EAAU,UAAA,EAAY,aAAa,CAAC,CAAA;AAEzD,SAAS,kBAAkB,QAAA,EAAU;AACxC,EAAA,MAAM,GAAA,GAAM,IAAI,2BAAA,CAAA,kBAAA,EAAmB;AACnC,EAAA,MAAM,SAAA,GAAY;AAAA,IACd,IAAA,EAAM,CAAA;AAAA,IACN,MAAA,EAAQ;AAAA,GACZ;AACA,EAAA,MAAM,QAAA,GAAW;AAAA,IACb,IAAA,EAAM,CAAA;AAAA;AAAA,IACN,MAAA,EAAQ;AAAA,GACZ;AACA,EAAA,MAAM,kBAAA,GAAqB;AAAA,IACvB,IAAA,EAAM,CAAA;AAAA,IACN,MAAA,EAAQ;AAAA,GACZ;AACA,EAAA,MAAM,gBAAA,GAAmB;AAAA,IACrB,SAAA,EAAW;AAAA,GACf;AACA,EAAA,IAAI,IAAA,GAAO,CAAA;AACX,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,IAAI,mBAAA,GAAsB,KAAA;AAE1B,EAAA,MAAM,mBAAmB,QAAA,CAAS,IAAA;AAClC,EAAA,QAAA,CAAS,IAAA,GAAO,SAAS,IAAA,EAAM;AAC3B,IAAA,IAAI,IAAA,CAAK,OAAO,IAAA,CAAK,GAAA,CAAI,SAAS,UAAA,CAAW,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,EAAG;AACzD,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,IAAA;AAChC,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,MAAA,GAAS,CAAA;AAE3C,MAAA,IAAI,QAAA,CAAS,IAAA,KAAS,QAAA,IAClB,QAAA,CAAS,WAAW,UAAA,EAAY;AAChC,QAAA,QAAA,CAAS,IAAA,GAAO,QAAA;AAChB,QAAA,QAAA,CAAS,MAAA,GAAS,UAAA;AAElB,QAAA,SAAA,CAAU,IAAA,GAAO,IAAA;AACjB,QAAA,SAAA,CAAU,MAAA,GAAS,MAAA;AAEnB,QAAA,IAAI,mBAAA,EAAqB;AACrB,UAAA,mBAAA,GAAsB,KAAA;AACtB,UAAA,IAAI,UAAU,IAAA,KAAS,kBAAA,CAAmB,QACtC,SAAA,CAAU,MAAA,KAAW,mBAAmB,MAAA,EAAQ;AAChD,YAAA,GAAA,CAAI,WAAW,gBAAgB,CAAA;AAAA,UACnC;AAAA,QACJ;AAEA,QAAA,mBAAA,GAAsB,IAAA;AACtB,QAAA,GAAA,CAAI,UAAA,CAAW;AAAA,UACX,MAAA,EAAQ,KAAK,GAAA,CAAI,MAAA;AAAA,UACjB,QAAA;AAAA,UACA;AAAA,SACH,CAAA;AAAA,MACL;AAAA,IACJ;AAEA,IAAA,gBAAA,CAAiB,IAAA,CAAK,MAAM,IAAI,CAAA;AAEhC,IAAA,IAAI,mBAAA,IAAuB,UAAA,CAAW,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,EAAG;AAClD,MAAA,kBAAA,CAAmB,IAAA,GAAO,IAAA;AAC1B,MAAA,kBAAA,CAAmB,MAAA,GAAS,MAAA;AAAA,IAChC;AAAA,EACJ,CAAA;AAEA,EAAA,MAAM,mBAAmB,QAAA,CAAS,IAAA;AAClC,EAAA,QAAA,CAAS,IAAA,GAAO,SAAS,KAAA,EAAO,IAAA,EAAM,IAAA,EAAM;AACxC,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACnC,MAAA,IAAI,KAAA,CAAM,UAAA,CAAW,CAAC,CAAA,KAAM,EAAA,EAAI;AAC5B,QAAA,IAAA,EAAA;AACA,QAAA,MAAA,GAAS,CAAA;AAAA,MACb,CAAA,MAAO;AACH,QAAA,MAAA,EAAA;AAAA,MACJ;AAAA,IACJ;AAEA,IAAA,gBAAA,CAAiB,KAAA,EAAO,MAAM,IAAI,CAAA;AAAA,EACtC,CAAA;AAEA,EAAA,MAAM,qBAAqB,QAAA,CAAS,MAAA;AACpC,EAAA,QAAA,CAAS,SAAS,WAAW;AACzB,IAAA,IAAI,mBAAA,EAAqB;AACrB,MAAA,GAAA,CAAI,WAAW,gBAAgB,CAAA;AAAA,IACnC;AAEA,IAAA,OAAO;AAAA,MACH,KAAK,kBAAA,EAAmB;AAAA,MACxB;AAAA,KACJ;AAAA,EACJ,CAAA;AAEA,EAAA,OAAO,QAAA;AACX;;;AC3FA,IAAA,oBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,oBAAA,EAAA;AAAA,EAAA,IAAA,EAAA,MAAA,IAAA;AAAA,EAAA,IAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAkBA,IAAM,QAAA,GAAW,EAAA;AACjB,IAAM,WAAA,GAAc,EAAA;AAMpB,IAAM,IAAA,GAAO,CAAC,IAAA,EAAM,KAAA,KAAU;AAC1B,EAAA,IAAI,SAAS,KAAA,EAAO;AAChB,IAAA,IAAA,GAAO,KAAA;AAAA,EACX;AAEA,EAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAC1B,IAAA,IAAA,GAAO,KAAK,GAAA,CAAI,IAAA,CAAK,WAAW,CAAC,CAAA,EAAG,GAAI,CAAA,IAAK,CAAA;AAAA,EACjD;AAEA,EAAA,OAAO,IAAA,IAAQ,CAAA;AACnB,CAAA;AAQA,IAAM,SAAA,GAAY;AAAA,EACd,CAAC,OAAO,KAAK,CAAA;AAAA,EACb,CAAC,OAAO,QAAa,CAAA;AAAA,EACrB,CAAC,OAAO,GAAG,CAAA;AAAA,EACX,CAAC,OAAO,MAAM,CAAA;AAAA,EACd,CAAC,OAAO,GAAG,CAAA;AAAA,EACX,CAAC,OAAOT,OAAW,CAAA;AAAA,EACnB,CAAC,OAAO,UAAU,CAAA;AAAA,EAClB,CAAC,OAAO,SAAS,CAAA;AAAA,EACjB,CAAC,OAAO,GAAG,CAAA;AAAA,EACX,CAAC,OAAO,eAAe,CAAA;AAAA,EAEvB,CAAC,WAAW,KAAK,CAAA;AAAA,EACjB,CAAC,WAAW,QAAa,CAAA;AAAA,EACzB,CAAC,WAAW,GAAG,CAAA;AAAA,EACf,CAAC,WAAW,MAAM,CAAA;AAAA,EAClB,CAAC,WAAW,GAAG,CAAA;AAAA,EACf,CAAC,WAAWA,OAAW,CAAA;AAAA,EACvB,CAAC,WAAW,UAAU,CAAA;AAAA,EACtB,CAAC,WAAW,SAAS,CAAA;AAAA,EACrB,CAAC,WAAW,GAAG,CAAA;AAAA,EAEf,CAAC,MAAM,KAAK,CAAA;AAAA,EACZ,CAAC,MAAM,QAAa,CAAA;AAAA,EACpB,CAAC,MAAM,GAAG,CAAA;AAAA,EACV,CAAC,MAAM,MAAM,CAAA;AAAA,EACb,CAAC,MAAM,GAAG,CAAA;AAAA,EACV,CAAC,MAAMA,OAAW,CAAA;AAAA,EAClB,CAAC,MAAM,UAAU,CAAA;AAAA,EACjB,CAAC,MAAM,SAAS,CAAA;AAAA,EAChB,CAAC,MAAM,GAAG,CAAA;AAAA,EAEV,CAAC,WAAW,KAAK,CAAA;AAAA,EACjB,CAAC,WAAW,QAAa,CAAA;AAAA,EACzB,CAAC,WAAW,GAAG,CAAA;AAAA,EACf,CAAC,WAAW,MAAM,CAAA;AAAA,EAClB,CAAC,WAAW,GAAG,CAAA;AAAA,EACf,CAAC,WAAWA,OAAW,CAAA;AAAA,EACvB,CAAC,WAAW,UAAU,CAAA;AAAA,EACtB,CAAC,WAAW,SAAS,CAAA;AAAA,EACrB,CAAC,WAAW,GAAG,CAAA;AAAA,EAEf,CAAC,KAAK,KAAK,CAAA;AAAA,EACX,CAAC,KAAK,QAAa,CAAA;AAAA,EACnB,CAAC,KAAK,GAAG,CAAA;AAAA,EACT,CAAC,KAAK,MAAM,CAAA;AAAA,EACZ,CAAC,KAAK,GAAG,CAAA;AAAA,EACT,CAAC,KAAKA,OAAW,CAAA;AAAA,EACjB,CAAC,KAAK,UAAU,CAAA;AAAA,EAChB,CAAC,KAAK,SAAS,CAAA;AAAA,EACf,CAAC,KAAK,GAAG,CAAA;AAAA;AAAA,EAET,CAAC,KAAK,KAAK,CAAA;AAAA,EACX,CAAC,KAAK,QAAa,CAAA;AAAA,EACnB,CAAC,KAAK,GAAG,CAAA;AAAA,EACT,CAAC,KAAK,MAAM,CAAA;AAAA,EACZ,CAAC,KAAK,GAAG,CAAA;AAAA,EACT,CAAC,KAAKA,OAAW,CAAA;AAAA,EACjB,CAAC,KAAK,UAAU,CAAA;AAAA,EAChB,CAAC,KAAK,SAAS,CAAA;AAAA,EACf,CAAC,KAAK,GAAG,CAAA;AAAA;AAAA,EAET,CAACA,SAAa,KAAK,CAAA;AAAA,EACnB,CAACA,SAAa,QAAa,CAAA;AAAA,EAC3B,CAACA,SAAa,GAAG,CAAA;AAAA,EACjB,CAACA,SAAa,MAAM,CAAA;AAAA,EACpB,CAACA,SAAaA,OAAW,CAAA;AAAA,EACzB,CAACA,SAAa,UAAU,CAAA;AAAA,EACxB,CAACA,SAAa,SAAS,CAAA;AAAA,EACvB,CAACA,SAAa,GAAG,CAAA;AAAA,EACjB,CAACA,SAAa,GAAG,CAAA;AAAA;AAAA,EAEjB,CAAC,KAAK,KAAK,CAAA;AAAA,EACX,CAAC,KAAK,QAAa,CAAA;AAAA,EACnB,CAAC,KAAK,GAAG,CAAA;AAAA,EACT,CAAC,KAAK,MAAM,CAAA;AAAA,EACZ,CAAC,KAAK,GAAG,CAAA;AAAA,EACT,CAAC,KAAK,GAAG,CAAA;AAAA;AAAA,EAET,CAAC,KAAKA,OAAW,CAAA;AAAA,EACjB,CAAC,KAAK,UAAU,CAAA;AAAA,EAChB,CAAC,KAAK,SAAS,CAAA;AAAA,EAEf,CAAC,KAAKA,OAAW,CAAA;AAAA,EACjB,CAAC,KAAK,UAAU,CAAA;AAAA,EAChB,CAAC,KAAK,SAAS,CAAA;AAAA,EAEf,CAAC,KAAK,GAAG;AACb,CAAA;AAEA,IAAM,SAAA,GAAY,UAAU,MAAA,CAAO;AAAA,EAC/B,CAAC,OAAO,IAAI,CAAA;AAAA,EAEZ,CAAC,WAAW,IAAI,CAAA;AAAA,EAEhB,CAAC,MAAM,IAAI,CAAA;AAAA,EAEX,CAAC,WAAW,eAAe,CAAA;AAAA,EAC3B,CAAC,WAAWD,OAAW,CAAA;AAAA,EACvB,CAAC,WAAW,KAAK,CAAA;AAAA,EAEjB,CAAC,YAAY,UAAU,CAAA;AAAA,EACvB,CAAC,YAAY,SAAS,CAAA;AAAA,EACtB,CAAC,YAAY,QAAa,CAAA;AAAA,EAC1B,CAAC,YAAY,GAAG,CAAA;AAAA,EAEhB,CAAC,kBAAkB,KAAK,CAAA;AAAA,EACxB,CAAC,kBAAkB,QAAa,CAAA;AAAA,EAChC,CAAC,kBAAkB,UAAU,CAAA;AAAA,EAC7B,CAAC,kBAAkB,SAAS,CAAA;AAAA,EAC5B,CAAC,kBAAkB,IAAI,CAAA;AAAA,EACvB,CAAC,kBAAkB,GAAG;AAC1B,CAAC,CAAA;AAED,SAAS,UAAU,KAAA,EAAO;AACtB,EAAA,MAAM,uBAAuB,IAAI,GAAA;AAAA,IAC7B,KAAA,CAAM,GAAA,CAAI,CAAC,CAAC,IAAA,EAAM,IAAI,CAAA,KAAO,IAAA,CAAK,IAAI,CAAA,IAAK,EAAA,GAAK,IAAA,CAAK,IAAI,CAAE;AAAA,GAC/D;AAEA,EAAA,OAAO,SAAS,QAAA,EAAU,IAAA,EAAM,KAAA,EAAO;AACnC,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,IAAA,EAAM,KAAK,CAAA;AACjC,IAAA,MAAM,YAAA,GAAe,KAAA,CAAM,UAAA,CAAW,CAAC,CAAA;AACvC,IAAA,MAAM,MAAA,GACD,YAAA,KAAiB,WAAA,IACd,IAAA,KAAS,KAAA,IACT,SAAS,QAAA,IACT,IAAA,KAAS,GAAA,IACZ,YAAA,KAAiB,QAAA,GACZ,oBAAA,CAAqB,KAAK,QAAA,GAAW,KAAA,KAAW,EAAA,GAAK,YAAA,IAAgB,CAAC,CAAA,GACtE,qBAAqB,GAAA,CAAA,CAAK,QAAA,GAAW,KAAA,KAAW,EAAA,GAAK,QAAQ,CAAA;AAEvE,IAAA,OAAO,QAAA,GAAW,MAAA;AAAA,EACtB,CAAA;AACJ;AAEO,IAAM,IAAA,GAAO,UAAU,SAAS,CAAA;AAChC,IAAM,IAAA,GAAO,UAAU,SAAS,CAAA;;;AC/KvC,IAAM,cAAA,GAAiB,EAAA;AAEvB,SAAS,eAAA,CAAgB,MAAM,SAAA,EAAW;AACtC,EAAA,IAAI,OAAO,cAAc,UAAA,EAAY;AACjC,IAAA,IAAI,IAAA,GAAO,IAAA;AAEX,IAAA,IAAA,CAAK,QAAA,CAAS,OAAA,CAAQ,CAAAY,KAAAA,KAAQ;AAC1B,MAAA,IAAI,SAAS,IAAA,EAAM;AACf,QAAA,SAAA,CAAU,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,MAC7B;AAEA,MAAA,IAAA,CAAK,KAAKA,KAAI,CAAA;AACd,MAAA,IAAA,GAAOA,KAAAA;AAAA,IACX,CAAC,CAAA;AAED,IAAA;AAAA,EACJ;AAEA,EAAA,IAAA,CAAK,QAAA,CAAS,OAAA,CAAQ,IAAA,CAAK,IAAA,EAAM,IAAI,CAAA;AACzC;AAEO,SAAS,gBAAgB,MAAA,EAAQ;AACpC,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAI;AAEtB,EAAA,KAAA,IAAS,CAACd,QAAM,IAAI,CAAA,IAAK,OAAO,OAAA,CAAQ,MAAA,CAAO,IAAI,CAAA,EAAG;AAClD,IAAA,MAAM,EAAA,GAAK,KAAK,QAAA,IAAY,IAAA;AAE5B,IAAA,IAAI,OAAO,OAAO,UAAA,EAAY;AAC1B,MAAA,KAAA,CAAM,GAAA,CAAIA,MAAAA,EAAM,IAAA,CAAK,QAAA,IAAY,IAAI,CAAA;AAAA,IACzC;AAAA,EACJ;AAEA,EAAA,OAAO,SAAS,MAAM,OAAA,EAAS;AAC3B,IAAA,IAAI,MAAA,GAAS,EAAA;AACb,IAAA,IAAI,QAAA,GAAW,CAAA;AACf,IAAA,IAAI,QAAA,GAAW;AAAA,MACX,KAAKc,KAAAA,EAAM;AACP,QAAA,IAAI,KAAA,CAAM,GAAA,CAAIA,KAAAA,CAAK,IAAI,CAAA,EAAG;AACtB,UAAA,KAAA,CAAM,IAAIA,KAAAA,CAAK,IAAI,CAAA,CAAE,IAAA,CAAK,WAAWA,KAAI,CAAA;AAAA,QAC7C,CAAA,MAAO;AACH,UAAA,MAAM,IAAI,KAAA,CAAM,qBAAA,GAAwBA,KAAAA,CAAK,IAAI,CAAA;AAAA,QACrD;AAAA,MACJ,CAAA;AAAA,MACA,WAAA,EAAyB,IAAA;AAAA,MACzB,KAAA,CAAM,IAAA,EAAM,KAAA,EAAO,sBAAA,EAAwB;AACvC,QAAA,QAAA,GAAW,IAAA,CAAK,WAAA,CAAY,QAAA,EAAU,IAAA,EAAM,KAAK,CAAA;AAEjD,QAAA,IAAI,CAAC,sBAAA,IAA0B,QAAA,GAAW,CAAA,EAAG;AACzC,UAAA,IAAA,CAAK,IAAA,CAAK,GAAA,EAAK,UAAA,EAAY,IAAI,CAAA;AAAA,QACnC;AAEA,QAAA,IAAA,CAAK,IAAA,CAAK,KAAA,EAAO,IAAA,EAAM,KAAK,CAAA;AAE5B,QAAA,IAAI,SAAS,KAAA,IAAS,KAAA,CAAM,UAAA,CAAW,CAAC,MAAM,cAAA,EAAgB;AAC1D,UAAA,IAAA,CAAK,IAAA,CAAK,IAAA,EAAM,UAAA,EAAY,IAAI,CAAA;AAAA,QACpC;AAAA,MACJ,CAAA;AAAA,MACA,KAAK,KAAA,EAAO;AACR,QAAA,MAAA,IAAU,KAAA;AAAA,MACd,CAAA;AAAA,MACA,MAAA,GAAS;AACL,QAAA,OAAO,MAAA;AAAA,MACX;AAAA,KACJ;AAEA,IAAA,IAAI,OAAA,EAAS;AACT,MAAA,IAAI,OAAO,OAAA,CAAQ,SAAA,KAAc,UAAA,EAAY;AACzC,QAAA,QAAA,GAAW,OAAA,CAAQ,UAAU,QAAQ,CAAA;AAAA,MACzC;AAEA,MAAA,IAAI,QAAQ,SAAA,EAAW;AACnB,QAAA,QAAA,GAAW,kBAAkB,QAAQ,CAAA;AAAA,MACzC;AAEA,MAAA,IAAI,OAAA,CAAQ,QAAQ,oBAAA,EAAa;AAC7B,QAAA,QAAA,CAAS,WAAA,GAAc,oBAAA,CAAY,OAAA,CAAQ,IAAI,CAAA;AAAA,MACnD;AAAA,IACJ;AAEA,IAAA,MAAM,SAAA,GAAY;AAAA,MACd,IAAA,EAAM,CAACA,KAAAA,KAAS,QAAA,CAAS,KAAKA,KAAI,CAAA;AAAA,MAClC,QAAA,EAAU,eAAA;AAAA,MACV,OAAO,CAAC,IAAA,EAAM,UAAU,QAAA,CAAS,KAAA,CAAM,MAAM,KAAK,CAAA;AAAA,MAClD,QAAA,EAAU,CAAC,GAAA,KACP,QAAA,CAAS,KAAK,CAAC,IAAA,EAAM,OAAO,GAAA,KAAQ;AAChC,QAAA,QAAA,CAAS,KAAA;AAAA,UACL,IAAA;AAAA,UACA,GAAA,CAAI,KAAA,CAAM,KAAA,EAAO,GAAG,CAAA;AAAA,UACpB,KAAA,KAAU;AAAA;AAAA,SACd;AAAA,MACJ,CAAC;AAAA,KACT;AAEA,IAAA,QAAA,CAAS,KAAK,IAAI,CAAA;AAElB,IAAA,OAAO,SAAS,MAAA,EAAO;AAAA,EAC3B,CAAA;AACJ;;;ACnGO,SAAS,gBAAgBC,KAAAA,EAAM;AAClC,EAAA,OAAO;AAAA,IACH,gBAAgB,GAAA,EAAK;AACjB,MAAAA,MAAK,GAAA,EAAK;AAAA,QACN,MAAM,IAAA,EAAM;AACR,UAAA,IAAI,IAAA,CAAK,QAAA,IAAY,IAAA,CAAK,QAAA,YAAoB,SAAS,KAAA,EAAO;AAC1D,YAAA,IAAA,CAAK,WAAW,IAAI,IAAA,EAAK,CAAE,SAAA,CAAU,KAAK,QAAQ,CAAA;AAAA,UACtD;AAAA,QACJ;AAAA,OACH,CAAA;AAED,MAAA,OAAO,GAAA;AAAA,IACX,CAAA;AAAA,IACA,cAAc,GAAA,EAAK;AACf,MAAAA,MAAK,GAAA,EAAK;AAAA,QACN,MAAM,IAAA,EAAM;AACR,UAAA,IAAI,IAAA,CAAK,QAAA,IAAY,IAAA,CAAK,QAAA,YAAoB,IAAA,EAAM;AAChD,YAAA,IAAA,CAAK,QAAA,GAAW,IAAA,CAAK,QAAA,CAAS,OAAA,EAAQ;AAAA,UAC1C;AAAA,QACJ;AAAA,OACH,CAAA;AAED,MAAA,OAAO,GAAA;AAAA,IACX;AAAA,GACJ;AACJ;;;AC3BA,IAAM,EAAE,cAAA,EAAAC,eAAAA,EAAe,GAAI,MAAA,CAAO,SAAA;AAClC,IAAM,OAAO,WAAW;AAAC,CAAA;AAEzB,SAAS,eAAe,KAAA,EAAO;AAC3B,EAAA,OAAO,OAAO,KAAA,KAAU,UAAA,GAAa,KAAA,GAAQ,IAAA;AACjD;AAEA,SAAS,aAAA,CAAc,IAAI,IAAA,EAAM;AAC7B,EAAA,OAAO,SAAS,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM;AAC9B,IAAA,IAAI,IAAA,CAAK,SAAS,IAAA,EAAM;AACpB,MAAA,EAAA,CAAG,IAAA,CAAK,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAAA,IAClC;AAAA,EACJ,CAAA;AACJ;AAEA,SAAS,uBAAA,CAAwBhB,QAAM,QAAA,EAAU;AAC7C,EAAA,MAAMiB,cAAY,QAAA,CAAS,SAAA;AAC3B,EAAA,MAAM,UAAU,EAAC;AAEjB,EAAA,KAAA,MAAW,OAAOA,WAAAA,EAAW;AACzB,IAAA,IAAID,eAAAA,CAAe,IAAA,CAAKC,WAAAA,EAAW,GAAG,MAAM,KAAA,EAAO;AAC/C,MAAA;AAAA,IACJ;AAEA,IAAA,IAAI,UAAA,GAAaA,YAAU,GAAG,CAAA;AAC9B,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,IAAA,EAAM,GAAA;AAAA,MACN,IAAA,EAAM,KAAA;AAAA,MACN,QAAA,EAAU;AAAA,KACd;AAEA,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,UAAU,CAAA,EAAG;AAC5B,MAAA,UAAA,GAAa,CAAC,UAAU,CAAA;AAAA,IAC5B;AAEA,IAAA,KAAA,MAAW,aAAa,UAAA,EAAY;AAChC,MAAA,IAAI,cAAc,IAAA,EAAM;AACpB,QAAA,MAAA,CAAO,QAAA,GAAW,IAAA;AAAA,MACtB,CAAA,MAAA,IAAW,OAAO,SAAA,KAAc,QAAA,EAAU;AACtC,QAAA,MAAA,CAAO,IAAA,GAAO,MAAA;AAAA,MAClB,CAAA,MAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,EAAG;AACjC,QAAA,MAAA,CAAO,IAAA,GAAO,MAAA;AAAA,MAClB;AAAA,IACJ;AAEA,IAAA,IAAI,OAAO,IAAA,EAAM;AACb,MAAA,OAAA,CAAQ,KAAK,MAAM,CAAA;AAAA,IACvB;AAAA,EACJ;AAEA,EAAA,IAAI,QAAQ,MAAA,EAAQ;AAChB,IAAA,OAAO;AAAA,MACH,SAAS,QAAA,CAAS,WAAA;AAAA,MAClB,MAAA,EAAQ;AAAA,KACZ;AAAA,EACJ;AAEA,EAAA,OAAO,IAAA;AACX;AAEA,SAAS,mBAAmB,MAAA,EAAQ;AAChC,EAAA,MAAM,QAAQ,EAAC;AAEf,EAAA,KAAA,MAAWjB,MAAAA,IAAQ,OAAO,IAAA,EAAM;AAC5B,IAAA,IAAIgB,eAAAA,CAAe,IAAA,CAAK,MAAA,CAAO,IAAA,EAAMhB,MAAI,CAAA,EAAG;AACxC,MAAA,MAAM,QAAA,GAAW,MAAA,CAAO,IAAA,CAAKA,MAAI,CAAA;AAEjC,MAAA,IAAI,CAAC,SAAS,SAAA,EAAW;AACrB,QAAA,MAAM,IAAI,KAAA,CAAM,+BAAA,GAAkCA,MAAAA,GAAO,wBAAwB,CAAA;AAAA,MACrF;AAEA,MAAA,KAAA,CAAMA,MAAI,CAAA,GAAI,uBAAA,CAAwBA,MAAAA,EAAM,QAAQ,CAAA;AAAA,IACxD;AAAA,EACJ;AAEA,EAAA,OAAO,KAAA;AACX;AAEA,SAAS,kBAAA,CAAmB,QAAQ,OAAA,EAAS;AACzC,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,KAAA,EAAM;AACnC,EAAA,MAAM,cAAc,MAAA,CAAO,OAAA;AAC3B,EAAA,MAAM,UAAA,GAAa,OAAO,WAAA,KAAgB,QAAA;AAE1C,EAAA,IAAI,OAAA,EAAS;AACT,IAAA,MAAA,CAAO,OAAA,EAAQ;AAAA,EACnB;AAEA,EAAA,OAAO,SAAS,IAAA,EAAM,OAAA,EAASe,KAAAA,EAAM,WAAA,EAAa;AAC9C,IAAA,IAAI,gBAAA;AAEJ,IAAA,IAAI,UAAA,EAAY;AACZ,MAAA,gBAAA,GAAmB,QAAQ,WAAW,CAAA;AACtC,MAAA,OAAA,CAAQ,WAAW,CAAA,GAAI,IAAA;AAAA,IAC3B;AAEA,IAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AACxB,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAE3B,MAAA,IAAI,CAAC,KAAA,CAAM,QAAA,IAAY,GAAA,EAAK;AACxB,QAAA,IAAI,KAAA,CAAM,SAAS,MAAA,EAAQ;AACvB,UAAA,MAAM,SAAA,GAAY,OAAA,GACZ,GAAA,CAAI,WAAA,CAAY,WAAA,EAAa,KAAK,CAAA,GAClC,GAAA,CAAI,MAAA,CAAO,WAAA,EAAa,KAAK,CAAA;AAEnC,UAAA,IAAI,SAAA,EAAW;AACX,YAAA,OAAO,IAAA;AAAA,UACX;AAAA,QACJ,CAAA,MAAA,IAAWA,KAAAA,CAAK,GAAG,CAAA,EAAG;AAClB,UAAA,OAAO,IAAA;AAAA,QACX;AAAA,MACJ;AAAA,IACJ;AAEA,IAAA,IAAI,UAAA,EAAY;AACZ,MAAA,OAAA,CAAQ,WAAW,CAAA,GAAI,gBAAA;AAAA,IAC3B;AAAA,EACJ,CAAA;AACJ;AAEA,SAAS,qBAAA,CAAsB;AAAA,EAC3B,UAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA;AACJ,CAAA,EAAG;AACC,EAAA,OAAO;AAAA,IACH,MAAA,EAAQ;AAAA,MACJ,UAAA;AAAA,MACA,MAAA;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KACJ;AAAA,IACA,IAAA,EAAM;AAAA,MACF,UAAA;AAAA,MACA,MAAA;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KACJ;AAAA,IACA,WAAA,EAAa;AAAA,MACT,UAAA;AAAA,MACA,MAAA;AAAA,MACA,IAAA;AAAA,MACA,KAAA;AAAA,MACA;AAAA;AACJ,GACJ;AACJ;AAEO,SAAS,aAAa,MAAA,EAAQ;AACjC,EAAA,MAAM,KAAA,GAAQ,mBAAmB,MAAM,CAAA;AACvC,EAAA,MAAM,mBAAmB,EAAC;AAC1B,EAAA,MAAM,mBAAmB,EAAC;AAC1B,EAAA,MAAM,SAAA,0BAAmB,YAAY,CAAA;AACrC,EAAA,MAAM,QAAA,0BAAkB,WAAW,CAAA;AAEnC,EAAA,KAAA,MAAWf,UAAQ,KAAA,EAAO;AACtB,IAAA,IAAIgB,eAAAA,CAAe,KAAK,KAAA,EAAOhB,MAAI,KAAK,KAAA,CAAMA,MAAI,MAAM,IAAA,EAAM;AAC1D,MAAA,gBAAA,CAAiBA,MAAI,CAAA,GAAI,kBAAA,CAAmB,KAAA,CAAMA,MAAI,GAAG,KAAK,CAAA;AAC9D,MAAA,gBAAA,CAAiBA,MAAI,CAAA,GAAI,kBAAA,CAAmB,KAAA,CAAMA,MAAI,GAAG,IAAI,CAAA;AAAA,IACjE;AAAA,EACJ;AAEA,EAAA,MAAM,6BAAA,GAAgC,sBAAsB,gBAAgB,CAAA;AAC5E,EAAA,MAAM,6BAAA,GAAgC,sBAAsB,gBAAgB,CAAA;AAE5E,EAAA,MAAMe,KAAAA,GAAO,SAAS,IAAA,EAAM,OAAA,EAAS;AACjC,IAAA,SAAS,QAAA,CAAS,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM;AAChC,MAAA,MAAM,WAAW,KAAA,CAAM,IAAA,CAAK,OAAA,EAAS,IAAA,EAAM,MAAM,IAAI,CAAA;AAErD,MAAA,IAAI,aAAa,SAAA,EAAW;AACxB,QAAA,OAAO,IAAA;AAAA,MACX;AAEA,MAAA,IAAI,aAAa,QAAA,EAAU;AACvB,QAAA,OAAO,KAAA;AAAA,MACX;AAEA,MAAA,IAAI,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA,EAAG;AACrC,QAAA,IAAI,SAAA,CAAU,KAAK,IAAI,CAAA,CAAE,MAAM,OAAA,EAAS,QAAA,EAAU,WAAW,CAAA,EAAG;AAC5D,UAAA,OAAO,IAAA;AAAA,QACX;AAAA,MACJ;AAEA,MAAA,IAAI,MAAM,IAAA,CAAK,OAAA,EAAS,MAAM,IAAA,EAAM,IAAI,MAAM,SAAA,EAAW;AACrD,QAAA,OAAO,IAAA;AAAA,MACX;AAEA,MAAA,OAAO,KAAA;AAAA,IACX;AAEA,IAAA,IAAI,KAAA,GAAQ,IAAA;AACZ,IAAA,IAAI,KAAA,GAAQ,IAAA;AACZ,IAAA,IAAI,SAAA,GAAY,gBAAA;AAChB,IAAA,IAAI,WAAA,GAAc,CAAC,GAAA,EAAK,IAAA,EAAM,IAAA,EAAM,SAAS,GAAA,IAAO,QAAA,CAAS,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAC7E,IAAA,MAAM,OAAA,GAAU;AAAA,MACZ,KAAA,EAAO,SAAA;AAAA,MACP,IAAA,EAAM,QAAA;AAAA,MAEN,IAAA;AAAA,MACA,UAAA,EAAY,IAAA;AAAA,MACZ,MAAA,EAAQ,IAAA;AAAA,MACR,aAAA,EAAe,IAAA;AAAA,MACf,IAAA,EAAM,IAAA;AAAA,MACN,QAAA,EAAU,IAAA;AAAA,MACV,KAAA,EAAO,IAAA;AAAA,MACP,WAAA,EAAa,IAAA;AAAA,MACb,QAAA,EAAU;AAAA,KACd;AAEA,IAAA,IAAI,OAAO,YAAY,UAAA,EAAY;AAC/B,MAAA,KAAA,GAAQ,OAAA;AAAA,IACZ,WAAW,OAAA,EAAS;AAChB,MAAA,KAAA,GAAQ,cAAA,CAAe,QAAQ,KAAK,CAAA;AACpC,MAAA,KAAA,GAAQ,cAAA,CAAe,QAAQ,KAAK,CAAA;AAEpC,MAAA,IAAI,QAAQ,OAAA,EAAS;AACjB,QAAA,SAAA,GAAY,gBAAA;AAAA,MAChB;AAEA,MAAA,IAAI,QAAQ,KAAA,EAAO;AACf,QAAA,IAAI,6BAAA,CAA8B,cAAA,CAAe,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC7D,UAAA,SAAA,GAAY,OAAA,CAAQ,UACd,6BAAA,CAA8B,OAAA,CAAQ,KAAK,CAAA,GAC3C,6BAAA,CAA8B,QAAQ,KAAK,CAAA;AAAA,QACrD,WAAW,CAAC,KAAA,CAAM,cAAA,CAAe,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC7C,UAAA,MAAM,IAAI,KAAA,CAAM,aAAA,GAAgB,OAAA,CAAQ,QAAQ,mCAAA,GAAsC,MAAA,CAAO,IAAA,CAAK,KAAK,EAAE,IAAA,EAAK,CAAE,IAAA,CAAK,IAAI,IAAI,GAAG,CAAA;AAAA,QACpI;AAEA,QAAA,KAAA,GAAQ,aAAA,CAAc,KAAA,EAAO,OAAA,CAAQ,KAAK,CAAA;AAC1C,QAAA,KAAA,GAAQ,aAAA,CAAc,KAAA,EAAO,OAAA,CAAQ,KAAK,CAAA;AAAA,MAC9C;AAAA,IACJ;AAEA,IAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,IAAA,EAAM;AAClC,MAAA,MAAM,IAAI,MAAM,6EAA8E,CAAA;AAAA,IAClG;AAEA,IAAA,QAAA,CAAS,IAAI,CAAA;AAAA,EACjB,CAAA;AAEA,EAAAA,MAAK,KAAA,GAAQ,SAAA;AACb,EAAAA,MAAK,IAAA,GAAO,QAAA;AAEZ,EAAAA,KAAAA,CAAK,IAAA,GAAO,SAAS,GAAA,EAAK,EAAA,EAAI;AAC1B,IAAA,IAAI,KAAA,GAAQ,IAAA;AAEZ,IAAAA,KAAAA,CAAK,GAAA,EAAK,SAAS,IAAA,EAAM,MAAM,IAAA,EAAM;AACjC,MAAA,IAAI,GAAG,IAAA,CAAK,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA,EAAG;AACjC,QAAA,KAAA,GAAQ,IAAA;AACR,QAAA,OAAO,SAAA;AAAA,MACX;AAAA,IACJ,CAAC,CAAA;AAED,IAAA,OAAO,KAAA;AAAA,EACX,CAAA;AAEA,EAAAA,KAAAA,CAAK,QAAA,GAAW,SAAS,GAAA,EAAK,EAAA,EAAI;AAC9B,IAAA,IAAI,KAAA,GAAQ,IAAA;AAEZ,IAAAA,MAAK,GAAA,EAAK;AAAA,MACN,OAAA,EAAS,IAAA;AAAA,MACT,KAAA,CAAM,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM;AACpB,QAAA,IAAI,GAAG,IAAA,CAAK,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA,EAAG;AACjC,UAAA,KAAA,GAAQ,IAAA;AACR,UAAA,OAAO,SAAA;AAAA,QACX;AAAA,MACJ;AAAA,KACH,CAAA;AAED,IAAA,OAAO,KAAA;AAAA,EACX,CAAA;AAEA,EAAAA,KAAAA,CAAK,OAAA,GAAU,SAAS,GAAA,EAAK,EAAA,EAAI;AAC7B,IAAA,MAAM,QAAQ,EAAC;AAEf,IAAAA,KAAAA,CAAK,GAAA,EAAK,SAAS,IAAA,EAAM,MAAM,IAAA,EAAM;AACjC,MAAA,IAAI,GAAG,IAAA,CAAK,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA,EAAG;AACjC,QAAA,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,MACnB;AAAA,IACJ,CAAC,CAAA;AAED,IAAA,OAAO,KAAA;AAAA,EACX,CAAA;AAEA,EAAA,OAAOA,KAAAA;AACX;;;AC9RA,SAASG,MAAK,KAAA,EAAO;AACjB,EAAA,OAAO,KAAA;AACX;AAEA,SAAS,mBAAmB,UAAA,EAAY;AACpC,EAAA,MAAM,EAAE,GAAA,EAAK,GAAA,EAAK,KAAA,EAAM,GAAI,UAAA;AAE5B,EAAA,IAAI,GAAA,KAAQ,CAAA,IAAK,GAAA,KAAQ,CAAA,EAAG;AACxB,IAAA,OAAO,QAAQ,IAAA,GAAO,GAAA;AAAA,EAC1B;AAEA,EAAA,IAAI,GAAA,KAAQ,CAAA,IAAK,GAAA,KAAQ,CAAA,EAAG;AACxB,IAAA,OAAO,GAAA;AAAA,EACX;AAEA,EAAA,IAAI,GAAA,KAAQ,CAAA,IAAK,GAAA,KAAQ,CAAA,EAAG;AACxB,IAAA,OAAO,QAAQ,GAAA,GAAM,GAAA;AAAA,EACzB;AAEA,EAAA,IAAI,GAAA,KAAQ,CAAA,IAAK,GAAA,KAAQ,CAAA,EAAG;AACxB,IAAA,OAAO,EAAA;AAAA,EACX;AAEA,EAAA,OAAA,CACK,KAAA,GAAQ,GAAA,GAAM,EAAA,KACd,GAAA,KAAQ,MACH,GAAA,GAAM,GAAA,GAAM,GAAA,GACZ,GAAA,GAAM,GAAA,GAAM,GAAA,IAAO,GAAA,KAAQ,CAAA,GAAI,MAAM,EAAA,CAAA,GAAM,GAAA,CAAA;AAGzD;AAEA,SAAS,iBAAiB,IAAA,EAAM;AAC5B,EAAA,QAAQ,KAAK,IAAA;AAAM,IACf,KAAK,OAAA;AACD,MAAA,OACI,IAAA,IACC,IAAA,CAAK,GAAA,KAAQ,IAAA,GAAO,SAAA,GAAO,IAAA,CAAK,GAAA,CAAA,GACjC,GAAA,IACC,IAAA,CAAK,GAAA,KAAQ,IAAA,GAAO,QAAA,GAAM,KAAK,GAAA,CAAA,GAChC,GAAA;AAAA,IAGR;AACI,MAAA,MAAM,IAAI,KAAA,CAAM,qBAAA,GAAwB,IAAA,CAAK,OAAO,GAAG,CAAA;AAAA;AAEnE;AAEA,SAAS,gBAAA,CAAiB,IAAA,EAAM,QAAA,EAAU,WAAA,EAAa,OAAA,EAAS;AAC5D,EAAA,MAAM,UAAA,GAAa,KAAK,UAAA,KAAe,GAAA,IAAO,UAAU,IAAA,CAAK,UAAA,GAAa,GAAA,GAAM,IAAA,CAAK,UAAA,GAAa,GAAA;AAClG,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CACf,GAAA,CAAI,CAAA,IAAA,KAAQ,gBAAA,CAAiB,IAAA,EAAM,QAAA,EAAU,WAAA,EAAa,OAAO,CAAC,CAAA,CAClE,KAAK,UAAU,CAAA;AAEpB,EAAA,IAAI,IAAA,CAAK,YAAY,WAAA,EAAa;AAC9B,IAAA,OAAA,CAAQ,OAAA,IAAW,OAAO,CAAC,CAAA,KAAM,MAAM,GAAA,GAAM,IAAA,IAAQ,MAAA,IAAU,OAAA,GAAU,GAAA,GAAM,IAAA,CAAA;AAAA,EACnF;AAEA,EAAA,OAAO,MAAA;AACX;AAEA,SAAS,gBAAA,CAAiB,IAAA,EAAM,QAAA,EAAU,WAAA,EAAa,OAAA,EAAS;AAC5D,EAAA,IAAI,MAAA;AAEJ,EAAA,QAAQ,KAAK,IAAA;AAAM,IACf,KAAK,OAAA;AACD,MAAA,MAAA,GACI,gBAAA,CAAiB,MAAM,QAAA,EAAU,WAAA,EAAa,OAAO,CAAA,IACpD,IAAA,CAAK,gBAAgB,GAAA,GAAM,EAAA,CAAA;AAChC,MAAA;AAAA,IAEJ,KAAK,YAAA;AAED,MAAA,OACI,gBAAA,CAAiB,IAAA,CAAK,IAAA,EAAM,QAAA,EAAU,WAAA,EAAa,OAAO,CAAA,GAC1D,QAAA,CAAS,kBAAA,CAAmB,IAAI,CAAA,EAAG,IAAI,CAAA;AAAA,IAG/C,KAAK,SAAA;AACD,MAAA,MAAA,GAAS,mBAAmB,gBAAA,CAAiB,IAAA,CAAK,MAAM,QAAA,EAAU,WAAA,EAAa,OAAO,CAAA,GAAI,IAAA;AAC1F,MAAA;AAAA,IAEJ,KAAK,MAAA;AACD,MAAA,MAAA,GAAS,GAAA,GAAM,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,IAAA,GAAO,QAAA,CAAS,gBAAA,CAAiB,IAAA,CAAK,IAAI,CAAA,EAAG,IAAA,CAAK,IAAI,IAAI,EAAA,CAAA,GAAM,GAAA;AACjG,MAAA;AAAA,IAEJ,KAAK,UAAA;AACD,MAAA,MAAA,GAAS,IAAA,GAAQ,KAAK,IAAA,GAAO,IAAA;AAC7B,MAAA;AAAA,IAEJ,KAAK,SAAA;AACD,MAAA,MAAA,GAAS,IAAA,CAAK,IAAA;AACd,MAAA;AAAA,IAEJ,KAAK,WAAA;AACD,MAAA,MAAA,GAAS,MAAM,IAAA,CAAK,IAAA;AACpB,MAAA;AAAA,IAEJ,KAAK,UAAA;AACD,MAAA,MAAA,GAAS,KAAK,IAAA,GAAO,GAAA;AACrB,MAAA;AAAA,IAEJ,KAAK,QAAA;AAAA,IACL,KAAK,OAAA;AACD,MAAA,MAAA,GAAS,IAAA,CAAK,KAAA;AACd,MAAA;AAAA,IAEJ,KAAK,OAAA;AACD,MAAA,MAAA,GAAS,GAAA;AACT,MAAA;AAAA,IAEJ;AACI,MAAA,MAAM,IAAI,KAAA,CAAM,qBAAA,GAAwB,IAAA,CAAK,OAAO,GAAG,CAAA;AAAA;AAG/D,EAAA,OAAO,QAAA,CAAS,QAAQ,IAAI,CAAA;AAChC;AAEO,SAAS,QAAA,CAAS,MAAM,OAAA,EAAS;AACpC,EAAA,IAAI,QAAA,GAAWA,KAAAA;AACf,EAAA,IAAI,WAAA,GAAc,KAAA;AAClB,EAAA,IAAI,OAAA,GAAU,KAAA;AAEd,EAAA,IAAI,OAAO,YAAY,UAAA,EAAY;AAC/B,IAAA,QAAA,GAAW,OAAA;AAAA,EACf,WAAW,OAAA,EAAS;AAChB,IAAA,WAAA,GAAc,OAAA,CAAQ,QAAQ,WAAW,CAAA;AACzC,IAAA,OAAA,GAAU,OAAA,CAAQ,QAAQ,OAAO,CAAA;AACjC,IAAA,IAAI,OAAO,OAAA,CAAQ,QAAA,KAAa,UAAA,EAAY;AACxC,MAAA,QAAA,GAAW,OAAA,CAAQ,QAAA;AAAA,IACvB;AAAA,EACJ;AAEA,EAAA,OAAO,gBAAA,CAAiB,IAAA,EAAM,QAAA,EAAU,WAAA,EAAa,OAAO,CAAA;AAChE;;;ACnIA,IAAM,aAAa,EAAE,MAAA,EAAQ,GAAG,IAAA,EAAM,CAAA,EAAG,QAAQ,CAAA,EAAE;AAEnD,SAAS,cAAA,CAAe,aAAa,IAAA,EAAM;AACvC,EAAA,MAAM,SAAS,WAAA,CAAY,MAAA;AAC3B,EAAA,MAAM,eAAe,WAAA,CAAY,YAAA;AACjC,EAAA,MAAM,YAAA,GAAe,eAAe,MAAA,CAAO,MAAA,GAAS,OAAO,YAAY,CAAA,CAAE,QAAQ,IAAA,GAAO,IAAA;AACxF,EAAA,MAAM,OAAA,GAAU,YAAA,KAAiB,IAAA,GAAO,YAAA,GAAe,IAAA;AACvD,EAAA,IAAI,cAAA,GAAiB,CAAA;AACrB,EAAA,IAAI,cAAA,GAAiB,CAAA;AACrB,EAAA,IAAI,OAAA,GAAU,CAAA;AACd,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,IAAI,KAAA;AACJ,EAAA,IAAI,GAAA;AAEJ,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AACpC,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,CAAC,CAAA,CAAE,KAAA;AAExB,IAAA,IAAI,MAAM,YAAA,EAAc;AACpB,MAAA,cAAA,GAAiB,KAAA,CAAM,MAAA;AACvB,MAAA,cAAA,GAAiB,GAAA,CAAI,MAAA;AAAA,IACzB;AAEA,IAAA,IAAI,YAAY,IAAA,IAAQ,MAAA,CAAO,CAAC,CAAA,CAAE,SAAS,OAAA,EAAS;AAChD,MAAA,IAAI,KAAK,YAAA,EAAc;AACnB,QAAA,OAAA,EAAA;AAAA,MACJ,CAAA,MAAO;AACH,QAAA,OAAA,GAAU,CAAA;AAAA,MACd;AAAA,IACJ;AAEA,IAAA,GAAA,IAAO,KAAA;AAAA,EACX;AAEA,EAAA,IAAI,YAAA,KAAiB,MAAA,CAAO,MAAA,IAAU,OAAA,GAAU,CAAA,EAAG;AAC/C,IAAA,KAAA,GAAQ,QAAQ,OAAA,IAAW,IAAA,EAAM,KAAK,CAAA,IAAK,QAAA,CAAS,YAAY,GAAG,CAAA;AACnE,IAAA,GAAA,GAAM,SAAS,KAAK,CAAA;AAAA,EACxB,CAAA,MAAO;AACH,IAAA,KAAA,GAAQ,OAAA,CAAQ,OAAA,EAAS,OAAO,CAAA,IAC5B,SAAS,OAAA,CAAQ,IAAA,EAAM,OAAO,CAAA,IAAK,UAAA,EAAY,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,cAAc,CAAC,CAAA;AAC/E,IAAA,GAAA,GAAM,OAAA,CAAQ,OAAA,EAAS,KAAK,CAAA,IACxB,QAAA,CAAS,OAAO,GAAA,CAAI,MAAA,CAAO,cAAA,EAAgB,cAAc,CAAC,CAAA;AAAA,EAClE;AAEA,EAAA,OAAO;AAAA,IACH,GAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACJ;AACJ;AAEA,SAAS,OAAA,CAAQ,MAAM,KAAA,EAAO;AAC1B,EAAA,MAAM,QAAQ,IAAA,IAAQ,IAAA,CAAK,GAAA,IAAO,IAAA,CAAK,IAAI,KAAK,CAAA;AAEhD,EAAA,IAAI,KAAA,EAAO;AACP,IAAA,OAAO,MAAA,IAAU,KAAA,GAAQ,QAAA,CAAS,KAAK,CAAA,GAAI,KAAA;AAAA,EAC/C;AAEA,EAAA,OAAO,IAAA;AACX;AAEA,SAAS,SAAS,EAAE,MAAA,EAAQ,IAAA,EAAM,MAAA,IAAU,KAAA,EAAO;AAC/C,EAAA,MAAM,GAAA,GAAM;AAAA,IACR,MAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACJ;AAEA,EAAA,IAAI,KAAA,EAAO;AACP,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,aAAa,CAAA;AAEvC,IAAA,GAAA,CAAI,UAAU,KAAA,CAAM,MAAA;AACpB,IAAA,GAAA,CAAI,IAAA,IAAQ,MAAM,MAAA,GAAS,CAAA;AAC3B,IAAA,GAAA,CAAI,MAAA,GAAS,KAAA,CAAM,MAAA,KAAW,CAAA,GAAI,GAAA,CAAI,MAAA,GAAS,KAAA,CAAM,MAAA,GAAS,KAAA,CAAM,GAAA,EAAI,CAAE,MAAA,GAAS,CAAA;AAAA,EACvF;AAEA,EAAA,OAAO,GAAA;AACX;AAEO,IAAM,oBAAA,GAAuB,SAAS,IAAA,EAAM,aAAA,EAAe;AAC9D,EAAA,MAAM,KAAA,GAAQ,iBAAA;AAAA,IACV,sBAAA;AAAA,IACA,IAAA,IAAQ,aAAA,GAAgB,IAAA,GAAO,aAAA,GAAgB,GAAA,GAAM,EAAA;AAAA,GACzD;AAEA,EAAA,KAAA,CAAM,SAAA,GAAY,aAAA;AAElB,EAAA,OAAO,KAAA;AACX,CAAA;AAEO,IAAM,gBAAA,GAAmB,SAAS,OAAA,EAAS,MAAA,EAAQ,MAAM,WAAA,EAAa;AACzE,EAAA,MAAM,KAAA,GAAQ,iBAAA,CAAkB,kBAAA,EAAoB,OAAO,CAAA;AAC3D,EAAA,MAAM;AAAA,IACF,GAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACJ,GAAI,cAAA,CAAe,WAAA,EAAa,IAAI,CAAA;AAEpC,EAAA,KAAA,CAAM,UAAA,GAAa,OAAA;AACnB,EAAA,KAAA,CAAM,MAAA,GAAS,MAAA,GAAS,QAAA,CAAS,MAAM,CAAA,GAAI,WAAA;AAC3C,EAAA,KAAA,CAAM,GAAA,GAAM,GAAA;AACZ,EAAA,KAAA,CAAM,cAAA,GAAiB,cAAA;AACvB,EAAA,KAAA,CAAM,cAAA,GAAiB,cAAA;AACvB,EAAA,KAAA,CAAM,UAAU,OAAA,GAAU,cAAA,GACP,KAAA,CAAM,MAAA,GAAS,kBACd,GAAA,IAAO,gBAAA,CAAA,GAAoB,cAAA,GAC5B,IAAI,MAAM,KAAA,CAAM,cAAA,GAAiB,CAAC,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA,GAAI,GAAA;AAEnE,EAAA,MAAA,CAAO,MAAA,CAAO,OAAO,KAAK,CAAA;AAC1B,EAAA,KAAA,CAAM,GAAA,GAAM;AAAA,IACR,QAAS,IAAA,IAAQ,IAAA,CAAK,GAAA,IAAO,IAAA,CAAK,IAAI,MAAA,IAAW,WAAA;AAAA,IACjD,KAAA;AAAA,IACA;AAAA,GACJ;AAEA,EAAA,OAAO,KAAA;AACX,CAAA;;;AC1HA,IAAM,QAAA,uBAAe,GAAA,EAAI;AACzB,IAAM,UAAA,uBAAiB,GAAA,EAAI;AAC3B,IAAMC,YAAAA,GAAc,EAAA;AAEb,IAAM,OAAA,GAAU,oBAAA;AAChB,IAAM,QAAA,GAAW,qBAAA;AAEjB,SAAS,gBAAA,CAAiB,KAAK,MAAA,EAAQ;AAC1C,EAAA,MAAA,GAAS,MAAA,IAAU,CAAA;AAEnB,EAAA,OAAO,GAAA,CAAI,MAAA,GAAS,MAAA,IAAU,CAAA,IACvB,GAAA,CAAI,UAAA,CAAW,MAAM,CAAA,KAAMA,YAAAA,IAC3B,GAAA,CAAI,UAAA,CAAW,MAAA,GAAS,CAAC,CAAA,KAAMA,YAAAA;AAC1C;AAEA,SAAS,eAAA,CAAgB,KAAK,MAAA,EAAQ;AAClC,EAAA,MAAA,GAAS,MAAA,IAAU,CAAA;AAGnB,EAAA,IAAI,GAAA,CAAI,MAAA,GAAS,MAAA,IAAU,CAAA,EAAG;AAE1B,IAAA,IAAI,GAAA,CAAI,UAAA,CAAW,MAAM,CAAA,KAAMA,YAAAA,IAC3B,IAAI,UAAA,CAAW,MAAA,GAAS,CAAC,CAAA,KAAMA,YAAAA,EAAa;AAE5C,MAAA,MAAM,eAAA,GAAkB,GAAA,CAAI,OAAA,CAAQ,GAAA,EAAK,SAAS,CAAC,CAAA;AAEnD,MAAA,IAAI,oBAAoB,EAAA,EAAI;AACxB,QAAA,OAAO,GAAA,CAAI,SAAA,CAAU,MAAA,EAAQ,eAAA,GAAkB,CAAC,CAAA;AAAA,MACpD;AAAA,IACJ;AAAA,EACJ;AAEA,EAAA,OAAO,EAAA;AACX;AAEA,SAAS,qBAAqBC,QAAAA,EAAS;AACnC,EAAA,IAAI,QAAA,CAAS,GAAA,CAAIA,QAAO,CAAA,EAAG;AACvB,IAAA,OAAO,QAAA,CAAS,IAAIA,QAAO,CAAA;AAAA,EAC/B;AAEA,EAAA,MAAMpB,MAAAA,GAAOoB,SAAQ,WAAA,EAAY;AACjC,EAAA,IAAI,UAAA,GAAa,QAAA,CAAS,GAAA,CAAIpB,MAAI,CAAA;AAElC,EAAA,IAAI,eAAe,MAAA,EAAW;AAC1B,IAAA,MAAM,MAAA,GAAS,gBAAA,CAAiBA,MAAAA,EAAM,CAAC,CAAA;AACvC,IAAA,MAAM,SAAS,CAAC,MAAA,GAAS,eAAA,CAAgBA,MAAAA,EAAM,CAAC,CAAA,GAAI,EAAA;AACpD,IAAA,UAAA,GAAa,OAAO,MAAA,CAAO;AAAA,MACvB,QAAA,EAAUA,MAAAA,CAAK,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA;AAAA,MACnC,IAAA,EAAAA,MAAAA;AAAA,MACA,MAAA,EAAQ,MAAA;AAAA,MACR,MAAA;AAAA,MACA;AAAA,KACH,CAAA;AAAA,EACL;AAEA,EAAA,QAAA,CAAS,GAAA,CAAIoB,UAAS,UAAU,CAAA;AAEhC,EAAA,OAAO,UAAA;AACX;AAEA,SAAS,sBAAsBC,SAAAA,EAAU;AACrC,EAAA,IAAI,UAAA,CAAW,GAAA,CAAIA,SAAQ,CAAA,EAAG;AAC1B,IAAA,OAAO,UAAA,CAAW,IAAIA,SAAQ,CAAA;AAAA,EAClC;AAEA,EAAA,IAAIrB,MAAAA,GAAOqB,SAAAA;AACX,EAAA,IAAI,IAAA,GAAOA,UAAS,CAAC,CAAA;AAErB,EAAA,IAAI,SAAS,GAAA,EAAK;AACd,IAAA,IAAA,GAAOA,SAAAA,CAAS,CAAC,CAAA,KAAM,GAAA,GAAM,IAAA,GAAO,GAAA;AAAA,EACxC,CAAA,MAAA,IAAW,IAAA,KAAS,GAAA,IACT,IAAA,KAAS,GAAA,IACT,IAAA,KAAS,GAAA,IACT,IAAA,KAAS,GAAA,IACT,IAAA,KAAS,GAAA,IACT,IAAA,KAAS,GAAA,EAAK;AACrB,IAAA,IAAA,GAAO,EAAA;AAAA,EACX;AAEA,EAAA,MAAM,MAAA,GAAS,gBAAA,CAAiBrB,MAAAA,EAAM,IAAA,CAAK,MAAM,CAAA;AAGjD,EAAA,IAAI,CAAC,MAAA,EAAQ;AACT,IAAAA,MAAAA,GAAOA,OAAK,WAAA,EAAY;AACxB,IAAA,IAAI,UAAA,CAAW,GAAA,CAAIA,MAAI,CAAA,EAAG;AACtB,MAAA,MAAMsB,WAAAA,GAAa,UAAA,CAAW,GAAA,CAAItB,MAAI,CAAA;AACtC,MAAA,UAAA,CAAW,GAAA,CAAIqB,WAAUC,WAAU,CAAA;AACnC,MAAA,OAAOA,WAAAA;AAAA,IACX;AAAA,EACJ;AAEA,EAAA,MAAM,SAAS,CAAC,MAAA,GAAS,gBAAgBtB,MAAAA,EAAM,IAAA,CAAK,MAAM,CAAA,GAAI,EAAA;AAC9D,EAAA,MAAM,SAASA,MAAAA,CAAK,MAAA,CAAO,GAAG,IAAA,CAAK,MAAA,GAAS,OAAO,MAAM,CAAA;AACzD,EAAA,MAAM,UAAA,GAAa,OAAO,MAAA,CAAO;AAAA,IAC7B,QAAA,EAAUA,MAAAA,CAAK,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA;AAAA,IACnC,IAAA,EAAMA,MAAAA,CAAK,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA;AAAA,IAC7B,IAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACH,CAAA;AAED,EAAA,UAAA,CAAW,GAAA,CAAIqB,WAAU,UAAU,CAAA;AAEnC,EAAA,OAAO,UAAA;AACX;;;ACxGO,IAAM,eAAA,GAAkB;AAAA,EAC3B,SAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA;AACJ,CAAA;;;ACIA,IAAME,SAAAA,GAAW,EAAA;AACjB,IAAMJ,YAAAA,GAAc,EAAA;AACpB,IAAMK,EAAAA,GAAI,GAAA;AACV,IAAM,aAAA,GAAgB,IAAA;AACtB,IAAM,UAAA,GAAa,KAAA;AAEnB,SAAS,OAAA,CAAQ,OAAOnB,KAAAA,EAAM;AAC1B,EAAA,OAAO,KAAA,KAAU,QAAQ,KAAA,CAAM,IAAA,KAAS,SAAS,KAAA,CAAM,KAAA,CAAM,UAAA,CAAW,CAAC,CAAA,KAAMA,KAAAA;AACnF;AAEA,SAAS,MAAA,CAAO,KAAA,EAAO,MAAA,EAAQ,YAAA,EAAc;AACzC,EAAA,OAAO,UAAU,IAAA,KAAS,KAAA,CAAM,SAAS,UAAA,IAAc,KAAA,CAAM,SAAS,OAAA,CAAA,EAAU;AAC5E,IAAA,KAAA,GAAQ,YAAA,CAAa,EAAE,MAAM,CAAA;AAAA,EACjC;AAEA,EAAA,OAAO,MAAA;AACX;AAEA,SAAS,YAAA,CAAa,KAAA,EAAO,WAAA,EAAa,YAAA,EAAc,MAAA,EAAQ;AAC5D,EAAA,IAAI,CAAC,KAAA,EAAO;AACR,IAAA,OAAO,CAAA;AAAA,EACX;AAEA,EAAA,MAAMA,KAAAA,GAAO,KAAA,CAAM,KAAA,CAAM,UAAA,CAAW,WAAW,CAAA;AAE/C,EAAA,IAAIA,KAAAA,KAASkB,SAAAA,IAAYlB,KAAAA,KAASc,YAAAA,EAAa;AAC3C,IAAA,IAAI,YAAA,EAAc;AAEd,MAAA,OAAO,CAAA;AAAA,IACX;AACA,IAAA,WAAA,EAAA;AAAA,EACJ;AAEA,EAAA,OAAO,WAAA,GAAc,KAAA,CAAM,KAAA,CAAM,MAAA,EAAQ,WAAA,EAAA,EAAe;AACpD,IAAA,IAAI,CAAC,OAAA,CAAQ,KAAA,CAAM,MAAM,UAAA,CAAW,WAAW,CAAC,CAAA,EAAG;AAE/C,MAAA,OAAO,CAAA;AAAA,IACX;AAAA,EACJ;AAEA,EAAA,OAAO,MAAA,GAAS,CAAA;AACpB;AAIA,SAAS,QAAA,CAAS,KAAA,EAAO,OAAA,EAAS,YAAA,EAAc;AAC5C,EAAA,IAAI,IAAA,GAAO,KAAA;AACX,EAAA,IAAI,MAAA,GAAS,MAAA,CAAO,KAAA,EAAO,OAAA,EAAS,YAAY,CAAA;AAEhD,EAAA,KAAA,GAAQ,aAAa,MAAM,CAAA;AAE3B,EAAA,IAAI,UAAU,IAAA,EAAM;AAChB,IAAA,OAAO,OAAA;AAAA,EACX;AAEA,EAAA,IAAI,KAAA,CAAM,SAAShB,OAAAA,EAAa;AAC5B,IAAA,IAAI,QAAQ,KAAA,EAAOoB,SAAQ,KAAK,OAAA,CAAQ,KAAA,EAAOJ,YAAW,CAAA,EAAG;AACzD,MAAA,IAAA,GAAO,IAAA;AACP,MAAA,MAAA,GAAS,OAAO,YAAA,CAAa,EAAE,MAAM,CAAA,EAAG,QAAQ,YAAY,CAAA;AAC5D,MAAA,KAAA,GAAQ,aAAa,MAAM,CAAA;AAE3B,MAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,CAAM,IAAA,KAAShB,OAAAA,EAAa;AAC9C,QAAA,OAAO,CAAA;AAAA,MACX;AAAA,IACJ,CAAA,MAAO;AACH,MAAA,OAAO,OAAA;AAAA,IACX;AAAA,EACJ;AAEA,EAAA,IAAI,CAAC,IAAA,EAAM;AACP,IAAA,MAAME,KAAAA,GAAO,KAAA,CAAM,KAAA,CAAM,UAAA,CAAW,CAAC,CAAA;AACrC,IAAA,IAAIA,KAAAA,KAASkB,SAAAA,IAAYlB,KAAAA,KAASc,YAAAA,EAAa;AAE3C,MAAA,OAAO,CAAA;AAAA,IACX;AAAA,EACJ;AAEA,EAAA,OAAO,aAAa,KAAA,EAAO,IAAA,GAAO,CAAA,GAAI,CAAA,EAAG,MAAM,MAAM,CAAA;AACzD;AAGe,SAAR,OAAA,CAAyB,OAAO,YAAA,EAAc;AAEjD,EAAA,IAAI,MAAA,GAAS,CAAA;AAEb,EAAA,IAAI,CAAC,KAAA,EAAO;AACR,IAAA,OAAO,CAAA;AAAA,EACX;AAGA,EAAA,IAAI,KAAA,CAAM,SAAShB,OAAAA,EAAa;AAC5B,IAAA,OAAO,YAAA,CAAa,KAAA,EAAO,CAAA,EAAG,UAAA,EAAY,MAAM,CAAA;AAAA,EACpD,CAAA,MAAA,IAOS,MAAM,IAAA,KAAS,KAAA,IAAS,MAAM,KAAA,CAAM,UAAA,CAAW,CAAC,CAAA,KAAMgB,YAAAA,EAAa;AAExE,IAAA,IAAI,CAAC,OAAA,CAAQ,KAAA,CAAM,KAAA,EAAO,CAAA,EAAGK,EAAC,CAAA,EAAG;AAC7B,MAAA,OAAO,CAAA;AAAA,IACX;AAEA,IAAA,QAAQ,KAAA,CAAM,MAAM,MAAA;AAAQ;AAAA;AAAA;AAAA,MAIxB,KAAK,CAAA;AACD,QAAA,OAAO,SAAS,YAAA,CAAa,EAAE,MAAM,CAAA,EAAG,QAAQ,YAAY,CAAA;AAAA;AAAA,MAGhE,KAAK,CAAA;AACD,QAAA,IAAI,KAAA,CAAM,KAAA,CAAM,UAAA,CAAW,CAAC,MAAML,YAAAA,EAAa;AAC3C,UAAA,OAAO,CAAA;AAAA,QACX;AAEA,QAAA,MAAA,GAAS,OAAO,YAAA,CAAa,EAAE,MAAM,CAAA,EAAG,QAAQ,YAAY,CAAA;AAC5D,QAAA,KAAA,GAAQ,aAAa,MAAM,CAAA;AAE3B,QAAA,OAAO,YAAA,CAAa,KAAA,EAAO,CAAA,EAAG,aAAA,EAAe,MAAM,CAAA;AAAA;AAAA,MAGvD;AACI,QAAA,IAAI,KAAA,CAAM,KAAA,CAAM,UAAA,CAAW,CAAC,MAAMA,YAAAA,EAAa;AAC3C,UAAA,OAAO,CAAA;AAAA,QACX;AAEA,QAAA,OAAO,YAAA,CAAa,KAAA,EAAO,CAAA,EAAG,aAAA,EAAe,MAAM,CAAA;AAAA;AAC3D,EACJ,CAAA,MAAA,IAOS,KAAA,CAAM,IAAA,KAAS,KAAA,IAAU,OAAA,CAAQ,KAAA,EAAOI,SAAQ,CAAA,IAAK,YAAA,CAAa,MAAA,GAAS,CAAC,CAAA,CAAE,SAAS,KAAA,EAAQ;AAEpG,IAAA,IAAI,KAAA,CAAM,SAAS,KAAA,EAAO;AACtB,MAAA,KAAA,GAAQ,YAAA,CAAa,EAAE,MAAM,CAAA;AAAA,IACjC;AAEA,IAAA,IAAI,KAAA,KAAU,QAAQ,CAAC,OAAA,CAAQ,MAAM,KAAA,EAAO,CAAA,EAAGC,EAAC,CAAA,EAAG;AAC/C,MAAA,OAAO,CAAA;AAAA,IACX;AAEA,IAAA,QAAQ,KAAA,CAAM,MAAM,MAAA;AAAQ;AAAA;AAAA;AAAA,MAIxB,KAAK,CAAA;AACD,QAAA,OAAO,SAAS,YAAA,CAAa,EAAE,MAAM,CAAA,EAAG,QAAQ,YAAY,CAAA;AAAA;AAAA,MAGhE,KAAK,CAAA;AACD,QAAA,IAAI,KAAA,CAAM,KAAA,CAAM,UAAA,CAAW,CAAC,MAAML,YAAAA,EAAa;AAC3C,UAAA,OAAO,CAAA;AAAA,QACX;AAEA,QAAA,MAAA,GAAS,OAAO,YAAA,CAAa,EAAE,MAAM,CAAA,EAAG,QAAQ,YAAY,CAAA;AAC5D,QAAA,KAAA,GAAQ,aAAa,MAAM,CAAA;AAE3B,QAAA,OAAO,YAAA,CAAa,KAAA,EAAO,CAAA,EAAG,aAAA,EAAe,MAAM,CAAA;AAAA;AAAA,MAGvD;AACI,QAAA,IAAI,KAAA,CAAM,KAAA,CAAM,UAAA,CAAW,CAAC,MAAMA,YAAAA,EAAa;AAC3C,UAAA,OAAO,CAAA;AAAA,QACX;AAEA,QAAA,OAAO,YAAA,CAAa,KAAA,EAAO,CAAA,EAAG,aAAA,EAAe,MAAM,CAAA;AAAA;AAC3D,EACJ,CAAA,MAAA,IAOS,KAAA,CAAM,IAAA,KAAS,SAAA,EAAW;AAC/B,IAAA,IAAId,KAAAA,GAAO,KAAA,CAAM,KAAA,CAAM,UAAA,CAAW,CAAC,CAAA;AACnC,IAAA,IAAI,IAAA,GAAOA,KAAAA,KAASkB,SAAAA,IAAYlB,KAAAA,KAASc,eAAc,CAAA,GAAI,CAAA;AAC3D,IAAA,IAAI,CAAA,GAAI,IAAA;AAER,IAAA,OAAO,CAAA,GAAI,KAAA,CAAM,KAAA,CAAM,MAAA,EAAQ,CAAA,EAAA,EAAK;AAChC,MAAA,IAAI,CAAC,OAAA,CAAQ,KAAA,CAAM,MAAM,UAAA,CAAW,CAAC,CAAC,CAAA,EAAG;AACrC,QAAA;AAAA,MACJ;AAAA,IACJ;AAEA,IAAA,IAAI,MAAM,IAAA,EAAM;AAEZ,MAAA,OAAO,CAAA;AAAA,IACX;AAEA,IAAA,IAAI,CAAC,OAAA,CAAQ,KAAA,CAAM,KAAA,EAAO,CAAA,EAAGK,EAAC,CAAA,EAAG;AAC7B,MAAA,OAAO,CAAA;AAAA,IACX;AAKA,IAAA,IAAI,CAAA,GAAI,CAAA,KAAM,KAAA,CAAM,KAAA,CAAM,MAAA,EAAQ;AAC9B,MAAA,OAAO,SAAS,YAAA,CAAa,EAAE,MAAM,CAAA,EAAG,QAAQ,YAAY,CAAA;AAAA,IAChE,CAAA,MAAO;AACH,MAAA,IAAI,MAAM,KAAA,CAAM,UAAA,CAAW,CAAA,GAAI,CAAC,MAAML,YAAAA,EAAa;AAC/C,QAAA,OAAO,CAAA;AAAA,MACX;AAGA,MAAA,IAAI,CAAA,GAAI,CAAA,KAAM,KAAA,CAAM,KAAA,CAAM,MAAA,EAAQ;AAC9B,QAAA,MAAA,GAAS,OAAO,YAAA,CAAa,EAAE,MAAM,CAAA,EAAG,QAAQ,YAAY,CAAA;AAC5D,QAAA,KAAA,GAAQ,aAAa,MAAM,CAAA;AAE3B,QAAA,OAAO,YAAA,CAAa,KAAA,EAAO,CAAA,EAAG,aAAA,EAAe,MAAM,CAAA;AAAA,MACvD,CAAA,MAEK;AACD,QAAA,OAAO,YAAA,CAAa,KAAA,EAAO,CAAA,GAAI,CAAA,EAAG,eAAe,MAAM,CAAA;AAAA,MAC3D;AAAA,IACJ;AAAA,EACJ;AAEA,EAAA,OAAO,CAAA;AACX;;;ACpOA,IAAMI,SAAAA,GAAW,EAAA;AACjB,IAAMJ,YAAAA,GAAc,EAAA;AACpB,IAAM,YAAA,GAAe,EAAA;AACrB,IAAM,CAAA,GAAI,GAAA;AAEV,SAASM,QAAAA,CAAQ,OAAOpB,KAAAA,EAAM;AAC1B,EAAA,OAAO,KAAA,KAAU,QAAQ,KAAA,CAAM,IAAA,KAAS,SAAS,KAAA,CAAM,KAAA,CAAM,UAAA,CAAW,CAAC,CAAA,KAAMA,KAAAA;AACnF;AAEA,SAAS,UAAA,CAAW,OAAOA,KAAAA,EAAM;AAC7B,EAAA,OAAO,KAAA,CAAM,KAAA,CAAM,UAAA,CAAW,CAAC,CAAA,KAAMA,KAAAA;AACzC;AAEA,SAAS,WAAA,CAAY,KAAA,EAAO,MAAA,EAAQ,SAAA,EAAW;AAC3C,EAAA,IAAI,MAAA,GAAS,CAAA;AAEb,EAAA,KAAA,IAAS,MAAM,MAAA,EAAQ,GAAA,GAAM,KAAA,CAAM,KAAA,CAAM,QAAQ,GAAA,EAAA,EAAO;AACpD,IAAA,MAAMA,KAAAA,GAAO,KAAA,CAAM,KAAA,CAAM,UAAA,CAAW,GAAG,CAAA;AAEvC,IAAA,IAAIA,KAAAA,KAASc,YAAAA,IAAe,SAAA,IAAa,MAAA,KAAW,CAAA,EAAG;AACnD,MAAA,WAAA,CAAY,KAAA,EAAO,MAAA,GAAS,MAAA,GAAS,CAAA,EAAG,KAAK,CAAA;AAC7C,MAAA,OAAO,CAAA;AAAA,IACX;AAEA,IAAA,IAAI,CAAC,UAAA,CAAWd,KAAI,CAAA,EAAG;AACnB,MAAA,OAAO,CAAA;AAAA,IACX;AAEA,IAAA,IAAI,EAAE,SAAS,CAAA,EAAG;AACd,MAAA,OAAO,CAAA;AAAA,IACX;AAAC,EACL;AAEA,EAAA,OAAO,MAAA;AACX;AAEA,SAAS,wBAAA,CAAyB,QAAA,EAAUP,OAAAA,EAAQ,YAAA,EAAc;AAC9D,EAAA,IAAI,CAAC,QAAA,EAAU;AACX,IAAA,OAAO,CAAA;AAAA,EACX;AAEA,EAAA,OAAO2B,QAAAA,CAAQ,YAAA,CAAa3B,OAAM,CAAA,EAAG,YAAY,CAAA,EAAG;AAChD,IAAA,IAAI,EAAE,WAAW,CAAA,EAAG;AAChB,MAAA,OAAO,CAAA;AAAA,IACX;AAEA,IAAAA,OAAAA,EAAAA;AAAA,EACJ;AAEA,EAAA,OAAOA,OAAAA;AACX;AAqBe,SAAR,MAAA,CAAwB,OAAO,YAAA,EAAc;AAChD,EAAA,IAAIA,OAAAA,GAAS,CAAA;AAGb,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,CAAM,IAAA,KAAS,KAAA,IAAS,CAAC,OAAA,CAAQ,KAAA,CAAM,KAAA,EAAO,CAAA,EAAG,CAAC,CAAA,EAAG;AACvE,IAAA,OAAO,CAAA;AAAA,EACX;AAEA,EAAA,KAAA,GAAQ,YAAA,CAAa,EAAEA,OAAM,CAAA;AAC7B,EAAA,IAAI,UAAU,IAAA,EAAM;AAChB,IAAA,OAAO,CAAA;AAAA,EACX;AAIA,EAAA,IAAI2B,QAAAA,CAAQ,KAAA,EAAOF,SAAQ,CAAA,EAAG;AAC1B,IAAA,KAAA,GAAQ,YAAA,CAAa,EAAEzB,OAAM,CAAA;AAC7B,IAAA,IAAI,UAAU,IAAA,EAAM;AAChB,MAAA,OAAO,CAAA;AAAA,IACX;AAEA,IAAA,IAAI,KAAA,CAAM,SAAS,KAAA,EAAO;AAEtB,MAAA,OAAO,wBAAA,CAAyB,YAAY,KAAA,EAAO,CAAA,EAAG,IAAI,CAAA,EAAG,EAAEA,SAAQ,YAAY,CAAA;AAAA,IACvF;AAEA,IAAA,IAAI2B,QAAAA,CAAQ,KAAA,EAAO,YAAY,CAAA,EAAG;AAE9B,MAAA,OAAO,wBAAA,CAAyB,CAAA,EAAG,EAAE3B,OAAAA,EAAQ,YAAY,CAAA;AAAA,IAC7D;AAGA,IAAA,OAAO,CAAA;AAAA,EACX;AAKA,EAAA,IAAI,KAAA,CAAM,SAASK,OAAAA,EAAa;AAC5B,IAAA,MAAM,iBAAA,GAAoB,WAAA,CAAY,KAAA,EAAO,CAAA,EAAG,IAAI,CAAA;AACpD,IAAA,IAAI,sBAAsB,CAAA,EAAG;AACzB,MAAA,OAAO,CAAA;AAAA,IACX;AAEA,IAAA,KAAA,GAAQ,YAAA,CAAa,EAAEL,OAAM,CAAA;AAC7B,IAAA,IAAI,UAAU,IAAA,EAAM;AAEhB,MAAA,OAAOA,OAAAA;AAAA,IACX;AAEA,IAAA,IAAI,KAAA,CAAM,IAAA,KAAS,SAAA,IAAa,KAAA,CAAM,SAASK,OAAAA,EAAa;AAGxD,MAAA,IAAI,CAAC,UAAA,CAAW,KAAA,EAAOgB,YAAW,CAAA,IAAK,CAAC,WAAA,CAAY,KAAA,EAAO,CAAA,EAAG,KAAK,CAAA,EAAG;AAClE,QAAA,OAAO,CAAA;AAAA,MACX;AAEA,MAAA,OAAOrB,OAAAA,GAAS,CAAA;AAAA,IACpB;AAGA,IAAA,OAAO,wBAAA,CAAyB,iBAAA,EAAmBA,OAAAA,EAAQ,YAAY,CAAA;AAAA,EAC3E;AAGA,EAAA,IAAI,KAAA,CAAM,SAAS,SAAA,EAAW;AAC1B,IAAA,OAAO,wBAAA,CAAyB,YAAY,KAAA,EAAO,CAAA,EAAG,IAAI,CAAA,EAAG,EAAEA,SAAQ,YAAY,CAAA;AAAA,EACvF;AAEA,EAAA,OAAO,CAAA;AACX;;;AC9GA,IAAM,iBAAA,GAAoB;AAAA,EACtB,OAAA;AAAA,EACA,YAAA;AAAA,EACA;AACJ,CAAA;AAGA,IAAM,uBAAA,GAA0B;AAAA,EAC5B,MAAA;AAAA,EACA,MAAA;AAAA,EACA;AACJ,CAAA;AAGA,IAAM,yBAAA,GAA4B;AAAA,EAC9B,QAAA;AAAA,EACA,MAAA;AAAA,EACA;AACJ,CAAA;AAGA,IAAM,uBAAA,GAA0B;AAAA,EAC5B,MAAA;AAAA,EACA,MAAA;AAAA,EACA;AACJ,CAAA;AAGA,IAAM,sBAAA,GAAyB;AAAA,EAC3B,OAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA;AACJ,CAAA;AAGA,IAAM,wBAAA,GAA2B;AAAA,EAC7B,MAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA;AACJ,CAAA;AAGA,IAAM,yCAAA,GAA4C;AAAA,EAC9C;AACJ,CAAA;AAGA,IAAM,iBAAA,GAAoB;AAAA,EACtB;AACJ,CAAA;AAEA,IAAM,mBAAA,GAAsB;AAAA,EACxB,GAAG,iBAAA;AAAA,EACH,GAAG,uBAAA;AAAA,EACH,GAAG,yBAAA;AAAA,EACH,GAAG,uBAAA;AAAA,EACH,GAAG,wBAAA;AAAA,EACH,GAAG,yCAAA;AAAA,EACH,GAAG;AACP,CAAA;AAEA,IAAM,uBAAA,GAA0B;AAAA,EAC5B,GAAG,iBAAA;AAAA,EACH,GAAG,uBAAA;AAAA,EACH,GAAG,yBAAA;AAAA,EACH,GAAG,yCAAA;AAAA,EACH,GAAG;AACP,CAAA;AAEA,IAAM,sBAAA,GAAyB;AAAA,EAC3B,GAAG,iBAAA;AAAA,EACH,GAAG,uBAAA;AAAA,EACH,GAAG,yBAAA;AAAA,EACH,GAAG,sBAAA;AAAA,EACH,GAAG,yCAAA;AAAA,EACH,GAAG;AACP,CAAA;AAEA,IAAM4B,YAAAA,uBAAkB,GAAA,CAAI;AAAA,EACxB,CAAC,UAAe,gBAAgB,CAAA;AAAA,EAChC,CAAC,iBAAiB,gBAAgB,CAAA;AAAA,EAClC,CAAC,mBAAmB,kBAAkB,CAAA;AAAA,EACtC,CAAC,kBAAkB,iBAAiB;AACxC,CAAC,CAAA;AAGD,SAAS,UAAA,CAAW,KAAK,KAAA,EAAO;AAC5B,EAAA,OAAO,QAAQ,GAAA,CAAI,MAAA,GAAS,GAAA,CAAI,UAAA,CAAW,KAAK,CAAA,GAAI,CAAA;AACxD;AAEA,SAAS,KAAA,CAAM,QAAQ,QAAA,EAAU;AAC7B,EAAA,OAAO,MAAA,CAAO,MAAA,EAAQ,CAAA,EAAG,MAAA,CAAO,QAAQ,QAAQ,CAAA;AACpD;AAEA,SAAS,QAAA,CAAS,QAAQ,QAAA,EAAU;AAChC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,CAAS,QAAQ,CAAA,EAAA,EAAK;AACtC,IAAA,IAAI,KAAA,CAAM,MAAA,EAAQ,QAAA,CAAS,CAAC,CAAC,CAAA,EAAG;AAC5B,MAAA,OAAO,IAAA;AAAA,IACX;AAAA,EACJ;AAEA,EAAA,OAAO,KAAA;AACX;AAGA,SAAS,eAAA,CAAgB,KAAK,MAAA,EAAQ;AAClC,EAAA,IAAI,MAAA,KAAW,GAAA,CAAI,MAAA,GAAS,CAAA,EAAG;AAC3B,IAAA,OAAO,KAAA;AAAA,EACX;AAEA,EAAA,OACI,UAAA,CAAW,GAAA,EAAK,MAAM,CAAA,KAAM,EAAA;AAAA,EAC5B,OAAA,CAAQ,UAAA,CAAW,GAAA,EAAK,MAAA,GAAS,CAAC,CAAC,CAAA;AAE3C;AAEA,SAAS,UAAA,CAAW,IAAA,EAAM,KAAA,EAAO,MAAA,EAAQ;AACrC,EAAA,IAAI,IAAA,IAAQ,IAAA,CAAK,IAAA,KAAS,OAAA,EAAS;AAC/B,IAAA,MAAM,GAAA,GAAM,MAAA;AAAA,MACR,MAAA,KAAW,UAAa,MAAA,KAAW,KAAA,CAAM,SACnC,KAAA,CAAM,MAAA,CAAO,CAAA,EAAG,MAAM,CAAA,GACtB;AAAA,KACV;AAEA,IAAA,IAAI,KAAA,CAAM,GAAG,CAAA,EAAG;AACZ,MAAA,OAAO,IAAA;AAAA,IACX;AAIA,IAAA,IAAI,IAAA,CAAK,QAAQ,IAAA,IAAQ,GAAA,GAAM,KAAK,GAAA,IAAO,OAAO,IAAA,CAAK,GAAA,KAAQ,QAAA,EAAU;AACrE,MAAA,OAAO,IAAA;AAAA,IACX;AAIA,IAAA,IAAI,IAAA,CAAK,QAAQ,IAAA,IAAQ,GAAA,GAAM,KAAK,GAAA,IAAO,OAAO,IAAA,CAAK,GAAA,KAAQ,QAAA,EAAU;AACrE,MAAA,OAAO,IAAA;AAAA,IACX;AAAA,EACJ;AAEA,EAAA,OAAO,KAAA;AACX;AAEA,SAAS,eAAA,CAAgB,OAAO,YAAA,EAAc;AAC1C,EAAA,IAAI,gBAAA,GAAmB,CAAA;AACvB,EAAA,IAAI,eAAe,EAAC;AACpB,EAAA,IAAI5B,OAAAA,GAAS,CAAA;AAGb,EAAA,IAAA;AACA,IAAA,GAAG;AACC,MAAA,QAAQ,MAAM,IAAA;AAAM,QAChB,KAAK,iBAAA;AAAA,QACL,KAAK,gBAAA;AAAA,QACL,KAAK,kBAAA;AACD,UAAA,IAAI,KAAA,CAAM,SAAS,gBAAA,EAAkB;AACjC,YAAA,MAAM,IAAA;AAAA,UACV;AAEA,UAAA,gBAAA,GAAmB,aAAa,GAAA,EAAI;AAEpC,UAAA,IAAI,YAAA,CAAa,WAAW,CAAA,EAAG;AAC3B,YAAAA,OAAAA,EAAAA;AACA,YAAA,MAAM,IAAA;AAAA,UACV;AAEA,UAAA;AAAA,QAEJ,KAAK,QAAA;AAAA,QACL,KAAK,eAAA;AAAA,QACL,KAAK,iBAAA;AAAA,QACL,KAAK,gBAAA;AACD,UAAA,YAAA,CAAa,KAAK,gBAAgB,CAAA;AAClC,UAAA,gBAAA,GAAmB4B,YAAAA,CAAY,GAAA,CAAI,KAAA,CAAM,IAAI,CAAA;AAC7C,UAAA;AAAA;AAGR,MAAA5B,OAAAA,EAAAA;AAAA,IACJ,CAAA,QAAS,KAAA,GAAQ,YAAA,CAAaA,OAAM,CAAA;AAEpC,EAAA,OAAOA,OAAAA;AACX;AAMA,SAAS,IAAA,CAAK,MAAM,aAAA,EAAe;AAC/B,EAAA,OAAO,SAAS,KAAA,EAAO,YAAA,EAAc,IAAA,EAAM;AACvC,IAAA,IAAI,UAAU,IAAA,EAAM;AAChB,MAAA,OAAO,CAAA;AAAA,IACX;AAEA,IAAA,IAAI,MAAM,IAAA,KAAS,QAAA,IAAiB,SAAS,KAAA,CAAM,KAAA,EAAO,aAAa,CAAA,EAAG;AACtE,MAAA,OAAO,eAAA,CAAgB,OAAO,YAAY,CAAA;AAAA,IAC9C;AAEA,IAAA,OAAO,IAAA,CAAK,KAAA,EAAO,YAAA,EAAc,IAAI,CAAA;AAAA,EACzC,CAAA;AACJ;AAEA,SAAS,UAAU,iBAAA,EAAmB;AAClC,EAAA,OAAO,SAAS,KAAA,EAAO;AACnB,IAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,CAAM,IAAA,KAAS,iBAAA,EAAmB;AACpD,MAAA,OAAO,CAAA;AAAA,IACX;AAEA,IAAA,OAAO,CAAA;AAAA,EACX,CAAA;AACJ;AAaA,SAAS,YAAY,KAAA,EAAO;AACxB,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,CAAM,IAAA,KAAS,KAAA,EAAO;AACxC,IAAA,OAAO,CAAA;AAAA,EACX;AAEA,EAAA,MAAME,MAAAA,GAAO,KAAA,CAAM,KAAA,CAAM,WAAA,EAAY;AAGrC,EAAA,IAAI,QAAA,CAASA,MAAAA,EAAM,eAAe,CAAA,EAAG;AACjC,IAAA,OAAO,CAAA;AAAA,EACX;AAGA,EAAA,IAAI,KAAA,CAAMA,MAAAA,EAAM,SAAS,CAAA,EAAG;AACxB,IAAA,OAAO,CAAA;AAAA,EACX;AAQA,EAAA,OAAO,CAAA;AACX;AAKA,SAAS,YAAY,KAAA,EAAO;AACxB,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,CAAM,IAAA,KAAS,KAAA,EAAO;AACxC,IAAA,OAAO,CAAA;AAAA,EACX;AAGA,EAAA,IAAI,UAAA,CAAW,KAAA,CAAM,KAAA,EAAO,CAAC,CAAA,KAAM,EAAA,IAAU,UAAA,CAAW,KAAA,CAAM,KAAA,EAAO,CAAC,CAAA,KAAM,EAAA,EAAQ;AAChF,IAAA,OAAO,CAAA;AAAA,EACX;AAEA,EAAA,OAAO,CAAA;AACX;AAMA,SAAS,mBAAmB,KAAA,EAAO;AAE/B,EAAA,IAAI,CAAC,WAAA,CAAY,KAAK,CAAA,EAAG;AACrB,IAAA,OAAO,CAAA;AAAA,EACX;AAGA,EAAA,IAAI,KAAA,CAAM,UAAU,IAAA,EAAM;AACtB,IAAA,OAAO,CAAA;AAAA,EACX;AAEA,EAAA,OAAO,CAAA;AACX;AAMA,SAAS,SAAS,KAAA,EAAO;AACrB,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,CAAM,IAAA,KAAS,IAAA,EAAM;AACvC,IAAA,OAAO,CAAA;AAAA,EACX;AAEA,EAAA,MAAMF,OAAAA,GAAS,MAAM,KAAA,CAAM,MAAA;AAG3B,EAAA,IAAIA,YAAW,CAAA,IAAKA,OAAAA,KAAW,KAAKA,OAAAA,KAAW,CAAA,IAAKA,YAAW,CAAA,EAAG;AAC9D,IAAA,OAAO,CAAA;AAAA,EACX;AAEA,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAIA,OAAAA,EAAQ,CAAA,EAAA,EAAK;AAC7B,IAAA,IAAI,CAAC,UAAA,CAAW,UAAA,CAAW,MAAM,KAAA,EAAO,CAAC,CAAC,CAAA,EAAG;AACzC,MAAA,OAAO,CAAA;AAAA,IACX;AAAA,EACJ;AAEA,EAAA,OAAO,CAAA;AACX;AAEA,SAAS,WAAW,KAAA,EAAO;AACvB,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,CAAM,IAAA,KAAS,IAAA,EAAM;AACvC,IAAA,OAAO,CAAA;AAAA,EACX;AAEA,EAAA,IAAI,CAAC,iBAAA,CAAkB,UAAA,CAAW,KAAA,CAAM,KAAA,EAAO,CAAC,CAAA,EAAG,UAAA,CAAW,KAAA,CAAM,KAAA,EAAO,CAAC,CAAA,EAAG,UAAA,CAAW,MAAM,KAAA,EAAO,CAAC,CAAC,CAAA,EAAG;AACxG,IAAA,OAAO,CAAA;AAAA,EACX;AAEA,EAAA,OAAO,CAAA;AACX;AAIA,SAAS,gBAAA,CAAiB,OAAO,YAAA,EAAc;AAC3C,EAAA,IAAI,CAAC,KAAA,EAAO;AACR,IAAA,OAAO,CAAA;AAAA,EACX;AAEA,EAAA,IAAI,gBAAA,GAAmB,CAAA;AACvB,EAAA,IAAI,eAAe,EAAC;AACpB,EAAA,IAAIA,OAAAA,GAAS,CAAA;AAIb,EAAA,IAAA;AACA,IAAA,GAAG;AACC,MAAA,QAAQ,MAAM,IAAA;AAAM;AAAA,QAEhB,KAAK,SAAA;AAAA,QACL,KAAK,MAAA;AACD,UAAA,MAAM,IAAA;AAAA;AAAA,QAGV,KAAK,iBAAA;AAAA,QACL,KAAK,gBAAA;AAAA,QACL,KAAK,kBAAA;AACD,UAAA,IAAI,KAAA,CAAM,SAAS,gBAAA,EAAkB;AACjC,YAAA,MAAM,IAAA;AAAA,UACV;AAEA,UAAA,gBAAA,GAAmB,aAAa,GAAA,EAAI;AACpC,UAAA;AAAA;AAAA,QAGJ,KAAK,SAAA;AACD,UAAA,IAAI,qBAAqB,CAAA,EAAG;AACxB,YAAA,MAAM,IAAA;AAAA,UACV;AAEA,UAAA;AAAA;AAAA,QAGJ,KAAK,KAAA;AACD,UAAA,IAAI,gBAAA,KAAqB,CAAA,IAAK,KAAA,CAAM,KAAA,KAAU,GAAA,EAAK;AAC/C,YAAA,MAAM,IAAA;AAAA,UACV;AAEA,UAAA;AAAA,QAEJ,KAAK,QAAA;AAAA,QACL,KAAK,eAAA;AAAA,QACL,KAAK,iBAAA;AAAA,QACL,KAAK,gBAAA;AACD,UAAA,YAAA,CAAa,KAAK,gBAAgB,CAAA;AAClC,UAAA,gBAAA,GAAmB4B,YAAAA,CAAY,GAAA,CAAI,KAAA,CAAM,IAAI,CAAA;AAC7C,UAAA;AAAA;AAGR,MAAA5B,OAAAA,EAAAA;AAAA,IACJ,CAAA,QAAS,KAAA,GAAQ,YAAA,CAAaA,OAAM,CAAA;AAEpC,EAAA,OAAOA,OAAAA;AACX;AAMA,SAAS,QAAA,CAAS,OAAO,YAAA,EAAc;AACnC,EAAA,IAAI,CAAC,KAAA,EAAO;AACR,IAAA,OAAO,CAAA;AAAA,EACX;AAEA,EAAA,IAAI,gBAAA,GAAmB,CAAA;AACvB,EAAA,IAAI,eAAe,EAAC;AACpB,EAAA,IAAIA,OAAAA,GAAS,CAAA;AAIb,EAAA,IAAA;AACA,IAAA,GAAG;AACC,MAAA,QAAQ,MAAM,IAAA;AAAM;AAAA,QAEhB,KAAK,SAAA;AAAA,QACL,KAAK,MAAA;AACD,UAAA,MAAM,IAAA;AAAA;AAAA,QAGV,KAAK,iBAAA;AAAA,QACL,KAAK,gBAAA;AAAA,QACL,KAAK,kBAAA;AACD,UAAA,IAAI,KAAA,CAAM,SAAS,gBAAA,EAAkB;AACjC,YAAA,MAAM,IAAA;AAAA,UACV;AAEA,UAAA,gBAAA,GAAmB,aAAa,GAAA,EAAI;AACpC,UAAA;AAAA,QAEJ,KAAK,QAAA;AAAA,QACL,KAAK,eAAA;AAAA,QACL,KAAK,iBAAA;AAAA,QACL,KAAK,gBAAA;AACD,UAAA,YAAA,CAAa,KAAK,gBAAgB,CAAA;AAClC,UAAA,gBAAA,GAAmB4B,YAAAA,CAAY,GAAA,CAAI,KAAA,CAAM,IAAI,CAAA;AAC7C,UAAA;AAAA;AAGR,MAAA5B,OAAAA,EAAAA;AAAA,IACJ,CAAA,QAAS,KAAA,GAAQ,YAAA,CAAaA,OAAM,CAAA;AAEpC,EAAA,OAAOA,OAAAA;AACX;AAMA,SAAS,UAAU,IAAA,EAAM;AACrB,EAAA,IAAI,IAAA,EAAM;AACN,IAAA,IAAA,GAAO,IAAI,IAAI,IAAI,CAAA;AAAA,EACvB;AAEA,EAAA,OAAO,SAAS,KAAA,EAAO,YAAA,EAAc,IAAA,EAAM;AACvC,IAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,CAAM,IAAA,KAAS,SAAA,EAAW;AAC5C,MAAA,OAAO,CAAA;AAAA,IACX;AAEA,IAAA,MAAM,SAAA,GAAY,aAAA,CAAc,KAAA,CAAM,KAAA,EAAO,CAAC,CAAA;AAG9C,IAAA,IAAI,SAAS,IAAA,EAAM;AAEf,MAAA,MAAM,oBAAA,GAAuB,KAAA,CAAM,KAAA,CAAM,OAAA,CAAQ,MAAM,SAAS,CAAA;AAChE,MAAA,MAAM,OAAO,oBAAA,KAAyB,EAAA,IAAM,CAAC,eAAA,CAAgB,KAAA,CAAM,OAAO,oBAAoB,CAAA,GACxF,KAAA,CAAM,KAAA,CAAM,OAAO,SAAS,CAAA,GAC5B,MAAM,KAAA,CAAM,SAAA,CAAU,WAAW,oBAAoB,CAAA;AAE3D,MAAA,IAAI,KAAK,GAAA,CAAI,IAAA,CAAK,WAAA,EAAa,MAAM,KAAA,EAAO;AACxC,QAAA,OAAO,CAAA;AAAA,MACX;AAAA,IACJ;AAGA,IAAA,IAAI,UAAA,CAAW,IAAA,EAAM,KAAA,CAAM,KAAA,EAAO,SAAS,CAAA,EAAG;AAC1C,MAAA,OAAO,CAAA;AAAA,IACX;AAEA,IAAA,OAAO,CAAA;AAAA,EACX,CAAA;AACJ;AAQA,SAAS,UAAA,CAAW,KAAA,EAAO,YAAA,EAAc,IAAA,EAAM;AAE3C,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,CAAM,IAAA,KAAS,UAAA,EAAY;AAC7C,IAAA,OAAO,CAAA;AAAA,EACX;AAGA,EAAA,IAAI,UAAA,CAAW,MAAM,KAAA,CAAM,KAAA,EAAO,MAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA,EAAG;AACvD,IAAA,OAAO,CAAA;AAAA,EACX;AAEA,EAAA,OAAO,CAAA;AACX;AAUA,SAAS,KAAK,IAAA,EAAM;AAChB,EAAA,IAAI,OAAO,SAAS,UAAA,EAAY;AAC5B,IAAA,IAAA,GAAO,WAAW;AACd,MAAA,OAAO,CAAA;AAAA,IACX,CAAA;AAAA,EACJ;AAEA,EAAA,OAAO,SAAS,KAAA,EAAO,YAAA,EAAc,IAAA,EAAM;AACvC,IAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,CAAM,IAAA,KAASK,OAAAA,EAAa;AAC9C,MAAA,IAAI,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA,KAAM,CAAA,EAAG;AAC3B,QAAA,OAAO,CAAA;AAAA,MACX;AAAA,IACJ;AAEA,IAAA,OAAO,IAAA,CAAK,KAAA,EAAO,YAAA,EAAc,IAAI,CAAA;AAAA,EACzC,CAAA;AACJ;AAMA,SAAS,MAAA,CAAO,KAAA,EAAO,YAAA,EAAc,IAAA,EAAM;AACvC,EAAA,IAAI,UAAU,IAAA,EAAM;AAChB,IAAA,OAAO,CAAA;AAAA,EACX;AAEA,EAAA,MAAM,SAAA,GAAY,aAAA,CAAc,KAAA,CAAM,KAAA,EAAO,CAAC,CAAA;AAC9C,EAAA,MAAMwB,SAAAA,GAAW,SAAA,KAAc,KAAA,CAAM,KAAA,CAAM,MAAA;AAC3C,EAAA,IAAI,CAACA,SAAAA,IAAY,CAAC,gBAAgB,KAAA,CAAM,KAAA,EAAO,SAAS,CAAA,EAAG;AACvD,IAAA,OAAO,CAAA;AAAA,EACX;AAGA,EAAA,IAAI,UAAA,CAAW,IAAA,EAAM,KAAA,CAAM,KAAA,EAAO,SAAS,CAAA,EAAG;AAC1C,IAAA,OAAO,CAAA;AAAA,EACX;AAEA,EAAA,OAAO,CAAA;AACX;AAIA,SAAS,OAAA,CAAQ,KAAA,EAAO,YAAA,EAAc,IAAA,EAAM;AAExC,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,CAAM,IAAA,KAASxB,OAAAA,EAAa;AAC9C,IAAA,OAAO,CAAA;AAAA,EACX;AAGA,EAAA,IAAI,CAAA,GAAI,UAAA,CAAW,KAAA,CAAM,KAAA,EAAO,CAAC,CAAA,KAAM,EAAA;AAAA,EAC/B,WAAW,KAAA,CAAM,KAAA,EAAO,CAAC,CAAA,KAAM,KAAS,CAAA,GAAI,CAAA;AAGpD,EAAA,OAAO,CAAA,GAAI,KAAA,CAAM,KAAA,CAAM,MAAA,EAAQ,CAAA,EAAA,EAAK;AAChC,IAAA,IAAI,CAAC,OAAA,CAAQ,UAAA,CAAW,MAAM,KAAA,EAAO,CAAC,CAAC,CAAA,EAAG;AACtC,MAAA,OAAO,CAAA;AAAA,IACX;AAAA,EACJ;AAGA,EAAA,IAAI,UAAA,CAAW,IAAA,EAAM,KAAA,CAAM,KAAA,EAAO,CAAC,CAAA,EAAG;AAClC,IAAA,OAAO,CAAA;AAAA,EACX;AAEA,EAAA,OAAO,CAAA;AACX;AAGO,IAAM,UAAA,GAAa;AAAA,EACtB,aAAA,EAAe,UAAU,KAAK,CAAA;AAAA,EAC9B,gBAAA,EAAkB,UAAU,QAAa,CAAA;AAAA,EACzC,kBAAA,EAAoB,UAAU,SAAS,CAAA;AAAA,EACvC,YAAA,EAAc,UAAU,IAAI,CAAA;AAAA,EAC5B,cAAA,EAAgB,UAAUD,OAAW,CAAA;AAAA,EACrC,kBAAA,EAAoB,UAAU,SAAS,CAAA;AAAA,EACvC,WAAA,EAAa,UAAU,GAAG,CAAA;AAAA,EAC1B,eAAA,EAAiB,UAAU,MAAM,CAAA;AAAA,EACjC,aAAA,EAAe,UAAU,KAAK,CAAA;AAAA,EAC9B,cAAA,EAAgB,UAAUC,OAAW,CAAA;AAAA,EACrC,kBAAA,EAAoB,UAAU,UAAU,CAAA;AAAA,EACxC,iBAAA,EAAmB,UAAU,SAAS,CAAA;AAAA,EACtC,kBAAA,EAAoB,UAAU,UAAU,CAAA;AAAA,EACxC,WAAA,EAAa,UAAU,GAAG,CAAA;AAAA,EAC1B,WAAA,EAAa,UAAU,GAAG,CAAA;AAAA,EAC1B,aAAA,EAAe,UAAU,KAAK,CAAA;AAAA,EAC9B,iBAAA,EAAmB,UAAU,SAAS,CAAA;AAAA,EACtC,aAAA,EAAe,UAAU,KAAK,CAAA;AAAA,EAC9B,SAAA,EAAW,UAAU,iBAAiB,CAAA;AAAA,EACtC,SAAA,EAAW,UAAU,kBAAkB,CAAA;AAAA,EACvC,SAAA,EAAW,UAAU,eAAe,CAAA;AAAA,EACpC,SAAA,EAAW,UAAU,gBAAgB,CAAA;AAAA,EACrC,SAAA,EAAW,UAAU,gBAAgB,CAAA;AAAA,EACrC,SAAA,EAAW,UAAU,iBAAiB;AAC1C,CAAA;AAGO,IAAM,eAAA,GAAkB;AAAA;AAAA,EAE3B,QAAA,EAAU,UAAUD,OAAW,CAAA;AAAA,EAC/B,OAAA,EAAS,UAAU,KAAK,CAAA;AAAA;AAAA,EAGxB,YAAA,EAAc,IAAA,CAAK,UAAA,EAAY,uBAAuB,CAAA;AAAA;AAAA,EAGtD,QAAQ,IAAA,EAAK;AAAA,EACb,QAAA,EAAU,IAAA,CAAK,MAAA,EAAQ,mBAAmB,CAAA;AAAA,EAC1C,SAAA,EAAW,IAAA,CAAK,OAAA,EAAS,mBAAmB,CAAA;AAAA;AAAA,EAG5C,cAAA,EAAgB,WAAA;AAAA,EAChB,cAAA,EAAgB,WAAA;AAAA,EAChB,sBAAA,EAAwB,kBAAA;AAAA,EACxB,WAAA,EAAa,QAAA;AAAA,EACb,aAAA,EAAe,UAAA;AAAA;AAAA,EACf,WAAA,EAAa,OAAA;AAAA,EACb,QAAA,EAAU,MAAA;AAAA,EACV,mBAAA,EAAqB,gBAAA;AAAA,EACrB,WAAA,EAAa;AACjB,CAAA;AAEO,IAAM,UAAA,GAAa;AAAA,EACtB,QAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA;AACJ,CAAA;AAGO,SAAS,qBAAqB,KAAA,EAAO;AACxC,EAAA,MAAM;AAAA,IACF,KAAA,EAAA0B,MAAAA;AAAA,IACA,OAAA,EAAAC,QAAAA;AAAA,IACA,SAAA,EAAAC,UAAAA;AAAA,IACA,IAAA,EAAAC,KAAAA;AAAA,IACA,MAAA,EAAAjC,OAAAA;AAAA,IACA,UAAA,EAAAkC,WAAAA;AAAA,IACA,SAAA,EAAAC,UAAAA;AAAA,IACA,IAAA,EAAAC;AAAA,GACJ,GAAI,SAAS,EAAC;AAEd,EAAA,OAAO;AAAA,IACH,WAAA,EAAa,IAAA,CAAK,SAAA,CAAU,IAAI,GAAG,sBAAsB,CAAA;AAAA,IACzD,OAAA,EAAS,IAAA,CAAK,SAAA,CAAUN,MAAK,GAAG,sBAAsB,CAAA;AAAA,IACtD,SAAA,EAAW,IAAA,CAAK,SAAA,CAAUC,QAAO,GAAG,sBAAsB,CAAA;AAAA,IAC1D,WAAA,EAAa,IAAA,CAAK,SAAA,CAAUC,UAAS,GAAG,sBAAsB,CAAA;AAAA,IAC9D,MAAA,EAAQ,IAAA,CAAK,SAAA,CAAUC,KAAI,GAAG,sBAAsB,CAAA;AAAA,IACpD,UAAU,IAAA,CAAK,IAAA,CAAK,UAAUjC,OAAM,CAAC,GAAG,sBAAsB,CAAA;AAAA,IAC9D,YAAA,EAAc,IAAA,CAAK,SAAA,CAAUkC,WAAU,GAAG,sBAAsB,CAAA;AAAA,IAChE,WAAA,EAAa,IAAA,CAAK,SAAA,CAAUC,UAAS,GAAG,sBAAsB,CAAA;AAAA,IAC9D,MAAA,EAAQ,IAAA,CAAK,SAAA,CAAUC,KAAI,GAAG,sBAAsB;AAAA,GACxD;AACJ;AAIA,SAAS,eAAe,KAAA,EAAO;AAC3B,EAAA,MAAM,OAAA,uBAAc,GAAA,EAAI;AAExB,EAAA,KAAA,MAAW,SAAS,UAAA,EAAY;AAC5B,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,KAAK,CAAC,CAAA,EAAG;AAC7B,MAAA,KAAA,MAAW,IAAA,IAAQ,KAAA,CAAM,KAAK,CAAA,EAAG;AAC7B,QAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,WAAA,EAAa,CAAA;AAAA,MAClC;AAAA,IACJ;AAAA,EACJ;AAEA,EAAA,OAAO,SAAS,SAAS,KAAA,EAAO;AAC5B,IAAA,IAAI,UAAU,IAAA,EAAM;AAChB,MAAA,OAAO,CAAA;AAAA,IACX;AAEA,IAAA,IAAI,KAAA,CAAM,IAAA,KAAS,KAAA,IAAS,KAAA,CAAM,UAAU,GAAA,EAAK;AAC7C,MAAA,OAAO,CAAA;AAAA,IACX;AAEA,IAAA,IAAI,KAAA,CAAM,SAAS,KAAA,IAAS,OAAA,CAAQ,IAAI,KAAA,CAAM,KAAA,CAAM,WAAA,EAAa,CAAA,EAAG;AAChE,MAAA,OAAO,CAAA;AAAA,IACX;AAEA,IAAA,OAAO,CAAA;AAAA,EACX,CAAA;AACJ;AAEO,SAAS,mBAAmB,KAAA,EAAO;AACtC,EAAA,OAAO;AAAA,IACH,GAAG,UAAA;AAAA,IACH,GAAG,eAAA;AAAA,IACH,GAAG,qBAAqB,KAAK,CAAA;AAAA,IAC7B,WAAA,EAAa,eAAe,KAAK;AAAA,GACrC;AACJ;;;ACjuBA,IAAA,aAAA,GAAA,EAAA;AAAA,QAAA,CAAA,aAAA,EAAA;AAAA,EAAA,KAAA,EAAA,MAAA,KAAA;AAAA,EAAA,OAAA,EAAA,MAAA,OAAA;AAAA,EAAA,IAAA,EAAA,MAAA,IAAA;AAAA,EAAA,SAAA,EAAA,MAAA,SAAA;AAAA,EAAA,MAAA,EAAA,MAAA,MAAA;AAAA,EAAA,UAAA,EAAA,MAAA,UAAA;AAAA,EAAA,SAAA,EAAA,MAAA,SAAA;AAAA,EAAA,IAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAAO,IAAM,MAAA,GAAS;AAAA;AAAA,EAElB,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,IAAA;AAAA,EAAM,IAAA;AAAA;AAAA,EAEnC,IAAA;AAAA,EAAM,KAAA;AAAA,EACN,IAAA;AAAA,EAAM,KAAA;AAAA,EACN,KAAA;AAAA,EAAO,MAAA;AAAA,EACP,IAAA;AAAA,EAAM,KAAA;AAAA,EACN,IAAA;AAAA,EAAM,KAAA;AAAA,EACN,IAAA;AAAA,EAAM,KAAA;AAAA;AAAA,EAEN,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EACpB,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EACpB,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EACpB,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EACpB,MAAA;AAAA,EAAQ,OAAA;AAAA,EAAS,OAAA;AAAA,EAAS,OAAA;AAAA,EAC1B,MAAA;AAAA,EAAQ,OAAA;AAAA,EAAS,OAAA;AAAA,EAAS,OAAA;AAAA;AAAA,EAE1B,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,OAAA;AAAA,EAAS;AACzC,CAAA;AACO,IAAM,KAAA,GAAQ,CAAC,KAAA,EAAO,MAAA,EAAQ,OAAO,MAAM,CAAA;AAC3C,IAAM,IAAA,GAAO,CAAC,GAAA,EAAK,IAAI,CAAA;AACvB,IAAM,SAAA,GAAY,CAAC,IAAA,EAAM,KAAK,CAAA;AAC9B,IAAM,UAAA,GAAa,CAAC,KAAA,EAAO,MAAA,EAAQ,QAAQ,GAAG,CAAA;AAC9C,IAAM,IAAA,GAAO,CAAC,IAAI,CAAA;AAClB,IAAM,OAAA,GAAU,CAAC,IAAI,CAAA;AACrB,IAAM,SAAA,GAAY,CAAC,IAAI,CAAA;;;ACxBvB,SAAStB,YAAAA,CAAY,OAAA,EAAS,KAAA,EAAO,MAAA,EAAQ;AAChD,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,iBAAA,CAAkB,aAAA,EAAe,OAAO,CAAA,EAAG;AAAA,IAC5D,KAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAA,EAAY,OAAA;AAAA,IACZ,OAAA,EAAS,OAAA,GAAU,MAAA,GACR,KAAA,GAAQ,SACR,IAAI,KAAA,CAAA,CAAO,MAAA,IAAU,KAAA,CAAM,MAAA,IAAU,CAAC,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA,GAAI;AAAA,GAClE,CAAA;AACL;;;ACTA,IAAM,GAAA,GAAM,CAAA;AACZ,IAAMY,EAAAA,GAAI,EAAA;AACV,IAAMW,EAAAA,GAAI,EAAA;AACV,IAAMC,EAAAA,GAAI,EAAA;AACV,IAAM,KAAA,GAAQ,EAAA;AACd,IAAM,SAAA,GAAY,IAAI,UAAA,CAAW,GAAG,CAAA,CAAE,GAAA;AAAA,EAAI,CAAC,CAAA,EAAG,GAAA,KAC1C,eAAA,CAAgB,IAAA,CAAK,OAAO,YAAA,CAAa,GAAG,CAAC,CAAA,GAAI,CAAA,GAAI;AACzD,CAAA;AAEO,IAAM,UAAN,MAAc;AAAA,EACjB,YAAY,GAAA,EAAK;AACb,IAAA,IAAA,CAAK,GAAA,GAAM,GAAA;AACX,IAAA,IAAA,CAAK,GAAA,GAAM,CAAA;AAAA,EACf;AAAA,EAEA,WAAW,GAAA,EAAK;AACZ,IAAA,OAAO,GAAA,GAAM,KAAK,GAAA,CAAI,MAAA,GAAS,KAAK,GAAA,CAAI,UAAA,CAAW,GAAG,CAAA,GAAI,CAAA;AAAA,EAC9D;AAAA,EACA,QAAA,GAAW;AACP,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,GAAG,CAAA;AAAA,EACnC;AAAA,EACA,cAAA,CAAe/B,KAAAA,GAAO,IAAA,CAAK,QAAA,EAAS,EAAG;AACnC,IAAA,OAAOA,KAAAA,GAAO,GAAA,IAAO,SAAA,CAAUA,KAAI,CAAA,KAAM,CAAA;AAAA,EAC7C;AAAA,EACA,YAAA,GAAe;AACX,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,GAAA,GAAM,CAAC,CAAA;AAAA,EACvC;AAAA,EACA,cAAc,GAAA,EAAK;AACf,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,SAAA,CAAU,GAAG,CAAC,CAAA;AAAA,EAC9C;AAAA,EACA,MAAA,GAAS;AACL,IAAA,IAAA,CAAK,GAAA,GAAM,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,GAAG,CAAA;AAAA,EACtC;AAAA,EACA,UAAU,GAAA,EAAK;AACX,IAAA,OAAO,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,MAAA,EAAQ,GAAA,EAAA,EAAO;AACjC,MAAA,MAAMA,KAAAA,GAAO,IAAA,CAAK,GAAA,CAAI,UAAA,CAAW,GAAG,CAAA;AACpC,MAAA,IAAIA,KAAAA,KAAS+B,MAAK/B,KAAAA,KAASmB,EAAAA,IAAKnB,UAAS8B,EAAAA,IAAK9B,KAAAA,KAAS,KAAA,IAASA,KAAAA,KAAS,GAAA,EAAK;AAC1E,QAAA;AAAA,MACJ;AAAA,IACJ;AAEA,IAAA,OAAO,GAAA;AAAA,EACX;AAAA,EACA,eAAe,GAAA,EAAK;AAChB,IAAA,OAAO,KAAK,GAAA,CAAI,SAAA,CAAU,KAAK,GAAA,EAAK,IAAA,CAAK,MAAM,GAAG,CAAA;AAAA,EACtD;AAAA,EACA,IAAIA,KAAAA,EAAM;AACN,IAAA,IAAI,IAAA,CAAK,QAAA,EAAS,KAAMA,KAAAA,EAAM;AAC1B,MAAA,IAAA,CAAK,MAAM,UAAA,GAAa,MAAA,CAAO,YAAA,CAAaA,KAAI,IAAI,GAAG,CAAA;AAAA,IAC3D;AAEA,IAAA,IAAA,CAAK,GAAA,EAAA;AAAA,EACT;AAAA,EACA,IAAA,GAAO;AACH,IAAA,OAAO,IAAA,CAAK,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,MAAA,GAAS,KAAK,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,GAAA,EAAK,CAAA,GAAI,EAAA;AAAA,EACtE;AAAA,EACA,MAAM,OAAA,EAAS;AACX,IAAA,MAAM,IAAIO,YAAAA,CAAY,OAAA,EAAS,IAAA,CAAK,GAAA,EAAK,KAAK,GAAG,CAAA;AAAA,EACrD;AAAA,EAEA,UAAA,GAAa;AACT,IAAA,OAAO,KAAK,cAAA,CAAe,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,EACvD;AAAA,EACA,QAAA,GAAW;AACP,IAAA,IAAI,MAAM,IAAA,CAAK,GAAA;AAEf,IAAA,OAAO,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,MAAA,EAAQ,GAAA,EAAA,EAAO;AACjC,MAAA,MAAMP,KAAAA,GAAO,IAAA,CAAK,GAAA,CAAI,UAAA,CAAW,GAAG,CAAA;AACpC,MAAA,IAAIA,KAAAA,IAAQ,GAAA,IAAO,SAAA,CAAUA,KAAI,MAAM,CAAA,EAAG;AACtC,QAAA;AAAA,MACJ;AAAA,IACJ;AAEA,IAAA,IAAI,IAAA,CAAK,QAAQ,GAAA,EAAK;AAClB,MAAA,IAAA,CAAK,MAAM,kBAAkB,CAAA;AAAA,IACjC;AAEA,IAAA,OAAO,IAAA,CAAK,eAAe,GAAG,CAAA;AAAA,EAClC;AAAA,EACA,UAAA,GAAa;AACT,IAAA,IAAI,MAAM,IAAA,CAAK,GAAA;AAEf,IAAA,OAAO,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,MAAA,EAAQ,GAAA,EAAA,EAAO;AACjC,MAAA,MAAMA,KAAAA,GAAO,IAAA,CAAK,GAAA,CAAI,UAAA,CAAW,GAAG,CAAA;AAEpC,MAAA,IAAIA,KAAAA,GAAO,EAAA,IAAMA,KAAAA,GAAO,EAAA,EAAI;AACxB,QAAA;AAAA,MACJ;AAAA,IACJ;AAEA,IAAA,IAAI,IAAA,CAAK,QAAQ,GAAA,EAAK;AAClB,MAAA,IAAA,CAAK,MAAM,iBAAiB,CAAA;AAAA,IAChC;AAEA,IAAA,OAAO,IAAA,CAAK,eAAe,GAAG,CAAA;AAAA,EAClC;AAAA,EACA,UAAA,GAAa;AACT,IAAA,MAAM,MAAM,IAAA,CAAK,GAAA,CAAI,QAAQ,GAAA,EAAM,IAAA,CAAK,MAAM,CAAC,CAAA;AAE/C,IAAA,IAAI,QAAQ,EAAA,EAAI;AACZ,MAAA,IAAA,CAAK,GAAA,GAAM,KAAK,GAAA,CAAI,MAAA;AACpB,MAAA,IAAA,CAAK,MAAM,sBAAsB,CAAA;AAAA,IACrC;AAEA,IAAA,OAAO,IAAA,CAAK,cAAA,CAAe,GAAA,GAAM,CAAC,CAAA;AAAA,EACtC;AACJ,CAAA;;;AC1GA,IAAMgC,IAAAA,GAAM,CAAA;AACZ,IAAMb,EAAAA,GAAI,EAAA;AACV,IAAMW,EAAAA,GAAI,EAAA;AACV,IAAMC,EAAAA,GAAI,EAAA;AACV,IAAME,MAAAA,GAAQ,EAAA;AACd,IAAMC,gBAAAA,GAAkB,EAAA;AACxB,IAAMC,WAAAA,GAAa,EAAA;AACnB,IAAM,SAAA,GAAY,EAAA;AAClB,IAAM,UAAA,GAAa,EAAA;AACnB,IAAM,eAAA,GAAkB,EAAA;AACxB,IAAM,gBAAA,GAAmB,EAAA;AACzB,IAAM,QAAA,GAAW,EAAA;AACjB,IAAMjB,SAAAA,GAAW,EAAA;AACjB,IAAM,KAAA,GAAQ,EAAA;AACd,IAAM,UAAA,GAAa,EAAA;AACnB,IAAM,YAAA,GAAe,EAAA;AACrB,IAAM,eAAA,GAAkB,EAAA;AACxB,IAAMkB,aAAAA,GAAe,EAAA;AACrB,IAAM,YAAA,GAAe,EAAA;AACrB,IAAM,iBAAA,GAAoB,EAAA;AAC1B,IAAM,kBAAA,GAAqB,EAAA;AAC3B,IAAMC,iBAAAA,GAAmB,GAAA;AACzB,IAAM,YAAA,GAAe,GAAA;AACrB,IAAM,iBAAA,GAAoB,GAAA;AAC1B,IAAM,QAAA,GAAW,IAAA;AACjB,IAAM,qBAAA,GAAwB;AAAA,EAC1B,GAAA,EAAK,CAAA;AAAA,EACL,IAAA,EAAM,CAAA;AAAA,EACN,IAAA,EAAM,CAAA;AAAA,EACN,GAAA,EAAK;AACT,CAAA;AAEA,SAAS,oBAAoB,OAAA,EAAS;AAClC,EAAA,IAAI,GAAA,GAAM,IAAA;AACV,EAAA,IAAI,GAAA,GAAM,IAAA;AAEV,EAAA,OAAA,CAAQ,IAAIA,iBAAgB,CAAA;AAC5B,EAAA,OAAA,CAAQ,MAAA,EAAO;AAEf,EAAA,GAAA,GAAM,OAAA,CAAQ,WAAW,OAAO,CAAA;AAChC,EAAA,OAAA,CAAQ,MAAA,EAAO;AAEf,EAAA,IAAI,OAAA,CAAQ,QAAA,EAAS,KAAM,KAAA,EAAO;AAC9B,IAAA,OAAA,CAAQ,GAAA,EAAA;AACR,IAAA,OAAA,CAAQ,MAAA,EAAO;AAEf,IAAA,IAAI,OAAA,CAAQ,QAAA,EAAS,KAAM,iBAAA,EAAmB;AAC1C,MAAA,GAAA,GAAM,OAAA,CAAQ,WAAW,OAAO,CAAA;AAChC,MAAA,OAAA,CAAQ,MAAA,EAAO;AAAA,IACnB;AAAA,EACJ,CAAA,MAAO;AACH,IAAA,GAAA,GAAM,GAAA;AAAA,EACV;AAEA,EAAA,OAAA,CAAQ,IAAI,iBAAiB,CAAA;AAE7B,EAAA,OAAO;AAAA,IACH,GAAA,EAAK,OAAO,GAAG,CAAA;AAAA,IACf,GAAA,EAAK,GAAA,GAAM,MAAA,CAAO,GAAG,CAAA,GAAI;AAAA,GAC7B;AACJ;AAEA,SAAS,eAAe,OAAA,EAAS;AAC7B,EAAA,IAAI,KAAA,GAAQ,IAAA;AACZ,EAAA,IAAI,KAAA,GAAQ,KAAA;AAEZ,EAAA,QAAQ,OAAA,CAAQ,UAAS;AAAG,IACxB,KAAK,QAAA;AACD,MAAA,OAAA,CAAQ,GAAA,EAAA;AAER,MAAA,KAAA,GAAQ;AAAA,QACJ,GAAA,EAAK,CAAA;AAAA,QACL,GAAA,EAAK;AAAA,OACT;AAEA,MAAA;AAAA,IAEJ,KAAKnB,SAAAA;AACD,MAAA,OAAA,CAAQ,GAAA,EAAA;AAER,MAAA,KAAA,GAAQ;AAAA,QACJ,GAAA,EAAK,CAAA;AAAA,QACL,GAAA,EAAK;AAAA,OACT;AAEA,MAAA;AAAA,IAEJ,KAAKkB,aAAAA;AACD,MAAA,OAAA,CAAQ,GAAA,EAAA;AAER,MAAA,KAAA,GAAQ;AAAA,QACJ,GAAA,EAAK,CAAA;AAAA,QACL,GAAA,EAAK;AAAA,OACT;AAEA,MAAA;AAAA,IAEJ,KAAKD,WAAAA;AACD,MAAA,OAAA,CAAQ,GAAA,EAAA;AAER,MAAA,KAAA,GAAQ,IAAA;AAER,MAAA,IAAI,OAAA,CAAQ,QAAA,EAAS,KAAME,iBAAAA,EAAkB;AACzC,QAAA,KAAA,GAAQ,oBAAoB,OAAO,CAAA;AAAA,MACvC,CAAA,MAAA,IAAW,OAAA,CAAQ,QAAA,EAAS,KAAMD,aAAAA,EAAc;AAK5C,QAAA,OAAA,CAAQ,GAAA,EAAA;AACR,QAAA,KAAA,GAAQ;AAAA,UACJ,GAAA,EAAK,CAAA;AAAA,UACL,GAAA,EAAK;AAAA,SACT;AAAA,MACJ,CAAA,MAAO;AACH,QAAA,KAAA,GAAQ;AAAA,UACJ,GAAA,EAAK,CAAA;AAAA,UACL,GAAA,EAAK;AAAA,SACT;AAAA,MACJ;AAEA,MAAA;AAAA,IAEJ,KAAKC,iBAAAA;AACD,MAAA,KAAA,GAAQ,oBAAoB,OAAO,CAAA;AACnC,MAAA;AAAA,IAEJ;AACI,MAAA,OAAO,IAAA;AAAA;AAGf,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,YAAA;AAAA,IACN,KAAA;AAAA,IACA,KAAK,KAAA,CAAM,GAAA;AAAA,IACX,KAAK,KAAA,CAAM,GAAA;AAAA,IACX,IAAA,EAAM;AAAA,GACV;AACJ;AAEA,SAAS,eAAA,CAAgB,SAAS,IAAA,EAAM;AACpC,EAAA,MAAM,UAAA,GAAa,eAAe,OAAO,CAAA;AAEzC,EAAA,IAAI,eAAe,IAAA,EAAM;AACrB,IAAA,UAAA,CAAW,IAAA,GAAO,IAAA;AAWlB,IAAA,IAAI,OAAA,CAAQ,QAAA,EAAS,KAAMF,WAAAA,IACvB,OAAA,CAAQ,WAAW,OAAA,CAAQ,GAAA,GAAM,CAAC,CAAA,KAAMjB,SAAAA,EAAU;AAClD,MAAA,OAAO,eAAA,CAAgB,SAAS,UAAU,CAAA;AAAA,IAC9C;AAOA,IAAA,IAAI,OAAA,CAAQ,QAAA,EAAS,KAAMkB,aAAAA,IACvB,OAAA,CAAQ,WAAW,OAAA,CAAQ,GAAA,GAAM,CAAC,CAAA,KAAM,iBAAA,EAAmB;AAC3D,MAAA,OAAO,eAAA,CAAgB,SAAS,UAAU,CAAA;AAAA,IAC9C;AAEA,IAAA,OAAO,UAAA;AAAA,EACX;AAEA,EAAA,OAAO,IAAA;AACX;AAEA,SAAS,WAAW,OAAA,EAAS;AACzB,EAAA,MAAM,EAAA,GAAK,QAAQ,IAAA,EAAK;AAExB,EAAA,IAAI,OAAO,EAAA,EAAI;AACX,IAAA,OAAO,IAAA;AAAA,EACX;AAEA,EAAA,OAAO,gBAAgB,OAAA,EAAS;AAAA,IAC5B,IAAA,EAAM,OAAA;AAAA,IACN,KAAA,EAAO;AAAA,GACV,CAAA;AACL;AAEA,SAAS,aAAa,OAAA,EAAS;AAC3B,EAAA,IAAIzC,MAAAA;AAEJ,EAAA,OAAA,CAAQ,IAAI,YAAY,CAAA;AACxB,EAAA,OAAA,CAAQ,IAAI,UAAU,CAAA;AAEtB,EAAAA,MAAAA,GAAO,QAAQ,QAAA,EAAS;AAExB,EAAA,OAAA,CAAQ,IAAI,UAAU,CAAA;AACtB,EAAA,OAAA,CAAQ,IAAI,eAAe,CAAA;AAE3B,EAAA,OAAO,gBAAgB,OAAA,EAAS;AAAA,IAC5B,IAAA,EAAM,UAAA;AAAA,IACN,IAAA,EAAAA;AAAA,GACH,CAAA;AACL;AASA,SAAS,cAAc,OAAA,EAAS;AAE5B,EAAA,IAAI,GAAA,GAAM,IAAA;AACV,EAAA,IAAI,GAAA,GAAM,IAAA;AACV,EAAA,IAAI,IAAA,GAAO,CAAA;AAEX,EAAA,OAAA,CAAQ,IAAI,iBAAiB,CAAA;AAE7B,EAAA,IAAI,OAAA,CAAQ,QAAA,EAAS,KAAM,UAAA,EAAY;AACnC,IAAA,OAAA,CAAQ,IAAA,EAAK;AACb,IAAA,IAAA,GAAO,EAAA;AAAA,EACX;AAEA,EAAA,IAAI,IAAA,IAAQ,EAAA,IAAM,OAAA,CAAQ,QAAA,OAAe,QAAA,EAAU;AAC/C,IAAA,OAAA,CAAQ,IAAA,EAAK;AAAA,EACjB,CAAA,MAAO;AACH,IAAA,GAAA,GAAM,IAAA,GAAO,MAAA,CAAO,OAAA,CAAQ,UAAA,CAAW,OAAO,CAAC,CAAA;AAE/C,IAAA,IAAI,OAAA,CAAQ,gBAAe,EAAG;AAC1B,MAAA,GAAA,IAAO,QAAQ,QAAA,EAAS;AAAA,IAC5B;AAAA,EACJ;AAEA,EAAA,OAAA,CAAQ,MAAA,EAAO;AACf,EAAA,OAAA,CAAQ,IAAI,KAAK,CAAA;AACjB,EAAA,OAAA,CAAQ,MAAA,EAAO;AAEf,EAAA,IAAI,OAAA,CAAQ,QAAA,EAAS,KAAM,QAAA,EAAU;AACjC,IAAA,OAAA,CAAQ,IAAA,EAAK;AAAA,EACjB,CAAA,MAAO;AACH,IAAA,IAAA,GAAO,CAAA;AAEP,IAAA,IAAI,OAAA,CAAQ,QAAA,EAAS,KAAM,UAAA,EAAY;AACnC,MAAA,OAAA,CAAQ,IAAA,EAAK;AACb,MAAA,IAAA,GAAO,EAAA;AAAA,IACX;AAEA,IAAA,GAAA,GAAM,IAAA,GAAO,MAAA,CAAO,OAAA,CAAQ,UAAA,CAAW,OAAO,CAAC,CAAA;AAE/C,IAAA,IAAI,OAAA,CAAQ,gBAAe,EAAG;AAC1B,MAAA,GAAA,IAAO,QAAQ,QAAA,EAAS;AAAA,IAC5B;AAAA,EACJ;AAEA,EAAA,OAAA,CAAQ,IAAI,kBAAkB,CAAA;AAE9B,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,OAAA;AAAA,IACN,GAAA;AAAA,IACA;AAAA,GACJ;AACJ;AAEA,SAAS,SAAS,OAAA,EAAS;AACvB,EAAA,IAAIA,MAAAA;AACJ,EAAA,IAAI,IAAA,GAAO,IAAA;AAEX,EAAA,OAAA,CAAQ,IAAI,YAAY,CAAA;AACxB,EAAAA,MAAAA,GAAO,QAAQ,QAAA,EAAS;AAGxB,EAAA,IAAIA,WAAS,cAAA,EAAgB;AACzB,IAAA,OAAA,CAAQ,IAAI,iBAAiB,CAAA;AAE7B,IAAA,MAAM,aAAA,GAAgB,iBAAA,CAAkB,OAAA,EAAS,kBAAkB,CAAA;AAEnE,IAAA,OAAA,CAAQ,IAAI,kBAAkB,CAAA;AAC9B,IAAA,OAAA,CAAQ,IAAI,eAAe,CAAA;AAE3B,IAAA,OAAO,gBAAgB,OAAA,EAAS;AAAA,MAC5B,IAAA,EAAM,SAAA;AAAA,MACN,IAAA,EAAM,cAAc,KAAA,CAAM,MAAA,KAAW,IAC/B,aAAA,CAAc,KAAA,CAAM,CAAC,CAAA,GACrB;AAAA,KACT,CAAA;AAAA,EACL;AAEA,EAAA,IAAI,QAAQ,QAAA,EAAS,KAAM,mBACvB,OAAA,CAAQ,YAAA,OAAmB,gBAAA,EAAkB;AAC7C,IAAA,OAAA,CAAQ,GAAA,IAAO,CAAA;AACf,IAAAA,MAAAA,IAAQ,IAAA;AAAA,EACZ;AAEA,EAAA,IAAI,OAAA,CAAQ,WAAW,OAAA,CAAQ,SAAA,CAAU,QAAQ,GAAG,CAAC,MAAM,iBAAA,EAAmB;AAC1E,IAAA,OAAA,CAAQ,MAAA,EAAO;AACf,IAAA,IAAA,GAAO,cAAc,OAAO,CAAA;AAAA,EAChC;AAEA,EAAA,OAAA,CAAQ,IAAI,eAAe,CAAA;AAE3B,EAAA,OAAO,gBAAgB,OAAA,EAAS;AAAA,IAC5B,IAAA,EAAM,MAAA;AAAA,IACN,IAAA,EAAAA,MAAAA;AAAA,IACA;AAAA,GACH,CAAA;AACL;AAEA,SAAS,sBAAsB,OAAA,EAAS;AACpC,EAAA,MAAMA,MAAAA,GAAO,QAAQ,QAAA,EAAS;AAE9B,EAAA,IAAI,OAAA,CAAQ,QAAA,EAAS,KAAM,eAAA,EAAiB;AACxC,IAAA,OAAA,CAAQ,GAAA,EAAA;AAER,IAAA,OAAO;AAAA,MACH,IAAA,EAAM,UAAA;AAAA,MACN,IAAA,EAAAA;AAAA,KACJ;AAAA,EACJ;AAEA,EAAA,OAAO,gBAAgB,OAAA,EAAS;AAAA,IAC5B,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAAA;AAAA,GACH,CAAA;AACL;AAEA,SAAS,YAAA,CAAa,OAAO,WAAA,EAAa;AACtC,EAAA,SAAS,WAAA,CAAY2C,QAAOC,WAAAA,EAAY;AACpC,IAAA,OAAO;AAAA,MACH,IAAA,EAAM,OAAA;AAAA,MACN,KAAA,EAAAD,MAAAA;AAAA,MACA,UAAA,EAAAC,WAAAA;AAAA,MACA,aAAA,EAAe,KAAA;AAAA,MACf,QAAA,EAAU;AAAA,KACd;AAAA,EACJ;AAEA,EAAA,IAAI,UAAA;AAEJ,EAAA,WAAA,GAAc,MAAA,CAAO,IAAA,CAAK,WAAW,CAAA,CAChC,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,qBAAA,CAAsB,CAAC,CAAA,GAAI,qBAAA,CAAsB,CAAC,CAAC,CAAA;AAEvE,EAAA,OAAO,WAAA,CAAY,SAAS,CAAA,EAAG;AAC3B,IAAA,UAAA,GAAa,YAAY,KAAA,EAAM;AAE/B,IAAA,IAAI,CAAA,GAAI,CAAA;AACR,IAAA,IAAI,aAAA,GAAgB,CAAA;AAEpB,IAAA,OAAO,CAAA,GAAI,KAAA,CAAM,MAAA,EAAQ,CAAA,EAAA,EAAK;AAC1B,MAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AAEpB,MAAA,IAAI,IAAA,CAAK,SAAS,YAAA,EAAc;AAC5B,QAAA,IAAI,IAAA,CAAK,UAAU,UAAA,EAAY;AAC3B,UAAA,IAAI,kBAAkB,EAAA,EAAI;AACtB,YAAA,aAAA,GAAgB,CAAA,GAAI,CAAA;AAAA,UACxB;AACA,UAAA,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAA;AACjB,UAAA,CAAA,EAAA;AAAA,QACJ,CAAA,MAAO;AACH,UAAA,IAAI,aAAA,KAAkB,EAAA,IAAM,CAAA,GAAI,aAAA,GAAgB,CAAA,EAAG;AAC/C,YAAA,KAAA,CAAM,MAAA;AAAA,cACF,aAAA;AAAA,cACA,CAAA,GAAI,aAAA;AAAA,cACJ,YAAY,KAAA,CAAM,KAAA,CAAM,aAAA,EAAe,CAAC,GAAG,UAAU;AAAA,aACzD;AACA,YAAA,CAAA,GAAI,aAAA,GAAgB,CAAA;AAAA,UACxB;AACA,UAAA,aAAA,GAAgB,EAAA;AAAA,QACpB;AAAA,MACJ;AAAA,IACJ;AAEA,IAAA,IAAI,aAAA,KAAkB,EAAA,IAAM,WAAA,CAAY,MAAA,EAAQ;AAC5C,MAAA,KAAA,CAAM,MAAA;AAAA,QACF,aAAA;AAAA,QACA,CAAA,GAAI,aAAA;AAAA,QACJ,YAAY,KAAA,CAAM,KAAA,CAAM,aAAA,EAAe,CAAC,GAAG,UAAU;AAAA,OACzD;AAAA,IACJ;AAAA,EACJ;AAEA,EAAA,OAAO,UAAA;AACX;AAEA,SAAS,iBAAA,CAAkB,OAAA,EAAS,YAAA,GAAe,EAAA,EAAI;AACnD,EAAA,MAAM,WAAA,mBAAc,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA;AACtC,EAAA,MAAM,QAAQ,EAAC;AACf,EAAA,IAAI,SAAA,GAAY,IAAA;AAChB,EAAA,IAAI,eAAe,OAAA,CAAQ,GAAA;AAC3B,EAAA,IAAI,mBAAA,GAAsB,KAAA;AAE1B,EAAA,OAAO,OAAA,CAAQ,QAAA,EAAS,KAAM,YAAA,EAAc;AACxC,IAAA,IAAI,QAAQ,mBAAA,GACN,iBAAA,CAAkB,SAAS,gBAAgB,CAAA,GAC3C,KAAK,OAAO,CAAA;AAElB,IAAA,IAAI,CAAC,KAAA,EAAO;AACR,MAAA;AAAA,IACJ;AAEA,IAAA,IAAI,KAAA,CAAM,SAAS,QAAA,EAAU;AACzB,MAAA;AAAA,IACJ;AAEA,IAAA,IAAI,mBAAA,EAAqB;AACrB,MAAA,IAAI,KAAA,CAAM,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG;AAC1B,QAAA,mBAAA,GAAsB,KAAA;AACtB,QAAA;AAAA,MACJ;AAEA,MAAA,IAAI,KAAA,CAAM,eAAe,GAAA,EAAK;AAC1B,QAAA,OAAO,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG;AAC3B,UAAA,WAAA,CAAY,GAAG,CAAA,GAAI,IAAA;AACnB,UAAA,KAAA,CAAM,IAAA,CAAK;AAAA,YACP,IAAA,EAAM,YAAA;AAAA,YACN,KAAA,EAAO;AAAA,WACX,EAAG,KAAA,CAAM,KAAA,CAAM,KAAA,EAAO,CAAA;AAAA,QAC1B;AAEA,QAAA,KAAA,GAAQ,KAAA,CAAM,MAAM,CAAC,CAAA;AAAA,MACzB;AAAA,IACJ;AAEA,IAAA,IAAI,KAAA,CAAM,SAAS,YAAA,EAAc;AAE7B,MAAA,IAAI,SAAA,KAAc,IAAA,IAAQ,SAAA,CAAU,IAAA,KAAS,YAAA,EAAc;AACvD,QAAA,OAAA,CAAQ,GAAA,GAAM,YAAA;AACd,QAAA,OAAA,CAAQ,MAAM,uBAAuB,CAAA;AAAA,MACzC;AAEA,MAAA,WAAA,CAAY,KAAA,CAAM,KAAK,CAAA,GAAI,IAAA;AAAA,IAC/B,CAAA,MAAA,IAAW,SAAA,KAAc,IAAA,IAAQ,SAAA,CAAU,SAAS,YAAA,EAAc;AAC9D,MAAA,WAAA,CAAY,GAAG,CAAA,GAAI,IAAA;AACnB,MAAA,KAAA,CAAM,IAAA,CAAK;AAAA,QACP,IAAA,EAAM,YAAA;AAAA,QACN,KAAA,EAAO;AAAA,OACV,CAAA;AAAA,IACL;AAEA,IAAA,KAAA,CAAM,KAAK,KAAK,CAAA;AAChB,IAAA,SAAA,GAAY,KAAA;AACZ,IAAA,YAAA,GAAe,OAAA,CAAQ,GAAA;AACvB,IAAA,mBAAA,GAAsB,MAAM,IAAA,KAAS,UAAA;AAAA,EACzC;AAGA,EAAA,IAAI,SAAA,KAAc,IAAA,IAAQ,SAAA,CAAU,IAAA,KAAS,YAAA,EAAc;AACvD,IAAA,OAAA,CAAQ,GAAA,IAAO,YAAA;AACf,IAAA,OAAA,CAAQ,MAAM,uBAAuB,CAAA;AAAA,EACzC;AAEA,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,OAAA;AAAA,IACN,KAAA;AAAA,IACA,UAAA,EAAY,YAAA,CAAa,KAAA,EAAO,WAAW,CAAA,IAAK,GAAA;AAAA,IAChD,aAAA,EAAe,KAAA;AAAA,IACf,QAAA,EAAU;AAAA,GACd;AACJ;AAEA,SAAS,UAAU,OAAA,EAAS;AACxB,EAAA,IAAI,MAAA;AAEJ,EAAA,OAAA,CAAQ,IAAI,iBAAiB,CAAA;AAC7B,EAAA,MAAA,GAAS,iBAAA,CAAkB,SAAS,kBAAkB,CAAA;AACtD,EAAA,OAAA,CAAQ,IAAI,kBAAkB,CAAA;AAE9B,EAAA,MAAA,CAAO,QAAA,GAAW,IAAA;AAElB,EAAA,IAAI,OAAA,CAAQ,QAAA,EAAS,KAAML,gBAAAA,EAAiB;AACxC,IAAA,OAAA,CAAQ,GAAA,EAAA;AACR,IAAA,MAAA,CAAO,aAAA,GAAgB,IAAA;AAAA,EAC3B;AAEA,EAAA,OAAO,MAAA;AACX;AAEA,SAAS,KAAK,OAAA,EAAS;AACnB,EAAA,IAAIlC,KAAAA,GAAO,QAAQ,QAAA,EAAS;AAE5B,EAAA,QAAQA,KAAAA;AAAM,IACV,KAAK,kBAAA;AAED,MAAA;AAAA,IAEJ,KAAK,iBAAA;AACD,MAAA,OAAO,eAAA,CAAgB,OAAA,EAAS,SAAA,CAAU,OAAO,CAAC,CAAA;AAAA,IAEtD,KAAK,YAAA;AACD,MAAA,OAAO,OAAA,CAAQ,cAAa,KAAM,UAAA,GAC5B,aAAa,OAAO,CAAA,GACpB,SAAS,OAAO,CAAA;AAAA,IAE1B,KAAK,YAAA;AACD,MAAA,OAAO;AAAA,QACH,IAAA,EAAM,YAAA;AAAA,QACN,OAAO,OAAA,CAAQ,cAAA;AAAA,UACX,QAAQ,GAAA,IAAO,OAAA,CAAQ,YAAA,EAAa,KAAM,eAAe,CAAA,GAAI,CAAA;AAAA;AACjE,OACJ;AAAA,IAEJ,KAAK,SAAA;AACD,MAAA,OAAA,CAAQ,GAAA,EAAA;AACR,MAAA,OAAA,CAAQ,IAAI,SAAS,CAAA;AAErB,MAAA,OAAO;AAAA,QACH,IAAA,EAAM,YAAA;AAAA,QACN,KAAA,EAAO;AAAA,OACX;AAAA,IAEJ,KAAK,KAAA;AACD,MAAA,OAAA,CAAQ,GAAA,EAAA;AACR,MAAA,OAAO;AAAA,QACH,IAAA,EAAM;AAAA,OACV;AAAA,IAEJ,KAAK,UAAA;AACD,MAAA,OAAO,gBAAgB,OAAA,EAAS;AAAA,QAC5B,IAAA,EAAM,QAAA;AAAA,QACN,KAAA,EAAO,QAAQ,UAAA;AAAW,OAC7B,CAAA;AAAA,IAEL,KAAKiC,MAAAA;AAAA,IACL,KAAKD,IAAAA;AAAA,IACL,KAAKb,EAAAA;AAAA,IACL,KAAKY,EAAAA;AAAA,IACL,KAAKD,EAAAA;AACD,MAAA,OAAO;AAAA,QACH,IAAA,EAAM,QAAA;AAAA,QACN,KAAA,EAAO,QAAQ,UAAA;AAAW,OAC9B;AAAA,IAEJ,KAAK,YAAA;AACD,MAAA9B,KAAAA,GAAO,QAAQ,YAAA,EAAa;AAE5B,MAAA,IAAI,OAAA,CAAQ,cAAA,CAAeA,KAAI,CAAA,EAAG;AAC9B,QAAA,OAAA,CAAQ,GAAA,EAAA;AACR,QAAA,OAAO;AAAA,UACH,IAAA,EAAM,WAAA;AAAA,UACN,IAAA,EAAM,QAAQ,QAAA;AAAS,SAC3B;AAAA,MACJ;AAEA,MAAA,OAAO,WAAW,OAAO,CAAA;AAAA,IAE7B,KAAK,QAAA;AAAA,IACL,KAAKkB,SAAAA;AAAA,IACL,KAAKkB,aAAAA;AAAA,IACL,KAAKD,WAAAA;AAAA,IACL,KAAKD,gBAAAA;AAED,MAAA;AAAA,IAEJ,KAAKG,iBAAAA;AAGD,MAAArC,KAAAA,GAAO,QAAQ,YAAA,EAAa;AAE5B,MAAA,IAAIA,KAAAA,GAAO,EAAA,IAAMA,KAAAA,GAAO,EAAA,EAAI;AACxB,QAAA,OAAO,WAAW,OAAO,CAAA;AAAA,MAC7B;AAEA,MAAA;AAAA,IAEJ;AACI,MAAA,IAAI,OAAA,CAAQ,cAAA,CAAeA,KAAI,CAAA,EAAG;AAC9B,QAAA,OAAO,sBAAsB,OAAO,CAAA;AAAA,MACxC;AAEA,MAAA,OAAO,WAAW,OAAO,CAAA;AAAA;AAErC;AAEO,SAAS,MAAM,MAAA,EAAQ;AAC1B,EAAA,MAAM,OAAA,GAAU,IAAI,OAAA,CAAQ,MAAM,CAAA;AAClC,EAAA,MAAM,MAAA,GAAS,kBAAkB,OAAO,CAAA;AAExC,EAAA,IAAI,OAAA,CAAQ,GAAA,KAAQ,MAAA,CAAO,MAAA,EAAQ;AAC/B,IAAA,OAAA,CAAQ,MAAM,kBAAkB,CAAA;AAAA,EACpC;AAGA,EAAA,IAAI,MAAA,CAAO,MAAM,MAAA,KAAW,CAAA,IAAK,OAAO,KAAA,CAAM,CAAC,CAAA,CAAE,IAAA,KAAS,OAAA,EAAS;AAC/D,IAAA,OAAO,MAAA,CAAO,MAAM,CAAC,CAAA;AAAA,EACzB;AAEA,EAAA,OAAO,MAAA;AACX;;;AC/kBA,IAAMa,QAAO,WAAW;AAAC,CAAA;AAEzB,SAAS2B,gBAAe,KAAA,EAAO;AAC3B,EAAA,OAAO,OAAO,KAAA,KAAU,UAAA,GAAa,KAAA,GAAQ3B,KAAAA;AACjD;AAEO,SAAS,IAAA,CAAK,IAAA,EAAM,OAAA,EAAS,OAAA,EAAS;AACzC,EAAA,SAASH,MAAKD,KAAAA,EAAM;AAChB,IAAA,KAAA,CAAM,IAAA,CAAK,SAASA,KAAI,CAAA;AAExB,IAAA,QAAQA,MAAK,IAAA;AAAM,MACf,KAAK,OAAA;AACD,QAAAA,KAAAA,CAAK,KAAA,CAAM,OAAA,CAAQC,KAAI,CAAA;AACvB,QAAA;AAAA,MAEJ,KAAK,YAAA;AAAA,MACL,KAAK,SAAA;AACD,QAAAA,KAAAA,CAAKD,MAAK,IAAI,CAAA;AACd,QAAA;AAAA,MAEJ,KAAK,MAAA;AAAA,MACL,KAAK,UAAA;AAAA,MACL,KAAK,SAAA;AAAA,MACL,KAAK,WAAA;AAAA,MACL,KAAK,UAAA;AAAA,MACL,KAAK,QAAA;AAAA,MACL,KAAK,OAAA;AAAA,MACL,KAAK,OAAA;AACD,QAAA;AAAA,MAEJ;AACI,QAAA,MAAM,IAAI,KAAA,CAAM,gBAAA,GAAmBA,KAAAA,CAAK,IAAI,CAAA;AAAA;AAGpD,IAAA,KAAA,CAAM,IAAA,CAAK,SAASA,KAAI,CAAA;AAAA,EAC5B;AAEA,EAAA,IAAI,KAAA,GAAQI,KAAAA;AACZ,EAAA,IAAI,KAAA,GAAQA,KAAAA;AAEZ,EAAA,IAAI,OAAO,YAAY,UAAA,EAAY;AAC/B,IAAA,KAAA,GAAQ,OAAA;AAAA,EACZ,WAAW,OAAA,EAAS;AAChB,IAAA,KAAA,GAAQ2B,eAAAA,CAAe,QAAQ,KAAK,CAAA;AACpC,IAAA,KAAA,GAAQA,eAAAA,CAAe,QAAQ,KAAK,CAAA;AAAA,EACxC;AAEA,EAAA,IAAI,KAAA,KAAU3B,KAAAA,IAAQ,KAAA,KAAUA,KAAAA,EAAM;AAClC,IAAA,MAAM,IAAI,MAAM,6EAA8E,CAAA;AAAA,EAClG;AAEA,EAAAH,KAAAA,CAAK,IAAa,CAAA;AACtB;;;AClDA,IAAM,WAAA,GAAc;AAAA,EAChB,UAAU,QAAA,EAAU;AAChB,IAAA,MAAM,SAAS,EAAC;AAChB,IAAA,IAAI,OAAA,GAAU,IAAA;AAEd,IAAA,OAAO;AAAA,MACH,GAAG,QAAA;AAAA,MACH,KAAK,IAAA,EAAM;AACP,QAAA,MAAM,GAAA,GAAM,OAAA;AACZ,QAAA,OAAA,GAAU,IAAA;AACV,QAAA,QAAA,CAAS,IAAA,CAAK,IAAA,CAAK,IAAA,EAAM,IAAI,CAAA;AAC7B,QAAA,OAAA,GAAU,GAAA;AAAA,MACd,CAAA;AAAA,MACA,IAAA,CAAK,KAAA,EAAO,IAAA,EAAM,IAAA,EAAM;AACpB,QAAA,MAAA,CAAO,IAAA,CAAK;AAAA,UACR,IAAA;AAAA,UACA,KAAA;AAAA,UACA,IAAA,EAAM,OAAO,IAAA,GAAO;AAAA,SACvB,CAAA;AAAA,MACL,CAAA;AAAA,MACA,MAAA,GAAS;AACL,QAAA,OAAO,MAAA;AAAA,MACX;AAAA,KACJ;AAAA,EACJ;AACJ,CAAA;AAEA,SAAS,eAAe,GAAA,EAAK;AACzB,EAAA,MAAM,SAAS,EAAC;AAEhB,EAAA,QAAA;AAAA,IAAS,GAAA;AAAA,IAAK,CAAC,IAAA,EAAM,KAAA,EAAO,GAAA,KACxB,OAAO,IAAA,CAAK;AAAA,MACR,IAAA;AAAA,MACA,KAAA,EAAO,GAAA,CAAI,KAAA,CAAM,KAAA,EAAO,GAAG,CAAA;AAAA,MAC3B,IAAA,EAAM;AAAA,KACT;AAAA,GACL;AAEA,EAAA,OAAO,MAAA;AACX;AAEe,SAAR,sBAAA,CAAiB,OAAO,MAAA,EAAQ;AACnC,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC3B,IAAA,OAAO,eAAe,KAAK,CAAA;AAAA,EAC/B;AAEA,EAAA,OAAO,MAAA,CAAO,QAAA,CAAS,KAAA,EAAO,WAAW,CAAA;AAC7C;;;AC/CO,IAAM,KAAA,GAAQ,EAAE,IAAA,EAAM,OAAA,EAAQ;AAC9B,IAAM,QAAA,GAAW,EAAE,IAAA,EAAM,UAAA,EAAW;AACpC,IAAM,cAAA,GAAiB,EAAE,IAAA,EAAM,eAAA,EAAgB;AAEtD,IAAM+B,gBAAAA,GAAkB,EAAA;AACxB,IAAMC,iBAAAA,GAAmB,EAAA;AAEzB,SAAS,eAAA,CAAgB,KAAA,EAAO,UAAA,EAAY,UAAA,EAAY;AAEpD,EAAA,IAAI,UAAA,KAAe,KAAA,IAAS,UAAA,KAAe,QAAA,EAAU;AACjD,IAAA,OAAO,KAAA;AAAA,EACX;AAEA,EAAA,IAAI,KAAA,KAAU,KAAA,IAAS,UAAA,KAAe,KAAA,IAAS,eAAe,KAAA,EAAO;AACjE,IAAA,OAAO,KAAA;AAAA,EACX;AAEA,EAAA,IAAI,MAAM,IAAA,KAAS,IAAA,IAAQ,MAAM,IAAA,KAAS,QAAA,IAAY,eAAe,KAAA,EAAO;AACxE,IAAA,UAAA,GAAa,KAAA,CAAM,IAAA;AACnB,IAAA,KAAA,GAAQ,KAAA,CAAM,KAAA;AAAA,EAClB;AAEA,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,IAAA;AAAA,IACN,KAAA;AAAA,IACA,IAAA,EAAM,UAAA;AAAA,IACN,IAAA,EAAM;AAAA,GACV;AACJ;AAEA,SAAS,eAAe/C,MAAAA,EAAM;AAC1B,EAAA,OACIA,MAAAA,CAAK,MAAA,GAAS,CAAA,IACdA,MAAAA,CAAK,WAAWA,MAAAA,CAAK,MAAA,GAAS,CAAC,CAAA,KAAM8C,oBACrC9C,MAAAA,CAAK,UAAA,CAAWA,MAAAA,CAAK,MAAA,GAAS,CAAC,CAAA,KAAM+C,iBAAAA;AAE7C;AAEA,SAAS,gBAAgB,IAAA,EAAM;AAC3B,EAAA,OACI,IAAA,CAAK,IAAA,KAAS,SAAA,IACd,IAAA,CAAK,SAAS,WAAA,IACd,IAAA,CAAK,IAAA,KAAS,UAAA,IACd,IAAA,CAAK,IAAA,KAAS,MAAA,IAAU,cAAA,CAAe,KAAK,IAAI,CAAA;AAExD;AAEA,SAAS,SAAA,CAAU,KAAA,EAAO,UAAA,GAAa,GAAA,EAAK,WAAW,KAAA,EAAO;AAC1D,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,OAAA;AAAA,IACN,KAAA;AAAA,IACA,UAAA;AAAA,IACA,aAAA,EAAe,KAAA;AAAA,IACf;AAAA,GACJ;AACJ;AAEA,SAAS,mBAAmB,IAAA,EAAM,YAAA,EAAc,OAAA,mBAAU,IAAI,KAAI,EAAG;AACjE,EAAA,IAAI,CAAC,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA,EAAG;AACpB,IAAA,OAAA,CAAQ,IAAI,IAAI,CAAA;AAEhB,IAAA,QAAQ,KAAK,IAAA;AAAM,MACf,KAAK,IAAA;AACD,QAAA,IAAA,CAAK,KAAA,GAAQ,kBAAA,CAAmB,IAAA,CAAK,KAAA,EAAO,cAAc,OAAO,CAAA;AACjE,QAAA,IAAA,CAAK,IAAA,GAAO,kBAAA,CAAmB,IAAA,CAAK,IAAA,EAAM,cAAc,OAAO,CAAA;AAC/D,QAAA,IAAA,CAAK,IAAA,GAAO,kBAAA,CAAmB,IAAA,CAAK,IAAA,EAAM,cAAc,OAAO,CAAA;AAC/D,QAAA;AAAA,MAEJ,KAAK,MAAA;AACD,QAAA,OAAO,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA,IAAK,IAAA;AAAA;AAC1C,EACJ;AAEA,EAAA,OAAO,IAAA;AACX;AAEA,SAAS,oBAAA,CAAqB,UAAA,EAAY,KAAA,EAAO,qBAAA,EAAuB;AACpE,EAAA,QAAQ,UAAA;AAAY,IAChB,KAAK,GAAA,EAAK;AAYN,MAAA,IAAI,MAAA,GAAS,KAAA;AAEb,MAAA,KAAA,IAAS,IAAI,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AACxC,QAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AAEpB,QAAA,MAAA,GAAS,eAAA;AAAA,UACL,IAAA;AAAA,UACA,MAAA;AAAA,UACA;AAAA,SACJ;AAAA,MACJ;AAEA,MAAA,OAAO,MAAA;AAAA,IACX;AAAA,IAEA,KAAK,GAAA,EAAK;AAaN,MAAA,IAAI,MAAA,GAAS,QAAA;AACb,MAAA,IAAI,GAAA,GAAM,IAAA;AAEV,MAAA,KAAA,IAAS,IAAI,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AACxC,QAAA,IAAI,IAAA,GAAO,MAAM,CAAC,CAAA;AAGlB,QAAA,IAAI,eAAA,CAAgB,IAAI,CAAA,EAAG;AACvB,UAAA,IAAI,GAAA,KAAQ,QAAQ,CAAA,GAAI,CAAA,IAAK,gBAAgB,KAAA,CAAM,CAAA,GAAI,CAAC,CAAC,CAAA,EAAG;AACxD,YAAA,GAAA,mBAAM,MAAA,CAAO,OAAO,IAAI,CAAA;AACxB,YAAA,MAAA,GAAS,eAAA;AAAA,cACL;AAAA,gBACI,IAAA,EAAM,MAAA;AAAA,gBACN;AAAA,eACJ;AAAA,cACA,KAAA;AAAA,cACA;AAAA,aACJ;AAAA,UACJ;AAEA,UAAA,IAAI,QAAQ,IAAA,EAAM;AACd,YAAA,MAAM,GAAA,GAAA,CAAO,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA,GAAI,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,GAAI,IAAA,CAAK,MAAM,WAAA,EAAY;AACzF,YAAA,IAAI,GAAA,IAAO,QAAQ,KAAA,EAAO;AACtB,cAAA,GAAA,CAAI,GAAG,CAAA,GAAI,IAAA;AACX,cAAA;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAEA,QAAA,GAAA,GAAM,IAAA;AAGN,QAAA,MAAA,GAAS,eAAA;AAAA,UACL,IAAA;AAAA,UACA,KAAA;AAAA,UACA;AAAA,SACJ;AAAA,MACJ;AAEA,MAAA,OAAO,MAAA;AAAA,IACX;AAAA,IAEA,KAAK,IAAA,EAAM;AAMP,MAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AAClB,QAAA,OAAO;AAAA,UACH,IAAA,EAAM,WAAA;AAAA,UACN,KAAA;AAAA,UACA,GAAA,EAAK;AAAA,SACT;AAAA,MACJ;AAyBA,MAAA,IAAI,MAAA,GAAS,QAAA;AAEb,MAAA,KAAA,IAAS,IAAI,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AACxC,QAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AACpB,QAAA,IAAI,UAAA;AAEJ,QAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AAClB,UAAA,UAAA,GAAa,oBAAA;AAAA,YACT,UAAA;AAAA,YACA,KAAA,CAAM,MAAA,CAAO,SAAS,YAAA,EAAc;AAChC,cAAA,OAAO,YAAA,KAAiB,IAAA;AAAA,YAC5B,CAAC,CAAA;AAAA,YACD;AAAA,WACJ;AAAA,QACJ,CAAA,MAAO;AACH,UAAA,UAAA,GAAa,KAAA;AAAA,QACjB;AAEA,QAAA,MAAA,GAAS,eAAA;AAAA,UACL,IAAA;AAAA,UACA,UAAA;AAAA,UACA;AAAA,SACJ;AAAA,MACJ;AAEA,MAAA,OAAO,MAAA;AAAA,IACX;AAAA,IAEA,KAAK,IAAA,EAAM;AAMP,MAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AAClB,QAAA,OAAO;AAAA,UACH,IAAA,EAAM,WAAA;AAAA,UACN,KAAA;AAAA,UACA,GAAA,EAAK;AAAA,SACT;AAAA,MACJ;AAyBA,MAAA,IAAI,MAAA,GAAS,wBAAwB,KAAA,GAAQ,QAAA;AAE7C,MAAA,KAAA,IAAS,IAAI,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AACxC,QAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AACpB,QAAA,IAAI,UAAA;AAEJ,QAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AAClB,UAAA,UAAA,GAAa,oBAAA;AAAA,YACT,UAAA;AAAA,YACA,KAAA,CAAM,MAAA,CAAO,SAAS,YAAA,EAAc;AAChC,cAAA,OAAO,YAAA,KAAiB,IAAA;AAAA,YAC5B,CAAC,CAAA;AAAA,YACD;AAAA,WACJ;AAAA,QACJ,CAAA,MAAO;AACH,UAAA,UAAA,GAAa,KAAA;AAAA,QACjB;AAEA,QAAA,MAAA,GAAS,eAAA;AAAA,UACL,IAAA;AAAA,UACA,UAAA;AAAA,UACA;AAAA,SACJ;AAAA,MACJ;AAEA,MAAA,OAAO,MAAA;AAAA,IACX;AAAA;AAER;AAEA,SAAS,0BAA0B,IAAA,EAAM;AACrC,EAAA,IAAI,MAAA,GAAS,KAAA;AACb,EAAA,IAAI,SAAA,GAAY,uBAAA,CAAwB,IAAA,CAAK,IAAI,CAAA;AAEjD,EAAA,IAAI,IAAA,CAAK,QAAQ,CAAA,EAAG;AAEhB,IAAA,SAAA,GAAY,eAAA;AAAA,MACR,SAAA;AAAA,MACA,cAAA;AAAA,MACA;AAAA,KACJ;AAIA,IAAA,MAAA,GAAS,eAAA;AAAA,MACL,SAAA;AAAA,MACA,IAAA;AAAA;AAAA,MACA;AAAA,KACJ;AAEA,IAAA,MAAA,CAAO,IAAA,GAAO,eAAA;AAAA,MACV,KAAA;AAAA,MACA,KAAA;AAAA,MACA;AAAA;AAAA,KACJ;AAEA,IAAA,IAAI,KAAK,KAAA,EAAO;AACZ,MAAA,MAAA,CAAO,KAAK,IAAA,GAAO,eAAA;AAAA,QACf,EAAE,IAAA,EAAM,OAAA,EAAS,MAAA,EAAQ,IAAA,EAAK;AAAA,QAC9B,MAAA;AAAA,QACA;AAAA,OACJ;AAAA,IACJ;AAAA,EACJ,CAAA,MAAO;AAEH,IAAA,KAAA,IAAS,IAAI,IAAA,CAAK,GAAA,IAAO,GAAG,CAAA,IAAK,IAAA,CAAK,KAAK,CAAA,EAAA,EAAK;AAC5C,MAAA,IAAI,IAAA,CAAK,KAAA,IAAS,MAAA,KAAW,KAAA,EAAO;AAChC,QAAA,MAAA,GAAS,eAAA;AAAA,UACL,EAAE,IAAA,EAAM,OAAA,EAAS,MAAA,EAAQ,IAAA,EAAK;AAAA,UAC9B,MAAA;AAAA,UACA;AAAA,SACJ;AAAA,MACJ;AAEA,MAAA,MAAA,GAAS,eAAA;AAAA,QACL,SAAA;AAAA,QACA,eAAA;AAAA,UACI,KAAA;AAAA,UACA,KAAA;AAAA,UACA;AAAA,SACJ;AAAA,QACA;AAAA,OACJ;AAAA,IACJ;AAAA,EACJ;AAEA,EAAA,IAAI,IAAA,CAAK,QAAQ,CAAA,EAAG;AAEhB,IAAA,MAAA,GAAS,eAAA;AAAA,MACL,KAAA;AAAA,MACA,KAAA;AAAA,MACA;AAAA,KACJ;AAAA,EACJ,CAAA,MAAO;AAEH,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,GAAA,GAAM,GAAG,CAAA,EAAA,EAAK;AACnC,MAAA,IAAI,IAAA,CAAK,KAAA,IAAS,MAAA,KAAW,KAAA,EAAO;AAChC,QAAA,MAAA,GAAS,eAAA;AAAA,UACL,EAAE,IAAA,EAAM,OAAA,EAAS,MAAA,EAAQ,IAAA,EAAK;AAAA,UAC9B,MAAA;AAAA,UACA;AAAA,SACJ;AAAA,MACJ;AAEA,MAAA,MAAA,GAAS,eAAA;AAAA,QACL,SAAA;AAAA,QACA,MAAA;AAAA,QACA;AAAA,OACJ;AAAA,IACJ;AAAA,EACJ;AAEA,EAAA,OAAO,MAAA;AACX;AAEA,SAAS,wBAAwB,IAAA,EAAM;AACnC,EAAA,IAAI,OAAO,SAAS,UAAA,EAAY;AAC5B,IAAA,OAAO;AAAA,MACH,IAAA,EAAM,SAAA;AAAA,MACN,EAAA,EAAI;AAAA,KACR;AAAA,EACJ;AAEA,EAAA,QAAQ,KAAK,IAAA;AAAM,IACf,KAAK,OAAA,EAAS;AACV,MAAA,IAAI,MAAA,GAAS,oBAAA;AAAA,QACT,IAAA,CAAK,UAAA;AAAA,QACL,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,uBAAuB,CAAA;AAAA,QACtC;AAAA,OACJ;AAEA,MAAA,IAAI,KAAK,aAAA,EAAe;AACpB,QAAA,MAAA,GAAS,eAAA;AAAA,UACL,MAAA;AAAA,UACA,cAAA;AAAA,UACA;AAAA,SACJ;AAAA,MACJ;AAEA,MAAA,OAAO,MAAA;AAAA,IACX;AAAA,IAEA,KAAK,YAAA;AACD,MAAA,OAAO,0BAA0B,IAAI,CAAA;AAAA;AAAA,IAGzC,KAAK,SAAA,EAAW;AACZ,MAAA,MAAM,IAAA,GAAO,uBAAA,CAAwB,IAAA,CAAK,IAAI,CAAA;AAE9C,MAAA,MAAM,SAAA,GAAY,wBAAwB,SAAA,CAAU;AAAA,QAChD,SAAA,CAAU;AAAA,UACN,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,KAAA,EAAM;AAAA,UAC/B,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,gBAAA;AAAiB,SAC1C,CAAA;AAAA,QACD,SAAA,CAAU;AAAA,UACN,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,gBAAA,EAAiB;AAAA,UACvC,SAAA,CAAU;AAAA,YACN,EAAE,IAAA,EAAM,YAAA,EAAc,KAAA,EAAO,KAAA,EAAO,KAAK,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,IAAA,EAAM,SAAA,CAAU;AAAA,cAChE,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,KAAA,EAAM;AAAA,cAC/B,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,gBAAA;AAAiB,aAC1C,CAAA,EAAE;AAAA,YACH,EAAE,IAAA,EAAM,YAAA,EAAc,KAAA,EAAO,KAAA,EAAO,KAAK,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,IAAA,EAAM,SAAA,CAAU;AAAA,cAChE,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,IAAA,EAAK;AAAA,cAC9B,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,gBAAA;AAAiB,aAC1C,CAAA;AAAE,aACJ,GAAG;AAAA,SACT;AAAA,OACL,EAAG,GAAG,CAAC,CAAA;AAEP,MAAA,MAAM,YAAA,GAAe,uBAAA;AAAA,QACjB,SAAA,CAAU;AAAA,UACN,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,OAAA,EAAQ;AAAA,UAC9B,SAAA,CAAU;AAAA,YACN,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,GAAA,EAAI;AAAA,YAC5B,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,OAAA,EAAQ;AAAA,YAC9B,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,GAAA;AAAI,WAC/B,CAAA;AAAA,UACD,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,kBAAA;AAAmB,WAC1C,GAAG;AAAA,OACV;AAEA,MAAA,kBAAA,CAAmB,cAAc,EAAE,OAAA,EAAS,IAAA,EAAM,OAAA,EAAS,WAAW,CAAA;AACtE,MAAA,kBAAA,CAAmB,SAAA,EAAW,EAAE,gBAAA,EAAkB,YAAA,EAAc,CAAA;AAEhE,MAAA,OAAO,SAAA;AAAA,IACX;AAAA,IAEA,KAAK,MAAA;AAAA,IACL,KAAK,UAAA;AACD,MAAA,OAAO;AAAA,QACH,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,MAAA,EAAQ;AAAA,OACZ;AAAA,IAEJ,KAAK,SAAA;AACD,MAAA,OAAO;AAAA,QACH,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,IAAA,EAAM,IAAA,CAAK,IAAA,CAAK,WAAA,EAAY;AAAA,QAC5B,MAAA,EAAQ;AAAA,OACZ;AAAA,IAEJ,KAAK,WAAA;AACD,MAAA,OAAO;AAAA,QACH,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,IAAA,EAAM,GAAA,GAAM,IAAA,CAAK,IAAA,CAAK,WAAA,EAAY;AAAA,QAClC,MAAA,EAAQ;AAAA,OACZ;AAAA,IAEJ,KAAK,UAAA;AACD,MAAA,OAAO;AAAA,QACH,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,IAAA,EAAM,IAAA,CAAK,IAAA,CAAK,WAAA,EAAY,GAAI,GAAA;AAAA,QAChC,MAAA,EAAQ;AAAA,OACZ;AAAA,IAEJ,KAAK,QAAA;AAED,MAAA,IAAI,IAAA,CAAK,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG;AACzB,QAAA,OAAO;AAAA,UACH,IAAA,EAAM,OAAA;AAAA,UACN,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA;AAAA,UAC1B,MAAA,EAAQ;AAAA,SACZ;AAAA,MACJ;AAGA,MAAA,OAAO;AAAA,QACH,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA,CAAE,OAAA,CAAQ,MAAA,EAAQ,GAAI,CAAA;AAAA,QACvE,MAAA,EAAQ;AAAA,OACZ;AAAA,IAEJ,KAAK,OAAA;AACD,MAAA,OAAO;AAAA,QACH,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,OAAO,IAAA,CAAK,KAAA;AAAA,QACZ,MAAA,EAAQ;AAAA,OACZ;AAAA,IAEJ,KAAK,OAAA;AACD,MAAA,OAAO;AAAA,QACH,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,MAAA,EAAQ;AAAA,OACZ;AAAA,IAEJ;AACI,MAAA,MAAM,IAAI,KAAA,CAAM,oBAAA,EAAsB,IAAA,CAAK,IAAI,CAAA;AAAA;AAE3D;AAEO,SAAS,eAAA,CAAgB,YAAY,GAAA,EAAK;AAC7C,EAAA,IAAI,OAAO,eAAe,QAAA,EAAU;AAChC,IAAA,UAAA,GAAa,MAAM,UAAU,CAAA;AAAA,EACjC;AAEA,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,YAAA;AAAA,IACN,KAAA,EAAO,wBAAwB,UAAU,CAAA;AAAA,IACzC,QAAQ,GAAA,IAAO,IAAA;AAAA,IACf,MAAA,EAAQ;AAAA,GACZ;AACJ;;;AC3gBA,IAAM,EAAE,cAAA,EAAA/B,eAAAA,EAAe,GAAI,MAAA,CAAO,SAAA;AAClC,IAAM,IAAA,GAAO,CAAA;AACb,IAAM,KAAA,GAAQ,CAAA;AACd,IAAM,WAAA,GAAc,CAAA;AACpB,IAAM,YAAA,GAAe,CAAA;AAErB,IAAM,iBAAA,GAAoB,OAAA;AAC1B,IAAM,oBAAA,GAAuB,UAAA;AAC7B,IAAM,2BAAA,GAA8B,uGAAA;AAEpC,IAAM,eAAA,GAAkB,IAAA;AAGxB,SAAS,YAAY,IAAA,EAAM;AACvB,EAAA,IAAI,IAAA,GAAO,IAAA;AACX,EAAA,IAAI,IAAA,GAAO,IAAA;AACX,EAAA,IAAI,IAAA,GAAO,IAAA;AAEX,EAAA,OAAO,SAAS,IAAA,EAAM;AAClB,IAAA,IAAA,GAAO,IAAA,CAAK,IAAA;AACZ,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,GAAO,IAAA;AACP,IAAA,IAAA,GAAO,IAAA;AAAA,EACX;AAEA,EAAA,OAAO,IAAA;AACX;AAEA,SAAS,8BAAA,CAA+B,SAAS,YAAA,EAAc;AAC3D,EAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,YAAA,CAAa,MAAA,EAAQ;AACxC,IAAA,OAAO,KAAA;AAAA,EACX;AAEA,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,OAAA,CAAQ,QAAQ,CAAA,EAAA,EAAK;AACrC,IAAA,MAAM,aAAA,GAAgB,YAAA,CAAa,UAAA,CAAW,CAAC,CAAA;AAC/C,IAAA,IAAI,QAAA,GAAW,OAAA,CAAQ,UAAA,CAAW,CAAC,CAAA;AAGnC,IAAA,IAAI,QAAA,IAAY,EAAA,IAAU,QAAA,IAAY,EAAA,EAAQ;AAC1C,MAAA,QAAA,GAAW,QAAA,GAAW,EAAA;AAAA,IAC1B;AAEA,IAAA,IAAI,aAAa,aAAA,EAAe;AAC5B,MAAA,OAAO,KAAA;AAAA,IACX;AAAA,EACJ;AAEA,EAAA,OAAO,IAAA;AACX;AAEA,SAAS,mBAAmB,KAAA,EAAO;AAC/B,EAAA,IAAI,KAAA,CAAM,SAAc,KAAA,EAAO;AAC3B,IAAA,OAAO,KAAA;AAAA,EACX;AAIA,EAAA,OAAO,MAAM,KAAA,KAAU,GAAA;AAC3B;AAEA,SAAS,oBAAoB,KAAA,EAAO;AAChC,EAAA,IAAI,UAAU,IAAA,EAAM;AAChB,IAAA,OAAO,IAAA;AAAA,EACX;AAEA,EAAA,OACI,MAAM,IAAA,KAAc,KAAA,IACpB,KAAA,CAAM,IAAA,KAAc,YACpB,KAAA,CAAM,IAAA,KAAc,eAAA,IACpB,KAAA,CAAM,SAAc,iBAAA,IACpB,KAAA,CAAM,IAAA,KAAc,gBAAA,IACpB,mBAAmB,KAAK,CAAA;AAEhC;AAEA,SAAS,kBAAkB,KAAA,EAAO;AAC9B,EAAA,IAAI,UAAU,IAAA,EAAM;AAChB,IAAA,OAAO,IAAA;AAAA,EACX;AAEA,EAAA,OACI,KAAA,CAAM,IAAA,KAAc,gBAAA,IACpB,KAAA,CAAM,IAAA,KAAc,kBAAA,IACpB,KAAA,CAAM,IAAA,KAAc,iBAAA,IACnB,KAAA,CAAM,IAAA,KAAc,KAAA,IAAS,MAAM,KAAA,KAAU,GAAA;AAEtD;AAEA,SAAS,aAAA,CAAc,MAAA,EAAQ,KAAA,EAAO,QAAA,EAAU;AAC5C,EAAA,SAAS,eAAA,GAAkB;AACvB,IAAA,GAAG;AACC,MAAA,UAAA,EAAA;AACA,MAAA,KAAA,GAAQ,UAAA,GAAa,MAAA,CAAO,MAAA,GAAS,MAAA,CAAO,UAAU,CAAA,GAAI,IAAA;AAAA,IAC9D,SAAS,KAAA,KAAU,IAAA,KAAS,MAAM,IAAA,KAAc,UAAA,IAAc,MAAM,IAAA,KAAc,OAAA,CAAA;AAAA,EACtF;AAEA,EAAA,SAAS,aAAa,MAAA,EAAQ;AAC1B,IAAA,MAAM,YAAY,UAAA,GAAa,MAAA;AAE/B,IAAA,OAAO,SAAA,GAAY,MAAA,CAAO,MAAA,GAAS,MAAA,CAAO,SAAS,CAAA,GAAI,IAAA;AAAA,EAC3D;AAEA,EAAA,SAAS,uBAAA,CAAwB,WAAW,IAAA,EAAM;AAC9C,IAAA,OAAO;AAAA,MACH,SAAA;AAAA,MACA,UAAA;AAAA,MACA,WAAA;AAAA,MACA,SAAA;AAAA,MACA,UAAA;AAAA,MACA;AAAA,KACJ;AAAA,EACJ;AAEA,EAAA,SAAS,cAAc,SAAA,EAAW;AAC9B,IAAA,SAAA,GAAY;AAAA,MACR,SAAA;AAAA,MACA,UAAA;AAAA,MACA,WAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACV;AAAA,EACJ;AAEA,EAAA,SAAS,cAAc,SAAA,EAAW;AAC9B,IAAA,SAAA,GAAY,uBAAA,CAAwB,WAAW,SAAS,CAAA;AAAA,EAC5D;AAEA,EAAA,SAAS,eAAA,GAAkB;AACvB,IAAA,UAAA,GAAa;AAAA,MACT,IAAA,EAAM,KAAA;AAAA,MACN,QAAQ,KAAA,CAAM,MAAA;AAAA,MACd,KAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACV;AAEA,IAAA,eAAA,EAAgB;AAChB,IAAA,WAAA,GAAc,IAAA;AAEd,IAAA,IAAI,aAAa,YAAA,EAAc;AAC3B,MAAA,YAAA,GAAe,UAAA;AAAA,IACnB;AAAA,EACJ;AAEA,EAAA,SAAS,UAAA,GAAa;AAClB,IAAA,WAAA,GAAc;AAAA,MACV,QAAQ,KAAA,CAAM,MAAA;AAAA,MACd,MAAM,KAAA,CAAM,MAAA,CAAO,QAAS,WAAA,KAAgB,IAAA,IAAQ,YAAY,IAAA,IAAS,IAAA;AAAA,MACzE,IAAA,EAAM;AAAA,KACV;AAEA,IAAA,UAAA,GAAa;AAAA,MACT,IAAA,EAAM,WAAA;AAAA,MACN,QAAQ,KAAA,CAAM,MAAA;AAAA,MACd,OAAO,UAAA,CAAW,KAAA;AAAA,MAClB,IAAA,EAAM;AAAA,KACV;AAAA,EACJ;AAEA,EAAA,SAAS,WAAA,GAAc;AACnB,IAAA,IAAI,UAAA,CAAW,SAAS,WAAA,EAAa;AACjC,MAAA,UAAA,GAAa,UAAA,CAAW,IAAA;AAAA,IAC5B,CAAA,MAAO;AACH,MAAA,UAAA,GAAa;AAAA,QACT,IAAA,EAAM,YAAA;AAAA,QACN,QAAQ,WAAA,CAAY,MAAA;AAAA,QACpB,OAAO,UAAA,CAAW,KAAA;AAAA,QAClB,IAAA,EAAM;AAAA,OACV;AAAA,IACJ;AAEA,IAAA,WAAA,GAAc,WAAA,CAAY,IAAA;AAAA,EAC9B;AAEA,EAAA,IAAI,WAAA,GAAc,IAAA;AAClB,EAAA,IAAI,SAAA,GAAY,IAAA;AAChB,EAAA,IAAI,SAAA,GAAY,IAAA;AAKhB,EAAA,IAAI,WAAA,GAAc,IAAA;AAElB,EAAA,IAAI,cAAA,GAAiB,CAAA;AACrB,EAAA,IAAI,UAAA,GAAa,IAAA;AAEjB,EAAA,IAAI,KAAA,GAAQ,IAAA;AACZ,EAAA,IAAI,UAAA,GAAa,EAAA;AACjB,EAAA,IAAI,YAAA,GAAe,CAAA;AACnB,EAAA,IAAI,UAAA,GAAa;AAAA,IACb,IAAA,EAAM,IAAA;AAAA,IACN,MAAA,EAAQ,IAAA;AAAA,IACR,KAAA,EAAO,IAAA;AAAA,IACP,IAAA,EAAM;AAAA,GACV;AAEA,EAAA,eAAA,EAAgB;AAEhB,EAAA,OAAO,UAAA,KAAe,IAAA,IAAQ,EAAE,cAAA,GAAiB,eAAA,EAAiB;AAkB9D,IAAA,QAAQ,MAAM,IAAA;AAAM,MAChB,KAAK,OAAA;AACD,QAAA,IAAI,cAAc,IAAA,EAAM;AAEpB,UAAA,IAAI,UAAU,IAAA,EAAM;AAEhB,YAAA,IAAI,UAAA,KAAe,OAAO,MAAA,GAAS,CAAA,IAAM,MAAM,KAAA,KAAU,KAAA,IAAS,KAAA,CAAM,KAAA,KAAU,KAAA,EAAQ;AACtF,cAAA,KAAA,GAAQ,QAAA;AACR,cAAA;AAAA,YACJ;AAAA,UACJ;AAGA,UAAA,UAAA,GAAa,iBAAA;AACb,UAAA;AAAA,QACJ;AAGA,QAAA,KAAA,GAAQ,SAAA,CAAU,SAAA;AAGlB,QAAA,IAAI,UAAU,cAAA,EAAgB;AAC1B,UAAA,IAAI,SAAA,CAAU,eAAe,UAAA,EAAY;AACrC,YAAA,KAAA,GAAQ,QAAA;AACR,YAAA;AAAA,UACJ,CAAA,MAAO;AACH,YAAA,KAAA,GAAQ,KAAA;AAAA,UACZ;AAAA,QACJ;AAGA,QAAA,OAAO,SAAA,CAAU,gBAAgB,WAAA,EAAa;AAC1C,UAAA,WAAA,EAAY;AAAA,QAChB;AAGA,QAAA,SAAA,GAAY,SAAA,CAAU,IAAA;AACtB,QAAA;AAAA,MAEJ,KAAK,UAAA;AAED,QAAA,IAAI,WAAA,KAAgB,IAAA,IAAQ,WAAA,KAAgB,KAAA,EAAO;AAE/C,UAAA,IAAI,SAAA,KAAc,IAAA,IAAQ,UAAA,GAAa,SAAA,CAAU,UAAA,EAAY;AAEzD,YAAA,SAAA,GAAY,WAAA;AACZ,YAAA,WAAA,GAAc,KAAA;AAAA,UAClB;AAAA,QACJ,CAAA,MAAA,IAAW,cAAc,IAAA,EAAM;AAG3B,UAAA,UAAA,GAAa,oBAAA;AACb,UAAA;AAAA,QACJ;AAGA,QAAA,KAAA,GAAQ,SAAA,CAAU,SAAA;AAGlB,QAAA,SAAA,GAAY,SAAA,CAAU,SAAA;AACtB,QAAA,WAAA,GAAc,SAAA,CAAU,WAAA;AACxB,QAAA,UAAA,GAAa,SAAA,CAAU,UAAA;AACvB,QAAA,UAAA,GAAa,SAAA,CAAU,UAAA;AACvB,QAAA,KAAA,GAAQ,UAAA,GAAa,MAAA,CAAO,MAAA,GAAS,MAAA,CAAO,UAAU,CAAA,GAAI,IAAA;AAG1D,QAAA,SAAA,GAAY,SAAA,CAAU,IAAA;AACtB,QAAA;AAAA,MAEJ,KAAK,YAAA;AACD,QAAA,KAAA,GAAQ,KAAA,CAAM,KAAA;AACd,QAAA;AAAA,MAEJ,KAAK,IAAA;AAGD,QAAA,IAAI,KAAA,CAAM,SAAS,QAAA,EAAU;AACzB,UAAA,aAAA,CAAc,MAAM,IAAI,CAAA;AAAA,QAC5B;AAEA,QAAA,IAAI,KAAA,CAAM,SAAS,KAAA,EAAO;AACtB,UAAA,aAAA,CAAc,MAAM,IAAI,CAAA;AAAA,QAC5B;AAEA,QAAA,KAAA,GAAQ,KAAA,CAAM,KAAA;AACd,QAAA;AAAA,MAEJ,KAAK,WAAA;AACD,QAAA,KAAA,GAAQ;AAAA,UACJ,IAAA,EAAM,iBAAA;AAAA,UACN,MAAA,EAAQ,KAAA;AAAA,UACR,KAAA,EAAO,CAAA;AAAA,UACP,IAAA,EAAM;AAAA,SACV;AACA,QAAA;AAAA,MAEJ,KAAK,iBAAA,EAAmB;AACpB,QAAA,MAAM,KAAA,GAAQ,MAAM,MAAA,CAAO,KAAA;AAE3B,QAAA,IAAI,KAAA,CAAM,KAAA,KAAU,KAAA,CAAM,MAAA,EAAQ;AAE9B,UAAA,IAAI,KAAA,CAAM,IAAA,KAAS,CAAA,IAAK,KAAA,CAAM,OAAO,GAAA,EAAK;AACtC,YAAA,KAAA,GAAQ,QAAA;AACR,YAAA;AAAA,UACJ;AAGA,UAAA,KAAA,GAAQ,KAAA;AACR,UAAA;AAAA,QACJ;AAGA,QAAA,IAAI,KAAA,CAAM,IAAA,KAAA,CAAU,CAAA,IAAK,KAAA,CAAM,UAAU,CAAA,EAAG;AACxC,UAAA,KAAA,GAAQ,KAAA;AACR,UAAA;AAAA,QACJ;AAEA,QAAA,OAAO,KAAA,CAAM,KAAA,GAAQ,KAAA,CAAM,MAAA,EAAQ,MAAM,KAAA,EAAA,EAAS;AAC9C,UAAA,MAAM,SAAA,GAAY,KAAK,KAAA,CAAM,KAAA;AAE7B,UAAA,IAAA,CAAK,KAAA,CAAM,IAAA,GAAO,SAAA,MAAe,CAAA,EAAG;AAGhC,YAAA,aAAA,CAAc,KAAK,CAAA;AACnB,YAAA,aAAA,CAAc;AAAA,cACV,IAAA,EAAM,cAAA;AAAA,cACN,QAAQ,KAAA,CAAM,MAAA;AAAA,cACd,IAAA,EAAM,MAAM,IAAA,GAAO;AAAA,aACtB,CAAA;AAGD,YAAA,KAAA,GAAQ,KAAA,CAAM,MAAM,KAAA,EAAO,CAAA;AAC3B,YAAA;AAAA,UACJ;AAAA,QACJ;AACA,QAAA;AAAA,MACJ;AAAA,MAEA,KAAK,cAAA;AACD,QAAA,KAAA,GAAQ;AAAA,UACJ,IAAA,EAAM,iBAAA;AAAA,UACN,QAAQ,KAAA,CAAM,MAAA;AAAA,UACd,KAAA,EAAO,CAAA;AAAA,UACP,MAAM,KAAA,CAAM;AAAA,SAChB;AACA,QAAA;AAAA,MAEJ,KAAK,MAAA;AACD,QAAA,IAAI,UAAU,IAAA,EAAM;AAChB,UAAA,IAAIhB,MAAAA,GAAO,KAAA,CAAM,KAAA,CAAM,WAAA,EAAY;AAGnC,UAAA,IAAIA,MAAAA,CAAK,OAAA,CAAQ,IAAI,CAAA,KAAM,EAAA,EAAI;AAC3B,YAAAA,MAAAA,GAAOA,MAAAA,CAAK,OAAA,CAAQ,WAAA,EAAa,EAAE,CAAA;AAAA,UACvC;AAEA,UAAA,IAAIgB,eAAAA,CAAe,IAAA,CAAK,KAAA,CAAM,GAAA,EAAKhB,MAAI,CAAA,EAAG;AACtC,YAAA,KAAA,GAAQ,KAAA,CAAM,IAAIA,MAAI,CAAA;AACtB,YAAA;AAAA,UACJ;AAAA,QACJ;AAEA,QAAA,KAAA,GAAQ,QAAA;AACR,QAAA;AAAA,MAEJ,KAAK,SAAA,EAAW;AACZ,QAAA,MAAM,IAAA,GAAO,WAAA,KAAgB,IAAA,GAAO,WAAA,CAAY,IAAA,GAAO,IAAA;AACvD,QAAA,MAAMgD,eAAAA,GAAiB,aAAa,IAAA,CAAK,KAAA,CAAM,MAAM,EAAA,CAAG,KAAA,EAAO,YAAA,EAAc,IAAI,CAAC,CAAA;AAElF,QAAA,IAAI,CAAC,KAAA,CAAMA,eAAc,CAAA,IAAKA,kBAAiB,UAAA,EAAY;AACvD,UAAA,OAAO,aAAaA,eAAAA,EAAgB;AAChC,YAAA,eAAA,EAAgB;AAAA,UACpB;AAEA,UAAA,KAAA,GAAQ,KAAA;AAAA,QACZ,CAAA,MAAO;AACH,UAAA,KAAA,GAAQ,QAAA;AAAA,QACZ;AAEA,QAAA;AAAA,MACJ;AAAA,MAEA,KAAK,MAAA;AAAA,MACL,KAAK,UAAA,EAAY;AACb,QAAA,MAAM,UAAA,GAAa,KAAA,CAAM,IAAA,KAAS,MAAA,GAAS,OAAA,GAAU,YAAA;AACrD,QAAA,MAAM,UAAA,GAAahC,eAAAA,CAAe,IAAA,CAAK,QAAA,EAAU,UAAU,CAAA,GAAI,QAAA,CAAS,UAAU,CAAA,CAAE,KAAA,CAAM,IAAI,CAAA,GAAI,IAAA;AAElG,QAAA,IAAI,CAAC,UAAA,IAAc,CAAC,UAAA,CAAW,KAAA,EAAO;AAClC,UAAA,MAAM,IAAI,KAAA;AAAA,YACN,wBAAA,IACC,KAAA,CAAM,IAAA,KAAS,MAAA,GACV,GAAA,GAAM,MAAM,IAAA,GAAO,GAAA,GACnB,IAAA,GAAQ,KAAA,CAAM,IAAA,GAAO,IAAA;AAAA,WAC/B;AAAA,QACJ;AAGA,QAAA,IAAI,gBAAgB,KAAA,IAAS,KAAA,KAAU,IAAA,IAAQ,KAAA,CAAM,SAAS,MAAA,EAAQ;AAClE,UAAA,MAAM,mBAAA;AAAA;AAAA;AAAA;AAAA,YAID,KAAA,CAAM,IAAA,KAAS,cAAA,IAAkB,KAAA,CAAM,IAAA,KAAc,KAAA;AAAA;AAAA;AAAA,YAKrD,KAAA,CAAM,IAAA,KAAS,QAAA,IAAY,KAAA,CAAM,KAAA,KAAU;AAAA,WAAA;AAEhD,UAAA,IAAI,mBAAA,EAAqB;AACrB,YAAA,IAAI,gBAAgB,IAAA,EAAM;AACtB,cAAA,WAAA,GAAc,uBAAA,CAAwB,OAAO,SAAS,CAAA;AAAA,YAC1D;AAEA,YAAA,KAAA,GAAQ,QAAA;AACR,YAAA;AAAA,UACJ;AAAA,QACJ;AAEA,QAAA,UAAA,EAAW;AACX,QAAA,KAAA,GAAQ,UAAA,CAAW,YAAY,UAAA,CAAW,KAAA;AAC1C,QAAA;AAAA,MACJ;AAAA,MAEA,KAAK,SAAA,EAAW;AACZ,QAAA,MAAMhB,SAAO,KAAA,CAAM,IAAA;AAEnB,QAAA,IAAI,UAAU,IAAA,EAAM;AAChB,UAAA,IAAI,cAAc,KAAA,CAAM,KAAA;AAGxB,UAAA,IAAI,WAAA,CAAY,OAAA,CAAQ,IAAI,CAAA,KAAM,EAAA,EAAI;AAClC,YAAA,WAAA,GAAc,WAAA,CAAY,OAAA,CAAQ,WAAA,EAAa,EAAE,CAAA;AAAA,UACrD;AAEA,UAAA,IAAI,8BAAA,CAA+B,WAAA,EAAaA,MAAI,CAAA,EAAG;AACnD,YAAA,eAAA,EAAgB;AAChB,YAAA,KAAA,GAAQ,KAAA;AACR,YAAA;AAAA,UACJ;AAAA,QACJ;AAEA,QAAA,KAAA,GAAQ,QAAA;AACR,QAAA;AAAA,MACJ;AAAA,MAEA,KAAK,WAAA;AAAA,MACL,KAAK,UAAA;AACD,QAAA,IAAI,UAAU,IAAA,IAAQ,8BAAA,CAA+B,MAAM,KAAA,EAAO,KAAA,CAAM,IAAI,CAAA,EAAG;AAC3E,UAAA,eAAA,EAAgB;AAChB,UAAA,KAAA,GAAQ,KAAA;AACR,UAAA;AAAA,QACJ;AAEA,QAAA,KAAA,GAAQ,QAAA;AACR,QAAA;AAAA,MAEJ,KAAK,OAAA;AACD,QAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,CAAM,KAAA,KAAU,MAAM,KAAA,EAAO;AAC/C,UAAA,eAAA,EAAgB;AAChB,UAAA,KAAA,GAAQ,KAAA;AACR,UAAA;AAAA,QACJ;AAEA,QAAA,KAAA,GAAQ,QAAA;AACR,QAAA;AAAA,MAEJ,KAAK,OAAA;AACD,QAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,CAAM,IAAA,KAAc,KAAA,EAAO;AAC7C,UAAA,IAAI,mBAAA,CAAoB,UAAA,CAAW,KAAK,CAAA,EAAG;AACvC,YAAA,KAAA,GAAQ,QAAA;AAAA,UACZ,CAAA,MAAO;AACH,YAAA,eAAA,EAAgB;AAChB,YAAA,KAAA,GAAQ,iBAAA,CAAkB,KAAK,CAAA,GAAI,QAAA,GAAW,KAAA;AAAA,UAClD;AAAA,QACJ,CAAA,MAAO;AACH,UAAA,KAAA,GAAQ,oBAAoB,UAAA,CAAW,KAAK,KAAK,iBAAA,CAAkB,KAAK,IAAI,KAAA,GAAQ,QAAA;AAAA,QACxF;AAEA,QAAA;AAAA,MAEJ,KAAK,QAAA;AACD,QAAA,IAAI,MAAA,GAAS,EAAA;AACb,QAAA,IAAI,cAAA,GAAiB,UAAA;AAErB,QAAA,OAAO,cAAA,GAAiB,OAAO,MAAA,IAAU,MAAA,CAAO,SAAS,KAAA,CAAM,KAAA,CAAM,QAAQ,cAAA,EAAA,EAAkB;AAC3F,UAAA,MAAA,IAAU,MAAA,CAAO,cAAc,CAAA,CAAE,KAAA;AAAA,QACrC;AAEA,QAAA,IAAI,8BAAA,CAA+B,MAAA,EAAQ,KAAA,CAAM,KAAK,CAAA,EAAG;AACrD,UAAA,OAAO,aAAa,cAAA,EAAgB;AAChC,YAAA,eAAA,EAAgB;AAAA,UACpB;AAEA,UAAA,KAAA,GAAQ,KAAA;AAAA,QACZ,CAAA,MAAO;AACH,UAAA,KAAA,GAAQ,QAAA;AAAA,QACZ;AAEA,QAAA;AAAA,MAEJ;AACI,QAAA,MAAM,IAAI,KAAA,CAAM,qBAAA,GAAwB,KAAA,CAAM,IAAI,CAAA;AAAA;AAC1D,EACJ;AAIA,EAAA,QAAQ,UAAA;AAAY,IAChB,KAAK,IAAA;AACD,MAAA,OAAA,CAAQ,IAAA,CAAK,8BAAA,GAAiC,eAAA,GAAkB,aAAa,CAAA;AAC7E,MAAA,UAAA,GAAa,2BAAA;AACb,MAAA,UAAA,GAAa,IAAA;AACb,MAAA;AAAA,IAEJ,KAAK,iBAAA;AACD,MAAA,OAAO,gBAAgB,IAAA,EAAM;AACzB,QAAA,WAAA,EAAY;AAAA,MAChB;AACA,MAAA;AAAA,IAEJ;AACI,MAAA,UAAA,GAAa,IAAA;AAAA;AAGrB,EAAA,OAAO;AAAA,IACH,MAAA;AAAA,IACA,MAAA,EAAQ,UAAA;AAAA,IACR,UAAA,EAAY,cAAA;AAAA,IACZ,KAAA,EAAO,UAAA;AAAA,IACP;AAAA,GACJ;AACJ;AAmCO,SAAS,WAAA,CAAY,MAAA,EAAQ,UAAA,EAAY,QAAA,EAAU;AACtD,EAAA,MAAM,cAAc,aAAA,CAAc,MAAA,EAAQ,UAAA,EAAY,QAAA,IAAY,EAAE,CAAA;AAEpE,EAAA,IAAI,WAAA,CAAY,UAAU,IAAA,EAAM;AAC5B,IAAA,OAAO,WAAA;AAAA,EACX;AAEA,EAAA,IAAI,OAAO,WAAA,CAAY,KAAA;AACvB,EAAA,IAAI,IAAA,GAAO,YAAY,KAAA,GAAQ;AAAA,IAC3B,MAAA,EAAQ,WAAW,MAAA,IAAU,IAAA;AAAA,IAC7B,OAAO;AAAC,GACZ;AACA,EAAA,MAAM,SAAA,GAAY,CAAC,IAAI,CAAA;AAGvB,EAAA,IAAA,GAAO,WAAA,CAAY,IAAI,CAAA,CAAE,IAAA;AAGzB,EAAA,OAAO,SAAS,IAAA,EAAM;AAClB,IAAA,QAAQ,KAAK,IAAA;AAAM,MACf,KAAK,WAAA;AACD,QAAA,IAAA,CAAK,KAAA,CAAM,KAAK,IAAA,GAAO;AAAA,UACnB,QAAQ,IAAA,CAAK,MAAA;AAAA,UACb,OAAO;AAAC,SACX,CAAA;AACD,QAAA,SAAA,CAAU,KAAK,IAAI,CAAA;AACnB,QAAA;AAAA,MAEJ,KAAK,YAAA;AACD,QAAA,SAAA,CAAU,GAAA,EAAI;AACd,QAAA,IAAA,GAAO,SAAA,CAAU,SAAA,CAAU,MAAA,GAAS,CAAC,CAAA;AACrC,QAAA;AAAA,MAEJ;AACI,QAAA,IAAA,CAAK,MAAM,IAAA,CAAK;AAAA,UACZ,MAAA,EAAQ,KAAK,MAAA,IAAU,IAAA;AAAA,UACvB,KAAA,EAAO,KAAK,KAAA,CAAM,KAAA;AAAA,UAClB,IAAA,EAAM,KAAK,KAAA,CAAM;AAAA,SACpB,CAAA;AAAA;AAGT,IAAA,IAAA,GAAO,IAAA,CAAK,IAAA;AAAA,EAChB;AAEA,EAAA,OAAO,WAAA;AACX;;;ACrnBA,IAAA,aAAA,GAAA,EAAA;AAAA,QAAA,CAAA,aAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAA,QAAA;AAAA,EAAA,SAAA,EAAA,MAAA,SAAA;AAAA,EAAA,UAAA,EAAA,MAAA,UAAA;AAAA,EAAA,MAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAAO,SAAS,SAAS,IAAA,EAAM;AAC3B,EAAA,SAAS,iBAAiB,MAAA,EAAQ;AAC9B,IAAA,IAAI,WAAW,IAAA,EAAM;AACjB,MAAA,OAAO,KAAA;AAAA,IACX;AAEA,IAAA,OACI,OAAO,IAAA,KAAS,MAAA,IAChB,OAAO,IAAA,KAAS,UAAA,IAChB,OAAO,IAAA,KAAS,SAAA;AAAA,EAExB;AAEA,EAAA,SAAS,SAAS,SAAA,EAAW;AACzB,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,SAAA,CAAU,KAAK,CAAA,EAAG;AAEhC,MAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,SAAA,CAAU,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AAC7C,QAAA,IAAI,QAAA,CAAS,SAAA,CAAU,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG;AAC9B,UAAA,IAAI,gBAAA,CAAiB,SAAA,CAAU,MAAM,CAAA,EAAG;AACpC,YAAA,MAAA,CAAO,OAAA,CAAQ,UAAU,MAAM,CAAA;AAAA,UACnC;AAEA,UAAA,OAAO,IAAA;AAAA,QACX;AAAA,MACJ;AAAA,IACJ,CAAA,MAAA,IAAW,SAAA,CAAU,IAAA,KAAS,IAAA,EAAM;AAChC,MAAA,MAAA,GAAS,gBAAA,CAAiB,UAAU,MAAM,CAAA,GACpC,CAAC,SAAA,CAAU,MAAM,IACjB,EAAC;AAEP,MAAA,OAAO,IAAA;AAAA,IACX;AAEA,IAAA,OAAO,KAAA;AAAA,EACX;AAEA,EAAA,IAAI,MAAA,GAAS,IAAA;AAEb,EAAA,IAAI,IAAA,CAAK,YAAY,IAAA,EAAM;AACvB,IAAA,QAAA,CAAS,KAAK,OAAO,CAAA;AAAA,EACzB;AAEA,EAAA,OAAO,MAAA;AACX;AAEO,SAAS,MAAA,CAAO,MAAM,IAAA,EAAM;AAC/B,EAAA,OAAO,QAAA,CAAS,MAAM,IAAA,EAAM,CAAA,KAAA,KAAS,MAAM,IAAA,KAAS,MAAA,IAAU,KAAA,CAAM,IAAA,KAAS,IAAI,CAAA;AACrF;AAEO,SAAS,UAAA,CAAW,MAAMqB,SAAAA,EAAU;AACvC,EAAA,OAAO,QAAA,CAAS,MAAM,IAAA,EAAM,CAAA,KAAA,KAAS,MAAM,IAAA,KAAS,UAAA,IAAc,KAAA,CAAM,IAAA,KAASA,SAAQ,CAAA;AAC7F;AAEO,SAAS,UAAU,IAAA,EAAM;AAC5B,EAAA,OAAO,SAAS,IAAA,EAAM,IAAA,EAAM,CAAA,KAAA,KAAS,KAAA,CAAM,SAAS,SAAS,CAAA;AACjE;AAEA,SAAS,QAAA,CAAS,KAAA,EAAO,IAAA,EAAM,EAAA,EAAI;AAC/B,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,IAAA,CAAK,KAAA,EAAO,IAAI,CAAA;AAEvC,EAAA,IAAI,UAAU,IAAA,EAAM;AAChB,IAAA,OAAO,KAAA;AAAA,EACX;AAEA,EAAA,OAAO,KAAA,CAAM,KAAK,EAAE,CAAA;AACxB;;;AC/DA,SAAS,kBAAkB,SAAA,EAAW;AAClC,EAAA,IAAI,UAAU,SAAA,EAAW;AACrB,IAAA,OAAO,SAAA,CAAU,IAAA;AAAA,EACrB;AAEA,EAAA,OAAO,iBAAA,CAAkB,SAAA,CAAU,KAAA,CAAM,CAAC,CAAC,CAAA;AAC/C;AAEA,SAAS,iBAAiB,SAAA,EAAW;AACjC,EAAA,IAAI,UAAU,SAAA,EAAW;AACrB,IAAA,OAAO,SAAA,CAAU,IAAA;AAAA,EACrB;AAEA,EAAA,OAAO,iBAAiB,SAAA,CAAU,KAAA,CAAM,UAAU,KAAA,CAAM,MAAA,GAAS,CAAC,CAAC,CAAA;AACvE;AAEO,SAAS,cAAA,CAAe4B,MAAAA,EAAO,GAAA,EAAK,KAAA,EAAO,MAAMjD,MAAAA,EAAM;AAC1D,EAAA,SAAS,cAAc,SAAA,EAAW;AAC9B,IAAA,IAAI,SAAA,CAAU,MAAA,KAAW,IAAA,IACrB,SAAA,CAAU,MAAA,CAAO,SAAS,IAAA,IAC1B,SAAA,CAAU,MAAA,CAAO,IAAA,KAASA,MAAAA,EAAM;AAChC,MAAA,MAAM,KAAA,GAAQ,kBAAkB,SAAS,CAAA;AACzC,MAAA,MAAM,GAAA,GAAM,iBAAiB,SAAS,CAAA;AAEtC,MAAAiD,OAAM,MAAA,CAAO,IAAA,CAAK,KAAK,SAAS,IAAA,EAAM,MAAM,IAAA,EAAM;AAC9C,QAAA,IAAI,SAAS,KAAA,EAAO;AAChB,UAAA,MAAM,KAAA,GAAQ,IAAI,IAAA,EAAK;AAEvB,UAAA,GAAG;AACC,YAAA,KAAA,CAAM,UAAA,CAAW,KAAK,IAAI,CAAA;AAE1B,YAAA,IAAI,IAAA,CAAK,SAAS,GAAA,EAAK;AACnB,cAAA;AAAA,YACJ;AAEA,YAAA,IAAA,GAAO,IAAA,CAAK,IAAA;AAAA,UAChB,SAAS,IAAA,KAAS,IAAA;AAElB,UAAA,SAAA,CAAU,IAAA,CAAK;AAAA,YACX,MAAA,EAAQ,IAAA;AAAA,YACR;AAAA,WACH,CAAA;AAAA,QACL;AAAA,MACJ,CAAC,CAAA;AAAA,IACL;AAEA,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,SAAA,CAAU,KAAK,CAAA,EAAG;AAChC,MAAA,SAAA,CAAU,KAAA,CAAM,QAAQ,aAAa,CAAA;AAAA,IACzC;AAAA,EACJ;AAEA,EAAA,MAAM,YAAY,EAAC;AAEnB,EAAA,IAAI,KAAA,CAAM,YAAY,IAAA,EAAM;AACxB,IAAA,aAAA,CAAc,MAAM,OAAO,CAAA;AAAA,EAC/B;AAEA,EAAA,OAAO,SAAA;AACX;;;AC1DA,IAAM,EAAE,cAAA,EAAAjC,eAAAA,EAAe,GAAI,MAAA,CAAO,SAAA;AAElC,SAAS,cAAc,KAAA,EAAO;AAE1B,EAAA,OACI,OAAO,KAAA,KAAU,QAAA,IACjB,QAAA,CAAS,KAAK,CAAA,IACd,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA,KAAM,KAAA,IACtB,KAAA,IAAS,CAAA;AAEjB;AAEA,SAAS,gBAAgB,GAAA,EAAK;AAC1B,EAAA,OACI,OAAA,CAAQ,GAAG,CAAA,IACX,aAAA,CAAc,GAAA,CAAI,MAAM,CAAA,IACxB,aAAA,CAAc,GAAA,CAAI,IAAI,CAAA,IACtB,aAAA,CAAc,IAAI,MAAM,CAAA;AAEhC;AAEA,SAAS,0BAAA,CAA2B,MAAM,MAAA,EAAQ;AAC9C,EAAA,OAAO,SAAS,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM;AAClC,IAAA,IAAI,CAAC,IAAA,IAAQ,IAAA,CAAK,WAAA,KAAgB,MAAA,EAAQ;AACtC,MAAA,OAAO,IAAA,CAAK,MAAM,kCAAkC,CAAA;AAAA,IACxD;AAEA,IAAA,KAAA,IAAS,OAAO,IAAA,EAAM;AAClB,MAAA,IAAI,KAAA,GAAQ,IAAA;AAEZ,MAAA,IAAIA,eAAAA,CAAe,IAAA,CAAK,IAAA,EAAM,GAAG,MAAM,KAAA,EAAO;AAC1C,QAAA;AAAA,MACJ;AAEA,MAAA,IAAI,QAAQ,MAAA,EAAQ;AAChB,QAAA,IAAI,IAAA,CAAK,SAAS,IAAA,EAAM;AACpB,UAAA,IAAA,CAAK,MAAM,mBAAA,GAAsB,IAAA,CAAK,IAAA,GAAO,eAAA,GAAkB,OAAO,GAAG,CAAA;AAAA,QAC7E;AAAA,MACJ,CAAA,MAAA,IAAW,QAAQ,KAAA,EAAO;AACtB,QAAA,IAAI,IAAA,CAAK,QAAQ,IAAA,EAAM;AACnB,UAAA;AAAA,QACJ,WAAW,IAAA,CAAK,GAAA,IAAO,IAAA,CAAK,GAAA,CAAI,gBAAgB,MAAA,EAAQ;AACpD,UAAA,IAAI,OAAO,IAAA,CAAK,GAAA,CAAI,MAAA,KAAW,QAAA,EAAU;AACrC,YAAA,GAAA,IAAO,SAAA;AAAA,UACX,WAAW,CAAC,eAAA,CAAgB,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA,EAAG;AACzC,YAAA,GAAA,IAAO,QAAA;AAAA,UACX,WAAW,CAAC,eAAA,CAAgB,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,EAAG;AACvC,YAAA,GAAA,IAAO,MAAA;AAAA,UACX,CAAA,MAAO;AACH,YAAA;AAAA,UACJ;AAAA,QACJ;AAEA,QAAA,KAAA,GAAQ,KAAA;AAAA,MACZ,CAAA,MAAA,IAAW,MAAA,CAAO,cAAA,CAAe,GAAG,CAAA,EAAG;AACnC,QAAA,KAAA,GAAQ,KAAA;AAER,QAAA,KAAA,IAAS,CAAA,GAAI,GAAG,CAAC,KAAA,IAAS,IAAI,MAAA,CAAO,GAAG,CAAA,CAAE,MAAA,EAAQ,CAAA,EAAA,EAAK;AACnD,UAAA,MAAM,SAAA,GAAY,MAAA,CAAO,GAAG,CAAA,CAAE,CAAC,CAAA;AAE/B,UAAA,QAAQ,SAAA;AAAW,YACf,KAAK,MAAA;AACD,cAAA,KAAA,GAAQ,OAAO,IAAA,CAAK,GAAG,CAAA,KAAM,QAAA;AAC7B,cAAA;AAAA,YAEJ,KAAK,OAAA;AACD,cAAA,KAAA,GAAQ,OAAO,IAAA,CAAK,GAAG,CAAA,KAAM,SAAA;AAC7B,cAAA;AAAA,YAEJ,KAAK,IAAA;AACD,cAAA,KAAA,GAAQ,IAAA,CAAK,GAAG,CAAA,KAAM,IAAA;AACtB,cAAA;AAAA,YAEJ;AACI,cAAA,IAAI,OAAO,cAAc,QAAA,EAAU;AAC/B,gBAAA,KAAA,GAAQ,KAAK,GAAG,CAAA,IAAK,IAAA,CAAK,GAAG,EAAE,IAAA,KAAS,SAAA;AAAA,cAC5C,CAAA,MAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,EAAG;AACjC,gBAAA,KAAA,GAAQ,IAAA,CAAK,GAAG,CAAA,YAAa,IAAA;AAAA,cACjC;AAAA;AACR,QACJ;AAAA,MACJ,CAAA,MAAO;AACH,QAAA,IAAA,CAAK,IAAA,EAAM,iBAAA,GAAoB,GAAA,GAAM,QAAA,GAAW,OAAO,YAAY,CAAA;AAAA,MACvE;AAEA,MAAA,IAAI,CAAC,KAAA,EAAO;AACR,QAAA,IAAA,CAAK,IAAA,EAAM,iBAAA,GAAoB,IAAA,GAAO,GAAA,GAAM,MAAM,GAAG,CAAA;AAAA,MACzD;AAAA,IACJ;AAEA,IAAA,KAAA,MAAW,OAAO,MAAA,EAAQ;AACtB,MAAA,IAAIA,eAAAA,CAAe,IAAA,CAAK,MAAA,EAAQ,GAAG,CAAA,IAC/BA,gBAAe,IAAA,CAAK,IAAA,EAAM,GAAG,CAAA,KAAM,KAAA,EAAO;AAC1C,QAAA,IAAA,CAAK,IAAA,EAAM,SAAA,GAAY,IAAA,GAAO,GAAA,GAAM,MAAM,aAAa,CAAA;AAAA,MAC3D;AAAA,IACJ;AAAA,EACJ,CAAA;AACJ;AAEA,SAAS,YAAA,CAAa,YAAY,IAAA,EAAM;AACpC,EAAA,MAAM,YAAY,EAAC;AAEnB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,UAAA,CAAW,QAAQ,CAAA,EAAA,EAAK;AACxC,IAAA,MAAM,SAAA,GAAY,WAAW,CAAC,CAAA;AAC9B,IAAA,IAAI,SAAA,KAAc,MAAA,IAAU,SAAA,KAAc,OAAA,EAAS;AAC/C,MAAA,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,WAAA,EAAa,CAAA;AAAA,IAC/C,CAAA,MAAA,IAAW,cAAc,IAAA,EAAM;AAC3B,MAAA,SAAA,CAAU,KAAK,MAAM,CAAA;AAAA,IACzB,CAAA,MAAA,IAAW,OAAO,SAAA,KAAc,QAAA,EAAU;AACtC,MAAA,SAAA,CAAU,KAAK,SAAS,CAAA;AAAA,IAC5B,CAAA,MAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,EAAG;AACjC,MAAA,SAAA,CAAU,KAAK,OAAA,IAAW,YAAA,CAAa,WAAW,IAAI,CAAA,IAAK,SAAS,GAAG,CAAA;AAAA,IAC3E,CAAA,MAAO;AACH,MAAA,MAAM,IAAI,KAAA,CAAM,eAAA,GAAkB,SAAA,GAAY,QAAA,GAAW,OAAO,wBAAwB,CAAA;AAAA,IAC5F;AAAA,EACJ;AAEA,EAAA,OAAO,SAAA,CAAU,KAAK,KAAK,CAAA;AAC/B;AAEA,SAAS,gBAAA,CAAiBhB,QAAM,QAAA,EAAU;AACtC,EAAA,MAAMiB,cAAY,QAAA,CAAS,SAAA;AAC3B,EAAA,MAAM,MAAA,GAAS;AAAA,IACX,IAAA,EAAM,MAAA;AAAA,IACN,GAAA,EAAK;AAAA,GACT;AACA,EAAA,MAAM,IAAA,GAAO;AAAA,IACT,IAAA,EAAM,MAAMjB,MAAAA,GAAO;AAAA,GACvB;AAEA,EAAA,KAAA,MAAW,OAAOiB,WAAAA,EAAW;AACzB,IAAA,IAAID,eAAAA,CAAe,IAAA,CAAKC,WAAAA,EAAW,GAAG,MAAM,KAAA,EAAO;AAC/C,MAAA;AAAA,IACJ;AAEA,IAAA,MAAM,aAAa,MAAA,CAAO,GAAG,IAAI,KAAA,CAAM,OAAA,CAAQA,YAAU,GAAG,CAAC,CAAA,GACvDA,WAAAA,CAAU,GAAG,CAAA,CAAE,KAAA,KACf,CAACA,WAAAA,CAAU,GAAG,CAAC,CAAA;AAErB,IAAA,IAAA,CAAK,GAAG,CAAA,GAAI,YAAA,CAAa,UAAA,EAAYjB,MAAAA,GAAO,MAAM,GAAG,CAAA;AAAA,EACzD;AAEA,EAAA,OAAO;AAAA,IACH,IAAA;AAAA,IACA,KAAA,EAAO,0BAAA,CAA2BA,MAAAA,EAAM,MAAM;AAAA,GAClD;AACJ;AAEO,SAAS,uBAAuB,MAAA,EAAQ;AAC3C,EAAA,MAAMiB,cAAY,EAAC;AAEnB,EAAA,IAAI,OAAO,IAAA,EAAM;AACb,IAAA,KAAA,MAAWjB,MAAAA,IAAQ,OAAO,IAAA,EAAM;AAC5B,MAAA,IAAIgB,eAAAA,CAAe,IAAA,CAAK,MAAA,CAAO,IAAA,EAAMhB,MAAI,CAAA,EAAG;AACxC,QAAA,MAAM,QAAA,GAAW,MAAA,CAAO,IAAA,CAAKA,MAAI,CAAA;AAEjC,QAAA,IAAI,SAAS,SAAA,EAAW;AACpB,UAAAiB,WAAAA,CAAUjB,MAAI,CAAA,GAAI,gBAAA,CAAiBA,QAAM,QAAQ,CAAA;AAAA,QACrD,CAAA,MAAO;AACH,UAAA,MAAM,IAAI,KAAA,CAAM,+BAAA,GAAkCA,MAAAA,GAAO,wBAAwB,CAAA;AAAA,QACrF;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAEA,EAAA,OAAOiB,WAAAA;AACX;;;AC3JA,SAAS,aAAA,CAAc,GAAA,EAAK,OAAA,EAAS,WAAA,EAAa;AAC9C,EAAA,MAAM,SAAS,EAAC;AAEhB,EAAA,KAAA,MAAWjB,UAAQ,GAAA,EAAK;AACpB,IAAA,IAAI,GAAA,CAAIA,MAAI,CAAA,CAAE,MAAA,EAAQ;AAClB,MAAA,MAAA,CAAOA,MAAI,CAAA,GAAI,WAAA,GACT,GAAA,CAAIA,MAAI,CAAA,CAAE,MAAA,GACV,QAAA,CAAS,GAAA,CAAIA,MAAI,CAAA,CAAE,MAAA,EAAQ,EAAE,SAAS,CAAA;AAAA,IAChD;AAAA,EACJ;AAEA,EAAA,OAAO,MAAA;AACX;AAEA,SAAS,mBAAA,CAAoB,GAAA,EAAK,OAAA,EAAS,WAAA,EAAa;AACpD,EAAA,MAAM,SAAS,EAAC;AAEhB,EAAA,KAAA,MAAW,CAACA,MAAAA,EAAM,MAAM,KAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG;AAC9C,IAAA,MAAA,CAAOA,MAAI,CAAA,GAAI;AAAA,MACX,OAAA,EAAS,MAAA,CAAO,OAAA,KACZ,WAAA,GACM,MAAA,CAAO,OAAA,CAAQ,MAAA,GACf,QAAA,CAAS,MAAA,CAAO,OAAA,CAAQ,MAAA,EAAQ,EAAE,SAAS,CAAA,CAAA;AAAA,MAErD,aAAa,MAAA,CAAO,WAAA,IAAe,cAAc,MAAA,CAAO,WAAA,EAAa,SAAS,WAAW;AAAA,KAC7F;AAAA,EACJ;AAEA,EAAA,OAAO,MAAA;AACX;AAEA,SAAS,YAAY,MAAA,EAAQ;AACzB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AACpC,IAAA,IAAI,OAAO,CAAC,CAAA,CAAE,KAAA,CAAM,WAAA,OAAkB,MAAA,EAAQ;AAC1C,MAAA,OAAO,IAAA;AAAA,IACX;AAAA,EACJ;AAEA,EAAA,OAAO,KAAA;AACX;AAEA,SAAS,iCAAiC,MAAA,EAAQ;AAC9C,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA;AAEjC,EAAA,OACI,MAAA,CAAO,QAAA,KAAa,KAAA,IACpB,MAAA,CAAO,KAAA,CAAM,MAAA,KAAW,CAAA,IACxB,UAAA,CAAW,IAAA,KAAS,YAAA,IACpB,UAAA,CAAW,KAAA,KAAU,IAAA;AAE7B;AAEA,SAAS,gBAAA,CAAiB,OAAA,EAAS,KAAA,EAAO,UAAA,EAAY;AAClD,EAAA,OAAO;AAAA,IACH,OAAA;AAAA,IACA,UAAA;AAAA,IACA,KAAA;AAAA,IACA,GAAG;AAAA,GACP;AACJ;AAEA,SAAS,WAAA,CAAYiD,MAAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,kBAAA,EAAoB;AAC3D,EAAA,MAAM,MAAA,GAAS,sBAAA,CAAc,KAAA,EAAOA,MAAAA,CAAM,MAAM,CAAA;AAChD,EAAA,IAAI,MAAA;AAEJ,EAAA,IAAI,WAAA,CAAY,MAAM,CAAA,EAAG;AACrB,IAAA,OAAO,gBAAA,CAAiB,IAAA,EAAM,IAAI,KAAA,CAAM,iDAAiD,CAAC,CAAA;AAAA,EAC9F;AAEA,EAAA,IAAI,kBAAA,EAAoB;AACpB,IAAA,MAAA,GAAS,WAAA,CAAY,MAAA,EAAQA,MAAAA,CAAM,qBAAA,EAAuBA,MAAK,CAAA;AAAA,EACnE;AAEA,EAAA,IAAI,CAAC,kBAAA,IAAsB,CAAC,MAAA,CAAO,KAAA,EAAO;AACtC,IAAA,MAAA,GAAS,WAAA,CAAY,MAAA,EAAQ,MAAA,CAAO,KAAA,EAAOA,MAAK,CAAA;AAChD,IAAA,IAAI,CAAC,OAAO,KAAA,EAAO;AACf,MAAA,OAAO,gBAAA;AAAA,QACH,IAAA;AAAA,QACA,IAAI,gBAAA,CAAiB,MAAA,CAAO,QAAQ,MAAA,CAAO,MAAA,EAAQ,OAAO,MAAM,CAAA;AAAA,QAChE,MAAA,CAAO;AAAA,OACX;AAAA,IACJ;AAAA,EACJ;AAEA,EAAA,OAAO,gBAAA,CAAiB,MAAA,CAAO,KAAA,EAAO,IAAA,EAAM,OAAO,UAAU,CAAA;AACjE;AAEO,IAAM,QAAN,MAAY;AAAA,EACf,WAAA,CAAY,MAAA,EAAQ,MAAA,EAAQhC,WAAAA,EAAW;AACnC,IAAA,IAAA,CAAK,eAAA,GAAkB,eAAA;AACvB,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,OAAA,GAAU,KAAA;AACf,IAAA,IAAA,CAAK,KAAA,GAAQ,EAAE,GAAG,aAAA,EAAM;AACxB,IAAA,IAAA,CAAK,OAAA,mBAAU,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA;AACjC,IAAA,IAAA,CAAK,UAAA,mBAAa,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA;AACpC,IAAA,IAAA,CAAK,KAAA,mBAAQ,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA;AAC/B,IAAA,IAAA,CAAK,SAAA,GAAYA,WAAAA,IAAa,sBAAA,CAAuB,MAAM,CAAA;AAE3D,IAAA,IAAI,MAAA,EAAQ;AACR,MAAA,IAAI,OAAO,eAAA,EAAiB;AACxB,QAAA,IAAA,CAAK,kBAAkB,MAAA,CAAO,eAAA;AAAA,MAClC;AAEA,MAAA,IAAI,OAAO,KAAA,EAAO;AACd,QAAA,KAAA,MAAW,KAAA,IAAS,MAAA,CAAO,IAAA,CAAK,aAAK,CAAA,EAAG;AACpC,UAAA,IAAI,MAAM,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,KAAK,CAAC,CAAA,EAAG;AACpC,YAAA,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA,GAAI,MAAA,CAAO,MAAM,KAAK,CAAA;AAAA,UAC1C;AAAA,QACJ;AAAA,MACJ;AAEA,MAAA,IAAI,OAAO,KAAA,EAAO;AACd,QAAA,KAAA,MAAW,CAACjB,QAAM,IAAI,CAAA,IAAK,OAAO,OAAA,CAAQ,MAAA,CAAO,KAAK,CAAA,EAAG;AACrD,UAAA,IAAA,CAAK,QAAA,CAASA,QAAM,IAAI,CAAA;AAAA,QAC5B;AAAA,MACJ;AAEA,MAAA,IAAI,OAAO,OAAA,EAAS;AAChB,QAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AACf,QAAA,KAAA,MAAW,CAACA,MAAAA,EAAM,KAAK,CAAA,IAAK,MAAA,CAAO,QAAQ,kBAAA,CAAmB,IAAA,CAAK,KAAK,CAAC,CAAA,EAAG;AACxE,UAAA,IAAA,CAAK,QAAA,CAASA,QAAM,KAAK,CAAA;AAAA,QAC7B;AAAA,MACJ;AAEA,MAAA,IAAI,OAAO,OAAA,EAAS;AAChB,QAAA,KAAA,MAAW,CAACA,QAAM,MAAM,CAAA,IAAK,OAAO,OAAA,CAAQ,MAAA,CAAO,OAAO,CAAA,EAAG;AACzD,UAAA,IAAA,CAAK,UAAA,CAAWA,QAAM,MAAM,CAAA;AAAA,QAChC;AAAA,MACJ;AAEA,MAAA,IAAI,OAAO,UAAA,EAAY;AACnB,QAAA,KAAA,MAAW,CAACA,QAAMqB,SAAQ,CAAA,IAAK,OAAO,OAAA,CAAQ,MAAA,CAAO,UAAU,CAAA,EAAG;AAC9D,UAAA,IAAA,CAAK,YAAA,CAAarB,QAAMqB,SAAQ,CAAA;AAAA,QACpC;AAAA,MACJ;AAAA,IACJ;AAEA,IAAA,IAAA,CAAK,wBAAwB,eAAA,CAAgB,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,MAAM,CAAC,CAAA;AAAA,EAClF;AAAA,EAEA,eAAe,GAAA,EAAK;AAChB,IAAA,SAAS,cAAA,CAAe,MAAM,OAAA,EAAS;AACnC,MAAA,KAAA,CAAM,IAAA,CAAK,EAAE,IAAA,EAAM,OAAA,EAAS,CAAA;AAAA,IAChC;AAEA,IAAA,MAAMJ,cAAY,IAAA,CAAK,SAAA;AACvB,IAAA,MAAM,QAAQ,EAAC;AAEf,IAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,GAAA,EAAK,SAAS,IAAA,EAAM;AACjC,MAAA,IAAIA,WAAAA,CAAU,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA,EAAG;AACrC,QAAAA,YAAU,IAAA,CAAK,IAAI,CAAA,CAAE,KAAA,CAAM,MAAM,cAAc,CAAA;AAAA,MACnD,CAAA,MAAO;AACH,QAAA,cAAA,CAAe,IAAA,EAAM,qBAAA,GAAwB,IAAA,CAAK,IAAA,GAAO,GAAG,CAAA;AAAA,MAChE;AAAA,IACJ,CAAC,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,SAAS,KAAA,GAAQ,KAAA;AAAA,EAClC;AAAA,EAEA,gBAAA,CAAiB,MAAA,EAAQ,IAAA,EAAMjB,MAAAA,EAAM,SAAS,IAAA,EAAM;AAChD,IAAA,MAAM,GAAA,GAAM;AAAA,MACR,IAAA;AAAA,MACA,IAAA,EAAAA;AAAA,KACJ;AACA,IAAA,MAAM,UAAA,GAAa;AAAA,MACf,IAAA;AAAA,MACA,IAAA,EAAAA,MAAAA;AAAA,MACA,MAAA;AAAA,MACA,cAAc,OAAO,MAAA,KAAW,YAAa,MAAA,IAAU,OAAO,OAAO,IAAA,KAAS,QAAA;AAAA,MAC9E,MAAA,EAAQ,IAAA;AAAA,MACR,KAAA,EAAO,IAAA;AAAA,MACP,QAAA,EAAU;AAAA;AAAA,KACd;AAEA,IAAA,IAAI,OAAO,WAAW,UAAA,EAAY;AAC9B,MAAA,UAAA,CAAW,KAAA,GAAQ,eAAA,CAAgB,MAAA,EAAQ,GAAG,CAAA;AAAA,IAClD,CAAA,MAAO;AACH,MAAA,IAAI,OAAO,WAAW,QAAA,EAAU;AAE5B,QAAA,MAAA,CAAO,cAAA,CAAe,YAAY,QAAA,EAAU;AAAA,UACxC,GAAA,GAAM;AACF,YAAA,MAAA,CAAO,cAAA,CAAe,YAAY,QAAA,EAAU;AAAA,cACxC,KAAA,EAAO,MAAM,MAAM;AAAA,aACtB,CAAA;AAED,YAAA,OAAO,UAAA,CAAW,MAAA;AAAA,UACtB;AAAA,SACH,CAAA;AAAA,MACL,CAAA,MAAO;AACH,QAAA,UAAA,CAAW,MAAA,GAAS,MAAA;AAAA,MACxB;AAGA,MAAA,MAAA,CAAO,cAAA,CAAe,YAAY,OAAA,EAAS;AAAA,QACvC,GAAA,GAAM;AACF,UAAA,MAAA,CAAO,cAAA,CAAe,YAAY,OAAA,EAAS;AAAA,YACvC,KAAA,EAAO,eAAA,CAAgB,UAAA,CAAW,MAAA,EAAQ,GAAG;AAAA,WAChD,CAAA;AAED,UAAA,OAAO,UAAA,CAAW,KAAA;AAAA,QACtB;AAAA,OACH,CAAA;AAED,MAAA,IAAI,SAAS,UAAA,EAAY;AACrB,QAAA,MAAA,CAAO,cAAA,CAAe,YAAY,UAAA,EAAY;AAAA,UAC1C,GAAA,GAAM;AACF,YAAA,MAAMkD,UAAS,UAAA,CAAW,MAAA;AAC1B,YAAA,MAAM,KAAA,GAAQ,gCAAA,CAAiCA,OAAM,CAAA,GAC/C,eAAA,CAAgB;AAAA,cACd,GAAGA,OAAAA;AAAA,cACH,OAAO,CAACA,OAAAA,CAAO,KAAA,CAAM,CAAC,EAAE,IAAI;AAAA,aAChC,EAAG,GAAG,CAAA,GACJ,IAAA;AAEN,YAAA,MAAA,CAAO,cAAA,CAAe,YAAY,UAAA,EAAY;AAAA,cAC1C;AAAA,aACH,CAAA;AAED,YAAA,OAAO,KAAA;AAAA,UACX;AAAA,SACH,CAAA;AAAA,MACL;AAAA,IACJ;AAEA,IAAA,OAAO,UAAA;AAAA,EACX;AAAA,EACA,UAAA,CAAWlD,QAAM,MAAA,EAAQ;AACrB,IAAA,IAAI,CAAC,MAAA,EAAQ;AACT,MAAA;AAAA,IACJ;AAEA,IAAA,IAAA,CAAK,OAAA,CAAQA,MAAI,CAAA,GAAI;AAAA,MACjB,IAAA,EAAM,QAAA;AAAA,MACN,IAAA,EAAMA,MAAAA;AAAA,MACN,OAAA,EAAS,OAAO,OAAA,GAAU,IAAA,CAAK,iBAAiB,MAAA,CAAO,OAAA,EAAS,eAAA,EAAiBA,MAAI,CAAA,GAAI,IAAA;AAAA,MACzF,aAAa,MAAA,CAAO,WAAA,GACd,OAAO,IAAA,CAAK,MAAA,CAAO,WAAW,CAAA,CAAE,MAAA;AAAA,QAC9B,CAAC,KAAK,QAAA,KAAa;AACf,UAAA,GAAA,CAAI,QAAQ,CAAA,GAAI,IAAA,CAAK,gBAAA,CAAiB,MAAA,CAAO,YAAY,QAAQ,CAAA,EAAG,kBAAA,EAAoB,QAAA,EAAUA,MAAI,CAAA;AACtG,UAAA,OAAO,GAAA;AAAA,QACX,CAAA;AAAA,wBACA,MAAA,CAAO,OAAO,IAAI;AAAA,OACtB,GACE;AAAA,KACV;AAAA,EACJ;AAAA,EACA,YAAA,CAAaA,QAAM,MAAA,EAAQ;AACvB,IAAA,IAAI,CAAC,MAAA,EAAQ;AACT,MAAA;AAAA,IACJ;AAEA,IAAA,IAAA,CAAK,WAAWA,MAAI,CAAA,GAAI,KAAK,gBAAA,CAAiB,MAAA,EAAQ,YAAYA,MAAI,CAAA;AAAA,EAC1E;AAAA,EACA,QAAA,CAASA,QAAM,MAAA,EAAQ;AACnB,IAAA,IAAI,CAAC,MAAA,EAAQ;AACT,MAAA;AAAA,IACJ;AAEA,IAAA,IAAA,CAAK,MAAMA,MAAI,CAAA,GAAI,KAAK,gBAAA,CAAiB,MAAA,EAAQ,QAAQA,MAAI,CAAA;AAAA,EACjE;AAAA,EAEA,gBAAgB,UAAA,EAAY;AACxB,IAAA,IAAI,CAAC,IAAA,CAAK,SAAA,CAAU,UAAU,CAAA,EAAG;AAC7B,MAAA,OAAO,IAAI,oBAAA,CAAqB,iBAAA,EAAmB,GAAA,GAAM,UAAU,CAAA;AAAA,IACvE;AAAA,EACJ;AAAA,EACA,kBAAA,CAAmB,YAAY,OAAA,EAAS;AACpC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,eAAA,CAAgB,UAAU,CAAA;AAE7C,IAAA,IAAI,KAAA,EAAO;AACP,MAAA,OAAO,KAAA;AAAA,IACX;AAEA,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,SAAA,CAAU,UAAU,CAAA;AAExC,IAAA,IAAI,CAAC,MAAA,CAAO,OAAA,IAAW,OAAA,EAAS;AAC5B,MAAA,OAAO,IAAI,WAAA,CAAY,YAAA,GAAe,UAAA,GAAa,gCAAgC,CAAA;AAAA,IACvF;AAEA,IAAA,IAAI,MAAA,CAAO,OAAA,IAAW,CAAC,OAAA,EAAS;AAC5B,MAAA,IAAI,CAAC,YAAY,IAAA,EAAM,MAAA,CAAO,SAAS,EAAA,EAAI,KAAK,EAAE,OAAA,EAAS;AACvD,QAAA,OAAO,IAAI,WAAA,CAAY,YAAA,GAAe,UAAA,GAAa,4BAA4B,CAAA;AAAA,MACnF;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,yBAAA,CAA0B,YAAY,cAAA,EAAgB;AAClD,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,eAAA,CAAgB,UAAU,CAAA;AAE7C,IAAA,IAAI,KAAA,EAAO;AACP,MAAA,OAAO,KAAA;AAAA,IACX;AAEA,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,SAAA,CAAU,UAAU,CAAA;AACxC,IAAA,MAAM,UAAA,GAAmB,QAAQ,cAAc,CAAA;AAE/C,IAAA,IAAI,CAAC,OAAO,WAAA,EAAa;AACrB,MAAA,OAAO,IAAI,WAAA,CAAY,YAAA,GAAe,UAAA,GAAa,4BAA4B,CAAA;AAAA,IACnF;AAEA,IAAA,IAAI,CAAC,MAAA,CAAO,WAAA,CAAY,UAAA,CAAW,IAAI,CAAA,IACnC,CAAC,MAAA,CAAO,WAAA,CAAY,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC1C,MAAA,OAAO,IAAI,oBAAA,CAAqB,4BAAA,EAA8B,cAAc,CAAA;AAAA,IAChF;AAAA,EACJ;AAAA,EACA,kBAAkB,YAAA,EAAc;AAC5B,IAAA,IAAI,CAAC,IAAA,CAAK,WAAA,CAAY,YAAY,CAAA,EAAG;AACjC,MAAA,OAAO,IAAI,oBAAA,CAAqB,kBAAA,EAAoB,YAAY,CAAA;AAAA,IACpE;AAAA,EACJ;AAAA,EAEA,kBAAA,CAAmB,YAAY,OAAA,EAAS;AACpC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,kBAAA,CAAmB,UAAA,EAAY,OAAO,CAAA;AAEzD,IAAA,IAAI,KAAA,EAAO;AACP,MAAA,OAAO,gBAAA,CAAiB,MAAM,KAAK,CAAA;AAAA,IACvC;AAEA,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,SAAA,CAAU,UAAU,CAAA;AAExC,IAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACjB,MAAA,OAAO,gBAAA,CAAiB,MAAM,IAAI,CAAA;AAAA,IACtC;AAEA,IAAA,OAAO,YAAY,IAAA,EAAM,MAAA,CAAO,OAAA,EAAS,OAAA,IAAW,IAAI,KAAK,CAAA;AAAA,EACjE;AAAA,EACA,qBAAA,CAAsB,UAAA,EAAY,cAAA,EAAgB,KAAA,EAAO;AACrD,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,yBAAA,CAA0B,UAAA,EAAY,cAAc,CAAA;AAEvE,IAAA,IAAI,KAAA,EAAO;AACP,MAAA,OAAO,gBAAA,CAAiB,MAAM,KAAK,CAAA;AAAA,IACvC;AAEA,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,SAAA,CAAU,UAAU,CAAA;AACxC,IAAA,MAAM,UAAA,GAAmB,QAAQ,cAAc,CAAA;AAE/C,IAAA,OAAO,WAAA,CAAY,IAAA,EAAM,MAAA,CAAO,WAAA,CAAY,UAAA,CAAW,IAAI,CAAA,IAAK,MAAA,CAAO,WAAA,CAAY,UAAA,CAAW,QAAQ,CAAA,EAAG,OAAO,KAAK,CAAA;AAAA,EACzH;AAAA,EACA,iBAAiB,IAAA,EAAM;AACnB,IAAA,IAAI,IAAA,CAAK,SAAS,aAAA,EAAe;AAC7B,MAAA,OAAO,gBAAA,CAAiB,IAAA,EAAM,IAAI,KAAA,CAAM,wBAAwB,CAAC,CAAA;AAAA,IACrE;AAEA,IAAA,OAAO,IAAA,CAAK,aAAA,CAAc,IAAA,CAAK,QAAA,EAAU,KAAK,KAAK,CAAA;AAAA,EACvD;AAAA,EACA,aAAA,CAAc,cAAc,KAAA,EAAO;AAE/B,IAAA,IAAU,QAAA,CAAS,YAAY,CAAA,CAAE,MAAA,EAAQ;AACrC,MAAA,OAAO,gBAAA,CAAiB,IAAA,EAAM,IAAI,KAAA,CAAM,yDAA0D,CAAC,CAAA;AAAA,IACvG;AAEA,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,iBAAA,CAAkB,YAAY,CAAA;AAEjD,IAAA,IAAI,KAAA,EAAO;AACP,MAAA,OAAO,gBAAA,CAAiB,MAAM,KAAK,CAAA;AAAA,IACvC;AAEA,IAAA,OAAO,YAAY,IAAA,EAAM,IAAA,CAAK,YAAY,YAAY,CAAA,EAAG,OAAO,IAAI,CAAA;AAAA,EACxE;AAAA,EACA,SAAA,CAAU,UAAU,KAAA,EAAO;AACvB,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA;AAExC,IAAA,IAAI,CAAC,UAAA,EAAY;AACb,MAAA,OAAO,iBAAiB,IAAA,EAAM,IAAI,oBAAA,CAAqB,cAAA,EAAgB,QAAQ,CAAC,CAAA;AAAA,IACpF;AAEA,IAAA,OAAO,WAAA,CAAY,IAAA,EAAM,UAAA,EAAY,KAAA,EAAO,KAAK,CAAA;AAAA,EACrD;AAAA,EACA,KAAA,CAAM,QAAQ,KAAA,EAAO;AACjB,IAAA,IAAI,OAAO,MAAA,KAAW,QAAA,KAAa,CAAC,MAAA,IAAU,CAAC,OAAO,IAAA,CAAA,EAAO;AACzD,MAAA,OAAO,gBAAA,CAAiB,IAAA,EAAM,IAAI,oBAAA,CAAqB,YAAY,CAAC,CAAA;AAAA,IACxE;AAEA,IAAA,IAAI,OAAO,MAAA,KAAW,QAAA,IAAY,CAAC,OAAO,KAAA,EAAO;AAC7C,MAAA,MAAA,GAAS,IAAA,CAAK,gBAAA,CAAiB,MAAA,EAAQ,MAAA,EAAQ,WAAW,CAAA;AAAA,IAC9D;AAEA,IAAA,OAAO,WAAA,CAAY,IAAA,EAAM,MAAA,EAAQ,KAAA,EAAO,KAAK,CAAA;AAAA,EACjD;AAAA,EAEA,kBAAA,CAAmB,YAAA,EAAc,KAAA,EAAO,IAAA,EAAMA,MAAAA,EAAM;AAChD,IAAA,OAAO,cAAA,CAAe,MAAM,KAAA,EAAO,IAAA,CAAK,cAAc,YAAA,EAAc,KAAK,CAAA,EAAG,IAAA,EAAMA,MAAI,CAAA;AAAA,EAC1F;AAAA,EACA,6BAAA,CAA8B,WAAA,EAAa,IAAA,EAAMA,MAAAA,EAAM;AACnD,IAAA,OAAO,cAAA,CAAe,MAAM,WAAA,CAAY,KAAA,EAAO,KAAK,gBAAA,CAAiB,WAAW,CAAA,EAAG,IAAA,EAAMA,MAAI,CAAA;AAAA,EACjG;AAAA,EACA,gBAAA,CAAiB,GAAA,EAAK,IAAA,EAAMA,MAAAA,EAAM;AAC9B,IAAA,MAAM,SAAS,EAAC;AAEhB,IAAA,IAAA,CAAK,MAAA,CAAO,KAAK,GAAA,EAAK;AAAA,MAClB,KAAA,EAAO,aAAA;AAAA,MACP,KAAA,EAAO,CAAC,WAAA,KAAgB;AACpB,QAAA,MAAA,CAAO,IAAA,CAAK,MAAM,MAAA,EAAQ,IAAA,CAAK,8BAA8B,WAAA,EAAa,IAAA,EAAMA,MAAI,CAAC,CAAA;AAAA,MACzF;AAAA,KACH,CAAA;AAED,IAAA,OAAO,MAAA;AAAA,EACX;AAAA,EAEA,SAAA,CAAU,UAAA,EAAY,gBAAA,GAAmB,IAAA,EAAM;AAC3C,IAAA,MAAM,MAAA,GAAe,QAAQ,UAAU,CAAA;AACvC,IAAA,MAAM,cAAc,MAAA,CAAO,MAAA,IAAU,gBAAA,GAC/B,IAAA,CAAK,QAAQ,MAAA,CAAO,IAAI,CAAA,IAAK,IAAA,CAAK,QAAQ,MAAA,CAAO,QAAQ,IACzD,IAAA,CAAK,OAAA,CAAQ,OAAO,IAAI,CAAA;AAE9B,IAAA,OAAO,WAAA,IAAe,IAAA;AAAA,EAC1B;AAAA,EACA,gBAAA,CAAiB,UAAA,EAAY,gBAAA,GAAmB,IAAA,EAAM;AAClD,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,SAAA,CAAU,UAAA,EAAY,gBAAgB,CAAA;AAE1D,IAAA,OAAO,MAAA,IAAU,OAAO,OAAA,IAAW,IAAA;AAAA,EACvC;AAAA,EACA,mBAAA,CAAoB,YAAYA,MAAAA,EAAM;AAClC,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,cAAA,CAAe,UAAU,KAAK,IAAA,CAAK,OAAA,CAAQ,WAAA,GACzD,IAAA,CAAK,QAAQ,UAAU,CAAA,CAAE,WAAA,CAAYA,MAAI,KAAK,IAAA,GAC9C,IAAA;AAAA,EACV;AAAA,EACA,WAAA,CAAY,YAAA,EAAc,gBAAA,GAAmB,IAAA,EAAM;AAC/C,IAAA,MAAMqB,SAAAA,GAAiB,SAAS,YAAY,CAAA;AAC5C,IAAA,MAAM,gBAAgBA,SAAAA,CAAS,MAAA,IAAU,gBAAA,GACnC,IAAA,CAAK,WAAWA,SAAAA,CAAS,IAAI,CAAA,IAAK,IAAA,CAAK,WAAWA,SAAAA,CAAS,QAAQ,IACnE,IAAA,CAAK,UAAA,CAAWA,UAAS,IAAI,CAAA;AAEnC,IAAA,OAAO,aAAA,IAAiB,IAAA;AAAA,EAC5B;AAAA,EACA,QAAQrB,MAAAA,EAAM;AACV,IAAA,OAAO,cAAA,CAAe,KAAK,IAAA,CAAK,KAAA,EAAOA,MAAI,CAAA,GAAI,IAAA,CAAK,KAAA,CAAMA,MAAI,CAAA,GAAI,IAAA;AAAA,EACtE;AAAA,EAEA,QAAA,GAAW;AACP,IAAA,SAAS,SAAA,CAAUA,QAAMmD,OAAAA,EAAQ;AAC7B,MAAA,OAAOA,OAAAA,GAAS,CAAA,CAAA,EAAInD,MAAI,CAAA,CAAA,CAAA,GAAM,KAAKA,MAAI,CAAA,EAAA,CAAA;AAAA,IAC3C;AAEA,IAAA,SAAS,QAAA,CAAS,MAAA,EAAQA,MAAAA,EAAM,MAAA,EAAQ,UAAA,EAAY;AAChD,MAAA,IAAI,MAAA,CAAO,GAAA,CAAIA,MAAI,CAAA,EAAG;AAClB,QAAA,OAAO,MAAA,CAAO,IAAIA,MAAI,CAAA;AAAA,MAC1B;AAEA,MAAA,MAAA,CAAO,GAAA,CAAIA,QAAM,KAAK,CAAA;AACtB,MAAA,IAAI,UAAA,CAAW,WAAW,IAAA,EAAM;AAC5B,QAAA,IAAA,CAAK,UAAA,CAAW,MAAA,EAAQ,SAAS,IAAA,EAAM;AACnC,UAAA,IAAI,IAAA,CAAK,IAAA,KAAS,MAAA,IAAU,IAAA,CAAK,SAAS,UAAA,EAAY;AAClD,YAAA;AAAA,UACJ;AAEA,UAAA,MAAM,MAAM,IAAA,CAAK,IAAA,KAAS,MAAA,GAAS,MAAA,CAAO,QAAQ,MAAA,CAAO,UAAA;AACzD,UAAA,MAAM,SAAA,GAAY,IAAA,CAAK,IAAA,KAAS,MAAA,GAAS,WAAA,GAAc,gBAAA;AAEvD,UAAA,IAAI,CAAC,cAAA,CAAe,IAAA,CAAK,GAAA,EAAK,IAAA,CAAK,IAAI,CAAA,EAAG;AACtC,YAAA,MAAA,CAAO,IAAA,CAAK,CAAA,EAAG,SAAA,CAAUA,MAAAA,EAAM,WAAW,WAAW,CAAC,CAAA,+BAAA,EAAkC,SAAA,CAAU,KAAK,IAAA,EAAM,IAAA,CAAK,IAAA,KAAS,MAAM,CAAC,CAAA,CAAE,CAAA;AACpI,YAAA,MAAA,CAAO,GAAA,CAAIA,QAAM,IAAI,CAAA;AAAA,UACzB,CAAA,MAAA,IAAW,QAAA,CAAS,MAAA,EAAQ,IAAA,CAAK,IAAA,EAAM,WAAW,GAAA,CAAI,IAAA,CAAK,IAAI,CAAC,CAAA,EAAG;AAC/D,YAAA,MAAA,CAAO,IAAA,CAAK,CAAA,EAAG,SAAA,CAAUA,MAAAA,EAAM,WAAW,WAAW,CAAC,CAAA,+BAAA,EAAkC,SAAA,CAAU,KAAK,IAAA,EAAM,IAAA,CAAK,IAAA,KAAS,MAAM,CAAC,CAAA,CAAE,CAAA;AACpI,YAAA,MAAA,CAAO,GAAA,CAAIA,QAAM,IAAI,CAAA;AAAA,UACzB;AAAA,QACJ,GAAG,IAAI,CAAA;AAAA,MACX;AAAA,IACJ;AAEA,IAAA,MAAM,SAAS,EAAC;AAChB,IAAA,IAAI,WAAA,uBAAkB,GAAA,EAAI;AAC1B,IAAA,IAAI,gBAAA,uBAAuB,GAAA,EAAI;AAE/B,IAAA,KAAA,MAAW,GAAA,IAAO,KAAK,KAAA,EAAO;AAC1B,MAAA,QAAA,CAAS,MAAM,GAAA,EAAK,WAAA,EAAa,IAAA,CAAK,KAAA,CAAM,GAAG,CAAC,CAAA;AAAA,IACpD;AAEA,IAAA,KAAA,MAAW,GAAA,IAAO,KAAK,UAAA,EAAY;AAC/B,MAAA,QAAA,CAAS,MAAM,GAAA,EAAK,gBAAA,EAAkB,IAAA,CAAK,UAAA,CAAW,GAAG,CAAC,CAAA;AAAA,IAC9D;AAEA,IAAA,MAAM,gBAAA,GAAmB,CAAC,GAAG,WAAA,CAAY,IAAA,EAAM,CAAA,CAAE,MAAA,CAAO,CAAAA,MAAAA,KAAQ,WAAA,CAAY,GAAA,CAAIA,MAAI,CAAC,CAAA;AACrF,IAAA,MAAM,qBAAA,GAAwB,CAAC,GAAG,gBAAA,CAAiB,IAAA,EAAM,CAAA,CAAE,MAAA,CAAO,CAAAA,MAAAA,KAAQ,gBAAA,CAAiB,GAAA,CAAIA,MAAI,CAAC,CAAA;AAEpG,IAAA,IAAI,gBAAA,CAAiB,MAAA,IAAU,qBAAA,CAAsB,MAAA,EAAQ;AACzD,MAAA,OAAO;AAAA,QACH,MAAA;AAAA,QACA,KAAA,EAAO,gBAAA;AAAA,QACP,UAAA,EAAY;AAAA,OAChB;AAAA,IACJ;AAEA,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EACA,IAAA,CAAK,aAAa,MAAA,EAAQ;AACtB,IAAA,OAAO;AAAA,MACH,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,iBAAiB,IAAA,CAAK,eAAA;AAAA,MACtB,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,OAAO,aAAA,CAAc,IAAA,CAAK,KAAA,EAAO,CAAC,QAAQ,WAAW,CAAA;AAAA,MACrD,YAAY,aAAA,CAAc,IAAA,CAAK,UAAA,EAAY,CAAC,QAAQ,WAAW,CAAA;AAAA,MAC/D,SAAS,mBAAA,CAAoB,IAAA,CAAK,OAAA,EAAS,CAAC,QAAQ,WAAW;AAAA,KACnE;AAAA,EACJ;AAAA,EACA,QAAA,GAAW;AACP,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,IAAA,EAAM,CAAA;AAAA,EACrC;AACJ,CAAA;;;AC9fA,SAAS,WAAA,CAAY,GAAG,CAAA,EAAG;AACvB,EAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,EAAG;AAC3C,IAAA,OAAO,OAAO,MAAM,QAAA,GACd,CAAA,GAAI,IACJ,CAAA,CAAE,OAAA,CAAQ,aAAa,EAAE,CAAA;AAAA,EACnC;AAEA,EAAA,OAAO,CAAA,IAAK,IAAA;AAChB;AAEA,SAAS,YAAA,CAAa,KAAK,KAAA,EAAO;AAC9B,EAAA,MAAM,MAAA,mBAAS,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA;AAEjC,EAAA,KAAA,MAAW,IAAA,IAAQ,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,EAAG;AACjC,IAAA,IAAI,KAAA,CAAM,QAAA,CAAS,IAAI,CAAA,EAAG;AACtB,MAAA,MAAA,CAAO,IAAI,CAAA,GAAI,GAAA,CAAI,IAAI,CAAA;AAAA,IAC3B;AAAA,EACJ;AAEA,EAAA,OAAO,MAAA;AACX;AAEA,SAAS,UAAA,CAAW,IAAA,EAAM,GAAA,EAAK,MAAA,EAAQ;AACnC,EAAA,MAAM,MAAA,GAAS,EAAE,GAAG,IAAA,EAAK;AAEzB,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG;AAC5C,IAAA,MAAA,CAAO,GAAG,CAAA,GAAI;AAAA,MACV,GAAG,OAAO,GAAG,CAAA;AAAA,MACb,GAAG,MAAA,GAAS,YAAA,CAAa,KAAA,EAAO,MAAM,CAAA,GAAI;AAAA,KAC9C;AAAA,EACJ;AAEA,EAAA,OAAO,MAAA;AACX;AAEe,SAAR,GAAA,CAAqB,MAAM,GAAA,EAAK;AACnC,EAAA,MAAM,MAAA,GAAS,EAAE,GAAG,IAAA,EAAK;AAEzB,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG;AAC7C,IAAA,QAAQ,IAAA;AAAM,MACV,KAAK,SAAA;AACD,QAAA,MAAA,CAAO,IAAI,CAAA,GAAI,OAAA,CAAQ,KAAK,CAAA;AAC5B,QAAA;AAAA,MAEJ,KAAK,iBAAA;AACD,QAAA,MAAA,CAAO,IAAI,CAAA,GAAI,IAAA,CAAK,IAAI,IAClB,CAAC,GAAG,IAAA,CAAK,IAAI,CAAA,EAAG,GAAG,KAAK,CAAA,GACxB,SAAS,EAAC;AAChB,QAAA;AAAA,MAEJ,KAAK,OAAA;AACD,QAAA,MAAA,CAAO,IAAI,CAAA,GAAI,EAAE,GAAG,IAAA,CAAK,IAAI,CAAA,EAAE;AAC/B,QAAA,KAAA,MAAW,CAACA,MAAAA,EAAMoD,MAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC/C,UAAA,MAAA,CAAO,IAAI,EAAEpD,MAAI,CAAA,GAAI,MAAM,OAAA,CAAQoD,MAAK,CAAA,GAAIA,MAAAA,GAAQ,EAAC;AAAA,QACzD;AACA,QAAA;AAAA,MAEJ,KAAK,SAAA;AACD,QAAA,MAAA,CAAO,IAAI,CAAA,GAAI,EAAE,GAAG,IAAA,CAAK,IAAI,CAAA,EAAE;AAE/B,QAAA,KAAA,MAAW,CAACpD,MAAAA,EAAM,MAAM,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAChD,UAAA,MAAM,SAAS,MAAA,CAAO,IAAI,CAAA,CAAEA,MAAI,KAAK,EAAC;AACtC,UAAA,MAAM,OAAA,GAAU,MAAA,CAAO,IAAI,CAAA,CAAEA,MAAI,CAAA,GAAI;AAAA,YACjC,OAAA,EAAS,OAAO,OAAA,IAAW,IAAA;AAAA,YAC3B,WAAA,EAAa;AAAA,cACT,GAAG,MAAA,CAAO;AAAA;AACd,WACJ;AAEA,UAAA,IAAI,CAAC,MAAA,EAAQ;AACT,YAAA;AAAA,UACJ;AAEA,UAAA,OAAA,CAAQ,OAAA,GAAU,MAAA,CAAO,OAAA,GACnB,WAAA,CAAY,OAAA,CAAQ,SAAS,MAAA,CAAO,OAAO,CAAA,GAC3C,OAAA,CAAQ,OAAA,IAAW,IAAA;AAEzB,UAAA,KAAA,MAAW,CAAC,cAAA,EAAgB,eAAe,CAAA,IAAK,MAAA,CAAO,QAAQ,MAAA,CAAO,WAAA,IAAe,EAAE,CAAA,EAAG;AACtF,YAAA,OAAA,CAAQ,WAAA,CAAY,cAAc,CAAA,GAAI,eAAA,GAChC,WAAA,CAAY,QAAQ,WAAA,CAAY,cAAc,CAAA,EAAG,eAAe,CAAA,GAChE,IAAA;AAAA,UACV;AAEA,UAAA,IAAI,CAAC,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,WAAW,EAAE,MAAA,EAAQ;AAC1C,YAAA,OAAA,CAAQ,WAAA,GAAc,IAAA;AAAA,UAC1B;AAAA,QACJ;AACA,QAAA;AAAA,MAEJ,KAAK,OAAA;AAAA,MACL,KAAK,YAAA;AACD,QAAA,MAAA,CAAO,IAAI,CAAA,GAAI,EAAE,GAAG,IAAA,CAAK,IAAI,CAAA,EAAE;AAC/B,QAAA,KAAA,MAAW,CAACA,MAAAA,EAAM,MAAM,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAChD,UAAA,MAAA,CAAO,IAAI,CAAA,CAAEA,MAAI,CAAA,GAAI,WAAA,CAAY,OAAO,IAAI,CAAA,CAAEA,MAAI,CAAA,EAAG,MAAM,CAAA;AAAA,QAC/D;AACA,QAAA;AAAA,MAEJ,KAAK,cAAA;AACD,QAAA,MAAA,CAAO,IAAI,CAAA,GAAI;AAAA,UACX,GAAG,KAAK,IAAI,CAAA;AAAA,UACZ,GAAG;AAAA,SACP;AACA,QAAA;AAAA,MAEJ,KAAK,OAAA;AAAA,MACL,KAAK,UAAA;AACD,QAAA,MAAA,CAAO,IAAI,CAAA,GAAI,UAAA,CAAW,IAAA,CAAK,IAAI,GAAG,KAAK,CAAA;AAC3C,QAAA;AAAA,MAEJ,KAAK,QAAA;AAAA,MACL,KAAK,QAAA;AACD,QAAA,MAAA,CAAO,IAAI,IAAI,UAAA,CAAW,IAAA,CAAK,IAAI,CAAA,EAAG,KAAA,EAAO,CAAC,OAAO,CAAC,CAAA;AACtD,QAAA;AAAA,MAEJ,KAAK,MAAA;AACD,QAAA,MAAA,CAAO,IAAI,CAAA,GAAI,UAAA,CAAW,IAAA,CAAK,IAAI,CAAA,EAAG,KAAA,EAAO,CAAC,MAAA,EAAQ,WAAA,EAAa,OAAA,EAAS,UAAA,EAAY,aAAa,CAAC,CAAA;AACtG,QAAA;AAAA;AACR,EACJ;AAEA,EAAA,OAAO,MAAA;AACX;;;ACjHA,SAAS,aAAa,MAAA,EAAQ;AAC1B,EAAA,MAAMa,OAAAA,GAAQ,aAAa,MAAM,CAAA;AACjC,EAAA,MAAME,KAAAA,GAAO,aAAa,MAAM,CAAA;AAChC,EAAA,MAAMsC,UAAAA,GAAW,gBAAgB,MAAM,CAAA;AACvC,EAAA,MAAM,EAAE,eAAA,EAAAC,gBAAAA,EAAiB,eAAAC,cAAAA,EAAc,GAAI,gBAAgBxC,KAAI,CAAA;AAE/D,EAAA,MAAM,MAAA,GAAS;AAAA,IACX,KAAA,EAAO,IAAA;AAAA,IACP,WAAA,EAAa,CAAAyC,OAAAA,KAAU,IAAI,MAAMA,OAAAA,EAAQ,MAAA,EAAQ,MAAA,CAAO,KAAA,CAAM,SAAS,CAAA;AAAA,IAEvE,QAAA;AAAA,IACA,KAAA,EAAA3C,OAAAA;AAAA,IACA,QAAA,EAAAwC,UAAAA;AAAA,IAEA,IAAA,EAAAtC,KAAAA;AAAA,IACA,MAAMA,KAAAA,CAAK,IAAA;AAAA,IACX,UAAUA,KAAAA,CAAK,QAAA;AAAA,IACf,SAASA,KAAAA,CAAK,OAAA;AAAA,IAEd,eAAA,EAAAuC,gBAAAA;AAAA,IACA,aAAA,EAAAC,cAAAA;AAAA,IAEA,KAAK,SAAA,EAAW;AACZ,MAAA,MAAM,IAAA,GAAO,GAAA,CAAI,EAAC,EAAG,MAAM,CAAA;AAE3B,MAAA,OAAO,YAAA;AAAA,QACH,OAAO,cAAc,UAAA,GACf,SAAA,CAAU,IAAI,CAAA,GACd,GAAA,CAAI,MAAM,SAAS;AAAA,OAC7B;AAAA,IACJ;AAAA,GACJ;AAEA,EAAA,MAAA,CAAO,KAAA,GAAQ,IAAI,KAAA,CAAM;AAAA,IACrB,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,iBAAiB,MAAA,CAAO,eAAA;AAAA,IACxB,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,YAAY,MAAA,CAAO,UAAA;AAAA,IACnB,MAAM,MAAA,CAAO;AAAA,KACd,MAAM,CAAA;AAET,EAAA,OAAO,MAAA;AACX;AAEA,IAAO,iBAAQ,CAAA,MAAA,KAAU,YAAA,CAAa,IAAI,EAAC,EAAG,MAAM,CAAC,CAAA;ACpDrD,IAAME,QAAAA,GAAU,aAAA,CAAc,MAAA,CAAA,IAAA,CAAY,GAAG,CAAA;AAC7C,IAAM,KAAA,GAAQA,SAAQ,oBAAoB,CAAA;AAE1C,IAAO,kBAAA,GAAQ,KAAA;;;ACFf,IAAMA,QAAAA,GAAUC,aAAAA,CAAc,MAAA,CAAA,IAAA,CAAY,GAAG,CAAA;AAC7C,IAAM,UAAA,GAAaD,SAAQ,4BAA4B,CAAA;AACvD,IAAM,aAAA,GAAgBA,SAAQ,8BAA8B,CAAA;AAC5D,IAAM,WAAA,GAAcA,SAAQ,4BAA4B,CAAA;AAExD,IAAM,MAAA,GAAS,MAAA,CAAO,MAAA,KAAW,CAAC,MAAA,EAAQpC,SAAAA,KAAa,MAAA,CAAO,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,MAAA,EAAQA,SAAQ,CAAA,CAAA;AAC5G,IAAM,YAAA,GAAe,WAAA;AAErB,SAAS,kBAAkB,IAAA,EAAM;AAC7B,EAAA,MAAM,MAAA,mBAAS,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA;AAEjC,EAAA,KAAA,MAAW,CAAC,UAAA,EAAY,MAAM,KAAK,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,EAAG;AACrD,IAAA,IAAI,WAAA,GAAc,IAAA;AAElB,IAAA,IAAI,OAAO,WAAA,EAAa;AACpB,MAAA,WAAA,mBAAc,MAAA,CAAO,OAAO,IAAI,CAAA;AAEhC,MAAA,KAAA,MAAW,CAACrB,QAAM,UAAU,CAAA,IAAK,OAAO,OAAA,CAAQ,MAAA,CAAO,WAAW,CAAA,EAAG;AACjE,QAAA,WAAA,CAAYA,MAAI,IAAI,UAAA,CAAW,MAAA;AAAA,MACnC;AAAA,IACJ;AAEA,IAAA,MAAA,CAAO,UAAA,CAAW,MAAA,CAAO,CAAC,CAAC,CAAA,GAAI;AAAA,MAC3B,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,IAAA,GAAO,OAAA,CAAQ,aAAA,EAAe,EAAE,CAAA,CAAE,MAAM,mBAAmB,CAAA,CAAE,CAAC,CAAA,CAAE,MAAK,IAAK,IAAA;AAAA,MACjG;AAAA,KACJ;AAAA,EACJ;AAEA,EAAA,OAAO,MAAA;AACX;AAEA,SAAS,eAAA,CAAgB,MAAM,SAAA,EAAW;AACtC,EAAA,MAAM,MAAA,mBAAS,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA;AAGjC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,EAAG;AAC7C,IAAA,IAAI,KAAA,EAAO;AACP,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,KAAA,CAAM,MAAA,IAAU,KAAA;AAAA,IAClC;AAAA,EACJ;AAGA,EAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,IAAA,CAAK,SAAS,CAAA,EAAG;AACtC,IAAA,IAAI,MAAA,CAAO,IAAA,EAAM,GAAG,CAAA,EAAG;AACnB,MAAA,IAAI,SAAA,CAAU,GAAG,CAAA,CAAE,MAAA,EAAQ;AACvB,QAAA,MAAA,CAAO,GAAG,IAAI,YAAA,CAAa,IAAA,CAAK,UAAU,GAAG,CAAA,CAAE,MAAM,CAAA,GAC/C,MAAA,CAAO,GAAG,CAAA,GAAI,GAAA,GAAM,UAAU,GAAG,CAAA,CAAE,OAAO,IAAA,EAAK,GAC/C,SAAA,CAAU,GAAG,CAAA,CAAE,MAAA;AAAA,MACzB,CAAA,MAAO;AACH,QAAA,OAAO,OAAO,GAAG,CAAA;AAAA,MACrB;AAAA,IACJ,CAAA,MAAO;AACH,MAAA,IAAI,SAAA,CAAU,GAAG,CAAA,CAAE,MAAA,EAAQ;AACvB,QAAA,MAAA,CAAO,GAAG,IAAI,SAAA,CAAU,GAAG,EAAE,MAAA,CAAO,OAAA,CAAQ,cAAc,EAAE,CAAA;AAAA,MAChE;AAAA,IACJ;AAAA,EACJ;AAEA,EAAA,OAAO,MAAA;AACX;AAEA,SAAS,iCAAiC,YAAA,EAAc;AACpD,EAAA,MAAM,SAAS,EAAC;AAEhB,EAAA,KAAA,MAAW,CAAC,KAAK,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,YAAA,IAAgB,EAAE,CAAA,EAAG;AAC3D,IAAA,MAAA,CAAO,GAAG,IAAI,OAAO,KAAA,KAAU,WACzB,EAAE,MAAA,EAAQ,OAAM,GAChB,KAAA;AAAA,EACV;AAEA,EAAA,OAAO,MAAA;AACX;AAEA,SAAS,YAAA,CAAa,MAAM,SAAA,EAAW;AACnC,EAAA,MAAM,SAAS,EAAC;AAGhB,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACpB,IAAA,IAAI,SAAA,CAAU,GAAG,CAAA,KAAM,IAAA,EAAM;AACzB,MAAA;AAAA,IACJ;AAEA,IAAA,MAAM,WAAA,GAAc,SAAA,CAAU,GAAG,CAAA,IAAK,EAAC;AAEvC,IAAA,MAAA,CAAO,GAAG,CAAA,GAAI;AAAA,MACV,OAAA,EAAS,GAAA,IAAO,SAAA,IAAa,SAAA,IAAa,WAAA,GACpC,YAAY,OAAA,GACZ,IAAA,CAAK,GAAG,CAAA,CAAE,OAAA,IAAW,IAAA;AAAA,MAC3B,WAAA,EAAa,eAAA;AAAA,QACT,IAAA,CAAK,GAAG,CAAA,CAAE,WAAA,IAAe,EAAC;AAAA,QAC1B,gCAAA,CAAiC,YAAY,WAAW;AAAA;AAC5D,KACJ;AAAA,EACJ;AAGA,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,WAAW,KAAK,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA,EAAG;AACxD,IAAA,IAAI,WAAA,IAAe,CAAC,MAAA,CAAO,IAAA,EAAM,GAAG,CAAA,EAAG;AACnC,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI;AAAA,QACV,OAAA,EAAS,YAAY,OAAA,IAAW,IAAA;AAAA,QAChC,WAAA,EAAa,WAAA,CAAY,WAAA,GACnB,eAAA,CAAgB,IAAI,gCAAA,CAAiC,WAAA,CAAY,WAAW,CAAC,CAAA,GAC7E;AAAA,OACV;AAAA,IACJ;AAAA,EACJ;AAEA,EAAA,OAAO,MAAA;AACX;AAEA,IAAO,YAAA,GAAQ;AAAA,EACX,KAAA,EAAO,eAAA,CAAgB,WAAA,EAAa,kBAAA,CAAM,KAAK,CAAA;AAAA,EAC/C,SAAS,YAAA,CAAa,iBAAA,CAAkB,UAAU,CAAA,EAAG,mBAAM,OAAO,CAAA;AAAA,EAClE,UAAA,EAAY,eAAA,CAAgB,aAAA,EAAe,kBAAA,CAAM,UAAU;AAC/D,CAAA;;;ACrHA,IAAA,YAAA,GAAA,EAAA;AAAA,QAAA,CAAA,YAAA,EAAA;AAAA,EAAA,OAAA,EAAA,MAAA,eAAA;AAAA,EAAA,MAAA,EAAA,MAAA,cAAA;AAAA,EAAA,aAAA,EAAA,MAAA,qBAAA;AAAA,EAAA,iBAAA,EAAA,MAAA,yBAAA;AAAA,EAAA,KAAA,EAAA,MAAA,aAAA;AAAA,EAAA,QAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,GAAA,EAAA,MAAA,WAAA;AAAA,EAAA,GAAA,EAAA,MAAA,WAAA;AAAA,EAAA,aAAA,EAAA,MAAA,qBAAA;AAAA,EAAA,UAAA,EAAA,MAAA,kBAAA;AAAA,EAAA,OAAA,EAAA,MAAA,eAAA;AAAA,EAAA,SAAA,EAAA,MAAA,iBAAA;AAAA,EAAA,WAAA,EAAA,MAAA,mBAAA;AAAA,EAAA,eAAA,EAAA,MAAA,uBAAA;AAAA,EAAA,SAAA,EAAA,MAAA,iBAAA;AAAA,EAAA,OAAA,EAAA,MAAA,eAAA;AAAA,EAAA,eAAA,EAAA,MAAA,uBAAA;AAAA,EAAA,YAAA,EAAA,MAAA,oBAAA;AAAA,EAAA,QAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,eAAA,EAAA,MAAA,uBAAA;AAAA,EAAA,IAAA,EAAA,MAAA,YAAA;AAAA,EAAA,UAAA,EAAA,MAAA,kBAAA;AAAA,EAAA,UAAA,EAAA,MAAA,kBAAA;AAAA,EAAA,KAAA,EAAA,MAAA,aAAA;AAAA,EAAA,SAAA,EAAA,MAAA,iBAAA;AAAA,EAAA,UAAA,EAAA,MAAA,kBAAA;AAAA,EAAA,cAAA,EAAA,MAAA,sBAAA;AAAA,EAAA,eAAA,EAAA,MAAA,uBAAA;AAAA,EAAA,GAAA,EAAA,MAAA,WAAA;AAAA,EAAA,MAAA,EAAA,MAAA,cAAA;AAAA,EAAA,QAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,WAAA,EAAA,MAAA,mBAAA;AAAA,EAAA,UAAA,EAAA,MAAA,kBAAA;AAAA,EAAA,mBAAA,EAAA,MAAA,2BAAA;AAAA,EAAA,qBAAA,EAAA,MAAA,6BAAA;AAAA,EAAA,KAAA,EAAA,MAAA,aAAA;AAAA,EAAA,GAAA,EAAA,MAAA,WAAA;AAAA,EAAA,IAAA,EAAA,MAAA,YAAA;AAAA,EAAA,KAAA,EAAA,MAAA,aAAA;AAAA,EAAA,QAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,YAAA,EAAA,MAAA,oBAAA;AAAA,EAAA,MAAA,EAAA,MAAA,cAAA;AAAA,EAAA,UAAA,EAAA,MAAA,kBAAA;AAAA,EAAA,mBAAA,EAAA,MAAA,2BAAA;AAAA,EAAA,YAAA,EAAA,MAAA,oBAAA;AAAA,EAAA,YAAA,EAAA,MAAA,oBAAA;AAAA,EAAA,GAAA,EAAA,MAAA,WAAA;AAAA,EAAA,KAAA,EAAA,MAAA,aAAA;AAAA,EAAA,UAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACAA,IAAA,eAAA,GAAA,EAAA;AAAA,QAAA,CAAA,eAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAAqD,SAAAA;AAAA,EAAA,IAAA,EAAA,MAAA,IAAA;AAAA,EAAA,KAAA,EAAA,MAAAxC,MAAAA;AAAA,EAAA,SAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AASA,IAAMU,SAAAA,GAAW,EAAA;AACjB,IAAMJ,YAAAA,GAAc,EAAA;AACpB,IAAMK,EAAAA,GAAI,GAAA;AACV,IAAMmC,cAAAA,GAAgB,IAAA;AACtB,IAAMC,WAAAA,GAAa,KAAA;AAEnB,SAASC,aAAAA,CAAa,QAAQ,YAAA,EAAc;AACxC,EAAA,IAAI,GAAA,GAAM,KAAK,UAAA,GAAa,MAAA;AAC5B,EAAA,MAAMxD,KAAAA,GAAO,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA;AAEhC,EAAA,IAAIA,KAAAA,KAASkB,SAAAA,IAAYlB,KAAAA,KAASc,YAAAA,EAAa;AAC3C,IAAA,IAAI,YAAA,EAAc;AACd,MAAA,IAAA,CAAK,MAAM,4BAA4B,CAAA;AAAA,IAC3C;AACA,IAAA,GAAA,EAAA;AAAA,EACJ;AAEA,EAAA,OAAO,GAAA,GAAM,IAAA,CAAK,QAAA,EAAU,GAAA,EAAA,EAAO;AAC/B,IAAA,IAAI,CAAC,OAAA,CAAQ,IAAA,CAAK,UAAA,CAAW,GAAG,CAAC,CAAA,EAAG;AAChC,MAAA,IAAA,CAAK,KAAA,CAAM,uBAAuB,GAAG,CAAA;AAAA,IACzC;AAAA,EACJ;AACJ;AAEA,SAAS,oBAAoB,YAAA,EAAc;AACvC,EAAA,OAAO0C,aAAAA,CAAa,IAAA,CAAK,IAAA,EAAM,CAAA,EAAG,YAAY,CAAA;AAClD;AAEA,SAAS,cAAA,CAAe,QAAQxD,KAAAA,EAAM;AAClC,EAAA,IAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,KAAK,UAAA,GAAa,MAAA,EAAQA,KAAI,CAAA,EAAG;AAC/C,IAAA,IAAI,GAAA,GAAM,EAAA;AAEV,IAAA,QAAQA,KAAAA;AAAM,MACV,KAAKmB,EAAAA;AACD,QAAA,GAAA,GAAM,eAAA;AACN,QAAA;AAAA,MACJ,KAAKL,YAAAA;AACD,QAAA,GAAA,GAAM,yBAAA;AACN,QAAA;AAAA;AAGR,IAAA,IAAA,CAAK,KAAA,CAAM,GAAA,EAAK,IAAA,CAAK,UAAA,GAAa,MAAM,CAAA;AAAA,EAC5C;AACJ;AAIA,SAAS2C,SAAAA,GAAW;AAChB,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,IAAI,IAAA,GAAO,CAAA;AACX,EAAA,IAAI,OAAO,IAAA,CAAK,SAAA;AAEhB,EAAA,OAAO,IAAA,KAAS,UAAA,IAAc,IAAA,KAAS,OAAA,EAAS;AAC5C,IAAA,IAAA,GAAO,IAAA,CAAK,UAAA,CAAW,EAAE,MAAM,CAAA;AAAA,EACnC;AAEA,EAAA,IAAI,SAAS3D,OAAAA,EAAQ;AACjB,IAAA,IAAI,IAAA,CAAK,QAAQoB,SAAAA,EAAU,MAAM,KAC7B,IAAA,CAAK,OAAA,CAAQJ,YAAAA,EAAa,MAAM,CAAA,EAAG;AACnC,MAAA,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQI,SAAAA,EAAU,MAAM,IAAIA,SAAAA,GAAWJ,YAAAA;AAEnD,MAAA,GAAG;AACC,QAAA,IAAA,GAAO,IAAA,CAAK,UAAA,CAAW,EAAE,MAAM,CAAA;AAAA,MACnC,CAAA,QAAS,IAAA,KAAS,UAAA,IAAc,IAAA,KAAS,OAAA;AAEzC,MAAA,IAAI,SAAShB,OAAAA,EAAQ;AACjB,QAAA,IAAA,CAAK,KAAK,MAAM,CAAA;AAChB,QAAA,mBAAA,CAAoB,IAAA,CAAK,MAAMwD,cAAa,CAAA;AAAA,MAChD;AAAA,IACJ,CAAA,MAAO;AACH,MAAA,OAAO,IAAA;AAAA,IACX;AAAA,EACJ;AAEA,EAAA,IAAI,SAAS,CAAA,EAAG;AACZ,IAAA,IAAA,CAAK,KAAK,MAAM,CAAA;AAAA,EACpB;AAEA,EAAA,IAAI,SAAS,CAAA,EAAG;AACZ,IAAA,IAAA,GAAO,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,UAAU,CAAA;AACtC,IAAA,IAAI,IAAA,KAASpC,SAAAA,IAAY,IAAA,KAASJ,YAAAA,EAAa;AAC3C,MAAA,IAAA,CAAK,MAAM,yBAAyB,CAAA;AAAA,IACxC;AAAA,EACJ;AAEA,EAAA,mBAAA,CAAoB,IAAA,CAAK,IAAA,EAAM,IAAA,KAAS,CAAC,CAAA;AACzC,EAAA,OAAO,IAAA,KAASA,eAAc,GAAA,GAAM,IAAA,CAAK,QAAQhB,OAAM,CAAA,GAAI,IAAA,CAAK,OAAA,CAAQA,OAAM,CAAA;AAClF;AAGO,IAAM,IAAA,GAAO,SAAA;AACb,IAAM,SAAA,GAAY;AAAA,EACrB,CAAA,EAAG,CAAC,MAAA,EAAQ,IAAI,CAAA;AAAA,EAChB,CAAA,EAAG,CAAC,MAAA,EAAQ,IAAI;AACpB,CAAA;AAEO,SAASU,MAAAA,GAAQ;AAEpB,EAAA,MAAM,QAAQ,IAAA,CAAK,UAAA;AACnB,EAAA,IAAI,CAAA,GAAI,IAAA;AACR,EAAA,IAAI,CAAA,GAAI,IAAA;AAGR,EAAA,IAAI,IAAA,CAAK,cAAcV,OAAAA,EAAQ;AAC3B,IAAA,mBAAA,CAAoB,IAAA,CAAK,MAAMyD,WAAU,CAAA;AACzC,IAAA,CAAA,GAAI,IAAA,CAAK,QAAQzD,OAAM,CAAA;AAAA,EAC3B,CAAA,MAAA,IAOS,KAAK,SAAA,KAAc,KAAA,IAAS,KAAK,OAAA,CAAQ,IAAA,CAAK,UAAA,EAAYgB,YAAW,CAAA,EAAG;AAC7E,IAAA,CAAA,GAAI,IAAA;AAEJ,IAAA,cAAA,CAAe,IAAA,CAAK,IAAA,EAAM,CAAA,EAAGK,EAAC,CAAA;AAE9B,IAAA,QAAQ,IAAA,CAAK,QAAA,GAAW,IAAA,CAAK,UAAA;AAAY;AAAA;AAAA;AAAA,MAIrC,KAAK,CAAA;AACD,QAAA,IAAA,CAAK,IAAA,EAAK;AACV,QAAA,CAAA,GAAIsC,SAAAA,CAAS,KAAK,IAAI,CAAA;AACtB,QAAA;AAAA;AAAA,MAGJ,KAAK,CAAA;AACD,QAAA,cAAA,CAAe,IAAA,CAAK,IAAA,EAAM,CAAA,EAAG3C,YAAW,CAAA;AAExC,QAAA,IAAA,CAAK,IAAA,EAAK;AACV,QAAA,IAAA,CAAK,MAAA,EAAO;AAEZ,QAAA,mBAAA,CAAoB,IAAA,CAAK,MAAMwC,cAAa,CAAA;AAE5C,QAAA,CAAA,GAAI,GAAA,GAAM,IAAA,CAAK,OAAA,CAAQxD,OAAM,CAAA;AAC7B,QAAA;AAAA;AAAA,MAGJ;AACI,QAAA,cAAA,CAAe,IAAA,CAAK,IAAA,EAAM,CAAA,EAAGgB,YAAW,CAAA;AACxC,QAAA0C,aAAAA,CAAa,IAAA,CAAK,IAAA,EAAM,CAAA,EAAGF,cAAa,CAAA;AACxC,QAAA,IAAA,CAAK,IAAA,EAAK;AAEV,QAAA,CAAA,GAAI,IAAA,CAAK,cAAA,CAAe,KAAA,GAAQ,CAAC,CAAA;AAAA;AACzC,EACJ,CAAA,MAAA,IAOS,IAAA,CAAK,SAAA,KAAc,KAAA,IAAU,IAAA,CAAK,OAAA,CAAQpC,SAAQ,CAAA,IAAK,IAAA,CAAK,UAAA,CAAW,CAAC,CAAA,KAAM,KAAA,EAAQ;AAC3F,IAAA,IAAI,IAAA,GAAO,CAAA;AACX,IAAA,CAAA,GAAI,GAAA;AAGJ,IAAA,IAAI,IAAA,CAAK,OAAA,CAAQA,SAAQ,CAAA,EAAG;AACxB,MAAA,IAAA,GAAO,CAAA;AACP,MAAA,IAAA,CAAK,IAAA,EAAK;AAAA,IACd;AAEA,IAAA,cAAA,CAAe,IAAA,CAAK,IAAA,EAAM,CAAA,EAAGC,EAAC,CAAA;AAE9B,IAAA,QAAQ,IAAA,CAAK,QAAA,GAAW,IAAA,CAAK,UAAA;AAAY;AAAA;AAAA;AAAA,MAIrC,KAAK,CAAA;AACD,QAAA,IAAA,CAAK,IAAA,EAAK;AACV,QAAA,CAAA,GAAIsC,SAAAA,CAAS,KAAK,IAAI,CAAA;AACtB,QAAA;AAAA;AAAA,MAGJ,KAAK,CAAA;AACD,QAAA,cAAA,CAAe,IAAA,CAAK,IAAA,EAAM,CAAA,EAAG3C,YAAW,CAAA;AAExC,QAAA,IAAA,CAAK,IAAA,EAAK;AACV,QAAA,IAAA,CAAK,MAAA,EAAO;AAEZ,QAAA,mBAAA,CAAoB,IAAA,CAAK,MAAMwC,cAAa,CAAA;AAE5C,QAAA,CAAA,GAAI,GAAA,GAAM,IAAA,CAAK,OAAA,CAAQxD,OAAM,CAAA;AAC7B,QAAA;AAAA;AAAA,MAGJ;AACI,QAAA,cAAA,CAAe,IAAA,CAAK,IAAA,EAAM,CAAA,EAAGgB,YAAW,CAAA;AACxC,QAAA0C,aAAAA,CAAa,IAAA,CAAK,IAAA,EAAM,CAAA,EAAGF,cAAa,CAAA;AACxC,QAAA,IAAA,CAAK,IAAA,EAAK;AAEV,QAAA,CAAA,GAAI,IAAA,CAAK,cAAA,CAAe,KAAA,GAAQ,IAAA,GAAO,CAAC,CAAA;AAAA;AAChD,EACJ,CAAA,MAAA,IAOS,IAAA,CAAK,SAAA,KAAc,SAAA,EAAW;AACnC,IAAA,MAAMtD,KAAAA,GAAO,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,UAAU,CAAA;AAC5C,IAAA,MAAM,IAAA,GAAOA,KAAAA,KAASkB,SAAAA,IAAYlB,KAAAA,KAASc,YAAAA;AAC3C,IAAA,IAAI,CAAA,GAAI,KAAK,UAAA,GAAa,IAAA;AAE1B,IAAA,OAAO,CAAA,GAAI,IAAA,CAAK,QAAA,EAAU,CAAA,EAAA,EAAK;AAC3B,MAAA,IAAI,CAAC,OAAA,CAAQ,IAAA,CAAK,UAAA,CAAW,CAAC,CAAC,CAAA,EAAG;AAC9B,QAAA;AAAA,MACJ;AAAA,IACJ;AAEA,IAAA,IAAI,CAAA,KAAM,IAAA,CAAK,UAAA,GAAa,IAAA,EAAM;AAC9B,MAAA,IAAA,CAAK,KAAA,CAAM,qBAAA,EAAuB,IAAA,CAAK,UAAA,GAAa,IAAI,CAAA;AAAA,IAC5D;AAEA,IAAA,cAAA,CAAe,IAAA,CAAK,IAAA,EAAM,CAAA,GAAI,IAAA,CAAK,YAAYK,EAAC,CAAA;AAChD,IAAA,CAAA,GAAI,IAAA,CAAK,SAAA,CAAU,KAAA,EAAO,CAAC,CAAA;AAK3B,IAAA,IAAI,CAAA,GAAI,CAAA,KAAM,IAAA,CAAK,QAAA,EAAU;AACzB,MAAA,IAAA,CAAK,IAAA,EAAK;AACV,MAAA,CAAA,GAAIsC,SAAAA,CAAS,KAAK,IAAI,CAAA;AAAA,IAC1B,CAAA,MAAO;AACH,MAAA,cAAA,CAAe,KAAK,IAAA,EAAM,CAAA,GAAI,IAAA,CAAK,UAAA,GAAa,GAAG3C,YAAW,CAAA;AAG9D,MAAA,IAAI,CAAA,GAAI,CAAA,KAAM,IAAA,CAAK,QAAA,EAAU;AACzB,QAAA,IAAA,CAAK,IAAA,EAAK;AACV,QAAA,IAAA,CAAK,MAAA,EAAO;AACZ,QAAA,mBAAA,CAAoB,IAAA,CAAK,MAAMwC,cAAa,CAAA;AAC5C,QAAA,CAAA,GAAI,GAAA,GAAM,IAAA,CAAK,OAAA,CAAQxD,OAAM,CAAA;AAAA,MACjC,CAAA,MAEK;AACD,QAAA0D,cAAa,IAAA,CAAK,IAAA,EAAM,IAAI,IAAA,CAAK,UAAA,GAAa,GAAGF,cAAa,CAAA;AAC9D,QAAA,IAAA,CAAK,IAAA,EAAK;AACV,QAAA,CAAA,GAAI,IAAA,CAAK,cAAA,CAAe,CAAA,GAAI,CAAC,CAAA;AAAA,MACjC;AAAA,IACJ;AAAA,EACJ,CAAA,MAAO;AACH,IAAA,IAAA,CAAK,KAAA,EAAM;AAAA,EACf;AAEA,EAAA,IAAI,MAAM,IAAA,IAAQ,CAAA,CAAE,UAAA,CAAW,CAAC,MAAMpC,SAAAA,EAAU;AAC5C,IAAA,CAAA,GAAI,CAAA,CAAE,OAAO,CAAC,CAAA;AAAA,EAClB;AAEA,EAAA,IAAI,MAAM,IAAA,IAAQ,CAAA,CAAE,UAAA,CAAW,CAAC,MAAMA,SAAAA,EAAU;AAC5C,IAAA,CAAA,GAAI,CAAA,CAAE,OAAO,CAAC,CAAA;AAAA,EAClB;AAEA,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,SAAA;AAAA,IACN,GAAA,EAAK,IAAA,CAAK,WAAA,CAAY,KAAA,EAAO,KAAK,UAAU,CAAA;AAAA,IAC5C,CAAA;AAAA,IACA;AAAA,GACJ;AACJ;AAEO,SAAS8B,UAAS,IAAA,EAAM;AAC3B,EAAA,IAAI,KAAK,CAAA,EAAG;AACR,IAAA,MAAM,CAAA,GACF,IAAA,CAAK,CAAA,KAAM,IAAA,IAAQ,OACnB,IAAA,CAAK,CAAA,KAAO,GAAA,IAAO,GAAA,IACnB,IAAA,CAAK,CAAA,KAAM,IAAA,IAAQ,IAAA,IACnB,KAAK,CAAA,GAAI,GAAA;AAEb,IAAA,IAAI,KAAK,CAAA,EAAG;AACR,MAAA,MAAM,CAAA,GAAI,IAAA,CAAK,CAAA,CAAE,CAAC,MAAM,GAAA,IAAO,IAAA,CAAK,CAAA,CAAE,CAAC,CAAA,KAAM,GAAA,GACvC,IAAA,CAAK,CAAA,GACL,MAAM,IAAA,CAAK,CAAA;AACjB,MAAA,IAAA,CAAK,QAAA,CAAS,IAAI,CAAC,CAAA;AAAA,IACvB,CAAA,MAAO;AACH,MAAA,IAAA,CAAK,SAAS,CAAC,CAAA;AAAA,IACnB;AAAA,EACJ,CAAA,MAAO;AACH,IAAA,IAAA,CAAK,QAAA,CAAS,KAAK,CAAC,CAAA;AAAA,EACxB;AACJ;;;ACnSA,IAAA,cAAA,GAAA,EAAA;AAAA,QAAA,CAAA,cAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAAA,SAAAA;AAAA,EAAA,IAAA,EAAA,MAAArD,KAAAA;AAAA,EAAA,KAAA,EAAA,MAAAa,MAAAA;AAAA,EAAA,SAAA,EAAA,MAAAI,UAAAA;AAAA,EAAA,WAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAOA,SAAS,UAAA,GAAa;AAClB,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,uCAAA,EAAyC,IAAI,CAAA;AACtE;AAEA,SAAS,wBAAA,GAA2B;AAChC,EAAA,KAAA,IAAS,MAAA,GAAS,GAAG,IAAA,EAAM,IAAA,GAAO,KAAK,UAAA,CAAW,MAAM,GAAG,MAAA,EAAA,EAAU;AACjE,IAAA,IAAI,SAAS,iBAAA,EAAmB;AAC5B,MAAA,OAAO,IAAA;AAAA,IACX;AAEA,IAAA,IAAI,IAAA,KAAS,gBAAA,IACT,IAAA,KAAS,SAAA,EAAW;AACpB,MAAA,OAAO,KAAA;AAAA,IACX;AAAA,EACJ;AAEA,EAAA,OAAO,KAAA;AACX;AAGO,IAAMjB,KAAAA,GAAO,QAAA;AACb,IAAM,WAAA,GAAc,QAAA;AACpB,IAAMiB,UAAAA,GAAY;AAAA,EACrB,IAAA,EAAM,MAAA;AAAA,EACN,OAAA,EAAS,CAAC,eAAA,EAAiB,KAAA,EAAO,IAAI,CAAA;AAAA,EACtC,KAAA,EAAO,CAAC,OAAA,EAAS,IAAI;AACzB,CAAA;AAEO,SAASJ,MAAAA,CAAM,gBAAgB,KAAA,EAAO;AACzC,EAAA,MAAM,QAAQ,IAAA,CAAK,UAAA;AACnB,EAAA,IAAIb,MAAAA;AACJ,EAAA,IAAI,aAAA;AACJ,EAAA,IAAI,OAAA,GAAU,IAAA;AACd,EAAA,IAAI,KAAA,GAAQ,IAAA;AAEZ,EAAA,IAAA,CAAK,IAAI,SAAS,CAAA;AAElB,EAAAA,MAAAA,GAAO,IAAA,CAAK,cAAA,CAAe,KAAA,GAAQ,CAAC,CAAA;AACpC,EAAA,aAAA,GAAgBA,OAAK,WAAA,EAAY;AACjC,EAAA,IAAA,CAAK,MAAA,EAAO;AAGZ,EAAA,IAAI,IAAA,CAAK,QAAQ,KAAA,IACb,IAAA,CAAK,cAAc,gBAAA,IACnB,IAAA,CAAK,cAAc,SAAA,EAAW;AAC9B,IAAA,IAAI,KAAK,kBAAA,EAAoB;AACzB,MAAA,OAAA,GAAU,IAAA,CAAK,kBAAkB,IAAA,CAAK,aAAA,CAAc,KAAK,IAAA,EAAMA,MAAAA,EAAM,aAAa,CAAA,EAAG,UAAU,CAAA;AAAA,IACnG,CAAA,MAAO;AACH,MAAA,OAAA,GAAU,UAAA,CAAW,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,UAAU,CAAA;AAAA,IACnD;AAEA,IAAA,IAAA,CAAK,MAAA,EAAO;AAAA,EAChB;AAEA,EAAA,QAAQ,KAAK,SAAA;AAAW,IACpB,KAAK,SAAA;AACD,MAAA,IAAA,CAAK,IAAA,EAAK;AACV,MAAA;AAAA,IAEJ,KAAK,gBAAA;AACD,MAAA,IAAI,cAAA,CAAe,IAAA,CAAK,IAAA,CAAK,MAAA,EAAQ,aAAa,CAAA,IAC9C,OAAO,IAAA,CAAK,MAAA,CAAO,aAAa,CAAA,CAAE,KAAA,KAAU,UAAA,EAAY;AACxD,QAAA,KAAA,GAAQ,KAAK,MAAA,CAAO,aAAa,EAAE,KAAA,CAAM,IAAA,CAAK,MAAM,aAAa,CAAA;AAAA,MACrE,CAAA,MAAO;AAEH,QAAA,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,wBAAA,CAAyB,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,MAC1D;AAEA,MAAA;AAAA;AAGR,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,QAAA;AAAA,IACN,GAAA,EAAK,IAAA,CAAK,WAAA,CAAY,KAAA,EAAO,KAAK,UAAU,CAAA;AAAA,IAC5C,IAAA,EAAAA,MAAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GACJ;AACJ;AAEO,SAASqD,UAAS,IAAA,EAAM;AAC3B,EAAA,IAAA,CAAK,KAAA,CAAM,SAAA,EAAW,GAAA,GAAM,IAAA,CAAK,IAAI,CAAA;AAErC,EAAA,IAAI,IAAA,CAAK,YAAY,IAAA,EAAM;AACvB,IAAA,IAAA,CAAK,IAAA,CAAK,KAAK,OAAO,CAAA;AAAA,EAC1B;AAEA,EAAA,IAAI,KAAK,KAAA,EAAO;AACZ,IAAA,IAAA,CAAK,IAAA,CAAK,KAAK,KAAK,CAAA;AAAA,EACxB,CAAA,MAAO;AACH,IAAA,IAAA,CAAK,KAAA,CAAM,WAAW,GAAG,CAAA;AAAA,EAC7B;AACJ;;;ACnGA,IAAA,qBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,qBAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAAA,SAAAA;AAAA,EAAA,IAAA,EAAA,MAAArD,KAAAA;AAAA,EAAA,KAAA,EAAA,MAAAa,MAAAA;AAAA,EAAA,SAAA,EAAA,MAAAI,UAAAA;AAAA,EAAA,WAAA,EAAA,MAAA8C;AAAA,CAAA,CAAA;AAKO,IAAM/D,KAAAA,GAAO,eAAA;AACb,IAAM+D,YAAAA,GAAc,eAAA;AACpB,IAAM9C,UAAAA,GAAY;AAAA,EACrB,QAAA,EAAU,CAAC,EAAE;AACjB,CAAA;AAEO,SAASJ,OAAMb,MAAAA,EAAM;AACxB,EAAA,IAAI,QAAA,GAAW,IAAA;AAEf,EAAA,IAAIA,WAAS,IAAA,EAAM;AACf,IAAAA,MAAAA,GAAOA,OAAK,WAAA,EAAY;AAAA,EAC5B;AAEA,EAAA,IAAA,CAAK,MAAA,EAAO;AAEZ,EAAA,IAAI,cAAA,CAAe,IAAA,CAAK,IAAA,CAAK,MAAA,EAAQA,MAAI,CAAA,IACrC,OAAO,IAAA,CAAK,MAAA,CAAOA,MAAI,CAAA,CAAE,OAAA,KAAY,UAAA,EAAY;AAEjD,IAAA,QAAA,GAAW,KAAK,MAAA,CAAOA,MAAI,CAAA,CAAE,OAAA,CAAQ,KAAK,IAAI,CAAA;AAAA,EAClD,CAAA,MAAO;AAEH,IAAA,QAAA,GAAW,IAAA,CAAK,YAAA,CAAa,IAAA,CAAK,KAAA,CAAM,aAAa,CAAA;AAAA,EACzD;AAEA,EAAA,IAAA,CAAK,MAAA,EAAO;AAEZ,EAAA,IAAI,IAAA,CAAK,QAAQ,IAAA,IACb,IAAA,CAAK,cAAc,gBAAA,IACnB,IAAA,CAAK,cAAc,SAAA,EAAW;AAC9B,IAAA,IAAA,CAAK,MAAM,gCAAgC,CAAA;AAAA,EAC/C;AAEA,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,eAAA;AAAA,IACN,GAAA,EAAK,IAAA,CAAK,mBAAA,CAAoB,QAAQ,CAAA;AAAA,IACtC;AAAA,GACJ;AACJ;AAEO,SAASqD,UAAS,IAAA,EAAM;AAC3B,EAAA,IAAA,CAAK,SAAS,IAAI,CAAA;AACtB;;;AC9CA,IAAA,yBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,yBAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAAA,SAAAA;AAAA,EAAA,IAAA,EAAA,MAAArD,KAAAA;AAAA,EAAA,KAAA,EAAA,MAAAa,MAAAA;AAAA,EAAA,SAAA,EAAA,MAAAI;AAAA,CAAA,CAAA;AAQA,IAAM,UAAA,GAAa,EAAA;AACnB,IAAM+C,SAAAA,GAAW,EAAA;AACjB,IAAM,UAAA,GAAa,EAAA;AACnB,IAAM,gBAAA,GAAmB,EAAA;AACzB,IAAMC,aAAAA,GAAe,GAAA;AACrB,IAAM,KAAA,GAAQ,GAAA;AAEd,SAAS,gBAAA,GAAmB;AACxB,EAAA,IAAI,KAAK,GAAA,EAAK;AACV,IAAA,IAAA,CAAK,MAAM,yBAAyB,CAAA;AAAA,EACxC;AAEA,EAAA,MAAM,QAAQ,IAAA,CAAK,UAAA;AACnB,EAAA,IAAI,WAAA,GAAc,KAAA;AAElB,EAAA,IAAI,IAAA,CAAK,OAAA,CAAQD,SAAQ,CAAA,EAAG;AACxB,IAAA,WAAA,GAAc,IAAA;AACd,IAAA,IAAA,CAAK,IAAA,EAAK;AAAA,EACd,CAAA,MAAA,IAAW,CAAC,IAAA,CAAK,OAAA,CAAQC,aAAY,CAAA,EAAG;AACpC,IAAA,IAAA,CAAK,IAAI,KAAK,CAAA;AAAA,EAClB;AAEA,EAAA,IAAI,IAAA,CAAK,OAAA,CAAQA,aAAY,CAAA,EAAG;AAC5B,IAAA,IAAI,KAAK,UAAA,CAAW,IAAA,CAAK,UAAA,GAAa,CAAC,MAAM,UAAA,EAAY;AACrD,MAAA,IAAA,CAAK,IAAA,EAAK;AACV,MAAA,IAAA,CAAK,IAAI,KAAK,CAAA;AAAA,IAClB,WAAW,WAAA,EAAa;AACpB,MAAA,IAAA,CAAK,KAAA,CAAM,wBAAA,EAA0B,IAAA,CAAK,QAAQ,CAAA;AAAA,IACtD;AAAA,EACJ,WAAW,WAAA,EAAa;AACpB,IAAA,IAAA,CAAK,MAAM,2BAA2B,CAAA;AAAA,EAC1C;AAEA,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,YAAA;AAAA,IACN,GAAA,EAAK,IAAA,CAAK,WAAA,CAAY,KAAA,EAAO,KAAK,UAAU,CAAA;AAAA,IAC5C,IAAA,EAAM,IAAA,CAAK,cAAA,CAAe,KAAK;AAAA,GACnC;AACJ;AAEA,SAAS,WAAA,GAAc;AACnB,EAAA,MAAM,QAAQ,IAAA,CAAK,UAAA;AACnB,EAAA,MAAM5D,KAAAA,GAAO,IAAA,CAAK,UAAA,CAAW,KAAK,CAAA;AAElC,EAAA,IAAIA,KAAAA,KAAS,UAAA;AAAA,EACTA,KAAAA,KAAS,KAAA;AAAA,EACTA,KAAAA,KAAS,gBAAA;AAAA,EACTA,KAAAA,KAAS,UAAA;AAAA,EACTA,KAAAA,KAAS2D,SAAAA;AAAA,EACT3D,UAAS4D,aAAAA,EACX;AACE,IAAA,IAAA,CAAK,MAAM,wDAAwD,CAAA;AAAA,EACvE;AAEA,EAAA,IAAA,CAAK,IAAA,EAAK;AAEV,EAAA,IAAI5D,UAAS,UAAA,EAAY;AACrB,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,UAAU,CAAA,EAAG;AAC3B,MAAA,IAAA,CAAK,MAAM,wBAAwB,CAAA;AAAA,IACvC;AAEA,IAAA,IAAA,CAAK,IAAA,EAAK;AAAA,EACd;AAEA,EAAA,OAAO,IAAA,CAAK,eAAe,KAAK,CAAA;AACpC;AAIO,IAAML,KAAAA,GAAO,mBAAA;AACb,IAAMiB,UAAAA,GAAY;AAAA,EACrB,IAAA,EAAM,YAAA;AAAA,EACN,OAAA,EAAS,CAAC,MAAA,EAAQ,IAAI,CAAA;AAAA,EACtB,KAAA,EAAO,CAAC,QAAA,EAAU,YAAA,EAAc,IAAI,CAAA;AAAA,EACpC,KAAA,EAAO,CAAC,MAAA,EAAQ,IAAI;AACxB,CAAA;AAEO,SAASJ,MAAAA,GAAQ;AACpB,EAAA,MAAM,QAAQ,IAAA,CAAK,UAAA;AACnB,EAAA,IAAIb,MAAAA;AACJ,EAAA,IAAI,OAAA,GAAU,IAAA;AACd,EAAA,IAAI,KAAA,GAAQ,IAAA;AACZ,EAAA,IAAI,KAAA,GAAQ,IAAA;AAEZ,EAAA,IAAA,CAAK,IAAI,iBAAiB,CAAA;AAC1B,EAAA,IAAA,CAAK,MAAA,EAAO;AAEZ,EAAAA,MAAAA,GAAO,gBAAA,CAAiB,IAAA,CAAK,IAAI,CAAA;AACjC,EAAA,IAAA,CAAK,MAAA,EAAO;AAEZ,EAAA,IAAI,IAAA,CAAK,cAAc,kBAAA,EAAoB;AAEvC,IAAA,IAAI,IAAA,CAAK,cAAc,KAAA,EAAO;AAC1B,MAAA,OAAA,GAAU,WAAA,CAAY,KAAK,IAAI,CAAA;AAE/B,MAAA,IAAA,CAAK,MAAA,EAAO;AAEZ,MAAA,KAAA,GAAQ,KAAK,SAAA,KAAcE,OAAAA,GACrB,KAAK,MAAA,EAAO,GACZ,KAAK,UAAA,EAAW;AAEtB,MAAA,IAAA,CAAK,MAAA,EAAO;AAAA,IAChB;AAGA,IAAA,IAAI,IAAA,CAAK,cAAc,KAAA,EAAO;AAC1B,MAAA,KAAA,GAAQ,IAAA,CAAK,QAAQ,KAAK,CAAA;AAE1B,MAAA,IAAA,CAAK,MAAA,EAAO;AAAA,IAChB;AAAA,EACJ;AAEA,EAAA,IAAA,CAAK,IAAI,kBAAkB,CAAA;AAE3B,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,mBAAA;AAAA,IACN,GAAA,EAAK,IAAA,CAAK,WAAA,CAAY,KAAA,EAAO,KAAK,UAAU,CAAA;AAAA,IAC5C,IAAA,EAAAF,MAAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACJ;AACJ;AAEO,SAASqD,UAAS,IAAA,EAAM;AAC3B,EAAA,IAAA,CAAK,KAAA,CAAM,OAAO,GAAG,CAAA;AACrB,EAAA,IAAA,CAAK,IAAA,CAAK,KAAK,IAAI,CAAA;AAEnB,EAAA,IAAI,IAAA,CAAK,YAAY,IAAA,EAAM;AACvB,IAAA,IAAA,CAAK,QAAA,CAAS,KAAK,OAAO,CAAA;AAC1B,IAAA,IAAA,CAAK,IAAA,CAAK,KAAK,KAAK,CAAA;AAAA,EACxB;AAEA,EAAA,IAAI,IAAA,CAAK,UAAU,IAAA,EAAM;AACrB,IAAA,IAAA,CAAK,KAAA,CAAM,KAAA,EAAO,IAAA,CAAK,KAAK,CAAA;AAAA,EAChC;AAEA,EAAA,IAAA,CAAK,KAAA,CAAM,OAAO,GAAG,CAAA;AACzB;;;AClJA,IAAA,aAAA,GAAA,EAAA;AAAA,QAAA,CAAA,aAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAAA,SAAAA;AAAA,EAAA,IAAA,EAAA,MAAArD,KAAAA;AAAA,EAAA,KAAA,EAAA,MAAAa,MAAAA;AAAA,EAAA,SAAA,EAAA,MAAAI,UAAAA;AAAA,EAAA,WAAA,EAAA,MAAA8C;AAAA,CAAA,CAAA;AASA,IAAMG,UAAAA,GAAY,EAAA;AAElB,SAASC,WAAAA,GAAa;AAClB,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,IAAI,CAAA;AAC9B;AACA,SAAS,WAAA,GAAc;AACnB,EAAA,OAAO,IAAA,CAAK,iBAAA,CAAkB,IAAA,CAAK,IAAA,EAAMA,WAAU,CAAA;AACvD;AACA,SAAS,qBAAA,GAAwB;AAC7B,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,6BAAA,EAA+B,IAAI,CAAA;AAC5D;AACA,SAAS,kBAAA,GAAqB;AAC1B,EAAA,IAAI,IAAA,CAAK,cAAc,SAAA,EAAW;AAC9B,IAAA,OAAO,qBAAA,CAAsB,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,UAAU,CAAA;AAAA,EAC3D;AAEA,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,iBAAA,CAAkB,IAAA,CAAK,aAAa,qBAAqB,CAAA;AAE3E,EAAA,IAAI,IAAA,CAAK,cAAc,SAAA,EAAW;AAC9B,IAAA,IAAA,CAAK,IAAA,EAAK;AAAA,EACd;AAEA,EAAA,OAAO,IAAA;AACX;AAEO,IAAMnE,KAAAA,GAAO,OAAA;AACb,IAAM+D,YAAAA,GAAc,OAAA;AACpB,IAAM9C,UAAAA,GAAY;AAAA,EACrB,UAAU,CAAC;AAAA,IACP,QAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACH;AACL,CAAA;AAEO,SAASJ,OAAM,YAAA,EAAc;AAChC,EAAA,MAAM,QAAA,GAAW,eAAe,kBAAA,GAAqB,WAAA;AACrD,EAAA,MAAM,QAAQ,IAAA,CAAK,UAAA;AACnB,EAAA,IAAI,QAAA,GAAW,KAAK,UAAA,EAAW;AAE/B,EAAA,IAAA,CAAK,IAAI,gBAAgB,CAAA;AAEzB,EAAA,IAAA;AACA,IAAA,OAAO,CAAC,KAAK,GAAA,EAAK;AACd,MAAA,QAAQ,KAAK,SAAA;AAAW,QACpB,KAAK,iBAAA;AACD,UAAA,MAAM,IAAA;AAAA,QAEV,KAAK,UAAA;AAAA,QACL,KAAK,OAAA;AACD,UAAA,IAAA,CAAK,IAAA,EAAK;AACV,UAAA;AAAA,QAEJ,KAAK,SAAA;AACD,UAAA,QAAA,CAAS,IAAA,CAAK,IAAA,CAAK,iBAAA,CAAkB,IAAA,CAAK,MAAA,CAAO,KAAK,IAAA,EAAM,YAAY,CAAA,EAAGsD,WAAU,CAAC,CAAA;AACtF,UAAA;AAAA,QAEJ;AACI,UAAA,IAAI,YAAA,IAAgB,IAAA,CAAK,OAAA,CAAQD,UAAS,CAAA,EAAI;AAC1C,YAAA,QAAA,CAAS,IAAA,CAAK,WAAA,CAAY,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,UACxC,CAAA,MAAO;AACH,YAAA,QAAA,CAAS,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,UACrC;AAAA;AACR,IACJ;AAEA,EAAA,IAAI,CAAC,KAAK,GAAA,EAAK;AACX,IAAA,IAAA,CAAK,IAAI,iBAAiB,CAAA;AAAA,EAC9B;AAEA,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,OAAA;AAAA,IACN,GAAA,EAAK,IAAA,CAAK,WAAA,CAAY,KAAA,EAAO,KAAK,UAAU,CAAA;AAAA,IAC5C;AAAA,GACJ;AACJ;AAEO,SAASb,UAAS,IAAA,EAAM;AAC3B,EAAA,IAAA,CAAK,KAAA,CAAM,kBAAkB,GAAG,CAAA;AAChC,EAAA,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA,IAAA,KAAQ;AACxB,IAAA,IAAI,IAAA,CAAK,SAAS,aAAA,EAAe;AAC7B,MAAA,IAAA,CAAK,KAAA,CAAM,WAAW,GAAG,CAAA;AAAA,IAC7B;AAAA,EACJ,CAAC,CAAA;AACD,EAAA,IAAA,CAAK,KAAA,CAAM,mBAAmB,GAAG,CAAA;AACrC;;;AC9FA,IAAA,gBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,gBAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAAA,SAAAA;AAAA,EAAA,IAAA,EAAA,MAAArD,KAAAA;AAAA,EAAA,KAAA,EAAA,MAAAa,MAAAA;AAAA,EAAA,SAAA,EAAA,MAAAI;AAAA,CAAA,CAAA;AAMO,IAAMjB,KAAAA,GAAO,UAAA;AACb,IAAMiB,UAAAA,GAAY;AAAA,EACrB,QAAA,EAAU,CAAC,EAAE;AACjB,CAAA;AAEO,SAASJ,MAAAA,CAAMuD,eAAc,UAAA,EAAY;AAC5C,EAAA,MAAM,QAAQ,IAAA,CAAK,UAAA;AACnB,EAAA,IAAI,QAAA,GAAW,IAAA;AAEf,EAAA,IAAA,CAAK,IAAI,iBAAiB,CAAA;AAE1B,EAAA,QAAA,GAAWA,aAAAA,CAAa,IAAA,CAAK,IAAA,EAAM,UAAU,CAAA;AAE7C,EAAA,IAAI,CAAC,KAAK,GAAA,EAAK;AACX,IAAA,IAAA,CAAK,IAAI,kBAAkB,CAAA;AAAA,EAC/B;AAEA,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,UAAA;AAAA,IACN,GAAA,EAAK,IAAA,CAAK,WAAA,CAAY,KAAA,EAAO,KAAK,UAAU,CAAA;AAAA,IAC5C;AAAA,GACJ;AACJ;AAEO,SAASf,UAAS,IAAA,EAAM;AAC3B,EAAA,IAAA,CAAK,KAAA,CAAM,OAAO,GAAG,CAAA;AACrB,EAAA,IAAA,CAAK,SAAS,IAAI,CAAA;AAClB,EAAA,IAAA,CAAK,KAAA,CAAM,OAAO,GAAG,CAAA;AACzB;;;AClCA,IAAA,WAAA,GAAA,EAAA;AAAA,QAAA,CAAA,WAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAAA,SAAAA;AAAA,EAAA,IAAA,EAAA,MAAArD,KAAAA;AAAA,EAAA,KAAA,EAAA,MAAAa,MAAAA;AAAA,EAAA,SAAA,EAAA,MAAAI;AAAA,CAAA,CAAA;AAEO,IAAMjB,KAAAA,GAAO,KAAA;AACb,IAAMiB,aAAY,EAAC;AAEnB,SAASJ,MAAAA,GAAQ;AACpB,EAAA,MAAM,QAAQ,IAAA,CAAK,UAAA;AAEnB,EAAA,IAAA,CAAK,IAAI,GAAG,CAAA;AAEZ,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,KAAA;AAAA,IACN,GAAA,EAAK,IAAA,CAAK,WAAA,CAAY,KAAA,EAAO,KAAK,UAAU;AAAA,GAChD;AACJ;AAEO,SAASwC,SAAAA,GAAW;AACvB,EAAA,IAAA,CAAK,KAAA,CAAM,KAAK,KAAK,CAAA;AACzB;;;AClBA,IAAA,WAAA,GAAA,EAAA;AAAA,QAAA,CAAA,WAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAAA,SAAAA;AAAA,EAAA,IAAA,EAAA,MAAArD,KAAAA;AAAA,EAAA,KAAA,EAAA,MAAAa,MAAAA;AAAA,EAAA,SAAA,EAAA,MAAAI;AAAA,CAAA,CAAA;AAEO,IAAMjB,KAAAA,GAAO,KAAA;AACb,IAAMiB,aAAY,EAAC;AAEnB,SAASJ,MAAAA,GAAQ;AACpB,EAAA,MAAM,QAAQ,IAAA,CAAK,UAAA;AAEnB,EAAA,IAAA,CAAK,IAAI,GAAG,CAAA;AAEZ,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,KAAA;AAAA,IACN,GAAA,EAAK,IAAA,CAAK,WAAA,CAAY,KAAA,EAAO,KAAK,UAAU;AAAA,GAChD;AACJ;AAEO,SAASwC,SAAAA,GAAW;AACvB,EAAA,IAAA,CAAK,KAAA,CAAM,KAAK,MAAM,CAAA;AAC1B;;;AClBA,IAAA,qBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,qBAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAAA,UAAAA;AAAA,EAAA,IAAA,EAAA,MAAArD,KAAAA;AAAA,EAAA,KAAA,EAAA,MAAAa,OAAAA;AAAA,EAAA,SAAA,EAAA,MAAAI;AAAA,CAAA,CAAA;AAEA,IAAM,QAAA,GAAW,EAAA;AAGV,IAAMjB,KAAAA,GAAO,eAAA;AACb,IAAMiB,UAAAA,GAAY;AAAA,EACrB,IAAA,EAAM;AACV,CAAA;AAEO,SAASJ,OAAAA,GAAQ;AACpB,EAAA,IAAA,CAAK,SAAS,QAAQ,CAAA;AAEtB,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,eAAA;AAAA,IACN,KAAK,IAAA,CAAK,WAAA,CAAY,KAAK,UAAA,GAAa,CAAA,EAAG,KAAK,QAAQ,CAAA;AAAA,IACxD,IAAA,EAAM,IAAA,CAAK,OAAA,CAAQ,KAAK;AAAA,GAC5B;AACJ;AAEO,SAASwC,WAAS,IAAA,EAAM;AAC3B,EAAA,IAAA,CAAK,KAAA,CAAM,OAAO,GAAG,CAAA;AACrB,EAAA,IAAA,CAAK,KAAA,CAAM,KAAA,EAAO,IAAA,CAAK,IAAI,CAAA;AAC/B;;;ACvBA,IAAA,kBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,kBAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAAA,UAAAA;AAAA,EAAA,IAAA,EAAA,MAAArD,MAAAA;AAAA,EAAA,KAAA,EAAA,MAAAa,OAAAA;AAAA,EAAA,SAAA,EAAA,MAAAI;AAAA,CAAA,CAAA;AAEA,IAAMM,SAAAA,GAAW,EAAA;AACjB,IAAM,OAAA,GAAU,EAAA;AAChB,IAAM8C,gBAAAA,GAAkB,EAAA;AACxB,IAAMC,MAAAA,GAAQ,GAAA;AAEP,IAAMtE,MAAAA,GAAO,YAAA;AACb,IAAMiB,WAAAA,GAAY;AAAA,EACrB,IAAA,EAAM;AACV,CAAA;AAGO,SAASJ,OAAAA,GAAQ;AACpB,EAAA,MAAM,QAAQ,IAAA,CAAK,UAAA;AACnB,EAAA,IAAIb,MAAAA;AAEJ,EAAA,QAAQ,KAAK,SAAA;AAAW,IACpB,KAAK,UAAA;AACD,MAAAA,MAAAA,GAAO,GAAA;AACP,MAAA;AAAA,IAEJ,KAAK,KAAA;AACD,MAAA,QAAQ,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,UAAU,CAAA;AAAG,QACtC,KAAKqE,gBAAAA;AAAA,QACL,KAAK9C,SAAAA;AAAA,QACL,KAAK+C,MAAAA;AACD,UAAA,IAAA,CAAK,IAAA,EAAK;AACV,UAAA;AAAA,QAEJ,KAAK,OAAA;AACD,UAAA,IAAA,CAAK,IAAA,EAAK;AACV,UAAA,IAAA,CAAK,SAAS,MAAM,CAAA;AACpB,UAAA,IAAA,CAAK,SAAS,OAAO,CAAA;AACrB,UAAA;AAAA,QAEJ;AACI,UAAA,IAAA,CAAK,MAAM,wBAAwB,CAAA;AAAA;AAG3C,MAAAtE,MAAAA,GAAO,IAAA,CAAK,cAAA,CAAe,KAAK,CAAA;AAChC,MAAA;AAAA;AAGR,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,YAAA;AAAA,IACN,GAAA,EAAK,IAAA,CAAK,WAAA,CAAY,KAAA,EAAO,KAAK,UAAU,CAAA;AAAA,IAC5C,IAAA,EAAAA;AAAA,GACJ;AACJ;AAEO,SAASqD,WAAS,IAAA,EAAM;AAC3B,EAAA,IAAA,CAAK,QAAA,CAAS,KAAK,IAAI,CAAA;AAC3B;;;ACrDA,IAAA,eAAA,GAAA,EAAA;AAAA,QAAA,CAAA,eAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAAA,UAAAA;AAAA,EAAA,IAAA,EAAA,MAAArD,MAAAA;AAAA,EAAA,KAAA,EAAA,MAAAa,OAAAA;AAAA,EAAA,SAAA,EAAA,MAAAI;AAAA,CAAA,CAAA;AAEA,IAAM+C,SAAAA,GAAW,EAAA;AACjB,IAAMO,QAAAA,GAAU,EAAA;AAGT,IAAMvE,MAAAA,GAAO,SAAA;AACb,IAAMiB,WAAAA,GAAY;AAAA,EACrB,KAAA,EAAO;AACX,CAAA;AAEO,SAASJ,OAAAA,GAAQ;AACpB,EAAA,MAAM,QAAQ,IAAA,CAAK,UAAA;AACnB,EAAA,IAAI,MAAM,IAAA,CAAK,QAAA;AAEf,EAAA,IAAA,CAAK,IAAI,OAAO,CAAA;AAEhB,EAAA,IAAK,GAAA,GAAM,KAAA,GAAQ,CAAA,IAAM,CAAA,IACrB,KAAK,UAAA,CAAW,GAAA,GAAM,CAAC,CAAA,KAAMmD,aAC7B,IAAA,CAAK,UAAA,CAAW,GAAA,GAAM,CAAC,MAAMO,QAAAA,EAAS;AACtC,IAAA,GAAA,IAAO,CAAA;AAAA,EACX;AAEA,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,SAAA;AAAA,IACN,GAAA,EAAK,IAAA,CAAK,WAAA,CAAY,KAAA,EAAO,KAAK,UAAU,CAAA;AAAA,IAC5C,KAAA,EAAO,IAAA,CAAK,SAAA,CAAU,KAAA,GAAQ,GAAG,GAAG;AAAA,GACxC;AACJ;AAEO,SAASlB,WAAS,IAAA,EAAM;AAC3B,EAAA,IAAA,CAAK,KAAA,CAAM,OAAA,EAAS,IAAA,GAAO,IAAA,CAAK,QAAQ,IAAI,CAAA;AAChD;;;AChCA,IAAA,iBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,iBAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAAA,UAAAA;AAAA,EAAA,IAAA,EAAA,MAAArD,MAAAA;AAAA,EAAA,KAAA,EAAA,MAAAa,OAAAA;AAAA,EAAA,SAAA,EAAA,MAAAI;AAAA,CAAA,CAAA;AAWA,IAAM,qCAAqB,IAAI,GAAA,CAAI,CAAC,KAAA,EAAO,gBAAA,EAAkB,GAAG,CAAC,CAAA;AAE1D,IAAMjB,MAAAA,GAAO,WAAA;AACb,IAAMiB,WAAAA,GAAY;AAAA,EACrB,IAAA,EAAM,MAAA;AAAA,EACN,UAAU,CAAC;AAAA,IACP,YAAA;AAAA,IACA,SAAA;AAAA,IACA,iBAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,GACH;AACL,CAAA;AAEA,SAAS,eAAe,IAAA,EAAM;AAC1B,EAAA,IAAI,IAAA,CAAK,eAAA,CAAgB,CAAC,CAAA,KAAM,KAAA,IAC5B,kBAAA,CAAmB,GAAA,CAAI,IAAA,CAAK,eAAA,CAAgB,CAAC,CAAC,CAAA,EAAG;AACjD,IAAA,OAAO,IAAA,CAAK,QAAQ,IAAI,CAAA;AAAA,EAC5B;AAEA,EAAA,OAAO,IAAA,CAAK,aAAa,IAAI,CAAA;AACjC;AAEA,IAAM,WAAA,GAAc;AAAA,EAChB,KAAA,EAAO,cAAA;AAAA,EACP,SAAA,EAAW,cAAA;AAAA,EACX,QAAA,GAAW;AACP,IAAA,OAAO,KAAK,mBAAA,EAAoB;AAAA,EACpC;AACJ,CAAA;AAEO,SAASJ,OAAAA,CAAM,OAAO,OAAA,EAAS;AAClC,EAAA,MAAM,QAAA,GAAW,KAAK,UAAA,EAAW;AAEjC,EAAA,IAAA,EAAM,OAAO,CAAC,IAAA,CAAK,GAAA,EAAK;AACpB,IAAA,QAAQ,KAAK,SAAA;AAAW,MACpB,KAAK,OAAA;AAAA,MACL,KAAK,UAAA;AACD,QAAA,IAAA,CAAK,IAAA,EAAK;AACV,QAAA;AAAA,MAEJ,KAAK,KAAA;AACD,QAAA,QAAA,CAAS,IAAA,CAAK,IAAA,CAAK,UAAA,EAAY,CAAA;AAC/B,QAAA;AAAA,MAEJ,KAAK,eAAA,EAAiB;AAClB,QAAA,IAAI,OAAO,IAAA,CAAK,iBAAA;AAAA,UACZ,MAAM,WAAA,CAAY,IAAI,CAAA,CAAE,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,UACvC,MAAM;AAAA,SACV;AAEA,QAAA,IAAI,CAAC,IAAA,EAAM;AACP,UAAA,IAAA,GAAO,IAAA,CAAK,iBAAA;AAAA,YACR,MAAM;AACF,cAAA,IAAA,CAAK,IAAI,eAAe,CAAA;AACxB,cAAA,MAAM,GAAA,GAAM,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA;AAC/B,cAAA,IAAA,CAAK,IAAI,gBAAgB,CAAA;AACzB,cAAA,OAAO,GAAA;AAAA,YACX,CAAA;AAAA,YACA,MAAM;AACF,cAAA,OAAO,IAAA,CAAK,gBAAgB,IAAI,CAAA;AAAA,YACpC;AAAA,WACJ;AAAA,QACJ;AAEA,QAAA,QAAA,CAAS,KAAK,IAAI,CAAA;AAClB,QAAA;AAAA,MACJ;AAAA,MAEA,KAAK,QAAA,EAAe;AAChB,QAAA,IAAI,OAAO,IAAA,CAAK,iBAAA;AAAA,UACZ,MAAM,IAAA,CAAK,eAAA,CAAgB,IAAI,CAAA;AAAA,UAC/B,MAAM;AAAA,SACV;AAEA,QAAA,IAAI,CAAC,IAAA,EAAM;AACP,UAAA,IAAA,GAAO,IAAA,CAAK,gBAAgB,IAAI,CAAA;AAAA,QACpC;AAEA,QAAA,QAAA,CAAS,KAAK,IAAI,CAAA;AAClB,QAAA;AAAA,MACJ;AAAA,MAEA;AACI,QAAA,MAAM,IAAA;AAAA;AACd,EACJ;AAEA,EAAA,IAAI,SAAS,OAAA,EAAS;AAClB,IAAA,IAAA,CAAK,MAAM,uBAAuB,CAAA;AAAA,EACtC;AAEA,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,WAAA;AAAA,IACN,GAAA,EAAK,IAAA,CAAK,mBAAA,CAAoB,QAAQ,CAAA;AAAA,IACtC,IAAA;AAAA,IACA;AAAA,GACJ;AACJ;AAEO,SAASwC,WAAS,IAAA,EAAM;AAC3B,EAAA,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA,KAAA,KAAS;AAC3B,IAAA,IAAI,KAAA,CAAM,SAAS,WAAA,EAAa;AAC5B,MAAA,IAAA,CAAK,KAAA,CAAM,iBAAiB,GAAG,CAAA;AAC/B,MAAA,IAAA,CAAK,KAAK,KAAK,CAAA;AACf,MAAA,IAAA,CAAK,KAAA,CAAM,kBAAkB,GAAG,CAAA;AAAA,IACpC,CAAA,MAAO;AACH,MAAA,IAAA,CAAK,KAAK,KAAK,CAAA;AAAA,IACnB;AAAA,EACJ,CAAC,CAAA;AACL;;;ACzHA,IAAA,mBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,mBAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAAA,UAAAA;AAAA,EAAA,IAAA,EAAA,MAAArD,MAAAA;AAAA,EAAA,KAAA,EAAA,MAAAa,OAAAA;AAAA,EAAA,SAAA,EAAA,MAAAI,WAAAA;AAAA,EAAA,WAAA,EAAA,MAAA8C;AAAA,CAAA,CAAA;AAUA,IAAMxB,gBAAAA,GAAkB,EAAA;AACxB,IAAMC,WAAAA,GAAa,EAAA;AACnB,IAAMgC,WAAAA,GAAa,EAAA;AACnB,IAAMN,UAAAA,GAAY,EAAA;AAClB,IAAMF,SAAAA,GAAW,EAAA;AACjB,IAAMzC,SAAAA,GAAW,EAAA;AACjB,IAAMgD,QAAAA,GAAU,EAAA;AAEhB,SAAS,eAAA,GAAkB;AACvB,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,sCAAA,EAAwC,IAAI,CAAA;AACrE;AAEA,SAAS,wBAAA,GAA2B;AAChC,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,sCAAA,EAAwC,KAAK,CAAA;AACtE;AAEA,SAAS,YAAA,GAAe;AACpB,EAAA,MAAM,kBAAkB,IAAA,CAAK,UAAA;AAC7B,EAAA,MAAM,KAAA,GAAQ,KAAK,KAAA,EAAM;AAEzB,EAAA,IAAI,MAAM,IAAA,KAAS,KAAA,IACf,KAAK,GAAA,KAAQ,KAAA,IACb,KAAK,SAAA,KAAc,SAAA,IACnB,IAAA,CAAK,OAAA,CAAQhC,gBAAe,CAAA,KAAM,KAAA,IAClC,KAAK,aAAA,CAAc,eAAe,MAAM,KAAA,EAAO;AAC/C,IAAA,IAAA,CAAK,KAAA,EAAM;AAAA,EACf;AAEA,EAAA,OAAO,KAAA;AACX;AAEO,IAAMvC,MAAAA,GAAO,aAAA;AACb,IAAM+D,YAAAA,GAAc,aAAA;AACpB,IAAM9C,WAAAA,GAAY;AAAA,EACrB,SAAA,EAAW,CAAC,OAAA,EAAS,MAAM,CAAA;AAAA,EAC3B,QAAA,EAAU,MAAA;AAAA,EACV,KAAA,EAAO,CAAC,OAAA,EAAS,KAAK;AAC1B,CAAA;AAEO,SAASJ,OAAAA,GAAQ;AACpB,EAAA,MAAM,QAAQ,IAAA,CAAK,UAAA;AACnB,EAAA,MAAM,aAAa,IAAA,CAAK,UAAA;AACxB,EAAA,MAAMQ,SAAAA,GAAWoD,aAAAA,CAAa,IAAA,CAAK,IAAI,CAAA;AACvC,EAAA,MAAM,cAAA,GAAiB,iBAAiBpD,SAAQ,CAAA;AAChD,EAAA,MAAM,UAAA,GAAa,cAAA,GAAiB,IAAA,CAAK,mBAAA,GAAsB,IAAA,CAAK,UAAA;AACpE,EAAA,MAAM8C,WAAAA,GAAa,iBAAiB,wBAAA,GAA2B,eAAA;AAC/D,EAAA,IAAI,SAAA,GAAY,KAAA;AAChB,EAAA,IAAI,KAAA;AAEJ,EAAA,IAAA,CAAK,MAAA,EAAO;AACZ,EAAA,IAAA,CAAK,IAAI,KAAK,CAAA;AAEd,EAAA,MAAM,aAAa,IAAA,CAAK,UAAA;AAExB,EAAA,IAAI,CAAC,cAAA,EAAgB;AACjB,IAAA,IAAA,CAAK,MAAA,EAAO;AAAA,EAChB;AAEA,EAAA,IAAI,UAAA,EAAY;AACZ,IAAA,KAAA,GAAQ,IAAA,CAAK,iBAAA,CAAkB,YAAA,EAAcA,WAAU,CAAA;AAAA,EAC3D,CAAA,MAAO;AACH,IAAA,KAAA,GAAQA,WAAAA,CAAW,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,UAAU,CAAA;AAAA,EACjD;AAEA,EAAA,IAAI,kBAAkB,KAAA,CAAM,IAAA,KAAS,OAAA,IAAW,KAAA,CAAM,SAAS,OAAA,EAAS;AACpE,IAAA,KAAA,IAAS,SAAS,UAAA,GAAa,IAAA,CAAK,UAAA,EAAY,MAAA,IAAU,GAAG,MAAA,EAAA,EAAU;AACnE,MAAA,IAAI,IAAA,CAAK,UAAA,CAAW,MAAM,CAAA,KAAM,UAAA,EAAY;AACxC,QAAA,KAAA,CAAM,SAAS,UAAA,CAAW;AAAA,UACtB,IAAA,EAAM,YAAA;AAAA,UACN,GAAA,EAAK,IAAA;AAAA,UACL,KAAA,EAAO;AAAA,SACV,CAAA;AACD,QAAA;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAEA,EAAA,IAAI,IAAA,CAAK,OAAA,CAAQ5B,gBAAe,CAAA,EAAG;AAC/B,IAAA,SAAA,GAAY,YAAA,CAAa,KAAK,IAAI,CAAA;AAClC,IAAA,IAAA,CAAK,MAAA,EAAO;AAAA,EAChB;AAKA,EAAA,IAAI,IAAA,CAAK,GAAA,KAAQ,KAAA,IACb,IAAA,CAAK,SAAA,KAAc,aACnB,IAAA,CAAK,aAAA,CAAc,UAAU,CAAA,KAAM,KAAA,EAAO;AAC1C,IAAA,IAAA,CAAK,KAAA,EAAM;AAAA,EACf;AAEA,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,aAAA;AAAA,IACN,GAAA,EAAK,IAAA,CAAK,WAAA,CAAY,KAAA,EAAO,KAAK,UAAU,CAAA;AAAA,IAC5C,SAAA;AAAA,IACA,QAAA,EAAAlB,SAAAA;AAAA,IACA;AAAA,GACJ;AACJ;AAEO,SAASgC,WAAS,IAAA,EAAM;AAC3B,EAAA,IAAA,CAAK,KAAA,CAAM,KAAA,EAAO,IAAA,CAAK,QAAQ,CAAA;AAC/B,EAAA,IAAA,CAAK,KAAA,CAAM,OAAO,GAAG,CAAA;AACrB,EAAA,IAAA,CAAK,IAAA,CAAK,KAAK,KAAK,CAAA;AAEpB,EAAA,IAAI,KAAK,SAAA,EAAW;AAChB,IAAA,IAAA,CAAK,KAAA,CAAM,OAAO,GAAG,CAAA;AACrB,IAAA,IAAA,CAAK,MAAM,KAAA,EAAO,IAAA,CAAK,cAAc,IAAA,GAAO,WAAA,GAAc,KAAK,SAAS,CAAA;AAAA,EAC5E;AACJ;AAEA,SAASoB,aAAAA,GAAe;AACpB,EAAA,MAAM,QAAQ,IAAA,CAAK,UAAA;AAGnB,EAAA,IAAI,IAAA,CAAK,cAAc,KAAA,EAAO;AAC1B,IAAA,QAAQ,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,UAAU,CAAA;AAAG,MACtC,KAAKT,SAAAA;AAAA,MACL,KAAKQ,WAAAA;AAAA,MACL,KAAKjD,SAAAA;AAAA,MACL,KAAKiB,WAAAA;AAAA,MACL,KAAK0B,UAAAA;AACD,QAAA,IAAA,CAAK,IAAA,EAAK;AACV,QAAA;AAAA;AAAA,MAGJ,KAAKK,QAAAA;AACD,QAAA,IAAA,CAAK,IAAA,EAAK;AACV,QAAA,IAAI,IAAA,CAAK,OAAA,CAAQA,QAAO,CAAA,EAAG;AACvB,UAAA,IAAA,CAAK,IAAA,EAAK;AAAA,QACd;AACA,QAAA;AAAA;AACR,EACJ;AAEA,EAAA,IAAI,IAAA,CAAK,cAAc,IAAA,EAAM;AACzB,IAAA,IAAA,CAAK,IAAI,IAAI,CAAA;AAAA,EACjB,CAAA,MAAO;AACH,IAAA,IAAA,CAAK,IAAI,KAAK,CAAA;AAAA,EAClB;AAEA,EAAA,OAAO,IAAA,CAAK,eAAe,KAAK,CAAA;AACpC;AAGA,SAAS,YAAA,GAAe;AACpB,EAAA,IAAA,CAAK,IAAI,KAAK,CAAA;AACd,EAAA,IAAA,CAAK,MAAA,EAAO;AAEZ,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAA;AAIpC,EAAA,OAAO,SAAA,KAAc,cAAc,IAAA,GAAO,SAAA;AAC9C;;;ACpKA,IAAA,uBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,uBAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAAlB,UAAAA;AAAA,EAAA,IAAA,EAAA,MAAArD,MAAAA;AAAA,EAAA,KAAA,EAAA,MAAAa,OAAAA;AAAA,EAAA,SAAA,EAAA,MAAAI;AAAA,CAAA,CAAA;AAOA,IAAMiD,UAAAA,GAAY,EAAA;AAElB,SAASC,WAAAA,GAAa;AAClB,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,6BAAA,EAA+B,IAAI,CAAA;AAC5D;AAEO,IAAMnE,MAAAA,GAAO,iBAAA;AACb,IAAMiB,WAAAA,GAAY;AAAA,EACrB,UAAU,CAAC;AAAA,IACP,aAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACH;AACL,CAAA;AAEO,SAASJ,OAAAA,GAAQ;AACpB,EAAA,MAAM,QAAA,GAAW,KAAK,UAAA,EAAW;AAEjC,EACA,OAAO,CAAC,KAAK,GAAA,EAAK;AACd,MAAA,QAAQ,KAAK,SAAA;AAAW,QACpB,KAAK,UAAA;AAAA,QACL,KAAK,OAAA;AAAA,QACL,KAAK,SAAA;AACD,UAAA,IAAA,CAAK,IAAA,EAAK;AACV,UAAA;AAAA,QAEJ,KAAK,SAAA;AACD,UAAA,QAAA,CAAS,IAAA,CAAK,IAAA,CAAK,iBAAA,CAAkB,IAAA,CAAK,MAAA,CAAO,KAAK,IAAA,EAAM,IAAI,CAAA,EAAGsD,WAAU,CAAC,CAAA;AAC9E,UAAA;AAAA,QAEJ;AACI,UAAA,IAAI,IAAA,CAAK,OAAA,CAAQD,UAAS,CAAA,EAAI;AAC1B,YAAA,QAAA,CAAS,KAAK,IAAA,CAAK,iBAAA,CAAkB,IAAA,CAAK,IAAA,EAAMC,WAAU,CAAC,CAAA;AAAA,UAC/D,CAAA,MAAO;AACH,YAAA,QAAA,CAAS,KAAK,IAAA,CAAK,iBAAA,CAAkB,IAAA,CAAK,WAAA,EAAaA,WAAU,CAAC,CAAA;AAAA,UACtE;AAAA;AACR,IACJ;AAEA,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,iBAAA;AAAA,IACN,GAAA,EAAK,IAAA,CAAK,mBAAA,CAAoB,QAAQ,CAAA;AAAA,IACtC;AAAA,GACJ;AACJ;AAEO,SAASd,WAAS,IAAA,EAAM;AAC3B,EAAA,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA,IAAA,KAAQ;AACxB,IAAA,IAAI,IAAA,CAAK,SAAS,aAAA,EAAe;AAC7B,MAAA,IAAA,CAAK,KAAA,CAAM,WAAW,GAAG,CAAA;AAAA,IAC7B;AAAA,EACJ,CAAC,CAAA;AACL;;;AC5DA,IAAA,iBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,iBAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAAA,UAAAA;AAAA,EAAA,IAAA,EAAA,MAAArD,MAAAA;AAAA,EAAA,KAAA,EAAA,MAAAa,OAAAA;AAAA,EAAA,SAAA,EAAA,MAAAI;AAAA,CAAA,CAAA;AAEO,IAAMjB,MAAAA,GAAO,WAAA;AACb,IAAMiB,WAAAA,GAAY;AAAA,EACrB,KAAA,EAAO,MAAA;AAAA,EACP,IAAA,EAAM;AACV,CAAA;AAEO,SAASJ,OAAAA,GAAQ;AACpB,EAAA,MAAM,QAAQ,IAAA,CAAK,UAAA;AACnB,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,aAAA,CAAc,SAAS,CAAA;AAE1C,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,WAAA;AAAA,IACN,GAAA,EAAK,IAAA,CAAK,WAAA,CAAY,KAAA,EAAO,KAAK,UAAU,CAAA;AAAA,IAC5C,KAAA;AAAA,IACA,MAAM,IAAA,CAAK,SAAA,CAAU,QAAQ,KAAA,CAAM,MAAA,EAAQ,KAAK,UAAU;AAAA,GAC9D;AACJ;AAEO,SAASwC,WAAS,IAAA,EAAM;AAC3B,EAAA,IAAA,CAAK,KAAA,CAAM,SAAA,EAAW,IAAA,CAAK,KAAA,GAAQ,KAAK,IAAI,CAAA;AAChD;;;ACtBA,IAAA,eAAA,GAAA,EAAA;AAAA,QAAA,CAAA,eAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAAA,UAAAA;AAAA,EAAA,IAAA,EAAA,MAAArD,MAAAA;AAAA,EAAA,KAAA,EAAA,MAAAa,OAAAA;AAAA,EAAA,SAAA,EAAA,MAAAI;AAAA,CAAA,CAAA;AAWA,IAAMsD,QAAAA,GAAU,EAAA;AAET,IAAMvE,MAAAA,GAAO,SAAA;AACb,IAAMiB,WAAAA,GAAY;AAAA,EACrB,IAAA,EAAM,MAAA;AAAA,EACN,IAAA,EAAM,MAAA;AAAA,EACN,OAAO,CAAC,YAAA,EAAc,UAAU,WAAA,EAAa,OAAA,EAAS,YAAY,IAAI;AAC1E,CAAA;AAEO,SAASJ,QAAM,IAAA,EAAM;AACxB,EAAA,MAAM,QAAQ,IAAA,CAAK,UAAA;AACnB,EAAA,IAAIb,MAAAA;AACJ,EAAA,IAAI,KAAA,GAAQ,IAAA;AAEZ,EAAA,IAAA,CAAK,IAAI,eAAe,CAAA;AACxB,EAAA,IAAA,CAAK,MAAA,EAAO;AAEZ,EAAAA,MAAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAA;AACzB,EAAA,IAAA,CAAK,MAAA,EAAO;AAEZ,EAAA,IAAI,IAAA,CAAK,cAAc,gBAAA,EAAkB;AACrC,IAAA,IAAA,CAAK,IAAI,KAAK,CAAA;AACd,IAAA,IAAA,CAAK,MAAA,EAAO;AAEZ,IAAA,QAAQ,KAAK,SAAA;AAAW,MACpB,KAAKG,OAAAA;AACD,QAAA,IAAI,IAAA,CAAK,eAAA,CAAgB,CAAC,CAAA,KAAM,KAAA,EAAO;AACnC,UAAA,KAAA,GAAQ,KAAK,KAAA,EAAM;AAAA,QACvB,CAAA,MAAO;AACH,UAAA,KAAA,GAAQ,KAAK,MAAA,EAAO;AAAA,QACxB;AAEA,QAAA;AAAA,MAEJ,KAAK,SAAA;AACD,QAAA,KAAA,GAAQ,KAAK,SAAA,EAAU;AACvB,QAAA;AAAA,MAEJ,KAAK,KAAA;AACD,QAAA,KAAA,GAAQ,KAAK,UAAA,EAAW;AACxB,QAAA;AAAA,MAEJ,KAAK,QAAA;AACD,QAAA,KAAA,GAAQ,IAAA,CAAK,iBAAA;AAAA,UACT,MAAM;AACF,YAAA,MAAM,MAAM,IAAA,CAAK,QAAA,CAAS,KAAK,YAAA,EAAc,IAAA,CAAK,MAAM,KAAK,CAAA;AAE7D,YAAA,IAAA,CAAK,MAAA,EAAO;AAEZ,YAAA,IAAI,IAAA,CAAK,OAAA,CAAQoE,QAAO,CAAA,EAAG;AACvB,cAAA,IAAA,CAAK,KAAA,EAAM;AAAA,YACf;AAEA,YAAA,OAAO,GAAA;AAAA,UACX,CAAA;AAAA,UACA,MAAM;AACF,YAAA,OAAO,KAAK,KAAA,EAAM;AAAA,UACtB;AAAA,SACJ;AACA,QAAA;AAAA,MAEJ;AACI,QAAA,IAAA,CAAK,MAAM,oDAAoD,CAAA;AAAA;AAGvE,IAAA,IAAA,CAAK,MAAA,EAAO;AAAA,EAChB;AAEA,EAAA,IAAI,CAAC,KAAK,GAAA,EAAK;AACX,IAAA,IAAA,CAAK,IAAI,gBAAgB,CAAA;AAAA,EAC7B;AAEA,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,SAAA;AAAA,IACN,GAAA,EAAK,IAAA,CAAK,WAAA,CAAY,KAAA,EAAO,KAAK,UAAU,CAAA;AAAA,IAC5C,IAAA;AAAA,IACA,IAAA,EAAAvE,MAAAA;AAAA,IACA;AAAA,GACJ;AACJ;AAEO,SAASqD,WAAS,IAAA,EAAM;AAC3B,EAAA,IAAA,CAAK,KAAA,CAAM,iBAAiB,GAAG,CAAA;AAC/B,EAAA,IAAA,CAAK,KAAA,CAAM,KAAA,EAAO,IAAA,CAAK,IAAI,CAAA;AAE3B,EAAA,IAAI,IAAA,CAAK,UAAU,IAAA,EAAM;AACrB,IAAA,IAAA,CAAK,KAAA,CAAM,OAAO,GAAG,CAAA;AACrB,IAAA,IAAA,CAAK,IAAA,CAAK,KAAK,KAAK,CAAA;AAAA,EACxB;AAEA,EAAA,IAAA,CAAK,KAAA,CAAM,kBAAkB,GAAG,CAAA;AACpC;;;ACtGA,IAAA,uBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,uBAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAAA,UAAAA;AAAA,EAAA,IAAA,EAAA,MAAArD,MAAAA;AAAA,EAAA,KAAA,EAAA,MAAAa,OAAAA;AAAA,EAAA,SAAA,EAAA,MAAAI;AAAA,CAAA,CAAA;AAKO,IAAMjB,MAAAA,GAAO,iBAAA;AACb,IAAMiB,WAAAA,GAAY;AAAA,EACrB,IAAA,EAAM,MAAA;AAAA,EACN,OAAA,EAAS,MAAA;AAAA,EACT,KAAA,EAAO,CAAC,aAAA,EAAe,UAAU;AACrC,CAAA;AAEA,SAAS,gBAAA,CAAiB,MAAMjB,MAAAA,EAAM;AAClC,EAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,QAAA,CAAS,IAAI,KAAK,EAAC;AAC/C,EAAA,MAAM,MAAA,GAAS,eAAeA,MAAI,CAAA;AAElC,EAAA,IAAI,OAAO,WAAW,UAAA,EAAY;AAC9B,IAAA,IAAA,CAAK,KAAA,CAAM,CAAA,gBAAA,EAAmBA,MAAI,CAAA,EAAA,CAAI,CAAA;AAAA,EAC1C;AAEA,EAAA,OAAO,MAAA;AACX;AAEO,SAASa,OAAAA,CAAM,OAAO,SAAA,EAAW;AACpC,EAAA,MAAM,QAAQ,IAAA,CAAK,UAAA;AACnB,EAAA,MAAM,YAAA,GAAe,KAAK,mBAAA,EAAoB;AAC9C,EAAA,MAAM,cAAc,gBAAA,CAAiB,IAAA,CAAK,MAAM,IAAA,EAAM,YAAA,CAAa,aAAa,CAAA;AAEhF,EAAA,IAAA,CAAK,MAAA,EAAO;AAEZ,EAAA,MAAM,QAAQ,IAAA,CAAK,iBAAA;AAAA,IACf,MAAM;AACF,MAAA,MAAM,kBAAkB,IAAA,CAAK,UAAA;AAC7B,MAAA,MAAM6D,MAAAA,GAAQ,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA;AAEnC,MAAA,IAAI,KAAK,GAAA,KAAQ,KAAA,IACb,KAAK,aAAA,CAAc,eAAe,MAAM,KAAA,EAAO;AAC/C,QAAA,IAAA,CAAK,KAAA,EAAM;AAAA,MACf;AAEA,MAAA,OAAOA,MAAAA;AAAA,IACX,CAAA;AAAA,IACA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,KAAK;AAAA,GAC9B;AAEA,EAAA,IAAI,CAAC,KAAK,GAAA,EAAK;AACX,IAAA,IAAA,CAAK,IAAI,gBAAgB,CAAA;AAAA,EAC7B;AAEA,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,iBAAA;AAAA,IACN,GAAA,EAAK,IAAA,CAAK,WAAA,CAAY,KAAA,EAAO,KAAK,UAAU,CAAA;AAAA,IAC5C,IAAA;AAAA,IACA,OAAA,EAAS,YAAA;AAAA,IACT;AAAA,GACJ;AACJ;AAEO,SAASrB,WAAS,IAAA,EAAM;AAC3B,EAAA,IAAA,CAAK,KAAA,CAAM,QAAA,EAAe,IAAA,CAAK,OAAA,GAAU,GAAG,CAAA;AAC5C,EAAA,IAAA,CAAK,IAAA,CAAK,KAAK,KAAK,CAAA;AACpB,EAAA,IAAA,CAAK,KAAA,CAAM,kBAAkB,GAAG,CAAA;AACpC;;;AC9DA,IAAA,oBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,oBAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAAA,UAAAA;AAAA,EAAA,IAAA,EAAA,MAAArD,MAAAA;AAAA,EAAA,KAAA,EAAA,MAAAa,OAAAA;AAAA,EAAA,SAAA,EAAA,MAAAI;AAAA,CAAA,CAAA;AASA,IAAMsD,QAAAA,GAAU,EAAA;AAChB,IAAMI,aAAAA,GAAe,EAAA;AACrB,IAAMC,WAAAA,GAAa,EAAA;AACnB,IAAMP,gBAAAA,GAAkB,EAAA;AAEjB,IAAMrE,MAAAA,GAAO,cAAA;AACb,IAAMiB,WAAAA,GAAY;AAAA,EACrB,IAAA,EAAM,MAAA;AAAA,EACN,MAAM,CAAC,YAAA,EAAc,QAAA,EAAU,WAAA,EAAa,SAAS,UAAU,CAAA;AAAA,EAC/D,cAAA,EAAgB,MAAA;AAAA,EAChB,QAAQ,CAAC,YAAA,EAAc,QAAA,EAAU,WAAA,EAAa,SAAS,UAAU,CAAA;AAAA,EACjE,eAAA,EAAiB,CAAC,MAAA,EAAQ,IAAI,CAAA;AAAA,EAC9B,OAAO,CAAC,YAAA,EAAc,UAAU,WAAA,EAAa,OAAA,EAAS,YAAY,IAAI;AAC1E,CAAA;AAEA,SAAS,QAAA,GAAW;AAChB,EAAA,IAAA,CAAK,MAAA,EAAO;AAEZ,EAAA,QAAQ,KAAK,SAAA;AAAW,IACpB,KAAKd,OAAAA;AACD,MAAA,IAAI,KAAK,OAAA,CAAQoE,QAAAA,EAAS,KAAK,iBAAA,CAAkB,CAAC,CAAC,CAAA,EAAG;AAClD,QAAA,OAAO,KAAK,KAAA,EAAM;AAAA,MACtB,CAAA,MAAO;AACH,QAAA,OAAO,KAAK,MAAA,EAAO;AAAA,MACvB;AAAA,IAEJ,KAAK,SAAA;AACD,MAAA,OAAO,KAAK,SAAA,EAAU;AAAA,IAE1B,KAAK,KAAA;AACD,MAAA,OAAO,KAAK,UAAA,EAAW;AAAA,IAE3B,KAAK,QAAA;AACD,MAAA,OAAO,IAAA,CAAK,iBAAA;AAAA,QACR,MAAM;AACF,UAAA,MAAM,MAAM,IAAA,CAAK,QAAA,CAAS,KAAK,YAAA,EAAc,IAAA,CAAK,MAAM,KAAK,CAAA;AAE7D,UAAA,IAAA,CAAK,MAAA,EAAO;AAEZ,UAAA,IAAI,IAAA,CAAK,OAAA,CAAQA,QAAO,CAAA,EAAG;AACvB,YAAA,IAAA,CAAK,KAAA,EAAM;AAAA,UACf;AAEA,UAAA,OAAO,GAAA;AAAA,QACX,CAAA;AAAA,QACA,MAAM;AACF,UAAA,OAAO,KAAK,KAAA,EAAM;AAAA,QACtB;AAAA,OACJ;AAAA,IAEJ;AACI,MAAA,IAAA,CAAK,MAAM,oDAAoD,CAAA;AAAA;AAE3E;AAEA,SAAS,eAAe,WAAA,EAAa;AACjC,EAAA,IAAA,CAAK,MAAA,EAAO;AAEZ,EAAA,IAAI,KAAK,OAAA,CAAQI,aAAY,KACzB,IAAA,CAAK,OAAA,CAAQN,gBAAe,CAAA,EAAG;AAC/B,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,UAAU,CAAA;AAEzC,IAAA,IAAA,CAAK,IAAA,EAAK;AAEV,IAAA,IAAI,IAAA,CAAK,OAAA,CAAQO,WAAU,CAAA,EAAG;AAC1B,MAAA,IAAA,CAAK,IAAA,EAAK;AACV,MAAA,OAAO,KAAA,GAAQ,GAAA;AAAA,IACnB;AAEA,IAAA,OAAO,KAAA;AAAA,EACX;AAEA,EAAA,IAAI,IAAA,CAAK,OAAA,CAAQA,WAAU,CAAA,EAAG;AAC1B,IAAA,OAAO,GAAA;AAAA,EACX;AAEA,EAAA,IAAA,CAAK,KAAA,CAAM,CAAA,SAAA,EAAY,WAAA,GAAc,OAAA,GAAU,EAAE,CAAA,oBAAA,CAAsB,CAAA;AAC3E;AAEO,SAAS/D,OAAAA,CAAM,OAAO,SAAA,EAAW;AACpC,EAAA,MAAM,QAAQ,IAAA,CAAK,UAAA;AAEnB,EAAA,IAAA,CAAK,MAAA,EAAO;AACZ,EAAA,IAAA,CAAK,IAAI,eAAe,CAAA;AAExB,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA;AAC/B,EAAA,MAAM,iBAAiB,cAAA,CAAe,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,SAAS,YAAY,CAAA;AAC3E,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA;AACjC,EAAA,IAAI,eAAA,GAAkB,IAAA;AACtB,EAAA,IAAI,KAAA,GAAQ,IAAA;AAEZ,EAAA,IAAI,IAAA,CAAK,eAAA,CAAgB,CAAC,CAAA,KAAM,gBAAA,EAAkB;AAC9C,IAAA,eAAA,GAAkB,cAAA,CAAe,KAAK,IAAI,CAAA;AAC1C,IAAA,KAAA,GAAQ,QAAA,CAAS,KAAK,IAAI,CAAA;AAAA,EAC9B;AAEA,EAAA,IAAA,CAAK,MAAA,EAAO;AACZ,EAAA,IAAA,CAAK,IAAI,gBAAgB,CAAA;AAEzB,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,cAAA;AAAA,IACN,GAAA,EAAK,IAAA,CAAK,WAAA,CAAY,KAAA,EAAO,KAAK,UAAU,CAAA;AAAA,IAC5C,IAAA;AAAA,IACA,IAAA;AAAA,IACA,cAAA;AAAA,IACA,MAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,GACJ;AACJ;AAEO,SAASwC,WAAS,IAAA,EAAM;AAC3B,EAAA,IAAA,CAAK,KAAA,CAAM,iBAAiB,GAAG,CAAA;AAC/B,EAAA,IAAA,CAAK,IAAA,CAAK,KAAK,IAAI,CAAA;AACnB,EAAA,IAAA,CAAK,QAAA,CAAS,KAAK,cAAc,CAAA;AACjC,EAAA,IAAA,CAAK,IAAA,CAAK,KAAK,MAAM,CAAA;AAErB,EAAA,IAAI,KAAK,KAAA,EAAO;AACZ,IAAA,IAAA,CAAK,QAAA,CAAS,KAAK,eAAe,CAAA;AAClC,IAAA,IAAA,CAAK,IAAA,CAAK,KAAK,KAAK,CAAA;AAAA,EACxB;AAEA,EAAA,IAAA,CAAK,KAAA,CAAM,kBAAkB,GAAG,CAAA;AACpC;;;ACpIA,IAAA,gBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,gBAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAAA,UAAAA;AAAA,EAAA,IAAA,EAAA,MAAArD,MAAAA;AAAA,EAAA,KAAA,EAAA,MAAAa,OAAAA;AAAA,EAAA,SAAA,EAAA,MAAAI,WAAAA;AAAA,EAAA,WAAA,EAAA,MAAA8C;AAAA,CAAA,CAAA;AAMO,IAAM/D,MAAAA,GAAO,UAAA;AACb,IAAM+D,YAAAA,GAAc,UAAA;AACpB,IAAM9C,WAAAA,GAAY;AAAA,EACrB,IAAA,EAAM,MAAA;AAAA,EACN,QAAA,EAAU,CAAC,EAAE;AACjB,CAAA;AAGO,SAASJ,OAAAA,CAAMuD,eAAc,UAAA,EAAY;AAC5C,EAAA,MAAM,QAAQ,IAAA,CAAK,UAAA;AACnB,EAAA,MAAMpE,MAAAA,GAAO,KAAK,mBAAA,EAAoB;AACtC,EAAA,MAAM,aAAA,GAAgBA,OAAK,WAAA,EAAY;AACvC,EAAA,IAAI,QAAA;AAEJ,EAAA,QAAA,GAAW,UAAA,CAAW,cAAA,CAAe,aAAa,CAAA,GAC5C,WAAW,aAAa,CAAA,CAAE,IAAA,CAAK,IAAA,EAAM,UAAU,CAAA,GAC/CoE,aAAAA,CAAa,IAAA,CAAK,MAAM,UAAU,CAAA;AAExC,EAAA,IAAI,CAAC,KAAK,GAAA,EAAK;AACX,IAAA,IAAA,CAAK,IAAI,gBAAgB,CAAA;AAAA,EAC7B;AAEA,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,UAAA;AAAA,IACN,GAAA,EAAK,IAAA,CAAK,WAAA,CAAY,KAAA,EAAO,KAAK,UAAU,CAAA;AAAA,IAC5C,IAAA,EAAApE,MAAAA;AAAA,IACA;AAAA,GACJ;AACJ;AAEO,SAASqD,WAAS,IAAA,EAAM;AAC3B,EAAA,IAAA,CAAK,KAAA,CAAM,QAAA,EAAe,IAAA,CAAK,IAAA,GAAO,GAAG,CAAA;AACzC,EAAA,IAAA,CAAK,SAAS,IAAI,CAAA;AAClB,EAAA,IAAA,CAAK,KAAA,CAAM,kBAAkB,GAAG,CAAA;AACpC;;;ACxCA,IAAA,uBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,uBAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAAA,UAAAA;AAAA,EAAA,IAAA,EAAA,MAAArD,MAAAA;AAAA,EAAA,KAAA,EAAA,MAAAa,OAAAA;AAAA,EAAA,SAAA,EAAA,MAAAI;AAAA,CAAA,CAAA;AAOO,IAAMjB,MAAAA,GAAO,iBAAA;AACb,IAAMiB,WAAAA,GAAY;AAAA,EACrB,IAAA,EAAM,MAAA;AAAA,EACN,QAAA,EAAU,CAAC,MAAA,EAAQ,IAAI,CAAA;AAAA,EACvB,QAAA,EAAU,CAAC,EAAE;AACjB,CAAA;AAIO,SAASJ,QAAM,IAAA,EAAM;AACxB,EAAA,MAAM,QAAQ,IAAA,CAAK,UAAA;AACnB,EAAA,IAAI,YAAA,GAAe,IAAA;AAEnB,EAAA,IAAI,IAAA,CAAK,cAAc,QAAA,EAAe;AAClC,IAAA,YAAA,GAAe,KAAK,mBAAA,EAAoB;AAAA,EAC5C,CAAA,MAAO;AACH,IAAA,IAAA,CAAK,IAAI,eAAe,CAAA;AAAA,EAC5B;AAEA,EAAA,MAAM,WAAW,IAAA,CAAK,iBAAA;AAAA,IAClB,MAAM;AACF,MAAA,MAAM,kBAAkB,IAAA,CAAK,UAAA;AAC7B,MAAA,MAAMgE,SAAAA,GAAW,IAAA,CAAK,YAAA,CAAa,IAAA,CAAK,MAAM,KAAK,CAAA;AAEnD,MAAA,IAAI,KAAK,GAAA,KAAQ,KAAA,IACb,KAAK,aAAA,CAAc,eAAe,MAAM,KAAA,EAAO;AAC/C,QAAA,IAAA,CAAK,KAAA,EAAM;AAAA,MACf;AAEA,MAAA,OAAOA,SAAAA;AAAA,IACX,CAAA;AAAA,IACA,MAAM,IAAA,CAAK,oBAAA;AAAA,MACP,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,KAAK;AAAA;AACxB,GACJ;AAEA,EAAA,IAAI,CAAC,KAAK,GAAA,EAAK;AACX,IAAA,IAAA,CAAK,IAAI,gBAAgB,CAAA;AAAA,EAC7B;AAEA,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,iBAAA;AAAA,IACN,GAAA,EAAK,IAAA,CAAK,WAAA,CAAY,KAAA,EAAO,KAAK,UAAU,CAAA;AAAA,IAC5C,IAAA;AAAA,IACA,QAAA,EAAU,YAAA;AAAA,IACV;AAAA,GACJ;AACJ;AAEO,SAASxB,WAAS,IAAA,EAAM;AAC3B,EAAA,IAAI,KAAK,QAAA,EAAU;AACf,IAAA,IAAA,CAAK,KAAA,CAAM,QAAA,EAAe,IAAA,CAAK,QAAA,GAAW,GAAG,CAAA;AAAA,EACjD,CAAA,MAAO;AACH,IAAA,IAAA,CAAK,KAAA,CAAM,iBAAiB,GAAG,CAAA;AAAA,EACnC;AAEA,EAAA,IAAA,CAAK,SAAS,IAAI,CAAA;AAClB,EAAA,IAAA,CAAK,KAAA,CAAM,kBAAkB,GAAG,CAAA;AACpC;;;ACjEA,IAAA,YAAA,GAAA,EAAA;AAAA,QAAA,CAAA,YAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAAA,UAAAA;AAAA,EAAA,IAAA,EAAA,MAAArD,MAAAA;AAAA,EAAA,KAAA,EAAA,MAAAa,OAAAA;AAAA,EAAA,SAAA,EAAA,MAAAI,WAAAA;AAAA,EAAA,GAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAGO,IAAM,GAAA,GAAM,KAAA;AACZ,IAAMjB,MAAAA,GAAO,MAAA;AACb,IAAMiB,WAAAA,GAAY;AAAA,EACrB,KAAA,EAAO;AACX,CAAA;AACO,SAASJ,OAAAA,GAAQ;AACpB,EAAA,MAAM,QAAQ,IAAA,CAAK,UAAA;AAEnB,EAAA,IAAA,CAAK,IAAI,IAAI,CAAA;AAEb,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,MAAA;AAAA,IACN,GAAA,EAAK,IAAA,CAAK,WAAA,CAAY,KAAA,EAAO,KAAK,UAAU,CAAA;AAAA,IAC5C,KAAA,EAAO,IAAA,CAAK,cAAA,CAAe,KAAA,GAAQ,CAAC;AAAA,GACxC;AACJ;AACO,SAASwC,WAAS,IAAA,EAAM;AAC3B,EAAA,IAAA,CAAK,KAAA,CAAM,IAAA,EAAM,GAAA,GAAM,IAAA,CAAK,KAAK,CAAA;AACrC;;;ACrBA,IAAA,kBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,kBAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAAA,UAAAA;AAAA,EAAA,IAAA,EAAA,MAAArD,MAAAA;AAAA,EAAA,KAAA,EAAA,MAAAa,OAAAA;AAAA,EAAA,SAAA,EAAA,MAAAI;AAAA,CAAA,CAAA;AAEO,IAAMjB,MAAAA,GAAO,YAAA;AACb,IAAMiB,WAAAA,GAAY;AAAA,EACrB,IAAA,EAAM;AACV,CAAA;AAEO,SAASJ,OAAAA,GAAQ;AACpB,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,YAAA;AAAA,IACN,KAAK,IAAA,CAAK,WAAA,CAAY,IAAA,CAAK,UAAA,EAAY,KAAK,QAAQ,CAAA;AAAA,IACpD,IAAA,EAAM,IAAA,CAAK,OAAA,CAAQ,KAAK;AAAA,GAC5B;AACJ;AAEO,SAASwC,WAAS,IAAA,EAAM;AAC3B,EAAA,IAAA,CAAK,KAAA,CAAM,KAAA,EAAO,IAAA,CAAK,IAAI,CAAA;AAC/B;;;ACjBA,IAAA,kBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,kBAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAAA,UAAAA;AAAA,EAAA,IAAA,EAAA,MAAArD,MAAAA;AAAA,EAAA,KAAA,EAAA,MAAAa,OAAAA;AAAA,EAAA,SAAA,EAAA,MAAAI;AAAA,CAAA,CAAA;AAEO,IAAMjB,MAAAA,GAAO,YAAA;AACb,IAAMiB,WAAAA,GAAY;AAAA,EACrB,IAAA,EAAM;AACV,CAAA;AAEO,SAASJ,OAAAA,GAAQ;AACpB,EAAA,MAAM,QAAQ,IAAA,CAAK,UAAA;AAGnB,EAAA,IAAA,CAAK,IAAI,IAAI,CAAA;AAEb,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,YAAA;AAAA,IACN,GAAA,EAAK,IAAA,CAAK,WAAA,CAAY,KAAA,EAAO,KAAK,UAAU,CAAA;AAAA,IAC5C,IAAA,EAAM,IAAA,CAAK,cAAA,CAAe,KAAA,GAAQ,CAAC;AAAA,GACvC;AACJ;AAEO,SAASwC,WAAS,IAAA,EAAM;AAI3B,EAAA,IAAA,CAAK,KAAA,CAAM,KAAA,EAAO,GAAA,GAAM,IAAA,CAAK,IAAI,CAAA;AACrC;;;ACzBA,IAAA,aAAA,GAAA,EAAA;AAAA,QAAA,CAAA,aAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAAA,UAAAA;AAAA,EAAA,IAAA,EAAA,MAAArD,MAAAA;AAAA,EAAA,KAAA,EAAA,MAAAa,OAAAA;AAAA,EAAA,SAAA,EAAA,MAAAI;AAAA,CAAA,CAAA;AAEA,IAAM6D,SAAAA,GAAW,EAAA;AAEV,IAAM9E,MAAAA,GAAO,OAAA;AACb,IAAMiB,WAAAA,GAAY;AAAA,EACrB,IAAA,EAAM;AACV,CAAA;AAEO,SAASJ,OAAAA,GAAQ;AACpB,EAAA,IAAI,aAAa,IAAA,CAAK,UAAA;AACtB,EAAA,IAAIb,MAAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAA;AAE7B,EAAA,OAAO,IAAA,CAAK,OAAA,CAAQ8E,SAAQ,CAAA,EAAG;AAC3B,IAAA,IAAA,CAAK,IAAI,KAAK,CAAA;AACd,IAAA9E,MAAAA,IAAQ,GAAA,GAAM,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAA;AAAA,EACpC;AAEA,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,OAAA;AAAA,IACN,GAAA,EAAK,IAAA,CAAK,WAAA,CAAY,UAAA,EAAY,KAAK,UAAU,CAAA;AAAA,IACjD,IAAA,EAAAA;AAAA,GACJ;AACJ;AAEO,SAASqD,WAAS,IAAA,EAAM;AAC3B,EAAA,IAAA,CAAK,QAAA,CAAS,KAAK,IAAI,CAAA;AAC3B;;;AC3BA,IAAA,iBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,iBAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAAA,UAAAA;AAAA,EAAA,IAAA,EAAA,MAAArD,MAAAA;AAAA,EAAA,KAAA,EAAA,MAAAa,OAAAA;AAAA,EAAA,SAAA,EAAA,MAAAI;AAAA,CAAA,CAAA;AAEO,IAAMjB,MAAAA,GAAO,WAAA;AACb,IAAMiB,WAAAA,GAAY;AAAA,EACrB,UAAU,CAAC;AAAA,IACP;AAAA,GACH;AACL,CAAA;AAEO,SAASJ,OAAAA,GAAQ;AACpB,EAAA,MAAM,QAAA,GAAW,KAAK,UAAA,EAAW;AAEjC,EAAA,IAAA,CAAK,MAAA,EAAO;AAEZ,EAAA,OAAO,CAAC,KAAK,GAAA,EAAK;AACd,IAAA,QAAA,CAAS,IAAA,CAAK,IAAA,CAAK,KAAA,EAAO,CAAA;AAE1B,IAAA,IAAI,IAAA,CAAK,eAAA,CAAgB,CAAC,CAAA,KAAM,KAAA,EAAO;AACnC,MAAA;AAAA,IACJ;AAEA,IAAA,IAAA,CAAK,MAAA,EAAO;AACZ,IAAA,IAAA,CAAK,IAAA,EAAK;AACV,IAAA,IAAA,CAAK,MAAA,EAAO;AAAA,EAChB;AAEA,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,WAAA;AAAA,IACN,GAAA,EAAK,IAAA,CAAK,mBAAA,CAAoB,QAAQ,CAAA;AAAA,IACtC;AAAA,GACJ;AACJ;AAEO,SAASwC,WAAS,IAAA,EAAM;AAC3B,EAAA,IAAA,CAAK,SAAS,IAAA,EAAM,MAAM,KAAK,KAAA,CAAM,KAAA,EAAO,GAAG,CAAC,CAAA;AACpD;;;ACnCA,IAAA,kBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,kBAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAAA,UAAAA;AAAA,EAAA,IAAA,EAAA,MAAArD,MAAAA;AAAA,EAAA,KAAA,EAAA,MAAAa,OAAAA;AAAA,EAAA,SAAA,EAAA,MAAAI;AAAA,CAAA,CAAA;AAUO,IAAMjB,MAAAA,GAAO,YAAA;AACb,IAAMiB,WAAAA,GAAY;AAAA,EACrB,QAAA,EAAU,CAAC,MAAA,EAAQ,IAAI,CAAA;AAAA,EACvB,SAAA,EAAW,CAAC,MAAA,EAAQ,IAAI,CAAA;AAAA,EACxB,SAAA,EAAW,CAAC,WAAA,EAAa,IAAI;AACjC,CAAA;AAEO,SAASJ,OAAAA,GAAQ;AACpB,EAAA,MAAM,QAAQ,IAAA,CAAK,UAAA;AACnB,EAAA,IAAI,QAAA,GAAW,IAAA;AACf,EAAA,IAAI,SAAA,GAAY,IAAA;AAChB,EAAA,IAAI,SAAA,GAAY,IAAA;AAEhB,EAAA,IAAA,CAAK,MAAA,EAAO;AAEZ,EAAA,IAAI,KAAK,SAAA,KAAc,KAAA,IAAS,KAAK,eAAA,CAAgB,CAAC,MAAM,eAAA,EAAiB;AAEzE,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAA;AAChC,IAAA,MAAM,cAAA,GAAiB,MAAM,WAAA,EAAY;AAEzC,IAAA,IAAI,cAAA,KAAmB,KAAA,IAAS,cAAA,KAAmB,MAAA,EAAQ;AACvD,MAAA,IAAA,CAAK,MAAA,EAAO;AACZ,MAAA,QAAA,GAAW,cAAA;AACX,MAAA,SAAA,GAAY,IAAA,CAAK,QAAQ,KAAK,CAAA;AAAA,IAClC,CAAA,MAAO;AACH,MAAA,SAAA,GAAY,KAAA;AAAA,IAChB;AAEA,IAAA,QAAQ,IAAA,CAAK,eAAA,CAAgB,CAAC,CAAA;AAAG,MAC7B,KAAK,KAAA,EAAO;AAER,QAAA,IAAA,CAAK,MAAA,EAAO;AACZ,QAAA,IAAA,CAAK,SAAS,KAAK,CAAA;AACnB,QAAA,SAAA,GAAY,IAAA,CAAK,UAAU,OAAO,CAAA;AAClC,QAAA;AAAA,MACJ;AAAA,MAEA,KAAK,gBAAA;AAAA,MACL,KAAK,SAAA;AAAA,MACL,KAAK,KAAA;AAAA,MACL,KAAK,GAAA;AACD,QAAA;AAAA,MAEJ;AACI,QAAA,IAAA,CAAK,MAAM,uCAAuC,CAAA;AAAA;AAC1D,EACJ,CAAA,MAAO;AACH,IAAA,QAAQ,KAAK,SAAA;AAAW,MACpB,KAAK,KAAA;AAAA,MACL,KAAK,eAAA;AAAA,MACL,KAAK,QAAA,EAAe;AAEhB,QAAA,SAAA,GAAY,IAAA,CAAK,UAAU,OAAO,CAAA;AAClC,QAAA;AAAA,MACJ;AAAA,MAEA,KAAK,gBAAA;AAAA,MACL,KAAK,SAAA;AAAA,MACL,KAAK,GAAA;AACD,QAAA;AAAA,MAEJ;AACI,QAAA,IAAA,CAAK,MAAM,uCAAuC,CAAA;AAAA;AAC1D,EACJ;AAEA,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,YAAA;AAAA,IACN,GAAA,EAAK,IAAA,CAAK,WAAA,CAAY,KAAA,EAAO,KAAK,UAAU,CAAA;AAAA,IAC5C,QAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,GACJ;AACJ;AAEO,SAASwC,WAAS,IAAA,EAAM;AAC3B,EAAA,IAAI,KAAK,SAAA,EAAW;AAChB,IAAA,IAAI,KAAK,QAAA,EAAU;AACf,MAAA,IAAA,CAAK,KAAA,CAAM,KAAA,EAAO,IAAA,CAAK,QAAQ,CAAA;AAAA,IACnC;AAEA,IAAA,IAAA,CAAK,KAAA,CAAM,KAAA,EAAO,IAAA,CAAK,SAAS,CAAA;AAEhC,IAAA,IAAI,KAAK,SAAA,EAAW;AAChB,MAAA,IAAA,CAAK,KAAA,CAAM,OAAO,KAAK,CAAA;AACvB,MAAA,IAAA,CAAK,IAAA,CAAK,KAAK,SAAS,CAAA;AAAA,IAC5B;AAAA,EACJ,CAAA,MAAA,IAAW,KAAK,SAAA,EAAW;AACvB,IAAA,IAAA,CAAK,IAAA,CAAK,KAAK,SAAS,CAAA;AAAA,EAC5B;AACJ;;;ACpGA,IAAA,sBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,sBAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAAA,UAAAA;AAAA,EAAA,IAAA,EAAA,MAAArD,MAAAA;AAAA,EAAA,KAAA,EAAA,MAAAa,OAAAA;AAAA,EAAA,SAAA,EAAA,MAAAI;AAAA,CAAA,CAAA;AAEO,IAAMjB,MAAAA,GAAO,gBAAA;AACb,IAAMiB,WAAAA,GAAY;AAAA,EACrB,UAAU,CAAC;AAAA,IACP;AAAA,GACH;AACL,CAAA;AAEO,SAASJ,OAAAA,GAAQ;AACpB,EAAA,MAAM,QAAA,GAAW,KAAK,UAAA,EAAW;AAEjC,EAAA,IAAA,CAAK,MAAA,EAAO;AAEZ,EAAA,OAAO,CAAC,KAAK,GAAA,EAAK;AACd,IAAA,QAAA,CAAS,IAAA,CAAK,IAAA,CAAK,UAAA,EAAY,CAAA;AAE/B,IAAA,IAAI,IAAA,CAAK,cAAc,KAAA,EAAO;AAC1B,MAAA;AAAA,IACJ;AAEA,IAAA,IAAA,CAAK,IAAA,EAAK;AAAA,EACd;AAEA,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,gBAAA;AAAA,IACN,GAAA,EAAK,IAAA,CAAK,mBAAA,CAAoB,QAAQ,CAAA;AAAA,IACtC;AAAA,GACJ;AACJ;AAEO,SAASwC,WAAS,IAAA,EAAM;AAC3B,EAAA,IAAA,CAAK,SAAS,IAAA,EAAM,MAAM,KAAK,KAAA,CAAM,KAAA,EAAO,GAAG,CAAC,CAAA;AACpD;;;ACjCA,IAAA,uBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,uBAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAAA,UAAAA;AAAA,EAAA,IAAA,EAAA,MAAArD,MAAAA;AAAA,EAAA,KAAA,EAAA,MAAAa,OAAAA;AAAA,EAAA,SAAA,EAAA,MAAAI;AAAA,CAAA,CAAA;AAEA,IAAMiD,UAAAA,GAAY,EAAA;AAEX,IAAMlE,MAAAA,GAAO,iBAAA;AACb,IAAMiB,cAAY,EACzB;AAEO,SAASJ,OAAAA,GAAQ;AACpB,EAAA,MAAM,QAAQ,IAAA,CAAK,UAAA;AAEnB,EAAA,IAAA,CAAK,SAASqD,UAAS,CAAA;AAEvB,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,iBAAA;AAAA,IACN,GAAA,EAAK,IAAA,CAAK,WAAA,CAAY,KAAA,EAAO,KAAK,UAAU;AAAA,GAChD;AACJ;AAEO,SAASb,UAAAA,GAAW;AACvB,EAAA,IAAA,CAAK,KAAA,CAAM,OAAO,GAAG,CAAA;AACzB;;;ACrBA,IAAA,WAAA,GAAA,EAAA;AAAA,QAAA,CAAA,WAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAAA,UAAAA;AAAA,EAAA,IAAA,EAAA,MAAArD,MAAAA;AAAA,EAAA,KAAA,EAAA,MAAAa,OAAAA;AAAA,EAAA,SAAA,EAAA,MAAAI;AAAA,CAAA,CAAA;AAEO,IAAMjB,MAAAA,GAAO,KAAA;AACb,IAAMiB,WAAAA,GAAY;AAAA,EACrB,GAAA,EAAK,CAAC,SAAA,EAAW,YAAY,CAAA;AAAA,EAC7B,QAAA,EAAU,CAAC,cAAA,EAAgB,IAAI;AACnC,CAAA;AAEO,SAASJ,OAAAA,GAAQ;AACpB,EAAA,IAAA,CAAK,MAAA,EAAO;AAEZ,EAAA,MAAM,QAAQ,IAAA,CAAK,UAAA;AACnB,EAAA,IAAI,GAAA,GAAM,KAAA;AACV,EAAA,IAAIkE,SAAAA,GAAW,IAAA;AACf,EAAA,IAAIC,IAAAA;AAEJ,EAAA,IAAI,IAAA,CAAK,YAAY,CAAA,EAAG,KAAK,KAAK,IAAA,CAAK,WAAA,CAAY,CAAA,EAAG,MAAM,CAAA,EAAG;AAC3D,IAAAA,IAAAA,GAAM,KAAK,UAAA,EAAW;AAAA,EAC1B,CAAA,MAAO;AACH,IAAAA,IAAAA,GAAM,KAAK,OAAA,EAAQ;AAAA,EACvB;AAEA,EAAA,GAAA,GAAM,IAAA,CAAK,UAAA;AACX,EAAA,IAAA,CAAK,MAAA,EAAO;AAEZ,EAAA,IAAI,IAAA,CAAK,WAAA,CAAY,CAAA,EAAG,IAAI,CAAA,EAAG;AAC3B,IAAA,IAAA,CAAK,IAAA,EAAK;AAEV,IAAAD,SAAAA,GAAW,KAAK,YAAA,EAAa;AAC7B,IAAA,GAAA,GAAM,IAAA,CAAK,UAAA;AAAA,EACf;AAEA,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,KAAA;AAAA,IACN,GAAA,EAAK,IAAA,CAAK,WAAA,CAAY,KAAA,EAAO,GAAG,CAAA;AAAA,IAChC,GAAA,EAAAC,IAAAA;AAAA,IACA,QAAA,EAAAD;AAAA,GACJ;AACJ;AAEO,SAAS1B,WAAS,IAAA,EAAM;AAC3B,EAAA,IAAA,CAAK,IAAA,CAAK,KAAK,GAAG,CAAA;AAClB,EAAA,IAAI,IAAA,CAAK,aAAa,IAAA,EAAM;AACxB,IAAA,IAAA,CAAK,KAAA,CAAM,OAAO,IAAI,CAAA;AACtB,IAAA,IAAA,CAAK,IAAA,CAAK,KAAK,QAAQ,CAAA;AAAA,EAC3B;AACJ;;;AC9CA,IAAA,cAAA,GAAA,EAAA;AAAA,QAAA,CAAA,cAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAAA,UAAAA;AAAA,EAAA,IAAA,EAAA,MAAArD,MAAAA;AAAA,EAAA,KAAA,EAAA,MAAAa,OAAAA;AAAA,EAAA,SAAA,EAAA,MAAAI;AAAA,CAAA,CAAA;AAEO,IAAMjB,MAAAA,GAAO,QAAA;AACb,IAAMiB,WAAAA,GAAY;AAAA,EACrB,KAAA,EAAO;AACX,CAAA;AAEO,SAASJ,OAAAA,GAAQ;AACpB,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,QAAA;AAAA,IACN,KAAK,IAAA,CAAK,WAAA,CAAY,IAAA,CAAK,UAAA,EAAY,KAAK,QAAQ,CAAA;AAAA,IACpD,KAAA,EAAO,IAAA,CAAK,OAAA,CAAQV,OAAW;AAAA,GACnC;AACJ;AAEO,SAASkD,WAAS,IAAA,EAAM;AAC3B,EAAA,IAAA,CAAK,KAAA,CAAMlD,OAAAA,EAAa,IAAA,CAAK,KAAK,CAAA;AACtC;;;ACjBA,IAAA,gBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,gBAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAAkD,UAAAA;AAAA,EAAA,IAAA,EAAA,MAAArD,MAAAA;AAAA,EAAA,KAAA,EAAA,MAAAa,OAAAA;AAAA,EAAA,SAAA,EAAA,MAAAI;AAAA,CAAA,CAAA;AACO,IAAMjB,MAAAA,GAAO,UAAA;AACb,IAAMiB,WAAAA,GAAY;AAAA,EACrB,KAAA,EAAO;AACX,CAAA;AAEO,SAASJ,OAAAA,GAAQ;AACpB,EAAA,MAAM,QAAQ,IAAA,CAAK,UAAA;AAEnB,EAAA,IAAA,CAAK,IAAA,EAAK;AAEV,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,UAAA;AAAA,IACN,GAAA,EAAK,IAAA,CAAK,WAAA,CAAY,KAAA,EAAO,KAAK,UAAU,CAAA;AAAA,IAC5C,KAAA,EAAO,IAAA,CAAK,cAAA,CAAe,KAAK;AAAA,GACpC;AACJ;AAEO,SAASwC,WAAS,IAAA,EAAM;AAC3B,EAAA,IAAA,CAAK,QAAA,CAAS,KAAK,KAAK,CAAA;AAC5B;;;ACpBA,IAAA,mBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,mBAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAAA,UAAAA;AAAA,EAAA,IAAA,EAAA,MAAArD,MAAAA;AAAA,EAAA,KAAA,EAAA,MAAAa,OAAAA;AAAA,EAAA,SAAA,EAAA,MAAAI;AAAA,CAAA,CAAA;AAKO,IAAMjB,MAAAA,GAAO,aAAA;AACb,IAAMiB,WAAAA,GAAY;AAAA,EACrB,QAAA,EAAU,CAAC,EAAE;AACjB,CAAA;AAEO,SAASJ,OAAAA,CAAMuD,eAAc,UAAA,EAAY;AAC5C,EAAA,MAAM,QAAQ,IAAA,CAAK,UAAA;AACnB,EAAA,IAAI,QAAA,GAAW,IAAA;AAEf,EAAA,IAAA,CAAK,IAAI,eAAe,CAAA;AAExB,EAAA,QAAA,GAAWA,aAAAA,CAAa,IAAA,CAAK,IAAA,EAAM,UAAU,CAAA;AAE7C,EAAA,IAAI,CAAC,KAAK,GAAA,EAAK;AACX,IAAA,IAAA,CAAK,IAAI,gBAAgB,CAAA;AAAA,EAC7B;AAEA,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,aAAA;AAAA,IACN,GAAA,EAAK,IAAA,CAAK,WAAA,CAAY,KAAA,EAAO,KAAK,UAAU,CAAA;AAAA,IAC5C;AAAA,GACJ;AACJ;AAEO,SAASf,WAAS,IAAA,EAAM;AAC3B,EAAA,IAAA,CAAK,KAAA,CAAM,iBAAiB,GAAG,CAAA;AAC/B,EAAA,IAAA,CAAK,SAAS,IAAI,CAAA;AAClB,EAAA,IAAA,CAAK,KAAA,CAAM,kBAAkB,GAAG,CAAA;AACpC;;;ACjCA,IAAA,kBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,kBAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAAA,UAAAA;AAAA,EAAA,IAAA,EAAA,MAAArD,MAAAA;AAAA,EAAA,KAAA,EAAA,MAAAa,OAAAA;AAAA,EAAA,SAAA,EAAA,MAAAI;AAAA,CAAA,CAAA;AAEO,IAAMjB,MAAAA,GAAO,YAAA;AACb,IAAMiB,WAAAA,GAAY;AAAA,EACrB,KAAA,EAAO;AACX,CAAA;AAEO,SAASJ,OAAAA,GAAQ;AACpB,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,YAAA;AAAA,IACN,KAAK,IAAA,CAAK,WAAA,CAAY,IAAA,CAAK,UAAA,EAAY,KAAK,QAAQ,CAAA;AAAA,IACpD,KAAA,EAAO,IAAA,CAAK,aAAA,CAAc,UAAU;AAAA,GACxC;AACJ;AAEO,SAASwC,WAAS,IAAA,EAAM;AAC3B,EAAA,IAAA,CAAK,KAAA,CAAM,UAAA,EAAY,IAAA,CAAK,KAAA,GAAQ,GAAG,CAAA;AAC3C;;;ACjBA,IAAA,2BAAA,GAAA,EAAA;AAAA,QAAA,CAAA,2BAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAAA,UAAAA;AAAA,EAAA,IAAA,EAAA,MAAArD,MAAAA;AAAA,EAAA,KAAA,EAAA,MAAAa,OAAAA;AAAA,EAAA,SAAA,EAAA,MAAAI,WAAAA;AAAA,EAAA,WAAA,EAAA,MAAA8C;AAAA,CAAA,CAAA;AAQO,IAAM/D,MAAAA,GAAO,qBAAA;AACb,IAAM+D,YAAAA,GAAc,UAAA;AACpB,IAAM9C,WAAAA,GAAY;AAAA,EACrB,IAAA,EAAM,MAAA;AAAA,EACN,QAAA,EAAU,CAAC,CAAC,KAAK,GAAG,IAAI;AAC5B,CAAA;AAGO,SAASJ,OAAAA,GAAQ;AACpB,EAAA,MAAM,QAAQ,IAAA,CAAK,UAAA;AACnB,EAAA,IAAI,QAAA,GAAW,IAAA;AACf,EAAA,IAAIb,MAAAA;AACJ,EAAA,IAAI,aAAA;AAEJ,EAAA,IAAA,CAAK,IAAI,KAAK,CAAA;AAEd,EAAA,IAAI,IAAA,CAAK,cAAc,QAAA,EAAe;AAClC,IAAAA,MAAAA,GAAO,KAAK,mBAAA,EAAoB;AAChC,IAAA,aAAA,GAAgBA,OAAK,WAAA,EAAY;AAEjC,IAAA,IAAI,IAAA,CAAK,eAAA,CAAgB,CAAC,CAAA,IAAK,gBAAA,EAAkB;AAC7C,MAAA,QAAA,GAAW,KAAK,UAAA,EAAW;AAAA,IAC/B,WAAW,cAAA,CAAe,IAAA,CAAK,IAAA,CAAK,MAAA,EAAQ,aAAa,CAAA,EAAG;AACxD,MAAA,IAAA,CAAK,MAAA,EAAO;AACZ,MAAA,QAAA,GAAW,IAAA,CAAK,MAAA,CAAO,aAAa,CAAA,CAAE,KAAK,IAAI,CAAA;AAC/C,MAAA,IAAA,CAAK,MAAA,EAAO;AAAA,IAChB,CAAA,MAAO;AACH,MAAA,QAAA,GAAW,KAAK,UAAA,EAAW;AAC3B,MAAA,QAAA,CAAS,IAAA;AAAA,QACL,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,KAAK;AAAA,OACxB;AAAA,IACJ;AAEA,IAAA,IAAA,CAAK,IAAI,gBAAgB,CAAA;AAAA,EAC7B,CAAA,MAAO;AACH,IAAAA,MAAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAA;AAAA,EAC7B;AAEA,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,qBAAA;AAAA,IACN,GAAA,EAAK,IAAA,CAAK,WAAA,CAAY,KAAA,EAAO,KAAK,UAAU,CAAA;AAAA,IAC5C,IAAA,EAAAA,MAAAA;AAAA,IACA;AAAA,GACJ;AACJ;AAEO,SAASqD,WAAS,IAAA,EAAM;AAC3B,EAAA,IAAA,CAAK,KAAA,CAAM,OAAO,GAAG,CAAA;AAErB,EAAA,IAAI,IAAA,CAAK,aAAa,IAAA,EAAM;AACxB,IAAA,IAAA,CAAK,KAAA,CAAM,KAAA,EAAO,IAAA,CAAK,IAAI,CAAA;AAAA,EAC/B,CAAA,MAAO;AACH,IAAA,IAAA,CAAK,KAAA,CAAM,QAAA,EAAe,IAAA,CAAK,IAAA,GAAO,GAAG,CAAA;AACzC,IAAA,IAAA,CAAK,SAAS,IAAI,CAAA;AAClB,IAAA,IAAA,CAAK,KAAA,CAAM,kBAAkB,GAAG,CAAA;AAAA,EACpC;AACJ;;;AChEA,IAAA,6BAAA,GAAA,EAAA;AAAA,QAAA,CAAA,6BAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAAA,UAAAA;AAAA,EAAA,IAAA,EAAA,MAAArD,MAAAA;AAAA,EAAA,KAAA,EAAA,MAAAa,OAAAA;AAAA,EAAA,SAAA,EAAA,MAAAI,WAAAA;AAAA,EAAA,WAAA,EAAA,MAAA8C;AAAA,CAAA,CAAA;AAOO,IAAM/D,MAAAA,GAAO,uBAAA;AACb,IAAM+D,YAAAA,GAAc,UAAA;AACpB,IAAM9C,WAAAA,GAAY;AAAA,EACrB,IAAA,EAAM,MAAA;AAAA,EACN,QAAA,EAAU,CAAC,CAAC,KAAK,GAAG,IAAI;AAC5B,CAAA;AAGO,SAASJ,OAAAA,GAAQ;AACpB,EAAA,MAAM,QAAQ,IAAA,CAAK,UAAA;AACnB,EAAA,IAAI,QAAA,GAAW,IAAA;AACf,EAAA,IAAIb,MAAAA;AACJ,EAAA,IAAI,aAAA;AAEJ,EAAA,IAAA,CAAK,IAAI,KAAK,CAAA;AACd,EAAA,IAAA,CAAK,IAAI,KAAK,CAAA;AAEd,EAAA,IAAI,IAAA,CAAK,cAAc,QAAA,EAAe;AAClC,IAAAA,MAAAA,GAAO,KAAK,mBAAA,EAAoB;AAChC,IAAA,aAAA,GAAgBA,OAAK,WAAA,EAAY;AAEjC,IAAA,IAAI,IAAA,CAAK,eAAA,CAAgB,CAAC,CAAA,IAAK,gBAAA,EAAkB;AAC7C,MAAA,QAAA,GAAW,KAAK,UAAA,EAAW;AAAA,IAC/B,WAAW,cAAA,CAAe,IAAA,CAAK,IAAA,CAAK,MAAA,EAAQ,aAAa,CAAA,EAAG;AACxD,MAAA,IAAA,CAAK,MAAA,EAAO;AACZ,MAAA,QAAA,GAAW,IAAA,CAAK,MAAA,CAAO,aAAa,CAAA,CAAE,KAAK,IAAI,CAAA;AAC/C,MAAA,IAAA,CAAK,MAAA,EAAO;AAAA,IAChB,CAAA,MAAO;AACH,MAAA,QAAA,GAAW,KAAK,UAAA,EAAW;AAC3B,MAAA,QAAA,CAAS,IAAA;AAAA,QACL,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,KAAK;AAAA,OACxB;AAAA,IACJ;AAEA,IAAA,IAAA,CAAK,IAAI,gBAAgB,CAAA;AAAA,EAC7B,CAAA,MAAO;AACH,IAAAA,MAAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAA;AAAA,EAC7B;AAEA,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,uBAAA;AAAA,IACN,GAAA,EAAK,IAAA,CAAK,WAAA,CAAY,KAAA,EAAO,KAAK,UAAU,CAAA;AAAA,IAC5C,IAAA,EAAAA,MAAAA;AAAA,IACA;AAAA,GACJ;AACJ;AAEO,SAASqD,WAAS,IAAA,EAAM;AAC3B,EAAA,IAAA,CAAK,KAAA,CAAM,OAAO,GAAG,CAAA;AACrB,EAAA,IAAA,CAAK,KAAA,CAAM,OAAO,GAAG,CAAA;AAErB,EAAA,IAAI,IAAA,CAAK,aAAa,IAAA,EAAM;AACxB,IAAA,IAAA,CAAK,KAAA,CAAM,KAAA,EAAO,IAAA,CAAK,IAAI,CAAA;AAAA,EAC/B,CAAA,MAAO;AACH,IAAA,IAAA,CAAK,KAAA,CAAM,QAAA,EAAe,IAAA,CAAK,IAAA,GAAO,GAAG,CAAA;AACzC,IAAA,IAAA,CAAK,SAAS,IAAI,CAAA;AAClB,IAAA,IAAA,CAAK,KAAA,CAAM,kBAAkB,GAAG,CAAA;AAAA,EACpC;AACJ;;;ACjEA,IAAA,aAAA,GAAA,EAAA;AAAA,QAAA,CAAA,aAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAAA,UAAAA;AAAA,EAAA,IAAA,EAAA,MAAArD,MAAAA;AAAA,EAAA,KAAA,EAAA,MAAAa,OAAAA;AAAA,EAAA,SAAA,EAAA,MAAAI;AAAA,CAAA,CAAA;AAMA,IAAMsD,QAAAA,GAAU,EAAA;AAYhB,SAAS,WAAA,GAAc;AACnB,EAAA,IAAA,CAAK,MAAA,EAAO;AAEZ,EAAA,QAAQ,KAAK,SAAA;AAAW,IACpB,KAAKpE,OAAAA;AACD,MAAA,OAAO,KAAK,MAAA,EAAO;AAAA,IAEvB,KAAK,QAAA;AACD,MAAA,OAAO,KAAK,QAAA,CAAS,IAAA,CAAK,YAAA,EAAc,IAAA,CAAK,MAAM,KAAK,CAAA;AAAA,IAE5D;AACI,MAAA,IAAA,CAAK,MAAM,gCAAgC,CAAA;AAAA;AAEvD;AAEO,IAAMH,MAAAA,GAAO,OAAA;AACb,IAAMiB,WAAAA,GAAY;AAAA,EACrB,IAAA,EAAM,CAAC,QAAA,EAAU,UAAU,CAAA;AAAA,EAC3B,KAAA,EAAO,CAAC,QAAA,EAAU,UAAA,EAAY,IAAI;AACtC,CAAA;AAGO,SAASJ,OAAAA,GAAQ;AACpB,EAAA,MAAM,QAAQ,IAAA,CAAK,UAAA;AACnB,EAAA,MAAM,IAAA,GAAO,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA;AAClC,EAAA,IAAI,KAAA,GAAQ,IAAA;AAEZ,EAAA,IAAA,CAAK,MAAA,EAAO;AACZ,EAAA,IAAI,IAAA,CAAK,OAAA,CAAQ0D,QAAO,CAAA,EAAG;AACvB,IAAA,IAAA,CAAK,SAASA,QAAO,CAAA;AACrB,IAAA,KAAA,GAAQ,WAAA,CAAY,KAAK,IAAI,CAAA;AAAA,EACjC;AAEA,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,OAAA;AAAA,IACN,GAAA,EAAK,IAAA,CAAK,WAAA,CAAY,KAAA,EAAO,KAAK,UAAU,CAAA;AAAA,IAC5C,IAAA;AAAA,IACA;AAAA,GACJ;AACJ;AAEO,SAASlB,WAAS,IAAA,EAAM;AAC3B,EAAA,IAAA,CAAK,IAAA,CAAK,KAAK,IAAI,CAAA;AACnB,EAAA,IAAA,CAAK,KAAA,CAAM,OAAO,GAAG,CAAA;AACrB,EAAA,IAAI,KAAK,KAAA,EAAO;AACZ,IAAA,IAAA,CAAK,IAAA,CAAK,KAAK,KAAK,CAAA;AAAA,EACxB,CAAA,MAAO;AACH,IAAA,IAAA,CAAK,IAAA,CAAKlD,SAAa,CAAC,CAAA;AAAA,EAC5B;AACJ;;;ACnEA,IAAA,WAAA,GAAA,EAAA;AAAA,QAAA,CAAA,WAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAAkD,UAAAA;AAAA,EAAA,IAAA,EAAA,MAAArD,MAAAA;AAAA,EAAA,KAAA,EAAA,MAAAa,OAAAA;AAAA,EAAA,SAAA,EAAA,MAAAI;AAAA,CAAA,CAAA;AAEA,SAAS,kBAAA,GAAqB;AAC1B,EAAA,IAAI,IAAA,CAAK,aAAa,CAAA,EAAG;AACrB,IAAA,IAAI,IAAA,CAAK,UAAA,CAAW,EAAE,CAAA,KAAM,UAAA,EAAY;AACpC,MAAA,OAAO,IAAA,CAAK,aAAa,CAAA,GACnB,IAAA,CAAK,cAAc,IAAA,CAAK,UAAA,GAAa,CAAC,CAAA,GACtC,IAAA,CAAK,eAAA;AAAA,IACf;AAAA,EACJ;AAEA,EAAA,OAAO,IAAA,CAAK,UAAA;AAChB;AAEO,IAAMjB,MAAAA,GAAO,KAAA;AACb,IAAMiB,WAAAA,GAAY;AAAA,EACrB,KAAA,EAAO;AACX,CAAA;AAEO,SAASJ,OAAAA,CAAM,cAAc,iBAAA,EAAmB;AACnD,EAAA,MAAM,WAAA,GAAc,IAAA,CAAK,aAAA,CAAc,IAAA,CAAK,UAAU,CAAA;AACtD,EAAA,IAAI,SAAA;AAEJ,EAAA,IAAA,CAAK,iBAAA,CAAkB,IAAA,CAAK,UAAA,EAAY,YAAA,IAAgB,KAAK,sBAAsB,CAAA;AAEnF,EAAA,IAAI,iBAAA,IAAqB,IAAA,CAAK,UAAA,GAAa,WAAA,EAAa;AACpD,IAAA,SAAA,GAAY,kBAAA,CAAmB,KAAK,IAAI,CAAA;AAAA,EAC5C,CAAA,MAAO;AACH,IAAA,SAAA,GAAY,IAAA,CAAK,UAAA;AAAA,EACrB;AAEA,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,KAAA;AAAA,IACN,GAAA,EAAK,IAAA,CAAK,WAAA,CAAY,WAAA,EAAa,SAAS,CAAA;AAAA,IAC5C,KAAA,EAAO,IAAA,CAAK,SAAA,CAAU,WAAA,EAAa,SAAS;AAAA,GAChD;AACJ;AAEO,SAASwC,WAAS,IAAA,EAAM;AAC3B,EAAA,IAAA,CAAK,QAAA,CAAS,KAAK,KAAK,CAAA;AAC5B;;;ACxCA,IAAA,YAAA,GAAA,EAAA;AAAA,QAAA,CAAA,YAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAAA,UAAAA;AAAA,EAAA,IAAA,EAAA,MAAArD,MAAAA;AAAA,EAAA,KAAA,EAAA,MAAAa,OAAAA;AAAA,EAAA,SAAA,EAAA,MAAAI,WAAAA;AAAA,EAAA,WAAA,EAAA,MAAA8C;AAAA,CAAA,CAAA;AAEA,SAASI,WAAAA,GAAa;AAClB,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,4BAAA,EAA8B,IAAI,CAAA;AAC3D;AAEA,SAAS,cAAA,GAAiB;AACtB,EAAA,MAAM,OAAA,GAAU,KAAK,YAAA,EAAa;AAElC,EAAA,IAAI,OAAA,CAAQ,SAAS,KAAA,IACjB,IAAA,CAAK,QAAQ,KAAA,IACb,IAAA,CAAK,cAAc,gBAAA,EAAkB;AACrC,IAAA,IAAA,CAAK,KAAA,EAAM;AAAA,EACf;AAEA,EAAA,OAAO,OAAA;AACX;AAEO,IAAMnE,MAAAA,GAAO,MAAA;AACb,IAAM+D,YAAAA,GAAc,MAAA;AACpB,IAAM9C,WAAAA,GAAY;AAAA,EACrB,OAAA,EAAS,CAAC,cAAA,EAAgB,KAAK,CAAA;AAAA,EAC/B,KAAA,EAAO,CAAC,OAAO;AACnB,CAAA;AAEO,SAASJ,OAAAA,GAAQ;AACpB,EAAA,MAAM,aAAa,IAAA,CAAK,UAAA;AACxB,EAAA,MAAM,cAAc,IAAA,CAAK,UAAA;AACzB,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI,KAAA;AAEJ,EAAA,IAAI,KAAK,gBAAA,EAAkB;AACvB,IAAA,OAAA,GAAU,IAAA,CAAK,iBAAA,CAAkB,cAAA,EAAgBsD,WAAU,CAAA;AAAA,EAC/D,CAAA,MAAO;AACH,IAAA,OAAA,GAAUA,WAAAA,CAAW,IAAA,CAAK,IAAA,EAAM,UAAU,CAAA;AAAA,EAC9C;AAEA,EAAA,KAAA,GAAQ,IAAA,CAAK,MAAM,IAAI,CAAA;AAEvB,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,MAAA;AAAA,IACN,GAAA,EAAK,IAAA,CAAK,WAAA,CAAY,WAAA,EAAa,KAAK,UAAU,CAAA;AAAA,IAClD,OAAA;AAAA,IACA;AAAA,GACJ;AACJ;AACO,SAASd,WAAS,IAAA,EAAM;AAC3B,EAAA,IAAA,CAAK,IAAA,CAAK,KAAK,OAAO,CAAA;AACtB,EAAA,IAAA,CAAK,IAAA,CAAK,KAAK,KAAK,CAAA;AACxB;;;ACjDA,IAAA,aAAA,GAAA,EAAA;AAAA,QAAA,CAAA,aAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAAA,UAAAA;AAAA,EAAA,IAAA,EAAA,MAAArD,MAAAA;AAAA,EAAA,KAAA,EAAA,MAAAa,OAAAA;AAAA,EAAA,SAAA,EAAA,MAAAI;AAAA,CAAA,CAAA;AAMO,IAAMjB,MAAAA,GAAO,OAAA;AACb,IAAMiB,WAAAA,GAAY;AAAA,EACrB,IAAA,EAAM,CAAC,cAAA,EAAgB,KAAA,EAAO,IAAI,CAAA;AAAA,EAClC,KAAA,EAAO,CAAC,cAAA,EAAgB,KAAA,EAAO,IAAI;AACvC,CAAA;AAEO,SAASJ,OAAAA,GAAQ;AACpB,EAAA,IAAI,IAAA,GAAO,IAAA;AACX,EAAA,IAAI,KAAA,GAAQ,IAAA;AAEZ,EAAA,IAAA,CAAK,MAAA,EAAO;AAEZ,EAAA,MAAM,cAAc,IAAA,CAAK,UAAA;AACzB,EAAA,IAAI,IAAA,CAAK,cAAc,eAAA,EAAiB;AACpC,IAAA,IAAA,CAAK,IAAA,EAAK;AACV,IAAA,IAAA,CAAK,MAAA,EAAO;AACZ,IAAA,IAAA,GAAO,IAAA,CAAK,iBAAA;AAAA,MACR,IAAA,CAAK,YAAA;AAAA,MACL,MAAM,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,IAAI;AAAA,KAC9B;AACA,IAAA,IAAA,CAAK,MAAA,EAAO;AACZ,IAAA,IAAA,CAAK,IAAI,gBAAgB,CAAA;AAAA,EAC7B;AAEA,EAAA,IAAI,IAAA,CAAK,eAAA,CAAgB,CAAC,CAAA,KAAM,KAAA,EAAO;AACnC,IAAA,IAAA,CAAK,MAAA,EAAO;AACZ,IAAA,IAAA,CAAK,SAAS,IAAI,CAAA;AAClB,IAAA,IAAA,CAAK,MAAA,EAAO;AACZ,IAAA,IAAA,CAAK,IAAI,eAAe,CAAA;AACxB,IAAA,IAAA,CAAK,MAAA,EAAO;AACZ,IAAA,KAAA,GAAQ,IAAA,CAAK,iBAAA;AAAA,MACT,IAAA,CAAK,YAAA;AAAA,MACL,MAAM,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,IAAI;AAAA,KAC9B;AACA,IAAA,IAAA,CAAK,MAAA,EAAO;AACZ,IAAA,IAAA,CAAK,IAAI,gBAAgB,CAAA;AAAA,EAC7B;AAEA,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,OAAA;AAAA,IACN,GAAA,EAAK,IAAA,CAAK,WAAA,CAAY,WAAA,EAAa,KAAK,UAAU,CAAA;AAAA,IAClD,IAAA;AAAA,IACA;AAAA,GACJ;AACJ;AAEO,SAASwC,WAAS,IAAA,EAAM;AAC3B,EAAA,IAAI,KAAK,IAAA,EAAM;AACX,IAAA,IAAA,CAAK,KAAA,CAAM,iBAAiB,GAAG,CAAA;AAC/B,IAAA,IAAA,CAAK,IAAA,CAAK,KAAK,IAAI,CAAA;AACnB,IAAA,IAAA,CAAK,KAAA,CAAM,kBAAkB,GAAG,CAAA;AAAA,EACpC;AAEA,EAAA,IAAI,KAAK,KAAA,EAAO;AACZ,IAAA,IAAA,CAAK,KAAA,CAAM,OAAO,IAAI,CAAA;AACtB,IAAA,IAAA,CAAK,KAAA,CAAM,iBAAiB,GAAG,CAAA;AAC/B,IAAA,IAAA,CAAK,IAAA,CAAK,KAAK,KAAK,CAAA;AACpB,IAAA,IAAA,CAAK,KAAA,CAAM,kBAAkB,GAAG,CAAA;AAAA,EACpC;AACJ;;;ACjEA,IAAA,gBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,gBAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAAA,UAAAA;AAAA,EAAA,IAAA,EAAA,MAAArD,MAAAA;AAAA,EAAA,KAAA,EAAA,MAAAa,OAAAA;AAAA,EAAA,SAAA,EAAA,MAAAI;AAAA,CAAA,CAAA;AAAO,IAAMjB,MAAAA,GAAO,UAAA;AACb,IAAMiB,WAAAA,GAAY;AAAA,EACrB,UAAU,CAAC;AAAA,IACP,cAAA;AAAA,IACA,YAAA;AAAA,IACA,eAAA;AAAA,IACA,mBAAA;AAAA,IACA,qBAAA;AAAA,IACA,uBAAA;AAAA,IACA;AAAA,GACH;AACL,CAAA;AAEO,SAASJ,OAAAA,GAAQ;AACpB,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,YAAA,CAAa,IAAA,CAAK,MAAM,QAAQ,CAAA;AAGtD,EAAA,IAAI,IAAA,CAAK,gBAAA,CAAiB,QAAQ,CAAA,KAAM,IAAA,EAAM;AAC1C,IAAA,IAAA,CAAK,MAAM,sBAAsB,CAAA;AAAA,EACrC;AAEA,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,UAAA;AAAA,IACN,GAAA,EAAK,IAAA,CAAK,mBAAA,CAAoB,QAAQ,CAAA;AAAA,IACtC;AAAA,GACJ;AACJ;AAEO,SAASwC,WAAS,IAAA,EAAM;AAC3B,EAAA,IAAA,CAAK,SAAS,IAAI,CAAA;AACtB;;;AC9BA,IAAA,oBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,oBAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAAA,UAAAA;AAAA,EAAA,IAAA,EAAA,MAAArD,MAAAA;AAAA,EAAA,KAAA,EAAA,MAAAa,OAAAA;AAAA,EAAA,SAAA,EAAA,MAAAI,WAAAA;AAAA,EAAA,WAAA,EAAA,MAAA8C;AAAA,CAAA,CAAA;AAEO,IAAM/D,MAAAA,GAAO,cAAA;AACb,IAAM+D,YAAAA,GAAc,UAAA;AACpB,IAAM9C,WAAAA,GAAY;AAAA,EACrB,UAAU,CAAC;AAAA,IACP,UAAA;AAAA,IACA;AAAA,GACH;AACL,CAAA;AAEO,SAASJ,OAAAA,GAAQ;AACpB,EAAA,MAAM,QAAA,GAAW,KAAK,UAAA,EAAW;AAEjC,EAAA,OAAO,CAAC,KAAK,GAAA,EAAK;AACd,IAAA,QAAA,CAAS,IAAA,CAAK,IAAA,CAAK,QAAA,EAAU,CAAA;AAE7B,IAAA,IAAI,IAAA,CAAK,cAAc,KAAA,EAAO;AAC1B,MAAA,IAAA,CAAK,IAAA,EAAK;AACV,MAAA;AAAA,IACJ;AAEA,IAAA;AAAA,EACJ;AAEA,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,cAAA;AAAA,IACN,GAAA,EAAK,IAAA,CAAK,mBAAA,CAAoB,QAAQ,CAAA;AAAA,IACtC;AAAA,GACJ;AACJ;AAEO,SAASwC,WAAS,IAAA,EAAM;AAC3B,EAAA,IAAA,CAAK,SAAS,IAAA,EAAM,MAAM,KAAK,KAAA,CAAM,KAAA,EAAO,GAAG,CAAC,CAAA;AACpD;;;AClCA,IAAA,cAAA,GAAA,EAAA;AAAA,QAAA,CAAA,cAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAAA,UAAAA;AAAA,EAAA,IAAA,EAAA,MAAArD,MAAAA;AAAA,EAAA,KAAA,EAAA,MAAAa,OAAAA;AAAA,EAAA,SAAA,EAAA,MAAAI;AAAA,CAAA,CAAA;;;ACQA,IAAM,eAAA,GAAkB,EAAA;AACxB,IAAM,cAAA,GAAiB,EAAA;AACvB,IAAMgE,WAAAA,GAAa,EAAA;AAEZ,SAAS,OAAO,GAAA,EAAK;AACxB,EAAA,MAAM,MAAM,GAAA,CAAI,MAAA;AAChB,EAAA,MAAM,SAAA,GAAY,GAAA,CAAI,UAAA,CAAW,CAAC,CAAA;AAClC,EAAA,MAAM,KAAA,GAAQ,SAAA,KAAc,cAAA,IAAkB,SAAA,KAAcA,cAAa,CAAA,GAAI,CAAA;AAC7E,EAAA,MAAM,GAAA,GAAM,KAAA,KAAU,CAAA,IAAK,GAAA,GAAM,CAAA,IAAK,GAAA,CAAI,UAAA,CAAW,GAAA,GAAM,CAAC,CAAA,KAAM,SAAA,GAAY,GAAA,GAAM,IAAI,GAAA,GAAM,CAAA;AAC9F,EAAA,IAAI,OAAA,GAAU,EAAA;AAEd,EAAA,KAAA,IAAS,CAAA,GAAI,KAAA,EAAO,CAAA,IAAK,GAAA,EAAK,CAAA,EAAA,EAAK;AAC/B,IAAA,IAAI5E,KAAAA,GAAO,GAAA,CAAI,UAAA,CAAW,CAAC,CAAA;AAE3B,IAAA,IAAIA,UAAS,eAAA,EAAiB;AAE1B,MAAA,IAAI,MAAM,GAAA,EAAK;AAGX,QAAA,IAAI,CAAA,KAAM,MAAM,CAAA,EAAG;AACf,UAAA,OAAA,GAAU,GAAA,CAAI,MAAA,CAAO,CAAA,GAAI,CAAC,CAAA;AAAA,QAC9B;AACA,QAAA;AAAA,MACJ;AAEA,MAAAA,KAAAA,GAAO,GAAA,CAAI,UAAA,CAAW,EAAE,CAAC,CAAA;AAGzB,MAAA,IAAI,aAAA,CAAc,eAAA,EAAiBA,KAAI,CAAA,EAAG;AACtC,QAAA,MAAM,cAAc,CAAA,GAAI,CAAA;AACxB,QAAA,MAAM,SAAA,GAAY,cAAA,CAAe,GAAA,EAAK,WAAW,CAAA;AAEjD,QAAA,CAAA,GAAI,SAAA,GAAY,CAAA;AAChB,QAAA,OAAA,IAAW,cAAc,GAAA,CAAI,SAAA,CAAU,WAAA,GAAc,CAAA,EAAG,SAAS,CAAC,CAAA;AAAA,MACtE,CAAA,MAAO;AAEH,QAAA,IAAIA,UAAS,EAAA,IAAU,GAAA,CAAI,WAAW,CAAA,GAAI,CAAC,MAAM,EAAA,EAAQ;AACrD,UAAA,CAAA,EAAA;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ,CAAA,MAAO;AACH,MAAA,OAAA,IAAW,IAAI,CAAC,CAAA;AAAA,IACpB;AAAA,EACJ;AAEA,EAAA,OAAO,OAAA;AACX;AAIO,SAAS,MAAA,CAAO,KAAK,UAAA,EAAY;AACpC,EAAA,MAAM,KAAA,GAA4B,GAAA;AAClC,EAAA,MAAM,SAAA,GAAsC,cAAA;AAC5C,EAAA,IAAI,OAAA,GAAU,EAAA;AACd,EAAA,IAAI,mBAAA,GAAsB,KAAA;AAE1B,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,QAAQ,CAAA,EAAA,EAAK;AACjC,IAAA,MAAMA,KAAAA,GAAO,GAAA,CAAI,UAAA,CAAW,CAAC,CAAA;AAG7B,IAAA,IAAIA,UAAS,CAAA,EAAQ;AACjB,MAAA,OAAA,IAAW,QAAA;AACX,MAAA;AAAA,IACJ;AAKA,IAAA,IAAIA,KAAAA,IAAQ,EAAA,IAAUA,KAAAA,KAAS,GAAA,EAAQ;AACnC,MAAA,OAAA,IAAW,IAAA,GAAOA,KAAAA,CAAK,QAAA,CAAS,EAAE,CAAA;AAClC,MAAA,mBAAA,GAAsB,IAAA;AACtB,MAAA;AAAA,IACJ;AAGA,IAAA,IAAIA,KAAAA,KAAS,SAAA,IAAaA,KAAAA,KAAS,eAAA,EAAiB;AAChD,MAAA,OAAA,IAAW,IAAA,GAAO,GAAA,CAAI,MAAA,CAAO,CAAC,CAAA;AAC9B,MAAA,mBAAA,GAAsB,KAAA;AAAA,IAC1B,CAAA,MAAO;AACH,MAAA,IAAI,wBAAwB,UAAA,CAAWA,KAAI,CAAA,IAAK,YAAA,CAAaA,KAAI,CAAA,CAAA,EAAI;AACjE,QAAA,OAAA,IAAW,GAAA;AAAA,MACf;AAGA,MAAA,OAAA,IAAW,GAAA,CAAI,OAAO,CAAC,CAAA;AACvB,MAAA,mBAAA,GAAsB,KAAA;AAAA,IAC1B;AAAA,EACJ;AAEA,EAAA,OAAO,QAAQ,OAAA,GAAU,KAAA;AAC7B;;;AD/FO,IAAML,MAAAA,GAAO,QAAA;AACb,IAAMiB,WAAAA,GAAY;AAAA,EACrB,KAAA,EAAO;AACX,CAAA;AAEO,SAASJ,OAAAA,GAAQ;AACpB,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,QAAA;AAAA,IACN,KAAK,IAAA,CAAK,WAAA,CAAY,IAAA,CAAK,UAAA,EAAY,KAAK,QAAQ,CAAA;AAAA,IACpD,KAAA,EAAO,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQX,OAAW,CAAC;AAAA,GAC3C;AACJ;AAEO,SAASmD,WAAS,IAAA,EAAM;AAC3B,EAAA,IAAA,CAAK,KAAA,CAAMnD,OAAAA,EAAa,MAAA,CAAO,IAAA,CAAK,KAAK,CAAC,CAAA;AAC9C;;;AElBA,IAAA,kBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,kBAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAAmD,UAAAA;AAAA,EAAA,IAAA,EAAA,MAAArD,MAAAA;AAAA,EAAA,KAAA,EAAA,MAAAa,OAAAA;AAAA,EAAA,SAAA,EAAA,MAAAI,WAAAA;AAAA,EAAA,WAAA,EAAA,MAAA8C;AAAA,CAAA,CAAA;AAQA,IAAMxB,gBAAAA,GAAkB,EAAA;AAExB,SAAS4B,WAAAA,GAAa;AAClB,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,KAAK,CAAA;AAC/B;AAEO,IAAMnE,MAAAA,GAAO,YAAA;AACb,IAAM+D,aAAAA,GAAc,YAAA;AACpB,IAAM9C,WAAAA,GAAY;AAAA,EACrB,UAAU,CAAC;AAAA,IACP,SAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACH;AACL,CAAA;AAEO,SAASJ,OAAAA,GAAQ;AACpB,EAAA,MAAM,QAAQ,IAAA,CAAK,UAAA;AACnB,EAAA,MAAM,QAAA,GAAW,KAAK,UAAA,EAAW;AACjC,EAAA,IAAI,KAAA;AAEJ,EACA,OAAO,CAAC,KAAK,GAAA,EAAK;AACd,MAAA,QAAQ,KAAK,SAAA;AAAW,QACpB,KAAK,UAAA;AACD,UAAA,IAAA,CAAK,IAAA,EAAK;AACV,UAAA;AAAA,QAEJ,KAAK,OAAA;AAED,UAAA,IAAI,KAAK,UAAA,CAAW,IAAA,CAAK,UAAA,GAAa,CAAC,MAAM0B,gBAAAA,EAAiB;AAC1D,YAAA,IAAA,CAAK,IAAA,EAAK;AACV,YAAA;AAAA,UACJ;AAEA,UAAA,KAAA,GAAQ,KAAK,OAAA,EAAQ;AACrB,UAAA;AAAA,QAEJ,KAAK,GAAA;AACD,UAAA,KAAA,GAAQ,KAAK,GAAA,EAAI;AACjB,UAAA;AAAA,QAEJ,KAAK,GAAA;AACD,UAAA,KAAA,GAAQ,KAAK,GAAA,EAAI;AACjB,UAAA;AAAA;AAAA;AAAA;AAAA,QAKJ,KAAK,SAAA;AACD,UAAA,KAAA,GAAQ,IAAA,CAAK,iBAAA,CAAkB,IAAA,CAAK,MAAA,EAAQ4B,WAAU,CAAA;AACtD,UAAA;AAAA;AAAA,QAGJ;AACI,UAAA,KAAA,GAAQ,IAAA,CAAK,iBAAA,CAAkB,IAAA,CAAK,IAAA,EAAMA,WAAU,CAAA;AAAA;AAG5D,MAAA,QAAA,CAAS,KAAK,KAAK,CAAA;AAAA,IACvB;AAEA,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,YAAA;AAAA,IACN,GAAA,EAAK,IAAA,CAAK,WAAA,CAAY,KAAA,EAAO,KAAK,UAAU,CAAA;AAAA,IAC5C;AAAA,GACJ;AACJ;AAEO,SAASd,WAAS,IAAA,EAAM;AAC3B,EAAA,IAAA,CAAK,SAAS,IAAI,CAAA;AACtB;;;ACjFA,IAAA,2BAAA,GAAA,EAAA;AAAA,QAAA,CAAA,2BAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAAA,UAAAA;AAAA,EAAA,IAAA,EAAA,MAAArD,MAAAA;AAAA,EAAA,KAAA,EAAA,MAAAa,OAAAA;AAAA,EAAA,SAAA,EAAA,MAAAI;AAAA,CAAA,CAAA;AAKO,IAAMjB,MAAAA,GAAO,qBAAA;AACb,IAAMiB,WAAAA,GAAY;AAAA,EACrB,WAAA,EAAa;AACjB,CAAA;AAEO,SAASJ,OAAAA,GAAQ;AACpB,EAAA,MAAM,QAAQ,IAAA,CAAK,UAAA;AAEnB,EAAA,IAAA,CAAK,IAAI,eAAe,CAAA;AACxB,EAAA,IAAA,CAAK,MAAA,EAAO;AAEZ,EAAA,MAAM,WAAA,GAAc,KAAK,WAAA,EAAY;AAErC,EAAA,IAAI,CAAC,KAAK,GAAA,EAAK;AACX,IAAA,IAAA,CAAK,IAAI,gBAAgB,CAAA;AAAA,EAC7B;AAEA,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,qBAAA;AAAA,IACN,GAAA,EAAK,IAAA,CAAK,WAAA,CAAY,KAAA,EAAO,KAAK,UAAU,CAAA;AAAA,IAC5C;AAAA,GACJ;AACJ;AAEO,SAASwC,WAAS,IAAA,EAAM;AAC3B,EAAA,IAAA,CAAK,KAAA,CAAM,iBAAiB,GAAG,CAAA;AAC/B,EAAA,IAAA,CAAK,IAAA,CAAK,KAAK,WAAW,CAAA;AAC1B,EAAA,IAAA,CAAK,KAAA,CAAM,kBAAkB,GAAG,CAAA;AACpC;;;ACjCA,IAAA,oBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,oBAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAAA,UAAAA;AAAA,EAAA,IAAA,EAAA,MAAArD,MAAAA;AAAA,EAAA,KAAA,EAAA,MAAAa,OAAAA;AAAA,EAAA,SAAA,EAAA,MAAAI;AAAA,CAAA,CAAA;AAEA,IAAM+C,SAAAA,GAAW,EAAA;AACjB,IAAMC,aAAAA,GAAe,GAAA;AAErB,SAAS,uBAAA,GAA0B;AAC/B,EAAA,IAAI,KAAK,SAAA,KAAc,KAAA,IACnB,KAAK,OAAA,CAAQD,SAAQ,MAAM,KAAA,EAAO;AAClC,IAAA,IAAA,CAAK,MAAM,oCAAoC,CAAA;AAAA,EACnD;AAEA,EAAA,IAAA,CAAK,IAAA,EAAK;AACd;AAEO,IAAMhE,MAAAA,GAAO,cAAA;AACb,IAAMiB,WAAAA,GAAY;AAAA,EACrB,IAAA,EAAM;AACV,CAAA;AAUO,SAASJ,OAAAA,GAAQ;AACpB,EAAA,MAAM,QAAQ,IAAA,CAAK,UAAA;AAEnB,EAAA,IAAI,IAAA,CAAK,OAAA,CAAQoD,aAAY,CAAA,EAAG;AAC5B,IAAA,IAAA,CAAK,IAAA,EAAK;AACV,IAAA,uBAAA,CAAwB,KAAK,IAAI,CAAA;AAAA,EACrC,CAAA,MAAO;AACH,IAAA,uBAAA,CAAwB,KAAK,IAAI,CAAA;AAEjC,IAAA,IAAI,IAAA,CAAK,OAAA,CAAQA,aAAY,CAAA,EAAG;AAC5B,MAAA,IAAA,CAAK,IAAA,EAAK;AACV,MAAA,uBAAA,CAAwB,KAAK,IAAI,CAAA;AAAA,IACrC;AAAA,EACJ;AAEA,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,cAAA;AAAA,IACN,GAAA,EAAK,IAAA,CAAK,WAAA,CAAY,KAAA,EAAO,KAAK,UAAU,CAAA;AAAA,IAC5C,IAAA,EAAM,IAAA,CAAK,cAAA,CAAe,KAAK;AAAA,GACnC;AACJ;AAEO,SAASZ,WAAS,IAAA,EAAM;AAC3B,EAAA,IAAA,CAAK,QAAA,CAAS,KAAK,IAAI,CAAA;AAC3B;;;ACnDA,IAAA,oBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,oBAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAAA,UAAAA;AAAA,EAAA,IAAA,EAAA,MAAArD,MAAAA;AAAA,EAAA,KAAA,EAAA,MAAAa,OAAAA;AAAA,EAAA,SAAA,EAAA,MAAAI;AAAA,CAAA,CAAA;AAOA,IAAMM,SAAAA,GAAW,EAAA;AACjB,IAAMJ,YAAAA,GAAc,EAAA;AACpB,IAAMsB,aAAAA,GAAe,EAAA;AAErB,SAAS,cAAA,CAAe,QAAQ,SAAA,EAAW;AACvC,EAAA,IAAI,GAAA,GAAM,CAAA;AAEV,EAAA,KAAA,IAAS,MAAM,IAAA,CAAK,UAAA,GAAa,QAAQ,GAAA,GAAM,IAAA,CAAK,UAAU,GAAA,EAAA,EAAO;AACjE,IAAA,MAAMpC,KAAAA,GAAO,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA;AAEhC,IAAA,IAAIA,KAAAA,KAASc,YAAAA,IAAe,SAAA,IAAa,GAAA,KAAQ,CAAA,EAAG;AAChD,MAAA,cAAA,CAAe,IAAA,CAAK,IAAA,EAAM,MAAA,GAAS,GAAA,GAAM,GAAG,KAAK,CAAA;AACjD,MAAA,OAAO,EAAA;AAAA,IACX;AAEA,IAAA,IAAI,CAAC,UAAA,CAAWd,KAAI,CAAA,EAAG;AACnB,MAAA,IAAA,CAAK,KAAA;AAAA,QACD,SAAA,IAAa,GAAA,KAAQ,CAAA,GACf,cAAA,IAAkB,GAAA,GAAM,CAAA,GAAI,eAAA,GAAkB,EAAA,CAAA,GAAM,cAAA,GACnD,GAAA,GAAM,CAAA,GAAI,uBAAA,GAA0B,kBAAA;AAAA,QAC3C;AAAA,OACJ;AAAA,IACJ;AAEA,IAAA,IAAI,EAAE,MAAM,CAAA,EAAG;AACX,MAAA,IAAA,CAAK,KAAA,CAAM,uBAAuB,GAAG,CAAA;AAAA,IACzC;AAAC,EACL;AAEA,EAAA,IAAA,CAAK,IAAA,EAAK;AACV,EAAA,OAAO,GAAA;AACX;AAEA,SAAS,wBAAwB,GAAA,EAAK;AAClC,EAAA,IAAI,KAAA,GAAQ,CAAA;AAEZ,EAAA,OAAO,IAAA,CAAK,OAAA,CAAQoC,aAAY,CAAA,EAAG;AAC/B,IAAA,IAAI,EAAE,QAAQ,GAAA,EAAK;AACf,MAAA,IAAA,CAAK,MAAM,yBAAyB,CAAA;AAAA,IACxC;AAEA,IAAA,IAAA,CAAK,IAAA,EAAK;AAAA,EACd;AACJ;AAEA,SAASyC,YAAW7E,KAAAA,EAAM;AACtB,EAAA,IAAI,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,UAAU,MAAMA,KAAAA,EAAM;AAC3C,IAAA,IAAA,CAAK,KAAA,CAAA,CAAOA,KAAAA,KAASkB,SAAAA,GAAW,WAAA,GAAc,kBAAkB,cAAc,CAAA;AAAA,EAClF;AACJ;AAqBA,SAAS,gBAAA,GAAmB;AACxB,EAAA,IAAI,SAAA,GAAY,CAAA;AAEhB,EAAA,QAAQ,KAAK,SAAA;AAAW,IACpB,KAAKpB,OAAAA;AAID,MAAA,SAAA,GAAY,cAAA,CAAe,IAAA,CAAK,IAAA,EAAM,CAAA,EAAG,IAAI,CAAA;AAE7C,MAAA,IAAI,IAAA,CAAK,OAAA,CAAQsC,aAAY,CAAA,EAAG;AAC5B,QAAA,uBAAA,CAAwB,IAAA,CAAK,IAAA,EAAM,CAAA,GAAI,SAAS,CAAA;AAChD,QAAA;AAAA,MACJ;AAEA,MAAA,IAAI,IAAA,CAAK,SAAA,KAAc,SAAA,IACnB,IAAA,CAAK,cAActC,OAAAA,EAAQ;AAC3B,QAAA+E,WAAAA,CAAW,IAAA,CAAK,IAAA,EAAM/D,YAAW,CAAA;AACjC,QAAA,cAAA,CAAe,IAAA,CAAK,IAAA,EAAM,CAAA,EAAG,KAAK,CAAA;AAClC,QAAA;AAAA,MACJ;AAEA,MAAA;AAAA,IAEJ,KAAK,SAAA;AAED,MAAA,SAAA,GAAY,cAAA,CAAe,IAAA,CAAK,IAAA,EAAM,CAAA,EAAG,IAAI,CAAA;AAE7C,MAAA,IAAI,YAAY,CAAA,EAAG;AACf,QAAA,uBAAA,CAAwB,IAAA,CAAK,IAAA,EAAM,CAAA,GAAI,SAAS,CAAA;AAAA,MACpD;AAEA,MAAA;AAAA,IAEJ;AAGI,MAAA,IAAA,CAAK,SAASI,SAAQ,CAAA;AAEtB,MAAA,IAAI,IAAA,CAAK,cAAc,KAAA,EAAO;AAC1B,QAAA,SAAA,GAAY,cAAA,CAAe,IAAA,CAAK,IAAA,EAAM,CAAA,EAAG,IAAI,CAAA;AAC7C,QAAA,IAAI,YAAY,CAAA,EAAG;AACf,UAAA,uBAAA,CAAwB,IAAA,CAAK,IAAA,EAAM,CAAA,GAAI,SAAS,CAAA;AAAA,QACpD;AACA,QAAA;AAAA,MACJ;AAEA,MAAA,IAAI,IAAA,CAAK,OAAA,CAAQkB,aAAY,CAAA,EAAG;AAC5B,QAAA,IAAA,CAAK,IAAA,EAAK;AACV,QAAA,uBAAA,CAAwB,IAAA,CAAK,MAAM,CAAC,CAAA;AACpC,QAAA;AAAA,MACJ;AAEA,MAAA,IAAA,CAAK,MAAM,wCAAwC,CAAA;AAAA;AAE/D;AAEO,IAAMzC,MAAAA,GAAO,cAAA;AACb,IAAMiB,WAAAA,GAAY;AAAA,EACrB,KAAA,EAAO;AACX,CAAA;AAEO,SAASJ,OAAAA,GAAQ;AACpB,EAAA,MAAM,QAAQ,IAAA,CAAK,UAAA;AAGnB,EAAA,IAAA,CAAK,SAAS,GAAG,CAAA;AACjB,EAAA,gBAAA,CAAiB,KAAK,IAAI,CAAA;AAE1B,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,cAAA;AAAA,IACN,GAAA,EAAK,IAAA,CAAK,WAAA,CAAY,KAAA,EAAO,KAAK,UAAU,CAAA;AAAA,IAC5C,KAAA,EAAO,IAAA,CAAK,cAAA,CAAe,KAAK;AAAA,GACpC;AACJ;AAEO,SAASwC,WAAS,IAAA,EAAM;AAC3B,EAAA,IAAA,CAAK,QAAA,CAAS,KAAK,KAAK,CAAA;AAC5B;;;AC3JA,IAAA,WAAA,GAAA,EAAA;AAAA,QAAA,CAAA,WAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAAA,UAAAA;AAAA,EAAA,IAAA,EAAA,MAAArD,MAAAA;AAAA,EAAA,KAAA,EAAA,MAAAa,OAAAA;AAAA,EAAA,SAAA,EAAA,MAAAI;AAAA,CAAA,CAAA;;;ACQA,IAAMqB,MAAAA,GAAQ,EAAA;AACd,IAAM6C,gBAAAA,GAAkB,EAAA;AACxB,IAAMC,eAAAA,GAAiB,EAAA;AACvB,IAAMH,WAAAA,GAAa,EAAA;AACnB,IAAMnC,gBAAAA,GAAkB,EAAA;AACxB,IAAMC,iBAAAA,GAAmB,EAAA;AAElB,SAASsC,QAAO,GAAA,EAAK;AACxB,EAAA,MAAM,MAAM,GAAA,CAAI,MAAA;AAChB,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,IAAI,GAAA,GAAM,IAAI,UAAA,CAAW,GAAA,GAAM,CAAC,CAAA,KAAMtC,iBAAAA,GAAmB,GAAA,GAAM,CAAA,GAAI,GAAA,GAAM,CAAA;AACzE,EAAA,IAAI,OAAA,GAAU,EAAA;AAEd,EAAA,OAAO,QAAQ,GAAA,IAAO,YAAA,CAAa,IAAI,UAAA,CAAW,KAAK,CAAC,CAAA,EAAG;AACvD,IAAA,KAAA,EAAA;AAAA,EACJ;AAEA,EAAA,OAAO,QAAQ,GAAA,IAAO,YAAA,CAAa,IAAI,UAAA,CAAW,GAAG,CAAC,CAAA,EAAG;AACrD,IAAA,GAAA,EAAA;AAAA,EACJ;AAEA,EAAA,KAAA,IAAS,CAAA,GAAI,KAAA,EAAO,CAAA,IAAK,GAAA,EAAK,CAAA,EAAA,EAAK;AAC/B,IAAA,IAAI1C,KAAAA,GAAO,GAAA,CAAI,UAAA,CAAW,CAAC,CAAA;AAE3B,IAAA,IAAIA,UAAS8E,gBAAAA,EAAiB;AAE1B,MAAA,IAAI,MAAM,GAAA,EAAK;AAGX,QAAA,IAAI,CAAA,KAAM,MAAM,CAAA,EAAG;AACf,UAAA,OAAA,GAAU,GAAA,CAAI,MAAA,CAAO,CAAA,GAAI,CAAC,CAAA;AAAA,QAC9B;AACA,QAAA;AAAA,MACJ;AAEA,MAAA9E,KAAAA,GAAO,GAAA,CAAI,UAAA,CAAW,EAAE,CAAC,CAAA;AAGzB,MAAA,IAAI,aAAA,CAAc8E,gBAAAA,EAAiB9E,KAAI,CAAA,EAAG;AACtC,QAAA,MAAM,cAAc,CAAA,GAAI,CAAA;AACxB,QAAA,MAAM,SAAA,GAAY,cAAA,CAAe,GAAA,EAAK,WAAW,CAAA;AAEjD,QAAA,CAAA,GAAI,SAAA,GAAY,CAAA;AAChB,QAAA,OAAA,IAAW,cAAc,GAAA,CAAI,SAAA,CAAU,WAAA,GAAc,CAAA,EAAG,SAAS,CAAC,CAAA;AAAA,MACtE,CAAA,MAAO;AAEH,QAAA,IAAIA,UAAS,EAAA,IAAU,GAAA,CAAI,WAAW,CAAA,GAAI,CAAC,MAAM,EAAA,EAAQ;AACrD,UAAA,CAAA,EAAA;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ,CAAA,MAAO;AACH,MAAA,OAAA,IAAW,IAAI,CAAC,CAAA;AAAA,IACpB;AAAA,EACJ;AAEA,EAAA,OAAO,OAAA;AACX;AAEO,SAASiF,QAAO,GAAA,EAAK;AACxB,EAAA,IAAI,OAAA,GAAU,EAAA;AACd,EAAA,IAAI,mBAAA,GAAsB,KAAA;AAE1B,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,QAAQ,CAAA,EAAA,EAAK;AACjC,IAAA,MAAMjF,KAAAA,GAAO,GAAA,CAAI,UAAA,CAAW,CAAC,CAAA;AAG7B,IAAA,IAAIA,UAAS,CAAA,EAAQ;AACjB,MAAA,OAAA,IAAW,QAAA;AACX,MAAA;AAAA,IACJ;AAKA,IAAA,IAAIA,KAAAA,IAAQ,EAAA,IAAUA,KAAAA,KAAS,GAAA,EAAQ;AACnC,MAAA,OAAA,IAAW,IAAA,GAAOA,KAAAA,CAAK,QAAA,CAAS,EAAE,CAAA;AAClC,MAAA,mBAAA,GAAsB,IAAA;AACtB,MAAA;AAAA,IACJ;AAEA,IAAA,IAAIA,KAAAA,KAASiC,MAAAA,IACTjC,KAAAA,KAAS8E,gBAAAA,IACT9E,KAAAA,KAAS+E,eAAAA,IACT/E,KAAAA,KAAS4E,WAAAA,IACT5E,KAAAA,KAASyC,gBAAAA,IACTzC,KAAAA,KAAS0C,iBAAAA,EAAkB;AAC3B,MAAA,OAAA,IAAW,IAAA,GAAO,GAAA,CAAI,MAAA,CAAO,CAAC,CAAA;AAC9B,MAAA,mBAAA,GAAsB,KAAA;AAAA,IAC1B,CAAA,MAAO;AACH,MAAA,IAAI,mBAAA,IAAuB,UAAA,CAAW1C,KAAI,CAAA,EAAG;AACzC,QAAA,OAAA,IAAW,GAAA;AAAA,MACf;AAEA,MAAA,OAAA,IAAW,GAAA,CAAI,OAAO,CAAC,CAAA;AACvB,MAAA,mBAAA,GAAsB,KAAA;AAAA,IAC1B;AAAA,EACJ;AAEA,EAAA,OAAO,SAAS,OAAA,GAAU,GAAA;AAC9B;;;ADlGO,IAAML,MAAAA,GAAO,KAAA;AACb,IAAMiB,WAAAA,GAAY;AAAA,EACrB,KAAA,EAAO;AACX,CAAA;AAGO,SAASJ,OAAAA,GAAQ;AACpB,EAAA,MAAM,QAAQ,IAAA,CAAK,UAAA;AACnB,EAAA,IAAI,KAAA;AAEJ,EAAA,QAAQ,KAAK,SAAA;AAAW,IACpB,KAAK,GAAA;AACD,MAAA,KAAA,GAAYwE,OAAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAC,CAAA;AACpC,MAAA;AAAA,IAEJ,KAAK,QAAA;AACD,MAAA,IAAI,CAAC,KAAK,MAAA,CAAO,IAAA,CAAK,YAAY,IAAA,CAAK,QAAA,EAAU,MAAM,CAAA,EAAG;AACtD,QAAA,IAAA,CAAK,MAAM,6BAA6B,CAAA;AAAA,MAC5C;AAEA,MAAA,IAAA,CAAK,IAAI,QAAa,CAAA;AACtB,MAAA,IAAA,CAAK,MAAA,EAAO;AACZ,MAAA,KAAA,GAAe,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQnF,OAAW,CAAC,CAAA;AAC/C,MAAA,IAAA,CAAK,MAAA,EAAO;AACZ,MAAA,IAAI,CAAC,KAAK,GAAA,EAAK;AACX,QAAA,IAAA,CAAK,IAAI,gBAAgB,CAAA;AAAA,MAC7B;AACA,MAAA;AAAA,IAEJ;AACI,MAAA,IAAA,CAAK,MAAM,6BAA6B,CAAA;AAAA;AAGhD,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,KAAA;AAAA,IACN,GAAA,EAAK,IAAA,CAAK,WAAA,CAAY,KAAA,EAAO,KAAK,UAAU,CAAA;AAAA,IAC5C;AAAA,GACJ;AACJ;AAEO,SAASmD,WAAS,IAAA,EAAM;AAC3B,EAAA,IAAA,CAAK,KAAA,CAAM,GAAA,EAASiC,OAAAA,CAAO,IAAA,CAAK,KAAK,CAAC,CAAA;AAC1C;;;AEnDA,IAAA,aAAA,GAAA,EAAA;AAAA,QAAA,CAAA,aAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAAjC,UAAAA;AAAA,EAAA,IAAA,EAAA,MAAArD,MAAAA;AAAA,EAAA,KAAA,EAAA,MAAAa,OAAAA;AAAA,EAAA,SAAA,EAAA,MAAAI;AAAA,CAAA,CAAA;AAAO,IAAMjB,MAAAA,GAAO,OAAA;AACb,IAAMiB,WAAAA,GAAY;AAAA,EACrB,QAAA,EAAU,CAAC,EAAE;AACjB,CAAA;AAEO,SAASJ,OAAAA,GAAQ;AACpB,EAAA,MAAM,QAAQ,IAAA,CAAK,UAAA;AACnB,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,YAAA,CAAa,IAAA,CAAK,MAAM,KAAK,CAAA;AAEnD,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,OAAA;AAAA,IACN,GAAA,EAAK,IAAA,CAAK,WAAA,CAAY,KAAA,EAAO,KAAK,UAAU,CAAA;AAAA,IAC5C;AAAA,GACJ;AACJ;AAEO,SAASwC,WAAS,IAAA,EAAM;AAC3B,EAAA,IAAA,CAAK,SAAS,IAAI,CAAA;AACtB;;;AClBA,IAAA,kBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,kBAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAAA,UAAAA;AAAA,EAAA,IAAA,EAAA,MAAArD,MAAAA;AAAA,EAAA,KAAA,EAAA,MAAAa,OAAAA;AAAA,EAAA,SAAA,EAAA,MAAAI;AAAA,CAAA,CAAA;AAEA,IAAMqB,MAAAA,GAAQ,OAAO,MAAA,CAAO;AAAA,EACxB,IAAA,EAAM,YAAA;AAAA,EACN,GAAA,EAAK,IAAA;AAAA,EACL,KAAA,EAAO;AACX,CAAC,CAAA;AAEM,IAAMtC,MAAAA,GAAO,YAAA;AACb,IAAMiB,WAAAA,GAAY;AAAA,EACrB,KAAA,EAAO;AACX,CAAA;AAEO,SAASJ,OAAAA,GAAQ;AACpB,EAAA,IAAA,CAAK,IAAI,UAAU,CAAA;AACnB,EAAA,OAAOyB,MAAAA;AAOX;AAEO,SAASe,WAAS,IAAA,EAAM;AAC3B,EAAA,IAAA,CAAK,KAAA,CAAM,UAAA,EAAY,IAAA,CAAK,KAAK,CAAA;AACrC;;;ACtBA,IAAO,aAAA,GAAQ;AAAA,EACX,OAAA,EAAS,IAAA;AAAA,EACT,eAAA;AAAA,EACA,GAAG,YAAA;AAAA,EACH,IAAA,EAAA;AACJ,CAAA;;;ACTA,IAAA,aAAA,GAAA,EAAA;AAAA,QAAA,CAAA,aAAA,EAAA;AAAA,EAAA,aAAA,EAAA,MAAA,qBAAA;AAAA,EAAA,QAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,KAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACeA,IAAMb,WAAAA,GAAa,EAAA;AACnB,IAAMwB,SAAAA,GAAW,EAAA;AACjB,IAAMzC,SAAAA,GAAW,EAAA;AACjB,IAAMJ,YAAAA,GAAc,EAAA;AACpB,IAAMoD,QAAAA,GAAU,EAAA;AAChB,IAAMgB,EAAAA,GAAI,GAAA;AAEK,SAAR,kBAAmC,OAAA,EAAS;AAC/C,EAAA,QAAQ,KAAK,SAAA;AAAW,IACpB,KAAK,IAAA;AACD,MAAA,OAAO,KAAK,IAAA,EAAK;AAAA,IAErB,KAAK,KAAA;AACD,MAAA,OAAO,KAAK,QAAA,EAAS;AAAA,IAEzB,KAAK,eAAA;AACD,MAAA,OAAO,IAAA,CAAK,WAAA,CAAY,IAAA,CAAK,YAAA,EAAc,QAAQ,UAAU,CAAA;AAAA,IAEjE,KAAK,iBAAA;AACD,MAAA,OAAO,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,YAAA,EAAc,QAAQ,UAAU,CAAA;AAAA,IAE9D,KAAKrF,OAAAA;AACD,MAAA,OAAO,KAAK,MAAA,EAAO;AAAA,IAEvB,KAAK,SAAA;AACD,MAAA,OAAO,KAAK,SAAA,EAAU;AAAA,IAE1B,KAAK,UAAA;AACD,MAAA,OAAO,KAAK,UAAA,EAAW;AAAA,IAE3B,KAAKC,OAAAA;AACD,MAAA,OAAO,KAAK,MAAA,EAAO;AAAA,IAEvB,KAAK,QAAA;AACD,MAAA,OAAO,KAAK,MAAA,CAAO,IAAA,CAAK,UAAA,EAAY,IAAA,CAAK,UAAU,MAAM,CAAA,GACnD,IAAA,CAAK,GAAA,KACL,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,YAAA,EAAc,QAAQ,UAAU,CAAA;AAAA,IAE7D,KAAK,GAAA;AACD,MAAA,OAAO,KAAK,GAAA,EAAI;AAAA,IAEpB,KAAK,KAAA;AAED,MAAA,IAAI,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAA,EAAYoF,EAAC,CAAA,IAC/B,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAA,GAAa,CAAA,EAAGhE,SAAQ,CAAA,EAAG;AAC7C,QAAA,OAAO,KAAK,YAAA,EAAa;AAAA,MAC7B,CAAA,MAAO;AACH,QAAA,OAAO,KAAK,UAAA,EAAW;AAAA,MAC3B;AAAA,IAEJ,KAAK,KAAA,EAAO;AACR,MAAA,MAAMlB,KAAAA,GAAO,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,UAAU,CAAA;AAE5C,MAAA,IAAIA,UAASkE,QAAAA,IACTlE,KAAAA,KAAS2D,aACT3D,KAAAA,KAASkB,SAAAA,IACTlB,UAASc,YAAAA,EAAa;AACtB,QAAA,OAAO,KAAK,QAAA,EAAS;AAAA,MACzB;AAIA,MAAA,IAAId,UAASmC,WAAAA,EAAY;AACrB,QAAA,IAAA,CAAK,KAAA,CAAM,+BAAA,EAAiC,IAAA,CAAK,UAAA,GAAa,CAAC,CAAA;AAAA,MACnE;AAEA,MAAA;AAAA,IACJ;AAAA;AAER;;;AClFA,IAAO,qBAAA,GAAQ;AAAA,EACX,OAAA,EAAA;AACJ,CAAA;;;ACOA,IAAMA,WAAAA,GAAa,EAAA;AACnB,IAAM0B,UAAAA,GAAY,EAAA;AAClB,IAAMF,SAAAA,GAAW,EAAA;AACjB,IAAMzC,UAAAA,GAAW,EAAA;AACjB,IAAMgD,QAAAA,GAAU,EAAA;AAChB,IAAMO,SAAAA,GAAW,EAAA;AACjB,IAAMT,gBAAAA,GAAkB,EAAA;AACxB,IAAMJ,aAAAA,GAAe,GAAA;AACrB,IAAMK,MAAAA,GAAQ,GAAA;AAEd,SAAS,YAAA,CAAa,MAAM,QAAA,EAAU;AAClC,EAAA,IAAI,QAAA,CAAS,IAAA,KAAS,IAAA,IAAQ,QAAA,CAAS,IAAA,CAAK,IAAA,KAAS,YAAA,IACjD,IAAA,KAAS,IAAA,IAAQ,IAAA,CAAK,IAAA,KAAS,YAAA,EAAc;AAC7C,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA;AAAA,MACV,IAAA,EAAM,YAAA;AAAA,MACN,GAAA,EAAK,IAAA;AAAA,MACL,IAAA,EAAM;AAAA,KACT,CAAA;AAAA,EACL;AACJ;AAEA,SAAS,OAAA,GAAU;AACf,EAAA,QAAQ,KAAK,SAAA;AAAW,IACpB,KAAK,iBAAA;AACD,MAAA,OAAO,KAAK,iBAAA,EAAkB;AAAA,IAElC,KAAK,IAAA;AACD,MAAA,OAAO,KAAK,UAAA,EAAW;AAAA,IAE3B,KAAK,KAAA;AACD,MAAA,IAAI,IAAA,CAAK,UAAA,CAAW,CAAC,CAAA,KAAM,KAAA,EAAO;AAC9B,QAAA,OAAO,KAAK,qBAAA,EAAsB;AAAA,MACtC,CAAA,MAAO;AACH,QAAA,OAAO,KAAK,mBAAA,EAAoB;AAAA,MACpC;AAAA,IAEJ,KAAK,KAAA;AACD,MAAA,OAAO,KAAK,YAAA,EAAa;AAAA,IAE7B,KAAKnE,OAAAA;AAAA,IACL,KAAK,UAAA;AACD,MAAA,OAAO,KAAK,UAAA,EAAW;AAAA,IAE3B,KAAK,SAAA;AAED,MAAA,IAAI,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,UAAU,MAAM2E,SAAAA,EAAU;AAC/C,QAAA,IAAA,CAAK,KAAA,CAAM,wBAAA,EAA0B,IAAA,CAAK,UAAA,GAAa,CAAC,CAAA;AAAA,MAC5D;AACA,MAAA;AAAA,IAEJ,KAAK,KAAA,EAAO;AACR,MAAA,MAAMzE,KAAAA,GAAO,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,UAAU,CAAA;AAE5C,MAAA,QAAQA,KAAAA;AAAM,QACV,KAAKkB,UAAAA;AAAA,QACL,KAAK8C,gBAAAA;AAAA,QACL,KAAKC,MAAAA;AAAA,QACL,KAAKC,QAAAA;AACD,UAAA,OAAO,KAAK,UAAA,EAAW;AAAA,QAE3B,KAAKO,SAAAA;AACD,UAAA,OAAO,KAAK,aAAA,EAAc;AAAA,QAE9B,KAAKd,SAAAA;AAAA,QACL,KAAKC,aAAAA;AACD,UAAA,OAAO,KAAK,YAAA,EAAa;AAAA,QAE7B,KAAKzB,WAAAA;AACD,UAAA,OAAO,KAAK,UAAA,EAAW;AAAA,QAE3B,KAAK0B,UAAAA;AACD,UAAA,OAAO,KAAK,eAAA,EAAgB;AAAA;AAGpC,MAAA;AAAA,IACJ;AAAA;AAER;AAEA,IAAO,gBAAA,GAAQ;AAAA,EACX,YAAA;AAAA,EACA;AACJ,CAAA;;;AC3Fe,SAAR,kBAAA,GAAmB;AACtB,EAAA,OAAO,IAAA,CAAK,oBAAA;AAAA,IACR,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,KAAK;AAAA,GACxB;AACJ;;;ACHe,SAAR,WAAA,GAAmB;AACtB,EAAA,MAAM,QAAA,GAAW,KAAK,UAAA,EAAW;AAEjC,EAAA,IAAA,CAAK,MAAA,EAAO;AAGZ,EAAA,QAAA,CAAS,IAAA,CAAK,IAAA,CAAK,UAAA,EAAY,CAAA;AAE/B,EAAA,IAAA,CAAK,MAAA,EAAO;AAEZ,EAAA,IAAI,IAAA,CAAK,cAAc,KAAA,EAAO;AAC1B,IAAA,QAAA,CAAS,IAAA,CAAK,IAAA,CAAK,QAAA,EAAU,CAAA;AAE7B,IAAA,MAAM,aAAa,IAAA,CAAK,UAAA;AACxB,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,mBAAA,GACb,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,GACf,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,sCAAA,EAAwC,KAAK,CAAA;AAEjE,IAAA,IAAI,KAAA,CAAM,IAAA,KAAS,OAAA,IAAW,KAAA,CAAM,SAAS,OAAA,EAAS;AAClD,MAAA,KAAA,IAAS,SAAS,UAAA,GAAa,IAAA,CAAK,UAAA,EAAY,MAAA,IAAU,GAAG,MAAA,EAAA,EAAU;AACnE,QAAA,IAAI,IAAA,CAAK,UAAA,CAAW,MAAM,CAAA,KAAM,UAAA,EAAY;AACxC,UAAA,KAAA,CAAM,SAAS,UAAA,CAAW;AAAA,YACtB,IAAA,EAAM,YAAA;AAAA,YACN,GAAA,EAAK,IAAA;AAAA,YACL,KAAA,EAAO;AAAA,WACV,CAAA;AACD,UAAA;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAEA,IAAA,QAAA,CAAS,KAAK,KAAK,CAAA;AAAA,EACvB;AAEA,EAAA,OAAO,QAAA;AACX;;;AClCA,SAAS,oBAAoB,IAAA,EAAM;AAC/B,EAAA,OACI,SAAS,IAAA,IACT,IAAA,CAAK,SAAS,UAAA,KACb,IAAA,CAAK,MAAM,IAAA,CAAK,KAAA,CAAM,SAAS,CAAC,CAAA,KAAM,OAAO,IAAA,CAAK,KAAA,CAAM,KAAK,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA,KAAM,GAAA,CAAA;AAE5F;AAEA,IAAO,aAAA,GAAQ;AAAA,EACX,OAAA,EAAA,iBAAA;AAAA,EACA,YAAA,CAAa,MAAM,QAAA,EAAU;AACzB,IAAA,IAAI,mBAAA,CAAoB,IAAI,CAAA,EAAG;AAC3B,MAAA,IAAA,CAAK,KAAA,GAAQ,MAAM,IAAA,CAAK,KAAA;AAAA,IAC5B;AACA,IAAA,IAAI,mBAAA,CAAoB,QAAA,CAAS,IAAI,CAAA,EAAG;AACpC,MAAA,QAAA,CAAS,KAAK,KAAA,IAAS,GAAA;AAAA,IAC3B;AAAA,EACJ,CAAA;AAAA,EACA,YAAA,EAAc,kBAAA;AAAA,EACd,KAAA,EAAO;AACX,CAAA;;;ACpBA,IAAM,wBAAA,uBAA+B,GAAA,CAAI,CAAC,QAAQ,KAAA,EAAO,KAAA,EAAO,IAAI,CAAC,CAAA;AAErE,IAAO,iBAAA,GAAQ;AAAA,EACX,KAAA,EAAO;AAAA,IACH,OAAA,GAAU;AACN,MAAA,MAAM,QAAA,GAAW,KAAK,UAAA,EAAW;AAEjC,MAAA,IAAI,IAAA,CAAK,cAAc,KAAA,EAAO;AAC1B,QAAA,MAAMlE,SAAO,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,UAAA,EAAY,KAAK,QAAQ,CAAA;AAE1D,QAAA,IAAI,CAAC,wBAAA,CAAyB,GAAA,CAAIA,MAAAA,CAAK,WAAA,EAAa,CAAA,EAAG;AACnD,UAAA,QAAA,CAAS,IAAA,CAAK,IAAA,CAAK,UAAA,EAAY,CAAA;AAAA,QACnC;AAAA,MACJ;AAEA,MAAA,QAAA,CAAS,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,WAAW,CAAC,CAAA;AAEzC,MAAA,OAAO,QAAA;AAAA,IACX,CAAA;AAAA,IACA,KAAA,CAAM,SAAS,KAAA,EAAO;AAClB,MAAA,OAAO,IAAA,CAAK,MAAM,MAAM,CAAA;AAAA,IAC5B;AAAA;AAER,CAAA;;;AC3BA,IAAO,iBAAA,GAAQ;AAAA,EACX,KAAA,EAAO;AAAA,IACH,OAAA,EAAS,IAAA;AAAA,IACT,KAAA,GAAQ;AACJ,MAAA,OAAO,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,IAC1B;AAAA;AAER,CAAA;;;ACEA,SAAS,iBAAA,CAAkBa,SAAO,QAAA,EAAU;AACxC,EAAA,OAAO,IAAA,CAAK,iBAAA;AAAA,IACR,MAAM;AACF,MAAA,IAAI;AACA,QAAA,OAAOA,OAAAA,CAAM,KAAK,IAAI,CAAA;AAAA,MAC1B,CAAA,SAAE;AACE,QAAA,IAAA,CAAK,MAAA,EAAO;AACZ,QAAA,IAAI,IAAA,CAAK,eAAA,CAAgB,CAAC,CAAA,KAAM,gBAAA,EAAkB;AAC9C,UAAA,IAAA,CAAK,KAAA,EAAM;AAAA,QACf;AAAA,MACJ;AAAA,IACJ,CAAA;AAAA,IACA,QAAA,KAAa,MAAM,IAAA,CAAK,GAAA,CAAI,MAAM,IAAI,CAAA;AAAA,GAC1C;AACJ;AAEA,IAAM,cAAA,GAAiB;AAAA,EACnB,KAAA,GAAQ;AACJ,IAAA,IAAA,CAAK,MAAA,EAAO;AAEZ,IAAA,MAAM,QAAA,GAAW,KAAK,UAAA,EAAW;AACjC,IAAA,MAAM,IAAA,GAAO,iBAAA,CAAkB,IAAA,CAAK,IAAA,EAAM,KAAK,KAAK,CAAA;AAEpD,IAAA,IAAI,IAAA,CAAK,IAAA,KAAS,KAAA,IAAS,IAAA,CAAK,UAAU,EAAA,EAAI;AAC1C,MAAA,QAAA,CAAS,KAAK,IAAI,CAAA;AAAA,IACtB;AAEA,IAAA,OAAO,QAAA;AAAA,EACX,CAAA;AAAA,EACA,QAAA,GAAW;AACP,IAAA,IAAA,CAAK,MAAA,EAAO;AAEZ,IAAA,MAAM,QAAA,GAAW,KAAK,UAAA,EAAW;AACjC,IAAA,MAAM,OAAO,iBAAA,CAAkB,IAAA;AAAA,MAC3B,IAAA;AAAA,MACA,IAAA,CAAK,WAAA;AAAA,MACL,MAAM,kBAAkB,IAAA,CAAK,IAAA,EAAM,MAAM,IAAA,CAAK,SAAA,CAAU,UAAU,CAAC;AAAA,KACvE;AAEA,IAAA,IAAI,IAAA,CAAK,IAAA,KAAS,KAAA,IAAS,IAAA,CAAK,UAAU,EAAA,EAAI;AAC1C,MAAA,QAAA,CAAS,KAAK,IAAI,CAAA;AAAA,IACtB;AAEA,IAAA,OAAO,QAAA;AAAA,EACX;AACJ,CAAA;AAEA,IAAO2E,eAAAA,GAAQ;AAAA,EACX,KAAA,EAAO;AAAA,IACH,OAAA,GAAU;AACN,MAAA,MAAM,QAAA,GAAW,KAAK,UAAA,EAAW;AAEjC,MAAA,QAAQ,KAAK,SAAA;AAAW,QACpB,KAAKtF,OAAAA;AACD,UAAA,QAAA,CAAS,IAAA,CAAK,IAAA,CAAK,MAAA,EAAQ,CAAA;AAC3B,UAAA;AAAA,QAEJ,KAAK,GAAA;AAAA,QACL,KAAK,QAAA;AACD,UAAA,QAAA,CAAS,IAAA,CAAK,IAAA,CAAK,GAAA,EAAK,CAAA;AACxB,UAAA;AAAA,QAEJ;AACI,UAAA,IAAA,CAAK,MAAM,6BAA6B,CAAA;AAAA;AAGhD,MAAA,IAAA,CAAK,MAAA,EAAO;AAEZ,MAAA,IAAI,IAAA,CAAK,SAAA,KAAc,KAAA,IACnB,IAAA,CAAK,MAAA,CAAO,KAAK,UAAA,EAAY,IAAA,CAAK,QAAA,EAAU,OAAO,CAAA,EAAG;AACtD,QAAA,QAAA,CAAS,IAAA,CAAK,IAAA,CAAK,UAAA,EAAY,CAAA;AAAA,MACnC,CAAA,MAAA,IACI,IAAA,CAAK,SAAA,KAAc,QAAA,IACnB,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,UAAA,EAAY,IAAA,CAAK,QAAA,EAAU,QAAQ,CAAA,EACtD;AACE,QAAA,QAAA,CAAS,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,IAAA,EAAM,cAAc,CAAC,CAAA;AAAA,MACrD;AAEA,MAAA,IAAA,CAAK,MAAA,EAAO;AAEZ,MAAA,IAAI,IAAA,CAAK,SAAA,KAAc,QAAA,IACnB,IAAA,CAAK,MAAA,CAAO,KAAK,UAAA,EAAY,IAAA,CAAK,QAAA,EAAU,WAAW,CAAA,EAAG;AAC1D,QAAA,QAAA,CAAS,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,IAAA,EAAM,cAAc,CAAC,CAAA;AAAA,MACrD;AAEA,MAAA,IAAI,IAAA,CAAK,gBAAgB,CAAC,CAAA,KAAM,SAC5B,IAAA,CAAK,eAAA,CAAgB,CAAC,CAAA,KAAM,eAAA,EAAiB;AAC7C,QAAA,QAAA,CAAS,IAAA,CAAK,IAAA,CAAK,cAAA,EAAgB,CAAA;AAAA,MACvC;AAEA,MAAA,OAAO,QAAA;AAAA,IACX,CAAA;AAAA,IACA,KAAA,EAAO;AAAA;AAEf,CAAA;;;ACvGA,IAAO,aAAA,GAAQ;AAAA,EACX,KAAA,EAAO;AAAA,IACH,OAAA,GAAU;AACN,MAAA,OAAO,IAAA,CAAK,oBAAA;AAAA,QACR,KAAK,SAAA;AAAU,OACnB;AAAA,IACJ,CAAA;AAAA,IACA,KAAA,GAAQ;AACJ,MAAA,OAAO,IAAA,CAAK,MAAM,KAAK,CAAA;AAAA,IAC3B;AAAA;AAER,CAAA;;;ACXA,IAAO,aAAA,GAAQ;AAAA,EACX,KAAA,EAAO;AAAA,IACH,OAAA,GAAU;AACN,MAAA,OAAO,IAAA,CAAK,oBAAA;AAAA,QACR,KAAK,cAAA;AAAe,OACxB;AAAA,IACJ,CAAA;AAAA,IACA,KAAA,CAAM,SAAS,KAAA,EAAO;AAClB,MAAA,OAAO,IAAA,CAAK,MAAM,MAAM,CAAA;AAAA,IAC5B;AAAA;AAER,CAAA;;;ACXA,IAAO,YAAA,GAAQ;AAAA,EACX,KAAA,EAAO;AAAA,IACH,OAAA,GAAU;AACN,MAAA,OAAO,IAAA,CAAK,oBAAA;AAAA,QACR,KAAK,YAAA;AAAa,OACtB;AAAA,IACJ,CAAA;AAAA,IACA,KAAA,GAAQ;AACJ,MAAA,OAAO,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,IAC1B;AAAA;AAER,CAAA;;;ACXA,IAAO,YAAA,GAAQ;AAAA,EACX,KAAA,EAAO;AAAA,IACH,OAAA,GAAU;AACN,MAAA,OAAO,IAAA,CAAK,oBAAA;AAAA,QACR,KAAK,YAAA;AAAa,OACtB;AAAA,IACJ,CAAA;AAAA,IACA,KAAA,GAAQ;AACJ,MAAA,OAAO,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,IAC1B;AAAA;AAER,CAAA;;;ACXA,IAAO,aAAA,GAAQ;AAAA,EACX,KAAA,EAAO;AAAA,IACH,OAAA,GAAU;AACN,MAAA,OAAO,IAAA,CAAK,oBAAA;AAAA,QACR,KAAK,KAAA;AAAM,OACf;AAAA,IACJ,CAAA;AAAA,IACA,KAAA,CAAM,SAAS,KAAA,EAAO;AAClB,MAAA,OAAO,IAAA,CAAK,MAAM,MAAM,CAAA;AAAA,IAC5B;AAAA;AAER,CAAA;;;ACXA,IAAO,sBAAA,GAAQ;AAAA,EACX,KAAA,EAAO;AAAA,IACH,OAAA,EAAS,IAAA;AAAA,IACT,KAAA,CAAM,SAAS,KAAA,EAAO;AAClB,MAAA,OAAO,IAAA,CAAK,MAAM,MAAM,CAAA;AAAA,IAC5B;AAAA;AAER,CAAA;;;ACPA,IAAO,gBAAA,GAAQ;AAAA,EACX,KAAA,EAAO;AAAA,IACH,OAAA,GAAU;AACN,MAAA,OAAO,IAAA,CAAK,oBAAA;AAAA,QACR,IAAA,CAAK,UAAU,UAAU;AAAA,OAC7B;AAAA,IACJ,CAAA;AAAA,IACA,KAAA,CAAM,SAAS,KAAA,EAAO;AAClB,MAAA,OAAO,IAAA,CAAK,MAAM,MAAM,CAAA;AAAA,IAC5B;AAAA;AAER,CAAA;;;ACAA,IAAO,cAAA,GAAQ;AAAA,EACX,SAAA,EAAA,iBAAA;AAAA,EACA,WAAA,EAAa,iBAAA;AAAA,EACb,MAAA,EAAQsF,eAAAA;AAAA,EACR,KAAA,EAAA,aAAA;AAAA,EACA,KAAA,EAAA,aAAA;AAAA,EACA,IAAA,EAAA,YAAA;AAAA,EACA,IAAA,EAAA,YAAA;AAAA,EACA,KAAA,EAAA,aAAA;AAAA,EACA,gBAAA,EAAkB,sBAAA;AAAA,EAClB,QAAA,EAAA;AACJ,CAAA;;;ACpBO,SAAS,sBAAA,GAAyB;AACrC,EAAA,MAAM,QAAA,GAAW,KAAK,UAAA,EAAW;AAEjC,EAAA,IAAA,CAAK,MAAA,EAAO;AAEZ,EAAA,IAAA,EAAM,OAAO,CAAC,IAAA,CAAK,GAAA,EAAK;AACpB,IAAA,QAAQ,KAAK,SAAA;AAAW,MACpB,KAAK,KAAA;AACD,QAAA,QAAA,CAAS,IAAA,CAAK,IAAA,CAAK,UAAA,EAAY,CAAA;AAC/B,QAAA;AAAA,MAEJ,KAAKtF,OAAAA;AACD,QAAA,QAAA,CAAS,IAAA,CAAK,IAAA,CAAK,MAAA,EAAQ,CAAA;AAC3B,QAAA;AAAA,MAEJ,KAAK,KAAA;AACD,QAAA,QAAA,CAAS,IAAA,CAAK,IAAA,CAAK,QAAA,EAAU,CAAA;AAC7B,QAAA;AAAA,MAEJ,KAAK,gBAAA;AACD,QAAA,MAAM,IAAA;AAAA,MAEV;AACI,QAAA,IAAA,CAAK,MAAM,yCAAyC,CAAA;AAAA;AAG5D,IAAA,IAAA,CAAK,MAAA,EAAO;AAAA,EAChB;AAEA,EAAA,OAAO,QAAA;AACX;;;AC9BA,IAAM,YAAA,GAAe;AAAA,EACjB,KAAA,GAAQ;AACJ,IAAA,OAAO,IAAA,CAAK,oBAAA;AAAA,MACR,KAAK,YAAA;AAAa,KACtB;AAAA,EACJ;AACJ,CAAA;AAEA,IAAM,QAAA,GAAW;AAAA,EACb,KAAA,GAAQ;AACJ,IAAA,OAAO,IAAA,CAAK,oBAAA;AAAA,MACR,KAAK,QAAA;AAAS,KAClB;AAAA,EACJ;AACJ,CAAA;AAEA,IAAM,SAAA,GAAY;AAAA,EACd,KAAA,GAAQ;AACJ,IAAA,OAAO,IAAA,CAAK,oBAAA;AAAA,MACR,KAAK,UAAA;AAAW,KACpB;AAAA,EACJ;AACJ,CAAA;AAEA,IAAM,QAAA,GAAW;AAAA,EACb,KAAA,EAAO;AACX,CAAA;AAEA,IAAM,GAAA,GAAM;AAAA,EACR,KAAA,GAAQ;AACJ,IAAA,OAAO,IAAA,CAAK,oBAAA;AAAA,MACR,KAAK,GAAA;AAAI,KACb;AAAA,EACJ;AACJ,CAAA;AAEA,IAAO,cAAA,GAAQ;AAAA,EACX,KAAA,EAAO,SAAA;AAAA,EACP,KAAA,EAAO,YAAA;AAAA,EACP,MAAA,EAAQ,QAAA;AAAA,EACR,SAAA,EAAW,YAAA;AAAA,EACX,IAAA,EAAM,YAAA;AAAA,EACN,UAAA,EAAY,YAAA;AAAA,EACZ,aAAA,EAAe,YAAA;AAAA,EACf,OAAA,EAAS,YAAA;AAAA,EACT,KAAA,EAAO,YAAA;AAAA,EACP,WAAA,EAAa,GAAA;AAAA,EACb,gBAAA,EAAkB,GAAA;AAAA,EAClB,kBAAA,EAAoB,GAAA;AAAA,EACpB,aAAA,EAAe,GAAA;AAAA,EACf,SAAA,EAAW,QAAA;AAAA,EACX,MAAA,EAAQ,QAAA;AAAA,EACR,cAAA,EAAgB;AACpB,CAAA;;;ACvDA,IAAA,mBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,mBAAA,EAAA;AAAA,EAAA,OAAA,EAAA,MAAAW,MAAAA;AAAA,EAAA,MAAA,EAAA,MAAAA,MAAAA;AAAA,EAAA,aAAA,EAAA,MAAAA,MAAAA;AAAA,EAAA,iBAAA,EAAA,MAAAA,MAAAA;AAAA,EAAA,KAAA,EAAA,MAAAA,MAAAA;AAAA,EAAA,QAAA,EAAA,MAAAA,MAAAA;AAAA,EAAA,GAAA,EAAA,MAAAA,MAAAA;AAAA,EAAA,GAAA,EAAA,MAAAA,MAAAA;AAAA,EAAA,aAAA,EAAA,MAAAA,OAAAA;AAAA,EAAA,UAAA,EAAA,MAAAA,OAAAA;AAAA,EAAA,OAAA,EAAA,MAAAA,OAAAA;AAAA,EAAA,SAAA,EAAA,MAAAA,OAAAA;AAAA,EAAA,WAAA,EAAA,MAAAA,OAAAA;AAAA,EAAA,eAAA,EAAA,MAAAA,OAAAA;AAAA,EAAA,SAAA,EAAA,MAAAA,OAAAA;AAAA,EAAA,OAAA,EAAA,MAAAA,OAAAA;AAAA,EAAA,eAAA,EAAA,MAAAA,OAAAA;AAAA,EAAA,YAAA,EAAA,MAAAA,OAAAA;AAAA,EAAA,QAAA,EAAA,MAAAA,OAAAA;AAAA,EAAA,eAAA,EAAA,MAAAA,OAAAA;AAAA,EAAA,IAAA,EAAA,MAAAA,OAAAA;AAAA,EAAA,UAAA,EAAA,MAAAA,OAAAA;AAAA,EAAA,UAAA,EAAA,MAAAA,OAAAA;AAAA,EAAA,KAAA,EAAA,MAAAA,OAAAA;AAAA,EAAA,SAAA,EAAA,MAAAA,OAAAA;AAAA,EAAA,UAAA,EAAA,MAAAA,OAAAA;AAAA,EAAA,cAAA,EAAA,MAAAA,OAAAA;AAAA,EAAA,eAAA,EAAA,MAAAA,OAAAA;AAAA,EAAA,GAAA,EAAA,MAAAA,OAAAA;AAAA,EAAA,MAAA,EAAA,MAAAA,OAAAA;AAAA,EAAA,QAAA,EAAA,MAAAA,OAAAA;AAAA,EAAA,WAAA,EAAA,MAAAA,OAAAA;AAAA,EAAA,UAAA,EAAA,MAAAA,OAAAA;AAAA,EAAA,mBAAA,EAAA,MAAAA,OAAAA;AAAA,EAAA,qBAAA,EAAA,MAAAA,OAAAA;AAAA,EAAA,KAAA,EAAA,MAAAA,OAAAA;AAAA,EAAA,GAAA,EAAA,MAAAA,OAAAA;AAAA,EAAA,IAAA,EAAA,MAAAA,OAAAA;AAAA,EAAA,KAAA,EAAA,MAAAA,OAAAA;AAAA,EAAA,QAAA,EAAA,MAAAA,OAAAA;AAAA,EAAA,YAAA,EAAA,MAAAA,OAAAA;AAAA,EAAA,MAAA,EAAA,MAAAA,OAAAA;AAAA,EAAA,UAAA,EAAA,MAAAA,OAAAA;AAAA,EAAA,mBAAA,EAAA,MAAAA,OAAAA;AAAA,EAAA,YAAA,EAAA,MAAAA,OAAAA;AAAA,EAAA,YAAA,EAAA,MAAAA,OAAAA;AAAA,EAAA,GAAA,EAAA,MAAAA,OAAAA;AAAA,EAAA,KAAA,EAAA,MAAAA,OAAAA;AAAA,EAAA,UAAA,EAAA,MAAAA;AAAA,CAAA,CAAA;;;ACKA,IAAO,cAAA,GAAQ;AAAA,EACX,YAAA,EAAc;AAAA,IACV,OAAA,EAAS,YAAA;AAAA,IACT,UAAA,EAAY,YAAA;AAAA,IACZ,MAAA,EAAQ,QAAA;AAAA,IACR,cAAc,OAAA,EAAS;AACnB,MAAA,OAAO,IAAA,CAAK,cAAc,OAAA,CAAQ,MAAA,GAAS,OAAO,OAAA,CAAQ,MAAM,IAAI,IAAI,CAAA;AAAA,IAC5E,CAAA;AAAA,IACA,cAAA,EAAgB,gBAAA;AAAA,IAChB,UAAA,EAAY,YAAA;AAAA,IACZ,UAAU,OAAA,EAAS;AACf,MAAA,OAAO,IAAA,CAAK,SAAA,CAAU,OAAA,CAAQ,IAAI,CAAA;AAAA,IACtC,CAAA;AAAA,IACA,IAAA,EAAM,MAAA;AAAA,IACN,YAAA,EAAc,cAAA;AAAA,IACd,QAAA,EAAU,UAAA;AAAA,IACV,KAAA,GAAQ;AACJ,MAAA,OAAO,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,IAC1B,CAAA;AAAA,IACA,eAAA,EAAiB,iBAAA;AAAA,IACjB,WAAA,EAAa,aAAA;AAAA,IACb,KAAA,EAAO;AAAA,GACX;AAAA,EACA,QAAA,EAAU;AAAA,IACN,QAAA,EAAU;AAAA,MACN,QAAA,GAAW;AACP,QAAA,OAAO,KAAK,QAAA,EAAS;AAAA,MACzB;AAAA,KACJ;AAAA,IACA,SAAA,EAAW;AAAA,MACP,KAAA,GAAQ;AACJ,QAAA,OAAO,KAAK,WAAA,EAAY;AAAA,MAC5B;AAAA;AACJ,GACJ;AAAA,EACA,KAAA,EAAA,aAAA;AAAA,EACA,MAAA,EAAA,cAAA;AAAA,EACA,MAAA,EAAA,cAAA;AAAA,EACA,IAAA,EAAA;AACJ,CAAA;;;AC1CA,IAAO,cAAA,GAAQ;AAAA,EACX,IAAA,EAAA;AACJ,CAAA;;;ACCA,IAAO,iBAAQ,cAAA,CAAa;AAAA,EACxB,GAAG,aAAA;AAAA,EACH,GAAG,cAAA;AAAA,EACH,GAAG;AACP,CAAC,CAAA;;;ACIM,IAAM;AAAA,EACT,QAAA,EAAAP,SAAAA;AAAA,EACA,KAAA,EAAAO,OAAAA;AAAA,EACA,QAAA,EAAAwC,UAAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EAEA,IAAA,EAAAtC,KAAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EAEA,aAAA;AAAA,EACA,eAAA;AAAA,EAEA;AACJ,CAAA,GAAI,cAAA;;;ACzBG,SAAS,gBAAgB,OAAA,EAAiC;AAC/D,EAAA,OAAO,OAAA,GAAU,CAAA,aAAA,EAAgB,OAAO,CAAA,CAAA,GAAK,IAAA;AAC/C;AAEA,SAAS,iBAAA,CAAkB0E,eAAsB,SAAA,EAA2B;AAC1E,EAAA,MAAM,mBAAA,GAAsB,CAAC,OAAA,KAA4B;AACvD,IAAA,MAAM,OAAA,GAAU,QAAQ,IAAA,EAAK;AAC7B,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAO,OAAA;AAAA,IACT;AAEA,IAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,SAAS,CAAA,EAAG;AAC/B,MAAA,OAAO,OAAA;AAAA,IACT;AAEA,IAAA,MAAM,aAAA,GAAgB,sBAAA;AACtB,IAAA,MAAM,iBAAiB,OAAA,CAAQ,OAAA,CAAQ,aAAA,EAAe,EAAE,EAAE,IAAA,EAAK;AAC/D,IAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,OAAA,CAAQ,aAAA,EAAe,IAAI,CAAA;AAEtD,IAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,MAAA,OAAO,UAAA;AAAA,IACT;AAEA,IAAA,IAAI,eAAe,OAAA,EAAS;AAC1B,MAAA,OAAO,IAAI,SAAS,CAAA,CAAA,CAAA;AAAA,IACtB;AAEA,IAAA,MAAM,WAAA,GAAc,UAAA,CAAW,MAAA,CAAO,cAAc,CAAA;AACpD,IAAA,IAAI,gBAAgB,EAAA,EAAI;AACtB,MAAA,OAAO,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,CAAA;AAAA,IACnC;AAEA,IAAA,OAAO,CAAA,EAAG,UAAA,CAAW,KAAA,CAAM,CAAA,EAAG,WAAW,CAAC,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,EAAI,UAAA,CAAW,KAAA,CAAM,WAAW,CAAC,CAAA,CAAA;AAAA,EAC1F,CAAA;AAEA,EAAA,OAAOA,cACJ,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAI,CAACV,SAAAA,KAAaA,SAAAA,CAAS,IAAA,EAAM,EACjC,MAAA,CAAO,OAAO,CAAA,CACd,GAAA,CAAI,CAACA,SAAAA,KAAa;AACjB,IAAA,IAAIA,UAAS,UAAA,CAAW,GAAG,KAAKA,SAAAA,CAAS,QAAA,CAAS,SAAS,CAAA,EAAG;AAC5D,MAAA,OAAOA,SAAAA;AAAA,IACT;AAEA,IAAA,OAAOA,UACJ,KAAA,CAAM,aAAa,CAAA,CACnB,GAAA,CAAI,CAAC,IAAA,KAAS;AACb,MAAA,IAAI,CAAC,IAAA,IAAQ,eAAA,CAAgB,IAAA,CAAK,IAAI,CAAA,EAAG;AACvC,QAAA,OAAO,IAAA;AAAA,MACT;AAEA,MAAA,OAAO,oBAAoB,IAAI,CAAA;AAAA,IACjC,CAAC,CAAA,CACA,IAAA,CAAK,EAAE,CAAA;AAAA,EACZ,CAAC,CAAA,CACA,IAAA,CAAK,IAAI,CAAA;AACd;AAEA,SAAS,QAAA,CAAS,KAAa,SAAA,EAA2B;AACxD,EAAA,MAAM,GAAA,GAAclE,QAAM,GAAA,EAAK;AAAA,IAC7B,OAAA,EAAS,YAAA;AAAA,IACT,SAAA,EAAW;AAAA,GACZ,CAAA;AAED,EAAQE,MAAK,GAAA,EAAK;AAAA,IAChB,KAAA,EAAO,MAAA;AAAA,IACP,MAAM,IAAA,EAAM;AACV,MAAA,MAAM,IAAA,GAAO,IAAA;AACb,MAAA,IAAI,CAAC,IAAA,CAAK,OAAA,IAAW,IAAA,CAAK,OAAA,CAAQ,SAAS,cAAA,EAAgB;AACzD,QAAA;AAAA,MACF;AAEA,MAAA,IAAA,CAAK,OAAA,GAAkBF,OAAAA;AAAA,QACrB,iBAAA,CAA0BwC,UAAAA,CAAS,IAAA,CAAK,OAAO,GAAG,SAAS,CAAA;AAAA,QAC3D;AAAA,UACE,OAAA,EAAS,cAAA;AAAA,UACT,SAAA,EAAW;AAAA;AACb,OACF;AAAA,IACF;AAAA,GACD,CAAA;AAED,EAAA,OAAeA,WAAS,GAAG,CAAA;AAC7B;AAEO,SAAS,cAAc,KAAA,EAAuB;AACnD,EAAA,IAAI,IAAA,GAAO,UAAA;AACX,EAAA,KAAA,IAAS,QAAQ,CAAA,EAAG,KAAA,GAAQ,KAAA,CAAM,MAAA,EAAQ,SAAS,CAAA,EAAG;AACpD,IAAA,IAAA,IAAQ,KAAA,CAAM,WAAW,KAAK,CAAA;AAC9B,IAAA,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,IAAA,EAAM,QAAQ,CAAA;AAAA,EACjC;AAEA,EAAA,OAAO,KAAK,GAAA,CAAI,IAAA,KAAS,CAAC,CAAA,CAAE,SAAS,EAAE,CAAA;AACzC;AAEO,SAAS,UAAA,CAAW,QAAsB,OAAA,EAA0B;AACzE,EAAA,MAAM,SAAA,GAAY,gBAAgB,OAAO,CAAA;AACzC,EAAA,OAAO,MAAA,CACJ,GAAA,CAAI,CAAC,KAAA,KAAU;AACd,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,OAAA,CAAQ,IAAA,EAAK;AACnC,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAO,EAAA;AAAA,IACT;AAEA,IAAA,IAAI,EAAE,QAAA,IAAY,KAAA,CAAM,KAAA,CAAA,IAAU,SAAA,EAAW;AAC3C,MAAA,OAAO,QAAA,CAAS,SAAS,SAAS,CAAA;AAAA,IACpC;AAEA,IAAA,OAAO,OAAA;AAAA,EACT,CAAC,CAAA,CACA,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,MAAM,CAAA;AAChB;;;AChFA,SAAS,eAAA,CAAgB,QAAgB,KAAA,EAIvC;AACA,EAAA,MAAM,SAAA,GAAY,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,GAAA,CAAI,KAAA,EAAO,MAAA,CAAO,MAAM,CAAC,CAAA;AAC5D,EAAA,MAAM,QAAQ,MAAA,CAAO,KAAA,CAAM,GAAG,SAAS,CAAA,CAAE,MAAM,IAAI,CAAA;AACnD,EAAA,OAAO;AAAA,IACL,MAAM,KAAA,CAAM,MAAA;AAAA,IACZ,QAAQ,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,GAAG,MAAA,IAAU,CAAA;AAAA,IAC3C,KAAA,EAAO;AAAA,GACT;AACF;AAEA,SAAS,eAAA,CACP,MAAA,EACA,IAAA,EACA,MAAA,EACA,eAAe,CAAA,EACP;AACR,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA;AAC/B,EAAA,MAAM,QAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,GAAO,IAAI,YAAY,CAAA;AACjD,EAAA,MAAM,MAAM,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,MAAA,EAAQ,OAAO,YAAY,CAAA;AACtD,EAAA,OAAO,KAAA,CACJ,MAAM,KAAA,EAAO,GAAG,EAChB,GAAA,CAAI,CAAC,SAAS,MAAA,KAAW;AACxB,IAAA,MAAM,UAAA,GAAa,QAAQ,MAAA,GAAS,CAAA;AACpC,IAAA,MAAM,MAAA,GAAS,GAAG,MAAA,CAAO,UAAU,EAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,GAAA,CAAA;AACrD,IAAA,IAAI,eAAe,IAAA,EAAM;AACvB,MAAA,OAAO,CAAA,EAAG,MAAM,CAAA,EAAG,OAAO,CAAA,CAAA;AAAA,IAC5B;AACA,IAAA,OAAO,CAAA,EAAG,MAAM,CAAA,EAAG,OAAO;AAAA,OAAA,EAAY,IAAI,MAAA,CAAO,IAAA,CAAK,IAAI,MAAA,EAAQ,CAAC,CAAC,CAAC,CAAA,CAAA,CAAA;AAAA,EACvE,CAAC,CAAA,CACA,IAAA,CAAK,IAAI,CAAA;AACd;AAEO,SAAS,kBAAA,CACd,OAAA,EACA,MAAA,EACA,KAAA,EACA,OAAA,EAKkB;AAClB,EAAA,MAAM,GAAA,GAAM,eAAA,CAAgB,MAAA,EAAQ,KAAK,CAAA;AACzC,EAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM,OAAO,CAAA;AAC/B,EAAA,KAAA,CAAM,GAAA,GAAM,EAAE,KAAA,EAAO,GAAA,EAAI;AACzB,EAAA,KAAA,CAAM,QAAQ,eAAA,CAAgB,MAAA,EAAQ,GAAA,CAAI,IAAA,EAAM,IAAI,MAAM,CAAA;AAC1D,EAAA,KAAA,CAAM,QAAQ,OAAA,EAAS,KAAA;AACvB,EAAA,KAAA,CAAM,OAAO,OAAA,EAAS,IAAA;AACtB,EAAA,KAAA,CAAM,UAAA,GAAa;AAAA,IACjB,OAAA;AAAA,IACA,UAAU,OAAA,EAAS,QAAA;AAAA,IACnB,OAAO,OAAA,EAAS,KAAA;AAAA,IAChB,MAAM,GAAA,CAAI,IAAA;AAAA,IACV,MAAA,EAAQ,IAAI,MAAA,GAAS,CAAA;AAAA,IACrB,OAAO,GAAA,CAAI,KAAA;AAAA,IACX,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,MAAM,OAAA,EAAS;AAAA,GACjB;AACA,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,qBAAA,CACd,KAAA,EACA,MAAA,EACA,QAAA,GAAW,iBAAA,EACJ;AACP,EAAA,MAAM,YAAA,GACH,iBAAiB,KAAA,GAAQ,KAAA,GAAQ,IAAI,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAA;AAC3D,EAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,GAAA,EAAK,KAAA,IAAS,YAAA,CAAa,GAAA;AACtD,EAAA,MAAM,OAAO,KAAA,EAAO,IAAA;AACpB,EAAA,MAAM,SAAS,KAAA,EAAO,MAAA;AACtB,EAAA,MAAM,cAAc,YAAA,CAAa,KAAA,GAAQ,CAAA,EAAA,EAAK,YAAA,CAAa,KAAK,CAAA,CAAA,CAAA,GAAM,EAAA;AACtE,EAAA,MAAM,cAAA,GACJ,IAAA,KAAS,MAAA,IAAa,MAAA,KAAW,MAAA,GAC7B,EAAA,GACA,CAAA,EAAA,EAAK,QAAQ,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAI,MAAA,GAAS,CAAC,CAAA,CAAA,CAAA;AACzC,EAAA,MAAM,iBAAA,GAAoB,YAAA,CAAa,OAAA,CAAQ,OAAA,CAAQ,iBAAiB,EAAE,CAAA;AAC1E,EAAA,YAAA,CAAa,UAAU,CAAA,OAAA,EAAU,WAAW,CAAA,CAAA,EAAI,iBAAiB,GAAG,cAAc,CAAA,CAAA;AAClF,EAAA,IAAI,SAAS,MAAA,IAAa,MAAA,KAAW,MAAA,IAAa,CAAC,aAAa,KAAA,EAAO;AACrE,IAAA,YAAA,CAAa,KAAA,GAAQ,eAAA,CAAgB,MAAA,EAAQ,IAAA,EAAM,MAAM,CAAA;AAAA,EAC3D;AACA,EAAA,YAAA,CAAa,UAAA,GAAa;AAAA,IACxB,OAAA,EAAS,iBAAA;AAAA,IACT,QAAA;AAAA,IACA,OAAO,YAAA,CAAa,KAAA;AAAA,IACpB,IAAA;AAAA,IACA,MAAA,EAAQ,MAAA,KAAW,MAAA,GAAY,MAAA,GAAY,MAAA,GAAS,CAAA;AAAA,IACpD,OAAO,KAAA,EAAO,KAAA;AAAA,IACd,OAAO,YAAA,CAAa,KAAA;AAAA,IACpB,MAAM,YAAA,CAAa;AAAA,GACrB;AACA,EAAA,MAAM,YAAA;AACR;;;AChHA,SAAS,aAAa,IAAA,EAAuB;AAC3C,EAAA,OAAO,IAAA,CAAK,KAAK,IAAI,CAAA;AACvB;AAEA,SAAS,UAAA,CAAW,MAAA,EAAgB,KAAA,EAAe,KAAA,EAAuB;AACxE,EAAA,IAAI,QAAQ,KAAA,GAAQ,CAAA;AACpB,EAAA,OAAO,KAAA,GAAQ,OAAO,MAAA,EAAQ;AAC5B,IAAA,IAAI,OAAO,KAAK,CAAA,KAAM,QAAQ,KAAA,GAAQ,CAAA,GAAI,OAAO,MAAA,EAAQ;AACvD,MAAA,KAAA,IAAS,CAAA;AACT,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,MAAA,CAAO,KAAK,CAAA,KAAM,KAAA,EAAO;AAC3B,MAAA,OAAO,KAAA,GAAQ,CAAA;AAAA,IACjB;AAEA,IAAA,KAAA,IAAS,CAAA;AAAA,EACX;AAEA,EAAA,OAAO,MAAA,CAAO,MAAA;AAChB;AAEA,SAAS,UAAA,CAAW,QAAgB,KAAA,EAAuB;AACzD,EAAA,IAAI,KAAA,GAAQ,KAAA;AACZ,EAAA,OAAO,KAAA,GAAQ,OAAO,MAAA,EAAQ;AAC5B,IAAA,MAAM,IAAA,GAAO,OAAO,KAAK,CAAA;AACzB,IAAA,IAAI,IAAA,KAAS,GAAA,IAAO,IAAA,KAAS,GAAA,EAAK;AAChC,MAAA,KAAA,GAAQ,UAAA,CAAW,MAAA,EAAQ,KAAA,EAAO,IAAI,CAAA;AACtC,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,SAAS,GAAA,EAAK;AAChB,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,KAAA,IAAS,CAAA;AAAA,EACX;AAEA,EAAA,OAAO,EAAA;AACT;AAEA,SAAS,gBAAgB,MAAA,EAA+C;AACtE,EAAA,MAAM,QAAuC,EAAC;AAC9C,EAAA,MAAM,SAAA,GACJ,8EAAA;AAEF,EAAA,IAAI,KAAA;AACJ,EAAA,OAAA,CAAQ,KAAA,GAAQ,SAAA,CAAU,IAAA,CAAK,MAAM,OAAO,IAAA,EAAM;AAChD,IAAA,MAAM,GAAGrD,MAAAA,EAAM,YAAA,EAAc,YAAA,EAAc,IAAI,CAAA,GAAI,KAAA;AACnD,IAAA,MAAM,KAAA,GAAQ,YAAA,IAAgB,YAAA,IAAgB,IAAA,IAAQ,IAAA;AACtD,IAAA,KAAA,CAAMA,MAAI,CAAA,GAAI,KAAA;AAAA,EAChB;AAEA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,cAAA,CACP,QACA,KAAA,EAC+E;AAC/E,EAAA,IAAI,MAAA,CAAO,KAAK,CAAA,KAAM,GAAA,EAAK;AACzB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,MAAA,GAAS,UAAA,CAAW,MAAA,EAAQ,KAAA,GAAQ,CAAC,CAAA;AAC3C,EAAA,IAAI,SAAS,CAAA,EAAG;AACd,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,MAAM,MAAA,CAAO,KAAA,CAAM,QAAQ,CAAA,EAAG,MAAM,EAAE,IAAA,EAAK;AACjD,EAAA,IAAI,CAAC,OAAO,GAAA,CAAI,UAAA,CAAW,GAAG,CAAA,IAAK,GAAA,CAAI,UAAA,CAAW,GAAG,CAAA,EAAG;AACtD,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,UAAA,GAAa,CAAA;AACjB,EAAA,OAAO,UAAA,GAAa,GAAA,CAAI,MAAA,IAAU,CAAC,YAAA,CAAa,GAAA,CAAI,UAAU,CAAC,CAAA,IAAK,GAAA,CAAI,UAAU,CAAA,KAAM,GAAA,EAAK;AAC3F,IAAA,UAAA,IAAc,CAAA;AAAA,EAChB;AAEA,EAAA,MAAM,GAAA,GAAM,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,UAAU,CAAA;AACnC,EAAA,MAAM,WAAA,GAAc,IAAI,KAAA,CAAM,UAAU,EAAE,OAAA,CAAQ,QAAA,EAAU,EAAE,CAAA,CAAE,IAAA,EAAK;AACrE,EAAA,OAAO;AAAA,IACL,GAAA;AAAA,IACA,SAAS,MAAA,GAAS,CAAA;AAAA,IAClB,KAAA,EAAO,gBAAgB,WAAW;AAAA,GACpC;AACF;AAEA,SAAS,eAAA,CACP,MAAA,EACA,KAAA,EACA,OAAA,EACiB;AACjB,EAAA,MAAM,OAAA,GAAU,cAAA,CAAe,MAAA,EAAQ,KAAK,CAAA;AAC5C,EAAA,IAAI,CAAC,WAAW,OAAA,CAAQ,GAAA,CAAI,aAAY,KAAM,OAAA,CAAQ,aAAY,EAAG;AACnE,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,WAAA,GAAc,UAAU,IAAA,CAAK,MAAA,CAAO,MAAM,KAAA,EAAO,OAAA,CAAQ,OAAO,CAAC,CAAA;AACvE,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,OAAO;AAAA,MACL,SAAA,EAAW,KAAA;AAAA,MACX,SAAS,OAAA,CAAQ,OAAA;AAAA,MACjB,YAAY,OAAA,CAAQ,OAAA;AAAA,MACpB,UAAU,OAAA,CAAQ,OAAA;AAAA,MAClB,KAAA,EAAO,EAAA;AAAA,MACP,OAAO,OAAA,CAAQ;AAAA,KACjB;AAAA,EACF;AAEA,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,IAAI,QAAQ,OAAA,CAAQ,OAAA;AAEpB,EAAA,OAAO,KAAA,GAAQ,OAAO,MAAA,EAAQ;AAC5B,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,OAAA,CAAQ,GAAA,EAAK,KAAK,CAAA;AACtC,IAAA,IAAI,OAAO,CAAA,EAAG;AACZ,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,MAAA,CAAO,UAAA,CAAW,MAAA,EAAQ,IAAI,CAAA,EAAG;AACnC,MAAA,MAAM,UAAA,GAAa,MAAA,CAAO,OAAA,CAAQ,KAAA,EAAO,OAAO,CAAC,CAAA;AACjD,MAAA,KAAA,GAAQ,UAAA,IAAc,CAAA,GAAI,UAAA,GAAa,CAAA,GAAI,MAAA,CAAO,MAAA;AAClD,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,MAAA,CAAO,IAAA,GAAO,CAAC,CAAA,KAAM,GAAA,EAAK;AAC5B,MAAA,MAAM,QAAA,GAAW,UAAA,CAAW,MAAA,EAAQ,IAAA,GAAO,CAAC,CAAA;AAC5C,MAAA,IAAI,WAAW,CAAA,EAAG;AAChB,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,WAAW,MAAA,CAAO,KAAA,CAAM,OAAO,CAAA,EAAG,QAAQ,EAAE,IAAA,EAAK;AACvD,MAAA,IAAI,QAAA,CAAS,WAAA,EAAY,KAAM,OAAA,CAAQ,aAAY,EAAG;AACpD,QAAA,KAAA,IAAS,CAAA;AACT,QAAA,IAAI,UAAU,CAAA,EAAG;AACf,UAAA,OAAO;AAAA,YACL,SAAA,EAAW,KAAA;AAAA,YACX,SAAS,OAAA,CAAQ,OAAA;AAAA,YACjB,UAAA,EAAY,IAAA;AAAA,YACZ,UAAU,QAAA,GAAW,CAAA;AAAA,YACrB,KAAA,EAAO,MAAA,CAAO,KAAA,CAAM,OAAA,CAAQ,SAAS,IAAI,CAAA;AAAA,YACzC,OAAO,OAAA,CAAQ;AAAA,WACjB;AAAA,QACF;AAAA,MACF;AAEA,MAAA,KAAA,GAAQ,QAAA,GAAW,CAAA;AACnB,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAS,cAAA,CAAe,MAAA,EAAQ,IAAI,CAAA;AAC1C,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,KAAA,GAAQ,IAAA,GAAO,CAAA;AACf,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,OAAO,GAAA,CAAI,WAAA,EAAY,KAAM,OAAA,CAAQ,aAAY,EAAG;AACtD,MAAA,MAAM,iBAAA,GAAoB,UAAU,IAAA,CAAK,MAAA,CAAO,MAAM,IAAA,EAAM,MAAA,CAAO,OAAO,CAAC,CAAA;AAC3E,MAAA,IAAI,CAAC,iBAAA,EAAmB;AACtB,QAAA,KAAA,IAAS,CAAA;AAAA,MACX;AAAA,IACF;AAEA,IAAA,KAAA,GAAQ,MAAA,CAAO,OAAA;AAAA,EACjB;AAEA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,qBAAA,CAAsB,QAAgB,OAAA,EAA6B;AAC1E,EAAA,MAAM,SAAqB,EAAC;AAC5B,EAAA,IAAI,KAAA,GAAQ,CAAA;AAEZ,EAAA,OAAO,KAAA,GAAQ,OAAO,MAAA,EAAQ;AAC5B,IAAA,MAAM,OAAO,MAAA,CAAO,OAAA,CAAQ,CAAA,CAAA,EAAI,OAAO,IAAI,KAAK,CAAA;AAChD,IAAA,IAAI,OAAO,CAAA,EAAG;AACZ,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,WAAW,IAAA,GAAO,CAAA,GAAI,MAAA,CAAO,IAAA,GAAO,CAAC,CAAA,GAAI,EAAA;AAC/C,IAAA,IAAI,QAAA,IAAY,gBAAA,CAAiB,IAAA,CAAK,QAAQ,CAAA,EAAG;AAC/C,MAAA,KAAA,GAAQ,IAAA,GAAO,QAAQ,MAAA,GAAS,CAAA;AAChC,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,KAAA,GAAQ,eAAA,CAAgB,MAAA,EAAQ,IAAA,EAAM,OAAO,CAAA;AACnD,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,KAAA,GAAQ,IAAA,GAAO,QAAQ,MAAA,GAAS,CAAA;AAChC,MAAA;AAAA,IACF;AAEA,IAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AACjB,IAAA,KAAA,GAAQ,KAAA,CAAM,QAAA;AAAA,EAChB;AAEA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,YAAA,CAAa,QAAgB,MAAA,EAAuD;AAC3F,EAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,IAAA,OAAO,OAAO,IAAA,EAAK;AAAA,EACrB;AAEA,EAAA,MAAM,OAAA,GAAU,CAAC,GAAG,MAAM,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,KAAA,GAAQ,CAAA,CAAE,KAAK,CAAA;AAC5D,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,IAAI,MAAA,GAAS,EAAA;AAEb,EAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,IAAA,MAAA,IAAU,MAAA,CAAO,KAAA,CAAM,MAAA,EAAQ,KAAA,CAAM,KAAK,CAAA;AAC1C,IAAA,MAAA,GAAS,KAAA,CAAM,GAAA;AAAA,EACjB;AAEA,EAAA,MAAA,IAAU,MAAA,CAAO,MAAM,MAAM,CAAA;AAC7B,EAAA,OAAO,OAAO,IAAA,EAAK;AACrB;AAEO,SAAS,eAAe,MAAA,EAAiC;AAC9D,EAAA,MAAM,YAAA,GAAe,qBAAA,CAAsB,MAAA,EAAQ,QAAQ,CAAA;AAC3D,EAAA,MAAM,WAAA,GAAc,qBAAA,CAAsB,MAAA,EAAQ,OAAO,CAAA;AAEzD,EAAA,MAAM,MAAA,GAAS,WAAA,CAAY,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,IACzC,OAAO,KAAA,CAAM,SAAA;AAAA,IACb,KAAK,KAAA,CAAM;AAAA,GACb,CAAE,CAAA;AAEF,EAAA,KAAA,MAAW,eAAe,YAAA,EAAc;AACtC,IAAA,MAAA,CAAO,IAAA,CAAK,EAAE,KAAA,EAAO,WAAA,CAAY,WAAW,GAAA,EAAK,WAAA,CAAY,UAAU,CAAA;AAAA,EACzE;AAEA,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,YAAA,CAAa,GAAA,CAAI,CAAC,UAAU,KAAA,CAAM,KAAA,CAAM,IAAA,EAAM,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,KAAK,MAAM,CAAA;AAAA,IACnF,QAAA,EAAU,YAAA,CAAa,MAAA,EAAQ,MAAM,CAAA;AAAA,IACrC,MAAA,EAAQ,WAAA,CAAY,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,MAClC,OAAA,EAAS,KAAA,CAAM,KAAA,CAAM,IAAA,EAAK;AAAA,MAC1B,OAAO,KAAA,CAAM;AAAA,KACf,CAAE;AAAA,GACJ;AACF;;;;AC/PA,IAAM,SAAA,uBAAgB,GAAA,CAAI;AACtB,EAAA,CAAC,GAAG,KAAM,CAAA;;AAEV,EAAA,CAAC,KAAK,IAAI,CAAA;AACV,EAAA,CAAC,KAAK,IAAI,CAAA;AACV,EAAA,CAAC,KAAK,GAAG,CAAA;AACT,EAAA,CAAC,KAAK,IAAI,CAAA;AACV,EAAA,CAAC,KAAK,IAAI,CAAA;AACV,EAAA,CAAC,KAAK,IAAI,CAAA;AACV,EAAA,CAAC,KAAK,IAAI,CAAA;AACV,EAAA,CAAC,KAAK,GAAG,CAAA;AACT,EAAA,CAAC,KAAK,IAAI,CAAA;AACV,EAAA,CAAC,KAAK,GAAG,CAAA;AACT,EAAA,CAAC,KAAK,IAAI,CAAA;AACV,EAAA,CAAC,KAAK,GAAG,CAAA;AACT,EAAA,CAAC,KAAK,GAAG,CAAA;AACT,EAAA,CAAC,KAAK,IAAI,CAAA;AACV,EAAA,CAAC,KAAK,IAAI,CAAA;AACV,EAAA,CAAC,KAAK,IAAI,CAAA;AACV,EAAA,CAAC,KAAK,IAAI,CAAA;AACV,EAAA,CAAC,KAAK,IAAI,CAAA;AACV,EAAA,CAAC,KAAK,IAAI,CAAA;AACV,EAAA,CAAC,KAAK,IAAI,CAAA;AACV,EAAA,CAAC,KAAK,GAAG,CAAA;AACT,EAAA,CAAC,KAAK,IAAI,CAAA;AACV,EAAA,CAAC,KAAK,GAAG,CAAA;AACT,EAAA,CAAC,KAAK,IAAI,CAAA;AACV,EAAA,CAAC,KAAK,GAAG,CAAA;AACT,EAAA,CAAC,KAAK,GAAG,CAAA;AACT,EAAA,CAAC,KAAK,GAAG;AACZ,CAAA,CAAA;AAKM,IAAM,aAAA;;AAET,EAAA,CAAA,EAAA,GAAA,OAAO,aAAA,MAAa,IAAA,IAAA,OAAA,MAAA,GAAA,EAAA,IACnB,CAAC,SAAA,KAA6B;AAC3B,IAAA,IAAI,MAAA,GAAS,EAAA;AAEb,IAAA,IAAI,YAAY,KAAA,EAAS;AACrB,MAAA,SAAA,IAAa,KAAA;AACb,MAAA,MAAA,IAAU,MAAA,CAAO,YAAA,CACX,SAAA,KAAc,EAAA,GAAM,OAAU,KAAO,CAAA;AAE3C,MAAA,SAAA,GAAY,QAAW,SAAA,GAAY,IAAA;AACvC,IAAA;AAEA,IAAA,MAAA,IAAU,MAAA,CAAO,aAAa,SAAS,CAAA;AACvC,IAAA,OAAO,MAAA;AACX,EAAA,CAAA;;AAOE,SAAU,iBAAiB,SAAA,EAAiB;;AAC9C,EAAA,IACK,SAAA,IAAa,KAAA,IAAW,SAAA,IAAa,KAAA,IACtC,YAAY,OAAA,EACd;AACE,IAAA,OAAO,KAAA;AACX,EAAA;AAEA,EAAA,OAAA,CAAO0F,GAAAA,GAAA,UAAU,GAAA,CAAI,SAAS,OAAC,IAAA,IAAAA,GAAAA,KAAA,SAAAA,GAAAA,GAAI,SAAA;AACvC;;;ACjEM,SAAU,aAAa,KAAA,EAAa;AACtC,EAAA,MAAM,MAAA;;AAEF,IAAA,OAAO,IAAA,KAAS,UAAA;;;AAGV,MAAA,IAAA,CAAK,KAAK;;;;AAGV,MAAA,OAAO,OAAO,IAAA,KAAS,UAAA;;AAErB,QAAA,MAAA,CAAO,IAAA,CAAK,KAAA,EAAO,QAAQ,CAAA,CAAE,SAAS,QAAQ;;;AAE9C,QAAA,IAAI,MAAA,CAAO,KAAA,EAAO,QAAQ,CAAA,CAAE,SAAS,QAAQ;;;;AAEzD,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,MAAA,GAAS,EAAC;AACpC,EAAA,MAAM,GAAA,GAAM,IAAI,WAAA,CAAY,UAAA,GAAa,CAAC,CAAA;AAE1C,EAAA,KAAA,IAAS,QAAQ,CAAA,EAAG,QAAA,GAAW,GAAG,KAAA,GAAQ,UAAA,EAAY,SAAS,CAAA,EAAG;AAC9D,IAAA,MAAM,EAAA,GAAK,MAAA,CAAO,UAAA,CAAW,KAAK,CAAA;AAClC,IAAA,MAAM,EAAA,GAAK,MAAA,CAAO,UAAA,CAAW,KAAA,GAAQ,CAAC,CAAA;AACtC,IAAA,GAAA,CAAI,QAAA,EAAU,CAAA,GAAI,EAAA,GAAM,EAAA,IAAM,CAAA;AAClC,EAAA;AAEA,EAAA,OAAO,GAAA;AACX;;;AC1BO,IAAM,cAAA,gCACT,08+BAA08+B,CAAA;;;ACDv8+B,IAAM,aAAA,gCACT,kEAAkE,CAAA;;;ACMtE,IAAY,YAAA;AAAZ,CAAA,SAAYC,aAAAA,EAAY;AACpB,EAAAA,aAAAA,CAAAA,aAAAA,CAAA,cAAA,CAAA,GAAA,KAAA,CAAA,GAAA,cAAA;AACA,EAAAA,aAAAA,CAAAA,aAAAA,CAAA,QAAA,CAAA,GAAA,IAAA,CAAA,GAAA,QAAA;AACA,EAAAA,aAAAA,CAAAA,aAAAA,CAAA,eAAA,CAAA,GAAA,IAAA,CAAA,GAAA,eAAA;AACA,EAAAA,aAAAA,CAAAA,aAAAA,CAAA,YAAA,CAAA,GAAA,GAAA,CAAA,GAAA,YAAA;AACJ,CAAA,EALY,YAAA,KAAA,YAAA,GAAY,EAAA,CAAA,CAAA;;;ACLxB,IAAW,SAAA;AAAX,CAAA,SAAWC,UAAAA,EAAS;AAChB,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAA,KAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,MAAA,CAAA,GAAA,EAAA,CAAA,GAAA,MAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,QAAA,CAAA,GAAA,EAAA,CAAA,GAAA,QAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,MAAA,CAAA,GAAA,EAAA,CAAA,GAAA,MAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,MAAA,CAAA,GAAA,EAAA,CAAA,GAAA,MAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,SAAA,CAAA,GAAA,EAAA,CAAA,GAAA,SAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,SAAA,CAAA,GAAA,GAAA,CAAA,GAAA,SAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,SAAA,CAAA,GAAA,GAAA,CAAA,GAAA,SAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,SAAA,CAAA,GAAA,GAAA,CAAA,GAAA,SAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,SAAA,CAAA,GAAA,EAAA,CAAA,GAAA,SAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,SAAA,CAAA,GAAA,EAAA,CAAA,GAAA,SAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,SAAA,CAAA,GAAA,EAAA,CAAA,GAAA,SAAA;AACJ,CAAA,EAbW,SAAA,KAAA,SAAA,GAAS,EAAA,CAAA,CAAA;AAgBpB,IAAM,YAAA,GAAe,EAAA;AAErB,SAAS,SAASvF,KAAAA,EAAY;AAC1B,EAAA,OAAOA,KAAAA,IAAQ,SAAA,CAAU,IAAA,IAAQA,KAAAA,IAAQ,SAAA,CAAU,IAAA;AACvD;AAEA,SAAS,uBAAuBA,KAAAA,EAAY;AACxC,EAAA,OACKA,KAAAA,IAAQ,SAAA,CAAU,OAAA,IAAWA,KAAAA,IAAQ,SAAA,CAAU,WAC/CA,KAAAA,IAAQ,SAAA,CAAU,OAAA,IAAWA,KAAAA,IAAQ,SAAA,CAAU,OAAA;AAExD;AAEA,SAAS,oBAAoBA,KAAAA,EAAY;AACrC,EAAA,OACKA,KAAAA,IAAQ,SAAA,CAAU,OAAA,IAAWA,KAAAA,IAAQ,SAAA,CAAU,OAAA,IAC/CA,KAAAA,IAAQ,SAAA,CAAU,OAAA,IAAWA,KAAAA,IAAQ,SAAA,CAAU,OAAA,IAChD,SAASA,KAAI,CAAA;AAErB;AAQA,SAAS,8BAA8BA,KAAAA,EAAY;AAC/C,EAAA,OAAOA,KAAAA,KAAS,SAAA,CAAU,MAAA,IAAU,mBAAA,CAAoBA,KAAI,CAAA;AAChE;AAEA,IAAW,kBAAA;AAAX,CAAA,SAAWwF,mBAAAA,EAAkB;AACzB,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,aAAA,CAAA,GAAA,CAAA,CAAA,GAAA,aAAA;AACA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,cAAA,CAAA,GAAA,CAAA,CAAA,GAAA,cAAA;AACA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,gBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,gBAAA;AACA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAA;AACA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,aAAA,CAAA,GAAA,CAAA,CAAA,GAAA,aAAA;AACJ,CAAA,EANW,kBAAA,KAAA,kBAAA,GAAkB,EAAA,CAAA,CAAA;AAQ7B,IAAY,YAAA;AAAZ,CAAA,SAAYC,aAAAA,EAAY;AAEpB,EAAAA,aAAAA,CAAAA,aAAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAA;AAEA,EAAAA,aAAAA,CAAAA,aAAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAA;AAEA,EAAAA,aAAAA,CAAAA,aAAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAA;AACJ,CAAA,EAPY,YAAA,KAAA,YAAA,GAAY,EAAA,CAAA,CAAA;AAuBlB,IAAO,gBAAP,MAAoB;EACtB,WAAA,CAGqB,UAAA,EAUA,eAEA,MAAA,EAAwC;AAZxC,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AAUA,IAAA,IAAA,CAAA,aAAA,GAAA,aAAA;AAEA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAIb,IAAA,IAAA,CAAA,QAAQ,kBAAA,CAAmB,WAAA;AAE3B,IAAA,IAAA,CAAA,QAAA,GAAW,CAAA;AAOX,IAAA,IAAA,CAAA,MAAA,GAAS,CAAA;AAGT,IAAA,IAAA,CAAA,SAAA,GAAY,CAAA;AAEZ,IAAA,IAAA,CAAA,MAAA,GAAS,CAAA;AAET,IAAA,IAAA,CAAA,aAAa,YAAA,CAAa,MAAA;AAE1B,IAAA,IAAA,CAAA,WAAA,GAAc,CAAA;AArBnB,EAAA;;AAwBH,EAAA,WAAA,CAAY,UAAA,EAAwB;AAChC,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,IAAA,IAAA,CAAK,QAAQ,kBAAA,CAAmB,WAAA;AAChC,IAAA,IAAA,CAAK,MAAA,GAAS,CAAA;AACd,IAAA,IAAA,CAAK,SAAA,GAAY,CAAA;AACjB,IAAA,IAAA,CAAK,MAAA,GAAS,CAAA;AACd,IAAA,IAAA,CAAK,QAAA,GAAW,CAAA;AAChB,IAAA,IAAA,CAAK,WAAA,GAAc,CAAA;AACvB,EAAA;;;;;;;;;;;;AAaA,EAAA,KAAA,CAAM,OAAe,MAAA,EAAc;AAC/B,IAAA,QAAQ,KAAK,KAAA;AACT,MAAA,KAAK,mBAAmB,WAAA,EAAa;AACjC,QAAA,IAAI,KAAA,CAAM,UAAA,CAAW,MAAM,CAAA,KAAM,UAAU,GAAA,EAAK;AAC5C,UAAA,IAAA,CAAK,QAAQ,kBAAA,CAAmB,YAAA;AAChC,UAAA,IAAA,CAAK,QAAA,IAAY,CAAA;AACjB,UAAA,OAAO,IAAA,CAAK,iBAAA,CAAkB,KAAA,EAAO,MAAA,GAAS,CAAC,CAAA;AACnD,QAAA;AACA,QAAA,IAAA,CAAK,QAAQ,kBAAA,CAAmB,WAAA;AAChC,QAAA,OAAO,IAAA,CAAK,gBAAA,CAAiB,KAAA,EAAO,MAAM,CAAA;AAC9C,MAAA;AAEA,MAAA,KAAK,mBAAmB,YAAA,EAAc;AAClC,QAAA,OAAO,IAAA,CAAK,iBAAA,CAAkB,KAAA,EAAO,MAAM,CAAA;AAC/C,MAAA;AAEA,MAAA,KAAK,mBAAmB,cAAA,EAAgB;AACpC,QAAA,OAAO,IAAA,CAAK,mBAAA,CAAoB,KAAA,EAAO,MAAM,CAAA;AACjD,MAAA;AAEA,MAAA,KAAK,mBAAmB,UAAA,EAAY;AAChC,QAAA,OAAO,IAAA,CAAK,eAAA,CAAgB,KAAA,EAAO,MAAM,CAAA;AAC7C,MAAA;AAEA,MAAA,KAAK,mBAAmB,WAAA,EAAa;AACjC,QAAA,OAAO,IAAA,CAAK,gBAAA,CAAiB,KAAA,EAAO,MAAM,CAAA;AAC9C,MAAA;AACJ;AACJ,EAAA;;;;;;;;;;AAWQ,EAAA,iBAAA,CAAkB,OAAe,MAAA,EAAc;AACnD,IAAA,IAAI,MAAA,IAAU,MAAM,MAAA,EAAQ;AACxB,MAAA,OAAO,EAAA;AACX,IAAA;AAEA,IAAA,IAAA,CAAK,MAAM,UAAA,CAAW,MAAM,CAAA,GAAI,YAAA,MAAkB,UAAU,OAAA,EAAS;AACjE,MAAA,IAAA,CAAK,QAAQ,kBAAA,CAAmB,UAAA;AAChC,MAAA,IAAA,CAAK,QAAA,IAAY,CAAA;AACjB,MAAA,OAAO,IAAA,CAAK,eAAA,CAAgB,KAAA,EAAO,MAAA,GAAS,CAAC,CAAA;AACjD,IAAA;AAEA,IAAA,IAAA,CAAK,QAAQ,kBAAA,CAAmB,cAAA;AAChC,IAAA,OAAO,IAAA,CAAK,mBAAA,CAAoB,KAAA,EAAO,MAAM,CAAA;AACjD,EAAA;;;;;;;;;;AAWQ,EAAA,eAAA,CAAgB,OAAe,MAAA,EAAc;AACjD,IAAA,OAAO,MAAA,GAAS,MAAM,MAAA,EAAQ;AAC1B,MAAA,MAAM,IAAA,GAAO,KAAA,CAAM,UAAA,CAAW,MAAM,CAAA;AACpC,MAAA,IAAI,QAAA,CAAS,IAAI,CAAA,IAAK,sBAAA,CAAuB,IAAI,CAAA,EAAG;AAEhD,QAAA,MAAM,KAAA,GACF,IAAA,IAAQ,SAAA,CAAU,IAAA,GACZ,IAAA,GAAO,UAAU,IAAA,GAAA,CAChB,IAAA,GAAO,YAAA,IAAgB,SAAA,CAAU,OAAA,GAAU,EAAA;AACtD,QAAA,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,MAAA,GAAS,EAAA,GAAK,KAAA;AACjC,QAAA,IAAA,CAAK,QAAA,EAAA;AACL,QAAA,MAAA,EAAA;MACJ,CAAA,MAAO;AACH,QAAA,OAAO,IAAA,CAAK,iBAAA,CAAkB,IAAA,EAAM,CAAC,CAAA;AACzC,MAAA;AACJ,IAAA;AACA,IAAA,OAAO,EAAA;AACX,EAAA;;;;;;;;;;AAWQ,EAAA,mBAAA,CAAoB,OAAe,MAAA,EAAc;AACrD,IAAA,OAAO,MAAA,GAAS,MAAM,MAAA,EAAQ;AAC1B,MAAA,MAAM,IAAA,GAAO,KAAA,CAAM,UAAA,CAAW,MAAM,CAAA;AACpC,MAAA,IAAI,QAAA,CAAS,IAAI,CAAA,EAAG;AAChB,QAAA,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,MAAA,GAAS,EAAA,IAAM,OAAO,SAAA,CAAU,IAAA,CAAA;AACnD,QAAA,IAAA,CAAK,QAAA,EAAA;AACL,QAAA,MAAA,EAAA;MACJ,CAAA,MAAO;AACH,QAAA,OAAO,IAAA,CAAK,iBAAA,CAAkB,IAAA,EAAM,CAAC,CAAA;AACzC,MAAA;AACJ,IAAA;AACA,IAAA,OAAO,EAAA;AACX,EAAA;;;;;;;;;;;;;;AAeQ,EAAA,iBAAA,CAAkB,QAAgB,cAAA,EAAsB;;AAE5D,IAAA,IAAI,IAAA,CAAK,YAAY,cAAA,EAAgB;AACjC,MAAA,CAAAJ,GAAAA,GAAA,IAAA,CAAK,MAAA,MAAM,IAAA,IAAAA,GAAAA,KAAA,SAAA,MAAA,GAAAA,GAAAA,CAAE,0CAAA,CACT,IAAA,CAAK,QAAQ,CAAA;AAEjB,MAAA,OAAO,CAAA;AACX,IAAA;AAGA,IAAA,IAAI,MAAA,KAAW,UAAU,IAAA,EAAM;AAC3B,MAAA,IAAA,CAAK,QAAA,IAAY,CAAA;IACrB,CAAA,MAAA,IAAW,IAAA,CAAK,UAAA,KAAe,YAAA,CAAa,MAAA,EAAQ;AAChD,MAAA,OAAO,CAAA;AACX,IAAA;AAEA,IAAA,IAAA,CAAK,cAAc,gBAAA,CAAiB,IAAA,CAAK,MAAM,CAAA,EAAG,KAAK,QAAQ,CAAA;AAE/D,IAAA,IAAI,KAAK,MAAA,EAAQ;AACb,MAAA,IAAI,MAAA,KAAW,UAAU,IAAA,EAAM;AAC3B,QAAA,IAAA,CAAK,OAAO,uCAAA,EAAuC;AACvD,MAAA;AAEA,MAAA,IAAA,CAAK,MAAA,CAAO,iCAAA,CAAkC,IAAA,CAAK,MAAM,CAAA;AAC7D,IAAA;AAEA,IAAA,OAAO,IAAA,CAAK,QAAA;AAChB,EAAA;;;;;;;;;;AAWQ,EAAA,gBAAA,CAAiB,OAAe,MAAA,EAAc;AAClD,IAAA,MAAM,EAAE,YAAU,GAAK,IAAA;AACvB,IAAA,IAAI,OAAA,GAAU,UAAA,CAAW,IAAA,CAAK,SAAS,CAAA;AAEvC,IAAA,IAAI,WAAA,GAAA,CAAe,OAAA,GAAU,YAAA,CAAa,YAAA,KAAiB,EAAA;AAE3D,IAAA,OAAO,MAAA,GAAS,MAAM,MAAA,EAAQ;AAE1B,MAAA,IAAI,WAAA,KAAgB,CAAA,IAAA,CAAM,OAAA,GAAU,YAAA,CAAa,YAAY,CAAA,EAAG;AAC5D,QAAA,MAAM,SAAA,GAAA,CACD,OAAA,GAAU,YAAA,CAAa,aAAA,KAAkB,CAAA;AAG9C,QAAA,IAAI,IAAA,CAAK,gBAAgB,CAAA,EAAG;AACxB,UAAA,MAAM,SAAA,GAAY,UAAU,YAAA,CAAa,UAAA;AACzC,UAAA,IAAI,KAAA,CAAM,UAAA,CAAW,MAAM,CAAA,KAAM,SAAA,EAAW;AACxC,YAAA,OAAO,IAAA,CAAK,MAAA,KAAW,CAAA,GACjB,CAAA,GACA,KAAK,4BAAA,EAA4B;AAC3C,UAAA;AACA,UAAA,MAAA,EAAA;AACA,UAAA,IAAA,CAAK,MAAA,EAAA;AACL,UAAA,IAAA,CAAK,WAAA,EAAA;AACT,QAAA;AAGA,QAAA,OAAO,IAAA,CAAK,cAAc,SAAA,EAAW;AACjC,UAAA,IAAI,MAAA,IAAU,MAAM,MAAA,EAAQ;AACxB,YAAA,OAAO,EAAA;AACX,UAAA;AAEA,UAAA,MAAM,iBAAA,GAAoB,KAAK,WAAA,GAAc,CAAA;AAC7C,UAAA,MAAM,aACF,UAAA,CACI,IAAA,CAAK,SAAA,GAAY,CAAA,IAAK,qBAAqB,CAAA,CAAE,CAAA;AAErD,UAAA,MAAM,eACF,iBAAA,GAAoB,CAAA,KAAM,IACpB,UAAA,GAAa,GAAA,GACZ,cAAc,CAAA,GAAK,GAAA;AAE9B,UAAA,IAAI,KAAA,CAAM,UAAA,CAAW,MAAM,CAAA,KAAM,YAAA,EAAc;AAC3C,YAAA,IAAA,CAAK,WAAA,GAAc,CAAA;AACnB,YAAA,OAAO,IAAA,CAAK,MAAA,KAAW,CAAA,GACjB,CAAA,GACA,KAAK,4BAAA,EAA4B;AAC3C,UAAA;AACA,UAAA,MAAA,EAAA;AACA,UAAA,IAAA,CAAK,MAAA,EAAA;AACL,UAAA,IAAA,CAAK,WAAA,EAAA;AACT,QAAA;AAEA,QAAA,IAAA,CAAK,WAAA,GAAc,CAAA;AACnB,QAAA,IAAA,CAAK,SAAA,IAAa,KAAK,SAAA,IAAa,CAAA,CAAA;AACpC,QAAA,OAAA,GAAU,UAAA,CAAW,KAAK,SAAS,CAAA;AACnC,QAAA,WAAA,GAAA,CAAe,OAAA,GAAU,aAAa,YAAA,KAAiB,EAAA;AAC3D,MAAA;AAEA,MAAA,IAAI,UAAU,KAAA,CAAM,MAAA;AAAQ,QAAA;AAE5B,MAAA,MAAM,IAAA,GAAO,KAAA,CAAM,UAAA,CAAW,MAAM,CAAA;AASpC,MAAA,IACI,IAAA,KAAS,UAAU,IAAA,IACnB,WAAA,KAAgB,MACf,OAAA,GAAU,YAAA,CAAa,YAAY,CAAA,EACtC;AACE,QAAA,OAAO,IAAA,CAAK,oBACR,IAAA,CAAK,SAAA,EACL,aACA,IAAA,CAAK,QAAA,GAAW,KAAK,MAAM,CAAA;AAEnC,MAAA;AAEA,MAAA,IAAA,CAAK,SAAA,GAAY,eAAA,CACb,UAAA,EACA,OAAA,EACA,IAAA,CAAK,SAAA,GAAY,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,WAAW,CAAA,EACxC,IAAI,CAAA;AAGR,MAAA,IAAI,IAAA,CAAK,YAAY,CAAA,EAAG;AACpB,QAAA,OAAO,KAAK,MAAA,KAAW,CAAA;AAElB,QAAA,IAAA,CAAK,eAAe,YAAA,CAAa,SAAA;SAE7B,WAAA,KAAgB,CAAA;AAEb,QAAA,6BAAA,CAA8B,IAAI,CAAA,CAAA,GACxC,CAAA,GACA,IAAA,CAAK,4BAAA,EAA4B;AAC3C,MAAA;AAEA,MAAA,OAAA,GAAU,UAAA,CAAW,KAAK,SAAS,CAAA;AACnC,MAAA,WAAA,GAAA,CAAe,OAAA,GAAU,aAAa,YAAA,KAAiB,EAAA;AAGvD,MAAA,IAAI,gBAAgB,CAAA,EAAG;AAEnB,QAAA,IAAI,IAAA,KAAS,UAAU,IAAA,EAAM;AACzB,UAAA,OAAO,IAAA,CAAK,oBACR,IAAA,CAAK,SAAA,EACL,aACA,IAAA,CAAK,QAAA,GAAW,KAAK,MAAM,CAAA;AAEnC,QAAA;AAGA,QAAA,IACI,KAAK,UAAA,KAAe,YAAA,CAAa,WAChC,OAAA,GAAU,YAAA,CAAa,YAAY,CAAA,EACtC;AACE,UAAA,IAAA,CAAK,SAAS,IAAA,CAAK,SAAA;AACnB,UAAA,IAAA,CAAK,YAAY,IAAA,CAAK,MAAA;AACtB,UAAA,IAAA,CAAK,MAAA,GAAS,CAAA;AAClB,QAAA;AACJ,MAAA;AAEA,MAAA,MAAA,EAAA;AACA,MAAA,IAAA,CAAK,MAAA,EAAA;AACT,IAAA;AAEA,IAAA,OAAO,EAAA;AACX,EAAA;;;;;;EAOQ,4BAAA,GAA4B;;AAChC,IAAA,MAAM,EAAE,MAAA,EAAQ,UAAA,EAAU,GAAK,IAAA;AAE/B,IAAA,MAAM,WAAA,GAAA,CACD,UAAA,CAAW,MAAM,CAAA,GAAI,aAAa,YAAA,KAAiB,EAAA;AAExD,IAAA,IAAA,CAAK,mBAAA,CAAoB,MAAA,EAAQ,WAAA,EAAa,IAAA,CAAK,QAAQ,CAAA;AAC3D,IAAA,CAAAA,GAAAA,GAAA,KAAK,MAAA,MAAM,IAAA,IAAAA,QAAA,MAAA,GAAA,MAAA,GAAAA,IAAE,uCAAA,EAAuC;AAEpD,IAAA,OAAO,IAAA,CAAK,QAAA;AAChB,EAAA;;;;;;;;;;EAWQ,mBAAA,CACJ,MAAA,EACA,aACA,QAAA,EAAgB;AAEhB,IAAA,MAAM,EAAE,YAAU,GAAK,IAAA;AAEvB,IAAA,IAAA,CAAK,aAAA,CACD,WAAA,KAAgB,CAAA,GACV,UAAA,CAAW,MAAM,CAAA,GACb,EAAE,YAAA,CAAa,YAAA,GAAe,aAAa,MAAA,CAAA,GAC/C,UAAA,CAAW,MAAA,GAAS,CAAC,GAC3B,QAAQ,CAAA;AAEZ,IAAA,IAAI,gBAAgB,CAAA,EAAG;AAEnB,MAAA,IAAA,CAAK,aAAA,CAAc,UAAA,CAAW,MAAA,GAAS,CAAC,GAAG,QAAQ,CAAA;AACvD,IAAA;AAEA,IAAA,OAAO,QAAA;AACX,EAAA;;;;;;;;EASA,GAAA,GAAG;;AACC,IAAA,QAAQ,KAAK,KAAA;AACT,MAAA,KAAK,mBAAmB,WAAA,EAAa;AAEjC,QAAA,OAAO,IAAA,CAAK,MAAA,KAAW,CAAA,KAClB,IAAA,CAAK,UAAA,KAAe,YAAA,CAAa,SAAA,IAC9B,IAAA,CAAK,MAAA,KAAW,IAAA,CAAK,SAAA,CAAA,GACvB,IAAA,CAAK,8BAA4B,GACjC,CAAA;AACV,MAAA;;AAEA,MAAA,KAAK,mBAAmB,cAAA,EAAgB;AACpC,QAAA,OAAO,IAAA,CAAK,iBAAA,CAAkB,CAAA,EAAG,CAAC,CAAA;AACtC,MAAA;AACA,MAAA,KAAK,mBAAmB,UAAA,EAAY;AAChC,QAAA,OAAO,IAAA,CAAK,iBAAA,CAAkB,CAAA,EAAG,CAAC,CAAA;AACtC,MAAA;AACA,MAAA,KAAK,mBAAmB,YAAA,EAAc;AAClC,QAAA,CAAAA,GAAAA,GAAA,IAAA,CAAK,MAAA,MAAM,IAAA,IAAAA,GAAAA,KAAA,SAAA,MAAA,GAAAA,GAAAA,CAAE,0CAAA,CACT,IAAA,CAAK,QAAQ,CAAA;AAEjB,QAAA,OAAO,CAAA;AACX,MAAA;AACA,MAAA,KAAK,mBAAmB,WAAA,EAAa;AAEjC,QAAA,OAAO,CAAA;AACX,MAAA;AACJ;AACJ,EAAA;;AA+DE,SAAU,eAAA,CACZ,UAAA,EACA,OAAA,EACA,SAAA,EACA,IAAA,EAAY;AAEZ,EAAA,MAAM,WAAA,GAAA,CAAe,OAAA,GAAU,YAAA,CAAa,aAAA,KAAkB,CAAA;AAC9D,EAAA,MAAM,UAAA,GAAa,UAAU,YAAA,CAAa,UAAA;AAG1C,EAAA,IAAI,gBAAgB,CAAA,EAAG;AACnB,IAAA,OAAO,UAAA,KAAe,CAAA,IAAK,IAAA,KAAS,UAAA,GAAa,SAAA,GAAY,EAAA;AACjE,EAAA;AAGA,EAAA,IAAI,UAAA,EAAY;AACZ,IAAA,MAAM,QAAQ,IAAA,GAAO,UAAA;AAErB,IAAA,OAAO,KAAA,GAAQ,KAAK,KAAA,IAAS,WAAA,GACvB,KACA,UAAA,CAAW,SAAA,GAAY,KAAK,CAAA,GAAI,CAAA;AAC1C,EAAA;AAGA,EAAA,MAAM,cAAA,GAAkB,cAAc,CAAA,IAAM,CAAA;AAM5C,EAAA,IAAI,EAAA,GAAK,CAAA;AACT,EAAA,IAAI,KAAK,WAAA,GAAc,CAAA;AAEvB,EAAA,OAAO,MAAM,EAAA,EAAI;AACb,IAAA,MAAM,GAAA,GAAO,KAAK,EAAA,KAAQ,CAAA;AAC1B,IAAA,MAAM,OAAO,GAAA,IAAO,CAAA;AACpB,IAAA,MAAM,MAAA,GAAS,UAAA,CAAW,SAAA,GAAY,IAAI,CAAA;AAC1C,IAAA,MAAM,MAAA,GAAU,MAAA,IAAA,CAAY,GAAA,GAAM,CAAA,IAAK,CAAA,GAAM,GAAA;AAE7C,IAAA,IAAI,SAAS,IAAA,EAAM;AACf,MAAA,EAAA,GAAK,GAAA,GAAM,CAAA;AACf,IAAA,CAAA,MAAA,IAAW,SAAS,IAAA,EAAM;AACtB,MAAA,EAAA,GAAK,GAAA,GAAM,CAAA;IACf,CAAA,MAAO;AACH,MAAA,OAAO,UAAA,CAAW,SAAA,GAAY,cAAA,GAAiB,GAAG,CAAA;AACtD,IAAA;AACJ,EAAA;AAEA,EAAA,OAAO,EAAA;AACX;;;AC7mBA,IAAWE,UAAAA;AAAX,CAAA,SAAWA,UAAAA,EAAS;AAChB,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,SAAA,CAAA,GAAA,EAAA,CAAA,GAAA,SAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,UAAA,CAAA,GAAA,EAAA,CAAA,GAAA,UAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,gBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,gBAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,OAAA,CAAA,GAAA,EAAA,CAAA,GAAA,OAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,iBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,iBAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,QAAA,CAAA,GAAA,EAAA,CAAA,GAAA,QAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAA,KAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,aAAA,CAAA,GAAA,EAAA,CAAA,GAAA,aAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,aAAA,CAAA,GAAA,EAAA,CAAA,GAAA,aAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,MAAA,CAAA,GAAA,EAAA,CAAA,GAAA,MAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,OAAA,CAAA,GAAA,EAAA,CAAA,GAAA,OAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,MAAA,CAAA,GAAA,EAAA,CAAA,GAAA,MAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,MAAA,CAAA,GAAA,EAAA,CAAA,GAAA,MAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,MAAA,CAAA,GAAA,EAAA,CAAA,GAAA,MAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,IAAA,CAAA,GAAA,EAAA,CAAA,GAAA,IAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,IAAA,CAAA,GAAA,EAAA,CAAA,GAAA,IAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,IAAA,CAAA,GAAA,EAAA,CAAA,GAAA,IAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,cAAA,CAAA,GAAA,EAAA,CAAA,GAAA,cAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,QAAA,CAAA,GAAA,EAAA,CAAA,GAAA,QAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,QAAA,CAAA,GAAA,EAAA,CAAA,GAAA,QAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,QAAA,CAAA,GAAA,EAAA,CAAA,GAAA,QAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,QAAA,CAAA,GAAA,GAAA,CAAA,GAAA,QAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,QAAA,CAAA,GAAA,EAAA,CAAA,GAAA,QAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,QAAA,CAAA,GAAA,GAAA,CAAA,GAAA,QAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,QAAA,CAAA,GAAA,GAAA,CAAA,GAAA,QAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,sBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,sBAAA;AACJ,CAAA,EA5BWA,UAAAA,KAAAA,UAAAA,GAAS,EAAA,CAAA,CAAA;AA+BpB,IAAW,KAAA;AAAX,CAAA,SAAWG,MAAAA,EAAK;AACZ,EAAAA,MAAAA,CAAAA,MAAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAA;AACA,EAAAA,MAAAA,CAAAA,MAAAA,CAAA,eAAA,CAAA,GAAA,CAAA,CAAA,GAAA,eAAA;AACA,EAAAA,MAAAA,CAAAA,MAAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAA;AACA,EAAAA,MAAAA,CAAAA,MAAAA,CAAA,kBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,kBAAA;AACA,EAAAA,MAAAA,CAAAA,MAAAA,CAAA,sBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,sBAAA;AACA,EAAAA,MAAAA,CAAAA,MAAAA,CAAA,kBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,kBAAA;AACA,EAAAA,MAAAA,CAAAA,MAAAA,CAAA,qBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,qBAAA;AAGA,EAAAA,MAAAA,CAAAA,MAAAA,CAAA,qBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,qBAAA;AACA,EAAAA,MAAAA,CAAAA,MAAAA,CAAA,iBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,iBAAA;AACA,EAAAA,MAAAA,CAAAA,MAAAA,CAAA,oBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,oBAAA;AACA,EAAAA,MAAAA,CAAAA,MAAAA,CAAA,sBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,sBAAA;AACA,EAAAA,MAAAA,CAAAA,MAAAA,CAAA,oBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,oBAAA;AACA,EAAAA,MAAAA,CAAAA,MAAAA,CAAA,oBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,oBAAA;AACA,EAAAA,MAAAA,CAAAA,MAAAA,CAAA,oBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,oBAAA;AAGA,EAAAA,MAAAA,CAAAA,MAAAA,CAAA,mBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,mBAAA;AACA,EAAAA,MAAAA,CAAAA,MAAAA,CAAA,eAAA,CAAA,GAAA,EAAA,CAAA,GAAA,eAAA;AAGA,EAAAA,MAAAA,CAAAA,MAAAA,CAAA,yBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,yBAAA;AAGA,EAAAA,MAAAA,CAAAA,MAAAA,CAAA,eAAA,CAAA,GAAA,EAAA,CAAA,GAAA,eAAA;AACA,EAAAA,MAAAA,CAAAA,MAAAA,CAAA,eAAA,CAAA,GAAA,EAAA,CAAA,GAAA,eAAA;AACA,EAAAA,MAAAA,CAAAA,MAAAA,CAAA,kBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,kBAAA;AACA,EAAAA,MAAAA,CAAAA,MAAAA,CAAA,eAAA,CAAA,GAAA,EAAA,CAAA,GAAA,eAAA;AAGA,EAAAA,MAAAA,CAAAA,MAAAA,CAAA,gBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,gBAAA;AACA,EAAAA,MAAAA,CAAAA,MAAAA,CAAA,gBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,gBAAA;AACA,EAAAA,MAAAA,CAAAA,MAAAA,CAAA,sBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,sBAAA;AACA,EAAAA,MAAAA,CAAAA,MAAAA,CAAA,cAAA,CAAA,GAAA,EAAA,CAAA,GAAA,cAAA;AAEA,EAAAA,MAAAA,CAAAA,MAAAA,CAAA,UAAA,CAAA,GAAA,EAAA,CAAA,GAAA,UAAA;AACJ,CAAA,EAtCW,KAAA,KAAA,KAAA,GAAK,EAAA,CAAA,CAAA;AAwChB,SAASC,cAAa,CAAA,EAAS;AAC3B,EAAA,OACI,CAAA,KAAMJ,UAAAA,CAAU,KAAA,IAChB,CAAA,KAAMA,UAAAA,CAAU,OAAA,IAChB,CAAA,KAAMA,UAAAA,CAAU,GAAA,IAChB,CAAA,KAAMA,UAAAA,CAAU,QAAA,IAChB,MAAMA,UAAAA,CAAU,cAAA;AAExB;AAEA,SAAS,kBAAkB,CAAA,EAAS;AAChC,EAAA,OAAO,MAAMA,UAAAA,CAAU,KAAA,IAAS,MAAMA,UAAAA,CAAU,EAAA,IAAMI,cAAa,CAAC,CAAA;AACxE;AAEA,SAAS,aAAa,CAAA,EAAS;AAC3B,EAAA,OACK,CAAA,IAAKJ,UAAAA,CAAU,MAAA,IAAU,CAAA,IAAKA,UAAAA,CAAU,UACxC,CAAA,IAAKA,UAAAA,CAAU,MAAA,IAAU,CAAA,IAAKA,UAAAA,CAAU,MAAA;AAEjD;AAEA,IAAY,SAAA;AAAZ,CAAA,SAAYK,UAAAA,EAAS;AACjB,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAA;AACJ,CAAA,EALY,SAAA,KAAA,SAAA,GAAS,EAAA,CAAA,CAAA;AA+BrB,IAAM,SAAA,GAAY;EACd,KAAA,EAAO,IAAI,WAAW,CAAC,EAAA,EAAM,IAAM,EAAA,EAAM,EAAA,EAAM,EAAA,EAAM,EAAI,CAAC,CAAA;;AAC1D,EAAA,QAAA,EAAU,IAAI,UAAA,CAAW,CAAC,EAAA,EAAM,EAAA,EAAM,EAAI,CAAC,CAAA;;AAC3C,EAAA,UAAA,EAAY,IAAI,UAAA,CAAW,CAAC,EAAA,EAAM,EAAA,EAAM,EAAI,CAAC,CAAA;;EAC7C,SAAA,EAAW,IAAI,UAAA,CAAW,CAAC,EAAA,EAAM,EAAA,EAAM,GAAA,EAAM,EAAA,EAAM,GAAA,EAAM,GAAA,EAAM,GAAA,EAAM,GAAI,CAAC,CAAA;;EAC1E,QAAA,EAAU,IAAI,UAAA,CAAW,CAAC,EAAA,EAAM,EAAA,EAAM,KAAM,GAAA,EAAM,GAAA,EAAM,GAAA,EAAM,GAAI,CAAC,CAAA;;EACnE,QAAA,EAAU,IAAI,UAAA,CAAW,CAAC,EAAA,EAAM,EAAA,EAAM,KAAM,GAAA,EAAM,GAAA,EAAM,GAAA,EAAM,GAAI,CAAC,CAAA;;AACnE,EAAA,WAAA,EAAa,IAAI,UAAA,CAAW;AACxB,IAAA,EAAA;AAAM,IAAA,EAAA;AAAM,IAAA,GAAA;AAAM,IAAA,GAAA;AAAM,IAAA,GAAA;AAAM,IAAA,GAAA;AAAM,IAAA,EAAA;AAAM,IAAA,GAAA;AAAM,IAAA,GAAA;AAAM,IAAA;AACzD,GAAA,CAAA;;EACD,MAAA,EAAQ,IAAI,WAAW,CAAC,EAAA,EAAM,IAAM,GAAA,EAAM,GAAA,EAAM,GAAI,CAAC;;;AAGzD,IAAqB,YAArB,MAA8B;AAwB1B,EAAA,WAAA,CACI,EACI,OAAA,GAAU,KAAA,EACV,cAAA,GAAiB,IAAA,IAEJ,GAAA,EAAc;AAAd,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AA3Bb,IAAA,IAAA,CAAA,QAAQ,KAAA,CAAM,IAAA;AAEd,IAAA,IAAA,CAAA,MAAA,GAAS,EAAA;AAET,IAAA,IAAA,CAAA,YAAA,GAAe,CAAA;AAEf,IAAA,IAAA,CAAA,KAAA,GAAQ,CAAA;AAER,IAAA,IAAA,CAAA,WAAA,GAAc,CAAA;AAEd,IAAA,IAAA,CAAA,YAAY,KAAA,CAAM,IAAA;AAElB,IAAA,IAAA,CAAA,SAAA,GAAY,KAAA;AAEb,IAAA,IAAA,CAAA,OAAA,GAAU,IAAA;AAET,IAAA,IAAA,CAAA,MAAA,GAAS,CAAA;AAoET,IAAA,IAAA,CAAA,eAAA,GAA8B,MAAA;AAC9B,IAAA,IAAA,CAAA,aAAA,GAAgB,CAAA;AAxDpB,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,IAAA,CAAK,cAAA,GAAiB,cAAA;AACtB,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAI,aAAA,CACrB,OAAA,GAAU,aAAA,GAAgB,cAAA,EAC1B,CAAC,EAAA,EAAI,QAAA,KAAa,IAAA,CAAK,aAAA,CAAc,EAAA,EAAI,QAAQ,CAAC,CAAA;AAE1D,EAAA;EAEO,KAAA,GAAK;AACR,IAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,IAAA;AACnB,IAAA,IAAA,CAAK,MAAA,GAAS,EAAA;AACd,IAAA,IAAA,CAAK,YAAA,GAAe,CAAA;AACpB,IAAA,IAAA,CAAK,KAAA,GAAQ,CAAA;AACb,IAAA,IAAA,CAAK,YAAY,KAAA,CAAM,IAAA;AACvB,IAAA,IAAA,CAAK,eAAA,GAAkB,MAAA;AACvB,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AACf,IAAA,IAAA,CAAK,MAAA,GAAS,CAAA;AAClB,EAAA;AAEO,EAAA,KAAA,CAAM,KAAA,EAAa;AACtB,IAAA,IAAA,CAAK,MAAA,IAAU,KAAK,MAAA,CAAO,MAAA;AAC3B,IAAA,IAAA,CAAK,MAAA,GAAS,KAAA;AACd,IAAA,IAAA,CAAK,KAAA,EAAK;AACd,EAAA;EAEO,GAAA,GAAG;AACN,IAAA,IAAI,IAAA,CAAK,OAAA;AAAS,MAAA,IAAA,CAAK,MAAA,EAAM;AACjC,EAAA;EAEO,KAAA,GAAK;AACR,IAAA,IAAA,CAAK,OAAA,GAAU,KAAA;AACnB,EAAA;EAEO,MAAA,GAAM;AACT,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AACf,IAAA,IAAI,KAAK,KAAA,GAAQ,IAAA,CAAK,MAAA,CAAO,MAAA,GAAS,KAAK,MAAA,EAAQ;AAC/C,MAAA,IAAA,CAAK,KAAA,EAAK;AACd,IAAA;AACJ,EAAA;AAEQ,EAAA,SAAA,CAAU,CAAA,EAAS;AACvB,IAAA,IACI,CAAA,KAAML,UAAAA,CAAU,EAAA,IACf,CAAC,IAAA,CAAK,kBAAkB,IAAA,CAAK,aAAA,CAAcA,UAAAA,CAAU,EAAE,CAAA,EAC1D;AACE,MAAA,IAAI,IAAA,CAAK,KAAA,GAAQ,IAAA,CAAK,YAAA,EAAc;AAChC,QAAA,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,YAAA,EAAc,KAAK,KAAK,CAAA;AACjD,MAAA;AACA,MAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,aAAA;AACnB,MAAA,IAAA,CAAK,eAAe,IAAA,CAAK,KAAA;AAC7B,IAAA,CAAA,MAAA,IAAW,IAAA,CAAK,cAAA,IAAkB,CAAA,KAAMA,UAAAA,CAAU,GAAA,EAAK;AACnD,MAAA,IAAA,CAAK,WAAA,EAAW;AACpB,IAAA;AACJ,EAAA;AAIQ,EAAA,yBAAA,CAA0B,CAAA,EAAS;AACvC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,aAAA,KAAkB,IAAA,CAAK,eAAA,CAAgB,MAAA;AAC1D,IAAA,MAAM,OAAA,GAAU,KAAA;;AAEV,MAAA,iBAAA,CAAkB,CAAC;;;AAElB,MAAA,CAAA,CAAA,GAAI,EAAA,MAAU,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,aAAa;;AAE5D,IAAA,IAAI,CAAC,OAAA,EAAS;AACV,MAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AACrB,IAAA,CAAA,MAAA,IAAW,CAAC,KAAA,EAAO;AACf,MAAA,IAAA,CAAK,aAAA,EAAA;AACL,MAAA;AACJ,IAAA;AAEA,IAAA,IAAA,CAAK,aAAA,GAAgB,CAAA;AACrB,IAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,SAAA;AACnB,IAAA,IAAA,CAAK,eAAe,CAAC,CAAA;AACzB,EAAA;;AAGQ,EAAA,iBAAA,CAAkB,CAAA,EAAS;AAC/B,IAAA,IAAI,IAAA,CAAK,aAAA,KAAkB,IAAA,CAAK,eAAA,CAAgB,MAAA,EAAQ;AACpD,MAAA,IAAI,CAAA,KAAMA,UAAAA,CAAU,EAAA,IAAMI,aAAAA,CAAa,CAAC,CAAA,EAAG;AACvC,QAAA,MAAM,SAAA,GAAY,IAAA,CAAK,KAAA,GAAQ,IAAA,CAAK,eAAA,CAAgB,MAAA;AAEpD,QAAA,IAAI,IAAA,CAAK,eAAe,SAAA,EAAW;AAE/B,UAAA,MAAM,cAAc,IAAA,CAAK,KAAA;AACzB,UAAA,IAAA,CAAK,KAAA,GAAQ,SAAA;AACb,UAAA,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,YAAA,EAAc,SAAS,CAAA;AAC5C,UAAA,IAAA,CAAK,KAAA,GAAQ,WAAA;AACjB,QAAA;AAEA,QAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AACjB,QAAA,IAAA,CAAK,eAAe,SAAA,GAAY,CAAA;AAChC,QAAA,IAAA,CAAK,sBAAsB,CAAC,CAAA;AAC5B,QAAA;AACJ,MAAA;AAEA,MAAA,IAAA,CAAK,aAAA,GAAgB,CAAA;AACzB,IAAA;AAEA,IAAA,IAAA,CAAK,IAAI,EAAA,MAAU,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,aAAa,CAAA,EAAG;AACzD,MAAA,IAAA,CAAK,aAAA,IAAiB,CAAA;IAC1B,CAAA,MAAA,IAAW,IAAA,CAAK,kBAAkB,CAAA,EAAG;AACjC,MAAA,IAAI,IAAA,CAAK,eAAA,KAAoB,SAAA,CAAU,QAAA,EAAU;AAE7C,QAAA,IAAI,IAAA,CAAK,cAAA,IAAkB,CAAA,KAAMJ,UAAAA,CAAU,GAAA,EAAK;AAC5C,UAAA,IAAA,CAAK,WAAA,EAAW;AACpB,QAAA;AACJ,MAAA,CAAA,MAAA,IAAW,IAAA,CAAK,aAAA,CAAcA,UAAAA,CAAU,EAAE,CAAA,EAAG;AAEzC,QAAA,IAAA,CAAK,aAAA,GAAgB,CAAA;AACzB,MAAA;IACJ,CAAA,MAAO;AAEH,MAAA,IAAA,CAAK,aAAA,GAAgB,MAAA,CAAO,CAAA,KAAMA,UAAAA,CAAU,EAAE,CAAA;AAClD,IAAA;AACJ,EAAA;AAEQ,EAAA,kBAAA,CAAmB,CAAA,EAAS;AAChC,IAAA,IAAI,CAAA,KAAM,SAAA,CAAU,KAAA,CAAM,IAAA,CAAK,aAAa,CAAA,EAAG;AAC3C,MAAA,IAAI,EAAE,IAAA,CAAK,aAAA,KAAkB,SAAA,CAAU,MAAM,MAAA,EAAQ;AACjD,QAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,aAAA;AACnB,QAAA,IAAA,CAAK,kBAAkB,SAAA,CAAU,QAAA;AACjC,QAAA,IAAA,CAAK,aAAA,GAAgB,CAAA;AACrB,QAAA,IAAA,CAAK,YAAA,GAAe,KAAK,KAAA,GAAQ,CAAA;AACrC,MAAA;IACJ,CAAA,MAAO;AACH,MAAA,IAAA,CAAK,aAAA,GAAgB,CAAA;AACrB,MAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,aAAA;AACnB,MAAA,IAAA,CAAK,mBAAmB,CAAC,CAAA;AAC7B,IAAA;AACJ,EAAA;;;;;;;AAQQ,EAAA,aAAA,CAAc,CAAA,EAAS;AAC3B,IAAA,OAAO,EAAE,IAAA,CAAK,KAAA,GAAQ,KAAK,MAAA,CAAO,MAAA,GAAS,KAAK,MAAA,EAAQ;AACpD,MAAA,IAAI,IAAA,CAAK,OAAO,UAAA,CAAW,IAAA,CAAK,QAAQ,IAAA,CAAK,MAAM,MAAM,CAAA,EAAG;AACxD,QAAA,OAAO,IAAA;AACX,MAAA;AACJ,IAAA;AAQA,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAA,CAAK,MAAA,CAAO,MAAA,GAAS,KAAK,MAAA,GAAS,CAAA;AAEhD,IAAA,OAAO,KAAA;AACX,EAAA;;;;;;;;;AAUQ,EAAA,kBAAA,CAAmB,CAAA,EAAS;AAChC,IAAA,IAAI,CAAA,KAAM,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,aAAa,CAAA,EAAG;AAChD,MAAA,IAAI,EAAE,IAAA,CAAK,aAAA,KAAkB,IAAA,CAAK,gBAAgB,MAAA,EAAQ;AACtD,QAAA,IAAI,IAAA,CAAK,eAAA,KAAoB,SAAA,CAAU,QAAA,EAAU;AAC7C,UAAA,IAAA,CAAK,IAAI,OAAA,CAAQ,IAAA,CAAK,YAAA,EAAc,IAAA,CAAK,OAAO,CAAC,CAAA;QACrD,CAAA,MAAO;AACH,UAAA,IAAA,CAAK,IAAI,SAAA,CAAU,IAAA,CAAK,YAAA,EAAc,IAAA,CAAK,OAAO,CAAC,CAAA;AACvD,QAAA;AAEA,QAAA,IAAA,CAAK,aAAA,GAAgB,CAAA;AACrB,QAAA,IAAA,CAAK,YAAA,GAAe,KAAK,KAAA,GAAQ,CAAA;AACjC,QAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,IAAA;AACvB,MAAA;IACJ,CAAA,MAAA,IAAW,IAAA,CAAK,kBAAkB,CAAA,EAAG;AAEjC,MAAA,IAAI,KAAK,aAAA,CAAc,IAAA,CAAK,eAAA,CAAgB,CAAC,CAAC,CAAA,EAAG;AAC7C,QAAA,IAAA,CAAK,aAAA,GAAgB,CAAA;AACzB,MAAA;AACJ,IAAA,CAAA,MAAA,IAAW,MAAM,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,aAAA,GAAgB,CAAC,CAAA,EAAG;AAE3D,MAAA,IAAA,CAAK,aAAA,GAAgB,CAAA;AACzB,IAAA;AACJ,EAAA;;;;;;;AAQQ,EAAA,cAAA,CAAe,CAAA,EAAS;AAC5B,IAAA,OAAO,KAAK,OAAA,GAAU,CAAC,kBAAkB,CAAC,CAAA,GAAI,aAAa,CAAC,CAAA;AAChE,EAAA;AAEQ,EAAA,YAAA,CAAa,UAAsB,MAAA,EAAc;AACrD,IAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AACjB,IAAA,IAAA,CAAK,eAAA,GAAkB,QAAA;AACvB,IAAA,IAAA,CAAK,aAAA,GAAgB,MAAA;AACrB,IAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,oBAAA;AACvB,EAAA;AAEQ,EAAA,kBAAA,CAAmB,CAAA,EAAS;AAChC,IAAA,IAAI,CAAA,KAAMA,WAAU,eAAA,EAAiB;AACjC,MAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,iBAAA;AACnB,MAAA,IAAA,CAAK,YAAA,GAAe,KAAK,KAAA,GAAQ,CAAA;IACrC,CAAA,MAAA,IAAW,CAAA,KAAMA,WAAU,YAAA,EAAc;AACrC,MAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,uBAAA;AACnB,MAAA,IAAA,CAAK,YAAA,GAAe,KAAK,KAAA,GAAQ,CAAA;IACrC,CAAA,MAAA,IAAW,IAAA,CAAK,cAAA,CAAe,CAAC,CAAA,EAAG;AAC/B,MAAA,MAAM,QAAQ,CAAA,GAAI,EAAA;AAClB,MAAA,IAAA,CAAK,eAAe,IAAA,CAAK,KAAA;AACzB,MAAA,IAAI,KAAK,OAAA,EAAS;AACd,QAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,SAAA;AACvB,MAAA,CAAA,MAAA,IAAW,KAAA,KAAU,SAAA,CAAU,SAAA,CAAU,CAAC,CAAA,EAAG;AACzC,QAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,cAAA;MACvB,CAAA,MAAA,IACI,KAAA,KAAU,UAAU,QAAA,CAAS,CAAC,KAC9B,KAAA,KAAU,SAAA,CAAU,MAAA,CAAO,CAAC,CAAA,EAC9B;AACE,QAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,cAAA;MACvB,CAAA,MAAO;AACH,QAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,SAAA;AACvB,MAAA;IACJ,CAAA,MAAA,IAAW,CAAA,KAAMA,WAAU,KAAA,EAAO;AAC9B,MAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,oBAAA;IACvB,CAAA,MAAO;AACH,MAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,IAAA;AACnB,MAAA,IAAA,CAAK,UAAU,CAAC,CAAA;AACpB,IAAA;AACJ,EAAA;AACQ,EAAA,cAAA,CAAe,CAAA,EAAS;AAC5B,IAAA,IAAI,iBAAA,CAAkB,CAAC,CAAA,EAAG;AACtB,MAAA,IAAA,CAAK,GAAA,CAAI,aAAA,CAAc,IAAA,CAAK,YAAA,EAAc,KAAK,KAAK,CAAA;AACpD,MAAA,IAAA,CAAK,YAAA,GAAe,EAAA;AACpB,MAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,mBAAA;AACnB,MAAA,IAAA,CAAK,yBAAyB,CAAC,CAAA;AACnC,IAAA;AACJ,EAAA;AACQ,EAAA,yBAAA,CAA0B,CAAA,EAAS;AACvC,IAAA,IAAII,aAAAA,CAAa,CAAC,CAAA,EAAG,CAErB,MAAA,IAAW,CAAA,KAAMJ,WAAU,EAAA,EAAI;AAC3B,MAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,IAAA;IACvB,CAAA,MAAO;AACH,MAAA,IAAA,CAAK,QAAQ,IAAA,CAAK,cAAA,CAAe,CAAC,CAAA,GAC5B,KAAA,CAAM,mBACN,KAAA,CAAM,gBAAA;AACZ,MAAA,IAAA,CAAK,eAAe,IAAA,CAAK,KAAA;AAC7B,IAAA;AACJ,EAAA;AACQ,EAAA,qBAAA,CAAsB,CAAA,EAAS;AACnC,IAAA,IAAI,CAAA,KAAMA,UAAAA,CAAU,EAAA,IAAMI,aAAAA,CAAa,CAAC,CAAA,EAAG;AACvC,MAAA,IAAA,CAAK,GAAA,CAAI,UAAA,CAAW,IAAA,CAAK,YAAA,EAAc,KAAK,KAAK,CAAA;AACjD,MAAA,IAAA,CAAK,YAAA,GAAe,EAAA;AACpB,MAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,mBAAA;AACnB,MAAA,IAAA,CAAK,yBAAyB,CAAC,CAAA;AACnC,IAAA;AACJ,EAAA;AACQ,EAAA,wBAAA,CAAyB,CAAA,EAAS;AAEtC,IAAA,IAAI,MAAMJ,UAAAA,CAAU,EAAA,IAAM,KAAK,aAAA,CAAcA,UAAAA,CAAU,EAAE,CAAA,EAAG;AACxD,MAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,IAAA;AACnB,MAAA,IAAA,CAAK,YAAA,GAAe,KAAK,KAAA,GAAQ,CAAA;AACrC,IAAA;AACJ,EAAA;AACQ,EAAA,wBAAA,CAAyB,CAAA,EAAS;AACtC,IAAA,IAAI,CAAA,KAAMA,WAAU,EAAA,EAAI;AACpB,MAAA,IAAA,CAAK,GAAA,CAAI,YAAA,CAAa,IAAA,CAAK,KAAK,CAAA;AAChC,MAAA,IAAI,KAAK,SAAA,EAAW;AAChB,QAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,YAAA;AACnB,QAAA,IAAA,CAAK,aAAA,GAAgB,CAAA;MACzB,CAAA,MAAO;AACH,QAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,IAAA;AACvB,MAAA;AACA,MAAA,IAAA,CAAK,YAAA,GAAe,KAAK,KAAA,GAAQ,CAAA;IACrC,CAAA,MAAA,IAAW,CAAA,KAAMA,WAAU,KAAA,EAAO;AAC9B,MAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,gBAAA;IACvB,CAAA,MAAA,IAAW,CAACI,aAAAA,CAAa,CAAC,CAAA,EAAG;AACzB,MAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,eAAA;AACnB,MAAA,IAAA,CAAK,eAAe,IAAA,CAAK,KAAA;AAC7B,IAAA;AACJ,EAAA;AACQ,EAAA,qBAAA,CAAsB,CAAA,EAAS;AACnC,IAAA,IAAI,CAAA,KAAMJ,WAAU,EAAA,EAAI;AACpB,MAAA,IAAA,CAAK,GAAA,CAAI,gBAAA,CAAiB,IAAA,CAAK,KAAK,CAAA;AACpC,MAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,IAAA;AACnB,MAAA,IAAA,CAAK,YAAA,GAAe,KAAK,KAAA,GAAQ,CAAA;AACjC,MAAA,IAAA,CAAK,SAAA,GAAY,KAAA;IACrB,CAAA,MAAA,IAAW,CAACI,aAAAA,CAAa,CAAC,CAAA,EAAG;AACzB,MAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,mBAAA;AACnB,MAAA,IAAA,CAAK,yBAAyB,CAAC,CAAA;AACnC,IAAA;AACJ,EAAA;AACQ,EAAA,oBAAA,CAAqB,CAAA,EAAS;AAClC,IAAA,IAAI,CAAA,KAAMJ,UAAAA,CAAU,EAAA,IAAM,iBAAA,CAAkB,CAAC,CAAA,EAAG;AAC5C,MAAA,IAAA,CAAK,GAAA,CAAI,YAAA,CAAa,IAAA,CAAK,YAAA,EAAc,KAAK,KAAK,CAAA;AACnD,MAAA,IAAA,CAAK,eAAe,IAAA,CAAK,KAAA;AACzB,MAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,kBAAA;AACnB,MAAA,IAAA,CAAK,wBAAwB,CAAC,CAAA;AAClC,IAAA;AACJ,EAAA;AACQ,EAAA,uBAAA,CAAwB,CAAA,EAAS;AACrC,IAAA,IAAI,CAAA,KAAMA,WAAU,EAAA,EAAI;AACpB,MAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,oBAAA;AACvB,IAAA,CAAA,MAAA,IAAW,CAAA,KAAMA,UAAAA,CAAU,KAAA,IAAS,CAAA,KAAMA,WAAU,EAAA,EAAI;AACpD,MAAA,IAAA,CAAK,GAAA,CAAI,WAAA,CAAY,SAAA,CAAU,OAAA,EAAS,KAAK,YAAY,CAAA;AACzD,MAAA,IAAA,CAAK,YAAA,GAAe,EAAA;AACpB,MAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,mBAAA;AACnB,MAAA,IAAA,CAAK,yBAAyB,CAAC,CAAA;IACnC,CAAA,MAAA,IAAW,CAACI,aAAAA,CAAa,CAAC,CAAA,EAAG;AACzB,MAAA,IAAA,CAAK,GAAA,CAAI,WAAA,CAAY,SAAA,CAAU,OAAA,EAAS,KAAK,YAAY,CAAA;AACzD,MAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,eAAA;AACnB,MAAA,IAAA,CAAK,eAAe,IAAA,CAAK,KAAA;AAC7B,IAAA;AACJ,EAAA;AACQ,EAAA,yBAAA,CAA0B,CAAA,EAAS;AACvC,IAAA,IAAI,CAAA,KAAMJ,WAAU,WAAA,EAAa;AAC7B,MAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,kBAAA;AACnB,MAAA,IAAA,CAAK,YAAA,GAAe,KAAK,KAAA,GAAQ,CAAA;IACrC,CAAA,MAAA,IAAW,CAAA,KAAMA,WAAU,WAAA,EAAa;AACpC,MAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,kBAAA;AACnB,MAAA,IAAA,CAAK,YAAA,GAAe,KAAK,KAAA,GAAQ,CAAA;IACrC,CAAA,MAAA,IAAW,CAACI,aAAAA,CAAa,CAAC,CAAA,EAAG;AACzB,MAAA,IAAA,CAAK,eAAe,IAAA,CAAK,KAAA;AACzB,MAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,kBAAA;AACnB,MAAA,IAAA,CAAK,8BAA8B,CAAC,CAAA;AACxC,IAAA;AACJ,EAAA;AACQ,EAAA,sBAAA,CAAuB,GAAW,KAAA,EAAa;AACnD,IAAA,IACI,CAAA,KAAM,SACL,CAAC,IAAA,CAAK,kBAAkB,IAAA,CAAK,aAAA,CAAc,KAAK,CAAA,EACnD;AACE,MAAA,IAAA,CAAK,GAAA,CAAI,YAAA,CAAa,IAAA,CAAK,YAAA,EAAc,KAAK,KAAK,CAAA;AACnD,MAAA,IAAA,CAAK,YAAA,GAAe,EAAA;AACpB,MAAA,IAAA,CAAK,GAAA,CAAI,WAAA,CACL,KAAA,KAAUJ,UAAAA,CAAU,WAAA,GACd,SAAA,CAAU,MAAA,GACV,SAAA,CAAU,MAAA,EAChB,IAAA,CAAK,KAAA,GAAQ,CAAC,CAAA;AAElB,MAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,mBAAA;AACvB,IAAA,CAAA,MAAA,IAAW,IAAA,CAAK,cAAA,IAAkB,CAAA,KAAMA,UAAAA,CAAU,GAAA,EAAK;AACnD,MAAA,IAAA,CAAK,WAAA,EAAW;AACpB,IAAA;AACJ,EAAA;AACQ,EAAA,iCAAA,CAAkC,CAAA,EAAS;AAC/C,IAAA,IAAA,CAAK,sBAAA,CAAuB,CAAA,EAAGA,UAAAA,CAAU,WAAW,CAAA;AACxD,EAAA;AACQ,EAAA,iCAAA,CAAkC,CAAA,EAAS;AAC/C,IAAA,IAAA,CAAK,sBAAA,CAAuB,CAAA,EAAGA,UAAAA,CAAU,WAAW,CAAA;AACxD,EAAA;AACQ,EAAA,6BAAA,CAA8B,CAAA,EAAS;AAC3C,IAAA,IAAII,aAAAA,CAAa,CAAC,CAAA,IAAK,CAAA,KAAMJ,WAAU,EAAA,EAAI;AACvC,MAAA,IAAA,CAAK,GAAA,CAAI,YAAA,CAAa,IAAA,CAAK,YAAA,EAAc,KAAK,KAAK,CAAA;AACnD,MAAA,IAAA,CAAK,YAAA,GAAe,EAAA;AACpB,MAAA,IAAA,CAAK,GAAA,CAAI,WAAA,CAAY,SAAA,CAAU,QAAA,EAAU,KAAK,KAAK,CAAA;AACnD,MAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,mBAAA;AACnB,MAAA,IAAA,CAAK,yBAAyB,CAAC,CAAA;AACnC,IAAA,CAAA,MAAA,IAAW,IAAA,CAAK,cAAA,IAAkB,CAAA,KAAMA,UAAAA,CAAU,GAAA,EAAK;AACnD,MAAA,IAAA,CAAK,WAAA,EAAW;AACpB,IAAA;AACJ,EAAA;AACQ,EAAA,sBAAA,CAAuB,CAAA,EAAS;AACpC,IAAA,IAAI,CAAA,KAAMA,WAAU,oBAAA,EAAsB;AACtC,MAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,aAAA;AACnB,MAAA,IAAA,CAAK,aAAA,GAAgB,CAAA;IACzB,CAAA,MAAO;AACH,MAAA,IAAA,CAAK,QACD,CAAA,KAAMA,UAAAA,CAAU,IAAA,GACV,KAAA,CAAM,gBACN,KAAA,CAAM,aAAA;AACpB,IAAA;AACJ,EAAA;AACQ,EAAA,kBAAA,CAAmB,CAAA,EAAS;AAChC,IAAA,IAAI,MAAMA,UAAAA,CAAU,EAAA,IAAM,KAAK,aAAA,CAAcA,UAAAA,CAAU,EAAE,CAAA,EAAG;AACxD,MAAA,IAAA,CAAK,GAAA,CAAI,aAAA,CAAc,IAAA,CAAK,YAAA,EAAc,KAAK,KAAK,CAAA;AACpD,MAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,IAAA;AACnB,MAAA,IAAA,CAAK,YAAA,GAAe,KAAK,KAAA,GAAQ,CAAA;AACrC,IAAA;AACJ,EAAA;AACQ,EAAA,4BAAA,CAA6B,CAAA,EAAS;AAC1C,IAAA,IAAI,MAAMA,UAAAA,CAAU,EAAA,IAAM,KAAK,aAAA,CAAcA,UAAAA,CAAU,EAAE,CAAA,EAAG;AACxD,MAAA,IAAA,CAAK,GAAA,CAAI,uBAAA,CAAwB,IAAA,CAAK,YAAA,EAAc,KAAK,KAAK,CAAA;AAC9D,MAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,IAAA;AACnB,MAAA,IAAA,CAAK,YAAA,GAAe,KAAK,KAAA,GAAQ,CAAA;AACrC,IAAA;AACJ,EAAA;AACQ,EAAA,kBAAA,CAAmB,CAAA,EAAS;AAChC,IAAA,IAAI,CAAA,KAAMA,WAAU,IAAA,EAAM;AACtB,MAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,aAAA;AACnB,MAAA,IAAA,CAAK,kBAAkB,SAAA,CAAU,UAAA;AAEjC,MAAA,IAAA,CAAK,aAAA,GAAgB,CAAA;AACrB,MAAA,IAAA,CAAK,YAAA,GAAe,KAAK,KAAA,GAAQ,CAAA;IACrC,CAAA,MAAO;AACH,MAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,aAAA;AACvB,IAAA;AACJ,EAAA;AACQ,EAAA,qBAAA,CAAsB,CAAA,EAAS;AACnC,IAAA,IAAI,MAAMA,UAAAA,CAAU,EAAA,IAAM,KAAK,aAAA,CAAcA,UAAAA,CAAU,EAAE,CAAA,EAAG;AACxD,MAAA,IAAA,CAAK,IAAI,SAAA,CAAU,IAAA,CAAK,YAAA,EAAc,IAAA,CAAK,OAAO,CAAC,CAAA;AACnD,MAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,IAAA;AACnB,MAAA,IAAA,CAAK,YAAA,GAAe,KAAK,KAAA,GAAQ,CAAA;AACrC,IAAA;AACJ,EAAA;AACQ,EAAA,mBAAA,CAAoB,CAAA,EAAS;AACjC,IAAA,MAAM,QAAQ,CAAA,GAAI,EAAA;AAClB,IAAA,IAAI,KAAA,KAAU,SAAA,CAAU,SAAA,CAAU,CAAC,CAAA,EAAG;AAClC,MAAA,IAAA,CAAK,YAAA,CAAa,SAAA,CAAU,SAAA,EAAW,CAAC,CAAA;AAC5C,IAAA,CAAA,MAAA,IAAW,KAAA,KAAU,SAAA,CAAU,QAAA,CAAS,CAAC,CAAA,EAAG;AACxC,MAAA,IAAA,CAAK,YAAA,CAAa,SAAA,CAAU,QAAA,EAAU,CAAC,CAAA;IAC3C,CAAA,MAAO;AACH,MAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,SAAA;AACnB,MAAA,IAAA,CAAK,eAAe,CAAC,CAAA;AACzB,IAAA;AACJ,EAAA;AAEQ,EAAA,mBAAA,CAAoB,CAAA,EAAS;AACjC,IAAA,MAAM,QAAQ,CAAA,GAAI,EAAA;AAClB,IAAA,QAAQ,KAAA;MACJ,KAAK,SAAA,CAAU,QAAA,CAAS,CAAC,CAAA,EAAG;AACxB,QAAA,IAAA,CAAK,YAAA,CAAa,SAAA,CAAU,QAAA,EAAU,CAAC,CAAA;AAEvC,QAAA;AACJ,MAAA;MACA,KAAK,SAAA,CAAU,WAAA,CAAY,CAAC,CAAA,EAAG;AAC3B,QAAA,IAAA,CAAK,YAAA,CAAa,SAAA,CAAU,WAAA,EAAa,CAAC,CAAA;AAE1C,QAAA;AACJ,MAAA;MACA,KAAK,SAAA,CAAU,MAAA,CAAO,CAAC,CAAA,EAAG;AACtB,QAAA,IAAA,CAAK,YAAA,CAAa,SAAA,CAAU,MAAA,EAAQ,CAAC,CAAA;AAErC,QAAA;AACJ,MAAA;MACA,SAAS;AACL,QAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,SAAA;AACnB,QAAA,IAAA,CAAK,eAAe,CAAC,CAAA;AACzB,MAAA;AACJ;AACJ,EAAA;EAEQ,WAAA,GAAW;AACf,IAAA,IAAA,CAAK,YAAY,IAAA,CAAK,KAAA;AACtB,IAAA,IAAA,CAAK,QAAQ,KAAA,CAAM,QAAA;AACnB,IAAA,IAAA,CAAK,cAAc,IAAA,CAAK,KAAA;AACxB,IAAA,IAAA,CAAK,cAAc,WAAA,CACf,IAAA,CAAK,OAAA,GACC,YAAA,CAAa,SACb,IAAA,CAAK,SAAA,KAAc,KAAA,CAAM,IAAA,IACvB,KAAK,SAAA,KAAc,KAAA,CAAM,eACzB,YAAA,CAAa,MAAA,GACb,aAAa,SAAS,CAAA;AAEtC,EAAA;EAEQ,aAAA,GAAa;AACjB,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,KAAA,GAAQ,IAAA,CAAK,MAAA;AACxC,IAAA,MAAM9F,UAAS,IAAA,CAAK,aAAA,CAAc,KAAA,CAAM,IAAA,CAAK,QAAQ,aAAa,CAAA;AAGlE,IAAA,IAAIA,WAAU,CAAA,EAAG;AACb,MAAA,IAAA,CAAK,QAAQ,IAAA,CAAK,SAAA;AAElB,MAAA,IAAIA,YAAW,CAAA,EAAG;AACd,QAAA,IAAA,CAAK,KAAA,IAAS,CAAA;AAClB,MAAA;IACJ,CAAA,MAAO;AACH,MAAA,IACI,aAAA,GAAgB,IAAA,CAAK,MAAA,CAAO,MAAA,IAC5B,IAAA,CAAK,OAAO,UAAA,CAAW,aAAa,CAAA,KAAM8F,UAAAA,CAAU,GAAA,EACtD;AACE,QAAA,IAAA,CAAK,QAAQ,IAAA,CAAK,SAAA;AAClB,QAAA,IAAA,CAAK,KAAA,IAAS,CAAA;AACd,QAAA;AACJ,MAAA;AAGA,MAAA,IAAA,CAAK,KAAA,GAAQ,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,OAAO,MAAA,GAAS,CAAA;AACpD,IAAA;AACJ,EAAA;;;;EAKQ,OAAA,GAAO;AAEX,IAAA,IAAI,IAAA,CAAK,OAAA,IAAW,IAAA,CAAK,YAAA,KAAiB,KAAK,KAAA,EAAO;AAClD,MAAA,IACI,IAAA,CAAK,KAAA,KAAU,KAAA,CAAM,IAAA,IACpB,IAAA,CAAK,UAAU,KAAA,CAAM,YAAA,IAAgB,IAAA,CAAK,aAAA,KAAkB,CAAA,EAC/D;AACE,QAAA,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,YAAA,EAAc,KAAK,KAAK,CAAA;AAC7C,QAAA,IAAA,CAAK,eAAe,IAAA,CAAK,KAAA;MAC7B,CAAA,MAAA,IACI,IAAA,CAAK,KAAA,KAAU,KAAA,CAAM,kBAAA,IACrB,IAAA,CAAK,KAAA,KAAU,KAAA,CAAM,kBAAA,IACrB,IAAA,CAAK,KAAA,KAAU,KAAA,CAAM,kBAAA,EACvB;AACE,QAAA,IAAA,CAAK,GAAA,CAAI,YAAA,CAAa,IAAA,CAAK,YAAA,EAAc,KAAK,KAAK,CAAA;AACnD,QAAA,IAAA,CAAK,eAAe,IAAA,CAAK,KAAA;AAC7B,MAAA;AACJ,IAAA;AACJ,EAAA;EAEQ,cAAA,GAAc;AAClB,IAAA,OAAO,KAAK,KAAA,GAAQ,IAAA,CAAK,OAAO,MAAA,GAAS,IAAA,CAAK,UAAU,IAAA,CAAK,OAAA;AACjE,EAAA;;;;;;EAOQ,KAAA,GAAK;AACT,IAAA,OAAO,IAAA,CAAK,gBAAc,EAAI;AAC1B,MAAA,MAAM,IAAI,IAAA,CAAK,MAAA,CAAO,WAAW,IAAA,CAAK,KAAA,GAAQ,KAAK,MAAM,CAAA;AACzD,MAAA,QAAQ,KAAK,KAAA;AACT,QAAA,KAAK,MAAM,IAAA,EAAM;AACb,UAAA,IAAA,CAAK,UAAU,CAAC,CAAA;AAChB,UAAA;AACJ,QAAA;AACA,QAAA,KAAK,MAAM,oBAAA,EAAsB;AAC7B,UAAA,IAAA,CAAK,0BAA0B,CAAC,CAAA;AAChC,UAAA;AACJ,QAAA;AACA,QAAA,KAAK,MAAM,YAAA,EAAc;AACrB,UAAA,IAAA,CAAK,kBAAkB,CAAC,CAAA;AACxB,UAAA;AACJ,QAAA;AACA,QAAA,KAAK,MAAM,aAAA,EAAe;AACtB,UAAA,IAAA,CAAK,mBAAmB,CAAC,CAAA;AACzB,UAAA;AACJ,QAAA;AACA,QAAA,KAAK,MAAM,kBAAA,EAAoB;AAC3B,UAAA,IAAA,CAAK,kCAAkC,CAAC,CAAA;AACxC,UAAA;AACJ,QAAA;AACA,QAAA,KAAK,MAAM,eAAA,EAAiB;AACxB,UAAA,IAAA,CAAK,qBAAqB,CAAC,CAAA;AAC3B,UAAA;AACJ,QAAA;AACA,QAAA,KAAK,MAAM,aAAA,EAAe;AACtB,UAAA,IAAA,CAAK,mBAAmB,CAAC,CAAA;AACzB,UAAA;AACJ,QAAA;AACA,QAAA,KAAK,MAAM,gBAAA,EAAkB;AACzB,UAAA,IAAA,CAAK,sBAAsB,CAAC,CAAA;AAC5B,UAAA;AACJ,QAAA;AACA,QAAA,KAAK,MAAM,mBAAA,EAAqB;AAC5B,UAAA,IAAA,CAAK,yBAAyB,CAAC,CAAA;AAC/B,UAAA;AACJ,QAAA;AACA,QAAA,KAAK,MAAM,SAAA,EAAW;AAClB,UAAA,IAAA,CAAK,eAAe,CAAC,CAAA;AACrB,UAAA;AACJ,QAAA;AACA,QAAA,KAAK,MAAM,gBAAA,EAAkB;AACzB,UAAA,IAAA,CAAK,sBAAsB,CAAC,CAAA;AAC5B,UAAA;AACJ,QAAA;AACA,QAAA,KAAK,MAAM,aAAA,EAAe;AACtB,UAAA,IAAA,CAAK,mBAAmB,CAAC,CAAA;AACzB,UAAA;AACJ,QAAA;AACA,QAAA,KAAK,MAAM,kBAAA,EAAoB;AAC3B,UAAA,IAAA,CAAK,wBAAwB,CAAC,CAAA;AAC9B,UAAA;AACJ,QAAA;AACA,QAAA,KAAK,MAAM,kBAAA,EAAoB;AAC3B,UAAA,IAAA,CAAK,kCAAkC,CAAC,CAAA;AACxC,UAAA;AACJ,QAAA;AACA,QAAA,KAAK,MAAM,oBAAA,EAAsB;AAC7B,UAAA,IAAA,CAAK,0BAA0B,CAAC,CAAA;AAChC,UAAA;AACJ,QAAA;AACA,QAAA,KAAK,MAAM,oBAAA,EAAsB;AAC7B,UAAA,IAAA,CAAK,0BAA0B,CAAC,CAAA;AAChC,UAAA;AACJ,QAAA;AACA,QAAA,KAAK,MAAM,mBAAA,EAAqB;AAC5B,UAAA,IAAA,CAAK,yBAAyB,CAAC,CAAA;AAC/B,UAAA;AACJ,QAAA;AACA,QAAA,KAAK,MAAM,cAAA,EAAgB;AACvB,UAAA,IAAA,CAAK,oBAAoB,CAAC,CAAA;AAC1B,UAAA;AACJ,QAAA;AACA,QAAA,KAAK,MAAM,cAAA,EAAgB;AACvB,UAAA,IAAA,CAAK,oBAAoB,CAAC,CAAA;AAC1B,UAAA;AACJ,QAAA;AACA,QAAA,KAAK,MAAM,kBAAA,EAAoB;AAC3B,UAAA,IAAA,CAAK,8BAA8B,CAAC,CAAA;AACpC,UAAA;AACJ,QAAA;AACA,QAAA,KAAK,MAAM,gBAAA,EAAkB;AACzB,UAAA,IAAA,CAAK,sBAAsB,CAAC,CAAA;AAC5B,UAAA;AACJ,QAAA;AACA,QAAA,KAAK,MAAM,aAAA,EAAe;AACtB,UAAA,IAAA,CAAK,mBAAmB,CAAC,CAAA;AACzB,UAAA;AACJ,QAAA;AACA,QAAA,KAAK,MAAM,iBAAA,EAAmB;AAC1B,UAAA,IAAA,CAAK,uBAAuB,CAAC,CAAA;AAC7B,UAAA;AACJ,QAAA;AACA,QAAA,KAAK,MAAM,aAAA,EAAe;AACtB,UAAA,IAAA,CAAK,mBAAmB,CAAC,CAAA;AACzB,UAAA;AACJ,QAAA;AACA,QAAA,KAAK,MAAM,uBAAA,EAAyB;AAChC,UAAA,IAAA,CAAK,6BAA6B,CAAC,CAAA;AACnC,UAAA;AACJ,QAAA;AACA,QAAA,KAAK,MAAM,QAAA,EAAU;AACjB,UAAA,IAAA,CAAK,aAAA,EAAa;AAClB,UAAA;AACJ,QAAA;AACJ;AACA,MAAA,IAAA,CAAK,KAAA,EAAA;AACT,IAAA;AACA,IAAA,IAAA,CAAK,OAAA,EAAO;AAChB,EAAA;EAEQ,MAAA,GAAM;AACV,IAAA,IAAI,IAAA,CAAK,KAAA,KAAU,KAAA,CAAM,QAAA,EAAU;AAC/B,MAAA,IAAA,CAAK,cAAc,GAAA,EAAG;AACtB,MAAA,IAAA,CAAK,QAAQ,IAAA,CAAK,SAAA;AACtB,IAAA;AAEA,IAAA,IAAA,CAAK,kBAAA,EAAkB;AAEvB,IAAA,IAAA,CAAK,IAAI,KAAA,EAAK;AAClB,EAAA;;EAGQ,kBAAA,GAAkB;AACtB,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,MAAA,CAAO,MAAA,GAAS,IAAA,CAAK,MAAA;AAG3C,IAAA,IAAI,IAAA,CAAK,gBAAgB,QAAA,EAAU;AAC/B,MAAA;AACJ,IAAA;AAEA,IAAA,IAAI,IAAA,CAAK,KAAA,KAAU,KAAA,CAAM,aAAA,EAAe;AACpC,MAAA,IAAI,IAAA,CAAK,eAAA,KAAoB,SAAA,CAAU,QAAA,EAAU;AAC7C,QAAA,IAAA,CAAK,GAAA,CAAI,OAAA,CAAQ,IAAA,CAAK,YAAA,EAAc,UAAU,CAAC,CAAA;MACnD,CAAA,MAAO;AACH,QAAA,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,IAAA,CAAK,YAAA,EAAc,UAAU,CAAC,CAAA;AACrD,MAAA;AACJ,IAAA,CAAA,MAAA,IACI,IAAA,CAAK,KAAA,KAAU,KAAA,CAAM,SAAA,IACrB,KAAK,KAAA,KAAU,KAAA,CAAM,mBAAA,IACrB,IAAA,CAAK,UAAU,KAAA,CAAM,oBAAA,IACrB,IAAA,CAAK,KAAA,KAAU,MAAM,kBAAA,IACrB,IAAA,CAAK,KAAA,KAAU,KAAA,CAAM,mBACrB,IAAA,CAAK,KAAA,KAAU,KAAA,CAAM,kBAAA,IACrB,KAAK,KAAA,KAAU,KAAA,CAAM,kBAAA,IACrB,IAAA,CAAK,UAAU,KAAA,CAAM,kBAAA,IACrB,IAAA,CAAK,KAAA,KAAU,MAAM,gBAAA,EACvB,CAKF,MAAO;AACH,MAAA,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,YAAA,EAAc,QAAQ,CAAA;AAC/C,IAAA;AACJ,EAAA;AAEQ,EAAA,aAAA,CAAc,IAAY,QAAA,EAAgB;AAC9C,IAAA,IACI,KAAK,SAAA,KAAc,KAAA,CAAM,QACzB,IAAA,CAAK,SAAA,KAAc,MAAM,YAAA,EAC3B;AACE,MAAA,IAAI,IAAA,CAAK,YAAA,GAAe,IAAA,CAAK,WAAA,EAAa;AACtC,QAAA,IAAA,CAAK,GAAA,CAAI,YAAA,CAAa,IAAA,CAAK,YAAA,EAAc,KAAK,WAAW,CAAA;AAC7D,MAAA;AACA,MAAA,IAAA,CAAK,YAAA,GAAe,KAAK,WAAA,GAAc,QAAA;AACvC,MAAA,IAAA,CAAK,KAAA,GAAQ,KAAK,YAAA,GAAe,CAAA;AAEjC,MAAA,IAAA,CAAK,GAAA,CAAI,eAAe,EAAE,CAAA;IAC9B,CAAA,MAAO;AACH,MAAA,IAAI,IAAA,CAAK,YAAA,GAAe,IAAA,CAAK,WAAA,EAAa;AACtC,QAAA,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,YAAA,EAAc,KAAK,WAAW,CAAA;AACvD,MAAA;AACA,MAAA,IAAA,CAAK,YAAA,GAAe,KAAK,WAAA,GAAc,QAAA;AACvC,MAAA,IAAA,CAAK,KAAA,GAAQ,KAAK,YAAA,GAAe,CAAA;AAEjC,MAAA,IAAA,CAAK,GAAA,CAAI,YAAA,CAAa,EAAA,EAAI,IAAA,CAAK,YAAY,CAAA;AAC/C,IAAA;AACJ,EAAA;;;;ACx2BJ,IAAM,QAAA,uBAAe,GAAA,CAAI;AACrB,EAAA,OAAA;AACA,EAAA,QAAA;AACA,EAAA,UAAA;AACA,EAAA,QAAA;AACA,EAAA,QAAA;AACA,EAAA,UAAA;AACA,EAAA;AACH,CAAA,CAAA;AACD,IAAM,IAAA,mBAAO,IAAI,GAAA,CAAI,CAAC,GAAG,CAAC,CAAA;AAC1B,IAAM,mCAAmB,IAAI,GAAA,CAAI,CAAC,OAAA,EAAS,OAAO,CAAC,CAAA;AACnD,IAAM,0BAAU,IAAI,GAAA,CAAI,CAAC,IAAA,EAAM,IAAI,CAAC,CAAA;AACpC,IAAM,0BAAU,IAAI,GAAA,CAAI,CAAC,IAAA,EAAM,IAAI,CAAC,CAAA;AAEpC,IAAM,gBAAA,uBAAuB,GAAA,CAAyB;EAClD,CAAC,IAAA,sBAAU,GAAA,CAAI,CAAC,MAAM,IAAA,EAAM,IAAI,CAAC,CAAC,CAAA;AAClC,EAAA,CAAC,sBAAM,IAAI,GAAA,CAAI,CAAC,IAAI,CAAC,CAAC,CAAA;EACtB,CAAC,IAAA,sBAAU,GAAA,CAAI,CAAC,SAAS,IAAA,EAAM,IAAI,CAAC,CAAC,CAAA;EACrC,CAAC,MAAA,sBAAY,GAAA,CAAI,CAAC,QAAQ,MAAA,EAAQ,QAAQ,CAAC,CAAC,CAAA;AAC5C,EAAA,CAAC,sBAAM,IAAI,GAAA,CAAI,CAAC,IAAI,CAAC,CAAC,CAAA;AACtB,EAAA,CAAC,KAAK,IAAI,CAAA;AACV,EAAA,CAAC,MAAM,IAAI,CAAA;AACX,EAAA,CAAC,MAAM,IAAI,CAAA;AACX,EAAA,CAAC,MAAM,IAAI,CAAA;AACX,EAAA,CAAC,MAAM,IAAI,CAAA;AACX,EAAA,CAAC,MAAM,IAAI,CAAA;AACX,EAAA,CAAC,MAAM,IAAI,CAAA;AACX,EAAA,CAAC,UAAU,QAAQ,CAAA;AACnB,EAAA,CAAC,SAAS,QAAQ,CAAA;AAClB,EAAA,CAAC,UAAU,QAAQ,CAAA;AACnB,EAAA,CAAC,UAAU,QAAQ,CAAA;AACnB,EAAA,CAAC,YAAY,QAAQ,CAAA;AACrB,EAAA,CAAC,YAAY,QAAQ,CAAA;AACrB,EAAA,CAAC,0BAAU,IAAI,GAAA,CAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;AAC9B,EAAA,CAAC,4BAAY,IAAI,GAAA,CAAI,CAAC,UAAA,EAAY,QAAQ,CAAC,CAAC,CAAA;AAC5C,EAAA,CAAC,MAAM,OAAO,CAAA;AACd,EAAA,CAAC,MAAM,OAAO,CAAA;AACd,EAAA,CAAC,WAAW,IAAI,CAAA;AAChB,EAAA,CAAC,WAAW,IAAI,CAAA;AAChB,EAAA,CAAC,SAAS,IAAI,CAAA;AACd,EAAA,CAAC,cAAc,IAAI,CAAA;AACnB,EAAA,CAAC,WAAW,IAAI,CAAA;AAChB,EAAA,CAAC,OAAO,IAAI,CAAA;AACZ,EAAA,CAAC,MAAM,IAAI,CAAA;AACX,EAAA,CAAC,YAAY,IAAI,CAAA;AACjB,EAAA,CAAC,cAAc,IAAI,CAAA;AACnB,EAAA,CAAC,UAAU,IAAI,CAAA;AACf,EAAA,CAAC,UAAU,IAAI,CAAA;AACf,EAAA,CAAC,QAAQ,IAAI,CAAA;AACb,EAAA,CAAC,UAAU,IAAI,CAAA;AACf,EAAA,CAAC,MAAM,IAAI,CAAA;AACX,EAAA,CAAC,QAAQ,IAAI,CAAA;AACb,EAAA,CAAC,OAAO,IAAI,CAAA;AACZ,EAAA,CAAC,MAAM,IAAI,CAAA;AACX,EAAA,CAAC,OAAO,IAAI,CAAA;AACZ,EAAA,CAAC,WAAW,IAAI,CAAA;AAChB,EAAA,CAAC,SAAS,IAAI,CAAA;AACd,EAAA,CAAC,MAAM,IAAI,CAAA;AACX,EAAA,CAAC,MAAM,OAAO,CAAA;AACd,EAAA,CAAC,MAAM,OAAO,CAAA;AACd,EAAA,CAAC,SAAS,gBAAgB,CAAA;AAC1B,EAAA,CAAC,SAAS,gBAAgB;AAC7B,CAAA,CAAA;AAED,IAAM,YAAA,uBAAmB,GAAA,CAAI;AACzB,EAAA,MAAA;AACA,EAAA,MAAA;AACA,EAAA,UAAA;AACA,EAAA,IAAA;AACA,EAAA,KAAA;AACA,EAAA,SAAA;AACA,EAAA,OAAA;AACA,EAAA,OAAA;AACA,EAAA,IAAA;AACA,EAAA,KAAA;AACA,EAAA,OAAA;AACA,EAAA,SAAA;AACA,EAAA,QAAA;AACA,EAAA,MAAA;AACA,EAAA,MAAA;AACA,EAAA,OAAA;AACA,EAAA,QAAA;AACA,EAAA,OAAA;AACA,EAAA;AACH,CAAA,CAAA;AAED,IAAM,yCAAyB,IAAI,GAAA,CAAI,CAAC,MAAA,EAAQ,KAAK,CAAC,CAAA;AAEtD,IAAM,uBAAA,uBAA8B,GAAA,CAAI;AACpC,EAAA,IAAA;AACA,EAAA,IAAA;AACA,EAAA,IAAA;AACA,EAAA,IAAA;AACA,EAAA,OAAA;AACA,EAAA,gBAAA;AACA,EAAA,eAAA;AACA,EAAA,MAAA;AACA,EAAA;AACH,CAAA,CAAA;AA+FD,IAAM,SAAA,GAAY,OAAA;AAEZ,IAAO,SAAP,MAAa;EAiCf,WAAA,CACI,GAAA,EACiB,OAAA,GAAyB,EAAA,EAAE;;AAA3B,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAjCd,IAAA,IAAA,CAAA,UAAA,GAAa,CAAA;AAEb,IAAA,IAAA,CAAA,QAAA,GAAW,CAAA;AAKV,IAAA,IAAA,CAAA,YAAA,GAAe,CAAA;AAEf,IAAA,IAAA,CAAA,OAAA,GAAU,EAAA;AACV,IAAA,IAAA,CAAA,UAAA,GAAa,EAAA;AACb,IAAA,IAAA,CAAA,WAAA,GAAc,EAAA;AACd,IAAA,IAAA,CAAA,OAAA,GAA4C,IAAA;AACnC,IAAA,IAAA,CAAA,QAAkB,EAAA;AAWlB,IAAA,IAAA,CAAA,UAAoB,EAAA;AAC7B,IAAA,IAAA,CAAA,YAAA,GAAe,CAAA;AAEf,IAAA,IAAA,CAAA,UAAA,GAAa,CAAA;AAEb,IAAA,IAAA,CAAA,KAAA,GAAQ,KAAA;AAMZ,IAAA,IAAA,CAAK,MAAM,GAAA,KAAG,IAAA,IAAH,GAAA,KAAG,MAAA,GAAH,MAAO,EAAA;AAClB,IAAA,IAAA,CAAK,QAAA,GAAW,CAAC,IAAA,CAAK,OAAA,CAAQ,OAAA;AAC9B,IAAA,IAAA,CAAK,iBAAA,GAAA,CAAoBF,MAAA,OAAA,CAAQ,aAAA,MAAa,QAAAA,GAAAA,KAAA,MAAA,GAAAA,MAAI,IAAA,CAAK,QAAA;AACvD,IAAA,IAAA,CAAK,uBAAA,GAAA,CACD,KAAA,OAAA,CAAQ,uBAAA,MAAuB,QAAA,EAAA,KAAA,MAAA,GAAA,KAAI,IAAA,CAAK,QAAA;AAC5C,IAAA,IAAA,CAAK,oBAAA,GAAA,CACD,KAAA,OAAA,CAAQ,oBAAA,MAAoB,QAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC,IAAA,CAAK,QAAA;AAC1C,IAAA,IAAA,CAAK,SAAA,GAAY,KAAA,CAAK,EAAA,GAAA,OAAA,CAAQ,SAAA,MAAS,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,SAAA,EACvC,IAAA,CAAK,OAAA,EACL,IAAI,CAAA;AAER,IAAA,IAAA,CAAK,cAAA,GAAiB,CAAC,CAAC,IAAA,CAAK,QAAQ,CAAA;AACrC,IAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,GAAA,EAAI,YAAA,MAAY,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAG,IAAI,CAAA;AAChC,EAAA;;;AAKA,EAAA,MAAA,CAAO,OAAe,QAAA,EAAgB;;AAClC,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,QAAA,CAAS,KAAA,EAAO,QAAQ,CAAA;AAC1C,IAAA,IAAA,CAAK,WAAW,QAAA,GAAW,CAAA;AAC3B,IAAA,CAAA,EAAA,GAAA,CAAAA,GAAAA,GAAA,IAAA,CAAK,GAAA,EAAI,MAAA,MAAM,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAAA,GAAAA,EAAG,IAAI,CAAA;AACtB,IAAA,IAAA,CAAK,UAAA,GAAa,QAAA;AACtB,EAAA;;AAGA,EAAA,YAAA,CAAa,IAAY,QAAA,EAAgB;;AACrC,IAAA,IAAA,CAAK,WAAW,QAAA,GAAW,CAAA;AAC3B,IAAA,CAAA,EAAA,GAAA,CAAAA,GAAAA,GAAA,IAAA,CAAK,GAAA,EAAI,YAAM,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAAA,GAAAA,EAAG,aAAA,CAAc,EAAE,CAAC,CAAA;AACnC,IAAA,IAAA,CAAK,UAAA,GAAa,QAAA;AACtB,EAAA;;;;;AAMU,EAAA,aAAA,CAAc1F,MAAAA,EAAY;AAChC,IAAA,OAAO,IAAA,CAAK,QAAA,IAAY,YAAA,CAAa,GAAA,CAAIA,MAAI,CAAA;AACjD,EAAA;;AAGA,EAAA,aAAA,CAAc,OAAe,QAAA,EAAgB;AACzC,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAEhB,IAAA,IAAIA,MAAAA,GAAO,IAAA,CAAK,QAAA,CAAS,KAAA,EAAO,QAAQ,CAAA;AAExC,IAAA,IAAI,KAAK,iBAAA,EAAmB;AACxB,MAAAA,MAAAA,GAAOA,OAAK,WAAA,EAAW;AAC3B,IAAA;AAEA,IAAA,IAAA,CAAK,YAAYA,MAAI,CAAA;AACzB,EAAA;AAEQ,EAAA,WAAA,CAAYA,MAAAA,EAAY;;AAC5B,IAAA,IAAA,CAAK,eAAe,IAAA,CAAK,UAAA;AACzB,IAAA,IAAA,CAAK,OAAA,GAAUA,MAAAA;AAEf,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,QAAA,IAAY,gBAAA,CAAiB,IAAIA,MAAI,CAAA;AAE/D,IAAA,IAAI,YAAA,EAAc;AACd,MAAA,OAAO,IAAA,CAAK,KAAA,CAAM,MAAA,GAAS,CAAA,IAAK,YAAA,CAAa,IAAI,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG;AAC7D,QAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,KAAA,EAAK;AAChC,QAAA,CAAA,EAAA,GAAA,CAAA0F,GAAAA,GAAA,IAAA,CAAK,GAAA,EAAI,UAAA,MAAU,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAAA,GAAAA,EAAG,SAAS,IAAI,CAAA;AACvC,MAAA;AACJ,IAAA;AACA,IAAA,IAAI,CAAC,IAAA,CAAK,aAAA,CAAc1F,MAAI,CAAA,EAAG;AAC3B,MAAA,IAAA,CAAK,KAAA,CAAM,QAAQA,MAAI,CAAA;AAEvB,MAAA,IAAI,KAAK,QAAA,EAAU;AACf,QAAA,IAAI,sBAAA,CAAuB,GAAA,CAAIA,MAAI,CAAA,EAAG;AAClC,UAAA,IAAA,CAAK,cAAA,CAAe,QAAQ,IAAI,CAAA;QACpC,CAAA,MAAA,IAAW,uBAAA,CAAwB,GAAA,CAAIA,MAAI,CAAA,EAAG;AAC1C,UAAA,IAAA,CAAK,cAAA,CAAe,QAAQ,KAAK,CAAA;AACrC,QAAA;AACJ,MAAA;AACJ,IAAA;AACA,IAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,GAAA,EAAI,aAAA,MAAa,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAGA,MAAI,CAAA;AAC7B,IAAA,IAAI,KAAK,GAAA,CAAI,SAAA;AAAW,MAAA,IAAA,CAAK,UAAU,EAAA;AAC3C,EAAA;AAEQ,EAAA,UAAA,CAAW,SAAA,EAAkB;;AACjC,IAAA,IAAA,CAAK,aAAa,IAAA,CAAK,YAAA;AAEvB,IAAA,IAAI,KAAK,OAAA,EAAS;AACd,MAAA,CAAA,MAAA0F,GAAAA,GAAA,IAAA,CAAK,GAAA,EAAI,SAAA,MAAS,QAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,KAAAA,GAAAA,EAAG,IAAA,CAAK,OAAA,EAAS,IAAA,CAAK,SAAS,SAAS,CAAA;AAC1D,MAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AACnB,IAAA;AACA,IAAA,IAAI,KAAK,GAAA,CAAI,UAAA,IAAc,KAAK,aAAA,CAAc,IAAA,CAAK,OAAO,CAAA,EAAG;AACzD,MAAA,IAAA,CAAK,GAAA,CAAI,UAAA,CAAW,IAAA,CAAK,OAAA,EAAS,IAAI,CAAA;AAC1C,IAAA;AAEA,IAAA,IAAA,CAAK,OAAA,GAAU,EAAA;AACnB,EAAA;;AAGA,EAAA,YAAA,CAAa,QAAA,EAAgB;AACzB,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,IAAA,IAAA,CAAK,WAAW,KAAK,CAAA;AAGrB,IAAA,IAAA,CAAK,aAAa,QAAA,GAAW,CAAA;AACjC,EAAA;;AAGA,EAAA,UAAA,CAAW,OAAe,QAAA,EAAgB;;AACtC,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAEhB,IAAA,IAAI1F,MAAAA,GAAO,IAAA,CAAK,QAAA,CAAS,KAAA,EAAO,QAAQ,CAAA;AAExC,IAAA,IAAI,KAAK,iBAAA,EAAmB;AACxB,MAAAA,MAAAA,GAAOA,OAAK,WAAA,EAAW;AAC3B,IAAA;AAEA,IAAA,IACI,IAAA,CAAK,aACJ,sBAAA,CAAuB,GAAA,CAAIA,MAAI,CAAA,IAC5B,uBAAA,CAAwB,GAAA,CAAIA,MAAI,CAAA,CAAA,EACtC;AACE,MAAA,IAAA,CAAK,eAAe,KAAA,EAAK;AAC7B,IAAA;AAEA,IAAA,IAAI,CAAC,IAAA,CAAK,aAAA,CAAcA,MAAI,CAAA,EAAG;AAC3B,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQA,MAAI,CAAA;AACnC,MAAA,IAAI,QAAQ,EAAA,EAAI;AACZ,QAAA,KAAA,IAAS,KAAA,GAAQ,CAAA,EAAG,KAAA,IAAS,GAAA,EAAK,KAAA,EAAA,EAAS;AACvC,UAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,KAAA,EAAK;AAEhC,UAAA,CAAA,EAAA,GAAA,CAAA0F,GAAAA,GAAA,IAAA,CAAK,GAAA,EAAI,gBAAU,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAAA,GAAAA,EAAG,OAAA,EAAS,UAAU,GAAG,CAAA;AAChD,QAAA;MACJ,CAAA,MAAA,IAAW,IAAA,CAAK,QAAA,IAAY1F,MAAAA,KAAS,GAAA,EAAK;AAEtC,QAAA,IAAA,CAAK,YAAY,GAAG,CAAA;AACpB,QAAA,IAAA,CAAK,gBAAgB,IAAI,CAAA;AAC7B,MAAA;IACJ,CAAA,MAAA,IAAW,IAAA,CAAK,QAAA,IAAYA,MAAAA,KAAS,IAAA,EAAM;AAEvC,MAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,GAAA,EAAI,aAAA,MAAa,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAG,IAAI,CAAA;AAC7B,MAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,GAAA,EAAI,eAAS,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,GAAA,IAAA,CAAA,EAAA,EAAG,IAAA,EAAM,IAAI,IAAI,CAAA;AACnC,MAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,GAAA,EAAI,UAAA,MAAU,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAG,MAAM,KAAK,CAAA;AACrC,IAAA;AAGA,IAAA,IAAA,CAAK,aAAa,QAAA,GAAW,CAAA;AACjC,EAAA;;AAGA,EAAA,gBAAA,CAAiB,QAAA,EAAgB;AAC7B,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,IAAA,IAAI,IAAA,CAAK,oBAAA,IAAwB,IAAA,CAAK,cAAA,CAAe,CAAC,CAAA,EAAG;AACrD,MAAA,IAAA,CAAK,gBAAgB,KAAK,CAAA;AAG1B,MAAA,IAAA,CAAK,aAAa,QAAA,GAAW,CAAA;IACjC,CAAA,MAAO;AAEH,MAAA,IAAA,CAAK,aAAa,QAAQ,CAAA;AAC9B,IAAA;AACJ,EAAA;AAEQ,EAAA,eAAA,CAAgB,aAAA,EAAsB;;AAC1C,IAAA,MAAMA,SAAO,IAAA,CAAK,OAAA;AAClB,IAAA,IAAA,CAAK,WAAW,aAAa,CAAA;AAG7B,IAAA,IAAI,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,KAAMA,MAAAA,EAAM;AAExB,MAAA,CAAA,EAAA,GAAA,CAAA0F,GAAAA,GAAA,IAAA,CAAK,GAAA,EAAI,gBAAU,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAAA,GAAAA,EAAG1F,MAAAA,EAAM,CAAC,aAAa,CAAA;AAC1C,MAAA,IAAA,CAAK,MAAM,KAAA,EAAK;AACpB,IAAA;AACJ,EAAA;;AAGA,EAAA,YAAA,CAAa,OAAe,QAAA,EAAgB;AACxC,IAAA,IAAA,CAAK,UAAA,GAAa,KAAA;AAClB,IAAA,MAAMA,MAAAA,GAAO,IAAA,CAAK,QAAA,CAAS,KAAA,EAAO,QAAQ,CAAA;AAE1C,IAAA,IAAA,CAAK,UAAA,GAAa,IAAA,CAAK,uBAAA,GACjBA,MAAAA,CAAK,aAAW,GAChBA,MAAAA;AACV,EAAA;;AAGA,EAAA,YAAA,CAAa,OAAe,QAAA,EAAgB;AACxC,IAAA,IAAA,CAAK,WAAA,IAAe,IAAA,CAAK,QAAA,CAAS,KAAA,EAAO,QAAQ,CAAA;AACrD,EAAA;;AAGA,EAAA,cAAA,CAAe,EAAA,EAAU;AACrB,IAAA,IAAA,CAAK,WAAA,IAAe,cAAc,EAAE,CAAA;AACxC,EAAA;;AAGA,EAAA,WAAA,CAAY,OAAkB,QAAA,EAAgB;;AAC1C,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAEhB,IAAA,CAAA,EAAA,GAAA,CAAA0F,GAAAA,GAAA,IAAA,CAAK,GAAA,EAAI,WAAA,MAAW,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAAA,GAAAA,EAChB,IAAA,CAAK,UAAA,EACL,IAAA,CAAK,WAAA,EACL,KAAA,KAAU,SAAA,CAAU,MAAA,GACd,GAAA,GACA,KAAA,KAAU,SAAA,CAAU,MAAA,GAClB,GAAA,GACA,KAAA,KAAU,SAAA,CAAU,OAAA,GAClB,MAAA,GACA,IAAI,CAAA;AAGlB,IAAA,IACI,IAAA,CAAK,OAAA,IACL,CAAC,MAAA,CAAO,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,IAAA,CAAK,OAAA,EAAS,IAAA,CAAK,UAAU,CAAA,EACrE;AACE,MAAA,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA,GAAI,IAAA,CAAK,WAAA;AACzC,IAAA;AACA,IAAA,IAAA,CAAK,WAAA,GAAc,EAAA;AACvB,EAAA;AAEQ,EAAA,kBAAA,CAAmB,KAAA,EAAa;AACpC,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,MAAA,CAAO,SAAS,CAAA;AACpC,IAAA,IAAI1F,SAAO,KAAA,GAAQ,CAAA,GAAI,QAAQ,KAAA,CAAM,MAAA,CAAO,GAAG,KAAK,CAAA;AAEpD,IAAA,IAAI,KAAK,iBAAA,EAAmB;AACxB,MAAAA,MAAAA,GAAOA,OAAK,WAAA,EAAW;AAC3B,IAAA;AAEA,IAAA,OAAOA,MAAAA;AACX,EAAA;;AAGA,EAAA,aAAA,CAAc,OAAe,QAAA,EAAgB;AACzC,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,QAAA,CAAS,KAAA,EAAO,QAAQ,CAAA;AAE3C,IAAA,IAAI,IAAA,CAAK,IAAI,uBAAA,EAAyB;AAClC,MAAA,MAAMA,MAAAA,GAAO,IAAA,CAAK,kBAAA,CAAmB,KAAK,CAAA;AAC1C,MAAA,IAAA,CAAK,IAAI,uBAAA,CAAwB,CAAA,CAAA,EAAIA,MAAI,CAAA,CAAA,EAAI,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE,CAAA;AAC5D,IAAA;AAGA,IAAA,IAAA,CAAK,aAAa,QAAA,GAAW,CAAA;AACjC,EAAA;;AAGA,EAAA,uBAAA,CAAwB,OAAe,QAAA,EAAgB;AACnD,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,QAAA,CAAS,KAAA,EAAO,QAAQ,CAAA;AAE3C,IAAA,IAAI,IAAA,CAAK,IAAI,uBAAA,EAAyB;AAClC,MAAA,MAAMA,MAAAA,GAAO,IAAA,CAAK,kBAAA,CAAmB,KAAK,CAAA;AAC1C,MAAA,IAAA,CAAK,IAAI,uBAAA,CAAwB,CAAA,CAAA,EAAIA,MAAI,CAAA,CAAA,EAAI,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE,CAAA;AAC5D,IAAA;AAGA,IAAA,IAAA,CAAK,aAAa,QAAA,GAAW,CAAA;AACjC,EAAA;;EAGA,SAAA,CAAU,KAAA,EAAe,UAAkB,MAAA,EAAc;;AACrD,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAEhB,IAAA,CAAA,MAAA0F,GAAAA,GAAA,IAAA,CAAK,GAAA,EAAI,SAAA,MAAS,QAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,KAAAA,GAAAA,EAAG,IAAA,CAAK,SAAS,KAAA,EAAO,QAAA,GAAW,MAAM,CAAC,CAAA;AAC5D,IAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,GAAA,EAAI,YAAA,MAAY,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA;AAGrB,IAAA,IAAA,CAAK,aAAa,QAAA,GAAW,CAAA;AACjC,EAAA;;EAGA,OAAA,CAAQ,KAAA,EAAe,UAAkB,MAAA,EAAc;;AACnD,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,QAAA,CAAS,KAAA,EAAO,WAAW,MAAM,CAAA;AAEpD,IAAA,IAAI,CAAC,IAAA,CAAK,QAAA,IAAY,IAAA,CAAK,QAAQ,cAAA,EAAgB;AAC/C,MAAA,CAAA,EAAA,GAAA,CAAAA,GAAAA,GAAA,IAAA,CAAK,GAAA,EAAI,YAAA,MAAY,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAAA,GAAA,CAAA;AACrB,MAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,GAAA,EAAI,MAAA,MAAM,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAG,KAAK,CAAA;AACvB,MAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,GAAA,EAAI,UAAA,MAAU,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA;IACvB,CAAA,MAAO;AACH,MAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,GAAA,EAAI,eAAS,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAG,CAAA,OAAA,EAAU,KAAK,CAAA,EAAA,CAAI,CAAA;AACxC,MAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,GAAA,EAAI,YAAA,MAAY,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA;AACzB,IAAA;AAGA,IAAA,IAAA,CAAK,aAAa,QAAA,GAAW,CAAA;AACjC,EAAA;;EAGA,KAAA,GAAK;;AACD,IAAA,IAAI,IAAA,CAAK,IAAI,UAAA,EAAY;AAErB,MAAA,IAAA,CAAK,WAAW,IAAA,CAAK,UAAA;AACrB,MAAA,KAAA,IAAS,QAAQ,CAAA,EAAG,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,QAAQ,KAAA,EAAA,EAAS;AACpD,QAAA,IAAA,CAAK,IAAI,UAAA,CAAW,IAAA,CAAK,KAAA,CAAM,KAAK,GAAG,IAAI,CAAA;AAC/C,MAAA;AACJ,IAAA;AACA,IAAA,CAAA,EAAA,GAAA,CAAAA,GAAAA,GAAA,IAAA,CAAK,GAAA,EAAI,KAAA,MAAK,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAAA,GAAA,CAAA;AAClB,EAAA;;;;EAKO,KAAA,GAAK;;AACR,IAAA,CAAA,EAAA,GAAA,CAAAA,GAAAA,GAAA,IAAA,CAAK,GAAA,EAAI,OAAA,MAAO,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAAA,GAAA,CAAA;AAChB,IAAA,IAAA,CAAK,UAAU,KAAA,EAAK;AACpB,IAAA,IAAA,CAAK,OAAA,GAAU,EAAA;AACf,IAAA,IAAA,CAAK,UAAA,GAAa,EAAA;AAClB,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AACf,IAAA,IAAA,CAAK,MAAM,MAAA,GAAS,CAAA;AACpB,IAAA,IAAA,CAAK,UAAA,GAAa,CAAA;AAClB,IAAA,IAAA,CAAK,QAAA,GAAW,CAAA;AAChB,IAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,GAAA,EAAI,YAAA,MAAY,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAG,IAAI,CAAA;AAC5B,IAAA,IAAA,CAAK,QAAQ,MAAA,GAAS,CAAA;AACtB,IAAA,IAAA,CAAK,eAAe,MAAA,GAAS,CAAA;AAC7B,IAAA,IAAA,CAAK,cAAA,CAAe,OAAA,CAAQ,CAAC,IAAA,CAAK,QAAQ,CAAA;AAC1C,IAAA,IAAA,CAAK,YAAA,GAAe,CAAA;AACpB,IAAA,IAAA,CAAK,UAAA,GAAa,CAAA;AAClB,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AACjB,EAAA;;;;;;;AAQO,EAAA,aAAA,CAAc,IAAA,EAAY;AAC7B,IAAA,IAAA,CAAK,KAAA,EAAK;AACV,IAAA,IAAA,CAAK,IAAI,IAAI,CAAA;AACjB,EAAA;AAEQ,EAAA,QAAA,CAAS,OAAe,GAAA,EAAW;AACvC,IAAA,OAAO,QAAQ,IAAA,CAAK,YAAA,IAAgB,KAAK,OAAA,CAAQ,CAAC,EAAE,MAAA,EAAQ;AACxD,MAAA,IAAA,CAAK,WAAA,EAAW;AACpB,IAAA;AAEA,IAAA,IAAI,KAAA,GAAQ,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAA,CAAE,KAAA,CACxB,KAAA,GAAQ,IAAA,CAAK,YAAA,EACb,GAAA,GAAM,IAAA,CAAK,YAAY,CAAA;AAG3B,IAAA,OAAO,MAAM,IAAA,CAAK,YAAA,GAAe,KAAK,OAAA,CAAQ,CAAC,EAAE,MAAA,EAAQ;AACrD,MAAA,IAAA,CAAK,WAAA,EAAW;AAChB,MAAA,KAAA,IAAS,IAAA,CAAK,QAAQ,CAAC,CAAA,CAAE,MAAM,CAAA,EAAG,GAAA,GAAM,KAAK,YAAY,CAAA;AAC7D,IAAA;AAEA,IAAA,OAAO,KAAA;AACX,EAAA;EAEQ,WAAA,GAAW;AACf,IAAA,IAAA,CAAK,YAAA,IAAgB,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAA,CAAE,MAAA;AACrC,IAAA,IAAA,CAAK,UAAA,EAAA;AACL,IAAA,IAAA,CAAK,QAAQ,KAAA,EAAK;AACtB,EAAA;;;;;;AAOO,EAAA,KAAA,CAAM,KAAA,EAAa;;AACtB,IAAA,IAAI,KAAK,KAAA,EAAO;AACZ,MAAA,CAAA,EAAA,GAAA,CAAAA,GAAAA,GAAA,IAAA,CAAK,GAAA,EAAI,aAAO,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,GAAA,IAAA,CAAAA,GAAAA,EAAG,IAAI,KAAA,CAAM,sBAAsB,CAAC,CAAA;AACpD,MAAA;AACJ,IAAA;AAEA,IAAA,IAAA,CAAK,OAAA,CAAQ,KAAK,KAAK,CAAA;AACvB,IAAA,IAAI,IAAA,CAAK,UAAU,OAAA,EAAS;AACxB,MAAA,IAAA,CAAK,SAAA,CAAU,MAAM,KAAK,CAAA;AAC1B,MAAA,IAAA,CAAK,UAAA,EAAA;AACT,IAAA;AACJ,EAAA;;;;;;AAOO,EAAA,GAAA,CAAI,KAAA,EAAc;;AACrB,IAAA,IAAI,KAAK,KAAA,EAAO;AACZ,MAAA,CAAA,EAAA,GAAA,CAAAA,GAAAA,GAAA,IAAA,CAAK,GAAA,EAAI,aAAO,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,GAAA,IAAA,CAAAA,GAAAA,EAAG,IAAI,KAAA,CAAM,oBAAoB,CAAC,CAAA;AAClD,MAAA;AACJ,IAAA;AAEA,IAAA,IAAI,KAAA;AAAO,MAAA,IAAA,CAAK,MAAM,KAAK,CAAA;AAC3B,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAA;AACb,IAAA,IAAA,CAAK,UAAU,GAAA,EAAG;AACtB,EAAA;;;;EAKO,KAAA,GAAK;AACR,IAAA,IAAA,CAAK,UAAU,KAAA,EAAK;AACxB,EAAA;;;;EAKO,MAAA,GAAM;AACT,IAAA,IAAA,CAAK,UAAU,MAAA,EAAM;AAErB,IAAA,OACI,KAAK,SAAA,CAAU,OAAA,IACf,KAAK,UAAA,GAAa,IAAA,CAAK,QAAQ,MAAA,EACjC;AACE,MAAA,IAAA,CAAK,UAAU,KAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,YAAY,CAAC,CAAA;AACxD,IAAA;AAEA,IAAA,IAAI,IAAA,CAAK,KAAA;AAAO,MAAA,IAAA,CAAK,UAAU,GAAA,EAAG;AACtC,EAAA;;;;;;;AAQO,EAAA,UAAA,CAAW,KAAA,EAAa;AAC3B,IAAA,IAAA,CAAK,MAAM,KAAK,CAAA;AACpB,EAAA;;;;;;;AAOO,EAAA,IAAA,CAAK,KAAA,EAAc;AACtB,IAAA,IAAA,CAAK,IAAI,KAAK,CAAA;AAClB,EAAA;;;;ACppBG,IAAI,WAAA;AAAA,CACV,SAAUQ,YAAAA,EAAa;AAEpB,EAAAA,YAAAA,CAAY,MAAM,CAAA,GAAI,MAAA;AAEtB,EAAAA,YAAAA,CAAY,MAAM,CAAA,GAAI,MAAA;AAEtB,EAAAA,YAAAA,CAAY,WAAW,CAAA,GAAI,WAAA;AAE3B,EAAAA,YAAAA,CAAY,SAAS,CAAA,GAAI,SAAA;AAEzB,EAAAA,YAAAA,CAAY,QAAQ,CAAA,GAAI,QAAA;AAExB,EAAAA,YAAAA,CAAY,OAAO,CAAA,GAAI,OAAA;AAEvB,EAAAA,YAAAA,CAAY,KAAK,CAAA,GAAI,KAAA;AAErB,EAAAA,YAAAA,CAAY,OAAO,CAAA,GAAI,OAAA;AAEvB,EAAAA,YAAAA,CAAY,SAAS,CAAA,GAAI,SAAA;AAC7B,CAAA,EAAG,WAAA,KAAgB,WAAA,GAAc,EAAC,CAAE,CAAA;AAM7B,SAAS,MAAM,IAAA,EAAM;AACxB,EAAA,OAAQ,IAAA,CAAK,IAAA,KAAS,WAAA,CAAY,GAAA,IAC9B,IAAA,CAAK,SAAS,WAAA,CAAY,MAAA,IAC1B,IAAA,CAAK,IAAA,KAAS,WAAA,CAAY,KAAA;AAClC;AAGoB,WAAA,CAAY;AAEZ,WAAA,CAAY;AAEP,WAAA,CAAY;AAEd,WAAA,CAAY;AAEb,WAAA,CAAY;AAEb,WAAA,CAAY;AAEd,WAAA,CAAY;AAEV,WAAA,CAAY;AAEV,WAAA,CAAY;;;AC7C5B,IAAM,OAAN,MAAW;AAAA,EACd,WAAA,GAAc;AAEV,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AAEd,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAEZ,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAEZ,IAAA,IAAA,CAAK,UAAA,GAAa,IAAA;AAElB,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,UAAA,GAAa;AACb,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EAChB;AAAA,EACA,IAAI,WAAW,MAAA,EAAQ;AACnB,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,eAAA,GAAkB;AAClB,IAAA,OAAO,IAAA,CAAK,IAAA;AAAA,EAChB;AAAA,EACA,IAAI,gBAAgB,IAAA,EAAM;AACtB,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,WAAA,GAAc;AACd,IAAA,OAAO,IAAA,CAAK,IAAA;AAAA,EAChB;AAAA,EACA,IAAI,YAAY,IAAA,EAAM;AAClB,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,SAAA,CAAU,YAAY,KAAA,EAAO;AACzB,IAAA,OAAO,SAAA,CAAU,MAAM,SAAS,CAAA;AAAA,EACpC;AACJ,CAAA;AAIO,IAAM,QAAA,GAAN,cAAuB,IAAA,CAAK;AAAA;AAAA;AAAA;AAAA,EAI/B,YAAY,IAAA,EAAM;AACd,IAAA,KAAA,EAAM;AACN,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,SAAA,GAAY;AACZ,IAAA,OAAO,IAAA,CAAK,IAAA;AAAA,EAChB;AAAA,EACA,IAAI,UAAU,IAAA,EAAM;AAChB,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAAA,EAChB;AACJ,CAAA;AAIO,IAAMC,KAAAA,GAAN,cAAmB,QAAA,CAAS;AAAA,EAC/B,WAAA,GAAc;AACV,IAAA,KAAA,CAAM,GAAG,SAAS,CAAA;AAClB,IAAA,IAAA,CAAK,OAAO,WAAA,CAAY,IAAA;AAAA,EAC5B;AAAA,EACA,IAAI,QAAA,GAAW;AACX,IAAA,OAAO,CAAA;AAAA,EACX;AACJ,CAAA;AAIO,IAAMC,QAAAA,GAAN,cAAsB,QAAA,CAAS;AAAA,EAClC,WAAA,GAAc;AACV,IAAA,KAAA,CAAM,GAAG,SAAS,CAAA;AAClB,IAAA,IAAA,CAAK,OAAO,WAAA,CAAY,OAAA;AAAA,EAC5B;AAAA,EACA,IAAI,QAAA,GAAW;AACX,IAAA,OAAO,CAAA;AAAA,EACX;AACJ,CAAA;AAIO,IAAM,qBAAA,GAAN,cAAoC,QAAA,CAAS;AAAA,EAChD,WAAA,CAAYpG,QAAM,IAAA,EAAM;AACpB,IAAA,KAAA,CAAM,IAAI,CAAA;AACV,IAAA,IAAA,CAAK,IAAA,GAAOA,MAAAA;AACZ,IAAA,IAAA,CAAK,OAAO,WAAA,CAAY,SAAA;AAAA,EAC5B;AAAA,EACA,IAAI,QAAA,GAAW;AACX,IAAA,OAAO,CAAA;AAAA,EACX;AACJ,CAAA;AAIO,IAAM,gBAAA,GAAN,cAA+B,IAAA,CAAK;AAAA;AAAA;AAAA;AAAA,EAIvC,YAAY,QAAA,EAAU;AAClB,IAAA,KAAA,EAAM;AACN,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAAA,EACpB;AAAA;AAAA;AAAA,EAGA,IAAI,UAAA,GAAa;AACb,IAAA,IAAI0F,GAAAA;AACJ,IAAA,OAAA,CAAQA,GAAAA,GAAK,KAAK,QAAA,CAAS,CAAC,OAAO,IAAA,IAAQA,GAAAA,KAAO,SAASA,GAAAA,GAAK,IAAA;AAAA,EACpE;AAAA;AAAA,EAEA,IAAI,SAAA,GAAY;AACZ,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,MAAA,GAAS,CAAA,GACxB,IAAA,CAAK,SAAS,IAAA,CAAK,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA,GACtC,IAAA;AAAA,EACV;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,UAAA,GAAa;AACb,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EAChB;AAAA,EACA,IAAI,WAAW,QAAA,EAAU;AACrB,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAAA,EACpB;AACJ,CAAA;AACO,IAAMW,MAAAA,GAAN,cAAoB,gBAAA,CAAiB;AAAA,EACxC,WAAA,GAAc;AACV,IAAA,KAAA,CAAM,GAAG,SAAS,CAAA;AAClB,IAAA,IAAA,CAAK,OAAO,WAAA,CAAY,KAAA;AAAA,EAC5B;AAAA,EACA,IAAI,QAAA,GAAW;AACX,IAAA,OAAO,CAAA;AAAA,EACX;AACJ,CAAA;AAIO,IAAM,QAAA,GAAN,cAAuB,gBAAA,CAAiB;AAAA,EAC3C,WAAA,GAAc;AACV,IAAA,KAAA,CAAM,GAAG,SAAS,CAAA;AAClB,IAAA,IAAA,CAAK,OAAO,WAAA,CAAY,IAAA;AAAA,EAC5B;AAAA,EACA,IAAI,QAAA,GAAW;AACX,IAAA,OAAO,CAAA;AAAA,EACX;AACJ,CAAA;AAIO,IAAM,OAAA,GAAN,cAAsB,gBAAA,CAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAM1C,YAAYrG,MAAAA,EAAM,OAAA,EAAS,QAAA,GAAW,IAAI,IAAA,GAAOA,MAAAA,KAAS,QAAA,GACpD,WAAA,CAAY,SACZA,MAAAA,KAAS,OAAA,GACL,WAAA,CAAY,KAAA,GACZ,YAAY,GAAA,EAAK;AACvB,IAAA,KAAA,CAAM,QAAQ,CAAA;AACd,IAAA,IAAA,CAAK,IAAA,GAAOA,MAAAA;AACZ,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAAA,EAChB;AAAA,EACA,IAAI,QAAA,GAAW;AACX,IAAA,OAAO,CAAA;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,OAAA,GAAU;AACV,IAAA,OAAO,IAAA,CAAK,IAAA;AAAA,EAChB;AAAA,EACA,IAAI,QAAQA,MAAAA,EAAM;AACd,IAAA,IAAA,CAAK,IAAA,GAAOA,MAAAA;AAAA,EAChB;AAAA,EACA,IAAI,UAAA,GAAa;AACb,IAAA,OAAO,OAAO,IAAA,CAAK,IAAA,CAAK,OAAO,CAAA,CAAE,GAAA,CAAI,CAACA,MAAAA,KAAS;AAC3C,MAAA,IAAI0F,GAAAA,EAAI,EAAA;AACR,MAAA,OAAQ;AAAA,QACJ,IAAA,EAAA1F,MAAAA;AAAA,QACA,KAAA,EAAO,IAAA,CAAK,OAAA,CAAQA,MAAI,CAAA;AAAA,QACxB,SAAA,EAAA,CAAY0F,GAAAA,GAAK,IAAA,CAAK,oBAAoB,CAAA,MAAO,QAAQA,GAAAA,KAAO,MAAA,GAAS,MAAA,GAASA,GAAAA,CAAG1F,MAAI,CAAA;AAAA,QACzF,MAAA,EAAA,CAAS,EAAA,GAAK,IAAA,CAAK,iBAAiB,CAAA,MAAO,QAAQ,EAAA,KAAO,MAAA,GAAS,MAAA,GAAS,EAAA,CAAGA,MAAI;AAAA,OACvF;AAAA,IACJ,CAAC,CAAA;AAAA,EACL;AACJ,CAAA;AAKO,SAASsG,OAAM,IAAA,EAAM;AACxB,EAAA,OAAO,MAAS,IAAI,CAAA;AACxB;AAKO,SAAS,QAAQ,IAAA,EAAM;AAC1B,EAAA,OAAO,IAAA,CAAK,SAAS,WAAA,CAAY,KAAA;AACrC;AAKO,SAAS,OAAO,IAAA,EAAM;AACzB,EAAA,OAAO,IAAA,CAAK,SAAS,WAAA,CAAY,IAAA;AACrC;AAKO,SAAS,UAAU,IAAA,EAAM;AAC5B,EAAA,OAAO,IAAA,CAAK,SAAS,WAAA,CAAY,OAAA;AACrC;AAKO,SAAS,YAAY,IAAA,EAAM;AAC9B,EAAA,OAAO,IAAA,CAAK,SAAS,WAAA,CAAY,SAAA;AACrC;AAKO,SAAS,WAAW,IAAA,EAAM;AAC7B,EAAA,OAAO,IAAA,CAAK,SAAS,WAAA,CAAY,IAAA;AACrC;AAcO,SAAS,SAAA,CAAU,IAAA,EAAM,SAAA,GAAY,KAAA,EAAO;AAC/C,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI,MAAA,CAAO,IAAI,CAAA,EAAG;AACd,IAAA,MAAA,GAAS,IAAIH,KAAAA,CAAK,IAAA,CAAK,IAAI,CAAA;AAAA,EAC/B,CAAA,MAAA,IACS,SAAA,CAAU,IAAI,CAAA,EAAG;AACtB,IAAA,MAAA,GAAS,IAAIC,QAAAA,CAAQ,IAAA,CAAK,IAAI,CAAA;AAAA,EAClC,CAAA,MAAA,IACSE,MAAAA,CAAM,IAAI,CAAA,EAAG;AAClB,IAAA,MAAM,WAAW,SAAA,GAAY,aAAA,CAAc,IAAA,CAAK,QAAQ,IAAI,EAAC;AAC7D,IAAA,MAAM,KAAA,GAAQ,IAAI,OAAA,CAAQ,IAAA,CAAK,IAAA,EAAM,EAAE,GAAG,IAAA,CAAK,OAAA,EAAQ,EAAG,QAAQ,CAAA;AAClE,IAAA,QAAA,CAAS,OAAA,CAAQ,CAAC,KAAA,KAAW,KAAA,CAAM,SAAS,KAAM,CAAA;AAClD,IAAA,IAAI,IAAA,CAAK,aAAa,IAAA,EAAM;AACxB,MAAA,KAAA,CAAM,YAAY,IAAA,CAAK,SAAA;AAAA,IAC3B;AACA,IAAA,IAAI,IAAA,CAAK,oBAAoB,CAAA,EAAG;AAC5B,MAAA,KAAA,CAAM,oBAAoB,CAAA,GAAI,EAAE,GAAG,IAAA,CAAK,oBAAoB,CAAA,EAAE;AAAA,IAClE;AACA,IAAA,IAAI,IAAA,CAAK,iBAAiB,CAAA,EAAG;AACzB,MAAA,KAAA,CAAM,iBAAiB,CAAA,GAAI,EAAE,GAAG,IAAA,CAAK,iBAAiB,CAAA,EAAE;AAAA,IAC5D;AACA,IAAA,MAAA,GAAS,KAAA;AAAA,EACb,CAAA,MAAA,IACS,OAAA,CAAQ,IAAI,CAAA,EAAG;AACpB,IAAA,MAAM,WAAW,SAAA,GAAY,aAAA,CAAc,IAAA,CAAK,QAAQ,IAAI,EAAC;AAC7D,IAAA,MAAM,KAAA,GAAQ,IAAID,MAAAA,CAAM,QAAQ,CAAA;AAChC,IAAA,QAAA,CAAS,OAAA,CAAQ,CAAC,KAAA,KAAW,KAAA,CAAM,SAAS,KAAM,CAAA;AAClD,IAAA,MAAA,GAAS,KAAA;AAAA,EACb,CAAA,MAAA,IACS,UAAA,CAAW,IAAI,CAAA,EAAG;AACvB,IAAA,MAAM,WAAW,SAAA,GAAY,aAAA,CAAc,IAAA,CAAK,QAAQ,IAAI,EAAC;AAC7D,IAAA,MAAM,KAAA,GAAQ,IAAI,QAAA,CAAS,QAAQ,CAAA;AACnC,IAAA,QAAA,CAAS,OAAA,CAAQ,CAAC,KAAA,KAAW,KAAA,CAAM,SAAS,KAAM,CAAA;AAClD,IAAA,IAAI,IAAA,CAAK,QAAQ,CAAA,EAAG;AAChB,MAAA,KAAA,CAAM,QAAQ,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA;AAAA,IACnC;AACA,IAAA,MAAA,GAAS,KAAA;AAAA,EACb,CAAA,MAAA,IACS,WAAA,CAAY,IAAI,CAAA,EAAG;AACxB,IAAA,MAAM,cAAc,IAAI,qBAAA,CAAsB,IAAA,CAAK,IAAA,EAAM,KAAK,IAAI,CAAA;AAClE,IAAA,IAAI,IAAA,CAAK,QAAQ,CAAA,IAAK,IAAA,EAAM;AACxB,MAAA,WAAA,CAAY,QAAQ,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA;AACrC,MAAA,WAAA,CAAY,YAAY,CAAA,GAAI,IAAA,CAAK,YAAY,CAAA;AAC7C,MAAA,WAAA,CAAY,YAAY,CAAA,GAAI,IAAA,CAAK,YAAY,CAAA;AAAA,IACjD;AACA,IAAA,MAAA,GAAS,WAAA;AAAA,EACb,CAAA,MACK;AACD,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qBAAA,EAAwB,IAAA,CAAK,IAAI,CAAA,CAAE,CAAA;AAAA,EACvD;AACA,EAAA,MAAA,CAAO,aAAa,IAAA,CAAK,UAAA;AACzB,EAAA,MAAA,CAAO,WAAW,IAAA,CAAK,QAAA;AACvB,EAAA,IAAI,IAAA,CAAK,sBAAsB,IAAA,EAAM;AACjC,IAAA,MAAA,CAAO,qBAAqB,IAAA,CAAK,kBAAA;AAAA,EACrC;AACA,EAAA,OAAO,MAAA;AACX;AACA,SAAS,cAAc,MAAA,EAAQ;AAC3B,EAAA,MAAM,QAAA,GAAW,OAAO,GAAA,CAAI,CAAC,UAAU,SAAA,CAAU,KAAA,EAAO,IAAI,CAAC,CAAA;AAC7D,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,CAAS,QAAQ,CAAA,EAAA,EAAK;AACtC,IAAA,QAAA,CAAS,CAAC,CAAA,CAAE,IAAA,GAAO,QAAA,CAAS,IAAI,CAAC,CAAA;AACjC,IAAA,QAAA,CAAS,CAAA,GAAI,CAAC,CAAA,CAAE,IAAA,GAAO,SAAS,CAAC,CAAA;AAAA,EACrC;AACA,EAAA,OAAO,QAAA;AACX;;;AC7UA,IAAM,WAAA,GAAc;AAAA,EAChB,gBAAA,EAAkB,KAAA;AAAA,EAClB,cAAA,EAAgB,KAAA;AAAA,EAChB,OAAA,EAAS;AACb,CAAA;AACO,IAAM,aAAN,MAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMpB,WAAA,CAAY,QAAA,EAAU,OAAA,EAAS,SAAA,EAAW;AAEtC,IAAA,IAAA,CAAK,MAAM,EAAC;AAEZ,IAAA,IAAA,CAAK,IAAA,GAAO,IAAI,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA;AAEjC,IAAA,IAAA,CAAK,IAAA,GAAO,KAAA;AAEZ,IAAA,IAAA,CAAK,QAAA,GAAW,CAAC,IAAA,CAAK,IAAI,CAAA;AAE1B,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAEhB,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AAEd,IAAA,IAAI,OAAO,YAAY,UAAA,EAAY;AAC/B,MAAA,SAAA,GAAY,OAAA;AACZ,MAAA,OAAA,GAAU,WAAA;AAAA,IACd;AACA,IAAA,IAAI,OAAO,aAAa,QAAA,EAAU;AAC9B,MAAA,OAAA,GAAU,QAAA;AACV,MAAA,QAAA,GAAW,MAAA;AAAA,IACf;AACA,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA,KAAa,IAAA,IAAQ,QAAA,KAAa,SAAS,QAAA,GAAW,IAAA;AACtE,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA,KAAY,IAAA,IAAQ,OAAA,KAAY,SAAS,OAAA,GAAU,WAAA;AAClE,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA,KAAc,IAAA,IAAQ,SAAA,KAAc,SAAS,SAAA,GAAY,IAAA;AAAA,EAC9E;AAAA,EACA,aAAa,MAAA,EAAQ;AACjB,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAClB;AAAA;AAAA,EAEA,OAAA,GAAU;AACN,IAAA,IAAA,CAAK,MAAM,EAAC;AACZ,IAAA,IAAA,CAAK,IAAA,GAAO,IAAI,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA;AACjC,IAAA,IAAA,CAAK,IAAA,GAAO,KAAA;AACZ,IAAA,IAAA,CAAK,QAAA,GAAW,CAAC,IAAA,CAAK,IAAI,CAAA;AAC1B,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAChB,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AAAA,EAClB;AAAA;AAAA,EAEA,KAAA,GAAQ;AACJ,IAAA,IAAI,IAAA,CAAK,IAAA;AACL,MAAA;AACJ,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AACd,IAAA,IAAA,CAAK,eAAe,IAAI,CAAA;AAAA,EAC5B;AAAA,EACA,QAAQ,KAAA,EAAO;AACX,IAAA,IAAA,CAAK,eAAe,KAAK,CAAA;AAAA,EAC7B;AAAA,EACA,UAAA,GAAa;AACT,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAChB,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,QAAA,CAAS,GAAA,EAAI;AAC/B,IAAA,IAAI,IAAA,CAAK,QAAQ,cAAA,EAAgB;AAC7B,MAAA,IAAA,CAAK,QAAA,GAAW,KAAK,MAAA,CAAO,QAAA;AAAA,IAChC;AACA,IAAA,IAAI,IAAA,CAAK,SAAA;AACL,MAAA,IAAA,CAAK,UAAU,IAAI,CAAA;AAAA,EAC3B;AAAA,EACA,SAAA,CAAUrG,QAAM,OAAA,EAAS;AACrB,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,OAAA,GAAU,YAAY,GAAA,GAAM,MAAA;AACtD,IAAA,MAAM,UAAU,IAAI,OAAA,CAAQA,MAAAA,EAAM,OAAA,EAAS,QAAW,IAAI,CAAA;AAC1D,IAAA,IAAA,CAAK,QAAQ,OAAO,CAAA;AACpB,IAAA,IAAA,CAAK,QAAA,CAAS,KAAK,OAAO,CAAA;AAAA,EAC9B;AAAA,EACA,OAAO,IAAA,EAAM;AACT,IAAA,MAAM,EAAE,UAAS,GAAI,IAAA;AACrB,IAAA,IAAI,QAAA,IAAY,QAAA,CAAS,IAAA,KAAS,WAAA,CAAY,IAAA,EAAM;AAChD,MAAA,QAAA,CAAS,IAAA,IAAQ,IAAA;AACjB,MAAA,IAAI,IAAA,CAAK,QAAQ,cAAA,EAAgB;AAC7B,QAAA,QAAA,CAAS,QAAA,GAAW,KAAK,MAAA,CAAO,QAAA;AAAA,MACpC;AAAA,IACJ,CAAA,MACK;AACD,MAAA,MAAM,IAAA,GAAO,IAAImG,KAAAA,CAAK,IAAI,CAAA;AAC1B,MAAA,IAAA,CAAK,QAAQ,IAAI,CAAA;AACjB,MAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAAA,IACpB;AAAA,EACJ;AAAA,EACA,UAAU,IAAA,EAAM;AACZ,IAAA,IAAI,KAAK,QAAA,IAAY,IAAA,CAAK,QAAA,CAAS,IAAA,KAAS,YAAY,OAAA,EAAS;AAC7D,MAAA,IAAA,CAAK,SAAS,IAAA,IAAQ,IAAA;AACtB,MAAA;AAAA,IACJ;AACA,IAAA,MAAM,IAAA,GAAO,IAAIC,QAAAA,CAAQ,IAAI,CAAA;AAC7B,IAAA,IAAA,CAAK,QAAQ,IAAI,CAAA;AACjB,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAAA,EACpB;AAAA,EACA,YAAA,GAAe;AACX,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAAA,EACpB;AAAA,EACA,YAAA,GAAe;AACX,IAAA,MAAM,IAAA,GAAO,IAAID,KAAAA,CAAK,EAAE,CAAA;AACxB,IAAA,MAAM,IAAA,GAAO,IAAIE,MAAAA,CAAM,CAAC,IAAI,CAAC,CAAA;AAC7B,IAAA,IAAA,CAAK,QAAQ,IAAI,CAAA;AACjB,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AACd,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAAA,EACpB;AAAA,EACA,UAAA,GAAa;AACT,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAAA,EACpB;AAAA,EACA,uBAAA,CAAwBrG,QAAM,IAAA,EAAM;AAChC,IAAA,MAAM,IAAA,GAAO,IAAI,qBAAA,CAAsBA,MAAAA,EAAM,IAAI,CAAA;AACjD,IAAA,IAAA,CAAK,QAAQ,IAAI,CAAA;AAAA,EACrB;AAAA,EACA,eAAe,KAAA,EAAO;AAClB,IAAA,IAAI,OAAO,IAAA,CAAK,QAAA,KAAa,UAAA,EAAY;AACrC,MAAA,IAAA,CAAK,QAAA,CAAS,KAAA,EAAO,IAAA,CAAK,GAAG,CAAA;AAAA,IACjC,WACS,KAAA,EAAO;AACZ,MAAA,MAAM,KAAA;AAAA,IACV;AAAA,EACJ;AAAA,EACA,QAAQ,IAAA,EAAM;AACV,IAAA,MAAM,SAAS,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,QAAA,CAAS,SAAS,CAAC,CAAA;AACrD,IAAA,MAAM,kBAAkB,MAAA,CAAO,QAAA,CAAS,MAAA,CAAO,QAAA,CAAS,SAAS,CAAC,CAAA;AAClE,IAAA,IAAI,IAAA,CAAK,QAAQ,gBAAA,EAAkB;AAC/B,MAAA,IAAA,CAAK,UAAA,GAAa,KAAK,MAAA,CAAO,UAAA;AAAA,IAClC;AACA,IAAA,IAAI,IAAA,CAAK,QAAQ,cAAA,EAAgB;AAC7B,MAAA,IAAA,CAAK,QAAA,GAAW,KAAK,MAAA,CAAO,QAAA;AAAA,IAChC;AACA,IAAA,MAAA,CAAO,QAAA,CAAS,KAAK,IAAI,CAAA;AACzB,IAAA,IAAI,eAAA,EAAiB;AACjB,MAAA,IAAA,CAAK,IAAA,GAAO,eAAA;AACZ,MAAA,eAAA,CAAgB,IAAA,GAAO,IAAA;AAAA,IAC3B;AACA,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAAA,EACpB;AACJ,CAAA;;;AC9IA,IAAA,2BAAe,IAAI,WAAA;;EAEf,2h8CAAA,CACK,KAAA,CAAM,EAAE,CAAA,CACR,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,UAAA,CAAW,CAAC,CAAC;AAAC,CAAA;;;ACJpC,IAAA,0BAAe,IAAI,WAAA;;EAEf,0EAAA,CACK,KAAA,CAAM,EAAE,CAAA,CACR,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,UAAA,CAAW,CAAC,CAAC;AAAC,CAAA;;;;ACJpC,IAAMuG,UAAAA,uBAAgB,GAAA,CAAI;AACtB,EAAA,CAAC,GAAG,KAAK,CAAA;;AAET,EAAA,CAAC,KAAK,IAAI,CAAA;AACV,EAAA,CAAC,KAAK,IAAI,CAAA;AACV,EAAA,CAAC,KAAK,GAAG,CAAA;AACT,EAAA,CAAC,KAAK,IAAI,CAAA;AACV,EAAA,CAAC,KAAK,IAAI,CAAA;AACV,EAAA,CAAC,KAAK,IAAI,CAAA;AACV,EAAA,CAAC,KAAK,IAAI,CAAA;AACV,EAAA,CAAC,KAAK,GAAG,CAAA;AACT,EAAA,CAAC,KAAK,IAAI,CAAA;AACV,EAAA,CAAC,KAAK,GAAG,CAAA;AACT,EAAA,CAAC,KAAK,IAAI,CAAA;AACV,EAAA,CAAC,KAAK,GAAG,CAAA;AACT,EAAA,CAAC,KAAK,GAAG,CAAA;AACT,EAAA,CAAC,KAAK,IAAI,CAAA;AACV,EAAA,CAAC,KAAK,IAAI,CAAA;AACV,EAAA,CAAC,KAAK,IAAI,CAAA;AACV,EAAA,CAAC,KAAK,IAAI,CAAA;AACV,EAAA,CAAC,KAAK,IAAI,CAAA;AACV,EAAA,CAAC,KAAK,IAAI,CAAA;AACV,EAAA,CAAC,KAAK,IAAI,CAAA;AACV,EAAA,CAAC,KAAK,GAAG,CAAA;AACT,EAAA,CAAC,KAAK,IAAI,CAAA;AACV,EAAA,CAAC,KAAK,GAAG,CAAA;AACT,EAAA,CAAC,KAAK,IAAI,CAAA;AACV,EAAA,CAAC,KAAK,GAAG,CAAA;AACT,EAAA,CAAC,KAAK,GAAG,CAAA;AACT,EAAA,CAAC,KAAK,GAAG;AACZ,CAAA,CAAA;AAKM,IAAMC,cAAAA;;AAETd,EAAAA,CAAAA,GAAAA,GAAA,OAAO,aAAA,MAAa,IAAA,IAAAA,QAAA,MAAA,GAAAA,GAAAA,GACpB,SAAU,SAAA,EAAiB;AACvB,IAAA,IAAI,MAAA,GAAS,EAAA;AAEb,IAAA,IAAI,YAAY,KAAA,EAAQ;AACpB,MAAA,SAAA,IAAa,KAAA;AACb,MAAA,MAAA,IAAU,MAAA,CAAO,YAAA,CACX,SAAA,KAAc,EAAA,GAAM,OAAS,KAAM,CAAA;AAEzC,MAAA,SAAA,GAAY,QAAU,SAAA,GAAY,IAAA;;AAGtC,IAAA,MAAA,IAAU,MAAA,CAAO,aAAa,SAAS,CAAA;AACvC,IAAA,OAAO,MAAA;AACX,EAAA;;AAOE,SAAUe,kBAAiB,SAAA,EAAiB;;AAC9C,EAAA,IAAK,SAAA,IAAa,KAAA,IAAU,SAAA,IAAa,KAAA,IAAW,YAAY,OAAA,EAAU;AACtE,IAAA,OAAO,KAAA;;AAGX,EAAA,OAAA,CAAOf,GAAAA,GAAAa,WAAU,GAAA,CAAI,SAAS,OAAC,IAAA,IAAAb,GAAAA,KAAA,SAAAA,GAAAA,GAAI,SAAA;AACvC;;;ACvDA,IAAWE,UAAAA;AAAX,CAAA,SAAWA,UAAAA,EAAS;AAChB,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAA,KAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,MAAA,CAAA,GAAA,EAAA,CAAA,GAAA,MAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,QAAA,CAAA,GAAA,EAAA,CAAA,GAAA,QAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,MAAA,CAAA,GAAA,EAAA,CAAA,GAAA,MAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,MAAA,CAAA,GAAA,EAAA,CAAA,GAAA,MAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,SAAA,CAAA,GAAA,EAAA,CAAA,GAAA,SAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,SAAA,CAAA,GAAA,GAAA,CAAA,GAAA,SAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,SAAA,CAAA,GAAA,GAAA,CAAA,GAAA,SAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,SAAA,CAAA,GAAA,GAAA,CAAA,GAAA,SAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,SAAA,CAAA,GAAA,EAAA,CAAA,GAAA,SAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,SAAA,CAAA,GAAA,EAAA,CAAA,GAAA,SAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,SAAA,CAAA,GAAA,EAAA,CAAA,GAAA,SAAA;AACJ,CAAA,EAbWA,UAAAA,KAAAA,UAAAA,GAAS,EAAA,CAAA,CAAA;AAgBpB,IAAMc,aAAAA,GAAe,EAAA;AAErB,IAAYf,aAAAA;AAAZ,CAAA,SAAYA,aAAAA,EAAY;AACpB,EAAAA,aAAAA,CAAAA,aAAAA,CAAA,cAAA,CAAA,GAAA,KAAA,CAAA,GAAA,cAAA;AACA,EAAAA,aAAAA,CAAAA,aAAAA,CAAA,eAAA,CAAA,GAAA,KAAA,CAAA,GAAA,eAAA;AACA,EAAAA,aAAAA,CAAAA,aAAAA,CAAA,YAAA,CAAA,GAAA,GAAA,CAAA,GAAA,YAAA;AACJ,CAAA,EAJYA,aAAAA,KAAAA,aAAAA,GAAY,EAAA,CAAA,CAAA;AAMxB,SAAShE,UAAStB,KAAAA,EAAY;AAC1B,EAAA,OAAOA,KAAAA,IAAQuF,UAAAA,CAAU,IAAA,IAAQvF,KAAAA,IAAQuF,UAAAA,CAAU,IAAA;AACvD;AAEA,SAASe,wBAAuBtG,KAAAA,EAAY;AACxC,EAAA,OACKA,KAAAA,IAAQuF,UAAAA,CAAU,OAAA,IAAWvF,KAAAA,IAAQuF,UAAAA,CAAU,WAC/CvF,KAAAA,IAAQuF,UAAAA,CAAU,OAAA,IAAWvF,KAAAA,IAAQuF,UAAAA,CAAU,OAAA;AAExD;AAEA,SAASgB,qBAAoBvG,KAAAA,EAAY;AACrC,EAAA,OACKA,KAAAA,IAAQuF,UAAAA,CAAU,OAAA,IAAWvF,KAAAA,IAAQuF,UAAAA,CAAU,OAAA,IAC/CvF,KAAAA,IAAQuF,UAAAA,CAAU,OAAA,IAAWvF,KAAAA,IAAQuF,UAAAA,CAAU,OAAA,IAChDjE,UAAStB,KAAI,CAAA;AAErB;AAQA,SAASwG,+BAA8BxG,KAAAA,EAAY;AAC/C,EAAA,OAAOA,KAAAA,KAASuF,UAAAA,CAAU,MAAA,IAAUgB,oBAAAA,CAAoBvG,KAAI,CAAA;AAChE;AAEA,IAAWwF,mBAAAA;AAAX,CAAA,SAAWA,mBAAAA,EAAkB;AACzB,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,aAAA,CAAA,GAAA,CAAA,CAAA,GAAA,aAAA;AACA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,cAAA,CAAA,GAAA,CAAA,CAAA,GAAA,cAAA;AACA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,gBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,gBAAA;AACA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAA;AACA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,aAAA,CAAA,GAAA,CAAA,CAAA,GAAA,aAAA;AACJ,CAAA,EANWA,mBAAAA,KAAAA,mBAAAA,GAAkB,EAAA,CAAA,CAAA;AAQ7B,IAAYC,aAAAA;AAAZ,CAAA,SAAYA,aAAAA,EAAY;AAEpB,EAAAA,aAAAA,CAAAA,aAAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAA;AAEA,EAAAA,aAAAA,CAAAA,aAAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAA;AAEA,EAAAA,aAAAA,CAAAA,aAAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAA;AACJ,CAAA,EAPYA,aAAAA,KAAAA,aAAAA,GAAY,EAAA,CAAA,CAAA;AAuBlB,IAAOgB,iBAAP,MAAoB;EACtB,WAAA,CAEqB,UAAA,EAUA,eAEA,MAAA,EAA4B;AAZ5B,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AAUA,IAAA,IAAA,CAAA,aAAA,GAAA,aAAA;AAEA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAIb,IAAA,IAAA,CAAA,QAAQjB,mBAAAA,CAAmB,WAAA;AAE3B,IAAA,IAAA,CAAA,QAAA,GAAW,CAAA;AAOX,IAAA,IAAA,CAAA,MAAA,GAAS,CAAA;AAGT,IAAA,IAAA,CAAA,SAAA,GAAY,CAAA;AAEZ,IAAA,IAAA,CAAA,MAAA,GAAS,CAAA;AAET,IAAA,IAAA,CAAA,aAAaC,aAAAA,CAAa,MAAA;AAnB/B,EAAA;;AAsBH,EAAA,WAAA,CAAY,UAAA,EAAwB;AAChC,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,IAAA,IAAA,CAAK,QAAQD,mBAAAA,CAAmB,WAAA;AAChC,IAAA,IAAA,CAAK,MAAA,GAAS,CAAA;AACd,IAAA,IAAA,CAAK,SAAA,GAAY,CAAA;AACjB,IAAA,IAAA,CAAK,MAAA,GAAS,CAAA;AACd,IAAA,IAAA,CAAK,QAAA,GAAW,CAAA;AACpB,EAAA;;;;;;;;;;;;AAaA,EAAA,KAAA,CAAM,KAAa,MAAA,EAAc;AAC7B,IAAA,QAAQ,KAAK,KAAA;AACT,MAAA,KAAKA,oBAAmB,WAAA,EAAa;AACjC,QAAA,IAAI,GAAA,CAAI,UAAA,CAAW,MAAM,CAAA,KAAMD,WAAU,GAAA,EAAK;AAC1C,UAAA,IAAA,CAAK,QAAQC,mBAAAA,CAAmB,YAAA;AAChC,UAAA,IAAA,CAAK,QAAA,IAAY,CAAA;AACjB,UAAA,OAAO,IAAA,CAAK,iBAAA,CAAkB,GAAA,EAAK,MAAA,GAAS,CAAC,CAAA;;AAEjD,QAAA,IAAA,CAAK,QAAQA,mBAAAA,CAAmB,WAAA;AAChC,QAAA,OAAO,IAAA,CAAK,gBAAA,CAAiB,GAAA,EAAK,MAAM,CAAA;;AAG5C,MAAA,KAAKA,oBAAmB,YAAA,EAAc;AAClC,QAAA,OAAO,IAAA,CAAK,iBAAA,CAAkB,GAAA,EAAK,MAAM,CAAA;;AAG7C,MAAA,KAAKA,oBAAmB,cAAA,EAAgB;AACpC,QAAA,OAAO,IAAA,CAAK,mBAAA,CAAoB,GAAA,EAAK,MAAM,CAAA;;AAG/C,MAAA,KAAKA,oBAAmB,UAAA,EAAY;AAChC,QAAA,OAAO,IAAA,CAAK,eAAA,CAAgB,GAAA,EAAK,MAAM,CAAA;;AAG3C,MAAA,KAAKA,oBAAmB,WAAA,EAAa;AACjC,QAAA,OAAO,IAAA,CAAK,gBAAA,CAAiB,GAAA,EAAK,MAAM,CAAA;;;AAGpD,EAAA;;;;;;;;;;AAWQ,EAAA,iBAAA,CAAkB,KAAa,MAAA,EAAc;AACjD,IAAA,IAAI,MAAA,IAAU,IAAI,MAAA,EAAQ;AACtB,MAAA,OAAO,EAAA;;AAGX,IAAA,IAAA,CAAK,IAAI,UAAA,CAAW,MAAM,CAAA,GAAIa,aAAAA,MAAkBd,WAAU,OAAA,EAAS;AAC/D,MAAA,IAAA,CAAK,QAAQC,mBAAAA,CAAmB,UAAA;AAChC,MAAA,IAAA,CAAK,QAAA,IAAY,CAAA;AACjB,MAAA,OAAO,IAAA,CAAK,eAAA,CAAgB,GAAA,EAAK,MAAA,GAAS,CAAC,CAAA;;AAG/C,IAAA,IAAA,CAAK,QAAQA,mBAAAA,CAAmB,cAAA;AAChC,IAAA,OAAO,IAAA,CAAK,mBAAA,CAAoB,GAAA,EAAK,MAAM,CAAA;AAC/C,EAAA;EAEQ,kBAAA,CACJ,GAAA,EACA,KAAA,EACA,GAAA,EACA,IAAA,EAAY;AAEZ,IAAA,IAAI,UAAU,GAAA,EAAK;AACf,MAAA,MAAM,aAAa,GAAA,GAAM,KAAA;AACzB,MAAA,IAAA,CAAK,MAAA,GACD,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,IAAI,IAAA,EAAM,UAAU,CAAA,GACvC,QAAA,CAAS,GAAA,CAAI,MAAA,CAAO,KAAA,EAAO,UAAU,GAAG,IAAI,CAAA;AAChD,MAAA,IAAA,CAAK,QAAA,IAAY,UAAA;;AAEzB,EAAA;;;;;;;;;;AAWQ,EAAA,eAAA,CAAgB,KAAa,MAAA,EAAc;AAC/C,IAAA,MAAM,QAAA,GAAW,MAAA;AAEjB,IAAA,OAAO,MAAA,GAAS,IAAI,MAAA,EAAQ;AACxB,MAAA,MAAM,IAAA,GAAO,GAAA,CAAI,UAAA,CAAW,MAAM,CAAA;AAClC,MAAA,IAAIlE,SAAAA,CAAS,IAAI,CAAA,IAAKgF,uBAAAA,CAAuB,IAAI,CAAA,EAAG;AAChD,QAAA,MAAA,IAAU,CAAA;AACP,MAAA,CAAA,MAAA;AACH,QAAA,IAAA,CAAK,kBAAA,CAAmB,GAAA,EAAK,QAAA,EAAU,MAAA,EAAQ,EAAE,CAAA;AACjD,QAAA,OAAO,IAAA,CAAK,iBAAA,CAAkB,IAAA,EAAM,CAAC,CAAA;;;AAI7C,IAAA,IAAA,CAAK,kBAAA,CAAmB,GAAA,EAAK,QAAA,EAAU,MAAA,EAAQ,EAAE,CAAA;AAEjD,IAAA,OAAO,EAAA;AACX,EAAA;;;;;;;;;;AAWQ,EAAA,mBAAA,CAAoB,KAAa,MAAA,EAAc;AACnD,IAAA,MAAM,QAAA,GAAW,MAAA;AAEjB,IAAA,OAAO,MAAA,GAAS,IAAI,MAAA,EAAQ;AACxB,MAAA,MAAM,IAAA,GAAO,GAAA,CAAI,UAAA,CAAW,MAAM,CAAA;AAClC,MAAA,IAAIhF,SAAAA,CAAS,IAAI,CAAA,EAAG;AAChB,QAAA,MAAA,IAAU,CAAA;AACP,MAAA,CAAA,MAAA;AACH,QAAA,IAAA,CAAK,kBAAA,CAAmB,GAAA,EAAK,QAAA,EAAU,MAAA,EAAQ,EAAE,CAAA;AACjD,QAAA,OAAO,IAAA,CAAK,iBAAA,CAAkB,IAAA,EAAM,CAAC,CAAA;;;AAI7C,IAAA,IAAA,CAAK,kBAAA,CAAmB,GAAA,EAAK,QAAA,EAAU,MAAA,EAAQ,EAAE,CAAA;AAEjD,IAAA,OAAO,EAAA;AACX,EAAA;;;;;;;;;;;;;;AAeQ,EAAA,iBAAA,CAAkB,QAAgB,cAAA,EAAsB;;AAE5D,IAAA,IAAI,IAAA,CAAK,YAAY,cAAA,EAAgB;AACjC,MAAA,CAAA+D,GAAAA,GAAA,IAAA,CAAK,MAAA,MAAM,IAAA,IAAAA,GAAAA,KAAA,SAAA,MAAA,GAAAA,GAAAA,CAAE,0CAAA,CACT,IAAA,CAAK,QAAQ,CAAA;AAEjB,MAAA,OAAO,CAAA;;AAIX,IAAA,IAAI,MAAA,KAAWE,WAAU,IAAA,EAAM;AAC3B,MAAA,IAAA,CAAK,QAAA,IAAY,CAAA;eACV,IAAA,CAAK,UAAA,KAAeE,cAAa,MAAA,EAAQ;AAChD,MAAA,OAAO,CAAA;;AAGX,IAAA,IAAA,CAAK,cAAcW,iBAAAA,CAAiB,IAAA,CAAK,MAAM,CAAA,EAAG,KAAK,QAAQ,CAAA;AAE/D,IAAA,IAAI,KAAK,MAAA,EAAQ;AACb,MAAA,IAAI,MAAA,KAAWb,WAAU,IAAA,EAAM;AAC3B,QAAA,IAAA,CAAK,OAAO,uCAAA,EAAuC;;AAGvD,MAAA,IAAA,CAAK,MAAA,CAAO,iCAAA,CAAkC,IAAA,CAAK,MAAM,CAAA;;AAG7D,IAAA,OAAO,IAAA,CAAK,QAAA;AAChB,EAAA;;;;;;;;;;AAWQ,EAAA,gBAAA,CAAiB,KAAa,MAAA,EAAc;AAChD,IAAA,MAAM,EAAE,YAAU,GAAK,IAAA;AACvB,IAAA,IAAI,OAAA,GAAU,UAAA,CAAW,IAAA,CAAK,SAAS,CAAA;AAEvC,IAAA,IAAI,WAAA,GAAA,CAAe,OAAA,GAAUD,aAAAA,CAAa,YAAA,KAAiB,EAAA;AAE3D,IAAA,OAAO,MAAA,GAAS,GAAA,CAAI,MAAA,EAAQ,MAAA,EAAA,EAAU,KAAK,MAAA,EAAA,EAAU;AACjD,MAAA,MAAM,IAAA,GAAO,GAAA,CAAI,UAAA,CAAW,MAAM,CAAA;AAElC,MAAA,IAAA,CAAK,SAAA,GAAYoB,gBAAAA,CACb,UAAA,EACA,OAAA,EACA,IAAA,CAAK,SAAA,GAAY,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,WAAW,CAAA,EACxC,IAAI,CAAA;AAGR,MAAA,IAAI,IAAA,CAAK,YAAY,CAAA,EAAG;AACpB,QAAA,OAAO,KAAK,MAAA,KAAW,CAAA;AAElB,QAAA,IAAA,CAAK,eAAejB,aAAAA,CAAa,SAAA;SAE7B,WAAA,KAAgB,CAAA;AAEbe,QAAAA,8BAAAA,CAA8B,IAAI,CAAA,CAAA,GACxC,CAAA,GACA,IAAA,CAAK,4BAAA,EAA4B;;AAG3C,MAAA,OAAA,GAAU,UAAA,CAAW,KAAK,SAAS,CAAA;AACnC,MAAA,WAAA,GAAA,CAAe,OAAA,GAAUlB,cAAa,YAAA,KAAiB,EAAA;AAGvD,MAAA,IAAI,gBAAgB,CAAA,EAAG;AAEnB,QAAA,IAAI,IAAA,KAASC,WAAU,IAAA,EAAM;AACzB,UAAA,OAAO,IAAA,CAAK,oBACR,IAAA,CAAK,SAAA,EACL,aACA,IAAA,CAAK,QAAA,GAAW,KAAK,MAAM,CAAA;;AAKnC,QAAA,IAAI,IAAA,CAAK,UAAA,KAAeE,aAAAA,CAAa,MAAA,EAAQ;AACzC,UAAA,IAAA,CAAK,SAAS,IAAA,CAAK,SAAA;AACnB,UAAA,IAAA,CAAK,YAAY,IAAA,CAAK,MAAA;AACtB,UAAA,IAAA,CAAK,MAAA,GAAS,CAAA;;;;AAK1B,IAAA,OAAO,EAAA;AACX,EAAA;;;;;;EAOQ,4BAAA,GAA4B;;AAChC,IAAA,MAAM,EAAE,MAAA,EAAQ,UAAA,EAAU,GAAK,IAAA;AAE/B,IAAA,MAAM,WAAA,GAAA,CACD,UAAA,CAAW,MAAM,CAAA,GAAIH,cAAa,YAAA,KAAiB,EAAA;AAExD,IAAA,IAAA,CAAK,mBAAA,CAAoB,MAAA,EAAQ,WAAA,EAAa,IAAA,CAAK,QAAQ,CAAA;AAC3D,IAAA,CAAAD,GAAAA,GAAA,KAAK,MAAA,MAAM,IAAA,IAAAA,QAAA,MAAA,GAAA,MAAA,GAAAA,IAAE,uCAAA,EAAuC;AAEpD,IAAA,OAAO,IAAA,CAAK,QAAA;AAChB,EAAA;;;;;;;;;;EAWQ,mBAAA,CACJ,MAAA,EACA,aACA,QAAA,EAAgB;AAEhB,IAAA,MAAM,EAAE,YAAU,GAAK,IAAA;AAEvB,IAAA,IAAA,CAAK,aAAA,CACD,WAAA,KAAgB,CAAA,GACV,UAAA,CAAW,MAAM,CAAA,GAAI,CAACC,aAAAA,CAAa,YAAA,GACnC,UAAA,CAAW,MAAA,GAAS,CAAC,GAC3B,QAAQ,CAAA;AAEZ,IAAA,IAAI,gBAAgB,CAAA,EAAG;AAEnB,MAAA,IAAA,CAAK,aAAA,CAAc,UAAA,CAAW,MAAA,GAAS,CAAC,GAAG,QAAQ,CAAA;;AAGvD,IAAA,OAAO,QAAA;AACX,EAAA;;;;;;;;EASA,GAAA,GAAG;;AACC,IAAA,QAAQ,KAAK,KAAA;AACT,MAAA,KAAKE,oBAAmB,WAAA,EAAa;AAEjC,QAAA,OAAO,IAAA,CAAK,MAAA,KAAW,CAAA,KAClB,IAAA,CAAK,UAAA,KAAeC,aAAAA,CAAa,SAAA,IAC9B,IAAA,CAAK,MAAA,KAAW,IAAA,CAAK,SAAA,CAAA,GACvB,IAAA,CAAK,8BAA4B,GACjC,CAAA;;;AAGV,MAAA,KAAKD,oBAAmB,cAAA,EAAgB;AACpC,QAAA,OAAO,IAAA,CAAK,iBAAA,CAAkB,CAAA,EAAG,CAAC,CAAA;;AAEtC,MAAA,KAAKA,oBAAmB,UAAA,EAAY;AAChC,QAAA,OAAO,IAAA,CAAK,iBAAA,CAAkB,CAAA,EAAG,CAAC,CAAA;;AAEtC,MAAA,KAAKA,oBAAmB,YAAA,EAAc;AAClC,QAAA,CAAAH,GAAAA,GAAA,IAAA,CAAK,MAAA,MAAM,IAAA,IAAAA,GAAAA,KAAA,SAAA,MAAA,GAAAA,GAAAA,CAAE,0CAAA,CACT,IAAA,CAAK,QAAQ,CAAA;AAEjB,QAAA,OAAO,CAAA;;AAEX,MAAA,KAAKG,oBAAmB,WAAA,EAAa;AAEjC,QAAA,OAAO,CAAA;;;AAGnB,EAAA;;AASJ,SAAS,WAAW,UAAA,EAAuB;AACvC,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,MAAM,OAAA,GAAU,IAAIiB,cAAAA,CAChB,UAAA,EACA,CAAC,GAAA,KAAS,GAAA,IAAON,cAAAA,CAAc,GAAG,CAAE,CAAA;AAGxC,EAAA,OAAO,SAAS,cAAA,CACZ,GAAA,EACA,UAAA,EAAwB;AAExB,IAAA,IAAI,SAAA,GAAY,CAAA;AAChB,IAAA,IAAI,MAAA,GAAS,CAAA;AAEb,IAAA,OAAA,CAAQ,SAAS,GAAA,CAAI,OAAA,CAAQ,GAAA,EAAK,MAAM,MAAM,CAAA,EAAG;AAC7C,MAAA,GAAA,IAAO,GAAA,CAAI,KAAA,CAAM,SAAA,EAAW,MAAM,CAAA;AAElC,MAAA,OAAA,CAAQ,YAAY,UAAU,CAAA;AAE9B,MAAA,MAAM,MAAM,OAAA,CAAQ,KAAA;AAChB,QAAA,GAAA;;QAEA,MAAA,GAAS;AAAC,OAAA;AAGd,MAAA,IAAI,MAAM,CAAA,EAAG;AACT,QAAA,SAAA,GAAY,MAAA,GAAS,QAAQ,GAAA,EAAG;AAChC,QAAA;;AAGJ,MAAA,SAAA,GAAY,MAAA,GAAS,GAAA;AAErB,MAAA,MAAA,GAAS,GAAA,KAAQ,CAAA,GAAI,SAAA,GAAY,CAAA,GAAI,SAAA;;AAGzC,IAAA,MAAM,MAAA,GAAS,GAAA,GAAM,GAAA,CAAI,KAAA,CAAM,SAAS,CAAA;AAGxC,IAAA,GAAA,GAAM,EAAA;AAEN,IAAA,OAAO,MAAA;AACX,EAAA,CAAA;AACJ;AAYM,SAAUO,gBAAAA,CACZ,UAAA,EACA,OAAA,EACA,OAAA,EACA,IAAA,EAAY;AAEZ,EAAA,MAAM,WAAA,GAAA,CAAe,OAAA,GAAUpB,aAAAA,CAAa,aAAA,KAAkB,CAAA;AAC9D,EAAA,MAAM,UAAA,GAAa,UAAUA,aAAAA,CAAa,UAAA;AAG1C,EAAA,IAAI,gBAAgB,CAAA,EAAG;AACnB,IAAA,OAAO,UAAA,KAAe,CAAA,IAAK,IAAA,KAAS,UAAA,GAAa,OAAA,GAAU,EAAA;;AAI/D,EAAA,IAAI,UAAA,EAAY;AACZ,IAAA,MAAM,QAAQ,IAAA,GAAO,UAAA;AAErB,IAAA,OAAO,KAAA,GAAQ,KAAK,KAAA,IAAS,WAAA,GACvB,KACA,UAAA,CAAW,OAAA,GAAU,KAAK,CAAA,GAAI,CAAA;;AAMxC,EAAA,IAAI,EAAA,GAAK,OAAA;AACT,EAAA,IAAI,EAAA,GAAK,KAAK,WAAA,GAAc,CAAA;AAE5B,EAAA,OAAO,MAAM,EAAA,EAAI;AACb,IAAA,MAAM,GAAA,GAAO,KAAK,EAAA,KAAQ,CAAA;AAC1B,IAAA,MAAM,MAAA,GAAS,WAAW,GAAG,CAAA;AAE7B,IAAA,IAAI,SAAS,IAAA,EAAM;AACf,MAAA,EAAA,GAAK,GAAA,GAAM,CAAA;AACJ,IAAA,CAAA,MAAA,IAAA,MAAA,GAAS,IAAA,EAAM;AACtB,MAAA,EAAA,GAAK,GAAA,GAAM,CAAA;AACR,IAAA,CAAA,MAAA;AACH,MAAA,OAAO,UAAA,CAAW,MAAM,WAAW,CAAA;;;AAI3C,EAAA,OAAO,EAAA;AACX;AAEoB,WAAW,wBAAc;AAC1B,WAAW,uBAAa;;;ACtjB3C,SAAS,YACL,GAAA,EAAM;AAEN,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,QAAQ,CAAA,EAAA,EAAK;AACjC,IAAA,GAAA,CAAI,CAAC,EAAE,CAAC,CAAA,IAAK,IAAI,CAAA,GAAI,CAAC,CAAA,CAAE,CAAC,CAAA,GAAI,CAAA;;AAEjC,EAAA,OAAO,GAAA;AACX;AAGe,IAAI,GAAA,iBAA0C,WAAA,CAAY,CAAC,CAAC,CAAA,EAAE,OAAO,CAAA,EAAE,CAAC,GAAE,WAAW,CAAA,EAAE,CAAC,EAAA,EAAG,QAAQ,GAAE,CAAC,CAAA,EAAE,QAAQ,CAAA,EAAE,CAAC,GAAE,OAAO,CAAA,EAAE,CAAC,CAAA,EAAE,UAAU,GAAE,CAAC,CAAA,EAAE,UAAU,CAAA,EAAE,CAAC,GAAE,OAAO,CAAA,EAAE,CAAC,CAAA,EAAE,QAAQ,GAAE,CAAC,CAAA,EAAE,QAAQ,CAAA,EAAE,CAAC,CAAA,EAAE,QAAQ,CAAA,EAAE,CAAC,GAAE,OAAO,CAAA,EAAE,CAAC,CAAA,EAAE,QAAQ,GAAE,CAAC,CAAA,EAAE,SAAS,CAAA,EAAE,CAAC,GAAE,UAAU,CAAA,EAAE,CAAC,CAAA,EAAE,OAAO,GAAE,CAAC,EAAA,EAAG,SAAS,CAAA,EAAE,CAAC,GAAE,QAAQ,CAAA,EAAE,CAAC,CAAA,EAAE,EAAC,GAAE,MAAA,EAAO,CAAA,EAAE,MAAK,CAAA,EAAE,QAAA,EAAS,CAAA,EAAE,CAAC,GAAE,EAAC,CAAA,EAAE,UAAA,EAAW,CAAA,EAAE,IAAA,EAAK,CAAA,EAAE,SAAQ,CAAA,EAAE,CAAC,CAAA,EAAE,EAAC,GAAE,MAAA,EAAO,CAAA,EAAE,MAAK,CAAA,EAAE,QAAA,EAAS,CAAA,EAAE,CAAC,GAAE,SAAS,CAAA,EAAE,CAAC,CAAA,EAAE,UAAU,GAAE,CAAC,EAAA,EAAG,UAAU,CAAA,EAAE,CAAC,GAAE,QAAQ,CAAA,EAAE,CAAC,CAAA,EAAE,UAAU,GAAE,CAAC,CAAA,EAAE,OAAO,CAAA,EAAE,CAAC,GAAE,UAAU,CAAA,EAAE,CAAC,CAAA,EAAE,oBAAoB,CAAA,EAAE,CAAC,CAAA,EAAE,EAAC,GAAE,GAAA,EAAI,CAAA,EAAE,WAAU,CAAA,EAAE,CAAC,EAAA,EAAG,UAAU,GAAE,CAAC,CAAA,EAAE,UAAU,CAAA,EAAE,CAAC,GAAE,UAAU,CAAA,EAAE,CAAC,EAAA,EAAG,QAAQ,GAAE,CAAC,CAAA,EAAE,SAAS,CAAA,EAAE,CAAC,GAAE,QAAQ,CAAA,EAAE,CAAC,CAAA,EAAE,SAAS,GAAE,CAAC,CAAA,EAAE,UAAU,CAAA,EAAE,CAAC,GAAE,OAAO,CAAA,EAAE,CAAC,CAAA,EAAE,UAAU,CAAA,EAAE,CAAC,CAAA,EAAE,QAAQ,GAAE,CAAC,CAAA,EAAE,OAAO,CAAA,EAAE,CAAC,GAAE,QAAQ,CAAA,EAAE,CAAC,CAAA,EAAE,QAAQ,GAAE,CAAC,CAAA,EAAE,SAAS,CAAA,EAAE,CAAC,GAAE,OAAO,CAAA,EAAE,CAAC,CAAA,EAAE,OAAO,GAAE,CAAC,CAAA,EAAE,YAAY,CAAA,EAAE,CAAC,GAAE,QAAQ,CAAA,EAAE,CAAC,CAAA,EAAE,OAAO,GAAE,CAAC,CAAA,EAAE,aAAa,CAAA,EAAE,CAAC,GAAE,QAAQ,CAAA,EAAE,CAAC,CAAA,EAAE,QAAQ,CAAA,EAAE,CAAC,CAAA,EAAE,SAAS,GAAE,CAAC,CAAA,EAAE,SAAS,CAAA,EAAE,CAAC,GAAE,QAAQ,CAAA,EAAE,CAAC,CAAA,EAAE,aAAa,GAAE,CAAC,CAAA,EAAE,SAAS,CAAA,EAAE,CAAC,GAAE,QAAQ,CAAA,EAAE,CAAC,CAAA,EAAE,QAAQ,GAAE,CAAC,CAAA,EAAE,SAAS,CAAA,EAAE,CAAC,GAAE,UAAU,CAAA,EAAE,CAAC,CAAA,EAAE,UAAU,GAAE,CAAC,CAAA,EAAE,UAAU,CAAA,EAAE,CAAC,CAAA,EAAE,UAAU,CAAA,EAAE,CAAC,GAAE,UAAU,CAAA,EAAE,CAAC,CAAA,EAAE,UAAU,GAAE,CAAC,CAAA,EAAE,SAAS,CAAA,EAAE,CAAC,GAAE,UAAU,CAAA,EAAE,CAAC,CAAA,EAAE,QAAQ,GAAE,CAAC,CAAA,EAAE,SAAS,CAAA,EAAE,CAAC,GAAE,SAAS,CAAA,EAAE,CAAC,CAAA,EAAE,UAAU,GAAE,CAAC,CAAA,EAAE,UAAU,CAAA,EAAE,CAAC,GAAE,UAAU,CAAA,EAAE,CAAC,CAAA,EAAE,SAAS,GAAE,CAAC,CAAA,EAAE,QAAQ,CAAA,EAAE,CAAC,CAAA,EAAE,UAAU,CAAA,EAAE,CAAC,GAAE,UAAU,CAAA,EAAE,CAAC,CAAA,EAAE,SAAS,GAAE,CAAC,CAAA,EAAE,QAAQ,CAAA,EAAE,CAAC,GAAE,OAAO,CAAA,EAAE,CAAC,CAAA,EAAE,UAAU,GAAE,CAAC,CAAA,EAAE,UAAU,CAAA,EAAE,CAAC,GAAE,UAAU,CAAA,EAAE,CAAC,CAAA,EAAE,SAAS,GAAE,CAAC,CAAA,EAAE,UAAU,CAAA,EAAE,CAAC,GAAE,QAAQ,CAAA,EAAE,CAAC,CAAA,EAAE,SAAS,CAAA,EAAE,CAAC,CAAA,EAAE,UAAU,GAAE,CAAC,CAAA,EAAE,UAAU,CAAA,EAAE,CAAC,GAAE,UAAU,CAAA,EAAE,CAAC,CAAA,EAAE,SAAS,GAAE,CAAC,CAAA,EAAE,QAAQ,CAAA,EAAE,CAAC,GAAE,UAAU,CAAA,EAAE,CAAC,CAAA,EAAE,SAAS,GAAE,CAAC,CAAA,EAAE,SAAS,CAAA,EAAE,CAAC,GAAE,UAAU,CAAA,EAAE,CAAC,CAAA,EAAE,UAAU,GAAE,CAAC,CAAA,EAAE,SAAS,CAAA,EAAE,CAAC,GAAE,UAAU,CAAA,EAAE,CAAC,CAAA,EAAE,QAAQ,CAAA,EAAE,CAAC,CAAA,EAAE,SAAS,GAAE,CAAC,CAAA,EAAE,SAAS,CAAA,EAAE,CAAC,GAAE,UAAU,CAAA,EAAE,CAAC,CAAA,EAAE,UAAU,GAAE,CAAC,CAAA,EAAE,UAAU,CAAA,EAAE,CAAC,GAAE,SAAS,CAAA,EAAE,CAAC,CAAA,EAAE,QAAQ,GAAE,CAAC,CAAA,EAAE,UAAU,CAAA,EAAE,CAAC,GAAE,UAAU,CAAA,EAAE,CAAC,CAAA,EAAE,SAAS,GAAE,CAAC,CAAA,EAAE,QAAQ,CAAA,EAAE,CAAC,CAAA,EAAE,OAAO,CAAA,EAAE,CAAC,GAAE,UAAU,CAAA,EAAE,CAAC,CAAA,EAAE,UAAU,GAAE,CAAC,CAAA,EAAE,UAAU,CAAA,EAAE,CAAC,GAAE,SAAS,CAAA,EAAE,CAAC,CAAA,EAAE,UAAU,GAAE,CAAC,CAAA,EAAE,QAAQ,CAAA,EAAE,CAAC,GAAE,OAAO,CAAA,EAAE,CAAC,CAAA,EAAE,UAAU,GAAE,CAAC,CAAA,EAAE,UAAU,CAAA,EAAE,CAAC,GAAE,UAAU,CAAA,EAAE,CAAC,CAAA,EAAE,SAAS,GAAE,CAAC,CAAA,EAAE,QAAQ,CAAA,EAAE,CAAC,CAAA,EAAE,UAAU,CAAA,EAAE,CAAC,GAAE,SAAS,CAAA,EAAE,CAAC,CAAA,EAAE,QAAQ,GAAE,CAAC,CAAA,EAAE,SAAS,CAAA,EAAE,CAAC,GAAE,SAAS,CAAA,EAAE,CAAC,CAAA,EAAE,UAAU,GAAE,CAAC,CAAA,EAAE,UAAU,CAAA,EAAE,CAAC,GAAE,SAAS,CAAA,EAAE,CAAC,CAAA,EAAE,SAAS,GAAE,CAAC,CAAA,EAAE,UAAU,CAAA,EAAE,CAAC,GAAE,UAAU,CAAA,EAAE,CAAC,CAAA,EAAE,SAAS,CAAA,EAAE,CAAC,CAAA,EAAE,SAAS,GAAE,CAAC,CAAA,EAAE,QAAQ,CAAA,EAAE,CAAC,GAAE,QAAQ,CAAA,EAAE,CAAC,CAAA,EAAE,UAAU,GAAE,CAAC,CAAA,EAAE,UAAU,CAAA,EAAE,CAAC,GAAE,UAAU,CAAA,EAAE,CAAC,CAAA,EAAE,UAAU,GAAE,CAAC,CAAA,EAAE,UAAU,CAAA,EAAE,CAAC,GAAE,UAAU,CAAA,EAAE,CAAC,CAAA,EAAE,SAAS,GAAE,CAAC,CAAA,EAAE,SAAS,CAAA,EAAE,CAAC,GAAE,QAAQ,CAAA,EAAE,CAAC,CAAA,EAAE,QAAQ,CAAA,EAAE,CAAC,CAAA,EAAE,SAAS,GAAE,CAAC,CAAA,EAAE,SAAS,CAAA,EAAE,CAAC,GAAE,UAAU,CAAA,EAAE,CAAC,CAAA,EAAE,UAAU,GAAE,CAAC,CAAA,EAAE,SAAS,CAAA,EAAE,CAAC,GAAE,SAAS,CAAA,EAAE,CAAC,CAAA,EAAE,UAAU,GAAE,CAAC,CAAA,EAAE,UAAU,CAAA,EAAE,CAAC,GAAE,QAAQ,CAAA,EAAE,CAAC,CAAA,EAAE,QAAQ,GAAE,CAAC,CAAA,EAAE,UAAU,CAAA,EAAE,CAAC,CAAA,EAAE,SAAS,CAAA,EAAE,CAAC,GAAE,SAAS,CAAA,EAAE,CAAC,CAAA,EAAE,UAAU,GAAE,CAAC,CAAA,EAAE,UAAU,CAAA,EAAE,CAAC,GAAE,UAAU,CAAA,EAAE,CAAC,CAAA,EAAE,UAAU,GAAE,CAAC,CAAA,EAAE,SAAS,CAAA,EAAE,CAAC,GAAE,SAAS,CAAA,EAAE,CAAC,CAAA,EAAE,SAAS,GAAE,CAAC,CAAA,EAAE,SAAS,CAAA,EAAE,CAAC,GAAE,QAAQ,CAAA,EAAE,CAAC,CAAA,EAAE,SAAS,GAAE,CAAC,CAAA,EAAE,SAAS,CAAA,EAAE,CAAC,CAAA,EAAE,SAAS,CAAA,EAAE,CAAC,GAAE,SAAS,CAAA,EAAE,CAAC,CAAA,EAAE,SAAS,GAAE,CAAC,CAAA,EAAE,UAAU,CAAA,EAAE,CAAC,GAAE,UAAU,CAAA,EAAE,CAAC,CAAA,EAAE,UAAU,GAAE,CAAC,CAAA,EAAE,UAAU,CAAA,EAAE,CAAC,GAAE,UAAU,CAAA,EAAE,CAAC,CAAA,EAAE,UAAU,GAAE,CAAC,CAAA,EAAE,UAAU,CAAA,EAAE,CAAC,GAAE,UAAU,CAAA,EAAE,CAAC,CAAA,EAAE,UAAU,CAAA,EAAE,CAAC,CAAA,EAAE,UAAU,GAAE,CAAC,CAAA,EAAE,UAAU,CAAA,EAAE,CAAC,GAAE,UAAU,CAAA,EAAE,CAAC,CAAA,EAAE,UAAU,GAAE,CAAC,CAAA,EAAE,UAAU,CAAA,EAAE,CAAC,GAAE,UAAU,CAAA,EAAE,CAAC,CAAA,EAAE,UAAU,GAAE,CAAC,CAAA,EAAE,UAAU,CAAA,EAAE,CAAC,GAAE,UAAU,CAAA,EAAE,CAAC,CAAA,EAAE,UAAU,GAAE,CAAC,CAAA,EAAE,SAAS,CAAA,EAAE,CAAC,GAAE,OAAO,CAAA,EAAE,CAAC,CAAA,EAAE,OAAO,CAAA,EAAE,CAAC,CAAA,EAAE,SAAS,GAAE,CAAC,CAAA,EAAE,SAAS,CAAA,EAAE,CAAC,GAAE,UAAU,CAAA,EAAE,CAAC,CAAA,EAAE,UAAU,GAAE,CAAC,CAAA,EAAE,SAAS,CAAA,EAAE,CAAC,GAAE,SAAS,CAAA,EAAE,CAAC,CAAA,EAAE,UAAU,GAAE,CAAC,CAAA,EAAE,UAAU,CAAA,EAAE,CAAC,GAAE,UAAU,CAAA,EAAE,CAAC,CAAA,EAAE,UAAU,GAAE,CAAC,CAAA,EAAE,UAAU,CAAA,EAAE,CAAC,CAAA,EAAE,UAAU,CAAA,EAAE,CAAC,GAAE,UAAU,CAAA,EAAE,CAAC,CAAA,EAAE,UAAU,GAAE,CAAC,CAAA,EAAE,SAAS,CA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A,EAAE,OAAO,CAAA,EAAE,CAAC,GAAE,OAAO,CAAA,EAAE,CAAC,CAAA,EAAE,OAAO,GAAE,CAAC,CAAA,EAAE,OAAO,CAAA,EAAE,CAAC,GAAE,OAAO,CAAA,EAAE,CAAC,CAAA,EAAE,OAAO,GAAE,CAAC,CAAA,EAAE,OAAO,CAAA,EAAE,CAAC,GAAE,OAAO,CAAA,EAAE,CAAC,CAAA,EAAE,QAAQ,GAAE,CAAC,CAAA,EAAE,QAAQ,CAAA,EAAE,CAAC,CAAA,EAAE,QAAQ,CAAA,EAAE,CAAC,GAAE,QAAQ,CAAA,EAAE,CAAC,CAAA,EAAE,UAAU,GAAE,CAAC,CAAA,EAAE,UAAU,CAAA,EAAE,CAAC,GAAE,OAAO,CAAA,EAAE,CAAC,CAAA,EAAE,UAAU,GAAE,CAAC,CAAA,EAAE,OAAO,CAAA,EAAE,CAAC,GAAE,QAAQ,CAAA,EAAE,CAAC,CAAA,EAAE,QAAQ,GAAE,CAAC,CAAA,EAAE,OAAO,CAAA,EAAE,CAAC,GAAE,OAAO,CAAA,EAAE,CAAC,CAAA,EAAE,OAAO,GAAE,CAAC,CAAA,EAAE,OAAO,CAAA,EAAE,CAAC,CAAA,EAAE,OAAO,CAAA,EAAE,CAAC,GAAE,QAAQ,CAAA,EAAE,CAAC,CAAA,EAAE,QAAQ,GAAE,CAAC,CAAA,EAAE,OAAO,CAAA,EAAE,CAAC,GAAE,OAAO,CAAA,EAAE,CAAC,CAAA,EAAE,OAAO,GAAE,CAAC,CAAA,EAAE,OAAO,CAAA,EAAE,CAAC,GAAE,OAAO,CAAA,EAAE,CAAC,CAAA,EAAE,OAAO,GAAE,CAAC,CAAA,EAAE,OAAO,CAAA,EAAE,CAAC,GAAE,OAAO,CAAA,EAAE,CAAC,CAAA,EAAE,OAAO,CAAA,EAAE,CAAC,CAAA,EAAE,OAAO,GAAE,CAAC,CAAA,EAAE,OAAO,CAAA,EAAE,CAAC,GAAE,OAAO,CAAA,EAAE,CAAC,CAAA,EAAE,OAAO,GAAE,CAAC,CAAA,EAAE,OAAO,CAAA,EAAE,CAAC,GAAE,QAAQ,CAAA,EAAE,CAAC,CAAA,EAAE,QAAQ,GAAE,CAAC,CAAA,EAAE,QAAQ,CAAA,EAAE,CAAC,GAAE,QAAQ,CAAA,EAAE,CAAC,CAAA,EAAE,UAAU,GAA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EAAE,UAAU,GAAE,CAAC,CAAA,EAAE,UAAU,CAAA,EAAE,CAAC,GAAE,WAAW,CAAA,EAAE,CAAC,CAAA,EAAE,WAAW,GAAE,CAAC,CAAA,EAAE,UAAU,CAAA,EAAE,CAAC,GAAE,UAAU,CAAA,EAAE,CAAC,CAAA,EAAE,UAAU,CAAA,EAAE,CAAC,CAAA,EAAE,UAAU,GAAE,CAAC,CAAA,EAAE,SAAS,CAAA,EAAE,CAAC,GAAE,SAAS,CAAA,EAAE,CAAC,CAAA,EAAE,SAAS,GAAE,CAAC,CAAA,EAAE,SAAS,CAAA,EAAE,CAAC,GAAE,WAAW,CAAA,EAAE,CAAC,CAAA,EAAE,WAAW,GAAE,CAAC,CAAA,EAAE,WAAW,CAAA,EAAE,CAAC,GAAE,WAAW,CAAA,EAAE,CAAC,CAAA,EAAE,SAAS,GAAE,CAAC,CAAA,EAAE,SAAS,CAAA,EAAE,CAAC,CAAA,EAAE,UAAU,CAAA,EAAE,CAAC,GAAE,UAAU,CAAA,EAAE,CAAC,CAAA,EAAE,UAAU,GAAE,CAAC,CAAA,EAAE,UAAU,CAAA,EAAE,CAAC,GAAE,WAAW,CAAA,EAAE,CAAC,CAAA,EAAE,UAAU,GAAE,CAAC,CAAA,EAAE,YAAY,CAAA,EAAE,CAAC,GAAE,QAAQ,CAAA,EAAE,CAAC,CAAA,EAAE,SAAS,GAAE,CAAC,CAAA,EAAE,WAAW,CAAA,EAAE,CAAC,GAAE,WAAW,CAAA,EAAE,CAAC,CAAA,EAAE,YAAY,GAAE,CAAC,CAAA,EAAE,YAAY,CAAA,EAAE,CAAC,CAAA,EAAE,YAAY,CAAA,EAAE,CAAC,GAAE,YAAY,CAAA,EAAE,CAAC,CAAA,EAAE,YAAY,GAAE,CAAC,CAAA,EAAE,YAAY,CAAA,EAAE,CAAC,GAAE,YAAY,CAAA,EAAE,CAAC,CAAA,EAAE,YAAY,GAAE,CAAC,CAAA,EAAE,WAAW,CAAA,EAAE,CAAC,GAAE,WAAW,CAAA,EAAE,CAAC,CAAA,EAAE,WAAW,GAAE,CAAC,CAAA,EAAE,YAAY,CAAA,EAAE,CAAC,GAAE,YAAY,CAAA,EAAE,CAAC,CAAA,EAAE,SAAS,CAAA,EAAE,CAAC,CAAA,EAAE,QAAQ,GAAE,CAAC,CAAA,EAAE,QAAQ,CAAA,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AC,CAAA,EAAE,QAAQ,CAAA,EAAE,CAAC,GAAE,QAAQ,CAAA,EAAE,CAAC,CAAA,EAAE,QAAQ,GAAE,CAAC,CAAA,EAAE,QAAQ,CAAA,EAAE,CAAC,CAAA,EAAE,QAAQ,CAAA,EAAE,CAAC,GAAE,QAAQ,CAAA,EAAE,CAAC,CAAA,EAAE,QAAQ,GAAE,CAAC,CAAA,EAAE,QAAQ,CAAA,EAAE,CAAC,GAAE,QAAQ,CAAA,EAAE,CAAC,CAAA,EAAE,QAAQ,GAAE,CAAC,CAAA,EAAE,QAAQ,CAAA,EAAE,CAAC,GAAE,QAAQ,CAAA,EAAE,CAAC,CAAA,EAAE,QAAQ,GAAE,CAAC,CAAA,EAAE,QAAQ,CAAA,EAAE,CAAC,GAAE,QAAQ,CAAA,EAAE,CAAC,CAAA,EAAE,QAAQ,CAAA,EAAE,CAAC,EAAA,EAAG,OAAO,GAAE,CAAC,CAAA,EAAE,OAAO,CAAA,EAAE,CAAC,GAAE,OAAO,CAAA,EAAE,CAAC,CAAA,EAAE,OAAO,GAAE,CAAC,CAAA,EAAE,OAAO,CAAA,EAAE,CAAC,GAAE,OAAO,CAAA,EAAE,CAAC,CAAA,EAAE,OAAO,GAAE,CAAC,CAAA,EAAE,OAAO,CAAA,EAAE,CAAC,GAAE,OAAO,CAAA,EAAE,CAAC,CAAA,EAAE,OAAO,GAAE,CAAC,CAAA,EAAE,OAAO,CAAA,EAAE,CAAC,GAAE,OAAO,CAAA,EAAE,CAAC,CAAA,EAAE,OAAO,CAAA,EAAE,CAAC,CAAA,EAAE,OAAO,GAAE,CAAC,CAAA,EAAE,OAAO,CAAA,EAAE,CAAC,GAAE,OAAO,CAAA,EAAE,CAAC,CAAA,EAAE,OAAO,GAAE,CAAC,CAAA,EAAE,OAAO,CAAA,EAAE,CAAC,GAAE,OAAO,CAAA,EAAE,CAAC,CAAA,EAAE,OAAO,GAAE,CAAC,CAAA,EAAE,OAAO,CAAA,EAAE,CAAC,GAAE,OAAO,CAAA,EAAE,CAAC,CAAA,EAAE,OAAO,GAAE,CAAC,CAAA,EAAE,OAAO,CAAA,EAAE,CAAC,CAAA,EAAE,OAAO,CAAA,EAAE,CAAC,GAAE,OAAO,CAAA,EAAE,CAAC,CAAA,EAAE,OAAO,GAAE,CAAC,CAAA,EAAE,OAAO,CAAA,EAAE,CAAC,GAAE,OAAO,CAAA,EAAE,CAAC,CAAA,EAAE,OAAO,GAAE,CAAC,CAAA,EAAE,OAAO,CAAA,EAAE,CAAC,GAAE,OAAO,CAAA,EAAE,CAAC,CAAA,EAAE,OAAO,GAAE,CAAC,CAAA,EAAE,OAAO,CAAA,EAAE,CAAC,GAAE,OAAO,CAAA,EAAE,CAAC,CAAA,EAAE,OAAO,GAAE,CAAC,CAAA,EAAE,OAAO,CAAA,EAAE,CAAC,CAAA,EAAE,OAAO,CAAA,EAAE,CAAC,GAAE,OAAO,CAAA,EAAE,CAAC,CAAA,EAAE,OAAO,GAAE,CAAC,CAAA,EAAE,OAAO,CAAA,EAAE,CAAC,GAAE,OAAO,CAAA,EAAE,CAAC,CAAA,EAAE,OAAO,GAAE,CAAC,CAAA,EAAE,OAAO,CAAA,EAAE,CAAC,GAAE,OAAO,CAAA,EAAE,CAAC,CAAA,EAAE,OAAO,GAAE,CAAC,CAAA,EAAE,OAAO,CAAA,EAAE,CAAC,GAAE,QAAQ,CAAA,EAAE,CAAC,CAAA,EAAE,QAAQ,CAAA,EAAE,CAAC,CAAA,EAAE,QAAQ,GAAE,CAAC,CAAA,EAAE,QAAQ,CAAA,EAAE,CAAC,GAAE,QAAQ,CAAA,EAAE,CAAC,CAAA,EAAE,QAAQ,GAAE,CAAC,CAAA,EAAE,QAAQ,CAAA,EAAE,CAAC,GAAE,QAAQ,CAAA,EAAE,CAAC,CAAA,EAAE,QAAQ,GAAE,CAAC,CAAA,EAAE,QAAQ,CAAA,EAAE,CAAC,GAAE,QAAQ,CAAA,EAAE,CAAC,CAAA,EAAE,QAAQ,GAAE,CAAC,CAAA,EAAE,QAAQ,CAAA,EAAE,CAAC,GAAE,QAAQ,CAAA,EAAE,CAAC,CAAA,EAAE,QAAQ,CAAA,EAAE,CAAC,CAAA,EAAE,QAAQ,GAAE,CAAC,CAAA,EAAE,QAAQ,CAAA,EAAE,CAAC,GAAE,QAAQ,CAAA,EAAE,CAAC,CAAA,EAAE,QAAQ,GAAE,CAAC,CAAA,EAAE,QAAQ,CAAA,EAAE,CAAC,GAAE,QAAQ,CAAA,EAAE,CAAC,CAAA,EAAE,QAAQ,GAAE,CAAC,CAAA,EAAE,QAAQ,CAAA,EAAE,CAAC,GAAE,QAAQ,CAAA,EAAE,CAAC,CAAA,EAAE,QAAQ,GAAE,CAAC,CAAA,EAAE,QAAQ,CAAA,EAAE,CA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","file":"compiler.js","sourcesContent":["/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n/**\n * Encode an integer in the range of 0 to 63 to a single base 64 digit.\n */\nexports.encode = function (number) {\n if (0 <= number && number < intToCharMap.length) {\n return intToCharMap[number];\n }\n throw new TypeError(\"Must be between 0 and 63: \" + number);\n};\n\n/**\n * Decode a single base 64 character code digit to an integer. Returns -1 on\n * failure.\n */\nexports.decode = function (charCode) {\n var bigA = 65; // 'A'\n var bigZ = 90; // 'Z'\n\n var littleA = 97; // 'a'\n var littleZ = 122; // 'z'\n\n var zero = 48; // '0'\n var nine = 57; // '9'\n\n var plus = 43; // '+'\n var slash = 47; // '/'\n\n var littleOffset = 26;\n var numberOffset = 52;\n\n // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ\n if (bigA <= charCode && charCode <= bigZ) {\n return (charCode - bigA);\n }\n\n // 26 - 51: abcdefghijklmnopqrstuvwxyz\n if (littleA <= charCode && charCode <= littleZ) {\n return (charCode - littleA + littleOffset);\n }\n\n // 52 - 61: 0123456789\n if (zero <= charCode && charCode <= nine) {\n return (charCode - zero + numberOffset);\n }\n\n // 62: +\n if (charCode == plus) {\n return 62;\n }\n\n // 63: /\n if (charCode == slash) {\n return 63;\n }\n\n // Invalid base64 digit.\n return -1;\n};\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n *\n * Based on the Base 64 VLQ implementation in Closure Compiler:\n * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java\n *\n * Copyright 2011 The Closure Compiler Authors. All rights reserved.\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following\n * disclaimer in the documentation and/or other materials provided\n * with the distribution.\n * * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived\n * from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nvar base64 = require('./base64');\n\n// A single base 64 digit can contain 6 bits of data. For the base 64 variable\n// length quantities we use in the source map spec, the first bit is the sign,\n// the next four bits are the actual value, and the 6th bit is the\n// continuation bit. The continuation bit tells us whether there are more\n// digits in this value following this digit.\n//\n// Continuation\n// | Sign\n// | |\n// V V\n// 101011\n\nvar VLQ_BASE_SHIFT = 5;\n\n// binary: 100000\nvar VLQ_BASE = 1 << VLQ_BASE_SHIFT;\n\n// binary: 011111\nvar VLQ_BASE_MASK = VLQ_BASE - 1;\n\n// binary: 100000\nvar VLQ_CONTINUATION_BIT = VLQ_BASE;\n\n/**\n * Converts from a two-complement value to a value where the sign bit is\n * placed in the least significant bit. For example, as decimals:\n * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary)\n * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary)\n */\nfunction toVLQSigned(aValue) {\n return aValue < 0\n ? ((-aValue) << 1) + 1\n : (aValue << 1) + 0;\n}\n\n/**\n * Converts to a two-complement value from a value where the sign bit is\n * placed in the least significant bit. For example, as decimals:\n * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1\n * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2\n */\nfunction fromVLQSigned(aValue) {\n var isNegative = (aValue & 1) === 1;\n var shifted = aValue >> 1;\n return isNegative\n ? -shifted\n : shifted;\n}\n\n/**\n * Returns the base 64 VLQ encoded value.\n */\nexports.encode = function base64VLQ_encode(aValue) {\n var encoded = \"\";\n var digit;\n\n var vlq = toVLQSigned(aValue);\n\n do {\n digit = vlq & VLQ_BASE_MASK;\n vlq >>>= VLQ_BASE_SHIFT;\n if (vlq > 0) {\n // There are still more digits in this value, so we must make sure the\n // continuation bit is marked.\n digit |= VLQ_CONTINUATION_BIT;\n }\n encoded += base64.encode(digit);\n } while (vlq > 0);\n\n return encoded;\n};\n\n/**\n * Decodes the next base 64 VLQ value from the given string and returns the\n * value and the rest of the string via the out parameter.\n */\nexports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {\n var strLen = aStr.length;\n var result = 0;\n var shift = 0;\n var continuation, digit;\n\n do {\n if (aIndex >= strLen) {\n throw new Error(\"Expected more digits in base 64 VLQ value.\");\n }\n\n digit = base64.decode(aStr.charCodeAt(aIndex++));\n if (digit === -1) {\n throw new Error(\"Invalid base64 digit: \" + aStr.charAt(aIndex - 1));\n }\n\n continuation = !!(digit & VLQ_CONTINUATION_BIT);\n digit &= VLQ_BASE_MASK;\n result = result + (digit << shift);\n shift += VLQ_BASE_SHIFT;\n } while (continuation);\n\n aOutParam.value = fromVLQSigned(result);\n aOutParam.rest = aIndex;\n};\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n/**\n * This is a helper function for getting values from parameter/options\n * objects.\n *\n * @param args The object we are extracting values from\n * @param name The name of the property we are getting.\n * @param defaultValue An optional value to return if the property is missing\n * from the object. If this is not specified and the property is missing, an\n * error will be thrown.\n */\nfunction getArg(aArgs, aName, aDefaultValue) {\n if (aName in aArgs) {\n return aArgs[aName];\n } else if (arguments.length === 3) {\n return aDefaultValue;\n } else {\n throw new Error('\"' + aName + '\" is a required argument.');\n }\n}\nexports.getArg = getArg;\n\nvar urlRegexp = /^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.-]*)(?::(\\d+))?(.*)$/;\nvar dataUrlRegexp = /^data:.+\\,.+$/;\n\nfunction urlParse(aUrl) {\n var match = aUrl.match(urlRegexp);\n if (!match) {\n return null;\n }\n return {\n scheme: match[1],\n auth: match[2],\n host: match[3],\n port: match[4],\n path: match[5]\n };\n}\nexports.urlParse = urlParse;\n\nfunction urlGenerate(aParsedUrl) {\n var url = '';\n if (aParsedUrl.scheme) {\n url += aParsedUrl.scheme + ':';\n }\n url += '//';\n if (aParsedUrl.auth) {\n url += aParsedUrl.auth + '@';\n }\n if (aParsedUrl.host) {\n url += aParsedUrl.host;\n }\n if (aParsedUrl.port) {\n url += \":\" + aParsedUrl.port\n }\n if (aParsedUrl.path) {\n url += aParsedUrl.path;\n }\n return url;\n}\nexports.urlGenerate = urlGenerate;\n\nvar MAX_CACHED_INPUTS = 32;\n\n/**\n * Takes some function `f(input) -> result` and returns a memoized version of\n * `f`.\n *\n * We keep at most `MAX_CACHED_INPUTS` memoized results of `f` alive. The\n * memoization is a dumb-simple, linear least-recently-used cache.\n */\nfunction lruMemoize(f) {\n var cache = [];\n\n return function(input) {\n for (var i = 0; i < cache.length; i++) {\n if (cache[i].input === input) {\n var temp = cache[0];\n cache[0] = cache[i];\n cache[i] = temp;\n return cache[0].result;\n }\n }\n\n var result = f(input);\n\n cache.unshift({\n input,\n result,\n });\n\n if (cache.length > MAX_CACHED_INPUTS) {\n cache.pop();\n }\n\n return result;\n };\n}\n\n/**\n * Normalizes a path, or the path portion of a URL:\n *\n * - Replaces consecutive slashes with one slash.\n * - Removes unnecessary '.' parts.\n * - Removes unnecessary '<dir>/..' parts.\n *\n * Based on code in the Node.js 'path' core module.\n *\n * @param aPath The path or url to normalize.\n */\nvar normalize = lruMemoize(function normalize(aPath) {\n var path = aPath;\n var url = urlParse(aPath);\n if (url) {\n if (!url.path) {\n return aPath;\n }\n path = url.path;\n }\n var isAbsolute = exports.isAbsolute(path);\n // Split the path into parts between `/` characters. This is much faster than\n // using `.split(/\\/+/g)`.\n var parts = [];\n var start = 0;\n var i = 0;\n while (true) {\n start = i;\n i = path.indexOf(\"/\", start);\n if (i === -1) {\n parts.push(path.slice(start));\n break;\n } else {\n parts.push(path.slice(start, i));\n while (i < path.length && path[i] === \"/\") {\n i++;\n }\n }\n }\n\n for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {\n part = parts[i];\n if (part === '.') {\n parts.splice(i, 1);\n } else if (part === '..') {\n up++;\n } else if (up > 0) {\n if (part === '') {\n // The first part is blank if the path is absolute. Trying to go\n // above the root is a no-op. Therefore we can remove all '..' parts\n // directly after the root.\n parts.splice(i + 1, up);\n up = 0;\n } else {\n parts.splice(i, 2);\n up--;\n }\n }\n }\n path = parts.join('/');\n\n if (path === '') {\n path = isAbsolute ? '/' : '.';\n }\n\n if (url) {\n url.path = path;\n return urlGenerate(url);\n }\n return path;\n});\nexports.normalize = normalize;\n\n/**\n * Joins two paths/URLs.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be joined with the root.\n *\n * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a\n * scheme-relative URL: Then the scheme of aRoot, if any, is prepended\n * first.\n * - Otherwise aPath is a path. If aRoot is a URL, then its path portion\n * is updated with the result and aRoot is returned. Otherwise the result\n * is returned.\n * - If aPath is absolute, the result is aPath.\n * - Otherwise the two paths are joined with a slash.\n * - Joining for example 'http://' and 'www.example.com' is also supported.\n */\nfunction join(aRoot, aPath) {\n if (aRoot === \"\") {\n aRoot = \".\";\n }\n if (aPath === \"\") {\n aPath = \".\";\n }\n var aPathUrl = urlParse(aPath);\n var aRootUrl = urlParse(aRoot);\n if (aRootUrl) {\n aRoot = aRootUrl.path || '/';\n }\n\n // `join(foo, '//www.example.org')`\n if (aPathUrl && !aPathUrl.scheme) {\n if (aRootUrl) {\n aPathUrl.scheme = aRootUrl.scheme;\n }\n return urlGenerate(aPathUrl);\n }\n\n if (aPathUrl || aPath.match(dataUrlRegexp)) {\n return aPath;\n }\n\n // `join('http://', 'www.example.com')`\n if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {\n aRootUrl.host = aPath;\n return urlGenerate(aRootUrl);\n }\n\n var joined = aPath.charAt(0) === '/'\n ? aPath\n : normalize(aRoot.replace(/\\/+$/, '') + '/' + aPath);\n\n if (aRootUrl) {\n aRootUrl.path = joined;\n return urlGenerate(aRootUrl);\n }\n return joined;\n}\nexports.join = join;\n\nexports.isAbsolute = function (aPath) {\n return aPath.charAt(0) === '/' || urlRegexp.test(aPath);\n};\n\n/**\n * Make a path relative to a URL or another path.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be made relative to aRoot.\n */\nfunction relative(aRoot, aPath) {\n if (aRoot === \"\") {\n aRoot = \".\";\n }\n\n aRoot = aRoot.replace(/\\/$/, '');\n\n // It is possible for the path to be above the root. In this case, simply\n // checking whether the root is a prefix of the path won't work. Instead, we\n // need to remove components from the root one by one, until either we find\n // a prefix that fits, or we run out of components to remove.\n var level = 0;\n while (aPath.indexOf(aRoot + '/') !== 0) {\n var index = aRoot.lastIndexOf(\"/\");\n if (index < 0) {\n return aPath;\n }\n\n // If the only part of the root that is left is the scheme (i.e. http://,\n // file:///, etc.), one or more slashes (/), or simply nothing at all, we\n // have exhausted all components, so the path is not relative to the root.\n aRoot = aRoot.slice(0, index);\n if (aRoot.match(/^([^\\/]+:\\/)?\\/*$/)) {\n return aPath;\n }\n\n ++level;\n }\n\n // Make sure we add a \"../\" for each component we removed from the root.\n return Array(level + 1).join(\"../\") + aPath.substr(aRoot.length + 1);\n}\nexports.relative = relative;\n\nvar supportsNullProto = (function () {\n var obj = Object.create(null);\n return !('__proto__' in obj);\n}());\n\nfunction identity (s) {\n return s;\n}\n\n/**\n * Because behavior goes wacky when you set `__proto__` on objects, we\n * have to prefix all the strings in our set with an arbitrary character.\n *\n * See https://github.com/mozilla/source-map/pull/31 and\n * https://github.com/mozilla/source-map/issues/30\n *\n * @param String aStr\n */\nfunction toSetString(aStr) {\n if (isProtoString(aStr)) {\n return '$' + aStr;\n }\n\n return aStr;\n}\nexports.toSetString = supportsNullProto ? identity : toSetString;\n\nfunction fromSetString(aStr) {\n if (isProtoString(aStr)) {\n return aStr.slice(1);\n }\n\n return aStr;\n}\nexports.fromSetString = supportsNullProto ? identity : fromSetString;\n\nfunction isProtoString(s) {\n if (!s) {\n return false;\n }\n\n var length = s.length;\n\n if (length < 9 /* \"__proto__\".length */) {\n return false;\n }\n\n if (s.charCodeAt(length - 1) !== 95 /* '_' */ ||\n s.charCodeAt(length - 2) !== 95 /* '_' */ ||\n s.charCodeAt(length - 3) !== 111 /* 'o' */ ||\n s.charCodeAt(length - 4) !== 116 /* 't' */ ||\n s.charCodeAt(length - 5) !== 111 /* 'o' */ ||\n s.charCodeAt(length - 6) !== 114 /* 'r' */ ||\n s.charCodeAt(length - 7) !== 112 /* 'p' */ ||\n s.charCodeAt(length - 8) !== 95 /* '_' */ ||\n s.charCodeAt(length - 9) !== 95 /* '_' */) {\n return false;\n }\n\n for (var i = length - 10; i >= 0; i--) {\n if (s.charCodeAt(i) !== 36 /* '$' */) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Comparator between two mappings where the original positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same original source/line/column, but different generated\n * line and column the same. Useful when searching for a mapping with a\n * stubbed out mapping.\n */\nfunction compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {\n var cmp = strcmp(mappingA.source, mappingB.source);\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0 || onlyCompareOriginal) {\n return cmp;\n }\n\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByOriginalPositions = compareByOriginalPositions;\n\nfunction compareByOriginalPositionsNoSource(mappingA, mappingB, onlyCompareOriginal) {\n var cmp\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0 || onlyCompareOriginal) {\n return cmp;\n }\n\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByOriginalPositionsNoSource = compareByOriginalPositionsNoSource;\n\n/**\n * Comparator between two mappings with deflated source and name indices where\n * the generated positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same generated line and column, but different\n * source/name/original line and column the same. Useful when searching for a\n * mapping with a stubbed out mapping.\n */\nfunction compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {\n var cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0 || onlyCompareGenerated) {\n return cmp;\n }\n\n cmp = strcmp(mappingA.source, mappingB.source);\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;\n\nfunction compareByGeneratedPositionsDeflatedNoLine(mappingA, mappingB, onlyCompareGenerated) {\n var cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0 || onlyCompareGenerated) {\n return cmp;\n }\n\n cmp = strcmp(mappingA.source, mappingB.source);\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsDeflatedNoLine = compareByGeneratedPositionsDeflatedNoLine;\n\nfunction strcmp(aStr1, aStr2) {\n if (aStr1 === aStr2) {\n return 0;\n }\n\n if (aStr1 === null) {\n return 1; // aStr2 !== null\n }\n\n if (aStr2 === null) {\n return -1; // aStr1 !== null\n }\n\n if (aStr1 > aStr2) {\n return 1;\n }\n\n return -1;\n}\n\n/**\n * Comparator between two mappings with inflated source and name strings where\n * the generated positions are compared.\n */\nfunction compareByGeneratedPositionsInflated(mappingA, mappingB) {\n var cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = strcmp(mappingA.source, mappingB.source);\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;\n\n/**\n * Strip any JSON XSSI avoidance prefix from the string (as documented\n * in the source maps specification), and then parse the string as\n * JSON.\n */\nfunction parseSourceMapInput(str) {\n return JSON.parse(str.replace(/^\\)]}'[^\\n]*\\n/, ''));\n}\nexports.parseSourceMapInput = parseSourceMapInput;\n\n/**\n * Compute the URL of a source given the the source root, the source's\n * URL, and the source map's URL.\n */\nfunction computeSourceURL(sourceRoot, sourceURL, sourceMapURL) {\n sourceURL = sourceURL || '';\n\n if (sourceRoot) {\n // This follows what Chrome does.\n if (sourceRoot[sourceRoot.length - 1] !== '/' && sourceURL[0] !== '/') {\n sourceRoot += '/';\n }\n // The spec says:\n // Line 4: An optional source root, useful for relocating source\n // files on a server or removing repeated values in the\n // “sources” entry. This value is prepended to the individual\n // entries in the “source” field.\n sourceURL = sourceRoot + sourceURL;\n }\n\n // Historically, SourceMapConsumer did not take the sourceMapURL as\n // a parameter. This mode is still somewhat supported, which is why\n // this code block is conditional. However, it's preferable to pass\n // the source map URL to SourceMapConsumer, so that this function\n // can implement the source URL resolution algorithm as outlined in\n // the spec. This block is basically the equivalent of:\n // new URL(sourceURL, sourceMapURL).toString()\n // ... except it avoids using URL, which wasn't available in the\n // older releases of node still supported by this library.\n //\n // The spec says:\n // If the sources are not absolute URLs after prepending of the\n // “sourceRoot”, the sources are resolved relative to the\n // SourceMap (like resolving script src in a html document).\n if (sourceMapURL) {\n var parsed = urlParse(sourceMapURL);\n if (!parsed) {\n throw new Error(\"sourceMapURL could not be parsed\");\n }\n if (parsed.path) {\n // Strip the last path component, but keep the \"/\".\n var index = parsed.path.lastIndexOf('/');\n if (index >= 0) {\n parsed.path = parsed.path.substring(0, index + 1);\n }\n }\n sourceURL = join(urlGenerate(parsed), sourceURL);\n }\n\n return normalize(sourceURL);\n}\nexports.computeSourceURL = computeSourceURL;\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar has = Object.prototype.hasOwnProperty;\nvar hasNativeMap = typeof Map !== \"undefined\";\n\n/**\n * A data structure which is a combination of an array and a set. Adding a new\n * member is O(1), testing for membership is O(1), and finding the index of an\n * element is O(1). Removing elements from the set is not supported. Only\n * strings are supported for membership.\n */\nfunction ArraySet() {\n this._array = [];\n this._set = hasNativeMap ? new Map() : Object.create(null);\n}\n\n/**\n * Static method for creating ArraySet instances from an existing array.\n */\nArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {\n var set = new ArraySet();\n for (var i = 0, len = aArray.length; i < len; i++) {\n set.add(aArray[i], aAllowDuplicates);\n }\n return set;\n};\n\n/**\n * Return how many unique items are in this ArraySet. If duplicates have been\n * added, than those do not count towards the size.\n *\n * @returns Number\n */\nArraySet.prototype.size = function ArraySet_size() {\n return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;\n};\n\n/**\n * Add the given string to this set.\n *\n * @param String aStr\n */\nArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {\n var sStr = hasNativeMap ? aStr : util.toSetString(aStr);\n var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);\n var idx = this._array.length;\n if (!isDuplicate || aAllowDuplicates) {\n this._array.push(aStr);\n }\n if (!isDuplicate) {\n if (hasNativeMap) {\n this._set.set(aStr, idx);\n } else {\n this._set[sStr] = idx;\n }\n }\n};\n\n/**\n * Is the given string a member of this set?\n *\n * @param String aStr\n */\nArraySet.prototype.has = function ArraySet_has(aStr) {\n if (hasNativeMap) {\n return this._set.has(aStr);\n } else {\n var sStr = util.toSetString(aStr);\n return has.call(this._set, sStr);\n }\n};\n\n/**\n * What is the index of the given string in the array?\n *\n * @param String aStr\n */\nArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {\n if (hasNativeMap) {\n var idx = this._set.get(aStr);\n if (idx >= 0) {\n return idx;\n }\n } else {\n var sStr = util.toSetString(aStr);\n if (has.call(this._set, sStr)) {\n return this._set[sStr];\n }\n }\n\n throw new Error('\"' + aStr + '\" is not in the set.');\n};\n\n/**\n * What is the element at the given index?\n *\n * @param Number aIdx\n */\nArraySet.prototype.at = function ArraySet_at(aIdx) {\n if (aIdx >= 0 && aIdx < this._array.length) {\n return this._array[aIdx];\n }\n throw new Error('No element indexed by ' + aIdx);\n};\n\n/**\n * Returns the array representation of this set (which has the proper indices\n * indicated by indexOf). Note that this is a copy of the internal array used\n * for storing the members so that no one can mess with internal state.\n */\nArraySet.prototype.toArray = function ArraySet_toArray() {\n return this._array.slice();\n};\n\nexports.ArraySet = ArraySet;\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2014 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\n\n/**\n * Determine whether mappingB is after mappingA with respect to generated\n * position.\n */\nfunction generatedPositionAfter(mappingA, mappingB) {\n // Optimized for most common case\n var lineA = mappingA.generatedLine;\n var lineB = mappingB.generatedLine;\n var columnA = mappingA.generatedColumn;\n var columnB = mappingB.generatedColumn;\n return lineB > lineA || lineB == lineA && columnB >= columnA ||\n util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;\n}\n\n/**\n * A data structure to provide a sorted view of accumulated mappings in a\n * performance conscious manner. It trades a neglibable overhead in general\n * case for a large speedup in case of mappings being added in order.\n */\nfunction MappingList() {\n this._array = [];\n this._sorted = true;\n // Serves as infimum\n this._last = {generatedLine: -1, generatedColumn: 0};\n}\n\n/**\n * Iterate through internal items. This method takes the same arguments that\n * `Array.prototype.forEach` takes.\n *\n * NOTE: The order of the mappings is NOT guaranteed.\n */\nMappingList.prototype.unsortedForEach =\n function MappingList_forEach(aCallback, aThisArg) {\n this._array.forEach(aCallback, aThisArg);\n };\n\n/**\n * Add the given source mapping.\n *\n * @param Object aMapping\n */\nMappingList.prototype.add = function MappingList_add(aMapping) {\n if (generatedPositionAfter(this._last, aMapping)) {\n this._last = aMapping;\n this._array.push(aMapping);\n } else {\n this._sorted = false;\n this._array.push(aMapping);\n }\n};\n\n/**\n * Returns the flat, sorted array of mappings. The mappings are sorted by\n * generated position.\n *\n * WARNING: This method returns internal data without copying, for\n * performance. The return value must NOT be mutated, and should be treated as\n * an immutable borrow. If you want to take ownership, you must make your own\n * copy.\n */\nMappingList.prototype.toArray = function MappingList_toArray() {\n if (!this._sorted) {\n this._array.sort(util.compareByGeneratedPositionsInflated);\n this._sorted = true;\n }\n return this._array;\n};\n\nexports.MappingList = MappingList;\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar base64VLQ = require('./base64-vlq');\nvar util = require('./util');\nvar ArraySet = require('./array-set').ArraySet;\nvar MappingList = require('./mapping-list').MappingList;\n\n/**\n * An instance of the SourceMapGenerator represents a source map which is\n * being built incrementally. You may pass an object with the following\n * properties:\n *\n * - file: The filename of the generated source.\n * - sourceRoot: A root for all relative URLs in this source map.\n */\nfunction SourceMapGenerator(aArgs) {\n if (!aArgs) {\n aArgs = {};\n }\n this._file = util.getArg(aArgs, 'file', null);\n this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);\n this._skipValidation = util.getArg(aArgs, 'skipValidation', false);\n this._ignoreInvalidMapping = util.getArg(aArgs, 'ignoreInvalidMapping', false);\n this._sources = new ArraySet();\n this._names = new ArraySet();\n this._mappings = new MappingList();\n this._sourcesContents = null;\n}\n\nSourceMapGenerator.prototype._version = 3;\n\n/**\n * Creates a new SourceMapGenerator based on a SourceMapConsumer\n *\n * @param aSourceMapConsumer The SourceMap.\n */\nSourceMapGenerator.fromSourceMap =\n function SourceMapGenerator_fromSourceMap(aSourceMapConsumer, generatorOps) {\n var sourceRoot = aSourceMapConsumer.sourceRoot;\n var generator = new SourceMapGenerator(Object.assign(generatorOps || {}, {\n file: aSourceMapConsumer.file,\n sourceRoot: sourceRoot\n }));\n aSourceMapConsumer.eachMapping(function (mapping) {\n var newMapping = {\n generated: {\n line: mapping.generatedLine,\n column: mapping.generatedColumn\n }\n };\n\n if (mapping.source != null) {\n newMapping.source = mapping.source;\n if (sourceRoot != null) {\n newMapping.source = util.relative(sourceRoot, newMapping.source);\n }\n\n newMapping.original = {\n line: mapping.originalLine,\n column: mapping.originalColumn\n };\n\n if (mapping.name != null) {\n newMapping.name = mapping.name;\n }\n }\n\n generator.addMapping(newMapping);\n });\n aSourceMapConsumer.sources.forEach(function (sourceFile) {\n var sourceRelative = sourceFile;\n if (sourceRoot !== null) {\n sourceRelative = util.relative(sourceRoot, sourceFile);\n }\n\n if (!generator._sources.has(sourceRelative)) {\n generator._sources.add(sourceRelative);\n }\n\n var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n if (content != null) {\n generator.setSourceContent(sourceFile, content);\n }\n });\n return generator;\n };\n\n/**\n * Add a single mapping from original source line and column to the generated\n * source's line and column for this source map being created. The mapping\n * object should have the following properties:\n *\n * - generated: An object with the generated line and column positions.\n * - original: An object with the original line and column positions.\n * - source: The original source file (relative to the sourceRoot).\n * - name: An optional original token name for this mapping.\n */\nSourceMapGenerator.prototype.addMapping =\n function SourceMapGenerator_addMapping(aArgs) {\n var generated = util.getArg(aArgs, 'generated');\n var original = util.getArg(aArgs, 'original', null);\n var source = util.getArg(aArgs, 'source', null);\n var name = util.getArg(aArgs, 'name', null);\n\n if (!this._skipValidation) {\n if (this._validateMapping(generated, original, source, name) === false) {\n return;\n }\n }\n\n if (source != null) {\n source = String(source);\n if (!this._sources.has(source)) {\n this._sources.add(source);\n }\n }\n\n if (name != null) {\n name = String(name);\n if (!this._names.has(name)) {\n this._names.add(name);\n }\n }\n\n this._mappings.add({\n generatedLine: generated.line,\n generatedColumn: generated.column,\n originalLine: original != null && original.line,\n originalColumn: original != null && original.column,\n source: source,\n name: name\n });\n };\n\n/**\n * Set the source content for a source file.\n */\nSourceMapGenerator.prototype.setSourceContent =\n function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {\n var source = aSourceFile;\n if (this._sourceRoot != null) {\n source = util.relative(this._sourceRoot, source);\n }\n\n if (aSourceContent != null) {\n // Add the source content to the _sourcesContents map.\n // Create a new _sourcesContents map if the property is null.\n if (!this._sourcesContents) {\n this._sourcesContents = Object.create(null);\n }\n this._sourcesContents[util.toSetString(source)] = aSourceContent;\n } else if (this._sourcesContents) {\n // Remove the source file from the _sourcesContents map.\n // If the _sourcesContents map is empty, set the property to null.\n delete this._sourcesContents[util.toSetString(source)];\n if (Object.keys(this._sourcesContents).length === 0) {\n this._sourcesContents = null;\n }\n }\n };\n\n/**\n * Applies the mappings of a sub-source-map for a specific source file to the\n * source map being generated. Each mapping to the supplied source file is\n * rewritten using the supplied source map. Note: The resolution for the\n * resulting mappings is the minimium of this map and the supplied map.\n *\n * @param aSourceMapConsumer The source map to be applied.\n * @param aSourceFile Optional. The filename of the source file.\n * If omitted, SourceMapConsumer's file property will be used.\n * @param aSourceMapPath Optional. The dirname of the path to the source map\n * to be applied. If relative, it is relative to the SourceMapConsumer.\n * This parameter is needed when the two source maps aren't in the same\n * directory, and the source map to be applied contains relative source\n * paths. If so, those relative source paths need to be rewritten\n * relative to the SourceMapGenerator.\n */\nSourceMapGenerator.prototype.applySourceMap =\n function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {\n var sourceFile = aSourceFile;\n // If aSourceFile is omitted, we will use the file property of the SourceMap\n if (aSourceFile == null) {\n if (aSourceMapConsumer.file == null) {\n throw new Error(\n 'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +\n 'or the source map\\'s \"file\" property. Both were omitted.'\n );\n }\n sourceFile = aSourceMapConsumer.file;\n }\n var sourceRoot = this._sourceRoot;\n // Make \"sourceFile\" relative if an absolute Url is passed.\n if (sourceRoot != null) {\n sourceFile = util.relative(sourceRoot, sourceFile);\n }\n // Applying the SourceMap can add and remove items from the sources and\n // the names array.\n var newSources = new ArraySet();\n var newNames = new ArraySet();\n\n // Find mappings for the \"sourceFile\"\n this._mappings.unsortedForEach(function (mapping) {\n if (mapping.source === sourceFile && mapping.originalLine != null) {\n // Check if it can be mapped by the source map, then update the mapping.\n var original = aSourceMapConsumer.originalPositionFor({\n line: mapping.originalLine,\n column: mapping.originalColumn\n });\n if (original.source != null) {\n // Copy mapping\n mapping.source = original.source;\n if (aSourceMapPath != null) {\n mapping.source = util.join(aSourceMapPath, mapping.source)\n }\n if (sourceRoot != null) {\n mapping.source = util.relative(sourceRoot, mapping.source);\n }\n mapping.originalLine = original.line;\n mapping.originalColumn = original.column;\n if (original.name != null) {\n mapping.name = original.name;\n }\n }\n }\n\n var source = mapping.source;\n if (source != null && !newSources.has(source)) {\n newSources.add(source);\n }\n\n var name = mapping.name;\n if (name != null && !newNames.has(name)) {\n newNames.add(name);\n }\n\n }, this);\n this._sources = newSources;\n this._names = newNames;\n\n // Copy sourcesContents of applied map.\n aSourceMapConsumer.sources.forEach(function (sourceFile) {\n var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n if (content != null) {\n if (aSourceMapPath != null) {\n sourceFile = util.join(aSourceMapPath, sourceFile);\n }\n if (sourceRoot != null) {\n sourceFile = util.relative(sourceRoot, sourceFile);\n }\n this.setSourceContent(sourceFile, content);\n }\n }, this);\n };\n\n/**\n * A mapping can have one of the three levels of data:\n *\n * 1. Just the generated position.\n * 2. The Generated position, original position, and original source.\n * 3. Generated and original position, original source, as well as a name\n * token.\n *\n * To maintain consistency, we validate that any new mapping being added falls\n * in to one of these categories.\n */\nSourceMapGenerator.prototype._validateMapping =\n function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,\n aName) {\n // When aOriginal is truthy but has empty values for .line and .column,\n // it is most likely a programmer error. In this case we throw a very\n // specific error message to try to guide them the right way.\n // For example: https://github.com/Polymer/polymer-bundler/pull/519\n if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {\n var message = 'original.line and original.column are not numbers -- you probably meant to omit ' +\n 'the original mapping entirely and only map the generated position. If so, pass ' +\n 'null for the original mapping instead of an object with empty or null values.'\n\n if (this._ignoreInvalidMapping) {\n if (typeof console !== 'undefined' && console.warn) {\n console.warn(message);\n }\n return false;\n } else {\n throw new Error(message);\n }\n }\n\n if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n && aGenerated.line > 0 && aGenerated.column >= 0\n && !aOriginal && !aSource && !aName) {\n // Case 1.\n return;\n }\n else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n && aOriginal && 'line' in aOriginal && 'column' in aOriginal\n && aGenerated.line > 0 && aGenerated.column >= 0\n && aOriginal.line > 0 && aOriginal.column >= 0\n && aSource) {\n // Cases 2 and 3.\n return;\n }\n else {\n var message = 'Invalid mapping: ' + JSON.stringify({\n generated: aGenerated,\n source: aSource,\n original: aOriginal,\n name: aName\n });\n\n if (this._ignoreInvalidMapping) {\n if (typeof console !== 'undefined' && console.warn) {\n console.warn(message);\n }\n return false;\n } else {\n throw new Error(message)\n }\n }\n };\n\n/**\n * Serialize the accumulated mappings in to the stream of base 64 VLQs\n * specified by the source map format.\n */\nSourceMapGenerator.prototype._serializeMappings =\n function SourceMapGenerator_serializeMappings() {\n var previousGeneratedColumn = 0;\n var previousGeneratedLine = 1;\n var previousOriginalColumn = 0;\n var previousOriginalLine = 0;\n var previousName = 0;\n var previousSource = 0;\n var result = '';\n var next;\n var mapping;\n var nameIdx;\n var sourceIdx;\n\n var mappings = this._mappings.toArray();\n for (var i = 0, len = mappings.length; i < len; i++) {\n mapping = mappings[i];\n next = ''\n\n if (mapping.generatedLine !== previousGeneratedLine) {\n previousGeneratedColumn = 0;\n while (mapping.generatedLine !== previousGeneratedLine) {\n next += ';';\n previousGeneratedLine++;\n }\n }\n else {\n if (i > 0) {\n if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {\n continue;\n }\n next += ',';\n }\n }\n\n next += base64VLQ.encode(mapping.generatedColumn\n - previousGeneratedColumn);\n previousGeneratedColumn = mapping.generatedColumn;\n\n if (mapping.source != null) {\n sourceIdx = this._sources.indexOf(mapping.source);\n next += base64VLQ.encode(sourceIdx - previousSource);\n previousSource = sourceIdx;\n\n // lines are stored 0-based in SourceMap spec version 3\n next += base64VLQ.encode(mapping.originalLine - 1\n - previousOriginalLine);\n previousOriginalLine = mapping.originalLine - 1;\n\n next += base64VLQ.encode(mapping.originalColumn\n - previousOriginalColumn);\n previousOriginalColumn = mapping.originalColumn;\n\n if (mapping.name != null) {\n nameIdx = this._names.indexOf(mapping.name);\n next += base64VLQ.encode(nameIdx - previousName);\n previousName = nameIdx;\n }\n }\n\n result += next;\n }\n\n return result;\n };\n\nSourceMapGenerator.prototype._generateSourcesContent =\n function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {\n return aSources.map(function (source) {\n if (!this._sourcesContents) {\n return null;\n }\n if (aSourceRoot != null) {\n source = util.relative(aSourceRoot, source);\n }\n var key = util.toSetString(source);\n return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)\n ? this._sourcesContents[key]\n : null;\n }, this);\n };\n\n/**\n * Externalize the source map.\n */\nSourceMapGenerator.prototype.toJSON =\n function SourceMapGenerator_toJSON() {\n var map = {\n version: this._version,\n sources: this._sources.toArray(),\n names: this._names.toArray(),\n mappings: this._serializeMappings()\n };\n if (this._file != null) {\n map.file = this._file;\n }\n if (this._sourceRoot != null) {\n map.sourceRoot = this._sourceRoot;\n }\n if (this._sourcesContents) {\n map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);\n }\n\n return map;\n };\n\n/**\n * Render the source map being generated to a string.\n */\nSourceMapGenerator.prototype.toString =\n function SourceMapGenerator_toString() {\n return JSON.stringify(this.toJSON());\n };\n\nexports.SourceMapGenerator = SourceMapGenerator;\n","// CSS Syntax Module Level 3\n// https://www.w3.org/TR/css-syntax-3/\nexport const EOF = 0; // <EOF-token>\nexport const Ident = 1; // <ident-token>\nexport const Function = 2; // <function-token>\nexport const AtKeyword = 3; // <at-keyword-token>\nexport const Hash = 4; // <hash-token>\nexport const String = 5; // <string-token>\nexport const BadString = 6; // <bad-string-token>\nexport const Url = 7; // <url-token>\nexport const BadUrl = 8; // <bad-url-token>\nexport const Delim = 9; // <delim-token>\nexport const Number = 10; // <number-token>\nexport const Percentage = 11; // <percentage-token>\nexport const Dimension = 12; // <dimension-token>\nexport const WhiteSpace = 13; // <whitespace-token>\nexport const CDO = 14; // <CDO-token>\nexport const CDC = 15; // <CDC-token>\nexport const Colon = 16; // <colon-token> :\nexport const Semicolon = 17; // <semicolon-token> ;\nexport const Comma = 18; // <comma-token> ,\nexport const LeftSquareBracket = 19; // <[-token>\nexport const RightSquareBracket = 20; // <]-token>\nexport const LeftParenthesis = 21; // <(-token>\nexport const RightParenthesis = 22; // <)-token>\nexport const LeftCurlyBracket = 23; // <{-token>\nexport const RightCurlyBracket = 24; // <}-token>\nexport const Comment = 25;\n","const EOF = 0;\n\n// https://drafts.csswg.org/css-syntax-3/\n// § 4.2. Definitions\n\n// digit\n// A code point between U+0030 DIGIT ZERO (0) and U+0039 DIGIT NINE (9).\nexport function isDigit(code) {\n return code >= 0x0030 && code <= 0x0039;\n}\n\n// hex digit\n// A digit, or a code point between U+0041 LATIN CAPITAL LETTER A (A) and U+0046 LATIN CAPITAL LETTER F (F),\n// or a code point between U+0061 LATIN SMALL LETTER A (a) and U+0066 LATIN SMALL LETTER F (f).\nexport function isHexDigit(code) {\n return (\n isDigit(code) || // 0 .. 9\n (code >= 0x0041 && code <= 0x0046) || // A .. F\n (code >= 0x0061 && code <= 0x0066) // a .. f\n );\n}\n\n// uppercase letter\n// A code point between U+0041 LATIN CAPITAL LETTER A (A) and U+005A LATIN CAPITAL LETTER Z (Z).\nexport function isUppercaseLetter(code) {\n return code >= 0x0041 && code <= 0x005A;\n}\n\n// lowercase letter\n// A code point between U+0061 LATIN SMALL LETTER A (a) and U+007A LATIN SMALL LETTER Z (z).\nexport function isLowercaseLetter(code) {\n return code >= 0x0061 && code <= 0x007A;\n}\n\n// letter\n// An uppercase letter or a lowercase letter.\nexport function isLetter(code) {\n return isUppercaseLetter(code) || isLowercaseLetter(code);\n}\n\n// non-ASCII code point\n// A code point with a value equal to or greater than U+0080 <control>.\n//\n// 2024-09-02: The latest spec narrows the range for non-ASCII characters (see https://github.com/csstree/csstree/issues/188).\n// However, all modern browsers support a wider range, and strictly following the latest spec could result\n// in some CSS being parsed incorrectly, even though it works in the browser. Therefore, this function adheres\n// to the previous, broader definition of non-ASCII characters.\nexport function isNonAscii(code) {\n return code >= 0x0080;\n}\n\n// name-start code point\n// A letter, a non-ASCII code point, or U+005F LOW LINE (_).\nexport function isNameStart(code) {\n return isLetter(code) || isNonAscii(code) || code === 0x005F;\n}\n\n// name code point\n// A name-start code point, a digit, or U+002D HYPHEN-MINUS (-).\nexport function isName(code) {\n return isNameStart(code) || isDigit(code) || code === 0x002D;\n}\n\n// non-printable code point\n// A code point between U+0000 NULL and U+0008 BACKSPACE, or U+000B LINE TABULATION,\n// or a code point between U+000E SHIFT OUT and U+001F INFORMATION SEPARATOR ONE, or U+007F DELETE.\nexport function isNonPrintable(code) {\n return (\n (code >= 0x0000 && code <= 0x0008) ||\n (code === 0x000B) ||\n (code >= 0x000E && code <= 0x001F) ||\n (code === 0x007F)\n );\n}\n\n// newline\n// U+000A LINE FEED. Note that U+000D CARRIAGE RETURN and U+000C FORM FEED are not included in this definition,\n// as they are converted to U+000A LINE FEED during preprocessing.\n// TODO: we doesn't do a preprocessing, so check a code point for U+000D CARRIAGE RETURN and U+000C FORM FEED\nexport function isNewline(code) {\n return code === 0x000A || code === 0x000D || code === 0x000C;\n}\n\n// whitespace\n// A newline, U+0009 CHARACTER TABULATION, or U+0020 SPACE.\nexport function isWhiteSpace(code) {\n return isNewline(code) || code === 0x0020 || code === 0x0009;\n}\n\n// § 4.3.8. Check if two code points are a valid escape\nexport function isValidEscape(first, second) {\n // If the first code point is not U+005C REVERSE SOLIDUS (\\), return false.\n if (first !== 0x005C) {\n return false;\n }\n\n // Otherwise, if the second code point is a newline or EOF, return false.\n if (isNewline(second) || second === EOF) {\n return false;\n }\n\n // Otherwise, return true.\n return true;\n}\n\n// § 4.3.9. Check if three code points would start an identifier\nexport function isIdentifierStart(first, second, third) {\n // Look at the first code point:\n\n // U+002D HYPHEN-MINUS\n if (first === 0x002D) {\n // If the second code point is a name-start code point or a U+002D HYPHEN-MINUS,\n // or the second and third code points are a valid escape, return true. Otherwise, return false.\n return (\n isNameStart(second) ||\n second === 0x002D ||\n isValidEscape(second, third)\n );\n }\n\n // name-start code point\n if (isNameStart(first)) {\n // Return true.\n return true;\n }\n\n // U+005C REVERSE SOLIDUS (\\)\n if (first === 0x005C) {\n // If the first and second code points are a valid escape, return true. Otherwise, return false.\n return isValidEscape(first, second);\n }\n\n // anything else\n // Return false.\n return false;\n}\n\n// § 4.3.10. Check if three code points would start a number\nexport function isNumberStart(first, second, third) {\n // Look at the first code point:\n\n // U+002B PLUS SIGN (+)\n // U+002D HYPHEN-MINUS (-)\n if (first === 0x002B || first === 0x002D) {\n // If the second code point is a digit, return true.\n if (isDigit(second)) {\n return 2;\n }\n\n // Otherwise, if the second code point is a U+002E FULL STOP (.)\n // and the third code point is a digit, return true.\n // Otherwise, return false.\n return second === 0x002E && isDigit(third) ? 3 : 0;\n }\n\n // U+002E FULL STOP (.)\n if (first === 0x002E) {\n // If the second code point is a digit, return true. Otherwise, return false.\n return isDigit(second) ? 2 : 0;\n }\n\n // digit\n if (isDigit(first)) {\n // Return true.\n return 1;\n }\n\n // anything else\n // Return false.\n return 0;\n}\n\n//\n// Misc\n//\n\n// detect BOM (https://en.wikipedia.org/wiki/Byte_order_mark)\nexport function isBOM(code) {\n // UTF-16BE\n if (code === 0xFEFF) {\n return 1;\n }\n\n // UTF-16LE\n if (code === 0xFFFE) {\n return 1;\n }\n\n return 0;\n}\n\n// Fast code category\n// Only ASCII code points has a special meaning, that's why we define a maps for 0..127 codes only\nconst CATEGORY = new Array(0x80);\nexport const EofCategory = 0x80;\nexport const WhiteSpaceCategory = 0x82;\nexport const DigitCategory = 0x83;\nexport const NameStartCategory = 0x84;\nexport const NonPrintableCategory = 0x85;\n\nfor (let i = 0; i < CATEGORY.length; i++) {\n CATEGORY[i] =\n isWhiteSpace(i) && WhiteSpaceCategory ||\n isDigit(i) && DigitCategory ||\n isNameStart(i) && NameStartCategory ||\n isNonPrintable(i) && NonPrintableCategory ||\n i || EofCategory;\n}\n\nexport function charCodeCategory(code) {\n return code < 0x80 ? CATEGORY[code] : NameStartCategory;\n}\n","import {\n isDigit,\n isHexDigit,\n isUppercaseLetter,\n isName,\n isWhiteSpace,\n isValidEscape\n} from './char-code-definitions.js';\n\nfunction getCharCode(source, offset) {\n return offset < source.length ? source.charCodeAt(offset) : 0;\n}\n\nexport function getNewlineLength(source, offset, code) {\n if (code === 13 /* \\r */ && getCharCode(source, offset + 1) === 10 /* \\n */) {\n return 2;\n }\n\n return 1;\n}\n\nexport function cmpChar(testStr, offset, referenceCode) {\n let code = testStr.charCodeAt(offset);\n\n // code.toLowerCase() for A..Z\n if (isUppercaseLetter(code)) {\n code = code | 32;\n }\n\n return code === referenceCode;\n}\n\nexport function cmpStr(testStr, start, end, referenceStr) {\n if (end - start !== referenceStr.length) {\n return false;\n }\n\n if (start < 0 || end > testStr.length) {\n return false;\n }\n\n for (let i = start; i < end; i++) {\n const referenceCode = referenceStr.charCodeAt(i - start);\n let testCode = testStr.charCodeAt(i);\n\n // testCode.toLowerCase() for A..Z\n if (isUppercaseLetter(testCode)) {\n testCode = testCode | 32;\n }\n\n if (testCode !== referenceCode) {\n return false;\n }\n }\n\n return true;\n}\n\nexport function findWhiteSpaceStart(source, offset) {\n for (; offset >= 0; offset--) {\n if (!isWhiteSpace(source.charCodeAt(offset))) {\n break;\n }\n }\n\n return offset + 1;\n}\n\nexport function findWhiteSpaceEnd(source, offset) {\n for (; offset < source.length; offset++) {\n if (!isWhiteSpace(source.charCodeAt(offset))) {\n break;\n }\n }\n\n return offset;\n}\n\nexport function findDecimalNumberEnd(source, offset) {\n for (; offset < source.length; offset++) {\n if (!isDigit(source.charCodeAt(offset))) {\n break;\n }\n }\n\n return offset;\n}\n\n// § 4.3.7. Consume an escaped code point\nexport function consumeEscaped(source, offset) {\n // It assumes that the U+005C REVERSE SOLIDUS (\\) has already been consumed and\n // that the next input code point has already been verified to be part of a valid escape.\n offset += 2;\n\n // hex digit\n if (isHexDigit(getCharCode(source, offset - 1))) {\n // Consume as many hex digits as possible, but no more than 5.\n // Note that this means 1-6 hex digits have been consumed in total.\n for (const maxOffset = Math.min(source.length, offset + 5); offset < maxOffset; offset++) {\n if (!isHexDigit(getCharCode(source, offset))) {\n break;\n }\n }\n\n // If the next input code point is whitespace, consume it as well.\n const code = getCharCode(source, offset);\n if (isWhiteSpace(code)) {\n offset += getNewlineLength(source, offset, code);\n }\n }\n\n return offset;\n}\n\n// §4.3.11. Consume a name\n// Note: This algorithm does not do the verification of the first few code points that are necessary\n// to ensure the returned code points would constitute an <ident-token>. If that is the intended use,\n// ensure that the stream starts with an identifier before calling this algorithm.\nexport function consumeName(source, offset) {\n // Let result initially be an empty string.\n // Repeatedly consume the next input code point from the stream:\n for (; offset < source.length; offset++) {\n const code = source.charCodeAt(offset);\n\n // name code point\n if (isName(code)) {\n // Append the code point to result.\n continue;\n }\n\n // the stream starts with a valid escape\n if (isValidEscape(code, getCharCode(source, offset + 1))) {\n // Consume an escaped code point. Append the returned code point to result.\n offset = consumeEscaped(source, offset) - 1;\n continue;\n }\n\n // anything else\n // Reconsume the current input code point. Return result.\n break;\n }\n\n return offset;\n}\n\n// §4.3.12. Consume a number\nexport function consumeNumber(source, offset) {\n let code = source.charCodeAt(offset);\n\n // 2. If the next input code point is U+002B PLUS SIGN (+) or U+002D HYPHEN-MINUS (-),\n // consume it and append it to repr.\n if (code === 0x002B || code === 0x002D) {\n code = source.charCodeAt(offset += 1);\n }\n\n // 3. While the next input code point is a digit, consume it and append it to repr.\n if (isDigit(code)) {\n offset = findDecimalNumberEnd(source, offset + 1);\n code = source.charCodeAt(offset);\n }\n\n // 4. If the next 2 input code points are U+002E FULL STOP (.) followed by a digit, then:\n if (code === 0x002E && isDigit(source.charCodeAt(offset + 1))) {\n // 4.1 Consume them.\n // 4.2 Append them to repr.\n offset += 2;\n\n // 4.3 Set type to \"number\".\n // TODO\n\n // 4.4 While the next input code point is a digit, consume it and append it to repr.\n\n offset = findDecimalNumberEnd(source, offset);\n }\n\n // 5. If the next 2 or 3 input code points are U+0045 LATIN CAPITAL LETTER E (E)\n // or U+0065 LATIN SMALL LETTER E (e), ... , followed by a digit, then:\n if (cmpChar(source, offset, 101 /* e */)) {\n let sign = 0;\n code = source.charCodeAt(offset + 1);\n\n // ... optionally followed by U+002D HYPHEN-MINUS (-) or U+002B PLUS SIGN (+) ...\n if (code === 0x002D || code === 0x002B) {\n sign = 1;\n code = source.charCodeAt(offset + 2);\n }\n\n // ... followed by a digit\n if (isDigit(code)) {\n // 5.1 Consume them.\n // 5.2 Append them to repr.\n\n // 5.3 Set type to \"number\".\n // TODO\n\n // 5.4 While the next input code point is a digit, consume it and append it to repr.\n offset = findDecimalNumberEnd(source, offset + 1 + sign + 1);\n }\n }\n\n return offset;\n}\n\n// § 4.3.14. Consume the remnants of a bad url\n// ... its sole use is to consume enough of the input stream to reach a recovery point\n// where normal tokenizing can resume.\nexport function consumeBadUrlRemnants(source, offset) {\n // Repeatedly consume the next input code point from the stream:\n for (; offset < source.length; offset++) {\n const code = source.charCodeAt(offset);\n\n // U+0029 RIGHT PARENTHESIS ())\n // EOF\n if (code === 0x0029) {\n // Return.\n offset++;\n break;\n }\n\n if (isValidEscape(code, getCharCode(source, offset + 1))) {\n // Consume an escaped code point.\n // Note: This allows an escaped right parenthesis (\"\\)\") to be encountered\n // without ending the <bad-url-token>. This is otherwise identical to\n // the \"anything else\" clause.\n offset = consumeEscaped(source, offset);\n }\n }\n\n return offset;\n}\n\n// § 4.3.7. Consume an escaped code point\n// Note: This algorithm assumes that escaped is valid without leading U+005C REVERSE SOLIDUS (\\)\nexport function decodeEscaped(escaped) {\n // Single char escaped that's not a hex digit\n if (escaped.length === 1 && !isHexDigit(escaped.charCodeAt(0))) {\n return escaped[0];\n }\n\n // Interpret the hex digits as a hexadecimal number.\n let code = parseInt(escaped, 16);\n\n if (\n (code === 0) || // If this number is zero,\n (code >= 0xD800 && code <= 0xDFFF) || // or is for a surrogate,\n (code > 0x10FFFF) // or is greater than the maximum allowed code point\n ) {\n // ... return U+FFFD REPLACEMENT CHARACTER\n code = 0xFFFD;\n }\n\n // Otherwise, return the code point with that value.\n return String.fromCodePoint(code);\n}\n","export default [\n 'EOF-token',\n 'ident-token',\n 'function-token',\n 'at-keyword-token',\n 'hash-token',\n 'string-token',\n 'bad-string-token',\n 'url-token',\n 'bad-url-token',\n 'delim-token',\n 'number-token',\n 'percentage-token',\n 'dimension-token',\n 'whitespace-token',\n 'CDO-token',\n 'CDC-token',\n 'colon-token',\n 'semicolon-token',\n 'comma-token',\n '[-token',\n ']-token',\n '(-token',\n ')-token',\n '{-token',\n '}-token',\n 'comment-token'\n];\n","const MIN_SIZE = 16 * 1024;\n\nexport function adoptBuffer(buffer = null, size) {\n if (buffer === null || buffer.length < size) {\n return new Uint32Array(Math.max(size + 1024, MIN_SIZE));\n }\n\n return buffer;\n};\n","import { adoptBuffer } from './adopt-buffer.js';\nimport { isBOM } from './char-code-definitions.js';\n\nconst N = 10;\nconst F = 12;\nconst R = 13;\n\nfunction computeLinesAndColumns(host) {\n const source = host.source;\n const sourceLength = source.length;\n const startOffset = source.length > 0 ? isBOM(source.charCodeAt(0)) : 0;\n const lines = adoptBuffer(host.lines, sourceLength);\n const columns = adoptBuffer(host.columns, sourceLength);\n let line = host.startLine;\n let column = host.startColumn;\n\n for (let i = startOffset; i < sourceLength; i++) {\n const code = source.charCodeAt(i);\n\n lines[i] = line;\n columns[i] = column++;\n\n if (code === N || code === R || code === F) {\n if (code === R && i + 1 < sourceLength && source.charCodeAt(i + 1) === N) {\n i++;\n lines[i] = line;\n columns[i] = column;\n }\n\n line++;\n column = 1;\n }\n }\n\n lines[sourceLength] = line;\n columns[sourceLength] = column;\n\n host.lines = lines;\n host.columns = columns;\n host.computed = true;\n}\n\nexport class OffsetToLocation {\n constructor(source, startOffset, startLine, startColumn) {\n this.setSource(source, startOffset, startLine, startColumn);\n this.lines = null;\n this.columns = null;\n }\n setSource(source = '', startOffset = 0, startLine = 1, startColumn = 1) {\n this.source = source;\n this.startOffset = startOffset;\n this.startLine = startLine;\n this.startColumn = startColumn;\n this.computed = false;\n }\n getLocation(offset, filename) {\n if (!this.computed) {\n computeLinesAndColumns(this);\n }\n\n return {\n source: filename,\n offset: this.startOffset + offset,\n line: this.lines[offset],\n column: this.columns[offset]\n };\n }\n getLocationRange(start, end, filename) {\n if (!this.computed) {\n computeLinesAndColumns(this);\n }\n\n return {\n source: filename,\n start: {\n offset: this.startOffset + start,\n line: this.lines[start],\n column: this.columns[start]\n },\n end: {\n offset: this.startOffset + end,\n line: this.lines[end],\n column: this.columns[end]\n }\n };\n }\n};\n","import { adoptBuffer } from './adopt-buffer.js';\nimport { cmpStr } from './utils.js';\nimport tokenNames from './names.js';\nimport {\n WhiteSpace,\n Comment,\n Delim,\n EOF,\n Function as FunctionToken,\n LeftParenthesis,\n RightParenthesis,\n LeftSquareBracket,\n RightSquareBracket,\n LeftCurlyBracket,\n RightCurlyBracket\n} from './types.js';\n\nconst OFFSET_MASK = 0x00FFFFFF;\nconst TYPE_SHIFT = 24;\nconst BLOCK_OPEN_TOKEN = 1;\nconst BLOCK_CLOSE_TOKEN = 2;\nconst balancePair = new Uint8Array(32); // 32b of memory ought to be enough for anyone (any number of tokens)\nbalancePair[FunctionToken] = RightParenthesis;\nbalancePair[LeftParenthesis] = RightParenthesis;\nbalancePair[LeftSquareBracket] = RightSquareBracket;\nbalancePair[LeftCurlyBracket] = RightCurlyBracket;\n\nconst blockTokens = new Uint8Array(32);\nblockTokens[FunctionToken] = BLOCK_OPEN_TOKEN;\nblockTokens[LeftParenthesis] = BLOCK_OPEN_TOKEN;\nblockTokens[LeftSquareBracket] = BLOCK_OPEN_TOKEN;\nblockTokens[LeftCurlyBracket] = BLOCK_OPEN_TOKEN;\nblockTokens[RightParenthesis] = BLOCK_CLOSE_TOKEN;\nblockTokens[RightSquareBracket] = BLOCK_CLOSE_TOKEN;\nblockTokens[RightCurlyBracket] = BLOCK_CLOSE_TOKEN;\n\nfunction boundIndex(index, min, max) {\n return index < min ? min : index > max ? max : index;\n}\n\nexport class TokenStream {\n constructor(source, tokenize) {\n this.setSource(source, tokenize);\n }\n reset() {\n this.eof = false;\n this.tokenIndex = -1;\n this.tokenType = 0;\n this.tokenStart = this.firstCharOffset;\n this.tokenEnd = this.firstCharOffset;\n }\n setSource(source = '', tokenize = () => {}) {\n source = String(source || '');\n\n const sourceLength = source.length;\n const offsetAndType = adoptBuffer(this.offsetAndType, source.length + 1); // +1 because of eof-token\n const balance = adoptBuffer(this.balance, source.length + 1);\n let tokenCount = 0;\n let firstCharOffset = -1;\n let balanceCloseType = 0;\n let balanceStart = source.length;\n\n // capture buffers\n this.offsetAndType = null;\n this.balance = null;\n balance.fill(0);\n\n tokenize(source, (type, start, end) => {\n const index = tokenCount++;\n\n // type & offset\n offsetAndType[index] = (type << TYPE_SHIFT) | end;\n\n if (firstCharOffset === -1) {\n firstCharOffset = start;\n }\n\n // balance\n balance[index] = balanceStart;\n\n if (type === balanceCloseType) {\n const prevBalanceStart = balance[balanceStart];\n\n // set reference to balance end for a block opener\n balance[balanceStart] = index;\n\n // pop state\n balanceStart = prevBalanceStart;\n balanceCloseType = balancePair[offsetAndType[prevBalanceStart] >> TYPE_SHIFT];\n } else if (this.isBlockOpenerTokenType(type)) { // check for FunctionToken, <(-token>, <[-token> and <{-token>\n // push state\n balanceStart = index;\n balanceCloseType = balancePair[type];\n }\n });\n\n // finalize buffers\n offsetAndType[tokenCount] = (EOF << TYPE_SHIFT) | sourceLength; // <EOF-token>\n balance[tokenCount] = tokenCount; // prevents false positive balance match with any token\n\n // reverse references from balance start to end\n // tokens\n // token: a ( [ b c ] d e ) {\n // index: 0 1 2 3 4 5 6 7 8 9\n // before\n // balance: 0 8 5 2 2 2 1 1 1 0\n // - > > < < < < < < -\n // after\n // balance: 9 8 5 5 5 2 8 8 1 9\n // > > > > > < > > < >\n for (let i = 0; i < tokenCount; i++) {\n const balanceStart = balance[i];\n\n if (balanceStart <= i) {\n const balanceEnd = balance[balanceStart];\n\n if (balanceEnd !== i) {\n balance[i] = balanceEnd;\n }\n } else if (balanceStart > tokenCount) {\n balance[i] = tokenCount;\n }\n }\n\n // balance[0] = tokenCount;\n\n this.source = source;\n this.firstCharOffset = firstCharOffset === -1 ? 0 : firstCharOffset;\n this.tokenCount = tokenCount;\n this.offsetAndType = offsetAndType;\n this.balance = balance;\n\n this.reset();\n this.next();\n }\n\n lookupType(offset) {\n offset += this.tokenIndex;\n\n if (offset < this.tokenCount) {\n return this.offsetAndType[offset] >> TYPE_SHIFT;\n }\n\n return EOF;\n }\n lookupTypeNonSC(idx) {\n for (let offset = this.tokenIndex; offset < this.tokenCount; offset++) {\n const tokenType = this.offsetAndType[offset] >> TYPE_SHIFT;\n\n if (tokenType !== WhiteSpace && tokenType !== Comment) {\n if (idx-- === 0) {\n return tokenType;\n }\n }\n }\n\n return EOF;\n }\n lookupOffset(offset) {\n offset += this.tokenIndex;\n\n if (offset < this.tokenCount) {\n return this.offsetAndType[offset - 1] & OFFSET_MASK;\n }\n\n return this.source.length;\n }\n lookupOffsetNonSC(idx) {\n for (let offset = this.tokenIndex; offset < this.tokenCount; offset++) {\n const tokenType = this.offsetAndType[offset] >> TYPE_SHIFT;\n\n if (tokenType !== WhiteSpace && tokenType !== Comment) {\n if (idx-- === 0) {\n return offset - this.tokenIndex;\n }\n }\n }\n\n return EOF;\n }\n lookupValue(offset, referenceStr) {\n offset += this.tokenIndex;\n\n if (offset < this.tokenCount) {\n return cmpStr(\n this.source,\n this.offsetAndType[offset - 1] & OFFSET_MASK,\n this.offsetAndType[offset] & OFFSET_MASK,\n referenceStr\n );\n }\n\n return false;\n }\n getTokenStart(tokenIndex) {\n if (tokenIndex === this.tokenIndex) {\n return this.tokenStart;\n }\n\n if (tokenIndex > 0) {\n return tokenIndex < this.tokenCount\n ? this.offsetAndType[tokenIndex - 1] & OFFSET_MASK\n : this.offsetAndType[this.tokenCount] & OFFSET_MASK;\n }\n\n return this.firstCharOffset;\n }\n getTokenEnd(tokenIndex) {\n if (tokenIndex === this.tokenIndex) {\n return this.tokenEnd;\n }\n\n return this.offsetAndType[boundIndex(tokenIndex, 0, this.tokenCount)] & OFFSET_MASK;\n }\n getTokenType(tokenIndex) {\n if (tokenIndex === this.tokenIndex) {\n return this.tokenType;\n }\n\n return this.offsetAndType[boundIndex(tokenIndex, 0, this.tokenCount)] >> TYPE_SHIFT;\n }\n substrToCursor(start) {\n return this.source.substring(start, this.tokenStart);\n }\n\n isBlockOpenerTokenType(tokenType) {\n return blockTokens[tokenType] === BLOCK_OPEN_TOKEN;\n }\n isBlockCloserTokenType(tokenType) {\n return blockTokens[tokenType] === BLOCK_CLOSE_TOKEN;\n }\n getBlockTokenPairIndex(tokenIndex) {\n const type = this.getTokenType(tokenIndex);\n\n if (blockTokens[type] === 1) {\n // block open token\n const pairIndex = this.balance[tokenIndex];\n const closeType = this.getTokenType(pairIndex);\n\n return balancePair[type] === closeType ? pairIndex : -1;\n } else if (blockTokens[type] === 2) {\n // block close token\n const pairIndex = this.balance[tokenIndex];\n const openType = this.getTokenType(pairIndex);\n\n return balancePair[openType] === type ? pairIndex : -1;\n }\n\n return -1;\n }\n isBalanceEdge(tokenIndex) {\n return this.balance[this.tokenIndex] < tokenIndex;\n }\n\n isDelim(code, offset) {\n if (offset) {\n return (\n this.lookupType(offset) === Delim &&\n this.source.charCodeAt(this.lookupOffset(offset)) === code\n );\n }\n\n return (\n this.tokenType === Delim &&\n this.source.charCodeAt(this.tokenStart) === code\n );\n }\n\n skip(tokenCount) {\n let next = this.tokenIndex + tokenCount;\n\n if (next < this.tokenCount) {\n this.tokenIndex = next;\n this.tokenStart = this.offsetAndType[next - 1] & OFFSET_MASK;\n next = this.offsetAndType[next];\n this.tokenType = next >> TYPE_SHIFT;\n this.tokenEnd = next & OFFSET_MASK;\n } else {\n this.tokenIndex = this.tokenCount;\n this.next();\n }\n }\n next() {\n let next = this.tokenIndex + 1;\n\n if (next < this.tokenCount) {\n this.tokenIndex = next;\n this.tokenStart = this.tokenEnd;\n next = this.offsetAndType[next];\n this.tokenType = next >> TYPE_SHIFT;\n this.tokenEnd = next & OFFSET_MASK;\n } else {\n this.eof = true;\n this.tokenIndex = this.tokenCount;\n this.tokenType = EOF;\n this.tokenStart = this.tokenEnd = this.source.length;\n }\n }\n skipSC() {\n while (this.tokenType === WhiteSpace || this.tokenType === Comment) {\n this.next();\n }\n }\n skipUntilBalanced(startToken, stopConsume) {\n let cursor = startToken;\n let balanceEnd = 0;\n let offset = 0;\n\n loop:\n for (; cursor < this.tokenCount; cursor++) {\n balanceEnd = this.balance[cursor];\n\n // stop scanning on balance edge that points to offset before start token\n if (balanceEnd < startToken) {\n break loop;\n }\n\n offset = cursor > 0 ? this.offsetAndType[cursor - 1] & OFFSET_MASK : this.firstCharOffset;\n\n // check stop condition\n switch (stopConsume(this.source.charCodeAt(offset))) {\n case 1: // just stop\n break loop;\n\n case 2: // stop & included\n cursor++;\n break loop;\n\n default:\n // fast forward to the end of balanced block for an open block tokens\n if (this.isBlockOpenerTokenType(this.offsetAndType[cursor] >> TYPE_SHIFT)) {\n cursor = balanceEnd;\n }\n }\n }\n\n this.skip(cursor - this.tokenIndex);\n }\n\n forEachToken(fn) {\n for (let i = 0, offset = this.firstCharOffset; i < this.tokenCount; i++) {\n const start = offset;\n const item = this.offsetAndType[i];\n const end = item & OFFSET_MASK;\n const type = item >> TYPE_SHIFT;\n\n offset = end;\n\n fn(type, start, end, i);\n }\n }\n dump() {\n const tokens = new Array(this.tokenCount);\n\n this.forEachToken((type, start, end, index) => {\n tokens[index] = {\n idx: index,\n type: tokenNames[type],\n chunk: this.source.substring(start, end),\n balance: this.balance[index]\n };\n });\n\n return tokens;\n }\n};\n","import * as TYPE from './types.js';\nimport {\n isNewline,\n isName,\n isValidEscape,\n isNumberStart,\n isIdentifierStart,\n isBOM,\n charCodeCategory,\n WhiteSpaceCategory,\n DigitCategory,\n NameStartCategory,\n NonPrintableCategory\n} from './char-code-definitions.js';\nimport {\n cmpStr,\n getNewlineLength,\n findWhiteSpaceEnd,\n consumeEscaped,\n consumeName,\n consumeNumber,\n consumeBadUrlRemnants\n} from './utils.js';\n\nexport function tokenize(source, onToken) {\n function getCharCode(offset) {\n return offset < sourceLength ? source.charCodeAt(offset) : 0;\n }\n\n // § 4.3.3. Consume a numeric token\n function consumeNumericToken() {\n // Consume a number and let number be the result.\n offset = consumeNumber(source, offset);\n\n // If the next 3 input code points would start an identifier, then:\n if (isIdentifierStart(getCharCode(offset), getCharCode(offset + 1), getCharCode(offset + 2))) {\n // Create a <dimension-token> with the same value and type flag as number, and a unit set initially to the empty string.\n // Consume a name. Set the <dimension-token>’s unit to the returned value.\n // Return the <dimension-token>.\n type = TYPE.Dimension;\n offset = consumeName(source, offset);\n return;\n }\n\n // Otherwise, if the next input code point is U+0025 PERCENTAGE SIGN (%), consume it.\n if (getCharCode(offset) === 0x0025) {\n // Create a <percentage-token> with the same value as number, and return it.\n type = TYPE.Percentage;\n offset++;\n return;\n }\n\n // Otherwise, create a <number-token> with the same value and type flag as number, and return it.\n type = TYPE.Number;\n }\n\n // § 4.3.4. Consume an ident-like token\n function consumeIdentLikeToken() {\n const nameStartOffset = offset;\n\n // Consume a name, and let string be the result.\n offset = consumeName(source, offset);\n\n // If string’s value is an ASCII case-insensitive match for \"url\",\n // and the next input code point is U+0028 LEFT PARENTHESIS ((), consume it.\n if (cmpStr(source, nameStartOffset, offset, 'url') && getCharCode(offset) === 0x0028) {\n // While the next two input code points are whitespace, consume the next input code point.\n offset = findWhiteSpaceEnd(source, offset + 1);\n\n // If the next one or two input code points are U+0022 QUOTATION MARK (\"), U+0027 APOSTROPHE ('),\n // or whitespace followed by U+0022 QUOTATION MARK (\") or U+0027 APOSTROPHE ('),\n // then create a <function-token> with its value set to string and return it.\n if (getCharCode(offset) === 0x0022 ||\n getCharCode(offset) === 0x0027) {\n type = TYPE.Function;\n offset = nameStartOffset + 4;\n return;\n }\n\n // Otherwise, consume a url token, and return it.\n consumeUrlToken();\n return;\n }\n\n // Otherwise, if the next input code point is U+0028 LEFT PARENTHESIS ((), consume it.\n // Create a <function-token> with its value set to string and return it.\n if (getCharCode(offset) === 0x0028) {\n type = TYPE.Function;\n offset++;\n return;\n }\n\n // Otherwise, create an <ident-token> with its value set to string and return it.\n type = TYPE.Ident;\n }\n\n // § 4.3.5. Consume a string token\n function consumeStringToken(endingCodePoint) {\n // This algorithm may be called with an ending code point, which denotes the code point\n // that ends the string. If an ending code point is not specified,\n // the current input code point is used.\n if (!endingCodePoint) {\n endingCodePoint = getCharCode(offset++);\n }\n\n // Initially create a <string-token> with its value set to the empty string.\n type = TYPE.String;\n\n // Repeatedly consume the next input code point from the stream:\n for (; offset < source.length; offset++) {\n const code = source.charCodeAt(offset);\n\n switch (charCodeCategory(code)) {\n // ending code point\n case endingCodePoint:\n // Return the <string-token>.\n offset++;\n return;\n\n // EOF\n // case EofCategory:\n // This is a parse error. Return the <string-token>.\n // return;\n\n // newline\n case WhiteSpaceCategory:\n if (isNewline(code)) {\n // This is a parse error. Reconsume the current input code point,\n // create a <bad-string-token>, and return it.\n offset += getNewlineLength(source, offset, code);\n type = TYPE.BadString;\n return;\n }\n break;\n\n // U+005C REVERSE SOLIDUS (\\)\n case 0x005C:\n // If the next input code point is EOF, do nothing.\n if (offset === source.length - 1) {\n break;\n }\n\n const nextCode = getCharCode(offset + 1);\n\n // Otherwise, if the next input code point is a newline, consume it.\n if (isNewline(nextCode)) {\n offset += getNewlineLength(source, offset + 1, nextCode);\n } else if (isValidEscape(code, nextCode)) {\n // Otherwise, (the stream starts with a valid escape) consume\n // an escaped code point and append the returned code point to\n // the <string-token>’s value.\n offset = consumeEscaped(source, offset) - 1;\n }\n break;\n\n // anything else\n // Append the current input code point to the <string-token>’s value.\n }\n }\n }\n\n // § 4.3.6. Consume a url token\n // Note: This algorithm assumes that the initial \"url(\" has already been consumed.\n // This algorithm also assumes that it’s being called to consume an \"unquoted\" value, like url(foo).\n // A quoted value, like url(\"foo\"), is parsed as a <function-token>. Consume an ident-like token\n // automatically handles this distinction; this algorithm shouldn’t be called directly otherwise.\n function consumeUrlToken() {\n // Initially create a <url-token> with its value set to the empty string.\n type = TYPE.Url;\n\n // Consume as much whitespace as possible.\n offset = findWhiteSpaceEnd(source, offset);\n\n // Repeatedly consume the next input code point from the stream:\n for (; offset < source.length; offset++) {\n const code = source.charCodeAt(offset);\n\n switch (charCodeCategory(code)) {\n // U+0029 RIGHT PARENTHESIS ())\n case 0x0029:\n // Return the <url-token>.\n offset++;\n return;\n\n // EOF\n // case EofCategory:\n // This is a parse error. Return the <url-token>.\n // return;\n\n // whitespace\n case WhiteSpaceCategory:\n // Consume as much whitespace as possible.\n offset = findWhiteSpaceEnd(source, offset);\n\n // If the next input code point is U+0029 RIGHT PARENTHESIS ()) or EOF,\n // consume it and return the <url-token>\n // (if EOF was encountered, this is a parse error);\n if (getCharCode(offset) === 0x0029 || offset >= source.length) {\n if (offset < source.length) {\n offset++;\n }\n return;\n }\n\n // otherwise, consume the remnants of a bad url, create a <bad-url-token>,\n // and return it.\n offset = consumeBadUrlRemnants(source, offset);\n type = TYPE.BadUrl;\n return;\n\n // U+0022 QUOTATION MARK (\")\n // U+0027 APOSTROPHE (')\n // U+0028 LEFT PARENTHESIS (()\n // non-printable code point\n case 0x0022:\n case 0x0027:\n case 0x0028:\n case NonPrintableCategory:\n // This is a parse error. Consume the remnants of a bad url,\n // create a <bad-url-token>, and return it.\n offset = consumeBadUrlRemnants(source, offset);\n type = TYPE.BadUrl;\n return;\n\n // U+005C REVERSE SOLIDUS (\\)\n case 0x005C:\n // If the stream starts with a valid escape, consume an escaped code point and\n // append the returned code point to the <url-token>’s value.\n if (isValidEscape(code, getCharCode(offset + 1))) {\n offset = consumeEscaped(source, offset) - 1;\n break;\n }\n\n // Otherwise, this is a parse error. Consume the remnants of a bad url,\n // create a <bad-url-token>, and return it.\n offset = consumeBadUrlRemnants(source, offset);\n type = TYPE.BadUrl;\n return;\n\n // anything else\n // Append the current input code point to the <url-token>’s value.\n }\n }\n }\n\n // ensure source is a string\n source = String(source || '');\n\n const sourceLength = source.length;\n let start = isBOM(getCharCode(0));\n let offset = start;\n let type;\n\n // https://drafts.csswg.org/css-syntax-3/#consume-token\n // § 4.3.1. Consume a token\n while (offset < sourceLength) {\n const code = source.charCodeAt(offset);\n\n switch (charCodeCategory(code)) {\n // whitespace\n case WhiteSpaceCategory:\n // Consume as much whitespace as possible. Return a <whitespace-token>.\n type = TYPE.WhiteSpace;\n offset = findWhiteSpaceEnd(source, offset + 1);\n break;\n\n // U+0022 QUOTATION MARK (\")\n case 0x0022:\n // Consume a string token and return it.\n consumeStringToken();\n break;\n\n // U+0023 NUMBER SIGN (#)\n case 0x0023:\n // If the next input code point is a name code point or the next two input code points are a valid escape, then:\n if (isName(getCharCode(offset + 1)) || isValidEscape(getCharCode(offset + 1), getCharCode(offset + 2))) {\n // Create a <hash-token>.\n type = TYPE.Hash;\n\n // If the next 3 input code points would start an identifier, set the <hash-token>’s type flag to \"id\".\n // if (isIdentifierStart(getCharCode(offset + 1), getCharCode(offset + 2), getCharCode(offset + 3))) {\n // // TODO: set id flag\n // }\n\n // Consume a name, and set the <hash-token>’s value to the returned string.\n offset = consumeName(source, offset + 1);\n\n // Return the <hash-token>.\n } else {\n // Otherwise, return a <delim-token> with its value set to the current input code point.\n type = TYPE.Delim;\n offset++;\n }\n\n break;\n\n // U+0027 APOSTROPHE (')\n case 0x0027:\n // Consume a string token and return it.\n consumeStringToken();\n break;\n\n // U+0028 LEFT PARENTHESIS (()\n case 0x0028:\n // Return a <(-token>.\n type = TYPE.LeftParenthesis;\n offset++;\n break;\n\n // U+0029 RIGHT PARENTHESIS ())\n case 0x0029:\n // Return a <)-token>.\n type = TYPE.RightParenthesis;\n offset++;\n break;\n\n // U+002B PLUS SIGN (+)\n case 0x002B:\n // If the input stream starts with a number, ...\n if (isNumberStart(code, getCharCode(offset + 1), getCharCode(offset + 2))) {\n // ... reconsume the current input code point, consume a numeric token, and return it.\n consumeNumericToken();\n } else {\n // Otherwise, return a <delim-token> with its value set to the current input code point.\n type = TYPE.Delim;\n offset++;\n }\n break;\n\n // U+002C COMMA (,)\n case 0x002C:\n // Return a <comma-token>.\n type = TYPE.Comma;\n offset++;\n break;\n\n // U+002D HYPHEN-MINUS (-)\n case 0x002D:\n // If the input stream starts with a number, reconsume the current input code point, consume a numeric token, and return it.\n if (isNumberStart(code, getCharCode(offset + 1), getCharCode(offset + 2))) {\n consumeNumericToken();\n } else {\n // Otherwise, if the next 2 input code points are U+002D HYPHEN-MINUS U+003E GREATER-THAN SIGN (->), consume them and return a <CDC-token>.\n if (getCharCode(offset + 1) === 0x002D &&\n getCharCode(offset + 2) === 0x003E) {\n type = TYPE.CDC;\n offset = offset + 3;\n } else {\n // Otherwise, if the input stream starts with an identifier, ...\n if (isIdentifierStart(code, getCharCode(offset + 1), getCharCode(offset + 2))) {\n // ... reconsume the current input code point, consume an ident-like token, and return it.\n consumeIdentLikeToken();\n } else {\n // Otherwise, return a <delim-token> with its value set to the current input code point.\n type = TYPE.Delim;\n offset++;\n }\n }\n }\n break;\n\n // U+002E FULL STOP (.)\n case 0x002E:\n // If the input stream starts with a number, ...\n if (isNumberStart(code, getCharCode(offset + 1), getCharCode(offset + 2))) {\n // ... reconsume the current input code point, consume a numeric token, and return it.\n consumeNumericToken();\n } else {\n // Otherwise, return a <delim-token> with its value set to the current input code point.\n type = TYPE.Delim;\n offset++;\n }\n\n break;\n\n // U+002F SOLIDUS (/)\n case 0x002F:\n // If the next two input code point are U+002F SOLIDUS (/) followed by a U+002A ASTERISK (*),\n if (getCharCode(offset + 1) === 0x002A) {\n // ... consume them and all following code points up to and including the first U+002A ASTERISK (*)\n // followed by a U+002F SOLIDUS (/), or up to an EOF code point.\n type = TYPE.Comment;\n offset = source.indexOf('*/', offset + 2);\n offset = offset === -1 ? source.length : offset + 2;\n } else {\n type = TYPE.Delim;\n offset++;\n }\n break;\n\n // U+003A COLON (:)\n case 0x003A:\n // Return a <colon-token>.\n type = TYPE.Colon;\n offset++;\n break;\n\n // U+003B SEMICOLON (;)\n case 0x003B:\n // Return a <semicolon-token>.\n type = TYPE.Semicolon;\n offset++;\n break;\n\n // U+003C LESS-THAN SIGN (<)\n case 0x003C:\n // If the next 3 input code points are U+0021 EXCLAMATION MARK U+002D HYPHEN-MINUS U+002D HYPHEN-MINUS (!--), ...\n if (getCharCode(offset + 1) === 0x0021 &&\n getCharCode(offset + 2) === 0x002D &&\n getCharCode(offset + 3) === 0x002D) {\n // ... consume them and return a <CDO-token>.\n type = TYPE.CDO;\n offset = offset + 4;\n } else {\n // Otherwise, return a <delim-token> with its value set to the current input code point.\n type = TYPE.Delim;\n offset++;\n }\n\n break;\n\n // U+0040 COMMERCIAL AT (@)\n case 0x0040:\n // If the next 3 input code points would start an identifier, ...\n if (isIdentifierStart(getCharCode(offset + 1), getCharCode(offset + 2), getCharCode(offset + 3))) {\n // ... consume a name, create an <at-keyword-token> with its value set to the returned value, and return it.\n type = TYPE.AtKeyword;\n offset = consumeName(source, offset + 1);\n } else {\n // Otherwise, return a <delim-token> with its value set to the current input code point.\n type = TYPE.Delim;\n offset++;\n }\n\n break;\n\n // U+005B LEFT SQUARE BRACKET ([)\n case 0x005B:\n // Return a <[-token>.\n type = TYPE.LeftSquareBracket;\n offset++;\n break;\n\n // U+005C REVERSE SOLIDUS (\\)\n case 0x005C:\n // If the input stream starts with a valid escape, ...\n if (isValidEscape(code, getCharCode(offset + 1))) {\n // ... reconsume the current input code point, consume an ident-like token, and return it.\n consumeIdentLikeToken();\n } else {\n // Otherwise, this is a parse error. Return a <delim-token> with its value set to the current input code point.\n type = TYPE.Delim;\n offset++;\n }\n break;\n\n // U+005D RIGHT SQUARE BRACKET (])\n case 0x005D:\n // Return a <]-token>.\n type = TYPE.RightSquareBracket;\n offset++;\n break;\n\n // U+007B LEFT CURLY BRACKET ({)\n case 0x007B:\n // Return a <{-token>.\n type = TYPE.LeftCurlyBracket;\n offset++;\n break;\n\n // U+007D RIGHT CURLY BRACKET (})\n case 0x007D:\n // Return a <}-token>.\n type = TYPE.RightCurlyBracket;\n offset++;\n break;\n\n // digit\n case DigitCategory:\n // Reconsume the current input code point, consume a numeric token, and return it.\n consumeNumericToken();\n break;\n\n // name-start code point\n case NameStartCategory:\n // Reconsume the current input code point, consume an ident-like token, and return it.\n consumeIdentLikeToken();\n break;\n\n // EOF\n // case EofCategory:\n // Return an <EOF-token>.\n // break;\n\n // anything else\n default:\n // Return a <delim-token> with its value set to the current input code point.\n type = TYPE.Delim;\n offset++;\n }\n\n // put token to stream\n onToken(type, start, start = offset);\n }\n}\n\nexport * from './types.js';\nexport * as tokenTypes from './types.js';\nexport { default as tokenNames } from './names.js';\nexport * from './char-code-definitions.js';\nexport * from './utils.js';\nexport * from './OffsetToLocation.js';\nexport * from './TokenStream.js';\n","//\n// list\n// ┌──────┐\n// ┌──────────────┼─head │\n// │ │ tail─┼──────────────┐\n// │ └──────┘ │\n// ▼ ▼\n// item item item item\n// ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐\n// null ◀──┼─prev │◀───┼─prev │◀───┼─prev │◀───┼─prev │\n// │ next─┼───▶│ next─┼───▶│ next─┼───▶│ next─┼──▶ null\n// ├──────┤ ├──────┤ ├──────┤ ├──────┤\n// │ data │ │ data │ │ data │ │ data │\n// └──────┘ └──────┘ └──────┘ └──────┘\n//\n\nlet releasedCursors = null;\n\nexport class List {\n static createItem(data) {\n return {\n prev: null,\n next: null,\n data\n };\n }\n\n constructor() {\n this.head = null;\n this.tail = null;\n this.cursor = null;\n }\n createItem(data) {\n return List.createItem(data);\n }\n\n // cursor helpers\n allocateCursor(prev, next) {\n let cursor;\n\n if (releasedCursors !== null) {\n cursor = releasedCursors;\n releasedCursors = releasedCursors.cursor;\n cursor.prev = prev;\n cursor.next = next;\n cursor.cursor = this.cursor;\n } else {\n cursor = {\n prev,\n next,\n cursor: this.cursor\n };\n }\n\n this.cursor = cursor;\n\n return cursor;\n }\n releaseCursor() {\n const { cursor } = this;\n\n this.cursor = cursor.cursor;\n cursor.prev = null;\n cursor.next = null;\n cursor.cursor = releasedCursors;\n releasedCursors = cursor;\n }\n updateCursors(prevOld, prevNew, nextOld, nextNew) {\n let { cursor } = this;\n\n while (cursor !== null) {\n if (cursor.prev === prevOld) {\n cursor.prev = prevNew;\n }\n\n if (cursor.next === nextOld) {\n cursor.next = nextNew;\n }\n\n cursor = cursor.cursor;\n }\n }\n *[Symbol.iterator]() {\n for (let cursor = this.head; cursor !== null; cursor = cursor.next) {\n yield cursor.data;\n }\n }\n\n // getters\n get size() {\n let size = 0;\n\n for (let cursor = this.head; cursor !== null; cursor = cursor.next) {\n size++;\n }\n\n return size;\n }\n get isEmpty() {\n return this.head === null;\n }\n get first() {\n return this.head && this.head.data;\n }\n get last() {\n return this.tail && this.tail.data;\n }\n\n // convertors\n fromArray(array) {\n let cursor = null;\n this.head = null;\n\n for (let data of array) {\n const item = List.createItem(data);\n\n if (cursor !== null) {\n cursor.next = item;\n } else {\n this.head = item;\n }\n\n item.prev = cursor;\n cursor = item;\n }\n\n this.tail = cursor;\n return this;\n }\n toArray() {\n return [...this];\n }\n toJSON() {\n return [...this];\n }\n\n // array-like methods\n forEach(fn, thisArg = this) {\n // push cursor\n const cursor = this.allocateCursor(null, this.head);\n\n while (cursor.next !== null) {\n const item = cursor.next;\n cursor.next = item.next;\n fn.call(thisArg, item.data, item, this);\n }\n\n // pop cursor\n this.releaseCursor();\n }\n forEachRight(fn, thisArg = this) {\n // push cursor\n const cursor = this.allocateCursor(this.tail, null);\n\n while (cursor.prev !== null) {\n const item = cursor.prev;\n cursor.prev = item.prev;\n fn.call(thisArg, item.data, item, this);\n }\n\n // pop cursor\n this.releaseCursor();\n }\n reduce(fn, initialValue, thisArg = this) {\n // push cursor\n let cursor = this.allocateCursor(null, this.head);\n let acc = initialValue;\n let item;\n\n while (cursor.next !== null) {\n item = cursor.next;\n cursor.next = item.next;\n\n acc = fn.call(thisArg, acc, item.data, item, this);\n }\n\n // pop cursor\n this.releaseCursor();\n\n return acc;\n }\n reduceRight(fn, initialValue, thisArg = this) {\n // push cursor\n let cursor = this.allocateCursor(this.tail, null);\n let acc = initialValue;\n let item;\n\n while (cursor.prev !== null) {\n item = cursor.prev;\n cursor.prev = item.prev;\n\n acc = fn.call(thisArg, acc, item.data, item, this);\n }\n\n // pop cursor\n this.releaseCursor();\n\n return acc;\n }\n some(fn, thisArg = this) {\n for (let cursor = this.head; cursor !== null; cursor = cursor.next) {\n if (fn.call(thisArg, cursor.data, cursor, this)) {\n return true;\n }\n }\n\n return false;\n }\n map(fn, thisArg = this) {\n const result = new List();\n\n for (let cursor = this.head; cursor !== null; cursor = cursor.next) {\n result.appendData(fn.call(thisArg, cursor.data, cursor, this));\n }\n\n return result;\n }\n filter(fn, thisArg = this) {\n const result = new List();\n\n for (let cursor = this.head; cursor !== null; cursor = cursor.next) {\n if (fn.call(thisArg, cursor.data, cursor, this)) {\n result.appendData(cursor.data);\n }\n }\n\n return result;\n }\n\n nextUntil(start, fn, thisArg = this) {\n if (start === null) {\n return;\n }\n\n // push cursor\n const cursor = this.allocateCursor(null, start);\n\n while (cursor.next !== null) {\n const item = cursor.next;\n cursor.next = item.next;\n if (fn.call(thisArg, item.data, item, this)) {\n break;\n }\n }\n\n // pop cursor\n this.releaseCursor();\n }\n prevUntil(start, fn, thisArg = this) {\n if (start === null) {\n return;\n }\n\n // push cursor\n const cursor = this.allocateCursor(start, null);\n\n while (cursor.prev !== null) {\n const item = cursor.prev;\n cursor.prev = item.prev;\n if (fn.call(thisArg, item.data, item, this)) {\n break;\n }\n }\n\n // pop cursor\n this.releaseCursor();\n }\n\n // mutation\n clear() {\n this.head = null;\n this.tail = null;\n }\n copy() {\n const result = new List();\n\n for (let data of this) {\n result.appendData(data);\n }\n\n return result;\n }\n prepend(item) {\n // head\n // ^\n // item\n this.updateCursors(null, item, this.head, item);\n\n // insert to the beginning of the list\n if (this.head !== null) {\n // new item <- first item\n this.head.prev = item;\n // new item -> first item\n item.next = this.head;\n } else {\n // if list has no head, then it also has no tail\n // in this case tail points to the new item\n this.tail = item;\n }\n\n // head always points to new item\n this.head = item;\n return this;\n }\n prependData(data) {\n return this.prepend(List.createItem(data));\n }\n append(item) {\n return this.insert(item);\n }\n appendData(data) {\n return this.insert(List.createItem(data));\n }\n insert(item, before = null) {\n if (before !== null) {\n // prev before\n // ^\n // item\n this.updateCursors(before.prev, item, before, item);\n\n if (before.prev === null) {\n // insert to the beginning of list\n if (this.head !== before) {\n throw new Error('before doesn\\'t belong to list');\n }\n // since head points to before therefore list doesn't empty\n // no need to check tail\n this.head = item;\n before.prev = item;\n item.next = before;\n this.updateCursors(null, item);\n } else {\n // insert between two items\n before.prev.next = item;\n item.prev = before.prev;\n before.prev = item;\n item.next = before;\n }\n } else {\n // tail\n // ^\n // item\n this.updateCursors(this.tail, item, null, item);\n\n // insert to the ending of the list\n if (this.tail !== null) {\n // last item -> new item\n this.tail.next = item;\n // last item <- new item\n item.prev = this.tail;\n } else {\n // if list has no tail, then it also has no head\n // in this case head points to new item\n this.head = item;\n }\n\n // tail always points to new item\n this.tail = item;\n }\n\n return this;\n }\n insertData(data, before) {\n return this.insert(List.createItem(data), before);\n }\n remove(item) {\n // item\n // ^\n // prev next\n this.updateCursors(item, item.prev, item, item.next);\n\n if (item.prev !== null) {\n item.prev.next = item.next;\n } else {\n if (this.head !== item) {\n throw new Error('item doesn\\'t belong to list');\n }\n\n this.head = item.next;\n }\n\n if (item.next !== null) {\n item.next.prev = item.prev;\n } else {\n if (this.tail !== item) {\n throw new Error('item doesn\\'t belong to list');\n }\n\n this.tail = item.prev;\n }\n\n item.prev = null;\n item.next = null;\n\n return item;\n }\n push(data) {\n this.insert(List.createItem(data));\n }\n pop() {\n return this.tail !== null ? this.remove(this.tail) : null;\n }\n unshift(data) {\n this.prepend(List.createItem(data));\n }\n shift() {\n return this.head !== null ? this.remove(this.head) : null;\n }\n prependList(list) {\n return this.insertList(list, this.head);\n }\n appendList(list) {\n return this.insertList(list);\n }\n insertList(list, before) {\n // ignore empty lists\n if (list.head === null) {\n return this;\n }\n\n if (before !== undefined && before !== null) {\n this.updateCursors(before.prev, list.tail, before, list.head);\n\n // insert in the middle of dist list\n if (before.prev !== null) {\n // before.prev <-> list.head\n before.prev.next = list.head;\n list.head.prev = before.prev;\n } else {\n this.head = list.head;\n }\n\n before.prev = list.tail;\n list.tail.next = before;\n } else {\n this.updateCursors(this.tail, list.tail, null, list.head);\n\n // insert to end of the list\n if (this.tail !== null) {\n // if destination list has a tail, then it also has a head,\n // but head doesn't change\n // dest tail -> source head\n this.tail.next = list.head;\n // dest tail <- source head\n list.head.prev = this.tail;\n } else {\n // if list has no a tail, then it also has no a head\n // in this case points head to new item\n this.head = list.head;\n }\n\n // tail always start point to new item\n this.tail = list.tail;\n }\n\n list.head = null;\n list.tail = null;\n return this;\n }\n replace(oldItem, newItemOrList) {\n if ('head' in newItemOrList) {\n this.insertList(newItemOrList, oldItem);\n } else {\n this.insert(newItemOrList, oldItem);\n }\n\n this.remove(oldItem);\n }\n}\n","export function createCustomError(name, message) {\n // use Object.create(), because some VMs prevent setting line/column otherwise\n // (iOS Safari 10 even throws an exception)\n const error = Object.create(SyntaxError.prototype);\n const errorStack = new Error();\n\n return Object.assign(error, {\n name,\n message,\n get stack() {\n return (errorStack.stack || '').replace(/^(.+\\n){1,3}/, `${name}: ${message}\\n`);\n }\n });\n};\n","import { createCustomError } from '../utils/create-custom-error.js';\n\nconst MAX_LINE_LENGTH = 100;\nconst OFFSET_CORRECTION = 60;\nconst TAB_REPLACEMENT = ' ';\n\nfunction sourceFragment({ source, line, column, baseLine, baseColumn }, extraLines) {\n function processLines(start, end) {\n return lines\n .slice(start, end)\n .map((line, idx) =>\n String(start + idx + 1).padStart(maxNumLength) + ' |' + line\n ).join('\\n');\n }\n\n const prelines = '\\n'.repeat(Math.max(baseLine - 1, 0));\n const precolumns = ' '.repeat(Math.max(baseColumn - 1, 0));\n const lines = (prelines + precolumns + source).split(/\\r\\n?|\\n|\\f/);\n const startLine = Math.max(1, line - extraLines) - 1;\n const endLine = Math.min(line + extraLines, lines.length + 1);\n const maxNumLength = Math.max(4, String(endLine).length) + 1;\n let cutLeft = 0;\n\n // column correction according to replaced tab before column\n column += (TAB_REPLACEMENT.length - 1) * (lines[line - 1].substr(0, column - 1).match(/\\t/g) || []).length;\n\n if (column > MAX_LINE_LENGTH) {\n cutLeft = column - OFFSET_CORRECTION + 3;\n column = OFFSET_CORRECTION - 2;\n }\n\n for (let i = startLine; i <= endLine; i++) {\n if (i >= 0 && i < lines.length) {\n lines[i] = lines[i].replace(/\\t/g, TAB_REPLACEMENT);\n lines[i] =\n (cutLeft > 0 && lines[i].length > cutLeft ? '\\u2026' : '') +\n lines[i].substr(cutLeft, MAX_LINE_LENGTH - 2) +\n (lines[i].length > cutLeft + MAX_LINE_LENGTH - 1 ? '\\u2026' : '');\n }\n }\n\n return [\n processLines(startLine, line),\n new Array(column + maxNumLength + 2).join('-') + '^',\n processLines(line, endLine)\n ].filter(Boolean)\n .join('\\n')\n .replace(/^(\\s+\\d+\\s+\\|\\n)+/, '')\n .replace(/\\n(\\s+\\d+\\s+\\|)+$/, '');\n}\n\nexport function SyntaxError(message, source, offset, line, column, baseLine = 1, baseColumn = 1) {\n const error = Object.assign(createCustomError('SyntaxError', message), {\n source,\n offset,\n line,\n column,\n sourceFragment(extraLines) {\n return sourceFragment({ source, line, column, baseLine, baseColumn }, isNaN(extraLines) ? 0 : extraLines);\n },\n get formattedMessage() {\n return (\n `Parse error: ${message}\\n` +\n sourceFragment({ source, line, column, baseLine, baseColumn }, 2)\n );\n }\n });\n\n return error;\n}\n","import { WhiteSpace, Comment } from '../tokenizer/index.js';\n\nexport function readSequence(recognizer) {\n const children = this.createList();\n let space = false;\n const context = {\n recognizer\n };\n\n while (!this.eof) {\n switch (this.tokenType) {\n case Comment:\n this.next();\n continue;\n\n case WhiteSpace:\n space = true;\n this.next();\n continue;\n }\n\n let child = recognizer.getNode.call(this, context);\n\n if (child === undefined) {\n break;\n }\n\n if (space) {\n if (recognizer.onWhiteSpace) {\n recognizer.onWhiteSpace.call(this, child, children, context);\n }\n space = false;\n }\n\n children.push(child);\n }\n\n if (space && recognizer.onWhiteSpace) {\n recognizer.onWhiteSpace.call(this, null, children, context);\n }\n\n return children;\n};\n","import { List } from '../utils/List.js';\nimport { SyntaxError } from './SyntaxError.js';\nimport {\n tokenize,\n OffsetToLocation,\n TokenStream,\n tokenNames,\n\n consumeNumber,\n findWhiteSpaceStart,\n cmpChar,\n cmpStr,\n\n WhiteSpace,\n Comment,\n Ident,\n Function as FunctionToken,\n Url,\n Hash,\n Percentage,\n Number as NumberToken\n} from '../tokenizer/index.js';\nimport { readSequence } from './sequence.js';\n\nconst NOOP = () => {};\nconst EXCLAMATIONMARK = 0x0021; // U+0021 EXCLAMATION MARK (!)\nconst NUMBERSIGN = 0x0023; // U+0023 NUMBER SIGN (#)\nconst SEMICOLON = 0x003B; // U+003B SEMICOLON (;)\nconst LEFTCURLYBRACKET = 0x007B; // U+007B LEFT CURLY BRACKET ({)\nconst NULL = 0;\n\nconst arrayMethods = {\n createList() {\n return [];\n },\n createSingleNodeList(node) {\n return [node];\n },\n getFirstListNode(list) {\n return list && list[0] || null;\n },\n getLastListNode(list) {\n return list && list.length > 0 ? list[list.length - 1] : null;\n }\n};\n\nconst listMethods = {\n createList() {\n return new List();\n },\n createSingleNodeList(node) {\n return new List().appendData(node);\n },\n getFirstListNode(list) {\n return list && list.first;\n },\n getLastListNode(list) {\n return list && list.last;\n }\n};\n\nfunction createParseContext(name) {\n return function() {\n return this[name]();\n };\n}\n\nfunction fetchParseValues(dict) {\n const result = Object.create(null);\n\n for (const name of Object.keys(dict)) {\n const item = dict[name];\n const fn = item.parse || item;\n\n if (fn) {\n result[name] = fn;\n }\n }\n\n return result;\n}\n\nfunction processConfig(config) {\n const parseConfig = {\n context: Object.create(null),\n features: Object.assign(Object.create(null), config.features),\n scope: Object.assign(Object.create(null), config.scope),\n atrule: fetchParseValues(config.atrule),\n pseudo: fetchParseValues(config.pseudo),\n node: fetchParseValues(config.node)\n };\n\n for (const [name, context] of Object.entries(config.parseContext)) {\n switch (typeof context) {\n case 'function':\n parseConfig.context[name] = context;\n break;\n\n case 'string':\n parseConfig.context[name] = createParseContext(context);\n break;\n }\n }\n\n return {\n config: parseConfig,\n ...parseConfig,\n ...parseConfig.node\n };\n}\n\nexport function createParser(config) {\n let source = '';\n let filename = '<unknown>';\n let needPositions = false;\n let onParseError = NOOP;\n let onParseErrorThrow = false;\n\n const locationMap = new OffsetToLocation();\n const parser = Object.assign(new TokenStream(), processConfig(config || {}), {\n parseAtrulePrelude: true,\n parseRulePrelude: true,\n parseValue: true,\n parseCustomProperty: false,\n\n readSequence,\n\n consumeUntilBalanceEnd: () => 0,\n consumeUntilLeftCurlyBracket(code) {\n return code === LEFTCURLYBRACKET ? 1 : 0;\n },\n consumeUntilLeftCurlyBracketOrSemicolon(code) {\n return code === LEFTCURLYBRACKET || code === SEMICOLON ? 1 : 0;\n },\n consumeUntilExclamationMarkOrSemicolon(code) {\n return code === EXCLAMATIONMARK || code === SEMICOLON ? 1 : 0;\n },\n consumeUntilSemicolonIncluded(code) {\n return code === SEMICOLON ? 2 : 0;\n },\n\n createList: NOOP,\n createSingleNodeList: NOOP,\n getFirstListNode: NOOP,\n getLastListNode: NOOP,\n\n parseWithFallback(consumer, fallback) {\n const startIndex = this.tokenIndex;\n\n try {\n return consumer.call(this);\n } catch (e) {\n if (onParseErrorThrow) {\n throw e;\n }\n\n this.skip(startIndex - this.tokenIndex);\n const fallbackNode = fallback.call(this);\n\n onParseErrorThrow = true;\n onParseError(e, fallbackNode);\n onParseErrorThrow = false;\n\n return fallbackNode;\n }\n },\n\n lookupNonWSType(offset) {\n let type;\n\n do {\n type = this.lookupType(offset++);\n if (type !== WhiteSpace && type !== Comment) {\n return type;\n }\n } while (type !== NULL);\n\n return NULL;\n },\n\n charCodeAt(offset) {\n return offset >= 0 && offset < source.length ? source.charCodeAt(offset) : 0;\n },\n substring(offsetStart, offsetEnd) {\n return source.substring(offsetStart, offsetEnd);\n },\n substrToCursor(start) {\n return this.source.substring(start, this.tokenStart);\n },\n\n cmpChar(offset, charCode) {\n return cmpChar(source, offset, charCode);\n },\n cmpStr(offsetStart, offsetEnd, str) {\n return cmpStr(source, offsetStart, offsetEnd, str);\n },\n\n consume(tokenType) {\n const start = this.tokenStart;\n\n this.eat(tokenType);\n\n return this.substrToCursor(start);\n },\n consumeFunctionName() {\n const name = source.substring(this.tokenStart, this.tokenEnd - 1);\n\n this.eat(FunctionToken);\n\n return name;\n },\n consumeNumber(type) {\n const number = source.substring(this.tokenStart, consumeNumber(source, this.tokenStart));\n\n this.eat(type);\n\n return number;\n },\n\n eat(tokenType) {\n if (this.tokenType !== tokenType) {\n const tokenName = tokenNames[tokenType].slice(0, -6).replace(/-/g, ' ').replace(/^./, m => m.toUpperCase());\n let message = `${/[[\\](){}]/.test(tokenName) ? `\"${tokenName}\"` : tokenName} is expected`;\n let offset = this.tokenStart;\n\n // tweak message and offset\n switch (tokenType) {\n case Ident:\n // when identifier is expected but there is a function or url\n if (this.tokenType === FunctionToken || this.tokenType === Url) {\n offset = this.tokenEnd - 1;\n message = 'Identifier is expected but function found';\n } else {\n message = 'Identifier is expected';\n }\n break;\n\n case Hash:\n if (this.isDelim(NUMBERSIGN)) {\n this.next();\n offset++;\n message = 'Name is expected';\n }\n break;\n\n case Percentage:\n if (this.tokenType === NumberToken) {\n offset = this.tokenEnd;\n message = 'Percent sign is expected';\n }\n break;\n }\n\n this.error(message, offset);\n }\n\n this.next();\n },\n eatIdent(name) {\n if (this.tokenType !== Ident || this.lookupValue(0, name) === false) {\n this.error(`Identifier \"${name}\" is expected`);\n }\n\n this.next();\n },\n eatDelim(code) {\n if (!this.isDelim(code)) {\n this.error(`Delim \"${String.fromCharCode(code)}\" is expected`);\n }\n\n this.next();\n },\n\n getLocation(start, end) {\n if (needPositions) {\n return locationMap.getLocationRange(\n start,\n end,\n filename\n );\n }\n\n return null;\n },\n getLocationFromList(list) {\n if (needPositions) {\n const head = this.getFirstListNode(list);\n const tail = this.getLastListNode(list);\n return locationMap.getLocationRange(\n head !== null ? head.loc.start.offset - locationMap.startOffset : this.tokenStart,\n tail !== null ? tail.loc.end.offset - locationMap.startOffset : this.tokenStart,\n filename\n );\n }\n\n return null;\n },\n\n error(message, offset) {\n const location = typeof offset !== 'undefined' && offset < source.length\n ? locationMap.getLocation(offset)\n : this.eof\n ? locationMap.getLocation(findWhiteSpaceStart(source, source.length - 1))\n : locationMap.getLocation(this.tokenStart);\n\n throw new SyntaxError(\n message || 'Unexpected input',\n source,\n location.offset,\n location.line,\n location.column,\n locationMap.startLine,\n locationMap.startColumn\n );\n }\n });\n const createTokenIterateAPI = () => ({\n filename,\n source,\n tokenCount: parser.tokenCount,\n\n getTokenType: (index) =>\n parser.getTokenType(index),\n getTokenTypeName: (index) =>\n tokenNames[parser.getTokenType(index)],\n getTokenStart: (index) =>\n parser.getTokenStart(index),\n getTokenEnd: (index) =>\n parser.getTokenEnd(index),\n getTokenValue: (index) =>\n parser.source.substring(parser.getTokenStart(index), parser.getTokenEnd(index)),\n\n substring: (start, end) =>\n parser.source.substring(start, end),\n\n balance: parser.balance.subarray(0, parser.tokenCount + 1),\n isBlockOpenerTokenType: parser.isBlockOpenerTokenType,\n isBlockCloserTokenType: parser.isBlockCloserTokenType,\n getBlockTokenPairIndex: (index) =>\n parser.getBlockTokenPairIndex(index),\n\n getLocation: (offset) =>\n locationMap.getLocation(offset, filename),\n getRangeLocation: (start, end) =>\n locationMap.getLocationRange(start, end, filename)\n });\n\n const parse = function(source_, options) {\n source = source_;\n options = options || {};\n\n parser.setSource(source, tokenize);\n locationMap.setSource(\n source,\n options.offset,\n options.line,\n options.column\n );\n\n filename = options.filename || '<unknown>';\n needPositions = Boolean(options.positions);\n onParseError = typeof options.onParseError === 'function' ? options.onParseError : NOOP;\n onParseErrorThrow = false;\n\n parser.parseAtrulePrelude = 'parseAtrulePrelude' in options ? Boolean(options.parseAtrulePrelude) : true;\n parser.parseRulePrelude = 'parseRulePrelude' in options ? Boolean(options.parseRulePrelude) : true;\n parser.parseValue = 'parseValue' in options ? Boolean(options.parseValue) : true;\n parser.parseCustomProperty = 'parseCustomProperty' in options ? Boolean(options.parseCustomProperty) : false;\n\n const { context = 'default', list = true, onComment, onToken } = options;\n\n if (context in parser.context === false) {\n throw new Error('Unknown context `' + context + '`');\n }\n\n Object.assign(parser, list ? listMethods : arrayMethods);\n\n if (Array.isArray(onToken)) {\n parser.forEachToken((type, start, end) => {\n onToken.push({ type, start, end });\n });\n } else if (typeof onToken === 'function') {\n parser.forEachToken(onToken.bind(createTokenIterateAPI()));\n }\n\n if (typeof onComment === 'function') {\n parser.forEachToken((type, start, end) => {\n if (type === Comment) {\n const loc = parser.getLocation(start, end);\n const value = cmpStr(source, end - 2, end, '*/')\n ? source.slice(start + 2, end - 2)\n : source.slice(start + 2, end);\n\n onComment(value, loc);\n }\n });\n }\n\n const ast = parser.context[context].call(parser, options);\n\n if (!parser.eof) {\n parser.error();\n }\n\n return ast;\n };\n\n return Object.assign(parse, {\n SyntaxError,\n config: parser.config\n });\n};\n","import { SourceMapGenerator } from 'source-map-js/lib/source-map-generator.js';\n\nconst trackNodes = new Set(['Atrule', 'Selector', 'Declaration']);\n\nexport function generateSourceMap(handlers) {\n const map = new SourceMapGenerator();\n const generated = {\n line: 1,\n column: 0\n };\n const original = {\n line: 0, // should be zero to add first mapping\n column: 0\n };\n const activatedGenerated = {\n line: 1,\n column: 0\n };\n const activatedMapping = {\n generated: activatedGenerated\n };\n let line = 1;\n let column = 0;\n let sourceMappingActive = false;\n\n const origHandlersNode = handlers.node;\n handlers.node = function(node) {\n if (node.loc && node.loc.start && trackNodes.has(node.type)) {\n const nodeLine = node.loc.start.line;\n const nodeColumn = node.loc.start.column - 1;\n\n if (original.line !== nodeLine ||\n original.column !== nodeColumn) {\n original.line = nodeLine;\n original.column = nodeColumn;\n\n generated.line = line;\n generated.column = column;\n\n if (sourceMappingActive) {\n sourceMappingActive = false;\n if (generated.line !== activatedGenerated.line ||\n generated.column !== activatedGenerated.column) {\n map.addMapping(activatedMapping);\n }\n }\n\n sourceMappingActive = true;\n map.addMapping({\n source: node.loc.source,\n original,\n generated\n });\n }\n }\n\n origHandlersNode.call(this, node);\n\n if (sourceMappingActive && trackNodes.has(node.type)) {\n activatedGenerated.line = line;\n activatedGenerated.column = column;\n }\n };\n\n const origHandlersEmit = handlers.emit;\n handlers.emit = function(value, type, auto) {\n for (let i = 0; i < value.length; i++) {\n if (value.charCodeAt(i) === 10) { // \\n\n line++;\n column = 0;\n } else {\n column++;\n }\n }\n\n origHandlersEmit(value, type, auto);\n };\n\n const origHandlersResult = handlers.result;\n handlers.result = function() {\n if (sourceMappingActive) {\n map.addMapping(activatedMapping);\n }\n\n return {\n css: origHandlersResult(),\n map\n };\n };\n\n return handlers;\n};\n","import {\n Delim,\n Ident,\n Function as FunctionToken,\n Url,\n BadUrl,\n AtKeyword,\n Hash,\n Percentage,\n Dimension,\n Number as NumberToken,\n String as StringToken,\n Colon,\n LeftParenthesis,\n RightParenthesis,\n CDC\n} from '../tokenizer/index.js';\n\nconst PLUSSIGN = 0x002B; // U+002B PLUS SIGN (+)\nconst HYPHENMINUS = 0x002D; // U+002D HYPHEN-MINUS (-)\n\n// code:\n// 0xxxxxxx x0000000 - char code (0x80 for non-ASCII) or delim value\n// 00000000 0xxxxxx0 - token type (0 for delim, 1 for token)\n// 00000000 0000000x - reserved for carriage emit flag (0 for no space, 1 for space)\nconst code = (type, value) => {\n if (type === Delim) {\n type = value;\n }\n\n if (typeof type === 'string') {\n type = Math.min(type.charCodeAt(0), 0x80) << 6; // replace non-ASCII with 0x80\n }\n\n return type << 1;\n};\n\n// https://www.w3.org/TR/css-syntax-3/#serialization\n// The only requirement for serialization is that it must \"round-trip\" with parsing,\n// that is, parsing the stylesheet must produce the same data structures as parsing,\n// serializing, and parsing again, except for consecutive <whitespace-token>s,\n// which may be collapsed into a single token.\n\nconst specPairs = [\n [Ident, Ident],\n [Ident, FunctionToken],\n [Ident, Url],\n [Ident, BadUrl],\n [Ident, '-'],\n [Ident, NumberToken],\n [Ident, Percentage],\n [Ident, Dimension],\n [Ident, CDC],\n [Ident, LeftParenthesis],\n\n [AtKeyword, Ident],\n [AtKeyword, FunctionToken],\n [AtKeyword, Url],\n [AtKeyword, BadUrl],\n [AtKeyword, '-'],\n [AtKeyword, NumberToken],\n [AtKeyword, Percentage],\n [AtKeyword, Dimension],\n [AtKeyword, CDC],\n\n [Hash, Ident],\n [Hash, FunctionToken],\n [Hash, Url],\n [Hash, BadUrl],\n [Hash, '-'],\n [Hash, NumberToken],\n [Hash, Percentage],\n [Hash, Dimension],\n [Hash, CDC],\n\n [Dimension, Ident],\n [Dimension, FunctionToken],\n [Dimension, Url],\n [Dimension, BadUrl],\n [Dimension, '-'],\n [Dimension, NumberToken],\n [Dimension, Percentage],\n [Dimension, Dimension],\n [Dimension, CDC],\n\n ['#', Ident],\n ['#', FunctionToken],\n ['#', Url],\n ['#', BadUrl],\n ['#', '-'],\n ['#', NumberToken],\n ['#', Percentage],\n ['#', Dimension],\n ['#', CDC], // https://github.com/w3c/csswg-drafts/pull/6874\n\n ['-', Ident],\n ['-', FunctionToken],\n ['-', Url],\n ['-', BadUrl],\n ['-', '-'],\n ['-', NumberToken],\n ['-', Percentage],\n ['-', Dimension],\n ['-', CDC], // https://github.com/w3c/csswg-drafts/pull/6874\n\n [NumberToken, Ident],\n [NumberToken, FunctionToken],\n [NumberToken, Url],\n [NumberToken, BadUrl],\n [NumberToken, NumberToken],\n [NumberToken, Percentage],\n [NumberToken, Dimension],\n [NumberToken, '%'],\n [NumberToken, CDC], // https://github.com/w3c/csswg-drafts/pull/6874\n\n ['@', Ident],\n ['@', FunctionToken],\n ['@', Url],\n ['@', BadUrl],\n ['@', '-'],\n ['@', CDC], // https://github.com/w3c/csswg-drafts/pull/6874\n\n ['.', NumberToken],\n ['.', Percentage],\n ['.', Dimension],\n\n ['+', NumberToken],\n ['+', Percentage],\n ['+', Dimension],\n\n ['/', '*']\n];\n// validate with scripts/generate-safe\nconst safePairs = specPairs.concat([\n [Ident, Hash],\n\n [Dimension, Hash],\n\n [Hash, Hash],\n\n [AtKeyword, LeftParenthesis],\n [AtKeyword, StringToken],\n [AtKeyword, Colon],\n\n [Percentage, Percentage],\n [Percentage, Dimension],\n [Percentage, FunctionToken],\n [Percentage, '-'],\n\n [RightParenthesis, Ident],\n [RightParenthesis, FunctionToken],\n [RightParenthesis, Percentage],\n [RightParenthesis, Dimension],\n [RightParenthesis, Hash],\n [RightParenthesis, '-']\n]);\n\nfunction createMap(pairs) {\n const isWhiteSpaceRequired = new Set(\n pairs.map(([prev, next]) => (code(prev) << 16 | code(next)))\n );\n\n return function(prevCode, type, value) {\n const nextCode = code(type, value);\n const nextCharCode = value.charCodeAt(0);\n const emitWs =\n (nextCharCode === HYPHENMINUS &&\n type !== Ident &&\n type !== FunctionToken &&\n type !== CDC) ||\n (nextCharCode === PLUSSIGN)\n ? isWhiteSpaceRequired.has((prevCode & 0xFFFE) << 16 | nextCharCode << 7)\n : isWhiteSpaceRequired.has((prevCode & 0xFFFE) << 16 | nextCode);\n\n return nextCode | emitWs;\n };\n}\n\nexport const spec = createMap(specPairs);\nexport const safe = createMap(safePairs);\n","import { tokenize, Delim, WhiteSpace } from '../tokenizer/index.js';\nimport { generateSourceMap } from './sourceMap.js';\nimport * as tokenBefore from './token-before.js';\n\nconst REVERSESOLIDUS = 0x005c; // U+005C REVERSE SOLIDUS (\\)\n\nfunction processChildren(node, delimeter) {\n if (typeof delimeter === 'function') {\n let prev = null;\n\n node.children.forEach(node => {\n if (prev !== null) {\n delimeter.call(this, prev);\n }\n\n this.node(node);\n prev = node;\n });\n\n return;\n }\n\n node.children.forEach(this.node, this);\n}\n\nexport function createGenerator(config) {\n const types = new Map();\n\n for (let [name, item] of Object.entries(config.node)) {\n const fn = item.generate || item;\n\n if (typeof fn === 'function') {\n types.set(name, item.generate || item);\n }\n }\n\n return function(node, options) {\n let buffer = '';\n let prevCode = 0;\n let handlers = {\n node(node) {\n if (types.has(node.type)) {\n types.get(node.type).call(publicApi, node);\n } else {\n throw new Error('Unknown node type: ' + node.type);\n }\n },\n tokenBefore: tokenBefore.safe,\n token(type, value, suppressAutoWhiteSpace) {\n prevCode = this.tokenBefore(prevCode, type, value);\n\n if (!suppressAutoWhiteSpace && prevCode & 1) {\n this.emit(' ', WhiteSpace, true);\n }\n\n this.emit(value, type, false);\n\n if (type === Delim && value.charCodeAt(0) === REVERSESOLIDUS) {\n this.emit('\\n', WhiteSpace, true);\n }\n },\n emit(value) {\n buffer += value;\n },\n result() {\n return buffer;\n }\n };\n\n if (options) {\n if (typeof options.decorator === 'function') {\n handlers = options.decorator(handlers);\n }\n\n if (options.sourceMap) {\n handlers = generateSourceMap(handlers);\n }\n\n if (options.mode in tokenBefore) {\n handlers.tokenBefore = tokenBefore[options.mode];\n }\n }\n\n const publicApi = {\n node: (node) => handlers.node(node),\n children: processChildren,\n token: (type, value) => handlers.token(type, value),\n tokenize: (raw) =>\n tokenize(raw, (type, start, end) => {\n handlers.token(\n type,\n raw.slice(start, end),\n start !== 0 // suppress auto whitespace for internal value tokens\n );\n })\n };\n\n handlers.node(node);\n\n return handlers.result();\n };\n};\n","import { List } from '../utils/List.js';\n\nexport function createConvertor(walk) {\n return {\n fromPlainObject(ast) {\n walk(ast, {\n enter(node) {\n if (node.children && node.children instanceof List === false) {\n node.children = new List().fromArray(node.children);\n }\n }\n });\n\n return ast;\n },\n toPlainObject(ast) {\n walk(ast, {\n leave(node) {\n if (node.children && node.children instanceof List) {\n node.children = node.children.toArray();\n }\n }\n });\n\n return ast;\n }\n };\n};\n","const { hasOwnProperty } = Object.prototype;\nconst noop = function() {};\n\nfunction ensureFunction(value) {\n return typeof value === 'function' ? value : noop;\n}\n\nfunction invokeForType(fn, type) {\n return function(node, item, list) {\n if (node.type === type) {\n fn.call(this, node, item, list);\n }\n };\n}\n\nfunction getWalkersFromStructure(name, nodeType) {\n const structure = nodeType.structure;\n const walkers = [];\n\n for (const key in structure) {\n if (hasOwnProperty.call(structure, key) === false) {\n continue;\n }\n\n let fieldTypes = structure[key];\n const walker = {\n name: key,\n type: false,\n nullable: false\n };\n\n if (!Array.isArray(fieldTypes)) {\n fieldTypes = [fieldTypes];\n }\n\n for (const fieldType of fieldTypes) {\n if (fieldType === null) {\n walker.nullable = true;\n } else if (typeof fieldType === 'string') {\n walker.type = 'node';\n } else if (Array.isArray(fieldType)) {\n walker.type = 'list';\n }\n }\n\n if (walker.type) {\n walkers.push(walker);\n }\n }\n\n if (walkers.length) {\n return {\n context: nodeType.walkContext,\n fields: walkers\n };\n }\n\n return null;\n}\n\nfunction getTypesFromConfig(config) {\n const types = {};\n\n for (const name in config.node) {\n if (hasOwnProperty.call(config.node, name)) {\n const nodeType = config.node[name];\n\n if (!nodeType.structure) {\n throw new Error('Missed `structure` field in `' + name + '` node type definition');\n }\n\n types[name] = getWalkersFromStructure(name, nodeType);\n }\n }\n\n return types;\n}\n\nfunction createTypeIterator(config, reverse) {\n const fields = config.fields.slice();\n const contextName = config.context;\n const useContext = typeof contextName === 'string';\n\n if (reverse) {\n fields.reverse();\n }\n\n return function(node, context, walk, walkReducer) {\n let prevContextValue;\n\n if (useContext) {\n prevContextValue = context[contextName];\n context[contextName] = node;\n }\n\n for (const field of fields) {\n const ref = node[field.name];\n\n if (!field.nullable || ref) {\n if (field.type === 'list') {\n const breakWalk = reverse\n ? ref.reduceRight(walkReducer, false)\n : ref.reduce(walkReducer, false);\n\n if (breakWalk) {\n return true;\n }\n } else if (walk(ref)) {\n return true;\n }\n }\n }\n\n if (useContext) {\n context[contextName] = prevContextValue;\n }\n };\n}\n\nfunction createFastTraveralMap({\n StyleSheet,\n Atrule,\n Rule,\n Block,\n DeclarationList\n}) {\n return {\n Atrule: {\n StyleSheet,\n Atrule,\n Rule,\n Block\n },\n Rule: {\n StyleSheet,\n Atrule,\n Rule,\n Block\n },\n Declaration: {\n StyleSheet,\n Atrule,\n Rule,\n Block,\n DeclarationList\n }\n };\n}\n\nexport function createWalker(config) {\n const types = getTypesFromConfig(config);\n const iteratorsNatural = {};\n const iteratorsReverse = {};\n const breakWalk = Symbol('break-walk');\n const skipNode = Symbol('skip-node');\n\n for (const name in types) {\n if (hasOwnProperty.call(types, name) && types[name] !== null) {\n iteratorsNatural[name] = createTypeIterator(types[name], false);\n iteratorsReverse[name] = createTypeIterator(types[name], true);\n }\n }\n\n const fastTraversalIteratorsNatural = createFastTraveralMap(iteratorsNatural);\n const fastTraversalIteratorsReverse = createFastTraveralMap(iteratorsReverse);\n\n const walk = function(root, options) {\n function walkNode(node, item, list) {\n const enterRet = enter.call(context, node, item, list);\n\n if (enterRet === breakWalk) {\n return true;\n }\n\n if (enterRet === skipNode) {\n return false;\n }\n\n if (iterators.hasOwnProperty(node.type)) {\n if (iterators[node.type](node, context, walkNode, walkReducer)) {\n return true;\n }\n }\n\n if (leave.call(context, node, item, list) === breakWalk) {\n return true;\n }\n\n return false;\n }\n\n let enter = noop;\n let leave = noop;\n let iterators = iteratorsNatural;\n let walkReducer = (ret, data, item, list) => ret || walkNode(data, item, list);\n const context = {\n break: breakWalk,\n skip: skipNode,\n\n root,\n stylesheet: null,\n atrule: null,\n atrulePrelude: null,\n rule: null,\n selector: null,\n block: null,\n declaration: null,\n function: null\n };\n\n if (typeof options === 'function') {\n enter = options;\n } else if (options) {\n enter = ensureFunction(options.enter);\n leave = ensureFunction(options.leave);\n\n if (options.reverse) {\n iterators = iteratorsReverse;\n }\n\n if (options.visit) {\n if (fastTraversalIteratorsNatural.hasOwnProperty(options.visit)) {\n iterators = options.reverse\n ? fastTraversalIteratorsReverse[options.visit]\n : fastTraversalIteratorsNatural[options.visit];\n } else if (!types.hasOwnProperty(options.visit)) {\n throw new Error('Bad value `' + options.visit + '` for `visit` option (should be: ' + Object.keys(types).sort().join(', ') + ')');\n }\n\n enter = invokeForType(enter, options.visit);\n leave = invokeForType(leave, options.visit);\n }\n }\n\n if (enter === noop && leave === noop) {\n throw new Error('Neither `enter` nor `leave` walker handler is set or both aren\\'t a function');\n }\n\n walkNode(root);\n };\n\n walk.break = breakWalk;\n walk.skip = skipNode;\n\n walk.find = function(ast, fn) {\n let found = null;\n\n walk(ast, function(node, item, list) {\n if (fn.call(this, node, item, list)) {\n found = node;\n return breakWalk;\n }\n });\n\n return found;\n };\n\n walk.findLast = function(ast, fn) {\n let found = null;\n\n walk(ast, {\n reverse: true,\n enter(node, item, list) {\n if (fn.call(this, node, item, list)) {\n found = node;\n return breakWalk;\n }\n }\n });\n\n return found;\n };\n\n walk.findAll = function(ast, fn) {\n const found = [];\n\n walk(ast, function(node, item, list) {\n if (fn.call(this, node, item, list)) {\n found.push(node);\n }\n });\n\n return found;\n };\n\n return walk;\n};\n","function noop(value) {\n return value;\n}\n\nfunction generateMultiplier(multiplier) {\n const { min, max, comma } = multiplier;\n\n if (min === 0 && max === 0) {\n return comma ? '#?' : '*';\n }\n\n if (min === 0 && max === 1) {\n return '?';\n }\n\n if (min === 1 && max === 0) {\n return comma ? '#' : '+';\n }\n\n if (min === 1 && max === 1) {\n return '';\n }\n\n return (\n (comma ? '#' : '') +\n (min === max\n ? '{' + min + '}'\n : '{' + min + ',' + (max !== 0 ? max : '') + '}'\n )\n );\n}\n\nfunction generateTypeOpts(node) {\n switch (node.type) {\n case 'Range':\n return (\n ' [' +\n (node.min === null ? '-∞' : node.min) +\n ',' +\n (node.max === null ? '∞' : node.max) +\n ']'\n );\n\n default:\n throw new Error('Unknown node type `' + node.type + '`');\n }\n}\n\nfunction generateSequence(node, decorate, forceBraces, compact) {\n const combinator = node.combinator === ' ' || compact ? node.combinator : ' ' + node.combinator + ' ';\n const result = node.terms\n .map(term => internalGenerate(term, decorate, forceBraces, compact))\n .join(combinator);\n\n if (node.explicit || forceBraces) {\n return (compact || result[0] === ',' ? '[' : '[ ') + result + (compact ? ']' : ' ]');\n }\n\n return result;\n}\n\nfunction internalGenerate(node, decorate, forceBraces, compact) {\n let result;\n\n switch (node.type) {\n case 'Group':\n result =\n generateSequence(node, decorate, forceBraces, compact) +\n (node.disallowEmpty ? '!' : '');\n break;\n\n case 'Multiplier':\n // return since node is a composition\n return (\n internalGenerate(node.term, decorate, forceBraces, compact) +\n decorate(generateMultiplier(node), node)\n );\n\n case 'Boolean':\n result = '<boolean-expr[' + internalGenerate(node.term, decorate, forceBraces, compact) + ']>';\n break;\n\n case 'Type':\n result = '<' + node.name + (node.opts ? decorate(generateTypeOpts(node.opts), node.opts) : '') + '>';\n break;\n\n case 'Property':\n result = '<\\'' + node.name + '\\'>';\n break;\n\n case 'Keyword':\n result = node.name;\n break;\n\n case 'AtKeyword':\n result = '@' + node.name;\n break;\n\n case 'Function':\n result = node.name + '(';\n break;\n\n case 'String':\n case 'Token':\n result = node.value;\n break;\n\n case 'Comma':\n result = ',';\n break;\n\n default:\n throw new Error('Unknown node type `' + node.type + '`');\n }\n\n return decorate(result, node);\n}\n\nexport function generate(node, options) {\n let decorate = noop;\n let forceBraces = false;\n let compact = false;\n\n if (typeof options === 'function') {\n decorate = options;\n } else if (options) {\n forceBraces = Boolean(options.forceBraces);\n compact = Boolean(options.compact);\n if (typeof options.decorate === 'function') {\n decorate = options.decorate;\n }\n }\n\n return internalGenerate(node, decorate, forceBraces, compact);\n};\n","import { createCustomError } from '../utils/create-custom-error.js';\nimport { generate } from '../definition-syntax/generate.js';\n\nconst defaultLoc = { offset: 0, line: 1, column: 1 };\n\nfunction locateMismatch(matchResult, node) {\n const tokens = matchResult.tokens;\n const longestMatch = matchResult.longestMatch;\n const mismatchNode = longestMatch < tokens.length ? tokens[longestMatch].node || null : null;\n const badNode = mismatchNode !== node ? mismatchNode : null;\n let mismatchOffset = 0;\n let mismatchLength = 0;\n let entries = 0;\n let css = '';\n let start;\n let end;\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i].value;\n\n if (i === longestMatch) {\n mismatchLength = token.length;\n mismatchOffset = css.length;\n }\n\n if (badNode !== null && tokens[i].node === badNode) {\n if (i <= longestMatch) {\n entries++;\n } else {\n entries = 0;\n }\n }\n\n css += token;\n }\n\n if (longestMatch === tokens.length || entries > 1) { // last\n start = fromLoc(badNode || node, 'end') || buildLoc(defaultLoc, css);\n end = buildLoc(start);\n } else {\n start = fromLoc(badNode, 'start') ||\n buildLoc(fromLoc(node, 'start') || defaultLoc, css.slice(0, mismatchOffset));\n end = fromLoc(badNode, 'end') ||\n buildLoc(start, css.substr(mismatchOffset, mismatchLength));\n }\n\n return {\n css,\n mismatchOffset,\n mismatchLength,\n start,\n end\n };\n}\n\nfunction fromLoc(node, point) {\n const value = node && node.loc && node.loc[point];\n\n if (value) {\n return 'line' in value ? buildLoc(value) : value;\n }\n\n return null;\n}\n\nfunction buildLoc({ offset, line, column }, extra) {\n const loc = {\n offset,\n line,\n column\n };\n\n if (extra) {\n const lines = extra.split(/\\n|\\r\\n?|\\f/);\n\n loc.offset += extra.length;\n loc.line += lines.length - 1;\n loc.column = lines.length === 1 ? loc.column + extra.length : lines.pop().length + 1;\n }\n\n return loc;\n}\n\nexport const SyntaxReferenceError = function(type, referenceName) {\n const error = createCustomError(\n 'SyntaxReferenceError',\n type + (referenceName ? ' `' + referenceName + '`' : '')\n );\n\n error.reference = referenceName;\n\n return error;\n};\n\nexport const SyntaxMatchError = function(message, syntax, node, matchResult) {\n const error = createCustomError('SyntaxMatchError', message);\n const {\n css,\n mismatchOffset,\n mismatchLength,\n start,\n end\n } = locateMismatch(matchResult, node);\n\n error.rawMessage = message;\n error.syntax = syntax ? generate(syntax) : '<generic>';\n error.css = css;\n error.mismatchOffset = mismatchOffset;\n error.mismatchLength = mismatchLength;\n error.message = message + '\\n' +\n ' syntax: ' + error.syntax + '\\n' +\n ' value: ' + (css || '<empty string>') + '\\n' +\n ' --------' + new Array(error.mismatchOffset + 1).join('-') + '^';\n\n Object.assign(error, start);\n error.loc = {\n source: (node && node.loc && node.loc.source) || '<unknown>',\n start,\n end\n };\n\n return error;\n};\n","const keywords = new Map();\nconst properties = new Map();\nconst HYPHENMINUS = 45; // '-'.charCodeAt()\n\nexport const keyword = getKeywordDescriptor;\nexport const property = getPropertyDescriptor;\nexport const vendorPrefix = getVendorPrefix;\nexport function isCustomProperty(str, offset) {\n offset = offset || 0;\n\n return str.length - offset >= 2 &&\n str.charCodeAt(offset) === HYPHENMINUS &&\n str.charCodeAt(offset + 1) === HYPHENMINUS;\n}\n\nfunction getVendorPrefix(str, offset) {\n offset = offset || 0;\n\n // verdor prefix should be at least 3 chars length\n if (str.length - offset >= 3) {\n // vendor prefix starts with hyper minus following non-hyper minus\n if (str.charCodeAt(offset) === HYPHENMINUS &&\n str.charCodeAt(offset + 1) !== HYPHENMINUS) {\n // vendor prefix should contain a hyper minus at the ending\n const secondDashIndex = str.indexOf('-', offset + 2);\n\n if (secondDashIndex !== -1) {\n return str.substring(offset, secondDashIndex + 1);\n }\n }\n }\n\n return '';\n}\n\nfunction getKeywordDescriptor(keyword) {\n if (keywords.has(keyword)) {\n return keywords.get(keyword);\n }\n\n const name = keyword.toLowerCase();\n let descriptor = keywords.get(name);\n\n if (descriptor === undefined) {\n const custom = isCustomProperty(name, 0);\n const vendor = !custom ? getVendorPrefix(name, 0) : '';\n descriptor = Object.freeze({\n basename: name.substr(vendor.length),\n name,\n prefix: vendor,\n vendor,\n custom\n });\n }\n\n keywords.set(keyword, descriptor);\n\n return descriptor;\n}\n\nfunction getPropertyDescriptor(property) {\n if (properties.has(property)) {\n return properties.get(property);\n }\n\n let name = property;\n let hack = property[0];\n\n if (hack === '/') {\n hack = property[1] === '/' ? '//' : '/';\n } else if (hack !== '_' &&\n hack !== '*' &&\n hack !== '$' &&\n hack !== '#' &&\n hack !== '+' &&\n hack !== '&') {\n hack = '';\n }\n\n const custom = isCustomProperty(name, hack.length);\n\n // re-use result when possible (the same as for lower case)\n if (!custom) {\n name = name.toLowerCase();\n if (properties.has(name)) {\n const descriptor = properties.get(name);\n properties.set(property, descriptor);\n return descriptor;\n }\n }\n\n const vendor = !custom ? getVendorPrefix(name, hack.length) : '';\n const prefix = name.substr(0, hack.length + vendor.length);\n const descriptor = Object.freeze({\n basename: name.substr(prefix.length),\n name: name.substr(hack.length),\n hack,\n vendor,\n prefix,\n custom\n });\n\n properties.set(property, descriptor);\n\n return descriptor;\n}\n","// https://drafts.csswg.org/css-cascade-5/\nexport const cssWideKeywords = [\n 'initial',\n 'inherit',\n 'unset',\n 'revert',\n 'revert-layer'\n];\n","import {\n isDigit,\n cmpChar,\n Delim,\n WhiteSpace,\n Comment,\n Ident,\n Number as NumberToken,\n Dimension\n} from '../tokenizer/index.js';\n\nconst PLUSSIGN = 0x002B; // U+002B PLUS SIGN (+)\nconst HYPHENMINUS = 0x002D; // U+002D HYPHEN-MINUS (-)\nconst N = 0x006E; // U+006E LATIN SMALL LETTER N (n)\nconst DISALLOW_SIGN = true;\nconst ALLOW_SIGN = false;\n\nfunction isDelim(token, code) {\n return token !== null && token.type === Delim && token.value.charCodeAt(0) === code;\n}\n\nfunction skipSC(token, offset, getNextToken) {\n while (token !== null && (token.type === WhiteSpace || token.type === Comment)) {\n token = getNextToken(++offset);\n }\n\n return offset;\n}\n\nfunction checkInteger(token, valueOffset, disallowSign, offset) {\n if (!token) {\n return 0;\n }\n\n const code = token.value.charCodeAt(valueOffset);\n\n if (code === PLUSSIGN || code === HYPHENMINUS) {\n if (disallowSign) {\n // Number sign is not allowed\n return 0;\n }\n valueOffset++;\n }\n\n for (; valueOffset < token.value.length; valueOffset++) {\n if (!isDigit(token.value.charCodeAt(valueOffset))) {\n // Integer is expected\n return 0;\n }\n }\n\n return offset + 1;\n}\n\n// ... <signed-integer>\n// ... ['+' | '-'] <signless-integer>\nfunction consumeB(token, offset_, getNextToken) {\n let sign = false;\n let offset = skipSC(token, offset_, getNextToken);\n\n token = getNextToken(offset);\n\n if (token === null) {\n return offset_;\n }\n\n if (token.type !== NumberToken) {\n if (isDelim(token, PLUSSIGN) || isDelim(token, HYPHENMINUS)) {\n sign = true;\n offset = skipSC(getNextToken(++offset), offset, getNextToken);\n token = getNextToken(offset);\n\n if (token === null || token.type !== NumberToken) {\n return 0;\n }\n } else {\n return offset_;\n }\n }\n\n if (!sign) {\n const code = token.value.charCodeAt(0);\n if (code !== PLUSSIGN && code !== HYPHENMINUS) {\n // Number sign is expected\n return 0;\n }\n }\n\n return checkInteger(token, sign ? 0 : 1, sign, offset);\n}\n\n// An+B microsyntax https://www.w3.org/TR/css-syntax-3/#anb\nexport default function anPlusB(token, getNextToken) {\n /* eslint-disable brace-style*/\n let offset = 0;\n\n if (!token) {\n return 0;\n }\n\n // <integer>\n if (token.type === NumberToken) {\n return checkInteger(token, 0, ALLOW_SIGN, offset); // b\n }\n\n // -n\n // -n <signed-integer>\n // -n ['+' | '-'] <signless-integer>\n // -n- <signless-integer>\n // <dashndashdigit-ident>\n else if (token.type === Ident && token.value.charCodeAt(0) === HYPHENMINUS) {\n // expect 1st char is N\n if (!cmpChar(token.value, 1, N)) {\n return 0;\n }\n\n switch (token.value.length) {\n // -n\n // -n <signed-integer>\n // -n ['+' | '-'] <signless-integer>\n case 2:\n return consumeB(getNextToken(++offset), offset, getNextToken);\n\n // -n- <signless-integer>\n case 3:\n if (token.value.charCodeAt(2) !== HYPHENMINUS) {\n return 0;\n }\n\n offset = skipSC(getNextToken(++offset), offset, getNextToken);\n token = getNextToken(offset);\n\n return checkInteger(token, 0, DISALLOW_SIGN, offset);\n\n // <dashndashdigit-ident>\n default:\n if (token.value.charCodeAt(2) !== HYPHENMINUS) {\n return 0;\n }\n\n return checkInteger(token, 3, DISALLOW_SIGN, offset);\n }\n }\n\n // '+'? n\n // '+'? n <signed-integer>\n // '+'? n ['+' | '-'] <signless-integer>\n // '+'? n- <signless-integer>\n // '+'? <ndashdigit-ident>\n else if (token.type === Ident || (isDelim(token, PLUSSIGN) && getNextToken(offset + 1).type === Ident)) {\n // just ignore a plus\n if (token.type !== Ident) {\n token = getNextToken(++offset);\n }\n\n if (token === null || !cmpChar(token.value, 0, N)) {\n return 0;\n }\n\n switch (token.value.length) {\n // '+'? n\n // '+'? n <signed-integer>\n // '+'? n ['+' | '-'] <signless-integer>\n case 1:\n return consumeB(getNextToken(++offset), offset, getNextToken);\n\n // '+'? n- <signless-integer>\n case 2:\n if (token.value.charCodeAt(1) !== HYPHENMINUS) {\n return 0;\n }\n\n offset = skipSC(getNextToken(++offset), offset, getNextToken);\n token = getNextToken(offset);\n\n return checkInteger(token, 0, DISALLOW_SIGN, offset);\n\n // '+'? <ndashdigit-ident>\n default:\n if (token.value.charCodeAt(1) !== HYPHENMINUS) {\n return 0;\n }\n\n return checkInteger(token, 2, DISALLOW_SIGN, offset);\n }\n }\n\n // <ndashdigit-dimension>\n // <ndash-dimension> <signless-integer>\n // <n-dimension>\n // <n-dimension> <signed-integer>\n // <n-dimension> ['+' | '-'] <signless-integer>\n else if (token.type === Dimension) {\n let code = token.value.charCodeAt(0);\n let sign = code === PLUSSIGN || code === HYPHENMINUS ? 1 : 0;\n let i = sign;\n\n for (; i < token.value.length; i++) {\n if (!isDigit(token.value.charCodeAt(i))) {\n break;\n }\n }\n\n if (i === sign) {\n // Integer is expected\n return 0;\n }\n\n if (!cmpChar(token.value, i, N)) {\n return 0;\n }\n\n // <n-dimension>\n // <n-dimension> <signed-integer>\n // <n-dimension> ['+' | '-'] <signless-integer>\n if (i + 1 === token.value.length) {\n return consumeB(getNextToken(++offset), offset, getNextToken);\n } else {\n if (token.value.charCodeAt(i + 1) !== HYPHENMINUS) {\n return 0;\n }\n\n // <ndash-dimension> <signless-integer>\n if (i + 2 === token.value.length) {\n offset = skipSC(getNextToken(++offset), offset, getNextToken);\n token = getNextToken(offset);\n\n return checkInteger(token, 0, DISALLOW_SIGN, offset);\n }\n // <ndashdigit-dimension>\n else {\n return checkInteger(token, i + 2, DISALLOW_SIGN, offset);\n }\n }\n }\n\n return 0;\n};\n","import {\n isHexDigit,\n cmpChar,\n Ident,\n Delim,\n Number as NumberToken,\n Dimension\n} from '../tokenizer/index.js';\n\nconst PLUSSIGN = 0x002B; // U+002B PLUS SIGN (+)\nconst HYPHENMINUS = 0x002D; // U+002D HYPHEN-MINUS (-)\nconst QUESTIONMARK = 0x003F; // U+003F QUESTION MARK (?)\nconst U = 0x0075; // U+0075 LATIN SMALL LETTER U (u)\n\nfunction isDelim(token, code) {\n return token !== null && token.type === Delim && token.value.charCodeAt(0) === code;\n}\n\nfunction startsWith(token, code) {\n return token.value.charCodeAt(0) === code;\n}\n\nfunction hexSequence(token, offset, allowDash) {\n let hexlen = 0;\n\n for (let pos = offset; pos < token.value.length; pos++) {\n const code = token.value.charCodeAt(pos);\n\n if (code === HYPHENMINUS && allowDash && hexlen !== 0) {\n hexSequence(token, offset + hexlen + 1, false);\n return 6; // dissallow following question marks\n }\n\n if (!isHexDigit(code)) {\n return 0; // not a hex digit\n }\n\n if (++hexlen > 6) {\n return 0; // too many hex digits\n };\n }\n\n return hexlen;\n}\n\nfunction withQuestionMarkSequence(consumed, length, getNextToken) {\n if (!consumed) {\n return 0; // nothing consumed\n }\n\n while (isDelim(getNextToken(length), QUESTIONMARK)) {\n if (++consumed > 6) {\n return 0; // too many question marks\n }\n\n length++;\n }\n\n return length;\n}\n\n// https://drafts.csswg.org/css-syntax/#urange\n// Informally, the <urange> production has three forms:\n// U+0001\n// Defines a range consisting of a single code point, in this case the code point \"1\".\n// U+0001-00ff\n// Defines a range of codepoints between the first and the second value, in this case\n// the range between \"1\" and \"ff\" (255 in decimal) inclusive.\n// U+00??\n// Defines a range of codepoints where the \"?\" characters range over all hex digits,\n// in this case defining the same as the value U+0000-00ff.\n// In each form, a maximum of 6 digits is allowed for each hexadecimal number (if you treat \"?\" as a hexadecimal digit).\n//\n// <urange> =\n// u '+' <ident-token> '?'* |\n// u <dimension-token> '?'* |\n// u <number-token> '?'* |\n// u <number-token> <dimension-token> |\n// u <number-token> <number-token> |\n// u '+' '?'+\nexport default function urange(token, getNextToken) {\n let length = 0;\n\n // should start with `u` or `U`\n if (token === null || token.type !== Ident || !cmpChar(token.value, 0, U)) {\n return 0;\n }\n\n token = getNextToken(++length);\n if (token === null) {\n return 0;\n }\n\n // u '+' <ident-token> '?'*\n // u '+' '?'+\n if (isDelim(token, PLUSSIGN)) {\n token = getNextToken(++length);\n if (token === null) {\n return 0;\n }\n\n if (token.type === Ident) {\n // u '+' <ident-token> '?'*\n return withQuestionMarkSequence(hexSequence(token, 0, true), ++length, getNextToken);\n }\n\n if (isDelim(token, QUESTIONMARK)) {\n // u '+' '?'+\n return withQuestionMarkSequence(1, ++length, getNextToken);\n }\n\n // Hex digit or question mark is expected\n return 0;\n }\n\n // u <number-token> '?'*\n // u <number-token> <dimension-token>\n // u <number-token> <number-token>\n if (token.type === NumberToken) {\n const consumedHexLength = hexSequence(token, 1, true);\n if (consumedHexLength === 0) {\n return 0;\n }\n\n token = getNextToken(++length);\n if (token === null) {\n // u <number-token> <eof>\n return length;\n }\n\n if (token.type === Dimension || token.type === NumberToken) {\n // u <number-token> <dimension-token>\n // u <number-token> <number-token>\n if (!startsWith(token, HYPHENMINUS) || !hexSequence(token, 1, false)) {\n return 0;\n }\n\n return length + 1;\n }\n\n // u <number-token> '?'*\n return withQuestionMarkSequence(consumedHexLength, length, getNextToken);\n }\n\n // u <dimension-token> '?'*\n if (token.type === Dimension) {\n return withQuestionMarkSequence(hexSequence(token, 1, true), ++length, getNextToken);\n }\n\n return 0;\n};\n","import { cssWideKeywords } from './generic-const.js';\nimport anPlusB from './generic-an-plus-b.js';\nimport urange from './generic-urange.js';\nimport {\n isIdentifierStart,\n isHexDigit,\n isDigit,\n cmpStr,\n consumeNumber,\n\n Ident,\n Function as FunctionToken,\n AtKeyword,\n Hash,\n String as StringToken,\n BadString,\n Url,\n BadUrl,\n Delim,\n Number as NumberToken,\n Percentage,\n Dimension,\n WhiteSpace,\n CDO,\n CDC,\n Colon,\n Semicolon,\n Comma,\n LeftSquareBracket,\n RightSquareBracket,\n LeftParenthesis,\n RightParenthesis,\n LeftCurlyBracket,\n RightCurlyBracket\n} from '../tokenizer/index.js';\n\n// CSS mathematical functions categorized by return type behavior\n// See: https://www.w3.org/TR/css-values-4/#math\n\n// Calculation functions that return different types depending on input\nconst calcFunctionNames = [\n 'calc(',\n '-moz-calc(',\n '-webkit-calc('\n];\n\n// Comparison functions that return different types depending on input\nconst comparisonFunctionNames = [\n 'min(',\n 'max(',\n 'clamp('\n];\n\n// Functions that return a stepped value, i.e. a value that is rounded to the nearest step\nconst steppedValueFunctionNames = [\n 'round(',\n 'mod(',\n 'rem('\n];\n\n// Trigonometrical functions that return a <number>\nconst trigNumberFunctionNames = [\n 'sin(',\n 'cos(',\n 'tan('\n];\n\n// Trigonometrical functions that return a <angle>\nconst trigAngleFunctionNames = [\n 'asin(',\n 'acos(',\n 'atan(',\n 'atan2('\n];\n\n// Other functions that return a <number>\nconst otherNumberFunctionNames = [\n 'pow(',\n 'sqrt(',\n 'log(',\n 'exp(',\n 'sign('\n];\n\n// Exponential functions that return a <number> or <dimension> or <percentage>\nconst expNumberDimensionPercentageFunctionNames = [\n 'hypot('\n];\n\n// Return the same type as the input\nconst signFunctionNames = [\n 'abs('\n];\n\nconst numberFunctionNames = [\n ...calcFunctionNames,\n ...comparisonFunctionNames,\n ...steppedValueFunctionNames,\n ...trigNumberFunctionNames,\n ...otherNumberFunctionNames,\n ...expNumberDimensionPercentageFunctionNames,\n ...signFunctionNames\n];\n\nconst percentageFunctionNames = [\n ...calcFunctionNames,\n ...comparisonFunctionNames,\n ...steppedValueFunctionNames,\n ...expNumberDimensionPercentageFunctionNames,\n ...signFunctionNames\n];\n\nconst dimensionFunctionNames = [\n ...calcFunctionNames,\n ...comparisonFunctionNames,\n ...steppedValueFunctionNames,\n ...trigAngleFunctionNames,\n ...expNumberDimensionPercentageFunctionNames,\n ...signFunctionNames\n];\n\nconst balancePair = new Map([\n [FunctionToken, RightParenthesis],\n [LeftParenthesis, RightParenthesis],\n [LeftSquareBracket, RightSquareBracket],\n [LeftCurlyBracket, RightCurlyBracket]\n]);\n\n// safe char code getter\nfunction charCodeAt(str, index) {\n return index < str.length ? str.charCodeAt(index) : 0;\n}\n\nfunction eqStr(actual, expected) {\n return cmpStr(actual, 0, actual.length, expected);\n}\n\nfunction eqStrAny(actual, expected) {\n for (let i = 0; i < expected.length; i++) {\n if (eqStr(actual, expected[i])) {\n return true;\n }\n }\n\n return false;\n}\n\n// IE postfix hack, i.e. 123\\0 or 123px\\9\nfunction isPostfixIeHack(str, offset) {\n if (offset !== str.length - 2) {\n return false;\n }\n\n return (\n charCodeAt(str, offset) === 0x005C && // U+005C REVERSE SOLIDUS (\\)\n isDigit(charCodeAt(str, offset + 1))\n );\n}\n\nfunction outOfRange(opts, value, numEnd) {\n if (opts && opts.type === 'Range') {\n const num = Number(\n numEnd !== undefined && numEnd !== value.length\n ? value.substr(0, numEnd)\n : value\n );\n\n if (isNaN(num)) {\n return true;\n }\n\n // FIXME: when opts.min is a string it's a dimension, skip a range validation\n // for now since it requires a type covertation which is not implmented yet\n if (opts.min !== null && num < opts.min && typeof opts.min !== 'string') {\n return true;\n }\n\n // FIXME: when opts.max is a string it's a dimension, skip a range validation\n // for now since it requires a type covertation which is not implmented yet\n if (opts.max !== null && num > opts.max && typeof opts.max !== 'string') {\n return true;\n }\n }\n\n return false;\n}\n\nfunction consumeFunction(token, getNextToken) {\n let balanceCloseType = 0;\n let balanceStash = [];\n let length = 0;\n\n // balanced token consuming\n scan:\n do {\n switch (token.type) {\n case RightCurlyBracket:\n case RightParenthesis:\n case RightSquareBracket:\n if (token.type !== balanceCloseType) {\n break scan;\n }\n\n balanceCloseType = balanceStash.pop();\n\n if (balanceStash.length === 0) {\n length++;\n break scan;\n }\n\n break;\n\n case FunctionToken:\n case LeftParenthesis:\n case LeftSquareBracket:\n case LeftCurlyBracket:\n balanceStash.push(balanceCloseType);\n balanceCloseType = balancePair.get(token.type);\n break;\n }\n\n length++;\n } while (token = getNextToken(length));\n\n return length;\n}\n\n\n// TODO: implement\n// can be used wherever <length>, <frequency>, <angle>, <time>, <percentage>, <number>, or <integer> values are allowed\n// https://drafts.csswg.org/css-values/#calc-notation\nfunction math(next, functionNames) {\n return function(token, getNextToken, opts) {\n if (token === null) {\n return 0;\n }\n\n if (token.type === FunctionToken && eqStrAny(token.value, functionNames)) {\n return consumeFunction(token, getNextToken);\n }\n\n return next(token, getNextToken, opts);\n };\n}\n\nfunction tokenType(expectedTokenType) {\n return function(token) {\n if (token === null || token.type !== expectedTokenType) {\n return 0;\n }\n\n return 1;\n };\n}\n\n// =========================\n// Complex types\n//\n\n// https://drafts.csswg.org/css-values-4/#custom-idents\n// 4.2. Author-defined Identifiers: the <custom-ident> type\n// Some properties accept arbitrary author-defined identifiers as a component value.\n// This generic data type is denoted by <custom-ident>, and represents any valid CSS identifier\n// that would not be misinterpreted as a pre-defined keyword in that property’s value definition.\n//\n// See also: https://developer.mozilla.org/en-US/docs/Web/CSS/custom-ident\nfunction customIdent(token) {\n if (token === null || token.type !== Ident) {\n return 0;\n }\n\n const name = token.value.toLowerCase();\n\n // The CSS-wide keywords are not valid <custom-ident>s\n if (eqStrAny(name, cssWideKeywords)) {\n return 0;\n }\n\n // The default keyword is reserved and is also not a valid <custom-ident>\n if (eqStr(name, 'default')) {\n return 0;\n }\n\n // TODO: ignore property specific keywords (as described https://developer.mozilla.org/en-US/docs/Web/CSS/custom-ident)\n // Specifications using <custom-ident> must specify clearly what other keywords\n // are excluded from <custom-ident>, if any—for example by saying that any pre-defined keywords\n // in that property’s value definition are excluded. Excluded keywords are excluded\n // in all ASCII case permutations.\n\n return 1;\n}\n\n// https://drafts.csswg.org/css-values-4/#dashed-idents\n// The <dashed-ident> production is a <custom-ident>, with all the case-sensitivity that implies,\n// with the additional restriction that it must start with two dashes (U+002D HYPHEN-MINUS).\nfunction dashedIdent(token) {\n if (token === null || token.type !== Ident) {\n return 0;\n }\n\n // ... must start with two dashes (U+002D HYPHEN-MINUS)\n if (charCodeAt(token.value, 0) !== 0x002D || charCodeAt(token.value, 1) !== 0x002D) {\n return 0;\n }\n\n return 1;\n}\n\n// https://drafts.csswg.org/css-variables/#typedef-custom-property-name\n// A custom property is any property whose name starts with two dashes (U+002D HYPHEN-MINUS), like --foo.\n// The <custom-property-name> production corresponds to this: it’s defined as any <dashed-ident>\n// (a valid identifier that starts with two dashes), except -- itself, which is reserved for future use by CSS.\nfunction customPropertyName(token) {\n // ... it’s defined as any <dashed-ident>\n if (!dashedIdent(token)) {\n return 0;\n }\n\n // ... except -- itself, which is reserved for future use by CSS\n if (token.value === '--') {\n return 0;\n }\n\n return 1;\n}\n\n// https://drafts.csswg.org/css-color-4/#hex-notation\n// The syntax of a <hex-color> is a <hash-token> token whose value consists of 3, 4, 6, or 8 hexadecimal digits.\n// In other words, a hex color is written as a hash character, \"#\", followed by some number of digits 0-9 or\n// letters a-f (the case of the letters doesn’t matter - #00ff00 is identical to #00FF00).\nfunction hexColor(token) {\n if (token === null || token.type !== Hash) {\n return 0;\n }\n\n const length = token.value.length;\n\n // valid values (length): #rgb (4), #rgba (5), #rrggbb (7), #rrggbbaa (9)\n if (length !== 4 && length !== 5 && length !== 7 && length !== 9) {\n return 0;\n }\n\n for (let i = 1; i < length; i++) {\n if (!isHexDigit(charCodeAt(token.value, i))) {\n return 0;\n }\n }\n\n return 1;\n}\n\nfunction idSelector(token) {\n if (token === null || token.type !== Hash) {\n return 0;\n }\n\n if (!isIdentifierStart(charCodeAt(token.value, 1), charCodeAt(token.value, 2), charCodeAt(token.value, 3))) {\n return 0;\n }\n\n return 1;\n}\n\n// https://drafts.csswg.org/css-syntax/#any-value\n// It represents the entirety of what a valid declaration can have as its value.\nfunction declarationValue(token, getNextToken) {\n if (!token) {\n return 0;\n }\n\n let balanceCloseType = 0;\n let balanceStash = [];\n let length = 0;\n\n // The <declaration-value> production matches any sequence of one or more tokens,\n // so long as the sequence does not contain ...\n scan:\n do {\n switch (token.type) {\n // ... <bad-string-token>, <bad-url-token>,\n case BadString:\n case BadUrl:\n break scan;\n\n // ... unmatched <)-token>, <]-token>, or <}-token>,\n case RightCurlyBracket:\n case RightParenthesis:\n case RightSquareBracket:\n if (token.type !== balanceCloseType) {\n break scan;\n }\n\n balanceCloseType = balanceStash.pop();\n break;\n\n // ... or top-level <semicolon-token> tokens\n case Semicolon:\n if (balanceCloseType === 0) {\n break scan;\n }\n\n break;\n\n // ... or <delim-token> tokens with a value of \"!\"\n case Delim:\n if (balanceCloseType === 0 && token.value === '!') {\n break scan;\n }\n\n break;\n\n case FunctionToken:\n case LeftParenthesis:\n case LeftSquareBracket:\n case LeftCurlyBracket:\n balanceStash.push(balanceCloseType);\n balanceCloseType = balancePair.get(token.type);\n break;\n }\n\n length++;\n } while (token = getNextToken(length));\n\n return length;\n}\n\n// https://drafts.csswg.org/css-syntax/#any-value\n// The <any-value> production is identical to <declaration-value>, but also\n// allows top-level <semicolon-token> tokens and <delim-token> tokens\n// with a value of \"!\". It represents the entirety of what valid CSS can be in any context.\nfunction anyValue(token, getNextToken) {\n if (!token) {\n return 0;\n }\n\n let balanceCloseType = 0;\n let balanceStash = [];\n let length = 0;\n\n // The <any-value> production matches any sequence of one or more tokens,\n // so long as the sequence ...\n scan:\n do {\n switch (token.type) {\n // ... does not contain <bad-string-token>, <bad-url-token>,\n case BadString:\n case BadUrl:\n break scan;\n\n // ... unmatched <)-token>, <]-token>, or <}-token>,\n case RightCurlyBracket:\n case RightParenthesis:\n case RightSquareBracket:\n if (token.type !== balanceCloseType) {\n break scan;\n }\n\n balanceCloseType = balanceStash.pop();\n break;\n\n case FunctionToken:\n case LeftParenthesis:\n case LeftSquareBracket:\n case LeftCurlyBracket:\n balanceStash.push(balanceCloseType);\n balanceCloseType = balancePair.get(token.type);\n break;\n }\n\n length++;\n } while (token = getNextToken(length));\n\n return length;\n}\n\n// =========================\n// Dimensions\n//\n\nfunction dimension(type) {\n if (type) {\n type = new Set(type);\n }\n\n return function(token, getNextToken, opts) {\n if (token === null || token.type !== Dimension) {\n return 0;\n }\n\n const numberEnd = consumeNumber(token.value, 0);\n\n // check unit\n if (type !== null) {\n // check for IE postfix hack, i.e. 123px\\0 or 123px\\9\n const reverseSolidusOffset = token.value.indexOf('\\\\', numberEnd);\n const unit = reverseSolidusOffset === -1 || !isPostfixIeHack(token.value, reverseSolidusOffset)\n ? token.value.substr(numberEnd)\n : token.value.substring(numberEnd, reverseSolidusOffset);\n\n if (type.has(unit.toLowerCase()) === false) {\n return 0;\n }\n }\n\n // check range if specified\n if (outOfRange(opts, token.value, numberEnd)) {\n return 0;\n }\n\n return 1;\n };\n}\n\n// =========================\n// Percentage\n//\n\n// §5.5. Percentages: the <percentage> type\n// https://drafts.csswg.org/css-values-4/#percentages\nfunction percentage(token, getNextToken, opts) {\n // ... corresponds to the <percentage-token> production\n if (token === null || token.type !== Percentage) {\n return 0;\n }\n\n // check range if specified\n if (outOfRange(opts, token.value, token.value.length - 1)) {\n return 0;\n }\n\n return 1;\n}\n\n// =========================\n// Numeric\n//\n\n// https://drafts.csswg.org/css-values-4/#numbers\n// The value <zero> represents a literal number with the value 0. Expressions that merely\n// evaluate to a <number> with the value 0 (for example, calc(0)) do not match <zero>;\n// only literal <number-token>s do.\nfunction zero(next) {\n if (typeof next !== 'function') {\n next = function() {\n return 0;\n };\n }\n\n return function(token, getNextToken, opts) {\n if (token !== null && token.type === NumberToken) {\n if (Number(token.value) === 0) {\n return 1;\n }\n }\n\n return next(token, getNextToken, opts);\n };\n}\n\n// § 5.3. Real Numbers: the <number> type\n// https://drafts.csswg.org/css-values-4/#numbers\n// Number values are denoted by <number>, and represent real numbers, possibly with a fractional component.\n// ... It corresponds to the <number-token> production\nfunction number(token, getNextToken, opts) {\n if (token === null) {\n return 0;\n }\n\n const numberEnd = consumeNumber(token.value, 0);\n const isNumber = numberEnd === token.value.length;\n if (!isNumber && !isPostfixIeHack(token.value, numberEnd)) {\n return 0;\n }\n\n // check range if specified\n if (outOfRange(opts, token.value, numberEnd)) {\n return 0;\n }\n\n return 1;\n}\n\n// §5.2. Integers: the <integer> type\n// https://drafts.csswg.org/css-values-4/#integers\nfunction integer(token, getNextToken, opts) {\n // ... corresponds to a subset of the <number-token> production\n if (token === null || token.type !== NumberToken) {\n return 0;\n }\n\n // The first digit of an integer may be immediately preceded by `-` or `+` to indicate the integer’s sign.\n let i = charCodeAt(token.value, 0) === 0x002B || // U+002B PLUS SIGN (+)\n charCodeAt(token.value, 0) === 0x002D ? 1 : 0; // U+002D HYPHEN-MINUS (-)\n\n // When written literally, an integer is one or more decimal digits 0 through 9 ...\n for (; i < token.value.length; i++) {\n if (!isDigit(charCodeAt(token.value, i))) {\n return 0;\n }\n }\n\n // check range if specified\n if (outOfRange(opts, token.value, i)) {\n return 0;\n }\n\n return 1;\n}\n\n// token types\nexport const tokenTypes = {\n 'ident-token': tokenType(Ident),\n 'function-token': tokenType(FunctionToken),\n 'at-keyword-token': tokenType(AtKeyword),\n 'hash-token': tokenType(Hash),\n 'string-token': tokenType(StringToken),\n 'bad-string-token': tokenType(BadString),\n 'url-token': tokenType(Url),\n 'bad-url-token': tokenType(BadUrl),\n 'delim-token': tokenType(Delim),\n 'number-token': tokenType(NumberToken),\n 'percentage-token': tokenType(Percentage),\n 'dimension-token': tokenType(Dimension),\n 'whitespace-token': tokenType(WhiteSpace),\n 'CDO-token': tokenType(CDO),\n 'CDC-token': tokenType(CDC),\n 'colon-token': tokenType(Colon),\n 'semicolon-token': tokenType(Semicolon),\n 'comma-token': tokenType(Comma),\n '[-token': tokenType(LeftSquareBracket),\n ']-token': tokenType(RightSquareBracket),\n '(-token': tokenType(LeftParenthesis),\n ')-token': tokenType(RightParenthesis),\n '{-token': tokenType(LeftCurlyBracket),\n '}-token': tokenType(RightCurlyBracket)\n};\n\n// token production types\nexport const productionTypes = {\n // token type aliases\n 'string': tokenType(StringToken),\n 'ident': tokenType(Ident),\n\n // percentage\n 'percentage': math(percentage, percentageFunctionNames),\n\n // numeric\n 'zero': zero(),\n 'number': math(number, numberFunctionNames),\n 'integer': math(integer, numberFunctionNames),\n\n // complex types\n 'custom-ident': customIdent,\n 'dashed-ident': dashedIdent,\n 'custom-property-name': customPropertyName,\n 'hex-color': hexColor,\n 'id-selector': idSelector, // element( <id-selector> )\n 'an-plus-b': anPlusB,\n 'urange': urange,\n 'declaration-value': declarationValue,\n 'any-value': anyValue\n};\n\nexport const unitGroups = [\n 'length',\n 'angle',\n 'time',\n 'frequency',\n 'resolution',\n 'flex',\n 'decibel',\n 'semitones'\n];\n\n// dimensions types depend on units set\nexport function createDemensionTypes(units) {\n const {\n angle,\n decibel,\n frequency,\n flex,\n length,\n resolution,\n semitones,\n time\n } = units || {};\n\n return {\n 'dimension': math(dimension(null), dimensionFunctionNames),\n 'angle': math(dimension(angle), dimensionFunctionNames),\n 'decibel': math(dimension(decibel), dimensionFunctionNames),\n 'frequency': math(dimension(frequency), dimensionFunctionNames),\n 'flex': math(dimension(flex), dimensionFunctionNames),\n 'length': math(zero(dimension(length)), dimensionFunctionNames),\n 'resolution': math(dimension(resolution), dimensionFunctionNames),\n 'semitones': math(dimension(semitones), dimensionFunctionNames),\n 'time': math(dimension(time), dimensionFunctionNames)\n };\n}\n\n// The <attr-unit> production matches any identifier that is an ASCII case-insensitive\n// match for the name of a CSS dimension unit, such as px, or the <delim-token> %.\nfunction createAttrUnit(units) {\n const unitSet = new Set();\n\n for (const group of unitGroups) {\n if (Array.isArray(units[group])) {\n for (const unit of units[group]) {\n unitSet.add(unit.toLowerCase());\n }\n }\n }\n\n return function attrUnit(token) {\n if (token === null) {\n return 0;\n }\n\n if (token.type === Delim && token.value === '%') {\n return 1;\n }\n\n if (token.type === Ident && unitSet.has(token.value.toLowerCase())) {\n return 1;\n }\n\n return 0;\n };\n}\n\nexport function createGenericTypes(units) {\n return {\n ...tokenTypes,\n ...productionTypes,\n ...createDemensionTypes(units),\n 'attr-unit': createAttrUnit(units)\n };\n};\n","export const length = [\n // absolute length units https://www.w3.org/TR/css-values-3/#lengths\n 'cm', 'mm', 'q', 'in', 'pt', 'pc', 'px',\n // font-relative length units https://drafts.csswg.org/css-values-4/#font-relative-lengths\n 'em', 'rem',\n 'ex', 'rex',\n 'cap', 'rcap',\n 'ch', 'rch',\n 'ic', 'ric',\n 'lh', 'rlh',\n // viewport-percentage lengths https://drafts.csswg.org/css-values-4/#viewport-relative-lengths\n 'vw', 'svw', 'lvw', 'dvw',\n 'vh', 'svh', 'lvh', 'dvh',\n 'vi', 'svi', 'lvi', 'dvi',\n 'vb', 'svb', 'lvb', 'dvb',\n 'vmin', 'svmin', 'lvmin', 'dvmin',\n 'vmax', 'svmax', 'lvmax', 'dvmax',\n // container relative lengths https://drafts.csswg.org/css-contain-3/#container-lengths\n 'cqw', 'cqh', 'cqi', 'cqb', 'cqmin', 'cqmax'\n];\nexport const angle = ['deg', 'grad', 'rad', 'turn']; // https://www.w3.org/TR/css-values-3/#angles\nexport const time = ['s', 'ms']; // https://www.w3.org/TR/css-values-3/#time\nexport const frequency = ['hz', 'khz']; // https://www.w3.org/TR/css-values-3/#frequency\nexport const resolution = ['dpi', 'dpcm', 'dppx', 'x']; // https://www.w3.org/TR/css-values-3/#resolution\nexport const flex = ['fr']; // https://drafts.csswg.org/css-grid/#fr-unit\nexport const decibel = ['db']; // https://www.w3.org/TR/css3-speech/#mixing-props-voice-volume\nexport const semitones = ['st']; // https://www.w3.org/TR/css3-speech/#voice-props-voice-pitch\n","import { createCustomError } from '../utils/create-custom-error.js';\n\nexport function SyntaxError(message, input, offset) {\n return Object.assign(createCustomError('SyntaxError', message), {\n input,\n offset,\n rawMessage: message,\n message: message + '\\n' +\n ' ' + input + '\\n' +\n '--' + new Array((offset || input.length) + 1).join('-') + '^'\n });\n};\n","import { SyntaxError } from './SyntaxError.js';\n\nconst TAB = 9;\nconst N = 10;\nconst F = 12;\nconst R = 13;\nconst SPACE = 32;\nconst NAME_CHAR = new Uint8Array(128).map((_, idx) =>\n /[a-zA-Z0-9\\-]/.test(String.fromCharCode(idx)) ? 1 : 0\n);\n\nexport class Scanner {\n constructor(str) {\n this.str = str;\n this.pos = 0;\n }\n\n charCodeAt(pos) {\n return pos < this.str.length ? this.str.charCodeAt(pos) : 0;\n }\n charCode() {\n return this.charCodeAt(this.pos);\n }\n isNameCharCode(code = this.charCode()) {\n return code < 128 && NAME_CHAR[code] === 1;\n }\n nextCharCode() {\n return this.charCodeAt(this.pos + 1);\n }\n nextNonWsCode(pos) {\n return this.charCodeAt(this.findWsEnd(pos));\n }\n skipWs() {\n this.pos = this.findWsEnd(this.pos);\n }\n findWsEnd(pos) {\n for (; pos < this.str.length; pos++) {\n const code = this.str.charCodeAt(pos);\n if (code !== R && code !== N && code !== F && code !== SPACE && code !== TAB) {\n break;\n }\n }\n\n return pos;\n }\n substringToPos(end) {\n return this.str.substring(this.pos, this.pos = end);\n }\n eat(code) {\n if (this.charCode() !== code) {\n this.error('Expect `' + String.fromCharCode(code) + '`');\n }\n\n this.pos++;\n }\n peek() {\n return this.pos < this.str.length ? this.str.charAt(this.pos++) : '';\n }\n error(message) {\n throw new SyntaxError(message, this.str, this.pos);\n }\n\n scanSpaces() {\n return this.substringToPos(this.findWsEnd(this.pos));\n }\n scanWord() {\n let end = this.pos;\n\n for (; end < this.str.length; end++) {\n const code = this.str.charCodeAt(end);\n if (code >= 128 || NAME_CHAR[code] === 0) {\n break;\n }\n }\n\n if (this.pos === end) {\n this.error('Expect a keyword');\n }\n\n return this.substringToPos(end);\n }\n scanNumber() {\n let end = this.pos;\n\n for (; end < this.str.length; end++) {\n const code = this.str.charCodeAt(end);\n\n if (code < 48 || code > 57) {\n break;\n }\n }\n\n if (this.pos === end) {\n this.error('Expect a number');\n }\n\n return this.substringToPos(end);\n }\n scanString() {\n const end = this.str.indexOf('\\'', this.pos + 1);\n\n if (end === -1) {\n this.pos = this.str.length;\n this.error('Expect an apostrophe');\n }\n\n return this.substringToPos(end + 1);\n }\n};\n","import { Scanner } from './scanner.js';\n\nconst TAB = 9;\nconst N = 10;\nconst F = 12;\nconst R = 13;\nconst SPACE = 32;\nconst EXCLAMATIONMARK = 33; // !\nconst NUMBERSIGN = 35; // #\nconst AMPERSAND = 38; // &\nconst APOSTROPHE = 39; // '\nconst LEFTPARENTHESIS = 40; // (\nconst RIGHTPARENTHESIS = 41; // )\nconst ASTERISK = 42; // *\nconst PLUSSIGN = 43; // +\nconst COMMA = 44; // ,\nconst HYPERMINUS = 45; // -\nconst LESSTHANSIGN = 60; // <\nconst GREATERTHANSIGN = 62; // >\nconst QUESTIONMARK = 63; // ?\nconst COMMERCIALAT = 64; // @\nconst LEFTSQUAREBRACKET = 91; // [\nconst RIGHTSQUAREBRACKET = 93; // ]\nconst LEFTCURLYBRACKET = 123; // {\nconst VERTICALLINE = 124; // |\nconst RIGHTCURLYBRACKET = 125; // }\nconst INFINITY = 8734; // ∞\nconst COMBINATOR_PRECEDENCE = {\n ' ': 1,\n '&&': 2,\n '||': 3,\n '|': 4\n};\n\nfunction readMultiplierRange(scanner) {\n let min = null;\n let max = null;\n\n scanner.eat(LEFTCURLYBRACKET);\n scanner.skipWs();\n\n min = scanner.scanNumber(scanner);\n scanner.skipWs();\n\n if (scanner.charCode() === COMMA) {\n scanner.pos++;\n scanner.skipWs();\n\n if (scanner.charCode() !== RIGHTCURLYBRACKET) {\n max = scanner.scanNumber(scanner);\n scanner.skipWs();\n }\n } else {\n max = min;\n }\n\n scanner.eat(RIGHTCURLYBRACKET);\n\n return {\n min: Number(min),\n max: max ? Number(max) : 0\n };\n}\n\nfunction readMultiplier(scanner) {\n let range = null;\n let comma = false;\n\n switch (scanner.charCode()) {\n case ASTERISK:\n scanner.pos++;\n\n range = {\n min: 0,\n max: 0\n };\n\n break;\n\n case PLUSSIGN:\n scanner.pos++;\n\n range = {\n min: 1,\n max: 0\n };\n\n break;\n\n case QUESTIONMARK:\n scanner.pos++;\n\n range = {\n min: 0,\n max: 1\n };\n\n break;\n\n case NUMBERSIGN:\n scanner.pos++;\n\n comma = true;\n\n if (scanner.charCode() === LEFTCURLYBRACKET) {\n range = readMultiplierRange(scanner);\n } else if (scanner.charCode() === QUESTIONMARK) {\n // https://www.w3.org/TR/css-values-4/#component-multipliers\n // > the # and ? multipliers may be stacked as #?\n // In this case just treat \"#?\" as a single multiplier\n // { min: 0, max: 0, comma: true }\n scanner.pos++;\n range = {\n min: 0,\n max: 0\n };\n } else {\n range = {\n min: 1,\n max: 0\n };\n }\n\n break;\n\n case LEFTCURLYBRACKET:\n range = readMultiplierRange(scanner);\n break;\n\n default:\n return null;\n }\n\n return {\n type: 'Multiplier',\n comma,\n min: range.min,\n max: range.max,\n term: null\n };\n}\n\nfunction maybeMultiplied(scanner, node) {\n const multiplier = readMultiplier(scanner);\n\n if (multiplier !== null) {\n multiplier.term = node;\n\n // https://www.w3.org/TR/css-values-4/#component-multipliers\n // > The + and # multipliers may be stacked as +#;\n // Represent \"+#\" as nested multipliers:\n // { ...<multiplier #>,\n // term: {\n // ...<multipler +>,\n // term: node\n // }\n // }\n if (scanner.charCode() === NUMBERSIGN &&\n scanner.charCodeAt(scanner.pos - 1) === PLUSSIGN) {\n return maybeMultiplied(scanner, multiplier);\n }\n\n // https://www.w3.org/TR/css-values-4/#component-multipliers\n // > the # and ? multipliers, {A} and ? multipliers, and {A,B} and ? multipliers\n // > may be stacked as #?, {A}?, and {A,B}?, respectively\n // Represent \"{}?\" as nested multipliers as well as \"+#\".\n // The \"#?\" case is already handled above, in maybeMultiplied()\n if (scanner.charCode() === QUESTIONMARK &&\n scanner.charCodeAt(scanner.pos - 1) === RIGHTCURLYBRACKET) {\n return maybeMultiplied(scanner, multiplier);\n }\n\n return multiplier;\n }\n\n return node;\n}\n\nfunction maybeToken(scanner) {\n const ch = scanner.peek();\n\n if (ch === '') {\n return null;\n }\n\n return maybeMultiplied(scanner, {\n type: 'Token',\n value: ch\n });\n}\n\nfunction readProperty(scanner) {\n let name;\n\n scanner.eat(LESSTHANSIGN);\n scanner.eat(APOSTROPHE);\n\n name = scanner.scanWord();\n\n scanner.eat(APOSTROPHE);\n scanner.eat(GREATERTHANSIGN);\n\n return maybeMultiplied(scanner, {\n type: 'Property',\n name\n });\n}\n\n// https://drafts.csswg.org/css-values-3/#numeric-ranges\n// 4.1. Range Restrictions and Range Definition Notation\n//\n// Range restrictions can be annotated in the numeric type notation using CSS bracketed\n// range notation—[min,max]—within the angle brackets, after the identifying keyword,\n// indicating a closed range between (and including) min and max.\n// For example, <integer [0, 10]> indicates an integer between 0 and 10, inclusive.\nfunction readTypeRange(scanner) {\n // use null for Infinity to make AST format JSON serializable/deserializable\n let min = null; // -Infinity\n let max = null; // Infinity\n let sign = 1;\n\n scanner.eat(LEFTSQUAREBRACKET);\n\n if (scanner.charCode() === HYPERMINUS) {\n scanner.peek();\n sign = -1;\n }\n\n if (sign == -1 && scanner.charCode() === INFINITY) {\n scanner.peek();\n } else {\n min = sign * Number(scanner.scanNumber(scanner));\n\n if (scanner.isNameCharCode()) {\n min += scanner.scanWord();\n }\n }\n\n scanner.skipWs();\n scanner.eat(COMMA);\n scanner.skipWs();\n\n if (scanner.charCode() === INFINITY) {\n scanner.peek();\n } else {\n sign = 1;\n\n if (scanner.charCode() === HYPERMINUS) {\n scanner.peek();\n sign = -1;\n }\n\n max = sign * Number(scanner.scanNumber(scanner));\n\n if (scanner.isNameCharCode()) {\n max += scanner.scanWord();\n }\n }\n\n scanner.eat(RIGHTSQUAREBRACKET);\n\n return {\n type: 'Range',\n min,\n max\n };\n}\n\nfunction readType(scanner) {\n let name;\n let opts = null;\n\n scanner.eat(LESSTHANSIGN);\n name = scanner.scanWord();\n\n // https://drafts.csswg.org/css-values-5/#boolean\n if (name === 'boolean-expr') {\n scanner.eat(LEFTSQUAREBRACKET);\n\n const implicitGroup = readImplicitGroup(scanner, RIGHTSQUAREBRACKET);\n\n scanner.eat(RIGHTSQUAREBRACKET);\n scanner.eat(GREATERTHANSIGN);\n\n return maybeMultiplied(scanner, {\n type: 'Boolean',\n term: implicitGroup.terms.length === 1\n ? implicitGroup.terms[0]\n : implicitGroup\n });\n }\n\n if (scanner.charCode() === LEFTPARENTHESIS &&\n scanner.nextCharCode() === RIGHTPARENTHESIS) {\n scanner.pos += 2;\n name += '()';\n }\n\n if (scanner.charCodeAt(scanner.findWsEnd(scanner.pos)) === LEFTSQUAREBRACKET) {\n scanner.skipWs();\n opts = readTypeRange(scanner);\n }\n\n scanner.eat(GREATERTHANSIGN);\n\n return maybeMultiplied(scanner, {\n type: 'Type',\n name,\n opts\n });\n}\n\nfunction readKeywordOrFunction(scanner) {\n const name = scanner.scanWord();\n\n if (scanner.charCode() === LEFTPARENTHESIS) {\n scanner.pos++;\n\n return {\n type: 'Function',\n name\n };\n }\n\n return maybeMultiplied(scanner, {\n type: 'Keyword',\n name\n });\n}\n\nfunction regroupTerms(terms, combinators) {\n function createGroup(terms, combinator) {\n return {\n type: 'Group',\n terms,\n combinator,\n disallowEmpty: false,\n explicit: false\n };\n }\n\n let combinator;\n\n combinators = Object.keys(combinators)\n .sort((a, b) => COMBINATOR_PRECEDENCE[a] - COMBINATOR_PRECEDENCE[b]);\n\n while (combinators.length > 0) {\n combinator = combinators.shift();\n\n let i = 0;\n let subgroupStart = 0;\n\n for (; i < terms.length; i++) {\n const term = terms[i];\n\n if (term.type === 'Combinator') {\n if (term.value === combinator) {\n if (subgroupStart === -1) {\n subgroupStart = i - 1;\n }\n terms.splice(i, 1);\n i--;\n } else {\n if (subgroupStart !== -1 && i - subgroupStart > 1) {\n terms.splice(\n subgroupStart,\n i - subgroupStart,\n createGroup(terms.slice(subgroupStart, i), combinator)\n );\n i = subgroupStart + 1;\n }\n subgroupStart = -1;\n }\n }\n }\n\n if (subgroupStart !== -1 && combinators.length) {\n terms.splice(\n subgroupStart,\n i - subgroupStart,\n createGroup(terms.slice(subgroupStart, i), combinator)\n );\n }\n }\n\n return combinator;\n}\n\nfunction readImplicitGroup(scanner, stopCharCode = -1) {\n const combinators = Object.create(null);\n const terms = [];\n let prevToken = null;\n let prevTokenPos = scanner.pos;\n let prevTokenIsFunction = false;\n\n while (scanner.charCode() !== stopCharCode) {\n let token = prevTokenIsFunction\n ? readImplicitGroup(scanner, RIGHTPARENTHESIS)\n : peek(scanner);\n\n if (!token) {\n break;\n }\n\n if (token.type === 'Spaces') {\n continue;\n }\n\n if (prevTokenIsFunction) {\n if (token.terms.length === 0) {\n prevTokenIsFunction = false;\n continue;\n }\n\n if (token.combinator === ' ') {\n while (token.terms.length > 1) {\n combinators[' '] = true; // a b\n terms.push({\n type: 'Combinator',\n value: ' '\n }, token.terms.shift());\n }\n\n token = token.terms[0];\n }\n }\n\n if (token.type === 'Combinator') {\n // check for combinator in group beginning and double combinator sequence\n if (prevToken === null || prevToken.type === 'Combinator') {\n scanner.pos = prevTokenPos;\n scanner.error('Unexpected combinator');\n }\n\n combinators[token.value] = true;\n } else if (prevToken !== null && prevToken.type !== 'Combinator') {\n combinators[' '] = true; // a b\n terms.push({\n type: 'Combinator',\n value: ' '\n });\n }\n\n terms.push(token);\n prevToken = token;\n prevTokenPos = scanner.pos;\n prevTokenIsFunction = token.type === 'Function';\n }\n\n // check for combinator in group ending\n if (prevToken !== null && prevToken.type === 'Combinator') {\n scanner.pos -= prevTokenPos;\n scanner.error('Unexpected combinator');\n }\n\n return {\n type: 'Group',\n terms,\n combinator: regroupTerms(terms, combinators) || ' ',\n disallowEmpty: false,\n explicit: false\n };\n}\n\nfunction readGroup(scanner) {\n let result;\n\n scanner.eat(LEFTSQUAREBRACKET);\n result = readImplicitGroup(scanner, RIGHTSQUAREBRACKET);\n scanner.eat(RIGHTSQUAREBRACKET);\n\n result.explicit = true;\n\n if (scanner.charCode() === EXCLAMATIONMARK) {\n scanner.pos++;\n result.disallowEmpty = true;\n }\n\n return result;\n}\n\nfunction peek(scanner) {\n let code = scanner.charCode();\n\n switch (code) {\n case RIGHTSQUAREBRACKET:\n // don't eat, stop scan a group\n break;\n\n case LEFTSQUAREBRACKET:\n return maybeMultiplied(scanner, readGroup(scanner));\n\n case LESSTHANSIGN:\n return scanner.nextCharCode() === APOSTROPHE\n ? readProperty(scanner)\n : readType(scanner);\n\n case VERTICALLINE:\n return {\n type: 'Combinator',\n value: scanner.substringToPos(\n scanner.pos + (scanner.nextCharCode() === VERTICALLINE ? 2 : 1)\n )\n };\n\n case AMPERSAND:\n scanner.pos++;\n scanner.eat(AMPERSAND);\n\n return {\n type: 'Combinator',\n value: '&&'\n };\n\n case COMMA:\n scanner.pos++;\n return {\n type: 'Comma'\n };\n\n case APOSTROPHE:\n return maybeMultiplied(scanner, {\n type: 'String',\n value: scanner.scanString()\n });\n\n case SPACE:\n case TAB:\n case N:\n case R:\n case F:\n return {\n type: 'Spaces',\n value: scanner.scanSpaces()\n };\n\n case COMMERCIALAT:\n code = scanner.nextCharCode();\n\n if (scanner.isNameCharCode(code)) {\n scanner.pos++;\n return {\n type: 'AtKeyword',\n name: scanner.scanWord()\n };\n }\n\n return maybeToken(scanner);\n\n case ASTERISK:\n case PLUSSIGN:\n case QUESTIONMARK:\n case NUMBERSIGN:\n case EXCLAMATIONMARK:\n // prohibited tokens (used as a multiplier start)\n break;\n\n case LEFTCURLYBRACKET:\n // LEFTCURLYBRACKET is allowed since mdn/data uses it w/o quoting\n // check next char isn't a number, because it's likely a disjoined multiplier\n code = scanner.nextCharCode();\n\n if (code < 48 || code > 57) {\n return maybeToken(scanner);\n }\n\n break;\n\n default:\n if (scanner.isNameCharCode(code)) {\n return readKeywordOrFunction(scanner);\n }\n\n return maybeToken(scanner);\n }\n}\n\nexport function parse(source) {\n const scanner = new Scanner(source);\n const result = readImplicitGroup(scanner);\n\n if (scanner.pos !== source.length) {\n scanner.error('Unexpected input');\n }\n\n // reduce redundant groups with single group term\n if (result.terms.length === 1 && result.terms[0].type === 'Group') {\n return result.terms[0];\n }\n\n return result;\n};\n","const noop = function() {};\n\nfunction ensureFunction(value) {\n return typeof value === 'function' ? value : noop;\n}\n\nexport function walk(node, options, context) {\n function walk(node) {\n enter.call(context, node);\n\n switch (node.type) {\n case 'Group':\n node.terms.forEach(walk);\n break;\n\n case 'Multiplier':\n case 'Boolean':\n walk(node.term);\n break;\n\n case 'Type':\n case 'Property':\n case 'Keyword':\n case 'AtKeyword':\n case 'Function':\n case 'String':\n case 'Token':\n case 'Comma':\n break;\n\n default:\n throw new Error('Unknown type: ' + node.type);\n }\n\n leave.call(context, node);\n }\n\n let enter = noop;\n let leave = noop;\n\n if (typeof options === 'function') {\n enter = options;\n } else if (options) {\n enter = ensureFunction(options.enter);\n leave = ensureFunction(options.leave);\n }\n\n if (enter === noop && leave === noop) {\n throw new Error('Neither `enter` nor `leave` walker handler is set or both aren\\'t a function');\n }\n\n walk(node, context);\n};\n","import { tokenize } from '../tokenizer/index.js';\n\nconst astToTokens = {\n decorator(handlers) {\n const tokens = [];\n let curNode = null;\n\n return {\n ...handlers,\n node(node) {\n const tmp = curNode;\n curNode = node;\n handlers.node.call(this, node);\n curNode = tmp;\n },\n emit(value, type, auto) {\n tokens.push({\n type,\n value,\n node: auto ? null : curNode\n });\n },\n result() {\n return tokens;\n }\n };\n }\n};\n\nfunction stringToTokens(str) {\n const tokens = [];\n\n tokenize(str, (type, start, end) =>\n tokens.push({\n type,\n value: str.slice(start, end),\n node: null\n })\n );\n\n return tokens;\n}\n\nexport default function(value, syntax) {\n if (typeof value === 'string') {\n return stringToTokens(value);\n }\n\n return syntax.generate(value, astToTokens);\n};\n","import { parse } from '../definition-syntax/parse.js';\n\nexport const MATCH = { type: 'Match' };\nexport const MISMATCH = { type: 'Mismatch' };\nexport const DISALLOW_EMPTY = { type: 'DisallowEmpty' };\n\nconst LEFTPARENTHESIS = 40; // (\nconst RIGHTPARENTHESIS = 41; // )\n\nfunction createCondition(match, thenBranch, elseBranch) {\n // reduce node count\n if (thenBranch === MATCH && elseBranch === MISMATCH) {\n return match;\n }\n\n if (match === MATCH && thenBranch === MATCH && elseBranch === MATCH) {\n return match;\n }\n\n if (match.type === 'If' && match.else === MISMATCH && thenBranch === MATCH) {\n thenBranch = match.then;\n match = match.match;\n }\n\n return {\n type: 'If',\n match,\n then: thenBranch,\n else: elseBranch\n };\n}\n\nfunction isFunctionType(name) {\n return (\n name.length > 2 &&\n name.charCodeAt(name.length - 2) === LEFTPARENTHESIS &&\n name.charCodeAt(name.length - 1) === RIGHTPARENTHESIS\n );\n}\n\nfunction isEnumCapatible(term) {\n return (\n term.type === 'Keyword' ||\n term.type === 'AtKeyword' ||\n term.type === 'Function' ||\n term.type === 'Type' && isFunctionType(term.name)\n );\n}\n\nfunction groupNode(terms, combinator = ' ', explicit = false) {\n return {\n type: 'Group',\n terms,\n combinator,\n disallowEmpty: false,\n explicit\n };\n}\n\nfunction replaceTypeInGraph(node, replacements, visited = new Set()) {\n if (!visited.has(node)) {\n visited.add(node);\n\n switch (node.type) {\n case 'If':\n node.match = replaceTypeInGraph(node.match, replacements, visited);\n node.then = replaceTypeInGraph(node.then, replacements, visited);\n node.else = replaceTypeInGraph(node.else, replacements, visited);\n break;\n\n case 'Type':\n return replacements[node.name] || node;\n }\n }\n\n return node;\n}\n\nfunction buildGroupMatchGraph(combinator, terms, atLeastOneTermMatched) {\n switch (combinator) {\n case ' ': {\n // Juxtaposing components means that all of them must occur, in the given order.\n //\n // a b c\n // =\n // match a\n // then match b\n // then match c\n // then MATCH\n // else MISMATCH\n // else MISMATCH\n // else MISMATCH\n let result = MATCH;\n\n for (let i = terms.length - 1; i >= 0; i--) {\n const term = terms[i];\n\n result = createCondition(\n term,\n result,\n MISMATCH\n );\n };\n\n return result;\n }\n\n case '|': {\n // A bar (|) separates two or more alternatives: exactly one of them must occur.\n //\n // a | b | c\n // =\n // match a\n // then MATCH\n // else match b\n // then MATCH\n // else match c\n // then MATCH\n // else MISMATCH\n\n let result = MISMATCH;\n let map = null;\n\n for (let i = terms.length - 1; i >= 0; i--) {\n let term = terms[i];\n\n // reduce sequence of keywords into a Enum\n if (isEnumCapatible(term)) {\n if (map === null && i > 0 && isEnumCapatible(terms[i - 1])) {\n map = Object.create(null);\n result = createCondition(\n {\n type: 'Enum',\n map\n },\n MATCH,\n result\n );\n }\n\n if (map !== null) {\n const key = (isFunctionType(term.name) ? term.name.slice(0, -1) : term.name).toLowerCase();\n if (key in map === false) {\n map[key] = term;\n continue;\n }\n }\n }\n\n map = null;\n\n // create a new conditonal node\n result = createCondition(\n term,\n MATCH,\n result\n );\n };\n\n return result;\n }\n\n case '&&': {\n // A double ampersand (&&) separates two or more components,\n // all of which must occur, in any order.\n\n // Use MatchOnce for groups with a large number of terms,\n // since &&-groups produces at least N!-node trees\n if (terms.length > 5) {\n return {\n type: 'MatchOnce',\n terms,\n all: true\n };\n }\n\n // Use a combination tree for groups with small number of terms\n //\n // a && b && c\n // =\n // match a\n // then [b && c]\n // else match b\n // then [a && c]\n // else match c\n // then [a && b]\n // else MISMATCH\n //\n // a && b\n // =\n // match a\n // then match b\n // then MATCH\n // else MISMATCH\n // else match b\n // then match a\n // then MATCH\n // else MISMATCH\n // else MISMATCH\n let result = MISMATCH;\n\n for (let i = terms.length - 1; i >= 0; i--) {\n const term = terms[i];\n let thenClause;\n\n if (terms.length > 1) {\n thenClause = buildGroupMatchGraph(\n combinator,\n terms.filter(function(newGroupTerm) {\n return newGroupTerm !== term;\n }),\n false\n );\n } else {\n thenClause = MATCH;\n }\n\n result = createCondition(\n term,\n thenClause,\n result\n );\n };\n\n return result;\n }\n\n case '||': {\n // A double bar (||) separates two or more options:\n // one or more of them must occur, in any order.\n\n // Use MatchOnce for groups with a large number of terms,\n // since ||-groups produces at least N!-node trees\n if (terms.length > 5) {\n return {\n type: 'MatchOnce',\n terms,\n all: false\n };\n }\n\n // Use a combination tree for groups with small number of terms\n //\n // a || b || c\n // =\n // match a\n // then [b || c]\n // else match b\n // then [a || c]\n // else match c\n // then [a || b]\n // else MISMATCH\n //\n // a || b\n // =\n // match a\n // then match b\n // then MATCH\n // else MATCH\n // else match b\n // then match a\n // then MATCH\n // else MATCH\n // else MISMATCH\n let result = atLeastOneTermMatched ? MATCH : MISMATCH;\n\n for (let i = terms.length - 1; i >= 0; i--) {\n const term = terms[i];\n let thenClause;\n\n if (terms.length > 1) {\n thenClause = buildGroupMatchGraph(\n combinator,\n terms.filter(function(newGroupTerm) {\n return newGroupTerm !== term;\n }),\n true\n );\n } else {\n thenClause = MATCH;\n }\n\n result = createCondition(\n term,\n thenClause,\n result\n );\n };\n\n return result;\n }\n }\n}\n\nfunction buildMultiplierMatchGraph(node) {\n let result = MATCH;\n let matchTerm = buildMatchGraphInternal(node.term);\n\n if (node.max === 0) {\n // disable repeating of empty match to prevent infinite loop\n matchTerm = createCondition(\n matchTerm,\n DISALLOW_EMPTY,\n MISMATCH\n );\n\n // an occurrence count is not limited, make a cycle;\n // to collect more terms on each following matching mismatch\n result = createCondition(\n matchTerm,\n null, // will be a loop\n MISMATCH\n );\n\n result.then = createCondition(\n MATCH,\n MATCH,\n result // make a loop\n );\n\n if (node.comma) {\n result.then.else = createCondition(\n { type: 'Comma', syntax: node },\n result,\n MISMATCH\n );\n }\n } else {\n // create a match node chain for [min .. max] interval with optional matches\n for (let i = node.min || 1; i <= node.max; i++) {\n if (node.comma && result !== MATCH) {\n result = createCondition(\n { type: 'Comma', syntax: node },\n result,\n MISMATCH\n );\n }\n\n result = createCondition(\n matchTerm,\n createCondition(\n MATCH,\n MATCH,\n result\n ),\n MISMATCH\n );\n }\n }\n\n if (node.min === 0) {\n // allow zero match\n result = createCondition(\n MATCH,\n MATCH,\n result\n );\n } else {\n // create a match node chain to collect [0 ... min - 1] required matches\n for (let i = 0; i < node.min - 1; i++) {\n if (node.comma && result !== MATCH) {\n result = createCondition(\n { type: 'Comma', syntax: node },\n result,\n MISMATCH\n );\n }\n\n result = createCondition(\n matchTerm,\n result,\n MISMATCH\n );\n }\n }\n\n return result;\n}\n\nfunction buildMatchGraphInternal(node) {\n if (typeof node === 'function') {\n return {\n type: 'Generic',\n fn: node\n };\n }\n\n switch (node.type) {\n case 'Group': {\n let result = buildGroupMatchGraph(\n node.combinator,\n node.terms.map(buildMatchGraphInternal),\n false\n );\n\n if (node.disallowEmpty) {\n result = createCondition(\n result,\n DISALLOW_EMPTY,\n MISMATCH\n );\n }\n\n return result;\n }\n\n case 'Multiplier':\n return buildMultiplierMatchGraph(node);\n\n // https://drafts.csswg.org/css-values-5/#boolean\n case 'Boolean': {\n const term = buildMatchGraphInternal(node.term);\n // <boolean-expr[ <test> ]> = not <boolean-expr-group> | <boolean-expr-group> [ [ and <boolean-expr-group> ]* | [ or <boolean-expr-group> ]* ]\n const matchNode = buildMatchGraphInternal(groupNode([\n groupNode([\n { type: 'Keyword', name: 'not' },\n { type: 'Type', name: '!boolean-group' }\n ]),\n groupNode([\n { type: 'Type', name: '!boolean-group' },\n groupNode([\n { type: 'Multiplier', comma: false, min: 0, max: 0, term: groupNode([\n { type: 'Keyword', name: 'and' },\n { type: 'Type', name: '!boolean-group' }\n ]) },\n { type: 'Multiplier', comma: false, min: 0, max: 0, term: groupNode([\n { type: 'Keyword', name: 'or' },\n { type: 'Type', name: '!boolean-group' }\n ]) }\n ], '|')\n ])\n ], '|'));\n // <boolean-expr-group> = <test> | ( <boolean-expr[ <test> ]> ) | <general-enclosed>\n const booleanGroup = buildMatchGraphInternal(\n groupNode([\n { type: 'Type', name: '!term' },\n groupNode([\n { type: 'Token', value: '(' },\n { type: 'Type', name: '!self' },\n { type: 'Token', value: ')' }\n ]),\n { type: 'Type', name: 'general-enclosed' }\n ], '|')\n );\n\n replaceTypeInGraph(booleanGroup, { '!term': term, '!self': matchNode });\n replaceTypeInGraph(matchNode, { '!boolean-group': booleanGroup });\n\n return matchNode;\n }\n\n case 'Type':\n case 'Property':\n return {\n type: node.type,\n name: node.name,\n syntax: node\n };\n\n case 'Keyword':\n return {\n type: node.type,\n name: node.name.toLowerCase(),\n syntax: node\n };\n\n case 'AtKeyword':\n return {\n type: node.type,\n name: '@' + node.name.toLowerCase(),\n syntax: node\n };\n\n case 'Function':\n return {\n type: node.type,\n name: node.name.toLowerCase() + '(',\n syntax: node\n };\n\n case 'String':\n // convert a one char length String to a Token\n if (node.value.length === 3) {\n return {\n type: 'Token',\n value: node.value.charAt(1),\n syntax: node\n };\n }\n\n // otherwise use it as is\n return {\n type: node.type,\n value: node.value.substr(1, node.value.length - 2).replace(/\\\\'/g, '\\''),\n syntax: node\n };\n\n case 'Token':\n return {\n type: node.type,\n value: node.value,\n syntax: node\n };\n\n case 'Comma':\n return {\n type: node.type,\n syntax: node\n };\n\n default:\n throw new Error('Unknown node type:', node.type);\n }\n}\n\nexport function buildMatchGraph(syntaxTree, ref) {\n if (typeof syntaxTree === 'string') {\n syntaxTree = parse(syntaxTree);\n }\n\n return {\n type: 'MatchGraph',\n match: buildMatchGraphInternal(syntaxTree),\n syntax: ref || null,\n source: syntaxTree\n };\n}\n","import { MATCH, MISMATCH, DISALLOW_EMPTY } from './match-graph.js';\nimport * as TYPE from '../tokenizer/types.js';\n\nconst { hasOwnProperty } = Object.prototype;\nconst STUB = 0;\nconst TOKEN = 1;\nconst OPEN_SYNTAX = 2;\nconst CLOSE_SYNTAX = 3;\n\nconst EXIT_REASON_MATCH = 'Match';\nconst EXIT_REASON_MISMATCH = 'Mismatch';\nconst EXIT_REASON_ITERATION_LIMIT = 'Maximum iteration number exceeded (please fill an issue on https://github.com/csstree/csstree/issues)';\n\nconst ITERATION_LIMIT = 15000;\nexport let totalIterationCount = 0;\n\nfunction reverseList(list) {\n let prev = null;\n let next = null;\n let item = list;\n\n while (item !== null) {\n next = item.prev;\n item.prev = prev;\n prev = item;\n item = next;\n }\n\n return prev;\n}\n\nfunction areStringsEqualCaseInsensitive(testStr, referenceStr) {\n if (testStr.length !== referenceStr.length) {\n return false;\n }\n\n for (let i = 0; i < testStr.length; i++) {\n const referenceCode = referenceStr.charCodeAt(i);\n let testCode = testStr.charCodeAt(i);\n\n // testCode.toLowerCase() for U+0041 LATIN CAPITAL LETTER A (A) .. U+005A LATIN CAPITAL LETTER Z (Z).\n if (testCode >= 0x0041 && testCode <= 0x005A) {\n testCode = testCode | 32;\n }\n\n if (testCode !== referenceCode) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction isContextEdgeDelim(token) {\n if (token.type !== TYPE.Delim) {\n return false;\n }\n\n // Fix matching for unicode-range: U+30??, U+FF00-FF9F\n // Probably we need to check out previous match instead\n return token.value !== '?';\n}\n\nfunction isCommaContextStart(token) {\n if (token === null) {\n return true;\n }\n\n return (\n token.type === TYPE.Comma ||\n token.type === TYPE.Function ||\n token.type === TYPE.LeftParenthesis ||\n token.type === TYPE.LeftSquareBracket ||\n token.type === TYPE.LeftCurlyBracket ||\n isContextEdgeDelim(token)\n );\n}\n\nfunction isCommaContextEnd(token) {\n if (token === null) {\n return true;\n }\n\n return (\n token.type === TYPE.RightParenthesis ||\n token.type === TYPE.RightSquareBracket ||\n token.type === TYPE.RightCurlyBracket ||\n (token.type === TYPE.Delim && token.value === '/')\n );\n}\n\nfunction internalMatch(tokens, state, syntaxes) {\n function moveToNextToken() {\n do {\n tokenIndex++;\n token = tokenIndex < tokens.length ? tokens[tokenIndex] : null;\n } while (token !== null && (token.type === TYPE.WhiteSpace || token.type === TYPE.Comment));\n }\n\n function getNextToken(offset) {\n const nextIndex = tokenIndex + offset;\n\n return nextIndex < tokens.length ? tokens[nextIndex] : null;\n }\n\n function stateSnapshotFromSyntax(nextState, prev) {\n return {\n nextState,\n matchStack,\n syntaxStack,\n thenStack,\n tokenIndex,\n prev\n };\n }\n\n function pushThenStack(nextState) {\n thenStack = {\n nextState,\n matchStack,\n syntaxStack,\n prev: thenStack\n };\n }\n\n function pushElseStack(nextState) {\n elseStack = stateSnapshotFromSyntax(nextState, elseStack);\n }\n\n function addTokenToMatch() {\n matchStack = {\n type: TOKEN,\n syntax: state.syntax,\n token,\n prev: matchStack\n };\n\n moveToNextToken();\n syntaxStash = null;\n\n if (tokenIndex > longestMatch) {\n longestMatch = tokenIndex;\n }\n }\n\n function openSyntax() {\n syntaxStack = {\n syntax: state.syntax,\n opts: state.syntax.opts || (syntaxStack !== null && syntaxStack.opts) || null,\n prev: syntaxStack\n };\n\n matchStack = {\n type: OPEN_SYNTAX,\n syntax: state.syntax,\n token: matchStack.token,\n prev: matchStack\n };\n }\n\n function closeSyntax() {\n if (matchStack.type === OPEN_SYNTAX) {\n matchStack = matchStack.prev;\n } else {\n matchStack = {\n type: CLOSE_SYNTAX,\n syntax: syntaxStack.syntax,\n token: matchStack.token,\n prev: matchStack\n };\n }\n\n syntaxStack = syntaxStack.prev;\n }\n\n let syntaxStack = null;\n let thenStack = null;\n let elseStack = null;\n\n // null – stashing allowed, nothing stashed\n // false – stashing disabled, nothing stashed\n // anithing else – fail stashable syntaxes, some syntax stashed\n let syntaxStash = null;\n\n let iterationCount = 0; // count iterations and prevent infinite loop\n let exitReason = null;\n\n let token = null;\n let tokenIndex = -1;\n let longestMatch = 0;\n let matchStack = {\n type: STUB,\n syntax: null,\n token: null,\n prev: null\n };\n\n moveToNextToken();\n\n while (exitReason === null && ++iterationCount < ITERATION_LIMIT) {\n // function mapList(list, fn) {\n // const result = [];\n // while (list) {\n // result.unshift(fn(list));\n // list = list.prev;\n // }\n // return result;\n // }\n // console.log('--\\n',\n // '#' + iterationCount,\n // require('util').inspect({\n // match: mapList(matchStack, x => x.type === TOKEN ? x.token && x.token.value : x.syntax ? ({ [OPEN_SYNTAX]: '<', [CLOSE_SYNTAX]: '</' }[x.type] || x.type) + '!' + x.syntax.name : null),\n // token: token && token.value,\n // tokenIndex,\n // syntax: syntax.type + (syntax.id ? ' #' + syntax.id : '')\n // }, { depth: null })\n // );\n switch (state.type) {\n case 'Match':\n if (thenStack === null) {\n // turn to MISMATCH when some tokens left unmatched\n if (token !== null) {\n // doesn't mismatch if just one token left and it's an IE hack\n if (tokenIndex !== tokens.length - 1 || (token.value !== '\\\\0' && token.value !== '\\\\9')) {\n state = MISMATCH;\n break;\n }\n }\n\n // break the main loop, return a result - MATCH\n exitReason = EXIT_REASON_MATCH;\n break;\n }\n\n // go to next syntax (`then` branch)\n state = thenStack.nextState;\n\n // check match is not empty\n if (state === DISALLOW_EMPTY) {\n if (thenStack.matchStack === matchStack) {\n state = MISMATCH;\n break;\n } else {\n state = MATCH;\n }\n }\n\n // close syntax if needed\n while (thenStack.syntaxStack !== syntaxStack) {\n closeSyntax();\n }\n\n // pop stack\n thenStack = thenStack.prev;\n break;\n\n case 'Mismatch':\n // when some syntax is stashed\n if (syntaxStash !== null && syntaxStash !== false) {\n // there is no else branches or a branch reduce match stack\n if (elseStack === null || tokenIndex > elseStack.tokenIndex) {\n // restore state from the stash\n elseStack = syntaxStash;\n syntaxStash = false; // disable stashing\n }\n } else if (elseStack === null) {\n // no else branches -> break the main loop\n // return a result - MISMATCH\n exitReason = EXIT_REASON_MISMATCH;\n break;\n }\n\n // go to next syntax (`else` branch)\n state = elseStack.nextState;\n\n // restore all the rest stack states\n thenStack = elseStack.thenStack;\n syntaxStack = elseStack.syntaxStack;\n matchStack = elseStack.matchStack;\n tokenIndex = elseStack.tokenIndex;\n token = tokenIndex < tokens.length ? tokens[tokenIndex] : null;\n\n // pop stack\n elseStack = elseStack.prev;\n break;\n\n case 'MatchGraph':\n state = state.match;\n break;\n\n case 'If':\n // IMPORTANT: else stack push must go first,\n // since it stores the state of thenStack before changes\n if (state.else !== MISMATCH) {\n pushElseStack(state.else);\n }\n\n if (state.then !== MATCH) {\n pushThenStack(state.then);\n }\n\n state = state.match;\n break;\n\n case 'MatchOnce':\n state = {\n type: 'MatchOnceBuffer',\n syntax: state,\n index: 0,\n mask: 0\n };\n break;\n\n case 'MatchOnceBuffer': {\n const terms = state.syntax.terms;\n\n if (state.index === terms.length) {\n // no matches at all or it's required all terms to be matched\n if (state.mask === 0 || state.syntax.all) {\n state = MISMATCH;\n break;\n }\n\n // a partial match is ok\n state = MATCH;\n break;\n }\n\n // all terms are matched\n if (state.mask === (1 << terms.length) - 1) {\n state = MATCH;\n break;\n }\n\n for (; state.index < terms.length; state.index++) {\n const matchFlag = 1 << state.index;\n\n if ((state.mask & matchFlag) === 0) {\n // IMPORTANT: else stack push must go first,\n // since it stores the state of thenStack before changes\n pushElseStack(state);\n pushThenStack({\n type: 'AddMatchOnce',\n syntax: state.syntax,\n mask: state.mask | matchFlag\n });\n\n // match\n state = terms[state.index++];\n break;\n }\n }\n break;\n }\n\n case 'AddMatchOnce':\n state = {\n type: 'MatchOnceBuffer',\n syntax: state.syntax,\n index: 0,\n mask: state.mask\n };\n break;\n\n case 'Enum':\n if (token !== null) {\n let name = token.value.toLowerCase();\n\n // drop \\0 and \\9 hack from keyword name\n if (name.indexOf('\\\\') !== -1) {\n name = name.replace(/\\\\[09].*$/, '');\n }\n\n if (hasOwnProperty.call(state.map, name)) {\n state = state.map[name];\n break;\n }\n }\n\n state = MISMATCH;\n break;\n\n case 'Generic': {\n const opts = syntaxStack !== null ? syntaxStack.opts : null;\n const lastTokenIndex = tokenIndex + Math.floor(state.fn(token, getNextToken, opts));\n\n if (!isNaN(lastTokenIndex) && lastTokenIndex > tokenIndex) {\n while (tokenIndex < lastTokenIndex) {\n addTokenToMatch();\n }\n\n state = MATCH;\n } else {\n state = MISMATCH;\n }\n\n break;\n }\n\n case 'Type':\n case 'Property': {\n const syntaxDict = state.type === 'Type' ? 'types' : 'properties';\n const dictSyntax = hasOwnProperty.call(syntaxes, syntaxDict) ? syntaxes[syntaxDict][state.name] : null;\n\n if (!dictSyntax || !dictSyntax.match) {\n throw new Error(\n 'Bad syntax reference: ' +\n (state.type === 'Type'\n ? '<' + state.name + '>'\n : '<\\'' + state.name + '\\'>')\n );\n }\n\n // stash a syntax for types with low priority\n if (syntaxStash !== false && token !== null && state.type === 'Type') {\n const lowPriorityMatching =\n // https://drafts.csswg.org/css-values-4/#custom-idents\n // When parsing positionally-ambiguous keywords in a property value, a <custom-ident> production\n // can only claim the keyword if no other unfulfilled production can claim it.\n (state.name === 'custom-ident' && token.type === TYPE.Ident) ||\n\n // https://drafts.csswg.org/css-values-4/#lengths\n // ... if a `0` could be parsed as either a <number> or a <length> in a property (such as line-height),\n // it must parse as a <number>\n (state.name === 'length' && token.value === '0');\n\n if (lowPriorityMatching) {\n if (syntaxStash === null) {\n syntaxStash = stateSnapshotFromSyntax(state, elseStack);\n }\n\n state = MISMATCH;\n break;\n }\n }\n\n openSyntax();\n state = dictSyntax.matchRef || dictSyntax.match;\n break;\n }\n\n case 'Keyword': {\n const name = state.name;\n\n if (token !== null) {\n let keywordName = token.value;\n\n // drop \\0 and \\9 hack from keyword name\n if (keywordName.indexOf('\\\\') !== -1) {\n keywordName = keywordName.replace(/\\\\[09].*$/, '');\n }\n\n if (areStringsEqualCaseInsensitive(keywordName, name)) {\n addTokenToMatch();\n state = MATCH;\n break;\n }\n }\n\n state = MISMATCH;\n break;\n }\n\n case 'AtKeyword':\n case 'Function':\n if (token !== null && areStringsEqualCaseInsensitive(token.value, state.name)) {\n addTokenToMatch();\n state = MATCH;\n break;\n }\n\n state = MISMATCH;\n break;\n\n case 'Token':\n if (token !== null && token.value === state.value) {\n addTokenToMatch();\n state = MATCH;\n break;\n }\n\n state = MISMATCH;\n break;\n\n case 'Comma':\n if (token !== null && token.type === TYPE.Comma) {\n if (isCommaContextStart(matchStack.token)) {\n state = MISMATCH;\n } else {\n addTokenToMatch();\n state = isCommaContextEnd(token) ? MISMATCH : MATCH;\n }\n } else {\n state = isCommaContextStart(matchStack.token) || isCommaContextEnd(token) ? MATCH : MISMATCH;\n }\n\n break;\n\n case 'String':\n let string = '';\n let lastTokenIndex = tokenIndex;\n\n for (; lastTokenIndex < tokens.length && string.length < state.value.length; lastTokenIndex++) {\n string += tokens[lastTokenIndex].value;\n }\n\n if (areStringsEqualCaseInsensitive(string, state.value)) {\n while (tokenIndex < lastTokenIndex) {\n addTokenToMatch();\n }\n\n state = MATCH;\n } else {\n state = MISMATCH;\n }\n\n break;\n\n default:\n throw new Error('Unknown node type: ' + state.type);\n }\n }\n\n totalIterationCount += iterationCount;\n\n switch (exitReason) {\n case null:\n console.warn('[csstree-match] BREAK after ' + ITERATION_LIMIT + ' iterations');\n exitReason = EXIT_REASON_ITERATION_LIMIT;\n matchStack = null;\n break;\n\n case EXIT_REASON_MATCH:\n while (syntaxStack !== null) {\n closeSyntax();\n }\n break;\n\n default:\n matchStack = null;\n }\n\n return {\n tokens,\n reason: exitReason,\n iterations: iterationCount,\n match: matchStack,\n longestMatch\n };\n}\n\nexport function matchAsList(tokens, matchGraph, syntaxes) {\n const matchResult = internalMatch(tokens, matchGraph, syntaxes || {});\n\n if (matchResult.match !== null) {\n let item = reverseList(matchResult.match).prev;\n\n matchResult.match = [];\n\n while (item !== null) {\n switch (item.type) {\n case OPEN_SYNTAX:\n case CLOSE_SYNTAX:\n matchResult.match.push({\n type: item.type,\n syntax: item.syntax\n });\n break;\n\n default:\n matchResult.match.push({\n token: item.token.value,\n node: item.token.node\n });\n break;\n }\n\n item = item.prev;\n }\n }\n\n return matchResult;\n}\n\nexport function matchAsTree(tokens, matchGraph, syntaxes) {\n const matchResult = internalMatch(tokens, matchGraph, syntaxes || {});\n\n if (matchResult.match === null) {\n return matchResult;\n }\n\n let item = matchResult.match;\n let host = matchResult.match = {\n syntax: matchGraph.syntax || null,\n match: []\n };\n const hostStack = [host];\n\n // revert a list and start with 2nd item since 1st is a stub item\n item = reverseList(item).prev;\n\n // build a tree\n while (item !== null) {\n switch (item.type) {\n case OPEN_SYNTAX:\n host.match.push(host = {\n syntax: item.syntax,\n match: []\n });\n hostStack.push(host);\n break;\n\n case CLOSE_SYNTAX:\n hostStack.pop();\n host = hostStack[hostStack.length - 1];\n break;\n\n default:\n host.match.push({\n syntax: item.syntax || null,\n token: item.token.value,\n node: item.token.node\n });\n }\n\n item = item.prev;\n }\n\n return matchResult;\n}\n","export function getTrace(node) {\n function shouldPutToTrace(syntax) {\n if (syntax === null) {\n return false;\n }\n\n return (\n syntax.type === 'Type' ||\n syntax.type === 'Property' ||\n syntax.type === 'Keyword'\n );\n }\n\n function hasMatch(matchNode) {\n if (Array.isArray(matchNode.match)) {\n // use for-loop for better perfomance\n for (let i = 0; i < matchNode.match.length; i++) {\n if (hasMatch(matchNode.match[i])) {\n if (shouldPutToTrace(matchNode.syntax)) {\n result.unshift(matchNode.syntax);\n }\n\n return true;\n }\n }\n } else if (matchNode.node === node) {\n result = shouldPutToTrace(matchNode.syntax)\n ? [matchNode.syntax]\n : [];\n\n return true;\n }\n\n return false;\n }\n\n let result = null;\n\n if (this.matched !== null) {\n hasMatch(this.matched);\n }\n\n return result;\n}\n\nexport function isType(node, type) {\n return testNode(this, node, match => match.type === 'Type' && match.name === type);\n}\n\nexport function isProperty(node, property) {\n return testNode(this, node, match => match.type === 'Property' && match.name === property);\n}\n\nexport function isKeyword(node) {\n return testNode(this, node, match => match.type === 'Keyword');\n}\n\nfunction testNode(match, node, fn) {\n const trace = getTrace.call(match, node);\n\n if (trace === null) {\n return false;\n }\n\n return trace.some(fn);\n}\n","import { List } from '../utils/List.js';\n\nfunction getFirstMatchNode(matchNode) {\n if ('node' in matchNode) {\n return matchNode.node;\n }\n\n return getFirstMatchNode(matchNode.match[0]);\n}\n\nfunction getLastMatchNode(matchNode) {\n if ('node' in matchNode) {\n return matchNode.node;\n }\n\n return getLastMatchNode(matchNode.match[matchNode.match.length - 1]);\n}\n\nexport function matchFragments(lexer, ast, match, type, name) {\n function findFragments(matchNode) {\n if (matchNode.syntax !== null &&\n matchNode.syntax.type === type &&\n matchNode.syntax.name === name) {\n const start = getFirstMatchNode(matchNode);\n const end = getLastMatchNode(matchNode);\n\n lexer.syntax.walk(ast, function(node, item, list) {\n if (node === start) {\n const nodes = new List();\n\n do {\n nodes.appendData(item.data);\n\n if (item.data === end) {\n break;\n }\n\n item = item.next;\n } while (item !== null);\n\n fragments.push({\n parent: list,\n nodes\n });\n }\n });\n }\n\n if (Array.isArray(matchNode.match)) {\n matchNode.match.forEach(findFragments);\n }\n }\n\n const fragments = [];\n\n if (match.matched !== null) {\n findFragments(match.matched);\n }\n\n return fragments;\n}\n","import { List } from '../utils/List.js';\n\nconst { hasOwnProperty } = Object.prototype;\n\nfunction isValidNumber(value) {\n // Number.isInteger(value) && value >= 0\n return (\n typeof value === 'number' &&\n isFinite(value) &&\n Math.floor(value) === value &&\n value >= 0\n );\n}\n\nfunction isValidLocation(loc) {\n return (\n Boolean(loc) &&\n isValidNumber(loc.offset) &&\n isValidNumber(loc.line) &&\n isValidNumber(loc.column)\n );\n}\n\nfunction createNodeStructureChecker(type, fields) {\n return function checkNode(node, warn) {\n if (!node || node.constructor !== Object) {\n return warn(node, 'Type of node should be an Object');\n }\n\n for (let key in node) {\n let valid = true;\n\n if (hasOwnProperty.call(node, key) === false) {\n continue;\n }\n\n if (key === 'type') {\n if (node.type !== type) {\n warn(node, 'Wrong node type `' + node.type + '`, expected `' + type + '`');\n }\n } else if (key === 'loc') {\n if (node.loc === null) {\n continue;\n } else if (node.loc && node.loc.constructor === Object) {\n if (typeof node.loc.source !== 'string') {\n key += '.source';\n } else if (!isValidLocation(node.loc.start)) {\n key += '.start';\n } else if (!isValidLocation(node.loc.end)) {\n key += '.end';\n } else {\n continue;\n }\n }\n\n valid = false;\n } else if (fields.hasOwnProperty(key)) {\n valid = false;\n\n for (let i = 0; !valid && i < fields[key].length; i++) {\n const fieldType = fields[key][i];\n\n switch (fieldType) {\n case String:\n valid = typeof node[key] === 'string';\n break;\n\n case Boolean:\n valid = typeof node[key] === 'boolean';\n break;\n\n case null:\n valid = node[key] === null;\n break;\n\n default:\n if (typeof fieldType === 'string') {\n valid = node[key] && node[key].type === fieldType;\n } else if (Array.isArray(fieldType)) {\n valid = node[key] instanceof List;\n }\n }\n }\n } else {\n warn(node, 'Unknown field `' + key + '` for ' + type + ' node type');\n }\n\n if (!valid) {\n warn(node, 'Bad value for `' + type + '.' + key + '`');\n }\n }\n\n for (const key in fields) {\n if (hasOwnProperty.call(fields, key) &&\n hasOwnProperty.call(node, key) === false) {\n warn(node, 'Field `' + type + '.' + key + '` is missed');\n }\n }\n };\n}\n\nfunction genTypesList(fieldTypes, path) {\n const docsTypes = [];\n\n for (let i = 0; i < fieldTypes.length; i++) {\n const fieldType = fieldTypes[i];\n if (fieldType === String || fieldType === Boolean) {\n docsTypes.push(fieldType.name.toLowerCase());\n } else if (fieldType === null) {\n docsTypes.push('null');\n } else if (typeof fieldType === 'string') {\n docsTypes.push(fieldType);\n } else if (Array.isArray(fieldType)) {\n docsTypes.push('List<' + (genTypesList(fieldType, path) || 'any') + '>'); // TODO: use type enum\n } else {\n throw new Error('Wrong value `' + fieldType + '` in `' + path + '` structure definition');\n }\n }\n\n return docsTypes.join(' | ');\n}\n\nfunction processStructure(name, nodeType) {\n const structure = nodeType.structure;\n const fields = {\n type: String,\n loc: true\n };\n const docs = {\n type: '\"' + name + '\"'\n };\n\n for (const key in structure) {\n if (hasOwnProperty.call(structure, key) === false) {\n continue;\n }\n\n const fieldTypes = fields[key] = Array.isArray(structure[key])\n ? structure[key].slice()\n : [structure[key]];\n\n docs[key] = genTypesList(fieldTypes, name + '.' + key);\n }\n\n return {\n docs,\n check: createNodeStructureChecker(name, fields)\n };\n}\n\nexport function getStructureFromConfig(config) {\n const structure = {};\n\n if (config.node) {\n for (const name in config.node) {\n if (hasOwnProperty.call(config.node, name)) {\n const nodeType = config.node[name];\n\n if (nodeType.structure) {\n structure[name] = processStructure(name, nodeType);\n } else {\n throw new Error('Missed `structure` field in `' + name + '` node type definition');\n }\n }\n }\n }\n\n return structure;\n};\n","import { SyntaxReferenceError, SyntaxMatchError } from './error.js';\nimport * as names from '../utils/names.js';\nimport { cssWideKeywords } from './generic-const.js';\nimport { createGenericTypes } from './generic.js';\nimport * as units from './units.js';\nimport { parse, generate, walk } from '../definition-syntax/index.js';\nimport prepareTokens from './prepare-tokens.js';\nimport { buildMatchGraph } from './match-graph.js';\nimport { matchAsTree } from './match.js';\nimport * as trace from './trace.js';\nimport { matchFragments } from './search.js';\nimport { getStructureFromConfig } from './structure.js';\n\nfunction dumpMapSyntax(map, compact, syntaxAsAst) {\n const result = {};\n\n for (const name in map) {\n if (map[name].syntax) {\n result[name] = syntaxAsAst\n ? map[name].syntax\n : generate(map[name].syntax, { compact });\n }\n }\n\n return result;\n}\n\nfunction dumpAtruleMapSyntax(map, compact, syntaxAsAst) {\n const result = {};\n\n for (const [name, atrule] of Object.entries(map)) {\n result[name] = {\n prelude: atrule.prelude && (\n syntaxAsAst\n ? atrule.prelude.syntax\n : generate(atrule.prelude.syntax, { compact })\n ),\n descriptors: atrule.descriptors && dumpMapSyntax(atrule.descriptors, compact, syntaxAsAst)\n };\n }\n\n return result;\n}\n\nfunction valueHasVar(tokens) {\n for (let i = 0; i < tokens.length; i++) {\n if (tokens[i].value.toLowerCase() === 'var(') {\n return true;\n }\n }\n\n return false;\n}\n\nfunction syntaxHasTopLevelCommaMultiplier(syntax) {\n const singleTerm = syntax.terms[0];\n\n return (\n syntax.explicit === false &&\n syntax.terms.length === 1 &&\n singleTerm.type === 'Multiplier' &&\n singleTerm.comma === true\n );\n}\n\nfunction buildMatchResult(matched, error, iterations) {\n return {\n matched,\n iterations,\n error,\n ...trace\n };\n}\n\nfunction matchSyntax(lexer, syntax, value, useCssWideKeywords) {\n const tokens = prepareTokens(value, lexer.syntax);\n let result;\n\n if (valueHasVar(tokens)) {\n return buildMatchResult(null, new Error('Matching for a tree with var() is not supported'));\n }\n\n if (useCssWideKeywords) {\n result = matchAsTree(tokens, lexer.cssWideKeywordsSyntax, lexer);\n }\n\n if (!useCssWideKeywords || !result.match) {\n result = matchAsTree(tokens, syntax.match, lexer);\n if (!result.match) {\n return buildMatchResult(\n null,\n new SyntaxMatchError(result.reason, syntax.syntax, value, result),\n result.iterations\n );\n }\n }\n\n return buildMatchResult(result.match, null, result.iterations);\n}\n\nexport class Lexer {\n constructor(config, syntax, structure) {\n this.cssWideKeywords = cssWideKeywords;\n this.syntax = syntax;\n this.generic = false;\n this.units = { ...units };\n this.atrules = Object.create(null);\n this.properties = Object.create(null);\n this.types = Object.create(null);\n this.structure = structure || getStructureFromConfig(config);\n\n if (config) {\n if (config.cssWideKeywords) {\n this.cssWideKeywords = config.cssWideKeywords;\n }\n\n if (config.units) {\n for (const group of Object.keys(units)) {\n if (Array.isArray(config.units[group])) {\n this.units[group] = config.units[group];\n }\n }\n }\n\n if (config.types) {\n for (const [name, type] of Object.entries(config.types)) {\n this.addType_(name, type);\n }\n }\n\n if (config.generic) {\n this.generic = true;\n for (const [name, value] of Object.entries(createGenericTypes(this.units))) {\n this.addType_(name, value);\n }\n }\n\n if (config.atrules) {\n for (const [name, atrule] of Object.entries(config.atrules)) {\n this.addAtrule_(name, atrule);\n }\n }\n\n if (config.properties) {\n for (const [name, property] of Object.entries(config.properties)) {\n this.addProperty_(name, property);\n }\n }\n }\n\n this.cssWideKeywordsSyntax = buildMatchGraph(this.cssWideKeywords.join(' | '));\n }\n\n checkStructure(ast) {\n function collectWarning(node, message) {\n warns.push({ node, message });\n }\n\n const structure = this.structure;\n const warns = [];\n\n this.syntax.walk(ast, function(node) {\n if (structure.hasOwnProperty(node.type)) {\n structure[node.type].check(node, collectWarning);\n } else {\n collectWarning(node, 'Unknown node type `' + node.type + '`');\n }\n });\n\n return warns.length ? warns : false;\n }\n\n createDescriptor(syntax, type, name, parent = null) {\n const ref = {\n type,\n name\n };\n const descriptor = {\n type,\n name,\n parent,\n serializable: typeof syntax === 'string' || (syntax && typeof syntax.type === 'string'),\n syntax: null,\n match: null,\n matchRef: null // used for properties when a syntax referenced as <'property'> in other syntax definitions\n };\n\n if (typeof syntax === 'function') {\n descriptor.match = buildMatchGraph(syntax, ref);\n } else {\n if (typeof syntax === 'string') {\n // lazy parsing on first access\n Object.defineProperty(descriptor, 'syntax', {\n get() {\n Object.defineProperty(descriptor, 'syntax', {\n value: parse(syntax)\n });\n\n return descriptor.syntax;\n }\n });\n } else {\n descriptor.syntax = syntax;\n }\n\n // lazy graph build on first access\n Object.defineProperty(descriptor, 'match', {\n get() {\n Object.defineProperty(descriptor, 'match', {\n value: buildMatchGraph(descriptor.syntax, ref)\n });\n\n return descriptor.match;\n }\n });\n\n if (type === 'Property') {\n Object.defineProperty(descriptor, 'matchRef', {\n get() {\n const syntax = descriptor.syntax;\n const value = syntaxHasTopLevelCommaMultiplier(syntax)\n ? buildMatchGraph({\n ...syntax,\n terms: [syntax.terms[0].term]\n }, ref)\n : null;\n\n Object.defineProperty(descriptor, 'matchRef', {\n value\n });\n\n return value;\n }\n });\n }\n }\n\n return descriptor;\n }\n addAtrule_(name, syntax) {\n if (!syntax) {\n return;\n }\n\n this.atrules[name] = {\n type: 'Atrule',\n name: name,\n prelude: syntax.prelude ? this.createDescriptor(syntax.prelude, 'AtrulePrelude', name) : null,\n descriptors: syntax.descriptors\n ? Object.keys(syntax.descriptors).reduce(\n (map, descName) => {\n map[descName] = this.createDescriptor(syntax.descriptors[descName], 'AtruleDescriptor', descName, name);\n return map;\n },\n Object.create(null)\n )\n : null\n };\n }\n addProperty_(name, syntax) {\n if (!syntax) {\n return;\n }\n\n this.properties[name] = this.createDescriptor(syntax, 'Property', name);\n }\n addType_(name, syntax) {\n if (!syntax) {\n return;\n }\n\n this.types[name] = this.createDescriptor(syntax, 'Type', name);\n }\n\n checkAtruleName(atruleName) {\n if (!this.getAtrule(atruleName)) {\n return new SyntaxReferenceError('Unknown at-rule', '@' + atruleName);\n }\n }\n checkAtrulePrelude(atruleName, prelude) {\n const error = this.checkAtruleName(atruleName);\n\n if (error) {\n return error;\n }\n\n const atrule = this.getAtrule(atruleName);\n\n if (!atrule.prelude && prelude) {\n return new SyntaxError('At-rule `@' + atruleName + '` should not contain a prelude');\n }\n\n if (atrule.prelude && !prelude) {\n if (!matchSyntax(this, atrule.prelude, '', false).matched) {\n return new SyntaxError('At-rule `@' + atruleName + '` should contain a prelude');\n }\n }\n }\n checkAtruleDescriptorName(atruleName, descriptorName) {\n const error = this.checkAtruleName(atruleName);\n\n if (error) {\n return error;\n }\n\n const atrule = this.getAtrule(atruleName);\n const descriptor = names.keyword(descriptorName);\n\n if (!atrule.descriptors) {\n return new SyntaxError('At-rule `@' + atruleName + '` has no known descriptors');\n }\n\n if (!atrule.descriptors[descriptor.name] &&\n !atrule.descriptors[descriptor.basename]) {\n return new SyntaxReferenceError('Unknown at-rule descriptor', descriptorName);\n }\n }\n checkPropertyName(propertyName) {\n if (!this.getProperty(propertyName)) {\n return new SyntaxReferenceError('Unknown property', propertyName);\n }\n }\n\n matchAtrulePrelude(atruleName, prelude) {\n const error = this.checkAtrulePrelude(atruleName, prelude);\n\n if (error) {\n return buildMatchResult(null, error);\n }\n\n const atrule = this.getAtrule(atruleName);\n\n if (!atrule.prelude) {\n return buildMatchResult(null, null);\n }\n\n return matchSyntax(this, atrule.prelude, prelude || '', false);\n }\n matchAtruleDescriptor(atruleName, descriptorName, value) {\n const error = this.checkAtruleDescriptorName(atruleName, descriptorName);\n\n if (error) {\n return buildMatchResult(null, error);\n }\n\n const atrule = this.getAtrule(atruleName);\n const descriptor = names.keyword(descriptorName);\n\n return matchSyntax(this, atrule.descriptors[descriptor.name] || atrule.descriptors[descriptor.basename], value, false);\n }\n matchDeclaration(node) {\n if (node.type !== 'Declaration') {\n return buildMatchResult(null, new Error('Not a Declaration node'));\n }\n\n return this.matchProperty(node.property, node.value);\n }\n matchProperty(propertyName, value) {\n // don't match syntax for a custom property at the moment\n if (names.property(propertyName).custom) {\n return buildMatchResult(null, new Error('Lexer matching doesn\\'t applicable for custom properties'));\n }\n\n const error = this.checkPropertyName(propertyName);\n\n if (error) {\n return buildMatchResult(null, error);\n }\n\n return matchSyntax(this, this.getProperty(propertyName), value, true);\n }\n matchType(typeName, value) {\n const typeSyntax = this.getType(typeName);\n\n if (!typeSyntax) {\n return buildMatchResult(null, new SyntaxReferenceError('Unknown type', typeName));\n }\n\n return matchSyntax(this, typeSyntax, value, false);\n }\n match(syntax, value) {\n if (typeof syntax !== 'string' && (!syntax || !syntax.type)) {\n return buildMatchResult(null, new SyntaxReferenceError('Bad syntax'));\n }\n\n if (typeof syntax === 'string' || !syntax.match) {\n syntax = this.createDescriptor(syntax, 'Type', 'anonymous');\n }\n\n return matchSyntax(this, syntax, value, false);\n }\n\n findValueFragments(propertyName, value, type, name) {\n return matchFragments(this, value, this.matchProperty(propertyName, value), type, name);\n }\n findDeclarationValueFragments(declaration, type, name) {\n return matchFragments(this, declaration.value, this.matchDeclaration(declaration), type, name);\n }\n findAllFragments(ast, type, name) {\n const result = [];\n\n this.syntax.walk(ast, {\n visit: 'Declaration',\n enter: (declaration) => {\n result.push.apply(result, this.findDeclarationValueFragments(declaration, type, name));\n }\n });\n\n return result;\n }\n\n getAtrule(atruleName, fallbackBasename = true) {\n const atrule = names.keyword(atruleName);\n const atruleEntry = atrule.vendor && fallbackBasename\n ? this.atrules[atrule.name] || this.atrules[atrule.basename]\n : this.atrules[atrule.name];\n\n return atruleEntry || null;\n }\n getAtrulePrelude(atruleName, fallbackBasename = true) {\n const atrule = this.getAtrule(atruleName, fallbackBasename);\n\n return atrule && atrule.prelude || null;\n }\n getAtruleDescriptor(atruleName, name) {\n return this.atrules.hasOwnProperty(atruleName) && this.atrules.declarators\n ? this.atrules[atruleName].declarators[name] || null\n : null;\n }\n getProperty(propertyName, fallbackBasename = true) {\n const property = names.property(propertyName);\n const propertyEntry = property.vendor && fallbackBasename\n ? this.properties[property.name] || this.properties[property.basename]\n : this.properties[property.name];\n\n return propertyEntry || null;\n }\n getType(name) {\n return hasOwnProperty.call(this.types, name) ? this.types[name] : null;\n }\n\n validate() {\n function syntaxRef(name, isType) {\n return isType ? `<${name}>` : `<'${name}'>`;\n }\n\n function validate(syntax, name, broken, descriptor) {\n if (broken.has(name)) {\n return broken.get(name);\n }\n\n broken.set(name, false);\n if (descriptor.syntax !== null) {\n walk(descriptor.syntax, function(node) {\n if (node.type !== 'Type' && node.type !== 'Property') {\n return;\n }\n\n const map = node.type === 'Type' ? syntax.types : syntax.properties;\n const brokenMap = node.type === 'Type' ? brokenTypes : brokenProperties;\n\n if (!hasOwnProperty.call(map, node.name)) {\n errors.push(`${syntaxRef(name, broken === brokenTypes)} used missed syntax definition ${syntaxRef(node.name, node.type === 'Type')}`);\n broken.set(name, true);\n } else if (validate(syntax, node.name, brokenMap, map[node.name])) {\n errors.push(`${syntaxRef(name, broken === brokenTypes)} used broken syntax definition ${syntaxRef(node.name, node.type === 'Type')}`);\n broken.set(name, true);\n }\n }, this);\n }\n }\n\n const errors = [];\n let brokenTypes = new Map();\n let brokenProperties = new Map();\n\n for (const key in this.types) {\n validate(this, key, brokenTypes, this.types[key]);\n }\n\n for (const key in this.properties) {\n validate(this, key, brokenProperties, this.properties[key]);\n }\n\n const brokenTypesArray = [...brokenTypes.keys()].filter(name => brokenTypes.get(name));\n const brokenPropertiesArray = [...brokenProperties.keys()].filter(name => brokenProperties.get(name));\n\n if (brokenTypesArray.length || brokenPropertiesArray.length) {\n return {\n errors,\n types: brokenTypesArray,\n properties: brokenPropertiesArray\n };\n }\n\n return null;\n }\n dump(syntaxAsAst, pretty) {\n return {\n generic: this.generic,\n cssWideKeywords: this.cssWideKeywords,\n units: this.units,\n types: dumpMapSyntax(this.types, !pretty, syntaxAsAst),\n properties: dumpMapSyntax(this.properties, !pretty, syntaxAsAst),\n atrules: dumpAtruleMapSyntax(this.atrules, !pretty, syntaxAsAst)\n };\n }\n toString() {\n return JSON.stringify(this.dump());\n }\n};\n","function appendOrSet(a, b) {\n if (typeof b === 'string' && /^\\s*\\|/.test(b)) {\n return typeof a === 'string'\n ? a + b\n : b.replace(/^\\s*\\|\\s*/, '');\n }\n\n return b || null;\n}\n\nfunction extractProps(obj, props) {\n const result = Object.create(null);\n\n for (const prop of Object.keys(obj)) {\n if (props.includes(prop)) {\n result[prop] = obj[prop];\n }\n }\n\n return result;\n}\n\nfunction mergeDicts(base, ext, fields) {\n const result = { ...base };\n\n for (const [key, props] of Object.entries(ext)) {\n result[key] = {\n ...result[key],\n ...fields ? extractProps(props, fields) : props\n };\n }\n\n return result;\n}\n\nexport default function mix(dest, src) {\n const result = { ...dest };\n\n for (const [prop, value] of Object.entries(src)) {\n switch (prop) {\n case 'generic':\n result[prop] = Boolean(value);\n break;\n\n case 'cssWideKeywords':\n result[prop] = dest[prop]\n ? [...dest[prop], ...value]\n : value || [];\n break;\n\n case 'units':\n result[prop] = { ...dest[prop] };\n for (const [name, patch] of Object.entries(value)) {\n result[prop][name] = Array.isArray(patch) ? patch : [];\n }\n break;\n\n case 'atrules':\n result[prop] = { ...dest[prop] };\n\n for (const [name, atrule] of Object.entries(value)) {\n const exists = result[prop][name] || {};\n const current = result[prop][name] = {\n prelude: exists.prelude || null,\n descriptors: {\n ...exists.descriptors\n }\n };\n\n if (!atrule) {\n continue;\n }\n\n current.prelude = atrule.prelude\n ? appendOrSet(current.prelude, atrule.prelude)\n : current.prelude || null;\n\n for (const [descriptorName, descriptorValue] of Object.entries(atrule.descriptors || {})) {\n current.descriptors[descriptorName] = descriptorValue\n ? appendOrSet(current.descriptors[descriptorName], descriptorValue)\n : null;\n }\n\n if (!Object.keys(current.descriptors).length) {\n current.descriptors = null;\n }\n }\n break;\n\n case 'types':\n case 'properties':\n result[prop] = { ...dest[prop] };\n for (const [name, syntax] of Object.entries(value)) {\n result[prop][name] = appendOrSet(result[prop][name], syntax);\n }\n break;\n\n case 'parseContext':\n result[prop] = {\n ...dest[prop],\n ...value\n };\n break;\n\n case 'scope':\n case 'features':\n result[prop] = mergeDicts(dest[prop], value);\n break;\n\n case 'atrule':\n case 'pseudo':\n result[prop] = mergeDicts(dest[prop], value, ['parse']);\n break;\n\n case 'node':\n result[prop] = mergeDicts(dest[prop], value, ['name', 'structure', 'parse', 'generate', 'walkContext']);\n break;\n }\n }\n\n return result;\n}\n","import { tokenize } from '../tokenizer/index.js';\nimport { createParser } from '../parser/create.js';\nimport { createGenerator } from '../generator/create.js';\nimport { createConvertor } from '../convertor/create.js';\nimport { createWalker } from '../walker/create.js';\nimport { Lexer } from '../lexer/Lexer.js';\nimport mix from './config/mix.js';\n\nfunction createSyntax(config) {\n const parse = createParser(config);\n const walk = createWalker(config);\n const generate = createGenerator(config);\n const { fromPlainObject, toPlainObject } = createConvertor(walk);\n\n const syntax = {\n lexer: null,\n createLexer: config => new Lexer(config, syntax, syntax.lexer.structure),\n\n tokenize,\n parse,\n generate,\n\n walk,\n find: walk.find,\n findLast: walk.findLast,\n findAll: walk.findAll,\n\n fromPlainObject,\n toPlainObject,\n\n fork(extension) {\n const base = mix({}, config); // copy of config\n\n return createSyntax(\n typeof extension === 'function'\n ? extension(base) // TODO: remove Object.assign as second parameter\n : mix(base, extension)\n );\n }\n };\n\n syntax.lexer = new Lexer({\n generic: config.generic,\n cssWideKeywords: config.cssWideKeywords,\n units: config.units,\n types: config.types,\n atrules: config.atrules,\n properties: config.properties,\n node: config.node\n }, syntax);\n\n return syntax;\n};\n\nexport default config => createSyntax(mix({}, config));\n","import { createRequire } from 'module';\n\nconst require = createRequire(import.meta.url);\nconst patch = require('../data/patch.json');\n\nexport default patch;\n","import { createRequire } from 'module';\nimport patch from './data-patch.js';\n\nconst require = createRequire(import.meta.url);\nconst mdnAtrules = require('mdn-data/css/at-rules.json');\nconst mdnProperties = require('mdn-data/css/properties.json');\nconst mdnSyntaxes = require('mdn-data/css/syntaxes.json');\n\nconst hasOwn = Object.hasOwn || ((object, property) => Object.prototype.hasOwnProperty.call(object, property));\nconst extendSyntax = /^\\s*\\|\\s*/;\n\nfunction preprocessAtrules(dict) {\n const result = Object.create(null);\n\n for (const [atruleName, atrule] of Object.entries(dict)) {\n let descriptors = null;\n\n if (atrule.descriptors) {\n descriptors = Object.create(null);\n\n for (const [name, descriptor] of Object.entries(atrule.descriptors)) {\n descriptors[name] = descriptor.syntax;\n }\n }\n\n result[atruleName.substr(1)] = {\n prelude: atrule.syntax.trim().replace(/\\{(.|\\s)+\\}/, '').match(/^@\\S+\\s+([^;\\{]*)/)[1].trim() || null,\n descriptors\n };\n }\n\n return result;\n}\n\nfunction patchDictionary(dict, patchDict) {\n const result = Object.create(null);\n\n // copy all syntaxes for an original dict\n for (const [key, value] of Object.entries(dict)) {\n if (value) {\n result[key] = value.syntax || value;\n }\n }\n\n // apply a patch\n for (const key of Object.keys(patchDict)) {\n if (hasOwn(dict, key)) {\n if (patchDict[key].syntax) {\n result[key] = extendSyntax.test(patchDict[key].syntax)\n ? result[key] + ' ' + patchDict[key].syntax.trim()\n : patchDict[key].syntax;\n } else {\n delete result[key];\n }\n } else {\n if (patchDict[key].syntax) {\n result[key] = patchDict[key].syntax.replace(extendSyntax, '');\n }\n }\n }\n\n return result;\n}\n\nfunction preprocessPatchAtrulesDescritors(declarations) {\n const result = {};\n\n for (const [key, value] of Object.entries(declarations || {})) {\n result[key] = typeof value === 'string'\n ? { syntax: value }\n : value;\n }\n\n return result;\n}\n\nfunction patchAtrules(dict, patchDict) {\n const result = {};\n\n // copy all syntaxes for an original dict\n for (const key in dict) {\n if (patchDict[key] === null) {\n continue;\n }\n\n const atrulePatch = patchDict[key] || {};\n\n result[key] = {\n prelude: key in patchDict && 'prelude' in atrulePatch\n ? atrulePatch.prelude\n : dict[key].prelude || null,\n descriptors: patchDictionary(\n dict[key].descriptors || {},\n preprocessPatchAtrulesDescritors(atrulePatch.descriptors)\n )\n };\n }\n\n // apply a patch\n for (const [key, atrulePatch] of Object.entries(patchDict)) {\n if (atrulePatch && !hasOwn(dict, key)) {\n result[key] = {\n prelude: atrulePatch.prelude || null,\n descriptors: atrulePatch.descriptors\n ? patchDictionary({}, preprocessPatchAtrulesDescritors(atrulePatch.descriptors))\n : null\n };\n }\n }\n\n return result;\n}\n\nexport default {\n types: patchDictionary(mdnSyntaxes, patch.types),\n atrules: patchAtrules(preprocessAtrules(mdnAtrules), patch.atrules),\n properties: patchDictionary(mdnProperties, patch.properties)\n};\n","export * as AnPlusB from './AnPlusB.js';\nexport * as Atrule from './Atrule.js';\nexport * as AtrulePrelude from './AtrulePrelude.js';\nexport * as AttributeSelector from './AttributeSelector.js';\nexport * as Block from './Block.js';\nexport * as Brackets from './Brackets.js';\nexport * as CDC from './CDC.js';\nexport * as CDO from './CDO.js';\nexport * as ClassSelector from './ClassSelector.js';\nexport * as Combinator from './Combinator.js';\nexport * as Comment from './Comment.js';\nexport * as Condition from './Condition.js';\nexport * as Declaration from './Declaration.js';\nexport * as DeclarationList from './DeclarationList.js';\nexport * as Dimension from './Dimension.js';\nexport * as Feature from './Feature.js';\nexport * as FeatureFunction from './FeatureFunction.js';\nexport * as FeatureRange from './FeatureRange.js';\nexport * as Function from './Function.js';\nexport * as GeneralEnclosed from './GeneralEnclosed.js';\nexport * as Hash from './Hash.js';\nexport * as Identifier from './Identifier.js';\nexport * as IdSelector from './IdSelector.js';\nexport * as Layer from './Layer.js';\nexport * as LayerList from './LayerList.js';\nexport * as MediaQuery from './MediaQuery.js';\nexport * as MediaQueryList from './MediaQueryList.js';\nexport * as NestingSelector from './NestingSelector.js';\nexport * as Nth from './Nth.js';\nexport * as Number from './Number.js';\nexport * as Operator from './Operator.js';\nexport * as Parentheses from './Parentheses.js';\nexport * as Percentage from './Percentage.js';\nexport * as PseudoClassSelector from './PseudoClassSelector.js';\nexport * as PseudoElementSelector from './PseudoElementSelector.js';\nexport * as Ratio from './Ratio.js';\nexport * as Raw from './Raw.js';\nexport * as Rule from './Rule.js';\nexport * as Scope from './Scope.js';\nexport * as Selector from './Selector.js';\nexport * as SelectorList from './SelectorList.js';\nexport * as String from './String.js';\nexport * as StyleSheet from './StyleSheet.js';\nexport * as SupportsDeclaration from './SupportsDeclaration.js';\nexport * as TypeSelector from './TypeSelector.js';\nexport * as UnicodeRange from './UnicodeRange.js';\nexport * as Url from './Url.js';\nexport * as Value from './Value.js';\nexport * as WhiteSpace from './WhiteSpace.js';\n","import {\n isDigit,\n WhiteSpace,\n Comment,\n Ident,\n Number,\n Dimension\n} from '../../tokenizer/index.js';\n\nconst PLUSSIGN = 0x002B; // U+002B PLUS SIGN (+)\nconst HYPHENMINUS = 0x002D; // U+002D HYPHEN-MINUS (-)\nconst N = 0x006E; // U+006E LATIN SMALL LETTER N (n)\nconst DISALLOW_SIGN = true;\nconst ALLOW_SIGN = false;\n\nfunction checkInteger(offset, disallowSign) {\n let pos = this.tokenStart + offset;\n const code = this.charCodeAt(pos);\n\n if (code === PLUSSIGN || code === HYPHENMINUS) {\n if (disallowSign) {\n this.error('Number sign is not allowed');\n }\n pos++;\n }\n\n for (; pos < this.tokenEnd; pos++) {\n if (!isDigit(this.charCodeAt(pos))) {\n this.error('Integer is expected', pos);\n }\n }\n}\n\nfunction checkTokenIsInteger(disallowSign) {\n return checkInteger.call(this, 0, disallowSign);\n}\n\nfunction expectCharCode(offset, code) {\n if (!this.cmpChar(this.tokenStart + offset, code)) {\n let msg = '';\n\n switch (code) {\n case N:\n msg = 'N is expected';\n break;\n case HYPHENMINUS:\n msg = 'HyphenMinus is expected';\n break;\n }\n\n this.error(msg, this.tokenStart + offset);\n }\n}\n\n// ... <signed-integer>\n// ... ['+' | '-'] <signless-integer>\nfunction consumeB() {\n let offset = 0;\n let sign = 0;\n let type = this.tokenType;\n\n while (type === WhiteSpace || type === Comment) {\n type = this.lookupType(++offset);\n }\n\n if (type !== Number) {\n if (this.isDelim(PLUSSIGN, offset) ||\n this.isDelim(HYPHENMINUS, offset)) {\n sign = this.isDelim(PLUSSIGN, offset) ? PLUSSIGN : HYPHENMINUS;\n\n do {\n type = this.lookupType(++offset);\n } while (type === WhiteSpace || type === Comment);\n\n if (type !== Number) {\n this.skip(offset);\n checkTokenIsInteger.call(this, DISALLOW_SIGN);\n }\n } else {\n return null;\n }\n }\n\n if (offset > 0) {\n this.skip(offset);\n }\n\n if (sign === 0) {\n type = this.charCodeAt(this.tokenStart);\n if (type !== PLUSSIGN && type !== HYPHENMINUS) {\n this.error('Number sign is expected');\n }\n }\n\n checkTokenIsInteger.call(this, sign !== 0);\n return sign === HYPHENMINUS ? '-' + this.consume(Number) : this.consume(Number);\n}\n\n// An+B microsyntax https://www.w3.org/TR/css-syntax-3/#anb\nexport const name = 'AnPlusB';\nexport const structure = {\n a: [String, null],\n b: [String, null]\n};\n\nexport function parse() {\n /* eslint-disable brace-style*/\n const start = this.tokenStart;\n let a = null;\n let b = null;\n\n // <integer>\n if (this.tokenType === Number) {\n checkTokenIsInteger.call(this, ALLOW_SIGN);\n b = this.consume(Number);\n }\n\n // -n\n // -n <signed-integer>\n // -n ['+' | '-'] <signless-integer>\n // -n- <signless-integer>\n // <dashndashdigit-ident>\n else if (this.tokenType === Ident && this.cmpChar(this.tokenStart, HYPHENMINUS)) {\n a = '-1';\n\n expectCharCode.call(this, 1, N);\n\n switch (this.tokenEnd - this.tokenStart) {\n // -n\n // -n <signed-integer>\n // -n ['+' | '-'] <signless-integer>\n case 2:\n this.next();\n b = consumeB.call(this);\n break;\n\n // -n- <signless-integer>\n case 3:\n expectCharCode.call(this, 2, HYPHENMINUS);\n\n this.next();\n this.skipSC();\n\n checkTokenIsInteger.call(this, DISALLOW_SIGN);\n\n b = '-' + this.consume(Number);\n break;\n\n // <dashndashdigit-ident>\n default:\n expectCharCode.call(this, 2, HYPHENMINUS);\n checkInteger.call(this, 3, DISALLOW_SIGN);\n this.next();\n\n b = this.substrToCursor(start + 2);\n }\n }\n\n // '+'? n\n // '+'? n <signed-integer>\n // '+'? n ['+' | '-'] <signless-integer>\n // '+'? n- <signless-integer>\n // '+'? <ndashdigit-ident>\n else if (this.tokenType === Ident || (this.isDelim(PLUSSIGN) && this.lookupType(1) === Ident)) {\n let sign = 0;\n a = '1';\n\n // just ignore a plus\n if (this.isDelim(PLUSSIGN)) {\n sign = 1;\n this.next();\n }\n\n expectCharCode.call(this, 0, N);\n\n switch (this.tokenEnd - this.tokenStart) {\n // '+'? n\n // '+'? n <signed-integer>\n // '+'? n ['+' | '-'] <signless-integer>\n case 1:\n this.next();\n b = consumeB.call(this);\n break;\n\n // '+'? n- <signless-integer>\n case 2:\n expectCharCode.call(this, 1, HYPHENMINUS);\n\n this.next();\n this.skipSC();\n\n checkTokenIsInteger.call(this, DISALLOW_SIGN);\n\n b = '-' + this.consume(Number);\n break;\n\n // '+'? <ndashdigit-ident>\n default:\n expectCharCode.call(this, 1, HYPHENMINUS);\n checkInteger.call(this, 2, DISALLOW_SIGN);\n this.next();\n\n b = this.substrToCursor(start + sign + 1);\n }\n }\n\n // <ndashdigit-dimension>\n // <ndash-dimension> <signless-integer>\n // <n-dimension>\n // <n-dimension> <signed-integer>\n // <n-dimension> ['+' | '-'] <signless-integer>\n else if (this.tokenType === Dimension) {\n const code = this.charCodeAt(this.tokenStart);\n const sign = code === PLUSSIGN || code === HYPHENMINUS;\n let i = this.tokenStart + sign;\n\n for (; i < this.tokenEnd; i++) {\n if (!isDigit(this.charCodeAt(i))) {\n break;\n }\n }\n\n if (i === this.tokenStart + sign) {\n this.error('Integer is expected', this.tokenStart + sign);\n }\n\n expectCharCode.call(this, i - this.tokenStart, N);\n a = this.substring(start, i);\n\n // <n-dimension>\n // <n-dimension> <signed-integer>\n // <n-dimension> ['+' | '-'] <signless-integer>\n if (i + 1 === this.tokenEnd) {\n this.next();\n b = consumeB.call(this);\n } else {\n expectCharCode.call(this, i - this.tokenStart + 1, HYPHENMINUS);\n\n // <ndash-dimension> <signless-integer>\n if (i + 2 === this.tokenEnd) {\n this.next();\n this.skipSC();\n checkTokenIsInteger.call(this, DISALLOW_SIGN);\n b = '-' + this.consume(Number);\n }\n // <ndashdigit-dimension>\n else {\n checkInteger.call(this, i - this.tokenStart + 2, DISALLOW_SIGN);\n this.next();\n b = this.substrToCursor(i + 1);\n }\n }\n } else {\n this.error();\n }\n\n if (a !== null && a.charCodeAt(0) === PLUSSIGN) {\n a = a.substr(1);\n }\n\n if (b !== null && b.charCodeAt(0) === PLUSSIGN) {\n b = b.substr(1);\n }\n\n return {\n type: 'AnPlusB',\n loc: this.getLocation(start, this.tokenStart),\n a,\n b\n };\n}\n\nexport function generate(node) {\n if (node.a) {\n const a =\n node.a === '+1' && 'n' ||\n node.a === '1' && 'n' ||\n node.a === '-1' && '-n' ||\n node.a + 'n';\n\n if (node.b) {\n const b = node.b[0] === '-' || node.b[0] === '+'\n ? node.b\n : '+' + node.b;\n this.tokenize(a + b);\n } else {\n this.tokenize(a);\n }\n } else {\n this.tokenize(node.b);\n }\n}\n","import {\n AtKeyword,\n Semicolon,\n LeftCurlyBracket,\n RightCurlyBracket\n} from '../../tokenizer/index.js';\n\nfunction consumeRaw() {\n return this.Raw(this.consumeUntilLeftCurlyBracketOrSemicolon, true);\n}\n\nfunction isDeclarationBlockAtrule() {\n for (let offset = 1, type; type = this.lookupType(offset); offset++) {\n if (type === RightCurlyBracket) {\n return true;\n }\n\n if (type === LeftCurlyBracket ||\n type === AtKeyword) {\n return false;\n }\n }\n\n return false;\n}\n\n\nexport const name = 'Atrule';\nexport const walkContext = 'atrule';\nexport const structure = {\n name: String,\n prelude: ['AtrulePrelude', 'Raw', null],\n block: ['Block', null]\n};\n\nexport function parse(isDeclaration = false) {\n const start = this.tokenStart;\n let name;\n let nameLowerCase;\n let prelude = null;\n let block = null;\n\n this.eat(AtKeyword);\n\n name = this.substrToCursor(start + 1);\n nameLowerCase = name.toLowerCase();\n this.skipSC();\n\n // parse prelude\n if (this.eof === false &&\n this.tokenType !== LeftCurlyBracket &&\n this.tokenType !== Semicolon) {\n if (this.parseAtrulePrelude) {\n prelude = this.parseWithFallback(this.AtrulePrelude.bind(this, name, isDeclaration), consumeRaw);\n } else {\n prelude = consumeRaw.call(this, this.tokenIndex);\n }\n\n this.skipSC();\n }\n\n switch (this.tokenType) {\n case Semicolon:\n this.next();\n break;\n\n case LeftCurlyBracket:\n if (hasOwnProperty.call(this.atrule, nameLowerCase) &&\n typeof this.atrule[nameLowerCase].block === 'function') {\n block = this.atrule[nameLowerCase].block.call(this, isDeclaration);\n } else {\n // TODO: should consume block content as Raw?\n block = this.Block(isDeclarationBlockAtrule.call(this));\n }\n\n break;\n }\n\n return {\n type: 'Atrule',\n loc: this.getLocation(start, this.tokenStart),\n name,\n prelude,\n block\n };\n}\n\nexport function generate(node) {\n this.token(AtKeyword, '@' + node.name);\n\n if (node.prelude !== null) {\n this.node(node.prelude);\n }\n\n if (node.block) {\n this.node(node.block);\n } else {\n this.token(Semicolon, ';');\n }\n}\n","import {\n Semicolon,\n LeftCurlyBracket\n} from '../../tokenizer/index.js';\n\nexport const name = 'AtrulePrelude';\nexport const walkContext = 'atrulePrelude';\nexport const structure = {\n children: [[]]\n};\n\nexport function parse(name) {\n let children = null;\n\n if (name !== null) {\n name = name.toLowerCase();\n }\n\n this.skipSC();\n\n if (hasOwnProperty.call(this.atrule, name) &&\n typeof this.atrule[name].prelude === 'function') {\n // custom consumer\n children = this.atrule[name].prelude.call(this);\n } else {\n // default consumer\n children = this.readSequence(this.scope.AtrulePrelude);\n }\n\n this.skipSC();\n\n if (this.eof !== true &&\n this.tokenType !== LeftCurlyBracket &&\n this.tokenType !== Semicolon) {\n this.error('Semicolon or block is expected');\n }\n\n return {\n type: 'AtrulePrelude',\n loc: this.getLocationFromList(children),\n children\n };\n}\n\nexport function generate(node) {\n this.children(node);\n}\n","import {\n Ident,\n String as StringToken,\n Delim,\n LeftSquareBracket,\n RightSquareBracket\n} from '../../tokenizer/index.js';\n\nconst DOLLARSIGN = 0x0024; // U+0024 DOLLAR SIGN ($)\nconst ASTERISK = 0x002A; // U+002A ASTERISK (*)\nconst EQUALSSIGN = 0x003D; // U+003D EQUALS SIGN (=)\nconst CIRCUMFLEXACCENT = 0x005E; // U+005E (^)\nconst VERTICALLINE = 0x007C; // U+007C VERTICAL LINE (|)\nconst TILDE = 0x007E; // U+007E TILDE (~)\n\nfunction getAttributeName() {\n if (this.eof) {\n this.error('Unexpected end of input');\n }\n\n const start = this.tokenStart;\n let expectIdent = false;\n\n if (this.isDelim(ASTERISK)) {\n expectIdent = true;\n this.next();\n } else if (!this.isDelim(VERTICALLINE)) {\n this.eat(Ident);\n }\n\n if (this.isDelim(VERTICALLINE)) {\n if (this.charCodeAt(this.tokenStart + 1) !== EQUALSSIGN) {\n this.next();\n this.eat(Ident);\n } else if (expectIdent) {\n this.error('Identifier is expected', this.tokenEnd);\n }\n } else if (expectIdent) {\n this.error('Vertical line is expected');\n }\n\n return {\n type: 'Identifier',\n loc: this.getLocation(start, this.tokenStart),\n name: this.substrToCursor(start)\n };\n}\n\nfunction getOperator() {\n const start = this.tokenStart;\n const code = this.charCodeAt(start);\n\n if (code !== EQUALSSIGN && // =\n code !== TILDE && // ~=\n code !== CIRCUMFLEXACCENT && // ^=\n code !== DOLLARSIGN && // $=\n code !== ASTERISK && // *=\n code !== VERTICALLINE // |=\n ) {\n this.error('Attribute selector (=, ~=, ^=, $=, *=, |=) is expected');\n }\n\n this.next();\n\n if (code !== EQUALSSIGN) {\n if (!this.isDelim(EQUALSSIGN)) {\n this.error('Equal sign is expected');\n }\n\n this.next();\n }\n\n return this.substrToCursor(start);\n}\n\n// '[' <wq-name> ']'\n// '[' <wq-name> <attr-matcher> [ <string-token> | <ident-token> ] <attr-modifier>? ']'\nexport const name = 'AttributeSelector';\nexport const structure = {\n name: 'Identifier',\n matcher: [String, null],\n value: ['String', 'Identifier', null],\n flags: [String, null]\n};\n\nexport function parse() {\n const start = this.tokenStart;\n let name;\n let matcher = null;\n let value = null;\n let flags = null;\n\n this.eat(LeftSquareBracket);\n this.skipSC();\n\n name = getAttributeName.call(this);\n this.skipSC();\n\n if (this.tokenType !== RightSquareBracket) {\n // avoid case `[name i]`\n if (this.tokenType !== Ident) {\n matcher = getOperator.call(this);\n\n this.skipSC();\n\n value = this.tokenType === StringToken\n ? this.String()\n : this.Identifier();\n\n this.skipSC();\n }\n\n // attribute flags\n if (this.tokenType === Ident) {\n flags = this.consume(Ident);\n\n this.skipSC();\n }\n }\n\n this.eat(RightSquareBracket);\n\n return {\n type: 'AttributeSelector',\n loc: this.getLocation(start, this.tokenStart),\n name,\n matcher,\n value,\n flags\n };\n}\n\nexport function generate(node) {\n this.token(Delim, '[');\n this.node(node.name);\n\n if (node.matcher !== null) {\n this.tokenize(node.matcher);\n this.node(node.value);\n }\n\n if (node.flags !== null) {\n this.token(Ident, node.flags);\n }\n\n this.token(Delim, ']');\n}\n","import {\n WhiteSpace,\n Comment,\n Semicolon,\n AtKeyword,\n LeftCurlyBracket,\n RightCurlyBracket\n} from '../../tokenizer/index.js';\n\nconst AMPERSAND = 0x0026; // U+0026 AMPERSAND (&)\n\nfunction consumeRaw() {\n return this.Raw(null, true);\n}\nfunction consumeRule() {\n return this.parseWithFallback(this.Rule, consumeRaw);\n}\nfunction consumeRawDeclaration() {\n return this.Raw(this.consumeUntilSemicolonIncluded, true);\n}\nfunction consumeDeclaration() {\n if (this.tokenType === Semicolon) {\n return consumeRawDeclaration.call(this, this.tokenIndex);\n }\n\n const node = this.parseWithFallback(this.Declaration, consumeRawDeclaration);\n\n if (this.tokenType === Semicolon) {\n this.next();\n }\n\n return node;\n}\n\nexport const name = 'Block';\nexport const walkContext = 'block';\nexport const structure = {\n children: [[\n 'Atrule',\n 'Rule',\n 'Declaration'\n ]]\n};\n\nexport function parse(isStyleBlock) {\n const consumer = isStyleBlock ? consumeDeclaration : consumeRule;\n const start = this.tokenStart;\n let children = this.createList();\n\n this.eat(LeftCurlyBracket);\n\n scan:\n while (!this.eof) {\n switch (this.tokenType) {\n case RightCurlyBracket:\n break scan;\n\n case WhiteSpace:\n case Comment:\n this.next();\n break;\n\n case AtKeyword:\n children.push(this.parseWithFallback(this.Atrule.bind(this, isStyleBlock), consumeRaw));\n break;\n\n default:\n if (isStyleBlock && this.isDelim(AMPERSAND)) {\n children.push(consumeRule.call(this));\n } else {\n children.push(consumer.call(this));\n }\n }\n }\n\n if (!this.eof) {\n this.eat(RightCurlyBracket);\n }\n\n return {\n type: 'Block',\n loc: this.getLocation(start, this.tokenStart),\n children\n };\n}\n\nexport function generate(node) {\n this.token(LeftCurlyBracket, '{');\n this.children(node, prev => {\n if (prev.type === 'Declaration') {\n this.token(Semicolon, ';');\n }\n });\n this.token(RightCurlyBracket, '}');\n}\n","import {\n Delim,\n LeftSquareBracket,\n RightSquareBracket\n} from '../../tokenizer/index.js';\n\nexport const name = 'Brackets';\nexport const structure = {\n children: [[]]\n};\n\nexport function parse(readSequence, recognizer) {\n const start = this.tokenStart;\n let children = null;\n\n this.eat(LeftSquareBracket);\n\n children = readSequence.call(this, recognizer);\n\n if (!this.eof) {\n this.eat(RightSquareBracket);\n }\n\n return {\n type: 'Brackets',\n loc: this.getLocation(start, this.tokenStart),\n children\n };\n}\n\nexport function generate(node) {\n this.token(Delim, '[');\n this.children(node);\n this.token(Delim, ']');\n}\n","import { CDC } from '../../tokenizer/index.js';\n\nexport const name = 'CDC';\nexport const structure = [];\n\nexport function parse() {\n const start = this.tokenStart;\n\n this.eat(CDC); // -->\n\n return {\n type: 'CDC',\n loc: this.getLocation(start, this.tokenStart)\n };\n}\n\nexport function generate() {\n this.token(CDC, '-->');\n}\n","import { CDO } from '../../tokenizer/index.js';\n\nexport const name = 'CDO';\nexport const structure = [];\n\nexport function parse() {\n const start = this.tokenStart;\n\n this.eat(CDO); // <!--\n\n return {\n type: 'CDO',\n loc: this.getLocation(start, this.tokenStart)\n };\n}\n\nexport function generate() {\n this.token(CDO, '<!--');\n}\n","import { Delim, Ident } from '../../tokenizer/index.js';\n\nconst FULLSTOP = 0x002E; // U+002E FULL STOP (.)\n\n// '.' ident\nexport const name = 'ClassSelector';\nexport const structure = {\n name: String\n};\n\nexport function parse() {\n this.eatDelim(FULLSTOP);\n\n return {\n type: 'ClassSelector',\n loc: this.getLocation(this.tokenStart - 1, this.tokenEnd),\n name: this.consume(Ident)\n };\n}\n\nexport function generate(node) {\n this.token(Delim, '.');\n this.token(Ident, node.name);\n}\n","import { WhiteSpace, Delim } from '../../tokenizer/index.js';\n\nconst PLUSSIGN = 0x002B; // U+002B PLUS SIGN (+)\nconst SOLIDUS = 0x002F; // U+002F SOLIDUS (/)\nconst GREATERTHANSIGN = 0x003E; // U+003E GREATER-THAN SIGN (>)\nconst TILDE = 0x007E; // U+007E TILDE (~)\n\nexport const name = 'Combinator';\nexport const structure = {\n name: String\n};\n\n// + | > | ~ | /deep/\nexport function parse() {\n const start = this.tokenStart;\n let name;\n\n switch (this.tokenType) {\n case WhiteSpace:\n name = ' ';\n break;\n\n case Delim:\n switch (this.charCodeAt(this.tokenStart)) {\n case GREATERTHANSIGN:\n case PLUSSIGN:\n case TILDE:\n this.next();\n break;\n\n case SOLIDUS:\n this.next();\n this.eatIdent('deep');\n this.eatDelim(SOLIDUS);\n break;\n\n default:\n this.error('Combinator is expected');\n }\n\n name = this.substrToCursor(start);\n break;\n }\n\n return {\n type: 'Combinator',\n loc: this.getLocation(start, this.tokenStart),\n name\n };\n}\n\nexport function generate(node) {\n this.tokenize(node.name);\n}\n","import { Comment } from '../../tokenizer/index.js';\n\nconst ASTERISK = 0x002A; // U+002A ASTERISK (*)\nconst SOLIDUS = 0x002F; // U+002F SOLIDUS (/)\n\n\nexport const name = 'Comment';\nexport const structure = {\n value: String\n};\n\nexport function parse() {\n const start = this.tokenStart;\n let end = this.tokenEnd;\n\n this.eat(Comment);\n\n if ((end - start + 2) >= 2 &&\n this.charCodeAt(end - 2) === ASTERISK &&\n this.charCodeAt(end - 1) === SOLIDUS) {\n end -= 2;\n }\n\n return {\n type: 'Comment',\n loc: this.getLocation(start, this.tokenStart),\n value: this.substring(start + 2, end)\n };\n}\n\nexport function generate(node) {\n this.token(Comment, '/*' + node.value + '*/');\n}\n","import {\n WhiteSpace,\n Comment,\n Ident,\n LeftParenthesis,\n RightParenthesis,\n Function as FunctionToken,\n Colon,\n EOF\n} from '../../tokenizer/index.js';\n\nconst likelyFeatureToken = new Set([Colon, RightParenthesis, EOF]);\n\nexport const name = 'Condition';\nexport const structure = {\n kind: String,\n children: [[\n 'Identifier',\n 'Feature',\n 'FeatureFunction',\n 'FeatureRange',\n 'SupportsDeclaration'\n ]]\n};\n\nfunction featureOrRange(kind) {\n if (this.lookupTypeNonSC(1) === Ident &&\n likelyFeatureToken.has(this.lookupTypeNonSC(2))) {\n return this.Feature(kind);\n }\n\n return this.FeatureRange(kind);\n}\n\nconst parentheses = {\n media: featureOrRange,\n container: featureOrRange,\n supports() {\n return this.SupportsDeclaration();\n }\n};\n\nexport function parse(kind = 'media') {\n const children = this.createList();\n\n scan: while (!this.eof) {\n switch (this.tokenType) {\n case Comment:\n case WhiteSpace:\n this.next();\n continue;\n\n case Ident:\n children.push(this.Identifier());\n break;\n\n case LeftParenthesis: {\n let term = this.parseWithFallback(\n () => parentheses[kind].call(this, kind),\n () => null\n );\n\n if (!term) {\n term = this.parseWithFallback(\n () => {\n this.eat(LeftParenthesis);\n const res = this.Condition(kind);\n this.eat(RightParenthesis);\n return res;\n },\n () => {\n return this.GeneralEnclosed(kind);\n }\n );\n }\n\n children.push(term);\n break;\n }\n\n case FunctionToken: {\n let term = this.parseWithFallback(\n () => this.FeatureFunction(kind),\n () => null\n );\n\n if (!term) {\n term = this.GeneralEnclosed(kind);\n }\n\n children.push(term);\n break;\n }\n\n default:\n break scan;\n }\n }\n\n if (children.isEmpty) {\n this.error('Condition is expected');\n }\n\n return {\n type: 'Condition',\n loc: this.getLocationFromList(children),\n kind,\n children\n };\n}\n\nexport function generate(node) {\n node.children.forEach(child => {\n if (child.type === 'Condition') {\n this.token(LeftParenthesis, '(');\n this.node(child);\n this.token(RightParenthesis, ')');\n } else {\n this.node(child);\n }\n });\n}\n\n","import { isCustomProperty } from '../../utils/names.js';\nimport {\n Ident,\n Hash,\n Colon,\n Semicolon,\n Delim,\n WhiteSpace\n} from '../../tokenizer/index.js';\n\nconst EXCLAMATIONMARK = 0x0021; // U+0021 EXCLAMATION MARK (!)\nconst NUMBERSIGN = 0x0023; // U+0023 NUMBER SIGN (#)\nconst DOLLARSIGN = 0x0024; // U+0024 DOLLAR SIGN ($)\nconst AMPERSAND = 0x0026; // U+0026 AMPERSAND (&)\nconst ASTERISK = 0x002A; // U+002A ASTERISK (*)\nconst PLUSSIGN = 0x002B; // U+002B PLUS SIGN (+)\nconst SOLIDUS = 0x002F; // U+002F SOLIDUS (/)\n\nfunction consumeValueRaw() {\n return this.Raw(this.consumeUntilExclamationMarkOrSemicolon, true);\n}\n\nfunction consumeCustomPropertyRaw() {\n return this.Raw(this.consumeUntilExclamationMarkOrSemicolon, false);\n}\n\nfunction consumeValue() {\n const startValueToken = this.tokenIndex;\n const value = this.Value();\n\n if (value.type !== 'Raw' &&\n this.eof === false &&\n this.tokenType !== Semicolon &&\n this.isDelim(EXCLAMATIONMARK) === false &&\n this.isBalanceEdge(startValueToken) === false) {\n this.error();\n }\n\n return value;\n}\n\nexport const name = 'Declaration';\nexport const walkContext = 'declaration';\nexport const structure = {\n important: [Boolean, String],\n property: String,\n value: ['Value', 'Raw']\n};\n\nexport function parse() {\n const start = this.tokenStart;\n const startToken = this.tokenIndex;\n const property = readProperty.call(this);\n const customProperty = isCustomProperty(property);\n const parseValue = customProperty ? this.parseCustomProperty : this.parseValue;\n const consumeRaw = customProperty ? consumeCustomPropertyRaw : consumeValueRaw;\n let important = false;\n let value;\n\n this.skipSC();\n this.eat(Colon);\n\n const valueStart = this.tokenIndex;\n\n if (!customProperty) {\n this.skipSC();\n }\n\n if (parseValue) {\n value = this.parseWithFallback(consumeValue, consumeRaw);\n } else {\n value = consumeRaw.call(this, this.tokenIndex);\n }\n\n if (customProperty && value.type === 'Value' && value.children.isEmpty) {\n for (let offset = valueStart - this.tokenIndex; offset <= 0; offset++) {\n if (this.lookupType(offset) === WhiteSpace) {\n value.children.appendData({\n type: 'WhiteSpace',\n loc: null,\n value: ' '\n });\n break;\n }\n }\n }\n\n if (this.isDelim(EXCLAMATIONMARK)) {\n important = getImportant.call(this);\n this.skipSC();\n }\n\n // Do not include semicolon to range per spec\n // https://drafts.csswg.org/css-syntax/#declaration-diagram\n\n if (this.eof === false &&\n this.tokenType !== Semicolon &&\n this.isBalanceEdge(startToken) === false) {\n this.error();\n }\n\n return {\n type: 'Declaration',\n loc: this.getLocation(start, this.tokenStart),\n important,\n property,\n value\n };\n}\n\nexport function generate(node) {\n this.token(Ident, node.property);\n this.token(Colon, ':');\n this.node(node.value);\n\n if (node.important) {\n this.token(Delim, '!');\n this.token(Ident, node.important === true ? 'important' : node.important);\n }\n}\n\nfunction readProperty() {\n const start = this.tokenStart;\n\n // hacks\n if (this.tokenType === Delim) {\n switch (this.charCodeAt(this.tokenStart)) {\n case ASTERISK:\n case DOLLARSIGN:\n case PLUSSIGN:\n case NUMBERSIGN:\n case AMPERSAND:\n this.next();\n break;\n\n // TODO: not sure we should support this hack\n case SOLIDUS:\n this.next();\n if (this.isDelim(SOLIDUS)) {\n this.next();\n }\n break;\n }\n }\n\n if (this.tokenType === Hash) {\n this.eat(Hash);\n } else {\n this.eat(Ident);\n }\n\n return this.substrToCursor(start);\n}\n\n// ! ws* important\nfunction getImportant() {\n this.eat(Delim);\n this.skipSC();\n\n const important = this.consume(Ident);\n\n // store original value in case it differ from `important`\n // for better original source restoring and hacks like `!ie` support\n return important === 'important' ? true : important;\n}\n","import {\n WhiteSpace,\n Comment,\n Semicolon,\n AtKeyword\n} from '../../tokenizer/index.js';\n\nconst AMPERSAND = 0x0026; // U+0026 AMPERSAND (&)\n\nfunction consumeRaw() {\n return this.Raw(this.consumeUntilSemicolonIncluded, true);\n}\n\nexport const name = 'DeclarationList';\nexport const structure = {\n children: [[\n 'Declaration',\n 'Atrule',\n 'Rule'\n ]]\n};\n\nexport function parse() {\n const children = this.createList();\n\n scan:\n while (!this.eof) {\n switch (this.tokenType) {\n case WhiteSpace:\n case Comment:\n case Semicolon:\n this.next();\n break;\n\n case AtKeyword:\n children.push(this.parseWithFallback(this.Atrule.bind(this, true), consumeRaw));\n break;\n\n default:\n if (this.isDelim(AMPERSAND)) {\n children.push(this.parseWithFallback(this.Rule, consumeRaw));\n } else {\n children.push(this.parseWithFallback(this.Declaration, consumeRaw));\n }\n }\n }\n\n return {\n type: 'DeclarationList',\n loc: this.getLocationFromList(children),\n children\n };\n}\n\nexport function generate(node) {\n this.children(node, prev => {\n if (prev.type === 'Declaration') {\n this.token(Semicolon, ';');\n }\n });\n}\n\n","import { Dimension } from '../../tokenizer/index.js';\n\nexport const name = 'Dimension';\nexport const structure = {\n value: String,\n unit: String\n};\n\nexport function parse() {\n const start = this.tokenStart;\n const value = this.consumeNumber(Dimension);\n\n return {\n type: 'Dimension',\n loc: this.getLocation(start, this.tokenStart),\n value,\n unit: this.substring(start + value.length, this.tokenStart)\n };\n}\n\nexport function generate(node) {\n this.token(Dimension, node.value + node.unit);\n}\n","import {\n Ident,\n Number,\n Dimension,\n Function as FunctionToken,\n LeftParenthesis,\n RightParenthesis,\n Colon,\n Delim\n} from '../../tokenizer/index.js';\n\nconst SOLIDUS = 0x002F; // U+002F SOLIDUS (/)\n\nexport const name = 'Feature';\nexport const structure = {\n kind: String,\n name: String,\n value: ['Identifier', 'Number', 'Dimension', 'Ratio', 'Function', null]\n};\n\nexport function parse(kind) {\n const start = this.tokenStart;\n let name;\n let value = null;\n\n this.eat(LeftParenthesis);\n this.skipSC();\n\n name = this.consume(Ident);\n this.skipSC();\n\n if (this.tokenType !== RightParenthesis) {\n this.eat(Colon);\n this.skipSC();\n\n switch (this.tokenType) {\n case Number:\n if (this.lookupNonWSType(1) === Delim) {\n value = this.Ratio();\n } else {\n value = this.Number();\n }\n\n break;\n\n case Dimension:\n value = this.Dimension();\n break;\n\n case Ident:\n value = this.Identifier();\n break;\n\n case FunctionToken:\n value = this.parseWithFallback(\n () => {\n const res = this.Function(this.readSequence, this.scope.Value);\n\n this.skipSC();\n\n if (this.isDelim(SOLIDUS)) {\n this.error();\n }\n\n return res;\n },\n () => {\n return this.Ratio();\n }\n );\n break;\n\n default:\n this.error('Number, dimension, ratio or identifier is expected');\n }\n\n this.skipSC();\n }\n\n if (!this.eof) {\n this.eat(RightParenthesis);\n }\n\n return {\n type: 'Feature',\n loc: this.getLocation(start, this.tokenStart),\n kind,\n name,\n value\n };\n}\n\nexport function generate(node) {\n this.token(LeftParenthesis, '(');\n this.token(Ident, node.name);\n\n if (node.value !== null) {\n this.token(Colon, ':');\n this.node(node.value);\n }\n\n this.token(RightParenthesis, ')');\n}\n","import {\n Function as FunctionToken,\n RightParenthesis\n} from '../../tokenizer/index.js';\n\nexport const name = 'FeatureFunction';\nexport const structure = {\n kind: String,\n feature: String,\n value: ['Declaration', 'Selector']\n};\n\nfunction getFeatureParser(kind, name) {\n const featuresOfKind = this.features[kind] || {};\n const parser = featuresOfKind[name];\n\n if (typeof parser !== 'function') {\n this.error(`Unknown feature ${name}()`);\n }\n\n return parser;\n}\n\nexport function parse(kind = 'unknown') {\n const start = this.tokenStart;\n const functionName = this.consumeFunctionName();\n const valueParser = getFeatureParser.call(this, kind, functionName.toLowerCase());\n\n this.skipSC();\n\n const value = this.parseWithFallback(\n () => {\n const startValueToken = this.tokenIndex;\n const value = valueParser.call(this);\n\n if (this.eof === false &&\n this.isBalanceEdge(startValueToken) === false) {\n this.error();\n }\n\n return value;\n },\n () => this.Raw(null, false)\n );\n\n if (!this.eof) {\n this.eat(RightParenthesis);\n }\n\n return {\n type: 'FeatureFunction',\n loc: this.getLocation(start, this.tokenStart),\n kind,\n feature: functionName,\n value\n };\n}\n\nexport function generate(node) {\n this.token(FunctionToken, node.feature + '(');\n this.node(node.value);\n this.token(RightParenthesis, ')');\n}\n","import {\n Ident,\n Number,\n Dimension,\n Function as FunctionToken,\n LeftParenthesis,\n RightParenthesis\n} from '../../tokenizer/index.js';\n\nconst SOLIDUS = 0x002F; // U+002F SOLIDUS (/)\nconst LESSTHANSIGN = 0x003C; // U+003C LESS-THAN SIGN (<)\nconst EQUALSSIGN = 0x003D; // U+003D EQUALS SIGN (=)\nconst GREATERTHANSIGN = 0x003E; // U+003E GREATER-THAN SIGN (>)\n\nexport const name = 'FeatureRange';\nexport const structure = {\n kind: String,\n left: ['Identifier', 'Number', 'Dimension', 'Ratio', 'Function'],\n leftComparison: String,\n middle: ['Identifier', 'Number', 'Dimension', 'Ratio', 'Function'],\n rightComparison: [String, null],\n right: ['Identifier', 'Number', 'Dimension', 'Ratio', 'Function', null]\n};\n\nfunction readTerm() {\n this.skipSC();\n\n switch (this.tokenType) {\n case Number:\n if (this.isDelim(SOLIDUS, this.lookupOffsetNonSC(1))) {\n return this.Ratio();\n } else {\n return this.Number();\n }\n\n case Dimension:\n return this.Dimension();\n\n case Ident:\n return this.Identifier();\n\n case FunctionToken:\n return this.parseWithFallback(\n () => {\n const res = this.Function(this.readSequence, this.scope.Value);\n\n this.skipSC();\n\n if (this.isDelim(SOLIDUS)) {\n this.error();\n }\n\n return res;\n },\n () => {\n return this.Ratio();\n }\n );\n\n default:\n this.error('Number, dimension, ratio or identifier is expected');\n }\n}\n\nfunction readComparison(expectColon) {\n this.skipSC();\n\n if (this.isDelim(LESSTHANSIGN) ||\n this.isDelim(GREATERTHANSIGN)) {\n const value = this.source[this.tokenStart];\n\n this.next();\n\n if (this.isDelim(EQUALSSIGN)) {\n this.next();\n return value + '=';\n }\n\n return value;\n }\n\n if (this.isDelim(EQUALSSIGN)) {\n return '=';\n }\n\n this.error(`Expected ${expectColon ? '\":\", ' : ''}\"<\", \">\", \"=\" or \")\"`);\n}\n\nexport function parse(kind = 'unknown') {\n const start = this.tokenStart;\n\n this.skipSC();\n this.eat(LeftParenthesis);\n\n const left = readTerm.call(this);\n const leftComparison = readComparison.call(this, left.type === 'Identifier');\n const middle = readTerm.call(this);\n let rightComparison = null;\n let right = null;\n\n if (this.lookupNonWSType(0) !== RightParenthesis) {\n rightComparison = readComparison.call(this);\n right = readTerm.call(this);\n }\n\n this.skipSC();\n this.eat(RightParenthesis);\n\n return {\n type: 'FeatureRange',\n loc: this.getLocation(start, this.tokenStart),\n kind,\n left,\n leftComparison,\n middle,\n rightComparison,\n right\n };\n}\n\nexport function generate(node) {\n this.token(LeftParenthesis, '(');\n this.node(node.left);\n this.tokenize(node.leftComparison);\n this.node(node.middle);\n\n if (node.right) {\n this.tokenize(node.rightComparison);\n this.node(node.right);\n }\n\n this.token(RightParenthesis, ')');\n}\n","import {\n Function as FunctionToken,\n RightParenthesis\n} from '../../tokenizer/index.js';\n\n\nexport const name = 'Function';\nexport const walkContext = 'function';\nexport const structure = {\n name: String,\n children: [[]]\n};\n\n// <function-token> <sequence> )\nexport function parse(readSequence, recognizer) {\n const start = this.tokenStart;\n const name = this.consumeFunctionName();\n const nameLowerCase = name.toLowerCase();\n let children;\n\n children = recognizer.hasOwnProperty(nameLowerCase)\n ? recognizer[nameLowerCase].call(this, recognizer)\n : readSequence.call(this, recognizer);\n\n if (!this.eof) {\n this.eat(RightParenthesis);\n }\n\n return {\n type: 'Function',\n loc: this.getLocation(start, this.tokenStart),\n name,\n children\n };\n}\n\nexport function generate(node) {\n this.token(FunctionToken, node.name + '(');\n this.children(node);\n this.token(RightParenthesis, ')');\n}\n","import {\n Function as FunctionToken,\n LeftParenthesis,\n RightParenthesis\n} from '../../tokenizer/index.js';\n\n\nexport const name = 'GeneralEnclosed';\nexport const structure = {\n kind: String,\n function: [String, null],\n children: [[]]\n};\n\n// <function-token> <any-value> )\n// ( <any-value> )\nexport function parse(kind) {\n const start = this.tokenStart;\n let functionName = null;\n\n if (this.tokenType === FunctionToken) {\n functionName = this.consumeFunctionName();\n } else {\n this.eat(LeftParenthesis);\n }\n\n const children = this.parseWithFallback(\n () => {\n const startValueToken = this.tokenIndex;\n const children = this.readSequence(this.scope.Value);\n\n if (this.eof === false &&\n this.isBalanceEdge(startValueToken) === false) {\n this.error();\n }\n\n return children;\n },\n () => this.createSingleNodeList(\n this.Raw(null, false)\n )\n );\n\n if (!this.eof) {\n this.eat(RightParenthesis);\n }\n\n return {\n type: 'GeneralEnclosed',\n loc: this.getLocation(start, this.tokenStart),\n kind,\n function: functionName,\n children\n };\n}\n\nexport function generate(node) {\n if (node.function) {\n this.token(FunctionToken, node.function + '(');\n } else {\n this.token(LeftParenthesis, '(');\n }\n\n this.children(node);\n this.token(RightParenthesis, ')');\n}\n","import { Hash } from '../../tokenizer/index.js';\n\n// '#' ident\nexport const xxx = 'XXX';\nexport const name = 'Hash';\nexport const structure = {\n value: String\n};\nexport function parse() {\n const start = this.tokenStart;\n\n this.eat(Hash);\n\n return {\n type: 'Hash',\n loc: this.getLocation(start, this.tokenStart),\n value: this.substrToCursor(start + 1)\n };\n}\nexport function generate(node) {\n this.token(Hash, '#' + node.value);\n}\n\n","import { Ident } from '../../tokenizer/index.js';\n\nexport const name = 'Identifier';\nexport const structure = {\n name: String\n};\n\nexport function parse() {\n return {\n type: 'Identifier',\n loc: this.getLocation(this.tokenStart, this.tokenEnd),\n name: this.consume(Ident)\n };\n}\n\nexport function generate(node) {\n this.token(Ident, node.name);\n}\n","import { Hash, Delim } from '../../tokenizer/index.js';\n\nexport const name = 'IdSelector';\nexport const structure = {\n name: String\n};\n\nexport function parse() {\n const start = this.tokenStart;\n\n // TODO: check value is an ident\n this.eat(Hash);\n\n return {\n type: 'IdSelector',\n loc: this.getLocation(start, this.tokenStart),\n name: this.substrToCursor(start + 1)\n };\n}\n\nexport function generate(node) {\n // Using Delim instead of Hash is a hack to avoid for a whitespace between ident and id-selector\n // in safe mode (e.g. \"a#id\"), because IE11 doesn't allow a sequence <ident-token> <hash-token>\n // without a whitespace in values (e.g. \"1px solid#000\")\n this.token(Delim, '#' + node.name);\n}\n","import { Ident, Delim } from '../../tokenizer/index.js';\n\nconst FULLSTOP = 0x002E; // U+002E FULL STOP (.)\n\nexport const name = 'Layer';\nexport const structure = {\n name: String\n};\n\nexport function parse() {\n let tokenStart = this.tokenStart;\n let name = this.consume(Ident);\n\n while (this.isDelim(FULLSTOP)) {\n this.eat(Delim);\n name += '.' + this.consume(Ident);\n }\n\n return {\n type: 'Layer',\n loc: this.getLocation(tokenStart, this.tokenStart),\n name\n };\n}\n\nexport function generate(node) {\n this.tokenize(node.name);\n}\n","import { Comma } from '../../tokenizer/index.js';\n\nexport const name = 'LayerList';\nexport const structure = {\n children: [[\n 'Layer'\n ]]\n};\n\nexport function parse() {\n const children = this.createList();\n\n this.skipSC();\n\n while (!this.eof) {\n children.push(this.Layer());\n\n if (this.lookupTypeNonSC(0) !== Comma) {\n break;\n }\n\n this.skipSC();\n this.next();\n this.skipSC();\n }\n\n return {\n type: 'LayerList',\n loc: this.getLocationFromList(children),\n children\n };\n}\n\nexport function generate(node) {\n this.children(node, () => this.token(Comma, ','));\n}\n","import {\n Comma,\n EOF,\n Ident,\n LeftCurlyBracket,\n LeftParenthesis,\n Function as FunctionToken,\n Semicolon\n} from '../../tokenizer/index.js';\n\nexport const name = 'MediaQuery';\nexport const structure = {\n modifier: [String, null],\n mediaType: [String, null],\n condition: ['Condition', null]\n};\n\nexport function parse() {\n const start = this.tokenStart;\n let modifier = null;\n let mediaType = null;\n let condition = null;\n\n this.skipSC();\n\n if (this.tokenType === Ident && this.lookupTypeNonSC(1) !== LeftParenthesis) {\n // [ not | only ]? <media-type>\n const ident = this.consume(Ident);\n const identLowerCase = ident.toLowerCase();\n\n if (identLowerCase === 'not' || identLowerCase === 'only') {\n this.skipSC();\n modifier = identLowerCase;\n mediaType = this.consume(Ident);\n } else {\n mediaType = ident;\n }\n\n switch (this.lookupTypeNonSC(0)) {\n case Ident: {\n // and <media-condition-without-or>\n this.skipSC();\n this.eatIdent('and');\n condition = this.Condition('media');\n break;\n }\n\n case LeftCurlyBracket:\n case Semicolon:\n case Comma:\n case EOF:\n break;\n\n default:\n this.error('Identifier or parenthesis is expected');\n }\n } else {\n switch (this.tokenType) {\n case Ident:\n case LeftParenthesis:\n case FunctionToken: {\n // <media-condition>\n condition = this.Condition('media');\n break;\n }\n\n case LeftCurlyBracket:\n case Semicolon:\n case EOF:\n break;\n\n default:\n this.error('Identifier or parenthesis is expected');\n }\n }\n\n return {\n type: 'MediaQuery',\n loc: this.getLocation(start, this.tokenStart),\n modifier,\n mediaType,\n condition\n };\n}\n\nexport function generate(node) {\n if (node.mediaType) {\n if (node.modifier) {\n this.token(Ident, node.modifier);\n }\n\n this.token(Ident, node.mediaType);\n\n if (node.condition) {\n this.token(Ident, 'and');\n this.node(node.condition);\n }\n } else if (node.condition) {\n this.node(node.condition);\n }\n}\n\n","import { Comma } from '../../tokenizer/index.js';\n\nexport const name = 'MediaQueryList';\nexport const structure = {\n children: [[\n 'MediaQuery'\n ]]\n};\n\nexport function parse() {\n const children = this.createList();\n\n this.skipSC();\n\n while (!this.eof) {\n children.push(this.MediaQuery());\n\n if (this.tokenType !== Comma) {\n break;\n }\n\n this.next();\n }\n\n return {\n type: 'MediaQueryList',\n loc: this.getLocationFromList(children),\n children\n };\n}\n\nexport function generate(node) {\n this.children(node, () => this.token(Comma, ','));\n}\n","import { Delim } from '../../tokenizer/index.js';\n\nconst AMPERSAND = 0x0026; // U+0026 AMPERSAND (&)\n\nexport const name = 'NestingSelector';\nexport const structure = {\n};\n\nexport function parse() {\n const start = this.tokenStart;\n\n this.eatDelim(AMPERSAND);\n\n return {\n type: 'NestingSelector',\n loc: this.getLocation(start, this.tokenStart)\n };\n}\n\nexport function generate() {\n this.token(Delim, '&');\n}\n","import { Ident } from '../../tokenizer/index.js';\n\nexport const name = 'Nth';\nexport const structure = {\n nth: ['AnPlusB', 'Identifier'],\n selector: ['SelectorList', null]\n};\n\nexport function parse() {\n this.skipSC();\n\n const start = this.tokenStart;\n let end = start;\n let selector = null;\n let nth;\n\n if (this.lookupValue(0, 'odd') || this.lookupValue(0, 'even')) {\n nth = this.Identifier();\n } else {\n nth = this.AnPlusB();\n }\n\n end = this.tokenStart;\n this.skipSC();\n\n if (this.lookupValue(0, 'of')) {\n this.next();\n\n selector = this.SelectorList();\n end = this.tokenStart;\n }\n\n return {\n type: 'Nth',\n loc: this.getLocation(start, end),\n nth,\n selector\n };\n}\n\nexport function generate(node) {\n this.node(node.nth);\n if (node.selector !== null) {\n this.token(Ident, 'of');\n this.node(node.selector);\n }\n}\n","import { Number as NumberToken } from '../../tokenizer/index.js';\n\nexport const name = 'Number';\nexport const structure = {\n value: String\n};\n\nexport function parse() {\n return {\n type: 'Number',\n loc: this.getLocation(this.tokenStart, this.tokenEnd),\n value: this.consume(NumberToken)\n };\n}\n\nexport function generate(node) {\n this.token(NumberToken, node.value);\n}\n","// '/' | '*' | ',' | ':' | '+' | '-'\nexport const name = 'Operator';\nexport const structure = {\n value: String\n};\n\nexport function parse() {\n const start = this.tokenStart;\n\n this.next();\n\n return {\n type: 'Operator',\n loc: this.getLocation(start, this.tokenStart),\n value: this.substrToCursor(start)\n };\n}\n\nexport function generate(node) {\n this.tokenize(node.value);\n}\n","import {\n LeftParenthesis,\n RightParenthesis\n} from '../../tokenizer/index.js';\n\nexport const name = 'Parentheses';\nexport const structure = {\n children: [[]]\n};\n\nexport function parse(readSequence, recognizer) {\n const start = this.tokenStart;\n let children = null;\n\n this.eat(LeftParenthesis);\n\n children = readSequence.call(this, recognizer);\n\n if (!this.eof) {\n this.eat(RightParenthesis);\n }\n\n return {\n type: 'Parentheses',\n loc: this.getLocation(start, this.tokenStart),\n children\n };\n}\n\nexport function generate(node) {\n this.token(LeftParenthesis, '(');\n this.children(node);\n this.token(RightParenthesis, ')');\n}\n","import { Percentage } from '../../tokenizer/index.js';\n\nexport const name = 'Percentage';\nexport const structure = {\n value: String\n};\n\nexport function parse() {\n return {\n type: 'Percentage',\n loc: this.getLocation(this.tokenStart, this.tokenEnd),\n value: this.consumeNumber(Percentage)\n };\n}\n\nexport function generate(node) {\n this.token(Percentage, node.value + '%');\n}\n","import {\n Ident,\n Function as FunctionToken,\n Colon,\n RightParenthesis\n} from '../../tokenizer/index.js';\n\n\nexport const name = 'PseudoClassSelector';\nexport const walkContext = 'function';\nexport const structure = {\n name: String,\n children: [['Raw'], null]\n};\n\n// : [ <ident> | <function-token> <any-value>? ) ]\nexport function parse() {\n const start = this.tokenStart;\n let children = null;\n let name;\n let nameLowerCase;\n\n this.eat(Colon);\n\n if (this.tokenType === FunctionToken) {\n name = this.consumeFunctionName();\n nameLowerCase = name.toLowerCase();\n\n if (this.lookupNonWSType(0) == RightParenthesis) {\n children = this.createList();\n } else if (hasOwnProperty.call(this.pseudo, nameLowerCase)) {\n this.skipSC();\n children = this.pseudo[nameLowerCase].call(this);\n this.skipSC();\n } else {\n children = this.createList();\n children.push(\n this.Raw(null, false)\n );\n }\n\n this.eat(RightParenthesis);\n } else {\n name = this.consume(Ident);\n }\n\n return {\n type: 'PseudoClassSelector',\n loc: this.getLocation(start, this.tokenStart),\n name,\n children\n };\n}\n\nexport function generate(node) {\n this.token(Colon, ':');\n\n if (node.children === null) {\n this.token(Ident, node.name);\n } else {\n this.token(FunctionToken, node.name + '(');\n this.children(node);\n this.token(RightParenthesis, ')');\n }\n}\n","import {\n Ident,\n Function as FunctionToken,\n Colon,\n RightParenthesis\n} from '../../tokenizer/index.js';\n\nexport const name = 'PseudoElementSelector';\nexport const walkContext = 'function';\nexport const structure = {\n name: String,\n children: [['Raw'], null]\n};\n\n// :: [ <ident> | <function-token> <any-value>? ) ]\nexport function parse() {\n const start = this.tokenStart;\n let children = null;\n let name;\n let nameLowerCase;\n\n this.eat(Colon);\n this.eat(Colon);\n\n if (this.tokenType === FunctionToken) {\n name = this.consumeFunctionName();\n nameLowerCase = name.toLowerCase();\n\n if (this.lookupNonWSType(0) == RightParenthesis) {\n children = this.createList();\n } else if (hasOwnProperty.call(this.pseudo, nameLowerCase)) {\n this.skipSC();\n children = this.pseudo[nameLowerCase].call(this);\n this.skipSC();\n } else {\n children = this.createList();\n children.push(\n this.Raw(null, false)\n );\n }\n\n this.eat(RightParenthesis);\n } else {\n name = this.consume(Ident);\n }\n\n return {\n type: 'PseudoElementSelector',\n loc: this.getLocation(start, this.tokenStart),\n name,\n children\n };\n}\n\nexport function generate(node) {\n this.token(Colon, ':');\n this.token(Colon, ':');\n\n if (node.children === null) {\n this.token(Ident, node.name);\n } else {\n this.token(FunctionToken, node.name + '(');\n this.children(node);\n this.token(RightParenthesis, ')');\n }\n}\n","import {\n Delim,\n Number as NumberToken,\n Function as FunctionToken\n} from '../../tokenizer/index.js';\n\nconst SOLIDUS = 0x002F; // U+002F SOLIDUS (/)\n\n// Media Queries Level 3 defines terms of <ratio> as a positive (not zero or negative)\n// integers (see https://drafts.csswg.org/mediaqueries-3/#values)\n// However, Media Queries Level 4 removes any definition of values\n// (see https://drafts.csswg.org/mediaqueries-4/#values) and refers to\n// CSS Values and Units for detail. In CSS Values and Units Level 4 a <ratio>\n// definition was added (see https://drafts.csswg.org/css-values-4/#ratios) which\n// defines ratio as \"<number [0,∞]> [ / <number [0,∞]> ]?\" and based on it\n// any constrains on terms were removed. Parser also doesn't test numbers\n// in any way to make possible for linting and fixing them by the tools using CSSTree.\n// An additional syntax examination may be applied by a lexer.\nfunction consumeTerm() {\n this.skipSC();\n\n switch (this.tokenType) {\n case NumberToken:\n return this.Number();\n\n case FunctionToken:\n return this.Function(this.readSequence, this.scope.Value);\n\n default:\n this.error('Number of function is expected');\n }\n}\n\nexport const name = 'Ratio';\nexport const structure = {\n left: ['Number', 'Function'],\n right: ['Number', 'Function', null]\n};\n\n// <number [0,∞]> [ / <number [0,∞]> ]?\nexport function parse() {\n const start = this.tokenStart;\n const left = consumeTerm.call(this);\n let right = null;\n\n this.skipSC();\n if (this.isDelim(SOLIDUS)) {\n this.eatDelim(SOLIDUS);\n right = consumeTerm.call(this);\n }\n\n return {\n type: 'Ratio',\n loc: this.getLocation(start, this.tokenStart),\n left,\n right\n };\n}\n\nexport function generate(node) {\n this.node(node.left);\n this.token(Delim, '/');\n if (node.right) {\n this.node(node.right);\n } else {\n this.node(NumberToken, 1);\n }\n}\n","import { WhiteSpace } from '../../tokenizer/index.js';\n\nfunction getOffsetExcludeWS() {\n if (this.tokenIndex > 0) {\n if (this.lookupType(-1) === WhiteSpace) {\n return this.tokenIndex > 1\n ? this.getTokenStart(this.tokenIndex - 1)\n : this.firstCharOffset;\n }\n }\n\n return this.tokenStart;\n}\n\nexport const name = 'Raw';\nexport const structure = {\n value: String\n};\n\nexport function parse(consumeUntil, excludeWhiteSpace) {\n const startOffset = this.getTokenStart(this.tokenIndex);\n let endOffset;\n\n this.skipUntilBalanced(this.tokenIndex, consumeUntil || this.consumeUntilBalanceEnd);\n\n if (excludeWhiteSpace && this.tokenStart > startOffset) {\n endOffset = getOffsetExcludeWS.call(this);\n } else {\n endOffset = this.tokenStart;\n }\n\n return {\n type: 'Raw',\n loc: this.getLocation(startOffset, endOffset),\n value: this.substring(startOffset, endOffset)\n };\n}\n\nexport function generate(node) {\n this.tokenize(node.value);\n}\n","import { LeftCurlyBracket } from '../../tokenizer/index.js';\n\nfunction consumeRaw() {\n return this.Raw(this.consumeUntilLeftCurlyBracket, true);\n}\n\nfunction consumePrelude() {\n const prelude = this.SelectorList();\n\n if (prelude.type !== 'Raw' &&\n this.eof === false &&\n this.tokenType !== LeftCurlyBracket) {\n this.error();\n }\n\n return prelude;\n}\n\nexport const name = 'Rule';\nexport const walkContext = 'rule';\nexport const structure = {\n prelude: ['SelectorList', 'Raw'],\n block: ['Block']\n};\n\nexport function parse() {\n const startToken = this.tokenIndex;\n const startOffset = this.tokenStart;\n let prelude;\n let block;\n\n if (this.parseRulePrelude) {\n prelude = this.parseWithFallback(consumePrelude, consumeRaw);\n } else {\n prelude = consumeRaw.call(this, startToken);\n }\n\n block = this.Block(true);\n\n return {\n type: 'Rule',\n loc: this.getLocation(startOffset, this.tokenStart),\n prelude,\n block\n };\n}\nexport function generate(node) {\n this.node(node.prelude);\n this.node(node.block);\n}\n\n","import {\n Ident,\n LeftParenthesis,\n RightParenthesis\n} from '../../tokenizer/index.js';\n\nexport const name = 'Scope';\nexport const structure = {\n root: ['SelectorList', 'Raw', null],\n limit: ['SelectorList', 'Raw', null]\n};\n\nexport function parse() {\n let root = null;\n let limit = null;\n\n this.skipSC();\n\n const startOffset = this.tokenStart;\n if (this.tokenType === LeftParenthesis) {\n this.next();\n this.skipSC();\n root = this.parseWithFallback(\n this.SelectorList,\n () => this.Raw(false, true)\n );\n this.skipSC();\n this.eat(RightParenthesis);\n }\n\n if (this.lookupNonWSType(0) === Ident) {\n this.skipSC();\n this.eatIdent('to');\n this.skipSC();\n this.eat(LeftParenthesis);\n this.skipSC();\n limit = this.parseWithFallback(\n this.SelectorList,\n () => this.Raw(false, true)\n );\n this.skipSC();\n this.eat(RightParenthesis);\n }\n\n return {\n type: 'Scope',\n loc: this.getLocation(startOffset, this.tokenStart),\n root,\n limit\n };\n}\n\nexport function generate(node) {\n if (node.root) {\n this.token(LeftParenthesis, '(');\n this.node(node.root);\n this.token(RightParenthesis, ')');\n }\n\n if (node.limit) {\n this.token(Ident, 'to');\n this.token(LeftParenthesis, '(');\n this.node(node.limit);\n this.token(RightParenthesis, ')');\n }\n}\n","export const name = 'Selector';\nexport const structure = {\n children: [[\n 'TypeSelector',\n 'IdSelector',\n 'ClassSelector',\n 'AttributeSelector',\n 'PseudoClassSelector',\n 'PseudoElementSelector',\n 'Combinator'\n ]]\n};\n\nexport function parse() {\n const children = this.readSequence(this.scope.Selector);\n\n // nothing were consumed\n if (this.getFirstListNode(children) === null) {\n this.error('Selector is expected');\n }\n\n return {\n type: 'Selector',\n loc: this.getLocationFromList(children),\n children\n };\n}\n\nexport function generate(node) {\n this.children(node);\n}\n","import { Comma } from '../../tokenizer/index.js';\n\nexport const name = 'SelectorList';\nexport const walkContext = 'selector';\nexport const structure = {\n children: [[\n 'Selector',\n 'Raw'\n ]]\n};\n\nexport function parse() {\n const children = this.createList();\n\n while (!this.eof) {\n children.push(this.Selector());\n\n if (this.tokenType === Comma) {\n this.next();\n continue;\n }\n\n break;\n }\n\n return {\n type: 'SelectorList',\n loc: this.getLocationFromList(children),\n children\n };\n}\n\nexport function generate(node) {\n this.children(node, () => this.token(Comma, ','));\n}\n","import { String as StringToken } from '../../tokenizer/index.js';\nimport { decode, encode } from '../../utils/string.js';\n\nexport const name = 'String';\nexport const structure = {\n value: String\n};\n\nexport function parse() {\n return {\n type: 'String',\n loc: this.getLocation(this.tokenStart, this.tokenEnd),\n value: decode(this.consume(StringToken))\n };\n}\n\nexport function generate(node) {\n this.token(StringToken, encode(node.value));\n}\n","import {\n isHexDigit,\n isWhiteSpace,\n isValidEscape,\n consumeEscaped,\n decodeEscaped\n} from '../tokenizer/index.js';\n\nconst REVERSE_SOLIDUS = 0x005c; // U+005C REVERSE SOLIDUS (\\)\nconst QUOTATION_MARK = 0x0022; // \"\nconst APOSTROPHE = 0x0027; // '\n\nexport function decode(str) {\n const len = str.length;\n const firstChar = str.charCodeAt(0);\n const start = firstChar === QUOTATION_MARK || firstChar === APOSTROPHE ? 1 : 0;\n const end = start === 1 && len > 1 && str.charCodeAt(len - 1) === firstChar ? len - 2 : len - 1;\n let decoded = '';\n\n for (let i = start; i <= end; i++) {\n let code = str.charCodeAt(i);\n\n if (code === REVERSE_SOLIDUS) {\n // special case at the ending\n if (i === end) {\n // if the next input code point is EOF, do nothing\n // otherwise include last quote as escaped\n if (i !== len - 1) {\n decoded = str.substr(i + 1);\n }\n break;\n }\n\n code = str.charCodeAt(++i);\n\n // consume escaped\n if (isValidEscape(REVERSE_SOLIDUS, code)) {\n const escapeStart = i - 1;\n const escapeEnd = consumeEscaped(str, escapeStart);\n\n i = escapeEnd - 1;\n decoded += decodeEscaped(str.substring(escapeStart + 1, escapeEnd));\n } else {\n // \\r\\n\n if (code === 0x000d && str.charCodeAt(i + 1) === 0x000a) {\n i++;\n }\n }\n } else {\n decoded += str[i];\n }\n }\n\n return decoded;\n}\n\n// https://drafts.csswg.org/cssom/#serialize-a-string\n// § 2.1. Common Serializing Idioms\nexport function encode(str, apostrophe) {\n const quote = apostrophe ? '\\'' : '\"';\n const quoteCode = apostrophe ? APOSTROPHE : QUOTATION_MARK;\n let encoded = '';\n let wsBeforeHexIsNeeded = false;\n\n for (let i = 0; i < str.length; i++) {\n const code = str.charCodeAt(i);\n\n // If the character is NULL (U+0000), then the REPLACEMENT CHARACTER (U+FFFD).\n if (code === 0x0000) {\n encoded += '\\uFFFD';\n continue;\n }\n\n // If the character is in the range [\\1-\\1f] (U+0001 to U+001F) or is U+007F,\n // the character escaped as code point.\n // Note: Do not compare with 0x0001 since 0x0000 is precessed before\n if (code <= 0x001f || code === 0x007F) {\n encoded += '\\\\' + code.toString(16);\n wsBeforeHexIsNeeded = true;\n continue;\n }\n\n // If the character is '\"' (U+0022) or \"\\\" (U+005C), the escaped character.\n if (code === quoteCode || code === REVERSE_SOLIDUS) {\n encoded += '\\\\' + str.charAt(i);\n wsBeforeHexIsNeeded = false;\n } else {\n if (wsBeforeHexIsNeeded && (isHexDigit(code) || isWhiteSpace(code))) {\n encoded += ' ';\n }\n\n // Otherwise, the character itself.\n encoded += str.charAt(i);\n wsBeforeHexIsNeeded = false;\n }\n }\n\n return quote + encoded + quote;\n}\n","import {\n WhiteSpace,\n Comment,\n AtKeyword,\n CDO,\n CDC\n} from '../../tokenizer/index.js';\n\nconst EXCLAMATIONMARK = 0x0021; // U+0021 EXCLAMATION MARK (!)\n\nfunction consumeRaw() {\n return this.Raw(null, false);\n}\n\nexport const name = 'StyleSheet';\nexport const walkContext = 'stylesheet';\nexport const structure = {\n children: [[\n 'Comment',\n 'CDO',\n 'CDC',\n 'Atrule',\n 'Rule',\n 'Raw'\n ]]\n};\n\nexport function parse() {\n const start = this.tokenStart;\n const children = this.createList();\n let child;\n\n scan:\n while (!this.eof) {\n switch (this.tokenType) {\n case WhiteSpace:\n this.next();\n continue;\n\n case Comment:\n // ignore comments except exclamation comments (i.e. /*! .. */) on top level\n if (this.charCodeAt(this.tokenStart + 2) !== EXCLAMATIONMARK) {\n this.next();\n continue;\n }\n\n child = this.Comment();\n break;\n\n case CDO: // <!--\n child = this.CDO();\n break;\n\n case CDC: // -->\n child = this.CDC();\n break;\n\n // CSS Syntax Module Level 3\n // §2.2 Error handling\n // At the \"top level\" of a stylesheet, an <at-keyword-token> starts an at-rule.\n case AtKeyword:\n child = this.parseWithFallback(this.Atrule, consumeRaw);\n break;\n\n // Anything else starts a qualified rule ...\n default:\n child = this.parseWithFallback(this.Rule, consumeRaw);\n }\n\n children.push(child);\n }\n\n return {\n type: 'StyleSheet',\n loc: this.getLocation(start, this.tokenStart),\n children\n };\n}\n\nexport function generate(node) {\n this.children(node);\n}\n","import {\n LeftParenthesis,\n RightParenthesis\n} from '../../tokenizer/index.js';\n\nexport const name = 'SupportsDeclaration';\nexport const structure = {\n declaration: 'Declaration'\n};\n\nexport function parse() {\n const start = this.tokenStart;\n\n this.eat(LeftParenthesis);\n this.skipSC();\n\n const declaration = this.Declaration();\n\n if (!this.eof) {\n this.eat(RightParenthesis);\n }\n\n return {\n type: 'SupportsDeclaration',\n loc: this.getLocation(start, this.tokenStart),\n declaration\n };\n}\n\nexport function generate(node) {\n this.token(LeftParenthesis, '(');\n this.node(node.declaration);\n this.token(RightParenthesis, ')');\n}\n","import { Ident } from '../../tokenizer/index.js';\n\nconst ASTERISK = 0x002A; // U+002A ASTERISK (*)\nconst VERTICALLINE = 0x007C; // U+007C VERTICAL LINE (|)\n\nfunction eatIdentifierOrAsterisk() {\n if (this.tokenType !== Ident &&\n this.isDelim(ASTERISK) === false) {\n this.error('Identifier or asterisk is expected');\n }\n\n this.next();\n}\n\nexport const name = 'TypeSelector';\nexport const structure = {\n name: String\n};\n\n// ident\n// ident|ident\n// ident|*\n// *\n// *|ident\n// *|*\n// |ident\n// |*\nexport function parse() {\n const start = this.tokenStart;\n\n if (this.isDelim(VERTICALLINE)) {\n this.next();\n eatIdentifierOrAsterisk.call(this);\n } else {\n eatIdentifierOrAsterisk.call(this);\n\n if (this.isDelim(VERTICALLINE)) {\n this.next();\n eatIdentifierOrAsterisk.call(this);\n }\n }\n\n return {\n type: 'TypeSelector',\n loc: this.getLocation(start, this.tokenStart),\n name: this.substrToCursor(start)\n };\n}\n\nexport function generate(node) {\n this.tokenize(node.name);\n}\n","import {\n isHexDigit,\n Ident,\n Number,\n Dimension\n} from '../../tokenizer/index.js';\n\nconst PLUSSIGN = 0x002B; // U+002B PLUS SIGN (+)\nconst HYPHENMINUS = 0x002D; // U+002D HYPHEN-MINUS (-)\nconst QUESTIONMARK = 0x003F; // U+003F QUESTION MARK (?)\n\nfunction eatHexSequence(offset, allowDash) {\n let len = 0;\n\n for (let pos = this.tokenStart + offset; pos < this.tokenEnd; pos++) {\n const code = this.charCodeAt(pos);\n\n if (code === HYPHENMINUS && allowDash && len !== 0) {\n eatHexSequence.call(this, offset + len + 1, false);\n return -1;\n }\n\n if (!isHexDigit(code)) {\n this.error(\n allowDash && len !== 0\n ? 'Hyphen minus' + (len < 6 ? ' or hex digit' : '') + ' is expected'\n : (len < 6 ? 'Hex digit is expected' : 'Unexpected input'),\n pos\n );\n }\n\n if (++len > 6) {\n this.error('Too many hex digits', pos);\n };\n }\n\n this.next();\n return len;\n}\n\nfunction eatQuestionMarkSequence(max) {\n let count = 0;\n\n while (this.isDelim(QUESTIONMARK)) {\n if (++count > max) {\n this.error('Too many question marks');\n }\n\n this.next();\n }\n}\n\nfunction startsWith(code) {\n if (this.charCodeAt(this.tokenStart) !== code) {\n this.error((code === PLUSSIGN ? 'Plus sign' : 'Hyphen minus') + ' is expected');\n }\n}\n\n// https://drafts.csswg.org/css-syntax/#urange\n// Informally, the <urange> production has three forms:\n// U+0001\n// Defines a range consisting of a single code point, in this case the code point \"1\".\n// U+0001-00ff\n// Defines a range of codepoints between the first and the second value, in this case\n// the range between \"1\" and \"ff\" (255 in decimal) inclusive.\n// U+00??\n// Defines a range of codepoints where the \"?\" characters range over all hex digits,\n// in this case defining the same as the value U+0000-00ff.\n// In each form, a maximum of 6 digits is allowed for each hexadecimal number (if you treat \"?\" as a hexadecimal digit).\n//\n// <urange> =\n// u '+' <ident-token> '?'* |\n// u <dimension-token> '?'* |\n// u <number-token> '?'* |\n// u <number-token> <dimension-token> |\n// u <number-token> <number-token> |\n// u '+' '?'+\nfunction scanUnicodeRange() {\n let hexLength = 0;\n\n switch (this.tokenType) {\n case Number:\n // u <number-token> '?'*\n // u <number-token> <dimension-token>\n // u <number-token> <number-token>\n hexLength = eatHexSequence.call(this, 1, true);\n\n if (this.isDelim(QUESTIONMARK)) {\n eatQuestionMarkSequence.call(this, 6 - hexLength);\n break;\n }\n\n if (this.tokenType === Dimension ||\n this.tokenType === Number) {\n startsWith.call(this, HYPHENMINUS);\n eatHexSequence.call(this, 1, false);\n break;\n }\n\n break;\n\n case Dimension:\n // u <dimension-token> '?'*\n hexLength = eatHexSequence.call(this, 1, true);\n\n if (hexLength > 0) {\n eatQuestionMarkSequence.call(this, 6 - hexLength);\n }\n\n break;\n\n default:\n // u '+' <ident-token> '?'*\n // u '+' '?'+\n this.eatDelim(PLUSSIGN);\n\n if (this.tokenType === Ident) {\n hexLength = eatHexSequence.call(this, 0, true);\n if (hexLength > 0) {\n eatQuestionMarkSequence.call(this, 6 - hexLength);\n }\n break;\n }\n\n if (this.isDelim(QUESTIONMARK)) {\n this.next();\n eatQuestionMarkSequence.call(this, 5);\n break;\n }\n\n this.error('Hex digit or question mark is expected');\n }\n}\n\nexport const name = 'UnicodeRange';\nexport const structure = {\n value: String\n};\n\nexport function parse() {\n const start = this.tokenStart;\n\n // U or u\n this.eatIdent('u');\n scanUnicodeRange.call(this);\n\n return {\n type: 'UnicodeRange',\n loc: this.getLocation(start, this.tokenStart),\n value: this.substrToCursor(start)\n };\n}\n\nexport function generate(node) {\n this.tokenize(node.value);\n}\n","import * as url from '../../utils/url.js';\nimport * as string from '../../utils/string.js';\nimport {\n Function as FunctionToken,\n String as StringToken,\n Url,\n RightParenthesis\n} from '../../tokenizer/index.js';\n\nexport const name = 'Url';\nexport const structure = {\n value: String\n};\n\n// <url-token> | <function-token> <string> )\nexport function parse() {\n const start = this.tokenStart;\n let value;\n\n switch (this.tokenType) {\n case Url:\n value = url.decode(this.consume(Url));\n break;\n\n case FunctionToken:\n if (!this.cmpStr(this.tokenStart, this.tokenEnd, 'url(')) {\n this.error('Function name must be `url`');\n }\n\n this.eat(FunctionToken);\n this.skipSC();\n value = string.decode(this.consume(StringToken));\n this.skipSC();\n if (!this.eof) {\n this.eat(RightParenthesis);\n }\n break;\n\n default:\n this.error('Url or Function is expected');\n }\n\n return {\n type: 'Url',\n loc: this.getLocation(start, this.tokenStart),\n value\n };\n}\n\nexport function generate(node) {\n this.token(Url, url.encode(node.value));\n}\n","import {\n isHexDigit,\n isWhiteSpace,\n isValidEscape,\n consumeEscaped,\n decodeEscaped\n} from '../tokenizer/index.js';\n\nconst SPACE = 0x0020; // U+0020 SPACE\nconst REVERSE_SOLIDUS = 0x005c; // U+005C REVERSE SOLIDUS (\\)\nconst QUOTATION_MARK = 0x0022; // \"\nconst APOSTROPHE = 0x0027; // '\nconst LEFTPARENTHESIS = 0x0028; // U+0028 LEFT PARENTHESIS (()\nconst RIGHTPARENTHESIS = 0x0029; // U+0029 RIGHT PARENTHESIS ())\n\nexport function decode(str) {\n const len = str.length;\n let start = 4; // length of \"url(\"\n let end = str.charCodeAt(len - 1) === RIGHTPARENTHESIS ? len - 2 : len - 1;\n let decoded = '';\n\n while (start < end && isWhiteSpace(str.charCodeAt(start))) {\n start++;\n }\n\n while (start < end && isWhiteSpace(str.charCodeAt(end))) {\n end--;\n }\n\n for (let i = start; i <= end; i++) {\n let code = str.charCodeAt(i);\n\n if (code === REVERSE_SOLIDUS) {\n // special case at the ending\n if (i === end) {\n // if the next input code point is EOF, do nothing\n // otherwise include last left parenthesis as escaped\n if (i !== len - 1) {\n decoded = str.substr(i + 1);\n }\n break;\n }\n\n code = str.charCodeAt(++i);\n\n // consume escaped\n if (isValidEscape(REVERSE_SOLIDUS, code)) {\n const escapeStart = i - 1;\n const escapeEnd = consumeEscaped(str, escapeStart);\n\n i = escapeEnd - 1;\n decoded += decodeEscaped(str.substring(escapeStart + 1, escapeEnd));\n } else {\n // \\r\\n\n if (code === 0x000d && str.charCodeAt(i + 1) === 0x000a) {\n i++;\n }\n }\n } else {\n decoded += str[i];\n }\n }\n\n return decoded;\n}\n\nexport function encode(str) {\n let encoded = '';\n let wsBeforeHexIsNeeded = false;\n\n for (let i = 0; i < str.length; i++) {\n const code = str.charCodeAt(i);\n\n // If the character is NULL (U+0000), then the REPLACEMENT CHARACTER (U+FFFD).\n if (code === 0x0000) {\n encoded += '\\uFFFD';\n continue;\n }\n\n // If the character is in the range [\\1-\\1f] (U+0001 to U+001F) or is U+007F,\n // the character escaped as code point.\n // Note: Do not compare with 0x0001 since 0x0000 is precessed before\n if (code <= 0x001f || code === 0x007F) {\n encoded += '\\\\' + code.toString(16);\n wsBeforeHexIsNeeded = true;\n continue;\n }\n\n if (code === SPACE ||\n code === REVERSE_SOLIDUS ||\n code === QUOTATION_MARK ||\n code === APOSTROPHE ||\n code === LEFTPARENTHESIS ||\n code === RIGHTPARENTHESIS) {\n encoded += '\\\\' + str.charAt(i);\n wsBeforeHexIsNeeded = false;\n } else {\n if (wsBeforeHexIsNeeded && isHexDigit(code)) {\n encoded += ' ';\n }\n\n encoded += str.charAt(i);\n wsBeforeHexIsNeeded = false;\n }\n }\n\n return 'url(' + encoded + ')';\n}\n","export const name = 'Value';\nexport const structure = {\n children: [[]]\n};\n\nexport function parse() {\n const start = this.tokenStart;\n const children = this.readSequence(this.scope.Value);\n\n return {\n type: 'Value',\n loc: this.getLocation(start, this.tokenStart),\n children\n };\n}\n\nexport function generate(node) {\n this.children(node);\n}\n","import { WhiteSpace } from '../../tokenizer/index.js';\n\nconst SPACE = Object.freeze({\n type: 'WhiteSpace',\n loc: null,\n value: ' '\n});\n\nexport const name = 'WhiteSpace';\nexport const structure = {\n value: String\n};\n\nexport function parse() {\n this.eat(WhiteSpace);\n return SPACE;\n\n // return {\n // type: 'WhiteSpace',\n // loc: this.getLocation(this.tokenStart, this.tokenEnd),\n // value: this.consume(WHITESPACE)\n // };\n}\n\nexport function generate(node) {\n this.token(WhiteSpace, node.value);\n}\n","import { cssWideKeywords } from '../../lexer/generic-const.js';\nimport definitions from '../../data.js';\nimport * as node from '../node/index.js';\n\nexport default {\n generic: true,\n cssWideKeywords,\n ...definitions,\n node\n};\n","export { default as AtrulePrelude } from './atrulePrelude.js';\nexport { default as Selector } from './selector.js';\nexport { default as Value } from './value.js';\n","import {\n Ident,\n String as StringToken,\n Number as NumberToken,\n Function as FunctionToken,\n Url,\n Hash,\n Dimension,\n Percentage,\n LeftParenthesis,\n LeftSquareBracket,\n Comma,\n Delim\n} from '../../tokenizer/index.js';\n\nconst NUMBERSIGN = 0x0023; // U+0023 NUMBER SIGN (#)\nconst ASTERISK = 0x002A; // U+002A ASTERISK (*)\nconst PLUSSIGN = 0x002B; // U+002B PLUS SIGN (+)\nconst HYPHENMINUS = 0x002D; // U+002D HYPHEN-MINUS (-)\nconst SOLIDUS = 0x002F; // U+002F SOLIDUS (/)\nconst U = 0x0075; // U+0075 LATIN SMALL LETTER U (u)\n\nexport default function defaultRecognizer(context) {\n switch (this.tokenType) {\n case Hash:\n return this.Hash();\n\n case Comma:\n return this.Operator();\n\n case LeftParenthesis:\n return this.Parentheses(this.readSequence, context.recognizer);\n\n case LeftSquareBracket:\n return this.Brackets(this.readSequence, context.recognizer);\n\n case StringToken:\n return this.String();\n\n case Dimension:\n return this.Dimension();\n\n case Percentage:\n return this.Percentage();\n\n case NumberToken:\n return this.Number();\n\n case FunctionToken:\n return this.cmpStr(this.tokenStart, this.tokenEnd, 'url(')\n ? this.Url()\n : this.Function(this.readSequence, context.recognizer);\n\n case Url:\n return this.Url();\n\n case Ident:\n // check for unicode range, it should start with u+ or U+\n if (this.cmpChar(this.tokenStart, U) &&\n this.cmpChar(this.tokenStart + 1, PLUSSIGN)) {\n return this.UnicodeRange();\n } else {\n return this.Identifier();\n }\n\n case Delim: {\n const code = this.charCodeAt(this.tokenStart);\n\n if (code === SOLIDUS ||\n code === ASTERISK ||\n code === PLUSSIGN ||\n code === HYPHENMINUS) {\n return this.Operator(); // TODO: replace with Delim\n }\n\n // TODO: produce a node with Delim node type\n\n if (code === NUMBERSIGN) {\n this.error('Hex or identifier is expected', this.tokenStart + 1);\n }\n\n break;\n }\n }\n};\n","import getNode from './default.js';\n\nexport default {\n getNode\n};\n","import {\n Delim,\n Ident,\n Dimension,\n Percentage,\n Number as NumberToken,\n Hash,\n Colon,\n LeftSquareBracket\n} from '../../tokenizer/index.js';\n\nconst NUMBERSIGN = 0x0023; // U+0023 NUMBER SIGN (#)\nconst AMPERSAND = 0x0026; // U+0026 AMPERSAND (&)\nconst ASTERISK = 0x002A; // U+002A ASTERISK (*)\nconst PLUSSIGN = 0x002B; // U+002B PLUS SIGN (+)\nconst SOLIDUS = 0x002F; // U+002F SOLIDUS (/)\nconst FULLSTOP = 0x002E; // U+002E FULL STOP (.)\nconst GREATERTHANSIGN = 0x003E; // U+003E GREATER-THAN SIGN (>)\nconst VERTICALLINE = 0x007C; // U+007C VERTICAL LINE (|)\nconst TILDE = 0x007E; // U+007E TILDE (~)\n\nfunction onWhiteSpace(next, children) {\n if (children.last !== null && children.last.type !== 'Combinator' &&\n next !== null && next.type !== 'Combinator') {\n children.push({ // FIXME: this.Combinator() should be used instead\n type: 'Combinator',\n loc: null,\n name: ' '\n });\n }\n}\n\nfunction getNode() {\n switch (this.tokenType) {\n case LeftSquareBracket:\n return this.AttributeSelector();\n\n case Hash:\n return this.IdSelector();\n\n case Colon:\n if (this.lookupType(1) === Colon) {\n return this.PseudoElementSelector();\n } else {\n return this.PseudoClassSelector();\n }\n\n case Ident:\n return this.TypeSelector();\n\n case NumberToken:\n case Percentage:\n return this.Percentage();\n\n case Dimension:\n // throws when .123ident\n if (this.charCodeAt(this.tokenStart) === FULLSTOP) {\n this.error('Identifier is expected', this.tokenStart + 1);\n }\n break;\n\n case Delim: {\n const code = this.charCodeAt(this.tokenStart);\n\n switch (code) {\n case PLUSSIGN:\n case GREATERTHANSIGN:\n case TILDE:\n case SOLIDUS: // /deep/\n return this.Combinator();\n\n case FULLSTOP:\n return this.ClassSelector();\n\n case ASTERISK:\n case VERTICALLINE:\n return this.TypeSelector();\n\n case NUMBERSIGN:\n return this.IdSelector();\n\n case AMPERSAND:\n return this.NestingSelector();\n }\n\n break;\n }\n }\n};\n\nexport default {\n onWhiteSpace,\n getNode\n};\n","// legacy IE function\n// expression( <any-value> )\nexport default function() {\n return this.createSingleNodeList(\n this.Raw(null, false)\n );\n}\n","import { Comma, WhiteSpace } from '../../tokenizer/index.js';\n\n// var( <ident> , <value>? )\nexport default function() {\n const children = this.createList();\n\n this.skipSC();\n\n // NOTE: Don't check more than a first argument is an ident, rest checks are for lexer\n children.push(this.Identifier());\n\n this.skipSC();\n\n if (this.tokenType === Comma) {\n children.push(this.Operator());\n\n const startIndex = this.tokenIndex;\n const value = this.parseCustomProperty\n ? this.Value(null)\n : this.Raw(this.consumeUntilExclamationMarkOrSemicolon, false);\n\n if (value.type === 'Value' && value.children.isEmpty) {\n for (let offset = startIndex - this.tokenIndex; offset <= 0; offset++) {\n if (this.lookupType(offset) === WhiteSpace) {\n value.children.appendData({\n type: 'WhiteSpace',\n loc: null,\n value: ' '\n });\n break;\n }\n }\n }\n\n children.push(value);\n }\n\n return children;\n};\n","import getNode from './default.js';\nimport expressionFn from '../function/expression.js';\nimport varFn from '../function/var.js';\n\nfunction isPlusMinusOperator(node) {\n return (\n node !== null &&\n node.type === 'Operator' &&\n (node.value[node.value.length - 1] === '-' || node.value[node.value.length - 1] === '+')\n );\n}\n\nexport default {\n getNode,\n onWhiteSpace(next, children) {\n if (isPlusMinusOperator(next)) {\n next.value = ' ' + next.value;\n }\n if (isPlusMinusOperator(children.last)) {\n children.last.value += ' ';\n }\n },\n 'expression': expressionFn,\n 'var': varFn\n};\n","import { Ident } from '../../tokenizer/index.js';\n\n// https://drafts.csswg.org/css-contain-3/#container-rule\n// The keywords `none`, `and`, `not`, and `or` are excluded from the <custom-ident> above.\nconst nonContainerNameKeywords = new Set(['none', 'and', 'not', 'or']);\n\nexport default {\n parse: {\n prelude() {\n const children = this.createList();\n\n if (this.tokenType === Ident) {\n const name = this.substring(this.tokenStart, this.tokenEnd);\n\n if (!nonContainerNameKeywords.has(name.toLowerCase())) {\n children.push(this.Identifier());\n }\n }\n\n children.push(this.Condition('container'));\n\n return children;\n },\n block(nested = false) {\n return this.Block(nested);\n }\n }\n};\n","export default {\n parse: {\n prelude: null,\n block() {\n return this.Block(true);\n }\n }\n};\n","import {\n String as StringToken,\n Ident,\n Url,\n Function as FunctionToken,\n LeftParenthesis,\n RightParenthesis\n} from '../../tokenizer/index.js';\n\nfunction parseWithFallback(parse, fallback) {\n return this.parseWithFallback(\n () => {\n try {\n return parse.call(this);\n } finally {\n this.skipSC();\n if (this.lookupNonWSType(0) !== RightParenthesis) {\n this.error();\n }\n }\n },\n fallback || (() => this.Raw(null, true))\n );\n}\n\nconst parseFunctions = {\n layer() {\n this.skipSC();\n\n const children = this.createList();\n const node = parseWithFallback.call(this, this.Layer);\n\n if (node.type !== 'Raw' || node.value !== '') {\n children.push(node);\n }\n\n return children;\n },\n supports() {\n this.skipSC();\n\n const children = this.createList();\n const node = parseWithFallback.call(\n this,\n this.Declaration,\n () => parseWithFallback.call(this, () => this.Condition('supports'))\n );\n\n if (node.type !== 'Raw' || node.value !== '') {\n children.push(node);\n }\n\n return children;\n }\n};\n\nexport default {\n parse: {\n prelude() {\n const children = this.createList();\n\n switch (this.tokenType) {\n case StringToken:\n children.push(this.String());\n break;\n\n case Url:\n case FunctionToken:\n children.push(this.Url());\n break;\n\n default:\n this.error('String or url() is expected');\n }\n\n this.skipSC();\n\n if (this.tokenType === Ident &&\n this.cmpStr(this.tokenStart, this.tokenEnd, 'layer')) {\n children.push(this.Identifier());\n } else if (\n this.tokenType === FunctionToken &&\n this.cmpStr(this.tokenStart, this.tokenEnd, 'layer(')\n ) {\n children.push(this.Function(null, parseFunctions));\n }\n\n this.skipSC();\n\n if (this.tokenType === FunctionToken &&\n this.cmpStr(this.tokenStart, this.tokenEnd, 'supports(')) {\n children.push(this.Function(null, parseFunctions));\n }\n\n if (this.lookupNonWSType(0) === Ident ||\n this.lookupNonWSType(0) === LeftParenthesis) {\n children.push(this.MediaQueryList());\n }\n\n return children;\n },\n block: null\n }\n};\n","export default {\n parse: {\n prelude() {\n return this.createSingleNodeList(\n this.LayerList()\n );\n },\n block() {\n return this.Block(false);\n }\n }\n};\n","export default {\n parse: {\n prelude() {\n return this.createSingleNodeList(\n this.MediaQueryList()\n );\n },\n block(nested = false) {\n return this.Block(nested);\n }\n }\n};\n","export default {\n parse: {\n prelude() {\n return this.createSingleNodeList(\n this.SelectorList()\n );\n },\n block() {\n return this.Block(true);\n }\n }\n};\n","export default {\n parse: {\n prelude() {\n return this.createSingleNodeList(\n this.SelectorList()\n );\n },\n block() {\n return this.Block(true);\n }\n }\n};\n","export default {\n parse: {\n prelude() {\n return this.createSingleNodeList(\n this.Scope()\n );\n },\n block(nested = false) {\n return this.Block(nested);\n }\n }\n};\n","export default {\n parse: {\n prelude: null,\n block(nested = false) {\n return this.Block(nested);\n }\n }\n};\n","export default {\n parse: {\n prelude() {\n return this.createSingleNodeList(\n this.Condition('supports')\n );\n },\n block(nested = false) {\n return this.Block(nested);\n }\n }\n};\n","import container from './container.js';\nimport fontFace from './font-face.js';\nimport importAtrule from './import.js';\nimport layer from './layer.js';\nimport media from './media.js';\nimport nest from './nest.js';\nimport page from './page.js';\nimport scope from './scope.js';\nimport startingStyle from './starting-style.js';\nimport supports from './supports.js';\n\nexport default {\n container,\n 'font-face': fontFace,\n import: importAtrule,\n layer,\n media,\n nest,\n page,\n scope,\n 'starting-style': startingStyle,\n supports\n};\n","import { Comma, String as StringToken, Ident, RightParenthesis } from '../../tokenizer/index.js';\n\nexport function parseLanguageRangeList() {\n const children = this.createList();\n\n this.skipSC();\n\n loop: while (!this.eof) {\n switch (this.tokenType) {\n case Ident:\n children.push(this.Identifier());\n break;\n\n case StringToken:\n children.push(this.String());\n break;\n\n case Comma:\n children.push(this.Operator());\n break;\n\n case RightParenthesis:\n break loop;\n\n default:\n this.error('Identifier, string or comma is expected');\n }\n\n this.skipSC();\n }\n\n return children;\n}\n","import { parseLanguageRangeList } from './lang.js';\n\nconst selectorList = {\n parse() {\n return this.createSingleNodeList(\n this.SelectorList()\n );\n }\n};\n\nconst selector = {\n parse() {\n return this.createSingleNodeList(\n this.Selector()\n );\n }\n};\n\nconst identList = {\n parse() {\n return this.createSingleNodeList(\n this.Identifier()\n );\n }\n};\n\nconst langList = {\n parse: parseLanguageRangeList\n};\n\nconst nth = {\n parse() {\n return this.createSingleNodeList(\n this.Nth()\n );\n }\n};\n\nexport default {\n 'dir': identList,\n 'has': selectorList,\n 'lang': langList,\n 'matches': selectorList,\n 'is': selectorList,\n '-moz-any': selectorList,\n '-webkit-any': selectorList,\n 'where': selectorList,\n 'not': selectorList,\n 'nth-child': nth,\n 'nth-last-child': nth,\n 'nth-last-of-type': nth,\n 'nth-of-type': nth,\n 'slotted': selector,\n 'host': selector,\n 'host-context': selector\n};\n","export { parse as AnPlusB } from './AnPlusB.js';\nexport { parse as Atrule } from './Atrule.js';\nexport { parse as AtrulePrelude } from './AtrulePrelude.js';\nexport { parse as AttributeSelector } from './AttributeSelector.js';\nexport { parse as Block } from './Block.js';\nexport { parse as Brackets } from './Brackets.js';\nexport { parse as CDC } from './CDC.js';\nexport { parse as CDO } from './CDO.js';\nexport { parse as ClassSelector } from './ClassSelector.js';\nexport { parse as Combinator } from './Combinator.js';\nexport { parse as Comment } from './Comment.js';\nexport { parse as Condition } from './Condition.js';\nexport { parse as Declaration } from './Declaration.js';\nexport { parse as DeclarationList } from './DeclarationList.js';\nexport { parse as Dimension } from './Dimension.js';\nexport { parse as Feature } from './Feature.js';\nexport { parse as FeatureFunction } from './FeatureFunction.js';\nexport { parse as FeatureRange } from './FeatureRange.js';\nexport { parse as Function } from './Function.js';\nexport { parse as GeneralEnclosed } from './GeneralEnclosed.js';\nexport { parse as Hash } from './Hash.js';\nexport { parse as Identifier } from './Identifier.js';\nexport { parse as IdSelector } from './IdSelector.js';\nexport { parse as Layer } from './Layer.js';\nexport { parse as LayerList } from './LayerList.js';\nexport { parse as MediaQuery } from './MediaQuery.js';\nexport { parse as MediaQueryList } from './MediaQueryList.js';\nexport { parse as NestingSelector } from './NestingSelector.js';\nexport { parse as Nth } from './Nth.js';\nexport { parse as Number } from './Number.js';\nexport { parse as Operator } from './Operator.js';\nexport { parse as Parentheses } from './Parentheses.js';\nexport { parse as Percentage } from './Percentage.js';\nexport { parse as PseudoClassSelector } from './PseudoClassSelector.js';\nexport { parse as PseudoElementSelector } from './PseudoElementSelector.js';\nexport { parse as Ratio } from './Ratio.js';\nexport { parse as Raw } from './Raw.js';\nexport { parse as Rule } from './Rule.js';\nexport { parse as Scope } from './Scope.js';\nexport { parse as Selector } from './Selector.js';\nexport { parse as SelectorList } from './SelectorList.js';\nexport { parse as String } from './String.js';\nexport { parse as StyleSheet } from './StyleSheet.js';\nexport { parse as SupportsDeclaration } from './SupportsDeclaration.js';\nexport { parse as TypeSelector } from './TypeSelector.js';\nexport { parse as UnicodeRange } from './UnicodeRange.js';\nexport { parse as Url } from './Url.js';\nexport { parse as Value } from './Value.js';\nexport { parse as WhiteSpace } from './WhiteSpace.js';\n","import * as scope from '../scope/index.js';\nimport atrule from '../atrule/index.js';\nimport pseudo from '../pseudo/index.js';\nimport * as node from '../node/index-parse.js';\n\nexport default {\n parseContext: {\n default: 'StyleSheet',\n stylesheet: 'StyleSheet',\n atrule: 'Atrule',\n atrulePrelude(options) {\n return this.AtrulePrelude(options.atrule ? String(options.atrule) : null);\n },\n mediaQueryList: 'MediaQueryList',\n mediaQuery: 'MediaQuery',\n condition(options) {\n return this.Condition(options.kind);\n },\n rule: 'Rule',\n selectorList: 'SelectorList',\n selector: 'Selector',\n block() {\n return this.Block(true);\n },\n declarationList: 'DeclarationList',\n declaration: 'Declaration',\n value: 'Value'\n },\n features: {\n supports: {\n selector() {\n return this.Selector();\n }\n },\n container: {\n style() {\n return this.Declaration();\n }\n }\n },\n scope,\n atrule,\n pseudo,\n node\n};\n","import * as node from '../node/index.js';\n\nexport default {\n node\n};\n","import createSyntax from './create.js';\nimport lexerConfig from './config/lexer.js';\nimport parserConfig from './config/parser.js';\nimport walkerConfig from './config/walker.js';\n\nexport default createSyntax({\n ...lexerConfig,\n ...parserConfig,\n ...walkerConfig\n});\n","import syntax from './syntax/index.js';\n\nexport * from './version.js';\nexport { default as createSyntax } from './syntax/create.js';\nexport { List } from './utils/List.js';\nexport { Lexer } from './lexer/Lexer.js';\nexport { tokenTypes, tokenNames, TokenStream, OffsetToLocation } from './tokenizer/index.js';\nexport * as definitionSyntax from './definition-syntax/index.js';\nexport { clone } from './utils/clone.js';\nexport * from './utils/names.js';\nexport * as ident from './utils/ident.js';\nexport * as string from './utils/string.js';\nexport * as url from './utils/url.js';\nexport const {\n tokenize,\n parse,\n generate,\n lexer,\n createLexer,\n\n walk,\n find,\n findLast,\n findAll,\n\n toPlainObject,\n fromPlainObject,\n\n fork\n} = syntax;\n","import * as csstree from \"css-tree\";\nimport type { Rule, StyleSheet } from \"css-tree\";\nimport type { StyleBlock } from \"./parse\";\n\nexport function createScopeAttr(scopeId?: string): string | null {\n return scopeId ? `data-o-scope-${scopeId}` : null;\n}\n\nfunction scopeSelectorList(selectorList: string, scopeAttr: string): string {\n const applyScopeToSegment = (segment: string): string => {\n const trimmed = segment.trim();\n if (!trimmed) {\n return trimmed;\n }\n\n if (trimmed.includes(scopeAttr)) {\n return trimmed;\n }\n\n const globalPattern = /:global\\(([^()]+)\\)/g;\n const localCandidate = trimmed.replace(globalPattern, \"\").trim();\n const normalized = trimmed.replace(globalPattern, \"$1\");\n\n if (!localCandidate) {\n return normalized;\n }\n\n if (normalized === \":root\") {\n return `[${scopeAttr}]`;\n }\n\n const pseudoIndex = normalized.search(/(?<!:):(?!:)/);\n if (pseudoIndex === -1) {\n return `${normalized}[${scopeAttr}]`;\n }\n\n return `${normalized.slice(0, pseudoIndex)}[${scopeAttr}]${normalized.slice(pseudoIndex)}`;\n };\n\n return selectorList\n .split(\",\")\n .map((selector) => selector.trim())\n .filter(Boolean)\n .map((selector) => {\n if (selector.startsWith(\"@\") || selector.includes(scopeAttr)) {\n return selector;\n }\n\n return selector\n .split(/(\\s+|[>+~])/)\n .map((part) => {\n if (!part || /^(\\s+|[>+~])$/.test(part)) {\n return part;\n }\n\n return applyScopeToSegment(part);\n })\n .join(\"\");\n })\n .join(\", \");\n}\n\nfunction scopeCss(css: string, scopeAttr: string): string {\n const ast = csstree.parse(css, {\n context: \"stylesheet\",\n positions: false,\n }) as StyleSheet;\n\n csstree.walk(ast, {\n visit: \"Rule\",\n enter(node) {\n const rule = node as Rule;\n if (!rule.prelude || rule.prelude.type !== \"SelectorList\") {\n return;\n }\n\n rule.prelude = csstree.parse(\n scopeSelectorList(csstree.generate(rule.prelude), scopeAttr),\n {\n context: \"selectorList\",\n positions: false,\n },\n ) as Rule[\"prelude\"];\n },\n });\n\n return csstree.generate(ast);\n}\n\nexport function hashScopeSeed(input: string): string {\n let hash = 2166136261;\n for (let index = 0; index < input.length; index += 1) {\n hash ^= input.charCodeAt(index);\n hash = Math.imul(hash, 16777619);\n }\n\n return Math.abs(hash >>> 0).toString(36);\n}\n\nexport function collectCss(blocks: StyleBlock[], scopeId?: string): string {\n const scopeAttr = createScopeAttr(scopeId);\n return blocks\n .map((block) => {\n const content = block.content.trim();\n if (!content) {\n return \"\";\n }\n\n if (!(\"global\" in block.attrs) && scopeAttr) {\n return scopeCss(content, scopeAttr);\n }\n\n return content;\n })\n .filter(Boolean)\n .join(\"\\n\\n\");\n}\n","export type CompilePhase =\n | \"parse-file\"\n | \"parse-script\"\n | \"analyze-script\"\n | \"transform-template\"\n | \"generate-module\"\n | \"transpile\";\n\nexport type CompileDiagnostic = {\n message: string;\n filename?: string;\n phase?: CompilePhase;\n line?: number;\n column?: number;\n index?: number;\n frame?: string;\n hint?: string;\n};\n\nexport type CompileErrorLike = Error & {\n loc?: {\n line?: number;\r\n column?: number;\r\n index?: number;\r\n start?: {\r\n line: number;\r\n column: number;\r\n index?: number;\r\n };\r\n };\n frame?: string;\n diagnostic?: CompileDiagnostic;\n phase?: CompilePhase;\n hint?: string;\n};\n\r\nfunction indexToLocation(source: string, index: number): {\r\n line: number;\r\n column: number;\r\n index: number;\r\n} {\r\n const safeIndex = Math.max(0, Math.min(index, source.length));\r\n const lines = source.slice(0, safeIndex).split(\"\\n\");\r\n return {\r\n line: lines.length,\r\n column: lines[lines.length - 1]?.length ?? 0,\r\n index: safeIndex,\r\n };\r\n}\r\n\r\nfunction createCodeFrame(\r\n source: string,\r\n line: number,\r\n column: number,\r\n contextLines = 2,\r\n): string {\r\n const lines = source.split(\"\\n\");\r\n const start = Math.max(0, line - 1 - contextLines);\r\n const end = Math.min(lines.length, line + contextLines);\r\n return lines\r\n .slice(start, end)\r\n .map((content, offset) => {\r\n const lineNumber = start + offset + 1;\r\n const prefix = `${String(lineNumber).padStart(4, \" \")} | `;\r\n if (lineNumber !== line) {\r\n return `${prefix}${content}`;\r\n }\r\n return `${prefix}${content}\\n | ${\" \".repeat(Math.max(column, 0))}^`;\r\n })\r\n .join(\"\\n\");\r\n}\r\n\r\nexport function createCompileError(\n message: string,\n source: string,\n index: number,\n options?: {\n filename?: string;\n phase?: CompilePhase;\n hint?: string;\n },\n): CompileErrorLike {\n const loc = indexToLocation(source, index);\n const error = new Error(message) as CompileErrorLike;\n error.loc = { start: loc };\n error.frame = createCodeFrame(source, loc.line, loc.column);\n error.phase = options?.phase;\n error.hint = options?.hint;\n error.diagnostic = {\n message,\n filename: options?.filename,\n phase: options?.phase,\n line: loc.line,\n column: loc.column + 1,\n index: loc.index,\n frame: error.frame,\n hint: options?.hint,\n };\n return error;\n}\n\nexport function normalizeCompileError(\n error: unknown,\n source: string,\n filename = \"component.olova\",\n): never {\n const compileError =\n (error instanceof Error ? error : new Error(String(error))) as CompileErrorLike;\n const start = compileError.loc?.start ?? compileError.loc;\n const line = start?.line;\n const column = start?.column;\n const phasePrefix = compileError.phase ? ` [${compileError.phase}]` : \"\";\n const locationSuffix =\n line === undefined || column === undefined\n ? \"\"\n : ` (${filename}:${line}:${column + 1})`;\n const normalizedMessage = compileError.message.replace(/^\\[olova\\]\\s*/, \"\");\n compileError.message = `[olova]${phasePrefix} ${normalizedMessage}${locationSuffix}`;\n if (line !== undefined && column !== undefined && !compileError.frame) {\n compileError.frame = createCodeFrame(source, line, column);\n }\n compileError.diagnostic = {\n message: normalizedMessage,\n filename,\n phase: compileError.phase,\n line,\n column: column === undefined ? undefined : column + 1,\n index: start?.index,\n frame: compileError.frame,\n hint: compileError.hint,\n };\n throw compileError;\n}\n","export type StyleBlock = {\r\n content: string;\r\n attrs: Record<string, string | true>;\r\n};\r\n\r\nexport type ParsedOlovaFile = {\r\n script: string;\r\n template: string;\r\n styles: StyleBlock[];\r\n};\r\n\r\ntype TagMatch = {\r\n fullStart: number;\r\n openEnd: number;\r\n closeStart: number;\r\n closeEnd: number;\r\n inner: string;\r\n attrs: Record<string, string | true>;\r\n};\r\n\r\nfunction isWhitespace(char: string): boolean {\r\n return /\\s/.test(char);\r\n}\r\n\r\nfunction skipQuoted(source: string, start: number, quote: string): number {\r\n let index = start + 1;\r\n while (index < source.length) {\r\n if (source[index] === \"\\\\\" && index + 1 < source.length) {\r\n index += 2;\r\n continue;\r\n }\r\n\r\n if (source[index] === quote) {\r\n return index + 1;\r\n }\r\n\r\n index += 1;\r\n }\r\n\r\n return source.length;\r\n}\r\n\r\nfunction findTagEnd(source: string, start: number): number {\r\n let index = start;\r\n while (index < source.length) {\r\n const char = source[index];\r\n if (char === '\"' || char === \"'\") {\r\n index = skipQuoted(source, index, char);\r\n continue;\r\n }\r\n\r\n if (char === \">\") {\r\n return index;\r\n }\r\n\r\n index += 1;\r\n }\r\n\r\n return -1;\r\n}\r\n\r\nfunction parseAttributes(source: string): Record<string, string | true> {\r\n const attrs: Record<string, string | true> = {};\r\n const attrRegex =\r\n /([:@A-Za-z_][-A-Za-z0-9_:.@]*)(?:\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)'|([^\\s>]+)))?/g;\r\n\r\n let match: RegExpExecArray | null;\r\n while ((match = attrRegex.exec(source)) !== null) {\r\n const [, name, doubleQuoted, singleQuoted, bare] = match;\r\n const value = doubleQuoted ?? singleQuoted ?? bare ?? true;\r\n attrs[name] = value;\r\n }\r\n\r\n return attrs;\r\n}\r\n\r\nfunction readOpeningTag(\r\n source: string,\r\n start: number,\r\n): { tag: string; openEnd: number; attrs: Record<string, string | true> } | null {\r\n if (source[start] !== \"<\") {\r\n return null;\r\n }\r\n\r\n const tagEnd = findTagEnd(source, start + 1);\r\n if (tagEnd < 0) {\r\n return null;\r\n }\r\n\r\n const raw = source.slice(start + 1, tagEnd).trim();\r\n if (!raw || raw.startsWith(\"/\") || raw.startsWith(\"!\")) {\r\n return null;\r\n }\r\n\r\n let splitIndex = 0;\r\n while (splitIndex < raw.length && !isWhitespace(raw[splitIndex]) && raw[splitIndex] !== \"/\") {\r\n splitIndex += 1;\r\n }\r\n\r\n const tag = raw.slice(0, splitIndex);\r\n const attrsSource = raw.slice(splitIndex).replace(/\\/\\s*$/, \"\").trim();\r\n return {\r\n tag,\r\n openEnd: tagEnd + 1,\r\n attrs: parseAttributes(attrsSource),\r\n };\r\n}\r\n\r\nfunction findMatchingTag(\r\n source: string,\r\n start: number,\r\n tagName: string,\r\n): TagMatch | null {\r\n const opening = readOpeningTag(source, start);\r\n if (!opening || opening.tag.toLowerCase() !== tagName.toLowerCase()) {\r\n return null;\r\n }\r\n\r\n const selfClosing = /\\/\\s*>$/.test(source.slice(start, opening.openEnd));\r\n if (selfClosing) {\r\n return {\r\n fullStart: start,\r\n openEnd: opening.openEnd,\r\n closeStart: opening.openEnd,\r\n closeEnd: opening.openEnd,\r\n inner: \"\",\r\n attrs: opening.attrs,\r\n };\r\n }\r\n\r\n let depth = 1;\r\n let index = opening.openEnd;\r\n\r\n while (index < source.length) {\r\n const next = source.indexOf(\"<\", index);\r\n if (next < 0) {\r\n break;\r\n }\r\n\r\n if (source.startsWith(\"<!--\", next)) {\r\n const commentEnd = source.indexOf(\"-->\", next + 4);\r\n index = commentEnd >= 0 ? commentEnd + 3 : source.length;\r\n continue;\r\n }\r\n\r\n if (source[next + 1] === \"/\") {\r\n const closeEnd = findTagEnd(source, next + 2);\r\n if (closeEnd < 0) {\r\n break;\r\n }\r\n\r\n const closeTag = source.slice(next + 2, closeEnd).trim();\r\n if (closeTag.toLowerCase() === tagName.toLowerCase()) {\r\n depth -= 1;\r\n if (depth === 0) {\r\n return {\r\n fullStart: start,\r\n openEnd: opening.openEnd,\r\n closeStart: next,\r\n closeEnd: closeEnd + 1,\r\n inner: source.slice(opening.openEnd, next),\r\n attrs: opening.attrs,\r\n };\r\n }\r\n }\r\n\r\n index = closeEnd + 1;\r\n continue;\r\n }\r\n\r\n const nested = readOpeningTag(source, next);\r\n if (!nested) {\r\n index = next + 1;\r\n continue;\r\n }\r\n\r\n if (nested.tag.toLowerCase() === tagName.toLowerCase()) {\r\n const nestedSelfClosing = /\\/\\s*>$/.test(source.slice(next, nested.openEnd));\r\n if (!nestedSelfClosing) {\r\n depth += 1;\r\n }\r\n }\r\n\r\n index = nested.openEnd;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction collectTopLevelBlocks(source: string, tagName: string): TagMatch[] {\r\n const blocks: TagMatch[] = [];\r\n let index = 0;\r\n\r\n while (index < source.length) {\r\n const next = source.indexOf(`<${tagName}`, index);\r\n if (next < 0) {\r\n break;\r\n }\r\n\r\n const previous = next > 0 ? source[next - 1] : \"\";\r\n if (previous && /[A-Za-z0-9_:-]/.test(previous)) {\r\n index = next + tagName.length + 1;\r\n continue;\r\n }\r\n\r\n const block = findMatchingTag(source, next, tagName);\r\n if (!block) {\r\n index = next + tagName.length + 1;\r\n continue;\r\n }\r\n\r\n blocks.push(block);\r\n index = block.closeEnd;\r\n }\r\n\r\n return blocks;\r\n}\r\n\r\nfunction removeRanges(source: string, ranges: Array<{ start: number; end: number }>): string {\r\n if (ranges.length === 0) {\r\n return source.trim();\r\n }\r\n\r\n const ordered = [...ranges].sort((a, b) => a.start - b.start);\r\n let cursor = 0;\r\n let output = \"\";\r\n\r\n for (const range of ordered) {\r\n output += source.slice(cursor, range.start);\r\n cursor = range.end;\r\n }\r\n\r\n output += source.slice(cursor);\r\n return output.trim();\r\n}\r\n\r\nexport function parseOlovaFile(source: string): ParsedOlovaFile {\r\n const scriptBlocks = collectTopLevelBlocks(source, \"script\");\r\n const styleBlocks = collectTopLevelBlocks(source, \"style\");\r\n\r\n const ranges = styleBlocks.map((block) => ({\r\n start: block.fullStart,\r\n end: block.closeEnd,\r\n }));\r\n\r\n for (const scriptBlock of scriptBlocks) {\r\n ranges.push({ start: scriptBlock.fullStart, end: scriptBlock.closeEnd });\r\n }\r\n\r\n return {\r\n script: scriptBlocks.map((block) => block.inner.trim()).filter(Boolean).join(\"\\n\\n\"),\r\n template: removeRanges(source, ranges),\r\n styles: styleBlocks.map((block) => ({\r\n content: block.inner.trim(),\r\n attrs: block.attrs,\r\n })),\r\n };\r\n}\r\n","// Adapted from https://github.com/mathiasbynens/he/blob/36afe179392226cf1b6ccdb16ebbb7a5a844d93a/src/he.js#L106-L134\n\nconst decodeMap = new Map([\n [0, 65_533],\n // C1 Unicode control character reference replacements\n [128, 8364],\n [130, 8218],\n [131, 402],\n [132, 8222],\n [133, 8230],\n [134, 8224],\n [135, 8225],\n [136, 710],\n [137, 8240],\n [138, 352],\n [139, 8249],\n [140, 338],\n [142, 381],\n [145, 8216],\n [146, 8217],\n [147, 8220],\n [148, 8221],\n [149, 8226],\n [150, 8211],\n [151, 8212],\n [152, 732],\n [153, 8482],\n [154, 353],\n [155, 8250],\n [156, 339],\n [158, 382],\n [159, 376],\n]);\n\n/**\n * Polyfill for `String.fromCodePoint`. It is used to create a string from a Unicode code point.\n */\nexport const fromCodePoint: (...codePoints: number[]) => string =\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, n/no-unsupported-features/es-builtins\n String.fromCodePoint ??\n ((codePoint: number): string => {\n let output = \"\";\n\n if (codePoint > 0xff_ff) {\n codePoint -= 0x1_00_00;\n output += String.fromCharCode(\n ((codePoint >>> 10) & 0x3_ff) | 0xd8_00,\n );\n codePoint = 0xdc_00 | (codePoint & 0x3_ff);\n }\n\n output += String.fromCharCode(codePoint);\n return output;\n });\n\n/**\n * Replace the given code point with a replacement character if it is a\n * surrogate or is outside the valid range. Otherwise return the code\n * point unchanged.\n */\nexport function replaceCodePoint(codePoint: number): number {\n if (\n (codePoint >= 0xd8_00 && codePoint <= 0xdf_ff) ||\n codePoint > 0x10_ff_ff\n ) {\n return 0xff_fd;\n }\n\n return decodeMap.get(codePoint) ?? codePoint;\n}\n\n/**\n * Replace the code point if relevant, then convert it to a string.\n *\n * @deprecated Use `fromCodePoint(replaceCodePoint(codePoint))` instead.\n * @param codePoint The code point to decode.\n * @returns The decoded code point.\n */\nexport function decodeCodePoint(codePoint: number): string {\n return fromCodePoint(replaceCodePoint(codePoint));\n}\n","/*\n * Shared base64 decode helper for generated decode data.\n * Assumes global atob is available.\n */\nexport function decodeBase64(input: string): Uint16Array {\n const binary: string =\n // eslint-disable-next-line n/no-unsupported-features/node-builtins\n typeof atob === \"function\"\n ? // Browser (and Node >=16)\n // eslint-disable-next-line n/no-unsupported-features/node-builtins\n atob(input)\n : // Older Node versions (<16)\n // eslint-disable-next-line n/no-unsupported-features/node-builtins\n typeof Buffer.from === \"function\"\n ? // eslint-disable-next-line n/no-unsupported-features/node-builtins\n Buffer.from(input, \"base64\").toString(\"binary\")\n : // eslint-disable-next-line unicorn/no-new-buffer, n/no-deprecated-api\n new Buffer(input, \"base64\").toString(\"binary\");\n\n const evenLength = binary.length & ~1; // Round down to even length\n const out = new Uint16Array(evenLength / 2);\n\n for (let index = 0, outIndex = 0; index < evenLength; index += 2) {\n const lo = binary.charCodeAt(index);\n const hi = binary.charCodeAt(index + 1);\n out[outIndex++] = lo | (hi << 8);\n }\n\n return out;\n}\n","// Generated using scripts/write-decode-map.ts\n\nimport { decodeBase64 } from \"../internal/decode-shared.js\";\nexport const htmlDecodeTree: Uint16Array = /* #__PURE__ */ decodeBase64(\n \"QR08ALkAAgH6AYsDNQR2BO0EPgXZBQEGLAbdBxMISQrvCmQLfQurDKQNLw4fD4YPpA+6D/IPAAAAAAAAAAAAAAAAKhBMEY8TmxUWF2EYLBkxGuAa3RsJHDscWR8YIC8jSCSIJcMl6ie3Ku8rEC0CLjoupS7kLgAIRU1hYmNmZ2xtbm9wcnN0dVQAWgBeAGUAaQBzAHcAfgCBAIQAhwCSAJoAoACsALMAbABpAGcAO4DGAMZAUAA7gCYAJkBjAHUAdABlADuAwQDBQHIiZXZlAAJhAAFpeW0AcgByAGMAO4DCAMJAEGRyAADgNdgE3XIAYQB2AGUAO4DAAMBA8CFoYZFj4SFjcgBhZAAAoFMqAAFncIsAjgBvAG4ABGFmAADgNdg43fAlbHlGdW5jdGlvbgCgYSBpAG4AZwA7gMUAxUAAAWNzpACoAHIAAOA12Jzc6SFnbgCgVCJpAGwAZABlADuAwwDDQG0AbAA7gMQAxEAABGFjZWZvcnN1xQDYANoA7QDxAPYA+QD8AAABY3LJAM8AayNzbGFzaAAAoBYidgHTANUAAKDnKmUAZAAAoAYjeQARZIABY3J0AOAA5QDrAGEidXNlAACgNSLuI291bGxpcwCgLCFhAJJjcgAA4DXYBd1wAGYAAOA12Dnd5SF2ZdhiYwDyAOoAbSJwZXEAAKBOIgAHSE9hY2RlZmhpbG9yc3UXARoBHwE6AVIBVQFiAWQBZgGCAakB6QHtAfIBYwB5ACdkUABZADuAqQCpQIABY3B5ACUBKAE1AfUhdGUGYWmg0iJ0KGFsRGlmZmVyZW50aWFsRAAAoEUhbCJleXMAAKAtIQACYWVpb0EBRAFKAU0B8iFvbgxhZABpAGwAO4DHAMdAcgBjAAhhbiJpbnQAAKAwIm8AdAAKYQABZG5ZAV0BaSJsbGEAuGB0I2VyRG90ALdg8gA5AWkAp2NyImNsZQAAAkRNUFRwAXQBeQF9AW8AdAAAoJkiaSJudXMAAKCWIuwhdXMAoJUiaSJtZXMAAKCXIm8AAAFjc4cBlAFrKndpc2VDb250b3VySW50ZWdyYWwAAKAyImUjQ3VybHkAAAFEUZwBpAFvJXVibGVRdW90ZQAAoB0gdSJvdGUAAKAZIAACbG5wdbABtgHNAdgBbwBuAGWgNyIAoHQqgAFnaXQAvAHBAcUB8iJ1ZW50AKBhIm4AdAAAoC8i7yV1ckludGVncmFsAKAuIgABZnLRAdMBAKACIe8iZHVjdACgECJuLnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbAAAoDMi7yFzcwCgLypjAHIAAOA12J7ccABDoNMiYQBwAACgTSKABURKU1phY2VmaW9zAAsCEgIVAhgCGwIsAjQCOQI9AnMCfwNvoEUh9CJyYWhkAKARKWMAeQACZGMAeQAFZGMAeQAPZIABZ3JzACECJQIoAuchZXIAoCEgcgAAoKEhaAB2AACg5CoAAWF5MAIzAvIhb24OYRRkbAB0oAciYQCUY3IAAOA12AfdAAFhZkECawIAAWNtRQJnAvIjaXRpY2FsAAJBREdUUAJUAl8CYwJjInV0ZQC0YG8AdAFZAloC2WJiJGxlQWN1dGUA3WJyImF2ZQBgYGkibGRlANxi7yFuZACgxCJmJWVyZW50aWFsRAAAoEYhcAR9AgAAAAAAAIECjgIAABoDZgAA4DXYO91EoagAhQKJAm8AdAAAoNwgcSJ1YWwAAKBQIuIhbGUAA0NETFJVVpkCqAK1Au8C/wIRA28AbgB0AG8AdQByAEkAbgB0AGUAZwByAGEA7ADEAW8AdAKvAgAAAACwAqhgbiNBcnJvdwAAoNMhAAFlb7kC0AJmAHQAgAFBUlQAwQLGAs0CciJyb3cAAKDQIekkZ2h0QXJyb3cAoNQhZQDlACsCbgBnAAABTFLWAugC5SFmdAABQVLcAuECciJyb3cAAKD4J+kkZ2h0QXJyb3cAoPon6SRnaHRBcnJvdwCg+SdpImdodAAAAUFU9gL7AnIicm93AACg0iFlAGUAAKCoInAAQQIGAwAAAAALA3Iicm93AACg0SFvJHduQXJyb3cAAKDVIWUlcnRpY2FsQmFyAACgJSJuAAADQUJMUlRhJAM2AzoDWgNxA3oDciJyb3cAAKGTIUJVLAMwA2EAcgAAoBMpcCNBcnJvdwAAoPUhciJldmUAEWPlIWZ00gJDAwAASwMAAFIDaSVnaHRWZWN0b3IAAKBQKWUkZVZlY3RvcgAAoF4p5SJjdG9yQqC9IWEAcgAAoFYpaSJnaHQA1AFiAwAAaQNlJGVWZWN0b3IAAKBfKeUiY3RvckKgwSFhAHIAAKBXKWUAZQBBoKQiciJyb3cAAKCnIXIAcgBvAPcAtAIAAWN0gwOHA3IA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YwAAoN8i4SFycnCgtiEAoD0pgKIqImJjZG9zACsVMBU6FT4VQRVyImNhcAAAoEgqAAFhdTQVNxVwAACgRipwAACgSipvAHQAAKCNInIAAKBFKgDgKiIA/gACYWxydksVURVuFXMVcgByAG2gtyEAoDwpeQCAAWV2dwBYFWUVaRVxAHACXxUAAAAAYxVyAGUA4wAXFXUA4wAZFWUAZQAAoM4iZSJkZ2UAAKDPImUAbgA7gKQApEBlI2Fycm93AAABbHJ7FX8V5SFmdACgtiFpImdodAAAoLchZQDkAG0VAAFjaYsVkRVvAG4AaQBuAPQAkwFuAHQAAKAxImwiY3R5AACgLSOACUFIYWJjZGVmaGlqbG9yc3R1d3oAuBW7Fb8V1RXgFegV+RUKFhUWHxZUFlcWZRbFFtsW7xb7FgUXChdyAPIAtAJhAHIAAKBlKQACZ2xyc8YVyhXOFdAV5yFlcgCgICDlIXRoAKA4IfIA9QxoAHagECAAoKMiawHZFd4VYSJyb3cAAKAPKWEA4wBfAgABYXnkFecV8iFvbg9hNGQAoUYhYW/tFfQVAAFnciEC8RVyAACgyiF0InNlcQAAoHcqgAFnbG0A/xUCFgUWO4CwALBAdABhALRjcCJ0eXYAAKCxKQABaXIOFhIW8yFodACgfykA4DXYId1hAHIAAAFschsWHRYAoMMhAKDCIYACYWVnc3YAKBauAjYWOhY+Fm0AAKHEIm9zLhY0Fm4AZABzoMQi9SFpdACgZiZhIm1tYQDdY2kAbgAAoPIiAKH3AGlvQxZRFmQAZQAAgfcAO29KFksW90BuI3RpbWVzAACgxyJuAPgAUBZjAHkAUmRjAG8CXhYAAAAAYhZyAG4AAKAeI28AcAAAoA0jgAJscHR1dwBuFnEWdRaSFp4W7CFhciRgZgAA4DXYVd0AotkCZW1wc30WhBaJFo0WcQBkoFAibwB0AACgUSJpIm51cwAAoDgi7CF1cwCgFCLxInVhcmUAoKEiYgBsAGUAYgBhAHIAdwBlAGQAZwDlANcAbgCAAWFkaAClFqoWtBZyAHIAbwD3APUMbwB3AG4AYQByAHIAbwB3APMA8xVhI3Jwb29uAAABbHK8FsAWZQBmAPQAHBZpAGcAaAD0AB4WYgHJFs8WawBhAHIAbwD3AJILbwLUFgAAAADYFnIAbgAAoB8jbwBwAACgDCOAAWNvdADhFukW7BYAAXJ55RboFgDgNdi53FVkbAAAoPYp8iFvaxFhAAFkcvMW9xZvAHQAAKDxImkA5qC/JVsSAAFhaP8WAhdyAPIANQNhAPIA1wvhIm5nbGUAoKYpAAFjaQ4XEBd5AF9k5yJyYXJyAKD/JwAJRGFjZGVmZ2xtbm9wcXJzdHV4MRc4F0YXWxcyBF4XaRd5F40XrBe0F78X2RcVGCEYLRg1GEAYAAFEbzUXgRZvAPQA+BUAAWNzPBdCF3UAdABlADuA6QDpQPQhZXIAoG4qAAJhaW95TRdQF1YXWhfyIW9uG2FyAGOgViI7gOoA6kDsIW9uAKBVIk1kbwB0ABdhAAFEcmIXZhdvAHQAAKBSIgDgNdgi3XKhmipuF3QXYQB2AGUAO4DoAOhAZKCWKm8AdAAAoJgqgKGZKmlscwCAF4UXhxfuInRlcnMAoOcjAKATIWSglSpvAHQAAKCXKoABYXBzAJMXlheiF2MAcgATYXQAeQBzogUinxcAAAAAoRdlAHQAAKAFInAAMaADIDMBqRerFwCgBCAAoAUgAAFnc7AXsRdLYXAAAKACIAABZ3C4F7sXbwBuABlhZgAA4DXYVt2AAWFscwDFF8sXzxdyAHOg1SJsAACg4yl1AHMAAKBxKmkAAKG1A2x21RfYF28AbgC1Y/VjAAJjc3V24BfoF/0XEBgAAWlv5BdWF3IAYwAAoFYiaQLuFwAAAADwF+0ADQThIW50AAFnbPUX+Rd0AHIAAKCWKuUhc3MAoJUqgAFhZWkAAxgGGAoYbABzAD1gcwB0AACgXyJ2AESgYSJEAACgeCrwImFyc2wAoOUpAAFEYRkYHRhvAHQAAKBTInIAcgAAoHEpgAFjZGkAJxgqGO0XcgAAoC8hbwD0AIwCAAFhaDEYMhi3YzuA8ADwQAABbXI5GD0YbAA7gOsA60BvAACgrCCAAWNpcABGGEgYSxhsACFgcwD0ACwEAAFlb08YVxhjAHQAYQB0AGkAbwDuABoEbgBlAG4AdABpAGEAbADlADME4Ql1GAAAgRgAAIMYiBgAAAAAoRilGAAAqhgAALsYvhjRGAAA1xgnGWwAbABpAG4AZwBkAG8AdABzAGUA8QBlF3kARGRtImFsZQAAoEAmgAFpbHIAjRiRGJ0Y7CFpZwCgA/tpApcYAAAAAJoYZwAAoAD7aQBnAACgBPsA4DXYI93sIWlnAKAB++whaWcA4GYAagCAAWFsdACvGLIYthh0AACgbSZpAGcAAKAC+24AcwAAoLElbwBmAJJh8AHCGAAAxhhmAADgNdhX3QABYWvJGMwYbADsAGsEdqDUIgCg2SphI3J0aW50AACgDSoAAWFv2hgiGQABY3PeGB8ZsQPnGP0YBRkSGRUZAAAdGbID7xjyGPQY9xj5GAAA+xg7gL0AvUAAoFMhO4C8ALxAAKBVIQCgWSEAoFshswEBGQAAAxkAoFQhAKBWIbQCCxkOGQAAAAAQGTuAvgC+QACgVyEAoFwhNQAAoFghtgEZGQAAGxkAoFohAKBdITgAAKBeIWwAAKBEIHcAbgAAoCIjYwByAADgNdi73IAIRWFiY2RlZmdpamxub3JzdHYARhlKGVoZXhlmGWkZkhmWGZkZnRmgGa0ZxhnLGc8Z4BkjGmygZyIAoIwqgAFjbXAAUBlTGVgZ9SF0ZfVhbQBhAOSgswM6FgCghipyImV2ZQAfYQABaXliGWUZcgBjAB1hM2RvAHQAIWGAoWUibHFzAMYEcBl6GfGhZSLOBAAAdhlsAGEAbgD0AN8EgKF+KmNkbACBGYQZjBljAACgqSpvAHQAb6CAKmyggioAoIQqZeDbIgD+cwAAoJQqcgAA4DXYJN3noGsirATtIWVsAKA3IWMAeQBTZIChdyJFYWoApxmpGasZAKCSKgCgpSoAoKQqAAJFYWVztBm2Gb0ZwhkAoGkicABwoIoq8iFveACgiipxoIgq8aCIKrUZaQBtAACg5yJwAGYAAOA12FjdYQB2AOUAYwIAAWNp0xnWGXIAAKAKIW0AAKFzImVs3BneGQCgjioAoJAqAIM+ADtjZGxxco0E6xn0GfgZ/BkBGgABY2nvGfEZAKCnKnIAAKB6Km8AdAAAoNci0CFhcgCglSl1ImVzdAAAoHwqgAJhZGVscwAKGvQZFhrVBCAa8AEPGgAAFBpwAHIAbwD4AFkZcgAAoHgpcQAAAWxxxAQbGmwAZQBzAPMASRlpAO0A5AQAAWVuJxouGnIjdG5lcXEAAOBpIgD+xQAsGgAFQWFiY2Vma29zeUAaQxpmGmoabRqDGocalhrCGtMacgDyAMwCAAJpbG1yShpOGlAaVBpyAHMA8ABxD2YAvWBpAGwA9AASBQABZHJYGlsaYwB5AEpkAKGUIWN3YBpkGmkAcgAAoEgpAKCtIWEAcgAAoA8h6SFyYyVhgAFhbHIAcxp7Gn8a8iF0c3WgZSZpAHQAAKBlJuwhaXAAoCYg4yFvbgCguSJyAADgNdgl3XMAAAFld4wakRphInJvdwAAoCUpYSJyb3cAAKAmKYACYW1vcHIAnxqjGqcauhq+GnIAcgAAoP8h9CFodACgOyJrAAABbHKsGrMaZSRmdGFycm93AACgqSHpJGdodGFycm93AKCqIWYAAOA12Fnd4iFhcgCgFSCAAWNsdADIGswa0BpyAADgNdi93GEAcwDoAGka8iFvaydhAAFicNca2xr1IWxsAKBDIOghZW4AoBAg4Qr2GgAA/RoAAAgbExsaGwAAIRs7GwAAAAA+G2IbmRuVG6sbAACyG80b0htjAHUAdABlADuA7QDtQAChYyBpeQEbBhtyAGMAO4DuAO5AOGQAAWN4CxsNG3kANWRjAGwAO4ChAKFAAAFmcssCFhsA4DXYJt1yAGEAdgBlADuA7ADsQIChSCFpbm8AJxsyGzYbAAFpbisbLxtuAHQAAKAMKnQAAKAtIuYhaW4AoNwpdABhAACgKSHsIWlnM2GAAWFvcABDG1sbXhuAAWNndABJG0sbWRtyACthgAFlbHAAcQVRG1UbaQBuAOUAyAVhAHIA9AByBWgAMWFmAACgtyJlAGQAtWEAoggiY2ZvdGkbbRt1G3kb4SFyZQCgBSFpAG4AdKAeImkAZQAAoN0pZABvAPQAWxsAoisiY2VscIEbhRuPG5QbYQBsAACguiIAAWdyiRuNG2UAcgDzACMQ4wCCG2EicmhrAACgFyryIW9kAKA8KgACY2dwdJ8boRukG6gbeQBRZG8AbgAvYWYAAOA12FrdYQC5Y3UAZQBzAHQAO4C/AL9AAAFjabUbuRtyAADgNdi+3G4AAKIIIkVkc3bCG8QbyBvQAwCg+SJvAHQAAKD1Inag9CIAoPMiaaBiIOwhZGUpYesB1hsAANkbYwB5AFZkbAA7gO8A70AAA2NmbW9zdeYb7hvyG/Ub+hsFHAABaXnqG+0bcgBjADVhOWRyAADgNdgn3eEhdGg3YnAAZgAA4DXYW93jAf8bAAADHHIAAOA12L/c8iFjeVhk6yFjeVRkAARhY2ZnaGpvcxUcGhwiHCYcKhwtHDAcNRzwIXBhdqC6A/BjAAFleR4cIRzkIWls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ZmdobG1vcHJzdHV3CiwNLBEsHSwnLDEsQCxLLFIsYix6LIQsjyzLLOgs7Sz/LAotcgDyAAkDYQByAACgYykAAWNyFSwbLHUAdABlADuA+gD6QPIACQ1yAOMBIywAACUseQBeZHYAZQBtYQABaXkrLDAscgBjADuA+wD7QENkgAFhYmgANyw6LD0scgDyANEO7CFhY3FhYQDyAOAOAAFpckQsSCzzIWh0AKB+KQDgNdgy3XIAYQB2AGUAO4D5APlAYQFWLF8scgAAAWxyWixcLACgvyEAoL4hbABrAACggCUAAWN0Zix2LG8CbCwAAAAAcyxyAG4AZaAcI3IAAKAcI28AcAAAoA8jcgBpAACg+CUAAWFsfiyBLGMAcgBrYTuAqACoQAABZ3CILIssbwBuAHNhZgAA4DXYZt0AA2FkaGxzdZksniynLLgsuyzFLHIAcgBvAPcACQ1vAHcAbgBhAHIAcgBvAPcA2A5hI3Jwb29uAAABbHKvLLMsZQBmAPQAWyxpAGcAaAD0AF0sdQDzAKYOaQAAocUDaGzBLMIs0mNvAG4AxWPwI2Fycm93cwCgyCGAAWNpdADRLOEs5CxvAtcsAAAAAN4scgBuAGWgHSNyAACgHSNvAHAAAKAOI24AZwBvYXIAaQAAoPklYwByAADgNdjK3IABZGlyAPMs9yz6LG8AdAAAoPAi7CFkZWlhaQBmoLUlAKC0JQABYW0DLQYtcgDyAMosbAA7gPwA/EDhIm5nbGUAoKcpgAdBQkRhY2RlZmxub3Byc3oAJy0qLTAtNC2bLZ0toS2/LcMtxy3TLdgt3C3gLfwtcgDyABADYQByAHag6CoAoOkqYQBzAOgA/gIAAW5yOC08LechcnQAoJwpgANla25wcnN0AJkpSC1NLVQtXi1iLYItYQBwAHAA4QAaHG8AdABoAGkAbgDnAKEXgAFoaXIAoSmzJFotbwBwAPQAdCVooJUh7wD4JgABaXVmLWotZwBtAOEAuygAAWJwbi14LXMjZXRuZXEAceCKIgD+AODLKgD+cyNldG5lcQBx4IsiAP4A4MwqAP4AAWhyhi2KLWUAdADhABIraSNhbmdsZQAAAWxyki2WLeUhZnQAoLIiaSJnaHQAAKCzInkAMmThIXNoAKCiIoABZWxyAKcttC24LWKiKCKuLQAAAACyLWEAcgAAoLsicQAAoFoi7CFpcACg7iIAAWJ0vC1eD2EA8gBfD3IAAOA12DPddAByAOkAlS1zAHUAAAFicM0t0C0A4IIi0iAA4IMi0iBwAGYAAOA12GfdcgBvAPAAWQt0AHIA6QCaLQABY3XkLegtcgAA4DXYy9wAAWJw7C30LW4AAAFFZXUt8S0A4IoiAP5uAAABRWV/LfktAOCLIgD+6SJnemFnAKCaKYADY2Vmb3BycwANLhAuJS4pLiMuLi40LukhcmN1YQABZGkULiEuAAFiZxguHC5hAHIAAKBfKmUAcaAnIgCgWSLlIXJwAKAYIXIAAOA12DTdcABmAADgNdho3WWgQCJhAHQA6ABqD2MAcgAA4DXYzNzjCuQRUC4AAFQuAABYLmIuAAAAAGMubS5wLnQuAAAAAIguki4AAJouJxIqEnQAcgDpAB0ScgAA4DXYNd0AAUFhWy5eLnIA8gDnAnIA8gCTB75jAAFBYWYuaS5yAPIA4AJyAPIAjAdhAPAAeh5pAHMAAKD7IoABZHB0APgReS6DLgABZmx9LoAuAOA12GnddQDzAP8RaQBtAOUABBIAAUFhiy6OLnIA8gDuAnIA8gCaBwABY3GVLgoScgAA4DXYzdwAAXB0nS6hLmwAdQDzACUScgDpACASAARhY2VmaW9zdbEuvC7ELsguzC7PLtQu2S5jAAABdXm2LrsudABlADuA/QD9QE9kAAFpecAuwy5yAGMAd2FLZG4AO4ClAKVAcgAA4DXYNt1jAHkAV2RwAGYAAOA12GrdYwByAADgNdjO3AABY23dLt8ueQBOZGwAO4D/AP9AAAVhY2RlZmhpb3N38y73Lv8uAi8MLxAvEy8YLx0vIi9jInV0ZQB6YQABYXn7Lv4u8iFvbn5hN2RvAHQAfGEAAWV0Bi8KL3QAcgDmAB8QYQC2Y3IAAOA12DfdYwB5ADZk5yJyYXJyAKDdIXAAZgAA4DXYa91jAHIAAOA12M/cAAFqbiYvKC8AoA0gagAAoAwg\",\n);\n","// Generated using scripts/write-decode-map.ts\n\nimport { decodeBase64 } from \"../internal/decode-shared.js\";\nexport const xmlDecodeTree: Uint16Array = /* #__PURE__ */ decodeBase64(\n \"AAJhZ2xxBwARABMAFQBtAg0AAAAAAA8AcAAmYG8AcwAnYHQAPmB0ADxg9SFvdCJg\",\n);\n","/**\n * Bit flags & masks for the binary trie encoding used for entity decoding.\n *\n * Bit layout (16 bits total):\n * 15..14 VALUE_LENGTH (+1 encoding; 0 => no value)\n * 13 FLAG13. If valueLength>0: semicolon required flag (implicit ';').\n * If valueLength==0: compact run flag.\n * 12..7 BRANCH_LENGTH Branch length (0 => single branch in 6..0 if jumpOffset==char) OR run length (when compact run)\n * 6..0 JUMP_TABLE Jump offset (jump table) OR single-branch char code OR first run char\n */\nexport enum BinTrieFlags {\n VALUE_LENGTH = 0b1100_0000_0000_0000,\n FLAG13 = 0b0010_0000_0000_0000,\n BRANCH_LENGTH = 0b0001_1111_1000_0000,\n JUMP_TABLE = 0b0000_0000_0111_1111,\n}\n","import { fromCodePoint, replaceCodePoint } from \"./decode-codepoint.js\";\nimport { htmlDecodeTree } from \"./generated/decode-data-html.js\";\nimport { xmlDecodeTree } from \"./generated/decode-data-xml.js\";\nimport { BinTrieFlags } from \"./internal/bin-trie-flags.js\";\n\nconst enum CharCodes {\n NUM = 35, // \"#\"\n SEMI = 59, // \";\"\n EQUALS = 61, // \"=\"\n ZERO = 48, // \"0\"\n NINE = 57, // \"9\"\n LOWER_A = 97, // \"a\"\n LOWER_F = 102, // \"f\"\n LOWER_X = 120, // \"x\"\n LOWER_Z = 122, // \"z\"\n UPPER_A = 65, // \"A\"\n UPPER_F = 70, // \"F\"\n UPPER_Z = 90, // \"Z\"\n}\n\n/** Bit that needs to be set to convert an upper case ASCII character to lower case */\nconst TO_LOWER_BIT = 0b10_0000;\n\nfunction isNumber(code: number): boolean {\n return code >= CharCodes.ZERO && code <= CharCodes.NINE;\n}\n\nfunction isHexadecimalCharacter(code: number): boolean {\n return (\n (code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_F) ||\n (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_F)\n );\n}\n\nfunction isAsciiAlphaNumeric(code: number): boolean {\n return (\n (code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_Z) ||\n (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_Z) ||\n isNumber(code)\n );\n}\n\n/**\n * Checks if the given character is a valid end character for an entity in an attribute.\n *\n * Attribute values that aren't terminated properly aren't parsed, and shouldn't lead to a parser error.\n * See the example in https://html.spec.whatwg.org/multipage/parsing.html#named-character-reference-state\n */\nfunction isEntityInAttributeInvalidEnd(code: number): boolean {\n return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code);\n}\n\nconst enum EntityDecoderState {\n EntityStart,\n NumericStart,\n NumericDecimal,\n NumericHex,\n NamedEntity,\n}\n\nexport enum DecodingMode {\n /** Entities in text nodes that can end with any character. */\n Legacy = 0,\n /** Only allow entities terminated with a semicolon. */\n Strict = 1,\n /** Entities in attributes have limitations on ending characters. */\n Attribute = 2,\n}\n\n/**\n * Producers for character reference errors as defined in the HTML spec.\n */\nexport interface EntityErrorProducer {\n missingSemicolonAfterCharacterReference(): void;\n absenceOfDigitsInNumericCharacterReference(\n consumedCharacters: number,\n ): void;\n validateNumericCharacterReference(code: number): void;\n}\n\n/**\n * Token decoder with support of writing partial entities.\n */\nexport class EntityDecoder {\n constructor(\n /** The tree used to decode entities. */\n // biome-ignore lint/correctness/noUnusedPrivateClassMembers: False positive\n private readonly decodeTree: Uint16Array,\n /**\n * The function that is called when a codepoint is decoded.\n *\n * For multi-byte named entities, this will be called multiple times,\n * with the second codepoint, and the same `consumed` value.\n *\n * @param codepoint The decoded codepoint.\n * @param consumed The number of bytes consumed by the decoder.\n */\n private readonly emitCodePoint: (cp: number, consumed: number) => void,\n /** An object that is used to produce errors. */\n private readonly errors?: EntityErrorProducer | undefined,\n ) {}\n\n /** The current state of the decoder. */\n private state = EntityDecoderState.EntityStart;\n /** Characters that were consumed while parsing an entity. */\n private consumed = 1;\n /**\n * The result of the entity.\n *\n * Either the result index of a numeric entity, or the codepoint of a\n * numeric entity.\n */\n private result = 0;\n\n /** The current index in the decode tree. */\n private treeIndex = 0;\n /** The number of characters that were consumed in excess. */\n private excess = 1;\n /** The mode in which the decoder is operating. */\n private decodeMode = DecodingMode.Strict;\n /** The number of characters that have been consumed in the current run. */\n private runConsumed = 0;\n\n /** Resets the instance to make it reusable. */\n startEntity(decodeMode: DecodingMode): void {\n this.decodeMode = decodeMode;\n this.state = EntityDecoderState.EntityStart;\n this.result = 0;\n this.treeIndex = 0;\n this.excess = 1;\n this.consumed = 1;\n this.runConsumed = 0;\n }\n\n /**\n * Write an entity to the decoder. This can be called multiple times with partial entities.\n * If the entity is incomplete, the decoder will return -1.\n *\n * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the\n * entity is incomplete, and resume when the next string is written.\n *\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The offset at which the entity begins. Should be 0 if this is not the first call.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n write(input: string, offset: number): number {\n switch (this.state) {\n case EntityDecoderState.EntityStart: {\n if (input.charCodeAt(offset) === CharCodes.NUM) {\n this.state = EntityDecoderState.NumericStart;\n this.consumed += 1;\n return this.stateNumericStart(input, offset + 1);\n }\n this.state = EntityDecoderState.NamedEntity;\n return this.stateNamedEntity(input, offset);\n }\n\n case EntityDecoderState.NumericStart: {\n return this.stateNumericStart(input, offset);\n }\n\n case EntityDecoderState.NumericDecimal: {\n return this.stateNumericDecimal(input, offset);\n }\n\n case EntityDecoderState.NumericHex: {\n return this.stateNumericHex(input, offset);\n }\n\n case EntityDecoderState.NamedEntity: {\n return this.stateNamedEntity(input, offset);\n }\n }\n }\n\n /**\n * Switches between the numeric decimal and hexadecimal states.\n *\n * Equivalent to the `Numeric character reference state` in the HTML spec.\n *\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n private stateNumericStart(input: string, offset: number): number {\n if (offset >= input.length) {\n return -1;\n }\n\n if ((input.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {\n this.state = EntityDecoderState.NumericHex;\n this.consumed += 1;\n return this.stateNumericHex(input, offset + 1);\n }\n\n this.state = EntityDecoderState.NumericDecimal;\n return this.stateNumericDecimal(input, offset);\n }\n\n /**\n * Parses a hexadecimal numeric entity.\n *\n * Equivalent to the `Hexademical character reference state` in the HTML spec.\n *\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n private stateNumericHex(input: string, offset: number): number {\n while (offset < input.length) {\n const char = input.charCodeAt(offset);\n if (isNumber(char) || isHexadecimalCharacter(char)) {\n // Convert hex digit to value (0-15); 'a'/'A' -> 10.\n const digit =\n char <= CharCodes.NINE\n ? char - CharCodes.ZERO\n : (char | TO_LOWER_BIT) - CharCodes.LOWER_A + 10;\n this.result = this.result * 16 + digit;\n this.consumed++;\n offset++;\n } else {\n return this.emitNumericEntity(char, 3);\n }\n }\n return -1; // Incomplete entity\n }\n\n /**\n * Parses a decimal numeric entity.\n *\n * Equivalent to the `Decimal character reference state` in the HTML spec.\n *\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n private stateNumericDecimal(input: string, offset: number): number {\n while (offset < input.length) {\n const char = input.charCodeAt(offset);\n if (isNumber(char)) {\n this.result = this.result * 10 + (char - CharCodes.ZERO);\n this.consumed++;\n offset++;\n } else {\n return this.emitNumericEntity(char, 2);\n }\n }\n return -1; // Incomplete entity\n }\n\n /**\n * Validate and emit a numeric entity.\n *\n * Implements the logic from the `Hexademical character reference start\n * state` and `Numeric character reference end state` in the HTML spec.\n *\n * @param lastCp The last code point of the entity. Used to see if the\n * entity was terminated with a semicolon.\n * @param expectedLength The minimum number of characters that should be\n * consumed. Used to validate that at least one digit\n * was consumed.\n * @returns The number of characters that were consumed.\n */\n private emitNumericEntity(lastCp: number, expectedLength: number): number {\n // Ensure we consumed at least one digit.\n if (this.consumed <= expectedLength) {\n this.errors?.absenceOfDigitsInNumericCharacterReference(\n this.consumed,\n );\n return 0;\n }\n\n // Figure out if this is a legit end of the entity\n if (lastCp === CharCodes.SEMI) {\n this.consumed += 1;\n } else if (this.decodeMode === DecodingMode.Strict) {\n return 0;\n }\n\n this.emitCodePoint(replaceCodePoint(this.result), this.consumed);\n\n if (this.errors) {\n if (lastCp !== CharCodes.SEMI) {\n this.errors.missingSemicolonAfterCharacterReference();\n }\n\n this.errors.validateNumericCharacterReference(this.result);\n }\n\n return this.consumed;\n }\n\n /**\n * Parses a named entity.\n *\n * Equivalent to the `Named character reference state` in the HTML spec.\n *\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n private stateNamedEntity(input: string, offset: number): number {\n const { decodeTree } = this;\n let current = decodeTree[this.treeIndex];\n // The length is the number of bytes of the value, including the current byte.\n let valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n\n while (offset < input.length) {\n // Handle compact runs (possibly inline): valueLength == 0 and SEMI_REQUIRED bit set.\n if (valueLength === 0 && (current & BinTrieFlags.FLAG13) !== 0) {\n const runLength =\n (current & BinTrieFlags.BRANCH_LENGTH) >> 7; /* 2..63 */\n\n // If we are starting a run, check the first char.\n if (this.runConsumed === 0) {\n const firstChar = current & BinTrieFlags.JUMP_TABLE;\n if (input.charCodeAt(offset) !== firstChar) {\n return this.result === 0\n ? 0\n : this.emitNotTerminatedNamedEntity();\n }\n offset++;\n this.excess++;\n this.runConsumed++;\n }\n\n // Check remaining characters in the run.\n while (this.runConsumed < runLength) {\n if (offset >= input.length) {\n return -1;\n }\n\n const charIndexInPacked = this.runConsumed - 1;\n const packedWord =\n decodeTree[\n this.treeIndex + 1 + (charIndexInPacked >> 1)\n ];\n const expectedChar =\n charIndexInPacked % 2 === 0\n ? packedWord & 0xff\n : (packedWord >> 8) & 0xff;\n\n if (input.charCodeAt(offset) !== expectedChar) {\n this.runConsumed = 0;\n return this.result === 0\n ? 0\n : this.emitNotTerminatedNamedEntity();\n }\n offset++;\n this.excess++;\n this.runConsumed++;\n }\n\n this.runConsumed = 0;\n this.treeIndex += 1 + (runLength >> 1);\n current = decodeTree[this.treeIndex];\n valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n }\n\n if (offset >= input.length) break;\n\n const char = input.charCodeAt(offset);\n\n /*\n * Implicit semicolon handling for nodes that require a semicolon but\n * don't have an explicit ';' branch stored in the trie. If we have\n * a value on the current node, it requires a semicolon, and the\n * current input character is a semicolon, emit the entity using the\n * current node (without descending further).\n */\n if (\n char === CharCodes.SEMI &&\n valueLength !== 0 &&\n (current & BinTrieFlags.FLAG13) !== 0\n ) {\n return this.emitNamedEntityData(\n this.treeIndex,\n valueLength,\n this.consumed + this.excess,\n );\n }\n\n this.treeIndex = determineBranch(\n decodeTree,\n current,\n this.treeIndex + Math.max(1, valueLength),\n char,\n );\n\n if (this.treeIndex < 0) {\n return this.result === 0 ||\n // If we are parsing an attribute\n (this.decodeMode === DecodingMode.Attribute &&\n // We shouldn't have consumed any characters after the entity,\n (valueLength === 0 ||\n // And there should be no invalid characters.\n isEntityInAttributeInvalidEnd(char)))\n ? 0\n : this.emitNotTerminatedNamedEntity();\n }\n\n current = decodeTree[this.treeIndex];\n valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n\n // If the branch is a value, store it and continue\n if (valueLength !== 0) {\n // If the entity is terminated by a semicolon, we are done.\n if (char === CharCodes.SEMI) {\n return this.emitNamedEntityData(\n this.treeIndex,\n valueLength,\n this.consumed + this.excess,\n );\n }\n\n // If we encounter a non-terminated (legacy) entity while parsing strictly, then ignore it.\n if (\n this.decodeMode !== DecodingMode.Strict &&\n (current & BinTrieFlags.FLAG13) === 0\n ) {\n this.result = this.treeIndex;\n this.consumed += this.excess;\n this.excess = 0;\n }\n }\n // Increment offset & excess for next iteration\n offset++;\n this.excess++;\n }\n\n return -1;\n }\n\n /**\n * Emit a named entity that was not terminated with a semicolon.\n *\n * @returns The number of characters consumed.\n */\n private emitNotTerminatedNamedEntity(): number {\n const { result, decodeTree } = this;\n\n const valueLength =\n (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;\n\n this.emitNamedEntityData(result, valueLength, this.consumed);\n this.errors?.missingSemicolonAfterCharacterReference();\n\n return this.consumed;\n }\n\n /**\n * Emit a named entity.\n *\n * @param result The index of the entity in the decode tree.\n * @param valueLength The number of bytes in the entity.\n * @param consumed The number of characters consumed.\n *\n * @returns The number of characters consumed.\n */\n private emitNamedEntityData(\n result: number,\n valueLength: number,\n consumed: number,\n ): number {\n const { decodeTree } = this;\n\n this.emitCodePoint(\n valueLength === 1\n ? decodeTree[result] &\n ~(BinTrieFlags.VALUE_LENGTH | BinTrieFlags.FLAG13)\n : decodeTree[result + 1],\n consumed,\n );\n if (valueLength === 3) {\n // For multi-byte values, we need to emit the second byte.\n this.emitCodePoint(decodeTree[result + 2], consumed);\n }\n\n return consumed;\n }\n\n /**\n * Signal to the parser that the end of the input was reached.\n *\n * Remaining data will be emitted and relevant errors will be produced.\n *\n * @returns The number of characters consumed.\n */\n end(): number {\n switch (this.state) {\n case EntityDecoderState.NamedEntity: {\n // Emit a named entity if we have one.\n return this.result !== 0 &&\n (this.decodeMode !== DecodingMode.Attribute ||\n this.result === this.treeIndex)\n ? this.emitNotTerminatedNamedEntity()\n : 0;\n }\n // Otherwise, emit a numeric entity if we have one.\n case EntityDecoderState.NumericDecimal: {\n return this.emitNumericEntity(0, 2);\n }\n case EntityDecoderState.NumericHex: {\n return this.emitNumericEntity(0, 3);\n }\n case EntityDecoderState.NumericStart: {\n this.errors?.absenceOfDigitsInNumericCharacterReference(\n this.consumed,\n );\n return 0;\n }\n case EntityDecoderState.EntityStart: {\n // Return 0 if we have no entity.\n return 0;\n }\n }\n }\n}\n\n/**\n * Creates a function that decodes entities in a string.\n *\n * @param decodeTree The decode tree.\n * @returns A function that decodes entities in a string.\n */\nfunction getDecoder(decodeTree: Uint16Array) {\n let returnValue = \"\";\n const decoder = new EntityDecoder(\n decodeTree,\n (data) => (returnValue += fromCodePoint(data)),\n );\n\n return function decodeWithTrie(\n input: string,\n decodeMode: DecodingMode,\n ): string {\n let lastIndex = 0;\n let offset = 0;\n\n while ((offset = input.indexOf(\"&\", offset)) >= 0) {\n returnValue += input.slice(lastIndex, offset);\n\n decoder.startEntity(decodeMode);\n\n const length = decoder.write(\n input,\n // Skip the \"&\"\n offset + 1,\n );\n\n if (length < 0) {\n lastIndex = offset + decoder.end();\n break;\n }\n\n lastIndex = offset + length;\n // If `length` is 0, skip the current `&` and continue.\n offset = length === 0 ? lastIndex + 1 : lastIndex;\n }\n\n const result = returnValue + input.slice(lastIndex);\n\n // Make sure we don't keep a reference to the final string.\n returnValue = \"\";\n\n return result;\n };\n}\n\n/**\n * Determines the branch of the current node that is taken given the current\n * character. This function is used to traverse the trie.\n *\n * @param decodeTree The trie.\n * @param current The current node.\n * @param nodeIdx The index right after the current node and its value.\n * @param char The current character.\n * @returns The index of the next node, or -1 if no branch is taken.\n */\nexport function determineBranch(\n decodeTree: Uint16Array,\n current: number,\n nodeIndex: number,\n char: number,\n): number {\n const branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;\n const jumpOffset = current & BinTrieFlags.JUMP_TABLE;\n\n // Case 1: Single branch encoded in jump offset\n if (branchCount === 0) {\n return jumpOffset !== 0 && char === jumpOffset ? nodeIndex : -1;\n }\n\n // Case 2: Multiple branches encoded in jump table\n if (jumpOffset) {\n const value = char - jumpOffset;\n\n return value < 0 || value >= branchCount\n ? -1\n : decodeTree[nodeIndex + value] - 1;\n }\n\n // Case 3: Multiple branches encoded in packed dictionary (two keys per uint16)\n const packedKeySlots = (branchCount + 1) >> 1;\n\n /*\n * Treat packed keys as a virtual sorted array of length `branchCount`.\n * Key(i) = low byte for even i, high byte for odd i in slot i>>1.\n */\n let lo = 0;\n let hi = branchCount - 1;\n\n while (lo <= hi) {\n const mid = (lo + hi) >>> 1;\n const slot = mid >> 1;\n const packed = decodeTree[nodeIndex + slot];\n const midKey = (packed >> ((mid & 1) * 8)) & 0xff;\n\n if (midKey < char) {\n lo = mid + 1;\n } else if (midKey > char) {\n hi = mid - 1;\n } else {\n return decodeTree[nodeIndex + packedKeySlots + mid];\n }\n }\n\n return -1;\n}\n\nconst htmlDecoder = /* #__PURE__ */ getDecoder(htmlDecodeTree);\nconst xmlDecoder = /* #__PURE__ */ getDecoder(xmlDecodeTree);\n\n/**\n * Decodes an HTML string.\n *\n * @param htmlString The string to decode.\n * @param mode The decoding mode.\n * @returns The decoded string.\n */\nexport function decodeHTML(\n htmlString: string,\n mode: DecodingMode = DecodingMode.Legacy,\n): string {\n return htmlDecoder(htmlString, mode);\n}\n\n/**\n * Decodes an HTML string in an attribute.\n *\n * @param htmlAttribute The string to decode.\n * @returns The decoded string.\n */\nexport function decodeHTMLAttribute(htmlAttribute: string): string {\n return htmlDecoder(htmlAttribute, DecodingMode.Attribute);\n}\n\n/**\n * Decodes an HTML string, requiring all entities to be terminated by a semicolon.\n *\n * @param htmlString The string to decode.\n * @returns The decoded string.\n */\nexport function decodeHTMLStrict(htmlString: string): string {\n return htmlDecoder(htmlString, DecodingMode.Strict);\n}\n\n/**\n * Decodes an XML string, requiring all entities to be terminated by a semicolon.\n *\n * @param xmlString The string to decode.\n * @returns The decoded string.\n */\nexport function decodeXML(xmlString: string): string {\n return xmlDecoder(xmlString, DecodingMode.Strict);\n}\n\nexport {\n decodeCodePoint,\n fromCodePoint,\n replaceCodePoint,\n} from \"./decode-codepoint.js\";\n// Re-export for use by eg. htmlparser2\nexport { htmlDecodeTree } from \"./generated/decode-data-html.js\";\nexport { xmlDecodeTree } from \"./generated/decode-data-xml.js\";\n","import {\n EntityDecoder,\n DecodingMode,\n htmlDecodeTree,\n xmlDecodeTree,\n} from \"entities/decode\";\n\nconst enum CharCodes {\n Tab = 0x9, // \"\\t\"\n NewLine = 0xa, // \"\\n\"\n FormFeed = 0xc, // \"\\f\"\n CarriageReturn = 0xd, // \"\\r\"\n Space = 0x20, // \" \"\n ExclamationMark = 0x21, // \"!\"\n Number = 0x23, // \"#\"\n Amp = 0x26, // \"&\"\n SingleQuote = 0x27, // \"'\"\n DoubleQuote = 0x22, // '\"'\n Dash = 0x2d, // \"-\"\n Slash = 0x2f, // \"/\"\n Zero = 0x30, // \"0\"\n Nine = 0x39, // \"9\"\n Semi = 0x3b, // \";\"\n Lt = 0x3c, // \"<\"\n Eq = 0x3d, // \"=\"\n Gt = 0x3e, // \">\"\n Questionmark = 0x3f, // \"?\"\n UpperA = 0x41, // \"A\"\n LowerA = 0x61, // \"a\"\n UpperF = 0x46, // \"F\"\n LowerF = 0x66, // \"f\"\n UpperZ = 0x5a, // \"Z\"\n LowerZ = 0x7a, // \"z\"\n LowerX = 0x78, // \"x\"\n OpeningSquareBracket = 0x5b, // \"[\"\n}\n\n/** All the states the tokenizer can be in. */\nconst enum State {\n Text = 1,\n BeforeTagName, // After <\n InTagName,\n InSelfClosingTag,\n BeforeClosingTagName,\n InClosingTagName,\n AfterClosingTagName,\n\n // Attributes\n BeforeAttributeName,\n InAttributeName,\n AfterAttributeName,\n BeforeAttributeValue,\n InAttributeValueDq, // \"\n InAttributeValueSq, // '\n InAttributeValueNq,\n\n // Declarations\n BeforeDeclaration, // !\n InDeclaration,\n\n // Processing instructions\n InProcessingInstruction, // ?\n\n // Comments & CDATA\n BeforeComment,\n CDATASequence,\n InSpecialComment,\n InCommentLike,\n\n // Special tags\n BeforeSpecialS, // Decide if we deal with `<script` or `<style`\n BeforeSpecialT, // Decide if we deal with `<title` or `<textarea`\n SpecialStartSequence,\n InSpecialTag,\n\n InEntity,\n}\n\nfunction isWhitespace(c: number): boolean {\n return (\n c === CharCodes.Space ||\n c === CharCodes.NewLine ||\n c === CharCodes.Tab ||\n c === CharCodes.FormFeed ||\n c === CharCodes.CarriageReturn\n );\n}\n\nfunction isEndOfTagSection(c: number): boolean {\n return c === CharCodes.Slash || c === CharCodes.Gt || isWhitespace(c);\n}\n\nfunction isASCIIAlpha(c: number): boolean {\n return (\n (c >= CharCodes.LowerA && c <= CharCodes.LowerZ) ||\n (c >= CharCodes.UpperA && c <= CharCodes.UpperZ)\n );\n}\n\nexport enum QuoteType {\n NoValue = 0,\n Unquoted = 1,\n Single = 2,\n Double = 3,\n}\n\nexport interface Callbacks {\n onattribdata(start: number, endIndex: number): void;\n onattribentity(codepoint: number): void;\n onattribend(quote: QuoteType, endIndex: number): void;\n onattribname(start: number, endIndex: number): void;\n oncdata(start: number, endIndex: number, endOffset: number): void;\n onclosetag(start: number, endIndex: number): void;\n oncomment(start: number, endIndex: number, endOffset: number): void;\n ondeclaration(start: number, endIndex: number): void;\n onend(): void;\n onopentagend(endIndex: number): void;\n onopentagname(start: number, endIndex: number): void;\n onprocessinginstruction(start: number, endIndex: number): void;\n onselfclosingtag(endIndex: number): void;\n ontext(start: number, endIndex: number): void;\n ontextentity(codepoint: number, endIndex: number): void;\n}\n\n/**\n * Sequences used to match longer strings.\n *\n * We don't have `Script`, `Style`, or `Title` here. Instead, we re-use the *End\n * sequences with an increased offset.\n */\nconst Sequences = {\n Cdata: new Uint8Array([0x43, 0x44, 0x41, 0x54, 0x41, 0x5b]), // CDATA[\n CdataEnd: new Uint8Array([0x5d, 0x5d, 0x3e]), // ]]>\n CommentEnd: new Uint8Array([0x2d, 0x2d, 0x3e]), // `-->`\n ScriptEnd: new Uint8Array([0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74]), // `</script`\n StyleEnd: new Uint8Array([0x3c, 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65]), // `</style`\n TitleEnd: new Uint8Array([0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65]), // `</title`\n TextareaEnd: new Uint8Array([\n 0x3c, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x61, 0x72, 0x65, 0x61,\n ]), // `</textarea`\n XmpEnd: new Uint8Array([0x3c, 0x2f, 0x78, 0x6d, 0x70]), // `</xmp`\n};\n\nexport default class Tokenizer {\n /** The current state the tokenizer is in. */\n private state = State.Text;\n /** The read buffer. */\n private buffer = \"\";\n /** The beginning of the section that is currently being read. */\n private sectionStart = 0;\n /** The index within the buffer that we are currently looking at. */\n private index = 0;\n /** The start of the last entity. */\n private entityStart = 0;\n /** Some behavior, eg. when decoding entities, is done while we are in another state. This keeps track of the other state type. */\n private baseState = State.Text;\n /** For special parsing behavior inside of script and style tags. */\n private isSpecial = false;\n /** Indicates whether the tokenizer has been paused. */\n public running = true;\n /** The offset of the current buffer. */\n private offset = 0;\n\n private readonly xmlMode: boolean;\n private readonly decodeEntities: boolean;\n private readonly entityDecoder: EntityDecoder;\n\n constructor(\n {\n xmlMode = false,\n decodeEntities = true,\n }: { xmlMode?: boolean; decodeEntities?: boolean },\n private readonly cbs: Callbacks,\n ) {\n this.xmlMode = xmlMode;\n this.decodeEntities = decodeEntities;\n this.entityDecoder = new EntityDecoder(\n xmlMode ? xmlDecodeTree : htmlDecodeTree,\n (cp, consumed) => this.emitCodePoint(cp, consumed),\n );\n }\n\n public reset(): void {\n this.state = State.Text;\n this.buffer = \"\";\n this.sectionStart = 0;\n this.index = 0;\n this.baseState = State.Text;\n this.currentSequence = undefined!;\n this.running = true;\n this.offset = 0;\n }\n\n public write(chunk: string): void {\n this.offset += this.buffer.length;\n this.buffer = chunk;\n this.parse();\n }\n\n public end(): void {\n if (this.running) this.finish();\n }\n\n public pause(): void {\n this.running = false;\n }\n\n public resume(): void {\n this.running = true;\n if (this.index < this.buffer.length + this.offset) {\n this.parse();\n }\n }\n\n private stateText(c: number): void {\n if (\n c === CharCodes.Lt ||\n (!this.decodeEntities && this.fastForwardTo(CharCodes.Lt))\n ) {\n if (this.index > this.sectionStart) {\n this.cbs.ontext(this.sectionStart, this.index);\n }\n this.state = State.BeforeTagName;\n this.sectionStart = this.index;\n } else if (this.decodeEntities && c === CharCodes.Amp) {\n this.startEntity();\n }\n }\n\n private currentSequence: Uint8Array = undefined!;\n private sequenceIndex = 0;\n private stateSpecialStartSequence(c: number): void {\n const isEnd = this.sequenceIndex === this.currentSequence.length;\n const isMatch = isEnd\n ? // If we are at the end of the sequence, make sure the tag name has ended\n isEndOfTagSection(c)\n : // Otherwise, do a case-insensitive comparison\n (c | 0x20) === this.currentSequence[this.sequenceIndex];\n\n if (!isMatch) {\n this.isSpecial = false;\n } else if (!isEnd) {\n this.sequenceIndex++;\n return;\n }\n\n this.sequenceIndex = 0;\n this.state = State.InTagName;\n this.stateInTagName(c);\n }\n\n /** Look for an end tag. For <title> tags, also decode entities. */\n private stateInSpecialTag(c: number): void {\n if (this.sequenceIndex === this.currentSequence.length) {\n if (c === CharCodes.Gt || isWhitespace(c)) {\n const endOfText = this.index - this.currentSequence.length;\n\n if (this.sectionStart < endOfText) {\n // Spoof the index so that reported locations match up.\n const actualIndex = this.index;\n this.index = endOfText;\n this.cbs.ontext(this.sectionStart, endOfText);\n this.index = actualIndex;\n }\n\n this.isSpecial = false;\n this.sectionStart = endOfText + 2; // Skip over the `</`\n this.stateInClosingTagName(c);\n return; // We are done; skip the rest of the function.\n }\n\n this.sequenceIndex = 0;\n }\n\n if ((c | 0x20) === this.currentSequence[this.sequenceIndex]) {\n this.sequenceIndex += 1;\n } else if (this.sequenceIndex === 0) {\n if (this.currentSequence === Sequences.TitleEnd) {\n // We have to parse entities in <title> tags.\n if (this.decodeEntities && c === CharCodes.Amp) {\n this.startEntity();\n }\n } else if (this.fastForwardTo(CharCodes.Lt)) {\n // Outside of <title> tags, we can fast-forward.\n this.sequenceIndex = 1;\n }\n } else {\n // If we see a `<`, set the sequence index to 1; useful for eg. `<</script>`.\n this.sequenceIndex = Number(c === CharCodes.Lt);\n }\n }\n\n private stateCDATASequence(c: number): void {\n if (c === Sequences.Cdata[this.sequenceIndex]) {\n if (++this.sequenceIndex === Sequences.Cdata.length) {\n this.state = State.InCommentLike;\n this.currentSequence = Sequences.CdataEnd;\n this.sequenceIndex = 0;\n this.sectionStart = this.index + 1;\n }\n } else {\n this.sequenceIndex = 0;\n this.state = State.InDeclaration;\n this.stateInDeclaration(c); // Reconsume the character\n }\n }\n\n /**\n * When we wait for one specific character, we can speed things up\n * by skipping through the buffer until we find it.\n *\n * @returns Whether the character was found.\n */\n private fastForwardTo(c: number): boolean {\n while (++this.index < this.buffer.length + this.offset) {\n if (this.buffer.charCodeAt(this.index - this.offset) === c) {\n return true;\n }\n }\n\n /*\n * We increment the index at the end of the `parse` loop,\n * so set it to `buffer.length - 1` here.\n *\n * TODO: Refactor `parse` to increment index before calling states.\n */\n this.index = this.buffer.length + this.offset - 1;\n\n return false;\n }\n\n /**\n * Comments and CDATA end with `-->` and `]]>`.\n *\n * Their common qualities are:\n * - Their end sequences have a distinct character they start with.\n * - That character is then repeated, so we have to check multiple repeats.\n * - All characters but the start character of the sequence can be skipped.\n */\n private stateInCommentLike(c: number): void {\n if (c === this.currentSequence[this.sequenceIndex]) {\n if (++this.sequenceIndex === this.currentSequence.length) {\n if (this.currentSequence === Sequences.CdataEnd) {\n this.cbs.oncdata(this.sectionStart, this.index, 2);\n } else {\n this.cbs.oncomment(this.sectionStart, this.index, 2);\n }\n\n this.sequenceIndex = 0;\n this.sectionStart = this.index + 1;\n this.state = State.Text;\n }\n } else if (this.sequenceIndex === 0) {\n // Fast-forward to the first character of the sequence\n if (this.fastForwardTo(this.currentSequence[0])) {\n this.sequenceIndex = 1;\n }\n } else if (c !== this.currentSequence[this.sequenceIndex - 1]) {\n // Allow long sequences, eg. --->, ]]]>\n this.sequenceIndex = 0;\n }\n }\n\n /**\n * HTML only allows ASCII alpha characters (a-z and A-Z) at the beginning of a tag name.\n *\n * XML allows a lot more characters here (@see https://www.w3.org/TR/REC-xml/#NT-NameStartChar).\n * We allow anything that wouldn't end the tag.\n */\n private isTagStartChar(c: number) {\n return this.xmlMode ? !isEndOfTagSection(c) : isASCIIAlpha(c);\n }\n\n private startSpecial(sequence: Uint8Array, offset: number) {\n this.isSpecial = true;\n this.currentSequence = sequence;\n this.sequenceIndex = offset;\n this.state = State.SpecialStartSequence;\n }\n\n private stateBeforeTagName(c: number): void {\n if (c === CharCodes.ExclamationMark) {\n this.state = State.BeforeDeclaration;\n this.sectionStart = this.index + 1;\n } else if (c === CharCodes.Questionmark) {\n this.state = State.InProcessingInstruction;\n this.sectionStart = this.index + 1;\n } else if (this.isTagStartChar(c)) {\n const lower = c | 0x20;\n this.sectionStart = this.index;\n if (this.xmlMode) {\n this.state = State.InTagName;\n } else if (lower === Sequences.ScriptEnd[2]) {\n this.state = State.BeforeSpecialS;\n } else if (\n lower === Sequences.TitleEnd[2] ||\n lower === Sequences.XmpEnd[2]\n ) {\n this.state = State.BeforeSpecialT;\n } else {\n this.state = State.InTagName;\n }\n } else if (c === CharCodes.Slash) {\n this.state = State.BeforeClosingTagName;\n } else {\n this.state = State.Text;\n this.stateText(c);\n }\n }\n private stateInTagName(c: number): void {\n if (isEndOfTagSection(c)) {\n this.cbs.onopentagname(this.sectionStart, this.index);\n this.sectionStart = -1;\n this.state = State.BeforeAttributeName;\n this.stateBeforeAttributeName(c);\n }\n }\n private stateBeforeClosingTagName(c: number): void {\n if (isWhitespace(c)) {\n // Ignore\n } else if (c === CharCodes.Gt) {\n this.state = State.Text;\n } else {\n this.state = this.isTagStartChar(c)\n ? State.InClosingTagName\n : State.InSpecialComment;\n this.sectionStart = this.index;\n }\n }\n private stateInClosingTagName(c: number): void {\n if (c === CharCodes.Gt || isWhitespace(c)) {\n this.cbs.onclosetag(this.sectionStart, this.index);\n this.sectionStart = -1;\n this.state = State.AfterClosingTagName;\n this.stateAfterClosingTagName(c);\n }\n }\n private stateAfterClosingTagName(c: number): void {\n // Skip everything until \">\"\n if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {\n this.state = State.Text;\n this.sectionStart = this.index + 1;\n }\n }\n private stateBeforeAttributeName(c: number): void {\n if (c === CharCodes.Gt) {\n this.cbs.onopentagend(this.index);\n if (this.isSpecial) {\n this.state = State.InSpecialTag;\n this.sequenceIndex = 0;\n } else {\n this.state = State.Text;\n }\n this.sectionStart = this.index + 1;\n } else if (c === CharCodes.Slash) {\n this.state = State.InSelfClosingTag;\n } else if (!isWhitespace(c)) {\n this.state = State.InAttributeName;\n this.sectionStart = this.index;\n }\n }\n private stateInSelfClosingTag(c: number): void {\n if (c === CharCodes.Gt) {\n this.cbs.onselfclosingtag(this.index);\n this.state = State.Text;\n this.sectionStart = this.index + 1;\n this.isSpecial = false; // Reset special state, in case of self-closing special tags\n } else if (!isWhitespace(c)) {\n this.state = State.BeforeAttributeName;\n this.stateBeforeAttributeName(c);\n }\n }\n private stateInAttributeName(c: number): void {\n if (c === CharCodes.Eq || isEndOfTagSection(c)) {\n this.cbs.onattribname(this.sectionStart, this.index);\n this.sectionStart = this.index;\n this.state = State.AfterAttributeName;\n this.stateAfterAttributeName(c);\n }\n }\n private stateAfterAttributeName(c: number): void {\n if (c === CharCodes.Eq) {\n this.state = State.BeforeAttributeValue;\n } else if (c === CharCodes.Slash || c === CharCodes.Gt) {\n this.cbs.onattribend(QuoteType.NoValue, this.sectionStart);\n this.sectionStart = -1;\n this.state = State.BeforeAttributeName;\n this.stateBeforeAttributeName(c);\n } else if (!isWhitespace(c)) {\n this.cbs.onattribend(QuoteType.NoValue, this.sectionStart);\n this.state = State.InAttributeName;\n this.sectionStart = this.index;\n }\n }\n private stateBeforeAttributeValue(c: number): void {\n if (c === CharCodes.DoubleQuote) {\n this.state = State.InAttributeValueDq;\n this.sectionStart = this.index + 1;\n } else if (c === CharCodes.SingleQuote) {\n this.state = State.InAttributeValueSq;\n this.sectionStart = this.index + 1;\n } else if (!isWhitespace(c)) {\n this.sectionStart = this.index;\n this.state = State.InAttributeValueNq;\n this.stateInAttributeValueNoQuotes(c); // Reconsume token\n }\n }\n private handleInAttributeValue(c: number, quote: number) {\n if (\n c === quote ||\n (!this.decodeEntities && this.fastForwardTo(quote))\n ) {\n this.cbs.onattribdata(this.sectionStart, this.index);\n this.sectionStart = -1;\n this.cbs.onattribend(\n quote === CharCodes.DoubleQuote\n ? QuoteType.Double\n : QuoteType.Single,\n this.index + 1,\n );\n this.state = State.BeforeAttributeName;\n } else if (this.decodeEntities && c === CharCodes.Amp) {\n this.startEntity();\n }\n }\n private stateInAttributeValueDoubleQuotes(c: number): void {\n this.handleInAttributeValue(c, CharCodes.DoubleQuote);\n }\n private stateInAttributeValueSingleQuotes(c: number): void {\n this.handleInAttributeValue(c, CharCodes.SingleQuote);\n }\n private stateInAttributeValueNoQuotes(c: number): void {\n if (isWhitespace(c) || c === CharCodes.Gt) {\n this.cbs.onattribdata(this.sectionStart, this.index);\n this.sectionStart = -1;\n this.cbs.onattribend(QuoteType.Unquoted, this.index);\n this.state = State.BeforeAttributeName;\n this.stateBeforeAttributeName(c);\n } else if (this.decodeEntities && c === CharCodes.Amp) {\n this.startEntity();\n }\n }\n private stateBeforeDeclaration(c: number): void {\n if (c === CharCodes.OpeningSquareBracket) {\n this.state = State.CDATASequence;\n this.sequenceIndex = 0;\n } else {\n this.state =\n c === CharCodes.Dash\n ? State.BeforeComment\n : State.InDeclaration;\n }\n }\n private stateInDeclaration(c: number): void {\n if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {\n this.cbs.ondeclaration(this.sectionStart, this.index);\n this.state = State.Text;\n this.sectionStart = this.index + 1;\n }\n }\n private stateInProcessingInstruction(c: number): void {\n if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {\n this.cbs.onprocessinginstruction(this.sectionStart, this.index);\n this.state = State.Text;\n this.sectionStart = this.index + 1;\n }\n }\n private stateBeforeComment(c: number): void {\n if (c === CharCodes.Dash) {\n this.state = State.InCommentLike;\n this.currentSequence = Sequences.CommentEnd;\n // Allow short comments (eg. <!-->)\n this.sequenceIndex = 2;\n this.sectionStart = this.index + 1;\n } else {\n this.state = State.InDeclaration;\n }\n }\n private stateInSpecialComment(c: number): void {\n if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {\n this.cbs.oncomment(this.sectionStart, this.index, 0);\n this.state = State.Text;\n this.sectionStart = this.index + 1;\n }\n }\n private stateBeforeSpecialS(c: number): void {\n const lower = c | 0x20;\n if (lower === Sequences.ScriptEnd[3]) {\n this.startSpecial(Sequences.ScriptEnd, 4);\n } else if (lower === Sequences.StyleEnd[3]) {\n this.startSpecial(Sequences.StyleEnd, 4);\n } else {\n this.state = State.InTagName;\n this.stateInTagName(c); // Consume the token again\n }\n }\n\n private stateBeforeSpecialT(c: number): void {\n const lower = c | 0x20;\n switch (lower) {\n case Sequences.TitleEnd[3]: {\n this.startSpecial(Sequences.TitleEnd, 4);\n\n break;\n }\n case Sequences.TextareaEnd[3]: {\n this.startSpecial(Sequences.TextareaEnd, 4);\n\n break;\n }\n case Sequences.XmpEnd[3]: {\n this.startSpecial(Sequences.XmpEnd, 4);\n\n break;\n }\n default: {\n this.state = State.InTagName;\n this.stateInTagName(c); // Consume the token again\n }\n }\n }\n\n private startEntity() {\n this.baseState = this.state;\n this.state = State.InEntity;\n this.entityStart = this.index;\n this.entityDecoder.startEntity(\n this.xmlMode\n ? DecodingMode.Strict\n : this.baseState === State.Text ||\n this.baseState === State.InSpecialTag\n ? DecodingMode.Legacy\n : DecodingMode.Attribute,\n );\n }\n\n private stateInEntity(): void {\n const indexInBuffer = this.index - this.offset;\n const length = this.entityDecoder.write(this.buffer, indexInBuffer);\n\n // If `length` is positive, we are done with the entity.\n if (length >= 0) {\n this.state = this.baseState;\n\n if (length === 0) {\n this.index -= 1;\n }\n } else {\n if (\n indexInBuffer < this.buffer.length &&\n this.buffer.charCodeAt(indexInBuffer) === CharCodes.Amp\n ) {\n this.state = this.baseState;\n this.index -= 1;\n return;\n }\n\n // Mark buffer as consumed.\n this.index = this.offset + this.buffer.length - 1;\n }\n }\n\n /**\n * Remove data that has already been consumed from the buffer.\n */\n private cleanup() {\n // If we are inside of text or attributes, emit what we already have.\n if (this.running && this.sectionStart !== this.index) {\n if (\n this.state === State.Text ||\n (this.state === State.InSpecialTag && this.sequenceIndex === 0)\n ) {\n this.cbs.ontext(this.sectionStart, this.index);\n this.sectionStart = this.index;\n } else if (\n this.state === State.InAttributeValueDq ||\n this.state === State.InAttributeValueSq ||\n this.state === State.InAttributeValueNq\n ) {\n this.cbs.onattribdata(this.sectionStart, this.index);\n this.sectionStart = this.index;\n }\n }\n }\n\n private shouldContinue() {\n return this.index < this.buffer.length + this.offset && this.running;\n }\n\n /**\n * Iterates through the buffer, calling the function corresponding to the current state.\n *\n * States that are more likely to be hit are higher up, as a performance improvement.\n */\n private parse() {\n while (this.shouldContinue()) {\n const c = this.buffer.charCodeAt(this.index - this.offset);\n switch (this.state) {\n case State.Text: {\n this.stateText(c);\n break;\n }\n case State.SpecialStartSequence: {\n this.stateSpecialStartSequence(c);\n break;\n }\n case State.InSpecialTag: {\n this.stateInSpecialTag(c);\n break;\n }\n case State.CDATASequence: {\n this.stateCDATASequence(c);\n break;\n }\n case State.InAttributeValueDq: {\n this.stateInAttributeValueDoubleQuotes(c);\n break;\n }\n case State.InAttributeName: {\n this.stateInAttributeName(c);\n break;\n }\n case State.InCommentLike: {\n this.stateInCommentLike(c);\n break;\n }\n case State.InSpecialComment: {\n this.stateInSpecialComment(c);\n break;\n }\n case State.BeforeAttributeName: {\n this.stateBeforeAttributeName(c);\n break;\n }\n case State.InTagName: {\n this.stateInTagName(c);\n break;\n }\n case State.InClosingTagName: {\n this.stateInClosingTagName(c);\n break;\n }\n case State.BeforeTagName: {\n this.stateBeforeTagName(c);\n break;\n }\n case State.AfterAttributeName: {\n this.stateAfterAttributeName(c);\n break;\n }\n case State.InAttributeValueSq: {\n this.stateInAttributeValueSingleQuotes(c);\n break;\n }\n case State.BeforeAttributeValue: {\n this.stateBeforeAttributeValue(c);\n break;\n }\n case State.BeforeClosingTagName: {\n this.stateBeforeClosingTagName(c);\n break;\n }\n case State.AfterClosingTagName: {\n this.stateAfterClosingTagName(c);\n break;\n }\n case State.BeforeSpecialS: {\n this.stateBeforeSpecialS(c);\n break;\n }\n case State.BeforeSpecialT: {\n this.stateBeforeSpecialT(c);\n break;\n }\n case State.InAttributeValueNq: {\n this.stateInAttributeValueNoQuotes(c);\n break;\n }\n case State.InSelfClosingTag: {\n this.stateInSelfClosingTag(c);\n break;\n }\n case State.InDeclaration: {\n this.stateInDeclaration(c);\n break;\n }\n case State.BeforeDeclaration: {\n this.stateBeforeDeclaration(c);\n break;\n }\n case State.BeforeComment: {\n this.stateBeforeComment(c);\n break;\n }\n case State.InProcessingInstruction: {\n this.stateInProcessingInstruction(c);\n break;\n }\n case State.InEntity: {\n this.stateInEntity();\n break;\n }\n }\n this.index++;\n }\n this.cleanup();\n }\n\n private finish() {\n if (this.state === State.InEntity) {\n this.entityDecoder.end();\n this.state = this.baseState;\n }\n\n this.handleTrailingData();\n\n this.cbs.onend();\n }\n\n /** Handle any trailing data. */\n private handleTrailingData() {\n const endIndex = this.buffer.length + this.offset;\n\n // If there is no remaining data, we are done.\n if (this.sectionStart >= endIndex) {\n return;\n }\n\n if (this.state === State.InCommentLike) {\n if (this.currentSequence === Sequences.CdataEnd) {\n this.cbs.oncdata(this.sectionStart, endIndex, 0);\n } else {\n this.cbs.oncomment(this.sectionStart, endIndex, 0);\n }\n } else if (\n this.state === State.InTagName ||\n this.state === State.BeforeAttributeName ||\n this.state === State.BeforeAttributeValue ||\n this.state === State.AfterAttributeName ||\n this.state === State.InAttributeName ||\n this.state === State.InAttributeValueSq ||\n this.state === State.InAttributeValueDq ||\n this.state === State.InAttributeValueNq ||\n this.state === State.InClosingTagName\n ) {\n /*\n * If we are currently in an opening or closing tag, us not calling the\n * respective callback signals that the tag should be ignored.\n */\n } else {\n this.cbs.ontext(this.sectionStart, endIndex);\n }\n }\n\n private emitCodePoint(cp: number, consumed: number): void {\n if (\n this.baseState !== State.Text &&\n this.baseState !== State.InSpecialTag\n ) {\n if (this.sectionStart < this.entityStart) {\n this.cbs.onattribdata(this.sectionStart, this.entityStart);\n }\n this.sectionStart = this.entityStart + consumed;\n this.index = this.sectionStart - 1;\n\n this.cbs.onattribentity(cp);\n } else {\n if (this.sectionStart < this.entityStart) {\n this.cbs.ontext(this.sectionStart, this.entityStart);\n }\n this.sectionStart = this.entityStart + consumed;\n this.index = this.sectionStart - 1;\n\n this.cbs.ontextentity(cp, this.sectionStart);\n }\n }\n}\n","import Tokenizer, { type Callbacks, QuoteType } from \"./Tokenizer.js\";\nimport { fromCodePoint } from \"entities/decode\";\n\nconst formTags = new Set([\n \"input\",\n \"option\",\n \"optgroup\",\n \"select\",\n \"button\",\n \"datalist\",\n \"textarea\",\n]);\nconst pTag = new Set([\"p\"]);\nconst tableSectionTags = new Set([\"thead\", \"tbody\"]);\nconst ddtTags = new Set([\"dd\", \"dt\"]);\nconst rtpTags = new Set([\"rt\", \"rp\"]);\n\nconst openImpliesClose = new Map<string, Set<string>>([\n [\"tr\", new Set([\"tr\", \"th\", \"td\"])],\n [\"th\", new Set([\"th\"])],\n [\"td\", new Set([\"thead\", \"th\", \"td\"])],\n [\"body\", new Set([\"head\", \"link\", \"script\"])],\n [\"li\", new Set([\"li\"])],\n [\"p\", pTag],\n [\"h1\", pTag],\n [\"h2\", pTag],\n [\"h3\", pTag],\n [\"h4\", pTag],\n [\"h5\", pTag],\n [\"h6\", pTag],\n [\"select\", formTags],\n [\"input\", formTags],\n [\"output\", formTags],\n [\"button\", formTags],\n [\"datalist\", formTags],\n [\"textarea\", formTags],\n [\"option\", new Set([\"option\"])],\n [\"optgroup\", new Set([\"optgroup\", \"option\"])],\n [\"dd\", ddtTags],\n [\"dt\", ddtTags],\n [\"address\", pTag],\n [\"article\", pTag],\n [\"aside\", pTag],\n [\"blockquote\", pTag],\n [\"details\", pTag],\n [\"div\", pTag],\n [\"dl\", pTag],\n [\"fieldset\", pTag],\n [\"figcaption\", pTag],\n [\"figure\", pTag],\n [\"footer\", pTag],\n [\"form\", pTag],\n [\"header\", pTag],\n [\"hr\", pTag],\n [\"main\", pTag],\n [\"nav\", pTag],\n [\"ol\", pTag],\n [\"pre\", pTag],\n [\"section\", pTag],\n [\"table\", pTag],\n [\"ul\", pTag],\n [\"rt\", rtpTags],\n [\"rp\", rtpTags],\n [\"tbody\", tableSectionTags],\n [\"tfoot\", tableSectionTags],\n]);\n\nconst voidElements = new Set([\n \"area\",\n \"base\",\n \"basefont\",\n \"br\",\n \"col\",\n \"command\",\n \"embed\",\n \"frame\",\n \"hr\",\n \"img\",\n \"input\",\n \"isindex\",\n \"keygen\",\n \"link\",\n \"meta\",\n \"param\",\n \"source\",\n \"track\",\n \"wbr\",\n]);\n\nconst foreignContextElements = new Set([\"math\", \"svg\"]);\n\nconst htmlIntegrationElements = new Set([\n \"mi\",\n \"mo\",\n \"mn\",\n \"ms\",\n \"mtext\",\n \"annotation-xml\",\n \"foreignobject\",\n \"desc\",\n \"title\",\n]);\n\nexport interface ParserOptions {\n /**\n * Indicates whether special tags (`<script>`, `<style>`, and `<title>`) should get special treatment\n * and if \"empty\" tags (eg. `<br>`) can have children. If `false`, the content of special tags\n * will be text only. For feeds and other XML content (documents that don't consist of HTML),\n * set this to `true`.\n *\n * @default false\n */\n xmlMode?: boolean;\n\n /**\n * Decode entities within the document.\n *\n * @default true\n */\n decodeEntities?: boolean;\n\n /**\n * If set to true, all tags will be lowercased.\n *\n * @default !xmlMode\n */\n lowerCaseTags?: boolean;\n\n /**\n * If set to `true`, all attribute names will be lowercased. This has noticeable impact on speed.\n *\n * @default !xmlMode\n */\n lowerCaseAttributeNames?: boolean;\n\n /**\n * If set to true, CDATA sections will be recognized as text even if the xmlMode option is not enabled.\n * NOTE: If xmlMode is set to `true` then CDATA sections will always be recognized as text.\n *\n * @default xmlMode\n */\n recognizeCDATA?: boolean;\n\n /**\n * If set to `true`, self-closing tags will trigger the onclosetag event even if xmlMode is not set to `true`.\n * NOTE: If xmlMode is set to `true` then self-closing tags will always be recognized.\n *\n * @default xmlMode\n */\n recognizeSelfClosing?: boolean;\n\n /**\n * Allows the default tokenizer to be overwritten.\n */\n Tokenizer?: typeof Tokenizer;\n}\n\nexport interface Handler {\n onparserinit(parser: Parser): void;\n\n /**\n * Resets the handler back to starting state\n */\n onreset(): void;\n\n /**\n * Signals the handler that parsing is done\n */\n onend(): void;\n onerror(error: Error): void;\n onclosetag(name: string, isImplied: boolean): void;\n onopentagname(name: string): void;\n /**\n *\n * @param name Name of the attribute\n * @param value Value of the attribute.\n * @param quote Quotes used around the attribute. `null` if the attribute has no quotes around the value, `undefined` if the attribute has no value.\n */\n onattribute(\n name: string,\n value: string,\n quote?: string | undefined | null,\n ): void;\n onopentag(\n name: string,\n attribs: { [s: string]: string },\n isImplied: boolean,\n ): void;\n ontext(data: string): void;\n oncomment(data: string): void;\n oncdatastart(): void;\n oncdataend(): void;\n oncommentend(): void;\n onprocessinginstruction(name: string, data: string): void;\n}\n\nconst reNameEnd = /\\s|\\//;\n\nexport class Parser implements Callbacks {\n /** The start index of the last event. */\n public startIndex = 0;\n /** The end index of the last event. */\n public endIndex = 0;\n /**\n * Store the start index of the current open tag,\n * so we can update the start index for attributes.\n */\n private openTagStart = 0;\n\n private tagname = \"\";\n private attribname = \"\";\n private attribvalue = \"\";\n private attribs: null | { [key: string]: string } = null;\n private readonly stack: string[] = [];\n /** Determines whether self-closing tags are recognized. */\n private readonly foreignContext: boolean[];\n private readonly cbs: Partial<Handler>;\n private readonly lowerCaseTagNames: boolean;\n private readonly lowerCaseAttributeNames: boolean;\n private readonly recognizeSelfClosing: boolean;\n /** We are parsing HTML. Inverse of the `xmlMode` option. */\n private readonly htmlMode: boolean;\n private readonly tokenizer: Tokenizer;\n\n private readonly buffers: string[] = [];\n private bufferOffset = 0;\n /** The index of the last written buffer. Used when resuming after a `pause()`. */\n private writeIndex = 0;\n /** Indicates whether the parser has finished running / `.end` has been called. */\n private ended = false;\n\n constructor(\n cbs?: Partial<Handler> | null,\n private readonly options: ParserOptions = {},\n ) {\n this.cbs = cbs ?? {};\n this.htmlMode = !this.options.xmlMode;\n this.lowerCaseTagNames = options.lowerCaseTags ?? this.htmlMode;\n this.lowerCaseAttributeNames =\n options.lowerCaseAttributeNames ?? this.htmlMode;\n this.recognizeSelfClosing =\n options.recognizeSelfClosing ?? !this.htmlMode;\n this.tokenizer = new (options.Tokenizer ?? Tokenizer)(\n this.options,\n this,\n );\n this.foreignContext = [!this.htmlMode];\n this.cbs.onparserinit?.(this);\n }\n\n // Tokenizer event handlers\n\n /** @internal */\n ontext(start: number, endIndex: number): void {\n const data = this.getSlice(start, endIndex);\n this.endIndex = endIndex - 1;\n this.cbs.ontext?.(data);\n this.startIndex = endIndex;\n }\n\n /** @internal */\n ontextentity(cp: number, endIndex: number): void {\n this.endIndex = endIndex - 1;\n this.cbs.ontext?.(fromCodePoint(cp));\n this.startIndex = endIndex;\n }\n\n /**\n * Checks if the current tag is a void element. Override this if you want\n * to specify your own additional void elements.\n */\n protected isVoidElement(name: string): boolean {\n return this.htmlMode && voidElements.has(name);\n }\n\n /** @internal */\n onopentagname(start: number, endIndex: number): void {\n this.endIndex = endIndex;\n\n let name = this.getSlice(start, endIndex);\n\n if (this.lowerCaseTagNames) {\n name = name.toLowerCase();\n }\n\n this.emitOpenTag(name);\n }\n\n private emitOpenTag(name: string) {\n this.openTagStart = this.startIndex;\n this.tagname = name;\n\n const impliesClose = this.htmlMode && openImpliesClose.get(name);\n\n if (impliesClose) {\n while (this.stack.length > 0 && impliesClose.has(this.stack[0])) {\n const element = this.stack.shift()!;\n this.cbs.onclosetag?.(element, true);\n }\n }\n if (!this.isVoidElement(name)) {\n this.stack.unshift(name);\n\n if (this.htmlMode) {\n if (foreignContextElements.has(name)) {\n this.foreignContext.unshift(true);\n } else if (htmlIntegrationElements.has(name)) {\n this.foreignContext.unshift(false);\n }\n }\n }\n this.cbs.onopentagname?.(name);\n if (this.cbs.onopentag) this.attribs = {};\n }\n\n private endOpenTag(isImplied: boolean) {\n this.startIndex = this.openTagStart;\n\n if (this.attribs) {\n this.cbs.onopentag?.(this.tagname, this.attribs, isImplied);\n this.attribs = null;\n }\n if (this.cbs.onclosetag && this.isVoidElement(this.tagname)) {\n this.cbs.onclosetag(this.tagname, true);\n }\n\n this.tagname = \"\";\n }\n\n /** @internal */\n onopentagend(endIndex: number): void {\n this.endIndex = endIndex;\n this.endOpenTag(false);\n\n // Set `startIndex` for next node\n this.startIndex = endIndex + 1;\n }\n\n /** @internal */\n onclosetag(start: number, endIndex: number): void {\n this.endIndex = endIndex;\n\n let name = this.getSlice(start, endIndex);\n\n if (this.lowerCaseTagNames) {\n name = name.toLowerCase();\n }\n\n if (\n this.htmlMode &&\n (foreignContextElements.has(name) ||\n htmlIntegrationElements.has(name))\n ) {\n this.foreignContext.shift();\n }\n\n if (!this.isVoidElement(name)) {\n const pos = this.stack.indexOf(name);\n if (pos !== -1) {\n for (let index = 0; index <= pos; index++) {\n const element = this.stack.shift()!;\n // We know the stack has sufficient elements.\n this.cbs.onclosetag?.(element, index !== pos);\n }\n } else if (this.htmlMode && name === \"p\") {\n // Implicit open before close\n this.emitOpenTag(\"p\");\n this.closeCurrentTag(true);\n }\n } else if (this.htmlMode && name === \"br\") {\n // We can't use `emitOpenTag` for implicit open, as `br` would be implicitly closed.\n this.cbs.onopentagname?.(\"br\");\n this.cbs.onopentag?.(\"br\", {}, true);\n this.cbs.onclosetag?.(\"br\", false);\n }\n\n // Set `startIndex` for next node\n this.startIndex = endIndex + 1;\n }\n\n /** @internal */\n onselfclosingtag(endIndex: number): void {\n this.endIndex = endIndex;\n if (this.recognizeSelfClosing || this.foreignContext[0]) {\n this.closeCurrentTag(false);\n\n // Set `startIndex` for next node\n this.startIndex = endIndex + 1;\n } else {\n // Ignore the fact that the tag is self-closing.\n this.onopentagend(endIndex);\n }\n }\n\n private closeCurrentTag(isOpenImplied: boolean) {\n const name = this.tagname;\n this.endOpenTag(isOpenImplied);\n\n // Self-closing tags will be on the top of the stack\n if (this.stack[0] === name) {\n // If the opening tag isn't implied, the closing tag has to be implied.\n this.cbs.onclosetag?.(name, !isOpenImplied);\n this.stack.shift();\n }\n }\n\n /** @internal */\n onattribname(start: number, endIndex: number): void {\n this.startIndex = start;\n const name = this.getSlice(start, endIndex);\n\n this.attribname = this.lowerCaseAttributeNames\n ? name.toLowerCase()\n : name;\n }\n\n /** @internal */\n onattribdata(start: number, endIndex: number): void {\n this.attribvalue += this.getSlice(start, endIndex);\n }\n\n /** @internal */\n onattribentity(cp: number): void {\n this.attribvalue += fromCodePoint(cp);\n }\n\n /** @internal */\n onattribend(quote: QuoteType, endIndex: number): void {\n this.endIndex = endIndex;\n\n this.cbs.onattribute?.(\n this.attribname,\n this.attribvalue,\n quote === QuoteType.Double\n ? '\"'\n : quote === QuoteType.Single\n ? \"'\"\n : quote === QuoteType.NoValue\n ? undefined\n : null,\n );\n\n if (\n this.attribs &&\n !Object.prototype.hasOwnProperty.call(this.attribs, this.attribname)\n ) {\n this.attribs[this.attribname] = this.attribvalue;\n }\n this.attribvalue = \"\";\n }\n\n private getInstructionName(value: string) {\n const index = value.search(reNameEnd);\n let name = index < 0 ? value : value.substr(0, index);\n\n if (this.lowerCaseTagNames) {\n name = name.toLowerCase();\n }\n\n return name;\n }\n\n /** @internal */\n ondeclaration(start: number, endIndex: number): void {\n this.endIndex = endIndex;\n const value = this.getSlice(start, endIndex);\n\n if (this.cbs.onprocessinginstruction) {\n const name = this.getInstructionName(value);\n this.cbs.onprocessinginstruction(`!${name}`, `!${value}`);\n }\n\n // Set `startIndex` for next node\n this.startIndex = endIndex + 1;\n }\n\n /** @internal */\n onprocessinginstruction(start: number, endIndex: number): void {\n this.endIndex = endIndex;\n const value = this.getSlice(start, endIndex);\n\n if (this.cbs.onprocessinginstruction) {\n const name = this.getInstructionName(value);\n this.cbs.onprocessinginstruction(`?${name}`, `?${value}`);\n }\n\n // Set `startIndex` for next node\n this.startIndex = endIndex + 1;\n }\n\n /** @internal */\n oncomment(start: number, endIndex: number, offset: number): void {\n this.endIndex = endIndex;\n\n this.cbs.oncomment?.(this.getSlice(start, endIndex - offset));\n this.cbs.oncommentend?.();\n\n // Set `startIndex` for next node\n this.startIndex = endIndex + 1;\n }\n\n /** @internal */\n oncdata(start: number, endIndex: number, offset: number): void {\n this.endIndex = endIndex;\n const value = this.getSlice(start, endIndex - offset);\n\n if (!this.htmlMode || this.options.recognizeCDATA) {\n this.cbs.oncdatastart?.();\n this.cbs.ontext?.(value);\n this.cbs.oncdataend?.();\n } else {\n this.cbs.oncomment?.(`[CDATA[${value}]]`);\n this.cbs.oncommentend?.();\n }\n\n // Set `startIndex` for next node\n this.startIndex = endIndex + 1;\n }\n\n /** @internal */\n onend(): void {\n if (this.cbs.onclosetag) {\n // Set the end index for all remaining tags\n this.endIndex = this.startIndex;\n for (let index = 0; index < this.stack.length; index++) {\n this.cbs.onclosetag(this.stack[index], true);\n }\n }\n this.cbs.onend?.();\n }\n\n /**\n * Resets the parser to a blank state, ready to parse a new HTML document\n */\n public reset(): void {\n this.cbs.onreset?.();\n this.tokenizer.reset();\n this.tagname = \"\";\n this.attribname = \"\";\n this.attribs = null;\n this.stack.length = 0;\n this.startIndex = 0;\n this.endIndex = 0;\n this.cbs.onparserinit?.(this);\n this.buffers.length = 0;\n this.foreignContext.length = 0;\n this.foreignContext.unshift(!this.htmlMode);\n this.bufferOffset = 0;\n this.writeIndex = 0;\n this.ended = false;\n }\n\n /**\n * Resets the parser, then parses a complete document and\n * pushes it to the handler.\n *\n * @param data Document to parse.\n */\n public parseComplete(data: string): void {\n this.reset();\n this.end(data);\n }\n\n private getSlice(start: number, end: number) {\n while (start - this.bufferOffset >= this.buffers[0].length) {\n this.shiftBuffer();\n }\n\n let slice = this.buffers[0].slice(\n start - this.bufferOffset,\n end - this.bufferOffset,\n );\n\n while (end - this.bufferOffset > this.buffers[0].length) {\n this.shiftBuffer();\n slice += this.buffers[0].slice(0, end - this.bufferOffset);\n }\n\n return slice;\n }\n\n private shiftBuffer(): void {\n this.bufferOffset += this.buffers[0].length;\n this.writeIndex--;\n this.buffers.shift();\n }\n\n /**\n * Parses a chunk of data and calls the corresponding callbacks.\n *\n * @param chunk Chunk to parse.\n */\n public write(chunk: string): void {\n if (this.ended) {\n this.cbs.onerror?.(new Error(\".write() after done!\"));\n return;\n }\n\n this.buffers.push(chunk);\n if (this.tokenizer.running) {\n this.tokenizer.write(chunk);\n this.writeIndex++;\n }\n }\n\n /**\n * Parses the end of the buffer and clears the stack, calls onend.\n *\n * @param chunk Optional final chunk to parse.\n */\n public end(chunk?: string): void {\n if (this.ended) {\n this.cbs.onerror?.(new Error(\".end() after done!\"));\n return;\n }\n\n if (chunk) this.write(chunk);\n this.ended = true;\n this.tokenizer.end();\n }\n\n /**\n * Pauses parsing. The parser won't emit events until `resume` is called.\n */\n public pause(): void {\n this.tokenizer.pause();\n }\n\n /**\n * Resumes parsing after `pause` was called.\n */\n public resume(): void {\n this.tokenizer.resume();\n\n while (\n this.tokenizer.running &&\n this.writeIndex < this.buffers.length\n ) {\n this.tokenizer.write(this.buffers[this.writeIndex++]);\n }\n\n if (this.ended) this.tokenizer.end();\n }\n\n /**\n * Alias of `write`, for backwards compatibility.\n *\n * @param chunk Chunk to parse.\n * @deprecated\n */\n public parseChunk(chunk: string): void {\n this.write(chunk);\n }\n /**\n * Alias of `end`, for backwards compatibility.\n *\n * @param chunk Optional final chunk to parse.\n * @deprecated\n */\n public done(chunk?: string): void {\n this.end(chunk);\n }\n}\n","/** Types of elements found in htmlparser2's DOM */\nexport var ElementType;\n(function (ElementType) {\n /** Type for the root element of a document */\n ElementType[\"Root\"] = \"root\";\n /** Type for Text */\n ElementType[\"Text\"] = \"text\";\n /** Type for <? ... ?> */\n ElementType[\"Directive\"] = \"directive\";\n /** Type for <!-- ... --> */\n ElementType[\"Comment\"] = \"comment\";\n /** Type for <script> tags */\n ElementType[\"Script\"] = \"script\";\n /** Type for <style> tags */\n ElementType[\"Style\"] = \"style\";\n /** Type for Any tag */\n ElementType[\"Tag\"] = \"tag\";\n /** Type for <![CDATA[ ... ]]> */\n ElementType[\"CDATA\"] = \"cdata\";\n /** Type for <!doctype ...> */\n ElementType[\"Doctype\"] = \"doctype\";\n})(ElementType || (ElementType = {}));\n/**\n * Tests whether an element is a tag or not.\n *\n * @param elem Element to test\n */\nexport function isTag(elem) {\n return (elem.type === ElementType.Tag ||\n elem.type === ElementType.Script ||\n elem.type === ElementType.Style);\n}\n// Exports for backwards compatibility\n/** Type for the root element of a document */\nexport const Root = ElementType.Root;\n/** Type for Text */\nexport const Text = ElementType.Text;\n/** Type for <? ... ?> */\nexport const Directive = ElementType.Directive;\n/** Type for <!-- ... --> */\nexport const Comment = ElementType.Comment;\n/** Type for <script> tags */\nexport const Script = ElementType.Script;\n/** Type for <style> tags */\nexport const Style = ElementType.Style;\n/** Type for Any tag */\nexport const Tag = ElementType.Tag;\n/** Type for <![CDATA[ ... ]]> */\nexport const CDATA = ElementType.CDATA;\n/** Type for <!doctype ...> */\nexport const Doctype = ElementType.Doctype;\n","import { ElementType, isTag as isTagRaw } from \"domelementtype\";\n/**\n * This object will be used as the prototype for Nodes when creating a\n * DOM-Level-1-compliant structure.\n */\nexport class Node {\n constructor() {\n /** Parent of the node */\n this.parent = null;\n /** Previous sibling */\n this.prev = null;\n /** Next sibling */\n this.next = null;\n /** The start index of the node. Requires `withStartIndices` on the handler to be `true. */\n this.startIndex = null;\n /** The end index of the node. Requires `withEndIndices` on the handler to be `true. */\n this.endIndex = null;\n }\n // Read-write aliases for properties\n /**\n * Same as {@link parent}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get parentNode() {\n return this.parent;\n }\n set parentNode(parent) {\n this.parent = parent;\n }\n /**\n * Same as {@link prev}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get previousSibling() {\n return this.prev;\n }\n set previousSibling(prev) {\n this.prev = prev;\n }\n /**\n * Same as {@link next}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get nextSibling() {\n return this.next;\n }\n set nextSibling(next) {\n this.next = next;\n }\n /**\n * Clone this node, and optionally its children.\n *\n * @param recursive Clone child nodes as well.\n * @returns A clone of the node.\n */\n cloneNode(recursive = false) {\n return cloneNode(this, recursive);\n }\n}\n/**\n * A node that contains some data.\n */\nexport class DataNode extends Node {\n /**\n * @param data The content of the data node\n */\n constructor(data) {\n super();\n this.data = data;\n }\n /**\n * Same as {@link data}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get nodeValue() {\n return this.data;\n }\n set nodeValue(data) {\n this.data = data;\n }\n}\n/**\n * Text within the document.\n */\nexport class Text extends DataNode {\n constructor() {\n super(...arguments);\n this.type = ElementType.Text;\n }\n get nodeType() {\n return 3;\n }\n}\n/**\n * Comments within the document.\n */\nexport class Comment extends DataNode {\n constructor() {\n super(...arguments);\n this.type = ElementType.Comment;\n }\n get nodeType() {\n return 8;\n }\n}\n/**\n * Processing instructions, including doc types.\n */\nexport class ProcessingInstruction extends DataNode {\n constructor(name, data) {\n super(data);\n this.name = name;\n this.type = ElementType.Directive;\n }\n get nodeType() {\n return 1;\n }\n}\n/**\n * A `Node` that can have children.\n */\nexport class NodeWithChildren extends Node {\n /**\n * @param children Children of the node. Only certain node types can have children.\n */\n constructor(children) {\n super();\n this.children = children;\n }\n // Aliases\n /** First child of the node. */\n get firstChild() {\n var _a;\n return (_a = this.children[0]) !== null && _a !== void 0 ? _a : null;\n }\n /** Last child of the node. */\n get lastChild() {\n return this.children.length > 0\n ? this.children[this.children.length - 1]\n : null;\n }\n /**\n * Same as {@link children}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get childNodes() {\n return this.children;\n }\n set childNodes(children) {\n this.children = children;\n }\n}\nexport class CDATA extends NodeWithChildren {\n constructor() {\n super(...arguments);\n this.type = ElementType.CDATA;\n }\n get nodeType() {\n return 4;\n }\n}\n/**\n * The root node of the document.\n */\nexport class Document extends NodeWithChildren {\n constructor() {\n super(...arguments);\n this.type = ElementType.Root;\n }\n get nodeType() {\n return 9;\n }\n}\n/**\n * An element within the DOM.\n */\nexport class Element extends NodeWithChildren {\n /**\n * @param name Name of the tag, eg. `div`, `span`.\n * @param attribs Object mapping attribute names to attribute values.\n * @param children Children of the node.\n */\n constructor(name, attribs, children = [], type = name === \"script\"\n ? ElementType.Script\n : name === \"style\"\n ? ElementType.Style\n : ElementType.Tag) {\n super(children);\n this.name = name;\n this.attribs = attribs;\n this.type = type;\n }\n get nodeType() {\n return 1;\n }\n // DOM Level 1 aliases\n /**\n * Same as {@link name}.\n * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n */\n get tagName() {\n return this.name;\n }\n set tagName(name) {\n this.name = name;\n }\n get attributes() {\n return Object.keys(this.attribs).map((name) => {\n var _a, _b;\n return ({\n name,\n value: this.attribs[name],\n namespace: (_a = this[\"x-attribsNamespace\"]) === null || _a === void 0 ? void 0 : _a[name],\n prefix: (_b = this[\"x-attribsPrefix\"]) === null || _b === void 0 ? void 0 : _b[name],\n });\n });\n }\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node is a `Element`, `false` otherwise.\n */\nexport function isTag(node) {\n return isTagRaw(node);\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `CDATA`, `false` otherwise.\n */\nexport function isCDATA(node) {\n return node.type === ElementType.CDATA;\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `Text`, `false` otherwise.\n */\nexport function isText(node) {\n return node.type === ElementType.Text;\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `Comment`, `false` otherwise.\n */\nexport function isComment(node) {\n return node.type === ElementType.Comment;\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `ProcessingInstruction`, `false` otherwise.\n */\nexport function isDirective(node) {\n return node.type === ElementType.Directive;\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `ProcessingInstruction`, `false` otherwise.\n */\nexport function isDocument(node) {\n return node.type === ElementType.Root;\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has children, `false` otherwise.\n */\nexport function hasChildren(node) {\n return Object.prototype.hasOwnProperty.call(node, \"children\");\n}\n/**\n * Clone a node, and optionally its children.\n *\n * @param recursive Clone child nodes as well.\n * @returns A clone of the node.\n */\nexport function cloneNode(node, recursive = false) {\n let result;\n if (isText(node)) {\n result = new Text(node.data);\n }\n else if (isComment(node)) {\n result = new Comment(node.data);\n }\n else if (isTag(node)) {\n const children = recursive ? cloneChildren(node.children) : [];\n const clone = new Element(node.name, { ...node.attribs }, children);\n children.forEach((child) => (child.parent = clone));\n if (node.namespace != null) {\n clone.namespace = node.namespace;\n }\n if (node[\"x-attribsNamespace\"]) {\n clone[\"x-attribsNamespace\"] = { ...node[\"x-attribsNamespace\"] };\n }\n if (node[\"x-attribsPrefix\"]) {\n clone[\"x-attribsPrefix\"] = { ...node[\"x-attribsPrefix\"] };\n }\n result = clone;\n }\n else if (isCDATA(node)) {\n const children = recursive ? cloneChildren(node.children) : [];\n const clone = new CDATA(children);\n children.forEach((child) => (child.parent = clone));\n result = clone;\n }\n else if (isDocument(node)) {\n const children = recursive ? cloneChildren(node.children) : [];\n const clone = new Document(children);\n children.forEach((child) => (child.parent = clone));\n if (node[\"x-mode\"]) {\n clone[\"x-mode\"] = node[\"x-mode\"];\n }\n result = clone;\n }\n else if (isDirective(node)) {\n const instruction = new ProcessingInstruction(node.name, node.data);\n if (node[\"x-name\"] != null) {\n instruction[\"x-name\"] = node[\"x-name\"];\n instruction[\"x-publicId\"] = node[\"x-publicId\"];\n instruction[\"x-systemId\"] = node[\"x-systemId\"];\n }\n result = instruction;\n }\n else {\n throw new Error(`Not implemented yet: ${node.type}`);\n }\n result.startIndex = node.startIndex;\n result.endIndex = node.endIndex;\n if (node.sourceCodeLocation != null) {\n result.sourceCodeLocation = node.sourceCodeLocation;\n }\n return result;\n}\nfunction cloneChildren(childs) {\n const children = childs.map((child) => cloneNode(child, true));\n for (let i = 1; i < children.length; i++) {\n children[i].prev = children[i - 1];\n children[i - 1].next = children[i];\n }\n return children;\n}\n","import { ElementType } from \"domelementtype\";\nimport { Element, Text, Comment, CDATA, Document, ProcessingInstruction, } from \"./node.js\";\nexport * from \"./node.js\";\n// Default options\nconst defaultOpts = {\n withStartIndices: false,\n withEndIndices: false,\n xmlMode: false,\n};\nexport class DomHandler {\n /**\n * @param callback Called once parsing has completed.\n * @param options Settings for the handler.\n * @param elementCB Callback whenever a tag is closed.\n */\n constructor(callback, options, elementCB) {\n /** The elements of the DOM */\n this.dom = [];\n /** The root element for the DOM */\n this.root = new Document(this.dom);\n /** Indicated whether parsing has been completed. */\n this.done = false;\n /** Stack of open tags. */\n this.tagStack = [this.root];\n /** A data node that is still being written to. */\n this.lastNode = null;\n /** Reference to the parser instance. Used for location information. */\n this.parser = null;\n // Make it possible to skip arguments, for backwards-compatibility\n if (typeof options === \"function\") {\n elementCB = options;\n options = defaultOpts;\n }\n if (typeof callback === \"object\") {\n options = callback;\n callback = undefined;\n }\n this.callback = callback !== null && callback !== void 0 ? callback : null;\n this.options = options !== null && options !== void 0 ? options : defaultOpts;\n this.elementCB = elementCB !== null && elementCB !== void 0 ? elementCB : null;\n }\n onparserinit(parser) {\n this.parser = parser;\n }\n // Resets the handler back to starting state\n onreset() {\n this.dom = [];\n this.root = new Document(this.dom);\n this.done = false;\n this.tagStack = [this.root];\n this.lastNode = null;\n this.parser = null;\n }\n // Signals the handler that parsing is done\n onend() {\n if (this.done)\n return;\n this.done = true;\n this.parser = null;\n this.handleCallback(null);\n }\n onerror(error) {\n this.handleCallback(error);\n }\n onclosetag() {\n this.lastNode = null;\n const elem = this.tagStack.pop();\n if (this.options.withEndIndices) {\n elem.endIndex = this.parser.endIndex;\n }\n if (this.elementCB)\n this.elementCB(elem);\n }\n onopentag(name, attribs) {\n const type = this.options.xmlMode ? ElementType.Tag : undefined;\n const element = new Element(name, attribs, undefined, type);\n this.addNode(element);\n this.tagStack.push(element);\n }\n ontext(data) {\n const { lastNode } = this;\n if (lastNode && lastNode.type === ElementType.Text) {\n lastNode.data += data;\n if (this.options.withEndIndices) {\n lastNode.endIndex = this.parser.endIndex;\n }\n }\n else {\n const node = new Text(data);\n this.addNode(node);\n this.lastNode = node;\n }\n }\n oncomment(data) {\n if (this.lastNode && this.lastNode.type === ElementType.Comment) {\n this.lastNode.data += data;\n return;\n }\n const node = new Comment(data);\n this.addNode(node);\n this.lastNode = node;\n }\n oncommentend() {\n this.lastNode = null;\n }\n oncdatastart() {\n const text = new Text(\"\");\n const node = new CDATA([text]);\n this.addNode(node);\n text.parent = node;\n this.lastNode = text;\n }\n oncdataend() {\n this.lastNode = null;\n }\n onprocessinginstruction(name, data) {\n const node = new ProcessingInstruction(name, data);\n this.addNode(node);\n }\n handleCallback(error) {\n if (typeof this.callback === \"function\") {\n this.callback(error, this.dom);\n }\n else if (error) {\n throw error;\n }\n }\n addNode(node) {\n const parent = this.tagStack[this.tagStack.length - 1];\n const previousSibling = parent.children[parent.children.length - 1];\n if (this.options.withStartIndices) {\n node.startIndex = this.parser.startIndex;\n }\n if (this.options.withEndIndices) {\n node.endIndex = this.parser.endIndex;\n }\n parent.children.push(node);\n if (previousSibling) {\n node.prev = previousSibling;\n previousSibling.next = node;\n }\n node.parent = parent;\n this.lastNode = null;\n }\n}\nexport default DomHandler;\n",null,null,null,null,null,null,"export const elementNames = new Map([\n \"altGlyph\",\n \"altGlyphDef\",\n \"altGlyphItem\",\n \"animateColor\",\n \"animateMotion\",\n \"animateTransform\",\n \"clipPath\",\n \"feBlend\",\n \"feColorMatrix\",\n \"feComponentTransfer\",\n \"feComposite\",\n \"feConvolveMatrix\",\n \"feDiffuseLighting\",\n \"feDisplacementMap\",\n \"feDistantLight\",\n \"feDropShadow\",\n \"feFlood\",\n \"feFuncA\",\n \"feFuncB\",\n \"feFuncG\",\n \"feFuncR\",\n \"feGaussianBlur\",\n \"feImage\",\n \"feMerge\",\n \"feMergeNode\",\n \"feMorphology\",\n \"feOffset\",\n \"fePointLight\",\n \"feSpecularLighting\",\n \"feSpotLight\",\n \"feTile\",\n \"feTurbulence\",\n \"foreignObject\",\n \"glyphRef\",\n \"linearGradient\",\n \"radialGradient\",\n \"textPath\",\n].map((val) => [val.toLowerCase(), val]));\nexport const attributeNames = new Map([\n \"definitionURL\",\n \"attributeName\",\n \"attributeType\",\n \"baseFrequency\",\n \"baseProfile\",\n \"calcMode\",\n \"clipPathUnits\",\n \"diffuseConstant\",\n \"edgeMode\",\n \"filterUnits\",\n \"glyphRef\",\n \"gradientTransform\",\n \"gradientUnits\",\n \"kernelMatrix\",\n \"kernelUnitLength\",\n \"keyPoints\",\n \"keySplines\",\n \"keyTimes\",\n \"lengthAdjust\",\n \"limitingConeAngle\",\n \"markerHeight\",\n \"markerUnits\",\n \"markerWidth\",\n \"maskContentUnits\",\n \"maskUnits\",\n \"numOctaves\",\n \"pathLength\",\n \"patternContentUnits\",\n \"patternTransform\",\n \"patternUnits\",\n \"pointsAtX\",\n \"pointsAtY\",\n \"pointsAtZ\",\n \"preserveAlpha\",\n \"preserveAspectRatio\",\n \"primitiveUnits\",\n \"refX\",\n \"refY\",\n \"repeatCount\",\n \"repeatDur\",\n \"requiredExtensions\",\n \"requiredFeatures\",\n \"specularConstant\",\n \"specularExponent\",\n \"spreadMethod\",\n \"startOffset\",\n \"stdDeviation\",\n \"stitchTiles\",\n \"surfaceScale\",\n \"systemLanguage\",\n \"tableValues\",\n \"targetX\",\n \"targetY\",\n \"textLength\",\n \"viewBox\",\n \"viewTarget\",\n \"xChannelSelector\",\n \"yChannelSelector\",\n \"zoomAndPan\",\n].map((val) => [val.toLowerCase(), val]));\n",null,"import { Parser, type ParserOptions } from \"./Parser.js\";\nexport type { Handler, ParserOptions } from \"./Parser.js\";\nexport { Parser } from \"./Parser.js\";\n\nimport {\n DomHandler,\n type DomHandlerOptions,\n type ChildNode,\n type Element,\n type Document,\n} from \"domhandler\";\n\nexport {\n DomHandler,\n // Old name for DomHandler\n DomHandler as DefaultHandler,\n type DomHandlerOptions,\n} from \"domhandler\";\n\nexport type Options = ParserOptions & DomHandlerOptions;\n\n// Helper methods\n\n/**\n * Parses the data, returns the resulting document.\n *\n * @param data The data that should be parsed.\n * @param options Optional options for the parser and DOM handler.\n */\nexport function parseDocument(data: string, options?: Options): Document {\n const handler = new DomHandler(undefined, options);\n new Parser(handler, options).end(data);\n return handler.root;\n}\n/**\n * Parses data, returns an array of the root nodes.\n *\n * Note that the root nodes still have a `Document` node as their parent.\n * Use `parseDocument` to get the `Document` node instead.\n *\n * @param data The data that should be parsed.\n * @param options Optional options for the parser and DOM handler.\n * @deprecated Use `parseDocument` instead.\n */\nexport function parseDOM(data: string, options?: Options): ChildNode[] {\n return parseDocument(data, options).children;\n}\n/**\n * Creates a parser instance, with an attached DOM handler.\n *\n * @param callback A callback that will be called once parsing has been completed, with the resulting document.\n * @param options Optional options for the parser and DOM handler.\n * @param elementCallback An optional callback that will be called every time a tag has been completed inside of the DOM.\n */\nexport function createDocumentStream(\n callback: (error: Error | null, document: Document) => void,\n options?: Options,\n elementCallback?: (element: Element) => void,\n): Parser {\n const handler: DomHandler = new DomHandler(\n (error: Error | null) => callback(error, handler.root),\n options,\n elementCallback,\n );\n return new Parser(handler, options);\n}\n/**\n * Creates a parser instance, with an attached DOM handler.\n *\n * @param callback A callback that will be called once parsing has been completed, with an array of root nodes.\n * @param options Optional options for the parser and DOM handler.\n * @param elementCallback An optional callback that will be called every time a tag has been completed inside of the DOM.\n * @deprecated Use `createDocumentStream` instead.\n */\nexport function createDomStream(\n callback: (error: Error | null, dom: ChildNode[]) => void,\n options?: Options,\n elementCallback?: (element: Element) => void,\n): Parser {\n const handler = new DomHandler(callback, options, elementCallback);\n return new Parser(handler, options);\n}\n\nexport {\n default as Tokenizer,\n type Callbacks as TokenizerCallbacks,\n QuoteType,\n} from \"./Tokenizer.js\";\n\n/*\n * All of the following exports exist for backwards-compatibility.\n * They should probably be removed eventually.\n */\nexport * as ElementType from \"domelementtype\";\n\nimport { getFeed, type Feed } from \"domutils\";\n\nexport { getFeed, type Feed } from \"domutils\";\n\nconst parseFeedDefaultOptions = { xmlMode: true };\n\n/**\n * Parse a feed.\n *\n * @param feed The feed that should be parsed, as a string.\n * @param options Optionally, options for parsing. When using this, you should set `xmlMode` to `true`.\n */\nexport function parseFeed(\n feed: string,\n options: Options = parseFeedDefaultOptions,\n): Feed | null {\n return getFeed(parseDOM(feed, options));\n}\n\nexport * as DomUtils from \"domutils\";\n","import {\n type ChildNode,\n type Comment,\n type DataNode,\n type Document,\n type Element,\n} from \"domhandler\";\nimport { parseDocument } from \"htmlparser2\";\n\nexport type ASTNode = ASTElement | ASTText | ASTComment;\n\nexport interface ASTElement {\n type: \"element\";\n tag: string;\n attrs: Record<string, string | true>;\n children: ASTNode[];\n isSelfClosing: boolean;\n}\n\nexport interface ASTText {\n type: \"text\";\n content: string;\n}\n\nexport interface ASTComment {\n type: \"comment\";\n content: string;\n}\n\nconst VOID_TAGS = new Set([\n \"area\",\n \"base\",\n \"br\",\n \"col\",\n \"embed\",\n \"hr\",\n \"img\",\n \"input\",\n \"link\",\n \"meta\",\n \"param\",\n \"source\",\n \"track\",\n \"wbr\",\n]);\n\nfunction normalizeNewlines(value: string): string {\n return value.replace(/\\r\\n?/g, \"\\n\");\n}\n\nfunction readBracedValue(\n source: string,\n start: number,\n): { value: string; end: number } {\n let index = start + 1;\n let depth = 1;\n let quote: \"'\" | '\"' | \"`\" | null = null;\n let value = \"{\";\n\n while (index < source.length && depth > 0) {\n const char = source[index];\n const prev = source[index - 1];\n value += char;\n\n if (quote) {\n if (char === quote && prev !== \"\\\\\") {\n quote = null;\n }\n index += 1;\n continue;\n }\n\n if (char === \"'\" || char === '\"' || char === \"`\") {\n quote = char;\n index += 1;\n continue;\n }\n\n if (char === \"{\") {\n depth += 1;\n } else if (char === \"}\") {\n depth -= 1;\n }\n\n index += 1;\n }\n\n return { value, end: index };\n}\n\nfunction protectOlovaAttrExpressions(html: string): {\n html: string;\n placeholders: Map<string, string>;\n} {\n const placeholders = new Map<string, string>();\n let output = \"\";\n let index = 0;\n let count = 0;\n\n while (index < html.length) {\n const char = html[index];\n output += char;\n\n if (char !== \"=\" || html[index + 1] !== \"{\") {\n index += 1;\n continue;\n }\n\n const braced = readBracedValue(html, index + 1);\n const key = `__OLOVA_ATTR_EXPR_${count++}__`;\n placeholders.set(key, braced.value);\n output += `\"${key}\"`;\n index = braced.end;\n continue;\n }\n\n return { html: output, placeholders };\n}\n\nfunction normalizeAttrs(attribs: Record<string, string>): Record<string, string | true> {\n const output: Record<string, string | true> = {};\n\n for (const [name, value] of Object.entries(attribs)) {\n output[name] = value === \"\" ? true : value;\n }\n\n return output;\n}\n\nfunction isSelfClosingElement(node: Element): boolean {\n return VOID_TAGS.has(node.name.toLowerCase());\n}\n\nfunction toAstNode(node: ChildNode): ASTNode | null {\n if (node.type === \"text\") {\n return {\n type: \"text\",\n content: normalizeNewlines((node as DataNode).data),\n };\n }\n\n if (node.type === \"comment\") {\n return {\n type: \"comment\",\n content: normalizeNewlines((node as Comment).data),\n };\n }\n\n if (node.type === \"tag\" || node.type === \"script\" || node.type === \"style\") {\n const element = node as Element;\n return {\n type: \"element\",\n tag: element.name,\n attrs: normalizeAttrs(element.attribs ?? {}),\n children: toAstNodes(element.children ?? []),\n isSelfClosing: isSelfClosingElement(element),\n };\n }\n\n return null;\n}\n\nfunction toAstNodes(nodes: ChildNode[]): ASTNode[] {\n const output: ASTNode[] = [];\n\n for (const node of nodes) {\n const normalized = toAstNode(node);\n if (normalized) {\n output.push(normalized);\n }\n }\n\n return output;\n}\n\nexport function parseHTML(html: string): ASTNode[] {\n const protectedHtml = protectOlovaAttrExpressions(html);\n const document = parseDocument(protectedHtml.html, {\n decodeEntities: false,\n recognizeSelfClosing: true,\n lowerCaseAttributeNames: false,\n lowerCaseTags: false,\n });\n\n const rootNodes = (document as Document).children.filter((node) => {\n if (node.type === \"directive\" || node.type === \"cdata\") {\n return false;\n }\n return true;\n }) as ChildNode[];\n\n const ast = toAstNodes(rootNodes);\n const restorePlaceholders = (nodes: ASTNode[]): void => {\n for (const node of nodes) {\n if (node.type !== \"element\") {\n continue;\n }\n\n for (const [name, value] of Object.entries(node.attrs)) {\n if (typeof value !== \"string\") {\n continue;\n }\n\n const restored = protectedHtml.placeholders.get(value);\n if (restored) {\n node.attrs[name] = restored;\n }\n }\n\n restorePlaceholders(node.children);\n }\n };\n\n restorePlaceholders(ast);\n return ast;\n}\n","import { ASTNode, parseHTML } from \"./html-parser\";\r\n\r\nexport type TransformContext = {\r\n text: number;\r\n attr: number;\r\n event: number;\r\n comp: number;\r\n slot: number;\r\n};\r\n\r\ntype BuildContext = {\r\n statements: string[];\r\n nodes: string[];\r\n localCount: number;\r\n};\r\n\r\ntype TextFragment =\r\n | { type: \"static\"; value: string }\r\n | { type: \"dynamic\"; tokenType: string; id: string };\r\n\r\nconst SVG_NAMESPACE = \"http://www.w3.org/2000/svg\";\r\n\r\nfunction splitTextFragments(text: string): TextFragment[] {\r\n const parts: TextFragment[] = [];\r\n const tokenRe = /__O_(TEXT|HTML|SLOT|COMP|IF)_([a-zA-Z0-9_]+)__/g;\r\n\r\n let lastIndex = 0;\r\n let match: RegExpExecArray | null;\r\n\r\n while ((match = tokenRe.exec(text)) !== null) {\r\n if (match.index > lastIndex) {\r\n parts.push({ type: \"static\", value: text.slice(lastIndex, match.index) });\r\n }\r\n parts.push({ type: \"dynamic\", tokenType: match[1], id: match[2] });\r\n lastIndex = match.index + match[0].length;\r\n }\r\n\r\n if (lastIndex < text.length) {\r\n parts.push({ type: \"static\", value: text.slice(lastIndex) });\r\n }\r\n\r\n return parts;\r\n}\r\n\r\nfunction isSvgContext(tag: string, inSvg: boolean): boolean {\r\n if (tag === \"foreignObject\") {\r\n return false;\r\n }\r\n\r\n return inSvg || tag === \"svg\";\r\n}\r\n\r\nfunction processNode(\r\n node: ASTNode,\r\n parentVar: string,\r\n stateNames: Set<string>,\r\n transformExpr: (\r\n expr: string,\r\n stateNames: Set<string>,\r\n ) => { code: string; containsJsx: boolean },\r\n counters: TransformContext,\r\n buildCtx: BuildContext,\r\n componentNames: Set<string>,\r\n inSvg = false,\r\n) {\r\n if (node.type === \"comment\") {\r\n return;\r\n }\r\n\r\n if (node.type === \"text\") {\r\n const parts = splitTextFragments(node.content);\r\n for (const part of parts) {\r\n if (part.type === \"static\") {\r\n if (!part.value) continue;\r\n const varName = `_t${buildCtx.localCount++}`;\r\n buildCtx.statements.push(\r\n `const ${varName} = document.createTextNode(${JSON.stringify(part.value)});`,\r\n );\r\n buildCtx.statements.push(`${parentVar}.appendChild(${varName});`);\r\n } else {\r\n const varName = `_d${buildCtx.localCount++}`;\r\n buildCtx.statements.push(\r\n `const ${varName} = document.createTextNode('');`,\r\n );\r\n buildCtx.nodes.push(`'${part.id}': ${varName}`);\r\n buildCtx.statements.push(`${parentVar}.appendChild(${varName});`);\r\n }\r\n }\r\n return;\r\n }\r\n\r\n if (node.type === \"element\") {\r\n const tag = node.tag;\r\n const varName = `_el${buildCtx.localCount++}`;\r\n const useSvgNamespace = isSvgContext(tag, inSvg);\r\n buildCtx.statements.push(\r\n useSvgNamespace\r\n ? `const ${varName} = document.createElementNS(${JSON.stringify(SVG_NAMESPACE)}, ${JSON.stringify(tag)});`\r\n : `const ${varName} = document.createElement(${JSON.stringify(tag)});`,\r\n );\r\n\r\n for (const [attr, val] of Object.entries(node.attrs)) {\r\n if (attr.startsWith(\"data-o-on-\")) {\r\n if (typeof val === \"string\") {\r\n buildCtx.nodes.push(`'${val}': ${varName}`);\r\n }\r\n } else if (typeof val === \"string\" && val.includes(\"__O_ATTR_\")) {\r\n const match = val.match(/__O_ATTR_([a-zA-Z0-9_]+)__/);\r\n if (match) {\r\n buildCtx.nodes.push(`'${match[1]}': ${varName}`);\r\n }\r\n } else {\r\n if (val === true) {\r\n buildCtx.statements.push(\r\n `${varName}.setAttribute(${JSON.stringify(attr)}, \"\");`,\r\n );\r\n } else {\r\n buildCtx.statements.push(\r\n `${varName}.setAttribute(${JSON.stringify(attr)}, ${JSON.stringify(val)});`,\r\n );\r\n }\r\n }\r\n }\r\n\r\n for (const child of node.children) {\r\n processNode(\r\n child,\r\n varName,\r\n stateNames,\r\n transformExpr,\r\n counters,\r\n buildCtx,\r\n componentNames,\r\n useSvgNamespace,\r\n );\r\n }\r\n\r\n buildCtx.statements.push(`${parentVar}.appendChild(${varName});`);\r\n }\r\n}\r\n\r\nexport function generateBuildFunction(\r\n html: string,\r\n stateNames: Set<string>,\r\n transformExpr: (\r\n expr: string,\r\n stateNames: Set<string>,\r\n ) => { code: string; containsJsx: boolean },\r\n counters: TransformContext,\r\n componentNames: Set<string>,\r\n): string {\r\n const ast = parseHTML(html);\r\n\r\n const buildCtx: BuildContext = {\r\n statements: [],\r\n nodes: [],\r\n localCount: 0,\r\n };\r\n\r\n buildCtx.statements.push(\"const _f = document.createDocumentFragment();\");\r\n\r\n for (const child of ast) {\r\n processNode(\r\n child,\r\n \"_f\",\r\n stateNames,\r\n transformExpr,\r\n counters,\r\n buildCtx,\r\n componentNames,\r\n );\r\n }\r\n\r\n return `function() {\r\n ${buildCtx.statements.join(\"\\n \")}\r\n return { fragment: _f, nodes: { ${buildCtx.nodes.join(\", \")} } };\r\n }`;\r\n}\r\n","import { parse } from \"@babel/parser\";\r\nimport generatorModule from \"@babel/generator\";\r\nimport traverseModule from \"@babel/traverse\";\r\nimport type { NodePath } from \"@babel/traverse\";\r\nimport * as t from \"@babel/types\";\r\nimport ts from \"typescript\";\r\nimport { collectCss, createScopeAttr, hashScopeSeed } from \"./css-scope\";\r\nimport {\n type CompilePhase,\n createCompileError,\n normalizeCompileError,\n} from \"./diagnostics\";\nimport {\r\n parseOlovaFile,\r\n type ParsedOlovaFile,\r\n} from \"./parse\";\r\nimport { parseHTML, type ASTElement, type ASTNode } from \"./html-parser\";\r\nimport { generateBuildFunction } from \"./dom-generator\";\r\n\r\nconst generate =\r\n (generatorModule as unknown as { default?: typeof generatorModule })\r\n .default ?? generatorModule;\r\nconst traverse =\r\n (traverseModule as unknown as { default?: typeof traverseModule }).default ??\r\n traverseModule;\r\n\r\nconst CORE_KNOWN_IMPORTS = new Set([\r\n \"Signal\",\r\n \"computed\",\r\n \"createApp\",\r\n \"createErrorBoundary\",\r\n \"dangerouslySetHtml\",\r\n \"defineComponent\",\r\n \"derived\",\r\n \"effect\",\r\n \"getContext\",\r\n \"global\",\r\n \"hasContext\",\r\n \"mount\",\r\n \"onCleanup\",\r\n \"onMount\",\r\n \"replaceComponent\",\r\n \"setContext\",\r\n \"state\",\r\n \"Suspense\",\r\n]);\r\n\r\ntype CompileResult = {\r\n code: string;\r\n css?: string;\r\n map?: unknown;\r\n};\r\n\r\ntype TextBinding = { id: string; expr: string };\r\ntype HtmlBinding = { id: string; expr: string };\r\ntype AttrBinding = { id: string; attr: string; expr: string };\r\ntype EventBinding = { id: string; event: string; expr: string };\r\ntype SlotBinding = { id: string; name: string };\r\ntype SlotFactoryDef = {\r\n varName: string;\r\n name: string;\r\n descriptor: TemplateTransformResult;\r\n};\r\ntype ComponentBinding = {\r\n id: string;\r\n component: string;\r\n propsExpr: string;\r\n slotFactories: SlotFactoryDef[];\r\n};\r\ntype IfBinding = {\r\n id: string;\r\n expr: string;\r\n trueBranch: TemplateTransformResult;\r\n falseBranch?: TemplateTransformResult;\r\n};\r\n\r\ntype TemplateTransformResult = {\r\n html: string;\r\n textBindings: TextBinding[];\r\n htmlBindings: HtmlBinding[];\r\n attrBindings: AttrBinding[];\r\n eventBindings: EventBinding[];\r\n slotBindings: SlotBinding[];\r\n componentBindings: ComponentBinding[];\r\n ifBindings: IfBinding[];\r\n buildFnStr?: string;\r\n};\r\n\r\ntype TransformContext = {\r\n text: number;\r\n attr: number;\r\n event: number;\r\n comp: number;\r\n slot: number;\r\n if: number;\r\n};\r\n\r\nfunction escapeTemplate(source: string): string {\r\n return source.replace(/\\\\/g, \"\\\\\\\\\").replace(/`/g, \"\\\\`\");\r\n}\r\n\r\nfunction emitDevWarnings(warnings: Set<string>): void {\r\n for (const warning of warnings) {\r\n console.warn(warning);\r\n }\r\n}\r\n\r\nfunction parseModule(code: string): t.File {\n return parse(code, {\n sourceType: \"module\",\r\n plugins: [\"typescript\", \"jsx\"],\r\n });\n}\n\nfunction runCompilePhase<T>(\n phase: CompilePhase,\n fn: () => T,\n): T {\n try {\n return fn();\n } catch (error) {\n const compileError =\n (error instanceof Error ? error : new Error(String(error))) as Error & {\n phase?: CompilePhase;\n };\n if (!compileError.phase) {\n compileError.phase = phase;\n }\n throw compileError;\n }\n}\n\r\nfunction transpileTypeScript(code: string, filename = \"component.ts\"): CompileResult {\r\n const result = ts.transpileModule(code, {\r\n fileName: filename,\r\n compilerOptions: {\r\n target: ts.ScriptTarget.ES2022,\r\n module: ts.ModuleKind.ESNext,\r\n jsx: ts.JsxEmit.Preserve,\r\n importsNotUsedAsValues: ts.ImportsNotUsedAsValues.Remove,\r\n verbatimModuleSyntax: false,\r\n sourceMap: true,\r\n inlineSources: true,\r\n },\r\n });\r\n\r\n return {\r\n code: result.outputText.trim(),\r\n map: result.sourceMapText ? JSON.parse(result.sourceMapText) : null,\r\n };\r\n}\r\n\r\nfunction compileModuleScript(script: string, filename = \"module.olova.ts\"): CompileResult {\n return runCompilePhase(\"analyze-script\", () => {\n const scriptInfo = collectScriptInfo(script);\n return runCompilePhase(\"transpile\", () =>\n transpileTypeScript(\n [scriptInfo.importsCode, scriptInfo.scriptBodyCode].filter(Boolean).join(\"\\n\"),\n filename,\n ),\n );\n });\n}\n\r\nfunction isModuleOnlyScript(script: string): boolean {\r\n if (!script.trim()) {\r\n return false;\r\n }\r\n\r\n return true;\r\n}\r\n\r\nfunction isStateInit(node: t.Node | null | undefined): boolean {\r\n return !!(\r\n node &&\r\n t.isCallExpression(node) &&\r\n ((t.isIdentifier(node.callee) && node.callee.name === \"state\") ||\r\n (t.isMemberExpression(node.callee) &&\r\n t.isIdentifier(node.callee.object) &&\r\n node.callee.object.name === \"__olovaGlobal\" &&\r\n t.isIdentifier(node.callee.property) &&\r\n (node.callee.property.name === \"state\" ||\r\n node.callee.property.name === \"get\")))\r\n );\r\n}\r\n\r\nfunction isComputedInit(node: t.Node | null | undefined): boolean {\r\n return !!(\r\n node &&\r\n t.isCallExpression(node) &&\r\n t.isIdentifier(node.callee) &&\r\n (node.callee.name === \"computed\" || node.callee.name === \"derived\")\r\n );\r\n}\r\n\r\nfunction appendHmrStateKey(\r\n node: t.Node | null | undefined,\r\n key: string,\r\n): void {\r\n if (!node) {\r\n return;\r\n }\r\n\r\n if (t.isCallExpression(node) && t.isIdentifier(node.callee) && node.callee.name === \"state\") {\r\n const existingKey = node.arguments[1];\r\n if (!existingKey || !t.isStringLiteral(existingKey)) {\r\n node.arguments = [node.arguments[0] ?? t.identifier(\"undefined\"), t.stringLiteral(key)];\r\n }\r\n return;\r\n }\r\n\r\n if (t.isConditionalExpression(node)) {\r\n appendHmrStateKey(node.consequent, `${key}:then`);\r\n appendHmrStateKey(node.alternate, `${key}:else`);\r\n return;\r\n }\r\n\r\n if (t.isLogicalExpression(node)) {\r\n appendHmrStateKey(node.left, `${key}:left`);\r\n appendHmrStateKey(node.right, `${key}:right`);\r\n }\r\n}\r\n\r\nfunction containsStateInit(node: t.Node | null | undefined): boolean {\r\n if (!node) {\r\n return false;\r\n }\r\n\r\n if (isStateInit(node)) {\r\n return true;\r\n }\r\n\r\n if (t.isConditionalExpression(node)) {\r\n return (\r\n containsStateInit(node.consequent) || containsStateInit(node.alternate)\r\n );\r\n }\r\n\r\n if (t.isLogicalExpression(node)) {\r\n return containsStateInit(node.left) || containsStateInit(node.right);\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction containsSignalInit(node: t.Node | null | undefined): boolean {\r\n if (!node) {\r\n return false;\r\n }\r\n\r\n if (isStateInit(node) || isComputedInit(node)) {\r\n return true;\r\n }\r\n\r\n if (t.isConditionalExpression(node)) {\r\n return (\r\n containsSignalInit(node.consequent) || containsSignalInit(node.alternate)\r\n );\r\n }\r\n\r\n if (t.isLogicalExpression(node)) {\r\n return containsSignalInit(node.left) || containsSignalInit(node.right);\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction isGlobalStateCall(node: t.CallExpression): boolean {\r\n return (\r\n t.isMemberExpression(node.callee) &&\r\n t.isIdentifier(node.callee.object) &&\r\n (node.callee.object.name === \"global\" ||\r\n node.callee.object.name === \"__olovaGlobal\") &&\r\n t.isIdentifier(node.callee.property) &&\r\n node.callee.property.name === \"state\"\r\n );\r\n}\r\n\r\nfunction shouldSkipIdentifierTransform(path: NodePath<t.Identifier>): boolean {\r\n if (\r\n path.parentPath?.isVariableDeclarator() &&\r\n path.parentPath.node.id === path.node\r\n ) {\r\n return true;\r\n }\r\n\r\n if (\r\n path.parentPath?.isAssignmentExpression() &&\r\n path.parentPath.node.left === path.node\r\n ) {\r\n return true;\r\n }\r\n\r\n if (path.parentPath?.isUpdateExpression()) {\r\n return true;\r\n }\r\n\r\n if (\r\n path.parentPath?.isCallExpression() &&\r\n t.isIdentifier(path.parentPath.node.callee) &&\r\n path.parentPath.node.callee.name === \"setContext\" &&\r\n path.parentPath.node.arguments.includes(path.node as t.Expression)\r\n ) {\r\n return true;\r\n }\r\n\r\n if (\r\n path.parentPath?.isMemberExpression() &&\r\n path.parentPath.node.property === path.node &&\r\n !path.parentPath.node.computed\r\n ) {\r\n return true;\r\n }\r\n\r\n if (\r\n path.parentPath?.isMemberExpression() &&\r\n path.parentPath.node.object === path.node &&\r\n t.isIdentifier(path.parentPath.node.property) &&\r\n (path.parentPath.node.property.name === \"value\" ||\r\n path.parentPath.node.property.name === \"notify\")\r\n ) {\r\n return true;\r\n }\r\n\r\n if (\r\n path.parentPath?.isImportSpecifier() ||\r\n path.parentPath?.isExportSpecifier()\r\n ) {\r\n return true;\r\n }\r\n\r\n if (\r\n path.parentPath?.isObjectProperty() &&\r\n path.parentPath.node.key === path.node &&\r\n !path.parentPath.node.computed &&\r\n !(path.parentPath.node as t.ObjectProperty).shorthand\r\n ) {\r\n return true;\r\n }\r\n\r\n if (\r\n path.parentPath?.isFunctionDeclaration() &&\r\n path.parentPath.node.id === path.node\r\n ) {\r\n return true;\r\n }\r\n\r\n if (\r\n path.parentPath?.isClassDeclaration() &&\r\n path.parentPath.node.id === path.node\r\n ) {\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction addNestedMutationNotify(ast: t.File, stateNames: Set<string>): void {\r\n traverse(ast, {\r\n AssignmentExpression(path: NodePath<t.AssignmentExpression>) {\r\n const left = path.node.left;\r\n if (!t.isMemberExpression(left)) {\r\n return;\r\n }\r\n\r\n let root: t.MemberExpression = left;\r\n while (t.isMemberExpression(root.object)) {\r\n root = root.object as t.MemberExpression;\r\n }\r\n\r\n if (!t.isIdentifier(root.object)) {\r\n return;\r\n }\r\n\r\n if (!t.isIdentifier(root.property) || root.property.name !== \"value\") {\r\n return;\r\n }\r\n\r\n const stateName = root.object.name;\r\n if (!stateNames.has(stateName)) {\r\n return;\r\n }\r\n\r\n if (left === root) {\r\n return;\r\n }\r\n\r\n if (path.parentPath?.isSequenceExpression()) {\r\n return;\r\n }\r\n\r\n path.replaceWith(\r\n t.sequenceExpression([\r\n path.node,\r\n t.callExpression(\r\n t.memberExpression(t.identifier(stateName), t.identifier(\"notify\")),\r\n [],\r\n ),\r\n ]),\r\n );\r\n path.skip();\r\n },\r\n });\r\n}\r\n\r\nfunction collectScriptInfo(script: string): {\r\n importsCode: string;\r\n scriptBodyCode: string;\r\n stateNames: Set<string>;\r\n allSignalNames: Set<string>;\r\n componentNames: Set<string>;\r\n jsxFunctionNames: Set<string>;\r\n} {\r\n const ast = parseModule(script || \"\");\r\n const stateNames = new Set<string>();\r\n const allSignalNames = new Set<string>();\r\n const componentNames = new Set<string>();\r\n const jsxFunctionNames = new Set<string>();\r\n let needsGlobalRuntime = false;\r\n\r\n for (const node of ast.program.body) {\r\n if (!t.isImportDeclaration(node)) {\r\n continue;\r\n }\r\n\r\n for (const specifier of node.specifiers) {\r\n componentNames.add(specifier.local.name);\r\n }\r\n }\r\n\r\n const rewrittenBody: t.Statement[] = [];\r\n for (const node of ast.program.body) {\r\n if (\r\n t.isImportDeclaration(node) &&\r\n t.isStringLiteral(node.source) &&\r\n (node.source.value === \"olova/global\" || node.source.value === \"olova/core\")\r\n ) {\r\n if (node.source.value === \"olova/global\") {\r\n needsGlobalRuntime = true;\r\n const declarators: t.VariableDeclarator[] = [];\r\n\r\n for (const specifier of node.specifiers) {\r\n if (!t.isImportSpecifier(specifier)) {\r\n throw new Error(\r\n \"[olova] Use named imports with 'olova/global' (e.g. import { user } from 'olova/global').\",\r\n );\r\n }\r\n\r\n const imported = t.isIdentifier(specifier.imported)\r\n ? specifier.imported.name\r\n : specifier.imported.value;\r\n\r\n declarators.push(\r\n t.variableDeclarator(\r\n t.identifier(specifier.local.name),\r\n t.callExpression(\r\n t.memberExpression(\r\n t.identifier(\"__olovaGlobal\"),\r\n t.identifier(\"get\"),\r\n ),\r\n [t.stringLiteral(imported)],\r\n ),\r\n ),\r\n );\r\n }\r\n\r\n if (declarators.length > 0) {\r\n rewrittenBody.push(t.variableDeclaration(\"const\", declarators));\r\n }\r\n continue;\r\n }\r\n\r\n const keptSpecifiers: t.ImportDeclaration[\"specifiers\"] = [];\r\n const globalDeclarators: t.VariableDeclarator[] = [];\r\n\r\n for (const specifier of node.specifiers) {\r\n if (!t.isImportSpecifier(specifier)) {\r\n keptSpecifiers.push(specifier);\r\n continue;\r\n }\r\n\r\n const imported = t.isIdentifier(specifier.imported)\r\n ? specifier.imported.name\r\n : specifier.imported.value;\r\n\r\n if (CORE_KNOWN_IMPORTS.has(imported)) {\r\n keptSpecifiers.push(specifier);\r\n continue;\r\n }\r\n\r\n needsGlobalRuntime = true;\r\n globalDeclarators.push(\r\n t.variableDeclarator(\r\n t.identifier(specifier.local.name),\r\n t.callExpression(\r\n t.memberExpression(\r\n t.identifier(\"__olovaGlobal\"),\r\n t.identifier(\"get\"),\r\n ),\r\n [t.stringLiteral(imported)],\r\n ),\r\n ),\r\n );\r\n }\r\n\r\n if (keptSpecifiers.length > 0) {\r\n rewrittenBody.push(\r\n t.importDeclaration(keptSpecifiers, t.stringLiteral(\"olova/core\")),\r\n );\r\n }\r\n\r\n if (globalDeclarators.length > 0) {\r\n rewrittenBody.push(t.variableDeclaration(\"const\", globalDeclarators));\r\n }\r\n\r\n continue;\r\n }\r\n\r\n rewrittenBody.push(node);\r\n }\r\n ast.program.body = rewrittenBody;\r\n\r\n traverse(ast, {\r\n CallExpression(path: NodePath<t.CallExpression>) {\r\n if (!isGlobalStateCall(path.node)) {\r\n return;\r\n }\r\n\r\n needsGlobalRuntime = true;\r\n path.node.callee = t.memberExpression(\r\n t.identifier(\"__olovaGlobal\"),\r\n t.identifier(\"state\"),\r\n );\r\n\r\n if (\r\n path.parentPath &&\r\n path.parentPath.isVariableDeclarator() &&\r\n t.isIdentifier(path.parentPath.node.id)\r\n ) {\r\n const firstArg = path.node.arguments[0];\r\n const alreadyNamed =\r\n !!firstArg &&\r\n t.isStringLiteral(firstArg as t.Expression) &&\r\n (firstArg as t.StringLiteral).value.length > 0;\r\n\r\n if (!alreadyNamed) {\r\n path.node.arguments = [\r\n t.stringLiteral(path.parentPath.node.id.name),\r\n ...path.node.arguments,\r\n ];\r\n }\r\n }\r\n },\r\n });\r\n\r\n traverse(ast, {\r\n VariableDeclarator(path: NodePath<t.VariableDeclarator>) {\r\n if (!t.isIdentifier(path.node.id)) {\r\n return;\r\n }\r\n\r\n if (containsStateInit(path.node.init)) {\r\n stateNames.add(path.node.id.name);\r\n appendHmrStateKey(path.node.init, path.node.id.name);\r\n }\r\n\r\n if (containsSignalInit(path.node.init)) {\r\n allSignalNames.add(path.node.id.name);\r\n }\r\n },\r\n });\r\n\r\n traverse(ast, {\r\n AssignmentExpression(path: NodePath<t.AssignmentExpression>) {\r\n if (!t.isIdentifier(path.node.left)) {\r\n return;\r\n }\r\n\r\n const name = path.node.left.name;\r\n if (!stateNames.has(name)) {\r\n return;\r\n }\r\n\r\n const binding = path.scope.getBinding(name);\r\n if (!binding || !t.isVariableDeclarator(binding.path.node)) {\r\n return;\r\n }\r\n\r\n if (\r\n !t.isIdentifier(binding.path.node.id) ||\r\n !containsStateInit(binding.path.node.init)\r\n ) {\r\n return;\r\n }\r\n\r\n path.node.left = t.memberExpression(\r\n t.identifier(name),\r\n t.identifier(\"value\"),\r\n );\r\n },\r\n UpdateExpression(path: NodePath<t.UpdateExpression>) {\r\n if (!t.isIdentifier(path.node.argument)) {\r\n return;\r\n }\r\n\r\n const name = path.node.argument.name;\r\n if (!stateNames.has(name)) {\r\n return;\r\n }\r\n\r\n const binding = path.scope.getBinding(name);\r\n if (!binding || !t.isVariableDeclarator(binding.path.node)) {\r\n return;\r\n }\r\n\r\n if (\r\n !t.isIdentifier(binding.path.node.id) ||\r\n !containsStateInit(binding.path.node.init)\r\n ) {\r\n return;\r\n }\r\n\r\n path.node.argument = t.memberExpression(\r\n t.identifier(name),\r\n t.identifier(\"value\"),\r\n );\r\n },\r\n });\r\n\r\n traverse(ast, {\r\n Identifier(path: NodePath<t.Identifier>) {\r\n const name = path.node.name;\r\n if (!allSignalNames.has(name)) {\r\n return;\r\n }\r\n\r\n if (shouldSkipIdentifierTransform(path)) {\r\n return;\r\n }\r\n\r\n const binding = path.scope.getBinding(name);\r\n if (!binding || !t.isVariableDeclarator(binding.path.node)) {\r\n return;\r\n }\r\n\r\n if (\r\n !t.isIdentifier(binding.path.node.id) ||\r\n !containsSignalInit(binding.path.node.init)\r\n ) {\r\n return;\r\n }\r\n\r\n path.replaceWith(\r\n t.memberExpression(t.identifier(name), t.identifier(\"value\")),\r\n );\r\n path.skip();\r\n },\r\n });\r\n\r\n addNestedMutationNotify(ast, stateNames);\r\n\r\n const nodeContainsJsx = (node: t.Node | null | undefined): boolean => {\r\n if (!node) {\r\n return false;\r\n }\r\n\r\n let found = false;\r\n traverse(parseModule(`(${generate(node).code})`), {\r\n JSXElement() {\r\n found = true;\r\n },\r\n JSXFragment() {\r\n found = true;\r\n },\r\n });\r\n return found;\r\n };\r\n\r\n traverse(ast, {\r\n FunctionDeclaration(path: NodePath<t.FunctionDeclaration>) {\r\n if (path.node.id && nodeContainsJsx(path.node.body)) {\r\n jsxFunctionNames.add(path.node.id.name);\r\n }\r\n },\r\n VariableDeclarator(path: NodePath<t.VariableDeclarator>) {\r\n if (\r\n t.isIdentifier(path.node.id) &&\r\n nodeContainsJsx(path.node.init)\r\n ) {\r\n jsxFunctionNames.add(path.node.id.name);\r\n }\r\n },\r\n });\r\n\r\n traverse(ast, {\r\n JSXElement(path: NodePath<t.JSXElement>) {\r\n const transformed = transformExpression(\r\n generate(path.node).code,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n );\r\n const parsed = parseModule(`(${transformed.code})`);\r\n const statement = parsed.program.body[0];\r\n if (statement && t.isExpressionStatement(statement)) {\r\n path.replaceWith(statement.expression);\r\n path.skip();\r\n }\r\n },\r\n JSXFragment(path: NodePath<t.JSXFragment>) {\r\n const transformed = transformExpression(\r\n generate(path.node).code,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n );\r\n const parsed = parseModule(`(${transformed.code})`);\r\n const statement = parsed.program.body[0];\r\n if (statement && t.isExpressionStatement(statement)) {\r\n path.replaceWith(statement.expression);\r\n path.skip();\r\n }\r\n },\r\n });\r\n\r\n if (needsGlobalRuntime) {\r\n ast.program.body.unshift(\r\n t.importDeclaration(\r\n [\r\n t.importSpecifier(\r\n t.identifier(\"__olovaGlobal\"),\r\n t.identifier(\"global\"),\r\n ),\r\n ],\r\n t.stringLiteral(\"olova/global\"),\r\n ),\r\n );\r\n }\r\n\r\n const importNodes = ast.program.body.filter(\r\n (node): node is t.ImportDeclaration => t.isImportDeclaration(node),\r\n );\r\n const bodyNodes = ast.program.body.filter(\r\n (node) => !t.isImportDeclaration(node),\r\n );\r\n\r\n const importsCode = importNodes.map((node) => generate(node).code).join(\"\\n\");\r\n const scriptBodyCode = bodyNodes\r\n .map((node) => generate(node).code)\r\n .join(\"\\n\");\r\n\r\n return {\r\n importsCode,\r\n scriptBodyCode,\r\n stateNames,\r\n allSignalNames,\r\n componentNames,\r\n jsxFunctionNames,\r\n };\r\n}\r\n\r\ntype TransformedExpression = {\r\n code: string;\r\n containsJsx: boolean;\r\n};\r\n\r\nfunction transformExpression(\r\n expr: string,\r\n stateNames: Set<string>,\r\n allSignalNames: Set<string>,\r\n jsxFunctionNames: Set<string> = new Set<string>(),\r\n scopeId?: string,\r\n): TransformedExpression {\r\n const ast = parseModule(`(${expr})`);\r\n let containsJsx = false;\r\n const jsxScopeAttr = createScopeAttr(scopeId);\r\n\r\n traverse(ast, {\r\n AssignmentExpression(path: NodePath<t.AssignmentExpression>) {\r\n if (!t.isIdentifier(path.node.left)) {\r\n return;\r\n }\r\n\r\n const name = path.node.left.name;\r\n if (!stateNames.has(name)) {\r\n return;\r\n }\r\n\r\n const binding = path.scope.getBinding(name);\r\n if (binding) {\r\n return;\r\n }\r\n\r\n path.node.left = t.memberExpression(\r\n t.identifier(name),\r\n t.identifier(\"value\"),\r\n );\r\n },\r\n UpdateExpression(path: NodePath<t.UpdateExpression>) {\r\n if (!t.isIdentifier(path.node.argument)) {\r\n return;\r\n }\r\n\r\n const name = path.node.argument.name;\r\n if (!stateNames.has(name)) {\r\n return;\r\n }\r\n\r\n const binding = path.scope.getBinding(name);\r\n if (binding) {\r\n return;\r\n }\r\n\r\n path.node.argument = t.memberExpression(\r\n t.identifier(name),\r\n t.identifier(\"value\"),\r\n );\r\n },\r\n });\r\n\r\n traverse(ast, {\r\n Identifier(path: NodePath<t.Identifier>) {\r\n const name = path.node.name;\r\n if (!allSignalNames.has(name)) {\r\n return;\r\n }\r\n\r\n if (shouldSkipIdentifierTransform(path)) {\r\n return;\r\n }\r\n\r\n const binding = path.scope.getBinding(name);\r\n if (binding) {\r\n return;\r\n }\r\n\r\n path.replaceWith(\r\n t.memberExpression(t.identifier(name), t.identifier(\"value\")),\r\n );\r\n path.skip();\r\n },\r\n });\r\n\r\n addNestedMutationNotify(ast, stateNames);\r\n\r\n const toStringCall = (input: t.Expression): t.CallExpression =>\r\n t.callExpression(t.identifier(\"__olovaToString\"), [input]);\r\n const escapeCall = (input: t.Expression): t.CallExpression =>\r\n t.callExpression(t.identifier(\"__olovaEscape\"), [input]);\r\n\r\n const expressionContainsJsx = (input: t.Node): boolean => {\r\n let found = false;\r\n traverse(parseModule(`(${generate(input).code})`), {\r\n JSXElement() {\r\n found = true;\r\n },\r\n JSXFragment() {\r\n found = true;\r\n },\r\n });\r\n return found;\r\n };\r\n\r\n const expressionProducesHtml = (input: t.Node | null | undefined): boolean => {\r\n if (!input) {\r\n return false;\r\n }\r\n\r\n if (expressionContainsJsx(input)) {\r\n return true;\r\n }\r\n\r\n let found = false;\r\n traverse(parseModule(`(${generate(input).code})`), {\r\n CallExpression(path) {\r\n if (\r\n t.isIdentifier(path.node.callee) &&\r\n jsxFunctionNames.has(path.node.callee.name)\r\n ) {\r\n found = true;\r\n path.stop();\r\n return;\r\n }\r\n\r\n if (\r\n t.isMemberExpression(path.node.callee) &&\r\n t.isIdentifier(path.node.callee.property) &&\r\n (path.node.callee.property.name === \"map\" ||\r\n path.node.callee.property.name === \"flatMap\")\r\n ) {\r\n const [firstArg] = path.node.arguments;\r\n if (\r\n (t.isIdentifier(firstArg) && jsxFunctionNames.has(firstArg.name)) ||\r\n nodeContainsRenderableFunction(firstArg, jsxFunctionNames)\r\n ) {\r\n found = true;\r\n path.stop();\r\n }\r\n }\r\n },\r\n });\r\n\r\n return found;\r\n };\r\n\r\n const nodeContainsRenderableFunction = (\r\n node: t.Node | null | undefined,\r\n knownJsxFunctions: Set<string>,\r\n ): boolean => {\r\n if (!node) {\r\n return false;\r\n }\r\n\r\n if (t.isArrowFunctionExpression(node) || t.isFunctionExpression(node)) {\r\n return (\r\n expressionContainsJsx(node.body) || expressionProducesHtml(node.body)\r\n );\r\n }\r\n\r\n if (t.isIdentifier(node)) {\r\n return knownJsxFunctions.has(node.name);\r\n }\r\n\r\n return false;\r\n };\r\n\r\n const concatExpressions = (parts: t.Expression[]): t.Expression => {\r\n if (parts.length === 0) {\r\n return t.stringLiteral(\"\");\r\n }\r\n\r\n return parts\r\n .slice(1)\r\n .reduce<t.Expression>(\r\n (acc, current) => t.binaryExpression(\"+\", acc, current),\r\n parts[0],\r\n );\r\n };\r\n\r\n const jsxNameToString = (\r\n name: t.JSXIdentifier | t.JSXMemberExpression | t.JSXNamespacedName,\r\n ): string => {\r\n if (t.isJSXIdentifier(name)) {\r\n return name.name;\r\n }\r\n\r\n if (t.isJSXNamespacedName(name)) {\r\n return `${name.namespace.name}:${name.name.name}`;\r\n }\r\n\r\n const walkMember = (\r\n node: t.JSXIdentifier | t.JSXMemberExpression,\r\n ): string => {\r\n if (t.isJSXIdentifier(node)) {\r\n return node.name;\r\n }\r\n\r\n return `${walkMember(node.object)}.${node.property.name}`;\r\n };\r\n\r\n return walkMember(name);\r\n };\r\n\r\n const transformEmbeddedJsxExpression = (\r\n input: t.Expression,\r\n ): { expression: t.Expression; containsJsx: boolean } => {\r\n const wrapped = parseModule(`(${generate(input).code})`);\r\n let containsNestedJsx = false;\r\n\r\n traverse(wrapped, {\r\n JSXElement(path) {\r\n containsNestedJsx = true;\r\n path.replaceWith(jsxElementToExpression(path.node));\r\n path.skip();\r\n },\r\n JSXFragment(path) {\r\n containsNestedJsx = true;\r\n path.replaceWith(jsxFragmentToExpression(path.node));\r\n path.skip();\r\n },\r\n });\r\n\r\n const statement = wrapped.program.body[0];\r\n if (!statement || !t.isExpressionStatement(statement)) {\r\n return { expression: input, containsJsx: containsNestedJsx };\r\n }\r\n\r\n return {\r\n expression: statement.expression,\r\n containsJsx: containsNestedJsx,\r\n };\r\n };\r\n\r\n const jsxAttrToExpression = (\r\n attr: t.JSXAttribute | t.JSXSpreadAttribute,\r\n ): t.Expression => {\r\n if (t.isJSXSpreadAttribute(attr)) {\r\n const transformed = transformEmbeddedJsxExpression(\r\n attr.argument as t.Expression,\r\n );\r\n return t.callExpression(t.identifier(\"__olovaSpreadAttrs\"), [\r\n transformed.expression,\r\n ]);\r\n }\r\n\r\n const name = jsxNameToString(attr.name);\r\n if (name === \"key\") {\r\n return t.stringLiteral(\"\");\r\n }\r\n\r\n const normalizedName = name === \"className\" ? \"class\" : name;\r\n const eventMatch = name.match(/^(?:on:|on)([A-Za-z]+)$/);\r\n if (!attr.value) {\r\n return t.stringLiteral(` ${normalizedName}`);\r\n }\r\n\r\n if (t.isStringLiteral(attr.value)) {\r\n return t.stringLiteral(` ${normalizedName}=\"${attr.value.value}\"`);\r\n }\r\n\r\n if (t.isJSXExpressionContainer(attr.value)) {\r\n const transformed = transformEmbeddedJsxExpression(\r\n (attr.value.expression as t.Expression) ?? t.stringLiteral(\"\"),\r\n );\r\n\r\n if (eventMatch) {\r\n return t.callExpression(t.identifier(\"__olovaRegisterJsxEvent\"), [\r\n t.stringLiteral(eventMatch[1].toLowerCase()),\r\n transformed.expression,\r\n ]);\r\n }\r\n\r\n const valueExpression =\r\n normalizedName === \"class\"\r\n ? t.callExpression(t.identifier(\"__olovaNormalizeClassValue\"), [\r\n transformed.expression,\r\n ])\r\n : transformed.expression;\r\n\r\n return concatExpressions([\r\n t.stringLiteral(` ${normalizedName}=\"`),\r\n escapeCall(valueExpression),\r\n t.stringLiteral('\"'),\r\n ]);\r\n }\r\n\r\n return t.stringLiteral(\"\");\r\n };\r\n\r\n const jsxChildToExpression = (\r\n child:\r\n | t.JSXText\r\n | t.JSXExpressionContainer\r\n | t.JSXElement\r\n | t.JSXFragment\r\n | t.JSXSpreadChild,\r\n ): t.Expression => {\r\n if (t.isJSXText(child)) {\r\n return t.stringLiteral(child.value);\r\n }\r\n\r\n if (t.isJSXExpressionContainer(child)) {\r\n if (t.isJSXEmptyExpression(child.expression)) {\r\n return t.stringLiteral(\"\");\r\n }\r\n\r\n const rawExpression = child.expression as t.Expression;\r\n const transformed = transformEmbeddedJsxExpression(rawExpression);\r\n return transformed.containsJsx || expressionProducesHtml(rawExpression)\r\n ? toStringCall(transformed.expression)\r\n : escapeCall(transformed.expression);\r\n }\r\n\r\n if (t.isJSXSpreadChild(child)) {\r\n const transformed = transformEmbeddedJsxExpression(child.expression);\r\n return transformed.containsJsx || expressionProducesHtml(child.expression)\r\n ? toStringCall(transformed.expression)\r\n : escapeCall(transformed.expression);\r\n }\r\n\r\n if (t.isJSXElement(child)) {\r\n return jsxElementToExpression(child);\r\n }\r\n\r\n return jsxFragmentToExpression(child);\r\n };\r\n\r\n const jsxFragmentToExpression = (fragment: t.JSXFragment): t.Expression => {\r\n const parts = fragment.children.map((child) => jsxChildToExpression(child));\r\n return concatExpressions(parts);\r\n };\r\n\r\n const jsxElementToExpression = (element: t.JSXElement): t.Expression => {\r\n const opening = element.openingElement;\r\n const tag = jsxNameToString(opening.name);\r\n\r\n if (tag === \"For\") {\r\n let eachExpr: t.Expression = t.arrayExpression([]);\r\n for (const attr of opening.attributes) {\r\n if (\r\n t.isJSXAttribute(attr) &&\r\n jsxNameToString(attr.name) === \"each\" &&\r\n attr.value &&\r\n t.isJSXExpressionContainer(attr.value) &&\r\n !t.isJSXEmptyExpression(attr.value.expression)\r\n ) {\r\n eachExpr = transformEmbeddedJsxExpression(\r\n attr.value.expression as t.Expression,\r\n ).expression;\r\n }\r\n }\r\n\r\n const childRenderer = element.children.find(\r\n (child): child is t.JSXExpressionContainer =>\r\n t.isJSXExpressionContainer(child) &&\r\n !t.isJSXEmptyExpression(child.expression),\r\n );\r\n if (!childRenderer) {\r\n return t.stringLiteral(\"\");\r\n }\r\n\r\n return t.callExpression(t.identifier(\"__olovaFor\"), [\r\n eachExpr,\r\n transformEmbeddedJsxExpression(\r\n childRenderer.expression as t.Expression,\r\n ).expression,\r\n ]);\r\n }\r\n\r\n if (tag === \"Show\") {\r\n let whenExpr: t.Expression = t.booleanLiteral(false);\r\n let fallbackExpr: t.Expression = t.stringLiteral(\"\");\r\n for (const attr of opening.attributes) {\r\n if (!t.isJSXAttribute(attr)) {\r\n continue;\r\n }\r\n\r\n const attrName = jsxNameToString(attr.name);\r\n if (\r\n attrName === \"when\" &&\r\n attr.value &&\r\n t.isJSXExpressionContainer(attr.value) &&\r\n !t.isJSXEmptyExpression(attr.value.expression)\r\n ) {\r\n whenExpr = transformEmbeddedJsxExpression(\r\n attr.value.expression as t.Expression,\r\n ).expression;\r\n }\r\n\r\n if (\r\n attrName === \"fallback\" &&\r\n attr.value &&\r\n t.isJSXExpressionContainer(attr.value) &&\r\n !t.isJSXEmptyExpression(attr.value.expression)\r\n ) {\r\n fallbackExpr = transformEmbeddedJsxExpression(\r\n attr.value.expression as t.Expression,\r\n ).expression;\r\n }\r\n }\r\n\r\n const childExpr = concatExpressions(\r\n element.children\r\n .map((child) => jsxChildToExpression(child))\r\n .filter(Boolean),\r\n );\r\n\r\n return t.callExpression(t.identifier(\"__olovaShow\"), [\r\n whenExpr,\r\n t.arrowFunctionExpression(\r\n [t.identifier(\"__value\")],\r\n childExpr,\r\n ),\r\n fallbackExpr,\r\n ]);\r\n }\r\n\r\n const attrExpr = concatExpressions(\r\n [\r\n ...(jsxScopeAttr ? [t.stringLiteral(` ${jsxScopeAttr}`)] : []),\r\n ...opening.attributes.map((attr) => jsxAttrToExpression(attr)),\r\n ],\r\n );\r\n const childExpr = concatExpressions(\r\n element.children\r\n .map((child) => jsxChildToExpression(child))\r\n .filter(Boolean),\r\n );\r\n\r\n if (opening.selfClosing) {\r\n return concatExpressions([\r\n t.stringLiteral(`<${tag}`),\r\n attrExpr,\r\n t.stringLiteral(\"/>\"),\r\n ]);\r\n }\r\n\r\n return concatExpressions([\r\n t.stringLiteral(`<${tag}`),\r\n attrExpr,\r\n t.stringLiteral(\">\"),\r\n childExpr,\r\n t.stringLiteral(`</${tag}>`),\r\n ]);\r\n };\r\n\r\n traverse(ast, {\r\n JSXElement(path) {\r\n containsJsx = true;\r\n path.replaceWith(jsxElementToExpression(path.node));\r\n path.skip();\r\n },\r\n JSXFragment(path) {\r\n containsJsx = true;\r\n path.replaceWith(jsxFragmentToExpression(path.node));\r\n path.skip();\r\n },\r\n });\r\n\r\n const statement = ast.program.body[0];\r\n if (!statement || !t.isExpressionStatement(statement)) {\r\n return { code: expr.trim(), containsJsx };\r\n }\r\n\r\n containsJsx = containsJsx || expressionProducesHtml(statement.expression);\r\n\r\n return { code: generate(statement.expression).code, containsJsx };\r\n}\r\n\r\nfunction jsxToTemplateHtml(node: t.Node): string {\r\n if (t.isJSXElement(node)) {\r\n const opening = node.openingElement;\r\n let tag = \"\";\r\n if (t.isJSXIdentifier(opening.name)) {\r\n tag = opening.name.name;\r\n } else if (t.isJSXMemberExpression(opening.name)) {\r\n const walk = (n: t.JSXIdentifier | t.JSXMemberExpression): string =>\r\n t.isJSXIdentifier(n) ? n.name : `${walk(n.object)}.${n.property.name}`;\r\n tag = walk(opening.name);\r\n } else if (t.isJSXNamespacedName(opening.name)) {\r\n tag = `${opening.name.namespace.name}:${opening.name.name.name}`;\r\n }\r\n\r\n let attrsStr = \"\";\r\n for (const attr of opening.attributes) {\r\n if (t.isJSXSpreadAttribute(attr)) {\r\n attrsStr += ` {...${generate(attr.argument).code}}`;\r\n } else {\r\n let attrName = \"\";\r\n if (t.isJSXIdentifier(attr.name)) attrName = attr.name.name;\r\n else attrName = `${attr.name.namespace.name}:${attr.name.name.name}`;\r\n\r\n if (!attr.value) attrsStr += ` ${attrName}`;\r\n else if (t.isStringLiteral(attr.value))\r\n attrsStr += ` ${attrName}=\"${attr.value.value}\"`;\r\n else if (t.isJSXExpressionContainer(attr.value)) {\r\n if (!t.isJSXEmptyExpression(attr.value.expression)) {\r\n attrsStr += ` ${attrName}={${generate(attr.value.expression).code}}`;\r\n }\r\n }\r\n }\r\n }\r\n\r\n const childrenStr = node.children.map(jsxToTemplateHtml).join(\"\");\r\n if (opening.selfClosing) {\r\n return `<${tag}${attrsStr} />`;\r\n }\r\n return `<${tag}${attrsStr}>${childrenStr}</${tag}>`;\r\n }\r\n if (t.isJSXText(node)) {\r\n return node.value;\r\n }\r\n if (t.isJSXExpressionContainer(node)) {\r\n if (t.isJSXEmptyExpression(node.expression)) return \"\";\r\n return `{${generate(node.expression).code}}`;\r\n }\r\n if (t.isJSXFragment(node)) {\r\n return node.children.map(jsxToTemplateHtml).join(\"\");\r\n }\r\n return \"\";\r\n}\r\n\r\nfunction replaceTemplateExpressions(\r\n input: string,\r\n replacer: (expression: string) => string,\r\n): string {\r\n let output = \"\";\r\n let index = 0;\r\n let inTag = false;\r\n let tagQuote: \"'\" | '\"' | \"`\" | null = null;\r\n let tagBraceDepth = 0;\r\n\r\n while (index < input.length) {\r\n const char = input[index];\r\n const prev = index > 0 ? input[index - 1] : \"\";\r\n\r\n if (inTag) {\r\n output += char;\r\n\r\n if (tagQuote) {\r\n if (char === tagQuote && prev !== \"\\\\\") {\r\n tagQuote = null;\r\n }\r\n index += 1;\r\n continue;\r\n }\r\n\r\n if (char === \"'\" || char === '\"' || char === \"`\") {\r\n tagQuote = char;\r\n } else if (char === \"{\") {\r\n tagBraceDepth += 1;\r\n } else if (char === \"}\" && tagBraceDepth > 0) {\r\n tagBraceDepth -= 1;\r\n } else if (char === \">\" && tagBraceDepth === 0) {\r\n inTag = false;\r\n }\r\n\r\n index += 1;\r\n continue;\r\n }\r\n\r\n if (char === \"<\") {\r\n inTag = true;\r\n output += char;\r\n index += 1;\r\n continue;\r\n }\r\n\r\n if (char !== \"{\") {\r\n output += char;\r\n index += 1;\r\n continue;\r\n }\r\n\r\n if (prev === \"$\") {\r\n output += char;\r\n index += 1;\r\n continue;\r\n }\r\n\r\n let depth = 1;\r\n let cursor = index + 1;\r\n let quote: \"'\" | '\"' | \"`\" | null = null;\r\n\r\n while (cursor < input.length && depth > 0) {\r\n const char = input[cursor];\r\n const prev = input[cursor - 1];\r\n\r\n if (quote) {\r\n if (char === quote && prev !== \"\\\\\") {\r\n quote = null;\r\n }\r\n cursor += 1;\r\n continue;\r\n }\r\n\r\n if (char === \"'\" || char === '\"' || char === \"`\") {\r\n quote = char;\r\n cursor += 1;\r\n continue;\r\n }\r\n\r\n if (char === \"{\") {\r\n depth += 1;\r\n } else if (char === \"}\") {\r\n depth -= 1;\r\n }\r\n\r\n cursor += 1;\r\n }\r\n\r\n if (depth !== 0) {\r\n throw createCompileError(\"[olova] Unclosed template expression block.\", input, index);\r\n }\r\n\r\n const expression = input.slice(index + 1, cursor - 1);\r\n output += replacer(expression);\r\n index = cursor;\r\n }\r\n\r\n return output;\r\n}\r\n\r\nfunction parseProps(\r\n attrSource: string,\r\n stateNames: Set<string>,\r\n allSignalNames: Set<string>,\r\n): string {\r\n const props: Array<string> = [];\r\n let index = 0;\r\n\r\n const skipWhitespace = () => {\r\n while (index < attrSource.length && /\\s/.test(attrSource[index])) {\r\n index += 1;\r\n }\r\n };\r\n\r\n const readValue = (): string => {\r\n const start = index;\r\n const first = attrSource[index];\r\n\r\n if (first === '\"' || first === \"'\") {\r\n index += 1;\r\n while (index < attrSource.length) {\r\n const char = attrSource[index];\r\n if (char === \"\\\\\" && index + 1 < attrSource.length) {\r\n index += 2;\r\n continue;\r\n }\r\n\r\n index += 1;\r\n if (char === first) {\r\n break;\r\n }\r\n }\r\n return attrSource.slice(start, index);\r\n }\r\n\r\n if (first === \"{\") {\r\n let depth = 1;\r\n let quote: \"'\" | '\"' | \"`\" | null = null;\r\n index += 1;\r\n\r\n while (index < attrSource.length && depth > 0) {\r\n const char = attrSource[index];\r\n const prev = attrSource[index - 1];\r\n\r\n if (quote) {\r\n if (char === quote && prev !== \"\\\\\") {\r\n quote = null;\r\n }\r\n index += 1;\r\n continue;\r\n }\r\n\r\n if (char === \"'\" || char === '\"' || char === \"`\") {\r\n quote = char;\r\n index += 1;\r\n continue;\r\n }\r\n\r\n if (char === \"{\") {\r\n depth += 1;\r\n } else if (char === \"}\") {\r\n depth -= 1;\r\n }\r\n\r\n index += 1;\r\n }\r\n\r\n return attrSource.slice(start, index);\r\n }\r\n\r\n while (index < attrSource.length && !/\\s/.test(attrSource[index])) {\r\n index += 1;\r\n }\r\n\r\n return attrSource.slice(start, index);\r\n };\r\n\r\n while (index < attrSource.length) {\r\n skipWhitespace();\r\n if (index >= attrSource.length) {\r\n break;\r\n }\r\n\r\n const keyStart = index;\r\n while (\r\n index < attrSource.length &&\r\n !/\\s/.test(attrSource[index]) &&\r\n attrSource[index] !== \"=\"\r\n ) {\r\n index += 1;\r\n }\r\n\r\n const key = attrSource.slice(keyStart, index);\r\n if (!key) {\r\n index += 1;\r\n continue;\r\n }\r\n\r\n skipWhitespace();\r\n let rawValue: string | undefined;\r\n if (attrSource[index] === \"=\") {\r\n index += 1;\r\n skipWhitespace();\r\n if (index < attrSource.length) {\r\n rawValue = readValue();\r\n }\r\n }\r\n\r\n if (key === \"slot\") {\r\n continue;\r\n }\r\n\r\n if (!rawValue) {\r\n props.push(`${JSON.stringify(key)}: true`);\r\n continue;\r\n }\r\n\r\n if (rawValue.startsWith(\"{\") && rawValue.endsWith(\"}\")) {\r\n const expr = rawValue.slice(1, -1);\r\n props.push(\r\n `${JSON.stringify(key)}: (${transformExpression(expr, stateNames, allSignalNames).code})`,\r\n );\r\n continue;\r\n }\r\n\r\n const quote = rawValue[0];\r\n const literal = rawValue.slice(1, -1);\r\n if (quote === '\"' || quote === \"'\") {\r\n props.push(`${JSON.stringify(key)}: ${JSON.stringify(literal)}`);\r\n }\r\n }\r\n\r\n return props.length === 0 ? \"{}\" : `{ ${props.join(\", \")} }`;\r\n}\r\n\r\nfunction parsePropsFromAttrs(\r\n attrs: Record<string, string | true>,\r\n stateNames: Set<string>,\r\n allSignalNames: Set<string>,\r\n jsxFunctionNames: Set<string>,\r\n): string {\r\n const props: Array<string> = [];\r\n\r\n for (const [key, rawValue] of Object.entries(attrs)) {\r\n if (key === \"slot\" || key === \"key\") {\r\n continue;\r\n }\r\n\r\n const propName = key === \"className\" ? \"class\" : key;\r\n\r\n if (rawValue === true) {\r\n props.push(`${JSON.stringify(propName)}: true`);\r\n continue;\r\n }\r\n\r\n if (rawValue.startsWith(\"{\") && rawValue.endsWith(\"}\")) {\r\n const expr = rawValue.slice(1, -1);\r\n const valueExpr = transformExpression(\r\n expr,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n ).code;\r\n props.push(\r\n `${JSON.stringify(propName)}: (${propName === \"class\" ? `__olovaNormalizeClassValue(${valueExpr})` : valueExpr})`,\r\n );\r\n continue;\r\n }\r\n\r\n props.push(`${JSON.stringify(propName)}: ${JSON.stringify(rawValue)}`);\r\n }\r\n\r\n return props.length === 0 ? \"{}\" : `{ ${props.join(\", \")} }`;\r\n}\r\n\r\nfunction findMatchingComponentClose(\r\n source: string,\r\n name: string,\r\n afterStartTag: number,\r\n): { closeStart: number; closeEnd: number } | null {\r\n const tagRe = new RegExp(`<\\\\/?${name}\\\\b[^>]*>`, \"g\");\r\n tagRe.lastIndex = afterStartTag;\r\n\r\n let depth = 0;\r\n let match = tagRe.exec(source);\r\n while (match) {\r\n const rawTag = match[0];\r\n const isClose = rawTag.startsWith(\"</\");\r\n const selfClosing = /\\/>\\s*$/.test(rawTag);\r\n\r\n if (isClose) {\r\n if (depth === 0) {\r\n return {\r\n closeStart: match.index,\r\n closeEnd: match.index + rawTag.length,\r\n };\r\n }\r\n\r\n depth -= 1;\r\n } else if (!selfClosing) {\r\n depth += 1;\r\n }\r\n\r\n match = tagRe.exec(source);\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction extractNamedSlotTemplates(\r\n childrenSource: string,\r\n stateNames: Set<string>,\r\n allSignalNames: Set<string>,\r\n componentNames: Set<string>,\r\n counters: TransformContext,\r\n): Map<string, TemplateTransformResult> {\r\n const slots = new Map<string, TemplateTransformResult>();\r\n const slotTemplateRe =\r\n /<template\\s+slot=(\"([^\"]+)\"|'([^']+)')\\s*>([\\s\\S]*?)<\\/template>/g;\r\n\r\n let remainder = childrenSource;\r\n let match = slotTemplateRe.exec(childrenSource);\r\n while (match) {\r\n const full = match[0];\r\n const name = match[2] || match[3] || \"default\";\r\n const body = match[4] ?? \"\";\r\n slots.set(\r\n name,\r\n transformTemplate(\r\n body,\r\n stateNames,\r\n allSignalNames,\r\n new Set<string>(),\r\n componentNames,\r\n counters,\r\n ),\r\n );\r\n remainder = remainder.replace(full, \"\");\r\n match = slotTemplateRe.exec(childrenSource);\r\n }\r\n\r\n if (remainder.trim()) {\r\n slots.set(\r\n \"default\",\r\n transformTemplate(\r\n remainder,\r\n stateNames,\r\n allSignalNames,\r\n new Set<string>(),\r\n componentNames,\r\n counters,\r\n ),\r\n );\r\n }\r\n\r\n return slots;\r\n}\r\n\r\nfunction transformTemplate(\r\n template: string,\r\n stateNames: Set<string>,\r\n allSignalNames: Set<string>,\r\n jsxFunctionNames: Set<string>,\r\n componentNames: Set<string>,\r\n counters: TransformContext,\r\n scopeId?: string,\r\n devWarnings?: Set<string>,\r\n filename = \"component.olova\",\r\n): TemplateTransformResult {\r\n let html = template;\r\n const textBindings: TextBinding[] = [];\r\n const htmlBindings: HtmlBinding[] = [];\r\n const attrBindings: AttrBinding[] = [];\r\n const eventBindings: EventBinding[] = [];\r\n const slotBindings: SlotBinding[] = [];\r\n const componentBindings: ComponentBinding[] = [];\r\n const ifBindings: IfBinding[] = [];\r\n\r\n // PASS 1: Extract JSX conditionals BEFORE slot/event/attr regex passes\r\n html = replaceTemplateExpressions(html, (expr: string) => {\r\n try {\r\n const ast = parseModule(`(${expr})`);\r\n const exprNode = ast.program.body[0];\r\n if (t.isExpressionStatement(exprNode)) {\r\n const node = exprNode.expression;\r\n const containsJsxNode = (n: t.Node): boolean => {\r\n let found = false;\r\n traverse(parseModule(`(${generate(n).code})`), {\r\n JSXElement() { found = true; },\r\n JSXFragment() { found = true; },\r\n });\r\n return found;\r\n };\r\n\r\n if (t.isLogicalExpression(node) && node.operator === \"&&\") {\r\n if (containsJsxNode(node.right)) {\r\n const id = `i${counters.if++}`;\r\n const condition = generate(node.left).code;\r\n const trueBranchHtml = jsxToTemplateHtml(node.right);\r\n ifBindings.push({\r\n id,\r\n expr: transformExpression(\r\n condition,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n scopeId,\r\n ).code,\r\n trueBranch: transformTemplate(\r\n trueBranchHtml,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n componentNames,\r\n counters,\r\n scopeId,\r\n devWarnings,\r\n filename,\r\n ),\r\n });\r\n return `__O_IF_${id}__`;\r\n }\r\n } else if (t.isConditionalExpression(node)) {\r\n if (containsJsxNode(node.consequent) || containsJsxNode(node.alternate)) {\r\n const id = `i${counters.if++}`;\r\n const condition = generate(node.test).code;\r\n const trueBranchHtml = containsJsxNode(node.consequent)\r\n ? jsxToTemplateHtml(node.consequent)\r\n : `{${generate(node.consequent).code}}`;\r\n const falseBranchHtml = containsJsxNode(node.alternate)\r\n ? jsxToTemplateHtml(node.alternate)\r\n : `{${generate(node.alternate).code}}`;\r\n ifBindings.push({\r\n id,\r\n expr: transformExpression(\r\n condition,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n scopeId,\r\n ).code,\r\n trueBranch: transformTemplate(\r\n trueBranchHtml,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n componentNames,\r\n counters,\r\n scopeId,\r\n devWarnings,\r\n filename,\r\n ),\r\n falseBranch: transformTemplate(\r\n falseBranchHtml,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n componentNames,\r\n counters,\r\n scopeId,\r\n devWarnings,\r\n filename,\r\n ),\r\n });\r\n return `__O_IF_${id}__`;\r\n }\r\n }\r\n }\r\n } catch {\r\n // ignore parse errors\r\n }\r\n\r\n return `{${expr}}`;\r\n });\r\n\r\n const rawExpressions: Array<{ id: string; expression: string }> = [];\r\n html = replaceTemplateExpressions(html, (expr: string) => {\r\n const id = `raw_${rawExpressions.length}`;\r\n rawExpressions.push({ id, expression: expr });\r\n return `__O_RAW_EXPR_${id}__`;\r\n });\r\n\r\n const renderTextContent = (content: string): string => {\r\n return content.replace(\r\n /__O_RAW_EXPR_([a-zA-Z0-9_]+)__/g,\r\n (_full, exprId: string) => {\r\n const found = rawExpressions.find((entry) => entry.id === exprId);\r\n const expr = found ? found.expression : \"\";\r\n const transformed = transformExpression(\r\n expr,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n scopeId,\r\n );\r\n if (transformed.containsJsx) {\r\n const id = `h${counters.text++}`;\r\n htmlBindings.push({\r\n id,\r\n expr: `__olovaDangerouslySetHtml(${transformed.code})`,\r\n });\r\n return `__O_HTML_${id}__`;\r\n }\r\n\r\n const id = `t${counters.text++}`;\r\n textBindings.push({ id, expr: transformed.code });\r\n return `__O_TEXT_${id}__`;\r\n },\r\n );\r\n };\r\n\r\n const renderAttrs = (element: ASTElement): string => {\r\n let output = \"\";\r\n const scopeAttr = createScopeAttr(scopeId);\r\n\r\n if (scopeAttr) {\r\n output += ` ${scopeAttr}`;\r\n }\r\n\r\n for (const [attrName, rawValue] of Object.entries(element.attrs)) {\r\n if (attrName === \"key\") {\r\n continue;\r\n }\r\n\r\n const normalizedAttrName = attrName === \"className\" ? \"class\" : attrName;\r\n const lowerAttrName = normalizedAttrName.toLowerCase();\r\n if (rawValue === true) {\r\n output += ` ${normalizedAttrName}`;\r\n continue;\r\n }\r\n\r\n if (rawValue.startsWith(\"{\") && rawValue.endsWith(\"}\")) {\r\n const expr = rawValue.slice(1, -1);\r\n const eventMatch = normalizedAttrName.match(/^(?:on:|on)([A-Za-z]+)$/);\r\n if (eventMatch) {\r\n const id = `e${counters.event++}`;\r\n const event = eventMatch[1].toLowerCase();\r\n eventBindings.push({\r\n id,\r\n event,\r\n expr: transformExpression(\r\n expr,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n ).code,\r\n });\r\n output += ` data-o-on-${event}=\"${id}\"`;\r\n continue;\r\n }\r\n\r\n const id = `a${counters.attr++}`;\r\n attrBindings.push({\r\n id,\r\n attr: normalizedAttrName,\r\n expr:\r\n normalizedAttrName === \"class\"\r\n ? `__olovaNormalizeClassValue(${transformExpression(expr, stateNames, allSignalNames, jsxFunctionNames).code})`\r\n : transformExpression(expr, stateNames, allSignalNames, jsxFunctionNames).code,\r\n });\r\n output += ` ${normalizedAttrName}=\"__O_ATTR_${id}__\"`;\r\n continue;\r\n }\r\n\r\n if (devWarnings && lowerAttrName.startsWith(\"on\")) {\r\n devWarnings.add(\r\n `[olova] Avoid static inline event attributes like \"${normalizedAttrName}\" in templates (${filename}). Prefer ${normalizedAttrName}={handler}.`,\r\n );\r\n }\r\n\r\n if (\r\n devWarnings &&\r\n (lowerAttrName === \"href\" || lowerAttrName === \"src\" || lowerAttrName === \"xlink:href\") &&\r\n /^\\s*javascript:/i.test(rawValue)\r\n ) {\r\n devWarnings.add(\r\n `[olova] Suspicious javascript: URL found in static \"${normalizedAttrName}\" attribute (${filename}).`,\r\n );\r\n }\r\n\r\n output += ` ${normalizedAttrName}=\"${rawValue.replace(/\"/g, \""\")}\"`;\r\n }\r\n\r\n return output;\r\n };\r\n\r\n const serializeRawNodes = (nodes: ASTNode[]): string =>\r\n nodes\r\n .map((node) => {\r\n if (node.type === \"comment\") {\r\n return `<!--${node.content}-->`;\r\n }\r\n\r\n if (node.type === \"text\") {\r\n return node.content;\r\n }\r\n\r\n const attrs = Object.entries(node.attrs)\r\n .map(([name, value]) => {\r\n if (value === true) {\r\n return ` ${name}`;\r\n }\r\n\r\n return ` ${name}=\"${String(value).replace(/\"/g, \""\")}\"`;\r\n })\r\n .join(\"\");\r\n const children = serializeRawNodes(node.children);\r\n if (node.isSelfClosing) {\r\n return `<${node.tag}${attrs} />`;\r\n }\r\n\r\n return `<${node.tag}${attrs}>${children}</${node.tag}>`;\r\n })\r\n .join(\"\");\r\n\r\n const renderNodes = (nodes: ASTNode[]): string =>\r\n nodes\r\n .map((node) => {\r\n if (node.type === \"comment\") {\r\n return `<!--${node.content}-->`;\r\n }\r\n\r\n if (node.type === \"text\") {\r\n return renderTextContent(node.content);\r\n }\r\n\r\n if (node.tag === \"slot\") {\r\n const id = `s${counters.slot++}`;\r\n const slotName =\r\n typeof node.attrs.name === \"string\" ? node.attrs.name : \"default\";\r\n slotBindings.push({ id, name: slotName });\r\n return `__O_SLOT_${id}__`;\r\n }\r\n\r\n if (componentNames.has(node.tag)) {\r\n const id = `c${counters.comp++}`;\r\n const namedSlotNodes = new Map<string, ASTNode[]>();\r\n const defaultNodes: ASTNode[] = [];\r\n\r\n for (const child of node.children) {\r\n if (\r\n child.type === \"element\" &&\r\n child.tag === \"template\" &&\r\n typeof child.attrs.slot === \"string\"\r\n ) {\r\n namedSlotNodes.set(child.attrs.slot, child.children);\r\n continue;\r\n }\r\n\r\n defaultNodes.push(child);\r\n }\r\n\r\n const slotFactories: SlotFactoryDef[] = [];\r\n if (node.tag === \"Suspense\" && typeof node.attrs.fallback === \"string\") {\r\n const rawValue = node.attrs.fallback;\r\n if (rawValue.startsWith(\"{\") && rawValue.endsWith(\"}\")) {\r\n const fallbackExpression = rawValue.slice(1, -1).trim();\r\n const fallbackAst = parseModule(`(${fallbackExpression})`);\r\n const fallbackStatement = fallbackAst.program.body[0];\r\n const fallbackNode =\r\n fallbackStatement && t.isExpressionStatement(fallbackStatement)\r\n ? fallbackStatement.expression\r\n : null;\r\n\r\n if (fallbackNode && (t.isJSXElement(fallbackNode) || t.isJSXFragment(fallbackNode))) {\r\n slotFactories.push({\r\n varName: `__slot_${id}_fallback`,\r\n name: \"fallback\",\r\n descriptor: transformTemplate(\r\n jsxToTemplateHtml(fallbackNode),\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n componentNames,\r\n counters,\r\n scopeId,\r\n devWarnings,\r\n filename,\r\n ),\r\n });\r\n } else {\r\n const transformedFallback = transformExpression(\r\n fallbackExpression,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n scopeId,\r\n );\r\n const fallbackBindingId = `fallback_${id}`;\r\n slotFactories.push({\r\n varName: `__slot_${id}_fallback`,\r\n name: \"fallback\",\r\n descriptor: {\r\n html: `__O_HTML_${fallbackBindingId}__`,\r\n textBindings: [],\r\n htmlBindings: [\r\n {\r\n id: fallbackBindingId,\r\n expr: transformedFallback.containsJsx\r\n ? `__olovaDangerouslySetHtml(${transformedFallback.code})`\r\n : transformedFallback.code,\r\n },\r\n ],\r\n attrBindings: [],\r\n eventBindings: [],\r\n slotBindings: [],\r\n componentBindings: [],\r\n ifBindings: [],\r\n buildFnStr: generateBuildFunction(\r\n `__O_HTML_${fallbackBindingId}__`,\r\n stateNames,\r\n (expr) =>\r\n transformExpression(\r\n expr,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n scopeId,\r\n ),\r\n counters,\r\n componentNames,\r\n ),\r\n },\r\n });\r\n }\r\n }\r\n }\r\n\r\n if (defaultNodes.length > 0) {\r\n slotFactories.push({\r\n varName: `__slot_${id}_default`,\r\n name: \"default\",\r\n descriptor: transformTemplate(\r\n serializeRawNodes(defaultNodes),\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n componentNames,\r\n counters,\r\n scopeId,\r\n devWarnings,\r\n filename,\r\n ),\r\n });\r\n }\r\n\r\n for (const [slotName, slotChildren] of namedSlotNodes.entries()) {\r\n slotFactories.push({\r\n varName: `__slot_${id}_${slotName.replace(/[^A-Za-z0-9_$]/g, \"_\")}`,\r\n name: slotName,\r\n descriptor: transformTemplate(\r\n serializeRawNodes(slotChildren),\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n componentNames,\r\n counters,\r\n scopeId,\r\n ),\r\n });\r\n }\r\n\r\n componentBindings.push({\r\n id,\r\n component: node.tag,\r\n propsExpr: parsePropsFromAttrs(\r\n node.tag === \"Suspense\"\r\n ? Object.fromEntries(\r\n Object.entries(node.attrs).filter(([key]) => key !== \"fallback\"),\r\n )\r\n : node.attrs,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n ),\r\n slotFactories,\r\n });\r\n return `__O_COMP_${id}__`;\r\n }\r\n\r\n const attrs = renderAttrs(node);\r\n const children = renderNodes(node.children);\r\n if (node.isSelfClosing) {\r\n return `<${node.tag}${attrs} />`;\r\n }\r\n\r\n return `<${node.tag}${attrs}>${children}</${node.tag}>`;\r\n })\r\n .join(\"\");\r\n\r\n html = renderNodes(parseHTML(html));\r\n\r\n const resolveExpr = (expr: string) =>\r\n transformExpression(\r\n expr,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n scopeId,\r\n );\r\n const buildFnStr = generateBuildFunction(\r\n html,\r\n stateNames,\r\n resolveExpr,\r\n counters,\r\n componentNames,\r\n );\r\n\r\n return {\r\n html: escapeTemplate(html),\r\n textBindings,\r\n htmlBindings,\r\n attrBindings,\r\n eventBindings,\r\n slotBindings,\r\n componentBindings,\r\n ifBindings,\r\n buildFnStr,\r\n };\r\n}\r\n\r\nfunction indentBlock(code: string, spaces = 2): string {\r\n const pad = \" \".repeat(spaces);\r\n if (!code.trim()) {\r\n return \"\";\r\n }\r\n\r\n return code\r\n .split(\"\\n\")\r\n .map((line) => `${pad}${line}`)\r\n .join(\"\\n\");\r\n}\r\n\r\nfunction renderDescriptorLiteral(\r\n descriptor: TemplateTransformResult,\r\n indent = \" \",\r\n): string {\r\n const slotFactoryDecls = descriptor.componentBindings.flatMap((binding) =>\r\n binding.slotFactories.map(\r\n (slot) =>\r\n `${indent}const ${slot.varName} = () => (${renderDescriptorLiteral(slot.descriptor, indent + \" \")});`,\r\n ),\r\n );\r\n\r\n const componentBindingsCode = descriptor.componentBindings\r\n .map((binding) => {\r\n const slotsObject =\r\n binding.slotFactories.length === 0\r\n ? \"{}\"\r\n : `{ ${binding.slotFactories.map((slot) => `${JSON.stringify(slot.name)}: ${slot.varName}`).join(\", \")} }`;\r\n\r\n return `${indent} { id: ${JSON.stringify(binding.id)}, getComponent: () => ${binding.component}, getProps: () => (${binding.propsExpr}), getSlots: () => (${slotsObject}) }`;\r\n })\r\n .join(\",\\n\");\r\n\r\n const buildLines = descriptor.buildFnStr\r\n ? `${indent}build: ${descriptor.buildFnStr.replace(/\\n /g, \"\\n\" + indent)},`\r\n : \"\";\r\n\r\n const objectLiteral = `{\r\n${buildLines}\r\n${indent}textBindings: [\r\n${descriptor.textBindings.map((binding) => `${indent} { id: ${JSON.stringify(binding.id)}, get: () => (${binding.expr}) }`).join(\",\\n\")}\r\n${indent}],\r\n${indent}htmlBindings: [\r\n${descriptor.htmlBindings.map((binding) => `${indent} { id: ${JSON.stringify(binding.id)}, get: () => (${binding.expr}) }`).join(\",\\n\")}\r\n${indent}],\r\n${indent}attrBindings: [\r\n${descriptor.attrBindings.map((binding) => `${indent} { id: ${JSON.stringify(binding.id)}, attr: ${JSON.stringify(binding.attr)}, get: () => (${binding.expr}) }`).join(\",\\n\")}\r\n${indent}],\r\n${indent}eventBindings: [\r\n${descriptor.eventBindings.map((binding) => `${indent} { id: ${JSON.stringify(binding.id)}, event: ${JSON.stringify(binding.event)}, get: () => (${binding.expr}) }`).join(\",\\n\")}\r\n${indent}],\r\n${indent}slotBindings: [\r\n${descriptor.slotBindings.map((binding) => `${indent} { id: ${JSON.stringify(binding.id)}, name: ${JSON.stringify(binding.name)} }`).join(\",\\n\")}\r\n${indent}],\r\n${indent}componentBindings: [\r\n${componentBindingsCode}\r\n${indent}],\r\n${indent}ifBindings: [\r\n${descriptor.ifBindings\r\n .map((binding) => {\r\n const trueFactory = `() => (${renderDescriptorLiteral(binding.trueBranch, indent + \" \")})`;\r\n const falseFactory = binding.falseBranch\r\n ? `() => (${renderDescriptorLiteral(binding.falseBranch, indent + \" \")})`\r\n : \"undefined\";\r\n return `${indent} { id: ${JSON.stringify(binding.id)}, get: () => (${binding.expr}), trueBranch: ${trueFactory}, falseBranch: ${falseFactory} }`;\r\n })\r\n .join(\",\\n\")}\r\n${indent}]\r\n${indent}}`;\r\n\r\n if (slotFactoryDecls.length === 0) {\r\n return objectLiteral;\r\n }\r\n\r\n const outerIndent = indent.length >= 2 ? indent.slice(2) : \"\";\r\n return `(() => {\\n${slotFactoryDecls.join(\"\\n\")}\\n${indent}return ${objectLiteral};\\n${outerIndent}})()`;\r\n}\r\n\r\nfunction collectImportLines(importsCode: string): string[] {\r\n return importsCode\r\n .split(\"\\n\")\r\n .map((line) => line.trim())\r\n .filter(Boolean);\r\n}\r\n\r\nfunction uniqueLines(lines: string[]): string[] {\r\n const seen = new Set<string>();\r\n const output: string[] = [];\r\n\r\n for (const line of lines) {\r\n if (seen.has(line)) {\r\n continue;\r\n }\r\n\r\n seen.add(line);\r\n output.push(line);\r\n }\r\n\r\n return output;\r\n}\r\n\r\nfunction extractTemplateExpressions(input: string): {\r\n output: string;\r\n expressions: Array<{ id: string; expression: string }>;\r\n} {\r\n const expressions: Array<{ id: string; expression: string }> = [];\r\n let output = \"\";\r\n let index = 0;\r\n let count = 0;\r\n\r\n while (index < input.length) {\r\n const start = input.indexOf(\"{\", index);\r\n if (start < 0) {\r\n output += input.slice(index);\r\n break;\r\n }\r\n\r\n let prevIndex = start - 1;\r\n while (prevIndex >= 0 && /\\s/.test(input[prevIndex])) {\r\n prevIndex -= 1;\r\n }\r\n\r\n if (prevIndex >= 0 && input[prevIndex] === \"=\") {\r\n output += input.slice(index, start + 1);\r\n index = start + 1;\r\n continue;\r\n }\r\n\r\n if (start > 0 && input[start - 1] === \"$\") {\r\n output += input.slice(index, start + 1);\r\n index = start + 1;\r\n continue;\r\n }\r\n\r\n output += input.slice(index, start);\r\n\r\n let depth = 1;\r\n let cursor = start + 1;\r\n let quote: \"'\" | '\"' | \"`\" | null = null;\r\n\r\n while (cursor < input.length && depth > 0) {\r\n const char = input[cursor];\r\n const prev = input[cursor - 1];\r\n\r\n if (quote) {\r\n if (char === quote && prev !== \"\\\\\") {\r\n quote = null;\r\n }\r\n cursor += 1;\r\n continue;\r\n }\r\n\r\n if (char === \"'\" || char === '\"' || char === \"`\") {\r\n quote = char;\r\n cursor += 1;\r\n continue;\r\n }\r\n\r\n if (char === \"{\") {\r\n depth += 1;\r\n } else if (char === \"}\") {\r\n depth -= 1;\r\n }\r\n\r\n cursor += 1;\r\n }\r\n\r\n if (depth !== 0) {\r\n throw createCompileError(\"[olova] Unclosed template expression block.\", input, start);\r\n }\r\n\r\n const id = `x${count++}`;\r\n expressions.push({\r\n id,\r\n expression: input.slice(start + 1, cursor - 1),\r\n });\r\n output += `__O_EXPR_${id}__`;\r\n index = cursor;\r\n }\r\n\r\n return { output, expressions };\r\n}\r\n\r\nfunction mergeImportLines(lines: string[]): string {\r\n const merged = new Map<\r\n string,\r\n {\r\n defaultImport?: string;\r\n namespaceImport?: string;\r\n namedImports: Map<string, string>;\r\n sideEffectOnly: boolean;\r\n }\r\n >();\r\n\r\n for (const line of uniqueLines(lines)) {\r\n const ast = parseModule(line);\r\n\r\n for (const node of ast.program.body) {\r\n if (!t.isImportDeclaration(node)) {\r\n continue;\r\n }\r\n\r\n const source = node.source.value;\r\n const entry =\r\n merged.get(source) ??\r\n {\r\n namedImports: new Map<string, string>(),\r\n sideEffectOnly: true,\r\n };\r\n\r\n if (node.specifiers.length > 0) {\r\n entry.sideEffectOnly = false;\r\n }\r\n\r\n for (const specifier of node.specifiers) {\r\n if (t.isImportDefaultSpecifier(specifier)) {\r\n entry.defaultImport ??= specifier.local.name;\r\n continue;\r\n }\r\n\r\n if (t.isImportNamespaceSpecifier(specifier)) {\r\n entry.namespaceImport ??= specifier.local.name;\r\n continue;\r\n }\r\n\r\n const imported = t.isIdentifier(specifier.imported)\r\n ? specifier.imported.name\r\n : specifier.imported.value;\r\n\r\n if (!entry.namedImports.has(imported)) {\r\n entry.namedImports.set(imported, specifier.local.name);\r\n }\r\n }\r\n\r\n merged.set(source, entry);\r\n }\r\n }\r\n\r\n const output: string[] = [];\r\n\r\n for (const [source, entry] of merged.entries()) {\r\n if (entry.sideEffectOnly) {\r\n output.push(generate(t.importDeclaration([], t.stringLiteral(source))).code);\r\n continue;\r\n }\r\n\r\n const specifiers: t.ImportDeclaration[\"specifiers\"] = [];\r\n\r\n if (entry.defaultImport) {\r\n specifiers.push(t.importDefaultSpecifier(t.identifier(entry.defaultImport)));\r\n }\r\n\r\n if (entry.namespaceImport) {\r\n specifiers.push(\r\n t.importNamespaceSpecifier(t.identifier(entry.namespaceImport)),\r\n );\r\n }\r\n\r\n for (const [imported, local] of entry.namedImports.entries()) {\r\n specifiers.push(\r\n t.importSpecifier(\r\n t.identifier(local),\r\n t.identifier(imported),\r\n ),\r\n );\r\n }\r\n\r\n output.push(\r\n generate(t.importDeclaration(specifiers, t.stringLiteral(source))).code,\r\n );\r\n }\r\n\r\n return output.join(\"\\n\");\r\n}\r\n\r\nfunction buildComponentCode(\n parsed: ParsedOlovaFile,\n options?: { exportName?: string; scopeId?: string; hmrId?: string; dev?: boolean },\n): { importsCode: string; code: string } {\n const scriptInfo = collectScriptInfo(parsed.script);\n const counters: TransformContext = {\n text: 0,\n attr: 0,\n event: 0,\n comp: 0,\n slot: 0,\n if: 0,\n };\n const warnings = options?.dev ? new Set<string>() : undefined;\n\n const transformed = runCompilePhase(\"transform-template\", () =>\n transformTemplate(\n parsed.template,\n scriptInfo.stateNames,\n scriptInfo.allSignalNames,\n scriptInfo.jsxFunctionNames,\n scriptInfo.componentNames,\n counters,\n options?.scopeId,\n warnings,\n options?.hmrId ?? \"component.olova\",\n ),\n );\n\r\n const exportHead = options?.exportName\r\n ? `export const ${options.exportName} = __defineComponent((__props, __slots) => {`\r\n : `const __olovaComponent = __defineComponent((__props, __slots) => {`;\r\n const exportTail = options?.exportName\r\n ? `}, ${JSON.stringify(options?.hmrId)});`\r\n : `}, ${JSON.stringify(options?.hmrId)});\\nexport default __olovaComponent;`;\r\n const hmrCode =\r\n options?.dev && !options?.exportName && options?.hmrId\r\n ? `\r\nif (import.meta.hot) {\r\n import.meta.hot.accept((nextModule) => {\r\n if (nextModule?.default) {\r\n __replaceComponent(__olovaComponent, nextModule.default);\r\n }\r\n });\r\n}\r\n`\r\n : \"\";\r\n\r\n if (warnings) {\r\n emitDevWarnings(warnings);\r\n }\r\n\r\n const code = `\r\n${exportHead}\r\n const props = __props;\r\n const slots = __slots;\r\n const __olovaGlobalObj = globalThis;\r\n const __olovaJsxHandlers =\r\n __olovaGlobalObj.__olovaJsxHandlers ?? (__olovaGlobalObj.__olovaJsxHandlers = new Map());\r\n const __olovaNextJsxEventId = () => {\r\n __olovaGlobalObj.__olovaJsxEventId = (__olovaGlobalObj.__olovaJsxEventId ?? 0) + 1;\r\n return String(__olovaGlobalObj.__olovaJsxEventId);\r\n };\r\n if (typeof __olovaGlobalObj.__olovaDispatchJsxEvent !== 'function') {\r\n __olovaGlobalObj.__olovaDispatchJsxEvent = (event, element) => {\r\n const key = element?.getAttribute?.('data-o-jsx-' + event.type);\r\n if (!key) {\r\n return;\r\n }\r\n\r\n const handler = __olovaJsxHandlers.get(key);\r\n if (typeof handler === 'function') {\r\n handler(event);\r\n }\r\n };\r\n }\r\n const __olovaRegisterJsxEvent = (eventName, handler) => {\r\n if (typeof handler !== 'function') {\r\n return '';\r\n }\r\n\r\n const id = __olovaNextJsxEventId();\r\n __olovaJsxHandlers.set(id, handler);\r\n return ' data-o-jsx-' + eventName + '=\"' + id + '\" on' + eventName + '=\"window.__olovaDispatchJsxEvent(event, this)\"';\r\n };\r\n const __olovaToString = (value) =>\r\n Array.isArray(value)\r\n ? value.map(__olovaToString).join('')\r\n : value == null || value === false || value === true\r\n ? ''\r\n : String(value);\r\n const __olovaDangerouslySetHtml = (value) => ({ __dangerousHtml: true, value: __olovaToString(value) });\r\n const __olovaNormalizeClassValue = (value) => {\r\n if (value == null || value === false) {\r\n return '';\r\n }\r\n if (Array.isArray(value)) {\r\n return value.map(__olovaNormalizeClassValue).filter(Boolean).join(' ');\r\n }\r\n if (typeof value === 'object') {\r\n return Object.entries(value)\r\n .filter(([, enabled]) => !!enabled)\r\n .map(([key]) => key)\r\n .join(' ');\r\n }\r\n return String(value);\r\n };\r\n const __olovaEscape = (value) =>\r\n __olovaToString(value)\r\n .replace(/&/g, '&')\r\n .replace(/</g, '<')\r\n .replace(/>/g, '>')\r\n .replace(/\\\"/g, '"')\r\n .replace(/'/g, ''');\r\n const __olovaSpreadAttrs = (input) => {\r\n if (input == null || input === false) {\r\n return '';\r\n }\r\n if (Array.isArray(input)) {\r\n return input.map(__olovaSpreadAttrs).join('');\r\n }\r\n if (typeof input !== 'object') {\r\n return '';\r\n }\r\n\r\n return Object.entries(input).reduce((acc, [key, value]) => {\r\n if (value == null || value === false) {\r\n return acc;\r\n }\r\n const attrKey = key === 'className' ? 'class' : key;\r\n const normalizedValue = attrKey === 'class'\r\n ? __olovaNormalizeClassValue(value)\r\n : value;\r\n if (attrKey === 'key') {\r\n return acc;\r\n }\r\n if (normalizedValue == null || normalizedValue === false || normalizedValue === '') {\r\n return acc;\r\n }\r\n if (normalizedValue === true) {\r\n return acc + ' ' + attrKey;\r\n }\r\n return acc + ' ' + attrKey + '=\"' + __olovaEscape(normalizedValue) + '\"';\r\n }, '');\r\n };\r\n const __olovaFor = (each, render) => {\r\n if (!Array.isArray(each) || typeof render !== 'function') {\r\n return '';\r\n }\r\n return each.map((item, index) => render(item, index));\r\n };\r\n const __olovaShow = (when, render, fallback = '') => {\r\n if (!when) {\r\n return fallback;\r\n }\r\n return typeof render === 'function' ? render(when) : render;\r\n };\r\n${indentBlock(scriptInfo.scriptBodyCode, 2)}\r\n\r\n return ${renderDescriptorLiteral(transformed, \" \")};\r\n${exportTail}\r\n${hmrCode}\r\n`;\r\n\r\n return { importsCode: scriptInfo.importsCode, code };\r\n}\r\n\r\nexport interface CompileOptions {\n filename?: string;\n dev?: boolean;\n exportName?: string;\n}\n\nexport type CompilePhasesResult = {\n parsed: ParsedOlovaFile;\n script: ReturnType<typeof collectScriptInfo>;\n template: TemplateTransformResult;\n scopeId?: string;\n};\n\nexport function analyzeOlovaPhases(\n source: string,\n options?: CompileOptions,\n): CompilePhasesResult {\n const filename = options?.filename ?? \"component.olova\";\n try {\n const parsed = runCompilePhase(\"parse-file\", () =>\n parseOlovaFile(source),\n );\n const script = runCompilePhase(\"analyze-script\", () =>\n collectScriptInfo(parsed.script),\n );\n const scopeId = parsed.styles.some((style) => !(\"global\" in style.attrs))\n ? hashScopeSeed(`${filename}:${options?.exportName ?? \"default\"}`)\n : undefined;\n const template = runCompilePhase(\"transform-template\", () =>\n transformTemplate(\n parsed.template,\n script.stateNames,\n script.allSignalNames,\n script.jsxFunctionNames,\n script.componentNames,\n {\n text: 0,\n attr: 0,\n event: 0,\n comp: 0,\n slot: 0,\n if: 0,\n },\n scopeId,\n options?.dev ? new Set<string>() : undefined,\n filename,\n ),\n );\n\n return {\n parsed,\n script,\n template,\n scopeId,\n };\n } catch (error) {\n return normalizeCompileError(error, source, filename);\n }\n}\n\nexport function compileOlovaScriptModule(\n source: string,\n options?: CompileOptions,\n): CompileResult {\n try {\n return runCompilePhase(\"analyze-script\", () => {\n const scriptInfo = collectScriptInfo(source);\n return runCompilePhase(\"transpile\", () =>\n transpileTypeScript(\n [scriptInfo.importsCode, scriptInfo.scriptBodyCode].filter(Boolean).join(\"\\n\"),\n options?.filename ?? \"module.ts\",\n ),\n );\n });\n } catch (error) {\n return normalizeCompileError(error, source, options?.filename ?? \"module.ts\");\n }\n}\n\nexport function compileOlova(source: string, options?: CompileOptions): CompileResult {\n const filename = options?.filename ?? \"component.olova\";\n try {\n return runCompilePhase(\"parse-file\", () => {\n const parsed = parseOlovaFile(source);\n\n if (!parsed.template.trim() && isModuleOnlyScript(parsed.script)) {\n const moduleResult = compileModuleScript(parsed.script, `${filename}.ts`);\n const css = runCompilePhase(\"generate-module\", () =>\n collectCss(parsed.styles),\n );\n return {\n ...moduleResult,\n css,\n };\n }\n\n const scopeId = parsed.styles.some((style) => !(\"global\" in style.attrs))\n ? hashScopeSeed(`${filename}:${options?.exportName ?? \"default\"}`)\n : undefined;\n const compiled = runCompilePhase(\"generate-module\", () =>\n buildComponentCode(parsed, {\n scopeId,\n hmrId: filename,\n dev: options?.dev,\n }),\n );\n const runtimeImport = options?.dev\n ? `import { defineComponent as __defineComponent, replaceComponent as __replaceComponent } from 'olova/runtime';`\n : `import { defineComponent as __defineComponent } from 'olova/runtime';`;\n const result = runCompilePhase(\"transpile\", () => transpileTypeScript(`\n${runtimeImport}\n${compiled.importsCode}\n${compiled.code}\n`, `${filename}.ts`));\n const css = runCompilePhase(\"generate-module\", () =>\n collectCss(parsed.styles, scopeId),\n );\n return {\n ...result,\n css,\n };\n });\n } catch (error) {\n return normalizeCompileError(error, source, filename);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../compiler/css-scope.ts","../compiler/diagnostics.ts","../compiler/parse.ts","../compiler/html-parser.ts","../compiler/dom-generator.ts","../compiler/compile.ts"],"names":["generate","parse","statement","childExpr","walk","char","prev","id","css"],"mappings":";;;;;;;;;AAIO,SAAS,gBAAgB,OAAA,EAAiC;AAC/D,EAAA,OAAO,OAAA,GAAU,CAAA,aAAA,EAAgB,OAAO,CAAA,CAAA,GAAK,IAAA;AAC/C;AAEA,SAAS,iBAAA,CAAkB,cAAsB,SAAA,EAA2B;AAC1E,EAAA,MAAM,mBAAA,GAAsB,CAAC,OAAA,KAA4B;AACvD,IAAA,MAAM,OAAA,GAAU,QAAQ,IAAA,EAAK;AAC7B,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAO,OAAA;AAAA,IACT;AAEA,IAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,SAAS,CAAA,EAAG;AAC/B,MAAA,OAAO,OAAA;AAAA,IACT;AAEA,IAAA,MAAM,aAAA,GAAgB,sBAAA;AACtB,IAAA,MAAM,iBAAiB,OAAA,CAAQ,OAAA,CAAQ,aAAA,EAAe,EAAE,EAAE,IAAA,EAAK;AAC/D,IAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,OAAA,CAAQ,aAAA,EAAe,IAAI,CAAA;AAEtD,IAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,MAAA,OAAO,UAAA;AAAA,IACT;AAEA,IAAA,IAAI,eAAe,OAAA,EAAS;AAC1B,MAAA,OAAO,IAAI,SAAS,CAAA,CAAA,CAAA;AAAA,IACtB;AAEA,IAAA,MAAM,WAAA,GAAc,UAAA,CAAW,MAAA,CAAO,cAAc,CAAA;AACpD,IAAA,IAAI,gBAAgB,EAAA,EAAI;AACtB,MAAA,OAAO,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,CAAA;AAAA,IACnC;AAEA,IAAA,OAAO,CAAA,EAAG,UAAA,CAAW,KAAA,CAAM,CAAA,EAAG,WAAW,CAAC,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,EAAI,UAAA,CAAW,KAAA,CAAM,WAAW,CAAC,CAAA,CAAA;AAAA,EAC1F,CAAA;AAEA,EAAA,OAAO,aACJ,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAI,CAAC,QAAA,KAAa,QAAA,CAAS,IAAA,EAAM,EACjC,MAAA,CAAO,OAAO,CAAA,CACd,GAAA,CAAI,CAAC,QAAA,KAAa;AACjB,IAAA,IAAI,SAAS,UAAA,CAAW,GAAG,KAAK,QAAA,CAAS,QAAA,CAAS,SAAS,CAAA,EAAG;AAC5D,MAAA,OAAO,QAAA;AAAA,IACT;AAEA,IAAA,OAAO,SACJ,KAAA,CAAM,aAAa,CAAA,CACnB,GAAA,CAAI,CAAC,IAAA,KAAS;AACb,MAAA,IAAI,CAAC,IAAA,IAAQ,eAAA,CAAgB,IAAA,CAAK,IAAI,CAAA,EAAG;AACvC,QAAA,OAAO,IAAA;AAAA,MACT;AAEA,MAAA,OAAO,oBAAoB,IAAI,CAAA;AAAA,IACjC,CAAC,CAAA,CACA,IAAA,CAAK,EAAE,CAAA;AAAA,EACZ,CAAC,CAAA,CACA,IAAA,CAAK,IAAI,CAAA;AACd;AAEA,SAAS,QAAA,CAAS,KAAa,SAAA,EAA2B;AACxD,EAAA,MAAM,GAAA,GAAc,cAAM,GAAA,EAAK;AAAA,IAC7B,OAAA,EAAS,YAAA;AAAA,IACT,SAAA,EAAW;AAAA,GACZ,CAAA;AAED,EAAQ,aAAK,GAAA,EAAK;AAAA,IAChB,KAAA,EAAO,MAAA;AAAA,IACP,MAAM,IAAA,EAAM;AACV,MAAA,MAAM,IAAA,GAAO,IAAA;AACb,MAAA,IAAI,CAAC,IAAA,CAAK,OAAA,IAAW,IAAA,CAAK,OAAA,CAAQ,SAAS,cAAA,EAAgB;AACzD,QAAA;AAAA,MACF;AAEA,MAAA,IAAA,CAAK,OAAA,GAAkB,OAAA,CAAA,KAAA;AAAA,QACrB,iBAAA,CAA0B,OAAA,CAAA,QAAA,CAAS,IAAA,CAAK,OAAO,GAAG,SAAS,CAAA;AAAA,QAC3D;AAAA,UACE,OAAA,EAAS,cAAA;AAAA,UACT,SAAA,EAAW;AAAA;AACb,OACF;AAAA,IACF;AAAA,GACD,CAAA;AAED,EAAA,OAAe,iBAAS,GAAG,CAAA;AAC7B;AAEO,SAAS,cAAc,KAAA,EAAuB;AACnD,EAAA,IAAI,IAAA,GAAO,UAAA;AACX,EAAA,KAAA,IAAS,QAAQ,CAAA,EAAG,KAAA,GAAQ,KAAA,CAAM,MAAA,EAAQ,SAAS,CAAA,EAAG;AACpD,IAAA,IAAA,IAAQ,KAAA,CAAM,WAAW,KAAK,CAAA;AAC9B,IAAA,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,IAAA,EAAM,QAAQ,CAAA;AAAA,EACjC;AAEA,EAAA,OAAO,KAAK,GAAA,CAAI,IAAA,KAAS,CAAC,CAAA,CAAE,SAAS,EAAE,CAAA;AACzC;AAEO,SAAS,UAAA,CAAW,QAAsB,OAAA,EAA0B;AACzE,EAAA,MAAM,SAAA,GAAY,gBAAgB,OAAO,CAAA;AACzC,EAAA,OAAO,MAAA,CACJ,GAAA,CAAI,CAAC,KAAA,KAAU;AACd,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,OAAA,CAAQ,IAAA,EAAK;AACnC,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAO,EAAA;AAAA,IACT;AAEA,IAAA,IAAI,EAAE,QAAA,IAAY,KAAA,CAAM,KAAA,CAAA,IAAU,SAAA,EAAW;AAC3C,MAAA,OAAO,QAAA,CAAS,SAAS,SAAS,CAAA;AAAA,IACpC;AAEA,IAAA,OAAO,OAAA;AAAA,EACT,CAAC,CAAA,CACA,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,MAAM,CAAA;AAChB;;;AChFA,SAAS,eAAA,CAAgB,QAAgB,KAAA,EAIvC;AACA,EAAA,MAAM,SAAA,GAAY,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,GAAA,CAAI,KAAA,EAAO,MAAA,CAAO,MAAM,CAAC,CAAA;AAC5D,EAAA,MAAM,QAAQ,MAAA,CAAO,KAAA,CAAM,GAAG,SAAS,CAAA,CAAE,MAAM,IAAI,CAAA;AACnD,EAAA,OAAO;AAAA,IACL,MAAM,KAAA,CAAM,MAAA;AAAA,IACZ,QAAQ,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,GAAG,MAAA,IAAU,CAAA;AAAA,IAC3C,KAAA,EAAO;AAAA,GACT;AACF;AAEA,SAAS,eAAA,CACP,MAAA,EACA,IAAA,EACA,MAAA,EACA,eAAe,CAAA,EACP;AACR,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA;AAC/B,EAAA,MAAM,QAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,GAAO,IAAI,YAAY,CAAA;AACjD,EAAA,MAAM,MAAM,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,MAAA,EAAQ,OAAO,YAAY,CAAA;AACtD,EAAA,OAAO,KAAA,CACJ,MAAM,KAAA,EAAO,GAAG,EAChB,GAAA,CAAI,CAAC,SAAS,MAAA,KAAW;AACxB,IAAA,MAAM,UAAA,GAAa,QAAQ,MAAA,GAAS,CAAA;AACpC,IAAA,MAAM,MAAA,GAAS,GAAG,MAAA,CAAO,UAAU,EAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,GAAA,CAAA;AACrD,IAAA,IAAI,eAAe,IAAA,EAAM;AACvB,MAAA,OAAO,CAAA,EAAG,MAAM,CAAA,EAAG,OAAO,CAAA,CAAA;AAAA,IAC5B;AACA,IAAA,OAAO,CAAA,EAAG,MAAM,CAAA,EAAG,OAAO;AAAA,OAAA,EAAY,IAAI,MAAA,CAAO,IAAA,CAAK,IAAI,MAAA,EAAQ,CAAC,CAAC,CAAC,CAAA,CAAA,CAAA;AAAA,EACvE,CAAC,CAAA,CACA,IAAA,CAAK,IAAI,CAAA;AACd;AAEO,SAAS,kBAAA,CACd,OAAA,EACA,MAAA,EACA,KAAA,EACA,OAAA,EAKkB;AAClB,EAAA,MAAM,GAAA,GAAM,eAAA,CAAgB,MAAA,EAAQ,KAAK,CAAA;AACzC,EAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM,OAAO,CAAA;AAC/B,EAAA,KAAA,CAAM,GAAA,GAAM,EAAE,KAAA,EAAO,GAAA,EAAI;AACzB,EAAA,KAAA,CAAM,QAAQ,eAAA,CAAgB,MAAA,EAAQ,GAAA,CAAI,IAAA,EAAM,IAAI,MAAM,CAAA;AAC1D,EAAA,KAAA,CAAM,QAAQ,OAAA,EAAS,KAAA;AACvB,EAAA,KAAA,CAAM,OAAO,OAAA,EAAS,IAAA;AACtB,EAAA,KAAA,CAAM,UAAA,GAAa;AAAA,IACjB,OAAA;AAAA,IACA,UAAU,OAAA,EAAS,QAAA;AAAA,IACnB,OAAO,OAAA,EAAS,KAAA;AAAA,IAChB,MAAM,GAAA,CAAI,IAAA;AAAA,IACV,MAAA,EAAQ,IAAI,MAAA,GAAS,CAAA;AAAA,IACrB,OAAO,GAAA,CAAI,KAAA;AAAA,IACX,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,MAAM,OAAA,EAAS;AAAA,GACjB;AACA,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,qBAAA,CACd,KAAA,EACA,MAAA,EACA,QAAA,GAAW,iBAAA,EACJ;AACP,EAAA,MAAM,YAAA,GACH,iBAAiB,KAAA,GAAQ,KAAA,GAAQ,IAAI,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAA;AAC3D,EAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,GAAA,EAAK,KAAA,IAAS,YAAA,CAAa,GAAA;AACtD,EAAA,MAAM,OAAO,KAAA,EAAO,IAAA;AACpB,EAAA,MAAM,SAAS,KAAA,EAAO,MAAA;AACtB,EAAA,MAAM,cAAc,YAAA,CAAa,KAAA,GAAQ,CAAA,EAAA,EAAK,YAAA,CAAa,KAAK,CAAA,CAAA,CAAA,GAAM,EAAA;AACtE,EAAA,MAAM,cAAA,GACJ,IAAA,KAAS,MAAA,IAAa,MAAA,KAAW,MAAA,GAC7B,EAAA,GACA,CAAA,EAAA,EAAK,QAAQ,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAI,MAAA,GAAS,CAAC,CAAA,CAAA,CAAA;AACzC,EAAA,MAAM,iBAAA,GAAoB,YAAA,CAAa,OAAA,CAAQ,OAAA,CAAQ,iBAAiB,EAAE,CAAA;AAC1E,EAAA,YAAA,CAAa,UAAU,CAAA,OAAA,EAAU,WAAW,CAAA,CAAA,EAAI,iBAAiB,GAAG,cAAc,CAAA,CAAA;AAClF,EAAA,IAAI,SAAS,MAAA,IAAa,MAAA,KAAW,MAAA,IAAa,CAAC,aAAa,KAAA,EAAO;AACrE,IAAA,YAAA,CAAa,KAAA,GAAQ,eAAA,CAAgB,MAAA,EAAQ,IAAA,EAAM,MAAM,CAAA;AAAA,EAC3D;AACA,EAAA,YAAA,CAAa,UAAA,GAAa;AAAA,IACxB,OAAA,EAAS,iBAAA;AAAA,IACT,QAAA;AAAA,IACA,OAAO,YAAA,CAAa,KAAA;AAAA,IACpB,IAAA;AAAA,IACA,MAAA,EAAQ,MAAA,KAAW,MAAA,GAAY,MAAA,GAAY,MAAA,GAAS,CAAA;AAAA,IACpD,OAAO,KAAA,EAAO,KAAA;AAAA,IACd,OAAO,YAAA,CAAa,KAAA;AAAA,IACpB,MAAM,YAAA,CAAa;AAAA,GACrB;AACA,EAAA,MAAM,YAAA;AACR;;;AChHA,SAAS,aAAa,IAAA,EAAuB;AAC3C,EAAA,OAAO,IAAA,CAAK,KAAK,IAAI,CAAA;AACvB;AAEA,SAAS,UAAA,CAAW,MAAA,EAAgB,KAAA,EAAe,KAAA,EAAuB;AACxE,EAAA,IAAI,QAAQ,KAAA,GAAQ,CAAA;AACpB,EAAA,OAAO,KAAA,GAAQ,OAAO,MAAA,EAAQ;AAC5B,IAAA,IAAI,OAAO,KAAK,CAAA,KAAM,QAAQ,KAAA,GAAQ,CAAA,GAAI,OAAO,MAAA,EAAQ;AACvD,MAAA,KAAA,IAAS,CAAA;AACT,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,MAAA,CAAO,KAAK,CAAA,KAAM,KAAA,EAAO;AAC3B,MAAA,OAAO,KAAA,GAAQ,CAAA;AAAA,IACjB;AAEA,IAAA,KAAA,IAAS,CAAA;AAAA,EACX;AAEA,EAAA,OAAO,MAAA,CAAO,MAAA;AAChB;AAEA,SAAS,UAAA,CAAW,QAAgB,KAAA,EAAuB;AACzD,EAAA,IAAI,KAAA,GAAQ,KAAA;AACZ,EAAA,OAAO,KAAA,GAAQ,OAAO,MAAA,EAAQ;AAC5B,IAAA,MAAM,IAAA,GAAO,OAAO,KAAK,CAAA;AACzB,IAAA,IAAI,IAAA,KAAS,GAAA,IAAO,IAAA,KAAS,GAAA,EAAK;AAChC,MAAA,KAAA,GAAQ,UAAA,CAAW,MAAA,EAAQ,KAAA,EAAO,IAAI,CAAA;AACtC,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,SAAS,GAAA,EAAK;AAChB,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,KAAA,IAAS,CAAA;AAAA,EACX;AAEA,EAAA,OAAO,EAAA;AACT;AAEA,SAAS,gBAAgB,MAAA,EAA+C;AACtE,EAAA,MAAM,QAAuC,EAAC;AAC9C,EAAA,MAAM,SAAA,GACJ,8EAAA;AAEF,EAAA,IAAI,KAAA;AACJ,EAAA,OAAA,CAAQ,KAAA,GAAQ,SAAA,CAAU,IAAA,CAAK,MAAM,OAAO,IAAA,EAAM;AAChD,IAAA,MAAM,GAAG,IAAA,EAAM,YAAA,EAAc,YAAA,EAAc,IAAI,CAAA,GAAI,KAAA;AACnD,IAAA,MAAM,KAAA,GAAQ,YAAA,IAAgB,YAAA,IAAgB,IAAA,IAAQ,IAAA;AACtD,IAAA,KAAA,CAAM,IAAI,CAAA,GAAI,KAAA;AAAA,EAChB;AAEA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,cAAA,CACP,QACA,KAAA,EAC+E;AAC/E,EAAA,IAAI,MAAA,CAAO,KAAK,CAAA,KAAM,GAAA,EAAK;AACzB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,MAAA,GAAS,UAAA,CAAW,MAAA,EAAQ,KAAA,GAAQ,CAAC,CAAA;AAC3C,EAAA,IAAI,SAAS,CAAA,EAAG;AACd,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,MAAM,MAAA,CAAO,KAAA,CAAM,QAAQ,CAAA,EAAG,MAAM,EAAE,IAAA,EAAK;AACjD,EAAA,IAAI,CAAC,OAAO,GAAA,CAAI,UAAA,CAAW,GAAG,CAAA,IAAK,GAAA,CAAI,UAAA,CAAW,GAAG,CAAA,EAAG;AACtD,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,UAAA,GAAa,CAAA;AACjB,EAAA,OAAO,UAAA,GAAa,GAAA,CAAI,MAAA,IAAU,CAAC,YAAA,CAAa,GAAA,CAAI,UAAU,CAAC,CAAA,IAAK,GAAA,CAAI,UAAU,CAAA,KAAM,GAAA,EAAK;AAC3F,IAAA,UAAA,IAAc,CAAA;AAAA,EAChB;AAEA,EAAA,MAAM,GAAA,GAAM,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,UAAU,CAAA;AACnC,EAAA,MAAM,WAAA,GAAc,IAAI,KAAA,CAAM,UAAU,EAAE,OAAA,CAAQ,QAAA,EAAU,EAAE,CAAA,CAAE,IAAA,EAAK;AACrE,EAAA,OAAO;AAAA,IACL,GAAA;AAAA,IACA,SAAS,MAAA,GAAS,CAAA;AAAA,IAClB,KAAA,EAAO,gBAAgB,WAAW;AAAA,GACpC;AACF;AAEA,SAAS,eAAA,CACP,MAAA,EACA,KAAA,EACA,OAAA,EACiB;AACjB,EAAA,MAAM,OAAA,GAAU,cAAA,CAAe,MAAA,EAAQ,KAAK,CAAA;AAC5C,EAAA,IAAI,CAAC,WAAW,OAAA,CAAQ,GAAA,CAAI,aAAY,KAAM,OAAA,CAAQ,aAAY,EAAG;AACnE,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,WAAA,GAAc,UAAU,IAAA,CAAK,MAAA,CAAO,MAAM,KAAA,EAAO,OAAA,CAAQ,OAAO,CAAC,CAAA;AACvE,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,OAAO;AAAA,MACL,SAAA,EAAW,KAAA;AAAA,MACX,SAAS,OAAA,CAAQ,OAAA;AAAA,MACjB,YAAY,OAAA,CAAQ,OAAA;AAAA,MACpB,UAAU,OAAA,CAAQ,OAAA;AAAA,MAClB,KAAA,EAAO,EAAA;AAAA,MACP,OAAO,OAAA,CAAQ;AAAA,KACjB;AAAA,EACF;AAEA,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,IAAI,QAAQ,OAAA,CAAQ,OAAA;AAEpB,EAAA,OAAO,KAAA,GAAQ,OAAO,MAAA,EAAQ;AAC5B,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,OAAA,CAAQ,GAAA,EAAK,KAAK,CAAA;AACtC,IAAA,IAAI,OAAO,CAAA,EAAG;AACZ,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,MAAA,CAAO,UAAA,CAAW,MAAA,EAAQ,IAAI,CAAA,EAAG;AACnC,MAAA,MAAM,UAAA,GAAa,MAAA,CAAO,OAAA,CAAQ,KAAA,EAAO,OAAO,CAAC,CAAA;AACjD,MAAA,KAAA,GAAQ,UAAA,IAAc,CAAA,GAAI,UAAA,GAAa,CAAA,GAAI,MAAA,CAAO,MAAA;AAClD,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,MAAA,CAAO,IAAA,GAAO,CAAC,CAAA,KAAM,GAAA,EAAK;AAC5B,MAAA,MAAM,QAAA,GAAW,UAAA,CAAW,MAAA,EAAQ,IAAA,GAAO,CAAC,CAAA;AAC5C,MAAA,IAAI,WAAW,CAAA,EAAG;AAChB,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,WAAW,MAAA,CAAO,KAAA,CAAM,OAAO,CAAA,EAAG,QAAQ,EAAE,IAAA,EAAK;AACvD,MAAA,IAAI,QAAA,CAAS,WAAA,EAAY,KAAM,OAAA,CAAQ,aAAY,EAAG;AACpD,QAAA,KAAA,IAAS,CAAA;AACT,QAAA,IAAI,UAAU,CAAA,EAAG;AACf,UAAA,OAAO;AAAA,YACL,SAAA,EAAW,KAAA;AAAA,YACX,SAAS,OAAA,CAAQ,OAAA;AAAA,YACjB,UAAA,EAAY,IAAA;AAAA,YACZ,UAAU,QAAA,GAAW,CAAA;AAAA,YACrB,KAAA,EAAO,MAAA,CAAO,KAAA,CAAM,OAAA,CAAQ,SAAS,IAAI,CAAA;AAAA,YACzC,OAAO,OAAA,CAAQ;AAAA,WACjB;AAAA,QACF;AAAA,MACF;AAEA,MAAA,KAAA,GAAQ,QAAA,GAAW,CAAA;AACnB,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAS,cAAA,CAAe,MAAA,EAAQ,IAAI,CAAA;AAC1C,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,KAAA,GAAQ,IAAA,GAAO,CAAA;AACf,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,OAAO,GAAA,CAAI,WAAA,EAAY,KAAM,OAAA,CAAQ,aAAY,EAAG;AACtD,MAAA,MAAM,iBAAA,GAAoB,UAAU,IAAA,CAAK,MAAA,CAAO,MAAM,IAAA,EAAM,MAAA,CAAO,OAAO,CAAC,CAAA;AAC3E,MAAA,IAAI,CAAC,iBAAA,EAAmB;AACtB,QAAA,KAAA,IAAS,CAAA;AAAA,MACX;AAAA,IACF;AAEA,IAAA,KAAA,GAAQ,MAAA,CAAO,OAAA;AAAA,EACjB;AAEA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,qBAAA,CAAsB,QAAgB,OAAA,EAA6B;AAC1E,EAAA,MAAM,SAAqB,EAAC;AAC5B,EAAA,IAAI,KAAA,GAAQ,CAAA;AAEZ,EAAA,OAAO,KAAA,GAAQ,OAAO,MAAA,EAAQ;AAC5B,IAAA,MAAM,OAAO,MAAA,CAAO,OAAA,CAAQ,CAAA,CAAA,EAAI,OAAO,IAAI,KAAK,CAAA;AAChD,IAAA,IAAI,OAAO,CAAA,EAAG;AACZ,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,WAAW,IAAA,GAAO,CAAA,GAAI,MAAA,CAAO,IAAA,GAAO,CAAC,CAAA,GAAI,EAAA;AAC/C,IAAA,IAAI,QAAA,IAAY,gBAAA,CAAiB,IAAA,CAAK,QAAQ,CAAA,EAAG;AAC/C,MAAA,KAAA,GAAQ,IAAA,GAAO,QAAQ,MAAA,GAAS,CAAA;AAChC,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,KAAA,GAAQ,eAAA,CAAgB,MAAA,EAAQ,IAAA,EAAM,OAAO,CAAA;AACnD,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,KAAA,GAAQ,IAAA,GAAO,QAAQ,MAAA,GAAS,CAAA;AAChC,MAAA;AAAA,IACF;AAEA,IAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AACjB,IAAA,KAAA,GAAQ,KAAA,CAAM,QAAA;AAAA,EAChB;AAEA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,YAAA,CAAa,QAAgB,MAAA,EAAuD;AAC3F,EAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,IAAA,OAAO,OAAO,IAAA,EAAK;AAAA,EACrB;AAEA,EAAA,MAAM,OAAA,GAAU,CAAC,GAAG,MAAM,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,KAAA,GAAQ,CAAA,CAAE,KAAK,CAAA;AAC5D,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,IAAI,MAAA,GAAS,EAAA;AAEb,EAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,IAAA,MAAA,IAAU,MAAA,CAAO,KAAA,CAAM,MAAA,EAAQ,KAAA,CAAM,KAAK,CAAA;AAC1C,IAAA,MAAA,GAAS,KAAA,CAAM,GAAA;AAAA,EACjB;AAEA,EAAA,MAAA,IAAU,MAAA,CAAO,MAAM,MAAM,CAAA;AAC7B,EAAA,OAAO,OAAO,IAAA,EAAK;AACrB;AAEO,SAAS,eAAe,MAAA,EAAiC;AAC9D,EAAA,MAAM,YAAA,GAAe,qBAAA,CAAsB,MAAA,EAAQ,QAAQ,CAAA;AAC3D,EAAA,MAAM,WAAA,GAAc,qBAAA,CAAsB,MAAA,EAAQ,OAAO,CAAA;AAEzD,EAAA,MAAM,MAAA,GAAS,WAAA,CAAY,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,IACzC,OAAO,KAAA,CAAM,SAAA;AAAA,IACb,KAAK,KAAA,CAAM;AAAA,GACb,CAAE,CAAA;AAEF,EAAA,KAAA,MAAW,eAAe,YAAA,EAAc;AACtC,IAAA,MAAA,CAAO,IAAA,CAAK,EAAE,KAAA,EAAO,WAAA,CAAY,WAAW,GAAA,EAAK,WAAA,CAAY,UAAU,CAAA;AAAA,EACzE;AAEA,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,YAAA,CAAa,GAAA,CAAI,CAAC,UAAU,KAAA,CAAM,KAAA,CAAM,IAAA,EAAM,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,KAAK,MAAM,CAAA;AAAA,IACnF,QAAA,EAAU,YAAA,CAAa,MAAA,EAAQ,MAAM,CAAA;AAAA,IACrC,MAAA,EAAQ,WAAA,CAAY,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,MAClC,OAAA,EAAS,KAAA,CAAM,KAAA,CAAM,IAAA,EAAK;AAAA,MAC1B,OAAO,KAAA,CAAM;AAAA,KACf,CAAE;AAAA,GACJ;AACF;ACpOA,IAAM,SAAA,uBAAgB,GAAA,CAAI;AAAA,EACxB,MAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,SAAS,kBAAkB,KAAA,EAAuB;AAChD,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,QAAA,EAAU,IAAI,CAAA;AACrC;AAEA,SAAS,eAAA,CACP,QACA,KAAA,EACgC;AAChC,EAAA,IAAI,QAAQ,KAAA,GAAQ,CAAA;AACpB,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,IAAI,KAAA,GAAgC,IAAA;AACpC,EAAA,IAAI,KAAA,GAAQ,GAAA;AAEZ,EAAA,OAAO,KAAA,GAAQ,MAAA,CAAO,MAAA,IAAU,KAAA,GAAQ,CAAA,EAAG;AACzC,IAAA,MAAM,IAAA,GAAO,OAAO,KAAK,CAAA;AACzB,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,KAAA,GAAQ,CAAC,CAAA;AAC7B,IAAA,KAAA,IAAS,IAAA;AAET,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,IAAI,IAAA,KAAS,KAAA,IAAS,IAAA,KAAS,IAAA,EAAM;AACnC,QAAA,KAAA,GAAQ,IAAA;AAAA,MACV;AACA,MAAA,KAAA,IAAS,CAAA;AACT,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,IAAA,KAAS,GAAA,IAAO,IAAA,KAAS,GAAA,IAAO,SAAS,GAAA,EAAK;AAChD,MAAA,KAAA,GAAQ,IAAA;AACR,MAAA,KAAA,IAAS,CAAA;AACT,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,SAAS,GAAA,EAAK;AAChB,MAAA,KAAA,IAAS,CAAA;AAAA,IACX,CAAA,MAAA,IAAW,SAAS,GAAA,EAAK;AACvB,MAAA,KAAA,IAAS,CAAA;AAAA,IACX;AAEA,IAAA,KAAA,IAAS,CAAA;AAAA,EACX;AAEA,EAAA,OAAO,EAAE,KAAA,EAAO,GAAA,EAAK,KAAA,EAAM;AAC7B;AAEA,SAAS,4BAA4B,IAAA,EAGnC;AACA,EAAA,MAAM,YAAA,uBAAmB,GAAA,EAAoB;AAC7C,EAAA,IAAI,MAAA,GAAS,EAAA;AACb,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,IAAI,KAAA,GAAQ,CAAA;AAEZ,EAAA,OAAO,KAAA,GAAQ,KAAK,MAAA,EAAQ;AAC1B,IAAA,MAAM,IAAA,GAAO,KAAK,KAAK,CAAA;AACvB,IAAA,MAAA,IAAU,IAAA;AAEV,IAAA,IAAI,SAAS,GAAA,IAAO,IAAA,CAAK,KAAA,GAAQ,CAAC,MAAM,GAAA,EAAK;AAC3C,MAAA,KAAA,IAAS,CAAA;AACT,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAS,eAAA,CAAgB,IAAA,EAAM,KAAA,GAAQ,CAAC,CAAA;AAC9C,IAAA,MAAM,GAAA,GAAM,qBAAqB,KAAA,EAAO,CAAA,EAAA,CAAA;AACxC,IAAA,YAAA,CAAa,GAAA,CAAI,GAAA,EAAK,MAAA,CAAO,KAAK,CAAA;AAClC,IAAA,MAAA,IAAU,IAAI,GAAG,CAAA,CAAA,CAAA;AACjB,IAAA,KAAA,GAAQ,MAAA,CAAO,GAAA;AACf,IAAA;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,YAAA,EAAa;AACtC;AAEA,SAAS,eAAe,OAAA,EAAgE;AACtF,EAAA,MAAM,SAAwC,EAAC;AAE/C,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,EAAG;AACnD,IAAA,MAAA,CAAO,IAAI,CAAA,GAAI,KAAA,KAAU,EAAA,GAAK,IAAA,GAAO,KAAA;AAAA,EACvC;AAEA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,qBAAqB,IAAA,EAAwB;AACpD,EAAA,OAAO,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,IAAA,CAAK,aAAa,CAAA;AAC9C;AAEA,SAAS,UAAU,IAAA,EAAiC;AAClD,EAAA,IAAI,IAAA,CAAK,SAAS,MAAA,EAAQ;AACxB,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,MAAA;AAAA,MACN,OAAA,EAAS,iBAAA,CAAmB,IAAA,CAAkB,IAAI;AAAA,KACpD;AAAA,EACF;AAEA,EAAA,IAAI,IAAA,CAAK,SAAS,SAAA,EAAW;AAC3B,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,SAAA;AAAA,MACN,OAAA,EAAS,iBAAA,CAAmB,IAAA,CAAiB,IAAI;AAAA,KACnD;AAAA,EACF;AAEA,EAAA,IAAI,IAAA,CAAK,SAAS,KAAA,IAAS,IAAA,CAAK,SAAS,QAAA,IAAY,IAAA,CAAK,SAAS,OAAA,EAAS;AAC1E,IAAA,MAAM,OAAA,GAAU,IAAA;AAChB,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,SAAA;AAAA,MACN,KAAK,OAAA,CAAQ,IAAA;AAAA,MACb,KAAA,EAAO,cAAA,CAAe,OAAA,CAAQ,OAAA,IAAW,EAAE,CAAA;AAAA,MAC3C,QAAA,EAAU,UAAA,CAAW,OAAA,CAAQ,QAAA,IAAY,EAAE,CAAA;AAAA,MAC3C,aAAA,EAAe,qBAAqB,OAAO;AAAA,KAC7C;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,WAAW,KAAA,EAA+B;AACjD,EAAA,MAAM,SAAoB,EAAC;AAE3B,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,UAAA,GAAa,UAAU,IAAI,CAAA;AACjC,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,MAAA,CAAO,KAAK,UAAU,CAAA;AAAA,IACxB;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,UAAU,IAAA,EAAyB;AACjD,EAAA,MAAM,aAAA,GAAgB,4BAA4B,IAAI,CAAA;AACtD,EAAA,MAAM,QAAA,GAAW,aAAA,CAAc,aAAA,CAAc,IAAA,EAAM;AAAA,IACjD,cAAA,EAAgB,KAAA;AAAA,IAChB,oBAAA,EAAsB,IAAA;AAAA,IACtB,uBAAA,EAAyB,KAAA;AAAA,IACzB,aAAA,EAAe;AAAA,GAChB,CAAA;AAED,EAAA,MAAM,SAAA,GAAa,QAAA,CAAsB,QAAA,CAAS,MAAA,CAAO,CAAC,IAAA,KAAS;AACjE,IAAA,IAAI,IAAA,CAAK,IAAA,KAAS,WAAA,IAAe,IAAA,CAAK,SAAS,OAAA,EAAS;AACtD,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,OAAO,IAAA;AAAA,EACT,CAAC,CAAA;AAED,EAAA,MAAM,GAAA,GAAM,WAAW,SAAS,CAAA;AAChC,EAAA,MAAM,mBAAA,GAAsB,CAAC,KAAA,KAA2B;AACtD,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,IAAI,IAAA,CAAK,SAAS,SAAA,EAAW;AAC3B,QAAA;AAAA,MACF;AAEA,MAAA,KAAA,MAAW,CAAC,MAAM,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,IAAA,CAAK,KAAK,CAAA,EAAG;AACtD,QAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,UAAA;AAAA,QACF;AAEA,QAAA,MAAM,QAAA,GAAW,aAAA,CAAc,YAAA,CAAa,GAAA,CAAI,KAAK,CAAA;AACrD,QAAA,IAAI,QAAA,EAAU;AACZ,UAAA,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,GAAI,QAAA;AAAA,QACrB;AAAA,MACF;AAEA,MAAA,mBAAA,CAAoB,KAAK,QAAQ,CAAA;AAAA,IACnC;AAAA,EACF,CAAA;AAEA,EAAA,mBAAA,CAAoB,GAAG,CAAA;AACvB,EAAA,OAAO,GAAA;AACT;;;ACnMA,IAAM,aAAA,GAAgB,4BAAA;AAEtB,SAAS,mBAAmB,IAAA,EAA8B;AACxD,EAAA,MAAM,QAAwB,EAAC;AAC/B,EAAA,MAAM,OAAA,GAAU,iDAAA;AAEhB,EAAA,IAAI,SAAA,GAAY,CAAA;AAChB,EAAA,IAAI,KAAA;AAEJ,EAAA,OAAA,CAAQ,KAAA,GAAQ,OAAA,CAAQ,IAAA,CAAK,IAAI,OAAO,IAAA,EAAM;AAC5C,IAAA,IAAI,KAAA,CAAM,QAAQ,SAAA,EAAW;AAC3B,MAAA,KAAA,CAAM,IAAA,CAAK,EAAE,IAAA,EAAM,QAAA,EAAU,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,SAAA,EAAW,KAAA,CAAM,KAAK,CAAA,EAAG,CAAA;AAAA,IAC1E;AACA,IAAA,KAAA,CAAM,IAAA,CAAK,EAAE,IAAA,EAAM,SAAA,EAAW,SAAA,EAAW,KAAA,CAAM,CAAC,CAAA,EAAG,EAAA,EAAI,KAAA,CAAM,CAAC,CAAA,EAAG,CAAA;AACjE,IAAA,SAAA,GAAY,KAAA,CAAM,KAAA,GAAQ,KAAA,CAAM,CAAC,CAAA,CAAE,MAAA;AAAA,EACrC;AAEA,EAAA,IAAI,SAAA,GAAY,KAAK,MAAA,EAAQ;AAC3B,IAAA,KAAA,CAAM,IAAA,CAAK,EAAE,IAAA,EAAM,QAAA,EAAU,OAAO,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA,EAAG,CAAA;AAAA,EAC7D;AAEA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,YAAA,CAAa,KAAa,KAAA,EAAyB;AAC1D,EAAA,IAAI,QAAQ,eAAA,EAAiB;AAC3B,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,OAAO,SAAS,GAAA,KAAQ,KAAA;AAC1B;AAEA,SAAS,WAAA,CACP,MACA,SAAA,EACA,UAAA,EACA,eAIA,QAAA,EACA,QAAA,EACA,cAAA,EACA,KAAA,GAAQ,KAAA,EACR;AACA,EAAA,IAAI,IAAA,CAAK,SAAS,SAAA,EAAW;AAC3B,IAAA;AAAA,EACF;AAEA,EAAA,IAAI,IAAA,CAAK,SAAS,MAAA,EAAQ;AACxB,IAAA,MAAM,KAAA,GAAQ,kBAAA,CAAmB,IAAA,CAAK,OAAO,CAAA;AAC7C,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,IAAI,IAAA,CAAK,SAAS,QAAA,EAAU;AAC1B,QAAA,IAAI,CAAC,KAAK,KAAA,EAAO;AACjB,QAAA,MAAM,OAAA,GAAU,CAAA,EAAA,EAAK,QAAA,CAAS,UAAA,EAAY,CAAA,CAAA;AAC1C,QAAA,QAAA,CAAS,UAAA,CAAW,IAAA;AAAA,UAClB,SAAS,OAAO,CAAA,2BAAA,EAA8B,KAAK,SAAA,CAAU,IAAA,CAAK,KAAK,CAAC,CAAA,EAAA;AAAA,SAC1E;AACA,QAAA,QAAA,CAAS,WAAW,IAAA,CAAK,CAAA,EAAG,SAAS,CAAA,aAAA,EAAgB,OAAO,CAAA,EAAA,CAAI,CAAA;AAAA,MAClE,CAAA,MAAO;AACL,QAAA,MAAM,OAAA,GAAU,CAAA,EAAA,EAAK,QAAA,CAAS,UAAA,EAAY,CAAA,CAAA;AAC1C,QAAA,QAAA,CAAS,UAAA,CAAW,IAAA;AAAA,UAClB,SAAS,OAAO,CAAA,+BAAA;AAAA,SAClB;AACA,QAAA,QAAA,CAAS,MAAM,IAAA,CAAK,CAAA,CAAA,EAAI,KAAK,EAAE,CAAA,GAAA,EAAM,OAAO,CAAA,CAAE,CAAA;AAC9C,QAAA,QAAA,CAAS,WAAW,IAAA,CAAK,CAAA,EAAG,SAAS,CAAA,aAAA,EAAgB,OAAO,CAAA,EAAA,CAAI,CAAA;AAAA,MAClE;AAAA,IACF;AACA,IAAA;AAAA,EACF;AAEA,EAAA,IAAI,IAAA,CAAK,SAAS,SAAA,EAAW;AAC3B,IAAA,MAAM,MAAM,IAAA,CAAK,GAAA;AACjB,IAAA,MAAM,OAAA,GAAU,CAAA,GAAA,EAAM,QAAA,CAAS,UAAA,EAAY,CAAA,CAAA;AAC3C,IAAA,MAAM,eAAA,GAAkB,YAAA,CAAa,GAAA,EAAK,KAAK,CAAA;AAC/C,IAAA,QAAA,CAAS,UAAA,CAAW,IAAA;AAAA,MAClB,eAAA,GACI,SAAS,OAAO,CAAA,4BAAA,EAA+B,KAAK,SAAA,CAAU,aAAa,CAAC,CAAA,EAAA,EAAK,IAAA,CAAK,UAAU,GAAG,CAAC,OACpG,CAAA,MAAA,EAAS,OAAO,6BAA6B,IAAA,CAAK,SAAA,CAAU,GAAG,CAAC,CAAA,EAAA;AAAA,KACtE;AAEA,IAAA,KAAA,MAAW,CAAC,MAAM,GAAG,CAAA,IAAK,OAAO,OAAA,CAAQ,IAAA,CAAK,KAAK,CAAA,EAAG;AACpD,MAAA,IAAI,IAAA,CAAK,UAAA,CAAW,YAAY,CAAA,EAAG;AACjC,QAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC3B,UAAA,QAAA,CAAS,MAAM,IAAA,CAAK,CAAA,CAAA,EAAI,GAAG,CAAA,GAAA,EAAM,OAAO,CAAA,CAAE,CAAA;AAAA,QAC5C;AAAA,MACF,WAAW,OAAO,GAAA,KAAQ,YAAY,GAAA,CAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AAC/D,QAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,4BAA4B,CAAA;AACpD,QAAA,IAAI,KAAA,EAAO;AACT,UAAA,QAAA,CAAS,KAAA,CAAM,KAAK,CAAA,CAAA,EAAI,KAAA,CAAM,CAAC,CAAC,CAAA,GAAA,EAAM,OAAO,CAAA,CAAE,CAAA;AAAA,QACjD;AAAA,MACF,CAAA,MAAO;AACL,QAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,UAAA,QAAA,CAAS,UAAA,CAAW,IAAA;AAAA,YAClB,GAAG,OAAO,CAAA,cAAA,EAAiB,IAAA,CAAK,SAAA,CAAU,IAAI,CAAC,CAAA,MAAA;AAAA,WACjD;AAAA,QACF,CAAA,MAAO;AACL,UAAA,QAAA,CAAS,UAAA,CAAW,IAAA;AAAA,YAClB,CAAA,EAAG,OAAO,CAAA,cAAA,EAAiB,IAAA,CAAK,SAAA,CAAU,IAAI,CAAC,CAAA,EAAA,EAAK,IAAA,CAAK,SAAA,CAAU,GAAG,CAAC,CAAA,EAAA;AAAA,WACzE;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,KAAA,MAAW,KAAA,IAAS,KAAK,QAAA,EAAU;AACjC,MAAA,WAAA;AAAA,QACE,KAAA;AAAA,QACA,OAAA;AAAA,QACA,UAAA;AAAA,QACA,aAAA;AAAA,QACA,QAAA;AAAA,QACA,QAAA;AAAA,QACA,cAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAEA,IAAA,QAAA,CAAS,WAAW,IAAA,CAAK,CAAA,EAAG,SAAS,CAAA,aAAA,EAAgB,OAAO,CAAA,EAAA,CAAI,CAAA;AAAA,EAClE;AACF;AAEO,SAAS,qBAAA,CACd,IAAA,EACA,UAAA,EACA,aAAA,EAIA,UACA,cAAA,EACQ;AACR,EAAA,MAAM,GAAA,GAAM,UAAU,IAAI,CAAA;AAE1B,EAAA,MAAM,QAAA,GAAyB;AAAA,IAC7B,YAAY,EAAC;AAAA,IACb,OAAO,EAAC;AAAA,IACR,UAAA,EAAY;AAAA,GACd;AAEA,EAAA,QAAA,CAAS,UAAA,CAAW,KAAK,+CAA+C,CAAA;AAExE,EAAA,KAAA,MAAW,SAAS,GAAA,EAAK;AACvB,IAAA,WAAA;AAAA,MACE,KAAA;AAAA,MACA,IAAA;AAAA,MACA,UAAA;AAAA,MACA,aAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAEA,EAAA,OAAO,CAAA;AAAA,IAAA,EACH,QAAA,CAAS,UAAA,CAAW,IAAA,CAAK,QAAQ,CAAC;AAAA,oCAAA,EACF,QAAA,CAAS,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,GAAA,CAAA;AAE/D;;;AC9JA,IAAMA,SAAAA,GACH,gBACE,OAAA,IAAW,eAAA;AAChB,IAAM,QAAA,GACH,eAAkE,OAAA,IACnE,cAAA;AAEF,IAAM,kBAAA,uBAAyB,GAAA,CAAI;AAAA,EACjC,QAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,qBAAA;AAAA,EACA,oBAAA;AAAA,EACA,iBAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,kBAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAC,CAAA;AAoDD,SAAS,eAAe,MAAA,EAAwB;AAC9C,EAAA,OAAO,OAAO,OAAA,CAAQ,KAAA,EAAO,MAAM,CAAA,CAAE,OAAA,CAAQ,MAAM,KAAK,CAAA;AAC1D;AAEA,SAAS,gBAAgB,QAAA,EAA6B;AACpD,EAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,IAAA,OAAA,CAAQ,KAAK,OAAO,CAAA;AAAA,EACtB;AACF;AAEA,SAAS,YAAY,IAAA,EAAsB;AACzC,EAAA,OAAOC,MAAM,IAAA,EAAM;AAAA,IACjB,UAAA,EAAY,QAAA;AAAA,IACZ,OAAA,EAAS,CAAC,YAAA,EAAc,KAAK;AAAA,GAC9B,CAAA;AACH;AAEA,SAAS,eAAA,CACP,OACA,EAAA,EACG;AACH,EAAA,IAAI;AACF,IAAA,OAAO,EAAA,EAAG;AAAA,EACZ,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,YAAA,GACH,iBAAiB,KAAA,GAAQ,KAAA,GAAQ,IAAI,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAA;AAG3D,IAAA,IAAI,CAAC,aAAa,KAAA,EAAO;AACvB,MAAA,YAAA,CAAa,KAAA,GAAQ,KAAA;AAAA,IACvB;AACA,IAAA,MAAM,YAAA;AAAA,EACR;AACF;AAEA,SAAS,mBAAA,CAAoB,IAAA,EAAc,QAAA,GAAW,cAAA,EAA+B;AACnF,EAAA,MAAM,MAAA,GAAS,EAAA,CAAG,eAAA,CAAgB,IAAA,EAAM;AAAA,IACtC,QAAA,EAAU,QAAA;AAAA,IACV,eAAA,EAAiB;AAAA,MACf,MAAA,EAAQ,GAAG,YAAA,CAAa,MAAA;AAAA,MACxB,MAAA,EAAQ,GAAG,UAAA,CAAW,MAAA;AAAA,MACtB,GAAA,EAAK,GAAG,OAAA,CAAQ,QAAA;AAAA,MAChB,sBAAA,EAAwB,GAAG,sBAAA,CAAuB,MAAA;AAAA,MAClD,oBAAA,EAAsB,KAAA;AAAA,MACtB,SAAA,EAAW,IAAA;AAAA,MACX,aAAA,EAAe;AAAA;AACjB,GACD,CAAA;AAED,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,MAAA,CAAO,UAAA,CAAW,IAAA,EAAK;AAAA,IAC7B,KAAK,MAAA,CAAO,aAAA,GAAgB,KAAK,KAAA,CAAM,MAAA,CAAO,aAAa,CAAA,GAAI;AAAA,GACjE;AACF;AAEA,SAAS,mBAAA,CAAoB,MAAA,EAAgB,QAAA,GAAW,iBAAA,EAAkC;AACxF,EAAA,OAAO,eAAA,CAAgB,kBAAkB,MAAM;AAC7C,IAAA,MAAM,UAAA,GAAa,kBAAkB,MAAM,CAAA;AAC3C,IAAA,OAAO,eAAA;AAAA,MAAgB,WAAA;AAAA,MAAa,MAClC,mBAAA;AAAA,QACE,CAAC,UAAA,CAAW,WAAA,EAAa,UAAA,CAAW,cAAc,EAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AAAA,QAC7E;AAAA;AACF,KACF;AAAA,EACF,CAAC,CAAA;AACH;AAEA,SAAS,mBAAmB,MAAA,EAAyB;AACnD,EAAA,IAAI,CAAC,MAAA,CAAO,IAAA,EAAK,EAAG;AAClB,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,YAAY,IAAA,EAA0C;AAC7D,EAAA,OAAO,CAAC,EACN,IAAA,IACE,mBAAiB,IAAI,CAAA,KACnB,eAAa,IAAA,CAAK,MAAM,CAAA,IAAK,IAAA,CAAK,OAAO,IAAA,KAAS,OAAA,IACjD,qBAAmB,IAAA,CAAK,MAAM,KAC7B,CAAA,CAAA,YAAA,CAAa,IAAA,CAAK,MAAA,CAAO,MAAM,KACjC,IAAA,CAAK,MAAA,CAAO,OAAO,IAAA,KAAS,eAAA,IAC1B,eAAa,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAA,KAClC,IAAA,CAAK,OAAO,QAAA,CAAS,IAAA,KAAS,WAC7B,IAAA,CAAK,MAAA,CAAO,SAAS,IAAA,KAAS,KAAA,CAAA,CAAA,CAAA;AAExC;AAEA,SAAS,eAAe,IAAA,EAA0C;AAChE,EAAA,OAAO,CAAC,EACN,IAAA,IACE,CAAA,CAAA,gBAAA,CAAiB,IAAI,KACrB,CAAA,CAAA,YAAA,CAAa,IAAA,CAAK,MAAM,CAAA,KACzB,KAAK,MAAA,CAAO,IAAA,KAAS,UAAA,IAAc,IAAA,CAAK,OAAO,IAAA,KAAS,SAAA,CAAA,CAAA;AAE7D;AAEA,SAAS,iBAAA,CACP,MACA,GAAA,EACM;AACN,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA;AAAA,EACF;AAEA,EAAA,IAAM,CAAA,CAAA,gBAAA,CAAiB,IAAI,CAAA,IAAO,CAAA,CAAA,YAAA,CAAa,IAAA,CAAK,MAAM,CAAA,IAAK,IAAA,CAAK,MAAA,CAAO,IAAA,KAAS,OAAA,EAAS;AAC3F,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,SAAA,CAAU,CAAC,CAAA;AACpC,IAAA,IAAI,CAAC,WAAA,IAAe,CAAG,CAAA,CAAA,eAAA,CAAgB,WAAW,CAAA,EAAG;AACnD,MAAA,IAAA,CAAK,SAAA,GAAY,CAAC,IAAA,CAAK,SAAA,CAAU,CAAC,CAAA,IAAO,CAAA,CAAA,UAAA,CAAW,WAAW,CAAA,EAAK,CAAA,CAAA,aAAA,CAAc,GAAG,CAAC,CAAA;AAAA,IACxF;AACA,IAAA;AAAA,EACF;AAEA,EAAA,IAAM,CAAA,CAAA,uBAAA,CAAwB,IAAI,CAAA,EAAG;AACnC,IAAA,iBAAA,CAAkB,IAAA,CAAK,UAAA,EAAY,CAAA,EAAG,GAAG,CAAA,KAAA,CAAO,CAAA;AAChD,IAAA,iBAAA,CAAkB,IAAA,CAAK,SAAA,EAAW,CAAA,EAAG,GAAG,CAAA,KAAA,CAAO,CAAA;AAC/C,IAAA;AAAA,EACF;AAEA,EAAA,IAAM,CAAA,CAAA,mBAAA,CAAoB,IAAI,CAAA,EAAG;AAC/B,IAAA,iBAAA,CAAkB,IAAA,CAAK,IAAA,EAAM,CAAA,EAAG,GAAG,CAAA,KAAA,CAAO,CAAA;AAC1C,IAAA,iBAAA,CAAkB,IAAA,CAAK,KAAA,EAAO,CAAA,EAAG,GAAG,CAAA,MAAA,CAAQ,CAAA;AAAA,EAC9C;AACF;AAEA,SAAS,kBAAkB,IAAA,EAA0C;AACnE,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,WAAA,CAAY,IAAI,CAAA,EAAG;AACrB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAM,CAAA,CAAA,uBAAA,CAAwB,IAAI,CAAA,EAAG;AACnC,IAAA,OACE,kBAAkB,IAAA,CAAK,UAAU,CAAA,IAAK,iBAAA,CAAkB,KAAK,SAAS,CAAA;AAAA,EAE1E;AAEA,EAAA,IAAM,CAAA,CAAA,mBAAA,CAAoB,IAAI,CAAA,EAAG;AAC/B,IAAA,OAAO,kBAAkB,IAAA,CAAK,IAAI,CAAA,IAAK,iBAAA,CAAkB,KAAK,KAAK,CAAA;AAAA,EACrE;AAEA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,mBAAmB,IAAA,EAA0C;AACpE,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,WAAA,CAAY,IAAI,CAAA,IAAK,cAAA,CAAe,IAAI,CAAA,EAAG;AAC7C,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAM,CAAA,CAAA,uBAAA,CAAwB,IAAI,CAAA,EAAG;AACnC,IAAA,OACE,mBAAmB,IAAA,CAAK,UAAU,CAAA,IAAK,kBAAA,CAAmB,KAAK,SAAS,CAAA;AAAA,EAE5E;AAEA,EAAA,IAAM,CAAA,CAAA,mBAAA,CAAoB,IAAI,CAAA,EAAG;AAC/B,IAAA,OAAO,mBAAmB,IAAA,CAAK,IAAI,CAAA,IAAK,kBAAA,CAAmB,KAAK,KAAK,CAAA;AAAA,EACvE;AAEA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,kBAAkB,IAAA,EAAiC;AAC1D,EAAA,OACI,CAAA,CAAA,kBAAA,CAAmB,IAAA,CAAK,MAAM,CAAA,IAC9B,CAAA,CAAA,YAAA,CAAa,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,KAChC,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,IAAA,KAAS,QAAA,IAC3B,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,IAAA,KAAS,eAAA,CAAA,IAC5B,CAAA,CAAA,YAAA,CAAa,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAA,IACnC,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,IAAA,KAAS,OAAA;AAElC;AAEA,SAAS,8BAA8B,IAAA,EAAuC;AAC5E,EAAA,IACE,IAAA,CAAK,YAAY,oBAAA,EAAqB,IACtC,KAAK,UAAA,CAAW,IAAA,CAAK,EAAA,KAAO,IAAA,CAAK,IAAA,EACjC;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IACE,IAAA,CAAK,YAAY,sBAAA,EAAuB,IACxC,KAAK,UAAA,CAAW,IAAA,CAAK,IAAA,KAAS,IAAA,CAAK,IAAA,EACnC;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,IAAA,CAAK,UAAA,EAAY,kBAAA,EAAmB,EAAG;AACzC,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IACE,IAAA,CAAK,YAAY,gBAAA,EAAiB,IAChC,eAAa,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,MAAM,CAAA,IAC1C,IAAA,CAAK,WAAW,IAAA,CAAK,MAAA,CAAO,IAAA,KAAS,YAAA,IACrC,IAAA,CAAK,UAAA,CAAW,KAAK,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,IAAoB,CAAA,EACjE;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IACE,IAAA,CAAK,UAAA,EAAY,kBAAA,EAAmB,IACpC,KAAK,UAAA,CAAW,IAAA,CAAK,QAAA,KAAa,IAAA,CAAK,IAAA,IACvC,CAAC,IAAA,CAAK,UAAA,CAAW,KAAK,QAAA,EACtB;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IACE,IAAA,CAAK,UAAA,EAAY,kBAAA,EAAmB,IACpC,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,MAAA,KAAW,IAAA,CAAK,IAAA,IACnC,CAAA,CAAA,YAAA,CAAa,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,QAAQ,CAAA,KAC3C,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,QAAA,CAAS,IAAA,KAAS,OAAA,IACtC,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,QAAA,CAAS,IAAA,KAAS,QAAA,CAAA,EACzC;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IACE,KAAK,UAAA,EAAY,iBAAA,MACjB,IAAA,CAAK,UAAA,EAAY,mBAAkB,EACnC;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IACE,KAAK,UAAA,EAAY,gBAAA,MACjB,IAAA,CAAK,UAAA,CAAW,KAAK,GAAA,KAAQ,IAAA,CAAK,QAClC,CAAC,IAAA,CAAK,WAAW,IAAA,CAAK,QAAA,IACtB,CAAE,IAAA,CAAK,UAAA,CAAW,KAA0B,SAAA,EAC5C;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IACE,IAAA,CAAK,YAAY,qBAAA,EAAsB,IACvC,KAAK,UAAA,CAAW,IAAA,CAAK,EAAA,KAAO,IAAA,CAAK,IAAA,EACjC;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IACE,IAAA,CAAK,YAAY,kBAAA,EAAmB,IACpC,KAAK,UAAA,CAAW,IAAA,CAAK,EAAA,KAAO,IAAA,CAAK,IAAA,EACjC;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,uBAAA,CAAwB,KAAa,UAAA,EAA+B;AAC3E,EAAA,QAAA,CAAS,GAAA,EAAK;AAAA,IACZ,qBAAqB,IAAA,EAAwC;AAC3D,MAAA,MAAM,IAAA,GAAO,KAAK,IAAA,CAAK,IAAA;AACvB,MAAA,IAAI,CAAG,CAAA,CAAA,kBAAA,CAAmB,IAAI,CAAA,EAAG;AAC/B,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,IAAA,GAA2B,IAAA;AAC/B,MAAA,OAAS,CAAA,CAAA,kBAAA,CAAmB,IAAA,CAAK,MAAM,CAAA,EAAG;AACxC,QAAA,IAAA,GAAO,IAAA,CAAK,MAAA;AAAA,MACd;AAEA,MAAA,IAAI,CAAG,CAAA,CAAA,YAAA,CAAa,IAAA,CAAK,MAAM,CAAA,EAAG;AAChC,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,CAAG,eAAa,IAAA,CAAK,QAAQ,KAAK,IAAA,CAAK,QAAA,CAAS,SAAS,OAAA,EAAS;AACpE,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,SAAA,GAAY,KAAK,MAAA,CAAO,IAAA;AAC9B,MAAA,IAAI,CAAC,UAAA,CAAW,GAAA,CAAI,SAAS,CAAA,EAAG;AAC9B,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,SAAS,IAAA,EAAM;AACjB,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,IAAA,CAAK,UAAA,EAAY,oBAAA,EAAqB,EAAG;AAC3C,QAAA;AAAA,MACF;AAEA,MAAA,IAAA,CAAK,WAAA;AAAA,QACD,CAAA,CAAA,kBAAA,CAAmB;AAAA,UACnB,IAAA,CAAK,IAAA;AAAA,UACH,CAAA,CAAA,cAAA;AAAA,YACE,mBAAmB,CAAA,CAAA,UAAA,CAAW,SAAS,CAAA,EAAK,CAAA,CAAA,UAAA,CAAW,QAAQ,CAAC,CAAA;AAAA,YAClE;AAAC;AACH,SACD;AAAA,OACH;AACA,MAAA,IAAA,CAAK,IAAA,EAAK;AAAA,IACZ;AAAA,GACD,CAAA;AACH;AAEA,SAAS,kBAAkB,MAAA,EAOzB;AACA,EAAA,MAAM,GAAA,GAAM,WAAA,CAAY,MAAA,IAAU,EAAE,CAAA;AACpC,EAAA,MAAM,UAAA,uBAAiB,GAAA,EAAY;AACnC,EAAA,MAAM,cAAA,uBAAqB,GAAA,EAAY;AACvC,EAAA,MAAM,cAAA,uBAAqB,GAAA,EAAY;AACvC,EAAA,MAAM,gBAAA,uBAAuB,GAAA,EAAY;AACzC,EAAA,IAAI,kBAAA,GAAqB,KAAA;AAEzB,EAAA,KAAA,MAAW,IAAA,IAAQ,GAAA,CAAI,OAAA,CAAQ,IAAA,EAAM;AACnC,IAAA,IAAI,CAAG,CAAA,CAAA,mBAAA,CAAoB,IAAI,CAAA,EAAG;AAChC,MAAA;AAAA,IACF;AAEA,IAAA,KAAA,MAAW,SAAA,IAAa,KAAK,UAAA,EAAY;AACvC,MAAA,cAAA,CAAe,GAAA,CAAI,SAAA,CAAU,KAAA,CAAM,IAAI,CAAA;AAAA,IACzC;AAAA,EACF;AAEA,EAAA,MAAM,gBAA+B,EAAC;AACtC,EAAA,KAAA,MAAW,IAAA,IAAQ,GAAA,CAAI,OAAA,CAAQ,IAAA,EAAM;AACnC,IAAA,IACI,CAAA,CAAA,mBAAA,CAAoB,IAAI,CAAA,IACxB,CAAA,CAAA,eAAA,CAAgB,KAAK,MAAM,CAAA,KAC5B,IAAA,CAAK,MAAA,CAAO,KAAA,KAAU,cAAA,IAAkB,IAAA,CAAK,MAAA,CAAO,UAAU,YAAA,CAAA,EAC/D;AACA,MAAA,IAAI,IAAA,CAAK,MAAA,CAAO,KAAA,KAAU,cAAA,EAAgB;AACxC,QAAA,kBAAA,GAAqB,IAAA;AACrB,QAAA,MAAM,cAAsC,EAAC;AAE7C,QAAA,KAAA,MAAW,SAAA,IAAa,KAAK,UAAA,EAAY;AACvC,UAAA,IAAI,CAAG,CAAA,CAAA,iBAAA,CAAkB,SAAS,CAAA,EAAG;AACnC,YAAA,MAAM,IAAI,KAAA;AAAA,cACR;AAAA,aACF;AAAA,UACF;AAEA,UAAA,MAAM,QAAA,GAAa,eAAa,SAAA,CAAU,QAAQ,IAC9C,SAAA,CAAU,QAAA,CAAS,IAAA,GACnB,SAAA,CAAU,QAAA,CAAS,KAAA;AAEvB,UAAA,WAAA,CAAY,IAAA;AAAA,YACR,CAAA,CAAA,kBAAA;AAAA,cACE,CAAA,CAAA,UAAA,CAAW,SAAA,CAAU,KAAA,CAAM,IAAI,CAAA;AAAA,cAC/B,CAAA,CAAA,cAAA;AAAA,gBACE,CAAA,CAAA,gBAAA;AAAA,kBACE,aAAW,eAAe,CAAA;AAAA,kBAC1B,aAAW,KAAK;AAAA,iBACpB;AAAA,gBACA,CAAG,CAAA,CAAA,aAAA,CAAc,QAAQ,CAAC;AAAA;AAC5B;AACF,WACF;AAAA,QACF;AAEA,QAAA,IAAI,WAAA,CAAY,SAAS,CAAA,EAAG;AAC1B,UAAA,aAAA,CAAc,IAAA,CAAO,CAAA,CAAA,mBAAA,CAAoB,OAAA,EAAS,WAAW,CAAC,CAAA;AAAA,QAChE;AACA,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,iBAAoD,EAAC;AAC3D,MAAA,MAAM,oBAA4C,EAAC;AAEnD,MAAA,KAAA,MAAW,SAAA,IAAa,KAAK,UAAA,EAAY;AACvC,QAAA,IAAI,CAAG,CAAA,CAAA,iBAAA,CAAkB,SAAS,CAAA,EAAG;AACnC,UAAA,cAAA,CAAe,KAAK,SAAS,CAAA;AAC7B,UAAA;AAAA,QACF;AAEA,QAAA,MAAM,QAAA,GAAa,eAAa,SAAA,CAAU,QAAQ,IAC9C,SAAA,CAAU,QAAA,CAAS,IAAA,GACnB,SAAA,CAAU,QAAA,CAAS,KAAA;AAEvB,QAAA,IAAI,kBAAA,CAAmB,GAAA,CAAI,QAAQ,CAAA,EAAG;AACpC,UAAA,cAAA,CAAe,KAAK,SAAS,CAAA;AAC7B,UAAA;AAAA,QACF;AAEA,QAAA,kBAAA,GAAqB,IAAA;AACrB,QAAA,iBAAA,CAAkB,IAAA;AAAA,UACd,CAAA,CAAA,kBAAA;AAAA,YACE,CAAA,CAAA,UAAA,CAAW,SAAA,CAAU,KAAA,CAAM,IAAI,CAAA;AAAA,YAC/B,CAAA,CAAA,cAAA;AAAA,cACE,CAAA,CAAA,gBAAA;AAAA,gBACE,aAAW,eAAe,CAAA;AAAA,gBAC1B,aAAW,KAAK;AAAA,eACpB;AAAA,cACA,CAAG,CAAA,CAAA,aAAA,CAAc,QAAQ,CAAC;AAAA;AAC5B;AACF,SACF;AAAA,MACF;AAEA,MAAA,IAAI,cAAA,CAAe,SAAS,CAAA,EAAG;AAC7B,QAAA,aAAA,CAAc,IAAA;AAAA,UACV,CAAA,CAAA,iBAAA,CAAkB,cAAA,EAAkB,CAAA,CAAA,aAAA,CAAc,YAAY,CAAC;AAAA,SACnE;AAAA,MACF;AAEA,MAAA,IAAI,iBAAA,CAAkB,SAAS,CAAA,EAAG;AAChC,QAAA,aAAA,CAAc,IAAA,CAAO,CAAA,CAAA,mBAAA,CAAoB,OAAA,EAAS,iBAAiB,CAAC,CAAA;AAAA,MACtE;AAEA,MAAA;AAAA,IACF;AAEA,IAAA,aAAA,CAAc,KAAK,IAAI,CAAA;AAAA,EACzB;AACA,EAAA,GAAA,CAAI,QAAQ,IAAA,GAAO,aAAA;AAEnB,EAAA,QAAA,CAAS,GAAA,EAAK;AAAA,IACZ,eAAe,IAAA,EAAkC;AAC/C,MAAA,IAAI,CAAC,iBAAA,CAAkB,IAAA,CAAK,IAAI,CAAA,EAAG;AACjC,QAAA;AAAA,MACF;AAEA,MAAA,kBAAA,GAAqB,IAAA;AACrB,MAAA,IAAA,CAAK,KAAK,MAAA,GAAW,CAAA,CAAA,gBAAA;AAAA,QACjB,aAAW,eAAe,CAAA;AAAA,QAC1B,aAAW,OAAO;AAAA,OACtB;AAEA,MAAA,IACE,IAAA,CAAK,UAAA,IACL,IAAA,CAAK,UAAA,CAAW,oBAAA,EAAqB,IACnC,CAAA,CAAA,YAAA,CAAa,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,EAAE,CAAA,EACtC;AACA,QAAA,MAAM,QAAA,GAAW,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,CAAC,CAAA;AACtC,QAAA,MAAM,YAAA,GACJ,CAAC,CAAC,QAAA,IACA,kBAAgB,QAAwB,CAAA,IACzC,QAAA,CAA6B,KAAA,CAAM,MAAA,GAAS,CAAA;AAE/C,QAAA,IAAI,CAAC,YAAA,EAAc;AACjB,UAAA,IAAA,CAAK,KAAK,SAAA,GAAY;AAAA,YAClB,CAAA,CAAA,aAAA,CAAc,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,GAAG,IAAI,CAAA;AAAA,YAC5C,GAAG,KAAK,IAAA,CAAK;AAAA,WACf;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,GACD,CAAA;AAED,EAAA,QAAA,CAAS,GAAA,EAAK;AAAA,IACZ,mBAAmB,IAAA,EAAsC;AACvD,MAAA,IAAI,CAAG,CAAA,CAAA,YAAA,CAAa,IAAA,CAAK,IAAA,CAAK,EAAE,CAAA,EAAG;AACjC,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,iBAAA,CAAkB,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA,EAAG;AACrC,QAAA,UAAA,CAAW,GAAA,CAAI,IAAA,CAAK,IAAA,CAAK,EAAA,CAAG,IAAI,CAAA;AAChC,QAAA,iBAAA,CAAkB,KAAK,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,IAAA,CAAK,GAAG,IAAI,CAAA;AAAA,MACrD;AAEA,MAAA,IAAI,kBAAA,CAAmB,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA,EAAG;AACtC,QAAA,cAAA,CAAe,GAAA,CAAI,IAAA,CAAK,IAAA,CAAK,EAAA,CAAG,IAAI,CAAA;AAAA,MACtC;AAAA,IACF;AAAA,GACD,CAAA;AAED,EAAA,QAAA,CAAS,GAAA,EAAK;AAAA,IACZ,qBAAqB,IAAA,EAAwC;AAC3D,MAAA,IAAI,CAAG,CAAA,CAAA,YAAA,CAAa,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA,EAAG;AACnC,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAA;AAC5B,MAAA,IAAI,CAAC,UAAA,CAAW,GAAA,CAAI,IAAI,CAAA,EAAG;AACzB,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,IAAI,CAAA;AAC1C,MAAA,IAAI,CAAC,OAAA,IAAW,CAAG,uBAAqB,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA,EAAG;AAC1D,QAAA;AAAA,MACF;AAEA,MAAA,IACE,CAAG,CAAA,CAAA,YAAA,CAAa,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,EAAE,CAAA,IACpC,CAAC,iBAAA,CAAkB,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA,EACzC;AACA,QAAA;AAAA,MACF;AAEA,MAAA,IAAA,CAAK,KAAK,IAAA,GAAS,CAAA,CAAA,gBAAA;AAAA,QACf,aAAW,IAAI,CAAA;AAAA,QACf,aAAW,OAAO;AAAA,OACtB;AAAA,IACF,CAAA;AAAA,IACA,iBAAiB,IAAA,EAAoC;AACnD,MAAA,IAAI,CAAG,CAAA,CAAA,YAAA,CAAa,IAAA,CAAK,IAAA,CAAK,QAAQ,CAAA,EAAG;AACvC,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,IAAA;AAChC,MAAA,IAAI,CAAC,UAAA,CAAW,GAAA,CAAI,IAAI,CAAA,EAAG;AACzB,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,IAAI,CAAA;AAC1C,MAAA,IAAI,CAAC,OAAA,IAAW,CAAG,uBAAqB,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA,EAAG;AAC1D,QAAA;AAAA,MACF;AAEA,MAAA,IACE,CAAG,CAAA,CAAA,YAAA,CAAa,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,EAAE,CAAA,IACpC,CAAC,iBAAA,CAAkB,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA,EACzC;AACA,QAAA;AAAA,MACF;AAEA,MAAA,IAAA,CAAK,KAAK,QAAA,GAAa,CAAA,CAAA,gBAAA;AAAA,QACnB,aAAW,IAAI,CAAA;AAAA,QACf,aAAW,OAAO;AAAA,OACtB;AAAA,IACF;AAAA,GACD,CAAA;AAED,EAAA,QAAA,CAAS,GAAA,EAAK;AAAA,IACZ,WAAW,IAAA,EAA8B;AACvC,MAAA,MAAM,IAAA,GAAO,KAAK,IAAA,CAAK,IAAA;AACvB,MAAA,IAAI,CAAC,cAAA,CAAe,GAAA,CAAI,IAAI,CAAA,EAAG;AAC7B,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,6BAAA,CAA8B,IAAI,CAAA,EAAG;AACvC,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,IAAI,CAAA;AAC1C,MAAA,IAAI,CAAC,OAAA,IAAW,CAAG,uBAAqB,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA,EAAG;AAC1D,QAAA;AAAA,MACF;AAEA,MAAA,IACE,CAAG,CAAA,CAAA,YAAA,CAAa,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,EAAE,CAAA,IACpC,CAAC,kBAAA,CAAmB,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA,EAC1C;AACA,QAAA;AAAA,MACF;AAEA,MAAA,IAAA,CAAK,WAAA;AAAA,QACD,mBAAmB,CAAA,CAAA,UAAA,CAAW,IAAI,CAAA,EAAK,CAAA,CAAA,UAAA,CAAW,OAAO,CAAC;AAAA,OAC9D;AACA,MAAA,IAAA,CAAK,IAAA,EAAK;AAAA,IACZ;AAAA,GACD,CAAA;AAED,EAAA,uBAAA,CAAwB,KAAK,UAAU,CAAA;AAEvC,EAAA,MAAM,eAAA,GAAkB,CAAC,IAAA,KAA6C;AACpE,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,IAAI,KAAA,GAAQ,KAAA;AACZ,IAAA,QAAA,CAAS,YAAY,CAAA,CAAA,EAAID,SAAAA,CAAS,IAAI,CAAA,CAAE,IAAI,GAAG,CAAA,EAAG;AAAA,MAChD,UAAA,GAAa;AACX,QAAA,KAAA,GAAQ,IAAA;AAAA,MACV,CAAA;AAAA,MACA,WAAA,GAAc;AACZ,QAAA,KAAA,GAAQ,IAAA;AAAA,MACV;AAAA,KACD,CAAA;AACD,IAAA,OAAO,KAAA;AAAA,EACT,CAAA;AAEA,EAAA,QAAA,CAAS,GAAA,EAAK;AAAA,IACZ,oBAAoB,IAAA,EAAuC;AACzD,MAAA,IAAI,KAAK,IAAA,CAAK,EAAA,IAAM,gBAAgB,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA,EAAG;AACnD,QAAA,gBAAA,CAAiB,GAAA,CAAI,IAAA,CAAK,IAAA,CAAK,EAAA,CAAG,IAAI,CAAA;AAAA,MACxC;AAAA,IACF,CAAA;AAAA,IACA,mBAAmB,IAAA,EAAsC;AACvD,MAAA,IACI,CAAA,CAAA,YAAA,CAAa,KAAK,IAAA,CAAK,EAAE,KAC3B,eAAA,CAAgB,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA,EAC9B;AACA,QAAA,gBAAA,CAAiB,GAAA,CAAI,IAAA,CAAK,IAAA,CAAK,EAAA,CAAG,IAAI,CAAA;AAAA,MACxC;AAAA,IACF;AAAA,GACD,CAAA;AAED,EAAA,QAAA,CAAS,GAAA,EAAK;AAAA,IACZ,WAAW,IAAA,EAA8B;AACvC,MAAA,MAAM,WAAA,GAAc,mBAAA;AAAA,QAClBA,SAAAA,CAAS,IAAA,CAAK,IAAI,CAAA,CAAE,IAAA;AAAA,QACpB,UAAA;AAAA,QACA,cAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,MAAM,MAAA,GAAS,WAAA,CAAY,CAAA,CAAA,EAAI,WAAA,CAAY,IAAI,CAAA,CAAA,CAAG,CAAA;AAClD,MAAA,MAAM,SAAA,GAAY,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA;AACvC,MAAA,IAAI,SAAA,IAAe,CAAA,CAAA,qBAAA,CAAsB,SAAS,CAAA,EAAG;AACnD,QAAA,IAAA,CAAK,WAAA,CAAY,UAAU,UAAU,CAAA;AACrC,QAAA,IAAA,CAAK,IAAA,EAAK;AAAA,MACZ;AAAA,IACF,CAAA;AAAA,IACA,YAAY,IAAA,EAA+B;AACzC,MAAA,MAAM,WAAA,GAAc,mBAAA;AAAA,QAClBA,SAAAA,CAAS,IAAA,CAAK,IAAI,CAAA,CAAE,IAAA;AAAA,QACpB,UAAA;AAAA,QACA,cAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,MAAM,MAAA,GAAS,WAAA,CAAY,CAAA,CAAA,EAAI,WAAA,CAAY,IAAI,CAAA,CAAA,CAAG,CAAA;AAClD,MAAA,MAAM,SAAA,GAAY,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA;AACvC,MAAA,IAAI,SAAA,IAAe,CAAA,CAAA,qBAAA,CAAsB,SAAS,CAAA,EAAG;AACnD,QAAA,IAAA,CAAK,WAAA,CAAY,UAAU,UAAU,CAAA;AACrC,QAAA,IAAA,CAAK,IAAA,EAAK;AAAA,MACZ;AAAA,IACF;AAAA,GACD,CAAA;AAED,EAAA,IAAI,kBAAA,EAAoB;AACtB,IAAA,GAAA,CAAI,QAAQ,IAAA,CAAK,OAAA;AAAA,MACb,CAAA,CAAA,iBAAA;AAAA,QACA;AAAA,UACI,CAAA,CAAA,eAAA;AAAA,YACE,aAAW,eAAe,CAAA;AAAA,YAC1B,aAAW,QAAQ;AAAA;AACvB,SACF;AAAA,QACE,gBAAc,cAAc;AAAA;AAChC,KACF;AAAA,EACF;AAEA,EAAA,MAAM,WAAA,GAAc,GAAA,CAAI,OAAA,CAAQ,IAAA,CAAK,MAAA;AAAA,IACnC,CAAC,IAAA,KAAwC,CAAA,CAAA,mBAAA,CAAoB,IAAI;AAAA,GACnE;AACA,EAAA,MAAM,SAAA,GAAY,GAAA,CAAI,OAAA,CAAQ,IAAA,CAAK,MAAA;AAAA,IACjC,CAAC,IAAA,KAAS,CAAG,CAAA,CAAA,mBAAA,CAAoB,IAAI;AAAA,GACvC;AAEA,EAAA,MAAM,WAAA,GAAc,WAAA,CAAY,GAAA,CAAI,CAAC,IAAA,KAASA,SAAAA,CAAS,IAAI,CAAA,CAAE,IAAI,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AAC5E,EAAA,MAAM,cAAA,GAAiB,SAAA,CACpB,GAAA,CAAI,CAAC,IAAA,KAASA,SAAAA,CAAS,IAAI,CAAA,CAAE,IAAI,CAAA,CACjC,IAAA,CAAK,IAAI,CAAA;AAEZ,EAAA,OAAO;AAAA,IACL,WAAA;AAAA,IACA,cAAA;AAAA,IACA,UAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,GACF;AACF;AAOA,SAAS,mBAAA,CACP,MACA,UAAA,EACA,cAAA,EACA,mCAAgC,IAAI,GAAA,IACpC,OAAA,EACuB;AACvB,EAAA,MAAM,GAAA,GAAM,WAAA,CAAY,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,CAAG,CAAA;AACnC,EAAA,IAAI,WAAA,GAAc,KAAA;AAClB,EAAA,MAAM,YAAA,GAAe,gBAAgB,OAAO,CAAA;AAE5C,EAAA,QAAA,CAAS,GAAA,EAAK;AAAA,IACZ,qBAAqB,IAAA,EAAwC;AAC3D,MAAA,IAAI,CAAG,CAAA,CAAA,YAAA,CAAa,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA,EAAG;AACnC,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAA;AAC5B,MAAA,IAAI,CAAC,UAAA,CAAW,GAAA,CAAI,IAAI,CAAA,EAAG;AACzB,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,IAAI,CAAA;AAC1C,MAAA,IAAI,OAAA,EAAS;AACX,QAAA;AAAA,MACF;AAEA,MAAA,IAAA,CAAK,KAAK,IAAA,GAAS,CAAA,CAAA,gBAAA;AAAA,QACf,aAAW,IAAI,CAAA;AAAA,QACf,aAAW,OAAO;AAAA,OACtB;AAAA,IACF,CAAA;AAAA,IACA,iBAAiB,IAAA,EAAoC;AACnD,MAAA,IAAI,CAAG,CAAA,CAAA,YAAA,CAAa,IAAA,CAAK,IAAA,CAAK,QAAQ,CAAA,EAAG;AACvC,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,IAAA;AAChC,MAAA,IAAI,CAAC,UAAA,CAAW,GAAA,CAAI,IAAI,CAAA,EAAG;AACzB,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,IAAI,CAAA;AAC1C,MAAA,IAAI,OAAA,EAAS;AACX,QAAA;AAAA,MACF;AAEA,MAAA,IAAA,CAAK,KAAK,QAAA,GAAa,CAAA,CAAA,gBAAA;AAAA,QACnB,aAAW,IAAI,CAAA;AAAA,QACf,aAAW,OAAO;AAAA,OACtB;AAAA,IACF;AAAA,GACD,CAAA;AAED,EAAA,QAAA,CAAS,GAAA,EAAK;AAAA,IACZ,WAAW,IAAA,EAA8B;AACvC,MAAA,MAAM,IAAA,GAAO,KAAK,IAAA,CAAK,IAAA;AACvB,MAAA,IAAI,CAAC,cAAA,CAAe,GAAA,CAAI,IAAI,CAAA,EAAG;AAC7B,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,6BAAA,CAA8B,IAAI,CAAA,EAAG;AACvC,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,IAAI,CAAA;AAC1C,MAAA,IAAI,OAAA,EAAS;AACX,QAAA;AAAA,MACF;AAEA,MAAA,IAAA,CAAK,WAAA;AAAA,QACD,mBAAmB,CAAA,CAAA,UAAA,CAAW,IAAI,CAAA,EAAK,CAAA,CAAA,UAAA,CAAW,OAAO,CAAC;AAAA,OAC9D;AACA,MAAA,IAAA,CAAK,IAAA,EAAK;AAAA,IACZ;AAAA,GACD,CAAA;AAED,EAAA,uBAAA,CAAwB,KAAK,UAAU,CAAA;AAEvC,EAAA,MAAM,YAAA,GAAe,CAAC,KAAA,KAClB,CAAA,CAAA,cAAA,CAAiB,aAAW,iBAAiB,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAC3D,EAAA,MAAM,UAAA,GAAa,CAAC,KAAA,KAChB,CAAA,CAAA,cAAA,CAAiB,aAAW,eAAe,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEzD,EAAA,MAAM,qBAAA,GAAwB,CAAC,KAAA,KAA2B;AACxD,IAAA,IAAI,KAAA,GAAQ,KAAA;AACZ,IAAA,QAAA,CAAS,YAAY,CAAA,CAAA,EAAIA,SAAAA,CAAS,KAAK,CAAA,CAAE,IAAI,GAAG,CAAA,EAAG;AAAA,MACjD,UAAA,GAAa;AACX,QAAA,KAAA,GAAQ,IAAA;AAAA,MACV,CAAA;AAAA,MACA,WAAA,GAAc;AACZ,QAAA,KAAA,GAAQ,IAAA;AAAA,MACV;AAAA,KACD,CAAA;AACD,IAAA,OAAO,KAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,sBAAA,GAAyB,CAAC,KAAA,KAA8C;AAC5E,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,IAAI,qBAAA,CAAsB,KAAK,CAAA,EAAG;AAChC,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI,KAAA,GAAQ,KAAA;AACZ,IAAA,QAAA,CAAS,YAAY,CAAA,CAAA,EAAIA,SAAAA,CAAS,KAAK,CAAA,CAAE,IAAI,GAAG,CAAA,EAAG;AAAA,MACjD,eAAe,IAAA,EAAM;AACnB,QAAA,IACI,CAAA,CAAA,YAAA,CAAa,IAAA,CAAK,IAAA,CAAK,MAAM,CAAA,IAC/B,gBAAA,CAAiB,GAAA,CAAI,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,IAAI,CAAA,EAC1C;AACA,UAAA,KAAA,GAAQ,IAAA;AACR,UAAA,IAAA,CAAK,IAAA,EAAK;AACV,UAAA;AAAA,QACF;AAEA,QAAA,IACI,CAAA,CAAA,kBAAA,CAAmB,KAAK,IAAA,CAAK,MAAM,KACnC,CAAA,CAAA,YAAA,CAAa,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAA,KACvC,KAAK,IAAA,CAAK,MAAA,CAAO,SAAS,IAAA,KAAS,KAAA,IAClC,KAAK,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,IAAA,KAAS,SAAA,CAAA,EACrC;AACA,UAAA,MAAM,CAAC,QAAQ,CAAA,GAAI,IAAA,CAAK,IAAA,CAAK,SAAA;AAC7B,UAAA,IACK,CAAA,CAAA,YAAA,CAAa,QAAQ,CAAA,IAAK,gBAAA,CAAiB,GAAA,CAAI,QAAA,CAAS,IAAI,CAAA,IAC/D,8BAAA,CAA+B,QAAA,EAAU,gBAAgB,CAAA,EACzD;AACA,YAAA,KAAA,GAAQ,IAAA;AACR,YAAA,IAAA,CAAK,IAAA,EAAK;AAAA,UACZ;AAAA,QACF;AAAA,MACF;AAAA,KACD,CAAA;AAED,IAAA,OAAO,KAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,8BAAA,GAAiC,CACrC,IAAA,EACA,iBAAA,KACY;AACZ,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,IAAM,CAAA,CAAA,yBAAA,CAA0B,IAAI,CAAA,IAAO,CAAA,CAAA,oBAAA,CAAqB,IAAI,CAAA,EAAG;AACrE,MAAA,OACE,sBAAsB,IAAA,CAAK,IAAI,CAAA,IAAK,sBAAA,CAAuB,KAAK,IAAI,CAAA;AAAA,IAExE;AAEA,IAAA,IAAM,CAAA,CAAA,YAAA,CAAa,IAAI,CAAA,EAAG;AACxB,MAAA,OAAO,iBAAA,CAAkB,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA;AAAA,IACxC;AAEA,IAAA,OAAO,KAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,iBAAA,GAAoB,CAAC,KAAA,KAAwC;AACjE,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,MAAA,OAAS,gBAAc,EAAE,CAAA;AAAA,IAC3B;AAEA,IAAA,OAAO,KAAA,CACJ,KAAA,CAAM,CAAC,CAAA,CACP,MAAA;AAAA,MACC,CAAC,GAAA,EAAK,OAAA,KAAc,CAAA,CAAA,gBAAA,CAAiB,GAAA,EAAK,KAAK,OAAO,CAAA;AAAA,MACtD,MAAM,CAAC;AAAA,KACT;AAAA,EACJ,CAAA;AAEA,EAAA,MAAM,eAAA,GAAkB,CACtB,IAAA,KACW;AACX,IAAA,IAAM,CAAA,CAAA,eAAA,CAAgB,IAAI,CAAA,EAAG;AAC3B,MAAA,OAAO,IAAA,CAAK,IAAA;AAAA,IACd;AAEA,IAAA,IAAM,CAAA,CAAA,mBAAA,CAAoB,IAAI,CAAA,EAAG;AAC/B,MAAA,OAAO,GAAG,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA,CAAA,EAAI,IAAA,CAAK,KAAK,IAAI,CAAA,CAAA;AAAA,IACjD;AAEA,IAAA,MAAM,UAAA,GAAa,CACjB,IAAA,KACW;AACX,MAAA,IAAM,CAAA,CAAA,eAAA,CAAgB,IAAI,CAAA,EAAG;AAC3B,QAAA,OAAO,IAAA,CAAK,IAAA;AAAA,MACd;AAEA,MAAA,OAAO,CAAA,EAAG,WAAW,IAAA,CAAK,MAAM,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,SAAS,IAAI,CAAA,CAAA;AAAA,IACzD,CAAA;AAEA,IAAA,OAAO,WAAW,IAAI,CAAA;AAAA,EACxB,CAAA;AAEA,EAAA,MAAM,8BAAA,GAAiC,CACrC,KAAA,KACuD;AACvD,IAAA,MAAM,UAAU,WAAA,CAAY,CAAA,CAAA,EAAIA,UAAS,KAAK,CAAA,CAAE,IAAI,CAAA,CAAA,CAAG,CAAA;AACvD,IAAA,IAAI,iBAAA,GAAoB,KAAA;AAExB,IAAA,QAAA,CAAS,OAAA,EAAS;AAAA,MAChB,WAAW,IAAA,EAAM;AACf,QAAA,iBAAA,GAAoB,IAAA;AACpB,QAAA,IAAA,CAAK,WAAA,CAAY,sBAAA,CAAuB,IAAA,CAAK,IAAI,CAAC,CAAA;AAClD,QAAA,IAAA,CAAK,IAAA,EAAK;AAAA,MACZ,CAAA;AAAA,MACA,YAAY,IAAA,EAAM;AAChB,QAAA,iBAAA,GAAoB,IAAA;AACpB,QAAA,IAAA,CAAK,WAAA,CAAY,uBAAA,CAAwB,IAAA,CAAK,IAAI,CAAC,CAAA;AACnD,QAAA,IAAA,CAAK,IAAA,EAAK;AAAA,MACZ;AAAA,KACD,CAAA;AAED,IAAA,MAAME,UAAAA,GAAY,OAAA,CAAQ,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA;AACxC,IAAA,IAAI,CAACA,UAAAA,IAAa,CAAG,CAAA,CAAA,qBAAA,CAAsBA,UAAS,CAAA,EAAG;AACrD,MAAA,OAAO,EAAE,UAAA,EAAY,KAAA,EAAO,WAAA,EAAa,iBAAA,EAAkB;AAAA,IAC7D;AAEA,IAAA,OAAO;AAAA,MACL,YAAYA,UAAAA,CAAU,UAAA;AAAA,MACtB,WAAA,EAAa;AAAA,KACf;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,mBAAA,GAAsB,CAC1B,IAAA,KACiB;AACjB,IAAA,IAAM,CAAA,CAAA,oBAAA,CAAqB,IAAI,CAAA,EAAG;AAChC,MAAA,MAAM,WAAA,GAAc,8BAAA;AAAA,QAClB,IAAA,CAAK;AAAA,OACP;AACA,MAAA,OAAS,CAAA,CAAA,cAAA,CAAiB,CAAA,CAAA,UAAA,CAAW,oBAAoB,CAAA,EAAG;AAAA,QAC1D,WAAA,CAAY;AAAA,OACb,CAAA;AAAA,IACH;AAEA,IAAA,MAAM,IAAA,GAAO,eAAA,CAAgB,IAAA,CAAK,IAAI,CAAA;AACtC,IAAA,IAAI,SAAS,KAAA,EAAO;AAClB,MAAA,OAAS,gBAAc,EAAE,CAAA;AAAA,IAC3B;AAEA,IAAA,MAAM,cAAA,GAAiB,IAAA,KAAS,WAAA,GAAc,OAAA,GAAU,IAAA;AACxD,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,KAAA,CAAM,yBAAyB,CAAA;AACvD,IAAA,IAAI,CAAC,KAAK,KAAA,EAAO;AACf,MAAA,OAAS,CAAA,CAAA,aAAA,CAAc,CAAA,CAAA,EAAI,cAAc,CAAA,CAAE,CAAA;AAAA,IAC7C;AAEA,IAAA,IAAM,CAAA,CAAA,eAAA,CAAgB,IAAA,CAAK,KAAK,CAAA,EAAG;AACjC,MAAA,OAAS,gBAAc,CAAA,CAAA,EAAI,cAAc,KAAK,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA,CAAA,CAAG,CAAA;AAAA,IACnE;AAEA,IAAA,IAAM,CAAA,CAAA,wBAAA,CAAyB,IAAA,CAAK,KAAK,CAAA,EAAG;AAC1C,MAAA,MAAM,WAAA,GAAc,8BAAA;AAAA,QACjB,IAAA,CAAK,KAAA,CAAM,UAAA,IAAiC,CAAA,CAAA,aAAA,CAAc,EAAE;AAAA,OAC/D;AAEA,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,OAAS,CAAA,CAAA,cAAA,CAAiB,CAAA,CAAA,UAAA,CAAW,yBAAyB,CAAA,EAAG;AAAA,UAC7D,CAAA,CAAA,aAAA,CAAc,UAAA,CAAW,CAAC,CAAA,CAAE,aAAa,CAAA;AAAA,UAC3C,WAAA,CAAY;AAAA,SACb,CAAA;AAAA,MACH;AAEA,MAAA,MAAM,kBACJ,cAAA,KAAmB,OAAA,GACb,CAAA,CAAA,cAAA,CAAiB,CAAA,CAAA,UAAA,CAAW,4BAA4B,CAAA,EAAG;AAAA,QAC3D,WAAA,CAAY;AAAA,OACb,IACD,WAAA,CAAY,UAAA;AAElB,MAAA,OAAO,iBAAA,CAAkB;AAAA,QACrB,CAAA,CAAA,aAAA,CAAc,CAAA,CAAA,EAAI,cAAc,CAAA,EAAA,CAAI,CAAA;AAAA,QACtC,WAAW,eAAe,CAAA;AAAA,QACxB,gBAAc,GAAG;AAAA,OACpB,CAAA;AAAA,IACH;AAEA,IAAA,OAAS,gBAAc,EAAE,CAAA;AAAA,EAC3B,CAAA;AAEA,EAAA,MAAM,oBAAA,GAAuB,CAC3B,KAAA,KAMiB;AACjB,IAAA,IAAM,CAAA,CAAA,SAAA,CAAU,KAAK,CAAA,EAAG;AACtB,MAAA,OAAS,CAAA,CAAA,aAAA,CAAc,MAAM,KAAK,CAAA;AAAA,IACpC;AAEA,IAAA,IAAM,CAAA,CAAA,wBAAA,CAAyB,KAAK,CAAA,EAAG;AACrC,MAAA,IAAM,CAAA,CAAA,oBAAA,CAAqB,KAAA,CAAM,UAAU,CAAA,EAAG;AAC5C,QAAA,OAAS,gBAAc,EAAE,CAAA;AAAA,MAC3B;AAEA,MAAA,MAAM,gBAAgB,KAAA,CAAM,UAAA;AAC5B,MAAA,MAAM,WAAA,GAAc,+BAA+B,aAAa,CAAA;AAChE,MAAA,OAAO,WAAA,CAAY,WAAA,IAAe,sBAAA,CAAuB,aAAa,CAAA,GAClE,YAAA,CAAa,WAAA,CAAY,UAAU,CAAA,GACnC,UAAA,CAAW,WAAA,CAAY,UAAU,CAAA;AAAA,IACvC;AAEA,IAAA,IAAM,CAAA,CAAA,gBAAA,CAAiB,KAAK,CAAA,EAAG;AAC7B,MAAA,MAAM,WAAA,GAAc,8BAAA,CAA+B,KAAA,CAAM,UAAU,CAAA;AACnE,MAAA,OAAO,WAAA,CAAY,WAAA,IAAe,sBAAA,CAAuB,KAAA,CAAM,UAAU,CAAA,GACrE,YAAA,CAAa,WAAA,CAAY,UAAU,CAAA,GACnC,UAAA,CAAW,WAAA,CAAY,UAAU,CAAA;AAAA,IACvC;AAEA,IAAA,IAAM,CAAA,CAAA,YAAA,CAAa,KAAK,CAAA,EAAG;AACzB,MAAA,OAAO,uBAAuB,KAAK,CAAA;AAAA,IACrC;AAEA,IAAA,OAAO,wBAAwB,KAAK,CAAA;AAAA,EACtC,CAAA;AAEA,EAAA,MAAM,uBAAA,GAA0B,CAAC,QAAA,KAA0C;AACzE,IAAA,MAAM,KAAA,GAAQ,SAAS,QAAA,CAAS,GAAA,CAAI,CAAC,KAAA,KAAU,oBAAA,CAAqB,KAAK,CAAC,CAAA;AAC1E,IAAA,OAAO,kBAAkB,KAAK,CAAA;AAAA,EAChC,CAAA;AAEA,EAAA,MAAM,sBAAA,GAAyB,CAAC,OAAA,KAAwC;AACtE,IAAA,MAAM,UAAU,OAAA,CAAQ,cAAA;AACxB,IAAA,MAAM,GAAA,GAAM,eAAA,CAAgB,OAAA,CAAQ,IAAI,CAAA;AAExC,IAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,MAAA,IAAI,QAAA,GAA2B,CAAA,CAAA,eAAA,CAAgB,EAAE,CAAA;AACjD,MAAA,KAAA,MAAW,IAAA,IAAQ,QAAQ,UAAA,EAAY;AACrC,QAAA,IACI,iBAAe,IAAI,CAAA,IACrB,gBAAgB,IAAA,CAAK,IAAI,MAAM,MAAA,IAC/B,IAAA,CAAK,SACH,CAAA,CAAA,wBAAA,CAAyB,IAAA,CAAK,KAAK,CAAA,IACrC,CAAG,uBAAqB,IAAA,CAAK,KAAA,CAAM,UAAU,CAAA,EAC7C;AACA,UAAA,QAAA,GAAW,8BAAA;AAAA,YACT,KAAK,KAAA,CAAM;AAAA,WACb,CAAE,UAAA;AAAA,QACJ;AAAA,MACF;AAEA,MAAA,MAAM,aAAA,GAAgB,QAAQ,QAAA,CAAS,IAAA;AAAA,QACrC,CAAC,UACG,CAAA,CAAA,wBAAA,CAAyB,KAAK,KAChC,CAAG,CAAA,CAAA,oBAAA,CAAqB,MAAM,UAAU;AAAA,OAC5C;AACA,MAAA,IAAI,CAAC,aAAA,EAAe;AAClB,QAAA,OAAS,gBAAc,EAAE,CAAA;AAAA,MAC3B;AAEA,MAAA,OAAS,CAAA,CAAA,cAAA,CAAiB,CAAA,CAAA,UAAA,CAAW,YAAY,CAAA,EAAG;AAAA,QAClD,QAAA;AAAA,QACA,8BAAA;AAAA,UACE,aAAA,CAAc;AAAA,SAChB,CAAE;AAAA,OACH,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,MAAA,IAAI,QAAA,GAA2B,iBAAe,KAAK,CAAA;AACnD,MAAA,IAAI,YAAA,GAA+B,gBAAc,EAAE,CAAA;AACnD,MAAA,KAAA,MAAW,IAAA,IAAQ,QAAQ,UAAA,EAAY;AACrC,QAAA,IAAI,CAAG,CAAA,CAAA,cAAA,CAAe,IAAI,CAAA,EAAG;AAC3B,UAAA;AAAA,QACF;AAEA,QAAA,MAAM,QAAA,GAAW,eAAA,CAAgB,IAAA,CAAK,IAAI,CAAA;AAC1C,QAAA,IACE,QAAA,KAAa,MAAA,IACb,IAAA,CAAK,KAAA,IACH,CAAA,CAAA,wBAAA,CAAyB,IAAA,CAAK,KAAK,CAAA,IACrC,CAAG,CAAA,CAAA,oBAAA,CAAqB,IAAA,CAAK,KAAA,CAAM,UAAU,CAAA,EAC7C;AACA,UAAA,QAAA,GAAW,8BAAA;AAAA,YACT,KAAK,KAAA,CAAM;AAAA,WACb,CAAE,UAAA;AAAA,QACJ;AAEA,QAAA,IACE,QAAA,KAAa,UAAA,IACb,IAAA,CAAK,KAAA,IACH,CAAA,CAAA,wBAAA,CAAyB,IAAA,CAAK,KAAK,CAAA,IACrC,CAAG,CAAA,CAAA,oBAAA,CAAqB,IAAA,CAAK,KAAA,CAAM,UAAU,CAAA,EAC7C;AACA,UAAA,YAAA,GAAe,8BAAA;AAAA,YACb,KAAK,KAAA,CAAM;AAAA,WACb,CAAE,UAAA;AAAA,QACJ;AAAA,MACF;AAEA,MAAA,MAAMC,UAAAA,GAAY,iBAAA;AAAA,QAChB,OAAA,CAAQ,QAAA,CACL,GAAA,CAAI,CAAC,KAAA,KAAU,qBAAqB,KAAK,CAAC,CAAA,CAC1C,MAAA,CAAO,OAAO;AAAA,OACnB;AAEA,MAAA,OAAS,CAAA,CAAA,cAAA,CAAiB,CAAA,CAAA,UAAA,CAAW,aAAa,CAAA,EAAG;AAAA,QACnD,QAAA;AAAA,QACE,CAAA,CAAA,uBAAA;AAAA,UACA,CAAG,CAAA,CAAA,UAAA,CAAW,SAAS,CAAC,CAAA;AAAA,UACxBA;AAAA,SACF;AAAA,QACA;AAAA,OACD,CAAA;AAAA,IACH;AAEA,IAAA,MAAM,QAAA,GAAW,iBAAA;AAAA,MACf;AAAA,QACE,GAAI,eAAe,CAAG,CAAA,CAAA,aAAA,CAAc,IAAI,YAAY,CAAA,CAAE,CAAC,CAAA,GAAI,EAAC;AAAA,QAC5D,GAAG,QAAQ,UAAA,CAAW,GAAA,CAAI,CAAC,IAAA,KAAS,mBAAA,CAAoB,IAAI,CAAC;AAAA;AAC/D,KACF;AACA,IAAA,MAAM,SAAA,GAAY,iBAAA;AAAA,MAChB,OAAA,CAAQ,QAAA,CACL,GAAA,CAAI,CAAC,KAAA,KAAU,qBAAqB,KAAK,CAAC,CAAA,CAC1C,MAAA,CAAO,OAAO;AAAA,KACnB;AAEA,IAAA,IAAI,QAAQ,WAAA,EAAa;AACvB,MAAA,OAAO,iBAAA,CAAkB;AAAA,QACrB,CAAA,CAAA,aAAA,CAAc,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE,CAAA;AAAA,QACzB,QAAA;AAAA,QACE,gBAAc,IAAI;AAAA,OACrB,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,iBAAA,CAAkB;AAAA,MACrB,CAAA,CAAA,aAAA,CAAc,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE,CAAA;AAAA,MACzB,QAAA;AAAA,MACE,gBAAc,GAAG,CAAA;AAAA,MACnB,SAAA;AAAA,MACE,CAAA,CAAA,aAAA,CAAc,CAAA,EAAA,EAAK,GAAG,CAAA,CAAA,CAAG;AAAA,KAC5B,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,QAAA,CAAS,GAAA,EAAK;AAAA,IACZ,WAAW,IAAA,EAAM;AACf,MAAA,WAAA,GAAc,IAAA;AACd,MAAA,IAAA,CAAK,WAAA,CAAY,sBAAA,CAAuB,IAAA,CAAK,IAAI,CAAC,CAAA;AAClD,MAAA,IAAA,CAAK,IAAA,EAAK;AAAA,IACZ,CAAA;AAAA,IACA,YAAY,IAAA,EAAM;AAChB,MAAA,WAAA,GAAc,IAAA;AACd,MAAA,IAAA,CAAK,WAAA,CAAY,uBAAA,CAAwB,IAAA,CAAK,IAAI,CAAC,CAAA;AACnD,MAAA,IAAA,CAAK,IAAA,EAAK;AAAA,IACZ;AAAA,GACD,CAAA;AAED,EAAA,MAAM,SAAA,GAAY,GAAA,CAAI,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA;AACpC,EAAA,IAAI,CAAC,SAAA,IAAa,CAAG,CAAA,CAAA,qBAAA,CAAsB,SAAS,CAAA,EAAG;AACrD,IAAA,OAAO,EAAE,IAAA,EAAM,IAAA,CAAK,IAAA,IAAQ,WAAA,EAAY;AAAA,EAC1C;AAEA,EAAA,WAAA,GAAc,WAAA,IAAe,sBAAA,CAAuB,SAAA,CAAU,UAAU,CAAA;AAExE,EAAA,OAAO,EAAE,IAAA,EAAMH,SAAAA,CAAS,UAAU,UAAU,CAAA,CAAE,MAAM,WAAA,EAAY;AAClE;AAEA,SAAS,oBAAoB,IAAA,EAAmC;AAC9D,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,WAAA,CAAY,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,CAAG,CAAA;AACnC,IAAA,MAAM,SAAA,GAAY,GAAA,CAAI,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA;AACpC,IAAA,OAAO,SAAA,IAAe,CAAA,CAAA,qBAAA,CAAsB,SAAS,CAAA,GACjD,UAAU,UAAA,GACV,IAAA;AAAA,EACN,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAEA,SAAS,+BAA+B,IAAA,EAAoC;AAC1E,EAAA,OAAO,CAAC,EACN,IAAA,KACG,CAAA,CAAA,YAAA,CAAa,IAAI,KAChB,CAAA,CAAA,kBAAA,CAAmB,IAAI,CAAA,IACvB,CAAA,CAAA,0BAAA,CAA2B,IAAI,CAAA,IAC/B,CAAA,CAAA,yBAAA,CAA0B,IAAI,CAAA,IAC9B,uBAAqB,IAAI,CAAA,CAAA,CAAA;AAEjC;AAEA,SAAS,+BAAA,CACP,IAAA,EACA,UAAA,EACA,cAAA,EACA,gBAAA,EACQ;AACR,EAAA,MAAM,cAAA,GAAiB,oBAAoB,IAAI,CAAA;AAC/C,EAAA,MAAM,WAAA,GAAc,mBAAA;AAAA,IAClB,IAAA;AAAA,IACA,UAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,GACF,CAAE,IAAA;AAEF,EAAA,IAAI,8BAAA,CAA+B,cAAc,CAAA,EAAG;AAClD,IAAA,OAAO,WAAA;AAAA,EACT;AAEA,EAAA,OAAO,gBAAgB,WAAW,CAAA,CAAA,CAAA;AACpC;AAEA,SAAS,kBAAkB,IAAA,EAAsB;AAC/C,EAAA,IAAM,CAAA,CAAA,YAAA,CAAa,IAAI,CAAA,EAAG;AACxB,IAAA,MAAM,UAAU,IAAA,CAAK,cAAA;AACrB,IAAA,IAAI,GAAA,GAAM,EAAA;AACV,IAAA,IAAM,CAAA,CAAA,eAAA,CAAgB,OAAA,CAAQ,IAAI,CAAA,EAAG;AACnC,MAAA,GAAA,GAAM,QAAQ,IAAA,CAAK,IAAA;AAAA,IACrB,CAAA,MAAA,IAAa,CAAA,CAAA,qBAAA,CAAsB,OAAA,CAAQ,IAAI,CAAA,EAAG;AAChD,MAAA,MAAMI,QAAO,CAAC,CAAA,KACV,CAAA,CAAA,eAAA,CAAgB,CAAC,IAAI,CAAA,CAAE,IAAA,GAAO,CAAA,EAAGA,KAAAA,CAAK,EAAE,MAAM,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,SAAS,IAAI,CAAA,CAAA;AACtE,MAAA,GAAA,GAAMA,KAAAA,CAAK,QAAQ,IAAI,CAAA;AAAA,IACzB,CAAA,MAAA,IAAa,CAAA,CAAA,mBAAA,CAAoB,OAAA,CAAQ,IAAI,CAAA,EAAG;AAC9C,MAAA,GAAA,GAAM,CAAA,EAAG,QAAQ,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA,CAAA,EAAI,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA,CAAA;AAAA,IAChE;AAEA,IAAA,IAAI,QAAA,GAAW,EAAA;AACf,IAAA,KAAA,MAAW,IAAA,IAAQ,QAAQ,UAAA,EAAY;AACrC,MAAA,IAAM,CAAA,CAAA,oBAAA,CAAqB,IAAI,CAAA,EAAG;AAChC,QAAA,QAAA,IAAY,CAAA,KAAA,EAAQJ,SAAAA,CAAS,IAAA,CAAK,QAAQ,EAAE,IAAI,CAAA,CAAA,CAAA;AAAA,MAClD,CAAA,MAAO;AACL,QAAA,IAAI,QAAA,GAAW,EAAA;AACf,QAAA,IAAM,kBAAgB,IAAA,CAAK,IAAI,CAAA,EAAG,QAAA,GAAW,KAAK,IAAA,CAAK,IAAA;AAAA,aAClD,QAAA,GAAW,CAAA,EAAG,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA,CAAA,EAAI,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA,CAAA;AAElE,QAAA,IAAI,CAAC,IAAA,CAAK,KAAA,EAAO,QAAA,IAAY,IAAI,QAAQ,CAAA,CAAA;AAAA,aAAA,IAC9B,CAAA,CAAA,eAAA,CAAgB,KAAK,KAAK,CAAA;AACnC,UAAA,QAAA,IAAY,CAAA,CAAA,EAAI,QAAQ,CAAA,EAAA,EAAK,IAAA,CAAK,MAAM,KAAK,CAAA,CAAA,CAAA;AAAA,aAAA,IACpC,CAAA,CAAA,wBAAA,CAAyB,IAAA,CAAK,KAAK,CAAA,EAAG;AAC/C,UAAA,IAAI,CAAG,CAAA,CAAA,oBAAA,CAAqB,IAAA,CAAK,KAAA,CAAM,UAAU,CAAA,EAAG;AAClD,YAAA,QAAA,IAAY,CAAA,CAAA,EAAI,QAAQ,CAAA,EAAA,EAAKA,SAAAA,CAAS,KAAK,KAAA,CAAM,UAAU,EAAE,IAAI,CAAA,CAAA,CAAA;AAAA,UACnE;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,MAAM,cAAc,IAAA,CAAK,QAAA,CAAS,IAAI,iBAAiB,CAAA,CAAE,KAAK,EAAE,CAAA;AAChE,IAAA,IAAI,QAAQ,WAAA,EAAa;AACvB,MAAA,OAAO,CAAA,CAAA,EAAI,GAAG,CAAA,EAAG,QAAQ,CAAA,GAAA,CAAA;AAAA,IAC3B;AACA,IAAA,OAAO,IAAI,GAAG,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,WAAW,KAAK,GAAG,CAAA,CAAA,CAAA;AAAA,EAClD;AACA,EAAA,IAAM,CAAA,CAAA,SAAA,CAAU,IAAI,CAAA,EAAG;AACrB,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AACA,EAAA,IAAM,CAAA,CAAA,wBAAA,CAAyB,IAAI,CAAA,EAAG;AACpC,IAAA,IAAM,CAAA,CAAA,oBAAA,CAAqB,IAAA,CAAK,UAAU,CAAA,EAAG,OAAO,EAAA;AACpD,IAAA,OAAO,CAAA,CAAA,EAAIA,SAAAA,CAAS,IAAA,CAAK,UAAU,EAAE,IAAI,CAAA,CAAA,CAAA;AAAA,EAC3C;AACA,EAAA,IAAM,CAAA,CAAA,aAAA,CAAc,IAAI,CAAA,EAAG;AACzB,IAAA,OAAO,KAAK,QAAA,CAAS,GAAA,CAAI,iBAAiB,CAAA,CAAE,KAAK,EAAE,CAAA;AAAA,EACrD;AACA,EAAA,OAAO,EAAA;AACT;AAEA,SAAS,0BAAA,CACP,OACA,QAAA,EACQ;AACR,EAAA,IAAI,MAAA,GAAS,EAAA;AACb,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,IAAI,KAAA,GAAQ,KAAA;AACZ,EAAA,IAAI,QAAA,GAAmC,IAAA;AACvC,EAAA,IAAI,aAAA,GAAgB,CAAA;AAEpB,EAAA,OAAO,KAAA,GAAQ,MAAM,MAAA,EAAQ;AAC3B,IAAA,MAAM,IAAA,GAAO,MAAM,KAAK,CAAA;AACxB,IAAA,MAAM,OAAO,KAAA,GAAQ,CAAA,GAAI,KAAA,CAAM,KAAA,GAAQ,CAAC,CAAA,GAAI,EAAA;AAE5C,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,MAAA,IAAU,IAAA;AAEV,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,IAAI,IAAA,KAAS,QAAA,IAAY,IAAA,KAAS,IAAA,EAAM;AACtC,UAAA,QAAA,GAAW,IAAA;AAAA,QACb;AACA,QAAA,KAAA,IAAS,CAAA;AACT,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,IAAA,KAAS,GAAA,IAAO,IAAA,KAAS,GAAA,IAAO,SAAS,GAAA,EAAK;AAChD,QAAA,QAAA,GAAW,IAAA;AAAA,MACb,CAAA,MAAA,IAAW,SAAS,GAAA,EAAK;AACvB,QAAA,aAAA,IAAiB,CAAA;AAAA,MACnB,CAAA,MAAA,IAAW,IAAA,KAAS,GAAA,IAAO,aAAA,GAAgB,CAAA,EAAG;AAC5C,QAAA,aAAA,IAAiB,CAAA;AAAA,MACnB,CAAA,MAAA,IAAW,IAAA,KAAS,GAAA,IAAO,aAAA,KAAkB,CAAA,EAAG;AAC9C,QAAA,KAAA,GAAQ,KAAA;AAAA,MACV;AAEA,MAAA,KAAA,IAAS,CAAA;AACT,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,SAAS,GAAA,EAAK;AAChB,MAAA,KAAA,GAAQ,IAAA;AACR,MAAA,MAAA,IAAU,IAAA;AACV,MAAA,KAAA,IAAS,CAAA;AACT,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,SAAS,GAAA,EAAK;AAChB,MAAA,MAAA,IAAU,IAAA;AACV,MAAA,KAAA,IAAS,CAAA;AACT,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,SAAS,GAAA,EAAK;AAChB,MAAA,MAAA,IAAU,IAAA;AACV,MAAA,KAAA,IAAS,CAAA;AACT,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,IAAA,IAAI,SAAS,KAAA,GAAQ,CAAA;AACrB,IAAA,IAAI,KAAA,GAAgC,IAAA;AAEpC,IAAA,OAAO,MAAA,GAAS,KAAA,CAAM,MAAA,IAAU,KAAA,GAAQ,CAAA,EAAG;AACzC,MAAA,MAAMK,KAAAA,GAAO,MAAM,MAAM,CAAA;AACzB,MAAA,MAAMC,KAAAA,GAAO,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AAE7B,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,IAAID,KAAAA,KAAS,KAAA,IAASC,KAAAA,KAAS,IAAA,EAAM;AACnC,UAAA,KAAA,GAAQ,IAAA;AAAA,QACV;AACA,QAAA,MAAA,IAAU,CAAA;AACV,QAAA;AAAA,MACF;AAEA,MAAA,IAAID,KAAAA,KAAS,GAAA,IAAOA,KAAAA,KAAS,GAAA,IAAOA,UAAS,GAAA,EAAK;AAChD,QAAA,KAAA,GAAQA,KAAAA;AACR,QAAA,MAAA,IAAU,CAAA;AACV,QAAA;AAAA,MACF;AAEA,MAAA,IAAIA,UAAS,GAAA,EAAK;AAChB,QAAA,KAAA,IAAS,CAAA;AAAA,MACX,CAAA,MAAA,IAAWA,UAAS,GAAA,EAAK;AACvB,QAAA,KAAA,IAAS,CAAA;AAAA,MACX;AAEA,MAAA,MAAA,IAAU,CAAA;AAAA,IACZ;AAEA,IAAA,IAAI,UAAU,CAAA,EAAG;AACf,MAAA,MAAM,kBAAA,CAAmB,6CAAA,EAA+C,KAAA,EAAO,KAAK,CAAA;AAAA,IACtF;AAEA,IAAA,MAAM,aAAa,KAAA,CAAM,KAAA,CAAM,KAAA,GAAQ,CAAA,EAAG,SAAS,CAAC,CAAA;AACpD,IAAA,MAAA,IAAU,SAAS,UAAU,CAAA;AAC7B,IAAA,KAAA,GAAQ,MAAA;AAAA,EACV;AAEA,EAAA,OAAO,MAAA;AACT;AAyIA,SAAS,mBAAA,CACP,KAAA,EACA,UAAA,EACA,cAAA,EACA,gBAAA,EACQ;AACR,EAAA,MAAM,QAAuB,EAAC;AAE9B,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,QAAQ,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AACnD,IAAA,IAAI,GAAA,KAAQ,MAAA,IAAU,GAAA,KAAQ,KAAA,EAAO;AACnC,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,QAAA,GAAW,GAAA,KAAQ,WAAA,GAAc,OAAA,GAAU,GAAA;AAEjD,IAAA,IAAI,aAAa,IAAA,EAAM;AACrB,MAAA,KAAA,CAAM,KAAK,CAAA,EAAG,IAAA,CAAK,SAAA,CAAU,QAAQ,CAAC,CAAA,MAAA,CAAQ,CAAA;AAC9C,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,SAAS,UAAA,CAAW,GAAG,KAAK,QAAA,CAAS,QAAA,CAAS,GAAG,CAAA,EAAG;AACtD,MAAA,MAAM,IAAA,GAAO,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AACjC,MAAA,MAAM,SAAA,GAAY,mBAAA;AAAA,QAChB,IAAA;AAAA,QACA,UAAA;AAAA,QACA,cAAA;AAAA,QACA;AAAA,OACF,CAAE,IAAA;AACF,MAAA,KAAA,CAAM,IAAA;AAAA,QACJ,CAAA,EAAG,IAAA,CAAK,SAAA,CAAU,QAAQ,CAAC,CAAA,GAAA,EAAM,QAAA,KAAa,OAAA,GAAU,CAAA,2BAAA,EAA8B,SAAS,CAAA,CAAA,CAAA,GAAM,SAAS,CAAA,CAAA;AAAA,OAChH;AACA,MAAA;AAAA,IACF;AAEA,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAG,IAAA,CAAK,SAAA,CAAU,QAAQ,CAAC,CAAA,EAAA,EAAK,IAAA,CAAK,SAAA,CAAU,QAAQ,CAAC,CAAA,CAAE,CAAA;AAAA,EACvE;AAEA,EAAA,OAAO,KAAA,CAAM,WAAW,CAAA,GAAI,IAAA,GAAO,KAAK,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA,EAAA,CAAA;AAC1D;AAqFA,SAAS,iBAAA,CACP,QAAA,EACA,UAAA,EACA,cAAA,EACA,gBAAA,EACA,gBACA,QAAA,EACA,OAAA,EACA,WAAA,EACA,QAAA,GAAW,iBAAA,EACc;AACzB,EAAA,IAAI,IAAA,GAAO,QAAA;AACX,EAAA,MAAM,eAA8B,EAAC;AACrC,EAAA,MAAM,eAA8B,EAAC;AACrC,EAAA,MAAM,eAA8B,EAAC;AACrC,EAAA,MAAM,gBAAgC,EAAC;AACvC,EAAA,MAAM,eAA8B,EAAC;AACrC,EAAA,MAAM,oBAAwC,EAAC;AAC/C,EAAA,MAAM,aAA0B,EAAC;AAGjC,EAAA,IAAA,GAAO,0BAAA,CAA2B,IAAA,EAAM,CAAC,IAAA,KAAiB;AACxD,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,WAAA,CAAY,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,CAAG,CAAA;AACnC,MAAA,MAAM,QAAA,GAAW,GAAA,CAAI,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA;AACnC,MAAA,IAAM,CAAA,CAAA,qBAAA,CAAsB,QAAQ,CAAA,EAAG;AACrC,QAAA,MAAM,OAAO,QAAA,CAAS,UAAA;AACtB,QAAA,MAAM,eAAA,GAAkB,CAAC,CAAA,KAAuB;AAC9C,UAAA,IAAI,KAAA,GAAQ,KAAA;AACZ,UAAA,QAAA,CAAS,YAAY,CAAA,CAAA,EAAIL,SAAAA,CAAS,CAAC,CAAA,CAAE,IAAI,GAAG,CAAA,EAAG;AAAA,YAC7C,UAAA,GAAa;AAAE,cAAA,KAAA,GAAQ,IAAA;AAAA,YAAM,CAAA;AAAA,YAC7B,WAAA,GAAc;AAAE,cAAA,KAAA,GAAQ,IAAA;AAAA,YAAM;AAAA,WAC/B,CAAA;AACD,UAAA,OAAO,KAAA;AAAA,QACT,CAAA;AAEA,QAAA,IAAM,CAAA,CAAA,mBAAA,CAAoB,IAAI,CAAA,IAAK,IAAA,CAAK,aAAa,IAAA,EAAM;AACzD,UAAA,IAAI,eAAA,CAAgB,IAAA,CAAK,KAAK,CAAA,EAAG;AAC/B,YAAA,MAAM,EAAA,GAAK,CAAA,CAAA,EAAI,QAAA,CAAS,EAAA,EAAI,CAAA,CAAA;AAC5B,YAAA,MAAM,SAAA,GAAYA,SAAAA,CAAS,IAAA,CAAK,IAAI,CAAA,CAAE,IAAA;AACtC,YAAA,MAAM,cAAA,GAAiB,iBAAA,CAAkB,IAAA,CAAK,KAAK,CAAA;AACnD,YAAA,UAAA,CAAW,IAAA,CAAK;AAAA,cACd,EAAA;AAAA,cACA,IAAA,EAAM,mBAAA;AAAA,gBACJ,SAAA;AAAA,gBACA,UAAA;AAAA,gBACA,cAAA;AAAA,gBACA,gBAAA;AAAA,gBACA;AAAA,eACF,CAAE,IAAA;AAAA,cACF,UAAA,EAAY,iBAAA;AAAA,gBACV,cAAA;AAAA,gBACA,UAAA;AAAA,gBACA,cAAA;AAAA,gBACA,gBAAA;AAAA,gBACF,cAAA;AAAA,gBACA,QAAA;AAAA,gBACA,OAAA;AAAA,gBACA,WAAA;AAAA,gBACA;AAAA;AACF,aACD,CAAA;AACC,YAAA,OAAO,UAAU,EAAE,CAAA,EAAA,CAAA;AAAA,UACrB;AAAA,QACF,CAAA,MAAA,IAAa,CAAA,CAAA,uBAAA,CAAwB,IAAI,CAAA,EAAG;AAC1C,UAAA,IAAI,gBAAgB,IAAA,CAAK,UAAU,KAAK,eAAA,CAAgB,IAAA,CAAK,SAAS,CAAA,EAAG;AACvE,YAAA,MAAM,EAAA,GAAK,CAAA,CAAA,EAAI,QAAA,CAAS,EAAA,EAAI,CAAA,CAAA;AAC5B,YAAA,MAAM,SAAA,GAAYA,SAAAA,CAAS,IAAA,CAAK,IAAI,CAAA,CAAE,IAAA;AACtC,YAAA,MAAM,cAAA,GAAiB,eAAA,CAAgB,IAAA,CAAK,UAAU,IAClD,iBAAA,CAAkB,IAAA,CAAK,UAAU,CAAA,GACjC,CAAA,CAAA,EAAIA,SAAAA,CAAS,IAAA,CAAK,UAAU,EAAE,IAAI,CAAA,CAAA,CAAA;AACtC,YAAA,MAAM,eAAA,GAAkB,eAAA,CAAgB,IAAA,CAAK,SAAS,IAClD,iBAAA,CAAkB,IAAA,CAAK,SAAS,CAAA,GAChC,CAAA,CAAA,EAAIA,SAAAA,CAAS,IAAA,CAAK,SAAS,EAAE,IAAI,CAAA,CAAA,CAAA;AACrC,YAAA,UAAA,CAAW,IAAA,CAAK;AAAA,cACd,EAAA;AAAA,cACA,IAAA,EAAM,mBAAA;AAAA,gBACJ,SAAA;AAAA,gBACA,UAAA;AAAA,gBACA,cAAA;AAAA,gBACA,gBAAA;AAAA,gBACA;AAAA,eACF,CAAE,IAAA;AAAA,cACF,UAAA,EAAY,iBAAA;AAAA,gBACV,cAAA;AAAA,gBACA,UAAA;AAAA,gBACA,cAAA;AAAA,gBACA,gBAAA;AAAA,gBACA,cAAA;AAAA,gBACA,QAAA;AAAA,gBACA,OAAA;AAAA,gBACA,WAAA;AAAA,gBACA;AAAA,eACF;AAAA,cACA,WAAA,EAAa,iBAAA;AAAA,gBACX,eAAA;AAAA,gBACA,UAAA;AAAA,gBACA,cAAA;AAAA,gBACA,gBAAA;AAAA,gBACA,cAAA;AAAA,gBACA,QAAA;AAAA,gBACA,OAAA;AAAA,gBACA,WAAA;AAAA,gBACA;AAAA;AACF,aACD,CAAA;AACD,YAAA,OAAO,UAAU,EAAE,CAAA,EAAA,CAAA;AAAA,UACrB;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AAEA,IAAA,OAAO,IAAI,IAAI,CAAA,CAAA,CAAA;AAAA,EACjB,CAAC,CAAA;AAED,EAAA,MAAM,iBAA4D,EAAC;AACnE,EAAA,IAAA,GAAO,0BAAA,CAA2B,IAAA,EAAM,CAAC,IAAA,KAAiB;AACxD,IAAA,MAAM,EAAA,GAAK,CAAA,IAAA,EAAO,cAAA,CAAe,MAAM,CAAA,CAAA;AACvC,IAAA,cAAA,CAAe,IAAA,CAAK,EAAE,EAAA,EAAI,UAAA,EAAY,MAAM,CAAA;AAC5C,IAAA,OAAO,gBAAgB,EAAE,CAAA,EAAA,CAAA;AAAA,EAC3B,CAAC,CAAA;AAED,EAAA,MAAM,iBAAA,GAAoB,CAAC,OAAA,KAA4B;AACrD,IAAA,OAAO,OAAA,CAAQ,OAAA;AAAA,MACb,iCAAA;AAAA,MACA,CAAC,OAAO,MAAA,KAAmB;AACzB,QAAA,MAAM,QAAQ,cAAA,CAAe,IAAA,CAAK,CAAC,KAAA,KAAU,KAAA,CAAM,OAAO,MAAM,CAAA;AAChE,QAAA,MAAM,IAAA,GAAO,KAAA,GAAQ,KAAA,CAAM,UAAA,GAAa,EAAA;AACxC,QAAA,MAAM,WAAA,GAAc,mBAAA;AAAA,UAClB,IAAA;AAAA,UACA,UAAA;AAAA,UACA,cAAA;AAAA,UACA,gBAAA;AAAA,UACA;AAAA,SACF;AACA,QAAA,IAAI,YAAY,WAAA,EAAa;AAC3B,UAAA,MAAMO,GAAAA,GAAK,CAAA,CAAA,EAAI,QAAA,CAAS,IAAA,EAAM,CAAA,CAAA;AAC9B,UAAA,YAAA,CAAa,IAAA,CAAK;AAAA,YAChB,EAAA,EAAAA,GAAAA;AAAA,YACA,IAAA,EAAM,CAAA,0BAAA,EAA6B,WAAA,CAAY,IAAI,CAAA,CAAA;AAAA,WACpD,CAAA;AACD,UAAA,OAAO,YAAYA,GAAE,CAAA,EAAA,CAAA;AAAA,QACvB;AAEA,QAAA,MAAM,EAAA,GAAK,CAAA,CAAA,EAAI,QAAA,CAAS,IAAA,EAAM,CAAA,CAAA;AAC9B,QAAA,YAAA,CAAa,KAAK,EAAE,EAAA,EAAI,IAAA,EAAM,WAAA,CAAY,MAAM,CAAA;AAChD,QAAA,OAAO,YAAY,EAAE,CAAA,EAAA,CAAA;AAAA,MACvB;AAAA,KACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc,CAAC,OAAA,KAAgC;AACnD,IAAA,IAAI,MAAA,GAAS,EAAA;AACb,IAAA,MAAM,SAAA,GAAY,gBAAgB,OAAO,CAAA;AAEzC,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,MAAA,IAAU,IAAI,SAAS,CAAA,CAAA;AAAA,IACzB;AAEA,IAAA,KAAA,MAAW,CAAC,UAAU,QAAQ,CAAA,IAAK,OAAO,OAAA,CAAQ,OAAA,CAAQ,KAAK,CAAA,EAAG;AAChE,MAAA,IAAI,aAAa,KAAA,EAAO;AACtB,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,kBAAA,GAAqB,QAAA,KAAa,WAAA,GAAc,OAAA,GAAU,QAAA;AAChE,MAAA,MAAM,aAAA,GAAgB,mBAAmB,WAAA,EAAY;AACrD,MAAA,IAAI,aAAa,IAAA,EAAM;AACrB,QAAA,MAAA,IAAU,IAAI,kBAAkB,CAAA,CAAA;AAChC,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,SAAS,UAAA,CAAW,GAAG,KAAK,QAAA,CAAS,QAAA,CAAS,GAAG,CAAA,EAAG;AACtD,QAAA,MAAM,IAAA,GAAO,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AACjC,QAAA,MAAM,UAAA,GAAa,kBAAA,CAAmB,KAAA,CAAM,yBAAyB,CAAA;AACrE,QAAA,IAAI,UAAA,EAAY;AACd,UAAA,MAAMA,GAAAA,GAAK,CAAA,CAAA,EAAI,QAAA,CAAS,KAAA,EAAO,CAAA,CAAA;AAC/B,UAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,CAAC,CAAA,CAAE,WAAA,EAAY;AACxC,UAAA,aAAA,CAAc,IAAA,CAAK;AAAA,YACjB,EAAA,EAAAA,GAAAA;AAAA,YACA,KAAA;AAAA,YACA,IAAA,EAAM,+BAAA;AAAA,cACJ,IAAA;AAAA,cACA,UAAA;AAAA,cACA,cAAA;AAAA,cACA;AAAA;AACF,WACD,CAAA;AACD,UAAA,MAAA,IAAU,CAAA,WAAA,EAAc,KAAK,CAAA,EAAA,EAAKA,GAAE,CAAA,CAAA,CAAA;AACpC,UAAA;AAAA,QACF;AAEA,QAAA,MAAM,EAAA,GAAK,CAAA,CAAA,EAAI,QAAA,CAAS,IAAA,EAAM,CAAA,CAAA;AAC9B,QAAA,YAAA,CAAa,IAAA,CAAK;AAAA,UAChB,EAAA;AAAA,UACA,IAAA,EAAM,kBAAA;AAAA,UACN,MACE,kBAAA,KAAuB,OAAA,GACnB,CAAA,2BAAA,EAA8B,mBAAA,CAAoB,MAAM,UAAA,EAAY,cAAA,EAAgB,gBAAgB,CAAA,CAAE,IAAI,CAAA,CAAA,CAAA,GAC1G,mBAAA,CAAoB,MAAM,UAAA,EAAY,cAAA,EAAgB,gBAAgB,CAAA,CAAE;AAAA,SAC/E,CAAA;AACD,QAAA,MAAA,IAAU,CAAA,CAAA,EAAI,kBAAkB,CAAA,WAAA,EAAc,EAAE,CAAA,GAAA,CAAA;AAChD,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,WAAA,IAAe,aAAA,CAAc,UAAA,CAAW,IAAI,CAAA,EAAG;AACjD,QAAA,WAAA,CAAY,GAAA;AAAA,UACV,CAAA,mDAAA,EAAsD,kBAAkB,CAAA,gBAAA,EAAmB,QAAQ,aAAa,kBAAkB,CAAA,WAAA;AAAA,SACpI;AAAA,MACF;AAEA,MAAA,IACE,WAAA,KACC,aAAA,KAAkB,MAAA,IAAU,aAAA,KAAkB,KAAA,IAAS,kBAAkB,YAAA,CAAA,IAC1E,kBAAA,CAAmB,IAAA,CAAK,QAAQ,CAAA,EAChC;AACA,QAAA,WAAA,CAAY,GAAA;AAAA,UACV,CAAA,oDAAA,EAAuD,kBAAkB,CAAA,aAAA,EAAgB,QAAQ,CAAA,EAAA;AAAA,SACnG;AAAA,MACF;AAEA,MAAA,MAAA,IAAU,IAAI,kBAAkB,CAAA,EAAA,EAAK,SAAS,OAAA,CAAQ,IAAA,EAAM,QAAQ,CAAC,CAAA,CAAA,CAAA;AAAA,IACvE;AAEA,IAAA,OAAO,MAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,oBAAoB,CAAC,KAAA,KACzB,KAAA,CACG,GAAA,CAAI,CAAC,IAAA,KAAS;AACb,IAAA,IAAI,IAAA,CAAK,SAAS,SAAA,EAAW;AAC3B,MAAA,OAAO,CAAA,IAAA,EAAO,KAAK,OAAO,CAAA,GAAA,CAAA;AAAA,IAC5B;AAEA,IAAA,IAAI,IAAA,CAAK,SAAS,MAAA,EAAQ;AACxB,MAAA,OAAO,IAAA,CAAK,OAAA;AAAA,IACd;AAEA,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,KAAK,CAAA,CACpC,GAAA,CAAI,CAAC,CAAC,IAAA,EAAM,KAAK,CAAA,KAAM;AACtB,MAAA,IAAI,UAAU,IAAA,EAAM;AAClB,QAAA,OAAO,IAAI,IAAI,CAAA,CAAA;AAAA,MACjB;AAEA,MAAA,OAAO,CAAA,CAAA,EAAI,IAAI,CAAA,EAAA,EAAK,MAAA,CAAO,KAAK,CAAA,CAAE,OAAA,CAAQ,IAAA,EAAM,QAAQ,CAAC,CAAA,CAAA,CAAA;AAAA,IAC3D,CAAC,CAAA,CACA,IAAA,CAAK,EAAE,CAAA;AACV,IAAA,MAAM,QAAA,GAAW,iBAAA,CAAkB,IAAA,CAAK,QAAQ,CAAA;AAChD,IAAA,IAAI,KAAK,aAAA,EAAe;AACtB,MAAA,OAAO,CAAA,CAAA,EAAI,IAAA,CAAK,GAAG,CAAA,EAAG,KAAK,CAAA,GAAA,CAAA;AAAA,IAC7B;AAEA,IAAA,OAAO,CAAA,CAAA,EAAI,KAAK,GAAG,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,QAAQ,CAAA,EAAA,EAAK,IAAA,CAAK,GAAG,CAAA,CAAA,CAAA;AAAA,EACtD,CAAC,CAAA,CACA,IAAA,CAAK,EAAE,CAAA;AAEZ,EAAA,MAAM,cAAc,CAAC,KAAA,KACnB,KAAA,CACG,GAAA,CAAI,CAAC,IAAA,KAAS;AACb,IAAA,IAAI,IAAA,CAAK,SAAS,SAAA,EAAW;AAC3B,MAAA,OAAO,CAAA,IAAA,EAAO,KAAK,OAAO,CAAA,GAAA,CAAA;AAAA,IAC5B;AAEA,IAAA,IAAI,IAAA,CAAK,SAAS,MAAA,EAAQ;AACxB,MAAA,OAAO,iBAAA,CAAkB,KAAK,OAAO,CAAA;AAAA,IACvC;AAEA,IAAA,IAAI,IAAA,CAAK,QAAQ,MAAA,EAAQ;AACvB,MAAA,MAAM,EAAA,GAAK,CAAA,CAAA,EAAI,QAAA,CAAS,IAAA,EAAM,CAAA,CAAA;AAC9B,MAAA,MAAM,QAAA,GACJ,OAAO,IAAA,CAAK,KAAA,CAAM,SAAS,QAAA,GAAW,IAAA,CAAK,MAAM,IAAA,GAAO,SAAA;AAC1D,MAAA,YAAA,CAAa,IAAA,CAAK,EAAE,EAAA,EAAI,IAAA,EAAM,UAAU,CAAA;AACxC,MAAA,OAAO,YAAY,EAAE,CAAA,EAAA,CAAA;AAAA,IACvB;AAEA,IAAA,IAAI,cAAA,CAAe,GAAA,CAAI,IAAA,CAAK,GAAG,CAAA,EAAG;AAChC,MAAA,MAAM,EAAA,GAAK,CAAA,CAAA,EAAI,QAAA,CAAS,IAAA,EAAM,CAAA,CAAA;AAC9B,MAAA,MAAM,cAAA,uBAAqB,GAAA,EAAuB;AAClD,MAAA,MAAM,eAA0B,EAAC;AAEjC,MAAA,KAAA,MAAW,KAAA,IAAS,KAAK,QAAA,EAAU;AACjC,QAAA,IACE,KAAA,CAAM,IAAA,KAAS,SAAA,IACf,KAAA,CAAM,GAAA,KAAQ,cACd,OAAO,KAAA,CAAM,KAAA,CAAM,IAAA,KAAS,QAAA,EAC5B;AACA,UAAA,cAAA,CAAe,GAAA,CAAI,KAAA,CAAM,KAAA,CAAM,IAAA,EAAM,MAAM,QAAQ,CAAA;AACnD,UAAA;AAAA,QACF;AAEA,QAAA,YAAA,CAAa,KAAK,KAAK,CAAA;AAAA,MACzB;AAEA,MAAA,MAAM,gBAAkC,EAAC;AACzC,MAAA,IAAI,KAAK,GAAA,KAAQ,UAAA,IAAc,OAAO,IAAA,CAAK,KAAA,CAAM,aAAa,QAAA,EAAU;AACtE,QAAA,MAAM,QAAA,GAAW,KAAK,KAAA,CAAM,QAAA;AAC5B,QAAA,IAAI,SAAS,UAAA,CAAW,GAAG,KAAK,QAAA,CAAS,QAAA,CAAS,GAAG,CAAA,EAAG;AACtD,UAAA,MAAM,qBAAqB,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,EAAE,EAAE,IAAA,EAAK;AACtD,UAAA,MAAM,WAAA,GAAc,WAAA,CAAY,CAAA,CAAA,EAAI,kBAAkB,CAAA,CAAA,CAAG,CAAA;AACzD,UAAA,MAAM,iBAAA,GAAoB,WAAA,CAAY,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA;AACpD,UAAA,MAAM,eACJ,iBAAA,IAAuB,CAAA,CAAA,qBAAA,CAAsB,iBAAiB,CAAA,GAC1D,kBAAkB,UAAA,GAClB,IAAA;AAEN,UAAA,IAAI,iBAAmB,CAAA,CAAA,YAAA,CAAa,YAAY,CAAA,IAAO,CAAA,CAAA,aAAA,CAAc,YAAY,CAAA,CAAA,EAAI;AACnF,YAAA,aAAA,CAAc,IAAA,CAAK;AAAA,cACjB,OAAA,EAAS,UAAU,EAAE,CAAA,SAAA,CAAA;AAAA,cACrB,IAAA,EAAM,UAAA;AAAA,cACN,UAAA,EAAY,iBAAA;AAAA,gBACV,kBAAkB,YAAY,CAAA;AAAA,gBAC9B,UAAA;AAAA,gBACA,cAAA;AAAA,gBACA,gBAAA;AAAA,gBACA,cAAA;AAAA,gBACA,QAAA;AAAA,gBACA,OAAA;AAAA,gBACA,WAAA;AAAA,gBACA;AAAA;AACF,aACD,CAAA;AAAA,UACH,CAAA,MAAO;AACL,YAAA,MAAM,mBAAA,GAAsB,mBAAA;AAAA,cAC1B,kBAAA;AAAA,cACA,UAAA;AAAA,cACA,cAAA;AAAA,cACA,gBAAA;AAAA,cACA;AAAA,aACF;AACA,YAAA,MAAM,iBAAA,GAAoB,YAAY,EAAE,CAAA,CAAA;AACxC,YAAA,aAAA,CAAc,IAAA,CAAK;AAAA,cACjB,OAAA,EAAS,UAAU,EAAE,CAAA,SAAA,CAAA;AAAA,cACrB,IAAA,EAAM,UAAA;AAAA,cACN,UAAA,EAAY;AAAA,gBACV,IAAA,EAAM,YAAY,iBAAiB,CAAA,EAAA,CAAA;AAAA,gBACnC,cAAc,EAAC;AAAA,gBACf,YAAA,EAAc;AAAA,kBACZ;AAAA,oBACE,EAAA,EAAI,iBAAA;AAAA,oBACJ,MAAM,mBAAA,CAAoB,WAAA,GACtB,6BAA6B,mBAAA,CAAoB,IAAI,MACrD,mBAAA,CAAoB;AAAA;AAC1B,iBACF;AAAA,gBACA,cAAc,EAAC;AAAA,gBACf,eAAe,EAAC;AAAA,gBAChB,cAAc,EAAC;AAAA,gBACf,mBAAmB,EAAC;AAAA,gBACpB,YAAY,EAAC;AAAA,gBACb,UAAA,EAAY,qBAAA;AAAA,kBACV,YAAY,iBAAiB,CAAA,EAAA,CAAA;AAAA,kBAC7B,UAAA;AAAA,kBACA,CAAC,IAAA,KACC,mBAAA;AAAA,oBACE,IAAA;AAAA,oBACA,UAAA;AAAA,oBACA,cAAA;AAAA,oBACA,gBAAA;AAAA,oBACA;AAAA,mBACF;AAAA,kBACF,QAAA;AAAA,kBACA;AAAA;AACF;AACF,aACD,CAAA;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAEA,MAAA,IAAI,YAAA,CAAa,SAAS,CAAA,EAAG;AAC3B,QAAA,aAAA,CAAc,IAAA,CAAK;AAAA,UACjB,OAAA,EAAS,UAAU,EAAE,CAAA,QAAA,CAAA;AAAA,UACrB,IAAA,EAAM,SAAA;AAAA,UACN,UAAA,EAAY,iBAAA;AAAA,YACV,kBAAkB,YAAY,CAAA;AAAA,YAC9B,UAAA;AAAA,YACA,cAAA;AAAA,YACA,gBAAA;AAAA,YACA,cAAA;AAAA,YACA,QAAA;AAAA,YACA,OAAA;AAAA,YACA,WAAA;AAAA,YACA;AAAA;AACF,SACD,CAAA;AAAA,MACH;AAEA,MAAA,KAAA,MAAW,CAAC,QAAA,EAAU,YAAY,CAAA,IAAK,cAAA,CAAe,SAAQ,EAAG;AAC/D,QAAA,aAAA,CAAc,IAAA,CAAK;AAAA,UACjB,OAAA,EAAS,UAAU,EAAE,CAAA,CAAA,EAAI,SAAS,OAAA,CAAQ,iBAAA,EAAmB,GAAG,CAAC,CAAA,CAAA;AAAA,UACjE,IAAA,EAAM,QAAA;AAAA,UACN,UAAA,EAAY,iBAAA;AAAA,YACV,kBAAkB,YAAY,CAAA;AAAA,YAC9B,UAAA;AAAA,YACA,cAAA;AAAA,YACA,gBAAA;AAAA,YACA,cAAA;AAAA,YACA,QAAA;AAAA,YACA;AAAA;AACF,SACD,CAAA;AAAA,MACH;AAEA,MAAA,iBAAA,CAAkB,IAAA,CAAK;AAAA,QACrB,EAAA;AAAA,QACA,WAAW,IAAA,CAAK,GAAA;AAAA,QAChB,SAAA,EAAW,mBAAA;AAAA,UACT,IAAA,CAAK,GAAA,KAAQ,UAAA,GACT,MAAA,CAAO,WAAA;AAAA,YACL,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,KAAK,CAAA,CAAE,MAAA,CAAO,CAAC,CAAC,GAAG,CAAA,KAAM,GAAA,KAAQ,UAAU;AAAA,cAEjE,IAAA,CAAK,KAAA;AAAA,UACT,UAAA;AAAA,UACA,cAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA;AAAA,OACD,CAAA;AACD,MAAA,OAAO,YAAY,EAAE,CAAA,EAAA,CAAA;AAAA,IACvB;AAEA,IAAA,MAAM,KAAA,GAAQ,YAAY,IAAI,CAAA;AAC9B,IAAA,MAAM,QAAA,GAAW,WAAA,CAAY,IAAA,CAAK,QAAQ,CAAA;AAC1C,IAAA,IAAI,KAAK,aAAA,EAAe;AACtB,MAAA,OAAO,CAAA,CAAA,EAAI,IAAA,CAAK,GAAG,CAAA,EAAG,KAAK,CAAA,GAAA,CAAA;AAAA,IAC7B;AAEA,IAAA,OAAO,CAAA,CAAA,EAAI,KAAK,GAAG,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,QAAQ,CAAA,EAAA,EAAK,IAAA,CAAK,GAAG,CAAA,CAAA,CAAA;AAAA,EACtD,CAAC,CAAA,CACA,IAAA,CAAK,EAAE,CAAA;AAEZ,EAAA,IAAA,GAAO,WAAA,CAAY,SAAA,CAAU,IAAI,CAAC,CAAA;AAElC,EAAA,MAAM,WAAA,GAAc,CAAC,IAAA,KACnB,mBAAA;AAAA,IACE,IAAA;AAAA,IACA,UAAA;AAAA,IACA,cAAA;AAAA,IACA,gBAAA;AAAA,IACA;AAAA,GACF;AACF,EAAA,MAAM,UAAA,GAAa,qBAAA;AAAA,IACjB,IAAA;AAAA,IACA,UAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,eAAe,IAAI,CAAA;AAAA,IACzB,YAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA,aAAA;AAAA,IACA,YAAA;AAAA,IACA,iBAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GACF;AACF;AAEA,SAAS,WAAA,CAAY,IAAA,EAAc,MAAA,GAAS,CAAA,EAAW;AACrD,EAAA,MAAM,GAAA,GAAM,GAAA,CAAI,MAAA,CAAO,MAAM,CAAA;AAC7B,EAAA,IAAI,CAAC,IAAA,CAAK,IAAA,EAAK,EAAG;AAChB,IAAA,OAAO,EAAA;AAAA,EACT;AAEA,EAAA,OAAO,IAAA,CACJ,KAAA,CAAM,IAAI,CAAA,CACV,IAAI,CAAC,IAAA,KAAS,CAAA,EAAG,GAAG,CAAA,EAAG,IAAI,CAAA,CAAE,CAAA,CAC7B,KAAK,IAAI,CAAA;AACd;AAEA,SAAS,uBAAA,CACP,UAAA,EACA,MAAA,GAAS,QAAA,EACD;AACR,EAAA,MAAM,gBAAA,GAAmB,WAAW,iBAAA,CAAkB,OAAA;AAAA,IAAQ,CAAC,OAAA,KAC7D,OAAA,CAAQ,aAAA,CAAc,GAAA;AAAA,MACpB,CAAC,IAAA,KACC,CAAA,EAAG,MAAM,CAAA,MAAA,EAAS,IAAA,CAAK,OAAO,CAAA,UAAA,EAAa,uBAAA,CAAwB,IAAA,CAAK,UAAA,EAAY,MAAA,GAAS,IAAI,CAAC,CAAA,EAAA;AAAA;AACtG,GACF;AAEA,EAAA,MAAM,qBAAA,GAAwB,UAAA,CAAW,iBAAA,CACtC,GAAA,CAAI,CAAC,OAAA,KAAY;AAChB,IAAA,MAAM,WAAA,GACJ,OAAA,CAAQ,aAAA,CAAc,MAAA,KAAW,CAAA,GAC7B,OACA,CAAA,EAAA,EAAK,OAAA,CAAQ,aAAA,CAAc,GAAA,CAAI,CAAC,IAAA,KAAS,GAAG,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,IAAI,CAAC,CAAA,EAAA,EAAK,IAAA,CAAK,OAAO,CAAA,CAAE,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,EAAA,CAAA;AAE1G,IAAA,OAAO,CAAA,EAAG,MAAM,CAAA,QAAA,EAAW,IAAA,CAAK,UAAU,OAAA,CAAQ,EAAE,CAAC,CAAA,sBAAA,EAAyB,QAAQ,SAAS,CAAA,mBAAA,EAAsB,OAAA,CAAQ,SAAS,uBAAuB,WAAW,CAAA,GAAA,CAAA;AAAA,EAC1K,CAAC,CAAA,CACA,IAAA,CAAK,KAAK,CAAA;AAEb,EAAA,MAAM,UAAA,GAAa,UAAA,CAAW,UAAA,GAC1B,CAAA,EAAG,MAAM,CAAA,OAAA,EAAU,UAAA,CAAW,UAAA,CAAW,OAAA,CAAQ,WAAA,EAAa,IAAA,GAAO,MAAM,CAAC,CAAA,CAAA,CAAA,GAC5E,EAAA;AAEJ,EAAA,MAAM,aAAA,GAAgB,CAAA;AAAA,EACtB,UAAU;AAAA,EACV,MAAM,CAAA;AAAA,EACN,UAAA,CAAW,aAAa,GAAA,CAAI,CAAC,YAAY,CAAA,EAAG,MAAM,WAAW,IAAA,CAAK,SAAA,CAAU,QAAQ,EAAE,CAAC,iBAAiB,OAAA,CAAQ,IAAI,KAAK,CAAA,CAAE,IAAA,CAAK,KAAK,CAAC;AAAA,EACtI,MAAM,CAAA;AAAA,EACN,MAAM,CAAA;AAAA,EACN,UAAA,CAAW,aAAa,GAAA,CAAI,CAAC,YAAY,CAAA,EAAG,MAAM,WAAW,IAAA,CAAK,SAAA,CAAU,QAAQ,EAAE,CAAC,iBAAiB,OAAA,CAAQ,IAAI,KAAK,CAAA,CAAE,IAAA,CAAK,KAAK,CAAC;AAAA,EACtI,MAAM,CAAA;AAAA,EACN,MAAM,CAAA;AAAA,EACN,UAAA,CAAW,YAAA,CAAa,GAAA,CAAI,CAAC,OAAA,KAAY,CAAA,EAAG,MAAM,CAAA,QAAA,EAAW,IAAA,CAAK,SAAA,CAAU,OAAA,CAAQ,EAAE,CAAC,WAAW,IAAA,CAAK,SAAA,CAAU,OAAA,CAAQ,IAAI,CAAC,CAAA,cAAA,EAAiB,OAAA,CAAQ,IAAI,CAAA,GAAA,CAAK,CAAA,CAAE,IAAA,CAAK,KAAK,CAAC;AAAA,EAC7K,MAAM,CAAA;AAAA,EACN,MAAM,CAAA;AAAA,EACN,UAAA,CAAW,aAAA,CAAc,GAAA,CAAI,CAAC,OAAA,KAAY,CAAA,EAAG,MAAM,CAAA,QAAA,EAAW,IAAA,CAAK,SAAA,CAAU,OAAA,CAAQ,EAAE,CAAC,YAAY,IAAA,CAAK,SAAA,CAAU,OAAA,CAAQ,KAAK,CAAC,CAAA,cAAA,EAAiB,OAAA,CAAQ,IAAI,CAAA,GAAA,CAAK,CAAA,CAAE,IAAA,CAAK,KAAK,CAAC;AAAA,EAChL,MAAM,CAAA;AAAA,EACN,MAAM,CAAA;AAAA,EACN,UAAA,CAAW,aAAa,GAAA,CAAI,CAAC,YAAY,CAAA,EAAG,MAAM,CAAA,QAAA,EAAW,IAAA,CAAK,SAAA,CAAU,OAAA,CAAQ,EAAE,CAAC,CAAA,QAAA,EAAW,IAAA,CAAK,SAAA,CAAU,OAAA,CAAQ,IAAI,CAAC,CAAA,EAAA,CAAI,CAAA,CAAE,IAAA,CAAK,KAAK,CAAC;AAAA,EAC/I,MAAM,CAAA;AAAA,EACN,MAAM,CAAA;AAAA,EACN,qBAAqB;AAAA,EACrB,MAAM,CAAA;AAAA,EACN,MAAM,CAAA;AAAA,EACN,UAAA,CAAW,UAAA,CACV,GAAA,CAAI,CAAC,OAAA,KAAY;AAChB,IAAA,MAAM,cAAc,CAAA,OAAA,EAAU,uBAAA,CAAwB,QAAQ,UAAA,EAAY,MAAA,GAAS,IAAI,CAAC,CAAA,CAAA,CAAA;AACxF,IAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,WAAA,GACzB,CAAA,OAAA,EAAU,uBAAA,CAAwB,QAAQ,WAAA,EAAa,MAAA,GAAS,IAAI,CAAC,CAAA,CAAA,CAAA,GACrE,WAAA;AACJ,IAAA,OAAO,CAAA,EAAG,MAAM,CAAA,QAAA,EAAW,IAAA,CAAK,UAAU,OAAA,CAAQ,EAAE,CAAC,CAAA,cAAA,EAAiB,OAAA,CAAQ,IAAI,CAAA,eAAA,EAAkB,WAAW,kBAAkB,YAAY,CAAA,EAAA,CAAA;AAAA,EAC/I,CAAC,CAAA,CACA,IAAA,CAAK,KAAK,CAAC;AAAA,EACZ,MAAM,CAAA;AAAA,EACN,MAAM,CAAA,CAAA,CAAA;AAEN,EAAA,IAAI,gBAAA,CAAiB,WAAW,CAAA,EAAG;AACjC,IAAA,OAAO,aAAA;AAAA,EACT;AAEA,EAAA,MAAM,cAAc,MAAA,CAAO,MAAA,IAAU,IAAI,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA,GAAI,EAAA;AAC3D,EAAA,OAAO,CAAA;AAAA,EAAa,gBAAA,CAAiB,IAAA,CAAK,IAAI,CAAC;AAAA,EAAK,MAAM,UAAU,aAAa,CAAA;AAAA,EAAM,WAAW,CAAA,IAAA,CAAA;AACpG;AAuMA,SAAS,kBAAA,CACP,QACA,OAAA,EACuC;AACvC,EAAA,MAAM,UAAA,GAAa,iBAAA,CAAkB,MAAA,CAAO,MAAM,CAAA;AAClD,EAAA,MAAM,QAAA,GAA6B;AAAA,IACjC,IAAA,EAAM,CAAA;AAAA,IACN,IAAA,EAAM,CAAA;AAAA,IACN,KAAA,EAAO,CAAA;AAAA,IACP,IAAA,EAAM,CAAA;AAAA,IACN,IAAA,EAAM,CAAA;AAAA,IACN,EAAA,EAAI;AAAA,GACN;AACA,EAAA,MAAM,QAAA,GAAW,OAAA,EAAS,GAAA,mBAAM,IAAI,KAAY,GAAI,MAAA;AAEpD,EAAA,MAAM,WAAA,GAAc,eAAA;AAAA,IAAgB,oBAAA;AAAA,IAAsB,MACxD,iBAAA;AAAA,MACE,MAAA,CAAO,QAAA;AAAA,MACP,UAAA,CAAW,UAAA;AAAA,MACX,UAAA,CAAW,cAAA;AAAA,MACX,UAAA,CAAW,gBAAA;AAAA,MACX,UAAA,CAAW,cAAA;AAAA,MACX,QAAA;AAAA,MACA,OAAA,EAAS,OAAA;AAAA,MACT,QAAA;AAAA,MACA,SAAS,KAAA,IAAS;AAAA;AACpB,GACF;AAEA,EAAA,MAAM,aAAa,OAAA,EAAS,UAAA,GACxB,CAAA,aAAA,EAAgB,OAAA,CAAQ,UAAU,CAAA,4CAAA,CAAA,GAClC,CAAA,kEAAA,CAAA;AACJ,EAAA,MAAM,UAAA,GAAa,OAAA,EAAS,UAAA,GACxB,CAAA,GAAA,EAAM,KAAK,SAAA,CAAU,OAAA,EAAS,KAAK,CAAC,OACpC,CAAA,GAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAA,EAAS,KAAK,CAAC,CAAA;AAAA,gCAAA,CAAA;AACxC,EAAA,MAAM,UACJ,OAAA,EAAS,GAAA,IAAO,CAAC,OAAA,EAAS,UAAA,IAAc,SAAS,KAAA,GAC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA,GASA,EAAA;AAEN,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,eAAA,CAAgB,QAAQ,CAAA;AAAA,EAC1B;AAEA,EAAA,MAAM,IAAA,GAAO;AAAA,EACb,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwGV,WAAA,CAAY,UAAA,CAAW,cAAA,EAAgB,CAAC,CAAC;;AAAA,SAAA,EAEhC,uBAAA,CAAwB,WAAA,EAAa,IAAI,CAAC,CAAA;AAAA,EACnD,UAAU;AAAA,EACV,OAAO;AAAA,CAAA;AAGP,EAAA,OAAO,EAAE,WAAA,EAAa,UAAA,CAAW,WAAA,EAAa,IAAA,EAAK;AACrD;AAeO,SAAS,kBAAA,CACd,QACA,OAAA,EACqB;AACrB,EAAA,MAAM,QAAA,GAAW,SAAS,QAAA,IAAY,iBAAA;AACtC,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,eAAA;AAAA,MAAgB,YAAA;AAAA,MAAc,MAC7C,eAAe,MAAM;AAAA,KACvB;AACE,IAAA,MAAM,MAAA,GAAS,eAAA;AAAA,MAAgB,gBAAA;AAAA,MAAkB,MACjD,iBAAA,CAAkB,MAAA,CAAO,MAAM;AAAA,KACjC;AACE,IAAA,MAAM,UAAU,MAAA,CAAO,MAAA,CAAO,KAAK,CAAC,KAAA,KAAU,EAAE,QAAA,IAAY,KAAA,CAAM,MAAM,CAAA,GACpE,aAAA,CAAc,GAAG,QAAQ,CAAA,CAAA,EAAI,SAAS,UAAA,IAAc,SAAS,EAAE,CAAA,GAC/D,KAAA,CAAA;AACJ,IAAA,MAAM,QAAA,GAAW,eAAA;AAAA,MAAgB,oBAAA;AAAA,MAAsB,MACvD,iBAAA;AAAA,QACE,MAAA,CAAO,QAAA;AAAA,QACP,MAAA,CAAO,UAAA;AAAA,QACP,MAAA,CAAO,cAAA;AAAA,QACP,MAAA,CAAO,gBAAA;AAAA,QACP,MAAA,CAAO,cAAA;AAAA,QACP;AAAA,UACE,IAAA,EAAM,CAAA;AAAA,UACN,IAAA,EAAM,CAAA;AAAA,UACN,KAAA,EAAO,CAAA;AAAA,UACP,IAAA,EAAM,CAAA;AAAA,UACN,IAAA,EAAM,CAAA;AAAA,UACN,EAAA,EAAI;AAAA,SACN;AAAA,QACA,OAAA;AAAA,QACA,OAAA,EAAS,GAAA,mBAAM,IAAI,GAAA,EAAY,GAAI,KAAA,CAAA;AAAA,QACnC;AAAA;AACF,KACF;AAEE,IAAA,OAAO;AAAA,MACL,MAAA;AAAA,MACA,MAAA;AAAA,MACA,QAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAO,qBAAA,CAAsB,KAAA,EAAO,MAAA,EAAQ,QAAQ,CAAA;AAAA,EACtD;AACF;AAEO,SAAS,wBAAA,CACd,QACA,OAAA,EACe;AACf,EAAA,IAAI;AACF,IAAA,OAAO,eAAA,CAAgB,kBAAkB,MAAM;AAC7C,MAAA,MAAM,UAAA,GAAa,kBAAkB,MAAM,CAAA;AAC3C,MAAA,OAAO,eAAA;AAAA,QAAgB,WAAA;AAAA,QAAa,MAChC,mBAAA;AAAA,UACE,CAAC,UAAA,CAAW,WAAA,EAAa,UAAA,CAAW,cAAc,EAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AAAA,UAC7E,SAAS,QAAA,IAAY;AAAA;AACvB,OACJ;AAAA,IACF,CAAC,CAAA;AAAA,EACH,SAAS,KAAA,EAAO;AACd,IAAA,OAAO,qBAAA,CAAsB,KAAA,EAAO,MAAA,EAAQ,OAAA,EAAS,YAAY,WAAW,CAAA;AAAA,EAC9E;AACF;AAEO,SAAS,YAAA,CAAa,QAAgB,OAAA,EAAyC;AACpF,EAAA,MAAM,QAAA,GAAW,SAAS,QAAA,IAAY,iBAAA;AACtC,EAAA,IAAI;AACF,IAAA,OAAO,eAAA,CAAgB,cAAc,MAAM;AACzC,MAAA,MAAM,MAAA,GAAS,eAAe,MAAM,CAAA;AAEpC,MAAA,IAAI,CAAC,OAAO,QAAA,CAAS,IAAA,MAAU,kBAAA,CAAmB,MAAA,CAAO,MAAM,CAAA,EAAG;AAChE,QAAA,MAAM,eAAe,mBAAA,CAAoB,MAAA,CAAO,MAAA,EAAQ,CAAA,EAAG,QAAQ,CAAA,GAAA,CAAK,CAAA;AACxE,QAAA,MAAMC,IAAAA,GAAM,eAAA;AAAA,UAAgB,iBAAA;AAAA,UAAmB,MAC7C,UAAA,CAAW,MAAA,CAAO,MAAM;AAAA,SAC1B;AACA,QAAA,OAAO;AAAA,UACL,GAAG,YAAA;AAAA,UACH,GAAA,EAAAA;AAAA,SACF;AAAA,MACF;AAEA,MAAA,MAAM,UAAU,MAAA,CAAO,MAAA,CAAO,KAAK,CAAC,KAAA,KAAU,EAAE,QAAA,IAAY,KAAA,CAAM,MAAM,CAAA,GACpE,aAAA,CAAc,GAAG,QAAQ,CAAA,CAAA,EAAI,SAAS,UAAA,IAAc,SAAS,EAAE,CAAA,GAC/D,KAAA,CAAA;AACJ,MAAA,MAAM,QAAA,GAAW,eAAA;AAAA,QAAgB,iBAAA;AAAA,QAAmB,MAClD,mBAAmB,MAAA,EAAQ;AAAA,UACzB,OAAA;AAAA,UACA,KAAA,EAAO,QAAA;AAAA,UACP,KAAK,OAAA,EAAS;AAAA,SACf;AAAA,OACH;AACA,MAAA,MAAM,aAAA,GAAgB,OAAA,EAAS,GAAA,GAC3B,CAAA,6GAAA,CAAA,GACA,CAAA,qEAAA,CAAA;AACJ,MAAA,MAAM,MAAA,GAAS,eAAA,CAAgB,WAAA,EAAa,MAAM,mBAAA,CAAoB;AAAA,EAC1E,aAAa;AAAA,EACb,SAAS,WAAW;AAAA,EACpB,SAAS,IAAI;AAAA,CAAA,EACZ,CAAA,EAAG,QAAQ,CAAA,GAAA,CAAK,CAAC,CAAA;AACd,MAAA,MAAM,GAAA,GAAM,eAAA;AAAA,QAAgB,iBAAA;AAAA,QAAmB,MAC7C,UAAA,CAAW,MAAA,CAAO,MAAA,EAAQ,OAAO;AAAA,OACnC;AACA,MAAA,OAAO;AAAA,QACL,GAAG,MAAA;AAAA,QACH;AAAA,OACF;AAAA,IACF,CAAC,CAAA;AAAA,EACH,SAAS,KAAA,EAAO;AACd,IAAA,OAAO,qBAAA,CAAsB,KAAA,EAAO,MAAA,EAAQ,QAAQ,CAAA;AAAA,EACtD;AACF","file":"compiler.js","sourcesContent":["import * as csstree from \"css-tree\";\nimport type { Rule, StyleSheet } from \"css-tree\";\nimport type { StyleBlock } from \"./parse\";\n\nexport function createScopeAttr(scopeId?: string): string | null {\n return scopeId ? `data-o-scope-${scopeId}` : null;\n}\n\nfunction scopeSelectorList(selectorList: string, scopeAttr: string): string {\n const applyScopeToSegment = (segment: string): string => {\n const trimmed = segment.trim();\n if (!trimmed) {\n return trimmed;\n }\n\n if (trimmed.includes(scopeAttr)) {\n return trimmed;\n }\n\n const globalPattern = /:global\\(([^()]+)\\)/g;\n const localCandidate = trimmed.replace(globalPattern, \"\").trim();\n const normalized = trimmed.replace(globalPattern, \"$1\");\n\n if (!localCandidate) {\n return normalized;\n }\n\n if (normalized === \":root\") {\n return `[${scopeAttr}]`;\n }\n\n const pseudoIndex = normalized.search(/(?<!:):(?!:)/);\n if (pseudoIndex === -1) {\n return `${normalized}[${scopeAttr}]`;\n }\n\n return `${normalized.slice(0, pseudoIndex)}[${scopeAttr}]${normalized.slice(pseudoIndex)}`;\n };\n\n return selectorList\n .split(\",\")\n .map((selector) => selector.trim())\n .filter(Boolean)\n .map((selector) => {\n if (selector.startsWith(\"@\") || selector.includes(scopeAttr)) {\n return selector;\n }\n\n return selector\n .split(/(\\s+|[>+~])/)\n .map((part) => {\n if (!part || /^(\\s+|[>+~])$/.test(part)) {\n return part;\n }\n\n return applyScopeToSegment(part);\n })\n .join(\"\");\n })\n .join(\", \");\n}\n\nfunction scopeCss(css: string, scopeAttr: string): string {\n const ast = csstree.parse(css, {\n context: \"stylesheet\",\n positions: false,\n }) as StyleSheet;\n\n csstree.walk(ast, {\n visit: \"Rule\",\n enter(node) {\n const rule = node as Rule;\n if (!rule.prelude || rule.prelude.type !== \"SelectorList\") {\n return;\n }\n\n rule.prelude = csstree.parse(\n scopeSelectorList(csstree.generate(rule.prelude), scopeAttr),\n {\n context: \"selectorList\",\n positions: false,\n },\n ) as Rule[\"prelude\"];\n },\n });\n\n return csstree.generate(ast);\n}\n\nexport function hashScopeSeed(input: string): string {\n let hash = 2166136261;\n for (let index = 0; index < input.length; index += 1) {\n hash ^= input.charCodeAt(index);\n hash = Math.imul(hash, 16777619);\n }\n\n return Math.abs(hash >>> 0).toString(36);\n}\n\nexport function collectCss(blocks: StyleBlock[], scopeId?: string): string {\n const scopeAttr = createScopeAttr(scopeId);\n return blocks\n .map((block) => {\n const content = block.content.trim();\n if (!content) {\n return \"\";\n }\n\n if (!(\"global\" in block.attrs) && scopeAttr) {\n return scopeCss(content, scopeAttr);\n }\n\n return content;\n })\n .filter(Boolean)\n .join(\"\\n\\n\");\n}\n","export type CompilePhase =\n | \"parse-file\"\n | \"parse-script\"\n | \"analyze-script\"\n | \"transform-template\"\n | \"generate-module\"\n | \"transpile\";\n\nexport type CompileDiagnostic = {\n message: string;\n filename?: string;\n phase?: CompilePhase;\n line?: number;\n column?: number;\n index?: number;\n frame?: string;\n hint?: string;\n};\n\nexport type CompileErrorLike = Error & {\n loc?: {\n line?: number;\r\n column?: number;\r\n index?: number;\r\n start?: {\r\n line: number;\r\n column: number;\r\n index?: number;\r\n };\r\n };\n frame?: string;\n diagnostic?: CompileDiagnostic;\n phase?: CompilePhase;\n hint?: string;\n};\n\r\nfunction indexToLocation(source: string, index: number): {\r\n line: number;\r\n column: number;\r\n index: number;\r\n} {\r\n const safeIndex = Math.max(0, Math.min(index, source.length));\r\n const lines = source.slice(0, safeIndex).split(\"\\n\");\r\n return {\r\n line: lines.length,\r\n column: lines[lines.length - 1]?.length ?? 0,\r\n index: safeIndex,\r\n };\r\n}\r\n\r\nfunction createCodeFrame(\r\n source: string,\r\n line: number,\r\n column: number,\r\n contextLines = 2,\r\n): string {\r\n const lines = source.split(\"\\n\");\r\n const start = Math.max(0, line - 1 - contextLines);\r\n const end = Math.min(lines.length, line + contextLines);\r\n return lines\r\n .slice(start, end)\r\n .map((content, offset) => {\r\n const lineNumber = start + offset + 1;\r\n const prefix = `${String(lineNumber).padStart(4, \" \")} | `;\r\n if (lineNumber !== line) {\r\n return `${prefix}${content}`;\r\n }\r\n return `${prefix}${content}\\n | ${\" \".repeat(Math.max(column, 0))}^`;\r\n })\r\n .join(\"\\n\");\r\n}\r\n\r\nexport function createCompileError(\n message: string,\n source: string,\n index: number,\n options?: {\n filename?: string;\n phase?: CompilePhase;\n hint?: string;\n },\n): CompileErrorLike {\n const loc = indexToLocation(source, index);\n const error = new Error(message) as CompileErrorLike;\n error.loc = { start: loc };\n error.frame = createCodeFrame(source, loc.line, loc.column);\n error.phase = options?.phase;\n error.hint = options?.hint;\n error.diagnostic = {\n message,\n filename: options?.filename,\n phase: options?.phase,\n line: loc.line,\n column: loc.column + 1,\n index: loc.index,\n frame: error.frame,\n hint: options?.hint,\n };\n return error;\n}\n\nexport function normalizeCompileError(\n error: unknown,\n source: string,\n filename = \"component.olova\",\n): never {\n const compileError =\n (error instanceof Error ? error : new Error(String(error))) as CompileErrorLike;\n const start = compileError.loc?.start ?? compileError.loc;\n const line = start?.line;\n const column = start?.column;\n const phasePrefix = compileError.phase ? ` [${compileError.phase}]` : \"\";\n const locationSuffix =\n line === undefined || column === undefined\n ? \"\"\n : ` (${filename}:${line}:${column + 1})`;\n const normalizedMessage = compileError.message.replace(/^\\[olova\\]\\s*/, \"\");\n compileError.message = `[olova]${phasePrefix} ${normalizedMessage}${locationSuffix}`;\n if (line !== undefined && column !== undefined && !compileError.frame) {\n compileError.frame = createCodeFrame(source, line, column);\n }\n compileError.diagnostic = {\n message: normalizedMessage,\n filename,\n phase: compileError.phase,\n line,\n column: column === undefined ? undefined : column + 1,\n index: start?.index,\n frame: compileError.frame,\n hint: compileError.hint,\n };\n throw compileError;\n}\n","export type StyleBlock = {\r\n content: string;\r\n attrs: Record<string, string | true>;\r\n};\r\n\r\nexport type ParsedOlovaFile = {\r\n script: string;\r\n template: string;\r\n styles: StyleBlock[];\r\n};\r\n\r\ntype TagMatch = {\r\n fullStart: number;\r\n openEnd: number;\r\n closeStart: number;\r\n closeEnd: number;\r\n inner: string;\r\n attrs: Record<string, string | true>;\r\n};\r\n\r\nfunction isWhitespace(char: string): boolean {\r\n return /\\s/.test(char);\r\n}\r\n\r\nfunction skipQuoted(source: string, start: number, quote: string): number {\r\n let index = start + 1;\r\n while (index < source.length) {\r\n if (source[index] === \"\\\\\" && index + 1 < source.length) {\r\n index += 2;\r\n continue;\r\n }\r\n\r\n if (source[index] === quote) {\r\n return index + 1;\r\n }\r\n\r\n index += 1;\r\n }\r\n\r\n return source.length;\r\n}\r\n\r\nfunction findTagEnd(source: string, start: number): number {\r\n let index = start;\r\n while (index < source.length) {\r\n const char = source[index];\r\n if (char === '\"' || char === \"'\") {\r\n index = skipQuoted(source, index, char);\r\n continue;\r\n }\r\n\r\n if (char === \">\") {\r\n return index;\r\n }\r\n\r\n index += 1;\r\n }\r\n\r\n return -1;\r\n}\r\n\r\nfunction parseAttributes(source: string): Record<string, string | true> {\r\n const attrs: Record<string, string | true> = {};\r\n const attrRegex =\r\n /([:@A-Za-z_][-A-Za-z0-9_:.@]*)(?:\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)'|([^\\s>]+)))?/g;\r\n\r\n let match: RegExpExecArray | null;\r\n while ((match = attrRegex.exec(source)) !== null) {\r\n const [, name, doubleQuoted, singleQuoted, bare] = match;\r\n const value = doubleQuoted ?? singleQuoted ?? bare ?? true;\r\n attrs[name] = value;\r\n }\r\n\r\n return attrs;\r\n}\r\n\r\nfunction readOpeningTag(\r\n source: string,\r\n start: number,\r\n): { tag: string; openEnd: number; attrs: Record<string, string | true> } | null {\r\n if (source[start] !== \"<\") {\r\n return null;\r\n }\r\n\r\n const tagEnd = findTagEnd(source, start + 1);\r\n if (tagEnd < 0) {\r\n return null;\r\n }\r\n\r\n const raw = source.slice(start + 1, tagEnd).trim();\r\n if (!raw || raw.startsWith(\"/\") || raw.startsWith(\"!\")) {\r\n return null;\r\n }\r\n\r\n let splitIndex = 0;\r\n while (splitIndex < raw.length && !isWhitespace(raw[splitIndex]) && raw[splitIndex] !== \"/\") {\r\n splitIndex += 1;\r\n }\r\n\r\n const tag = raw.slice(0, splitIndex);\r\n const attrsSource = raw.slice(splitIndex).replace(/\\/\\s*$/, \"\").trim();\r\n return {\r\n tag,\r\n openEnd: tagEnd + 1,\r\n attrs: parseAttributes(attrsSource),\r\n };\r\n}\r\n\r\nfunction findMatchingTag(\r\n source: string,\r\n start: number,\r\n tagName: string,\r\n): TagMatch | null {\r\n const opening = readOpeningTag(source, start);\r\n if (!opening || opening.tag.toLowerCase() !== tagName.toLowerCase()) {\r\n return null;\r\n }\r\n\r\n const selfClosing = /\\/\\s*>$/.test(source.slice(start, opening.openEnd));\r\n if (selfClosing) {\r\n return {\r\n fullStart: start,\r\n openEnd: opening.openEnd,\r\n closeStart: opening.openEnd,\r\n closeEnd: opening.openEnd,\r\n inner: \"\",\r\n attrs: opening.attrs,\r\n };\r\n }\r\n\r\n let depth = 1;\r\n let index = opening.openEnd;\r\n\r\n while (index < source.length) {\r\n const next = source.indexOf(\"<\", index);\r\n if (next < 0) {\r\n break;\r\n }\r\n\r\n if (source.startsWith(\"<!--\", next)) {\r\n const commentEnd = source.indexOf(\"-->\", next + 4);\r\n index = commentEnd >= 0 ? commentEnd + 3 : source.length;\r\n continue;\r\n }\r\n\r\n if (source[next + 1] === \"/\") {\r\n const closeEnd = findTagEnd(source, next + 2);\r\n if (closeEnd < 0) {\r\n break;\r\n }\r\n\r\n const closeTag = source.slice(next + 2, closeEnd).trim();\r\n if (closeTag.toLowerCase() === tagName.toLowerCase()) {\r\n depth -= 1;\r\n if (depth === 0) {\r\n return {\r\n fullStart: start,\r\n openEnd: opening.openEnd,\r\n closeStart: next,\r\n closeEnd: closeEnd + 1,\r\n inner: source.slice(opening.openEnd, next),\r\n attrs: opening.attrs,\r\n };\r\n }\r\n }\r\n\r\n index = closeEnd + 1;\r\n continue;\r\n }\r\n\r\n const nested = readOpeningTag(source, next);\r\n if (!nested) {\r\n index = next + 1;\r\n continue;\r\n }\r\n\r\n if (nested.tag.toLowerCase() === tagName.toLowerCase()) {\r\n const nestedSelfClosing = /\\/\\s*>$/.test(source.slice(next, nested.openEnd));\r\n if (!nestedSelfClosing) {\r\n depth += 1;\r\n }\r\n }\r\n\r\n index = nested.openEnd;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction collectTopLevelBlocks(source: string, tagName: string): TagMatch[] {\r\n const blocks: TagMatch[] = [];\r\n let index = 0;\r\n\r\n while (index < source.length) {\r\n const next = source.indexOf(`<${tagName}`, index);\r\n if (next < 0) {\r\n break;\r\n }\r\n\r\n const previous = next > 0 ? source[next - 1] : \"\";\r\n if (previous && /[A-Za-z0-9_:-]/.test(previous)) {\r\n index = next + tagName.length + 1;\r\n continue;\r\n }\r\n\r\n const block = findMatchingTag(source, next, tagName);\r\n if (!block) {\r\n index = next + tagName.length + 1;\r\n continue;\r\n }\r\n\r\n blocks.push(block);\r\n index = block.closeEnd;\r\n }\r\n\r\n return blocks;\r\n}\r\n\r\nfunction removeRanges(source: string, ranges: Array<{ start: number; end: number }>): string {\r\n if (ranges.length === 0) {\r\n return source.trim();\r\n }\r\n\r\n const ordered = [...ranges].sort((a, b) => a.start - b.start);\r\n let cursor = 0;\r\n let output = \"\";\r\n\r\n for (const range of ordered) {\r\n output += source.slice(cursor, range.start);\r\n cursor = range.end;\r\n }\r\n\r\n output += source.slice(cursor);\r\n return output.trim();\r\n}\r\n\r\nexport function parseOlovaFile(source: string): ParsedOlovaFile {\r\n const scriptBlocks = collectTopLevelBlocks(source, \"script\");\r\n const styleBlocks = collectTopLevelBlocks(source, \"style\");\r\n\r\n const ranges = styleBlocks.map((block) => ({\r\n start: block.fullStart,\r\n end: block.closeEnd,\r\n }));\r\n\r\n for (const scriptBlock of scriptBlocks) {\r\n ranges.push({ start: scriptBlock.fullStart, end: scriptBlock.closeEnd });\r\n }\r\n\r\n return {\r\n script: scriptBlocks.map((block) => block.inner.trim()).filter(Boolean).join(\"\\n\\n\"),\r\n template: removeRanges(source, ranges),\r\n styles: styleBlocks.map((block) => ({\r\n content: block.inner.trim(),\r\n attrs: block.attrs,\r\n })),\r\n };\r\n}\r\n","import {\n type ChildNode,\n type Comment,\n type DataNode,\n type Document,\n type Element,\n} from \"domhandler\";\nimport { parseDocument } from \"htmlparser2\";\n\nexport type ASTNode = ASTElement | ASTText | ASTComment;\n\nexport interface ASTElement {\n type: \"element\";\n tag: string;\n attrs: Record<string, string | true>;\n children: ASTNode[];\n isSelfClosing: boolean;\n}\n\nexport interface ASTText {\n type: \"text\";\n content: string;\n}\n\nexport interface ASTComment {\n type: \"comment\";\n content: string;\n}\n\nconst VOID_TAGS = new Set([\n \"area\",\n \"base\",\n \"br\",\n \"col\",\n \"embed\",\n \"hr\",\n \"img\",\n \"input\",\n \"link\",\n \"meta\",\n \"param\",\n \"source\",\n \"track\",\n \"wbr\",\n]);\n\nfunction normalizeNewlines(value: string): string {\n return value.replace(/\\r\\n?/g, \"\\n\");\n}\n\nfunction readBracedValue(\n source: string,\n start: number,\n): { value: string; end: number } {\n let index = start + 1;\n let depth = 1;\n let quote: \"'\" | '\"' | \"`\" | null = null;\n let value = \"{\";\n\n while (index < source.length && depth > 0) {\n const char = source[index];\n const prev = source[index - 1];\n value += char;\n\n if (quote) {\n if (char === quote && prev !== \"\\\\\") {\n quote = null;\n }\n index += 1;\n continue;\n }\n\n if (char === \"'\" || char === '\"' || char === \"`\") {\n quote = char;\n index += 1;\n continue;\n }\n\n if (char === \"{\") {\n depth += 1;\n } else if (char === \"}\") {\n depth -= 1;\n }\n\n index += 1;\n }\n\n return { value, end: index };\n}\n\nfunction protectOlovaAttrExpressions(html: string): {\n html: string;\n placeholders: Map<string, string>;\n} {\n const placeholders = new Map<string, string>();\n let output = \"\";\n let index = 0;\n let count = 0;\n\n while (index < html.length) {\n const char = html[index];\n output += char;\n\n if (char !== \"=\" || html[index + 1] !== \"{\") {\n index += 1;\n continue;\n }\n\n const braced = readBracedValue(html, index + 1);\n const key = `__OLOVA_ATTR_EXPR_${count++}__`;\n placeholders.set(key, braced.value);\n output += `\"${key}\"`;\n index = braced.end;\n continue;\n }\n\n return { html: output, placeholders };\n}\n\nfunction normalizeAttrs(attribs: Record<string, string>): Record<string, string | true> {\n const output: Record<string, string | true> = {};\n\n for (const [name, value] of Object.entries(attribs)) {\n output[name] = value === \"\" ? true : value;\n }\n\n return output;\n}\n\nfunction isSelfClosingElement(node: Element): boolean {\n return VOID_TAGS.has(node.name.toLowerCase());\n}\n\nfunction toAstNode(node: ChildNode): ASTNode | null {\n if (node.type === \"text\") {\n return {\n type: \"text\",\n content: normalizeNewlines((node as DataNode).data),\n };\n }\n\n if (node.type === \"comment\") {\n return {\n type: \"comment\",\n content: normalizeNewlines((node as Comment).data),\n };\n }\n\n if (node.type === \"tag\" || node.type === \"script\" || node.type === \"style\") {\n const element = node as Element;\n return {\n type: \"element\",\n tag: element.name,\n attrs: normalizeAttrs(element.attribs ?? {}),\n children: toAstNodes(element.children ?? []),\n isSelfClosing: isSelfClosingElement(element),\n };\n }\n\n return null;\n}\n\nfunction toAstNodes(nodes: ChildNode[]): ASTNode[] {\n const output: ASTNode[] = [];\n\n for (const node of nodes) {\n const normalized = toAstNode(node);\n if (normalized) {\n output.push(normalized);\n }\n }\n\n return output;\n}\n\nexport function parseHTML(html: string): ASTNode[] {\n const protectedHtml = protectOlovaAttrExpressions(html);\n const document = parseDocument(protectedHtml.html, {\n decodeEntities: false,\n recognizeSelfClosing: true,\n lowerCaseAttributeNames: false,\n lowerCaseTags: false,\n });\n\n const rootNodes = (document as Document).children.filter((node) => {\n if (node.type === \"directive\" || node.type === \"cdata\") {\n return false;\n }\n return true;\n }) as ChildNode[];\n\n const ast = toAstNodes(rootNodes);\n const restorePlaceholders = (nodes: ASTNode[]): void => {\n for (const node of nodes) {\n if (node.type !== \"element\") {\n continue;\n }\n\n for (const [name, value] of Object.entries(node.attrs)) {\n if (typeof value !== \"string\") {\n continue;\n }\n\n const restored = protectedHtml.placeholders.get(value);\n if (restored) {\n node.attrs[name] = restored;\n }\n }\n\n restorePlaceholders(node.children);\n }\n };\n\n restorePlaceholders(ast);\n return ast;\n}\n","import { ASTNode, parseHTML } from \"./html-parser\";\r\n\r\nexport type TransformContext = {\r\n text: number;\r\n attr: number;\r\n event: number;\r\n comp: number;\r\n slot: number;\r\n};\r\n\r\ntype BuildContext = {\r\n statements: string[];\r\n nodes: string[];\r\n localCount: number;\r\n};\r\n\r\ntype TextFragment =\r\n | { type: \"static\"; value: string }\r\n | { type: \"dynamic\"; tokenType: string; id: string };\r\n\r\nconst SVG_NAMESPACE = \"http://www.w3.org/2000/svg\";\r\n\r\nfunction splitTextFragments(text: string): TextFragment[] {\r\n const parts: TextFragment[] = [];\r\n const tokenRe = /__O_(TEXT|HTML|SLOT|COMP|IF)_([a-zA-Z0-9_]+)__/g;\r\n\r\n let lastIndex = 0;\r\n let match: RegExpExecArray | null;\r\n\r\n while ((match = tokenRe.exec(text)) !== null) {\r\n if (match.index > lastIndex) {\r\n parts.push({ type: \"static\", value: text.slice(lastIndex, match.index) });\r\n }\r\n parts.push({ type: \"dynamic\", tokenType: match[1], id: match[2] });\r\n lastIndex = match.index + match[0].length;\r\n }\r\n\r\n if (lastIndex < text.length) {\r\n parts.push({ type: \"static\", value: text.slice(lastIndex) });\r\n }\r\n\r\n return parts;\r\n}\r\n\r\nfunction isSvgContext(tag: string, inSvg: boolean): boolean {\r\n if (tag === \"foreignObject\") {\r\n return false;\r\n }\r\n\r\n return inSvg || tag === \"svg\";\r\n}\r\n\r\nfunction processNode(\r\n node: ASTNode,\r\n parentVar: string,\r\n stateNames: Set<string>,\r\n transformExpr: (\r\n expr: string,\r\n stateNames: Set<string>,\r\n ) => { code: string; containsJsx: boolean },\r\n counters: TransformContext,\r\n buildCtx: BuildContext,\r\n componentNames: Set<string>,\r\n inSvg = false,\r\n) {\r\n if (node.type === \"comment\") {\r\n return;\r\n }\r\n\r\n if (node.type === \"text\") {\r\n const parts = splitTextFragments(node.content);\r\n for (const part of parts) {\r\n if (part.type === \"static\") {\r\n if (!part.value) continue;\r\n const varName = `_t${buildCtx.localCount++}`;\r\n buildCtx.statements.push(\r\n `const ${varName} = document.createTextNode(${JSON.stringify(part.value)});`,\r\n );\r\n buildCtx.statements.push(`${parentVar}.appendChild(${varName});`);\r\n } else {\r\n const varName = `_d${buildCtx.localCount++}`;\r\n buildCtx.statements.push(\r\n `const ${varName} = document.createTextNode('');`,\r\n );\r\n buildCtx.nodes.push(`'${part.id}': ${varName}`);\r\n buildCtx.statements.push(`${parentVar}.appendChild(${varName});`);\r\n }\r\n }\r\n return;\r\n }\r\n\r\n if (node.type === \"element\") {\r\n const tag = node.tag;\r\n const varName = `_el${buildCtx.localCount++}`;\r\n const useSvgNamespace = isSvgContext(tag, inSvg);\r\n buildCtx.statements.push(\r\n useSvgNamespace\r\n ? `const ${varName} = document.createElementNS(${JSON.stringify(SVG_NAMESPACE)}, ${JSON.stringify(tag)});`\r\n : `const ${varName} = document.createElement(${JSON.stringify(tag)});`,\r\n );\r\n\r\n for (const [attr, val] of Object.entries(node.attrs)) {\r\n if (attr.startsWith(\"data-o-on-\")) {\r\n if (typeof val === \"string\") {\r\n buildCtx.nodes.push(`'${val}': ${varName}`);\r\n }\r\n } else if (typeof val === \"string\" && val.includes(\"__O_ATTR_\")) {\r\n const match = val.match(/__O_ATTR_([a-zA-Z0-9_]+)__/);\r\n if (match) {\r\n buildCtx.nodes.push(`'${match[1]}': ${varName}`);\r\n }\r\n } else {\r\n if (val === true) {\r\n buildCtx.statements.push(\r\n `${varName}.setAttribute(${JSON.stringify(attr)}, \"\");`,\r\n );\r\n } else {\r\n buildCtx.statements.push(\r\n `${varName}.setAttribute(${JSON.stringify(attr)}, ${JSON.stringify(val)});`,\r\n );\r\n }\r\n }\r\n }\r\n\r\n for (const child of node.children) {\r\n processNode(\r\n child,\r\n varName,\r\n stateNames,\r\n transformExpr,\r\n counters,\r\n buildCtx,\r\n componentNames,\r\n useSvgNamespace,\r\n );\r\n }\r\n\r\n buildCtx.statements.push(`${parentVar}.appendChild(${varName});`);\r\n }\r\n}\r\n\r\nexport function generateBuildFunction(\r\n html: string,\r\n stateNames: Set<string>,\r\n transformExpr: (\r\n expr: string,\r\n stateNames: Set<string>,\r\n ) => { code: string; containsJsx: boolean },\r\n counters: TransformContext,\r\n componentNames: Set<string>,\r\n): string {\r\n const ast = parseHTML(html);\r\n\r\n const buildCtx: BuildContext = {\r\n statements: [],\r\n nodes: [],\r\n localCount: 0,\r\n };\r\n\r\n buildCtx.statements.push(\"const _f = document.createDocumentFragment();\");\r\n\r\n for (const child of ast) {\r\n processNode(\r\n child,\r\n \"_f\",\r\n stateNames,\r\n transformExpr,\r\n counters,\r\n buildCtx,\r\n componentNames,\r\n );\r\n }\r\n\r\n return `function() {\r\n ${buildCtx.statements.join(\"\\n \")}\r\n return { fragment: _f, nodes: { ${buildCtx.nodes.join(\", \")} } };\r\n }`;\r\n}\r\n","import { parse } from \"@babel/parser\";\r\nimport generatorModule from \"@babel/generator\";\r\nimport traverseModule from \"@babel/traverse\";\r\nimport type { NodePath } from \"@babel/traverse\";\r\nimport * as t from \"@babel/types\";\r\nimport ts from \"typescript\";\r\nimport { collectCss, createScopeAttr, hashScopeSeed } from \"./css-scope\";\r\nimport {\n type CompilePhase,\n createCompileError,\n normalizeCompileError,\n} from \"./diagnostics\";\nimport {\r\n parseOlovaFile,\r\n type ParsedOlovaFile,\r\n} from \"./parse\";\r\nimport { parseHTML, type ASTElement, type ASTNode } from \"./html-parser\";\r\nimport { generateBuildFunction } from \"./dom-generator\";\r\n\r\nconst generate =\r\n (generatorModule as unknown as { default?: typeof generatorModule })\r\n .default ?? generatorModule;\r\nconst traverse =\r\n (traverseModule as unknown as { default?: typeof traverseModule }).default ??\r\n traverseModule;\r\n\r\nconst CORE_KNOWN_IMPORTS = new Set([\r\n \"Signal\",\r\n \"computed\",\r\n \"createApp\",\r\n \"createErrorBoundary\",\r\n \"dangerouslySetHtml\",\r\n \"defineComponent\",\r\n \"derived\",\r\n \"effect\",\r\n \"getContext\",\r\n \"global\",\r\n \"hasContext\",\r\n \"mount\",\r\n \"onCleanup\",\r\n \"onMount\",\r\n \"replaceComponent\",\r\n \"setContext\",\r\n \"state\",\r\n \"Suspense\",\r\n]);\r\n\r\ntype CompileResult = {\r\n code: string;\r\n css?: string;\r\n map?: unknown;\r\n};\r\n\r\ntype TextBinding = { id: string; expr: string };\r\ntype HtmlBinding = { id: string; expr: string };\r\ntype AttrBinding = { id: string; attr: string; expr: string };\r\ntype EventBinding = { id: string; event: string; expr: string };\r\ntype SlotBinding = { id: string; name: string };\r\ntype SlotFactoryDef = {\r\n varName: string;\r\n name: string;\r\n descriptor: TemplateTransformResult;\r\n};\r\ntype ComponentBinding = {\r\n id: string;\r\n component: string;\r\n propsExpr: string;\r\n slotFactories: SlotFactoryDef[];\r\n};\r\ntype IfBinding = {\r\n id: string;\r\n expr: string;\r\n trueBranch: TemplateTransformResult;\r\n falseBranch?: TemplateTransformResult;\r\n};\r\n\r\ntype TemplateTransformResult = {\r\n html: string;\r\n textBindings: TextBinding[];\r\n htmlBindings: HtmlBinding[];\r\n attrBindings: AttrBinding[];\r\n eventBindings: EventBinding[];\r\n slotBindings: SlotBinding[];\r\n componentBindings: ComponentBinding[];\r\n ifBindings: IfBinding[];\r\n buildFnStr?: string;\r\n};\r\n\r\ntype TransformContext = {\r\n text: number;\r\n attr: number;\r\n event: number;\r\n comp: number;\r\n slot: number;\r\n if: number;\r\n};\r\n\r\nfunction escapeTemplate(source: string): string {\r\n return source.replace(/\\\\/g, \"\\\\\\\\\").replace(/`/g, \"\\\\`\");\r\n}\r\n\r\nfunction emitDevWarnings(warnings: Set<string>): void {\r\n for (const warning of warnings) {\r\n console.warn(warning);\r\n }\r\n}\r\n\r\nfunction parseModule(code: string): t.File {\n return parse(code, {\n sourceType: \"module\",\r\n plugins: [\"typescript\", \"jsx\"],\r\n });\n}\n\nfunction runCompilePhase<T>(\n phase: CompilePhase,\n fn: () => T,\n): T {\n try {\n return fn();\n } catch (error) {\n const compileError =\n (error instanceof Error ? error : new Error(String(error))) as Error & {\n phase?: CompilePhase;\n };\n if (!compileError.phase) {\n compileError.phase = phase;\n }\n throw compileError;\n }\n}\n\r\nfunction transpileTypeScript(code: string, filename = \"component.ts\"): CompileResult {\r\n const result = ts.transpileModule(code, {\r\n fileName: filename,\r\n compilerOptions: {\r\n target: ts.ScriptTarget.ES2022,\r\n module: ts.ModuleKind.ESNext,\r\n jsx: ts.JsxEmit.Preserve,\r\n importsNotUsedAsValues: ts.ImportsNotUsedAsValues.Remove,\r\n verbatimModuleSyntax: false,\r\n sourceMap: true,\r\n inlineSources: true,\r\n },\r\n });\r\n\r\n return {\r\n code: result.outputText.trim(),\r\n map: result.sourceMapText ? JSON.parse(result.sourceMapText) : null,\r\n };\r\n}\r\n\r\nfunction compileModuleScript(script: string, filename = \"module.olova.ts\"): CompileResult {\n return runCompilePhase(\"analyze-script\", () => {\n const scriptInfo = collectScriptInfo(script);\n return runCompilePhase(\"transpile\", () =>\n transpileTypeScript(\n [scriptInfo.importsCode, scriptInfo.scriptBodyCode].filter(Boolean).join(\"\\n\"),\n filename,\n ),\n );\n });\n}\n\r\nfunction isModuleOnlyScript(script: string): boolean {\r\n if (!script.trim()) {\r\n return false;\r\n }\r\n\r\n return true;\r\n}\r\n\r\nfunction isStateInit(node: t.Node | null | undefined): boolean {\r\n return !!(\r\n node &&\r\n t.isCallExpression(node) &&\r\n ((t.isIdentifier(node.callee) && node.callee.name === \"state\") ||\r\n (t.isMemberExpression(node.callee) &&\r\n t.isIdentifier(node.callee.object) &&\r\n node.callee.object.name === \"__olovaGlobal\" &&\r\n t.isIdentifier(node.callee.property) &&\r\n (node.callee.property.name === \"state\" ||\r\n node.callee.property.name === \"get\")))\r\n );\r\n}\r\n\r\nfunction isComputedInit(node: t.Node | null | undefined): boolean {\r\n return !!(\r\n node &&\r\n t.isCallExpression(node) &&\r\n t.isIdentifier(node.callee) &&\r\n (node.callee.name === \"computed\" || node.callee.name === \"derived\")\r\n );\r\n}\r\n\r\nfunction appendHmrStateKey(\r\n node: t.Node | null | undefined,\r\n key: string,\r\n): void {\r\n if (!node) {\r\n return;\r\n }\r\n\r\n if (t.isCallExpression(node) && t.isIdentifier(node.callee) && node.callee.name === \"state\") {\r\n const existingKey = node.arguments[1];\r\n if (!existingKey || !t.isStringLiteral(existingKey)) {\r\n node.arguments = [node.arguments[0] ?? t.identifier(\"undefined\"), t.stringLiteral(key)];\r\n }\r\n return;\r\n }\r\n\r\n if (t.isConditionalExpression(node)) {\r\n appendHmrStateKey(node.consequent, `${key}:then`);\r\n appendHmrStateKey(node.alternate, `${key}:else`);\r\n return;\r\n }\r\n\r\n if (t.isLogicalExpression(node)) {\r\n appendHmrStateKey(node.left, `${key}:left`);\r\n appendHmrStateKey(node.right, `${key}:right`);\r\n }\r\n}\r\n\r\nfunction containsStateInit(node: t.Node | null | undefined): boolean {\r\n if (!node) {\r\n return false;\r\n }\r\n\r\n if (isStateInit(node)) {\r\n return true;\r\n }\r\n\r\n if (t.isConditionalExpression(node)) {\r\n return (\r\n containsStateInit(node.consequent) || containsStateInit(node.alternate)\r\n );\r\n }\r\n\r\n if (t.isLogicalExpression(node)) {\r\n return containsStateInit(node.left) || containsStateInit(node.right);\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction containsSignalInit(node: t.Node | null | undefined): boolean {\r\n if (!node) {\r\n return false;\r\n }\r\n\r\n if (isStateInit(node) || isComputedInit(node)) {\r\n return true;\r\n }\r\n\r\n if (t.isConditionalExpression(node)) {\r\n return (\r\n containsSignalInit(node.consequent) || containsSignalInit(node.alternate)\r\n );\r\n }\r\n\r\n if (t.isLogicalExpression(node)) {\r\n return containsSignalInit(node.left) || containsSignalInit(node.right);\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction isGlobalStateCall(node: t.CallExpression): boolean {\r\n return (\r\n t.isMemberExpression(node.callee) &&\r\n t.isIdentifier(node.callee.object) &&\r\n (node.callee.object.name === \"global\" ||\r\n node.callee.object.name === \"__olovaGlobal\") &&\r\n t.isIdentifier(node.callee.property) &&\r\n node.callee.property.name === \"state\"\r\n );\r\n}\r\n\r\nfunction shouldSkipIdentifierTransform(path: NodePath<t.Identifier>): boolean {\r\n if (\r\n path.parentPath?.isVariableDeclarator() &&\r\n path.parentPath.node.id === path.node\r\n ) {\r\n return true;\r\n }\r\n\r\n if (\r\n path.parentPath?.isAssignmentExpression() &&\r\n path.parentPath.node.left === path.node\r\n ) {\r\n return true;\r\n }\r\n\r\n if (path.parentPath?.isUpdateExpression()) {\r\n return true;\r\n }\r\n\r\n if (\r\n path.parentPath?.isCallExpression() &&\r\n t.isIdentifier(path.parentPath.node.callee) &&\r\n path.parentPath.node.callee.name === \"setContext\" &&\r\n path.parentPath.node.arguments.includes(path.node as t.Expression)\r\n ) {\r\n return true;\r\n }\r\n\r\n if (\r\n path.parentPath?.isMemberExpression() &&\r\n path.parentPath.node.property === path.node &&\r\n !path.parentPath.node.computed\r\n ) {\r\n return true;\r\n }\r\n\r\n if (\r\n path.parentPath?.isMemberExpression() &&\r\n path.parentPath.node.object === path.node &&\r\n t.isIdentifier(path.parentPath.node.property) &&\r\n (path.parentPath.node.property.name === \"value\" ||\r\n path.parentPath.node.property.name === \"notify\")\r\n ) {\r\n return true;\r\n }\r\n\r\n if (\r\n path.parentPath?.isImportSpecifier() ||\r\n path.parentPath?.isExportSpecifier()\r\n ) {\r\n return true;\r\n }\r\n\r\n if (\r\n path.parentPath?.isObjectProperty() &&\r\n path.parentPath.node.key === path.node &&\r\n !path.parentPath.node.computed &&\r\n !(path.parentPath.node as t.ObjectProperty).shorthand\r\n ) {\r\n return true;\r\n }\r\n\r\n if (\r\n path.parentPath?.isFunctionDeclaration() &&\r\n path.parentPath.node.id === path.node\r\n ) {\r\n return true;\r\n }\r\n\r\n if (\r\n path.parentPath?.isClassDeclaration() &&\r\n path.parentPath.node.id === path.node\r\n ) {\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction addNestedMutationNotify(ast: t.File, stateNames: Set<string>): void {\r\n traverse(ast, {\r\n AssignmentExpression(path: NodePath<t.AssignmentExpression>) {\r\n const left = path.node.left;\r\n if (!t.isMemberExpression(left)) {\r\n return;\r\n }\r\n\r\n let root: t.MemberExpression = left;\r\n while (t.isMemberExpression(root.object)) {\r\n root = root.object as t.MemberExpression;\r\n }\r\n\r\n if (!t.isIdentifier(root.object)) {\r\n return;\r\n }\r\n\r\n if (!t.isIdentifier(root.property) || root.property.name !== \"value\") {\r\n return;\r\n }\r\n\r\n const stateName = root.object.name;\r\n if (!stateNames.has(stateName)) {\r\n return;\r\n }\r\n\r\n if (left === root) {\r\n return;\r\n }\r\n\r\n if (path.parentPath?.isSequenceExpression()) {\r\n return;\r\n }\r\n\r\n path.replaceWith(\r\n t.sequenceExpression([\r\n path.node,\r\n t.callExpression(\r\n t.memberExpression(t.identifier(stateName), t.identifier(\"notify\")),\r\n [],\r\n ),\r\n ]),\r\n );\r\n path.skip();\r\n },\r\n });\r\n}\r\n\r\nfunction collectScriptInfo(script: string): {\r\n importsCode: string;\r\n scriptBodyCode: string;\r\n stateNames: Set<string>;\r\n allSignalNames: Set<string>;\r\n componentNames: Set<string>;\r\n jsxFunctionNames: Set<string>;\r\n} {\r\n const ast = parseModule(script || \"\");\r\n const stateNames = new Set<string>();\r\n const allSignalNames = new Set<string>();\r\n const componentNames = new Set<string>();\r\n const jsxFunctionNames = new Set<string>();\r\n let needsGlobalRuntime = false;\r\n\r\n for (const node of ast.program.body) {\r\n if (!t.isImportDeclaration(node)) {\r\n continue;\r\n }\r\n\r\n for (const specifier of node.specifiers) {\r\n componentNames.add(specifier.local.name);\r\n }\r\n }\r\n\r\n const rewrittenBody: t.Statement[] = [];\r\n for (const node of ast.program.body) {\r\n if (\r\n t.isImportDeclaration(node) &&\r\n t.isStringLiteral(node.source) &&\r\n (node.source.value === \"olova/global\" || node.source.value === \"olova/core\")\r\n ) {\r\n if (node.source.value === \"olova/global\") {\r\n needsGlobalRuntime = true;\r\n const declarators: t.VariableDeclarator[] = [];\r\n\r\n for (const specifier of node.specifiers) {\r\n if (!t.isImportSpecifier(specifier)) {\r\n throw new Error(\r\n \"[olova] Use named imports with 'olova/global' (e.g. import { user } from 'olova/global').\",\r\n );\r\n }\r\n\r\n const imported = t.isIdentifier(specifier.imported)\r\n ? specifier.imported.name\r\n : specifier.imported.value;\r\n\r\n declarators.push(\r\n t.variableDeclarator(\r\n t.identifier(specifier.local.name),\r\n t.callExpression(\r\n t.memberExpression(\r\n t.identifier(\"__olovaGlobal\"),\r\n t.identifier(\"get\"),\r\n ),\r\n [t.stringLiteral(imported)],\r\n ),\r\n ),\r\n );\r\n }\r\n\r\n if (declarators.length > 0) {\r\n rewrittenBody.push(t.variableDeclaration(\"const\", declarators));\r\n }\r\n continue;\r\n }\r\n\r\n const keptSpecifiers: t.ImportDeclaration[\"specifiers\"] = [];\r\n const globalDeclarators: t.VariableDeclarator[] = [];\r\n\r\n for (const specifier of node.specifiers) {\r\n if (!t.isImportSpecifier(specifier)) {\r\n keptSpecifiers.push(specifier);\r\n continue;\r\n }\r\n\r\n const imported = t.isIdentifier(specifier.imported)\r\n ? specifier.imported.name\r\n : specifier.imported.value;\r\n\r\n if (CORE_KNOWN_IMPORTS.has(imported)) {\r\n keptSpecifiers.push(specifier);\r\n continue;\r\n }\r\n\r\n needsGlobalRuntime = true;\r\n globalDeclarators.push(\r\n t.variableDeclarator(\r\n t.identifier(specifier.local.name),\r\n t.callExpression(\r\n t.memberExpression(\r\n t.identifier(\"__olovaGlobal\"),\r\n t.identifier(\"get\"),\r\n ),\r\n [t.stringLiteral(imported)],\r\n ),\r\n ),\r\n );\r\n }\r\n\r\n if (keptSpecifiers.length > 0) {\r\n rewrittenBody.push(\r\n t.importDeclaration(keptSpecifiers, t.stringLiteral(\"olova/core\")),\r\n );\r\n }\r\n\r\n if (globalDeclarators.length > 0) {\r\n rewrittenBody.push(t.variableDeclaration(\"const\", globalDeclarators));\r\n }\r\n\r\n continue;\r\n }\r\n\r\n rewrittenBody.push(node);\r\n }\r\n ast.program.body = rewrittenBody;\r\n\r\n traverse(ast, {\r\n CallExpression(path: NodePath<t.CallExpression>) {\r\n if (!isGlobalStateCall(path.node)) {\r\n return;\r\n }\r\n\r\n needsGlobalRuntime = true;\r\n path.node.callee = t.memberExpression(\r\n t.identifier(\"__olovaGlobal\"),\r\n t.identifier(\"state\"),\r\n );\r\n\r\n if (\r\n path.parentPath &&\r\n path.parentPath.isVariableDeclarator() &&\r\n t.isIdentifier(path.parentPath.node.id)\r\n ) {\r\n const firstArg = path.node.arguments[0];\r\n const alreadyNamed =\r\n !!firstArg &&\r\n t.isStringLiteral(firstArg as t.Expression) &&\r\n (firstArg as t.StringLiteral).value.length > 0;\r\n\r\n if (!alreadyNamed) {\r\n path.node.arguments = [\r\n t.stringLiteral(path.parentPath.node.id.name),\r\n ...path.node.arguments,\r\n ];\r\n }\r\n }\r\n },\r\n });\r\n\r\n traverse(ast, {\r\n VariableDeclarator(path: NodePath<t.VariableDeclarator>) {\r\n if (!t.isIdentifier(path.node.id)) {\r\n return;\r\n }\r\n\r\n if (containsStateInit(path.node.init)) {\r\n stateNames.add(path.node.id.name);\r\n appendHmrStateKey(path.node.init, path.node.id.name);\r\n }\r\n\r\n if (containsSignalInit(path.node.init)) {\r\n allSignalNames.add(path.node.id.name);\r\n }\r\n },\r\n });\r\n\r\n traverse(ast, {\r\n AssignmentExpression(path: NodePath<t.AssignmentExpression>) {\r\n if (!t.isIdentifier(path.node.left)) {\r\n return;\r\n }\r\n\r\n const name = path.node.left.name;\r\n if (!stateNames.has(name)) {\r\n return;\r\n }\r\n\r\n const binding = path.scope.getBinding(name);\r\n if (!binding || !t.isVariableDeclarator(binding.path.node)) {\r\n return;\r\n }\r\n\r\n if (\r\n !t.isIdentifier(binding.path.node.id) ||\r\n !containsStateInit(binding.path.node.init)\r\n ) {\r\n return;\r\n }\r\n\r\n path.node.left = t.memberExpression(\r\n t.identifier(name),\r\n t.identifier(\"value\"),\r\n );\r\n },\r\n UpdateExpression(path: NodePath<t.UpdateExpression>) {\r\n if (!t.isIdentifier(path.node.argument)) {\r\n return;\r\n }\r\n\r\n const name = path.node.argument.name;\r\n if (!stateNames.has(name)) {\r\n return;\r\n }\r\n\r\n const binding = path.scope.getBinding(name);\r\n if (!binding || !t.isVariableDeclarator(binding.path.node)) {\r\n return;\r\n }\r\n\r\n if (\r\n !t.isIdentifier(binding.path.node.id) ||\r\n !containsStateInit(binding.path.node.init)\r\n ) {\r\n return;\r\n }\r\n\r\n path.node.argument = t.memberExpression(\r\n t.identifier(name),\r\n t.identifier(\"value\"),\r\n );\r\n },\r\n });\r\n\r\n traverse(ast, {\r\n Identifier(path: NodePath<t.Identifier>) {\r\n const name = path.node.name;\r\n if (!allSignalNames.has(name)) {\r\n return;\r\n }\r\n\r\n if (shouldSkipIdentifierTransform(path)) {\r\n return;\r\n }\r\n\r\n const binding = path.scope.getBinding(name);\r\n if (!binding || !t.isVariableDeclarator(binding.path.node)) {\r\n return;\r\n }\r\n\r\n if (\r\n !t.isIdentifier(binding.path.node.id) ||\r\n !containsSignalInit(binding.path.node.init)\r\n ) {\r\n return;\r\n }\r\n\r\n path.replaceWith(\r\n t.memberExpression(t.identifier(name), t.identifier(\"value\")),\r\n );\r\n path.skip();\r\n },\r\n });\r\n\r\n addNestedMutationNotify(ast, stateNames);\r\n\r\n const nodeContainsJsx = (node: t.Node | null | undefined): boolean => {\r\n if (!node) {\r\n return false;\r\n }\r\n\r\n let found = false;\r\n traverse(parseModule(`(${generate(node).code})`), {\r\n JSXElement() {\r\n found = true;\r\n },\r\n JSXFragment() {\r\n found = true;\r\n },\r\n });\r\n return found;\r\n };\r\n\r\n traverse(ast, {\r\n FunctionDeclaration(path: NodePath<t.FunctionDeclaration>) {\r\n if (path.node.id && nodeContainsJsx(path.node.body)) {\r\n jsxFunctionNames.add(path.node.id.name);\r\n }\r\n },\r\n VariableDeclarator(path: NodePath<t.VariableDeclarator>) {\r\n if (\r\n t.isIdentifier(path.node.id) &&\r\n nodeContainsJsx(path.node.init)\r\n ) {\r\n jsxFunctionNames.add(path.node.id.name);\r\n }\r\n },\r\n });\r\n\r\n traverse(ast, {\r\n JSXElement(path: NodePath<t.JSXElement>) {\r\n const transformed = transformExpression(\r\n generate(path.node).code,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n );\r\n const parsed = parseModule(`(${transformed.code})`);\r\n const statement = parsed.program.body[0];\r\n if (statement && t.isExpressionStatement(statement)) {\r\n path.replaceWith(statement.expression);\r\n path.skip();\r\n }\r\n },\r\n JSXFragment(path: NodePath<t.JSXFragment>) {\r\n const transformed = transformExpression(\r\n generate(path.node).code,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n );\r\n const parsed = parseModule(`(${transformed.code})`);\r\n const statement = parsed.program.body[0];\r\n if (statement && t.isExpressionStatement(statement)) {\r\n path.replaceWith(statement.expression);\r\n path.skip();\r\n }\r\n },\r\n });\r\n\r\n if (needsGlobalRuntime) {\r\n ast.program.body.unshift(\r\n t.importDeclaration(\r\n [\r\n t.importSpecifier(\r\n t.identifier(\"__olovaGlobal\"),\r\n t.identifier(\"global\"),\r\n ),\r\n ],\r\n t.stringLiteral(\"olova/global\"),\r\n ),\r\n );\r\n }\r\n\r\n const importNodes = ast.program.body.filter(\r\n (node): node is t.ImportDeclaration => t.isImportDeclaration(node),\r\n );\r\n const bodyNodes = ast.program.body.filter(\r\n (node) => !t.isImportDeclaration(node),\r\n );\r\n\r\n const importsCode = importNodes.map((node) => generate(node).code).join(\"\\n\");\r\n const scriptBodyCode = bodyNodes\r\n .map((node) => generate(node).code)\r\n .join(\"\\n\");\r\n\r\n return {\r\n importsCode,\r\n scriptBodyCode,\r\n stateNames,\r\n allSignalNames,\r\n componentNames,\r\n jsxFunctionNames,\r\n };\r\n}\r\n\r\ntype TransformedExpression = {\r\n code: string;\r\n containsJsx: boolean;\r\n};\r\n\r\nfunction transformExpression(\n expr: string,\n stateNames: Set<string>,\n allSignalNames: Set<string>,\n jsxFunctionNames: Set<string> = new Set<string>(),\r\n scopeId?: string,\r\n): TransformedExpression {\r\n const ast = parseModule(`(${expr})`);\r\n let containsJsx = false;\r\n const jsxScopeAttr = createScopeAttr(scopeId);\r\n\r\n traverse(ast, {\r\n AssignmentExpression(path: NodePath<t.AssignmentExpression>) {\r\n if (!t.isIdentifier(path.node.left)) {\r\n return;\r\n }\r\n\r\n const name = path.node.left.name;\r\n if (!stateNames.has(name)) {\r\n return;\r\n }\r\n\r\n const binding = path.scope.getBinding(name);\r\n if (binding) {\r\n return;\r\n }\r\n\r\n path.node.left = t.memberExpression(\r\n t.identifier(name),\r\n t.identifier(\"value\"),\r\n );\r\n },\r\n UpdateExpression(path: NodePath<t.UpdateExpression>) {\r\n if (!t.isIdentifier(path.node.argument)) {\r\n return;\r\n }\r\n\r\n const name = path.node.argument.name;\r\n if (!stateNames.has(name)) {\r\n return;\r\n }\r\n\r\n const binding = path.scope.getBinding(name);\r\n if (binding) {\r\n return;\r\n }\r\n\r\n path.node.argument = t.memberExpression(\r\n t.identifier(name),\r\n t.identifier(\"value\"),\r\n );\r\n },\r\n });\r\n\r\n traverse(ast, {\r\n Identifier(path: NodePath<t.Identifier>) {\r\n const name = path.node.name;\r\n if (!allSignalNames.has(name)) {\r\n return;\r\n }\r\n\r\n if (shouldSkipIdentifierTransform(path)) {\r\n return;\r\n }\r\n\r\n const binding = path.scope.getBinding(name);\r\n if (binding) {\r\n return;\r\n }\r\n\r\n path.replaceWith(\r\n t.memberExpression(t.identifier(name), t.identifier(\"value\")),\r\n );\r\n path.skip();\r\n },\r\n });\r\n\r\n addNestedMutationNotify(ast, stateNames);\r\n\r\n const toStringCall = (input: t.Expression): t.CallExpression =>\r\n t.callExpression(t.identifier(\"__olovaToString\"), [input]);\r\n const escapeCall = (input: t.Expression): t.CallExpression =>\r\n t.callExpression(t.identifier(\"__olovaEscape\"), [input]);\r\n\r\n const expressionContainsJsx = (input: t.Node): boolean => {\r\n let found = false;\r\n traverse(parseModule(`(${generate(input).code})`), {\r\n JSXElement() {\r\n found = true;\r\n },\r\n JSXFragment() {\r\n found = true;\r\n },\r\n });\r\n return found;\r\n };\r\n\r\n const expressionProducesHtml = (input: t.Node | null | undefined): boolean => {\r\n if (!input) {\r\n return false;\r\n }\r\n\r\n if (expressionContainsJsx(input)) {\r\n return true;\r\n }\r\n\r\n let found = false;\r\n traverse(parseModule(`(${generate(input).code})`), {\r\n CallExpression(path) {\r\n if (\r\n t.isIdentifier(path.node.callee) &&\r\n jsxFunctionNames.has(path.node.callee.name)\r\n ) {\r\n found = true;\r\n path.stop();\r\n return;\r\n }\r\n\r\n if (\r\n t.isMemberExpression(path.node.callee) &&\r\n t.isIdentifier(path.node.callee.property) &&\r\n (path.node.callee.property.name === \"map\" ||\r\n path.node.callee.property.name === \"flatMap\")\r\n ) {\r\n const [firstArg] = path.node.arguments;\r\n if (\r\n (t.isIdentifier(firstArg) && jsxFunctionNames.has(firstArg.name)) ||\r\n nodeContainsRenderableFunction(firstArg, jsxFunctionNames)\r\n ) {\r\n found = true;\r\n path.stop();\r\n }\r\n }\r\n },\r\n });\r\n\r\n return found;\r\n };\r\n\r\n const nodeContainsRenderableFunction = (\r\n node: t.Node | null | undefined,\r\n knownJsxFunctions: Set<string>,\r\n ): boolean => {\r\n if (!node) {\r\n return false;\r\n }\r\n\r\n if (t.isArrowFunctionExpression(node) || t.isFunctionExpression(node)) {\r\n return (\r\n expressionContainsJsx(node.body) || expressionProducesHtml(node.body)\r\n );\r\n }\r\n\r\n if (t.isIdentifier(node)) {\r\n return knownJsxFunctions.has(node.name);\r\n }\r\n\r\n return false;\r\n };\r\n\r\n const concatExpressions = (parts: t.Expression[]): t.Expression => {\r\n if (parts.length === 0) {\r\n return t.stringLiteral(\"\");\r\n }\r\n\r\n return parts\r\n .slice(1)\r\n .reduce<t.Expression>(\r\n (acc, current) => t.binaryExpression(\"+\", acc, current),\r\n parts[0],\r\n );\r\n };\r\n\r\n const jsxNameToString = (\r\n name: t.JSXIdentifier | t.JSXMemberExpression | t.JSXNamespacedName,\r\n ): string => {\r\n if (t.isJSXIdentifier(name)) {\r\n return name.name;\r\n }\r\n\r\n if (t.isJSXNamespacedName(name)) {\r\n return `${name.namespace.name}:${name.name.name}`;\r\n }\r\n\r\n const walkMember = (\r\n node: t.JSXIdentifier | t.JSXMemberExpression,\r\n ): string => {\r\n if (t.isJSXIdentifier(node)) {\r\n return node.name;\r\n }\r\n\r\n return `${walkMember(node.object)}.${node.property.name}`;\r\n };\r\n\r\n return walkMember(name);\r\n };\r\n\r\n const transformEmbeddedJsxExpression = (\r\n input: t.Expression,\r\n ): { expression: t.Expression; containsJsx: boolean } => {\r\n const wrapped = parseModule(`(${generate(input).code})`);\r\n let containsNestedJsx = false;\r\n\r\n traverse(wrapped, {\r\n JSXElement(path) {\r\n containsNestedJsx = true;\r\n path.replaceWith(jsxElementToExpression(path.node));\r\n path.skip();\r\n },\r\n JSXFragment(path) {\r\n containsNestedJsx = true;\r\n path.replaceWith(jsxFragmentToExpression(path.node));\r\n path.skip();\r\n },\r\n });\r\n\r\n const statement = wrapped.program.body[0];\r\n if (!statement || !t.isExpressionStatement(statement)) {\r\n return { expression: input, containsJsx: containsNestedJsx };\r\n }\r\n\r\n return {\r\n expression: statement.expression,\r\n containsJsx: containsNestedJsx,\r\n };\r\n };\r\n\r\n const jsxAttrToExpression = (\r\n attr: t.JSXAttribute | t.JSXSpreadAttribute,\r\n ): t.Expression => {\r\n if (t.isJSXSpreadAttribute(attr)) {\r\n const transformed = transformEmbeddedJsxExpression(\r\n attr.argument as t.Expression,\r\n );\r\n return t.callExpression(t.identifier(\"__olovaSpreadAttrs\"), [\r\n transformed.expression,\r\n ]);\r\n }\r\n\r\n const name = jsxNameToString(attr.name);\r\n if (name === \"key\") {\r\n return t.stringLiteral(\"\");\r\n }\r\n\r\n const normalizedName = name === \"className\" ? \"class\" : name;\r\n const eventMatch = name.match(/^(?:on:|on)([A-Za-z]+)$/);\r\n if (!attr.value) {\r\n return t.stringLiteral(` ${normalizedName}`);\r\n }\r\n\r\n if (t.isStringLiteral(attr.value)) {\r\n return t.stringLiteral(` ${normalizedName}=\"${attr.value.value}\"`);\r\n }\r\n\r\n if (t.isJSXExpressionContainer(attr.value)) {\r\n const transformed = transformEmbeddedJsxExpression(\r\n (attr.value.expression as t.Expression) ?? t.stringLiteral(\"\"),\r\n );\r\n\r\n if (eventMatch) {\r\n return t.callExpression(t.identifier(\"__olovaRegisterJsxEvent\"), [\r\n t.stringLiteral(eventMatch[1].toLowerCase()),\r\n transformed.expression,\r\n ]);\r\n }\r\n\r\n const valueExpression =\r\n normalizedName === \"class\"\r\n ? t.callExpression(t.identifier(\"__olovaNormalizeClassValue\"), [\r\n transformed.expression,\r\n ])\r\n : transformed.expression;\r\n\r\n return concatExpressions([\r\n t.stringLiteral(` ${normalizedName}=\"`),\r\n escapeCall(valueExpression),\r\n t.stringLiteral('\"'),\r\n ]);\r\n }\r\n\r\n return t.stringLiteral(\"\");\r\n };\r\n\r\n const jsxChildToExpression = (\r\n child:\r\n | t.JSXText\r\n | t.JSXExpressionContainer\r\n | t.JSXElement\r\n | t.JSXFragment\r\n | t.JSXSpreadChild,\r\n ): t.Expression => {\r\n if (t.isJSXText(child)) {\r\n return t.stringLiteral(child.value);\r\n }\r\n\r\n if (t.isJSXExpressionContainer(child)) {\r\n if (t.isJSXEmptyExpression(child.expression)) {\r\n return t.stringLiteral(\"\");\r\n }\r\n\r\n const rawExpression = child.expression as t.Expression;\r\n const transformed = transformEmbeddedJsxExpression(rawExpression);\r\n return transformed.containsJsx || expressionProducesHtml(rawExpression)\r\n ? toStringCall(transformed.expression)\r\n : escapeCall(transformed.expression);\r\n }\r\n\r\n if (t.isJSXSpreadChild(child)) {\r\n const transformed = transformEmbeddedJsxExpression(child.expression);\r\n return transformed.containsJsx || expressionProducesHtml(child.expression)\r\n ? toStringCall(transformed.expression)\r\n : escapeCall(transformed.expression);\r\n }\r\n\r\n if (t.isJSXElement(child)) {\r\n return jsxElementToExpression(child);\r\n }\r\n\r\n return jsxFragmentToExpression(child);\r\n };\r\n\r\n const jsxFragmentToExpression = (fragment: t.JSXFragment): t.Expression => {\r\n const parts = fragment.children.map((child) => jsxChildToExpression(child));\r\n return concatExpressions(parts);\r\n };\r\n\r\n const jsxElementToExpression = (element: t.JSXElement): t.Expression => {\r\n const opening = element.openingElement;\r\n const tag = jsxNameToString(opening.name);\r\n\r\n if (tag === \"For\") {\r\n let eachExpr: t.Expression = t.arrayExpression([]);\r\n for (const attr of opening.attributes) {\r\n if (\r\n t.isJSXAttribute(attr) &&\r\n jsxNameToString(attr.name) === \"each\" &&\r\n attr.value &&\r\n t.isJSXExpressionContainer(attr.value) &&\r\n !t.isJSXEmptyExpression(attr.value.expression)\r\n ) {\r\n eachExpr = transformEmbeddedJsxExpression(\r\n attr.value.expression as t.Expression,\r\n ).expression;\r\n }\r\n }\r\n\r\n const childRenderer = element.children.find(\r\n (child): child is t.JSXExpressionContainer =>\r\n t.isJSXExpressionContainer(child) &&\r\n !t.isJSXEmptyExpression(child.expression),\r\n );\r\n if (!childRenderer) {\r\n return t.stringLiteral(\"\");\r\n }\r\n\r\n return t.callExpression(t.identifier(\"__olovaFor\"), [\r\n eachExpr,\r\n transformEmbeddedJsxExpression(\r\n childRenderer.expression as t.Expression,\r\n ).expression,\r\n ]);\r\n }\r\n\r\n if (tag === \"Show\") {\r\n let whenExpr: t.Expression = t.booleanLiteral(false);\r\n let fallbackExpr: t.Expression = t.stringLiteral(\"\");\r\n for (const attr of opening.attributes) {\r\n if (!t.isJSXAttribute(attr)) {\r\n continue;\r\n }\r\n\r\n const attrName = jsxNameToString(attr.name);\r\n if (\r\n attrName === \"when\" &&\r\n attr.value &&\r\n t.isJSXExpressionContainer(attr.value) &&\r\n !t.isJSXEmptyExpression(attr.value.expression)\r\n ) {\r\n whenExpr = transformEmbeddedJsxExpression(\r\n attr.value.expression as t.Expression,\r\n ).expression;\r\n }\r\n\r\n if (\r\n attrName === \"fallback\" &&\r\n attr.value &&\r\n t.isJSXExpressionContainer(attr.value) &&\r\n !t.isJSXEmptyExpression(attr.value.expression)\r\n ) {\r\n fallbackExpr = transformEmbeddedJsxExpression(\r\n attr.value.expression as t.Expression,\r\n ).expression;\r\n }\r\n }\r\n\r\n const childExpr = concatExpressions(\r\n element.children\r\n .map((child) => jsxChildToExpression(child))\r\n .filter(Boolean),\r\n );\r\n\r\n return t.callExpression(t.identifier(\"__olovaShow\"), [\r\n whenExpr,\r\n t.arrowFunctionExpression(\r\n [t.identifier(\"__value\")],\r\n childExpr,\r\n ),\r\n fallbackExpr,\r\n ]);\r\n }\r\n\r\n const attrExpr = concatExpressions(\r\n [\r\n ...(jsxScopeAttr ? [t.stringLiteral(` ${jsxScopeAttr}`)] : []),\r\n ...opening.attributes.map((attr) => jsxAttrToExpression(attr)),\r\n ],\r\n );\r\n const childExpr = concatExpressions(\r\n element.children\r\n .map((child) => jsxChildToExpression(child))\r\n .filter(Boolean),\r\n );\r\n\r\n if (opening.selfClosing) {\r\n return concatExpressions([\r\n t.stringLiteral(`<${tag}`),\r\n attrExpr,\r\n t.stringLiteral(\"/>\"),\r\n ]);\r\n }\r\n\r\n return concatExpressions([\r\n t.stringLiteral(`<${tag}`),\r\n attrExpr,\r\n t.stringLiteral(\">\"),\r\n childExpr,\r\n t.stringLiteral(`</${tag}>`),\r\n ]);\r\n };\r\n\r\n traverse(ast, {\r\n JSXElement(path) {\r\n containsJsx = true;\r\n path.replaceWith(jsxElementToExpression(path.node));\r\n path.skip();\r\n },\r\n JSXFragment(path) {\r\n containsJsx = true;\r\n path.replaceWith(jsxFragmentToExpression(path.node));\r\n path.skip();\r\n },\r\n });\r\n\r\n const statement = ast.program.body[0];\r\n if (!statement || !t.isExpressionStatement(statement)) {\r\n return { code: expr.trim(), containsJsx };\r\n }\r\n\r\n containsJsx = containsJsx || expressionProducesHtml(statement.expression);\r\n\n return { code: generate(statement.expression).code, containsJsx };\n}\n\nfunction parseExpressionNode(expr: string): t.Expression | null {\n try {\n const ast = parseModule(`(${expr})`);\n const statement = ast.program.body[0];\n return statement && t.isExpressionStatement(statement)\n ? statement.expression\n : null;\n } catch {\n return null;\n }\n}\n\nfunction isDirectEventHandlerExpression(node: t.Expression | null): boolean {\n return !!(\n node &&\n (t.isIdentifier(node) ||\n t.isMemberExpression(node) ||\n t.isOptionalMemberExpression(node) ||\n t.isArrowFunctionExpression(node) ||\n t.isFunctionExpression(node))\n );\n}\n\nfunction transformEventHandlerExpression(\n expr: string,\n stateNames: Set<string>,\n allSignalNames: Set<string>,\n jsxFunctionNames: Set<string>,\n): string {\n const expressionNode = parseExpressionNode(expr);\n const transformed = transformExpression(\n expr,\n stateNames,\n allSignalNames,\n jsxFunctionNames,\n ).code;\n\n if (isDirectEventHandlerExpression(expressionNode)) {\n return transformed;\n }\n\n return `($event) => (${transformed})`;\n}\n\r\nfunction jsxToTemplateHtml(node: t.Node): string {\r\n if (t.isJSXElement(node)) {\r\n const opening = node.openingElement;\r\n let tag = \"\";\r\n if (t.isJSXIdentifier(opening.name)) {\r\n tag = opening.name.name;\r\n } else if (t.isJSXMemberExpression(opening.name)) {\r\n const walk = (n: t.JSXIdentifier | t.JSXMemberExpression): string =>\r\n t.isJSXIdentifier(n) ? n.name : `${walk(n.object)}.${n.property.name}`;\r\n tag = walk(opening.name);\r\n } else if (t.isJSXNamespacedName(opening.name)) {\r\n tag = `${opening.name.namespace.name}:${opening.name.name.name}`;\r\n }\r\n\r\n let attrsStr = \"\";\r\n for (const attr of opening.attributes) {\r\n if (t.isJSXSpreadAttribute(attr)) {\r\n attrsStr += ` {...${generate(attr.argument).code}}`;\r\n } else {\r\n let attrName = \"\";\r\n if (t.isJSXIdentifier(attr.name)) attrName = attr.name.name;\r\n else attrName = `${attr.name.namespace.name}:${attr.name.name.name}`;\r\n\r\n if (!attr.value) attrsStr += ` ${attrName}`;\r\n else if (t.isStringLiteral(attr.value))\r\n attrsStr += ` ${attrName}=\"${attr.value.value}\"`;\r\n else if (t.isJSXExpressionContainer(attr.value)) {\r\n if (!t.isJSXEmptyExpression(attr.value.expression)) {\r\n attrsStr += ` ${attrName}={${generate(attr.value.expression).code}}`;\r\n }\r\n }\r\n }\r\n }\r\n\r\n const childrenStr = node.children.map(jsxToTemplateHtml).join(\"\");\r\n if (opening.selfClosing) {\r\n return `<${tag}${attrsStr} />`;\r\n }\r\n return `<${tag}${attrsStr}>${childrenStr}</${tag}>`;\r\n }\r\n if (t.isJSXText(node)) {\r\n return node.value;\r\n }\r\n if (t.isJSXExpressionContainer(node)) {\r\n if (t.isJSXEmptyExpression(node.expression)) return \"\";\r\n return `{${generate(node.expression).code}}`;\r\n }\r\n if (t.isJSXFragment(node)) {\r\n return node.children.map(jsxToTemplateHtml).join(\"\");\r\n }\r\n return \"\";\r\n}\r\n\r\nfunction replaceTemplateExpressions(\r\n input: string,\r\n replacer: (expression: string) => string,\r\n): string {\r\n let output = \"\";\r\n let index = 0;\r\n let inTag = false;\r\n let tagQuote: \"'\" | '\"' | \"`\" | null = null;\r\n let tagBraceDepth = 0;\r\n\r\n while (index < input.length) {\r\n const char = input[index];\r\n const prev = index > 0 ? input[index - 1] : \"\";\r\n\r\n if (inTag) {\r\n output += char;\r\n\r\n if (tagQuote) {\r\n if (char === tagQuote && prev !== \"\\\\\") {\r\n tagQuote = null;\r\n }\r\n index += 1;\r\n continue;\r\n }\r\n\r\n if (char === \"'\" || char === '\"' || char === \"`\") {\r\n tagQuote = char;\r\n } else if (char === \"{\") {\r\n tagBraceDepth += 1;\r\n } else if (char === \"}\" && tagBraceDepth > 0) {\r\n tagBraceDepth -= 1;\r\n } else if (char === \">\" && tagBraceDepth === 0) {\r\n inTag = false;\r\n }\r\n\r\n index += 1;\r\n continue;\r\n }\r\n\r\n if (char === \"<\") {\r\n inTag = true;\r\n output += char;\r\n index += 1;\r\n continue;\r\n }\r\n\r\n if (char !== \"{\") {\r\n output += char;\r\n index += 1;\r\n continue;\r\n }\r\n\r\n if (prev === \"$\") {\r\n output += char;\r\n index += 1;\r\n continue;\r\n }\r\n\r\n let depth = 1;\r\n let cursor = index + 1;\r\n let quote: \"'\" | '\"' | \"`\" | null = null;\r\n\r\n while (cursor < input.length && depth > 0) {\r\n const char = input[cursor];\r\n const prev = input[cursor - 1];\r\n\r\n if (quote) {\r\n if (char === quote && prev !== \"\\\\\") {\r\n quote = null;\r\n }\r\n cursor += 1;\r\n continue;\r\n }\r\n\r\n if (char === \"'\" || char === '\"' || char === \"`\") {\r\n quote = char;\r\n cursor += 1;\r\n continue;\r\n }\r\n\r\n if (char === \"{\") {\r\n depth += 1;\r\n } else if (char === \"}\") {\r\n depth -= 1;\r\n }\r\n\r\n cursor += 1;\r\n }\r\n\r\n if (depth !== 0) {\r\n throw createCompileError(\"[olova] Unclosed template expression block.\", input, index);\r\n }\r\n\r\n const expression = input.slice(index + 1, cursor - 1);\r\n output += replacer(expression);\r\n index = cursor;\r\n }\r\n\r\n return output;\r\n}\r\n\r\nfunction parseProps(\r\n attrSource: string,\r\n stateNames: Set<string>,\r\n allSignalNames: Set<string>,\r\n): string {\r\n const props: Array<string> = [];\r\n let index = 0;\r\n\r\n const skipWhitespace = () => {\r\n while (index < attrSource.length && /\\s/.test(attrSource[index])) {\r\n index += 1;\r\n }\r\n };\r\n\r\n const readValue = (): string => {\r\n const start = index;\r\n const first = attrSource[index];\r\n\r\n if (first === '\"' || first === \"'\") {\r\n index += 1;\r\n while (index < attrSource.length) {\r\n const char = attrSource[index];\r\n if (char === \"\\\\\" && index + 1 < attrSource.length) {\r\n index += 2;\r\n continue;\r\n }\r\n\r\n index += 1;\r\n if (char === first) {\r\n break;\r\n }\r\n }\r\n return attrSource.slice(start, index);\r\n }\r\n\r\n if (first === \"{\") {\r\n let depth = 1;\r\n let quote: \"'\" | '\"' | \"`\" | null = null;\r\n index += 1;\r\n\r\n while (index < attrSource.length && depth > 0) {\r\n const char = attrSource[index];\r\n const prev = attrSource[index - 1];\r\n\r\n if (quote) {\r\n if (char === quote && prev !== \"\\\\\") {\r\n quote = null;\r\n }\r\n index += 1;\r\n continue;\r\n }\r\n\r\n if (char === \"'\" || char === '\"' || char === \"`\") {\r\n quote = char;\r\n index += 1;\r\n continue;\r\n }\r\n\r\n if (char === \"{\") {\r\n depth += 1;\r\n } else if (char === \"}\") {\r\n depth -= 1;\r\n }\r\n\r\n index += 1;\r\n }\r\n\r\n return attrSource.slice(start, index);\r\n }\r\n\r\n while (index < attrSource.length && !/\\s/.test(attrSource[index])) {\r\n index += 1;\r\n }\r\n\r\n return attrSource.slice(start, index);\r\n };\r\n\r\n while (index < attrSource.length) {\r\n skipWhitespace();\r\n if (index >= attrSource.length) {\r\n break;\r\n }\r\n\r\n const keyStart = index;\r\n while (\r\n index < attrSource.length &&\r\n !/\\s/.test(attrSource[index]) &&\r\n attrSource[index] !== \"=\"\r\n ) {\r\n index += 1;\r\n }\r\n\r\n const key = attrSource.slice(keyStart, index);\r\n if (!key) {\r\n index += 1;\r\n continue;\r\n }\r\n\r\n skipWhitespace();\r\n let rawValue: string | undefined;\r\n if (attrSource[index] === \"=\") {\r\n index += 1;\r\n skipWhitespace();\r\n if (index < attrSource.length) {\r\n rawValue = readValue();\r\n }\r\n }\r\n\r\n if (key === \"slot\") {\r\n continue;\r\n }\r\n\r\n if (!rawValue) {\r\n props.push(`${JSON.stringify(key)}: true`);\r\n continue;\r\n }\r\n\r\n if (rawValue.startsWith(\"{\") && rawValue.endsWith(\"}\")) {\r\n const expr = rawValue.slice(1, -1);\r\n props.push(\r\n `${JSON.stringify(key)}: (${transformExpression(expr, stateNames, allSignalNames).code})`,\r\n );\r\n continue;\r\n }\r\n\r\n const quote = rawValue[0];\r\n const literal = rawValue.slice(1, -1);\r\n if (quote === '\"' || quote === \"'\") {\r\n props.push(`${JSON.stringify(key)}: ${JSON.stringify(literal)}`);\r\n }\r\n }\r\n\r\n return props.length === 0 ? \"{}\" : `{ ${props.join(\", \")} }`;\r\n}\r\n\r\nfunction parsePropsFromAttrs(\r\n attrs: Record<string, string | true>,\r\n stateNames: Set<string>,\r\n allSignalNames: Set<string>,\r\n jsxFunctionNames: Set<string>,\r\n): string {\r\n const props: Array<string> = [];\r\n\r\n for (const [key, rawValue] of Object.entries(attrs)) {\r\n if (key === \"slot\" || key === \"key\") {\r\n continue;\r\n }\r\n\r\n const propName = key === \"className\" ? \"class\" : key;\r\n\r\n if (rawValue === true) {\r\n props.push(`${JSON.stringify(propName)}: true`);\r\n continue;\r\n }\r\n\r\n if (rawValue.startsWith(\"{\") && rawValue.endsWith(\"}\")) {\r\n const expr = rawValue.slice(1, -1);\r\n const valueExpr = transformExpression(\r\n expr,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n ).code;\r\n props.push(\r\n `${JSON.stringify(propName)}: (${propName === \"class\" ? `__olovaNormalizeClassValue(${valueExpr})` : valueExpr})`,\r\n );\r\n continue;\r\n }\r\n\r\n props.push(`${JSON.stringify(propName)}: ${JSON.stringify(rawValue)}`);\r\n }\r\n\r\n return props.length === 0 ? \"{}\" : `{ ${props.join(\", \")} }`;\r\n}\r\n\r\nfunction findMatchingComponentClose(\r\n source: string,\r\n name: string,\r\n afterStartTag: number,\r\n): { closeStart: number; closeEnd: number } | null {\r\n const tagRe = new RegExp(`<\\\\/?${name}\\\\b[^>]*>`, \"g\");\r\n tagRe.lastIndex = afterStartTag;\r\n\r\n let depth = 0;\r\n let match = tagRe.exec(source);\r\n while (match) {\r\n const rawTag = match[0];\r\n const isClose = rawTag.startsWith(\"</\");\r\n const selfClosing = /\\/>\\s*$/.test(rawTag);\r\n\r\n if (isClose) {\r\n if (depth === 0) {\r\n return {\r\n closeStart: match.index,\r\n closeEnd: match.index + rawTag.length,\r\n };\r\n }\r\n\r\n depth -= 1;\r\n } else if (!selfClosing) {\r\n depth += 1;\r\n }\r\n\r\n match = tagRe.exec(source);\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction extractNamedSlotTemplates(\r\n childrenSource: string,\r\n stateNames: Set<string>,\r\n allSignalNames: Set<string>,\r\n componentNames: Set<string>,\r\n counters: TransformContext,\r\n): Map<string, TemplateTransformResult> {\r\n const slots = new Map<string, TemplateTransformResult>();\r\n const slotTemplateRe =\r\n /<template\\s+slot=(\"([^\"]+)\"|'([^']+)')\\s*>([\\s\\S]*?)<\\/template>/g;\r\n\r\n let remainder = childrenSource;\r\n let match = slotTemplateRe.exec(childrenSource);\r\n while (match) {\r\n const full = match[0];\r\n const name = match[2] || match[3] || \"default\";\r\n const body = match[4] ?? \"\";\r\n slots.set(\r\n name,\r\n transformTemplate(\r\n body,\r\n stateNames,\r\n allSignalNames,\r\n new Set<string>(),\r\n componentNames,\r\n counters,\r\n ),\r\n );\r\n remainder = remainder.replace(full, \"\");\r\n match = slotTemplateRe.exec(childrenSource);\r\n }\r\n\r\n if (remainder.trim()) {\r\n slots.set(\r\n \"default\",\r\n transformTemplate(\r\n remainder,\r\n stateNames,\r\n allSignalNames,\r\n new Set<string>(),\r\n componentNames,\r\n counters,\r\n ),\r\n );\r\n }\r\n\r\n return slots;\r\n}\r\n\r\nfunction transformTemplate(\r\n template: string,\r\n stateNames: Set<string>,\r\n allSignalNames: Set<string>,\r\n jsxFunctionNames: Set<string>,\r\n componentNames: Set<string>,\r\n counters: TransformContext,\r\n scopeId?: string,\r\n devWarnings?: Set<string>,\r\n filename = \"component.olova\",\r\n): TemplateTransformResult {\r\n let html = template;\r\n const textBindings: TextBinding[] = [];\r\n const htmlBindings: HtmlBinding[] = [];\r\n const attrBindings: AttrBinding[] = [];\r\n const eventBindings: EventBinding[] = [];\r\n const slotBindings: SlotBinding[] = [];\r\n const componentBindings: ComponentBinding[] = [];\r\n const ifBindings: IfBinding[] = [];\r\n\r\n // PASS 1: Extract JSX conditionals BEFORE slot/event/attr regex passes\r\n html = replaceTemplateExpressions(html, (expr: string) => {\r\n try {\r\n const ast = parseModule(`(${expr})`);\r\n const exprNode = ast.program.body[0];\r\n if (t.isExpressionStatement(exprNode)) {\r\n const node = exprNode.expression;\r\n const containsJsxNode = (n: t.Node): boolean => {\r\n let found = false;\r\n traverse(parseModule(`(${generate(n).code})`), {\r\n JSXElement() { found = true; },\r\n JSXFragment() { found = true; },\r\n });\r\n return found;\r\n };\r\n\r\n if (t.isLogicalExpression(node) && node.operator === \"&&\") {\r\n if (containsJsxNode(node.right)) {\r\n const id = `i${counters.if++}`;\r\n const condition = generate(node.left).code;\r\n const trueBranchHtml = jsxToTemplateHtml(node.right);\r\n ifBindings.push({\r\n id,\r\n expr: transformExpression(\r\n condition,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n scopeId,\r\n ).code,\r\n trueBranch: transformTemplate(\r\n trueBranchHtml,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n componentNames,\r\n counters,\r\n scopeId,\r\n devWarnings,\r\n filename,\r\n ),\r\n });\r\n return `__O_IF_${id}__`;\r\n }\r\n } else if (t.isConditionalExpression(node)) {\r\n if (containsJsxNode(node.consequent) || containsJsxNode(node.alternate)) {\r\n const id = `i${counters.if++}`;\r\n const condition = generate(node.test).code;\r\n const trueBranchHtml = containsJsxNode(node.consequent)\r\n ? jsxToTemplateHtml(node.consequent)\r\n : `{${generate(node.consequent).code}}`;\r\n const falseBranchHtml = containsJsxNode(node.alternate)\r\n ? jsxToTemplateHtml(node.alternate)\r\n : `{${generate(node.alternate).code}}`;\r\n ifBindings.push({\r\n id,\r\n expr: transformExpression(\r\n condition,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n scopeId,\r\n ).code,\r\n trueBranch: transformTemplate(\r\n trueBranchHtml,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n componentNames,\r\n counters,\r\n scopeId,\r\n devWarnings,\r\n filename,\r\n ),\r\n falseBranch: transformTemplate(\r\n falseBranchHtml,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n componentNames,\r\n counters,\r\n scopeId,\r\n devWarnings,\r\n filename,\r\n ),\r\n });\r\n return `__O_IF_${id}__`;\r\n }\r\n }\r\n }\r\n } catch {\r\n // ignore parse errors\r\n }\r\n\r\n return `{${expr}}`;\r\n });\r\n\r\n const rawExpressions: Array<{ id: string; expression: string }> = [];\r\n html = replaceTemplateExpressions(html, (expr: string) => {\r\n const id = `raw_${rawExpressions.length}`;\r\n rawExpressions.push({ id, expression: expr });\r\n return `__O_RAW_EXPR_${id}__`;\r\n });\r\n\r\n const renderTextContent = (content: string): string => {\r\n return content.replace(\r\n /__O_RAW_EXPR_([a-zA-Z0-9_]+)__/g,\r\n (_full, exprId: string) => {\r\n const found = rawExpressions.find((entry) => entry.id === exprId);\r\n const expr = found ? found.expression : \"\";\r\n const transformed = transformExpression(\r\n expr,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n scopeId,\r\n );\r\n if (transformed.containsJsx) {\r\n const id = `h${counters.text++}`;\r\n htmlBindings.push({\r\n id,\r\n expr: `__olovaDangerouslySetHtml(${transformed.code})`,\r\n });\r\n return `__O_HTML_${id}__`;\r\n }\r\n\r\n const id = `t${counters.text++}`;\r\n textBindings.push({ id, expr: transformed.code });\r\n return `__O_TEXT_${id}__`;\r\n },\r\n );\r\n };\r\n\r\n const renderAttrs = (element: ASTElement): string => {\r\n let output = \"\";\r\n const scopeAttr = createScopeAttr(scopeId);\r\n\r\n if (scopeAttr) {\r\n output += ` ${scopeAttr}`;\r\n }\r\n\r\n for (const [attrName, rawValue] of Object.entries(element.attrs)) {\r\n if (attrName === \"key\") {\r\n continue;\r\n }\r\n\r\n const normalizedAttrName = attrName === \"className\" ? \"class\" : attrName;\r\n const lowerAttrName = normalizedAttrName.toLowerCase();\r\n if (rawValue === true) {\r\n output += ` ${normalizedAttrName}`;\r\n continue;\r\n }\r\n\r\n if (rawValue.startsWith(\"{\") && rawValue.endsWith(\"}\")) {\r\n const expr = rawValue.slice(1, -1);\r\n const eventMatch = normalizedAttrName.match(/^(?:on:|on)([A-Za-z]+)$/);\r\n if (eventMatch) {\n const id = `e${counters.event++}`;\n const event = eventMatch[1].toLowerCase();\n eventBindings.push({\n id,\n event,\n expr: transformEventHandlerExpression(\n expr,\n stateNames,\n allSignalNames,\n jsxFunctionNames,\n ),\n });\n output += ` data-o-on-${event}=\"${id}\"`;\n continue;\n }\n\r\n const id = `a${counters.attr++}`;\r\n attrBindings.push({\r\n id,\r\n attr: normalizedAttrName,\r\n expr:\r\n normalizedAttrName === \"class\"\r\n ? `__olovaNormalizeClassValue(${transformExpression(expr, stateNames, allSignalNames, jsxFunctionNames).code})`\r\n : transformExpression(expr, stateNames, allSignalNames, jsxFunctionNames).code,\r\n });\r\n output += ` ${normalizedAttrName}=\"__O_ATTR_${id}__\"`;\r\n continue;\r\n }\r\n\r\n if (devWarnings && lowerAttrName.startsWith(\"on\")) {\r\n devWarnings.add(\r\n `[olova] Avoid static inline event attributes like \"${normalizedAttrName}\" in templates (${filename}). Prefer ${normalizedAttrName}={handler}.`,\r\n );\r\n }\r\n\r\n if (\r\n devWarnings &&\r\n (lowerAttrName === \"href\" || lowerAttrName === \"src\" || lowerAttrName === \"xlink:href\") &&\r\n /^\\s*javascript:/i.test(rawValue)\r\n ) {\r\n devWarnings.add(\r\n `[olova] Suspicious javascript: URL found in static \"${normalizedAttrName}\" attribute (${filename}).`,\r\n );\r\n }\r\n\r\n output += ` ${normalizedAttrName}=\"${rawValue.replace(/\"/g, \""\")}\"`;\r\n }\r\n\r\n return output;\r\n };\r\n\r\n const serializeRawNodes = (nodes: ASTNode[]): string =>\r\n nodes\r\n .map((node) => {\r\n if (node.type === \"comment\") {\r\n return `<!--${node.content}-->`;\r\n }\r\n\r\n if (node.type === \"text\") {\r\n return node.content;\r\n }\r\n\r\n const attrs = Object.entries(node.attrs)\r\n .map(([name, value]) => {\r\n if (value === true) {\r\n return ` ${name}`;\r\n }\r\n\r\n return ` ${name}=\"${String(value).replace(/\"/g, \""\")}\"`;\r\n })\r\n .join(\"\");\r\n const children = serializeRawNodes(node.children);\r\n if (node.isSelfClosing) {\r\n return `<${node.tag}${attrs} />`;\r\n }\r\n\r\n return `<${node.tag}${attrs}>${children}</${node.tag}>`;\r\n })\r\n .join(\"\");\r\n\r\n const renderNodes = (nodes: ASTNode[]): string =>\r\n nodes\r\n .map((node) => {\r\n if (node.type === \"comment\") {\r\n return `<!--${node.content}-->`;\r\n }\r\n\r\n if (node.type === \"text\") {\r\n return renderTextContent(node.content);\r\n }\r\n\r\n if (node.tag === \"slot\") {\r\n const id = `s${counters.slot++}`;\r\n const slotName =\r\n typeof node.attrs.name === \"string\" ? node.attrs.name : \"default\";\r\n slotBindings.push({ id, name: slotName });\r\n return `__O_SLOT_${id}__`;\r\n }\r\n\r\n if (componentNames.has(node.tag)) {\r\n const id = `c${counters.comp++}`;\r\n const namedSlotNodes = new Map<string, ASTNode[]>();\r\n const defaultNodes: ASTNode[] = [];\r\n\r\n for (const child of node.children) {\r\n if (\r\n child.type === \"element\" &&\r\n child.tag === \"template\" &&\r\n typeof child.attrs.slot === \"string\"\r\n ) {\r\n namedSlotNodes.set(child.attrs.slot, child.children);\r\n continue;\r\n }\r\n\r\n defaultNodes.push(child);\r\n }\r\n\r\n const slotFactories: SlotFactoryDef[] = [];\r\n if (node.tag === \"Suspense\" && typeof node.attrs.fallback === \"string\") {\r\n const rawValue = node.attrs.fallback;\r\n if (rawValue.startsWith(\"{\") && rawValue.endsWith(\"}\")) {\r\n const fallbackExpression = rawValue.slice(1, -1).trim();\r\n const fallbackAst = parseModule(`(${fallbackExpression})`);\r\n const fallbackStatement = fallbackAst.program.body[0];\r\n const fallbackNode =\r\n fallbackStatement && t.isExpressionStatement(fallbackStatement)\r\n ? fallbackStatement.expression\r\n : null;\r\n\r\n if (fallbackNode && (t.isJSXElement(fallbackNode) || t.isJSXFragment(fallbackNode))) {\r\n slotFactories.push({\r\n varName: `__slot_${id}_fallback`,\r\n name: \"fallback\",\r\n descriptor: transformTemplate(\r\n jsxToTemplateHtml(fallbackNode),\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n componentNames,\r\n counters,\r\n scopeId,\r\n devWarnings,\r\n filename,\r\n ),\r\n });\r\n } else {\r\n const transformedFallback = transformExpression(\r\n fallbackExpression,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n scopeId,\r\n );\r\n const fallbackBindingId = `fallback_${id}`;\r\n slotFactories.push({\r\n varName: `__slot_${id}_fallback`,\r\n name: \"fallback\",\r\n descriptor: {\r\n html: `__O_HTML_${fallbackBindingId}__`,\r\n textBindings: [],\r\n htmlBindings: [\r\n {\r\n id: fallbackBindingId,\r\n expr: transformedFallback.containsJsx\r\n ? `__olovaDangerouslySetHtml(${transformedFallback.code})`\r\n : transformedFallback.code,\r\n },\r\n ],\r\n attrBindings: [],\r\n eventBindings: [],\r\n slotBindings: [],\r\n componentBindings: [],\r\n ifBindings: [],\r\n buildFnStr: generateBuildFunction(\r\n `__O_HTML_${fallbackBindingId}__`,\r\n stateNames,\r\n (expr) =>\r\n transformExpression(\r\n expr,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n scopeId,\r\n ),\r\n counters,\r\n componentNames,\r\n ),\r\n },\r\n });\r\n }\r\n }\r\n }\r\n\r\n if (defaultNodes.length > 0) {\r\n slotFactories.push({\r\n varName: `__slot_${id}_default`,\r\n name: \"default\",\r\n descriptor: transformTemplate(\r\n serializeRawNodes(defaultNodes),\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n componentNames,\r\n counters,\r\n scopeId,\r\n devWarnings,\r\n filename,\r\n ),\r\n });\r\n }\r\n\r\n for (const [slotName, slotChildren] of namedSlotNodes.entries()) {\r\n slotFactories.push({\r\n varName: `__slot_${id}_${slotName.replace(/[^A-Za-z0-9_$]/g, \"_\")}`,\r\n name: slotName,\r\n descriptor: transformTemplate(\r\n serializeRawNodes(slotChildren),\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n componentNames,\r\n counters,\r\n scopeId,\r\n ),\r\n });\r\n }\r\n\r\n componentBindings.push({\r\n id,\r\n component: node.tag,\r\n propsExpr: parsePropsFromAttrs(\r\n node.tag === \"Suspense\"\r\n ? Object.fromEntries(\r\n Object.entries(node.attrs).filter(([key]) => key !== \"fallback\"),\r\n )\r\n : node.attrs,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n ),\r\n slotFactories,\r\n });\r\n return `__O_COMP_${id}__`;\r\n }\r\n\r\n const attrs = renderAttrs(node);\r\n const children = renderNodes(node.children);\r\n if (node.isSelfClosing) {\r\n return `<${node.tag}${attrs} />`;\r\n }\r\n\r\n return `<${node.tag}${attrs}>${children}</${node.tag}>`;\r\n })\r\n .join(\"\");\r\n\r\n html = renderNodes(parseHTML(html));\r\n\r\n const resolveExpr = (expr: string) =>\r\n transformExpression(\r\n expr,\r\n stateNames,\r\n allSignalNames,\r\n jsxFunctionNames,\r\n scopeId,\r\n );\r\n const buildFnStr = generateBuildFunction(\r\n html,\r\n stateNames,\r\n resolveExpr,\r\n counters,\r\n componentNames,\r\n );\r\n\r\n return {\r\n html: escapeTemplate(html),\r\n textBindings,\r\n htmlBindings,\r\n attrBindings,\r\n eventBindings,\r\n slotBindings,\r\n componentBindings,\r\n ifBindings,\r\n buildFnStr,\r\n };\r\n}\r\n\r\nfunction indentBlock(code: string, spaces = 2): string {\r\n const pad = \" \".repeat(spaces);\r\n if (!code.trim()) {\r\n return \"\";\r\n }\r\n\r\n return code\r\n .split(\"\\n\")\r\n .map((line) => `${pad}${line}`)\r\n .join(\"\\n\");\r\n}\r\n\r\nfunction renderDescriptorLiteral(\r\n descriptor: TemplateTransformResult,\r\n indent = \" \",\r\n): string {\r\n const slotFactoryDecls = descriptor.componentBindings.flatMap((binding) =>\r\n binding.slotFactories.map(\r\n (slot) =>\r\n `${indent}const ${slot.varName} = () => (${renderDescriptorLiteral(slot.descriptor, indent + \" \")});`,\r\n ),\r\n );\r\n\r\n const componentBindingsCode = descriptor.componentBindings\r\n .map((binding) => {\r\n const slotsObject =\r\n binding.slotFactories.length === 0\r\n ? \"{}\"\r\n : `{ ${binding.slotFactories.map((slot) => `${JSON.stringify(slot.name)}: ${slot.varName}`).join(\", \")} }`;\r\n\r\n return `${indent} { id: ${JSON.stringify(binding.id)}, getComponent: () => ${binding.component}, getProps: () => (${binding.propsExpr}), getSlots: () => (${slotsObject}) }`;\r\n })\r\n .join(\",\\n\");\r\n\r\n const buildLines = descriptor.buildFnStr\r\n ? `${indent}build: ${descriptor.buildFnStr.replace(/\\n /g, \"\\n\" + indent)},`\r\n : \"\";\r\n\r\n const objectLiteral = `{\r\n${buildLines}\r\n${indent}textBindings: [\r\n${descriptor.textBindings.map((binding) => `${indent} { id: ${JSON.stringify(binding.id)}, get: () => (${binding.expr}) }`).join(\",\\n\")}\r\n${indent}],\r\n${indent}htmlBindings: [\r\n${descriptor.htmlBindings.map((binding) => `${indent} { id: ${JSON.stringify(binding.id)}, get: () => (${binding.expr}) }`).join(\",\\n\")}\r\n${indent}],\r\n${indent}attrBindings: [\r\n${descriptor.attrBindings.map((binding) => `${indent} { id: ${JSON.stringify(binding.id)}, attr: ${JSON.stringify(binding.attr)}, get: () => (${binding.expr}) }`).join(\",\\n\")}\r\n${indent}],\r\n${indent}eventBindings: [\r\n${descriptor.eventBindings.map((binding) => `${indent} { id: ${JSON.stringify(binding.id)}, event: ${JSON.stringify(binding.event)}, get: () => (${binding.expr}) }`).join(\",\\n\")}\r\n${indent}],\r\n${indent}slotBindings: [\r\n${descriptor.slotBindings.map((binding) => `${indent} { id: ${JSON.stringify(binding.id)}, name: ${JSON.stringify(binding.name)} }`).join(\",\\n\")}\r\n${indent}],\r\n${indent}componentBindings: [\r\n${componentBindingsCode}\r\n${indent}],\r\n${indent}ifBindings: [\r\n${descriptor.ifBindings\r\n .map((binding) => {\r\n const trueFactory = `() => (${renderDescriptorLiteral(binding.trueBranch, indent + \" \")})`;\r\n const falseFactory = binding.falseBranch\r\n ? `() => (${renderDescriptorLiteral(binding.falseBranch, indent + \" \")})`\r\n : \"undefined\";\r\n return `${indent} { id: ${JSON.stringify(binding.id)}, get: () => (${binding.expr}), trueBranch: ${trueFactory}, falseBranch: ${falseFactory} }`;\r\n })\r\n .join(\",\\n\")}\r\n${indent}]\r\n${indent}}`;\r\n\r\n if (slotFactoryDecls.length === 0) {\r\n return objectLiteral;\r\n }\r\n\r\n const outerIndent = indent.length >= 2 ? indent.slice(2) : \"\";\r\n return `(() => {\\n${slotFactoryDecls.join(\"\\n\")}\\n${indent}return ${objectLiteral};\\n${outerIndent}})()`;\r\n}\r\n\r\nfunction collectImportLines(importsCode: string): string[] {\r\n return importsCode\r\n .split(\"\\n\")\r\n .map((line) => line.trim())\r\n .filter(Boolean);\r\n}\r\n\r\nfunction uniqueLines(lines: string[]): string[] {\r\n const seen = new Set<string>();\r\n const output: string[] = [];\r\n\r\n for (const line of lines) {\r\n if (seen.has(line)) {\r\n continue;\r\n }\r\n\r\n seen.add(line);\r\n output.push(line);\r\n }\r\n\r\n return output;\r\n}\r\n\r\nfunction extractTemplateExpressions(input: string): {\r\n output: string;\r\n expressions: Array<{ id: string; expression: string }>;\r\n} {\r\n const expressions: Array<{ id: string; expression: string }> = [];\r\n let output = \"\";\r\n let index = 0;\r\n let count = 0;\r\n\r\n while (index < input.length) {\r\n const start = input.indexOf(\"{\", index);\r\n if (start < 0) {\r\n output += input.slice(index);\r\n break;\r\n }\r\n\r\n let prevIndex = start - 1;\r\n while (prevIndex >= 0 && /\\s/.test(input[prevIndex])) {\r\n prevIndex -= 1;\r\n }\r\n\r\n if (prevIndex >= 0 && input[prevIndex] === \"=\") {\r\n output += input.slice(index, start + 1);\r\n index = start + 1;\r\n continue;\r\n }\r\n\r\n if (start > 0 && input[start - 1] === \"$\") {\r\n output += input.slice(index, start + 1);\r\n index = start + 1;\r\n continue;\r\n }\r\n\r\n output += input.slice(index, start);\r\n\r\n let depth = 1;\r\n let cursor = start + 1;\r\n let quote: \"'\" | '\"' | \"`\" | null = null;\r\n\r\n while (cursor < input.length && depth > 0) {\r\n const char = input[cursor];\r\n const prev = input[cursor - 1];\r\n\r\n if (quote) {\r\n if (char === quote && prev !== \"\\\\\") {\r\n quote = null;\r\n }\r\n cursor += 1;\r\n continue;\r\n }\r\n\r\n if (char === \"'\" || char === '\"' || char === \"`\") {\r\n quote = char;\r\n cursor += 1;\r\n continue;\r\n }\r\n\r\n if (char === \"{\") {\r\n depth += 1;\r\n } else if (char === \"}\") {\r\n depth -= 1;\r\n }\r\n\r\n cursor += 1;\r\n }\r\n\r\n if (depth !== 0) {\r\n throw createCompileError(\"[olova] Unclosed template expression block.\", input, start);\r\n }\r\n\r\n const id = `x${count++}`;\r\n expressions.push({\r\n id,\r\n expression: input.slice(start + 1, cursor - 1),\r\n });\r\n output += `__O_EXPR_${id}__`;\r\n index = cursor;\r\n }\r\n\r\n return { output, expressions };\r\n}\r\n\r\nfunction mergeImportLines(lines: string[]): string {\r\n const merged = new Map<\r\n string,\r\n {\r\n defaultImport?: string;\r\n namespaceImport?: string;\r\n namedImports: Map<string, string>;\r\n sideEffectOnly: boolean;\r\n }\r\n >();\r\n\r\n for (const line of uniqueLines(lines)) {\r\n const ast = parseModule(line);\r\n\r\n for (const node of ast.program.body) {\r\n if (!t.isImportDeclaration(node)) {\r\n continue;\r\n }\r\n\r\n const source = node.source.value;\r\n const entry =\r\n merged.get(source) ??\r\n {\r\n namedImports: new Map<string, string>(),\r\n sideEffectOnly: true,\r\n };\r\n\r\n if (node.specifiers.length > 0) {\r\n entry.sideEffectOnly = false;\r\n }\r\n\r\n for (const specifier of node.specifiers) {\r\n if (t.isImportDefaultSpecifier(specifier)) {\r\n entry.defaultImport ??= specifier.local.name;\r\n continue;\r\n }\r\n\r\n if (t.isImportNamespaceSpecifier(specifier)) {\r\n entry.namespaceImport ??= specifier.local.name;\r\n continue;\r\n }\r\n\r\n const imported = t.isIdentifier(specifier.imported)\r\n ? specifier.imported.name\r\n : specifier.imported.value;\r\n\r\n if (!entry.namedImports.has(imported)) {\r\n entry.namedImports.set(imported, specifier.local.name);\r\n }\r\n }\r\n\r\n merged.set(source, entry);\r\n }\r\n }\r\n\r\n const output: string[] = [];\r\n\r\n for (const [source, entry] of merged.entries()) {\r\n if (entry.sideEffectOnly) {\r\n output.push(generate(t.importDeclaration([], t.stringLiteral(source))).code);\r\n continue;\r\n }\r\n\r\n const specifiers: t.ImportDeclaration[\"specifiers\"] = [];\r\n\r\n if (entry.defaultImport) {\r\n specifiers.push(t.importDefaultSpecifier(t.identifier(entry.defaultImport)));\r\n }\r\n\r\n if (entry.namespaceImport) {\r\n specifiers.push(\r\n t.importNamespaceSpecifier(t.identifier(entry.namespaceImport)),\r\n );\r\n }\r\n\r\n for (const [imported, local] of entry.namedImports.entries()) {\r\n specifiers.push(\r\n t.importSpecifier(\r\n t.identifier(local),\r\n t.identifier(imported),\r\n ),\r\n );\r\n }\r\n\r\n output.push(\r\n generate(t.importDeclaration(specifiers, t.stringLiteral(source))).code,\r\n );\r\n }\r\n\r\n return output.join(\"\\n\");\r\n}\r\n\r\nfunction buildComponentCode(\n parsed: ParsedOlovaFile,\n options?: { exportName?: string; scopeId?: string; hmrId?: string; dev?: boolean },\n): { importsCode: string; code: string } {\n const scriptInfo = collectScriptInfo(parsed.script);\n const counters: TransformContext = {\n text: 0,\n attr: 0,\n event: 0,\n comp: 0,\n slot: 0,\n if: 0,\n };\n const warnings = options?.dev ? new Set<string>() : undefined;\n\n const transformed = runCompilePhase(\"transform-template\", () =>\n transformTemplate(\n parsed.template,\n scriptInfo.stateNames,\n scriptInfo.allSignalNames,\n scriptInfo.jsxFunctionNames,\n scriptInfo.componentNames,\n counters,\n options?.scopeId,\n warnings,\n options?.hmrId ?? \"component.olova\",\n ),\n );\n\r\n const exportHead = options?.exportName\r\n ? `export const ${options.exportName} = __defineComponent((__props, __slots) => {`\r\n : `const __olovaComponent = __defineComponent((__props, __slots) => {`;\r\n const exportTail = options?.exportName\r\n ? `}, ${JSON.stringify(options?.hmrId)});`\r\n : `}, ${JSON.stringify(options?.hmrId)});\\nexport default __olovaComponent;`;\r\n const hmrCode =\r\n options?.dev && !options?.exportName && options?.hmrId\r\n ? `\r\nif (import.meta.hot) {\r\n import.meta.hot.accept((nextModule) => {\r\n if (nextModule?.default) {\r\n __replaceComponent(__olovaComponent, nextModule.default);\r\n }\r\n });\r\n}\r\n`\r\n : \"\";\r\n\r\n if (warnings) {\r\n emitDevWarnings(warnings);\r\n }\r\n\r\n const code = `\r\n${exportHead}\r\n const props = __props;\r\n const slots = __slots;\r\n const __olovaGlobalObj = globalThis;\r\n const __olovaJsxHandlers =\r\n __olovaGlobalObj.__olovaJsxHandlers ?? (__olovaGlobalObj.__olovaJsxHandlers = new Map());\r\n const __olovaNextJsxEventId = () => {\r\n __olovaGlobalObj.__olovaJsxEventId = (__olovaGlobalObj.__olovaJsxEventId ?? 0) + 1;\r\n return String(__olovaGlobalObj.__olovaJsxEventId);\r\n };\r\n if (typeof __olovaGlobalObj.__olovaDispatchJsxEvent !== 'function') {\r\n __olovaGlobalObj.__olovaDispatchJsxEvent = (event, element) => {\r\n const key = element?.getAttribute?.('data-o-jsx-' + event.type);\r\n if (!key) {\r\n return;\r\n }\r\n\r\n const handler = __olovaJsxHandlers.get(key);\r\n if (typeof handler === 'function') {\r\n handler(event);\r\n }\r\n };\r\n }\r\n const __olovaRegisterJsxEvent = (eventName, handler) => {\r\n if (typeof handler !== 'function') {\r\n return '';\r\n }\r\n\r\n const id = __olovaNextJsxEventId();\r\n __olovaJsxHandlers.set(id, handler);\r\n return ' data-o-jsx-' + eventName + '=\"' + id + '\" on' + eventName + '=\"window.__olovaDispatchJsxEvent(event, this)\"';\r\n };\r\n const __olovaToString = (value) =>\r\n Array.isArray(value)\r\n ? value.map(__olovaToString).join('')\r\n : value == null || value === false || value === true\r\n ? ''\r\n : String(value);\r\n const __olovaDangerouslySetHtml = (value) => ({ __dangerousHtml: true, value: __olovaToString(value) });\r\n const __olovaNormalizeClassValue = (value) => {\r\n if (value == null || value === false) {\r\n return '';\r\n }\r\n if (Array.isArray(value)) {\r\n return value.map(__olovaNormalizeClassValue).filter(Boolean).join(' ');\r\n }\r\n if (typeof value === 'object') {\r\n return Object.entries(value)\r\n .filter(([, enabled]) => !!enabled)\r\n .map(([key]) => key)\r\n .join(' ');\r\n }\r\n return String(value);\r\n };\r\n const __olovaEscape = (value) =>\r\n __olovaToString(value)\r\n .replace(/&/g, '&')\r\n .replace(/</g, '<')\r\n .replace(/>/g, '>')\r\n .replace(/\\\"/g, '"')\r\n .replace(/'/g, ''');\r\n const __olovaSpreadAttrs = (input) => {\r\n if (input == null || input === false) {\r\n return '';\r\n }\r\n if (Array.isArray(input)) {\r\n return input.map(__olovaSpreadAttrs).join('');\r\n }\r\n if (typeof input !== 'object') {\r\n return '';\r\n }\r\n\r\n return Object.entries(input).reduce((acc, [key, value]) => {\r\n if (value == null || value === false) {\r\n return acc;\r\n }\r\n const attrKey = key === 'className' ? 'class' : key;\r\n const normalizedValue = attrKey === 'class'\r\n ? __olovaNormalizeClassValue(value)\r\n : value;\r\n if (attrKey === 'key') {\r\n return acc;\r\n }\r\n if (normalizedValue == null || normalizedValue === false || normalizedValue === '') {\r\n return acc;\r\n }\r\n if (normalizedValue === true) {\r\n return acc + ' ' + attrKey;\r\n }\r\n return acc + ' ' + attrKey + '=\"' + __olovaEscape(normalizedValue) + '\"';\r\n }, '');\r\n };\r\n const __olovaFor = (each, render) => {\r\n if (!Array.isArray(each) || typeof render !== 'function') {\r\n return '';\r\n }\r\n return each.map((item, index) => render(item, index));\r\n };\r\n const __olovaShow = (when, render, fallback = '') => {\r\n if (!when) {\r\n return fallback;\r\n }\r\n return typeof render === 'function' ? render(when) : render;\r\n };\r\n${indentBlock(scriptInfo.scriptBodyCode, 2)}\r\n\r\n return ${renderDescriptorLiteral(transformed, \" \")};\r\n${exportTail}\r\n${hmrCode}\r\n`;\r\n\r\n return { importsCode: scriptInfo.importsCode, code };\r\n}\r\n\r\nexport interface CompileOptions {\n filename?: string;\n dev?: boolean;\n exportName?: string;\n}\n\nexport type CompilePhasesResult = {\n parsed: ParsedOlovaFile;\n script: ReturnType<typeof collectScriptInfo>;\n template: TemplateTransformResult;\n scopeId?: string;\n};\n\nexport function analyzeOlovaPhases(\n source: string,\n options?: CompileOptions,\n): CompilePhasesResult {\n const filename = options?.filename ?? \"component.olova\";\n try {\n const parsed = runCompilePhase(\"parse-file\", () =>\n parseOlovaFile(source),\n );\n const script = runCompilePhase(\"analyze-script\", () =>\n collectScriptInfo(parsed.script),\n );\n const scopeId = parsed.styles.some((style) => !(\"global\" in style.attrs))\n ? hashScopeSeed(`${filename}:${options?.exportName ?? \"default\"}`)\n : undefined;\n const template = runCompilePhase(\"transform-template\", () =>\n transformTemplate(\n parsed.template,\n script.stateNames,\n script.allSignalNames,\n script.jsxFunctionNames,\n script.componentNames,\n {\n text: 0,\n attr: 0,\n event: 0,\n comp: 0,\n slot: 0,\n if: 0,\n },\n scopeId,\n options?.dev ? new Set<string>() : undefined,\n filename,\n ),\n );\n\n return {\n parsed,\n script,\n template,\n scopeId,\n };\n } catch (error) {\n return normalizeCompileError(error, source, filename);\n }\n}\n\nexport function compileOlovaScriptModule(\n source: string,\n options?: CompileOptions,\n): CompileResult {\n try {\n return runCompilePhase(\"analyze-script\", () => {\n const scriptInfo = collectScriptInfo(source);\n return runCompilePhase(\"transpile\", () =>\n transpileTypeScript(\n [scriptInfo.importsCode, scriptInfo.scriptBodyCode].filter(Boolean).join(\"\\n\"),\n options?.filename ?? \"module.ts\",\n ),\n );\n });\n } catch (error) {\n return normalizeCompileError(error, source, options?.filename ?? \"module.ts\");\n }\n}\n\nexport function compileOlova(source: string, options?: CompileOptions): CompileResult {\n const filename = options?.filename ?? \"component.olova\";\n try {\n return runCompilePhase(\"parse-file\", () => {\n const parsed = parseOlovaFile(source);\n\n if (!parsed.template.trim() && isModuleOnlyScript(parsed.script)) {\n const moduleResult = compileModuleScript(parsed.script, `${filename}.ts`);\n const css = runCompilePhase(\"generate-module\", () =>\n collectCss(parsed.styles),\n );\n return {\n ...moduleResult,\n css,\n };\n }\n\n const scopeId = parsed.styles.some((style) => !(\"global\" in style.attrs))\n ? hashScopeSeed(`${filename}:${options?.exportName ?? \"default\"}`)\n : undefined;\n const compiled = runCompilePhase(\"generate-module\", () =>\n buildComponentCode(parsed, {\n scopeId,\n hmrId: filename,\n dev: options?.dev,\n }),\n );\n const runtimeImport = options?.dev\n ? `import { defineComponent as __defineComponent, replaceComponent as __replaceComponent } from 'olova/runtime';`\n : `import { defineComponent as __defineComponent } from 'olova/runtime';`;\n const result = runCompilePhase(\"transpile\", () => transpileTypeScript(`\n${runtimeImport}\n${compiled.importsCode}\n${compiled.code}\n`, `${filename}.ts`));\n const css = runCompilePhase(\"generate-module\", () =>\n collectCss(parsed.styles, scopeId),\n );\n return {\n ...result,\n css,\n };\n });\n } catch (error) {\n return normalizeCompileError(error, source, filename);\n }\n}\n"]}
|