@visualautomate/plugin-sdk 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/index.ts", "../src/simulate.ts", "../src/platform-rules.ts", "../src/validate.ts", "../src/context-api.ts"],
4
+ "sourcesContent": ["/**\n * @visualautomate/plugin-sdk\n *\n * Three things: the types a plugin is written against, a way to run one on\n * your own machine before it goes anywhere near a canvas, and the checks the\n * platform applies to a plugin's code before it will accept it.\n *\n * Nothing here runs inside the sandbox. Plugin code is plain JavaScript that\n * the platform loads; this package exists so an editor can tell you what\n * `context` has on it, and so `visualautomate test` can call your execute with\n * a context that behaves like the real one.\n */\n\nexport * from \"./types\"\nexport * from \"./simulate\"\nexport * from \"./validate\"\nexport { CONTEXT_API, BLOCKED_GLOBALS, type ContextApiEntry } from \"./context-api\"\n", "/**\n * Running a plugin on your own machine, with a context that behaves.\n *\n * Storage and state are implemented here, in memory, with the same\n * signatures and the same edge cases the real ones have: `get` on a missing key\n * is `null` rather than a throw, `put` accepts a string or bytes, `list` is\n * prefix-filtered. A plugin that works against these works against the real\n * ones, which is the only property that makes a simulator worth having.\n *\n * WHAT IS DELIBERATELY NOT IMPLEMENTED: connections and media. Both are other\n * people's systems \u2014 an OAuth account and an ffmpeg container \u2014 and pretending\n * to be them would produce a plugin that passes here and fails on the canvas.\n * They are absent unless you pass a stub, and asking for one you did not stub\n * fails with a sentence saying so rather than with `undefined`.\n */\n\nimport type {\n PluginConnections,\n PluginContext,\n PluginExecutionResult,\n PluginMedia,\n PluginModule,\n PluginOutput,\n PluginState,\n PluginStorage,\n StorageListResult,\n StorageResult,\n} from \"./types\"\n\n/** A file held in memory, as the local storage keeps it. */\ninterface LocalFile {\n bytes: Uint8Array\n contentType: string\n uploadedAt: string\n}\n\nfunction toBytes(data: Uint8Array | string): Uint8Array {\n return typeof data === \"string\" ? new TextEncoder().encode(data) : data\n}\n\n/**\n * The account's files, in memory.\n *\n * Seeded from `options.storage` so a test can start with a file already there,\n * and readable afterwards through the returned `files` \u2014 which is how you\n * assert that a step wrote what it said it wrote.\n */\nexport function createLocalStorage(seed: Record<string, Uint8Array | string> = {}): {\n storage: PluginStorage\n files: Map<string, LocalFile>\n} {\n const files = new Map<string, LocalFile>()\n for (const [path, data] of Object.entries(seed)) {\n files.set(path, {\n bytes: toBytes(data),\n contentType: \"application/octet-stream\",\n uploadedAt: new Date().toISOString(),\n })\n }\n\n const result = (path: string, file: LocalFile): StorageResult => ({\n url: `memory://${path}`,\n size: file.bytes.length,\n contentType: file.contentType,\n uploadedAt: file.uploadedAt,\n // The real one expires; this one does not, and says so rather than\n // inventing a date a test might come to rely on.\n expiresAt: \"never (local simulation)\",\n })\n\n const storage: PluginStorage = {\n async put(path, data, contentType = \"application/octet-stream\") {\n const file: LocalFile = {\n bytes: toBytes(data),\n contentType,\n uploadedAt: new Date().toISOString(),\n }\n files.set(path, file)\n return result(path, file)\n },\n async get(path) {\n return files.get(path)?.bytes ?? null\n },\n async delete(path) {\n files.delete(path)\n },\n async list(prefix) {\n const listed: StorageListResult[\"files\"] = []\n let totalSize = 0\n for (const [path, file] of files) {\n if (prefix && !path.startsWith(prefix)) continue\n listed.push({\n url: `memory://${path}`,\n pathname: path,\n size: file.bytes.length,\n uploadedAt: file.uploadedAt,\n })\n totalSize += file.bytes.length\n }\n return { files: listed, totalSize }\n },\n async head(path) {\n const file = files.get(path)\n return file ? { size: file.bytes.length, contentType: file.contentType } : null\n },\n async signedUrl(path) {\n return files.has(path) ? `memory://${path}` : null\n },\n /**\n * Really fetches, because that is the only way to find out whether the\n * URL a plugin builds is the URL it meant. The bytes land in the same\n * in-memory store the rest of these read from.\n */\n async download(url, path, contentType) {\n const res = await fetch(url)\n if (!res.ok) throw new Error(`Downloading ${url} failed with status ${res.status}`)\n const file: LocalFile = {\n bytes: new Uint8Array(await res.arrayBuffer()),\n contentType: contentType ?? res.headers.get(\"content-type\") ?? \"application/octet-stream\",\n uploadedAt: new Date().toISOString(),\n }\n files.set(path, file)\n return result(path, file)\n },\n }\n\n return { storage, files }\n}\n\n/** Workflow state, in memory. `values` is there so a test can look afterwards. */\nexport function createLocalState(seed: Record<string, unknown> = {}): {\n state: PluginState\n values: Map<string, unknown>\n} {\n const values = new Map<string, unknown>(Object.entries(seed))\n const state: PluginState = {\n async get(key) {\n // `null` for a key that was never set, matching the real one. A\n // plugin that treats `undefined` and `null` differently should find\n // out here rather than on somebody's canvas.\n return values.has(key) ? values.get(key) : null\n },\n async set(key, value) {\n values.set(key, value)\n },\n async delete(key) {\n values.delete(key)\n },\n async list(prefix) {\n const keys = [...values.keys()].filter((k) => !prefix || k.startsWith(prefix))\n return { keys }\n },\n }\n return { state, values }\n}\n\n/** What a helper says when it is asked for and was not provided. */\nfunction absent(name: string, what: string): never {\n throw new Error(\n `context.${name} is not available locally. ${what} `\n + `Pass a stub to simulate({ ${name}: \u2026 }) to test the code around it, `\n + `or run the step on a canvas to exercise the real thing.`,\n )\n}\n\nexport interface SimulateOptions {\n /** What the steps before this one produced. */\n input?: Record<string, unknown>\n /** The fields somebody filled in on the canvas. */\n config?: Record<string, unknown>\n /** What the plugin was published with. */\n secrets?: Record<string, string>\n\n /** Files the account already has, as `{ \"path/name.txt\": \"contents\" }`. */\n storage?: Record<string, Uint8Array | string>\n /** Workflow state the run starts with. */\n state?: Record<string, unknown>\n /**\n * Stand-ins for the two helpers that cannot be simulated honestly.\n *\n * Give `connections` a fake that answers the requests your plugin makes,\n * and assert on what it was asked for \u2014 that is a better test of an\n * integration step than any simulation of a provider would be.\n */\n connections?: PluginConnections\n media?: PluginMedia\n\n workflowId?: string\n nodeId?: string\n userId?: string\n executionId?: string\n /** How long the plugin may take, as the account's plan would cap it. */\n timeoutMs?: number\n}\n\n/** What `simulate` gives back: the result, and what the run left behind. */\nexport interface SimulateResult extends PluginExecutionResult {\n /** The files in storage when the step finished. */\n files: Map<string, LocalFile>\n /** The workflow state when the step finished. */\n state: Map<string, unknown>\n}\n\n/**\n * Run a plugin's `execute` the way the sandbox would.\n *\n * Same context shape, same timeout race, same normalising of the return value \u2014\n * so a result that is `success` here is one the platform would also call\n * `success`.\n */\nexport async function simulate(\n plugin: PluginModule | PluginModule[\"execute\"],\n options: SimulateOptions = {},\n): Promise<SimulateResult> {\n const startTime = Date.now()\n\n const execute = typeof plugin === \"function\" ? plugin : plugin?.execute\n const { storage, files } = createLocalStorage(options.storage)\n const { state, values } = createLocalState(options.state)\n\n if (typeof execute !== \"function\") {\n return {\n status: \"error\",\n output: null,\n error:\n \"This module exports no execute function. A plugin is `export default { execute }`, \"\n + \"`module.exports.execute = \u2026`, or a default export that is the function itself.\",\n durationMs: Date.now() - startTime,\n files,\n state: values,\n }\n }\n\n const context: PluginContext = {\n workflowId: options.workflowId ?? \"local-workflow\",\n nodeId: options.nodeId ?? \"local-node\",\n userId: options.userId ?? \"local-user\",\n executionId: options.executionId ?? `local-${Date.now()}`,\n startedAt: new Date(startTime).toISOString(),\n secrets: options.secrets ?? {},\n storage,\n state,\n connections:\n options.connections ??\n ({\n get: async () =>\n absent(\"connections\", \"It reaches an account somebody connected on the platform.\"),\n } as PluginConnections),\n media:\n options.media ??\n ({\n run: async () => absent(\"media\", \"It runs ffmpeg in a container of its own.\"),\n } as PluginMedia),\n }\n\n const timeoutMs = options.timeoutMs ?? 30_000\n let timer: ReturnType<typeof setTimeout> | undefined\n const timeout = new Promise<never>((_, reject) => {\n timer = setTimeout(\n () => reject(new Error(`Plugin execution timed out after ${timeoutMs}ms`)),\n timeoutMs,\n )\n })\n\n try {\n const raw = await Promise.race([\n Promise.resolve(execute(options.input ?? {}, options.config ?? {}, context)),\n timeout,\n ])\n\n const durationMs = Date.now() - startTime\n\n if (!raw || typeof raw !== \"object\") {\n return {\n status: \"error\",\n output: null,\n error:\n \"A plugin must return an object like { output: \\\"success\\\", data: {} }. \"\n + `This one returned ${raw === undefined ? \"undefined\" : JSON.stringify(raw)}.`,\n durationMs,\n files,\n state: values,\n }\n }\n\n const output = raw as PluginOutput\n if (typeof output.output !== \"string\") {\n return {\n status: \"error\",\n output: null,\n error:\n \"The returned object has no `output`. That field names which port the run leaves \"\n + \"by \u2014 usually \\\"success\\\" or \\\"error\\\" \u2014 and it has to be one of the `outputs` \"\n + \"in your manifest.\",\n durationMs,\n files,\n state: values,\n }\n }\n\n return {\n status: \"success\",\n output: { ...output, data: output.data ?? {} },\n durationMs,\n outputPort: output.output,\n logs: output.metadata?.logs,\n files,\n state: values,\n }\n } catch (error) {\n const durationMs = Date.now() - startTime\n const message = error instanceof Error ? error.message : String(error)\n return {\n status: message.includes(\"timed out\") ? \"timeout\" : \"error\",\n output: null,\n error: message,\n durationMs,\n files,\n state: values,\n }\n } finally {\n if (timer) clearTimeout(timer)\n }\n}\n", "/**\n * The rules the VisualAutomate platform applies to a plugin's code on upload.\n *\n * Kept identical to the platform's, so a local test refuses what an upload\n * would refuse. When the platform changes them, this file changes with them in\n * the next release of the SDK.\n */\n\n/** The npm packages a step may require, and the version the sandbox has installed. */\nexport const ALLOWED_PACKAGES: ReadonlyArray<{ name: string; version: string }> = [\n {\n \"name\": \"nodemailer\",\n \"version\": \"^6.10.0\"\n },\n {\n \"name\": \"lodash\",\n \"version\": \"^4.17.21\"\n },\n {\n \"name\": \"ramda\",\n \"version\": \"^0.30.1\"\n },\n {\n \"name\": \"underscore\",\n \"version\": \"^1.13.8\"\n },\n {\n \"name\": \"immer\",\n \"version\": \"^11.1.18\"\n },\n {\n \"name\": \"immutable\",\n \"version\": \"^5.1.9\"\n },\n {\n \"name\": \"deepmerge\",\n \"version\": \"^4.3.1\"\n },\n {\n \"name\": \"defu\",\n \"version\": \"^6.1.7\"\n },\n {\n \"name\": \"rfdc\",\n \"version\": \"^1.4.1\"\n },\n {\n \"name\": \"klona\",\n \"version\": \"^2.0.6\"\n },\n {\n \"name\": \"fast-copy\",\n \"version\": \"^4.1.1\"\n },\n {\n \"name\": \"fast-deep-equal\",\n \"version\": \"^3.1.3\"\n },\n {\n \"name\": \"dequal\",\n \"version\": \"^2.0.3\"\n },\n {\n \"name\": \"object-hash\",\n \"version\": \"^3.0.0\"\n },\n {\n \"name\": \"hash-sum\",\n \"version\": \"^2.0.0\"\n },\n {\n \"name\": \"flat\",\n \"version\": \"^6.0.1\"\n },\n {\n \"name\": \"dot-prop\",\n \"version\": \"^10.2.0\"\n },\n {\n \"name\": \"object-path\",\n \"version\": \"^0.11.8\"\n },\n {\n \"name\": \"sort-array\",\n \"version\": \"^5.1.1\"\n },\n {\n \"name\": \"natural-orderby\",\n \"version\": \"^5.0.0\"\n },\n {\n \"name\": \"deep-object-diff\",\n \"version\": \"^1.1.9\"\n },\n {\n \"name\": \"microdiff\",\n \"version\": \"^1.6.0\"\n },\n {\n \"name\": \"fast-json-patch\",\n \"version\": \"^3.1.1\"\n },\n {\n \"name\": \"rfc6902\",\n \"version\": \"^5.3.0\"\n },\n {\n \"name\": \"just-clone\",\n \"version\": \"^6.2.0\"\n },\n {\n \"name\": \"just-diff\",\n \"version\": \"^6.0.2\"\n },\n {\n \"name\": \"just-diff-apply\",\n \"version\": \"^5.5.0\"\n },\n {\n \"name\": \"just-omit\",\n \"version\": \"^2.2.0\"\n },\n {\n \"name\": \"just-pick\",\n \"version\": \"^4.2.0\"\n },\n {\n \"name\": \"just-group-by\",\n \"version\": \"^2.2.0\"\n },\n {\n \"name\": \"just-order-by\",\n \"version\": \"^1.0.0\"\n },\n {\n \"name\": \"just-unique\",\n \"version\": \"^4.2.0\"\n },\n {\n \"name\": \"just-flatten-it\",\n \"version\": \"^5.2.0\"\n },\n {\n \"name\": \"just-safe-get\",\n \"version\": \"^4.2.0\"\n },\n {\n \"name\": \"just-safe-set\",\n \"version\": \"^4.2.1\"\n },\n {\n \"name\": \"just-typeof\",\n \"version\": \"^3.2.0\"\n },\n {\n \"name\": \"just-range\",\n \"version\": \"^4.2.0\"\n },\n {\n \"name\": \"just-zip-it\",\n \"version\": \"^3.2.0\"\n },\n {\n \"name\": \"just-compare\",\n \"version\": \"^2.3.0\"\n },\n {\n \"name\": \"just-intersect\",\n \"version\": \"^4.3.0\"\n },\n {\n \"name\": \"just-split\",\n \"version\": \"^3.2.0\"\n },\n {\n \"name\": \"just-truncate\",\n \"version\": \"^2.2.0\"\n },\n {\n \"name\": \"semver\",\n \"version\": \"^7.6.3\"\n },\n {\n \"name\": \"compare-versions\",\n \"version\": \"^6.1.1\"\n },\n {\n \"name\": \"tiny-invariant\",\n \"version\": \"^1.3.3\"\n },\n {\n \"name\": \"json-stringify-safe\",\n \"version\": \"^5.0.1\"\n },\n {\n \"name\": \"fast-safe-stringify\",\n \"version\": \"^2.1.1\"\n },\n {\n \"name\": \"flatted\",\n \"version\": \"^3.4.4\"\n },\n {\n \"name\": \"superjson\",\n \"version\": \"^2.2.6\"\n },\n {\n \"name\": \"devalue\",\n \"version\": \"^5.9.2\"\n },\n {\n \"name\": \"lru-cache\",\n \"version\": \"^11.5.2\"\n },\n {\n \"name\": \"quick-lru\",\n \"version\": \"^7.3.0\"\n },\n {\n \"name\": \"memoize-one\",\n \"version\": \"^6.0.0\"\n },\n {\n \"name\": \"fast-memoize\",\n \"version\": \"^2.5.2\"\n },\n {\n \"name\": \"uuid\",\n \"version\": \"^11.0.5\"\n },\n {\n \"name\": \"nanoid\",\n \"version\": \"^5.0.9\"\n },\n {\n \"name\": \"ulid\",\n \"version\": \"^3.0.2\"\n },\n {\n \"name\": \"@paralleldrive/cuid2\",\n \"version\": \"^3.3.0\"\n },\n {\n \"name\": \"slugify\",\n \"version\": \"^1.6.6\"\n },\n {\n \"name\": \"slug\",\n \"version\": \"^12.0.1\"\n },\n {\n \"name\": \"sanitize-filename\",\n \"version\": \"^1.6.4\"\n },\n {\n \"name\": \"filenamify\",\n \"version\": \"^7.0.3\"\n },\n {\n \"name\": \"seedrandom\",\n \"version\": \"^3.0.5\"\n },\n {\n \"name\": \"random-js\",\n \"version\": \"^2.1.0\"\n },\n {\n \"name\": \"chance\",\n \"version\": \"^1.1.13\"\n },\n {\n \"name\": \"@faker-js/faker\",\n \"version\": \"^10.6.0\"\n },\n {\n \"name\": \"lorem-ipsum\",\n \"version\": \"^3.0.0\"\n },\n {\n \"name\": \"randomcolor\",\n \"version\": \"^0.6.2\"\n },\n {\n \"name\": \"date-fns\",\n \"version\": \"^4.1.0\"\n },\n {\n \"name\": \"date-fns-tz\",\n \"version\": \"^3.2.0\"\n },\n {\n \"name\": \"dayjs\",\n \"version\": \"^1.11.13\"\n },\n {\n \"name\": \"luxon\",\n \"version\": \"^3.5.0\"\n },\n {\n \"name\": \"moment\",\n \"version\": \"^2.30.1\"\n },\n {\n \"name\": \"moment-timezone\",\n \"version\": \"^0.6.3\"\n },\n {\n \"name\": \"ms\",\n \"version\": \"^2.1.3\"\n },\n {\n \"name\": \"pretty-ms\",\n \"version\": \"^9.3.1\"\n },\n {\n \"name\": \"parse-duration\",\n \"version\": \"^2.1.8\"\n },\n {\n \"name\": \"humanize-duration\",\n \"version\": \"^3.34.1\"\n },\n {\n \"name\": \"timeago.js\",\n \"version\": \"^4.0.2\"\n },\n {\n \"name\": \"chrono-node\",\n \"version\": \"^2.7.7\"\n },\n {\n \"name\": \"rrule\",\n \"version\": \"^2.8.1\"\n },\n {\n \"name\": \"cron-parser\",\n \"version\": \"^5.10.0\"\n },\n {\n \"name\": \"cronstrue\",\n \"version\": \"^3.26.0\"\n },\n {\n \"name\": \"date-and-time\",\n \"version\": \"^4.5.2\"\n },\n {\n \"name\": \"fecha\",\n \"version\": \"^4.2.3\"\n },\n {\n \"name\": \"dateformat\",\n \"version\": \"^5.0.3\"\n },\n {\n \"name\": \"iso8601-duration\",\n \"version\": \"^2.1.4\"\n },\n {\n \"name\": \"ics\",\n \"version\": \"^3.12.0\"\n },\n {\n \"name\": \"zod\",\n \"version\": \"^3.24.1\"\n },\n {\n \"name\": \"yup\",\n \"version\": \"^1.6.1\"\n },\n {\n \"name\": \"joi\",\n \"version\": \"^18.2.8\"\n },\n {\n \"name\": \"ajv\",\n \"version\": \"^8.17.1\"\n },\n {\n \"name\": \"ajv-formats\",\n \"version\": \"^3.0.1\"\n },\n {\n \"name\": \"ajv-errors\",\n \"version\": \"^3.0.0\"\n },\n {\n \"name\": \"superstruct\",\n \"version\": \"^2.0.2\"\n },\n {\n \"name\": \"valibot\",\n \"version\": \"^1.5.0\"\n },\n {\n \"name\": \"jsonschema\",\n \"version\": \"^1.5.0\"\n },\n {\n \"name\": \"@sinclair/typebox\",\n \"version\": \"^0.34.52\"\n },\n {\n \"name\": \"validator\",\n \"version\": \"^13.12.0\"\n },\n {\n \"name\": \"email-validator\",\n \"version\": \"^2.0.4\"\n },\n {\n \"name\": \"libphonenumber-js\",\n \"version\": \"^1.11.17\"\n },\n {\n \"name\": \"iban\",\n \"version\": \"^0.0.14\"\n },\n {\n \"name\": \"credit-card-type\",\n \"version\": \"^10.3.0\"\n },\n {\n \"name\": \"card-validator\",\n \"version\": \"^10.0.4\"\n },\n {\n \"name\": \"psl\",\n \"version\": \"^1.15.0\"\n },\n {\n \"name\": \"tldts\",\n \"version\": \"^7.4.12\"\n },\n {\n \"name\": \"normalize-url\",\n \"version\": \"^9.0.1\"\n },\n {\n \"name\": \"valid-url\",\n \"version\": \"^1.0.9\"\n },\n {\n \"name\": \"is-ip\",\n \"version\": \"^5.0.1\"\n },\n {\n \"name\": \"ipaddr.js\",\n \"version\": \"^2.5.0\"\n },\n {\n \"name\": \"ip-address\",\n \"version\": \"^10.7.0\"\n },\n {\n \"name\": \"netmask\",\n \"version\": \"^2.1.1\"\n },\n {\n \"name\": \"ua-parser-js\",\n \"version\": \"^2.0.10\"\n },\n {\n \"name\": \"bowser\",\n \"version\": \"^2.14.1\"\n },\n {\n \"name\": \"papaparse\",\n \"version\": \"^5.4.1\"\n },\n {\n \"name\": \"csv-parse\",\n \"version\": \"^7.0.2\"\n },\n {\n \"name\": \"csv-stringify\",\n \"version\": \"^6.8.3\"\n },\n {\n \"name\": \"json-2-csv\",\n \"version\": \"^5.6.0\"\n },\n {\n \"name\": \"js-yaml\",\n \"version\": \"^4.1.0\"\n },\n {\n \"name\": \"yaml\",\n \"version\": \"^2.9.0\"\n },\n {\n \"name\": \"json5\",\n \"version\": \"^2.2.3\"\n },\n {\n \"name\": \"jsonc-parser\",\n \"version\": \"^3.3.1\"\n },\n {\n \"name\": \"hjson\",\n \"version\": \"^3.2.2\"\n },\n {\n \"name\": \"toml\",\n \"version\": \"^5.0.0\"\n },\n {\n \"name\": \"@iarna/toml\",\n \"version\": \"^2.2.5\"\n },\n {\n \"name\": \"ini\",\n \"version\": \"^7.0.0\"\n },\n {\n \"name\": \"fast-xml-parser\",\n \"version\": \"^4.5.1\"\n },\n {\n \"name\": \"xml2js\",\n \"version\": \"^0.6.2\"\n },\n {\n \"name\": \"xml-js\",\n \"version\": \"^1.6.11\"\n },\n {\n \"name\": \"xmlbuilder2\",\n \"version\": \"^4.0.3\"\n },\n {\n \"name\": \"@xmldom/xmldom\",\n \"version\": \"^0.9.12\"\n },\n {\n \"name\": \"xpath\",\n \"version\": \"^0.0.34\"\n },\n {\n \"name\": \"cheerio\",\n \"version\": \"^1.0.0\"\n },\n {\n \"name\": \"htmlparser2\",\n \"version\": \"^12.0.0\"\n },\n {\n \"name\": \"node-html-parser\",\n \"version\": \"^9.0.4\"\n },\n {\n \"name\": \"parse5\",\n \"version\": \"^8.0.1\"\n },\n {\n \"name\": \"sanitize-html\",\n \"version\": \"^2.17.7\"\n },\n {\n \"name\": \"marked\",\n \"version\": \"^15.0.6\"\n },\n {\n \"name\": \"markdown-it\",\n \"version\": \"^15.0.1\"\n },\n {\n \"name\": \"showdown\",\n \"version\": \"^2.1.0\"\n },\n {\n \"name\": \"turndown\",\n \"version\": \"^7.2.0\"\n },\n {\n \"name\": \"html-to-text\",\n \"version\": \"^9.0.5\"\n },\n {\n \"name\": \"he\",\n \"version\": \"^1.2.0\"\n },\n {\n \"name\": \"entities\",\n \"version\": \"^8.1.0\"\n },\n {\n \"name\": \"striptags\",\n \"version\": \"^3.2.0\"\n },\n {\n \"name\": \"front-matter\",\n \"version\": \"^4.0.2\"\n },\n {\n \"name\": \"qs\",\n \"version\": \"^6.13.1\"\n },\n {\n \"name\": \"query-string\",\n \"version\": \"^9.5.1\"\n },\n {\n \"name\": \"url-parse\",\n \"version\": \"^1.5.10\"\n },\n {\n \"name\": \"mime-types\",\n \"version\": \"^2.1.35\"\n },\n {\n \"name\": \"mime\",\n \"version\": \"^4.1.0\"\n },\n {\n \"name\": \"content-type\",\n \"version\": \"^3.0.0\"\n },\n {\n \"name\": \"cookie\",\n \"version\": \"^2.0.1\"\n },\n {\n \"name\": \"set-cookie-parser\",\n \"version\": \"^3.1.2\"\n },\n {\n \"name\": \"jsonpath-plus\",\n \"version\": \"^10.2.0\"\n },\n {\n \"name\": \"jmespath\",\n \"version\": \"^0.16.0\"\n },\n {\n \"name\": \"jsonata\",\n \"version\": \"^2.2.2\"\n },\n {\n \"name\": \"exceljs\",\n \"version\": \"^4.4.0\"\n },\n {\n \"name\": \"change-case\",\n \"version\": \"^5.4.4\"\n },\n {\n \"name\": \"camelcase\",\n \"version\": \"^9.0.0\"\n },\n {\n \"name\": \"decamelize\",\n \"version\": \"^6.0.1\"\n },\n {\n \"name\": \"title-case\",\n \"version\": \"^4.3.2\"\n },\n {\n \"name\": \"pluralize\",\n \"version\": \"^8.0.0\"\n },\n {\n \"name\": \"inflection\",\n \"version\": \"^3.0.2\"\n },\n {\n \"name\": \"voca\",\n \"version\": \"^1.4.1\"\n },\n {\n \"name\": \"underscore.string\",\n \"version\": \"^3.3.6\"\n },\n {\n \"name\": \"string-similarity\",\n \"version\": \"^4.0.4\"\n },\n {\n \"name\": \"fastest-levenshtein\",\n \"version\": \"^1.0.16\"\n },\n {\n \"name\": \"leven\",\n \"version\": \"^4.1.0\"\n },\n {\n \"name\": \"diff\",\n \"version\": \"^7.0.0\"\n },\n {\n \"name\": \"diff-match-patch\",\n \"version\": \"^1.0.5\"\n },\n {\n \"name\": \"remove-accents\",\n \"version\": \"^0.5.0\"\n },\n {\n \"name\": \"transliteration\",\n \"version\": \"^2.6.1\"\n },\n {\n \"name\": \"latinize\",\n \"version\": \"^2.0.0\"\n },\n {\n \"name\": \"franc\",\n \"version\": \"^6.2.0\"\n },\n {\n \"name\": \"stopword\",\n \"version\": \"^3.1.5\"\n },\n {\n \"name\": \"emoji-regex\",\n \"version\": \"^10.6.0\"\n },\n {\n \"name\": \"node-emoji\",\n \"version\": \"^2.2.0\"\n },\n {\n \"name\": \"string-width\",\n \"version\": \"^8.2.2\"\n },\n {\n \"name\": \"word-wrap\",\n \"version\": \"^1.2.5\"\n },\n {\n \"name\": \"wrap-ansi\",\n \"version\": \"^10.0.1\"\n },\n {\n \"name\": \"linkify-it\",\n \"version\": \"^6.1.0\"\n },\n {\n \"name\": \"linkifyjs\",\n \"version\": \"^4.3.3\"\n },\n {\n \"name\": \"fuse.js\",\n \"version\": \"^7.5.0\"\n },\n {\n \"name\": \"minisearch\",\n \"version\": \"^7.2.0\"\n },\n {\n \"name\": \"lunr\",\n \"version\": \"^2.3.9\"\n },\n {\n \"name\": \"flexsearch\",\n \"version\": \"^0.8.212\"\n },\n {\n \"name\": \"mustache\",\n \"version\": \"^4.2.0\"\n },\n {\n \"name\": \"liquidjs\",\n \"version\": \"^10.20.1\"\n },\n {\n \"name\": \"intl-messageformat\",\n \"version\": \"^11.2.14\"\n },\n {\n \"name\": \"gpt-tokenizer\",\n \"version\": \"^4.0.0\"\n },\n {\n \"name\": \"js-tiktoken\",\n \"version\": \"^1.0.21\"\n },\n {\n \"name\": \"decimal.js\",\n \"version\": \"^10.4.3\"\n },\n {\n \"name\": \"big.js\",\n \"version\": \"^6.2.2\"\n },\n {\n \"name\": \"bignumber.js\",\n \"version\": \"^11.1.5\"\n },\n {\n \"name\": \"currency.js\",\n \"version\": \"^2.0.4\"\n },\n {\n \"name\": \"dinero.js\",\n \"version\": \"^2.0.2\"\n },\n {\n \"name\": \"numeral\",\n \"version\": \"^2.0.6\"\n },\n {\n \"name\": \"accounting\",\n \"version\": \"^0.4.1\"\n },\n {\n \"name\": \"fraction.js\",\n \"version\": \"^5.3.4\"\n },\n {\n \"name\": \"convert-units\",\n \"version\": \"^2.3.4\"\n },\n {\n \"name\": \"js-quantities\",\n \"version\": \"^1.8.0\"\n },\n {\n \"name\": \"mathjs\",\n \"version\": \"^15.2.0\"\n },\n {\n \"name\": \"simple-statistics\",\n \"version\": \"^7.12.0\"\n },\n {\n \"name\": \"ml-matrix\",\n \"version\": \"^6.15.0\"\n },\n {\n \"name\": \"d3-array\",\n \"version\": \"^3.2.4\"\n },\n {\n \"name\": \"d3-format\",\n \"version\": \"^3.1.2\"\n },\n {\n \"name\": \"d3-time-format\",\n \"version\": \"^4.1.0\"\n },\n {\n \"name\": \"geolib\",\n \"version\": \"^3.3.14\"\n },\n {\n \"name\": \"haversine-distance\",\n \"version\": \"^1.2.4\"\n },\n {\n \"name\": \"filesize\",\n \"version\": \"^11.0.23\"\n },\n {\n \"name\": \"bytes\",\n \"version\": \"^3.1.2\"\n },\n {\n \"name\": \"human-format\",\n \"version\": \"^1.2.1\"\n },\n {\n \"name\": \"jsonwebtoken\",\n \"version\": \"^9.0.2\"\n },\n {\n \"name\": \"jose\",\n \"version\": \"^5.9.6\"\n },\n {\n \"name\": \"jws\",\n \"version\": \"^4.0.1\"\n },\n {\n \"name\": \"jwt-decode\",\n \"version\": \"^4.0.0\"\n },\n {\n \"name\": \"crypto-js\",\n \"version\": \"^4.2.0\"\n },\n {\n \"name\": \"bcryptjs\",\n \"version\": \"^2.4.3\"\n },\n {\n \"name\": \"otplib\",\n \"version\": \"^13.5.0\"\n },\n {\n \"name\": \"otpauth\",\n \"version\": \"^9.5.2\"\n },\n {\n \"name\": \"tweetnacl\",\n \"version\": \"^1.0.3\"\n },\n {\n \"name\": \"tweetnacl-util\",\n \"version\": \"^0.15.1\"\n },\n {\n \"name\": \"node-forge\",\n \"version\": \"^1.4.0\"\n },\n {\n \"name\": \"elliptic\",\n \"version\": \"^6.6.1\"\n },\n {\n \"name\": \"bn.js\",\n \"version\": \"^5.2.5\"\n },\n {\n \"name\": \"js-base64\",\n \"version\": \"^3.7.7\"\n },\n {\n \"name\": \"base64-js\",\n \"version\": \"^1.5.1\"\n },\n {\n \"name\": \"base-64\",\n \"version\": \"^1.0.0\"\n },\n {\n \"name\": \"hi-base32\",\n \"version\": \"^0.5.1\"\n },\n {\n \"name\": \"thirty-two\",\n \"version\": \"^1.0.2\"\n },\n {\n \"name\": \"js-sha256\",\n \"version\": \"^1.0.0\"\n },\n {\n \"name\": \"js-sha512\",\n \"version\": \"^0.9.0\"\n },\n {\n \"name\": \"js-sha1\",\n \"version\": \"^0.7.0\"\n },\n {\n \"name\": \"js-md5\",\n \"version\": \"^0.9.2\"\n },\n {\n \"name\": \"hash.js\",\n \"version\": \"^1.1.7\"\n },\n {\n \"name\": \"spark-md5\",\n \"version\": \"^3.0.2\"\n },\n {\n \"name\": \"blueimp-md5\",\n \"version\": \"^2.19.0\"\n },\n {\n \"name\": \"crc-32\",\n \"version\": \"^1.2.2\"\n },\n {\n \"name\": \"crc\",\n \"version\": \"^4.3.2\"\n },\n {\n \"name\": \"utf8\",\n \"version\": \"^3.0.0\"\n },\n {\n \"name\": \"iconv-lite\",\n \"version\": \"^0.7.3\"\n },\n {\n \"name\": \"punycode\",\n \"version\": \"^2.3.1\"\n },\n {\n \"name\": \"pako\",\n \"version\": \"^3.0.1\"\n },\n {\n \"name\": \"fflate\",\n \"version\": \"^0.8.3\"\n },\n {\n \"name\": \"lz-string\",\n \"version\": \"^1.5.0\"\n },\n {\n \"name\": \"color\",\n \"version\": \"^5.0.3\"\n },\n {\n \"name\": \"tinycolor2\",\n \"version\": \"^1.6.0\"\n },\n {\n \"name\": \"chroma-js\",\n \"version\": \"^3.2.0\"\n },\n {\n \"name\": \"color-convert\",\n \"version\": \"^3.1.3\"\n },\n {\n \"name\": \"colord\",\n \"version\": \"^2.10.0\"\n },\n {\n \"name\": \"i18n-iso-countries\",\n \"version\": \"^7.14.0\"\n },\n {\n \"name\": \"iso-3166-1\",\n \"version\": \"^2.1.1\"\n },\n {\n \"name\": \"iso-639-1\",\n \"version\": \"^3.1.6\"\n },\n {\n \"name\": \"currency-codes\",\n \"version\": \"^2.2.0\"\n },\n {\n \"name\": \"qrcode-generator\",\n \"version\": \"^2.0.4\"\n },\n {\n \"name\": \"p-limit\",\n \"version\": \"^6.2.0\"\n },\n {\n \"name\": \"p-retry\",\n \"version\": \"^6.2.1\"\n },\n {\n \"name\": \"p-map\",\n \"version\": \"^7.0.3\"\n },\n {\n \"name\": \"p-queue\",\n \"version\": \"^9.3.3\"\n },\n {\n \"name\": \"p-timeout\",\n \"version\": \"^7.0.1\"\n },\n {\n \"name\": \"p-all\",\n \"version\": \"^5.0.1\"\n },\n {\n \"name\": \"p-props\",\n \"version\": \"^6.1.0\"\n },\n {\n \"name\": \"p-settle\",\n \"version\": \"^5.2.1\"\n },\n {\n \"name\": \"p-throttle\",\n \"version\": \"^8.1.0\"\n },\n {\n \"name\": \"p-debounce\",\n \"version\": \"^5.1.0\"\n },\n {\n \"name\": \"async\",\n \"version\": \"^3.2.6\"\n },\n {\n \"name\": \"bluebird\",\n \"version\": \"^3.7.2\"\n },\n {\n \"name\": \"promise-retry\",\n \"version\": \"^2.0.1\"\n },\n {\n \"name\": \"retry\",\n \"version\": \"^0.13.1\"\n },\n {\n \"name\": \"exponential-backoff\",\n \"version\": \"^3.1.3\"\n },\n {\n \"name\": \"bottleneck\",\n \"version\": \"^2.19.5\"\n },\n {\n \"name\": \"throttle-debounce\",\n \"version\": \"^5.0.2\"\n },\n {\n \"name\": \"delay\",\n \"version\": \"^7.0.0\"\n },\n {\n \"name\": \"graphlib\",\n \"version\": \"^2.1.8\"\n }\n]\n\n/** Code matching any of these is refused on upload. */\nexport const RESTRICTED_PATTERNS: ReadonlyArray<RegExp> = [\n /\\bprocess\\s*\\.\\s*exit/,\n /\\bprocess\\s*\\.\\s*env/,\n /\\bprocess\\s*\\.\\s*binding/,\n /\\bprocess\\s*\\.\\s*mainModule/,\n /\\bprocess\\s*\\[/,\n /\\bprocess\\s*\\(/,\n /\\beval\\s*\\(/,\n /\\bFunction\\s*\\(/,\n /\\bnew\\s+Function\\b/,\n /\\bAsyncFunction\\b/,\n /\\bGeneratorFunction\\b/,\n /\\bglobalThis\\b/,\n /\\bself\\s*\\[/,\n /\\bimport\\s+/,\n /\\bimport\\s*\\(/,\n /\\bReflect\\b/,\n /\\bProxy\\b/,\n /\\b__proto__\\b/,\n /\\bprototype\\s*\\[/,\n /\\bprototype\\s*\\.\\s*constructor\\b/,\n /\\bconstructor\\b/,\n /\\bthis\\s*\\.\\s*constructor\\b/,\n /\\barguments\\s*\\.\\s*callee\\b/,\n /\\bObject\\s*\\.\\s*defineProperty\\b/,\n /\\b__defineGetter__\\b/,\n /\\b__defineSetter__\\b/,\n /\\b__lookupGetter__\\b/,\n /\\b__lookupSetter__\\b/,\n /\\bmodule\\s*\\.\\s*(?:constructor|extensions|_compile|_path|_sourceMaps)\\b/,\n /\\brequire\\s*\\.\\s*cache\\b/,\n /\\brequire\\s*\\.\\s*resolve\\b/,\n /\\bError\\s*\\.\\s*captureStackTrace\\b/,\n /\\bWebAssembly\\b/,\n]\n", "/**\n * What the platform checks about a step's code before it will take it.\n *\n * The same checks, in the same order, with the same messages as the platform's\n * upload, against the rules in ./platform-rules. A plugin that passes here is\n * not refused on push for its code; one that fails here would have been.\n *\n * And a `require` that behaves like the sandbox's: a step gets the allowed\n * packages and nothing else \u2014 no `fs`, no `http`, not even `path`.\n */\n\nimport { ALLOWED_PACKAGES, RESTRICTED_PATTERNS } from \"./platform-rules\"\n\nexport { ALLOWED_PACKAGES, RESTRICTED_PATTERNS }\n\n/** The names in ALLOWED_PACKAGES, for lookups. */\nexport const ALLOWED_PACKAGE_NAMES: ReadonlySet<string> = new Set(ALLOWED_PACKAGES.map((p) => p.name))\n\nexport type CodeCheck = { valid: true; packages: string[] } | { valid: false; error: string }\n\n/**\n * Check a step's code the way the platform's upload does.\n *\n * On success, also says which packages it requires \u2014 the ones a local run has to\n * be able to load.\n */\nexport function validatePluginCode(code: string): CodeCheck {\n const hasExecute = code.includes(\"module.exports\") || code.includes(\"exports.execute\") || code.includes(\"export\")\n if (!hasExecute) {\n return {\n valid: false,\n error: \"Plugin code must export an execute function. Example: module.exports = { execute: async (input, config, context) => { ... } }\",\n }\n }\n\n for (const pattern of RESTRICTED_PATTERNS) {\n if (pattern.test(code)) {\n return {\n valid: false,\n error:\n \"Plugin code contains restricted patterns. Plugins cannot access the filesystem, spawn processes, use eval, import modules, or escape the sandbox.\"\n + ` (matched ${pattern})`,\n }\n }\n }\n\n const packages: string[] = []\n const requireCall = /\\brequire\\s*\\(\\s*(['\"])([^'\"]+)\\1\\s*\\)/g\n let match: RegExpExecArray | null\n while ((match = requireCall.exec(code)) !== null) {\n const name = match[2]\n if (!ALLOWED_PACKAGE_NAMES.has(name)) {\n return {\n valid: false,\n error: `Plugin code requires \"${name}\" which is not an allowed package. See ALLOWED_PACKAGES for the list.`,\n }\n }\n if (!packages.includes(name)) packages.push(name)\n }\n\n if (/\\brequire\\s*\\(\\s*(?!['\"][^'\"]+['\"]\\s*\\))/.test(code)) {\n return {\n valid: false,\n error: \"Plugin code contains a dynamic require() call. Only require() with string literals of allowed packages is permitted.\",\n }\n }\n\n return { valid: true, packages }\n}\n\n/**\n * The `require` a step gets inside the sandbox, backed by a loader of your own.\n *\n * `load` is how this machine finds a package \u2014 in the CLI, Node's resolution\n * from the project's directory. The sandbox has every allowed package installed;\n * a laptop has whatever was installed there, so a missing one is reported with\n * the command that installs the version the sandbox has.\n */\nexport function sandboxRequire(load: (name: string) => unknown): (name: string) => unknown {\n return (name: string) => {\n const allowed = ALLOWED_PACKAGES.find((p) => p.name === name)\n if (!allowed) throw new Error(`Cannot require \"${name}\"`)\n try {\n return load(name)\n } catch {\n throw new Error(\n `\"${name}\" is available in the sandbox but not installed here. `\n + `To run this locally: npm install --save-dev ${name}@${allowed.version}`,\n )\n }\n }\n}\n\n/**\n * Evaluate a step's code the way the sandbox wraps it: as the body of a function\n * given `module`, `exports` and `require`, in strict mode. Returns what it exported.\n *\n * Not a security boundary \u2014 this runs your own code on your own machine. It is\n * here so a file the sandbox cannot load (an `export` statement, a top-level\n * `await`) fails here too, rather than passing a looser loader.\n */\nexport function loadPluginCode(code: string, require: (name: string) => unknown): unknown {\n const module = { exports: {} as unknown }\n // eslint-disable-next-line no-new-func\n const body = new Function(\"module\", \"exports\", \"require\", `\"use strict\"; ${code}`)\n body(module, module.exports, require)\n return module.exports\n}\n", "/**\n * The runtime API, as data.\n *\n * The same things types.ts describes, in a form a tool can read without a\n * TypeScript compiler: an editor's autocomplete, a documentation page, a lint\n * rule. Each entry is a name an author types, what it is, and a one-line\n * description.\n *\n * Plain data with no imports, so it can go into a browser bundle without the\n * rest of the SDK.\n */\n\nexport interface ContextApiEntry {\n /** What an author types, e.g. `context.storage.put`. */\n path: string\n /** `property` for a value, `method` for something you call. */\n kind: \"variable\" | \"property\" | \"method\"\n /** The signature, for a method. Shown beside the name. */\n signature?: string\n /** One line, in the hover card. */\n info: string\n /**\n * Set when the helper is not always there.\n *\n * The editor says so, because the alternative is an author writing\n * `context.media.run(...)` against a completion that promised it existed\n * and meeting `undefined` on somebody's canvas.\n */\n conditional?: string\n}\n\n/** Everything a plugin is called with, and everything it can reach. */\nexport const CONTEXT_API: ContextApiEntry[] = [\n { path: \"input\", kind: \"variable\", info: \"What the steps before this one produced, keyed by step name.\" },\n { path: \"config\", kind: \"variable\", info: \"The fields somebody filled in on the canvas.\" },\n { path: \"context\", kind: \"variable\", info: \"Everything about the run: ids, storage, state, media, connections.\" },\n\n { path: \"context.workflowId\", kind: \"property\", info: \"The workflow this run belongs to.\" },\n { path: \"context.nodeId\", kind: \"property\", info: \"This step's id on the canvas.\" },\n { path: \"context.userId\", kind: \"property\", info: \"Whose run it is.\" },\n { path: \"context.executionId\", kind: \"property\", info: \"This run, distinct from every other run of the workflow.\" },\n { path: \"context.startedAt\", kind: \"property\", info: \"When the run started, as an ISO string.\" },\n { path: \"context.secrets\", kind: \"property\", info: \"Values the plugin was published with. Never the user's credentials.\" },\n\n {\n path: \"context.storage.put\",\n kind: \"method\",\n signature: \"(path, data, contentType?) => Promise<StorageResult>\",\n info: \"Write a file to the account's storage. Data may be a string or bytes.\",\n },\n {\n path: \"context.storage.get\",\n kind: \"method\",\n signature: \"(path) => Promise<Uint8Array | null>\",\n info: \"Read a file back. null when it is not there.\",\n },\n { path: \"context.storage.delete\", kind: \"method\", signature: \"(path) => Promise<void>\", info: \"Remove a file.\" },\n {\n path: \"context.storage.list\",\n kind: \"method\",\n signature: \"(prefix?) => Promise<{ files, totalSize }>\",\n info: \"Everything under a prefix, or everything.\",\n },\n {\n path: \"context.storage.head\",\n kind: \"method\",\n signature: \"(path) => Promise<{ size, contentType } | null>\",\n info: \"Size and content type without moving the bytes.\",\n },\n {\n path: \"context.storage.signedUrl\",\n kind: \"method\",\n signature: \"(path, expiresInSeconds?) => Promise<string | null>\",\n info: \"A link somebody else can fetch the file from, for a few minutes. For APIs that pull rather than take bytes.\",\n },\n {\n path: \"context.storage.download\",\n kind: \"method\",\n signature: \"(url, path, contentType?) => Promise<StorageResult>\",\n info: \"Pull a URL straight into storage. The bytes never cross this step, so a large file costs the run nothing.\",\n conditional: \"Only when the download Worker is configured on the server.\",\n },\n\n {\n path: \"context.state.get\",\n kind: \"method\",\n signature: \"(key) => Promise<unknown>\",\n info: \"A value this workflow stored on an earlier run. null when never set.\",\n },\n {\n path: \"context.state.set\",\n kind: \"method\",\n signature: \"(key, value, { ttlSeconds }?) => Promise<void>\",\n info: \"Remember something between runs \u2014 a cursor, a last-seen id, a counter.\",\n },\n { path: \"context.state.delete\", kind: \"method\", signature: \"(key) => Promise<void>\", info: \"Forget one key.\" },\n {\n path: \"context.state.list\",\n kind: \"method\",\n signature: \"(prefix?) => Promise<{ keys }>\",\n info: \"Which keys this workflow has stored.\",\n },\n\n {\n path: \"context.media.run\",\n kind: \"method\",\n signature: \"(operation, params) => Promise<Record<string, unknown>>\",\n info: \"ffmpeg, by operation name. A plugin never builds a command line \u2014 the server does, one operation at a time.\",\n conditional: \"Only when the sandbox and storage are both configured.\",\n },\n\n {\n path: \"context.connections.get\",\n kind: \"method\",\n signature: \"(propertyName) => Promise<{ id, request }>\",\n info: \"One of the accounts this step was configured with. Takes your property name, not a connection id.\",\n conditional: \"Only when the step declares a `connection` property and an account was chosen.\",\n },\n {\n path: \"context.connections.get(...).request\",\n kind: \"method\",\n signature: \"({ path, method?, query?, headers?, body? }) => Promise<{ ok, status, body }>\",\n info: \"A request to the provider, with the credential attached on the way past. Relative paths only \u2014 never a host, and there is no getToken().\",\n },\n\n { path: \"module.exports.execute\", kind: \"method\", signature: \"(input, config, context) => ({ output, data })\", info: \"The entry point. Return which port to leave by and what to hand on.\" },\n { path: \"console.log\", kind: \"method\", info: \"Appears in the run's log panel. Not on stdout \u2014 the platform reads that.\" },\n { path: \"console.error\", kind: \"method\", info: \"Appears in the run's log panel, marked as an error.\" },\n]\n\n/**\n * The globals a plugin does NOT get, and what to reach for instead.\n *\n * Worth offering in an editor as much as the API is: an author who types\n * `require('fs')` should be told at the keystroke rather than at the push.\n */\nexport const BLOCKED_GLOBALS: Array<{ name: string; instead: string }> = [\n { name: \"process\", instead: \"Ids and secrets are on `context`.\" },\n { name: \"fs\", instead: \"Use context.storage.\" },\n { name: \"child_process\", instead: \"Not available. For ffmpeg, use context.media.run.\" },\n { name: \"os\", instead: \"Not available.\" },\n { name: \"net\", instead: \"Use fetch.\" },\n { name: \"http\", instead: \"Use fetch.\" },\n { name: \"https\", instead: \"Use fetch.\" },\n { name: \"eval\", instead: \"Not available.\" },\n { name: \"Function\", instead: \"Not available as a constructor.\" },\n { name: \"Buffer\", instead: \"Use Uint8Array and TextEncoder/TextDecoder.\" },\n { name: \"__dirname\", instead: \"There is no meaningful filesystem.\" },\n]\n"],
5
+ "mappings": "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,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA,EACf;AAAA,EACA;AAAA,IACI,QAAQ;AAAA,IACR,WAAW;AAAA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",
6
+ "names": ["require", "module"]
7
+ }