valtech-components 4.0.406 → 4.0.407

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.
@@ -22,11 +22,13 @@ export class RetroAudioService {
22
22
  constructor() {
23
23
  this.noteIndex = 0;
24
24
  this.activeSamples = new Set();
25
+ this.defaultsReady = this.migrateChessimalsAudioDefaults();
25
26
  this.enabled = signal(this.readEnabled());
26
27
  this.musicEnabled = signal(this.readBooleanSetting('val-mini-games-music-enabled', true));
27
28
  this.sfxEnabled = signal(this.readBooleanSetting('val-mini-games-sfx-enabled', true));
28
- this.musicVolume = signal(this.readVolumeSetting('val-mini-games-music-volume', 0.72));
29
- this.sfxVolume = signal(this.readVolumeSetting('val-mini-games-sfx-volume', 0.86));
29
+ this.musicVolume = signal(this.readVolumeSetting('val-mini-games-music-volume', 0.25));
30
+ this.sfxVolume = signal(this.readVolumeSetting('val-mini-games-sfx-volume', 0.8));
31
+ this.sampleCache = new Map();
30
32
  this.handleVisibilityChange = () => {
31
33
  if (document.hidden) {
32
34
  this.pauseForBackground();
@@ -98,11 +100,22 @@ export class RetroAudioService {
98
100
  await this.startMusic('menu');
99
101
  }
100
102
  async startChessimalsMenuMusic() {
103
+ this.preloadChessimalsSamples();
101
104
  await this.startSampleMusic(CHESSIMALS_MENU_MUSIC);
102
105
  }
103
106
  async startChessimalsGameMusic() {
107
+ this.preloadChessimalsSamples();
104
108
  await this.startSampleMusic(CHESSIMALS_GAME_MUSIC);
105
109
  }
110
+ preloadChessimalsSamples() {
111
+ if (typeof Audio === 'undefined')
112
+ return;
113
+ [
114
+ ...Object.values(CHESSIMALS_POWER_SAMPLES),
115
+ CHESSIMALS_OUTCOME_SAMPLES.victory,
116
+ CHESSIMALS_OUTCOME_SAMPLES.defeat,
117
+ ].forEach((sample) => this.preloadSample(sample.src));
118
+ }
106
119
  async startGameMusic() {
107
120
  await this.startMusic('game');
108
121
  }
@@ -285,7 +298,8 @@ export class RetroAudioService {
285
298
  if (!this.canPlaySfx() || typeof Audio === 'undefined')
286
299
  return false;
287
300
  try {
288
- const audio = new Audio(sample.src);
301
+ const cached = this.sampleCache.get(sample.src);
302
+ const audio = cached ? cached.cloneNode(true) : new Audio(sample.src);
289
303
  audio.preload = 'auto';
290
304
  audio.volume = sample.volume * this.sfxVolume();
291
305
  this.activeSamples.add(audio);
@@ -366,8 +380,12 @@ export class RetroAudioService {
366
380
  }
367
381
  }
368
382
  readVolumeSetting(key, fallback) {
383
+ void this.defaultsReady;
369
384
  try {
370
- const value = Number(localStorage.getItem(key));
385
+ const stored = localStorage.getItem(key);
386
+ if (stored === null || stored.trim() === '')
387
+ return fallback;
388
+ const value = Number(stored);
371
389
  return Number.isFinite(value) ? this.normalizeVolume(value) : fallback;
372
390
  }
373
391
  catch {
@@ -385,6 +403,39 @@ export class RetroAudioService {
385
403
  normalizeVolume(value) {
386
404
  return Math.min(1, Math.max(0, value));
387
405
  }
406
+ preloadSample(src) {
407
+ if (this.sampleCache.has(src))
408
+ return;
409
+ try {
410
+ const audio = new Audio(src);
411
+ audio.preload = 'auto';
412
+ audio.load();
413
+ this.sampleCache.set(src, audio);
414
+ }
415
+ catch {
416
+ // Si el navegador no permite precargar, se intentara al reproducir.
417
+ }
418
+ }
419
+ migrateChessimalsAudioDefaults() {
420
+ try {
421
+ const migrationKey = 'val-mini-games-chessimals-audio-defaults-v2';
422
+ if (localStorage.getItem(migrationKey) === '1')
423
+ return true;
424
+ const storedMusicVolume = localStorage.getItem('val-mini-games-music-volume');
425
+ const storedSfxVolume = localStorage.getItem('val-mini-games-sfx-volume');
426
+ if (!storedMusicVolume || storedMusicVolume === '0') {
427
+ localStorage.setItem('val-mini-games-music-volume', '0.25');
428
+ }
429
+ if (!storedSfxVolume || storedSfxVolume === '0') {
430
+ localStorage.setItem('val-mini-games-sfx-volume', '0.8');
431
+ }
432
+ localStorage.setItem(migrationKey, '1');
433
+ }
434
+ catch {
435
+ // localStorage puede no estar disponible en SSR/tests.
436
+ }
437
+ return true;
438
+ }
388
439
  canPlayMusic() {
389
440
  return this.enabled() && this.musicEnabled() && this.musicVolume() > 0;
390
441
  }
@@ -625,4 +676,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
625
676
  type: Injectable,
626
677
  args: [{ providedIn: 'root' }]
627
678
  }], ctorParameters: () => [] });
628
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV0cm8tYXVkaW8uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9vcmdhbmlzbXMvbWluaS1nYW1lcy9yZXRyby1hdWRpby5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQU9uRCxNQUFNLHdCQUF3QixHQUE2RDtJQUN6RixLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsdUNBQXVDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtJQUNyRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtJQUMvRCxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsMkNBQTJDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtJQUM1RSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsdUNBQXVDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtDQUNyRSxDQUFDO0FBQ0YsTUFBTSwwQkFBMEIsR0FBRztJQUNqQyxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtJQUNsRSxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtDQUN0RSxDQUFDO0FBQ0YsTUFBTSxxQkFBcUIsR0FBc0I7SUFDL0MsR0FBRyxFQUFFLHVDQUF1QztJQUM1QyxNQUFNLEVBQUUsSUFBSTtDQUNiLENBQUM7QUFDRixNQUFNLHFCQUFxQixHQUFzQjtJQUMvQyxHQUFHLEVBQUUsa0NBQWtDO0lBQ3ZDLE1BQU0sRUFBRSxJQUFJO0NBQ2IsQ0FBQztBQUdGLE1BQU0sT0FBTyxpQkFBaUI7SUFtQjVCO1FBZlEsY0FBUyxHQUFHLENBQUMsQ0FBQztRQUlMLGtCQUFhLEdB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LElBQUksQ0FBQyxDQUFDO1lBQ3ZELE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3BGLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3pFLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxLQUFLLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDckIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDNUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3RGLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2xGLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3JGLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxLQUFLLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDekIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzVFLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUM1RSxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUMvRSxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUN0RixPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNuRixNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN6RSxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxHQUFH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NXFCVSxpQkFBaUI7bUhBQWpCLGlCQUFpQixjQURKLE1BQU07OzRGQUNuQixpQkFBaUI7a0JBRDdCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbnR5cGUgTm90ZSA9IFtudW1iZXIsIG51bWJlcl07XG50eXBlIE1lbG9keU1vZGUgPSAnbWVudScgfCAnZ2FtZSc7XG50eXBlIENoZXNzaW1hbHNQb3dlciA9ICdlYWdsZScgfCAnYnVsbCcgfCAna2FuZ2Fyb28nIHwgJ2xpb24nO1xudHlwZSBTYW1wbGVNdXNpY0NvbmZpZyA9IHsgc3JjOiBzdHJpbmc7IHZvbHVtZTogbnVtYmVyIH07XG5cbmNvbnN0IENIRVNTSU1BTFNfUE9XRVJfU0FNUExFUzogUmVjb3JkPENoZXNzaW1hbHNQb3dlciwgeyBzcmM6IHN0cmluZzsgdm9sdW1lOiBudW1iZXIgfT4gPSB7XG4gIGVhZ2xlOiB7IHNyYzogJ2Fzc2V0cy9nYW1lcy9jaGVzc2ltYWxzL2VhZ2xlLWNyeS53YXYnLCB2b2x1bWU6IDAuNzIgfSxcbiAgYnVsbDogeyBzcmM6ICdhc3NldHMvZ2FtZXMvY2hlc3NpbWFscy9idWxsLndhdicsIHZvbHVtZTogMC42NCB9LFxuICBrYW5nYXJvbzogeyBzcmM6ICdhc3NldHMvZ2FtZXMvY2hlc3NpbWFscy9rYW5nYXJvby1qdW1wLm1wMycsIHZvbHVtZTogMC43MiB9LFxuICBsaW9uOiB7IHNyYzogJ2Fzc2V0cy9nYW1lcy9jaGVzc2ltYWxzL2xpb24tcm9hci53YXYnLCB2b2x1bWU6IDAuNjggfSxcbn07XG5jb25zdCBDSEVTU0lNQUxTX09VVENPTUVfU0FNUExFUyA9IHtcbiAgdmljdG9yeTogeyBzcmM6ICdhc3NldHMvZ2FtZXMvY2hlc3NpbWFscy90YWRhLm1wMycsIHZvbHVtZTogMC43MiB9LFxuICBkZWZlYXQ6IHsgc3JjOiAnYXNzZXRzL2dhbWVzL2NoZXNzaW1hbHMveW91LWxvc2UubXAzJywgdm9sdW1lOiAwLjcyIH0sXG59O1xuY29uc3QgQ0hFU1NJTUFMU19NRU5VX01VU0lDOiBTYW1wbGVNdXNpY0NvbmZpZyA9IHtcbiAgc3JjOiAnYXNzZXRzL2dhbWVzL2NoZXNzaW1hbHMvbWFpbi1tZW51Lm1wMycsXG4gIHZvbHVtZTogMC4zNCxcbn07XG5jb25zdCBDSEVTU0lNQUxTX0dBTUVfTVVTSUM6IFNhbXBsZU11c2ljQ29uZmlnID0ge1xuICBzcmM6ICdhc3NldHMvZ2FtZXMvY2hlc3NpbWFscy9HYW1lLm1wMycsXG4gIHZvbHVtZTogMC4yOCxcbn07XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgUmV0cm9BdWRpb1NlcnZpY2Uge1xuICBwcml2YXRlIGNvbnRleHQ/OiBBdWRpb0NvbnRleHQ7XG4gIHByaXZhdGUgbWFzdGVyR2Fpbj86IEdhaW5Ob2RlO1xuICBwcml2YXRlIG11c2ljVGltZXI/OiBudW1iZXI7XG4gIHByaXZhdGUgbm90ZUluZGV4ID0gMDtcbiAgcHJpdmF0ZSBhY3RpdmVNZWxvZHk/OiBNZWxvZHlNb2RlO1xuICBwcml2YXRlIHBhdXNlZE1lbG9keT86IE1lbG9keU1vZGU7XG4gIHByaXZhdGUgc3VzcGVuZFRpbWVyPzogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IGFjdGl2ZVNhbXBsZXMgPSBuZXcgU2V0PEhUTUxBdWRpb0VsZW1lbnQ+KCk7XG4gIHByaXZhdGUgc2FtcGxlTXVzaWM/OiBIVE1MQXVkaW9FbGVtZW50O1xuICBwcml2YXRlIHNhbXBsZU11c2ljQ29uZmlnPzogU2FtcGxlTXVzaWNDb25maWc7XG4gIHByaXZhdGUgcGF1c2VkU2FtcGxlTXVzaWM/OiBTYW1wbGVNdXNpY0NvbmZpZztcblxuICByZWFkb25seSBlbmFibGVkID0gc2lnbmFsPGJvb2xlYW4+KHRoaXMucmVhZEVuYWJsZWQoKSk7XG4gIHJlYWRvbmx5IG11c2ljRW5hYmxlZCA9IHNpZ25hbDxib29sZWFuPih0aGlzLnJlYWRCb29sZWFuU2V0dGluZygndmFsLW1pbmktZ2FtZXMtbXVzaWMtZW5hYmxlZCcsIHRydWUpKTtcbiAgcmVhZG9ubHkgc2Z4RW5hYmxlZCA9IHNpZ25hbDxib29sZWFuPih0aGlzLnJlYWRCb29sZWFuU2V0dGluZygndmFsLW1pbmktZ2FtZXMtc2Z4LWVuYWJsZWQnLCB0cnVlKSk7XG4gIHJlYWRvbmx5IG11c2ljVm9sdW1lID0gc2lnbmFsPG51bWJlcj4odGhpcy5yZWFkVm9sdW1lU2V0dGluZygndmFsLW1pbmktZ2FtZXMtbXVzaWMtdm9sdW1lJywgMC43MikpO1xuICByZWFkb25seSBzZnhWb2x1bWUgPSBzaWduYWw8bnVtYmVyPih0aGlzLnJlYWRWb2x1bWVTZXR0aW5nKCd2YWwtbWluaS1nYW1lcy1zZngtdm9sdW1lJywgMC44NikpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgdGhpcy5oYW5kbGVWaXNpYmlsaXR5Q2hhbmdlKTtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgdGhpcy5oYW5kbGVVc2VyQWN0aXZhdGlvbiwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMuaGFuZGxlVXNlckFjdGl2YXRpb24sIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmhhbmRsZVVzZXJBY3RpdmF0aW9uKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncGFnZWhpZGUnLCB0aGlzLmhhbmRsZVBhZ2VIaWRlKTtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwYWdlc2hvdycsIHRoaXMuaGFuZGxlUGFnZVNob3cpO1xuICAgIH1cbiAgfVxuXG4gIHNldEVuYWJsZWQodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmVuYWJsZWQuc2V0KHZhbHVlKTtcbiAgICB0cnkge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3ZhbC1taW5pLWdhbWVzLWF1ZGlvJywgdmFsdWUgPyAnMScgOiAnMCcpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gbG9jYWxTdG9yYWdlIHB1ZWRlIG5vIGVzdGFyIGRpc3BvbmlibGUgZW4gU1NSL3Rlc3RzLlxuICAgIH1cbiAgICBpZiAoIXZhbHVlKSB0aGlzLnN0b3BNdXNpYygpO1xuICB9XG5cbiAgc2V0TXVzaWNFbmFibGVkKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5tdXNpY0VuYWJsZWQuc2V0KHZhbHVlKTtcbiAgICB0aGlzLndyaXRlU2V0dGluZygndmFsLW1pbmktZ2FtZXMtbXVzaWMtZW5hYmxlZCcsIHZhbHVlID8gJzEnIDogJzAnKTtcbiAgICBpZiAoIXZhbHVlKSB0aGlzLnN0b3BNdXNpYygpO1xuICB9XG5cbiAgc2V0U2Z4RW5hYmxlZCh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuc2Z4RW5hYmxlZC5zZXQodmFsdWUpO1xuICAgIHRoaXMud3JpdGVTZXR0aW5nKCd2YWwtbWluaS1nYW1lcy1zZngtZW5hYmxlZCcsIHZhbHVlID8gJzEnIDogJzAnKTtcbiAgfVxuXG4gIHNldE11c2ljVm9sdW1lKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCB2b2x1bWUgPSB0aGlzLm5vcm1hbGl6ZVZvbHVtZSh2YWx1ZSk7XG4gICAgdGhpcy5tdXNpY1ZvbHVtZS5zZXQodm9sdW1lKTtcbiAgICB0aGlzLndyaXRlU2V0dGluZygndmFsLW1pbmktZ2FtZXMtbXVzaWMtdm9sdW1lJywgYCR7dm9sdW1lfWApO1xuICAgIGlmICh0aGlzLnNhbXBsZU11c2ljICYmIHRoaXMuc2FtcGxlTXVzaWNDb25maWcpIHtcbiAgICAgIHRoaXMuc2FtcGxlTXVzaWMudm9sdW1lID0gdGhpcy5zYW1wbGVNdXNpY0NvbmZpZy52b2x1bWUgKiB2b2x1bWU7XG4gICAgfVxuICB9XG5cbiAgc2V0U2Z4Vm9sdW1lKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCB2b2x1bWUgPSB0aGlzLm5vcm1hbGl6ZVZvbHVtZSh2YWx1ZSk7XG4gICAgdGhpcy5zZnhWb2x1bWUuc2V0KHZvbHVtZSk7XG4gICAgdGhpcy53cml0ZVNldHRpbmcoJ3ZhbC1taW5pLWdhbWVzLXNmeC12b2x1bWUnLCBgJHt2b2x1bWV9YCk7XG4gIH1cblxuICBhc3luYyBzdGFydE1lbnVNdXNpYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnN0YXJ0TXVzaWMoJ21lbnUnKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0Q2hlc3NpbWFsc01lbnVNdXNpYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnN0YXJ0U2FtcGxlTXVzaWMoQ0hFU1NJTUFMU19NRU5VX01VU0lDKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0Q2hlc3NpbWFsc0dhbWVNdXNpYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnN0YXJ0U2FtcGxlTXVzaWMoQ0hFU1NJTUFMU19HQU1FX01VU0lDKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0R2FtZU11c2ljKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuc3RhcnRNdXNpYygnZ2FtZScpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRNdXNpYyhtb2RlOiBNZWxvZHlNb2RlID0gJ2dhbWUnKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmNhblBsYXlNdXNpYygpKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLmlzRG9jdW1lbnRWaXNpYmxlKCkpIHtcbiAgICAgIHRoaXMucGF1c2VkTWVsb2R5ID0gbW9kZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy53YWtlQXVkaW8oKTtcbiAgICBpZiAodGhpcy5tdXNpY1RpbWVyICYmIHRoaXMuYWN0aXZlTWVsb2R5ID09PSBtb2RlKSByZXR1cm47XG4gICAgdGhpcy5zdG9wTXVzaWMoKTtcbiAgICB0aGlzLmZhZGVNYXN0ZXJUbygxLCAwLjI0KTtcbiAgICB0aGlzLmFjdGl2ZU1lbG9keSA9IG1vZGU7XG4gICAgdGhpcy5ub3RlSW5kZXggPSAwO1xuICAgIGNvbnN0IG1lbG9keSA9IG1vZGUgPT09ICdtZW51JyA/IHRoaXMubWVudU1lbG9keSgpIDogdGhpcy5nYW1lTWVsb2R5KCk7XG4gICAgY29uc3QgaW50ZXJ2YWxNcyA9IG1vZGUgPT09ICdtZW51JyA/IDY0MCA6IDE5MDtcbiAgICBjb25zdCB3YXZlOiBPc2NpbGxhdG9yVHlwZSA9IG1vZGUgPT09ICdtZW51JyA/ICd0cmlhbmdsZScgOiAnc3F1YXJlJztcbiAgICBjb25zdCBnYWluID0gbW9kZSA9PT0gJ21lbnUnID8gMC4wMTggOiAwLjAyNTtcbiAgICB0aGlzLm11c2ljVGltZXIgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgY29uc3Qgc3RlcCA9IHRoaXMubm90ZUluZGV4O1xuICAgICAgY29uc3QgW2ZyZXEsIGR1cmF0aW9uXSA9IG1lbG9keVt0aGlzLm5vdGVJbmRleCAlIG1lbG9keS5sZW5ndGhdO1xuICAgICAgdGhpcy5ub3RlSW5kZXggKz0gMTtcbiAgICAgIHRoaXMudG9uZShmcmVxLCBkdXJhdGlvbiwgd2F2ZSwgZ2Fpbik7XG4gICAgICBpZiAobW9kZSA9PT0gJ21lbnUnKSB0aGlzLnNhdmFubmFQdWxzZShzdGVwKTtcbiAgICB9LCBpbnRlcnZhbE1zKTtcbiAgfVxuXG4gIHN0b3BNdXNpYygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tdXNpY1RpbWVyKSB7XG4gICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLm11c2ljVGltZXIpO1xuICAgICAgdGhpcy5tdXNpY1RpbWVyID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aGlzLmFjdGl2ZU1lbG9keSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnBhdXNlZE1lbG9keSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnBhdXNlZFNhbXBsZU11c2ljID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuc3RvcFNhbXBsZU11c2ljKCk7XG4gIH1cblxuICBmbGlwKCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy50b25lKDQ0MCwgMC4wNTUsICdzcXVhcmUnLCAwLjA1KTtcbiAgfVxuXG4gIG1hdGNoKCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy5zZXF1ZW5jZShbXG4gICAgICBbNjYwLCAwLjA4XSxcbiAgICAgIFs4ODAsIDAuMV0sXG4gICAgICBbOTkwLCAwLjEyXSxcbiAgICBdKTtcbiAgfVxuXG4gIG1pc3MoKTogdm9pZCB7XG4gICAgdm9pZCB0aGlzLnNlcXVlbmNlKFtcbiAgICAgIFsyMjAsIDAuMDhdLFxuICAgICAgWzE3NC42MSwgMC4xMl0sXG4gICAgXSk7XG4gIH1cblxuICB3aW4oKTogdm9pZCB7XG4gICAgdGhpcy5zdG9wTXVzaWMoKTtcbiAgICB2b2lkIHRoaXMuc2VxdWVuY2UoW1xuICAgICAgWzUyMy4yNSwgMC4wOV0sXG4gICAgICBbNjU5LjI1LCAwLjA5XSxcbiAgICAgIFs3ODMuOTksIDAuMDldLFxuICAgICAgWzEwNDYuNSwgMC4xNF0sXG4gICAgICBbMTMxOC41MSwgMC4yMl0sXG4gICAgICBbMTU2Ny45OCwgMC4yNl0sXG4gICAgXSk7XG4gIH1cblxuICBsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcE11c2ljKCk7XG4gICAgdm9pZCB0aGlzLnNlcXVlbmNlKFtcbiAgICAgIFsyOTMuNjYsIDAuMTJdLFxuICAgICAgWzI0Ni45NCwgMC4xMl0sXG4gICAgICBbMTk2LCAwLjJdLFxuICAgIF0pO1xuICB9XG5cbiAgc2ltb25QYWQoZnJlcTogbnVtYmVyKTogdm9pZCB7XG4gICAgdm9pZCB0aGlzLnRvbmUoZnJlcSwgMC4yMiwgJ3NpbmUnLCAwLjA1NSk7XG4gIH1cblxuICBzaW1vblN0ZXBPaygpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMudG9uZSg4ODAsIDAuMDgsICd0cmlhbmdsZScsIDAuMDM1KTtcbiAgfVxuXG4gIHNpbW9uUm91bmRPaygpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMuc2VxdWVuY2UoW1xuICAgICAgWzY1OS4yNSwgMC4wOF0sXG4gICAgICBbODgwLCAwLjA4XSxcbiAgICAgIFsxMTc0LjY2LCAwLjEyXSxcbiAgICBdKTtcbiAgfVxuXG4gIHNpbW9uRmFpbCgpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMuc2VxdWVuY2UoW1xuICAgICAgWzE5NiwgMC4xMl0sXG4gICAgICBbMTQ2LjgzLCAwLjE4XSxcbiAgICBdKTtcbiAgfVxuXG4gIGNoZXNzaW1hbHNNb3ZlKCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy5zZXF1ZW5jZShcbiAgICAgIFtcbiAgICAgICAgWzM5MiwgMC4wNDVdLFxuICAgICAgICBbNDkzLjg4LCAwLjA1NV0sXG4gICAgICBdLFxuICAgICAgJ3RyaWFuZ2xlJyxcbiAgICAgIDAuMDMyLFxuICAgICAgNDgsXG4gICAgKTtcbiAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMuZmlsdGVyZWROb2lzZSgwLjAzNSwgMC4wMTIsICdiYW5kcGFzcycsIDgyMCksIDgpO1xuICB9XG5cbiAgY2hlc3NpbWFsc0JvdE1vdmUoKTogdm9pZCB7XG4gICAgdm9pZCB0aGlzLnNlcXVlbmNlKFxuICAgICAgW1xuICAgICAgICBbMzI5LjYzLCAwLjA1NV0sXG4gICAgICAgIFsyNDYuOTQsIDAuMDddLFxuICAgICAgXSxcbiAgICAgICdzYXd0b290aCcsXG4gICAgICAwLjAyNCxcbiAgICAgIDU2LFxuICAgICk7XG4gICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLmZpbHRlcmVkTm9pc2UoMC4wNSwgMC4wMSwgJ2xvd3Bhc3MnLCA0MjApLCAxNik7XG4gIH1cblxuICBjaGVzc2ltYWxzQ2FwdHVyZSgpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMuc2VxdWVuY2UoXG4gICAgICBbXG4gICAgICAgIFsxNzQuNjEsIDAuMDRdLFxuICAgICAgICBbMjQ2Ljk0LCAwLjA0NV0sXG4gICAgICAgIFs1ODcuMzMsIDAuMDk1XSxcbiAgICAgICAgWzc4My45OSwgMC4wOF0sXG4gICAgICBdLFxuICAgICAgJ3NxdWFyZScsXG4gICAgICAwLjA0NixcbiAgICAgIDQ0LFxuICAgICk7XG4gICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLnN3ZWVwKDk2LCA0MiwgMC4xOCwgJ3Nhd3Rvb3RoJywgMC4wMjYpLCAyMCk7XG4gICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLmZpbHRlcmVkTm9pc2UoMC4xOCwgMC4wNSwgJ2xvd3Bhc3MnLCA1MjApLCAxOCk7XG4gICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLmZpbHRlcmVkTm9pc2UoMC4wNywgMC4wMjgsICdiYW5kcGFzcycsIDE4MDApLCA4NCk7XG4gIH1cblxuICBjaGVzc2ltYWxzUG93ZXIocG93ZXI6IENoZXNzaW1hbHNQb3dlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLnBsYXlDaGVzc2ltYWxzUG93ZXJTYW1wbGUocG93ZXIpKSByZXR1cm47XG4gICAgdGhpcy5jaGVzc2ltYWxzUG93ZXJGYWxsYmFjayhwb3dlcik7XG4gIH1cblxuICBwcml2YXRlIGNoZXNzaW1hbHNQb3dlckZhbGxiYWNrKHBvd2VyOiBDaGVzc2ltYWxzUG93ZXIpOiB2b2lkIHtcbiAgICBjb25zdCBub3RlczogUmVjb3JkPENoZXNzaW1hbHNQb3dlciwgTm90ZVtdPiA9IHtcbiAgICAgIGVhZ2xlOiBbXG4gICAgICAgIFs2NTkuMjUsIDAuMDU1XSxcbiAgICAgICAgWzg4MCwgMC4wNjVdLFxuICAgICAgICBbMTMxOC41MSwgMC4xMl0sXG4gICAgICBdLFxuICAgICAgYnVsbDogW1xuICAgICAgICBbMTk2LCAwLjA3NV0sXG4gICAgICAgIFsxNjQuODEsIDAuMDc1XSxcbiAgICAgICAgWzI0Ni45NCwgMC4xM10sXG4gICAgICBdLFxuICAgICAga2FuZ2Fyb286IFtcbiAgICAgICAgWzM5MiwgMC4wNTVdLFxuICAgICAgICBbMCwgMC4wNF0sXG4gICAgICAgIFs3ODMuOTksIDAuMTFdLFxuICAgICAgXSxcbiAgICAgIGxpb246IFtcbiAgICAgICAgWzI2MS42MywgMC4wNl0sXG4gICAgICAgIFszOTIsIDAuMDZdLFxuICAgICAgICBbNTIzLjI1LCAwLjA2XSxcbiAgICAgICAgWzc4My45OSwgMC4xNF0sXG4gICAgICBdLFxuICAgIH07XG4gICAgdm9pZCB0aGlzLnNlcXVlbmNlKG5vdGVzW3Bvd2VyXSwgcG93ZXIgPT09ICdidWxsJyA/ICdzYXd0b290aCcgOiAndHJpYW5nbGUnLCAwLjA0NiwgNTgpO1xuICAgIGlmIChwb3dlciA9PT0gJ2VhZ2xlJykge1xuICAgICAgdm9pZCB0aGlzLnN3ZWVwKDcyMCwgMTU2OCwgMC4xOCwgJ3RyaWFuZ2xlJywgMC4wMjgpO1xuICAgICAgdm9pZCB0aGlzLmZpbHRlcmVkTm9pc2UoMC4yMiwgMC4wMjUsICdoaWdocGFzcycsIDE2MDApO1xuICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLmZpbHRlcmVkTm9pc2UoMC4wOCwgMC4wMTgsICdiYW5kcGFzcycsIDI2MDApLCA5Mik7XG4gICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMudG9uZSgxNzYwLCAwLjA1NSwgJ3NpbmUnLCAwLjAxOCksIDE1MCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChwb3dlciA9PT0gJ2J1bGwnKSB7XG4gICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMudG9uZSg4Mi40MSwgMC4xNiwgJ3Nhd3Rvb3RoJywgMC4wMzgpLCA3Mik7XG4gICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMuc3dlZXAoMTM4LjU5LCA2NS40MSwgMC4xOCwgJ3Nhd3Rvb3RoJywgMC4wMjYpLCAxMTgpO1xuICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLmZpbHRlcmVkTm9pc2UoMC4xNiwgMC4wMzgsICdsb3dwYXNzJywgMjYwKSwgMzYpO1xuICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLmZpbHRlcmVkTm9pc2UoMC4wNTUsIDAuMDI2LCAnYmFuZHBhc3MnLCA5NjApLCAxNzApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocG93ZXIgPT09ICdrYW5nYXJvbycpIHtcbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5zd2VlcCg0MjAsIDk0MCwgMC4xMSwgJ3NpbmUnLCAwLjAzMiksIDg4KTtcbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5zd2VlcCg5NDAsIDUyMCwgMC4xLCAnc2luZScsIDAuMDI2KSwgMTkwKTtcbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy50b25lKDI2MS42MywgMC4wNTUsICd0cmlhbmdsZScsIDAuMDE4KSwgMjQ1KTtcbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5maWx0ZXJlZE5vaXNlKDAuMDM1LCAwLjAxOCwgJ2JhbmRwYXNzJywgMTE4MCksIDIxOCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5zd2VlcCgxNjQuODEsIDM5MiwgMC4yNCwgJ3Nhd3Rvb3RoJywgMC4wMzQpLCA3MCk7XG4gICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLnRvbmUoOTgsIDAuMTgsICdzYXd0b290aCcsIDAuMDIpLCAxNTApO1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5maWx0ZXJlZE5vaXNlKDAuMjgsIDAuMDMyLCAnYmFuZHBhc3MnLCAzNDApLCA2Mik7XG4gICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLnN3ZWVwKDE5NiwgMTQ2LjgzLCAwLjIyLCAnc2F3dG9vdGgnLCAwLjAyMiksIDExNik7XG4gIH1cblxuICBwcml2YXRlIHBsYXlDaGVzc2ltYWxzUG93ZXJTYW1wbGUocG93ZXI6IENoZXNzaW1hbHNQb3dlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnBsYXlTYW1wbGUoQ0hFU1NJTUFMU19QT1dFUl9TQU1QTEVTW3Bvd2VyXSwgKCkgPT4gdGhpcy5jaGVzc2ltYWxzUG93ZXJGYWxsYmFjayhwb3dlcikpO1xuICB9XG5cbiAgcHJpdmF0ZSBwbGF5U2FtcGxlKHNhbXBsZTogeyBzcmM6IHN0cmluZzsgdm9sdW1lOiBudW1iZXIgfSwgZmFsbGJhY2s6ICgpID0+IHZvaWQpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY2FuUGxheVNmeCgpIHx8IHR5cGVvZiBBdWRpbyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYXVkaW8gPSBuZXcgQXVkaW8oc2FtcGxlLnNyYyk7XG4gICAgICBhdWRpby5wcmVsb2FkID0gJ2F1dG8nO1xuICAgICAgYXVkaW8udm9sdW1lID0gc2FtcGxlLnZvbHVtZSAqIHRoaXMuc2Z4Vm9sdW1lKCk7XG4gICAgICB0aGlzLmFjdGl2ZVNhbXBsZXMuYWRkKGF1ZGlvKTtcbiAgICAgIGNvbnN0IHJlbGVhc2UgPSAoKSA9PiB0aGlzLmFjdGl2ZVNhbXBsZXMuZGVsZXRlKGF1ZGlvKTtcbiAgICAgIGF1ZGlvLmFkZEV2ZW50TGlzdGVuZXIoJ2VuZGVkJywgcmVsZWFzZSwgeyBvbmNlOiB0cnVlIH0pO1xuICAgICAgYXVkaW8uYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCByZWxlYXNlLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgICBjb25zdCBwbGF5UmVzdWx0ID0gYXVkaW8ucGxheSgpO1xuICAgICAgaWYgKHBsYXlSZXN1bHQpIHtcbiAgICAgICAgcGxheVJlc3VsdC5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgcmVsZWFzZSgpO1xuICAgICAgICAgIGZhbGxiYWNrKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgY2hlc3NpbWFsc1ZpY3RvcnkoKTogdm9pZCB7XG4gICAgdGhpcy5zdG9wTXVzaWMoKTtcbiAgICBpZiAodGhpcy5wbGF5U2FtcGxlKENIRVNTSU1BTFNfT1VUQ09NRV9TQU1QTEVTLnZpY3RvcnksICgpID0+IHRoaXMuY2hlc3NpbWFsc1ZpY3RvcnlGYWxsYmFjaygpKSkgcmV0dXJuO1xuICAgIHRoaXMuY2hlc3NpbWFsc1ZpY3RvcnlGYWxsYmFjaygpO1xuICB9XG5cbiAgY2hlc3NpbWFsc0RlZmVhdCgpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3BNdXNpYygpO1xuICAgIGlmICh0aGlzLnBsYXlTYW1wbGUoQ0hFU1NJTUFMU19PVVRDT01FX1NBTVBMRVMuZGVmZWF0LCAoKSA9PiB0aGlzLmxvc2UoKSkpIHJldHVybjtcbiAgICB0aGlzLmxvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlc3NpbWFsc1ZpY3RvcnlGYWxsYmFjaygpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMuc2VxdWVuY2UoXG4gICAgICBbXG4gICAgICAgIFsxOTYsIDAuMDhdLFxuICAgICAgICBbMjYxLjYzLCAwLjA4XSxcbiAgICAgICAgWzMyOS42MywgMC4wOF0sXG4gICAgICAgIFszOTIsIDAuMV0sXG4gICAgICAgIFs1MjMuMjUsIDAuMTJdLFxuICAgICAgICBbNzgzLjk5LCAwLjE2XSxcbiAgICAgICAgWzEwNDYuNSwgMC4yMl0sXG4gICAgICBdLFxuICAgICAgJ3RyaWFuZ2xlJyxcbiAgICAgIDAuMDUsXG4gICAgICA3MixcbiAgICApO1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5zd2VlcCgxMzAuODEsIDY1LjQxLCAwLjI4LCAnc2F3dG9vdGgnLCAwLjAyKSwgNDApO1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5zd2VlcCg1MjMuMjUsIDE1NjcuOTgsIDAuMzQsICdzaW5lJywgMC4wMjYpLCAyNDApO1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5maWx0ZXJlZE5vaXNlKDAuMTYsIDAuMDIyLCAnYmFuZHBhc3MnLCAxNDAwKSwgMTIwKTtcbiAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMuc2VxdWVuY2UoW1s5ODcuNzcsIDAuMDhdLCBbMTMxOC41MSwgMC4xMl1dLCAndHJpYW5nbGUnLCAwLjAzMiwgODYpLCA1MjApO1xuICB9XG5cbiAgY2hlc3NpbWFsc0pvaW5SZXF1ZXN0KCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy5zZXF1ZW5jZShcbiAgICAgIFtcbiAgICAgICAgWzUyMy4yNSwgMC4wNTVdLFxuICAgICAgICBbNjU5LjI1LCAwLjA2XSxcbiAgICAgICAgWzk4Ny43NywgMC4xMl0sXG4gICAgICBdLFxuICAgICAgJ3RyaWFuZ2xlJyxcbiAgICAgIDAuMDM0LFxuICAgICAgNTgsXG4gICAgKTtcbiAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMudG9uZSgxMzE4LjUxLCAwLjA3NSwgJ3NpbmUnLCAwLjAyKSwgMTM2KTtcbiAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMuZmlsdGVyZWROb2lzZSgwLjA2LCAwLjAxLCAnaGlnaHBhc3MnLCAxODAwKSwgOTgpO1xuICB9XG5cbiAgY2hlc3NpbWFsc1Bvd2VyVW5sb2NrZWQoKTogdm9pZCB7XG4gICAgdm9pZCB0aGlzLnNlcXVlbmNlKFxuICAgICAgW1xuICAgICAgICBbMzkyLCAwLjA1NV0sXG4gICAgICAgIFs1MjMuMjUsIDAuMDU1XSxcbiAgICAgICAgWzY1OS4yNSwgMC4wOF0sXG4gICAgICAgIFs5ODcuNzcsIDAuMTNdLFxuICAgICAgXSxcbiAgICAgICd0cmlhbmdsZScsXG4gICAgICAwLjAzOCxcbiAgICAgIDY0LFxuICAgICk7XG4gICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLnN3ZWVwKDIyMCwgODgwLCAwLjIyLCAnc2luZScsIDAuMDI0KSwgNzApO1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5maWx0ZXJlZE5vaXNlKDAuMjQsIDAuMDE4LCAnYmFuZHBhc3MnLCAxMjAwKSwgNTQpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkQm9vbGVhblNldHRpbmcoJ3ZhbC1taW5pLWdhbWVzLWF1ZGlvJywgdHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRCb29sZWFuU2V0dGluZyhrZXk6IHN0cmluZywgZmFsbGJhY2s6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdmFsdWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuICAgICAgaWYgKHZhbHVlID09PSBudWxsKSByZXR1cm4gZmFsbGJhY2s7XG4gICAgICByZXR1cm4gdmFsdWUgIT09ICcwJztcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxsYmFjaztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlYWRWb2x1bWVTZXR0aW5nKGtleTogc3RyaW5nLCBmYWxsYmFjazogbnVtYmVyKTogbnVtYmVyIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdmFsdWUgPSBOdW1iZXIobG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KSk7XG4gICAgICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKHZhbHVlKSA/IHRoaXMubm9ybWFsaXplVm9sdW1lKHZhbHVlKSA6IGZhbGxiYWNrO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbGxiYWNrO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgd3JpdGVTZXR0aW5nKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgdmFsdWUpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gbG9jYWxTdG9yYWdlIHB1ZWRlIG5vIGVzdGFyIGRpc3BvbmlibGUgZW4gU1NSL3Rlc3RzLlxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbm9ybWFsaXplVm9sdW1lKHZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCB2YWx1ZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBjYW5QbGF5TXVzaWMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZW5hYmxlZCgpICYmIHRoaXMubXVzaWNFbmFibGVkKCkgJiYgdGhpcy5tdXNpY1ZvbHVtZSgpID4gMDtcbiAgfVxuXG4gIHByaXZhdGUgY2FuUGxheVNmeCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lbmFibGVkKCkgJiYgdGhpcy5zZnhFbmFibGVkKCkgJiYgdGhpcy5zZnhWb2x1bWUoKSA+IDA7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGVuc3VyZUNvbnRleHQoKTogUHJvbWlzZTxBdWRpb0NvbnRleHQ+IHtcbiAgICBpZiAoIXRoaXMuY29udGV4dCB8fCB0aGlzLmNvbnRleHQuc3RhdGUgPT09ICdjbG9zZWQnKSB7XG4gICAgICB0aGlzLmNvbnRleHQgPSBuZXcgQXVkaW9Db250ZXh0KCk7XG4gICAgICB0aGlzLm1hc3RlckdhaW4gPSB0aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpO1xuICAgICAgdGhpcy5tYXN0ZXJHYWluLmdhaW4udmFsdWUgPSAxO1xuICAgICAgdGhpcy5tYXN0ZXJHYWluLmNvbm5lY3QodGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY29udGV4dDtcbiAgfVxuXG4gIHByaXZhdGUgbWVudU1lbG9keSgpOiBOb3RlW10ge1xuICAgIHJldHVybiBbXG4gICAgICBbMjIwLCAwLjM4XSxcbiAgICAgIFswLCAwLjEyXSxcbiAgICAgIFsyNjEuNjMsIDAuMzRdLFxuICAgICAgWzMyOS42MywgMC40Ml0sXG4gICAgICBbMjkzLjY2LCAwLjI4XSxcbiAgICAgIFswLCAwLjEyXSxcbiAgICAgIFszOTIsIDAuNDhdLFxuICAgICAgWzMyOS42MywgMC4zNF0sXG4gICAgICBbMjYxLjYzLCAwLjM2XSxcbiAgICAgIFsyMjAsIDAuNThdLFxuICAgICAgWzAsIDAuMl0sXG4gICAgICBbMjkzLjY2LCAwLjM0XSxcbiAgICAgIFszMjkuNjMsIDAuNDJdLFxuICAgICAgWzQ0MCwgMC41XSxcbiAgICAgIFszOTIsIDAuMzZdLFxuICAgICAgWzI2MS42MywgMC42Ml0sXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgc2F2YW5uYVB1bHNlKHN0ZXA6IG51bWJlcik6IHZvaWQge1xuICAgIGlmIChzdGVwICUgNCA9PT0gMCkge1xuICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLnN3ZWVwKDk2LCA0OCwgMC4xOCwgJ3NpbmUnLCAwLjAxMiksIDE4KTtcbiAgICB9XG4gICAgaWYgKHN0ZXAgJSA4ID09PSA1KSB7XG4gICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMudG9uZSgxNjQuODEsIDAuMDQ1LCAndHJpYW5nbGUnLCAwLjAxMiksIDk2KTtcbiAgICB9XG4gICAgaWYgKHN0ZXAgJSAxNiA9PT0gMTApIHtcbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5zd2VlcCgxNDYuODMsIDE5NiwgMC4wOCwgJ3RyaWFuZ2xlJywgMC4wMSksIDE0MCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnYW1lTWVsb2R5KCk6IE5vdGVbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIFs1MjMuMjUsIDAuMTNdLFxuICAgICAgWzY1OS4yNSwgMC4xM10sXG4gICAgICBbNzgzLjk5LCAwLjEzXSxcbiAgICAgIFsxMDQ2LjUsIDAuMThdLFxuICAgICAgWzc4My45OSwgMC4xM10sXG4gICAgICBbNjU5LjI1LCAwLjEzXSxcbiAgICAgIFs1ODcuMzMsIDAuMThdLFxuICAgICAgWzY1OS4yNSwgMC4xOF0sXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VxdWVuY2UoXG4gICAgbm90ZXM6IE5vdGVbXSxcbiAgICB3YXZlOiBPc2NpbGxhdG9yVHlwZSA9ICdzcXVhcmUnLFxuICAgIGdhaW4gPSAwLjA1NSxcbiAgICBpbnRlcnZhbE1zID0gOTAsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5lbmFibGVkKCkpIHJldHVybjtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vdGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBjb25zdCBbZnJlcSwgZHVyYXRpb25dID0gbm90ZXNbaV07XG4gICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMudG9uZShmcmVxLCBkdXJhdGlvbiwgd2F2ZSwgZ2FpbiksIGkgKiBpbnRlcnZhbE1zKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHN0YXJ0U2FtcGxlTXVzaWMoY29uZmlnOiBTYW1wbGVNdXNpY0NvbmZpZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5jYW5QbGF5TXVzaWMoKSkgcmV0dXJuO1xuICAgIGlmICghdGhpcy5pc0RvY3VtZW50VmlzaWJsZSgpKSB7XG4gICAgICB0aGlzLnBhdXNlZFNhbXBsZU11c2ljID0gY29uZmlnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5zYW1wbGVNdXNpY0NvbmZpZz8uc3JjID09PSBjb25maWcuc3JjICYmICF0aGlzLnNhbXBsZU11c2ljPy5wYXVzZWQpIHJldHVybjtcbiAgICB0aGlzLnN0b3BNdXNpYygpO1xuICAgIGlmICh0eXBlb2YgQXVkaW8gPT09ICd1bmRlZmluZWQnKSByZXR1cm47XG5cbiAgICBjb25zdCBhdWRpbyA9IG5ldyBBdWRpbyhjb25maWcuc3JjKTtcbiAgICBhdWRpby5sb29wID0gdHJ1ZTtcbiAgICBhdWRpby5wcmVsb2FkID0gJ2F1dG8nO1xuICAgIGF1ZGlvLnZvbHVtZSA9IGNvbmZpZy52b2x1bWUgKiB0aGlzLm11c2ljVm9sdW1lKCk7XG4gICAgdGhpcy5zYW1wbGVNdXNpYyA9IGF1ZGlvO1xuICAgIHRoaXMuc2FtcGxlTXVzaWNDb25maWcgPSBjb25maWc7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGF1ZGlvLnBsYXkoKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRoaXMucGF1c2VkU2FtcGxlTXVzaWMgPSBjb25maWc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdG9wU2FtcGxlTXVzaWMoKTogdm9pZCB7XG4gICAgY29uc3QgbXVzaWMgPSB0aGlzLnNhbXBsZU11c2ljO1xuICAgIHRoaXMuc2FtcGxlTXVzaWMgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5zYW1wbGVNdXNpY0NvbmZpZyA9IHVuZGVmaW5lZDtcbiAgICBpZiAoIW11c2ljKSByZXR1cm47XG4gICAgbXVzaWMucGF1c2UoKTtcbiAgICBtdXNpYy5jdXJyZW50VGltZSA9IDA7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHRvbmUoZnJlcTogbnVtYmVyLCBkdXJhdGlvbiA9IDAuMSwgdHlwZTogT3NjaWxsYXRvclR5cGUgPSAnc3F1YXJlJywgZ2FpblZhbHVlID0gMC4wNCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5jYW5QbGF5U2Z4KCkpIHJldHVybjtcbiAgICBpZiAoZnJlcSA8PSAwKSByZXR1cm47XG4gICAgY29uc3QgY3R4ID0gYXdhaXQgdGhpcy53YWtlQXVkaW8oKTtcbiAgICBjb25zdCBvc2NpbGxhdG9yID0gY3R4LmNyZWF0ZU9zY2lsbGF0b3IoKTtcbiAgICBjb25zdCBnYWluID0gY3R4LmNyZWF0ZUdhaW4oKTtcbiAgICBvc2NpbGxhdG9yLnR5cGUgPSB0eXBlO1xuICAgIG9zY2lsbGF0b3IuZnJlcXVlbmN5LnZhbHVlID0gZnJlcTtcbiAgICBnYWluLmdhaW4uc2V0VmFsdWVBdFRpbWUoMC4wMDAxLCBjdHguY3VycmVudFRpbWUpO1xuICAgIGdhaW4uZ2Fpbi5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKGdhaW5WYWx1ZSAqIHRoaXMuc2Z4Vm9sdW1lKCksIGN0eC5jdXJyZW50VGltZSArIDAuMDEpO1xuICAgIGdhaW4uZ2Fpbi5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKDAuMDAwMSwgY3R4LmN1cnJlbnRUaW1lICsgZHVyYXRpb24pO1xuICAgIG9zY2lsbGF0b3IuY29ubmVjdChnYWluKTtcbiAgICBnYWluLmNvbm5lY3QodGhpcy5tYXN0ZXJHYWluID8/IGN0eC5kZXN0aW5hdGlvbik7XG4gICAgb3NjaWxsYXRvci5zdGFydCgpO1xuICAgIG9zY2lsbGF0b3Iuc3RvcChjdHguY3VycmVudFRpbWUgKyBkdXJhdGlvbiArIDAuMDIpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzd2VlcChcbiAgICBmcm9tRnJlcTogbnVtYmVyLFxuICAgIHRvRnJlcTogbnVtYmVyLFxuICAgIGR1cmF0aW9uID0gMC4xNixcbiAgICB0eXBlOiBPc2NpbGxhdG9yVHlwZSA9ICd0cmlhbmdsZScsXG4gICAgZ2FpblZhbHVlID0gMC4wMyxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmNhblBsYXlTZngoKSkgcmV0dXJuO1xuICAgIGNvbnN0IGN0eCA9IGF3YWl0IHRoaXMud2FrZUF1ZGlvKCk7XG4gICAgY29uc3Qgb3NjaWxsYXRvciA9IGN0eC5jcmVhdGVPc2NpbGxhdG9yKCk7XG4gICAgY29uc3QgZ2FpbiA9IGN0eC5jcmVhdGVHYWluKCk7XG4gICAgb3NjaWxsYXRvci50eXBlID0gdHlwZTtcbiAgICBvc2NpbGxhdG9yLmZyZXF1ZW5jeS5zZXRWYWx1ZUF0VGltZShmcm9tRnJlcSwgY3R4LmN1cnJlbnRUaW1lKTtcbiAgICBvc2NpbGxhdG9yLmZyZXF1ZW5jeS5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKE1hdGgubWF4KDEsIHRvRnJlcSksIGN0eC5jdXJyZW50VGltZSArIGR1cmF0aW9uKTtcbiAgICBnYWluLmdhaW4uc2V0VmFsdWVBdFRpbWUoMC4wMDAxLCBjdHguY3VycmVudFRpbWUpO1xuICAgIGdhaW4uZ2Fpbi5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKGdhaW5WYWx1ZSAqIHRoaXMuc2Z4Vm9sdW1lKCksIGN0eC5jdXJyZW50VGltZSArIDAuMDEpO1xuICAgIGdhaW4uZ2Fpbi5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKDAuMDAwMSwgY3R4LmN1cnJlbnRUaW1lICsgZHVyYXRpb24pO1xuICAgIG9zY2lsbGF0b3IuY29ubmVjdChnYWluKTtcbiAgICBnYWluLmNvbm5lY3QodGhpcy5tYXN0ZXJHYWluID8/IGN0eC5kZXN0aW5hdGlvbik7XG4gICAgb3NjaWxsYXRvci5zdGFydCgpO1xuICAgIG9zY2lsbGF0b3Iuc3RvcChjdHguY3VycmVudFRpbWUgKyBkdXJhdGlvbiArIDAuMDIpO1xuICB9XG5cbiAgLy8gQ2hlc3NpbWFscyB1c2VzIGdlbmVyYXRlZCBXZWJBdWRpbyBsYXllcnMgaW5zdGVhZCBvZiB0aGlyZC1wYXJ0eSBzYW1wbGVzLFxuICAvLyBhdm9pZGluZyBsaWNlbnNpbmcgcmlzayB3aGlsZSBrZWVwaW5nIGVhY2ggYW5pbWFsIHBvd2VyIGV4cHJlc3NpdmUuXG4gIHByaXZhdGUgYXN5bmMgZmlsdGVyZWROb2lzZShcbiAgICBkdXJhdGlvbiA9IDAuMTIsXG4gICAgZ2FpblZhbHVlID0gMC4wMjUsXG4gICAgZmlsdGVyVHlwZTogQmlxdWFkRmlsdGVyVHlwZSA9ICdiYW5kcGFzcycsXG4gICAgZnJlcXVlbmN5ID0gOTAwLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuY2FuUGxheVNmeCgpKSByZXR1cm47XG4gICAgY29uc3QgY3R4ID0gYXdhaXQgdGhpcy53YWtlQXVkaW8oKTtcbiAgICBjb25zdCBzYW1wbGVDb3VudCA9IE1hdGgubWF4KDEsIE1hdGguZmxvb3IoY3R4LnNhbXBsZVJhdGUgKiBkdXJhdGlvbikpO1xuICAgIGNvbnN0IGJ1ZmZlciA9IGN0eC5jcmVhdGVCdWZmZXIoMSwgc2FtcGxlQ291bnQsIGN0eC5zYW1wbGVSYXRlKTtcbiAgICBjb25zdCBjaGFubmVsID0gYnVmZmVyLmdldENoYW5uZWxEYXRhKDApO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2FtcGxlQ291bnQ7IGkgKz0gMSkge1xuICAgICAgY29uc3QgZGVjYXkgPSAxIC0gaSAvIHNhbXBsZUNvdW50O1xuICAgICAgY2hhbm5lbFtpXSA9IChNYXRoLnJhbmRvbSgpICogMiAtIDEpICogZGVjYXk7XG4gICAgfVxuXG4gICAgY29uc3Qgc291cmNlID0gY3R4LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpO1xuICAgIGNvbnN0IGZpbHRlciA9IGN0eC5jcmVhdGVCaXF1YWRGaWx0ZXIoKTtcbiAgICBjb25zdCBnYWluID0gY3R4LmNyZWF0ZUdhaW4oKTtcbiAgICBmaWx0ZXIudHlwZSA9IGZpbHRlclR5cGU7XG4gICAgZmlsdGVyLmZyZXF1ZW5jeS52YWx1ZSA9IGZyZXF1ZW5jeTtcbiAgICBmaWx0ZXIuUS52YWx1ZSA9IGZpbHRlclR5cGUgPT09ICdsb3dwYXNzJyA/IDAuNyA6IDEuODtcbiAgICBnYWluLmdhaW4uc2V0VmFsdWVBdFRpbWUoMC4wMDAxLCBjdHguY3VycmVudFRpbWUpO1xuICAgIGdhaW4uZ2Fpbi5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKGdhaW5WYWx1ZSAqIHRoaXMuc2Z4Vm9sdW1lKCksIGN0eC5jdXJyZW50VGltZSArIDAuMDEyKTtcbiAgICBnYWluLmdhaW4uZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSgwLjAwMDEsIGN0eC5jdXJyZW50VGltZSArIGR1cmF0aW9uKTtcbiAgICBzb3VyY2UuYnVmZmVyID0gYnVmZmVyO1xuICAgIHNvdXJjZS5jb25uZWN0KGZpbHRlcik7XG4gICAgZmlsdGVyLmNvbm5lY3QoZ2Fpbik7XG4gICAgZ2Fpbi5jb25uZWN0KHRoaXMubWFzdGVyR2FpbiA/PyBjdHguZGVzdGluYXRpb24pO1xuICAgIHNvdXJjZS5zdGFydCgpO1xuICAgIHNvdXJjZS5zdG9wKGN0eC5jdXJyZW50VGltZSArIGR1cmF0aW9uICsgMC4wMik7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IGhhbmRsZVZpc2liaWxpdHlDaGFuZ2UgPSAoKTogdm9pZCA9PiB7XG4gICAgaWYgKGRvY3VtZW50LmhpZGRlbikge1xuICAgICAgdGhpcy5wYXVzZUZvckJhY2tncm91bmQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdm9pZCB0aGlzLnJlc3VtZUZyb21CYWNrZ3JvdW5kKCk7XG4gIH07XG5cbiAgcHJpdmF0ZSByZWFkb25seSBoYW5kbGVQYWdlSGlkZSA9ICgpOiB2b2lkID0+IHtcbiAgICB0aGlzLnBhdXNlRm9yQmFja2dyb3VuZCgpO1xuICB9O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgaGFuZGxlUGFnZVNob3cgPSAoKTogdm9pZCA9PiB7XG4gICAgdm9pZCB0aGlzLnJlc3VtZUZyb21CYWNrZ3JvdW5kKCk7XG4gIH07XG5cbiAgcHJpdmF0ZSByZWFkb25seSBoYW5kbGVVc2VyQWN0aXZhdGlvbiA9ICgpOiB2b2lkID0+IHtcbiAgICBpZiAoIXRoaXMuZW5hYmxlZCgpIHx8ICF0aGlzLmlzRG9jdW1lbnRWaXNpYmxlKCkpIHJldHVybjtcbiAgICBpZiAodGhpcy5wYXVzZWRTYW1wbGVNdXNpYykge1xuICAgICAgdm9pZCB0aGlzLnJlc3VtZUZyb21CYWNrZ3JvdW5kKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZvaWQgdGhpcy53YWtlQXVkaW8oKTtcbiAgfTtcblxuICBwcml2YXRlIHBhdXNlRm9yQmFja2dyb3VuZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hY3RpdmVNZWxvZHkpIHRoaXMucGF1c2VkTWVsb2R5ID0gdGhpcy5hY3RpdmVNZWxvZHk7XG4gICAgaWYgKHRoaXMuc2FtcGxlTXVzaWMgJiYgdGhpcy5zYW1wbGVNdXNpY0NvbmZpZykge1xuICAgICAgdGhpcy5wYXVzZWRTYW1wbGVNdXNpYyA9IHRoaXMuc2FtcGxlTXVzaWNDb25maWc7XG4gICAgICB0aGlzLnN0b3BTYW1wbGVNdXNpYygpO1xuICAgIH1cbiAgICBpZiAodGhpcy5tdXNpY1RpbWVyKSB7XG4gICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLm11c2ljVGltZXIpO1xuICAgICAgdGhpcy5tdXNpY1RpbWVyID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aGlzLmFjdGl2ZU1lbG9keSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmZhZGVNYXN0ZXJUbygwLjAwMDEsIDAuMik7XG4gICAgaWYgKHRoaXMuc3VzcGVuZFRpbWVyKSB3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuc3VzcGVuZFRpbWVyKTtcbiAgICB0aGlzLnN1c3BlbmRUaW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc3VzcGVuZFRpbWVyID0gdW5kZWZpbmVkO1xuICAgICAgdm9pZCB0aGlzLmNvbnRleHQ/LnN1c3BlbmQoKS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xuICAgIH0sIDI2MCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlc3VtZUZyb21CYWNrZ3JvdW5kKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnN1c3BlbmRUaW1lcikge1xuICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLnN1c3BlbmRUaW1lcik7XG4gICAgICB0aGlzLnN1c3BlbmRUaW1lciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmVuYWJsZWQoKSkgcmV0dXJuO1xuICAgIGNvbnN0IHNhbXBsZU11c2ljID0gdGhpcy5wYXVzZWRTYW1wbGVNdXNpYztcbiAgICBpZiAoc2FtcGxlTXVzaWMpIHtcbiAgICAgIHRoaXMucGF1c2VkU2FtcGxlTXVzaWMgPSB1bmRlZmluZWQ7XG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0U2FtcGxlTXVzaWMoc2FtcGxlTXVzaWMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBtZWxvZHkgPSB0aGlzLnBhdXNlZE1lbG9keTtcbiAgICBpZiAoIW1lbG9keSkgcmV0dXJuO1xuICAgIHRoaXMucGF1c2VkTWVsb2R5ID0gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGN0eCA9IGF3YWl0IHRoaXMuZW5zdXJlQ29udGV4dCgpO1xuICAgIGF3YWl0IHRoaXMucmVzdW1lQ29udGV4dChjdHgpO1xuICAgIHRoaXMuZmFkZU1hc3RlclRvKDEsIDAuMzUpO1xuICAgIGF3YWl0IHRoaXMuc3RhcnRNdXNpYyhtZWxvZHkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB3YWtlQXVkaW8oKTogUHJvbWlzZTxBdWRpb0NvbnRleHQ+IHtcbiAgICBjb25zdCBjdHggPSBhd2FpdCB0aGlzLmVuc3VyZUNvbnRleHQoKTtcbiAgICBhd2FpdCB0aGlzLnJlc3VtZUNvbnRleHQoY3R4KTtcbiAgICB0aGlzLmZhZGVNYXN0ZXJUbygxLCAwLjEyKTtcbiAgICByZXR1cm4gY3R4O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZXN1bWVDb250ZXh0KGN0eDogQXVkaW9Db250ZXh0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGN0eC5zdGF0ZSA9PT0gJ3J1bm5pbmcnKSByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGN0eC5yZXN1bWUoKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIGlPUyBwdWVkZSBleGlnaXIgdW5hIG51ZXZhIGludGVyYWNjacOzbiBkZWwgdXN1YXJpbzsgZWwgbGlzdGVuZXIgZGUgYWN0aXZhY2nDs24gcmVpbnRlbnRhcsOhLlxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmFkZU1hc3RlclRvKHZhbHVlOiBudW1iZXIsIHNlY29uZHM6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5jb250ZXh0IHx8ICF0aGlzLm1hc3RlckdhaW4pIHJldHVybjtcbiAgICBjb25zdCBnYWluID0gdGhpcy5tYXN0ZXJHYWluLmdhaW47XG4gICAgY29uc3Qgbm93ID0gdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lO1xuICAgIGdhaW4uY2FuY2VsU2NoZWR1bGVkVmFsdWVzKG5vdyk7XG4gICAgZ2Fpbi5zZXRUYXJnZXRBdFRpbWUodmFsdWUsIG5vdywgTWF0aC5tYXgoMC4wMSwgc2Vjb25kcyAvIDQpKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNEb2N1bWVudFZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcgfHwgIWRvY3VtZW50LmhpZGRlbjtcbiAgfVxufVxuIl19
679
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV0cm8tYXVkaW8uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9vcmdhbmlzbXMvbWluaS1nYW1lcy9yZXRyby1hdWRpby5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQU9uRCxNQUFNLHdCQUF3QixHQUE2RDtJQUN6RixLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsdUNBQXVDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtJQUNyRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtJQUMvRCxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsMkNBQTJDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtJQUM1RSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsdUNBQXVDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtDQUNyRSxDQUFDO0FBQ0YsTUFBTSwwQkFBMEIsR0FBRztJQUNqQyxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtJQUNsRSxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtDQUN0RSxDQUFDO0FBQ0YsTUFBTSxxQkFBcUIsR0FBc0I7SUFDL0MsR0FBRyxFQUFFLHVDQUF1QztJQUM1QyxNQUFNLEVBQUUsSUFBSTtDQUNiLENBQUM7QUFDRixNQUFNLHFCQUFxQixHQUFzQjtJQUMvQyxHQUFHLEVBQUUsa0NBQWtDO0lBQ3ZDLE1BQU0sRUFBRSxJQUFJO0NBQ2IsQ0FBQztBQUdGLE1BQU0sT0FBTyxpQkFBaUI7SUFxQjVCO1FBakJRLGNBQVMsR0FBRyxDQUFDLENBQUM7UUFJTCxrQkFBYSxH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QUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUN0RixNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNsRixNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNyRixPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksS0FBSyxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM1RSxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDNUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDL0UsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDdEYsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDbkYsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDekUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDbkYsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFFTyx5QkFBeUIsQ0FBQyxLQUFzQjtRQUN0RCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDckcsQ0FBQztJQUVPLFVBQVUsQ0FBQyxNQUF1QyxFQUFFLFFBQW9CO1FBQzlFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksT0FBTyxLQUFLLEtBQUssV0FBVztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3JFLElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNoRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFzQixDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDNUYsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7WUFDdkIsS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNoRCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5QixNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2RCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDekQsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2hDLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2YsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUU7b0JBQ3BCLE9BQU8sRUFBRSxDQUFDO29CQUNWLFFBQVEsRUFBRSxDQUFDO2dCQUNiLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFFRCxpQkFBaUI7UUFDZixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakIsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLDBCQUEwQixDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztZQUFFLE9BQU87UUFDeEcsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELGdCQUFnQjtRQUNkLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNqQixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsMEJBQTBCLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUFFLE9BQU87UUFDbEYsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVPLHlCQUF5QjtRQUMvQixLQUFLLElBQUksQ0FBQyxRQUFRLENBQ2hCO1lBQ0UsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDO1lBQ1gsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDO1lBQ2QsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDO1lBQ2QsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO1lBQ1YsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDO1lBQ2QsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDO1lBQ2QsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDO1NBQ2YsRUFDRCxVQUFVLEVBQ1YsSUFBSSxFQUNKLEVBQUUsQ0FDSCxDQUFDO1FBQ0YsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3BGLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNwRixNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNyRixNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM3RyxDQUFDO0lBRUQscUJBQXFCO1FBQ25CLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FDaEI7WUFDRSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUM7WUFDZixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7WUFDZCxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7U0FDZixFQUNELFVBQVUsRUFDVixLQUFLLEVBQ0wsRUFBRSxDQUNILENBQUM7UUFDRixNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMzRSxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRUQsdUJBQXVCO1FBQ3JCLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FDaEI7WUFDRSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUM7WUFDWixDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUM7WUFDZixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7WUFDZCxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7U0FDZixFQUNELFVBQVUsRUFDVixLQUFLLEVBQ0wsRUFBRSxDQUNILENBQUM7UUFDRixNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDNUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUVPLFdBQVc7UUFDakIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsc0JBQXNCLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVPLGtCQUFrQixDQUFDLEdBQVcsRUFBRSxRQUFpQjtRQUN2RCxJQUFJLENBQUM7WUFDSCxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3hDLElBQUksS0FBSyxLQUFLLElBQUk7Z0JBQUUsT0FBTyxRQUFRLENBQUM7WUFDcEMsT0FBTyxLQUFLLEtBQUssR0FBRyxDQUFDO1FBQ3ZCLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDO0lBQ0gsQ0FBQztJQUVPLGlCQUFpQixDQUFDLEdBQVcsRUFBRSxRQUFnQjtRQUNyRCxLQUFLLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDeEIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN6QyxJQUFJLE1BQU0sS0FBSyxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7Z0JBQUUsT0FBTyxRQUFRLENBQUM7WUFDN0QsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzdCLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO1FBQ3pFLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDO0lBQ0gsQ0FBQztJQUVPLFlBQVksQ0FBQyxHQUFXLEVBQUUsS0FBYTtRQUM3QyxJQUFJLENBQUM7WUFDSCxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNuQyxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsdURBQXVEO1FBQ3pELENBQUM7SUFDSCxDQUFDO0lBRU8sZUFBZSxDQUFDLEtBQWE7UUFDbkMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFTyxhQUFhLENBQUMsR0FBVztRQUMvQixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztZQUFFLE9BQU87UUFDdEMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDN0IsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7WUFDdkIsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxvRUFBb0U7UUFDdEUsQ0FBQztJQUNILENBQUM7SUFFTyw4QkFBOEI7UUFDcEMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxZQUFZLEdBQUcsNkNBQTZDLENBQUM7WUFDbkUsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUc7Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFDNUQsTUFBTSxpQkFBaUIsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLDZCQUE2QixDQUFDLENBQUM7WUFDOUUsTUFBTSxlQUFlLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1lBQzFFLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxpQkFBaUIsS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDcEQsWUFBWSxDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUM5RCxDQUFDO1lBQ0QsSUFBSSxDQUFDLGVBQWUsSUFBSSxlQUFlLEtBQUssR0FBRyxFQUFFLENBQUM7Z0JBQ2hELFlBQVksQ0FBQyxPQUFPLENBQUMsMkJBQTJCLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDM0QsQ0FBQztZQUNELFlBQVksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzFDLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCx1REFBdUQ7UUFDekQsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVPLFlBQVk7UUFDbEIsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVPLFVBQVU7UUFDaEIsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVPLEtBQUssQ0FBQyxhQUFhO1FBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3JELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVPLFVBQVU7UUFDaEIsT0FBTztZQUNMLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQztZQUNYLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztZQUNULENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztZQUNkLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztZQUNkLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztZQUNkLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztZQUNULENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQztZQUNYLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztZQUNkLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztZQUNkLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQztZQUNYLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQztZQUNSLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztZQUNkLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztZQUNkLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztZQUNWLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQztZQUNYLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztTQUNmLENBQUM7SUFDSixDQUFDO0lBRU8sWUFBWSxDQUFDLElBQVk7UUFDL0IsSUFBSSxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ25CLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM1RSxDQUFDO1FBQ0QsSUFBSSxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ25CLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2hGLENBQUM7UUFDRCxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDckIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3JGLENBQUM7SUFDSCxDQUFDO0lBRU8sVUFBVTtRQUNoQixPQUFPO1lBQ0wsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDO1lBQ2QsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDO1lBQ2QsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDO1lBQ2QsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDO1lBQ2QsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDO1lBQ2QsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDO1lBQ2QsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDO1lBQ2QsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDO1NBQ2YsQ0FBQztJQUNKLENBQUM7SUFFTyxLQUFLLENBQUMsUUFBUSxDQUNwQixLQUFhLEVBQ2IsT0FBdUIsUUFBUSxFQUMvQixJQUFJLEdBQUcsS0FBSyxFQUNaLFVBQVUsR0FBRyxFQUFFO1FBRWYsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFBRSxPQUFPO1FBQzVCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUN6QyxNQUFNLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsQyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUM7UUFDdEYsQ0FBQztJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsTUFBeUI7UUFDdEQsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFBRSxPQUFPO1FBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxNQUFNLENBQUM7WUFDaEMsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEtBQUssTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsTUFBTTtZQUFFLE9BQU87UUFDcEYsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2pCLElBQUksT0FBTyxLQUFLLEtBQUssV0FBVztZQUFFLE9BQU87UUFFekMsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BDLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLE1BQU0sQ0FBQztRQUNoQyxJQUFJLENBQUM7WUFDSCxNQUFNLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQixDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsSUFBSSxDQUFDLGlCQUFpQixHQUFHLE1BQU0sQ0FBQztRQUNsQyxDQUFDO0lBQ0gsQ0FBQztJQUVPLGVBQWU7UUFDckIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUMvQixJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQztRQUM3QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsU0FBUyxDQUFDO1FBQ25DLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTztRQUNuQixLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDZCxLQUFLLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFZLEVBQUUsUUFBUSxHQUFHLEdBQUcsRUFBRSxPQUF1QixRQUFRLEVBQUUsU0FBUyxHQUFHLElBQUk7UUFDaEcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFBRSxPQUFPO1FBQy9CLElBQUksSUFBSSxJQUFJLENBQUM7WUFBRSxPQUFPO1FBQ3RCLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ25DLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzFDLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUM5QixVQUFVLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUN2QixVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsR0FBRyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUM3RixJQUFJLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyxDQUFDO1FBQzNFLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNqRCxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbkIsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxHQUFHLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRU8sS0FBSyxDQUFDLEtBQUssQ0FDakIsUUFBZ0IsRUFDaEIsTUFBYyxFQUNkLFFBQVEsR0FBRyxJQUFJLEVBQ2YsT0FBdUIsVUFBVSxFQUNqQyxTQUFTLEdBQUcsSUFBSTtRQUVoQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUFFLE9BQU87UUFDL0IsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbkMsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDMUMsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzlCLFVBQVUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLFVBQVUsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDL0QsVUFBVSxDQUFDLFNBQVMsQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyxDQUFDO1FBQ25HLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDN0YsSUFBSSxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsQ0FBQztRQUMzRSxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDakQsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25CLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELDRFQUE0RTtJQUM1RSxzRUFBc0U7SUFDOUQsS0FBSyxDQUFDLGFBQWEsQ0FDekIsUUFBUSxHQUFHLElBQUksRUFDZixTQUFTLEdBQUcsS0FBSyxFQUNqQixhQUErQixVQUFVLEVBQ3pDLFNBQVMsR0FBRyxHQUFHO1FBRWYsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFBRSxPQUFPO1FBQy9CLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ25DLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDaEUsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUN4QyxNQUFNLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFdBQVcsQ0FBQztZQUNsQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUMvQyxDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDeEMsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDeEMsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzlCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDO1FBQ3pCLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQztRQUNuQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxVQUFVLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUN0RCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxHQUFHLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxDQUFDO1FBQzlGLElBQUksQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLENBQUM7UUFDM0UsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDdkIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2QixNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDakQsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2YsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxHQUFHLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBMkJPLGtCQUFrQjtRQUN4QixJQUFJLElBQUksQ0FBQyxZQUFZO1lBQUUsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQzdELElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUMvQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1lBQ2hELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN6QixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEIsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7UUFDOUIsQ0FBQztRQUNELElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDO1FBQzlCLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLElBQUksSUFBSSxDQUFDLFlBQVk7WUFBRSxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ3pDLElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDO1lBQzlCLEtBQUssSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdEQsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUVPLEtBQUssQ0FBQyxvQkFBb0I7UUFDaEMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEIsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUM7UUFDaEMsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQUUsT0FBTztRQUM1QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFDM0MsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsU0FBUyxDQUFDO1lBQ25DLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3pDLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUNqQyxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU87UUFDcEIsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUM7UUFDOUIsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdkMsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzNCLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRU8sS0FBSyxDQUFDLFNBQVM7UUFDckIsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdkMsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzNCLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVPLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBaUI7UUFDM0MsSUFBSSxHQUFHLENBQUMsS0FBSyxLQUFLLFNBQVM7WUFBRSxPQUFPO1FBQ3BDLElBQUksQ0FBQztZQUNILE1BQU0sR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3JCLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCw2RkFBNkY7UUFDL0YsQ0FBQztJQUNILENBQUM7SUFFTyxZQUFZLENBQUMsS0FBYSxFQUFFLE9BQWU7UUFDakQsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU87UUFDOUMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7UUFDbEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7UUFDckMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRU8saUJBQWlCO1FBQ3ZCLE9BQU8sT0FBTyxRQUFRLEtBQUssV0FBVyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztJQUM3RCxDQUFDOytHQTV0QlUsaUJBQWlCO21IQUFqQixpQkFBaUIsY0FESixNQUFNOzs0RkFDbkIsaUJBQWlCO2tCQUQ3QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG50eXBlIE5vdGUgPSBbbnVtYmVyLCBudW1iZXJdO1xudHlwZSBNZWxvZHlNb2RlID0gJ21lbnUnIHwgJ2dhbWUnO1xudHlwZSBDaGVzc2ltYWxzUG93ZXIgPSAnZWFnbGUnIHwgJ2J1bGwnIHwgJ2thbmdhcm9vJyB8ICdsaW9uJztcbnR5cGUgU2FtcGxlTXVzaWNDb25maWcgPSB7IHNyYzogc3RyaW5nOyB2b2x1bWU6IG51bWJlciB9O1xuXG5jb25zdCBDSEVTU0lNQUxTX1BPV0VSX1NBTVBMRVM6IFJlY29yZDxDaGVzc2ltYWxzUG93ZXIsIHsgc3JjOiBzdHJpbmc7IHZvbHVtZTogbnVtYmVyIH0+ID0ge1xuICBlYWdsZTogeyBzcmM6ICdhc3NldHMvZ2FtZXMvY2hlc3NpbWFscy9lYWdsZS1jcnkud2F2Jywgdm9sdW1lOiAwLjcyIH0sXG4gIGJ1bGw6IHsgc3JjOiAnYXNzZXRzL2dhbWVzL2NoZXNzaW1hbHMvYnVsbC53YXYnLCB2b2x1bWU6IDAuNjQgfSxcbiAga2FuZ2Fyb286IHsgc3JjOiAnYXNzZXRzL2dhbWVzL2NoZXNzaW1hbHMva2FuZ2Fyb28tanVtcC5tcDMnLCB2b2x1bWU6IDAuNzIgfSxcbiAgbGlvbjogeyBzcmM6ICdhc3NldHMvZ2FtZXMvY2hlc3NpbWFscy9saW9uLXJvYXIud2F2Jywgdm9sdW1lOiAwLjY4IH0sXG59O1xuY29uc3QgQ0hFU1NJTUFMU19PVVRDT01FX1NBTVBMRVMgPSB7XG4gIHZpY3Rvcnk6IHsgc3JjOiAnYXNzZXRzL2dhbWVzL2NoZXNzaW1hbHMvdGFkYS5tcDMnLCB2b2x1bWU6IDAuNzIgfSxcbiAgZGVmZWF0OiB7IHNyYzogJ2Fzc2V0cy9nYW1lcy9jaGVzc2ltYWxzL3lvdS1sb3NlLm1wMycsIHZvbHVtZTogMC43MiB9LFxufTtcbmNvbnN0IENIRVNTSU1BTFNfTUVOVV9NVVNJQzogU2FtcGxlTXVzaWNDb25maWcgPSB7XG4gIHNyYzogJ2Fzc2V0cy9nYW1lcy9jaGVzc2ltYWxzL21haW4tbWVudS5tcDMnLFxuICB2b2x1bWU6IDAuMzQsXG59O1xuY29uc3QgQ0hFU1NJTUFMU19HQU1FX01VU0lDOiBTYW1wbGVNdXNpY0NvbmZpZyA9IHtcbiAgc3JjOiAnYXNzZXRzL2dhbWVzL2NoZXNzaW1hbHMvR2FtZS5tcDMnLFxuICB2b2x1bWU6IDAuMjgsXG59O1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFJldHJvQXVkaW9TZXJ2aWNlIHtcbiAgcHJpdmF0ZSBjb250ZXh0PzogQXVkaW9Db250ZXh0O1xuICBwcml2YXRlIG1hc3RlckdhaW4/OiBHYWluTm9kZTtcbiAgcHJpdmF0ZSBtdXNpY1RpbWVyPzogbnVtYmVyO1xuICBwcml2YXRlIG5vdGVJbmRleCA9IDA7XG4gIHByaXZhdGUgYWN0aXZlTWVsb2R5PzogTWVsb2R5TW9kZTtcbiAgcHJpdmF0ZSBwYXVzZWRNZWxvZHk/OiBNZWxvZHlNb2RlO1xuICBwcml2YXRlIHN1c3BlbmRUaW1lcj86IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBhY3RpdmVTYW1wbGVzID0gbmV3IFNldDxIVE1MQXVkaW9FbGVtZW50PigpO1xuICBwcml2YXRlIHNhbXBsZU11c2ljPzogSFRNTEF1ZGlvRWxlbWVudDtcbiAgcHJpdmF0ZSBzYW1wbGVNdXNpY0NvbmZpZz86IFNhbXBsZU11c2ljQ29uZmlnO1xuICBwcml2YXRlIHBhdXNlZFNhbXBsZU11c2ljPzogU2FtcGxlTXVzaWNDb25maWc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0c1JlYWR5ID0gdGhpcy5taWdyYXRlQ2hlc3NpbWFsc0F1ZGlvRGVmYXVsdHMoKTtcbiAgcmVhZG9ubHkgZW5hYmxlZCA9IHNpZ25hbDxib29sZWFuPih0aGlzLnJlYWRFbmFibGVkKCkpO1xuICByZWFkb25seSBtdXNpY0VuYWJsZWQgPSBzaWduYWw8Ym9vbGVhbj4odGhpcy5yZWFkQm9vbGVhblNldHRpbmcoJ3ZhbC1taW5pLWdhbWVzLW11c2ljLWVuYWJsZWQnLCB0cnVlKSk7XG4gIHJlYWRvbmx5IHNmeEVuYWJsZWQgPSBzaWduYWw8Ym9vbGVhbj4odGhpcy5yZWFkQm9vbGVhblNldHRpbmcoJ3ZhbC1taW5pLWdhbWVzLXNmeC1lbmFibGVkJywgdHJ1ZSkpO1xuICByZWFkb25seSBtdXNpY1ZvbHVtZSA9IHNpZ25hbDxudW1iZXI+KHRoaXMucmVhZFZvbHVtZVNldHRpbmcoJ3ZhbC1taW5pLWdhbWVzLW11c2ljLXZvbHVtZScsIDAuMjUpKTtcbiAgcmVhZG9ubHkgc2Z4Vm9sdW1lID0gc2lnbmFsPG51bWJlcj4odGhpcy5yZWFkVm9sdW1lU2V0dGluZygndmFsLW1pbmktZ2FtZXMtc2Z4LXZvbHVtZScsIDAuOCkpO1xuICBwcml2YXRlIHJlYWRvbmx5IHNhbXBsZUNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIEhUTUxBdWRpb0VsZW1lbnQ+KCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCB0aGlzLmhhbmRsZVZpc2liaWxpdHlDaGFuZ2UpO1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcmRvd24nLCB0aGlzLmhhbmRsZVVzZXJBY3RpdmF0aW9uLCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgdGhpcy5oYW5kbGVVc2VyQWN0aXZhdGlvbiwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuaGFuZGxlVXNlckFjdGl2YXRpb24pO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwYWdlaGlkZScsIHRoaXMuaGFuZGxlUGFnZUhpZGUpO1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BhZ2VzaG93JywgdGhpcy5oYW5kbGVQYWdlU2hvdyk7XG4gICAgfVxuICB9XG5cbiAgc2V0RW5hYmxlZCh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZW5hYmxlZC5zZXQodmFsdWUpO1xuICAgIHRyeSB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndmFsLW1pbmktZ2FtZXMtYXVkaW8nLCB2YWx1ZSA/ICcxJyA6ICcwJyk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBsb2NhbFN0b3JhZ2UgcHVlZGUgbm8gZXN0YXIgZGlzcG9uaWJsZSBlbiBTU1IvdGVzdHMuXG4gICAgfVxuICAgIGlmICghdmFsdWUpIHRoaXMuc3RvcE11c2ljKCk7XG4gIH1cblxuICBzZXRNdXNpY0VuYWJsZWQodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLm11c2ljRW5hYmxlZC5zZXQodmFsdWUpO1xuICAgIHRoaXMud3JpdGVTZXR0aW5nKCd2YWwtbWluaS1nYW1lcy1tdXNpYy1lbmFibGVkJywgdmFsdWUgPyAnMScgOiAnMCcpO1xuICAgIGlmICghdmFsdWUpIHRoaXMuc3RvcE11c2ljKCk7XG4gIH1cblxuICBzZXRTZnhFbmFibGVkKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5zZnhFbmFibGVkLnNldCh2YWx1ZSk7XG4gICAgdGhpcy53cml0ZVNldHRpbmcoJ3ZhbC1taW5pLWdhbWVzLXNmeC1lbmFibGVkJywgdmFsdWUgPyAnMScgOiAnMCcpO1xuICB9XG5cbiAgc2V0TXVzaWNWb2x1bWUodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHZvbHVtZSA9IHRoaXMubm9ybWFsaXplVm9sdW1lKHZhbHVlKTtcbiAgICB0aGlzLm11c2ljVm9sdW1lLnNldCh2b2x1bWUpO1xuICAgIHRoaXMud3JpdGVTZXR0aW5nKCd2YWwtbWluaS1nYW1lcy1tdXNpYy12b2x1bWUnLCBgJHt2b2x1bWV9YCk7XG4gICAgaWYgKHRoaXMuc2FtcGxlTXVzaWMgJiYgdGhpcy5zYW1wbGVNdXNpY0NvbmZpZykge1xuICAgICAgdGhpcy5zYW1wbGVNdXNpYy52b2x1bWUgPSB0aGlzLnNhbXBsZU11c2ljQ29uZmlnLnZvbHVtZSAqIHZvbHVtZTtcbiAgICB9XG4gIH1cblxuICBzZXRTZnhWb2x1bWUodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHZvbHVtZSA9IHRoaXMubm9ybWFsaXplVm9sdW1lKHZhbHVlKTtcbiAgICB0aGlzLnNmeFZvbHVtZS5zZXQodm9sdW1lKTtcbiAgICB0aGlzLndyaXRlU2V0dGluZygndmFsLW1pbmktZ2FtZXMtc2Z4LXZvbHVtZScsIGAke3ZvbHVtZX1gKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0TWVudU11c2ljKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuc3RhcnRNdXNpYygnbWVudScpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRDaGVzc2ltYWxzTWVudU11c2ljKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMucHJlbG9hZENoZXNzaW1hbHNTYW1wbGVzKCk7XG4gICAgYXdhaXQgdGhpcy5zdGFydFNhbXBsZU11c2ljKENIRVNTSU1BTFNfTUVOVV9NVVNJQyk7XG4gIH1cblxuICBhc3luYyBzdGFydENoZXNzaW1hbHNHYW1lTXVzaWMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5wcmVsb2FkQ2hlc3NpbWFsc1NhbXBsZXMoKTtcbiAgICBhd2FpdCB0aGlzLnN0YXJ0U2FtcGxlTXVzaWMoQ0hFU1NJTUFMU19HQU1FX01VU0lDKTtcbiAgfVxuXG4gIHByZWxvYWRDaGVzc2ltYWxzU2FtcGxlcygpOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIEF1ZGlvID09PSAndW5kZWZpbmVkJykgcmV0dXJuO1xuICAgIFtcbiAgICAgIC4uLk9iamVjdC52YWx1ZXMoQ0hFU1NJTUFMU19QT1dFUl9TQU1QTEVTKSxcbiAgICAgIENIRVNTSU1BTFNfT1VUQ09NRV9TQU1QTEVTLnZpY3RvcnksXG4gICAgICBDSEVTU0lNQUxTX09VVENPTUVfU0FNUExFUy5kZWZlYXQsXG4gICAgXS5mb3JFYWNoKChzYW1wbGUpID0+IHRoaXMucHJlbG9hZFNhbXBsZShzYW1wbGUuc3JjKSk7XG4gIH1cblxuICBhc3luYyBzdGFydEdhbWVNdXNpYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnN0YXJ0TXVzaWMoJ2dhbWUnKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0TXVzaWMobW9kZTogTWVsb2R5TW9kZSA9ICdnYW1lJyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5jYW5QbGF5TXVzaWMoKSkgcmV0dXJuO1xuICAgIGlmICghdGhpcy5pc0RvY3VtZW50VmlzaWJsZSgpKSB7XG4gICAgICB0aGlzLnBhdXNlZE1lbG9keSA9IG1vZGU7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IHRoaXMud2FrZUF1ZGlvKCk7XG4gICAgaWYgKHRoaXMubXVzaWNUaW1lciAmJiB0aGlzLmFjdGl2ZU1lbG9keSA9PT0gbW9kZSkgcmV0dXJuO1xuICAgIHRoaXMuc3RvcE11c2ljKCk7XG4gICAgdGhpcy5mYWRlTWFzdGVyVG8oMSwgMC4yNCk7XG4gICAgdGhpcy5hY3RpdmVNZWxvZHkgPSBtb2RlO1xuICAgIHRoaXMubm90ZUluZGV4ID0gMDtcbiAgICBjb25zdCBtZWxvZHkgPSBtb2RlID09PSAnbWVudScgPyB0aGlzLm1lbnVNZWxvZHkoKSA6IHRoaXMuZ2FtZU1lbG9keSgpO1xuICAgIGNvbnN0IGludGVydmFsTXMgPSBtb2RlID09PSAnbWVudScgPyA2NDAgOiAxOTA7XG4gICAgY29uc3Qgd2F2ZTogT3NjaWxsYXRvclR5cGUgPSBtb2RlID09PSAnbWVudScgPyAndHJpYW5nbGUnIDogJ3NxdWFyZSc7XG4gICAgY29uc3QgZ2FpbiA9IG1vZGUgPT09ICdtZW51JyA/IDAuMDE4IDogMC4wMjU7XG4gICAgdGhpcy5tdXNpY1RpbWVyID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGNvbnN0IHN0ZXAgPSB0aGlzLm5vdGVJbmRleDtcbiAgICAgIGNvbnN0IFtmcmVxLCBkdXJhdGlvbl0gPSBtZWxvZHlbdGhpcy5ub3RlSW5kZXggJSBtZWxvZHkubGVuZ3RoXTtcbiAgICAgIHRoaXMubm90ZUluZGV4ICs9IDE7XG4gICAgICB0aGlzLnRvbmUoZnJlcSwgZHVyYXRpb24sIHdhdmUsIGdhaW4pO1xuICAgICAgaWYgKG1vZGUgPT09ICdtZW51JykgdGhpcy5zYXZhbm5hUHVsc2Uoc3RlcCk7XG4gICAgfSwgaW50ZXJ2YWxNcyk7XG4gIH1cblxuICBzdG9wTXVzaWMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubXVzaWNUaW1lcikge1xuICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5tdXNpY1RpbWVyKTtcbiAgICAgIHRoaXMubXVzaWNUaW1lciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhpcy5hY3RpdmVNZWxvZHkgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5wYXVzZWRNZWxvZHkgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5wYXVzZWRTYW1wbGVNdXNpYyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnN0b3BTYW1wbGVNdXNpYygpO1xuICB9XG5cbiAgZmxpcCgpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMudG9uZSg0NDAsIDAuMDU1LCAnc3F1YXJlJywgMC4wNSk7XG4gIH1cblxuICBtYXRjaCgpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMuc2VxdWVuY2UoW1xuICAgICAgWzY2MCwgMC4wOF0sXG4gICAgICBbODgwLCAwLjFdLFxuICAgICAgWzk5MCwgMC4xMl0sXG4gICAgXSk7XG4gIH1cblxuICBtaXNzKCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy5zZXF1ZW5jZShbXG4gICAgICBbMjIwLCAwLjA4XSxcbiAgICAgIFsxNzQuNjEsIDAuMTJdLFxuICAgIF0pO1xuICB9XG5cbiAgd2luKCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcE11c2ljKCk7XG4gICAgdm9pZCB0aGlzLnNlcXVlbmNlKFtcbiAgICAgIFs1MjMuMjUsIDAuMDldLFxuICAgICAgWzY1OS4yNSwgMC4wOV0sXG4gICAgICBbNzgzLjk5LCAwLjA5XSxcbiAgICAgIFsxMDQ2LjUsIDAuMTRdLFxuICAgICAgWzEzMTguNTEsIDAuMjJdLFxuICAgICAgWzE1NjcuOTgsIDAuMjZdLFxuICAgIF0pO1xuICB9XG5cbiAgbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3BNdXNpYygpO1xuICAgIHZvaWQgdGhpcy5zZXF1ZW5jZShbXG4gICAgICBbMjkzLjY2LCAwLjEyXSxcbiAgICAgIFsyNDYuOTQsIDAuMTJdLFxuICAgICAgWzE5NiwgMC4yXSxcbiAgICBdKTtcbiAgfVxuXG4gIHNpbW9uUGFkKGZyZXE6IG51bWJlcik6IHZvaWQge1xuICAgIHZvaWQgdGhpcy50b25lKGZyZXEsIDAuMjIsICdzaW5lJywgMC4wNTUpO1xuICB9XG5cbiAgc2ltb25TdGVwT2soKTogdm9pZCB7XG4gICAgdm9pZCB0aGlzLnRvbmUoODgwLCAwLjA4LCAndHJpYW5nbGUnLCAwLjAzNSk7XG4gIH1cblxuICBzaW1vblJvdW5kT2soKTogdm9pZCB7XG4gICAgdm9pZCB0aGlzLnNlcXVlbmNlKFtcbiAgICAgIFs2NTkuMjUsIDAuMDhdLFxuICAgICAgWzg4MCwgMC4wOF0sXG4gICAgICBbMTE3NC42NiwgMC4xMl0sXG4gICAgXSk7XG4gIH1cblxuICBzaW1vbkZhaWwoKTogdm9pZCB7XG4gICAgdm9pZCB0aGlzLnNlcXVlbmNlKFtcbiAgICAgIFsxOTYsIDAuMTJdLFxuICAgICAgWzE0Ni44MywgMC4xOF0sXG4gICAgXSk7XG4gIH1cblxuICBjaGVzc2ltYWxzTW92ZSgpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMuc2VxdWVuY2UoXG4gICAgICBbXG4gICAgICAgIFszOTIsIDAuMDQ1XSxcbiAgICAgICAgWzQ5My44OCwgMC4wNTVdLFxuICAgICAgXSxcbiAgICAgICd0cmlhbmdsZScsXG4gICAgICAwLjAzMixcbiAgICAgIDQ4LFxuICAgICk7XG4gICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLmZpbHRlcmVkTm9pc2UoMC4wMzUsIDAuMDEyLCAnYmFuZHBhc3MnLCA4MjApLCA4KTtcbiAgfVxuXG4gIGNoZXNzaW1hbHNCb3RNb3ZlKCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy5zZXF1ZW5jZShcbiAgICAgIFtcbiAgICAgICAgWzMyOS42MywgMC4wNTVdLFxuICAgICAgICBbMjQ2Ljk0LCAwLjA3XSxcbiAgICAgIF0sXG4gICAgICAnc2F3dG9vdGgnLFxuICAgICAgMC4wMjQsXG4gICAgICA1NixcbiAgICApO1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5maWx0ZXJlZE5vaXNlKDAuMDUsIDAuMDEsICdsb3dwYXNzJywgNDIwKSwgMTYpO1xuICB9XG5cbiAgY2hlc3NpbWFsc0NhcHR1cmUoKTogdm9pZCB7XG4gICAgdm9pZCB0aGlzLnNlcXVlbmNlKFxuICAgICAgW1xuICAgICAgICBbMTc0LjYxLCAwLjA0XSxcbiAgICAgICAgWzI0Ni45NCwgMC4wNDVdLFxuICAgICAgICBbNTg3LjMzLCAwLjA5NV0sXG4gICAgICAgIFs3ODMuOTksIDAuMDhdLFxuICAgICAgXSxcbiAgICAgICdzcXVhcmUnLFxuICAgICAgMC4wNDYsXG4gICAgICA0NCxcbiAgICApO1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5zd2VlcCg5NiwgNDIsIDAuMTgsICdzYXd0b290aCcsIDAuMDI2KSwgMjApO1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5maWx0ZXJlZE5vaXNlKDAuMTgsIDAuMDUsICdsb3dwYXNzJywgNTIwKSwgMTgpO1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5maWx0ZXJlZE5vaXNlKDAuMDcsIDAuMDI4LCAnYmFuZHBhc3MnLCAxODAwKSwgODQpO1xuICB9XG5cbiAgY2hlc3NpbWFsc1Bvd2VyKHBvd2VyOiBDaGVzc2ltYWxzUG93ZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wbGF5Q2hlc3NpbWFsc1Bvd2VyU2FtcGxlKHBvd2VyKSkgcmV0dXJuO1xuICAgIHRoaXMuY2hlc3NpbWFsc1Bvd2VyRmFsbGJhY2socG93ZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVzc2ltYWxzUG93ZXJGYWxsYmFjayhwb3dlcjogQ2hlc3NpbWFsc1Bvd2VyKTogdm9pZCB7XG4gICAgY29uc3Qgbm90ZXM6IFJlY29yZDxDaGVzc2ltYWxzUG93ZXIsIE5vdGVbXT4gPSB7XG4gICAgICBlYWdsZTogW1xuICAgICAgICBbNjU5LjI1LCAwLjA1NV0sXG4gICAgICAgIFs4ODAsIDAuMDY1XSxcbiAgICAgICAgWzEzMTguNTEsIDAuMTJdLFxuICAgICAgXSxcbiAgICAgIGJ1bGw6IFtcbiAgICAgICAgWzE5NiwgMC4wNzVdLFxuICAgICAgICBbMTY0LjgxLCAwLjA3NV0sXG4gICAgICAgIFsyNDYuOTQsIDAuMTNdLFxuICAgICAgXSxcbiAgICAgIGthbmdhcm9vOiBbXG4gICAgICAgIFszOTIsIDAuMDU1XSxcbiAgICAgICAgWzAsIDAuMDRdLFxuICAgICAgICBbNzgzLjk5LCAwLjExXSxcbiAgICAgIF0sXG4gICAgICBsaW9uOiBbXG4gICAgICAgIFsyNjEuNjMsIDAuMDZdLFxuICAgICAgICBbMzkyLCAwLjA2XSxcbiAgICAgICAgWzUyMy4yNSwgMC4wNl0sXG4gICAgICAgIFs3ODMuOTksIDAuMTRdLFxuICAgICAgXSxcbiAgICB9O1xuICAgIHZvaWQgdGhpcy5zZXF1ZW5jZShub3Rlc1twb3dlcl0sIHBvd2VyID09PSAnYnVsbCcgPyAnc2F3dG9vdGgnIDogJ3RyaWFuZ2xlJywgMC4wNDYsIDU4KTtcbiAgICBpZiAocG93ZXIgPT09ICdlYWdsZScpIHtcbiAgICAgIHZvaWQgdGhpcy5zd2VlcCg3MjAsIDE1NjgsIDAuMTgsICd0cmlhbmdsZScsIDAuMDI4KTtcbiAgICAgIHZvaWQgdGhpcy5maWx0ZXJlZE5vaXNlKDAuMjIsIDAuMDI1LCAnaGlnaHBhc3MnLCAxNjAwKTtcbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5maWx0ZXJlZE5vaXNlKDAuMDgsIDAuMDE4LCAnYmFuZHBhc3MnLCAyNjAwKSwgOTIpO1xuICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLnRvbmUoMTc2MCwgMC4wNTUsICdzaW5lJywgMC4wMTgpLCAxNTApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocG93ZXIgPT09ICdidWxsJykge1xuICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLnRvbmUoODIuNDEsIDAuMTYsICdzYXd0b290aCcsIDAuMDM4KSwgNzIpO1xuICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLnN3ZWVwKDEzOC41OSwgNjUuNDEsIDAuMTgsICdzYXd0b290aCcsIDAuMDI2KSwgMTE4KTtcbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5maWx0ZXJlZE5vaXNlKDAuMTYsIDAuMDM4LCAnbG93cGFzcycsIDI2MCksIDM2KTtcbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5maWx0ZXJlZE5vaXNlKDAuMDU1LCAwLjAyNiwgJ2JhbmRwYXNzJywgOTYwKSwgMTcwKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHBvd2VyID09PSAna2FuZ2Fyb28nKSB7XG4gICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMuc3dlZXAoNDIwLCA5NDAsIDAuMTEsICdzaW5lJywgMC4wMzIpLCA4OCk7XG4gICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMuc3dlZXAoOTQwLCA1MjAsIDAuMSwgJ3NpbmUnLCAwLjAyNiksIDE5MCk7XG4gICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMudG9uZSgyNjEuNjMsIDAuMDU1LCAndHJpYW5nbGUnLCAwLjAxOCksIDI0NSk7XG4gICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMuZmlsdGVyZWROb2lzZSgwLjAzNSwgMC4wMTgsICdiYW5kcGFzcycsIDExODApLCAyMTgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMuc3dlZXAoMTY0LjgxLCAzOTIsIDAuMjQsICdzYXd0b290aCcsIDAuMDM0KSwgNzApO1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy50b25lKDk4LCAwLjE4LCAnc2F3dG9vdGgnLCAwLjAyKSwgMTUwKTtcbiAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMuZmlsdGVyZWROb2lzZSgwLjI4LCAwLjAzMiwgJ2JhbmRwYXNzJywgMzQwKSwgNjIpO1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5zd2VlcCgxOTYsIDE0Ni44MywgMC4yMiwgJ3Nhd3Rvb3RoJywgMC4wMjIpLCAxMTYpO1xuICB9XG5cbiAgcHJpdmF0ZSBwbGF5Q2hlc3NpbWFsc1Bvd2VyU2FtcGxlKHBvd2VyOiBDaGVzc2ltYWxzUG93ZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wbGF5U2FtcGxlKENIRVNTSU1BTFNfUE9XRVJfU0FNUExFU1twb3dlcl0sICgpID0+IHRoaXMuY2hlc3NpbWFsc1Bvd2VyRmFsbGJhY2socG93ZXIpKTtcbiAgfVxuXG4gIHByaXZhdGUgcGxheVNhbXBsZShzYW1wbGU6IHsgc3JjOiBzdHJpbmc7IHZvbHVtZTogbnVtYmVyIH0sIGZhbGxiYWNrOiAoKSA9PiB2b2lkKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmNhblBsYXlTZngoKSB8fCB0eXBlb2YgQXVkaW8gPT09ICd1bmRlZmluZWQnKSByZXR1cm4gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuc2FtcGxlQ2FjaGUuZ2V0KHNhbXBsZS5zcmMpO1xuICAgICAgY29uc3QgYXVkaW8gPSBjYWNoZWQgPyAoY2FjaGVkLmNsb25lTm9kZSh0cnVlKSBhcyBIVE1MQXVkaW9FbGVtZW50KSA6IG5ldyBBdWRpbyhzYW1wbGUuc3JjKTtcbiAgICAgIGF1ZGlvLnByZWxvYWQgPSAnYXV0byc7XG4gICAgICBhdWRpby52b2x1bWUgPSBzYW1wbGUudm9sdW1lICogdGhpcy5zZnhWb2x1bWUoKTtcbiAgICAgIHRoaXMuYWN0aXZlU2FtcGxlcy5hZGQoYXVkaW8pO1xuICAgICAgY29uc3QgcmVsZWFzZSA9ICgpID0+IHRoaXMuYWN0aXZlU2FtcGxlcy5kZWxldGUoYXVkaW8pO1xuICAgICAgYXVkaW8uYWRkRXZlbnRMaXN0ZW5lcignZW5kZWQnLCByZWxlYXNlLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgICBhdWRpby5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHJlbGVhc2UsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICAgIGNvbnN0IHBsYXlSZXN1bHQgPSBhdWRpby5wbGF5KCk7XG4gICAgICBpZiAocGxheVJlc3VsdCkge1xuICAgICAgICBwbGF5UmVzdWx0LmNhdGNoKCgpID0+IHtcbiAgICAgICAgICByZWxlYXNlKCk7XG4gICAgICAgICAgZmFsbGJhY2soKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBjaGVzc2ltYWxzVmljdG9yeSgpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3BNdXNpYygpO1xuICAgIGlmICh0aGlzLnBsYXlTYW1wbGUoQ0hFU1NJTUFMU19PVVRDT01FX1NBTVBMRVMudmljdG9yeSwgKCkgPT4gdGhpcy5jaGVzc2ltYWxzVmljdG9yeUZhbGxiYWNrKCkpKSByZXR1cm47XG4gICAgdGhpcy5jaGVzc2ltYWxzVmljdG9yeUZhbGxiYWNrKCk7XG4gIH1cblxuICBjaGVzc2ltYWxzRGVmZWF0KCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcE11c2ljKCk7XG4gICAgaWYgKHRoaXMucGxheVNhbXBsZShDSEVTU0lNQUxTX09VVENPTUVfU0FNUExFUy5kZWZlYXQsICgpID0+IHRoaXMubG9zZSgpKSkgcmV0dXJuO1xuICAgIHRoaXMubG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVzc2ltYWxzVmljdG9yeUZhbGxiYWNrKCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy5zZXF1ZW5jZShcbiAgICAgIFtcbiAgICAgICAgWzE5NiwgMC4wOF0sXG4gICAgICAgIFsyNjEuNjMsIDAuMDhdLFxuICAgICAgICBbMzI5LjYzLCAwLjA4XSxcbiAgICAgICAgWzM5MiwgMC4xXSxcbiAgICAgICAgWzUyMy4yNSwgMC4xMl0sXG4gICAgICAgIFs3ODMuOTksIDAuMTZdLFxuICAgICAgICBbMTA0Ni41LCAwLjIyXSxcbiAgICAgIF0sXG4gICAgICAndHJpYW5nbGUnLFxuICAgICAgMC4wNSxcbiAgICAgIDcyLFxuICAgICk7XG4gICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLnN3ZWVwKDEzMC44MSwgNjUuNDEsIDAuMjgsICdzYXd0b290aCcsIDAuMDIpLCA0MCk7XG4gICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLnN3ZWVwKDUyMy4yNSwgMTU2Ny45OCwgMC4zNCwgJ3NpbmUnLCAwLjAyNiksIDI0MCk7XG4gICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLmZpbHRlcmVkTm9pc2UoMC4xNiwgMC4wMjIsICdiYW5kcGFzcycsIDE0MDApLCAxMjApO1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5zZXF1ZW5jZShbWzk4Ny43NywgMC4wOF0sIFsxMzE4LjUxLCAwLjEyXV0sICd0cmlhbmdsZScsIDAuMDMyLCA4NiksIDUyMCk7XG4gIH1cblxuICBjaGVzc2ltYWxzSm9pblJlcXVlc3QoKTogdm9pZCB7XG4gICAgdm9pZCB0aGlzLnNlcXVlbmNlKFxuICAgICAgW1xuICAgICAgICBbNTIzLjI1LCAwLjA1NV0sXG4gICAgICAgIFs2NTkuMjUsIDAuMDZdLFxuICAgICAgICBbOTg3Ljc3LCAwLjEyXSxcbiAgICAgIF0sXG4gICAgICAndHJpYW5nbGUnLFxuICAgICAgMC4wMzQsXG4gICAgICA1OCxcbiAgICApO1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy50b25lKDEzMTguNTEsIDAuMDc1LCAnc2luZScsIDAuMDIpLCAxMzYpO1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5maWx0ZXJlZE5vaXNlKDAuMDYsIDAuMDEsICdoaWdocGFzcycsIDE4MDApLCA5OCk7XG4gIH1cblxuICBjaGVzc2ltYWxzUG93ZXJVbmxvY2tlZCgpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMuc2VxdWVuY2UoXG4gICAgICBbXG4gICAgICAgIFszOTIsIDAuMDU1XSxcbiAgICAgICAgWzUyMy4yNSwgMC4wNTVdLFxuICAgICAgICBbNjU5LjI1LCAwLjA4XSxcbiAgICAgICAgWzk4Ny43NywgMC4xM10sXG4gICAgICBdLFxuICAgICAgJ3RyaWFuZ2xlJyxcbiAgICAgIDAuMDM4LFxuICAgICAgNjQsXG4gICAgKTtcbiAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMuc3dlZXAoMjIwLCA4ODAsIDAuMjIsICdzaW5lJywgMC4wMjQpLCA3MCk7XG4gICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLmZpbHRlcmVkTm9pc2UoMC4yNCwgMC4wMTgsICdiYW5kcGFzcycsIDEyMDApLCA1NCk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJlYWRCb29sZWFuU2V0dGluZygndmFsLW1pbmktZ2FtZXMtYXVkaW8nLCB0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZEJvb2xlYW5TZXR0aW5nKGtleTogc3RyaW5nLCBmYWxsYmFjazogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSk7XG4gICAgICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiBmYWxsYmFjaztcbiAgICAgIHJldHVybiB2YWx1ZSAhPT0gJzAnO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbGxiYWNrO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVhZFZvbHVtZVNldHRpbmcoa2V5OiBzdHJpbmcsIGZhbGxiYWNrOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHZvaWQgdGhpcy5kZWZhdWx0c1JlYWR5O1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdG9yZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuICAgICAgaWYgKHN0b3JlZCA9PT0gbnVsbCB8fCBzdG9yZWQudHJpbSgpID09PSAnJykgcmV0dXJuIGZhbGxiYWNrO1xuICAgICAgY29uc3QgdmFsdWUgPSBOdW1iZXIoc3RvcmVkKTtcbiAgICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUodmFsdWUpID8gdGhpcy5ub3JtYWxpemVWb2x1bWUodmFsdWUpIDogZmFsbGJhY2s7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsbGJhY2s7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB3cml0ZVNldHRpbmcoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCB2YWx1ZSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBsb2NhbFN0b3JhZ2UgcHVlZGUgbm8gZXN0YXIgZGlzcG9uaWJsZSBlbiBTU1IvdGVzdHMuXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVWb2x1bWUodmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGgubWluKDEsIE1hdGgubWF4KDAsIHZhbHVlKSk7XG4gIH1cblxuICBwcml2YXRlIHByZWxvYWRTYW1wbGUoc3JjOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zYW1wbGVDYWNoZS5oYXMoc3JjKSkgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBhdWRpbyA9IG5ldyBBdWRpbyhzcmMpO1xuICAgICAgYXVkaW8ucHJlbG9hZCA9ICdhdXRvJztcbiAgICAgIGF1ZGlvLmxvYWQoKTtcbiAgICAgIHRoaXMuc2FtcGxlQ2FjaGUuc2V0KHNyYywgYXVkaW8pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gU2kgZWwgbmF2ZWdhZG9yIG5vIHBlcm1pdGUgcHJlY2FyZ2FyLCBzZSBpbnRlbnRhcmEgYWwgcmVwcm9kdWNpci5cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1pZ3JhdGVDaGVzc2ltYWxzQXVkaW9EZWZhdWx0cygpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbWlncmF0aW9uS2V5ID0gJ3ZhbC1taW5pLWdhbWVzLWNoZXNzaW1hbHMtYXVkaW8tZGVmYXVsdHMtdjInO1xuICAgICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKG1pZ3JhdGlvbktleSkgPT09ICcxJykgcmV0dXJuIHRydWU7XG4gICAgICBjb25zdCBzdG9yZWRNdXNpY1ZvbHVtZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd2YWwtbWluaS1nYW1lcy1tdXNpYy12b2x1bWUnKTtcbiAgICAgIGNvbnN0IHN0b3JlZFNmeFZvbHVtZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd2YWwtbWluaS1nYW1lcy1zZngtdm9sdW1lJyk7XG4gICAgICBpZiAoIXN0b3JlZE11c2ljVm9sdW1lIHx8IHN0b3JlZE11c2ljVm9sdW1lID09PSAnMCcpIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3ZhbC1taW5pLWdhbWVzLW11c2ljLXZvbHVtZScsICcwLjI1Jyk7XG4gICAgICB9XG4gICAgICBpZiAoIXN0b3JlZFNmeFZvbHVtZSB8fCBzdG9yZWRTZnhWb2x1bWUgPT09ICcwJykge1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndmFsLW1pbmktZ2FtZXMtc2Z4LXZvbHVtZScsICcwLjgnKTtcbiAgICAgIH1cbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKG1pZ3JhdGlvbktleSwgJzEnKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIGxvY2FsU3RvcmFnZSBwdWVkZSBubyBlc3RhciBkaXNwb25pYmxlIGVuIFNTUi90ZXN0cy5cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIGNhblBsYXlNdXNpYygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lbmFibGVkKCkgJiYgdGhpcy5tdXNpY0VuYWJsZWQoKSAmJiB0aGlzLm11c2ljVm9sdW1lKCkgPiAwO1xuICB9XG5cbiAgcHJpdmF0ZSBjYW5QbGF5U2Z4KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVuYWJsZWQoKSAmJiB0aGlzLnNmeEVuYWJsZWQoKSAmJiB0aGlzLnNmeFZvbHVtZSgpID4gMDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZW5zdXJlQ29udGV4dCgpOiBQcm9taXNlPEF1ZGlvQ29udGV4dD4ge1xuICAgIGlmICghdGhpcy5jb250ZXh0IHx8IHRoaXMuY29udGV4dC5zdGF0ZSA9PT0gJ2Nsb3NlZCcpIHtcbiAgICAgIHRoaXMuY29udGV4dCA9IG5ldyBBdWRpb0NvbnRleHQoKTtcbiAgICAgIHRoaXMubWFzdGVyR2FpbiA9IHRoaXMuY29udGV4dC5jcmVhdGVHYWluKCk7XG4gICAgICB0aGlzLm1hc3RlckdhaW4uZ2Fpbi52YWx1ZSA9IDE7XG4gICAgICB0aGlzLm1hc3RlckdhaW4uY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jb250ZXh0O1xuICB9XG5cbiAgcHJpdmF0ZSBtZW51TWVsb2R5KCk6IE5vdGVbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIFsyMjAsIDAuMzhdLFxuICAgICAgWzAsIDAuMTJdLFxuICAgICAgWzI2MS42MywgMC4zNF0sXG4gICAgICBbMzI5LjYzLCAwLjQyXSxcbiAgICAgIFsyOTMuNjYsIDAuMjhdLFxuICAgICAgWzAsIDAuMTJdLFxuICAgICAgWzM5MiwgMC40OF0sXG4gICAgICBbMzI5LjYzLCAwLjM0XSxcbiAgICAgIFsyNjEuNjMsIDAuMzZdLFxuICAgICAgWzIyMCwgMC41OF0sXG4gICAgICBbMCwgMC4yXSxcbiAgICAgIFsyOTMuNjYsIDAuMzRdLFxuICAgICAgWzMyOS42MywgMC40Ml0sXG4gICAgICBbNDQwLCAwLjVdLFxuICAgICAgWzM5MiwgMC4zNl0sXG4gICAgICBbMjYxLjYzLCAwLjYyXSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBzYXZhbm5hUHVsc2Uoc3RlcDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHN0ZXAgJSA0ID09PSAwKSB7XG4gICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMuc3dlZXAoOTYsIDQ4LCAwLjE4LCAnc2luZScsIDAuMDEyKSwgMTgpO1xuICAgIH1cbiAgICBpZiAoc3RlcCAlIDggPT09IDUpIHtcbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy50b25lKDE2NC44MSwgMC4wNDUsICd0cmlhbmdsZScsIDAuMDEyKSwgOTYpO1xuICAgIH1cbiAgICBpZiAoc3RlcCAlIDE2ID09PSAxMCkge1xuICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLnN3ZWVwKDE0Ni44MywgMTk2LCAwLjA4LCAndHJpYW5nbGUnLCAwLjAxKSwgMTQwKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdhbWVNZWxvZHkoKTogTm90ZVtdIHtcbiAgICByZXR1cm4gW1xuICAgICAgWzUyMy4yNSwgMC4xM10sXG4gICAgICBbNjU5LjI1LCAwLjEzXSxcbiAgICAgIFs3ODMuOTksIDAuMTNdLFxuICAgICAgWzEwNDYuNSwgMC4xOF0sXG4gICAgICBbNzgzLjk5LCAwLjEzXSxcbiAgICAgIFs2NTkuMjUsIDAuMTNdLFxuICAgICAgWzU4Ny4zMywgMC4xOF0sXG4gICAgICBbNjU5LjI1LCAwLjE4XSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZXF1ZW5jZShcbiAgICBub3RlczogTm90ZVtdLFxuICAgIHdhdmU6IE9zY2lsbGF0b3JUeXBlID0gJ3NxdWFyZScsXG4gICAgZ2FpbiA9IDAuMDU1LFxuICAgIGludGVydmFsTXMgPSA5MCxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmVuYWJsZWQoKSkgcmV0dXJuO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm90ZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGNvbnN0IFtmcmVxLCBkdXJhdGlvbl0gPSBub3Rlc1tpXTtcbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy50b25lKGZyZXEsIGR1cmF0aW9uLCB3YXZlLCBnYWluKSwgaSAqIGludGVydmFsTXMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc3RhcnRTYW1wbGVNdXNpYyhjb25maWc6IFNhbXBsZU11c2ljQ29uZmlnKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmNhblBsYXlNdXNpYygpKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLmlzRG9jdW1lbnRWaXNpYmxlKCkpIHtcbiAgICAgIHRoaXMucGF1c2VkU2FtcGxlTXVzaWMgPSBjb25maWc7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLnNhbXBsZU11c2ljQ29uZmlnPy5zcmMgPT09IGNvbmZpZy5zcmMgJiYgIXRoaXMuc2FtcGxlTXVzaWM/LnBhdXNlZCkgcmV0dXJuO1xuICAgIHRoaXMuc3RvcE11c2ljKCk7XG4gICAgaWYgKHR5cGVvZiBBdWRpbyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybjtcblxuICAgIGNvbnN0IGF1ZGlvID0gbmV3IEF1ZGlvKGNvbmZpZy5zcmMpO1xuICAgIGF1ZGlvLmxvb3AgPSB0cnVlO1xuICAgIGF1ZGlvLnByZWxvYWQgPSAnYXV0byc7XG4gICAgYXVkaW8udm9sdW1lID0gY29uZmlnLnZvbHVtZSAqIHRoaXMubXVzaWNWb2x1bWUoKTtcbiAgICB0aGlzLnNhbXBsZU11c2ljID0gYXVkaW87XG4gICAgdGhpcy5zYW1wbGVNdXNpY0NvbmZpZyA9IGNvbmZpZztcbiAgICB0cnkge1xuICAgICAgYXdhaXQgYXVkaW8ucGxheSgpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhpcy5wYXVzZWRTYW1wbGVNdXNpYyA9IGNvbmZpZztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0b3BTYW1wbGVNdXNpYygpOiB2b2lkIHtcbiAgICBjb25zdCBtdXNpYyA9IHRoaXMuc2FtcGxlTXVzaWM7XG4gICAgdGhpcy5zYW1wbGVNdXNpYyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnNhbXBsZU11c2ljQ29uZmlnID0gdW5kZWZpbmVkO1xuICAgIGlmICghbXVzaWMpIHJldHVybjtcbiAgICBtdXNpYy5wYXVzZSgpO1xuICAgIG11c2ljLmN1cnJlbnRUaW1lID0gMDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdG9uZShmcmVxOiBudW1iZXIsIGR1cmF0aW9uID0gMC4xLCB0eXBlOiBPc2NpbGxhdG9yVHlwZSA9ICdzcXVhcmUnLCBnYWluVmFsdWUgPSAwLjA0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmNhblBsYXlTZngoKSkgcmV0dXJuO1xuICAgIGlmIChmcmVxIDw9IDApIHJldHVybjtcbiAgICBjb25zdCBjdHggPSBhd2FpdCB0aGlzLndha2VBdWRpbygpO1xuICAgIGNvbnN0IG9zY2lsbGF0b3IgPSBjdHguY3JlYXRlT3NjaWxsYXRvcigpO1xuICAgIGNvbnN0IGdhaW4gPSBjdHguY3JlYXRlR2FpbigpO1xuICAgIG9zY2lsbGF0b3IudHlwZSA9IHR5cGU7XG4gICAgb3NjaWxsYXRvci5mcmVxdWVuY3kudmFsdWUgPSBmcmVxO1xuICAgIGdhaW4uZ2Fpbi5zZXRWYWx1ZUF0VGltZSgwLjAwMDEsIGN0eC5jdXJyZW50VGltZSk7XG4gICAgZ2Fpbi5nYWluLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUoZ2FpblZhbHVlICogdGhpcy5zZnhWb2x1bWUoKSwgY3R4LmN1cnJlbnRUaW1lICsgMC4wMSk7XG4gICAgZ2Fpbi5nYWluLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUoMC4wMDAxLCBjdHguY3VycmVudFRpbWUgKyBkdXJhdGlvbik7XG4gICAgb3NjaWxsYXRvci5jb25uZWN0KGdhaW4pO1xuICAgIGdhaW4uY29ubmVjdCh0aGlzLm1hc3RlckdhaW4gPz8gY3R4LmRlc3RpbmF0aW9uKTtcbiAgICBvc2NpbGxhdG9yLnN0YXJ0KCk7XG4gICAgb3NjaWxsYXRvci5zdG9wKGN0eC5jdXJyZW50VGltZSArIGR1cmF0aW9uICsgMC4wMik7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHN3ZWVwKFxuICAgIGZyb21GcmVxOiBudW1iZXIsXG4gICAgdG9GcmVxOiBudW1iZXIsXG4gICAgZHVyYXRpb24gPSAwLjE2LFxuICAgIHR5cGU6IE9zY2lsbGF0b3JUeXBlID0gJ3RyaWFuZ2xlJyxcbiAgICBnYWluVmFsdWUgPSAwLjAzLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuY2FuUGxheVNmeCgpKSByZXR1cm47XG4gICAgY29uc3QgY3R4ID0gYXdhaXQgdGhpcy53YWtlQXVkaW8oKTtcbiAgICBjb25zdCBvc2NpbGxhdG9yID0gY3R4LmNyZWF0ZU9zY2lsbGF0b3IoKTtcbiAgICBjb25zdCBnYWluID0gY3R4LmNyZWF0ZUdhaW4oKTtcbiAgICBvc2NpbGxhdG9yLnR5cGUgPSB0eXBlO1xuICAgIG9zY2lsbGF0b3IuZnJlcXVlbmN5LnNldFZhbHVlQXRUaW1lKGZyb21GcmVxLCBjdHguY3VycmVudFRpbWUpO1xuICAgIG9zY2lsbGF0b3IuZnJlcXVlbmN5LmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUoTWF0aC5tYXgoMSwgdG9GcmVxKSwgY3R4LmN1cnJlbnRUaW1lICsgZHVyYXRpb24pO1xuICAgIGdhaW4uZ2Fpbi5zZXRWYWx1ZUF0VGltZSgwLjAwMDEsIGN0eC5jdXJyZW50VGltZSk7XG4gICAgZ2Fpbi5nYWluLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUoZ2FpblZhbHVlICogdGhpcy5zZnhWb2x1bWUoKSwgY3R4LmN1cnJlbnRUaW1lICsgMC4wMSk7XG4gICAgZ2Fpbi5nYWluLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUoMC4wMDAxLCBjdHguY3VycmVudFRpbWUgKyBkdXJhdGlvbik7XG4gICAgb3NjaWxsYXRvci5jb25uZWN0KGdhaW4pO1xuICAgIGdhaW4uY29ubmVjdCh0aGlzLm1hc3RlckdhaW4gPz8gY3R4LmRlc3RpbmF0aW9uKTtcbiAgICBvc2NpbGxhdG9yLnN0YXJ0KCk7XG4gICAgb3NjaWxsYXRvci5zdG9wKGN0eC5jdXJyZW50VGltZSArIGR1cmF0aW9uICsgMC4wMik7XG4gIH1cblxuICAvLyBDaGVzc2ltYWxzIHVzZXMgZ2VuZXJhdGVkIFdlYkF1ZGlvIGxheWVycyBpbnN0ZWFkIG9mIHRoaXJkLXBhcnR5IHNhbXBsZXMsXG4gIC8vIGF2b2lkaW5nIGxpY2Vuc2luZyByaXNrIHdoaWxlIGtlZXBpbmcgZWFjaCBhbmltYWwgcG93ZXIgZXhwcmVzc2l2ZS5cbiAgcHJpdmF0ZSBhc3luYyBmaWx0ZXJlZE5vaXNlKFxuICAgIGR1cmF0aW9uID0gMC4xMixcbiAgICBnYWluVmFsdWUgPSAwLjAyNSxcbiAgICBmaWx0ZXJUeXBlOiBCaXF1YWRGaWx0ZXJUeXBlID0gJ2JhbmRwYXNzJyxcbiAgICBmcmVxdWVuY3kgPSA5MDAsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5jYW5QbGF5U2Z4KCkpIHJldHVybjtcbiAgICBjb25zdCBjdHggPSBhd2FpdCB0aGlzLndha2VBdWRpbygpO1xuICAgIGNvbnN0IHNhbXBsZUNvdW50ID0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcihjdHguc2FtcGxlUmF0ZSAqIGR1cmF0aW9uKSk7XG4gICAgY29uc3QgYnVmZmVyID0gY3R4LmNyZWF0ZUJ1ZmZlcigxLCBzYW1wbGVDb3VudCwgY3R4LnNhbXBsZVJhdGUpO1xuICAgIGNvbnN0IGNoYW5uZWwgPSBidWZmZXIuZ2V0Q2hhbm5lbERhdGEoMCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzYW1wbGVDb3VudDsgaSArPSAxKSB7XG4gICAgICBjb25zdCBkZWNheSA9IDEgLSBpIC8gc2FtcGxlQ291bnQ7XG4gICAgICBjaGFubmVsW2ldID0gKE1hdGgucmFuZG9tKCkgKiAyIC0gMSkgKiBkZWNheTtcbiAgICB9XG5cbiAgICBjb25zdCBzb3VyY2UgPSBjdHguY3JlYXRlQnVmZmVyU291cmNlKCk7XG4gICAgY29uc3QgZmlsdGVyID0gY3R4LmNyZWF0ZUJpcXVhZEZpbHRlcigpO1xuICAgIGNvbnN0IGdhaW4gPSBjdHguY3JlYXRlR2FpbigpO1xuICAgIGZpbHRlci50eXBlID0gZmlsdGVyVHlwZTtcbiAgICBmaWx0ZXIuZnJlcXVlbmN5LnZhbHVlID0gZnJlcXVlbmN5O1xuICAgIGZpbHRlci5RLnZhbHVlID0gZmlsdGVyVHlwZSA9PT0gJ2xvd3Bhc3MnID8gMC43IDogMS44O1xuICAgIGdhaW4uZ2Fpbi5zZXRWYWx1ZUF0VGltZSgwLjAwMDEsIGN0eC5jdXJyZW50VGltZSk7XG4gICAgZ2Fpbi5nYWluLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUoZ2FpblZhbHVlICogdGhpcy5zZnhWb2x1bWUoKSwgY3R4LmN1cnJlbnRUaW1lICsgMC4wMTIpO1xuICAgIGdhaW4uZ2Fpbi5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKDAuMDAwMSwgY3R4LmN1cnJlbnRUaW1lICsgZHVyYXRpb24pO1xuICAgIHNvdXJjZS5idWZmZXIgPSBidWZmZXI7XG4gICAgc291cmNlLmNvbm5lY3QoZmlsdGVyKTtcbiAgICBmaWx0ZXIuY29ubmVjdChnYWluKTtcbiAgICBnYWluLmNvbm5lY3QodGhpcy5tYXN0ZXJHYWluID8/IGN0eC5kZXN0aW5hdGlvbik7XG4gICAgc291cmNlLnN0YXJ0KCk7XG4gICAgc291cmNlLnN0b3AoY3R4LmN1cnJlbnRUaW1lICsgZHVyYXRpb24gKyAwLjAyKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSA9ICgpOiB2b2lkID0+IHtcbiAgICBpZiAoZG9jdW1lbnQuaGlkZGVuKSB7XG4gICAgICB0aGlzLnBhdXNlRm9yQmFja2dyb3VuZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2b2lkIHRoaXMucmVzdW1lRnJvbUJhY2tncm91bmQoKTtcbiAgfTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGhhbmRsZVBhZ2VIaWRlID0gKCk6IHZvaWQgPT4ge1xuICAgIHRoaXMucGF1c2VGb3JCYWNrZ3JvdW5kKCk7XG4gIH07XG5cbiAgcHJpdmF0ZSByZWFkb25seSBoYW5kbGVQYWdlU2hvdyA9ICgpOiB2b2lkID0+IHtcbiAgICB2b2lkIHRoaXMucmVzdW1lRnJvbUJhY2tncm91bmQoKTtcbiAgfTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGhhbmRsZVVzZXJBY3RpdmF0aW9uID0gKCk6IHZvaWQgPT4ge1xuICAgIGlmICghdGhpcy5lbmFibGVkKCkgfHwgIXRoaXMuaXNEb2N1bWVudFZpc2libGUoKSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLnBhdXNlZFNhbXBsZU11c2ljKSB7XG4gICAgICB2b2lkIHRoaXMucmVzdW1lRnJvbUJhY2tncm91bmQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdm9pZCB0aGlzLndha2VBdWRpbygpO1xuICB9O1xuXG4gIHByaXZhdGUgcGF1c2VGb3JCYWNrZ3JvdW5kKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmFjdGl2ZU1lbG9keSkgdGhpcy5wYXVzZWRNZWxvZHkgPSB0aGlzLmFjdGl2ZU1lbG9keTtcbiAgICBpZiAodGhpcy5zYW1wbGVNdXNpYyAmJiB0aGlzLnNhbXBsZU11c2ljQ29uZmlnKSB7XG4gICAgICB0aGlzLnBhdXNlZFNhbXBsZU11c2ljID0gdGhpcy5zYW1wbGVNdXNpY0NvbmZpZztcbiAgICAgIHRoaXMuc3RvcFNhbXBsZU11c2ljKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLm11c2ljVGltZXIpIHtcbiAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKHRoaXMubXVzaWNUaW1lcik7XG4gICAgICB0aGlzLm11c2ljVGltZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRoaXMuYWN0aXZlTWVsb2R5ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZmFkZU1hc3RlclRvKDAuMDAwMSwgMC4yKTtcbiAgICBpZiAodGhpcy5zdXNwZW5kVGltZXIpIHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5zdXNwZW5kVGltZXIpO1xuICAgIHRoaXMuc3VzcGVuZFRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zdXNwZW5kVGltZXIgPSB1bmRlZmluZWQ7XG4gICAgICB2b2lkIHRoaXMuY29udGV4dD8uc3VzcGVuZCgpLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XG4gICAgfSwgMjYwKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVzdW1lRnJvbUJhY2tncm91bmQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuc3VzcGVuZFRpbWVyKSB7XG4gICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuc3VzcGVuZFRpbWVyKTtcbiAgICAgIHRoaXMuc3VzcGVuZFRpbWVyID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuZW5hYmxlZCgpKSByZXR1cm47XG4gICAgY29uc3Qgc2FtcGxlTXVzaWMgPSB0aGlzLnBhdXNlZFNhbXBsZU11c2ljO1xuICAgIGlmIChzYW1wbGVNdXNpYykge1xuICAgICAgdGhpcy5wYXVzZWRTYW1wbGVNdXNpYyA9IHVuZGVmaW5lZDtcbiAgICAgIGF3YWl0IHRoaXMuc3RhcnRTYW1wbGVNdXNpYyhzYW1wbGVNdXNpYyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG1lbG9keSA9IHRoaXMucGF1c2VkTWVsb2R5O1xuICAgIGlmICghbWVsb2R5KSByZXR1cm47XG4gICAgdGhpcy5wYXVzZWRNZWxvZHkgPSB1bmRlZmluZWQ7XG4gICAgY29uc3QgY3R4ID0gYXdhaXQgdGhpcy5lbnN1cmVDb250ZXh0KCk7XG4gICAgYXdhaXQgdGhpcy5yZXN1bWVDb250ZXh0KGN0eCk7XG4gICAgdGhpcy5mYWRlTWFzdGVyVG8oMSwgMC4zNSk7XG4gICAgYXdhaXQgdGhpcy5zdGFydE11c2ljKG1lbG9keSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHdha2VBdWRpbygpOiBQcm9taXNlPEF1ZGlvQ29udGV4dD4ge1xuICAgIGNvbnN0IGN0eCA9IGF3YWl0IHRoaXMuZW5zdXJlQ29udGV4dCgpO1xuICAgIGF3YWl0IHRoaXMucmVzdW1lQ29udGV4dChjdHgpO1xuICAgIHRoaXMuZmFkZU1hc3RlclRvKDEsIDAuMTIpO1xuICAgIHJldHVybiBjdHg7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlc3VtZUNvbnRleHQoY3R4OiBBdWRpb0NvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoY3R4LnN0YXRlID09PSAncnVubmluZycpIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgY3R4LnJlc3VtZSgpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gaU9TIHB1ZWRlIGV4aWdpciB1bmEgbnVldmEgaW50ZXJhY2Npw7NuIGRlbCB1c3VhcmlvOyBlbCBsaXN0ZW5lciBkZSBhY3RpdmFjacOzbiByZWludGVudGFyw6EuXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmYWRlTWFzdGVyVG8odmFsdWU6IG51bWJlciwgc2Vjb25kczogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNvbnRleHQgfHwgIXRoaXMubWFzdGVyR2FpbikgcmV0dXJuO1xuICAgIGNvbnN0IGdhaW4gPSB0aGlzLm1hc3RlckdhaW4uZ2FpbjtcbiAgICBjb25zdCBub3cgPSB0aGlzLmNvbnRleHQuY3VycmVudFRpbWU7XG4gICAgZ2Fpbi5jYW5jZWxTY2hlZHVsZWRWYWx1ZXMobm93KTtcbiAgICBnYWluLnNldFRhcmdldEF0VGltZSh2YWx1ZSwgbm93LCBNYXRoLm1heCgwLjAxLCBzZWNvbmRzIC8gNCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0RvY3VtZW50VmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJyB8fCAhZG9jdW1lbnQuaGlkZGVuO1xuICB9XG59XG4iXX0=
@@ -2,5 +2,5 @@
2
2
  * Current version of valtech-components.
3
3
  * This is automatically updated during the publish process.
4
4
  */
5
- export const VERSION = '4.0.406';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXJyZW50IHZlcnNpb24gb2YgdmFsdGVjaC1jb21wb25lbnRzLlxuICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIHRoZSBwdWJsaXNoIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuMC40MDYnO1xuIl19
5
+ export const VERSION = '4.0.407';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXJyZW50IHZlcnNpb24gb2YgdmFsdGVjaC1jb21wb25lbnRzLlxuICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIHRoZSBwdWJsaXNoIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuMC40MDcnO1xuIl19