@angular-devkit/build-angular 16.0.0-next.2 → 16.0.0-next.4

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,331 @@
1
+ "use strict";
2
+ /**
3
+ * @license
4
+ * Copyright Google LLC All Rights Reserved.
5
+ *
6
+ * Use of this source code is governed by an MIT-style license that can be
7
+ * found in the LICENSE file at https://angular.io/license
8
+ */
9
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ var desc = Object.getOwnPropertyDescriptor(m, k);
12
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
13
+ desc = { enumerable: true, get: function() { return m[k]; } };
14
+ }
15
+ Object.defineProperty(o, k2, desc);
16
+ }) : (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ o[k2] = m[k];
19
+ }));
20
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
21
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
22
+ }) : function(o, v) {
23
+ o["default"] = v;
24
+ });
25
+ var __importStar = (this && this.__importStar) || function (mod) {
26
+ if (mod && mod.__esModule) return mod;
27
+ var result = {};
28
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
29
+ __setModuleDefault(result, mod);
30
+ return result;
31
+ };
32
+ Object.defineProperty(exports, "__esModule", { value: true });
33
+ exports.serveWebpackBrowser = void 0;
34
+ const architect_1 = require("@angular-devkit/architect");
35
+ const build_webpack_1 = require("@angular-devkit/build-webpack");
36
+ const core_1 = require("@angular-devkit/core");
37
+ const path = __importStar(require("path"));
38
+ const rxjs_1 = require("rxjs");
39
+ const url = __importStar(require("url"));
40
+ const utils_1 = require("../../utils");
41
+ const check_port_1 = require("../../utils/check-port");
42
+ const color_1 = require("../../utils/color");
43
+ const i18n_options_1 = require("../../utils/i18n-options");
44
+ const load_translations_1 = require("../../utils/load-translations");
45
+ const normalize_cache_1 = require("../../utils/normalize-cache");
46
+ const package_chunk_sort_1 = require("../../utils/package-chunk-sort");
47
+ const purge_cache_1 = require("../../utils/purge-cache");
48
+ const version_1 = require("../../utils/version");
49
+ const webpack_browser_config_1 = require("../../utils/webpack-browser-config");
50
+ const webpack_diagnostics_1 = require("../../utils/webpack-diagnostics");
51
+ const configs_1 = require("../../webpack/configs");
52
+ const index_html_webpack_plugin_1 = require("../../webpack/plugins/index-html-webpack-plugin");
53
+ const service_worker_plugin_1 = require("../../webpack/plugins/service-worker-plugin");
54
+ const stats_1 = require("../../webpack/utils/stats");
55
+ const schema_1 = require("../browser/schema");
56
+ /**
57
+ * Reusable implementation of the Angular Webpack development server builder.
58
+ * @param options Dev Server options.
59
+ * @param context The build context.
60
+ * @param transforms A map of transforms that can be used to hook into some logic (such as
61
+ * transforming webpack configuration before passing it to webpack).
62
+ *
63
+ * @experimental Direct usage of this function is considered experimental.
64
+ */
65
+ // eslint-disable-next-line max-lines-per-function
66
+ function serveWebpackBrowser(options, context, transforms = {}) {
67
+ // Check Angular version.
68
+ const { logger, workspaceRoot } = context;
69
+ (0, version_1.assertCompatibleAngularVersion)(workspaceRoot);
70
+ const browserTarget = (0, architect_1.targetFromTargetString)(options.browserTarget);
71
+ async function setup() {
72
+ const projectName = context.target?.project;
73
+ if (!projectName) {
74
+ throw new Error('The builder requires a target.');
75
+ }
76
+ // Purge old build disk cache.
77
+ await (0, purge_cache_1.purgeStaleBuildCache)(context);
78
+ options.port = await (0, check_port_1.checkPort)(options.port ?? 4200, options.host || 'localhost');
79
+ if (options.hmr) {
80
+ logger.warn(core_1.tags.stripIndents `NOTICE: Hot Module Replacement (HMR) is enabled for the dev server.
81
+ See https://webpack.js.org/guides/hot-module-replacement for information on working with HMR for Webpack.`);
82
+ }
83
+ if (!options.disableHostCheck &&
84
+ options.host &&
85
+ !/^127\.\d+\.\d+\.\d+/g.test(options.host) &&
86
+ options.host !== 'localhost') {
87
+ logger.warn(core_1.tags.stripIndent `
88
+ Warning: This is a simple server for use in testing or debugging Angular applications
89
+ locally. It hasn't been reviewed for security issues.
90
+
91
+ Binding this server to an open connection can result in compromising your application or
92
+ computer. Using a different host than the one passed to the "--host" flag might result in
93
+ websocket connection issues. You might need to use "--disable-host-check" if that's the
94
+ case.
95
+ `);
96
+ }
97
+ if (options.disableHostCheck) {
98
+ logger.warn(core_1.tags.oneLine `
99
+ Warning: Running a server with --disable-host-check is a security risk.
100
+ See https://medium.com/webpack/webpack-dev-server-middleware-security-issues-1489d950874a
101
+ for more information.
102
+ `);
103
+ }
104
+ // Get the browser configuration from the target name.
105
+ const rawBrowserOptions = (await context.getTargetOptions(browserTarget));
106
+ if (rawBrowserOptions.outputHashing && rawBrowserOptions.outputHashing !== schema_1.OutputHashing.None) {
107
+ // Disable output hashing for dev build as this can cause memory leaks
108
+ // See: https://github.com/webpack/webpack-dev-server/issues/377#issuecomment-241258405
109
+ rawBrowserOptions.outputHashing = schema_1.OutputHashing.None;
110
+ logger.warn(`Warning: 'outputHashing' option is disabled when using the dev-server.`);
111
+ }
112
+ const metadata = await context.getProjectMetadata(projectName);
113
+ const cacheOptions = (0, normalize_cache_1.normalizeCacheOptions)(metadata, context.workspaceRoot);
114
+ const browserName = await context.getBuilderNameForTarget(browserTarget);
115
+ // Issue a warning that the dev-server does not currently support the experimental esbuild-
116
+ // based builder and will use Webpack.
117
+ if (browserName === '@angular-devkit/build-angular:browser-esbuild') {
118
+ logger.warn('WARNING: The experimental esbuild-based builder is not currently supported ' +
119
+ 'by the dev-server. The stable Webpack-based builder will be used instead.');
120
+ }
121
+ const browserOptions = (await context.validateOptions({
122
+ ...rawBrowserOptions,
123
+ watch: options.watch,
124
+ verbose: options.verbose,
125
+ // In dev server we should not have budgets because of extra libs such as socks-js
126
+ budgets: undefined,
127
+ }, browserName));
128
+ const { styles, scripts } = (0, utils_1.normalizeOptimization)(browserOptions.optimization);
129
+ if (scripts || styles.minify) {
130
+ logger.error(core_1.tags.stripIndents `
131
+ ****************************************************************************************
132
+ This is a simple server for use in testing or debugging Angular applications locally.
133
+ It hasn't been reviewed for security issues.
134
+
135
+ DON'T USE IT FOR PRODUCTION!
136
+ ****************************************************************************************
137
+ `);
138
+ }
139
+ const { config, projectRoot, i18n } = await (0, webpack_browser_config_1.generateI18nBrowserWebpackConfigFromContext)(browserOptions, context, (wco) => [(0, configs_1.getDevServerConfig)(wco), (0, configs_1.getCommonConfig)(wco), (0, configs_1.getStylesConfig)(wco)], options);
140
+ if (!config.devServer) {
141
+ throw new Error('Webpack Dev Server configuration was not set.');
142
+ }
143
+ let locale;
144
+ if (i18n.shouldInline) {
145
+ // Dev-server only supports one locale
146
+ locale = [...i18n.inlineLocales][0];
147
+ }
148
+ else if (i18n.hasDefinedSourceLocale) {
149
+ // use source locale if not localizing
150
+ locale = i18n.sourceLocale;
151
+ }
152
+ let webpackConfig = config;
153
+ // If a locale is defined, setup localization
154
+ if (locale) {
155
+ if (i18n.inlineLocales.size > 1) {
156
+ throw new Error('The development server only supports localizing a single locale per build.');
157
+ }
158
+ await setupLocalize(locale, i18n, browserOptions, webpackConfig, cacheOptions, context);
159
+ }
160
+ if (transforms.webpackConfiguration) {
161
+ webpackConfig = await transforms.webpackConfiguration(webpackConfig);
162
+ }
163
+ webpackConfig.plugins ?? (webpackConfig.plugins = []);
164
+ if (browserOptions.index) {
165
+ const { scripts = [], styles = [], baseHref } = browserOptions;
166
+ const entrypoints = (0, package_chunk_sort_1.generateEntryPoints)({
167
+ scripts,
168
+ styles,
169
+ // The below is needed as otherwise HMR for CSS will break.
170
+ // styles.js and runtime.js needs to be loaded as a non-module scripts as otherwise `document.currentScript` will be null.
171
+ // https://github.com/webpack-contrib/mini-css-extract-plugin/blob/90445dd1d81da0c10b9b0e8a17b417d0651816b8/src/hmr/hotModuleReplacement.js#L39
172
+ isHMREnabled: !!webpackConfig.devServer?.hot,
173
+ });
174
+ webpackConfig.plugins.push(new index_html_webpack_plugin_1.IndexHtmlWebpackPlugin({
175
+ indexPath: path.resolve(workspaceRoot, (0, webpack_browser_config_1.getIndexInputFile)(browserOptions.index)),
176
+ outputPath: (0, webpack_browser_config_1.getIndexOutputFile)(browserOptions.index),
177
+ baseHref,
178
+ entrypoints,
179
+ deployUrl: browserOptions.deployUrl,
180
+ sri: browserOptions.subresourceIntegrity,
181
+ cache: cacheOptions,
182
+ postTransform: transforms.indexHtml,
183
+ optimization: (0, utils_1.normalizeOptimization)(browserOptions.optimization),
184
+ crossOrigin: browserOptions.crossOrigin,
185
+ lang: locale,
186
+ }));
187
+ }
188
+ if (browserOptions.serviceWorker) {
189
+ webpackConfig.plugins.push(new service_worker_plugin_1.ServiceWorkerPlugin({
190
+ baseHref: browserOptions.baseHref,
191
+ root: context.workspaceRoot,
192
+ projectRoot,
193
+ ngswConfigPath: browserOptions.ngswConfigPath,
194
+ }));
195
+ }
196
+ return {
197
+ browserOptions,
198
+ webpackConfig,
199
+ projectRoot,
200
+ };
201
+ }
202
+ return (0, rxjs_1.from)(setup()).pipe((0, rxjs_1.switchMap)(({ browserOptions, webpackConfig }) => {
203
+ return (0, build_webpack_1.runWebpackDevServer)(webpackConfig, context, {
204
+ logging: transforms.logging || (0, stats_1.createWebpackLoggingCallback)(browserOptions, logger),
205
+ webpackFactory: require('webpack'),
206
+ webpackDevServerFactory: require('webpack-dev-server'),
207
+ }).pipe((0, rxjs_1.concatMap)(async (buildEvent, index) => {
208
+ const webpackRawStats = buildEvent.webpackStats;
209
+ if (!webpackRawStats) {
210
+ throw new Error('Webpack stats build result is required.');
211
+ }
212
+ // Resolve serve address.
213
+ const publicPath = webpackConfig.devServer?.devMiddleware?.publicPath;
214
+ const serverAddress = url.format({
215
+ protocol: options.ssl ? 'https' : 'http',
216
+ hostname: options.host === '0.0.0.0' ? 'localhost' : options.host,
217
+ port: buildEvent.port,
218
+ pathname: typeof publicPath === 'string' ? publicPath : undefined,
219
+ });
220
+ if (index === 0) {
221
+ logger.info('\n' +
222
+ core_1.tags.oneLine `
223
+ **
224
+ Angular Live Development Server is listening on ${options.host}:${buildEvent.port},
225
+ open your browser on ${serverAddress}
226
+ **
227
+ ` +
228
+ '\n');
229
+ if (options.open) {
230
+ const open = (await Promise.resolve().then(() => __importStar(require('open')))).default;
231
+ await open(serverAddress);
232
+ }
233
+ }
234
+ if (buildEvent.success) {
235
+ logger.info(`\n${color_1.colors.greenBright(color_1.colors.symbols.check)} Compiled successfully.`);
236
+ }
237
+ else {
238
+ logger.info(`\n${color_1.colors.redBright(color_1.colors.symbols.cross)} Failed to compile.`);
239
+ }
240
+ return {
241
+ ...buildEvent,
242
+ baseUrl: serverAddress,
243
+ stats: (0, stats_1.generateBuildEventStats)(webpackRawStats, browserOptions),
244
+ };
245
+ }));
246
+ }));
247
+ }
248
+ exports.serveWebpackBrowser = serveWebpackBrowser;
249
+ async function setupLocalize(locale, i18n, browserOptions, webpackConfig, cacheOptions, context) {
250
+ const localeDescription = i18n.locales[locale];
251
+ // Modify main entrypoint to include locale data
252
+ if (localeDescription?.dataPath &&
253
+ typeof webpackConfig.entry === 'object' &&
254
+ !Array.isArray(webpackConfig.entry) &&
255
+ webpackConfig.entry['main']) {
256
+ if (Array.isArray(webpackConfig.entry['main'])) {
257
+ webpackConfig.entry['main'].unshift(localeDescription.dataPath);
258
+ }
259
+ else {
260
+ webpackConfig.entry['main'] = [
261
+ localeDescription.dataPath,
262
+ webpackConfig.entry['main'],
263
+ ];
264
+ }
265
+ }
266
+ let missingTranslationBehavior = browserOptions.i18nMissingTranslation || 'ignore';
267
+ let translation = localeDescription?.translation || {};
268
+ if (locale === i18n.sourceLocale) {
269
+ missingTranslationBehavior = 'ignore';
270
+ translation = {};
271
+ }
272
+ const i18nLoaderOptions = {
273
+ locale,
274
+ missingTranslationBehavior,
275
+ translation: i18n.shouldInline ? translation : undefined,
276
+ translationFiles: localeDescription?.files.map((file) => path.resolve(context.workspaceRoot, file.path)),
277
+ };
278
+ const i18nRule = {
279
+ test: /\.[cm]?[tj]sx?$/,
280
+ enforce: 'post',
281
+ use: [
282
+ {
283
+ loader: require.resolve('../../babel/webpack-loader'),
284
+ options: {
285
+ cacheDirectory: (cacheOptions.enabled && path.join(cacheOptions.path, 'babel-dev-server-i18n')) ||
286
+ false,
287
+ cacheIdentifier: JSON.stringify({
288
+ locale,
289
+ translationIntegrity: localeDescription?.files.map((file) => file.integrity),
290
+ }),
291
+ i18n: i18nLoaderOptions,
292
+ },
293
+ },
294
+ ],
295
+ };
296
+ // Get the rules and ensure the Webpack configuration is setup properly
297
+ const rules = webpackConfig.module?.rules || [];
298
+ if (!webpackConfig.module) {
299
+ webpackConfig.module = { rules };
300
+ }
301
+ else if (!webpackConfig.module.rules) {
302
+ webpackConfig.module.rules = rules;
303
+ }
304
+ rules.push(i18nRule);
305
+ // Add a plugin to reload translation files on rebuilds
306
+ const loader = await (0, load_translations_1.createTranslationLoader)();
307
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
308
+ webpackConfig.plugins.push({
309
+ apply: (compiler) => {
310
+ compiler.hooks.thisCompilation.tap('build-angular', (compilation) => {
311
+ if (i18n.shouldInline && i18nLoaderOptions.translation === undefined) {
312
+ // Reload translations
313
+ (0, i18n_options_1.loadTranslations)(locale, localeDescription, context.workspaceRoot, loader, {
314
+ warn(message) {
315
+ (0, webpack_diagnostics_1.addWarning)(compilation, message);
316
+ },
317
+ error(message) {
318
+ (0, webpack_diagnostics_1.addError)(compilation, message);
319
+ },
320
+ }, undefined, browserOptions.i18nDuplicateTranslation);
321
+ i18nLoaderOptions.translation = localeDescription.translation ?? {};
322
+ }
323
+ compilation.hooks.finishModules.tap('build-angular', () => {
324
+ // After loaders are finished, clear out the now unneeded translations
325
+ i18nLoaderOptions.translation = undefined;
326
+ });
327
+ });
328
+ },
329
+ });
330
+ }
331
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2VicGFjay1zZXJ2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyX2RldmtpdC9idWlsZF9hbmd1bGFyL3NyYy9idWlsZGVycy9kZXYtc2VydmVyL3dlYnBhY2stc2VydmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUgseURBQW1GO0FBQ25GLGlFQUl1QztBQUN2QywrQ0FBa0Q7QUFDbEQsMkNBQTZCO0FBQzdCLCtCQUE4RDtBQUM5RCx5Q0FBMkI7QUFJM0IsdUNBQW9EO0FBQ3BELHVEQUFtRDtBQUNuRCw2Q0FBMkM7QUFDM0MsMkRBQXlFO0FBRXpFLHFFQUF3RTtBQUN4RSxpRUFBNkY7QUFDN0YsdUVBQXFFO0FBQ3JFLHlEQUErRDtBQUMvRCxpREFBcUU7QUFDckUsK0VBSTRDO0FBQzVDLHlFQUF1RTtBQUN2RSxtREFBNkY7QUFDN0YsK0ZBQXlGO0FBQ3pGLHVGQUFrRjtBQUNsRixxREFJbUM7QUFDbkMsOENBQWtGO0FBYWxGOzs7Ozs7OztHQVFHO0FBQ0gsa0RBQWtEO0FBQ2xELFNBQWdCLG1CQUFtQixDQUNqQyxPQUFnQyxFQUNoQyxPQUF1QixFQUN2QixhQUlJLEVBQUU7SUFFTix5QkFBeUI7SUFDekIsTUFBTSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFDMUMsSUFBQSx3Q0FBOEIsRUFBQyxhQUFhLENBQUMsQ0FBQztJQUU5QyxNQUFNLGFBQWEsR0FBRyxJQUFBLGtDQUFzQixFQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUVwRSxLQUFLLFVBQVUsS0FBSztRQUtsQixNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQztRQUM1QyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2hCLE1BQU0sSUFBSSxLQUFLLENB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S0FBSyxFQUFFLENBQUMsUUFBMEIsRUFBRSxFQUFFO1lBQ3BDLFFBQVEsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRTtnQkFDbEUsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLGlCQUFpQixDQUFDLFdBQVcsS0FBSyxTQUFTLEVBQUU7b0JBQ3BFLHNCQUFzQjtvQkFDdEIsSUFBQSwrQkFBZ0IsRUFDZCxNQUFNLEVBQ04saUJBQWlCLEVBQ2pCLE9BQU8sQ0FBQyxhQUFhLEVBQ3JCLE1BQU0sRUFDTjt3QkFDRSxJQUFJLENBQUMsT0FBTzs0QkFDVixJQUFBLGdDQUFVLEVBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO3dCQUNuQyxDQUFDO3dCQUNELEtBQUssQ0FBQyxPQUFPOzRCQUNYLElBQUEsOEJBQVEsRUFBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7d0JBQ2pDLENBQUM7cUJBQ0YsRUFDRCxTQUFTLEVBQ1QsY0FBYyxDQUFDLHdCQUF3QixDQUN4QyxDQUFDO29CQUVGLGlCQUFpQixDQUFDLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDO2lCQUNyRTtnQkFFRCxXQUFXLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLEdBQUcsRUFBRTtvQkFDeEQsc0VBQXNFO29CQUN0RSxpQkFBaUIsQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDO2dCQUM1QyxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztLQUNGLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHsgQnVpbGRlckNvbnRleHQsIHRhcmdldEZyb21UYXJnZXRTdHJpbmcgfSBmcm9tICdAYW5ndWxhci1kZXZraXQvYXJjaGl0ZWN0JztcbmltcG9ydCB7XG4gIERldlNlcnZlckJ1aWxkT3V0cHV0LFxuICBXZWJwYWNrTG9nZ2luZ0NhbGxiYWNrLFxuICBydW5XZWJwYWNrRGV2U2VydmVyLFxufSBmcm9tICdAYW5ndWxhci1kZXZraXQvYnVpbGQtd2VicGFjayc7XG5pbXBvcnQgeyBqc29uLCB0YWdzIH0gZnJvbSAnQGFuZ3VsYXItZGV2a2l0L2NvcmUnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IE9ic2VydmFibGUsIGNvbmNhdE1hcCwgZnJvbSwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgKiBhcyB1cmwgZnJvbSAndXJsJztcbmltcG9ydCB3ZWJwYWNrIGZyb20gJ3dlYnBhY2snO1xuaW1wb3J0IHdlYnBhY2tEZXZTZXJ2ZXIgZnJvbSAnd2VicGFjay1kZXYtc2VydmVyJztcbmltcG9ydCB7IEV4ZWN1dGlvblRyYW5zZm9ybWVyIH0gZnJvbSAnLi4vLi4vdHJhbnNmb3Jtcyc7XG5pbXBvcnQgeyBub3JtYWxpemVPcHRpbWl6YXRpb24gfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBjaGVja1BvcnQgfSBmcm9tICcuLi8uLi91dGlscy9jaGVjay1wb3J0JztcbmltcG9ydCB7IGNvbG9ycyB9IGZyb20gJy4uLy4uL3V0aWxzL2NvbG9yJztcbmltcG9ydCB7IEkxOG5PcHRpb25zLCBsb2FkVHJhbnNsYXRpb25zIH0gZnJvbSAnLi4vLi4vdXRpbHMvaTE4bi1vcHRpb25zJztcbmltcG9ydCB7IEluZGV4SHRtbFRyYW5zZm9ybSB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LWZpbGUvaW5kZXgtaHRtbC1nZW5lcmF0b3InO1xuaW1wb3J0IHsgY3JlYXRlVHJhbnNsYXRpb25Mb2FkZXIgfSBmcm9tICcuLi8uLi91dGlscy9sb2FkLXRyYW5zbGF0aW9ucyc7XG5pbXBvcnQgeyBOb3JtYWxpemVkQ2FjaGVkT3B0aW9ucywgbm9ybWFsaXplQ2FjaGVPcHRpb25zIH0gZnJvbSAnLi4vLi4vdXRpbHMvbm9ybWFsaXplLWNhY2hlJztcbmltcG9ydCB7IGdlbmVyYXRlRW50cnlQb2ludHMgfSBmcm9tICcuLi8uLi91dGlscy9wYWNrYWdlLWNodW5rLXNvcnQnO1xuaW1wb3J0IHsgcHVyZ2VTdGFsZUJ1aWxkQ2FjaGUgfSBmcm9tICcuLi8uLi91dGlscy9wdXJnZS1jYWNoZSc7XG5pbXBvcnQgeyBhc3NlcnRDb21wYXRpYmxlQW5ndWxhclZlcnNpb24gfSBmcm9tICcuLi8uLi91dGlscy92ZXJzaW9uJztcbmltcG9ydCB7XG4gIGdlbmVyYXRlSTE4bkJyb3dzZXJXZWJwYWNrQ29uZmlnRnJvbUNvbnRleHQsXG4gIGdldEluZGV4SW5wdXRGaWxlLFxuICBnZXRJbmRleE91dHB1dEZpbGUsXG59IGZyb20gJy4uLy4uL3V0aWxzL3dlYnBhY2stYnJvd3Nlci1jb25maWcnO1xuaW1wb3J0IHsgYWRkRXJyb3IsIGFkZFdhcm5pbmcgfSBmcm9tICcuLi8uLi91dGlscy93ZWJwYWNrLWRpYWdub3N0aWNzJztcbmltcG9ydCB7IGdldENvbW1vbkNvbmZpZywgZ2V0RGV2U2VydmVyQ29uZmlnLCBnZXRTdHlsZXNDb25maWcgfSBmcm9tICcuLi8uLi93ZWJwYWNrL2NvbmZpZ3MnO1xuaW1wb3J0IHsgSW5kZXhIdG1sV2VicGFja1BsdWdpbiB9IGZyb20gJy4uLy4uL3dlYnBhY2svcGx1Z2lucy9pbmRleC1odG1sLXdlYnBhY2stcGx1Z2luJztcbmltcG9ydCB7IFNlcnZpY2VXb3JrZXJQbHVnaW4gfSBmcm9tICcuLi8uLi93ZWJwYWNrL3BsdWdpbnMvc2VydmljZS13b3JrZXItcGx1Z2luJztcbmltcG9ydCB7XG4gIEJ1aWxkRXZlbnRTdGF0cyxcbiAgY3JlYXRlV2VicGFja0xvZ2dpbmdDYWxsYmFjayxcbiAgZ2VuZXJhdGVCdWlsZEV2ZW50U3RhdHMsXG59IGZyb20gJy4uLy4uL3dlYnBhY2svdXRpbHMvc3RhdHMnO1xuaW1wb3J0IHsgU2NoZW1hIGFzIEJyb3dzZXJCdWlsZGVyU2NoZW1hLCBPdXRwdXRIYXNoaW5nIH0gZnJvbSAnLi4vYnJvd3Nlci9zY2hlbWEnO1xuaW1wb3J0IHsgU2NoZW1hIH0gZnJvbSAnLi9zY2hlbWEnO1xuXG5leHBvcnQgdHlwZSBEZXZTZXJ2ZXJCdWlsZGVyT3B0aW9ucyA9IFNjaGVtYTtcblxuLyoqXG4gKiBAZXhwZXJpbWVudGFsIERpcmVjdCB1c2FnZSBvZiB0aGlzIHR5cGUgaXMgY29uc2lkZXJlZCBleHBlcmltZW50YWwuXG4gKi9cbmV4cG9ydCB0eXBlIERldlNlcnZlckJ1aWxkZXJPdXRwdXQgPSBEZXZTZXJ2ZXJCdWlsZE91dHB1dCAmIHtcbiAgYmFzZVVybDogc3RyaW5nO1xuICBzdGF0czogQnVpbGRFdmVudFN0YXRzO1xufTtcblxuLyoqXG4gKiBSZXVzYWJsZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQW5ndWxhciBXZWJwYWNrIGRldmVsb3BtZW50IHNlcnZlciBidWlsZGVyLlxuICogQHBhcmFtIG9wdGlvbnMgRGV2IFNlcnZlciBvcHRpb25zLlxuICogQHBhcmFtIGNvbnRleHQgVGhlIGJ1aWxkIGNvbnRleHQuXG4gKiBAcGFyYW0gdHJhbnNmb3JtcyBBIG1hcCBvZiB0cmFuc2Zvcm1zIHRoYXQgY2FuIGJlIHVzZWQgdG8gaG9vayBpbnRvIHNvbWUgbG9naWMgKHN1Y2ggYXNcbiAqICAgICB0cmFuc2Zvcm1pbmcgd2VicGFjayBjb25maWd1cmF0aW9uIGJlZm9yZSBwYXNzaW5nIGl0IHRvIHdlYnBhY2spLlxuICpcbiAqIEBleHBlcmltZW50YWwgRGlyZWN0IHVzYWdlIG9mIHRoaXMgZnVuY3Rpb24gaXMgY29uc2lkZXJlZCBleHBlcmltZW50YWwuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGluZXMtcGVyLWZ1bmN0aW9uXG5leHBvcnQgZnVuY3Rpb24gc2VydmVXZWJwYWNrQnJvd3NlcihcbiAgb3B0aW9uczogRGV2U2VydmVyQnVpbGRlck9wdGlvbnMsXG4gIGNvbnRleHQ6IEJ1aWxkZXJDb250ZXh0LFxuICB0cmFuc2Zvcm1zOiB7XG4gICAgd2VicGFja0NvbmZpZ3VyYXRpb24/OiBFeGVjdXRpb25UcmFuc2Zvcm1lcjx3ZWJwYWNrLkNvbmZpZ3VyYXRpb24+O1xuICAgIGxvZ2dpbmc/OiBXZWJwYWNrTG9nZ2luZ0NhbGxiYWNrO1xuICAgIGluZGV4SHRtbD86IEluZGV4SHRtbFRyYW5zZm9ybTtcbiAgfSA9IHt9LFxuKTogT2JzZXJ2YWJsZTxEZXZTZXJ2ZXJCdWlsZGVyT3V0cHV0PiB7XG4gIC8vIENoZWNrIEFuZ3VsYXIgdmVyc2lvbi5cbiAgY29uc3QgeyBsb2dnZXIsIHdvcmtzcGFjZVJvb3QgfSA9IGNvbnRleHQ7XG4gIGFzc2VydENvbXBhdGlibGVBbmd1bGFyVmVyc2lvbih3b3Jrc3BhY2VSb290KTtcblxuICBjb25zdCBicm93c2VyVGFyZ2V0ID0gdGFyZ2V0RnJvbVRhcmdldFN0cmluZyhvcHRpb25zLmJyb3dzZXJUYXJnZXQpO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIHNldHVwKCk6IFByb21pc2U8e1xuICAgIGJyb3dzZXJPcHRpb25zOiBCcm93c2VyQnVpbGRlclNjaGVtYTtcbiAgICB3ZWJwYWNrQ29uZmlnOiB3ZWJwYWNrLkNvbmZpZ3VyYXRpb247XG4gICAgcHJvamVjdFJvb3Q6IHN0cmluZztcbiAgfT4ge1xuICAgIGNvbnN0IHByb2plY3ROYW1lID0gY29udGV4dC50YXJnZXQ/LnByb2plY3Q7XG4gICAgaWYgKCFwcm9qZWN0TmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgYnVpbGRlciByZXF1aXJlcyBhIHRhcmdldC4nKTtcbiAgICB9XG5cbiAgICAvLyBQdXJnZSBvbGQgYnVpbGQgZGlzayBjYWNoZS5cbiAgICBhd2FpdCBwdXJnZVN0YWxlQnVpbGRDYWNoZShjb250ZXh0KTtcblxuICAgIG9wdGlvbnMucG9ydCA9IGF3YWl0IGNoZWNrUG9ydChvcHRpb25zLnBvcnQgPz8gNDIwMCwgb3B0aW9ucy5ob3N0IHx8ICdsb2NhbGhvc3QnKTtcblxuICAgIGlmIChvcHRpb25zLmhtcikge1xuICAgICAgbG9nZ2VyLndhcm4odGFncy5zdHJpcEluZGVudHNgTk9USUNFOiBIb3QgTW9kdWxlIFJlcGxhY2VtZW50IChITVIpIGlzIGVuYWJsZWQgZm9yIHRoZSBkZXYgc2VydmVyLlxuICAgICAgU2VlIGh0dHBzOi8vd2VicGFjay5qcy5vcmcvZ3VpZGVzL2hvdC1tb2R1bGUtcmVwbGFjZW1lbnQgZm9yIGluZm9ybWF0aW9uIG9uIHdvcmtpbmcgd2l0aCBITVIgZm9yIFdlYnBhY2suYCk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgIW9wdGlvbnMuZGlzYWJsZUhvc3RDaGVjayAmJlxuICAgICAgb3B0aW9ucy5ob3N0ICYmXG4gICAgICAhL14xMjdcXC5cXGQrXFwuXFxkK1xcLlxcZCsvZy50ZXN0KG9wdGlvbnMuaG9zdCkgJiZcbiAgICAgIG9wdGlvbnMuaG9zdCAhPT0gJ2xvY2FsaG9zdCdcbiAgICApIHtcbiAgICAgIGxvZ2dlci53YXJuKHRhZ3Muc3RyaXBJbmRlbnRgXG4gICAgICAgIFdhcm5pbmc6IFRoaXMgaXMgYSBzaW1wbGUgc2VydmVyIGZvciB1c2UgaW4gdGVzdGluZyBvciBkZWJ1Z2dpbmcgQW5ndWxhciBhcHBsaWNhdGlvbnNcbiAgICAgICAgbG9jYWxseS4gSXQgaGFzbid0IGJlZW4gcmV2aWV3ZWQgZm9yIHNlY3VyaXR5IGlzc3Vlcy5cblxuICAgICAgICBCaW5kaW5nIHRoaXMgc2VydmVyIHRvIGFuIG9wZW4gY29ubmVjdGlvbiBjYW4gcmVzdWx0IGluIGNvbXByb21pc2luZyB5b3VyIGFwcGxpY2F0aW9uIG9yXG4gICAgICAgIGNvbXB1dGVyLiBVc2luZyBhIGRpZmZlcmVudCBob3N0IHRoYW4gdGhlIG9uZSBwYXNzZWQgdG8gdGhlIFwiLS1ob3N0XCIgZmxhZyBtaWdodCByZXN1bHQgaW5cbiAgICAgICAgd2Vic29ja2V0IGNvbm5lY3Rpb24gaXNzdWVzLiBZb3UgbWlnaHQgbmVlZCB0byB1c2UgXCItLWRpc2FibGUtaG9zdC1jaGVja1wiIGlmIHRoYXQncyB0aGVcbiAgICAgICAgY2FzZS5cbiAgICAgIGApO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmRpc2FibGVIb3N0Q2hlY2spIHtcbiAgICAgIGxvZ2dlci53YXJuKHRhZ3Mub25lTGluZWBcbiAgICAgICAgV2FybmluZzogUnVubmluZyBhIHNlcnZlciB3aXRoIC0tZGlzYWJsZS1ob3N0LWNoZWNrIGlzIGEgc2VjdXJpdHkgcmlzay5cbiAgICAgICAgU2VlIGh0dHBzOi8vbWVkaXVtLmNvbS93ZWJwYWNrL3dlYnBhY2stZGV2LXNlcnZlci1taWRkbGV3YXJlLXNlY3VyaXR5LWlzc3Vlcy0xNDg5ZDk1MDg3NGFcbiAgICAgICAgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgICBgKTtcbiAgICB9XG4gICAgLy8gR2V0IHRoZSBicm93c2VyIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgdGFyZ2V0IG5hbWUuXG4gICAgY29uc3QgcmF3QnJvd3Nlck9wdGlvbnMgPSAoYXdhaXQgY29udGV4dC5nZXRUYXJnZXRPcHRpb25zKGJyb3dzZXJUYXJnZXQpKSBhcyBqc29uLkpzb25PYmplY3QgJlxuICAgICAgQnJvd3NlckJ1aWxkZXJTY2hlbWE7XG5cbiAgICBpZiAocmF3QnJvd3Nlck9wdGlvbnMub3V0cHV0SGFzaGluZyAmJiByYXdCcm93c2VyT3B0aW9ucy5vdXRwdXRIYXNoaW5nICE9PSBPdXRwdXRIYXNoaW5nLk5vbmUpIHtcbiAgICAgIC8vIERpc2FibGUgb3V0cHV0IGhhc2hpbmcgZm9yIGRldiBidWlsZCBhcyB0aGlzIGNhbiBjYXVzZSBtZW1vcnkgbGVha3NcbiAgICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3dlYnBhY2svd2VicGFjay1kZXYtc2VydmVyL2lzc3Vlcy8zNzcjaXNzdWVjb21tZW50LTI0MTI1ODQwNVxuICAgICAgcmF3QnJvd3Nlck9wdGlvbnMub3V0cHV0SGFzaGluZyA9IE91dHB1dEhhc2hpbmcuTm9uZTtcbiAgICAgIGxvZ2dlci53YXJuKGBXYXJuaW5nOiAnb3V0cHV0SGFzaGluZycgb3B0aW9uIGlzIGRpc2FibGVkIHdoZW4gdXNpbmcgdGhlIGRldi1zZXJ2ZXIuYCk7XG4gICAgfVxuXG4gICAgY29uc3QgbWV0YWRhdGEgPSBhd2FpdCBjb250ZXh0LmdldFByb2plY3RNZXRhZGF0YShwcm9qZWN0TmFtZSk7XG4gICAgY29uc3QgY2FjaGVPcHRpb25zID0gbm9ybWFsaXplQ2FjaGVPcHRpb25zKG1ldGFkYXRhLCBjb250ZXh0LndvcmtzcGFjZVJvb3QpO1xuXG4gICAgY29uc3QgYnJvd3Nlck5hbWUgPSBhd2FpdCBjb250ZXh0LmdldEJ1aWxkZXJOYW1lRm9yVGFyZ2V0KGJyb3dzZXJUYXJnZXQpO1xuXG4gICAgLy8gSXNzdWUgYSB3YXJuaW5nIHRoYXQgdGhlIGRldi1zZXJ2ZXIgZG9lcyBub3QgY3VycmVudGx5IHN1cHBvcnQgdGhlIGV4cGVyaW1lbnRhbCBlc2J1aWxkLVxuICAgIC8vIGJhc2VkIGJ1aWxkZXIgYW5kIHdpbGwgdXNlIFdlYnBhY2suXG4gICAgaWYgKGJyb3dzZXJOYW1lID09PSAnQGFuZ3VsYXItZGV2a2l0L2J1aWxkLWFuZ3VsYXI6YnJvd3Nlci1lc2J1aWxkJykge1xuICAgICAgbG9nZ2VyLndhcm4oXG4gICAgICAgICdXQVJOSU5HOiBUaGUgZXhwZXJpbWVudGFsIGVzYnVpbGQtYmFzZWQgYnVpbGRlciBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZCAnICtcbiAgICAgICAgICAnYnkgdGhlIGRldi1zZXJ2ZXIuIFRoZSBzdGFibGUgV2VicGFjay1iYXNlZCBidWlsZGVyIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLicsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGJyb3dzZXJPcHRpb25zID0gKGF3YWl0IGNvbnRleHQudmFsaWRhdGVPcHRpb25zKFxuICAgICAge1xuICAgICAgICAuLi5yYXdCcm93c2VyT3B0aW9ucyxcbiAgICAgICAgd2F0Y2g6IG9wdGlvbnMud2F0Y2gsXG4gICAgICAgIHZlcmJvc2U6IG9wdGlvbnMudmVyYm9zZSxcbiAgICAgICAgLy8gSW4gZGV2IHNlcnZlciB3ZSBzaG91bGQgbm90IGhhdmUgYnVkZ2V0cyBiZWNhdXNlIG9mIGV4dHJhIGxpYnMgc3VjaCBhcyBzb2Nrcy1qc1xuICAgICAgICBidWRnZXRzOiB1bmRlZmluZWQsXG4gICAgICB9IGFzIGpzb24uSnNvbk9iamVjdCAmIEJyb3dzZXJCdWlsZGVyU2NoZW1hLFxuICAgICAgYnJvd3Nlck5hbWUsXG4gICAgKSkgYXMganNvbi5Kc29uT2JqZWN0ICYgQnJvd3NlckJ1aWxkZXJTY2hlbWE7XG5cbiAgICBjb25zdCB7IHN0eWxlcywgc2NyaXB0cyB9ID0gbm9ybWFsaXplT3B0aW1pemF0aW9uKGJyb3dzZXJPcHRpb25zLm9wdGltaXphdGlvbik7XG4gICAgaWYgKHNjcmlwdHMgfHwgc3R5bGVzLm1pbmlmeSkge1xuICAgICAgbG9nZ2VyLmVycm9yKHRhZ3Muc3RyaXBJbmRlbnRzYFxuICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgIFRoaXMgaXMgYSBzaW1wbGUgc2VydmVyIGZvciB1c2UgaW4gdGVzdGluZyBvciBkZWJ1Z2dpbmcgQW5ndWxhciBhcHBsaWNhdGlvbnMgbG9jYWxseS5cbiAgICAgICAgSXQgaGFzbid0IGJlZW4gcmV2aWV3ZWQgZm9yIHNlY3VyaXR5IGlzc3Vlcy5cblxuICAgICAgICBET04nVCBVU0UgSVQgRk9SIFBST0RVQ1RJT04hXG4gICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgIGApO1xuICAgIH1cblxuICAgIGNvbnN0IHsgY29uZmlnLCBwcm9qZWN0Um9vdCwgaTE4biB9ID0gYXdhaXQgZ2VuZXJhdGVJMThuQnJvd3NlcldlYnBhY2tDb25maWdGcm9tQ29udGV4dChcbiAgICAgIGJyb3dzZXJPcHRpb25zLFxuICAgICAgY29udGV4dCxcbiAgICAgICh3Y28pID0+IFtnZXREZXZTZXJ2ZXJDb25maWcod2NvKSwgZ2V0Q29tbW9uQ29uZmlnKHdjbyksIGdldFN0eWxlc0NvbmZpZyh3Y28pXSxcbiAgICAgIG9wdGlvbnMsXG4gICAgKTtcblxuICAgIGlmICghY29uZmlnLmRldlNlcnZlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdXZWJwYWNrIERldiBTZXJ2ZXIgY29uZmlndXJhdGlvbiB3YXMgbm90IHNldC4nKTtcbiAgICB9XG5cbiAgICBsZXQgbG9jYWxlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaWYgKGkxOG4uc2hvdWxkSW5saW5lKSB7XG4gICAgICAvLyBEZXYtc2VydmVyIG9ubHkgc3VwcG9ydHMgb25lIGxvY2FsZVxuICAgICAgbG9jYWxlID0gWy4uLmkxOG4uaW5saW5lTG9jYWxlc11bMF07XG4gICAgfSBlbHNlIGlmIChpMThuLmhhc0RlZmluZWRTb3VyY2VMb2NhbGUpIHtcbiAgICAgIC8vIHVzZSBzb3VyY2UgbG9jYWxlIGlmIG5vdCBsb2NhbGl6aW5nXG4gICAgICBsb2NhbGUgPSBpMThuLnNvdXJjZUxvY2FsZTtcbiAgICB9XG5cbiAgICBsZXQgd2VicGFja0NvbmZpZyA9IGNvbmZpZztcblxuICAgIC8vIElmIGEgbG9jYWxlIGlzIGRlZmluZWQsIHNldHVwIGxvY2FsaXphdGlvblxuICAgIGlmIChsb2NhbGUpIHtcbiAgICAgIGlmIChpMThuLmlubGluZUxvY2FsZXMuc2l6ZSA+IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdUaGUgZGV2ZWxvcG1lbnQgc2VydmVyIG9ubHkgc3VwcG9ydHMgbG9jYWxpemluZyBhIHNpbmdsZSBsb2NhbGUgcGVyIGJ1aWxkLicsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHNldHVwTG9jYWxpemUobG9jYWxlLCBpMThuLCBicm93c2VyT3B0aW9ucywgd2VicGFja0NvbmZpZywgY2FjaGVPcHRpb25zLCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICBpZiAodHJhbnNmb3Jtcy53ZWJwYWNrQ29uZmlndXJhdGlvbikge1xuICAgICAgd2VicGFja0NvbmZpZyA9IGF3YWl0IHRyYW5zZm9ybXMud2VicGFja0NvbmZpZ3VyYXRpb24od2VicGFja0NvbmZpZyk7XG4gICAgfVxuXG4gICAgd2VicGFja0NvbmZpZy5wbHVnaW5zID8/PSBbXTtcblxuICAgIGlmIChicm93c2VyT3B0aW9ucy5pbmRleCkge1xuICAgICAgY29uc3QgeyBzY3JpcHRzID0gW10sIHN0eWxlcyA9IFtdLCBiYXNlSHJlZiB9ID0gYnJvd3Nlck9wdGlvbnM7XG4gICAgICBjb25zdCBlbnRyeXBvaW50cyA9IGdlbmVyYXRlRW50cnlQb2ludHMoe1xuICAgICAgICBzY3JpcHRzLFxuICAgICAgICBzdHlsZXMsXG4gICAgICAgIC8vIFRoZSBiZWxvdyBpcyBuZWVkZWQgYXMgb3RoZXJ3aXNlIEhNUiBmb3IgQ1NTIHdpbGwgYnJlYWsuXG4gICAgICAgIC8vIHN0eWxlcy5qcyBhbmQgcnVudGltZS5qcyBuZWVkcyB0byBiZSBsb2FkZWQgYXMgYSBub24tbW9kdWxlIHNjcmlwdHMgYXMgb3RoZXJ3aXNlIGBkb2N1bWVudC5jdXJyZW50U2NyaXB0YCB3aWxsIGJlIG51bGwuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWJwYWNrLWNvbnRyaWIvbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4vYmxvYi85MDQ0NWRkMWQ4MWRhMGMxMGI5YjBlOGExN2I0MTdkMDY1MTgxNmI4L3NyYy9obXIvaG90TW9kdWxlUmVwbGFjZW1lbnQuanMjTDM5XG4gICAgICAgIGlzSE1SRW5hYmxlZDogISF3ZWJwYWNrQ29uZmlnLmRldlNlcnZlcj8uaG90LFxuICAgICAgfSk7XG5cbiAgICAgIHdlYnBhY2tDb25maWcucGx1Z2lucy5wdXNoKFxuICAgICAgICBuZXcgSW5kZXhIdG1sV2VicGFja1BsdWdpbih7XG4gICAgICAgICAgaW5kZXhQYXRoOiBwYXRoLnJlc29sdmUod29ya3NwYWNlUm9vdCwgZ2V0SW5kZXhJbnB1dEZpbGUoYnJvd3Nlck9wdGlvbnMuaW5kZXgpKSxcbiAgICAgICAgICBvdXRwdXRQYXRoOiBnZXRJbmRleE91dHB1dEZpbGUoYnJvd3Nlck9wdGlvbnMuaW5kZXgpLFxuICAgICAgICAgIGJhc2VIcmVmLFxuICAgICAgICAgIGVudHJ5cG9pbnRzLFxuICAgICAgICAgIGRlcGxveVVybDogYnJvd3Nlck9wdGlvbnMuZGVwbG95VXJsLFxuICAgICAgICAgIHNyaTogYnJvd3Nlck9wdGlvbnMuc3VicmVzb3VyY2VJbnRlZ3JpdHksXG4gICAgICAgICAgY2FjaGU6IGNhY2hlT3B0aW9ucyxcbiAgICAgICAgICBwb3N0VHJhbnNmb3JtOiB0cmFuc2Zvcm1zLmluZGV4SHRtbCxcbiAgICAgICAgICBvcHRpbWl6YXRpb246IG5vcm1hbGl6ZU9wdGltaXphdGlvbihicm93c2VyT3B0aW9ucy5vcHRpbWl6YXRpb24pLFxuICAgICAgICAgIGNyb3NzT3JpZ2luOiBicm93c2VyT3B0aW9ucy5jcm9zc09yaWdpbixcbiAgICAgICAgICBsYW5nOiBsb2NhbGUsXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoYnJvd3Nlck9wdGlvbnMuc2VydmljZVdvcmtlcikge1xuICAgICAgd2VicGFja0NvbmZpZy5wbHVnaW5zLnB1c2goXG4gICAgICAgIG5ldyBTZXJ2aWNlV29ya2VyUGx1Z2luKHtcbiAgICAgICAgICBiYXNlSHJlZjogYnJvd3Nlck9wdGlvbnMuYmFzZUhyZWYsXG4gICAgICAgICAgcm9vdDogY29udGV4dC53b3Jrc3BhY2VSb290LFxuICAgICAgICAgIHByb2plY3RSb290LFxuICAgICAgICAgIG5nc3dDb25maWdQYXRoOiBicm93c2VyT3B0aW9ucy5uZ3N3Q29uZmlnUGF0aCxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBicm93c2VyT3B0aW9ucyxcbiAgICAgIHdlYnBhY2tDb25maWcsXG4gICAgICBwcm9qZWN0Um9vdCxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGZyb20oc2V0dXAoKSkucGlwZShcbiAgICBzd2l0Y2hNYXAoKHsgYnJvd3Nlck9wdGlvbnMsIHdlYnBhY2tDb25maWcgfSkgPT4ge1xuICAgICAgcmV0dXJuIHJ1bldlYnBhY2tEZXZTZXJ2ZXIod2VicGFja0NvbmZpZywgY29udGV4dCwge1xuICAgICAgICBsb2dnaW5nOiB0cmFuc2Zvcm1zLmxvZ2dpbmcgfHwgY3JlYXRlV2VicGFja0xvZ2dpbmdDYWxsYmFjayhicm93c2VyT3B0aW9ucywgbG9nZ2VyKSxcbiAgICAgICAgd2VicGFja0ZhY3Rvcnk6IHJlcXVpcmUoJ3dlYnBhY2snKSBhcyB0eXBlb2Ygd2VicGFjayxcbiAgICAgICAgd2VicGFja0RldlNlcnZlckZhY3Rvcnk6IHJlcXVpcmUoJ3dlYnBhY2stZGV2LXNlcnZlcicpIGFzIHR5cGVvZiB3ZWJwYWNrRGV2U2VydmVyLFxuICAgICAgfSkucGlwZShcbiAgICAgICAgY29uY2F0TWFwKGFzeW5jIChidWlsZEV2ZW50LCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHdlYnBhY2tSYXdTdGF0cyA9IGJ1aWxkRXZlbnQud2VicGFja1N0YXRzO1xuICAgICAgICAgIGlmICghd2VicGFja1Jhd1N0YXRzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dlYnBhY2sgc3RhdHMgYnVpbGQgcmVzdWx0IGlzIHJlcXVpcmVkLicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFJlc29sdmUgc2VydmUgYWRkcmVzcy5cbiAgICAgICAgICBjb25zdCBwdWJsaWNQYXRoID0gd2VicGFja0NvbmZpZy5kZXZTZXJ2ZXI/LmRldk1pZGRsZXdhcmU/LnB1YmxpY1BhdGg7XG5cbiAgICAgICAgICBjb25zdCBzZXJ2ZXJBZGRyZXNzID0gdXJsLmZvcm1hdCh7XG4gICAgICAgICAgICBwcm90b2NvbDogb3B0aW9ucy5zc2wgPyAnaHR0cHMnIDogJ2h0dHAnLFxuICAgICAgICAgICAgaG9zdG5hbWU6IG9wdGlvbnMuaG9zdCA9PT0gJzAuMC4wLjAnID8gJ2xvY2FsaG9zdCcgOiBvcHRpb25zLmhvc3QsXG4gICAgICAgICAgICBwb3J0OiBidWlsZEV2ZW50LnBvcnQsXG4gICAgICAgICAgICBwYXRobmFtZTogdHlwZW9mIHB1YmxpY1BhdGggPT09ICdzdHJpbmcnID8gcHVibGljUGF0aCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgbG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICB0YWdzLm9uZUxpbmVgXG4gICAgICAgICAgICAgICoqXG4gICAgICAgICAgICAgIEFuZ3VsYXIgTGl2ZSBEZXZlbG9wbWVudCBTZXJ2ZXIgaXMgbGlzdGVuaW5nIG9uICR7b3B0aW9ucy5ob3N0fToke2J1aWxkRXZlbnQucG9ydH0sXG4gICAgICAgICAgICAgIG9wZW4geW91ciBicm93c2VyIG9uICR7c2VydmVyQWRkcmVzc31cbiAgICAgICAgICAgICAgKipcbiAgICAgICAgICAgIGAgK1xuICAgICAgICAgICAgICAgICdcXG4nLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMub3Blbikge1xuICAgICAgICAgICAgICBjb25zdCBvcGVuID0gKGF3YWl0IGltcG9ydCgnb3BlbicpKS5kZWZhdWx0O1xuICAgICAgICAgICAgICBhd2FpdCBvcGVuKHNlcnZlckFkZHJlc3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChidWlsZEV2ZW50LnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBcXG4ke2NvbG9ycy5ncmVlbkJyaWdodChjb2xvcnMuc3ltYm9scy5jaGVjayl9IENvbXBpbGVkIHN1Y2Nlc3NmdWxseS5gKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbG9nZ2VyLmluZm8oYFxcbiR7Y29sb3JzLnJlZEJyaWdodChjb2xvcnMuc3ltYm9scy5jcm9zcyl9IEZhaWxlZCB0byBjb21waWxlLmApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5idWlsZEV2ZW50LFxuICAgICAgICAgICAgYmFzZVVybDogc2VydmVyQWRkcmVzcyxcbiAgICAgICAgICAgIHN0YXRzOiBnZW5lcmF0ZUJ1aWxkRXZlbnRTdGF0cyh3ZWJwYWNrUmF3U3RhdHMsIGJyb3dzZXJPcHRpb25zKSxcbiAgICAgICAgICB9IGFzIERldlNlcnZlckJ1aWxkZXJPdXRwdXQ7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9KSxcbiAgKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2V0dXBMb2NhbGl6ZShcbiAgbG9jYWxlOiBzdHJpbmcsXG4gIGkxOG46IEkxOG5PcHRpb25zLFxuICBicm93c2VyT3B0aW9uczogQnJvd3NlckJ1aWxkZXJTY2hlbWEsXG4gIHdlYnBhY2tDb25maWc6IHdlYnBhY2suQ29uZmlndXJhdGlvbixcbiAgY2FjaGVPcHRpb25zOiBOb3JtYWxpemVkQ2FjaGVkT3B0aW9ucyxcbiAgY29udGV4dDogQnVpbGRlckNvbnRleHQsXG4pIHtcbiAgY29uc3QgbG9jYWxlRGVzY3JpcHRpb24gPSBpMThuLmxvY2FsZXNbbG9jYWxlXTtcblxuICAvLyBNb2RpZnkgbWFpbiBlbnRyeXBvaW50IHRvIGluY2x1ZGUgbG9jYWxlIGRhdGFcbiAgaWYgKFxuICAgIGxvY2FsZURlc2NyaXB0aW9uPy5kYXRhUGF0aCAmJlxuICAgIHR5cGVvZiB3ZWJwYWNrQ29uZmlnLmVudHJ5ID09PSAnb2JqZWN0JyAmJlxuICAgICFBcnJheS5pc0FycmF5KHdlYnBhY2tDb25maWcuZW50cnkpICYmXG4gICAgd2VicGFja0NvbmZpZy5lbnRyeVsnbWFpbiddXG4gICkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHdlYnBhY2tDb25maWcuZW50cnlbJ21haW4nXSkpIHtcbiAgICAgIHdlYnBhY2tDb25maWcuZW50cnlbJ21haW4nXS51bnNoaWZ0KGxvY2FsZURlc2NyaXB0aW9uLmRhdGFQYXRoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2VicGFja0NvbmZpZy5lbnRyeVsnbWFpbiddID0gW1xuICAgICAgICBsb2NhbGVEZXNjcmlwdGlvbi5kYXRhUGF0aCxcbiAgICAgICAgd2VicGFja0NvbmZpZy5lbnRyeVsnbWFpbiddIGFzIHN0cmluZyxcbiAgICAgIF07XG4gICAgfVxuICB9XG5cbiAgbGV0IG1pc3NpbmdUcmFuc2xhdGlvbkJlaGF2aW9yID0gYnJvd3Nlck9wdGlvbnMuaTE4bk1pc3NpbmdUcmFuc2xhdGlvbiB8fCAnaWdub3JlJztcbiAgbGV0IHRyYW5zbGF0aW9uID0gbG9jYWxlRGVzY3JpcHRpb24/LnRyYW5zbGF0aW9uIHx8IHt9O1xuXG4gIGlmIChsb2NhbGUgPT09IGkxOG4uc291cmNlTG9jYWxlKSB7XG4gICAgbWlzc2luZ1RyYW5zbGF0aW9uQmVoYXZpb3IgPSAnaWdub3JlJztcbiAgICB0cmFuc2xhdGlvbiA9IHt9O1xuICB9XG5cbiAgY29uc3QgaTE4bkxvYWRlck9wdGlvbnMgPSB7XG4gICAgbG9jYWxlLFxuICAgIG1pc3NpbmdUcmFuc2xhdGlvbkJlaGF2aW9yLFxuICAgIHRyYW5zbGF0aW9uOiBpMThuLnNob3VsZElubGluZSA/IHRyYW5zbGF0aW9uIDogdW5kZWZpbmVkLFxuICAgIHRyYW5zbGF0aW9uRmlsZXM6IGxvY2FsZURlc2NyaXB0aW9uPy5maWxlcy5tYXAoKGZpbGUpID0+XG4gICAgICBwYXRoLnJlc29sdmUoY29udGV4dC53b3Jrc3BhY2VSb290LCBmaWxlLnBhdGgpLFxuICAgICksXG4gIH07XG5cbiAgY29uc3QgaTE4blJ1bGU6IHdlYnBhY2suUnVsZVNldFJ1bGUgPSB7XG4gICAgdGVzdDogL1xcLltjbV0/W3RqXXN4PyQvLFxuICAgIGVuZm9yY2U6ICdwb3N0JyxcbiAgICB1c2U6IFtcbiAgICAgIHtcbiAgICAgICAgbG9hZGVyOiByZXF1aXJlLnJlc29sdmUoJy4uLy4uL2JhYmVsL3dlYnBhY2stbG9hZGVyJyksXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBjYWNoZURpcmVjdG9yeTpcbiAgICAgICAgICAgIChjYWNoZU9wdGlvbnMuZW5hYmxlZCAmJiBwYXRoLmpvaW4oY2FjaGVPcHRpb25zLnBhdGgsICdiYWJlbC1kZXYtc2VydmVyLWkxOG4nKSkgfHxcbiAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgIGNhY2hlSWRlbnRpZmllcjogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgdHJhbnNsYXRpb25JbnRlZ3JpdHk6IGxvY2FsZURlc2NyaXB0aW9uPy5maWxlcy5tYXAoKGZpbGUpID0+IGZpbGUuaW50ZWdyaXR5KSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBpMThuOiBpMThuTG9hZGVyT3B0aW9ucyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgXSxcbiAgfTtcblxuICAvLyBHZXQgdGhlIHJ1bGVzIGFuZCBlbnN1cmUgdGhlIFdlYnBhY2sgY29uZmlndXJhdGlvbiBpcyBzZXR1cCBwcm9wZXJseVxuICBjb25zdCBydWxlcyA9IHdlYnBhY2tDb25maWcubW9kdWxlPy5ydWxlcyB8fCBbXTtcbiAgaWYgKCF3ZWJwYWNrQ29uZmlnLm1vZHVsZSkge1xuICAgIHdlYnBhY2tDb25maWcubW9kdWxlID0geyBydWxlcyB9O1xuICB9IGVsc2UgaWYgKCF3ZWJwYWNrQ29uZmlnLm1vZHVsZS5ydWxlcykge1xuICAgIHdlYnBhY2tDb25maWcubW9kdWxlLnJ1bGVzID0gcnVsZXM7XG4gIH1cblxuICBydWxlcy5wdXNoKGkxOG5SdWxlKTtcblxuICAvLyBBZGQgYSBwbHVnaW4gdG8gcmVsb2FkIHRyYW5zbGF0aW9uIGZpbGVzIG9uIHJlYnVpbGRzXG4gIGNvbnN0IGxvYWRlciA9IGF3YWl0IGNyZWF0ZVRyYW5zbGF0aW9uTG9hZGVyKCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gIHdlYnBhY2tDb25maWcucGx1Z2lucyEucHVzaCh7XG4gICAgYXBwbHk6IChjb21waWxlcjogd2VicGFjay5Db21waWxlcikgPT4ge1xuICAgICAgY29tcGlsZXIuaG9va3MudGhpc0NvbXBpbGF0aW9uLnRhcCgnYnVpbGQtYW5ndWxhcicsIChjb21waWxhdGlvbikgPT4ge1xuICAgICAgICBpZiAoaTE4bi5zaG91bGRJbmxpbmUgJiYgaTE4bkxvYWRlck9wdGlvbnMudHJhbnNsYXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIFJlbG9hZCB0cmFuc2xhdGlvbnNcbiAgICAgICAgICBsb2FkVHJhbnNsYXRpb25zKFxuICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgbG9jYWxlRGVzY3JpcHRpb24sXG4gICAgICAgICAgICBjb250ZXh0LndvcmtzcGFjZVJvb3QsXG4gICAgICAgICAgICBsb2FkZXIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHdhcm4obWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIGFkZFdhcm5pbmcoY29tcGlsYXRpb24sIG1lc3NhZ2UpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBlcnJvcihtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgYWRkRXJyb3IoY29tcGlsYXRpb24sIG1lc3NhZ2UpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGJyb3dzZXJPcHRpb25zLmkxOG5EdXBsaWNhdGVUcmFuc2xhdGlvbixcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaTE4bkxvYWRlck9wdGlvbnMudHJhbnNsYXRpb24gPSBsb2NhbGVEZXNjcmlwdGlvbi50cmFuc2xhdGlvbiA/PyB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbXBpbGF0aW9uLmhvb2tzLmZpbmlzaE1vZHVsZXMudGFwKCdidWlsZC1hbmd1bGFyJywgKCkgPT4ge1xuICAgICAgICAgIC8vIEFmdGVyIGxvYWRlcnMgYXJlIGZpbmlzaGVkLCBjbGVhciBvdXQgdGhlIG5vdyB1bm5lZWRlZCB0cmFuc2xhdGlvbnNcbiAgICAgICAgICBpMThuTG9hZGVyT3B0aW9ucy50cmFuc2xhdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9LFxuICB9KTtcbn1cbiJdfQ==
@@ -56,7 +56,6 @@ function runProtractor(root, options) {
56
56
  ]).toPromise();
