var echartsExampleTransformTs;echartsExampleTransformTs=(()=>{"use strict";var e={1713:(e,t,o)=>{o.r(t),o.d(t,{default:()=>a});var n="\n";const a=function(){function e(e){this.string=e;for(var t=[0],o=0;o<e.length;)switch(e[o]){case n:o+=n.length,t.push(o);break;case"\r":e[o+="\r".length]===n&&(o+=n.length),t.push(o);break;default:o++}this.offsets=t}return e.prototype.locationForIndex=function(e){if(e<0||e>this.string.length)return null;for(var t=0,o=this.offsets;o[t+1]<=e;)t++;return{line:t,column:e-o[t]}},e.prototype.indexForLocation=function(e){var t=e.line,o=e.column;return t<0||t>=this.offsets.length||o<0||o>this.lengthOfLine(t)?null:this.offsets[t]+o},e.prototype.lengthOfLine=function(e){var t=this.offsets[e];return(e===this.offsets.length-1?this.string.length:this.offsets[e+1])-t},e}()},1678:(e,t,o)=>{var n=o(7899),a=o(53),s=o(9609),r=o(8413);class i{__init(){this.nonTypeIdentifiers=new Set}__init2(){this.importInfoByPath=new Map}__init3(){this.importsToReplace=new Map}__init4(){this.identifierReplacements=new Map}__init5(){this.exportBindingsByLocalName=new Map}constructor(e,t,o,n,a,s){this.nameManager=e,this.tokens=t,this.enableLegacyTypeScriptModuleInterop=o,this.options=n,this.isTypeScriptTransformEnabled=a,this.helperManager=s,i.prototype.__init.call(this),i.prototype.__init2.call(this),i.prototype.__init3.call(this),i.prototype.__init4.call(this),i.prototype.__init5.call(this)}preprocessTokens(){for(let e=0;e<this.tokens.tokens.length;e++)this.tokens.matches1AtIndex(e,s.TokenType._import)&&!this.tokens.matches3AtIndex(e,s.TokenType._import,s.TokenType.name,s.TokenType.eq)&&this.preprocessImportAtIndex(e),this.tokens.matches1AtIndex(e,s.TokenType._export)&&!this.tokens.matches2AtIndex(e,s.TokenType._export,s.TokenType.eq)&&this.preprocessExportAtIndex(e);this.generateImportReplacements()}pruneTypeOnlyImports(){this.nonTypeIdentifiers=r.getNonTypeIdentifiers.call(void 0,this.tokens,this.options);for(const[e,t]of this.importInfoByPath.entries())t.hasBareImport||t.hasStarExport||t.exportStarNames.length>0||t.namedExports.length>0||[...t.defaultNames,...t.wildcardNames,...t.namedImports.map((({localName:e})=>e))].every((e=>this.isTypeName(e)))&&this.importsToReplace.set(e,"")}isTypeName(e){return this.isTypeScriptTransformEnabled&&!this.nonTypeIdentifiers.has(e)}generateImportReplacements(){for(const[e,t]of this.importInfoByPath.entries()){const{defaultNames:o,wildcardNames:n,namedImports:a,namedExports:s,exportStarNames:r,hasStarExport:i}=t;if(0===o.length&&0===n.length&&0===a.length&&0===s.length&&0===r.length&&!i){this.importsToReplace.set(e,`require('${e}');`);continue}const c=this.getFreeIdentifierForPath(e);let l;l=this.enableLegacyTypeScriptModuleInterop?c:n.length>0?n[0]:this.getFreeIdentifierForPath(e);let p=`var ${c} = require('${e}');`;if(n.length>0)for(const e of n)p+=` var ${e} = ${this.enableLegacyTypeScriptModuleInterop?c:`${this.helperManager.getHelperName("interopRequireWildcard")}(${c})`};`;else r.length>0&&l!==c?p+=` var ${l} = ${this.helperManager.getHelperName("interopRequireWildcard")}(${c});`:o.length>0&&l!==c&&(p+=` var ${l} = ${this.helperManager.getHelperName("interopRequireDefault")}(${c});`);for(const{importedName:e,localName:t}of s)p+=` ${this.helperManager.getHelperName("createNamedExportFrom")}(${c}, '${t}', '${e}');`;for(const e of r)p+=` exports.${e} = ${l};`;i&&(p+=` ${this.helperManager.getHelperName("createStarExport")}(${c});`),this.importsToReplace.set(e,p);for(const e of o)this.identifierReplacements.set(e,`${l}.default`);for(const{importedName:e,localName:t}of a)this.identifierReplacements.set(t,`${c}.${e}`)}}getFreeIdentifierForPath(e){const t=e.split("/"),o=t[t.length-1].replace(/\W/g,"");return this.nameManager.claimFreeName(`_${o}`)}preprocessImportAtIndex(e){const t=[],o=[];let n=[];if(e++,(this.tokens.matchesContextualAtIndex(e,a.ContextualKeyword._type)||this.tokens.matches1AtIndex(e,s.TokenType._typeof))&&!this.tokens.matches1AtIndex(e+1,s.TokenType.comma)&&!this.tokens.matchesContextualAtIndex(e+1,a.ContextualKeyword._from))return;if(this.tokens.matches1AtIndex(e,s.TokenType.parenL))return;if(this.tokens.matches1AtIndex(e,s.TokenType.name)&&(t.push(this.tokens.identifierNameAtIndex(e)),e++,this.tokens.matches1AtIndex(e,s.TokenType.comma)&&e++),this.tokens.matches1AtIndex(e,s.TokenType.star)&&(e+=2,o.push(this.tokens.identifierNameAtIndex(e)),e++),this.tokens.matches1AtIndex(e,s.TokenType.braceL)&&(e++,({newIndex:e,namedImports:n}=this.getNamedImports(e))),this.tokens.matchesContextualAtIndex(e,a.ContextualKeyword._from)&&e++,!this.tokens.matches1AtIndex(e,s.TokenType.string))throw new Error("Expected string token at the end of import statement.");const r=this.tokens.stringValueAtIndex(e),i=this.getImportInfo(r);i.defaultNames.push(...t),i.wildcardNames.push(...o),i.namedImports.push(...n),0===t.length&&0===o.length&&0===n.length&&(i.hasBareImport=!0)}preprocessExportAtIndex(e){if(this.tokens.matches2AtIndex(e,s.TokenType._export,s.TokenType._var)||this.tokens.matches2AtIndex(e,s.TokenType._export,s.TokenType._let)||this.tokens.matches2AtIndex(e,s.TokenType._export,s.TokenType._const))this.preprocessVarExportAtIndex(e);else if(this.tokens.matches2AtIndex(e,s.TokenType._export,s.TokenType._function)||this.tokens.matches2AtIndex(e,s.TokenType._export,s.TokenType._class)){const t=this.tokens.identifierNameAtIndex(e+2);this.addExportBinding(t,t)}else if(this.tokens.matches3AtIndex(e,s.TokenType._export,s.TokenType.name,s.TokenType._function)){const t=this.tokens.identifierNameAtIndex(e+3);this.addExportBinding(t,t)}else this.tokens.matches2AtIndex(e,s.TokenType._export,s.TokenType.braceL)?this.preprocessNamedExportAtIndex(e):this.tokens.matches2AtIndex(e,s.TokenType._export,s.TokenType.star)&&this.preprocessExportStarAtIndex(e)}preprocessVarExportAtIndex(e){let t=0;for(let o=e+2;;o++)if(this.tokens.matches1AtIndex(o,s.TokenType.braceL)||this.tokens.matches1AtIndex(o,s.TokenType.dollarBraceL)||this.tokens.matches1AtIndex(o,s.TokenType.bracketL))t++;else if(this.tokens.matches1AtIndex(o,s.TokenType.braceR)||this.tokens.matches1AtIndex(o,s.TokenType.bracketR))t--;else{if(0===t&&!this.tokens.matches1AtIndex(o,s.TokenType.name))break;if(this.tokens.matches1AtIndex(1,s.TokenType.eq)){const e=this.tokens.currentToken().rhsEndIndex;if(null==e)throw new Error("Expected = token with an end index.");o=e-1}else{const e=this.tokens.tokens[o];if(n.isDeclaration.call(void 0,e)){const e=this.tokens.identifierNameAtIndex(o);this.identifierReplacements.set(e,`exports.${e}`)}}}}preprocessNamedExportAtIndex(e){e+=2;const{newIndex:t,namedImports:o}=this.getNamedImports(e);if(e=t,!this.tokens.matchesContextualAtIndex(e,a.ContextualKeyword._from)){for(const{importedName:e,localName:t}of o)this.addExportBinding(e,t);return}if(e++,!this.tokens.matches1AtIndex(e,s.TokenType.string))throw new Error("Expected string token at the end of import statement.");const n=this.tokens.stringValueAtIndex(e);this.getImportInfo(n).namedExports.push(...o)}preprocessExportStarAtIndex(e){let t=null;if(this.tokens.matches3AtIndex(e,s.TokenType._export,s.TokenType.star,s.TokenType._as)?(e+=3,t=this.tokens.identifierNameAtIndex(e),e+=2):e+=3,!this.tokens.matches1AtIndex(e,s.TokenType.string))throw new Error("Expected string token at the end of star export statement.");const o=this.tokens.stringValueAtIndex(e),n=this.getImportInfo(o);null!==t?n.exportStarNames.push(t):n.hasStarExport=!0}getNamedImports(e){const t=[];for(;;){if(this.tokens.matches1AtIndex(e,s.TokenType.braceR)){e++;break}let o=!1;(this.tokens.matchesContextualAtIndex(e,a.ContextualKeyword._type)||this.tokens.matches1AtIndex(e,s.TokenType._typeof))&&this.tokens.matches1AtIndex(e+1,s.TokenType.name)&&!this.tokens.matchesContextualAtIndex(e+1,a.ContextualKeyword._as)&&(o=!0,e++);const n=this.tokens.identifierNameAtIndex(e);let r;if(e++,this.tokens.matchesContextualAtIndex(e,a.ContextualKeyword._as)?(e++,r=this.tokens.identifierNameAtIndex(e),e++):r=n,o||t.push({importedName:n,localName:r}),this.tokens.matches2AtIndex(e,s.TokenType.comma,s.TokenType.braceR)){e+=2;break}if(this.tokens.matches1AtIndex(e,s.TokenType.braceR)){e++;break}if(!this.tokens.matches1AtIndex(e,s.TokenType.comma))throw new Error(`Unexpected token: ${JSON.stringify(this.tokens.tokens[e])}`);e++}return{newIndex:e,namedImports:t}}getImportInfo(e){const t=this.importInfoByPath.get(e);if(t)return t;const o={defaultNames:[],wildcardNames:[],namedImports:[],namedExports:[],hasBareImport:!1,exportStarNames:[],hasStarExport:!1};return this.importInfoByPath.set(e,o),o}addExportBinding(e,t){this.exportBindingsByLocalName.has(e)||this.exportBindingsByLocalName.set(e,[]),this.exportBindingsByLocalName.get(e).push(t)}claimImportCode(e){const t=this.importsToReplace.get(e);return this.importsToReplace.set(e,""),t||""}getIdentifierReplacement(e){return this.identifierReplacements.get(e)||null}resolveExportBinding(e){const t=this.exportBindingsByLocalName.get(e);return t&&0!==t.length?t.map((e=>`exports.${e}`)).join(" = "):null}getGlobalNames(){return new Set([...this.identifierReplacements.keys(),...this.exportBindingsByLocalName.keys()])}}t.Z=i},5586:(e,t)=>{const o={interopRequireWildcard:"\n    function interopRequireWildcard(obj) {\n      if (obj && obj.__esModule) {\n        return obj;\n      } else {\n        var newObj = {};\n        if (obj != null) {\n          for (var key in obj) {\n            if (Object.prototype.hasOwnProperty.call(obj, key)) {\n              newObj[key] = obj[key];\n            }\n          }\n        }\n        newObj.default = obj;\n        return newObj;\n      }\n    }\n  ",interopRequireDefault:"\n    function interopRequireDefault(obj) {\n      return obj && obj.__esModule ? obj : { default: obj };\n    }\n  ",createNamedExportFrom:"\n    function createNamedExportFrom(obj, localName, importedName) {\n      Object.defineProperty(exports, localName, {enumerable: true, get: () => obj[importedName]});\n    }\n  ",createStarExport:'\n    function createStarExport(obj) {\n      Object.keys(obj)\n        .filter((key) => key !== "default" && key !== "__esModule")\n        .forEach((key) => {\n          if (exports.hasOwnProperty(key)) {\n            return;\n          }\n          Object.defineProperty(exports, key, {enumerable: true, get: () => obj[key]});\n        });\n    }\n  ',nullishCoalesce:"\n    function nullishCoalesce(lhs, rhsFn) {\n      if (lhs != null) {\n        return lhs;\n      } else {\n        return rhsFn();\n      }\n    }\n  ",asyncNullishCoalesce:"\n    async function asyncNullishCoalesce(lhs, rhsFn) {\n      if (lhs != null) {\n        return lhs;\n      } else {\n        return await rhsFn();\n      }\n    }\n  ",optionalChain:"\n    function optionalChain(ops) {\n      let lastAccessLHS = undefined;\n      let value = ops[0];\n      let i = 1;\n      while (i < ops.length) {\n        const op = ops[i];\n        const fn = ops[i + 1];\n        i += 2;\n        if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) {\n          return undefined;\n        }\n        if (op === 'access' || op === 'optionalAccess') {\n          lastAccessLHS = value;\n          value = fn(value);\n        } else if (op === 'call' || op === 'optionalCall') {\n          value = fn((...args) => value.call(lastAccessLHS, ...args));\n          lastAccessLHS = undefined;\n        }\n      }\n      return value;\n    }\n  ",asyncOptionalChain:"\n    async function asyncOptionalChain(ops) {\n      let lastAccessLHS = undefined;\n      let value = ops[0];\n      let i = 1;\n      while (i < ops.length) {\n        const op = ops[i];\n        const fn = ops[i + 1];\n        i += 2;\n        if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) {\n          return undefined;\n        }\n        if (op === 'access' || op === 'optionalAccess') {\n          lastAccessLHS = value;\n          value = await fn(value);\n        } else if (op === 'call' || op === 'optionalCall') {\n          value = await fn((...args) => value.call(lastAccessLHS, ...args));\n          lastAccessLHS = undefined;\n        }\n      }\n      return value;\n    }\n  ",optionalChainDelete:"\n    function optionalChainDelete(ops) {\n      const result = OPTIONAL_CHAIN_NAME(ops);\n      return result == null ? true : result;\n    }\n  ",asyncOptionalChainDelete:"\n    async function asyncOptionalChainDelete(ops) {\n      const result = await ASYNC_OPTIONAL_CHAIN_NAME(ops);\n      return result == null ? true : result;\n    }\n  "};class n{__init(){this.helperNames={}}constructor(e){this.nameManager=e,n.prototype.__init.call(this)}getHelperName(e){let t=this.helperNames[e];return t||(t=this.nameManager.claimFreeName(`_${e}`),this.helperNames[e]=t,t)}emitHelpers(){let e="";this.helperNames.optionalChainDelete&&this.getHelperName("optionalChain"),this.helperNames.asyncOptionalChainDelete&&this.getHelperName("asyncOptionalChain");for(const[t,n]of Object.entries(o)){const o=this.helperNames[t];let a=n;"optionalChainDelete"===t?a=a.replace("OPTIONAL_CHAIN_NAME",this.helperNames.optionalChain):"asyncOptionalChainDelete"===t&&(a=a.replace("ASYNC_OPTIONAL_CHAIN_NAME",this.helperNames.asyncOptionalChain)),o&&(e+=" ",e+=a.replace(t,o).replace(/\s+/g," ").trim())}return e}}t.b=n},4015:(e,t,o)=>{var n,a=(n=o(9343))&&n.__esModule?n:{default:n};class s{__init(){this.usedNames=new Set}constructor(e,t){s.prototype.__init.call(this),this.usedNames=new Set(a.default.call(void 0,e,t))}claimFreeName(e){const t=this.findFreeName(e);return this.usedNames.add(t),t}findFreeName(e){if(!this.usedNames.has(e))return e;let t=2;for(;this.usedNames.has(e+t);)t++;return e+t}}t.Z=s},2471:(e,t,o)=>{Object.defineProperty(t,"__esModule",{value:!0});var n=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t.default=e,t}(o(1074));const a=n.union(n.lit("jsx"),n.lit("typescript"),n.lit("flow"),n.lit("imports"),n.lit("react-hot-loader"));t.Transform=a;const s=n.iface([],{compiledFilename:"string"});t.SourceMapOptions=s;const r=n.iface([],{transforms:n.array("Transform"),jsxPragma:n.opt("string"),jsxFragmentPragma:n.opt("string"),enableLegacyTypeScriptModuleInterop:n.opt("boolean"),enableLegacyBabel5ModuleInterop:n.opt("boolean"),sourceMapOptions:n.opt("SourceMapOptions"),filePath:n.opt("string"),production:n.opt("boolean")});t.Options=r;const i={Transform:t.Transform,SourceMapOptions:t.SourceMapOptions,Options:t.Options};t.default=i},1476:(e,t,o)=>{var n,a=o(1074),s=(n=o(2471))&&n.__esModule?n:{default:n};const{Options:r}=a.createCheckers.call(void 0,s.default);t.n=function(e){r.strictCheck(e)}},3637:(e,t,o)=>{var n,a=o(9609),s=(n=o(2082))&&n.__esModule?n:{default:n};class r{__init(){this.resultCode=""}__init2(){this.tokenIndex=0}constructor(e,t,o,n){this.code=e,this.tokens=t,this.isFlowEnabled=o,this.helperManager=n,r.prototype.__init.call(this),r.prototype.__init2.call(this)}snapshot(){return{resultCode:this.resultCode,tokenIndex:this.tokenIndex}}restoreToSnapshot(e){this.resultCode=e.resultCode,this.tokenIndex=e.tokenIndex}getResultCodeIndex(){return this.resultCode.length}reset(){this.resultCode="",this.tokenIndex=0}matchesContextualAtIndex(e,t){return this.matches1AtIndex(e,a.TokenType.name)&&this.tokens[e].contextualKeyword===t}identifierNameAtIndex(e){return this.identifierNameForToken(this.tokens[e])}identifierName(){return this.identifierNameForToken(this.currentToken())}identifierNameForToken(e){return this.code.slice(e.start,e.end)}rawCodeForToken(e){return this.code.slice(e.start,e.end)}stringValueAtIndex(e){return this.stringValueForToken(this.tokens[e])}stringValue(){return this.stringValueForToken(this.currentToken())}stringValueForToken(e){return this.code.slice(e.start+1,e.end-1)}matches1AtIndex(e,t){return this.tokens[e].type===t}matches2AtIndex(e,t,o){return this.tokens[e].type===t&&this.tokens[e+1].type===o}matches3AtIndex(e,t,o,n){return this.tokens[e].type===t&&this.tokens[e+1].type===o&&this.tokens[e+2].type===n}matches1(e){return this.tokens[this.tokenIndex].type===e}matches2(e,t){return this.tokens[this.tokenIndex].type===e&&this.tokens[this.tokenIndex+1].type===t}matches3(e,t,o){return this.tokens[this.tokenIndex].type===e&&this.tokens[this.tokenIndex+1].type===t&&this.tokens[this.tokenIndex+2].type===o}matches4(e,t,o,n){return this.tokens[this.tokenIndex].type===e&&this.tokens[this.tokenIndex+1].type===t&&this.tokens[this.tokenIndex+2].type===o&&this.tokens[this.tokenIndex+3].type===n}matches5(e,t,o,n,a){return this.tokens[this.tokenIndex].type===e&&this.tokens[this.tokenIndex+1].type===t&&this.tokens[this.tokenIndex+2].type===o&&this.tokens[this.tokenIndex+3].type===n&&this.tokens[this.tokenIndex+4].type===a}matchesContextual(e){return this.matchesContextualAtIndex(this.tokenIndex,e)}matchesContextIdAndLabel(e,t){return this.matches1(e)&&this.currentToken().contextId===t}previousWhitespaceAndComments(){let e=this.code.slice(this.tokenIndex>0?this.tokens[this.tokenIndex-1].end:0,this.tokenIndex<this.tokens.length?this.tokens[this.tokenIndex].start:this.code.length);return this.isFlowEnabled&&(e=e.replace(/@flow/g,"")),e}replaceToken(e){this.resultCode+=this.previousWhitespaceAndComments(),this.appendTokenPrefix(),this.resultCode+=e,this.appendTokenSuffix(),this.tokenIndex++}replaceTokenTrimmingLeftWhitespace(e){this.resultCode+=this.previousWhitespaceAndComments().replace(/[^\r\n]/g,""),this.appendTokenPrefix(),this.resultCode+=e,this.appendTokenSuffix(),this.tokenIndex++}removeInitialToken(){this.replaceToken("")}removeToken(){this.replaceTokenTrimmingLeftWhitespace("")}copyExpectedToken(e){if(this.tokens[this.tokenIndex].type!==e)throw new Error(`Expected token ${e}`);this.copyToken()}copyToken(){this.resultCode+=this.previousWhitespaceAndComments(),this.appendTokenPrefix(),this.resultCode+=this.code.slice(this.tokens[this.tokenIndex].start,this.tokens[this.tokenIndex].end),this.appendTokenSuffix(),this.tokenIndex++}copyTokenWithPrefix(e){this.resultCode+=this.previousWhitespaceAndComments(),this.appendTokenPrefix(),this.resultCode+=e,this.resultCode+=this.code.slice(this.tokens[this.tokenIndex].start,this.tokens[this.tokenIndex].end),this.appendTokenSuffix(),this.tokenIndex++}appendTokenPrefix(){const e=this.currentToken();if((e.numNullishCoalesceStarts||e.isOptionalChainStart)&&(e.isAsyncOperation=s.default.call(void 0,this)),e.numNullishCoalesceStarts)for(let t=0;t<e.numNullishCoalesceStarts;t++)e.isAsyncOperation?(this.resultCode+="await ",this.resultCode+=this.helperManager.getHelperName("asyncNullishCoalesce")):this.resultCode+=this.helperManager.getHelperName("nullishCoalesce"),this.resultCode+="(";e.isOptionalChainStart&&(e.isAsyncOperation&&(this.resultCode+="await "),this.tokenIndex>0&&this.tokenAtRelativeIndex(-1).type===a.TokenType._delete?e.isAsyncOperation?this.resultCode+=this.helperManager.getHelperName("asyncOptionalChainDelete"):this.resultCode+=this.helperManager.getHelperName("optionalChainDelete"):e.isAsyncOperation?this.resultCode+=this.helperManager.getHelperName("asyncOptionalChain"):this.resultCode+=this.helperManager.getHelperName("optionalChain"),this.resultCode+="([")}appendTokenSuffix(){const e=this.currentToken();if(e.isOptionalChainEnd&&(this.resultCode+="])"),e.numNullishCoalesceEnds)for(let t=0;t<e.numNullishCoalesceEnds;t++)this.resultCode+="))"}appendCode(e){this.resultCode+=e}currentToken(){return this.tokens[this.tokenIndex]}currentTokenCode(){const e=this.currentToken();return this.code.slice(e.start,e.end)}tokenAtRelativeIndex(e){return this.tokens[this.tokenIndex+e]}currentIndex(){return this.tokenIndex}nextToken(){if(this.tokenIndex===this.tokens.length)throw new Error("Unexpectedly reached end of input.");this.tokenIndex++}previousToken(){this.tokenIndex--}finish(){if(this.tokenIndex!==this.tokens.length)throw new Error("Tried to finish processing tokens before reaching the end.");return this.resultCode+=this.previousWhitespaceAndComments(),this.resultCode}isAtEnd(){return this.tokenIndex===this.tokens.length}}t.Z=r},7629:(e,t,o)=>{var n=o(5920);t.Z=function(e,t,{compiledFilename:o}){let a="AAAA";for(let t=0;t<e.length;t++)e.charCodeAt(t)===n.charCodes.lineFeed&&(a+=";AACA");return{version:3,file:o||"",sources:[t],mappings:a,names:[]}}},4636:(e,t,o)=>{var n=o(7899),a=o(9609);function s(e,t,o){for(let n=e.startTokenIndex;n<e.endTokenIndex;n++){const e=t.tokens[n];e.type===a.TokenType.name&&t.identifierNameForToken(e)===o&&(e.shadowsGlobal=!0)}}t.ZP=function(e,t,o){(function(e,t){for(const o of e.tokens)if(o.type===a.TokenType.name&&n.isNonTopLevelDeclaration.call(void 0,o)&&t.has(e.identifierNameForToken(o)))return!0;return!1})(e,o)&&function(e,t,o){const r=[];let i=t.length-1;for(let c=e.tokens.length-1;;c--){for(;r.length>0&&r[r.length-1].startTokenIndex===c+1;)r.pop();for(;i>=0&&t[i].endTokenIndex===c+1;)r.push(t[i]),i--;if(c<0)break;const l=e.tokens[c],p=e.identifierNameForToken(l);if(r.length>1&&l.type===a.TokenType.name&&o.has(p))if(n.isBlockScopedDeclaration.call(void 0,l))s(r[r.length-1],e,p);else if(n.isFunctionScopedDeclaration.call(void 0,l)){let t=r.length-1;for(;t>0&&!r[t].isFunctionScope;)t--;if(t<0)throw new Error("Did not find parent function scope.");s(r[t],e,p)}}if(r.length>0)throw new Error("Expected empty scope stack after processing file.")}(e,t,o)}},4825:(e,t,o)=>{Object.defineProperty(t,"__esModule",{value:!0});var n=o(6251),a=o(6416);t.File=class{constructor(e,t){this.tokens=e,this.scopes=t}},t.parse=function(e,t,o,s){if(s&&o)throw new Error("Cannot combine flow and typescript plugins.");n.initParser.call(void 0,e,t,o,s);const r=a.parseFile.call(void 0);if(n.state.error)throw n.augmentError.call(void 0,n.state.error);return r}},905:(e,t,o)=>{Object.defineProperty(t,"__esModule",{value:!0});var n=o(7899),a=o(53),s=o(9609),r=o(6251),i=o(2276),c=o(7233),l=o(799);function p(e){const t=n.pushTypeContext.call(void 0,0);l.expect.call(void 0,e||s.TokenType.colon),L(),n.popTypeContext.call(void 0,t)}function d(){l.expect.call(void 0,s.TokenType.modulo),l.expectContextual.call(void 0,a.ContextualKeyword._checks),n.eat.call(void 0,s.TokenType.parenL)&&(i.parseExpression.call(void 0),l.expect.call(void 0,s.TokenType.parenR))}function T(){const e=n.pushTypeContext.call(void 0,0);l.expect.call(void 0,s.TokenType.colon),n.match.call(void 0,s.TokenType.modulo)?d():(L(),n.match.call(void 0,s.TokenType.modulo)&&d()),n.popTypeContext.call(void 0,e)}function h(){n.match.call(void 0,s.TokenType._class)?(n.next.call(void 0),u(!0)):n.match.call(void 0,s.TokenType._function)?(n.next.call(void 0),i.parseIdentifier.call(void 0),n.match.call(void 0,s.TokenType.lessThan)&&x(),l.expect.call(void 0,s.TokenType.parenL),S(),l.expect.call(void 0,s.TokenType.parenR),T(),l.semicolon.call(void 0)):n.match.call(void 0,s.TokenType._var)?(n.next.call(void 0),D(),l.semicolon.call(void 0)):l.eatContextual.call(void 0,a.ContextualKeyword._module)?n.eat.call(void 0,s.TokenType.dot)?(l.expectContextual.call(void 0,a.ContextualKeyword._exports),O(),l.semicolon.call(void 0)):function(){for(n.match.call(void 0,s.TokenType.string)?i.parseExprAtom.call(void 0):i.parseIdentifier.call(void 0),l.expect.call(void 0,s.TokenType.braceL);!n.match.call(void 0,s.TokenType.braceR)&&!r.state.error;)n.match.call(void 0,s.TokenType._import)?(n.next.call(void 0),c.parseImport.call(void 0)):l.unexpected.call(void 0);l.expect.call(void 0,s.TokenType.braceR)}():l.isContextual.call(void 0,a.ContextualKeyword._type)?(n.next.call(void 0),m()):l.isContextual.call(void 0,a.ContextualKeyword._opaque)?(n.next.call(void 0),v(!0)):l.isContextual.call(void 0,a.ContextualKeyword._interface)?(n.next.call(void 0),u()):n.match.call(void 0,s.TokenType._export)?(l.expect.call(void 0,s.TokenType._export),n.eat.call(void 0,s.TokenType._default)?n.match.call(void 0,s.TokenType._function)||n.match.call(void 0,s.TokenType._class)?h():(L(),l.semicolon.call(void 0)):n.match.call(void 0,s.TokenType._var)||n.match.call(void 0,s.TokenType._function)||n.match.call(void 0,s.TokenType._class)||l.isContextual.call(void 0,a.ContextualKeyword._opaque)?h():n.match.call(void 0,s.TokenType.star)||n.match.call(void 0,s.TokenType.braceL)||l.isContextual.call(void 0,a.ContextualKeyword._interface)||l.isContextual.call(void 0,a.ContextualKeyword._type)||l.isContextual.call(void 0,a.ContextualKeyword._opaque)?c.parseExport.call(void 0):l.unexpected.call(void 0)):l.unexpected.call(void 0)}function u(e=!1){if(f(),n.match.call(void 0,s.TokenType.lessThan)&&x(),n.eat.call(void 0,s.TokenType._extends))do{k()}while(!e&&n.eat.call(void 0,s.TokenType.comma));if(l.isContextual.call(void 0,a.ContextualKeyword._mixins)){n.next.call(void 0);do{k()}while(n.eat.call(void 0,s.TokenType.comma))}if(l.isContextual.call(void 0,a.ContextualKeyword._implements)){n.next.call(void 0);do{k()}while(n.eat.call(void 0,s.TokenType.comma))}b(e,!1,e)}function k(){I(!1),n.match.call(void 0,s.TokenType.lessThan)&&_()}function y(){u()}function f(){i.parseIdentifier.call(void 0)}function m(){f(),n.match.call(void 0,s.TokenType.lessThan)&&x(),p(s.TokenType.eq),l.semicolon.call(void 0)}function v(e){l.expectContextual.call(void 0,a.ContextualKeyword._type),f(),n.match.call(void 0,s.TokenType.lessThan)&&x(),n.match.call(void 0,s.TokenType.colon)&&p(s.TokenType.colon),e||p(s.TokenType.eq),l.semicolon.call(void 0)}function x(){const e=n.pushTypeContext.call(void 0,0);n.match.call(void 0,s.TokenType.lessThan)||n.match.call(void 0,s.TokenType.typeParameterStart)?n.next.call(void 0):l.unexpected.call(void 0);do{K(),D(),n.eat.call(void 0,s.TokenType.eq)&&L(),n.match.call(void 0,s.TokenType.greaterThan)||l.expect.call(void 0,s.TokenType.comma)}while(!n.match.call(void 0,s.TokenType.greaterThan)&&!r.state.error);l.expect.call(void 0,s.TokenType.greaterThan),n.popTypeContext.call(void 0,e)}function _(){const e=n.pushTypeContext.call(void 0,0);for(l.expect.call(void 0,s.TokenType.lessThan);!n.match.call(void 0,s.TokenType.greaterThan)&&!r.state.error;)L(),n.match.call(void 0,s.TokenType.greaterThan)||l.expect.call(void 0,s.TokenType.comma);l.expect.call(void 0,s.TokenType.greaterThan),n.popTypeContext.call(void 0,e)}function C(){n.match.call(void 0,s.TokenType.num)||n.match.call(void 0,s.TokenType.string)?i.parseExprAtom.call(void 0):i.parseIdentifier.call(void 0)}function g(){for(n.match.call(void 0,s.TokenType.lessThan)&&x(),l.expect.call(void 0,s.TokenType.parenL);!n.match.call(void 0,s.TokenType.parenR)&&!n.match.call(void 0,s.TokenType.ellipsis)&&!r.state.error;)E(),n.match.call(void 0,s.TokenType.parenR)||l.expect.call(void 0,s.TokenType.comma);n.eat.call(void 0,s.TokenType.ellipsis)&&E(),l.expect.call(void 0,s.TokenType.parenR),p()}function b(e,t,o){let i;for(t&&n.match.call(void 0,s.TokenType.braceBarL)?(l.expect.call(void 0,s.TokenType.braceBarL),i=s.TokenType.braceBarR):(l.expect.call(void 0,s.TokenType.braceL),i=s.TokenType.braceR);!n.match.call(void 0,i)&&!r.state.error;){if(o&&l.isContextual.call(void 0,a.ContextualKeyword._proto)){const t=n.lookaheadType.call(void 0);t!==s.TokenType.colon&&t!==s.TokenType.question&&(n.next.call(void 0),e=!1)}if(e&&l.isContextual.call(void 0,a.ContextualKeyword._static)){const e=n.lookaheadType.call(void 0);e!==s.TokenType.colon&&e!==s.TokenType.question&&n.next.call(void 0)}if(K(),n.eat.call(void 0,s.TokenType.bracketL))n.eat.call(void 0,s.TokenType.bracketL)?(C(),l.expect.call(void 0,s.TokenType.bracketR),l.expect.call(void 0,s.TokenType.bracketR),n.match.call(void 0,s.TokenType.lessThan)||n.match.call(void 0,s.TokenType.parenL)?g():(n.eat.call(void 0,s.TokenType.question),p())):(n.lookaheadType.call(void 0)===s.TokenType.colon?(C(),p()):L(),l.expect.call(void 0,s.TokenType.bracketR),p());else if(n.match.call(void 0,s.TokenType.parenL)||n.match.call(void 0,s.TokenType.lessThan))g();else{if(l.isContextual.call(void 0,a.ContextualKeyword._get)||l.isContextual.call(void 0,a.ContextualKeyword._set)){const e=n.lookaheadType.call(void 0);e!==s.TokenType.name&&e!==s.TokenType.string&&e!==s.TokenType.num||n.next.call(void 0)}w()}n.eat.call(void 0,s.TokenType.semi)||n.eat.call(void 0,s.TokenType.comma)||n.match.call(void 0,s.TokenType.braceR)||n.match.call(void 0,s.TokenType.braceBarR)||l.unexpected.call(void 0)}l.expect.call(void 0,i)}function w(){if(n.match.call(void 0,s.TokenType.ellipsis)){if(l.expect.call(void 0,s.TokenType.ellipsis),n.eat.call(void 0,s.TokenType.comma)||n.eat.call(void 0,s.TokenType.semi),n.match.call(void 0,s.TokenType.braceR))return;L()}else C(),n.match.call(void 0,s.TokenType.lessThan)||n.match.call(void 0,s.TokenType.parenL)?g():(n.eat.call(void 0,s.TokenType.question),p())}function I(e){for(e||i.parseIdentifier.call(void 0);n.eat.call(void 0,s.TokenType.dot);)i.parseIdentifier.call(void 0)}function E(){const e=n.lookaheadType.call(void 0);e===s.TokenType.colon||e===s.TokenType.question?(i.parseIdentifier.call(void 0),n.eat.call(void 0,s.TokenType.question),p()):L()}function S(){for(;!n.match.call(void 0,s.TokenType.parenR)&&!n.match.call(void 0,s.TokenType.ellipsis)&&!r.state.error;)E(),n.match.call(void 0,s.TokenType.parenR)||l.expect.call(void 0,s.TokenType.comma);n.eat.call(void 0,s.TokenType.ellipsis)&&E()}function A(){let e=!1;const t=r.state.noAnonFunctionType;switch(r.state.type){case s.TokenType.name:return l.isContextual.call(void 0,a.ContextualKeyword._interface)?void function(){if(l.expectContextual.call(void 0,a.ContextualKeyword._interface),n.eat.call(void 0,s.TokenType._extends))do{k()}while(n.eat.call(void 0,s.TokenType.comma));b(!1,!1,!1)}():(i.parseIdentifier.call(void 0),I(!0),void(n.match.call(void 0,s.TokenType.lessThan)&&_()));case s.TokenType.braceL:return void b(!1,!1,!1);case s.TokenType.braceBarL:return void b(!1,!0,!1);case s.TokenType.bracketL:return void function(){for(l.expect.call(void 0,s.TokenType.bracketL);r.state.pos<r.input.length&&!n.match.call(void 0,s.TokenType.bracketR)&&(L(),!n.match.call(void 0,s.TokenType.bracketR));)l.expect.call(void 0,s.TokenType.comma);l.expect.call(void 0,s.TokenType.bracketR)}();case s.TokenType.lessThan:return x(),l.expect.call(void 0,s.TokenType.parenL),S(),l.expect.call(void 0,s.TokenType.parenR),l.expect.call(void 0,s.TokenType.arrow),void L();case s.TokenType.parenL:if(n.next.call(void 0),!n.match.call(void 0,s.TokenType.parenR)&&!n.match.call(void 0,s.TokenType.ellipsis))if(n.match.call(void 0,s.TokenType.name)){const t=n.lookaheadType.call(void 0);e=t!==s.TokenType.question&&t!==s.TokenType.colon}else e=!0;if(e){if(r.state.noAnonFunctionType=!1,L(),r.state.noAnonFunctionType=t,r.state.noAnonFunctionType||!(n.match.call(void 0,s.TokenType.comma)||n.match.call(void 0,s.TokenType.parenR)&&n.lookaheadType.call(void 0)===s.TokenType.arrow))return void l.expect.call(void 0,s.TokenType.parenR);n.eat.call(void 0,s.TokenType.comma)}return S(),l.expect.call(void 0,s.TokenType.parenR),l.expect.call(void 0,s.TokenType.arrow),void L();case s.TokenType.minus:return n.next.call(void 0),void i.parseLiteral.call(void 0);case s.TokenType.string:case s.TokenType.num:case s.TokenType._true:case s.TokenType._false:case s.TokenType._null:case s.TokenType._this:case s.TokenType._void:case s.TokenType.star:return void n.next.call(void 0);default:if(r.state.type===s.TokenType._typeof)return l.expect.call(void 0,s.TokenType._typeof),void A();if(r.state.type&s.TokenType.IS_KEYWORD)return n.next.call(void 0),void(r.state.tokens[r.state.tokens.length-1].type=s.TokenType.name)}l.unexpected.call(void 0)}function P(){n.eat.call(void 0,s.TokenType.question)?P():function(){for(A();!l.canInsertSemicolon.call(void 0)&&n.match.call(void 0,s.TokenType.bracketL);)l.expect.call(void 0,s.TokenType.bracketL),l.expect.call(void 0,s.TokenType.bracketR)}()}function N(){P(),!r.state.noAnonFunctionType&&n.eat.call(void 0,s.TokenType.arrow)&&L()}function R(){for(n.eat.call(void 0,s.TokenType.bitwiseAND),N();n.eat.call(void 0,s.TokenType.bitwiseAND);)N()}function L(){!function(){for(n.eat.call(void 0,s.TokenType.bitwiseOR),R();n.eat.call(void 0,s.TokenType.bitwiseOR);)R()}()}function O(){p()}function D(){i.parseIdentifier.call(void 0),n.match.call(void 0,s.TokenType.colon)&&O()}function K(){(n.match.call(void 0,s.TokenType.plus)||n.match.call(void 0,s.TokenType.minus))&&n.next.call(void 0)}t.flowParseTypeParameterDeclaration=x,t.flowParseTypeAnnotation=O,t.flowParseVariance=K,t.flowParseFunctionBodyAndFinish=function(e){n.match.call(void 0,s.TokenType.colon)&&T(),i.parseFunctionBody.call(void 0,!1,e)},t.flowParseSubscript=function(e,t,o){if(n.match.call(void 0,s.TokenType.questionDot)&&n.lookaheadType.call(void 0)===s.TokenType.lessThan)return t?void(o.stop=!0):(n.next.call(void 0),_(),l.expect.call(void 0,s.TokenType.parenL),void i.parseCallExpressionArguments.call(void 0));if(!t&&n.match.call(void 0,s.TokenType.lessThan)){const e=r.state.snapshot();if(_(),l.expect.call(void 0,s.TokenType.parenL),i.parseCallExpressionArguments.call(void 0),!r.state.error)return;r.state.restoreFromSnapshot(e)}i.baseParseSubscript.call(void 0,e,t,o)},t.flowStartParseNewArguments=function(){if(n.match.call(void 0,s.TokenType.lessThan)){const e=r.state.snapshot();_(),r.state.error&&r.state.restoreFromSnapshot(e)}},t.flowTryParseStatement=function(){if(n.match.call(void 0,s.TokenType.name)&&r.state.contextualKeyword===a.ContextualKeyword._interface){const e=n.pushTypeContext.call(void 0,0);return n.next.call(void 0),y(),n.popTypeContext.call(void 0,e),!0}return!1},t.flowParseIdentifierStatement=function(e){if(e===a.ContextualKeyword._declare){if(n.match.call(void 0,s.TokenType._class)||n.match.call(void 0,s.TokenType.name)||n.match.call(void 0,s.TokenType._function)||n.match.call(void 0,s.TokenType._var)||n.match.call(void 0,s.TokenType._export)){const e=n.pushTypeContext.call(void 0,1);h(),n.popTypeContext.call(void 0,e)}}else if(n.match.call(void 0,s.TokenType.name))if(e===a.ContextualKeyword._interface){const e=n.pushTypeContext.call(void 0,1);y(),n.popTypeContext.call(void 0,e)}else if(e===a.ContextualKeyword._type){const e=n.pushTypeContext.call(void 0,1);m(),n.popTypeContext.call(void 0,e)}else if(e===a.ContextualKeyword._opaque){const e=n.pushTypeContext.call(void 0,1);v(!1),n.popTypeContext.call(void 0,e)}l.semicolon.call(void 0)},t.flowShouldParseExportDeclaration=function(){return l.isContextual.call(void 0,a.ContextualKeyword._type)||l.isContextual.call(void 0,a.ContextualKeyword._interface)||l.isContextual.call(void 0,a.ContextualKeyword._opaque)},t.flowShouldDisallowExportDefaultSpecifier=function(){return n.match.call(void 0,s.TokenType.name)&&(r.state.contextualKeyword===a.ContextualKeyword._type||r.state.contextualKeyword===a.ContextualKeyword._interface||r.state.contextualKeyword===a.ContextualKeyword._opaque)},t.flowParseExportDeclaration=function(){if(l.isContextual.call(void 0,a.ContextualKeyword._type)){const e=n.pushTypeContext.call(void 0,1);n.next.call(void 0),n.match.call(void 0,s.TokenType.braceL)?(c.parseExportSpecifiers.call(void 0),c.parseExportFrom.call(void 0)):m(),n.popTypeContext.call(void 0,e)}else if(l.isContextual.call(void 0,a.ContextualKeyword._opaque)){const e=n.pushTypeContext.call(void 0,1);n.next.call(void 0),v(!1),n.popTypeContext.call(void 0,e)}else if(l.isContextual.call(void 0,a.ContextualKeyword._interface)){const e=n.pushTypeContext.call(void 0,1);n.next.call(void 0),y(),n.popTypeContext.call(void 0,e)}else c.parseStatement.call(void 0,!0)},t.flowShouldParseExportStar=function(){return n.match.call(void 0,s.TokenType.star)||l.isContextual.call(void 0,a.ContextualKeyword._type)&&n.lookaheadType.call(void 0)===s.TokenType.star},t.flowParseExportStar=function(){if(l.eatContextual.call(void 0,a.ContextualKeyword._type)){const e=n.pushTypeContext.call(void 0,2);c.baseParseExportStar.call(void 0),n.popTypeContext.call(void 0,e)}else c.baseParseExportStar.call(void 0)},t.flowAfterParseClassSuper=function(e){if(e&&n.match.call(void 0,s.TokenType.lessThan)&&_(),l.isContextual.call(void 0,a.ContextualKeyword._implements)){const e=n.pushTypeContext.call(void 0,0);n.next.call(void 0),r.state.tokens[r.state.tokens.length-1].type=s.TokenType._implements;do{f(),n.match.call(void 0,s.TokenType.lessThan)&&_()}while(n.eat.call(void 0,s.TokenType.comma));n.popTypeContext.call(void 0,e)}},t.flowStartParseObjPropValue=function(){n.match.call(void 0,s.TokenType.lessThan)&&(x(),n.match.call(void 0,s.TokenType.parenL)||l.unexpected.call(void 0))},t.flowParseAssignableListItemTypes=function(){const e=n.pushTypeContext.call(void 0,0);n.eat.call(void 0,s.TokenType.question),n.match.call(void 0,s.TokenType.colon)&&O(),n.popTypeContext.call(void 0,e)},t.flowStartParseImportSpecifiers=function(){if(n.match.call(void 0,s.TokenType._typeof)||l.isContextual.call(void 0,a.ContextualKeyword._type)){const t=n.lookaheadTypeAndKeyword.call(void 0);(((e=t).type===s.TokenType.name||e.type&s.TokenType.IS_KEYWORD)&&e.contextualKeyword!==a.ContextualKeyword._from||t.type===s.TokenType.braceL||t.type===s.TokenType.star)&&n.next.call(void 0)}var e},t.flowParseImportSpecifier=function(){const e=r.state.contextualKeyword===a.ContextualKeyword._type||r.state.type===s.TokenType._typeof;e?n.next.call(void 0):i.parseIdentifier.call(void 0),l.isContextual.call(void 0,a.ContextualKeyword._as)&&!l.isLookaheadContextual.call(void 0,a.ContextualKeyword._as)?(i.parseIdentifier.call(void 0),(!e||n.match.call(void 0,s.TokenType.name)||r.state.type&s.TokenType.IS_KEYWORD)&&i.parseIdentifier.call(void 0)):e&&(n.match.call(void 0,s.TokenType.name)||r.state.type&s.TokenType.IS_KEYWORD)&&(i.parseIdentifier.call(void 0),l.eatContextual.call(void 0,a.ContextualKeyword._as)&&i.parseIdentifier.call(void 0))},t.flowStartParseFunctionParams=function(){if(n.match.call(void 0,s.TokenType.lessThan)){const e=n.pushTypeContext.call(void 0,0);x(),n.popTypeContext.call(void 0,e)}},t.flowAfterParseVarHead=function(){n.match.call(void 0,s.TokenType.colon)&&O()},t.flowStartParseAsyncArrowFromCallExpression=function(){if(n.match.call(void 0,s.TokenType.colon)){const e=r.state.noAnonFunctionType;r.state.noAnonFunctionType=!0,O(),r.state.noAnonFunctionType=e}},t.flowParseMaybeAssign=function(e,t){if(n.match.call(void 0,s.TokenType.lessThan)){const o=r.state.snapshot();let a=i.baseParseMaybeAssign.call(void 0,e,t);if(!r.state.error)return a;r.state.restoreFromSnapshot(o),r.state.type=s.TokenType.typeParameterStart;const c=n.pushTypeContext.call(void 0,0);if(x(),n.popTypeContext.call(void 0,c),a=i.baseParseMaybeAssign.call(void 0,e,t),a)return!0;l.unexpected.call(void 0)}return i.baseParseMaybeAssign.call(void 0,e,t)},t.flowParseArrow=function(){if(n.match.call(void 0,s.TokenType.colon)){const e=n.pushTypeContext.call(void 0,0),t=r.state.snapshot(),o=r.state.noAnonFunctionType;r.state.noAnonFunctionType=!0,T(),r.state.noAnonFunctionType=o,l.canInsertSemicolon.call(void 0)&&l.unexpected.call(void 0),n.match.call(void 0,s.TokenType.arrow)||l.unexpected.call(void 0),r.state.error&&r.state.restoreFromSnapshot(t),n.popTypeContext.call(void 0,e)}return n.eat.call(void 0,s.TokenType.arrow)},t.flowParseSubscripts=function(e,t=!1){if(r.state.tokens[r.state.tokens.length-1].contextualKeyword===a.ContextualKeyword._async&&n.match.call(void 0,s.TokenType.lessThan)){const e=r.state.snapshot();if(function(){r.state.scopeDepth++;const e=r.state.tokens.length;return c.parseFunctionParams.call(void 0),!!i.parseArrow.call(void 0)&&(i.parseArrowExpression.call(void 0,e),!0)}()&&!r.state.error)return;r.state.restoreFromSnapshot(e)}i.baseParseSubscripts.call(void 0,e,t)}},8583:(e,t,o)=>{Object.defineProperty(t,"__esModule",{value:!0});var n=o(7899),a=o(9609),s=o(6251),r=o(2276),i=o(799),c=o(5920),l=o(6742),p=o(8094);function d(){m()}function T(e){d(),n.eat.call(void 0,a.TokenType.colon)?d():s.state.tokens[s.state.tokens.length-1].identifierRole=e}function h(){for(T(n.IdentifierRole.Access);n.match.call(void 0,a.TokenType.dot);)m(),d()}function u(){n.match.call(void 0,a.TokenType.braceR)||r.parseExpression.call(void 0)}function k(){if(n.eat.call(void 0,a.TokenType.braceL))return i.expect.call(void 0,a.TokenType.ellipsis),r.parseMaybeAssign.call(void 0),void m();T(n.IdentifierRole.ObjectKey),n.match.call(void 0,a.TokenType.eq)&&(m(),function(){switch(s.state.type){case a.TokenType.braceL:return n.next.call(void 0),u(),void m();case a.TokenType.jsxTagStart:return f(),void m();case a.TokenType.string:return void m();default:i.unexpected.call(void 0,"JSX value should be either an expression or a quoted JSX text")}}())}function y(){if(!function(){if(n.match.call(void 0,a.TokenType.jsxTagEnd))return!1;for(h(),s.isTypeScriptEnabled&&p.tsTryParseJSXTypeArgument.call(void 0);!n.match.call(void 0,a.TokenType.slash)&&!n.match.call(void 0,a.TokenType.jsxTagEnd)&&!s.state.error;)k();const e=n.match.call(void 0,a.TokenType.slash);return e&&m(),e}())for(v();;)switch(s.state.type){case a.TokenType.jsxTagStart:if(m(),n.match.call(void 0,a.TokenType.slash))return m(),void(n.match.call(void 0,a.TokenType.jsxTagEnd)||h());y(),v();break;case a.TokenType.jsxText:v();break;case a.TokenType.braceL:n.next.call(void 0),n.match.call(void 0,a.TokenType.ellipsis)?(i.expect.call(void 0,a.TokenType.ellipsis),r.parseExpression.call(void 0),v()):(u(),v());break;default:return void i.unexpected.call(void 0)}}function f(){m(),y()}function m(){s.state.tokens.push(new(0,n.Token)),n.skipSpace.call(void 0),s.state.start=s.state.pos;const e=s.input.charCodeAt(s.state.pos);if(l.IS_IDENTIFIER_START[e])!function(){let e;do{if(s.state.pos>s.input.length)return void i.unexpected.call(void 0,"Unexpectedly reached the end of input.");e=s.input.charCodeAt(++s.state.pos)}while(l.IS_IDENTIFIER_CHAR[e]||e===c.charCodes.dash);n.finishToken.call(void 0,a.TokenType.jsxName)}();else if(e===c.charCodes.quotationMark||e===c.charCodes.apostrophe)!function(e){for(s.state.pos++;;){if(s.state.pos>=s.input.length)return void i.unexpected.call(void 0,"Unterminated string constant");if(s.input.charCodeAt(s.state.pos)===e){s.state.pos++;break}s.state.pos++}n.finishToken.call(void 0,a.TokenType.string)}(e);else switch(++s.state.pos,e){case c.charCodes.greaterThan:n.finishToken.call(void 0,a.TokenType.jsxTagEnd);break;case c.charCodes.lessThan:n.finishToken.call(void 0,a.TokenType.jsxTagStart);break;case c.charCodes.slash:n.finishToken.call(void 0,a.TokenType.slash);break;case c.charCodes.equalsTo:n.finishToken.call(void 0,a.TokenType.eq);break;case c.charCodes.leftCurlyBrace:n.finishToken.call(void 0,a.TokenType.braceL);break;case c.charCodes.dot:n.finishToken.call(void 0,a.TokenType.dot);break;case c.charCodes.colon:n.finishToken.call(void 0,a.TokenType.colon);break;default:i.unexpected.call(void 0)}}function v(){s.state.tokens.push(new(0,n.Token)),s.state.start=s.state.pos,function(){for(;;){if(s.state.pos>=s.input.length)return void i.unexpected.call(void 0,"Unterminated JSX contents");const e=s.input.charCodeAt(s.state.pos);switch(e){case c.charCodes.lessThan:case c.charCodes.leftCurlyBrace:return s.state.pos===s.state.start?e===c.charCodes.lessThan?(s.state.pos++,void n.finishToken.call(void 0,a.TokenType.jsxTagStart)):void n.getTokenFromCode.call(void 0,e):void n.finishToken.call(void 0,a.TokenType.jsxText);default:s.state.pos++}}}()}t.jsxParseElement=f,t.nextJSXTagToken=m},6076:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default={quot:'"',amp:"&",apos:"'",lt:"<",gt:">",nbsp:" ",iexcl:"¡",cent:"¢",pound:"£",curren:"¤",yen:"¥",brvbar:"¦",sect:"§",uml:"¨",copy:"©",ordf:"ª",laquo:"«",not:"¬",shy:"­",reg:"®",macr:"¯",deg:"°",plusmn:"±",sup2:"²",sup3:"³",acute:"´",micro:"µ",para:"¶",middot:"·",cedil:"¸",sup1:"¹",ordm:"º",raquo:"»",frac14:"¼",frac12:"½",frac34:"¾",iquest:"¿",Agrave:"À",Aacute:"Á",Acirc:"Â",Atilde:"Ã",Auml:"Ä",Aring:"Å",AElig:"Æ",Ccedil:"Ç",Egrave:"È",Eacute:"É",Ecirc:"Ê",Euml:"Ë",Igrave:"Ì",Iacute:"Í",Icirc:"Î",Iuml:"Ï",ETH:"Ð",Ntilde:"Ñ",Ograve:"Ò",Oacute:"Ó",Ocirc:"Ô",Otilde:"Õ",Ouml:"Ö",times:"×",Oslash:"Ø",Ugrave:"Ù",Uacute:"Ú",Ucirc:"Û",Uuml:"Ü",Yacute:"Ý",THORN:"Þ",szlig:"ß",agrave:"à",aacute:"á",acirc:"â",atilde:"ã",auml:"ä",aring:"å",aelig:"æ",ccedil:"ç",egrave:"è",eacute:"é",ecirc:"ê",euml:"ë",igrave:"ì",iacute:"í",icirc:"î",iuml:"ï",eth:"ð",ntilde:"ñ",ograve:"ò",oacute:"ó",ocirc:"ô",otilde:"õ",ouml:"ö",divide:"÷",oslash:"ø",ugrave:"ù",uacute:"ú",ucirc:"û",uuml:"ü",yacute:"ý",thorn:"þ",yuml:"ÿ",OElig:"Œ",oelig:"œ",Scaron:"Š",scaron:"š",Yuml:"Ÿ",fnof:"ƒ",circ:"ˆ",tilde:"˜",Alpha:"Α",Beta:"Β",Gamma:"Γ",Delta:"Δ",Epsilon:"Ε",Zeta:"Ζ",Eta:"Η",Theta:"Θ",Iota:"Ι",Kappa:"Κ",Lambda:"Λ",Mu:"Μ",Nu:"Ν",Xi:"Ξ",Omicron:"Ο",Pi:"Π",Rho:"Ρ",Sigma:"Σ",Tau:"Τ",Upsilon:"Υ",Phi:"Φ",Chi:"Χ",Psi:"Ψ",Omega:"Ω",alpha:"α",beta:"β",gamma:"γ",delta:"δ",epsilon:"ε",zeta:"ζ",eta:"η",theta:"θ",iota:"ι",kappa:"κ",lambda:"λ",mu:"μ",nu:"ν",xi:"ξ",omicron:"ο",pi:"π",rho:"ρ",sigmaf:"ς",sigma:"σ",tau:"τ",upsilon:"υ",phi:"φ",chi:"χ",psi:"ψ",omega:"ω",thetasym:"ϑ",upsih:"ϒ",piv:"ϖ",ensp:" ",emsp:" ",thinsp:" ",zwnj:"‌",zwj:"‍",lrm:"‎",rlm:"‏",ndash:"–",mdash:"—",lsquo:"‘",rsquo:"’",sbquo:"‚",ldquo:"“",rdquo:"”",bdquo:"„",dagger:"†",Dagger:"‡",bull:"•",hellip:"…",permil:"‰",prime:"′",Prime:"″",lsaquo:"‹",rsaquo:"›",oline:"‾",frasl:"⁄",euro:"€",image:"ℑ",weierp:"℘",real:"ℜ",trade:"™",alefsym:"ℵ",larr:"←",uarr:"↑",rarr:"→",darr:"↓",harr:"↔",crarr:"↵",lArr:"⇐",uArr:"⇑",rArr:"⇒",dArr:"⇓",hArr:"⇔",forall:"∀",part:"∂",exist:"∃",empty:"∅",nabla:"∇",isin:"∈",notin:"∉",ni:"∋",prod:"∏",sum:"∑",minus:"−",lowast:"∗",radic:"√",prop:"∝",infin:"∞",ang:"∠",and:"∧",or:"∨",cap:"∩",cup:"∪",int:"∫",there4:"∴",sim:"∼",cong:"≅",asymp:"≈",ne:"≠",equiv:"≡",le:"≤",ge:"≥",sub:"⊂",sup:"⊃",nsub:"⊄",sube:"⊆",supe:"⊇",oplus:"⊕",otimes:"⊗",perp:"⊥",sdot:"⋅",lceil:"⌈",rceil:"⌉",lfloor:"⌊",rfloor:"⌋",lang:"〈",rang:"〉",loz:"◊",spades:"♠",clubs:"♣",hearts:"♥",diams:"♦"}},2791:(e,t,o)=>{Object.defineProperty(t,"__esModule",{value:!0});var n=o(7899),a=o(9609),s=o(6251),r=o(2276),i=o(905),c=o(8094);t.typedParseConditional=function(e){if(n.match.call(void 0,a.TokenType.question)){const e=n.lookaheadType.call(void 0);if(e===a.TokenType.colon||e===a.TokenType.comma||e===a.TokenType.parenR)return}r.baseParseConditional.call(void 0,e)},t.typedParseParenItem=function(){n.eat.call(void 0,a.TokenType.question)&&(s.state.tokens[s.state.tokens.length-1].isType=!0),n.match.call(void 0,a.TokenType.colon)&&(s.isTypeScriptEnabled?c.tsParseTypeAnnotation.call(void 0):s.isFlowEnabled&&i.flowParseTypeAnnotation.call(void 0))}},8094:(e,t,o)=>{Object.defineProperty(t,"__esModule",{value:!0});var n,a=o(7899),s=o(53),r=o(9609),i=o(6251),c=o(2276),l=o(6689),p=o(7233),d=o(799),T=o(8583);function h(){return a.match.call(void 0,r.TokenType.name)}function u(e){if(!a.match.call(void 0,r.TokenType.name))return null;const t=i.state.contextualKeyword;if(-1!==e.indexOf(t)&&function(){const e=i.state.snapshot();return a.next.call(void 0),!(!(a.match.call(void 0,r.TokenType.bracketL)||a.match.call(void 0,r.TokenType.braceL)||a.match.call(void 0,r.TokenType.star)||a.match.call(void 0,r.TokenType.ellipsis)||a.match.call(void 0,r.TokenType.hash)||a.match.call(void 0,r.TokenType.name)||Boolean(i.state.type&r.TokenType.IS_KEYWORD)||a.match.call(void 0,r.TokenType.string)||a.match.call(void 0,r.TokenType.num)||a.match.call(void 0,r.TokenType.bigint)||a.match.call(void 0,r.TokenType.decimal))||d.hasPrecedingLineBreak.call(void 0))||(i.state.restoreFromSnapshot(e),!1)}()){switch(t){case s.ContextualKeyword._readonly:i.state.tokens[i.state.tokens.length-1].type=r.TokenType._readonly;break;case s.ContextualKeyword._abstract:i.state.tokens[i.state.tokens.length-1].type=r.TokenType._abstract;break;case s.ContextualKeyword._static:i.state.tokens[i.state.tokens.length-1].type=r.TokenType._static;break;case s.ContextualKeyword._public:i.state.tokens[i.state.tokens.length-1].type=r.TokenType._public;break;case s.ContextualKeyword._private:i.state.tokens[i.state.tokens.length-1].type=r.TokenType._private;break;case s.ContextualKeyword._protected:i.state.tokens[i.state.tokens.length-1].type=r.TokenType._protected;break;case s.ContextualKeyword._declare:i.state.tokens[i.state.tokens.length-1].type=r.TokenType._declare}return t}return null}function k(){for(c.parseIdentifier.call(void 0);a.eat.call(void 0,r.TokenType.dot);)c.parseIdentifier.call(void 0)}function y(){d.expect.call(void 0,r.TokenType._import),d.expect.call(void 0,r.TokenType.parenL),d.expect.call(void 0,r.TokenType.string),d.expect.call(void 0,r.TokenType.parenR),a.eat.call(void 0,r.TokenType.dot)&&k(),a.match.call(void 0,r.TokenType.lessThan)&&W()}function f(){a.match.call(void 0,r.TokenType.lessThan)&&m()}function m(){const e=a.pushTypeContext.call(void 0,0);for(a.match.call(void 0,r.TokenType.lessThan)||a.match.call(void 0,r.TokenType.typeParameterStart)?a.next.call(void 0):d.unexpected.call(void 0);!a.eat.call(void 0,r.TokenType.greaterThan)&&!i.state.error;)c.parseIdentifier.call(void 0),a.eat.call(void 0,r.TokenType._extends)&&L(),a.eat.call(void 0,r.TokenType.eq)&&L(),a.eat.call(void 0,r.TokenType.comma);a.popTypeContext.call(void 0,e)}function v(e){const t=e===r.TokenType.arrow;f(),d.expect.call(void 0,r.TokenType.parenL),i.state.scopeDepth++,l.parseBindingList.call(void 0,r.TokenType.parenR,false),i.state.scopeDepth--,(t||a.match.call(void 0,e))&&P(e)}function x(){a.eat.call(void 0,r.TokenType.comma)||d.semicolon.call(void 0)}function _(){v(r.TokenType.colon),x()}function C(){if(!a.match.call(void 0,r.TokenType.bracketL)||!function(){const e=i.state.snapshot();a.next.call(void 0);const t=a.eat.call(void 0,r.TokenType.name)&&a.match.call(void 0,r.TokenType.colon);return i.state.restoreFromSnapshot(e),t}())return!1;const e=a.pushTypeContext.call(void 0,0);return d.expect.call(void 0,r.TokenType.bracketL),c.parseIdentifier.call(void 0),R(),d.expect.call(void 0,r.TokenType.bracketR),N(),x(),a.popTypeContext.call(void 0,e),!0}function g(e){a.eat.call(void 0,r.TokenType.question),e||!a.match.call(void 0,r.TokenType.parenL)&&!a.match.call(void 0,r.TokenType.lessThan)?(N(),x()):(v(r.TokenType.colon),x())}function b(){if(a.match.call(void 0,r.TokenType.parenL)||a.match.call(void 0,r.TokenType.lessThan))return void _();if(a.match.call(void 0,r.TokenType._new))return a.next.call(void 0),void(a.match.call(void 0,r.TokenType.parenL)||a.match.call(void 0,r.TokenType.lessThan)?_():g(!1));const e=!!u([s.ContextualKeyword._readonly]);C()||(c.parsePropertyName.call(void 0,-1),g(e))}function w(){for(d.expect.call(void 0,r.TokenType.braceL);!a.eat.call(void 0,r.TokenType.braceR)&&!i.state.error;)b()}function I(e){e===n.TSConstructorType&&d.expect.call(void 0,r.TokenType._new),v(r.TokenType.arrow)}function E(){switch(i.state.type){case r.TokenType.name:return k(),void(!d.hasPrecedingLineBreak.call(void 0)&&a.match.call(void 0,r.TokenType.lessThan)&&W());case r.TokenType._void:case r.TokenType._null:return void a.next.call(void 0);case r.TokenType.string:case r.TokenType.num:case r.TokenType.bigint:case r.TokenType.decimal:case r.TokenType._true:case r.TokenType._false:return void c.parseLiteral.call(void 0);case r.TokenType.minus:return a.next.call(void 0),void c.parseLiteral.call(void 0);case r.TokenType._this:return a.next.call(void 0),void(d.isContextual.call(void 0,s.ContextualKeyword._is)&&!d.hasPrecedingLineBreak.call(void 0)&&(a.next.call(void 0),R()));case r.TokenType._typeof:return d.expect.call(void 0,r.TokenType._typeof),void(a.match.call(void 0,r.TokenType._import)?y():k());case r.TokenType._import:return void y();case r.TokenType.braceL:return void(function(){const e=i.state.snapshot(),t=(a.next.call(void 0),a.eat.call(void 0,r.TokenType.plus)||a.eat.call(void 0,r.TokenType.minus)?d.isContextual.call(void 0,s.ContextualKeyword._readonly):(d.isContextual.call(void 0,s.ContextualKeyword._readonly)&&a.next.call(void 0),!!a.match.call(void 0,r.TokenType.bracketL)&&(a.next.call(void 0),!!h()&&(a.next.call(void 0),a.match.call(void 0,r.TokenType._in)))));return i.state.restoreFromSnapshot(e),t}()?(d.expect.call(void 0,r.TokenType.braceL),a.match.call(void 0,r.TokenType.plus)||a.match.call(void 0,r.TokenType.minus)?(a.next.call(void 0),d.expectContextual.call(void 0,s.ContextualKeyword._readonly)):d.eatContextual.call(void 0,s.ContextualKeyword._readonly),d.expect.call(void 0,r.TokenType.bracketL),c.parseIdentifier.call(void 0),d.expect.call(void 0,r.TokenType._in),L(),d.eatContextual.call(void 0,s.ContextualKeyword._as)&&L(),d.expect.call(void 0,r.TokenType.bracketR),a.match.call(void 0,r.TokenType.plus)||a.match.call(void 0,r.TokenType.minus)?(a.next.call(void 0),d.expect.call(void 0,r.TokenType.question)):a.eat.call(void 0,r.TokenType.question),a.eat.call(void 0,r.TokenType.colon)&&L(),d.semicolon.call(void 0),d.expect.call(void 0,r.TokenType.braceR)):w());case r.TokenType.bracketL:return void function(){for(d.expect.call(void 0,r.TokenType.bracketL);!a.eat.call(void 0,r.TokenType.bracketR)&&!i.state.error;)a.eat.call(void 0,r.TokenType.ellipsis)?L():(L(),a.eat.call(void 0,r.TokenType.question)),a.eat.call(void 0,r.TokenType.colon)&&L(),a.eat.call(void 0,r.TokenType.comma)}();case r.TokenType.parenL:return d.expect.call(void 0,r.TokenType.parenL),L(),void d.expect.call(void 0,r.TokenType.parenR);case r.TokenType.backQuote:return void function(){for(a.nextTemplateToken.call(void 0),a.nextTemplateToken.call(void 0);!a.match.call(void 0,r.TokenType.backQuote)&&!i.state.error;)d.expect.call(void 0,r.TokenType.dollarBraceL),L(),a.nextTemplateToken.call(void 0),a.nextTemplateToken.call(void 0);a.next.call(void 0)}();default:if(i.state.type&r.TokenType.IS_KEYWORD)return a.next.call(void 0),void(i.state.tokens[i.state.tokens.length-1].type=r.TokenType.name)}d.unexpected.call(void 0)}function S(){d.isContextual.call(void 0,s.ContextualKeyword._keyof)||d.isContextual.call(void 0,s.ContextualKeyword._unique)||d.isContextual.call(void 0,s.ContextualKeyword._readonly)?(a.next.call(void 0),S()):d.isContextual.call(void 0,s.ContextualKeyword._infer)?(d.expectContextual.call(void 0,s.ContextualKeyword._infer),c.parseIdentifier.call(void 0)):function(){for(E();!d.hasPrecedingLineBreak.call(void 0)&&a.eat.call(void 0,r.TokenType.bracketL);)a.eat.call(void 0,r.TokenType.bracketR)||(L(),d.expect.call(void 0,r.TokenType.bracketR))}()}function A(){if(a.eat.call(void 0,r.TokenType.bitwiseAND),S(),a.match.call(void 0,r.TokenType.bitwiseAND))for(;a.eat.call(void 0,r.TokenType.bitwiseAND);)S()}function P(e){const t=a.pushTypeContext.call(void 0,0);d.expect.call(void 0,e),function(){const e=i.state.snapshot();return d.isContextual.call(void 0,s.ContextualKeyword._asserts)&&!d.hasPrecedingLineBreak.call(void 0)?(a.next.call(void 0),d.eatContextual.call(void 0,s.ContextualKeyword._is)?(L(),!0):h()||a.match.call(void 0,r.TokenType._this)?(a.next.call(void 0),d.eatContextual.call(void 0,s.ContextualKeyword._is)&&L(),!0):(i.state.restoreFromSnapshot(e),!1)):!(!h()&&!a.match.call(void 0,r.TokenType._this))&&(a.next.call(void 0),d.isContextual.call(void 0,s.ContextualKeyword._is)&&!d.hasPrecedingLineBreak.call(void 0)?(a.next.call(void 0),L(),!0):(i.state.restoreFromSnapshot(e),!1))}()||L(),a.popTypeContext.call(void 0,t)}function N(){a.match.call(void 0,r.TokenType.colon)&&R()}function R(){const e=a.pushTypeContext.call(void 0,0);d.expect.call(void 0,r.TokenType.colon),L(),a.popTypeContext.call(void 0,e)}function L(){O(),!d.hasPrecedingLineBreak.call(void 0)&&a.eat.call(void 0,r.TokenType._extends)&&(O(),d.expect.call(void 0,r.TokenType.question),L(),d.expect.call(void 0,r.TokenType.colon),L())}function O(){a.match.call(void 0,r.TokenType.lessThan)||a.match.call(void 0,r.TokenType.parenL)&&function(){const e=i.state.snapshot(),t=function(){if(a.next.call(void 0),a.match.call(void 0,r.TokenType.parenR)||a.match.call(void 0,r.TokenType.ellipsis))return!0;if(function(){if(a.match.call(void 0,r.TokenType.name)||a.match.call(void 0,r.TokenType._this))return a.next.call(void 0),!0;if(a.match.call(void 0,r.TokenType.braceL)||a.match.call(void 0,r.TokenType.bracketL)){let e=1;for(a.next.call(void 0);e>0&&!i.state.error;)a.match.call(void 0,r.TokenType.braceL)||a.match.call(void 0,r.TokenType.bracketL)?e++:(a.match.call(void 0,r.TokenType.braceR)||a.match.call(void 0,r.TokenType.bracketR))&&e--,a.next.call(void 0);return!0}return!1}()){if(a.match.call(void 0,r.TokenType.colon)||a.match.call(void 0,r.TokenType.comma)||a.match.call(void 0,r.TokenType.question)||a.match.call(void 0,r.TokenType.eq))return!0;if(a.match.call(void 0,r.TokenType.parenR)&&(a.next.call(void 0),a.match.call(void 0,r.TokenType.arrow)))return!0}return!1}();return i.state.restoreFromSnapshot(e),t}()?I(n.TSFunctionType):a.match.call(void 0,r.TokenType._new)?I(n.TSConstructorType):function(){if(a.eat.call(void 0,r.TokenType.bitwiseOR),A(),a.match.call(void 0,r.TokenType.bitwiseOR))for(;a.eat.call(void 0,r.TokenType.bitwiseOR);)A()}()}function D(){for(;!a.match.call(void 0,r.TokenType.braceL)&&!i.state.error;)k(),a.match.call(void 0,r.TokenType.lessThan)&&W(),a.eat.call(void 0,r.TokenType.comma)}function K(){if(a.match.call(void 0,r.TokenType.string)?c.parseLiteral.call(void 0):c.parseIdentifier.call(void 0),a.eat.call(void 0,r.TokenType.eq)){const e=i.state.tokens.length-1;c.parseMaybeAssign.call(void 0),i.state.tokens[e].rhsEndIndex=i.state.tokens.length}}function F(){for(l.parseBindingIdentifier.call(void 0,!1),d.expect.call(void 0,r.TokenType.braceL);!a.eat.call(void 0,r.TokenType.braceR)&&!i.state.error;)K(),a.eat.call(void 0,r.TokenType.comma)}function j(){d.expect.call(void 0,r.TokenType.braceL),p.parseBlockBody.call(void 0,r.TokenType.braceR)}function M(){l.parseBindingIdentifier.call(void 0,!1),a.eat.call(void 0,r.TokenType.dot)?M():j()}function B(){d.isContextual.call(void 0,s.ContextualKeyword._global)?c.parseIdentifier.call(void 0):a.match.call(void 0,r.TokenType.string)?c.parseExprAtom.call(void 0):d.unexpected.call(void 0),a.match.call(void 0,r.TokenType.braceL)?j():d.semicolon.call(void 0)}function q(){l.parseImportedIdentifier.call(void 0),d.expect.call(void 0,r.TokenType.eq),d.isContextual.call(void 0,s.ContextualKeyword._require)&&a.lookaheadType.call(void 0)===r.TokenType.parenL?(d.expectContextual.call(void 0,s.ContextualKeyword._require),d.expect.call(void 0,r.TokenType.parenL),a.match.call(void 0,r.TokenType.string)||d.unexpected.call(void 0),c.parseLiteral.call(void 0),d.expect.call(void 0,r.TokenType.parenR)):k(),d.semicolon.call(void 0)}function $(){return H(i.state.contextualKeyword,!0)}function H(e,t){switch(e){case s.ContextualKeyword._abstract:if(V(r.TokenType._class,t))return t&&a.next.call(void 0),i.state.tokens[i.state.tokens.length-1].type=r.TokenType._abstract,p.parseClass.call(void 0,!0,!1),!0;break;case s.ContextualKeyword._enum:if(V(r.TokenType.name,t))return t&&a.next.call(void 0),i.state.tokens[i.state.tokens.length-1].type=r.TokenType._enum,F(),!0;break;case s.ContextualKeyword._interface:if(V(r.TokenType.name,t)){const e=a.pushTypeContext.call(void 0,1);return t&&a.next.call(void 0),l.parseBindingIdentifier.call(void 0,!1),f(),a.eat.call(void 0,r.TokenType._extends)&&D(),w(),a.popTypeContext.call(void 0,e),!0}break;case s.ContextualKeyword._module:if(t&&a.next.call(void 0),a.match.call(void 0,r.TokenType.string)){const e=a.pushTypeContext.call(void 0,t?2:1);return B(),a.popTypeContext.call(void 0,e),!0}if(V(r.TokenType.name,t)){const e=a.pushTypeContext.call(void 0,t?2:1);return t&&a.next.call(void 0),M(),a.popTypeContext.call(void 0,e),!0}break;case s.ContextualKeyword._namespace:if(V(r.TokenType.name,t)){const e=a.pushTypeContext.call(void 0,1);return t&&a.next.call(void 0),M(),a.popTypeContext.call(void 0,e),!0}break;case s.ContextualKeyword._type:if(V(r.TokenType.name,t)){const e=a.pushTypeContext.call(void 0,1);return t&&a.next.call(void 0),l.parseBindingIdentifier.call(void 0,!1),f(),d.expect.call(void 0,r.TokenType.eq),L(),d.semicolon.call(void 0),a.popTypeContext.call(void 0,e),!0}}return!1}function V(e,t){return!d.isLineTerminator.call(void 0)&&(t||a.match.call(void 0,e))}function W(){const e=a.pushTypeContext.call(void 0,0);for(d.expect.call(void 0,r.TokenType.lessThan);!a.eat.call(void 0,r.TokenType.greaterThan)&&!i.state.error;)L(),a.eat.call(void 0,r.TokenType.comma);a.popTypeContext.call(void 0,e)}function U(e,t){if(!a.match.call(void 0,r.TokenType.lessThan))return c.baseParseMaybeAssign.call(void 0,e,t);const o=i.state.snapshot();let n=c.baseParseMaybeAssign.call(void 0,e,t);return i.state.error?(i.state.restoreFromSnapshot(o),i.state.type=r.TokenType.typeParameterStart,m(),n=c.baseParseMaybeAssign.call(void 0,e,t),n||d.unexpected.call(void 0),n):n}function X(e,t){if(!a.match.call(void 0,r.TokenType.lessThan))return c.baseParseMaybeAssign.call(void 0,e,t);const o=i.state.snapshot();m();const n=c.baseParseMaybeAssign.call(void 0,e,t);return n||d.unexpected.call(void 0),i.state.error?(i.state.restoreFromSnapshot(o),c.baseParseMaybeAssign.call(void 0,e,t)):n}t.tsParseModifier=u,t.tsTryParseTypeParameters=f,function(e){e[e.TSFunctionType=0]="TSFunctionType",e[e.TSConstructorType=1]="TSConstructorType"}(n||(n={})),t.tsTryParseTypeAnnotation=N,t.tsParseTypeAnnotation=R,t.tsParseType=L,t.tsParseNonConditionalType=O,t.tsParseTypeAssertion=function(){const e=a.pushTypeContext.call(void 0,1);L(),d.expect.call(void 0,r.TokenType.greaterThan),a.popTypeContext.call(void 0,e),c.parseMaybeUnary.call(void 0)},t.tsTryParseJSXTypeArgument=function(){if(a.eat.call(void 0,r.TokenType.jsxTagStart)){i.state.tokens[i.state.tokens.length-1].type=r.TokenType.typeParameterStart;const e=a.pushTypeContext.call(void 0,1);for(;!a.match.call(void 0,r.TokenType.greaterThan)&&!i.state.error;)L(),a.eat.call(void 0,r.TokenType.comma);T.nextJSXTagToken.call(void 0),a.popTypeContext.call(void 0,e)}},t.tsParseImportEqualsDeclaration=q,t.tsIsDeclarationStart=function(){if(a.match.call(void 0,r.TokenType.name))switch(i.state.contextualKeyword){case s.ContextualKeyword._abstract:case s.ContextualKeyword._declare:case s.ContextualKeyword._enum:case s.ContextualKeyword._interface:case s.ContextualKeyword._module:case s.ContextualKeyword._namespace:case s.ContextualKeyword._type:return!0}return!1},t.tsParseFunctionBodyAndFinish=function(e,t){if(a.match.call(void 0,r.TokenType.colon)&&P(r.TokenType.colon),a.match.call(void 0,r.TokenType.braceL)||!d.isLineTerminator.call(void 0))c.parseFunctionBody.call(void 0,!1,t);else{let t=i.state.tokens.length-1;for(;t>=0&&(i.state.tokens[t].start>=e||i.state.tokens[t].type===r.TokenType._default||i.state.tokens[t].type===r.TokenType._export);)i.state.tokens[t].isType=!0,t--}},t.tsParseSubscript=function(e,t,o){if(d.hasPrecedingLineBreak.call(void 0)||!a.eat.call(void 0,r.TokenType.bang)){if(a.match.call(void 0,r.TokenType.lessThan)){const o=i.state.snapshot();if(!t&&c.atPossibleAsync.call(void 0)&&function(){const e=i.state.snapshot();return m(),p.parseFunctionParams.call(void 0),a.match.call(void 0,r.TokenType.colon)&&P(r.TokenType.colon),d.expect.call(void 0,r.TokenType.arrow),i.state.error?(i.state.restoreFromSnapshot(e),!1):(c.parseFunctionBody.call(void 0,!0),!0)}())return;if(W(),!t&&a.eat.call(void 0,r.TokenType.parenL)?(i.state.tokens[i.state.tokens.length-1].subscriptStartIndex=e,c.parseCallExpressionArguments.call(void 0)):a.match.call(void 0,r.TokenType.backQuote)?c.parseTemplate.call(void 0):d.unexpected.call(void 0),!i.state.error)return;i.state.restoreFromSnapshot(o)}else!t&&a.match.call(void 0,r.TokenType.questionDot)&&a.lookaheadType.call(void 0)===r.TokenType.lessThan&&(a.next.call(void 0),i.state.tokens[e].isOptionalChainStart=!0,i.state.tokens[i.state.tokens.length-1].subscriptStartIndex=e,W(),d.expect.call(void 0,r.TokenType.parenL),c.parseCallExpressionArguments.call(void 0));c.baseParseSubscript.call(void 0,e,t,o)}else i.state.tokens[i.state.tokens.length-1].type=r.TokenType.nonNullAssertion},t.tsStartParseNewArguments=function(){if(a.match.call(void 0,r.TokenType.lessThan)){const e=i.state.snapshot();i.state.type=r.TokenType.typeParameterStart,W(),a.match.call(void 0,r.TokenType.parenL)||d.unexpected.call(void 0),i.state.error&&i.state.restoreFromSnapshot(e)}},t.tsTryParseExport=function(){return a.match.call(void 0,r.TokenType._import)?(d.expect.call(void 0,r.TokenType._import),q(),!0):a.eat.call(void 0,r.TokenType.eq)?(c.parseExpression.call(void 0),d.semicolon.call(void 0),!0):d.eatContextual.call(void 0,s.ContextualKeyword._as)?(d.expectContextual.call(void 0,s.ContextualKeyword._namespace),c.parseIdentifier.call(void 0),d.semicolon.call(void 0),!0):(d.isContextual.call(void 0,s.ContextualKeyword._type)&&a.lookaheadType.call(void 0)===r.TokenType.braceL&&a.next.call(void 0),!1)},t.tsTryParseExportDefaultExpression=function(){if(d.isContextual.call(void 0,s.ContextualKeyword._abstract)&&a.lookaheadType.call(void 0)===r.TokenType._class)return i.state.type=r.TokenType._abstract,a.next.call(void 0),p.parseClass.call(void 0,!0,!0),!0;if(d.isContextual.call(void 0,s.ContextualKeyword._interface)){const e=a.pushTypeContext.call(void 0,2);return H(s.ContextualKeyword._interface,!0),a.popTypeContext.call(void 0,e),!0}return!1},t.tsTryParseStatementContent=function(){if(i.state.type===r.TokenType._const){const e=a.lookaheadTypeAndKeyword.call(void 0);if(e.type===r.TokenType.name&&e.contextualKeyword===s.ContextualKeyword._enum)return d.expect.call(void 0,r.TokenType._const),d.expectContextual.call(void 0,s.ContextualKeyword._enum),i.state.tokens[i.state.tokens.length-1].type=r.TokenType._enum,F(),!0}return!1},t.tsParseAccessModifier=function(){u([s.ContextualKeyword._public,s.ContextualKeyword._protected,s.ContextualKeyword._private])},t.tsTryParseClassMemberWithIsStatic=function(e,t){let o=!1,n=!1;for(;;){const e=u([s.ContextualKeyword._abstract,s.ContextualKeyword._readonly,s.ContextualKeyword._declare]);if(null==e)break;e===s.ContextualKeyword._readonly&&(n=!0),e===s.ContextualKeyword._abstract&&(o=!0)}return!(o||e||!C())||!!n&&(p.parseClassPropertyName.call(void 0,t),p.parsePostMemberNameModifiers.call(void 0),p.parseClassProperty.call(void 0),!0)},t.tsParseIdentifierStatement=function(e){(function(e){switch(e){case s.ContextualKeyword._declare:{const e=i.state.tokens.length-1;if(function(){if(d.isLineTerminator.call(void 0))return!1;switch(i.state.type){case r.TokenType._function:{const e=a.pushTypeContext.call(void 0,1);a.next.call(void 0);const t=i.state.start;return p.parseFunction.call(void 0,t,!0),a.popTypeContext.call(void 0,e),!0}case r.TokenType._class:{const e=a.pushTypeContext.call(void 0,1);return p.parseClass.call(void 0,!0,!1),a.popTypeContext.call(void 0,e),!0}case r.TokenType._const:if(a.match.call(void 0,r.TokenType._const)&&d.isLookaheadContextual.call(void 0,s.ContextualKeyword._enum)){const e=a.pushTypeContext.call(void 0,1);return d.expect.call(void 0,r.TokenType._const),d.expectContextual.call(void 0,s.ContextualKeyword._enum),i.state.tokens[i.state.tokens.length-1].type=r.TokenType._enum,F(),a.popTypeContext.call(void 0,e),!0}case r.TokenType._var:case r.TokenType._let:{const e=a.pushTypeContext.call(void 0,1);return p.parseVarStatement.call(void 0,i.state.type),a.popTypeContext.call(void 0,e),!0}case r.TokenType.name:{const e=a.pushTypeContext.call(void 0,1),t=i.state.contextualKeyword;let o=!1;return t===s.ContextualKeyword._global?(B(),o=!0):o=H(t,!0),a.popTypeContext.call(void 0,e),o}default:return!1}}())return i.state.tokens[e].type=r.TokenType._declare,!0;break}case s.ContextualKeyword._global:if(a.match.call(void 0,r.TokenType.braceL))return j(),!0;break;default:return H(e,!1)}return!1})(e)||d.semicolon.call(void 0)},t.tsParseExportDeclaration=function(){const e=d.eatContextual.call(void 0,s.ContextualKeyword._declare);e&&(i.state.tokens[i.state.tokens.length-1].type=r.TokenType._declare);let t=!1;if(a.match.call(void 0,r.TokenType.name))if(e){const e=a.pushTypeContext.call(void 0,2);t=$(),a.popTypeContext.call(void 0,e)}else t=$();if(!t)if(e){const e=a.pushTypeContext.call(void 0,2);p.parseStatement.call(void 0,!0),a.popTypeContext.call(void 0,e)}else p.parseStatement.call(void 0,!0)},t.tsAfterParseClassSuper=function(e){if(e&&a.match.call(void 0,r.TokenType.lessThan)&&W(),d.eatContextual.call(void 0,s.ContextualKeyword._implements)){i.state.tokens[i.state.tokens.length-1].type=r.TokenType._implements;const e=a.pushTypeContext.call(void 0,1);D(),a.popTypeContext.call(void 0,e)}},t.tsStartParseObjPropValue=function(){f()},t.tsStartParseFunctionParams=function(){f()},t.tsAfterParseVarHead=function(){const e=a.pushTypeContext.call(void 0,0);a.eat.call(void 0,r.TokenType.bang),N(),a.popTypeContext.call(void 0,e)},t.tsStartParseAsyncArrowFromCallExpression=function(){a.match.call(void 0,r.TokenType.colon)&&R()},t.tsParseMaybeAssign=function(e,t){return i.isJSXEnabled?U(e,t):X(e,t)},t.tsParseMaybeAssignWithJSX=U,t.tsParseMaybeAssignWithoutJSX=X,t.tsParseArrow=function(){if(a.match.call(void 0,r.TokenType.colon)){const e=i.state.snapshot();P(r.TokenType.colon),d.canInsertSemicolon.call(void 0)&&d.unexpected.call(void 0),a.match.call(void 0,r.TokenType.arrow)||d.unexpected.call(void 0),i.state.error&&i.state.restoreFromSnapshot(e)}return a.eat.call(void 0,r.TokenType.arrow)},t.tsParseAssignableListItemTypes=function(){const e=a.pushTypeContext.call(void 0,0);a.eat.call(void 0,r.TokenType.question),N(),a.popTypeContext.call(void 0,e)},t.tsParseMaybeDecoratorArguments=function(){a.match.call(void 0,r.TokenType.lessThan)&&W(),p.baseParseMaybeDecoratorArguments.call(void 0)}},7899:(e,t,o)=>{Object.defineProperty(t,"__esModule",{value:!0});var n,a,s=o(6251),r=o(799),i=o(5920),c=o(6742),l=o(6989),p=o(53),d=(n=o(7010))&&n.__esModule?n:{default:n},T=o(9609);!function(e){e[e.Access=0]="Access",e[e.ExportAccess=1]="ExportAccess",e[e.TopLevelDeclaration=2]="TopLevelDeclaration",e[e.FunctionScopedDeclaration=3]="FunctionScopedDeclaration",e[e.BlockScopedDeclaration=4]="BlockScopedDeclaration",e[e.ObjectShorthandTopLevelDeclaration=5]="ObjectShorthandTopLevelDeclaration",e[e.ObjectShorthandFunctionScopedDeclaration=6]="ObjectShorthandFunctionScopedDeclaration",e[e.ObjectShorthandBlockScopedDeclaration=7]="ObjectShorthandBlockScopedDeclaration",e[e.ObjectShorthand=8]="ObjectShorthand",e[e.ImportDeclaration=9]="ImportDeclaration",e[e.ObjectKey=10]="ObjectKey",e[e.ImportAccess=11]="ImportAccess"}(a||(t.IdentifierRole=a={})),t.isDeclaration=function(e){const t=e.identifierRole;return t===a.TopLevelDeclaration||t===a.FunctionScopedDeclaration||t===a.BlockScopedDeclaration||t===a.ObjectShorthandTopLevelDeclaration||t===a.ObjectShorthandFunctionScopedDeclaration||t===a.ObjectShorthandBlockScopedDeclaration},t.isNonTopLevelDeclaration=function(e){const t=e.identifierRole;return t===a.FunctionScopedDeclaration||t===a.BlockScopedDeclaration||t===a.ObjectShorthandFunctionScopedDeclaration||t===a.ObjectShorthandBlockScopedDeclaration},t.isTopLevelDeclaration=function(e){const t=e.identifierRole;return t===a.TopLevelDeclaration||t===a.ObjectShorthandTopLevelDeclaration||t===a.ImportDeclaration},t.isBlockScopedDeclaration=function(e){const t=e.identifierRole;return t===a.TopLevelDeclaration||t===a.BlockScopedDeclaration||t===a.ObjectShorthandTopLevelDeclaration||t===a.ObjectShorthandBlockScopedDeclaration},t.isFunctionScopedDeclaration=function(e){const t=e.identifierRole;return t===a.FunctionScopedDeclaration||t===a.ObjectShorthandFunctionScopedDeclaration},t.isObjectShorthandDeclaration=function(e){return e.identifierRole===a.ObjectShorthandTopLevelDeclaration||e.identifierRole===a.ObjectShorthandBlockScopedDeclaration||e.identifierRole===a.ObjectShorthandFunctionScopedDeclaration};class h{constructor(){this.type=s.state.type,this.contextualKeyword=s.state.contextualKeyword,this.start=s.state.start,this.end=s.state.end,this.scopeDepth=s.state.scopeDepth,this.isType=s.state.isType,this.identifierRole=null,this.shadowsGlobal=!1,this.contextId=null,this.rhsEndIndex=null,this.isExpression=!1,this.numNullishCoalesceStarts=0,this.numNullishCoalesceEnds=0,this.isOptionalChainStart=!1,this.isOptionalChainEnd=!1,this.subscriptStartIndex=null,this.nullishStartIndex=null}}function u(){s.state.tokens.push(new h),v()}function k(e){return s.state.type===e}t.Token=h,t.next=u,t.nextTemplateToken=function(){s.state.tokens.push(new h),s.state.start=s.state.pos,function(){for(;;){if(s.state.pos>=s.input.length)return void r.unexpected.call(void 0,"Unterminated template");const e=s.input.charCodeAt(s.state.pos);if(e===i.charCodes.graveAccent||e===i.charCodes.dollarSign&&s.input.charCodeAt(s.state.pos+1)===i.charCodes.leftCurlyBrace)return s.state.pos===s.state.start&&k(T.TokenType.template)?e===i.charCodes.dollarSign?(s.state.pos+=2,void g(T.TokenType.dollarBraceL)):(++s.state.pos,void g(T.TokenType.backQuote)):void g(T.TokenType.template);e===i.charCodes.backslash&&s.state.pos++,s.state.pos++}}()},t.retokenizeSlashAsRegex=function(){s.state.type===T.TokenType.assign&&--s.state.pos,function(){const e=s.state.pos;let t=!1,o=!1;for(;;){if(s.state.pos>=s.input.length)return void r.unexpected.call(void 0,"Unterminated regular expression",e);const n=s.input.charCodeAt(s.state.pos);if(t)t=!1;else{if(n===i.charCodes.leftSquareBracket)o=!0;else if(n===i.charCodes.rightSquareBracket&&o)o=!1;else if(n===i.charCodes.slash&&!o)break;t=n===i.charCodes.backslash}++s.state.pos}++s.state.pos,S(),g(T.TokenType.regexp)}()},t.pushTypeContext=function(e){for(let t=s.state.tokens.length-e;t<s.state.tokens.length;t++)s.state.tokens[t].isType=!0;const t=s.state.isType;return s.state.isType=!0,t},t.popTypeContext=function(e){s.state.isType=e},t.eat=function(e){return!!k(e)&&(u(),!0)},t.match=k,t.lookaheadType=function(){const e=s.state.snapshot();u();const t=s.state.type;return s.state.restoreFromSnapshot(e),t};class y{constructor(e,t){this.type=e,this.contextualKeyword=t}}function f(){return m(s.state.pos)}function m(e){return l.skipWhiteSpace.lastIndex=e,e+l.skipWhiteSpace.exec(s.input)[0].length}function v(){if(C(),s.state.start=s.state.pos,s.state.pos>=s.input.length){const e=s.state.tokens;return e.length>=2&&e[e.length-1].start>=s.input.length&&e[e.length-2].start>=s.input.length&&r.unexpected.call(void 0,"Unexpectedly reached the end of input."),void g(T.TokenType.eof)}var e;e=s.input.charCodeAt(s.state.pos),c.IS_IDENTIFIER_START[e]||e===i.charCodes.backslash||e===i.charCodes.atSign&&s.input.charCodeAt(s.state.pos+1)===i.charCodes.atSign?d.default.call(void 0):b(e)}function x(){for(;s.input.charCodeAt(s.state.pos)!==i.charCodes.asterisk||s.input.charCodeAt(s.state.pos+1)!==i.charCodes.slash;)if(s.state.pos++,s.state.pos>s.input.length)return void r.unexpected.call(void 0,"Unterminated comment",s.state.pos-2);s.state.pos+=2}function _(e){let t=s.input.charCodeAt(s.state.pos+=e);if(s.state.pos<s.input.length)for(;t!==i.charCodes.lineFeed&&t!==i.charCodes.carriageReturn&&t!==i.charCodes.lineSeparator&&t!==i.charCodes.paragraphSeparator&&++s.state.pos<s.input.length;)t=s.input.charCodeAt(s.state.pos)}function C(){for(;s.state.pos<s.input.length;){const e=s.input.charCodeAt(s.state.pos);switch(e){case i.charCodes.carriageReturn:s.input.charCodeAt(s.state.pos+1)===i.charCodes.lineFeed&&++s.state.pos;case i.charCodes.lineFeed:case i.charCodes.lineSeparator:case i.charCodes.paragraphSeparator:++s.state.pos;break;case i.charCodes.slash:switch(s.input.charCodeAt(s.state.pos+1)){case i.charCodes.asterisk:s.state.pos+=2,x();break;case i.charCodes.slash:_(2);break;default:return}break;default:if(!l.IS_WHITESPACE[e])return;++s.state.pos}}}function g(e,t=p.ContextualKeyword.NONE){s.state.end=s.state.pos,s.state.type=e,s.state.contextualKeyword=t}function b(e){switch(e){case i.charCodes.numberSign:return++s.state.pos,void g(T.TokenType.hash);case i.charCodes.dot:return void function(){const e=s.input.charCodeAt(s.state.pos+1);e>=i.charCodes.digit0&&e<=i.charCodes.digit9?E(!0):e===i.charCodes.dot&&s.input.charCodeAt(s.state.pos+2)===i.charCodes.dot?(s.state.pos+=3,g(T.TokenType.ellipsis)):(++s.state.pos,g(T.TokenType.dot))}();case i.charCodes.leftParenthesis:return++s.state.pos,void g(T.TokenType.parenL);case i.charCodes.rightParenthesis:return++s.state.pos,void g(T.TokenType.parenR);case i.charCodes.semicolon:return++s.state.pos,void g(T.TokenType.semi);case i.charCodes.comma:return++s.state.pos,void g(T.TokenType.comma);case i.charCodes.leftSquareBracket:return++s.state.pos,void g(T.TokenType.bracketL);case i.charCodes.rightSquareBracket:return++s.state.pos,void g(T.TokenType.bracketR);case i.charCodes.leftCurlyBrace:return void(s.isFlowEnabled&&s.input.charCodeAt(s.state.pos+1)===i.charCodes.verticalBar?w(T.TokenType.braceBarL,2):(++s.state.pos,g(T.TokenType.braceL)));case i.charCodes.rightCurlyBrace:return++s.state.pos,void g(T.TokenType.braceR);case i.charCodes.colon:return void(s.input.charCodeAt(s.state.pos+1)===i.charCodes.colon?w(T.TokenType.doubleColon,2):(++s.state.pos,g(T.TokenType.colon)));case i.charCodes.questionMark:return void function(){const e=s.input.charCodeAt(s.state.pos+1),t=s.input.charCodeAt(s.state.pos+2);e!==i.charCodes.questionMark||s.state.isType?e!==i.charCodes.dot||t>=i.charCodes.digit0&&t<=i.charCodes.digit9?(++s.state.pos,g(T.TokenType.question)):(s.state.pos+=2,g(T.TokenType.questionDot)):t===i.charCodes.equalsTo?w(T.TokenType.assign,3):w(T.TokenType.nullishCoalescing,2)}();case i.charCodes.atSign:return++s.state.pos,void g(T.TokenType.at);case i.charCodes.graveAccent:return++s.state.pos,void g(T.TokenType.backQuote);case i.charCodes.digit0:{const e=s.input.charCodeAt(s.state.pos+1);if(e===i.charCodes.lowercaseX||e===i.charCodes.uppercaseX||e===i.charCodes.lowercaseO||e===i.charCodes.uppercaseO||e===i.charCodes.lowercaseB||e===i.charCodes.uppercaseB)return void function(){let e=!1;const t=s.state.pos;s.state.pos+=2,I();const o=s.input.charCodeAt(s.state.pos);o===i.charCodes.lowercaseN?(++s.state.pos,e=!0):o===i.charCodes.lowercaseM&&r.unexpected.call(void 0,"Invalid decimal",t),g(e?T.TokenType.bigint:T.TokenType.num)}()}case i.charCodes.digit1:case i.charCodes.digit2:case i.charCodes.digit3:case i.charCodes.digit4:case i.charCodes.digit5:case i.charCodes.digit6:case i.charCodes.digit7:case i.charCodes.digit8:case i.charCodes.digit9:return void E(!1);case i.charCodes.quotationMark:case i.charCodes.apostrophe:return void function(e){for(s.state.pos++;;){if(s.state.pos>=s.input.length)return void r.unexpected.call(void 0,"Unterminated string constant");const t=s.input.charCodeAt(s.state.pos);if(t===i.charCodes.backslash)s.state.pos++;else if(t===e)break;s.state.pos++}s.state.pos++,g(T.TokenType.string)}(e);case i.charCodes.slash:return void(s.input.charCodeAt(s.state.pos+1)===i.charCodes.equalsTo?w(T.TokenType.assign,2):w(T.TokenType.slash,1));case i.charCodes.percentSign:case i.charCodes.asterisk:return void function(e){let t=e===i.charCodes.asterisk?T.TokenType.star:T.TokenType.modulo,o=1,n=s.input.charCodeAt(s.state.pos+1);e===i.charCodes.asterisk&&n===i.charCodes.asterisk&&(o++,n=s.input.charCodeAt(s.state.pos+2),t=T.TokenType.exponent),n===i.charCodes.equalsTo&&s.input.charCodeAt(s.state.pos+2)!==i.charCodes.greaterThan&&(o++,t=T.TokenType.assign),w(t,o)}(e);case i.charCodes.verticalBar:case i.charCodes.ampersand:return void function(e){const t=s.input.charCodeAt(s.state.pos+1);if(t!==e){if(e===i.charCodes.verticalBar){if(t===i.charCodes.greaterThan)return void w(T.TokenType.pipeline,2);if(t===i.charCodes.rightCurlyBrace&&s.isFlowEnabled)return void w(T.TokenType.braceBarR,2)}t!==i.charCodes.equalsTo?w(e===i.charCodes.verticalBar?T.TokenType.bitwiseOR:T.TokenType.bitwiseAND,1):w(T.TokenType.assign,2)}else s.input.charCodeAt(s.state.pos+2)===i.charCodes.equalsTo?w(T.TokenType.assign,3):w(e===i.charCodes.verticalBar?T.TokenType.logicalOR:T.TokenType.logicalAND,2)}(e);case i.charCodes.caret:return void(s.input.charCodeAt(s.state.pos+1)===i.charCodes.equalsTo?w(T.TokenType.assign,2):w(T.TokenType.bitwiseXOR,1));case i.charCodes.plusSign:case i.charCodes.dash:return void function(e){const t=s.input.charCodeAt(s.state.pos+1);t!==e?t===i.charCodes.equalsTo?w(T.TokenType.assign,2):e===i.charCodes.plusSign?w(T.TokenType.plus,1):w(T.TokenType.minus,1):w(T.TokenType.preIncDec,2)}(e);case i.charCodes.lessThan:case i.charCodes.greaterThan:return void function(e){const t=s.input.charCodeAt(s.state.pos+1);if(t===e){const t=e===i.charCodes.greaterThan&&s.input.charCodeAt(s.state.pos+2)===i.charCodes.greaterThan?3:2;return s.input.charCodeAt(s.state.pos+t)===i.charCodes.equalsTo?void w(T.TokenType.assign,t+1):e===i.charCodes.greaterThan&&s.state.isType?void w(T.TokenType.greaterThan,1):void w(T.TokenType.bitShift,t)}t===i.charCodes.equalsTo?w(T.TokenType.relationalOrEqual,2):e===i.charCodes.lessThan?w(T.TokenType.lessThan,1):w(T.TokenType.greaterThan,1)}(e);case i.charCodes.equalsTo:case i.charCodes.exclamationMark:return void function(e){const t=s.input.charCodeAt(s.state.pos+1);if(t!==i.charCodes.equalsTo)return e===i.charCodes.equalsTo&&t===i.charCodes.greaterThan?(s.state.pos+=2,void g(T.TokenType.arrow)):void w(e===i.charCodes.equalsTo?T.TokenType.eq:T.TokenType.bang,1);w(T.TokenType.equality,s.input.charCodeAt(s.state.pos+2)===i.charCodes.equalsTo?3:2)}(e);case i.charCodes.tilde:return void w(T.TokenType.tilde,1)}r.unexpected.call(void 0,`Unexpected character '${String.fromCharCode(e)}'`,s.state.pos)}function w(e,t){s.state.pos+=t,g(e)}function I(){for(;;){const e=s.input.charCodeAt(s.state.pos);if(!(e>=i.charCodes.digit0&&e<=i.charCodes.digit9||e>=i.charCodes.lowercaseA&&e<=i.charCodes.lowercaseF||e>=i.charCodes.uppercaseA&&e<=i.charCodes.uppercaseF||e===i.charCodes.underscore))break;s.state.pos++}}function E(e){let t=!1,o=!1;e||I();let n=s.input.charCodeAt(s.state.pos);n===i.charCodes.dot&&(++s.state.pos,I(),n=s.input.charCodeAt(s.state.pos)),n!==i.charCodes.uppercaseE&&n!==i.charCodes.lowercaseE||(n=s.input.charCodeAt(++s.state.pos),n!==i.charCodes.plusSign&&n!==i.charCodes.dash||++s.state.pos,I(),n=s.input.charCodeAt(s.state.pos)),n===i.charCodes.lowercaseN?(++s.state.pos,t=!0):n===i.charCodes.lowercaseM&&(++s.state.pos,o=!0),g(t?T.TokenType.bigint:o?T.TokenType.decimal:T.TokenType.num)}function S(){for(;s.state.pos<s.input.length;){const e=s.input.charCodeAt(s.state.pos);if(c.IS_IDENTIFIER_CHAR[e])s.state.pos++;else{if(e!==i.charCodes.backslash)break;if(s.state.pos+=2,s.input.charCodeAt(s.state.pos)===i.charCodes.leftCurlyBrace){for(;s.state.pos<s.input.length&&s.input.charCodeAt(s.state.pos)!==i.charCodes.rightCurlyBrace;)s.state.pos++;s.state.pos++}}}}t.TypeAndKeyword=y,t.lookaheadTypeAndKeyword=function(){const e=s.state.snapshot();u();const t=s.state.type,o=s.state.contextualKeyword;return s.state.restoreFromSnapshot(e),new y(t,o)},t.nextTokenStart=f,t.nextTokenStartSince=m,t.lookaheadCharCode=function(){return s.input.charCodeAt(f())},t.nextToken=v,t.skipLineComment=_,t.skipSpace=C,t.finishToken=g,t.getTokenFromCode=b,t.skipWord=S},53:(e,t)=>{var o;Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.NONE=0]="NONE",e[e._abstract=1]="_abstract",e[e._as=2]="_as",e[e._asserts=3]="_asserts",e[e._async=4]="_async",e[e._await=5]="_await",e[e._checks=6]="_checks",e[e._constructor=7]="_constructor",e[e._declare=8]="_declare",e[e._enum=9]="_enum",e[e._exports=10]="_exports",e[e._from=11]="_from",e[e._get=12]="_get",e[e._global=13]="_global",e[e._implements=14]="_implements",e[e._infer=15]="_infer",e[e._interface=16]="_interface",e[e._is=17]="_is",e[e._keyof=18]="_keyof",e[e._mixins=19]="_mixins",e[e._module=20]="_module",e[e._namespace=21]="_namespace",e[e._of=22]="_of",e[e._opaque=23]="_opaque",e[e._private=24]="_private",e[e._protected=25]="_protected",e[e._proto=26]="_proto",e[e._public=27]="_public",e[e._readonly=28]="_readonly",e[e._require=29]="_require",e[e._set=30]="_set",e[e._static=31]="_static",e[e._type=32]="_type",e[e._unique=33]="_unique"}(o||(t.ContextualKeyword=o={}))},7010:(e,t,o)=>{Object.defineProperty(t,"__esModule",{value:!0});var n=o(6251),a=o(5920),s=o(6742),r=o(7899),i=o(1509),c=o(9609);t.default=function(){let e=0,t=0,o=n.state.pos;for(;o<n.input.length&&(t=n.input.charCodeAt(o),!(t<a.charCodes.lowercaseA||t>a.charCodes.lowercaseZ));){const n=i.READ_WORD_TREE[e+(t-a.charCodes.lowercaseA)+1];if(-1===n)break;e=n,o++}const l=i.READ_WORD_TREE[e];if(l>-1&&!s.IS_IDENTIFIER_CHAR[t])return n.state.pos=o,void(1&l?r.finishToken.call(void 0,l>>>1):r.finishToken.call(void 0,c.TokenType.name,l>>>1));for(;o<n.input.length;){const e=n.input.charCodeAt(o);if(s.IS_IDENTIFIER_CHAR[e])o++;else if(e===a.charCodes.backslash){if(o+=2,n.input.charCodeAt(o)===a.charCodes.leftCurlyBrace){for(;o<n.input.length&&n.input.charCodeAt(o)!==a.charCodes.rightCurlyBrace;)o++;o++}}else{if(e!==a.charCodes.atSign||n.input.charCodeAt(o+1)!==a.charCodes.atSign)break;o+=2}}n.state.pos=o,r.finishToken.call(void 0,c.TokenType.name)}},1509:(e,t,o)=>{Object.defineProperty(t,"__esModule",{value:!0});var n=o(53),a=o(9609);const s=new Int32Array([-1,27,594,729,1566,2187,2673,3294,-1,3510,-1,4428,4563,4644,4941,5319,5508,-1,6048,6507,6966,7398,7560,7722,-1,7938,-1,-1,-1,54,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,243,-1,-1,-1,486,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,81,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,108,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,135,-1,-1,-1,-1,-1,-1,-1,-1,-1,162,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,189,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,216,-1,-1,-1,-1,-1,-1,n.ContextualKeyword._abstract<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,n.ContextualKeyword._as<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,270,-1,-1,-1,-1,-1,405,-1,-1,-1,-1,-1,-1,297,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,324,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,351,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,378,-1,-1,-1,-1,-1,-1,-1,n.ContextualKeyword._asserts<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,432,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,459,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,n.ContextualKeyword._async<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,513,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,540,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,567,-1,-1,-1,-1,-1,-1,n.ContextualKeyword._await<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,621,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,648,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,675,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,702,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(a.TokenType._break<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,756,-1,-1,-1,-1,-1,-1,918,-1,-1,-1,1053,-1,-1,1161,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,783,837,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,810,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(a.TokenType._case<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,864,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,891,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(a.TokenType._catch<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,945,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,972,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,999,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1026,-1,-1,-1,-1,-1,-1,-1,n.ContextualKeyword._checks<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1080,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1107,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1134,-1,-1,-1,-1,-1,-1,-1,1+(a.TokenType._class<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1188,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1215,1431,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1242,-1,-1,-1,-1,-1,-1,1+(a.TokenType._const<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1269,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1296,-1,-1,-1,-1,-1,-1,-1,-1,1323,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1350,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1377,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1404,-1,-1,-1,-1,-1,-1,-1,-1,n.ContextualKeyword._constructor<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1458,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1485,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1512,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1539,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(a.TokenType._continue<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1593,-1,-1,-1,-1,-1,-1,-1,-1,-1,2160,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1620,1782,-1,-1,1917,-1,-1,-1,-1,-1,2052,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1647,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1674,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1701,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1728,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1755,-1,-1,-1,-1,-1,-1,-1,-1,1+(a.TokenType._debugger<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1809,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1836,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1863,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1890,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,n.ContextualKeyword._declare<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1944,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1971,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1998,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2025,-1,-1,-1,-1,-1,-1,1+(a.TokenType._default<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2079,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2106,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2133,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(a.TokenType._delete<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(a.TokenType._do<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2214,-1,2295,-1,-1,-1,-1,-1,-1,-1,-1,-1,2376,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2241,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2268,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(a.TokenType._else<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2322,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2349,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,n.ContextualKeyword._enum<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2403,-1,-1,-1,2538,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2430,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2457,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2484,-1,-1,-1,-1,-1,-1,1+(a.TokenType._export<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2511,-1,-1,-1,-1,-1,-1,-1,n.ContextualKeyword._exports<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2565,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2592,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2619,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2646,-1,-1,-1,-1,-1,-1,-1,1+(a.TokenType._extends<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2700,-1,-1,-1,-1,-1,-1,-1,2808,-1,-1,-1,-1,-1,2970,-1,-1,3024,-1,-1,3105,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2727,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2754,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2781,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(a.TokenType._false<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2835,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2862,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2889,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2916,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2943,-1,1+(a.TokenType._finally<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2997,-1,-1,-1,-1,-1,-1,-1,-1,1+(a.TokenType._for<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3051,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3078,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,n.ContextualKeyword._from<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3132,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3159,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3186,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3213,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3240,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3267,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(a.TokenType._function<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3321,-1,-1,-1,-1,-1,-1,3375,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3348,-1,-1,-1,-1,-1,-1,n.ContextualKeyword._get<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3402,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3429,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3456,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3483,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,n.ContextualKeyword._global<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3537,-1,-1,-1,-1,-1,-1,3564,3888,-1,-1,-1,-1,4401,-1,-1,-1,-1,-1,-1,-1,1+(a.TokenType._if<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3591,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3618,-1,-1,3807,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3645,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3672,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3699,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3726,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3753,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3780,-1,-1,-1,-1,-1,-1,-1,n.ContextualKeyword._implements<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3834,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3861,-1,-1,-1,-1,-1,-1,1+(a.TokenType._import<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(a.TokenType._in<<1),-1,-1,-1,-1,-1,3915,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3996,4212,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3942,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3969,-1,-1,-1,-1,-1,-1,-1,-1,n.ContextualKeyword._infer<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4023,-1,-1,-1,-1,-1,-1,-1,4050,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4077,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4104,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4131,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4158,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4185,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(a.TokenType._instanceof<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4239,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4266,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4293,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4320,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4347,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4374,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,n.ContextualKeyword._interface<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,n.ContextualKeyword._is<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4455,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4482,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4509,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4536,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,n.ContextualKeyword._keyof<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4590,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4617,-1,-1,-1,-1,-1,-1,1+(a.TokenType._let<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4671,-1,-1,-1,-1,-1,4806,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4698,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4725,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4752,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4779,-1,-1,-1,-1,-1,-1,-1,n.ContextualKeyword._mixins<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4833,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4860,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4887,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4914,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,n.ContextualKeyword._module<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4968,-1,-1,-1,5184,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5238,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4995,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5022,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5049,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5076,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5103,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5130,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5157,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,n.ContextualKeyword._namespace<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5211,-1,-1,-1,1+(a.TokenType._new<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5265,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5292,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(a.TokenType._null<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5346,-1,-1,-1,-1,-1,-1,-1,-1,-1,5373,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,n.ContextualKeyword._of<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5400,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5427,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5454,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5481,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,n.ContextualKeyword._opaque<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5535,-1,-1,5913,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5562,-1,-1,-1,-1,-1,5697,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5589,-1,-1,-1,-1,-1,5616,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5643,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5670,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,n.ContextualKeyword._private<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5724,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5751,-1,-1,-1,-1,-1,-1,-1,-1,-1,5886,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5778,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5805,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5832,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5859,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,n.ContextualKeyword._protected<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,n.ContextualKeyword._proto<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5940,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5967,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5994,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6021,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,n.ContextualKeyword._public<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6075,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6102,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6264,-1,-1,6399,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6129,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6156,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6183,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6210,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6237,-1,n.ContextualKeyword._readonly<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6291,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6318,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6345,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6372,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,n.ContextualKeyword._require<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6426,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6453,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6480,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(a.TokenType._return<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6534,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6588,6723,-1,6831,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6561,-1,-1,-1,-1,-1,-1,n.ContextualKeyword._set<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6615,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6642,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6669,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6696,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,n.ContextualKeyword._static<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6750,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6777,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6804,-1,-1,-1,-1,-1,-1,-1,-1,1+(a.TokenType._super<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6858,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6885,-1,-1,-1,-1,-1,-1,-1,-1,-1,6912,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6939,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(a.TokenType._switch<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6993,-1,-1,-1,-1,-1,-1,-1,-1,-1,7155,-1,-1,-1,-1,-1,-1,7263,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7020,-1,-1,-1,-1,-1,-1,-1,-1,7074,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7047,-1,-1,-1,-1,-1,-1,-1,1+(a.TokenType._this<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7101,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7128,-1,-1,-1,1+(a.TokenType._throw<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7182,-1,-1,-1,7236,-1,-1,-1,-1,-1,-1,7209,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(a.TokenType._true<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(a.TokenType._try<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7290,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7317,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,n.ContextualKeyword._type<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7344,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7371,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(a.TokenType._typeof<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7425,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7452,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7479,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7506,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7533,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,n.ContextualKeyword._unique<<1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7587,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7641,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7614,-1,-1,-1,-1,-1,-1,-1,-1,1+(a.TokenType._var<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7668,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7695,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(a.TokenType._void<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7749,7857,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7776,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7803,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7830,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(a.TokenType._while<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7884,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7911,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(a.TokenType._with<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7965,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7992,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8019,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8046,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1+(a.TokenType._yield<<1),-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]);t.READ_WORD_TREE=s},5838:(e,t,o)=>{Object.defineProperty(t,"__esModule",{value:!0});var n=o(53),a=o(9609);t.Scope=class{constructor(e,t,o){this.startTokenIndex=e,this.endTokenIndex=t,this.isFunctionScope=o}};class s{constructor(e,t,o,n,a,s,r,i,c,l,p,d){this.potentialArrowAt=e,this.noAnonFunctionType=t,this.tokensLength=o,this.scopesLength=n,this.pos=a,this.type=s,this.contextualKeyword=r,this.start=i,this.end=c,this.isType=l,this.scopeDepth=p,this.error=d}}t.StateSnapshot=s;class r{constructor(){r.prototype.__init.call(this),r.prototype.__init2.call(this),r.prototype.__init3.call(this),r.prototype.__init4.call(this),r.prototype.__init5.call(this),r.prototype.__init6.call(this),r.prototype.__init7.call(this),r.prototype.__init8.call(this),r.prototype.__init9.call(this),r.prototype.__init10.call(this),r.prototype.__init11.call(this),r.prototype.__init12.call(this)}__init(){this.potentialArrowAt=-1}__init2(){this.noAnonFunctionType=!1}__init3(){this.tokens=[]}__init4(){this.scopes=[]}__init5(){this.pos=0}__init6(){this.type=a.TokenType.eof}__init7(){this.contextualKeyword=n.ContextualKeyword.NONE}__init8(){this.start=0}__init9(){this.end=0}__init10(){this.isType=!1}__init11(){this.scopeDepth=0}__init12(){this.error=null}snapshot(){return new s(this.potentialArrowAt,this.noAnonFunctionType,this.tokens.length,this.scopes.length,this.pos,this.type,this.contextualKeyword,this.start,this.end,this.isType,this.scopeDepth,this.error)}restoreFromSnapshot(e){this.potentialArrowAt=e.potentialArrowAt,this.noAnonFunctionType=e.noAnonFunctionType,this.tokens.length=e.tokensLength,this.scopes.length=e.scopesLength,this.pos=e.pos,this.type=e.type,this.contextualKeyword=e.contextualKeyword,this.start=e.start,this.end=e.end,this.isType=e.isType,this.scopeDepth=e.scopeDepth,this.error=e.error}}t.default=r},9609:(e,t)=>{var o;Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.PRECEDENCE_MASK=15]="PRECEDENCE_MASK",e[e.IS_KEYWORD=16]="IS_KEYWORD",e[e.IS_ASSIGN=32]="IS_ASSIGN",e[e.IS_RIGHT_ASSOCIATIVE=64]="IS_RIGHT_ASSOCIATIVE",e[e.IS_PREFIX=128]="IS_PREFIX",e[e.IS_POSTFIX=256]="IS_POSTFIX",e[e.num=0]="num",e[e.bigint=512]="bigint",e[e.decimal=1024]="decimal",e[e.regexp=1536]="regexp",e[e.string=2048]="string",e[e.name=2560]="name",e[e.eof=3072]="eof",e[e.bracketL=3584]="bracketL",e[e.bracketR=4096]="bracketR",e[e.braceL=4608]="braceL",e[e.braceBarL=5120]="braceBarL",e[e.braceR=5632]="braceR",e[e.braceBarR=6144]="braceBarR",e[e.parenL=6656]="parenL",e[e.parenR=7168]="parenR",e[e.comma=7680]="comma",e[e.semi=8192]="semi",e[e.colon=8704]="colon",e[e.doubleColon=9216]="doubleColon",e[e.dot=9728]="dot",e[e.question=10240]="question",e[e.questionDot=10752]="questionDot",e[e.arrow=11264]="arrow",e[e.template=11776]="template",e[e.ellipsis=12288]="ellipsis",e[e.backQuote=12800]="backQuote",e[e.dollarBraceL=13312]="dollarBraceL",e[e.at=13824]="at",e[e.hash=14336]="hash",e[e.eq=14880]="eq",e[e.assign=15392]="assign",e[e.preIncDec=16256]="preIncDec",e[e.postIncDec=16768]="postIncDec",e[e.bang=17024]="bang",e[e.tilde=17536]="tilde",e[e.pipeline=17921]="pipeline",e[e.nullishCoalescing=18434]="nullishCoalescing",e[e.logicalOR=18946]="logicalOR",e[e.logicalAND=19459]="logicalAND",e[e.bitwiseOR=19972]="bitwiseOR",e[e.bitwiseXOR=20485]="bitwiseXOR",e[e.bitwiseAND=20998]="bitwiseAND",e[e.equality=21511]="equality",e[e.lessThan=22024]="lessThan",e[e.greaterThan=22536]="greaterThan",e[e.relationalOrEqual=23048]="relationalOrEqual",e[e.bitShift=23561]="bitShift",e[e.plus=24202]="plus",e[e.minus=24714]="minus",e[e.modulo=25099]="modulo",e[e.star=25611]="star",e[e.slash=26123]="slash",e[e.exponent=26700]="exponent",e[e.jsxName=27136]="jsxName",e[e.jsxText=27648]="jsxText",e[e.jsxTagStart=28160]="jsxTagStart",e[e.jsxTagEnd=28672]="jsxTagEnd",e[e.typeParameterStart=29184]="typeParameterStart",e[e.nonNullAssertion=29696]="nonNullAssertion",e[e._break=30224]="_break",e[e._case=30736]="_case",e[e._catch=31248]="_catch",e[e._continue=31760]="_continue",e[e._debugger=32272]="_debugger",e[e._default=32784]="_default",e[e._do=33296]="_do",e[e._else=33808]="_else",e[e._finally=34320]="_finally",e[e._for=34832]="_for",e[e._function=35344]="_function",e[e._if=35856]="_if",e[e._return=36368]="_return",e[e._switch=36880]="_switch",e[e._throw=37520]="_throw",e[e._try=37904]="_try",e[e._var=38416]="_var",e[e._let=38928]="_let",e[e._const=39440]="_const",e[e._while=39952]="_while",e[e._with=40464]="_with",e[e._new=40976]="_new",e[e._this=41488]="_this",e[e._super=42e3]="_super",e[e._class=42512]="_class",e[e._extends=43024]="_extends",e[e._export=43536]="_export",e[e._import=44048]="_import",e[e._yield=44560]="_yield",e[e._null=45072]="_null",e[e._true=45584]="_true",e[e._false=46096]="_false",e[e._in=46616]="_in",e[e._instanceof=47128]="_instanceof",e[e._typeof=47760]="_typeof",e[e._void=48272]="_void",e[e._delete=48784]="_delete",e[e._async=49168]="_async",e[e._get=49680]="_get",e[e._set=50192]="_set",e[e._declare=50704]="_declare",e[e._readonly=51216]="_readonly",e[e._abstract=51728]="_abstract",e[e._static=52240]="_static",e[e._public=52752]="_public",e[e._private=53264]="_private",e[e._protected=53776]="_protected",e[e._as=54288]="_as",e[e._enum=54800]="_enum",e[e._type=55312]="_type",e[e._implements=55824]="_implements"}(o||(t.TokenType=o={})),t.formatTokenType=function(e){switch(e){case o.num:return"num";case o.bigint:return"bigint";case o.decimal:return"decimal";case o.regexp:return"regexp";case o.string:return"string";case o.name:return"name";case o.eof:return"eof";case o.bracketL:return"[";case o.bracketR:return"]";case o.braceL:return"{";case o.braceBarL:return"{|";case o.braceR:return"}";case o.braceBarR:return"|}";case o.parenL:return"(";case o.parenR:return")";case o.comma:return",";case o.semi:return";";case o.colon:return":";case o.doubleColon:return"::";case o.dot:return".";case o.question:return"?";case o.questionDot:return"?.";case o.arrow:return"=>";case o.template:return"template";case o.ellipsis:return"...";case o.backQuote:return"`";case o.dollarBraceL:return"${";case o.at:return"@";case o.hash:return"#";case o.eq:return"=";case o.assign:return"_=";case o.preIncDec:case o.postIncDec:return"++/--";case o.bang:return"!";case o.tilde:return"~";case o.pipeline:return"|>";case o.nullishCoalescing:return"??";case o.logicalOR:return"||";case o.logicalAND:return"&&";case o.bitwiseOR:return"|";case o.bitwiseXOR:return"^";case o.bitwiseAND:return"&";case o.equality:return"==/!=";case o.lessThan:return"<";case o.greaterThan:return">";case o.relationalOrEqual:return"<=/>=";case o.bitShift:return"<</>>";case o.plus:return"+";case o.minus:return"-";case o.modulo:return"%";case o.star:return"*";case o.slash:return"/";case o.exponent:return"**";case o.jsxName:return"jsxName";case o.jsxText:return"jsxText";case o.jsxTagStart:return"jsxTagStart";case o.jsxTagEnd:return"jsxTagEnd";case o.typeParameterStart:return"typeParameterStart";case o.nonNullAssertion:return"nonNullAssertion";case o._break:return"break";case o._case:return"case";case o._catch:return"catch";case o._continue:return"continue";case o._debugger:return"debugger";case o._default:return"default";case o._do:return"do";case o._else:return"else";case o._finally:return"finally";case o._for:return"for";case o._function:return"function";case o._if:return"if";case o._return:return"return";case o._switch:return"switch";case o._throw:return"throw";case o._try:return"try";case o._var:return"var";case o._let:return"let";case o._const:return"const";case o._while:return"while";case o._with:return"with";case o._new:return"new";case o._this:return"this";case o._super:return"super";case o._class:return"class";case o._extends:return"extends";case o._export:return"export";case o._import:return"import";case o._yield:return"yield";case o._null:return"null";case o._true:return"true";case o._false:return"false";case o._in:return"in";case o._instanceof:return"instanceof";case o._typeof:return"typeof";case o._void:return"void";case o._delete:return"delete";case o._async:return"async";case o._get:return"get";case o._set:return"set";case o._declare:return"declare";case o._readonly:return"readonly";case o._abstract:return"abstract";case o._static:return"static";case o._public:return"public";case o._private:return"private";case o._protected:return"protected";case o._as:return"as";case o._enum:return"enum";case o._type:return"type";case o._implements:return"implements";default:return""}}},6251:(e,t,o)=>{Object.defineProperty(t,"__esModule",{value:!0});var n,a=(n=o(5838))&&n.__esModule?n:{default:n},s=o(5920);t.isJSXEnabled,t.isTypeScriptEnabled,t.isFlowEnabled,t.state,t.input,t.nextContextId,t.getNextContextId=function(){return t.nextContextId++},t.augmentError=function(e){if("pos"in e){const t=i(e.pos);e.message+=` (${t.line}:${t.column})`,e.loc=t}return e};class r{constructor(e,t){this.line=e,this.column=t}}function i(e){let o=1,n=1;for(let a=0;a<e;a++)t.input.charCodeAt(a)===s.charCodes.lineFeed?(o++,n=1):n++;return new r(o,n)}t.Loc=r,t.locationForIndex=i,t.initParser=function(e,o,n,s){t.input=e,t.state=new(0,a.default),t.nextContextId=1,t.isJSXEnabled=o,t.isTypeScriptEnabled=n,t.isFlowEnabled=s}},2276:(e,t,o)=>{Object.defineProperty(t,"__esModule",{value:!0});var n=o(905),a=o(8583),s=o(2791),r=o(8094),i=o(7899),c=o(53),l=o(5838),p=o(9609),d=o(5920),T=o(6742),h=o(6251),u=o(6689),k=o(7233),y=o(799);class f{constructor(e){this.stop=e}}function m(e=!1){if(v(e),i.match.call(void 0,p.TokenType.comma))for(;i.eat.call(void 0,p.TokenType.comma);)v(e)}function v(e=!1,t=!1){return h.isTypeScriptEnabled?r.tsParseMaybeAssign.call(void 0,e,t):h.isFlowEnabled?n.flowParseMaybeAssign.call(void 0,e,t):x(e,t)}function x(e,t){if(i.match.call(void 0,p.TokenType._yield))return i.next.call(void 0),i.match.call(void 0,p.TokenType.semi)||y.canInsertSemicolon.call(void 0)||(i.eat.call(void 0,p.TokenType.star),v()),!1;(i.match.call(void 0,p.TokenType.parenL)||i.match.call(void 0,p.TokenType.name)||i.match.call(void 0,p.TokenType._yield))&&(h.state.potentialArrowAt=h.state.start);const o=function(e){return!!function(e){const t=h.state.tokens.length;return!!g()||(C(t,-1,e),!1)}(e)||(function(e){h.isTypeScriptEnabled||h.isFlowEnabled?s.typedParseConditional.call(void 0,e):_(e)}(e),!1)}(e);return t&&K(),h.state.type&p.TokenType.IS_ASSIGN?(i.next.call(void 0),v(e),!1):o}function _(e){i.eat.call(void 0,p.TokenType.question)&&(v(),y.expect.call(void 0,p.TokenType.colon),v(e))}function C(e,t,o){if(h.isTypeScriptEnabled&&(p.TokenType._in&p.TokenType.PRECEDENCE_MASK)>t&&!y.hasPrecedingLineBreak.call(void 0)&&y.eatContextual.call(void 0,c.ContextualKeyword._as)){h.state.tokens[h.state.tokens.length-1].type=p.TokenType._as;const n=i.pushTypeContext.call(void 0,1);return r.tsParseType.call(void 0),i.popTypeContext.call(void 0,n),void C(e,t,o)}const n=h.state.type&p.TokenType.PRECEDENCE_MASK;if(n>0&&(!o||!i.match.call(void 0,p.TokenType._in))&&n>t){const a=h.state.type;i.next.call(void 0),a===p.TokenType.nullishCoalescing&&(h.state.tokens[h.state.tokens.length-1].nullishStartIndex=e);const s=h.state.tokens.length;g(),C(s,a&p.TokenType.IS_RIGHT_ASSOCIATIVE?n-1:n,o),a===p.TokenType.nullishCoalescing&&(h.state.tokens[e].numNullishCoalesceStarts++,h.state.tokens[h.state.tokens.length-1].numNullishCoalesceEnds++),C(e,t,o)}}function g(){if(h.isTypeScriptEnabled&&!h.isJSXEnabled&&i.eat.call(void 0,p.TokenType.lessThan))return r.tsParseTypeAssertion.call(void 0),!1;if(h.state.type&p.TokenType.IS_PREFIX)return i.next.call(void 0),g(),!1;if(b())return!0;for(;h.state.type&p.TokenType.IS_POSTFIX&&!y.canInsertSemicolon.call(void 0);)h.state.type===p.TokenType.preIncDec&&(h.state.type=p.TokenType.postIncDec),i.next.call(void 0);return!1}function b(){const e=h.state.tokens.length;return!!R()||(w(e),h.state.tokens.length>e&&h.state.tokens[e].isOptionalChainStart&&(h.state.tokens[h.state.tokens.length-1].isOptionalChainEnd=!0),!1)}function w(e,t=!1){h.isFlowEnabled?n.flowParseSubscripts.call(void 0,e,t):I(e,t)}function I(e,t=!1){const o=new f(!1);do{E(e,t,o)}while(!o.stop&&!h.state.error)}function E(e,t,o){h.isTypeScriptEnabled?r.tsParseSubscript.call(void 0,e,t,o):h.isFlowEnabled?n.flowParseSubscript.call(void 0,e,t,o):S(e,t,o)}function S(e,t,o){if(!t&&i.eat.call(void 0,p.TokenType.doubleColon))N(),o.stop=!0,w(e,t);else if(i.match.call(void 0,p.TokenType.questionDot)){if(h.state.tokens[e].isOptionalChainStart=!0,t&&i.lookaheadType.call(void 0)===p.TokenType.parenL)return void(o.stop=!0);i.next.call(void 0),h.state.tokens[h.state.tokens.length-1].subscriptStartIndex=e,i.eat.call(void 0,p.TokenType.bracketL)?(m(),y.expect.call(void 0,p.TokenType.bracketR)):i.eat.call(void 0,p.TokenType.parenL)?P():L()}else if(i.eat.call(void 0,p.TokenType.dot))h.state.tokens[h.state.tokens.length-1].subscriptStartIndex=e,L();else if(i.eat.call(void 0,p.TokenType.bracketL))h.state.tokens[h.state.tokens.length-1].subscriptStartIndex=e,m(),y.expect.call(void 0,p.TokenType.bracketR);else if(!t&&i.match.call(void 0,p.TokenType.parenL))if(A()){const t=h.state.snapshot(),a=h.state.tokens.length;i.next.call(void 0),h.state.tokens[h.state.tokens.length-1].subscriptStartIndex=e;const s=h.getNextContextId.call(void 0);h.state.tokens[h.state.tokens.length-1].contextId=s,P(),h.state.tokens[h.state.tokens.length-1].contextId=s,(i.match.call(void 0,p.TokenType.colon)||i.match.call(void 0,p.TokenType.arrow))&&(h.state.restoreFromSnapshot(t),o.stop=!0,h.state.scopeDepth++,k.parseFunctionParams.call(void 0),function(e){h.isTypeScriptEnabled?r.tsStartParseAsyncArrowFromCallExpression.call(void 0):h.isFlowEnabled&&n.flowStartParseAsyncArrowFromCallExpression.call(void 0),y.expect.call(void 0,p.TokenType.arrow),$(e)}(a))}else{i.next.call(void 0),h.state.tokens[h.state.tokens.length-1].subscriptStartIndex=e;const t=h.getNextContextId.call(void 0);h.state.tokens[h.state.tokens.length-1].contextId=t,P(),h.state.tokens[h.state.tokens.length-1].contextId=t}else i.match.call(void 0,p.TokenType.backQuote)?F():o.stop=!0}function A(){return h.state.tokens[h.state.tokens.length-1].contextualKeyword===c.ContextualKeyword._async&&!y.canInsertSemicolon.call(void 0)}function P(){let e=!0;for(;!i.eat.call(void 0,p.TokenType.parenR)&&!h.state.error;){if(e)e=!1;else if(y.expect.call(void 0,p.TokenType.comma),i.eat.call(void 0,p.TokenType.parenR))break;U(!1)}}function N(){const e=h.state.tokens.length;R(),w(e,!0)}function R(){if(i.eat.call(void 0,p.TokenType.modulo))return X(),!1;if(i.match.call(void 0,p.TokenType.jsxText))return O(),!1;if(i.match.call(void 0,p.TokenType.lessThan)&&h.isJSXEnabled)return h.state.type=p.TokenType.jsxTagStart,a.jsxParseElement.call(void 0),i.next.call(void 0),!1;const e=h.state.potentialArrowAt===h.state.start;switch(h.state.type){case p.TokenType.slash:case p.TokenType.assign:i.retokenizeSlashAsRegex.call(void 0);case p.TokenType._super:case p.TokenType._this:case p.TokenType.regexp:case p.TokenType.num:case p.TokenType.bigint:case p.TokenType.decimal:case p.TokenType.string:case p.TokenType._null:case p.TokenType._true:case p.TokenType._false:return i.next.call(void 0),!1;case p.TokenType._import:return i.next.call(void 0),i.match.call(void 0,p.TokenType.dot)&&(h.state.tokens[h.state.tokens.length-1].type=p.TokenType.name,i.next.call(void 0),X()),!1;case p.TokenType.name:{const t=h.state.tokens.length,o=h.state.start,n=h.state.contextualKeyword;return X(),n===c.ContextualKeyword._await?(g(),!1):n===c.ContextualKeyword._async&&i.match.call(void 0,p.TokenType._function)&&!y.canInsertSemicolon.call(void 0)?(i.next.call(void 0),k.parseFunction.call(void 0,o,!1),!1):e&&!y.canInsertSemicolon.call(void 0)&&n===c.ContextualKeyword._async&&i.match.call(void 0,p.TokenType.name)?(h.state.scopeDepth++,u.parseBindingIdentifier.call(void 0,!1),y.expect.call(void 0,p.TokenType.arrow),$(t),!0):e&&!y.canInsertSemicolon.call(void 0)&&i.match.call(void 0,p.TokenType.arrow)?(h.state.scopeDepth++,u.markPriorBindingIdentifier.call(void 0,!1),y.expect.call(void 0,p.TokenType.arrow),$(t),!0):(h.state.tokens[h.state.tokens.length-1].identifierRole=i.IdentifierRole.Access,!1)}case p.TokenType._do:return i.next.call(void 0),k.parseBlock.call(void 0),!1;case p.TokenType.parenL:return function(e){const t=h.state.snapshot(),o=h.state.tokens.length;y.expect.call(void 0,p.TokenType.parenL);let n=!0;for(;!i.match.call(void 0,p.TokenType.parenR)&&!h.state.error;){if(n)n=!1;else if(y.expect.call(void 0,p.TokenType.comma),i.match.call(void 0,p.TokenType.parenR))break;if(i.match.call(void 0,p.TokenType.ellipsis)){u.parseRest.call(void 0,!1),K();break}v(!1,!0)}return y.expect.call(void 0,p.TokenType.parenR),!(!e||!i.match.call(void 0,p.TokenType.colon)&&y.canInsertSemicolon.call(void 0)||!D())&&(h.state.restoreFromSnapshot(t),h.state.scopeDepth++,k.parseFunctionParams.call(void 0),D(),$(o),!0)}(e);case p.TokenType.bracketL:return i.next.call(void 0),W(p.TokenType.bracketR,!0),!1;case p.TokenType.braceL:return j(!1,!1),!1;case p.TokenType._function:return function(){const e=h.state.start;X(),i.eat.call(void 0,p.TokenType.dot)&&X(),k.parseFunction.call(void 0,e,!1)}(),!1;case p.TokenType.at:k.parseDecorators.call(void 0);case p.TokenType._class:return k.parseClass.call(void 0,!1),!1;case p.TokenType._new:return y.expect.call(void 0,p.TokenType._new),i.eat.call(void 0,p.TokenType.dot)?X():(N(),i.eat.call(void 0,p.TokenType.questionDot),h.isTypeScriptEnabled?r.tsStartParseNewArguments.call(void 0):h.isFlowEnabled&&n.flowStartParseNewArguments.call(void 0),i.eat.call(void 0,p.TokenType.parenL)&&W(p.TokenType.parenR)),!1;case p.TokenType.backQuote:return F(),!1;case p.TokenType.doubleColon:return i.next.call(void 0),N(),!1;case p.TokenType.hash:{const e=i.lookaheadCharCode.call(void 0);return T.IS_IDENTIFIER_START[e]||e===d.charCodes.backslash?L():i.next.call(void 0),!1}default:return y.unexpected.call(void 0),!1}}function L(){i.eat.call(void 0,p.TokenType.hash),X()}function O(){i.next.call(void 0)}function D(){return h.isTypeScriptEnabled?r.tsParseArrow.call(void 0):h.isFlowEnabled?n.flowParseArrow.call(void 0):i.eat.call(void 0,p.TokenType.arrow)}function K(){(h.isTypeScriptEnabled||h.isFlowEnabled)&&s.typedParseParenItem.call(void 0)}function F(){for(i.nextTemplateToken.call(void 0),i.nextTemplateToken.call(void 0);!i.match.call(void 0,p.TokenType.backQuote)&&!h.state.error;)y.expect.call(void 0,p.TokenType.dollarBraceL),m(),i.nextTemplateToken.call(void 0),i.nextTemplateToken.call(void 0);i.next.call(void 0)}function j(e,t){const o=h.getNextContextId.call(void 0);let n=!0;for(i.next.call(void 0),h.state.tokens[h.state.tokens.length-1].contextId=o;!i.eat.call(void 0,p.TokenType.braceR)&&!h.state.error;){if(n)n=!1;else if(y.expect.call(void 0,p.TokenType.comma),i.eat.call(void 0,p.TokenType.braceR))break;let a=!1;if(i.match.call(void 0,p.TokenType.ellipsis)){const o=h.state.tokens.length;if(u.parseSpread.call(void 0),e&&(h.state.tokens.length===o+2&&u.markPriorBindingIdentifier.call(void 0,t),i.eat.call(void 0,p.TokenType.braceR)))break}else e||(a=i.eat.call(void 0,p.TokenType.star)),!e&&y.isContextual.call(void 0,c.ContextualKeyword._async)?(a&&y.unexpected.call(void 0),X(),i.match.call(void 0,p.TokenType.colon)||i.match.call(void 0,p.TokenType.parenL)||i.match.call(void 0,p.TokenType.braceR)||i.match.call(void 0,p.TokenType.eq)||i.match.call(void 0,p.TokenType.comma)||(i.match.call(void 0,p.TokenType.star)&&(i.next.call(void 0),a=!0),B(o))):B(o),M(e,t,o)}h.state.tokens[h.state.tokens.length-1].contextId=o}function M(e,t,o){h.isTypeScriptEnabled?r.tsStartParseObjPropValue.call(void 0):h.isFlowEnabled&&n.flowStartParseObjPropValue.call(void 0),function(e,t){const o=h.state.start;return i.match.call(void 0,p.TokenType.parenL)?(e&&y.unexpected.call(void 0),q(o,!1),!0):!!function(e){return!e&&(i.match.call(void 0,p.TokenType.string)||i.match.call(void 0,p.TokenType.num)||i.match.call(void 0,p.TokenType.bracketL)||i.match.call(void 0,p.TokenType.name)||!!(h.state.type&p.TokenType.IS_KEYWORD))}(e)&&(B(t),q(o,!1),!0)}(e,o)||function(e,t){if(i.eat.call(void 0,p.TokenType.colon))return void(e?u.parseMaybeDefault.call(void 0,t):v(!1));let o;o=e?0===h.state.scopeDepth?i.IdentifierRole.ObjectShorthandTopLevelDeclaration:t?i.IdentifierRole.ObjectShorthandBlockScopedDeclaration:i.IdentifierRole.ObjectShorthandFunctionScopedDeclaration:i.IdentifierRole.ObjectShorthand,h.state.tokens[h.state.tokens.length-1].identifierRole=o,u.parseMaybeDefault.call(void 0,t,!0)}(e,t)}function B(e){h.isFlowEnabled&&n.flowParseVariance.call(void 0),i.eat.call(void 0,p.TokenType.bracketL)?(h.state.tokens[h.state.tokens.length-1].contextId=e,v(),y.expect.call(void 0,p.TokenType.bracketR),h.state.tokens[h.state.tokens.length-1].contextId=e):(i.match.call(void 0,p.TokenType.num)||i.match.call(void 0,p.TokenType.string)||i.match.call(void 0,p.TokenType.bigint)||i.match.call(void 0,p.TokenType.decimal)?R():L(),h.state.tokens[h.state.tokens.length-1].identifierRole=i.IdentifierRole.ObjectKey,h.state.tokens[h.state.tokens.length-1].contextId=e)}function q(e,t){const o=h.getNextContextId.call(void 0);h.state.scopeDepth++;const n=h.state.tokens.length,a=t;k.parseFunctionParams.call(void 0,a,o),H(e,o);const s=h.state.tokens.length;h.state.scopes.push(new(0,l.Scope)(n,s,!0)),h.state.scopeDepth--}function $(e){V(!0);const t=h.state.tokens.length;h.state.scopes.push(new(0,l.Scope)(e,t,!0)),h.state.scopeDepth--}function H(e,t=0){h.isTypeScriptEnabled?r.tsParseFunctionBodyAndFinish.call(void 0,e,t):h.isFlowEnabled?n.flowParseFunctionBodyAndFinish.call(void 0,t):V(!1,t)}function V(e,t=0){e&&!i.match.call(void 0,p.TokenType.braceL)?v():k.parseBlock.call(void 0,!0,t)}function W(e,t=!1){let o=!0;for(;!i.eat.call(void 0,e)&&!h.state.error;){if(o)o=!1;else if(y.expect.call(void 0,p.TokenType.comma),i.eat.call(void 0,e))break;U(t)}}function U(e){e&&i.match.call(void 0,p.TokenType.comma)||(i.match.call(void 0,p.TokenType.ellipsis)?(u.parseSpread.call(void 0),K()):i.match.call(void 0,p.TokenType.question)?i.next.call(void 0):v(!1,!0))}function X(){i.next.call(void 0),h.state.tokens[h.state.tokens.length-1].type=p.TokenType.name}t.StopState=f,t.parseExpression=m,t.parseMaybeAssign=v,t.baseParseMaybeAssign=x,t.baseParseConditional=_,t.parseMaybeUnary=g,t.parseExprSubscripts=b,t.baseParseSubscripts=I,t.baseParseSubscript=S,t.atPossibleAsync=A,t.parseCallExpressionArguments=P,t.parseExprAtom=R,t.parseLiteral=O,t.parseParenExpression=function(){y.expect.call(void 0,p.TokenType.parenL),m(),y.expect.call(void 0,p.TokenType.parenR)},t.parseArrow=D,t.parseTemplate=F,t.parseObj=j,t.parsePropertyName=B,t.parseMethod=q,t.parseArrowExpression=$,t.parseFunctionBodyAndFinish=H,t.parseFunctionBody=V,t.parseIdentifier=X},6416:(e,t,o)=>{Object.defineProperty(t,"__esModule",{value:!0});var n=o(7899),a=o(5920),s=o(6251),r=o(7233);t.parseFile=function(){return 0===s.state.pos&&s.input.charCodeAt(0)===a.charCodes.numberSign&&s.input.charCodeAt(1)===a.charCodes.exclamationMark&&n.skipLineComment.call(void 0,2),n.nextToken.call(void 0),r.parseTopLevel.call(void 0)}},6689:(e,t,o)=>{Object.defineProperty(t,"__esModule",{value:!0});var n=o(905),a=o(8094),s=o(7899),r=o(53),i=o(9609),c=o(6251),l=o(2276),p=o(799);function d(e){s.next.call(void 0),u(e)}function T(e){l.parseIdentifier.call(void 0),h(e)}function h(e){let t;t=0===c.state.scopeDepth?s.IdentifierRole.TopLevelDeclaration:e?s.IdentifierRole.BlockScopedDeclaration:s.IdentifierRole.FunctionScopedDeclaration,c.state.tokens[c.state.tokens.length-1].identifierRole=t}function u(e){switch(c.state.type){case i.TokenType._this:{const e=s.pushTypeContext.call(void 0,0);return s.next.call(void 0),void s.popTypeContext.call(void 0,e)}case i.TokenType._yield:case i.TokenType.name:return c.state.type=i.TokenType.name,void T(e);case i.TokenType.bracketL:return s.next.call(void 0),void k(i.TokenType.bracketR,e,!0);case i.TokenType.braceL:return void l.parseObj.call(void 0,!0,e);default:p.unexpected.call(void 0)}}function k(e,t,o=!1,n=!1,a=0){let r=!0,l=!1;const T=c.state.tokens.length;for(;!s.eat.call(void 0,e)&&!c.state.error;)if(r?r=!1:(p.expect.call(void 0,i.TokenType.comma),c.state.tokens[c.state.tokens.length-1].contextId=a,!l&&c.state.tokens[T].isType&&(c.state.tokens[c.state.tokens.length-1].isType=!0,l=!0)),o&&s.match.call(void 0,i.TokenType.comma));else{if(s.eat.call(void 0,e))break;if(s.match.call(void 0,i.TokenType.ellipsis)){d(t),f(),s.eat.call(void 0,i.TokenType.comma),p.expect.call(void 0,e);break}y(n,t)}}function y(e,t){e&&(a.tsParseAccessModifier.call(void 0),a.tsParseModifier.call(void 0,[r.ContextualKeyword._readonly])),m(t),f(),m(t,!0)}function f(){c.isFlowEnabled?n.flowParseAssignableListItemTypes.call(void 0):c.isTypeScriptEnabled&&a.tsParseAssignableListItemTypes.call(void 0)}function m(e,t=!1){if(t||u(e),!s.eat.call(void 0,i.TokenType.eq))return;const o=c.state.tokens.length-1;l.parseMaybeAssign.call(void 0),c.state.tokens[o].rhsEndIndex=c.state.tokens.length}t.parseSpread=function(){s.next.call(void 0),l.parseMaybeAssign.call(void 0,!1)},t.parseRest=d,t.parseBindingIdentifier=T,t.parseImportedIdentifier=function(){l.parseIdentifier.call(void 0),c.state.tokens[c.state.tokens.length-1].identifierRole=s.IdentifierRole.ImportDeclaration},t.markPriorBindingIdentifier=h,t.parseBindingAtom=u,t.parseBindingList=k,t.parseMaybeDefault=m},7233:(e,t,o)=>{Object.defineProperty(t,"__esModule",{value:!0});var n=o(4825),a=o(905),s=o(8094),r=o(7899),i=o(53),c=o(5838),l=o(9609),p=o(5920),d=o(6251),T=o(2276),h=o(6689),u=o(799);function k(e){d.isFlowEnabled&&a.flowTryParseStatement.call(void 0)||(r.match.call(void 0,l.TokenType.at)&&y(),function(e){if(d.isTypeScriptEnabled&&s.tsTryParseStatementContent.call(void 0))return;const t=d.state.type;switch(t){case l.TokenType._break:case l.TokenType._continue:return r.next.call(void 0),void(u.isLineTerminator.call(void 0)||(T.parseIdentifier.call(void 0),u.semicolon.call(void 0)));case l.TokenType._debugger:return r.next.call(void 0),void u.semicolon.call(void 0);case l.TokenType._do:return r.next.call(void 0),k(!1),u.expect.call(void 0,l.TokenType._while),T.parseParenExpression.call(void 0),void r.eat.call(void 0,l.TokenType.semi);case l.TokenType._for:return void function(){d.state.scopeDepth++;const e=d.state.tokens.length;!function(){r.next.call(void 0);let e=!1;if(u.isContextual.call(void 0,i.ContextualKeyword._await)&&(e=!0,r.next.call(void 0)),u.expect.call(void 0,l.TokenType.parenL),r.match.call(void 0,l.TokenType.semi))return e&&u.unexpected.call(void 0),void C();if(r.match.call(void 0,l.TokenType._var)||r.match.call(void 0,l.TokenType._let)||r.match.call(void 0,l.TokenType._const)){const t=d.state.type;return r.next.call(void 0),b(!0,t),r.match.call(void 0,l.TokenType._in)||u.isContextual.call(void 0,i.ContextualKeyword._of)?void g(e):void C()}T.parseExpression.call(void 0,!0),r.match.call(void 0,l.TokenType._in)||u.isContextual.call(void 0,i.ContextualKeyword._of)?g(e):(e&&u.unexpected.call(void 0),C())}();const t=d.state.tokens.length;d.state.scopes.push(new(0,c.Scope)(e,t,!1)),d.state.scopeDepth--}();case l.TokenType._function:if(r.lookaheadType.call(void 0)===l.TokenType.dot)break;return e||u.unexpected.call(void 0),void function(){const e=d.state.start;r.next.call(void 0),w(e,!0)}();case l.TokenType._class:return e||u.unexpected.call(void 0),void E(!0);case l.TokenType._if:return r.next.call(void 0),T.parseParenExpression.call(void 0),k(!1),void(r.eat.call(void 0,l.TokenType._else)&&k(!1));case l.TokenType._return:return r.next.call(void 0),void(u.isLineTerminator.call(void 0)||(T.parseExpression.call(void 0),u.semicolon.call(void 0)));case l.TokenType._switch:return void function(){r.next.call(void 0),T.parseParenExpression.call(void 0),d.state.scopeDepth++;const e=d.state.tokens.length;for(u.expect.call(void 0,l.TokenType.braceL);!r.match.call(void 0,l.TokenType.braceR)&&!d.state.error;)if(r.match.call(void 0,l.TokenType._case)||r.match.call(void 0,l.TokenType._default)){const e=r.match.call(void 0,l.TokenType._case);r.next.call(void 0),e&&T.parseExpression.call(void 0),u.expect.call(void 0,l.TokenType.colon)}else k(!0);r.next.call(void 0);const t=d.state.tokens.length;d.state.scopes.push(new(0,c.Scope)(e,t,!1)),d.state.scopeDepth--}();case l.TokenType._throw:return r.next.call(void 0),T.parseExpression.call(void 0),void u.semicolon.call(void 0);case l.TokenType._try:return void function(){if(r.next.call(void 0),x(),r.match.call(void 0,l.TokenType._catch)){r.next.call(void 0);let e=null;if(r.match.call(void 0,l.TokenType.parenL)&&(d.state.scopeDepth++,e=d.state.tokens.length,u.expect.call(void 0,l.TokenType.parenL),h.parseBindingAtom.call(void 0,!0),d.isTypeScriptEnabled&&s.tsTryParseTypeAnnotation.call(void 0),u.expect.call(void 0,l.TokenType.parenR)),x(),null!=e){const t=d.state.tokens.length;d.state.scopes.push(new(0,c.Scope)(e,t,!1)),d.state.scopeDepth--}}r.eat.call(void 0,l.TokenType._finally)&&x()}();case l.TokenType._let:case l.TokenType._const:e||u.unexpected.call(void 0);case l.TokenType._var:return void v(t);case l.TokenType._while:return r.next.call(void 0),T.parseParenExpression.call(void 0),void k(!1);case l.TokenType.braceL:return void x();case l.TokenType.semi:return void r.next.call(void 0);case l.TokenType._export:case l.TokenType._import:{const e=r.lookaheadType.call(void 0);if(e===l.TokenType.parenL||e===l.TokenType.dot)break;return r.next.call(void 0),void(t===l.TokenType._import?B():D())}case l.TokenType.name:if(d.state.contextualKeyword===i.ContextualKeyword._async){const e=d.state.start,t=d.state.snapshot();if(r.next.call(void 0),r.match.call(void 0,l.TokenType._function)&&!u.canInsertSemicolon.call(void 0))return u.expect.call(void 0,l.TokenType._function),void w(e,!0);d.state.restoreFromSnapshot(t)}}const o=d.state.tokens.length;T.parseExpression.call(void 0);let n=null;if(d.state.tokens.length===o+1){const e=d.state.tokens[d.state.tokens.length-1];e.type===l.TokenType.name&&(n=e.contextualKeyword)}var p;null!=n?r.eat.call(void 0,l.TokenType.colon)?k(!0):(p=n,d.isTypeScriptEnabled?s.tsParseIdentifierStatement.call(void 0,p):d.isFlowEnabled?a.flowParseIdentifierStatement.call(void 0,p):u.semicolon.call(void 0)):u.semicolon.call(void 0)}(e))}function y(){for(;r.match.call(void 0,l.TokenType.at);)f()}function f(){if(r.next.call(void 0),r.eat.call(void 0,l.TokenType.parenL))T.parseExpression.call(void 0),u.expect.call(void 0,l.TokenType.parenR);else for(T.parseIdentifier.call(void 0);r.eat.call(void 0,l.TokenType.dot);)T.parseIdentifier.call(void 0);d.isTypeScriptEnabled?s.tsParseMaybeDecoratorArguments.call(void 0):m()}function m(){r.eat.call(void 0,l.TokenType.parenL)&&T.parseCallExpressionArguments.call(void 0)}function v(e){r.next.call(void 0),b(!1,e),u.semicolon.call(void 0)}function x(e=!1,t=0){const o=d.state.tokens.length;d.state.scopeDepth++,u.expect.call(void 0,l.TokenType.braceL),t&&(d.state.tokens[d.state.tokens.length-1].contextId=t),_(l.TokenType.braceR),t&&(d.state.tokens[d.state.tokens.length-1].contextId=t);const n=d.state.tokens.length;d.state.scopes.push(new(0,c.Scope)(o,n,e)),d.state.scopeDepth--}function _(e){for(;!r.eat.call(void 0,e)&&!d.state.error;)k(!0)}function C(){u.expect.call(void 0,l.TokenType.semi),r.match.call(void 0,l.TokenType.semi)||T.parseExpression.call(void 0),u.expect.call(void 0,l.TokenType.semi),r.match.call(void 0,l.TokenType.parenR)||T.parseExpression.call(void 0),u.expect.call(void 0,l.TokenType.parenR),k(!1)}function g(e){e?u.eatContextual.call(void 0,i.ContextualKeyword._of):r.next.call(void 0),T.parseExpression.call(void 0),u.expect.call(void 0,l.TokenType.parenR),k(!1)}function b(e,t){for(;;){if(o=t===l.TokenType._const||t===l.TokenType._let,h.parseBindingAtom.call(void 0,o),d.isTypeScriptEnabled?s.tsAfterParseVarHead.call(void 0):d.isFlowEnabled&&a.flowAfterParseVarHead.call(void 0),r.eat.call(void 0,l.TokenType.eq)){const t=d.state.tokens.length-1;T.parseMaybeAssign.call(void 0,e),d.state.tokens[t].rhsEndIndex=d.state.tokens.length}if(!r.eat.call(void 0,l.TokenType.comma))break}var o}function w(e,t,o=!1){r.match.call(void 0,l.TokenType.star)&&r.next.call(void 0),!t||o||r.match.call(void 0,l.TokenType.name)||r.match.call(void 0,l.TokenType._yield)||u.unexpected.call(void 0);let n=null;r.match.call(void 0,l.TokenType.name)&&(t||(n=d.state.tokens.length,d.state.scopeDepth++),h.parseBindingIdentifier.call(void 0,!1));const a=d.state.tokens.length;d.state.scopeDepth++,I(),T.parseFunctionBodyAndFinish.call(void 0,e);const s=d.state.tokens.length;d.state.scopes.push(new(0,c.Scope)(a,s,!0)),d.state.scopeDepth--,null!==n&&(d.state.scopes.push(new(0,c.Scope)(n,s,!0)),d.state.scopeDepth--)}function I(e=!1,t=0){d.isTypeScriptEnabled?s.tsStartParseFunctionParams.call(void 0):d.isFlowEnabled&&a.flowStartParseFunctionParams.call(void 0),u.expect.call(void 0,l.TokenType.parenL),t&&(d.state.tokens[d.state.tokens.length-1].contextId=t),h.parseBindingList.call(void 0,l.TokenType.parenR,!1,!1,e,t),t&&(d.state.tokens[d.state.tokens.length-1].contextId=t)}function E(e,t=!1){const o=d.getNextContextId.call(void 0);r.next.call(void 0),d.state.tokens[d.state.tokens.length-1].contextId=o,d.state.tokens[d.state.tokens.length-1].isExpression=!e;let n=null;e||(n=d.state.tokens.length,d.state.scopeDepth++),function(e,t=!1){d.isTypeScriptEnabled&&(!e||t)&&u.isContextual.call(void 0,i.ContextualKeyword._implements)||(r.match.call(void 0,l.TokenType.name)&&h.parseBindingIdentifier.call(void 0,!0),d.isTypeScriptEnabled?s.tsTryParseTypeParameters.call(void 0):d.isFlowEnabled&&r.match.call(void 0,l.TokenType.lessThan)&&a.flowParseTypeParameterDeclaration.call(void 0))}(e,t),function(){let e=!1;r.eat.call(void 0,l.TokenType._extends)?(T.parseExprSubscripts.call(void 0),e=!0):e=!1,d.isTypeScriptEnabled?s.tsAfterParseClassSuper.call(void 0,e):d.isFlowEnabled&&a.flowAfterParseClassSuper.call(void 0,e)}();const p=d.state.tokens.length;if(function(e){for(u.expect.call(void 0,l.TokenType.braceL);!r.eat.call(void 0,l.TokenType.braceR)&&!d.state.error;)r.eat.call(void 0,l.TokenType.semi)||(r.match.call(void 0,l.TokenType.at)?f():P(d.state.start,e))}(o),!d.state.error&&(d.state.tokens[p].contextId=o,d.state.tokens[d.state.tokens.length-1].contextId=o,null!==n)){const e=d.state.tokens.length;d.state.scopes.push(new(0,c.Scope)(n,e,!1)),d.state.scopeDepth--}}function S(){return r.match.call(void 0,l.TokenType.eq)||r.match.call(void 0,l.TokenType.semi)||r.match.call(void 0,l.TokenType.braceR)||r.match.call(void 0,l.TokenType.bang)||r.match.call(void 0,l.TokenType.colon)}function A(){return r.match.call(void 0,l.TokenType.parenL)||r.match.call(void 0,l.TokenType.lessThan)}function P(e,t){d.isTypeScriptEnabled&&(s.tsParseModifier.call(void 0,[i.ContextualKeyword._declare]),s.tsParseAccessModifier.call(void 0),s.tsParseModifier.call(void 0,[i.ContextualKeyword._declare]));let o=!1;if(r.match.call(void 0,l.TokenType.name)&&d.state.contextualKeyword===i.ContextualKeyword._static){if(T.parseIdentifier.call(void 0),A())return void N(e,!1);if(S())return void O();if(d.state.tokens[d.state.tokens.length-1].type=l.TokenType._static,o=!0,r.match.call(void 0,l.TokenType.braceL))return d.state.tokens[d.state.tokens.length-1].contextId=t,void x()}!function(e,t,o){if(d.isTypeScriptEnabled&&s.tsTryParseClassMemberWithIsStatic.call(void 0,t,o))return;if(r.eat.call(void 0,l.TokenType.star))return R(o),void N(e,!1);R(o);let n=!1;const a=d.state.tokens[d.state.tokens.length-1];a.contextualKeyword===i.ContextualKeyword._constructor&&(n=!0),L(),A()?N(e,n):S()?O():a.contextualKeyword!==i.ContextualKeyword._async||u.isLineTerminator.call(void 0)?a.contextualKeyword!==i.ContextualKeyword._get&&a.contextualKeyword!==i.ContextualKeyword._set||u.isLineTerminator.call(void 0)&&r.match.call(void 0,l.TokenType.star)?u.isLineTerminator.call(void 0)?O():u.unexpected.call(void 0):(a.contextualKeyword===i.ContextualKeyword._get?d.state.tokens[d.state.tokens.length-1].type=l.TokenType._get:d.state.tokens[d.state.tokens.length-1].type=l.TokenType._set,R(o),N(e,!1)):(d.state.tokens[d.state.tokens.length-1].type=l.TokenType._async,r.match.call(void 0,l.TokenType.star)&&r.next.call(void 0),R(o),L(),N(e,!1))}(e,o,t)}function N(e,t){d.isTypeScriptEnabled?s.tsTryParseTypeParameters.call(void 0):d.isFlowEnabled&&r.match.call(void 0,l.TokenType.lessThan)&&a.flowParseTypeParameterDeclaration.call(void 0),T.parseMethod.call(void 0,e,t)}function R(e){T.parsePropertyName.call(void 0,e)}function L(){if(d.isTypeScriptEnabled){const e=r.pushTypeContext.call(void 0,0);r.eat.call(void 0,l.TokenType.question),r.popTypeContext.call(void 0,e)}}function O(){if(d.isTypeScriptEnabled?(r.eat.call(void 0,l.TokenType.bang),s.tsTryParseTypeAnnotation.call(void 0)):d.isFlowEnabled&&r.match.call(void 0,l.TokenType.colon)&&a.flowParseTypeAnnotation.call(void 0),r.match.call(void 0,l.TokenType.eq)){const e=d.state.tokens.length;r.next.call(void 0),T.parseMaybeAssign.call(void 0),d.state.tokens[e].rhsEndIndex=d.state.tokens.length}u.semicolon.call(void 0)}function D(){const e=d.state.tokens.length-1;d.isTypeScriptEnabled&&s.tsTryParseExport.call(void 0)||((d.isFlowEnabled?a.flowShouldParseExportStar.call(void 0):r.match.call(void 0,l.TokenType.star))?d.isFlowEnabled?a.flowParseExportStar.call(void 0):j():function(){if(d.isTypeScriptEnabled&&s.tsIsDeclarationStart.call(void 0))return!1;if(d.isFlowEnabled&&a.flowShouldDisallowExportDefaultSpecifier.call(void 0))return!1;if(r.match.call(void 0,l.TokenType.name))return d.state.contextualKeyword!==i.ContextualKeyword._async;if(!r.match.call(void 0,l.TokenType._default))return!1;const e=r.nextTokenStart.call(void 0),t=r.lookaheadTypeAndKeyword.call(void 0),o=t.type===l.TokenType.name&&t.contextualKeyword===i.ContextualKeyword._from;if(t.type===l.TokenType.comma)return!0;if(o){const t=d.input.charCodeAt(r.nextTokenStartSince.call(void 0,e+4));return t===p.charCodes.quotationMark||t===p.charCodes.apostrophe}return!1}()?(T.parseIdentifier.call(void 0),r.match.call(void 0,l.TokenType.comma)&&r.lookaheadType.call(void 0)===l.TokenType.star?(u.expect.call(void 0,l.TokenType.comma),u.expect.call(void 0,l.TokenType.star),u.expectContextual.call(void 0,i.ContextualKeyword._as),T.parseIdentifier.call(void 0)):K(),F()):r.eat.call(void 0,l.TokenType._default)?function(){if(d.isTypeScriptEnabled&&s.tsTryParseExportDefaultExpression.call(void 0))return;const e=d.state.start;r.eat.call(void 0,l.TokenType._function)?w(e,!0,!0):u.isContextual.call(void 0,i.ContextualKeyword._async)&&r.lookaheadType.call(void 0)===l.TokenType._function?(u.eatContextual.call(void 0,i.ContextualKeyword._async),r.eat.call(void 0,l.TokenType._function),w(e,!0,!0)):r.match.call(void 0,l.TokenType._class)?E(!0,!0):r.match.call(void 0,l.TokenType.at)?(y(),E(!0,!0)):(T.parseMaybeAssign.call(void 0),u.semicolon.call(void 0))}():d.isTypeScriptEnabled&&s.tsIsDeclarationStart.call(void 0)||d.isFlowEnabled&&a.flowShouldParseExportDeclaration.call(void 0)||d.state.type===l.TokenType._var||d.state.type===l.TokenType._const||d.state.type===l.TokenType._let||d.state.type===l.TokenType._function||d.state.type===l.TokenType._class||u.isContextual.call(void 0,i.ContextualKeyword._async)||r.match.call(void 0,l.TokenType.at)?d.isTypeScriptEnabled?s.tsParseExportDeclaration.call(void 0):d.isFlowEnabled?a.flowParseExportDeclaration.call(void 0):k(!0):(M(),F()),d.state.tokens[e].rhsEndIndex=d.state.tokens.length)}function K(){r.eat.call(void 0,l.TokenType.comma)&&M()}function F(){u.eatContextual.call(void 0,i.ContextualKeyword._from)&&T.parseExprAtom.call(void 0),u.semicolon.call(void 0)}function j(){u.expect.call(void 0,l.TokenType.star),u.isContextual.call(void 0,i.ContextualKeyword._as)?(r.next.call(void 0),d.state.tokens[d.state.tokens.length-1].type=l.TokenType._as,T.parseIdentifier.call(void 0),K(),F()):F()}function M(){let e=!0;for(u.expect.call(void 0,l.TokenType.braceL);!r.eat.call(void 0,l.TokenType.braceR)&&!d.state.error;){if(e)e=!1;else if(u.expect.call(void 0,l.TokenType.comma),r.eat.call(void 0,l.TokenType.braceR))break;T.parseIdentifier.call(void 0),d.state.tokens[d.state.tokens.length-1].identifierRole=r.IdentifierRole.ExportAccess,u.eatContextual.call(void 0,i.ContextualKeyword._as)&&T.parseIdentifier.call(void 0)}}function B(){d.isTypeScriptEnabled&&r.match.call(void 0,l.TokenType.name)&&r.lookaheadType.call(void 0)===l.TokenType.eq?s.tsParseImportEqualsDeclaration.call(void 0):(d.isTypeScriptEnabled&&u.eatContextual.call(void 0,i.ContextualKeyword._type),r.match.call(void 0,l.TokenType.string)||(function(){d.isFlowEnabled&&a.flowStartParseImportSpecifiers.call(void 0);let e=!0;if(!r.match.call(void 0,l.TokenType.name)||(q(),r.eat.call(void 0,l.TokenType.comma))){if(r.match.call(void 0,l.TokenType.star))return r.next.call(void 0),u.expectContextual.call(void 0,i.ContextualKeyword._as),void q();for(u.expect.call(void 0,l.TokenType.braceL);!r.eat.call(void 0,l.TokenType.braceR)&&!d.state.error;){if(e)e=!1;else if(r.eat.call(void 0,l.TokenType.colon)&&u.unexpected.call(void 0,"ES2015 named imports do not destructure. Use another statement for destructuring after the import."),u.expect.call(void 0,l.TokenType.comma),r.eat.call(void 0,l.TokenType.braceR))break;d.isFlowEnabled?a.flowParseImportSpecifier.call(void 0):(h.parseImportedIdentifier.call(void 0),u.isContextual.call(void 0,i.ContextualKeyword._as)&&(d.state.tokens[d.state.tokens.length-1].identifierRole=r.IdentifierRole.ImportAccess,r.next.call(void 0),h.parseImportedIdentifier.call(void 0)))}}}(),u.expectContextual.call(void 0,i.ContextualKeyword._from)),T.parseExprAtom.call(void 0),u.semicolon.call(void 0))}function q(){h.parseImportedIdentifier.call(void 0)}t.parseTopLevel=function(){if(_(l.TokenType.eof),d.state.scopes.push(new(0,c.Scope)(0,d.state.tokens.length,!0)),0!==d.state.scopeDepth)throw new Error(`Invalid scope depth at end of file: ${d.state.scopeDepth}`);return new(0,n.File)(d.state.tokens,d.state.scopes)},t.parseStatement=k,t.parseDecorators=y,t.baseParseMaybeDecoratorArguments=m,t.parseVarStatement=v,t.parseBlock=x,t.parseBlockBody=_,t.parseFunction=w,t.parseFunctionParams=I,t.parseClass=E,t.parseClassPropertyName=R,t.parsePostMemberNameModifiers=L,t.parseClassProperty=O,t.parseExport=D,t.parseExportFrom=F,t.baseParseExportStar=j,t.parseExportSpecifiers=M,t.parseImport=B},799:(e,t,o)=>{Object.defineProperty(t,"__esModule",{value:!0});var n=o(7899),a=o(9609),s=o(5920),r=o(6251);function i(e){return r.state.contextualKeyword===e&&n.eat.call(void 0,a.TokenType.name)}function c(){return n.match.call(void 0,a.TokenType.eof)||n.match.call(void 0,a.TokenType.braceR)||l()}function l(){const e=r.state.tokens[r.state.tokens.length-1];for(let t=e?e.end:0;t<r.state.start;t++){const e=r.input.charCodeAt(t);if(e===s.charCodes.lineFeed||e===s.charCodes.carriageReturn||8232===e||8233===e)return!0}return!1}function p(){return n.eat.call(void 0,a.TokenType.semi)||c()}function d(e="Unexpected token",t=r.state.start){if(r.state.error)return;const o=new SyntaxError(e);o.pos=t,r.state.error=o,r.state.pos=r.input.length,n.finishToken.call(void 0,a.TokenType.eof)}t.isContextual=function(e){return r.state.contextualKeyword===e},t.isLookaheadContextual=function(e){const t=n.lookaheadTypeAndKeyword.call(void 0);return t.type===a.TokenType.name&&t.contextualKeyword===e},t.eatContextual=i,t.expectContextual=function(e){i(e)||d()},t.canInsertSemicolon=c,t.hasPrecedingLineBreak=l,t.isLineTerminator=p,t.semicolon=function(){p()||d('Unexpected token, expected ";"')},t.expect=function(e){n.eat.call(void 0,e)||d(`Unexpected token, expected "${a.formatTokenType.call(void 0,e)}"`)},t.unexpected=d},5920:(e,t)=>{var o;Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.backSpace=8]="backSpace",e[e.lineFeed=10]="lineFeed",e[e.carriageReturn=13]="carriageReturn",e[e.shiftOut=14]="shiftOut",e[e.space=32]="space",e[e.exclamationMark=33]="exclamationMark",e[e.quotationMark=34]="quotationMark",e[e.numberSign=35]="numberSign",e[e.dollarSign=36]="dollarSign",e[e.percentSign=37]="percentSign",e[e.ampersand=38]="ampersand",e[e.apostrophe=39]="apostrophe",e[e.leftParenthesis=40]="leftParenthesis",e[e.rightParenthesis=41]="rightParenthesis",e[e.asterisk=42]="asterisk",e[e.plusSign=43]="plusSign",e[e.comma=44]="comma",e[e.dash=45]="dash",e[e.dot=46]="dot",e[e.slash=47]="slash",e[e.digit0=48]="digit0",e[e.digit1=49]="digit1",e[e.digit2=50]="digit2",e[e.digit3=51]="digit3",e[e.digit4=52]="digit4",e[e.digit5=53]="digit5",e[e.digit6=54]="digit6",e[e.digit7=55]="digit7",e[e.digit8=56]="digit8",e[e.digit9=57]="digit9",e[e.colon=58]="colon",e[e.semicolon=59]="semicolon",e[e.lessThan=60]="lessThan",e[e.equalsTo=61]="equalsTo",e[e.greaterThan=62]="greaterThan",e[e.questionMark=63]="questionMark",e[e.atSign=64]="atSign",e[e.uppercaseA=65]="uppercaseA",e[e.uppercaseB=66]="uppercaseB",e[e.uppercaseC=67]="uppercaseC",e[e.uppercaseD=68]="uppercaseD",e[e.uppercaseE=69]="uppercaseE",e[e.uppercaseF=70]="uppercaseF",e[e.uppercaseG=71]="uppercaseG",e[e.uppercaseH=72]="uppercaseH",e[e.uppercaseI=73]="uppercaseI",e[e.uppercaseJ=74]="uppercaseJ",e[e.uppercaseK=75]="uppercaseK",e[e.uppercaseL=76]="uppercaseL",e[e.uppercaseM=77]="uppercaseM",e[e.uppercaseN=78]="uppercaseN",e[e.uppercaseO=79]="uppercaseO",e[e.uppercaseP=80]="uppercaseP",e[e.uppercaseQ=81]="uppercaseQ",e[e.uppercaseR=82]="uppercaseR",e[e.uppercaseS=83]="uppercaseS",e[e.uppercaseT=84]="uppercaseT",e[e.uppercaseU=85]="uppercaseU",e[e.uppercaseV=86]="uppercaseV",e[e.uppercaseW=87]="uppercaseW",e[e.uppercaseX=88]="uppercaseX",e[e.uppercaseY=89]="uppercaseY",e[e.uppercaseZ=90]="uppercaseZ",e[e.leftSquareBracket=91]="leftSquareBracket",e[e.backslash=92]="backslash",e[e.rightSquareBracket=93]="rightSquareBracket",e[e.caret=94]="caret",e[e.underscore=95]="underscore",e[e.graveAccent=96]="graveAccent",e[e.lowercaseA=97]="lowercaseA",e[e.lowercaseB=98]="lowercaseB",e[e.lowercaseC=99]="lowercaseC",e[e.lowercaseD=100]="lowercaseD",e[e.lowercaseE=101]="lowercaseE",e[e.lowercaseF=102]="lowercaseF",e[e.lowercaseG=103]="lowercaseG",e[e.lowercaseH=104]="lowercaseH",e[e.lowercaseI=105]="lowercaseI",e[e.lowercaseJ=106]="lowercaseJ",e[e.lowercaseK=107]="lowercaseK",e[e.lowercaseL=108]="lowercaseL",e[e.lowercaseM=109]="lowercaseM",e[e.lowercaseN=110]="lowercaseN",e[e.lowercaseO=111]="lowercaseO",e[e.lowercaseP=112]="lowercaseP",e[e.lowercaseQ=113]="lowercaseQ",e[e.lowercaseR=114]="lowercaseR",e[e.lowercaseS=115]="lowercaseS",e[e.lowercaseT=116]="lowercaseT",e[e.lowercaseU=117]="lowercaseU",e[e.lowercaseV=118]="lowercaseV",e[e.lowercaseW=119]="lowercaseW",e[e.lowercaseX=120]="lowercaseX",e[e.lowercaseY=121]="lowercaseY",e[e.lowercaseZ=122]="lowercaseZ",e[e.leftCurlyBrace=123]="leftCurlyBrace",e[e.verticalBar=124]="verticalBar",e[e.rightCurlyBrace=125]="rightCurlyBrace",e[e.tilde=126]="tilde",e[e.nonBreakingSpace=160]="nonBreakingSpace",e[e.oghamSpaceMark=5760]="oghamSpaceMark",e[e.lineSeparator=8232]="lineSeparator",e[e.paragraphSeparator=8233]="paragraphSeparator"}(o||(t.charCodes=o={})),t.isDigit=function(e){return e>=o.digit0&&e<=o.digit9||e>=o.lowercaseA&&e<=o.lowercaseF||e>=o.uppercaseA&&e<=o.uppercaseF}},6742:(e,t,o)=>{Object.defineProperty(t,"__esModule",{value:!0});var n=o(5920),a=o(6989);function s(e){if(e<48)return 36===e;if(e<58)return!0;if(e<65)return!1;if(e<91)return!0;if(e<97)return 95===e;if(e<123)return!0;if(e<128)return!1;throw new Error("Should not be called with non-ASCII char code.")}const r=new Uint8Array(65536);t.IS_IDENTIFIER_CHAR=r;for(let e=0;e<128;e++)t.IS_IDENTIFIER_CHAR[e]=s(e)?1:0;for(let e=128;e<65536;e++)t.IS_IDENTIFIER_CHAR[e]=1;for(const e of a.WHITESPACE_CHARS)t.IS_IDENTIFIER_CHAR[e]=0;t.IS_IDENTIFIER_CHAR[8232]=0,t.IS_IDENTIFIER_CHAR[8233]=0;const i=t.IS_IDENTIFIER_CHAR.slice();t.IS_IDENTIFIER_START=i;for(let e=n.charCodes.digit0;e<=n.charCodes.digit9;e++)t.IS_IDENTIFIER_START[e]=0},6989:(e,t,o)=>{Object.defineProperty(t,"__esModule",{value:!0});var n=o(5920);const a=[9,11,12,n.charCodes.space,n.charCodes.nonBreakingSpace,n.charCodes.oghamSpaceMark,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8239,8287,12288,65279];t.WHITESPACE_CHARS=a,t.skipWhiteSpace=/(?:\s|\/\/.*|\/\*[^]*?\*\/)*/g;const s=new Uint8Array(65536);t.IS_WHITESPACE=s;for(const e of t.WHITESPACE_CHARS)t.IS_WHITESPACE[e]=1},9998:(e,t,o)=>{function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var a=o(7899),s=o(53),r=o(9609),i=n(o(7958)),c=o(6195),l=n(c),p=n(o(9917)),d=n(o(3715));class T extends d.default{__init(){this.hadExport=!1}__init2(){this.hadNamedExport=!1}__init3(){this.hadDefaultExport=!1}constructor(e,t,o,n,a,s,r){super(),this.rootTransformer=e,this.tokens=t,this.importProcessor=o,this.nameManager=n,this.reactHotLoaderTransformer=a,this.enableLegacyBabel5ModuleInterop=s,this.isTypeScriptTransformEnabled=r,T.prototype.__init.call(this),T.prototype.__init2.call(this),T.prototype.__init3.call(this),this.declarationInfo=r?l.default.call(void 0,t):c.EMPTY_DECLARATION_INFO}getPrefixCode(){let e="";return this.hadExport&&(e+='Object.defineProperty(exports, "__esModule", {value: true});'),e}getSuffixCode(){return this.enableLegacyBabel5ModuleInterop&&this.hadDefaultExport&&!this.hadNamedExport?"\nmodule.exports = exports.default;\n":""}process(){return this.tokens.matches3(r.TokenType._import,r.TokenType.name,r.TokenType.eq)?this.processImportEquals():this.tokens.matches1(r.TokenType._import)?(this.processImport(),!0):this.tokens.matches2(r.TokenType._export,r.TokenType.eq)?(this.tokens.replaceToken("module.exports"),!0):this.tokens.matches1(r.TokenType._export)&&!this.tokens.currentToken().isType?(this.hadExport=!0,this.processExport()):!(!this.tokens.matches2(r.TokenType.name,r.TokenType.postIncDec)||!this.processPostIncDec())||(this.tokens.matches1(r.TokenType.name)||this.tokens.matches1(r.TokenType.jsxName)?this.processIdentifier():this.tokens.matches1(r.TokenType.eq)?this.processAssignment():this.tokens.matches1(r.TokenType.assign)?this.processComplexAssignment():!!this.tokens.matches1(r.TokenType.preIncDec)&&this.processPreIncDec())}processImportEquals(){const e=this.tokens.identifierNameAtIndex(this.tokens.currentIndex()+1);return this.importProcessor.isTypeName(e)?i.default.call(void 0,this.tokens):this.tokens.replaceToken("const"),!0}processImport(){if(this.tokens.matches2(r.TokenType._import,r.TokenType.parenL)){this.tokens.replaceToken("Promise.resolve().then(() => require");const e=this.tokens.currentToken().contextId;if(null==e)throw new Error("Expected context ID on dynamic import invocation.");for(this.tokens.copyToken();!this.tokens.matchesContextIdAndLabel(r.TokenType.parenR,e);)this.rootTransformer.processToken();this.tokens.replaceToken("))")}else{if(this.removeImportAndDetectIfType())this.tokens.removeToken();else{const e=this.tokens.stringValue();this.tokens.replaceTokenTrimmingLeftWhitespace(this.importProcessor.claimImportCode(e)),this.tokens.appendCode(this.importProcessor.claimImportCode(e))}this.tokens.matches1(r.TokenType.semi)&&this.tokens.removeToken()}}removeImportAndDetectIfType(){if(this.tokens.removeInitialToken(),this.tokens.matchesContextual(s.ContextualKeyword._type)&&!this.tokens.matches1AtIndex(this.tokens.currentIndex()+1,r.TokenType.comma)&&!this.tokens.matchesContextualAtIndex(this.tokens.currentIndex()+1,s.ContextualKeyword._from))return this.removeRemainingImport(),!0;if(this.tokens.matches1(r.TokenType.name)||this.tokens.matches1(r.TokenType.star))return this.removeRemainingImport(),!1;if(this.tokens.matches1(r.TokenType.string))return!1;let e=!1;for(;!this.tokens.matches1(r.TokenType.string);)(!e&&this.tokens.matches1(r.TokenType.braceL)||this.tokens.matches1(r.TokenType.comma))&&(this.tokens.removeToken(),(this.tokens.matches2(r.TokenType.name,r.TokenType.comma)||this.tokens.matches2(r.TokenType.name,r.TokenType.braceR)||this.tokens.matches4(r.TokenType.name,r.TokenType.name,r.TokenType.name,r.TokenType.comma)||this.tokens.matches4(r.TokenType.name,r.TokenType.name,r.TokenType.name,r.TokenType.braceR))&&(e=!0)),this.tokens.removeToken();return!e}removeRemainingImport(){for(;!this.tokens.matches1(r.TokenType.string);)this.tokens.removeToken()}processIdentifier(){const e=this.tokens.currentToken();if(e.shadowsGlobal)return!1;if(e.identifierRole===a.IdentifierRole.ObjectShorthand)return this.processObjectShorthand();if(e.identifierRole!==a.IdentifierRole.Access)return!1;const t=this.importProcessor.getIdentifierReplacement(this.tokens.identifierNameForToken(e));if(!t)return!1;let o=this.tokens.currentIndex()+1;for(;o<this.tokens.tokens.length&&this.tokens.tokens[o].type===r.TokenType.parenR;)o++;return this.tokens.tokens[o].type===r.TokenType.parenL?this.tokens.tokenAtRelativeIndex(1).type===r.TokenType.parenL&&this.tokens.tokenAtRelativeIndex(-1).type!==r.TokenType._new?(this.tokens.replaceToken(`${t}.call(void 0, `),this.tokens.removeToken(),this.rootTransformer.processBalancedCode(),this.tokens.copyExpectedToken(r.TokenType.parenR)):this.tokens.replaceToken(`(0, ${t})`):this.tokens.replaceToken(t),!0}processObjectShorthand(){const e=this.tokens.identifierName(),t=this.importProcessor.getIdentifierReplacement(e);return!!t&&(this.tokens.replaceToken(`${e}: ${t}`),!0)}processExport(){if(this.tokens.matches2(r.TokenType._export,r.TokenType._enum)||this.tokens.matches3(r.TokenType._export,r.TokenType._const,r.TokenType._enum))return!1;if(this.tokens.matches2(r.TokenType._export,r.TokenType._default))return this.processExportDefault(),this.hadDefaultExport=!0,!0;if(this.hadNamedExport=!0,this.tokens.matches2(r.TokenType._export,r.TokenType._var)||this.tokens.matches2(r.TokenType._export,r.TokenType._let)||this.tokens.matches2(r.TokenType._export,r.TokenType._const))return this.processExportVar(),!0;if(this.tokens.matches2(r.TokenType._export,r.TokenType._function)||this.tokens.matches3(r.TokenType._export,r.TokenType.name,r.TokenType._function))return this.processExportFunction(),!0;if(this.tokens.matches2(r.TokenType._export,r.TokenType._class)||this.tokens.matches3(r.TokenType._export,r.TokenType._abstract,r.TokenType._class))return this.processExportClass(),!0;if(this.tokens.matches2(r.TokenType._export,r.TokenType.braceL))return this.processExportBindings(),!0;if(this.tokens.matches2(r.TokenType._export,r.TokenType.star))return this.processExportStar(),!0;if(this.tokens.matches3(r.TokenType._export,r.TokenType.name,r.TokenType.braceL)&&this.tokens.matchesContextualAtIndex(this.tokens.currentIndex()+1,s.ContextualKeyword._type)){for(this.tokens.removeInitialToken();!this.tokens.matches1(r.TokenType.braceR);)this.tokens.removeToken();return this.tokens.removeToken(),this.tokens.matchesContextual(s.ContextualKeyword._from)&&this.tokens.matches1AtIndex(this.tokens.currentIndex()+1,r.TokenType.string)&&(this.tokens.removeToken(),this.tokens.removeToken()),!0}throw new Error("Unrecognized export syntax.")}processAssignment(){const e=this.tokens.currentIndex(),t=this.tokens.tokens[e-1];if(t.isType||t.type!==r.TokenType.name)return!1;if(t.shadowsGlobal)return!1;if(e>=2&&this.tokens.matches1AtIndex(e-2,r.TokenType.dot))return!1;if(e>=2&&[r.TokenType._var,r.TokenType._let,r.TokenType._const].includes(this.tokens.tokens[e-2].type))return!1;const o=this.importProcessor.resolveExportBinding(this.tokens.identifierNameForToken(t));return!!o&&(this.tokens.copyToken(),this.tokens.appendCode(` ${o} =`),!0)}processComplexAssignment(){const e=this.tokens.currentIndex(),t=this.tokens.tokens[e-1];if(t.type!==r.TokenType.name)return!1;if(t.shadowsGlobal)return!1;if(e>=2&&this.tokens.matches1AtIndex(e-2,r.TokenType.dot))return!1;const o=this.importProcessor.resolveExportBinding(this.tokens.identifierNameForToken(t));return!!o&&(this.tokens.appendCode(` = ${o}`),this.tokens.copyToken(),!0)}processPreIncDec(){const e=this.tokens.currentIndex(),t=this.tokens.tokens[e+1];if(t.type!==r.TokenType.name)return!1;if(t.shadowsGlobal)return!1;if(e+2<this.tokens.tokens.length&&(this.tokens.matches1AtIndex(e+2,r.TokenType.dot)||this.tokens.matches1AtIndex(e+2,r.TokenType.bracketL)||this.tokens.matches1AtIndex(e+2,r.TokenType.parenL)))return!1;const o=this.tokens.identifierNameForToken(t),n=this.importProcessor.resolveExportBinding(o);return!!n&&(this.tokens.appendCode(`${n} = `),this.tokens.copyToken(),!0)}processPostIncDec(){const e=this.tokens.currentIndex(),t=this.tokens.tokens[e],o=this.tokens.tokens[e+1];if(t.type!==r.TokenType.name)return!1;if(t.shadowsGlobal)return!1;if(e>=1&&this.tokens.matches1AtIndex(e-1,r.TokenType.dot))return!1;const n=this.tokens.identifierNameForToken(t),a=this.importProcessor.resolveExportBinding(n);if(!a)return!1;const s=this.tokens.rawCodeForToken(o),i=this.importProcessor.getIdentifierReplacement(n)||n;if("++"===s)this.tokens.replaceToken(`(${i} = ${a} = ${i} + 1, ${i} - 1)`);else{if("--"!==s)throw new Error(`Unexpected operator: ${s}`);this.tokens.replaceToken(`(${i} = ${a} = ${i} - 1, ${i} + 1)`)}return this.tokens.removeToken(),!0}processExportDefault(){if(this.tokens.matches4(r.TokenType._export,r.TokenType._default,r.TokenType._function,r.TokenType.name)||this.tokens.matches5(r.TokenType._export,r.TokenType._default,r.TokenType.name,r.TokenType._function,r.TokenType.name)){this.tokens.removeInitialToken(),this.tokens.removeToken();const e=this.processNamedFunction();this.tokens.appendCode(` exports.default = ${e};`)}else if(this.tokens.matches4(r.TokenType._export,r.TokenType._default,r.TokenType._class,r.TokenType.name)||this.tokens.matches5(r.TokenType._export,r.TokenType._default,r.TokenType._abstract,r.TokenType._class,r.TokenType.name)){this.tokens.removeInitialToken(),this.tokens.removeToken(),this.tokens.matches1(r.TokenType._abstract)&&this.tokens.removeToken();const e=this.rootTransformer.processNamedClass();this.tokens.appendCode(` exports.default = ${e};`)}else{if(this.tokens.matches3(r.TokenType._export,r.TokenType._default,r.TokenType.at))throw new Error("Export default statements with decorators are not yet supported.");if(p.default.call(void 0,this.isTypeScriptTransformEnabled,this.tokens,this.declarationInfo))this.tokens.removeInitialToken(),this.tokens.removeToken(),this.tokens.removeToken();else if(this.reactHotLoaderTransformer){const e=this.nameManager.claimFreeName("_default");this.tokens.replaceToken(`let ${e}; exports.`),this.tokens.copyToken(),this.tokens.appendCode(` = ${e} =`),this.reactHotLoaderTransformer.setExtractedDefaultExportName(e)}else this.tokens.replaceToken("exports."),this.tokens.copyToken(),this.tokens.appendCode(" =")}}processExportVar(){this.isSimpleExportVar()?this.processSimpleExportVar():this.processComplexExportVar()}isSimpleExportVar(){let e=this.tokens.currentIndex();if(e++,e++,!this.tokens.matches1AtIndex(e,r.TokenType.name))return!1;for(e++;e<this.tokens.tokens.length&&this.tokens.tokens[e].isType;)e++;return!!this.tokens.matches1AtIndex(e,r.TokenType.eq)}processSimpleExportVar(){this.tokens.removeInitialToken(),this.tokens.copyToken();const e=this.tokens.identifierName();for(;!this.tokens.matches1(r.TokenType.eq);)this.rootTransformer.processToken();const t=this.tokens.currentToken().rhsEndIndex;if(null==t)throw new Error("Expected = token with an end index.");for(;this.tokens.currentIndex()<t;)this.rootTransformer.processToken();this.tokens.appendCode(`; exports.${e} = ${e}`)}processComplexExportVar(){this.tokens.removeInitialToken(),this.tokens.removeToken();const e=this.tokens.matches1(r.TokenType.braceL);e&&this.tokens.appendCode("(");let t=0;for(;;)if(this.tokens.matches1(r.TokenType.braceL)||this.tokens.matches1(r.TokenType.dollarBraceL)||this.tokens.matches1(r.TokenType.bracketL))t++,this.tokens.copyToken();else if(this.tokens.matches1(r.TokenType.braceR)||this.tokens.matches1(r.TokenType.bracketR))t--,this.tokens.copyToken();else{if(0===t&&!this.tokens.matches1(r.TokenType.name)&&!this.tokens.currentToken().isType)break;if(this.tokens.matches1(r.TokenType.eq)){const e=this.tokens.currentToken().rhsEndIndex;if(null==e)throw new Error("Expected = token with an end index.");for(;this.tokens.currentIndex()<e;)this.rootTransformer.processToken()}else{const e=this.tokens.currentToken();if(a.isDeclaration.call(void 0,e)){const t=this.tokens.identifierName();let o=this.importProcessor.getIdentifierReplacement(t);if(null===o)throw new Error(`Expected a replacement for ${t} in \`export var\` syntax.`);a.isObjectShorthandDeclaration.call(void 0,e)&&(o=`${t}: ${o}`),this.tokens.replaceToken(o)}else this.rootTransformer.processToken()}}if(e){const e=this.tokens.currentToken().rhsEndIndex;if(null==e)throw new Error("Expected = token with an end index.");for(;this.tokens.currentIndex()<e;)this.rootTransformer.processToken();this.tokens.appendCode(")")}}processExportFunction(){this.tokens.replaceToken("");const e=this.processNamedFunction();this.tokens.appendCode(` exports.${e} = ${e};`)}processNamedFunction(){if(this.tokens.matches1(r.TokenType._function))this.tokens.copyToken();else if(this.tokens.matches2(r.TokenType.name,r.TokenType._function)){if(!this.tokens.matchesContextual(s.ContextualKeyword._async))throw new Error("Expected async keyword in function export.");this.tokens.copyToken(),this.tokens.copyToken()}if(this.tokens.matches1(r.TokenType.star)&&this.tokens.copyToken(),!this.tokens.matches1(r.TokenType.name))throw new Error("Expected identifier for exported function name.");const e=this.tokens.identifierName();if(this.tokens.copyToken(),this.tokens.currentToken().isType)for(this.tokens.removeInitialToken();this.tokens.currentToken().isType;)this.tokens.removeToken();return this.tokens.copyExpectedToken(r.TokenType.parenL),this.rootTransformer.processBalancedCode(),this.tokens.copyExpectedToken(r.TokenType.parenR),this.rootTransformer.processPossibleTypeRange(),this.tokens.copyExpectedToken(r.TokenType.braceL),this.rootTransformer.processBalancedCode(),this.tokens.copyExpectedToken(r.TokenType.braceR),e}processExportClass(){this.tokens.removeInitialToken(),this.tokens.matches1(r.TokenType._abstract)&&this.tokens.removeToken();const e=this.rootTransformer.processNamedClass();this.tokens.appendCode(` exports.${e} = ${e};`)}processExportBindings(){this.tokens.removeInitialToken(),this.tokens.removeToken();const e=[];for(;;){if(this.tokens.matches1(r.TokenType.braceR)){this.tokens.removeToken();break}const t=this.tokens.identifierName();let o;if(this.tokens.removeToken(),this.tokens.matchesContextual(s.ContextualKeyword._as)?(this.tokens.removeToken(),o=this.tokens.identifierName(),this.tokens.removeToken()):o=t,!this.shouldElideExportedIdentifier(t)){const n=this.importProcessor.getIdentifierReplacement(t);e.push(`exports.${o} = ${n||t};`)}if(this.tokens.matches1(r.TokenType.braceR)){this.tokens.removeToken();break}if(this.tokens.matches2(r.TokenType.comma,r.TokenType.braceR)){this.tokens.removeToken(),this.tokens.removeToken();break}if(!this.tokens.matches1(r.TokenType.comma))throw new Error(`Unexpected token: ${JSON.stringify(this.tokens.currentToken())}`);this.tokens.removeToken()}if(this.tokens.matchesContextual(s.ContextualKeyword._from)){this.tokens.removeToken();const e=this.tokens.stringValue();this.tokens.replaceTokenTrimmingLeftWhitespace(this.importProcessor.claimImportCode(e))}else this.tokens.appendCode(e.join(" "));this.tokens.matches1(r.TokenType.semi)&&this.tokens.removeToken()}processExportStar(){for(this.tokens.removeInitialToken();!this.tokens.matches1(r.TokenType.string);)this.tokens.removeToken();const e=this.tokens.stringValue();this.tokens.replaceTokenTrimmingLeftWhitespace(this.importProcessor.claimImportCode(e)),this.tokens.matches1(r.TokenType.semi)&&this.tokens.removeToken()}shouldElideExportedIdentifier(e){return this.isTypeScriptTransformEnabled&&!this.declarationInfo.valueDeclarations.has(e)}}t.default=T},992:(e,t,o)=>{function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var a=o(53),s=o(9609),r=n(o(7958)),i=o(6195),c=n(i),l=o(8413),p=n(o(9917)),d=n(o(3715));class T extends d.default{constructor(e,t,o,n,a){super(),this.tokens=e,this.nameManager=t,this.reactHotLoaderTransformer=o,this.isTypeScriptTransformEnabled=n,this.nonTypeIdentifiers=n?l.getNonTypeIdentifiers.call(void 0,e,a):new Set,this.declarationInfo=n?c.default.call(void 0,e):i.EMPTY_DECLARATION_INFO}process(){if(this.tokens.matches3(s.TokenType._import,s.TokenType.name,s.TokenType.eq))return this.processImportEquals();if(this.tokens.matches2(s.TokenType._export,s.TokenType.eq))return this.tokens.replaceToken("module.exports"),!0;if(this.tokens.matches1(s.TokenType._import))return this.processImport();if(this.tokens.matches2(s.TokenType._export,s.TokenType._default))return this.processExportDefault();if(this.tokens.matches2(s.TokenType._export,s.TokenType.braceL))return this.processNamedExports();if(this.tokens.matches3(s.TokenType._export,s.TokenType.name,s.TokenType.braceL)&&this.tokens.matchesContextualAtIndex(this.tokens.currentIndex()+1,a.ContextualKeyword._type)){for(this.tokens.removeInitialToken();!this.tokens.matches1(s.TokenType.braceR);)this.tokens.removeToken();return this.tokens.removeToken(),this.tokens.matchesContextual(a.ContextualKeyword._from)&&this.tokens.matches1AtIndex(this.tokens.currentIndex()+1,s.TokenType.string)&&(this.tokens.removeToken(),this.tokens.removeToken()),!0}return!1}processImportEquals(){const e=this.tokens.identifierNameAtIndex(this.tokens.currentIndex()+1);return this.isTypeName(e)?r.default.call(void 0,this.tokens):this.tokens.replaceToken("const"),!0}processImport(){if(this.tokens.matches2(s.TokenType._import,s.TokenType.parenL))return!1;const e=this.tokens.snapshot();if(this.removeImportTypeBindings()){for(this.tokens.restoreToSnapshot(e);!this.tokens.matches1(s.TokenType.string);)this.tokens.removeToken();this.tokens.removeToken(),this.tokens.matches1(s.TokenType.semi)&&this.tokens.removeToken()}return!0}removeImportTypeBindings(){if(this.tokens.copyExpectedToken(s.TokenType._import),this.tokens.matchesContextual(a.ContextualKeyword._type)&&!this.tokens.matches1AtIndex(this.tokens.currentIndex()+1,s.TokenType.comma)&&!this.tokens.matchesContextualAtIndex(this.tokens.currentIndex()+1,a.ContextualKeyword._from))return!0;if(this.tokens.matches1(s.TokenType.string))return this.tokens.copyToken(),!1;let e=!1;if(this.tokens.matches1(s.TokenType.name)&&(this.isTypeName(this.tokens.identifierName())?(this.tokens.removeToken(),this.tokens.matches1(s.TokenType.comma)&&this.tokens.removeToken()):(e=!0,this.tokens.copyToken(),this.tokens.matches1(s.TokenType.comma)&&this.tokens.copyToken())),this.tokens.matches1(s.TokenType.star))this.isTypeName(this.tokens.identifierNameAtIndex(this.tokens.currentIndex()+2))?(this.tokens.removeToken(),this.tokens.removeToken(),this.tokens.removeToken()):(e=!0,this.tokens.copyExpectedToken(s.TokenType.star),this.tokens.copyExpectedToken(s.TokenType.name),this.tokens.copyExpectedToken(s.TokenType.name));else if(this.tokens.matches1(s.TokenType.braceL)){for(this.tokens.copyToken();!this.tokens.matches1(s.TokenType.braceR);)if(this.tokens.matches3(s.TokenType.name,s.TokenType.name,s.TokenType.comma)||this.tokens.matches3(s.TokenType.name,s.TokenType.name,s.TokenType.braceR))this.tokens.removeToken(),this.tokens.removeToken(),this.tokens.matches1(s.TokenType.comma)&&this.tokens.removeToken();else if(this.tokens.matches5(s.TokenType.name,s.TokenType.name,s.TokenType.name,s.TokenType.name,s.TokenType.comma)||this.tokens.matches5(s.TokenType.name,s.TokenType.name,s.TokenType.name,s.TokenType.name,s.TokenType.braceR))this.tokens.removeToken(),this.tokens.removeToken(),this.tokens.removeToken(),this.tokens.removeToken(),this.tokens.matches1(s.TokenType.comma)&&this.tokens.removeToken();else if(this.tokens.matches2(s.TokenType.name,s.TokenType.comma)||this.tokens.matches2(s.TokenType.name,s.TokenType.braceR))this.isTypeName(this.tokens.identifierName())?(this.tokens.removeToken(),this.tokens.matches1(s.TokenType.comma)&&this.tokens.removeToken()):(e=!0,this.tokens.copyToken(),this.tokens.matches1(s.TokenType.comma)&&this.tokens.copyToken());else{if(!this.tokens.matches4(s.TokenType.name,s.TokenType.name,s.TokenType.name,s.TokenType.comma)&&!this.tokens.matches4(s.TokenType.name,s.TokenType.name,s.TokenType.name,s.TokenType.braceR))throw new Error("Unexpected import form.");this.isTypeName(this.tokens.identifierNameAtIndex(this.tokens.currentIndex()+2))?(this.tokens.removeToken(),this.tokens.removeToken(),this.tokens.removeToken(),this.tokens.matches1(s.TokenType.comma)&&this.tokens.removeToken()):(e=!0,this.tokens.copyToken(),this.tokens.copyToken(),this.tokens.copyToken(),this.tokens.matches1(s.TokenType.comma)&&this.tokens.copyToken())}this.tokens.copyExpectedToken(s.TokenType.braceR)}return!e}isTypeName(e){return this.isTypeScriptTransformEnabled&&!this.nonTypeIdentifiers.has(e)}processExportDefault(){if(p.default.call(void 0,this.isTypeScriptTransformEnabled,this.tokens,this.declarationInfo))return this.tokens.removeInitialToken(),this.tokens.removeToken(),this.tokens.removeToken(),!0;if(!(this.tokens.matches4(s.TokenType._export,s.TokenType._default,s.TokenType._function,s.TokenType.name)||this.tokens.matches5(s.TokenType._export,s.TokenType._default,s.TokenType.name,s.TokenType._function,s.TokenType.name)||this.tokens.matches4(s.TokenType._export,s.TokenType._default,s.TokenType._class,s.TokenType.name)||this.tokens.matches5(s.TokenType._export,s.TokenType._default,s.TokenType._abstract,s.TokenType._class,s.TokenType.name))&&this.reactHotLoaderTransformer){const e=this.nameManager.claimFreeName("_default");return this.tokens.replaceToken(`let ${e}; export`),this.tokens.copyToken(),this.tokens.appendCode(` ${e} =`),this.reactHotLoaderTransformer.setExtractedDefaultExportName(e),!0}return!1}processNamedExports(){if(!this.isTypeScriptTransformEnabled)return!1;for(this.tokens.copyExpectedToken(s.TokenType._export),this.tokens.copyExpectedToken(s.TokenType.braceL);!this.tokens.matches1(s.TokenType.braceR);){if(!this.tokens.matches1(s.TokenType.name))throw new Error("Expected identifier at the start of named export.");if(this.shouldElideExportedName(this.tokens.identifierName())){for(;!this.tokens.matches1(s.TokenType.comma)&&!this.tokens.matches1(s.TokenType.braceR)&&!this.tokens.isAtEnd();)this.tokens.removeToken();this.tokens.matches1(s.TokenType.comma)&&this.tokens.removeToken()}else{for(;!this.tokens.matches1(s.TokenType.comma)&&!this.tokens.matches1(s.TokenType.braceR)&&!this.tokens.isAtEnd();)this.tokens.copyToken();this.tokens.matches1(s.TokenType.comma)&&this.tokens.copyToken()}}return this.tokens.copyExpectedToken(s.TokenType.braceR),!0}shouldElideExportedName(e){return this.isTypeScriptTransformEnabled&&this.declarationInfo.typeDeclarations.has(e)&&!this.declarationInfo.valueDeclarations.has(e)}}t.default=T},6784:(e,t,o)=>{Object.defineProperty(t,"__esModule",{value:!0});var n,a=(n=o(3715))&&n.__esModule?n:{default:n};class s extends a.default{constructor(e,t){super(),this.rootTransformer=e,this.tokens=t}process(){return this.rootTransformer.processPossibleArrowParamEnd()||this.rootTransformer.processPossibleAsyncArrowWithTypeParams()||this.rootTransformer.processPossibleTypeRange()}}t.default=s},4920:(e,t,o)=>{function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var a=n(o(6076)),s=o(9609),r=o(5920),i=n(o(7525)),c=n(o(3715));const l=/^[\da-fA-F]+$/,p=/^\d+$/;class d extends c.default{__init(){this.lastLineNumber=1}__init2(){this.lastIndex=0}__init3(){this.filenameVarName=null}constructor(e,t,o,n,a){super(),this.rootTransformer=e,this.tokens=t,this.importProcessor=o,this.nameManager=n,this.options=a,d.prototype.__init.call(this),d.prototype.__init2.call(this),d.prototype.__init3.call(this),this.jsxPragmaInfo=i.default.call(void 0,a)}process(){return!!this.tokens.matches1(s.TokenType.jsxTagStart)&&(this.processJSXTag(),!0)}getPrefixCode(){return this.filenameVarName?`const ${this.filenameVarName} = ${JSON.stringify(this.options.filePath||"")};`:""}getLineNumberForIndex(e){const t=this.tokens.code;for(;this.lastIndex<e&&this.lastIndex<t.length;)"\n"===t[this.lastIndex]&&this.lastLineNumber++,this.lastIndex++;return this.lastLineNumber}getFilenameVarName(){return this.filenameVarName||(this.filenameVarName=this.nameManager.claimFreeName("_jsxFileName")),this.filenameVarName}processProps(e){const t=this.getLineNumberForIndex(e),o=this.options.production?"":`__self: this, __source: {fileName: ${this.getFilenameVarName()}, lineNumber: ${t}}`;if(this.tokens.matches1(s.TokenType.jsxName)||this.tokens.matches1(s.TokenType.braceL)){for(this.tokens.appendCode(", {");;){if(this.tokens.matches2(s.TokenType.jsxName,s.TokenType.eq))this.processPropKeyName(),this.tokens.replaceToken(": "),this.tokens.matches1(s.TokenType.braceL)?(this.tokens.replaceToken(""),this.rootTransformer.processBalancedCode(),this.tokens.replaceToken("")):this.tokens.matches1(s.TokenType.jsxTagStart)?this.processJSXTag():this.processStringPropValue();else if(this.tokens.matches1(s.TokenType.jsxName))this.processPropKeyName(),this.tokens.appendCode(": true");else{if(!this.tokens.matches1(s.TokenType.braceL))break;this.tokens.replaceToken(""),this.rootTransformer.processBalancedCode(),this.tokens.replaceToken("")}this.tokens.appendCode(",")}o?this.tokens.appendCode(` ${o}}`):this.tokens.appendCode("}")}else o?this.tokens.appendCode(`, {${o}}`):this.tokens.appendCode(", null")}processPropKeyName(){const e=this.tokens.identifierName();e.includes("-")?this.tokens.replaceToken(`'${e}'`):this.tokens.copyToken()}processStringPropValue(){const e=this.tokens.currentToken(),t=this.tokens.code.slice(e.start+1,e.end-1),o=h(t),n=function(e){let t="";for(let o=0;o<e.length;o++){const n=e[o];if("\n"===n)if(/\s/.test(e[o+1]))for(t+=" ";o<e.length&&/\s/.test(e[o+1]);)o++;else t+="\n";else if("&"===n){const{entity:n,newI:a}=u(e,o+1);t+=n,o=a-1}else t+=n}return JSON.stringify(t)}(t);this.tokens.replaceToken(n+o)}processTagIntro(){let e=this.tokens.currentIndex()+1;for(;this.tokens.tokens[e].isType||!this.tokens.matches2AtIndex(e-1,s.TokenType.jsxName,s.TokenType.jsxName)&&!this.tokens.matches2AtIndex(e-1,s.TokenType.greaterThan,s.TokenType.jsxName)&&!this.tokens.matches1AtIndex(e,s.TokenType.braceL)&&!this.tokens.matches1AtIndex(e,s.TokenType.jsxTagEnd)&&!this.tokens.matches2AtIndex(e,s.TokenType.slash,s.TokenType.jsxTagEnd);)e++;if(e===this.tokens.currentIndex()+1){const e=this.tokens.identifierName();T(e)&&this.tokens.replaceToken(`'${e}'`)}for(;this.tokens.currentIndex()<e;)this.rootTransformer.processToken()}processChildren(){for(;;){if(this.tokens.matches2(s.TokenType.jsxTagStart,s.TokenType.slash))return;if(this.tokens.matches1(s.TokenType.braceL))this.tokens.matches2(s.TokenType.braceL,s.TokenType.braceR)?(this.tokens.replaceToken(""),this.tokens.replaceToken("")):(this.tokens.replaceToken(", "),this.rootTransformer.processBalancedCode(),this.tokens.replaceToken(""));else if(this.tokens.matches1(s.TokenType.jsxTagStart))this.tokens.appendCode(", "),this.processJSXTag();else{if(!this.tokens.matches1(s.TokenType.jsxText))throw new Error("Unexpected token when processing JSX children.");this.processChildTextElement()}}}processChildTextElement(){const e=this.tokens.currentToken(),t=this.tokens.code.slice(e.start,e.end),o=h(t),n=function(e){let t="",o="",n=!1,a=!1;for(let s=0;s<e.length;s++){const r=e[s];if(" "===r||"\t"===r||"\r"===r)n||(o+=r);else if("\n"===r)o="",n=!0;else{if(a&&n&&(t+=" "),t+=o,o="","&"===r){const{entity:o,newI:n}=u(e,s+1);s=n-1,t+=o}else t+=r;a=!0,n=!1}}return n||(t+=o),JSON.stringify(t)}(t);'""'===n?this.tokens.replaceToken(o):this.tokens.replaceToken(`, ${n}${o}`)}processJSXTag(){const{jsxPragmaInfo:e}=this,t=this.importProcessor&&this.importProcessor.getIdentifierReplacement(e.base)||e.base,o=this.tokens.currentToken().start;if(this.tokens.replaceToken(`${t}${e.suffix}(`),this.tokens.matches1(s.TokenType.jsxTagEnd)){const t=this.importProcessor&&this.importProcessor.getIdentifierReplacement(e.fragmentBase)||e.fragmentBase;for(this.tokens.replaceToken(`${t}${e.fragmentSuffix}, null`),this.processChildren();!this.tokens.matches1(s.TokenType.jsxTagEnd);)this.tokens.replaceToken("");this.tokens.replaceToken(")")}else if(this.processTagIntro(),this.processProps(o),this.tokens.matches2(s.TokenType.slash,s.TokenType.jsxTagEnd))this.tokens.replaceToken(""),this.tokens.replaceToken(")");else{if(!this.tokens.matches1(s.TokenType.jsxTagEnd))throw new Error("Expected either /> or > at the end of the tag.");for(this.tokens.replaceToken(""),this.processChildren();!this.tokens.matches1(s.TokenType.jsxTagEnd);)this.tokens.replaceToken("");this.tokens.replaceToken(")")}}}function T(e){const t=e.charCodeAt(0);return t>=r.charCodes.lowercaseA&&t<=r.charCodes.lowercaseZ}function h(e){let t=0,o=0;for(const n of e)"\n"===n?(t++,o=0):" "===n&&o++;return"\n".repeat(t)+" ".repeat(o)}function u(e,t){let o,n="",s=0,r=t;for(;r<e.length&&s++<10;){const t=e[r];if(r++,";"===t){"#"===n[0]?"x"===n[1]?(n=n.substr(2),l.test(n)&&(o=String.fromCodePoint(parseInt(n,16)))):(n=n.substr(1),p.test(n)&&(o=String.fromCodePoint(parseInt(n,10)))):o=a.default[n];break}n+=t}return o?{entity:o,newI:r}:{entity:"&",newI:t}}t.default=d,t.startsWithLowerCase=T},7307:(e,t,o)=>{Object.defineProperty(t,"__esModule",{value:!0});var n,a=o(9609),s=(n=o(3715))&&n.__esModule?n:{default:n};class r extends s.default{constructor(e){super(),this.tokens=e}process(){if(this.tokens.matches1(a.TokenType.num)){const e=this.tokens.currentTokenCode();if(e.includes("_"))return this.tokens.replaceToken(e.replace(/_/g,"")),!0}return!1}}t.default=r},2437:(e,t,o)=>{Object.defineProperty(t,"__esModule",{value:!0});var n,a=o(9609),s=(n=o(3715))&&n.__esModule?n:{default:n};class r extends s.default{constructor(e,t){super(),this.tokens=e,this.nameManager=t}process(){return!!this.tokens.matches2(a.TokenType._catch,a.TokenType.braceL)&&(this.tokens.copyToken(),this.tokens.appendCode(` (${this.nameManager.claimFreeName("e")})`),!0)}}t.default=r},5487:(e,t,o)=>{Object.defineProperty(t,"__esModule",{value:!0});var n,a=o(9609),s=(n=o(3715))&&n.__esModule?n:{default:n};class r extends s.default{constructor(e,t){super(),this.tokens=e,this.nameManager=t}process(){if(this.tokens.matches1(a.TokenType.nullishCoalescing)){const e=this.tokens.currentToken();return this.tokens.tokens[e.nullishStartIndex].isAsyncOperation?this.tokens.replaceTokenTrimmingLeftWhitespace(", async () => ("):this.tokens.replaceTokenTrimmingLeftWhitespace(", () => ("),!0}if(this.tokens.matches1(a.TokenType._delete)&&this.tokens.tokenAtRelativeIndex(1).isOptionalChainStart)return this.tokens.removeInitialToken(),!0;const e=this.tokens.currentToken().subscriptStartIndex;if(null!=e&&this.tokens.tokens[e].isOptionalChainStart&&this.tokens.tokenAtRelativeIndex(-1).type!==a.TokenType._super){const t=this.nameManager.claimFreeName("_");let o;if(o=e>0&&this.tokens.matches1AtIndex(e-1,a.TokenType._delete)&&this.isLastSubscriptInChain()?`${t} => delete ${t}`:`${t} => ${t}`,this.tokens.tokens[e].isAsyncOperation&&(o=`async ${o}`),this.tokens.matches2(a.TokenType.questionDot,a.TokenType.parenL)||this.tokens.matches2(a.TokenType.questionDot,a.TokenType.lessThan))this.justSkippedSuper()&&this.tokens.appendCode(".bind(this)"),this.tokens.replaceTokenTrimmingLeftWhitespace(`, 'optionalCall', ${o}`);else if(this.tokens.matches2(a.TokenType.questionDot,a.TokenType.bracketL))this.tokens.replaceTokenTrimmingLeftWhitespace(`, 'optionalAccess', ${o}`);else if(this.tokens.matches1(a.TokenType.questionDot))this.tokens.replaceTokenTrimmingLeftWhitespace(`, 'optionalAccess', ${o}.`);else if(this.tokens.matches1(a.TokenType.dot))this.tokens.replaceTokenTrimmingLeftWhitespace(`, 'access', ${o}.`);else if(this.tokens.matches1(a.TokenType.bracketL))this.tokens.replaceTokenTrimmingLeftWhitespace(`, 'access', ${o}[`);else{if(!this.tokens.matches1(a.TokenType.parenL))throw new Error("Unexpected subscript operator in optional chain.");this.justSkippedSuper()&&this.tokens.appendCode(".bind(this)"),this.tokens.replaceTokenTrimmingLeftWhitespace(`, 'call', ${o}(`)}return!0}return!1}isLastSubscriptInChain(){let e=0;for(let t=this.tokens.currentIndex()+1;;t++){if(t>=this.tokens.tokens.length)throw new Error("Reached the end of the code while finding the end of the access chain.");if(this.tokens.tokens[t].isOptionalChainStart?e++:this.tokens.tokens[t].isOptionalChainEnd&&e--,e<0)return!0;if(0===e&&null!=this.tokens.tokens[t].subscriptStartIndex)return!1}}justSkippedSuper(){let e=0,t=this.tokens.currentIndex()-1;for(;;){if(t<0)throw new Error("Reached the start of the code while finding the start of the access chain.");if(this.tokens.tokens[t].isOptionalChainStart?e--:this.tokens.tokens[t].isOptionalChainEnd&&e++,e<0)return!1;if(0===e&&null!=this.tokens.tokens[t].subscriptStartIndex)return this.tokens.tokens[t-1].type===a.TokenType._super;t--}}}t.default=r},8662:(e,t,o)=>{Object.defineProperty(t,"__esModule",{value:!0});var n,a=o(7899),s=o(9609),r=(n=o(3715))&&n.__esModule?n:{default:n};class i extends r.default{constructor(e,t,o,n){super(),this.rootTransformer=e,this.tokens=t,this.importProcessor=o,this.options=n}process(){const e=this.tokens.currentIndex();if("createReactClass"===this.tokens.identifierName()){const t=this.importProcessor&&this.importProcessor.getIdentifierReplacement("createReactClass");return t?this.tokens.replaceToken(`(0, ${t})`):this.tokens.copyToken(),this.tryProcessCreateClassCall(e),!0}if(this.tokens.matches3(s.TokenType.name,s.TokenType.dot,s.TokenType.name)&&"React"===this.tokens.identifierName()&&"createClass"===this.tokens.identifierNameAtIndex(this.tokens.currentIndex()+2)){const t=this.importProcessor&&this.importProcessor.getIdentifierReplacement("React")||"React";return t?(this.tokens.replaceToken(t),this.tokens.copyToken(),this.tokens.copyToken()):(this.tokens.copyToken(),this.tokens.copyToken(),this.tokens.copyToken()),this.tryProcessCreateClassCall(e),!0}return!1}tryProcessCreateClassCall(e){const t=this.findDisplayName(e);t&&this.classNeedsDisplayName()&&(this.tokens.copyExpectedToken(s.TokenType.parenL),this.tokens.copyExpectedToken(s.TokenType.braceL),this.tokens.appendCode(`displayName: '${t}',`),this.rootTransformer.processBalancedCode(),this.tokens.copyExpectedToken(s.TokenType.braceR),this.tokens.copyExpectedToken(s.TokenType.parenR))}findDisplayName(e){return e<2?null:this.tokens.matches2AtIndex(e-2,s.TokenType.name,s.TokenType.eq)||e>=2&&this.tokens.tokens[e-2].identifierRole===a.IdentifierRole.ObjectKey?this.tokens.identifierNameAtIndex(e-2):this.tokens.matches2AtIndex(e-2,s.TokenType._export,s.TokenType._default)?this.getDisplayNameFromFilename():null}getDisplayNameFromFilename(){const e=(this.options.filePath||"unknown").split("/"),t=e[e.length-1],o=t.lastIndexOf("."),n=-1===o?t:t.slice(0,o);return"index"===n&&e[e.length-2]?e[e.length-2]:n}classNeedsDisplayName(){let e=this.tokens.currentIndex();if(!this.tokens.matches2(s.TokenType.parenL,s.TokenType.braceL))return!1;const t=e+1,o=this.tokens.tokens[t].contextId;if(null==o)throw new Error("Expected non-null context ID on object open-brace.");for(;e<this.tokens.tokens.length;e++){const t=this.tokens.tokens[e];if(t.type===s.TokenType.braceR&&t.contextId===o){e++;break}if("displayName"===this.tokens.identifierNameAtIndex(e)&&this.tokens.tokens[e].identifierRole===a.IdentifierRole.ObjectKey&&t.contextId===o)return!1}if(e===this.tokens.tokens.length)throw new Error("Unexpected end of input when processing React class.");return this.tokens.matches1AtIndex(e,s.TokenType.parenR)||this.tokens.matches2AtIndex(e,s.TokenType.comma,s.TokenType.parenR)}}t.default=i},638:(e,t,o)=>{Object.defineProperty(t,"__esModule",{value:!0});var n,a=o(7899),s=(n=o(3715))&&n.__esModule?n:{default:n};class r extends s.default{__init(){this.extractedDefaultExportName=null}constructor(e,t){super(),this.tokens=e,this.filePath=t,r.prototype.__init.call(this)}setExtractedDefaultExportName(e){this.extractedDefaultExportName=e}getPrefixCode(){return"\n      (function () {\n        var enterModule = require('react-hot-loader').enterModule;\n        enterModule && enterModule(module);\n      })();".replace(/\s+/g," ").trim()}getSuffixCode(){const e=new Set;for(const t of this.tokens.tokens)!t.isType&&a.isTopLevelDeclaration.call(void 0,t)&&t.identifierRole!==a.IdentifierRole.ImportDeclaration&&e.add(this.tokens.identifierNameForToken(t));const t=Array.from(e).map((e=>({variableName:e,uniqueLocalName:e})));return this.extractedDefaultExportName&&t.push({variableName:this.extractedDefaultExportName,uniqueLocalName:"default"}),`\n;(function () {\n  var reactHotLoader = require('react-hot-loader').default;\n  var leaveModule = require('react-hot-loader').leaveModule;\n  if (!reactHotLoader) {\n    return;\n  }\n${t.map((({variableName:e,uniqueLocalName:t})=>`  reactHotLoader.register(${e}, "${t}", ${JSON.stringify(this.filePath||"")});`)).join("\n")}\n  leaveModule(module);\n})();`}process(){return!1}}t.default=r},8080:(e,t,o)=>{function n(e){return e&&e.__esModule?e:{default:e}}var a=o(53),s=o(9609),r=n(o(6482)),i=n(o(9998)),c=n(o(992)),l=n(o(6784)),p=n(o(4920)),d=n(o(7307)),T=n(o(2437)),h=n(o(5487)),u=n(o(8662)),k=n(o(638)),y=n(o(765));class f{__init(){this.transformers=[]}__init2(){this.generatedVariables=[]}constructor(e,t,o,n){f.prototype.__init.call(this),f.prototype.__init2.call(this),this.nameManager=e.nameManager,this.helperManager=e.helperManager;const{tokenProcessor:a,importProcessor:s}=e;this.tokens=a,this.isImportsTransformEnabled=t.includes("imports"),this.isReactHotLoaderTransformEnabled=t.includes("react-hot-loader"),this.transformers.push(new(0,h.default)(a,this.nameManager)),this.transformers.push(new(0,d.default)(a)),this.transformers.push(new(0,T.default)(a,this.nameManager)),t.includes("jsx")&&(this.transformers.push(new(0,p.default)(this,a,s,this.nameManager,n)),this.transformers.push(new(0,u.default)(this,a,s,n)));let r=null;if(t.includes("react-hot-loader")){if(!n.filePath)throw new Error("filePath is required when using the react-hot-loader transform.");r=new(0,k.default)(a,n.filePath),this.transformers.push(r)}if(t.includes("imports")){if(null===s)throw new Error("Expected non-null importProcessor with imports transform enabled.");this.transformers.push(new(0,i.default)(this,a,s,this.nameManager,r,o,t.includes("typescript")))}else this.transformers.push(new(0,c.default)(a,this.nameManager,r,t.includes("typescript"),n));t.includes("flow")&&this.transformers.push(new(0,l.default)(this,a)),t.includes("typescript")&&this.transformers.push(new(0,y.default)(this,a,t.includes("imports")))}transform(){this.tokens.reset(),this.processBalancedCode();let e=this.isImportsTransformEnabled?'"use strict";':"";for(const t of this.transformers)e+=t.getPrefixCode();e+=this.helperManager.emitHelpers(),e+=this.generatedVariables.map((e=>` var ${e};`)).join("");let t="";for(const e of this.transformers)t+=e.getSuffixCode();let o=this.tokens.finish();if(o.startsWith("#!")){let n=o.indexOf("\n");return-1===n&&(n=o.length,o+="\n"),o.slice(0,n+1)+e+o.slice(n+1)+t}return e+this.tokens.finish()+t}processBalancedCode(){let e=0,t=0;for(;!this.tokens.isAtEnd();){if(this.tokens.matches1(s.TokenType.braceL)||this.tokens.matches1(s.TokenType.dollarBraceL))e++;else if(this.tokens.matches1(s.TokenType.braceR)){if(0===e)return;e--}if(this.tokens.matches1(s.TokenType.parenL))t++;else if(this.tokens.matches1(s.TokenType.parenR)){if(0===t)return;t--}this.processToken()}}processToken(){if(this.tokens.matches1(s.TokenType._class))this.processClass();else{for(const e of this.transformers)if(e.process())return;this.tokens.copyToken()}}processNamedClass(){if(!this.tokens.matches2(s.TokenType._class,s.TokenType.name))throw new Error("Expected identifier for exported class name.");const e=this.tokens.identifierNameAtIndex(this.tokens.currentIndex()+1);return this.processClass(),e}processClass(){const e=r.default.call(void 0,this,this.tokens,this.nameManager),t=e.headerInfo.isExpression&&e.staticInitializerNames.length+e.instanceInitializerNames.length>0;let o=e.headerInfo.className;t&&(o=this.nameManager.claimFreeName("_class"),this.generatedVariables.push(o),this.tokens.appendCode(` (${o} =`));const n=this.tokens.currentToken().contextId;if(null==n)throw new Error("Expected class to have a context ID.");for(this.tokens.copyExpectedToken(s.TokenType._class);!this.tokens.matchesContextIdAndLabel(s.TokenType.braceL,n);)this.processToken();this.processClassBody(e,o);const a=e.staticInitializerNames.map((e=>`${o}.${e}()`));t?this.tokens.appendCode(`, ${a.map((e=>`${e}, `)).join("")}${o})`):e.staticInitializerNames.length>0&&this.tokens.appendCode(` ${a.map((e=>`${e};`)).join(" ")}`)}processClassBody(e,t){const{headerInfo:o,constructorInsertPos:n,constructorInitializerStatements:a,fields:r,instanceInitializerNames:i,rangesToRemove:c}=e;let l=0,p=0;const d=this.tokens.currentToken().contextId;if(null==d)throw new Error("Expected non-null context ID on class.");this.tokens.copyExpectedToken(s.TokenType.braceL),this.isReactHotLoaderTransformEnabled&&this.tokens.appendCode("__reactstandin__regenerateByEval(key, code) {this[key] = eval(code);}");const T=a.length+i.length>0;if(null===n&&T){const e=this.makeConstructorInitCode(a,i,t);if(o.hasSuperclass){const t=this.nameManager.claimFreeName("args");this.tokens.appendCode(`constructor(...${t}) { super(...${t}); ${e}; }`)}else this.tokens.appendCode(`constructor() { ${e}; }`)}for(;!this.tokens.matchesContextIdAndLabel(s.TokenType.braceR,d);)if(l<r.length&&this.tokens.currentIndex()===r[l].start){let e=!1;for(this.tokens.matches1(s.TokenType.bracketL)?this.tokens.copyTokenWithPrefix(`${r[l].initializerName}() {this`):this.tokens.matches1(s.TokenType.string)||this.tokens.matches1(s.TokenType.num)?(this.tokens.copyTokenWithPrefix(`${r[l].initializerName}() {this[`),e=!0):this.tokens.copyTokenWithPrefix(`${r[l].initializerName}() {this.`);this.tokens.currentIndex()<r[l].end;)e&&this.tokens.currentIndex()===r[l].equalsIndex&&this.tokens.appendCode("]"),this.processToken();this.tokens.appendCode("}"),l++}else if(p<c.length&&this.tokens.currentIndex()===c[p].start){for(this.tokens.removeInitialToken();this.tokens.currentIndex()<c[p].end;)this.tokens.removeToken();p++}else this.tokens.currentIndex()===n?(this.tokens.copyToken(),T&&this.tokens.appendCode(`;${this.makeConstructorInitCode(a,i,t)};`),this.processToken()):this.processToken();this.tokens.copyExpectedToken(s.TokenType.braceR)}makeConstructorInitCode(e,t,o){return[...e,...t.map((e=>`${o}.prototype.${e}.call(this)`))].join(";")}processPossibleArrowParamEnd(){if(this.tokens.matches2(s.TokenType.parenR,s.TokenType.colon)&&this.tokens.tokenAtRelativeIndex(1).isType){let e=this.tokens.currentIndex()+1;for(;this.tokens.tokens[e].isType;)e++;if(this.tokens.matches1AtIndex(e,s.TokenType.arrow)){for(this.tokens.removeInitialToken();this.tokens.currentIndex()<e;)this.tokens.removeToken();return this.tokens.replaceTokenTrimmingLeftWhitespace(") =>"),!0}}return!1}processPossibleAsyncArrowWithTypeParams(){if(!this.tokens.matchesContextual(a.ContextualKeyword._async)&&!this.tokens.matches1(s.TokenType._async))return!1;const e=this.tokens.tokenAtRelativeIndex(1);if(e.type!==s.TokenType.lessThan||!e.isType)return!1;let t=this.tokens.currentIndex()+1;for(;this.tokens.tokens[t].isType;)t++;if(this.tokens.matches1AtIndex(t,s.TokenType.parenL)){for(this.tokens.replaceToken("async ("),this.tokens.removeInitialToken();this.tokens.currentIndex()<t;)this.tokens.removeToken();return this.tokens.removeToken(),this.processBalancedCode(),this.processToken(),!0}return!1}processPossibleTypeRange(){if(this.tokens.currentToken().isType){for(this.tokens.removeInitialToken();this.tokens.currentToken().isType;)this.tokens.removeToken();return!0}return!1}}t.Z=f},3715:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=class{getPrefixCode(){return""}getSuffixCode(){return""}}},765:(e,t,o)=>{function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var a=o(9609),s=n(o(5816)),r=n(o(3715));class i extends r.default{constructor(e,t,o){super(),this.rootTransformer=e,this.tokens=t,this.isImportsTransformEnabled=o}process(){return!(!(this.rootTransformer.processPossibleArrowParamEnd()||this.rootTransformer.processPossibleAsyncArrowWithTypeParams()||this.rootTransformer.processPossibleTypeRange())&&(this.tokens.matches1(a.TokenType._public)||this.tokens.matches1(a.TokenType._protected)||this.tokens.matches1(a.TokenType._private)||this.tokens.matches1(a.TokenType._abstract)||this.tokens.matches1(a.TokenType._readonly)||this.tokens.matches1(a.TokenType.nonNullAssertion)?(this.tokens.removeInitialToken(),0):this.tokens.matches1(a.TokenType._enum)||this.tokens.matches2(a.TokenType._const,a.TokenType._enum)?(this.processEnum(),0):!this.tokens.matches2(a.TokenType._export,a.TokenType._enum)&&!this.tokens.matches3(a.TokenType._export,a.TokenType._const,a.TokenType._enum)||(this.processEnum(!0),0)))}processEnum(e=!1){for(this.tokens.removeInitialToken();this.tokens.matches1(a.TokenType._const)||this.tokens.matches1(a.TokenType._enum);)this.tokens.removeToken();const t=this.tokens.identifierName();this.tokens.removeToken(),e&&!this.isImportsTransformEnabled&&this.tokens.appendCode("export "),this.tokens.appendCode(`var ${t}; (function (${t})`),this.tokens.copyExpectedToken(a.TokenType.braceL),this.processEnumBody(t),this.tokens.copyExpectedToken(a.TokenType.braceR),e&&this.isImportsTransformEnabled?this.tokens.appendCode(`)(${t} || (exports.${t} = ${t} = {}));`):this.tokens.appendCode(`)(${t} || (${t} = {}));`)}processEnumBody(e){let t=!1,o=null;for(;!this.tokens.matches1(a.TokenType.braceR);){const n=this.tokens.currentToken();let r,i;if(n.type===a.TokenType.name)r=this.tokens.identifierNameForToken(n),i=`"${r}"`;else{if(n.type!==a.TokenType.string)throw new Error("Expected name or string at beginning of enum element.");r=this.tokens.stringValueForToken(n),i=this.tokens.code.slice(n.start,n.end)}const c=s.default.call(void 0,r);let l,p,d;if(this.tokens.removeInitialToken(),this.tokens.matches1(a.TokenType.eq)){const e=this.tokens.currentToken().rhsEndIndex;if(null==e)throw new Error("Expected rhsEndIndex on enum assign.");this.tokens.removeToken(),(this.tokens.matches2(a.TokenType.string,a.TokenType.comma)||this.tokens.matches2(a.TokenType.string,a.TokenType.braceR))&&(l=!0);const t=this.tokens.currentToken();for(;this.tokens.currentIndex()<e;)this.tokens.removeToken();p=this.tokens.code.slice(t.start,this.tokens.tokenAtRelativeIndex(-1).end)}else l=!1,p=null!=o?t?`${o} + 1`:`(${o}) + 1`:"0";this.tokens.matches1(a.TokenType.comma)&&this.tokens.removeToken(),c?(this.tokens.appendCode(`const ${r} = ${p}; `),d=r):d=p,l?this.tokens.appendCode(`${e}[${i}] = ${d};`):this.tokens.appendCode(`${e}[${e}[${i}] = ${d}] = ${i};`),o=d,t=c}}}t.default=i},7958:(e,t,o)=>{Object.defineProperty(t,"__esModule",{value:!0});var n=o(9609);t.default=function(e){if(e.removeInitialToken(),e.removeToken(),e.removeToken(),e.removeToken(),e.matches1(n.TokenType.parenL))e.removeToken(),e.removeToken(),e.removeToken();else for(;e.matches1(n.TokenType.dot);)e.removeToken(),e.removeToken()}},3411:(e,t,o)=>{var n;(n=o(1713))&&n.__esModule,o(9609)},6482:(e,t,o)=>{Object.defineProperty(t,"__esModule",{value:!0});var n=o(53),a=o(9609);function s(e,t){for(e.nextToken();e.currentToken().contextId!==t;)e.nextToken();for(;i(e.tokenAtRelativeIndex(-1));)e.previousToken()}function r(e){const t=[];e.nextToken();const o=e.currentToken().contextId;if(null==o)throw new Error("Expected context ID on open-paren starting constructor params.");for(;!e.matchesContextIdAndLabel(a.TokenType.parenR,o);)if(e.currentToken().contextId===o){if(e.nextToken(),i(e.currentToken())){for(e.nextToken();i(e.currentToken());)e.nextToken();const o=e.currentToken();if(o.type!==a.TokenType.name)throw new Error("Expected identifier after access modifiers in constructor arg.");const n=e.identifierNameForToken(o);t.push(`this.${n} = ${n}`)}}else e.nextToken();e.nextToken();let n=e.currentIndex(),s=!1;for(;!e.matchesContextIdAndLabel(a.TokenType.braceR,o);){if(!s&&e.matches2(a.TokenType._super,a.TokenType.parenL)){e.nextToken();const t=e.currentToken().contextId;if(null==t)throw new Error("Expected a context ID on the super call");for(;!e.matchesContextIdAndLabel(a.TokenType.parenR,t);)e.nextToken();n=e.currentIndex(),s=!0}e.nextToken()}return e.nextToken(),{constructorInitializerStatements:t,constructorInsertPos:n}}function i(e){return[a.TokenType._async,a.TokenType._get,a.TokenType._set,a.TokenType.plus,a.TokenType.minus,a.TokenType._readonly,a.TokenType._static,a.TokenType._public,a.TokenType._private,a.TokenType._protected,a.TokenType._abstract,a.TokenType.star,a.TokenType._declare,a.TokenType.hash].includes(e.type)}function c(e){if(e.matches1(a.TokenType.bracketL)){const t=e.currentToken().contextId;if(null==t)throw new Error("Expected class context ID on computed name open bracket.");for(;!e.matchesContextIdAndLabel(a.TokenType.bracketR,t);)e.nextToken();e.nextToken()}else e.nextToken()}t.default=function(e,t,o){const l=t.snapshot(),p=function(e){const t=e.currentToken(),o=t.contextId;if(null==o)throw new Error("Expected context ID on class token.");const n=t.isExpression;if(null==n)throw new Error("Expected isExpression on class token.");let s=null,r=!1;for(e.nextToken(),e.matches1(a.TokenType.name)&&(s=e.identifierName());!e.matchesContextIdAndLabel(a.TokenType.braceL,o);)e.matches1(a.TokenType._extends)&&!e.currentToken().isType&&(r=!0),e.nextToken();return{isExpression:n,className:s,hasSuperclass:r}}(t);let d=[];const T=[],h=[];let u=null;const k=[],y=[],f=t.currentToken().contextId;if(null==f)throw new Error("Expected non-null class context ID on class open-brace.");for(t.nextToken();!t.matchesContextIdAndLabel(a.TokenType.braceR,f);)if(t.matchesContextual(n.ContextualKeyword._constructor)&&!t.currentToken().isType)({constructorInitializerStatements:d,constructorInsertPos:u}=r(t));else if(t.matches1(a.TokenType.semi))y.push({start:t.currentIndex(),end:t.currentIndex()+1}),t.nextToken();else if(t.currentToken().isType)t.nextToken();else{const l=t.currentIndex();let p=!1,m=!1;for(;i(t.currentToken());)t.matches1(a.TokenType._static)&&(p=!0),t.matches1(a.TokenType.hash)&&(m=!0),t.nextToken();if(p&&t.matches1(a.TokenType.braceL)){s(t,f);continue}if(m){s(t,f);continue}if(t.matchesContextual(n.ContextualKeyword._constructor)&&!t.currentToken().isType){({constructorInitializerStatements:d,constructorInsertPos:u}=r(t));continue}const v=t.currentIndex();if(c(t),t.matches1(a.TokenType.lessThan)||t.matches1(a.TokenType.parenL)){s(t,f);continue}for(;t.currentToken().isType;)t.nextToken();if(t.matches1(a.TokenType.eq)){const n=t.currentIndex(),a=t.currentToken().rhsEndIndex;if(null==a)throw new Error("Expected rhsEndIndex on class field assignment.");for(t.nextToken();t.currentIndex()<a;)e.processToken();let s;p?(s=o.claimFreeName("__initStatic"),h.push(s)):(s=o.claimFreeName("__init"),T.push(s)),k.push({initializerName:s,equalsIndex:n,start:v,end:t.currentIndex()})}else y.push({start:l,end:t.currentIndex()})}return t.restoreToSnapshot(l),{headerInfo:p,constructorInitializerStatements:d,instanceInitializerNames:T,staticInitializerNames:h,constructorInsertPos:u,fields:k,rangesToRemove:y}}},6195:(e,t,o)=>{Object.defineProperty(t,"__esModule",{value:!0});var n=o(7899),a=o(9609);const s={typeDeclarations:new Set,valueDeclarations:new Set};t.EMPTY_DECLARATION_INFO=s,t.default=function(e){const t=new Set,o=new Set;for(let s=0;s<e.tokens.length;s++){const r=e.tokens[s];r.type===a.TokenType.name&&n.isTopLevelDeclaration.call(void 0,r)&&(r.isType?t.add(e.identifierNameForToken(r)):o.add(e.identifierNameForToken(r)))}return{typeDeclarations:t,valueDeclarations:o}}},9343:(e,t,o)=>{Object.defineProperty(t,"__esModule",{value:!0});var n=o(9609);t.default=function(e,t){const o=[];for(const a of t)a.type===n.TokenType.name&&o.push(e.slice(a.start,a.end));return o}},7525:(e,t)=>{function o(e){let t=e.indexOf(".");return-1===t&&(t=e.length),[e.slice(0,t),e.slice(t)]}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){const[t,n]=o(e.jsxPragma||"React.createElement"),[a,s]=o(e.jsxFragmentPragma||"React.Fragment");return{base:t,suffix:n,fragmentBase:a,fragmentSuffix:s}}},8413:(e,t,o)=>{Object.defineProperty(t,"__esModule",{value:!0});var n,a=o(7899),s=o(9609),r=o(4920),i=(n=o(7525))&&n.__esModule?n:{default:n};t.getNonTypeIdentifiers=function(e,t){const o=i.default.call(void 0,t),n=new Set;for(let t=0;t<e.tokens.length;t++){const i=e.tokens[t];if(i.type!==s.TokenType.name||i.isType||i.identifierRole!==a.IdentifierRole.Access&&i.identifierRole!==a.IdentifierRole.ObjectShorthand&&i.identifierRole!==a.IdentifierRole.ExportAccess||i.shadowsGlobal||n.add(e.identifierNameForToken(i)),i.type===s.TokenType.jsxTagStart&&n.add(o.base),i.type===s.TokenType.jsxTagStart&&t+1<e.tokens.length&&e.tokens[t+1].type===s.TokenType.jsxTagEnd&&(n.add(o.base),n.add(o.fragmentBase)),i.type===s.TokenType.jsxName&&i.identifierRole===a.IdentifierRole.Access){const o=e.identifierNameForToken(i);r.startsWithLowerCase.call(void 0,o)&&e.tokens[t+1].type!==s.TokenType.dot||n.add(e.identifierNameForToken(i))}}return n}},2448:(e,t,o)=>{var n=o(53),a=o(9609);function s(e,t,o){t++,e.matches1AtIndex(t,a.TokenType.parenL)||(e.matches1AtIndex(t,a.TokenType.name)&&(o.add(e.identifierNameAtIndex(t)),t++,e.matches1AtIndex(t,a.TokenType.comma)&&t++),e.matches1AtIndex(t,a.TokenType.star)&&(t+=2,o.add(e.identifierNameAtIndex(t)),t++),e.matches1AtIndex(t,a.TokenType.braceL)&&function(e,t,o){for(;;){if(e.matches1AtIndex(t,a.TokenType.braceR))return;let s=e.identifierNameAtIndex(t);if(t++,e.matchesContextualAtIndex(t,n.ContextualKeyword._as)&&(t++,s=e.identifierNameAtIndex(t),t++),o.add(s),e.matches2AtIndex(t,a.TokenType.comma,a.TokenType.braceR))return;if(e.matches1AtIndex(t,a.TokenType.braceR))return;if(!e.matches1AtIndex(t,a.TokenType.comma))throw new Error(`Unexpected token: ${JSON.stringify(e.tokens[t])}`);t++}}(e,++t,o))}t.Z=function(e){const t=new Set;for(let o=0;o<e.tokens.length;o++)e.matches1AtIndex(o,a.TokenType._import)&&!e.matches3AtIndex(o,a.TokenType._import,a.TokenType.name,a.TokenType.eq)&&s(e,o,t);return t}},2082:(e,t,o)=>{Object.defineProperty(t,"__esModule",{value:!0});var n=o(53);t.default=function(e){let t=e.currentIndex(),o=0;const a=e.currentToken();do{const s=e.tokens[t];if(s.isOptionalChainStart&&o++,s.isOptionalChainEnd&&o--,o+=s.numNullishCoalesceStarts,o-=s.numNullishCoalesceEnds,s.contextualKeyword===n.ContextualKeyword._await&&null==s.identifierRole&&s.scopeDepth===a.scopeDepth)return!0;t+=1}while(o>0&&t<e.tokens.length);return!1}},5816:(e,t,o)=>{Object.defineProperty(t,"__esModule",{value:!0});var n=o(6742);const a=new Set(["break","case","catch","class","const","continue","debugger","default","delete","do","else","export","extends","finally","for","function","if","import","in","instanceof","new","return","super","switch","this","throw","try","typeof","var","void","while","with","yield","enum","implements","interface","let","package","private","protected","public","static","await"]);t.default=function(e){if(0===e.length)return!1;if(!n.IS_IDENTIFIER_START[e.charCodeAt(0)])return!1;for(let t=1;t<e.length;t++)if(!n.IS_IDENTIFIER_CHAR[e.charCodeAt(t)])return!1;return!a.has(e)}},9917:(e,t,o)=>{Object.defineProperty(t,"__esModule",{value:!0});var n=o(9609);t.default=function(e,t,o){if(!e)return!1;const a=t.currentToken();if(null==a.rhsEndIndex)throw new Error("Expected non-null rhsEndIndex on export token.");const s=a.rhsEndIndex-t.currentIndex();if(3!==s&&(4!==s||!t.matches1AtIndex(a.rhsEndIndex-1,n.TokenType.semi)))return!1;const r=t.tokenAtRelativeIndex(2);if(r.type!==n.TokenType.name)return!1;const i=t.identifierNameForToken(r);return o.typeDeclarations.has(i)&&!o.valueDeclarations.has(i)}},7620:e=>{e.exports={i8:"3.17.0"}},1074:function(e,t,o){var n=this&&this.__spreadArrays||function(){for(var e=0,t=0,o=arguments.length;t<o;t++)e+=arguments[t].length;var n=Array(e),a=0;for(t=0;t<o;t++)for(var s=arguments[t],r=0,i=s.length;r<i;r++,a++)n[a]=s[r];return n};Object.defineProperty(t,"__esModule",{value:!0}),t.Checker=t.createCheckers=void 0;var a=o(2746),s=o(7180),r=o(2746);Object.defineProperty(t,"TArray",{enumerable:!0,get:function(){return r.TArray}}),Object.defineProperty(t,"TEnumType",{enumerable:!0,get:function(){return r.TEnumType}}),Object.defineProperty(t,"TEnumLiteral",{enumerable:!0,get:function(){return r.TEnumLiteral}}),Object.defineProperty(t,"TFunc",{enumerable:!0,get:function(){return r.TFunc}}),Object.defineProperty(t,"TIface",{enumerable:!0,get:function(){return r.TIface}}),Object.defineProperty(t,"TLiteral",{enumerable:!0,get:function(){return r.TLiteral}}),Object.defineProperty(t,"TName",{enumerable:!0,get:function(){return r.TName}}),Object.defineProperty(t,"TOptional",{enumerable:!0,get:function(){return r.TOptional}}),Object.defineProperty(t,"TParam",{enumerable:!0,get:function(){return r.TParam}}),Object.defineProperty(t,"TParamList",{enumerable:!0,get:function(){return r.TParamList}}),Object.defineProperty(t,"TProp",{enumerable:!0,get:function(){return r.TProp}}),Object.defineProperty(t,"TTuple",{enumerable:!0,get:function(){return r.TTuple}}),Object.defineProperty(t,"TType",{enumerable:!0,get:function(){return r.TType}}),Object.defineProperty(t,"TUnion",{enumerable:!0,get:function(){return r.TUnion}}),Object.defineProperty(t,"TIntersection",{enumerable:!0,get:function(){return r.TIntersection}}),Object.defineProperty(t,"array",{enumerable:!0,get:function(){return r.array}}),Object.defineProperty(t,"enumlit",{enumerable:!0,get:function(){return r.enumlit}}),Object.defineProperty(t,"enumtype",{enumerable:!0,get:function(){return r.enumtype}}),Object.defineProperty(t,"func",{enumerable:!0,get:function(){return r.func}}),Object.defineProperty(t,"iface",{enumerable:!0,get:function(){return r.iface}}),Object.defineProperty(t,"lit",{enumerable:!0,get:function(){return r.lit}}),Object.defineProperty(t,"name",{enumerable:!0,get:function(){return r.name}}),Object.defineProperty(t,"opt",{enumerable:!0,get:function(){return r.opt}}),Object.defineProperty(t,"param",{enumerable:!0,get:function(){return r.param}}),Object.defineProperty(t,"tuple",{enumerable:!0,get:function(){return r.tuple}}),Object.defineProperty(t,"union",{enumerable:!0,get:function(){return r.union}}),Object.defineProperty(t,"intersection",{enumerable:!0,get:function(){return r.intersection}}),Object.defineProperty(t,"BasicType",{enumerable:!0,get:function(){return r.BasicType}});var i=o(7180);Object.defineProperty(t,"VError",{enumerable:!0,get:function(){return i.VError}}),t.createCheckers=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];for(var o=Object.assign.apply(Object,n([{},a.basicTypes],e)),s={},r=0,i=e;r<i.length;r++)for(var l=i[r],p=0,d=Object.keys(l);p<d.length;p++){var T=d[p];s[T]=new c(o,l[T])}return s};var c=function(){function e(e,t,o){if(void 0===o&&(o="value"),this.suite=e,this.ttype=t,this._path=o,this.props=new Map,t instanceof a.TIface)for(var n=0,s=t.props;n<s.length;n++){var r=s[n];this.props.set(r.name,r.ttype)}this.checkerPlain=this.ttype.getChecker(e,!1),this.checkerStrict=this.ttype.getChecker(e,!0)}return e.prototype.setReportedPath=function(e){this._path=e},e.prototype.check=function(e){return this._doCheck(this.checkerPlain,e)},e.prototype.test=function(e){return this.checkerPlain(e,new s.NoopContext)},e.prototype.validate=function(e){return this._doValidate(this.checkerPlain,e)},e.prototype.strictCheck=function(e){return this._doCheck(this.checkerStrict,e)},e.prototype.strictTest=function(e){return this.checkerStrict(e,new s.NoopContext)},e.prototype.strictValidate=function(e){return this._doValidate(this.checkerStrict,e)},e.prototype.getProp=function(t){var o=this.props.get(t);if(!o)throw new Error("Type has no property "+t);return new e(this.suite,o,this._path+"."+t)},e.prototype.methodArgs=function(t){var o=this._getMethod(t);return new e(this.suite,o.paramList)},e.prototype.methodResult=function(t){var o=this._getMethod(t);return new e(this.suite,o.result)},e.prototype.getArgs=function(){if(!(this.ttype instanceof a.TFunc))throw new Error("getArgs() applied to non-function");return new e(this.suite,this.ttype.paramList)},e.prototype.getResult=function(){if(!(this.ttype instanceof a.TFunc))throw new Error("getResult() applied to non-function");return new e(this.suite,this.ttype.result)},e.prototype.getType=function(){return this.ttype},e.prototype._doCheck=function(e,t){if(!e(t,new s.NoopContext)){var o=new s.DetailContext;throw e(t,o),o.getError(this._path)}},e.prototype._doValidate=function(e,t){if(e(t,new s.NoopContext))return null;var o=new s.DetailContext;return e(t,o),o.getErrorDetail(this._path)},e.prototype._getMethod=function(e){var t=this.props.get(e);if(!t)throw new Error("Type has no property "+e);if(!(t instanceof a.TFunc))throw new Error("Property "+e+" is not a method");return t},e}();t.Checker=c},2746:function(e,t,o){var n,a=this&&this.__extends||(n=function(e,t){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)});Object.defineProperty(t,"__esModule",{value:!0}),t.basicTypes=t.BasicType=t.TParamList=t.TParam=t.param=t.TFunc=t.func=t.TProp=t.TOptional=t.opt=t.TIface=t.iface=t.TEnumLiteral=t.enumlit=t.TEnumType=t.enumtype=t.TIntersection=t.intersection=t.TUnion=t.union=t.TTuple=t.tuple=t.TArray=t.array=t.TLiteral=t.lit=t.TName=t.name=t.TType=void 0;var s=o(7180),r=function(){};function i(e){return"string"==typeof e?l(e):e}function c(e,t){var o=e[t];if(!o)throw new Error("Unknown type "+t);return o}function l(e){return new p(e)}t.TType=r,t.name=l;var p=function(e){function t(t){var o=e.call(this)||this;return o.name=t,o._failMsg="is not a "+t,o}return a(t,e),t.prototype.getChecker=function(e,o,n){var a=this,s=c(e,this.name),r=s.getChecker(e,o,n);return s instanceof b||s instanceof t?r:function(e,t){return!!r(e,t)||t.fail(null,a._failMsg,0)}},t}(r);t.TName=p,t.lit=function(e){return new d(e)};var d=function(e){function t(t){var o=e.call(this)||this;return o.value=t,o.name=JSON.stringify(t),o._failMsg="is not "+o.name,o}return a(t,e),t.prototype.getChecker=function(e,t){var o=this;return function(e,t){return e===o.value||t.fail(null,o._failMsg,-1)}},t}(r);t.TLiteral=d,t.array=function(e){return new T(i(e))};var T=function(e){function t(t){var o=e.call(this)||this;return o.ttype=t,o}return a(t,e),t.prototype.getChecker=function(e,t){var o=this.ttype.getChecker(e,t);return function(e,t){if(!Array.isArray(e))return t.fail(null,"is not an array",0);for(var n=0;n<e.length;n++)if(!o(e[n],t))return t.fail(n,null,1);return!0}},t}(r);t.TArray=T,t.tuple=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return new h(e.map((function(e){return i(e)})))};var h=function(e){function t(t){var o=e.call(this)||this;return o.ttypes=t,o}return a(t,e),t.prototype.getChecker=function(e,t){var o=this.ttypes.map((function(o){return o.getChecker(e,t)})),n=function(e,t){if(!Array.isArray(e))return t.fail(null,"is not an array",0);for(var n=0;n<o.length;n++)if(!o[n](e[n],t))return t.fail(n,null,1);return!0};return t?function(e,t){return!!n(e,t)&&(e.length<=o.length||t.fail(o.length,"is extraneous",2))}:n},t}(r);t.TTuple=h,t.union=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return new u(e.map((function(e){return i(e)})))};var u=function(e){function t(t){var o=e.call(this)||this;o.ttypes=t;var n=t.map((function(e){return e instanceof p||e instanceof d?e.name:null})).filter((function(e){return e})),a=t.length-n.length;return n.length?(a>0&&n.push(a+" more"),o._failMsg="is none of "+n.join(", ")):o._failMsg="is none of "+a+" types",o}return a(t,e),t.prototype.getChecker=function(e,t){var o=this,n=this.ttypes.map((function(o){return o.getChecker(e,t)}));return function(e,t){for(var a=t.unionResolver(),s=0;s<n.length;s++)if(n[s](e,a.createContext()))return!0;return t.resolveUnion(a),t.fail(null,o._failMsg,0)}},t}(r);t.TUnion=u,t.intersection=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return new k(e.map((function(e){return i(e)})))};var k=function(e){function t(t){var o=e.call(this)||this;return o.ttypes=t,o}return a(t,e),t.prototype.getChecker=function(e,t){var o=new Set,n=this.ttypes.map((function(n){return n.getChecker(e,t,o)}));return function(e,t){return!!n.every((function(o){return o(e,t)}))||t.fail(null,null,0)}},t}(r);t.TIntersection=k,t.enumtype=function(e){return new y(e)};var y=function(e){function t(t){var o=e.call(this)||this;return o.members=t,o.validValues=new Set,o._failMsg="is not a valid enum value",o.validValues=new Set(Object.keys(t).map((function(e){return t[e]}))),o}return a(t,e),t.prototype.getChecker=function(e,t){var o=this;return function(e,t){return!!o.validValues.has(e)||t.fail(null,o._failMsg,0)}},t}(r);t.TEnumType=y,t.enumlit=function(e,t){return new f(e,t)};var f=function(e){function t(t,o){var n=e.call(this)||this;return n.enumName=t,n.prop=o,n._failMsg="is not "+t+"."+o,n}return a(t,e),t.prototype.getChecker=function(e,t){var o=this,n=c(e,this.enumName);if(!(n instanceof y))throw new Error("Type "+this.enumName+" used in enumlit is not an enum type");var a=n.members[this.prop];if(!n.members.hasOwnProperty(this.prop))throw new Error("Unknown value "+this.enumName+"."+this.prop+" used in enumlit");return function(e,t){return e===a||t.fail(null,o._failMsg,-1)}},t}(r);t.TEnumLiteral=f,t.iface=function(e,t){return new m(e,function(e){return Object.keys(e).map((function(t){return function(e,t){return t instanceof v?new x(e,t.ttype,!0):new x(e,i(t),!1)}(t,e[t])}))}(t))};var m=function(e){function t(t,o){var n=e.call(this)||this;return n.bases=t,n.props=o,n.propSet=new Set(o.map((function(e){return e.name}))),n}return a(t,e),t.prototype.getChecker=function(e,t,o){var n=this,a=this.bases.map((function(o){return c(e,o).getChecker(e,t)})),r=this.props.map((function(o){return o.ttype.getChecker(e,t)})),i=new s.NoopContext,l=this.props.map((function(e,t){return!e.isOpt&&!r[t](void 0,i)})),p=function(e,t){if("object"!=typeof e||null===e)return t.fail(null,"is not an object",0);for(var o=0;o<a.length;o++)if(!a[o](e,t))return!1;for(o=0;o<r.length;o++){var s=n.props[o].name,i=e[s];if(void 0===i){if(l[o])return t.fail(s,"is missing",1)}else if(!r[o](i,t))return t.fail(s,null,1)}return!0};if(!t)return p;var d=this.propSet;return o&&(this.propSet.forEach((function(e){return o.add(e)})),d=o),function(e,t){if(!p(e,t))return!1;for(var o in e)if(!d.has(o))return t.fail(o,"is extraneous",2);return!0}},t}(r);t.TIface=m,t.opt=function(e){return new v(i(e))};var v=function(e){function t(t){var o=e.call(this)||this;return o.ttype=t,o}return a(t,e),t.prototype.getChecker=function(e,t){var o=this.ttype.getChecker(e,t);return function(e,t){return void 0===e||o(e,t)}},t}(r);t.TOptional=v;var x=function(e,t,o){this.name=e,this.ttype=t,this.isOpt=o};t.TProp=x,t.func=function(e){for(var t=[],o=1;o<arguments.length;o++)t[o-1]=arguments[o];return new _(new g(t),i(e))};var _=function(e){function t(t,o){var n=e.call(this)||this;return n.paramList=t,n.result=o,n}return a(t,e),t.prototype.getChecker=function(e,t){return function(e,t){return"function"==typeof e||t.fail(null,"is not a function",0)}},t}(r);t.TFunc=_,t.param=function(e,t,o){return new C(e,i(t),Boolean(o))};var C=function(e,t,o){this.name=e,this.ttype=t,this.isOpt=o};t.TParam=C;var g=function(e){function t(t){var o=e.call(this)||this;return o.params=t,o}return a(t,e),t.prototype.getChecker=function(e,t){var o=this,n=this.params.map((function(o){return o.ttype.getChecker(e,t)})),a=new s.NoopContext,r=this.params.map((function(e,t){return!e.isOpt&&!n[t](void 0,a)})),i=function(e,t){if(!Array.isArray(e))return t.fail(null,"is not an array",0);for(var a=0;a<n.length;a++){var s=o.params[a];if(void 0===e[a]){if(r[a])return t.fail(s.name,"is missing",1)}else if(!n[a](e[a],t))return t.fail(s.name,null,1)}return!0};return t?function(e,t){return!!i(e,t)&&(e.length<=n.length||t.fail(n.length,"is extraneous",2))}:i},t}(r);t.TParamList=g;var b=function(e){function t(t,o){var n=e.call(this)||this;return n.validator=t,n.message=o,n}return a(t,e),t.prototype.getChecker=function(e,t){var o=this;return function(e,t){return!!o.validator(e)||t.fail(null,o.message,0)}},t}(r);t.BasicType=b,t.basicTypes={any:new b((function(e){return!0}),"is invalid"),number:new b((function(e){return"number"==typeof e}),"is not a number"),object:new b((function(e){return"object"==typeof e&&e}),"is not an object"),boolean:new b((function(e){return"boolean"==typeof e}),"is not a boolean"),string:new b((function(e){return"string"==typeof e}),"is not a string"),symbol:new b((function(e){return"symbol"==typeof e}),"is not a symbol"),void:new b((function(e){return null==e}),"is not void"),undefined:new b((function(e){return void 0===e}),"is not undefined"),null:new b((function(e){return null===e}),"is not null"),never:new b((function(e){return!1}),"is unexpected"),Date:new b(I("[object Date]"),"is not a Date"),RegExp:new b(I("[object RegExp]"),"is not a RegExp")};var w=Object.prototype.toString;function I(e){return function(t){return"object"==typeof t&&t&&w.call(t)===e}}"undefined"!=typeof Buffer&&(t.basicTypes.Buffer=new b((function(e){return Buffer.isBuffer(e)}),"is not a Buffer"));for(var E=function(e){t.basicTypes[e.name]=new b((function(t){return t instanceof e}),"is not a "+e.name)},S=0,A=[Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,ArrayBuffer];S<A.length;S++)E(A[S])},7180:function(e,t){var o,n=this&&this.__extends||(o=function(e,t){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function n(){this.constructor=e}o(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0}),t.DetailContext=t.NoopContext=t.VError=void 0;var a=function(e){function t(o,n){var a=e.call(this,n)||this;return a.path=o,Object.setPrototypeOf(a,t.prototype),a}return n(t,e),t}(Error);t.VError=a;var s=function(){function e(){}return e.prototype.fail=function(e,t,o){return!1},e.prototype.unionResolver=function(){return this},e.prototype.createContext=function(){return this},e.prototype.resolveUnion=function(e){},e}();t.NoopContext=s;var r=function(){function e(){this._propNames=[""],this._messages=[null],this._score=0}return e.prototype.fail=function(e,t,o){return this._propNames.push(e),this._messages.push(t),this._score+=o,!1},e.prototype.unionResolver=function(){return new i},e.prototype.resolveUnion=function(e){for(var t,o,n=null,a=0,s=e.contexts;a<s.length;a++){var r=s[a];(!n||r._score>=n._score)&&(n=r)}n&&n._score>0&&((t=this._propNames).push.apply(t,n._propNames),(o=this._messages).push.apply(o,n._messages))},e.prototype.getError=function(e){for(var t=[],o=this._propNames.length-1;o>=0;o--){var n=this._propNames[o];e+="number"==typeof n?"["+n+"]":n?"."+n:"";var s=this._messages[o];s&&t.push(e+" "+s)}return new a(e,t.join("; "))},e.prototype.getErrorDetail=function(e){for(var t=[],o=this._propNames.length-1;o>=0;o--){var n=this._propNames[o];e+="number"==typeof n?"["+n+"]":n?"."+n:"";var a=this._messages[o];a&&t.push({path:e,message:a})}var s=null;for(o=t.length-1;o>=0;o--)s&&(t[o].nested=[s]),s=t[o];return s},e}();t.DetailContext=r;var i=function(){function e(){this.contexts=[]}return e.prototype.createContext=function(){var e=new r;return this.contexts.push(e),e},e}()},5897:(e,t,o)=>{o.d(t,{default:()=>h});var n=o(1678),a=o(7629),s=o(5586),r=o(4636),i=o(4015),c=o(1476),l=o(4825),p=o(3637),d=o(8080),T=(o(3411),o(2448));function h(e){return function(e,t){(0,c.n)(t);try{const o=function(e,t){const o=t.transforms.includes("jsx"),a=t.transforms.includes("typescript"),c=t.transforms.includes("flow"),d=(0,l.parse)(e,o,a,c),h=d.tokens,u=d.scopes,k=new i.Z(e,h),y=new s.b(k),f=new p.Z(e,h,c,y),m=Boolean(t.enableLegacyTypeScriptModuleInterop);let v=null;return t.transforms.includes("imports")?(v=new n.Z(k,f,m,t,t.transforms.includes("typescript"),y),v.preprocessTokens(),(0,r.ZP)(f,u,v.getGlobalNames()),t.transforms.includes("typescript")&&v.pruneTypeOnlyImports()):t.transforms.includes("typescript")&&(0,r.ZP)(f,u,(0,T.Z)(f)),{tokenProcessor:f,scopes:u,nameManager:k,importProcessor:v,helperManager:y}}(e,t);let c={code:new d.Z(o,t.transforms,Boolean(t.enableLegacyBabel5ModuleInterop),t).transform()};if(t.sourceMapOptions){if(!t.filePath)throw new Error("filePath must be specified when generating a source map.");c={...c,sourceMap:(0,a.Z)(c.code,t.filePath,t.sourceMapOptions)}}return c}catch(e){throw t.filePath&&(e.message=`Error transforming ${t.filePath}: ${e.message}`),e}}(e,{transforms:["typescript"]}).code}}},t={};function o(n){if(t[n])return t[n].exports;var a=t[n]={exports:{}};return e[n].call(a.exports,a,a.exports,o),a.exports}return o.d=(e,t)=>{for(var n in t)o.o(t,n)&&!o.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),o.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o(5897)})().default;