@angular/language-service 11.1.1 → 11.1.2

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.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v11.1.1
2
+ * @license Angular v11.1.2
3
3
  * Copyright Google LLC All Rights Reserved.
4
4
  * License: MIT
5
5
  */
@@ -9881,7 +9881,7 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'typescript', 'path'], func
9881
9881
  this._advance();
9882
9882
  selfClosing = false;
9883
9883
  }
9884
- const end = this._peek.sourceSpan.start;
9884
+ const end = this._peek.sourceSpan.fullStart;
9885
9885
  const span = new ParseSourceSpan(startTagToken.sourceSpan.start, end, startTagToken.sourceSpan.fullStart);
9886
9886
  // Create a separate `startSpan` because `span` will be modified when there is an `end` span.
9887
9887
  const startSpan = new ParseSourceSpan(startTagToken.sourceSpan.start, end, startTagToken.sourceSpan.fullStart);
@@ -11015,8 +11015,9 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'typescript', 'path'], func
11015
11015
  }
11016
11016
  parseInterpolation(value, sourceSpan) {
11017
11017
  const sourceInfo = sourceSpan.start.toString();
11018
+ const absoluteOffset = sourceSpan.fullStart.offset;
11018
11019
  try {
11019
- const ast = this._exprParser.parseInterpolation(value, sourceInfo, sourceSpan.start.offset, this._interpolationConfig);
11020
+ const ast = this._exprParser.parseInterpolation(value, sourceInfo, absoluteOffset, this._interpolationConfig);
11020
11021
  if (ast)
11021
11022
  this._reportExpressionParserErrors(ast.errors, sourceSpan);
11022
11023
  this._checkPipes(ast, sourceSpan);
@@ -11024,7 +11025,7 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'typescript', 'path'], func
11024
11025
  }
11025
11026
  catch (e) {
11026
11027
  this._reportError(`${e}`, sourceSpan);
11027
- return this._exprParser.wrapLiteralPrimitive('ERROR', sourceInfo, sourceSpan.start.offset);
11028
+ return this._exprParser.wrapLiteralPrimitive('ERROR', sourceInfo, absoluteOffset);
11028
11029
  }
11029
11030
  }
11030
11031
  /**
@@ -11034,8 +11035,9 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'typescript', 'path'], func
11034
11035
  */
11035
11036
  parseInterpolationExpression(expression, sourceSpan) {
11036
11037
  const sourceInfo = sourceSpan.start.toString();
11038
+ const absoluteOffset = sourceSpan.start.offset;
11037
11039
  try {
11038
- const ast = this._exprParser.parseInterpolationExpression(expression, sourceInfo, sourceSpan.start.offset);
11040
+ const ast = this._exprParser.parseInterpolationExpression(expression, sourceInfo, absoluteOffset);
11039
11041
  if (ast)
11040
11042
  this._reportExpressionParserErrors(ast.errors, sourceSpan);
11041
11043
  this._checkPipes(ast, sourceSpan);
@@ -11043,7 +11045,7 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'typescript', 'path'], func
11043
11045
  }
11044
11046
  catch (e) {
11045
11047
  this._reportError(`${e}`, sourceSpan);
11046
- return this._exprParser.wrapLiteralPrimitive('ERROR', sourceInfo, sourceSpan.start.offset);
11048
+ return this._exprParser.wrapLiteralPrimitive('ERROR', sourceInfo, absoluteOffset);
11047
11049
  }
11048
11050
  }
11049
11051
  /**
@@ -13364,13 +13366,10 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'typescript', 'path'], func
13364
13366
  }
13365
13367
  const fullEnd = exprEnd + interpEnd.length;
13366
13368
  const text = input.substring(exprStart, exprEnd);
13367
- if (text.trim().length > 0) {
13368
- expressions.push({ text, start: fullStart, end: fullEnd });
13369
- }
13370
- else {
13369
+ if (text.trim().length === 0) {
13371
13370
  this._reportError('Blank expressions are not allowed in interpolated strings', input, `at column ${i} in`, location);
13372
- expressions.push({ text: '$implicit', start: fullStart, end: fullEnd });
13373
13371
  }
13372
+ expressions.push({ text, start: fullStart, end: fullEnd });
13374
13373
  offsets.push(exprStart);
13375
13374
  i = fullEnd;
13376
13375
  atInterpolation = false;
@@ -13665,8 +13664,12 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'typescript', 'path'], func
13665
13664
  this.error(`Unexpected token '${this.next}'`);
13666
13665
  }
13667
13666
  }
13668
- if (exprs.length == 0)
13669
- return new EmptyExpr(this.span(start), this.sourceSpan(start));
13667
+ if (exprs.length == 0) {
13668
+ // We have no expressions so create an empty expression that spans the entire input length
13669
+ const artificialStart = this.offset;
13670
+ const artificialEnd = this.offset + this.inputLength;
13671
+ return new EmptyExpr(this.span(artificialStart, artificialEnd), this.sourceSpan(artificialStart, artificialEnd));
13672
+ }
13670
13673
  if (exprs.length == 1)
13671
13674
  return exprs[0];
13672
13675
  return new Chain(this.span(start), this.sourceSpan(start), exprs);
@@ -19018,7 +19021,7 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'typescript', 'path'], func
19018
19021
  * Use of this source code is governed by an MIT-style license that can be
19019
19022
  * found in the LICENSE file at https://angular.io/license
19020
19023
  */
19021
- const VERSION$1 = new Version('11.1.1');
19024
+ const VERSION$1 = new Version('11.1.2');
19022
19025
 
19023
19026
  /**
19024
19027
  * @license
@@ -27661,6 +27664,7 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'typescript', 'path'], func
27661
27664
  "201" /* PROVIDER_NOT_FOUND */,
27662
27665
  "300" /* MULTIPLE_COMPONENTS_MATCH */,
27663
27666
  "301" /* EXPORT_NOT_FOUND */,
27667
+ "302" /* PIPE_NOT_FOUND */,
27664
27668
  ]);
27665
27669
  /* tslint:enable:no-toplevel-property-access */
27666
27670
  /** Called to format a runtime error */
@@ -35025,7 +35029,7 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'typescript', 'path'], func
35025
35029
  /**
35026
35030
  * @publicApi
35027
35031
  */
35028
- const VERSION$2 = new Version$1('11.1.1');
35032
+ const VERSION$2 = new Version$1('11.1.2');
35029
35033
 
35030
35034
  /**
35031
35035
  * @license
@@ -38297,36 +38301,36 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'typescript', 'path'], func
38297
38301
  emit(value) {
38298
38302
  super.next(value);
38299
38303
  }
38300
- subscribe(generatorOrNext, error, complete) {
38304
+ subscribe(observerOrNext, error, complete) {
38301
38305
  let schedulerFn;
38302
38306
  let errorFn = (err) => null;
38303
38307
  let completeFn = () => null;
38304
- if (generatorOrNext && typeof generatorOrNext === 'object') {
38308
+ if (observerOrNext && typeof observerOrNext === 'object') {
38305
38309
  schedulerFn = this.__isAsync ? (value) => {
38306
- setTimeout(() => generatorOrNext.next(value));
38310
+ setTimeout(() => observerOrNext.next(value));
38307
38311
  } : (value) => {
38308
- generatorOrNext.next(value);
38312
+ observerOrNext.next(value);
38309
38313
  };
38310
- if (generatorOrNext.error) {
38314
+ if (observerOrNext.error) {
38311
38315
  errorFn = this.__isAsync ? (err) => {
38312
- setTimeout(() => generatorOrNext.error(err));
38316
+ setTimeout(() => observerOrNext.error(err));
38313
38317
  } : (err) => {
38314
- generatorOrNext.error(err);
38318
+ observerOrNext.error(err);
38315
38319
  };
38316
38320
  }
38317
- if (generatorOrNext.complete) {
38321
+ if (observerOrNext.complete) {
38318
38322
  completeFn = this.__isAsync ? () => {
38319
- setTimeout(() => generatorOrNext.complete());
38323
+ setTimeout(() => observerOrNext.complete());
38320
38324
  } : () => {
38321
- generatorOrNext.complete();
38325
+ observerOrNext.complete();
38322
38326
  };
38323
38327
  }
38324
38328
  }
38325
38329
  else {
38326
38330
  schedulerFn = this.__isAsync ? (value) => {
38327
- setTimeout(() => generatorOrNext(value));
38331
+ setTimeout(() => observerOrNext(value));
38328
38332
  } : (value) => {
38329
- generatorOrNext(value);
38333
+ observerOrNext(value);
38330
38334
  };
38331
38335
  if (error) {
38332
38336
  errorFn = this.__isAsync ? (err) => {
@@ -38344,8 +38348,8 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'typescript', 'path'], func
38344
38348
  }
38345
38349
  }
38346
38350
  const sink = super.subscribe(schedulerFn, errorFn, completeFn);
38347
- if (generatorOrNext instanceof Subscription) {
38348
- generatorOrNext.add(sink);
38351
+ if (observerOrNext instanceof Subscription) {
38352
+ observerOrNext.add(sink);
38349
38353
  }
38350
38354
  return sink;
38351
38355
  }
@@ -42145,14 +42149,6 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'typescript', 'path'], func
42145
42149
  * Use of this source code is governed by an MIT-style license that can be
42146
42150
  * found in the LICENSE file at https://angular.io/license
42147
42151
  */
