@ngtools/webpack 17.0.0-next.3 → 17.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ngtools/webpack",
3
- "version": "17.0.0-next.3",
3
+ "version": "17.0.0-next.4",
4
4
  "description": "Webpack plugin that AoT compiles your Angular components and modules.",
5
5
  "main": "./src/index.js",
6
6
  "typings": "src/index.d.ts",
package/src/index.d.ts CHANGED
@@ -5,4 +5,4 @@
5
5
  * Use of this source code is governed by an MIT-style license that can be
6
6
  * found in the LICENSE file at https://angular.io/license
7
7
  */
8
- export { AngularWebpackLoaderPath, AngularWebpackPlugin, AngularWebpackPluginOptions, default, } from './ivy';
8
+ export { AngularWebpackLoaderPath, AngularWebpackPlugin, AngularWebpackPluginOptions, imageDomains, default, } from './ivy';
package/src/index.js CHANGED
@@ -10,9 +10,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
10
10
  return (mod && mod.__esModule) ? mod : { "default": mod };
11
11
  };
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
- exports.default = exports.AngularWebpackPlugin = exports.AngularWebpackLoaderPath = void 0;
13
+ exports.default = exports.imageDomains = exports.AngularWebpackPlugin = exports.AngularWebpackLoaderPath = void 0;
14
14
  var ivy_1 = require("./ivy");
15
15
  Object.defineProperty(exports, "AngularWebpackLoaderPath", { enumerable: true, get: function () { return ivy_1.AngularWebpackLoaderPath; } });
16
16
  Object.defineProperty(exports, "AngularWebpackPlugin", { enumerable: true, get: function () { return ivy_1.AngularWebpackPlugin; } });
17
+ Object.defineProperty(exports, "imageDomains", { enumerable: true, get: function () { return ivy_1.imageDomains; } });
17
18
  Object.defineProperty(exports, "default", { enumerable: true, get: function () { return __importDefault(ivy_1).default; } });
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZ3Rvb2xzL3dlYnBhY2svc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7O0dBTUc7Ozs7OztBQUVILDZCQUtlO0FBSmIsK0dBQUEsd0JBQXdCLE9BQUE7QUFDeEIsMkdBQUEsb0JBQW9CLE9BQUE7QUFFcEIsK0dBQUEsT0FBTyxPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmV4cG9ydCB7XG4gIEFuZ3VsYXJXZWJwYWNrTG9hZGVyUGF0aCxcbiAgQW5ndWxhcldlYnBhY2tQbHVnaW4sXG4gIEFuZ3VsYXJXZWJwYWNrUGx1Z2luT3B0aW9ucyxcbiAgZGVmYXVsdCxcbn0gZnJvbSAnLi9pdnknO1xuIl19
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZ3Rvb2xzL3dlYnBhY2svc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7O0dBTUc7Ozs7OztBQUVILDZCQU1lO0FBTGIsK0dBQUEsd0JBQXdCLE9BQUE7QUFDeEIsMkdBQUEsb0JBQW9CLE9BQUE7QUFFcEIsbUdBQUEsWUFBWSxPQUFBO0FBQ1osK0dBQUEsT0FBTyxPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmV4cG9ydCB7XG4gIEFuZ3VsYXJXZWJwYWNrTG9hZGVyUGF0aCxcbiAgQW5ndWxhcldlYnBhY2tQbHVnaW4sXG4gIEFuZ3VsYXJXZWJwYWNrUGx1Z2luT3B0aW9ucyxcbiAgaW1hZ2VEb21haW5zLFxuICBkZWZhdWx0LFxufSBmcm9tICcuL2l2eSc7XG4iXX0=
package/src/ivy/cache.js CHANGED
@@ -9,10 +9,7 @@
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
10
  exports.SourceFileCache = void 0;