57
57
  }
58
58
  async function updateWebdriver() {
59
- var _a;
60
59
  // The webdriver-manager update command can only be accessed via a deep import.
61
60
  const webdriverDeepImport = 'webdriver-manager/built/lib/cmds/update';
62
61
  let path;
@@ -76,7 +75,7 @@ async function updateWebdriver() {
76
75
  Update webdriver-manager manually and run 'ng e2e --no-webdriver-update' instead.
77
76
  `);
78
77
  }
79
- const webdriverUpdate = await (_a = path, Promise.resolve().then(() => __importStar(require(_a))));
78
+ const webdriverUpdate = await Promise.resolve(`${path}`).then(s => __importStar(require(s)));
80
79
  // const webdriverUpdate = await import(path) as typeof import ('webdriver-manager/built/lib/cmds/update');
81
80
  // run `webdriver-manager update --standalone false --gecko false --quiet`
82
81
  // if you change this, update the command comment in prev line
@@ -166,4 +165,4 @@ async function execute(options, context) {
166
165
  }
167
166
  exports.execute = execute;
168
167
  exports.default = (0, architect_1.createBuilder)(execute);
169
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyX2RldmtpdC9idWlsZF9hbmd1bGFyL3NyYy9idWlsZGVycy9wcm90cmFjdG9yL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUgseURBS21DO0FBQ25DLCtDQUFrRDtBQUNsRCwrQkFBK0I7QUFDL0IseUNBQTJCO0FBQzNCLHVDQUF3RDtBQUN4RCw2Q0FBa0Q7QUFXbEQsU0FBUyxhQUFhLENBQUMsSUFBWSxFQUFFLE9BQWlDO0lBQ3BFLE1BQU0sMEJBQTBCLEdBQWlFO1FBQy9GLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztRQUN4QixLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUztRQUN4RSxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7UUFDcEIsZUFBZSxFQUFFO1lBQ2YsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO1lBQ2xCLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVTtTQUMvQjtLQUNGLENBQUM7SUFFRixxRkFBcUY7SUFDckYsMERBQTBEO0lBQzFELG9EQUFvRDtJQUNwRCxPQUFPLElBQUEsaUNBQXlCLEVBQUMsSUFBSSxFQUFFLDJCQUEyQixFQUFFLE1BQU0sRUFBRTtRQUMxRSxJQUFBLGNBQU8sRUFBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLGdCQUFnQixDQUFDO1FBQ3ZDLDBCQUEwQjtLQUMzQixDQUFDLENBQUMsU0FBUyxFQUE0QixDQUFDO0FBQzNDLENBQUM7QUFFRCxLQUFLLFVBQVUsZUFBZTs7SUFDNUIsK0VBQStFO0lBQy9FLE1BQU0sbUJBQW1CLEdBQUcseUNBQXlDLENBQUM7SUFFdEUsSUFBSSxJQUFJLENBQUM7SUFDVCxJQUFJO1FBQ0YsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVyRCxJQUFJLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUMxRTtJQUFDLE9BQU8sS0FBSyxFQUFFO1FBQ2QsSUFBQSxxQkFBYSxFQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JCLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxrQkFBa0IsRUFBRTtZQUNyQyxNQUFNLEtBQUssQ0FBQztTQUNiO0tBQ0Y7SUFFRCxJQUFJLENBQUMsSUFBSSxFQUFFO1FBQ1QsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFJLENBQUMsWUFBWSxDQUFBOzs7S0FHaEMsQ0FBQyxDQUFDO0tBQ0o7SUFFRCxNQUFNLGVBQWUsR0FBRyxZQUFhLElBQUksMERBQUMsQ0FBQztJQUMzQywyR0FBMkc7SUFFM0csMEVBQTBFO0lBQzFFLDhEQUE4RDtJQUM5RCxPQUFPLGVBQWUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO1FBQ2pDLFVBQVUsRUFBRSxLQUFLO1FBQ2pCLEtBQUssRUFBRSxLQUFLO1FBQ1osS0FBSyxFQUFFLElBQUk7S0FDTyxDQUFDLENBQUM7QUFDeEIsQ0FBQztBQUlEOztHQUVHO0FBQ0ksS0FBSyxVQUFVLE9BQU8sQ0FDM0IsT0FBaUMsRUFDakMsT0FBdUI7SUFFdkIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ2pCLHFMQUFxTCxDQUN0TCxDQUFDO0lBRUYsZ0RBQWdEO0lBQ2hELElBQUksT0FBTyxDQUFDLGVBQWUsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFO1FBQzlDLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBSSxDQUFDLFlBQVksQ0FBQTs7O0tBR2hDLENBQUMsQ0FBQztLQUNKO0lBRUQsSUFBSSxPQUFPLENBQUMsZUFBZSxFQUFFO1FBQzNCLE1BQU0sZUFBZSxFQUFFLENBQUM7S0FDekI7SUFFRCxJQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO0lBQzlCLElBQUksTUFBTSxDQUFDO0lBRVgsSUFBSTtRQUNGLElBQUksT0FBTyxDQUFDLGVBQWUsRUFBRTtZQUMzQixNQUFNLE1BQU0sR0FBRyxJQUFBLGtDQUFzQixFQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUMvRCxNQUFNLGFBQWEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUU3RCxNQUFNLFNBQVMsR0FBRztnQkFDaEIsS0FBSyxFQUFFLEtBQUs7Z0JBQ1osVUFBVSxFQUFFLEtBQUs7YUFDMkIsQ0FBQztZQUUvQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFO2dCQUM5QixTQUFTLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7YUFDL0I7aUJBQU0sSUFBSSxPQUFPLGFBQWEsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFO2dCQUNqRCxPQUFPLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUM7YUFDbkM7aUJBQU07Z0JBQ0wsT0FBTyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQzthQUM3QztZQUVELElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUU7Z0JBQzlCLFNBQVMsQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQzthQUMvQjtpQkFBTSxJQUFJLE9BQU8sYUFBYSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUU7Z0JBQ2pELE9BQU8sQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQzthQUNuQztZQUVELE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ3pELE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUNuQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRTtnQkFDbkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQzthQUMzQjtZQUVELElBQUksT0FBTyxhQUFhLENBQUMsVUFBVSxLQUFLLFFBQVEsRUFBRTtnQkFDaEQsSUFBSSxVQUFVLEdBQUcsYUFBYSxDQUFDLFVBQVUsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUU7b0JBQ2pDLFVBQVUsR0FBRyxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxNQUFNLFVBQVUsRUFBRSxDQUFDO2lCQUN4RTtnQkFDRCxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUN4QyxPQUFPLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUNqQztpQkFBTSxJQUFJLE9BQU8sTUFBTSxDQUFDLE9BQU8sS0FBSyxRQUFRLEVBQUU7Z0JBQzdDLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO2FBQzFCO2lCQUFNLElBQUksT0FBTyxNQUFNLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTtnQkFDMUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7b0JBQ25CLFFBQVEsRUFBRSxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU07b0JBQzlDLFFBQVEsRUFBRSxPQUFPLENBQUMsSUFBSTtvQkFDdEIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO2lCQUM3QixDQUFDLENBQUM7YUFDSjtTQUNGO1FBRUQsK0VBQStFO1FBQy9FLGdEQUFnRDtRQUNoRCxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDckMsT0FBTyxJQUFJLEdBQUcsQ0FBQztTQUNoQjtRQUVELE9BQU8sTUFBTSxhQUFhLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxFQUFFLEdBQUcsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7S0FDNUU7SUFBQyxNQUFNO1FBQ04sT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQztLQUMzQjtZQUFTO1FBQ1IsTUFBTSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7S0FDdEI7QUFDSCxDQUFDO0FBbkZELDBCQW1GQztBQUVELGtCQUFlLElBQUEseUJBQWEsRUFBMkIsT0FBTyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtcbiAgQnVpbGRlckNvbnRleHQsXG4gIEJ1aWxkZXJPdXRwdXQsXG4gIGNyZWF0ZUJ1aWxkZXIsXG4gIHRhcmdldEZyb21UYXJnZXRTdHJpbmcsXG59IGZyb20gJ0Bhbmd1bGFyLWRldmtpdC9hcmNoaXRlY3QnO1xuaW1wb3J0IHsganNvbiwgdGFncyB9IGZyb20gJ0Bhbmd1bGFyLWRldmtpdC9jb3JlJztcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIHVybCBmcm9tICd1cmwnO1xuaW1wb3J0IHsgcnVuTW9kdWxlQXNPYnNlcnZhYmxlRm9yayB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IGFzc2VydElzRXJyb3IgfSBmcm9tICcuLi8uLi91dGlscy9lcnJvcic7XG5pbXBvcnQgeyBEZXZTZXJ2ZXJCdWlsZGVyT3B0aW9ucyB9IGZyb20gJy4uL2Rldi1zZXJ2ZXIvaW5kZXgnO1xuaW1wb3J0IHsgU2NoZW1hIGFzIFByb3RyYWN0b3JCdWlsZGVyT3B0aW9ucyB9IGZyb20gJy4vc2NoZW1hJztcblxuaW50ZXJmYWNlIEphc21pbmVOb2RlT3B0cyB7XG4gIGphc21pbmVOb2RlT3B0czoge1xuICAgIGdyZXA/OiBzdHJpbmc7XG4gICAgaW52ZXJ0R3JlcD86IGJvb2xlYW47XG4gIH07XG59XG5cbmZ1bmN0aW9uIHJ1blByb3RyYWN0b3Iocm9vdDogc3RyaW5nLCBvcHRpb25zOiBQcm90cmFjdG9yQnVpbGRlck9wdGlvbnMpOiBQcm9taXNlPEJ1aWxkZXJPdXRwdXQ+IHtcbiAgY29uc3QgYWRkaXRpb25hbFByb3RyYWN0b3JDb25maWc6IFBhcnRpYWw8UHJvdHJhY3RvckJ1aWxkZXJPcHRpb25zPiAmIFBhcnRpYWw8SmFzbWluZU5vZGVPcHRzPiA9IHtcbiAgICBiYXNlVXJsOiBvcHRpb25zLmJhc2VVcmwsXG4gICAgc3BlY3M6IG9wdGlvbnMuc3BlY3MgJiYgb3B0aW9ucy5zcGVjcy5sZW5ndGggPyBvcHRpb25zLnNwZWNzIDogdW5kZWZpbmVkLFxuICAgIHN1aXRlOiBvcHRpb25zLnN1aXRlLFxuICAgIGphc21pbmVOb2RlT3B0czoge1xuICAgICAgZ3JlcDogb3B0aW9ucy5ncmVwLFxuICAgICAgaW52ZXJ0R3JlcDogb3B0aW9ucy5pbnZlcnRHcmVwLFxuICAgIH0sXG4gIH07XG5cbiAgLy8gVE9ETzogUHJvdHJhY3RvciBtYW5hZ2VzIHByb2Nlc3MuZXhpdCBpdHNlbGYsIHNvIHRoaXMgdGFyZ2V0IHdpbGwgYWxsd2F5cyBxdWl0IHRoZVxuICAvLyBwcm9jZXNzLiBUbyB3b3JrIGFyb3VuZCB0aGlzIHdlIHJ1biBpdCBpbiBhIHN1YnByb2Nlc3MuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL3Byb3RyYWN0b3IvaXNzdWVzLzQxNjBcbiAgcmV0dXJuIHJ1bk1vZHVsZUFzT2JzZXJ2YWJsZUZvcmsocm9vdCwgJ3Byb3RyYWN0b3IvYnVpbHQvbGF1bmNoZXInLCAnaW5pdCcsIFtcbiAgICByZXNvbHZlKHJvb3QsIG9wdGlvbnMucHJvdHJhY3RvckNvbmZpZyksXG4gICAgYWRkaXRpb25hbFByb3RyYWN0b3JDb25maWcsXG4gIF0pLnRvUHJvbWlzZSgpIGFzIFByb21pc2U8QnVpbGRlck91dHB1dD47XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVdlYmRyaXZlcigpIHtcbiAgLy8gVGhlIHdlYmRyaXZlci1tYW5hZ2VyIHVwZGF0ZSBjb21tYW5kIGNhbiBvbmx5IGJlIGFjY2Vzc2VkIHZpYSBhIGRlZXAgaW1wb3J0LlxuICBjb25zdCB3ZWJkcml2ZXJEZWVwSW1wb3J0ID0gJ3dlYmRyaXZlci1tYW5hZ2VyL2J1aWx0L2xpYi9jbWRzL3VwZGF0ZSc7XG5cbiAgbGV0IHBhdGg7XG4gIHRyeSB7XG4gICAgY29uc3QgcHJvdHJhY3RvclBhdGggPSByZXF1aXJlLnJlc29sdmUoJ3Byb3RyYWN0b3InKTtcblxuICAgIHBhdGggPSByZXF1aXJlLnJlc29sdmUod2ViZHJpdmVyRGVlcEltcG9ydCwgeyBwYXRoczogW3Byb3RyYWN0b3JQYXRoXSB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBhc3NlcnRJc0Vycm9yKGVycm9yKTtcbiAgICBpZiAoZXJyb3IuY29kZSAhPT0gJ01PRFVMRV9OT1RfRk9VTkQnKSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBpZiAoIXBhdGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IodGFncy5zdHJpcEluZGVudHNgXG4gICAgICBDYW5ub3QgYXV0b21hdGljYWxseSBmaW5kIHdlYmRyaXZlci1tYW5hZ2VyIHRvIHVwZGF0ZS5cbiAgICAgIFVwZGF0ZSB3ZWJkcml2ZXItbWFuYWdlciBtYW51YWxseSBhbmQgcnVuICduZyBlMmUgLS1uby13ZWJkcml2ZXItdXBkYXRlJyBpbnN0ZWFkLlxuICAgIGApO1xuICB9XG5cbiAgY29uc3Qgd2ViZHJpdmVyVXBkYXRlID0gYXdhaXQgaW1wb3J0KHBhdGgpO1xuICAvLyBjb25zdCB3ZWJkcml2ZXJVcGRhdGUgPSBhd2FpdCBpbXBvcnQocGF0aCkgYXMgdHlwZW9mIGltcG9ydCAoJ3dlYmRyaXZlci1tYW5hZ2VyL2J1aWx0L2xpYi9jbWRzL3VwZGF0ZScpO1xuXG4gIC8vIHJ1biBgd2ViZHJpdmVyLW1hbmFnZXIgdXBkYXRlIC0tc3RhbmRhbG9uZSBmYWxzZSAtLWdlY2tvIGZhbHNlIC0tcXVpZXRgXG4gIC8vIGlmIHlvdSBjaGFuZ2UgdGhpcywgdXBkYXRlIHRoZSBjb21tYW5kIGNvbW1lbnQgaW4gcHJldiBsaW5lXG4gIHJldHVybiB3ZWJkcml2ZXJVcGRhdGUucHJvZ3JhbS5ydW4oe1xuICAgIHN0YW5kYWxvbmU6IGZhbHNlLFxuICAgIGdlY2tvOiBmYWxzZSxcbiAgICBxdWlldDogdHJ1ZSxcbiAgfSBhcyB1bmtub3duIGFzIEpTT04pO1xufVxuXG5leHBvcnQgeyBQcm90cmFjdG9yQnVpbGRlck9wdGlvbnMgfTtcblxuLyoqXG4gKiBAZXhwZXJpbWVudGFsIERpcmVjdCB1c2FnZSBvZiB0aGlzIGZ1bmN0aW9uIGlzIGNvbnNpZGVyZWQgZXhwZXJpbWVudGFsLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZShcbiAgb3B0aW9uczogUHJvdHJhY3RvckJ1aWxkZXJPcHRpb25zLFxuICBjb250ZXh0OiBCdWlsZGVyQ29udGV4dCxcbik6IFByb21pc2U8QnVpbGRlck91dHB1dD4ge1xuICBjb250ZXh0LmxvZ2dlci53YXJuKFxuICAgICdQcm90cmFjdG9yIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW5jbHVkaW5nIGl0cyBzdXBwb3J0IGluIHRoZSBBbmd1bGFyIENMSS4gRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYW5kIGFsdGVybmF0aXZlcywgcGxlYXNlIHNlZSBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9wcm90cmFjdG9yL2lzc3Vlcy81NTAyLicsXG4gICk7XG5cbiAgLy8gZW5zdXJlIHRoYXQgb25seSBvbmUgb2YgdGhlc2Ugb3B0aW9ucyBpcyB1c2VkXG4gIGlmIChvcHRpb25zLmRldlNlcnZlclRhcmdldCAmJiBvcHRpb25zLmJhc2VVcmwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IodGFncy5zdHJpcEluZGVudHNgXG4gICAgVGhlICdiYXNlVXJsJyBvcHRpb24gY2Fubm90IGJlIHVzZWQgd2l0aCAnZGV2U2VydmVyVGFyZ2V0Jy5cbiAgICBXaGVuIHByZXNlbnQsICdkZXZTZXJ2ZXJUYXJnZXQnIHdpbGwgYmUgdXNlZCB0byBhdXRvbWF0aWNhbGx5IHNldHVwICdiYXNlVXJsJyBmb3IgUHJvdHJhY3Rvci5cbiAgICBgKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLndlYmRyaXZlclVwZGF0ZSkge1xuICAgIGF3YWl0IHVwZGF0ZVdlYmRyaXZlcigpO1xuICB9XG5cbiAgbGV0IGJhc2VVcmwgPSBvcHRpb25zLmJhc2VVcmw7XG4gIGxldCBzZXJ2ZXI7XG5cbiAgdHJ5IHtcbiAgICBpZiAob3B0aW9ucy5kZXZTZXJ2ZXJUYXJnZXQpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IHRhcmdldEZyb21UYXJnZXRTdHJpbmcob3B0aW9ucy5kZXZTZXJ2ZXJUYXJnZXQpO1xuICAgICAgY29uc3Qgc2VydmVyT3B0aW9ucyA9IGF3YWl0IGNvbnRleHQuZ2V0VGFyZ2V0T3B0aW9ucyh0YXJnZXQpO1xuXG4gICAgICBjb25zdCBvdmVycmlkZXMgPSB7XG4gICAgICAgIHdhdGNoOiBmYWxzZSxcbiAgICAgICAgbGl2ZVJlbG9hZDogZmFsc2UsXG4gICAgICB9IGFzIERldlNlcnZlckJ1aWxkZXJPcHRpb25zICYganNvbi5Kc29uT2JqZWN0O1xuXG4gICAgICBpZiAob3B0aW9ucy5ob3N0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgb3ZlcnJpZGVzLmhvc3QgPSBvcHRpb25zLmhvc3Q7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzZXJ2ZXJPcHRpb25zLmhvc3QgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIG9wdGlvbnMuaG9zdCA9IHNlcnZlck9wdGlvbnMuaG9zdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wdGlvbnMuaG9zdCA9IG92ZXJyaWRlcy5ob3N0ID0gJ2xvY2FsaG9zdCc7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnBvcnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBvdmVycmlkZXMucG9ydCA9IG9wdGlvbnMucG9ydDtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHNlcnZlck9wdGlvbnMucG9ydCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgb3B0aW9ucy5wb3J0ID0gc2VydmVyT3B0aW9ucy5wb3J0O1xuICAgICAgfVxuXG4gICAgICBzZXJ2ZXIgPSBhd2FpdCBjb250ZXh0LnNjaGVkdWxlVGFyZ2V0KHRhcmdldCwgb3ZlcnJpZGVzKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNlcnZlci5yZXN1bHQ7XG4gICAgICBpZiAoIXJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlIH07XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygc2VydmVyT3B0aW9ucy5wdWJsaWNIb3N0ID09PSAnc3RyaW5nJykge1xuICAgICAgICBsZXQgcHVibGljSG9zdCA9IHNlcnZlck9wdGlvbnMucHVibGljSG9zdDtcbiAgICAgICAgaWYgKCEvXlxcdys6XFwvXFwvLy50ZXN0KHB1YmxpY0hvc3QpKSB7XG4gICAgICAgICAgcHVibGljSG9zdCA9IGAke3NlcnZlck9wdGlvbnMuc3NsID8gJ2h0dHBzJyA6ICdodHRwJ306Ly8ke3B1YmxpY0hvc3R9YDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjbGllbnRVcmwgPSB1cmwucGFyc2UocHVibGljSG9zdCk7XG4gICAgICAgIGJhc2VVcmwgPSB1cmwuZm9ybWF0KGNsaWVudFVybCk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiByZXN1bHQuYmFzZVVybCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgYmFzZVVybCA9IHJlc3VsdC5iYXNlVXJsO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcmVzdWx0LnBvcnQgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGJhc2VVcmwgPSB1cmwuZm9ybWF0KHtcbiAgICAgICAgICBwcm90b2NvbDogc2VydmVyT3B0aW9ucy5zc2wgPyAnaHR0cHMnIDogJ2h0dHAnLFxuICAgICAgICAgIGhvc3RuYW1lOiBvcHRpb25zLmhvc3QsXG4gICAgICAgICAgcG9ydDogcmVzdWx0LnBvcnQudG9TdHJpbmcoKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTGlrZSB0aGUgYmFzZVVybCBpbiBwcm90cmFjdG9yIGNvbmZpZyBmaWxlIHdoZW4gdXNpbmcgdGhlIEFQSSB3ZSBuZWVkIHRvIGFkZFxuICAgIC8vIGEgdHJhaWxpbmcgc2xhc2ggd2hlbiBwcm92aWRlIHRvIHRoZSBiYXNlVXJsLlxuICAgIGlmIChiYXNlVXJsICYmICFiYXNlVXJsLmVuZHNXaXRoKCcvJykpIHtcbiAgICAgIGJhc2VVcmwgKz0gJy8nO1xuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCBydW5Qcm90cmFjdG9yKGNvbnRleHQud29ya3NwYWNlUm9vdCwgeyAuLi5vcHRpb25zLCBiYXNlVXJsIH0pO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSB9O1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IHNlcnZlcj8uc3RvcCgpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUJ1aWxkZXI8UHJvdHJhY3RvckJ1aWxkZXJPcHRpb25zPihleGVjdXRlKTtcbiJdfQ==
168
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyX2RldmtpdC9idWlsZF9hbmd1bGFyL3NyYy9idWlsZGVycy9wcm90cmFjdG9yL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUgseURBS21DO0FBQ25DLCtDQUFrRDtBQUNsRCwrQkFBK0I7QUFDL0IseUNBQTJCO0FBQzNCLHVDQUF3RDtBQUN4RCw2Q0FBa0Q7QUFXbEQsU0FBUyxhQUFhLENBQUMsSUFBWSxFQUFFLE9BQWlDO0lBQ3BFLE1BQU0sMEJBQTBCLEdBQWlFO1FBQy9GLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztRQUN4QixLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUztRQUN4RSxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7UUFDcEIsZUFBZSxFQUFFO1lBQ2YsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO1lBQ2xCLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVTtTQUMvQjtLQUNGLENBQUM7SUFFRixxRkFBcUY7SUFDckYsMERBQTBEO0lBQzFELG9EQUFvRDtJQUNwRCxPQUFPLElBQUEsaUNBQXlCLEVBQUMsSUFBSSxFQUFFLDJCQUEyQixFQUFFLE1BQU0sRUFBRTtRQUMxRSxJQUFBLGNBQU8sRUFBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLGdCQUFnQixDQUFDO1FBQ3ZDLDBCQUEwQjtLQUMzQixDQUFDLENBQUMsU0FBUyxFQUE0QixDQUFDO0FBQzNDLENBQUM7QUFFRCxLQUFLLFVBQVUsZUFBZTtJQUM1QiwrRUFBK0U7SUFDL0UsTUFBTSxtQkFBbUIsR0FBRyx5Q0FBeUMsQ0FBQztJQUV0RSxJQUFJLElBQUksQ0FBQztJQUNULElBQUk7UUFDRixNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRXJELElBQUksR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLG1CQUFtQixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQzFFO0lBQUMsT0FBTyxLQUFLLEVBQUU7UUFDZCxJQUFBLHFCQUFhLEVBQUMsS0FBSyxDQUFDLENBQUM7UUFDckIsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGtCQUFrQixFQUFFO1lBQ3JDLE1BQU0sS0FBSyxDQUFDO1NBQ2I7S0FDRjtJQUVELElBQUksQ0FBQyxJQUFJLEVBQUU7UUFDVCxNQUFNLElBQUksS0FBSyxDQUFDLFdBQUksQ0FBQyxZQUFZLENBQUE7OztLQUdoQyxDQUFDLENBQUM7S0FDSjtJQUVELE1BQU0sZUFBZSxHQUFHLHlCQUFhLElBQUksdUNBQUMsQ0FBQztJQUMzQywyR0FBMkc7SUFFM0csMEVBQTBFO0lBQzFFLDhEQUE4RDtJQUM5RCxPQUFPLGVBQWUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO1FBQ2pDLFVBQVUsRUFBRSxLQUFLO1FBQ2pCLEtBQUssRUFBRSxLQUFLO1FBQ1osS0FBSyxFQUFFLElBQUk7S0FDTyxDQUFDLENBQUM7QUFDeEIsQ0FBQztBQUlEOztHQUVHO0FBQ0ksS0FBSyxVQUFVLE9BQU8sQ0FDM0IsT0FBaUMsRUFDakMsT0FBdUI7SUFFdkIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ2pCLHFMQUFxTCxDQUN0TCxDQUFDO0lBRUYsZ0RBQWdEO0lBQ2hELElBQUksT0FBTyxDQUFDLGVBQWUsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFO1FBQzlDLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBSSxDQUFDLFlBQVksQ0FBQTs7O0tBR2hDLENBQUMsQ0FBQztLQUNKO0lBRUQsSUFBSSxPQUFPLENBQUMsZUFBZSxFQUFFO1FBQzNCLE1BQU0sZUFBZSxFQUFFLENBQUM7S0FDekI7SUFFRCxJQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO0lBQzlCLElBQUksTUFBTSxDQUFDO0lBRVgsSUFBSTtRQUNGLElBQUksT0FBTyxDQUFDLGVBQWUsRUFBRTtZQUMzQixNQUFNLE1BQU0sR0FBRyxJQUFBLGtDQUFzQixFQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUMvRCxNQUFNLGFBQWEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUU3RCxNQUFNLFNBQVMsR0FBRztnQkFDaEIsS0FBSyxFQUFFLEtBQUs7Z0JBQ1osVUFBVSxFQUFFLEtBQUs7YUFDMkIsQ0FBQztZQUUvQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFO2dCQUM5QixTQUFTLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7YUFDL0I7aUJBQU0sSUFBSSxPQUFPLGFBQWEsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFO2dCQUNqRCxPQUFPLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUM7YUFDbkM7aUJBQU07Z0JBQ0wsT0FBTyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQzthQUM3QztZQUVELElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUU7Z0JBQzlCLFNBQVMsQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQzthQUMvQjtpQkFBTSxJQUFJLE9BQU8sYUFBYSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUU7Z0JBQ2pELE9BQU8sQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQzthQUNuQztZQUVELE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ3pELE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUNuQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRTtnQkFDbkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQzthQUMzQjtZQUVELElBQUksT0FBTyxhQUFhLENBQUMsVUFBVSxLQUFLLFFBQVEsRUFBRTtnQkFDaEQsSUFBSSxVQUFVLEdBQUcsYUFBYSxDQUFDLFVBQVUsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUU7b0JBQ2pDLFVBQVUsR0FBRyxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxNQUFNLFVBQVUsRUFBRSxDQUFDO2lCQUN4RTtnQkFDRCxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUN4QyxPQUFPLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUNqQztpQkFBTSxJQUFJLE9BQU8sTUFBTSxDQUFDLE9BQU8sS0FBSyxRQUFRLEVBQUU7Z0JBQzdDLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO2FBQzFCO2lCQUFNLElBQUksT0FBTyxNQUFNLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTtnQkFDMUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7b0JBQ25CLFFBQVEsRUFBRSxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU07b0JBQzlDLFFBQVEsRUFBRSxPQUFPLENBQUMsSUFBSTtvQkFDdEIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO2lCQUM3QixDQUFDLENBQUM7YUFDSjtTQUNGO1FBRUQsK0VBQStFO1FBQy9FLGdEQUFnRDtRQUNoRCxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDckMsT0FBTyxJQUFJLEdBQUcsQ0FBQztTQUNoQjtRQUVELE9BQU8sTUFBTSxhQUFhLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxFQUFFLEdBQUcsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7S0FDNUU7SUFBQyxNQUFNO1FBQ04sT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQztLQUMzQjtZQUFTO1FBQ1IsTUFBTSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7S0FDdEI7QUFDSCxDQUFDO0FBbkZELDBCQW1GQztBQUVELGtCQUFlLElBQUEseUJBQWEsRUFBMkIsT0FBTyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtcbiAgQnVpbGRlckNvbnRleHQsXG4gIEJ1aWxkZXJPdXRwdXQsXG4gIGNyZWF0ZUJ1aWxkZXIsXG4gIHRhcmdldEZyb21UYXJnZXRTdHJpbmcsXG59IGZyb20gJ0Bhbmd1bGFyLWRldmtpdC9hcmNoaXRlY3QnO1xuaW1wb3J0IHsganNvbiwgdGFncyB9IGZyb20gJ0Bhbmd1bGFyLWRldmtpdC9jb3JlJztcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIHVybCBmcm9tICd1cmwnO1xuaW1wb3J0IHsgcnVuTW9kdWxlQXNPYnNlcnZhYmxlRm9yayB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IGFzc2VydElzRXJyb3IgfSBmcm9tICcuLi8uLi91dGlscy9lcnJvcic7XG5pbXBvcnQgeyBEZXZTZXJ2ZXJCdWlsZGVyT3B0aW9ucyB9IGZyb20gJy4uL2Rldi1zZXJ2ZXIvaW5kZXgnO1xuaW1wb3J0IHsgU2NoZW1hIGFzIFByb3RyYWN0b3JCdWlsZGVyT3B0aW9ucyB9IGZyb20gJy4vc2NoZW1hJztcblxuaW50ZXJmYWNlIEphc21pbmVOb2RlT3B0cyB7XG4gIGphc21pbmVOb2RlT3B0czoge1xuICAgIGdyZXA/OiBzdHJpbmc7XG4gICAgaW52ZXJ0R3JlcD86IGJvb2xlYW47XG4gIH07XG59XG5cbmZ1bmN0aW9uIHJ1blByb3RyYWN0b3Iocm9vdDogc3RyaW5nLCBvcHRpb25zOiBQcm90cmFjdG9yQnVpbGRlck9wdGlvbnMpOiBQcm9taXNlPEJ1aWxkZXJPdXRwdXQ+IHtcbiAgY29uc3QgYWRkaXRpb25hbFByb3RyYWN0b3JDb25maWc6IFBhcnRpYWw8UHJvdHJhY3RvckJ1aWxkZXJPcHRpb25zPiAmIFBhcnRpYWw8SmFzbWluZU5vZGVPcHRzPiA9IHtcbiAgICBiYXNlVXJsOiBvcHRpb25zLmJhc2VVcmwsXG4gICAgc3BlY3M6IG9wdGlvbnMuc3BlY3MgJiYgb3B0aW9ucy5zcGVjcy5sZW5ndGggPyBvcHRpb25zLnNwZWNzIDogdW5kZWZpbmVkLFxuICAgIHN1aXRlOiBvcHRpb25zLnN1aXRlLFxuICAgIGphc21pbmVOb2RlT3B0czoge1xuICAgICAgZ3JlcDogb3B0aW9ucy5ncmVwLFxuICAgICAgaW52ZXJ0R3JlcDogb3B0aW9ucy5pbnZlcnRHcmVwLFxuICAgIH0sXG4gIH07XG5cbiAgLy8gVE9ETzogUHJvdHJhY3RvciBtYW5hZ2VzIHByb2Nlc3MuZXhpdCBpdHNlbGYsIHNvIHRoaXMgdGFyZ2V0IHdpbGwgYWxsd2F5cyBxdWl0IHRoZVxuICAvLyBwcm9jZXNzLiBUbyB3b3JrIGFyb3VuZCB0aGlzIHdlIHJ1biBpdCBpbiBhIHN1YnByb2Nlc3MuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL3Byb3RyYWN0b3IvaXNzdWVzLzQxNjBcbiAgcmV0dXJuIHJ1bk1vZHVsZUFzT2JzZXJ2YWJsZUZvcmsocm9vdCwgJ3Byb3RyYWN0b3IvYnVpbHQvbGF1bmNoZXInLCAnaW5pdCcsIFtcbiAgICByZXNvbHZlKHJvb3QsIG9wdGlvbnMucHJvdHJhY3RvckNvbmZpZyksXG4gICAgYWRkaXRpb25hbFByb3RyYWN0b3JDb25maWcsXG4gIF0pLnRvUHJvbWlzZSgpIGFzIFByb21pc2U8QnVpbGRlck91dHB1dD47XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVdlYmRyaXZlcigpIHtcbiAgLy8gVGhlIHdlYmRyaXZlci1tYW5hZ2VyIHVwZGF0ZSBjb21tYW5kIGNhbiBvbmx5IGJlIGFjY2Vzc2VkIHZpYSBhIGRlZXAgaW1wb3J0LlxuICBjb25zdCB3ZWJkcml2ZXJEZWVwSW1wb3J0ID0gJ3dlYmRyaXZlci1tYW5hZ2VyL2J1aWx0L2xpYi9jbWRzL3VwZGF0ZSc7XG5cbiAgbGV0IHBhdGg7XG4gIHRyeSB7XG4gICAgY29uc3QgcHJvdHJhY3RvclBhdGggPSByZXF1aXJlLnJlc29sdmUoJ3Byb3RyYWN0b3InKTtcblxuICAgIHBhdGggPSByZXF1aXJlLnJlc29sdmUod2ViZHJpdmVyRGVlcEltcG9ydCwgeyBwYXRoczogW3Byb3RyYWN0b3JQYXRoXSB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBhc3NlcnRJc0Vycm9yKGVycm9yKTtcbiAgICBpZiAoZXJyb3IuY29kZSAhPT0gJ01PRFVMRV9OT1RfRk9VTkQnKSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBpZiAoIXBhdGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IodGFncy5zdHJpcEluZGVudHNgXG4gICAgICBDYW5ub3QgYXV0b21hdGljYWxseSBmaW5kIHdlYmRyaXZlci1tYW5hZ2VyIHRvIHVwZGF0ZS5cbiAgICAgIFVwZGF0ZSB3ZWJkcml2ZXItbWFuYWdlciBtYW51YWxseSBhbmQgcnVuICduZyBlMmUgLS1uby13ZWJkcml2ZXItdXBkYXRlJyBpbnN0ZWFkLlxuICAgIGApO1xuICB9XG5cbiAgY29uc3Qgd2ViZHJpdmVyVXBkYXRlID0gYXdhaXQgaW1wb3J0KHBhdGgpO1xuICAvLyBjb25zdCB3ZWJkcml2ZXJVcGRhdGUgPSBhd2FpdCBpbXBvcnQocGF0aCkgYXMgdHlwZW9mIGltcG9ydCAoJ3dlYmRyaXZlci1tYW5hZ2VyL2J1aWx0L2xpYi9jbWRzL3VwZGF0ZScpO1xuXG4gIC8vIHJ1biBgd2ViZHJpdmVyLW1hbmFnZXIgdXBkYXRlIC0tc3RhbmRhbG9uZSBmYWxzZSAtLWdlY2tvIGZhbHNlIC0tcXVpZXRgXG4gIC8vIGlmIHlvdSBjaGFuZ2UgdGhpcywgdXBkYXRlIHRoZSBjb21tYW5kIGNvbW1lbnQgaW4gcHJldiBsaW5lXG4gIHJldHVybiB3ZWJkcml2ZXJVcGRhdGUucHJvZ3JhbS5ydW4oe1xuICAgIHN0YW5kYWxvbmU6IGZhbHNlLFxuICAgIGdlY2tvOiBmYWxzZSxcbiAgICBxdWlldDogdHJ1ZSxcbiAgfSBhcyB1bmtub3duIGFzIEpTT04pO1xufVxuXG5leHBvcnQgeyBQcm90cmFjdG9yQnVpbGRlck9wdGlvbnMgfTtcblxuLyoqXG4gKiBAZXhwZXJpbWVudGFsIERpcmVjdCB1c2FnZSBvZiB0aGlzIGZ1bmN0aW9uIGlzIGNvbnNpZGVyZWQgZXhwZXJpbWVudGFsLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZShcbiAgb3B0aW9uczogUHJvdHJhY3RvckJ1aWxkZXJPcHRpb25zLFxuICBjb250ZXh0OiBCdWlsZGVyQ29udGV4dCxcbik6IFByb21pc2U8QnVpbGRlck91dHB1dD4ge1xuICBjb250ZXh0LmxvZ2dlci53YXJuKFxuICAgICdQcm90cmFjdG9yIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW5jbHVkaW5nIGl0cyBzdXBwb3J0IGluIHRoZSBBbmd1bGFyIENMSS4gRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYW5kIGFsdGVybmF0aXZlcywgcGxlYXNlIHNlZSBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9wcm90cmFjdG9yL2lzc3Vlcy81NTAyLicsXG4gICk7XG5cbiAgLy8gZW5zdXJlIHRoYXQgb25seSBvbmUgb2YgdGhlc2Ugb3B0aW9ucyBpcyB1c2VkXG4gIGlmIChvcHRpb25zLmRldlNlcnZlclRhcmdldCAmJiBvcHRpb25zLmJhc2VVcmwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IodGFncy5zdHJpcEluZGVudHNgXG4gICAgVGhlICdiYXNlVXJsJyBvcHRpb24gY2Fubm90IGJlIHVzZWQgd2l0aCAnZGV2U2VydmVyVGFyZ2V0Jy5cbiAgICBXaGVuIHByZXNlbnQsICdkZXZTZXJ2ZXJUYXJnZXQnIHdpbGwgYmUgdXNlZCB0byBhdXRvbWF0aWNhbGx5IHNldHVwICdiYXNlVXJsJyBmb3IgUHJvdHJhY3Rvci5cbiAgICBgKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLndlYmRyaXZlclVwZGF0ZSkge1xuICAgIGF3YWl0IHVwZGF0ZVdlYmRyaXZlcigpO1xuICB9XG5cbiAgbGV0IGJhc2VVcmwgPSBvcHRpb25zLmJhc2VVcmw7XG4gIGxldCBzZXJ2ZXI7XG5cbiAgdHJ5IHtcbiAgICBpZiAob3B0aW9ucy5kZXZTZXJ2ZXJUYXJnZXQpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IHRhcmdldEZyb21UYXJnZXRTdHJpbmcob3B0aW9ucy5kZXZTZXJ2ZXJUYXJnZXQpO1xuICAgICAgY29uc3Qgc2VydmVyT3B0aW9ucyA9IGF3YWl0IGNvbnRleHQuZ2V0VGFyZ2V0T3B0aW9ucyh0YXJnZXQpO1xuXG4gICAgICBjb25zdCBvdmVycmlkZXMgPSB7XG4gICAgICAgIHdhdGNoOiBmYWxzZSxcbiAgICAgICAgbGl2ZVJlbG9hZDogZmFsc2UsXG4gICAgICB9IGFzIERldlNlcnZlckJ1aWxkZXJPcHRpb25zICYganNvbi5Kc29uT2JqZWN0O1xuXG4gICAgICBpZiAob3B0aW9ucy5ob3N0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgb3ZlcnJpZGVzLmhvc3QgPSBvcHRpb25zLmhvc3Q7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzZXJ2ZXJPcHRpb25zLmhvc3QgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIG9wdGlvbnMuaG9zdCA9IHNlcnZlck9wdGlvbnMuaG9zdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wdGlvbnMuaG9zdCA9IG92ZXJyaWRlcy5ob3N0ID0gJ2xvY2FsaG9zdCc7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnBvcnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBvdmVycmlkZXMucG9ydCA9IG9wdGlvbnMucG9ydDtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHNlcnZlck9wdGlvbnMucG9ydCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgb3B0aW9ucy5wb3J0ID0gc2VydmVyT3B0aW9ucy5wb3J0O1xuICAgICAgfVxuXG4gICAgICBzZXJ2ZXIgPSBhd2FpdCBjb250ZXh0LnNjaGVkdWxlVGFyZ2V0KHRhcmdldCwgb3ZlcnJpZGVzKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNlcnZlci5yZXN1bHQ7XG4gICAgICBpZiAoIXJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlIH07XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygc2VydmVyT3B0aW9ucy5wdWJsaWNIb3N0ID09PSAnc3RyaW5nJykge1xuICAgICAgICBsZXQgcHVibGljSG9zdCA9IHNlcnZlck9wdGlvbnMucHVibGljSG9zdDtcbiAgICAgICAgaWYgKCEvXlxcdys6XFwvXFwvLy50ZXN0KHB1YmxpY0hvc3QpKSB7XG4gICAgICAgICAgcHVibGljSG9zdCA9IGAke3NlcnZlck9wdGlvbnMuc3NsID8gJ2h0dHBzJyA6ICdodHRwJ306Ly8ke3B1YmxpY0hvc3R9YDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjbGllbnRVcmwgPSB1cmwucGFyc2UocHVibGljSG9zdCk7XG4gICAgICAgIGJhc2VVcmwgPSB1cmwuZm9ybWF0KGNsaWVudFVybCk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiByZXN1bHQuYmFzZVVybCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgYmFzZVVybCA9IHJlc3VsdC5iYXNlVXJsO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcmVzdWx0LnBvcnQgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGJhc2VVcmwgPSB1cmwuZm9ybWF0KHtcbiAgICAgICAgICBwcm90b2NvbDogc2VydmVyT3B0aW9ucy5zc2wgPyAnaHR0cHMnIDogJ2h0dHAnLFxuICAgICAgICAgIGhvc3RuYW1lOiBvcHRpb25zLmhvc3QsXG4gICAgICAgICAgcG9ydDogcmVzdWx0LnBvcnQudG9TdHJpbmcoKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTGlrZSB0aGUgYmFzZVVybCBpbiBwcm90cmFjdG9yIGNvbmZpZyBmaWxlIHdoZW4gdXNpbmcgdGhlIEFQSSB3ZSBuZWVkIHRvIGFkZFxuICAgIC8vIGEgdHJhaWxpbmcgc2xhc2ggd2hlbiBwcm92aWRlIHRvIHRoZSBiYXNlVXJsLlxuICAgIGlmIChiYXNlVXJsICYmICFiYXNlVXJsLmVuZHNXaXRoKCcvJykpIHtcbiAgICAgIGJhc2VVcmwgKz0gJy8nO1xuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCBydW5Qcm90cmFjdG9yKGNvbnRleHQud29ya3NwYWNlUm9vdCwgeyAuLi5vcHRpb25zLCBiYXNlVXJsIH0pO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSB9O1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IHNlcnZlcj8uc3RvcCgpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUJ1aWxkZXI8UHJvdHJhY3RvckJ1aWxkZXJPcHRpb25zPihleGVjdXRlKTtcbiJdfQ==
@@ -16,10 +16,10 @@ function default_1(content, map) {
16
16
  const source = `${content}
17
17
 
18
18
  // EXPORTS added by @angular-devkit/build-angular
19
- export { renderModule, ɵSERVER_CONTEXT } from '@angular/platform-server';
19
+ export { renderApplication, renderModule, ɵSERVER_CONTEXT } from '@angular/platform-server';
20
20
  `;
21
21
  this.callback(null, source, map);
22
22
  return;
23
23
  }
24
24
  exports.default = default_1;
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhdGZvcm0tc2VydmVyLWV4cG9ydHMtbG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhcl9kZXZraXQvYnVpbGRfYW5ndWxhci9zcmMvYnVpbGRlcnMvc2VydmVyL3BsYXRmb3JtLXNlcnZlci1leHBvcnRzLWxvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOztBQUVIOzs7O0dBSUc7QUFDSCxtQkFFRSxPQUFlLEVBQ2YsR0FBOEQ7SUFFOUQsTUFBTSxNQUFNLEdBQUcsR0FBRyxPQUFPOzs7O0dBSXhCLENBQUM7SUFFRixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFFakMsT0FBTztBQUNULENBQUM7QUFkRCw0QkFjQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG4vKipcbiAqIFRoaXMgbG9hZGVyIGlzIG5lZWRlZCB0byBhZGQgYWRkaXRpb25hbCBleHBvcnRzIGFuZCBpcyBhIHdvcmthcm91bmQgZm9yIGEgV2VicGFjayBidWcgdGhhdCBkb2Vzbid0XG4gKiBhbGxvdyBleHBvcnRzIGZyb20gbXVsdGlwbGUgZmlsZXMgaW4gdGhlIHNhbWUgZW50cnkuXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWJwYWNrL3dlYnBhY2svaXNzdWVzLzE1OTM2LlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoXG4gIHRoaXM6IGltcG9ydCgnd2VicGFjaycpLkxvYWRlckNvbnRleHQ8e30+LFxuICBjb250ZW50OiBzdHJpbmcsXG4gIG1hcDogUGFyYW1ldGVyczxpbXBvcnQoJ3dlYnBhY2snKS5Mb2FkZXJEZWZpbml0aW9uRnVuY3Rpb24+WzFdLFxuKSB7XG4gIGNvbnN0IHNvdXJjZSA9IGAke2NvbnRlbnR9XG5cbiAgLy8gRVhQT1JUUyBhZGRlZCBieSBAYW5ndWxhci1kZXZraXQvYnVpbGQtYW5ndWxhclxuICBleHBvcnQgeyByZW5kZXJNb2R1bGUsIMm1U0VSVkVSX0NPTlRFWFQgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1zZXJ2ZXInO1xuICBgO1xuXG4gIHRoaXMuY2FsbGJhY2sobnVsbCwgc291cmNlLCBtYXApO1xuXG4gIHJldHVybjtcbn1cbiJdfQ==
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhdGZvcm0tc2VydmVyLWV4cG9ydHMtbG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhcl9kZXZraXQvYnVpbGRfYW5ndWxhci9zcmMvYnVpbGRlcnMvc2VydmVyL3BsYXRmb3JtLXNlcnZlci1leHBvcnRzLWxvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOztBQUVIOzs7O0dBSUc7QUFDSCxtQkFFRSxPQUFlLEVBQ2YsR0FBOEQ7SUFFOUQsTUFBTSxNQUFNLEdBQUcsR0FBRyxPQUFPOzs7O0dBSXhCLENBQUM7SUFFRixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFFakMsT0FBTztBQUNULENBQUM7QUFkRCw0QkFjQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG4vKipcbiAqIFRoaXMgbG9hZGVyIGlzIG5lZWRlZCB0byBhZGQgYWRkaXRpb25hbCBleHBvcnRzIGFuZCBpcyBhIHdvcmthcm91bmQgZm9yIGEgV2VicGFjayBidWcgdGhhdCBkb2Vzbid0XG4gKiBhbGxvdyBleHBvcnRzIGZyb20gbXVsdGlwbGUgZmlsZXMgaW4gdGhlIHNhbWUgZW50cnkuXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWJwYWNrL3dlYnBhY2svaXNzdWVzLzE1OTM2LlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoXG4gIHRoaXM6IGltcG9ydCgnd2VicGFjaycpLkxvYWRlckNvbnRleHQ8e30+LFxuICBjb250ZW50OiBzdHJpbmcsXG4gIG1hcDogUGFyYW1ldGVyczxpbXBvcnQoJ3dlYnBhY2snKS5Mb2FkZXJEZWZpbml0aW9uRnVuY3Rpb24+WzFdLFxuKSB7XG4gIGNvbnN0IHNvdXJjZSA9IGAke2NvbnRlbnR9XG5cbiAgLy8gRVhQT1JUUyBhZGRlZCBieSBAYW5ndWxhci1kZXZraXQvYnVpbGQtYW5ndWxhclxuICBleHBvcnQgeyByZW5kZXJBcHBsaWNhdGlvbiwgcmVuZGVyTW9kdWxlLCDJtVNFUlZFUl9DT05URVhUIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tc2VydmVyJztcbiAgYDtcblxuICB0aGlzLmNhbGxiYWNrKG51bGwsIHNvdXJjZSwgbWFwKTtcblxuICByZXR1cm47XG59XG4iXX0=
@@ -59,4 +59,4 @@ class Spinner {
59
59
  }
60
60
  exports.Spinner = Spinner;
61
61
  _Spinner_isTTY = new WeakMap();
62
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Bpbm5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXJfZGV2a2l0L2J1aWxkX2FuZ3VsYXIvc3JjL3V0aWxzL3NwaW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7O0FBRUgsOENBQXNCO0FBQ3RCLG1DQUFpQztBQUNqQywrQkFBOEI7QUFFOUIsTUFBYSxPQUFPO0lBT2xCLFlBQVksSUFBYTtRQUp6Qix3REFBd0Q7UUFDeEQsWUFBTyxHQUFHLElBQUksQ0FBQztRQUNmLHlCQUFrQixJQUFBLFdBQUssR0FBRSxFQUFDO1FBR3hCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBQSxhQUFHLEVBQUM7WUFDakIsSUFBSTtZQUNKLDBFQUEwRTtZQUMxRSx1Q0FBdUM7WUFDdkMsVUFBVSxFQUFFLEtBQUs7WUFDakIsWUFBWSxFQUFFLEtBQUs7WUFDbkIsU0FBUyxFQUFFLHVCQUFBLElBQUksc0JBQU87U0FDdkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQUksSUFBSSxDQUFDLElBQVk7UUFDbkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxJQUFJLENBQUMsdUJBQUEsSUFBSSxzQkFBTyxDQUFDO0lBQ2pELENBQUM7SUFFRCxPQUFPLENBQUMsSUFBYTtRQUNuQixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDaEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDNUI7SUFDSCxDQUFDO0lBRUQsSUFBSSxDQUFDLElBQWE7UUFDaEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLGNBQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsSUFBSTtRQUNGLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFhO1FBQ2pCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMxQjtJQUNILENBQUM7Q0FDRjtBQTdDRCwwQkE2Q0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IG9yYSBmcm9tICdvcmEnO1xuaW1wb3J0IHsgY29sb3JzIH0gZnJvbSAnLi9jb2xvcic7XG5pbXBvcnQgeyBpc1RUWSB9IGZyb20gJy4vdHR5JztcblxuZXhwb3J0IGNsYXNzIFNwaW5uZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IHNwaW5uZXI6IG9yYS5PcmE7XG5cbiAgLyoqIFdoZW4gZmFsc2UsIG9ubHkgZmFpbCBtZXNzYWdlcyB3aWxsIGJlIGRpc3BsYXllZC4gKi9cbiAgZW5hYmxlZCA9IHRydWU7XG4gIHJlYWRvbmx5ICNpc1RUWSA9IGlzVFRZKCk7XG5cbiAgY29uc3RydWN0b3IodGV4dD86IHN0cmluZykge1xuICAgIHRoaXMuc3Bpbm5lciA9IG9yYSh7XG4gICAgICB0ZXh0LFxuICAgICAgLy8gVGhlIGJlbG93IDIgb3B0aW9ucyBhcmUgbmVlZGVkIGJlY2F1c2Ugb3RoZXJ3aXNlIENUUkwrQyB3aWxsIGJlIGRlbGF5ZWRcbiAgICAgIC8vIHdoZW4gdGhlIHVuZGVybHlpbmcgcHJvY2VzcyBpcyBzeW5jLlxuICAgICAgaGlkZUN1cnNvcjogZmFsc2UsXG4gICAgICBkaXNjYXJkU3RkaW46IGZhbHNlLFxuICAgICAgaXNFbmFibGVkOiB0aGlzLiNpc1RUWSxcbiAgICB9KTtcbiAgfVxuXG4gIHNldCB0ZXh0KHRleHQ6IHN0cmluZykge1xuICAgIHRoaXMuc3Bpbm5lci50ZXh0ID0gdGV4dDtcbiAgfVxuXG4gIGdldCBpc1NwaW5uaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNwaW5uZXIuaXNTcGlubmluZyB8fCAhdGhpcy4jaXNUVFk7XG4gIH1cblxuICBzdWNjZWVkKHRleHQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lbmFibGVkKSB7XG4gICAgICB0aGlzLnNwaW5uZXIuc3VjY2VlZCh0ZXh0KTtcbiAgICB9XG4gIH1cblxuICBmYWlsKHRleHQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNwaW5uZXIuZmFpbCh0ZXh0ICYmIGNvbG9ycy5yZWRCcmlnaHQodGV4dCkpO1xuICB9XG5cbiAgc3RvcCgpOiB2b2lkIHtcbiAgICB0aGlzLnNwaW5uZXIuc3RvcCgpO1xuICB9XG5cbiAgc3RhcnQodGV4dD86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmVuYWJsZWQpIHtcbiAgICAgIHRoaXMuc3Bpbm5lci5zdGFydCh0ZXh0KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Bpbm5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXJfZGV2a2l0L2J1aWxkX2FuZ3VsYXIvc3JjL3V0aWxzL3NwaW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7O0FBRUgsOENBQXNCO0FBQ3RCLG1DQUFpQztBQUNqQywrQkFBOEI7QUFFOUIsTUFBYSxPQUFPO0lBT2xCLFlBQVksSUFBYTtRQUp6Qix3REFBd0Q7UUFDeEQsWUFBTyxHQUFHLElBQUksQ0FBQztRQUNOLHlCQUFTLElBQUEsV0FBSyxHQUFFLEVBQUM7UUFHeEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFBLGFBQUcsRUFBQztZQUNqQixJQUFJO1lBQ0osMEVBQTBFO1lBQzFFLHVDQUF1QztZQUN2QyxVQUFVLEVBQUUsS0FBSztZQUNqQixZQUFZLEVBQUUsS0FBSztZQUNuQixTQUFTLEVBQUUsdUJBQUEsSUFBSSxzQkFBTztTQUN2QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBSSxJQUFJLENBQUMsSUFBWTtRQUNuQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLElBQUksQ0FBQyx1QkFBQSxJQUFJLHNCQUFPLENBQUM7SUFDakQsQ0FBQztJQUVELE9BQU8sQ0FBQyxJQUFhO1FBQ25CLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM1QjtJQUNILENBQUM7SUFFRCxJQUFJLENBQUMsSUFBYTtRQUNoQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksY0FBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxJQUFJO1FBQ0YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsS0FBSyxDQUFDLElBQWE7UUFDakIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzFCO0lBQ0gsQ0FBQztDQUNGO0FBN0NELDBCQTZDQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgb3JhIGZyb20gJ29yYSc7XG5pbXBvcnQgeyBjb2xvcnMgfSBmcm9tICcuL2NvbG9yJztcbmltcG9ydCB7IGlzVFRZIH0gZnJvbSAnLi90dHknO1xuXG5leHBvcnQgY2xhc3MgU3Bpbm5lciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3Bpbm5lcjogb3JhLk9yYTtcblxuICAvKiogV2hlbiBmYWxzZSwgb25seSBmYWlsIG1lc3NhZ2VzIHdpbGwgYmUgZGlzcGxheWVkLiAqL1xuICBlbmFibGVkID0gdHJ1ZTtcbiAgcmVhZG9ubHkgI2lzVFRZID0gaXNUVFkoKTtcblxuICBjb25zdHJ1Y3Rvcih0ZXh0Pzogc3RyaW5nKSB7XG4gICAgdGhpcy5zcGlubmVyID0gb3JhKHtcbiAgICAgIHRleHQsXG4gICAgICAvLyBUaGUgYmVsb3cgMiBvcHRpb25zIGFyZSBuZWVkZWQgYmVjYXVzZSBvdGhlcndpc2UgQ1RSTCtDIHdpbGwgYmUgZGVsYXllZFxuICAgICAgLy8gd2hlbiB0aGUgdW5kZXJseWluZyBwcm9jZXNzIGlzIHN5bmMuXG4gICAgICBoaWRlQ3Vyc29yOiBmYWxzZSxcbiAgICAgIGRpc2NhcmRTdGRpbjogZmFsc2UsXG4gICAgICBpc0VuYWJsZWQ6IHRoaXMuI2lzVFRZLFxuICAgIH0pO1xuICB9XG5cbiAgc2V0IHRleHQodGV4dDogc3RyaW5nKSB7XG4gICAgdGhpcy5zcGlubmVyLnRleHQgPSB0ZXh0O1xuICB9XG5cbiAgZ2V0IGlzU3Bpbm5pbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3Bpbm5lci5pc1NwaW5uaW5nIHx8ICF0aGlzLiNpc1RUWTtcbiAgfVxuXG4gIHN1Y2NlZWQodGV4dD86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmVuYWJsZWQpIHtcbiAgICAgIHRoaXMuc3Bpbm5lci5zdWNjZWVkKHRleHQpO1xuICAgIH1cbiAgfVxuXG4gIGZhaWwodGV4dD86IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc3Bpbm5lci5mYWlsKHRleHQgJiYgY29sb3JzLnJlZEJyaWdodCh0ZXh0KSk7XG4gIH1cblxuICBzdG9wKCk6IHZvaWQge1xuICAgIHRoaXMuc3Bpbm5lci5zdG9wKCk7XG4gIH1cblxuICBzdGFydCh0ZXh0Pzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZW5hYmxlZCkge1xuICAgICAgdGhpcy5zcGlubmVyLnN0YXJ0KHRleHQpO1xuICAgIH1cbiAgfVxufVxuIl19