42148
- /**
42149
- * Create a `LanguageServiceHost`
42150
- */
42151
- function createLanguageServiceFromTypescript(host, service) {
42152
- const ngHost = new TypeScriptServiceHost(host, service);
42153
- const ngServer = createLanguageService(ngHost);
42154
- return ngServer;
42155
- }
42156
42152
  /**
42157
42153
  * The language service never needs the normalized versions of the metadata. To avoid parsing
42158
42154
  * the content and resolving references, return an empty file. This also allows normalizing
@@ -42833,6 +42829,10 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'typescript', 'path'], func
42833
42829
  // not implemented in VE Language Service
42834
42830
  return undefined;
42835
42831
  }
42832
+ function getTcb(fileName, position) {
42833
+ // Not implemented in VE Language Service
42834
+ return undefined;
42835
+ }
42836
42836
  return Object.assign(Object.assign({}, tsLS), {
42837
42837
  // Then override the methods supported by Angular language service
42838
42838
  getCompletionsAtPosition,
@@ -42842,13 +42842,11 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'typescript', 'path'], func
42842
42842
  getDefinitionAndBoundSpan,
42843
42843
  getTypeDefinitionAtPosition,
42844
42844
  getReferencesAtPosition,
42845
- findRenameLocations });
42845
+ findRenameLocations,
42846
+ getTcb });
42846
42847
  }
42847
42848
 
42848
- exports.TypeScriptServiceHost = TypeScriptServiceHost;
42849
42849
  exports.create = create;
42850
- exports.createLanguageService = createLanguageService;
42851
- exports.createLanguageServiceFromTypescript = createLanguageServiceFromTypescript;
42852
42850
  exports.getExternalFiles = getExternalFiles;
42853
42851
 
42854
42852
  Object.defineProperty(exports, '__esModule', { value: true });
package/index.d.ts CHANGED
@@ -6,4 +6,5 @@
6
6
  * found in the LICENSE file at https://angular.io/license
7
7
  */
8
8
  /// <amd-module name="@angular/language-service" />
9
- export * from './language-service';
9
+ export * from './api';
10
+ export { create, getExternalFiles } from './src/ts_plugin';
package/index.js CHANGED
@@ -11,12 +11,16 @@
11
11
  if (v !== undefined) module.exports = v;
12
12
  }
13
13
  else if (typeof define === "function" && define.amd) {
14
- define("@angular/language-service", ["require", "exports", "tslib", "@angular/language-service/language-service"], factory);
14
+ define("@angular/language-service", ["require", "exports", "tslib", "@angular/language-service/api", "@angular/language-service/src/ts_plugin"], factory);
15
15
  }
16
16
  })(function (require, exports) {
17
17
  "use strict";
18
18
  Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.getExternalFiles = exports.create = void 0;
19
20
  var tslib_1 = require("tslib");
20
- tslib_1.__exportStar(require("@angular/language-service/language-service"), exports);
21
+ tslib_1.__exportStar(require("@angular/language-service/api"), exports);
22
+ var ts_plugin_1 = require("@angular/language-service/src/ts_plugin");
23
+ Object.defineProperty(exports, "create", { enumerable: true, get: function () { return ts_plugin_1.create; } });
24
+ Object.defineProperty(exports, "getExternalFiles", { enumerable: true, get: function () { return ts_plugin_1.getExternalFiles; } });
21
25
  });
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9sYW5ndWFnZS1zZXJ2aWNlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7OztJQUVILHFGQUFtQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2xhbmd1YWdlLXNlcnZpY2UnO1xuIl19
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9sYW5ndWFnZS1zZXJ2aWNlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7Ozs7SUFFSCx3RUFBc0I7SUFDdEIscUVBQXlEO0lBQWpELG1HQUFBLE1BQU0sT0FBQTtJQUFFLDZHQUFBLGdCQUFnQixPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vYXBpJztcbmV4cG9ydCB7Y3JlYXRlLCBnZXRFeHRlcm5hbEZpbGVzfSBmcm9tICcuL3NyYy90c19wbHVnaW4nO1xuIl19
package/ivy/adapters.d.ts CHANGED
@@ -19,7 +19,12 @@ export declare class LanguageServiceAdapter implements NgCompilerAdapter {
19
19
  readonly factoryTracker: null;
20
20
  readonly unifiedModulesHost: null;
21
21
  readonly rootDirs: AbsoluteFsPath[];
22
- private readonly templateVersion;
22
+ /**
23
+ * Map of resource filenames to the version of the file last read via `readResource`.
24
+ *
25
+ * Used to implement `getModifiedResourceFiles`.
26
+ */
27
+ private readonly lastReadResourceVersion;
23
28
  constructor(project: ts.server.Project);
24
29
  isShim(sf: ts.SourceFile): boolean;
25
30
  fileExists(fileName: string): boolean;
@@ -38,7 +43,7 @@ export declare class LanguageServiceAdapter implements NgCompilerAdapter {
38
43
  * packages/compiler-cli/src/ngtsc/core/api/src/interfaces.ts
39
44
  */
40
45
  readResource(fileName: string): string;
41
- isTemplateDirty(fileName: string): boolean;
46
+ getModifiedResourceFiles(): Set<string> | undefined;
42
47
  }
43
48
  /**
44
49
  * Used to read configuration files.
package/ivy/adapters.js CHANGED
@@ -30,7 +30,12 @@
30
30
  this.ignoreForEmit = new Set();
31
31
  this.factoryTracker = null; // no .ngfactory shims
32
32
  this.unifiedModulesHost = null; // only used in Bazel
33
- this.templateVersion = new Map();
33
+ /**
34
+ * Map of resource filenames to the version of the file last read via `readResource`.
35
+ *
36
+ * Used to implement `getModifiedResourceFiles`.
37
+ */
38
+ this.lastReadResourceVersion = new Map();
34
39
  this.rootDirs = typescript_1.getRootDirs(this, project.getCompilationSettings());
35
40
  }
36
41
  LanguageServiceAdapter.prototype.isShim = function (sf) {
@@ -78,13 +83,28 @@
78
83
  throw new Error("Failed to get script snapshot while trying to read " + fileName);
79
84
  }
80
85
  var version = this.project.getScriptVersion(fileName);
81
- this.templateVersion.set(fileName, version);
86
+ this.lastReadResourceVersion.set(fileName, version);
82
87
  return snapshot.getText(0, snapshot.getLength());
83
88
  };
84
- LanguageServiceAdapter.prototype.isTemplateDirty = function (fileName) {
85
- var lastVersion = this.templateVersion.get(fileName);
86
- var latestVersion = this.project.getScriptVersion(fileName);
87
- return lastVersion !== latestVersion;
89
+ LanguageServiceAdapter.prototype.getModifiedResourceFiles = function () {
90
+ var e_1, _a;
91
+ var modifiedFiles = new Set();
92
+ try {
93
+ for (var _b = tslib_1.__values(this.lastReadResourceVersion), _c = _b.next(); !_c.done; _c = _b.next()) {
94
+ var _d = tslib_1.__read(_c.value, 2), fileName = _d[0], oldVersion = _d[1];
95
+ if (this.project.getScriptVersion(fileName) !== oldVersion) {
96
+ modifiedFiles.add(fileName);
97
+ }
98
+ }
99
+ }
100
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
101
+ finally {
102
+ try {
103
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
104
+ }
105
+ finally { if (e_1) throw e_1.error; }
106
+ }
107
+ return modifiedFiles.size > 0 ? modifiedFiles : undefined;
88
108
  };
89
109
  return LanguageServiceAdapter;
90
110
  }());
@@ -151,4 +171,4 @@
151
171
  }());
152
172
  exports.LSParseConfigHost = LSParseConfigHost;
153
173
  });
