raain-app 1.6.17 → 1.6.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -7,7 +7,25 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
- ## [1.6.16] - 2025-12-03
10
+ ## [1.6.18] - 2025-12-08
11
+
12
+ ### Added
13
+
14
+ - Visible pixel markers toggle feature on rain map
15
+ - `showVisiblePixelMarkers` input and `onTogglePixelMarkers()` in raain-details
16
+
17
+ ### Changed
18
+
19
+ - Default map alpha opacity from 0 to 0.4
20
+ - Sum display format: now shows total first with average details
21
+ - Added `moveend` event listener for map marker updates
22
+
23
+ ### Dependencies
24
+
25
+ - Updated raain-model from ~3.1.9 to ~3.1.10
26
+ - Updated raain-ui from ~2.3.24 to ~2.3.25
27
+
28
+ ## [1.6.17] - 2025-12-05
11
29
 
12
30
  ### Changed
13
31
 
@@ -25,18 +25,6 @@ export class ProfileIconDirective {
25
25
  const button = document.createElement('ion-button');
26
26
  // Store references for later use
27
27
  this.profileButton = button;
28
- // Create the skeleton text element (hidden initially)
29
- const skeleton = document.createElement('ion-skeleton-text');
30
- skeleton.setAttribute('animated', 'true');
31
- skeleton.style.width = '100px';
32
- skeleton.style.height = '20px';
33
- skeleton.style.borderRadius = '4px';
34
- skeleton.style.margin = '8px 16px';
35
- skeleton.style.display = 'none';
36
- // Store reference to the skeleton text
37
- this.skeletonText = skeleton;
38
- // Add the skeleton text to the buttons container
39
- profileButtons.appendChild(skeleton);
40
28
  // Create the icon
41
29
  const icon = document.createElement('ion-icon');
42
30
  icon.setAttribute('name', 'person-circle-outline');
@@ -78,15 +66,14 @@ export class ProfileIconDirective {
78
66
  this.performConnectionRefresh();
79
67
  }
80
68
  showSkeletonText() {
81
- if (this.skeletonText && this.profileButton) {
82
- this.profileButton.style.display = 'none';
83
- this.skeletonText.style.display = 'block';
69
+ if (this.profileButton) {
70
+ this.profileButton.style.opacity = '0.7';
71
+ this.profileButton.style.transition = 'opacity 0.3s ease';
84
72
  }
85
73
  }
86
74
  hideSkeletonText() {
87
- if (this.skeletonText && this.profileButton) {
88
- this.profileButton.style.display = 'flex';
89
- this.skeletonText.style.display = 'none';
75
+ if (this.profileButton) {
76
+ this.profileButton.style.opacity = '1';
90
77
  }
91
78
  }
92
79
  async performConnectionRefresh() {
@@ -96,7 +83,9 @@ export class ProfileIconDirective {
96
83
  this.isConnected = await this.profileService.isConnected();
97
84
  if (this.isConnected) {
98
85
  // Call the refresh function
99
- if (this.profileService.needsConnectionRefresh()) {
86
+ const needsConnectionRefresh = this.profileService.needsConnectionRefresh();
87
+ const isLoggedIn = this.profileService.isLoggedIn();
88
+ if (needsConnectionRefresh || !isLoggedIn) {
100
89
  await this.profileService.connectionRefresh();
101
90
  }
102
91
  await sleep(1000);
@@ -140,4 +129,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
140
129
  selector: 'ion-toolbar',
141
130
  }]
142
131
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.ProfileService }, { type: i2.Router }]; } });
143
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZS1pY29uLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL3NoYXJlZC9wcm9maWxlLWljb24uZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQWdDLE1BQU0sZUFBZSxDQUFDOzs7O0FBSXZFLDBFQUEwRTtBQUMxRSxTQUFTLEtBQUssQ0FBQyxFQUFVO0lBQ3JCLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3RCxDQUFDO0FBS0QsTUFBTSxPQUFPLG9CQUFvQjtJQU03QixZQUNZLEVBQWMsRUFDZCxjQUE4QixFQUM5QixNQUFjO1FBRmQsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUNkLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBTGxCLGdCQUFXLEdBQVksSUFBSSxDQUFDO0lBTWpDLENBQUM7SUFFSixRQUFRO1FBQ0osMEVBQTBFO1FBQzFFLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRTtZQUMzRCx5Q0FBeUM7WUFDekMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUU3QyxvQ0FBb0M7WUFDcEMsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUM3RCxjQUFjLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztZQUUvQyxvQkFBb0I7WUFDcEIsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUVwRCxpQ0FBaUM7WUFDakMsSUFBSSxDQUFDLGFBQWEs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QUFDO2FBQ25GO1NBQ0o7SUFDTCxDQUFDO0lBRUQsMERBQTBEO0lBQ2xELGFBQWE7UUFDakIsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDO1FBRWpELGlFQUFpRTtRQUNqRSxPQUFPLE1BQU0sRUFBRTtZQUNYLElBQUksTUFBTSxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxLQUFLLFdBQVcsRUFBRTtnQkFDaEUsT0FBTyxJQUFJLENBQUM7YUFDZjtZQUNELE1BQU0sR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDO1NBQ2pDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQzs7a0hBM0pRLG9CQUFvQjtzR0FBcEIsb0JBQW9COzRGQUFwQixvQkFBb0I7a0JBSGhDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGFBQWE7aUJBQzFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7UHJvZmlsZVNlcnZpY2V9IGZyb20gJy4vcHJvZmlsZS5zZXJ2aWNlJztcbmltcG9ydCB7Um91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gcGF1c2UgZXhlY3V0aW9uIGZvciBhIHNwZWNpZmllZCB0aW1lIGluIG1pbGxpc2Vjb25kc1xuZnVuY3Rpb24gc2xlZXAobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xufVxuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ2lvbi10b29sYmFyJyxcbn0pXG5leHBvcnQgY2xhc3MgUHJvZmlsZUljb25EaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgcHJpdmF0ZSByZWZyZXNoVGltZXI6IGFueTtcbiAgICBwcml2YXRlIHByb2ZpbGVCdXR0b246IEhUTUxFbGVtZW50O1xuICAgIHByaXZhdGUgc2tlbGV0b25UZXh0OiBIVE1MRWxlbWVudDtcbiAgICBwcml2YXRlIGlzQ29ubmVjdGVkOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIHByb2ZpbGVTZXJ2aWNlOiBQcm9maWxlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlclxuICAgICkge31cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUgdXNlciBpcyBsb2dnZWQgaW4gYW5kIGlmIHRoZSB0b29sYmFyIGlzIG5vdCBpbnNpZGUgYSBtb2RhbFxuICAgICAgICBpZiAodGhpcy5wcm9maWxlU2VydmljZS5pc0xvZ2dlZEluKCkgJiYgIXRoaXMuaXNJbnNpZGVNb2RhbCgpKSB7XG4gICAgICAgICAgICAvLyBHZXQgdGhlIGVtYWlsIGZyb20gdGhlIHByb2ZpbGUgc2VydmljZVxuICAgICAgICAgICAgY29uc3QgZW1haWwgPSB0aGlzLnByb2ZpbGVTZXJ2aWNlLmdldEVtYWlsKCk7XG5cbiAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgcHJvZmlsZSBidXR0b24gZWxlbWVudFxuICAgICAgICAgICAgY29uc3QgcHJvZmlsZUJ1dHRvbnMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpb24tYnV0dG9ucycpO1xuICAgICAgICAgICAgcHJvZmlsZUJ1dHRvbnMuc2V0QXR0cmlidXRlKCdzbG90JywgJ3ByaW1hcnknKTtcblxuICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSBidXR0b25cbiAgICAgICAgICAgIGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lvbi1idXR0b24nKTtcblxuICAgICAgICAgICAgLy8gU3RvcmUgcmVmZXJlbmNlcyBmb3IgbGF0ZXIgdXNlXG4gICAgICAgICAgICB0aGlzLnByb2ZpbGVCdXR0b24gPSBidXR0b247XG5cbiAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgc2tlbGV0b24gdGV4dCBlbGVtZW50IChoaWRkZW4gaW5pdGlhbGx5KVxuICAgICAgICAgICAgY29uc3Qgc2tlbGV0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpb24tc2tlbGV0b24tdGV4dCcpO1xuICAgICAgICAgICAgc2tlbGV0b24uc2V0QXR0cmlidXRlKCdhbmltYXRlZCcsICd0cnVlJyk7XG4gICAgICAgICAgICBza2VsZXRvbi5zdHlsZS53aWR0aCA9ICcxMDBweCc7XG4gICAgICAgICAgICBza2VsZXRvbi5zdHlsZS5oZWlnaHQgPSAnMjBweCc7XG4gICAgICAgICAgICBza2VsZXRvbi5zdHlsZS5ib3JkZXJSYWRpdXMgPSAnNHB4JztcbiAgICAgICAgICAgIHNrZWxldG9uLnN0eWxlLm1hcmdpbiA9ICc4cHggMTZweCc7XG4gICAgICAgICAgICBza2VsZXRvbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuXG4gICAgICAgICAgICAvLyBTdG9yZSByZWZlcmVuY2UgdG8gdGhlIHNrZWxldG9uIHRleHRcbiAgICAgICAgICAgIHRoaXMuc2tlbGV0b25UZXh0ID0gc2tlbGV0b247XG5cbiAgICAgICAgICAgIC8vIEFkZCB0aGUgc2tlbGV0b24gdGV4dCB0byB0aGUgYnV0dG9ucyBjb250YWluZXJcbiAgICAgICAgICAgIHByb2ZpbGVCdXR0b25zLmFwcGVuZENoaWxkKHNrZWxldG9uKTtcblxuICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSBpY29uXG4gICAgICAgICAgICBjb25zdCBpY29uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW9uLWljb24nKTtcbiAgICAgICAgICAgIGljb24uc2V0QXR0cmlidXRlKCduYW1lJywgJ3BlcnNvbi1jaXJjbGUtb3V0bGluZScpO1xuICAgICAgICAgICAgaWNvbi5zZXRBdHRyaWJ1dGUoJ3Nsb3QnLCAnc3RhcnQnKTtcblxuICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSBsYWJlbFxuICAgICAgICAgICAgY29uc3QgbGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpb24tbGFiZWwnKTtcbiAgICAgICAgICAgIGxhYmVsLnRleHRDb250ZW50ID0gZW1haWw7XG5cbiAgICAgICAgICAgIC8vIEFzc2VtYmxlIHRoZSBidXR0b25cbiAgICAgICAgICAgIGJ1dHRvbi5hcHBlbmRDaGlsZChpY29uKTtcbiAgICAgICAgICAgIGJ1dHRvbi5hcHBlbmRDaGlsZChsYWJlbCk7XG5cbiAgICAgICAgICAgIC8vIEFkZCBjbGljayBldmVudCBsaXN0ZW5lciB0byB0aGUgYnV0dG9uXG4gICAgICAgICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvUHJvZmlsZSgpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIEFzc2VtYmxlIHRoZSBidXR0b25zIGNvbnRhaW5lclxuICAgICAgICAgICAgcHJvZmlsZUJ1dHRvbnMuYXBwZW5kQ2hpbGQoYnV0dG9uKTtcblxuICAgICAgICAgICAgLy8gQXBwZW5kIHRoZSBidXR0b25zIHRvIHRoZSB0b29sYmFyXG4gICAgICAgICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQocHJvZmlsZUJ1dHRvbnMpO1xuXG4gICAgICAgICAgICAvLyBTdGFydCB0aGUgYmFja2dyb3VuZCByZWZyZXNoIHRpbWVyIChjaGVjayBldmVyeSBtaW51dGUpXG4gICAgICAgICAgICB0aGlzLnN0YXJ0QmFja2dyb3VuZFJlZnJlc2goKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICAvLyBDbGVhciB0aGUgdGltZXIgd2hlbiB0aGUgZGlyZWN0aXZlIGlzIGRlc3Ryb3llZFxuICAgICAgICBpZiAodGhpcy5yZWZyZXNoVGltZXIpIHtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5yZWZyZXNoVGltZXIpO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoVGltZXIgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmF2aWdhdGVUb1Byb2ZpbGUoKSB7XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy9wcm9maWxlJyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGFydEJhY2tncm91bmRSZWZyZXNoKCkge1xuICAgICAgICB0aGlzLnJlZnJlc2hUaW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tBbmRSZWZyZXNoQ29ubmVjdGlvbigpO1xuICAgICAgICB9LCAyMDAwMCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGVja0FuZFJlZnJlc2hDb25uZWN0aW9uKCkge1xuICAgICAgICB0aGlzLnBlcmZvcm1Db25uZWN0aW9uUmVmcmVzaCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2hvd1NrZWxldG9uVGV4dCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc2tlbGV0b25UZXh0ICYmIHRoaXMucHJvZmlsZUJ1dHRvbikge1xuICAgICAgICAgICAgdGhpcy5wcm9maWxlQnV0dG9uLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICB0aGlzLnNrZWxldG9uVGV4dC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaGlkZVNrZWxldG9uVGV4dCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc2tlbGV0b25UZXh0ICYmIHRoaXMucHJvZmlsZUJ1dHRvbikge1xuICAgICAgICAgICAgdGhpcy5wcm9maWxlQnV0dG9uLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgICAgICAgICB0aGlzLnNrZWxldG9uVGV4dC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBwZXJmb3JtQ29ubmVjdGlvblJlZnJlc2goKSB7XG4gICAgICAgIC8vIFNob3cgc2tlbGV0b24gdGV4dCBhbmQgaGlkZSBidXR0b24gZHVyaW5nIGxvYWRpbmdcbiAgICAgICAgdGhpcy5zaG93U2tlbGV0b25UZXh0KCk7XG5cbiAgICAgICAgLy8gQ29ubmVjdGlvbiBzdWNjZXNzZnVsXG4gICAgICAgIHRoaXMuaXNDb25uZWN0ZWQgPSBhd2FpdCB0aGlzLnByb2ZpbGVTZXJ2aWNlLmlzQ29ubmVjdGVkKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNDb25uZWN0ZWQpIHtcbiAgICAgICAgICAgIC8vIENhbGwgdGhlIHJlZnJlc2ggZnVuY3Rpb25cbiAgICAgICAgICAgIGlmICh0aGlzLnByb2ZpbGVTZXJ2aWNlLm5lZWRzQ29ubmVjdGlvblJlZnJlc2goKSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucHJvZmlsZVNlcnZpY2UuY29ubmVjdGlvblJlZnJlc2goKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IHNsZWVwKDEwMDApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlQnV0dG9uU3RhdGUoKTtcblxuICAgICAgICAvLyBIaWRlIHNrZWxldG9uIHRleHQgYW5kIHNob3cgYnV0dG9uIHdoZW4gbG9hZGluZyBpcyBjb21wbGV0ZVxuICAgICAgICB0aGlzLmhpZGVTa2VsZXRvblRleHQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUJ1dHRvblN0YXRlKCkge1xuICAgICAgICBpZiAodGhpcy5wcm9maWxlQnV0dG9uKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0Nvbm5lY3RlZCkge1xuICAgICAgICAgICAgICAgIC8vIEVuYWJsZSBidXR0b25cbiAgICAgICAgICAgICAgICB0aGlzLnByb2ZpbGVCdXR0b24ucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xuICAgICAgICAgICAgICAgIHRoaXMucHJvZmlsZUJ1dHRvbi5yZW1vdmVBdHRyaWJ1dGUoJ3RpdGxlJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIERpc2FibGUgYnV0dG9uIGFuZCBhZGQgdG9vbHRpcFxuICAgICAgICAgICAgICAgIHRoaXMucHJvZmlsZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgJ3RydWUnKTtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2ZpbGVCdXR0b24uc2V0QXR0cmlidXRlKCd0aXRsZScsICdQcm9maWxlIHVuYXZhaWxhYmxlIC0gTm8gY29ubmVjdGlvbicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gSGVscGVyIG1ldGhvZCB0byBjaGVjayBpZiB0aGUgdG9vbGJhciBpcyBpbnNpZGUgYSBtb2RhbFxuICAgIHByaXZhdGUgaXNJbnNpZGVNb2RhbCgpOiBib29sZWFuIHtcbiAgICAgICAgbGV0IHBhcmVudCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50O1xuXG4gICAgICAgIC8vIFRyYXZlcnNlIHVwIHRoZSBET00gdHJlZSB0byBmaW5kIGlmIGFueSBwYXJlbnQgaXMgYW4gaW9uLW1vZGFsXG4gICAgICAgIHdoaWxlIChwYXJlbnQpIHtcbiAgICAgICAgICAgIGlmIChwYXJlbnQudGFnTmFtZSAmJiBwYXJlbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaW9uLW1vZGFsJykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuIl19
132
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZS1pY29uLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL3NoYXJlZC9wcm9maWxlLWljb24uZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQWdDLE1BQU0sZUFBZSxDQUFDOzs7O0FBSXZFLDBFQUEwRTtBQUMxRSxTQUFTLEtBQUssQ0FBQyxFQUFVO0lBQ3JCLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3RCxDQUFDO0FBS0QsTUFBTSxPQUFPLG9CQUFvQjtJQUs3QixZQUNZLEVBQWMsRUFDZCxjQUE4QixFQUM5QixNQUFjO1FBRmQsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUNkLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBTGxCLGdCQUFXLEdBQVksSUFBSSxDQUFDO0lBTWpDLENBQUM7SUFFSixRQUFRO1FBQ0osMEVBQTBFO1FBQzFFLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRTtZQUMzRCx5Q0FBeUM7WUFDekMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUU3QyxvQ0FBb0M7WUFDcEMsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUM3RCxjQUFjLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztZQUUvQyxvQkFBb0I7WUFDcEIsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUVwRCxpQ0FBaUM7WUFDakMsSUFBSSxDQUFDLGFBQWEs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LCBFbGVtZW50UmVmLCBPbkRlc3Ryb3ksIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1Byb2ZpbGVTZXJ2aWNlfSBmcm9tICcuL3Byb2ZpbGUuc2VydmljZSc7XG5pbXBvcnQge1JvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHBhdXNlIGV4ZWN1dGlvbiBmb3IgYSBzcGVjaWZpZWQgdGltZSBpbiBtaWxsaXNlY29uZHNcbmZ1bmN0aW9uIHNsZWVwKG1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbn1cblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdpb24tdG9vbGJhcicsXG59KVxuZXhwb3J0IGNsYXNzIFByb2ZpbGVJY29uRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIHByaXZhdGUgcmVmcmVzaFRpbWVyOiBhbnk7XG4gICAgcHJpdmF0ZSBwcm9maWxlQnV0dG9uOiBIVE1MRWxlbWVudDtcbiAgICBwcml2YXRlIGlzQ29ubmVjdGVkOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIHByb2ZpbGVTZXJ2aWNlOiBQcm9maWxlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlclxuICAgICkge31cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUgdXNlciBpcyBsb2dnZWQgaW4gYW5kIGlmIHRoZSB0b29sYmFyIGlzIG5vdCBpbnNpZGUgYSBtb2RhbFxuICAgICAgICBpZiAodGhpcy5wcm9maWxlU2VydmljZS5pc0xvZ2dlZEluKCkgJiYgIXRoaXMuaXNJbnNpZGVNb2RhbCgpKSB7XG4gICAgICAgICAgICAvLyBHZXQgdGhlIGVtYWlsIGZyb20gdGhlIHByb2ZpbGUgc2VydmljZVxuICAgICAgICAgICAgY29uc3QgZW1haWwgPSB0aGlzLnByb2ZpbGVTZXJ2aWNlLmdldEVtYWlsKCk7XG5cbiAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgcHJvZmlsZSBidXR0b24gZWxlbWVudFxuICAgICAgICAgICAgY29uc3QgcHJvZmlsZUJ1dHRvbnMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpb24tYnV0dG9ucycpO1xuICAgICAgICAgICAgcHJvZmlsZUJ1dHRvbnMuc2V0QXR0cmlidXRlKCdzbG90JywgJ3ByaW1hcnknKTtcblxuICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSBidXR0b25cbiAgICAgICAgICAgIGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lvbi1idXR0b24nKTtcblxuICAgICAgICAgICAgLy8gU3RvcmUgcmVmZXJlbmNlcyBmb3IgbGF0ZXIgdXNlXG4gICAgICAgICAgICB0aGlzLnByb2ZpbGVCdXR0b24gPSBidXR0b247XG5cbiAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgaWNvblxuICAgICAgICAgICAgY29uc3QgaWNvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lvbi1pY29uJyk7XG4gICAgICAgICAgICBpY29uLnNldEF0dHJpYnV0ZSgnbmFtZScsICdwZXJzb24tY2lyY2xlLW91dGxpbmUnKTtcbiAgICAgICAgICAgIGljb24uc2V0QXR0cmlidXRlKCdzbG90JywgJ3N0YXJ0Jyk7XG5cbiAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgbGFiZWxcbiAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW9uLWxhYmVsJyk7XG4gICAgICAgICAgICBsYWJlbC50ZXh0Q29udGVudCA9IGVtYWlsO1xuXG4gICAgICAgICAgICAvLyBBc3NlbWJsZSB0aGUgYnV0dG9uXG4gICAgICAgICAgICBidXR0b24uYXBwZW5kQ2hpbGQoaWNvbik7XG4gICAgICAgICAgICBidXR0b24uYXBwZW5kQ2hpbGQobGFiZWwpO1xuXG4gICAgICAgICAgICAvLyBBZGQgY2xpY2sgZXZlbnQgbGlzdGVuZXIgdG8gdGhlIGJ1dHRvblxuICAgICAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGVUb1Byb2ZpbGUoKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBBc3NlbWJsZSB0aGUgYnV0dG9ucyBjb250YWluZXJcbiAgICAgICAgICAgIHByb2ZpbGVCdXR0b25zLmFwcGVuZENoaWxkKGJ1dHRvbik7XG5cbiAgICAgICAgICAgIC8vIEFwcGVuZCB0aGUgYnV0dG9ucyB0byB0aGUgdG9vbGJhclxuICAgICAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKHByb2ZpbGVCdXR0b25zKTtcblxuICAgICAgICAgICAgLy8gU3RhcnQgdGhlIGJhY2tncm91bmQgcmVmcmVzaCB0aW1lciAoY2hlY2sgZXZlcnkgbWludXRlKVxuICAgICAgICAgICAgdGhpcy5zdGFydEJhY2tncm91bmRSZWZyZXNoKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgLy8gQ2xlYXIgdGhlIHRpbWVyIHdoZW4gdGhlIGRpcmVjdGl2ZSBpcyBkZXN0cm95ZWRcbiAgICAgICAgaWYgKHRoaXMucmVmcmVzaFRpbWVyKSB7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMucmVmcmVzaFRpbWVyKTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaFRpbWVyID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5hdmlnYXRlVG9Qcm9maWxlKCkge1xuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCcvcHJvZmlsZScpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhcnRCYWNrZ3JvdW5kUmVmcmVzaCgpIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoVGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrQW5kUmVmcmVzaENvbm5lY3Rpb24oKTtcbiAgICAgICAgfSwgMjAwMDApO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2hlY2tBbmRSZWZyZXNoQ29ubmVjdGlvbigpIHtcbiAgICAgICAgdGhpcy5wZXJmb3JtQ29ubmVjdGlvblJlZnJlc2goKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNob3dTa2VsZXRvblRleHQoKSB7XG4gICAgICAgIGlmICh0aGlzLnByb2ZpbGVCdXR0b24pIHtcbiAgICAgICAgICAgIHRoaXMucHJvZmlsZUJ1dHRvbi5zdHlsZS5vcGFjaXR5ID0gJzAuNyc7XG4gICAgICAgICAgICB0aGlzLnByb2ZpbGVCdXR0b24uc3R5bGUudHJhbnNpdGlvbiA9ICdvcGFjaXR5IDAuM3MgZWFzZSc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhpZGVTa2VsZXRvblRleHQoKSB7XG4gICAgICAgIGlmICh0aGlzLnByb2ZpbGVCdXR0b24pIHtcbiAgICAgICAgICAgIHRoaXMucHJvZmlsZUJ1dHRvbi5zdHlsZS5vcGFjaXR5ID0gJzEnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBwZXJmb3JtQ29ubmVjdGlvblJlZnJlc2goKSB7XG4gICAgICAgIC8vIFNob3cgc2tlbGV0b24gdGV4dCBhbmQgaGlkZSBidXR0b24gZHVyaW5nIGxvYWRpbmdcbiAgICAgICAgdGhpcy5zaG93U2tlbGV0b25UZXh0KCk7XG5cbiAgICAgICAgLy8gQ29ubmVjdGlvbiBzdWNjZXNzZnVsXG4gICAgICAgIHRoaXMuaXNDb25uZWN0ZWQgPSBhd2FpdCB0aGlzLnByb2ZpbGVTZXJ2aWNlLmlzQ29ubmVjdGVkKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNDb25uZWN0ZWQpIHtcbiAgICAgICAgICAgIC8vIENhbGwgdGhlIHJlZnJlc2ggZnVuY3Rpb25cbiAgICAgICAgICAgIGNvbnN0IG5lZWRzQ29ubmVjdGlvblJlZnJlc2ggPSB0aGlzLnByb2ZpbGVTZXJ2aWNlLm5lZWRzQ29ubmVjdGlvblJlZnJlc2goKTtcbiAgICAgICAgICAgIGNvbnN0IGlzTG9nZ2VkSW4gPSB0aGlzLnByb2ZpbGVTZXJ2aWNlLmlzTG9nZ2VkSW4oKTtcbiAgICAgICAgICAgIGlmIChuZWVkc0Nvbm5lY3Rpb25SZWZyZXNoIHx8ICFpc0xvZ2dlZEluKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wcm9maWxlU2VydmljZS5jb25uZWN0aW9uUmVmcmVzaCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgc2xlZXAoMTAwMCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVCdXR0b25TdGF0ZSgpO1xuXG4gICAgICAgIC8vIEhpZGUgc2tlbGV0b24gdGV4dCBhbmQgc2hvdyBidXR0b24gd2hlbiBsb2FkaW5nIGlzIGNvbXBsZXRlXG4gICAgICAgIHRoaXMuaGlkZVNrZWxldG9uVGV4dCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlQnV0dG9uU3RhdGUoKSB7XG4gICAgICAgIGlmICh0aGlzLnByb2ZpbGVCdXR0b24pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzQ29ubmVjdGVkKSB7XG4gICAgICAgICAgICAgICAgLy8gRW5hYmxlIGJ1dHRvblxuICAgICAgICAgICAgICAgIHRoaXMucHJvZmlsZUJ1dHRvbi5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9maWxlQnV0dG9uLnJlbW92ZUF0dHJpYnV0ZSgndGl0bGUnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gRGlzYWJsZSBidXR0b24gYW5kIGFkZCB0b29sdGlwXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9maWxlQnV0dG9uLnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCAndHJ1ZScpO1xuICAgICAgICAgICAgICAgIHRoaXMucHJvZmlsZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ3RpdGxlJywgJ1Byb2ZpbGUgdW5hdmFpbGFibGUgLSBObyBjb25uZWN0aW9uJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBIZWxwZXIgbWV0aG9kIHRvIGNoZWNrIGlmIHRoZSB0b29sYmFyIGlzIGluc2lkZSBhIG1vZGFsXG4gICAgcHJpdmF0ZSBpc0luc2lkZU1vZGFsKCk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgcGFyZW50ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG5cbiAgICAgICAgLy8gVHJhdmVyc2UgdXAgdGhlIERPTSB0cmVlIHRvIGZpbmQgaWYgYW55IHBhcmVudCBpcyBhbiBpb24tbW9kYWxcbiAgICAgICAgd2hpbGUgKHBhcmVudCkge1xuICAgICAgICAgICAgaWYgKHBhcmVudC50YWdOYW1lICYmIHBhcmVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdpb24tbW9kYWwnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50RWxlbWVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG4iXX0=
@@ -522,12 +522,11 @@ export class ProfileService {
522
522
  }
