{"version":3,"sources":["jsdelivr-header.js","/npm/view-transitions-polyfill@1.0.6/src/elements/media-clone.ts","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/tokenizer/types.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/tokenizer/char-code-definitions.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/tokenizer/utils.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/tokenizer/names.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/tokenizer/adopt-buffer.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/tokenizer/OffsetToLocation.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/tokenizer/TokenStream.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/tokenizer/index.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/utils/List.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/utils/create-custom-error.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/parser/SyntaxError.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/parser/sequence.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/parser/create.js","/npm/view-transitions-polyfill@1.0.6/node_modules/source-map-js/lib/base64.js","/npm/view-transitions-polyfill@1.0.6/node_modules/source-map-js/lib/base64-vlq.js","/npm/view-transitions-polyfill@1.0.6/node_modules/source-map-js/lib/util.js","/npm/view-transitions-polyfill@1.0.6/node_modules/source-map-js/lib/array-set.js","/npm/view-transitions-polyfill@1.0.6/node_modules/source-map-js/lib/mapping-list.js","/npm/view-transitions-polyfill@1.0.6/node_modules/source-map-js/lib/source-map-generator.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/generator/sourceMap.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/generator/token-before.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/generator/create.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/convertor/create.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/walker/create.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/definition-syntax/generate.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/lexer/error.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/utils/names.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/lexer/generic-const.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/lexer/generic-an-plus-b.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/lexer/generic-urange.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/lexer/generic.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/lexer/units.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/definition-syntax/SyntaxError.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/definition-syntax/tokenizer.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/definition-syntax/parse.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/definition-syntax/walk.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/lexer/prepare-tokens.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/lexer/match-graph.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/lexer/match.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/lexer/trace.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/lexer/search.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/lexer/structure.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/lexer/Lexer.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/config/mix.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/create.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/dist/data.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/node/AnPlusB.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/node/Atrule.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/node/AtrulePrelude.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/node/AttributeSelector.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/node/Block.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/node/Brackets.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/node/CDC.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/node/CDO.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/node/ClassSelector.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/node/Combinator.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/node/Comment.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/node/Condition.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/node/Declaration.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/node/DeclarationList.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/node/Dimension.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/node/Feature.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/node/FeatureFunction.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/node/FeatureRange.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/node/Function.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/node/GeneralEnclosed.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/node/Hash.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/node/Identifier.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/node/IdSelector.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/node/Layer.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/node/LayerList.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/node/MediaQuery.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/node/MediaQueryList.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/node/NestingSelector.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/node/Nth.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/node/Number.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/node/Operator.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/node/Parentheses.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/node/Percentage.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/node/PseudoClassSelector.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/node/PseudoElementSelector.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/node/Ratio.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/node/Raw.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/node/Rule.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/node/Scope.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/node/Selector.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/node/SelectorList.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/utils/string.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/node/String.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/node/StyleSheet.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/node/SupportsDeclaration.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/node/TypeSelector.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/node/UnicodeRange.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/utils/url.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/node/Url.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/node/Value.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/node/WhiteSpace.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/config/lexer.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/scope/default.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/scope/atrulePrelude.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/scope/selector.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/function/expression.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/function/var.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/scope/value.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/atrule/container.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/atrule/font-face.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/atrule/import.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/atrule/layer.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/atrule/media.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/atrule/nest.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/atrule/page.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/atrule/scope.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/atrule/starting-style.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/atrule/supports.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/atrule/index.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/pseudo/lang.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/pseudo/index.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/config/parser.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/config/walker.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/syntax/index.js","/npm/view-transitions-polyfill@1.0.6/node_modules/css-tree/lib/index.js","/npm/view-transitions-polyfill@1.0.6/src/style-parsing/style-types.ts","/npm/view-transitions-polyfill@1.0.6/src/style-parsing/parsing-utils.ts","/npm/view-transitions-polyfill@1.0.6/src/style-parsing/style-parser.ts","/npm/view-transitions-polyfill@1.0.6/src/style-parsing/style-sheet-parser.ts","/npm/view-transitions-polyfill@1.0.6/src/elements/view-transition-image-elements.ts","/npm/view-transitions-polyfill@1.0.6/src/elements/view-transition-group.ts","/npm/view-transitions-polyfill@1.0.6/src/capture-element.ts","/npm/view-transitions-polyfill@1.0.6/src/elements/view-transition-element.ts","/npm/view-transitions-polyfill@1.0.6/src/view-transition-manager.ts","/npm/view-transitions-polyfill@1.0.6/src/polyfill-utils.ts","/npm/view-transitions-polyfill@1.0.6/src/style-parsing/style-attribute-parser.ts","/npm/view-transitions-polyfill@1.0.6/src/polyfill-functions.ts","/npm/view-transitions-polyfill@1.0.6/src/view-transitions-api-polyfill.ts"],"names":[],"mappings":"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U,qBACV,cAAU,wBACV,mBAAW,uBACX,qBAAc,qBACd,qBAAU,+BACV,0BAAgB,2EAChB,sBAAiB,0CACjB,8BACA,8BACA,6CACA,WAAQ,qBACR,oEACA,eAAe,6BACf,gBAAY,MACZ,qBAAY,qGACZ,cAAe,+EACf,kBAAW,0IACX,KAAA,mCACA,oBAAc,yBACd,cAAO,0EACP,0BACA,WAAU,uFACV,cAAY,8NACZ,0DACA,4BACA,+JACA,IAAA,qCACA,mDACA,8BACA,WAAW,6CACX,+DACA,gFACA,gBAAS,8BACT,iBAAc,kBACd,2CACA,0DACA,oCACA,qCACA,cAAc,QACd,MAAA,gGACA,sDACA,mBAAmB,0BACnB,+CACA,0FACA,6BAA0B,sGAC1B,WAAA,wBACA,6DACA,2IACA,iJACA,uBAAwB,iCACxB,oBAAgB,2CAChB,yBAAoB,uBACpB,sFACA,wBAAc,sBACd,mBAAS,iFACT,wBAAW,6BACX,uBAAa,kDACb,eAAgB,8EAChB,mBAAiB,uCACjB,sBAAsB,UACtB,aAAc,oCACd,4BACA,QAAA,2BACA,2DACA,gCACA,gBAAe,kCACf,qBAAkB,iBAClB,wEACA,qEACA,+BAAoB,0GACpB,0BAAmB,iWACnB,2BAAiB,uDACjB,8BACA,uDACA,mBAAa,uLACb,iBAAa,qEACb,mBAAgB,mDAChB,kBAAS,sBACT,gBAAS,wCACT,4BAAuB,mDACvB,0BAAe,kCACf,oGACA,+DACA,gCACA,uDACA,4BACA,oEACA,yCACA,oBAAa,+BACb,yGACA,gFACA,2BAAkB,yBAClB,4BAAiB,gCACjB,iCAAgB,8BAChB,qBAAc,iBACd,8BACA,oJACA,uBAAwB,6BACxB,8HACA,sCACA,2FACA,4HACA,wBAAgB,oIAChB,qBAAY,sBACZ,uBAAe,gCACf,uBAAa,2BACb,0EACA,iBAAS,mGACT,eAAU,6CACV,eAAO,2CACP,SAAA,yKACA,iDACA,YAAS,uFACT,wBAAW,iDACX,QAAS,wHACT,mIACA,IAAA,mBACA,uCACA,2BAAa,6CACb,gGACA,iCACA,MAAA,gFACA,8DACA,iDACA,mBAAkB,sDAClB,6BACA,uBACA,qBAAS,mDACT,UAAW,+DACX,2CACA,iBAAS,0BACT,iBAAY,8CACZ,sBAAe,oBACf,oBAAqB,0DACrB,kIACA,kCACA,sCACA,kHACA,qCACA,4CACA,oBAAqB,wBACrB,iDACA,aAAS,0BACT,iBAAc,gCACd,gFACA,0CACA,oBAAe,sBACf,oBAAgB,+BAChB,oBAAY,wGACZ,0CACA,aAAS,gJACT,gBAAa,mFACb,8CACA,sBACA,8CACA,oCACA,aAAa,4BACb,6BACA,yDACA,yEACA,6BAAc,4CACd,gBAAc,2CACd,kBAAW,2DACX,YAAY,wBACZ,WAAY,4CACZ,cAAY,iFACZ,mBAAS,iBACT,aAAY,UACZ,aAAS,YACT,oBACA,oCACA,2LACA,kDACA,6BACA,sIACA,yCACA,sEACA,cAAO,48CACP,mBAAa,UACb,uCACA,oBAAkB,wBAClB,wBAAa,8BACb,0BAAmB,yCACnB,yBAAwB,mCACxB,IAAA,uBACA,+CACA,oBAAa,cACb,iBAAU,wBACV,YAAW,gEACX,kBAAiB,oDACjB,uBAAa,oOACb,qBAAqB,sBACrB,gBAAY,wCACZ,YAAS,mDACT,6CACA,oDACA,gBAAe,uCACf,YAAS,uEACT,oBAAqB,oBACrB,SAAS,qMACT,QAAS,iCACT,wBAAY,yDACZ,0BAA2B,+DAC3B,2CACA,MAAA,sDACA,oBAAiB,oFACjB,MAAA,qCACA,kEACA,6EACA,mHACA,uDACA,yBAAyB,uBACzB,gBAAS,iBACT,yCACA,eAAY,wDACZ,6BAAc,2FACd,8BAAa,kFACb,8BAAa,8FACb,wBAAa,6BACb,wKACA,6KACA,wCACA,aAAW,gEACX,YAAa,8BACb,YAAY,8BACZ,YAAY,8BACZ,oEACA,oBAAY,0BACZ,aAAY,kCACZ,mDACA,qDACA,WAAU,oCACV,WAAU,oCACV,WAAW,oCACX,WAAW,kCACX,SAAA,eACA,gBAAU,2DACV,eAAY,iDACZ,SAAS,qBACT,wDACA,sCACA,UAAS,4BACT,yCACA,OAAA,kCACA,uCACA,MAAA,oFACA,+BACA,8CACA,4BACA,yQACA,6BAAQ,6CACR,6BAAU,+BACV,mCAAiB,oBACjB,8BAAwB,iBACxB,4BAAqB,+CACrB,0HACA,6BAAsB,qBACtB,KAAA,4FACA,8BACA,oEACA,uBAAU,8DACV,oBAAS,8EACT,qBAAU,4HACV,qBAAoB,iEACpB,4DACA,gBAAiB,oBACjB,uBAAmB,iCACnB,OAAA,kCACA,4BACA,OAAA,yDACA,mBAAc,yEACd,oBAAgB,qFAChB,gBAAc,yEACd,wCACA,sBAAkB,wDAClB,iFACA,gBAAe,0DACf,4EACA,eAAgB,4EAChB,mHACA,qBAAgB,qQAChB,iBAAgB,wBAChB,4BAAiB,wBACjB,cAAS,0DACT,gBAAU,sEACV,mDACA,eAAc,oCACd,eAAW,yBACX,kLACA,6CACA,+DACA,sDACA,6CACA,kDACA,uCACA,sKACA,iNACA,oCAAsB,qNACtB,oCAAuB,kDACvB,iNACA,oCAA0B,qNAC1B,oCAAsB,wIACtB,+BAAsB,0EACtB,gCAA+B,iBAC/B,wUACA,m9BACA,gCAAyB,8EACzB,qIACA,oMACA,oPACA,8BAA8B,yFAC9B,2GACA,0BAAuB,wBACvB,wCACA,0BAAO,uBACP,2BAAe,yBACf,sBAAa,4DACb,6BAAiB,iFACjB,6BAAW,gDACX,sBAAU,kEACV,0BAAkB,0FAClB,IAAA,kBACA,cAAa,iBACb,wBACA,gBAAU,cACV,8BACA,OAAA,gBACA,kCACA,mHACA,YAAQ,kEACR,gBAAc,+BACd,OAAA,sBACA,0BAAgB,yDAChB,mBAAiB,4DACjB,sEACA,+BAA6B,mCAC7B,KAAA,gBACA,oFACA,iBAAe,0FACf,+NACA,gBAAS,0DACT,4BAAsB,8BACtB,4BAAS,+DACT,iBAAe,6BACf,cAAa,mFACb,mFACA,sCACA,MAAA,iEACA,sCACA,MAAA,gBACA,0CACA,wCACA,0BAAyB,+BACzB,mCAA0B,gCAC1B,0CACA,6BAAmB,2BACnB,4CACA,0DACA,wBAAc,sDACd,wBAAoB,2DACpB,yBAAO,wCACP,2BAAK,qDACL,kBAAK,sCACL,iCAAe,6CACf,+BAAoB,yBACpB,aAAO,iCACP,mBAAgB,6BAChB,IAAA,gBACA,EAAA,WACA,EAAA,WACA,YAAA,wDACA,0DACA,IAAA,8CACA,eAAc,yCACd,kBAAa,iBACb,wBAAW,iBACX,UAAW,yDACX,oBAAe,yCACf,wBAAU,mDACV,iBAAU,2DACV,2DACA,kCACA,sIACA,sHACA,4CACA,4EACA,kGACA,kBAAc,yFACd,oDACA,gBAAY,gBACZ,cAAe,oCACf,kBAAiB,6FACjB,kBAAe,+DACf,wBAAkB,yJAClB,aAAY,2uBACZ,gBAAc,yvBACd,+EACA,uGACA,2FACH,iEACD,iBAAc,iBACV,WAAO,0DACP,mDACA,wCACA,yIACA,+EAC0B,WAC1B,CACA,4BACA,+BACA,sCACA,2CACA,sBAAc,YACd,yBAAiB,gEACjB,6BAAiB,eACjB,6BAAoB,eACpB,wBAAiB,mEACjB,+BAA4B,wEAC5B,6BAA6B,2BAC7B,wBACA,yCACA,gBAAiB,yBACjB,yDACA,sDACA,uCACA,4BAA4B,sBAC5B,iDACA,2BAA4B,wBAC5B,6BACA,oEACA,8BAA6B,UAC7B,4BAAuB,UACvB,2BAAoB,UACpB,iCAA0B,UAC1B,2BAA0B,UAC1B,gCAA0B,UAC1B,6BAA0B,UAC1B,4BAAoB,UACpB,qCACA,iIACA,yBAAwB,gBACxB,yBAAqB,WACrB,yBAAqB,gBACrB,yBAA0B,WAC1B,iCACA,2BAAoB,6FACpB,2BAAmB,6FACnB,uBAAiB,2BACjB,oBAAmB,wDACnB,oBAAoB,wDACpB,yBAAmB,8BACnB,qBAAgB,+EAChB,mCACA,sCACA,oDACA,6BACA,+BACA,kBAAmB,6tDACnB,4BACA,4BAAqB,gBACrB,0BAAe,gBACf,2BAAuB,gBACvB,yCACA,4EACA,kEACA,+BAAgC,MAChC,oBAAqB,eACrB,iDACA,sBAAmB,mDACnB,iCAAmB,mBACnB,kCAAoB,mBACpB,8BAAwB,mBACxB,+BAAsB,mBACtB,4CACA,+BACA,qGACA,+CACA,qDACA,uBAAuB,eACvB,qBAAsB,kCACtB,qBAAgB,8oCAChB,sEACA,8BAAqB,UACrB,8BAA0B,mBAC1B,8BAAsB,mBACtB,sBAAuB,+CACvB,sCACA,qJACA,0BAA2B,gBAC3B,2DACA,yBAAyB,qBACzB,yCACA,sBAAqB,kCACrB,sCACA,qEACA,0BAA2B,2CAC3B,sBAAuB,kBACvB,uDACA,uDACA,iCACA,6BAAuB,aACvB,8BAAgB,UAChB,0BAAiB,UACjB,sBAAe,oBACf,4BAAc,UACd,4BAAgB,WAChB,wBAAO,eACP,sBAAe,iDACf,eAAgB,eAChB,gBAAa,4FACb,0FACA,4FACA,8GACA,IAAA,4CACA,qCACA,0CACA,UAAA,sBACA,wBAAwB,kCACxB,kBAAmB,UACnB,sBAAuB,gCACvB,+BACA,sDACA,4BAAsB,sCACtB,iBAAc,2BACd,uBAAgB,iCAChB,kBAAW,wDACX,sBAAmB,2EACnB,wBAAuB,2EACvB,4BAAc,qBACd,oDACA,WAAA,oDACA,+BACA,QAAA,8HACA,gDACA,sBAAqB,iBACrB,WAAA,mCACA,wBAAyB,gBACzB,wBAAyB,gBACzB,+BACA,mBAAmB,UACnB,mBAAc,cACd,oBAAU,SACV,sBAAgB,iBAChB,wBAAsB,gEACtB,wBAAsB,gEACtB,sCACA,+BACA,yBACA,OAAA,sCACA,qEACA,qBAAsB,4BACtB,4CACA,4CACA,yEACA,yBAAiB,uBACjB,yBAAuB,uBACvB,gDACA,2EACA,2BAAuB,uBACvB,2BAAuB,uBACvB,2BAAmB,uBACnB,gBAAgB,sCAChB,6CACA,4BAA2B,2BAC3B,6BAAgB,2BAChB,sBAAuB,eACvB,sBAAuB,eACvB,sCACA,8BACA,wBAAsB,2BACtB,0BAAiB,2BACjB,0KACA,sBAAuB,2BACvB,sBAAuB,oCACvB,uDACA,qCACA,gEACA,sEACA,0EACA,kDACA,6CACA,6CACA,0BAAe,uBACf,0BAAqB,uBACrB,0BAAqB,uBACrB,sBAAqB,sDACrB,4BAAiB,uBACjB,4BAAgB,uBAChB,4BAAsB,uBACtB,oDACA,8BACA,oBAAkB,eAClB,mCACA,yEACA,eAAgB,sCAChB,qBAAc,UACd,qBAAoB,eACpB,oCACA,sCACA,0BAAoB,2BACpB,4BAAoB,2BACpB,eAAgB,oBAChB,aAAU,sCACV,mBAAa,UACb,yBAAwB,2BACxB,0BAAiB,2BACjB,mBAAY,eACZ,mBAAkB,eAClB,eAAa,oBACb,OAAA,6BACA,gDACA,uBAAY,cACZ,gBAAc,yBACd,sBACA,iBAAe,YACf,8BACA,oBAAgB,YAChB,kEACA,WAAS,2BACT,8BACA,sCACA,cAAS,uGACT,eAAQ,uGACR,eAAa,kDACb,eAAa,2DACb,MAAS,mCACT,6BACA,0CACA,MAAA,+CACA,KAAA,eACA,iEACA,8BACA,MAAA,UACA,8BAAqB,sBACrB,4DACA,eAAe,iBACf,6BACA,aAAW,6BACX,cAAW,sEACX,8BACA,uCACA,uCACA,yBACA,+BACA,QAAA,qCACA,QAAA,kEACA,yBAAkB,+BAClB,+BAAW,wBACX,2BAAsB,wBACtB,gCAAqB,wBACrB,0BAAiB,wBACjB,UAAA,6CACA,iBAAU,uBACV,iBAAK,6BACL,QAAM,gFACN,qBAAM,sBACN,oBAAa,oCACb,gBAAW,uEACX,kDACA,OAAA,2cACA,EAAA,wBACA,GAAA,wBACA,GAAA,wBACA,UAAA,UACA,QAAU,qIACV,oBAAQ,mIACR,cAAc,YACd,+BACA,KAAA,UACA,eAAa,oBACb,8BACA,OAAA,yDACA,KAAA,wDACA,aAAQ,oBACR,iBAAe,wCACf,gDACA,uBACA,yBACA,uCACA,MAAA,0CACA,KAAA,6KACA,cAAa,oCACb,wBAAoB,8BACpB,eAAe,mBACf,yBAAgB,kBAChB,sBAAc,YACd,wDACA,0BAA2B,8BAC3B,kEACA,mGACA,2DACA,eAAgB,0BAChB,8CACA,8DACA,0BAA2B,YAC3B,4BAAsB,YACtB,mCACA,wBAAwB,YACxB,4lBACA,0BAAe,oPACf,wGACA,0BAAO,wEACP,qBAAQ,4BACR,yBAAa,kHACb,uBAAqB,+GACrB,wBAAkB,mBAClB,sDACA,sBAAe,YACf,IAAA,8BACA,KAAA,4JACA,+CACA,oBAAY,gBACZ,iBAAY,sBACZ,iBAAgB,gBAChB,6CACA,kBAAkB,cAClB,kBAAiB,sBACjB,kCACA,mDACA,0CACA,6BACA,eAAU,sBACV,+BACA,6JACA,sBAAW,iBACX,wBAAqB,gEACrB,qBAAmB,gEACnB,sBAAoB,4CACpB,OAAA,iIACA,sBAAkB,gBAClB,wBAAwB,wBACxB,QAAA,mBACA,oBAAkB,qCAClB,kBAAS,2FACT,mBAAe,oCACf,kDACA,gDACA,uBAAgB,wCAChB,0BACA,6BACA,MAAA,eACA,cAAa,eACb,kBAAmB,UACnB,oBAAiB,UACjB,eAAgB,eAChB,mBAAkB,UAClB,qBAAQ,UACR,mBAAkB,8BAClB,UAAA,eACA,kBAAc,qFACd,gBAAe,0HACf,2GACA,iBAAc,wFACd,KAAA,6BACA,8CACA,iDACA,aAAU,iBACV,sDACA,mBAAoB,WACpB,kFACA,mBAAiB,eACjB,sBAAiB,iBACjB,kDACA,OAAA,oCACA,eAAe,uBACf,mBAAgB,kBAChB,qBAAc,kBACd,gBAAe,6BACf,gBAAU,uBACV,oBAAc,kBACd,sBAAc,kBACd,2CACA,eAAQ,6BACR,0CACA,iCACA,OAAA,aACA,0BACA,0BACA,4BACA,KAAA,gBACA,cAAa,sJACb,mBAAkB,kBAClB,qBAAc,2BACd,qBAAa,oCACb,oBAAe,iCACf,qBAAiB,eACjB,oBAAe,2CACf,YAAa,4BACb,iBAAa,0BACb,iCACA,8BACA,cAAc,kBACd,gBAAc,cACd,gCACA,yBACA,8BACA,oBAAa,wCACb,aAAa,sCACb,8BACA,aAAc,iBACd,iCACA,aAAa,+HACb,kBAAkB,gBAClB,6BACA,2IACA,iBAAU,gBACV,8IACA,kBAAmB,gBACnB,6IACA,6CACA,kDACA,kBAAW,aACX,OAAS,8GACT,gBAAW,kBACX,kBAAW,sBACX,gDACA,kBAAkB,yBAClB,gBAAiB,0BACjB,QAAA,gBACA,MAAA,YACA,QAAA,YACA,QAAA,4DACA,+BACA,4BACA,wCACA,gBAAiB,eACjB,SAAA,kEACA,kBAAc,YACd,iBAAW,kCACX,8CACA,sDACA,oDACA,6CACA,+CACA,aAAW,kCACX,QAAA,YACA,sBAAqB,2BACrB,4BAAuB,oBACvB,6BAAkB,oBAClB,wBAAkB,oBAClB,wBAAsB,oBACtB,QAAA,+BACA,gBAAgB,wBAChB,oBAAiB,mBACjB,sBAAe,mBACf,iBAAQ,wBACR,yCACA,qBAAqB,mBACrB,uBAAqB,mBACrB,eAAe,wBACf,gBAAe,wBACf,sCACA,KAAA,sBACA,mBAAe,2CACf,oBAAc,2CACd,oBAAkB,aAClB,cAAY,iCACZ,YAAA,gBACA,qBAAiB,aACjB,gBAAgB,yCAChB,mDACA,gDACA,8GACA,SAAA,uDACA,kBAAU,qBACV,gBAAK,uBACL,eAAU,qDACV,yBAAS,2DACT,qBAAU,oBACV,sBAAW,uDACX,qBAAc,gBACd,OAAA,iCACA,EAAA,wBACA,OAAM,6CACN,MAAM,6BACN,OAAS,4CACT,uCACA,uDACA,sCACA,4DACA,GAAA,wBACA,GAAA,wBACA,MAAA,qBACA,oCACA,8CACA,mCACA,gCACA,gCACA,sBAAsB,gBACtB,4BAAuB,WACvB,0BAAqB,WACrB,uBAAkB,WAClB,uBAAwB,gBACxB,6BAA8B,WAC9B,2BAA4B,WAC5B,gCACA,iCACA,+BACA,mDACA,uBAAuB,kCACvB,6BAAwB,2BACxB,2BAAsB,2BACtB,wBAAqB,2BACrB,0DACA,8BAA2B,2BAC3B,4BAAwB,2BACxB,iDACA,uBAAoB,2BACpB,qBAAoB,2BACpB,mDACA,yBAAsB,mBACtB,0BAAmB,aACnB,uBAAwB,qCACxB,uBAAwB,qCACxB,mCACA,mBAAgB,sDAChB,qBAAiB,2BACjB,qBAAmB,2BACnB,kBAAU,wDACV,uBAAoB,sBACpB,uBAAqB,yBACrB,wBAAkB,gBAClB,qCACA,4DACA,kBAAkB,mDAClB,OAAA,UACA,mBAAY,wBACZ,oBAAgB,eAChB,iBAAc,oBACd,kBAAmB,oBACnB,oBAAe,0BACf,+BACA,8BACA,gCACA,4BACA,gEACA,6DACA,iCACA,sDACA,kBAAiB,gHACjB,wBAAuB,UACvB,sGACA,uBAAuB,oFACvB,2BAAe,gBACf,wBAAgB,kCAChB,4BAAoB,uCACpB,gBAAiB,mDACjB,sBAAkB,UAClB,yBAAe,mCACf,sBAAoB,4EACpB,0DACA,sDACA,4CACA,gDACA,iBAAa,2DACb,iCACA,mBAAmB,yBACnB,oBAAkB,kEAClB,iBAAO,gEACP,wBAAgB,6BAChB,0BAAa,uCACb,sDACA,oCACA,kBAAmB,6BACnB,iBAAc,uBACd,IAAA,6BACA,0GACA,UAAA,wBACA,sEACA,qKACA,kBAAa,mBACb,WAAA,uBACA,sBAAe,+BACf,mBAAiB,UACjB,sBAAkB,UAClB,sBAAiB,qCACjB,6BAAsB,qBACtB,UAAA,4DACA,4LACA,2CACA,gBAAc,uEACd,iBAAe,kFACf,oEACA,qBAAU,sBACV,sBAAS,qCACT,qBAAe,uBACf,uBAAc,sBACd,WAAA,0BACA,cAAa,mHACb,uBAAgB,yEAChB,OAAK,YACL,MAAK,iIACL,cAAW,8BACX,aAAQ,mDACR,iCACA,gCACA,kGACA,EAAA,wBACA,EAAA,wBACA,2BACA,KAAA,qCACA,uBAAoB,iBACpB,gCAAkB,gCAClB,iCAAuB,iCACvB,6BAAsB,6BACtB,8BAAqB,iCACrB,oCAAiB,iBACjB,0BAAkB,iBAClB,6CACA,qDACA,+DACA,mEACA,sCACA,sDACA,6BACA,oCACA,2CACA,oDACA,mDACA,gDACA,4DACA,0BAAyB,uCACzB,6BAAqB,oBACrB,8BAAuB,oBACvB,8BAAsB,oBACtB,yBAAkB,6CAClB,yBAAY,iFACZ,6BAAO,gBACP,wBAAa,0BACb,oBAAc,oBACd,2CACA,wJACA,iBAAW,kCACX,SAAS,SACT,IAAA,gCACA,oCACA,aAAQ,wBACR,+BAAc,UACd,6BAAe,UACf,QAAO,oBACP,MAAS,oCACT,cAAY,iDACZ,gEACA,KAAA,kCACA,8DACA,+DACA,IAAA,yDACA,MAAA,oBACA,4EACA,gBAAgB,YAChB,gBAAgB,kDAChB,+BACH,+FACD,cAAW,iGACP,cAAW,8GACI,uEACI,sCAClB,sEACD,mBAAiB,qDACF,QACX,CAAe,QACX,CAAoB,QACpB,WAAY,YACA,MACL,gBACG,CAAA,QACD,uBAAA,YACT,CACA,mBAAU,yBACV,SAAW,uBACX,SAAU,qBAC1B,IAAA,sBACS,OAAA,WACD,MAAY,kCACR,WAAW,4DACX,OAAA,WACH,QAAA,YACD,OAAA,kGAEmB,SACX,CAAgB,QAChB,mGAAe,YACf,MAEP,uBACD,QAAA,iBACI,YAAW,CACX,eAAe,6BACX,+BACA,+DAEe,YACf,CAAyB,QACzB,KAA2B,YAC3B,CACA,kBAAc,sBACd,mBAAe,sBACf,qDACA,cAAe,gBACf,wBAAO,8BACP,0BAAiB,8BACjC,8CACS,kDACD,4CACI,oBAAW,sBACX,cAAe,eAClB,IAAA,yDACD,gBAAU,cAGT,uBACD,QAAa,iBACT,YAAW,MAEd,OAAA,CACD,QAAS,0HACL,YAAW,MAEd,UAAA,CACD,QAAS,mBACL,YAAW,MAEd,MAAA,CACD,QAAa,gCACT,YAAW,MAEd,MAAA,CACD,QAAQ,qBACJ,YAAW,MACI,UACF,CAAA,QACA,uCAAA,YACT,MACQ,KACxB,CACS,QAAA,uBACD,YAAA,CACI,MAAW,gBACX,MAAA,qBACI,mBAAO,mCACP,KAAQ,2DAEC,eACT,CAAqB,QACrB,iBAAmB,YACnB,CACA,IAAA,UACA,KAAA,WACA,OAAA,aACA,MAAS,YACT,oBAAc,wBACd,kBAAe,sBACf,qBAAiB,yBACjB,mBAAgB,uBAChB,gCACA,kCACA,MAAA,YACA,8BACA,cAAU,kBACV,gBAAgB,oBAChB,kCACA,qBAAS,yBACT,mBAAU,uBACV,sBAAa,0BACb,oBAAc,wBACd,OAAA,aACA,eAAc,mBACd,gBAAc,oBACd,MAAA,YACA,OAAA,aACA,4BACA,8BACA,4BACA,aAAc,iBACd,8BAChB,gCACS,sCACD,kBAAY,sBACR,iBAAW,qBACX,kBAAe,sBACX,aAAU,+BACV,eAAY,mCAGnB,SAAA,CACD,QAAS,yBACL,YAAW,CACX,OAAA,WACH,SAAA,aACD,gBAAkB,yBAGjB,MAAA,CACD,QAAY,6CACR,YAAW,MAEd,kBACD,QAAa,KACT,YAAW,MAEd,SAAA,CACD,QAAQ,uBACJ,YAAW,MAEvB,UAAA,CACA,QAAA,4CCjxCM,YACc,MAMhB,KAAU,CACV,QAAa,0BASb,YAPa,QAcjB,GAAA,GAA6B,GAAc,GAAA,GAAA,IAAA,IAAA,EAAA,IAAA,EACvC,SAAO,GAAa,EAAA,GACxB,IAAA,EAAA,KAAA,WAAA,EAEA,MAAA,EAAwB,KAAQ,WAAM,GAClC,KALJ,KAKS,GALkC,KAKrB,KAAK,GAAa,KAAY,MAAG,8BAAA,OAAA,KAAA,SAAA,IAC/C,EAAA,KAAI,WAAM,KAAA,KAAA,MAAA,sBAAA,EAEV,CAAY,SACR,GAAK,GACD,OAAA,GAAM,KAAA,KAAA,EAAA,EACN,UACJ,GAAK,KACD,IAAA,KAAM,QAAA,KAAA,WAAA,EAAA,GAAA,CACN,IAAA,EAAA,GAChB,OAAA,GAEQ,KAAK,GACb,EAAA,gBACA,MAIA,KAvB2C,GAwBnC,EAAS,0BAQb,KAAI,MAAS,oBACT,CAEI,CAEA,SAAA,KACI,IAAA,EAAA,EAAO,EAAK,EAAA,EAAA,KAAW,UAAQ,KAAA,IAC1B,GAAS,IAAc,GAEhC,EAAI,KAAS,aACJ,GACuC,GAE5D,IAAA,EACY,KAAA,KAAO,QA9CnB,GA8CmB,KAAA,KAAA,QA9CwB,GA8CxB,GA0BZ,OAAS,KAtBZ,EAAI,KAAS,QAlDjB,GAmDa,GAnDb,GAA2C,GA+D3C,GAGa,EAAO,KAAA,aACK,SACjB,IAAY,GAAA,IAAA,GACZ,IAAA,IAAY,KAAA,KAAA,GAAA,GAAA,KAAA,KAAA,IAGI,CAEpB,OAAM,EAAQ,GAAK,KAAA,KAAA,GAAA,IAAA,IAAA,EAAA,KAAA,WAAA,KAAA,YA1EvB,KA0EuB,GA1EoB,KA0EpB,GAAA,KAAA,MAAA,4BAAA,GAAA,KAAA,KAAA,IAAA,GA1EoB,KA0EpB,EAAA,IAAA,KAAA,QAAA,GAAA,KAAA,QAAA,EACnB,CAIA,MAAI,GAAK,UAAA,GAAc,CACnB,EAAA,QAAyB,MACF,EAAA,CAAA,OAQlB,OAKkC,SAInC,KACI,MAAA,EAAA,KAAK,WAEL,IAAA,EAAA,KAAA,EAAA,QAGJ,KAAK,YAAA,EACD,GAAA,KAAe,KAAK,IAAM,EAAc,KAExC,QAAW,QAMX,G7ChImB,I6CgInB,KAAA,WAAA,KAAA,QAAA,KAAA,WAjH2B,IAiH3B,OAGJ,EAAA,KAAA,GAAA,KAAA,KAAA,EAAA,IAAA,KAAA,SAAA,KAAA,YACI,KAAe,EAK/B,KAAA,OAAA,EAAA,GAAA,KAAA,MAAA,MASQ,KAAI,EAWJ,GAAA,KAVI,KAGA,EAvI+B,IAuI1B,KAAQ,OACb,KAAO,SACF,GAAM,KAGA,KAAK,IAAM,EAAG,IAErB,KAAK,QAAA,GAIT,MACI,QAEA,GAAA,KAAA,KAAA,EArJ2B,IAqJ3B,GAAA,KAAA,KAAA,EAAA,IAAA,KAAA,OAAA,EAAA,KAAA,eAAA,EAAA,QAIA,G7CxKmB,I6CwKJ,KAAK,WAEf,KAAM,QA3J3B,K7CfmC,I6C2KN,KAEb,WAAyB,GAErB,CACJ,IAAA,EAAA,SAGJ,EAAA,IAAA,KAAA,QApKZ,MAoKY,EAAA,EAAA,KAAA,QAAA,GAAA,KAAA,KAAA,EAAA,IAAA,KAAA,SAAA,KAAA,YACI,KAAe,EAK/B,KAAA,OAAA,EAAA,GAAA,KAAA,MACA,MAQQ,KAAM,EAEF,QAAI,KAAK,EArLsB,IAqLT,iEAE1B,MACI,QAKA,GAAM,KAAK,KAAA,EA7LoB,IA6LP,GACxB,KAAK,KAAM,EAAA,IAAA,KAAA,OAAA,EAAuB,KAAK,eAG3C,EAAe,EAAK,GA2BpB,MAAK,GAAA,KAAO,YAAA,EAAA,CAGhB,MAAI,OAAM,WAAU,KAAA,YAAkB,EA/N1C,KAgOQ,GAhOmC,KAgOrB,EAQd,IAAA,EAAM,KAAA,WAAA,EACN,KAAK,EAAK,KAAA,UAAmB,EAAK,KAAA,WAAU,SAE5C,IAAA,oNA3OmC,IA2OnC,qKACH,MACL,KAAA,QAEO,OAAwB,OAAf,GA/OhB,KA+O+B,EAAA,WAAA,KAAA,IAAA,OAAA,WAAA,GA/O/B,KA+O+B,EAAA,WAAA,KAAA,IAAA,OAAA,KAC3B,KAAS,UACL,IAAA,KACI,YAAW,EAAA,KAAQ,YAKvB,EAAA,EACI,EAAA,EAGmB,CAEnB,SAAA,GAAK,GAEjB,GAAA,EAAA,EAAA,CACQ,MAAK,GAAe,OAAf,EAAA,GAAe,MAAA,EAAA,EAAA,WAAA,EAAA,GAAA,OAAA,EAAA,EAAA,IAE5B,GAAA,EAAA,EAAA,C,gHC5RA,MAAA,GAAsB,OAAA,OAAA,OAAA,eAAA,CAClB,UAAO,KACX,SAAA,GAEA,KAAA,GACI,MAAA,GACI,UAAI,IACA,OAAA,YAAO,CAAA,MAAA,YAGX,SAAI,KAEA,OAAA,KAAO,IAAA,KAAA,yCAAA,GAIf,SAAO,KACX,QAAA,EAAA,EAAA,EAAA,EAAA,KAAA,WAAA,OAAA,CAGO,G9CT4B,K8CStB,EAGT,OAAM,EACN,GAAA,IAAU,G9CbqB,I8CarB,EACV,OAAQ,CACZ,CAEO,OAAS,CACZ,CACA,MAAI,GACA,SACU,GACF,SAAA,GAAA,CAqBZ,KAAA,OAAsB,QACb,6BACD,MAAA,SAAW,OACX,SAEC,SACD,MAAI,EAAA,KAAA,WAQJ,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,KACZ,OAAA,KAAA,I9C1DmC,G8C0DnC,EAAA,KAAA,eAAA,EAAA,GAAA,EAAA,EAAA,cAAA,KAAA,UAAA,IAAA,KAAA,KAAA,KAAA,YAAA,GAAA,KAAA,YAAA,IAAA,EAAA,KAAA,mBAAA,KAAA,kBAAA,KAAA,cAAA,KAAA,KAAA,EAAA,GAAA,OAAA,KAAA,UAAA,YAAA,KAAA,UAAA,KAAA,WAEI,KAAO,EACH,KAAM,OACN,MACA,KAAA,EACA,EAAA,eAAA,yHAGR,OAEO,KAAS,SACZ,IAAK,KAAM,YAAsB,EAAI,KAE5B,YASb,KAAA,E,6C9CjFmC,E,uH+Cbf,OAAA,eACO,CAEvB,UAAW,KACf,SAAA,GAEO,KAAA,GACH,MAAI,GAEJ,UAAI,GAuBG,YACG,IAAA,OACD,YAAK,CAAA,MAAA,YAA4B,GAAA,gBAAA,GAAA,gBAAA,GAAA,CAAA,SACtC,MAER,SAAA,GAAA,GAEO,IAAA,EAAS,KACZ,OAAK,OAAA,IAAa,IAAA,eAAA,KAAA,SAAA,EAAA,eAAA,KAAA,KAAA,OAAA,IAAA,mBAAA,KAAA,OAAA,GAAA,QAAA,KAAA,OAAA,GAAA,QAAA,KAAA,WAAA,aAAA,KAAA,MAAA,eAAA,KAAA,UAAA,IAAA,KAAA,KAAA,KAAA,YAAA,GAAA,KAAA,YAAA,GAAA,KAAA,MAAA,mCACtB,KAAA,gB,mGCrCM,OACA,eACmB,CAIzB,UAAS,KACD,SAAK,GAIT,KAAM,GACN,MAAI,GAEJ,UAAI,GAkBG,YACG,IAAA,OACD,YAAK,CAAA,MAAmB,YAAe,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,IAAA,GAAA,aAC5C,KACH,KAAA,KAAA,KAAA,MAAA,2BACL,MAAA,EAAA,KAAA,WAEA,IAAA,GAAS,EACL,OAAM,KAAQ,QANkC,KAO1C,GAAO,EAAA,KAAK,QAAgB,KAAA,QAAA,KAAA,KAAA,IhDhCH,GgDgCG,KAAA,QAAA,IAPc,KAOd,KAAA,WAAA,KAAA,WAAA,IAAA,KAAA,OAAA,KAAA,IhDhCH,IgDgCG,GAAA,KAAA,MAAA,yBAAA,KAAA,UAAA,GAAA,KAAA,MAAA,8BAElC,KAAI,aACA,IAAS,oCACT,KAAS,uBACA,CACA,SACA,KAgBjB,MAAA,EAAA,KAAA,WAAA,EAAA,KAAA,WAAA,GAIO,OAlC6C,KAkCvC,GAET,IAAM,IApC0C,KAqChD,GArCgD,KAsChD,GAtCgD,KAuChD,GACJ,IAAA,IAAA,KAAA,MAAA,0DAAA,KAAA,OAxCoD,KAwCpD,IAAA,KAAA,QAxCoD,KAwCpD,KAAA,MAAA,0BAAA,KAAA,QAAA,KAAA,eAAA,EAEO,CACH,MAAA,GAAM,oBAAa,GAAA,CACnB,KAAI,aAKJ,QAAA,CAAA,OAA0B,MA8BnB,MACH,CAAM,4BAAA,MACD,CAAA,OAAK,OACV,SACA,KAAA,MACA,EAAA,gBAAA,IACA,EAAA,EAAA,mBACH,OAAA,KAAA,IhD/G8B,IgD+G9B,KAAA,SAAA,EAAA,GAAA,KAAA,WAAA,ShD/G8B,KgD+G9B,KAAA,YhD/G8B,IgD+G9B,KAAA,YAAA,EAAA,GAAA,KAAA,WAAA,SAAA,EhD/G8B,IgD+G9B,KAAA,UAAA,KAAA,SAAA,KAAA,aAAA,KAAA,UhD/G8B,IgD+G9B,KAAA,YAAA,EAAA,KAAA,QhD/G8B,GgD+G9B,KAAA,WAAA,KAAA,IhD/G8B,IgD+G9B,CACL,KAAA,oBAEO,IAAS,KAAS,YAAM,EAAA,KAAA,YAC3B,KAAK,EAaT,QAAA,E,2ChDhImC,E,kHAAA,E,oBAAA,E,KiDPnC,MAAA,GAAsB,OAAA,OAAA,OAAA,eAAA,CAClB,UAAO,KACX,SAAA,GACA,KAAA,GACI,MAAO,GACX,UAAA,IACA,OAAS,YAAwB,CAAA,MAAA,YAAA,GAAA,GAC7B,SAAO,KACX,OAAA,KAAA,IAAA,QACA,CACI,SAAI,KACA,OAAA,KAA6B,kBAAgB,KAAA,KAAU,GAG3D,CAEA,SAAI,KAKR,OAAA,KAAA,IAAA,KAAA,+BAAA,EAEO,CAEkB,SACrB,KAAW,GACP,KAAA,YAAA,EACA,OAAA,GAAA,KAAA,UAAA,YAAA,MACA,EAAA,KAAA,kBAAA,KAAA,YAAA,IACH,OAAA,KAAA,YAAA,GAAA,KAAA,OAAA,CACL,CAEO,MAAA,GAAS,QAAoB,GAAA,QAAA,GAAA,CAChC,SAAiB,EAEjB,SAEA,OAEA,iBAE0B,SAClB,GAAA,GACI,MAAA,EAAA,EAAM,wBAAA,IAAA,EAEV,KAAK,sBACL,GACI,EACA,MAAA,KAAA,KAAA,OAEC,gBACD,KjD7CmB,GiD8CnB,MAAA,EAEJ,KAAA,EACI,KAAI,EAKpB,KAAA,OAGS,MAKD,KjD9D2B,EiD+DtB,EAAA,KAAK,KAAA,kBAAwB,KAAU,OAAA,KAAA,KAAA,GAAA,KAC5C,MACH,QACL,GAAA,KAAA,QAnEiC,IAmEjC,EAAA,KAAA,GAAA,KAAA,OAAA,EAAA,KAAA,EAAA,KAAA,OAGI,OAAK,KAAM,KAAqB,KAChC,IjDtE+B,IiDsE1B,CACG,KAAK,QAGZ,IACD,KAAK,YAA4B,EAAA,KAAA,YACrC,SAAA,E,+GjD5EmC,G,4BkDZf,OACP,eAAY,CACrB,UAAW,KACf,SAAA,GAEO,KAAA,GACH,MAAM,GACN,UAAe,GAEf,YAAK,IAQE,OACG,YAAA,CAAA,MAAA,YAAA,GAAA,WAAA,GAAA,CAAA,SACD,MACL,SACH,GAAA,EAAA,GACL,MAAA,EAAA,KAAA,WAEO,IAAA,EAAS,KACZ,OAAK,KAAM,IlDboB,IkDc/B,EAAK,EAAA,KAAA,KACL,GAAA,KAAK,KAAa,KAAG,IlDfU,IkDeV,CACzB,KAAA,W,8ElDhBmC,E,iCAAA,E,KmDb5B,MAAA,GAAiB,OAAA,OAAA,OAAA,eAAA,CACpB,UAAc,KAEd,SAAA,GAEO,KACH,GAAM,MACD,GACR,UAAA,IACL,OAAA,YAAA,CAAA,MAAA,YAAA,GAAA,MAAA,GAAA,GAEO,SAAS,KACZ,MAAK,EAAA,KAAW,WACpB,OAAA,KAAA,IAAA,GAAA,C,yFCbO,MAAA,GAAiB,OAAA,OAAA,OAAA,eAAA,CACpB,UAAc,KAEd,SAAA,GAEO,KACH,GAAM,MACD,GACR,UAAA,IACL,OAAA,YAAA,CAAA,MAAA,YAAA,GAAA,MAAA,GAAA,GAEO,SAAS,KACZ,MAAK,EAAA,KAAW,WACpB,OAAA,KAAA,IpDAmC,IoDAnC,C,6EpDAmC,G,WqDZV,MACrB,GAAM,OAAA,OAAA,OAAA,eAAA,CACV,UAAA,KAEO,SAAS,GACZ,KAAA,GAEO,MACH,GAAM,UACD,IAAmD,OAClD,YAAa,CAAK,MAAA,YAAA,GAAA,GAAA,GAAA,gBAAA,GAAA,CAC3B,KAAA,QAGE,SAAS,KACZ,OAAK,KAAM,SALiB,IAMvB,CACT,KAAA,gB,wErDLmC,G,2BAAA,E,gBAAA,E,QsDVV,MACrB,GAAM,OAAA,OAAA,OAAA,eAAA,CACV,UAAA,KAGO,SAAS,GACZ,KAAM,GACN,MAAI,GAEJ,UAAQ,IAAc,OACb,4EACD,aACA,SAEC,KACD,MAAA,EAAA,KAAQ,WAAgC,IAAA,EAC/B,OACL,KAAK,gBACL,EACI,EAAA,IACA,WtDVe,EsDaf,OAAA,KAAK,WACA,KAAA,aAEL,KAhBP,GAkBG,KAlBH,GAmBO,KAAA,GACpB,KAAA,OAEmB,MACP,KAvBC,GAwBb,KAAA,OAAA,KAAA,SAAA,QAAA,KAAA,SAxBa,IA0BF,MACH,QACK,KAAK,MAAA,0BAEb,EAAA,KAAA,eAAA,GAID,MAAK,CACT,KAAA,a,qFC9CyB,MACrB,GAAO,OAAA,OAAA,OAAA,eAAA,CACX,UAAA,KAEO,SAAS,GACZ,KAAM,GACN,MAAI,GAEJ,UAAA,IAQO,OACG,YAAA,CAAA,MAAA,YAAA,GAAA,GAAA,GAAA,GAAA,GAAA,UAAA,GAAA,CAAA,MACD,QAC+B,SACvC,KACL,MAAA,EAAA,KAAA,WAEO,IAAA,EAAS,KAAe,SAC3B,OAAK,KAAM,IAAS,GAAA,EAAY,EAAA,GAAQ,GAP9B,KAOkC,KAAA,WAAA,EAAA,IAPlC,KAOkC,KAAA,WAAA,EAAA,KAAA,GAAA,IAChD,KAAA,U,oHClByB,MACrB,GAAM,OAAA,OAAA,OAAA,eAAA,CACN,UAAW,KAAA,SACP,GAAA,KACA,GAAA,MACA,GAAA,UACA,IAAA,OACA,YAAA,CAAA,MAAA,YAAA,GAAA,IAAA,IAAA,CAAA,EAAA,ExDHS,IwDGT,GAAA,YAAA,GAAA,CACH,KAAA,OACL,SAAA,EAEA,aACI,UAMJ,kBAEA,eACI,yBAGI,SAAA,GAAO,GACf,OxDrBmC,IwDqBnC,KAAA,gBAAA,IAAA,GAAA,IAAA,KAAA,gBAAA,IAAA,KAAA,QAAA,GAAA,KAAA,aAAA,EACA,CAEO,MAAA,GAAS,CACZ,MAAM,GAEN,UAAc,GACV,QAAA,GAAsB,OACb,6BAGD,SAAA,GAAA,EAAA,eAEJ,EAAK,kBACD,EAAA,MAAS,KAAK,KACd,OAAA,KAAA,WAEJ,KAAK,EACD,KAAA,EAAgB,KACZ,OAAuC,SACjC,KxDzCS,EwD4Cd,OACD,KAAO,cAAK,MAEJ,KAAA,EAAA,CACA,IAAA,EAAA,KAAM,mBACN,IAAA,GAAA,GAAA,KAAK,KACE,KACV,WAIJ,IAGI,EAAA,KAAS,mBAClB,KAChB,KAAA,IAAA,GAEiB,MAAe,EAAA,KAAA,UAAA,GACZ,OAAO,KAAK,IAAA,GAAA,CAAA,IAEZ,IAAM,KAAA,gBAAA,MACT,EAAA,KAAA,GAEI,KAKL,CAChB,KxD1EmC,EwD0EnC,CAEY,IAAA,EAAA,KAAA,mBACI,IAAM,0BACtB,WAQQ,IAAM,EAAA,KAAA,gBAAA,IAAA,EAAA,KAAA,GACN,KACA,CACA,QACH,MAAA,EAGE,OAAS,WAAe,KAAA,MAAA,0BACtB,KAAA,YACG,IAAM,KAAA,oBACN,GAMP,KAAA,EACL,SAAA,E,gICvGA,MAAA,GAA2B,OAAA,OAAA,OAAA,eAAA,CACvB,UAAO,KACX,SAAA,GAEA,KAAA,GACI,MAAO,GACX,UAAA,IAEA,OAAS,YAAe,CAAA,MAAA,YAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GACpB,SAAM,KAGN,OAAI,KAAM,IAAA,KAAS,wCAEV,EAOb,CAEO,SAAM,KAGT,OAAA,KAAY,IAAA,KAAS,wCAAM,GACjB,SACH,KACX,MAAA,EAAA,KAAA,WAAA,EAAA,KAAA,QAEO,MAAiB,QAAR,SAAQ,IAAA,KAAA,KAAA,KAAA,YAAA,IAAA,IAAA,KAAA,QAvBA,MAuBA,IAAA,KAAA,cAAA,IAAA,KAAA,QAAA,CACpB,CAMA,MAAI,GAAY,cACZ,qBAEJ,UAAK,CAAQ,QACR,QAEL,SAAmB,OAYnB,MAVK,SACI,QAWD,SAAA,KACI,MAAA,EAAM,KAAA,WAAS,EAAW,KAAA,WAAA,EAAA,GAAA,KAAA,MAAA,EAAA,GAAA,GAAA,EAAA,EAAA,KAAA,oBAAA,KAAA,WAAA,EAAA,EAAA,GAAA,GAAA,IACtB,EADsB,GACtB,EAAM,KAAA,SACD,KAAA,IAAA,GAAA,MAAA,EACL,KAAO,WAAA,GAAA,GACV,KAAA,SAAA,EAAA,EAAA,KAAA,kBAAA,GAAA,KAAA,KAAA,UAAA,YAAA,GAAA,UAAA,EAAA,MAAA,EAAA,SAAA,QACD,QAAA,EAAA,EAAA,KAAA,WAAA,GAAA,EAAA,IAChB,GAAA,KAAA,WAAA,KAAA,EAAA,CAAA,EAAA,SAAA,WAAA,CAIQ,KAAK,aAeC,IAAA,KACD,MAAK,MAEV,KACA,CAER,OAAA,KAAA,QAlFwB,MAkFxB,EAAA,GAAA,KAAA,WAAA,WAAA,IAAA,KAAA,KAAA,KAAA,YAAA,IAAA,IAAA,KAAA,cAAA,IAAA,KAAA,QAAA,CAEO,KAAS,cACZ,IAAK,KAAM,YAAoB,EAC/B,KAAK,YAOT,UAAA,EAEA,SAAwB,EACpB,MAAM,EAIF,CAAwC,SACpC,GAAK,QACL,MzD9GuB,EyD8GlB,0EzD9GkB,EyD8GlB,gBzD9GkB,GyD8GlB,yCAAA,CACA,SACL,KAAK,MACL,EAAK,gBACD,GzDlHmB,IyDkHnB,KAAA,UACA,OAAA,KAAA,WAAA,KAAA,aAGJ,KA9GY,GA+GR,KA/GQ,GAmHR,KAnHQ,GAoHxB,KApHwB,GAuHpB,KAvHoB,GA8HxB,KAAA,OAGA,MACI,KAlIoB,GAqId,KAAY,OAAK,KAAa,QArIhB,KAqIgB,KAAA,O,OzD7IL,I,wBAAA,G,SAAA,G,8CAAA,G,mCAAA,G,gD0DXjB,OAAA,eAAA,CAElB,UAAS,KACL,SAAO,GACX,KAAA,GAEO,MAAM,GAET,UAAW,GAAA,YACP,IAAA,OACA,YAAA,CAAA,MAAA,YAAA,GAAA,YACA,KACH,OAAA,KAAA,IAAA,KAAA,+BAAA,EACL,CAEO,MAAA,GAAS,kBAAQ,GAAA,CACpB,SAAiB,EAGjB,cACI,SAAsB,UAId,SAAA,KACA,MAAA,EAAA,KAAA,aAAA,MAEJ,KAAK,KACD,OAAS,KAAK,WACd,KAAA,EAEJ,KAAA,EACI,KAAI,EAKpB,KAAA,OAGI,MACI,K1D9B2B,E0D+B3B,EAAK,KAAK,KAAA,kBAA4B,KAAA,OAAA,KAAA,MAAA,GAAA,KACtC,MACH,QACL,KAAA,QAnCQ,IAmCR,EAAA,KAAA,KAAA,kBAAA,KAAA,KAAA,KAAA,EAAA,KAAA,KAAA,kBAAA,KAAA,YAAA,KAGI,MAAK,CACG,KAAK,kBAGZ,IAAA,KAAA,oBAAA,GACL,SAAA,E,kFCzDyB,MACrB,GAAO,OAAA,OAAA,OAAA,eAAA,CACP,UAAM,KACV,SAAA,GAEO,KAAA,GACH,MAAM,GAGN,UAAO,IAAA,OACG,YAAA,CAAA,MAAA,YAAA,GAAA,YAAA,GAAA,CAAA,MACD,OAAuC,KAC5C,QAC0D,SAC7D,KACL,MAAA,EAAA,KAAA,WAAA,EAAA,KAAA,cAAA,GAEO,MAAS,CACZ,KAAK,YACT,IAAA,KAAA,YAAA,EAAA,KAAA,Y,qGCRyB,MACrB,GAAM,OAAA,OAAA,OAAA,eAAA,CACN,UAAM,KACN,SAAQ,GACZ,KAAA,GAEO,MAAS,GACZ,UAAc,IACd,OACI,YAAQ,CAAA,MAAA,YAAA,GAAA,GAAA,GAAA,UAAA,GAAA,CAQZ,KANA,OAUI,KAAA,OAAsB,MAClB,cAAK,+CAOD,SAAA,GAAA,GAAA,MAEJ,EAAK,gBACD,IAAA,EAAA,EAAQ,KACR,GAAA,KAAA,IAAA,GAAA,KAAA,SAAA,EAAA,KAAA,Q5D7BmB,G4D6BnB,KAAA,SAAA,KAAA,YAAA,EAAA,QAEC,0CACD,KAAA,EACA,E5DjCmB,I4DiCnB,KAAA,gBAAA,GAAA,KAAA,QAAA,KAAA,SAEJ,MACI,KAAA,EAAa,EACT,KAAM,YACF,MAEA,K5DxCW,E4D8CJ,EACV,KAAA,aAAA,MAEsB,K5DjDR,E4DoDnB,EAAA,KAAA,mBAEJ,KACI,MAAK,EAAM,KAAA,SAAA,KAAA,aAAA,KAAA,MAAA,OAC3B,OAAA,KAAA,SAAA,KAAA,QAnDgB,KAmDhB,KAAA,QAAA,CAAA,IAGA,IAAA,KAAA,UAOQ,MACA,QACA,KAAA,4DAEA,KAAA,QACH,CACL,OAAA,KAAA,KAAA,KAAA,IAAA,GAAA,CAEO,KAAS,UACZ,IAAK,KAAM,YACX,EAAK,KAAM,YAQf,KAAA,E,4D5DpFmC,E,iF6DZV,MACrB,GAAM,OAAA,OAAA,OAAA,eAAA,CACN,UAAS,KACT,SAAQ,GACZ,KAAA,GAEA,MAAS,GAEL,UADuB,IAGvB,OAAI,YAAkB,CAAA,MAAA,YACP,GAAA,kBAA2B,GAGnC,CACX,KAAA,OAEO,QAAS,OACZ,MAAM,eAAa,aAMnB,SAAM,GAAQ,EAAA,GAAK,MACf,GAAM,KAAA,SAAA,IAAA,IAAA,GACF,MAA6B,mBAAL,GAClB,KAAoB,MAAK,mBAAI,OAAA,CAEnC,CAKO,SACV,GAAA,EAAA,iBACD,EAAM,KAAK,WAAe,EAAA,KAAA,sBAAA,EAAA,GAAA,KAAA,KAAA,EAAA,EAAA,eAC7B,KAAA,SAED,MAAA,EAAK,KAAK,mBAKN,KACA,MAAK,EAAK,KAAA,WAAmB,EAAK,EAAA,KAAU,MAC5C,OAAA,4DAEA,IAAA,KAAA,eAER,OAAA,KAAA,KAAA,KAAA,IAAA,GAAA,CAEO,KAAS,kBACZ,IAAK,KAAM,YAAoB,EAAU,KACzC,YAEJ,KAAA,E,6C7D5CmC,E,oD8DHV,MACrB,GAAM,OAAA,OAAA,OAAA,eAAA,CACN,UAAO,KACP,SAAA,GACA,KAAA,GACA,MAAA,GACA,UAAQ,IACZ,OAAA,YAAA,CAAA,MAAA,YAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,eAAA,GAAA,CAEA,KAAA,OAGI,KAAA,cAFa,SAEA,YAAS,oBAAA,eACb,OACD,OAAA,cAAS,SAAsB,oBAAoB,YAG3B,gBAGvB,cACD,MAAA,cAAY,SAAW,sCAGvB,SAAA,KAAwB,OAEvB,8BACD,KAAA,EAAY,OACR,KAAM,QArBtB,GAqBsB,KAAA,kBAAA,IAAA,KAAA,QAAA,KAAA,SACF,KAAA,EAEA,OAAA,KAAA,YAMO,K9DlCQ,E8DmClB,OACD,KACW,aAAY,K9DrCJ,E8DyC3B,OAAA,KAAA,mBACI,KACZ,MAAA,EAAA,KAAA,SAAA,KAAA,aAAA,KAAA,MAAA,OACA,OAAA,KAAA,SAAA,KAAA,QAxCA,KAwCA,KAAA,QAAA,CAAA,IAGI,IAAK,KAAQ,UAQT,QAMR,KAAA,MAAA,sDAGQ,CAGJ,SAAK,GAAA,GACT,GAAA,KAAA,SAAA,KAAA,QAhEA,KAgEA,KAAA,QAhEA,IAgEA,CAEO,MAAS,EAAM,KAAO,OAAA,KAAW,YACpC,OAAM,KAAQ,OAAK,KAAA,QAnEvB,KAmEuB,KAAA,OAAA,EAAA,KAAA,CAEnB,CAGA,GAAA,KAAM,QAxEV,IA2EI,MAAsB,IAGtB,KAAA,MAAI,YAAK,EAAA,QAAuB,yBAQzB,CACG,SACD,GAAA,EAAK,WAAkC,MAC5C,EAAA,gBAAA,KACA,SAAA,YAAA,MACA,EAAA,GAAA,KAAA,4DAAA,IACA,EAAA,KAAA,OAAA,OACA,KAAA,gBAAA,qEACA,KAAA,eACH,IAAA,KAAA,YAAA,EAAA,KAAA,YACL,KAAA,EAEO,KAAS,EACZ,eAA+B,EAWnC,OAAA,E,mNC5HyB,MACrB,GAAM,OAAA,OAAA,OAAA,eAAA,CACN,UAAW,KACf,SAAA,GAGO,KAAA,GACH,MAAM,GAGN,UAAI,IAEJ,OAAA,YAAsB,CAAA,MAA4B,YACb,GAAM,WACnB,GAAA,WAEd,GACN,CAGG,KACH,OAAM,SACD,MACL,SACA,GAAA,EAAA,GACH,MAAA,EAAA,KAAA,WAAA,EAAA,KAAA,sBAAA,EAAA,EAAA,cACL,IAAA,EAEO,OAAS,EAAS,EAAM,eAAA,GAAA,EAAA,GAAA,KAAA,KAAA,GAAA,EAAA,KAAA,KAAA,GAAA,KAAA,KAAA,KAAA,IAAA,GAAA,CAC3B,KAAK,WAGT,IAAA,KAAA,YAAA,EAAA,KAAA,Y,6C/DtBmC,E,sEgEXf,OAAA,eACK,CACrB,UAAM,KACN,SAAU,GACV,KAAA,GACJ,MAAA,GAIO,UAAe,GAClB,YAAc,IACd,OAAmB,YAAA,CAAA,MAAA,YAAA,GAAA,kBAAA,GAAA,CAEf,KAAK,OAMT,SAAiB,CAAA,OAAK,MAAA,SACZ,MAIF,SAAA,GAAA,GAKO,MACV,EAAA,KAAA,WAAA,IACD,EAAM,KhEpBqB,IgEoBhB,KACP,UAAoB,EAAA,KAAA,sBAAA,KAAA,IAAA,GAAA,MAChC,EAAA,KAAA,mBACK,KAED,MAAK,EAAK,KACN,WAAyB,EAGtB,KAAA,aAAA,KAAA,MAAA,OACH,OAAM,IAAA,KAAA,MAAA,IAAA,KAAA,cAAA,IAAA,KAAA,QAAA,CAAA,IAEN,IAAA,0BACA,KAAA,IAAU,YAGlB,OAAA,KAAA,KAAA,KAAA,IAAA,GAAA,CAEO,KAAS,kBACH,IAAA,KAAA,YACM,EAAe,KAAK,YAOvC,KAAA,E,4DhE/CmC,E,qEiEbV,MACrB,GAAO,OAAA,OAAA,OAAA,eAAA,CACX,UAAA,KACO,SAAS,GACZ,KAAM,GAEN,MAAA,GAEO,UACG,IAAA,OACD,YAAK,CAAA,MAAmB,YAAe,GAAA,MAAA,GAAA,OAAA,GAAA,CAAA,MAC5C,QAER,SAAA,KACO,MAAA,EAAkB,KAAM,WAC3B,OAAK,KAAM,IjEFoB,GiEER,CAC3B,KAAA,O,kGjEHmC,E,oCkEhBf,OAAA,eACK,CACrB,UAAM,KACV,SAAA,GAEO,KAAA,GACH,MAAO,GAAA,UACG,GAAA,IACN,IAAoD,OAC9C,YAAa,CAAK,MAAA,YAAA,GAAA,aAAA,GAAA,CAC3B,KAAA,QAGE,SAAS,KACZ,MAAK,CACT,KAAA,a,sElECmC,G,2BAAA,E,QmEfV,MACrB,GAAM,OAAA,OAAA,OAAA,eAAA,CACV,UAAA,KAEO,SAAS,GACZ,KAAM,GAGN,MAAA,GAEO,UACG,IAAA,OACD,YAAK,CAAA,MAAmB,YAAe,GAAA,aAAA,GAAA,CAAA,KAC5C,QAER,SAAA,KAEO,MAAA,EAAkB,KAAM,WAI3B,OAAK,KAAM,InENoB,GmEMP,CAC5B,KAAA,a,iGnEPmC,E,YoEbV,MACrB,GAAM,OAAA,OAAA,OAAA,eAAA,CACV,UAAA,KAEO,SAAS,GACZ,KAAI,GAEJ,MAAO,GACH,UAAS,IAIb,OAAO,YAAA,CAAA,MAAA,YAAA,GAAA,GAAA,GAAA,QAAA,GAAA,CAAA,KACH,QACoD,SACpD,KACH,IAAA,EAAA,KAAA,QpEH8B,GoEInC,KAAA,KAAA,QALW,KAOJ,KAAS,IpENmB,GoEMJ,GAAA,IAAA,KAAA,QpENI,GoEO/B,MAAK,CACT,KAAA,Q,iGCvByB,MACrB,GAAW,OAAA,OAAA,OAAA,eAAA,CAAA,UACP,KACH,SAAA,GACL,KAAA,GAEO,MAAS,GACZ,UAAiB,IAIjB,OAFA,YAEQ,CAAA,MAAK,YACK,GAAK,YAEV,GAAA,CAIT,SAAK,EAKT,WAE0C,SACtC,KACH,MAAA,EAAA,KAAA,aACL,IAAA,KAAA,UAAA,KAAA,MAAA,EAAA,KAAA,KAAA,SAAA,KAAA,gBAAA,KAAA,IAEO,KAAS,SAAe,KAAA,OAAA,KAAA,SAC3B,MAAK,CACT,KAAA,Y,oGCxByB,MACrB,GAAuB,OAAA,OAAA,OAAA,eAAA,CACvB,UAAW,KACX,SAAA,GACJ,KAAA,GAEO,MAAS,GACZ,UAAc,IACd,OAAe,YACC,CAAA,MACA,YAAA,GAAA,aAAA,GAAA,CAIhB,SAFK,CAAA,OAED,MAEA,UAAM,CAAQ,OAAK,MAWnB,UARI,aAA4B,OAWxB,SAAA,KAGA,MAAA,EAAA,KAAA,WAAA,IAChB,EAAA,KAAA,EAAA,KAAA,EAAA,QAEY,KAAK,StE7BkB,IsE6BlB,6CAAA,MACL,EAAK,atE9BkB,GsE8BlB,kBAAA,OACA,wDtE/BkB,IsE+BlB,6BACL,KtEhCuB,EsEiCnB,KAAA,SAAA,KAAA,SAAA,OAAA,EAAA,KAAA,UAAA,SAEJ,MAEZ,KAAA,EACA,KAAA,EACQ,KAAA,EACI,KtExCK,EsEyCL,MACA,QAEI,KAAY,MAAK,yCACjB,MAChB,OAEiB,gBACL,KtEjDuB,EsEkDvB,KAAK,EACD,KtEnDmB,EsEqDvB,EAAA,KAAA,UAAA,SACI,MAIZ,KAAO,EACH,KAAM,EACN,KtE5DS,EsE6DT,MACA,QACA,KAAA,MAAA,yCAER,OAEO,KAAS,aACH,IAAA,KAAA,YACI,EAAA,KACL,YAYZ,SAAA,E,4EtElFmC,E,uBAAA,E,sCAAA,E,oEuEfV,MACrB,GAAW,OAAA,OAAA,OAAA,eAAA,CAAA,UACP,KACH,SAAA,GACL,KAAA,GAEO,MAAS,GACZ,UAAiB,IAIjB,OAFA,YAEQ,CAAA,MAAK,YACK,GAAK,iBAEV,GAAA,CAIT,SAAK,EAGT,gBAE0C,SACtC,KACH,MAAA,EAAA,KAAA,aACL,IAAA,KAAA,UAAA,KAAA,MAAA,EAAA,KAAA,KAAA,cAAA,KAAA,YAAA,IAEO,KAAS,OACZ,MAAK,CACT,KAAA,iB,oGCzBO,MAAA,GAAiB,OAAA,OAAA,OAAA,eAAA,CACpB,UAAc,KAEd,SAAA,GAEO,KACH,GAAM,MACD,GACR,UAAA,IACL,OAAA,YAAA,CAAA,MAAA,YAAA,GAAA,GAAA,GAAA,kBAAA,GAAA,GAEO,SAAS,KACZ,MAAK,EAAA,KAAa,WACtB,OAAA,KAAA,SAJA,IAIA,C,yFxEHmC,E,KyEfV,MACrB,GAAiB,OAAY,OAAA,OAAA,eAAA,CAC7B,UAAW,KACf,SAAA,GAEO,KAAA,GACH,MAAK,GAEL,UAAc,IACd,OAAU,YAEN,gCAEJ,IAAA,WAAS,cAgBF,SACG,uBAC0B,SAChC,KAAA,KACA,SACH,MAAA,EAAA,KAAA,WACL,IAAA,EAAA,EAAA,EAAA,EAAA,KAEO,OAAwB,EAAf,KAAS,YAAM,UAAA,KAAA,YAAA,UAAA,KAAA,aAAA,KAAA,UAAA,EAAA,KAAA,WAAA,KAAA,SAAA,KAAA,YAAA,UAAA,KAAA,OAAA,EAAA,KAAA,eAAA,EAAA,KAAA,YAAA,CAC3B,KAAK,MAKT,IAAA,KAAA,YAAA,EAAA,G,iFzE5BmC,E,6B0EfV,MACrB,GAAO,OAAA,OAAA,OAAA,eAAA,CACX,UAAA,KAEO,SAAS,GACZ,KAAA,GAAO,MACH,GAAM,UACD,IAA+C,OACpD,YAAY,CAAmB,MAAA,YAAA,GAAA,SAAA,GAAA,CAClC,MAAA,QAGE,SAAS,KACZ,MAAK,CACT,KAAA,S,gHCfyB,MACrB,GAAO,OAAA,OAAA,OAAA,eAAA,CACX,UAAA,KAEO,SAAS,GACZ,KAAM,GAEN,MAAA,GAEO,UACG,IAAA,OACD,YAAK,CAAA,MAAmB,YAAe,GAAA,WAAA,GAAA,CAAA,MAC5C,QAER,SAAA,KAEO,MAAA,EAAkB,KAAM,WAC3B,OAAK,KAAA,OAAc,CACvB,KAAA,W,4GCdyB,MACrB,GAAa,OAAA,OAAA,OAAA,eAAA,CACjB,UAAA,KAEO,SAAe,GAClB,KAAM,GACN,MAAI,GAEJ,UAAA,IAQO,OACG,YAAA,CAAA,MAAA,YAAA,GAAA,cAAA,GAAA,CAAA,SACD,MACL,SACH,GAAA,EAAA,GACL,MAAA,EAAA,KAAA,WAEO,IAAA,EAAS,KACZ,OAAK,KAAM,IAAiB,GAC5B,EAAA,EAAK,KAAA,KAAa,GAClB,KAAK,KAAwB,KAAG,IAAA,GAAA,CACpC,KAAA,c,wHC9ByB,MACrB,GAAO,OAAA,OAAA,OAAA,eAAA,CACX,UAAA,KAEO,SAAS,GACZ,KAAA,GAAO,MACH,GAAM,UACD,IAA+C,OACpD,YAAY,CAAA,MAAwB,YAAA,GAAA,aAAA,GAAA,CACvC,MAAA,QAGE,SAAS,KACZ,MAAK,CACT,KAAA,a,0HCPyB,MACrB,GAAM,OAAA,OAAA,OAAA,eAAA,CACN,UAAW,KACf,SAAA,GAGO,KAAA,GACH,MAAM,GACN,UAAe,IAIf,OAAA,YAEI,CAAA,MAAK,YACL,GAAO,sBAAK,GACZ,WAAqB,GAAa,CAUrB,KACL,OACH,SAGA,SAEL,OAIM,SACD,KAAuC,MAC5C,EAAA,gBAAA,IACA,IAAA,EAAA,KACH,OAAA,KAAA,IAAA,G9EjC8B,I8EiC9B,KAAA,WAAA,EAAA,KAAA,sBAAA,EAAA,EAAA,cAAA,KAAA,gBAAA,IAAA,EAAA,EAAA,KAAA,aAAA,eAAA,KAAA,KAAA,OAAA,IAAA,KAAA,SAAA,EAAA,KAAA,OAAA,GAAA,KAAA,WAAA,WAAA,EAAA,KAAA,aAAA,EAAA,KACL,KAAA,IAAA,WAEO,KAAS,IAAe,IAAA,EAAA,KAAA,Q9EpCI,G8EoCJ,CAC3B,KAAK,sBAST,IAAA,KAAA,YAAA,EAAA,KAAA,Y,iF9E9CmC,E,oBAAA,E,uE+EXf,OAAA,eACP,CAET,UAAM,KACN,SAAU,GACd,KAAA,GAGO,MAAS,GACZ,UAAc,GACd,YAAe,IAIf,OAAA,YACA,CAAA,MAAc,YAEL,GAAA,wBACO,GAAA,WACZ,GAAqB,CAUR,KACL,OACH,SAGA,SAEL,OAIM,SACD,KAAuC,MAC5C,EAAA,gBAAA,IACA,IAAA,EAAA,KACH,OAAA,KAAA,IAAA,GAAA,KAAA,IAAA,G/EjC8B,I+EiC9B,KAAA,WAAA,EAAA,KAAA,sBAAA,EAAA,EAAA,cAAA,KAAA,gBAAA,IAAA,EAAA,EAAA,KAAA,aAAA,eAAA,KAAA,KAAA,OAAA,IAAA,KAAA,SAAA,EAAA,KAAA,OAAA,GAAA,KAAA,WAAA,WAAA,EAAA,KAAA,aAAA,EAAA,KACL,KAAA,IAAA,WAEO,KAAS,IAAe,IAAA,EAAA,KAAA,Q/EpCI,G+EoCJ,CAC3B,KAAK,wBAUT,IAAA,KAAA,YAAA,EAAA,KAAA,Y,mG/E/CmC,E,oBAAA,E,uEgFZnB,OAAA,eAAA,CAYhB,UAAS,KAGL,SAFA,GAEsB,KAClB,GACI,MAAA,GAAoB,UAEnB,GACD,YAAO,IAAiD,OAE5D,YAAA,CAAA,MAAA,YAAA,GAAA,GACI,SAAA,KACZ,OAAA,KAAA,SAAA,KAAA,WACA,KAAA,EAEa,OAAO,KAAA,SAEhB,KhFjB+B,EgFkB/B,OAAQ,KAAA,SAAU,KAAY,aAAI,KAAA,MAAA,OACtC,QAGO,KAAS,MAAQ,kCAGpB,CAEA,MAAA,GAAA,QAAK,GACD,CAKG,KACH,UAAM,YAAA,MACD,UAAK,WAAmB,OAC7B,SACA,KACH,MAAA,EAAA,KAAA,WAAA,EAAA,GAAA,KAAA,MACL,IAAA,EAAA,KAEO,OAAS,KAAS,SAAM,KAAA,QA/BvB,MA+BuB,KAAA,SA/BvB,IA+BuB,EAAA,GAAA,KAAA,OAAA,CAC3B,KAAK,QAOT,IAAA,KAAA,YAAA,EAAA,KAAA,Y,4DhFjDmC,E,+CiFhBnC,MAAA,GAA8B,OAAA,OAAA,OAAA,eAAA,CAC1B,UAAI,KASR,SAAA,GAEO,KAAM,GAET,MAAO,GACX,UAAA,IAEO,OAAS,YAAuC,CAAA,MAAA,YACnD,SAAM,KACN,OAAI,uIAEJ,CAQO,MACH,GAAM,MAAA,GAAA,CAAA,MACD,QACuC,SAC/C,GAAA,EAAA,GACL,MAAA,EAAA,KAAA,cAAA,KAAA,YAEO,IAAA,EACH,OAAK,KAAA,kBAAmB,KAAA,WAAA,GAAA,KAAA,wBAAA,EAAA,GAAA,KAAA,WAAA,EAAA,GAAA,KAAA,WAAA,WAAA,CAC5B,KAAA,M,2FCtCA,MAAA,GAAsB,OAAA,OAAA,OAAA,eAAA,CAClB,UAAO,KACX,SAAA,GAEA,KAAA,GACI,MAAM,GAEN,UAAY,IAOhB,OAAA,YAAA,CAAA,MAAA,YAEO,SAAM,KAGT,OAAA,KAAU,IAAA,KAAA,8BAAqB,GAEnC,SAAA,KAEO,MAAA,EAAS,KAAQ,eACpB,MAAwB,QAAlB,SACmB,IAAnB,KAAc,KAAK,KAAA,YAAA,GAAA,KAAA,QAAA,CACzB,CAGA,MAAA,GAAI,OAAK,GAAA,OAAA,GACK,CAOP,QACG,uBAAA,MACD,WACL,SACA,KACH,MAAA,EAAA,KAAA,WAAA,EAAA,KAAA,WACL,IAAA,EAAA,EACO,OAAwB,EAAf,KAAS,iBAAM,KAAA,kBAAA,GAAA,OAAA,KAAA,KAAA,GAAA,EAAA,KAAA,OAAA,IAC3B,KAAK,OAET,IAAA,KAAA,YAAA,EAAA,KAAA,Y,iGC3CoB,OACP,eAAY,CACrB,UAAO,KACP,SAAQ,GACZ,KAAA,GAEO,MAAS,GACZ,UAAW,GAGX,YAAa,IAEb,OAAM,YAAmB,CAAA,MAAA,YAAA,GAAA,QAAA,GAAA,CACzB,KAAA,CAAI,eAAK,MAAc,MAGP,MACH,6BACqB,SAE9B,KAUa,IACT,EAAK,KAAA,EAAA,KAAA,KACL,SACH,MACD,EAAK,KAAQ,WAIV,OACH,KAAM,YAAA,IAAA,KAAA,OAAA,KAAA,SAAA,EAAA,KAAA,kBACN,KAAK,cACL,IAAA,kBACA,KAAA,SAAA,anF9B2B,ImF8B3B,6HACH,KAAA,cACL,IAAA,KAAA,KAAA,QAEO,KAAS,SAAe,KAAA,IAAA,IAAA,CAClB,KAAA,QAYb,IAAA,KAAA,YAAA,EAAA,KAAA,Y,oHnF/CmC,E,8DoFjBV,MACrB,GAAW,OAAA,OAAA,OAAA,eAAA,CAAA,UACP,KAAA,SACA,GAAA,KACA,GAAA,MACA,GAAA,UACA,IAAA,OACA,YAAA,CAAA,MAAA,YAAA,GAAA,WAAA,GAAA,CAAA,SACA,EACH,eACL,aAEO,gBACH,oBAGA,sBAKI,wBACA,gBAGR,SAAA,KAEO,MAAA,EAAkB,KAAM,aAAA,KAAA,MAAA,UAC3B,OAAkB,OAAb,KAAA,iBAAa,IAAA,KAAA,MAAA,yBACtB,KAAA,W,4EC1ByB,MACrB,GAAW,OAAA,OAAA,OAAA,eAAA,CAAA,UACP,KAAA,SACA,GACH,KAAA,GACL,MAAA,GAEO,UAAS,IACZ,OAAM,YAAgB,CAAA,MAAY,YAAA,GAAA,eAAA,GAAA,WAAA,GAAA,CAElC,SAAQ,EAGJ,WACI,SAIJ,SAAA,KACR,MAAA,EAAA,KAAA,aAEI,MAAO,KAAA,MACH,EAAM,KAAA,KAAA,YAAA,KAAA,YAAA,IACN,KAAK,OAMT,MAAK,CACT,KAAA,e,2HCzBM,OACA,eAAa,CAEZ,UAAgB,KACnB,SAAY,GAIZ,KAAI,GAEJ,MAAA,GACI,UAAW,GAEX,YAAa,IAET,OAAI,YAAW,CAAA,MAAA,YAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAGX,SAAI,MAGJ,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,GAAA,EANW,KAMX,GANW,KAMX,EAAA,IAAA,EAAA,IAAA,GAAA,EAAA,GAAA,EAAA,WAAA,EAAA,KAAA,EAAA,EAAA,EAAA,EAAA,MAChB,EAAA,GAKY,QAHA,EAAO,EAAI,GAAA,EAAA,IAAc,CAIrB,IAAA,EAAA,EAAM,WACA,GAEN,GAhBW,KAgBX,EAAgB,CAEhC,GAAA,IAAA,EAAA,CAEoB,IAAS,EAAA,IAAc,EAAA,EAAA,OAAe,EAAC,IAI3D,KACY,CAEZ,GAAA,EAAA,EAAA,aAAA,GAAA,GA3B2B,GA2B3B,GAAA,CAEI,MAAO,gBACX,EAAA,EAAA,EAAA,GAAA,GAAA,EAAA,UAAA,EAAA,EAAA,GAIO,MAC+B,KAA5B,GACsC,KAAtC,EAAsC,oBAC5C,MAGA,GAAS,IACL,CAGA,OAAI,CACA,CACA,SAAA,GAAA,EAAA,GAMJ,IAAA,EAAI,GAAQ,GAAA,EACR,IAAA,IAAW,EAAA,EAAO,EAAK,EAAA,OAAW,IAClC,CACA,MAAA,EAAA,EAAA,WAAA,GACZ,IAAA,EAkBA,GAAA,UAAA,GC/Fa,GAAO,KAAA,EAAA,SACK,IAAA,GAAA,GDoBE,KChBpB,GDgBoB,KChBH,GAAA,GAAA,KAAA,EAAA,OAAA,GAAA,GAAA,IAAA,IAAA,GAAA,IAAA,GAAA,MAAA,GAAA,KAAA,GAAA,EAAA,OAAA,GAAA,GAAA,GD2EZ,GAAS,GC1EjB,CAAO,MD8DX,IC7Dc,ED6Dd,GC7Dc,CAC8C,MACpD,GAAO,SAAY,GAAA,CACtB,MAAA,QAGE,SAAS,KACZ,MAAK,CACT,KAAA,S,0EvFAmC,I,2BAAA,E,awFRnC,MAAA,GAAsB,OAAA,OAAA,OAAA,eAAA,CAClB,UAAO,KACX,SAAA,GAEO,KAAM,GAGT,MAAA,GAAW,UACP,IAAA,OACA,YAAA,CAAA,MAAA,YAAA,GAAA,YACA,KAAA,OACA,KAAA,IAAA,SACA,MACA,GAAA,aAAA,GAAA,aAAA,GAAA,CACH,SAAA,EACL,UAEO,MACH,MAEA,SAGA,OACI,SAGQ,SAAA,KAAA,MAEJ,EAAK,oCAED,IAAA,EACI,MAAA,KAAK,KAAM,CACX,OAAA,KAAA,WAAA,KACpB,EAEgB,KAAQ,OACR,SAEJ,KAAK,EACD,GA/BR,KA+BgB,KAAK,WAAK,KAAA,WAAA,IAClB,KAAA,OAEJ,QACI,CACA,EAAA,KAAA,UAKJ,MACI,KxF3CmB,GwF4CnB,EAAA,KAAA,MAGJ,MACI,KAAA,EAChB,EAAA,KAAA,MAEiB,MACjB,KxFpDmC,EwFsD/B,EAAO,KAAA,kBAAA,KAAA,OAAA,IACH,MACA,QACA,EAAA,KAAA,gCAER,EAAA,KAAA,EAEO,CACH,MAAK,CACT,KAAA,a,2GC5EoB,OAAA,eACK,CACrB,UAAA,KACJ,SAAA,GAEO,KAAA,GACH,MAAM,GAEN,UAAwB,GAGxB,YAAoB,IAEpB,OAAK,YACD,CAAA,MAAyB,YAGtB,GAAA,sBAAA,GAAA,CAAA,YACG,eACsC,SAC5C,KACH,MAAA,EAAA,KAAA,WACL,KAAA,IAAA,GAAA,KAAA,SAEO,MAAA,EAAkB,KAAM,cAC3B,OAAK,KAAM,KAAoB,KAC/B,IAAK,GAAU,CAEnB,KAAA,sB,mIC5BA,MAAA,GAAmC,OAAA,OAAA,OAAA,eAAA,CAC3B,UAAK,KAMb,SAAA,GAEO,KAAM,GAET,MAAM,GACV,UAAA,IAUO,OAAS,YAAQ,CAAA,MAAA,YAAA,GAAA,GAAA,GAAA,IACpB,SAAM,K1FVyB,I0FY/B,KAAA,YAE4B,IAFC,KACzB,QAJgB,KAKa,KAAI,MAET,sCAGf,KAAM,MAKZ,CACG,MACN,GAAK,eAAiB,GAAO,CAAe,KAC5C,QAER,SAAA,KAEO,MAAA,EAAkB,KAAM,WAC3B,OAAK,KAAA,QAAkB,KAAA,KAAA,OAAA,GAAA,KAAA,QAAA,GAAA,KAAA,WAAA,QAAA,MAAA,KAAA,OAAA,GAAA,KAAA,QAAA,CAC3B,KAAA,e,0GCxCA,MAAA,GAA2C,OAAA,OAAA,OAAA,eAAA,CACvC,UAAU,KAEV,SAAS,GACL,KAAA,GAEA,MAAI,GACA,UAAA,IAIJ,OAAoB,YACX,CAAA,MAAA,YAAA,GAAA,GAAA,GAAA,GAAA,GAAA,YACD,GAAa,KAE8B,IAC3C,IAAA,IAIJ,IAAE,EAAM,KACR,WAAW,EAAA,EAAA,KAAA,SAA0B,IAAA,CAEjD,MAAA,EAAA,KAAA,WAAA,GAEI,GAba,KAab,GAAW,GACJ,MACX,OAAA,GAAA,KAAA,KAAA,EAAA,EAAA,SAEA,GAAA,IAAiC,KAAK,MAC9B,GAAQ,IAAA,EAAA,gBAAA,EAAA,qCAAA,EAAA,6CAEZ,KACU,EAAQ,GACV,KAAK,MAAM,sBAAyB,EAKhD,CAEA,OAAS,KAAW,OAAM,CACtB,CAGJ,SAAA,GAAA,GAqBA,IAAA,EAAS,EACL,KAAI,KAAY,QAvDH,OAyDb,EAAQ,GAAK,KAAA,MAAS,2BAAA,KAAA,MAAA,CAOd,SAAA,GAFA,GAGI,KAAA,WAA6B,KAAM,cAAa,GAAA,KAAA,OAjE/C,KAiE+C,EAAA,2CAChD,UAChB,KAEY,IAAA,EAAI,EAEA,OAAA,KAAW,WAEX,KAAA,EAChB,GAAA,EAAA,GAAA,KAAA,KAAA,MAAA,KAAA,QA1EiB,IA0EjB,CAEY,GAAA,KAAA,KAAA,EAAA,GAEJ,KAEI,CAMA,GAAA,KAAA,YAAA,GAAA,KAAA,YAAA,EAAA,CAEJ,GAAA,KAAA,KAxFS,IAwFT,GAAA,KAAA,KAAA,MAKI,KACI,CAIA,WAChB,EAEY,EAAI,GAAA,KAAK,KAAQ,GAAY,GAAG,EAAA,GAAA,GAAA,KAAA,KAAA,EAAA,GAC5B,MAEA,QAChB,GAAA,KAAA,SAzGiB,I3FLkB,I2F8GnC,KAAA,UAAA,CAEY,EAAK,GAAA,KAAM,KAAA,MAAA,EAAA,GAAA,GAAA,KAAA,KAAwC,EAAA,GAC/D,KACA,CAEa,QAAO,QA/GH,IAgHJ,CACT,KAAO,OAAA,GAAA,KAAA,KAAA,GACX,KAEO,CACH,KAAM,MAAa,0CAMZ,CACG,MACN,GAAK,eAAiB,GAAO,CAAe,MAC5C,QAER,SAAA,KAEO,MAAA,EAAkB,KAAM,WAC3B,OAAK,KAAA,SAAmB,KAAA,GAAA,KAAA,MAAA,CAC5B,KAAA,e,4GC5IO,MAAA,GAAqB,OAAA,OAAA,OAAA,eAAA,CACxB,UAAY,KACZ,SAAY,GAIZ,KAAA,GACI,MAAA,GAGJ,UAAe,IACX,OAAA,mEAGJ,SAAA,GAAS,GACL,MAAI,EAAO,EAAI,OAEf,IAAA,EAAI,IANJ,KAMa,EAAiB,WAAA,EAAA,GAAA,EAAA,EAAA,EAAA,EAAA,EAAA,GAE1B,KAAA,EAAI,GAAM,GAAK,EAAA,WAAA,KAGX,IAGA,KAAA,EAAA,GAAA,GAAA,EAAA,WAAA,SAMJ,QAHA,EAAO,EAAI,GAAA,EAAA,IAAc,CAIrB,IAAA,EAAA,EAAM,WACA,GAEN,GAxBR,KAwBQ,EAAgB,CAEhC,GAAA,IAAA,EAAA,CAEoB,IAAS,EAAA,IAAc,EAAA,EAAA,OAAe,EAAC,IAI3D,KACY,CAEZ,GAAA,EAAA,EAAA,aAAA,GAAA,GAnCQ,GAmCR,GAAA,CAEI,MAAO,gBACX,EAAA,EAAA,EAAA,GAAA,GAAA,EAAA,UAAA,EAAA,EAAA,GAEO,MAEC,KADA,GACsB,KAAA,EAAA,WAAA,EAAA,IAAA,GAE1B,MACI,GAAM,IAGN,CACI,OAAA,CACA,UACZ,GAAA,GAKQ,IAAA,EAAI,GAAQ,GAAA,EACR,IAAA,IAAW,EAAA,EAAO,EAAK,EAAA,OAAW,IAClC,CACA,MAAA,EAAA,EAAA,WAAA,GACZ,IAAA,EAqBA,GAAA,UAAA,GClGa,GAAO,KACP,WAAY,IAAA,GAAA,GDgBjB,KCXD,GDWC,KCXgB,GDWhB,KCXgB,GDWhB,KCXgB,GDWhB,KCXgB,GDWhB,KCXgB,GAAA,GAAA,KAAA,EAAA,OAAA,GAAA,GAAA,IAAA,GAAA,GAAA,KAAA,GAAA,KAAA,GAAA,EAAA,OAAA,GAAA,GAAA,GDyEZ,GAAS,GCxEjB,CACA,MAAI,YAEJ,CAAsB,MAClB,GAAK,UACD,cACA,SAEC,KACD,MAAK,EAAK,KAAA,WAWV,IAAA,EAAA,OAEJ,KAAA,WACI,K7FrBuB,E6FsBnC,EAAA,GAAA,KAAA,Q7FtBmC,I6FwB/B,MACI,K7FzB2B,E6F0B3B,KAAK,OAAK,KAAA,WAAwB,KAAA,SAAU,SAAA,KAAA,MAAA,+BAAA,KAAA,I7F1BjB,G6F0BiB,KAAA,SAAA,EAAA,GAAA,KAAA,Q7F1BjB,I6F0BiB,KAAA,SAAA,KAAA,KAAA,KAAA,IAAA,GAC5C,MACH,QACL,KAAA,MAAA,+BAGI,MAAK,CACT,KAAA,M,2E7FjCmC,E,a8FjBV,MACrB,GAAa,OAAA,OAAA,OAAA,eAAA,CACjB,UAAA,KAEO,SAAS,GACZ,KAAM,GAGN,MAAO,GAAA,UACG,IAAA,OACD,YAAK,CAAA,MAAmB,YAAe,GAAA,QAAA,GAAA,CAAA,SAC5C,MAER,SAAA,KAEO,MAAA,EAAkB,KAAM,WAAA,EAAA,KAAA,aAAA,KAAA,MAAA,OAC3B,MAAK,CACT,KAAA,Q,oFChB4B,MACxB,GAAM,OAAA,OAAA,OAAA,eAAA,CACN,UAAK,KACL,SAAO,GACV,KAEY,GAET,MAAO,GACX,UAAA,IAEO,OAAS,YAAQ,CAAA,MAAA,YAAA,GAAA,OAAA,OAAA,CACpB,KAAA,aAQJ,IAAA,KAEO,MAAS,MACZ,GAAK,aAA4B,GAAA,CACrC,MAAA,Q,20BCrBI,oBAAS,GACT,aAAA,GACA,aAAG,GACH,OACJ,MCMmB,GAOJ,WAA2B,IACtC,OAAQ,YAAK,CAAA,MAAS,YAAA,GAAA,CAAA,SACb,EACD,gBAAY,MAEhB,GACI,KAAA,IAAsB,GAE1B,GAAK,+BACD,SAAA,GAAA,GAA6D,OAE5D,gBACD,KjGhBuB,EiGkB3B,OAAK,YACD,KAAA,EAEJ,OAAK,gBACD,KAAA,EAEJ,OAAK,iDACD,KjGzBuB,GiG2B3B,OAAK,8CACD,KjG5BuB,EiG8B3B,OAAK,cACD,KAAA,EAIJ,OAAK,iBACD,KAAA,EAEJ,OAAK,kBAED,KAAA,EAOJ,OAAY,KAAA,SACR,KjGhDuB,EiGkDvB,OAAI,KAAS,OACT,KAAS,WACA,KACT,SAAS,iEACT,KjGtDmB,EiG2DnB,OAAS,KACT,MAGJ,KjG/DuB,EiGgEnC,OAAA,KAAA,QAAA,KAAA,WAAA,KAAA,KAAA,QAAA,KAAA,WAAA,EApDa,IAoDb,KAAA,eAAA,KAAA,aACA,KjGjEmC,EiGiEnC,CACA,MAAA,EAAA,KAAA,WAAA,KAAA,YClFe,GD4BF,KC5BE,GD4BF,KC5BE,GD4BF,KC5BE,GD4BF,KC5BE,EACX,uBD2BI,KEnBF,GACY,KACZ,MAAW,gCAIO,KAClB,WACA,GAEN,KACiB,EAEK,CACJ,MACN,GAAK,CAAA,QACC,IACT,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,IAAA,GAAA,IAET,SAAA,GAAA,EAAA,GAES,OAAT,EAAA,MAAmB,eAAA,EAAA,KAAA,MAAA,OAAA,GAAA,eAAA,EAAA,MAAA,EAAA,KAAA,CAEX,KAAK,aACD,IAAA,KAEJ,KAAK,KACuB,CAGxB,SAAA,KAGqC,OAGpC,gBACD,KnG9BuB,GmGgC3B,OAAK,yBACL,KnGjC2B,EmGkCvB,OAAO,KAAK,aAEhB,KAAK,EAEG,OAAK,KAAA,WAAgB,KAAA,EAAU,KAAM,wBAC1B,KAAA,sBAEf,KnGzCuB,EmG2C3B,OAAY,KAAA,eAGR,KAAA,EAAY,KACR,EAAK,OACA,kBAAA,KACL,EAvCP,KAuCY,KACL,WAAK,yEACD,MAAwB,KnGnDT,EmGsDf,OAAA,KAAO,WAAK,KAAA,aAEhB,KA9CP,GA+CO,KA/CP,GAgDW,KAAA,GAEJ,KAlDP,GAmDW,OAAO,KAAK,aAEhB,KArDP,GAsDW,OAAO,KAAK,gBAChC,KAvDS,GAyDG,KAAA,GACZ,OAAA,KAAA,eACA,KA3DS,GA4DT,OAAA,KAAA,aAEe,KA9DN,GA+DL,OAAA,wBCxFY,CACY,MACvB,GAAA,CACL,aAAA,GCHe,QAAA,IAUX,SAPA,KAQI,OAAS,KAAK,qBAEd,KAAA,IAAM,MAAkB,GAMpB,CACI,SAAA,KACI,MAAA,EAAM,KAAA,aAAoB,GAAA,KAAA,SAChB,EAAA,KAAA,KAAA,cAAA,KAAA,SAAA,KAAA,YAAA,EAAA,CAAA,EAAA,KAAA,KACN,YAAK,MAAA,EACL,KAAO,WAAA,EAAA,KAAA,oBAAA,KAAA,MAAA,MAAA,KAAA,IAAA,KAAA,wCAAA,MACV,UADU,EAC/B,MAAqB,EAAA,SAAA,QACD,QAAA,EAAA,EAAA,KAAA,WAAA,GAAA,EAAA,IACpB,GAAA,KAAA,WAAA,KAAA,EAAA,CAAA,EAAA,SAAA,WAAA,CAI2B,KAAA,aAC3B,IAAA,KAEW,YCjCF,KACL,CAOJ,EAAe,KAAA,EACf,CACI,OAAA,CACI,CAI2B,SAE9B,GAAA,GACD,OAAc,OAAd,GAAc,uFAAA,CAElB,MAAA,GAAA,C,yGCjBI,IAAA,IAAO,GACO,OAAA,OAAA,OAAA,eAAA,CACN,UAAM,KAEN,cAAS,GACL,SAAA,GAEA,MAAK,IAC8B,OAEnD,YAAA,CAAA,MAAA,YAAA,GAAA,IAAA,IAAA,2BAAA,GAAA,CAEY,MAAA,CAGH,OAAA,GACD,MAAM,EAAS,KAAO,aAClB,GvGNuB,IuGMvB,KAAO,UAAiB,CACpC,MAAA,EAAA,KAAA,UAAA,KAAA,WAAA,KAAA,UACA,GAAA,IAAA,EAAA,gBAAA,EAAA,KAAA,KAAA,aC1Be,CACX,OAAO,EAAA,KAAA,KAAA,UAAA,cAAA,CACH,EACA,KAAA,CAAA,GAAQ,GACJ,OAAO,KAAK,MAAM,EAC9B,IAEA,GAAA,CCEA,MAAS,CACL,QAAO,KACH,KAAA,GACI,OAAI,KAAA,OAAA,EACA,IAIgB,SAEhC,GAAA,EAAA,GAAA,OACS,KAAA,mBACD,KACH,IACL,OAAA,EAAA,KAAA,KAEM,SACF,KAAQ,SAAA,KAAA,gBAAA,KAAA,GAAA,KAAA,OACJ,IAKA,GAAA,KAAS,KAAA,IAAS,UAKrB,CAEG,MAAA,GAAK,CAEL,KAAA,GAC+B,KAC3B,SAAA,MACA,EAAK,KAAA,aAAA,EAAA,GAAA,KAAA,UAAA,OAAA,OACwB,QAAvB,QAAwC,KAAL,EAAA,QAAe,EAAA,KAAW,GAAA,CAAA,EAGvE,QAAA,GAKR,KAAA,SAGe,MAAA,EAAA,KAAA,aAAA,EAAA,GAAA,KACX,KACI,KAAA,aACI,IAAM,QAAW,MAAK,IAAY,KAAA,UAAA,gBAEZ,OACb,QAAL,EAAK,gCACD,GACA,GAAA,CAAA,MAEJ,CAAK,UAED,MAAS,EAAA,KAAK,aACd,OAAA,KAAA,WAEJ,KzGrDmB,EyGsDf,EAAA,KAAK,KAAM,UAC/B,MAEY,KzGzDuB,EyGkF1B,KzGlF0B,EyGmF3B,EAAO,KAAA,KAAA,OACf,MCtGe,QACJ,KAAA,MAAA,+BAEC,OAAO,KAAK,S1GeW,I0GfX,KAAA,WAAA,KAAA,OAAA,KAAA,WAAA,KAAA,SAAA,SAAA,EAAA,KAAA,KAAA,c1GeW,I0GfX,KAAA,WAAA,KAAA,OAAA,KAAA,WAAA,KAAA,SAAA,WAAA,EAAA,KAAA,KAAA,SAAA,KAAA,KAAA,KAAA,S1GeW,I0GfX,KAAA,WAAA,KAAA,OAAA,KAAA,WAAA,KAAA,SAAA,cAAA,EAAA,KAAA,KAAA,SAAA,KAAA,M1GeW,I0GfX,KAAA,gBAAA,IAAA,KAAA,gBAAA,KAAA,IAAA,EAAA,KAAA,KAAA,kBAAA,CAAA,EACM,MACjB,OACJ,GACD,CACI,MAAA,CACZ,OAAA,GACA,OAAA,KAAA,qBCVe,KAAA,YAEP,EACI,KAAA,GAAY,OACH,KAAA,OAAA,EAAc,IAE1B,GACD,CACI,MAAA,CACZ,OAAA,GACA,OAAA,KAAA,qBCVe,KAAA,iBAEP,EACI,KAAA,CAAA,GAAO,GAAK,OACH,KAAA,MAAA,EAAY,IAExB,GACD,CACI,MAAA,CACZ,OAAA,GACA,OAAA,KAAA,qBCVe,KAAA,eAEP,EACI,KAAA,GAAY,OACH,KAAA,OAAA,EAAY,IAExB,GACD,CACI,MAAA,CACZ,OAAA,GACA,OAAA,KAAA,qBCVe,KAAA,eAEP,EACI,KAAA,GAAY,OACH,KAAA,OAAK,MAEjB,GACD,CACI,MAAA,CACZ,OAAA,GACA,OAAA,KAAA,qBCVe,KAAA,QAEP,EACA,KAAA,CAAM,GAAS,GACX,OAAO,KAAK,MAAM,EAC9B,ICLe,GAAA,CACX,MAAO,CACH,QAAA,KACI,KAAA,CAAA,GAAO,GAAK,OACH,KAAA,MAAU,EAAU,IAEhC,GACD,CACI,MAAA,CACZ,OAAA,GACA,OAAA,KAAA,qBCCe,KAAA,UAAA,YAEX,EACA,KAAA,CAAQ,MACR,OAAA,aACA,IAEA,GAAA,CACA,UAAA,GACA,YAAA,GACA,OAAA,GACJ,MAAA,GCpBO,MAAS,GACZ,KAAM,GAEN,KAAK,GAEL,MAAM,GACF,iBAAa,GAAS,SACb,IAED,SAAA,KAAA,MAEJ,EAAK,kBACD,KAAA,SACA,EAAA,MAAA,KAAA,KAAA,QAEC,gBACD,KlHAmB,EkHCnB,EAAA,KAAA,KAAA,cAEJ,MACI,KlHJmB,EkHMvB,EAAA,KAAA,KAAA,UACI,MAChB,KAAA,EAEQ,EAAK,KAAA,KAAQ,YACrB,MAEI,KAAO,EACX,MAAA,EC9BM,QACF,KAAQ,MAAA,2CACQ,KACR,QAAiB,CAE7B,OAAA,CACA,CAEiB,MACb,GAAQ,CACJ,KAAA,GAAY,OACH,KAAA,qBACR,KAAA,eAET,GAGI,GAAA,CACI,KAAA,GAAY,OACH,KAAA,qBACR,KAAA,WAET,GAGI,GAAA,CACJ,KAAA,GAGI,OAAQ,KAAA,qBACJ,KAAO,aACK,GAEpB,GAAA,CACA,MAEe,IACX,GAAO,CACP,KAAA,GACA,OAAQ,0BACR,KAAW,MAEX,GACA,GAAA,CACA,IAAA,GACA,IAAO,GACP,KAAA,GACA,QAAA,GACA,GAAA,GACA,WAAA,GACA,cAAW,GACX,MAAQ,GACR,IAAA,GACJ,YAAA,G,qtBCjDI,oBAAc,GAAA,aACD,GAAA,aACG,GAAA,IACZ,GAAQ,MACR,GACI,WAAO,IAAiE,OAC3E,YAAA,CAAA,MAAA,YAAA,GAAA,CAAA,aACD,CACA,QAAA,aACA,WAAU,aACN,OAAA,SACH,aAAA,CAAA,GACD,OAAM,KAAA,cAAA,EAAA,OAAA,OAAA,EAAA,QAAA,KACN,EACA,eAAU,iBACV,WAAQ,aACJ,SAAA,CAAO,GACV,OAAA,KAAA,UAAA,EAAA,KACD,EACA,KAAA,OACA,aAAO,eACV,SAAA,WACD,KAAA,GACI,OAAA,KAAU,OAAA,IAEF,gBAAY,kBAAU,YACtC,cACS,MAAA,SACU,SACP,CACI,SAAA,CAChB,QAAA,GACA,OAAA,KAAA,UACK,GAED,UAAA,CACA,KAAA,GACA,yBCzCW,ICIX,MAAG,GACH,OAAG,GACH,OAAG,GACN,KCIY,IACT,GAAA,CACA,KAAA,IACA,GAAA,GAAA,IACA,MACA,MAEA,MAEA,SAAA,GACA,MAAA,GAEA,SAAA,GACA,MAAA,GAEA,YAAA,GACJ,KAAI,GC3BG,KAAA,GAGL,SAAgB,GAClB,QAAA,GACO,cAAqE,GAC1E,gBAAY,GACd,KAAA,IACO,GAGL,SAAO,GAAK,GACd,gCAAA,EAAA,IACO,CAGL,SAAO,GAAK,GACd,cAAA,EAAA,IACO,CACL,SAAO,GAAK,GACd,sBAAA,EAAA,IACO,CAGL,SAAO,GAAK,GACd,qBAAA,EAAA,IACO,CACL,SAAO,GAAK,GACd,gBAAA,EAAA,IC3BO,CAAiC,SACtC,GAAA,GACA,mBAAA,EAAA,IAAA,CACA,SACA,GAAA,GACA,eAAA,EAAA,IACF,CAKO,MAAA,GAAS,CAOd,kBAEA,wBAAoC,6BAE5B,sBAMiB,uBAGxB,GAAA,iDAEK,SAAA,GACJ,GAOK,IAAA,EAJa,GAAc,EAAgB,GAAA,GAChD,EAAA,CACD,KAAA,CAAA,GAGH,GAAA,GAAA,EAAA,EAAA,KAAA,GAAA,IAAA,KAAA,OAAA,IAAA,EAAA,EAAA,MAEO,IAWA,OAAS,GAFhB,KAAA,GAAA,MAAA,EAAA,GAAA,WAAA,MAAA,EAEkE,CAGzD,QAFU,YAKZ,CAIL,SAAkB,GAAA,GAAA,OAChB,EAAO,SAAA,qBAAA,GAAA,EAAA,CAED,SAAA,GAAK,GACD,WAAA,GAAA,WAAwC,EACzC,CAA4B,SAAA,GAAA,GAAA,GACnC,EAAA,CAEH,MAAA,cACH,KAAA,CAAA,EAAA,EAAA,GC9DA,GAAoD,yBAA3C,EAAqB,SAAsB,CAO5C,MAAuB,KACf,GAMP,EAAA,QAAM,EAAS,EAClB,CAEI,GAEF,UAAA,GAAA,GAEF,MAAA,EAAK,GAAW,EAAA,MAAA,SAAA,MAAA,GAAA,GAAA,GAAA,EAAA,GAAA,GAAA,IAAA,yBAAA,EAAA,WAAA,EAAA,MAAA,MAAA,SAAA,SAAA,CAAA,EAAA,EAAA,KACjB,IAAA,GAAA,IAAA,yBAAA,EAAA,SAAA,CACH,GAAA,GAAA,GAGE,YADgB,EAAA,GAGV,EAAA,OAAK,EAEP,IAEF,EAiBE,GAAA,EAAA,CAEE,MAAA,OACE,KAAA,CAAA,EAAI,EAAkB,GAAmB,GAAA,KAC1C,SAAA,GAAA,SAAA,KAAA,OAAA,MACD,aAAA,EAAA,EAAA,MAAA,SAAA,MAAA,GAAA,GAAA,IAAA,yBAAA,EAAA,WAAA,EAAA,EAAA,QAAA,SAAA,MAAA,KAAA,GAAA,MAAA,SAAA,MAAA,GAAA,GAAA,IAAA,GAAA,SAAA,EAAA,UAEF,IAAK,IAAO,EACZ,OAAA,EAAA,UAAA,MAAA,SAAA,SAAA,CAAA,EAAA,EAAA,KAGA,GAA8B,IAAA,EAAA,OAAA,EAAA,SAMtC,EAAS,OAAuC,GAS5C,GAAM,EAAM,EACV,GAGM,CAGQ,SAAA,GACN,GAA6M,OAC/M,GAAA,EAAA,CAIE,MAAA,wBACN,KAAA,CAAK,EAAA,EAAA,GAA2C,GAAA,GAAA,SAAA,EAAA,MAAA,CAClD,MAAA,EAAA,EAGG,qDACT,kGAAA,EAAA,IAAA,WAAA,EAAA,IAAA,iBAAA,EAAA,IAAA,MAAA,iBAAA,EAAA,IAAA,MAAA,SAAA,KAgBQ,MAAS,EAR6B,GAAA,GAAA,EAAA,QAAA,EAAA,GAAA,GAAA,CAG1C,IACA,CAAY,CACS,SACrB,GAAA,GACF,MACuD,EAAA,GAAA,EAAA,CC3HzD,oBAAoC,EAGlC,YAAwB,EAGxB,qBAAyB,EACnB,WAAW,IAEP,OAAA,GAAA,GAAc,GAAW,GAAA,GAAA,GAAU,GAAA,EACzC,CACsB,eAAgB,KAAW,MAAA,EAAA,IAAA,SAAA,aAAA,EAAA,IAAA,IAKrD,UAA0B,KAAY,EACpC,GAAC,uBAA0B,iBAAqB,CAE5C,4BAAgE,mCACtE,MAAM,EAAQ,EAAA,UAAA,YACM,IAAI,EAAA,SACpB,EAAA,IAAM,IACN,CAIM,MAAA,EAAA,UAHkC,GACtC,EAAA,qBAAmB,kBAAW,EAEc,IAAA,UACpB,QAA4B,IACvD,EAAA,KAAA,MAAA,IACH,MAAA,EAAA,EAAA,KAGA,IAAM,EAAiC,OASvC,MAAA,cAAc,MAAA,EAAA,CACO,QAA0B,CAAA,OAAA,eACvC,OACE,EAAA,IAAA,IAAe,KAGzB,MAC0B,EAAK,EAAA,KAAA,GAAA,EAAA,IAAA,IAAA,EAAA,IAAA,KAAA,EAAA,GAAI,aAAA,QAAA,IACrC,EAAA,KAAA,ICnDa,aACX,MAAA,EAAc,GAAA,GACN,EAAA,KAED,EAAA,KAIP,EAAA,KAAA,KAWc,OAEd,WAAA,YACE,WAAA,GAUY,QAAA,KAAA,KAAA,GAAA,KAAA,eAAA,IAAA,EAEd,CACM,gBAAA,CAAK,EAAA,GAMG,OAAA,KAAA,KAAA,EAAA,KAAA,aAAA,OAAA,GAAA,KAAA,eAAA,EAAA,KAAA,eAAA,aAAA,KAAA,SAAA,IAAA,GAAA,KAAA,SAAA,MAAA,KAAA,KAAA,KAAA,gBAAA,KAAA,YAAA,KAAA,WAAA,KAAA,QAEhB,CACA,gBAAA,CAAM,EAAqB,GAUzB,OAAA,KAAc,KAAA,EAAA,KAAA,aAAA,OAAA,GAAA,KAAA,eAAA,EAAA,KAAA,eAAA,aAAA,KAAA,SAAA,IAAA,GAAA,KAAA,SAAA,MAAA,KAAA,KAAA,KAAA,gBAAA,KAAA,YAAA,KAAA,WAAA,KAAA,QACP,CAIgC,WAAA,GAEzC,OAAA,KAAA,eAAA,aAAA,KAAA,SAAA,IAAA,GAAA,KAAA,SAAA,MAAA,KAAA,KAAA,KAAA,gBAAA,KAAA,YAAA,KAAA,WAAA,KAAA,QAhBE,EAAoB,MAAA,GAAA,MAAA,EAAA,WAAA,GAAA,KAAA,QAAA,SAAA,cAAA,OAAA,KAAA,QAAA,UAAA,IAAA,0BAAA,KAAA,QAAA,SAAA,cAAA,SAAA,KAAA,QAAA,YAAA,EAAA,WAAA,KAAA,QAAA,YAAA,KAAA,QAAA,GADtB,GAAA,WAAA,8IAwB6C,IAO3C,GAAM,GAEJ,MAAA,WADK,YAEH,WAAA,GAAU,QACR,KAAA,KAAA,GAAA,KAAA,eAAA,IAAA,GAAiF,MACnF,EAAA,IAAA,GACF,KAAK,aAAK,EAAA,OACR,CAAU,KAAA,CACR,EAAA,GAAmF,GACrF,KAAA,KAAA,GAAA,KAAA,MACG,UAAA,MAGL,6EAAmD,KAOf,IAAA,KAAA,QAEtC,UAAA,MAGE,+EAEwB,KAGlB,KAAA,aAAc,OAAW,GAAA,KACjB,eAAM,EAEd,MAAA,EAAM,KACJ,aAAiB,CAAA,KAAA,WACnB,KAAA,aAAoB,wDAAA,kBAAA,GAOtB,KAAA,aAAI,iBAAgC,wBAAA,SAAA,IAClC,GAAQ,aAAM,YAAW,CAGzB,EAAA,MAAM,SACK,SAAQ,EAAA,MAAa,UAAA,QAAoB,EAAK,MAAG,SAAK,QACjE,MAAQ,EAAA,SAAY,8CAAA,EAAA,UAAA,CAEvB,KAMG,KAAA,aAA+B,iBAAa,yBAAA,SAAA,IAChD,GAAA,aAAA,YAAA,CACF,EAAA,MAAA,SAAA,SAAA,EAAA,MAAA,UAAA,QAAA,EAAA,MAAA,SAAA,QAEE,MAAK,EAAA,SAAiB,EAAA,aAAK,uBAC3B,MAAmC,EAIrC,EAAA,UAAA,CAEF,KAWM,MAAA,EAAK,KAAA,aAAmB,cAGX,sCAUjB,KAAA,eAAmB,KAAA,aAAA,cAAA,aAAA,eAAA,KAAA,mBAAA,mBAAA,EAAA,MAAA,iBAAA,KAGf,cAAA,CAAyB,EACzB,EAAe,IAAW,GAC1B,IAAA,EAAA,GAAA,EAAA,EAAA,EAAA,KACF,KAAK,mBAAA,gBACH,OAAsB,EACpB,EAAe,EAAU,IAEzB,GAAe,CAAW,EAEb,KACf,MAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,OACG,GACH,IAAI,OAMJ,EAAA,EAAA,EAAA,EAAA,EAAA,EACF,MACiB,IAAA,UAEf,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,MAIJ,IAAA,QAOiD,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAEnD,MASE,IAAI,aACK,EAAA,EAAA,EAAA,EAE0B,OACjC,EAAA,OAAA,MAAA,GAAA,EAAA,EAAA,EAAA,OAAA,MAAA,GAAA,EAAA,EAAA,EAAA,WAAA,EAAA,QAAA,IAAA,EAAA,WAAA,EAAA,QAAA,IAAA,EAAA,SAAA,MAAA,KAAA,CAAA,EAAA,EAAA,EAEF,CAOI,uBAAA,CACA,WACA,GAAA,KAAgB,mBAAe,gBAG3B,MAAA,CACN,IAAY,KAAoB,MAC7B,KAAS,OAIE,IAAA,CAAA,IAAA,MAAA,KAAA,QAMZ,MACA,oJACA,IAAA,EAAgB,EAclB,EAAK,EAbC,GAAA,EAAA,SAAiB,MACvB,MAAW,EAAqB,WAC7B,GAAA,IAIW,IAAA,EAAA,GAAA,GAAA,WAAA,OAAA,MAAA,IAAA,EAAA,GAAA,GAAA,WAAA,OAAA,KAEL,MAIJ,EAAA,EAAA,EAAA,EAC6B,GAClC,EAAA,SAAY,KAAQ,CACtB,MAAA,EAAA,WAAA,GAAA,IAAA,IAAA,EAAA,GAAA,GAAA,WAAA,OAAA,MAAA,IAAA,EAAA,GAAA,GAAA,WAAA,OAAA,KAEF,MAME,EAAK,EAAA,EAAA,EAAa,MAChB,CAAA,IACE,CAAA,IAAA,EAAA,KAAA,GAAA,IACE,CAAA,IAAA,EAAW,QACM,CACnB,YAAA,CACA,EAAA,EAAA,EAAA,GAAA,KAAA,aACa,QAAA,CACM,CAErB,UAAA,EACA,gBAAA,YAEE,CACA,UAAM,EACN,gBAAQ,aAEZ,CAEJ,SAAA,EACa,WAA8C,EACnD,KAA8C,WAC7C,OAAA,GAUC,EAQJ,MACA,cAAA,KAAA,CACA,KACF,OACyD,KAAA,MAAa,EAAqB,IAAI,MAAI,KAA0B,QAAO,EAC9H,WAAmD,MAAkC,MAAI,EAAI,EAE5F,yBAAA,GACL,MACA,wHACA,EACF,EAAA,GAGM,MAAA,CADR,aAA4D,EAAA,IAAA,SAAA,EAAA,IAAA,OAAA,aAAA,EAAA,IAAA,SAAA,EAAA,IAAA,OAOxD,EACA,CACA,cAAA,CACA,GACF,MAAA,EAAA,KAAA,eAAA,IAAA,MAAA,EAAA,KAAA,eAAA,IAAA,OAAA,EAAA,KAAA,eAAA,IAAA,MAAA,EAAA,KAAA,eAAA,IAAA,OAAA,OAAA,MAAA,eAEF,EAQQ,EAIN,EACE,EACA,EACA,CACA,uBAAA,CACA,OACF,MAAA,EAAA,KAAA,aAAA,YAAA,EAAA,KAAA,aAAA,aAAA,EAAA,KAAA,MAAA,EAAA,GAAA,EAAA,KAAA,MAAA,EAAA,GAAA,OAAA,MAAA,wBAEF,EACQ,EACJ,EACA,EACA,EAEF,CAAa,YAAA,CACX,KAAA,MAEA,EACA,EACF,GAAA,KAAA,2BAEJ,OAAA,MAAA,aACa,EACX,EACO,EAE2B,GAAA,KAAA,IAQ1B,EAQJ,MACA,cAAA,KAAA,CACA,KACF,KACM,MAAmD,EAAA,IAAA,MAAsC,KAAI,QAA8B,EAAA,WACxE,MAAA,MAAa,EAAqB,EAEpF,yBAAA,GACL,MACA,wHACA,EACF,EAAA,GAGM,MAAA,CADR,aAA4D,EAAA,IAAA,SAAA,EAAA,IAAA,OAAA,aAAA,EAAA,IAAA,SAAA,EAAA,IAAA,OAOxD,EACA,CACA,cAAA,CACA,GACF,MAAA,EAAA,KAAA,eAAA,IAAA,MAAA,EAAA,KAAA,eAAA,IAAA,OAAA,EAAA,KAAA,eAAA,IAAA,MAAA,EAAA,KAAA,eAAA,IAAA,OAAA,OAAA,MAAA,eAEF,EAQQ,EAIN,EACE,EACA,EACA,CACA,uBAAA,CACA,OACF,MAAA,EAAA,KAAA,aAAA,YAAA,EAAA,KAAA,aAAA,aAAA,EAAA,KAAA,MAAA,EAAA,GAAA,EAAA,KAAA,MAAA,EAAA,GAAA,OAAA,MAAA,wBAEF,EACQ,EACJ,EACA,EACA,EAEF,CAAa,YAAA,CACX,KAAA,MAEA,EACA,EACF,GAAA,KAAA,2BAEJ,OAAA,MAAA,aAEA,EACA,EACA,GAAA,KAAA,IClbqB,EAEX,EAOmC,eAC3C,OAA+B,6BAAgC,IAC7D,eAAK,OAAA,sBACA,IASC,eAAsC,OAAK,sBAAoB,IACrE,MAAA,WAAK,YAE2B,WAAA,GAElC,QAAA,KAA2D,eAAiB,GAAA,KAAA,eAAA,IAAA,GAAA,KAAA,UAAA,IAAA,GAAA,KAAA,WAAA,SAAA,cAAA,QAQpE,CAAmC,gBAAA,CAAA,EAAA,GAE3C,KAAA,eAA+D,EAAA,KAAA,aAAA,OAAA,GAAA,KAAA,eAAA,EAAA,KAAA,UAAA,IAAA,GAAA,KAAA,SAAA,KAAA,UAAA,iBAAA,EAAA,GAAA,KAAA,UAAA,KAAA,aAAA,KAAA,UAAA,GAC7D,MAAK,EAAA,KAAA,eACA,OAQC,KAAA,2BAA0D,GAAK,KAAA,YAAA,KAAA,WAAA,KAAA,YAAA,KAAA,WACrE,CAEgC,YAAA,CAAA,EAAA,GAElC,EAAA,MAAA,QAAc,EAAA,UACP,CAAsC,gBAAA,CAAA,EAAA,GAE7C,KAAA,eAAQ,EAAA,KAAA,aAAA,OAAA,GAAA,KAAA,eAAA,EAAA,KAAA,UAAA,IAAA,GAAA,KAAA,SAAA,KAAA,UAAA,iBAAA,EAAA,GAGF,MAAC,EAAK,KAAA,eAAU,OACZ,gCAAmD,GAAA,KAAK,YAAA,KAAA,WAAA,KAAA,YAAA,KAAA,WAC9D,CAAsC,WAAA,GACkB,KAAA,SACtC,KAAK,UAAA,aAAA,CACE,KAAA,GACM,IAAA,KAAA,SACb,CAAkB,MAAA,EAAA,KACrB,eAAgB,OAqBN,OArBM,KAAA,eAAA,gBACF,8CACU,KAAA,uCAAA,EAAA,2BACG,EAAA,+BACN,EAAA,qCAG/B,EAAA,oCAGH,EAAA,yCAAuD,EAAA,6CAAA,EAAA,2CAGzD,EAAA,0CACA,EAAA,gCAGI,KAA+B,cAAK,KAAA,eAAoB,iBAAA,KAAA,aAAA,iBAAA,KAAA,cAC9D,oCAAoB,KAAkB,0FAIL,CACK,MAAA,EAAA,KAAA,eACL,OAAA,KAAA,eACT,gBAAsB,8CACL,KAAA,uCAAA,EAAA,2BACG,EAAA,+BACN,EAAA,qCAGjC,EAAA,oCAIE,EAAA,yCACH,EAAA,6CAAuD,EAAA,2CAAA,EAAA,0CAGzD,EAAA,gCACA,KAAA,cAAA,KAAA,eAAA,iBAAA,KAAA,aAAA,YAAA,KAAA,UAY+D,KAAA,aAAA,KAAA,UAAA,GAAA,KAAA,eAAA,eAAA,uDAAA,KAAA,8DAKpB,KAAA,eACJ,IAAA,kCAAmB,KAAA,eAAA,IAAA,iCACc,KAAA,eAAA,IAAA,2CAGvD,KAAK,eAAe,IAAA,kDAE0B,KAAA,cAAA,KAAA,eAAA,gBAAA,KAAA,eAAA,uBAAA,gDAIzC,KAAe,iFAEK,KAAc,qCAAA,KAAA,cAAA,KAAA,eAAA,wBAAA,KAAA,eAAA,uBAAA,qDAGd,KAAA,wEAIvC,KAAA,cAAc,KAAK,eAAe,wBAAsB,KAAA,eAAA,uBAAA,8CAAA,KAAA,sKAInB,KAAM,kIAGhD,KAAI,cACmC,KAAA,eAAA,yBAzClC,KAAA,cAEgC,oCAAA,KAAA,yFAuCE,CACwB,aAAA,CACnD,GAAqD,MAC7D,EAAA,KAAW,WAAK,aAAmB,GAAA,KACnC,WAAa,YAAK,EAAA,OAAmB,EAAA,CACF,cAAA,CACnC,EAAA,OAAyC,MACzC,QAAA,EAAmB,CACnB,MAAA,KAAA,eAAqB,IAAA,MAAe,WAAI,OAAA,MACxC,OAAA,KAAa,eAAK,IAAA,OAAmB,WAAA,OAAA,MACvC,UAGqC,KAAA,eAAA,IAAA,UACnC,YAAY,KAAA,eAAmB,IAAM,YACrC,UAAQ,KAAK,eAAe,IAAI,UAChC,gBAAgB,KAAA,eAAmB,IAAA,gBACnC,aAAa,KAAK,eAAe,IAAI,aACrC,eAAgB,KAAA,eAAmB,IAAA,aACnC,YAAA,KAAiB,eAAK,IAAe,aACrC,CACA,MAAA,KAAA,eAAqB,IAAA,MAAe,WAAI,OAAA,MACxC,OAAA,KAAa,eAAK,IAAA,OAAmB,WAAA,OAAA,MACvC,UAAA,KAAA,eAAA,IAAA,UAEF,YAAA,KAAA,eAAA,IAAA,YAEF,UAAA,KAAA,eAAyD,IAAA,UAClD,gBAAA,qDAAL,KAAA,eAAA,IAAA,aACE,eAAQ,KACR,eAAS,IACT,eAMc,YATX,KAAA,eAAA,IAAA,YAYG,CACN,0BAAA,CACW,GAA4B,IAAA,EAEzC,IAAA,KAKM,IAAA,EAAQ,KAHhB,MAAA,QAAA,EAAA,OAAgD,SAAA,EAAA,UAAA,YAAA,EAAA,YAAA,eAAA,EAAA,UAAA,YAAA,EAAA,gBAAA,mBAAA,EAAA,aAAA,iBAAA,EAAA,eAAA,kBAAA,EAAA,YAAA,eAIvC,UAAA,EAAA,KAAA,OAAA,QAAA,GAAA,CACL,MAAK,EAAA,EAAA,GACL,GAAK,KAAA,MAAA,YAAA,EAA8B,EACrC,EAEF,2BAAA,GACE,MAAM,EAAa,iBAAoB,MAEd,MACZ,CACF,KACL,8BAAA,KACmB,yBAAiC,GAEvD,CAE8B,0BAAA,CAC/B,GACF,MAAA,EAAA,EAAA,cAAA,MAAA,MAAA,EAAA,EAAA,kBAAA,MAAA,MAAA,EAAA,IAAA,IAEO,EAAA,KADU,GAAA,CACV,EAET,EAAA,EAAA,QAAA,QAcE,IAVE,kCACS,KAAA,kBACL,OACkD,IAAjC,WAAiC,GAAA,KAErD,wBAAA,CAEuB,GAAA,MACxB,EAAA,EAAA,cAAA,MAAA,MAAkC,EAAK,EAAA,wBAAc,MAAA,MACvD,OACiB,IAAA,IAAA,EAAA,KAAA,GAAA,CAEnB,EACE,EAAM,EAAC,QAAoB,QAEmC,IAElE,kCAAA,KAAA,mBACA,MCrQA,cAAA,GAEU,MAAA,EAAA,GAAA,KACC,8BAQK,KAAA,UAAA,KAAA,SAAA,aAAA,EAAA,GAAA,KAAA,UAAA,KAAA,SAAA,aAAA,EAAA,EAChB,EAEoC,eAApC,OAAA,wBAAA,IAEE,MAAA,GAYoB,WAAA,GACtB,KAAA,MAAA,EAAA,KAAA,OAAA,EAAA,KAAA,eAAA,UAAA,KAAA,UAAA,UAAA,KAAA,YAAA,UAAA,KAAA,UAAA,UAAA,KAAA,gBAAA,UAAA,KAAA,aAAA,UAAA,KAAA,eAAA,UAAA,KAAA,YAAA,SC/BO,EAEG,MAAA,GAEuB,WAAA,GAEjC,KAAA,IAAA,IAAA,GAAA,KAAA,eAAA,GAAA,KAAA,uBAAA,GAAA,KAAA,gBAAA,GAAA,KAAA,uBAAA,GAAA,KAAA,uBAAA,GAAA,KAAA,KAAA,GAAA,KAAA,IAAA,IAAA,EACA,ECkBwC,MAEtC,WAAyC,YACvC,WAAA,GACgB,QAAA,KAAA,aAAA,sBAAA,KAAA,aAAA,WAEpB,EAU2C,eAoFzC,OAAc,kBAAA,IAjBe,MAAA,WAAA,MAOI,WAAA,CACjC,EAAA,GAIqC,MAAA,GAAA,KAAA,SAAA,CA9ErC,EACiD,MAAW,GAAA,MAAA,EAmF5D,WAAA,GlI9HK,KAAA,yPkIqIC,KAHJ,kBAAa,GAAA,KACb,oBAAK,CAGE,8BACH,GAAA,QACF,SAAA,cAAA,kBACA,0BAAA,CAAA,EAAA,GAEG,IAAA,EAGD,GAAA,KAAA,MAAA,kBAAA,KAAA,mBAAA,EAAA,IAAA,KAAA,SAAA,GAAA,EAAA,yBAKI,YAJA,KAAA,eACD,sFAQC,KAAA,sBAAA,IAAA,GAAA,SAAA,gBAAA,YAAA,KAAA,uBAGR,IAKI,MAAA,QAAA,KACG,KAAA,mBAAmB,SAAA,cAAA,SAA2B,KAAA,mBAAA,YAAA,CAAA,OAC5C,GACP,MAAI,eAAa,6FACf,MAAA,KAAA,eAAA,IACF,CAEF,KAAK,kBAAgB,KACrB,sBAAK,YAEA,KAAA,oBACM,KAAA,eAAyB,KAAA,KAAA,cAE9B,IACG,IAEL,IACE,iBACC,KAAA,4BACQ,OACN,GACF,GAAA,aAAA,GAEL,OAGF,KAAA,gBAAK,OAAA,KAAL,qBAAyB,KAAA,cAAA,SAAA,yBAAA,YAAA,SAAA,mBAAA,EAAA,SAAA,KAAA,aAAA,YACrB,IACI,SAAoB,IAAM,KAAY,mBAAA,mBAAA,UAAA,KAAA,MAAA,wBACvC,OAAA,GAIC,OAFwD,KAAA,mBAChD,mBAAA,OAAA,QAAA,KAAA,eAAA,EAKd,CACM,OAAA,EAAA,KAAA,qBAAA,EAAA,SAGJ,IACG,MAAA,QAAA,KAA8C,KAAA,mBACzC,SAAA,cAAA,SAAA,KAAA,mBAAA,YAAA,EAAA,KAAA,sBAAA,YAAA,KAAA,mBACV,OAAI,GACF,MAAA,EAAA,aAAA,MAAA,+DAAA,EAAA,QAAA,EAAA,UAAA,EACF,MAAA,KAAA,eAAA,IAEF,CAcA,IAFE,KAAA,YAAS,KAAA,4BAAA,CACV,MACwC,GACpC,GAAA,aAAA,GACmB,MAE1B,CACM,KAAK,gBAAU,aAAA,KAEjB,KAAA,cAAe,KAAY,YAAA,SAAA,GAAA,GAAA,GAAA,KAAA,KAAA,mBAAA,MAAA,UAAA,KAAA,MAAA,YACzB,MAAI,EAAK,KAAA,sBAAqB,cACzB,CACN,SAEuB,IASkC,KAAA,KAAA,WAE9D,KAAA,kBAAsC,QAAA,GAAA,KAAA,oBAGpC,CACA,cAAA,CAAY,GACgB,oBAA1B,KAAA,OAA8D,gBAAA,UACzD,qBAEE,KAAA,WAAc,KAAI,mBAAkC,mBAAA,SAAA,IAErD,IAAA,GAAQ,SAAA,KAAA,gBAAwB,SAAA,KAAA,MAAA,OAAA,KAAA,mBAAA,MAAA,OAAA,GAAA,KAAA,mBAAA,SAAA,UAAA,SAAA,iBAAA,mBAAA,SAAA,KAAA,UACtC,CAOI,eAAA,CAAA,GACF,MAAA,EAAa,QAAP,EAAiB,KAAA,YAAA,KAAA,YACR,IAAA,MAAO,EAAA,KAAQ,GAAA,IAC5B,4BAAA,IACA,sCAAA,MACA,EAAK,iBAAA,GAAA,EAAA,KAAA,EAAA,QAAA,EAAA,EAAA,WAAA,EAAA,EAAA,WAAA,EAAA,IACP,MAAA,EACc,QAAA,EACR,EAAA,GAAA,MACJ,GAGF,EACA,EAAA,KAAA,eAaE,OAAA,GAEI,MAAA,EAAkB,aACiB,MAAA,2BAA2D,MAAA,EAAA,UAAA,EAMlG,YAFF,KAAI,eAAiB,EAES,CAC1B,EAAA,GAAA,MACM,EAAA,YAAA,EAAA,GAAA,OAAA,EAAA,aAAA,EAAA,GAAA,eAAA,EAAA,UAAA,MACR,EACyB,SAAnB,EAAmB,yCAAA,IACvB,MACM,EAAA,GAAA,GAAA,EAAA,aAAA,EAAA,WAAA,EAAA,SAAA,GACR,EACM,UAAkB,CAAA,MACtB,EAAA,GACA,YACF,EACM,WACJ,KACA,SACA,UAKkB,EAAE,CACyC,EAG3D,EARG,GACQ,QACwE,EAAA,QAWzF,KAAA,KAAA,EAAA,GAAA,UAAA,GAAA,KAAA,KAAA,IAAA,MAGa,MAO4C,EAAA,GAAA,UAAA,GAAA,KAAA,IAAA,MAC7D,OAAA,GAEF,MAAA,EAAA,aAAkB,MAAA,qCAAA,MAAA,EAAA,UAAA,EAGN,YADJ,KAAA,eAAqB,EAGqB,CAElD,EAAA,GAAA,YAAA,EAAA,YAA6B,EAAA,GAAA,UAAA,EAAA,UAAA,EAAA,GAAA,gBAAA,EAAA,gBAAA,EAAA,GAAA,aAAA,EAAA,aAAA,EAAA,GAAA,eAAA,EAAA,eAAA,EAAA,GAAA,YAAA,EAAA,YAAA,QAAA,GAAA,KAAA,cAAA,IAAA,EAAA,EAG3B,CAMM,CAEE,eAAA,GAEN,MAAI,EAAa,SAAA,cAAA,SAQjB,EAAA,aAPY,yBACW,IAAA,EAAgB,YAIlB,EAAA,iBAAiB,KAAS,sBAE9B,YAAA,EACX,CACU,0BAAA,GAMR,MAAC,EAAuB,GAC5B,EAA0B,IAAA,IAAA,EAAA,IAAA,GAC3B,IAAA,SAAA,KAAA,OAEH,MAAI,EAAuB,iBAAA,GACzB,IAAA,GAAA,EAGE,GAA+C,EAA/C,EAAoB,gBAA2B,EAAA,kBAAA,SAAA,EAAA,iBAAA,YAAA,EAAA,OAK3C,MAAA,EAJsB,EAAI,0BAAA,EAAA,iBAC9B,sBAAA,OAAA,EAAA,KAAA,iBAAA,cAAA,SAAA,IAAA,GACC,IAAqB,EAAkB,EAAG,IAK/C,GAAI,SAAJ,EAUF,OAAA,EAAA,GACI,GAAA,EAAA,SAAA,GACmB,UAAS,GAAe,iGAEzC,cAGJ,WAAA,IAAA,EAAA,KAAA,GAAA,EAAA,IAAA,EAAA,QAAA,SAAA,iBAAA,IAAA,SAAA,OAAA,KAAA,sBAAA,UAAA,IAAA,mBAAA,EAAA,EAAA,EAEK,IAET,EAAA,SAAA,gBAEE,OAAA,GACE,GAAA,aAC2B,GAGZ,MAAA,KACK,eAAA,GAAiB,CACqB,CAC5D,OAAA,CAEF,CACa,kBAAA,GACH,UAAqB,EAAO,KAC5B,KAAwB,cAAA,CAE9B,MAAI,EAAqC,EAAA,EAAA,EAAA,EAAA,IAAA,GACpC,QASiB,IAAA,iBARM,EAAoB,GAC/B,KAAA,sBACK,YAAA,EAAA,CAClB,CACA,WAAA,GAO8B,UAAA,KAAA,KAAA,cAAA,CACpC,MAAA,EAAA,EAAA,GAAA,EAAA,EAAA,GAEF,IAAA,EAAA,EAAA,MAGO,IAAA,eAAkB,EAAK,IAAa,GAAQ,EAAA,MAAA,IAAA,iBAAA,EAEnD,GACE,KAAQ,sBAAgB,YAAmB,IAAM,UAAqB,EAAA,eAKpE,CAW0B,CAE3B,gBAAA,CAAA,GAEL,KAAA,kBAAA,KAAA,EAAA,SAxaE,CAA0B,kBAAA,GAAA,QAAA,WAAA,KAAA,mBAAA,MAAA,MAAA,SAAA,KAAA,kBAAA,QAAA,KAAA,kBAAA,GAAA,KAAA,MAAA,OAAA,KAAA,mBAAA,SAAA,UAAA,IAAA,GAAA,SAAA,KAAA,gBAAA,SAAA,KAAA,eAAA,SAAA,KAAA,SAAA,KAAA,gBAAA,KAAA,cAAA,QAAA,KAAA,sBAAA,UAAA,KAAA,oBAAA,MAAA,GAAA,iBAAA,svCCzB5B,IAAA,GAAA,GAIO,SAAqB,KAK1B,IAAA,EAAA,EAEE,MAAA,EAAK,IAAA,SAAiB,CAAA,EACtB,KAE6B,EAAA,EAAA,EAAA,CAAA,IAG7B,OAAK,EAAA,QAAA,EAAA,EAAA,OAAsB,EAAA,CAAA,CACY,MACvC,GAAA,WAAA,CAAA,GAEJ,KAAA,SAAA,KAAA,KAAA,MAAA,KAAA,KAAA,mBAAA,KAAA,KAAA,sBAAA,CAEO,CAEH,cAAA,GACE,KAAA,sBAAqB,eACtB,IAAA,aAAA,sBAKD,EACA,MACA,GAAA,QAAA,SAAA,IACA,uBAAA,KACA,WAAA,EAAA,KACA,IACA,GAAA,GAAA,CACA,OAEuB,SAKvB,QACA,kBACA,wBACA,6BACA,sBACA,uBACA,SAAA,EAAA,QAAA,eAAA,GAAA,GAAA,CACA,OACA,OACA,KACA,MACA,QACA,KACA,MAEkB,QAId,OAEN,OAIF,QAME,SACA,QACA,OACA,SAAA,EAAA,QAAA,eAAA,GAAA,IACA,MAAA,EAAA,EAAA,wBACA,OAAA,EAAA,IAAA,OAAA,YAAA,SAAA,gBAAA,WAAA,EAAA,KAAA,OAAA,WAAA,SAAA,gBAAA,UAAA,EACA,GAAA,CACA,QACA,mBACA,eACA,sBACA,oBACF,qBAKE,mBACA,oBACA,gBACA,wBACA,sBACA,wBACA,GAAA,CACA,QACA,SACA,cACA,aACA,cACA,iBACA,eACA,gBACA,mBACA,sBACA,oBACF,qBAIE,aACA,gBACA,cACA,eACA,aACA,WACA,GAAA,CACA,YACF,aAGE,kBACA,iBACA,YACA,aACA,kBACA,kBACA,GAAA,CACA,WACA,aACA,gBACF,eAGQ,cACN,WAEM,MACN,SAGM,QACN,QACE,GAAM,IAED,MAAA,EAAA,8BACT,EAAA,QAAA,SAAA,GAKO,MAAA,EACL,0BAEA,EAAA,MACE,WAAmB,UAAA,EAAA,MACnB,OAAmB,GAAA,EAAA,WAGvB,MAAA,EAAA,iBAAA,GAEO,UAAS,KAA8C,GAMtD,EAAA,MAAiB,YAAS,EAAA,EAAA,iBAAmB,IACnD,OAAe,CAAM,EAMrB,SAAA,GAAe,GAKjB,OAAA,aAAA,aAAA,aAAA,YAAA,aAAA,aAEO,CAUC,SAAA,KACF,MAAA,EAAA,SAAa,cAAA,OAIX,EAAA,MAAA,SAAe,OAAiB,EAAG,MAEpB,SAAyB,QAAA,EAAA,MAAA,QAAA,OAAA,SAAA,KAAA,YAAA,GnInOzC,MAAA,8CmIuOC,OAAA,EAAmB,SAAE,EAAA,MAAA,EAAA,IAAA,OAAA,CACvB,CAME,SAAA,oBACA,MAAA,WAAc,cAAA,OACR,EAAA,aAAA,4BAA4B,IAAA,EAAA,MAAA,IAAA,UAAA,EAAA,MAAA,QAAA,OAAA,SAAA,KAAA,YAAA,GAAA,MAAA,EAAA,iBACb,GAAA,EAAA,IACnB,IAAA,EACI,GAAA,GAAA,GACK,OACH,IAAA,EAGD,GAAA,aAAA,iBAAA,aAAA,gBAAA,EAAA,SAAA,cAAA,eAAA,aAAA,iBAGT,IAII,MAAQ,EAAA,IAAA,GAEd,EAAc,MAAK,EAAA,GAAA,EAAA,CAEjB,OACM,MAEE,MAQN,EAAA,EAAA,YAKgB,MAAA,EAAA,iBAAoB,GAAG,EAAA,GACrC,GAAA,EAAA,KAAA,iBAAA,EAAA,UAAA,IACS,IAA2B,IACtB,GAAA,GAAA,SAAA,GAAA,eACZ,EAAA,EAAA,iBAAc,GAA2C,GAC3D,IAAA,EAAA,iBAAA,IAAA,GAAA,SAAA,GAAA,CACA,+BAAA,EAAA,CAAA,EAAA,KAAA,UAAA,MAEY,QAA6B,IAAA,GAAA,cAAA,EAAA,CAAA,EAAA,KAI3C,cAAc,WAAA,GAAA,QAER,QAKJ,CACA,EAAA,KAAA,GAAA,MAAa,KASX,CACN,CAAwB,GAAA,aACP,kBAAA,IACP,MAAA,KAAA,GAAA,EAMV,MAAM,YAAqB,EAAA,EAAA,iBAAA,IAAA,MAAA,EAAA,KAAA,KAAA,SAAA,SAAA,IAAA,MAAA,GAOzB,GAJA,eACU,KAAA,GAAS,aAGA,gBAAA,CACrB,MAAM,EAAA,SAAa,cAA8B,SAAC,EAAA,YAC7C,mBACgB,yCACR,wCACiB,EAAA,YAAA,EAGhC,CAsBM,GAAA,IAAiB,EAAA,MAAA,OAAiB,KAAI,GAAA,GAC5C,EACE,aAAe,QAAY,EAC3B,KAAe,SAKT,CAEN,MAAA,EAAA,SAAwB,cAAiB,SACvC,cAAc,IAAA,MAAA,EAAA,KAAA,OAAA,EAAA,YAAA,EAAA,CAC6C,EAAA,MAC3D,QAAA,EAAA,aAAA,4BAAA,EAAA,aAAA,iCAAA,IAAA,iBAAA,eAAA,EAAA,gBAAA,4BAAA,IAAA,EAAA,MAAA,SAAA,WAAA,EAAA,MAAA,MAAA,IAAA,EAAA,MAAA,UAAA,gBAAA,EAAA,MAAA,YAAA,EAAA,MAAA,UAAA,OAAA,EAAA,MAAA,OAAA,OAAA,EAAA,MAAA,MAAA,SAEF,MAAQ,EAAA,iBAAyB,EAAA,YACR,YAAA,EAAA,SAAA,qBAAA,EAAA,QAAA,CAGrB,MAAA,EAAgB,SAAA,cAAqB,SAAS,EAAA,GACpD,IACgB,MAAA,IAAY,IAAA,GAGpB,EAAA,KAEN,GAAA,MAAW,mBAA6B,OACxB,EAAA,YACkB,IAAA,cAA0B,EAAA,KAAA,OAAA,EAAA,YAAA,EAAA,CAG5D,MAAQ,EAAA,iBAAyB,EAAA,WACR,YAAA,EAAA,SAAA,qBAAA,EAAA,QAAA,CAK3B,MAAM,EAAe,SAAA,cAAA,SAAA,EAAA,GAEjB,IAAc,MACV,IAAA,IAAA,GAGR,EAAM,KAEa,GAAA,MACX,EAAA,iBAAa,OAMrB,EAAA,YAAqB,IAAkB,aAAA,EAAA,KAAA,OAAA,EAAA,YAAA,EACrC,CAEM,MAAA,EADU,EAAA,UAGd,IAAA,GAAM,eACJ,qBAAwB,EAAA,YACtB,MAAA,EAAA,EAA8B,WAI1B,sBAAgC,sBAAA,EAAA,YACtC,MAAA,EAAM,EAAA,WACN,UAAA,IAAA,IAAA,GAAA,GAAA,aAAA,UAAA,GAAA,GAAA,CAEI,GAAA,GAAA,EAA0B,EAAwB,aAAA,sCACpD,MACF,EAAM,iBAAsB,GAAA,iBAAA,sBAC9B,GAAA,GAAA,IACS,GACH,MAAA,EAAmB,GAAA,GACnB,EAAA,YAAiB,GAAA,QAIpB,CACT,MAAA,EAAA,EAAA,GAEI,GAAc,EAAA,YAAA,EACd,SAAA,aAAA,MAAA,OAAA,EAAA,EAAA,cAAA,EAAA,OAAA,CAEK,MADiC,EAAA,EAAA,YACjC,EAAA,OACP,EACI,CAAO,OAAA,CAAA,EAKC,IAAA,GAAA,EAOV,IACJ,OAAM,EAAkB,EACxB,SACE,EAAA,QACE,CAAmC,CAEnC,SAAA,GAAA,EAAO,GAAyB,GAC7B,SAAL,EAAK,SACH,MAAA,EAAA,EAAO,MAAA,KAAwB,KAAA,aAAA,GAE5B,gBACT,mBAAA,KAEA,IAAS,SAGH,MACA,UAAa,KACX,IAAA,QACJ,MAAO,SAAA,KAIP,MAAa,EACI,CAEnB,SAAK,GAAQ,GAGf,IAAA,EAAA,EAAA,EAAA,EAEO,MAAA,EAA4B,IAI3B,GAAsC,IAAtC,aAAsC,IAAA,EAAA,WAK1C,OAAM,EAAM,cACC,EAAG,EAAA,oBAEQ,EACxB,GAAI,YAA2B,GAAA,EAAM,UAAE,EAMhB,OACrB,EAAK,eAAqB,EAAA,EAAA,eAAA,CAAA,EAAA,IAAA,MACE,SAC9B,GAAA,GAEF,MACO,EAAiC,IAExC,MAAA,EAAS,EAAA,UACA,EAAQ,aACV,iBACT,IAAA,EAAA,CAAA,IAAA,EAAA,KAAA,GAEgB,OAAA,IAA+C,EAAgB,EAAA,IAAA,CACzE,YAEmB,KAAA,EAAS,EAAA,KAC9B,GAAA,EAAA,GAAA,GAAA,GAAA,EAAA,EAAA,GAEF,OAAI,OAAiB,EAAA,EAAA,MAAA,EAAA,CAEf,CACE,SAAA,GAAA,EAAiB,GACf,GAAA,aAAa,gBACG,GAAA,SACL,KAEf,QASA,IAAW,IAAX,EAAW,CACjB,GAAA,EAAA,aAAsB,mCACpB,MAAiD,EAAK,EAAA,MAAA,QAE1D,EAAA,aAAA,2BAAA,GAAA,EAAA,MAAA,QAAA,OC3gBO,MAEG,IAFM,GAEN,EAAA,aAAA,8BAAA,EAAA,MAAA,QAAA,EAAA,aAAA,gCAAA,EAAA,gBAAA,4BACR,CACkB,SAChB,MAAA,MACC,EACC,SACA,iBAA2C,8BAC/C,UAAA,KAAA,EACA,GAAK,IACH,CAAU,SACR,GAAA,GAA8F,MAChG,EAAA,GAAA,EAAA,CAAA,QAAA,aAAA,EAAA,GAEI,GACC,GAAA,GAA4B,IAAA,GAAA,SAAA,EAAA,QAGrC,IAAA,EAGE,MAAM,IADc,MAGpB,yEAAkC,KAIpC,MAAA,EAAsB,GAAuC,GAKrD,OAAA,GAHc,GAClB,SAEiC,GAA6B,GAEhE,MAAA,EADkB,GAAA,GAAA,SAGpB,YAAA,EAAA,SAAA,GAAA,EAAA,IAEO,CAGC,SAAA,GAAM,GAA8B,MACxC,EAAA,GACA,GACD,MAAA,SAED,OAAuB,IAAA,EAAA,QAAA,GAAA,EAAA,IAAA,EAAA,GAAA,KAAA,EACvB,CAAwB,SACtB,MAAA,MACC,EAAS,GAAkB,EAAA,CAC9B,QAAA,kBACI,qBAAyB,IAIf,GAAA,GAMR,MAAA,EAAM,GACV,GACA,GAAA,GAAA,IAAqB,uBAArB,EAAA,WAGF,OAAuB,EAAA,GAAA,GAAA,EAEvB,CAAqB,SACnB,QAAA,MACC,EAAS,GAAkB,EAAA,CAC9B,QAAA,kBAEA,qBAAc,IAEM,GAAA,GACT,MACP,EAAM,GACA,GACc,GAClB,GAAA,IAAA,uBAAA,EAAA,WAQF,GAAa,KAAb,EAEF,OAAM,GAAkB,EAAa,CACrC,MAAkB,cAChB,KAAA,CAAA,EAAO,EAAA,GACiB,uBAAxB,EAAA,UAAwB,EAAA,OAAA,EACtB,IAKA,GAAA,GAAA,GAEH,EAAA,QAAA,SAAA,EAAA,IAAA,OAAA,GAGC,GAAA,EAAa,CACf,MAAM,cAGyB,aACjB,uBAD4B,YAC5B,IAAA,GAAA,EAAA,OAAA,EACd,GAIM,CACL,GAAwC,IAAxC,EAAA,OAAwC,CAIlC,MACF,EAAA,IAAA,OAAA,GAAA,EAAA,GAAA,EAAA,CAAA,QAAA,UAAA,EAAA,GAEC,GAEJ,GAAA,GAAS,KACY,IAEjB,IAAc,qBAClB,QAAA,OACC,EAAS,MAAkB,SAAU,QAAa,EAAA,MAAA,SAAA,OAAA,GAAA,GAAA,EAAA,CACrD,CAEA,MAAoE,EAAA,GAAhD,uBAAgD,IAAA,CAC3D,QAAA,cAGH,qBAA8C,IAChD,EAAA,GAA+B,GAI9B,GADyC,GAAA,IAAA,uBAAA,EAAA,WClJ9C,oBAEG,OACL,EAGM,MAAA,EAAwB,GAAI,GAGX,EAAA,SAAA,OACD,EAEG,QAGlB,KACT,CAEO,IAAA,GACE,SAAA,GAAA,GAA0D,MAC/D,EAAO,mBAAA,OACP,GAAU,IAAA,oBAAA,EAAA,GAAA,EAAA,SAAA,MAAA,KACX,QAAA,KACH,CAUO,CAIC,SAAA,KAEC,OAAA,eAAe,SAAA,UAAgB,sBAAsB,CAC1D,MAAO,GAIL,UAAM,GAIN,CAGA,SAAA,KACE,MAAA,EAAA,gBAAqB,UAAA,QAMjB,OAAA,eAGA,gBAAgC,UAAA,WACtC,MAAA,CAAA,EAAwB,KAClB,MAAA,EAAU,IAAA,EAAA,KAAS,SAAA,gBAAyB,EAAA,GAClD,IAAK,GAAS,iBAAA,EAAA,OAAA,IAGZ,MAAA,EAAM,EAAiB,cAAI,IACzB,MAAS,WAAA,4BACT,IAAA,MACA,wBACF,EAAA,cACO,MAAA,EAAA,SAAA,cAAe,GAAiC,IACrD,EAAA,CACS,MAAA,EAAA,IAAA,eAAA,SAAA,gBAEV,EAEM,GAGT,OAAA,OAAA,eAAsB,EAAA,gBACf,CACT,IAAA,IACc,IAEf,IAAA,UAAA,EAAA,SAAA,SACH,CAEO,MAAS,EAAqB,EAAA,QAAA,EAAA,GAK7B,OAAgB,MAAA,IAAS,GAAA,iBAAU,IAAA,EAGvC,cAAa,EAML,UAAA,GrIhHL,CqImHG,SAAA,KAEc,MAEjB,EAC+B,SAAS,UAAc,crIxHtD,OAAA,eAAA,oCqIyHO,MAAA,KACC,MAAA,EAAA,EAAA,KAAA,UAA2C,OAChD,EAAA,QAAmB,IAEjB,IAAA,EAAgB,cAAA,EAAA,EAAA,OAAA,aAAA,EAAA,EAAA,QAAA,cAAA,WAAA,sBAEnB,SACM,IAAkD,IACvD,EACE,MAAA,EAA+B,OAA3B,EAAsB,EAAK,aAAA,EAAQ,EAAA,OACnC,OAAA,eAAE,EAAkB,OAEtB,SAA0C,CAAA,IAAA,IAIrC,2BAEV,OAAA,eAAA,EAAA,OAAA,iBAGI,MACT,IAAA,EAAA,WAAA,OAAA,EAAA,EAAA,QAAA,gBACA,OAAc,aAAA,KAAA,IAAA,OACJ,UAAA,OAAA,EAAA,EAAA,aAAA,aACX,CACH,GAEgB,IAOR,GAEJ,cAAA,EACF,UAAA,GACsD,CrIhKjD,SAAA,KqIkKD,MAAA,EAAM,OAAmC,yBAIlC,YAAA,UAAkD,SAGrD,OAAA,eAA2C,YAAA,UAAA,YAAA,GAC7C,IACA,EACE,MAAA,EACM,OADA,EAAyB,MAAR,OAAQ,EAAoB,EAAA,UACf,EAAqB,EAAA,KAAA,MAAA,EAAA,KACjD,OAAA,OAAA,eAAa,EAAA,qBACd,CACT,IAAA,IAGK,GAFL,EAAc,aAAA,cAIlB,GAAA,CAAA,GACD,MAAA,EAAA,GAAA,EAAA,aAAA,aAAA,GACH,OAAA,EAAA,aAAA,QAAA,GAAA,CChLK,E","file":"/npm/view-transitions-polyfill@1.0.6/dist/view-transitions-polyfill.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/view-transitions-polyfill@1.0.6/dist/view-transitions-polyfill.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","export class MediaClone extends HTMLElement {\n  clone: HTMLCanvasElement;\n  element: HTMLVideoElement | HTMLCanvasElement | undefined;\n  ctx: CanvasRenderingContext2D;\n  nextAnimationFrame?: number;\n  live = false;\n  constructor() {\n    super();\n    this.style.display = 'block';\n    this.clone = document.createElement('canvas');\n    this.clone.style.width = '100%';\n    this.clone.style.height = '100%';\n    this.appendChild(this.clone);\n    const ctx = this.clone.getContext('2d');\n    if (!ctx) {\n      throw new Error('Canvas context 2D is unsupported');\n    }\n    this.ctx = ctx;\n  }\n  setup(element: HTMLVideoElement | HTMLCanvasElement, live?: boolean) {\n    this.element = element;\n    if (live) {\n      this.live = live;\n    }\n\n    if (this.element instanceof HTMLVideoElement) {\n      this.clone.width = this.element.videoWidth;\n      this.clone.height = this.element.videoHeight;\n    } else if (this.element instanceof HTMLCanvasElement) {\n      this.clone.width = this.element.width;\n      this.clone.height = this.element.height;\n    }\n  }\n  connectedCallback() {\n    if (this.live) {\n      this.drawLive();\n    } else {\n      this.draw();\n    }\n  }\n  disconnectedCallback() {\n    if (this.nextAnimationFrame) cancelAnimationFrame(this.nextAnimationFrame);\n  }\n  drawLive() {\n    // Update the canvas live if the image is not static.\n    // Quit when either <video> or <canvas> is removed from the document.\n    if (!this) return;\n    if (!this.element || !document.documentElement.contains(this.element)) {\n      if (this.nextAnimationFrame)\n        cancelAnimationFrame(this.nextAnimationFrame);\n      return;\n    }\n    this.ctx.drawImage(this.element, 0, 0);\n    this.nextAnimationFrame = requestAnimationFrame(() =>\n      this.drawLive.call(this)\n    );\n  }\n  draw() {\n    if (!this.element) return;\n    return this.ctx.drawImage(this.element, 0, 0);\n  }\n}\ncustomElements.define('view-transition-media', MediaClone);\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() {\n        this.lines = null;\n        this.columns = null;\n        this.computed = false;\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 balancePair = new Map([\n    [FunctionToken, RightParenthesis],\n    [LeftParenthesis, RightParenthesis],\n    [LeftSquareBracket, RightSquareBracket],\n    [LeftCurlyBracket, RightCurlyBracket]\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 balanceCloseType = 0;\n        let balanceStart = 0;\n        let firstCharOffset = -1;\n\n        // capture buffers\n        this.offsetAndType = null;\n        this.balance = null;\n\n        tokenize(source, (type, start, end) => {\n            switch (type) {\n                default:\n                    balance[tokenCount] = sourceLength;\n                    break;\n\n                case balanceCloseType: {\n                    let balancePrev = balanceStart & OFFSET_MASK;\n                    balanceStart = balance[balancePrev];\n                    balanceCloseType = balanceStart >> TYPE_SHIFT;\n                    balance[tokenCount] = balancePrev;\n                    balance[balancePrev++] = tokenCount;\n                    for (; balancePrev < tokenCount; balancePrev++) {\n                        if (balance[balancePrev] === sourceLength) {\n                            balance[balancePrev] = tokenCount;\n                        }\n                    }\n                    break;\n                }\n\n                case LeftParenthesis:\n                case FunctionToken:\n                case LeftSquareBracket:\n                case LeftCurlyBracket:\n                    balance[tokenCount] = balanceStart;\n                    balanceCloseType = balancePair.get(type);\n                    balanceStart = (balanceCloseType << TYPE_SHIFT) | tokenCount;\n                    break;\n            }\n\n            offsetAndType[tokenCount++] = (type << TYPE_SHIFT) | end;\n            if (firstCharOffset === -1) {\n                firstCharOffset = start;\n            }\n        });\n\n        // finalize buffers\n        offsetAndType[tokenCount] = (EOF << TYPE_SHIFT) | sourceLength; // <EOF-token>\n        balance[tokenCount] = sourceLength;\n        balance[sourceLength] = sourceLength; // prevents false positive balance match with any token\n        while (balanceStart !== 0) {\n            const balancePrev = balanceStart & OFFSET_MASK;\n            balanceStart = balance[balancePrev];\n            balance[balancePrev] = sourceLength;\n        }\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    substrToCursor(start) {\n        return this.source.substring(start, this.tokenStart);\n    }\n\n    isBalanceEdge(pos) {\n        return this.balance[this.tokenIndex] < pos;\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;\n        let offset;\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\n                    if (this.balance[balanceEnd] === cursor) {\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\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() {\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        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\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', onComment } = options;\n\n        if (context in parser.context === false) {\n            throw new Error('Unknown context `' + context + '`');\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","/* -*- 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","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    WhiteSpace,\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\nconst code = (type, value) => {\n    if (type === Delim) {\n        type = value;\n    }\n\n    if (typeof type === 'string') {\n        const charCode = type.charCodeAt(0);\n        return charCode > 0x7F ? 0x8000 : charCode << 8;\n    }\n\n    return type;\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 << 16 | nextCharCode << 8)\n                : isWhiteSpaceRequired.has(prevCode << 16 | nextCode);\n\n        if (emitWs) {\n            this.emit(' ', WhiteSpace, true);\n        }\n\n        return nextCode;\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\nfunction processChunk(chunk) {\n    tokenize(chunk, (type, start, end) => {\n        this.token(type, chunk.slice(start, end));\n    });\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) {\n                prevCode = this.tokenBefore(prevCode, type, value);\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: processChunk\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 '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\nconst calcFunctionNames = ['calc(', '-moz-calc(', '-webkit-calc('];\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// 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 calc(next) {\n    return function(token, getNextToken, opts) {\n        if (token === null) {\n            return 0;\n        }\n\n        if (token.type === FunctionToken && eqStrAny(token.value, calcFunctionNames)) {\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': calc(percentage),\n\n    // numeric\n    'zero': zero(),\n    'number': calc(number),\n    'integer': calc(integer),\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': calc(dimension(null)),\n        'angle': calc(dimension(angle)),\n        'decibel': calc(dimension(decibel)),\n        'frequency': calc(dimension(frequency)),\n        'flex': calc(dimension(flex)),\n        'length': calc(zero(dimension(length))),\n        'resolution': calc(dimension(resolution)),\n        'semitones': calc(dimension(semitones)),\n        'time': calc(dimension(time))\n    };\n}\n\nexport function createGenericTypes(units) {\n    return {\n        ...tokenTypes,\n        ...productionTypes,\n        ...createDemensionTypes(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;\n\nexport class Tokenizer {\n    constructor(str) {\n        this.str = str;\n        this.pos = 0;\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    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","import { Tokenizer } from './tokenizer.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 NAME_CHAR = new Uint8Array(128).map((_, idx) =>\n    /[a-zA-Z0-9\\-]/.test(String.fromCharCode(idx)) ? 1 : 0\n);\nconst COMBINATOR_PRECEDENCE = {\n    ' ': 1,\n    '&&': 2,\n    '||': 3,\n    '|': 4\n};\n\nfunction scanSpaces(tokenizer) {\n    return tokenizer.substringToPos(\n        tokenizer.findWsEnd(tokenizer.pos)\n    );\n}\n\nfunction scanWord(tokenizer) {\n    let end = tokenizer.pos;\n\n    for (; end < tokenizer.str.length; end++) {\n        const code = tokenizer.str.charCodeAt(end);\n        if (code >= 128 || NAME_CHAR[code] === 0) {\n            break;\n        }\n    }\n\n    if (tokenizer.pos === end) {\n        tokenizer.error('Expect a keyword');\n    }\n\n    return tokenizer.substringToPos(end);\n}\n\nfunction scanNumber(tokenizer) {\n    let end = tokenizer.pos;\n\n    for (; end < tokenizer.str.length; end++) {\n        const code = tokenizer.str.charCodeAt(end);\n        if (code < 48 || code > 57) {\n            break;\n        }\n    }\n\n    if (tokenizer.pos === end) {\n        tokenizer.error('Expect a number');\n    }\n\n    return tokenizer.substringToPos(end);\n}\n\nfunction scanString(tokenizer) {\n    const end = tokenizer.str.indexOf('\\'', tokenizer.pos + 1);\n\n    if (end === -1) {\n        tokenizer.pos = tokenizer.str.length;\n        tokenizer.error('Expect an apostrophe');\n    }\n\n    return tokenizer.substringToPos(end + 1);\n}\n\nfunction readMultiplierRange(tokenizer) {\n    let min = null;\n    let max = null;\n\n    tokenizer.eat(LEFTCURLYBRACKET);\n    tokenizer.skipWs();\n\n    min = scanNumber(tokenizer);\n    tokenizer.skipWs();\n\n    if (tokenizer.charCode() === COMMA) {\n        tokenizer.pos++;\n        tokenizer.skipWs();\n\n        if (tokenizer.charCode() !== RIGHTCURLYBRACKET) {\n            max = scanNumber(tokenizer);\n            tokenizer.skipWs();\n        }\n    } else {\n        max = min;\n    }\n\n    tokenizer.eat(RIGHTCURLYBRACKET);\n\n    return {\n        min: Number(min),\n        max: max ? Number(max) : 0\n    };\n}\n\nfunction readMultiplier(tokenizer) {\n    let range = null;\n    let comma = false;\n\n    switch (tokenizer.charCode()) {\n        case ASTERISK:\n            tokenizer.pos++;\n\n            range = {\n                min: 0,\n                max: 0\n            };\n\n            break;\n\n        case PLUSSIGN:\n            tokenizer.pos++;\n\n            range = {\n                min: 1,\n                max: 0\n            };\n\n            break;\n\n        case QUESTIONMARK:\n            tokenizer.pos++;\n\n            range = {\n                min: 0,\n                max: 1\n            };\n\n            break;\n\n        case NUMBERSIGN:\n            tokenizer.pos++;\n\n            comma = true;\n\n            if (tokenizer.charCode() === LEFTCURLYBRACKET) {\n                range = readMultiplierRange(tokenizer);\n            } else if (tokenizer.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                tokenizer.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(tokenizer);\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(tokenizer, node) {\n    const multiplier = readMultiplier(tokenizer);\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 (tokenizer.charCode() === NUMBERSIGN &&\n            tokenizer.charCodeAt(tokenizer.pos - 1) === PLUSSIGN) {\n            return maybeMultiplied(tokenizer, multiplier);\n        }\n\n        return multiplier;\n    }\n\n    return node;\n}\n\nfunction maybeToken(tokenizer) {\n    const ch = tokenizer.peek();\n\n    if (ch === '') {\n        return null;\n    }\n\n    return {\n        type: 'Token',\n        value: ch\n    };\n}\n\nfunction readProperty(tokenizer) {\n    let name;\n\n    tokenizer.eat(LESSTHANSIGN);\n    tokenizer.eat(APOSTROPHE);\n\n    name = scanWord(tokenizer);\n\n    tokenizer.eat(APOSTROPHE);\n    tokenizer.eat(GREATERTHANSIGN);\n\n    return maybeMultiplied(tokenizer, {\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(tokenizer) {\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    tokenizer.eat(LEFTSQUAREBRACKET);\n\n    if (tokenizer.charCode() === HYPERMINUS) {\n        tokenizer.peek();\n        sign = -1;\n    }\n\n    if (sign == -1 && tokenizer.charCode() === INFINITY) {\n        tokenizer.peek();\n    } else {\n        min = sign * Number(scanNumber(tokenizer));\n\n        if (NAME_CHAR[tokenizer.charCode()] !== 0) {\n            min += scanWord(tokenizer);\n        }\n    }\n\n    scanSpaces(tokenizer);\n    tokenizer.eat(COMMA);\n    scanSpaces(tokenizer);\n\n    if (tokenizer.charCode() === INFINITY) {\n        tokenizer.peek();\n    } else {\n        sign = 1;\n\n        if (tokenizer.charCode() === HYPERMINUS) {\n            tokenizer.peek();\n            sign = -1;\n        }\n\n        max = sign * Number(scanNumber(tokenizer));\n\n        if (NAME_CHAR[tokenizer.charCode()] !== 0) {\n            max += scanWord(tokenizer);\n        }\n    }\n\n    tokenizer.eat(RIGHTSQUAREBRACKET);\n\n    return {\n        type: 'Range',\n        min,\n        max\n    };\n}\n\nfunction readType(tokenizer) {\n    let name;\n    let opts = null;\n\n    tokenizer.eat(LESSTHANSIGN);\n    name = scanWord(tokenizer);\n\n    if (tokenizer.charCode() === LEFTPARENTHESIS &&\n        tokenizer.nextCharCode() === RIGHTPARENTHESIS) {\n        tokenizer.pos += 2;\n        name += '()';\n    }\n\n    if (tokenizer.charCodeAt(tokenizer.findWsEnd(tokenizer.pos)) === LEFTSQUAREBRACKET) {\n        scanSpaces(tokenizer);\n        opts = readTypeRange(tokenizer);\n    }\n\n    tokenizer.eat(GREATERTHANSIGN);\n\n    return maybeMultiplied(tokenizer, {\n        type: 'Type',\n        name,\n        opts\n    });\n}\n\nfunction readKeywordOrFunction(tokenizer) {\n    const name = scanWord(tokenizer);\n\n    if (tokenizer.charCode() === LEFTPARENTHESIS) {\n        tokenizer.pos++;\n\n        return {\n            type: 'Function',\n            name\n        };\n    }\n\n    return maybeMultiplied(tokenizer, {\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(tokenizer) {\n    const terms = [];\n    const combinators = {};\n    let token;\n    let prevToken = null;\n    let prevTokenPos = tokenizer.pos;\n\n    while (token = peek(tokenizer)) {\n        if (token.type !== 'Spaces') {\n            if (token.type === 'Combinator') {\n                // check for combinator in group beginning and double combinator sequence\n                if (prevToken === null || prevToken.type === 'Combinator') {\n                    tokenizer.pos = prevTokenPos;\n                    tokenizer.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 = tokenizer.pos;\n        }\n    }\n\n    // check for combinator in group ending\n    if (prevToken !== null && prevToken.type === 'Combinator') {\n        tokenizer.pos -= prevTokenPos;\n        tokenizer.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(tokenizer) {\n    let result;\n\n    tokenizer.eat(LEFTSQUAREBRACKET);\n    result = readImplicitGroup(tokenizer);\n    tokenizer.eat(RIGHTSQUAREBRACKET);\n\n    result.explicit = true;\n\n    if (tokenizer.charCode() === EXCLAMATIONMARK) {\n        tokenizer.pos++;\n        result.disallowEmpty = true;\n    }\n\n    return result;\n}\n\nfunction peek(tokenizer) {\n    let code = tokenizer.charCode();\n\n    if (code < 128 && NAME_CHAR[code] === 1) {\n        return readKeywordOrFunction(tokenizer);\n    }\n\n    switch (code) {\n        case RIGHTSQUAREBRACKET:\n            // don't eat, stop scan a group\n            break;\n\n        case LEFTSQUAREBRACKET:\n            return maybeMultiplied(tokenizer, readGroup(tokenizer));\n\n        case LESSTHANSIGN:\n            return tokenizer.nextCharCode() === APOSTROPHE\n                ? readProperty(tokenizer)\n                : readType(tokenizer);\n\n        case VERTICALLINE:\n            return {\n                type: 'Combinator',\n                value: tokenizer.substringToPos(\n                    tokenizer.pos + (tokenizer.nextCharCode() === VERTICALLINE ? 2 : 1)\n                )\n            };\n\n        case AMPERSAND:\n            tokenizer.pos++;\n            tokenizer.eat(AMPERSAND);\n\n            return {\n                type: 'Combinator',\n                value: '&&'\n            };\n\n        case COMMA:\n            tokenizer.pos++;\n            return {\n                type: 'Comma'\n            };\n\n        case APOSTROPHE:\n            return maybeMultiplied(tokenizer, {\n                type: 'String',\n                value: scanString(tokenizer)\n            });\n\n        case SPACE:\n        case TAB:\n        case N:\n        case R:\n        case F:\n            return {\n                type: 'Spaces',\n                value: scanSpaces(tokenizer)\n            };\n\n        case COMMERCIALAT:\n            code = tokenizer.nextCharCode();\n\n            if (code < 128 && NAME_CHAR[code] === 1) {\n                tokenizer.pos++;\n                return {\n                    type: 'AtKeyword',\n                    name: scanWord(tokenizer)\n                };\n            }\n\n            return maybeToken(tokenizer);\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 = tokenizer.nextCharCode();\n\n            if (code < 48 || code > 57) {\n                return maybeToken(tokenizer);\n            }\n\n            break;\n\n        default:\n            return maybeToken(tokenizer);\n    }\n}\n\nexport function parse(source) {\n    const tokenizer = new Tokenizer(source);\n    const result = readImplicitGroup(tokenizer);\n\n    if (tokenizer.pos !== source.length) {\n        tokenizer.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                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 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        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 sliceProps(obj, props) {\n    const result = Object.create(null);\n\n    for (const [key, value] of Object.entries(obj)) {\n        if (value) {\n            result[key] = {};\n            for (const prop of Object.keys(value)) {\n                if (props.includes(prop)) {\n                    result[key][prop] = value[prop];\n                }\n            }\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 'scope':\n            case 'features':\n                result[prop] = { ...dest[prop] };\n                for (const [name, props] of Object.entries(value)) {\n                    result[prop][name] = { ...result[prop][name], ...props };\n                }\n                break;\n\n            case 'parseContext':\n                result[prop] = {\n                    ...dest[prop],\n                    ...value\n                };\n                break;\n\n            case 'atrule':\n            case 'pseudo':\n                result[prop] = {\n                    ...dest[prop],\n                    ...sliceProps(value, ['parse'])\n                };\n                break;\n\n            case 'node':\n                result[prop] = {\n                    ...dest[prop],\n                    ...sliceProps(value, ['name', 'structure', 'parse', 'generate', 'walkContext'])\n                };\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","export default {\n    \"generic\": true,\n    \"cssWideKeywords\": [\n        \"initial\",\n        \"inherit\",\n        \"unset\",\n        \"revert\",\n        \"revert-layer\"\n    ],\n    \"units\": {\n        \"angle\": [\n            \"deg\",\n            \"grad\",\n            \"rad\",\n            \"turn\"\n        ],\n        \"decibel\": [\n            \"db\"\n        ],\n        \"flex\": [\n            \"fr\"\n        ],\n        \"frequency\": [\n            \"hz\",\n            \"khz\"\n        ],\n        \"length\": [\n            \"cm\",\n            \"mm\",\n            \"q\",\n            \"in\",\n            \"pt\",\n            \"pc\",\n            \"px\",\n            \"em\",\n            \"rem\",\n            \"ex\",\n            \"rex\",\n            \"cap\",\n            \"rcap\",\n            \"ch\",\n            \"rch\",\n            \"ic\",\n            \"ric\",\n            \"lh\",\n            \"rlh\",\n            \"vw\",\n            \"svw\",\n            \"lvw\",\n            \"dvw\",\n            \"vh\",\n            \"svh\",\n            \"lvh\",\n            \"dvh\",\n            \"vi\",\n            \"svi\",\n            \"lvi\",\n            \"dvi\",\n            \"vb\",\n            \"svb\",\n            \"lvb\",\n            \"dvb\",\n            \"vmin\",\n            \"svmin\",\n            \"lvmin\",\n            \"dvmin\",\n            \"vmax\",\n            \"svmax\",\n            \"lvmax\",\n            \"dvmax\",\n            \"cqw\",\n            \"cqh\",\n            \"cqi\",\n            \"cqb\",\n            \"cqmin\",\n            \"cqmax\"\n        ],\n        \"resolution\": [\n            \"dpi\",\n            \"dpcm\",\n            \"dppx\",\n            \"x\"\n        ],\n        \"semitones\": [\n            \"st\"\n        ],\n        \"time\": [\n            \"s\",\n            \"ms\"\n        ]\n    },\n    \"types\": {\n        \"abs()\": \"abs( <calc-sum> )\",\n        \"absolute-size\": \"xx-small|x-small|small|medium|large|x-large|xx-large|xxx-large\",\n        \"acos()\": \"acos( <calc-sum> )\",\n        \"alpha-value\": \"<number>|<percentage>\",\n        \"angle-percentage\": \"<angle>|<percentage>\",\n        \"angular-color-hint\": \"<angle-percentage>\",\n        \"angular-color-stop\": \"<color>&&<color-stop-angle>?\",\n        \"angular-color-stop-list\": \"[<angular-color-stop> [, <angular-color-hint>]?]# , <angular-color-stop>\",\n        \"animateable-feature\": \"scroll-position|contents|<custom-ident>\",\n        \"asin()\": \"asin( <calc-sum> )\",\n        \"atan()\": \"atan( <calc-sum> )\",\n        \"atan2()\": \"atan2( <calc-sum> , <calc-sum> )\",\n        \"attachment\": \"scroll|fixed|local\",\n        \"attr()\": \"attr( <attr-name> <type-or-unit>? [, <attr-fallback>]? )\",\n        \"attr-matcher\": \"['~'|'|'|'^'|'$'|'*']? '='\",\n        \"attr-modifier\": \"i|s\",\n        \"attribute-selector\": \"'[' <wq-name> ']'|'[' <wq-name> <attr-matcher> [<string-token>|<ident-token>] <attr-modifier>? ']'\",\n        \"auto-repeat\": \"repeat( [auto-fill|auto-fit] , [<line-names>? <fixed-size>]+ <line-names>? )\",\n        \"auto-track-list\": \"[<line-names>? [<fixed-size>|<fixed-repeat>]]* <line-names>? <auto-repeat> [<line-names>? [<fixed-size>|<fixed-repeat>]]* <line-names>?\",\n        \"axis\": \"block|inline|vertical|horizontal\",\n        \"baseline-position\": \"[first|last]? baseline\",\n        \"basic-shape\": \"<inset()>|<xywh()>|<rect()>|<circle()>|<ellipse()>|<polygon()>|<path()>\",\n        \"bg-image\": \"none|<image>\",\n        \"bg-layer\": \"<bg-image>||<bg-position> [/ <bg-size>]?||<repeat-style>||<attachment>||<box>||<box>\",\n        \"bg-position\": \"[[left|center|right|top|bottom|<length-percentage>]|[left|center|right|<length-percentage>] [top|center|bottom|<length-percentage>]|[center|[left|right] <length-percentage>?]&&[center|[top|bottom] <length-percentage>?]]\",\n        \"bg-size\": \"[<length-percentage>|auto]{1,2}|cover|contain\",\n        \"blur()\": \"blur( <length> )\",\n        \"blend-mode\": \"normal|multiply|screen|overlay|darken|lighten|color-dodge|color-burn|hard-light|soft-light|difference|exclusion|hue|saturation|color|luminosity\",\n        \"box\": \"border-box|padding-box|content-box\",\n        \"brightness()\": \"brightness( <number-percentage> )\",\n        \"calc()\": \"calc( <calc-sum> )\",\n        \"calc-sum\": \"<calc-product> [['+'|'-'] <calc-product>]*\",\n        \"calc-product\": \"<calc-value> ['*' <calc-value>|'/' <number>]*\",\n        \"calc-value\": \"<number>|<dimension>|<percentage>|<calc-constant>|( <calc-sum> )\",\n        \"calc-constant\": \"e|pi|infinity|-infinity|NaN\",\n        \"cf-final-image\": \"<image>|<color>\",\n        \"cf-mixing-image\": \"<percentage>?&&<image>\",\n        \"circle()\": \"circle( [<shape-radius>]? [at <position>]? )\",\n        \"clamp()\": \"clamp( <calc-sum>#{3} )\",\n        \"class-selector\": \"'.' <ident-token>\",\n        \"clip-source\": \"<url>\",\n        \"color\": \"<color-base>|currentColor|<system-color>|<device-cmyk()>|<light-dark()>|<-non-standard-color>\",\n        \"color-stop\": \"<color-stop-length>|<color-stop-angle>\",\n        \"color-stop-angle\": \"<angle-percentage>{1,2}\",\n        \"color-stop-length\": \"<length-percentage>{1,2}\",\n        \"color-stop-list\": \"[<linear-color-stop> [, <linear-color-hint>]?]# , <linear-color-stop>\",\n        \"color-interpolation-method\": \"in [<rectangular-color-space>|<polar-color-space> <hue-interpolation-method>?|<custom-color-space>]\",\n        \"combinator\": \"'>'|'+'|'~'|['|' '|']\",\n        \"common-lig-values\": \"[common-ligatures|no-common-ligatures]\",\n        \"compat-auto\": \"searchfield|textarea|push-button|slider-horizontal|checkbox|radio|square-button|menulist|listbox|meter|progress-bar|button\",\n        \"composite-style\": \"clear|copy|source-over|source-in|source-out|source-atop|destination-over|destination-in|destination-out|destination-atop|xor\",\n        \"compositing-operator\": \"add|subtract|intersect|exclude\",\n        \"compound-selector\": \"[<type-selector>? <subclass-selector>*]!\",\n        \"compound-selector-list\": \"<compound-selector>#\",\n        \"complex-selector\": \"<complex-selector-unit> [<combinator>? <complex-selector-unit>]*\",\n        \"complex-selector-list\": \"<complex-selector>#\",\n        \"conic-gradient()\": \"conic-gradient( [from <angle>]? [at <position>]? , <angular-color-stop-list> )\",\n        \"contextual-alt-values\": \"[contextual|no-contextual]\",\n        \"content-distribution\": \"space-between|space-around|space-evenly|stretch\",\n        \"content-list\": \"[<string>|contents|<image>|<counter>|<quote>|<target>|<leader()>|<attr()>]+\",\n        \"content-position\": \"center|start|end|flex-start|flex-end\",\n        \"content-replacement\": \"<image>\",\n        \"contrast()\": \"contrast( [<number-percentage>] )\",\n        \"cos()\": \"cos( <calc-sum> )\",\n        \"counter\": \"<counter()>|<counters()>\",\n        \"counter()\": \"counter( <counter-name> , <counter-style>? )\",\n        \"counter-name\": \"<custom-ident>\",\n        \"counter-style\": \"<counter-style-name>|symbols( )\",\n        \"counter-style-name\": \"<custom-ident>\",\n        \"counters()\": \"counters( <counter-name> , <string> , <counter-style>? )\",\n        \"cross-fade()\": \"cross-fade( <cf-mixing-image> , <cf-final-image>? )\",\n        \"cubic-bezier-timing-function\": \"ease|ease-in|ease-out|ease-in-out|cubic-bezier( <number [0,1]> , <number> , <number [0,1]> , <number> )\",\n        \"deprecated-system-color\": \"ActiveBorder|ActiveCaption|AppWorkspace|Background|ButtonFace|ButtonHighlight|ButtonShadow|ButtonText|CaptionText|GrayText|Highlight|HighlightText|InactiveBorder|InactiveCaption|InactiveCaptionText|InfoBackground|InfoText|Menu|MenuText|Scrollbar|ThreeDDarkShadow|ThreeDFace|ThreeDHighlight|ThreeDLightShadow|ThreeDShadow|Window|WindowFrame|WindowText\",\n        \"discretionary-lig-values\": \"[discretionary-ligatures|no-discretionary-ligatures]\",\n        \"display-box\": \"contents|none\",\n        \"display-inside\": \"flow|flow-root|table|flex|grid|ruby\",\n        \"display-internal\": \"table-row-group|table-header-group|table-footer-group|table-row|table-cell|table-column-group|table-column|table-caption|ruby-base|ruby-text|ruby-base-container|ruby-text-container\",\n        \"display-legacy\": \"inline-block|inline-list-item|inline-table|inline-flex|inline-grid\",\n        \"display-listitem\": \"<display-outside>?&&[flow|flow-root]?&&list-item\",\n        \"display-outside\": \"block|inline|run-in\",\n        \"drop-shadow()\": \"drop-shadow( <length>{2,3} <color>? )\",\n        \"east-asian-variant-values\": \"[jis78|jis83|jis90|jis04|simplified|traditional]\",\n        \"east-asian-width-values\": \"[full-width|proportional-width]\",\n        \"element()\": \"element( <custom-ident> , [first|start|last|first-except]? )|element( <id-selector> )\",\n        \"ellipse()\": \"ellipse( [<shape-radius>{2}]? [at <position>]? )\",\n        \"ending-shape\": \"circle|ellipse\",\n        \"env()\": \"env( <custom-ident> , <declaration-value>? )\",\n        \"exp()\": \"exp( <calc-sum> )\",\n        \"explicit-track-list\": \"[<line-names>? <track-size>]+ <line-names>?\",\n        \"family-name\": \"<string>|<custom-ident>+\",\n        \"feature-tag-value\": \"<string> [<integer>|on|off]?\",\n        \"feature-type\": \"@stylistic|@historical-forms|@styleset|@character-variant|@swash|@ornaments|@annotation\",\n        \"feature-value-block\": \"<feature-type> '{' <feature-value-declaration-list> '}'\",\n        \"feature-value-block-list\": \"<feature-value-block>+\",\n        \"feature-value-declaration\": \"<custom-ident> : <integer>+ ;\",\n        \"feature-value-declaration-list\": \"<feature-value-declaration>\",\n        \"feature-value-name\": \"<custom-ident>\",\n        \"fill-rule\": \"nonzero|evenodd\",\n        \"filter-function\": \"<blur()>|<brightness()>|<contrast()>|<drop-shadow()>|<grayscale()>|<hue-rotate()>|<invert()>|<opacity()>|<saturate()>|<sepia()>\",\n        \"filter-function-list\": \"[<filter-function>|<url>]+\",\n        \"final-bg-layer\": \"<'background-color'>||<bg-image>||<bg-position> [/ <bg-size>]?||<repeat-style>||<attachment>||<box>||<box>\",\n        \"fixed-breadth\": \"<length-percentage>\",\n        \"fixed-repeat\": \"repeat( [<integer [1,∞]>] , [<line-names>? <fixed-size>]+ <line-names>? )\",\n        \"fixed-size\": \"<fixed-breadth>|minmax( <fixed-breadth> , <track-breadth> )|minmax( <inflexible-breadth> , <fixed-breadth> )\",\n        \"font-stretch-absolute\": \"normal|ultra-condensed|extra-condensed|condensed|semi-condensed|semi-expanded|expanded|extra-expanded|ultra-expanded|<percentage>\",\n        \"font-variant-css21\": \"[normal|small-caps]\",\n        \"font-weight-absolute\": \"normal|bold|<number [1,1000]>\",\n        \"frequency-percentage\": \"<frequency>|<percentage>\",\n        \"general-enclosed\": \"[<function-token> <any-value>? )]|[( <any-value>? )]\",\n        \"generic-family\": \"<generic-script-specific>|<generic-complete>|<generic-incomplete>|<-non-standard-generic-family>\",\n        \"generic-name\": \"serif|sans-serif|cursive|fantasy|monospace\",\n        \"geometry-box\": \"<shape-box>|fill-box|stroke-box|view-box\",\n        \"gradient\": \"<linear-gradient()>|<repeating-linear-gradient()>|<radial-gradient()>|<repeating-radial-gradient()>|<conic-gradient()>|<repeating-conic-gradient()>|<-legacy-gradient>\",\n        \"grayscale()\": \"grayscale( <number-percentage> )\",\n        \"grid-line\": \"auto|<custom-ident>|[<integer>&&<custom-ident>?]|[span&&[<integer>||<custom-ident>]]\",\n        \"historical-lig-values\": \"[historical-ligatures|no-historical-ligatures]\",\n        \"hsl()\": \"hsl( <hue> <percentage> <percentage> [/ <alpha-value>]? )|hsl( <hue> , <percentage> , <percentage> , <alpha-value>? )\",\n        \"hsla()\": \"hsla( <hue> <percentage> <percentage> [/ <alpha-value>]? )|hsla( <hue> , <percentage> , <percentage> , <alpha-value>? )\",\n        \"hue\": \"<number>|<angle>\",\n        \"hue-rotate()\": \"hue-rotate( <angle> )\",\n        \"hue-interpolation-method\": \"[shorter|longer|increasing|decreasing] hue\",\n        \"hwb()\": \"hwb( [<hue>|none] [<percentage>|none] [<percentage>|none] [/ [<alpha-value>|none]]? )\",\n        \"hypot()\": \"hypot( <calc-sum># )\",\n        \"image\": \"<url>|<image()>|<image-set()>|<element()>|<paint()>|<cross-fade()>|<gradient>\",\n        \"image()\": \"image( <image-tags>? [<image-src>? , <color>?]! )\",\n        \"image-set()\": \"image-set( <image-set-option># )\",\n        \"image-set-option\": \"[<image>|<string>] [<resolution>||type( <string> )]\",\n        \"image-src\": \"<url>|<string>\",\n        \"image-tags\": \"ltr|rtl\",\n        \"inflexible-breadth\": \"<length-percentage>|min-content|max-content|auto\",\n        \"inset()\": \"inset( <length-percentage>{1,4} [round <'border-radius'>]? )\",\n        \"invert()\": \"invert( <number-percentage> )\",\n        \"keyframes-name\": \"<custom-ident>|<string>\",\n        \"keyframe-block\": \"<keyframe-selector># { <declaration-list> }\",\n        \"keyframe-block-list\": \"<keyframe-block>+\",\n        \"keyframe-selector\": \"from|to|<percentage>|<timeline-range-name> <percentage>\",\n        \"lab()\": \"lab( [<percentage>|<number>|none] [<percentage>|<number>|none] [<percentage>|<number>|none] [/ [<alpha-value>|none]]? )\",\n        \"layer()\": \"layer( <layer-name> )\",\n        \"layer-name\": \"<ident> ['.' <ident>]*\",\n        \"lch()\": \"lch( [<percentage>|<number>|none] [<percentage>|<number>|none] [<hue>|none] [/ [<alpha-value>|none]]? )\",\n        \"leader()\": \"leader( <leader-type> )\",\n        \"leader-type\": \"dotted|solid|space|<string>\",\n        \"length-percentage\": \"<length>|<percentage>\",\n        \"light-dark()\": \"light-dark( <color> , <color> )\",\n        \"line-names\": \"'[' <custom-ident>* ']'\",\n        \"line-name-list\": \"[<line-names>|<name-repeat>]+\",\n        \"line-style\": \"none|hidden|dotted|dashed|solid|double|groove|ridge|inset|outset\",\n        \"line-width\": \"<length>|thin|medium|thick\",\n        \"linear-color-hint\": \"<length-percentage>\",\n        \"linear-color-stop\": \"<color> <color-stop-length>?\",\n        \"linear-gradient()\": \"linear-gradient( [[<angle>|to <side-or-corner>]||<color-interpolation-method>]? , <color-stop-list> )\",\n        \"log()\": \"log( <calc-sum> , <calc-sum>? )\",\n        \"mask-layer\": \"<mask-reference>||<position> [/ <bg-size>]?||<repeat-style>||<geometry-box>||[<geometry-box>|no-clip]||<compositing-operator>||<masking-mode>\",\n        \"mask-position\": \"[<length-percentage>|left|center|right] [<length-percentage>|top|center|bottom]?\",\n        \"mask-reference\": \"none|<image>|<mask-source>\",\n        \"mask-source\": \"<url>\",\n        \"masking-mode\": \"alpha|luminance|match-source\",\n        \"matrix()\": \"matrix( <number>#{6} )\",\n        \"matrix3d()\": \"matrix3d( <number>#{16} )\",\n        \"max()\": \"max( <calc-sum># )\",\n        \"media-and\": \"<media-in-parens> [and <media-in-parens>]+\",\n        \"media-condition\": \"<media-not>|<media-and>|<media-or>|<media-in-parens>\",\n        \"media-condition-without-or\": \"<media-not>|<media-and>|<media-in-parens>\",\n        \"media-feature\": \"( [<mf-plain>|<mf-boolean>|<mf-range>] )\",\n        \"media-in-parens\": \"( <media-condition> )|<media-feature>|<general-enclosed>\",\n        \"media-not\": \"not <media-in-parens>\",\n        \"media-or\": \"<media-in-parens> [or <media-in-parens>]+\",\n        \"media-query\": \"<media-condition>|[not|only]? <media-type> [and <media-condition-without-or>]?\",\n        \"media-query-list\": \"<media-query>#\",\n        \"media-type\": \"<ident>\",\n        \"mf-boolean\": \"<mf-name>\",\n        \"mf-name\": \"<ident>\",\n        \"mf-plain\": \"<mf-name> : <mf-value>\",\n        \"mf-range\": \"<mf-name> ['<'|'>']? '='? <mf-value>|<mf-value> ['<'|'>']? '='? <mf-name>|<mf-value> '<' '='? <mf-name> '<' '='? <mf-value>|<mf-value> '>' '='? <mf-name> '>' '='? <mf-value>\",\n        \"mf-value\": \"<number>|<dimension>|<ident>|<ratio>\",\n        \"min()\": \"min( <calc-sum># )\",\n        \"minmax()\": \"minmax( [<length-percentage>|min-content|max-content|auto] , [<length-percentage>|<flex>|min-content|max-content|auto] )\",\n        \"mod()\": \"mod( <calc-sum> , <calc-sum> )\",\n        \"name-repeat\": \"repeat( [<integer [1,∞]>|auto-fill] , <line-names>+ )\",\n        \"named-color\": \"transparent|aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen\",\n        \"namespace-prefix\": \"<ident>\",\n        \"ns-prefix\": \"[<ident-token>|'*']? '|'\",\n        \"number-percentage\": \"<number>|<percentage>\",\n        \"numeric-figure-values\": \"[lining-nums|oldstyle-nums]\",\n        \"numeric-fraction-values\": \"[diagonal-fractions|stacked-fractions]\",\n        \"numeric-spacing-values\": \"[proportional-nums|tabular-nums]\",\n        \"nth\": \"<an-plus-b>|even|odd\",\n        \"opacity()\": \"opacity( [<number-percentage>] )\",\n        \"overflow-position\": \"unsafe|safe\",\n        \"outline-radius\": \"<length>|<percentage>\",\n        \"page-body\": \"<declaration>? [; <page-body>]?|<page-margin-box> <page-body>\",\n        \"page-margin-box\": \"<page-margin-box-type> '{' <declaration-list> '}'\",\n        \"page-margin-box-type\": \"@top-left-corner|@top-left|@top-center|@top-right|@top-right-corner|@bottom-left-corner|@bottom-left|@bottom-center|@bottom-right|@bottom-right-corner|@left-top|@left-middle|@left-bottom|@right-top|@right-middle|@right-bottom\",\n        \"page-selector-list\": \"[<page-selector>#]?\",\n        \"page-selector\": \"<pseudo-page>+|<ident> <pseudo-page>*\",\n        \"page-size\": \"A5|A4|A3|B5|B4|JIS-B5|JIS-B4|letter|legal|ledger\",\n        \"path()\": \"path( [<fill-rule> ,]? <string> )\",\n        \"paint()\": \"paint( <ident> , <declaration-value>? )\",\n        \"perspective()\": \"perspective( [<length [0,∞]>|none] )\",\n        \"polygon()\": \"polygon( <fill-rule>? , [<length-percentage> <length-percentage>]# )\",\n        \"polar-color-space\": \"hsl|hwb|lch|oklch\",\n        \"position\": \"[[left|center|right]||[top|center|bottom]|[left|center|right|<length-percentage>] [top|center|bottom|<length-percentage>]?|[[left|right] <length-percentage>]&&[[top|bottom] <length-percentage>]]\",\n        \"pow()\": \"pow( <calc-sum> , <calc-sum> )\",\n        \"pseudo-class-selector\": \"':' <ident-token>|':' <function-token> <any-value> ')'\",\n        \"pseudo-element-selector\": \"':' <pseudo-class-selector>|<legacy-pseudo-element-selector>\",\n        \"pseudo-page\": \": [left|right|first|blank]\",\n        \"quote\": \"open-quote|close-quote|no-open-quote|no-close-quote\",\n        \"radial-gradient()\": \"radial-gradient( [<ending-shape>||<size>]? [at <position>]? , <color-stop-list> )\",\n        \"ratio\": \"<number [0,∞]> [/ <number [0,∞]>]?\",\n        \"ray()\": \"ray( <angle>&&<ray-size>?&&contain?&&[at <position>]? )\",\n        \"ray-size\": \"closest-side|closest-corner|farthest-side|farthest-corner|sides\",\n        \"rectangular-color-space\": \"srgb|srgb-linear|display-p3|a98-rgb|prophoto-rgb|rec2020|lab|oklab|xyz|xyz-d50|xyz-d65\",\n        \"relative-selector\": \"<combinator>? <complex-selector>\",\n        \"relative-selector-list\": \"<relative-selector>#\",\n        \"relative-size\": \"larger|smaller\",\n        \"rem()\": \"rem( <calc-sum> , <calc-sum> )\",\n        \"repeat-style\": \"repeat-x|repeat-y|[repeat|space|round|no-repeat]{1,2}\",\n        \"repeating-conic-gradient()\": \"repeating-conic-gradient( [from <angle>]? [at <position>]? , <angular-color-stop-list> )\",\n        \"repeating-linear-gradient()\": \"repeating-linear-gradient( [<angle>|to <side-or-corner>]? , <color-stop-list> )\",\n        \"repeating-radial-gradient()\": \"repeating-radial-gradient( [<ending-shape>||<size>]? [at <position>]? , <color-stop-list> )\",\n        \"reversed-counter-name\": \"reversed( <counter-name> )\",\n        \"rgb()\": \"rgb( <percentage>{3} [/ <alpha-value>]? )|rgb( <number>{3} [/ <alpha-value>]? )|rgb( <percentage>#{3} , <alpha-value>? )|rgb( <number>#{3} , <alpha-value>? )\",\n        \"rgba()\": \"rgba( <percentage>{3} [/ <alpha-value>]? )|rgba( <number>{3} [/ <alpha-value>]? )|rgba( <percentage>#{3} , <alpha-value>? )|rgba( <number>#{3} , <alpha-value>? )\",\n        \"rotate()\": \"rotate( [<angle>|<zero>] )\",\n        \"rotate3d()\": \"rotate3d( <number> , <number> , <number> , [<angle>|<zero>] )\",\n        \"rotateX()\": \"rotateX( [<angle>|<zero>] )\",\n        \"rotateY()\": \"rotateY( [<angle>|<zero>] )\",\n        \"rotateZ()\": \"rotateZ( [<angle>|<zero>] )\",\n        \"round()\": \"round( <rounding-strategy>? , <calc-sum> , <calc-sum> )\",\n        \"rounding-strategy\": \"nearest|up|down|to-zero\",\n        \"saturate()\": \"saturate( <number-percentage> )\",\n        \"scale()\": \"scale( [<number>|<percentage>]#{1,2} )\",\n        \"scale3d()\": \"scale3d( [<number>|<percentage>]#{3} )\",\n        \"scaleX()\": \"scaleX( [<number>|<percentage>] )\",\n        \"scaleY()\": \"scaleY( [<number>|<percentage>] )\",\n        \"scaleZ()\": \"scaleZ( [<number>|<percentage>] )\",\n        \"scroll()\": \"scroll( [<axis>||<scroller>]? )\",\n        \"scroller\": \"root|nearest\",\n        \"self-position\": \"center|start|end|self-start|self-end|flex-start|flex-end\",\n        \"shape-radius\": \"<length-percentage>|closest-side|farthest-side\",\n        \"sign()\": \"sign( <calc-sum> )\",\n        \"skew()\": \"skew( [<angle>|<zero>] , [<angle>|<zero>]? )\",\n        \"skewX()\": \"skewX( [<angle>|<zero>] )\",\n        \"skewY()\": \"skewY( [<angle>|<zero>] )\",\n        \"sepia()\": \"sepia( <number-percentage> )\",\n        \"shadow\": \"inset?&&<length>{2,4}&&<color>?\",\n        \"shadow-t\": \"[<length>{2,3}&&<color>?]\",\n        \"shape\": \"rect( <top> , <right> , <bottom> , <left> )|rect( <top> <right> <bottom> <left> )\",\n        \"shape-box\": \"<box>|margin-box\",\n        \"side-or-corner\": \"[left|right]||[top|bottom]\",\n        \"sin()\": \"sin( <calc-sum> )\",\n        \"single-animation\": \"<'animation-duration'>||<easing-function>||<'animation-delay'>||<single-animation-iteration-count>||<single-animation-direction>||<single-animation-fill-mode>||<single-animation-play-state>||[none|<keyframes-name>]||<single-animation-timeline>\",\n        \"single-animation-direction\": \"normal|reverse|alternate|alternate-reverse\",\n        \"single-animation-fill-mode\": \"none|forwards|backwards|both\",\n        \"single-animation-iteration-count\": \"infinite|<number>\",\n        \"single-animation-play-state\": \"running|paused\",\n        \"single-animation-timeline\": \"auto|none|<dashed-ident>|<scroll()>|<view()>\",\n        \"single-transition\": \"[none|<single-transition-property>]||<time>||<easing-function>||<time>||<transition-behavior-value>\",\n        \"single-transition-property\": \"all|<custom-ident>\",\n        \"size\": \"closest-side|farthest-side|closest-corner|farthest-corner|<length>|<length-percentage>{2}\",\n        \"sqrt()\": \"sqrt( <calc-sum> )\",\n        \"step-position\": \"jump-start|jump-end|jump-none|jump-both|start|end\",\n        \"step-timing-function\": \"step-start|step-end|steps( <integer> [, <step-position>]? )\",\n        \"subclass-selector\": \"<id-selector>|<class-selector>|<attribute-selector>|<pseudo-class-selector>\",\n        \"supports-condition\": \"not <supports-in-parens>|<supports-in-parens> [and <supports-in-parens>]*|<supports-in-parens> [or <supports-in-parens>]*\",\n        \"supports-in-parens\": \"( <supports-condition> )|<supports-feature>|<general-enclosed>\",\n        \"supports-feature\": \"<supports-decl>|<supports-selector-fn>\",\n        \"supports-decl\": \"( <declaration> )\",\n        \"supports-selector-fn\": \"selector( <complex-selector> )\",\n        \"symbol\": \"<string>|<image>|<custom-ident>\",\n        \"tan()\": \"tan( <calc-sum> )\",\n        \"target\": \"<target-counter()>|<target-counters()>|<target-text()>\",\n        \"target-counter()\": \"target-counter( [<string>|<url>] , <custom-ident> , <counter-style>? )\",\n        \"target-counters()\": \"target-counters( [<string>|<url>] , <custom-ident> , <string> , <counter-style>? )\",\n        \"target-text()\": \"target-text( [<string>|<url>] , [content|before|after|first-letter]? )\",\n        \"time-percentage\": \"<time>|<percentage>\",\n        \"timeline-range-name\": \"cover|contain|entry|exit|entry-crossing|exit-crossing\",\n        \"easing-function\": \"linear|<cubic-bezier-timing-function>|<step-timing-function>\",\n        \"track-breadth\": \"<length-percentage>|<flex>|min-content|max-content|auto\",\n        \"track-list\": \"[<line-names>? [<track-size>|<track-repeat>]]+ <line-names>?\",\n        \"track-repeat\": \"repeat( [<integer [1,∞]>] , [<line-names>? <track-size>]+ <line-names>? )\",\n        \"track-size\": \"<track-breadth>|minmax( <inflexible-breadth> , <track-breadth> )|fit-content( <length-percentage> )\",\n        \"transform-function\": \"<matrix()>|<translate()>|<translateX()>|<translateY()>|<scale()>|<scaleX()>|<scaleY()>|<rotate()>|<skew()>|<skewX()>|<skewY()>|<matrix3d()>|<translate3d()>|<translateZ()>|<scale3d()>|<scaleZ()>|<rotate3d()>|<rotateX()>|<rotateY()>|<rotateZ()>|<perspective()>\",\n        \"transform-list\": \"<transform-function>+\",\n        \"transition-behavior-value\": \"normal|allow-discrete\",\n        \"translate()\": \"translate( <length-percentage> , <length-percentage>? )\",\n        \"translate3d()\": \"translate3d( <length-percentage> , <length-percentage> , <length> )\",\n        \"translateX()\": \"translateX( <length-percentage> )\",\n        \"translateY()\": \"translateY( <length-percentage> )\",\n        \"translateZ()\": \"translateZ( <length> )\",\n        \"type-or-unit\": \"string|color|url|integer|number|length|angle|time|frequency|cap|ch|em|ex|ic|lh|rlh|rem|vb|vi|vw|vh|vmin|vmax|mm|Q|cm|in|pt|pc|px|deg|grad|rad|turn|ms|s|Hz|kHz|%\",\n        \"type-selector\": \"<wq-name>|<ns-prefix>? '*'\",\n        \"var()\": \"var( <custom-property-name> , <declaration-value>? )\",\n        \"view()\": \"view( [<axis>||<'view-timeline-inset'>]? )\",\n        \"viewport-length\": \"auto|<length-percentage>\",\n        \"visual-box\": \"content-box|padding-box|border-box\",\n        \"wq-name\": \"<ns-prefix>? <ident-token>\",\n        \"-legacy-gradient\": \"<-webkit-gradient()>|<-legacy-linear-gradient>|<-legacy-repeating-linear-gradient>|<-legacy-radial-gradient>|<-legacy-repeating-radial-gradient>\",\n        \"-legacy-linear-gradient\": \"-moz-linear-gradient( <-legacy-linear-gradient-arguments> )|-webkit-linear-gradient( <-legacy-linear-gradient-arguments> )|-o-linear-gradient( <-legacy-linear-gradient-arguments> )\",\n        \"-legacy-repeating-linear-gradient\": \"-moz-repeating-linear-gradient( <-legacy-linear-gradient-arguments> )|-webkit-repeating-linear-gradient( <-legacy-linear-gradient-arguments> )|-o-repeating-linear-gradient( <-legacy-linear-gradient-arguments> )\",\n        \"-legacy-linear-gradient-arguments\": \"[<angle>|<side-or-corner>]? , <color-stop-list>\",\n        \"-legacy-radial-gradient\": \"-moz-radial-gradient( <-legacy-radial-gradient-arguments> )|-webkit-radial-gradient( <-legacy-radial-gradient-arguments> )|-o-radial-gradient( <-legacy-radial-gradient-arguments> )\",\n        \"-legacy-repeating-radial-gradient\": \"-moz-repeating-radial-gradient( <-legacy-radial-gradient-arguments> )|-webkit-repeating-radial-gradient( <-legacy-radial-gradient-arguments> )|-o-repeating-radial-gradient( <-legacy-radial-gradient-arguments> )\",\n        \"-legacy-radial-gradient-arguments\": \"[<position> ,]? [[[<-legacy-radial-gradient-shape>||<-legacy-radial-gradient-size>]|[<length>|<percentage>]{2}] ,]? <color-stop-list>\",\n        \"-legacy-radial-gradient-size\": \"closest-side|closest-corner|farthest-side|farthest-corner|contain|cover\",\n        \"-legacy-radial-gradient-shape\": \"circle|ellipse\",\n        \"-non-standard-font\": \"-apple-system-body|-apple-system-headline|-apple-system-subheadline|-apple-system-caption1|-apple-system-caption2|-apple-system-footnote|-apple-system-short-body|-apple-system-short-headline|-apple-system-short-subheadline|-apple-system-short-caption1|-apple-system-short-footnote|-apple-system-tall-body\",\n        \"-non-standard-color\": \"-moz-ButtonDefault|-moz-ButtonHoverFace|-moz-ButtonHoverText|-moz-CellHighlight|-moz-CellHighlightText|-moz-Combobox|-moz-ComboboxText|-moz-Dialog|-moz-DialogText|-moz-dragtargetzone|-moz-EvenTreeRow|-moz-Field|-moz-FieldText|-moz-html-CellHighlight|-moz-html-CellHighlightText|-moz-mac-accentdarkestshadow|-moz-mac-accentdarkshadow|-moz-mac-accentface|-moz-mac-accentlightesthighlight|-moz-mac-accentlightshadow|-moz-mac-accentregularhighlight|-moz-mac-accentregularshadow|-moz-mac-chrome-active|-moz-mac-chrome-inactive|-moz-mac-focusring|-moz-mac-menuselect|-moz-mac-menushadow|-moz-mac-menutextselect|-moz-MenuHover|-moz-MenuHoverText|-moz-MenuBarText|-moz-MenuBarHoverText|-moz-nativehyperlinktext|-moz-OddTreeRow|-moz-win-communicationstext|-moz-win-mediatext|-moz-activehyperlinktext|-moz-default-background-color|-moz-default-color|-moz-hyperlinktext|-moz-visitedhyperlinktext|-webkit-activelink|-webkit-focus-ring-color|-webkit-link|-webkit-text\",\n        \"-non-standard-image-rendering\": \"optimize-contrast|-moz-crisp-edges|-o-crisp-edges|-webkit-optimize-contrast\",\n        \"-non-standard-overflow\": \"overlay|-moz-scrollbars-none|-moz-scrollbars-horizontal|-moz-scrollbars-vertical|-moz-hidden-unscrollable\",\n        \"-non-standard-size\": \"intrinsic|min-intrinsic|-webkit-fill-available|-webkit-fit-content|-webkit-min-content|-webkit-max-content|-moz-available|-moz-fit-content|-moz-min-content|-moz-max-content\",\n        \"-webkit-gradient()\": \"-webkit-gradient( <-webkit-gradient-type> , <-webkit-gradient-point> [, <-webkit-gradient-point>|, <-webkit-gradient-radius> , <-webkit-gradient-point>] [, <-webkit-gradient-radius>]? [, <-webkit-gradient-color-stop>]* )\",\n        \"-webkit-gradient-color-stop\": \"from( <color> )|color-stop( [<number-zero-one>|<percentage>] , <color> )|to( <color> )\",\n        \"-webkit-gradient-point\": \"[left|center|right|<length-percentage>] [top|center|bottom|<length-percentage>]\",\n        \"-webkit-gradient-radius\": \"<length>|<percentage>\",\n        \"-webkit-gradient-type\": \"linear|radial\",\n        \"-webkit-mask-box-repeat\": \"repeat|stretch|round\",\n        \"-ms-filter-function-list\": \"<-ms-filter-function>+\",\n        \"-ms-filter-function\": \"<-ms-filter-function-progid>|<-ms-filter-function-legacy>\",\n        \"-ms-filter-function-progid\": \"'progid:' [<ident-token> '.']* [<ident-token>|<function-token> <any-value>? )]\",\n        \"-ms-filter-function-legacy\": \"<ident-token>|<function-token> <any-value>? )\",\n        \"absolute-color-base\": \"<hex-color>|<absolute-color-function>|<named-color>|transparent\",\n        \"absolute-color-function\": \"<rgb()>|<rgba()>|<hsl()>|<hsla()>|<hwb()>|<lab()>|<lch()>|<oklab()>|<oklch()>|<color()>\",\n        \"age\": \"child|young|old\",\n        \"anchor-name\": \"<dashed-ident>\",\n        \"attr-name\": \"<wq-name>\",\n        \"attr-fallback\": \"<any-value>\",\n        \"bg-clip\": \"<box>|border|text\",\n        \"bottom\": \"<length>|auto\",\n        \"container-name\": \"<custom-ident>\",\n        \"container-condition\": \"not <query-in-parens>|<query-in-parens> [[and <query-in-parens>]*|[or <query-in-parens>]*]\",\n        \"coord-box\": \"content-box|padding-box|border-box|fill-box|stroke-box|view-box\",\n        \"generic-voice\": \"[<age>? <gender> <integer>?]\",\n        \"gender\": \"male|female|neutral\",\n        \"generic-script-specific\": \"generic( kai )|generic( fangsong )|generic( nastaliq )\",\n        \"generic-complete\": \"serif|sans-serif|system-ui|cursive|fantasy|math|monospace\",\n        \"generic-incomplete\": \"ui-serif|ui-sans-serif|ui-monospace|ui-rounded\",\n        \"-non-standard-generic-family\": \"-apple-system|BlinkMacSystemFont\",\n        \"left\": \"<length>|auto\",\n        \"color-base\": \"<hex-color>|<color-function>|<named-color>|<color-mix()>|transparent\",\n        \"color-function\": \"<rgb()>|<rgba()>|<hsl()>|<hsla()>|<hwb()>|<lab()>|<lch()>|<oklab()>|<oklch()>|<color()>\",\n        \"system-color\": \"AccentColor|AccentColorText|ActiveText|ButtonBorder|ButtonFace|ButtonText|Canvas|CanvasText|Field|FieldText|GrayText|Highlight|HighlightText|LinkText|Mark|MarkText|SelectedItem|SelectedItemText|VisitedText\",\n        \"device-cmyk()\": \"<legacy-device-cmyk-syntax>|<modern-device-cmyk-syntax>\",\n        \"legacy-device-cmyk-syntax\": \"device-cmyk( <number>#{4} )\",\n        \"modern-device-cmyk-syntax\": \"device-cmyk( <cmyk-component>{4} [/ [<alpha-value>|none]]? )\",\n        \"cmyk-component\": \"<number>|<percentage>|none\",\n        \"color-mix()\": \"color-mix( <color-interpolation-method> , [<color>&&<percentage [0,100]>?]#{2} )\",\n        \"color-space\": \"<rectangular-color-space>|<polar-color-space>|<custom-color-space>\",\n        \"custom-color-space\": \"<dashed-ident>\",\n        \"paint\": \"none|<color>|<url> [none|<color>]?|context-fill|context-stroke\",\n        \"palette-identifier\": \"<dashed-ident>\",\n        \"right\": \"<length>|auto\",\n        \"scope-start\": \"<forgiving-selector-list>\",\n        \"scope-end\": \"<forgiving-selector-list>\",\n        \"forgiving-selector-list\": \"<complex-real-selector-list>\",\n        \"forgiving-relative-selector-list\": \"<relative-real-selector-list>\",\n        \"selector-list\": \"<complex-selector-list>\",\n        \"complex-real-selector-list\": \"<complex-real-selector>#\",\n        \"simple-selector-list\": \"<simple-selector>#\",\n        \"relative-real-selector-list\": \"<relative-real-selector>#\",\n        \"complex-selector-unit\": \"[<compound-selector>? <pseudo-compound-selector>*]!\",\n        \"complex-real-selector\": \"<compound-selector> [<combinator>? <compound-selector>]*\",\n        \"relative-real-selector\": \"<combinator>? <complex-real-selector>\",\n        \"pseudo-compound-selector\": \"<pseudo-element-selector> <pseudo-class-selector>*\",\n        \"simple-selector\": \"<type-selector>|<subclass-selector>\",\n        \"legacy-pseudo-element-selector\": \"':' [before|after|first-line|first-letter]\",\n        \"single-animation-composition\": \"replace|add|accumulate\",\n        \"svg-length\": \"<percentage>|<length>|<number>\",\n        \"svg-writing-mode\": \"lr-tb|rl-tb|tb-rl|lr|rl|tb\",\n        \"top\": \"<length>|auto\",\n        \"x\": \"<number>\",\n        \"y\": \"<number>\",\n        \"declaration\": \"<ident-token> : <declaration-value>? ['!' important]?\",\n        \"declaration-list\": \"[<declaration>? ';']* <declaration>?\",\n        \"url\": \"url( <string> <url-modifier>* )|<url-token>\",\n        \"url-modifier\": \"<ident>|<function-token> <any-value> )\",\n        \"number-zero-one\": \"<number [0,1]>\",\n        \"number-one-or-greater\": \"<number [1,∞]>\",\n        \"color()\": \"color( <colorspace-params> [/ [<alpha-value>|none]]? )\",\n        \"colorspace-params\": \"[<predefined-rgb-params>|<xyz-params>]\",\n        \"predefined-rgb-params\": \"<predefined-rgb> [<number>|<percentage>|none]{3}\",\n        \"predefined-rgb\": \"srgb|srgb-linear|display-p3|a98-rgb|prophoto-rgb|rec2020\",\n        \"xyz-params\": \"<xyz-space> [<number>|<percentage>|none]{3}\",\n        \"xyz-space\": \"xyz|xyz-d50|xyz-d65\",\n        \"oklab()\": \"oklab( [<percentage>|<number>|none] [<percentage>|<number>|none] [<percentage>|<number>|none] [/ [<alpha-value>|none]]? )\",\n        \"oklch()\": \"oklch( [<percentage>|<number>|none] [<percentage>|<number>|none] [<hue>|none] [/ [<alpha-value>|none]]? )\",\n        \"offset-path\": \"<ray()>|<url>|<basic-shape>\",\n        \"rect()\": \"rect( [<length-percentage>|auto]{4} [round <'border-radius'>]? )\",\n        \"xywh()\": \"xywh( <length-percentage>{2} <length-percentage [0,∞]>{2} [round <'border-radius'>]? )\",\n        \"query-in-parens\": \"( <container-condition> )|( <size-feature> )|style( <style-query> )|<general-enclosed>\",\n        \"size-feature\": \"<mf-plain>|<mf-boolean>|<mf-range>\",\n        \"style-feature\": \"<declaration>\",\n        \"style-query\": \"<style-condition>|<style-feature>\",\n        \"style-condition\": \"not <style-in-parens>|<style-in-parens> [[and <style-in-parens>]*|[or <style-in-parens>]*]\",\n        \"style-in-parens\": \"( <style-condition> )|( <style-feature> )|<general-enclosed>\",\n        \"-non-standard-display\": \"-ms-inline-flexbox|-ms-grid|-ms-inline-grid|-webkit-flex|-webkit-inline-flex|-webkit-box|-webkit-inline-box|-moz-inline-stack|-moz-box|-moz-inline-box\",\n        \"inset-area\": \"[[left|center|right|span-left|span-right|x-start|x-end|span-x-start|span-x-end|x-self-start|x-self-end|span-x-self-start|span-x-self-end|span-all]||[top|center|bottom|span-top|span-bottom|y-start|y-end|span-y-start|span-y-end|y-self-start|y-self-end|span-y-self-start|span-y-self-end|span-all]|[block-start|center|block-end|span-block-start|span-block-end|span-all]||[inline-start|center|inline-end|span-inline-start|span-inline-end|span-all]|[self-block-start|self-block-end|span-self-block-start|span-self-block-end|span-all]||[self-inline-start|self-inline-end|span-self-inline-start|span-self-inline-end|span-all]|[start|center|end|span-start|span-end|span-all]{1,2}|[self-start|center|self-end|span-self-start|span-self-end|span-all]{1,2}]\",\n        \"position-area\": \"[[left|center|right|span-left|span-right|x-start|x-end|span-x-start|span-x-end|x-self-start|x-self-end|span-x-self-start|span-x-self-end|span-all]||[top|center|bottom|span-top|span-bottom|y-start|y-end|span-y-start|span-y-end|y-self-start|y-self-end|span-y-self-start|span-y-self-end|span-all]|[block-start|center|block-end|span-block-start|span-block-end|span-all]||[inline-start|center|inline-end|span-inline-start|span-inline-end|span-all]|[self-block-start|center|self-block-end|span-self-block-start|span-self-block-end|span-all]||[self-inline-start|center|self-inline-end|span-self-inline-start|span-self-inline-end|span-all]|[start|center|end|span-start|span-end|span-all]{1,2}|[self-start|center|self-end|span-self-start|span-self-end|span-all]{1,2}]\",\n        \"anchor()\": \"anchor( <anchor-element>?&&<anchor-side> , <length-percentage>? )\",\n        \"anchor-side\": \"inside|outside|top|left|right|bottom|start|end|self-start|self-end|<percentage>|center\",\n        \"anchor-size()\": \"anchor-size( [<anchor-element>||<anchor-size>]? , <length-percentage>? )\",\n        \"anchor-size\": \"width|height|block|inline|self-block|self-inline\",\n        \"anchor-element\": \"<dashed-ident>\",\n        \"try-size\": \"most-width|most-height|most-block-size|most-inline-size\",\n        \"try-tactic\": \"flip-block||flip-inline||flip-start\",\n        \"font-variant-css2\": \"normal|small-caps\",\n        \"font-width-css3\": \"normal|ultra-condensed|extra-condensed|condensed|semi-condensed|semi-expanded|expanded|extra-expanded|ultra-expanded\",\n        \"system-family-name\": \"caption|icon|menu|message-box|small-caption|status-bar\"\n    },\n    \"properties\": {\n        \"--*\": \"<declaration-value>\",\n        \"-ms-accelerator\": \"false|true\",\n        \"-ms-block-progression\": \"tb|rl|bt|lr\",\n        \"-ms-content-zoom-chaining\": \"none|chained\",\n        \"-ms-content-zooming\": \"none|zoom\",\n        \"-ms-content-zoom-limit\": \"<'-ms-content-zoom-limit-min'> <'-ms-content-zoom-limit-max'>\",\n        \"-ms-content-zoom-limit-max\": \"<percentage>\",\n        \"-ms-content-zoom-limit-min\": \"<percentage>\",\n        \"-ms-content-zoom-snap\": \"<'-ms-content-zoom-snap-type'>||<'-ms-content-zoom-snap-points'>\",\n        \"-ms-content-zoom-snap-points\": \"snapInterval( <percentage> , <percentage> )|snapList( <percentage># )\",\n        \"-ms-content-zoom-snap-type\": \"none|proximity|mandatory\",\n        \"-ms-filter\": \"<string>\",\n        \"-ms-flow-from\": \"[none|<custom-ident>]#\",\n        \"-ms-flow-into\": \"[none|<custom-ident>]#\",\n        \"-ms-grid-columns\": \"none|<track-list>|<auto-track-list>\",\n        \"-ms-grid-rows\": \"none|<track-list>|<auto-track-list>\",\n        \"-ms-high-contrast-adjust\": \"auto|none\",\n        \"-ms-hyphenate-limit-chars\": \"auto|<integer>{1,3}\",\n        \"-ms-hyphenate-limit-lines\": \"no-limit|<integer>\",\n        \"-ms-hyphenate-limit-zone\": \"<percentage>|<length>\",\n        \"-ms-ime-align\": \"auto|after\",\n        \"-ms-overflow-style\": \"auto|none|scrollbar|-ms-autohiding-scrollbar\",\n        \"-ms-scrollbar-3dlight-color\": \"<color>\",\n        \"-ms-scrollbar-arrow-color\": \"<color>\",\n        \"-ms-scrollbar-base-color\": \"<color>\",\n        \"-ms-scrollbar-darkshadow-color\": \"<color>\",\n        \"-ms-scrollbar-face-color\": \"<color>\",\n        \"-ms-scrollbar-highlight-color\": \"<color>\",\n        \"-ms-scrollbar-shadow-color\": \"<color>\",\n        \"-ms-scrollbar-track-color\": \"<color>\",\n        \"-ms-scroll-chaining\": \"chained|none\",\n        \"-ms-scroll-limit\": \"<'-ms-scroll-limit-x-min'> <'-ms-scroll-limit-y-min'> <'-ms-scroll-limit-x-max'> <'-ms-scroll-limit-y-max'>\",\n        \"-ms-scroll-limit-x-max\": \"auto|<length>\",\n        \"-ms-scroll-limit-x-min\": \"<length>\",\n        \"-ms-scroll-limit-y-max\": \"auto|<length>\",\n        \"-ms-scroll-limit-y-min\": \"<length>\",\n        \"-ms-scroll-rails\": \"none|railed\",\n        \"-ms-scroll-snap-points-x\": \"snapInterval( <length-percentage> , <length-percentage> )|snapList( <length-percentage># )\",\n        \"-ms-scroll-snap-points-y\": \"snapInterval( <length-percentage> , <length-percentage> )|snapList( <length-percentage># )\",\n        \"-ms-scroll-snap-type\": \"none|proximity|mandatory\",\n        \"-ms-scroll-snap-x\": \"<'-ms-scroll-snap-type'> <'-ms-scroll-snap-points-x'>\",\n        \"-ms-scroll-snap-y\": \"<'-ms-scroll-snap-type'> <'-ms-scroll-snap-points-y'>\",\n        \"-ms-scroll-translation\": \"none|vertical-to-horizontal\",\n        \"-ms-text-autospace\": \"none|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space\",\n        \"-ms-touch-select\": \"grippers|none\",\n        \"-ms-user-select\": \"none|element|text\",\n        \"-ms-wrap-flow\": \"auto|both|start|end|maximum|clear\",\n        \"-ms-wrap-margin\": \"<length>\",\n        \"-ms-wrap-through\": \"wrap|none\",\n        \"-moz-appearance\": \"none|button|button-arrow-down|button-arrow-next|button-arrow-previous|button-arrow-up|button-bevel|button-focus|caret|checkbox|checkbox-container|checkbox-label|checkmenuitem|dualbutton|groupbox|listbox|listitem|menuarrow|menubar|menucheckbox|menuimage|menuitem|menuitemtext|menulist|menulist-button|menulist-text|menulist-textfield|menupopup|menuradio|menuseparator|meterbar|meterchunk|progressbar|progressbar-vertical|progresschunk|progresschunk-vertical|radio|radio-container|radio-label|radiomenuitem|range|range-thumb|resizer|resizerpanel|scale-horizontal|scalethumbend|scalethumb-horizontal|scalethumbstart|scalethumbtick|scalethumb-vertical|scale-vertical|scrollbarbutton-down|scrollbarbutton-left|scrollbarbutton-right|scrollbarbutton-up|scrollbarthumb-horizontal|scrollbarthumb-vertical|scrollbartrack-horizontal|scrollbartrack-vertical|searchfield|separator|sheet|spinner|spinner-downbutton|spinner-textfield|spinner-upbutton|splitter|statusbar|statusbarpanel|tab|tabpanel|tabpanels|tab-scroll-arrow-back|tab-scroll-arrow-forward|textfield|textfield-multiline|toolbar|toolbarbutton|toolbarbutton-dropdown|toolbargripper|toolbox|tooltip|treeheader|treeheadercell|treeheadersortarrow|treeitem|treeline|treetwisty|treetwistyopen|treeview|-moz-mac-unified-toolbar|-moz-win-borderless-glass|-moz-win-browsertabbar-toolbox|-moz-win-communicationstext|-moz-win-communications-toolbox|-moz-win-exclude-glass|-moz-win-glass|-moz-win-mediatext|-moz-win-media-toolbox|-moz-window-button-box|-moz-window-button-box-maximized|-moz-window-button-close|-moz-window-button-maximize|-moz-window-button-minimize|-moz-window-button-restore|-moz-window-frame-bottom|-moz-window-frame-left|-moz-window-frame-right|-moz-window-titlebar|-moz-window-titlebar-maximized\",\n        \"-moz-binding\": \"<url>|none\",\n        \"-moz-border-bottom-colors\": \"<color>+|none\",\n        \"-moz-border-left-colors\": \"<color>+|none\",\n        \"-moz-border-right-colors\": \"<color>+|none\",\n        \"-moz-border-top-colors\": \"<color>+|none\",\n        \"-moz-context-properties\": \"none|[fill|fill-opacity|stroke|stroke-opacity]#\",\n        \"-moz-float-edge\": \"border-box|content-box|margin-box|padding-box\",\n        \"-moz-force-broken-image-icon\": \"0|1\",\n        \"-moz-image-region\": \"<shape>|auto\",\n        \"-moz-orient\": \"inline|block|horizontal|vertical\",\n        \"-moz-outline-radius\": \"<outline-radius>{1,4} [/ <outline-radius>{1,4}]?\",\n        \"-moz-outline-radius-bottomleft\": \"<outline-radius>\",\n        \"-moz-outline-radius-bottomright\": \"<outline-radius>\",\n        \"-moz-outline-radius-topleft\": \"<outline-radius>\",\n        \"-moz-outline-radius-topright\": \"<outline-radius>\",\n        \"-moz-stack-sizing\": \"ignore|stretch-to-fit\",\n        \"-moz-text-blink\": \"none|blink\",\n        \"-moz-user-focus\": \"ignore|normal|select-after|select-before|select-menu|select-same|select-all|none\",\n        \"-moz-user-input\": \"auto|none|enabled|disabled\",\n        \"-moz-user-modify\": \"read-only|read-write|write-only\",\n        \"-moz-window-dragging\": \"drag|no-drag\",\n        \"-moz-window-shadow\": \"default|menu|tooltip|sheet|none\",\n        \"-webkit-appearance\": \"none|button|button-bevel|caps-lock-indicator|caret|checkbox|default-button|inner-spin-button|listbox|listitem|media-controls-background|media-controls-fullscreen-background|media-current-time-display|media-enter-fullscreen-button|media-exit-fullscreen-button|media-fullscreen-button|media-mute-button|media-overlay-play-button|media-play-button|media-seek-back-button|media-seek-forward-button|media-slider|media-sliderthumb|media-time-remaining-display|media-toggle-closed-captions-button|media-volume-slider|media-volume-slider-container|media-volume-sliderthumb|menulist|menulist-button|menulist-text|menulist-textfield|meter|progress-bar|progress-bar-value|push-button|radio|scrollbarbutton-down|scrollbarbutton-left|scrollbarbutton-right|scrollbarbutton-up|scrollbargripper-horizontal|scrollbargripper-vertical|scrollbarthumb-horizontal|scrollbarthumb-vertical|scrollbartrack-horizontal|scrollbartrack-vertical|searchfield|searchfield-cancel-button|searchfield-decoration|searchfield-results-button|searchfield-results-decoration|slider-horizontal|slider-vertical|sliderthumb-horizontal|sliderthumb-vertical|square-button|textarea|textfield|-apple-pay-button\",\n        \"-webkit-border-before\": \"<'border-width'>||<'border-style'>||<color>\",\n        \"-webkit-border-before-color\": \"<color>\",\n        \"-webkit-border-before-style\": \"<'border-style'>\",\n        \"-webkit-border-before-width\": \"<'border-width'>\",\n        \"-webkit-box-reflect\": \"[above|below|right|left]? <length>? <image>?\",\n        \"-webkit-line-clamp\": \"none|<integer>\",\n        \"-webkit-mask\": \"[<mask-reference>||<position> [/ <bg-size>]?||<repeat-style>||[<box>|border|padding|content|text]||[<box>|border|padding|content]]#\",\n        \"-webkit-mask-attachment\": \"<attachment>#\",\n        \"-webkit-mask-clip\": \"[<box>|border|padding|content|text]#\",\n        \"-webkit-mask-composite\": \"<composite-style>#\",\n        \"-webkit-mask-image\": \"<mask-reference>#\",\n        \"-webkit-mask-origin\": \"[<box>|border|padding|content]#\",\n        \"-webkit-mask-position\": \"<position>#\",\n        \"-webkit-mask-position-x\": \"[<length-percentage>|left|center|right]#\",\n        \"-webkit-mask-position-y\": \"[<length-percentage>|top|center|bottom]#\",\n        \"-webkit-mask-repeat\": \"<repeat-style>#\",\n        \"-webkit-mask-repeat-x\": \"repeat|no-repeat|space|round\",\n        \"-webkit-mask-repeat-y\": \"repeat|no-repeat|space|round\",\n        \"-webkit-mask-size\": \"<bg-size>#\",\n        \"-webkit-overflow-scrolling\": \"auto|touch\",\n        \"-webkit-tap-highlight-color\": \"<color>\",\n        \"-webkit-text-fill-color\": \"<color>\",\n        \"-webkit-text-stroke\": \"<length>||<color>\",\n        \"-webkit-text-stroke-color\": \"<color>\",\n        \"-webkit-text-stroke-width\": \"<length>\",\n        \"-webkit-touch-callout\": \"default|none\",\n        \"-webkit-user-modify\": \"read-only|read-write|read-write-plaintext-only\",\n        \"accent-color\": \"auto|<color>\",\n        \"align-content\": \"normal|<baseline-position>|<content-distribution>|<overflow-position>? <content-position>\",\n        \"align-items\": \"normal|stretch|<baseline-position>|[<overflow-position>? <self-position>]\",\n        \"align-self\": \"auto|normal|stretch|<baseline-position>|<overflow-position>? <self-position>\",\n        \"align-tracks\": \"[normal|<baseline-position>|<content-distribution>|<overflow-position>? <content-position>]#\",\n        \"all\": \"initial|inherit|unset|revert|revert-layer\",\n        \"anchor-name\": \"none|<dashed-ident>#\",\n        \"anchor-scope\": \"none|all|<dashed-ident>#\",\n        \"animation\": \"<single-animation>#\",\n        \"animation-composition\": \"<single-animation-composition>#\",\n        \"animation-delay\": \"<time>#\",\n        \"animation-direction\": \"<single-animation-direction>#\",\n        \"animation-duration\": \"<time>#\",\n        \"animation-fill-mode\": \"<single-animation-fill-mode>#\",\n        \"animation-iteration-count\": \"<single-animation-iteration-count>#\",\n        \"animation-name\": \"[none|<keyframes-name>]#\",\n        \"animation-play-state\": \"<single-animation-play-state>#\",\n        \"animation-range\": \"[<'animation-range-start'> <'animation-range-end'>?]#\",\n        \"animation-range-end\": \"[normal|<length-percentage>|<timeline-range-name> <length-percentage>?]#\",\n        \"animation-range-start\": \"[normal|<length-percentage>|<timeline-range-name> <length-percentage>?]#\",\n        \"animation-timing-function\": \"<easing-function>#\",\n        \"animation-timeline\": \"<single-animation-timeline>#\",\n        \"appearance\": \"none|auto|textfield|menulist-button|<compat-auto>\",\n        \"aspect-ratio\": \"auto||<ratio>\",\n        \"azimuth\": \"<angle>|[[left-side|far-left|left|center-left|center|center-right|right|far-right|right-side]||behind]|leftwards|rightwards\",\n        \"backdrop-filter\": \"none|<filter-function-list>\",\n        \"backface-visibility\": \"visible|hidden\",\n        \"background\": \"[<bg-layer> ,]* <final-bg-layer>\",\n        \"background-attachment\": \"<attachment>#\",\n        \"background-blend-mode\": \"<blend-mode>#\",\n        \"background-clip\": \"<bg-clip>#\",\n        \"background-color\": \"<color>\",\n        \"background-image\": \"<bg-image>#\",\n        \"background-origin\": \"<box>#\",\n        \"background-position\": \"<bg-position>#\",\n        \"background-position-x\": \"[center|[[left|right|x-start|x-end]? <length-percentage>?]!]#\",\n        \"background-position-y\": \"[center|[[top|bottom|y-start|y-end]? <length-percentage>?]!]#\",\n        \"background-repeat\": \"<repeat-style>#\",\n        \"background-size\": \"<bg-size>#\",\n        \"block-size\": \"<'width'>\",\n        \"border\": \"<line-width>||<line-style>||<color>\",\n        \"border-block\": \"<'border-top-width'>||<'border-top-style'>||<color>\",\n        \"border-block-color\": \"<'border-top-color'>{1,2}\",\n        \"border-block-style\": \"<'border-top-style'>\",\n        \"border-block-width\": \"<'border-top-width'>\",\n        \"border-block-end\": \"<'border-top-width'>||<'border-top-style'>||<color>\",\n        \"border-block-end-color\": \"<'border-top-color'>\",\n        \"border-block-end-style\": \"<'border-top-style'>\",\n        \"border-block-end-width\": \"<'border-top-width'>\",\n        \"border-block-start\": \"<'border-top-width'>||<'border-top-style'>||<color>\",\n        \"border-block-start-color\": \"<'border-top-color'>\",\n        \"border-block-start-style\": \"<'border-top-style'>\",\n        \"border-block-start-width\": \"<'border-top-width'>\",\n        \"border-bottom\": \"<line-width>||<line-style>||<color>\",\n        \"border-bottom-color\": \"<'border-top-color'>\",\n        \"border-bottom-left-radius\": \"<length-percentage>{1,2}\",\n        \"border-bottom-right-radius\": \"<length-percentage>{1,2}\",\n        \"border-bottom-style\": \"<line-style>\",\n        \"border-bottom-width\": \"<line-width>\",\n        \"border-collapse\": \"collapse|separate\",\n        \"border-color\": \"<color>{1,4}\",\n        \"border-end-end-radius\": \"<length-percentage>{1,2}\",\n        \"border-end-start-radius\": \"<length-percentage>{1,2}\",\n        \"border-image\": \"<'border-image-source'>||<'border-image-slice'> [/ <'border-image-width'>|/ <'border-image-width'>? / <'border-image-outset'>]?||<'border-image-repeat'>\",\n        \"border-image-outset\": \"[<length>|<number>]{1,4}\",\n        \"border-image-repeat\": \"[stretch|repeat|round|space]{1,2}\",\n        \"border-image-slice\": \"<number-percentage>{1,4}&&fill?\",\n        \"border-image-source\": \"none|<image>\",\n        \"border-image-width\": \"[<length-percentage>|<number>|auto]{1,4}\",\n        \"border-inline\": \"<'border-top-width'>||<'border-top-style'>||<color>\",\n        \"border-inline-end\": \"<'border-top-width'>||<'border-top-style'>||<color>\",\n        \"border-inline-color\": \"<'border-top-color'>{1,2}\",\n        \"border-inline-style\": \"<'border-top-style'>\",\n        \"border-inline-width\": \"<'border-top-width'>\",\n        \"border-inline-end-color\": \"<'border-top-color'>\",\n        \"border-inline-end-style\": \"<'border-top-style'>\",\n        \"border-inline-end-width\": \"<'border-top-width'>\",\n        \"border-inline-start\": \"<'border-top-width'>||<'border-top-style'>||<color>\",\n        \"border-inline-start-color\": \"<'border-top-color'>\",\n        \"border-inline-start-style\": \"<'border-top-style'>\",\n        \"border-inline-start-width\": \"<'border-top-width'>\",\n        \"border-left\": \"<line-width>||<line-style>||<color>\",\n        \"border-left-color\": \"<color>\",\n        \"border-left-style\": \"<line-style>\",\n        \"border-left-width\": \"<line-width>\",\n        \"border-radius\": \"<length-percentage>{1,4} [/ <length-percentage>{1,4}]?\",\n        \"border-right\": \"<line-width>||<line-style>||<color>\",\n        \"border-right-color\": \"<color>\",\n        \"border-right-style\": \"<line-style>\",\n        \"border-right-width\": \"<line-width>\",\n        \"border-spacing\": \"<length> <length>?\",\n        \"border-start-end-radius\": \"<length-percentage>{1,2}\",\n        \"border-start-start-radius\": \"<length-percentage>{1,2}\",\n        \"border-style\": \"<line-style>{1,4}\",\n        \"border-top\": \"<line-width>||<line-style>||<color>\",\n        \"border-top-color\": \"<color>\",\n        \"border-top-left-radius\": \"<length-percentage>{1,2}\",\n        \"border-top-right-radius\": \"<length-percentage>{1,2}\",\n        \"border-top-style\": \"<line-style>\",\n        \"border-top-width\": \"<line-width>\",\n        \"border-width\": \"<line-width>{1,4}\",\n        \"bottom\": \"<length>|<percentage>|auto\",\n        \"box-align\": \"start|center|end|baseline|stretch\",\n        \"box-decoration-break\": \"slice|clone\",\n        \"box-direction\": \"normal|reverse|inherit\",\n        \"box-flex\": \"<number>\",\n        \"box-flex-group\": \"<integer>\",\n        \"box-lines\": \"single|multiple\",\n        \"box-ordinal-group\": \"<integer>\",\n        \"box-orient\": \"horizontal|vertical|inline-axis|block-axis|inherit\",\n        \"box-pack\": \"start|center|end|justify\",\n        \"box-shadow\": \"none|<shadow>#\",\n        \"box-sizing\": \"content-box|border-box\",\n        \"break-after\": \"auto|avoid|always|all|avoid-page|page|left|right|recto|verso|avoid-column|column|avoid-region|region\",\n        \"break-before\": \"auto|avoid|always|all|avoid-page|page|left|right|recto|verso|avoid-column|column|avoid-region|region\",\n        \"break-inside\": \"auto|avoid|avoid-page|avoid-column|avoid-region\",\n        \"caption-side\": \"top|bottom|block-start|block-end|inline-start|inline-end\",\n        \"caret\": \"<'caret-color'>||<'caret-shape'>\",\n        \"caret-color\": \"auto|<color>\",\n        \"caret-shape\": \"auto|bar|block|underscore\",\n        \"clear\": \"none|left|right|both|inline-start|inline-end\",\n        \"clip\": \"<shape>|auto\",\n        \"clip-path\": \"<clip-source>|[<basic-shape>||<geometry-box>]|none\",\n        \"clip-rule\": \"nonzero|evenodd\",\n        \"color\": \"<color>\",\n        \"color-interpolation-filters\": \"auto|sRGB|linearRGB\",\n        \"color-scheme\": \"normal|[light|dark|<custom-ident>]+&&only?\",\n        \"column-count\": \"<integer>|auto\",\n        \"column-fill\": \"auto|balance\",\n        \"column-gap\": \"normal|<length-percentage>\",\n        \"column-rule\": \"<'column-rule-width'>||<'column-rule-style'>||<'column-rule-color'>\",\n        \"column-rule-color\": \"<color>\",\n        \"column-rule-style\": \"<'border-style'>\",\n        \"column-rule-width\": \"<'border-width'>\",\n        \"column-span\": \"none|all\",\n        \"column-width\": \"<length>|auto\",\n        \"columns\": \"<'column-width'>||<'column-count'>\",\n        \"contain\": \"none|strict|content|[[size||inline-size]||layout||style||paint]\",\n        \"contain-intrinsic-size\": \"[auto? [none|<length>]]{1,2}\",\n        \"contain-intrinsic-block-size\": \"auto? [none|<length>]\",\n        \"contain-intrinsic-height\": \"auto? [none|<length>]\",\n        \"contain-intrinsic-inline-size\": \"auto? [none|<length>]\",\n        \"contain-intrinsic-width\": \"auto? [none|<length>]\",\n        \"container\": \"<'container-name'> [/ <'container-type'>]?\",\n        \"container-name\": \"none|<custom-ident>+\",\n        \"container-type\": \"normal||[size|inline-size]\",\n        \"content\": \"normal|none|[<content-replacement>|<content-list>] [/ [<string>|<counter>]+]?\",\n        \"content-visibility\": \"visible|auto|hidden\",\n        \"counter-increment\": \"[<counter-name> <integer>?]+|none\",\n        \"counter-reset\": \"[<counter-name> <integer>?|<reversed-counter-name> <integer>?]+|none\",\n        \"counter-set\": \"[<counter-name> <integer>?]+|none\",\n        \"cursor\": \"[[<url> [<x> <y>]? ,]* [auto|default|none|context-menu|help|pointer|progress|wait|cell|crosshair|text|vertical-text|alias|copy|move|no-drop|not-allowed|e-resize|n-resize|ne-resize|nw-resize|s-resize|se-resize|sw-resize|w-resize|ew-resize|ns-resize|nesw-resize|nwse-resize|col-resize|row-resize|all-scroll|zoom-in|zoom-out|grab|grabbing|hand|-webkit-grab|-webkit-grabbing|-webkit-zoom-in|-webkit-zoom-out|-moz-grab|-moz-grabbing|-moz-zoom-in|-moz-zoom-out]]\",\n        \"d\": \"none|path( <string> )\",\n        \"cx\": \"<length>|<percentage>\",\n        \"cy\": \"<length>|<percentage>\",\n        \"direction\": \"ltr|rtl\",\n        \"display\": \"[<display-outside>||<display-inside>]|<display-listitem>|<display-internal>|<display-box>|<display-legacy>|<-non-standard-display>\",\n        \"dominant-baseline\": \"auto|use-script|no-change|reset-size|ideographic|alphabetic|hanging|mathematical|central|middle|text-after-edge|text-before-edge\",\n        \"empty-cells\": \"show|hide\",\n        \"field-sizing\": \"content|fixed\",\n        \"fill\": \"<paint>\",\n        \"fill-opacity\": \"<number-zero-one>\",\n        \"fill-rule\": \"nonzero|evenodd\",\n        \"filter\": \"none|<filter-function-list>|<-ms-filter-function-list>\",\n        \"flex\": \"none|[<'flex-grow'> <'flex-shrink'>?||<'flex-basis'>]\",\n        \"flex-basis\": \"content|<'width'>\",\n        \"flex-direction\": \"row|row-reverse|column|column-reverse\",\n        \"flex-flow\": \"<'flex-direction'>||<'flex-wrap'>\",\n        \"flex-grow\": \"<number>\",\n        \"flex-shrink\": \"<number>\",\n        \"flex-wrap\": \"nowrap|wrap|wrap-reverse\",\n        \"float\": \"left|right|none|inline-start|inline-end\",\n        \"font\": \"[[<'font-style'>||<font-variant-css2>||<'font-weight'>||<font-width-css3>]? <'font-size'> [/ <'line-height'>]? <'font-family'>#]|<system-family-name>|<-non-standard-font>\",\n        \"font-family\": \"[<family-name>|<generic-family>]#\",\n        \"font-feature-settings\": \"normal|<feature-tag-value>#\",\n        \"font-kerning\": \"auto|normal|none\",\n        \"font-language-override\": \"normal|<string>\",\n        \"font-optical-sizing\": \"auto|none\",\n        \"font-palette\": \"normal|light|dark|<palette-identifier>\",\n        \"font-variation-settings\": \"normal|[<string> <number>]#\",\n        \"font-size\": \"<absolute-size>|<relative-size>|<length-percentage>\",\n        \"font-size-adjust\": \"none|[ex-height|cap-height|ch-width|ic-width|ic-height]? [from-font|<number>]\",\n        \"font-smooth\": \"auto|never|always|<absolute-size>|<length>\",\n        \"font-stretch\": \"<font-stretch-absolute>\",\n        \"font-style\": \"normal|italic|oblique <angle>?\",\n        \"font-synthesis\": \"none|[weight||style||small-caps||position]\",\n        \"font-synthesis-position\": \"auto|none\",\n        \"font-synthesis-small-caps\": \"auto|none\",\n        \"font-synthesis-style\": \"auto|none\",\n        \"font-synthesis-weight\": \"auto|none\",\n        \"font-variant\": \"normal|none|[<common-lig-values>||<discretionary-lig-values>||<historical-lig-values>||<contextual-alt-values>||stylistic( <feature-value-name> )||historical-forms||styleset( <feature-value-name># )||character-variant( <feature-value-name># )||swash( <feature-value-name> )||ornaments( <feature-value-name> )||annotation( <feature-value-name> )||[small-caps|all-small-caps|petite-caps|all-petite-caps|unicase|titling-caps]||<numeric-figure-values>||<numeric-spacing-values>||<numeric-fraction-values>||ordinal||slashed-zero||<east-asian-variant-values>||<east-asian-width-values>||ruby]\",\n        \"font-variant-alternates\": \"normal|[stylistic( <feature-value-name> )||historical-forms||styleset( <feature-value-name># )||character-variant( <feature-value-name># )||swash( <feature-value-name> )||ornaments( <feature-value-name> )||annotation( <feature-value-name> )]\",\n        \"font-variant-caps\": \"normal|small-caps|all-small-caps|petite-caps|all-petite-caps|unicase|titling-caps\",\n        \"font-variant-east-asian\": \"normal|[<east-asian-variant-values>||<east-asian-width-values>||ruby]\",\n        \"font-variant-emoji\": \"normal|text|emoji|unicode\",\n        \"font-variant-ligatures\": \"normal|none|[<common-lig-values>||<discretionary-lig-values>||<historical-lig-values>||<contextual-alt-values>]\",\n        \"font-variant-numeric\": \"normal|[<numeric-figure-values>||<numeric-spacing-values>||<numeric-fraction-values>||ordinal||slashed-zero]\",\n        \"font-variant-position\": \"normal|sub|super\",\n        \"font-weight\": \"<font-weight-absolute>|bolder|lighter\",\n        \"forced-color-adjust\": \"auto|none\",\n        \"gap\": \"<'row-gap'> <'column-gap'>?\",\n        \"grid\": \"<'grid-template'>|<'grid-template-rows'> / [auto-flow&&dense?] <'grid-auto-columns'>?|[auto-flow&&dense?] <'grid-auto-rows'>? / <'grid-template-columns'>\",\n        \"grid-area\": \"<grid-line> [/ <grid-line>]{0,3}\",\n        \"grid-auto-columns\": \"<track-size>+\",\n        \"grid-auto-flow\": \"[row|column]||dense\",\n        \"grid-auto-rows\": \"<track-size>+\",\n        \"grid-column\": \"<grid-line> [/ <grid-line>]?\",\n        \"grid-column-end\": \"<grid-line>\",\n        \"grid-column-gap\": \"<length-percentage>\",\n        \"grid-column-start\": \"<grid-line>\",\n        \"grid-gap\": \"<'grid-row-gap'> <'grid-column-gap'>?\",\n        \"grid-row\": \"<grid-line> [/ <grid-line>]?\",\n        \"grid-row-end\": \"<grid-line>\",\n        \"grid-row-gap\": \"<length-percentage>\",\n        \"grid-row-start\": \"<grid-line>\",\n        \"grid-template\": \"none|[<'grid-template-rows'> / <'grid-template-columns'>]|[<line-names>? <string> <track-size>? <line-names>?]+ [/ <explicit-track-list>]?\",\n        \"grid-template-areas\": \"none|<string>+\",\n        \"grid-template-columns\": \"none|<track-list>|<auto-track-list>|subgrid <line-name-list>?\",\n        \"grid-template-rows\": \"none|<track-list>|<auto-track-list>|subgrid <line-name-list>?\",\n        \"hanging-punctuation\": \"none|[first||[force-end|allow-end]||last]\",\n        \"height\": \"auto|<length>|<percentage>|min-content|max-content|fit-content|fit-content( <length-percentage> )|stretch|<-non-standard-size>\",\n        \"hyphenate-character\": \"auto|<string>\",\n        \"hyphenate-limit-chars\": \"[auto|<integer>]{1,3}\",\n        \"hyphens\": \"none|manual|auto\",\n        \"image-orientation\": \"from-image|<angle>|[<angle>? flip]\",\n        \"image-rendering\": \"auto|crisp-edges|pixelated|optimizeSpeed|optimizeQuality|<-non-standard-image-rendering>\",\n        \"image-resolution\": \"[from-image||<resolution>]&&snap?\",\n        \"ime-mode\": \"auto|normal|active|inactive|disabled\",\n        \"initial-letter\": \"normal|[<number> <integer>?]\",\n        \"initial-letter-align\": \"[auto|alphabetic|hanging|ideographic]\",\n        \"inline-size\": \"<'width'>\",\n        \"input-security\": \"auto|none\",\n        \"inset\": \"<'top'>{1,4}\",\n        \"inset-block\": \"<'top'>{1,2}\",\n        \"inset-block-end\": \"<'top'>\",\n        \"inset-block-start\": \"<'top'>\",\n        \"inset-inline\": \"<'top'>{1,2}\",\n        \"inset-inline-end\": \"<'top'>\",\n        \"inset-inline-start\": \"<'top'>\",\n        \"interpolate-size\": \"numeric-only|allow-keywords\",\n        \"isolation\": \"auto|isolate\",\n        \"justify-content\": \"normal|<content-distribution>|<overflow-position>? [<content-position>|left|right]\",\n        \"justify-items\": \"normal|stretch|<baseline-position>|<overflow-position>? [<self-position>|left|right]|legacy|legacy&&[left|right|center]\",\n        \"justify-self\": \"auto|normal|stretch|<baseline-position>|<overflow-position>? [<self-position>|left|right]\",\n        \"justify-tracks\": \"[normal|<content-distribution>|<overflow-position>? [<content-position>|left|right]]#\",\n        \"left\": \"<length>|<percentage>|auto\",\n        \"letter-spacing\": \"normal|<length-percentage>\",\n        \"line-break\": \"auto|loose|normal|strict|anywhere\",\n        \"line-clamp\": \"none|<integer>\",\n        \"line-height\": \"normal|<number>|<length>|<percentage>\",\n        \"line-height-step\": \"<length>\",\n        \"list-style\": \"<'list-style-type'>||<'list-style-position'>||<'list-style-image'>\",\n        \"list-style-image\": \"<image>|none\",\n        \"list-style-position\": \"inside|outside\",\n        \"list-style-type\": \"<counter-style>|<string>|none\",\n        \"margin\": \"[<length>|<percentage>|auto]{1,4}\",\n        \"margin-block\": \"<'margin-left'>{1,2}\",\n        \"margin-block-end\": \"<'margin-left'>\",\n        \"margin-block-start\": \"<'margin-left'>\",\n        \"margin-bottom\": \"<length>|<percentage>|auto\",\n        \"margin-inline\": \"<'margin-left'>{1,2}\",\n        \"margin-inline-end\": \"<'margin-left'>\",\n        \"margin-inline-start\": \"<'margin-left'>\",\n        \"margin-left\": \"<length>|<percentage>|auto\",\n        \"margin-right\": \"<length>|<percentage>|auto\",\n        \"margin-top\": \"<length>|<percentage>|auto\",\n        \"margin-trim\": \"none|in-flow|all\",\n        \"marker\": \"none|<url>\",\n        \"marker-end\": \"none|<url>\",\n        \"marker-mid\": \"none|<url>\",\n        \"marker-start\": \"none|<url>\",\n        \"mask\": \"<mask-layer>#\",\n        \"mask-border\": \"<'mask-border-source'>||<'mask-border-slice'> [/ <'mask-border-width'>? [/ <'mask-border-outset'>]?]?||<'mask-border-repeat'>||<'mask-border-mode'>\",\n        \"mask-border-mode\": \"luminance|alpha\",\n        \"mask-border-outset\": \"[<length>|<number>]{1,4}\",\n        \"mask-border-repeat\": \"[stretch|repeat|round|space]{1,2}\",\n        \"mask-border-slice\": \"<number-percentage>{1,4} fill?\",\n        \"mask-border-source\": \"none|<image>\",\n        \"mask-border-width\": \"[<length-percentage>|<number>|auto]{1,4}\",\n        \"mask-clip\": \"[<geometry-box>|no-clip]#\",\n        \"mask-composite\": \"<compositing-operator>#\",\n        \"mask-image\": \"<mask-reference>#\",\n        \"mask-mode\": \"<masking-mode>#\",\n        \"mask-origin\": \"<geometry-box>#\",\n        \"mask-position\": \"<position>#\",\n        \"mask-repeat\": \"<repeat-style>#\",\n        \"mask-size\": \"<bg-size>#\",\n        \"mask-type\": \"luminance|alpha\",\n        \"masonry-auto-flow\": \"[pack|next]||[definite-first|ordered]\",\n        \"math-depth\": \"auto-add|add( <integer> )|<integer>\",\n        \"math-shift\": \"normal|compact\",\n        \"math-style\": \"normal|compact\",\n        \"max-block-size\": \"<'max-width'>\",\n        \"max-height\": \"none|<length-percentage>|min-content|max-content|fit-content|fit-content( <length-percentage> )|stretch|<-non-standard-size>\",\n        \"max-inline-size\": \"<'max-width'>\",\n        \"max-lines\": \"none|<integer>\",\n        \"max-width\": \"none|<length-percentage>|min-content|max-content|fit-content|fit-content( <length-percentage> )|stretch|<-non-standard-size>\",\n        \"min-block-size\": \"<'min-width'>\",\n        \"min-height\": \"auto|<length>|<percentage>|min-content|max-content|fit-content|fit-content( <length-percentage> )|stretch|<-non-standard-size>\",\n        \"min-inline-size\": \"<'min-width'>\",\n        \"min-width\": \"auto|<length>|<percentage>|min-content|max-content|fit-content|fit-content( <length-percentage> )|stretch|<-non-standard-size>\",\n        \"mix-blend-mode\": \"<blend-mode>|plus-lighter\",\n        \"object-fit\": \"fill|contain|cover|none|scale-down\",\n        \"object-position\": \"<position>\",\n        \"offset\": \"[<'offset-position'>? [<'offset-path'> [<'offset-distance'>||<'offset-rotate'>]?]?]! [/ <'offset-anchor'>]?\",\n        \"offset-anchor\": \"auto|<position>\",\n        \"offset-distance\": \"<length-percentage>\",\n        \"offset-path\": \"none|<offset-path>||<coord-box>\",\n        \"offset-position\": \"normal|auto|<position>\",\n        \"offset-rotate\": \"[auto|reverse]||<angle>\",\n        \"opacity\": \"<alpha-value>\",\n        \"order\": \"<integer>\",\n        \"orphans\": \"<integer>\",\n        \"outline\": \"[<'outline-width'>||<'outline-style'>||<'outline-color'>]\",\n        \"outline-color\": \"auto|<color>\",\n        \"outline-offset\": \"<length>\",\n        \"outline-style\": \"auto|<'border-style'>\",\n        \"outline-width\": \"<line-width>\",\n        \"overflow\": \"[visible|hidden|clip|scroll|auto]{1,2}|<-non-standard-overflow>\",\n        \"overflow-anchor\": \"auto|none\",\n        \"overflow-block\": \"visible|hidden|clip|scroll|auto\",\n        \"overflow-clip-box\": \"padding-box|content-box\",\n        \"overflow-clip-margin\": \"<visual-box>||<length [0,∞]>\",\n        \"overflow-inline\": \"visible|hidden|clip|scroll|auto\",\n        \"overflow-wrap\": \"normal|break-word|anywhere\",\n        \"overflow-x\": \"visible|hidden|clip|scroll|auto\",\n        \"overflow-y\": \"visible|hidden|clip|scroll|auto\",\n        \"overlay\": \"none|auto\",\n        \"overscroll-behavior\": \"[contain|none|auto]{1,2}\",\n        \"overscroll-behavior-block\": \"contain|none|auto\",\n        \"overscroll-behavior-inline\": \"contain|none|auto\",\n        \"overscroll-behavior-x\": \"contain|none|auto\",\n        \"overscroll-behavior-y\": \"contain|none|auto\",\n        \"padding\": \"[<length>|<percentage>]{1,4}\",\n        \"padding-block\": \"<'padding-left'>{1,2}\",\n        \"padding-block-end\": \"<'padding-left'>\",\n        \"padding-block-start\": \"<'padding-left'>\",\n        \"padding-bottom\": \"<length>|<percentage>\",\n        \"padding-inline\": \"<'padding-left'>{1,2}\",\n        \"padding-inline-end\": \"<'padding-left'>\",\n        \"padding-inline-start\": \"<'padding-left'>\",\n        \"padding-left\": \"<length>|<percentage>\",\n        \"padding-right\": \"<length>|<percentage>\",\n        \"padding-top\": \"<length>|<percentage>\",\n        \"page\": \"auto|<custom-ident>\",\n        \"page-break-after\": \"auto|always|avoid|left|right|recto|verso\",\n        \"page-break-before\": \"auto|always|avoid|left|right|recto|verso\",\n        \"page-break-inside\": \"auto|avoid\",\n        \"paint-order\": \"normal|[fill||stroke||markers]\",\n        \"perspective\": \"none|<length>\",\n        \"perspective-origin\": \"<position>\",\n        \"place-content\": \"<'align-content'> <'justify-content'>?\",\n        \"place-items\": \"<'align-items'> <'justify-items'>?\",\n        \"place-self\": \"<'align-self'> <'justify-self'>?\",\n        \"pointer-events\": \"auto|none|visiblePainted|visibleFill|visibleStroke|visible|painted|fill|stroke|all|inherit\",\n        \"position\": \"static|relative|absolute|sticky|fixed|-webkit-sticky\",\n        \"position-anchor\": \"auto|<anchor-name>\",\n        \"position-area\": \"none|<position-area>\",\n        \"position-try\": \"<'position-try-order'>? <'position-try-fallbacks'>\",\n        \"position-try-fallbacks\": \"none|[[<dashed-ident>||<try-tactic>]|<'position-area'>]#\",\n        \"position-try-order\": \"normal|<try-size>\",\n        \"position-visibility\": \"always|[anchors-valid||anchors-visible||no-overflow]\",\n        \"print-color-adjust\": \"economy|exact\",\n        \"quotes\": \"none|auto|[<string> <string>]+\",\n        \"r\": \"<length>|<percentage>\",\n        \"resize\": \"none|both|horizontal|vertical|block|inline\",\n        \"right\": \"<length>|<percentage>|auto\",\n        \"rotate\": \"none|<angle>|[x|y|z|<number>{3}]&&<angle>\",\n        \"row-gap\": \"normal|<length-percentage>\",\n        \"ruby-align\": \"start|center|space-between|space-around\",\n        \"ruby-merge\": \"separate|collapse|auto\",\n        \"ruby-position\": \"[alternate||[over|under]]|inter-character\",\n        \"rx\": \"<length>|<percentage>\",\n        \"ry\": \"<length>|<percentage>\",\n        \"scale\": \"none|<number>{1,3}\",\n        \"scrollbar-color\": \"auto|<color>{2}\",\n        \"scrollbar-gutter\": \"auto|stable&&both-edges?\",\n        \"scrollbar-width\": \"auto|thin|none\",\n        \"scroll-behavior\": \"auto|smooth\",\n        \"scroll-margin\": \"<length>{1,4}\",\n        \"scroll-margin-block\": \"<length>{1,2}\",\n        \"scroll-margin-block-start\": \"<length>\",\n        \"scroll-margin-block-end\": \"<length>\",\n        \"scroll-margin-bottom\": \"<length>\",\n        \"scroll-margin-inline\": \"<length>{1,2}\",\n        \"scroll-margin-inline-start\": \"<length>\",\n        \"scroll-margin-inline-end\": \"<length>\",\n        \"scroll-margin-left\": \"<length>\",\n        \"scroll-margin-right\": \"<length>\",\n        \"scroll-margin-top\": \"<length>\",\n        \"scroll-padding\": \"[auto|<length-percentage>]{1,4}\",\n        \"scroll-padding-block\": \"[auto|<length-percentage>]{1,2}\",\n        \"scroll-padding-block-start\": \"auto|<length-percentage>\",\n        \"scroll-padding-block-end\": \"auto|<length-percentage>\",\n        \"scroll-padding-bottom\": \"auto|<length-percentage>\",\n        \"scroll-padding-inline\": \"[auto|<length-percentage>]{1,2}\",\n        \"scroll-padding-inline-start\": \"auto|<length-percentage>\",\n        \"scroll-padding-inline-end\": \"auto|<length-percentage>\",\n        \"scroll-padding-left\": \"auto|<length-percentage>\",\n        \"scroll-padding-right\": \"auto|<length-percentage>\",\n        \"scroll-padding-top\": \"auto|<length-percentage>\",\n        \"scroll-snap-align\": \"[none|start|end|center]{1,2}\",\n        \"scroll-snap-coordinate\": \"none|<position>#\",\n        \"scroll-snap-destination\": \"<position>\",\n        \"scroll-snap-points-x\": \"none|repeat( <length-percentage> )\",\n        \"scroll-snap-points-y\": \"none|repeat( <length-percentage> )\",\n        \"scroll-snap-stop\": \"normal|always\",\n        \"scroll-snap-type\": \"none|[x|y|block|inline|both] [mandatory|proximity]?\",\n        \"scroll-snap-type-x\": \"none|mandatory|proximity\",\n        \"scroll-snap-type-y\": \"none|mandatory|proximity\",\n        \"scroll-timeline\": \"[<'scroll-timeline-name'>||<'scroll-timeline-axis'>]#\",\n        \"scroll-timeline-axis\": \"[block|inline|x|y]#\",\n        \"scroll-timeline-name\": \"[none|<dashed-ident>]#\",\n        \"shape-image-threshold\": \"<alpha-value>\",\n        \"shape-margin\": \"<length-percentage>\",\n        \"shape-outside\": \"none|[<shape-box>||<basic-shape>]|<image>\",\n        \"shape-rendering\": \"auto|optimizeSpeed|crispEdges|geometricPrecision\",\n        \"stroke\": \"<paint>\",\n        \"stroke-dasharray\": \"none|[<svg-length>+]#\",\n        \"stroke-dashoffset\": \"<svg-length>\",\n        \"stroke-linecap\": \"butt|round|square\",\n        \"stroke-linejoin\": \"miter|round|bevel\",\n        \"stroke-miterlimit\": \"<number-one-or-greater>\",\n        \"stroke-opacity\": \"<'opacity'>\",\n        \"stroke-width\": \"<svg-length>\",\n        \"tab-size\": \"<integer>|<length>\",\n        \"table-layout\": \"auto|fixed\",\n        \"text-align\": \"start|end|left|right|center|justify|match-parent\",\n        \"text-align-last\": \"auto|start|end|left|right|center|justify\",\n        \"text-anchor\": \"start|middle|end\",\n        \"text-combine-upright\": \"none|all|[digits <integer>?]\",\n        \"text-decoration\": \"<'text-decoration-line'>||<'text-decoration-style'>||<'text-decoration-color'>||<'text-decoration-thickness'>\",\n        \"text-decoration-color\": \"<color>\",\n        \"text-decoration-line\": \"none|[underline||overline||line-through||blink]|spelling-error|grammar-error\",\n        \"text-decoration-skip\": \"none|[objects||[spaces|[leading-spaces||trailing-spaces]]||edges||box-decoration]\",\n        \"text-decoration-skip-ink\": \"auto|all|none\",\n        \"text-decoration-style\": \"solid|double|dotted|dashed|wavy\",\n        \"text-decoration-thickness\": \"auto|from-font|<length>|<percentage>\",\n        \"text-emphasis\": \"<'text-emphasis-style'>||<'text-emphasis-color'>\",\n        \"text-emphasis-color\": \"<color>\",\n        \"text-emphasis-position\": \"auto|[over|under]&&[right|left]?\",\n        \"text-emphasis-style\": \"none|[[filled|open]||[dot|circle|double-circle|triangle|sesame]]|<string>\",\n        \"text-indent\": \"<length-percentage>&&hanging?&&each-line?\",\n        \"text-justify\": \"auto|inter-character|inter-word|none\",\n        \"text-orientation\": \"mixed|upright|sideways\",\n        \"text-overflow\": \"[clip|ellipsis|<string>]{1,2}\",\n        \"text-rendering\": \"auto|optimizeSpeed|optimizeLegibility|geometricPrecision\",\n        \"text-shadow\": \"none|<shadow-t>#\",\n        \"text-size-adjust\": \"none|auto|<percentage>\",\n        \"text-spacing-trim\": \"space-all|normal|space-first|trim-start|trim-both|trim-all|auto\",\n        \"text-transform\": \"none|capitalize|uppercase|lowercase|full-width|full-size-kana\",\n        \"text-underline-offset\": \"auto|<length>|<percentage>\",\n        \"text-underline-position\": \"auto|from-font|[under||[left|right]]\",\n        \"text-wrap\": \"<'text-wrap-mode'>||<'text-wrap-style'>\",\n        \"text-wrap-mode\": \"auto|wrap|nowrap\",\n        \"text-wrap-style\": \"auto|balance|stable|pretty\",\n        \"timeline-scope\": \"none|<dashed-ident>#\",\n        \"top\": \"<length>|<percentage>|auto\",\n        \"touch-action\": \"auto|none|[[pan-x|pan-left|pan-right]||[pan-y|pan-up|pan-down]||pinch-zoom]|manipulation\",\n        \"transform\": \"none|<transform-list>\",\n        \"transform-box\": \"content-box|border-box|fill-box|stroke-box|view-box\",\n        \"transform-origin\": \"[<length-percentage>|left|center|right|top|bottom]|[[<length-percentage>|left|center|right]&&[<length-percentage>|top|center|bottom]] <length>?\",\n        \"transform-style\": \"flat|preserve-3d\",\n        \"transition\": \"<single-transition>#\",\n        \"transition-behavior\": \"<transition-behavior-value>#\",\n        \"transition-delay\": \"<time>#\",\n        \"transition-duration\": \"<time>#\",\n        \"transition-property\": \"none|<single-transition-property>#\",\n        \"transition-timing-function\": \"<easing-function>#\",\n        \"translate\": \"none|<length-percentage> [<length-percentage> <length>?]?\",\n        \"unicode-bidi\": \"normal|embed|isolate|bidi-override|isolate-override|plaintext|-moz-isolate|-moz-isolate-override|-moz-plaintext|-webkit-isolate|-webkit-isolate-override|-webkit-plaintext\",\n        \"user-select\": \"auto|text|none|contain|all\",\n        \"vector-effect\": \"none|non-scaling-stroke|non-scaling-size|non-rotation|fixed-position\",\n        \"vertical-align\": \"baseline|sub|super|text-top|text-bottom|middle|top|bottom|<percentage>|<length>\",\n        \"view-timeline\": \"[<'view-timeline-name'> <'view-timeline-axis'>?]#\",\n        \"view-timeline-axis\": \"[block|inline|x|y]#\",\n        \"view-timeline-inset\": \"[[auto|<length-percentage>]{1,2}]#\",\n        \"view-timeline-name\": \"none|<dashed-ident>#\",\n        \"view-transition-name\": \"none|<custom-ident>\",\n        \"visibility\": \"visible|hidden|collapse\",\n        \"white-space\": \"normal|pre|nowrap|pre-wrap|pre-line|break-spaces|[<'white-space-collapse'>||<'text-wrap'>||<'white-space-trim'>]\",\n        \"white-space-collapse\": \"collapse|discard|preserve|preserve-breaks|preserve-spaces|break-spaces\",\n        \"widows\": \"<integer>\",\n        \"width\": \"auto|<length>|<percentage>|min-content|max-content|fit-content|fit-content( <length-percentage> )|stretch|<-non-standard-size>\",\n        \"will-change\": \"auto|<animateable-feature>#\",\n        \"word-break\": \"normal|break-all|keep-all|break-word|auto-phrase\",\n        \"word-spacing\": \"normal|<length>\",\n        \"word-wrap\": \"normal|break-word\",\n        \"writing-mode\": \"horizontal-tb|vertical-rl|vertical-lr|sideways-rl|sideways-lr|<svg-writing-mode>\",\n        \"x\": \"<length>|<percentage>\",\n        \"y\": \"<length>|<percentage>\",\n        \"z-index\": \"auto|<integer>\",\n        \"zoom\": \"normal|reset|<number>|<percentage>\",\n        \"-moz-background-clip\": \"padding|border\",\n        \"-moz-border-radius-bottomleft\": \"<'border-bottom-left-radius'>\",\n        \"-moz-border-radius-bottomright\": \"<'border-bottom-right-radius'>\",\n        \"-moz-border-radius-topleft\": \"<'border-top-left-radius'>\",\n        \"-moz-border-radius-topright\": \"<'border-bottom-right-radius'>\",\n        \"-moz-control-character-visibility\": \"visible|hidden\",\n        \"-moz-osx-font-smoothing\": \"auto|grayscale\",\n        \"-moz-user-select\": \"none|text|all|-moz-none\",\n        \"-ms-flex-align\": \"start|end|center|baseline|stretch\",\n        \"-ms-flex-item-align\": \"auto|start|end|center|baseline|stretch\",\n        \"-ms-flex-line-pack\": \"start|end|center|justify|distribute|stretch\",\n        \"-ms-flex-negative\": \"<'flex-shrink'>\",\n        \"-ms-flex-pack\": \"start|end|center|justify|distribute\",\n        \"-ms-flex-order\": \"<integer>\",\n        \"-ms-flex-positive\": \"<'flex-grow'>\",\n        \"-ms-flex-preferred-size\": \"<'flex-basis'>\",\n        \"-ms-interpolation-mode\": \"nearest-neighbor|bicubic\",\n        \"-ms-grid-column-align\": \"start|end|center|stretch\",\n        \"-ms-grid-row-align\": \"start|end|center|stretch\",\n        \"-ms-hyphenate-limit-last\": \"none|always|column|page|spread\",\n        \"-webkit-background-clip\": \"[<box>|border|padding|content|text]#\",\n        \"-webkit-column-break-after\": \"always|auto|avoid\",\n        \"-webkit-column-break-before\": \"always|auto|avoid\",\n        \"-webkit-column-break-inside\": \"always|auto|avoid\",\n        \"-webkit-font-smoothing\": \"auto|none|antialiased|subpixel-antialiased\",\n        \"-webkit-mask-box-image\": \"[<url>|<gradient>|none] [<length-percentage>{4} <-webkit-mask-box-repeat>{2}]?\",\n        \"-webkit-print-color-adjust\": \"economy|exact\",\n        \"-webkit-text-security\": \"none|circle|disc|square\",\n        \"-webkit-user-drag\": \"none|element|auto\",\n        \"-webkit-user-select\": \"auto|none|text|all\",\n        \"alignment-baseline\": \"auto|baseline|before-edge|text-before-edge|middle|central|after-edge|text-after-edge|ideographic|alphabetic|hanging|mathematical\",\n        \"baseline-shift\": \"baseline|sub|super|<svg-length>\",\n        \"behavior\": \"<url>+\",\n        \"cue\": \"<'cue-before'> <'cue-after'>?\",\n        \"cue-after\": \"<url> <decibel>?|none\",\n        \"cue-before\": \"<url> <decibel>?|none\",\n        \"glyph-orientation-horizontal\": \"<angle>\",\n        \"glyph-orientation-vertical\": \"<angle>\",\n        \"kerning\": \"auto|<svg-length>\",\n        \"pause\": \"<'pause-before'> <'pause-after'>?\",\n        \"pause-after\": \"<time>|none|x-weak|weak|medium|strong|x-strong\",\n        \"pause-before\": \"<time>|none|x-weak|weak|medium|strong|x-strong\",\n        \"rest\": \"<'rest-before'> <'rest-after'>?\",\n        \"rest-after\": \"<time>|none|x-weak|weak|medium|strong|x-strong\",\n        \"rest-before\": \"<time>|none|x-weak|weak|medium|strong|x-strong\",\n        \"src\": \"[<url> [format( <string># )]?|local( <family-name> )]#\",\n        \"speak\": \"auto|never|always\",\n        \"speak-as\": \"normal|spell-out||digits||[literal-punctuation|no-punctuation]\",\n        \"unicode-range\": \"<urange>#\",\n        \"voice-balance\": \"<number>|left|center|right|leftwards|rightwards\",\n        \"voice-duration\": \"auto|<time>\",\n        \"voice-family\": \"[[<family-name>|<generic-voice>] ,]* [<family-name>|<generic-voice>]|preserve\",\n        \"voice-pitch\": \"<frequency>&&absolute|[[x-low|low|medium|high|x-high]||[<frequency>|<semitones>|<percentage>]]\",\n        \"voice-range\": \"<frequency>&&absolute|[[x-low|low|medium|high|x-high]||[<frequency>|<semitones>|<percentage>]]\",\n        \"voice-rate\": \"[normal|x-slow|slow|medium|fast|x-fast]||<percentage>\",\n        \"voice-stress\": \"normal|strong|moderate|none|reduced\",\n        \"voice-volume\": \"silent|[[x-soft|soft|medium|loud|x-loud]||<decibel>]\",\n        \"white-space-trim\": \"none|discard-before||discard-after||discard-inner\"\n    },\n    \"atrules\": {\n        \"charset\": {\n            \"prelude\": \"<string>\",\n            \"descriptors\": null\n        },\n        \"counter-style\": {\n            \"prelude\": \"<counter-style-name>\",\n            \"descriptors\": {\n                \"additive-symbols\": \"[<integer>&&<symbol>]#\",\n                \"fallback\": \"<counter-style-name>\",\n                \"negative\": \"<symbol> <symbol>?\",\n                \"pad\": \"<integer>&&<symbol>\",\n                \"prefix\": \"<symbol>\",\n                \"range\": \"[[<integer>|infinite]{2}]#|auto\",\n                \"speak-as\": \"auto|bullets|numbers|words|spell-out|<counter-style-name>\",\n                \"suffix\": \"<symbol>\",\n                \"symbols\": \"<symbol>+\",\n                \"system\": \"cyclic|numeric|alphabetic|symbolic|additive|[fixed <integer>?]|[extends <counter-style-name>]\"\n            }\n        },\n        \"document\": {\n            \"prelude\": \"[<url>|url-prefix( <string> )|domain( <string> )|media-document( <string> )|regexp( <string> )]#\",\n            \"descriptors\": null\n        },\n        \"font-palette-values\": {\n            \"prelude\": \"<dashed-ident>\",\n            \"descriptors\": {\n                \"base-palette\": \"light|dark|<integer [0,∞]>\",\n                \"font-family\": \"<family-name>#\",\n                \"override-colors\": \"[<integer [0,∞]> <absolute-color-base>]#\"\n            }\n        },\n        \"font-face\": {\n            \"prelude\": null,\n            \"descriptors\": {\n                \"ascent-override\": \"normal|<percentage>\",\n                \"descent-override\": \"normal|<percentage>\",\n                \"font-display\": \"[auto|block|swap|fallback|optional]\",\n                \"font-family\": \"<family-name>\",\n                \"font-feature-settings\": \"normal|<feature-tag-value>#\",\n                \"font-variation-settings\": \"normal|[<string> <number>]#\",\n                \"font-stretch\": \"<font-stretch-absolute>{1,2}\",\n                \"font-style\": \"normal|italic|oblique <angle>{0,2}\",\n                \"font-weight\": \"<font-weight-absolute>{1,2}\",\n                \"line-gap-override\": \"normal|<percentage>\",\n                \"size-adjust\": \"<percentage>\",\n                \"src\": \"[<url> [format( <string># )]?|local( <family-name> )]#\",\n                \"unicode-range\": \"<urange>#\"\n            }\n        },\n        \"font-feature-values\": {\n            \"prelude\": \"<family-name>#\",\n            \"descriptors\": null\n        },\n        \"import\": {\n            \"prelude\": \"[<string>|<url>] [layer|layer( <layer-name> )]? [supports( [<supports-condition>|<declaration>] )]? <media-query-list>?\",\n            \"descriptors\": null\n        },\n        \"keyframes\": {\n            \"prelude\": \"<keyframes-name>\",\n            \"descriptors\": null\n        },\n        \"layer\": {\n            \"prelude\": \"[<layer-name>#|<layer-name>?]\",\n            \"descriptors\": null\n        },\n        \"media\": {\n            \"prelude\": \"<media-query-list>\",\n            \"descriptors\": null\n        },\n        \"namespace\": {\n            \"prelude\": \"<namespace-prefix>? [<string>|<url>]\",\n            \"descriptors\": null\n        },\n        \"page\": {\n            \"prelude\": \"<page-selector-list>\",\n            \"descriptors\": {\n                \"bleed\": \"auto|<length>\",\n                \"marks\": \"none|[crop||cross]\",\n                \"page-orientation\": \"upright|rotate-left|rotate-right\",\n                \"size\": \"<length>{1,2}|auto|[<page-size>||[portrait|landscape]]\"\n            }\n        },\n        \"position-try\": {\n            \"prelude\": \"<dashed-ident>\",\n            \"descriptors\": {\n                \"top\": \"<'top'>\",\n                \"left\": \"<'left'>\",\n                \"bottom\": \"<'bottom'>\",\n                \"right\": \"<'right'>\",\n                \"inset-block-start\": \"<'inset-block-start'>\",\n                \"inset-block-end\": \"<'inset-block-end'>\",\n                \"inset-inline-start\": \"<'inset-inline-start'>\",\n                \"inset-inline-end\": \"<'inset-inline-end'>\",\n                \"inset-block\": \"<'inset-block'>\",\n                \"inset-inline\": \"<'inset-inline'>\",\n                \"inset\": \"<'inset'>\",\n                \"margin-top\": \"<'margin-top'>\",\n                \"margin-left\": \"<'margin-left'>\",\n                \"margin-bottom\": \"<'margin-bottom'>\",\n                \"margin-right\": \"<'margin-right'>\",\n                \"margin-block-start\": \"<'margin-block-start'>\",\n                \"margin-block-end\": \"<'margin-block-end'>\",\n                \"margin-inline-start\": \"<'margin-inline-start'>\",\n                \"margin-inline-end\": \"<'margin-inline-end'>\",\n                \"margin\": \"<'margin'>\",\n                \"margin-block\": \"<'margin-block'>\",\n                \"margin-inline\": \"<'margin-inline'>\",\n                \"width\": \"<'width'>\",\n                \"height\": \"<'height'>\",\n                \"min-width\": \"<'min-width'>\",\n                \"min-height\": \"<'min-height'>\",\n                \"max-width\": \"<'max-width'>\",\n                \"max-height\": \"<'max-height'>\",\n                \"block-size\": \"<'block-size'>\",\n                \"inline-size\": \"<'inline-size'>\",\n                \"min-block-size\": \"<'min-block-size'>\",\n                \"min-inline-size\": \"<'min-inline-size'>\",\n                \"max-block-size\": \"<'max-block-size'>\",\n                \"max-inline-size\": \"<'max-inline-size'>\",\n                \"align-self\": \"<'align-self'>|anchor-center\",\n                \"justify-self\": \"<'justify-self'>|anchor-center\"\n            }\n        },\n        \"property\": {\n            \"prelude\": \"<custom-property-name>\",\n            \"descriptors\": {\n                \"syntax\": \"<string>\",\n                \"inherits\": \"true|false\",\n                \"initial-value\": \"<declaration-value>?\"\n            }\n        },\n        \"scope\": {\n            \"prelude\": \"[( <scope-start> )]? [to ( <scope-end> )]?\",\n            \"descriptors\": null\n        },\n        \"starting-style\": {\n            \"prelude\": null,\n            \"descriptors\": null\n        },\n        \"supports\": {\n            \"prelude\": \"<supports-condition>\",\n            \"descriptors\": null\n        },\n        \"container\": {\n            \"prelude\": \"[<container-name>]? <container-condition>\",\n            \"descriptors\": null\n        },\n        \"nest\": {\n            \"prelude\": \"<complex-selector-list>\",\n            \"descriptors\": null\n        }\n    }\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 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(this.tokenStart, this.tokenEnd),\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 {\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 { 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    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 {\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","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","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","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","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 } 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';\n\nexport function isPseudoElementSelector(\n  selector: csstree.CssNodeCommon\n): selector is csstree.PseudoElementSelector {\n  return selector.type === 'PseudoElementSelector';\n}\nexport function isRawNode(node: csstree.CssNodeCommon): node is csstree.Raw {\n  return node.type === 'Raw';\n}\nexport function isDeclaration(\n  node: csstree.CssNodeCommon\n): node is csstree.Declaration {\n  return node.type === 'Declaration';\n}\nexport function isIdentifier(\n  node: csstree.CssNodeCommon\n): node is csstree.Identifier {\n  return node.type === 'Identifier';\n}\nexport function isValue(node: csstree.CssNodeCommon): node is csstree.Value {\n  return node.type === 'Value';\n}\nexport function isSelector(\n  node: csstree.CssNodeCommon\n): node is csstree.Selector {\n  return node.type === 'Selector';\n}\nexport function isRule(node: csstree.CssNodeCommon): node is csstree.Rule {\n  return node.type === 'Rule';\n}\n","import * as csstree from 'css-tree';\nimport { isPseudoElementSelector, isRawNode } from './style-types';\n\nexport const VIEW_TRANSITION_ELEMENTS = [\n  'view-transition',\n  'view-transition-group',\n  'view-transition-image-pair',\n  'view-transition-old',\n  'view-transition-new',\n];\n\n// CSS at-rules with blocks that could be relevant for view transitions\nexport const ATRULES = ['media', 'layer', 'container', 'scope', 'supports'];\n\nexport function getElementSelector(\n  pseudoElementSelector: csstree.PseudoElementSelector\n): csstree.Selector {\n  // Transform a custom element selector string into an item to use in csstree\n  //  to replace the corresponding pseudo-element\n\n  // Separate (for example with group) the ::view-transition-group from the (view-transition-name)\n  let pseudoElement = '';\n  let parentheses = '';\n  csstree.walk(pseudoElementSelector, {\n    enter(node: csstree.CssNodeCommon) {\n      if (isPseudoElementSelector(node)) {\n        pseudoElement = node.name;\n      } else if (\n        isRawNode(node) &&\n        (<csstree.WalkContext>this).root === pseudoElementSelector\n      ) {\n        parentheses = node.value;\n      }\n    },\n  });\n\n  const selectorString =\n    parentheses !== '' && parentheses !== '*'\n      ? `${pseudoElement}[name=\"${parentheses}\"]`\n      : pseudoElement;\n  const selectorAST = csstree.parse(selectorString, {\n    context: 'selector',\n  }) as csstree.Selector;\n\n  return selectorAST;\n}\n\nexport function getNameDeclaration(\n  declaration: csstree.Declaration\n): csstree.ListItem<csstree.Declaration> {\n  // Transform a view-transition-name declaration into --vt-polyfill-name.\n  // This will be a ListItem such that it can be used for replacement in an AST.\n  declaration.property = '--vt-polyfill-name';\n\n  const declarationItem = generateListItem(declaration);\n  return declarationItem;\n}\n\nexport function generateListItem<T>(node: T): csstree.ListItem<T> {\n  const list = new csstree.List();\n  const nodeItem = list.createItem(node) as csstree.ListItem<T>;\n  return nodeItem;\n}\n\nexport function replaceDeclarations(ast: csstree.CssNode) {\n  // Find view-transition-name declarations\n  //  to replace them with --vt-polyfill-name,\n  //  as that will be parsed by the polyfill is getComputedStyle()\n  csstree.walk(ast, {\n    visit: 'Declaration',\n    enter(node, item, list) {\n      if (node.property === 'view-transition-name') {\n        const newDeclaration = getNameDeclaration(node);\n        list.replace(item, newDeclaration);\n      }\n    },\n  });\n}\n","import * as csstree from 'css-tree';\nimport {\n  isDeclaration,\n  isPseudoElementSelector,\n  isRule,\n  isSelector,\n} from './style-types';\nimport {\n  VIEW_TRANSITION_ELEMENTS,\n  ATRULES,\n  getElementSelector,\n  replaceDeclarations,\n  generateListItem,\n} from './parsing-utils';\n\nfunction removeNonPolyfillCSS(ast: csstree.CssNode) {\n  // Remove most CSS from a stylesheet that is not relevant for view transitions.\n  // This means we only care about:\n  //  - any rule with a view transition pseudo element selector, like ::view-transition ()\n  //  - any rule whose block contains the view-transition-name property\n\n  // Recursive functions used to clear irrelevant CSS\n  const nestedRulesHaveName = (node: csstree.Rule): boolean => {\n    return node.block.children.some((node) => {\n      if (isRule(node)) return nestedRulesHaveName(node);\n      return isDeclaration(node) && node.property === 'view-transition-name';\n    });\n  };\n  const clearIrrelevantProperties = (node: csstree.Rule) => {\n    node.block.children.forEach((node, item, list) => {\n      if (isDeclaration(node) && node.property === 'view-transition-name')\n        return;\n      if (isRule(node)) {\n        clearIrrelevantProperties(node);\n        return;\n      }\n      list.remove(item);\n    });\n  };\n\n  csstree.walk(ast, {\n    visit: 'Rule',\n    enter(node, item, list) {\n      if (this.atrule && !ATRULES.includes(this.atrule.name)) {\n        // Skip at-rules that contain blocks we don't want to touch, like @keyframes.\n        return;\n      }\n      const hasTransitionName = node.block.children.some((node) => {\n        return isDeclaration(node) && node.property === 'view-transition-name';\n      });\n      const isPseudoElRule = (\n        node.prelude as csstree.SelectorList\n      ).children.some((selector) => {\n        if (!isSelector(selector)) return false;\n        return selector.children.some((selectorPart) => {\n          return (\n            isPseudoElementSelector(selectorPart) &&\n            VIEW_TRANSITION_ELEMENTS.includes(selectorPart.name)\n          );\n        });\n      });\n      if (!hasTransitionName && !isPseudoElRule) {\n        // Check that there aren't any nested rules with view-transition-name\n        const hasNestedName = nestedRulesHaveName(node);\n        if (hasNestedName) {\n          // Only delete declarations, not nested rules\n          node.block.children.forEach((node, item, list) => {\n            if (isDeclaration(node)) list.remove(item);\n          });\n          return;\n        }\n        list.remove(item);\n        return;\n      }\n      if (hasTransitionName) {\n        clearIrrelevantProperties(node);\n      }\n    },\n  });\n}\n\nfunction replaceSelectors(ast: csstree.CssNode) {\n  // Find view transition pseudo element selectors\n  // ::view-transition, ::view-transition-group(),\n  // ::view-transition-image-pair(), ::view-transition-old(),\n  // ::view-transition-new()\n\n  // Two conditions, one in visit option for possible performance gains\n  csstree.walk(ast, {\n    visit: 'PseudoElementSelector',\n    enter(node, item, list) {\n      if (VIEW_TRANSITION_ELEMENTS.includes(node.name)) {\n        const selector = node;\n\n        if (selector.name === 'view-transition') {\n          if (selector.children) {\n            // Parse error: ::view-transition should not have parentheses\n            console.warn(\n              `View Transition API polyfill, CSS parse error: ::view-transition should not have parentheses. ${node.loc ? `Source: ${node.loc.source}; Line: ${node.loc.start.line}; Column: ${node.loc.start.column}` : ''}`\n            );\n          }\n        }\n        // Replace pseudo-element selector in AST with custom element selector\n        const newSelector = getElementSelector(node);\n        list.replace(item, generateListItem(newSelector));\n      }\n    },\n  });\n  return ast;\n}\n\nexport default function parseStyleString(styleString: string): string {\n  // Given a CSS stylesheet, output a new stylesheet\n  //  (as a string, to be put inside a <style> element)\n  //  which has had its pseudo elements and transition properties\n  //  replaced with ones understood by the polyfill.\n\n  const parserOptions: csstree.ParseOptions = {\n    // The only detailed things needed are rule preludes (may contain ::view-transition pseudo elements)\n    // The values for view-transition-name can just be raw, they do not need to be dissected.\n    parseAtrulePrelude: false,\n    parseValue: false,\n    parseCustomProperty: false,\n    positions: true,\n  };\n  const parsed = csstree.parse(styleString, parserOptions);\n  removeNonPolyfillCSS(parsed);\n  replaceSelectors(parsed);\n  replaceDeclarations(parsed);\n  const newStyleString = csstree.generate(parsed);\n  return newStyleString;\n}\n","import parseStyleString from './style-parser';\n\nexport async function parseStyles() {\n  // Get all stylesheets and build an array (stylesheetContents) of their unparsed contents\n  // We cannot rely on the built-in cssText property, as it won't return unsupported properties\n  const stylesheets = [...document.styleSheets];\n\n  const styleElementsContents: Map<CSSStyleSheet, string> = new Map();\n  for (const stylesheet of stylesheets) {\n    if (stylesheet.ownerNode instanceof HTMLStyleElement) {\n      if (stylesheet.ownerNode.hasAttribute('data-vt-polyfill-style')) continue;\n      const styleString = stylesheet.ownerNode.textContent;\n      if (!styleString) continue;\n      styleElementsContents.set(stylesheet, styleString);\n    }\n  }\n\n  // Get <link rel=\"stylesheet\"> contents\n  const linkedStylesheets = stylesheets.filter(\n    (stylesheet) => stylesheet.ownerNode instanceof HTMLLinkElement\n  );\n  const linkedStylesheetsContents: Map<CSSStyleSheet, string> = new Map();\n  await Promise.all(\n    linkedStylesheets.map(async (stylesheet) => {\n      const href = stylesheet.href;\n      if (!href) return;\n      const fetchResponse = await fetch(href, {\n        headers: { Accept: 'text/css' },\n      });\n      const responseText = await fetchResponse.text();\n      linkedStylesheetsContents.set(stylesheet, responseText);\n    })\n  );\n\n  // Merge arrays following the order of document.styleSheets\n  const stylesheetContents = stylesheets.map((stylesheet) => {\n    return (\n      styleElementsContents.get(stylesheet) ||\n      linkedStylesheetsContents.get(stylesheet)\n    );\n  });\n\n  // Parse each stylesheet\n  const parsedStyleStrings: string[] = [];\n  await Promise.all(\n    stylesheetContents.map((stylesheetString) => {\n      if (!stylesheetString) return;\n      const parsedString = parseStyleString(stylesheetString);\n      parsedStyleStrings.push(parsedString);\n    })\n  );\n  return parsedStyleStrings.join('\\n');\n}\n","import CaptureElement from '../capture-element';\nexport class ViewTransitionImagePair extends HTMLElement {\n  constructor() {\n    super();\n  }\n  name = '';\n  captureElement = new CaptureElement();\n  oldImage: ViewTransitionOld | undefined;\n  newImage: ViewTransitionNew | undefined;\n  setupForOldImage(name: string, captureElement: CaptureElement) {\n    this.name = name;\n    this.setAttribute('name', name);\n    this.captureElement = captureElement;\n\n    if (this.captureElement.oldElement) {\n      this.oldImage = new ViewTransitionOld();\n      this.oldImage.setup(this.name, this.captureElement);\n      this.appendChild(this.oldImage);\n    }\n\n    return this.oldImage;\n  }\n  setupForNewImage(name: string, captureElement: CaptureElement) {\n    this.name = name;\n    this.setAttribute('name', name);\n    this.captureElement = captureElement;\n\n    if (this.captureElement.newElement) {\n      this.newImage = new ViewTransitionNew();\n      this.newImage.setup(this.name, this.captureElement);\n      this.appendChild(this.newImage);\n    }\n\n    return this.newImage;\n  }\n  addNewImage() {\n    if (this.captureElement.newElement) {\n      this.newImage = new ViewTransitionNew();\n      this.newImage.setup(this.name, this.captureElement);\n      this.appendChild(this.newImage);\n    }\n\n    return this.newImage;\n  }\n}\nclass PolyfillInnerElement {\n  static stylesheet = `\n      .polyfill-inner-element {\n        display: block;\n        position: relative;\n        inline-size: fit-content;\n      }\n      `;\n  styleEl: HTMLStyleElement;\n  element: HTMLDivElement;\n  constructor() {\n    this.element = document.createElement('div');\n    this.element.classList.add('polyfill-inner-element');\n    this.styleEl = document.createElement('style');\n    this.styleEl.textContent = PolyfillInnerElement.stylesheet;\n    this.element.appendChild(this.styleEl);\n  }\n}\ntype CSSTranslateFunction = string;\ntype CSSScaleFunction = string;\nclass ViewTransitionImage extends HTMLElement {\n  constructor() {\n    super();\n    const polyfillInnerElement = new PolyfillInnerElement();\n    this.innerElement = polyfillInnerElement.element;\n  }\n  protected innerElement: HTMLDivElement;\n  name = '';\n  captureElement = new CaptureElement();\n  protected image: Element | undefined;\n  protected element: Element | undefined;\n  setup(name: string, captureElement: CaptureElement) {\n    this.name = name;\n    if (!this.image)\n      throw new Error(\n        `View Transitions API polyfill: could not find old captured clone for name ${name}`\n      );\n    if (!this.element)\n      throw new Error(\n        `View Transitions API polyfill: could not find old captured element for name ${name}`\n      );\n    this.setAttribute('name', name);\n    this.captureElement = captureElement;\n\n    const shadow = this.attachShadow({ mode: 'closed' });\n\n    // To simulate the sizing of the replaced content that should be put inside ::view-transition-old and ::view-transition-new\n    // An extra element to put inside the old and new images is required, because the polyfill uses actual elements instead of images\n    // The size of this element will be animated as a transform: scale() to fit the requirements of the applied object-fit CSS properties\n    // We can be sure that oldImage is not undefined as ViewTransitionImagePair checks for it\n    this.innerElement.appendChild(this.image);\n    shadow.appendChild(this.innerElement);\n  }\n  connectedCallback() {\n    // Restore the scroll position of each cloned element\n    // We need to wait for connectedCallback, as the element needs to be in the document\n    this.innerElement\n      .querySelectorAll('[data-vt-scroll-top]')\n      .forEach((element) => {\n        // Make element scrollable by constraining its size\n        if (element instanceof HTMLElement) {\n          element.style.overflow = 'hidden';\n          element.style.maxHeight = '100vh';\n          element.style.maxWidth = '100vw';\n          const scrollTop =\n            parseInt(element.getAttribute('data-vt-scroll-top') || '0') ?? 0;\n          element.scrollTop = scrollTop;\n        }\n      });\n\n    this.innerElement\n      .querySelectorAll('[data-vt-scroll-left]')\n      .forEach((element) => {\n        if (element instanceof HTMLElement) {\n          element.style.overflow = 'hidden';\n          element.style.maxHeight = '100vh';\n          element.style.maxWidth = '100vw';\n          const scrollTop =\n            parseInt(element.getAttribute('data-vt-scroll-top') || '0') ?? 0;\n          element.scrollTop = scrollTop;\n        }\n      });\n\n    // Check for margin on root cloned element.\n    // If there was margin collapsing before but not anymore,\n    //  it should be removed becuase it won't be collapsed\n    //  with the position: fixed transition elements.\n    const childMarginCollapsingEl = this.innerElement.querySelector(\n      ':scope > :not(style) > :not(style)'\n    );\n    if (\n      this.offsetHeight !== this.innerElement.offsetHeight &&\n      childMarginCollapsingEl instanceof HTMLElement &&\n      !(this.element instanceof HTMLHtmlElement)\n    ) {\n      childMarginCollapsingEl.style.marginBlockStart = '0';\n    }\n  }\n  getScaleFactor(\n    objectFit: string,\n    fromWidth: number,\n    toWidth: number,\n    fromHeight: number,\n    toHeight: number\n  ): [number, number, string] {\n    let scaleFunction: CSSScaleFunction = '';\n    let scaleFactorX = 1;\n    let scaleFactorY = 1;\n\n    if (this.element instanceof HTMLHtmlElement) {\n      // Do not do any scale on the clone of <html>\n      // https://drafts.csswg.org/css-view-transitions/#capture-the-image\n      scaleFactorX = 1;\n      scaleFactorY = 1;\n      scaleFunction = '';\n\n      return [scaleFactorX, scaleFactorY, scaleFunction];\n    }\n\n    const fromAspectRatio = fromWidth / fromHeight;\n    const toAspectRatio = toWidth / toHeight;\n\n    switch (objectFit) {\n      case 'fill':\n        // The scale factors for X and Y are only different when stretching\n        scaleFactorX = toWidth / fromWidth;\n        scaleFactorY = toHeight / fromHeight;\n        break;\n      case 'contain':\n        if (fromAspectRatio > toAspectRatio) {\n          scaleFactorX = toWidth / fromWidth;\n        } else {\n          scaleFactorX = toHeight / fromHeight;\n        }\n        scaleFactorY = scaleFactorX;\n        break;\n      case 'cover':\n        if (fromAspectRatio > toAspectRatio) {\n          scaleFactorX = toHeight / fromHeight;\n        } else {\n          scaleFactorX = toWidth / fromWidth;\n        }\n        scaleFactorY = scaleFactorX;\n        break;\n      case 'scale-down':\n        scaleFactorX = 1;\n        scaleFactorY = scaleFactorX;\n        break;\n    }\n\n    // Fix possible divisions by zero\n    scaleFactorX = Number.isNaN(scaleFactorX) ? 1 : scaleFactorX;\n    scaleFactorY = Number.isNaN(scaleFactorY) ? 1 : scaleFactorY;\n\n    scaleFactorX = parseFloat(scaleFactorX.toFixed(2));\n    scaleFactorY = parseFloat(scaleFactorY.toFixed(2));\n    scaleFunction = `scale(${scaleFactorX}, ${scaleFactorY})`;\n\n    return [scaleFactorX, scaleFactorY, scaleFunction];\n  }\n  getObjectPositionValues(\n    objectPosition: string,\n    oldWidth: number,\n    newWidth: number,\n    oldHeight: number,\n    newHeight: number\n  ) {\n    // Do not do any translation on the clone of <html>\n    // https://drafts.csswg.org/css-view-transitions/#capture-the-image\n    if (this.element instanceof HTMLHtmlElement)\n      return {\n        old: { top: '0px', left: '0px' },\n        new: { top: '0px', left: '0px' },\n      };\n\n    const [objectPositionX, objectPositionY] = objectPosition.split(' ');\n\n    const oldContainerWidth = this.captureElement.old.width;\n    const oldContainerHeight = this.captureElement.old.height;\n    const newContainerWidth = this.captureElement.new.width;\n    const newContainerHeight = this.captureElement.new.height;\n\n    let oldLeft: string;\n    let newLeft: string;\n    if (objectPositionX.includes('%')) {\n      // Calculating the position of the top left corner of the image given the percentage object-position\n      // https://developer.mozilla.org/en-US/docs/Web/CSS/background-position#regarding_percentages\n      const positionOffset = parseFloat(objectPositionX) / 100;\n      oldLeft = ((oldContainerWidth - oldWidth) * positionOffset)\n        .toString()\n        .concat('px');\n      newLeft = ((newContainerWidth - newWidth) * positionOffset)\n        .toString()\n        .concat('px');\n    } else {\n      oldLeft = objectPositionX;\n      newLeft = objectPositionX;\n    }\n\n    let oldTop: string;\n    let newTop: string;\n    if (objectPositionY.includes('%')) {\n      const positionOffset = parseFloat(objectPositionY) / 100;\n      oldTop = ((oldContainerHeight - oldHeight) * positionOffset)\n        .toString()\n        .concat('px');\n      newTop = ((newContainerHeight - newHeight) * positionOffset)\n        .toString()\n        .concat('px');\n    } else {\n      oldTop = objectPositionY;\n      newTop = objectPositionY;\n    }\n\n    return {\n      old: { top: oldTop, left: oldLeft },\n      new: { top: newTop, left: newLeft },\n    };\n  }\n  animateImage(\n    animationDuration: number,\n    CSSeasing: string,\n    fromTransform: string,\n    toTransform: string\n  ) {\n    this.innerElement.animate(\n      [\n        {\n          transform: fromTransform,\n          transformOrigin: 'top left',\n        },\n        {\n          transform: toTransform,\n          transformOrigin: 'top left',\n        },\n      ],\n      {\n        duration: animationDuration,\n        iterations: 1,\n        fill: 'forwards',\n        easing: CSSeasing,\n      }\n    );\n  }\n}\nexport class ViewTransitionOld extends ViewTransitionImage {\n  setup(name: string, captureElement: CaptureElement) {\n    this.image = captureElement.old.image;\n    this.element = captureElement.oldElement;\n    return super.setup(name, captureElement);\n  }\n  getAnimateImageFunctions() {\n    // Simulate the replaced content sizing of ::view-transition-old and ::view-transition-new\n    // Since view-transition-old and view-transition-new are not images in the polyfill,\n    // their size will fit the change in size of the animation by animating transform: scale() on them\n\n    // The value for transform will be determined using the value of object-fit\n    const style = getComputedStyle(this);\n    const objectFit = style.objectFit;\n\n    const [scaleFactorX, scaleFactorY, scaleFunction] =\n      this.getScaleFactor(objectFit);\n\n    const objectPosition = style.objectPosition;\n    const objectPositionValues = this.getObjectPositionValues(\n      objectPosition,\n      scaleFactorX,\n      scaleFactorY\n    );\n    const oldObjectPositionTranslate: CSSTranslateFunction = `translate(${objectPositionValues.old.left}, ${objectPositionValues.old.top})`;\n    const newObjectPositionTranslate: CSSTranslateFunction = `translate(${objectPositionValues.new.left}, ${objectPositionValues.new.top})`;\n\n    return [\n      oldObjectPositionTranslate,\n      newObjectPositionTranslate,\n      scaleFunction,\n    ];\n  }\n  getScaleFactor(objectFit: string): [number, number, string] {\n    const fromWidth = this.captureElement.old.width;\n    const fromHeight = this.captureElement.old.height;\n    const toWidth = this.captureElement.new.width;\n    const toHeight = this.captureElement.new.height;\n    return super.getScaleFactor(\n      objectFit,\n      fromWidth,\n      toWidth,\n      fromHeight,\n      toHeight\n    );\n  }\n  getObjectPositionValues(\n    objectPosition: string,\n    scaleFactorX: number,\n    scaleFactorY: number\n  ): {\n    old: { top: string; left: string };\n    new: { top: string; left: string };\n  } {\n    const oldWidth = this.innerElement.offsetWidth;\n    const oldHeight = this.innerElement.offsetHeight;\n    const newWidth = Math.floor(oldWidth * scaleFactorX);\n    const newHeight = Math.floor(oldHeight * scaleFactorY);\n    return super.getObjectPositionValues(\n      objectPosition,\n      oldWidth,\n      newWidth,\n      oldHeight,\n      newHeight\n    );\n  }\n  animateImage(animationDuration: number, CSSeasing: string) {\n    const [\n      oldObjectPositionTranslate,\n      newObjectPositionTranslate,\n      scaleFunction,\n    ] = this.getAnimateImageFunctions();\n    return super.animateImage(\n      animationDuration,\n      CSSeasing,\n      oldObjectPositionTranslate,\n      `${newObjectPositionTranslate} ${scaleFunction}`\n    );\n  }\n}\nexport class ViewTransitionNew extends ViewTransitionImage {\n  setup(name: string, captureElement: CaptureElement) {\n    this.image = captureElement.new.image;\n    this.element = captureElement.newElement;\n    super.setup(name, captureElement);\n  }\n  getAnimateImageFunctions() {\n    // Simulate the replaced content sizing of ::view-transition-old and ::view-transition-new\n    // Since view-transition-old and view-transition-new are not images in the polyfill,\n    // their size will fit the change in size of the animation by animating transform: scale() on them\n\n    // The value for transform will be determined using the value of object-fit\n    const style = getComputedStyle(this);\n    const objectFit = style.objectFit;\n\n    const [scaleFactorX, scaleFactorY, scaleFunction] =\n      this.getScaleFactor(objectFit);\n\n    const objectPosition = style.objectPosition;\n    const objectPositionValues = this.getObjectPositionValues(\n      objectPosition,\n      scaleFactorX,\n      scaleFactorY\n    );\n    const oldObjectPositionTranslate: CSSTranslateFunction = `translate(${objectPositionValues.old.left}, ${objectPositionValues.old.top})`;\n    const newObjectPositionTranslate: CSSTranslateFunction = `translate(${objectPositionValues.new.left}, ${objectPositionValues.new.top})`;\n\n    return [\n      oldObjectPositionTranslate,\n      newObjectPositionTranslate,\n      scaleFunction,\n    ];\n  }\n  getScaleFactor(objectFit: string): [number, number, string] {\n    const fromWidth = this.captureElement.new.width;\n    const fromHeight = this.captureElement.new.height;\n    const toWidth = this.captureElement.old.width;\n    const toHeight = this.captureElement.old.height;\n    return super.getScaleFactor(\n      objectFit,\n      fromWidth,\n      toWidth,\n      fromHeight,\n      toHeight\n    );\n  }\n  getObjectPositionValues(\n    objectPosition: string,\n    scaleFactorX: number,\n    scaleFactorY: number\n  ): {\n    old: { top: string; left: string };\n    new: { top: string; left: string };\n  } {\n    const newWidth = this.innerElement.offsetWidth;\n    const newHeight = this.innerElement.offsetHeight;\n    const oldWidth = Math.floor(newWidth * scaleFactorX);\n    const oldHeight = Math.floor(newHeight * scaleFactorY);\n    return super.getObjectPositionValues(\n      objectPosition,\n      oldWidth,\n      newWidth,\n      oldHeight,\n      newHeight\n    );\n  }\n  animateImage(animationDuration: number, CSSeasing: string) {\n    const [\n      oldObjectPositionTranslate,\n      newObjectPositionTranslate,\n      scaleFunction,\n    ] = this.getAnimateImageFunctions();\n    return super.animateImage(\n      animationDuration,\n      CSSeasing,\n      `${oldObjectPositionTranslate} ${scaleFunction}`,\n      newObjectPositionTranslate\n    );\n  }\n}\n\ncustomElements.define('view-transition-image-pair', ViewTransitionImagePair);\ncustomElements.define('view-transition-old', ViewTransitionOld);\ncustomElements.define('view-transition-new', ViewTransitionNew);\n","import {\n  ViewTransitionImagePair,\n  ViewTransitionOld,\n  ViewTransitionNew,\n} from './view-transition-image-elements';\nimport CaptureElement from '../capture-element';\n\ntype GroupStyleRuleValues = {\n  width: string;\n  height: string;\n  transform: string;\n  writingMode: string;\n  direction: string;\n  textOrientation: string;\n  mixBlendMode: string;\n  backdropFilter: string;\n  colorScheme: string;\n};\n\nexport default class ViewTransitionGroup extends HTMLElement {\n  constructor() {\n    super();\n  }\n  transitionName = '';\n  captureElement = new CaptureElement();\n  imagePair = new ViewTransitionImagePair();\n  oldImage: ViewTransitionOld | undefined;\n  newImage: ViewTransitionNew | undefined;\n  groupStyle = document.createElement('style');\n  setupForOldImage(name: string, captureElement: CaptureElement) {\n    this.transitionName = name;\n    this.setAttribute('name', name);\n    this.captureElement = captureElement;\n\n    this.imagePair = new ViewTransitionImagePair();\n    this.oldImage = this.imagePair.setupForOldImage(name, captureElement);\n    if (this.oldImage) this.forceDisplay(this.oldImage, true);\n\n    // Set initial positioning values for the group\n    // This prevents a flash of unpositioned groups before the update callback\n    const initialValues: GroupStyleRuleValues = this.getStyleValues('old');\n    this.mapStyleValuesForAttribute(initialValues);\n    this.appendChild(this.imagePair);\n    this.appendChild(this.groupStyle);\n  }\n  forceDisplay(image: ViewTransitionOld | ViewTransitionNew, toggle: boolean) {\n    // Force an element's CSS display value to block (therefore not none)\n    // This is useful for the old image: because ViewTransitionManager\n    //  yields to the browser's event loop before showing the new images\n    //  of captured elements, we need to avoid a flash of missing elements.\n    // This could happen if the website's authour has set display: none\n    //  on a class of ::view-transition-old expecting the new image to already\n    //  be there, even though the polyfill cannot place it in the DOM yet.\n    image.style.display = toggle ? 'block' : '';\n  }\n  setupForNewImage(name: string, captureElement: CaptureElement) {\n    this.transitionName = name;\n    this.setAttribute('name', name);\n    this.captureElement = captureElement;\n\n    this.imagePair = new ViewTransitionImagePair();\n    this.newImage = this.imagePair.setupForNewImage(name, captureElement);\n\n    // Set initial positioning values for the group\n    // This prevents a flash of unpositioned groups before the update callback\n    const initialValues: GroupStyleRuleValues = this.getStyleValues('new');\n    this.mapStyleValuesForAttribute(initialValues);\n    this.appendChild(this.imagePair);\n    this.appendChild(this.groupStyle);\n  }\n  addNewImage() {\n    this.newImage = this.imagePair.addNewImage();\n  }\n  setup() {\n    // Move the values previously initialized in the style attribute to a <style> element\n    // This enables changing the specificity to match that expected from a user agent style\n    if (!this.newImage) {\n      const values: GroupStyleRuleValues = this.getStyleValues('old');\n      this.captureElement.groupStylesRule = `\n      :where(view-transition-group[name=\"${this.transitionName}\"]) {\n        width: ${values.width};\n        height: ${values.height};\n        transform: ${values.transform};\n        writing-mode: ${values.writingMode};\n        direction: ${values.direction};\n        text-orientation: ${values.textOrientation};\n        mix-blend-mode: ${values.mixBlendMode};\n        backdrop-filter: ${values.backdropFilter};\n        color-scheme: ${values.colorScheme};\n      }\n      `;\n      this.appendToStyle(this.captureElement.groupStylesRule);\n      this.setAttribute('style', '');\n      this.appendToStyle(\n        `:where(view-transition-old[name=\"${this.transitionName}\"]) {\n          animation-name: -ua-view-transition-fade-out;\n        }`\n      );\n      return;\n    }\n\n    const values: GroupStyleRuleValues = this.getStyleValues('new');\n    this.captureElement.groupStylesRule = `\n      :where(view-transition-group[name=\"${this.transitionName}\"]) {\n        width: ${values.width};\n        height: ${values.height};\n        transform: ${values.transform};\n        writing-mode: ${values.writingMode};\n        direction: ${values.direction};\n        text-orientation: ${values.textOrientation};\n        mix-blend-mode: ${values.mixBlendMode};\n        backdrop-filter: ${values.backdropFilter};\n        color-scheme: ${values.colorScheme};\n      }\n      `;\n    this.appendToStyle(this.captureElement.groupStylesRule);\n    this.setAttribute('style', '');\n\n    if (!this.oldImage) {\n      this.appendToStyle(\n        `:where(view-transition-new[name=\"${this.transitionName}\"]) {\n          animation-name: -ua-view-transition-fade-in;\n        }`\n      );\n      return;\n    }\n\n    // Reset forced display mode\n    this.forceDisplay(this.oldImage, false);\n\n    this.captureElement.groupKeyframes = `\n        @keyframes -ua-view-transition-group-anim-${this.transitionName} {\n          from {\n            transform: ${this.captureElement.old.transform};\n            width: ${this.captureElement.old.width}px;\n            height: ${this.captureElement.old.height}px;\n            backdrop-filter: ${this.captureElement.old.backdropFilter};\n          }\n        }\n      `;\n    this.appendToStyle(this.captureElement.groupKeyframes);\n    this.captureElement.groupAnimationNameRule = `\n        :where(view-transition-group[name=\"${this.transitionName}\"]) {\n          animation-name: -ua-view-transition-group-anim-${this.transitionName};\n        }\n      `;\n    this.appendToStyle(this.captureElement.groupAnimationNameRule);\n    this.captureElement.imagePairIsolationRule = `\n        :where(view-transition-image-pair[name=\"${this.transitionName}\"]) {\n          isolation: isolate;\n        }\n      `;\n    this.appendToStyle(this.captureElement.imagePairIsolationRule);\n    this.captureElement.imageAnimationNameRule = `\n        :where(view-transition-old[name=\"${this.transitionName}\"]) {\n          animation-name: -ua-view-transition-fade-out, -ua-mix-blend-mode-plus-lighter;\n        }\n        :where(view-transition-new[name=\"${this.transitionName}\"]) {\n          animation-name: -ua-view-transition-fade-in, -ua-mix-blend-mode-plus-lighter;\n        }\n      `;\n    this.appendToStyle(this.captureElement.imageAnimationNameRule);\n  }\n  appendToStyle(string: string) {\n    const text = this.groupStyle.textContent || '';\n    this.groupStyle.textContent = text.concat(string);\n  }\n  getStyleValues(stage: 'old' | 'new' = 'old'): GroupStyleRuleValues {\n    if (stage === 'old') {\n      const values: GroupStyleRuleValues = {\n        width: this.captureElement.old.width.toString().concat('px'),\n        height: this.captureElement.old.height.toString().concat('px'),\n        transform: this.captureElement.old.transform,\n        writingMode: this.captureElement.old.writingMode,\n        direction: this.captureElement.old.direction,\n        textOrientation: this.captureElement.old.textOrientation,\n        mixBlendMode: this.captureElement.old.mixBlendMode,\n        backdropFilter: this.captureElement.old.mixBlendMode,\n        colorScheme: this.captureElement.old.colorScheme,\n      };\n      return values;\n    } else {\n      const values: GroupStyleRuleValues = {\n        width: this.captureElement.new.width.toString().concat('px'),\n        height: this.captureElement.new.height.toString().concat('px'),\n        transform: this.captureElement.new.transform,\n        writingMode: this.captureElement.new.writingMode,\n        direction: this.captureElement.new.direction,\n        textOrientation: this.captureElement.new.textOrientation,\n        mixBlendMode: this.captureElement.new.mixBlendMode,\n        backdropFilter: this.captureElement.new.backdropFilter,\n        colorScheme: this.captureElement.new.colorScheme,\n      };\n      return values;\n    }\n  }\n  mapStyleValuesForAttribute(values: GroupStyleRuleValues) {\n    enum caseConverter {\n      width = 'width',\n      height = 'height',\n      transform = 'transform',\n      writingMode = 'writing-mode',\n      direction = 'direction',\n      textOrientation = 'text-orientation',\n      mixBlendMode = 'mix-blend-mode',\n      backdropFilter = 'backdrop-filter',\n      colorScheme = 'color-scheme',\n    }\n    for (const [property, value] of Object.entries(values)) {\n      const converted = caseConverter[property as keyof typeof caseConverter];\n      if (!converted) continue;\n      this.style.setProperty(converted, value);\n    }\n    return;\n  }\n  getSizingAnimationParemters(): [number, string] {\n    // This function returns the duration of the user agent animation that resizes the view-transition-group\n    // It is used to simulate the replaced content sizing effect in this.animateImages()\n    const style = getComputedStyle(this);\n    return [\n      this.getSizingAnimationDuration(style),\n      this.getSizingAnimationEasing(style),\n    ];\n  }\n  getSizingAnimationDuration(style: CSSStyleDeclaration) {\n    const animations = style.animationName.split(', ');\n    const animationDurations = style.animationDuration.split(', ');\n    const durationsMap = new Map(\n      animations.map((animationName) => {\n        return [\n          animationName,\n          animationDurations[animations.indexOf(animationName)],\n        ];\n      })\n    );\n    const rawDuration = durationsMap.get(\n      `-ua-view-transition-group-anim-${this.transitionName}`\n    );\n    const duration = parseFloat(rawDuration || '0') * 1000;\n    return duration;\n  }\n  getSizingAnimationEasing(style: CSSStyleDeclaration) {\n    const animations = style.animationName.split(', ');\n    const animationEasings = style.animationTimingFunction.split(', ');\n    const easingsMap = new Map(\n      animations.map((animationName) => {\n        return [\n          animationName,\n          animationEasings[animations.indexOf(animationName)],\n        ];\n      })\n    );\n    const easing = easingsMap.get(\n      `-ua-view-transition-group-anim-${this.transitionName}`\n    );\n    return easing || 'ease';\n  }\n  animateImages() {\n    const [duration, easing] = this.getSizingAnimationParemters();\n    if (this.oldImage) this.oldImage.animateImage(duration, easing);\n    if (this.newImage) this.newImage.animateImage(duration, easing);\n  }\n}\ncustomElements.define('view-transition-group', ViewTransitionGroup);\n","import ViewTransitionGroup from './elements/view-transition-group';\n\nclass ImageData {\n  image: Element | undefined;\n  width = 0;\n  height = 0;\n  styleTransform = 'initial';\n  transform = 'initial';\n  writingMode = 'initial';\n  direction = 'initial';\n  textOrientation = 'initial';\n  mixBlendMode = 'initial';\n  backdropFilter = 'initial';\n  colorScheme = 'initial';\n}\n\nexport default class CaptureElement {\n  // The initial structure of captureElement follows https://drafts.csswg.org/css-view-transitions/#captured-element\n  old = new ImageData();\n  groupKeyframes = '';\n  groupAnimationNameRule = '';\n  groupStylesRule = '';\n  imagePairIsolationRule = '';\n  imageAnimationNameRule = '';\n\n  oldElement: Element | undefined;\n  newElement: Element | undefined;\n  name = '';\n  group: ViewTransitionGroup | undefined;\n\n  new = new ImageData();\n}\n","export class ViewTransitionElement extends HTMLElement {\n  constructor() {\n    super();\n    this.setAttribute('aria-hidden', 'true');\n    this.setAttribute('inert', '');\n  }\n}\ncustomElements.define('view-transition', ViewTransitionElement);\n","import { parseStyles } from './style-parsing/style-sheet-parser';\nimport CaptureElement from './capture-element';\nimport {\n  cloneElementWithStyles,\n  getElementPosition,\n  isStylableElement,\n  CSSTransformPropertyToFunction,\n  ViewTransition,\n  shouldNormalizeFontSize,\n} from './polyfill-utils';\nimport ViewTransitionGroup from './elements/view-transition-group';\nimport type { StylableElement } from './polyfill-utils';\nimport type { Callback } from './polyfill-utils';\nimport { ViewTransitionElement } from './elements/view-transition-element';\nimport {\n  setElementVisibility,\n  setDocumentVisibility,\n  afterNextPaint,\n} from './polyfill-utils';\n\ndeclare global {\n  interface CSSStyleDeclaration {\n    viewTransitionName: string;\n  }\n}\nclass DuplicateNamesError extends Error {\n  elements: [Element, Element];\n  constructor(message: string | undefined, elements: [Element, Element]) {\n    super(message);\n    this.elements = elements;\n  }\n}\n\ntype NamedElementsMap = Map<string, CaptureElement>;\ntype viewTransitionElementsMap = Map<string, HTMLElement>;\ntype ViewTransitionPhase =\n  | 'pending-capture'\n  | 'update-callback-called'\n  | 'animating'\n  | 'done';\n\nexport default class ViewTransitionManager {\n  static isViewTransitionActive() {\n    return document.querySelector('view-transition') ? true : false;\n  }\n\n  // Adapted from https://drafts.csswg.org/css-view-transitions/#ua-styles\n  // :where() removes specificity, simulating a user agent style sheet\n  static UAStylesheetText = `* {\n      --vt-polyfill-name: initial;\n    }\n    \n    :where(:root) {\n      --vt-polyfill-name: root;\n    }\n    \n    :where(view-transition) {\n      position: fixed;\n      inset: 0;\n      z-index: 100000;\n  \n      pointer-events: none;\n    }\n    \n    :where(view-transition-group) {\n      position: absolute;\n      top: 0;\n      left: 0;\n    \n      animation-duration: 0.25s;\n      animation-fill-mode: both;\n    }\n    \n    :where(view-transition-image-pair) {\n      position: absolute;\n      inset: 0;\n    \n      isolation: isolate;\n    \n      animation-duration: inherit;\n      animation-fill-mode: inherit;\n    }\n    \n    :where(view-transition-old,\n    view-transition-new) {\n      position: absolute;\n      inset-block-start: 0;\n      inline-size: 100%;\n      block-size: auto;\n    \n      mix-blend-mode: plus-lighter;\n    \n      animation-duration: inherit;\n      animation-fill-mode: inherit;\n    }\n  \n    @keyframes -ua-view-transition-fade-out {\n      to { opacity: 0; }\n    }\n    @keyframes -ua-view-transition-fade-in {\n      from { opacity: 0; }\n    }\n    @keyframes -ua-mix-blend-mode-plus-lighter {\n      from { mix-blend-mode: plus-lighter }\n      to { mix-blend-mode: plus-lighter }\n    }\n    `;\n\n  phase: ViewTransitionPhase = 'pending-capture';\n  transitionPromises: ViewTransition = new ViewTransition(this);\n  viewTransitionElement = new ViewTransitionElement();\n  parsedStyleElement = document.createElement('style');\n  namedElements: NamedElementsMap = new Map();\n  oldElements: viewTransitionElementsMap = new Map();\n  newElements: viewTransitionElementsMap = new Map();\n  callback: Callback | undefined = () => undefined;\n  animationPromises: Promise<Animation>[] = [];\n\n  // Needed for Chrome 114.0.5735.196\n  // (see shouldNormalizeFontSize())\n  fontSizeFactor: number | undefined = undefined;\n\n  // Store focus to be restored from inert\n  activeElement: HTMLElement | undefined;\n\n  constructor() {}\n  async startViewTransition(\n    viewTransitionObject: ViewTransition,\n    callback?: Callback\n  ) {\n    this.phase = 'pending-capture';\n    this.transitionPromises = viewTransitionObject;\n    if (callback) this.callback = callback;\n    if (ViewTransitionManager.isViewTransitionActive()) {\n      this.skipTransition(\n        'Tried to initiate a View Transition from the polyfill, but one was already active.'\n      );\n      return;\n    }\n    this.viewTransitionElement = new ViewTransitionElement();\n    document.documentElement.appendChild(this.viewTransitionElement);\n\n    try {\n      const parsedStyleString = await parseStyles();\n      this.parsedStyleElement = document.createElement('style');\n      this.parsedStyleElement.textContent = parsedStyleString;\n    } catch (error) {\n      const reason =\n        error instanceof Error\n          ? `View Transitions API polyfill: could not parse stylesheets: ${error.name} ${error.message}`\n          : error;\n      this.skipTransition(reason);\n      throw reason;\n    }\n\n    this.addUAStylesheet();\n    this.viewTransitionElement.appendChild(this.parsedStyleElement);\n    this.fontSizeFactor = shouldNormalizeFontSize();\n\n    this.namedElements = new Map();\n    try {\n      this.oldElements = this.getNamedTransitionElements();\n    } catch (e) {\n      if (e instanceof DuplicateNamesError) {\n        return;\n      }\n    }\n    this.captureElements('old');\n    this.initialSetupGroups();\n\n    this.activeElement =\n      document.activeElement instanceof HTMLElement\n        ? document.activeElement\n        : undefined;\n    document.body.setAttribute('inert', '');\n\n    try {\n      if (callback) await callback();\n      this.transitionPromises.updateCallbackDone.resolve();\n      this.phase = 'update-callback-called';\n    } catch (error) {\n      this.transitionPromises.updateCallbackDone.reject(error);\n      this.skipTransition(error);\n      return;\n    }\n\n    this.parsedStyleElement?.remove();\n    try {\n      const parsedStyleString = await parseStyles();\n      this.parsedStyleElement = document.createElement('style');\n      this.parsedStyleElement.textContent = parsedStyleString;\n      this.viewTransitionElement.appendChild(this.parsedStyleElement);\n    } catch (error) {\n      const reason =\n        error instanceof Error\n          ? `View Transitions API polyfill: could not parse stylesheets: ${error.name} ${error.message}`\n          : error;\n      this.skipTransition(reason);\n      throw reason;\n    }\n\n    try {\n      this.newElements = this.getNamedTransitionElements();\n    } catch (e) {\n      if (e instanceof DuplicateNamesError) {\n        return;\n      }\n    }\n    this.captureElements('new');\n\n    // Yield control of the event loop to the browser\n    await afterNextPaint();\n    this.setupGroups();\n    this.newElements.forEach((element) => setElementVisibility(element, false));\n    this.transitionPromises.ready.resolve();\n    this.phase = 'animating';\n\n    // Clear the view transition once every animation is over\n    // https://drafts.csswg.org/css-view-transitions/#handle-transition-frame-algorithm\n    const animations = this.viewTransitionElement.getAnimations({\n      subtree: true,\n    });\n    const finishedPromises = animations.map((animation) => animation.finished);\n    this.animationPromises.push(...finishedPromises);\n    this.animationsFinished();\n  }\n  skipTransition(reason?: unknown) {\n    if (this.phase === 'pending-capture') {\n      // Call the update callback if it has not been called yet\n      queueMicrotask(async () => {\n        if (this.callback) await this.callback();\n        this.transitionPromises.updateCallbackDone.resolve();\n      });\n    }\n    setDocumentVisibility(true);\n    document.body.removeAttribute('inert');\n    this.phase = 'done';\n    this.transitionPromises.ready.reject(reason);\n    this.transitionPromises.finished.resolve();\n\n    // Account for multiple view transition elements\n    // in case the polyfill has erroneously added more than one\n    const viewTransitionElements = document.querySelectorAll('view-transition');\n    viewTransitionElements.forEach((element) => element.remove());\n  }\n  captureElements(stage: 'old' | 'new') {\n    // For each old or new element captured, add its data to a new CapturedElement struct\n    // https://drafts.csswg.org/css-view-transitions/#capture-old-state-algorithm\n    const map = stage === 'old' ? this.oldElements : this.newElements;\n    for (const [viewTransitionName, element] of map) {\n      let captureElement = this.namedElements.get(viewTransitionName);\n      if (!captureElement) {\n        captureElement = new CaptureElement();\n        this.namedElements.set(viewTransitionName, captureElement);\n      }\n      const style = getComputedStyle(element);\n      captureElement.name = viewTransitionName;\n      if (stage === 'old') {\n        captureElement.oldElement = element;\n      } else {\n        captureElement.newElement = element;\n      }\n\n      try {\n        const live = stage === 'new';\n        captureElement[stage].image = cloneElementWithStyles(\n          element,\n          live,\n          this.fontSizeFactor // Needed for Chrome 114.0.5735.196\n        );\n      } catch (error) {\n        const reason =\n          error instanceof Error\n            ? `Could not clone element ${element}: ${error.message}`\n            : error;\n        this.skipTransition(reason);\n        return;\n      }\n      captureElement[stage].width = element.offsetWidth;\n      captureElement[stage].height = element.offsetHeight;\n\n      captureElement[stage].styleTransform = style.transform;\n      // Within the scope of this function, if the style transform is none,\n      // replace it with an empty string to concat\n      const styleTransform =\n        captureElement[stage].styleTransform === 'none'\n          ? ''\n          : captureElement[stage].styleTransform;\n\n      try {\n        // Get the element's position and put it in the form of a translate()\n        const elementPosition = getElementPosition(element);\n        const elementPositionTranslateFunction = `translate(${elementPosition.left}px, ${elementPosition.top}px)`;\n        // Combine the translate() for the element's position with any transforms the element had\n        // This follows a specific order according to how CSS transforms are applied:\n        //  first the element position, then the standalone transforms, then the previous value of the transform property\n        if (style.translate) {\n          // Convert the standalone CSS transform properties to CSS functions\n          const standaloneTranslate = CSSTransformPropertyToFunction(\n            'translate',\n            style.translate\n          );\n          const standaloneRotate = CSSTransformPropertyToFunction(\n            'rotate',\n            style.rotate\n          );\n          const standaloneScale = CSSTransformPropertyToFunction(\n            'scale',\n            style.scale\n          );\n          const standaloneTransforms = [\n            standaloneTranslate,\n            standaloneRotate,\n            standaloneScale,\n          ].join(' ');\n          captureElement[stage].transform =\n            `${elementPositionTranslateFunction} ${standaloneTransforms} ${styleTransform}`.trim();\n        } else {\n          captureElement[stage].transform =\n            `${elementPositionTranslateFunction} ${styleTransform}`.trim();\n        }\n      } catch (error) {\n        const reason =\n          error instanceof Error\n            ? `Could not get position of element ${element}: ${error.message}`\n            : error;\n        this.skipTransition(reason);\n        return;\n      }\n\n      captureElement[stage].writingMode = style.writingMode;\n      captureElement[stage].direction = style.direction;\n      captureElement[stage].textOrientation = style.textOrientation;\n      captureElement[stage].mixBlendMode = style.mixBlendMode;\n      captureElement[stage].backdropFilter = style.backdropFilter;\n      captureElement[stage].colorScheme = style.colorScheme;\n      if (stage === 'old')\n        this.namedElements.set(viewTransitionName, captureElement);\n    }\n  }\n  addUAStylesheet() {\n    // Append a <style> element with the default styles normally in the UA stylesheet for browsers that support the API\n    const UAStyleEl = document.createElement('style');\n    UAStyleEl.setAttribute('data-vt-polyfill-style', '');\n    UAStyleEl.textContent = ViewTransitionManager.UAStylesheetText;\n    this.viewTransitionElement.appendChild(UAStyleEl);\n  }\n  getNamedTransitionElements() {\n    // This function parses the DOM for elements with a view transition name\n\n    const usedTransitionNames: string[] = [];\n    // capturedElements maps view transition names to the elements that have them\n    const capturedElements = new Map();\n    const loopforNamedElements = (element: StylableElement): void => {\n      // Recursive function: analyze the given element and call the function again individually for each of its children\n\n      if (element === document.head) return;\n\n      const style = getComputedStyle(element);\n\n      let isRendered = true;\n      if (element.checkVisibility) {\n        isRendered = element.checkVisibility();\n      } else {\n        // Element.checkVisibility is not supported until\n        //  some fairly recent browser versions\n        isRendered = style.getPropertyValue('display') !== 'none';\n      }\n      if (!isRendered) return;\n      const viewTransitionName =\n        element.style.viewTransitionName ||\n        // Note the .trim(): newer browsers already do it, older browsers don't\n        style.getPropertyValue('--vt-polyfill-name').trim();\n\n      const loopOverChildren = (element: StylableElement) =>\n        element.querySelectorAll(':scope > *').forEach((child) => {\n          if (!isStylableElement(child)) return;\n          loopforNamedElements(child);\n        });\n\n      if (viewTransitionName === 'none') {\n        return loopOverChildren(element);\n      }\n\n      if (usedTransitionNames.includes(viewTransitionName)) {\n        const duplicateNamesError = new DuplicateNamesError(\n          'View Transitions API Polyfill: two elements with the same view transition name have been found',\n          [capturedElements.get(viewTransitionName), element]\n        );\n        throw duplicateNamesError;\n      }\n\n      if (viewTransitionName !== '') {\n        usedTransitionNames.push(viewTransitionName);\n        capturedElements.set(viewTransitionName, element);\n        if (element === document.documentElement || element === document.body) {\n          // If <html> (or <body>) has a view transition name (which is the default case, but can be overridden),\n          //  a white background (specified in the polyfill's user agent stylesheet) is applied to <view-transition>.\n          this.viewTransitionElement.classList.add('has-root-group');\n        }\n      }\n      return loopOverChildren(element);\n    };\n    try {\n      loopforNamedElements(document.documentElement);\n    } catch (e) {\n      if (e instanceof DuplicateNamesError) {\n        this.skipTransition(e);\n        throw e;\n      }\n    }\n    return capturedElements;\n  }\n  initialSetupGroups() {\n    // Append partially completed groups with old images to DOM to simulate rendering freeze for callback\n    for (const [key, value] of this.namedElements) {\n      const captureElement = value;\n      const viewTransitionName = key;\n\n      const viewTransitionGroup = new ViewTransitionGroup();\n      captureElement.group = viewTransitionGroup;\n      viewTransitionGroup.setupForOldImage(viewTransitionName, captureElement);\n      this.viewTransitionElement.appendChild(viewTransitionGroup);\n    }\n  }\n  setupGroups() {\n    for (const entry of this.namedElements) {\n      const viewTransitionName = entry[0];\n      const captureElement = entry[1];\n\n      let viewTransitionGroup = captureElement.group;\n      if (!viewTransitionGroup) {\n        viewTransitionGroup = new ViewTransitionGroup();\n        captureElement.group = viewTransitionGroup;\n        viewTransitionGroup.setupForNewImage(\n          viewTransitionName,\n          captureElement\n        );\n        this.viewTransitionElement.appendChild(viewTransitionGroup);\n      } else {\n        viewTransitionGroup.addNewImage();\n      }\n      viewTransitionGroup.setup();\n      viewTransitionGroup.animateImages();\n    }\n  }\n  updateAnimations(newAnimation: Animation) {\n    // Add animations from document.documentElement.animate()\n    //  to the finished promises to be awaited for the end of the transition.\n    this.animationPromises.push(newAnimation.finished);\n  }\n  animationsFinished() {\n    Promise.allSettled(this.animationPromises).then((resolvedPromises) => {\n      // The array of resolvedPromises was initially made to include\n      //  the animations generated by the polyfill itself, not including\n      //  any animations added by document.documentElement.animate()\n      //  to this.animationPromises.\n      if (resolvedPromises.length === this.animationPromises.length) {\n        this.animationPromises = [];\n        this.phase = 'done';\n        this.transitionPromises.finished.resolve();\n        setDocumentVisibility(true);\n        document.body.removeAttribute('inert');\n        if (this.activeElement && document.body.contains(this.activeElement)) {\n          this.activeElement.focus();\n        }\n        this.viewTransitionElement.remove();\n      } else {\n        this.animationsFinished();\n      }\n    });\n  }\n}\n","import { MediaClone } from './elements/media-clone';\nimport ViewTransitionManager from './view-transition-manager';\n\ntype PromiseResolve = (value?: PromiseLike<undefined> | undefined) => void;\ntype PromiseReject = (reason?: unknown) => void;\n\nexport type DeferredPromise = Promise<undefined> & {\n  resolve: PromiseResolve;\n  reject: PromiseReject;\n};\n\nexport function defer() {\n  let resolve!: PromiseResolve;\n  let reject!: PromiseReject;\n\n  const promise = new Promise((res, rej) => {\n    resolve = res;\n    reject = rej;\n  }) as DeferredPromise;\n  promise.resolve = resolve;\n  promise.reject = reject;\n\n  return promise;\n}\n\nexport type Callback = () => unknown;\n\nexport class ViewTransition {\n  private viewTransitionElement: ViewTransitionManager;\n  finished: DeferredPromise;\n  ready: DeferredPromise;\n  updateCallbackDone: DeferredPromise;\n  constructor(viewTransitionElement: ViewTransitionManager) {\n    // Deferred promises are resolved remotely as needed by the ViewTransitionElement governing the transition\n    this.finished = defer();\n    this.ready = defer();\n    this.updateCallbackDone = defer();\n    this.viewTransitionElement = viewTransitionElement;\n  }\n  skipTransition() {\n    this.viewTransitionElement.skipTransition(\n      new DOMException('Transition skipped')\n    );\n  }\n}\n\nexport const afterNextPaint = (): Promise<void> =>\n  new Promise<void>((resolve) => {\n    requestAnimationFrame(() => {\n      setTimeout(resolve, 0);\n    });\n  });\n\nconst isElementUnallowed = (el: Element) => {\n  const unallowedTagNames = [\n    'head',\n    'script',\n    'style',\n    'view-transition',\n    'view-transition-group',\n    'view-transition-image-pair',\n    'view-transition-old',\n    'view-transition-new',\n  ];\n  return unallowedTagNames.includes(el.tagName.toLowerCase());\n};\n\nconst isVoidElement = (el: Element) => {\n  const voidElements = [\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  return voidElements.includes(el.tagName.toLowerCase());\n};\n\nconst isElementOutsideViewport = (el: Element) => {\n  const rect = el.getBoundingClientRect();\n\n  return (\n    rect.top > window.innerHeight + document.documentElement.scrollTop ||\n    rect.left > window.innerWidth + document.documentElement.scrollLeft\n  );\n};\n\n// Always clone these link properties, as their real values\n// could be hidden by the :visited pseudo-class.\n// https://developer.mozilla.org/en-US/docs/Web/CSS/:visited#privacy_restrictions\nconst linkProperties = [\n  'color',\n  'background-color',\n  'border-color',\n  'border-bottom-color',\n  'border-left-color',\n  'border-right-color',\n  'border-top-color',\n  'column-rule-color',\n  'outline-color',\n  'text-decoration-color',\n  'text-emphasis-color',\n  'text-decoration-line',\n];\n\n// Always clone the values of these layout-related CSS properties.\n// Using longhands because shorthands are not included in CSSStyleDeclaration.\nconst alwaysCloneProperties = [\n  'width',\n  'height',\n  'inline-size',\n  'block-size',\n  'padding-top',\n  'padding-bottom',\n  'padding-left',\n  'padding-right',\n  'border-top-width',\n  'border-bottom-width',\n  'border-left-width',\n  'border-right-width',\n  'margin-top',\n  'margin-bottom',\n  'margin-left',\n  'margin-right',\n  'box-sizing',\n  'display',\n];\n// Never clone the values of these layout-related CSS properties.\n// Their values would hinder animations on ViewTransitionImage.\nconst neverCloneProperties = [\n  'max-width',\n  'max-height',\n  'max-inline-size',\n  'max-block-size',\n  'min-width',\n  'min-height',\n  'min-inline-size',\n  'min-block-size',\n];\n\nconst spacerProperties = [\n  'position',\n  'margin-top',\n  'margin-bottom',\n  'margin-right',\n  'margin-left',\n  'position',\n  'top',\n  'bottom',\n  'right',\n  'left',\n];\n\nconst cloneAsSpacer = (el: Element) => {\n  const clone = document.createElement('div');\n  clone.dataset.vtSpacer = '';\n\n  const rect = el.getBoundingClientRect();\n  clone.style.width = `${rect.width}px`;\n  clone.style.height = `${rect.height}px`;\n\n  const style = getComputedStyle(el);\n  for (const prop of spacerProperties) {\n    clone.style.setProperty(prop, style.getPropertyValue(prop));\n  }\n  return clone;\n};\n\n// The Element interface does not implement the style property (needed for cloning),\n//  but all of its subclasses do.\nexport type StylableElement = Element & { style: CSSStyleDeclaration };\nexport function isStylableElement(\n  element: unknown\n): element is StylableElement {\n  return (\n    element instanceof HTMLElement ||\n    element instanceof SVGElement ||\n    element instanceof MathMLElement\n  );\n}\n\nexport function shouldNormalizeFontSize(): number | undefined {\n  // Needed for Chrome 114.0.5735.196\n  // That browser has a bug where the font-size returned\n  //  by getComputedStyle() might be multiplied by a constant factor.\n  // If the polyfill doesn't correct for this bug, all cloned elements\n  //  with a non-default font-size will have the wrong font-size.\n  const fontSizeTester = document.createElement('div');\n  fontSizeTester.style.fontSize = '16px';\n  fontSizeTester.style.position = 'fixed';\n  fontSizeTester.style.display = 'none';\n  document.body.appendChild(fontSizeTester);\n  const fontSizeFactor =\n    parseFloat(getComputedStyle(fontSizeTester).fontSize) / 16;\n  fontSizeTester.remove();\n\n  return fontSizeFactor > 1.01 || fontSizeFactor < 0.99\n    ? fontSizeFactor\n    : undefined;\n}\n\nexport function cloneElementWithStyles(\n  element: StylableElement,\n  live = false,\n  normalizeFontSizeFactor: number | undefined = undefined // Needed for Chrome 114.0.5735.196\n): Element | undefined {\n  // This is a recursive function that clones an element while also applying its computed styles\n\n  // Create a defaultStyle object which contains the default\n  // CSS declarations from the user agent, in order to avoid\n  // duplicating these when cloning an element's style.\n  const div = document.createElement('div');\n  div.setAttribute('data-vt-default-style-div', '');\n  div.style.all = 'initial';\n  div.style.display = 'none';\n  document.body.appendChild(div);\n  const defaultStyle = getComputedStyle(div);\n\n  const cloneElement = (el: StylableElement) => {\n    // Check that the element is:\n    // + Not the <html> element (in such a case, go clone the <body> directly and skip <html>)\n    // + Not an element that would be redundant to clone\n    if (isElementUnallowed(el)) {\n      return;\n    }\n\n    // Create the clone\n    // Avoid duplicate <body> tags\n    // Clone <video> elements as <canvas>\n    let clone: StylableElement;\n    if (el instanceof HTMLBodyElement || el instanceof HTMLHtmlElement) {\n      clone = document.createElement('div');\n    } else if (el instanceof HTMLVideoElement) {\n      try {\n        const mediaClone = new MediaClone();\n        mediaClone.setup(el, live);\n        clone = mediaClone;\n      } catch {\n        // Canvas context 2D unsupported\n        return undefined;\n      }\n    } else {\n      clone = el.cloneNode() as StylableElement;\n    }\n\n    // Iterate over the properties of getComputedStyle() to make up the contents of a style attribute\n    const style = getComputedStyle(el);\n    const CSSProperties: Array<string> = [];\n    CSSProperties.push('all: initial;'); // Disable inheritance\n    if (style) {\n      for (const property of [...style]) {\n        if (neverCloneProperties.includes(property)) continue;\n\n        const value = style.getPropertyValue(property);\n\n        if (\n          value === defaultStyle.getPropertyValue(property) &&\n          !alwaysCloneProperties.includes(property)\n        ) {\n          continue;\n        }\n        if (property === '-webkit-text-fill-color') {\n          // There are cases of shadow DOMs which override the color property\n          //  but where the polyfill still applies the inherited color\n          //  because of -webkit-text-fill-color, which overrides it.\n          // As such, normalize it to the color property.\n          CSSProperties.push(`color: ${value};`);\n          continue;\n        } else if (normalizeFontSizeFactor && property === 'font-size') {\n          CSSProperties.push(\n            `font-size: ${parseFloat(value) / normalizeFontSizeFactor}px;`\n          );\n          continue;\n        }\n        CSSProperties.push(`${property}: ${value};`);\n      }\n    }\n\n    if (el instanceof HTMLAnchorElement) {\n      for (const property of linkProperties) {\n        clone.style.setProperty(property, style.getPropertyValue(property));\n      }\n    }\n\n    // Make up an ID for the clone to be referenced in <style> tags\n    const cloneID = 'VT' + Math.random().toString(36).slice(2);\n    clone.setAttribute('id', cloneID);\n\n    if (el instanceof HTMLHtmlElement) {\n      // If <html> has a view transition name (which is the default case, but can be overridden),\n      //  a white background (specified in the polyfill's user agent stylesheet) is applied to <view-transition>\n\n      // This ensures all content behind the transition is obscured, even before a view-transition group for <html> is added.\n      // As such, there won't be a flash of content visible through the transparent <view-transition>\n      //  if the transition is supposed to encompass the whole document.\n      const htmlStyle = document.createElement('style');\n      htmlStyle.textContent = `\n      :where(#${cloneID}) {background-color: Canvas}\n      #${cloneID} {zoom: initial !important;}\n      `;\n      // This also works around an unrelated issue on Chrome 114.0.5735.196\n      // That browser has a bug where the return value of\n      // getComputedStyle().zoom for <html> is the window.devicePixelRatio\n\n      clone.appendChild(htmlStyle);\n    }\n\n    if (cloningRoot) {\n      clone.style.margin = '0';\n    }\n\n    if (isVoidElement(clone)) {\n      clone.setAttribute('style', CSSProperties.join(''));\n    } else {\n      const styleElement = document.createElement('style');\n      styleElement.textContent = `#${cloneID} {${CSSProperties.join('')}}`;\n      clone.appendChild(styleElement);\n    }\n\n    clone.style.opacity = el.hasAttribute('data-vt-polyfill-opacity')\n      ? el.getAttribute('data-vt-polyfill-opacity') || '1'\n      : style\n        ? style.getPropertyValue('opacity')\n        : '1';\n    clone.removeAttribute('data-vt-polyfill-opacity');\n\n    if (cloningRoot) {\n      clone.style.position = 'relative';\n      clone.style.inset = '0';\n      clone.style.transform = 'none';\n      if (clone.style.translate !== undefined) {\n        // The browser supports standalone CSS transform properties\n        clone.style.translate = 'none';\n        clone.style.rotate = 'none';\n        clone.style.scale = 'none';\n      }\n    }\n\n    // Clone the ::before and ::after pseudo elements if they are present\n    // Their styles need to be placed withing a separate <style> tag, not the style attribute\n\n    const beforePseudoEl = getComputedStyle(el, '::before');\n    if (\n      beforePseudoEl.content !== 'none' &&\n      beforePseudoEl.content !== '-moz-alt-content'\n      // If a pseudo-element's content is none, it does not exist\n      // -moz-alt-content is returned for images in firefox\n      // For our purposes, -moz-alt-content is like none\n    ) {\n      const styleEl = document.createElement('style');\n      const CSSProperties: Array<string> = [];\n      for (const property of [...beforePseudoEl]) {\n        CSSProperties.push(\n          `${property}: ${beforePseudoEl.getPropertyValue(property)};`\n        );\n      }\n      styleEl.textContent = `#${cloneID}::before {${CSSProperties.join('')}}`;\n      clone.appendChild(styleEl);\n    }\n\n    const afterPseudoEl = getComputedStyle(el, '::after');\n    if (\n      afterPseudoEl.content !== 'none' &&\n      afterPseudoEl.content !== '-moz-alt-content'\n    ) {\n      const styleEl = document.createElement('style');\n      const CSSProperties: Array<string> = [];\n      for (const property of [...afterPseudoEl]) {\n        CSSProperties.push(\n          `${property}: ${afterPseudoEl.getPropertyValue(property)};`\n        );\n      }\n      styleEl.textContent = `#${cloneID}::after {${CSSProperties.join('')}}`;\n      clone.appendChild(styleEl);\n    }\n\n    // Clone scroll position\n\n    const scrollTop = el.scrollTop;\n\n    if (scrollTop !== 0) {\n      clone.setAttribute('data-vt-scroll-top', scrollTop.toString());\n    }\n\n    const scrollLeft = el.scrollLeft;\n\n    if (scrollLeft !== 0) {\n      clone.setAttribute('data-vt-scroll-left', scrollLeft.toString());\n    }\n\n    // Recursively call the clone function for the element's childNodes,\n    // then appending the resulting child clones to the parent clone\n    const elementChildren = el.childNodes;\n    for (const child of [...elementChildren]) {\n      if (child instanceof Element && !isElementUnallowed(child)) {\n        cloningRoot = false;\n        if (child.hasAttribute('data-vt-default-style-div')) continue;\n        // If a child has a view transition name, its contents will be skipped.\n        const childHasName =\n          getComputedStyle(child).getPropertyValue('--vt-polyfill-name');\n        if (isElementOutsideViewport(child) || childHasName) {\n          // If the element is outside the viewport's bounds,\n          // only clone it as an empty div to take up space,\n          // saving resources by not cloning its subtree.\n          const childClone = cloneAsSpacer(child);\n          clone.appendChild(childClone);\n          continue;\n        }\n        const childClone = cloneElement(child as StylableElement);\n        if (childClone) {\n          clone.appendChild(childClone);\n        }\n      } else if (child instanceof Text && child.textContent?.trim()) {\n        const childClone = child.cloneNode();\n        clone.append(childClone);\n      }\n    }\n\n    return clone;\n  };\n\n  let cloningRoot = true;\n  try {\n    const rootElement = cloneElement(element);\n    return rootElement;\n  } finally {\n    div.remove();\n  }\n}\n\ntype CSSTransformProperty = 'translate' | 'rotate' | 'scale';\nexport function CSSTransformPropertyToFunction(\n  transformProperty: CSSTransformProperty,\n  transformString: string\n): string {\n  // Convert a standalone CSS transform property (translate, rotate, scale)\n  //  to an equivalent CSS function for the transform property.\n  // This is mostly about converting space-separated lists of values to comma-separated ones.\n  if (transformString === 'none') return '';\n  const transformValues = transformString.split(' ').join(', ');\n  switch (transformProperty) {\n    case 'translate':\n      return `translate(${transformValues})`;\n    case 'rotate':\n      return `rotate(${transformValues})`;\n    case 'scale':\n      return `scale(${transformValues})`;\n  }\n  return '';\n}\n\nfunction getScrollOffset(element: HTMLElement): [number, number] {\n  // Function to get the total amount of pixels that an element's\n  //  layout position is offset on the screen due to the parents' scrolling\n  let scrollTop = 0;\n  let scrollLeft = 0;\n  const addOffset = (el: HTMLElement): void => {\n    if (el.scrollTop === 0 && el.scrollLeft === 0) {\n      if (!el.parentElement) return;\n      return addOffset(el.parentElement);\n    }\n    scrollTop += el.scrollTop;\n    scrollLeft += el.scrollLeft;\n  };\n  if (!element.parentElement) return [0, 0];\n  addOffset(element.parentElement);\n  return [scrollTop, scrollLeft];\n}\n\nexport function getElementPosition(element: HTMLElement): {\n  top: number;\n  left: number;\n} {\n  const offsetPosition = (el: HTMLElement) => {\n    // Recursive function to get an element's position in page layout without transforms\n    // offsetTop and offsetLeft are relative to the nearest ancestor with position =/= static\n    // Recursion is needed to loop through offsetParents and get an absolute position\n\n    const top = el.offsetTop;\n    const left = el.offsetLeft;\n\n    const offsetParent = el.offsetParent as HTMLElement;\n    let parentPosition = { top: 0, left: 0 };\n    if (offsetParent) {\n      // When the limit has been reached, offsetParent will be <html>\n      // When el.offsetParent is <html>, it actually returns null\n      parentPosition = offsetPosition(offsetParent);\n    }\n    const positionObject = {\n      top: top + parentPosition.top,\n      left: left + parentPosition.left,\n    };\n    return positionObject;\n  };\n  const [scrollTopOffset, scrollLeftOffset] = getScrollOffset(element);\n  const position = offsetPosition(element);\n  position.top -= scrollTopOffset;\n  position.left -= scrollLeftOffset;\n  return position;\n}\n\nexport function setElementVisibility(element: StylableElement, value: boolean) {\n  if (element instanceof HTMLHtmlElement) {\n    // Forward visibility of <html> to body to avoid hiding view-transition\n    setElementVisibility(document.body, value);\n    return;\n  }\n  if (value === false) {\n    // Hide elements\n    if (element.hasAttribute('data-vt-polyfill-opacity')) return;\n    const elementOpacity = element.style.opacity;\n    element.setAttribute('data-vt-polyfill-opacity', elementOpacity);\n    element.style.opacity = '0.001';\n  } else if (value === true) {\n    // Show elements\n    if (element.hasAttribute('data-vt-polyfill-opacity')) {\n      element.style.opacity =\n        element.getAttribute('data-vt-polyfill-opacity') ?? '';\n      element.removeAttribute('data-vt-polyfill-opacity');\n    }\n  }\n}\nexport function setDocumentVisibility(value: boolean) {\n  // Reset visibility of previously hidden elements with a view-transition-name\n  const elements = document.querySelectorAll('[data-vt-polyfill-opacity]');\n  for (const element of elements) {\n    setElementVisibility(element as StylableElement, value);\n  }\n}\n","import * as csstree from 'css-tree';\nimport {\n  isDeclaration,\n  isIdentifier,\n  isPseudoElementSelector,\n  isValue,\n} from './style-types';\nimport {\n  getElementSelector,\n  generateListItem,\n  VIEW_TRANSITION_ELEMENTS,\n  replaceDeclarations,\n} from './parsing-utils';\n\nexport function getSerializedElementSelector(\n  pseudoElementSelector: string\n): string {\n  const ast = csstree.parse(pseudoElementSelector, { context: 'selector' });\n  const pseudoAST = csstree.find(\n    ast,\n    (node) =>\n      isPseudoElementSelector(node) &&\n      VIEW_TRANSITION_ELEMENTS.includes(node.name)\n  ) as csstree.PseudoElementSelector | null;\n  if (!pseudoAST) {\n    throw new Error(\n      `View Transitions API polyfill: invalid pseudo-element selector given: ${pseudoElementSelector}`\n    );\n  }\n  const selectorAST = getElementSelector(pseudoAST);\n  return csstree.generate(selectorAST);\n}\n\nfunction isValidValue(valueAST: csstree.Value): boolean {\n  // Parse the value of view-transition-name (from the value itself), which must be one <custom-ident> in CSS\n  const plainObject = csstree.toPlainObject(valueAST) as csstree.ValuePlain;\n  const childrenArray = plainObject.children;\n  if (childrenArray.length !== 1) return false;\n  if (!isIdentifier(childrenArray[0])) return false;\n  return true;\n}\n\nfunction getNameValue(valueAST: csstree.Declaration): string {\n  // Parse the value of view-transition-name, which must be one <custom-ident> in CSS\n  const plainObject = csstree.toPlainObject(\n    valueAST\n  ) as csstree.DeclarationPlain;\n  const childrenArray = (plainObject.value as csstree.ValuePlain).children;\n  if (childrenArray.length !== 1) return '';\n  if (!isIdentifier(childrenArray[0])) return '';\n  return childrenArray[0].name;\n}\n\nexport function getFromStyleAttribute(styleAttribute: string): string {\n  // Given the style=\"\" HTML attribute of an element,\n  //  get the value of view-transition-name\n  const ast = csstree.parse(styleAttribute, {\n    context: 'declarationList',\n    parseCustomProperty: true,\n  });\n  // Replace view-transition-name declarations with --vt-polyfill-name\n  replaceDeclarations(ast);\n  const lastDeclaration = csstree.findLast(\n    ast,\n    (node) => isDeclaration(node) && node.property === '--vt-polyfill-name'\n  ) as csstree.Declaration | null;\n  if (!lastDeclaration) return '';\n  return getNameValue(lastDeclaration);\n}\n\nexport function setStyleAttribute(\n  styleAttribute: string,\n  value: string\n): string {\n  // Given the style=\"\" HTML attribute of an element,\n  //  get what style=\"\" should be if view-transition name is set\n  const ast = csstree.parse(styleAttribute, {\n    context: 'declarationList',\n    parseCustomProperty: true,\n  }) as csstree.DeclarationList;\n  // Normalize view-transition-name declarations to --vt-polyfill-name\n  replaceDeclarations(ast);\n\n  const declarations = csstree.findAll(\n    ast,\n    (node) => isDeclaration(node) && node.property === '--vt-polyfill-name'\n  ) as csstree.Declaration[];\n\n  if (value === '') {\n    // Remove any declarations\n    csstree.walk(ast, {\n      visit: 'Declaration',\n      enter(node, item, list) {\n        if (node.property === '--vt-polyfill-name') {\n          list.remove(item);\n        }\n      },\n    });\n\n    const serializedAttribute = csstree.generate(ast);\n    return serializedAttribute;\n  }\n\n  if (declarations.length >= 2) {\n    // Remove all declarations except for the last one\n    const lastDeclaration = declarations[declarations.length - 1];\n    csstree.walk(ast, {\n      visit: 'Declaration',\n      enter(node, item, list) {\n        if (\n          node.property === '--vt-polyfill-name' &&\n          node !== lastDeclaration\n        ) {\n          list.remove(item);\n        }\n      },\n    });\n  }\n\n  if (declarations.length === 1) {\n    const lastDeclaration = declarations[declarations.length - 1];\n    // Create new csstree.Value object\n    const valueAST = csstree.parse(value, { context: 'value' });\n    const valueTree = csstree.find(valueAST, (node) =>\n      isValue(node)\n    ) as csstree.Value | null;\n    // Early exit: return styleAttribute as-is to avoid modifications\n    if (!valueTree || !isValidValue(valueTree)) return styleAttribute;\n\n    const valueItem = generateListItem(valueTree);\n    (lastDeclaration.value as csstree.Value).children.clear();\n    (lastDeclaration.value as csstree.Value).children.append(valueItem);\n\n    const serializedAttribute = csstree.generate(ast);\n    return serializedAttribute;\n  } else {\n    // Create new csstree.Declaration object\n    const serialized = `--vt-polyfill-name: ${value}`;\n    const valueAST = csstree.parse(serialized, {\n      context: 'declaration',\n      parseCustomProperty: true,\n    });\n    const declaration = csstree.find(\n      valueAST,\n      (node) => isDeclaration(node) && node.property === '--vt-polyfill-name'\n    ) as csstree.Declaration | null;\n    // Early exit: return styleAttribute as-is to avoid modifications\n    if (!declaration || !isValidValue(declaration.value as csstree.Value))\n      return styleAttribute;\n\n    // Get declaration as a list item to be appended to style attribute\n    const declarationItem = generateListItem(declaration);\n    ast.children.append(declarationItem);\n  }\n\n  const serializedAttribute = csstree.generate(ast);\n  return serializedAttribute;\n}\n","import type { Callback } from './polyfill-utils';\nimport { ViewTransition } from './polyfill-utils';\nimport ViewTransitionManager from './view-transition-manager';\nimport {\n  getFromStyleAttribute,\n  setStyleAttribute,\n  getSerializedElementSelector,\n} from './style-parsing/style-attribute-parser';\n\nlet activeViewTransition: ViewTransitionManager | undefined;\n\nexport function startViewTransitionPolyfill(\n  callback: Callback | undefined\n): ViewTransition {\n  // The ViewTransitionManager class handles most of the transition work\n  const viewTransitionManager = new ViewTransitionManager();\n  // The ViewTransition class acts as the polyfill for the user-facing object returned by document.startViewTransition\n  const viewTransitionObject = new ViewTransition(viewTransitionManager);\n  activeViewTransition = viewTransitionManager;\n  viewTransitionManager.startViewTransition(viewTransitionObject, callback);\n  viewTransitionObject.finished.then(() => {\n    activeViewTransition = undefined;\n  });\n\n  return viewTransitionObject;\n}\n\nexport function mapStartViewTransition() {\n  Object.defineProperty(Document.prototype, 'startViewTransition', {\n    value: startViewTransitionPolyfill,\n    writable: true,\n  });\n}\n\ndeclare global {\n  interface Document {\n    startViewTransition:\n      | ((callback?: () => void) => ViewTransition)\n      | undefined;\n  }\n}\n\nexport function mapPolyfillViewTransitionAnimate() {\n  // Decorate the animate function of <html>\n  // The new function must account for changing view transition pseudo elements to polyfill elements\n\n  const animateFunction = HTMLHtmlElement.prototype.animate;\n\n  Object.defineProperty(HTMLHtmlElement.prototype, 'animate', {\n    value: (\n      keyframes: Keyframe[] | PropertyIndexedKeyframes | null,\n      options?: number | KeyframeAnimationOptions\n    ): Animation => {\n      const callAnimation = () =>\n        animateFunction.call(document.documentElement, keyframes, options);\n\n      if (!options || typeof options === 'number') return callAnimation();\n      const pseudoElement = options.pseudoElement;\n      const hasViewTransitionPseudoElement =\n        pseudoElement && pseudoElement.startsWith('::view-transition');\n      if (!hasViewTransitionPseudoElement) {\n        return callAnimation();\n      }\n      // Intercept normal animate function if it refers to view transition pseudo elements\n      // The polyfill needs to forward the animation to the custom elements in the DOM\n\n      // Turn the pseudo element name into a valid polyfill element name\n      const elementName = getSerializedElementSelector(pseudoElement);\n\n      // Remove the pseudoElement option from the animation options now that we are animating a real element\n      const animationOptions = { ...options };\n      delete animationOptions.pseudoElement;\n      const element = document.querySelector(elementName);\n      if (!element) {\n        // Return an empty Animation that won't ever finish,\n        //  following Chrome's behavior\n        const keyframeEffect = new KeyframeEffect(\n          document.documentElement,\n          keyframes,\n          animationOptions\n        );\n        Object.defineProperty(keyframeEffect, 'pseudoElement', {\n          get() {\n            return pseudoElement;\n          },\n        });\n        const animation = new Animation(keyframeEffect, document.timeline);\n        return animation;\n      }\n      const animation = element.animate(keyframes, animationOptions);\n      activeViewTransition?.updateAnimations(animation);\n      return animation;\n    },\n    configurable: true,\n    writable: true,\n  });\n}\n\nexport function mapToGetAnimations() {\n  // Patch document.getAnimations() such that\n  // The animations on polyfill elements are returned as animations of pseudo elements\n  // To account for functions looking for animations on view transition pseudo elements\n\n  const getAnimations = Document.prototype.getAnimations;\n\n  Object.defineProperty(Document.prototype, 'getAnimations', {\n    value: () => {\n      interface AnimationKeyframe extends Animation {\n        // Extend the Animation interface to tell TypeScript that Animation.effect is a KeyframeEffect\n        //  instead of an AnimationEffect, an abstract interface (never touched in the browser) which does not have a target\n        effect: KeyframeEffect;\n      }\n      const animations = getAnimations.call(document) as AnimationKeyframe[];\n      const viewTransitionElementAnimations = animations.filter((animation) => {\n        {\n          return animation.effect.target?.tagName\n            .toLowerCase()\n            .startsWith('view-transition');\n        }\n      });\n      viewTransitionElementAnimations.forEach((animation) => {\n        const target = animation.effect?.target;\n        Object.defineProperty(animation.effect, 'target', {\n          get(): HTMLElement {\n            // The view transition pseudo elements are attached to <html>\n            return document.documentElement;\n          },\n        });\n        Object.defineProperty(animation.effect, 'pseudoElement', {\n          get(): string {\n            let pseudoElementString = `::${target?.tagName.toLowerCase()}`;\n            if (!(target instanceof ViewTransition)) {\n              // All view transition elements except for the root have a name\n              pseudoElementString = pseudoElementString.concat(\n                `(${target?.getAttribute('name')})`\n              );\n            }\n            return pseudoElementString;\n          },\n        });\n      });\n\n      return animations;\n    },\n    configurable: true,\n    writable: true,\n  });\n}\n\nexport function mapViewTransitionName() {\n  // Monkey patching HTMLElement.prototype.style.viewTransitionName.\n  // To do this, we first monkey patch HTMLElement.prototype.style,\n  //  such that the CSSStyleDeclaration object it returns is intercepted\n  //  in order to add the viewTransitionName getter and setter.\n  // Monkey patching CSSStyleDeclaration directly is not feasible\n  //  because 'this' wouldn't refer to an HTMLElement.\n  const originalStyle = Object.getOwnPropertyDescriptor(\n    HTMLElement.prototype,\n    'style'\n  );\n  Object.defineProperty(HTMLElement.prototype, 'style', {\n    get() {\n      const styleObject: CSSStyleDeclaration = originalStyle?.get?.call(this);\n      /* eslint-disable @typescript-eslint/no-this-alias */\n      const element = this;\n      /* eslint-enable @typescript-eslint/no-this-alias */\n      Object.defineProperty(styleObject, 'viewTransitionName', {\n        get() {\n          const styleAttribute = element.getAttribute('style') || '';\n          return getFromStyleAttribute(styleAttribute);\n        },\n        set(value: string) {\n          const styleAttribute = element.getAttribute('style') || '';\n          const attribute = setStyleAttribute(styleAttribute, value);\n          element.setAttribute('style', attribute);\n          return value;\n        },\n        configurable: true,\n      });\n      return styleObject;\n    },\n    configurable: true,\n  });\n}\n","import {\n  mapViewTransitionName,\n  mapStartViewTransition,\n  mapPolyfillViewTransitionAnimate,\n  mapToGetAnimations,\n} from './polyfill-functions';\n\nif (!document.startViewTransition) {\n  mapStartViewTransition();\n  mapPolyfillViewTransitionAnimate();\n  mapToGetAnimations();\n  mapViewTransitionName();\n}\n"]}