154
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRhcHRlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9sYW5ndWFnZS1zZXJ2aWNlL2l2eS9hZGFwdGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7O0lBT0gsK0RBQTZEO0lBQzdELGtGQUFnRjtJQUNoRix3QkFBMEI7SUFHMUIsNkRBQXlDO0lBRXpDO1FBU0UsZ0NBQTZCLE9BQTBCO1lBQTFCLFlBQU8sR0FBUCxPQUFPLENBQW1CO1lBUjlDLGVBQVUsR0FBRyxJQUFJLENBQUM7WUFDbEIsNEJBQXVCLEdBQW9CLEVBQUUsQ0FBQztZQUM5QyxrQkFBYSxHQUF1QixJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQzlDLG1CQUFjLEdBQUcsSUFBSSxDQUFDLENBQU0sc0JBQXNCO1lBQ2xELHVCQUFrQixHQUFHLElBQUksQ0FBQyxDQUFFLHFCQUFxQjtZQUV6QyxvQkFBZSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO1lBRzNELElBQUksQ0FBQyxRQUFRLEdBQUcsd0JBQVcsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLHNCQUFzQixFQUFFLENBQUMsQ0FBQztRQUN0RSxDQUFDO1FBRUQsdUNBQU0sR0FBTixVQUFPLEVBQWlCO1lBQ3RCLE9BQU8sY0FBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BCLENBQUM7UUFFRCwyQ0FBVSxHQUFWLFVBQVcsUUFBZ0I7WUFDekIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBRUQseUNBQVEsR0FBUixVQUFTLFFBQWdCO1lBQ3ZCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekMsQ0FBQztRQUVELG9EQUFtQixHQUFuQjtZQUNFLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxD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QztRQUNKLENBQUM7UUFDRCwrQkFBRyxHQUFIO1lBQ0UsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixFQUFvQixDQUFDO1FBQ2pFLENBQUM7UUFDRCxtQ0FBTyxHQUFQLFVBQVEsSUFBZ0M7WUFDdEMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLENBQUM7UUFDRCxtQ0FBTyxHQUFQO1lBQVEsZUFBa0I7aUJBQWxCLFVBQWtCLEVBQWxCLHFCQUFrQixFQUFsQixJQUFrQjtnQkFBbEIsMEJBQWtCOztZQUN4QixPQUFPLENBQUMsQ0FBQyxPQUFPLE9BQVQsQ0FBQyxtQkFBWSxLQUFLLEVBQW1CLENBQUM7UUFDL0MsQ0FBQztRQUNELG1DQUFPLEdBQVAsVUFBOEIsSUFBTztZQUNuQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFNLENBQUM7UUFDOUIsQ0FBQztRQUNELGdDQUFJLEdBQUosVUFBMkIsUUFBVztZQUFFLGVBQWtCO2lCQUFsQixVQUFrQixFQUFsQixxQkFBa0IsRUFBbEIsSUFBa0I7Z0JBQWxCLDhCQUFrQjs7WUFDeEQsT0FBTyxDQUFDLENBQUMsSUFBSSxPQUFOLENBQUMsb0JBQU0sUUFBUSxHQUFLLEtBQUssRUFBTSxDQUFDO1FBQ3pDLENBQUM7UUFDSCx3QkFBQztJQUFELENBQUMsQUF4Q0QsSUF3Q0M7SUF4Q1ksOENBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbi8qKiBAZmlsZW92ZXJ2aWV3IHByb3ZpZGVzIGFkYXB0ZXJzIGZvciBjb21tdW5pY2F0aW5nIHdpdGggdGhlIG5nIGNvbXBpbGVyICovXG5cbmltcG9ydCB7Q29uZmlndXJhdGlvbkhvc3R9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyLWNsaSc7XG5pbXBvcnQge05nQ29tcGlsZXJBZGFwdGVyfSBmcm9tICdAYW5ndWxhci9jb21waWxlci1jbGkvc3JjL25ndHNjL2NvcmUvYXBpJztcbmltcG9ydCB7QWJzb2x1dGVGc1BhdGgsIEZpbGVTdGF0cywgUGF0aFNlZ21lbnQsIFBhdGhTdHJpbmd9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvZmlsZV9zeXN0ZW0nO1xuaW1wb3J0IHtpc1NoaW19IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2Mvc2hpbXMnO1xuaW1wb3J0IHtnZXRSb290RGlyc30gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXItY2xpL3NyYy9uZ3RzYy91dGlsL3NyYy90eXBlc2NyaXB0JztcbmltcG9ydCAqIGFzIHAgZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0L2xpYi90c3NlcnZlcmxpYnJhcnknO1xuXG5pbXBvcnQge2lzVHlwZVNjcmlwdEZpbGV9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgY2xhc3MgTGFuZ3VhZ2VTZXJ2aWNlQWRhcHRlciBpbXBsZW1lbnRzIE5nQ29tcGlsZXJBZGFwdGVyIHtcbiAgcmVhZG9ubHkgZW50cnlQb2ludCA9IG51bGw7XG4gIHJlYWRvbmx5IGNvbnN0cnVjdGlvbkRpYWdub3N0aWNzOiB0cy5EaWFnbm9zdGljW10gPSBbXTtcbiAgcmVhZG9ubHkgaWdub3JlRm9yRW1pdDogU2V0PHRzLlNvdXJjZUZpbGU+ID0gbmV3IFNldCgpO1xuICByZWFkb25seSBmYWN0b3J5VHJhY2tlciA9IG51bGw7ICAgICAgLy8gbm8gLm5nZmFjdG9yeSBzaGltc1xuICByZWFkb25seSB1bmlmaWVkTW9kdWxlc0hvc3QgPSBudWxsOyAgLy8gb25seSB1c2VkIGluIEJhemVsXG4gIHJlYWRvbmx5IHJvb3REaXJzOiBBYnNvbHV0ZUZzUGF0aFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IHRlbXBsYXRlVmVyc2lvbiA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBwcm9qZWN0OiB0cy5zZXJ2ZXIuUHJvamVjdCkge1xuICAgIHRoaXMucm9vdERpcnMgPSBnZXRSb290RGlycyh0aGlzLCBwcm9qZWN0LmdldENvbXBpbGF0aW9uU2V0dGluZ3MoKSk7XG4gIH1cblxuICBpc1NoaW0oc2Y6IHRzLlNvdXJjZUZpbGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNTaGltKHNmKTtcbiAgfVxuXG4gIGZpbGVFeGlzdHMoZmlsZU5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb2plY3QuZmlsZUV4aXN0cyhmaWxlTmFtZSk7XG4gIH1cblxuICByZWFkRmlsZShmaWxlTmFtZTogc3RyaW5nKTogc3RyaW5nfHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucHJvamVjdC5yZWFkRmlsZShmaWxlTmFtZSk7XG4gIH1cblxuICBnZXRDdXJyZW50RGlyZWN0b3J5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvamVjdC5nZXRDdXJyZW50RGlyZWN0b3J5KCk7XG4gIH1cblxuICBnZXRDYW5vbmljYWxGaWxlTmFtZShmaWxlTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9qZWN0LnByb2plY3RTZXJ2aWNlLnRvQ2Fub25pY2FsRmlsZU5hbWUoZmlsZU5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgcmVhbCBwYXRoIG9mIGEgc3ltbGluay4gVGhpcyBtZXRob2QgaXMgcmVxdWlyZWQgaW4gb3JkZXIgdG9cbiAgICogcmVzb2x2ZSBzeW1saW5rcyBpbiBub2RlX21vZHVsZXMuXG4gICAqL1xuICByZWFscGF0aChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb2plY3QucmVhbHBhdGg/LihwYXRoKSA/PyBwYXRoO1xuICB9XG5cbiAgLyoqXG4gICAqIHJlYWRSZXNvdXJjZSgpIGlzIGFuIEFuZ3VsYXItc3BlY2lmaWMgbWV0aG9kIGZvciByZWFkaW5nIGZpbGVzIHRoYXQgYXJlIG5vdFxuICAgKiBtYW5hZ2VkIGJ5IHRoZSBUUyBjb21waWxlciBob3N0LCBuYW1lbHkgdGVtcGxhdGVzIGFuZCBzdHlsZXNoZWV0cy5cbiAgICogSXQgaXMgYSBtZXRob2Qgb24gRXh0ZW5kZWRUc0NvbXBpbGVySG9zdCwgc2VlXG4gICAqIHBhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvY29yZS9hcGkvc3JjL2ludGVyZmFjZXMudHNcbiAgICovXG4gIHJlYWRSZXNvdXJjZShmaWxlTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoaXNUeXBlU2NyaXB0RmlsZShmaWxlTmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgcmVhZFJlc291cmNlKCkgc2hvdWxkIG5vdCBiZSBjYWxsZWQgb24gVFMgZmlsZTogJHtmaWxlTmFtZX1gKTtcbiAgICB9XG4gICAgLy8gQ2FsbGluZyBnZXRTY3JpcHRTbmFwc2hvdCgpIHdpbGwgYWN0dWFsbHkgY3JlYXRlIGEgU2NyaXB0SW5mbyBpZiBpdCBkb2VzXG4gICAgLy8gbm90IGV4aXN0ISBUaGUgc2FtZSBhcHBsaWVzIGZvciBnZXRTY3JpcHRWZXJzaW9uKCkuXG4gICAgLy8gZ2V0U2NyaXB0SW5mbygpIHdpbGwgbm90IGNyZWF0ZSBvbmUgaWYgaXQgZG9lcyBub3QgZXhpc3QuXG4gICAgLy8gSW4gdGhpcyBjYXNlLCB3ZSAqd2FudCogYSBzY3JpcHQgaW5mbyB0byBiZSBjcmVhdGVkIHNvIHRoYXQgd2UgY291bGRcbiAgICAvLyBrZWVwIHRyYWNrIG9mIGl0cyB2ZXJzaW9uLlxuICAgIGNvbnN0IHNuYXBzaG90ID0gdGhpcy5wcm9qZWN0LmdldFNjcmlwdFNuYXBzaG90KGZpbGVOYW1lKTtcbiAgICBpZiAoIXNuYXBzaG90KSB7XG4gICAgICAvLyBUaGlzIHdvdWxkIGZhaWwgaWYgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3QsIG9yIHJlYWRGaWxlKCkgZmFpbHMgZm9yXG4gICAgICAvLyB3aGF0ZXZlciByZWFzb25zLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZ2V0IHNjcmlwdCBzbmFwc2hvdCB3aGlsZSB0cnlpbmcgdG8gcmVhZCAke2ZpbGVOYW1lfWApO1xuICAgIH1cbiAgICBjb25zdCB2ZXJzaW9uID0gdGhpcy5wcm9qZWN0LmdldFNjcmlwdFZlcnNpb24oZmlsZU5hbWUpO1xuICAgIHRoaXMudGVtcGxhdGVWZXJzaW9uLnNldChmaWxlTmFtZSwgdmVyc2lvbik7XG4gICAgcmV0dXJuIHNuYXBzaG90LmdldFRleHQoMCwgc25hcHNob3QuZ2V0TGVuZ3RoKCkpO1xuICB9XG5cbiAgaXNUZW1wbGF0ZURpcnR5KGZpbGVOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBsYXN0VmVyc2lvbiA9IHRoaXMudGVtcGxhdGVWZXJzaW9uLmdldChmaWxlTmFtZSk7XG4gICAgY29uc3QgbGF0ZXN0VmVyc2lvbiA9IHRoaXMucHJvamVjdC5nZXRTY3JpcHRWZXJzaW9uKGZpbGVOYW1lKTtcbiAgICByZXR1cm4gbGFzdFZlcnNpb24gIT09IGxhdGVzdFZlcnNpb247XG4gIH1cbn1cblxuLyoqXG4gKiBVc2VkIHRvIHJlYWQgY29uZmlndXJhdGlvbiBmaWxlcy5cbiAqXG4gKiBBIGxhbmd1YWdlIHNlcnZpY2UgcGFyc2UgY29uZmlndXJhdGlvbiBob3N0IGlzIGluZGVwZW5kZW50IG9mIHRoZSBhZGFwdGVyXG4gKiBiZWNhdXNlIHNpZ25hdHVyZXMgb2YgY2FsbHMgbGlrZSBgRmlsZVN5c3RlbSNyZWFkRmlsZWAgYXJlIGEgYml0IHN0cmljdGVyXG4gKiB0aGFuIHRob3NlIG9uIHRoZSBhZGFwdGVyLlxuICovXG5leHBvcnQgY2xhc3MgTFNQYXJzZUNvbmZpZ0hvc3QgaW1wbGVtZW50cyBDb25maWd1cmF0aW9uSG9zdCB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgc2VydmVySG9zdDogdHMuc2VydmVyLlNlcnZlckhvc3QpIHt9XG4gIGV4aXN0cyhwYXRoOiBBYnNvbHV0ZUZzUGF0aCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlcnZlckhvc3QuZmlsZUV4aXN0cyhwYXRoKSB8fCB0aGlzLnNlcnZlckhvc3QuZGlyZWN0b3J5RXhpc3RzKHBhdGgpO1xuICB9XG4gIHJlYWRGaWxlKHBhdGg6IEFic29sdXRlRnNQYXRoKTogc3RyaW5nIHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5zZXJ2ZXJIb3N0LnJlYWRGaWxlKHBhdGgpO1xuICAgIGlmIChjb250ZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGFuZ3VhZ2VTZXJ2aWNlRlMjcmVhZEZpbGUgY2FsbGVkIG9uIHVuYXZhaWxhYmxlIGZpbGUgJHtwYXRofWApO1xuICAgIH1cbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuICBsc3RhdChwYXRoOiBBYnNvbHV0ZUZzUGF0aCk6IEZpbGVTdGF0cyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzRmlsZTogKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2ZXJIb3N0LmZpbGVFeGlzdHMocGF0aCk7XG4gICAgICB9LFxuICAgICAgaXNEaXJlY3Rvcnk6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmVySG9zdC5kaXJlY3RvcnlFeGlzdHMocGF0aCk7XG4gICAgICB9LFxuICAgICAgaXNTeW1ib2xpY0xpbms6ICgpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBMYW5ndWFnZVNlcnZpY2VGUyNsc3RhdCNpc1N5bWJvbGljTGluayBub3QgaW1wbGVtZW50ZWRgKTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuICBwd2QoKTogQWJzb2x1dGVGc1BhdGgge1xuICAgIHJldHVybiB0aGlzLnNlcnZlckhvc3QuZ2V0Q3VycmVudERpcmVjdG9yeSgpIGFzIEFic29sdXRlRnNQYXRoO1xuICB9XG4gIGV4dG5hbWUocGF0aDogQWJzb2x1dGVGc1BhdGh8UGF0aFNlZ21lbnQpOiBzdHJpbmcge1xuICAgIHJldHVybiBwLmV4dG5hbWUocGF0aCk7XG4gIH1cbiAgcmVzb2x2ZSguLi5wYXRoczogc3RyaW5nW10pOiBBYnNvbHV0ZUZzUGF0aCB7XG4gICAgcmV0dXJuIHAucmVzb2x2ZSguLi5wYXRocykgYXMgQWJzb2x1dGVGc1BhdGg7XG4gIH1cbiAgZGlybmFtZTxUIGV4dGVuZHMgUGF0aFN0cmluZz4oZmlsZTogVCk6IFQge1xuICAgIHJldHVybiBwLmRpcm5hbWUoZmlsZSkgYXMgVDtcbiAgfVxuICBqb2luPFQgZXh0ZW5kcyBQYXRoU3RyaW5nPihiYXNlUGF0aDogVCwgLi4ucGF0aHM6IHN0cmluZ1tdKTogVCB7XG4gICAgcmV0dXJuIHAuam9pbihiYXNlUGF0aCwgLi4ucGF0aHMpIGFzIFQ7XG4gIH1cbn1cbiJdfQ==
174
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRhcHRlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9sYW5ndWFnZS1zZXJ2aWNlL2l2eS9hZGFwdGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7O0lBT0gsK0RBQTZEO0lBQzdELGtGQUFnRjtJQUNoRix3QkFBMEI7SUFHMUIsNkRBQXlDO0lBRXpDO1FBZUUsZ0NBQTZCLE9BQTBCO1lBQTFCLFlBQU8sR0FBUCxPQUFPLENBQW1CO1lBZDlDLGVBQVUsR0FBRyxJQUFJLENBQUM7WUFDbEIsNEJBQXVCLEdBQW9CLEVBQUUsQ0FBQztZQUM5QyxrQkFBYSxHQUF1QixJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQzlDLG1CQUFjLEdBQUcsSUFBSSxDQUFDLENBQU0sc0JBQXNCO1lBQ2xELHVCQUFrQixHQUFHLElBQUksQ0FBQyxDQUFFLHFCQUFxQjtZQUcxRDs7OztlQUlHO1lBQ2MsNEJBQXVCLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7WUFHbkUsSUFBSSxDQUFDLFFBQVEsR0FBRyx3QkFBVyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDO1FBQ3RFLENBQUM7UUFFRCx1Q0FBTSxHQUFOLFVBQU8sRUFBaUI7WUFDdEIsT0FBTyxjQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEIsQ0FBQztRQUVELDJDQUFVLEdBQVYsVUFBVyxRQUFnQjtZQUN6QixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNDLENBQUM7UUFFRCx5Q0FBUSxHQUFSLFVBQVMsUUFBZ0I7WUFDdkIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6QyxDQUFDO1FBRUQsb0RBQW1CLEdBQW5CO1lBQ0UsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFD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QUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDMUMsQ0FBQztnQkFDRCxXQUFXLEVBQUU7b0JBQ1gsT0FBTyxLQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDL0MsQ0FBQztnQkFDRCxjQUFjLEVBQUU7b0JBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQyx3REFBd0QsQ0FBQyxDQUFDO2dCQUM1RSxDQUFDO2FBQ0YsQ0FBQztRQUNKLENBQUM7UUFDRCwrQkFBRyxHQUFIO1lBQ0UsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixFQUFvQixDQUFDO1FBQ2pFLENBQUM7UUFDRCxtQ0FBTyxHQUFQLFVBQVEsSUFBZ0M7WUFDdEMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLENBQUM7UUFDRCxtQ0FBTyxHQUFQO1lBQVEsZUFBa0I7aUJBQWxCLFVBQWtCLEVBQWxCLHFCQUFrQixFQUFsQixJQUFrQjtnQkFBbEIsMEJBQWtCOztZQUN4QixPQUFPLENBQUMsQ0FBQyxPQUFPLE9BQVQsQ0FBQyxtQkFBWSxLQUFLLEVBQW1CLENBQUM7UUFDL0MsQ0FBQztRQUNELG1DQUFPLEdBQVAsVUFBOEIsSUFBTztZQUNuQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFNLENBQUM7UUFDOUIsQ0FBQztRQUNELGdDQUFJLEdBQUosVUFBMkIsUUFBVztZQUFFLGVBQWtCO2lCQUFsQixVQUFrQixFQUFsQixxQkFBa0IsRUFBbEIsSUFBa0I7Z0JBQWxCLDhCQUFrQjs7WUFDeEQsT0FBTyxDQUFDLENBQUMsSUFBSSxPQUFOLENBQUMsb0JBQU0sUUFBUSxHQUFLLEtBQUssRUFBTSxDQUFDO1FBQ3pDLENBQUM7UUFDSCx3QkFBQztJQUFELENBQUMsQUF4Q0QsSUF3Q0M7SUF4Q1ksOENBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbi8qKiBAZmlsZW92ZXJ2aWV3IHByb3ZpZGVzIGFkYXB0ZXJzIGZvciBjb21tdW5pY2F0aW5nIHdpdGggdGhlIG5nIGNvbXBpbGVyICovXG5cbmltcG9ydCB7Q29uZmlndXJhdGlvbkhvc3R9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyLWNsaSc7XG5pbXBvcnQge05nQ29tcGlsZXJBZGFwdGVyfSBmcm9tICdAYW5ndWxhci9jb21waWxlci1jbGkvc3JjL25ndHNjL2NvcmUvYXBpJztcbmltcG9ydCB7QWJzb2x1dGVGc1BhdGgsIEZpbGVTdGF0cywgUGF0aFNlZ21lbnQsIFBhdGhTdHJpbmd9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvZmlsZV9zeXN0ZW0nO1xuaW1wb3J0IHtpc1NoaW19IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2Mvc2hpbXMnO1xuaW1wb3J0IHtnZXRSb290RGlyc30gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXItY2xpL3NyYy9uZ3RzYy91dGlsL3NyYy90eXBlc2NyaXB0JztcbmltcG9ydCAqIGFzIHAgZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0L2xpYi90c3NlcnZlcmxpYnJhcnknO1xuXG5pbXBvcnQge2lzVHlwZVNjcmlwdEZpbGV9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgY2xhc3MgTGFuZ3VhZ2VTZXJ2aWNlQWRhcHRlciBpbXBsZW1lbnRzIE5nQ29tcGlsZXJBZGFwdGVyIHtcbiAgcmVhZG9ubHkgZW50cnlQb2ludCA9IG51bGw7XG4gIHJlYWRvbmx5IGNvbnN0cnVjdGlvbkRpYWdub3N0aWNzOiB0cy5EaWFnbm9zdGljW10gPSBbXTtcbiAgcmVhZG9ubHkgaWdub3JlRm9yRW1pdDogU2V0PHRzLlNvdXJjZUZpbGU+ID0gbmV3IFNldCgpO1xuICByZWFkb25seSBmYWN0b3J5VHJhY2tlciA9IG51bGw7ICAgICAgLy8gbm8gLm5nZmFjdG9yeSBzaGltc1xuICByZWFkb25seSB1bmlmaWVkTW9kdWxlc0hvc3QgPSBudWxsOyAgLy8gb25seSB1c2VkIGluIEJhemVsXG4gIHJlYWRvbmx5IHJvb3REaXJzOiBBYnNvbHV0ZUZzUGF0aFtdO1xuXG4gIC8qKlxuICAgKiBNYXAgb2YgcmVzb3VyY2UgZmlsZW5hbWVzIHRvIHRoZSB2ZXJzaW9uIG9mIHRoZSBmaWxlIGxhc3QgcmVhZCB2aWEgYHJlYWRSZXNvdXJjZWAuXG4gICAqXG4gICAqIFVzZWQgdG8gaW1wbGVtZW50IGBnZXRNb2RpZmllZFJlc291cmNlRmlsZXNgLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBsYXN0UmVhZFJlc291cmNlVmVyc2lvbiA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBwcm9qZWN0OiB0cy5zZXJ2ZXIuUHJvamVjdCkge1xuICAgIHRoaXMucm9vdERpcnMgPSBnZXRSb290RGlycyh0aGlzLCBwcm9qZWN0LmdldENvbXBpbGF0aW9uU2V0dGluZ3MoKSk7XG4gIH1cblxuICBpc1NoaW0oc2Y6IHRzLlNvdXJjZUZpbGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNTaGltKHNmKTtcbiAgfVxuXG4gIGZpbGVFeGlzdHMoZmlsZU5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb2plY3QuZmlsZUV4aXN0cyhmaWxlTmFtZSk7XG4gIH1cblxuICByZWFkRmlsZShmaWxlTmFtZTogc3RyaW5nKTogc3RyaW5nfHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucHJvamVjdC5yZWFkRmlsZShmaWxlTmFtZSk7XG4gIH1cblxuICBnZXRDdXJyZW50RGlyZWN0b3J5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvamVjdC5nZXRDdXJyZW50RGlyZWN0b3J5KCk7XG4gIH1cblxuICBnZXRDYW5vbmljYWxGaWxlTmFtZShmaWxlTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9qZWN0LnByb2plY3RTZXJ2aWNlLnRvQ2Fub25pY2FsRmlsZU5hbWUoZmlsZU5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgcmVhbCBwYXRoIG9mIGEgc3ltbGluay4gVGhpcyBtZXRob2QgaXMgcmVxdWlyZWQgaW4gb3JkZXIgdG9cbiAgICogcmVzb2x2ZSBzeW1saW5rcyBpbiBub2RlX21vZHVsZXMuXG4gICAqL1xuICByZWFscGF0aChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb2plY3QucmVhbHBhdGg/LihwYXRoKSA/PyBwYXRoO1xuICB9XG5cbiAgLyoqXG4gICAqIHJlYWRSZXNvdXJjZSgpIGlzIGFuIEFuZ3VsYXItc3BlY2lmaWMgbWV0aG9kIGZvciByZWFkaW5nIGZpbGVzIHRoYXQgYXJlIG5vdFxuICAgKiBtYW5hZ2VkIGJ5IHRoZSBUUyBjb21waWxlciBob3N0LCBuYW1lbHkgdGVtcGxhdGVzIGFuZCBzdHlsZXNoZWV0cy5cbiAgICogSXQgaXMgYSBtZXRob2Qgb24gRXh0ZW5kZWRUc0NvbXBpbGVySG9zdCwgc2VlXG4gICAqIHBhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvY29yZS9hcGkvc3JjL2ludGVyZmFjZXMudHNcbiAgICovXG4gIHJlYWRSZXNvdXJjZShmaWxlTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoaXNUeXBlU2NyaXB0RmlsZShmaWxlTmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgcmVhZFJlc291cmNlKCkgc2hvdWxkIG5vdCBiZSBjYWxsZWQgb24gVFMgZmlsZTogJHtmaWxlTmFtZX1gKTtcbiAgICB9XG4gICAgLy8gQ2FsbGluZyBnZXRTY3JpcHRTbmFwc2hvdCgpIHdpbGwgYWN0dWFsbHkgY3JlYXRlIGEgU2NyaXB0SW5mbyBpZiBpdCBkb2VzXG4gICAgLy8gbm90IGV4aXN0ISBUaGUgc2FtZSBhcHBsaWVzIGZvciBnZXRTY3JpcHRWZXJzaW9uKCkuXG4gICAgLy8gZ2V0U2NyaXB0SW5mbygpIHdpbGwgbm90IGNyZWF0ZSBvbmUgaWYgaXQgZG9lcyBub3QgZXhpc3QuXG4gICAgLy8gSW4gdGhpcyBjYXNlLCB3ZSAqd2FudCogYSBzY3JpcHQgaW5mbyB0byBiZSBjcmVhdGVkIHNvIHRoYXQgd2UgY291bGRcbiAgICAvLyBrZWVwIHRyYWNrIG9mIGl0cyB2ZXJzaW9uLlxuICAgIGNvbnN0IHNuYXBzaG90ID0gdGhpcy5wcm9qZWN0LmdldFNjcmlwdFNuYXBzaG90KGZpbGVOYW1lKTtcbiAgICBpZiAoIXNuYXBzaG90KSB7XG4gICAgICAvLyBUaGlzIHdvdWxkIGZhaWwgaWYgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3QsIG9yIHJlYWRGaWxlKCkgZmFpbHMgZm9yXG4gICAgICAvLyB3aGF0ZXZlciByZWFzb25zLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZ2V0IHNjcmlwdCBzbmFwc2hvdCB3aGlsZSB0cnlpbmcgdG8gcmVhZCAke2ZpbGVOYW1lfWApO1xuICAgIH1cbiAgICBjb25zdCB2ZXJzaW9uID0gdGhpcy5wcm9qZWN0LmdldFNjcmlwdFZlcnNpb24oZmlsZU5hbWUpO1xuICAgIHRoaXMubGFzdFJlYWRSZXNvdXJjZVZlcnNpb24uc2V0KGZpbGVOYW1lLCB2ZXJzaW9uKTtcbiAgICByZXR1cm4gc25hcHNob3QuZ2V0VGV4dCgwLCBzbmFwc2hvdC5nZXRMZW5ndGgoKSk7XG4gIH1cblxuICBnZXRNb2RpZmllZFJlc291cmNlRmlsZXMoKTogU2V0PHN0cmluZz58dW5kZWZpbmVkIHtcbiAgICBjb25zdCBtb2RpZmllZEZpbGVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgZm9yIChjb25zdCBbZmlsZU5hbWUsIG9sZFZlcnNpb25dIG9mIHRoaXMubGFzdFJlYWRSZXNvdXJjZVZlcnNpb24pIHtcbiAgICAgIGlmICh0aGlzLnByb2plY3QuZ2V0U2NyaXB0VmVyc2lvbihmaWxlTmFtZSkgIT09IG9sZFZlcnNpb24pIHtcbiAgICAgICAgbW9kaWZpZWRGaWxlcy5hZGQoZmlsZU5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbW9kaWZpZWRGaWxlcy5zaXplID4gMCA/IG1vZGlmaWVkRmlsZXMgOiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBVc2VkIHRvIHJlYWQgY29uZmlndXJhdGlvbiBmaWxlcy5cbiAqXG4gKiBBIGxhbmd1YWdlIHNlcnZpY2UgcGFyc2UgY29uZmlndXJhdGlvbiBob3N0IGlzIGluZGVwZW5kZW50IG9mIHRoZSBhZGFwdGVyXG4gKiBiZWNhdXNlIHNpZ25hdHVyZXMgb2YgY2FsbHMgbGlrZSBgRmlsZVN5c3RlbSNyZWFkRmlsZWAgYXJlIGEgYml0IHN0cmljdGVyXG4gKiB0aGFuIHRob3NlIG9uIHRoZSBhZGFwdGVyLlxuICovXG5leHBvcnQgY2xhc3MgTFNQYXJzZUNvbmZpZ0hvc3QgaW1wbGVtZW50cyBDb25maWd1cmF0aW9uSG9zdCB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgc2VydmVySG9zdDogdHMuc2VydmVyLlNlcnZlckhvc3QpIHt9XG4gIGV4aXN0cyhwYXRoOiBBYnNvbHV0ZUZzUGF0aCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlcnZlckhvc3QuZmlsZUV4aXN0cyhwYXRoKSB8fCB0aGlzLnNlcnZlckhvc3QuZGlyZWN0b3J5RXhpc3RzKHBhdGgpO1xuICB9XG4gIHJlYWRGaWxlKHBhdGg6IEFic29sdXRlRnNQYXRoKTogc3RyaW5nIHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5zZXJ2ZXJIb3N0LnJlYWRGaWxlKHBhdGgpO1xuICAgIGlmIChjb250ZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGFuZ3VhZ2VTZXJ2aWNlRlMjcmVhZEZpbGUgY2FsbGVkIG9uIHVuYXZhaWxhYmxlIGZpbGUgJHtwYXRofWApO1xuICAgIH1cbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuICBsc3RhdChwYXRoOiBBYnNvbHV0ZUZzUGF0aCk6IEZpbGVTdGF0cyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzRmlsZTogKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2ZXJIb3N0LmZpbGVFeGlzdHMocGF0aCk7XG4gICAgICB9LFxuICAgICAgaXNEaXJlY3Rvcnk6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmVySG9zdC5kaXJlY3RvcnlFeGlzdHMocGF0aCk7XG4gICAgICB9LFxuICAgICAgaXNTeW1ib2xpY0xpbms6ICgpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBMYW5ndWFnZVNlcnZpY2VGUyNsc3RhdCNpc1N5bWJvbGljTGluayBub3QgaW1wbGVtZW50ZWRgKTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuICBwd2QoKTogQWJzb2x1dGVGc1BhdGgge1xuICAgIHJldHVybiB0aGlzLnNlcnZlckhvc3QuZ2V0Q3VycmVudERpcmVjdG9yeSgpIGFzIEFic29sdXRlRnNQYXRoO1xuICB9XG4gIGV4dG5hbWUocGF0aDogQWJzb2x1dGVGc1BhdGh8UGF0aFNlZ21lbnQpOiBzdHJpbmcge1xuICAgIHJldHVybiBwLmV4dG5hbWUocGF0aCk7XG4gIH1cbiAgcmVzb2x2ZSguLi5wYXRoczogc3RyaW5nW10pOiBBYnNvbHV0ZUZzUGF0aCB7XG4gICAgcmV0dXJuIHAucmVzb2x2ZSguLi5wYXRocykgYXMgQWJzb2x1dGVGc1BhdGg7XG4gIH1cbiAgZGlybmFtZTxUIGV4dGVuZHMgUGF0aFN0cmluZz4oZmlsZTogVCk6IFQge1xuICAgIHJldHVybiBwLmRpcm5hbWUoZmlsZSkgYXMgVDtcbiAgfVxuICBqb2luPFQgZXh0ZW5kcyBQYXRoU3RyaW5nPihiYXNlUGF0aDogVCwgLi4ucGF0aHM6IHN0cmluZ1tdKTogVCB7XG4gICAgcmV0dXJuIHAuam9pbihiYXNlUGF0aCwgLi4ucGF0aHMpIGFzIFQ7XG4gIH1cbn1cbiJdfQ==
@@ -28,14 +28,5 @@ export declare class CompilerFactory {
28
28
  private lastKnownProgram;
29
29
  constructor(adapter: LanguageServiceAdapter, programStrategy: TypeCheckingProgramStrategy, options: NgCompilerOptions);
30
30
  getOrCreate(): NgCompiler;
31
- /**
32
- * Create a new instance of the Ivy compiler if the program has changed since
33
- * the last time the compiler was instantiated. If the program has not changed,
34
- * return the existing instance.
35
- * @param fileName override the template if this is an external template file
36
- * @param options angular compiler options
37
- */
38
- getOrCreateWithChangedFile(fileName: string): NgCompiler;
39
- private overrideTemplate;
40
31
  registerLastKnownProgram(): void;
41
32
  }