523
523
  return 0;
524
524
  }
525
- async getIndicators(rainId, cumulative = false) {
525
+ async getIndicators(rainId) {
526
526
  try {
527
- const params = {};
528
- if (cumulative) {
529
- params.cumulative = 'true';
530
- }
527
+ const params = {
528
+ cumulative: 'true',
529
+ };
531
530
  const queryString = BuildQueryString(params);
532
531
  const response = await this.fidjService.sendOnEndpoint({
533
532
  key: 'rains',
@@ -656,4 +655,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
656
655
  providedIn: 'root',
657
656
  }]
658
657
  }], ctorParameters: function () { return [{ type: i1.Storage }, { type: i2.FidjService }, { type: i3.HttpClient }, { type: i4.Router }]; } });
659
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvcmUvc2hhcmVkL3Byb2ZpbGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxFQUNILGdCQUFnQixFQUNoQixTQUFTLEVBQ1QsWUFBWSxFQUNaLFNBQVMsRUFpQ1QsU0FBUyxFQUNULGtCQUFrQixFQUNsQixzQkFBc0IsRUFDdEIsUUFBUSxFQUNSLG9CQUFvQixFQUNwQixRQUFRLEdBQ1gsTUFBTSxhQUFhLENBQUM7QUFJckIsT0FBTyxFQUFDLFdBQVcsRUFBa0IsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRSxPQUFPLEVBQThCLGVBQWUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUMxRSxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxTQUFTLENBQUM7Ozs7OztBQU14QyxNQUFNLE9BQU8sY0FBYztJQVd2QixZQUNjLE9BQWdCLEVBQ2hCLFdBQXdCLEVBQ3hCLFVBQXNCLEVBQ3hCLE1BQWM7UUFIWixZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQ2hCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDeEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUV0QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUss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Q0FBQyxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUU7WUFDeEIsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDdEM7UUFFRCxPQUFPLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNwQyxDQUFDOzs0R0E3ekJRLGNBQWM7Z0hBQWQsY0FBYyxjQUZYLE1BQU07NEZBRVQsY0FBYztrQkFIMUIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtIdHRwQ2xpZW50fSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICAgIEJ1aWxkUXVlcnlTdHJpbmcsXG4gICAgRXZlbnROb2RlLFxuICAgIEdhdWdlTWVhc3VyZSxcbiAgICBHYXVnZU5vZGUsXG4gICAgTGF0TG5nLFxuICAgIFJhYWluQXBpR2F1Z2VzRmluZEFsbE1pbmVSZXF1ZXN0LFxuICAgIFJhYWluQXBpR2F1Z2VzRmluZEFsbE1pbmVSZXNwb25zZSxcbiAgICBSYWFpbkFwaUdhdWdlc0ZpbmRNZWFzdXJlc1JlcXVlc3QsXG4gICAgUmFhaW5BcGlHYXVnZXNGaW5kTWVhc3VyZXNSZXNwb25zZSxcbiAgICBSYWFpbkFwaUdhdWdlc0ZpbmRPbmVSZXNwb25zZSxcbiAgICBSYWFpbkFwaU5vdGlmaWNhdGlvbnNBZGRSZXF1ZXN0Qm9keSxcbiAgICBSYWFpbkFwaU5vdGlmaWNhdGlvbnNBZGRSZXNwb25zZSxcbiAgICBSYWFpbkFwaU5vdGlmaWNhdGlvbnNGaW5kQWxsTWluZVJlcXVlc3QsXG4gICAgUmFhaW5BcGlOb3RpZmljYXRpb25zRmluZEFsbE1pbmVSZXNwb25zZSxcbiAgICBSYWFpbkFwaVJhZGFyc0ZpbmRBbGxNaW5lUmVxdWVzdCxcbiAgICBSYWFpbkFwaVJhZGFyc0ZpbmRBbGxNaW5lUmVzcG9uc2UsXG4gICAgUmFhaW5BcGlSYWRhcnNGaW5kT25lUmVzcG9uc2UsXG4gICAgUmFhaW5BcGlSYWRhcnNVcGRhdGVSZXF1ZXN0Qm9keSxcbiAgICBSYWFpbkFwaVJhaW5zQ3VtdWxhdGl2ZUNhcnRlc2lhbk1hcFJlcXVlc3QsXG4gICAgUmFhaW5BcGlSYWluc0N1bXVsYXRpdmVDYXJ0ZXNpYW5NYXBSZXNwb25zZSxcbiAgICBSYWFpbkFwaVJhaW5zQ3VtdWxhdGl2ZUNvbXBhcmVzUmVxdWVzdCxcbiAgICBSYWFpbkFwaVJhaW5zQ3VtdWxhdGl2ZUNvbXBhcmVzUmVzcG9uc2UsXG4gICAgUmFhaW5BcGlSYWluc0N1bXVsYXRpdmVDdW11bGF0aXZlUmVzcG9uc2UsXG4gICAgUmFhaW5BcGlSYWluc0ZpbmRBbGxNaW5lUmVxdWVzdCxcbiAgICBSYWFpbkFwaVJhaW5zRmluZEFsbE1pbmVSZXNwb25zZSxcbiAgICBSYWFpbkFwaVJhaW5zRmluZE9uZVJlc3BvbnNlLFxuICAgIFJhYWluQXBpUmFpbnNGaW5kT25lVGltZWZyYW1lQ3VtdWxhdGl2ZVJlcXVlc3QsXG4gICAgUmFhaW5BcGlSYWluc0ZpbmRPbmVUaW1lZnJhbWVDdW11bGF0aXZlUmVzcG9uc2UsXG4gICAgUmFhaW5BcGlSYWluc0dldENvdW50c1JlcXVlc3QsXG4gICAgUmFhaW5BcGlSYWluc0dldENvdW50c1Jlc3BvbnNlLFxuICAgIFJhYWluQXBpUmFpbnNJbmRpY2F0b3JzUmVxdWVzdCxcbiAgICBSYWFpbkFwaVJhaW5zSW5kaWNhdG9yc1Jlc3BvbnNlLFxuICAgIFJhYWluQXBpUmFpbnNQcm9ncmVzc1Jlc3BvbnNlLFxuICAgIFJhYWluQXBpUmFpbnNQcm92aWRlcnNSZXNwb25zZSxcbiAgICBSYWFpbkFwaVRlYW1zRmluZEFsbE1pbmVSZXF1ZXN0LFxuICAgIFJhYWluQXBpVGVhbXNGaW5kT25lUmVzcG9uc2UsXG4gICAgUmFkYXJOb2RlLFxuICAgIFJhaW5Db21wdXRhdGlvbk1hcCxcbiAgICBSYWluQ29tcHV0YXRpb25RdWFsaXR5LFxuICAgIFJhaW5Ob2RlLFxuICAgIFNwZWVkTWF0cml4Q29udGFpbmVyLFxuICAgIFRlYW1Ob2RlLFxufSBmcm9tICdyYWFpbi1tb2RlbCc7XG5cbmltcG9ydCB7U3RvcmFnZX0gZnJvbSAnLi9zdG9yYWdlLnNlcnZpY2UnO1xuXG5pbXBvcnQge0ZpZGpTdG9yYWdlLCBGaWRqU3RvcmFnZU5vZGV9IGZyb20gJy4vZmlkai1zdG9yYWdlLm1vZGVsJztcbmltcG9ydCB7RXJyb3JJbnRlcmZhY2UsIEZpZGpTZXJ2aWNlLCBMb2dnZXJMZXZlbEVudW19IGZyb20gJ2ZpZGotYW5ndWxhcic7XG5pbXBvcnQge1hZVHlwZX0gZnJvbSAnLi94eXR5cGUnO1xuaW1wb3J0IHtHYXVnZU5vZGVGaWx0ZXJ9IGZyb20gJy4vdG9vbHMnO1xuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFByb2ZpbGVTZXJ2aWNlIHtcbiAgICBwdWJsaWMgcmVhZHlGb3JTeW5jOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj47XG4gICAgcHVibGljIGFzVGVhbUlkOiBzdHJpbmc7XG5cbiAgICBwcm90ZWN0ZWQgZW1haWw6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgaXNEZW1vOiBib29sZWFuO1xuICAgIHByb3RlY3RlZCByb2xlczogQXJyYXk8c3RyaW5nPjtcbiAgICBwcm90ZWN0ZWQgbm9kZURhdGE6IEZpZGpTdG9yYWdlTm9kZTtcbiAgICBwcm90ZWN0ZWQgZmlkalN0b3JhZ2U6IEZpZGpTdG9yYWdlO1xuICAgIHByb3RlY3RlZCBoYXZlVHJ5VG9SZWNvbm5lY3Q6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJvdGVjdGVkIHN0b3JhZ2U6IFN0b3JhZ2UsXG4gICAgICAgIHByb3RlY3RlZCBmaWRqU2VydmljZTogRmlkalNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBodHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXG4gICAgKSB7XG4gICAgICAgIHRoaXMuZW1haWwgPSB0aGlzLnN0b3JhZ2UuZ2V0KCdyYWFpbi1lbWFpbCcpO1xuICAgICAgICB0aGlzLmFzVGVhbUlkID0gdGhpcy5zdG9yYWdlLmdldCgncmFhaW4tYXNUZWFtSWQnKTtcbiAgICAgICAgdGhpcy5yZWFkeUZvclN5bmMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICAgICAgdGhpcy5yb2xlcyA9IFtdO1xuICAgICAgICB0aGlzLmZpZGpTdG9yYWdlID0gbmV3IEZpZGpTdG9yYWdlKHN0b3JhZ2UpO1xuICAgICAgICB0aGlzLmlzRGVtb01vZGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBnZXQgaXNEZW1vTW9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNEZW1vO1xuICAgIH1cblxuICAgIHNldCBpc0RlbW9Nb2RlKG1vZGUpIHtcbiAgICAgICAgdGhpcy5pc0RlbW8gPSBtb2RlID8gbW9kZSA6IHRydWU7XG4gICAgICAgIHRoaXMuZmlkalN0b3JhZ2Uuc2V0RGVtb01vZGUodGhpcy5pc0RlbW8pO1xuICAgIH1cblxuICAgIGdldCBkZWZhdWx0VXJsRm9yQVBJKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdG9yYWdlLmdldCgncmFhaW4tdXJsRm9yQVBJJyk7XG4gICAgfVxuXG4gICAgc2V0IGRlZmF1bHRVcmxGb3JBUEkodXJsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zdG9yYWdlLnNldCgncmFhaW4tdXJsRm9yQVBJJywgdXJsKTtcbiAgICB9XG5cbiAgICBhc3luYyByZWZyZXNoUHJvZmlsZSgpOiBQcm9taXNlPEZpZGpTdG9yYWdlTm9kZT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5ub2RlRGF0YSA9IGF3YWl0IHRoaXMuZmlkalN0b3JhZ2UuZ2V0UmVmcmVzaGVkTm9kZUNvcHkodGhpcy5maWRqU2VydmljZSk7XG4gICAgICAgICAgICB0aGlzLnNldFJvbGVzKGF3YWl0IHRoaXMuZmlkalNlcnZpY2UuZ2V0Um9sZXMoKSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ub2RlRGF0YTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgaXNDb25uZWN0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpZGpTZXJ2aWNlLmlzQ29ubmVjdGVkKCk7XG4gICAgfVxuXG4gICAgZ2V0RW1haWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVtYWlsID8/IHRoaXMuc3RvcmFnZS5nZXQoJ3JhYWluLWVtYWlsJywgdGhpcy5lbWFpbCk7XG4gICAgfVxuXG4gICAgc2V0RW1haWwoZW1haWw6IHN0cmluZykge1xuICAgICAgICB0aGlzLmVtYWlsID0gZW1haWw7XG4gICAgICAgIHRoaXMuc3RvcmFnZS5zZXQoJ3JhYWluLWVtYWlsJywgdGhpcy5lbWFpbCk7XG4gICAgfVxuXG4gICAgYXN5bmMgbG9nb3V0KGZpZGpLZXk6IHN0cmluZywgZmlkalByb2Q6IGJvb2xlYW4pIHtcbiAgICAgICAgLy8gdGhpcy5zdG9yYWdlLnJlbW92ZSgncmFhaW4tZW1haWwnKTtcblxuICAgICAgICBpZiAoIWZpZGpLZXkpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5maWRqU2VydmljZS5sb2dpbkluRGVtb01vZGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlYWR5Rm9yU3luYy5uZXh0KHRydWUpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignaW5pdEZpZGogY2F0Y2ggcGI6ICcsIGVycik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRoaXMuZmlkalNlcnZpY2UubG9nb3V0KHRydWUpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLmluaXQoZmlkaktleSwge1xuICAgICAgICAgICAgICAgIGxvZ0xldmVsOiBMb2dnZXJMZXZlbEVudW0uV0FSTiwgLy8gZmlkalByb2QgPyBMb2dnZXJMZXZlbEVudW0uV0FSTiA6IExvZ2dlckxldmVsRW51bS5JTkZPLFxuICAgICAgICAgICAgICAgIGNyeXB0bzogZmFsc2UsXG4gICAgICAgICAgICAgICAgcHJvZDogZmlkalByb2QsXG4gICAgICAgICAgICAgICAgdXNlREI6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnJlYWR5Rm9yU3luYy5uZXh0KHRydWUpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2luaXRGaWRqIGNhdGNoIHBiOiAnLCBlcnIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgY2hlY2tFcnJvcihlcnJvcjogRXJyb3JJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKGVycm9yLmNvZGUgPT09IDQwMSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdQYiBvbiBhdXRoJyk7XG4gICAgICAgICAgICBpZiAodGhpcy5yb3V0ZXIudXJsLmluZGV4T2YoJ2xvZ2luJykgPCAwKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5maWRqU2VydmljZS5sb2dvdXQoKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChpZ25vcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElnbm9yZSBsb2dvdXQgZXJyb3JzIGFzIHdlJ3JlIHJlZGlyZWN0aW5nIHRvIGxvZ291dCBwYWdlIGFueXdheVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nb3RvTG91dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgZ290b0xvdXQoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAodGhpcy5yb3V0ZXIudXJsLmluZGV4T2YoJ2xvZ2luJykgPiAtMSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy9sb2dvdXQnLCB7XG4gICAgICAgICAgICAgICAgc2tpcExvY2F0aW9uQ2hhbmdlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHJlcGxhY2VVcmw6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignZ290b0xvdXQgZXJyb3I6ICcsIGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgZ290b0xvZ2luKCkge1xuICAgICAgICBpZiAodGhpcy5yb3V0ZXIudXJsLmluZGV4T2YoJ2xvZ2luJykgPiAtMSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy8nLCB7c2tpcExvY2F0aW9uQ2hhbmdlOiB0cnVlfSk7XG4gICAgICAgIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2xvZ2luJ10pO1xuICAgIH1cblxuICAgIGlzTG9nZ2VkSW4oKSB7XG4gICAgICAgIGNvbnN0IGxvZ2dlZEluID0gdGhpcy5maWRqU2VydmljZS5pc0xvZ2dlZEluKCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdpc0xvZ2dlZEluOiAnLCBsb2dnZWRJbik7XG4gICAgICAgIHJldHVybiBsb2dnZWRJbjtcbiAgICB9XG5cbiAgICBuZWVkc0Nvbm5lY3Rpb25SZWZyZXNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5maWRqU2VydmljZS5uZWVkc1JlZnJlc2goKTtcbiAgICB9XG5cbiAgICBhc3luYyBjb25uZWN0aW9uUmVmcmVzaCgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5maWRqU2VydmljZS5yZWZyZXNoKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgc3RvcmVBbGwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpZGpTdG9yYWdlLnN0b3JlRGF0YSh0aGlzLmZpZGpTZXJ2aWNlLCB0aGlzLm5vZGVEYXRhKTtcbiAgICB9XG5cbiAgICBpc0FkbWluKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yb2xlcy5pbmRleE9mKCdhZG1pbicpID4gLTE7XG4gICAgfVxuXG4gICAgLy8gPT09IE5vdGlmaWNhdGlvbnMgPT09XG5cbiAgICBhc3luYyBjcmVhdGVOb3RpZmljYXRpb24ocmFpbklkOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZykge1xuICAgICAgICBjb25zdCBkYXRhOiBSYWFpbkFwaU5vdGlmaWNhdGlvbnNBZGRSZXF1ZXN0Qm9keSA9IHtcbiAgICAgICAgICAgIHJhaW46IHJhaW5JZCxcbiAgICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIH07XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PFxuICAgICAgICAgICAgICAgIFJhYWluQXBpTm90aWZpY2F0aW9uc0FkZFJlcXVlc3RCb2R5LFxuICAgICAgICAgICAgICAgIFJhYWluQXBpTm90aWZpY2F0aW9uc0FkZFJlc3BvbnNlXG4gICAgICAgICAgICA+KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdub3RpZmljYXRpb25zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnUE9TVCcsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9ub3RpZmljYXRpb25zJyxcbiAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEV2ZW50Tm9kZShyZXNwLmRhdGEpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBhc3luYyBnZXROb3RpZmljYXRpb25zKHJhaW5JZDogc3RyaW5nKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0eXBlIE5vdGlmaWNhdGlvbnNGaW5kUGFyYW1zID0gUGFydGlhbDxSYWFpbkFwaU5vdGlmaWNhdGlvbnNGaW5kQWxsTWluZVJlcXVlc3Q+O1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zOiBOb3RpZmljYXRpb25zRmluZFBhcmFtcyA9IHtyYWluOiByYWluSWR9O1xuICAgICAgICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSBCdWlsZFF1ZXJ5U3RyaW5nPE5vdGlmaWNhdGlvbnNGaW5kUGFyYW1zPihwYXJhbXMpO1xuICAgICAgICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQ8XG4gICAgICAgICAgICAgICAgdm9pZCxcbiAgICAgICAgICAgICAgICBSYWFpbkFwaU5vdGlmaWNhdGlvbnNGaW5kQWxsTWluZVJlc3BvbnNlXG4gICAgICAgICAgICA+KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdub3RpZmljYXRpb25zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHF1ZXJ5U3RyaW5nID8gJz8nICsgcXVlcnlTdHJpbmcgOiAnJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL25vdGlmaWNhdGlvbnMnLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiByZXNwLmRhdGEubm90aWZpY2F0aW9ucy5tYXAoKG4pID0+IG5ldyBFdmVudE5vZGUobikpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRBbGxOb3RpZmljYXRpb25zKCk6IFByb21pc2U8RXZlbnROb2RlW10+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PFxuICAgICAgICAgICAgICAgIHZvaWQsXG4gICAgICAgICAgICAgICAgUmFhaW5BcGlOb3RpZmljYXRpb25zRmluZEFsbE1pbmVSZXNwb25zZVxuICAgICAgICAgICAgPih7XG4gICAgICAgICAgICAgICAga2V5OiAnbm90aWZpY2F0aW9ucycsXG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9ub3RpZmljYXRpb25zJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVzcC5kYXRhLm5vdGlmaWNhdGlvbnMubWFwKChuKSA9PiBuZXcgRXZlbnROb2RlKG4pKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIC8vID09PSBUZWFtcyA9PT1cblxuICAgIGFzeW5jIGdldFRlYW1zKCk6IFByb21pc2U8QXJyYXk8VGVhbU5vZGU+PiB7XG4gICAgICAgIGNvbnN0IHRlYW1zID0gW107XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHt9O1xuICAgICAgICBjb25zdCBxdWVyeVN0cmluZyA9IEJ1aWxkUXVlcnlTdHJpbmc8UmFhaW5BcGlUZWFtc0ZpbmRBbGxNaW5lUmVxdWVzdD4ocGFyYW1zKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PFxuICAgICAgICAgICAgICAgIHZvaWQsXG4gICAgICAgICAgICAgICAge3RlYW1zOiBSZXR1cm5UeXBlPFRlYW1Ob2RlWyd0b0pTT04nXT5bXX1cbiAgICAgICAgICAgID4oe1xuICAgICAgICAgICAgICAgIGtleTogJ3RlYW1zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHF1ZXJ5U3RyaW5nID8gJz8nICsgcXVlcnlTdHJpbmcgOiAnJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3RlYW1zJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZm9yIChjb25zdCB0ZWFtIG9mIHJlc3AuZGF0YS50ZWFtcykge1xuICAgICAgICAgICAgICAgIHRlYW1zLnB1c2gobmV3IFRlYW1Ob2RlKHRlYW0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0ZWFtcztcbiAgICB9XG5cbiAgICBhc3luYyBnZXRUZWFtKHRlYW1JZDogc3RyaW5nKTogUHJvbWlzZTxUZWFtTm9kZT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQ8dm9pZCwgUmFhaW5BcGlUZWFtc0ZpbmRPbmVSZXNwb25zZT4oe1xuICAgICAgICAgICAgICAgIGtleTogJ3RlYW1zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHRlYW1JZCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3RlYW1zJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBUZWFtTm9kZShyZXNwLmRhdGEpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyA9PT0gUmFkYXJzID09PVxuXG4gICAgYXN5bmMgZ2V0UmFkYXJzKG5hbWU/OiBzdHJpbmcpOiBQcm9taXNlPEFycmF5PFJhZGFyTm9kZT4+IHtcbiAgICAgICAgY29uc3QgcmFkYXJzID0gW107XG4gICAgICAgIGNvbnN0IHBhcmFtczogUmFhaW5BcGlSYWRhcnNGaW5kQWxsTWluZVJlcXVlc3QgPSB7fTtcbiAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICAgIHBhcmFtcy5uYW1lID0gbmFtZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBxdWVyeVN0cmluZyA9IEJ1aWxkUXVlcnlTdHJpbmc8UmFhaW5BcGlSYWRhcnNGaW5kQWxsTWluZVJlcXVlc3Q+KHBhcmFtcyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDxcbiAgICAgICAgICAgICAgICB2b2lkLFxuICAgICAgICAgICAgICAgIFJhYWluQXBpUmFkYXJzRmluZEFsbE1pbmVSZXNwb25zZVxuICAgICAgICAgICAgPih7XG4gICAgICAgICAgICAgICAga2V5OiAncmFkYXJzJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHF1ZXJ5U3RyaW5nID8gJz8nICsgcXVlcnlTdHJpbmcgOiAnJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhZGFycycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgciBvZiByZXNwLmRhdGEucmFkYXJzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmFkYXIgPSBuZXcgUmFkYXJOb2RlKHIpO1xuICAgICAgICAgICAgICAgIHJhZGFycy5wdXNoKHJhZGFyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByYWRhcnM7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0UmFkYXIoaWQ6IHN0cmluZyk6IFByb21pc2U8UmFkYXJOb2RlPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDx2b2lkLCBSYWFpbkFwaVJhZGFyc0ZpbmRPbmVSZXNwb25zZT4oXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBrZXk6ICdyYWRhcnMnLFxuICAgICAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiBpZCxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWRhcnMnLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFJhZGFyTm9kZShyZXNwLmRhdGEpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBhc3luYyBwdXRSYWRhcihyYWRhck5vZGU6IFJhZGFyTm9kZSk6IFByb21pc2U8UmFkYXJOb2RlPiB7XG4gICAgICAgIGNvbnN0IGRhdGE6IFJhYWluQXBpUmFkYXJzVXBkYXRlUmVxdWVzdEJvZHkgPSB7XG4gICAgICAgICAgICBuYW1lOiByYWRhck5vZGUubmFtZSxcbiAgICAgICAgfTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQ8XG4gICAgICAgICAgICAgICAgUmFhaW5BcGlSYWRhcnNVcGRhdGVSZXF1ZXN0Qm9keSxcbiAgICAgICAgICAgICAgICBSZXR1cm5UeXBlPFJhZGFyTm9kZVsndG9KU09OJ10+XG4gICAgICAgICAgICA+KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdyYWRhcnMnLFxuICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogcmFkYXJOb2RlLmlkLFxuICAgICAgICAgICAgICAgIHZlcmI6ICdQVVQnLFxuICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWRhcnMvJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3IFJhZGFyTm9kZShyZXNwLmRhdGEpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBnZXRMb25lbHlSYWRhcnMocmFpbnM6IFJhaW5Ob2RlW10pOiBQcm9taXNlPFJhZGFyTm9kZVtdPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDxcbiAgICAgICAgICAgICAgICB2b2lkLFxuICAgICAgICAgICAgICAgIFJhYWluQXBpUmFkYXJzRmluZEFsbE1pbmVSZXNwb25zZVxuICAgICAgICAgICAgPih7XG4gICAgICAgICAgICAgICAga2V5OiAncmFkYXJzJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhZGFycycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGxvbmVseVJhZGFyczogUmFkYXJOb2RlW10gPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IHJhZGFycyA9IHJlc3AuZGF0YS5yYWRhcnM7XG4gICAgICAgICAgICByYWRhcnMuZm9yRWFjaCgocmFkYXIpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgZm91bmQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByYWlucy5mb3JFYWNoKChyYWluKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJkSWQgPSByYWluLmdldExpbmsoUmFkYXJOb2RlLlRZUEUpLmdldElkKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZElkID09PSByYWRhci5pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICBsb25lbHlSYWRhcnMucHVzaChuZXcgUmFkYXJOb2RlKHJhZGFyKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gbG9uZWx5UmFkYXJzO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGFzeW5jIGdldFJhaW5UaW1lZnJhbWUoXG4gICAgICAgIHJhaW5JZDogc3RyaW5nLFxuICAgICAgICBiZWdpbjogRGF0ZSxcbiAgICAgICAgZW5kOiBEYXRlLFxuICAgICAgICBmb3JjZWQgPSBmYWxzZSxcbiAgICAgICAgcHJvdmlkZXIgPSAnUmFhaW4nLFxuICAgICAgICB0aW1lU3RlcEluTWludXRlcyA9IDEwXG4gICAgKTogUHJvbWlzZTxSYWluTm9kZT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zOiBSYWFpbkFwaVJhaW5zRmluZE9uZVRpbWVmcmFtZUN1bXVsYXRpdmVSZXF1ZXN0ID0ge1xuICAgICAgICAgICAgICAgIGZvcm1hdDogJ3RpbWVmcmFtZUN1bXVsYXRpdmUnLFxuICAgICAgICAgICAgICAgIHByb3ZpZGVyLFxuICAgICAgICAgICAgICAgIHRpbWVTdGVwSW5NaW51dGVzOiBTdHJpbmcodGltZVN0ZXBJbk1pbnV0ZXMpLFxuICAgICAgICAgICAgICAgIGJlZ2luOiBiZWdpbj8udG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICBlbmQ6IGVuZD8udG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoZm9yY2VkKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zLmZvcmNlZCA9ICd0cnVlJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID1cbiAgICAgICAgICAgICAgICBCdWlsZFF1ZXJ5U3RyaW5nPFJhYWluQXBpUmFpbnNGaW5kT25lVGltZWZyYW1lQ3VtdWxhdGl2ZVJlcXVlc3Q+KHBhcmFtcyk7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDxcbiAgICAgICAgICAgICAgICB2b2lkLFxuICAgICAgICAgICAgICAgIFJhYWluQXBpUmFpbnNGaW5kT25lVGltZWZyYW1lQ3VtdWxhdGl2ZVJlc3BvbnNlXG4gICAgICAgICAgICA+KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdyYWlucycsXG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiByYWluSWQgKyAocXVlcnlTdHJpbmcgPyAnPycgKyBxdWVyeVN0cmluZyA6ICcnKSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgcmFpbk5vZGUgPSBuZXcgUmFpbk5vZGUocmVzcC5kYXRhLnRpbWVmcmFtZUN1bXVsYXRpdmUpO1xuICAgICAgICAgICAgcmFpbk5vZGUubmFtZSArPSAnLnJhZGFyLnRpbWVmcmFtZUN1bXVsYXRpdmUnO1xuICAgICAgICAgICAgcmV0dXJuIHJhaW5Ob2RlO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gPT09IFJhaW5zID09PVxuXG4gICAgYXN5bmMgZ2V0UmFpbnMobmFtZT86IHN0cmluZyk6IFByb21pc2U8QXJyYXk8UmFpbk5vZGU+PiB7XG4gICAgICAgIGNvbnN0IHJhaW5zID0gW107XG4gICAgICAgIGNvbnN0IHBhcmFtczogUmFhaW5BcGlSYWluc0ZpbmRBbGxNaW5lUmVxdWVzdCA9IHt9O1xuICAgICAgICBpZiAobmFtZSkge1xuICAgICAgICAgICAgcGFyYW1zLm5hbWUgPSBuYW1lO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gQnVpbGRRdWVyeVN0cmluZzxSYWFpbkFwaVJhaW5zRmluZEFsbE1pbmVSZXF1ZXN0PihwYXJhbXMpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQ8XG4gICAgICAgICAgICAgICAgdm9pZCxcbiAgICAgICAgICAgICAgICBSYWFpbkFwaVJhaW5zRmluZEFsbE1pbmVSZXNwb25zZVxuICAgICAgICAgICAgPih7XG4gICAgICAgICAgICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgICAgICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogcXVlcnlTdHJpbmcgPyAnPycgKyBxdWVyeVN0cmluZyA6ICcnLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFpbnMnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJhaW4gb2YgcmVzcC5kYXRhLnJhaW5zKSB7XG4gICAgICAgICAgICAgICAgcmFpbnMucHVzaChuZXcgUmFpbk5vZGUocmFpbikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJhaW5zO1xuICAgIH1cblxuICAgIGFzeW5jIGdldFJhaW4oaWQ6IHN0cmluZyk6IFByb21pc2U8UmFpbk5vZGU+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PHZvaWQsIFJhYWluQXBpUmFpbnNGaW5kT25lUmVzcG9uc2U+KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdyYWlucycsXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiBpZCxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zLycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmFpbk5vZGUocmVzcC5kYXRhKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vID09PSBDb3VudFxuXG4gICAgYXN5bmMgZ2V0Q291bnRzKFxuICAgICAgICByYWluSWQ6IHN0cmluZyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgcmFuZ2U6ICdob3VyJyB8ICdkYXknIHwgJ21vbnRoJyB8ICd5ZWFyJztcbiAgICAgICAgICAgIHBlcmlvZEJlZ2luOiBEYXRlO1xuICAgICAgICB9XG4gICAgKTogUHJvbWlzZTx7XG4gICAgICAgIHBlcmNlbnRJbWFnZXM6IFhZVHlwZVtdO1xuICAgICAgICBwZXJjZW50UmFpbnk6IFhZVHlwZVtdO1xuICAgICAgICBwZXJjZW50UTogWFlUeXBlW107XG4gICAgICAgIHF1ZXVlUnVubmluZzogbnVtYmVyO1xuICAgIH0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtczogUmFhaW5BcGlSYWluc0dldENvdW50c1JlcXVlc3QgPSB7XG4gICAgICAgICAgICAgICAgcmFuZ2U6IG9wdGlvbnMucmFuZ2UsXG4gICAgICAgICAgICAgICAgYmVnaW46IG9wdGlvbnMucGVyaW9kQmVnaW4udG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBxdWVyeVN0cmluZyA9IEJ1aWxkUXVlcnlTdHJpbmc8UmFhaW5BcGlSYWluc0dldENvdW50c1JlcXVlc3Q+KHBhcmFtcyk7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PFxuICAgICAgICAgICAgICAgIHZvaWQsXG4gICAgICAgICAgICAgICAgUmFhaW5BcGlSYWluc0dldENvdW50c1Jlc3BvbnNlXG4gICAgICAgICAgICA+KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdyYWlucycsXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiByYWluSWQgKyAnL2NvdW50cycgKyAocXVlcnlTdHJpbmcgPyAnPycgKyBxdWVyeVN0cmluZyA6ICcnKSxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zLycsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgY291bnRzID0gcmVzcC5kYXRhLmNvdW50cy5yZXN1bHQ7XG4gICAgICAgICAgICBjb25zdCBwZXJjZW50SW1hZ2VzOiBYWVR5cGVbXSA9IFtdLFxuICAgICAgICAgICAgICAgIHBlcmNlbnRSYWlueTogWFlUeXBlW10gPSBbXSxcbiAgICAgICAgICAgICAgICBwZXJjZW50UTogWFlUeXBlW10gPSBbXTtcblxuICAgICAgICAgICAgY291bnRzLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMuc2V0RGF0ZUNvbXBvbmVudHMob3B0aW9ucy5wZXJpb2RCZWdpbiwgYyk7XG4gICAgICAgICAgICAgICAgcGVyY2VudEltYWdlcy5wdXNoKG5ldyBYWVR5cGUoYy5wZXJjZW50SW1hZ2VzID8/IDAsIE5hTiwgTmFOLCBsYWJlbCkpO1xuICAgICAgICAgICAgICAgIHBlcmNlbnRSYWlueS5wdXNoKG5ldyBYWVR5cGUoYy5wZXJjZW50UmFpbnkgPz8gMCwgTmFOLCBOYU4sIGxhYmVsKSk7XG4gICAgICAgICAgICAgICAgcGVyY2VudFEucHVzaChuZXcgWFlUeXBlKGMucGVyY2VudFEgPz8gMCwgTmFOLCBOYU4sIGxhYmVsKSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwZXJjZW50SW1hZ2VzLFxuICAgICAgICAgICAgICAgIHBlcmNlbnRSYWlueSxcbiAgICAgICAgICAgICAgICBwZXJjZW50USxcbiAgICAgICAgICAgICAgICBxdWV1ZVJ1bm5pbmc6IHJlc3AuZGF0YS5xdWV1ZVJ1bm5pbmcsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0Q291bnRzSG91cihcbiAgICAgICAgcmFpbklkOiBzdHJpbmcsXG4gICAgICAgIG9wdGlvbnM6IHtwZXJpb2RCZWdpbjogRGF0ZX1cbiAgICApOiBQcm9taXNlPHtcbiAgICAgICAgcGVyY2VudEltYWdlczogWFlUeXBlW107XG4gICAgICAgIHJhaW55Q291bnQ6IFhZVHlwZVtdO1xuICAgICAgICByYWlueVN1bTogWFlUeXBlW107XG4gICAgICAgIHF1ZXVlUnVubmluZzogbnVtYmVyO1xuICAgIH0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtczogUmFhaW5BcGlSYWluc0dldENvdW50c1JlcXVlc3QgPSB7XG4gICAgICAgICAgICAgICAgcmFuZ2U6ICdob3VyJyxcbiAgICAgICAgICAgICAgICBiZWdpbjogb3B0aW9ucy5wZXJpb2RCZWdpbi50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gQnVpbGRRdWVyeVN0cmluZzxSYWFpbkFwaVJhaW5zR2V0Q291bnRzUmVxdWVzdD4ocGFyYW1zKTtcblxuICAgICAgICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQ8XG4gICAgICAgICAgICAgICAgdm9pZCxcbiAgICAgICAgICAgICAgICBSYWFpbkFwaVJhaW5zR2V0Q291bnRzUmVzcG9uc2VcbiAgICAgICAgICAgID4oe1xuICAgICAgICAgICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHJhaW5JZCArICcvY291bnRzJyArIChxdWVyeVN0cmluZyA/ICc/JyArIHF1ZXJ5U3RyaW5nIDogJycpLFxuICAgICAgICAgICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFpbnMvJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBjb3VudHMgPSByZXNwLmRhdGEuY291bnRzLnJlc3VsdDtcbiAgICAgICAgICAgIGNvbnN0IHBlcmNlbnRJbWFnZXM6IFhZVHlwZVtdID0gW10sXG4gICAgICAgICAgICAgICAgcmFpbnlTdW06IFhZVHlwZVtdID0gW10sXG4gICAgICAgICAgICAgICAgcmFpbnlDb3VudDogWFlUeXBlW10gPSBbXTtcblxuICAgICAgICAgICAgY291bnRzLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMuc2V0RGF0ZUNvbXBvbmVudHMob3B0aW9ucy5wZXJpb2RCZWdpbiwgYyk7XG4gICAgICAgICAgICAgICAgcGVyY2VudEltYWdlcy5wdXNoKG5ldyBYWVR5cGUoYy5wZXJjZW50SW1hZ2VzID8/IDAsIE5hTiwgTmFOLCBsYWJlbCkpO1xuICAgICAgICAgICAgICAgIHJhaW55Q291bnQucHVzaChuZXcgWFlUeXBlKGMucmFpbnlDb3VudCA/PyAwLCBOYU4sIE5hTiwgbGFiZWwpKTtcbiAgICAgICAgICAgICAgICByYWlueVN1bS5wdXNoKG5ldyBYWVR5cGUoYy5yYWlueVN1bSA/PyAwLCBOYU4sIE5hTiwgbGFiZWwpKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHBlcmNlbnRJbWFnZXMsXG4gICAgICAgICAgICAgICAgcmFpbnlDb3VudCxcbiAgICAgICAgICAgICAgICByYWlueVN1bSxcbiAgICAgICAgICAgICAgICBxdWV1ZVJ1bm5pbmc6IHJlc3AuZGF0YS5xdWV1ZVJ1bm5pbmcsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gPT09IENvbXB1dGluZyA9PT1cblxuICAgIGFzeW5jIGdldFJhaW5Db21wdXRhdGlvbkN1bXVsYXRpdmVDYXJ0ZXNpYW5NYXBCeUlkKFxuICAgICAgICByYWluSWQ6IHN0cmluZyxcbiAgICAgICAgcmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZUlkOiBzdHJpbmdcbiAgICApOiBQcm9taXNlPFJhaW5Db21wdXRhdGlvbk1hcD4ge1xuICAgICAgICBjb25zdCBwYXJhbXM6IFJhYWluQXBpUmFpbnNDdW11bGF0aXZlQ2FydGVzaWFuTWFwUmVxdWVzdCA9IHtmb3JtYXQ6ICdjYXJ0ZXNpYW4tbWFwJ307XG4gICAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gQnVpbGRRdWVyeVN0cmluZzxSYWFpbkFwaVJhaW5zQ3VtdWxhdGl2ZUNhcnRlc2lhbk1hcFJlcXVlc3Q+KHBhcmFtcyk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDxcbiAgICAgICAgICAgICAgICB2b2lkLFxuICAgICAgICAgICAgICAgIFJhYWluQXBpUmFpbnNDdW11bGF0aXZlQ2FydGVzaWFuTWFwUmVzcG9uc2VcbiAgICAgICAgICAgID4oe1xuICAgICAgICAgICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IGAke3JhaW5JZH0vY3VtdWxhdGl2ZXMvJHtyYWluQ29tcHV0YXRpb25DdW11bGF0aXZlSWR9PyR7cXVlcnlTdHJpbmd9YCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5kYXRhWydjYXJ0ZXNpYW4tbWFwJ10pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmFpbkNvbXB1dGF0aW9uTWFwID0gbmV3IFJhaW5Db21wdXRhdGlvbk1hcChyZXNwb25zZS5kYXRhWydjYXJ0ZXNpYW4tbWFwJ10pO1xuICAgICAgICAgICAgcmFpbkNvbXB1dGF0aW9uTWFwLm5hbWUgPSByYWluSWQgKyAnLnJhaW4uY2FydGVzaWFuLW1hcCc7XG4gICAgICAgICAgICByZXR1cm4gcmFpbkNvbXB1dGF0aW9uTWFwO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0UmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZUN1bXVsYXRpdmVzTWFwQnlJZChcbiAgICAgICAgcmFpbklkOiBzdHJpbmcsXG4gICAgICAgIHJhaW5Db21wdXRhdGlvbkN1bXVsYXRpdmVJZDogc3RyaW5nLFxuICAgICAgICBjdW11bGF0aXZlSG91cnM6IG51bWJlclxuICAgICk6IFByb21pc2U8UmFpbkNvbXB1dGF0aW9uTWFwPiB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5UGF0aCA9IGAke3JhaW5JZH0vY3VtdWxhdGl2ZXMvJHtyYWluQ29tcHV0YXRpb25DdW11bGF0aXZlSWR9L2N1bXVsYXRpdmUvJHtjdW11bGF0aXZlSG91cnN9YDtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PFxuICAgICAgICAgICAgICAgIHZvaWQsXG4gICAgICAgICAgICAgICAgUmFhaW5BcGlSYWluc0N1bXVsYXRpdmVDdW11bGF0aXZlUmVzcG9uc2VcbiAgICAgICAgICAgID4oe1xuICAgICAgICAgICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHF1ZXJ5UGF0aCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5kYXRhWydjdW11bGF0aXZlJ10pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmFpbkNvbXB1dGF0aW9uTWFwID0gbmV3IFJhaW5Db21wdXRhdGlvbk1hcChyZXNwb25zZS5kYXRhWydjdW11bGF0aXZlJ10pO1xuICAgICAgICAgICAgcmFpbkNvbXB1dGF0aW9uTWFwLm5hbWUgPSByYWluSWQgKyAnLnJhaW4uY3VtdWxhdGl2ZS1jdW11bGF0aXZlJztcbiAgICAgICAgICAgIHJldHVybiByYWluQ29tcHV0YXRpb25NYXA7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRSYWluQ3VtdWxhdGl2ZUNvbXBhcmVCeURhdGUoXG4gICAgICAgIHJhaW5Ob2RlOiBSYWluTm9kZSxcbiAgICAgICAgcmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZUlkOiBzdHJpbmcsXG4gICAgICAgIGRhdGU6IERhdGVcbiAgICApOiBQcm9taXNlPFJhaW5Db21wdXRhdGlvblF1YWxpdHk+IHtcbiAgICAgICAgY29uc3QgcGFyYW1zOiBSYWFpbkFwaVJhaW5zQ3VtdWxhdGl2ZUNvbXBhcmVzUmVxdWVzdCA9IHtkYXRlOiBkYXRlLnRvSVNPU3RyaW5nKCl9O1xuICAgICAgICBjb25zdCBxdWVyeVN0cmluZyA9IEJ1aWxkUXVlcnlTdHJpbmc8UmFhaW5BcGlSYWluc0N1bXVsYXRpdmVDb21wYXJlc1JlcXVlc3Q+KHBhcmFtcyk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDxcbiAgICAgICAgICAgICAgICB2b2lkLFxuICAgICAgICAgICAgICAgIFJhYWluQXBpUmFpbnNDdW11bGF0aXZlQ29tcGFyZXNSZXNwb25zZVxuICAgICAgICAgICAgPih7XG4gICAgICAgICAgICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgICAgICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogYCR7cmFpbk5vZGUuaWR9L2N1bXVsYXRpdmVzLyR7cmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZUlkfS9jb21wYXJlcz8ke3F1ZXJ5U3RyaW5nfWAsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWlucycsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgcXVhbGl0eUpzb24gPSByZXNwb25zZS5kYXRhLnF1YWxpdGllc1swXTtcbiAgICAgICAgICAgIGNvbnN0IHJhaW5Db21wdXRhdGlvblF1YWxpdHkgPSBuZXcgUmFpbkNvbXB1dGF0aW9uUXVhbGl0eShxdWFsaXR5SnNvbik7XG4gICAgICAgICAgICByYWluQ29tcHV0YXRpb25RdWFsaXR5LnF1YWxpdHlTcGVlZE1hdHJpeENvbnRhaW5lciA9XG4gICAgICAgICAgICAgICAgU3BlZWRNYXRyaXhDb250YWluZXIuQ3JlYXRlRnJvbUpzb24oXG4gICAgICAgICAgICAgICAgICAgIHJhaW5Db21wdXRhdGlvblF1YWxpdHkucXVhbGl0eVNwZWVkTWF0cml4Q29udGFpbmVyXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiByYWluQ29tcHV0YXRpb25RdWFsaXR5O1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0UmFpblByb2dyZXNzKHJhaW5JZDogc3RyaW5nKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5UGF0aCA9ICcnICsgcmFpbklkICsgJy9wcm9ncmVzcyc7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQ8XG4gICAgICAgICAgICAgICAgdm9pZCxcbiAgICAgICAgICAgICAgICBSYWFpbkFwaVJhaW5zUHJvZ3Jlc3NSZXNwb25zZVxuICAgICAgICAgICAgPih7XG4gICAgICAgICAgICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgICAgICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogcXVlcnlQYXRoLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFpbnMnLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5kYXRhLmluUHJvZ3Jlc3M7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRJbmRpY2F0b3JzKFxuICAgICAgICByYWluSWQ6IHN0cmluZyxcbiAgICAgICAgY3VtdWxhdGl2ZSA9IGZhbHNlXG4gICAgKTogUHJvbWlzZTxSYWFpbkFwaVJhaW5zSW5kaWNhdG9yc1Jlc3BvbnNlPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBwYXJhbXM6IFJhYWluQXBpUmFpbnNJbmRpY2F0b3JzUmVxdWVzdCA9IHt9O1xuICAgICAgICAgICAgaWYgKGN1bXVsYXRpdmUpIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMuY3VtdWxhdGl2ZSA9ICd0cnVlJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gQnVpbGRRdWVyeVN0cmluZzxSYWFpbkFwaVJhaW5zSW5kaWNhdG9yc1JlcXVlc3Q+KHBhcmFtcyk7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQ8XG4gICAgICAgICAgICAgICAgdm9pZCxcbiAgICAgICAgICAgICAgICBSYWFpbkFwaVJhaW5zSW5kaWNhdG9yc1Jlc3BvbnNlXG4gICAgICAgICAgICA+KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdyYWlucycsXG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiByYWluSWQgKyAnL2luZGljYXRvcnMnICsgKHF1ZXJ5U3RyaW5nID8gJz8nICsgcXVlcnlTdHJpbmcgOiAnJyksXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWlucycsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge2luZGljYXRvcnM6IFtdfTtcbiAgICB9XG5cbiAgICAvLyA9PT0gR2F1Z2VzID09PVxuXG4gICAgYXN5bmMgZ2V0R2F1Z2UoZ2F1Z2VJZDogc3RyaW5nKTogUHJvbWlzZTxHYXVnZU5vZGU+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PHZvaWQsIFJhYWluQXBpR2F1Z2VzRmluZE9uZVJlc3BvbnNlPihcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGtleTogJ2dhdWdlcycsXG4gICAgICAgICAgICAgICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IGdhdWdlSWQsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvZ2F1Z2VzJyxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBHYXVnZU5vZGUocmVzcC5kYXRhKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0R2F1Z2VzKFxuICAgICAgICByYWluSWQ6IHN0cmluZyxcbiAgICAgICAgYXJvdW5kTGF0TG5nOiBMYXRMbmcsXG4gICAgICAgIHBhZ2VDb3VudCA9IDFcbiAgICApOiBQcm9taXNlPEFycmF5PEdhdWdlTm9kZUZpbHRlcj4+IHtcbiAgICAgICAgY29uc3QgYmFzZVBhcmFtczogUmFhaW5BcGlHYXVnZXNGaW5kQWxsTWluZVJlcXVlc3QgPSB7XG4gICAgICAgICAgICBhcm91bmRMYXRMbmc6IGAke2Fyb3VuZExhdExuZy5sYXR9LCR7YXJvdW5kTGF0TG5nLmxuZ31gLFxuICAgICAgICAgICAgcmFpbklkLFxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5hc1RlYW1JZCkge1xuICAgICAgICAgICAgYmFzZVBhcmFtcy50ZWFtSWQgPSB0aGlzLmFzVGVhbUlkO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZ2F1Z2VzID0gW107XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKGxldCBjb3VudCA9IDE7IGNvdW50IDw9IHBhZ2VDb3VudDsgY291bnQrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtczogUmFhaW5BcGlHYXVnZXNGaW5kQWxsTWluZVJlcXVlc3QgPSB7Li4uYmFzZVBhcmFtcywgcGFnZTogY291bnR9O1xuICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gQnVpbGRRdWVyeVN0cmluZzxSYWFpbkFwaUdhdWdlc0ZpbmRBbGxNaW5lUmVxdWVzdD4ocGFyYW1zKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDxcbiAgICAgICAgICAgICAgICAgICAgdm9pZCxcbiAgICAgICAgICAgICAgICAgICAgUmFhaW5BcGlHYXVnZXNGaW5kQWxsTWluZVJlc3BvbnNlXG4gICAgICAgICAgICAgICAgPih7XG4gICAgICAgICAgICAgICAgICAgIGtleTogJ2dhdWdlcycsXG4gICAgICAgICAgICAgICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHF1ZXJ5U3RyaW5nID8gJz8nICsgcXVlcnlTdHJpbmcgOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9nYXVnZXMnLFxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBnYXVnZSBvZiByZXNwLmRhdGEuZ2F1Z2VzKSB7XG4gICAgICAgICAgICAgICAgICAgIGdhdWdlcy5wdXNoKG5ldyBHYXVnZU5vZGVGaWx0ZXIoZ2F1Z2UpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2F1Z2VzO1xuICAgIH1cblxuICAgIGFzeW5jIGdldEdhdWdlTWVhc3VyZXMoZ2F1Z2VJZDogc3RyaW5nLCBiZWdpbjogRGF0ZSwgZW5kOiBEYXRlKTogUHJvbWlzZTxHYXVnZU1lYXN1cmVbXT4ge1xuICAgICAgICBjb25zdCBwYXJhbXM6IFJhYWluQXBpR2F1Z2VzRmluZE1lYXN1cmVzUmVxdWVzdCA9IHtcbiAgICAgICAgICAgIGJlZ2luOiBiZWdpbi50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgZW5kOiBlbmQudG9JU09TdHJpbmcoKSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSBCdWlsZFF1ZXJ5U3RyaW5nPFJhYWluQXBpR2F1Z2VzRmluZE1lYXN1cmVzUmVxdWVzdD4ocGFyYW1zKTtcbiAgICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQ8XG4gICAgICAgICAgICB2b2lkLFxuICAgICAgICAgICAgUmFhaW5BcGlHYXVnZXNGaW5kTWVhc3VyZXNSZXNwb25zZVxuICAgICAgICA+KHtcbiAgICAgICAgICAgIGtleTogJ2dhdWdlcycsXG4gICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogZ2F1Z2VJZCArICcvbWVhc3VyZXMnICsgKHF1ZXJ5U3RyaW5nID8gJz8nICsgcXVlcnlTdHJpbmcgOiAnJyksXG4gICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL2dhdWdlcycsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGdhdWdlTWVhc3VyZXM6IEdhdWdlTWVhc3VyZVtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgZ2F1Z2VNZWFzdXJlIG9mIHJlc3AuZGF0YS5nYXVnZU1lYXN1cmVzKSB7XG4gICAgICAgICAgICBnYXVnZU1lYXN1cmVzLnB1c2gobmV3IEdhdWdlTWVhc3VyZShnYXVnZU1lYXN1cmUpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2F1Z2VNZWFzdXJlcztcbiAgICB9XG5cbiAgICBhc3luYyBnZXRQcm92aWRlcnMoXG4gICAgICAgIHJhaW5JZDogc3RyaW5nXG4gICAgKTogUHJvbWlzZTx7cHJvdmlkZXJzOiBzdHJpbmdbXTsgdGltZVN0ZXBJbk1pbnV0ZXM6IG51bWJlcltdfT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PFxuICAgICAgICAgICAgICAgIHZvaWQsXG4gICAgICAgICAgICAgICAgUmFhaW5BcGlSYWluc1Byb3ZpZGVyc1Jlc3BvbnNlXG4gICAgICAgICAgICA+KHtcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICBrZXk6ICdyYWlucycsXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiByYWluSWQgKyAnL3Byb3ZpZGVycycsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWlucycsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IHJlc3BvbnNlLmRhdGEucHJvdmlkZXJzIHx8IFtdLFxuICAgICAgICAgICAgICAgIHRpbWVTdGVwSW5NaW51dGVzOiByZXNwb25zZS5kYXRhLnRpbWVTdGVwSW5NaW51dGVzIHx8IFs1LCAxMCwgMTUsIDMwLCA2MF0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdnZXRQcm92aWRlcnMgZXJyb3I6JywgZSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW10sXG4gICAgICAgICAgICAgICAgdGltZVN0ZXBJbk1pbnV0ZXM6IFs1LCAxMCwgMTUsIDMwLCA2MF0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHNldFJvbGVzKHJvbGVzOiBBcnJheTxzdHJpbmc+KTogdm9pZCB7XG4gICAgICAgIHRoaXMucm9sZXMgPSByb2xlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldERhdGVDb21wb25lbnRzKFxuICAgICAgICBkYXRlOiBEYXRlLFxuICAgICAgICBjOiB7XG4gICAgICAgICAgICB5ZWFyPzogbnVtYmVyO1xuICAgICAgICAgICAgbW9udGg/OiBudW1iZXI7XG4gICAgICAgICAgICBkYXk/OiBudW1iZXI7XG4gICAgICAgICAgICBob3VyPzogbnVtYmVyO1xuICAgICAgICAgICAgbWludXRlPzogbnVtYmVyO1xuICAgICAgICB9XG4gICAgKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZGF0ZVRvU2hvdyA9IG5ldyBEYXRlKGRhdGUpO1xuXG4gICAgICAgIGlmIChjLnllYXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZGF0ZVRvU2hvdy5zZXRVVENGdWxsWWVhcihjLnllYXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjLm1vbnRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGRhdGVUb1Nob3cuc2V0VVRDTW9udGgoYy5tb250aCAtIDEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjLmRheSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBkYXRlVG9TaG93LnNldFVUQ0RhdGUoYy5kYXkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjLmhvdXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZGF0ZVRvU2hvdy5zZXRVVENIb3VycyhjLmhvdXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjLm1pbnV0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBkYXRlVG9TaG93LnNldFVUQ01pbnV0ZXMoYy5taW51dGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGVUb1Nob3cudG9JU09TdHJpbmcoKTtcbiAgICB9XG59XG4iXX0=
658
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvcmUvc2hhcmVkL3Byb2ZpbGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxFQUNILGdCQUFnQixFQUNoQixTQUFTLEVBQ1QsWUFBWSxFQUNaLFNBQVMsRUFpQ1QsU0FBUyxFQUNULGtCQUFrQixFQUNsQixzQkFBc0IsRUFDdEIsUUFBUSxFQUNSLG9CQUFvQixFQUNwQixRQUFRLEdBQ1gsTUFBTSxhQUFhLENBQUM7QUFJckIsT0FBTyxFQUFDLFdBQVcsRUFBa0IsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRSxPQUFPLEVBQThCLGVBQWUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUMxRSxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxTQUFTLENBQUM7Ozs7OztBQU14QyxNQUFNLE9BQU8sY0FBYztJQVd2QixZQUNjLE9BQWdCLEVBQ2hCLFdBQXdCLEVBQ3hCLFVBQXNCLEVBQ3hCLE1BQWM7UUFIWixZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQ2hCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDeEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUV0QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUss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LENBQUMsTUFBTSxDQUFDLENBQUM7U0FDdEM7UUFFRCxPQUFPLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNwQyxDQUFDOzs0R0F6ekJRLGNBQWM7Z0hBQWQsY0FBYyxjQUZYLE1BQU07NEZBRVQsY0FBYztrQkFIMUIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtIdHRwQ2xpZW50fSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICAgIEJ1aWxkUXVlcnlTdHJpbmcsXG4gICAgRXZlbnROb2RlLFxuICAgIEdhdWdlTWVhc3VyZSxcbiAgICBHYXVnZU5vZGUsXG4gICAgTGF0TG5nLFxuICAgIFJhYWluQXBpR2F1Z2VzRmluZEFsbE1pbmVSZXF1ZXN0LFxuICAgIFJhYWluQXBpR2F1Z2VzRmluZEFsbE1pbmVSZXNwb25zZSxcbiAgICBSYWFpbkFwaUdhdWdlc0ZpbmRNZWFzdXJlc1JlcXVlc3QsXG4gICAgUmFhaW5BcGlHYXVnZXNGaW5kTWVhc3VyZXNSZXNwb25zZSxcbiAgICBSYWFpbkFwaUdhdWdlc0ZpbmRPbmVSZXNwb25zZSxcbiAgICBSYWFpbkFwaU5vdGlmaWNhdGlvbnNBZGRSZXF1ZXN0Qm9keSxcbiAgICBSYWFpbkFwaU5vdGlmaWNhdGlvbnNBZGRSZXNwb25zZSxcbiAgICBSYWFpbkFwaU5vdGlmaWNhdGlvbnNGaW5kQWxsTWluZVJlcXVlc3QsXG4gICAgUmFhaW5BcGlOb3RpZmljYXRpb25zRmluZEFsbE1pbmVSZXNwb25zZSxcbiAgICBSYWFpbkFwaVJhZGFyc0ZpbmRBbGxNaW5lUmVxdWVzdCxcbiAgICBSYWFpbkFwaVJhZGFyc0ZpbmRBbGxNaW5lUmVzcG9uc2UsXG4gICAgUmFhaW5BcGlSYWRhcnNGaW5kT25lUmVzcG9uc2UsXG4gICAgUmFhaW5BcGlSYWRhcnNVcGRhdGVSZXF1ZXN0Qm9keSxcbiAgICBSYWFpbkFwaVJhaW5zQ3VtdWxhdGl2ZUNhcnRlc2lhbk1hcFJlcXVlc3QsXG4gICAgUmFhaW5BcGlSYWluc0N1bXVsYXRpdmVDYXJ0ZXNpYW5NYXBSZXNwb25zZSxcbiAgICBSYWFpbkFwaVJhaW5zQ3VtdWxhdGl2ZUNvbXBhcmVzUmVxdWVzdCxcbiAgICBSYWFpbkFwaVJhaW5zQ3VtdWxhdGl2ZUNvbXBhcmVzUmVzcG9uc2UsXG4gICAgUmFhaW5BcGlSYWluc0N1bXVsYXRpdmVDdW11bGF0aXZlUmVzcG9uc2UsXG4gICAgUmFhaW5BcGlSYWluc0ZpbmRBbGxNaW5lUmVxdWVzdCxcbiAgICBSYWFpbkFwaVJhaW5zRmluZEFsbE1pbmVSZXNwb25zZSxcbiAgICBSYWFpbkFwaVJhaW5zRmluZE9uZVJlc3BvbnNlLFxuICAgIFJhYWluQXBpUmFpbnNGaW5kT25lVGltZWZyYW1lQ3VtdWxhdGl2ZVJlcXVlc3QsXG4gICAgUmFhaW5BcGlSYWluc0ZpbmRPbmVUaW1lZnJhbWVDdW11bGF0aXZlUmVzcG9uc2UsXG4gICAgUmFhaW5BcGlSYWluc0dldENvdW50c1JlcXVlc3QsXG4gICAgUmFhaW5BcGlSYWluc0dldENvdW50c1Jlc3BvbnNlLFxuICAgIFJhYWluQXBpUmFpbnNJbmRpY2F0b3JzUmVxdWVzdCxcbiAgICBSYWFpbkFwaVJhaW5zSW5kaWNhdG9yc1Jlc3BvbnNlLFxuICAgIFJhYWluQXBpUmFpbnNQcm9ncmVzc1Jlc3BvbnNlLFxuICAgIFJhYWluQXBpUmFpbnNQcm92aWRlcnNSZXNwb25zZSxcbiAgICBSYWFpbkFwaVRlYW1zRmluZEFsbE1pbmVSZXF1ZXN0LFxuICAgIFJhYWluQXBpVGVhbXNGaW5kT25lUmVzcG9uc2UsXG4gICAgUmFkYXJOb2RlLFxuICAgIFJhaW5Db21wdXRhdGlvbk1hcCxcbiAgICBSYWluQ29tcHV0YXRpb25RdWFsaXR5LFxuICAgIFJhaW5Ob2RlLFxuICAgIFNwZWVkTWF0cml4Q29udGFpbmVyLFxuICAgIFRlYW1Ob2RlLFxufSBmcm9tICdyYWFpbi1tb2RlbCc7XG5cbmltcG9ydCB7U3RvcmFnZX0gZnJvbSAnLi9zdG9yYWdlLnNlcnZpY2UnO1xuXG5pbXBvcnQge0ZpZGpTdG9yYWdlLCBGaWRqU3RvcmFnZU5vZGV9IGZyb20gJy4vZmlkai1zdG9yYWdlLm1vZGVsJztcbmltcG9ydCB7RXJyb3JJbnRlcmZhY2UsIEZpZGpTZXJ2aWNlLCBMb2dnZXJMZXZlbEVudW19IGZyb20gJ2ZpZGotYW5ndWxhcic7XG5pbXBvcnQge1hZVHlwZX0gZnJvbSAnLi94eXR5cGUnO1xuaW1wb3J0IHtHYXVnZU5vZGVGaWx0ZXJ9IGZyb20gJy4vdG9vbHMnO1xuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFByb2ZpbGVTZXJ2aWNlIHtcbiAgICBwdWJsaWMgcmVhZHlGb3JTeW5jOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj47XG4gICAgcHVibGljIGFzVGVhbUlkOiBzdHJpbmc7XG5cbiAgICBwcm90ZWN0ZWQgZW1haWw6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgaXNEZW1vOiBib29sZWFuO1xuICAgIHByb3RlY3RlZCByb2xlczogQXJyYXk8c3RyaW5nPjtcbiAgICBwcm90ZWN0ZWQgbm9kZURhdGE6IEZpZGpTdG9yYWdlTm9kZTtcbiAgICBwcm90ZWN0ZWQgZmlkalN0b3JhZ2U6IEZpZGpTdG9yYWdlO1xuICAgIHByb3RlY3RlZCBoYXZlVHJ5VG9SZWNvbm5lY3Q6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJvdGVjdGVkIHN0b3JhZ2U6IFN0b3JhZ2UsXG4gICAgICAgIHByb3RlY3RlZCBmaWRqU2VydmljZTogRmlkalNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBodHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXG4gICAgKSB7XG4gICAgICAgIHRoaXMuZW1haWwgPSB0aGlzLnN0b3JhZ2UuZ2V0KCdyYWFpbi1lbWFpbCcpO1xuICAgICAgICB0aGlzLmFzVGVhbUlkID0gdGhpcy5zdG9yYWdlLmdldCgncmFhaW4tYXNUZWFtSWQnKTtcbiAgICAgICAgdGhpcy5yZWFkeUZvclN5bmMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICAgICAgdGhpcy5yb2xlcyA9IFtdO1xuICAgICAgICB0aGlzLmZpZGpTdG9yYWdlID0gbmV3IEZpZGpTdG9yYWdlKHN0b3JhZ2UpO1xuICAgICAgICB0aGlzLmlzRGVtb01vZGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBnZXQgaXNEZW1vTW9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNEZW1vO1xuICAgIH1cblxuICAgIHNldCBpc0RlbW9Nb2RlKG1vZGUpIHtcbiAgICAgICAgdGhpcy5pc0RlbW8gPSBtb2RlID8gbW9kZSA6IHRydWU7XG4gICAgICAgIHRoaXMuZmlkalN0b3JhZ2Uuc2V0RGVtb01vZGUodGhpcy5pc0RlbW8pO1xuICAgIH1cblxuICAgIGdldCBkZWZhdWx0VXJsRm9yQVBJKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdG9yYWdlLmdldCgncmFhaW4tdXJsRm9yQVBJJyk7XG4gICAgfVxuXG4gICAgc2V0IGRlZmF1bHRVcmxGb3JBUEkodXJsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zdG9yYWdlLnNldCgncmFhaW4tdXJsRm9yQVBJJywgdXJsKTtcbiAgICB9XG5cbiAgICBhc3luYyByZWZyZXNoUHJvZmlsZSgpOiBQcm9taXNlPEZpZGpTdG9yYWdlTm9kZT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5ub2RlRGF0YSA9IGF3YWl0IHRoaXMuZmlkalN0b3JhZ2UuZ2V0UmVmcmVzaGVkTm9kZUNvcHkodGhpcy5maWRqU2VydmljZSk7XG4gICAgICAgICAgICB0aGlzLnNldFJvbGVzKGF3YWl0IHRoaXMuZmlkalNlcnZpY2UuZ2V0Um9sZXMoKSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ub2RlRGF0YTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgaXNDb25uZWN0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpZGpTZXJ2aWNlLmlzQ29ubmVjdGVkKCk7XG4gICAgfVxuXG4gICAgZ2V0RW1haWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVtYWlsID8/IHRoaXMuc3RvcmFnZS5nZXQoJ3JhYWluLWVtYWlsJywgdGhpcy5lbWFpbCk7XG4gICAgfVxuXG4gICAgc2V0RW1haWwoZW1haWw6IHN0cmluZykge1xuICAgICAgICB0aGlzLmVtYWlsID0gZW1haWw7XG4gICAgICAgIHRoaXMuc3RvcmFnZS5zZXQoJ3JhYWluLWVtYWlsJywgdGhpcy5lbWFpbCk7XG4gICAgfVxuXG4gICAgYXN5bmMgbG9nb3V0KGZpZGpLZXk6IHN0cmluZywgZmlkalByb2Q6IGJvb2xlYW4pIHtcbiAgICAgICAgLy8gdGhpcy5zdG9yYWdlLnJlbW92ZSgncmFhaW4tZW1haWwnKTtcblxuICAgICAgICBpZiAoIWZpZGpLZXkpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5maWRqU2VydmljZS5sb2dpbkluRGVtb01vZGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlYWR5Rm9yU3luYy5uZXh0KHRydWUpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignaW5pdEZpZGogY2F0Y2ggcGI6ICcsIGVycik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRoaXMuZmlkalNlcnZpY2UubG9nb3V0KHRydWUpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLmluaXQoZmlkaktleSwge1xuICAgICAgICAgICAgICAgIGxvZ0xldmVsOiBMb2dnZXJMZXZlbEVudW0uV0FSTiwgLy8gZmlkalByb2QgPyBMb2dnZXJMZXZlbEVudW0uV0FSTiA6IExvZ2dlckxldmVsRW51bS5JTkZPLFxuICAgICAgICAgICAgICAgIGNyeXB0bzogZmFsc2UsXG4gICAgICAgICAgICAgICAgcHJvZDogZmlkalByb2QsXG4gICAgICAgICAgICAgICAgdXNlREI6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnJlYWR5Rm9yU3luYy5uZXh0KHRydWUpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2luaXRGaWRqIGNhdGNoIHBiOiAnLCBlcnIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgY2hlY2tFcnJvcihlcnJvcjogRXJyb3JJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKGVycm9yLmNvZGUgPT09IDQwMSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdQYiBvbiBhdXRoJyk7XG4gICAgICAgICAgICBpZiAodGhpcy5yb3V0ZXIudXJsLmluZGV4T2YoJ2xvZ2luJykgPCAwKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5maWRqU2VydmljZS5sb2dvdXQoKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChpZ25vcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElnbm9yZSBsb2dvdXQgZXJyb3JzIGFzIHdlJ3JlIHJlZGlyZWN0aW5nIHRvIGxvZ291dCBwYWdlIGFueXdheVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nb3RvTG91dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgZ290b0xvdXQoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAodGhpcy5yb3V0ZXIudXJsLmluZGV4T2YoJ2xvZ2luJykgPiAtMSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy9sb2dvdXQnLCB7XG4gICAgICAgICAgICAgICAgc2tpcExvY2F0aW9uQ2hhbmdlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHJlcGxhY2VVcmw6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignZ290b0xvdXQgZXJyb3I6ICcsIGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgZ290b0xvZ2luKCkge1xuICAgICAgICBpZiAodGhpcy5yb3V0ZXIudXJsLmluZGV4T2YoJ2xvZ2luJykgPiAtMSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy8nLCB7c2tpcExvY2F0aW9uQ2hhbmdlOiB0cnVlfSk7XG4gICAgICAgIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2xvZ2luJ10pO1xuICAgIH1cblxuICAgIGlzTG9nZ2VkSW4oKSB7XG4gICAgICAgIGNvbnN0IGxvZ2dlZEluID0gdGhpcy5maWRqU2VydmljZS5pc0xvZ2dlZEluKCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdpc0xvZ2dlZEluOiAnLCBsb2dnZWRJbik7XG4gICAgICAgIHJldHVybiBsb2dnZWRJbjtcbiAgICB9XG5cbiAgICBuZWVkc0Nvbm5lY3Rpb25SZWZyZXNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5maWRqU2VydmljZS5uZWVkc1JlZnJlc2goKTtcbiAgICB9XG5cbiAgICBhc3luYyBjb25uZWN0aW9uUmVmcmVzaCgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5maWRqU2VydmljZS5yZWZyZXNoKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgc3RvcmVBbGwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpZGpTdG9yYWdlLnN0b3JlRGF0YSh0aGlzLmZpZGpTZXJ2aWNlLCB0aGlzLm5vZGVEYXRhKTtcbiAgICB9XG5cbiAgICBpc0FkbWluKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yb2xlcy5pbmRleE9mKCdhZG1pbicpID4gLTE7XG4gICAgfVxuXG4gICAgLy8gPT09IE5vdGlmaWNhdGlvbnMgPT09XG5cbiAgICBhc3luYyBjcmVhdGVOb3RpZmljYXRpb24ocmFpbklkOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZykge1xuICAgICAgICBjb25zdCBkYXRhOiBSYWFpbkFwaU5vdGlmaWNhdGlvbnNBZGRSZXF1ZXN0Qm9keSA9IHtcbiAgICAgICAgICAgIHJhaW46IHJhaW5JZCxcbiAgICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIH07XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PFxuICAgICAgICAgICAgICAgIFJhYWluQXBpTm90aWZpY2F0aW9uc0FkZFJlcXVlc3RCb2R5LFxuICAgICAgICAgICAgICAgIFJhYWluQXBpTm90aWZpY2F0aW9uc0FkZFJlc3BvbnNlXG4gICAgICAgICAgICA+KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdub3RpZmljYXRpb25zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnUE9TVCcsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9ub3RpZmljYXRpb25zJyxcbiAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEV2ZW50Tm9kZShyZXNwLmRhdGEpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBhc3luYyBnZXROb3RpZmljYXRpb25zKHJhaW5JZDogc3RyaW5nKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0eXBlIE5vdGlmaWNhdGlvbnNGaW5kUGFyYW1zID0gUGFydGlhbDxSYWFpbkFwaU5vdGlmaWNhdGlvbnNGaW5kQWxsTWluZVJlcXVlc3Q+O1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zOiBOb3RpZmljYXRpb25zRmluZFBhcmFtcyA9IHtyYWluOiByYWluSWR9O1xuICAgICAgICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSBCdWlsZFF1ZXJ5U3RyaW5nPE5vdGlmaWNhdGlvbnNGaW5kUGFyYW1zPihwYXJhbXMpO1xuICAgICAgICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQ8XG4gICAgICAgICAgICAgICAgdm9pZCxcbiAgICAgICAgICAgICAgICBSYWFpbkFwaU5vdGlmaWNhdGlvbnNGaW5kQWxsTWluZVJlc3BvbnNlXG4gICAgICAgICAgICA+KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdub3RpZmljYXRpb25zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHF1ZXJ5U3RyaW5nID8gJz8nICsgcXVlcnlTdHJpbmcgOiAnJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL25vdGlmaWNhdGlvbnMnLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiByZXNwLmRhdGEubm90aWZpY2F0aW9ucy5tYXAoKG4pID0+IG5ldyBFdmVudE5vZGUobikpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRBbGxOb3RpZmljYXRpb25zKCk6IFByb21pc2U8RXZlbnROb2RlW10+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PFxuICAgICAgICAgICAgICAgIHZvaWQsXG4gICAgICAgICAgICAgICAgUmFhaW5BcGlOb3RpZmljYXRpb25zRmluZEFsbE1pbmVSZXNwb25zZVxuICAgICAgICAgICAgPih7XG4gICAgICAgICAgICAgICAga2V5OiAnbm90aWZpY2F0aW9ucycsXG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9ub3RpZmljYXRpb25zJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVzcC5kYXRhLm5vdGlmaWNhdGlvbnMubWFwKChuKSA9PiBuZXcgRXZlbnROb2RlKG4pKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIC8vID09PSBUZWFtcyA9PT1cblxuICAgIGFzeW5jIGdldFRlYW1zKCk6IFByb21pc2U8QXJyYXk8VGVhbU5vZGU+PiB7XG4gICAgICAgIGNvbnN0IHRlYW1zID0gW107XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHt9O1xuICAgICAgICBjb25zdCBxdWVyeVN0cmluZyA9IEJ1aWxkUXVlcnlTdHJpbmc8UmFhaW5BcGlUZWFtc0ZpbmRBbGxNaW5lUmVxdWVzdD4ocGFyYW1zKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PFxuICAgICAgICAgICAgICAgIHZvaWQsXG4gICAgICAgICAgICAgICAge3RlYW1zOiBSZXR1cm5UeXBlPFRlYW1Ob2RlWyd0b0pTT04nXT5bXX1cbiAgICAgICAgICAgID4oe1xuICAgICAgICAgICAgICAgIGtleTogJ3RlYW1zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHF1ZXJ5U3RyaW5nID8gJz8nICsgcXVlcnlTdHJpbmcgOiAnJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3RlYW1zJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZm9yIChjb25zdCB0ZWFtIG9mIHJlc3AuZGF0YS50ZWFtcykge1xuICAgICAgICAgICAgICAgIHRlYW1zLnB1c2gobmV3IFRlYW1Ob2RlKHRlYW0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0ZWFtcztcbiAgICB9XG5cbiAgICBhc3luYyBnZXRUZWFtKHRlYW1JZDogc3RyaW5nKTogUHJvbWlzZTxUZWFtTm9kZT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQ8dm9pZCwgUmFhaW5BcGlUZWFtc0ZpbmRPbmVSZXNwb25zZT4oe1xuICAgICAgICAgICAgICAgIGtleTogJ3RlYW1zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHRlYW1JZCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3RlYW1zJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBUZWFtTm9kZShyZXNwLmRhdGEpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyA9PT0gUmFkYXJzID09PVxuXG4gICAgYXN5bmMgZ2V0UmFkYXJzKG5hbWU/OiBzdHJpbmcpOiBQcm9taXNlPEFycmF5PFJhZGFyTm9kZT4+IHtcbiAgICAgICAgY29uc3QgcmFkYXJzID0gW107XG4gICAgICAgIGNvbnN0IHBhcmFtczogUmFhaW5BcGlSYWRhcnNGaW5kQWxsTWluZVJlcXVlc3QgPSB7fTtcbiAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICAgIHBhcmFtcy5uYW1lID0gbmFtZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBxdWVyeVN0cmluZyA9IEJ1aWxkUXVlcnlTdHJpbmc8UmFhaW5BcGlSYWRhcnNGaW5kQWxsTWluZVJlcXVlc3Q+KHBhcmFtcyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDxcbiAgICAgICAgICAgICAgICB2b2lkLFxuICAgICAgICAgICAgICAgIFJhYWluQXBpUmFkYXJzRmluZEFsbE1pbmVSZXNwb25zZVxuICAgICAgICAgICAgPih7XG4gICAgICAgICAgICAgICAga2V5OiAncmFkYXJzJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHF1ZXJ5U3RyaW5nID8gJz8nICsgcXVlcnlTdHJpbmcgOiAnJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhZGFycycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgciBvZiByZXNwLmRhdGEucmFkYXJzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmFkYXIgPSBuZXcgUmFkYXJOb2RlKHIpO1xuICAgICAgICAgICAgICAgIHJhZGFycy5wdXNoKHJhZGFyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByYWRhcnM7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0UmFkYXIoaWQ6IHN0cmluZyk6IFByb21pc2U8UmFkYXJOb2RlPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDx2b2lkLCBSYWFpbkFwaVJhZGFyc0ZpbmRPbmVSZXNwb25zZT4oXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBrZXk6ICdyYWRhcnMnLFxuICAgICAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiBpZCxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWRhcnMnLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFJhZGFyTm9kZShyZXNwLmRhdGEpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBhc3luYyBwdXRSYWRhcihyYWRhck5vZGU6IFJhZGFyTm9kZSk6IFByb21pc2U8UmFkYXJOb2RlPiB7XG4gICAgICAgIGNvbnN0IGRhdGE6IFJhYWluQXBpUmFkYXJzVXBkYXRlUmVxdWVzdEJvZHkgPSB7XG4gICAgICAgICAgICBuYW1lOiByYWRhck5vZGUubmFtZSxcbiAgICAgICAgfTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQ8XG4gICAgICAgICAgICAgICAgUmFhaW5BcGlSYWRhcnNVcGRhdGVSZXF1ZXN0Qm9keSxcbiAgICAgICAgICAgICAgICBSZXR1cm5UeXBlPFJhZGFyTm9kZVsndG9KU09OJ10+XG4gICAgICAgICAgICA+KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdyYWRhcnMnLFxuICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogcmFkYXJOb2RlLmlkLFxuICAgICAgICAgICAgICAgIHZlcmI6ICdQVVQnLFxuICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWRhcnMvJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3IFJhZGFyTm9kZShyZXNwLmRhdGEpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBnZXRMb25lbHlSYWRhcnMocmFpbnM6IFJhaW5Ob2RlW10pOiBQcm9taXNlPFJhZGFyTm9kZVtdPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDxcbiAgICAgICAgICAgICAgICB2b2lkLFxuICAgICAgICAgICAgICAgIFJhYWluQXBpUmFkYXJzRmluZEFsbE1pbmVSZXNwb25zZVxuICAgICAgICAgICAgPih7XG4gICAgICAgICAgICAgICAga2V5OiAncmFkYXJzJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhZGFycycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGxvbmVseVJhZGFyczogUmFkYXJOb2RlW10gPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IHJhZGFycyA9IHJlc3AuZGF0YS5yYWRhcnM7XG4gICAgICAgICAgICByYWRhcnMuZm9yRWFjaCgocmFkYXIpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgZm91bmQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByYWlucy5mb3JFYWNoKChyYWluKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJkSWQgPSByYWluLmdldExpbmsoUmFkYXJOb2RlLlRZUEUpLmdldElkKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZElkID09PSByYWRhci5pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICBsb25lbHlSYWRhcnMucHVzaChuZXcgUmFkYXJOb2RlKHJhZGFyKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gbG9uZWx5UmFkYXJzO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGFzeW5jIGdldFJhaW5UaW1lZnJhbWUoXG4gICAgICAgIHJhaW5JZDogc3RyaW5nLFxuICAgICAgICBiZWdpbjogRGF0ZSxcbiAgICAgICAgZW5kOiBEYXRlLFxuICAgICAgICBmb3JjZWQgPSBmYWxzZSxcbiAgICAgICAgcHJvdmlkZXIgPSAnUmFhaW4nLFxuICAgICAgICB0aW1lU3RlcEluTWludXRlcyA9IDEwXG4gICAgKTogUHJvbWlzZTxSYWluTm9kZT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zOiBSYWFpbkFwaVJhaW5zRmluZE9uZVRpbWVmcmFtZUN1bXVsYXRpdmVSZXF1ZXN0ID0ge1xuICAgICAgICAgICAgICAgIGZvcm1hdDogJ3RpbWVmcmFtZUN1bXVsYXRpdmUnLFxuICAgICAgICAgICAgICAgIHByb3ZpZGVyLFxuICAgICAgICAgICAgICAgIHRpbWVTdGVwSW5NaW51dGVzOiBTdHJpbmcodGltZVN0ZXBJbk1pbnV0ZXMpLFxuICAgICAgICAgICAgICAgIGJlZ2luOiBiZWdpbj8udG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICBlbmQ6IGVuZD8udG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoZm9yY2VkKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zLmZvcmNlZCA9ICd0cnVlJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID1cbiAgICAgICAgICAgICAgICBCdWlsZFF1ZXJ5U3RyaW5nPFJhYWluQXBpUmFpbnNGaW5kT25lVGltZWZyYW1lQ3VtdWxhdGl2ZVJlcXVlc3Q+KHBhcmFtcyk7XG4gICAgICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDxcbiAgICAgICAgICAgICAgICB2b2lkLFxuICAgICAgICAgICAgICAgIFJhYWluQXBpUmFpbnNGaW5kT25lVGltZWZyYW1lQ3VtdWxhdGl2ZVJlc3BvbnNlXG4gICAgICAgICAgICA+KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdyYWlucycsXG4gICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiByYWluSWQgKyAocXVlcnlTdHJpbmcgPyAnPycgKyBxdWVyeVN0cmluZyA6ICcnKSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgcmFpbk5vZGUgPSBuZXcgUmFpbk5vZGUocmVzcC5kYXRhLnRpbWVmcmFtZUN1bXVsYXRpdmUpO1xuICAgICAgICAgICAgcmFpbk5vZGUubmFtZSArPSAnLnJhZGFyLnRpbWVmcmFtZUN1bXVsYXRpdmUnO1xuICAgICAgICAgICAgcmV0dXJuIHJhaW5Ob2RlO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gPT09IFJhaW5zID09PVxuXG4gICAgYXN5bmMgZ2V0UmFpbnMobmFtZT86IHN0cmluZyk6IFByb21pc2U8QXJyYXk8UmFpbk5vZGU+PiB7XG4gICAgICAgIGNvbnN0IHJhaW5zID0gW107XG4gICAgICAgIGNvbnN0IHBhcmFtczogUmFhaW5BcGlSYWluc0ZpbmRBbGxNaW5lUmVxdWVzdCA9IHt9O1xuICAgICAgICBpZiAobmFtZSkge1xuICAgICAgICAgICAgcGFyYW1zLm5hbWUgPSBuYW1lO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gQnVpbGRRdWVyeVN0cmluZzxSYWFpbkFwaVJhaW5zRmluZEFsbE1pbmVSZXF1ZXN0PihwYXJhbXMpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQ8XG4gICAgICAgICAgICAgICAgdm9pZCxcbiAgICAgICAgICAgICAgICBSYWFpbkFwaVJhaW5zRmluZEFsbE1pbmVSZXNwb25zZVxuICAgICAgICAgICAgPih7XG4gICAgICAgICAgICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgICAgICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogcXVlcnlTdHJpbmcgPyAnPycgKyBxdWVyeVN0cmluZyA6ICcnLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFpbnMnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJhaW4gb2YgcmVzcC5kYXRhLnJhaW5zKSB7XG4gICAgICAgICAgICAgICAgcmFpbnMucHVzaChuZXcgUmFpbk5vZGUocmFpbikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJhaW5zO1xuICAgIH1cblxuICAgIGFzeW5jIGdldFJhaW4oaWQ6IHN0cmluZyk6IFByb21pc2U8UmFpbk5vZGU+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PHZvaWQsIFJhYWluQXBpUmFpbnNGaW5kT25lUmVzcG9uc2U+KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdyYWlucycsXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiBpZCxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zLycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmFpbk5vZGUocmVzcC5kYXRhKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vID09PSBDb3VudFxuXG4gICAgYXN5bmMgZ2V0Q291bnRzKFxuICAgICAgICByYWluSWQ6IHN0cmluZyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgcmFuZ2U6ICdob3VyJyB8ICdkYXknIHwgJ21vbnRoJyB8ICd5ZWFyJztcbiAgICAgICAgICAgIHBlcmlvZEJlZ2luOiBEYXRlO1xuICAgICAgICB9XG4gICAgKTogUHJvbWlzZTx7XG4gICAgICAgIHBlcmNlbnRJbWFnZXM6IFhZVHlwZVtdO1xuICAgICAgICBwZXJjZW50UmFpbnk6IFhZVHlwZVtdO1xuICAgICAgICBwZXJjZW50UTogWFlUeXBlW107XG4gICAgICAgIHF1ZXVlUnVubmluZzogbnVtYmVyO1xuICAgIH0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtczogUmFhaW5BcGlSYWluc0dldENvdW50c1JlcXVlc3QgPSB7XG4gICAgICAgICAgICAgICAgcmFuZ2U6IG9wdGlvbnMucmFuZ2UsXG4gICAgICAgICAgICAgICAgYmVnaW46IG9wdGlvbnMucGVyaW9kQmVnaW4udG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBxdWVyeVN0cmluZyA9IEJ1aWxkUXVlcnlTdHJpbmc8UmFhaW5BcGlSYWluc0dldENvdW50c1JlcXVlc3Q+KHBhcmFtcyk7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PFxuICAgICAgICAgICAgICAgIHZvaWQsXG4gICAgICAgICAgICAgICAgUmFhaW5BcGlSYWluc0dldENvdW50c1Jlc3BvbnNlXG4gICAgICAgICAgICA+KHtcbiAgICAgICAgICAgICAgICBrZXk6ICdyYWlucycsXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiByYWluSWQgKyAnL2NvdW50cycgKyAocXVlcnlTdHJpbmcgPyAnPycgKyBxdWVyeVN0cmluZyA6ICcnKSxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zLycsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgY291bnRzID0gcmVzcC5kYXRhLmNvdW50cy5yZXN1bHQ7XG4gICAgICAgICAgICBjb25zdCBwZXJjZW50SW1hZ2VzOiBYWVR5cGVbXSA9IFtdLFxuICAgICAgICAgICAgICAgIHBlcmNlbnRSYWlueTogWFlUeXBlW10gPSBbXSxcbiAgICAgICAgICAgICAgICBwZXJjZW50UTogWFlUeXBlW10gPSBbXTtcblxuICAgICAgICAgICAgY291bnRzLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMuc2V0RGF0ZUNvbXBvbmVudHMob3B0aW9ucy5wZXJpb2RCZWdpbiwgYyk7XG4gICAgICAgICAgICAgICAgcGVyY2VudEltYWdlcy5wdXNoKG5ldyBYWVR5cGUoYy5wZXJjZW50SW1hZ2VzID8/IDAsIE5hTiwgTmFOLCBsYWJlbCkpO1xuICAgICAgICAgICAgICAgIHBlcmNlbnRSYWlueS5wdXNoKG5ldyBYWVR5cGUoYy5wZXJjZW50UmFpbnkgPz8gMCwgTmFOLCBOYU4sIGxhYmVsKSk7XG4gICAgICAgICAgICAgICAgcGVyY2VudFEucHVzaChuZXcgWFlUeXBlKGMucGVyY2VudFEgPz8gMCwgTmFOLCBOYU4sIGxhYmVsKSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwZXJjZW50SW1hZ2VzLFxuICAgICAgICAgICAgICAgIHBlcmNlbnRSYWlueSxcbiAgICAgICAgICAgICAgICBwZXJjZW50USxcbiAgICAgICAgICAgICAgICBxdWV1ZVJ1bm5pbmc6IHJlc3AuZGF0YS5xdWV1ZVJ1bm5pbmcsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0Q291bnRzSG91cihcbiAgICAgICAgcmFpbklkOiBzdHJpbmcsXG4gICAgICAgIG9wdGlvbnM6IHtwZXJpb2RCZWdpbjogRGF0ZX1cbiAgICApOiBQcm9taXNlPHtcbiAgICAgICAgcGVyY2VudEltYWdlczogWFlUeXBlW107XG4gICAgICAgIHJhaW55Q291bnQ6IFhZVHlwZVtdO1xuICAgICAgICByYWlueVN1bTogWFlUeXBlW107XG4gICAgICAgIHF1ZXVlUnVubmluZzogbnVtYmVyO1xuICAgIH0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtczogUmFhaW5BcGlSYWluc0dldENvdW50c1JlcXVlc3QgPSB7XG4gICAgICAgICAgICAgICAgcmFuZ2U6ICdob3VyJyxcbiAgICAgICAgICAgICAgICBiZWdpbjogb3B0aW9ucy5wZXJpb2RCZWdpbi50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gQnVpbGRRdWVyeVN0cmluZzxSYWFpbkFwaVJhaW5zR2V0Q291bnRzUmVxdWVzdD4ocGFyYW1zKTtcblxuICAgICAgICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQ8XG4gICAgICAgICAgICAgICAgdm9pZCxcbiAgICAgICAgICAgICAgICBSYWFpbkFwaVJhaW5zR2V0Q291bnRzUmVzcG9uc2VcbiAgICAgICAgICAgID4oe1xuICAgICAgICAgICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHJhaW5JZCArICcvY291bnRzJyArIChxdWVyeVN0cmluZyA/ICc/JyArIHF1ZXJ5U3RyaW5nIDogJycpLFxuICAgICAgICAgICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFpbnMvJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBjb3VudHMgPSByZXNwLmRhdGEuY291bnRzLnJlc3VsdDtcbiAgICAgICAgICAgIGNvbnN0IHBlcmNlbnRJbWFnZXM6IFhZVHlwZVtdID0gW10sXG4gICAgICAgICAgICAgICAgcmFpbnlTdW06IFhZVHlwZVtdID0gW10sXG4gICAgICAgICAgICAgICAgcmFpbnlDb3VudDogWFlUeXBlW10gPSBbXTtcblxuICAgICAgICAgICAgY291bnRzLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMuc2V0RGF0ZUNvbXBvbmVudHMob3B0aW9ucy5wZXJpb2RCZWdpbiwgYyk7XG4gICAgICAgICAgICAgICAgcGVyY2VudEltYWdlcy5wdXNoKG5ldyBYWVR5cGUoYy5wZXJjZW50SW1hZ2VzID8/IDAsIE5hTiwgTmFOLCBsYWJlbCkpO1xuICAgICAgICAgICAgICAgIHJhaW55Q291bnQucHVzaChuZXcgWFlUeXBlKGMucmFpbnlDb3VudCA/PyAwLCBOYU4sIE5hTiwgbGFiZWwpKTtcbiAgICAgICAgICAgICAgICByYWlueVN1bS5wdXNoKG5ldyBYWVR5cGUoYy5yYWlueVN1bSA/PyAwLCBOYU4sIE5hTiwgbGFiZWwpKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHBlcmNlbnRJbWFnZXMsXG4gICAgICAgICAgICAgICAgcmFpbnlDb3VudCxcbiAgICAgICAgICAgICAgICByYWlueVN1bSxcbiAgICAgICAgICAgICAgICBxdWV1ZVJ1bm5pbmc6IHJlc3AuZGF0YS5xdWV1ZVJ1bm5pbmcsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gPT09IENvbXB1dGluZyA9PT1cblxuICAgIGFzeW5jIGdldFJhaW5Db21wdXRhdGlvbkN1bXVsYXRpdmVDYXJ0ZXNpYW5NYXBCeUlkKFxuICAgICAgICByYWluSWQ6IHN0cmluZyxcbiAgICAgICAgcmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZUlkOiBzdHJpbmdcbiAgICApOiBQcm9taXNlPFJhaW5Db21wdXRhdGlvbk1hcD4ge1xuICAgICAgICBjb25zdCBwYXJhbXM6IFJhYWluQXBpUmFpbnNDdW11bGF0aXZlQ2FydGVzaWFuTWFwUmVxdWVzdCA9IHtmb3JtYXQ6ICdjYXJ0ZXNpYW4tbWFwJ307XG4gICAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gQnVpbGRRdWVyeVN0cmluZzxSYWFpbkFwaVJhaW5zQ3VtdWxhdGl2ZUNhcnRlc2lhbk1hcFJlcXVlc3Q+KHBhcmFtcyk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDxcbiAgICAgICAgICAgICAgICB2b2lkLFxuICAgICAgICAgICAgICAgIFJhYWluQXBpUmFpbnNDdW11bGF0aXZlQ2FydGVzaWFuTWFwUmVzcG9uc2VcbiAgICAgICAgICAgID4oe1xuICAgICAgICAgICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IGAke3JhaW5JZH0vY3VtdWxhdGl2ZXMvJHtyYWluQ29tcHV0YXRpb25DdW11bGF0aXZlSWR9PyR7cXVlcnlTdHJpbmd9YCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5kYXRhWydjYXJ0ZXNpYW4tbWFwJ10pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmFpbkNvbXB1dGF0aW9uTWFwID0gbmV3IFJhaW5Db21wdXRhdGlvbk1hcChyZXNwb25zZS5kYXRhWydjYXJ0ZXNpYW4tbWFwJ10pO1xuICAgICAgICAgICAgcmFpbkNvbXB1dGF0aW9uTWFwLm5hbWUgPSByYWluSWQgKyAnLnJhaW4uY2FydGVzaWFuLW1hcCc7XG4gICAgICAgICAgICByZXR1cm4gcmFpbkNvbXB1dGF0aW9uTWFwO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0UmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZUN1bXVsYXRpdmVzTWFwQnlJZChcbiAgICAgICAgcmFpbklkOiBzdHJpbmcsXG4gICAgICAgIHJhaW5Db21wdXRhdGlvbkN1bXVsYXRpdmVJZDogc3RyaW5nLFxuICAgICAgICBjdW11bGF0aXZlSG91cnM6IG51bWJlclxuICAgICk6IFByb21pc2U8UmFpbkNvbXB1dGF0aW9uTWFwPiB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5UGF0aCA9IGAke3JhaW5JZH0vY3VtdWxhdGl2ZXMvJHtyYWluQ29tcHV0YXRpb25DdW11bGF0aXZlSWR9L2N1bXVsYXRpdmUvJHtjdW11bGF0aXZlSG91cnN9YDtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PFxuICAgICAgICAgICAgICAgIHZvaWQsXG4gICAgICAgICAgICAgICAgUmFhaW5BcGlSYWluc0N1bXVsYXRpdmVDdW11bGF0aXZlUmVzcG9uc2VcbiAgICAgICAgICAgID4oe1xuICAgICAgICAgICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHF1ZXJ5UGF0aCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5kYXRhWydjdW11bGF0aXZlJ10pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmFpbkNvbXB1dGF0aW9uTWFwID0gbmV3IFJhaW5Db21wdXRhdGlvbk1hcChyZXNwb25zZS5kYXRhWydjdW11bGF0aXZlJ10pO1xuICAgICAgICAgICAgcmFpbkNvbXB1dGF0aW9uTWFwLm5hbWUgPSByYWluSWQgKyAnLnJhaW4uY3VtdWxhdGl2ZS1jdW11bGF0aXZlJztcbiAgICAgICAgICAgIHJldHVybiByYWluQ29tcHV0YXRpb25NYXA7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRSYWluQ3VtdWxhdGl2ZUNvbXBhcmVCeURhdGUoXG4gICAgICAgIHJhaW5Ob2RlOiBSYWluTm9kZSxcbiAgICAgICAgcmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZUlkOiBzdHJpbmcsXG4gICAgICAgIGRhdGU6IERhdGVcbiAgICApOiBQcm9taXNlPFJhaW5Db21wdXRhdGlvblF1YWxpdHk+IHtcbiAgICAgICAgY29uc3QgcGFyYW1zOiBSYWFpbkFwaVJhaW5zQ3VtdWxhdGl2ZUNvbXBhcmVzUmVxdWVzdCA9IHtkYXRlOiBkYXRlLnRvSVNPU3RyaW5nKCl9O1xuICAgICAgICBjb25zdCBxdWVyeVN0cmluZyA9IEJ1aWxkUXVlcnlTdHJpbmc8UmFhaW5BcGlSYWluc0N1bXVsYXRpdmVDb21wYXJlc1JlcXVlc3Q+KHBhcmFtcyk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDxcbiAgICAgICAgICAgICAgICB2b2lkLFxuICAgICAgICAgICAgICAgIFJhYWluQXBpUmFpbnNDdW11bGF0aXZlQ29tcGFyZXNSZXNwb25zZVxuICAgICAgICAgICAgPih7XG4gICAgICAgICAgICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgICAgICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogYCR7cmFpbk5vZGUuaWR9L2N1bXVsYXRpdmVzLyR7cmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZUlkfS9jb21wYXJlcz8ke3F1ZXJ5U3RyaW5nfWAsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9yYWlucycsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgcXVhbGl0eUpzb24gPSByZXNwb25zZS5kYXRhLnF1YWxpdGllc1swXTtcbiAgICAgICAgICAgIGNvbnN0IHJhaW5Db21wdXRhdGlvblF1YWxpdHkgPSBuZXcgUmFpbkNvbXB1dGF0aW9uUXVhbGl0eShxdWFsaXR5SnNvbik7XG4gICAgICAgICAgICByYWluQ29tcHV0YXRpb25RdWFsaXR5LnF1YWxpdHlTcGVlZE1hdHJpeENvbnRhaW5lciA9XG4gICAgICAgICAgICAgICAgU3BlZWRNYXRyaXhDb250YWluZXIuQ3JlYXRlRnJvbUpzb24oXG4gICAgICAgICAgICAgICAgICAgIHJhaW5Db21wdXRhdGlvblF1YWxpdHkucXVhbGl0eVNwZWVkTWF0cml4Q29udGFpbmVyXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiByYWluQ29tcHV0YXRpb25RdWFsaXR5O1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0UmFpblByb2dyZXNzKHJhaW5JZDogc3RyaW5nKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5UGF0aCA9ICcnICsgcmFpbklkICsgJy9wcm9ncmVzcyc7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQ8XG4gICAgICAgICAgICAgICAgdm9pZCxcbiAgICAgICAgICAgICAgICBSYWFpbkFwaVJhaW5zUHJvZ3Jlc3NSZXNwb25zZVxuICAgICAgICAgICAgPih7XG4gICAgICAgICAgICAgICAga2V5OiAncmFpbnMnLFxuICAgICAgICAgICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogcXVlcnlQYXRoLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvcmFpbnMnLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5kYXRhLmluUHJvZ3Jlc3M7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tFcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRJbmRpY2F0b3JzKHJhaW5JZDogc3RyaW5nKTogUHJvbWlzZTxSYWFpbkFwaVJhaW5zSW5kaWNhdG9yc1Jlc3BvbnNlPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBwYXJhbXM6IFJhYWluQXBpUmFpbnNJbmRpY2F0b3JzUmVxdWVzdCA9IHtcbiAgICAgICAgICAgICAgICBjdW11bGF0aXZlOiAndHJ1ZScsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSBCdWlsZFF1ZXJ5U3RyaW5nPFJhYWluQXBpUmFpbnNJbmRpY2F0b3JzUmVxdWVzdD4ocGFyYW1zKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDxcbiAgICAgICAgICAgICAgICB2b2lkLFxuICAgICAgICAgICAgICAgIFJhYWluQXBpUmFpbnNJbmRpY2F0b3JzUmVzcG9uc2VcbiAgICAgICAgICAgID4oe1xuICAgICAgICAgICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgICAgICAgICB2ZXJiOiAnR0VUJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHJhaW5JZCArICcvaW5kaWNhdG9ycycgKyAocXVlcnlTdHJpbmcgPyAnPycgKyBxdWVyeVN0cmluZyA6ICcnKSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7aW5kaWNhdG9yczogW119O1xuICAgIH1cblxuICAgIC8vID09PSBHYXVnZXMgPT09XG5cbiAgICBhc3luYyBnZXRHYXVnZShnYXVnZUlkOiBzdHJpbmcpOiBQcm9taXNlPEdhdWdlTm9kZT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQ8dm9pZCwgUmFhaW5BcGlHYXVnZXNGaW5kT25lUmVzcG9uc2U+KFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiAnZ2F1Z2VzJyxcbiAgICAgICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogZ2F1Z2VJZCxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEtleVVybDogdGhpcy5kZWZhdWx0VXJsRm9yQVBJICsgJy9nYXVnZXMnLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEdhdWdlTm9kZShyZXNwLmRhdGEpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBnZXRHYXVnZXMoXG4gICAgICAgIHJhaW5JZDogc3RyaW5nLFxuICAgICAgICBhcm91bmRMYXRMbmc6IExhdExuZyxcbiAgICAgICAgcGFnZUNvdW50ID0gMVxuICAgICk6IFByb21pc2U8QXJyYXk8R2F1Z2VOb2RlRmlsdGVyPj4ge1xuICAgICAgICBjb25zdCBiYXNlUGFyYW1zOiBSYWFpbkFwaUdhdWdlc0ZpbmRBbGxNaW5lUmVxdWVzdCA9IHtcbiAgICAgICAgICAgIGFyb3VuZExhdExuZzogYCR7YXJvdW5kTGF0TG5nLmxhdH0sJHthcm91bmRMYXRMbmcubG5nfWAsXG4gICAgICAgICAgICByYWluSWQsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLmFzVGVhbUlkKSB7XG4gICAgICAgICAgICBiYXNlUGFyYW1zLnRlYW1JZCA9IHRoaXMuYXNUZWFtSWQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBnYXVnZXMgPSBbXTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAobGV0IGNvdW50ID0gMTsgY291bnQgPD0gcGFnZUNvdW50OyBjb3VudCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyYW1zOiBSYWFpbkFwaUdhdWdlc0ZpbmRBbGxNaW5lUmVxdWVzdCA9IHsuLi5iYXNlUGFyYW1zLCBwYWdlOiBjb3VudH07XG4gICAgICAgICAgICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSBCdWlsZFF1ZXJ5U3RyaW5nPFJhYWluQXBpR2F1Z2VzRmluZEFsbE1pbmVSZXF1ZXN0PihwYXJhbXMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZpZGpTZXJ2aWNlLnNlbmRPbkVuZHBvaW50PFxuICAgICAgICAgICAgICAgICAgICB2b2lkLFxuICAgICAgICAgICAgICAgICAgICBSYWFpbkFwaUdhdWdlc0ZpbmRBbGxNaW5lUmVzcG9uc2VcbiAgICAgICAgICAgICAgICA+KHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiAnZ2F1Z2VzJyxcbiAgICAgICAgICAgICAgICAgICAgdmVyYjogJ0dFVCcsXG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogcXVlcnlTdHJpbmcgPyAnPycgKyBxdWVyeVN0cmluZyA6ICcnLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL2dhdWdlcycsXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGdhdWdlIG9mIHJlc3AuZGF0YS5nYXVnZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgZ2F1Z2VzLnB1c2gobmV3IEdhdWdlTm9kZUZpbHRlcihnYXVnZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0Vycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnYXVnZXM7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0R2F1Z2VNZWFzdXJlcyhnYXVnZUlkOiBzdHJpbmcsIGJlZ2luOiBEYXRlLCBlbmQ6IERhdGUpOiBQcm9taXNlPEdhdWdlTWVhc3VyZVtdPiB7XG4gICAgICAgIGNvbnN0IHBhcmFtczogUmFhaW5BcGlHYXVnZXNGaW5kTWVhc3VyZXNSZXF1ZXN0ID0ge1xuICAgICAgICAgICAgYmVnaW46IGJlZ2luLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgICBlbmQ6IGVuZC50b0lTT1N0cmluZygpLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBxdWVyeVN0cmluZyA9IEJ1aWxkUXVlcnlTdHJpbmc8UmFhaW5BcGlHYXVnZXNGaW5kTWVhc3VyZXNSZXF1ZXN0PihwYXJhbXMpO1xuICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5maWRqU2VydmljZS5zZW5kT25FbmRwb2ludDxcbiAgICAgICAgICAgIHZvaWQsXG4gICAgICAgICAgICBSYWFpbkFwaUdhdWdlc0ZpbmRNZWFzdXJlc1Jlc3BvbnNlXG4gICAgICAgID4oe1xuICAgICAgICAgICAga2V5OiAnZ2F1Z2VzJyxcbiAgICAgICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiBnYXVnZUlkICsgJy9tZWFzdXJlcycgKyAocXVlcnlTdHJpbmcgPyAnPycgKyBxdWVyeVN0cmluZyA6ICcnKSxcbiAgICAgICAgICAgIGRlZmF1bHRLZXlVcmw6IHRoaXMuZGVmYXVsdFVybEZvckFQSSArICcvZ2F1Z2VzJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgZ2F1Z2VNZWFzdXJlczogR2F1Z2VNZWFzdXJlW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBnYXVnZU1lYXN1cmUgb2YgcmVzcC5kYXRhLmdhdWdlTWVhc3VyZXMpIHtcbiAgICAgICAgICAgIGdhdWdlTWVhc3VyZXMucHVzaChuZXcgR2F1Z2VNZWFzdXJlKGdhdWdlTWVhc3VyZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnYXVnZU1lYXN1cmVzO1xuICAgIH1cblxuICAgIGFzeW5jIGdldFByb3ZpZGVycyhcbiAgICAgICAgcmFpbklkOiBzdHJpbmdcbiAgICApOiBQcm9taXNlPHtwcm92aWRlcnM6IHN0cmluZ1tdOyB0aW1lU3RlcEluTWludXRlczogbnVtYmVyW119PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmlkalNlcnZpY2Uuc2VuZE9uRW5kcG9pbnQ8XG4gICAgICAgICAgICAgICAgdm9pZCxcbiAgICAgICAgICAgICAgICBSYWFpbkFwaVJhaW5zUHJvdmlkZXJzUmVzcG9uc2VcbiAgICAgICAgICAgID4oe1xuICAgICAgICAgICAgICAgIHZlcmI6ICdHRVQnLFxuICAgICAgICAgICAgICAgIGtleTogJ3JhaW5zJyxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGg6IHJhaW5JZCArICcvcHJvdmlkZXJzJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0S2V5VXJsOiB0aGlzLmRlZmF1bHRVcmxGb3JBUEkgKyAnL3JhaW5zJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogcmVzcG9uc2UuZGF0YS5wcm92aWRlcnMgfHwgW10sXG4gICAgICAgICAgICAgICAgdGltZVN0ZXBJbk1pbnV0ZXM6IHJlc3BvbnNlLmRhdGEudGltZVN0ZXBJbk1pbnV0ZXMgfHwgWzUsIDEwLCAxNSwgMzAsIDYwXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2dldFByb3ZpZGVycyBlcnJvcjonLCBlKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXSxcbiAgICAgICAgICAgICAgICB0aW1lU3RlcEluTWludXRlczogWzUsIDEwLCAxNSwgMzAsIDYwXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgc2V0Um9sZXMocm9sZXM6IEFycmF5PHN0cmluZz4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yb2xlcyA9IHJvbGVzO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0RGF0ZUNvbXBvbmVudHMoXG4gICAgICAgIGRhdGU6IERhdGUsXG4gICAgICAgIGM6IHtcbiAgICAgICAgICAgIHllYXI/OiBudW1iZXI7XG4gICAgICAgICAgICBtb250aD86IG51bWJlcjtcbiAgICAgICAgICAgIGRheT86IG51bWJlcjtcbiAgICAgICAgICAgIGhvdXI/OiBudW1iZXI7XG4gICAgICAgICAgICBtaW51dGU/OiBudW1iZXI7XG4gICAgICAgIH1cbiAgICApOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBkYXRlVG9TaG93ID0gbmV3IERhdGUoZGF0ZSk7XG5cbiAgICAgICAgaWYgKGMueWVhciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBkYXRlVG9TaG93LnNldFVUQ0Z1bGxZZWFyKGMueWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGMubW9udGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZGF0ZVRvU2hvdy5zZXRVVENNb250aChjLm1vbnRoIC0gMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGMuZGF5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGRhdGVUb1Nob3cuc2V0VVRDRGF0ZShjLmRheSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGMuaG91ciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBkYXRlVG9TaG93LnNldFVUQ0hvdXJzKGMuaG91cik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGMubWludXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGRhdGVUb1Nob3cuc2V0VVRDTWludXRlcyhjLm1pbnV0ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0ZVRvU2hvdy50b0lTT1N0cmluZygpO1xuICAgIH1cbn1cbiJdfQ==