UNPKG

vite-plugin-react-server

Version:
135 lines (132 loc) 16.2 kB
/** * vite-plugin-react-server * Copyright (c) Nico Brinkkemper * MIT License */ import 'node:worker_threads'; import { fileURLToPath } from 'node:url'; import { resolveConfig, preprocessCSS } from 'vite'; import { readFile } from 'node:fs/promises'; import { env } from '../utils/env.js'; import { hydrateUserOptions } from '../helpers/hydrateUserOptions.js'; import { toError } from '../error/toError.js'; import { sendMessage } from '../worker/sendMessage.js'; let loaderPort; let resolvedConfig; let userOptions; async function initialize(data) { loaderPort = data.port; resolvedConfig = data.resolvedConfig; const resolvedUserOptions = hydrateUserOptions(data.userOptions); if (resolvedUserOptions.type === "error") { if (loaderPort) { sendMessage( { type: "ERROR", id: "css-loader", error: resolvedUserOptions.error }, loaderPort ); } throw resolvedUserOptions.error; } userOptions = resolvedUserOptions.userOptions; if (loaderPort) { sendMessage( { type: "INITIALIZED_CSS_LOADER", id: data.id }, loaderPort ); } } async function processCssFile(filePath, inline) { try { const path = filePath.startsWith("file://") ? fileURLToPath(filePath) : filePath; const source = await readFile(path, "utf-8"); let moduleID = path; if (userOptions?.normalizer) { const [, value] = userOptions.normalizer(path); moduleID = userOptions.moduleID?.(value || path) || path; } let processed; try { const viteConfig = await resolveConfig( { ...resolvedConfig, env, // do-not re-resolve the config file as it would import the plugin again which we do not need. configFile: false }, "serve" ); processed = await preprocessCSS(source, path, viteConfig); } catch (error) { if (loaderPort) { sendMessage( { type: "ERROR", id: moduleID, error: toError(error) }, loaderPort ); } processed = { code: source, modules: {} }; } if (loaderPort) { sendMessage( { type: "CSS_FILE", id: moduleID, content: processed.code }, loaderPort ); } if (inline) { return { format: "module", source: processed.code, shortCircuit: true }; } return { format: "module", source: `export default ${JSON.stringify(processed.modules || {})};`, shortCircuit: true }; } catch (error) { const err = toError(error); if (loaderPort) { sendMessage( { type: "ERROR", id: "css-loader", error: err }, loaderPort ); } throw err; } } const load = async (url, context, defaultLoad) => { const [name, query] = url.split("?"); if (name.endsWith(".css")) { let isInline = query?.startsWith("inline") || query?.includes("&inline"); if (isInline && query.includes("inline=")) { const match = query.match(/inline=(1|true|0|false)/)?.[1]; isInline = match === "1" || match === "true"; } return processCssFile(url, isInline); } return defaultLoad(url, context); }; const resolve = (specifier, context, defaultResolve) => { return defaultResolve(specifier, context); }; export { initialize, load, loaderPort, resolve }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NzLWxvYWRlci5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGx1Z2luL2xvYWRlci9jc3MtbG9hZGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgTWVzc2FnZVBvcnQgfSBmcm9tIFwibm9kZTp3b3JrZXJfdGhyZWFkc1wiO1xuaW1wb3J0IHR5cGUgeyBMb2FkSG9vaywgUmVzb2x2ZUhvb2ssIE1vZHVsZUZvcm1hdCB9IGZyb20gXCJub2RlOm1vZHVsZVwiO1xuaW1wb3J0IHR5cGUge1xuICBSZXNvbHZlZFVzZXJPcHRpb25zLFxuICBTZXJpYWxpemVkUmVzb2x2ZWRDb25maWcsXG4gIFNlcmlhbGl6ZWRVc2VyT3B0aW9ucyxcbn0gZnJvbSBcIi4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSBcIm5vZGU6dXJsXCI7XG5pbXBvcnQgeyBwcmVwcm9jZXNzQ1NTLCByZXNvbHZlQ29uZmlnIH0gZnJvbSBcInZpdGVcIjtcbmltcG9ydCB7IHJlYWRGaWxlIH0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IGVudiB9IGZyb20gXCIuLi91dGlscy9lbnYuanNcIjtcbmltcG9ydCB0eXBlIHtcbiAgQ3NzRmlsZU1lc3NhZ2UsXG4gIEluaXRpYWxpemVkQ3NzTG9hZGVyTWVzc2FnZSxcbn0gZnJvbSBcIi4uL3dvcmtlci9yc2MvdHlwZXMuanNcIjtcbmltcG9ydCB7IGh5ZHJhdGVVc2VyT3B0aW9ucyB9IGZyb20gXCIuLi9oZWxwZXJzL2h5ZHJhdGVVc2VyT3B0aW9ucy5qc1wiO1xuaW1wb3J0IHsgdG9FcnJvciB9IGZyb20gXCIuLi9lcnJvci90b0Vycm9yLmpzXCI7XG5pbXBvcnQgeyBzZW5kTWVzc2FnZSB9IGZyb20gXCIuLi93b3JrZXIvc2VuZE1lc3NhZ2UuanNcIjtcbmltcG9ydCB0eXBlIHsgRXJyb3JNZXNzYWdlIH0gZnJvbSBcIi4uL3dvcmtlci90eXBlcy5qc1wiO1xuXG4vKipcbiAqIEdsb2JhbCBwb3J0IGZvciBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlIG1haW4gdGhyZWFkIGFuZCB0aGUgQ1NTIGxvYWRlci5cbiAqIFRoaXMgcG9ydCBpcyB1c2VkIHRvIHNlbmQgQ1NTIGZpbGUgcmVxdWVzdHMgYW5kIHJlY2VpdmUgcmVzcG9uc2VzLlxuICovXG5leHBvcnQgbGV0IGxvYWRlclBvcnQ6IE1lc3NhZ2VQb3J0IHwgdW5kZWZpbmVkO1xuXG5sZXQgcmVzb2x2ZWRDb25maWc6IFNlcmlhbGl6ZWRSZXNvbHZlZENvbmZpZyB8IG51bGw7XG5sZXQgdXNlck9wdGlvbnM6IFJlc29sdmVkVXNlck9wdGlvbnMgfCB1bmRlZmluZWQ7XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgdGhlIENTUyBsb2FkZXIgd2l0aCB0aGUgbmVjZXNzYXJ5IGNvbW11bmljYXRpb24gY2hhbm5lbHMuXG4gKiBTZXRzIHVwIG1lc3NhZ2UgaGFuZGxlcnMgZm9yIENTUyBmaWxlIHJlcXVlc3RzIGFuZCByZXNwb25zZXMuXG4gKlxuICogQHBhcmFtIGRhdGEgLSBDb25maWd1cmF0aW9uIGRhdGEgZm9yIHRoZSBDU1MgbG9hZGVyXG4gKiBAcGFyYW0gZGF0YS5wb3J0IC0gVGhlIG1lc3NhZ2UgcG9ydCBmb3IgY29tbXVuaWNhdGlvblxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5pdGlhbGl6ZShkYXRhOiB7XG4gIGlkOiBzdHJpbmc7XG4gIHBvcnQ6IE1lc3NhZ2VQb3J0O1xuICByZXNvbHZlZENvbmZpZzogU2VyaWFsaXplZFJlc29sdmVkQ29uZmlnO1xuICB1c2VyT3B0aW9uczogU2VyaWFsaXplZFVzZXJPcHRpb25zO1xufSkge1xuICBsb2FkZXJQb3J0ID0gZGF0YS5wb3J0O1xuICByZXNvbHZlZENvbmZpZyA9IGRhdGEucmVzb2x2ZWRDb25maWc7XG4gIGNvbnN0IHJlc29sdmVkVXNlck9wdGlvbnMgPSBoeWRyYXRlVXNlck9wdGlvbnMoZGF0YS51c2VyT3B0aW9ucyk7XG4gIGlmIChyZXNvbHZlZFVzZXJPcHRpb25zLnR5cGUgPT09IFwiZXJyb3JcIikge1xuICAgIGlmIChsb2FkZXJQb3J0KSB7XG4gICAgICBzZW5kTWVzc2FnZShcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwiRVJST1JcIixcbiAgICAgICAgICBpZDogXCJjc3MtbG9hZGVyXCIsXG4gICAgICAgICAgZXJyb3I6IHJlc29sdmVkVXNlck9wdGlvbnMuZXJyb3IsXG4gICAgICAgIH0gc2F0aXNmaWVzIEVycm9yTWVzc2FnZSxcbiAgICAgICAgbG9hZGVyUG9ydFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhyb3cgcmVzb2x2ZWRVc2VyT3B0aW9ucy5lcnJvcjtcbiAgfVxuXG4gIC8vIFVzZSB0aGUgaHlkcmF0ZWQgdXNlciBvcHRpb25zIGRpcmVjdGx5IChpbmNsdWRlcyByZWNyZWF0ZWQgZnVuY3Rpb25zKVxuICB1c2VyT3B0aW9ucyA9IHJlc29sdmVkVXNlck9wdGlvbnMudXNlck9wdGlvbnM7XG5cbiAgaWYgKGxvYWRlclBvcnQpIHtcbiAgICBzZW5kTWVzc2FnZShcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJJTklUSUFMSVpFRF9DU1NfTE9BREVSXCIsXG4gICAgICAgIGlkOiBkYXRhLmlkLFxuICAgICAgfSBzYXRpc2ZpZXMgSW5pdGlhbGl6ZWRDc3NMb2FkZXJNZXNzYWdlLFxuICAgICAgbG9hZGVyUG9ydFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBQcm9jZXNzZXMgYSBDU1MgZmlsZSByZXF1ZXN0LlxuICogU2VuZHMgYSByZXF1ZXN0IHRvIHRoZSBtYWluIHRocmVhZCBhbmQgd2FpdHMgZm9yIHRoZSBwcm9jZXNzZWQgQ1NTLlxuICpcbiAqIEBwYXJhbSBmaWxlUGF0aCAtIFRoZSBmaWxlIHN5c3RlbSBwYXRoIG9mIHRoZSBDU1MgZmlsZVxuICogQHBhcmFtIGNvbmZpZyAtIFRoZSBWaXRlIGNvbmZpZ1xuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHByb2Nlc3NlZCBDU1MgY29udGVudFxuICovXG5hc3luYyBmdW5jdGlvbiBwcm9jZXNzQ3NzRmlsZShcbiAgZmlsZVBhdGg6IHN0cmluZyxcbiAgaW5saW5lOiBib29sZWFuXG4pOiBQcm9taXNlPHsgZm9ybWF0OiBNb2R1bGVGb3JtYXQ7IHNvdXJjZTogc3RyaW5nOyBzaG9ydENpcmN1aXQ6IGJvb2xlYW4gfT4ge1xuICB0cnkge1xuICAgIC8vIENvbnZlcnQgZmlsZSBVUkwgdG8gcGF0aCBpZiBuZWVkZWRcbiAgICBjb25zdCBwYXRoID0gZmlsZVBhdGguc3RhcnRzV2l0aChcImZpbGU6Ly9cIilcbiAgICAgID8gZmlsZVVSTFRvUGF0aChmaWxlUGF0aClcbiAgICAgIDogZmlsZVBhdGg7XG5cbiAgICAvLyBQcm9jZXNzIENTUyB1c2luZyBWaXRlJ3MgcHJlcHJvY2Vzc0NTU1xuICAgIGNvbnN0IHNvdXJjZSA9IGF3YWl0IHJlYWRGaWxlKHBhdGgsIFwidXRmLThcIik7XG4gICAgbGV0IG1vZHVsZUlEID0gcGF0aDtcbiAgICBpZiAodXNlck9wdGlvbnM/Lm5vcm1hbGl6ZXIpIHtcbiAgICAgIGNvbnN0IFssIHZhbHVlXSA9IHVzZXJPcHRpb25zLm5vcm1hbGl6ZXIocGF0aCk7XG4gICAgICBtb2R1bGVJRCA9IHVzZXJPcHRpb25zLm1vZHVsZUlEPy4odmFsdWUgfHwgcGF0aCkgfHwgcGF0aDtcbiAgICB9XG4gICAgLy8gVHJ5IHRvIHByb2Nlc3MgQ1NTIHdpdGggcHJlcHJvY2Vzc0NTUywgZmFsbCBiYWNrIHRvIHJhdyBDU1MgaWYgY29uZmlnIGlzIGluY29tcGxldGVcbiAgICBsZXQgcHJvY2Vzc2VkOiB7IGNvZGU6IHN0cmluZzsgbW9kdWxlcz86IGFueSB9O1xuICAgIHRyeSB7XG4gICAgICAvLyBDcmVhdGUgYSBtaW5pbWFsIGNvbmZpZyB3aXRoIGVudmlyb25tZW50cyB0aGF0IHByZXByb2Nlc3NDU1MgZXhwZWN0c1xuICAgICAgY29uc3Qgdml0ZUNvbmZpZyA9IGF3YWl0IHJlc29sdmVDb25maWcoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5yZXNvbHZlZENvbmZpZyxcbiAgICAgICAgICBlbnY6IGVudixcbiAgICAgICAgICAvLyBkby1ub3QgcmUtcmVzb2x2ZSB0aGUgY29uZmlnIGZpbGUgYXMgaXQgd291bGQgaW1wb3J0IHRoZSBwbHVnaW4gYWdhaW4gd2hpY2ggd2UgZG8gbm90IG5lZWQuXG4gICAgICAgICAgY29uZmlnRmlsZTogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICAgIFwic2VydmVcIlxuICAgICAgKTtcblxuICAgICAgcHJvY2Vzc2VkID0gYXdhaXQgcHJlcHJvY2Vzc0NTUyhzb3VyY2UsIHBhdGgsIHZpdGVDb25maWcpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBJZiBwcmVwcm9jZXNzQ1NTIGZhaWxzLCBmYWxsIGJhY2sgdG8gcmF3IENTU1xuICAgICAgaWYgKGxvYWRlclBvcnQpIHtcbiAgICAgICAgc2VuZE1lc3NhZ2UoXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJFUlJPUlwiLFxuICAgICAgICAgICAgaWQ6IG1vZHVsZUlELFxuICAgICAgICAgICAgZXJyb3I6IHRvRXJyb3IoZXJyb3IpLFxuICAgICAgICAgIH0gc2F0aXNmaWVzIEVycm9yTWVzc2FnZSxcbiAgICAgICAgICBsb2FkZXJQb3J0XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBwcm9jZXNzZWQgPSB7IGNvZGU6IHNvdXJjZSwgbW9kdWxlczoge30gfTtcbiAgICB9XG5cbiAgICAvLyBJZiB3ZSdyZSBwcm9jZXNzaW5nIENTUyBmb3IgYSBzcGVjaWZpYyBwYWdlLCBub3RpZnkgdGhlIG1lc3NhZ2UgaGFuZGxlclxuICAgIGlmIChsb2FkZXJQb3J0KSB7XG4gICAgICBzZW5kTWVzc2FnZShcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwiQ1NTX0ZJTEVcIixcbiAgICAgICAgICBpZDogbW9kdWxlSUQsXG4gICAgICAgICAgY29udGVudDogcHJvY2Vzc2VkLmNvZGUsXG4gICAgICAgIH0gc2F0aXNmaWVzIENzc0ZpbGVNZXNzYWdlLFxuICAgICAgICBsb2FkZXJQb3J0XG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFJldHVybiBhIG1vZHVsZSB0aGF0IGNhbiBiZSB1c2VkIGJ5IFJlYWN0IGNvbXBvbmVudHNcbiAgICBpZiAoaW5saW5lKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb3JtYXQ6IFwibW9kdWxlXCIsXG4gICAgICAgIHNvdXJjZTogcHJvY2Vzc2VkLmNvZGUsXG4gICAgICAgIHNob3J0Q2lyY3VpdDogdHJ1ZSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBmb3JtYXQ6IFwibW9kdWxlXCIsXG4gICAgICBzb3VyY2U6IGBleHBvcnQgZGVmYXVsdCAke0pTT04uc3RyaW5naWZ5KHByb2Nlc3NlZC5tb2R1bGVzIHx8IHt9KX07YCxcbiAgICAgIHNob3J0Q2lyY3VpdDogdHJ1ZSxcbiAgICB9O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnN0IGVyciA9IHRvRXJyb3IoZXJyb3IpO1xuICAgIGlmIChsb2FkZXJQb3J0KSB7XG4gICAgICBzZW5kTWVzc2FnZShcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwiRVJST1JcIixcbiAgICAgICAgICBpZDogXCJjc3MtbG9hZGVyXCIsXG4gICAgICAgICAgZXJyb3I6IGVycixcbiAgICAgICAgfSBzYXRpc2ZpZXMgRXJyb3JNZXNzYWdlLFxuICAgICAgICBsb2FkZXJQb3J0XG4gICAgICApO1xuICAgIH1cbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuLyoqXG4gKiBWaXRlJ3MgbG9hZCBob29rIGltcGxlbWVudGF0aW9uIGZvciBDU1MgZmlsZXMuXG4gKiBIYW5kbGVzIENTUyBmaWxlIGxvYWRpbmcgcmVxdWVzdHMgYW5kIHJldHVybnMgYSBwbGFjZWhvbGRlciBtb2R1bGUuXG4gKiBUaGUgYWN0dWFsIENTUyBjb250ZW50IGlzIHByb2Nlc3NlZCBpbiB0aGUgbWFpbiB0aHJlYWQuXG4gKlxuICogQHBhcmFtIHVybCAtIFRoZSBVUkwgb2YgdGhlIG1vZHVsZSB0byBsb2FkXG4gKiBAcGFyYW0gY29udGV4dCAtIFRoZSBsb2FkIGhvb2sgY29udGV4dFxuICogQHBhcmFtIGRlZmF1bHRMb2FkIC0gVGhlIGRlZmF1bHQgbG9hZCBmdW5jdGlvblxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIG1vZHVsZSBjb250ZW50XG4gKi9cbmV4cG9ydCBjb25zdCBsb2FkOiBMb2FkSG9vayA9IGFzeW5jICh1cmwsIGNvbnRleHQsIGRlZmF1bHRMb2FkKSA9PiB7XG4gIGNvbnN0IFtuYW1lLCBxdWVyeV0gPSB1cmwuc3BsaXQoXCI/XCIpO1xuICBpZiAobmFtZS5lbmRzV2l0aChcIi5jc3NcIikpIHtcbiAgICBsZXQgaXNJbmxpbmUgPSBxdWVyeT8uc3RhcnRzV2l0aChcImlubGluZVwiKSB8fCBxdWVyeT8uaW5jbHVkZXMoXCImaW5saW5lXCIpO1xuICAgIGlmIChpc0lubGluZSAmJiBxdWVyeS5pbmNsdWRlcygnaW5saW5lPScpKSB7XG4gICAgICAvLyBoYW5kbGUgPSB0cnVlL2ZhbHNlXG4gICAgICBjb25zdCBtYXRjaCA9IHF1ZXJ5Lm1hdGNoKC9pbmxpbmU9KDF8dHJ1ZXwwfGZhbHNlKS8pPy5bMV07XG4gICAgICBpc0lubGluZSA9IG1hdGNoID09PSAnMScgfHwgbWF0Y2ggPT09ICd0cnVlJztcbiAgICB9XG4gICAgcmV0dXJuIHByb2Nlc3NDc3NGaWxlKHVybCwgaXNJbmxpbmUpO1xuICB9XG5cbiAgcmV0dXJuIGRlZmF1bHRMb2FkKHVybCwgY29udGV4dCk7XG59O1xuXG4vKipcbiAqIFZpdGUncyByZXNvbHZlIGhvb2sgaW1wbGVtZW50YXRpb24uXG4gKiBIYW5kbGVzIG1vZHVsZSByZXNvbHV0aW9uIGR1cmluZyBkZXZlbG9wbWVudC5cbiAqXG4gKiBAcGFyYW0gc3BlY2lmaWVyIC0gVGhlIG1vZHVsZSBzcGVjaWZpZXIgdG8gcmVzb2x2ZVxuICogQHBhcmFtIGNvbnRleHQgLSBUaGUgcmVzb2x2ZSBob29rIGNvbnRleHRcbiAqIEBwYXJhbSBkZWZhdWx0UmVzb2x2ZSAtIFRoZSBkZWZhdWx0IHJlc29sdmUgZnVuY3Rpb25cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSByZXNvbHZlZCBtb2R1bGVcbiAqL1xuZXhwb3J0IGNvbnN0IHJlc29sdmU6IFJlc29sdmVIb29rID0gKHNwZWNpZmllciwgY29udGV4dCwgZGVmYXVsdFJlc29sdmUpID0+IHtcbiAgcmV0dXJuIGRlZmF1bHRSZXNvbHZlKHNwZWNpZmllciwgY29udGV4dCk7XG59O1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBd0JXLElBQUE7QUFFWCxJQUFJLGNBQUE7QUFDSixJQUFJLFdBQUE7QUFTSixlQUFzQixXQUFXLElBSzlCLEVBQUE7QUFDRCxFQUFBLFVBQUEsR0FBYSxJQUFLLENBQUEsSUFBQTtBQUNsQixFQUFBLGNBQUEsR0FBaUIsSUFBSyxDQUFBLGNBQUE7QUFDdEIsRUFBTSxNQUFBLG1CQUFBLEdBQXNCLGtCQUFtQixDQUFBLElBQUEsQ0FBSyxXQUFXLENBQUE7QUFDL0QsRUFBSSxJQUFBLG1CQUFBLENBQW9CLFNBQVMsT0FBUyxFQUFBO0FBQ3hDLElBQUEsSUFBSSxVQUFZLEVBQUE7QUFDZCxNQUFBLFdBQUE7QUFBQSxRQUNFO0FBQUEsVUFDRSxJQUFNLEVBQUEsT0FBQTtBQUFBLFVBQ04sRUFBSSxFQUFBLFlBQUE7QUFBQSxVQUNKLE9BQU8sbUJBQW9CLENBQUE7QUFBQSxTQUM3QjtBQUFBLFFBQ0E7QUFBQSxPQUNGO0FBQUE7QUFFRixJQUFBLE1BQU0sbUJBQW9CLENBQUEsS0FBQTtBQUFBO0FBSTVCLEVBQUEsV0FBQSxHQUFjLG1CQUFvQixDQUFBLFdBQUE7QUFFbEMsRUFBQSxJQUFJLFVBQVksRUFBQTtBQUNkLElBQUEsV0FBQTtBQUFBLE1BQ0U7QUFBQSxRQUNFLElBQU0sRUFBQSx3QkFBQTtBQUFBLFFBQ04sSUFBSSxJQUFLLENBQUE7QUFBQSxPQUNYO0FBQUEsTUFDQTtBQUFBLEtBQ0Y7QUFBQTtBQUVKO0FBVUEsZUFBZSxjQUFBLENBQ2IsVUFDQSxNQUMwRSxFQUFBO0FBQzFFLEVBQUksSUFBQTtBQUVGLElBQUEsTUFBTSxPQUFPLFFBQVMsQ0FBQSxVQUFBLENBQVcsU0FBUyxDQUN0QyxHQUFBLGFBQUEsQ0FBYyxRQUFRLENBQ3RCLEdBQUEsUUFBQTtBQUdKLElBQUEsTUFBTSxNQUFTLEdBQUEsTUFBTSxRQUFTLENBQUEsSUFBQSxFQUFNLE9BQU8sQ0FBQTtBQUMzQyxJQUFBLElBQUksUUFBVyxHQUFBLElBQUE7QUFDZixJQUFBLElBQUksYUFBYSxVQUFZLEVBQUE7QUFDM0IsTUFBQSxNQUFNLEdBQUcsS0FBSyxDQUFJLEdBQUEsV0FBQSxDQUFZLFdBQVcsSUFBSSxDQUFBO0FBQzdDLE1BQUEsUUFBQSxHQUFXLFdBQVksQ0FBQSxRQUFBLEdBQVcsS0FBUyxJQUFBLElBQUksQ0FBSyxJQUFBLElBQUE7QUFBQTtBQUd0RCxJQUFJLElBQUEsU0FBQTtBQUNKLElBQUksSUFBQTtBQUVGLE1BQUEsTUFBTSxhQUFhLE1BQU0sYUFBQTtBQUFBLFFBQ3ZCO0FBQUEsVUFDRSxHQUFHLGNBQUE7QUFBQSxVQUNILEdBQUE7QUFBQTtBQUFBLFVBRUEsVUFBWSxFQUFBO0FBQUEsU0FDZDtBQUFBLFFBQ0E7QUFBQSxPQUNGO0FBRUEsTUFBQSxTQUFBLEdBQVksTUFBTSxhQUFBLENBQWMsTUFBUSxFQUFBLElBQUEsRUFBTSxVQUFVLENBQUE7QUFBQSxhQUNqRCxLQUFPLEVBQUE7QUFFZCxNQUFBLElBQUksVUFBWSxFQUFBO0FBQ2QsUUFBQSxXQUFBO0FBQUEsVUFDRTtBQUFBLFlBQ0UsSUFBTSxFQUFBLE9BQUE7QUFBQSxZQUNOLEVBQUksRUFBQSxRQUFBO0FBQUEsWUFDSixLQUFBLEVBQU8sUUFBUSxLQUFLO0FBQUEsV0FDdEI7QUFBQSxVQUNBO0FBQUEsU0FDRjtBQUFBO0FBRUYsTUFBQSxTQUFBLEdBQVksRUFBRSxJQUFBLEVBQU0sTUFBUSxFQUFBLE9BQUEsRUFBUyxFQUFHLEVBQUE7QUFBQTtBQUkxQyxJQUFBLElBQUksVUFBWSxFQUFBO0FBQ2QsTUFBQSxXQUFBO0FBQUEsUUFDRTtBQUFBLFVBQ0UsSUFBTSxFQUFBLFVBQUE7QUFBQSxVQUNOLEVBQUksRUFBQSxRQUFBO0FBQUEsVUFDSixTQUFTLFNBQVUsQ0FBQTtBQUFBLFNBQ3JCO0FBQUEsUUFDQTtBQUFBLE9BQ0Y7QUFBQTtBQUlGLElBQUEsSUFBSSxNQUFRLEVBQUE7QUFDVixNQUFPLE9BQUE7QUFBQSxRQUNMLE1BQVEsRUFBQSxRQUFBO0FBQUEsUUFDUixRQUFRLFNBQVUsQ0FBQSxJQUFBO0FBQUEsUUFDbEIsWUFBYyxFQUFBO0FBQUEsT0FDaEI7QUFBQTtBQUVGLElBQU8sT0FBQTtBQUFBLE1BQ0wsTUFBUSxFQUFBLFFBQUE7QUFBQSxNQUNSLE1BQUEsRUFBUSxrQkFBa0IsSUFBSyxDQUFBLFNBQUEsQ0FBVSxVQUFVLE9BQVcsSUFBQSxFQUFFLENBQUMsQ0FBQSxDQUFBLENBQUE7QUFBQSxNQUNqRSxZQUFjLEVBQUE7QUFBQSxLQUNoQjtBQUFBLFdBQ08sS0FBTyxFQUFBO0FBQ2QsSUFBTSxNQUFBLEdBQUEsR0FBTSxRQUFRLEtBQUssQ0FBQTtBQUN6QixJQUFBLElBQUksVUFBWSxFQUFBO0FBQ2QsTUFBQSxXQUFBO0FBQUEsUUFDRTtBQUFBLFVBQ0UsSUFBTSxFQUFBLE9BQUE7QUFBQSxVQUNOLEVBQUksRUFBQSxZQUFBO0FBQUEsVUFDSixLQUFPLEVBQUE7QUFBQSxTQUNUO0FBQUEsUUFDQTtBQUFBLE9BQ0Y7QUFBQTtBQUVGLElBQU0sTUFBQSxHQUFBO0FBQUE7QUFFVjtBQVlPLE1BQU0sSUFBaUIsR0FBQSxPQUFPLEdBQUssRUFBQSxPQUFBLEVBQVMsV0FBZ0IsS0FBQTtBQUNqRSxFQUFBLE1BQU0sQ0FBQyxJQUFNLEVBQUEsS0FBSyxDQUFJLEdBQUEsR0FBQSxDQUFJLE1BQU0sR0FBRyxDQUFBO0FBQ25DLEVBQUksSUFBQSxJQUFBLENBQUssUUFBUyxDQUFBLE1BQU0sQ0FBRyxFQUFBO0FBQ3pCLElBQUEsSUFBSSxXQUFXLEtBQU8sRUFBQSxVQUFBLENBQVcsUUFBUSxDQUFLLElBQUEsS0FBQSxFQUFPLFNBQVMsU0FBUyxDQUFBO0FBQ3ZFLElBQUEsSUFBSSxRQUFZLElBQUEsS0FBQSxDQUFNLFFBQVMsQ0FBQSxTQUFTLENBQUcsRUFBQTtBQUV6QyxNQUFBLE1BQU0sS0FBUSxHQUFBLEtBQUEsQ0FBTSxLQUFNLENBQUEseUJBQXlCLElBQUksQ0FBQyxDQUFBO0FBQ3hELE1BQVcsUUFBQSxHQUFBLEtBQUEsS0FBVSxPQUFPLEtBQVUsS0FBQSxNQUFBO0FBQUE7QUFFeEMsSUFBTyxPQUFBLGNBQUEsQ0FBZSxLQUFLLFFBQVEsQ0FBQTtBQUFBO0FBR3JDLEVBQU8sT0FBQSxXQUFBLENBQVksS0FBSyxPQUFPLENBQUE7QUFDakM7QUFXTyxNQUFNLE9BQXVCLEdBQUEsQ0FBQyxTQUFXLEVBQUEsT0FBQSxFQUFTLGNBQW1CLEtBQUE7QUFDMUUsRUFBTyxPQUFBLGNBQUEsQ0FBZSxXQUFXLE9BQU8sQ0FBQTtBQUMxQzs7OzsifQ==