UNPKG

@anansi/webpack-config

Version:
153 lines (152 loc) 18.9 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default; exports.__esModule = true; exports.default = makeDevConfig; var _htmlWebpackPlugin = _interopRequireDefault(require("html-webpack-plugin")); var _path = _interopRequireDefault(require("path")); var _webpack = _interopRequireDefault(require("webpack")); var _runtime = _interopRequireDefault(require("webpack/lib/logging/runtime")); var _base = require("./base"); var _getHttpsConfig = _interopRequireDefault(require("./getHttpsConfig")); var _ErrorOverlayPlugin = _interopRequireDefault(require("./plugins/ErrorOverlayPlugin")); const chalk = require('react-dev-utils/chalk'); function makeDevConfig(baseConfig, { rootPath, basePath, libraryInclude, libraryExclude, htmlOptions = { title: 'Anansi app', scriptLoading: 'defer' }, argv = {}, // eslint-disable-next-line no-unused-vars env = {}, sassOptions, sassResources, cssModulesOptions, globalStyleDir, isStackblitz, cssExtractOptions }) { const config = { ...baseConfig }; config.mode = 'development'; // https://webpack.js.org/guides/build-performance/#output-without-path-info config.output.pathinfo = false; config.output.devtoolModuleFilenameTemplate = info => _path.default.resolve(info.absoluteResourcePath).replace(/\\/g, '/'); config.optimization = { // https://webpack.js.org/guides/build-performance/#avoid-extra-optimization-steps removeAvailableModules: false, removeEmptyChunks: false, splitChunks: false, // save perf when errors occur emitOnErrors: false, // https://webpack.js.org/guides/build-performance/#minimal-entry-chunk runtimeChunk: true }; const watchIgnorePaths = [/(hot-update\.[^.]|\.map|s?css\.d\.ts)$/, _path.default.join(rootPath, '.cache'), /node_modules\/\.cache(?!\/(\.wyw-in-js-(cache|development|production)\/))/]; config.plugins = [new _webpack.default.WatchIgnorePlugin({ paths: watchIgnorePaths }), ...config.plugins]; // not for server builds if (!argv?.target?.includes?.('node')) { config.plugins.unshift(new _htmlWebpackPlugin.default(htmlOptions)); } let server = 'http'; try { server = (0, _getHttpsConfig.default)(rootPath); } catch { console.warn(chalk.yellow('Falling back to http')); } config.devServer = { hot: true, compress: true, headers: { 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Methods': '*', 'Access-Control-Allow-Headers': '*' }, allowedHosts: ['localhost', '127.0.0.1', '.csb.app'], server, devMiddleware: { publicPath: config.output.publicPath, stats: { preset: 'minimal', children: 'errors-only', excludeAssets: [/\.map/] } }, client: { logging: 'warn', overlay: false, // we have our own overlay, so ignore this webSocketURL: { hostname: 'localhost', pathname: '/ws', port: argv.port } }, historyApiFallback: true // TODO: add proxy options }; config.devtool = 'cheap-module-source-map'; // if we know the port, force it in case this is encapsulated in another host if (argv.port) { config.output.publicPath = `http://localhost:${argv.port}${config.output.publicPath}`; } if (!config.resolve.alias) { config.resolve.alias = {}; } if (process.env.NO_HOT_RELOAD !== 'true' && process.env.NO_HOT_RELOAD !== true && !argv?.target?.includes?.('node')) { try { require('react-refresh/babel'); const ReactRefreshWebpackPlugin = require('@pmmmwh/react-refresh-webpack-plugin'); config.plugins.push( // these are needed by the react-dev-utils overlay new _webpack.default.EnvironmentPlugin({ WDS_SOCKET_HOST: '', WDS_SOCKET_PATH: '', WDS_SOCKET_PORT: '', FAST_REFRESH: true }), new ReactRefreshWebpackPlugin({ overlay: { // provides editor opening when combined with ErrorOverlayPlugin entry: require.resolve('./plugins/ErrorOverlayEntry'), // registers error handlers module: require.resolve('./plugins/refreshOverlayModule') } }), new _ErrorOverlayPlugin.default()); config.devServer.hot = 'only'; _runtime.default.getLogger('anansi').info('React fast refresh detected and enabled'); // eslint-disable-next-line no-empty } catch {} } if (!config.experiments) { config.experiments = {}; } // this doesn't work well with webcontainers if (!isStackblitz) { // TODO: enable once we can figure out how to make it work with manifest and await for SSR //config.experiments.lazyCompilation = { entries: false }; } const styleRules = (0, _base.getStyleRules)({ rootPath, basePath, libraryInclude, libraryExclude, cssModulesOptions: { localIdentName: '[folder]_[name]__[local]___[xxhash64:hash:base64:5]', ...cssModulesOptions }, sassOptions, sassResources, globalStyleDir, target: argv?.target, cssExtractOptions }); config.module.rules = [...config.module.rules, styleRules]; return config; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfaHRtbFdlYnBhY2tQbHVnaW4iLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9wYXRoIiwiX3dlYnBhY2siLCJfcnVudGltZSIsIl9iYXNlIiwiX2dldEh0dHBzQ29uZmlnIiwiX0Vycm9yT3ZlcmxheVBsdWdpbiIsImNoYWxrIiwibWFrZURldkNvbmZpZyIsImJhc2VDb25maWciLCJyb290UGF0aCIsImJhc2VQYXRoIiwibGlicmFyeUluY2x1ZGUiLCJsaWJyYXJ5RXhjbHVkZSIsImh0bWxPcHRpb25zIiwidGl0bGUiLCJzY3JpcHRMb2FkaW5nIiwiYXJndiIsImVudiIsInNhc3NPcHRpb25zIiwic2Fzc1Jlc291cmNlcyIsImNzc01vZHVsZXNPcHRpb25zIiwiZ2xvYmFsU3R5bGVEaXIiLCJpc1N0YWNrYmxpdHoiLCJjc3NFeHRyYWN0T3B0aW9ucyIsImNvbmZpZyIsIm1vZGUiLCJvdXRwdXQiLCJwYXRoaW5mbyIsImRldnRvb2xNb2R1bGVGaWxlbmFtZVRlbXBsYXRlIiwiaW5mbyIsInBhdGgiLCJyZXNvbHZlIiwiYWJzb2x1dGVSZXNvdXJjZVBhdGgiLCJyZXBsYWNlIiwib3B0aW1pemF0aW9uIiwicmVtb3ZlQXZhaWxhYmxlTW9kdWxlcyIsInJlbW92ZUVtcHR5Q2h1bmtzIiwic3BsaXRDaHVua3MiLCJlbWl0T25FcnJvcnMiLCJydW50aW1lQ2h1bmsiLCJ3YXRjaElnbm9yZVBhdGhzIiwiam9pbiIsInBsdWdpbnMiLCJ3ZWJwYWNrIiwiV2F0Y2hJZ25vcmVQbHVnaW4iLCJwYXRocyIsInRhcmdldCIsImluY2x1ZGVzIiwidW5zaGlmdCIsIkh0bWxXZWJwYWNrUGx1Z2luIiwic2VydmVyIiwiZ2V0SHR0cHNDb25maWciLCJjb25zb2xlIiwid2FybiIsInllbGxvdyIsImRldlNlcnZlciIsImhvdCIsImNvbXByZXNzIiwiaGVhZGVycyIsImFsbG93ZWRIb3N0cyIsImRldk1pZGRsZXdhcmUiLCJwdWJsaWNQYXRoIiwic3RhdHMiLCJwcmVzZXQiLCJjaGlsZHJlbiIsImV4Y2x1ZGVBc3NldHMiLCJjbGllbnQiLCJsb2dnaW5nIiwib3ZlcmxheSIsIndlYlNvY2tldFVSTCIsImhvc3RuYW1lIiwicGF0aG5hbWUiLCJwb3J0IiwiaGlzdG9yeUFwaUZhbGxiYWNrIiwiZGV2dG9vbCIsImFsaWFzIiwicHJvY2VzcyIsIk5PX0hPVF9SRUxPQUQiLCJSZWFjdFJlZnJlc2hXZWJwYWNrUGx1Z2luIiwicHVzaCIsIkVudmlyb25tZW50UGx1Z2luIiwiV0RTX1NPQ0tFVF9IT1NUIiwiV0RTX1NPQ0tFVF9QQVRIIiwiV0RTX1NPQ0tFVF9QT1JUIiwiRkFTVF9SRUZSRVNIIiwiZW50cnkiLCJtb2R1bGUiLCJFcnJvck92ZXJsYXlQbHVnaW4iLCJnZXRMb2dnZXIiLCJleHBlcmltZW50cyIsInN0eWxlUnVsZXMiLCJnZXRTdHlsZVJ1bGVzIiwibG9jYWxJZGVudE5hbWUiLCJydWxlcyJdLCJzb3VyY2VzIjpbIi4uL3NyYy9kZXYuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEh0bWxXZWJwYWNrUGx1Z2luIGZyb20gJ2h0bWwtd2VicGFjay1wbHVnaW4nO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgd2VicGFjayBmcm9tICd3ZWJwYWNrJztcbmltcG9ydCBsb2dnaW5nIGZyb20gJ3dlYnBhY2svbGliL2xvZ2dpbmcvcnVudGltZSc7XG5cbmltcG9ydCB7IGdldFN0eWxlUnVsZXMgfSBmcm9tICcuL2Jhc2UnO1xuaW1wb3J0IGdldEh0dHBzQ29uZmlnIGZyb20gJy4vZ2V0SHR0cHNDb25maWcnO1xuaW1wb3J0IEVycm9yT3ZlcmxheVBsdWdpbiBmcm9tICcuL3BsdWdpbnMvRXJyb3JPdmVybGF5UGx1Z2luJztcblxuY29uc3QgY2hhbGsgPSByZXF1aXJlKCdyZWFjdC1kZXYtdXRpbHMvY2hhbGsnKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWFrZURldkNvbmZpZyhcbiAgYmFzZUNvbmZpZyxcbiAge1xuICAgIHJvb3RQYXRoLFxuICAgIGJhc2VQYXRoLFxuICAgIGxpYnJhcnlJbmNsdWRlLFxuICAgIGxpYnJhcnlFeGNsdWRlLFxuICAgIGh0bWxPcHRpb25zID0geyB0aXRsZTogJ0FuYW5zaSBhcHAnLCBzY3JpcHRMb2FkaW5nOiAnZGVmZXInIH0sXG4gICAgYXJndiA9IHt9LFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIGVudiA9IHt9LFxuICAgIHNhc3NPcHRpb25zLFxuICAgIHNhc3NSZXNvdXJjZXMsXG4gICAgY3NzTW9kdWxlc09wdGlvbnMsXG4gICAgZ2xvYmFsU3R5bGVEaXIsXG4gICAgaXNTdGFja2JsaXR6LFxuICAgIGNzc0V4dHJhY3RPcHRpb25zLFxuICB9LFxuKSB7XG4gIGNvbnN0IGNvbmZpZyA9IHsgLi4uYmFzZUNvbmZpZyB9O1xuXG4gIGNvbmZpZy5tb2RlID0gJ2RldmVsb3BtZW50JztcbiAgLy8gaHR0cHM6Ly93ZWJwYWNrLmpzLm9yZy9ndWlkZXMvYnVpbGQtcGVyZm9ybWFuY2UvI291dHB1dC13aXRob3V0LXBhdGgtaW5mb1xuICBjb25maWcub3V0cHV0LnBhdGhpbmZvID0gZmFsc2U7XG4gIGNvbmZpZy5vdXRwdXQuZGV2dG9vbE1vZHVsZUZpbGVuYW1lVGVtcGxhdGUgPSBpbmZvID0+XG4gICAgcGF0aC5yZXNvbHZlKGluZm8uYWJzb2x1dGVSZXNvdXJjZVBhdGgpLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgY29uZmlnLm9wdGltaXphdGlvbiA9IHtcbiAgICAvLyBodHRwczovL3dlYnBhY2suanMub3JnL2d1aWRlcy9idWlsZC1wZXJmb3JtYW5jZS8jYXZvaWQtZXh0cmEtb3B0aW1pemF0aW9uLXN0ZXBzXG4gICAgcmVtb3ZlQXZhaWxhYmxlTW9kdWxlczogZmFsc2UsXG4gICAgcmVtb3ZlRW1wdHlDaHVua3M6IGZhbHNlLFxuICAgIHNwbGl0Q2h1bmtzOiBmYWxzZSxcbiAgICAvLyBzYXZlIHBlcmYgd2hlbiBlcnJvcnMgb2NjdXJcbiAgICBlbWl0T25FcnJvcnM6IGZhbHNlLFxuICAgIC8vIGh0dHBzOi8vd2VicGFjay5qcy5vcmcvZ3VpZGVzL2J1aWxkLXBlcmZvcm1hbmNlLyNtaW5pbWFsLWVudHJ5LWNodW5rXG4gICAgcnVudGltZUNodW5rOiB0cnVlLFxuICB9O1xuXG4gIGNvbnN0IHdhdGNoSWdub3JlUGF0aHMgPSBbXG4gICAgLyhob3QtdXBkYXRlXFwuW14uXXxcXC5tYXB8cz9jc3NcXC5kXFwudHMpJC8sXG4gICAgcGF0aC5qb2luKHJvb3RQYXRoLCAnLmNhY2hlJyksXG4gICAgL25vZGVfbW9kdWxlc1xcL1xcLmNhY2hlKD8hXFwvKFxcLnd5dy1pbi1qcy0oY2FjaGV8ZGV2ZWxvcG1lbnR8cHJvZHVjdGlvbilcXC8pKS8sXG4gIF07XG4gIGNvbmZpZy5wbHVnaW5zID0gW1xuICAgIG5ldyB3ZWJwYWNrLldhdGNoSWdub3JlUGx1Z2luKHsgcGF0aHM6IHdhdGNoSWdub3JlUGF0aHMgfSksXG4gICAgLi4uY29uZmlnLnBsdWdpbnMsXG4gIF07XG4gIC8vIG5vdCBmb3Igc2VydmVyIGJ1aWxkc1xuICBpZiAoIWFyZ3Y/LnRhcmdldD8uaW5jbHVkZXM/Lignbm9kZScpKSB7XG4gICAgY29uZmlnLnBsdWdpbnMudW5zaGlmdChuZXcgSHRtbFdlYnBhY2tQbHVnaW4oaHRtbE9wdGlvbnMpKTtcbiAgfVxuICBsZXQgc2VydmVyID0gJ2h0dHAnO1xuICB0cnkge1xuICAgIHNlcnZlciA9IGdldEh0dHBzQ29uZmlnKHJvb3RQYXRoKTtcbiAgfSBjYXRjaCB7XG4gICAgY29uc29sZS53YXJuKGNoYWxrLnllbGxvdygnRmFsbGluZyBiYWNrIHRvIGh0dHAnKSk7XG4gIH1cbiAgY29uZmlnLmRldlNlcnZlciA9IHtcbiAgICBob3Q6IHRydWUsXG4gICAgY29tcHJlc3M6IHRydWUsXG4gICAgaGVhZGVyczoge1xuICAgICAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbic6ICcqJyxcbiAgICAgICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzJzogJyonLFxuICAgICAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnMnOiAnKicsXG4gICAgfSxcbiAgICBhbGxvd2VkSG9zdHM6IFsnbG9jYWxob3N0JywgJzEyNy4wLjAuMScsICcuY3NiLmFwcCddLFxuICAgIHNlcnZlcixcbiAgICBkZXZNaWRkbGV3YXJlOiB7XG4gICAgICBwdWJsaWNQYXRoOiBjb25maWcub3V0cHV0LnB1YmxpY1BhdGgsXG4gICAgICBzdGF0czoge1xuICAgICAgICBwcmVzZXQ6ICdtaW5pbWFsJyxcbiAgICAgICAgY2hpbGRyZW46ICdlcnJvcnMtb25seScsXG4gICAgICAgIGV4Y2x1ZGVBc3NldHM6IFsvXFwubWFwL10sXG4gICAgICB9LFxuICAgIH0sXG4gICAgY2xpZW50OiB7XG4gICAgICBsb2dnaW5nOiAnd2FybicsXG4gICAgICBvdmVybGF5OiBmYWxzZSwgLy8gd2UgaGF2ZSBvdXIgb3duIG92ZXJsYXksIHNvIGlnbm9yZSB0aGlzXG4gICAgICB3ZWJTb2NrZXRVUkw6IHtcbiAgICAgICAgaG9zdG5hbWU6ICdsb2NhbGhvc3QnLFxuICAgICAgICBwYXRobmFtZTogJy93cycsXG4gICAgICAgIHBvcnQ6IGFyZ3YucG9ydCxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBoaXN0b3J5QXBpRmFsbGJhY2s6IHRydWUsXG4gICAgLy8gVE9ETzogYWRkIHByb3h5IG9wdGlvbnNcbiAgfTtcbiAgY29uZmlnLmRldnRvb2wgPSAnY2hlYXAtbW9kdWxlLXNvdXJjZS1tYXAnO1xuICAvLyBpZiB3ZSBrbm93IHRoZSBwb3J0LCBmb3JjZSBpdCBpbiBjYXNlIHRoaXMgaXMgZW5jYXBzdWxhdGVkIGluIGFub3RoZXIgaG9zdFxuICBpZiAoYXJndi5wb3J0KSB7XG4gICAgY29uZmlnLm91dHB1dC5wdWJsaWNQYXRoID0gYGh0dHA6Ly9sb2NhbGhvc3Q6JHthcmd2LnBvcnR9JHtjb25maWcub3V0cHV0LnB1YmxpY1BhdGh9YDtcbiAgfVxuICBpZiAoIWNvbmZpZy5yZXNvbHZlLmFsaWFzKSB7XG4gICAgY29uZmlnLnJlc29sdmUuYWxpYXMgPSB7fTtcbiAgfVxuICBpZiAoXG4gICAgcHJvY2Vzcy5lbnYuTk9fSE9UX1JFTE9BRCAhPT0gJ3RydWUnICYmXG4gICAgcHJvY2Vzcy5lbnYuTk9fSE9UX1JFTE9BRCAhPT0gdHJ1ZSAmJlxuICAgICFhcmd2Py50YXJnZXQ/LmluY2x1ZGVzPy4oJ25vZGUnKVxuICApIHtcbiAgICB0cnkge1xuICAgICAgcmVxdWlyZSgncmVhY3QtcmVmcmVzaC9iYWJlbCcpO1xuICAgICAgY29uc3QgUmVhY3RSZWZyZXNoV2VicGFja1BsdWdpbiA9IHJlcXVpcmUoJ0BwbW1td2gvcmVhY3QtcmVmcmVzaC13ZWJwYWNrLXBsdWdpbicpO1xuICAgICAgY29uZmlnLnBsdWdpbnMucHVzaChcbiAgICAgICAgLy8gdGhlc2UgYXJlIG5lZWRlZCBieSB0aGUgcmVhY3QtZGV2LXV0aWxzIG92ZXJsYXlcbiAgICAgICAgbmV3IHdlYnBhY2suRW52aXJvbm1lbnRQbHVnaW4oe1xuICAgICAgICAgIFdEU19TT0NLRVRfSE9TVDogJycsXG4gICAgICAgICAgV0RTX1NPQ0tFVF9QQVRIOiAnJyxcbiAgICAgICAgICBXRFNfU09DS0VUX1BPUlQ6ICcnLFxuICAgICAgICAgIEZBU1RfUkVGUkVTSDogdHJ1ZSxcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBSZWFjdFJlZnJlc2hXZWJwYWNrUGx1Z2luKHtcbiAgICAgICAgICBvdmVybGF5OiB7XG4gICAgICAgICAgICAvLyBwcm92aWRlcyBlZGl0b3Igb3BlbmluZyB3aGVuIGNvbWJpbmVkIHdpdGggRXJyb3JPdmVybGF5UGx1Z2luXG4gICAgICAgICAgICBlbnRyeTogcmVxdWlyZS5yZXNvbHZlKCcuL3BsdWdpbnMvRXJyb3JPdmVybGF5RW50cnknKSxcbiAgICAgICAgICAgIC8vIHJlZ2lzdGVycyBlcnJvciBoYW5kbGVyc1xuICAgICAgICAgICAgbW9kdWxlOiByZXF1aXJlLnJlc29sdmUoJy4vcGx1Z2lucy9yZWZyZXNoT3ZlcmxheU1vZHVsZScpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgRXJyb3JPdmVybGF5UGx1Z2luKCksXG4gICAgICApO1xuICAgICAgY29uZmlnLmRldlNlcnZlci5ob3QgPSAnb25seSc7XG4gICAgICBsb2dnaW5nXG4gICAgICAgIC5nZXRMb2dnZXIoJ2FuYW5zaScpXG4gICAgICAgIC5pbmZvKCdSZWFjdCBmYXN0IHJlZnJlc2ggZGV0ZWN0ZWQgYW5kIGVuYWJsZWQnKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eVxuICAgIH0gY2F0Y2gge31cbiAgfVxuXG4gIGlmICghY29uZmlnLmV4cGVyaW1lbnRzKSB7XG4gICAgY29uZmlnLmV4cGVyaW1lbnRzID0ge307XG4gIH1cbiAgLy8gdGhpcyBkb2Vzbid0IHdvcmsgd2VsbCB3aXRoIHdlYmNvbnRhaW5lcnNcbiAgaWYgKCFpc1N0YWNrYmxpdHopIHtcbiAgICAvLyBUT0RPOiBlbmFibGUgb25jZSB3ZSBjYW4gZmlndXJlIG91dCBob3cgdG8gbWFrZSBpdCB3b3JrIHdpdGggbWFuaWZlc3QgYW5kIGF3YWl0IGZvciBTU1JcbiAgICAvL2NvbmZpZy5leHBlcmltZW50cy5sYXp5Q29tcGlsYXRpb24gPSB7IGVudHJpZXM6IGZhbHNlIH07XG4gIH1cblxuICBjb25zdCBzdHlsZVJ1bGVzID0gZ2V0U3R5bGVSdWxlcyh7XG4gICAgcm9vdFBhdGgsXG4gICAgYmFzZVBhdGgsXG4gICAgbGlicmFyeUluY2x1ZGUsXG4gICAgbGlicmFyeUV4Y2x1ZGUsXG4gICAgY3NzTW9kdWxlc09wdGlvbnM6IHtcbiAgICAgIGxvY2FsSWRlbnROYW1lOiAnW2ZvbGRlcl1fW25hbWVdX19bbG9jYWxdX19fW3h4aGFzaDY0Omhhc2g6YmFzZTY0OjVdJyxcbiAgICAgIC4uLmNzc01vZHVsZXNPcHRpb25zLFxuICAgIH0sXG4gICAgc2Fzc09wdGlvbnMsXG4gICAgc2Fzc1Jlc291cmNlcyxcbiAgICBnbG9iYWxTdHlsZURpcixcbiAgICB0YXJnZXQ6IGFyZ3Y/LnRhcmdldCxcbiAgICBjc3NFeHRyYWN0T3B0aW9ucyxcbiAgfSk7XG4gIGNvbmZpZy5tb2R1bGUucnVsZXMgPSBbLi4uY29uZmlnLm1vZHVsZS5ydWxlcywgc3R5bGVSdWxlc107XG4gIHJldHVybiBjb25maWc7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsSUFBQUEsa0JBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLEtBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLFFBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLFFBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFJLEtBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLGVBQUEsR0FBQU4sc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFNLG1CQUFBLEdBQUFQLHNCQUFBLENBQUFDLE9BQUE7QUFFQSxNQUFNTyxLQUFLLEdBQUdQLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQztBQUUvQixTQUFTUSxhQUFhQSxDQUNuQ0MsVUFBVSxFQUNWO0VBQ0VDLFFBQVE7RUFDUkMsUUFBUTtFQUNSQyxjQUFjO0VBQ2RDLGNBQWM7RUFDZEMsV0FBVyxHQUFHO0lBQUVDLEtBQUssRUFBRSxZQUFZO0lBQUVDLGFBQWEsRUFBRTtFQUFRLENBQUM7RUFDN0RDLElBQUksR0FBRyxDQUFDLENBQUM7RUFDVDtFQUNBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQ1JDLFdBQVc7RUFDWEMsYUFBYTtFQUNiQyxpQkFBaUI7RUFDakJDLGNBQWM7RUFDZEMsWUFBWTtFQUNaQztBQUNGLENBQUMsRUFDRDtFQUNBLE1BQU1DLE1BQU0sR0FBRztJQUFFLEdBQUdoQjtFQUFXLENBQUM7RUFFaENnQixNQUFNLENBQUNDLElBQUksR0FBRyxhQUFhO0VBQzNCO0VBQ0FELE1BQU0sQ0FBQ0UsTUFBTSxDQUFDQyxRQUFRLEdBQUcsS0FBSztF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