vite-plugin-react-server
Version:
Vite plugin for React Server Components (RSC)
133 lines (130 loc) • 18.2 kB
JavaScript
/**
* vite-plugin-react-server
* Copyright (c) Nico Brinkkemper
* MIT License
*/
import { resolveUrlOption } from '../config/resolveUrlOption.js';
import { createLogger } from 'vite';
const getRouteFiles = async (route, autoDiscoveredFiles, userOptions, logger = createLogger()) => {
if (autoDiscoveredFiles.urlMap.has(route)) {
const cached = autoDiscoveredFiles.urlMap.get(route);
const { page, props: props2 } = cached;
let { root: root2, html: html2 } = cached;
if (userOptions.verbose) {
logger.info(`[getRouteFiles] Found cached route: ${route}, page: "${page}", props: "${props2}"`);
}
if (!page) {
if (userOptions.verbose) {
logger.info("[getRouteFiles] Cached page is undefined, falling back to resolveUrlOption");
}
} else {
if (userOptions.verbose) {
if (page && page !== "") {
logger.info(`[getRouteFiles] Page: "${page}"`);
}
if (props2 && props2 !== "") {
logger.info(`[getRouteFiles] Props: "${props2}"`);
}
if (root2 && root2 !== "") {
logger.info(`[getRouteFiles] Root: "${root2}"`);
}
if (html2 && html2 !== "") {
logger.info(`[getRouteFiles] Html: "${html2}"`);
}
}
if (!root2 && userOptions.Root) {
const {
type: rootType,
error: rootError,
Root
} = await resolveUrlOption(userOptions, "Root", route);
if (rootType === "error") {
return { type: "error", error: rootError };
}
root2 = Root;
autoDiscoveredFiles.urlMap.set(route, { page, props: props2, root: root2, html: html2 });
}
if (!html2 && userOptions.Html) {
const {
type: htmlType,
error: htmlError,
Html
} = await resolveUrlOption(userOptions, "Html", route);
if (htmlType === "error") {
return { type: "error", error: htmlError };
}
html2 = Html;
autoDiscoveredFiles.urlMap.set(route, { page, props: props2, root: root2, html: html2 });
}
return { type: "success", page, props: props2, root: root2, html: html2 };
}
}
if (userOptions.verbose) {
logger.info("[getRouteFiles] Not in urlMap, resolving Page option");
}
const { type, error, Page } = await resolveUrlOption(
userOptions,
"Page",
route
);
if (type === "error") {
return { type: "error", error };
}
if (userOptions.verbose) {
logger.info(`[getRouteFiles] Page resolved to: ${Page}`);
}
let root;
let html;
if (userOptions.Root) {
const {
type: rootType,
error: rootError,
Root
} = await resolveUrlOption(userOptions, "Root", route);
if (rootType === "error") {
return { type: "error", error: rootError };
}
root = Root;
}
if (userOptions.Html) {
const {
type: htmlType,
error: htmlError,
Html
} = await resolveUrlOption(userOptions, "Html", route);
if (htmlType === "error") {
return { type: "error", error: htmlError };
}
html = Html;
}
if (!userOptions.props) {
if (userOptions.verbose) {
logger.info("[getRouteFiles] No props option, returning page only");
}
autoDiscoveredFiles.urlMap.set(route, {
page: Page,
props: void 0,
root,
html
});
return { type: "success", page: Page, props: void 0, root, html };
}
if (userOptions.verbose) {
logger.info("[getRouteFiles] Resolving props option");
}
const {
type: propsType,
error: propsError,
props
} = await resolveUrlOption(userOptions, "props", route);
if (propsType === "error") {
return { type: "error", error: propsError };
}
if (userOptions.verbose) {
logger.info(`[getRouteFiles] Props resolved to: ${props}`);
}
autoDiscoveredFiles.urlMap.set(route, { page: Page, props, root, html });
return { type: "success", page: Page, props, root, html };
};
export { getRouteFiles };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0Um91dGVGaWxlcy5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGx1Z2luL2hlbHBlcnMvZ2V0Um91dGVGaWxlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFBhZ2VOYW1lLCBQcm9wc05hbWUsIFJlc29sdmVkVXNlck9wdGlvbnMgfSBmcm9tIFwiLi4vdHlwZXMuanNcIjtcblxuaW1wb3J0IHsgcmVzb2x2ZVVybE9wdGlvbiB9IGZyb20gXCIuLi9jb25maWcvcmVzb2x2ZVVybE9wdGlvbi5qc1wiO1xuaW1wb3J0IHR5cGUgeyBBdXRvRGlzY292ZXJlZEZpbGVzIH0gZnJvbSBcIi4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tIFwidml0ZVwiO1xuXG50eXBlIEdldFJvdXRlRmlsZXNTdWNjZXNzID0ge1xuICB0eXBlOiBcInN1Y2Nlc3NcIjtcbiAgcGFnZTogc3RyaW5nO1xuICBwcm9wcz86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcm9vdD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgaHRtbD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbn07XG5cbnR5cGUgR2V0Um91dGVGaWxlc0Vycm9yID0ge1xuICB0eXBlOiBcImVycm9yXCI7XG4gIGVycm9yOiB1bmtub3duO1xufTtcblxuLyoqXG4gKiBHZXRzIHBhZ2UgYW5kIHByb3BzIGZpbGUgcGF0aHMgZm9yIGEgcm91dGUgdXNpbmcgY2FjaGVkIGRpc2NvdmVyeSArIGR5bmFtaWMgZmFsbGJhY2suXG4gKlxuICogIyMgUlVOVElNRSBSRVNPTFVUSU9OIFNUUkFURUdZXG4gKiBUaGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgYSB0d28tdGllciBsb29rdXAgc3RyYXRlZ3k6XG4gKlxuICogMS4gKipGQVNUIFBBVEgqKjogQ2hlY2sgYXV0by1kaXNjb3ZlcmVkIHVybE1hcCBjYWNoZSBmaXJzdFxuICogICAgLSBCdWlsdCBieSByZXNvbHZlQnVpbGRQYWdlcy50cyBmcm9tIGJ1aWxkLnBhZ2VzIGFycmF5XG4gKiAgICAtIE8oMSkgbG9va3VwLCBubyBJL08sIHZlcnkgZmFzdFxuICogICAgLSBVc2VkIGZvciByb3V0ZXMgdGhhdCB3ZXJlIHByZS1kaXNjb3ZlcmVkIGF0IGJ1aWxkIHRpbWVcbiAqXG4gKiAyLiAqKkZBTExCQUNLIFBBVEgqKjogRHluYW1pYyByZXNvbHV0aW9uIHZpYSByZXNvbHZlVXJsT3B0aW9uXG4gKiAgICAtIE9ubHkgd2hlbiByb3V0ZSBub3QgZm91bmQgaW4gdXJsTWFwIGNhY2hlXG4gKiAgICAtIENhbGxzIFBhZ2UvcHJvcHMgcmVzb2x2ZXIgZnVuY3Rpb25zIHdpdGggdGhlIHJvdXRlIFVSTFxuICogICAgLSBFbmFibGVzIGR5bmFtaWMgcm91dGluZyBiZXlvbmQgd2hhdCdzIGluIGJ1aWxkLnBhZ2VzXG4gKiAgICAtIFNsb3dlciBkdWUgdG8gZnVuY3Rpb24gY2FsbHMgKyBwb3RlbnRpYWwgSS9PXG4gKlxuICogIyMgQXV0by1EaXNjb3ZlcnkgSW50ZWdyYXRpb246XG4gKiBSZXN1bHRzIGZyb20gZHluYW1pYyByZXNvbHV0aW9uIGFyZSBjYWNoZWQgYmFjayBpbnRvIGF1dG9EaXNjb3ZlcmVkRmlsZXMudXJsTWFwXG4gKiBmb3IgZnV0dXJlIHJlcXVlc3RzLCBzbyBlYWNoIHJvdXRlIGlzIG9ubHkgcmVzb2x2ZWQgZHluYW1pY2FsbHkgb25jZS5cbiAqXG4gKiAjIyBGdW5jdGlvbiBSZXNvbHZlciBTdXBwb3J0OlxuICogVGhpcyBpcyB3aGVyZSByb3V0ZXIgZnVuY3Rpb25zIGxpa2UgYCh1cmwpID0+IFwiLi9zcmMvcGFnZXMvXCIgKyB1cmwgKyBcIi50c3hcImBcbiAqIGFyZSBhY3R1YWxseSBjYWxsZWQuIFRoZSBkeW5hbWljIG5hdHVyZSBhbGxvd3MgcnVudGltZSByb3V0ZSByZXNvbHV0aW9uIGJ1dFxuICogY3JlYXRlcyBjb21wbGV4aXR5IGZvciBzdGF0aWMgYW5hbHlzaXMgYW5kIGJ1aWxkLXRpbWUgZGlzY292ZXJ5LlxuICovXG5leHBvcnQgY29uc3QgZ2V0Um91dGVGaWxlcyA9IGFzeW5jIChcbiAgcm91dGU6IHN0cmluZyxcbiAgYXV0b0Rpc2NvdmVyZWRGaWxlczogQXV0b0Rpc2NvdmVyZWRGaWxlcyxcbiAgdXNlck9wdGlvbnM6IFBpY2s8XG4gICAgUmVzb2x2ZWRVc2VyT3B0aW9ucyxcbiAgICB8IFBhZ2VOYW1lXG4gICAgfCBQcm9wc05hbWVcbiAgICB8IFwiUm9vdFwiXG4gICAgfCBcIkh0bWxcIlxuICAgIHwgXCJtb2R1bGVCYXNlUGF0aFwiXG4gICAgfCBcInZlcmJvc2VcIlxuICAgIHwgXCJwYWdlRXhwb3J0TmFtZVwiXG4gICAgfCBcInByb3BzRXhwb3J0TmFtZVwiXG4gICAgfCBcInJvb3RFeHBvcnROYW1lXCJcbiAgICB8IFwiaHRtbEV4cG9ydE5hbWVcIlxuICA+LFxuICBsb2dnZXIgPSBjcmVhdGVMb2dnZXIoKVxuKTogUHJvbWlzZTxHZXRSb3V0ZUZpbGVzU3VjY2VzcyB8IEdldFJvdXRlRmlsZXNFcnJvcj4gPT4ge1xuICBpZiAoYXV0b0Rpc2NvdmVyZWRGaWxlcy51cmxNYXAuaGFzKHJvdXRlKSkge1xuICAgIGNvbnN0IGNhY2hlZCA9IGF1dG9EaXNjb3ZlcmVkRmlsZXMudXJsTWFwLmdldChyb3V0ZSkhO1xuICAgIGNvbnN0IHsgcGFnZSwgcHJvcHMgfSA9IGNhY2hlZDtcbiAgICBsZXQgeyByb290LCBodG1sIH0gPSBjYWNoZWQ7XG5cbiAgICBpZiAodXNlck9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgbG9nZ2VyLmluZm8oYFtnZXRSb3V0ZUZpbGVzXSBGb3VuZCBjYWNoZWQgcm91dGU6ICR7cm91dGV9LCBwYWdlOiBcIiR7cGFnZX1cIiwgcHJvcHM6IFwiJHtwcm9wc31cImApO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBjYWNoZWQgcGFnZSBpcyB1bmRlZmluZWQsIGZhbGwgYmFjayB0byByZXNvbHZlVXJsT3B0aW9uXG4gICAgaWYgKCFwYWdlKSB7XG4gICAgICBpZiAodXNlck9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICBsb2dnZXIuaW5mbyhcIltnZXRSb3V0ZUZpbGVzXSBDYWNoZWQgcGFnZSBpcyB1bmRlZmluZWQsIGZhbGxpbmcgYmFjayB0byByZXNvbHZlVXJsT3B0aW9uXCIpO1xuICAgICAgfVxuICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIHRoZSByZXNvbHZlVXJsT3B0aW9uIGxvZ2ljIGJlbG93XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh1c2VyT3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgIGlmIChwYWdlICYmIHBhZ2UgIT09IFwiXCIpIHtcbiAgICAgICAgICBsb2dnZXIuaW5mbyhgW2dldFJvdXRlRmlsZXNdIFBhZ2U6IFxcXCIke3BhZ2V9XFxcImApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wcyAmJiBwcm9wcyAhPT0gXCJcIikge1xuICAgICAgICAgIGxvZ2dlci5pbmZvKGBbZ2V0Um91dGVGaWxlc10gUHJvcHM6IFxcXCIke3Byb3BzfVxcXCJgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocm9vdCAmJiByb290ICE9PSBcIlwiKSB7XG4gICAgICAgICAgbG9nZ2VyLmluZm8oYFtnZXRSb3V0ZUZpbGVzXSBSb290OiBcXFwiJHtyb290fVxcXCJgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaHRtbCAmJiBodG1sICE9PSBcIlwiKSB7XG4gICAgICAgICAgbG9nZ2VyLmluZm8oYFtnZXRSb3V0ZUZpbGVzXSBIdG1sOiBcXFwiJHtodG1sfVxcXCJgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBGb3IgY2FjaGVkIHJvdXRlcywgd2Ugc3RpbGwgbmVlZCB0byByZXNvbHZlIFJvb3QgYW5kIEh0bWwgZHluYW1pY2FsbHkgaWYgdGhleSBhcmUgZnVuY3Rpb25zXG4gICAgICAvLyBhbmQgbm90IGFscmVhZHkgY2FjaGVkXG4gICAgICBpZiAoIXJvb3QgJiYgdXNlck9wdGlvbnMuUm9vdCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICB0eXBlOiByb290VHlwZSxcbiAgICAgICAgZXJyb3I6IHJvb3RFcnJvcixcbiAgICAgICAgUm9vdCxcbiAgICAgIH0gPSBhd2FpdCByZXNvbHZlVXJsT3B0aW9uKHVzZXJPcHRpb25zLCBcIlJvb3RcIiwgcm91dGUpO1xuICAgICAgaWYgKHJvb3RUeXBlID09PSBcImVycm9yXCIpIHtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJlcnJvclwiLCBlcnJvcjogcm9vdEVycm9yIH07XG4gICAgICB9XG4gICAgICByb290ID0gUm9vdDtcbiAgICAgIC8vIFVwZGF0ZSBjYWNoZSB3aXRoIHJlc29sdmVkIHJvb3QgcGF0aFxuICAgICAgYXV0b0Rpc2NvdmVyZWRGaWxlcy51cmxNYXAuc2V0KHJvdXRlLCB7IHBhZ2UsIHByb3BzLCByb290LCBodG1sIH0pO1xuICAgIH1cblxuICAgIGlmICghaHRtbCAmJiB1c2VyT3B0aW9ucy5IdG1sKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHR5cGU6IGh0bWxUeXBlLFxuICAgICAgICBlcnJvcjogaHRtbEVycm9yLFxuICAgICAgICBIdG1sLFxuICAgICAgfSA9IGF3YWl0IHJlc29sdmVVcmxPcHRpb24odXNlck9wdGlvbnMsIFwiSHRtbFwiLCByb3V0ZSk7XG4gICAgICBpZiAoaHRtbFR5cGUgPT09IFwiZXJyb3JcIikge1xuICAgICAgICByZXR1cm4geyB0eXBlOiBcImVycm9yXCIsIGVycm9yOiBodG1sRXJyb3IgfTtcbiAgICAgIH1cbiAgICAgIGh0bWwgPSBIdG1sO1xuICAgICAgLy8gVXBkYXRlIGNhY2hlIHdpdGggcmVzb2x2ZWQgaHRtbCBwYXRoXG4gICAgICBhdXRvRGlzY292ZXJlZEZpbGVzLnVybE1hcC5zZXQocm91dGUsIHsgcGFnZSwgcHJvcHMsIHJvb3QsIGh0bWwgfSk7XG4gICAgfVxuXG4gICAgICByZXR1cm4geyB0eXBlOiBcInN1Y2Nlc3NcIiwgcGFnZSwgcHJvcHMsIHJvb3QsIGh0bWwgfTtcbiAgICB9XG4gIH1cbiAgaWYgKHVzZXJPcHRpb25zLnZlcmJvc2UpIHtcbiAgICBsb2dnZXIuaW5mbyhcIltnZXRSb3V0ZUZpbGVzXSBOb3QgaW4gdXJsTWFwLCByZXNvbHZpbmcgUGFnZSBvcHRpb25cIik7XG4gIH1cbiAgY29uc3QgeyB0eXBlLCBlcnJvciwgUGFnZSB9ID0gYXdhaXQgcmVzb2x2ZVVybE9wdGlvbihcbiAgICB1c2VyT3B0aW9ucyxcbiAgICBcIlBhZ2VcIixcbiAgICByb3V0ZVxuICApO1xuICBpZiAodHlwZSA9PT0gXCJlcnJvclwiKSB7XG4gICAgcmV0dXJuIHsgdHlwZTogXCJlcnJvclwiLCBlcnJvciB9O1xuICB9XG4gIGlmICh1c2VyT3B0aW9ucy52ZXJib3NlKSB7XG4gICAgbG9nZ2VyLmluZm8oYFtnZXRSb3V0ZUZpbGVzXSBQYWdlIHJlc29sdmVkIHRvOiAke1BhZ2V9YCk7XG4gIH1cbiAgLy8gUmVzb2x2ZSBSb290IGFuZCBIdG1sIGNvbXBvbmVudHNcbiAgbGV0IHJvb3Q6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgbGV0IGh0bWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBpZiAodXNlck9wdGlvbnMuUm9vdCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHR5cGU6IHJvb3RUeXBlLFxuICAgICAgZXJyb3I6IHJvb3RFcnJvcixcbiAgICAgIFJvb3QsXG4gICAgfSA9IGF3YWl0IHJlc29sdmVVcmxPcHRpb24odXNlck9wdGlvbnMsIFwiUm9vdFwiLCByb3V0ZSk7XG4gICAgaWYgKHJvb3RUeXBlID09PSBcImVycm9yXCIpIHtcbiAgICAgIHJldHVybiB7IHR5cGU6IFwiZXJyb3JcIiwgZXJyb3I6IHJvb3RFcnJvciB9O1xuICAgIH1cbiAgICByb290ID0gUm9vdDtcbiAgfVxuXG4gIGlmICh1c2VyT3B0aW9ucy5IdG1sKSB7XG4gICAgY29uc3Qge1xuICAgICAgdHlwZTogaHRtbFR5cGUsXG4gICAgICBlcnJvcjogaHRtbEVycm9yLFxuICAgICAgSHRtbCxcbiAgICB9ID0gYXdhaXQgcmVzb2x2ZVVybE9wdGlvbih1c2VyT3B0aW9ucywgXCJIdG1sXCIsIHJvdXRlKTtcbiAgICBpZiAoaHRtbFR5cGUgPT09IFwiZXJyb3JcIikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJlcnJvclwiLCBlcnJvcjogaHRtbEVycm9yIH07XG4gICAgfVxuICAgIGh0bWwgPSBIdG1sO1xuICB9XG5cbiAgaWYgKCF1c2VyT3B0aW9ucy5wcm9wcykge1xuICAgIGlmICh1c2VyT3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICBsb2dnZXIuaW5mbyhcIltnZXRSb3V0ZUZpbGVzXSBObyBwcm9wcyBvcHRpb24sIHJldHVybmluZyBwYWdlIG9ubHlcIik7XG4gICAgfVxuICAgIGF1dG9EaXNjb3ZlcmVkRmlsZXMudXJsTWFwLnNldChyb3V0ZSwge1xuICAgICAgcGFnZTogUGFnZSxcbiAgICAgIHByb3BzOiB1bmRlZmluZWQsXG4gICAgICByb290LFxuICAgICAgaHRtbCxcbiAgICB9KTtcbiAgICByZXR1cm4geyB0eXBlOiBcInN1Y2Nlc3NcIiwgcGFnZTogUGFnZSwgcHJvcHM6IHVuZGVmaW5lZCwgcm9vdCwgaHRtbCB9O1xuICB9XG4gIGlmICh1c2VyT3B0aW9ucy52ZXJib3NlKSB7XG4gICAgbG9nZ2VyLmluZm8oXCJbZ2V0Um91dGVGaWxlc10gUmVzb2x2aW5nIHByb3BzIG9wdGlvblwiKTtcbiAgfVxuICBjb25zdCB7XG4gICAgdHlwZTogcHJvcHNUeXBlLFxuICAgIGVycm9yOiBwcm9wc0Vycm9yLFxuICAgIHByb3BzLFxuICB9ID0gYXdhaXQgcmVzb2x2ZVVybE9wdGlvbih1c2VyT3B0aW9ucywgXCJwcm9wc1wiLCByb3V0ZSk7XG5cbiAgaWYgKHByb3BzVHlwZSA9PT0gXCJlcnJvclwiKSB7XG4gICAgcmV0dXJuIHsgdHlwZTogXCJlcnJvclwiLCBlcnJvcjogcHJvcHNFcnJvciB9O1xuICB9XG4gIGlmICh1c2VyT3B0aW9ucy52ZXJib3NlKSB7XG4gICAgbG9nZ2VyLmluZm8oYFtnZXRSb3V0ZUZpbGVzXSBQcm9wcyByZXNvbHZlZCB0bzogJHtwcm9wc31gKTtcbiAgfVxuICBhdXRvRGlzY292ZXJlZEZpbGVzLnVybE1hcC5zZXQocm91dGUsIHsgcGFnZTogUGFnZSwgcHJvcHMsIHJvb3QsIGh0bWwgfSk7XG4gIHJldHVybiB7IHR5cGU6IFwic3VjY2Vzc1wiLCBwYWdlOiBQYWdlLCBwcm9wcywgcm9vdCwgaHRtbCB9O1xufTtcbiJdLCJuYW1lcyI6WyJwcm9wcyIsInJvb3QiLCJodG1sIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQTZDTyxNQUFNLGdCQUFnQixPQUMzQixLQUFBLEVBQ0EscUJBQ0EsV0FhQSxFQUFBLE1BQUEsR0FBUyxjQUM4QyxLQUFBO0FBQ3ZELEVBQUEsSUFBSSxtQkFBb0IsQ0FBQSxNQUFBLENBQU8sR0FBSSxDQUFBLEtBQUssQ0FBRyxFQUFBO0FBQ3pDLElBQUEsTUFBTSxNQUFTLEdBQUEsbUJBQUEsQ0FBb0IsTUFBTyxDQUFBLEdBQUEsQ0FBSSxLQUFLLENBQUE7QUFDbkQsSUFBQSxNQUFNLEVBQUUsSUFBQSxFQUFNLEtBQUFBLEVBQUFBLE1BQUFBLEVBQVUsR0FBQSxNQUFBO0FBQ3hCLElBQUEsSUFBSSxFQUFFLElBQUEsRUFBQUMsS0FBTSxFQUFBLElBQUEsRUFBQUMsT0FBUyxHQUFBLE1BQUE7QUFFckIsSUFBQSxJQUFJLFlBQVksT0FBUyxFQUFBO0FBQ3ZCLE1BQUEsTUFBQSxDQUFPLEtBQUssQ0FBdUMsb0NBQUEsRUFBQSxLQUFLLFlBQVksSUFBSSxDQUFBLFdBQUEsRUFBY0YsTUFBSyxDQUFHLENBQUEsQ0FBQSxDQUFBO0FBQUE7QUFJaEcsSUFBQSxJQUFJLENBQUMsSUFBTSxFQUFBO0FBQ1QsTUFBQSxJQUFJLFlBQVksT0FBUyxFQUFBO0FBQ3ZCLFFBQUEsTUFBQSxDQUFPLEtBQUssNEVBQTRFLENBQUE7QUFBQTtBQUMxRixLQUVLLE1BQUE7QUFDTCxNQUFBLElBQUksWUFBWSxPQUFTLEVBQUE7QUFDdkIsUUFBSSxJQUFBLElBQUEsSUFBUSxTQUFTLEVBQUksRUFBQTtBQUN2QixVQUFPLE1B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