raain-app 1.2.6 → 1.2.10

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.
@@ -18,7 +18,7 @@ export class Cache {
18
18
  this._cache[key] = value;
19
19
  const length = Object.getOwnPropertyNames(this._cache).length;
20
20
  if (length > 30) {
21
- console.warn('cache size exceed ? do a restart ?', length);
21
+ console.warn('Pb on cache size exceed ? do a restart ?', length);
22
22
  }
23
23
  }
24
24
  }
@@ -30,4 +30,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
30
30
  providedIn: 'root'
31
31
  }]
32
32
  }], ctorParameters: function () { return []; } });
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcHAvc2hhcmVkL2NhY2hlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQzs7QUFLekMsTUFBTSxPQUFPLEtBQUs7SUFJaEI7UUFDRSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRU0sS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFXLEVBQUUsV0FBVztRQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDcEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNyQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxNQUFNLFdBQVcsRUFBRSxDQUFDLENBQUM7U0FDekM7YUFBTTtZQUNMLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQ2xDO1FBQ0QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFTSxRQUFRLENBQUMsR0FBVyxFQUFFLEtBQVU7UUFDckMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7UUFFekIsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDOUQsSUFBSSxNQUFNLEdBQUcsRUFBRSxFQUFFO1lBQ2YsT0FBTyxDQUFDLElBQUksQ0FBQyxvQ0FBb0MsRUFBRSxNQUFNLENBQUMsQ0FBQztTQUM1RDtJQUNILENBQUM7O21HQXpCVSxLQUFLO3VHQUFMLEtBQUssY0FGSixNQUFNOzRGQUVQLEtBQUs7a0JBSGpCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQ2FjaGUge1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2NhY2hlOiBhbnk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fY2FjaGUgPSB7fTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRWYWx1ZShrZXk6IHN0cmluZywgYXN5bmNHZXR0ZXIpOiBQcm9taXNlPGFueT4ge1xuICAgIGlmICghdGhpcy5fY2FjaGUuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgY29uc29sZS5sb2coJ2NhY2hlIG5vdCBkb25lOiAnLCBrZXkpO1xuICAgICAgdGhpcy5wdXRWYWx1ZShrZXksIGF3YWl0IGFzeW5jR2V0dGVyKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZygnY2FjaGUgZG9uZTogJywga2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlW2tleV07XG4gIH1cblxuICBwdWJsaWMgcHV0VmFsdWUoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9jYWNoZVtrZXldID0gdmFsdWU7XG5cbiAgICBjb25zdCBsZW5ndGggPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzLl9jYWNoZSkubGVuZ3RoO1xuICAgIGlmIChsZW5ndGggPiAzMCkge1xuICAgICAgY29uc29sZS53YXJuKCdjYWNoZSBzaXplIGV4Y2VlZCA/IGRvIGEgcmVzdGFydCA/JywgbGVuZ3RoKTtcbiAgICB9XG4gIH1cblxufVxuIl19
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcHAvc2hhcmVkL2NhY2hlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQzs7QUFLekMsTUFBTSxPQUFPLEtBQUs7SUFJaEI7UUFDRSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRU0sS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFXLEVBQUUsV0FBVztRQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDcEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNyQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxNQUFNLFdBQVcsRUFBRSxDQUFDLENBQUM7U0FDekM7YUFBTTtZQUNMLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQ2xDO1FBQ0QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFTSxRQUFRLENBQUMsR0FBVyxFQUFFLEtBQVU7UUFDckMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7UUFFekIsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDOUQsSUFBSSxNQUFNLEdBQUcsRUFBRSxFQUFFO1lBQ2YsT0FBTyxDQUFDLElBQUksQ0FBQywwQ0FBMEMsRUFBRSxNQUFNLENBQUMsQ0FBQztTQUNsRTtJQUNILENBQUM7O21HQXpCVSxLQUFLO3VHQUFMLEtBQUssY0FGSixNQUFNOzRGQUVQLEtBQUs7a0JBSGpCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQ2FjaGUge1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2NhY2hlOiBhbnk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fY2FjaGUgPSB7fTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRWYWx1ZShrZXk6IHN0cmluZywgYXN5bmNHZXR0ZXIpOiBQcm9taXNlPGFueT4ge1xuICAgIGlmICghdGhpcy5fY2FjaGUuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgY29uc29sZS5sb2coJ2NhY2hlIG5vdCBkb25lOiAnLCBrZXkpO1xuICAgICAgdGhpcy5wdXRWYWx1ZShrZXksIGF3YWl0IGFzeW5jR2V0dGVyKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZygnY2FjaGUgZG9uZTogJywga2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlW2tleV07XG4gIH1cblxuICBwdWJsaWMgcHV0VmFsdWUoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9jYWNoZVtrZXldID0gdmFsdWU7XG5cbiAgICBjb25zdCBsZW5ndGggPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzLl9jYWNoZSkubGVuZ3RoO1xuICAgIGlmIChsZW5ndGggPiAzMCkge1xuICAgICAgY29uc29sZS53YXJuKCdQYiBvbiBjYWNoZSBzaXplIGV4Y2VlZCA/IGRvIGEgcmVzdGFydCA/JywgbGVuZ3RoKTtcbiAgICB9XG4gIH1cblxufVxuIl19
@@ -16,7 +16,6 @@ export class ProfileService {
16
16
  this.fidjService = fidjService;
17
17
  this.httpClient = httpClient;
18
18
  this.router = router;
19
- console.log('ProfileService: New####');
20
19
  this.email = this.storage.get('email') || null;
21
20
  this.asTeamId = this.storage.get('asTeamId') || null;
22
21
  this.readyForSync = new BehaviorSubject(false);
@@ -61,12 +60,11 @@ export class ProfileService {
61
60
  await this.fidjService.logout(true);
62
61
  try {
63
62
  await this.fidjService.init(fidjKey, {
64
- logLevel: LoggerLevelEnum.INFO,
63
+ logLevel: fidjProd ? LoggerLevelEnum.WARN : LoggerLevelEnum.INFO,
65
64
  crypto: false,
66
65
  prod: fidjProd,
67
66
  useDB: false,
68
67
  });
69
- console.log('initFidj done.');
70
68
  this.readyForSync.next(true);
71
69
  }
72
70
  catch (err) {
@@ -74,9 +72,8 @@ export class ProfileService {
74
72
  }
75
73
  }
76
74
  async checkError(error) {
77
- console.warn('checkError', error);
78
75
  if (error.code === 401) {
79
- console.log('looks not logged in');
76
+ console.warn('Pb on auth');
80
77
  if (this.router.url.indexOf('login') < 0) {
81
78
  try {
82
79
  await this.fidjService.logout();
@@ -92,8 +89,6 @@ export class ProfileService {
92
89
  return;
93
90
  }
94
91
  await this.router.navigateByUrl('/logout', { skipLocationChange: true });
95
- // await this.router.navigate(['/logout']);
96
- // await this.router.navigate(['/login']);
97
92
  }
98
93
  async gotoLogin() {
99
94
  if (this.router.url.indexOf('login') > -1) {
@@ -402,6 +397,21 @@ export class ProfileService {
402
397
  rainComputationMap.name = rainId + '.rain.cartesian-map';
403
398
  return rainComputationMap;
404
399
  }
400
+ async getRainComputationCumulativeMapById(rainId, rainComputationId) {
401
+ const queryPath = '' + rainId + '/computations/' + rainComputationId + '/cumulative/1';
402
+ const response = await this.fidjService.sendOnEndpoint({
403
+ key: 'rains',
404
+ verb: 'GET',
405
+ relativePath: queryPath,
406
+ defaultKeyUrl: this.defaultUrlForAPI + '/rains'
407
+ });
408
+ if (!response.data['cumulative']) {
409
+ return null;
410
+ }
411
+ const rainComputationMap = new RainComputationMap(response.data['cumulative']);
412
+ rainComputationMap.name = rainId + '.rain.cumulative';
413
+ return rainComputationMap;
414
+ }
405
415
  async getRainCompares(rainId, rainComputationId) {
406
416
  const queryPath = '' + rainId + '/computations/' + rainComputationId;
407
417
  const response = await this.fidjService.sendOnEndpoint({
@@ -509,4 +519,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
509
519
  providedIn: 'root'
510
520
  }]
511
521
  }], ctorParameters: function () { return [{ type: i1.Storage }, { type: i2.FidjService }, { type: i3.HttpClient }, { type: i4.Router }]; } });
512
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwcC9zaGFyZWQvcHJvZmlsZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFekMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNyQyxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixTQUFTLEVBQ1QsU0FBUyxFQUNULGVBQWUsRUFDZixrQkFBa0IsRUFDbEIsc0JBQXNCLEVBQ3RCLFFBQVEsRUFDUixvQkFBb0IsRUFDcEIsUUFBUSxFQUNULE1BQU0sYUFBYSxDQUFDO0FBSXJCLE9BQU8sRUFBQyxXQUFXLEVBQWtCLE1BQU0sc0JBQXNCLENBQUM7QUFDbEUsT0FBTyxFQUE4QixlQUFlLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDMUUsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNoQyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sU0FBUyxDQUFDOzs7Ozs7QUFNeEMsTUFBTSxPQUFPLGNBQWM7SUFXekIsWUFBc0IsT0FBZ0IsRUFDaEIsV0FBd0IsRUFDeEIsVUFBc0IsRUFDeEIsTUFBYztRQUhaLFlBQU8sR0FBUCxPQUFPLENBQVM7UUFDaEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN4QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBRWhDLE9BQU8sQ0FBQyxHQUFHLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUV2QyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQztRQUMvQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJ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QUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0h0dHBDbGllbnR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIEV2ZW50Tm9kZSxcbiAgR2F1Z2VNZWFzdXJlLFxuICBHYXVnZU5vZGUsXG4gIFJhZGFyTm9kZSxcbiAgUmFpbkNvbXB1dGF0aW9uLFxuICBSYWluQ29tcHV0YXRpb25NYXAsXG4gIFJhaW5Db21wdXRhdGlvblF1YWxpdHksXG4gIFJhaW5Ob2RlLFxuICBTcGVlZE1hdHJpeENvbnRhaW5lcixcbiAgVGVhbU5vZGVcbn0gZnJvbSAncmFhaW4tbW9kZWwnO1xuXG5pbXBvcnQge1N0b3JhZ2V9IGZyb20gJy4vc3RvcmFnZS5zZXJ2aWNlJztcblxuaW1wb3J0IHtGaWRqU3RvcmFnZSwgRmlkalN0b3JhZ2VOb2RlfSBmcm9tICcuL2ZpZGotc3RvcmFnZS5tb2RlbCc7XG5pbXBvcnQge0Vycm9ySW50ZXJmYWNlLCBGaWRqU2VydmljZSwgTG9nZ2VyTGV2ZWxFbnVtfSBmcm9tICdmaWRqLWFuZ3VsYXInO1xuaW1wb3J0IHtYWVR5cGV9IGZyb20gJy4veHl0eXBlJztcbmltcG9ydCB7R2F1Z2VOb2RlRmlsdGVyfSBmcm9tICcuL3Rvb2xzJztcbmltcG9ydCB7Um91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBQcm9maWxlU2VydmljZSB7XG4gIHB1YmxpYyByZWFkeUZvclN5bmM6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPjtcbiAgcHVibGljIGFzVGVhbUlkOiBzdHJpbmc7XG5cbiAgcHJvdGVjdGVkIGVtYWlsOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBpc0RlbW86IGJvb2xlYW47XG4gIHByb3RlY3RlZCByb2xlczogQXJyYXk8c3RyaW5nPjtcbiAgcHJvdGVjdGVkIG5vZGVEYXRhOiBGaWRqU3RvcmFnZU5vZGU7XG4gIHByb3RlY3RlZCBmaWRqU3RvcmFnZTogRmlkalN0b3JhZ2U7XG4gIHByb3RlY3RlZCBoYXZlVHJ5VG9SZWNvbm5lY3Q6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIHN0b3JhZ2U6IFN0b3JhZ2UsXG4gICAgICAgICAgICAgIHByb3RlY3RlZCBmaWRqU2VydmljZTogRmlkalNlcnZpY2UsXG4gICAgICAgICAgICAgIHByb3RlY3RlZCBodHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxuICAgICAgICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLCkge1xuXG4gICAgY29uc29sZS5sb2coJ1Byb2ZpbGVTZXJ2aWNlOiBOZXcjIyMjJyk7XG5cbiAgICB0aGlzLmVtYWlsID0gdGhpcy5zdG9yYWdlLmdldCgnZW1haWwnKSB8fCBudWxsO1xuICAgIHRoaXMuYXNUZWFtSWQgPSB0aGlzLnN0b3JhZ2UuZ2V0KCdhc1RlYW1JZCcpIHx8IG51bGw7XG4gICAgdGhpcy5yZWFkeUZvclN5bmMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLnJvbGVzID0gW107XG4gICAgdGhpcy5maWRqU3RvcmFnZSA9IG5ldyBGaWRqU3RvcmFnZShzdG9yYWdlKTtcbiAgICB0aGlzLmlzRGVtb01vZGUgPSBmYWxzZTtcbiAgfVxuXG4gIGdldCBpc0RlbW9Nb2RlKCkge1xuICAgIHJldHVybiB0aGlzLmlzRGVtbztcbiAgfVxuXG4gIHNldCBpc0RlbW9Nb2RlKG1vZGUpIHtcbiAgICB0aGlzLmlzRGVtbyA9IG1vZGUgPyBtb2RlIDogdHJ1ZTtcbiAgICB0aGlzLmZpZGpTdG9yYWdlLnNldERlbW9Nb2RlKHRoaXMuaXNEZW1vKTtcbiAgfVxuXG4gIGdldCBkZWZhdWx0VXJsRm9yQVBJKCkge1xuICAgIHJldHVybiB0aGlzLnN0b3JhZ2UuZ2V0KCdVcmxGb3JBUEknKTtcbiAgfVxuXG4gIHNldCBkZWZhdWx0VXJsRm9yQVBJKHVybDogc3RyaW5nKSB7XG4gICAgdGhpcy5zdG9yYWdlLnNldCgnVXJsRm9yQVBJJywgdXJsKTtcbiAgfVxuXG4gIGFzeW5jIHJlZnJlc2hQcm9maWxlKCk6IFByb21pc2U8RmlkalN0b3JhZ2VOb2RlPiB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMubm9kZURhdGEgPSBhd2FpdCB0aGlzLmZpZGpTdG9yYWdlLmdldFJlZnJlc2hlZE5vZGVDb3B5KHRoaXMuZmlkalNlcnZpY2UpO1xuICAgICAgdGhpcy5zZXRSb2xlcyhhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLmdldFJvbGVzKCkpO1xuICAgICAgcmV0dXJuIHRoaXMubm9kZURhdGE7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgIH1cbiAgfVxuXG4gIGdldEVtYWlsKCkge1xuICAgIGxldCBlbWFpbCA9IHRoaXMuZW1haWw7XG4gICAgZW1haWwgPSBlbWFpbCB8fCB0aGlzLnN0b3JhZ2UuZ2V0KCdlbWFpbCcpO1xuICAgIHJldHVybiBlbWFpbDtcbiAgfVxuXG4gIHNldEVtYWlsKGVtYWlsOiBzdHJpbmcpIHtcbiAgICB0aGlzLmVtYWlsID0gZW1haWw7XG4gICAgdGhpcy5zdG9yYWdlLnNldCgnZW1haWwnLCB0aGlzLmVtYWlsKTtcbiAgfVxuXG4gIGFzeW5jIGxvZ291dChmaWRqS2V5OiBzdHJpbmcsIGZpZGpQcm9kOiBib29sZWFuKSB7XG5cbiAgICB0aGlzLnN0b3JhZ2UucmVtb3ZlKCdlbWFpbCcpO1xuICAgIGF3YWl0IHRoaXMuZmlkalNlcnZpY2UubG9nb3V0KHRydWUpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuZmlkalNlcnZpY2UuaW5pdChmaWRqS2V5LFxuICAgICAgICB7XG4gICAgICAgICAgbG9nTGV2ZWw6IExvZ2dlckxldmVsRW51bS5JTkZPLFxuICAgICAgICAgIGNyeXB0bzogZmFsc2UsXG4gICAgICAgICAgcHJvZDogZmlkalByb2QsXG4gICAgICAgICAgdXNlREI6IGZhbHNlLFxuICAgICAgICB9KTtcblxuICAgICAgY29uc29sZS5sb2coJ2luaXRGaWRqIGRvbmUuJyk7XG4gICAgICB0aGlzLnJlYWR5Rm9yU3luYy5uZXh0KHRydWUpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcignaW5pdEZpZGogY2F0Y2ggcGI6ICcsIGVycik7XG4gICAgfVxuXG4gIH1cblxuICBhc3luYyBjaGVja0Vycm9yKGVycm9yOiBFcnJvckludGVyZmFjZSkge1xuICAgIGNvbnNvbGUud2FybignY2hlY2tFcnJvcicsIGVycm9yKTtcbiAgICBpZiAoZXJyb3IuY29kZSA9PT0gNDAxKSB7XG4gICAgICBjb25zb2xlLmxvZygnbG9va3Mgbm90IGxvZ2dlZCBpbicpO1xuICAgICAgaWYgKHRoaXMucm91dGVyLnVybC5pbmRleE9mKCdsb2dpbicpIDwgMCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuZmlkalNlcnZpY2UubG9nb3V0KCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5nb3RvTG91dCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdvdG9Mb3V0KCkge1xuICAgIGlmICh0aGlzLnJvdXRlci51cmwuaW5kZXhPZignbG9naW4nKSA+IC0xKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy9sb2dvdXQnLCB7c2tpcExvY2F0aW9uQ2hhbmdlOiB0cnVlfSk7XG4gICAgLy8gYXdhaXQgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvbG9nb3V0J10pO1xuICAgIC8vIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2xvZ2luJ10pO1xuICB9XG5cbiAgYXN5bmMgZ290b0xvZ2luKCkge1xuICAgIGlmICh0aGlzLnJvdXRlci51cmwuaW5kZXhPZignbG9naW4nKSA+IC0xKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy8nLCB7c2tpcExvY2F0aW9uQ2hhbmdlOiB0cnVlfSk7XG4gICAgYXdhaXQgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvbG9naW4nXSk7XG4gIH1cblxuICBpc0xvZ2dlZEluKCkge1xuICAgIHJldHVybiB0aGlzLmZpZGpTZXJ2aWNlLmlzTG9nZ2VkSW4oKTtcbiAgfVxuXG4gIGFzeW5jIHN0b3JlQWxsKCkge1xuICAgIHJldHVybiB0aGlzLmZpZGpTdG9yYWdlLnN0b3JlRGF0YSh0aGlzLmZpZGpTZXJ2aWNlLCB0aGlzLm5vZGVEYXRhKTtcbiAgfVxuXG4gIGlzQWRtaW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucm9sZXMuaW5kZXhPZignYWRtaW4nKSA+IC0xO1xuICB9XG5cbiAgLy8gPT09IE5vdGlmaWNhdGlvbnMgPT09XG5cbiAgYXN5bmMgY3JlYXRlTm90aWZpY2F0aW9uKHJhaW5JZDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICBrZXk6ICdub3RpZmljYXRpb25zJyxcbiAgICAgICAgdmVyYjogJ1BPU1QnLFxuICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL25vdGlmaWNhdGlvbnMnLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgcmFpbjogcmFpbklkLFxuICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXcgRXZlbnROb2RlKHJlc3AuZGF0YSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgYXN5bmMgZ2V0Tm90aWZpY2F0aW9ucyhyYWluSWQ6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBhcmdzID0gJz9yYWluPScgKyByYWluSWQ7XG4gICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgIGtleTogJ25vdGlmaWNhdGlvbnMnLFxuICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgcmVsYXRpdmVQYXRoOiBhcmdzLFxuICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL25vdGlmaWNhdGlvbnMnLFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiByZXNwLmRhdGEubm90aWZpY2F0aW9ucy5tYXAobiA9PiBuZXcgRXZlbnROb2RlKG4pKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBhc3luYyBnZXRBbGxOb3RpZmljYXRpb25zKCk6IFByb21pc2U8RXZlbnROb2RlW10+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICBrZXk6ICdub3RpZmljYXRpb25zJyxcbiAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvbm90aWZpY2F0aW9ucycsXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHJlc3AuZGF0YS5ub3RpZmljYXRpb25zLm1hcChuID0+IG5ldyBFdmVudE5vZGUobikpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvLyA9PT0gVGVhbXMgPT09XG5cbiAgYXN5bmMgZ2V0VGVhbXMoKTogUHJvbWlzZTxBcnJheTxUZWFtTm9kZT4+IHtcbiAgICBjb25zdCB0ZWFtcyA9IFtdO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgIGtleTogJ3RlYW1zX2FsbCcsXG4gICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3RlYW1zX2FsbCdcbiAgICAgIH0pO1xuICAgICAgZm9yIChjb25zdCB0ZWFtIG9mIHJlc3AuZGF0YS50ZWFtcykge1xuICAgICAgICB0ZWFtcy5wdXNoKG5ldyBUZWFtTm9kZSh0ZWFtKSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgIH1cbiAgICByZXR1cm4gdGVhbXM7XG4gIH1cblxuICBhc3luYyBnZXRUZWFtKHRlYW1JZDogc3RyaW5nKTogUHJvbWlzZTxUZWFtTm9kZT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgIGtleTogJ3RlYW1zJyxcbiAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgIHJlbGF0aXZlUGF0aDogdGVhbUlkLFxuICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3RlYW1zJ1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IFRlYW1Ob2RlKHJlc3AuZGF0YSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gPT09IFJhZGFycyA9PT1cblxuICBhc3luYyBnZXRSYWRhcnModGVhbUlkOiBzdHJpbmcpOiBQcm9taXNlPEFycmF5PFJhZGFyTm9kZT4+IHtcbiAgICBjb25zdCByYWRhcnMgPSBbXTtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhZGFycycgKyAodGVhbUlkID8gJz90ZWFtSWQ9JyArIHRlYW1JZCA6ICcnKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICBrZXk6ICdyYWRhcnMnLFxuICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgZGVmYXVsdEtleVVybDogdXJsLFxuICAgICAgfSk7XG4gICAgICBmb3IgKGNvbnN0IHIgb2YgcmVzcC5kYXRhLnJhZGFycykge1xuICAgICAgICBjb25zdCByYWRhciA9IG5ldyBSYWRhck5vZGUocik7XG4gICAgICAgIHJhZGFycy5wdXNoKHJhZGFyKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgfVxuICAgIHJldHVybiByYWRhcnM7XG4gIH1cblxuICBhc3luYyBnZXRSYWRhcihpZDogc3RyaW5nKTogUHJvbWlzZTxSYWRhck5vZGU+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICBrZXk6ICdyYWRhcnMnLFxuICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgcmVsYXRpdmVQYXRoOiBpZCxcbiAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWRhcnMnXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXcgUmFkYXJOb2RlKHJlc3AuZGF0YSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgYXN5bmMgcHV0UmFkYXIocmFkYXJOb2RlOiBSYWRhck5vZGUsIGNvbmZpZ3VyYXRpb25Bc0pTT04/OiBhbnkpOiBQcm9taXNlPFJhZGFyTm9kZT4ge1xuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBuYW1lOiByYWRhck5vZGUubmFtZSxcbiAgICB9O1xuXG4gICAgaWYgKGNvbmZpZ3VyYXRpb25Bc0pTT04pIHtcbiAgICAgIGRhdGFbJ2NvbmZpZ3VyYXRpb25Bc0pTT04nXSA9IGNvbmZpZ3VyYXRpb25Bc0pTT047XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAga2V5OiAncmFkYXJzJyxcbiAgICAgICAgcmVsYXRpdmVQYXRoOiByYWRhck5vZGUuaWQsXG4gICAgICAgIHZlcmI6ICdQVVQnLFxuICAgICAgICBkYXRhLFxuICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhZGFycy8nXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIG5ldyBSYWRhck5vZGUocmVzcC5kYXRhKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0TG9uZWx5UmFkYXJzKHJhaW5zOiBSYWluTm9kZVtdKTogUHJvbWlzZTxSYWRhck5vZGVbXT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgIGtleTogJ3JhZGFycycsXG4gICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhZGFycydcbiAgICAgIH0pO1xuICAgICAgY29uc3QgbG9uZWx5UmFkYXJzOiBSYWRhck5vZGVbXSA9IFtdO1xuICAgICAgY29uc3QgcmFkYXJzID0gcmVzcC5kYXRhLnJhZGFycztcbiAgICAgIHJhZGFycy5mb3JFYWNoKHJhZGFyID0+IHtcbiAgICAgICAgbGV0IGZvdW5kID0gZmFsc2U7XG4gICAgICAgIHJhaW5zLmZvckVhY2gocmFpbiA9PiB7XG4gICAgICAgICAgY29uc3QgcmRJZCA9IHJhaW4uZ2V0TGlua0lkKCdyYWRhcicsIDApO1xuICAgICAgICAgIGlmIChyZElkID09PSByYWRhci5pZCkge1xuICAgICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghZm91bmQpIHtcbiAgICAgICAgICBsb25lbHlSYWRhcnMucHVzaChyYWRhcik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGxvbmVseVJhZGFycztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGFzeW5jIGdldFJhaW5UaW1lZnJhbWUocmFpbklkOiBzdHJpbmcsIGJlZ2luOiBEYXRlLCBlbmQ6IERhdGUsIGZvcmNlZCA9IGZhbHNlKTogUHJvbWlzZTxSYWluTm9kZT4ge1xuICAgIHRyeSB7XG4gICAgICBsZXQgcXVlcnlQYXRoID0gJycgKyByYWluSWQgKyAnP2Zvcm1hdD10aW1lZnJhbWUnO1xuICAgICAgaWYgKGJlZ2luKSB7XG4gICAgICAgIHF1ZXJ5UGF0aCArPSAnJmJlZ2luPScgKyBiZWdpbi50b0lTT1N0cmluZygpO1xuICAgICAgfVxuICAgICAgaWYgKGVuZCkge1xuICAgICAgICBxdWVyeVBhdGggKz0gJyZlbmQ9JyArIGVuZC50b0lTT1N0cmluZygpO1xuICAgICAgfVxuICAgICAgaWYgKGZvcmNlZCkge1xuICAgICAgICBxdWVyeVBhdGggKz0gJyZmb3JjZWQ9dHJ1ZSc7XG4gICAgICB9XG4gICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgIHJlbGF0aXZlUGF0aDogcXVlcnlQYXRoLFxuICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJ1xuICAgICAgfSk7XG4gICAgICBjb25zdCByYWluTm9kZSA9IG5ldyBSYWluTm9kZShyZXNwLmRhdGEudGltZWZyYW1lKTtcbiAgICAgIHJhaW5Ob2RlLm5hbWUgKz0gJy5yYWRhci50aW1lZnJhbWUnO1xuICAgICAgcmV0dXJuIHJhaW5Ob2RlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyA9PT0gUmFpbnMgPT09XG5cbiAgYXN5bmMgZ2V0UmFpbnModGVhbUlkOiBzdHJpbmcpOiBQcm9taXNlPEFycmF5PFJhaW5Ob2RlPj4ge1xuICAgIGNvbnN0IHJhaW5zID0gW107XG4gICAgY29uc3QgdXJsID0gdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWlucycgKyAodGVhbUlkID8gJz90ZWFtSWQ9JyArIHRlYW1JZCA6ICcnKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICBrZXk6ICdyYWlucycsXG4gICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICBkZWZhdWx0S2V5VXJsOiB1cmwsXG4gICAgICB9KTtcbiAgICAgIGZvciAoY29uc3QgcmFpbiBvZiByZXNwLmRhdGEucmFpbnMpIHtcbiAgICAgICAgcmFpbnMucHVzaChuZXcgUmFpbk5vZGUocmFpbikpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJhaW5zO1xuICB9XG5cbiAgYXN5bmMgZ2V0UmFpbihpZDogc3RyaW5nKTogUHJvbWlzZTxSYWluTm9kZT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgcmVsYXRpdmVQYXRoOiBpZCxcbiAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFpbnMvJ1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IFJhaW5Ob2RlKHJlc3AuZGF0YSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vID09PSBDb3VudFxuXG4gIGFzeW5jIGdldENvdW50cyhyYWluSWQ6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgIHBlcmlvZEJlZ2luPzogRGF0ZSxcbiAgICAgICAgICAgICAgICAgIHBlcmlvZEVuZD86IERhdGUsXG4gICAgICAgICAgICAgICAgICB3aXRoUXVhbGl0aWVzPzogYm9vbGVhbik6IFByb21pc2U8e1xuICAgIHJhZGFyTWVhc3VyZXM6IFhZVHlwZVtdLFxuICAgIGdhdWdlTWVhc3VyZXM6IFhZVHlwZVtdLFxuICAgIGNvbXB1dGF0aW9uc0J5VGVhbTogWFlUeXBlW10sXG4gICAgY29tcHV0YXRpb25zSW50ZXJuYWw6IFhZVHlwZVtdLFxuICB9PiB7XG4gICAgdHJ5IHtcblxuICAgICAgbGV0IGFyZ3MgPSAnJztcbiAgICAgIGlmIChwZXJpb2RCZWdpbiAmJiBwZXJpb2RFbmQpIHtcbiAgICAgICAgYXJncyA9ICc/cGVyaW9kQmVnaW49JyArIHBlcmlvZEJlZ2luLnRvSVNPU3RyaW5nKCkgKyAnJnBlcmlvZEVuZD0nICsgcGVyaW9kRW5kLnRvSVNPU3RyaW5nKCk7XG4gICAgICB9XG4gICAgICBpZiAod2l0aFF1YWxpdGllcykge1xuICAgICAgICBhcmdzICs9ICcmd2l0aFF1YWxpdGllcz0nICsgd2l0aFF1YWxpdGllcztcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICBrZXk6ICdyYWlucycsXG4gICAgICAgIHJlbGF0aXZlUGF0aDogcmFpbklkICsgJy9jb3VudHMnICsgYXJncyxcbiAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFpbnMvJyxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBjb3VudHMgPSByZXNwLmRhdGEuY291bnRzO1xuICAgICAgY29uc3QgcmFkYXJNZWFzdXJlczogWFlUeXBlW10gPSBbXSxcbiAgICAgICAgZ2F1Z2VNZWFzdXJlczogWFlUeXBlW10gPSBbXSxcbiAgICAgICAgY29tcHV0YXRpb25zQnlUZWFtOiBYWVR5cGVbXSA9IFtdLFxuICAgICAgICBjb21wdXRhdGlvbnNJbnRlcm5hbDogWFlUeXBlW10gPSBbXTtcblxuICAgICAgY291bnRzLmZvckVhY2goYyA9PiB7XG4gICAgICAgIHJhZGFyTWVhc3VyZXMucHVzaChuZXcgWFlUeXBlKDEsIE5hTiwgTmFOLCBjLl9pZCkpO1xuICAgICAgICBnYXVnZU1lYXN1cmVzLnB1c2gobmV3IFhZVHlwZShjLmdhdWdlTWVhc3VyZXMsIE5hTiwgTmFOLCBjLl9pZCkpO1xuICAgICAgICBjb21wdXRhdGlvbnNCeVRlYW0ucHVzaChuZXcgWFlUeXBlKGMuY29tcHV0YXRpb25zQnlUZWFtLCBOYU4sIE5hTiwgYy5faWQpKTtcbiAgICAgICAgY29tcHV0YXRpb25zSW50ZXJuYWwucHVzaChuZXcgWFlUeXBlKGMuY29tcHV0YXRpb25zSW50ZXJuYWwsIE5hTiwgTmFOLCBjLl9pZCkpO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJhZGFyTWVhc3VyZXMsXG4gICAgICAgIGdhdWdlTWVhc3VyZXMsXG4gICAgICAgIGNvbXB1dGF0aW9uc0J5VGVhbSxcbiAgICAgICAgY29tcHV0YXRpb25zSW50ZXJuYWwsXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyA9PT0gQ29tcHV0aW5nID09PVxuXG4gIGFzeW5jIGxhdW5jaFJhaW5Db21wdXRhdGlvbihyYWluSWQ6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGU6IERhdGUpOiBQcm9taXNlPFJhaW5Db21wdXRhdGlvbltdPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgIHZlcmI6ICdQT1NUJyxcbiAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgIHJlbGF0aXZlUGF0aDogJycgKyByYWluSWQgKyAnL2NvbXB1dGF0aW9ucycsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGRhdGU6IGRhdGUudG9JU09TdHJpbmcoKSxcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJ1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEuY29tcHV0YXRpb25zPy5tYXAoYyA9PiBuZXcgUmFpbkNvbXB1dGF0aW9uKGMpKTtcbiAgfVxuXG4gIGFzeW5jIGdldFJhaW5Db21wdXRhdGlvbkNhcnRlc2lhbk1hcEJ5SWQocmFpbklkOiBzdHJpbmcsIHJhaW5Db21wdXRhdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPFJhaW5Db21wdXRhdGlvbk1hcD4ge1xuICAgIGNvbnN0IHF1ZXJ5UGF0aCA9ICcnICsgcmFpbklkICsgJy9jb21wdXRhdGlvbnMvJyArIHJhaW5Db21wdXRhdGlvbklkICsgJz9mb3JtYXQ9Y2FydGVzaWFuLW1hcCc7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgcmVsYXRpdmVQYXRoOiBxdWVyeVBhdGgsXG4gICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJ1xuICAgIH0pO1xuICAgIGlmICghcmVzcG9uc2UuZGF0YVsnY2FydGVzaWFuLW1hcCddKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCByYWluQ29tcHV0YXRpb25NYXAgPSBuZXcgUmFpbkNvbXB1dGF0aW9uTWFwKHJlc3BvbnNlLmRhdGFbJ2NhcnRlc2lhbi1tYXAnXSk7XG4gICAgcmFpbkNvbXB1dGF0aW9uTWFwLm5hbWUgPSByYWluSWQgKyAnLnJhaW4uY2FydGVzaWFuLW1hcCc7XG4gICAgcmV0dXJuIHJhaW5Db21wdXRhdGlvbk1hcDtcbiAgfVxuXG4gIGFzeW5jIGdldFJhaW5Db21wYXJlcyhyYWluSWQ6IHN0cmluZywgcmFpbkNvbXB1dGF0aW9uSWQ6IHN0cmluZyk6IFByb21pc2U8eyBpZDogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcgfVtdPiB7XG4gICAgY29uc3QgcXVlcnlQYXRoID0gJycgKyByYWluSWQgKyAnL2NvbXB1dGF0aW9ucy8nICsgcmFpbkNvbXB1dGF0aW9uSWQ7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgcmVsYXRpdmVQYXRoOiBxdWVyeVBhdGgsXG4gICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgIC8vIHRpbWVvdXQ6IDIwMDAwMCxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJhaW5Db21wdXRhdGlvbiA9IG5ldyBSYWluQ29tcHV0YXRpb24ocmVzcG9uc2UuZGF0YSk7XG4gICAgY29uc3QgbGlua3MgPSByYWluQ29tcHV0YXRpb24uZ2V0TGlua3MoKTtcbiAgICBjb25zdCByYWluQ29tcHV0YXRpb25RdWFsaXRpZXMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGxpbmsgb2YgbGlua3MpIHtcbiAgICAgIGlmIChsaW5rLnJlbCA9PT0gJ3JhaW4tY29tcHV0YXRpb24tcXVhbGl0eScpIHtcbiAgICAgICAgY29uc3QgaWQgPSBsaW5rLmdldElkKCk7XG4gICAgICAgIGNvbnN0IHZlcnNpb24gPSBsaW5rLmhyZWYuc3Vic3RyaW5nKGxpbmsuaHJlZi5pbmRleE9mKCd2ZXJzaW9uLycpICsgOCwgbGluay5ocmVmLmluZGV4T2YoJy8nICsgaWQpKTtcbiAgICAgICAgcmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzLnB1c2goe2lkLCB2ZXJzaW9ufSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByYWluQ29tcHV0YXRpb25RdWFsaXRpZXM7XG4gIH1cblxuICBhc3luYyBnZXRSYWluQ29tcGFyZUJ5SWQocmFpbklkOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICByYWluQ29tcHV0YXRpb25JZDogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpbkNvbXB1dGF0aW9uUXVhbGl0eUlkOiBzdHJpbmcpOiBQcm9taXNlPFJhaW5Db21wdXRhdGlvblF1YWxpdHk+IHtcbiAgICBjb25zdCBxdWVyeVBhdGggPSAnJyArIHJhaW5JZCArICcvY29tcHV0YXRpb25zLycgKyByYWluQ29tcHV0YXRpb25JZCArICcvY29tcGFyZXMvJyArIHJhaW5Db21wdXRhdGlvblF1YWxpdHlJZDtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICByZWxhdGl2ZVBhdGg6IHF1ZXJ5UGF0aCxcbiAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFpbnMnLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmFpbkNvbXB1dGF0aW9uUXVhbGl0eSA9IG5ldyBSYWluQ29tcHV0YXRpb25RdWFsaXR5KHJlc3BvbnNlLmRhdGEpO1xuICAgIHJhaW5Db21wdXRhdGlvblF1YWxpdHkucXVhbGl0eVNwZWVkTWF0cml4Q29udGFpbmVyID0gU3BlZWRNYXRyaXhDb250YWluZXJcbiAgICAgIC5DcmVhdGVGcm9tSnNvbihyYWluQ29tcHV0YXRpb25RdWFsaXR5LnF1YWxpdHlTcGVlZE1hdHJpeENvbnRhaW5lcik7XG4gICAgcmV0dXJuIHJhaW5Db21wdXRhdGlvblF1YWxpdHk7XG4gIH1cblxuICAvLyA9PT0gR2F1Z2VzID09PVxuXG4gIGFzeW5jIGdldEdhdWdlKGdhdWdlSWQ6IHN0cmluZyk6IFByb21pc2U8R2F1Z2VOb2RlPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAga2V5OiAnZ2F1Z2VzJyxcbiAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgIHJlbGF0aXZlUGF0aDogZ2F1Z2VJZCxcbiAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9nYXVnZXMnXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXcgR2F1Z2VOb2RlKHJlc3AuZGF0YSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldEdhdWdlcyhyYWluSWQ/OiBzdHJpbmcpOiBQcm9taXNlPEFycmF5PEdhdWdlTm9kZUZpbHRlcj4+IHtcbiAgICBsZXQgcXVlcnlQYXRoID0gJyc7XG4gICAgaWYgKHRoaXMuYXNUZWFtSWQpIHtcbiAgICAgIHF1ZXJ5UGF0aCArPSAnP3RlYW1JZD0nICsgdGhpcy5hc1RlYW1JZDtcbiAgICB9XG4gICAgaWYgKHJhaW5JZCkge1xuICAgICAgaWYgKHF1ZXJ5UGF0aCkge1xuICAgICAgICBxdWVyeVBhdGggKz0gJyYnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcXVlcnlQYXRoICs9ICc/JztcbiAgICAgIH1cbiAgICAgIHF1ZXJ5UGF0aCArPSAncmFpbklkPScgKyByYWluSWQ7XG4gICAgfVxuXG4gICAgY29uc3QgZ2F1Z2VzID0gW107XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAga2V5OiAnZ2F1Z2VzJyxcbiAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgIHJlbGF0aXZlUGF0aDogcXVlcnlQYXRoLFxuICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL2dhdWdlcydcbiAgICAgIH0pO1xuXG4gICAgICBmb3IgKGNvbnN0IGdhdWdlIG9mIHJlc3AuZGF0YS5nYXVnZXMpIHtcbiAgICAgICAgZ2F1Z2VzLnB1c2gobmV3IEdhdWdlTm9kZUZpbHRlcihnYXVnZSkpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICB9XG4gICAgcmV0dXJuIGdhdWdlcztcbiAgfVxuXG4gIGFzeW5jIGdldEdhdWdlTWVhc3VyZXMoZ2F1Z2VJZDogc3RyaW5nLCBiZWdpbjogRGF0ZSwgZW5kOiBEYXRlKTogUHJvbWlzZTxHYXVnZU1lYXN1cmVbXT4ge1xuICAgIGNvbnN0IHF1ZXJ5UGF0aCA9ICcnICsgZ2F1Z2VJZCArICcvbWVhc3VyZXM/YmVnaW49JyArIGJlZ2luLnRvSVNPU3RyaW5nKCkgKyAnJmVuZD0nICsgZW5kLnRvSVNPU3RyaW5nKCk7XG4gICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAga2V5OiAnZ2F1Z2VzJyxcbiAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgcmVsYXRpdmVQYXRoOiBxdWVyeVBhdGgsXG4gICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL2dhdWdlcydcbiAgICB9KTtcblxuICAgIGNvbnN0IGdhdWdlTWVhc3VyZXM6IEdhdWdlTWVhc3VyZVtdID0gW107XG4gICAgZm9yIChjb25zdCBnYXVnZU1lYXN1cmUgb2YgcmVzcC5kYXRhLmdhdWdlTWVhc3VyZXMpIHtcbiAgICAgIGdhdWdlTWVhc3VyZXMucHVzaChuZXcgR2F1Z2VNZWFzdXJlKGdhdWdlTWVhc3VyZSkpO1xuICAgIH1cbiAgICByZXR1cm4gZ2F1Z2VNZWFzdXJlcztcbiAgfVxuXG4gIC8vID09PSBQcml2YXRlID09PVxuXG4gIHByb3RlY3RlZCBzZXRSb2xlcyhyb2xlczogQXJyYXk8c3RyaW5nPik6IHZvaWQge1xuICAgIHRoaXMucm9sZXMgPSByb2xlcztcbiAgfVxuXG59XG4iXX0=
522
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwcC9zaGFyZWQvcHJvZmlsZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFekMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNyQyxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixTQUFTLEVBQ1QsU0FBUyxFQUNULGVBQWUsRUFDZixrQkFBa0IsRUFDbEIsc0JBQXNCLEVBQ3RCLFFBQVEsRUFDUixvQkFBb0IsRUFDcEIsUUFBUSxFQUNULE1BQU0sYUFBYSxDQUFDO0FBSXJCLE9BQU8sRUFBQyxXQUFXLEVBQWtCLE1BQU0sc0JBQXNCLENBQUM7QUFDbEUsT0FBTyxFQUE4QixlQUFlLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDMUUsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNoQyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sU0FBUyxDQUFDOzs7Ozs7QUFNeEMsTUFBTSxPQUFPLGNBQWM7SUFXekIsWUFBc0IsT0FBZ0IsRUFDaEIsV0FBd0IsRUFDeEIsVUFBc0IsRUFDeEIsTUFBYztRQUhaLFlBQU8sR0FBUCxPQUFPLENBQVM7UUFDaEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN4QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2hDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDO1FBQy9DLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksSUFBSSxDQUFDO1FBQ3JELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxl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QUFFLEtBQUs7WUFDWCxZQUFZLEVBQUUsU0FBUztZQUN2QixhQUFhLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFNBQVM7U0FDakQsQ0FBQyxDQUFDO1FBRUgsTUFBTSxhQUFhLEdBQW1CLEVBQUUsQ0FBQztRQUN6QyxLQUFLLE1BQU0sWUFBWSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ2xELGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztTQUNwRDtRQUNELE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxrQkFBa0I7SUFFUixRQUFRLENBQUMsS0FBb0I7UUFDckMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQzs7NEdBOWpCVSxjQUFjO2dIQUFkLGNBQWMsY0FGYixNQUFNOzRGQUVQLGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7SHR0cENsaWVudH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgRXZlbnROb2RlLFxuICBHYXVnZU1lYXN1cmUsXG4gIEdhdWdlTm9kZSxcbiAgUmFkYXJOb2RlLFxuICBSYWluQ29tcHV0YXRpb24sXG4gIFJhaW5Db21wdXRhdGlvbk1hcCxcbiAgUmFpbkNvbXB1dGF0aW9uUXVhbGl0eSxcbiAgUmFpbk5vZGUsXG4gIFNwZWVkTWF0cml4Q29udGFpbmVyLFxuICBUZWFtTm9kZVxufSBmcm9tICdyYWFpbi1tb2RlbCc7XG5cbmltcG9ydCB7U3RvcmFnZX0gZnJvbSAnLi9zdG9yYWdlLnNlcnZpY2UnO1xuXG5pbXBvcnQge0ZpZGpTdG9yYWdlLCBGaWRqU3RvcmFnZU5vZGV9IGZyb20gJy4vZmlkai1zdG9yYWdlLm1vZGVsJztcbmltcG9ydCB7RXJyb3JJbnRlcmZhY2UsIEZpZGpTZXJ2aWNlLCBMb2dnZXJMZXZlbEVudW19IGZyb20gJ2ZpZGotYW5ndWxhcic7XG5pbXBvcnQge1hZVHlwZX0gZnJvbSAnLi94eXR5cGUnO1xuaW1wb3J0IHtHYXVnZU5vZGVGaWx0ZXJ9IGZyb20gJy4vdG9vbHMnO1xuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFByb2ZpbGVTZXJ2aWNlIHtcbiAgcHVibGljIHJlYWR5Rm9yU3luYzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+O1xuICBwdWJsaWMgYXNUZWFtSWQ6IHN0cmluZztcblxuICBwcm90ZWN0ZWQgZW1haWw6IHN0cmluZztcbiAgcHJvdGVjdGVkIGlzRGVtbzogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIHJvbGVzOiBBcnJheTxzdHJpbmc+O1xuICBwcm90ZWN0ZWQgbm9kZURhdGE6IEZpZGpTdG9yYWdlTm9kZTtcbiAgcHJvdGVjdGVkIGZpZGpTdG9yYWdlOiBGaWRqU3RvcmFnZTtcbiAgcHJvdGVjdGVkIGhhdmVUcnlUb1JlY29ubmVjdDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgc3RvcmFnZTogU3RvcmFnZSxcbiAgICAgICAgICAgICAgcHJvdGVjdGVkIGZpZGpTZXJ2aWNlOiBGaWRqU2VydmljZSxcbiAgICAgICAgICAgICAgcHJvdGVjdGVkIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsXG4gICAgICAgICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsKSB7XG4gICAgdGhpcy5lbWFpbCA9IHRoaXMuc3RvcmFnZS5nZXQoJ2VtYWlsJykgfHwgbnVsbDtcbiAgICB0aGlzLmFzVGVhbUlkID0gdGhpcy5zdG9yYWdlLmdldCgnYXNUZWFtSWQnKSB8fCBudWxsO1xuICAgIHRoaXMucmVhZHlGb3JTeW5jID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5yb2xlcyA9IFtdO1xuICAgIHRoaXMuZmlkalN0b3JhZ2UgPSBuZXcgRmlkalN0b3JhZ2Uoc3RvcmFnZSk7XG4gICAgdGhpcy5pc0RlbW9Nb2RlID0gZmFsc2U7XG4gIH1cblxuICBnZXQgaXNEZW1vTW9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pc0RlbW87XG4gIH1cblxuICBzZXQgaXNEZW1vTW9kZShtb2RlKSB7XG4gICAgdGhpcy5pc0RlbW8gPSBtb2RlID8gbW9kZSA6IHRydWU7XG4gICAgdGhpcy5maWRqU3RvcmFnZS5zZXREZW1vTW9kZSh0aGlzLmlzRGVtbyk7XG4gIH1cblxuICBnZXQgZGVmYXVsdFVybEZvckFQSSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yYWdlLmdldCgnVXJsRm9yQVBJJyk7XG4gIH1cblxuICBzZXQgZGVmYXVsdFVybEZvckFQSSh1cmw6IHN0cmluZykge1xuICAgIHRoaXMuc3RvcmFnZS5zZXQoJ1VybEZvckFQSScsIHVybCk7XG4gIH1cblxuICBhc3luYyByZWZyZXNoUHJvZmlsZSgpOiBQcm9taXNlPEZpZGpTdG9yYWdlTm9kZT4ge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLm5vZGVEYXRhID0gYXdhaXQgdGhpcy5maWRqU3RvcmFnZS5nZXRSZWZyZXNoZWROb2RlQ29weSh0aGlzLmZpZGpTZXJ2aWNlKTtcbiAgICAgIHRoaXMuc2V0Um9sZXMoYXdhaXQgdGhpcy5maWRqU2VydmljZS5nZXRSb2xlcygpKTtcbiAgICAgIHJldHVybiB0aGlzLm5vZGVEYXRhO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICB9XG4gIH1cblxuICBnZXRFbWFpbCgpIHtcbiAgICBsZXQgZW1haWwgPSB0aGlzLmVtYWlsO1xuICAgIGVtYWlsID0gZW1haWwgfHwgdGhpcy5zdG9yYWdlLmdldCgnZW1haWwnKTtcbiAgICByZXR1cm4gZW1haWw7XG4gIH1cblxuICBzZXRFbWFpbChlbWFpbDogc3RyaW5nKSB7XG4gICAgdGhpcy5lbWFpbCA9IGVtYWlsO1xuICAgIHRoaXMuc3RvcmFnZS5zZXQoJ2VtYWlsJywgdGhpcy5lbWFpbCk7XG4gIH1cblxuICBhc3luYyBsb2dvdXQoZmlkaktleTogc3RyaW5nLCBmaWRqUHJvZDogYm9vbGVhbikge1xuXG4gICAgdGhpcy5zdG9yYWdlLnJlbW92ZSgnZW1haWwnKTtcbiAgICBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLmxvZ291dCh0cnVlKTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLmluaXQoZmlkaktleSxcbiAgICAgICAge1xuICAgICAgICAgIGxvZ0xldmVsOiBmaWRqUHJvZCA/IExvZ2dlckxldmVsRW51bS5XQVJOIDogTG9nZ2VyTGV2ZWxFbnVtLklORk8sXG4gICAgICAgICAgY3J5cHRvOiBmYWxzZSxcbiAgICAgICAgICBwcm9kOiBmaWRqUHJvZCxcbiAgICAgICAgICB1c2VEQjogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgdGhpcy5yZWFkeUZvclN5bmMubmV4dCh0cnVlKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2luaXRGaWRqIGNhdGNoIHBiOiAnLCBlcnIpO1xuICAgIH1cblxuICB9XG5cbiAgYXN5bmMgY2hlY2tFcnJvcihlcnJvcjogRXJyb3JJbnRlcmZhY2UpIHtcbiAgICBpZiAoZXJyb3IuY29kZSA9PT0gNDAxKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1BiIG9uIGF1dGgnKTtcbiAgICAgIGlmICh0aGlzLnJvdXRlci51cmwuaW5kZXhPZignbG9naW4nKSA8IDApIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLmxvZ291dCgpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZ290b0xvdXQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBnb3RvTG91dCgpIHtcbiAgICBpZiAodGhpcy5yb3V0ZXIudXJsLmluZGV4T2YoJ2xvZ2luJykgPiAtMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCcvbG9nb3V0Jywge3NraXBMb2NhdGlvbkNoYW5nZTogdHJ1ZX0pO1xuICB9XG5cbiAgYXN5bmMgZ290b0xvZ2luKCkge1xuICAgIGlmICh0aGlzLnJvdXRlci51cmwuaW5kZXhPZignbG9naW4nKSA+IC0xKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy8nLCB7c2tpcExvY2F0aW9uQ2hhbmdlOiB0cnVlfSk7XG4gICAgYXdhaXQgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvbG9naW4nXSk7XG4gIH1cblxuICBpc0xvZ2dlZEluKCkge1xuICAgIHJldHVybiB0aGlzLmZpZGpTZXJ2aWNlLmlzTG9nZ2VkSW4oKTtcbiAgfVxuXG4gIGFzeW5jIHN0b3JlQWxsKCkge1xuICAgIHJldHVybiB0aGlzLmZpZGpTdG9yYWdlLnN0b3JlRGF0YSh0aGlzLmZpZGpTZXJ2aWNlLCB0aGlzLm5vZGVEYXRhKTtcbiAgfVxuXG4gIGlzQWRtaW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucm9sZXMuaW5kZXhPZignYWRtaW4nKSA+IC0xO1xuICB9XG5cbiAgLy8gPT09IE5vdGlmaWNhdGlvbnMgPT09XG5cbiAgYXN5bmMgY3JlYXRlTm90aWZpY2F0aW9uKHJhaW5JZDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICBrZXk6ICdub3RpZmljYXRpb25zJyxcbiAgICAgICAgdmVyYjogJ1BPU1QnLFxuICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL25vdGlmaWNhdGlvbnMnLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgcmFpbjogcmFpbklkLFxuICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXcgRXZlbnROb2RlKHJlc3AuZGF0YSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgYXN5bmMgZ2V0Tm90aWZpY2F0aW9ucyhyYWluSWQ6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBhcmdzID0gJz9yYWluPScgKyByYWluSWQ7XG4gICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgIGtleTogJ25vdGlmaWNhdGlvbnMnLFxuICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgcmVsYXRpdmVQYXRoOiBhcmdzLFxuICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL25vdGlmaWNhdGlvbnMnLFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiByZXNwLmRhdGEubm90aWZpY2F0aW9ucy5tYXAobiA9PiBuZXcgRXZlbnROb2RlKG4pKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBhc3luYyBnZXRBbGxOb3RpZmljYXRpb25zKCk6IFByb21pc2U8RXZlbnROb2RlW10+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICBrZXk6ICdub3RpZmljYXRpb25zJyxcbiAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvbm90aWZpY2F0aW9ucycsXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHJlc3AuZGF0YS5ub3RpZmljYXRpb25zLm1hcChuID0+IG5ldyBFdmVudE5vZGUobikpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvLyA9PT0gVGVhbXMgPT09XG5cbiAgYXN5bmMgZ2V0VGVhbXMoKTogUHJvbWlzZTxBcnJheTxUZWFtTm9kZT4+IHtcbiAgICBjb25zdCB0ZWFtcyA9IFtdO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgIGtleTogJ3RlYW1zX2FsbCcsXG4gICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3RlYW1zX2FsbCdcbiAgICAgIH0pO1xuICAgICAgZm9yIChjb25zdCB0ZWFtIG9mIHJlc3AuZGF0YS50ZWFtcykge1xuICAgICAgICB0ZWFtcy5wdXNoKG5ldyBUZWFtTm9kZSh0ZWFtKSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgIH1cbiAgICByZXR1cm4gdGVhbXM7XG4gIH1cblxuICBhc3luYyBnZXRUZWFtKHRlYW1JZDogc3RyaW5nKTogUHJvbWlzZTxUZWFtTm9kZT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgIGtleTogJ3RlYW1zJyxcbiAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgIHJlbGF0aXZlUGF0aDogdGVhbUlkLFxuICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3RlYW1zJ1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IFRlYW1Ob2RlKHJlc3AuZGF0YSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gPT09IFJhZGFycyA9PT1cblxuICBhc3luYyBnZXRSYWRhcnModGVhbUlkOiBzdHJpbmcpOiBQcm9taXNlPEFycmF5PFJhZGFyTm9kZT4+IHtcbiAgICBjb25zdCByYWRhcnMgPSBbXTtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhZGFycycgKyAodGVhbUlkID8gJz90ZWFtSWQ9JyArIHRlYW1JZCA6ICcnKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICBrZXk6ICdyYWRhcnMnLFxuICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgZGVmYXVsdEtleVVybDogdXJsLFxuICAgICAgfSk7XG4gICAgICBmb3IgKGNvbnN0IHIgb2YgcmVzcC5kYXRhLnJhZGFycykge1xuICAgICAgICBjb25zdCByYWRhciA9IG5ldyBSYWRhck5vZGUocik7XG4gICAgICAgIHJhZGFycy5wdXNoKHJhZGFyKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgfVxuICAgIHJldHVybiByYWRhcnM7XG4gIH1cblxuICBhc3luYyBnZXRSYWRhcihpZDogc3RyaW5nKTogUHJvbWlzZTxSYWRhck5vZGU+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICBrZXk6ICdyYWRhcnMnLFxuICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgcmVsYXRpdmVQYXRoOiBpZCxcbiAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWRhcnMnXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXcgUmFkYXJOb2RlKHJlc3AuZGF0YSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgYXN5bmMgcHV0UmFkYXIocmFkYXJOb2RlOiBSYWRhck5vZGUsIGNvbmZpZ3VyYXRpb25Bc0pTT04/OiBhbnkpOiBQcm9taXNlPFJhZGFyTm9kZT4ge1xuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBuYW1lOiByYWRhck5vZGUubmFtZSxcbiAgICB9O1xuXG4gICAgaWYgKGNvbmZpZ3VyYXRpb25Bc0pTT04pIHtcbiAgICAgIGRhdGFbJ2NvbmZpZ3VyYXRpb25Bc0pTT04nXSA9IGNvbmZpZ3VyYXRpb25Bc0pTT047XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgICAga2V5OiAncmFkYXJzJyxcbiAgICAgICAgcmVsYXRpdmVQYXRoOiByYWRhck5vZGUuaWQsXG4gICAgICAgIHZlcmI6ICdQVVQnLFxuICAgICAgICBkYXRhLFxuICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhZGFycy8nXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIG5ldyBSYWRhck5vZGUocmVzcC5kYXRhKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0TG9uZWx5UmFkYXJzKHJhaW5zOiBSYWluTm9kZVtdKTogUHJvbWlzZTxSYWRhck5vZGVbXT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgIGtleTogJ3JhZGFycycsXG4gICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhZGFycydcbiAgICAgIH0pO1xuICAgICAgY29uc3QgbG9uZWx5UmFkYXJzOiBSYWRhck5vZGVbXSA9IFtdO1xuICAgICAgY29uc3QgcmFkYXJzID0gcmVzcC5kYXRhLnJhZGFycztcbiAgICAgIHJhZGFycy5mb3JFYWNoKHJhZGFyID0+IHtcbiAgICAgICAgbGV0IGZvdW5kID0gZmFsc2U7XG4gICAgICAgIHJhaW5zLmZvckVhY2gocmFpbiA9PiB7XG4gICAgICAgICAgY29uc3QgcmRJZCA9IHJhaW4uZ2V0TGlua0lkKCdyYWRhcicsIDApO1xuICAgICAgICAgIGlmIChyZElkID09PSByYWRhci5pZCkge1xuICAgICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghZm91bmQpIHtcbiAgICAgICAgICBsb25lbHlSYWRhcnMucHVzaChyYWRhcik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGxvbmVseVJhZGFycztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGFzeW5jIGdldFJhaW5UaW1lZnJhbWUocmFpbklkOiBzdHJpbmcsIGJlZ2luOiBEYXRlLCBlbmQ6IERhdGUsIGZvcmNlZCA9IGZhbHNlKTogUHJvbWlzZTxSYWluTm9kZT4ge1xuICAgIHRyeSB7XG4gICAgICBsZXQgcXVlcnlQYXRoID0gJycgKyByYWluSWQgKyAnP2Zvcm1hdD10aW1lZnJhbWUnO1xuICAgICAgaWYgKGJlZ2luKSB7XG4gICAgICAgIHF1ZXJ5UGF0aCArPSAnJmJlZ2luPScgKyBiZWdpbi50b0lTT1N0cmluZygpO1xuICAgICAgfVxuICAgICAgaWYgKGVuZCkge1xuICAgICAgICBxdWVyeVBhdGggKz0gJyZlbmQ9JyArIGVuZC50b0lTT1N0cmluZygpO1xuICAgICAgfVxuICAgICAgaWYgKGZvcmNlZCkge1xuICAgICAgICBxdWVyeVBhdGggKz0gJyZmb3JjZWQ9dHJ1ZSc7XG4gICAgICB9XG4gICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgIHJlbGF0aXZlUGF0aDogcXVlcnlQYXRoLFxuICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJ1xuICAgICAgfSk7XG4gICAgICBjb25zdCByYWluTm9kZSA9IG5ldyBSYWluTm9kZShyZXNwLmRhdGEudGltZWZyYW1lKTtcbiAgICAgIHJhaW5Ob2RlLm5hbWUgKz0gJy5yYWRhci50aW1lZnJhbWUnO1xuICAgICAgcmV0dXJuIHJhaW5Ob2RlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyA9PT0gUmFpbnMgPT09XG5cbiAgYXN5bmMgZ2V0UmFpbnModGVhbUlkOiBzdHJpbmcpOiBQcm9taXNlPEFycmF5PFJhaW5Ob2RlPj4ge1xuICAgIGNvbnN0IHJhaW5zID0gW107XG4gICAgY29uc3QgdXJsID0gdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWlucycgKyAodGVhbUlkID8gJz90ZWFtSWQ9JyArIHRlYW1JZCA6ICcnKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICBrZXk6ICdyYWlucycsXG4gICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICBkZWZhdWx0S2V5VXJsOiB1cmwsXG4gICAgICB9KTtcbiAgICAgIGZvciAoY29uc3QgcmFpbiBvZiByZXNwLmRhdGEucmFpbnMpIHtcbiAgICAgICAgcmFpbnMucHVzaChuZXcgUmFpbk5vZGUocmFpbikpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJhaW5zO1xuICB9XG5cbiAgYXN5bmMgZ2V0UmFpbihpZDogc3RyaW5nKTogUHJvbWlzZTxSYWluTm9kZT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgcmVsYXRpdmVQYXRoOiBpZCxcbiAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFpbnMvJ1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IFJhaW5Ob2RlKHJlc3AuZGF0YSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vID09PSBDb3VudFxuXG4gIGFzeW5jIGdldENvdW50cyhyYWluSWQ6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgIHBlcmlvZEJlZ2luPzogRGF0ZSxcbiAgICAgICAgICAgICAgICAgIHBlcmlvZEVuZD86IERhdGUsXG4gICAgICAgICAgICAgICAgICB3aXRoUXVhbGl0aWVzPzogYm9vbGVhbik6IFByb21pc2U8e1xuICAgIHJhZGFyTWVhc3VyZXM6IFhZVHlwZVtdLFxuICAgIGdhdWdlTWVhc3VyZXM6IFhZVHlwZVtdLFxuICAgIGNvbXB1dGF0aW9uc0J5VGVhbTogWFlUeXBlW10sXG4gICAgY29tcHV0YXRpb25zSW50ZXJuYWw6IFhZVHlwZVtdLFxuICB9PiB7XG4gICAgdHJ5IHtcblxuICAgICAgbGV0IGFyZ3MgPSAnJztcbiAgICAgIGlmIChwZXJpb2RCZWdpbiAmJiBwZXJpb2RFbmQpIHtcbiAgICAgICAgYXJncyA9ICc/cGVyaW9kQmVnaW49JyArIHBlcmlvZEJlZ2luLnRvSVNPU3RyaW5nKCkgKyAnJnBlcmlvZEVuZD0nICsgcGVyaW9kRW5kLnRvSVNPU3RyaW5nKCk7XG4gICAgICB9XG4gICAgICBpZiAod2l0aFF1YWxpdGllcykge1xuICAgICAgICBhcmdzICs9ICcmd2l0aFF1YWxpdGllcz0nICsgd2l0aFF1YWxpdGllcztcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICBrZXk6ICdyYWlucycsXG4gICAgICAgIHJlbGF0aXZlUGF0aDogcmFpbklkICsgJy9jb3VudHMnICsgYXJncyxcbiAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFpbnMvJyxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBjb3VudHMgPSByZXNwLmRhdGEuY291bnRzO1xuICAgICAgY29uc3QgcmFkYXJNZWFzdXJlczogWFlUeXBlW10gPSBbXSxcbiAgICAgICAgZ2F1Z2VNZWFzdXJlczogWFlUeXBlW10gPSBbXSxcbiAgICAgICAgY29tcHV0YXRpb25zQnlUZWFtOiBYWVR5cGVbXSA9IFtdLFxuICAgICAgICBjb21wdXRhdGlvbnNJbnRlcm5hbDogWFlUeXBlW10gPSBbXTtcblxuICAgICAgY291bnRzLmZvckVhY2goYyA9PiB7XG4gICAgICAgIHJhZGFyTWVhc3VyZXMucHVzaChuZXcgWFlUeXBlKDEsIE5hTiwgTmFOLCBjLl9pZCkpO1xuICAgICAgICBnYXVnZU1lYXN1cmVzLnB1c2gobmV3IFhZVHlwZShjLmdhdWdlTWVhc3VyZXMsIE5hTiwgTmFOLCBjLl9pZCkpO1xuICAgICAgICBjb21wdXRhdGlvbnNCeVRlYW0ucHVzaChuZXcgWFlUeXBlKGMuY29tcHV0YXRpb25zQnlUZWFtLCBOYU4sIE5hTiwgYy5faWQpKTtcbiAgICAgICAgY29tcHV0YXRpb25zSW50ZXJuYWwucHVzaChuZXcgWFlUeXBlKGMuY29tcHV0YXRpb25zSW50ZXJuYWwsIE5hTiwgTmFOLCBjLl9pZCkpO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJhZGFyTWVhc3VyZXMsXG4gICAgICAgIGdhdWdlTWVhc3VyZXMsXG4gICAgICAgIGNvbXB1dGF0aW9uc0J5VGVhbSxcbiAgICAgICAgY29tcHV0YXRpb25zSW50ZXJuYWwsXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyA9PT0gQ29tcHV0aW5nID09PVxuXG4gIGFzeW5jIGxhdW5jaFJhaW5Db21wdXRhdGlvbihyYWluSWQ6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGU6IERhdGUpOiBQcm9taXNlPFJhaW5Db21wdXRhdGlvbltdPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgIHZlcmI6ICdQT1NUJyxcbiAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgIHJlbGF0aXZlUGF0aDogJycgKyByYWluSWQgKyAnL2NvbXB1dGF0aW9ucycsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGRhdGU6IGRhdGUudG9JU09TdHJpbmcoKSxcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJ1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEuY29tcHV0YXRpb25zPy5tYXAoYyA9PiBuZXcgUmFpbkNvbXB1dGF0aW9uKGMpKTtcbiAgfVxuXG4gIGFzeW5jIGdldFJhaW5Db21wdXRhdGlvbkNhcnRlc2lhbk1hcEJ5SWQocmFpbklkOiBzdHJpbmcsIHJhaW5Db21wdXRhdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPFJhaW5Db21wdXRhdGlvbk1hcD4ge1xuICAgIGNvbnN0IHF1ZXJ5UGF0aCA9ICcnICsgcmFpbklkICsgJy9jb21wdXRhdGlvbnMvJyArIHJhaW5Db21wdXRhdGlvbklkICsgJz9mb3JtYXQ9Y2FydGVzaWFuLW1hcCc7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50KHtcbiAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgcmVsYXRpdmVQYXRoOiBxdWVyeVBhdGgsXG4gICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJ1xuICAgIH0pO1xuICAgIGlmICghcmVzcG9uc2UuZGF0YVsnY2FydGVzaWFuLW1hcCddKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCByYWluQ29tcHV0YXRpb25NYXAgPSBuZXcgUmFpbkNvbXB1dGF0aW9uTWFwKHJlc3BvbnNlLmRhdGFbJ2NhcnRlc2lhbi1tYXAnXSk7XG4gICAgcmFpbkNvbXB1dGF0aW9uTWFwLm5hbWUgPSByYWluSWQgKyAnLnJhaW4uY2FydGVzaWFuLW1hcCc7XG4gICAgcmV0dXJuIHJhaW5Db21wdXRhdGlvbk1hcDtcbiAgfVxuXG4gIGFzeW5jIGdldFJhaW5Db21wdXRhdGlvbkN1bXVsYXRpdmVNYXBCeUlkKHJhaW5JZDogc3RyaW5nLCByYWluQ29tcHV0YXRpb25JZDogc3RyaW5nKTogUHJvbWlzZTxSYWluQ29tcHV0YXRpb25NYXA+IHtcbiAgICBjb25zdCBxdWVyeVBhdGggPSAnJyArIHJhaW5JZCArICcvY29tcHV0YXRpb25zLycgKyByYWluQ29tcHV0YXRpb25JZCArICcvY3VtdWxhdGl2ZS8xJztcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICByZWxhdGl2ZVBhdGg6IHF1ZXJ5UGF0aCxcbiAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFpbnMnXG4gICAgfSk7XG4gICAgaWYgKCFyZXNwb25zZS5kYXRhWydjdW11bGF0aXZlJ10pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHJhaW5Db21wdXRhdGlvbk1hcCA9IG5ldyBSYWluQ29tcHV0YXRpb25NYXAocmVzcG9uc2UuZGF0YVsnY3VtdWxhdGl2ZSddKTtcbiAgICByYWluQ29tcHV0YXRpb25NYXAubmFtZSA9IHJhaW5JZCArICcucmFpbi5jdW11bGF0aXZlJztcbiAgICByZXR1cm4gcmFpbkNvbXB1dGF0aW9uTWFwO1xuICB9XG5cbiAgYXN5bmMgZ2V0UmFpbkNvbXBhcmVzKHJhaW5JZDogc3RyaW5nLCByYWluQ29tcHV0YXRpb25JZDogc3RyaW5nKTogUHJvbWlzZTx7IGlkOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZyB9W10+IHtcbiAgICBjb25zdCBxdWVyeVBhdGggPSAnJyArIHJhaW5JZCArICcvY29tcHV0YXRpb25zLycgKyByYWluQ29tcHV0YXRpb25JZDtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICByZWxhdGl2ZVBhdGg6IHF1ZXJ5UGF0aCxcbiAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFpbnMnLFxuICAgICAgLy8gdGltZW91dDogMjAwMDAwLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmFpbkNvbXB1dGF0aW9uID0gbmV3IFJhaW5Db21wdXRhdGlvbihyZXNwb25zZS5kYXRhKTtcbiAgICBjb25zdCBsaW5rcyA9IHJhaW5Db21wdXRhdGlvbi5nZXRMaW5rcygpO1xuICAgIGNvbnN0IHJhaW5Db21wdXRhdGlvblF1YWxpdGllcyA9IFtdO1xuICAgIGZvciAoY29uc3QgbGluayBvZiBsaW5rcykge1xuICAgICAgaWYgKGxpbmsucmVsID09PSAncmFpbi1jb21wdXRhdGlvbi1xdWFsaXR5Jykge1xuICAgICAgICBjb25zdCBpZCA9IGxpbmsuZ2V0SWQoKTtcbiAgICAgICAgY29uc3QgdmVyc2lvbiA9IGxpbmsuaHJlZi5zdWJzdHJpbmcobGluay5ocmVmLmluZGV4T2YoJ3ZlcnNpb24vJykgKyA4LCBsaW5rLmhyZWYuaW5kZXhPZignLycgKyBpZCkpO1xuICAgICAgICByYWluQ29tcHV0YXRpb25RdWFsaXRpZXMucHVzaCh7aWQsIHZlcnNpb259KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJhaW5Db21wdXRhdGlvblF1YWxpdGllcztcbiAgfVxuXG4gIGFzeW5jIGdldFJhaW5Db21wYXJlQnlJZChyYWluSWQ6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaW5Db21wdXRhdGlvbklkOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICByYWluQ29tcHV0YXRpb25RdWFsaXR5SWQ6IHN0cmluZyk6IFByb21pc2U8UmFpbkNvbXB1dGF0aW9uUXVhbGl0eT4ge1xuICAgIGNvbnN0IHF1ZXJ5UGF0aCA9ICcnICsgcmFpbklkICsgJy9jb21wdXRhdGlvbnMvJyArIHJhaW5Db21wdXRhdGlvbklkICsgJy9jb21wYXJlcy8nICsgcmFpbkNvbXB1dGF0aW9uUXVhbGl0eUlkO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICBrZXk6ICdyYWlucycsXG4gICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgIHJlbGF0aXZlUGF0aDogcXVlcnlQYXRoLFxuICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWlucycsXG4gICAgfSk7XG5cbiAgICBjb25zdCByYWluQ29tcHV0YXRpb25RdWFsaXR5ID0gbmV3IFJhaW5Db21wdXRhdGlvblF1YWxpdHkocmVzcG9uc2UuZGF0YSk7XG4gICAgcmFpbkNvbXB1dGF0aW9uUXVhbGl0eS5xdWFsaXR5U3BlZWRNYXRyaXhDb250YWluZXIgPSBTcGVlZE1hdHJpeENvbnRhaW5lclxuICAgICAgLkNyZWF0ZUZyb21Kc29uKHJhaW5Db21wdXRhdGlvblF1YWxpdHkucXVhbGl0eVNwZWVkTWF0cml4Q29udGFpbmVyKTtcbiAgICByZXR1cm4gcmFpbkNvbXB1dGF0aW9uUXVhbGl0eTtcbiAgfVxuXG4gIC8vID09PSBHYXVnZXMgPT09XG5cbiAgYXN5bmMgZ2V0R2F1Z2UoZ2F1Z2VJZDogc3RyaW5nKTogUHJvbWlzZTxHYXVnZU5vZGU+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICBrZXk6ICdnYXVnZXMnLFxuICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgcmVsYXRpdmVQYXRoOiBnYXVnZUlkLFxuICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL2dhdWdlcydcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG5ldyBHYXVnZU5vZGUocmVzcC5kYXRhKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0R2F1Z2VzKHJhaW5JZD86IHN0cmluZyk6IFByb21pc2U8QXJyYXk8R2F1Z2VOb2RlRmlsdGVyPj4ge1xuICAgIGxldCBxdWVyeVBhdGggPSAnJztcbiAgICBpZiAodGhpcy5hc1RlYW1JZCkge1xuICAgICAgcXVlcnlQYXRoICs9ICc/dGVhbUlkPScgKyB0aGlzLmFzVGVhbUlkO1xuICAgIH1cbiAgICBpZiAocmFpbklkKSB7XG4gICAgICBpZiAocXVlcnlQYXRoKSB7XG4gICAgICAgIHF1ZXJ5UGF0aCArPSAnJic7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxdWVyeVBhdGggKz0gJz8nO1xuICAgICAgfVxuICAgICAgcXVlcnlQYXRoICs9ICdyYWluSWQ9JyArIHJhaW5JZDtcbiAgICB9XG5cbiAgICBjb25zdCBnYXVnZXMgPSBbXTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQoe1xuICAgICAgICBrZXk6ICdnYXVnZXMnLFxuICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgcmVsYXRpdmVQYXRoOiBxdWVyeVBhdGgsXG4gICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvZ2F1Z2VzJ1xuICAgICAgfSk7XG5cbiAgICAgIGZvciAoY29uc3QgZ2F1Z2Ugb2YgcmVzcC5kYXRhLmdhdWdlcykge1xuICAgICAgICBnYXVnZXMucHVzaChuZXcgR2F1Z2VOb2RlRmlsdGVyKGdhdWdlKSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgIH1cbiAgICByZXR1cm4gZ2F1Z2VzO1xuICB9XG5cbiAgYXN5bmMgZ2V0R2F1Z2VNZWFzdXJlcyhnYXVnZUlkOiBzdHJpbmcsIGJlZ2luOiBEYXRlLCBlbmQ6IERhdGUpOiBQcm9taXNlPEdhdWdlTWVhc3VyZVtdPiB7XG4gICAgY29uc3QgcXVlcnlQYXRoID0gJycgKyBnYXVnZUlkICsgJy9tZWFzdXJlcz9iZWdpbj0nICsgYmVnaW4udG9JU09TdHJpbmcoKSArICcmZW5kPScgKyBlbmQudG9JU09TdHJpbmcoKTtcbiAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludCh7XG4gICAgICBrZXk6ICdnYXVnZXMnLFxuICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICByZWxhdGl2ZVBhdGg6IHF1ZXJ5UGF0aCxcbiAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvZ2F1Z2VzJ1xuICAgIH0pO1xuXG4gICAgY29uc3QgZ2F1Z2VNZWFzdXJlczogR2F1Z2VNZWFzdXJlW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGdhdWdlTWVhc3VyZSBvZiByZXNwLmRhdGEuZ2F1Z2VNZWFzdXJlcykge1xuICAgICAgZ2F1Z2VNZWFzdXJlcy5wdXNoKG5ldyBHYXVnZU1lYXN1cmUoZ2F1Z2VNZWFzdXJlKSk7XG4gICAgfVxuICAgIHJldHVybiBnYXVnZU1lYXN1cmVzO1xuICB9XG5cbiAgLy8gPT09IFByaXZhdGUgPT09XG5cbiAgcHJvdGVjdGVkIHNldFJvbGVzKHJvbGVzOiBBcnJheTxzdHJpbmc+KTogdm9pZCB7XG4gICAgdGhpcy5yb2xlcyA9IHJvbGVzO1xuICB9XG5cbn1cbiJdfQ==
@@ -73,10 +73,10 @@ export class RaainDateFocusComponent {
73
73
  }
74
74
  }
75
75
  RaainDateFocusComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RaainDateFocusComponent, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
76
- RaainDateFocusComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: RaainDateFocusComponent, selector: "raain-date-focus", inputs: { points: "points", focusDate: "focusDate", focusRange: "focusRange", withoutAll: "withoutAll", currentHeight: "currentHeight" }, host: { listeners: { "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "canvasElement", first: true, predicate: ["canvasElement"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ion-grid>\n <ion-row>\n <ion-col *ngIf=\"!withoutAll\" class=\"ion-text-center\" size-sm=\"2\">\n <ion-button (click)=\"focusReset()\">\n View all dates\n </ion-button>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-end\">\n <ion-col class=\"ion-text-right\" size-sm=\"1\">\n <ion-button (click)=\"focusPrevious()\">\n <ion-icon name=\"chevron-back-outline\"></ion-icon>\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-left\" size-sm=\"1\">\n <ion-button (click)=\"focusNext()\">\n <ion-icon name=\"chevron-forward-outline\"></ion-icon>\n </ion-button>\n </ion-col>\n <ion-col id=\"col-container\" size-sm=\"10\">\n <div [style.height.px]=\"currentHeight\" [style.width.px]=\"currentWidth\" id=\"canvas-container\">\n <canvas #canvasElement></canvas>\n </div>\n </ion-col>\n </ion-row>\n</ion-grid>\n", styles: ["#col-container{height:100%}#canvas-container{position:relative;min-width:600px;height:100%}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i2.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonRow, selector: "ion-row" }] });
76
+ RaainDateFocusComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: RaainDateFocusComponent, selector: "raain-date-focus", inputs: { points: "points", focusDate: "focusDate", focusRange: "focusRange", withoutAll: "withoutAll", currentHeight: "currentHeight" }, host: { listeners: { "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "canvasElement", first: true, predicate: ["canvasElement"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ion-grid>\n <ion-row>\n <ion-col id=\"col-container\" size-sm=\"12\">\n <div [style.height.px]=\"currentHeight\" id=\"canvas-container\">\n <canvas #canvasElement></canvas>\n </div>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col class=\"ion-text-right\" offset-sm=\"4\" size-sm=\"1\">\n <ion-button (click)=\"focusPrevious()\" color=\"medium\" fill=\"clear\">\n <ion-icon name=\"chevron-back-outline\"></ion-icon>\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center\" size-sm=\"2\">\n <ion-button (click)=\"focusReset()\" *ngIf=\"!withoutAll\" color=\"medium\" fill=\"clear\">\n all dates\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-left\" size-sm=\"1\">\n <ion-button (click)=\"focusNext()\" color=\"medium\" fill=\"clear\">\n <ion-icon name=\"chevron-forward-outline\"></ion-icon>\n </ion-button>\n </ion-col>\n </ion-row>\n</ion-grid>\n", styles: ["#canvas-container{position:relative}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i2.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonRow, selector: "ion-row" }] });
77
77
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RaainDateFocusComponent, decorators: [{
78
78
  type: Component,
79
- args: [{ selector: 'raain-date-focus', template: "<ion-grid>\n <ion-row>\n <ion-col *ngIf=\"!withoutAll\" class=\"ion-text-center\" size-sm=\"2\">\n <ion-button (click)=\"focusReset()\">\n View all dates\n </ion-button>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-end\">\n <ion-col class=\"ion-text-right\" size-sm=\"1\">\n <ion-button (click)=\"focusPrevious()\">\n <ion-icon name=\"chevron-back-outline\"></ion-icon>\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-left\" size-sm=\"1\">\n <ion-button (click)=\"focusNext()\">\n <ion-icon name=\"chevron-forward-outline\"></ion-icon>\n </ion-button>\n </ion-col>\n <ion-col id=\"col-container\" size-sm=\"10\">\n <div [style.height.px]=\"currentHeight\" [style.width.px]=\"currentWidth\" id=\"canvas-container\">\n <canvas #canvasElement></canvas>\n </div>\n </ion-col>\n </ion-row>\n</ion-grid>\n", styles: ["#col-container{height:100%}#canvas-container{position:relative;min-width:600px;height:100%}\n"] }]
79
+ args: [{ selector: 'raain-date-focus', template: "<ion-grid>\n <ion-row>\n <ion-col id=\"col-container\" size-sm=\"12\">\n <div [style.height.px]=\"currentHeight\" id=\"canvas-container\">\n <canvas #canvasElement></canvas>\n </div>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col class=\"ion-text-right\" offset-sm=\"4\" size-sm=\"1\">\n <ion-button (click)=\"focusPrevious()\" color=\"medium\" fill=\"clear\">\n <ion-icon name=\"chevron-back-outline\"></ion-icon>\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center\" size-sm=\"2\">\n <ion-button (click)=\"focusReset()\" *ngIf=\"!withoutAll\" color=\"medium\" fill=\"clear\">\n all dates\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-left\" size-sm=\"1\">\n <ion-button (click)=\"focusNext()\" color=\"medium\" fill=\"clear\">\n <ion-icon name=\"chevron-forward-outline\"></ion-icon>\n </ion-button>\n </ion-col>\n </ion-row>\n</ion-grid>\n", styles: ["#canvas-container{position:relative}\n"] }]
80
80
  }], ctorParameters: function () { return [{ type: i0.NgZone }]; }, propDecorators: { points: [{
81
81
  type: Input
82
82
  }], focusDate: [{
@@ -94,4 +94,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
94
94
  type: HostListener,
95
95
  args: ['window:resize', ['$event']]
96
96
  }] } });
97
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFhaW4tZGF0ZS1mb2N1cy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9yYWFpbi1kYXRlLWZvY3VzL3JhYWluLWRhdGUtZm9jdXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvcmFhaW4tZGF0ZS1mb2N1cy9yYWFpbi1kYXRlLWZvY3VzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFLTCxTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLFNBQVMsRUFBcUIsc0JBQXNCLEVBQUUsZUFBZSxFQUFDLE1BQU0sVUFBVSxDQUFDOzs7O0FBTy9GLE1BQU0sT0FBTyx1QkFBdUI7SUEyQmxDLFlBQW9CLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2hDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQTtRQUMzQixJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUM7UUFDcEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxHQUFHLEVBQUU7UUFDMUIsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVNLGtCQUFrQjtRQUN2QixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVNLFdBQVcsQ0FBQyxPQUFzQjtRQUN2QyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFTSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBR08sUUFBUSxDQUFDLEtBQVU7UUFDekIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFTyxNQUFNO1FBQ1osSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2hCLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBRXBCLHdDQUF3QztRQUN4QyxzQkFBc0I7UUFDdEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUN0QyxJQUFJO1lBQ0YsSUFBSSxDQUFDLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsRUFDaEYsSUFBSSxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7U0FDN0U7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE9BQU8sQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDekM7UUFDRCxXQUFXO1FBQ1gsTUFBTTtJQUVSLENBQUM7SUFFTyxLQUFLLENBQUMsTUFBTTtRQUNsQixNQUFNLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDL0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDdkIsQ0FBQztJQUVPLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBc0I7UUFDekMsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFTyxhQUFhO1FBRW5CLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDM0YsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksWUFBWSxHQUFHLFdBQVc7WUFDNUIsQ0FBQyxNQUFNLENBQUMsVUFBVSxJQUFJLFFBQVEsQ0FBQyxlQUFlLENBQUMsV0FBVyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDM0YsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWE7WUFDdEMsQ0FBQyxNQUFNLENBQUMsV0FBVyxJQUFJLFFBQVEsQ0FBQyxlQUFlLENBQUMsWUFBWSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDOUYsWUFBWSxJQUFJLE9BQU8sQ0FBQztRQUN4QixJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUNqQyxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztRQUVuQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDbkIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7cUhBNUdVLHVCQUF1Qjt5R0FBdkIsdUJBQXVCLHFZQ25CcEMsMDVCQTBCQTs0RkRQYSx1QkFBdUI7a0JBTG5DLFNBQVM7K0JBQ0Usa0JBQWtCOzZGQU9yQixNQUFNO3NCQURaLEtBQUs7Z0JBUUMsU0FBUztzQkFEZixLQUFLO2dCQUdDLFVBQVU7c0JBRGhCLEtBQUs7Z0JBR0MsVUFBVTtzQkFEaEIsS0FBSztnQkFJQyxhQUFhO3NCQURuQixLQUFLO2dCQUtJLGFBQWE7c0JBRHRCLFNBQVM7dUJBQUMsZUFBZTtnQkF1Q2xCLFFBQVE7c0JBRGYsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdDaGVja2VkLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RGF0ZVJhbmdlLCBEYXRlU3RhdHVzRWxlbWVudCwgRGF0ZVN0YXR1c0VsZW1lbnRJbnB1dCwgRWxlbWVudHNGYWN0b3J5fSBmcm9tICdyYWFpbi11aSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3JhYWluLWRhdGUtZm9jdXMnLFxuICB0ZW1wbGF0ZVVybDogJy4vcmFhaW4tZGF0ZS1mb2N1cy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3JhYWluLWRhdGUtZm9jdXMuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgUmFhaW5EYXRlRm9jdXNDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdDaGVja2VkLCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHBvaW50czoge1xuICAgIGxhYmVsOiBzdHJpbmcsXG4gICAgc3R5bGU6IHN0cmluZyxcbiAgICB2YWx1ZXM6IHsgZGF0ZTogRGF0ZSwgdmFsdWU6IG51bWJlciB9W10sXG4gIH1bXTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZm9jdXNEYXRlOiBEYXRlO1xuICBASW5wdXQoKVxuICBwdWJsaWMgZm9jdXNSYW5nZTogRGF0ZVJhbmdlO1xuICBASW5wdXQoKVxuICBwdWJsaWMgd2l0aG91dEFsbDogYm9vbGVhbjtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgY3VycmVudEhlaWdodDogbnVtYmVyO1xuICBwdWJsaWMgY3VycmVudFdpZHRoOiBudW1iZXI7XG5cbiAgQFZpZXdDaGlsZCgnY2FudmFzRWxlbWVudCcpXG4gIHByb3RlY3RlZCBjYW52YXNFbGVtZW50OiBFbGVtZW50UmVmO1xuXG4gIHByaXZhdGUgZGF0ZVN0YXR1c0VsZW1lbnQ6IERhdGVTdGF0dXNFbGVtZW50O1xuICBwcml2YXRlIG9uU2l6ZUNoYW5nZWQ7XG4gIHByaXZhdGUgY3JlYXRlZDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG5nWm9uZTogTmdab25lKSB7XG4gICAgdGhpcy5mb2N1c0RhdGUgPSBuZXcgRGF0ZSgpXG4gICAgdGhpcy5mb2N1c1JhbmdlID0gRGF0ZVJhbmdlLkNFTlRVUlk7XG4gICAgdGhpcy5vblNpemVDaGFuZ2VkID0gKCkgPT4ge1xuICAgIH07XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xuICAgIHRoaXMuY3JlYXRlKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIHRoaXMuY2hhbmdlKGNoYW5nZXMpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVsZXRlKCk7XG4gIH1cblxuICBmb2N1c1ByZXZpb3VzKCkge1xuICAgIHRoaXMuZGF0ZVN0YXR1c0VsZW1lbnQuZm9jdXNQcmV2aW91cygpO1xuICB9XG5cbiAgZm9jdXNSZXNldCgpIHtcbiAgICB0aGlzLmRhdGVTdGF0dXNFbGVtZW50LmZvY3VzUmVzZXQoKTtcbiAgfVxuXG4gIGZvY3VzTmV4dCgpIHtcbiAgICB0aGlzLmRhdGVTdGF0dXNFbGVtZW50LmZvY3VzTmV4dCgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFsnJGV2ZW50J10pXG4gIHByaXZhdGUgb25SZXNpemUoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlTWFwU2l6ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGUoKSB7XG4gICAgaWYgKHRoaXMuY3JlYXRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNyZWF0ZWQgPSB0cnVlO1xuXG4gICAgLy8gdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgIC8vICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICBjb25zdCBmYWN0b3J5ID0gbmV3IEVsZW1lbnRzRmFjdG9yeSgpO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmRhdGVTdGF0dXNFbGVtZW50ID0gZmFjdG9yeS5jcmVhdGVEYXRlU3RhdHVzKHRoaXMuY2FudmFzRWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgICBuZXcgRGF0ZVN0YXR1c0VsZW1lbnRJbnB1dCh0aGlzLnBvaW50cywgdGhpcy5mb2N1c0RhdGUsIHRoaXMuZm9jdXNSYW5nZSkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUud2FybignZm9jdXMgY3JlYXRpb24gaXNzdWUnLCBlKTtcbiAgICB9XG4gICAgLy8gIH0sIDUwKTtcbiAgICAvLyB9KTtcblxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkZWxldGUoKSB7XG4gICAgYXdhaXQgdGhpcy5kYXRlU3RhdHVzRWxlbWVudD8uY2hhcnQ/LmRlc3Ryb3koKTtcbiAgICB0aGlzLmNyZWF0ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2hhbmdlKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBhd2FpdCB0aGlzLmRlbGV0ZSgpO1xuICAgIHRoaXMuY3JlYXRlKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU1hcFNpemUoKTogdm9pZCB7XG5cbiAgICBjb25zdCBtYXBEaXZXaWR0aCA9IHRoaXMuY2FudmFzRWxlbWVudC5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGU/LnBhcmVudE5vZGVbJ2NsaWVudFdpZHRoJ107XG4gICAgY29uc3QgcGFkZGluZyA9IDIwO1xuICAgIGxldCBjdXJyZW50V2lkdGggPSBtYXBEaXZXaWR0aCB8fFxuICAgICAgKHdpbmRvdy5pbm5lcldpZHRoIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCB8fCBkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoKTtcbiAgICBjb25zdCBjdXJyZW50SGVpZ2h0ID0gdGhpcy5jdXJyZW50SGVpZ2h0IHx8XG4gICAgICAod2luZG93LmlubmVySGVpZ2h0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgfHwgZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQpO1xuICAgIGN1cnJlbnRXaWR0aCAtPSBwYWRkaW5nO1xuICAgIHRoaXMuY3VycmVudFdpZHRoID0gY3VycmVudFdpZHRoO1xuICAgIHRoaXMuY3VycmVudEhlaWdodCA9IGN1cnJlbnRIZWlnaHQ7XG5cbiAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgdGhpcy5vblNpemVDaGFuZ2VkKCk7XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxpb24tZ3JpZD5cbiAgPGlvbi1yb3c+XG4gICAgPGlvbi1jb2wgKm5nSWY9XCIhd2l0aG91dEFsbFwiIGNsYXNzPVwiaW9uLXRleHQtY2VudGVyXCIgc2l6ZS1zbT1cIjJcIj5cbiAgICAgIDxpb24tYnV0dG9uIChjbGljayk9XCJmb2N1c1Jlc2V0KClcIj5cbiAgICAgICAgVmlldyBhbGwgZGF0ZXNcbiAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICA8L2lvbi1jb2w+XG4gIDwvaW9uLXJvdz5cbiAgPGlvbi1yb3cgY2xhc3M9XCJpb24tYWxpZ24taXRlbXMtZW5kXCI+XG4gICAgPGlvbi1jb2wgY2xhc3M9XCJpb24tdGV4dC1yaWdodFwiIHNpemUtc209XCIxXCI+XG4gICAgICA8aW9uLWJ1dHRvbiAoY2xpY2spPVwiZm9jdXNQcmV2aW91cygpXCI+XG4gICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2hldnJvbi1iYWNrLW91dGxpbmVcIj48L2lvbi1pY29uPlxuICAgICAgPC9pb24tYnV0dG9uPlxuICAgIDwvaW9uLWNvbD5cbiAgICA8aW9uLWNvbCBjbGFzcz1cImlvbi10ZXh0LWxlZnRcIiBzaXplLXNtPVwiMVwiPlxuICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cImZvY3VzTmV4dCgpXCI+XG4gICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2hldnJvbi1mb3J3YXJkLW91dGxpbmVcIj48L2lvbi1pY29uPlxuICAgICAgPC9pb24tYnV0dG9uPlxuICAgIDwvaW9uLWNvbD5cbiAgICA8aW9uLWNvbCBpZD1cImNvbC1jb250YWluZXJcIiBzaXplLXNtPVwiMTBcIj5cbiAgICAgIDxkaXYgW3N0eWxlLmhlaWdodC5weF09XCJjdXJyZW50SGVpZ2h0XCIgW3N0eWxlLndpZHRoLnB4XT1cImN1cnJlbnRXaWR0aFwiIGlkPVwiY2FudmFzLWNvbnRhaW5lclwiPlxuICAgICAgICA8Y2FudmFzICNjYW52YXNFbGVtZW50PjwvY2FudmFzPlxuICAgICAgPC9kaXY+XG4gICAgPC9pb24tY29sPlxuICA8L2lvbi1yb3c+XG48L2lvbi1ncmlkPlxuIl19
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFhaW4tZGF0ZS1mb2N1cy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9yYWFpbi1kYXRlLWZvY3VzL3JhYWluLWRhdGUtZm9jdXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvcmFhaW4tZGF0ZS1mb2N1cy9yYWFpbi1kYXRlLWZvY3VzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFLTCxTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLFNBQVMsRUFBcUIsc0JBQXNCLEVBQUUsZUFBZSxFQUFDLE1BQU0sVUFBVSxDQUFDOzs7O0FBTy9GLE1BQU0sT0FBTyx1QkFBdUI7SUEyQmxDLFlBQW9CLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2hDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQTtRQUMzQixJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUM7UUFDcEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxHQUFHLEVBQUU7UUFDMUIsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVNLGtCQUFrQjtRQUN2QixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVNLFdBQVcsQ0FBQyxPQUFzQjtRQUN2QyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFTSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBR08sUUFBUSxDQUFDLEtBQVU7UUFDekIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFTyxNQUFNO1FBQ1osSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2hCLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBRXBCLHdDQUF3QztRQUN4QyxzQkFBc0I7UUFDdEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUN0QyxJQUFJO1lBQ0YsSUFBSSxDQUFDLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsRUFDaEYsSUFBSSxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7U0FDN0U7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE9BQU8sQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDekM7UUFDRCxXQUFXO1FBQ1gsTUFBTTtJQUVSLENBQUM7SUFFTyxLQUFLLENBQUMsTUFBTTtRQUNsQixNQUFNLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDL0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDdkIsQ0FBQztJQUVPLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBc0I7UUFDekMsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFTyxhQUFhO1FBRW5CLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDM0YsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksWUFBWSxHQUFHLFdBQVc7WUFDNUIsQ0FBQyxNQUFNLENBQUMsVUFBVSxJQUFJLFFBQVEsQ0FBQyxlQUFlLENBQUMsV0FBVyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDM0YsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWE7WUFDdEMsQ0FBQyxNQUFNLENBQUMsV0FBVyxJQUFJLFFBQVEsQ0FBQyxlQUFlLENBQUMsWUFBWSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDOUYsWUFBWSxJQUFJLE9BQU8sQ0FBQztRQUN4QixJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUNqQyxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztRQUVuQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDbkIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7cUhBNUdVLHVCQUF1Qjt5R0FBdkIsdUJBQXVCLHFZQ25CcEMsdThCQTJCQTs0RkRSYSx1QkFBdUI7a0JBTG5DLFNBQVM7K0JBQ0Usa0JBQWtCOzZGQU9yQixNQUFNO3NCQURaLEtBQUs7Z0JBUUMsU0FBUztzQkFEZixLQUFLO2dCQUdDLFVBQVU7c0JBRGhCLEtBQUs7Z0JBR0MsVUFBVTtzQkFEaEIsS0FBSztnQkFJQyxhQUFhO3NCQURuQixLQUFLO2dCQUtJLGFBQWE7c0JBRHRCLFNBQVM7dUJBQUMsZUFBZTtnQkF1Q2xCLFFBQVE7c0JBRGYsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdDaGVja2VkLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RGF0ZVJhbmdlLCBEYXRlU3RhdHVzRWxlbWVudCwgRGF0ZVN0YXR1c0VsZW1lbnRJbnB1dCwgRWxlbWVudHNGYWN0b3J5fSBmcm9tICdyYWFpbi11aSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3JhYWluLWRhdGUtZm9jdXMnLFxuICB0ZW1wbGF0ZVVybDogJy4vcmFhaW4tZGF0ZS1mb2N1cy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3JhYWluLWRhdGUtZm9jdXMuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgUmFhaW5EYXRlRm9jdXNDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdDaGVja2VkLCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHBvaW50czoge1xuICAgIGxhYmVsOiBzdHJpbmcsXG4gICAgc3R5bGU6IHN0cmluZyxcbiAgICB2YWx1ZXM6IHsgZGF0ZTogRGF0ZSwgdmFsdWU6IG51bWJlciB9W10sXG4gIH1bXTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZm9jdXNEYXRlOiBEYXRlO1xuICBASW5wdXQoKVxuICBwdWJsaWMgZm9jdXNSYW5nZTogRGF0ZVJhbmdlO1xuICBASW5wdXQoKVxuICBwdWJsaWMgd2l0aG91dEFsbDogYm9vbGVhbjtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgY3VycmVudEhlaWdodDogbnVtYmVyO1xuICBwdWJsaWMgY3VycmVudFdpZHRoOiBudW1iZXI7XG5cbiAgQFZpZXdDaGlsZCgnY2FudmFzRWxlbWVudCcpXG4gIHByb3RlY3RlZCBjYW52YXNFbGVtZW50OiBFbGVtZW50UmVmO1xuXG4gIHByaXZhdGUgZGF0ZVN0YXR1c0VsZW1lbnQ6IERhdGVTdGF0dXNFbGVtZW50O1xuICBwcml2YXRlIG9uU2l6ZUNoYW5nZWQ7XG4gIHByaXZhdGUgY3JlYXRlZDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG5nWm9uZTogTmdab25lKSB7XG4gICAgdGhpcy5mb2N1c0RhdGUgPSBuZXcgRGF0ZSgpXG4gICAgdGhpcy5mb2N1c1JhbmdlID0gRGF0ZVJhbmdlLkNFTlRVUlk7XG4gICAgdGhpcy5vblNpemVDaGFuZ2VkID0gKCkgPT4ge1xuICAgIH07XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xuICAgIHRoaXMuY3JlYXRlKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIHRoaXMuY2hhbmdlKGNoYW5nZXMpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVsZXRlKCk7XG4gIH1cblxuICBmb2N1c1ByZXZpb3VzKCkge1xuICAgIHRoaXMuZGF0ZVN0YXR1c0VsZW1lbnQuZm9jdXNQcmV2aW91cygpO1xuICB9XG5cbiAgZm9jdXNSZXNldCgpIHtcbiAgICB0aGlzLmRhdGVTdGF0dXNFbGVtZW50LmZvY3VzUmVzZXQoKTtcbiAgfVxuXG4gIGZvY3VzTmV4dCgpIHtcbiAgICB0aGlzLmRhdGVTdGF0dXNFbGVtZW50LmZvY3VzTmV4dCgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFsnJGV2ZW50J10pXG4gIHByaXZhdGUgb25SZXNpemUoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlTWFwU2l6ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGUoKSB7XG4gICAgaWYgKHRoaXMuY3JlYXRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNyZWF0ZWQgPSB0cnVlO1xuXG4gICAgLy8gdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgIC8vICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICBjb25zdCBmYWN0b3J5ID0gbmV3IEVsZW1lbnRzRmFjdG9yeSgpO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmRhdGVTdGF0dXNFbGVtZW50ID0gZmFjdG9yeS5jcmVhdGVEYXRlU3RhdHVzKHRoaXMuY2FudmFzRWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgICBuZXcgRGF0ZVN0YXR1c0VsZW1lbnRJbnB1dCh0aGlzLnBvaW50cywgdGhpcy5mb2N1c0RhdGUsIHRoaXMuZm9jdXNSYW5nZSkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUud2FybignZm9jdXMgY3JlYXRpb24gaXNzdWUnLCBlKTtcbiAgICB9XG4gICAgLy8gIH0sIDUwKTtcbiAgICAvLyB9KTtcblxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkZWxldGUoKSB7XG4gICAgYXdhaXQgdGhpcy5kYXRlU3RhdHVzRWxlbWVudD8uY2hhcnQ/LmRlc3Ryb3koKTtcbiAgICB0aGlzLmNyZWF0ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2hhbmdlKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBhd2FpdCB0aGlzLmRlbGV0ZSgpO1xuICAgIHRoaXMuY3JlYXRlKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU1hcFNpemUoKTogdm9pZCB7XG5cbiAgICBjb25zdCBtYXBEaXZXaWR0aCA9IHRoaXMuY2FudmFzRWxlbWVudC5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGU/LnBhcmVudE5vZGVbJ2NsaWVudFdpZHRoJ107XG4gICAgY29uc3QgcGFkZGluZyA9IDIwO1xuICAgIGxldCBjdXJyZW50V2lkdGggPSBtYXBEaXZXaWR0aCB8fFxuICAgICAgKHdpbmRvdy5pbm5lcldpZHRoIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCB8fCBkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoKTtcbiAgICBjb25zdCBjdXJyZW50SGVpZ2h0ID0gdGhpcy5jdXJyZW50SGVpZ2h0IHx8XG4gICAgICAod2luZG93LmlubmVySGVpZ2h0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgfHwgZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQpO1xuICAgIGN1cnJlbnRXaWR0aCAtPSBwYWRkaW5nO1xuICAgIHRoaXMuY3VycmVudFdpZHRoID0gY3VycmVudFdpZHRoO1xuICAgIHRoaXMuY3VycmVudEhlaWdodCA9IGN1cnJlbnRIZWlnaHQ7XG5cbiAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgdGhpcy5vblNpemVDaGFuZ2VkKCk7XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxpb24tZ3JpZD5cbiAgPGlvbi1yb3c+XG4gICAgPGlvbi1jb2wgaWQ9XCJjb2wtY29udGFpbmVyXCIgc2l6ZS1zbT1cIjEyXCI+XG4gICAgICA8ZGl2IFtzdHlsZS5oZWlnaHQucHhdPVwiY3VycmVudEhlaWdodFwiIGlkPVwiY2FudmFzLWNvbnRhaW5lclwiPlxuICAgICAgICA8Y2FudmFzICNjYW52YXNFbGVtZW50PjwvY2FudmFzPlxuICAgICAgPC9kaXY+XG4gICAgPC9pb24tY29sPlxuICA8L2lvbi1yb3c+XG5cbiAgPGlvbi1yb3c+XG4gICAgPGlvbi1jb2wgY2xhc3M9XCJpb24tdGV4dC1yaWdodFwiIG9mZnNldC1zbT1cIjRcIiBzaXplLXNtPVwiMVwiPlxuICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cImZvY3VzUHJldmlvdXMoKVwiIGNvbG9yPVwibWVkaXVtXCIgZmlsbD1cImNsZWFyXCI+XG4gICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2hldnJvbi1iYWNrLW91dGxpbmVcIj48L2lvbi1pY29uPlxuICAgICAgPC9pb24tYnV0dG9uPlxuICAgIDwvaW9uLWNvbD5cbiAgICA8aW9uLWNvbCBjbGFzcz1cImlvbi10ZXh0LWNlbnRlclwiIHNpemUtc209XCIyXCI+XG4gICAgICA8aW9uLWJ1dHRvbiAoY2xpY2spPVwiZm9jdXNSZXNldCgpXCIgKm5nSWY9XCIhd2l0aG91dEFsbFwiIGNvbG9yPVwibWVkaXVtXCIgZmlsbD1cImNsZWFyXCI+XG4gICAgICAgIGFsbCBkYXRlc1xuICAgICAgPC9pb24tYnV0dG9uPlxuICAgIDwvaW9uLWNvbD5cbiAgICA8aW9uLWNvbCBjbGFzcz1cImlvbi10ZXh0LWxlZnRcIiBzaXplLXNtPVwiMVwiPlxuICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cImZvY3VzTmV4dCgpXCIgY29sb3I9XCJtZWRpdW1cIiBmaWxsPVwiY2xlYXJcIj5cbiAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjaGV2cm9uLWZvcndhcmQtb3V0bGluZVwiPjwvaW9uLWljb24+XG4gICAgICA8L2lvbi1idXR0b24+XG4gICAgPC9pb24tY29sPlxuICA8L2lvbi1yb3c+XG48L2lvbi1ncmlkPlxuIl19