@@ -11,17 +11,14 @@
11
11
  if (v !== undefined) module.exports = v;
12
12
  }
13
13
  else if (typeof define === "function" && define.amd) {
14
- define("@angular/language-service/ivy/compiler_factory", ["require", "exports", "tslib", "@angular/compiler-cli/src/ngtsc/core", "@angular/compiler-cli/src/ngtsc/incremental", "typescript/lib/tsserverlibrary", "@angular/language-service/ivy/utils"], factory);
14
+ define("@angular/language-service/ivy/compiler_factory", ["require", "exports", "@angular/compiler-cli/src/ngtsc/core", "@angular/compiler-cli/src/ngtsc/incremental"], factory);
15
15
  }
16
16
  })(function (require, exports) {
17
17
  "use strict";
18
18
  Object.defineProperty(exports, "__esModule", { value: true });
19
19
  exports.CompilerFactory = void 0;
20
- var tslib_1 = require("tslib");
21
20
  var core_1 = require("@angular/compiler-cli/src/ngtsc/core");
22
21
  var incremental_1 = require("@angular/compiler-cli/src/ngtsc/incremental");
23
- var ts = require("typescript/lib/tsserverlibrary");
24
- var utils_1 = require("@angular/language-service/ivy/utils");
25
22
  /**
26
23
  * Manages the `NgCompiler` instance which backs the language service, updating or replacing it as
27
24
  * needed to produce an up-to-date understanding of the current program.
@@ -41,60 +38,27 @@
41
38
  this.lastKnownProgram = null;
42
39
  }
43
40
  CompilerFactory.prototype.getOrCreate = function () {
41
+ var _a;
44
42
  var program = this.programStrategy.getProgram();
45
- if (this.compiler === null || program !== this.lastKnownProgram) {
46
- var ticket = void 0;
47
- if (this.compiler === null || this.lastKnownProgram === null) {
48
- ticket = core_1.freshCompilationTicket(program, this.options, this.incrementalStrategy, this.programStrategy, true, true);
43
+ var modifiedResourceFiles = (_a = this.adapter.getModifiedResourceFiles()) !== null && _a !== void 0 ? _a : new Set();
44
+ if (this.compiler !== null && program === this.lastKnownProgram) {
45
+ if (modifiedResourceFiles.size > 0) {
46
+ // Only resource files have changed since the last NgCompiler was created.
47
+ var ticket_1 = core_1.resourceChangeTicket(this.compiler, modifiedResourceFiles);
48
+ this.compiler = core_1.NgCompiler.fromTicket(ticket_1, this.adapter);
49
49
  }
50
- else {
51
- ticket = core_1.incrementalFromCompilerTicket(this.compiler, program, this.incrementalStrategy, this.programStrategy, new Set());
52
- }
53
- this.compiler = core_1.NgCompiler.fromTicket(ticket, this.adapter);
54
- this.lastKnownProgram = program;
50
+ return this.compiler;
55
51
  }
56
- return this.compiler;
57
- };
58
- /**
59
- * Create a new instance of the Ivy compiler if the program has changed since
60
- * the last time the compiler was instantiated. If the program has not changed,
61
- * return the existing instance.
62
- * @param fileName override the template if this is an external template file
63
- * @param options angular compiler options
64
- */
65
- CompilerFactory.prototype.getOrCreateWithChangedFile = function (fileName) {
66
- var compiler = this.getOrCreate();
67
- if (utils_1.isExternalTemplate(fileName)) {
68
- this.overrideTemplate(fileName, compiler);
52
+ var ticket;
53
+ if (this.compiler === null || this.lastKnownProgram === null) {
54
+ ticket = core_1.freshCompilationTicket(program, this.options, this.incrementalStrategy, this.programStrategy, true, true);
69
55
  }
70
- return compiler;
71
- };
72
- CompilerFactory.prototype.overrideTemplate = function (fileName, compiler) {
73
- var e_1, _a;
74
- if (!this.adapter.isTemplateDirty(fileName)) {
75
- return;
76
- }
77
- // 1. Get the latest snapshot
78
- var latestTemplate = this.adapter.readResource(fileName);
79
- // 2. Find all components that use the template
80
- var ttc = compiler.getTemplateTypeChecker();
81
- var components = compiler.getComponentsWithTemplateFile(fileName);
82
- try {
83
- // 3. Update component template
84
- for (var components_1 = tslib_1.__values(components), components_1_1 = components_1.next(); !components_1_1.done; components_1_1 = components_1.next()) {
85
- var component = components_1_1.value;
86
- if (ts.isClassDeclaration(component)) {
87
- ttc.overrideComponentTemplate(component, latestTemplate);
88
- }
89
- }
90
- }
91
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
92
- finally {
93
- try {
94
- if (components_1_1 && !components_1_1.done && (_a = components_1.return)) _a.call(components_1);
95
- }
96
- finally { if (e_1) throw e_1.error; }
56
+ else {
57
+ ticket = core_1.incrementalFromCompilerTicket(this.compiler, program, this.incrementalStrategy, this.programStrategy, modifiedResourceFiles);
97
58
  }
59
+ this.compiler = core_1.NgCompiler.fromTicket(ticket, this.adapter);
60
+ this.lastKnownProgram = program;
61
+ return this.compiler;
98
62
  };
99
63
  CompilerFactory.prototype.registerLastKnownProgram = function () {
100
64
  this.lastKnownProgram = this.programStrategy.getProgram();
@@ -103,4 +67,4 @@
103
67
  }());
104
68
  exports.CompilerFactory = CompilerFactory;
105
69
  });
106
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGlsZXJfZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2xhbmd1YWdlLXNlcnZpY2UvaXZ5L2NvbXBpbGVyX2ZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7OztJQUVILDZEQUEwSTtJQUUxSSwyRUFBNEY7SUFFNUYsbURBQXFEO0lBR3JELDZEQUEyQztJQUUzQzs7Ozs7Ozs7T0FRRztJQUNIO1FBS0UseUJBQ3FCLE9BQStCLEVBQy9CLGVBQTRDLEVBQzVDLE9BQTBCO1lBRjFCLFlBQU8sR0FBUCxPQUFPLENBQXdCO1lBQy9CLG9CQUFlLEdBQWYsZUFBZSxDQUE2QjtZQUM1QyxZQUFPLEdBQVAsT0FBTyxDQUFtQjtZQVA5Qix3QkFBbUIsR0FBRyxJQUFJLDZDQUErQixFQUFFLENBQUM7WUFDckUsYUFBUSxHQUFvQixJQUFJLENBQUM7WUFDakMscUJBQWdCLEdBQW9CLElBQUksQ0FBQztRQU05QyxDQUFDO1FBRUoscUNBQVcsR0FBWDtZQUNFLElBQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbEQsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssSUFBSSxDQUFDLGdCQUFnQixFQUFFO2dCQUMvRCxJQUFJLE1BQU0sU0FBbUIsQ0FBQztnQkFDOUIsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEtBQUssSUFBSSxFQUFFO29CQUM1RCxNQUFNLEdBQUcsNkJBQXNCLENBQzNCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztpQkFDeEY7cUJBQU07b0JBQ0wsTUFBTSxHQUFHLG9DQUE2QixDQUNsQyxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7aUJBQ3hGO2dCQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsaUJBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDNUQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE9BQU8sQ0FBQzthQUNqQztZQUNELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUN2QixDQUFDO1FBRUQ7Ozs7OztXQU1HO1FBQ0gsb0RBQTBCLEdBQTFCLFVBQTJCLFFBQWdCO1lBQ3pDLElBQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNwQyxJQUFJLDBCQUFrQixDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUNoQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2FBQzNDO1lBQ0QsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQztRQUVPLDBDQUFnQixHQUF4QixVQUF5QixRQUFnQixFQUFFLFFBQW9COztZQUM3RCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQzNDLE9BQU87YUFDUjtZQUNELDZCQUE2QjtZQUM3QixJQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMzRCwrQ0FBK0M7WUFDL0MsSUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDOUMsSUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLDZCQUE2QixDQUFDLFFBQVEsQ0FBQyxDQUFDOztnQkFDcEUsK0JBQStCO2dCQUMvQixLQUF3QixJQUFBLGVBQUEsaUJBQUEsVUFBVSxDQUFBLHNDQUFBLDhEQUFFO29CQUEvQixJQUFNLFNBQVMsdUJBQUE7b0JBQ2xCLElBQUksRUFBRSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxFQUFFO3dCQUNwQyxHQUFHLENBQUMseUJBQXlCLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxDQUFDO3FCQUMxRDtpQkFDRjs7Ozs7Ozs7O1FBQ0gsQ0FBQztRQUVELGtEQUF3QixHQUF4QjtZQUNFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzVELENBQUM7UUFDSCxzQkFBQztJQUFELENBQUMsQUEvREQsSUErREM7SUEvRFksMENBQWUiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtDb21waWxhdGlvblRpY2tldCwgZnJlc2hDb21waWxhdGlvblRpY2tldCwgaW5jcmVtZW50YWxGcm9tQ29tcGlsZXJUaWNrZXQsIE5nQ29tcGlsZXJ9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvY29yZSc7XG5pbXBvcnQge05nQ29tcGlsZXJPcHRpb25zfSBmcm9tICdAYW5ndWxhci9jb21waWxlci1jbGkvc3JjL25ndHNjL2NvcmUvYXBpJztcbmltcG9ydCB7VHJhY2tlZEluY3JlbWVudGFsQnVpbGRTdHJhdGVneX0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXItY2xpL3NyYy9uZ3RzYy9pbmNyZW1lbnRhbCc7XG5pbXBvcnQge1R5cGVDaGVja2luZ1Byb2dyYW1TdHJhdGVneX0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXItY2xpL3NyYy9uZ3RzYy90eXBlY2hlY2svYXBpJztcbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQvbGliL3Rzc2VydmVybGlicmFyeSc7XG5cbmltcG9ydCB7TGFuZ3VhZ2VTZXJ2aWNlQWRhcHRlcn0gZnJvbSAnLi9hZGFwdGVycyc7XG5pbXBvcnQge2lzRXh0ZXJuYWxUZW1wbGF0ZX0gZnJvbSAnLi91dGlscyc7XG5cbi8qKlxuICogTWFuYWdlcyB0aGUgYE5nQ29tcGlsZXJgIGluc3RhbmNlIHdoaWNoIGJhY2tzIHRoZSBsYW5ndWFnZSBzZXJ2aWNlLCB1cGRhdGluZyBvciByZXBsYWNpbmcgaXQgYXNcbiAqIG5lZWRlZCB0byBwcm9kdWNlIGFuIHVwLXRvLWRhdGUgdW5kZXJzdGFuZGluZyBvZiB0aGUgY3VycmVudCBwcm9ncmFtLlxuICpcbiAqIFRPRE8oYWx4aHViKTogY3VycmVudGx5IHRoZSBvcHRpb25zIHVzZWQgZm9yIHRoZSBjb21waWxlciBhcmUgc3BlY2lmaWVkIGF0IGBDb21waWxlckZhY3RvcnlgXG4gKiBjb25zdHJ1Y3Rpb24sIGFuZCBhcmUgbm90IGNoYW5nYWJsZS4gSW4gYSByZWFsIHByb2plY3QsIHVzZXJzIGNhbiB1cGRhdGUgYHRzY29uZmlnLmpzb25gLiBXZSBuZWVkXG4gKiB0byBwcm9wZXJseSBoYW5kbGUgYSBjaGFuZ2UgaW4gdGhlIGNvbXBpbGVyIG9wdGlvbnMsIGVpdGhlciBieSBoYXZpbmcgYW4gQVBJIHRvIHVwZGF0ZSB0aGVcbiAqIGBDb21waWxlckZhY3RvcnlgIHRvIHVzZSBuZXcgb3B0aW9ucywgb3IgYnkgcmVwbGFjaW5nIGl0IGVudGlyZWx5LlxuICovXG5leHBvcnQgY2xhc3MgQ29tcGlsZXJGYWN0b3J5IHtcbiAgcHJpdmF0ZSByZWFkb25seSBpbmNyZW1lbnRhbFN0cmF0ZWd5ID0gbmV3IFRyYWNrZWRJbmNyZW1lbnRhbEJ1aWxkU3RyYXRlZ3koKTtcbiAgcHJpdmF0ZSBjb21waWxlcjogTmdDb21waWxlcnxudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBsYXN0S25vd25Qcm9ncmFtOiB0cy5Qcm9ncmFtfG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgcHJpdmF0ZSByZWFkb25seSBhZGFwdGVyOiBMYW5ndWFnZVNlcnZpY2VBZGFwdGVyLFxuICAgICAgcHJpdmF0ZSByZWFkb25seSBwcm9ncmFtU3RyYXRlZ3k6IFR5cGVDaGVja2luZ1Byb2dyYW1TdHJhdGVneSxcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogTmdDb21waWxlck9wdGlvbnMsXG4gICkge31cblxuICBnZXRPckNyZWF0ZSgpOiBOZ0NvbXBpbGVyIHtcbiAgICBjb25zdCBwcm9ncmFtID0gdGhpcy5wcm9ncmFtU3RyYXRlZ3kuZ2V0UHJvZ3JhbSgpO1xuICAgIGlmICh0aGlzLmNvbXBpbGVyID09PSBudWxsIHx8IHByb2dyYW0gIT09IHRoaXMubGFzdEtub3duUHJvZ3JhbSkge1xuICAgICAgbGV0IHRpY2tldDogQ29tcGlsYXRpb25UaWNrZXQ7XG4gICAgICBpZiAodGhpcy5jb21waWxlciA9PT0gbnVsbCB8fCB0aGlzLmxhc3RLbm93blByb2dyYW0gPT09IG51bGwpIHtcbiAgICAgICAgdGlja2V0ID0gZnJlc2hDb21waWxhdGlvblRpY2tldChcbiAgICAgICAgICAgIHByb2dyYW0sIHRoaXMub3B0aW9ucywgdGhpcy5pbmNyZW1lbnRhbFN0cmF0ZWd5LCB0aGlzLnByb2dyYW1TdHJhdGVneSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aWNrZXQgPSBpbmNyZW1lbnRhbEZyb21Db21waWxlclRpY2tldChcbiAgICAgICAgICAgIHRoaXMuY29tcGlsZXIsIHByb2dyYW0sIHRoaXMuaW5jcmVtZW50YWxTdHJhdGVneSwgdGhpcy5wcm9ncmFtU3RyYXRlZ3ksIG5ldyBTZXQoKSk7XG4gICAgICB9XG4gICAgICB0aGlzLmNvbXBpbGVyID0gTmdDb21waWxlci5mcm9tVGlja2V0KHRpY2tldCwgdGhpcy5hZGFwdGVyKTtcbiAgICAgIHRoaXMubGFzdEtub3duUHJvZ3JhbSA9IHByb2dyYW07XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNvbXBpbGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgSXZ5IGNvbXBpbGVyIGlmIHRoZSBwcm9ncmFtIGhhcyBjaGFuZ2VkIHNpbmNlXG4gICAqIHRoZSBsYXN0IHRpbWUgdGhlIGNvbXBpbGVyIHdhcyBpbnN0YW50aWF0ZWQuIElmIHRoZSBwcm9ncmFtIGhhcyBub3QgY2hhbmdlZCxcbiAgICogcmV0dXJuIHRoZSBleGlzdGluZyBpbnN0YW5jZS5cbiAgICogQHBhcmFtIGZpbGVOYW1lIG92ZXJyaWRlIHRoZSB0ZW1wbGF0ZSBpZiB0aGlzIGlzIGFuIGV4dGVybmFsIHRlbXBsYXRlIGZpbGVcbiAgICogQHBhcmFtIG9wdGlvbnMgYW5ndWxhciBjb21waWxlciBvcHRpb25zXG4gICAqL1xuICBnZXRPckNyZWF0ZVdpdGhDaGFuZ2VkRmlsZShmaWxlTmFtZTogc3RyaW5nKTogTmdDb21waWxlciB7XG4gICAgY29uc3QgY29tcGlsZXIgPSB0aGlzLmdldE9yQ3JlYXRlKCk7XG4gICAgaWYgKGlzRXh0ZXJuYWxUZW1wbGF0ZShmaWxlTmFtZSkpIHtcbiAgICAgIHRoaXMub3ZlcnJpZGVUZW1wbGF0ZShmaWxlTmFtZSwgY29tcGlsZXIpO1xuICAgIH1cbiAgICByZXR1cm4gY29tcGlsZXI7XG4gIH1cblxuICBwcml2YXRlIG92ZXJyaWRlVGVtcGxhdGUoZmlsZU5hbWU6IHN0cmluZywgY29tcGlsZXI6IE5nQ29tcGlsZXIpIHtcbiAgICBpZiAoIXRoaXMuYWRhcHRlci5pc1RlbXBsYXRlRGlydHkoZmlsZU5hbWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIDEuIEdldCB0aGUgbGF0ZXN0IHNuYXBzaG90XG4gICAgY29uc3QgbGF0ZXN0VGVtcGxhdGUgPSB0aGlzLmFkYXB0ZXIucmVhZFJlc291cmNlKGZpbGVOYW1lKTtcbiAgICAvLyAyLiBGaW5kIGFsbCBjb21wb25lbnRzIHRoYXQgdXNlIHRoZSB0ZW1wbGF0ZVxuICAgIGNvbnN0IHR0YyA9IGNvbXBpbGVyLmdldFRlbXBsYXRlVHlwZUNoZWNrZXIoKTtcbiAgICBjb25zdCBjb21wb25lbnRzID0gY29tcGlsZXIuZ2V0Q29tcG9uZW50c1dpdGhUZW1wbGF0ZUZpbGUoZmlsZU5hbWUpO1xuICAgIC8vIDMuIFVwZGF0ZSBjb21wb25lbnQgdGVtcGxhdGVcbiAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBjb21wb25lbnRzKSB7XG4gICAgICBpZiAodHMuaXNDbGFzc0RlY2xhcmF0aW9uKGNvbXBvbmVudCkpIHtcbiAgICAgICAgdHRjLm92ZXJyaWRlQ29tcG9uZW50VGVtcGxhdGUoY29tcG9uZW50LCBsYXRlc3RUZW1wbGF0ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJMYXN0S25vd25Qcm9ncmFtKCkge1xuICAgIHRoaXMubGFzdEtub3duUHJvZ3JhbSA9IHRoaXMucHJvZ3JhbVN0cmF0ZWd5LmdldFByb2dyYW0oKTtcbiAgfVxufVxuIl19
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGlsZXJfZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2xhbmd1YWdlLXNlcnZpY2UvaXZ5L2NvbXBpbGVyX2ZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7O0lBRUgsNkRBQWdLO0lBRWhLLDJFQUE0RjtJQU81Rjs7Ozs7Ozs7T0FRRztJQUNIO1FBS0UseUJBQ3FCLE9BQStCLEVBQy9CLGVBQTRDLEVBQzVDLE9BQTBCO1lBRjFCLFlBQU8sR0FBUCxPQUFPLENBQXdCO1lBQy9CLG9CQUFlLEdBQWYsZUFBZSxDQUE2QjtZQUM1QyxZQUFPLEdBQVAsT0FBTyxDQUFtQjtZQVA5Qix3QkFBbUIsR0FBRyxJQUFJLDZDQUErQixFQUFFLENBQUM7WUFDckUsYUFBUSxHQUFvQixJQUFJLENBQUM7WUFDakMscUJBQWdCLEdBQW9CLElBQUksQ0FBQztRQU05QyxDQUFDO1FBRUoscUNBQVcsR0FBWDs7WUFDRSxJQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2xELElBQU0scUJBQXFCLFNBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsRUFBRSxtQ0FBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBRW5GLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDL0QsSUFBSSxxQkFBcUIsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFO29CQUNsQywwRUFBMEU7b0JBQzFFLElBQU0sUUFBTSxHQUFHLDJCQUFvQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUscUJBQXFCLENBQUMsQ0FBQztvQkFDMUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxpQkFBVSxDQUFDLFVBQVUsQ0FBQyxRQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2lCQUM3RDtnQkFFRCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7YUFDdEI7WUFFRCxJQUFJLE1BQXlCLENBQUM7WUFDOUIsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEtBQUssSUFBSSxFQUFFO2dCQUM1RCxNQUFNLEdBQUcsNkJBQXNCLENBQzNCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQzthQUN4RjtpQkFBTTtnQkFDTCxNQUFNLEdBQUcsb0NBQTZCLENBQ2xDLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUN0RSxxQkFBcUIsQ0FBQyxDQUFDO2FBQzVCO1lBQ0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxpQkFBVSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzVELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUM7WUFDaEMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3ZCLENBQUM7UUFFRCxrREFBd0IsR0FBeEI7WUFDRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUM1RCxDQUFDO1FBQ0gsc0JBQUM7SUFBRCxDQUFDLEFBMUNELElBMENDO0lBMUNZLDBDQUFlIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7Q29tcGlsYXRpb25UaWNrZXQsIGZyZXNoQ29tcGlsYXRpb25UaWNrZXQsIGluY3JlbWVudGFsRnJvbUNvbXBpbGVyVGlja2V0LCBOZ0NvbXBpbGVyLCByZXNvdXJjZUNoYW5nZVRpY2tldH0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXItY2xpL3NyYy9uZ3RzYy9jb3JlJztcbmltcG9ydCB7TmdDb21waWxlck9wdGlvbnN9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvY29yZS9hcGknO1xuaW1wb3J0IHtUcmFja2VkSW5jcmVtZW50YWxCdWlsZFN0cmF0ZWd5fSBmcm9tICdAYW5ndWxhci9jb21waWxlci1jbGkvc3JjL25ndHNjL2luY3JlbWVudGFsJztcbmltcG9ydCB7VHlwZUNoZWNraW5nUHJvZ3JhbVN0cmF0ZWd5fSBmcm9tICdAYW5ndWxhci9jb21waWxlci1jbGkvc3JjL25ndHNjL3R5cGVjaGVjay9hcGknO1xuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdC9saWIvdHNzZXJ2ZXJsaWJyYXJ5JztcblxuaW1wb3J0IHtMYW5ndWFnZVNlcnZpY2VBZGFwdGVyfSBmcm9tICcuL2FkYXB0ZXJzJztcbmltcG9ydCB7aXNFeHRlcm5hbFRlbXBsYXRlfSBmcm9tICcuL3V0aWxzJztcblxuLyoqXG4gKiBNYW5hZ2VzIHRoZSBgTmdDb21waWxlcmAgaW5zdGFuY2Ugd2hpY2ggYmFja3MgdGhlIGxhbmd1YWdlIHNlcnZpY2UsIHVwZGF0aW5nIG9yIHJlcGxhY2luZyBpdCBhc1xuICogbmVlZGVkIHRvIHByb2R1Y2UgYW4gdXAtdG8tZGF0ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjdXJyZW50IHByb2dyYW0uXG4gKlxuICogVE9ETyhhbHhodWIpOiBjdXJyZW50bHkgdGhlIG9wdGlvbnMgdXNlZCBmb3IgdGhlIGNvbXBpbGVyIGFyZSBzcGVjaWZpZWQgYXQgYENvbXBpbGVyRmFjdG9yeWBcbiAqIGNvbnN0cnVjdGlvbiwgYW5kIGFyZSBub3QgY2hhbmdhYmxlLiBJbiBhIHJlYWwgcHJvamVjdCwgdXNlcnMgY2FuIHVwZGF0ZSBgdHNjb25maWcuanNvbmAuIFdlIG5lZWRcbiAqIHRvIHByb3Blcmx5IGhhbmRsZSBhIGNoYW5nZSBpbiB0aGUgY29tcGlsZXIgb3B0aW9ucywgZWl0aGVyIGJ5IGhhdmluZyBhbiBBUEkgdG8gdXBkYXRlIHRoZVxuICogYENvbXBpbGVyRmFjdG9yeWAgdG8gdXNlIG5ldyBvcHRpb25zLCBvciBieSByZXBsYWNpbmcgaXQgZW50aXJlbHkuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb21waWxlckZhY3Rvcnkge1xuICBwcml2YXRlIHJlYWRvbmx5IGluY3JlbWVudGFsU3RyYXRlZ3kgPSBuZXcgVHJhY2tlZEluY3JlbWVudGFsQnVpbGRTdHJhdGVneSgpO1xuICBwcml2YXRlIGNvbXBpbGVyOiBOZ0NvbXBpbGVyfG51bGwgPSBudWxsO1xuICBwcml2YXRlIGxhc3RLbm93blByb2dyYW06IHRzLlByb2dyYW18bnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IGFkYXB0ZXI6IExhbmd1YWdlU2VydmljZUFkYXB0ZXIsXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IHByb2dyYW1TdHJhdGVneTogVHlwZUNoZWNraW5nUHJvZ3JhbVN0cmF0ZWd5LFxuICAgICAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBOZ0NvbXBpbGVyT3B0aW9ucyxcbiAgKSB7fVxuXG4gIGdldE9yQ3JlYXRlKCk6IE5nQ29tcGlsZXIge1xuICAgIGNvbnN0IHByb2dyYW0gPSB0aGlzLnByb2dyYW1TdHJhdGVneS5nZXRQcm9ncmFtKCk7XG4gICAgY29uc3QgbW9kaWZpZWRSZXNvdXJjZUZpbGVzID0gdGhpcy5hZGFwdGVyLmdldE1vZGlmaWVkUmVzb3VyY2VGaWxlcygpID8/IG5ldyBTZXQoKTtcblxuICAgIGlmICh0aGlzLmNvbXBpbGVyICE9PSBudWxsICYmIHByb2dyYW0gPT09IHRoaXMubGFzdEtub3duUHJvZ3JhbSkge1xuICAgICAgaWYgKG1vZGlmaWVkUmVzb3VyY2VGaWxlcy5zaXplID4gMCkge1xuICAgICAgICAvLyBPbmx5IHJlc291cmNlIGZpbGVzIGhhdmUgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCBOZ0NvbXBpbGVyIHdhcyBjcmVhdGVkLlxuICAgICAgICBjb25zdCB0aWNrZXQgPSByZXNvdXJjZUNoYW5nZVRpY2tldCh0aGlzLmNvbXBpbGVyLCBtb2RpZmllZFJlc291cmNlRmlsZXMpO1xuICAgICAgICB0aGlzLmNvbXBpbGVyID0gTmdDb21waWxlci5mcm9tVGlja2V0KHRpY2tldCwgdGhpcy5hZGFwdGVyKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuY29tcGlsZXI7XG4gICAgfVxuXG4gICAgbGV0IHRpY2tldDogQ29tcGlsYXRpb25UaWNrZXQ7XG4gICAgaWYgKHRoaXMuY29tcGlsZXIgPT09IG51bGwgfHwgdGhpcy5sYXN0S25vd25Qcm9ncmFtID09PSBudWxsKSB7XG4gICAgICB0aWNrZXQgPSBmcmVzaENvbXBpbGF0aW9uVGlja2V0KFxuICAgICAgICAgIHByb2dyYW0sIHRoaXMub3B0aW9ucywgdGhpcy5pbmNyZW1lbnRhbFN0cmF0ZWd5LCB0aGlzLnByb2dyYW1TdHJhdGVneSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRpY2tldCA9IGluY3JlbWVudGFsRnJvbUNvbXBpbGVyVGlja2V0KFxuICAgICAgICAgIHRoaXMuY29tcGlsZXIsIHByb2dyYW0sIHRoaXMuaW5jcmVtZW50YWxTdHJhdGVneSwgdGhpcy5wcm9ncmFtU3RyYXRlZ3ksXG4gICAgICAgICAgbW9kaWZpZWRSZXNvdXJjZUZpbGVzKTtcbiAgICB9XG4gICAgdGhpcy5jb21waWxlciA9IE5nQ29tcGlsZXIuZnJvbVRpY2tldCh0aWNrZXQsIHRoaXMuYWRhcHRlcik7XG4gICAgdGhpcy5sYXN0S25vd25Qcm9ncmFtID0gcHJvZ3JhbTtcbiAgICByZXR1cm4gdGhpcy5jb21waWxlcjtcbiAgfVxuXG4gIHJlZ2lzdGVyTGFzdEtub3duUHJvZ3JhbSgpIHtcbiAgICB0aGlzLmxhc3RLbm93blByb2dyYW0gPSB0aGlzLnByb2dyYW1TdHJhdGVneS5nZXRQcm9ncmFtKCk7XG4gIH1cbn1cbiJdfQ==