{"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import { declare } from \"@babel/helper-plugin-utils\";\nimport { template, types as t } from \"@babel/core\";\nimport type { PluginPass, NodePath, Scope } from \"@babel/core\";\nimport {\n  buildDynamicImport,\n  getModuleName,\n  rewriteThis,\n} from \"@babel/helper-module-transforms\";\nimport type { PluginOptions } from \"@babel/helper-module-transforms\";\nimport { isIdentifierName } from \"@babel/helper-validator-identifier\";\n\nconst buildTemplate = template.statement(`\n  SYSTEM_REGISTER(MODULE_NAME, SOURCES, function (EXPORT_IDENTIFIER, CONTEXT_IDENTIFIER) {\n    \"use strict\";\n    BEFORE_BODY;\n    return {\n      setters: SETTERS,\n      execute: EXECUTE,\n    };\n  });\n`);\n\nconst buildExportAll = template.statement(`\n  for (var KEY in TARGET) {\n    if (KEY !== \"default\" && KEY !== \"__esModule\") EXPORT_OBJ[KEY] = TARGET[KEY];\n  }\n`);\n\nconst MISSING_PLUGIN_ERROR = `\\\nERROR: Dynamic import() transformation must be enabled using the\n       @babel/plugin-transform-dynamic-import plugin. Babel 8\n       no longer transforms import() without using that plugin.\n`;\n\n//todo: use getExportSpecifierName in `helper-module-transforms` when this library is refactored to NodePath usage.\n\nexport function getExportSpecifierName(\n  node: t.Node,\n  stringSpecifiers: Set<string>,\n): string {\n  if (node.type === \"Identifier\") {\n    return node.name;\n  } else if (node.type === \"StringLiteral\") {\n    const stringValue = node.value;\n    // add specifier value to `stringSpecifiers` only when it can not be converted to an identifier name\n    // i.e In `import { \"foo\" as bar }`\n    // we do not consider `\"foo\"` to be a `stringSpecifier` because we can treat it as\n    // `import { foo as bar }`\n    // This helps minimize the size of `stringSpecifiers` and reduce overhead of checking valid identifier names\n    // when building transpiled code from metadata\n    if (!isIdentifierName(stringValue)) {\n      stringSpecifiers.add(stringValue);\n    }\n    return stringValue;\n  } else {\n    throw new Error(\n      `Expected export specifier to be either Identifier or StringLiteral, got ${node.type}`,\n    );\n  }\n}\n\ntype PluginState = {\n  contextIdent: string;\n  // List of names that should only be printed as string literals.\n  // i.e. `import { \"any unicode\" as foo } from \"some-module\"`\n  // `stringSpecifiers` is Set(1) [\"any unicode\"]\n  // In most cases `stringSpecifiers` is an empty Set\n  stringSpecifiers: Set<string>;\n};\n\ntype ModuleMetadata = {\n  key: string;\n  imports: any[];\n  exports: any[];\n};\n\nconst protoKey = \"__proto__\";\n\nfunction constructExportCall(\n  path: NodePath<t.Program>,\n  exportIdent: t.Identifier,\n  exportNames: string[],\n  exportValues: t.Expression[],\n  exportStarTarget: t.Identifier | null,\n  stringSpecifiers: Set<string>,\n) {\n  const statements = [];\n  if (!exportStarTarget) {\n    if (exportNames.length === 1) {\n      statements.push(\n        t.expressionStatement(\n          t.callExpression(exportIdent, [\n            t.stringLiteral(exportNames[0]),\n            exportValues[0],\n          ]),\n        ),\n      );\n    } else {\n      const objectProperties = [];\n      for (let i = 0; i < exportNames.length; i++) {\n        const exportName = exportNames[i];\n        const computed = exportName === protoKey;\n        const exportNameNode =\n          stringSpecifiers.has(exportName) || computed\n            ? t.stringLiteral(exportName)\n            : t.identifier(exportName);\n        const exportValue = exportValues[i];\n        objectProperties.push(\n          t.objectProperty(exportNameNode, exportValue, computed),\n        );\n      }\n      statements.push(\n        t.expressionStatement(\n          t.callExpression(exportIdent, [t.objectExpression(objectProperties)]),\n        ),\n      );\n    }\n  } else {\n    const exportObj = path.scope.generateUid(\"exportObj\");\n\n    statements.push(\n      t.variableDeclaration(\"var\", [\n        t.variableDeclarator(\n          t.identifier(exportObj),\n          t.objectExpression([\n            t.objectProperty(t.identifier(protoKey), t.nullLiteral()),\n          ]),\n        ),\n      ]),\n    );\n\n    statements.push(\n      buildExportAll({\n        KEY: path.scope.generateUidIdentifier(\"key\"),\n        EXPORT_OBJ: t.identifier(exportObj),\n        TARGET: exportStarTarget,\n      }),\n    );\n\n    for (let i = 0; i < exportNames.length; i++) {\n      const exportName = exportNames[i];\n      const computed = stringSpecifiers.has(exportName);\n      const exportNameNode = computed\n        ? t.stringLiteral(exportName)\n        : t.identifier(exportName);\n      const exportValue = exportValues[i];\n\n      statements.push(\n        t.expressionStatement(\n          t.assignmentExpression(\n            \"=\",\n            t.memberExpression(\n              t.identifier(exportObj),\n              exportNameNode,\n              computed,\n            ),\n            exportValue,\n          ),\n        ),\n      );\n    }\n\n    statements.push(\n      t.expressionStatement(\n        t.callExpression(exportIdent, [t.identifier(exportObj)]),\n      ),\n    );\n  }\n  return statements;\n}\n\nexport interface Options extends PluginOptions {\n  allowTopLevelThis?: boolean;\n  systemGlobal?: string;\n}\n\ntype ReassignmentVisitorState = {\n  scope: Scope;\n  exports: any;\n  buildCall: (name: string, value: t.Expression) => t.ExpressionStatement;\n};\n\nexport default declare<PluginState, Options>((api, options: Options) => {\n  api.assertVersion(REQUIRED_VERSION(\"^7.0.0-0 || ^8.0.0\"));\n\n  const { systemGlobal = \"System\", allowTopLevelThis = false } = options;\n  const reassignmentVisited = new WeakSet();\n\n  return {\n    name: \"transform-modules-systemjs\",\n\n    pre() {\n      this.file.set(\"@babel/plugin-transform-modules-*\", \"systemjs\");\n    },\n\n    visitor: api.traverse.explode({\n      \"CallExpression|ImportExpression\"(\n        this: PluginPass & PluginState,\n        path: NodePath<t.CallExpression | t.ImportExpression>,\n        state: PluginState,\n      ) {\n        if (path.isCallExpression() && !t.isImport(path.node.callee)) return;\n        if (path.isCallExpression()) {\n          if (!this.file.has(\"@babel/plugin-proposal-dynamic-import\")) {\n            throw new Error(MISSING_PLUGIN_ERROR);\n          }\n        } else {\n          // when createImportExpressions is true, we require the dynamic import transform\n          if (!this.file.has(\"@babel/plugin-proposal-dynamic-import\")) {\n            throw new Error(MISSING_PLUGIN_ERROR);\n          }\n        }\n        path.replaceWith(\n          buildDynamicImport(path.node, false, true, specifier =>\n            t.callExpression(\n              t.memberExpression(\n                t.identifier(state.contextIdent),\n                t.identifier(\"import\"),\n              ),\n              [specifier],\n            ),\n          ),\n        );\n      },\n\n      MetaProperty(path, state) {\n        if (\n          path.node.meta.name === \"import\" &&\n          path.node.property.name === \"meta\"\n        ) {\n          path.replaceWith(\n            t.memberExpression(\n              t.identifier(state.contextIdent),\n              t.identifier(\"meta\"),\n            ),\n          );\n        }\n      },\n\n      ReferencedIdentifier(path, state) {\n        if (\n          path.node.name === \"__moduleName\" &&\n          !path.scope.hasBinding(\"__moduleName\")\n        ) {\n          path.replaceWith(\n            t.memberExpression(\n              t.identifier(state.contextIdent),\n              t.identifier(\"id\"),\n            ),\n          );\n        }\n      },\n\n      Program: {\n        enter(path, state) {\n          state.contextIdent = path.scope.generateUid(\"context\");\n          state.stringSpecifiers = new Set();\n          if (!allowTopLevelThis) {\n            rewriteThis(path);\n          }\n        },\n        exit(path, state) {\n          const scope = path.scope;\n          const exportIdent = scope.generateUid(\"export\");\n          const { contextIdent, stringSpecifiers } = state;\n\n          const exportMap: Record<string, string[]> = Object.create(null);\n          const modules: ModuleMetadata[] = [];\n\n          const beforeBody = [];\n          const setters: t.Expression[] = [];\n          const sources: t.StringLiteral[] = [];\n          const variableIds: t.Identifier[] = [];\n          const removedPaths = [];\n\n          function addExportName(key: string, val: string) {\n            exportMap[key] = exportMap[key] || [];\n            exportMap[key].push(val);\n          }\n\n          function pushModule(\n            source: string,\n            key: \"imports\" | \"exports\",\n            specifiers: t.ModuleSpecifier[] | t.ExportAllDeclaration,\n          ) {\n            let module: ModuleMetadata | undefined;\n            modules.forEach(function (m) {\n              if (m.key === source) {\n                module = m;\n              }\n            });\n            if (!module) {\n              modules.push(\n                (module = { key: source, imports: [], exports: [] }),\n              );\n            }\n            module[key] = module[key].concat(specifiers);\n          }\n\n          function buildExportCall(name: string, val: t.Expression) {\n            return t.expressionStatement(\n              t.callExpression(t.identifier(exportIdent), [\n                t.stringLiteral(name),\n                val,\n              ]),\n            );\n          }\n\n          const exportNames = [];\n          const exportValues: t.Expression[] = [];\n\n          const body = path.get(\"body\");\n\n          for (const path of body) {\n            if (path.isFunctionDeclaration()) {\n              beforeBody.push(path.node);\n              removedPaths.push(path);\n            } else if (path.isClassDeclaration()) {\n              variableIds.push(t.cloneNode(path.node.id!));\n              path.replaceWith(\n                t.expressionStatement(\n                  t.assignmentExpression(\n                    \"=\",\n                    t.cloneNode(path.node.id!),\n                    t.toExpression(path.node),\n                  ),\n                ),\n              );\n            } else if (path.isVariableDeclaration()) {\n              // Convert top-level variable declarations to \"var\",\n              // because they must be hoisted\n              path.node.kind = \"var\";\n            } else if (path.isImportDeclaration()) {\n              const source = path.node.source.value;\n              pushModule(source, \"imports\", path.node.specifiers);\n              for (const name of Object.keys(path.getBindingIdentifiers())) {\n                scope.removeBinding(name);\n                variableIds.push(t.identifier(name));\n              }\n              path.remove();\n            } else if (path.isExportAllDeclaration()) {\n              pushModule(path.node.source.value, \"exports\", path.node);\n              path.remove();\n            } else if (path.isExportDefaultDeclaration()) {\n              const declar = path.node.declaration;\n              if (t.isClassDeclaration(declar)) {\n                const id = declar.id;\n                if (id) {\n                  exportNames.push(\"default\");\n                  exportValues.push(t.buildUndefinedNode());\n                  variableIds.push(t.cloneNode(id));\n                  addExportName(id.name, \"default\");\n                  path.replaceWith(\n                    t.expressionStatement(\n                      t.assignmentExpression(\n                        \"=\",\n                        t.cloneNode(id),\n                        t.toExpression(declar),\n                      ),\n                    ),\n                  );\n                } else {\n                  exportNames.push(\"default\");\n                  exportValues.push(t.toExpression(declar));\n                  removedPaths.push(path);\n                }\n              } else if (t.isFunctionDeclaration(declar)) {\n                const id = declar.id;\n                if (id) {\n                  beforeBody.push(declar);\n                  exportNames.push(\"default\");\n                  exportValues.push(t.cloneNode(id));\n                  addExportName(id.name, \"default\");\n                } else {\n                  exportNames.push(\"default\");\n                  exportValues.push(t.toExpression(declar));\n                }\n                removedPaths.push(path);\n              } else {\n                // @ts-expect-error TSDeclareFunction is not expected here\n                path.replaceWith(buildExportCall(\"default\", declar));\n              }\n            } else if (path.isExportNamedDeclaration()) {\n              const declar = path.node.declaration;\n\n              if (declar) {\n                path.replaceWith(declar);\n\n                if (t.isFunction(declar)) {\n                  const name = declar.id!.name;\n                  addExportName(name, name);\n                  beforeBody.push(declar);\n                  exportNames.push(name);\n                  exportValues.push(t.cloneNode(declar.id!));\n                  removedPaths.push(path);\n                } else if (t.isClass(declar)) {\n                  const name = declar.id!.name;\n                  exportNames.push(name);\n                  exportValues.push(t.buildUndefinedNode());\n                  variableIds.push(t.cloneNode(declar.id!));\n                  path.replaceWith(\n                    t.expressionStatement(\n                      t.assignmentExpression(\n                        \"=\",\n                        t.cloneNode(declar.id!),\n                        t.toExpression(declar),\n                      ),\n                    ),\n                  );\n                  addExportName(name, name);\n                } else {\n                  if (t.isVariableDeclaration(declar)) {\n                    // Convert top-level variable declarations to \"var\",\n                    // because they must be hoisted\n                    declar.kind = \"var\";\n                  }\n                  for (const name of Object.keys(\n                    t.getBindingIdentifiers(declar),\n                  )) {\n                    addExportName(name, name);\n                  }\n                }\n              } else {\n                const specifiers = path.node.specifiers;\n                if (specifiers?.length) {\n                  if (path.node.source) {\n                    pushModule(path.node.source.value, \"exports\", specifiers);\n                    path.remove();\n                  } else {\n                    const nodes = [];\n\n                    for (const specifier of specifiers) {\n                      // @ts-expect-error This isn't an \"export ... from\" declaration\n                      // because path.node.source is falsy, so the local specifier exists.\n                      const { local, exported } = specifier;\n\n                      const binding = scope.getBinding(local.name);\n                      const exportedName = getExportSpecifierName(\n                        exported,\n                        stringSpecifiers,\n                      );\n                      // hoisted function export\n                      if (\n                        binding &&\n                        t.isFunctionDeclaration(binding.path.node)\n                      ) {\n                        exportNames.push(exportedName);\n                        exportValues.push(t.cloneNode(local));\n                      }\n                      // only globals also exported this way\n                      else if (!binding) {\n                        nodes.push(buildExportCall(exportedName, local));\n                      }\n                      addExportName(local.name, exportedName);\n                    }\n\n                    path.replaceWithMultiple(nodes);\n                  }\n                } else {\n                  path.remove();\n                }\n              }\n            }\n          }\n\n          modules.forEach(function (specifiers) {\n            const setterBody = [];\n            const target = scope.generateUid(specifiers.key);\n\n            for (let specifier of specifiers.imports) {\n              if (t.isImportNamespaceSpecifier(specifier)) {\n                setterBody.push(\n                  t.expressionStatement(\n                    t.assignmentExpression(\n                      \"=\",\n                      specifier.local,\n                      t.identifier(target),\n                    ),\n                  ),\n                );\n              } else if (t.isImportDefaultSpecifier(specifier)) {\n                specifier = t.importSpecifier(\n                  specifier.local,\n                  t.identifier(\"default\"),\n                );\n              }\n\n              if (t.isImportSpecifier(specifier)) {\n                const { imported } = specifier;\n                setterBody.push(\n                  t.expressionStatement(\n                    t.assignmentExpression(\n                      \"=\",\n                      specifier.local,\n                      t.memberExpression(\n                        t.identifier(target),\n                        specifier.imported,\n                        /* computed */ imported.type === \"StringLiteral\",\n                      ),\n                    ),\n                  ),\n                );\n              }\n            }\n\n            if (specifiers.exports.length) {\n              const exportNames = [];\n              const exportValues = [];\n              let hasExportStar = false;\n\n              for (const node of specifiers.exports) {\n                if (t.isExportAllDeclaration(node)) {\n                  hasExportStar = true;\n                } else if (t.isExportSpecifier(node)) {\n                  const exportedName = getExportSpecifierName(\n                    node.exported,\n                    stringSpecifiers,\n                  );\n                  exportNames.push(exportedName);\n                  exportValues.push(\n                    t.memberExpression(\n                      t.identifier(target),\n                      node.local,\n                      t.isStringLiteral(node.local),\n                    ),\n                  );\n                } else {\n                  // todo\n                }\n              }\n\n              setterBody.push(\n                ...constructExportCall(\n                  path,\n                  t.identifier(exportIdent),\n                  exportNames,\n                  exportValues,\n                  hasExportStar ? t.identifier(target) : null,\n                  stringSpecifiers,\n                ),\n              );\n            }\n\n            sources.push(t.stringLiteral(specifiers.key));\n            setters.push(\n              t.functionExpression(\n                null,\n                [t.identifier(target)],\n                t.blockStatement(setterBody),\n              ),\n            );\n          });\n\n          let moduleName = getModuleName(this.file.opts, options);\n          // @ts-expect-error todo(flow->ts): do not reuse variables\n          if (moduleName) moduleName = t.stringLiteral(moduleName);\n\n          path.scope.hoistVariables((id, hasInit) => {\n            variableIds.push(id);\n            if (!hasInit && id.name in exportMap) {\n              for (const exported of exportMap[id.name]) {\n                exportNames.push(exported);\n                exportValues.push(t.buildUndefinedNode());\n              }\n            }\n          });\n\n          if (variableIds.length) {\n            beforeBody.unshift(\n              t.variableDeclaration(\n                \"var\",\n                variableIds.map(id => t.variableDeclarator(id)),\n              ),\n            );\n          }\n\n          if (exportNames.length) {\n            beforeBody.push(\n              ...constructExportCall(\n                path,\n                t.identifier(exportIdent),\n                exportNames,\n                exportValues,\n                null,\n                stringSpecifiers,\n              ),\n            );\n          }\n\n          path.traverse(\n            {\n              \"AssignmentExpression|UpdateExpression\"(\n                path: NodePath<t.AssignmentExpression | t.UpdateExpression>,\n              ) {\n                if (reassignmentVisited.has(path.node)) return;\n                reassignmentVisited.add(path.node);\n\n                const arg = path.isAssignmentExpression()\n                  ? path.get(\"left\")\n                  : path.get(\"argument\");\n\n                if (arg.isObjectPattern() || arg.isArrayPattern()) {\n                  const exprs: t.SequenceExpression[\"expressions\"] = [\n                    path.node,\n                  ];\n                  for (const name of Object.keys(arg.getBindingIdentifiers())) {\n                    if (\n                      this.scope.getBinding(name) !==\n                      path.scope.getBinding(name)\n                    ) {\n                      return;\n                    }\n                    const exportedNames = this.exports[name];\n                    if (!exportedNames) continue;\n                    for (const exportedName of exportedNames) {\n                      exprs.push(\n                        this.buildCall(exportedName, t.identifier(name))\n                          .expression,\n                      );\n                    }\n                  }\n                  path.replaceWith(t.sequenceExpression(exprs));\n                  return;\n                }\n\n                if (!arg.isIdentifier()) return;\n\n                const name = arg.node.name;\n\n                // redeclared in this scope\n                if (this.scope.getBinding(name) !== path.scope.getBinding(name))\n                  return;\n\n                const exportedNames = this.exports[name];\n                if (!exportedNames) return;\n\n                let node: t.Expression = path.node;\n\n                // if it is a non-prefix update expression (x++ etc)\n                // then we must replace with the expression (_export('x', x + 1), x++)\n                // in order to ensure the same update expression value\n                const isPostUpdateExpression = t.isUpdateExpression(node, {\n                  prefix: false,\n                });\n                if (isPostUpdateExpression) {\n                  node = t.binaryExpression(\n                    // @ts-expect-error The operator of a post-update expression must be \"++\" | \"--\"\n                    node.operator[0],\n                    t.unaryExpression(\n                      \"+\",\n                      t.cloneNode(\n                        // @ts-expect-error node is UpdateExpression\n                        node.argument,\n                      ),\n                    ),\n                    t.numericLiteral(1),\n                  );\n                }\n\n                for (const exportedName of exportedNames) {\n                  node = this.buildCall(exportedName, node).expression;\n                }\n\n                if (isPostUpdateExpression) {\n                  node = t.sequenceExpression([node, path.node]);\n                }\n\n                path.replaceWith(node);\n              },\n            },\n            {\n              exports: exportMap,\n              buildCall: buildExportCall,\n              scope,\n            } satisfies ReassignmentVisitorState,\n          );\n\n          for (const path of removedPaths) {\n            path.remove();\n          }\n\n          const hasTLA = t.traverseFast(path.node, node => {\n            if (t.isFunction(node)) return t.traverseFast.skip;\n            if (t.isAwaitExpression(node)) {\n              return t.traverseFast.stop;\n            }\n          });\n\n          path.node.body = [\n            buildTemplate({\n              SYSTEM_REGISTER: t.memberExpression(\n                t.identifier(systemGlobal),\n                t.identifier(\"register\"),\n              ),\n              BEFORE_BODY: beforeBody,\n              MODULE_NAME: moduleName,\n              SETTERS: t.arrayExpression(setters),\n              EXECUTE: t.functionExpression(\n                null,\n                [],\n                t.blockStatement(path.node.body),\n                false,\n                hasTLA,\n              ),\n              SOURCES: t.arrayExpression(sources),\n              EXPORT_IDENTIFIER: t.identifier(exportIdent),\n              CONTEXT_IDENTIFIER: t.identifier(contextIdent),\n            }),\n          ];\n          path.requeue(path.get(\"body.0\"));\n        },\n      },\n    }),\n  };\n});\n"],"names":["t","CallExpression|ImportExpression","AssignmentExpression|UpdateExpression"],"mappings":";;;;;AAWA,MAAM,aAAa,GAAG,QAAQ,CAAC,SAAS,CAAC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,QAAQ,CAAC,SAAS,CAAC;AAC1C;AACA;AACA;AACA,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAA;AAC7B;AACA;AACA;AACA,CAAC;AAIM,SAAS,sBAAsB,CACpC,IAAY,EACZ,gBAA6B,EACrB;AACR,EAAA,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE;IAC9B,OAAO,IAAI,CAAC,IAAI;AAClB,EAAA,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,EAAE;AACxC,IAAA,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK;AAO9B,IAAA,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE;AAClC,MAAA,gBAAgB,CAAC,GAAG,CAAC,WAAW,CAAC;AACnC,IAAA;AACA,IAAA,OAAO,WAAW;AACpB,EAAA,CAAC,MAAM;IACL,MAAM,IAAI,KAAK,CACb,CAAA,wEAAA,EAA2E,IAAI,CAAC,IAAI,EACtF,CAAC;AACH,EAAA;AACF;AAiBA,MAAM,QAAQ,GAAG,WAAW;AAE5B,SAAS,mBAAmB,CAC1B,IAAyB,EACzB,WAAyB,EACzB,WAAqB,EACrB,YAA4B,EAC5B,gBAAqC,EACrC,gBAA6B,EAC7B;EACA,MAAM,UAAU,GAAG,EAAE;EACrB,IAAI,CAAC,gBAAgB,EAAE;AACrB,IAAA,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;AAC5B,MAAA,UAAU,CAAC,IAAI,CACbA,KAAC,CAAC,mBAAmB,CACnBA,KAAC,CAAC,cAAc,CAAC,WAAW,EAAE,CAC5BA,KAAC,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAC/B,YAAY,CAAC,CAAC,CAAC,CAChB,CACH,CACF,CAAC;AACH,IAAA,CAAC,MAAM;MACL,MAAM,gBAAgB,GAAG,EAAE;AAC3B,MAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC3C,QAAA,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC;AACjC,QAAA,MAAM,QAAQ,GAAG,UAAU,KAAK,QAAQ;QACxC,MAAM,cAAc,GAClB,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,QAAQ,GACxCA,KAAC,CAAC,aAAa,CAAC,UAAU,CAAC,GAC3BA,KAAC,CAAC,UAAU,CAAC,UAAU,CAAC;AAC9B,QAAA,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC;AACnC,QAAA,gBAAgB,CAAC,IAAI,CACnBA,KAAC,CAAC,cAAc,CAAC,cAAc,EAAE,WAAW,EAAE,QAAQ,CACxD,CAAC;AACH,MAAA;MACA,UAAU,CAAC,IAAI,CACbA,KAAC,CAAC,mBAAmB,CACnBA,KAAC,CAAC,cAAc,CAAC,WAAW,EAAE,CAACA,KAAC,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,CACtE,CACF,CAAC;AACH,IAAA;AACF,EAAA,CAAC,MAAM;IACL,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC;IAErD,UAAU,CAAC,IAAI,CACbA,KAAC,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAC3BA,KAAC,CAAC,kBAAkB,CAClBA,KAAC,CAAC,UAAU,CAAC,SAAS,CAAC,EACvBA,KAAC,CAAC,gBAAgB,CAAC,CACjBA,KAAC,CAAC,cAAc,CAACA,KAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAEA,KAAC,CAAC,WAAW,EAAE,CAAC,CAC1D,CACH,CAAC,CACF,CACH,CAAC;AAED,IAAA,UAAU,CAAC,IAAI,CACb,cAAc,CAAC;MACb,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,KAAK,CAAC;AAC5C,MAAA,UAAU,EAAEA,KAAC,CAAC,UAAU,CAAC,SAAS,CAAC;AACnC,MAAA,MAAM,EAAE;AACV,KAAC,CACH,CAAC;AAED,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC3C,MAAA,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC;AACjC,MAAA,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC;AACjD,MAAA,MAAM,cAAc,GAAG,QAAQ,GAC3BA,KAAC,CAAC,aAAa,CAAC,UAAU,CAAC,GAC3BA,KAAC,CAAC,UAAU,CAAC,UAAU,CAAC;AAC5B,MAAA,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC;AAEnC,MAAA,UAAU,CAAC,IAAI,CACbA,KAAC,CAAC,mBAAmB,CACnBA,KAAC,CAAC,oBAAoB,CACpB,GAAG,EACHA,KAAC,CAAC,gBAAgB,CAChBA,KAAC,CAAC,UAAU,CAAC,SAAS,CAAC,EACvB,cAAc,EACd,QACF,CAAC,EACD,WACF,CACF,CACF,CAAC;AACH,IAAA;IAEA,UAAU,CAAC,IAAI,CACbA,KAAC,CAAC,mBAAmB,CACnBA,KAAC,CAAC,cAAc,CAAC,WAAW,EAAE,CAACA,KAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CACzD,CACF,CAAC;AACH,EAAA;AACA,EAAA,OAAO,UAAU;AACnB;AAaA,cAAe,OAAO,CAAuB,CAAC,GAAG,EAAE,OAAgB,KAAK;EACtE,GAAG,CAAC,aAAa,CAAA,oBAAuC,CAAC;EAEzD,MAAM;AAAE,IAAA,YAAY,GAAG,QAAQ;AAAE,IAAA,iBAAiB,GAAG;AAAM,GAAC,GAAG,OAAO;AACtE,EAAA,MAAM,mBAAmB,GAAG,IAAI,OAAO,EAAE;EAEzC,OAAO;AACL,IAAA,IAAI,EAAE,4BAA4B;AAElC,IAAA,GAAG,GAAG;MACJ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,mCAAmC,EAAE,UAAU,CAAC;IAChE,CAAC;AAED,IAAA,OAAO,EAAE,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC;AAC5B,MAAA,iCAAiCC,CAE/B,IAAqD,EACrD,KAAkB,EAClB;AACA,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAACD,KAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AAC9D,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;UAC3B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,uCAAuC,CAAC,EAAE;AAC3D,YAAA,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC;AACvC,UAAA;AACF,QAAA,CAAC,MAAM;UAEL,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,uCAAuC,CAAC,EAAE;AAC3D,YAAA,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC;AACvC,UAAA;AACF,QAAA;QACA,IAAI,CAAC,WAAW,CACd,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,IAClDA,KAAC,CAAC,cAAc,CACdA,KAAC,CAAC,gBAAgB,CAChBA,KAAC,CAAC,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,EAChCA,KAAC,CAAC,UAAU,CAAC,QAAQ,CACvB,CAAC,EACD,CAAC,SAAS,CACZ,CACF,CACF,CAAC;MACH,CAAC;AAED,MAAA,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE;AACxB,QAAA,IACE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,IAChC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,MAAM,EAClC;UACA,IAAI,CAAC,WAAW,CACdA,KAAC,CAAC,gBAAgB,CAChBA,KAAC,CAAC,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,EAChCA,KAAC,CAAC,UAAU,CAAC,MAAM,CACrB,CACF,CAAC;AACH,QAAA;MACF,CAAC;AAED,MAAA,oBAAoB,CAAC,IAAI,EAAE,KAAK,EAAE;AAChC,QAAA,IACE,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,cAAc,IACjC,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,EACtC;UACA,IAAI,CAAC,WAAW,CACdA,KAAC,CAAC,gBAAgB,CAChBA,KAAC,CAAC,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,EAChCA,KAAC,CAAC,UAAU,CAAC,IAAI,CACnB,CACF,CAAC;AACH,QAAA;MACF,CAAC;AAED,MAAA,OAAO,EAAE;AACP,QAAA,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE;UACjB,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC;AACtD,UAAA,KAAK,CAAC,gBAAgB,GAAG,IAAI,GAAG,EAAE;UAClC,IAAI,CAAC,iBAAiB,EAAE;YACtB,WAAW,CAAC,IAAI,CAAC;AACnB,UAAA;QACF,CAAC;AACD,QAAA,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE;AAChB,UAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;AACxB,UAAA,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC;UAC/C,MAAM;YAAE,YAAY;AAAE,YAAA;AAAiB,WAAC,GAAG,KAAK;AAEhD,UAAA,MAAM,SAAmC,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;UAC/D,MAAM,OAAyB,GAAG,EAAE;UAEpC,MAAM,UAAU,GAAG,EAAE;UACrB,MAAM,OAAuB,GAAG,EAAE;UAClC,MAAM,OAA0B,GAAG,EAAE;UACrC,MAAM,WAA2B,GAAG,EAAE;UACtC,MAAM,YAAY,GAAG,EAAE;AAEvB,UAAA,SAAS,aAAa,CAAC,GAAW,EAAE,GAAW,EAAE;YAC/C,SAAS,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE;AACrC,YAAA,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1B,UAAA;AAEA,UAAA,SAAS,UAAU,CACjB,MAAc,EACd,GAA0B,EAC1B,UAAwD,EACxD;AACA,YAAA,IAAI,MAAkC;AACtC,YAAA,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;AAC3B,cAAA,IAAI,CAAC,CAAC,GAAG,KAAK,MAAM,EAAE;AACpB,gBAAA,MAAM,GAAG,CAAC;AACZ,cAAA;AACF,YAAA,CAAC,CAAC;YACF,IAAI,CAAC,MAAM,EAAE;AACX,cAAA,OAAO,CAAC,IAAI,CACT,MAAM,GAAG;AAAE,gBAAA,GAAG,EAAE,MAAM;AAAE,gBAAA,OAAO,EAAE,EAAE;AAAE,gBAAA,OAAO,EAAE;AAAG,eACpD,CAAC;AACH,YAAA;AACA,YAAA,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;AAC9C,UAAA;AAEA,UAAA,SAAS,eAAe,CAAC,IAAY,EAAE,GAAiB,EAAE;YACxD,OAAOA,KAAC,CAAC,mBAAmB,CAC1BA,KAAC,CAAC,cAAc,CAACA,KAAC,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAC1CA,KAAC,CAAC,aAAa,CAAC,IAAI,CAAC,EACrB,GAAG,CACJ,CACH,CAAC;AACH,UAAA;UAEA,MAAM,WAAW,GAAG,EAAE;UACtB,MAAM,YAA4B,GAAG,EAAE;AAEvC,UAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;AAE7B,UAAA,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;AACvB,YAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE,EAAE;AAChC,cAAA,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAC1B,cAAA,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;AACzB,YAAA,CAAC,MAAM,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE;AACpC,cAAA,WAAW,CAAC,IAAI,CAACA,KAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAG,CAAC,CAAC;AAC5C,cAAA,IAAI,CAAC,WAAW,CACdA,KAAC,CAAC,mBAAmB,CACnBA,KAAC,CAAC,oBAAoB,CACpB,GAAG,EACHA,KAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAG,CAAC,EAC1BA,KAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAC1B,CACF,CACF,CAAC;AACH,YAAA,CAAC,MAAM,IAAI,IAAI,CAAC,qBAAqB,EAAE,EAAE;AAGvC,cAAA,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK;AACxB,YAAA,CAAC,MAAM,IAAI,IAAI,CAAC,mBAAmB,EAAE,EAAE;cACrC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK;cACrC,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;AACnD,cAAA,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC,EAAE;AAC5D,gBAAA,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC;gBACzB,WAAW,CAAC,IAAI,CAACA,KAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACtC,cAAA;cACA,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,CAAC,MAAM,IAAI,IAAI,CAAC,sBAAsB,EAAE,EAAE;AACxC,cAAA,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC;cACxD,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,CAAC,MAAM,IAAI,IAAI,CAAC,0BAA0B,EAAE,EAAE;AAC5C,cAAA,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW;AACpC,cAAA,IAAIA,KAAC,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE;AAChC,gBAAA,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE;AACpB,gBAAA,IAAI,EAAE,EAAE;AACN,kBAAA,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;kBAC3B,YAAY,CAAC,IAAI,CAACA,KAAC,CAAC,kBAAkB,EAAE,CAAC;kBACzC,WAAW,CAAC,IAAI,CAACA,KAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AACjC,kBAAA,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC;AACjC,kBAAA,IAAI,CAAC,WAAW,CACdA,KAAC,CAAC,mBAAmB,CACnBA,KAAC,CAAC,oBAAoB,CACpB,GAAG,EACHA,KAAC,CAAC,SAAS,CAAC,EAAE,CAAC,EACfA,KAAC,CAAC,YAAY,CAAC,MAAM,CACvB,CACF,CACF,CAAC;AACH,gBAAA,CAAC,MAAM;AACL,kBAAA,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;kBAC3B,YAAY,CAAC,IAAI,CAACA,KAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AACzC,kBAAA,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;AACzB,gBAAA;cACF,CAAC,MAAM,IAAIA,KAAC,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE;AAC1C,gBAAA,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE;AACpB,gBAAA,IAAI,EAAE,EAAE;AACN,kBAAA,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;AACvB,kBAAA,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;kBAC3B,YAAY,CAAC,IAAI,CAACA,KAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AAClC,kBAAA,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC;AACnC,gBAAA,CAAC,MAAM;AACL,kBAAA,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;kBAC3B,YAAY,CAAC,IAAI,CAACA,KAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AAC3C,gBAAA;AACA,gBAAA,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;AACzB,cAAA,CAAC,MAAM;gBAEL,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;AACtD,cAAA;AACF,YAAA,CAAC,MAAM,IAAI,IAAI,CAAC,wBAAwB,EAAE,EAAE;AAC1C,cAAA,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW;AAEpC,cAAA,IAAI,MAAM,EAAE;AACV,gBAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;AAExB,gBAAA,IAAIA,KAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;AACxB,kBAAA,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAE,IAAI;AAC5B,kBAAA,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC;AACzB,kBAAA,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;AACvB,kBAAA,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;kBACtB,YAAY,CAAC,IAAI,CAACA,KAAC,CAAC,SAAS,CAAC,MAAM,CAAC,EAAG,CAAC,CAAC;AAC1C,kBAAA,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;gBACzB,CAAC,MAAM,IAAIA,KAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AAC5B,kBAAA,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAE,IAAI;AAC5B,kBAAA,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;kBACtB,YAAY,CAAC,IAAI,CAACA,KAAC,CAAC,kBAAkB,EAAE,CAAC;kBACzC,WAAW,CAAC,IAAI,CAACA,KAAC,CAAC,SAAS,CAAC,MAAM,CAAC,EAAG,CAAC,CAAC;AACzC,kBAAA,IAAI,CAAC,WAAW,CACdA,KAAC,CAAC,mBAAmB,CACnBA,KAAC,CAAC,oBAAoB,CACpB,GAAG,EACHA,KAAC,CAAC,SAAS,CAAC,MAAM,CAAC,EAAG,CAAC,EACvBA,KAAC,CAAC,YAAY,CAAC,MAAM,CACvB,CACF,CACF,CAAC;AACD,kBAAA,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC;AAC3B,gBAAA,CAAC,MAAM;AACL,kBAAA,IAAIA,KAAC,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE;oBAGnC,MAAM,CAAC,IAAI,GAAG,KAAK;AACrB,kBAAA;AACA,kBAAA,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAC5BA,KAAC,CAAC,qBAAqB,CAAC,MAAM,CAChC,CAAC,EAAE;AACD,oBAAA,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC;AAC3B,kBAAA;AACF,gBAAA;AACF,cAAA,CAAC,MAAM;AACL,gBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU;gBACvC,IAAI,UAAU,EAAE,MAAM,EAAE;AACtB,kBAAA,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACpB,oBAAA,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,CAAC;oBACzD,IAAI,CAAC,MAAM,EAAE;AACf,kBAAA,CAAC,MAAM;oBACL,MAAM,KAAK,GAAG,EAAE;AAEhB,oBAAA,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;sBAGlC,MAAM;wBAAE,KAAK;AAAE,wBAAA;AAAS,uBAAC,GAAG,SAAS;sBAErC,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;AAC5C,sBAAA,MAAM,YAAY,GAAG,sBAAsB,CACzC,QAAQ,EACR,gBACF,CAAC;AAED,sBAAA,IACE,OAAO,IACPA,KAAC,CAAC,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAC1C;AACA,wBAAA,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC;wBAC9B,YAAY,CAAC,IAAI,CAACA,KAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACvC,sBAAA,CAAC,MAEI,IAAI,CAAC,OAAO,EAAE;wBACjB,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;AAClD,sBAAA;AACA,sBAAA,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC;AACzC,oBAAA;AAEA,oBAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;AACjC,kBAAA;AACF,gBAAA,CAAC,MAAM;kBACL,IAAI,CAAC,MAAM,EAAE;AACf,gBAAA;AACF,cAAA;AACF,YAAA;AACF,UAAA;AAEA,UAAA,OAAO,CAAC,OAAO,CAAC,UAAU,UAAU,EAAE;YACpC,MAAM,UAAU,GAAG,EAAE;YACrB,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC;AAEhD,YAAA,KAAK,IAAI,SAAS,IAAI,UAAU,CAAC,OAAO,EAAE;AACxC,cAAA,IAAIA,KAAC,CAAC,0BAA0B,CAAC,SAAS,CAAC,EAAE;gBAC3C,UAAU,CAAC,IAAI,CACbA,KAAC,CAAC,mBAAmB,CACnBA,KAAC,CAAC,oBAAoB,CACpB,GAAG,EACH,SAAS,CAAC,KAAK,EACfA,KAAC,CAAC,UAAU,CAAC,MAAM,CACrB,CACF,CACF,CAAC;cACH,CAAC,MAAM,IAAIA,KAAC,CAAC,wBAAwB,CAAC,SAAS,CAAC,EAAE;AAChD,gBAAA,SAAS,GAAGA,KAAC,CAAC,eAAe,CAC3B,SAAS,CAAC,KAAK,EACfA,KAAC,CAAC,UAAU,CAAC,SAAS,CACxB,CAAC;AACH,cAAA;AAEA,cAAA,IAAIA,KAAC,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE;gBAClC,MAAM;AAAE,kBAAA;AAAS,iBAAC,GAAG,SAAS;AAC9B,gBAAA,UAAU,CAAC,IAAI,CACbA,KAAC,CAAC,mBAAmB,CACnBA,KAAC,CAAC,oBAAoB,CACpB,GAAG,EACH,SAAS,CAAC,KAAK,EACfA,KAAC,CAAC,gBAAgB,CAChBA,KAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EACpB,SAAS,CAAC,QAAQ,EACH,QAAQ,CAAC,IAAI,KAAK,eACnC,CACF,CACF,CACF,CAAC;AACH,cAAA;AACF,YAAA;AAEA,YAAA,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE;cAC7B,MAAM,WAAW,GAAG,EAAE;cACtB,MAAM,YAAY,GAAG,EAAE;cACvB,IAAI,aAAa,GAAG,KAAK;AAEzB,cAAA,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,OAAO,EAAE;AACrC,gBAAA,IAAIA,KAAC,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE;AAClC,kBAAA,aAAa,GAAG,IAAI;gBACtB,CAAC,MAAM,IAAIA,KAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE;kBACpC,MAAM,YAAY,GAAG,sBAAsB,CACzC,IAAI,CAAC,QAAQ,EACb,gBACF,CAAC;AACD,kBAAA,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC;kBAC9B,YAAY,CAAC,IAAI,CACfA,KAAC,CAAC,gBAAgB,CAChBA,KAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EACpB,IAAI,CAAC,KAAK,EACVA,KAAC,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAC9B,CACF,CAAC;AACH,gBAAA,CAAC,MAAM;AAGT,cAAA;AAEA,cAAA,UAAU,CAAC,IAAI,CACb,GAAG,mBAAmB,CACpB,IAAI,EACJA,KAAC,CAAC,UAAU,CAAC,WAAW,CAAC,EACzB,WAAW,EACX,YAAY,EACZ,aAAa,GAAGA,KAAC,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,IAAI,EAC3C,gBACF,CACF,CAAC;AACH,YAAA;YAEA,OAAO,CAAC,IAAI,CAACA,KAAC,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YAC7C,OAAO,CAAC,IAAI,CACVA,KAAC,CAAC,kBAAkB,CAClB,IAAI,EACJ,CAACA,KAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EACtBA,KAAC,CAAC,cAAc,CAAC,UAAU,CAC7B,CACF,CAAC;AACH,UAAA,CAAC,CAAC;UAEF,IAAI,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;UAEvD,IAAI,UAAU,EAAE,UAAU,GAAGA,KAAC,CAAC,aAAa,CAAC,UAAU,CAAC;UAExD,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,EAAE,EAAE,OAAO,KAAK;AACzC,YAAA,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;YACpB,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,IAAI,IAAI,SAAS,EAAE;cACpC,KAAK,MAAM,QAAQ,IAAI,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;AACzC,gBAAA,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;gBAC1B,YAAY,CAAC,IAAI,CAACA,KAAC,CAAC,kBAAkB,EAAE,CAAC;AAC3C,cAAA;AACF,YAAA;AACF,UAAA,CAAC,CAAC;UAEF,IAAI,WAAW,CAAC,MAAM,EAAE;YACtB,UAAU,CAAC,OAAO,CAChBA,KAAC,CAAC,mBAAmB,CACnB,KAAK,EACL,WAAW,CAAC,GAAG,CAAC,EAAE,IAAIA,KAAC,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAChD,CACF,CAAC;AACH,UAAA;UAEA,IAAI,WAAW,CAAC,MAAM,EAAE;YACtB,UAAU,CAAC,IAAI,CACb,GAAG,mBAAmB,CACpB,IAAI,EACJA,KAAC,CAAC,UAAU,CAAC,WAAW,CAAC,EACzB,WAAW,EACX,YAAY,EACZ,IAAI,EACJ,gBACF,CACF,CAAC;AACH,UAAA;UAEA,IAAI,CAAC,QAAQ,CACX;YACE,uCAAuCE,CACrC,IAA2D,EAC3D;cACA,IAAI,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACxC,cAAA,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;cAElC,MAAM,GAAG,GAAG,IAAI,CAAC,sBAAsB,EAAE,GACrC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAChB,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;cAExB,IAAI,GAAG,CAAC,eAAe,EAAE,IAAI,GAAG,CAAC,cAAc,EAAE,EAAE;AACjD,gBAAA,MAAM,KAA0C,GAAG,CACjD,IAAI,CAAC,IAAI,CACV;AACD,gBAAA,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC,EAAE;AAC3D,kBAAA,IACE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,KAC3B,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAC3B;AACA,oBAAA;AACF,kBAAA;AACA,kBAAA,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;kBACxC,IAAI,CAAC,aAAa,EAAE;AACpB,kBAAA,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE;AACxC,oBAAA,KAAK,CAAC,IAAI,CACR,IAAI,CAAC,SAAS,CAAC,YAAY,EAAEF,KAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAC7C,UACL,CAAC;AACH,kBAAA;AACF,gBAAA;gBACA,IAAI,CAAC,WAAW,CAACA,KAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;AAC7C,gBAAA;AACF,cAAA;AAEA,cAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE;AAEzB,cAAA,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI;AAG1B,cAAA,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAC7D;AAEF,cAAA,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;cACxC,IAAI,CAAC,aAAa,EAAE;AAEpB,cAAA,IAAI,IAAkB,GAAG,IAAI,CAAC,IAAI;AAKlC,cAAA,MAAM,sBAAsB,GAAGA,KAAC,CAAC,kBAAkB,CAAC,IAAI,EAAE;AACxD,gBAAA,MAAM,EAAE;AACV,eAAC,CAAC;AACF,cAAA,IAAI,sBAAsB,EAAE;AAC1B,gBAAA,IAAI,GAAGA,KAAC,CAAC,gBAAgB,CAEvB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAChBA,KAAC,CAAC,eAAe,CACf,GAAG,EACHA,KAAC,CAAC,SAAS,CAET,IAAI,CAAC,QACP,CACF,CAAC,EACDA,KAAC,CAAC,cAAc,CAAC,CAAC,CACpB,CAAC;AACH,cAAA;AAEA,cAAA,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE;gBACxC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,UAAU;AACtD,cAAA;AAEA,cAAA,IAAI,sBAAsB,EAAE;AAC1B,gBAAA,IAAI,GAAGA,KAAC,CAAC,kBAAkB,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AAChD,cAAA;AAEA,cAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AACxB,YAAA;AACF,WAAC,EACD;AACE,YAAA,OAAO,EAAE,SAAS;AAClB,YAAA,SAAS,EAAE,eAAe;AAC1B,YAAA;AACF,WACF,CAAC;AAED,UAAA,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE;YAC/B,IAAI,CAAC,MAAM,EAAE;AACf,UAAA;UAEA,MAAM,MAAM,GAAGA,KAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI;AAC/C,YAAA,IAAIA,KAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,OAAOA,KAAC,CAAC,YAAY,CAAC,IAAI;AAClD,YAAA,IAAIA,KAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE;AAC7B,cAAA,OAAOA,KAAC,CAAC,YAAY,CAAC,IAAI;AAC5B,YAAA;AACF,UAAA,CAAC,CAAC;AAEF,UAAA,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CACf,aAAa,CAAC;AACZ,YAAA,eAAe,EAAEA,KAAC,CAAC,gBAAgB,CACjCA,KAAC,CAAC,UAAU,CAAC,YAAY,CAAC,EAC1BA,KAAC,CAAC,UAAU,CAAC,UAAU,CACzB,CAAC;AACD,YAAA,WAAW,EAAE,UAAU;AACvB,YAAA,WAAW,EAAE,UAAU;AACvB,YAAA,OAAO,EAAEA,KAAC,CAAC,eAAe,CAAC,OAAO,CAAC;YACnC,OAAO,EAAEA,KAAC,CAAC,kBAAkB,CAC3B,IAAI,EACJ,EAAE,EACFA,KAAC,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAChC,KAAK,EACL,MACF,CAAC;AACD,YAAA,OAAO,EAAEA,KAAC,CAAC,eAAe,CAAC,OAAO,CAAC;AACnC,YAAA,iBAAiB,EAAEA,KAAC,CAAC,UAAU,CAAC,WAAW,CAAC;AAC5C,YAAA,kBAAkB,EAAEA,KAAC,CAAC,UAAU,CAAC,YAAY;AAC/C,WAAC,CAAC,CACH;UACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAClC,QAAA;AACF;KACD;GACF;AACH,CAAC,CAAC;;;;"}