11
11
  class SourceFileCache extends Map {
12
- constructor() {
13
- super(...arguments);
14
- this.angularDiagnostics = new Map();
15
- }
12
+ angularDiagnostics = new Map();
16
13
  invalidate(file) {
17
14
  const sourceFile = this.get(file);
18
15
  if (sourceFile) {
@@ -33,4 +30,4 @@ class SourceFileCache extends Map {
33
30
  }
34
31
  }
35
32
  exports.SourceFileCache = SourceFileCache;
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZ3Rvb2xzL3dlYnBhY2svc3JjL2l2eS9jYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7QUFJSCxNQUFhLGVBQWdCLFNBQVEsR0FBMEI7SUFBL0Q7O1FBQ21CLHVCQUFrQixHQUFHLElBQUksR0FBRyxFQUFrQyxDQUFDO0lBcUJsRixDQUFDO0lBbkJDLFVBQVUsQ0FBQyxJQUFZO1FBQ3JCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsSUFBSSxVQUFVLEVBQUU7WUFDZCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDNUM7SUFDSCxDQUFDO0lBRUQsd0JBQXdCLENBQUMsVUFBeUIsRUFBRSxXQUE0QjtRQUM5RSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzFCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1NBQ3REO2FBQU07WUFDTCxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQzVDO0lBQ0gsQ0FBQztJQUVELHFCQUFxQixDQUFDLFVBQXlCO1FBQzdDLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNqRCxDQUFDO0NBQ0Y7QUF0QkQsMENBc0JDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5leHBvcnQgY2xhc3MgU291cmNlRmlsZUNhY2hlIGV4dGVuZHMgTWFwPHN0cmluZywgdHMuU291cmNlRmlsZT4ge1xuICBwcml2YXRlIHJlYWRvbmx5IGFuZ3VsYXJEaWFnbm9zdGljcyA9IG5ldyBNYXA8dHMuU291cmNlRmlsZSwgdHMuRGlhZ25vc3RpY1tdPigpO1xuXG4gIGludmFsaWRhdGUoZmlsZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgc291cmNlRmlsZSA9IHRoaXMuZ2V0KGZpbGUpO1xuICAgIGlmIChzb3VyY2VGaWxlKSB7XG4gICAgICB0aGlzLmRlbGV0ZShmaWxlKTtcbiAgICAgIHRoaXMuYW5ndWxhckRpYWdub3N0aWNzLmRlbGV0ZShzb3VyY2VGaWxlKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVBbmd1bGFyRGlhZ25vc3RpY3Moc291cmNlRmlsZTogdHMuU291cmNlRmlsZSwgZGlhZ25vc3RpY3M6IHRzLkRpYWdub3N0aWNbXSk6IHZvaWQge1xuICAgIGlmIChkaWFnbm9zdGljcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmFuZ3VsYXJEaWFnbm9zdGljcy5zZXQoc291cmNlRmlsZSwgZGlhZ25vc3RpY3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFuZ3VsYXJEaWFnbm9zdGljcy5kZWxldGUoc291cmNlRmlsZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0QW5ndWxhckRpYWdub3N0aWNzKHNvdXJjZUZpbGU6IHRzLlNvdXJjZUZpbGUpOiB0cy5EaWFnbm9zdGljW10gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmFuZ3VsYXJEaWFnbm9zdGljcy5nZXQoc291cmNlRmlsZSk7XG4gIH1cbn1cbiJdfQ==
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZ3Rvb2xzL3dlYnBhY2svc3JjL2l2eS9jYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7QUFJSCxNQUFhLGVBQWdCLFNBQVEsR0FBMEI7SUFDNUMsa0JBQWtCLEdBQUcsSUFBSSxHQUFHLEVBQWtDLENBQUM7SUFFaEYsVUFBVSxDQUFDLElBQVk7UUFDckIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxJQUFJLFVBQVUsRUFBRTtZQUNkLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUM1QztJQUNILENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxVQUF5QixFQUFFLFdBQTRCO1FBQzlFLElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDMUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUM7U0FDdEQ7YUFBTTtZQUNMLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDNUM7SUFDSCxDQUFDO0lBRUQscUJBQXFCLENBQUMsVUFBeUI7UUFDN0MsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2pELENBQUM7Q0FDRjtBQXRCRCwwQ0FzQkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5cbmV4cG9ydCBjbGFzcyBTb3VyY2VGaWxlQ2FjaGUgZXh0ZW5kcyBNYXA8c3RyaW5nLCB0cy5Tb3VyY2VGaWxlPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYW5ndWxhckRpYWdub3N0aWNzID0gbmV3IE1hcDx0cy5Tb3VyY2VGaWxlLCB0cy5EaWFnbm9zdGljW10+KCk7XG5cbiAgaW52YWxpZGF0ZShmaWxlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBzb3VyY2VGaWxlID0gdGhpcy5nZXQoZmlsZSk7XG4gICAgaWYgKHNvdXJjZUZpbGUpIHtcbiAgICAgIHRoaXMuZGVsZXRlKGZpbGUpO1xuICAgICAgdGhpcy5hbmd1bGFyRGlhZ25vc3RpY3MuZGVsZXRlKHNvdXJjZUZpbGUpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUFuZ3VsYXJEaWFnbm9zdGljcyhzb3VyY2VGaWxlOiB0cy5Tb3VyY2VGaWxlLCBkaWFnbm9zdGljczogdHMuRGlhZ25vc3RpY1tdKTogdm9pZCB7XG4gICAgaWYgKGRpYWdub3N0aWNzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuYW5ndWxhckRpYWdub3N0aWNzLnNldChzb3VyY2VGaWxlLCBkaWFnbm9zdGljcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYW5ndWxhckRpYWdub3N0aWNzLmRlbGV0ZShzb3VyY2VGaWxlKTtcbiAgICB9XG4gIH1cblxuICBnZXRBbmd1bGFyRGlhZ25vc3RpY3Moc291cmNlRmlsZTogdHMuU291cmNlRmlsZSk6IHRzLkRpYWdub3N0aWNbXSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuYW5ndWxhckRpYWdub3N0aWNzLmdldChzb3VyY2VGaWxlKTtcbiAgfVxufVxuIl19
@@ -6,5 +6,5 @@
6
6
  * found in the LICENSE file at https://angular.io/license
7
7
  */
8
8
  export { angularWebpackLoader as default } from './loader';
9
- export { AngularWebpackPluginOptions, AngularWebpackPlugin } from './plugin';
9
+ export { AngularWebpackPluginOptions, AngularWebpackPlugin, imageDomains } from './plugin';
10
10
  export declare const AngularWebpackLoaderPath: string;
package/src/ivy/index.js CHANGED
@@ -7,10 +7,11 @@
7
7
  * found in the LICENSE file at https://angular.io/license
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.AngularWebpackLoaderPath = exports.AngularWebpackPlugin = exports.default = void 0;
10
+ exports.AngularWebpackLoaderPath = exports.imageDomains = exports.AngularWebpackPlugin = exports.default = void 0;
11
11
  var loader_1 = require("./loader");
12
12
  Object.defineProperty(exports, "default", { enumerable: true, get: function () { return loader_1.angularWebpackLoader; } });
13
13
  var plugin_1 = require("./plugin");
14
14
  Object.defineProperty(exports, "AngularWebpackPlugin", { enumerable: true, get: function () { return plugin_1.AngularWebpackPlugin; } });
15
+ Object.defineProperty(exports, "imageDomains", { enumerable: true, get: function () { return plugin_1.imageDomains; } });
15
16
  exports.AngularWebpackLoaderPath = __filename;
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZ3Rvb2xzL3dlYnBhY2svc3JjL2l2eS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7QUFFSCxtQ0FBMkQ7QUFBbEQsaUdBQUEsb0JBQW9CLE9BQVc7QUFDeEMsbUNBQTZFO0FBQXZDLDhHQUFBLG9CQUFvQixPQUFBO0FBRTdDLFFBQUEsd0JBQXdCLEdBQUcsVUFBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmV4cG9ydCB7IGFuZ3VsYXJXZWJwYWNrTG9hZGVyIGFzIGRlZmF1bHQgfSBmcm9tICcuL2xvYWRlcic7XG5leHBvcnQgeyBBbmd1bGFyV2VicGFja1BsdWdpbk9wdGlvbnMsIEFuZ3VsYXJXZWJwYWNrUGx1Z2luIH0gZnJvbSAnLi9wbHVnaW4nO1xuXG5leHBvcnQgY29uc3QgQW5ndWxhcldlYnBhY2tMb2FkZXJQYXRoID0gX19maWxlbmFtZTtcbiJdfQ==
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZ3Rvb2xzL3dlYnBhY2svc3JjL2l2eS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7QUFFSCxtQ0FBMkQ7QUFBbEQsaUdBQUEsb0JBQW9CLE9BQVc7QUFDeEMsbUNBQTJGO0FBQXJELDhHQUFBLG9CQUFvQixPQUFBO0FBQUUsc0dBQUEsWUFBWSxPQUFBO0FBRTNELFFBQUEsd0JBQXdCLEdBQUcsVUFBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmV4cG9ydCB7IGFuZ3VsYXJXZWJwYWNrTG9hZGVyIGFzIGRlZmF1bHQgfSBmcm9tICcuL2xvYWRlcic7XG5leHBvcnQgeyBBbmd1bGFyV2VicGFja1BsdWdpbk9wdGlvbnMsIEFuZ3VsYXJXZWJwYWNrUGx1Z2luLCBpbWFnZURvbWFpbnMgfSBmcm9tICcuL3BsdWdpbic7XG5cbmV4cG9ydCBjb25zdCBBbmd1bGFyV2VicGFja0xvYWRlclBhdGggPSBfX2ZpbGVuYW1lO1xuIl19
@@ -7,6 +7,7 @@
7
7
  */
8
8
  import type { CompilerOptions } from '@angular/compiler-cli';
9
9
  import type { Compiler } from 'webpack';
10
+ export declare const imageDomains: Set<string>;
10
11
  export interface AngularWebpackPluginOptions {
11
12
  tsconfig: string;
12
13
  compilerOptions?: CompilerOptions;
package/src/ivy/plugin.js CHANGED
@@ -30,7 +30,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
30
30
  return result;
31
31
  };
32
32
  Object.defineProperty(exports, "__esModule", { value: true });
33
- exports.AngularWebpackPlugin = void 0;
33
+ exports.AngularWebpackPlugin = exports.imageDomains = void 0;
34
34
  const assert_1 = require("assert");
35
35
  const ts = __importStar(require("typescript"));
36
36
  const paths_plugin_1 = require("../paths-plugin");
@@ -48,14 +48,23 @@ const transformation_1 = require("./transformation");
48
48
  * program optimization will be used.
49
49
  */
50
50
  const DIAGNOSTICS_AFFECTED_THRESHOLD = 1;
51
+ exports.imageDomains = new Set();
51
52
  const PLUGIN_NAME = 'angular-compiler';
52
53
  const compilationFileEmitters = new WeakMap();
53
54
  class AngularWebpackPlugin {
55
+ pluginOptions;
56
+ compilerCliModule;
57
+ watchMode;
58
+ ngtscNextProgram;
59
+ builder;
60
+ sourceFileCache;
61
+ webpackCache;
62
+ webpackCreateHash;
63
+ fileDependencies = new Map();
64
+ requiredFilesToEmit = new Set();
65
+ requiredFilesToEmitCache = new Map();
66
+ fileEmitHistory = new Map();
54
67
  constructor(options = {}) {
55
- this.fileDependencies = new Map();
56
- this.requiredFilesToEmit = new Set();
57
- this.requiredFilesToEmitCache = new Map();
58
- this.fileEmitHistory = new Map();
59
68
  this.pluginOptions = {
60
69
  emitClassMetadata: false,
61
70
  emitNgModuleScope: false,
@@ -90,7 +99,7 @@ class AngularWebpackPlugin {
90
99
  compiler.resolverFactory.hooks.resolveOptions
91
100
  .for('normal')
92
101
  .tap(PLUGIN_NAME, (resolveOptions) => {
93
- resolveOptions.plugins ?? (resolveOptions.plugins = []);
102
+ resolveOptions.plugins ??= [];
94
103
  resolveOptions.plugins.push(pathsPlugin);
95
104
  return resolveOptions;
96
105
  });
@@ -362,7 +371,7 @@ class AngularWebpackPlugin {
362
371
  diagnosticsReporter(builder.getSemanticDiagnostics(sourceFile));
363
372
  }
364
373
  }
365
- const transformers = (0, transformation_1.createAotTransformers)(builder, this.pluginOptions);
374
+ const transformers = (0, transformation_1.createAotTransformers)(builder, this.pluginOptions, exports.imageDomains);
366
375
  const getDependencies = (sourceFile) => {
367
376
  const dependencies = [];
368
377
  for (const resourcePath of angularCompiler.getResourceDependencies(sourceFile)) {
@@ -526,4 +535,4 @@ class AngularWebpackPlugin {
526
535
  }
527
536
  }
528
537
  exports.AngularWebpackPlugin = AngularWebpackPlugin;
529
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmd0b29scy93ZWJwYWNrL3NyYy9pdnkvcGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0gsbUNBQTBDO0FBQzFDLCtDQUFpQztBQUVqQyxrREFBd0Q7QUFDeEQsd0RBQTJEO0FBQzNELG1DQUEwQztBQUMxQywrQ0FLdUI7QUFDdkIsaUNBT2dCO0FBQ2hCLG1DQUF5RDtBQUN6RCxxQ0FBbUc7QUFDbkcscUNBQW9FO0FBQ3BFLHFEQUFtRztBQUVuRzs7OztHQUlHO0FBQ0gsTUFBTSw4QkFBOEIsR0FBRyxDQUFDLENBQUM7QUF1QnpDLE1BQU0sV0FBVyxHQUFHLGtCQUFrQixDQUFDO0FBQ3ZDLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxPQUFPLEVBQXNDLENBQUM7QUFPbEYsTUFBYSxvQkFBb0I7SUFjL0IsWUFBWSxVQUFnRCxFQUFFO1FBTDdDLHFCQUFnQixHQUFHLElBQUksR0FBRyxFQUF1QixDQUFDO1FBQ2xELHdCQUFtQixHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFDeEMsNkJBQXdCLEdBQUcsSUFBSSxHQUFHLEVBQXNDLENBQUM7UUFDekUsb0JBQWUsR0FBRyxJQUFJLEdBQUcsRUFBK0IsQ0FBQztRQUd4RSxJQUFJLENBQUMsYUFBYSxHQUFHO1lBQ25CLGlCQUFpQixFQUFFLEtBQUs7WUFDeEIsaUJBQWlCLEVBQUUsS0FBSztZQUN4QixPQUFPLEVBQUUsS0FBSztZQUNkLGdCQUFnQixFQUFFLEVBQUU7WUFDcEIsYUFBYSxFQUFFLEVBQUU7WUFDakIscUJBQXFCLEVBQUUsSUFBSTtZQUMzQixRQUFRLEVBQUUsZUFBZTtZQUN6QixHQUFHLE9BQU87U0FDWCxDQUFDO0lBQ0osQ0FBQztJQUVELElBQVksV0FBVztRQUNyQiwrRUFBK0U7UUFDL0UsZ0ZBQWdGO1FBQ2hGLDZDQUE2QztRQUM3QyxlQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSw0REFBNEQsQ0FBQyxDQUFDO1FBRWhHLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFrQjtRQUN0QixNQUFNLEVBQUUsNkJBQTZCLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUM7UUFDL0UsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFFekMsdUNBQXVDO1FBQ3ZDLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtZQUM5RSxJQUFJLDZCQUE2QixDQUMvQixJQUFJLE1BQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsRUFDcEUsS0FBSyxDQUNOLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ25CO1FBRUQsdUJBQXVCO1FBQ3ZCLE1BQU0sV0FBVyxHQUFHLElBQUksb0NBQXFCLEVBQUUsQ0FBQztRQUNoRCxRQUFRLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDMUQsUUFBUSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsY0FBYztpQkFDMUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztpQkFDYixHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsY0FBYyxFQUFFLEVBQUU7Z0JBQ25DLGNBQWMsQ0FBQyxPQUFPLEtBQXRCLGNBQWMsQ0FBQyxPQUFPLEdBQUssRUFBRSxFQUFDO2dCQUM5QixjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFFekMsT0FBTyxjQUFjLENBQUM7WUFDeEIsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztRQUVILGlEQUFpRDtRQUNqRCxRQUFRLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUM7UUFFekYsTUFBTSxnQkFBZ0IsR0FBNEIsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUNsRSxRQUFRLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDOUQsSUFBSTtnQkFDRixJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLGdCQUFnQixDQUFDLENBQUM7YUFDdEQ7WUFBQyxPQUFPLEtBQUssRUFBRTtnQkFDZCxJQUFBLHNCQUFRLEVBQ04sV0FBVyxFQUNYLDhDQUNFLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQzNDLEVBQUUsQ0FDSCxDQUFDO2FBQ0g7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxXQUF3QixFQUFFLEtBQThCO1FBQy9FLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUM7UUFFdEMsMkVBQTJFO1FBQzNFLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25FLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQztRQUVwQywyQkFBMkI7UUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUU7WUFDbkQsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ3ZEO1FBRUQsc0RBQXNEO1FBQ3RELElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFO1lBQ3pCLEtBQUssQ0FBQyxjQUFjLEdBQUcsSUFBSSx1Q0FBcUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDbEU7UUFFRCwrREFBK0Q7UUFDL0QsTUFBTSxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFFeEUsbUVBQW1FO1FBQ25FLE1BQU0sbUJBQW1CLEdBQUcsSUFBQSx1Q0FBeUIsRUFBQyxXQUFXLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUNoRixJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FDakQsQ0FBQztRQUNGLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTVCLCtEQUErRDtRQUMvRCxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUUxQyxrREFBa0Q7UUFDbEQsTUFBTSxNQUFNLEdBQUcsSUFBQSw0QkFBbUI7UUFDaEMsc0VBQXNFO1FBQ3RFLFFBQVEsQ0FBQyxlQUFzQyxFQUMvQyxJQUFBLHFCQUFhLEVBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUNoQyxDQUFDO1FBQ0YsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLDZCQUE2QixDQUFDLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUV2RSxpRkFBaUY7UUFDakYsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUNqQyxJQUFJLFlBQVksQ0FBQztRQUNqQixJQUFJLEtBQUssRUFBRTtZQUNULFlBQVksR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO1lBQ2pDLEtBQUssTUFBTSxXQUFXLElBQUk7Z0JBQ3hCLEdBQUcsQ0FBQyxRQUFRLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQztnQkFDakMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDO2FBQ2pDLEVBQUU7Z0JBQ0QsTUFBTSxxQkFBcUIsR0FBRyxJQUFBLHFCQUFhLEVBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3pELCtCQUErQjtnQkFDL0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2dCQUNwRCw0QkFBNEI7Z0JBQzVCLEtBQUssQ0FBQyxVQUFVLENBQUMscUJBQXFCLENBQUMsQ0FBQztnQkFFeEMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2FBQ3pDO1NBQ0Y7YUFBTTtZQUNMLHlCQUF5QjtZQUN6QixLQUFLLEdBQUcsSUFBSSx1QkFBZSxFQUFFLENBQUM7WUFDOUIsb0NBQW9DO1lBQ3BDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7YUFDOUI7U0FDRjtRQUNELElBQUEsNkJBQXNCLEVBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXBDLE1BQU0scUJBQXFCLEdBQUcsRUFBRSxDQUFDLDJCQUEyQixDQUMxRCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFDMUIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFDcEMsZUFBZSxDQUNoQixDQUFDO1FBRUYsMENBQTBDO1FBQzFDLElBQUEsMENBQW1DLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO1FBRXhGLHlCQUF5QjtRQUN6QixLQUFLLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDdkQsSUFBQSwrQkFBd0IsRUFBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLGNBQWMsRUFBRTtZQUNuRCxxQkFBcUIsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLHFCQUFxQjtZQUMvRCx3QkFBd0IsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLHdCQUF3QjtTQUN0RSxDQUFDLENBQUM7UUFFSCx1Q0FBdUM7UUFDdkMsSUFBQSxrQ0FBMkIsRUFBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO1FBQzlGLElBQUEsbUNBQTRCLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFckUscURBQXFEO1FBQ3JELE1BQU0sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTztZQUN4RSxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixDQUFDO1lBQzlFLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQ25CLGVBQWUsRUFDZixTQUFTLEVBQ1QsSUFBSSxFQUNKLG1CQUFtQixFQUNuQixLQUFLLENBQUMsY0FBYyxDQUNyQixDQUFDO1FBRU4sK0RBQStEO1FBQy9ELE1BQU0sYUFBYSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFFeEMsS0FBSyxNQUFNLFVBQVUsSUFBSSxPQUFPLENBQUMsY0FBYyxFQUFFLEVBQUU7WUFDakQsSUFBSSxhQUFhLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFO2dCQUNsQyxTQUFTO2FBQ1Y7WUFFRCx1RkFBdUY7WUFDdkYsaUdBQWlHO1lBQ2pHLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBQSx1QkFBZSxFQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBRXZFLG9GQUFvRjtZQUNwRix1RUFBdUU7WUFDdkUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsRUFBRTtnQkFDakMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFBLHFCQUFhLEVBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7YUFDdkQ7U0FDRjtRQUVELFdBQVcsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQ3hFLDZDQUE2QztZQUM3QyxNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBRW5FLDBFQUEwRTtZQUMxRSxLQUFLLENBQUMsY0FBYyxFQUFFLHNCQUFzQixFQUFFLENBQUM7WUFFL0MsbUNBQW1DO1lBQ25DLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNqQyxPQUFPO2FBQ1I7WUFFRCxLQUFLLE1BQU0sYUFBYSxJQUFJLE9BQU8sRUFBRTtnQkFDbkMsTUFBTSxRQUFRLEdBQUksYUFBOEIsQ0FBQyxRQUFRLENBQUM7Z0JBQzFELElBQUksUUFBUSxFQUFFO29CQUNaLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFBLHFCQUFhLEVBQUMsUUFBUSxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7aUJBQy9EO2FBQ0Y7WUFFRCxLQUFLLE1BQU0sTUFBTSxJQUFJLGFBQWEsRUFBRTtnQkFDbEMsSUFBSSxLQUFLLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtvQkFDckMsU0FBUztpQkFDVjtnQkFDRCxJQUFBLHdCQUFVLEVBQ1IsV0FBVyxFQUNYLEdBQUcsTUFBTSwyREFBMkQ7b0JBQ2xFLGdGQUFnRixDQUNuRixDQUFDO2FBQ0g7WUFDRCxLQUFLLENBQUMsY0FBYyxHQUFHLGFBQWEsQ0FBQztRQUN2QyxDQUFDLENBQUMsQ0FBQztRQUVILHNDQUFzQztRQUN0QyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVPLHVCQUF1QixDQUFDLFdBQXdCO1FBQ3RELElBQUksWUFBWSxHQUFHLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ2pCLFlBQVksR0FBRyxJQUFJLDhCQUFxQixFQUFFLENBQUM7WUFDM0MsdUJBQXVCLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FBQztZQUN2RCxXQUFXLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FDbkYsV0FBVyxFQUNYLENBQUMsYUFBZ0UsRUFBRSxFQUFFO2dCQUNuRSxhQUFhLENBQUMsNEJBQW1CLENBQUMsR0FBRyxZQUFZLENBQUM7WUFDcEQsQ0FBQyxDQUNGLENBQUM7U0FDSDtRQUNELE1BQU0sZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRWpELE9BQU8sZ0JBQWdCLENBQUM7SUFDMUIsQ0FBQztJQUVPLGdCQUFnQixDQUFDLHNCQUE4QixFQUFFLGFBQTBCO1FBQ2pGLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLEVBQUU7WUFDOUMsT0FBTztTQUNSO1FBRUQsYUFBYSxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQzdDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUN2RSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ2pCLE9BQU87U0FDUjtRQUNELEtBQUssTUFBTSxVQUFVLElBQUksWUFBWSxFQUFFO1lBQ3JDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFBLHFCQUFhLEVBQUMsVUFBVSxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7U0FDakU7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLG9CQUFvQixDQUNoQyxPQUF5QixFQUN6QixXQUF3QixFQUN4QixXQUF3QjtRQUV4QixJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO1lBQ3ZDLE9BQU87U0FDUjtRQUVELE1BQU0sY0FBYyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFDekMsS0FBSyxNQUFNLFlBQVksSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDbkQsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDNUQsSUFBSSxPQUFPLEVBQUU7Z0JBQ1gsTUFBTSxVQUFVLEdBQUcsTUFBTSxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ25ELElBQ0UsVUFBVSxFQUFFLE9BQU8sS0FBSyxTQUFTO29CQUNqQyxPQUFPLENBQUMsTUFBTSxLQUFLLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTTtvQkFDNUMsVUFBVSxDQUFDLElBQUksS0FBSyxTQUFTO29CQUM3QixNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFDbkQ7b0JBQ0EsZ0VBQWdFO29CQUNoRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxVQUFVLENBQUMsQ0FBQztvQkFDNUQsY0FBYyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztpQkFDbEM7YUFDRjtpQkFBTTtnQkFDTCw2QkFBNkI7Z0JBQzdCLGNBQWMsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDbEM7U0FDRjtRQUVELElBQUksY0FBYyxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUU7WUFDM0IsTUFBTSxPQUFPLEdBQUcsQ0FBQyxhQUFxQixFQUFFLEVBQUUsQ0FDeEMsSUFBSSxPQUFPLENBQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztZQUU1RixNQUFNLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztZQUM1QixLQUFLLE1BQU0sYUFBYSxJQUFJLE9BQU8sRUFBRTtnQkFDbkMsTUFBTSxRQUFRLEdBQUksYUFBOEIsQ0FBQyxRQUFRLENBQUM7Z0JBQzFELElBQUksUUFBUSxJQUFJLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBQSxxQkFBYSxFQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUU7b0JBQzNELGdCQUFnQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztpQkFDdEM7YUFDRjtZQUNELE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDcEY7UUFFRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsTUFBTSxFQUNKLE9BQU8sRUFBRSxlQUFlLEVBQ3hCLFNBQVMsRUFDVCxNQUFNLEdBQ1AsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUNwQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFDM0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQ25DLENBQUM7UUFDRixlQUFlLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUN0QyxlQUFlLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDO1FBQy9DLGVBQWUsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO1FBQ25DLGVBQWUsQ0FBQyxhQUFhLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQztRQUMxRCxlQUFlLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztRQUN4QyxlQUFlLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQztRQUNwQyxlQUFlLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztRQUN2QyxlQUFlLENBQUMsc0JBQXNCLEdBQUcsS0FBSyxDQUFDO1FBQy9DLGVBQWUsQ0FBQyxhQUFhLEdBQUcsWUFBWSxDQUFDO1FBQzdDLGVBQWUsQ0FBQyxzQkFBc0IsR0FBRyxLQUFLLENBQUM7UUFFL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLENBQUM7SUFDaEQsQ0FBQztJQUVPLGdCQUFnQixDQUN0QixlQUFnQyxFQUNoQyxTQUFtQixFQUNuQixJQUFrQixFQUNsQixtQkFBd0MsRUFDeEMsY0FBcUM7UUFFckMseUVBQXlFO1FBQ3pFLE1BQU0sY0FBYyxHQUFHLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQ3RELFNBQVMsRUFDVCxlQUFlLEVBQ2YsSUFBSSxFQUNKLElBQUksQ0FBQyxnQkFBZ0IsQ0FDdEIsQ0FBQztRQUNGLE1BQU0sZUFBZSxHQUFHLGNBQWMsQ0FBQyxRQUFRLENBQUM7UUFFaEQsbUZBQW1GO1FBQ25GLDBGQUEwRjtRQUMxRiw2RkFBNkY7UUFDN0YseUZBQXlGO1FBQ3pGLHdGQUF3RjtRQUN4Riw2RkFBNkY7UUFDN0YsTUFBTSxFQUFFLG9CQUFvQixFQUFFLGFBQWEsRUFBRSxHQUFHLGVBQWUsQ0FBQztRQUVoRSx5REFBeUQ7UUFDekQsMEZBQTBGO1FBQzFGLE1BQU0saUJBQWlCLEdBQUcsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3hELElBQUEsbUNBQTRCLEVBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUVoRCxJQUFJLE9BQXdFLENBQUM7UUFDN0UsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2xCLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyw4Q0FBOEMsQ0FDeEUsaUJBQWlCLEVBQ2pCLElBQUksRUFDSixJQUFJLENBQUMsT0FBTyxDQUNiLENBQUM7WUFDRixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsY0FBYyxDQUFDO1NBQ3hDO2FBQU07WUFDTCx5RkFBeUY7WUFDekYsa0VBQWtFO1lBQ2xFLE9BQU8sR0FBRyxFQUFFLENBQUMscUJBQXFCLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDN0Q7UUFFRCxvQ0FBb0M7UUFDcEMsTUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLEVBQWlCLENBQUM7UUFFL0MsMEVBQTBFO1FBQzFFLElBQUksMENBQTBDLElBQUksT0FBTyxFQUFFO1lBQ3pELGlEQUFpRDtZQUNqRCxPQUFPLElBQUksRUFBRTtnQkFDWCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsd0NBQXdDLENBQUMsU0FBUyxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUU7b0JBQ3hGLDJFQUEyRTtvQkFDM0Usa0ZBQWtGO29CQUNsRiwwRkFBMEY7b0JBQzFGLHlGQUF5RjtvQkFDekYsWUFBWTtvQkFDWixJQUNFLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUM7d0JBQ3BDLFVBQVUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEVBQy9DO3dCQUNBLHNGQUFzRjt3QkFDdEYsMEVBQTBFO3dCQUMxRSxNQUFNLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQzt3QkFDbkUsTUFBTSxrQkFBa0IsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLENBQUM7d0JBQ25FLElBQUksa0JBQWtCLEVBQUU7NEJBQ3RCLGFBQWEsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQzt5QkFDdkM7d0JBRUQsT0FBTyxJQUFJLENBQUM7cUJBQ2I7b0JBRUQsT0FBTyxLQUFLLENBQUM7Z0JBQ2YsQ0FBQyxDQUFDLENBQUM7Z0JBRUgsSUFBSSxDQUFDLE1BQU0sRUFBRTtvQkFDWCxNQUFNO2lCQUNQO2dCQUVELGFBQWEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQXlCLENBQUMsQ0FBQzthQUNyRDtTQUNGO1FBRUQsb0NBQW9DO1FBQ3BDLE1BQU0sV0FBVyxHQUFHO1lBQ2xCLEdBQUcsZUFBZSxDQUFDLG9CQUFvQixFQUFFO1lBQ3pDLEdBQUcsT0FBTyxDQUFDLHFCQUFxQixFQUFFO1lBQ2xDLEdBQUcsT0FBTyxDQUFDLG9CQUFvQixFQUFFO1NBQ2xDLENBQUM7UUFDRixtQkFBbUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVqQywyQ0FBMkM7UUFDM0MsS0FBSyxNQUFNLFVBQVUsSUFBSSxPQUFPLENBQUMsY0FBYyxFQUFFLEVBQUU7WUFDakQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDekMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pFLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO2FBQ2pFO1NBQ0Y7UUFFRCxNQUFNLFlBQVksR0FBRyxJQUFBLHNDQUFxQixFQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFeEUsTUFBTSxlQUFlLEdBQUcsQ0FBQyxVQUF5QixFQUFFLEVBQUU7WUFDcEQsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO1lBQ3hCLEtBQUssTUFBTSxZQUFZLElBQUksZUFBZSxDQUFDLHVCQUF1QixDQUFDLFVBQVUsQ0FBQyxFQUFFO2dCQUM5RSxZQUFZLENBQUMsSUFBSSxDQUNmLFlBQVk7Z0JBQ1osdUVBQXVFO2dCQUN2RSxHQUFHLGNBQWMsQ0FBQyx1QkFBdUIsQ0FBQyxZQUFZLENBQUMsQ0FDeEQsQ0FBQzthQUNIO1lBRUQsT0FBTyxZQUFZLENBQUM7UUFDdEIsQ0FBQyxDQUFDO1FBRUYsb0RBQW9EO1FBQ3BELDRFQUE0RTtRQUM1RSxNQUFNLGVBQWUsR0FBRyxlQUFlO2FBQ3BDLFlBQVksRUFBRTthQUNkLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDVCxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLENBQUM7WUFFakMsS0FBSyxNQUFNLFVBQVUsSUFBSSxPQUFPLENBQUMsY0FBYyxFQUFFLEVBQUU7Z0JBQ2pELElBQUksVUFBVSxDQUFDLGlCQUFpQixFQUFFO29CQUNoQyxTQUFTO2lCQUNWO2dCQUVELGtEQUFrRDtnQkFDbEQsSUFDRSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDO29CQUM5QixDQUFDLGVBQWUsQ0FBQyxzQkFBc0IsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLEVBQ2xFO29CQUNBLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsSUFBQSxxQkFBYSxFQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO29CQUVqRSx5REFBeUQ7b0JBQ3pELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUU7d0JBQ3pDLGFBQWEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7cUJBQy9CO2lCQUNGO3FCQUFNLElBQ0wsSUFBSSxDQUFDLGVBQWU7b0JBQ3BCLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUM7b0JBQzlCLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUNyQztvQkFDQSxvRUFBb0U7b0JBQ3BFLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDbEYsSUFBSSxrQkFBa0IsRUFBRTt3QkFDdEIsbUJBQW1CLENBQUMsa0JBQWtCLENBQUMsQ0FBQztxQkFDekM7aUJBQ0Y7YUFDRjtZQUVELGdFQUFnRTtZQUNoRSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQztZQUNqRCxNQUFNLHNCQUFzQixHQUMxQixhQUFhLENBQUMsSUFBSSxJQUFJLDhCQUE4QjtnQkFDbEQsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxVQUFVO2dCQUN4QixDQUFDLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQztZQUMvQixLQUFLLE1BQU0sWUFBWSxJQUFJLGFBQWEsRUFBRTtnQkFDeEMsTUFBTSxrQkFBa0IsR0FBRyxlQUFlLENBQUMscUJBQXFCLENBQzlELFlBQVksRUFDWixzQkFBc0IsQ0FDdkIsQ0FBQztnQkFDRixtQkFBbUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO2dCQUN4QyxJQUFJLENBQUMsZUFBZSxFQUFFLHdCQUF3QixDQUFDLFlBQVksRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO2FBQ2xGO1lBRUQsT0FBTztnQkFDTCxPQUFPLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUM3QixPQUFPLEVBQ1AsSUFBQSxrQ0FBaUIsRUFBQyxlQUFlLENBQUMsV0FBVyxFQUFFLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxFQUMzRSxlQUFlLEVBQ2YsQ0FBQyxVQUFVLEVBQUUsRUFBRTtvQkFDYixJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLElBQUEscUJBQWEsRUFBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztvQkFDcEUsZUFBZSxDQUFDLHNCQUFzQixDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUMxRSxDQUFDLENBQ0Y7YUFDRixDQUFDO1FBQ0osQ0FBQyxDQUFDO2FBQ0QsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLEdBQUcsWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFckYsTUFBTSxvQkFBb0IsR0FBZ0IsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO1lBQ3ZELE1BQU0sUUFBUSxHQUFHLE1BQU0sZUFBZSxDQUFDO1lBRXZDLElBQUksY0FBYyxJQUFJLFFBQVEsRUFBRTtnQkFDOUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDeEM7WUFFRCxPQUFPLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDO1FBRUYsT0FBTztZQUNMLFdBQVcsRUFBRSxvQkFBb0I7WUFDakMsT0FBTztZQUNQLGFBQWEsRUFBRSxhQUFhO1NBQzdCLENBQUM7SUFDSixDQUFDO0lBRU8sZ0JBQWdCLENBQ3RCLGVBQWdDLEVBQ2hDLFNBQTRCLEVBQzVCLElBQWtCLEVBQ2xCLG1CQUF3QztRQUV4QyxJQUFJLE9BQU8sQ0FBQztRQUNaLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNsQixPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsOENBQThDLENBQ3hFLFNBQVMsRUFDVCxlQUFlLEVBQ2YsSUFBSSxFQUNKLElBQUksQ0FBQyxPQUFPLENBQ2IsQ0FBQztTQUNIO2FBQU07WUFDTCx5RkFBeUY7WUFDekYsa0VBQWtFO1lBQ2xFLE9BQU8sR0FBRyxFQUFFLENBQUMscUJBQXFCLENBQUMsU0FBUyxFQUFFLGVBQWUsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUN0RTtRQUVELE1BQU0sV0FBVyxHQUFHO1lBQ2xCLEdBQUcsT0FBTyxDQUFDLHFCQUFxQixFQUFFO1lBQ2xDLEdBQUcsT0FBTyxDQUFDLG9CQUFvQixFQUFFO1lBQ2pDLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixFQUFFO1lBQ3BDLDBDQUEwQztZQUMxQyxHQUFHLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRTtTQUNwQyxDQUFDO1FBQ0YsbUJBQW1CLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFakMsTUFBTSxZQUFZLEdBQUcsSUFBQSxzQ0FBcUIsRUFBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFMUYsT0FBTztZQUNMLFdBQVcsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDcEUsT0FBTztZQUNQLGFBQWEsRUFBRSxTQUFTO1NBQ3pCLENBQUM7SUFDSixDQUFDO0lBRU8saUJBQWlCLENBQ3ZCLE9BQTBCLEVBQzFCLGVBQXNDLEVBQUUsRUFDeEMsb0JBQXFFLEVBQ3JFLFdBQWlEO1FBRWpELE9BQU8sS0FBSyxFQUFFLElBQVksRUFBRSxFQUFFO1lBQzVCLE1BQU0sUUFBUSxHQUFHLElBQUEscUJBQWEsRUFBQyxJQUFJLENBQUMsQ0FBQztZQUNyQyxJQUFJLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQy9DLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUNwRDtZQUVELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbkQsSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDZixPQUFPLFNBQVMsQ0FBQzthQUNsQjtZQUVELElBQUksT0FBMkIsQ0FBQztZQUNoQyxJQUFJLEdBQXVCLENBQUM7WUFDNUIsT0FBTyxDQUFDLElBQUksQ0FDVixVQUFVLEVBQ1YsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUU7Z0JBQ2pCLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtvQkFDN0IsR0FBRyxHQUFHLElBQUksQ0FBQztpQkFDWjtxQkFBTSxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQ25DLE9BQU8sR0FBRyxJQUFJLENBQUM7aUJBQ2hCO1lBQ0gsQ0FBQyxFQUNELFNBQVMsRUFDVCxTQUFTLEVBQ1QsWUFBWSxDQUNiLENBQUM7WUFFRixXQUFXLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUUxQix5REFBeUQ7WUFDekQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBRTNGLE1BQU0sWUFBWSxHQUFHO2dCQUNuQixHQUFHLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQzlDLEdBQUcsb0JBQW9CLENBQUMsVUFBVSxDQUFDO2FBQ3BDLENBQUMsR0FBRyxDQUFDLHVCQUFlLENBQUMsQ0FBQztZQUV2QixPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDOUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVPLEtBQUssQ0FBQyxxQkFBcUI7UUFDakMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDMUIsT0FBTztTQUNSO1FBRUQsK0VBQStFO1FBQy9FLGtGQUFrRjtRQUNsRixnRkFBZ0Y7UUFDaEYsdUZBQXVGO1FBQ3ZGLCtGQUErRjtRQUMvRixzRkFBc0Y7UUFDdEYsY0FBYztRQUNkLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxNQUFNLElBQUksUUFBUSxDQUFDLHlDQUF5QyxDQUFDLEVBQUUsQ0FBQztJQUMzRixDQUFDO0lBRU8sS0FBSyxDQUFDLGtCQUFrQixDQUM5QixRQUFnQixFQUNoQixPQUFlO1FBRWYsZUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsbURBQW1ELENBQUMsQ0FBQztRQUV2RixNQUFNLFdBQVcsR0FBd0I7WUFDdkMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1lBQ3RCLElBQUksRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBZ0I7U0FDaEYsQ0FBQztRQUVGLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNyQixNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN4RCxJQUFJLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNwRSw0Q0FBNEM7Z0JBQzVDLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQzthQUNuRTtTQUNGO2FBQU0sSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ3pCLHNFQUFzRTtZQUN0RSxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7U0FDakQ7UUFFRCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRU8sS0FBSyxDQUFDLGtCQUFrQixDQUFDLFFBQWdCO1FBQy9DLE9BQU8sSUFBSSxDQUFDLFlBQVk7WUFDdEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFrQyxRQUFRLEVBQUUsSUFBSSxDQUFDO1lBQy9FLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN6QyxDQUFDO0NBQ0Y7QUFycEJELG9EQXFwQkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBDb21waWxlckhvc3QsIENvbXBpbGVyT3B0aW9ucywgTmd0c2NQcm9ncmFtIH0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXItY2xpJztcbmltcG9ydCB7IHN0cmljdCBhcyBhc3NlcnQgfSBmcm9tICdhc3NlcnQnO1xuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5pbXBvcnQgdHlwZSB7IENvbXBpbGF0aW9uLCBDb21waWxlciwgTW9kdWxlLCBOb3JtYWxNb2R1bGUgfSBmcm9tICd3ZWJwYWNrJztcbmltcG9ydCB7IFR5cGVTY3JpcHRQYXRoc1BsdWdpbiB9IGZyb20gJy4uL3BhdGhzLXBsdWdpbic7XG5pbXBvcnQgeyBXZWJwYWNrUmVzb3VyY2VMb2FkZXIgfSBmcm9tICcuLi9yZXNvdXJjZV9sb2FkZXInO1xuaW1wb3J0IHsgU291cmNlRmlsZUNhY2hlIH0gZnJvbSAnLi9jYWNoZSc7XG5pbXBvcnQge1xuICBEaWFnbm9zdGljc1JlcG9ydGVyLFxuICBhZGRFcnJvcixcbiAgYWRkV2FybmluZyxcbiAgY3JlYXRlRGlhZ25vc3RpY3NSZXBvcnRlcixcbn0gZnJvbSAnLi9kaWFnbm9zdGljcyc7XG5pbXBvcnQge1xuICBhdWdtZW50SG9zdFdpdGhDYWNoaW5nLFxuICBhdWdtZW50SG9zdFdpdGhEZXBlbmRlbmN5Q29sbGVjdGlvbixcbiAgYXVnbWVudEhvc3RXaXRoUmVwbGFjZW1lbnRzLFxuICBhdWdtZW50SG9zdFdpdGhSZXNvdXJjZXMsXG4gIGF1Z21lbnRIb3N0V2l0aFN1YnN0aXR1dGlvbnMsXG4gIGF1Z21lbnRQcm9ncmFtV2l0aFZlcnNpb25pbmcsXG59IGZyb20gJy4vaG9zdCc7XG5pbXBvcnQgeyBleHRlcm5hbGl6ZVBhdGgsIG5vcm1hbGl6ZVBhdGggfSBmcm9tICcuL3BhdGhzJztcbmltcG9ydCB7IEFuZ3VsYXJQbHVnaW5TeW1ib2wsIEVtaXRGaWxlUmVzdWx0LCBGaWxlRW1pdHRlciwgRmlsZUVtaXR0ZXJDb2xsZWN0aW9uIH0gZnJvbSAnLi9zeW1ib2wnO1xuaW1wb3J0IHsgSW5wdXRGaWxlU3lzdGVtU3luYywgY3JlYXRlV2VicGFja1N5c3RlbSB9IGZyb20gJy4vc3lzdGVtJztcbmltcG9ydCB7IGNyZWF0ZUFvdFRyYW5zZm9ybWVycywgY3JlYXRlSml0VHJhbnNmb3JtZXJzLCBtZXJnZVRyYW5zZm9ybWVycyB9IGZyb20gJy4vdHJhbnNmb3JtYXRpb24nO1xuXG4vKipcbiAqIFRoZSB0aHJlc2hvbGQgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciBBbmd1bGFyIGZpbGUgZGlhZ25vc3RpY3Mgc2hvdWxkIG9wdGltaXplIGZvciBmdWxsIHByb2dyYW1zXG4gKiBvciBzaW5nbGUgZmlsZXMuIElmIHRoZSBudW1iZXIgb2YgYWZmZWN0ZWQgZmlsZXMgZm9yIGEgYnVpbGQgaXMgbW9yZSB0aGFuIHRoZSB0aHJlc2hvbGQsIGZ1bGxcbiAqIHByb2dyYW0gb3B0aW1pemF0aW9uIHdpbGwgYmUgdXNlZC5cbiAqL1xuY29uc3QgRElBR05PU1RJQ1NfQUZGRUNURURfVEhSRVNIT0xEID0gMTtcblxuZXhwb3J0IGludGVyZmFjZSBBbmd1bGFyV2VicGFja1BsdWdpbk9wdGlvbnMge1xuICB0c2NvbmZpZzogc3RyaW5nO1xuICBjb21waWxlck9wdGlvbnM/OiBDb21waWxlck9wdGlvbnM7XG4gIGZpbGVSZXBsYWNlbWVudHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIHN1YnN0aXR1dGlvbnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGRpcmVjdFRlbXBsYXRlTG9hZGluZzogYm9vbGVhbjtcbiAgZW1pdENsYXNzTWV0YWRhdGE6IGJvb2xlYW47XG4gIGVtaXROZ01vZHVsZVNjb3BlOiBib29sZWFuO1xuICBqaXRNb2RlOiBib29sZWFuO1xuICBpbmxpbmVTdHlsZUZpbGVFeHRlbnNpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIEFuZ3VsYXIgY29tcGlsYXRpb24gc3RhdGUgdGhhdCBpcyBtYWludGFpbmVkIGFjcm9zcyBlYWNoIFdlYnBhY2sgY29tcGlsYXRpb24uXG4gKi9cbmludGVyZmFjZSBBbmd1bGFyQ29tcGlsYXRpb25TdGF0ZSB7XG4gIHJlc291cmNlTG9hZGVyPzogV2VicGFja1Jlc291cmNlTG9hZGVyO1xuICBwcmV2aW91c1VudXNlZD86IFNldDxzdHJpbmc+O1xuICBwYXRoc1BsdWdpbjogVHlwZVNjcmlwdFBhdGhzUGx1Z2luO1xufVxuXG5jb25zdCBQTFVHSU5fTkFNRSA9ICdhbmd1bGFyLWNvbXBpbGVyJztcbmNvbnN0IGNvbXBpbGF0aW9uRmlsZUVtaXR0ZXJzID0gbmV3IFdlYWtNYXA8Q29tcGlsYXRpb24sIEZpbGVFbWl0dGVyQ29sbGVjdGlvbj4oKTtcblxuaW50ZXJmYWNlIEZpbGVFbWl0SGlzdG9yeUl0ZW0ge1xuICBsZW5ndGg6IG51bWJlcjtcbiAgaGFzaDogVWludDhBcnJheTtcbn1cblxuZXhwb3J0IGNsYXNzIEFuZ3VsYXJXZWJwYWNrUGx1Z2luIHtcbiAgcHJpdmF0ZSByZWFkb25seSBwbHVnaW5PcHRpb25zOiBBbmd1bGFyV2VicGFja1BsdWdpbk9wdGlvbnM7XG4gIHByaXZhdGUgY29tcGlsZXJDbGlNb2R1bGU/OiB0eXBlb2YgaW1wb3J0KCdAYW5ndWxhci9jb21waWxlci1jbGknKTtcbiAgcHJpdmF0ZSB3YXRjaE1vZGU/OiBib29sZWFuO1xuICBwcml2YXRlIG5ndHNjTmV4dFByb2dyYW0/OiBOZ3RzY1Byb2dyYW07XG4gIHByaXZhdGUgYnVpbGRlcj86IHRzLkVtaXRBbmRTZW1hbnRpY0RpYWdub3N0aWNzQnVpbGRlclByb2dyYW07XG4gIHByaXZhdGUgc291cmNlRmlsZUNhY2hlPzogU291cmNlRmlsZUNhY2hlO1xuICBwcml2YXRlIHdlYnBhY2tDYWNoZT86IFJldHVyblR5cGU8Q29tcGlsYXRpb25bJ2dldENhY2hlJ10+O1xuICBwcml2YXRlIHdlYnBhY2tDcmVhdGVIYXNoPzogQ29tcGlsZXJbJ3dlYnBhY2snXVsndXRpbCddWydjcmVhdGVIYXNoJ107XG4gIHByaXZhdGUgcmVhZG9ubHkgZmlsZURlcGVuZGVuY2llcyA9IG5ldyBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSByZXF1aXJlZEZpbGVzVG9FbWl0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVxdWlyZWRGaWxlc1RvRW1pdENhY2hlID0gbmV3IE1hcDxzdHJpbmcsIEVtaXRGaWxlUmVzdWx0IHwgdW5kZWZpbmVkPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IGZpbGVFbWl0SGlzdG9yeSA9IG5ldyBNYXA8c3RyaW5nLCBGaWxlRW1pdEhpc3RvcnlJdGVtPigpO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFBhcnRpYWw8QW5ndWxhcldlYnBhY2tQbHVnaW5PcHRpb25zPiA9IHt9KSB7XG4gICAgdGhpcy5wbHVnaW5PcHRpb25zID0ge1xuICAgICAgZW1pdENsYXNzTWV0YWRhdGE6IGZhbHNlLFxuICAgICAgZW1pdE5nTW9kdWxlU2NvcGU6IGZhbHNlLFxuICAgICAgaml0TW9kZTogZmFsc2UsXG4gICAgICBmaWxlUmVwbGFjZW1lbnRzOiB7fSxcbiAgICAgIHN1YnN0aXR1dGlvbnM6IHt9LFxuICAgICAgZGlyZWN0VGVtcGxhdGVMb2FkaW5nOiB0cnVlLFxuICAgICAgdHNjb25maWc6ICd0c2NvbmZpZy5qc29uJyxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGNvbXBpbGVyQ2xpKCk6IHR5cGVvZiBpbXBvcnQoJ0Bhbmd1bGFyL2NvbXBpbGVyLWNsaScpIHtcbiAgICAvLyBUaGUgY29tcGlsZXJDbGlNb2R1bGUgZmllbGQgaXMgZ3VhcmFudGVlZCB0byBiZSBkZWZpbmVkIGR1cmluZyBhIGNvbXBpbGF0aW9uXG4gICAgLy8gZHVlIHRvIHRoZSBgYmVmb3JlQ29tcGlsZWAgaG9vay4gVXNhZ2Ugb2YgdGhpcyBwcm9wZXJ0eSBhY2Nlc3NvciBwcmlvciB0byB0aGVcbiAgICAvLyBob29rIGV4ZWN1dGlvbiBpcyBhbiBpbXBsZW1lbnRhdGlvbiBlcnJvci5cbiAgICBhc3NlcnQub2sodGhpcy5jb21waWxlckNsaU1vZHVsZSwgYCdAYW5ndWxhci9jb21waWxlci1jbGknIHVzZWQgcHJpb3IgdG8gV2VicGFjayBjb21waWxhdGlvbi5gKTtcblxuICAgIHJldHVybiB0aGlzLmNvbXBpbGVyQ2xpTW9kdWxlO1xuICB9XG5cbiAgZ2V0IG9wdGlvbnMoKTogQW5ndWxhcldlYnBhY2tQbHVnaW5PcHRpb25zIHtcbiAgICByZXR1cm4gdGhpcy5wbHVnaW5PcHRpb25zO1xuICB9XG5cbiAgYXBwbHkoY29tcGlsZXI6IENvbXBpbGVyKTogdm9pZCB7XG4gICAgY29uc3QgeyBOb3JtYWxNb2R1bGVSZXBsYWNlbWVudFBsdWdpbiwgV2VicGFja0Vycm9yLCB1dGlsIH0gPSBjb21waWxlci53ZWJwYWNrO1xuICAgIHRoaXMud2VicGFja0NyZWF0ZUhhc2ggPSB1dGlsLmNyZWF0ZUhhc2g7XG5cbiAgICAvLyBTZXR1cCBmaWxlIHJlcGxhY2VtZW50cyB3aXRoIHdlYnBhY2tcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnBsdWdpbk9wdGlvbnMuZmlsZVJlcGxhY2VtZW50cykpIHtcbiAgICAgIG5ldyBOb3JtYWxNb2R1bGVSZXBsYWNlbWVudFBsdWdpbihcbiAgICAgICAgbmV3IFJlZ0V4cCgnXicgKyBrZXkucmVwbGFjZSgvWy4qK1xcLT9eJHt9KCl8W1xcXVxcXFxdL2csICdcXFxcJCYnKSArICckJyksXG4gICAgICAgIHZhbHVlLFxuICAgICAgKS5hcHBseShjb21waWxlcik7XG4gICAgfVxuXG4gICAgLy8gU2V0IHJlc29sdmVyIG9wdGlvbnNcbiAgICBjb25zdCBwYXRoc1BsdWdpbiA9IG5ldyBUeXBlU2NyaXB0UGF0aHNQbHVnaW4oKTtcbiAgICBjb21waWxlci5ob29rcy5hZnRlclJlc29sdmVycy50YXAoUExVR0lOX05BTUUsIChjb21waWxlcikgPT4ge1xuICAgICAgY29tcGlsZXIucmVzb2x2ZXJGYWN0b3J5Lmhvb2tzLnJlc29sdmVPcHRpb25zXG4gICAgICAgIC5mb3IoJ25vcm1hbCcpXG4gICAgICAgIC50YXAoUExVR0lOX05BTUUsIChyZXNvbHZlT3B0aW9ucykgPT4ge1xuICAgICAgICAgIHJlc29sdmVPcHRpb25zLnBsdWdpbnMgPz89IFtdO1xuICAgICAgICAgIHJlc29sdmVPcHRpb25zLnBsdWdpbnMucHVzaChwYXRoc1BsdWdpbik7XG5cbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZU9wdGlvbnM7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gTG9hZCB0aGUgY29tcGlsZXItY2xpIGlmIG5vdCBhbHJlYWR5IGF2YWlsYWJsZVxuICAgIGNvbXBpbGVyLmhvb2tzLmJlZm9yZUNvbXBpbGUudGFwUHJvbWlzZShQTFVHSU5fTkFNRSwgKCkgPT4gdGhpcy5pbml0aWFsaXplQ29tcGlsZXJDbGkoKSk7XG5cbiAgICBjb25zdCBjb21waWxhdGlvblN0YXRlOiBBbmd1bGFyQ29tcGlsYXRpb25TdGF0ZSA9IHsgcGF0aHNQbHVnaW4gfTtcbiAgICBjb21waWxlci5ob29rcy50aGlzQ29tcGlsYXRpb24udGFwKFBMVUdJTl9OQU1FLCAoY29tcGlsYXRpb24pID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuc2V0dXBDb21waWxhdGlvbihjb21waWxhdGlvbiwgY29tcGlsYXRpb25TdGF0ZSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBhZGRFcnJvcihcbiAgICAgICAgICBjb21waWxhdGlvbixcbiAgICAgICAgICBgRmFpbGVkIHRvIGluaXRpYWxpemUgQW5ndWxhciBjb21waWxhdGlvbiAtICR7XG4gICAgICAgICAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IGVycm9yXG4gICAgICAgICAgfWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwQ29tcGlsYXRpb24oY29tcGlsYXRpb246IENvbXBpbGF0aW9uLCBzdGF0ZTogQW5ndWxhckNvbXBpbGF0aW9uU3RhdGUpOiB2b2lkIHtcbiAgICBjb25zdCBjb21waWxlciA9IGNvbXBpbGF0aW9uLmNvbXBpbGVyO1xuXG4gICAgLy8gUmVnaXN0ZXIgcGx1Z2luIHRvIGVuc3VyZSBkZXRlcm1pbmlzdGljIGVtaXQgb3JkZXIgaW4gbXVsdGktcGx1Z2luIHVzYWdlXG4gICAgY29uc3QgZW1pdFJlZ2lzdHJhdGlvbiA9IHRoaXMucmVnaXN0ZXJXaXRoQ29tcGlsYXRpb24oY29tcGlsYXRpb24pO1xuICAgIHRoaXMud2F0Y2hNb2RlID0gY29tcGlsZXIud2F0Y2hNb2RlO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSB3ZWJwYWNrIGNhY2hlXG4gICAgaWYgKCF0aGlzLndlYnBhY2tDYWNoZSAmJiBjb21waWxhdGlvbi5vcHRpb25zLmNhY2hlKSB7XG4gICAgICB0aGlzLndlYnBhY2tDYWNoZSA9IGNvbXBpbGF0aW9uLmdldENhY2hlKFBMVUdJTl9OQU1FKTtcbiAgICB9XG5cbiAgICAvLyBJbml0aWFsaXplIHRoZSByZXNvdXJjZSBsb2FkZXIgaWYgbm90IGFscmVhZHkgc2V0dXBcbiAgICBpZiAoIXN0YXRlLnJlc291cmNlTG9hZGVyKSB7XG4gICAgICBzdGF0ZS5yZXNvdXJjZUxvYWRlciA9IG5ldyBXZWJwYWNrUmVzb3VyY2VMb2FkZXIodGhpcy53YXRjaE1vZGUpO1xuICAgIH1cblxuICAgIC8vIFNldHVwIGFuZCByZWFkIFR5cGVTY3JpcHQgYW5kIEFuZ3VsYXIgY29tcGlsZXIgY29uZmlndXJhdGlvblxuICAgIGNvbnN0IHsgY29tcGlsZXJPcHRpb25zLCByb290TmFtZXMsIGVycm9ycyB9ID0gdGhpcy5sb2FkQ29uZmlndXJhdGlvbigpO1xuXG4gICAgLy8gQ3JlYXRlIGRpYWdub3N0aWNzIHJlcG9ydGVyIGFuZCByZXBvcnQgY29uZmlndXJhdGlvbiBmaWxlIGVycm9yc1xuICAgIGNvbnN0IGRpYWdub3N0aWNzUmVwb3J0ZXIgPSBjcmVhdGVEaWFnbm9zdGljc1JlcG9ydGVyKGNvbXBpbGF0aW9uLCAoZGlhZ25vc3RpYykgPT5cbiAgICAgIHRoaXMuY29tcGlsZXJDbGkuZm9ybWF0RGlhZ25vc3RpY3MoW2RpYWdub3N0aWNdKSxcbiAgICApO1xuICAgIGRpYWdub3N0aWNzUmVwb3J0ZXIoZXJyb3JzKTtcblxuICAgIC8vIFVwZGF0ZSBUeXBlU2NyaXB0IHBhdGggbWFwcGluZyBwbHVnaW4gd2l0aCBuZXcgY29uZmlndXJhdGlvblxuICAgIHN0YXRlLnBhdGhzUGx1Z2luLnVwZGF0ZShjb21waWxlck9wdGlvbnMpO1xuXG4gICAgLy8gQ3JlYXRlIGEgV2VicGFjay1iYXNlZCBUeXBlU2NyaXB0IGNvbXBpbGVyIGhvc3RcbiAgICBjb25zdCBzeXN0ZW0gPSBjcmVhdGVXZWJwYWNrU3lzdGVtKFxuICAgICAgLy8gV2VicGFjayBsYWNrcyBhbiBJbnB1dEZpbGVTeXRlbSB0eXBlIGRlZmluaXRpb24gd2l0aCBzeW5jIGZ1bmN0aW9uc1xuICAgICAgY29tcGlsZXIuaW5wdXRGaWxlU3lzdGVtIGFzIElucHV0RmlsZVN5c3RlbVN5bmMsXG4gICAgICBub3JtYWxpemVQYXRoKGNvbXBpbGVyLmNvbnRleHQpLFxuICAgICk7XG4gICAgY29uc3QgaG9zdCA9IHRzLmNyZWF0ZUluY3JlbWVudGFsQ29tcGlsZXJIb3N0KGNvbXBpbGVyT3B0aW9ucywgc3lzdGVtKTtcblxuICAgIC8vIFNldHVwIHNvdXJjZSBmaWxlIGNhY2hpbmcgYW5kIHJldXNlIGNhY2hlIGZyb20gcHJldmlvdXMgY29tcGlsYXRpb24gaWYgcHJlc2VudFxuICAgIGxldCBjYWNoZSA9IHRoaXMuc291cmNlRmlsZUNhY2hlO1xuICAgIGxldCBjaGFuZ2VkRmlsZXM7XG4gICAgaWYgKGNhY2hlKSB7XG4gICAgICBjaGFuZ2VkRmlsZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgIGZvciAoY29uc3QgY2hhbmdlZEZpbGUgb2YgW1xuICAgICAgICAuLi4oY29tcGlsZXIubW9kaWZpZWRGaWxlcyA/PyBbXSksXG4gICAgICAgIC4uLihjb21waWxlci5yZW1vdmVkRmlsZXMgPz8gW10pLFxuICAgICAgXSkge1xuICAgICAgICBjb25zdCBub3JtYWxpemVkQ2hhbmdlZEZpbGUgPSBub3JtYWxpemVQYXRoKGNoYW5nZWRGaWxlKTtcbiAgICAgICAgLy8gSW52YWxpZGF0ZSBmaWxlIGRlcGVuZGVuY2llc1xuICAgICAgICB0aGlzLmZpbGVEZXBlbmRlbmNpZXMuZGVsZXRlKG5vcm1hbGl6ZWRDaGFuZ2VkRmlsZSk7XG4gICAgICAgIC8vIEludmFsaWRhdGUgZXhpc3RpbmcgY2FjaGVcbiAgICAgICAgY2FjaGUuaW52YWxpZGF0ZShub3JtYWxpemVkQ2hhbmdlZEZpbGUpO1xuXG4gICAgICAgIGNoYW5nZWRGaWxlcy5hZGQobm9ybWFsaXplZENoYW5nZWRGaWxlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSW5pdGlhbGl6ZSBhIG5ldyBjYWNoZVxuICAgICAgY2FjaGUgPSBuZXcgU291cmNlRmlsZUNhY2hlKCk7XG4gICAgICAvLyBPbmx5IHN0b3JlIGNhY2hlIGlmIGluIHdhdGNoIG1vZGVcbiAgICAgIGlmICh0aGlzLndhdGNoTW9kZSkge1xuICAgICAgICB0aGlzLnNvdXJjZUZpbGVDYWNoZSA9IGNhY2hlO1xuICAgICAgfVxuICAgIH1cbiAgICBhdWdtZW50SG9zdFdpdGhDYWNoaW5nKGhvc3QsIGNhY2hlKTtcblxuICAgIGNvbnN0IG1vZHVsZVJlc29sdXRpb25DYWNoZSA9IHRzLmNyZWF0ZU1vZHVsZVJlc29sdXRpb25DYWNoZShcbiAgICAgIGhvc3QuZ2V0Q3VycmVudERpcmVjdG9yeSgpLFxuICAgICAgaG9zdC5nZXRDYW5vbmljYWxGaWxlTmFtZS5iaW5kKGhvc3QpLFxuICAgICAgY29tcGlsZXJPcHRpb25zLFxuICAgICk7XG5cbiAgICAvLyBTZXR1cCBzb3VyY2UgZmlsZSBkZXBlbmRlbmN5IGNvbGxlY3Rpb25cbiAgICBhdWdtZW50SG9zdFdpdGhEZXBlbmRlbmN5Q29sbGVjdGlvbihob3N0LCB0aGlzLmZpbGVEZXBlbmRlbmNpZXMsIG1vZHVsZVJlc29sdXRpb25DYWNoZSk7XG5cbiAgICAvLyBTZXR1cCByZXNvdXJjZSBsb2FkaW5nXG4gICAgc3RhdGUucmVzb3VyY2VMb2FkZXIudXBkYXRlKGNvbXBpbGF0aW9uLCBjaGFuZ2VkRmlsZXMpO1xuICAgIGF1Z21lbnRIb3N0V2l0aFJlc291cmNlcyhob3N0LCBzdGF0ZS5yZXNvdXJjZUxvYWRlciwge1xuICAgICAgZGlyZWN0VGVtcGxhdGVMb2FkaW5nOiB0aGlzLnBsdWdpbk9wdGlvbnMuZGlyZWN0VGVtcGxhdGVMb2FkaW5nLFxuICAgICAgaW5saW5lU3R5bGVGaWxlRXh0ZW5zaW9uOiB0aGlzLnBsdWdpbk9wdGlvbnMuaW5saW5lU3R5bGVGaWxlRXh0ZW5zaW9uLFxuICAgIH0pO1xuXG4gICAgLy8gU2V0dXAgc291cmNlIGZpbGUgYWRqdXN0bWVudCBvcHRpb25zXG4gICAgYXVnbWVudEhvc3RXaXRoUmVwbGFjZW1lbnRzKGhvc3QsIHRoaXMucGx1Z2luT3B0aW9ucy5maWxlUmVwbGFjZW1lbnRzLCBtb2R1bGVSZXNvbHV0aW9uQ2FjaGUpO1xuICAgIGF1Z21lbnRIb3N0V2l0aFN1YnN0aXR1dGlvbnMoaG9zdCwgdGhpcy5wbHVnaW5PcHRpb25zLnN1YnN0aXR1dGlvbnMpO1xuXG4gICAgLy8gQ3JlYXRlIHRoZSBmaWxlIGVtaXR0ZXIgdXNlZCBieSB0aGUgd2VicGFjayBsb2FkZXJcbiAgICBjb25zdCB7IGZpbGVFbWl0dGVyLCBidWlsZGVyLCBpbnRlcm5hbEZpbGVzIH0gPSB0aGlzLnBsdWdpbk9wdGlvbnMuaml0TW9kZVxuICAgICAgPyB0aGlzLnVwZGF0ZUppdFByb2dyYW0oY29tcGlsZXJPcHRpb25zLCByb290TmFtZXMsIGhvc3QsIGRpYWdub3N0aWNzUmVwb3J0ZXIpXG4gICAgICA6IHRoaXMudXBkYXRlQW90UHJvZ3JhbShcbiAgICAgICAgICBjb21waWxlck9wdGlvbnMsXG4gICAgICAgICAgcm9vdE5hbWVzLFxuICAgICAgICAgIGhvc3QsXG4gICAgICAgICAgZGlhZ25vc3RpY3NSZXBvcnRlcixcbiAgICAgICAgICBzdGF0ZS5yZXNvdXJjZUxvYWRlcixcbiAgICAgICAgKTtcblxuICAgIC8vIFNldCBvZiBmaWxlcyB1c2VkIGR1cmluZyB0aGUgdW51c2VkIFR5cGVTY3JpcHQgZmlsZSBhbmFseXNpc1xuICAgIGNvbnN0IGN1cnJlbnRVbnVzZWQgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgIGZvciAoY29uc3Qgc291cmNlRmlsZSBvZiBidWlsZGVyLmdldFNvdXJjZUZpbGVzKCkpIHtcbiAgICAgIGlmIChpbnRlcm5hbEZpbGVzPy5oYXMoc291cmNlRmlsZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIEVuc3VyZSBhbGwgcHJvZ3JhbSBmaWxlcyBhcmUgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBjb21waWxhdGlvbiBhbmQgd2lsbCBiZSB3YXRjaGVkLlxuICAgICAgLy8gV2VicGFjayBkb2VzIG5vdCBub3JtYWxpemUgcGF0aHMuIFRoZXJlZm9yZSwgd2UgbmVlZCB0byBub3JtYWxpemUgdGhlIHBhdGggd2l0aCBGUyBzZXBlcmF0b3JzLlxuICAgICAgY29tcGlsYXRpb24uZmlsZURlcGVuZGVuY2llcy5hZGQoZXh0ZXJuYWxpemVQYXRoKHNvdXJjZUZpbGUuZmlsZU5hbWUpKTtcblxuICAgICAgLy8gQWRkIGFsbCBub24tZGVjbGFyYXRpb24gZmlsZXMgdG8gdGhlIGluaXRpYWwgc2V0IG9mIHVudXNlZCBmaWxlcy4gVGhlIHNldCB3aWxsIGJlXG4gICAgICAvLyBhbmFseXplZCBhbmQgcHJ1bmVkIGFmdGVyIGFsbCBXZWJwYWNrIG1vZHVsZXMgYXJlIGZpbmlzaGVkIGJ1aWxkaW5nLlxuICAgICAgaWYgKCFzb3VyY2VGaWxlLmlzRGVjbGFyYXRpb25GaWxlKSB7XG4gICAgICAgIGN1cnJlbnRVbnVzZWQuYWRkKG5vcm1hbGl6ZVBhdGgoc291cmNlRmlsZS5maWxlTmFtZSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbXBpbGF0aW9uLmhvb2tzLmZpbmlzaE1vZHVsZXMudGFwUHJvbWlzZShQTFVHSU5fTkFNRSwgYXN5bmMgKG1vZHVsZXMpID0+IHtcbiAgICAgIC8vIFJlYnVpbGQgYW55IHJlbWFpbmluZyBBT1QgcmVxdWlyZWQgbW9kdWxlc1xuICAgICAgYXdhaXQgdGhpcy5yZWJ1aWxkUmVxdWlyZWRGaWxlcyhtb2R1bGVzLCBjb21waWxhdGlvbiwgZmlsZUVtaXR0ZXIpO1xuXG4gICAgICAvLyBDbGVhciBvdXQgdGhlIFdlYnBhY2sgY29tcGlsYXRpb24gdG8gYXZvaWQgYW4gZXh0cmEgcmV0YWluaW5nIHJlZmVyZW5jZVxuICAgICAgc3RhdGUucmVzb3VyY2VMb2FkZXI/LmNsZWFyUGFyZW50Q29tcGlsYXRpb24oKTtcblxuICAgICAgLy8gQW5hbHl6ZSBwcm9ncmFtIGZvciB1bnVzZWQgZmlsZXNcbiAgICAgIGlmIChjb21waWxhdGlvbi5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3Qgd2VicGFja01vZHVsZSBvZiBtb2R1bGVzKSB7XG4gICAgICAgIGNvbnN0IHJlc291cmNlID0gKHdlYnBhY2tNb2R1bGUgYXMgTm9ybWFsTW9kdWxlKS5yZXNvdXJjZTtcbiAgICAgICAgaWYgKHJlc291cmNlKSB7XG4gICAgICAgICAgdGhpcy5tYXJrUmVzb3VyY2VVc2VkKG5vcm1hbGl6ZVBhdGgocmVzb3VyY2UpLCBjdXJyZW50VW51c2VkKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHVudXNlZCBvZiBjdXJyZW50VW51c2VkKSB7XG4gICAgICAgIGlmIChzdGF0ZS5wcmV2aW91c1VudXNlZD8uaGFzKHVudXNlZCkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBhZGRXYXJuaW5nKFxuICAgICAgICAgIGNvbXBpbGF0aW9uLFxuICAgICAgICAgIGAke3VudXNlZH0gaXMgcGFydCBvZiB0aGUgVHlwZVNjcmlwdCBjb21waWxhdGlvbiBidXQgaXQncyB1bnVzZWQuXFxuYCArXG4gICAgICAgICAgICBgQWRkIG9ubHkgZW50cnkgcG9pbnRzIHRvIHRoZSAnZmlsZXMnIG9yICdpbmNsdWRlJyBwcm9wZXJ0aWVzIGluIHlvdXIgdHNjb25maWcuYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHN0YXRlLnByZXZpb3VzVW51c2VkID0gY3VycmVudFVudXNlZDtcbiAgICB9KTtcblxuICAgIC8vIFN0b3JlIGZpbGUgZW1pdHRlciBmb3IgbG9hZGVyIHVzYWdlXG4gICAgZW1pdFJlZ2lzdHJhdGlvbi51cGRhdGUoZmlsZUVtaXR0ZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWdpc3RlcldpdGhDb21waWxhdGlvbihjb21waWxhdGlvbjogQ29tcGlsYXRpb24pIHtcbiAgICBsZXQgZmlsZUVtaXR0ZXJzID0gY29tcGlsYXRpb25GaWxlRW1pdHRlcnMuZ2V0KGNvbXBpbGF0aW9uKTtcbiAgICBpZiAoIWZpbGVFbWl0dGVycykge1xuICAgICAgZmlsZUVtaXR0ZXJzID0gbmV3IEZpbGVFbWl0dGVyQ29sbGVjdGlvbigpO1xuICAgICAgY29tcGlsYXRpb25GaWxlRW1pdHRlcnMuc2V0KGNvbXBpbGF0aW9uLCBmaWxlRW1pdHRlcnMpO1xuICAgICAgY29tcGlsYXRpb24uY29tcGlsZXIud2VicGFjay5Ob3JtYWxNb2R1bGUuZ2V0Q29tcGlsYXRpb25Ib29rcyhjb21waWxhdGlvbikubG9hZGVyLnRhcChcbiAgICAgICAgUExVR0lOX05BTUUsXG4gICAgICAgIChsb2FkZXJDb250ZXh0OiB7IFtBbmd1bGFyUGx1Z2luU3ltYm9sXT86IEZpbGVFbWl0dGVyQ29sbGVjdGlvbiB9KSA9PiB7XG4gICAgICAgICAgbG9hZGVyQ29udGV4dFtBbmd1bGFyUGx1Z2luU3ltYm9sXSA9IGZpbGVFbWl0dGVycztcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGVtaXRSZWdpc3RyYXRpb24gPSBmaWxlRW1pdHRlcnMucmVnaXN0ZXIoKTtcblxuICAgIHJldHVybiBlbWl0UmVnaXN0cmF0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXJrUmVzb3VyY2VVc2VkKG5vcm1hbGl6ZWRSZXNvdXJjZVBhdGg6IHN0cmluZywgY3VycmVudFVudXNlZDogU2V0PHN0cmluZz4pOiB2b2lkIHtcbiAgICBpZiAoIWN1cnJlbnRVbnVzZWQuaGFzKG5vcm1hbGl6ZWRSZXNvdXJjZVBhdGgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY3VycmVudFVudXNlZC5kZWxldGUobm9ybWFsaXplZFJlc291cmNlUGF0aCk7XG4gICAgY29uc3QgZGVwZW5kZW5jaWVzID0gdGhpcy5maWxlRGVwZW5kZW5jaWVzLmdldChub3JtYWxpemVkUmVzb3VyY2VQYXRoKTtcbiAgICBpZiAoIWRlcGVuZGVuY2llcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGRlcGVuZGVuY3kgb2YgZGVwZW5kZW5jaWVzKSB7XG4gICAgICB0aGlzLm1hcmtSZXNvdXJjZVVzZWQobm9ybWFsaXplUGF0aChkZXBlbmRlbmN5KSwgY3VycmVudFVudXNlZCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZWJ1aWxkUmVxdWlyZWRGaWxlcyhcbiAgICBtb2R1bGVzOiBJdGVyYWJsZTxNb2R1bGU+LFxuICAgIGNvbXBpbGF0aW9uOiBDb21waWxhdGlvbixcbiAgICBmaWxlRW1pdHRlcjogRmlsZUVtaXR0ZXIsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnJlcXVpcmVkRmlsZXNUb0VtaXQuc2l6ZSA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbGVzVG9SZWJ1aWxkID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgZm9yIChjb25zdCByZXF1aXJlZEZpbGUgb2YgdGhpcy5yZXF1aXJlZEZpbGVzVG9FbWl0KSB7XG4gICAgICBjb25zdCBoaXN0b3J5ID0gYXdhaXQgdGhpcy5nZXRGaWxlRW1pdEhpc3RvcnkocmVxdWlyZWRGaWxlKTtcbiAgICAgIGlmIChoaXN0b3J5KSB7XG4gICAgICAgIGNvbnN0IGVtaXRSZXN1bHQgPSBhd2FpdCBmaWxlRW1pdHRlcihyZXF1aXJlZEZpbGUpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZW1pdFJlc3VsdD8uY29udGVudCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgaGlzdG9yeS5sZW5ndGggIT09IGVtaXRSZXN1bHQuY29udGVudC5sZW5ndGggfHxcbiAgICAgICAgICBlbWl0UmVzdWx0Lmhhc2ggPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgIEJ1ZmZlci5jb21wYXJlKGhpc3RvcnkuaGFzaCwgZW1pdFJlc3VsdC5oYXNoKSAhPT0gMFxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBOZXcgZW1pdCByZXN1bHQgaXMgZGlmZmVyZW50IHNvIHJlYnVpbGQgdXNpbmcgbmV3IGVtaXQgcmVzdWx0XG4gICAgICAgICAgdGhpcy5yZXF1aXJlZEZpbGVzVG9FbWl0Q2FjaGUuc2V0KHJlcXVpcmVkRmlsZSwgZW1pdFJlc3VsdCk7XG4gICAgICAgICAgZmlsZXNUb1JlYnVpbGQuYWRkKHJlcXVpcmVkRmlsZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE5vIGVtaXQgaGlzdG9yeSBzbyByZWJ1aWxkXG4gICAgICAgIGZpbGVzVG9SZWJ1aWxkLmFkZChyZXF1aXJlZEZpbGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmaWxlc1RvUmVidWlsZC5zaXplID4gMCkge1xuICAgICAgY29uc3QgcmVidWlsZCA9ICh3ZWJwYWNrTW9kdWxlOiBNb2R1bGUpID0+XG4gICAgICAgIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiBjb21waWxhdGlvbi5yZWJ1aWxkTW9kdWxlKHdlYnBhY2tNb2R1bGUsICgpID0+IHJlc29sdmUoKSkpO1xuXG4gICAgICBjb25zdCBtb2R1bGVzVG9SZWJ1aWxkID0gW107XG4gICAgICBmb3IgKGNvbnN0IHdlYnBhY2tNb2R1bGUgb2YgbW9kdWxlcykge1xuICAgICAgICBjb25zdCByZXNvdXJjZSA9ICh3ZWJwYWNrTW9kdWxlIGFzIE5vcm1hbE1vZHVsZSkucmVzb3VyY2U7XG4gICAgICAgIGlmIChyZXNvdXJjZSAmJiBmaWxlc1RvUmVidWlsZC5oYXMobm9ybWFsaXplUGF0aChyZXNvdXJjZSkpKSB7XG4gICAgICAgICAgbW9kdWxlc1RvUmVidWlsZC5wdXNoKHdlYnBhY2tNb2R1bGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChtb2R1bGVzVG9SZWJ1aWxkLm1hcCgod2VicGFja01vZHVsZSkgPT4gcmVidWlsZCh3ZWJwYWNrTW9kdWxlKSkpO1xuICAgIH1cblxuICAgIHRoaXMucmVxdWlyZWRGaWxlc1RvRW1pdC5jbGVhcigpO1xuICAgIHRoaXMucmVxdWlyZWRGaWxlc1RvRW1pdENhY2hlLmNsZWFyKCk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRDb25maWd1cmF0aW9uKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIG9wdGlvbnM6IGNvbXBpbGVyT3B0aW9ucyxcbiAgICAgIHJvb3ROYW1lcyxcbiAgICAgIGVycm9ycyxcbiAgICB9ID0gdGhpcy5jb21waWxlckNsaS5yZWFkQ29uZmlndXJhdGlvbihcbiAgICAgIHRoaXMucGx1Z2luT3B0aW9ucy50c2NvbmZpZyxcbiAgICAgIHRoaXMucGx1Z2luT3B0aW9ucy5jb21waWxlck9wdGlvbnMsXG4gICAgKTtcbiAgICBjb21waWxlck9wdGlvbnMubm9FbWl0T25FcnJvciA9IGZhbHNlO1xuICAgIGNvbXBpbGVyT3B0aW9ucy5zdXBwcmVzc091dHB1dFBhdGhDaGVjayA9IHRydWU7XG4gICAgY29tcGlsZXJPcHRpb25zLm91dERpciA9IHVuZGVmaW5lZDtcbiAgICBjb21waWxlck9wdGlvbnMuaW5saW5lU291cmNlcyA9IGNvbXBpbGVyT3B0aW9ucy5zb3VyY2VNYXA7XG4gICAgY29tcGlsZXJPcHRpb25zLmlubGluZVNvdXJjZU1hcCA9IGZhbHNlO1xuICAgIGNvbXBpbGVyT3B0aW9ucy5tYXBSb290ID0gdW5kZWZpbmVkO1xuICAgIGNvbXBpbGVyT3B0aW9ucy5zb3VyY2VSb290ID0gdW5kZWZpbmVkO1xuICAgIGNvbXBpbGVyT3B0aW9ucy5hbGxvd0VtcHR5Q29kZWdlbkZpbGVzID0gZmFsc2U7XG4gICAgY29tcGlsZXJPcHRpb25zLmFubm90YXRpb25zQXMgPSAnZGVjb3JhdG9ycyc7XG4gICAgY29tcGlsZXJPcHRpb25zLmVuYWJsZVJlc291cmNlSW5saW5pbmcgPSBmYWxzZTtcblxuICAgIHJldHVybiB7IGNvbXBpbGVyT3B0aW9ucywgcm9vdE5hbWVzLCBlcnJvcnMgfTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQW90UHJvZ3JhbShcbiAgICBjb21waWxlck9wdGlvbnM6IENvbXBpbGVyT3B0aW9ucyxcbiAgICByb290TmFtZXM6IHN0cmluZ1tdLFxuICAgIGhvc3Q6IENvbXBpbGVySG9zdCxcbiAgICBkaWFnbm9zdGljc1JlcG9ydGVyOiBEaWFnbm9zdGljc1JlcG9ydGVyLFxuICAgIHJlc291cmNlTG9hZGVyOiBXZWJwYWNrUmVzb3VyY2VMb2FkZXIsXG4gICkge1xuICAgIC8vIENyZWF0ZSB0aGUgQW5ndWxhciBzcGVjaWZpYyBwcm9ncmFtIHRoYXQgY29udGFpbnMgdGhlIEFuZ3VsYXIgY29tcGlsZXJcbiAgICBjb25zdCBhbmd1bGFyUHJvZ3JhbSA9IG5ldyB0aGlzLmNvbXBpbGVyQ2xpLk5ndHNjUHJvZ3JhbShcbiAgICAgIHJvb3ROYW1lcyxcbiAgICAgIGNvbXBpbGVyT3B0aW9ucyxcbiAgICAgIGhvc3QsXG4gICAgICB0aGlzLm5ndHNjTmV4dFByb2dyYW0sXG4gICAgKTtcbiAgICBjb25zdCBhbmd1bGFyQ29tcGlsZXIgPSBhbmd1bGFyUHJvZ3JhbS5jb21waWxlcjtcblxuICAgIC8vIFRoZSBgaWdub3JlRm9yRW1pdGAgcmV0dXJuIHZhbHVlIGNhbiBiZSBzYWZlbHkgaWdub3JlZCB3aGVuIGVtaXR0aW5nLiBPbmx5IGZpbGVzXG4gICAgLy8gdGhhdCB3aWxsIGJlIGJ1bmRsZWQgKHJlcXVlc3RlZCBieSBXZWJwYWNrKSB3aWxsIGJlIGVtaXR0ZWQuIENvbWJpbmVkIHdpdGggVHlwZVNjcmlwdCdzXG4gICAgLy8gZWxpZGluZyBvZiB0eXBlIG9ubHkgaW1wb3J0cywgdGhpcyB3aWxsIGNhdXNlIHR5cGUgb25seSBmaWxlcyB0byBiZSBhdXRvbWF0aWNhbGx5IGlnbm9yZWQuXG4gICAgLy8gSW50ZXJuYWwgQW5ndWxhciB0eXBlIGNoZWNrIGZpbGVzIGFyZSBhbHNvIG5vdCByZXNvbHZhYmxlIGJ5IHRoZSBidW5kbGVyLiBFdmVuIGlmIHRoZXlcbiAgICAvLyB3ZXJlIHNvbWVob3cgZXJyYW50bHkgaW1wb3J0ZWQsIHRoZSBidW5kbGVyIHdvdWxkIGVycm9yIGJlZm9yZSBhbiBlbWl0IHdhcyBhdHRlbXB0ZWQuXG4gICAgLy8gRGlhZ25vc3RpY3MgYXJlIHN0aWxsIGNvbGxlY3RlZCBmb3IgYWxsIGZpbGVzIHdoaWNoIHJlcXVpcmVzIHVzaW5nIGBpZ25vcmVGb3JEaWFnbm9zdGljc2AuXG4gICAgY29uc3QgeyBpZ25vcmVGb3JEaWFnbm9zdGljcywgaWdub3JlRm9yRW1pdCB9ID0gYW5ndWxhckNvbXBpbGVyO1xuXG4gICAgLy8gU291cmNlRmlsZSB2ZXJzaW9ucyBhcmUgcmVxdWlyZWQgZm9yIGJ1aWxkZXIgcHJvZ3JhbXMuXG4gICAgLy8gVGhlIHdyYXBwZWQgaG9zdCBpbnNpZGUgTmd0c2NQcm9ncmFtIGFkZHMgYWRkaXRpb25hbCBmaWxlcyB0aGF0IHdpbGwgbm90IGhhdmUgdmVyc2lvbnMuXG4gICAgY29uc3QgdHlwZVNjcmlwdFByb2dyYW0gPSBhbmd1bGFyUHJvZ3JhbS5nZXRUc1Byb2dyYW0oKTtcbiAgICBhdWdtZW50UHJvZ3JhbVdpdGhWZXJzaW9uaW5nKHR5cGVTY3JpcHRQcm9ncmFtKTtcblxuICAgIGxldCBidWlsZGVyOiB0cy5CdWlsZGVyUHJvZ3JhbSB8IHRzLkVtaXRBbmRTZW1hbnRpY0RpYWdub3N0aWNzQnVpbGRlclByb2dyYW07XG4gICAgaWYgKHRoaXMud2F0Y2hNb2RlKSB7XG4gICAgICBidWlsZGVyID0gdGhpcy5idWlsZGVyID0gdHMuY3JlYXRlRW1pdEFuZFNlbWFudGljRGlhZ25vc3RpY3NCdWlsZGVyUHJvZ3JhbShcbiAgICAgICAgdHlwZVNjcmlwdFByb2dyYW0sXG4gICAgICAgIGhvc3QsXG4gICAgICAgIHRoaXMuYnVpbGRlcixcbiAgICAgICk7XG4gICAgICB0aGlzLm5ndHNjTmV4dFByb2dyYW0gPSBhbmd1bGFyUHJvZ3JhbTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gV2hlbiBub3QgaW4gd2F0Y2ggbW9kZSwgdGhlIHN0YXJ0dXAgY29zdCBvZiB0aGUgaW5jcmVtZW50YWwgYW5hbHlzaXMgY2FuIGJlIGF2b2lkZWQgYnlcbiAgICAgIC8vIHVzaW5nIGFuIGFic3RyYWN0IGJ1aWxkZXIgdGhhdCBvbmx5IHdyYXBzIGEgVHlwZVNjcmlwdCBwcm9ncmFtLlxuICAgICAgYnVpbGRlciA9IHRzLmNyZWF0ZUFic3RyYWN0QnVpbGRlcih0eXBlU2NyaXB0UHJvZ3JhbSwgaG9zdCk7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHNlbWFudGljIGRpYWdub3N0aWNzIGNhY2hlXG4gICAgY29uc3QgYWZmZWN0ZWRGaWxlcyA9IG5ldyBTZXQ8dHMuU291cmNlRmlsZT4oKTtcblxuICAgIC8vIEFuYWx5emUgYWZmZWN0ZWQgZmlsZXMgd2hlbiBpbiB3YXRjaCBtb2RlIGZvciBpbmNyZW1lbnRhbCB0eXBlIGNoZWNraW5nXG4gICAgaWYgKCdnZXRTZW1hbnRpY0RpYWdub3N0aWNzT2ZOZXh0QWZmZWN0ZWRGaWxlJyBpbiBidWlsZGVyKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc3RhbnQtY29uZGl0aW9uXG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBidWlsZGVyLmdldFNlbWFudGljRGlhZ25vc3RpY3NPZk5leHRBZmZlY3RlZEZpbGUodW5kZWZpbmVkLCAoc291cmNlRmlsZSkgPT4ge1xuICAgICAgICAgIC8vIElmIHRoZSBhZmZlY3RlZCBmaWxlIGlzIGEgVFRDIHNoaW0sIGFkZCB0aGUgc2hpbSdzIG9yaWdpbmFsIHNvdXJjZSBmaWxlLlxuICAgICAgICAgIC8vIFRoaXMgZW5zdXJlcyB0aGF0IGNoYW5nZXMgdGhhdCBhZmZlY3QgVFRDIGFyZSB0eXBlY2hlY2tlZCBldmVuIHdoZW4gdGhlIGNoYW5nZXNcbiAgICAgICAgICAvLyBhcmUgb3RoZXJ3aXNlIHVucmVsYXRlZCBmcm9tIGEgVFMgcGVyc3BlY3RpdmUgYW5kIGRvIG5vdCByZXN1bHQgaW4gSXZ5IGNvZGVnZW4gY2hhbmdlcy5cbiAgICAgICAgICAvLyBGb3IgZXhhbXBsZSwgY2hhbmdpbmcgQElucHV0IHByb3BlcnR5IHR5cGVzIG9mIGEgZGlyZWN0aXZlIHVzZWQgaW4gYW5vdGhlciBjb21wb25lbnQnc1xuICAgICAgICAgIC8vIHRlbXBsYXRlLlxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGlnbm9yZUZvckRpYWdub3N0aWNzLmhhcyhzb3VyY2VGaWxlKSAmJlxuICAgICAgICAgICAgc291cmNlRmlsZS5maWxlTmFtZS5lbmRzV2l0aCgnLm5ndHlwZWNoZWNrLnRzJylcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIFRoaXMgZmlsZSBuYW1lIGNvbnZlcnNpb24gcmVsaWVzIG9uIGludGVybmFsIGNvbXBpbGVyIGxvZ2ljIGFuZCBzaG91bGQgYmUgY29udmVydGVkXG4gICAgICAgICAgICAvLyB0byBhbiBvZmZpY2lhbCBtZXRob2Qgd2hlbiBhdmFpbGFibGUuIDE1IGlzIGxlbmd0aCBvZiBgLm5ndHlwZWNoZWNrLnRzYFxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxGaWxlbmFtZSA9IHNvdXJjZUZpbGUuZmlsZU5hbWUuc2xpY2UoMCwgLTE1KSArICcudHMnO1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxTb3VyY2VGaWxlID0gYnVpbGRlci5nZXRTb3VyY2VGaWxlKG9yaWdpbmFsRmlsZW5hbWUpO1xuICAgICAgICAgICAgaWYgKG9yaWdpbmFsU291cmNlRmlsZSkge1xuICAgICAgICAgICAgICBhZmZlY3RlZEZpbGVzLmFkZChvcmlnaW5hbFNvdXJjZUZpbGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBhZmZlY3RlZEZpbGVzLmFkZChyZXN1bHQuYWZmZWN0ZWQgYXMgdHMuU291cmNlRmlsZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ29sbGVjdCBwcm9ncmFtIGxldmVsIGRpYWdub3N0aWNzXG4gICAgY29uc3QgZGlhZ25vc3RpY3MgPSBbXG4gICAgICAuLi5hbmd1bGFyQ29tcGlsZXIuZ2V0T3B0aW9uRGlhZ25vc3RpY3MoKSxcbiAgICAgIC4uLmJ1aWxkZXIuZ2V0T3B0aW9uc0RpYWdub3N0aWNzKCksXG4gICAgICAuLi5idWlsZGVyLmdldEdsb2JhbERpYWdub3N0aWNzKCksXG4gICAgXTtcbiAgICBkaWFnbm9zdGljc1JlcG9ydGVyKGRpYWdub3N0aWNzKTtcblxuICAgIC8vIENvbGxlY3Qgc291cmNlIGZpbGUgc3BlY2lmaWMgZGlhZ25vc3RpY3NcbiAgICBmb3IgKGNvbnN0IHNvdXJjZUZpbGUgb2YgYnVpbGRlci5nZXRTb3VyY2VGaWxlcygpKSB7XG4gICAgICBpZiAoIWlnbm9yZUZvckRpYWdub3N0aWNzLmhhcyhzb3VyY2VGaWxlKSkge1xuICAgICAgICBkaWFnbm9zdGljc1JlcG9ydGVyKGJ1aWxkZXIuZ2V0U3ludGFjdGljRGlhZ25vc3RpY3Moc291cmNlRmlsZSkpO1xuICAgICAgICBkaWFnbm9zdGljc1JlcG9ydGVyKGJ1aWxkZXIuZ2V0U2VtYW50aWNEaWFnbm9zdGljcyhzb3VyY2VGaWxlKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgdHJhbnNmb3JtZXJzID0gY3JlYXRlQW90VHJhbnNmb3JtZXJzKGJ1aWxkZXIsIHRoaXMucGx1Z2luT3B0aW9ucyk7XG5cbiAgICBjb25zdCBnZXREZXBlbmRlbmNpZXMgPSAoc291cmNlRmlsZTogdHMuU291cmNlRmlsZSkgPT4ge1xuICAgICAgY29uc3QgZGVwZW5kZW5jaWVzID0gW107XG4gICAgICBmb3IgKGNvbnN0IHJlc291cmNlUGF0aCBvZiBhbmd1bGFyQ29tcGlsZXIuZ2V0UmVzb3VyY2VEZXBlbmRlbmNpZXMoc291cmNlRmlsZSkpIHtcbiAgICAgICAgZGVwZW5kZW5jaWVzLnB1c2goXG4gICAgICAgICAgcmVzb3VyY2VQYXRoLFxuICAgICAgICAgIC8vIFJldHJpZXZlIGFsbCBkZXBlbmRlbmNpZXMgb2YgdGhlIHJlc291cmNlIChzdHlsZXNoZWV0IGltcG9ydHMsIGV0Yy4pXG4gICAgICAgICAgLi4ucmVzb3VyY2VMb2FkZXIuZ2V0UmVzb3VyY2VEZXBlbmRlbmNpZXMocmVzb3VyY2VQYXRoKSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRlcGVuZGVuY2llcztcbiAgICB9O1xuXG4gICAgLy8gUmVxdWlyZWQgdG8gc3VwcG9ydCBhc3luY2hyb25vdXMgcmVzb3VyY2UgbG9hZGluZ1xuICAgIC8vIE11c3QgYmUgZG9uZSBiZWZvcmUgY3JlYXRpbmcgdHJhbnNmb3JtZXJzIG9yIGdldHRpbmcgdGVtcGxhdGUgZGlhZ25vc3RpY3NcbiAgICBjb25zdCBwZW5kaW5nQW5hbHlzaXMgPSBhbmd1bGFyQ29tcGlsZXJcbiAgICAgIC5hbmFseXplQXN5bmMoKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLnJlcXVpcmVkRmlsZXNUb0VtaXQuY2xlYXIoKTtcblxuICAgICAgICBmb3IgKGNvbnN0IHNvdXJjZUZpbGUgb2YgYnVpbGRlci5nZXRTb3VyY2VGaWxlcygpKSB7XG4gICAgICAgICAgaWYgKHNvdXJjZUZpbGUuaXNEZWNsYXJhdGlvbkZpbGUpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIENvbGxlY3Qgc291cmNlcyB0aGF0IGFyZSByZXF1aXJlZCB0byBiZSBlbWl0dGVkXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIWlnbm9yZUZvckVtaXQuaGFzKHNvdXJjZUZpbGUpICYmXG4gICAgICAgICAgICAhYW5ndWxhckNvbXBpbGVyLmluY3JlbWVudGFsQ29tcGlsYXRpb24uc2FmZVRvU2tpcEVtaXQoc291cmNlRmlsZSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMucmVxdWlyZWRGaWxlc1RvRW1pdC5hZGQobm9ybWFsaXplUGF0aChzb3VyY2VGaWxlLmZpbGVOYW1lKSk7XG5cbiAgICAgICAgICAgIC8vIElmIHJlcXVpcmVkIHRvIGVtaXQsIGRpYWdub3N0aWNzIG1heSBoYXZlIGFsc28gY2hhbmdlZFxuICAgICAgICAgICAgaWYgKCFpZ25vcmVGb3JEaWFnbm9zdGljcy5oYXMoc291cmNlRmlsZSkpIHtcbiAgICAgICAgICAgICAgYWZmZWN0ZWRGaWxlcy5hZGQoc291cmNlRmlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHRoaXMuc291cmNlRmlsZUNhY2hlICYmXG4gICAgICAgICAgICAhYWZmZWN0ZWRGaWxlcy5oYXMoc291cmNlRmlsZSkgJiZcbiAgICAgICAgICAgICFpZ25vcmVGb3JEaWFnbm9zdGljcy5oYXMoc291cmNlRmlsZSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIFVzZSBjYWNoZWQgQW5ndWxhciBkaWFnbm9zdGljcyBmb3IgdW5jaGFuZ2VkIGFuZCB1bmFmZmVjdGVkIGZpbGVzXG4gICAgICAgICAgICBjb25zdCBhbmd1bGFyRGlhZ25vc3RpY3MgPSB0aGlzLnNvdXJjZUZpbGVDYWNoZS5nZXRBbmd1bGFyRGlhZ25vc3RpY3Moc291cmNlRmlsZSk7XG4gICAgICAgICAgICBpZiAoYW5ndWxhckRpYWdub3N0aWNzKSB7XG4gICAgICAgICAgICAgIGRpYWdub3N0aWNzUmVwb3J0ZXIoYW5ndWxhckRpYWdub3N0aWNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDb2xsZWN0IG5ldyBBbmd1bGFyIGRpYWdub3N0aWNzIGZvciBmaWxlcyBhZmZlY3RlZCBieSBjaGFuZ2VzXG4gICAgICAgIGNvbnN0IE9wdGltaXplRm9yID0gdGhpcy5jb21waWxlckNsaS5PcHRpbWl6ZUZvcjtcbiAgICAgICAgY29uc3Qgb3B0aW1pemVEaWFnbm9zdGljc0ZvciA9XG4gICAgICAgICAgYWZmZWN0ZWRGaWxlcy5zaXplIDw9IERJQUdOT1NUSUNTX0FGRkVDVEVEX1RIUkVTSE9MRFxuICAgICAgICAgICAgPyBPcHRpbWl6ZUZvci5TaW5nbGVGaWxlXG4gICAgICAgICAgICA6IE9wdGltaXplRm9yLldob2xlUHJvZ3JhbTtcbiAgICAgICAgZm9yIChjb25zdCBhZmZlY3RlZEZpbGUgb2YgYWZmZWN0ZWRGaWxlcykge1xuICAgICAgICAgIGNvbnN0IGFuZ3VsYXJEaWFnbm9zdGljcyA9IGFuZ3VsYXJDb21waWxlci5nZXREaWFnbm9zdGljc0ZvckZpbGUoXG4gICAgICAgICAgICBhZmZlY3RlZEZpbGUsXG4gICAgICAgICAgICBvcHRpbWl6ZURpYWdub3N0aWNzRm9yLFxuICAgICAgICAgICk7XG4gICAgICAgICAgZGlhZ25vc3RpY3NSZXBvcnRlcihhbmd1bGFyRGlhZ25vc3RpY3MpO1xuICAgICAgICAgIHRoaXMuc291cmNlRmlsZUNhY2hlPy51cGRhdGVBbmd1bGFyRGlhZ25vc3RpY3MoYWZmZWN0ZWRGaWxlLCBhbmd1bGFyRGlhZ25vc3RpY3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBlbWl0dGVyOiB0aGlzLmNyZWF0ZUZpbGVFbWl0dGVyKFxuICAgICAgICAgICAgYnVpbGRlcixcbiAgICAgICAgICAgIG1lcmdlVHJhbnNmb3JtZXJzKGFuZ3VsYXJDb21waWxlci5wcmVwYXJlRW1pdCgpLnRyYW5zZm9ybWVycywgdHJhbnNmb3JtZXJzKSxcbiAgICAgICAgICAgIGdldERlcGVuZGVuY2llcyxcbiAgICAgICAgICAgIChzb3VyY2VGaWxlKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMucmVxdWlyZWRGaWxlc1RvRW1pdC5kZWxldGUobm9ybWFsaXplUGF0aChzb3VyY2VGaWxlLmZpbGVOYW1lKSk7XG4gICAgICAgICAgICAgIGFuZ3VsYXJDb21waWxlci5pbmNyZW1lbnRhbENvbXBpbGF0aW9uLnJlY29yZFN1Y2Nlc3NmdWxFbWl0KHNvdXJjZUZpbGUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICApLFxuICAgICAgICB9O1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyKSA9PiAoeyBlcnJvck1lc3NhZ2U6IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBgJHtlcnJ9YCB9KSk7XG5cbiAgICBjb25zdCBhbmFseXppbmdGaWxlRW1pdHRlcjogRmlsZUVtaXR0ZXIgPSBhc3luYyAoZmlsZSkgPT4ge1xuICAgICAgY29uc3QgYW5hbHlzaXMgPSBhd2FpdCBwZW5kaW5nQW5hbHlzaXM7XG5cbiAgICAgIGlmICgnZXJyb3JNZXNzYWdlJyBpbiBhbmFseXNpcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYW5hbHlzaXMuZXJyb3JNZXNzYWdlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFuYWx5c2lzLmVtaXR0ZXIoZmlsZSk7XG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICBmaWxlRW1pdHRlcjogYW5hbHl6aW5nRmlsZUVtaXR0ZXIsXG4gICAgICBidWlsZGVyLFxuICAgICAgaW50ZXJuYWxGaWxlczogaWdub3JlRm9yRW1pdCxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVKaXRQcm9ncmFtKFxuICAgIGNvbXBpbGVyT3B0aW9uczogQ29tcGlsZXJPcHRpb25zLFxuICAgIHJvb3ROYW1lczogcmVhZG9ubHkgc3RyaW5nW10sXG4gICAgaG9zdDogQ29tcGlsZXJIb3N0LFxuICAgIGRpYWdub3N0aWNzUmVwb3J0ZXI6IERpYWdub3N0aWNzUmVwb3J0ZXIsXG4gICkge1xuICAgIGxldCBidWlsZGVyO1xuICAgIGlmICh0aGlzLndhdGNoTW9kZSkge1xuICAgICAgYnVpbGRlciA9IHRoaXMuYnVpbGRlciA9IHRzLmNyZWF0ZUVtaXRBbmRTZW1hbnRpY0RpYWdub3N0aWNzQnVpbGRlclByb2dyYW0oXG4gICAgICAgIHJvb3ROYW1lcyxcbiAgICAgICAgY29tcGlsZXJPcHRpb25zLFxuICAgICAgICBob3N0LFxuICAgICAgICB0aGlzLmJ1aWxkZXIsXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBXaGVuIG5vdCBpbiB3YXRjaCBtb2RlLCB0aGUgc3RhcnR1cCBjb3N0IG9mIHRoZSBpbmNyZW1lbnRhbCBhbmFseXNpcyBjYW4gYmUgYXZvaWRlZCBieVxuICAgICAgLy8gdXNpbmcgYW4gYWJzdHJhY3QgYnVpbGRlciB0aGF0IG9ubHkgd3JhcHMgYSBUeXBlU2NyaXB0IHByb2dyYW0uXG4gICAgICBidWlsZGVyID0gdHMuY3JlYXRlQWJzdHJhY3RCdWlsZGVyKHJvb3ROYW1lcywgY29tcGlsZXJPcHRpb25zLCBob3N0KTtcbiAgICB9XG5cbiAgICBjb25zdCBkaWFnbm9zdGljcyA9IFtcbiAgICAgIC4uLmJ1aWxkZXIuZ2V0T3B0aW9uc0RpYWdub3N0aWNzKCksXG4gICAgICAuLi5idWlsZGVyLmdldEdsb2JhbERpYWdub3N0aWNzKCksXG4gICAgICAuLi5idWlsZGVyLmdldFN5bnRhY3RpY0RpYWdub3N0aWNzKCksXG4gICAgICAvLyBHYXRoZXIgaW5jcmVtZW50YWwgc2VtYW50aWMgZGlhZ25vc3RpY3NcbiAgICAgIC4uLmJ1aWxkZXIuZ2V0U2VtYW50aWNEaWFnbm9zdGljcygpLFxuICAgIF07XG4gICAgZGlhZ25vc3RpY3NSZXBvcnRlcihkaWFnbm9zdGljcyk7XG5cbiAgICBjb25zdCB0cmFuc2Zvcm1lcnMgPSBjcmVhdGVKaXRUcmFuc2Zvcm1lcnMoYnVpbGRlciwgdGhpcy5jb21waWxlckNsaSwgdGhpcy5wbHVnaW5PcHRpb25zKTtcblxuICAgIHJldHVybiB7XG4gICAgICBmaWxlRW1pdHRlcjogdGhpcy5jcmVhdGVGaWxlRW1pdHRlcihidWlsZGVyLCB0cmFuc2Zvcm1lcnMsICgpID0+IFtdKSxcbiAgICAgIGJ1aWxkZXIsXG4gICAgICBpbnRlcm5hbEZpbGVzOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRmlsZUVtaXR0ZXIoXG4gICAgcHJvZ3JhbTogdHMuQnVpbGRlclByb2dyYW0sXG4gICAgdHJhbnNmb3JtZXJzOiB0cy5DdXN0b21UcmFuc2Zvcm1lcnMgPSB7fSxcbiAgICBnZXRFeHRyYURlcGVuZGVuY2llczogKHNvdXJjZUZpbGU6IHRzLlNvdXJjZUZpbGUpID0+IEl0ZXJhYmxlPHN0cmluZz4sXG4gICAgb25BZnRlckVtaXQ/OiAoc291cmNlRmlsZTogdHMuU291cmNlRmlsZSkgPT4gdm9pZCxcbiAgKTogRmlsZUVtaXR0ZXIge1xuICAgIHJldHVybiBhc3luYyAoZmlsZTogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBmaWxlUGF0aCA9IG5vcm1hbGl6ZVBhdGgoZmlsZSk7XG4gICAgICBpZiAodGhpcy5yZXF1aXJlZEZpbGVzVG9FbWl0Q2FjaGUuaGFzKGZpbGVQYXRoKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXF1aXJlZEZpbGVzVG9FbWl0Q2FjaGUuZ2V0KGZpbGVQYXRoKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc291cmNlRmlsZSA9IHByb2dyYW0uZ2V0U291cmNlRmlsZShmaWxlUGF0aCk7XG4gICAgICBpZiAoIXNvdXJjZUZpbGUpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgbGV0IGNvbnRlbnQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIGxldCBtYXA6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIHByb2dyYW0uZW1pdChcbiAgICAgICAgc291cmNlRmlsZSxcbiAgICAgICAgKGZpbGVuYW1lLCBkYXRhKSA9PiB7XG4gICAgICAgICAgaWYgKGZpbGVuYW1lLmVuZHNXaXRoKCcubWFwJykpIHtcbiAgICAgICAgICAgIG1hcCA9IGRhdGE7XG4gICAgICAgICAgfSBlbHNlIGlmIChmaWxlbmFtZS5lbmRzV2l0aCgnLmpzJykpIHtcbiAgICAgICAgICAgIGNvbnRlbnQgPSBkYXRhO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHRyYW5zZm9ybWVycyxcbiAgICAgICk7XG5cbiAgICAgIG9uQWZ0ZXJFbWl0Py4oc291cmNlRmlsZSk7XG5cbiAgICAgIC8vIENhcHR1cmUgZW1pdCBoaXN0b3J5IGluZm8gZm9yIEFuZ3VsYXIgcmVidWlsZCBhbmFseXNpc1xuICAgICAgY29uc3QgaGFzaCA9IGNvbnRlbnQgPyAoYXdhaXQgdGhpcy5hZGRGaWxlRW1pdEhpc3RvcnkoZmlsZVBhdGgsIGNvbnRlbnQpKS5oYXNoIDogdW5kZWZpbmVkO1xuXG4gICAgICBjb25zdCBkZXBlbmRlbmNpZXMgPSBbXG4gICAgICAgIC4uLih0aGlzLmZpbGVEZXBlbmRlbmNpZXMuZ2V0KGZpbGVQYXRoKSB8fCBbXSksXG4gICAgICAgIC4uLmdldEV4dHJhRGVwZW5kZW5jaWVzKHNvdXJjZUZpbGUpLFxuICAgICAgXS5tYXAoZXh0ZXJuYWxpemVQYXRoKTtcblxuICAgICAgcmV0dXJuIHsgY29udGVudCwgbWFwLCBkZXBlbmRlbmNpZXMsIGhhc2ggfTtcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBpbml0aWFsaXplQ29tcGlsZXJDbGkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuY29tcGlsZXJDbGlNb2R1bGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBUaGlzIHVzZXMgYSBkeW5hbWljIGltcG9ydCB0byBsb2FkIGBAYW5ndWxhci9jb21waWxlci1jbGlgIHdoaWNoIG1heSBiZSBFU00uXG4gICAgLy8gQ29tbW9uSlMgY29kZSBjYW4gbG9hZCBFU00gY29kZSB2aWEgYSBkeW5hbWljIGltcG9ydC4gVW5mb3J0dW5hdGVseSwgVHlwZVNjcmlwdFxuICAgIC8vIHdpbGwgY3VycmVudGx5LCB1bmNvbmRpdGlvbmFsbHkgZG93bmxldmVsIGR5bmFtaWMgaW1wb3J0IGludG8gYSByZXF1aXJlIGNhbGwuXG4gICAgLy8gcmVxdWlyZSBjYWxscyBjYW5ub3QgbG9hZCBFU00gY29kZSBhbmQgd2lsbCByZXN1bHQgaW4gYSBydW50aW1lIGVycm9yLiBUbyB3b3JrYXJvdW5kXG4gICAgLy8gdGhpcywgYSBGdW5jdGlvbiBjb25zdHJ1Y3RvciBpcyB1c2VkIHRvIHByZXZlbnQgVHlwZVNjcmlwdCBmcm9tIGNoYW5naW5nIHRoZSBkeW5hbWljIGltcG9ydC5cbiAgICAvLyBPbmNlIFR5cGVTY3JpcHQgcHJvdmlkZXMgc3VwcG9ydCBmb3Iga2VlcGluZyB0aGUgZHluYW1pYyBpbXBvcnQgdGhpcyB3b3JrYXJvdW5kIGNhblxuICAgIC8vIGJlIGRyb3BwZWQuXG4gICAgdGhpcy5jb21waWxlckNsaU1vZHVsZSA9IGF3YWl0IG5ldyBGdW5jdGlvbihgcmV0dXJuIGltcG9ydCgnQGFuZ3VsYXIvY29tcGlsZXItY2xpJyk7YCkoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYWRkRmlsZUVtaXRIaXN0b3J5KFxuICAgIGZpbGVQYXRoOiBzdHJpbmcsXG4gICAgY29udGVudDogc3RyaW5nLFxuICApOiBQcm9taXNlPEZpbGVFbWl0SGlzdG9yeUl0ZW0+IHtcbiAgICBhc3NlcnQub2sodGhpcy53ZWJwYWNrQ3JlYXRlSGFzaCwgJ0ZpbGUgZW1pdHRlciBpcyB1c2VkIHByaW9yIHRvIFdlYnBhY2sgY29tcGlsYXRpb24nKTtcblxuICAgIGNvbnN0IGhpc3RvcnlEYXRhOiBGaWxlRW1pdEhpc3RvcnlJdGVtID0ge1xuICAgICAgbGVuZ3RoOiBjb250ZW50Lmxlbmd0aCxcbiAgICAgIGhhc2g6IHRoaXMud2VicGFja0NyZWF0ZUhhc2goJ3h4aGFzaDY0JykudXBkYXRlKGNvbnRlbnQpLmRpZ2VzdCgpIGFzIFVpbnQ4QXJyYXksXG4gICAgfTtcblxuICAgIGlmICh0aGlzLndlYnBhY2tDYWNoZSkge1xuICAgICAgY29uc3QgaGlzdG9yeSA9IGF3YWl0IHRoaXMuZ2V0RmlsZUVtaXRIaXN0b3J5KGZpbGVQYXRoKTtcbiAgICAgIGlmICghaGlzdG9yeSB8fCBCdWZmZXIuY29tcGFyZShoaXN0b3J5Lmhhc2gsIGhpc3RvcnlEYXRhLmhhc2gpICE9PSAwKSB7XG4gICAgICAgIC8vIEhhc2ggZG9lc24ndCBtYXRjaCBvciBpdGVtIGRvZXNuJ3QgZXhpc3QuXG4gICAgICAgIGF3YWl0IHRoaXMud2VicGFja0NhY2hlLnN0b3JlUHJvbWlzZShmaWxlUGF0aCwgbnVsbCwgaGlzdG9yeURhdGEpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy53YXRjaE1vZGUpIHtcbiAgICAgIC8vIFRoZSBpbiBtZW1vcnkgZmlsZSBlbWl0IGhpc3RvcnkgaXMgb25seSByZXF1aXJlZCBkdXJpbmcgd2F0Y2ggbW9kZS5cbiAgICAgIHRoaXMuZmlsZUVtaXRIaXN0b3J5LnNldChmaWxlUGF0aCwgaGlzdG9yeURhdGEpO1xuICAgIH1cblxuICAgIHJldHVybiBoaXN0b3J5RGF0YTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0RmlsZUVtaXRIaXN0b3J5KGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPEZpbGVFbWl0SGlzdG9yeUl0ZW0gfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy53ZWJwYWNrQ2FjaGVcbiAgICAgID8gdGhpcy53ZWJwYWNrQ2FjaGUuZ2V0UHJvbWlzZTxGaWxlRW1pdEhpc3RvcnlJdGVtIHwgdW5kZWZpbmVkPihmaWxlUGF0aCwgbnVsbClcbiAgICAgIDogdGhpcy5maWxlRW1pdEhpc3RvcnkuZ2V0KGZpbGVQYXRoKTtcbiAgfVxufVxuIl19
538
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmd0b29scy93ZWJwYWNrL3NyYy9pdnkvcGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0gsbUNBQTBDO0FBQzFDLCtDQUFpQztBQUVqQyxrREFBd0Q7QUFDeEQsd0RBQTJEO0FBQzNELG1DQUEwQztBQUMxQywrQ0FLdUI7QUFDdkIsaUNBT2dCO0FBQ2hCLG1DQUF5RDtBQUN6RCxxQ0FBbUc7QUFDbkcscUNBQW9FO0FBQ3BFLHFEQUFtRztBQUVuRzs7OztHQUlHO0FBQ0gsTUFBTSw4QkFBOEIsR0FBRyxDQUFDLENBQUM7QUFFNUIsUUFBQSxZQUFZLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztBQXVCOUMsTUFBTSxXQUFXLEdBQUcsa0JBQWtCLENBQUM7QUFDdkMsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLE9BQU8sRUFBc0MsQ0FBQztBQU9sRixNQUFhLG9CQUFvQjtJQUNkLGFBQWEsQ0FBOEI7SUFDcEQsaUJBQWlCLENBQTBDO0lBQzNELFNBQVMsQ0FBVztJQUNwQixnQkFBZ0IsQ0FBZ0I7SUFDaEMsT0FBTyxDQUErQztJQUN0RCxlQUFlLENBQW1CO0lBQ2xDLFlBQVksQ0FBdUM7SUFDbkQsaUJBQWlCLENBQTZDO0lBQ3JELGdCQUFnQixHQUFHLElBQUksR0FBRyxFQUF1QixDQUFDO0lBQ2xELG1CQUFtQixHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDeEMsd0JBQXdCLEdBQUcsSUFBSSxHQUFHLEVBQXNDLENBQUM7SUFDekUsZUFBZSxHQUFHLElBQUksR0FBRyxFQUErQixDQUFDO0lBRTFFLFlBQVksVUFBZ0QsRUFBRTtRQUM1RCxJQUFJLENBQUMsYUFBYSxHQUFHO1lBQ25CLGlCQUFpQixFQUFFLEtBQUs7WUFDeEIsaUJBQWlCLEVBQUUsS0FBSztZQUN4QixPQUFPLEVBQUUsS0FBSztZQUNkLGdCQUFnQixFQUFFLEVBQUU7WUFDcEIsYUFBYSxFQUFFLEVBQUU7WUFDakIscUJBQXFCLEVBQUUsSUFBSTtZQUMzQixRQUFRLEVBQUUsZUFBZTtZQUN6QixHQUFHLE9BQU87U0FDWCxDQUFDO0lBQ0osQ0FBQztJQUVELElBQVksV0FBVztRQUNyQiwrRUFBK0U7UUFDL0UsZ0ZBQWdGO1FBQ2hGLDZDQUE2QztRQUM3QyxlQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSw0REFBNEQsQ0FBQyxDQUFDO1FBRWhHLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFrQjtRQUN0QixNQUFNLEVBQUUsNkJBQTZCLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUM7UUFDL0UsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFFekMsdUNBQXVDO1FBQ3ZDLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtZQUM5RSxJQUFJLDZCQUE2QixDQUMvQixJQUFJLE1BQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsRUFDcEUsS0FBSyxDQUNOLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ25CO1FBRUQsdUJBQXVCO1FBQ3ZCLE1BQU0sV0FBVyxHQUFHLElBQUksb0NBQXFCLEVBQUUsQ0FBQztRQUNoRCxRQUFRLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDMUQsUUFBUSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsY0FBYztpQkFDMUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztpQkFDYixHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsY0FBYyxFQUFFLEVBQUU7Z0JBQ25DLGNBQWMsQ0FBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUM5QixjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFFekMsT0FBTyxjQUFjLENBQUM7WUFDeEIsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztRQUVILGlEQUFpRDtRQUNqRCxRQUFRLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUM7UUFFekYsTUFBTSxnQkFBZ0IsR0FBNEIsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUNsRSxRQUFRLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDOUQsSUFBSTtnQkFDRixJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLGdCQUFnQixDQUFDLENBQUM7YUFDdEQ7WUFBQyxPQUFPLEtBQUssRUFBRTtnQkFDZCxJQUFBLHNCQUFRLEVBQ04sV0FBVyxFQUNYLDhDQUNFLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQzNDLEVBQUUsQ0FDSCxDQUFDO2FBQ0g7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxXQUF3QixFQUFFLEtBQThCO1FBQy9FLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUM7UUFFdEMsMkVBQTJFO1FBQzNFLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25FLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQztRQUVwQywyQkFBMkI7UUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUU7WUFDbkQsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ3ZEO1FBRUQsc0RBQXNEO1FBQ3RELElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFO1lBQ3pCLEtBQUssQ0FBQyxjQUFjLEdBQUcsSUFBSSx1Q0FBcUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDbEU7UUFFRCwrREFBK0Q7UUFDL0QsTUFBTSxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFFeEUsbUVBQW1FO1FBQ25FLE1BQU0sbUJBQW1CLEdBQUcsSUFBQSx1Q0FBeUIsRUFBQyxXQUFXLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUNoRixJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FDakQsQ0FBQztRQUNGLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTVCLCtEQUErRDtRQUMvRCxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUUxQyxrREFBa0Q7UUFDbEQsTUFBTSxNQUFNLEdBQUcsSUFBQSw0QkFBbUI7UUFDaEMsc0VBQXNFO1FBQ3RFLFFBQVEsQ0FBQyxlQUFzQyxFQUMvQyxJQUFBLHFCQUFhLEVBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUNoQyxDQUFDO1FBQ0YsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLDZCQUE2QixDQUFDLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUV2RSxpRkFBaUY7UUFDakYsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUNqQyxJQUFJLFlBQVksQ0FBQztRQUNqQixJQUFJLEtBQUssRUFBRTtZQUNULFlBQVksR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO1lBQ2pDLEtBQUssTUFBTSxXQUFXLElBQUk7Z0JBQ3hCLEdBQUcsQ0FBQyxRQUFRLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQztnQkFDakMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDO2FBQ2pDLEVBQUU7Z0JBQ0QsTUFBTSxxQkFBcUIsR0FBRyxJQUFBLHFCQUFhLEVBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3pELCtCQUErQjtnQkFDL0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2dCQUNwRCw0QkFBNEI7Z0JBQzVCLEtBQUssQ0FBQyxVQUFVLENBQUMscUJBQXFCLENBQUMsQ0FBQztnQkFFeEMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2FBQ3pDO1NBQ0Y7YUFBTTtZQUNMLHlCQUF5QjtZQUN6QixLQUFLLEdBQUcsSUFBSSx1QkFBZSxFQUFFLENBQUM7WUFDOUIsb0NBQW9DO1lBQ3BDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7YUFDOUI7U0FDRjtRQUNELElBQUEsNkJBQXNCLEVBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXBDLE1BQU0scUJBQXFCLEdBQUcsRUFBRSxDQUFDLDJCQUEyQixDQUMxRCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFDMUIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFDcEMsZUFBZSxDQUNoQixDQUFDO1FBRUYsMENBQTBDO1FBQzFDLElBQUEsMENBQW1DLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO1FBRXhGLHlCQUF5QjtRQUN6QixLQUFLLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDdkQsSUFBQSwrQkFBd0IsRUFBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLGNBQWMsRUFBRTtZQUNuRCxxQkFBcUIsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLHFCQUFxQjtZQUMvRCx3QkFBd0IsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLHdCQUF3QjtTQUN0RSxDQUFDLENBQUM7UUFFSCx1Q0FBdUM7UUFDdkMsSUFBQSxrQ0FBMkIsRUFBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO1FBQzlGLElBQUEsbUNBQTRCLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFckUscURBQXFEO1FBQ3JELE1BQU0sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTztZQUN4RSxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixDQUFDO1lBQzlFLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQ25CLGVBQWUsRUFDZixTQUFTLEVBQ1QsSUFBSSxFQUNKLG1CQUFtQixFQUNuQixLQUFLLENBQUMsY0FBYyxDQUNyQixDQUFDO1FBRU4sK0RBQStEO1FBQy9ELE1BQU0sYUFBYSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFFeEMsS0FBSyxNQUFNLFVBQVUsSUFBSSxPQUFPLENBQUMsY0FBYyxFQUFFLEVBQUU7WUFDakQsSUFBSSxhQUFhLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFO2dCQUNsQyxTQUFTO2FBQ1Y7WUFFRCx1RkFBdUY7WUFDdkYsaUdBQWlHO1lBQ2pHLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBQSx1QkFBZSxFQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBRXZFLG9GQUFvRjtZQUNwRix1RUFBdUU7WUFDdkUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsRUFBRTtnQkFDakMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFBLHFCQUFhLEVBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7YUFDdkQ7U0FDRjtRQUVELFdBQVcsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQ3hFLDZDQUE2QztZQUM3QyxNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBRW5FLDBFQUEwRTtZQUMxRSxLQUFLLENBQUMsY0FBYyxFQUFFLHNCQUFzQixFQUFFLENBQUM7WUFFL0MsbUNBQW1DO1lBQ25DLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNqQyxPQUFPO2FBQ1I7WUFFRCxLQUFLLE1BQU0sYUFBYSxJQUFJLE9BQU8sRUFBRTtnQkFDbkMsTUFBTSxRQUFRLEdBQUksYUFBOEIsQ0FBQyxRQUFRLENBQUM7Z0JBQzFELElBQUksUUFBUSxFQUFFO29CQUNaLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFBLHFCQUFhLEVBQUMsUUFBUSxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7aUJBQy9EO2FBQ0Y7WUFFRCxLQUFLLE1BQU0sTUFBTSxJQUFJLGFBQWEsRUFBRTtnQkFDbEMsSUFBSSxLQUFLLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtvQkFDckMsU0FBUztpQkFDVjtnQkFDRCxJQUFBLHdCQUFVLEVBQ1IsV0FBVyxFQUNYLEdBQUcsTUFBTSwyREFBMkQ7b0JBQ2xFLGdGQUFnRixDQUNuRixDQUFDO2FBQ0g7WUFDRCxLQUFLLENBQUMsY0FBYyxHQUFHLGFBQWEsQ0FBQztRQUN2QyxDQUFDLENBQUMsQ0FBQztRQUVILHNDQUFzQztRQUN0QyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVPLHVCQUF1QixDQUFDLFdBQXdCO1FBQ3RELElBQUksWUFBWSxHQUFHLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ2pCLFlBQVksR0FBRyxJQUFJLDhCQUFxQixFQUFFLENBQUM7WUFDM0MsdUJBQXVCLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FBQztZQUN2RCxXQUFXLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FDbkYsV0FBVyxFQUNYLENBQUMsYUFBZ0UsRUFBRSxFQUFFO2dCQUNuRSxhQUFhLENBQUMsNEJBQW1CLENBQUMsR0FBRyxZQUFZLENBQUM7WUFDcEQsQ0FBQyxDQUNGLENBQUM7U0FDSDtRQUNELE1BQU0sZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRWpELE9BQU8sZ0JBQWdCLENBQUM7SUFDMUIsQ0FBQztJQUVPLGdCQUFnQixDQUFDLHNCQUE4QixFQUFFLGFBQTBCO1FBQ2pGLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLEVBQUU7WUFDOUMsT0FBTztTQUNSO1FBRUQsYUFBYSxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQzdDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUN2RSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ2pCLE9BQU87U0FDUjtRQUNELEtBQUssTUFBTSxVQUFVLElBQUksWUFBWSxFQUFFO1lBQ3JDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFBLHFCQUFhLEVBQUMsVUFBVSxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7U0FDakU7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLG9CQUFvQixDQUNoQyxPQUF5QixFQUN6QixXQUF3QixFQUN4QixXQUF3QjtRQUV4QixJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO1lBQ3ZDLE9BQU87U0FDUjtRQUVELE1BQU0sY0FBYyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFDekMsS0FBSyxNQUFNLFlBQVksSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDbkQsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDNUQsSUFBSSxPQUFPLEVBQUU7Z0JBQ1gsTUFBTSxVQUFVLEdBQUcsTUFBTSxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ25ELElBQ0UsVUFBVSxFQUFFLE9BQU8sS0FBSyxTQUFTO29CQUNqQyxPQUFPLENBQUMsTUFBTSxLQUFLLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTTtvQkFDNUMsVUFBVSxDQUFDLElBQUksS0FBSyxTQUFTO29CQUM3QixNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFDbkQ7b0JBQ0EsZ0VBQWdFO29CQUNoRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxVQUFVLENBQUMsQ0FBQztvQkFDNUQsY0FBYyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztpQkFDbEM7YUFDRjtpQkFBTTtnQkFDTCw2QkFBNkI7Z0JBQzdCLGNBQWMsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDbEM7U0FDRjtRQUVELElBQUksY0FBYyxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUU7WUFDM0IsTUFBTSxPQUFPLEdBQUcsQ0FBQyxhQUFxQixFQUFFLEVBQUUsQ0FDeEMsSUFBSSxPQUFPLENBQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztZQUU1RixNQUFNLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztZQUM1QixLQUFLLE1BQU0sYUFBYSxJQUFJLE9BQU8sRUFBRTtnQkFDbkMsTUFBTSxRQUFRLEdBQUksYUFBOEIsQ0FBQyxRQUFRLENBQUM7Z0JBQzFELElBQUksUUFBUSxJQUFJLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBQSxxQkFBYSxFQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUU7b0JBQzNELGdCQUFnQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztpQkFDdEM7YUFDRjtZQUNELE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDcEY7UUFFRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsTUFBTSxFQUNKLE9BQU8sRUFBRSxlQUFlLEVBQ3hCLFNBQVMsRUFDVCxNQUFNLEdBQ1AsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUNwQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFDM0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQ25DLENBQUM7UUFDRixlQUFlLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUN0QyxlQUFlLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDO1FBQy9DLGVBQWUsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO1FBQ25DLGVBQWUsQ0FBQyxhQUFhLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQztRQUMxRCxlQUFlLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztRQUN4QyxlQUFlLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQztRQUNwQyxlQUFlLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztRQUN2QyxlQUFlLENBQUMsc0JBQXNCLEdBQUcsS0FBSyxDQUFDO1FBQy9DLGVBQWUsQ0FBQyxhQUFhLEdBQUcsWUFBWSxDQUFDO1FBQzdDLGVBQWUsQ0FBQyxzQkFBc0IsR0FBRyxLQUFLLENBQUM7UUFFL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLENBQUM7SUFDaEQsQ0FBQztJQUVPLGdCQUFnQixDQUN0QixlQUFnQyxFQUNoQyxTQUFtQixFQUNuQixJQUFrQixFQUNsQixtQkFBd0MsRUFDeEMsY0FBcUM7UUFFckMseUVBQXlFO1FBQ3pFLE1BQU0sY0FBYyxHQUFHLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQ3RELFNBQVMsRUFDVCxlQUFlLEVBQ2YsSUFBSSxFQUNKLElBQUksQ0FBQyxnQkFBZ0IsQ0FDdEIsQ0FBQztRQUNGLE1BQU0sZUFBZSxHQUFHLGNBQWMsQ0FBQyxRQUFRLENBQUM7UUFFaEQsbUZBQW1GO1FBQ25GLDBGQUEwRjtRQUMxRiw2RkFBNkY7UUFDN0YseUZBQXlGO1FBQ3pGLHdGQUF3RjtRQUN4Riw2RkFBNkY7UUFDN0YsTUFBTSxFQUFFLG9CQUFvQixFQUFFLGFBQWEsRUFBRSxHQUFHLGVBQWUsQ0FBQztRQUVoRSx5REFBeUQ7UUFDekQsMEZBQTBGO1FBQzFGLE1BQU0saUJBQWlCLEdBQUcsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3hELElBQUEsbUNBQTRCLEVBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUVoRCxJQUFJLE9BQXdFLENBQUM7UUFDN0UsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2xCLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyw4Q0FBOEMsQ0FDeEUsaUJBQWlCLEVBQ2pCLElBQUksRUFDSixJQUFJLENBQUMsT0FBTyxDQUNiLENBQUM7WUFDRixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsY0FBYyxDQUFDO1NBQ3hDO2FBQU07WUFDTCx5RkFBeUY7WUFDekYsa0VBQWtFO1lBQ2xFLE9BQU8sR0FBRyxFQUFFLENBQUMscUJBQXFCLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDN0Q7UUFFRCxvQ0FBb0M7UUFDcEMsTUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLEVBQWlCLENBQUM7UUFFL0MsMEVBQTBFO1FBQzFFLElBQUksMENBQTBDLElBQUksT0FBTyxFQUFFO1lBQ3pELGlEQUFpRDtZQUNqRCxPQUFPLElBQUksRUFBRTtnQkFDWCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsd0NBQXdDLENBQUMsU0FBUyxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUU7b0JBQ3hGLDJFQUEyRTtvQkFDM0Usa0ZBQWtGO29CQUNsRiwwRkFBMEY7b0JBQzFGLHlGQUF5RjtvQkFDekYsWUFBWTtvQkFDWixJQUNFLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUM7d0JBQ3BDLFVBQVUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEVBQy9DO3dCQUNBLHNGQUFzRjt3QkFDdEYsMEVBQTBFO3dCQUMxRSxNQUFNLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQzt3QkFDbkUsTUFBTSxrQkFBa0IsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLENBQUM7d0JBQ25FLElBQUksa0JBQWtCLEVBQUU7NEJBQ3RCLGFBQWEsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQzt5QkFDdkM7d0JBRUQsT0FBTyxJQUFJLENBQUM7cUJBQ2I7b0JBRUQsT0FBTyxLQUFLLENBQUM7Z0JBQ2YsQ0FBQyxDQUFDLENBQUM7Z0JBRUgsSUFBSSxDQUFDLE1BQU0sRUFBRTtvQkFDWCxNQUFNO2lCQUNQO2dCQUVELGFBQWEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQXlCLENBQUMsQ0FBQzthQUNyRDtTQUNGO1FBRUQsb0NBQW9DO1FBQ3BDLE1BQU0sV0FBVyxHQUFHO1lBQ2xCLEdBQUcsZUFBZSxDQUFDLG9CQUFvQixFQUFFO1lBQ3pDLEdBQUcsT0FBTyxDQUFDLHFCQUFxQixFQUFFO1lBQ2xDLEdBQUcsT0FBTyxDQUFDLG9CQUFvQixFQUFFO1NBQ2xDLENBQUM7UUFDRixtQkFBbUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVqQywyQ0FBMkM7UUFDM0MsS0FBSyxNQUFNLFVBQVUsSUFBSSxPQUFPLENBQUMsY0FBYyxFQUFFLEVBQUU7WUFDakQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDekMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pFLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO2FBQ2pFO1NBQ0Y7UUFFRCxNQUFNLFlBQVksR0FBRyxJQUFBLHNDQUFxQixFQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLG9CQUFZLENBQUMsQ0FBQztRQUV0RixNQUFNLGVBQWUsR0FBRyxDQUFDLFVBQXlCLEVBQUUsRUFBRTtZQUNwRCxNQUFNLFlBQVksR0FBRyxFQUFFLENBQUM7WUFDeEIsS0FBSyxNQUFNLFlBQVksSUFBSSxlQUFlLENBQUMsdUJBQXVCLENBQUMsVUFBVSxDQUFDLEVBQUU7Z0JBQzlFLFlBQVksQ0FBQyxJQUFJLENBQ2YsWUFBWTtnQkFDWix1RUFBdUU7Z0JBQ3ZFLEdBQUcsY0FBYyxDQUFDLHVCQUF1QixDQUFDLFlBQVksQ0FBQyxDQUN4RCxDQUFDO2FBQ0g7WUFFRCxPQUFPLFlBQVksQ0FBQztRQUN0QixDQUFDLENBQUM7UUFFRixvREFBb0Q7UUFDcEQsNEVBQTRFO1FBQzVFLE1BQU0sZUFBZSxHQUFHLGVBQWU7YUFDcEMsWUFBWSxFQUFFO2FBQ2QsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNULElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUVqQyxLQUFLLE1BQU0sVUFBVSxJQUFJLE9BQU8sQ0FBQyxjQUFjLEVBQUUsRUFBRTtnQkFDakQsSUFBSSxVQUFVLENBQUMsaUJBQWlCLEVBQUU7b0JBQ2hDLFNBQVM7aUJBQ1Y7Z0JBRUQsa0RBQWtEO2dCQUNsRCxJQUNFLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUM7b0JBQzlCLENBQUMsZUFBZSxDQUFDLHNCQUFzQixDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsRUFDbEU7b0JBQ0EsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxJQUFBLHFCQUFhLEVBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7b0JBRWpFLHlEQUF5RDtvQkFDekQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRTt3QkFDekMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztxQkFDL0I7aUJBQ0Y7cUJBQU0sSUFDTCxJQUFJLENBQUMsZUFBZTtvQkFDcEIsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQztvQkFDOUIsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQ3JDO29CQUNBLG9FQUFvRTtvQkFDcEUsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUNsRixJQUFJLGtCQUFrQixFQUFFO3dCQUN0QixtQkFBbUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO3FCQUN6QztpQkFDRjthQUNGO1lBRUQsZ0VBQWdFO1lBQ2hFLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDO1lBQ2pELE1BQU0sc0JBQXNCLEdBQzFCLGFBQWEsQ0FBQyxJQUFJLElBQUksOEJBQThCO2dCQUNsRCxDQUFDLENBQUMsV0FBVyxDQUFDLFVBQVU7Z0JBQ3hCLENBQUMsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDO1lBQy9CLEtBQUssTUFBTSxZQUFZLElBQUksYUFBYSxFQUFFO2dCQUN4QyxNQUFNLGtCQUFrQixHQUFHLGVBQWUsQ0FBQyxxQkFBcUIsQ0FDOUQsWUFBWSxFQUNaLHNCQUFzQixDQUN2QixDQUFDO2dCQUNGLG1CQUFtQixDQUFDLGtCQUFrQixDQUFDLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxlQUFlLEVBQUUsd0JBQXdCLENBQUMsWUFBWSxFQUFFLGtCQUFrQixDQUFDLENBQUM7YUFDbEY7WUFFRCxPQUFPO2dCQUNMLE9BQU8sRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQzdCLE9BQU8sRUFDUCxJQUFBLGtDQUFpQixFQUFDLGVBQWUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLEVBQzNFLGVBQWUsRUFDZixDQUFDLFVBQVUsRUFBRSxFQUFFO29CQUNiLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsSUFBQSxxQkFBYSxFQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO29CQUNwRSxlQUFlLENBQUMsc0JBQXNCLENBQUMsb0JBQW9CLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQzFFLENBQUMsQ0FDRjthQUNGLENBQUM7UUFDSixDQUFDLENBQUM7YUFDRCxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsR0FBRyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVyRixNQUFNLG9CQUFvQixHQUFnQixLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDdkQsTUFBTSxRQUFRLEdBQUcsTUFBTSxlQUFlLENBQUM7WUFFdkMsSUFBSSxjQUFjLElBQUksUUFBUSxFQUFFO2dCQUM5QixNQUFNLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUN4QztZQUVELE9BQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQyxDQUFDLENBQUM7UUFFRixPQUFPO1lBQ0wsV0FBVyxFQUFFLG9CQUFvQjtZQUNqQyxPQUFPO1lBQ1AsYUFBYSxFQUFFLGFBQWE7U0FDN0IsQ0FBQztJQUNKLENBQUM7SUFFTyxnQkFBZ0IsQ0FDdEIsZUFBZ0MsRUFDaEMsU0FBNEIsRUFDNUIsSUFBa0IsRUFDbEIsbUJBQXdDO1FBRXhDLElBQUksT0FBTyxDQUFDO1FBQ1osSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2xCLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyw4Q0FBOEMsQ0FDeEUsU0FBUyxFQUNULGVBQWUsRUFDZixJQUFJLEVBQ0osSUFBSSxDQUFDLE9BQU8sQ0FDYixDQUFDO1NBQ0g7YUFBTTtZQUNMLHlGQUF5RjtZQUN6RixrRUFBa0U7WUFDbEUsT0FBTyxHQUFHLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLEVBQUUsZUFBZSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3RFO1FBRUQsTUFBTSxXQUFXLEdBQUc7WUFDbEIsR0FBRyxPQUFPLENBQUMscUJBQXFCLEVBQUU7WUFDbEMsR0FBRyxPQUFPLENBQUMsb0JBQW9CLEVBQUU7WUFDakMsR0FBRyxPQUFPLENBQUMsdUJBQXVCLEVBQUU7WUFDcEMsMENBQTBDO1lBQzFDLEdBQUcsT0FBTyxDQUFDLHNCQUFzQixFQUFFO1NBQ3BDLENBQUM7UUFDRixtQkFBbUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVqQyxNQUFNLFlBQVksR0FBRyxJQUFBLHNDQUFxQixFQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUUxRixPQUFPO1lBQ0wsV0FBVyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNwRSxPQUFPO1lBQ1AsYUFBYSxFQUFFLFNBQVM7U0FDekIsQ0FBQztJQUNKLENBQUM7SUFFTyxpQkFBaUIsQ0FDdkIsT0FBMEIsRUFDMUIsZUFBc0MsRUFBRSxFQUN4QyxvQkFBcUUsRUFDckUsV0FBaUQ7UUFFakQsT0FBTyxLQUFLLEVBQUUsSUFBWSxFQUFFLEVBQUU7WUFDNUIsTUFBTSxRQUFRLEdBQUcsSUFBQSxxQkFBYSxFQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3JDLElBQUksSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDL0MsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ3BEO1lBRUQsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNuRCxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNmLE9BQU8sU0FBUyxDQUFDO2FBQ2xCO1lBRUQsSUFBSSxPQUEyQixDQUFDO1lBQ2hDLElBQUksR0FBdUIsQ0FBQztZQUM1QixPQUFPLENBQUMsSUFBSSxDQUNWLFVBQVUsRUFDVixDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRTtnQkFDakIsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFO29CQUM3QixHQUFHLEdBQUcsSUFBSSxDQUFDO2lCQUNaO3FCQUFNLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtvQkFDbkMsT0FBTyxHQUFHLElBQUksQ0FBQztpQkFDaEI7WUFDSCxDQUFDLEVBQ0QsU0FBUyxFQUNULFNBQVMsRUFDVCxZQUFZLENBQ2IsQ0FBQztZQUVGLFdBQVcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRTFCLHlEQUF5RDtZQUN6RCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFFM0YsTUFBTSxZQUFZLEdBQUc7Z0JBQ25CLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDOUMsR0FBRyxvQkFBb0IsQ0FBQyxVQUFVLENBQUM7YUFDcEMsQ0FBQyxHQUFHLENBQUMsdUJBQWUsQ0FBQyxDQUFDO1lBRXZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUM5QyxDQUFDLENBQUM7SUFDSixDQUFDO0lBRU8sS0FBSyxDQUFDLHFCQUFxQjtRQUNqQyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUMxQixPQUFPO1NBQ1I7UUFFRCwrRUFBK0U7UUFDL0Usa0ZBQWtGO1FBQ2xGLGdGQUFnRjtRQUNoRix1RkFBdUY7UUFDdkYsK0ZBQStGO1FBQy9GLHNGQUFzRjtRQUN0RixjQUFjO1FBQ2QsSUFBSSxDQUFDLGlCQUFpQixHQUFHLE1BQU0sSUFBSSxRQUFRLENBQUMseUNBQXlDLENBQUMsRUFBRSxDQUFDO0lBQzNGLENBQUM7SUFFTyxLQUFLLENBQUMsa0JBQWtCLENBQzlCLFFBQWdCLEVBQ2hCLE9BQWU7UUFFZixlQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxtREFBbUQsQ0FBQyxDQUFDO1FBRXZGLE1BQU0sV0FBVyxHQUF3QjtZQUN2QyxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07WUFDdEIsSUFBSSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFnQjtTQUNoRixDQUFDO1FBRUYsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3JCLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3hELElBQUksQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3BFLDRDQUE0QztnQkFDNUMsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO2FBQ25FO1NBQ0Y7YUFBTSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDekIsc0VBQXNFO1lBQ3RFLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztTQUNqRDtRQUVELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFTyxLQUFLLENBQUMsa0JBQWtCLENBQUMsUUFBZ0I7UUFDL0MsT0FBTyxJQUFJLENBQUMsWUFBWTtZQUN0QixDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQWtDLFFBQVEsRUFBRSxJQUFJLENBQUM7WUFDL0UsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7Q0FDRjtBQXJwQkQsb0RBcXBCQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbXBpbGVySG9zdCwgQ29tcGlsZXJPcHRpb25zLCBOZ3RzY1Byb2dyYW0gfSBmcm9tICdAYW5ndWxhci9jb21waWxlci1jbGknO1xuaW1wb3J0IHsgc3RyaWN0IGFzIGFzc2VydCB9IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcbmltcG9ydCB0eXBlIHsgQ29tcGlsYXRpb24sIENvbXBpbGVyLCBNb2R1bGUsIE5vcm1hbE1vZHVsZSB9IGZyb20gJ3dlYnBhY2snO1xuaW1wb3J0IHsgVHlwZVNjcmlwdFBhdGhzUGx1Z2luIH0gZnJvbSAnLi4vcGF0aHMtcGx1Z2luJztcbmltcG9ydCB7IFdlYnBhY2tSZXNvdXJjZUxvYWRlciB9IGZyb20gJy4uL3Jlc291cmNlX2xvYWRlcic7XG5pbXBvcnQgeyBTb3VyY2VGaWxlQ2FjaGUgfSBmcm9tICcuL2NhY2hlJztcbmltcG9ydCB7XG4gIERpYWdub3N0aWNzUmVwb3J0ZXIsXG4gIGFkZEVycm9yLFxuICBhZGRXYXJuaW5nLFxuICBjcmVhdGVEaWFnbm9zdGljc1JlcG9ydGVyLFxufSBmcm9tICcuL2RpYWdub3N0aWNzJztcbmltcG9ydCB7XG4gIGF1Z21lbnRIb3N0V2l0aENhY2hpbmcsXG4gIGF1Z21lbnRIb3N0V2l0aERlcGVuZGVuY3lDb2xsZWN0aW9uLFxuICBhdWdtZW50SG9zdFdpdGhSZXBsYWNlbWVudHMsXG4gIGF1Z21lbnRIb3N0V2l0aFJlc291cmNlcyxcbiAgYXVnbWVudEhvc3RXaXRoU3Vic3RpdHV0aW9ucyxcbiAgYXVnbWVudFByb2dyYW1XaXRoVmVyc2lvbmluZyxcbn0gZnJvbSAnLi9ob3N0JztcbmltcG9ydCB7IGV4dGVybmFsaXplUGF0aCwgbm9ybWFsaXplUGF0aCB9IGZyb20gJy4vcGF0aHMnO1xuaW1wb3J0IHsgQW5ndWxhclBsdWdpblN5bWJvbCwgRW1pdEZpbGVSZXN1bHQsIEZpbGVFbWl0dGVyLCBGaWxlRW1pdHRlckNvbGxlY3Rpb24gfSBmcm9tICcuL3N5bWJvbCc7XG5pbXBvcnQgeyBJbnB1dEZpbGVTeXN0ZW1TeW5jLCBjcmVhdGVXZWJwYWNrU3lzdGVtIH0gZnJvbSAnLi9zeXN0ZW0nO1xuaW1wb3J0IHsgY3JlYXRlQW90VHJhbnNmb3JtZXJzLCBjcmVhdGVKaXRUcmFuc2Zvcm1lcnMsIG1lcmdlVHJhbnNmb3JtZXJzIH0gZnJvbSAnLi90cmFuc2Zvcm1hdGlvbic7XG5cbi8qKlxuICogVGhlIHRocmVzaG9sZCB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIEFuZ3VsYXIgZmlsZSBkaWFnbm9zdGljcyBzaG91bGQgb3B0aW1pemUgZm9yIGZ1bGwgcHJvZ3JhbXNcbiAqIG9yIHNpbmdsZSBmaWxlcy4gSWYgdGhlIG51bWJlciBvZiBhZmZlY3RlZCBmaWxlcyBmb3IgYSBidWlsZCBpcyBtb3JlIHRoYW4gdGhlIHRocmVzaG9sZCwgZnVsbFxuICogcHJvZ3JhbSBvcHRpbWl6YXRpb24gd2lsbCBiZSB1c2VkLlxuICovXG5jb25zdCBESUFHTk9TVElDU19BRkZFQ1RFRF9USFJFU0hPTEQgPSAxO1xuXG5leHBvcnQgY29uc3QgaW1hZ2VEb21haW5zID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQW5ndWxhcldlYnBhY2tQbHVnaW5PcHRpb25zIHtcbiAgdHNjb25maWc6IHN0cmluZztcbiAgY29tcGlsZXJPcHRpb25zPzogQ29tcGlsZXJPcHRpb25zO1xuICBmaWxlUmVwbGFjZW1lbnRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBzdWJzdGl0dXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBkaXJlY3RUZW1wbGF0ZUxvYWRpbmc6IGJvb2xlYW47XG4gIGVtaXRDbGFzc01ldGFkYXRhOiBib29sZWFuO1xuICBlbWl0TmdNb2R1bGVTY29wZTogYm9vbGVhbjtcbiAgaml0TW9kZTogYm9vbGVhbjtcbiAgaW5saW5lU3R5bGVGaWxlRXh0ZW5zaW9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBBbmd1bGFyIGNvbXBpbGF0aW9uIHN0YXRlIHRoYXQgaXMgbWFpbnRhaW5lZCBhY3Jvc3MgZWFjaCBXZWJwYWNrIGNvbXBpbGF0aW9uLlxuICovXG5pbnRlcmZhY2UgQW5ndWxhckNvbXBpbGF0aW9uU3RhdGUge1xuICByZXNvdXJjZUxvYWRlcj86IFdlYnBhY2tSZXNvdXJjZUxvYWRlcjtcbiAgcHJldmlvdXNVbnVzZWQ/OiBTZXQ8c3RyaW5nPjtcbiAgcGF0aHNQbHVnaW46IFR5cGVTY3JpcHRQYXRoc1BsdWdpbjtcbn1cblxuY29uc3QgUExVR0lOX05BTUUgPSAnYW5ndWxhci1jb21waWxlcic7XG5jb25zdCBjb21waWxhdGlvbkZpbGVFbWl0dGVycyA9IG5ldyBXZWFrTWFwPENvbXBpbGF0aW9uLCBGaWxlRW1pdHRlckNvbGxlY3Rpb24+KCk7XG5cbmludGVyZmFjZSBGaWxlRW1pdEhpc3RvcnlJdGVtIHtcbiAgbGVuZ3RoOiBudW1iZXI7XG4gIGhhc2g6IFVpbnQ4QXJyYXk7XG59XG5cbmV4cG9ydCBjbGFzcyBBbmd1bGFyV2VicGFja1BsdWdpbiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGx1Z2luT3B0aW9uczogQW5ndWxhcldlYnBhY2tQbHVnaW5PcHRpb25zO1xuICBwcml2YXRlIGNvbXBpbGVyQ2xpTW9kdWxlPzogdHlwZW9mIGltcG9ydCgnQGFuZ3VsYXIvY29tcGlsZXItY2xpJyk7XG4gIHByaXZhdGUgd2F0Y2hNb2RlPzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBuZ3RzY05leHRQcm9ncmFtPzogTmd0c2NQcm9ncmFtO1xuICBwcml2YXRlIGJ1aWxkZXI/OiB0cy5FbWl0QW5kU2VtYW50aWNEaWFnbm9zdGljc0J1aWxkZXJQcm9ncmFtO1xuICBwcml2YXRlIHNvdXJjZUZpbGVDYWNoZT86IFNvdXJjZUZpbGVDYWNoZTtcbiAgcHJpdmF0ZSB3ZWJwYWNrQ2FjaGU/OiBSZXR1cm5UeXBlPENvbXBpbGF0aW9uWydnZXRDYWNoZSddPjtcbiAgcHJpdmF0ZSB3ZWJwYWNrQ3JlYXRlSGFzaD86IENvbXBpbGVyWyd3ZWJwYWNrJ11bJ3V0aWwnXVsnY3JlYXRlSGFzaCddO1xuICBwcml2YXRlIHJlYWRvbmx5IGZpbGVEZXBlbmRlbmNpZXMgPSBuZXcgTWFwPHN0cmluZywgU2V0PHN0cmluZz4+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVxdWlyZWRGaWxlc1RvRW1pdCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlcXVpcmVkRmlsZXNUb0VtaXRDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBFbWl0RmlsZVJlc3VsdCB8IHVuZGVmaW5lZD4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBmaWxlRW1pdEhpc3RvcnkgPSBuZXcgTWFwPHN0cmluZywgRmlsZUVtaXRIaXN0b3J5SXRlbT4oKTtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBQYXJ0aWFsPEFuZ3VsYXJXZWJwYWNrUGx1Z2luT3B0aW9ucz4gPSB7fSkge1xuICAgIHRoaXMucGx1Z2luT3B0aW9ucyA9IHtcbiAgICAgIGVtaXRDbGFzc01ldGFkYXRhOiBmYWxzZSxcbiAgICAgIGVtaXROZ01vZHVsZVNjb3BlOiBmYWxzZSxcbiAgICAgIGppdE1vZGU6IGZhbHNlLFxuICAgICAgZmlsZVJlcGxhY2VtZW50czoge30sXG4gICAgICBzdWJzdGl0dXRpb25zOiB7fSxcbiAgICAgIGRpcmVjdFRlbXBsYXRlTG9hZGluZzogdHJ1ZSxcbiAgICAgIHRzY29uZmlnOiAndHNjb25maWcuanNvbicsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldCBjb21waWxlckNsaSgpOiB0eXBlb2YgaW1wb3J0KCdAYW5ndWxhci9jb21waWxlci1jbGknKSB7XG4gICAgLy8gVGhlIGNvbXBpbGVyQ2xpTW9kdWxlIGZpZWxkIGlzIGd1YXJhbnRlZWQgdG8gYmUgZGVmaW5lZCBkdXJpbmcgYSBjb21waWxhdGlvblxuICAgIC8vIGR1ZSB0byB0aGUgYGJlZm9yZUNvbXBpbGVgIGhvb2suIFVzYWdlIG9mIHRoaXMgcHJvcGVydHkgYWNjZXNzb3IgcHJpb3IgdG8gdGhlXG4gICAgLy8gaG9vayBleGVjdXRpb24gaXMgYW4gaW1wbGVtZW50YXRpb24gZXJyb3IuXG4gICAgYXNzZXJ0Lm9rKHRoaXMuY29tcGlsZXJDbGlNb2R1bGUsIGAnQGFuZ3VsYXIvY29tcGlsZXItY2xpJyB1c2VkIHByaW9yIHRvIFdlYnBhY2sgY29tcGlsYXRpb24uYCk7XG5cbiAgICByZXR1cm4gdGhpcy5jb21waWxlckNsaU1vZHVsZTtcbiAgfVxuXG4gIGdldCBvcHRpb25zKCk6IEFuZ3VsYXJXZWJwYWNrUGx1Z2luT3B0aW9ucyB7XG4gICAgcmV0dXJuIHRoaXMucGx1Z2luT3B0aW9ucztcbiAgfVxuXG4gIGFwcGx5KGNvbXBpbGVyOiBDb21waWxlcik6IHZvaWQge1xuICAgIGNvbnN0IHsgTm9ybWFsTW9kdWxlUmVwbGFjZW1lbnRQbHVnaW4sIFdlYnBhY2tFcnJvciwgdXRpbCB9ID0gY29tcGlsZXIud2VicGFjaztcbiAgICB0aGlzLndlYnBhY2tDcmVhdGVIYXNoID0gdXRpbC5jcmVhdGVIYXNoO1xuXG4gICAgLy8gU2V0dXAgZmlsZSByZXBsYWNlbWVudHMgd2l0aCB3ZWJwYWNrXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5wbHVnaW5PcHRpb25zLmZpbGVSZXBsYWNlbWVudHMpKSB7XG4gICAgICBuZXcgTm9ybWFsTW9kdWxlUmVwbGFjZW1lbnRQbHVnaW4oXG4gICAgICAgIG5ldyBSZWdFeHAoJ14nICsga2V5LnJlcGxhY2UoL1suKitcXC0/XiR7fSgpfFtcXF1cXFxcXS9nLCAnXFxcXCQmJykgKyAnJCcpLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICkuYXBwbHkoY29tcGlsZXIpO1xuICAgIH1cblxuICAgIC8vIFNldCByZXNvbHZlciBvcHRpb25zXG4gICAgY29uc3QgcGF0aHNQbHVnaW4gPSBuZXcgVHlwZVNjcmlwdFBhdGhzUGx1Z2luKCk7XG4gICAgY29tcGlsZXIuaG9va3MuYWZ0ZXJSZXNvbHZlcnMudGFwKFBMVUdJTl9OQU1FLCAoY29tcGlsZXIpID0+IHtcbiAgICAgIGNvbXBpbGVyLnJlc29sdmVyRmFjdG9yeS5ob29rcy5yZXNvbHZlT3B0aW9uc1xuICAgICAgICAuZm9yKCdub3JtYWwnKVxuICAgICAgICAudGFwKFBMVUdJTl9OQU1FLCAocmVzb2x2ZU9wdGlvbnMpID0+IHtcbiAgICAgICAgICByZXNvbHZlT3B0aW9ucy5wbHVnaW5zID8/PSBbXTtcbiAgICAgICAgICByZXNvbHZlT3B0aW9ucy5wbHVnaW5zLnB1c2gocGF0aHNQbHVnaW4pO1xuXG4gICAgICAgICAgcmV0dXJuIHJlc29sdmVPcHRpb25zO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIExvYWQgdGhlIGNvbXBpbGVyLWNsaSBpZiBub3QgYWxyZWFkeSBhdmFpbGFibGVcbiAgICBjb21waWxlci5ob29rcy5iZWZvcmVDb21waWxlLnRhcFByb21pc2UoUExVR0lOX05BTUUsICgpID0+IHRoaXMuaW5pdGlhbGl6ZUNvbXBpbGVyQ2xpKCkpO1xuXG4gICAgY29uc3QgY29tcGlsYXRpb25TdGF0ZTogQW5ndWxhckNvbXBpbGF0aW9uU3RhdGUgPSB7IHBhdGhzUGx1Z2luIH07XG4gICAgY29tcGlsZXIuaG9va3MudGhpc0NvbXBpbGF0aW9uLnRhcChQTFVHSU5fTkFNRSwgKGNvbXBpbGF0aW9uKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLnNldHVwQ29tcGlsYXRpb24oY29tcGlsYXRpb24sIGNvbXBpbGF0aW9uU3RhdGUpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgYWRkRXJyb3IoXG4gICAgICAgICAgY29tcGlsYXRpb24sXG4gICAgICAgICAgYEZhaWxlZCB0byBpbml0aWFsaXplIEFuZ3VsYXIgY29tcGlsYXRpb24gLSAke1xuICAgICAgICAgICAgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBlcnJvclxuICAgICAgICAgIH1gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cENvbXBpbGF0aW9uKGNvbXBpbGF0aW9uOiBDb21waWxhdGlvbiwgc3RhdGU6IEFuZ3VsYXJDb21waWxhdGlvblN0YXRlKTogdm9pZCB7XG4gICAgY29uc3QgY29tcGlsZXIgPSBjb21waWxhdGlvbi5jb21waWxlcjtcblxuICAgIC8vIFJlZ2lzdGVyIHBsdWdpbiB0byBlbnN1cmUgZGV0ZXJtaW5pc3RpYyBlbWl0IG9yZGVyIGluIG11bHRpLXBsdWdpbiB1c2FnZVxuICAgIGNvbnN0IGVtaXRSZWdpc3RyYXRpb24gPSB0aGlzLnJlZ2lzdGVyV2l0aENvbXBpbGF0aW9uKGNvbXBpbGF0aW9uKTtcbiAgICB0aGlzLndhdGNoTW9kZSA9IGNvbXBpbGVyLndhdGNoTW9kZTtcblxuICAgIC8vIEluaXRpYWxpemUgd2VicGFjayBjYWNoZVxuICAgIGlmICghdGhpcy53ZWJwYWNrQ2FjaGUgJiYgY29tcGlsYXRpb24ub3B0aW9ucy5jYWNoZSkge1xuICAgICAgdGhpcy53ZWJwYWNrQ2FjaGUgPSBjb21waWxhdGlvbi5nZXRDYWNoZShQTFVHSU5fTkFNRSk7XG4gICAgfVxuXG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgcmVzb3VyY2UgbG9hZGVyIGlmIG5vdCBhbHJlYWR5IHNldHVwXG4gICAgaWYgKCFzdGF0ZS5yZXNvdXJjZUxvYWRlcikge1xuICAgICAgc3RhdGUucmVzb3VyY2VMb2FkZXIgPSBuZXcgV2VicGFja1Jlc291cmNlTG9hZGVyKHRoaXMud2F0Y2hNb2RlKTtcbiAgICB9XG5cbiAgICAvLyBTZXR1cCBhbmQgcmVhZCBUeXBlU2NyaXB0IGFuZCBBbmd1bGFyIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb25cbiAgICBjb25zdCB7IGNvbXBpbGVyT3B0aW9ucywgcm9vdE5hbWVzLCBlcnJvcnMgfSA9IHRoaXMubG9hZENvbmZpZ3VyYXRpb24oKTtcblxuICAgIC8vIENyZWF0ZSBkaWFnbm9zdGljcyByZXBvcnRlciBhbmQgcmVwb3J0IGNvbmZpZ3VyYXRpb24gZmlsZSBlcnJvcnNcbiAgICBjb25zdCBkaWFnbm9zdGljc1JlcG9ydGVyID0gY3JlYXRlRGlhZ25vc3RpY3NSZXBvcnRlcihjb21waWxhdGlvbiwgKGRpYWdub3N0aWMpID0+XG4gICAgICB0aGlzLmNvbXBpbGVyQ2xpLmZvcm1hdERpYWdub3N0aWNzKFtkaWFnbm9zdGljXSksXG4gICAgKTtcbiAgICBkaWFnbm9zdGljc1JlcG9ydGVyKGVycm9ycyk7XG5cbiAgICAvLyBVcGRhdGUgVHlwZVNjcmlwdCBwYXRoIG1hcHBpbmcgcGx1Z2luIHdpdGggbmV3IGNvbmZpZ3VyYXRpb25cbiAgICBzdGF0ZS5wYXRoc1BsdWdpbi51cGRhdGUoY29tcGlsZXJPcHRpb25zKTtcblxuICAgIC8vIENyZWF0ZSBhIFdlYnBhY2stYmFzZWQgVHlwZVNjcmlwdCBjb21waWxlciBob3N0XG4gICAgY29uc3Qgc3lzdGVtID0gY3JlYXRlV2VicGFja1N5c3RlbShcbiAgICAgIC8vIFdlYnBhY2sgbGFja3MgYW4gSW5wdXRGaWxlU3l0ZW0gdHlwZSBkZWZpbml0aW9uIHdpdGggc3luYyBmdW5jdGlvbnNcbiAgICAgIGNvbXBpbGVyLmlucHV0RmlsZVN5c3RlbSBhcyBJbnB1dEZpbGVTeXN0ZW1TeW5jLFxuICAgICAgbm9ybWFsaXplUGF0aChjb21waWxlci5jb250ZXh0KSxcbiAgICApO1xuICAgIGNvbnN0IGhvc3QgPSB0cy5jcmVhdGVJbmNyZW1lbnRhbENvbXBpbGVySG9zdChjb21waWxlck9wdGlvbnMsIHN5c3RlbSk7XG5cbiAgICAvLyBTZXR1cCBzb3VyY2UgZmlsZSBjYWNoaW5nIGFuZCByZXVzZSBjYWNoZSBmcm9tIHByZXZpb3VzIGNvbXBpbGF0aW9uIGlmIHByZXNlbnRcbiAgICBsZXQgY2FjaGUgPSB0aGlzLnNvdXJjZUZpbGVDYWNoZTtcbiAgICBsZXQgY2hhbmdlZEZpbGVzO1xuICAgIGlmIChjYWNoZSkge1xuICAgICAgY2hhbmdlZEZpbGVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICBmb3IgKGNvbnN0IGNoYW5nZWRGaWxlIG9mIFtcbiAgICAgICAgLi4uKGNvbXBpbGVyLm1vZGlmaWVkRmlsZXMgPz8gW10pLFxuICAgICAgICAuLi4oY29tcGlsZXIucmVtb3ZlZEZpbGVzID8/IFtdKSxcbiAgICAgIF0pIHtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZENoYW5nZWRGaWxlID0gbm9ybWFsaXplUGF0aChjaGFuZ2VkRmlsZSk7XG4gICAgICAgIC8vIEludmFsaWRhdGUgZmlsZSBkZXBlbmRlbmNpZXNcbiAgICAgICAgdGhpcy5maWxlRGVwZW5kZW5jaWVzLmRlbGV0ZShub3JtYWxpemVkQ2hhbmdlZEZpbGUpO1xuICAgICAgICAvLyBJbnZhbGlkYXRlIGV4aXN0aW5nIGNhY2hlXG4gICAgICAgIGNhY2hlLmludmFsaWRhdGUobm9ybWFsaXplZENoYW5nZWRGaWxlKTtcblxuICAgICAgICBjaGFuZ2VkRmlsZXMuYWRkKG5vcm1hbGl6ZWRDaGFuZ2VkRmlsZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEluaXRpYWxpemUgYSBuZXcgY2FjaGVcbiAgICAgIGNhY2hlID0gbmV3IFNvdXJjZUZpbGVDYWNoZSgpO1xuICAgICAgLy8gT25seSBzdG9yZSBjYWNoZSBpZiBpbiB3YXRjaCBtb2RlXG4gICAgICBpZiAodGhpcy53YXRjaE1vZGUpIHtcbiAgICAgICAgdGhpcy5zb3VyY2VGaWxlQ2FjaGUgPSBjYWNoZTtcbiAgICAgIH1cbiAgICB9XG4gICAgYXVnbWVudEhvc3RXaXRoQ2FjaGluZyhob3N0LCBjYWNoZSk7XG5cbiAgICBjb25zdCBtb2R1bGVSZXNvbHV0aW9uQ2FjaGUgPSB0cy5jcmVhdGVNb2R1bGVSZXNvbHV0aW9uQ2FjaGUoXG4gICAgICBob3N0LmdldEN1cnJlbnREaXJlY3RvcnkoKSxcbiAgICAgIGhvc3QuZ2V0Q2Fub25pY2FsRmlsZU5hbWUuYmluZChob3N0KSxcbiAgICAgIGNvbXBpbGVyT3B0aW9ucyxcbiAgICApO1xuXG4gICAgLy8gU2V0dXAgc291cmNlIGZpbGUgZGVwZW5kZW5jeSBjb2xsZWN0aW9uXG4gICAgYXVnbWVudEhvc3RXaXRoRGVwZW5kZW5jeUNvbGxlY3Rpb24oaG9zdCwgdGhpcy5maWxlRGVwZW5kZW5jaWVzLCBtb2R1bGVSZXNvbHV0aW9uQ2FjaGUpO1xuXG4gICAgLy8gU2V0dXAgcmVzb3VyY2UgbG9hZGluZ1xuICAgIHN0YXRlLnJlc291cmNlTG9hZGVyLnVwZGF0ZShjb21waWxhdGlvbiwgY2hhbmdlZEZpbGVzKTtcbiAgICBhdWdtZW50SG9zdFdpdGhSZXNvdXJjZXMoaG9zdCwgc3RhdGUucmVzb3VyY2VMb2FkZXIsIHtcbiAgICAgIGRpcmVjdFRlbXBsYXRlTG9hZGluZzogdGhpcy5wbHVnaW5PcHRpb25zLmRpcmVjdFRlbXBsYXRlTG9hZGluZyxcbiAgICAgIGlubGluZVN0eWxlRmlsZUV4dGVuc2lvbjogdGhpcy5wbHVnaW5PcHRpb25zLmlubGluZVN0eWxlRmlsZUV4dGVuc2lvbixcbiAgICB9KTtcblxuICAgIC8vIFNldHVwIHNvdXJjZSBmaWxlIGFkanVzdG1lbnQgb3B0aW9uc1xuICAgIGF1Z21lbnRIb3N0V2l0aFJlcGxhY2VtZW50cyhob3N0LCB0aGlzLnBsdWdpbk9wdGlvbnMuZmlsZVJlcGxhY2VtZW50cywgbW9kdWxlUmVzb2x1dGlvbkNhY2hlKTtcbiAgICBhdWdtZW50SG9zdFdpdGhTdWJzdGl0dXRpb25zKGhvc3QsIHRoaXMucGx1Z2luT3B0aW9ucy5zdWJzdGl0dXRpb25zKTtcblxuICAgIC8vIENyZWF0ZSB0aGUgZmlsZSBlbWl0dGVyIHVzZWQgYnkgdGhlIHdlYnBhY2sgbG9hZGVyXG4gICAgY29uc3QgeyBmaWxlRW1pdHRlciwgYnVpbGRlciwgaW50ZXJuYWxGaWxlcyB9ID0gdGhpcy5wbHVnaW5PcHRpb25zLmppdE1vZGVcbiAgICAgID8gdGhpcy51cGRhdGVKaXRQcm9ncmFtKGNvbXBpbGVyT3B0aW9ucywgcm9vdE5hbWVzLCBob3N0LCBkaWFnbm9zdGljc1JlcG9ydGVyKVxuICAgICAgOiB0aGlzLnVwZGF0ZUFvdFByb2dyYW0oXG4gICAgICAgICAgY29tcGlsZXJPcHRpb25zLFxuICAgICAgICAgIHJvb3ROYW1lcyxcbiAgICAgICAgICBob3N0LFxuICAgICAgICAgIGRpYWdub3N0aWNzUmVwb3J0ZXIsXG4gICAgICAgICAgc3RhdGUucmVzb3VyY2VMb2FkZXIsXG4gICAgICAgICk7XG5cbiAgICAvLyBTZXQgb2YgZmlsZXMgdXNlZCBkdXJpbmcgdGhlIHVudXNlZCBUeXBlU2NyaXB0IGZpbGUgYW5hbHlzaXNcbiAgICBjb25zdCBjdXJyZW50VW51c2VkID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICBmb3IgKGNvbnN0IHNvdXJjZUZpbGUgb2YgYnVpbGRlci5nZXRTb3VyY2VGaWxlcygpKSB7XG4gICAgICBpZiAoaW50ZXJuYWxGaWxlcz8uaGFzKHNvdXJjZUZpbGUpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBFbnN1cmUgYWxsIHByb2dyYW0gZmlsZXMgYXJlIGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgY29tcGlsYXRpb24gYW5kIHdpbGwgYmUgd2F0Y2hlZC5cbiAgICAgIC8vIFdlYnBhY2sgZG9lcyBub3Qgbm9ybWFsaXplIHBhdGhzLiBUaGVyZWZvcmUsIHdlIG5lZWQgdG8gbm9ybWFsaXplIHRoZSBwYXRoIHdpdGggRlMgc2VwZXJhdG9ycy5cbiAgICAgIGNvbXBpbGF0aW9uLmZpbGVEZXBlbmRlbmNpZXMuYWRkKGV4dGVybmFsaXplUGF0aChzb3VyY2VGaWxlLmZpbGVOYW1lKSk7XG5cbiAgICAgIC8vIEFkZCBhbGwgbm9uLWRlY2xhcmF0aW9uIGZpbGVzIHRvIHRoZSBpbml0aWFsIHNldCBvZiB1bnVzZWQgZmlsZXMuIFRoZSBzZXQgd2lsbCBiZVxuICAgICAgLy8gYW5hbHl6ZWQgYW5kIHBydW5lZCBhZnRlciBhbGwgV2VicGFjayBtb2R1bGVzIGFyZSBmaW5pc2hlZCBidWlsZGluZy5cbiAgICAgIGlmICghc291cmNlRmlsZS5pc0RlY2xhcmF0aW9uRmlsZSkge1xuICAgICAgICBjdXJyZW50VW51c2VkLmFkZChub3JtYWxpemVQYXRoKHNvdXJjZUZpbGUuZmlsZU5hbWUpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb21waWxhdGlvbi5ob29rcy5maW5pc2hNb2R1bGVzLnRhcFByb21pc2UoUExVR0lOX05BTUUsIGFzeW5jIChtb2R1bGVzKSA9PiB7XG4gICAgICAvLyBSZWJ1aWxkIGFueSByZW1haW5pbmcgQU9UIHJlcXVpcmVkIG1vZHVsZXNcbiAgICAgIGF3YWl0IHRoaXMucmVidWlsZFJlcXVpcmVkRmlsZXMobW9kdWxlcywgY29tcGlsYXRpb24sIGZpbGVFbWl0dGVyKTtcblxuICAgICAgLy8gQ2xlYXIgb3V0IHRoZSBXZWJwYWNrIGNvbXBpbGF0aW9uIHRvIGF2b2lkIGFuIGV4dHJhIHJldGFpbmluZyByZWZlcmVuY2VcbiAgICAgIHN0YXRlLnJlc291cmNlTG9hZGVyPy5jbGVhclBhcmVudENvbXBpbGF0aW9uKCk7XG5cbiAgICAgIC8vIEFuYWx5emUgcHJvZ3JhbSBmb3IgdW51c2VkIGZpbGVzXG4gICAgICBpZiAoY29tcGlsYXRpb24uZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHdlYnBhY2tNb2R1bGUgb2YgbW9kdWxlcykge1xuICAgICAgICBjb25zdCByZXNvdXJjZSA9ICh3ZWJwYWNrTW9kdWxlIGFzIE5vcm1hbE1vZHVsZSkucmVzb3VyY2U7XG4gICAgICAgIGlmIChyZXNvdXJjZSkge1xuICAgICAgICAgIHRoaXMubWFya1Jlc291cmNlVXNlZChub3JtYWxpemVQYXRoKHJlc291cmNlKSwgY3VycmVudFVudXNlZCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCB1bnVzZWQgb2YgY3VycmVudFVudXNlZCkge1xuICAgICAgICBpZiAoc3RhdGUucHJldmlvdXNVbnVzZWQ/Lmhhcyh1bnVzZWQpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgYWRkV2FybmluZyhcbiAgICAgICAgICBjb21waWxhdGlvbixcbiAgICAgICAgICBgJHt1bnVzZWR9IGlzIHBhcnQgb2YgdGhlIFR5cGVTY3JpcHQgY29tcGlsYXRpb24gYnV0IGl0J3MgdW51c2VkLlxcbmAgK1xuICAgICAgICAgICAgYEFkZCBvbmx5IGVudHJ5IHBvaW50cyB0byB0aGUgJ2ZpbGVzJyBvciAnaW5jbHVkZScgcHJvcGVydGllcyBpbiB5b3VyIHRzY29uZmlnLmAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBzdGF0ZS5wcmV2aW91c1VudXNlZCA9IGN1cnJlbnRVbnVzZWQ7XG4gICAgfSk7XG5cbiAgICAvLyBTdG9yZSBmaWxlIGVtaXR0ZXIgZm9yIGxvYWRlciB1c2FnZVxuICAgIGVtaXRSZWdpc3RyYXRpb24udXBkYXRlKGZpbGVFbWl0dGVyKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVnaXN0ZXJXaXRoQ29tcGlsYXRpb24oY29tcGlsYXRpb246IENvbXBpbGF0aW9uKSB7XG4gICAgbGV0IGZpbGVFbWl0dGVycyA9IGNvbXBpbGF0aW9uRmlsZUVtaXR0ZXJzLmdldChjb21waWxhdGlvbik7XG4gICAgaWYgKCFmaWxlRW1pdHRlcnMpIHtcbiAgICAgIGZpbGVFbWl0dGVycyA9IG5ldyBGaWxlRW1pdHRlckNvbGxlY3Rpb24oKTtcbiAgICAgIGNvbXBpbGF0aW9uRmlsZUVtaXR0ZXJzLnNldChjb21waWxhdGlvbiwgZmlsZUVtaXR0ZXJzKTtcbiAgICAgIGNvbXBpbGF0aW9uLmNvbXBpbGVyLndlYnBhY2suTm9ybWFsTW9kdWxlLmdldENvbXBpbGF0aW9uSG9va3MoY29tcGlsYXRpb24pLmxvYWRlci50YXAoXG4gICAgICAgIFBMVUdJTl9OQU1FLFxuICAgICAgICAobG9hZGVyQ29udGV4dDogeyBbQW5ndWxhclBsdWdpblN5bWJvbF0/OiBGaWxlRW1pdHRlckNvbGxlY3Rpb24gfSkgPT4ge1xuICAgICAgICAgIGxvYWRlckNvbnRleHRbQW5ndWxhclBsdWdpblN5bWJvbF0gPSBmaWxlRW1pdHRlcnM7XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBlbWl0UmVnaXN0cmF0aW9uID0gZmlsZUVtaXR0ZXJzLnJlZ2lzdGVyKCk7XG5cbiAgICByZXR1cm4gZW1pdFJlZ2lzdHJhdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgbWFya1Jlc291cmNlVXNlZChub3JtYWxpemVkUmVzb3VyY2VQYXRoOiBzdHJpbmcsIGN1cnJlbnRVbnVzZWQ6IFNldDxzdHJpbmc+KTogdm9pZCB7XG4gICAgaWYgKCFjdXJyZW50VW51c2VkLmhhcyhub3JtYWxpemVkUmVzb3VyY2VQYXRoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGN1cnJlbnRVbnVzZWQuZGVsZXRlKG5vcm1hbGl6ZWRSZXNvdXJjZVBhdGgpO1xuICAgIGNvbnN0IGRlcGVuZGVuY2llcyA9IHRoaXMuZmlsZURlcGVuZGVuY2llcy5nZXQobm9ybWFsaXplZFJlc291cmNlUGF0aCk7XG4gICAgaWYgKCFkZXBlbmRlbmNpZXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCBkZXBlbmRlbmN5IG9mIGRlcGVuZGVuY2llcykge1xuICAgICAgdGhpcy5tYXJrUmVzb3VyY2VVc2VkKG5vcm1hbGl6ZVBhdGgoZGVwZW5kZW5jeSksIGN1cnJlbnRVbnVzZWQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVidWlsZFJlcXVpcmVkRmlsZXMoXG4gICAgbW9kdWxlczogSXRlcmFibGU8TW9kdWxlPixcbiAgICBjb21waWxhdGlvbjogQ29tcGlsYXRpb24sXG4gICAgZmlsZUVtaXR0ZXI6IEZpbGVFbWl0dGVyLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5yZXF1aXJlZEZpbGVzVG9FbWl0LnNpemUgPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmaWxlc1RvUmVidWlsZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGZvciAoY29uc3QgcmVxdWlyZWRGaWxlIG9mIHRoaXMucmVxdWlyZWRGaWxlc1RvRW1pdCkge1xuICAgICAgY29uc3QgaGlzdG9yeSA9IGF3YWl0IHRoaXMuZ2V0RmlsZUVtaXRIaXN0b3J5KHJlcXVpcmVkRmlsZSk7XG4gICAgICBpZiAoaGlzdG9yeSkge1xuICAgICAgICBjb25zdCBlbWl0UmVzdWx0ID0gYXdhaXQgZmlsZUVtaXR0ZXIocmVxdWlyZWRGaWxlKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGVtaXRSZXN1bHQ/LmNvbnRlbnQgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgIGhpc3RvcnkubGVuZ3RoICE9PSBlbWl0UmVzdWx0LmNvbnRlbnQubGVuZ3RoIHx8XG4gICAgICAgICAgZW1pdFJlc3VsdC5oYXNoID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICBCdWZmZXIuY29tcGFyZShoaXN0b3J5Lmhhc2gsIGVtaXRSZXN1bHQuaGFzaCkgIT09IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gTmV3IGVtaXQgcmVzdWx0IGlzIGRpZmZlcmVudCBzbyByZWJ1aWxkIHVzaW5nIG5ldyBlbWl0IHJlc3VsdFxuICAgICAgICAgIHRoaXMucmVxdWlyZWRGaWxlc1RvRW1pdENhY2hlLnNldChyZXF1aXJlZEZpbGUsIGVtaXRSZXN1bHQpO1xuICAgICAgICAgIGZpbGVzVG9SZWJ1aWxkLmFkZChyZXF1aXJlZEZpbGUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBObyBlbWl0IGhpc3Rvcnkgc28gcmVidWlsZFxuICAgICAgICBmaWxlc1RvUmVidWlsZC5hZGQocmVxdWlyZWRGaWxlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZmlsZXNUb1JlYnVpbGQuc2l6ZSA+IDApIHtcbiAgICAgIGNvbnN0IHJlYnVpbGQgPSAod2VicGFja01vZHVsZTogTW9kdWxlKSA9PlxuICAgICAgICBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4gY29tcGlsYXRpb24ucmVidWlsZE1vZHVsZSh3ZWJwYWNrTW9kdWxlLCAoKSA9PiByZXNvbHZlKCkpKTtcblxuICAgICAgY29uc3QgbW9kdWxlc1RvUmVidWlsZCA9IFtdO1xuICAgICAgZm9yIChjb25zdCB3ZWJwYWNrTW9kdWxlIG9mIG1vZHVsZXMpIHtcbiAgICAgICAgY29uc3QgcmVzb3VyY2UgPSAod2VicGFja01vZHVsZSBhcyBOb3JtYWxNb2R1bGUpLnJlc291cmNlO1xuICAgICAgICBpZiAocmVzb3VyY2UgJiYgZmlsZXNUb1JlYnVpbGQuaGFzKG5vcm1hbGl6ZVBhdGgocmVzb3VyY2UpKSkge1xuICAgICAgICAgIG1vZHVsZXNUb1JlYnVpbGQucHVzaCh3ZWJwYWNrTW9kdWxlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwobW9kdWxlc1RvUmVidWlsZC5tYXAoKHdlYnBhY2tNb2R1bGUpID0+IHJlYnVpbGQod2VicGFja01vZHVsZSkpKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlcXVpcmVkRmlsZXNUb0VtaXQuY2xlYXIoKTtcbiAgICB0aGlzLnJlcXVpcmVkRmlsZXNUb0VtaXRDYWNoZS5jbGVhcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkQ29uZmlndXJhdGlvbigpIHtcbiAgICBjb25zdCB7XG4gICAgICBvcHRpb25zOiBjb21waWxlck9wdGlvbnMsXG4gICAgICByb290TmFtZXMsXG4gICAgICBlcnJvcnMsXG4gICAgfSA9IHRoaXMuY29tcGlsZXJDbGkucmVhZENvbmZpZ3VyYXRpb24oXG4gICAgICB0aGlzLnBsdWdpbk9wdGlvbnMudHNjb25maWcsXG4gICAgICB0aGlzLnBsdWdpbk9wdGlvbnMuY29tcGlsZXJPcHRpb25zLFxuICAgICk7XG4gICAgY29tcGlsZXJPcHRpb25zLm5vRW1pdE9uRXJyb3IgPSBmYWxzZTtcbiAgICBjb21waWxlck9wdGlvbnMuc3VwcHJlc3NPdXRwdXRQYXRoQ2hlY2sgPSB0cnVlO1xuICAgIGNvbXBpbGVyT3B0aW9ucy5vdXREaXIgPSB1bmRlZmluZWQ7XG4gICAgY29tcGlsZXJPcHRpb25zLmlubGluZVNvdXJjZXMgPSBjb21waWxlck9wdGlvbnMuc291cmNlTWFwO1xuICAgIGNvbXBpbGVyT3B0aW9ucy5pbmxpbmVTb3VyY2VNYXAgPSBmYWxzZTtcbiAgICBjb21waWxlck9wdGlvbnMubWFwUm9vdCA9IHVuZGVmaW5lZDtcbiAgICBjb21waWxlck9wdGlvbnMuc291cmNlUm9vdCA9IHVuZGVmaW5lZDtcbiAgICBjb21waWxlck9wdGlvbnMuYWxsb3dFbXB0eUNvZGVnZW5GaWxlcyA9IGZhbHNlO1xuICAgIGNvbXBpbGVyT3B0aW9ucy5hbm5vdGF0aW9uc0FzID0gJ2RlY29yYXRvcnMnO1xuICAgIGNvbXBpbGVyT3B0aW9ucy5lbmFibGVSZXNvdXJjZUlubGluaW5nID0gZmFsc2U7XG5cbiAgICByZXR1cm4geyBjb21waWxlck9wdGlvbnMsIHJvb3ROYW1lcywgZXJyb3JzIH07XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUFvdFByb2dyYW0oXG4gICAgY29tcGlsZXJPcHRpb25zOiBDb21waWxlck9wdGlvbnMsXG4gICAgcm9vdE5hbWVzOiBzdHJpbmdbXSxcbiAgICBob3N0OiBDb21waWxlckhvc3QsXG4gICAgZGlhZ25vc3RpY3NSZXBvcnRlcjogRGlhZ25vc3RpY3NSZXBvcnRlcixcbiAgICByZXNvdXJjZUxvYWRlcjogV2VicGFja1Jlc291cmNlTG9hZGVyLFxuICApIHtcbiAgICAvLyBDcmVhdGUgdGhlIEFuZ3VsYXIgc3BlY2lmaWMgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIHRoZSBBbmd1bGFyIGNvbXBpbGVyXG4gICAgY29uc3QgYW5ndWxhclByb2dyYW0gPSBuZXcgdGhpcy5jb21waWxlckNsaS5OZ3RzY1Byb2dyYW0oXG4gICAgICByb290TmFtZXMsXG4gICAgICBjb21waWxlck9wdGlvbnMsXG4gICAgICBob3N0LFxuICAgICAgdGhpcy5uZ3RzY05leHRQcm9ncmFtLFxuICAgICk7XG4gICAgY29uc3QgYW5ndWxhckNvbXBpbGVyID0gYW5ndWxhclByb2dyYW0uY29tcGlsZXI7XG5cbiAgICAvLyBUaGUgYGlnbm9yZUZvckVtaXRgIHJldHVybiB2YWx1ZSBjYW4gYmUgc2FmZWx5IGlnbm9yZWQgd2hlbiBlbWl0dGluZy4gT25seSBmaWxlc1xuICAgIC8vIHRoYXQgd2lsbCBiZSBidW5kbGVkIChyZXF1ZXN0ZWQgYnkgV2VicGFjaykgd2lsbCBiZSBlbWl0dGVkLiBDb21iaW5lZCB3aXRoIFR5cGVTY3JpcHQnc1xuICAgIC8vIGVsaWRpbmcgb2YgdHlwZSBvbmx5IGltcG9ydHMsIHRoaXMgd2lsbCBjYXVzZSB0eXBlIG9ubHkgZmlsZXMgdG8gYmUgYXV0b21hdGljYWxseSBpZ25vcmVkLlxuICAgIC8vIEludGVybmFsIEFuZ3VsYXIgdHlwZSBjaGVjayBmaWxlcyBhcmUgYWxzbyBub3QgcmVzb2x2YWJsZSBieSB0aGUgYnVuZGxlci4gRXZlbiBpZiB0aGV5XG4gICAgLy8gd2VyZSBzb21laG93IGVycmFudGx5IGltcG9ydGVkLCB0aGUgYnVuZGxlciB3b3VsZCBlcnJvciBiZWZvcmUgYW4gZW1pdCB3YXMgYXR0ZW1wdGVkLlxuICAgIC8vIERpYWdub3N0aWNzIGFyZSBzdGlsbCBjb2xsZWN0ZWQgZm9yIGFsbCBmaWxlcyB3aGljaCByZXF1aXJlcyB1c2luZyBgaWdub3JlRm9yRGlhZ25vc3RpY3NgLlxuICAgIGNvbnN0IHsgaWdub3JlRm9yRGlhZ25vc3RpY3MsIGlnbm9yZUZvckVtaXQgfSA9IGFuZ3VsYXJDb21waWxlcjtcblxuICAgIC8vIFNvdXJjZUZpbGUgdmVyc2lvbnMgYXJlIHJlcXVpcmVkIGZvciBidWlsZGVyIHByb2dyYW1zLlxuICAgIC8vIFRoZSB3cmFwcGVkIGhvc3QgaW5zaWRlIE5ndHNjUHJvZ3JhbSBhZGRzIGFkZGl0aW9uYWwgZmlsZXMgdGhhdCB3aWxsIG5vdCBoYXZlIHZlcnNpb25zLlxuICAgIGNvbnN0IHR5cGVTY3JpcHRQcm9ncmFtID0gYW5ndWxhclByb2dyYW0uZ2V0VHNQcm9ncmFtKCk7XG4gICAgYXVnbWVudFByb2dyYW1XaXRoVmVyc2lvbmluZyh0eXBlU2NyaXB0UHJvZ3JhbSk7XG5cbiAgICBsZXQgYnVpbGRlcjogdHMuQnVpbGRlclByb2dyYW0gfCB0cy5FbWl0QW5kU2VtYW50aWNEaWFnbm9zdGljc0J1aWxkZXJQcm9ncmFtO1xuICAgIGlmICh0aGlzLndhdGNoTW9kZSkge1xuICAgICAgYnVpbGRlciA9IHRoaXMuYnVpbGRlciA9IHRzLmNyZWF0ZUVtaXRBbmRTZW1hbnRpY0RpYWdub3N0aWNzQnVpbGRlclByb2dyYW0oXG4gICAgICAgIHR5cGVTY3JpcHRQcm9ncmFtLFxuICAgICAgICBob3N0LFxuICAgICAgICB0aGlzLmJ1aWxkZXIsXG4gICAgICApO1xuICAgICAgdGhpcy5uZ3RzY05leHRQcm9ncmFtID0gYW5ndWxhclByb2dyYW07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFdoZW4gbm90IGluIHdhdGNoIG1vZGUsIHRoZSBzdGFydHVwIGNvc3Qgb2YgdGhlIGluY3JlbWVudGFsIGFuYWx5c2lzIGNhbiBiZSBhdm9pZGVkIGJ5XG4gICAgICAvLyB1c2luZyBhbiBhYnN0cmFjdCBidWlsZGVyIHRoYXQgb25seSB3cmFwcyBhIFR5cGVTY3JpcHQgcHJvZ3JhbS5cbiAgICAgIGJ1aWxkZXIgPSB0cy5jcmVhdGVBYnN0cmFjdEJ1aWxkZXIodHlwZVNjcmlwdFByb2dyYW0sIGhvc3QpO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBzZW1hbnRpYyBkaWFnbm9zdGljcyBjYWNoZVxuICAgIGNvbnN0IGFmZmVjdGVkRmlsZXMgPSBuZXcgU2V0PHRzLlNvdXJjZUZpbGU+KCk7XG5cbiAgICAvLyBBbmFseXplIGFmZmVjdGVkIGZpbGVzIHdoZW4gaW4gd2F0Y2ggbW9kZSBmb3IgaW5jcmVtZW50YWwgdHlwZSBjaGVja2luZ1xuICAgIGlmICgnZ2V0U2VtYW50aWNEaWFnbm9zdGljc09mTmV4dEFmZmVjdGVkRmlsZScgaW4gYnVpbGRlcikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnN0YW50LWNvbmRpdGlvblxuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYnVpbGRlci5nZXRTZW1hbnRpY0RpYWdub3N0aWNzT2ZOZXh0QWZmZWN0ZWRGaWxlKHVuZGVmaW5lZCwgKHNvdXJjZUZpbGUpID0+IHtcbiAgICAgICAgICAvLyBJZiB0aGUgYWZmZWN0ZWQgZmlsZSBpcyBhIFRUQyBzaGltLCBhZGQgdGhlIHNoaW0ncyBvcmlnaW5hbCBzb3VyY2UgZmlsZS5cbiAgICAgICAgICAvLyBUaGlzIGVuc3VyZXMgdGhhdCBjaGFuZ2VzIHRoYXQgYWZmZWN0IFRUQyBhcmUgdHlwZWNoZWNrZWQgZXZlbiB3aGVuIHRoZSBjaGFuZ2VzXG4gICAgICAgICAgLy8gYXJlIG90aGVyd2lzZSB1bnJlbGF0ZWQgZnJvbSBhIFRTIHBlcnNwZWN0aXZlIGFuZCBkbyBub3QgcmVzdWx0IGluIEl2eSBjb2RlZ2VuIGNoYW5nZXMuXG4gICAgICAgICAgLy8gRm9yIGV4YW1wbGUsIGNoYW5naW5nIEBJbnB1dCBwcm9wZXJ0eSB0eXBlcyBvZiBhIGRpcmVjdGl2ZSB1c2VkIGluIGFub3RoZXIgY29tcG9uZW50J3NcbiAgICAgICAgICAvLyB0ZW1wbGF0ZS5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBpZ25vcmVGb3JEaWFnbm9zdGljcy5oYXMoc291cmNlRmlsZSkgJiZcbiAgICAgICAgICAgIHNvdXJjZUZpbGUuZmlsZU5hbWUuZW5kc1dpdGgoJy5uZ3R5cGVjaGVjay50cycpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBUaGlzIGZpbGUgbmFtZSBjb252ZXJzaW9uIHJlbGllcyBvbiBpbnRlcm5hbCBjb21waWxlciBsb2dpYyBhbmQgc2hvdWxkIGJlIGNvbnZlcnRlZFxuICAgICAgICAgICAgLy8gdG8gYW4gb2ZmaWNpYWwgbWV0aG9kIHdoZW4gYXZhaWxhYmxlLiAxNSBpcyBsZW5ndGggb2YgYC5uZ3R5cGVjaGVjay50c2BcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRmlsZW5hbWUgPSBzb3VyY2VGaWxlLmZpbGVOYW1lLnNsaWNlKDAsIC0xNSkgKyAnLnRzJztcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsU291cmNlRmlsZSA9IGJ1aWxkZXIuZ2V0U291cmNlRmlsZShvcmlnaW5hbEZpbGVuYW1lKTtcbiAgICAgICAgICAgIGlmIChvcmlnaW5hbFNvdXJjZUZpbGUpIHtcbiAgICAgICAgICAgICAgYWZmZWN0ZWRGaWxlcy5hZGQob3JpZ2luYWxTb3VyY2VGaWxlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgYWZmZWN0ZWRGaWxlcy5hZGQocmVzdWx0LmFmZmVjdGVkIGFzIHRzLlNvdXJjZUZpbGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENvbGxlY3QgcHJvZ3JhbSBsZXZlbCBkaWFnbm9zdGljc1xuICAgIGNvbnN0IGRpYWdub3N0aWNzID0gW1xuICAgICAgLi4uYW5ndWxhckNvbXBpbGVyLmdldE9wdGlvbkRpYWdub3N0aWNzKCksXG4gICAgICAuLi5idWlsZGVyLmdldE9wdGlvbnNEaWFnbm9zdGljcygpLFxuICAgICAgLi4uYnVpbGRlci5nZXRHbG9iYWxEaWFnbm9zdGljcygpLFxuICAgIF07XG4gICAgZGlhZ25vc3RpY3NSZXBvcnRlcihkaWFnbm9zdGljcyk7XG5cbiAgICAvLyBDb2xsZWN0IHNvdXJjZSBmaWxlIHNwZWNpZmljIGRpYWdub3N0aWNzXG4gICAgZm9yIChjb25zdCBzb3VyY2VGaWxlIG9mIGJ1aWxkZXIuZ2V0U291cmNlRmlsZXMoKSkge1xuICAgICAgaWYgKCFpZ25vcmVGb3JEaWFnbm9zdGljcy5oYXMoc291cmNlRmlsZSkpIHtcbiAgICAgICAgZGlhZ25vc3RpY3NSZXBvcnRlcihidWlsZGVyLmdldFN5bnRhY3RpY0RpYWdub3N0aWNzKHNvdXJjZUZpbGUpKTtcbiAgICAgICAgZGlhZ25vc3RpY3NSZXBvcnRlcihidWlsZGVyLmdldFNlbWFudGljRGlhZ25vc3RpY3Moc291cmNlRmlsZSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHRyYW5zZm9ybWVycyA9IGNyZWF0ZUFvdFRyYW5zZm9ybWVycyhidWlsZGVyLCB0aGlzLnBsdWdpbk9wdGlvbnMsIGltYWdlRG9tYWlucyk7XG5cbiAgICBjb25zdCBnZXREZXBlbmRlbmNpZXMgPSAoc291cmNlRmlsZTogdHMuU291cmNlRmlsZSkgPT4ge1xuICAgICAgY29uc3QgZGVwZW5kZW5jaWVzID0gW107XG4gICAgICBmb3IgKGNvbnN0IHJlc291cmNlUGF0aCBvZiBhbmd1bGFyQ29tcGlsZXIuZ2V0UmVzb3VyY2VEZXBlbmRlbmNpZXMoc291cmNlRmlsZSkpIHtcbiAgICAgICAgZGVwZW5kZW5jaWVzLnB1c2goXG4gICAgICAgICAgcmVzb3VyY2VQYXRoLFxuICAgICAgICAgIC8vIFJldHJpZXZlIGFsbCBkZXBlbmRlbmNpZXMgb2YgdGhlIHJlc291cmNlIChzdHlsZXNoZWV0IGltcG9ydHMsIGV0Yy4pXG4gICAgICAgICAgLi4ucmVzb3VyY2VMb2FkZXIuZ2V0UmVzb3VyY2VEZXBlbmRlbmNpZXMocmVzb3VyY2VQYXRoKSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRlcGVuZGVuY2llcztcbiAgICB9O1xuXG4gICAgLy8gUmVxdWlyZWQgdG8gc3VwcG9ydCBhc3luY2hyb25vdXMgcmVzb3VyY2UgbG9hZGluZ1xuICAgIC8vIE11c3QgYmUgZG9uZSBiZWZvcmUgY3JlYXRpbmcgdHJhbnNmb3JtZXJzIG9yIGdldHRpbmcgdGVtcGxhdGUgZGlhZ25vc3RpY3NcbiAgICBjb25zdCBwZW5kaW5nQW5hbHlzaXMgPSBhbmd1bGFyQ29tcGlsZXJcbiAgICAgIC5hbmFseXplQXN5bmMoKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLnJlcXVpcmVkRmlsZXNUb0VtaXQuY2xlYXIoKTtcblxuICAgICAgICBmb3IgKGNvbnN0IHNvdXJjZUZpbGUgb2YgYnVpbGRlci5nZXRTb3VyY2VGaWxlcygpKSB7XG4gICAgICAgICAgaWYgKHNvdXJjZUZpbGUuaXNEZWNsYXJhdGlvbkZpbGUpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIENvbGxlY3Qgc291cmNlcyB0aGF0IGFyZSByZXF1aXJlZCB0byBiZSBlbWl0dGVkXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIWlnbm9yZUZvckVtaXQuaGFzKHNvdXJjZUZpbGUpICYmXG4gICAgICAgICAgICAhYW5ndWxhckNvbXBpbGVyLmluY3JlbWVudGFsQ29tcGlsYXRpb24uc2FmZVRvU2tpcEVtaXQoc291cmNlRmlsZSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMucmVxdWlyZWRGaWxlc1RvRW1pdC5hZGQobm9ybWFsaXplUGF0aChzb3VyY2VGaWxlLmZpbGVOYW1lKSk7XG5cbiAgICAgICAgICAgIC8vIElmIHJlcXVpcmVkIHRvIGVtaXQsIGRpYWdub3N0aWNzIG1heSBoYXZlIGFsc28gY2hhbmdlZFxuICAgICAgICAgICAgaWYgKCFpZ25vcmVGb3JEaWFnbm9zdGljcy5oYXMoc291cmNlRmlsZSkpIHtcbiAgICAgICAgICAgICAgYWZmZWN0ZWRGaWxlcy5hZGQoc291cmNlRmlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHRoaXMuc291cmNlRmlsZUNhY2hlICYmXG4gICAgICAgICAgICAhYWZmZWN0ZWRGaWxlcy5oYXMoc291cmNlRmlsZSkgJiZcbiAgICAgICAgICAgICFpZ25vcmVGb3JEaWFnbm9zdGljcy5oYXMoc291cmNlRmlsZSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIFVzZSBjYWNoZWQgQW5ndWxhciBkaWFnbm9zdGljcyBmb3IgdW5jaGFuZ2VkIGFuZCB1bmFmZmVjdGVkIGZpbGVzXG4gICAgICAgICAgICBjb25zdCBhbmd1bGFyRGlhZ25vc3RpY3MgPSB0aGlzLnNvdXJjZUZpbGVDYWNoZS5nZXRBbmd1bGFyRGlhZ25vc3RpY3Moc291cmNlRmlsZSk7XG4gICAgICAgICAgICBpZiAoYW5ndWxhckRpYWdub3N0aWNzKSB7XG4gICAgICAgICAgICAgIGRpYWdub3N0aWNzUmVwb3J0ZXIoYW5ndWxhckRpYWdub3N0aWNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDb2xsZWN0IG5ldyBBbmd1bGFyIGRpYWdub3N0aWNzIGZvciBmaWxlcyBhZmZlY3RlZCBieSBjaGFuZ2VzXG4gICAgICAgIGNvbnN0IE9wdGltaXplRm9yID0gdGhpcy5jb21waWxlckNsaS5PcHRpbWl6ZUZvcjtcbiAgICAgICAgY29uc3Qgb3B0aW1pemVEaWFnbm9zdGljc0ZvciA9XG4gICAgICAgICAgYWZmZWN0ZWRGaWxlcy5zaXplIDw9IERJQUdOT1NUSUNTX0FGRkVDVEVEX1RIUkVTSE9MRFxuICAgICAgICAgICAgPyBPcHRpbWl6ZUZvci5TaW5nbGVGaWxlXG4gICAgICAgICAgICA6IE9wdGltaXplRm9yLldob2xlUHJvZ3JhbTtcbiAgICAgICAgZm9yIChjb25zdCBhZmZlY3RlZEZpbGUgb2YgYWZmZWN0ZWRGaWxlcykge1xuICAgICAgICAgIGNvbnN0IGFuZ3VsYXJEaWFnbm9zdGljcyA9IGFuZ3VsYXJDb21waWxlci5nZXREaWFnbm9zdGljc0ZvckZpbGUoXG4gICAgICAgICAgICBhZmZlY3RlZEZpbGUsXG4gICAgICAgICAgICBvcHRpbWl6ZURpYWdub3N0aWNzRm9yLFxuICAgICAgICAgICk7XG4gICAgICAgICAgZGlhZ25vc3RpY3NSZXBvcnRlcihhbmd1bGFyRGlhZ25vc3RpY3MpO1xuICAgICAgICAgIHRoaXMuc291cmNlRmlsZUNhY2hlPy51cGRhdGVBbmd1bGFyRGlhZ25vc3RpY3MoYWZmZWN0ZWRGaWxlLCBhbmd1bGFyRGlhZ25vc3RpY3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBlbWl0dGVyOiB0aGlzLmNyZWF0ZUZpbGVFbWl0dGVyKFxuICAgICAgICAgICAgYnVpbGRlcixcbiAgICAgICAgICAgIG1lcmdlVHJhbnNmb3JtZXJzKGFuZ3VsYXJDb21waWxlci5wcmVwYXJlRW1pdCgpLnRyYW5zZm9ybWVycywgdHJhbnNmb3JtZXJzKSxcbiAgICAgICAgICAgIGdldERlcGVuZGVuY2llcyxcbiAgICAgICAgICAgIChzb3VyY2VGaWxlKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMucmVxdWlyZWRGaWxlc1RvRW1pdC5kZWxldGUobm9ybWFsaXplUGF0aChzb3VyY2VGaWxlLmZpbGVOYW1lKSk7XG4gICAgICAgICAgICAgIGFuZ3VsYXJDb21waWxlci5pbmNyZW1lbnRhbENvbXBpbGF0aW9uLnJlY29yZFN1Y2Nlc3NmdWxFbWl0KHNvdXJjZUZpbGUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICApLFxuICAgICAgICB9O1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyKSA9PiAoeyBlcnJvck1lc3NhZ2U6IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBgJHtlcnJ9YCB9KSk7XG5cbiAgICBjb25zdCBhbmFseXppbmdGaWxlRW1pdHRlcjogRmlsZUVtaXR0ZXIgPSBhc3luYyAoZmlsZSkgPT4ge1xuICAgICAgY29uc3QgYW5hbHlzaXMgPSBhd2FpdCBwZW5kaW5nQW5hbHlzaXM7XG5cbiAgICAgIGlmICgnZXJyb3JNZXNzYWdlJyBpbiBhbmFseXNpcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYW5hbHlzaXMuZXJyb3JNZXNzYWdlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFuYWx5c2lzLmVtaXR0ZXIoZmlsZSk7XG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICBmaWxlRW1pdHRlcjogYW5hbHl6aW5nRmlsZUVtaXR0ZXIsXG4gICAgICBidWlsZGVyLFxuICAgICAgaW50ZXJuYWxGaWxlczogaWdub3JlRm9yRW1pdCxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVKaXRQcm9ncmFtKFxuICAgIGNvbXBpbGVyT3B0aW9uczogQ29tcGlsZXJPcHRpb25zLFxuICAgIHJvb3ROYW1lczogcmVhZG9ubHkgc3RyaW5nW10sXG4gICAgaG9zdDogQ29tcGlsZXJIb3N0LFxuICAgIGRpYWdub3N0aWNzUmVwb3J0ZXI6IERpYWdub3N0aWNzUmVwb3J0ZXIsXG4gICkge1xuICAgIGxldCBidWlsZGVyO1xuICAgIGlmICh0aGlzLndhdGNoTW9kZSkge1xuICAgICAgYnVpbGRlciA9IHRoaXMuYnVpbGRlciA9IHRzLmNyZWF0ZUVtaXRBbmRTZW1hbnRpY0RpYWdub3N0aWNzQnVpbGRlclByb2dyYW0oXG4gICAgICAgIHJvb3ROYW1lcyxcbiAgICAgICAgY29tcGlsZXJPcHRpb25zLFxuICAgICAgICBob3N0LFxuICAgICAgICB0aGlzLmJ1aWxkZXIsXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBXaGVuIG5vdCBpbiB3YXRjaCBtb2RlLCB0aGUgc3RhcnR1cCBjb3N0IG9mIHRoZSBpbmNyZW1lbnRhbCBhbmFseXNpcyBjYW4gYmUgYXZvaWRlZCBieVxuICAgICAgLy8gdXNpbmcgYW4gYWJzdHJhY3QgYnVpbGRlciB0aGF0IG9ubHkgd3JhcHMgYSBUeXBlU2NyaXB0IHByb2dyYW0uXG4gICAgICBidWlsZGVyID0gdHMuY3JlYXRlQWJzdHJhY3RCdWlsZGVyKHJvb3ROYW1lcywgY29tcGlsZXJPcHRpb25zLCBob3N0KTtcbiAgICB9XG5cbiAgICBjb25zdCBkaWFnbm9zdGljcyA9IFtcbiAgICAgIC4uLmJ1aWxkZXIuZ2V0T3B0aW9uc0RpYWdub3N0aWNzKCksXG4gICAgICAuLi5idWlsZGVyLmdldEdsb2JhbERpYWdub3N0aWNzKCksXG4gICAgICAuLi5idWlsZGVyLmdldFN5bnRhY3RpY0RpYWdub3N0aWNzKCksXG4gICAgICAvLyBHYXRoZXIgaW5jcmVtZW50YWwgc2VtYW50aWMgZGlhZ25vc3RpY3NcbiAgICAgIC4uLmJ1aWxkZXIuZ2V0U2VtYW50aWNEaWFnbm9zdGljcygpLFxuICAgIF07XG4gICAgZGlhZ25vc3RpY3NSZXBvcnRlcihkaWFnbm9zdGljcyk7XG5cbiAgICBjb25zdCB0cmFuc2Zvcm1lcnMgPSBjcmVhdGVKaXRUcmFuc2Zvcm1lcnMoYnVpbGRlciwgdGhpcy5jb21waWxlckNsaSwgdGhpcy5wbHVnaW5PcHRpb25zKTtcblxuICAgIHJldHVybiB7XG4gICAgICBmaWxlRW1pdHRlcjogdGhpcy5jcmVhdGVGaWxlRW1pdHRlcihidWlsZGVyLCB0cmFuc2Zvcm1lcnMsICgpID0+IFtdKSxcbiAgICAgIGJ1aWxkZXIsXG4gICAgICBpbnRlcm5hbEZpbGVzOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRmlsZUVtaXR0ZXIoXG4gICAgcHJvZ3JhbTogdHMuQnVpbGRlclByb2dyYW0sXG4gICAgdHJhbnNmb3JtZXJzOiB0cy5DdXN0b21UcmFuc2Zvcm1lcnMgPSB7fSxcbiAgICBnZXRFeHRyYURlcGVuZGVuY2llczogKHNvdXJjZUZpbGU6IHRzLlNvdXJjZUZpbGUpID0+IEl0ZXJhYmxlPHN0cmluZz4sXG4gICAgb25BZnRlckVtaXQ/OiAoc291cmNlRmlsZTogdHMuU291cmNlRmlsZSkgPT4gdm9pZCxcbiAgKTogRmlsZUVtaXR0ZXIge1xuICAgIHJldHVybiBhc3luYyAoZmlsZTogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBmaWxlUGF0aCA9IG5vcm1hbGl6ZVBhdGgoZmlsZSk7XG4gICAgICBpZiAodGhpcy5yZXF1aXJlZEZpbGVzVG9FbWl0Q2FjaGUuaGFzKGZpbGVQYXRoKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXF1aXJlZEZpbGVzVG9FbWl0Q2FjaGUuZ2V0KGZpbGVQYXRoKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc291cmNlRmlsZSA9IHByb2dyYW0uZ2V0U291cmNlRmlsZShmaWxlUGF0aCk7XG4gICAgICBpZiAoIXNvdXJjZUZpbGUpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgbGV0IGNvbnRlbnQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIGxldCBtYXA6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIHByb2dyYW0uZW1pdChcbiAgICAgICAgc291cmNlRmlsZSxcbiAgICAgICAgKGZpbGVuYW1lLCBkYXRhKSA9PiB7XG4gICAgICAgICAgaWYgKGZpbGVuYW1lLmVuZHNXaXRoKCcubWFwJykpIHtcbiAgICAgICAgICAgIG1hcCA9IGRhdGE7XG4gICAgICAgICAgfSBlbHNlIGlmIChmaWxlbmFtZS5lbmRzV2l0aCgnLmpzJykpIHtcbiAgICAgICAgICAgIGNvbnRlbnQgPSBkYXRhO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHRyYW5zZm9ybWVycyxcbiAgICAgICk7XG5cbiAgICAgIG9uQWZ0ZXJFbWl0Py4oc291cmNlRmlsZSk7XG5cbiAgICAgIC8vIENhcHR1cmUgZW1pdCBoaXN0b3J5IGluZm8gZm9yIEFuZ3VsYXIgcmVidWlsZCBhbmFseXNpc1xuICAgICAgY29uc3QgaGFzaCA9IGNvbnRlbnQgPyAoYXdhaXQgdGhpcy5hZGRGaWxlRW1pdEhpc3RvcnkoZmlsZVBhdGgsIGNvbnRlbnQpKS5oYXNoIDogdW5kZWZpbmVkO1xuXG4gICAgICBjb25zdCBkZXBlbmRlbmNpZXMgPSBbXG4gICAgICAgIC4uLih0aGlzLmZpbGVEZXBlbmRlbmNpZXMuZ2V0KGZpbGVQYXRoKSB8fCBbXSksXG4gICAgICAgIC4uLmdldEV4dHJhRGVwZW5kZW5jaWVzKHNvdXJjZUZpbGUpLFxuICAgICAgXS5tYXAoZXh0ZXJuYWxpemVQYXRoKTtcblxuICAgICAgcmV0dXJuIHsgY29udGVudCwgbWFwLCBkZXBlbmRlbmNpZXMsIGhhc2ggfTtcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBpbml0aWFsaXplQ29tcGlsZXJDbGkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuY29tcGlsZXJDbGlNb2R1bGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBUaGlzIHVzZXMgYSBkeW5hbWljIGltcG9ydCB0byBsb2FkIGBAYW5ndWxhci9jb21waWxlci1jbGlgIHdoaWNoIG1heSBiZSBFU00uXG4gICAgLy8gQ29tbW9uSlMgY29kZSBjYW4gbG9hZCBFU00gY29kZSB2aWEgYSBkeW5hbWljIGltcG9ydC4gVW5mb3J0dW5hdGVseSwgVHlwZVNjcmlwdFxuICAgIC8vIHdpbGwgY3VycmVudGx5LCB1bmNvbmRpdGlvbmFsbHkgZG93bmxldmVsIGR5bmFtaWMgaW1wb3J0IGludG8gYSByZXF1aXJlIGNhbGwuXG4gICAgLy8gcmVxdWlyZSBjYWxscyBjYW5ub3QgbG9hZCBFU00gY29kZSBhbmQgd2lsbCByZXN1bHQgaW4gYSBydW50aW1lIGVycm9yLiBUbyB3b3JrYXJvdW5kXG4gICAgLy8gdGhpcywgYSBGdW5jdGlvbiBjb25zdHJ1Y3RvciBpcyB1c2VkIHRvIHByZXZlbnQgVHlwZVNjcmlwdCBmcm9tIGNoYW5naW5nIHRoZSBkeW5hbWljIGltcG9ydC5cbiAgICAvLyBPbmNlIFR5cGVTY3JpcHQgcHJvdmlkZXMgc3VwcG9ydCBmb3Iga2VlcGluZyB0aGUgZHluYW1pYyBpbXBvcnQgdGhpcyB3b3JrYXJvdW5kIGNhblxuICAgIC8vIGJlIGRyb3BwZWQuXG4gICAgdGhpcy5jb21waWxlckNsaU1vZHVsZSA9IGF3YWl0IG5ldyBGdW5jdGlvbihgcmV0dXJuIGltcG9ydCgnQGFuZ3VsYXIvY29tcGlsZXItY2xpJyk7YCkoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYWRkRmlsZUVtaXRIaXN0b3J5KFxuICAgIGZpbGVQYXRoOiBzdHJpbmcsXG4gICAgY29udGVudDogc3RyaW5nLFxuICApOiBQcm9taXNlPEZpbGVFbWl0SGlzdG9yeUl0ZW0+IHtcbiAgICBhc3NlcnQub2sodGhpcy53ZWJwYWNrQ3JlYXRlSGFzaCwgJ0ZpbGUgZW1pdHRlciBpcyB1c2VkIHByaW9yIHRvIFdlYnBhY2sgY29tcGlsYXRpb24nKTtcblxuICAgIGNvbnN0IGhpc3RvcnlEYXRhOiBGaWxlRW1pdEhpc3RvcnlJdGVtID0ge1xuICAgICAgbGVuZ3RoOiBjb250ZW50Lmxlbmd0aCxcbiAgICAgIGhhc2g6IHRoaXMud2VicGFja0NyZWF0ZUhhc2goJ3h4aGFzaDY0JykudXBkYXRlKGNvbnRlbnQpLmRpZ2VzdCgpIGFzIFVpbnQ4QXJyYXksXG4gICAgfTtcblxuICAgIGlmICh0aGlzLndlYnBhY2tDYWNoZSkge1xuICAgICAgY29uc3QgaGlzdG9yeSA9IGF3YWl0IHRoaXMuZ2V0RmlsZUVtaXRIaXN0b3J5KGZpbGVQYXRoKTtcbiAgICAgIGlmICghaGlzdG9yeSB8fCBCdWZmZXIuY29tcGFyZShoaXN0b3J5Lmhhc2gsIGhpc3RvcnlEYXRhLmhhc2gpICE9PSAwKSB7XG4gICAgICAgIC8vIEhhc2ggZG9lc24ndCBtYXRjaCBvciBpdGVtIGRvZXNuJ3QgZXhpc3QuXG4gICAgICAgIGF3YWl0IHRoaXMud2VicGFja0NhY2hlLnN0b3JlUHJvbWlzZShmaWxlUGF0aCwgbnVsbCwgaGlzdG9yeURhdGEpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy53YXRjaE1vZGUpIHtcbiAgICAgIC8vIFRoZSBpbiBtZW1vcnkgZmlsZSBlbWl0IGhpc3RvcnkgaXMgb25seSByZXF1aXJlZCBkdXJpbmcgd2F0Y2ggbW9kZS5cbiAgICAgIHRoaXMuZmlsZUVtaXRIaXN0b3J5LnNldChmaWxlUGF0aCwgaGlzdG9yeURhdGEpO1xuICAgIH1cblxuICAgIHJldHVybiBoaXN0b3J5RGF0YTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0RmlsZUVtaXRIaXN0b3J5KGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPEZpbGVFbWl0SGlzdG9yeUl0ZW0gfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy53ZWJwYWNrQ2FjaGVcbiAgICAgID8gdGhpcy53ZWJwYWNrQ2FjaGUuZ2V0UHJvbWlzZTxGaWxlRW1pdEhpc3RvcnlJdGVtIHwgdW5kZWZpbmVkPihmaWxlUGF0aCwgbnVsbClcbiAgICAgIDogdGhpcy5maWxlRW1pdEhpc3RvcnkuZ2V0KGZpbGVQYXRoKTtcbiAgfVxufVxuIl19
package/src/ivy/symbol.js CHANGED
@@ -6,51 +6,34 @@
6
6
  * Use of this source code is governed by an MIT-style license that can be
7
7
  * found in the LICENSE file at https://angular.io/license
8
8
  */
9
- var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
10
- if (kind === "m") throw new TypeError("Private method is not writable");
11
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
12
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
13
- return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
14
- };
15
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
16
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
17
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
18
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
19
- };
20
- var _FileEmitterRegistration_fileEmitter, _FileEmitterCollection_registrations;
21
9
  Object.defineProperty(exports, "__esModule", { value: true });
22
10
  exports.FileEmitterCollection = exports.FileEmitterRegistration = exports.AngularPluginSymbol = void 0;
23
11
  exports.AngularPluginSymbol = Symbol.for('@ngtools/webpack[angular-compiler]');
24
12
  class FileEmitterRegistration {
25
- constructor() {
26
- _FileEmitterRegistration_fileEmitter.set(this, void 0);
27
- }
13
+ #fileEmitter;
28
14
  update(emitter) {
29
- __classPrivateFieldSet(this, _FileEmitterRegistration_fileEmitter, emitter, "f");
15
+ this.#fileEmitter = emitter;
30
16
  }
31
17
  emit(file) {
32
- if (!__classPrivateFieldGet(this, _FileEmitterRegistration_fileEmitter, "f")) {
18
+ if (!this.#fileEmitter) {
33
19
  throw new Error('Emit attempted before Angular Webpack plugin initialization.');
34
20
  }
35
- return __classPrivateFieldGet(this, _FileEmitterRegistration_fileEmitter, "f").call(this, file);
21
+ return this.#fileEmitter(file);
36
22
  }
37
23
  }
38
24
  exports.FileEmitterRegistration = FileEmitterRegistration;
39
- _FileEmitterRegistration_fileEmitter = new WeakMap();
40
25
  class FileEmitterCollection {
41
- constructor() {
42
- _FileEmitterCollection_registrations.set(this, []);
43
- }
26
+ #registrations = [];
44
27
  register() {
45
28
  const registration = new FileEmitterRegistration();
46
- __classPrivateFieldGet(this, _FileEmitterCollection_registrations, "f").push(registration);
29
+ this.#registrations.push(registration);
47
30
  return registration;
48
31
  }
49
32
  async emit(file) {
50
- if (__classPrivateFieldGet(this, _FileEmitterCollection_registrations, "f").length === 1) {
51
- return __classPrivateFieldGet(this, _FileEmitterCollection_registrations, "f")[0].emit(file);
33
+ if (this.#registrations.length === 1) {
34
+ return this.#registrations[0].emit(file);
52
35
  }
53
- for (const registration of __classPrivateFieldGet(this, _FileEmitterCollection_registrations, "f")) {
36
+ for (const registration of this.#registrations) {
54
37
  const result = await registration.emit(file);
55
38
  if (result) {
56
39
  return result;
@@ -59,5 +42,4 @@ class FileEmitterCollection {
59
42
  }
60
43
  }
61
44
  exports.FileEmitterCollection = FileEmitterCollection;
62
- _FileEmitterCollection_registrations = new WeakMap();
63
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ltYm9sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmd0b29scy93ZWJwYWNrL3NyYy9pdnkvc3ltYm9sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7OztBQUVVLFFBQUEsbUJBQW1CLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO0FBV3BGLE1BQWEsdUJBQXVCO0lBQXBDO1FBQ0UsdURBQTJCO0lBYTdCLENBQUM7SUFYQyxNQUFNLENBQUMsT0FBb0I7UUFDekIsdUJBQUEsSUFBSSx3Q0FBZ0IsT0FBTyxNQUFBLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQUksQ0FBQyxJQUFZO1FBQ2YsSUFBSSxDQUFDLHVCQUFBLElBQUksNENBQWEsRUFBRTtZQUN0QixNQUFNLElBQUksS0FBSyxDQUFDLDhEQUE4RCxDQUFDLENBQUM7U0FDakY7UUFFRCxPQUFPLHVCQUFBLElBQUksNENBQWEsTUFBakIsSUFBSSxFQUFjLElBQUksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7Q0FDRjtBQWRELDBEQWNDOztBQUVELE1BQWEscUJBQXFCO0lBQWxDO1FBQ0UsK0NBQTRDLEVBQUUsRUFBQztJQXFCakQsQ0FBQztJQW5CQyxRQUFRO1FBQ04sTUFBTSxZQUFZLEdBQUcsSUFBSSx1QkFBdUIsRUFBRSxDQUFDO1FBQ25ELHVCQUFBLElBQUksNENBQWUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFdkMsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBWTtRQUNyQixJQUFJLHVCQUFBLElBQUksNENBQWUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3BDLE9BQU8sdUJBQUEsSUFBSSw0Q0FBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMxQztRQUVELEtBQUssTUFBTSxZQUFZLElBQUksdUJBQUEsSUFBSSw0Q0FBZSxFQUFFO1lBQzlDLE1BQU0sTUFBTSxHQUFHLE1BQU0sWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3QyxJQUFJLE1BQU0sRUFBRTtnQkFDVixPQUFPLE1BQU0sQ0FBQzthQUNmO1NBQ0Y7SUFDSCxDQUFDO0NBQ0Y7QUF0QkQsc0RBc0JDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmV4cG9ydCBjb25zdCBBbmd1bGFyUGx1Z2luU3ltYm9sID0gU3ltYm9sLmZvcignQG5ndG9vbHMvd2VicGFja1thbmd1bGFyLWNvbXBpbGVyXScpO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVtaXRGaWxlUmVzdWx0IHtcbiAgY29udGVudD86IHN0cmluZztcbiAgbWFwPzogc3RyaW5nO1xuICBkZXBlbmRlbmNpZXM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICBoYXNoPzogVWludDhBcnJheTtcbn1cblxuZXhwb3J0IHR5cGUgRmlsZUVtaXR0ZXIgPSAoZmlsZTogc3RyaW5nKSA9PiBQcm9taXNlPEVtaXRGaWxlUmVzdWx0IHwgdW5kZWZpbmVkPjtcblxuZXhwb3J0IGNsYXNzIEZpbGVFbWl0dGVyUmVnaXN0cmF0aW9uIHtcbiAgI2ZpbGVFbWl0dGVyPzogRmlsZUVtaXR0ZXI7XG5cbiAgdXBkYXRlKGVtaXR0ZXI6IEZpbGVFbWl0dGVyKTogdm9pZCB7XG4gICAgdGhpcy4jZmlsZUVtaXR0ZXIgPSBlbWl0dGVyO1xuICB9XG5cbiAgZW1pdChmaWxlOiBzdHJpbmcpOiBQcm9taXNlPEVtaXRGaWxlUmVzdWx0IHwgdW5kZWZpbmVkPiB7XG4gICAgaWYgKCF0aGlzLiNmaWxlRW1pdHRlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbWl0IGF0dGVtcHRlZCBiZWZvcmUgQW5ndWxhciBXZWJwYWNrIHBsdWdpbiBpbml0aWFsaXphdGlvbi4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy4jZmlsZUVtaXR0ZXIoZmlsZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEZpbGVFbWl0dGVyQ29sbGVjdGlvbiB7XG4gICNyZWdpc3RyYXRpb25zOiBGaWxlRW1pdHRlclJlZ2lzdHJhdGlvbltdID0gW107XG5cbiAgcmVnaXN0ZXIoKTogRmlsZUVtaXR0ZXJSZWdpc3RyYXRpb24ge1xuICAgIGNvbnN0IHJlZ2lzdHJhdGlvbiA9IG5ldyBGaWxlRW1pdHRlclJlZ2lzdHJhdGlvbigpO1xuICAgIHRoaXMuI3JlZ2lzdHJhdGlvbnMucHVzaChyZWdpc3RyYXRpb24pO1xuXG4gICAgcmV0dXJuIHJlZ2lzdHJhdGlvbjtcbiAgfVxuXG4gIGFzeW5jIGVtaXQoZmlsZTogc3RyaW5nKTogUHJvbWlzZTxFbWl0RmlsZVJlc3VsdCB8IHVuZGVmaW5lZD4ge1xuICAgIGlmICh0aGlzLiNyZWdpc3RyYXRpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIHRoaXMuI3JlZ2lzdHJhdGlvbnNbMF0uZW1pdChmaWxlKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHJlZ2lzdHJhdGlvbiBvZiB0aGlzLiNyZWdpc3RyYXRpb25zKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWdpc3RyYXRpb24uZW1pdChmaWxlKTtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ltYm9sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmd0b29scy93ZWJwYWNrL3NyYy9pdnkvc3ltYm9sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7O0dBTUc7OztBQUVVLFFBQUEsbUJBQW1CLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO0FBV3BGLE1BQWEsdUJBQXVCO0lBQ2xDLFlBQVksQ0FBZTtJQUUzQixNQUFNLENBQUMsT0FBb0I7UUFDekIsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQUksQ0FBQyxJQUFZO1FBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQyw4REFBOEQsQ0FBQyxDQUFDO1NBQ2pGO1FBRUQsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7Q0FDRjtBQWRELDBEQWNDO0FBRUQsTUFBYSxxQkFBcUI7SUFDaEMsY0FBYyxHQUE4QixFQUFFLENBQUM7SUFFL0MsUUFBUTtRQUNOLE1BQU0sWUFBWSxHQUFHLElBQUksdUJBQXVCLEVBQUUsQ0FBQztRQUNuRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUV2QyxPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFZO1FBQ3JCLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3BDLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDMUM7UUFFRCxLQUFLLE1BQU0sWUFBWSxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDOUMsTUFBTSxNQUFNLEdBQUcsTUFBTSxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdDLElBQUksTUFBTSxFQUFFO2dCQUNWLE9BQU8sTUFBTSxDQUFDO2FBQ2Y7U0FDRjtJQUNILENBQUM7Q0FDRjtBQXRCRCxzREFzQkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuZXhwb3J0IGNvbnN0IEFuZ3VsYXJQbHVnaW5TeW1ib2wgPSBTeW1ib2wuZm9yKCdAbmd0b29scy93ZWJwYWNrW2FuZ3VsYXItY29tcGlsZXJdJyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW1pdEZpbGVSZXN1bHQge1xuICBjb250ZW50Pzogc3RyaW5nO1xuICBtYXA/OiBzdHJpbmc7XG4gIGRlcGVuZGVuY2llczogcmVhZG9ubHkgc3RyaW5nW107XG4gIGhhc2g/OiBVaW50OEFycmF5O1xufVxuXG5leHBvcnQgdHlwZSBGaWxlRW1pdHRlciA9IChmaWxlOiBzdHJpbmcpID0+IFByb21pc2U8RW1pdEZpbGVSZXN1bHQgfCB1bmRlZmluZWQ+O1xuXG5leHBvcnQgY2xhc3MgRmlsZUVtaXR0ZXJSZWdpc3RyYXRpb24ge1xuICAjZmlsZUVtaXR0ZXI/OiBGaWxlRW1pdHRlcjtcblxuICB1cGRhdGUoZW1pdHRlcjogRmlsZUVtaXR0ZXIpOiB2b2lkIHtcbiAgICB0aGlzLiNmaWxlRW1pdHRlciA9IGVtaXR0ZXI7XG4gIH1cblxuICBlbWl0KGZpbGU6IHN0cmluZyk6IFByb21pc2U8RW1pdEZpbGVSZXN1bHQgfCB1bmRlZmluZWQ+IHtcbiAgICBpZiAoIXRoaXMuI2ZpbGVFbWl0dGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VtaXQgYXR0ZW1wdGVkIGJlZm9yZSBBbmd1bGFyIFdlYnBhY2sgcGx1Z2luIGluaXRpYWxpemF0aW9uLicpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLiNmaWxlRW1pdHRlcihmaWxlKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRmlsZUVtaXR0ZXJDb2xsZWN0aW9uIHtcbiAgI3JlZ2lzdHJhdGlvbnM6IEZpbGVFbWl0dGVyUmVnaXN0cmF0aW9uW10gPSBbXTtcblxuICByZWdpc3RlcigpOiBGaWxlRW1pdHRlclJlZ2lzdHJhdGlvbiB7XG4gICAgY29uc3QgcmVnaXN0cmF0aW9uID0gbmV3IEZpbGVFbWl0dGVyUmVnaXN0cmF0aW9uKCk7XG4gICAgdGhpcy4jcmVnaXN0cmF0aW9ucy5wdXNoKHJlZ2lzdHJhdGlvbik7XG5cbiAgICByZXR1cm4gcmVnaXN0cmF0aW9uO1xuICB9XG5cbiAgYXN5bmMgZW1pdChmaWxlOiBzdHJpbmcpOiBQcm9taXNlPEVtaXRGaWxlUmVzdWx0IHwgdW5kZWZpbmVkPiB7XG4gICAgaWYgKHRoaXMuI3JlZ2lzdHJhdGlvbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICByZXR1cm4gdGhpcy4jcmVnaXN0cmF0aW9uc1swXS5lbWl0KGZpbGUpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgcmVnaXN0cmF0aW9uIG9mIHRoaXMuI3JlZ2lzdHJhdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlZ2lzdHJhdGlvbi5lbWl0KGZpbGUpO1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
@@ -9,7 +9,7 @@ import * as ts from 'typescript';
9
9
  export declare function createAotTransformers(builder: ts.BuilderProgram, options: {
10
10
  emitClassMetadata?: boolean;
11
11
  emitNgModuleScope?: boolean;
12
- }): ts.CustomTransformers;
12
+ }, imageDomains: Set<string>): ts.CustomTransformers;
13
13
  export declare function createJitTransformers(builder: ts.BuilderProgram, compilerCli: typeof import('@angular/compiler-cli'), options: {
14
14
  inlineStyleFileExtension?: string;
15
15
  }): ts.CustomTransformers;
@@ -33,12 +33,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
33
33
  exports.replaceBootstrap = exports.mergeTransformers = exports.createJitTransformers = exports.createAotTransformers = void 0;
34
34
  const ts = __importStar(require("typescript"));
35
35
  const elide_imports_1 = require("../transformers/elide_imports");
36
+ const find_image_domains_1 = require("../transformers/find_image_domains");
36
37
  const remove_ivy_jit_support_calls_1 = require("../transformers/remove-ivy-jit-support-calls");
37
38
  const replace_resources_1 = require("../transformers/replace_resources");
38
- function createAotTransformers(builder, options) {
39
+ function createAotTransformers(builder, options, imageDomains) {
39
40
  const getTypeChecker = () => builder.getProgram().getTypeChecker();
40
41
  const transformers = {
41
- before: [replaceBootstrap(getTypeChecker)],
42
+ before: [(0, find_image_domains_1.findImageDomains)(imageDomains), replaceBootstrap(getTypeChecker)],
42
43
  after: [],
43
44
  };
44
45
  const removeClassMetadata = !options.emitClassMetadata;
@@ -123,4 +124,4 @@ function replaceBootstrap(getTypeChecker) {
123
124
  };
124
125
  }
125
126
  exports.replaceBootstrap = replaceBootstrap;
126
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZ3Rvb2xzL3dlYnBhY2svc3JjL2l2eS90cmFuc2Zvcm1hdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVILCtDQUFpQztBQUNqQyxpRUFBNkQ7QUFDN0QsK0ZBQXdGO0FBQ3hGLHlFQUFxRTtBQUVyRSxTQUFnQixxQkFBcUIsQ0FDbkMsT0FBMEIsRUFDMUIsT0FBcUU7SUFFckUsTUFBTSxjQUFjLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ25FLE1BQU0sWUFBWSxHQUEwQjtRQUMxQyxNQUFNLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMxQyxLQUFLLEVBQUUsRUFBRTtLQUNWLENBQUM7SUFFRixNQUFNLG1CQUFtQixHQUFHLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDO0lBQ3ZELE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUM7SUFDdkQsSUFBSSxtQkFBbUIsSUFBSSxtQkFBbUIsRUFBRTtRQUM5QyxvRUFBb0U7UUFDcEUsWUFBWSxDQUFDLE1BQU8sQ0FBQyxJQUFJLENBQ3ZCLElBQUEsdURBQXdCLEVBQUMsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxDQUFDLENBQ25GLENBQUM7S0FDSDtJQUVELE9BQU8sWUFBWSxDQUFDO0FBQ3RCLENBQUM7QUFwQkQsc0RBb0JDO0FBRUQsU0FBZ0IscUJBQXFCLENBQ25DLE9BQTBCLEVBQzFCLFdBQW1ELEVBQ25ELE9BRUM7SUFFRCxNQUFNLGNBQWMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsY0FBYyxFQUFFLENB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QUM7QUEzRUQsNENBMkVDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuaW1wb3J0IHsgZWxpZGVJbXBvcnRzIH0gZnJvbSAnLi4vdHJhbnNmb3JtZXJzL2VsaWRlX2ltcG9ydHMnO1xuaW1wb3J0IHsgcmVtb3ZlSXZ5Sml0U3VwcG9ydENhbGxzIH0gZnJvbSAnLi4vdHJhbnNmb3JtZXJzL3JlbW92ZS1pdnktaml0LXN1cHBvcnQtY2FsbHMnO1xuaW1wb3J0IHsgcmVwbGFjZVJlc291cmNlcyB9IGZyb20gJy4uL3RyYW5zZm9ybWVycy9yZXBsYWNlX3Jlc291cmNlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBb3RUcmFuc2Zvcm1lcnMoXG4gIGJ1aWxkZXI6IHRzLkJ1aWxkZXJQcm9ncmFtLFxuICBvcHRpb25zOiB7IGVtaXRDbGFzc01ldGFkYXRhPzogYm9vbGVhbjsgZW1pdE5nTW9kdWxlU2NvcGU/OiBib29sZWFuIH0sXG4pOiB0cy5DdXN0b21UcmFuc2Zvcm1lcnMge1xuICBjb25zdCBnZXRUeXBlQ2hlY2tlciA9ICgpID0+IGJ1aWxkZXIuZ2V0UHJvZ3JhbSgpLmdldFR5cGVDaGVja2VyKCk7XG4gIGNvbnN0IHRyYW5zZm9ybWVyczogdHMuQ3VzdG9tVHJhbnNmb3JtZXJzID0ge1xuICAgIGJlZm9yZTogW3JlcGxhY2VCb290c3RyYXAoZ2V0VHlwZUNoZWNrZXIpXSxcbiAgICBhZnRlcjogW10sXG4gIH07XG5cbiAgY29uc3QgcmVtb3ZlQ2xhc3NNZXRhZGF0YSA9ICFvcHRpb25zLmVtaXRDbGFzc01ldGFkYXRhO1xuICBjb25zdCByZW1vdmVOZ01vZHVsZVNjb3BlID0gIW9wdGlvbnMuZW1pdE5nTW9kdWxlU2NvcGU7XG4gIGlmIChyZW1vdmVDbGFzc01ldGFkYXRhIHx8IHJlbW92ZU5nTW9kdWxlU2NvcGUpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgIHRyYW5zZm9ybWVycy5iZWZvcmUhLnB1c2goXG4gICAgICByZW1vdmVJdnlKaXRTdXBwb3J0Q2FsbHMocmVtb3ZlQ2xhc3NNZXRhZGF0YSwgcmVtb3ZlTmdNb2R1bGVTY29wZSwgZ2V0VHlwZUNoZWNrZXIpLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gdHJhbnNmb3JtZXJzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSml0VHJhbnNmb3JtZXJzKFxuICBidWlsZGVyOiB0cy5CdWlsZGVyUHJvZ3JhbSxcbiAgY29tcGlsZXJDbGk6IHR5cGVvZiBpbXBvcnQoJ0Bhbmd1bGFyL2NvbXBpbGVyLWNsaScpLFxuICBvcHRpb25zOiB7XG4gICAgaW5saW5lU3R5bGVGaWxlRXh0ZW5zaW9uPzogc3RyaW5nO1xuICB9LFxuKTogdHMuQ3VzdG9tVHJhbnNmb3JtZXJzIHtcbiAgY29uc3QgZ2V0VHlwZUNoZWNrZXIgPSAoKSA9PiBidWlsZGVyLmdldFByb2dyYW0oKS5nZXRUeXBlQ2hlY2tlcigpO1xuXG4gIHJldHVybiB7XG4gICAgYmVmb3JlOiBbXG4gICAgICByZXBsYWNlUmVzb3VyY2VzKCgpID0+IHRydWUsIGdldFR5cGVDaGVja2VyLCBvcHRpb25zLmlubGluZVN0eWxlRmlsZUV4dGVuc2lvbiksXG4gICAgICBjb21waWxlckNsaS5jb25zdHJ1Y3RvclBhcmFtZXRlcnNEb3dubGV2ZWxUcmFuc2Zvcm0oYnVpbGRlci5nZXRQcm9ncmFtKCkpLFxuICAgIF0sXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZVRyYW5zZm9ybWVycyhcbiAgZmlyc3Q6IHRzLkN1c3RvbVRyYW5zZm9ybWVycyxcbiAgc2Vjb25kOiB0cy5DdXN0b21UcmFuc2Zvcm1lcnMsXG4pOiB0cy5DdXN0b21UcmFuc2Zvcm1lcnMge1xuICBjb25zdCByZXN1bHQ6IHRzLkN1c3RvbVRyYW5zZm9ybWVycyA9IHt9O1xuXG4gIGlmIChmaXJzdC5iZWZvcmUgfHwgc2Vjb25kLmJlZm9yZSkge1xuICAgIHJlc3VsdC5iZWZvcmUgPSBbLi4uKGZpcnN0LmJlZm9yZSB8fCBbXSksIC4uLihzZWNvbmQuYmVmb3JlIHx8IFtdKV07XG4gIH1cblxuICBpZiAoZmlyc3QuYWZ0ZXIgfHwgc2Vjb25kLmFmdGVyKSB7XG4gICAgcmVzdWx0LmFmdGVyID0gWy4uLihmaXJzdC5hZnRlciB8fCBbXSksIC4uLihzZWNvbmQuYWZ0ZXIgfHwgW10pXTtcbiAgfVxuXG4gIGlmIChmaXJzdC5hZnRlckRlY2xhcmF0aW9ucyB8fCBzZWNvbmQuYWZ0ZXJEZWNsYXJhdGlvbnMpIHtcbiAgICByZXN1bHQuYWZ0ZXJEZWNsYXJhdGlvbnMgPSBbXG4gICAgICAuLi4oZmlyc3QuYWZ0ZXJEZWNsYXJhdGlvbnMgfHwgW10pLFxuICAgICAgLi4uKHNlY29uZC5hZnRlckRlY2xhcmF0aW9ucyB8fCBbXSksXG4gICAgXTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIEFuZ3VsYXIgcGxhdGZvcm0gdGhhdCBzaG91bGQgYmUgcmVwbGFjZWQgd2l0aGluXG4gKiBib290c3RyYXAgY2FsbCBleHByZXNzaW9ucyB0byBzdXBwb3J0IEFPVC5cbiAqL1xuY29uc3QgUExBVEZPUk1fQlJPV1NFUl9EWU5BTUlDX05BTUUgPSAncGxhdGZvcm1Ccm93c2VyRHluYW1pYyc7XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlQm9vdHN0cmFwKFxuICBnZXRUeXBlQ2hlY2tlcjogKCkgPT4gdHMuVHlwZUNoZWNrZXIsXG4pOiB0cy5UcmFuc2Zvcm1lckZhY3Rvcnk8dHMuU291cmNlRmlsZT4ge1xuICByZXR1cm4gKGNvbnRleHQ6IHRzLlRyYW5zZm9ybWF0aW9uQ29udGV4dCkgPT4ge1xuICAgIGxldCBib290c3RyYXBJbXBvcnQ6IHRzLkltcG9ydERlY2xhcmF0aW9uIHwgdW5kZWZpbmVkO1xuICAgIGxldCBib290c3RyYXBOYW1lc3BhY2U6IHRzLklkZW50aWZpZXIgfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgcmVwbGFjZWROb2RlczogdHMuTm9kZVtdID0gW107XG4gICAgY29uc3Qgbm9kZUZhY3RvcnkgPSBjb250ZXh0LmZhY3Rvcnk7XG5cbiAgICBjb25zdCB2aXNpdE5vZGU6IHRzLlZpc2l0b3IgPSAobm9kZTogdHMuTm9kZSkgPT4ge1xuICAgICAgaWYgKHRzLmlzQ2FsbEV4cHJlc3Npb24obm9kZSkgJiYgdHMuaXNJZGVudGlmaWVyKG5vZGUuZXhwcmVzc2lvbikpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gbm9kZS5leHByZXNzaW9uO1xuICAgICAgICBpZiAodGFyZ2V0LnRleHQgPT09IFBMQVRGT1JNX0JST1dTRVJfRFlOQU1JQ19OQU1FKSB7XG4gICAgICAgICAgaWYgKCFib290c3RyYXBOYW1lc3BhY2UpIHtcbiAgICAgICAgICAgIGJvb3RzdHJhcE5hbWVzcGFjZSA9IG5vZGVGYWN0b3J5LmNyZWF0ZVVuaXF1ZU5hbWUoJ19fTmdDbGlfYm9vdHN0cmFwXycpO1xuICAgICAgICAgICAgYm9vdHN0cmFwSW1wb3J0ID0gbm9kZUZhY3RvcnkuY3JlYXRlSW1wb3J0RGVjbGFyYXRpb24oXG4gICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgbm9kZUZhY3RvcnkuY3JlYXRlSW1wb3J0Q2xhdXNlKFxuICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBub2RlRmFjdG9yeS5jcmVhdGVOYW1lc3BhY2VJbXBvcnQoYm9vdHN0cmFwTmFtZXNwYWNlKSxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgbm9kZUZhY3RvcnkuY3JlYXRlU3RyaW5nTGl0ZXJhbCgnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3NlcicpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVwbGFjZWROb2Rlcy5wdXNoKHRhcmdldCk7XG5cbiAgICAgICAgICByZXR1cm4gbm9kZUZhY3RvcnkudXBkYXRlQ2FsbEV4cHJlc3Npb24oXG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgbm9kZUZhY3RvcnkuY3JlYXRlUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKGJvb3RzdHJhcE5hbWVzcGFjZSwgJ3BsYXRmb3JtQnJvd3NlcicpLFxuICAgICAgICAgICAgbm9kZS50eXBlQXJndW1lbnRzLFxuICAgICAgICAgICAgbm9kZS5hcmd1bWVudHMsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHMudmlzaXRFYWNoQ2hpbGQobm9kZSwgdmlzaXROb2RlLCBjb250ZXh0KTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIChzb3VyY2VGaWxlOiB0cy5Tb3VyY2VGaWxlKSA9PiB7XG4gICAgICBpZiAoIXNvdXJjZUZpbGUudGV4dC5pbmNsdWRlcyhQTEFURk9STV9CUk9XU0VSX0RZTkFNSUNfTkFNRSkpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZUZpbGU7XG4gICAgICB9XG5cbiAgICAgIGxldCB1cGRhdGVkU291cmNlRmlsZSA9IHRzLnZpc2l0RWFjaENoaWxkKHNvdXJjZUZpbGUsIHZpc2l0Tm9kZSwgY29udGV4dCk7XG5cbiAgICAgIGlmIChib290c3RyYXBJbXBvcnQpIHtcbiAgICAgICAgLy8gUmVtb3ZlIGFueSB1bnVzZWQgcGxhdGZvcm0gYnJvd3NlciBkeW5hbWljIGltcG9ydHNcbiAgICAgICAgY29uc3QgcmVtb3ZhbHMgPSBlbGlkZUltcG9ydHMoXG4gICAgICAgICAgdXBkYXRlZFNvdXJjZUZpbGUsXG4gICAgICAgICAgcmVwbGFjZWROb2RlcyxcbiAgICAgICAgICBnZXRUeXBlQ2hlY2tlcixcbiAgICAgICAgICBjb250ZXh0LmdldENvbXBpbGVyT3B0aW9ucygpLFxuICAgICAgICApO1xuICAgICAgICBpZiAocmVtb3ZhbHMuc2l6ZSA+IDApIHtcbiAgICAgICAgICB1cGRhdGVkU291cmNlRmlsZSA9IHRzLnZpc2l0RWFjaENoaWxkKFxuICAgICAgICAgICAgdXBkYXRlZFNvdXJjZUZpbGUsXG4gICAgICAgICAgICAobm9kZSkgPT4gKHJlbW92YWxzLmhhcyhub2RlKSA/IHVuZGVmaW5lZCA6IG5vZGUpLFxuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQWRkIG5ldyBwbGF0Zm9ybSBicm93c2VyIGltcG9ydFxuICAgICAgICByZXR1cm4gbm9kZUZhY3RvcnkudXBkYXRlU291cmNlRmlsZShcbiAgICAgICAgICB1cGRhdGVkU291cmNlRmlsZSxcbiAgICAgICAgICB0cy5zZXRUZXh0UmFuZ2UoXG4gICAgICAgICAgICBub2RlRmFjdG9yeS5jcmVhdGVOb2RlQXJyYXkoW2Jvb3RzdHJhcEltcG9ydCwgLi4udXBkYXRlZFNvdXJjZUZpbGUuc3RhdGVtZW50c10pLFxuICAgICAgICAgICAgc291cmNlRmlsZS5zdGF0ZW1lbnRzLFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdXBkYXRlZFNvdXJjZUZpbGU7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcbn1cbiJdfQ==
127
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZ3Rvb2xzL3dlYnBhY2svc3JjL2l2eS90cmFuc2Zvcm1hdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVILCtDQUFpQztBQUNqQyxpRUFBNkQ7QUFDN0QsMkVBQXNFO0FBQ3RFLCtGQUF3RjtBQUN4Rix5RUFBcUU7QUFFckUsU0FBZ0IscUJBQXFCLENBQ25DLE9BQTBCLEVBQzFCLE9BQXFFLEVBQ3JFLFlBQXlCO0lBRXpCLE1BQU0sY0FBYyxHQUFHLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUNuRSxNQUFNLFlBQVksR0FBMEI7UUFDMUMsTUFBTSxFQUFFLENBQUMsSUFBQSxxQ0FBZ0IsRUFBQyxZQUFZLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMxRSxLQUFLLEVBQUUsRUFBRTtLQUNWLENBQUM7SUFFRixNQUFNLG1CQUFtQixHQUFHLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDO0lBQ3ZELE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUM7SUFDdkQsSUFBSSxtQkFBbUIsSUFBSSxtQkFBbUIsRUFBRTtRQUM5QyxvRUFBb0U7UUFDcEUsWUFBWSxDQUFDLE1BQU8sQ0FBQyxJQUFJLENBQ3ZCLElBQUEsdURBQXdCLEVBQUMsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxDQUFDLENBQ25GLENBQUM7S0FDSDtJQUVELE9BQU8sWUFBWSxDQUFDO0FBQ3RCLENBQUM7QUFyQkQsc0RBcUJDO0FBRUQsU0FBZ0IscUJBQXFCLENBQ25DLE9BQTBCLEVBQzFCLFdBQW1ELEVBQ25ELE9BRUM7SUFFRCxNQUFNLGNBQWMs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TyxpQkFBaUIsQ0FBQzthQUMxQjtRQUNILENBQUMsQ0FBQztJQUNKLENBQUMsQ0FBQztBQUNKLENBQUM7QUEzRUQsNENBMkVDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuaW1wb3J0IHsgZWxpZGVJbXBvcnRzIH0gZnJvbSAnLi4vdHJhbnNmb3JtZXJzL2VsaWRlX2ltcG9ydHMnO1xuaW1wb3J0IHsgZmluZEltYWdlRG9tYWlucyB9IGZyb20gJy4uL3RyYW5zZm9ybWVycy9maW5kX2ltYWdlX2RvbWFpbnMnO1xuaW1wb3J0IHsgcmVtb3ZlSXZ5Sml0U3VwcG9ydENhbGxzIH0gZnJvbSAnLi4vdHJhbnNmb3JtZXJzL3JlbW92ZS1pdnktaml0LXN1cHBvcnQtY2FsbHMnO1xuaW1wb3J0IHsgcmVwbGFjZVJlc291cmNlcyB9IGZyb20gJy4uL3RyYW5zZm9ybWVycy9yZXBsYWNlX3Jlc291cmNlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBb3RUcmFuc2Zvcm1lcnMoXG4gIGJ1aWxkZXI6IHRzLkJ1aWxkZXJQcm9ncmFtLFxuICBvcHRpb25zOiB7IGVtaXRDbGFzc01ldGFkYXRhPzogYm9vbGVhbjsgZW1pdE5nTW9kdWxlU2NvcGU/OiBib29sZWFuIH0sXG4gIGltYWdlRG9tYWluczogU2V0PHN0cmluZz4sXG4pOiB0cy5DdXN0b21UcmFuc2Zvcm1lcnMge1xuICBjb25zdCBnZXRUeXBlQ2hlY2tlciA9ICgpID0+IGJ1aWxkZXIuZ2V0UHJvZ3JhbSgpLmdldFR5cGVDaGVja2VyKCk7XG4gIGNvbnN0IHRyYW5zZm9ybWVyczogdHMuQ3VzdG9tVHJhbnNmb3JtZXJzID0ge1xuICAgIGJlZm9yZTogW2ZpbmRJbWFnZURvbWFpbnMoaW1hZ2VEb21haW5zKSwgcmVwbGFjZUJvb3RzdHJhcChnZXRUeXBlQ2hlY2tlcildLFxuICAgIGFmdGVyOiBbXSxcbiAgfTtcblxuICBjb25zdCByZW1vdmVDbGFzc01ldGFkYXRhID0gIW9wdGlvbnMuZW1pdENsYXNzTWV0YWRhdGE7XG4gIGNvbnN0IHJlbW92ZU5nTW9kdWxlU2NvcGUgPSAhb3B0aW9ucy5lbWl0TmdNb2R1bGVTY29wZTtcbiAgaWYgKHJlbW92ZUNsYXNzTWV0YWRhdGEgfHwgcmVtb3ZlTmdNb2R1bGVTY29wZSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgdHJhbnNmb3JtZXJzLmJlZm9yZSEucHVzaChcbiAgICAgIHJlbW92ZUl2eUppdFN1cHBvcnRDYWxscyhyZW1vdmVDbGFzc01ldGFkYXRhLCByZW1vdmVOZ01vZHVsZVNjb3BlLCBnZXRUeXBlQ2hlY2tlciksXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiB0cmFuc2Zvcm1lcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVKaXRUcmFuc2Zvcm1lcnMoXG4gIGJ1aWxkZXI6IHRzLkJ1aWxkZXJQcm9ncmFtLFxuICBjb21waWxlckNsaTogdHlwZW9mIGltcG9ydCgnQGFuZ3VsYXIvY29tcGlsZXItY2xpJyksXG4gIG9wdGlvbnM6IHtcbiAgICBpbmxpbmVTdHlsZUZpbGVFeHRlbnNpb24/OiBzdHJpbmc7XG4gIH0sXG4pOiB0cy5DdXN0b21UcmFuc2Zvcm1lcnMge1xuICBjb25zdCBnZXRUeXBlQ2hlY2tlciA9ICgpID0+IGJ1aWxkZXIuZ2V0UHJvZ3JhbSgpLmdldFR5cGVDaGVja2VyKCk7XG5cbiAgcmV0dXJuIHtcbiAgICBiZWZvcmU6IFtcbiAgICAgIHJlcGxhY2VSZXNvdXJjZXMoKCkgPT4gdHJ1ZSwgZ2V0VHlwZUNoZWNrZXIsIG9wdGlvbnMuaW5saW5lU3R5bGVGaWxlRXh0ZW5zaW9uKSxcbiAgICAgIGNvbXBpbGVyQ2xpLmNvbnN0cnVjdG9yUGFyYW1ldGVyc0Rvd25sZXZlbFRyYW5zZm9ybShidWlsZGVyLmdldFByb2dyYW0oKSksXG4gICAgXSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlVHJhbnNmb3JtZXJzKFxuICBmaXJzdDogdHMuQ3VzdG9tVHJhbnNmb3JtZXJzLFxuICBzZWNvbmQ6IHRzLkN1c3RvbVRyYW5zZm9ybWVycyxcbik6IHRzLkN1c3RvbVRyYW5zZm9ybWVycyB7XG4gIGNvbnN0IHJlc3VsdDogdHMuQ3VzdG9tVHJhbnNmb3JtZXJzID0ge307XG5cbiAgaWYgKGZpcnN0LmJlZm9yZSB8fCBzZWNvbmQuYmVmb3JlKSB7XG4gICAgcmVzdWx0LmJlZm9yZSA9IFsuLi4oZmlyc3QuYmVmb3JlIHx8IFtdKSwgLi4uKHNlY29uZC5iZWZvcmUgfHwgW10pXTtcbiAgfVxuXG4gIGlmIChmaXJzdC5hZnRlciB8fCBzZWNvbmQuYWZ0ZXIpIHtcbiAgICByZXN1bHQuYWZ0ZXIgPSBbLi4uKGZpcnN0LmFmdGVyIHx8IFtdKSwgLi4uKHNlY29uZC5hZnRlciB8fCBbXSldO1xuICB9XG5cbiAgaWYgKGZpcnN0LmFmdGVyRGVjbGFyYXRpb25zIHx8IHNlY29uZC5hZnRlckRlY2xhcmF0aW9ucykge1xuICAgIHJlc3VsdC5hZnRlckRlY2xhcmF0aW9ucyA9IFtcbiAgICAgIC4uLihmaXJzdC5hZnRlckRlY2xhcmF0aW9ucyB8fCBbXSksXG4gICAgICAuLi4oc2Vjb25kLmFmdGVyRGVjbGFyYXRpb25zIHx8IFtdKSxcbiAgICBdO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgQW5ndWxhciBwbGF0Zm9ybSB0aGF0IHNob3VsZCBiZSByZXBsYWNlZCB3aXRoaW5cbiAqIGJvb3RzdHJhcCBjYWxsIGV4cHJlc3Npb25zIHRvIHN1cHBvcnQgQU9ULlxuICovXG5jb25zdCBQTEFURk9STV9CUk9XU0VSX0RZTkFNSUNfTkFNRSA9ICdwbGF0Zm9ybUJyb3dzZXJEeW5hbWljJztcblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VCb290c3RyYXAoXG4gIGdldFR5cGVDaGVja2VyOiAoKSA9PiB0cy5UeXBlQ2hlY2tlcixcbik6IHRzLlRyYW5zZm9ybWVyRmFjdG9yeTx0cy5Tb3VyY2VGaWxlPiB7XG4gIHJldHVybiAoY29udGV4dDogdHMuVHJhbnNmb3JtYXRpb25Db250ZXh0KSA9PiB7XG4gICAgbGV0IGJvb3RzdHJhcEltcG9ydDogdHMuSW1wb3J0RGVjbGFyYXRpb24gfCB1bmRlZmluZWQ7XG4gICAgbGV0IGJvb3RzdHJhcE5hbWVzcGFjZTogdHMuSWRlbnRpZmllciB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCByZXBsYWNlZE5vZGVzOiB0cy5Ob2RlW10gPSBbXTtcbiAgICBjb25zdCBub2RlRmFjdG9yeSA9IGNvbnRleHQuZmFjdG9yeTtcblxuICAgIGNvbnN0IHZpc2l0Tm9kZTogdHMuVmlzaXRvciA9IChub2RlOiB0cy5Ob2RlKSA9PiB7XG4gICAgICBpZiAodHMuaXNDYWxsRXhwcmVzc2lvbihub2RlKSAmJiB0cy5pc0lkZW50aWZpZXIobm9kZS5leHByZXNzaW9uKSkge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBub2RlLmV4cHJlc3Npb247XG4gICAgICAgIGlmICh0YXJnZXQudGV4dCA9PT0gUExBVEZPUk1fQlJPV1NFUl9EWU5BTUlDX05BTUUpIHtcbiAgICAgICAgICBpZiAoIWJvb3RzdHJhcE5hbWVzcGFjZSkge1xuICAgICAgICAgICAgYm9vdHN0cmFwTmFtZXNwYWNlID0gbm9kZUZhY3RvcnkuY3JlYXRlVW5pcXVlTmFtZSgnX19OZ0NsaV9ib290c3RyYXBfJyk7XG4gICAgICAgICAgICBib290c3RyYXBJbXBvcnQgPSBub2RlRmFjdG9yeS5jcmVhdGVJbXBvcnREZWNsYXJhdGlvbihcbiAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBub2RlRmFjdG9yeS5jcmVhdGVJbXBvcnRDbGF1c2UoXG4gICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIG5vZGVGYWN0b3J5LmNyZWF0ZU5hbWVzcGFjZUltcG9ydChib290c3RyYXBOYW1lc3BhY2UpLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBub2RlRmFjdG9yeS5jcmVhdGVTdHJpbmdMaXRlcmFsKCdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJyksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXBsYWNlZE5vZGVzLnB1c2godGFyZ2V0KTtcblxuICAgICAgICAgIHJldHVybiBub2RlRmFjdG9yeS51cGRhdGVDYWxsRXhwcmVzc2lvbihcbiAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICBub2RlRmFjdG9yeS5jcmVhdGVQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24oYm9vdHN0cmFwTmFtZXNwYWNlLCAncGxhdGZvcm1Ccm93c2VyJyksXG4gICAgICAgICAgICBub2RlLnR5cGVBcmd1bWVudHMsXG4gICAgICAgICAgICBub2RlLmFyZ3VtZW50cyxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cy52aXNpdEVhY2hDaGlsZChub2RlLCB2aXNpdE5vZGUsIGNvbnRleHQpO1xuICAgIH07XG5cbiAgICByZXR1cm4gKHNvdXJjZUZpbGU6IHRzLlNvdXJjZUZpbGUpID0+IHtcbiAgICAgIGlmICghc291cmNlRmlsZS50ZXh0LmluY2x1ZGVzKFBMQVRGT1JNX0JST1dTRVJfRFlOQU1JQ19OQU1FKSkge1xuICAgICAgICByZXR1cm4gc291cmNlRmlsZTtcbiAgICAgIH1cblxuICAgICAgbGV0IHVwZGF0ZWRTb3VyY2VGaWxlID0gdHMudmlzaXRFYWNoQ2hpbGQoc291cmNlRmlsZSwgdmlzaXROb2RlLCBjb250ZXh0KTtcblxuICAgICAgaWYgKGJvb3RzdHJhcEltcG9ydCkge1xuICAgICAgICAvLyBSZW1vdmUgYW55IHVudXNlZCBwbGF0Zm9ybSBicm93c2VyIGR5bmFtaWMgaW1wb3J0c1xuICAgICAgICBjb25zdCByZW1vdmFscyA9IGVsaWRlSW1wb3J0cyhcbiAgICAgICAgICB1cGRhdGVkU291cmNlRmlsZSxcbiAgICAgICAgICByZXBsYWNlZE5vZGVzLFxuICAgICAgICAgIGdldFR5cGVDaGVja2VyLFxuICAgICAgICAgIGNvbnRleHQuZ2V0Q29tcGlsZXJPcHRpb25zKCksXG4gICAgICAgICk7XG4gICAgICAgIGlmIChyZW1vdmFscy5zaXplID4gMCkge1xuICAgICAgICAgIHVwZGF0ZWRTb3VyY2VGaWxlID0gdHMudmlzaXRFYWNoQ2hpbGQoXG4gICAgICAgICAgICB1cGRhdGVkU291cmNlRmlsZSxcbiAgICAgICAgICAgIChub2RlKSA9PiAocmVtb3ZhbHMuaGFzKG5vZGUpID8gdW5kZWZpbmVkIDogbm9kZSksXG4gICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZGQgbmV3IHBsYXRmb3JtIGJyb3dzZXIgaW1wb3J0XG4gICAgICAgIHJldHVybiBub2RlRmFjdG9yeS51cGRhdGVTb3VyY2VGaWxlKFxuICAgICAgICAgIHVwZGF0ZWRTb3VyY2VGaWxlLFxuICAgICAgICAgIHRzLnNldFRleHRSYW5nZShcbiAgICAgICAgICAgIG5vZGVGYWN0b3J5LmNyZWF0ZU5vZGVBcnJheShbYm9vdHN0cmFwSW1wb3J0LCAuLi51cGRhdGVkU291cmNlRmlsZS5zdGF0ZW1lbnRzXSksXG4gICAgICAgICAgICBzb3VyY2VGaWxlLnN0YXRlbWVudHMsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVkU291cmNlRmlsZTtcbiAgICAgIH1cbiAgICB9O1xuICB9O1xufVxuIl19