@datagrok-libraries/utils 4.2.16 → 4.2.17

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
@@ -1,5 +1,9 @@
1
1
  # utils changelog
2
2
 
3
+ ## 4.2.17 (2024-08-02)
4
+
5
+ ScatterPlotLInesRenderer: speed up multiple lines indexes calculations
6
+
3
7
  ## 4.2.16 (2024-08-02)
4
8
 
5
9
  Fixed core tests output to the Test Manager app
package/package.json CHANGED
@@ -8,7 +8,7 @@
8
8
  "email": "amuzychyna@datagrok.ai"
9
9
  },
10
10
  "fullName": "Utils",
11
- "version": "4.2.16",
11
+ "version": "4.2.17",
12
12
  "description": "Common utilities",
13
13
  "dependencies": {
14
14
  "cash-dom": "^8.1.1",
@@ -1 +1 @@
1
- {"version":3,"file":"render-lines-on-sp.d.ts","sourceRoot":"","sources":["render-lines-on-sp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"render-lines-on-sp.d.ts","sourceRoot":"","sources":["render-lines-on-sp.ts"],"names":[],"mappings":"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"}
@@ -173,25 +173,28 @@ export class ScatterPlotLinesRenderer {
173
173
  this.ctx.closePath();
174
174
  }
175
175
  createMultiLinesIndices() {
176
- const arrayIdxsBitArray = new BitArray(this.lines.from.length);
177
- arrayIdxsBitArray.setAll(true);
178
- for (let i = -1; (i = arrayIdxsBitArray.findNext(i)) !== -1;) {
179
- const firstLineIdx = i;
180
- const p1 = this.lines.from[firstLineIdx];
181
- const p2 = this.lines.to[firstLineIdx];
182
- let linesPerPair = 1;
183
- for (let j = i; (j = arrayIdxsBitArray.findNext(j)) !== -1;) {
184
- const pointToCompare1 = this.lines.from[j];
185
- const pointToCompare2 = this.lines.to[j];
186
- if (pointToCompare1 === p1 && pointToCompare2 === p2 ||
187
- pointToCompare2 === p1 && pointToCompare1 === p2) {
188
- this.multipleLinesCounts[j] = ++linesPerPair;
189
- arrayIdxsBitArray.setBit(j, false, false);
176
+ const linesDict = {};
177
+ for (let i = 0; i < this.lines.from.length; i++) {
178
+ let smallerNum = 0;
179
+ let biggerNum = 0;
180
+ if (this.lines.from[i] < this.lines.to[i]) {
181
+ smallerNum = this.lines.from[i];
182
+ biggerNum = this.lines.to[i];
183
+ }
184
+ else {
185
+ smallerNum = this.lines.to[i];
186
+ biggerNum = this.lines.from[i];
187
+ }
188
+ if (!linesDict[`${smallerNum}|${biggerNum}`]) {
189
+ linesDict[`${smallerNum}|${biggerNum}`] = [i];
190
+ }
191
+ else {
192
+ if (linesDict[`${smallerNum}|${biggerNum}`].length === 1) {
193
+ this.multipleLinesCounts[linesDict[`${smallerNum}|${biggerNum}`][0]] = 1;
194
+ linesDict[`${smallerNum}|${biggerNum}`].push(1);
190
195
  }
196
+ this.multipleLinesCounts[i] = ++linesDict[`${smallerNum}|${biggerNum}`][1];
191
197
  }
192
- if (linesPerPair > 1)
193
- this.multipleLinesCounts[firstLineIdx] = 1;
194
- arrayIdxsBitArray.setBit(i, false, false);
195
198
  }
196
199
  }
197
200
  checkCoordsOnLine(x, y) {
@@ -328,4 +331,4 @@ export class ScatterPlotLinesRenderer {
328
331
  path.lineTo(arrowEndX - (this.arrowWidth * Math.sin(arrowAngle + Math.PI / 10)), arrowEndY - (this.arrowWidth * Math.cos(arrowAngle + Math.PI / 10)));
329
332
  }
330
333
  }
331
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLWxpbmVzLW9uLXNwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicmVuZGVyLWxpbmVzLW9uLXNwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDRCQUE0QjtBQUM1QixPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxRQUFRLE1BQU0sYUFBYSxDQUFDO0FBRW5DLE1BQU0sQ0FBTixJQUFZLDJCQUlYO0FBSkQsV0FBWSwyQkFBMkI7SUFDbkMsNENBQWEsQ0FBQTtJQUNiLDRDQUFhLENBQUE7SUFDYixnREFBaUIsQ0FBQTtBQUNyQixDQUFDLEVBSlcsMkJBQTJCLEtBQTNCLDJCQUEyQixRQUl0QztBQThCRCxNQUFNLE9BQU8sd0JBQXdCO0lBZ0JuQyxJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQUksYUFBYSxDQUFDLEVBQVU7UUFDMUIsSUFBSSxFQUFFLEtBQUssSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUMvQixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDMUI7SUFDSCxDQUFDO0lBRUQsSUFBSSxhQUFhLENBQUMsS0FBa0I7UUFDbEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQUksZUFBZSxDQUFDLFVBQW9CO1FBQ3RDLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJ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QVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN2QyxNQUFNLEtBQUssR0FBRyxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4QyxJQUFJLFFBQVEsR0FBa0IsSUFBSSxDQUFDO1FBQ25DLE1BQU0sYUFBYSxHQUFHLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3BDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7WUFDckIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzlGLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM5RixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQztZQUNyQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQztZQUNyQyxN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QUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQzdFLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekUsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7U3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgQml0QXJyYXkgZnJvbSAnLi9iaXQtYXJyYXknO1xuXG5leHBvcnQgZW51bSBTY2F0dGVyUGxvdEN1cnJlbnRMaW5lU3R5bGUge1xuICAgIG5vbmUgPSAnbm9uZScsXG4gICAgYm9sZCA9ICdib2xkJyxcbiAgICBkYXNoZWQgPSAnZGFzaGVkJ1xufVxuXG50eXBlIE1hcmtlclNpemUgPSB7XG4gICAgc2l6ZUZyb206IG51bWJlcixcbiAgICBzaXplVG86IG51bWJlclxufVxuXG5leHBvcnQgdHlwZSBNb3VzZU92ZXJMaW5lRXZlbnQgPSB7XG4gICAgeDogbnVtYmVyO1xuICAgIHk6IG51bWJlcjtcbiAgICBpZDogbnVtYmVyO1xuICAgIGV2ZW50OiBNb3VzZUV2ZW50XG59XG5cbmV4cG9ydCB0eXBlIElMaW5lU2VyaWVzID0ge1xuICAgIGZyb206IFVpbnQzMkFycmF5O1xuICAgIHRvOiBVaW50MzJBcnJheTtcbiAgICBjb2xvcj86IHN0cmluZzsgLy8gY29tbW9uIGNvbG9yLiBVc2UgW2NvbG9yc10gaWYgeW91IG5lZWQgaW5kaXZpZHVhbCBjb2xvcnMgcGVyIGxpbmVcbiAgICBjb2xvcnM/OiBzdHJpbmdbXTsgLy8gbGluZSBjb2xvcnMuIElmIHRoZXkgYXJlIHRoZSBzYW1lIGZvciB0aGUgc2VyaWVzLCB1c2UgW2NvbG9yXSBpbnN0ZWFkLlxuICAgIHdpZHRoPzogbnVtYmVyOyAvLyBjb21tb24gd2lkdGguIFVzZSBbY29sb3JzXSBpZiB5b3UgbmVlZCBpbmRpdmlkdWFsIHdpZHRocyBwZXIgbGluZVxuICAgIHdpZHRocz86IEZsb2F0MzJBcnJheTsgLy8gbGluZSB3aWR0aHMuIElmIHRoZXkgYXJlIHRoZSBzYW1lIGZvciB0aGUgc2VyaWVzLCB1c2UgW3dpZHRoXSBpbnN0ZWFkLlxuICAgIG9wYWNpdHk/OiBudW1iZXI7IC8vIGNvbW1vbiBvcGFjaXR5LiBVc2UgW29wYWNpdGllc10gaWYgeW91IG5lZWQgaW5kaXZpZHVhbCBvcGFjaXRpZXMgcGVyIGxpbmVcbiAgICBvcGFjaXRpZXM/OiBGbG9hdDMyQXJyYXk7IC8vIGxpbmUgb3BhY2l0aWVzLiBJZiB0aGV5IGFyZSB0aGUgc2FtZSBmb3IgdGhlIHNlcmllcywgdXNlIFtvcGFjaXR5XSBpbnN0ZWFkXG4gICAgZHJhd0Fycm93cz86IGJvb2xlYW47IC8vIGNvbW1vbiBwYXJhbWV0ZXIgdG8gZHJhdyBhcnJvd3MuIFVzZSBbZHJhd0Fycm93c0Fycl0gaWYgeW91IG5lZWQgdG8gZHJhdyBhcnJvd3Mgbm90IGZvciBlYWNoIGxpbmVcbiAgICBkcmF3QXJyb3dzQXJyPzogQml0QXJyYXk7IC8vIGluZGl2aWR1YWwgcGFyYW1ldGVyIGZvciBlYWNoIGxpbmUuIElmIHRoZXkgYXJlIHRoZSBzYW1lIGZvciB0aGUgc2VyaWVzLCB1c2UgW2RyYXdBcnJvd3NdIGluc3RlYWRcbiAgICB2aXNpYmlsaXR5PzogQml0QXJyYXk7IC8vIGluZGl2aWR1YWwgcGFyYW1ldGVyIGZvciBlYWNoIGxpbmUuIFNldCBiaXQgdG8gZmFsc2UgdG8gaGlkZSB0aGUgbGluZVxuICAgIGFycm93U2l6ZT86IG51bWJlcjsgLy8gY29tbW9uIGZvciBhbGwgYXJyb3dzXG4gICAgc2tpcE11bHRpTGluZUNhbGN1bGF0aW9uPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIFNjYXR0ZXJQbG90TGluZXNSZW5kZXJlciB7XG4gIHNwOiBERy5TY2F0dGVyUGxvdFZpZXdlcjtcbiAgeEF4aXNDb2w6IERHLkNvbHVtbjtcbiAgeUF4aXNDb2w6IERHLkNvbHVtbjtcbiAgX2N1cnJlbnRMaW5lSWR4ID0gLTE7XG4gIGxpbmVzITogSUxpbmVTZXJpZXM7XG4gIGxpbmVDbGlja2VkID0gbmV3IFN1YmplY3Q8TW91c2VPdmVyTGluZUV2ZW50PigpO1xuICBsaW5lSG92ZXIgPSBuZXcgU3ViamVjdDxNb3VzZU92ZXJMaW5lRXZlbnQ+KCk7XG4gIGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQ7XG4gIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEO1xuICBtb3VzZU92ZXJMaW5lSWQgPSAtMTtcbiAgbXVsdGlwbGVMaW5lc0NvdW50cyE6IFVpbnQ4QXJyYXk7XG4gIHZpc2liaWxpdHk6IEJpdEFycmF5O1xuICBjdXJyZW50TGluZVN0eWxlOiBTY2F0dGVyUGxvdEN1cnJlbnRMaW5lU3R5bGU7XG4gIGFycm93V2lkdGggPSAxNTtcblxuICBnZXQgY3VycmVudExpbmVJZCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50TGluZUlkeDtcbiAgfVxuXG4gIHNldCBjdXJyZW50TGluZUlkKGlkOiBudW1iZXIpIHtcbiAgICBpZiAoaWQgIT09IHRoaXMuX2N1cnJlbnRMaW5lSWR4KSB7XG4gICAgICB0aGlzLl9jdXJyZW50TGluZUlkeCA9IGlkO1xuICAgICAgdGhpcy5zcC5yZW5kZXIodGhpcy5jdHgpO1xuICAgIH1cbiAgfVxuXG4gIHNldCBsaW5lc1RvUmVuZGVyKGxpbmVzOiBJTGluZVNlcmllcykge1xuICAgIHRoaXMudXBkYXRlTGluZXMobGluZXMpO1xuICAgIHRoaXMuc3AucmVuZGVyKHRoaXMuY3R4KTtcbiAgfVxuXG4gIHNldCBsaW5lc1Zpc2liaWxpdHkodmlzaWJpbGl0eTogQml0QXJyYXkpIHtcbiAgICB0aGlzLnZpc2liaWxpdHkgPSB2aXNpYmlsaXR5O1xuICAgIHRoaXMuc3AucmVuZGVyKHRoaXMuY3R4KTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHNwOiBERy5TY2F0dGVyUGxvdFZpZXdlciwgeEF4aXM6IHN0cmluZywgeUF4aXM6IHN0cmluZywgbGluZXM6IElMaW5lU2VyaWVzLFxuICAgIGN1cnJlbnRMaW5lU3R5bGUgPSBTY2F0dGVyUGxvdEN1cnJlbnRMaW5lU3R5bGUubm9uZSkge1xuICAgIHRoaXMuc3AgPSBzcDtcbiAgICB0aGlzLnhBeGlzQ29sID0gdGhpcy5zcC5kYXRhRnJhbWUhLmNvbHVtbnMuYnlOYW1lKHhBeGlzKTtcbiAgICB0aGlzLnlBeGlzQ29sID0gdGhpcy5zcC5kYXRhRnJhbWUhLmNvbHVtbnMuYnlOYW1lKHlBeGlzKTtcbiAgICB0aGlzLmNhbnZhcyA9IHRoaXMuc3AuZ2V0SW5mbygpWydjYW52YXMnXTtcbiAgICB0aGlzLmN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJykgYXMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEO1xuICAgIHRoaXMuY3VycmVudExpbmVTdHlsZSA9IGN1cnJlbnRMaW5lU3R5bGU7XG4gICAgdGhpcy51cGRhdGVMaW5lcyhsaW5lcyk7XG4gICAgdGhpcy52aXNpYmlsaXR5ID0gbGluZXMudmlzaWJpbGl0eSA/PyBuZXcgQml0QXJyYXkodGhpcy5saW5lcy5mcm9tLmxlbmd0aCk7XG4gICAgaWYgKCFsaW5lcy52aXNpYmlsaXR5KVxuICAgICAgdGhpcy52aXNpYmlsaXR5LnNldEFsbCh0cnVlLCBmYWxzZSk7XG4gICAgaWYgKGxpbmVzLmFycm93U2l6ZSlcbiAgICAgIHRoaXMuYXJyb3dXaWR0aCA9IGxpbmVzLmFycm93U2l6ZTtcblxuICAgIHRoaXMuY2FudmFzLm9ubW91c2Vkb3duID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBpZiAodGhpcy5tb3VzZU92ZXJMaW5lSWQgIT09IC0xKVxuICAgICAgICB0aGlzLmxpbmVDbGlja2VkLm5leHQoe3g6IGV2ZW50LmNsaWVudFgsIHk6IGV2ZW50LmNsaWVudFksIGlkOiB0aGlzLm1vdXNlT3ZlckxpbmVJZCwgZXZlbnQ6IGV2ZW50fSk7XG4gICAgfTtcblxuICAgIHRoaXMuY2FudmFzLm9ubW91c2Vtb3ZlID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICB0aGlzLm1vdXNlT3ZlckxpbmVJZCA9IHRoaXMuY2hlY2tDb29yZHNPbkxpbmUoZXZlbnQub2Zmc2V0WCwgZXZlbnQub2Zmc2V0WSk7XG4gICAgICBpZiAodGhpcy5tb3VzZU92ZXJMaW5lSWQgIT09IC0xKVxuICAgICAgICB0aGlzLmxpbmVIb3Zlci5uZXh0KHt4OiBldmVudC5jbGllbnRYLCB5OiBldmVudC5jbGllbnRZLCBpZDogdGhpcy5tb3VzZU92ZXJMaW5lSWQsIGV2ZW50OiBldmVudH0pO1xuICAgIH07XG5cbiAgICBzcC5vbkV2ZW50KCdkNC1iZWZvcmUtZHJhdy1zY2VuZScpXG4gICAgICAuc3Vic2NyaWJlKChfOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5yZW5kZXJMaW5lcygpO1xuICAgICAgfSk7XG4gIH1cblxuICB1cGRhdGVMaW5lcyhsaW5lczogSUxpbmVTZXJpZXMpIHtcbiAgICB0aGlzLmxpbmVzID0gbGluZXM7XG4gICAgdGhpcy5tdWx0aXBsZUxpbmVzQ291bnRzID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5saW5lcy5mcm9tLmxlbmd0aCk7XG4gICAgaWYgKCFsaW5lcy5za2lwTXVsdGlMaW5lQ2FsY3VsYXRpb24pXG4gICAgICB0aGlzLmNyZWF0ZU11bHRpTGluZXNJbmRpY2VzKCk7XG4gICAgZWxzZVxuICAgICAgdGhpcy5tdWx0aXBsZUxpbmVzQ291bnRzLmZpbGwoMCk7XG4gIH1cblxuICByZW5kZXJMaW5lcygpOiB2b2lkIHtcbiAgICBjb25zdCBzcExvb2sgPSB0aGlzLnNwLmdldE9wdGlvbnMoKS5sb29rO1xuICAgIGNvbnN0IGluZGl2aWR1YWxMaW5lU3R5bGVzID0gdGhpcy5saW5lcy5jb2xvcnMgfHwgdGhpcy5saW5lcy53aWR0aHMgfHwgdGhpcy5saW5lcy5vcGFjaXRpZXMgfHwgdGhpcy5saW5lcy5kcmF3QXJyb3dzQXJyO1xuICAgIGlmICghaW5kaXZpZHVhbExpbmVTdHlsZXMpIHtcbiAgICAgIHRoaXMuY3R4LmxpbmVXaWR0aCA9IHRoaXMubGluZXMud2lkdGggPz8gMTtcbiAgICAgIHRoaXMuY3R4LnN0cm9rZVN0eWxlID0gYHJnYmEoJHt0aGlzLmxpbmVzLmNvbG9yID8/ICcwLDEyOCwwJ30sJHt0aGlzLmxpbmVzLm9wYWNpdHkgPz8gMX0pYDtcbiAgICB9XG4gICAgY29uc3QgbWFya2VyU2l6ZUNvbCA9IHNwTG9va1snc2l6ZUNvbHVtbk5hbWUnXSA/IHRoaXMuc3AuZGF0YUZyYW1lLmNvbChzcExvb2tbJ3NpemVDb2x1bW5OYW1lJ10pIDogbnVsbDtcbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLnNwLmRhdGFGcmFtZS5maWx0ZXI7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxpbmVzLmZyb20ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChmaWx0ZXIuZ2V0KHRoaXMubGluZXMuZnJvbVtpXSkgJiYgZmlsdGVyLmdldCh0aGlzLmxpbmVzLnRvW2ldKSAmJiB0aGlzLnZpc2liaWxpdHkuZ2V0Qml0KGkpKSB7XG4gICAgICAgIGxldCBsaW5lTGVuID0gMDtcbiAgICAgICAgY29uc3Qge3NpemVGcm9tLCBzaXplVG99ID0gdGhpcy5nZXRNYXJrZXJzU2l6ZXMoc3BMb29rLCBtYXJrZXJTaXplQ29sLCBpKTtcbiAgICAgICAgY29uc3QgcG9pbnRGcm9tID0gdGhpcy5zcC53b3JsZFRvU2NyZWVuKHRoaXMueEF4aXNDb2wuZ2V0KHRoaXMubGluZXMuZnJvbVtpXSksIHRoaXMueUF4aXNDb2wuZ2V0KHRoaXMubGluZXMuZnJvbVtpXSkpO1xuICAgICAgICBsZXQgYVggPSBwb2ludEZyb20/Lng7XG4gICAgICAgIGxldCBhWSA9IHBvaW50RnJvbT8ueTtcbiAgICAgICAgY29uc3QgcG9pbnRUbyA9IHRoaXMuc3Aud29ybGRUb1NjcmVlbih0aGlzLnhBeGlzQ29sLmdldCh0aGlzLmxpbmVzLnRvW2ldKSwgdGhpcy55QXhpc0NvbC5nZXQodGhpcy5saW5lcy50b1tpXSkpO1xuICAgICAgICBsZXQgYlggPSBwb2ludFRvPy54O1xuICAgICAgICBsZXQgYlkgPSBwb2ludFRvPy55O1xuICAgICAgICBjb25zdCBtaW5BeGlzID0gTWF0aC5taW4odGhpcy5zcC52aWV3Qm94LndpZHRoLCB0aGlzLnNwLnZpZXdCb3guaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5jdHguYmVnaW5QYXRoKCk7XG4gICAgICAgIGlmIChhWCAmJiBhWSAmJiBiWCAmJiBiWSAmJiBNYXRoLmh5cG90KGJYISAtIGFYISwgYlkhIC0gYVkhKSAvIG1pbkF4aXMgPiAwLjAxKSB7XG4gICAgICAgICAgaWYgKGluZGl2aWR1YWxMaW5lU3R5bGVzKSB7XG4gICAgICAgICAgICBjb25zdCBjb2xvciA9IHRoaXMubGluZXMuY29sb3JzPy5baV0gPyB0aGlzLmxpbmVzLmNvbG9ycz8uW2ldIDogdGhpcy5saW5lcy5jb2xvciA/PyAnMCwxMjgsMCc7XG4gICAgICAgICAgICBjb25zdCBvcGFjaXR5ID0gdGhpcy5saW5lcy5vcGFjaXRpZXM/LltpXSA/IHRoaXMubGluZXMub3BhY2l0aWVzPy5baV0gOiB0aGlzLmxpbmVzLm9wYWNpdHkgPz8gMTtcbiAgICAgICAgICAgIHRoaXMuY3R4LnN0cm9rZVN0eWxlID0gYHJnYmEoJHtjb2xvcn0sJHtvcGFjaXR5fSlgO1xuICAgICAgICAgICAgdGhpcy5jdHgubGluZVdpZHRoID0gdGhpcy5saW5lcy53aWR0aHM/LltpXSA/IHRoaXMubGluZXMud2lkdGhzPy5baV0gOiB0aGlzLmxpbmVzLndpZHRoID8/IDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpID09PSB0aGlzLl9jdXJyZW50TGluZUlkeClcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlQ3VycmVudExpbmVTdHlsZSh0cnVlKTtcbiAgICAgICAgICBjb25zdCBtdWx0aUxpbmVzID0gdGhpcy5tdWx0aXBsZUxpbmVzQ291bnRzW2ldO1xuICAgICAgICAgIGxldCBjb250cm9sUG9pbnQ6IERHLlBvaW50IHwgbnVsbCA9IG51bGw7XG4gICAgICAgICAgaWYgKG11bHRpTGluZXMpIHtcbiAgICAgICAgICAgIGxpbmVMZW4gPSB0aGlzLmdldExpbmVMZW5ndGgoYVgsIGFZLCBiWCwgYlkpO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRQb2ludFdpdGhNYXJrZXIgPSB0aGlzLmdldFBvaW50T25EaXN0YW5jZShhWCwgYVksIGJYLCBiWSwgc2l6ZVRvLCBsaW5lTGVuKTtcbiAgICAgICAgICAgIGNvbnN0IGVuZHRQb2ludFdpdGhNYXJrZXIgPSB0aGlzLmdldFBvaW50T25EaXN0YW5jZShiWCwgYlksIGFYLCBhWSwgc2l6ZUZyb20sIGxpbmVMZW4pO1xuICAgICAgICAgICAgYVggPSBzdGFydFBvaW50V2l0aE1hcmtlci54O1xuICAgICAgICAgICAgYVkgPSBzdGFydFBvaW50V2l0aE1hcmtlci55O1xuICAgICAgICAgICAgYlggPSBlbmR0UG9pbnRXaXRoTWFya2VyLng7XG4gICAgICAgICAgICBiWSA9IGVuZHRQb2ludFdpdGhNYXJrZXIueTtcbiAgICAgICAgICAgIGNvbnRyb2xQb2ludCA9IHRoaXMubGluZXMuZnJvbVtpXSA+IHRoaXMubGluZXMudG9baV0gP1xuICAgICAgICAgICAgICB0aGlzLmZpbmRDb250cm9sUG9pbnQobXVsdGlMaW5lcywgYVgsIGFZLCBiWCwgYlksIGkpIDpcbiAgICAgICAgICAgICAgdGhpcy5maW5kQ29udHJvbFBvaW50KG11bHRpTGluZXMsIGJYLCBiWSwgYVgsIGFZLCBpKTtcbiAgICAgICAgICAgIHRoaXMuY3R4Lm1vdmVUbyhhWCEsIGFZISk7XG4gICAgICAgICAgICB0aGlzLmN0eC5xdWFkcmF0aWNDdXJ2ZVRvKGNvbnRyb2xQb2ludC54LCBjb250cm9sUG9pbnQueSwgYlgsIGJZKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jdHgubW92ZVRvKGFYISwgYVkhKTtcbiAgICAgICAgICAgIHRoaXMuY3R4LmxpbmVUbyhiWCwgYlkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5saW5lcy5kcmF3QXJyb3dzID8/IHRoaXMubGluZXMuZHJhd0Fycm93c0Fycj8uZ2V0Qml0KGkpKSB7XG4gICAgICAgICAgICBpZiAoIWxpbmVMZW4pXG4gICAgICAgICAgICAgIGxpbmVMZW4gPSB0aGlzLmdldExpbmVMZW5ndGgoYVgsIGFZLCBiWCwgYlkpO1xuICAgICAgICAgICAgaWYgKGxpbmVMZW4gPiB0aGlzLmFycm93V2lkdGgpIHtcbiAgICAgICAgICAgICAgY29uc3QgYXJyb3dQb2ludCA9ICFtdWx0aUxpbmVzID8gdGhpcy5nZXRQb2ludE9uRGlzdGFuY2UoYVgsIGFZLCBiWCwgYlksIHNpemVUbywgbGluZUxlbikgOiBudWxsO1xuICAgICAgICAgICAgICBjb25zdCBhcnJvd0NQWCA9IG11bHRpTGluZXMgPyBjb250cm9sUG9pbnQhLnggOiBhWDtcbiAgICAgICAgICAgICAgY29uc3QgYXJyb3dDUFkgPSBtdWx0aUxpbmVzID8gY29udHJvbFBvaW50IS55IDogYVk7XG4gICAgICAgICAgICAgIHRoaXMuY2FudmFzQXJyb3codGhpcy5jdHgsIGFycm93UG9pbnQ/LnggPz8gYVgsIGFycm93UG9pbnQ/LnkgPz8gYVksIGFycm93Q1BYLCBhcnJvd0NQWSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuY3R4LnN0cm9rZSgpO1xuICAgICAgICAgIHRoaXMuY3R4LmNsb3NlUGF0aCgpO1xuICAgICAgICAgIGlmIChpID09PSB0aGlzLl9jdXJyZW50TGluZUlkeClcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlQ3VycmVudExpbmVTdHlsZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5maWxsTGVmdEJvdHRvbVJlY3QoKTtcbiAgfVxuXG4gIHRvZ2dsZUN1cnJlbnRMaW5lU3R5bGUoZmxhZzogYm9vbGVhbikge1xuICAgIHN3aXRjaCAodGhpcy5jdXJyZW50TGluZVN0eWxlKSB7XG4gICAgICBjYXNlIFNjYXR0ZXJQbG90Q3VycmVudExpbmVTdHlsZS5ib2xkOiB7XG4gICAgICAgIGZsYWcgPyB0aGlzLmN0eC5saW5lV2lkdGggKz0gMiA6IHRoaXMuY3R4LmxpbmVXaWR0aCAtPSAyO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgU2NhdHRlclBsb3RDdXJyZW50TGluZVN0eWxlLmRhc2hlZDoge1xuICAgICAgICBmbGFnID8gdGhpcy5jdHguc2V0TGluZURhc2goWzUsIDVdKSA6IHRoaXMuY3R4LnNldExpbmVEYXNoKFtdKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgZ2V0TWFya2Vyc1NpemVzKHNwTG9vazogYW55LCBtYXJrZXJTaXplQ29sOiBERy5Db2x1bW4gfCBudWxsLCBpOiBudW1iZXIpOiBNYXJrZXJTaXplIHtcbiAgICBsZXQgc2l6ZUZyb20gPSAzO1xuICAgIGxldCBzaXplVG8gPSAzO1xuICAgIGlmIChtYXJrZXJTaXplQ29sKSB7XG4gICAgICBzaXplRnJvbSA9IChzcExvb2subWFya2VyTWluU2l6ZSArIChzcExvb2subWFya2VyTWF4U2l6ZSAtIHNwTG9vay5tYXJrZXJNaW5TaXplKSAqIG1hcmtlclNpemVDb2wuc2NhbGUodGhpcy5saW5lcy5mcm9tW2ldKSkgLyAyO1xuICAgICAgc2l6ZVRvID0gKHNwTG9vay5tYXJrZXJNaW5TaXplICsgKHNwTG9vay5tYXJrZXJNYXhTaXplIC0gc3BMb29rLm1hcmtlck1pblNpemUpICogbWFya2VyU2l6ZUNvbC5zY2FsZSh0aGlzLmxpbmVzLnRvW2ldKSkgLyAyO1xuICAgIH0gZWxzZSBpZiAoc3BMb29rLm1hcmtlckRlZmF1bHRTaXplKSB7XG4gICAgICBzaXplRnJvbSA9IHNwTG9vay5tYXJrZXJEZWZhdWx0U2l6ZSAvIDI7XG4gICAgICBzaXplVG8gPSBzcExvb2subWFya2VyRGVmYXVsdFNpemUgLyAyO1xuICAgIH1cbiAgICByZXR1cm4ge3NpemVGcm9tLCBzaXplVG99O1xuICB9XG5cblxuICBmaWxsTGVmdEJvdHRvbVJlY3QoKSB7XG4gICAgY29uc3QgcmVjdCA9IG5ldyBQYXRoMkQoKTtcbiAgICByZWN0LnJlY3QodGhpcy5zcC55QXhpc0JveC5taW5YLCB0aGlzLnNwLnlBeGlzQm94Lm1heFksIHRoaXMuc3AueUF4aXNCb3gud2lkdGgsIHRoaXMuc3AueEF4aXNCb3guaGVpZ2h0KTtcbiAgICB0aGlzLmN0eC5maWxsU3R5bGUgPSBgd2hpdGVgO1xuICAgIHRoaXMuY3R4LmJlZ2luUGF0aCgpO1xuICAgIHRoaXMuY3R4LmZpbGwocmVjdCk7XG4gICAgdGhpcy5jdHguY2xvc2VQYXRoKCk7XG4gIH1cblxuICBjcmVhdGVNdWx0aUxpbmVzSW5kaWNlcygpOiB2b2lkIHtcbiAgICBjb25zdCBhcnJheUlkeHNCaXRBcnJheSA9IG5ldyBCaXRBcnJheSh0aGlzLmxpbmVzLmZyb20ubGVuZ3RoKTtcbiAgICBhcnJheUlkeHNCaXRBcnJheS5zZXRBbGwodHJ1ZSk7XG4gICAgZm9yIChsZXQgaSA9IC0xOyAoaSA9IGFycmF5SWR4c0JpdEFycmF5LmZpbmROZXh0KGkpKSAhPT0gLTE7KSB7XG4gICAgICBjb25zdCBmaXJzdExpbmVJZHggPSBpO1xuICAgICAgY29uc3QgcDEgPSB0aGlzLmxpbmVzLmZyb21bZmlyc3RMaW5lSWR4XTtcbiAgICAgIGNvbnN0IHAyID0gdGhpcy5saW5lcy50b1tmaXJzdExpbmVJZHhdO1xuICAgICAgbGV0IGxpbmVzUGVyUGFpciA9IDE7XG4gICAgICBmb3IgKGxldCBqID0gaTsgKGogPSBhcnJheUlkeHNCaXRBcnJheS5maW5kTmV4dChqKSkgIT09IC0xOykge1xuICAgICAgICBjb25zdCBwb2ludFRvQ29tcGFyZTEgPSB0aGlzLmxpbmVzLmZyb21bal07XG4gICAgICAgIGNvbnN0IHBvaW50VG9Db21wYXJlMiA9IHRoaXMubGluZXMudG9bal07XG4gICAgICAgIGlmIChwb2ludFRvQ29tcGFyZTEgPT09IHAxICYmIHBvaW50VG9Db21wYXJlMiA9PT0gcDIgfHxcbiAgICAgICAgICAgICAgICAgICAgcG9pbnRUb0NvbXBhcmUyID09PSBwMSAmJiBwb2ludFRvQ29tcGFyZTEgPT09IHAyKSB7XG4gICAgICAgICAgdGhpcy5tdWx0aXBsZUxpbmVzQ291bnRzW2pdID0gKytsaW5lc1BlclBhaXI7XG4gICAgICAgICAgYXJyYXlJZHhzQml0QXJyYXkuc2V0Qml0KGosIGZhbHNlLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChsaW5lc1BlclBhaXIgPiAxKVxuICAgICAgICB0aGlzLm11bHRpcGxlTGluZXNDb3VudHNbZmlyc3RMaW5lSWR4XSA9IDE7XG4gICAgICBhcnJheUlkeHNCaXRBcnJheS5zZXRCaXQoaSwgZmFsc2UsIGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBjaGVja0Nvb3Jkc09uTGluZSh4OiBudW1iZXIsIHk6IG51bWJlcik6IG51bWJlciB7XG4gICAgbGV0IGNhbmRpZGF0ZUlkeCA9IC0xO1xuICAgIGxldCBtaW5EaXN0ID0gbnVsbDtcbiAgICBsZXQgZGlzdCA9IG51bGw7XG4gICAgY29uc3Qgc3BMb29rID0gdGhpcy5zcC5nZXRPcHRpb25zKCkubG9vaztcbiAgICBjb25zdCBtYXJrZXJTaXplQ29sID0gc3BMb29rWydzaXplQ29sdW1uTmFtZSddID8gdGhpcy5zcC5kYXRhRnJhbWUuY29sKHNwTG9va1snc2l6ZUNvbHVtbk5hbWUnXSkgOiBudWxsO1xuICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuc3AuZGF0YUZyYW1lLmZpbHRlcjtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGluZXMuZnJvbS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGZpbHRlci5nZXQodGhpcy5saW5lcy5mcm9tW2ldKSAmJiBmaWx0ZXIuZ2V0KHRoaXMubGluZXMudG9baV0pICYmIHRoaXMudmlzaWJpbGl0eS5nZXRCaXQoaSkpIHtcbiAgICAgICAgY29uc3Qge3NpemVGcm9tLCBzaXplVG99ID0gdGhpcy5nZXRNYXJrZXJzU2l6ZXMoc3BMb29rLCBtYXJrZXJTaXplQ29sLCBpKTtcbiAgICAgICAgY29uc3QgcEZyb20gPSB0aGlzLnNwLndvcmxkVG9TY3JlZW4odGhpcy54QXhpc0NvbC5nZXQodGhpcy5saW5lcy5mcm9tW2ldKSwgdGhpcy55QXhpc0NvbC5nZXQodGhpcy5saW5lcy5mcm9tW2ldKSk7XG4gICAgICAgIGNvbnN0IHBUbyA9IHRoaXMuc3Aud29ybGRUb1NjcmVlbih0aGlzLnhBeGlzQ29sLmdldCh0aGlzLmxpbmVzLnRvW2ldKSwgdGhpcy55QXhpc0NvbC5nZXQodGhpcy5saW5lcy50b1tpXSkpO1xuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZUxpbmVzQ291bnRzW2ldKSB7XG4gICAgICAgICAgY29uc3QgbGVuID0gdGhpcy5nZXRMaW5lTGVuZ3RoKHBGcm9tLngsIHBGcm9tLnksIHBUby54LCBwVG8ueSk7XG4gICAgICAgICAgY29uc3QgZnJvbU1hcmtlciA9IHRoaXMuZ2V0UG9pbnRPbkRpc3RhbmNlKHBGcm9tLngsIHBGcm9tLnksIHBUby54LCBwVG8ueSwgc2l6ZVRvLCBsZW4pO1xuICAgICAgICAgIGNvbnN0IHRvTWFya2VyID0gdGhpcy5nZXRQb2ludE9uRGlzdGFuY2UocFRvLngsIHBUby55LCBwRnJvbT8ueCwgcEZyb20/LnksIHNpemVGcm9tLCBsZW4pO1xuICAgICAgICAgIGNvbnN0IGNvbnRyb2xQb2ludCA9IHRoaXMubGluZXMuZnJvbVtpXSA+IHRoaXMubGluZXMudG9baV0gP1xuICAgICAgICAgICAgdGhpcy5maW5kQ29udHJvbFBvaW50KHRoaXMubXVsdGlwbGVMaW5lc0NvdW50c1tpXSwgZnJvbU1hcmtlci54LCBmcm9tTWFya2VyLnksIHRvTWFya2VyLngsIHRvTWFya2VyLnksIGkpIDpcbiAgICAgICAgICAgIHRoaXMuZmluZENvbnRyb2xQb2ludCh0aGlzLm11bHRpcGxlTGluZXNDb3VudHNbaV0sIHRvTWFya2VyLngsIHRvTWFya2VyLnksIGZyb21NYXJrZXIueCwgZnJvbU1hcmtlci55LCBpKTtcbiAgICAgICAgICBkaXN0ID0gdGhpcy5jYWxjdWxhdGVEaXN0VG9DdXJ2ZUxpbmUoaSwgeCwgeSwgZnJvbU1hcmtlciwgdG9NYXJrZXIsIGNvbnRyb2xQb2ludCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGlzdCA9IHRoaXMuY2FsY3VsYXRlRGlzdFRvU3RyYWlnaHRMaW5lKHgsIHksIHBGcm9tLCBwVG8pO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoIW1pbkRpc3QgJiYgZGlzdCAhPT0gbnVsbCAmJiBkaXN0IDwgNSkgfHwgbWluRGlzdCAmJiBkaXN0ICE9PSBudWxsICYmIGRpc3QgPCBtaW5EaXN0KSB7XG4gICAgICAgICAgbWluRGlzdCA9IGRpc3Q7XG4gICAgICAgICAgY2FuZGlkYXRlSWR4ID0gaTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY2FuZGlkYXRlSWR4O1xuICB9XG5cbiAgY2FsY3VsYXRlRGlzdFRvU3RyYWlnaHRMaW5lKHg6IG51bWJlciwgeTogbnVtYmVyLCBwMTogREcuUG9pbnQsIHAyOiBERy5Qb2ludCk6IG51bWJlciB8IG51bGwge1xuICAgIC8qIGNhbGN1bGF0aW5nIGNvb3JkaW5hdGVzIG9mIGEgcmVjdCBhcm91bmQgYSBsaW5lLiBJZiBjdXJzb3IgY29vcmRzIGFyZSBvdXRzaWRlIHRoaXMgcmVjdCAtIGFzc3VtZSB0aGF0XG4gICAgICAgIHBvaW50IGlzIG5vdCBvbiBsaW5lIGFuZCBkbyBub3QgY2FsY3VsYXRlIGRpc3RhbmNlIHRvIGxpbmUgKi9cbiAgICBjb25zdCB4TWluID0gTWF0aC5taW4ocDEueCwgcDIueCk7XG4gICAgY29uc3QgeE1heCA9IE1hdGgubWF4KHAxLngsIHAyLngpO1xuICAgIGNvbnN0IHlNaW4gPSBNYXRoLm1pbihwMS55LCBwMi55KTtcbiAgICBjb25zdCB5TWF4ID0gTWF0aC5tYXgocDEueSwgcDIueSk7XG5cbiAgICAvL2FkZGluZyBhIGNvdXBsZSBvZiBwaXhlbHMgdG8gaW5jcmVhc2UgdGhlIHdpZHRoL2hlaWdodCBvZiB0aGUgcmVjdFxuICAgIGNvbnN0IHRocmVzaG9sZCA9IDI7XG4gICAgcmV0dXJuIHggPj0geE1pbiAtIHRocmVzaG9sZCAmJiB4IDw9IHhNYXggKyB0aHJlc2hvbGQgJiYgeSA+PSB5TWluIC0gdGhyZXNob2xkICYmIHkgPD0geU1heCArIHRocmVzaG9sZCA/XG4gICAgICB0aGlzLmRpc3RUb1N0cmFpZ2h0TGluZVNlZ21lbnQoeCwgeSwgcDEsIHAyKSA6XG4gICAgICBudWxsO1xuICB9XG5cbiAgZGlzdFRvU3RyYWlnaHRMaW5lU2VnbWVudCh4OiBudW1iZXIsIHk6IG51bWJlciwgcDE6IERHLlBvaW50LCBwMjogREcuUG9pbnQpIHtcbiAgICBjb25zdCBkaXN0ID0gKHgxOiBudW1iZXIsIHkxOiBudW1iZXIsIHgyOiBudW1iZXIsIHkyOiBudW1iZXIpID0+IE1hdGgucG93KCh4MSAtIHgyKSwgMikgKyBNYXRoLnBvdygoeTEgLSB5MiksIDIpO1xuICAgIGNvbnN0IGwgPSBkaXN0KHAxLngsIHAxLnksIHAyLngsIHAyLnkpO1xuICAgIGlmIChsID09IDApIHJldHVybiBkaXN0KHgsIHksIHAxLngsIHAxLnkpO1xuICAgIGxldCB0ID0gKCh4IC0gcDEueCkgKiAocDIueCAtIHAxLngpICsgKHkgLSBwMS55KSAqIChwMi55IC0gcDEueSkpIC8gbDtcbiAgICB0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgdCkpO1xuICAgIHJldHVybiBkaXN0KHgsIHksIHAxLnggKyB0ICogKHAyLnggLSBwMS54KSwgcDEueSArIHQgKiAocDIueSAtIHAxLnkpKTtcbiAgfVxuXG4gIGNhbGN1bGF0ZURpc3RUb0N1cnZlTGluZShpOiBudW1iZXIsIHg6IG51bWJlciwgeTogbnVtYmVyLCBwMTogREcuUG9pbnQsIHAyOiBERy5Qb2ludCxcbiAgICBwYzogREcuUG9pbnQpOiBudW1iZXIgfCBudWxsIHtcbiAgICAvKiBjYWxjdWxhdGluZyBjb29yZGluYXRlcyBvZiBhIHJlY3QgYXJvdW5kIGEgbGluZS4gSWYgY3Vyc29yIGNvb3JkcyBhcmUgb3V0c2lkZSB0aGlzIHNoYXBlIC0gYXNzdW1lIHRoYXRcbiAgICAgICAgcG9pbnQgaXMgbm90IG9uIGxpbmUgYW5kIGRvIG5vdCBjYWxjdWxhdGUgZGlzdGFuY2UgdG8gbGluZSAqL1xuICAgIGNvbnN0IHhNaW4gPSBNYXRoLm1pbihwMS54LCBwMi54LCBwYy54KTtcbiAgICBjb25zdCB4TWF4ID0gTWF0aC5tYXgocDEueCwgcDIueCwgcGMueCk7XG4gICAgY29uc3QgeU1pbiA9IE1hdGgubWluKHAxLnksIHAyLnksIHBjLnkpO1xuICAgIGNvbnN0IHlNYXggPSBNYXRoLm1heChwMS55LCBwMi55LCBwYy55KTtcblxuICAgIC8vYWRkaW5nIGEgY291cGxlIG9mIHBpeGVscyB0byBpbmNyZWFzZSB0aGUgd2lkdGgvaGVpZ2h0IG9mIHRoZSByZWN0XG4gICAgY29uc3QgdGhyZXNob2xkID0gMjtcbiAgICBpZiAoeCA+PSB4TWluIC0gdGhyZXNob2xkICYmIHggPD0geE1heCArIHRocmVzaG9sZCAmJiB5ID49IHlNaW4gLSB0aHJlc2hvbGQgJiYgeSA8PSB5TWF4ICsgdGhyZXNob2xkKSB7XG4gICAgICBjb25zdCB3ID0geE1heCAtIHhNaW47XG4gICAgICBjb25zdCBoID0geU1heCAtIHlNaW47XG4gICAgICByZXR1cm4gdGhpcy5jYWxjdWxhdGVEaXN0VG9DdXJ2ZUluUmVjdCh4LCB5LCBwMSwgcGMsIHAyLCB3LCBoKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjYWxjdWxhdGVEaXN0VG9DdXJ2ZUluUmVjdCh4OiBudW1iZXIsIHk6IG51bWJlciwgcDA6IERHLlBvaW50LCBwMTogREcuUG9pbnQsIHAyOiBERy5Qb2ludCxcbiAgICB3OiBudW1iZXIsIGg6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3Qgc3RlcExlbiA9IDM7XG4gICAgY29uc3Qgc3RlcHNOdW0gPSBNYXRoLmZsb29yKCh3ICsgaCkgLyBzdGVwTGVuKTtcbiAgICBjb25zdCBkZWx0YVQgPSAxIC8gc3RlcHNOdW07XG4gICAgY29uc3QgYXJyWCA9IG5ldyBVaW50MzJBcnJheShzdGVwc051bSk7XG4gICAgY29uc3QgYXJyWSA9IG5ldyBVaW50MzJBcnJheShzdGVwc051bSk7XG4gICAgY29uc3QgbWF4SFcgPSBuZXcgVWludDMyQXJyYXkoc3RlcHNOdW0pO1xuICAgIGxldCBtaW5TdW1IVzogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gICAgY29uc3QgY2FuZGlkYXRlSWR4cyA9IG5ldyBCaXRBcnJheShzdGVwc051bSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJYLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCB0ID0gaSAqIGRlbHRhVDtcbiAgICAgIGNvbnN0IHhPbkN1cnZlID0gTWF0aC5wb3coKDEgLSB0KSwgMikgKiBwMC54ICsgMiAqIHQgKiAoMSAtIHQpICogcDEueCArIE1hdGgucG93KHQsIDIpICogcDIueDtcbiAgICAgIGNvbnN0IHlPbkN1cnZlID0gTWF0aC5wb3coKDEgLSB0KSwgMikgKiBwMC55ICsgMiAqIHQgKiAoMSAtIHQpICogcDEueSArIE1hdGgucG93KHQsIDIpICogcDIueTtcbiAgICAgIGNvbnN0IHJlY3RXID0gTWF0aC5hYnMoeCAtIHhPbkN1cnZlKTtcbiAgICAgIGNvbnN0IHJlY3RIID0gTWF0aC5hYnMoeSAtIHlPbkN1cnZlKTtcbiAgICAgIGNvbnN0IHN1bUhXID0gcmVjdFcgKyByZWN0SDtcbiAgICAgIGlmICghbWluU3VtSFcgfHwgbWluU3VtSFcgPiBzdW1IVylcbiAgICAgICAgbWluU3VtSFcgPSBzdW1IVztcbiAgICAgIG1heEhXW2ldID0gTWF0aC5tYXgocmVjdFcsIHJlY3RIKTtcbiAgICAgIGFyclhbaV0gPSB4T25DdXJ2ZTtcbiAgICAgIGFycllbaV0gPSB5T25DdXJ2ZTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJYLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobWF4SFdbaV0gPCBtaW5TdW1IVyEpXG4gICAgICAgIGNhbmRpZGF0ZUlkeHMuc2V0Qml0KGksIHRydWUsIGZhbHNlKTtcbiAgICB9XG4gICAgbGV0IG1pbkRpc3Q6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgIGZvciAobGV0IGogPSAtMTsgKGogPSBjYW5kaWRhdGVJZHhzLmZpbmROZXh0KGopKSAhPT0gLTE7KSB7XG4gICAgICBjb25zdCBkaXN0ID0gTWF0aC5oeXBvdCgoYXJyWFtqXSAtIHgpLCAoYXJyWVtqXSAtIHkpKTtcbiAgICAgIGlmICghbWluRGlzdCB8fCBtaW5EaXN0ID4gZGlzdClcbiAgICAgICAgbWluRGlzdCA9IGRpc3Q7XG4gICAgfVxuICAgIHJldHVybiBtaW5EaXN0ITtcbiAgfVxuXG4gIGdldExpbmVMZW5ndGgocDF4OiBudW1iZXIsIHAxeTogbnVtYmVyLCBwMng6IG51bWJlciwgcDJ5OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLnNxcnQoTWF0aC5wb3cocDJ4IC0gcDF4LCAyKSArIE1hdGgucG93KHAyeSAtIHAxeSwgMikpO1xuICB9XG5cbiAgZ2V0UG9pbnRPbkRpc3RhbmNlKHAxeDogbnVtYmVyLCBwMXk6IG51bWJlciwgcDJ4OiBudW1iZXIsIHAyeTogbnVtYmVyLCBkaXN0YW5jZTogbnVtYmVyLCBsZW5ndGg6IG51bWJlcik6IERHLlBvaW50IHtcbiAgICBjb25zdCBkeCA9IChwMnggLSBwMXgpIC8gbGVuZ3RoO1xuICAgIGNvbnN0IGR5ID0gKHAyeSAtIHAxeSkgLyBsZW5ndGg7XG4gICAgY29uc3QgcDN4ID0gcDJ4IC0gZGlzdGFuY2UgKiBkeDtcbiAgICBjb25zdCBwM3kgPSBwMnkgLSBkaXN0YW5jZSAqIGR5O1xuXG4gICAgcmV0dXJuIG5ldyBERy5Qb2ludChwM3gsIHAzeSk7XG4gIH1cblxuICBmaW5kQ29udHJvbFBvaW50KGlkeDogbnVtYmVyLCB4MTogbnVtYmVyLCB5MTogbnVtYmVyLCB4MjogbnVtYmVyLCB5MjogbnVtYmVyLCBpPzogbnVtYmVyKTogREcuUG9pbnQge1xuICAgIGNvbnN0IG1pZFggPSB4MSArICh4MiAtIHgxKSAvIDI7XG4gICAgY29uc3QgbWlkWSA9IHkxICsgKHkyIC0geTEpIC8gMjtcbiAgICBsZXQgZHggPSBtaWRYIC0geDE7XG4gICAgbGV0IGR5ID0gbWlkWSAtIHkxO1xuICAgIGNvbnN0IGRpc3QgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuICAgIGR4IC89IGRpc3Q7XG4gICAgZHkgLz0gZGlzdDtcbiAgICBjb25zdCBwZXJwZW5kaWN1bGFyTGVuID0gNTAgKiBNYXRoLmNlaWwoaWR4IC8gMik7XG4gICAgcmV0dXJuIGlkeCAlIDIgPT09IDAgP1xuICAgICAgbmV3IERHLlBvaW50KG1pZFggKyAocGVycGVuZGljdWxhckxlbiAvIDIpICogZHksIG1pZFkgLSAocGVycGVuZGljdWxhckxlbiAvIDIpICogZHgpIDpcbiAgICAgIG5ldyBERy5Qb2ludChtaWRYIC0gKHBlcnBlbmRpY3VsYXJMZW4gLyAyKSAqIGR5LCBtaWRZICsgKHBlcnBlbmRpY3VsYXJMZW4gLyAyKSAqIGR4KTtcbiAgfVxuXG4gIGNhbnZhc0Fycm93KHBhdGg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgYXJyb3dFbmRYOiBudW1iZXIsIGFycm93RW5kWTogbnVtYmVyLCBxdWFkWDogbnVtYmVyLCBxdWFkWTogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgYXJyb3dBbmdsZSA9IE1hdGguYXRhbjIocXVhZFggLSBhcnJvd0VuZFgsIHF1YWRZIC0gYXJyb3dFbmRZKSArIE1hdGguUEk7XG4gICAgcGF0aC5tb3ZlVG8oYXJyb3dFbmRYIC0gKHRoaXMuYXJyb3dXaWR0aCAqIE1hdGguc2luKGFycm93QW5nbGUgLSBNYXRoLlBJIC8gMTApKSxcbiAgICAgIGFycm93RW5kWSAtICh0aGlzLmFycm93V2lkdGggKiBNYXRoLmNvcyhhcnJvd0FuZ2xlIC0gTWF0aC5QSSAvIDEwKSkpO1xuICAgIHBhdGgubGluZVRvKGFycm93RW5kWCwgYXJyb3dFbmRZKTtcbiAgICBwYXRoLmxpbmVUbyhhcnJvd0VuZFggLSAodGhpcy5hcnJvd1dpZHRoICogTWF0aC5zaW4oYXJyb3dBbmdsZSArIE1hdGguUEkgLyAxMCkpLFxuICAgICAgYXJyb3dFbmRZIC0gKHRoaXMuYXJyb3dXaWR0aCAqIE1hdGguY29zKGFycm93QW5nbGUgKyBNYXRoLlBJIC8gMTApKSk7XG4gIH1cbn1cbiJdfQ==
334
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLWxpbmVzLW9uLXNwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicmVuZGVyLWxpbmVzLW9uLXNwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDRCQUE0QjtBQUM1QixPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxRQUFRLE1BQU0sYUFBYSxDQUFDO0FBRW5DLE1BQU0sQ0FBTixJQUFZLDJCQUlYO0FBSkQsV0FBWSwyQkFBMkI7SUFDbkMsNENBQWEsQ0FBQTtJQUNiLDRDQUFhLENBQUE7SUFDYixnREFBaUIsQ0FBQTtBQUNyQixDQUFDLEVBSlcsMkJBQTJCLEtBQTNCLDJCQUEyQixRQUl0QztBQThCRCxNQUFNLE9BQU8sd0JBQXdCO0lBZ0JuQyxJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQUksYUFBYSxDQUFDLEVBQVU7UUFDMUIsSUFBSSxFQUFFLEtBQUssSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUMvQixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDMUI7SUFDSCxDQUFDO0lBRUQsSUFBSSxhQUFhLENBQUMsS0FBa0I7UUFDbEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQUksZUFBZSxDQUFDLFVBQW9CO1FBQ3RDLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsWUFBWSxFQUF3QixFQUFFLEtBQWEsRUFBRSxLQUFhLEVBQUUsS0FBa0IsRUFDcEYsZ0JBQWdCLEdBQUcsMkJBQTJCLENBQUMsSUFBSTs7UUFsQ3JELG9CQUFlLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFckIsZ0JBQVcsR0FBRyxJQUFJLE9BQU8sRUFBc0IsQ0FBQztRQUNoRCxjQUFTLEdBQUcsSUFBSSxPQUFPLEVBQXNCLENBQUM7UUFHOUMsb0JBQWUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUlyQixlQUFVLEdBQUcsRUFBRSxDQUFDO1FBeUJkLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQTZCLENBQUM7UUFDcEUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO1FBQ3pDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFBLEtBQUssQ0FBQyxVQUFVLG1DQUFJLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNFLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVTtZQUNuQixJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdEMsSUFBSSxLQUFLLENBQUMsU0FBUztZQUNqQixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFFcEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEdBQUcsQ0FBQyxLQUFpQixFQUFFLEVBQUU7WUFDOUMsSUFBSSxJQUFJLENBQUMsZUFBZSxLQUFLLENBQUMsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztRQUN4RyxDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsR0FBRyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtZQUM5QyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM1RSxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssQ0FBQyxDQUFDO2dCQUM3QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO1FBQ3RHLENBQUMsQ0FBQztRQUVGLEVBQUUsQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUM7YUFDL0IsU0FBUyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUU7WUFDcEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFrQjtRQUM1QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLEtBQUssQ0FBQyx3QkFBd0I7WUFDakMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7O1lBRS9CLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELFdBQVc7O1FBQ1QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUM7UUFDekMsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQztRQUN4SCxJQUFJLENBQUMsb0JBQW9CLEVBQUU7WUFDekIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsTUFBQSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssbUNBQUksQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxHQUFHLFFBQVEsTUFBQSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssbUNBQUksU0FBUyxJQUFJLE1BQUEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLG1DQUFJLENBQUMsR0FBRyxDQUFDO1NBQzVGO1FBQ0QsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDeEcsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO1FBQ3hDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDL0MsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUMvRixJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7Z0JBQ2hCLE1BQU0sRUFBQyxRQUFRLEVBQUUsTUFBTSxFQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUMxRSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdEgsSUFBSSxFQUFFLEdBQUcsU0FBUyxhQUFULFNBQVMsdUJBQVQsU0FBUyxDQUFFLENBQUMsQ0FBQztnQkFDdEIsSUFBSSxFQUFFLEdBQUcsU0FBUyxhQUFULFNBQVMsdUJBQVQsU0FBUyxDQUFFLENBQUMsQ0FBQztnQkFDdEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hILElBQUksRUFBRSxHQUFHLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxDQUFDLENBQUM7Z0JBQ3BCLElBQUksRUFBRSxHQUFHLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxDQUFDLENBQUM7Z0JBQ3BCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN4RSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNyQixJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUcsR0FBRyxFQUFHLEVBQUUsRUFBRyxHQUFHLEVBQUcsQ0FBQyxHQUFHLE9BQU8sR0FBRyxJQUFJLEVBQUU7b0JBQzdFLElBQUksb0JBQW9CLEVBQUU7d0JBQ3hCLE1BQU0sS0FBSyxHQUFHLENBQUEsTUFBQSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sMENBQUcsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLE1BQUEsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLDBDQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFBLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxtQ0FBSSxTQUFTLENBQUM7d0JBQzlGLE1BQU0sT0FBTyxHQUFHLENBQUEsTUFBQSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsMENBQUcsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLE1BQUEsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLDBDQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFBLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxtQ0FBSSxDQUFDLENBQUM7d0JBQ2hHLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxHQUFHLFFBQVEsS0FBSyxJQUFJLE9BQU8sR0FBRyxDQUFDO3dCQUNuRCxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxDQUFBLE1BQUEsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLDBDQUFHLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxNQUFBLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSwwQ0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBQSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssbUNBQUksQ0FBQyxDQUFDO3FCQUM5RjtvQkFDRCxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsZUFBZTt3QkFDNUIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNwQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQy9DLElBQUksWUFBWSxHQUFvQixJQUFJLENBQUM7b0JBQ3pDLElBQUksVUFBVSxFQUFFO3dCQUNkLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO3dCQUM3QyxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO3dCQUN0RixNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO3dCQUN2RixFQUFFLEdBQUcsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO3dCQUM1QixFQUFFLEdBQUcsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO3dCQUM1QixFQUFFLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO3dCQUMzQixFQUFFLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO3dCQUMzQixZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDcEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDdEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQ3ZELElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUcsRUFBRSxFQUFHLENBQUMsQ0FBQzt3QkFDMUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO3FCQUNuRTt5QkFBTTt3QkFDTCxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFHLEVBQUUsRUFBRyxDQUFDLENBQUM7d0JBQzFCLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztxQkFDekI7b0JBQ0QsSUFBSSxNQUFBLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxtQ0FBSSxNQUFBLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSwwQ0FBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7d0JBQ2hFLElBQUksQ0FBQyxPQUFPOzRCQUNWLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO3dCQUMvQyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFOzRCQUM3QixNQUFNLFVBQVUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzs0QkFDakcsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxZQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7NEJBQ25ELE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsWUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDOzRCQUNuRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBQSxVQUFVLGFBQVYsVUFBVSx1QkFBVixVQUFVLENBQUUsQ0FBQyxtQ0FBSSxFQUFFLEVBQUUsTUFBQSxVQUFVLGFBQVYsVUFBVSx1QkFBVixVQUFVLENBQUUsQ0FBQyxtQ0FBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO3lCQUMxRjtxQkFDRjtvQkFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNsQixJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO29CQUNyQixJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsZUFBZTt3QkFDNUIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUN0QzthQUNGO1NBQ0Y7UUFDRCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsc0JBQXNCLENBQUMsSUFBYTtRQUNsQyxRQUFRLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUM3QixLQUFLLDJCQUEyQixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNyQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDO2dCQUN6RCxNQUFNO2FBQ1A7WUFDRCxLQUFLLDJCQUEyQixDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN2QyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUMvRCxNQUFNO2FBQ1A7WUFDRDtnQkFDRSxPQUFPO1NBQ1Y7SUFDSCxDQUFDO0lBRUQsZUFBZSxDQUFDLE1BQVcsRUFBRSxhQUErQixFQUFFLENBQVM7UUFDckUsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNmLElBQUksYUFBYSxFQUFFO1lBQ2pCLFFBQVEsR0FBRyxDQUFDLE1BQU0sQ0FBQyxhQUFhLEdBQUcsQ0FBQyxNQUFNLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDaEksTUFBTSxHQUFHLENBQUMsTUFBTSxDQUFDLGFBQWEsR0FBRyxDQUFDLE1BQU0sQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUM3SDthQUFNLElBQUksTUFBTSxDQUFDLGlCQUFpQixFQUFFO1lBQ25DLFFBQVEsR0FBRyxNQUFNLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO1lBQ3hDLE1BQU0sR0FBRyxNQUFNLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO1NBQ3ZDO1FBQ0QsT0FBTyxFQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUMsQ0FBQztJQUM1QixDQUFDO0lBR0Qsa0JBQWtCO1FBQ2hCLE1BQU0sSUFBSSxHQUFHLElBQUksTUFBTSxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6RyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUM7UUFDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCx1QkFBdUI7UUFDckIsTUFBTSxTQUFTLEdBQThCLEVBQUUsQ0FBQztRQUNoRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQy9DLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztZQUNuQixJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDbEIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDekMsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNoQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDOUI7aUJBQU07Z0JBQ0wsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM5QixTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDaEM7WUFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsVUFBVSxJQUFJLFNBQVMsRUFBRSxDQUFDLEVBQUU7Z0JBQzVDLFNBQVMsQ0FBQyxHQUFHLFVBQVUsSUFBSSxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDL0M7aUJBQU07Z0JBQ0wsSUFBSSxTQUFTLENBQUMsR0FBRyxVQUFVLElBQUksU0FBUyxFQUFFLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO29CQUN4RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLEdBQUcsVUFBVSxJQUFJLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3pFLFNBQVMsQ0FBQyxHQUFHLFVBQVUsSUFBSSxTQUFTLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDakQ7Z0JBQ0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLEdBQUcsVUFBVSxJQUFJLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDNUU7U0FDRjtJQUNILENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxDQUFTLEVBQUUsQ0FBUztRQUNwQyxJQUFJLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN0QixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDbkIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDO1FBQ3pDLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3hHLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUN4QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQy9DLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDL0YsTUFBTSxFQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzFFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsSCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDNUcsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQy9CLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUMvRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7b0JBQ3hGLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLENBQUMsRUFBRSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztvQkFDMUYsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDMUQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQzNHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDNUcsSUFBSSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDO2lCQUNuRjtxQkFBTTtvQkFDTCxJQUFJLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2lCQUMzRDtnQkFDRCxJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksT0FBTyxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLE9BQU8sRUFBRTtvQkFDekYsT0FBTyxHQUFHLElBQUksQ0FBQztvQkFDZixZQUFZLEdBQUcsQ0FBQyxDQUFDO2lCQUNsQjthQUNGO1NBQ0Y7UUFDRCxPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBRUQsMkJBQTJCLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxFQUFZLEVBQUUsRUFBWTtRQUMxRTt5RUFDaUU7UUFDakUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVsQyxvRUFBb0U7UUFDcEUsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLE9BQU8sQ0FBQyxJQUFJLElBQUksR0FBRyxTQUFTLElBQUksQ0FBQyxJQUFJLElBQUksR0FBRyxTQUFTLElBQUksQ0FBQyxJQUFJLElBQUksR0FBRyxTQUFTLElBQUksQ0FBQyxJQUFJLElBQUksR0FBRyxTQUFTLENBQUMsQ0FBQztZQUN2RyxJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM5QyxJQUFJLENBQUM7SUFDVCxDQUFDO0lBRUQseUJBQXlCLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxFQUFZLEVBQUUsRUFBWTtRQUN4RSxNQUFNLElBQUksR0FBRyxDQUFDLEVBQVUsRUFBRSxFQUFVLEVBQUUsRUFBVSxFQUFFLEVBQVUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2pILE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0RSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQyxPQUFPLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxDQUFTLEVBQUUsQ0FBUyxFQUFFLENBQVMsRUFBRSxFQUFZLEVBQUUsRUFBWSxFQUNsRixFQUFZO1FBQ1o7eUVBQ2lFO1FBQ2pFLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV4QyxvRUFBb0U7UUFDcEUsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxJQUFJLElBQUksR0FBRyxTQUFTLElBQUksQ0FBQyxJQUFJLElBQUksR0FBRyxTQUFTLElBQUksQ0FBQyxJQUFJLElBQUksR0FBRyxTQUFTLElBQUksQ0FBQyxJQUFJLElBQUksR0FBRyxTQUFTLEVBQUU7WUFDcEcsTUFBTSxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztZQUN0QixNQUFNLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLE9BQU8sSUFBSSxDQUFDLDBCQUEwQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ2hFO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsMEJBQTBCLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxFQUFZLEVBQUUsRUFBWSxFQUFFLEVBQVksRUFDdkYsQ0FBUyxFQUFFLENBQVM7UUFDcEIsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7UUFDL0MsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQztRQUM1QixNQUFNLElBQUksR0FBRyxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN2QyxNQUFNLElBQUksR0FBRyxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN2QyxNQUFNLEtBQUssR0FBRyxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4QyxJQUFJLFFBQVEsR0FBa0IsSUFBSSxDQUFDO1FBQ25DLE1BQU0sYUFBYSxHQUFHLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3BDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7WUFDckIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzlGLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM5RixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQztZQUNyQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxD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QUMsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQzdFLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekUsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7U3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgQml0QXJyYXkgZnJvbSAnLi9iaXQtYXJyYXknO1xuXG5leHBvcnQgZW51bSBTY2F0dGVyUGxvdEN1cnJlbnRMaW5lU3R5bGUge1xuICAgIG5vbmUgPSAnbm9uZScsXG4gICAgYm9sZCA9ICdib2xkJyxcbiAgICBkYXNoZWQgPSAnZGFzaGVkJ1xufVxuXG50eXBlIE1hcmtlclNpemUgPSB7XG4gICAgc2l6ZUZyb206IG51bWJlcixcbiAgICBzaXplVG86IG51bWJlclxufVxuXG5leHBvcnQgdHlwZSBNb3VzZU92ZXJMaW5lRXZlbnQgPSB7XG4gICAgeDogbnVtYmVyO1xuICAgIHk6IG51bWJlcjtcbiAgICBpZDogbnVtYmVyO1xuICAgIGV2ZW50OiBNb3VzZUV2ZW50XG59XG5cbmV4cG9ydCB0eXBlIElMaW5lU2VyaWVzID0ge1xuICAgIGZyb206IFVpbnQzMkFycmF5O1xuICAgIHRvOiBVaW50MzJBcnJheTtcbiAgICBjb2xvcj86IHN0cmluZzsgLy8gY29tbW9uIGNvbG9yLiBVc2UgW2NvbG9yc10gaWYgeW91IG5lZWQgaW5kaXZpZHVhbCBjb2xvcnMgcGVyIGxpbmVcbiAgICBjb2xvcnM/OiBzdHJpbmdbXTsgLy8gbGluZSBjb2xvcnMuIElmIHRoZXkgYXJlIHRoZSBzYW1lIGZvciB0aGUgc2VyaWVzLCB1c2UgW2NvbG9yXSBpbnN0ZWFkLlxuICAgIHdpZHRoPzogbnVtYmVyOyAvLyBjb21tb24gd2lkdGguIFVzZSBbY29sb3JzXSBpZiB5b3UgbmVlZCBpbmRpdmlkdWFsIHdpZHRocyBwZXIgbGluZVxuICAgIHdpZHRocz86IEZsb2F0MzJBcnJheTsgLy8gbGluZSB3aWR0aHMuIElmIHRoZXkgYXJlIHRoZSBzYW1lIGZvciB0aGUgc2VyaWVzLCB1c2UgW3dpZHRoXSBpbnN0ZWFkLlxuICAgIG9wYWNpdHk/OiBudW1iZXI7IC8vIGNvbW1vbiBvcGFjaXR5LiBVc2UgW29wYWNpdGllc10gaWYgeW91IG5lZWQgaW5kaXZpZHVhbCBvcGFjaXRpZXMgcGVyIGxpbmVcbiAgICBvcGFjaXRpZXM/OiBGbG9hdDMyQXJyYXk7IC8vIGxpbmUgb3BhY2l0aWVzLiBJZiB0aGV5IGFyZSB0aGUgc2FtZSBmb3IgdGhlIHNlcmllcywgdXNlIFtvcGFjaXR5XSBpbnN0ZWFkXG4gICAgZHJhd0Fycm93cz86IGJvb2xlYW47IC8vIGNvbW1vbiBwYXJhbWV0ZXIgdG8gZHJhdyBhcnJvd3MuIFVzZSBbZHJhd0Fycm93c0Fycl0gaWYgeW91IG5lZWQgdG8gZHJhdyBhcnJvd3Mgbm90IGZvciBlYWNoIGxpbmVcbiAgICBkcmF3QXJyb3dzQXJyPzogQml0QXJyYXk7IC8vIGluZGl2aWR1YWwgcGFyYW1ldGVyIGZvciBlYWNoIGxpbmUuIElmIHRoZXkgYXJlIHRoZSBzYW1lIGZvciB0aGUgc2VyaWVzLCB1c2UgW2RyYXdBcnJvd3NdIGluc3RlYWRcbiAgICB2aXNpYmlsaXR5PzogQml0QXJyYXk7IC8vIGluZGl2aWR1YWwgcGFyYW1ldGVyIGZvciBlYWNoIGxpbmUuIFNldCBiaXQgdG8gZmFsc2UgdG8gaGlkZSB0aGUgbGluZVxuICAgIGFycm93U2l6ZT86IG51bWJlcjsgLy8gY29tbW9uIGZvciBhbGwgYXJyb3dzXG4gICAgc2tpcE11bHRpTGluZUNhbGN1bGF0aW9uPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIFNjYXR0ZXJQbG90TGluZXNSZW5kZXJlciB7XG4gIHNwOiBERy5TY2F0dGVyUGxvdFZpZXdlcjtcbiAgeEF4aXNDb2w6IERHLkNvbHVtbjtcbiAgeUF4aXNDb2w6IERHLkNvbHVtbjtcbiAgX2N1cnJlbnRMaW5lSWR4ID0gLTE7XG4gIGxpbmVzITogSUxpbmVTZXJpZXM7XG4gIGxpbmVDbGlja2VkID0gbmV3IFN1YmplY3Q8TW91c2VPdmVyTGluZUV2ZW50PigpO1xuICBsaW5lSG92ZXIgPSBuZXcgU3ViamVjdDxNb3VzZU92ZXJMaW5lRXZlbnQ+KCk7XG4gIGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQ7XG4gIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEO1xuICBtb3VzZU92ZXJMaW5lSWQgPSAtMTtcbiAgbXVsdGlwbGVMaW5lc0NvdW50cyE6IFVpbnQ4QXJyYXk7XG4gIHZpc2liaWxpdHk6IEJpdEFycmF5O1xuICBjdXJyZW50TGluZVN0eWxlOiBTY2F0dGVyUGxvdEN1cnJlbnRMaW5lU3R5bGU7XG4gIGFycm93V2lkdGggPSAxNTtcblxuICBnZXQgY3VycmVudExpbmVJZCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50TGluZUlkeDtcbiAgfVxuXG4gIHNldCBjdXJyZW50TGluZUlkKGlkOiBudW1iZXIpIHtcbiAgICBpZiAoaWQgIT09IHRoaXMuX2N1cnJlbnRMaW5lSWR4KSB7XG4gICAgICB0aGlzLl9jdXJyZW50TGluZUlkeCA9IGlkO1xuICAgICAgdGhpcy5zcC5yZW5kZXIodGhpcy5jdHgpO1xuICAgIH1cbiAgfVxuXG4gIHNldCBsaW5lc1RvUmVuZGVyKGxpbmVzOiBJTGluZVNlcmllcykge1xuICAgIHRoaXMudXBkYXRlTGluZXMobGluZXMpO1xuICAgIHRoaXMuc3AucmVuZGVyKHRoaXMuY3R4KTtcbiAgfVxuXG4gIHNldCBsaW5lc1Zpc2liaWxpdHkodmlzaWJpbGl0eTogQml0QXJyYXkpIHtcbiAgICB0aGlzLnZpc2liaWxpdHkgPSB2aXNpYmlsaXR5O1xuICAgIHRoaXMuc3AucmVuZGVyKHRoaXMuY3R4KTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHNwOiBERy5TY2F0dGVyUGxvdFZpZXdlciwgeEF4aXM6IHN0cmluZywgeUF4aXM6IHN0cmluZywgbGluZXM6IElMaW5lU2VyaWVzLFxuICAgIGN1cnJlbnRMaW5lU3R5bGUgPSBTY2F0dGVyUGxvdEN1cnJlbnRMaW5lU3R5bGUubm9uZSkge1xuICAgIHRoaXMuc3AgPSBzcDtcbiAgICB0aGlzLnhBeGlzQ29sID0gdGhpcy5zcC5kYXRhRnJhbWUhLmNvbHVtbnMuYnlOYW1lKHhBeGlzKTtcbiAgICB0aGlzLnlBeGlzQ29sID0gdGhpcy5zcC5kYXRhRnJhbWUhLmNvbHVtbnMuYnlOYW1lKHlBeGlzKTtcbiAgICB0aGlzLmNhbnZhcyA9IHRoaXMuc3AuZ2V0SW5mbygpWydjYW52YXMnXTtcbiAgICB0aGlzLmN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJykgYXMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEO1xuICAgIHRoaXMuY3VycmVudExpbmVTdHlsZSA9IGN1cnJlbnRMaW5lU3R5bGU7XG4gICAgdGhpcy51cGRhdGVMaW5lcyhsaW5lcyk7XG4gICAgdGhpcy52aXNpYmlsaXR5ID0gbGluZXMudmlzaWJpbGl0eSA/PyBuZXcgQml0QXJyYXkodGhpcy5saW5lcy5mcm9tLmxlbmd0aCk7XG4gICAgaWYgKCFsaW5lcy52aXNpYmlsaXR5KVxuICAgICAgdGhpcy52aXNpYmlsaXR5LnNldEFsbCh0cnVlLCBmYWxzZSk7XG4gICAgaWYgKGxpbmVzLmFycm93U2l6ZSlcbiAgICAgIHRoaXMuYXJyb3dXaWR0aCA9IGxpbmVzLmFycm93U2l6ZTtcblxuICAgIHRoaXMuY2FudmFzLm9ubW91c2Vkb3duID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBpZiAodGhpcy5tb3VzZU92ZXJMaW5lSWQgIT09IC0xKVxuICAgICAgICB0aGlzLmxpbmVDbGlja2VkLm5leHQoe3g6IGV2ZW50LmNsaWVudFgsIHk6IGV2ZW50LmNsaWVudFksIGlkOiB0aGlzLm1vdXNlT3ZlckxpbmVJZCwgZXZlbnQ6IGV2ZW50fSk7XG4gICAgfTtcblxuICAgIHRoaXMuY2FudmFzLm9ubW91c2Vtb3ZlID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICB0aGlzLm1vdXNlT3ZlckxpbmVJZCA9IHRoaXMuY2hlY2tDb29yZHNPbkxpbmUoZXZlbnQub2Zmc2V0WCwgZXZlbnQub2Zmc2V0WSk7XG4gICAgICBpZiAodGhpcy5tb3VzZU92ZXJMaW5lSWQgIT09IC0xKVxuICAgICAgICB0aGlzLmxpbmVIb3Zlci5uZXh0KHt4OiBldmVudC5jbGllbnRYLCB5OiBldmVudC5jbGllbnRZLCBpZDogdGhpcy5tb3VzZU92ZXJMaW5lSWQsIGV2ZW50OiBldmVudH0pO1xuICAgIH07XG5cbiAgICBzcC5vbkV2ZW50KCdkNC1iZWZvcmUtZHJhdy1zY2VuZScpXG4gICAgICAuc3Vic2NyaWJlKChfOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5yZW5kZXJMaW5lcygpO1xuICAgICAgfSk7XG4gIH1cblxuICB1cGRhdGVMaW5lcyhsaW5lczogSUxpbmVTZXJpZXMpIHtcbiAgICB0aGlzLmxpbmVzID0gbGluZXM7XG4gICAgdGhpcy5tdWx0aXBsZUxpbmVzQ291bnRzID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5saW5lcy5mcm9tLmxlbmd0aCk7XG4gICAgaWYgKCFsaW5lcy5za2lwTXVsdGlMaW5lQ2FsY3VsYXRpb24pXG4gICAgICB0aGlzLmNyZWF0ZU11bHRpTGluZXNJbmRpY2VzKCk7XG4gICAgZWxzZVxuICAgICAgdGhpcy5tdWx0aXBsZUxpbmVzQ291bnRzLmZpbGwoMCk7XG4gIH1cblxuICByZW5kZXJMaW5lcygpOiB2b2lkIHtcbiAgICBjb25zdCBzcExvb2sgPSB0aGlzLnNwLmdldE9wdGlvbnMoKS5sb29rO1xuICAgIGNvbnN0IGluZGl2aWR1YWxMaW5lU3R5bGVzID0gdGhpcy5saW5lcy5jb2xvcnMgfHwgdGhpcy5saW5lcy53aWR0aHMgfHwgdGhpcy5saW5lcy5vcGFjaXRpZXMgfHwgdGhpcy5saW5lcy5kcmF3QXJyb3dzQXJyO1xuICAgIGlmICghaW5kaXZpZHVhbExpbmVTdHlsZXMpIHtcbiAgICAgIHRoaXMuY3R4LmxpbmVXaWR0aCA9IHRoaXMubGluZXMud2lkdGggPz8gMTtcbiAgICAgIHRoaXMuY3R4LnN0cm9rZVN0eWxlID0gYHJnYmEoJHt0aGlzLmxpbmVzLmNvbG9yID8/ICcwLDEyOCwwJ30sJHt0aGlzLmxpbmVzLm9wYWNpdHkgPz8gMX0pYDtcbiAgICB9XG4gICAgY29uc3QgbWFya2VyU2l6ZUNvbCA9IHNwTG9va1snc2l6ZUNvbHVtbk5hbWUnXSA/IHRoaXMuc3AuZGF0YUZyYW1lLmNvbChzcExvb2tbJ3NpemVDb2x1bW5OYW1lJ10pIDogbnVsbDtcbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLnNwLmRhdGFGcmFtZS5maWx0ZXI7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxpbmVzLmZyb20ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChmaWx0ZXIuZ2V0KHRoaXMubGluZXMuZnJvbVtpXSkgJiYgZmlsdGVyLmdldCh0aGlzLmxpbmVzLnRvW2ldKSAmJiB0aGlzLnZpc2liaWxpdHkuZ2V0Qml0KGkpKSB7XG4gICAgICAgIGxldCBsaW5lTGVuID0gMDtcbiAgICAgICAgY29uc3Qge3NpemVGcm9tLCBzaXplVG99ID0gdGhpcy5nZXRNYXJrZXJzU2l6ZXMoc3BMb29rLCBtYXJrZXJTaXplQ29sLCBpKTtcbiAgICAgICAgY29uc3QgcG9pbnRGcm9tID0gdGhpcy5zcC53b3JsZFRvU2NyZWVuKHRoaXMueEF4aXNDb2wuZ2V0KHRoaXMubGluZXMuZnJvbVtpXSksIHRoaXMueUF4aXNDb2wuZ2V0KHRoaXMubGluZXMuZnJvbVtpXSkpO1xuICAgICAgICBsZXQgYVggPSBwb2ludEZyb20/Lng7XG4gICAgICAgIGxldCBhWSA9IHBvaW50RnJvbT8ueTtcbiAgICAgICAgY29uc3QgcG9pbnRUbyA9IHRoaXMuc3Aud29ybGRUb1NjcmVlbih0aGlzLnhBeGlzQ29sLmdldCh0aGlzLmxpbmVzLnRvW2ldKSwgdGhpcy55QXhpc0NvbC5nZXQodGhpcy5saW5lcy50b1tpXSkpO1xuICAgICAgICBsZXQgYlggPSBwb2ludFRvPy54O1xuICAgICAgICBsZXQgYlkgPSBwb2ludFRvPy55O1xuICAgICAgICBjb25zdCBtaW5BeGlzID0gTWF0aC5taW4odGhpcy5zcC52aWV3Qm94LndpZHRoLCB0aGlzLnNwLnZpZXdCb3guaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5jdHguYmVnaW5QYXRoKCk7XG4gICAgICAgIGlmIChhWCAmJiBhWSAmJiBiWCAmJiBiWSAmJiBNYXRoLmh5cG90KGJYISAtIGFYISwgYlkhIC0gYVkhKSAvIG1pbkF4aXMgPiAwLjAxKSB7XG4gICAgICAgICAgaWYgKGluZGl2aWR1YWxMaW5lU3R5bGVzKSB7XG4gICAgICAgICAgICBjb25zdCBjb2xvciA9IHRoaXMubGluZXMuY29sb3JzPy5baV0gPyB0aGlzLmxpbmVzLmNvbG9ycz8uW2ldIDogdGhpcy5saW5lcy5jb2xvciA/PyAnMCwxMjgsMCc7XG4gICAgICAgICAgICBjb25zdCBvcGFjaXR5ID0gdGhpcy5saW5lcy5vcGFjaXRpZXM/LltpXSA/IHRoaXMubGluZXMub3BhY2l0aWVzPy5baV0gOiB0aGlzLmxpbmVzLm9wYWNpdHkgPz8gMTtcbiAgICAgICAgICAgIHRoaXMuY3R4LnN0cm9rZVN0eWxlID0gYHJnYmEoJHtjb2xvcn0sJHtvcGFjaXR5fSlgO1xuICAgICAgICAgICAgdGhpcy5jdHgubGluZVdpZHRoID0gdGhpcy5saW5lcy53aWR0aHM/LltpXSA/IHRoaXMubGluZXMud2lkdGhzPy5baV0gOiB0aGlzLmxpbmVzLndpZHRoID8/IDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpID09PSB0aGlzLl9jdXJyZW50TGluZUlkeClcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlQ3VycmVudExpbmVTdHlsZSh0cnVlKTtcbiAgICAgICAgICBjb25zdCBtdWx0aUxpbmVzID0gdGhpcy5tdWx0aXBsZUxpbmVzQ291bnRzW2ldO1xuICAgICAgICAgIGxldCBjb250cm9sUG9pbnQ6IERHLlBvaW50IHwgbnVsbCA9IG51bGw7XG4gICAgICAgICAgaWYgKG11bHRpTGluZXMpIHtcbiAgICAgICAgICAgIGxpbmVMZW4gPSB0aGlzLmdldExpbmVMZW5ndGgoYVgsIGFZLCBiWCwgYlkpO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRQb2ludFdpdGhNYXJrZXIgPSB0aGlzLmdldFBvaW50T25EaXN0YW5jZShhWCwgYVksIGJYLCBiWSwgc2l6ZVRvLCBsaW5lTGVuKTtcbiAgICAgICAgICAgIGNvbnN0IGVuZHRQb2ludFdpdGhNYXJrZXIgPSB0aGlzLmdldFBvaW50T25EaXN0YW5jZShiWCwgYlksIGFYLCBhWSwgc2l6ZUZyb20sIGxpbmVMZW4pO1xuICAgICAgICAgICAgYVggPSBzdGFydFBvaW50V2l0aE1hcmtlci54O1xuICAgICAgICAgICAgYVkgPSBzdGFydFBvaW50V2l0aE1hcmtlci55O1xuICAgICAgICAgICAgYlggPSBlbmR0UG9pbnRXaXRoTWFya2VyLng7XG4gICAgICAgICAgICBiWSA9IGVuZHRQb2ludFdpdGhNYXJrZXIueTtcbiAgICAgICAgICAgIGNvbnRyb2xQb2ludCA9IHRoaXMubGluZXMuZnJvbVtpXSA+IHRoaXMubGluZXMudG9baV0gP1xuICAgICAgICAgICAgICB0aGlzLmZpbmRDb250cm9sUG9pbnQobXVsdGlMaW5lcywgYVgsIGFZLCBiWCwgYlksIGkpIDpcbiAgICAgICAgICAgICAgdGhpcy5maW5kQ29udHJvbFBvaW50KG11bHRpTGluZXMsIGJYLCBiWSwgYVgsIGFZLCBpKTtcbiAgICAgICAgICAgIHRoaXMuY3R4Lm1vdmVUbyhhWCEsIGFZISk7XG4gICAgICAgICAgICB0aGlzLmN0eC5xdWFkcmF0aWNDdXJ2ZVRvKGNvbnRyb2xQb2ludC54LCBjb250cm9sUG9pbnQueSwgYlgsIGJZKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jdHgubW92ZVRvKGFYISwgYVkhKTtcbiAgICAgICAgICAgIHRoaXMuY3R4LmxpbmVUbyhiWCwgYlkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5saW5lcy5kcmF3QXJyb3dzID8/IHRoaXMubGluZXMuZHJhd0Fycm93c0Fycj8uZ2V0Qml0KGkpKSB7XG4gICAgICAgICAgICBpZiAoIWxpbmVMZW4pXG4gICAgICAgICAgICAgIGxpbmVMZW4gPSB0aGlzLmdldExpbmVMZW5ndGgoYVgsIGFZLCBiWCwgYlkpO1xuICAgICAgICAgICAgaWYgKGxpbmVMZW4gPiB0aGlzLmFycm93V2lkdGgpIHtcbiAgICAgICAgICAgICAgY29uc3QgYXJyb3dQb2ludCA9ICFtdWx0aUxpbmVzID8gdGhpcy5nZXRQb2ludE9uRGlzdGFuY2UoYVgsIGFZLCBiWCwgYlksIHNpemVUbywgbGluZUxlbikgOiBudWxsO1xuICAgICAgICAgICAgICBjb25zdCBhcnJvd0NQWCA9IG11bHRpTGluZXMgPyBjb250cm9sUG9pbnQhLnggOiBhWDtcbiAgICAgICAgICAgICAgY29uc3QgYXJyb3dDUFkgPSBtdWx0aUxpbmVzID8gY29udHJvbFBvaW50IS55IDogYVk7XG4gICAgICAgICAgICAgIHRoaXMuY2FudmFzQXJyb3codGhpcy5jdHgsIGFycm93UG9pbnQ/LnggPz8gYVgsIGFycm93UG9pbnQ/LnkgPz8gYVksIGFycm93Q1BYLCBhcnJvd0NQWSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuY3R4LnN0cm9rZSgpO1xuICAgICAgICAgIHRoaXMuY3R4LmNsb3NlUGF0aCgpO1xuICAgICAgICAgIGlmIChpID09PSB0aGlzLl9jdXJyZW50TGluZUlkeClcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlQ3VycmVudExpbmVTdHlsZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5maWxsTGVmdEJvdHRvbVJlY3QoKTtcbiAgfVxuXG4gIHRvZ2dsZUN1cnJlbnRMaW5lU3R5bGUoZmxhZzogYm9vbGVhbikge1xuICAgIHN3aXRjaCAodGhpcy5jdXJyZW50TGluZVN0eWxlKSB7XG4gICAgICBjYXNlIFNjYXR0ZXJQbG90Q3VycmVudExpbmVTdHlsZS5ib2xkOiB7XG4gICAgICAgIGZsYWcgPyB0aGlzLmN0eC5saW5lV2lkdGggKz0gMiA6IHRoaXMuY3R4LmxpbmVXaWR0aCAtPSAyO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgU2NhdHRlclBsb3RDdXJyZW50TGluZVN0eWxlLmRhc2hlZDoge1xuICAgICAgICBmbGFnID8gdGhpcy5jdHguc2V0TGluZURhc2goWzUsIDVdKSA6IHRoaXMuY3R4LnNldExpbmVEYXNoKFtdKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgZ2V0TWFya2Vyc1NpemVzKHNwTG9vazogYW55LCBtYXJrZXJTaXplQ29sOiBERy5Db2x1bW4gfCBudWxsLCBpOiBudW1iZXIpOiBNYXJrZXJTaXplIHtcbiAgICBsZXQgc2l6ZUZyb20gPSAzO1xuICAgIGxldCBzaXplVG8gPSAzO1xuICAgIGlmIChtYXJrZXJTaXplQ29sKSB7XG4gICAgICBzaXplRnJvbSA9IChzcExvb2subWFya2VyTWluU2l6ZSArIChzcExvb2subWFya2VyTWF4U2l6ZSAtIHNwTG9vay5tYXJrZXJNaW5TaXplKSAqIG1hcmtlclNpemVDb2wuc2NhbGUodGhpcy5saW5lcy5mcm9tW2ldKSkgLyAyO1xuICAgICAgc2l6ZVRvID0gKHNwTG9vay5tYXJrZXJNaW5TaXplICsgKHNwTG9vay5tYXJrZXJNYXhTaXplIC0gc3BMb29rLm1hcmtlck1pblNpemUpICogbWFya2VyU2l6ZUNvbC5zY2FsZSh0aGlzLmxpbmVzLnRvW2ldKSkgLyAyO1xuICAgIH0gZWxzZSBpZiAoc3BMb29rLm1hcmtlckRlZmF1bHRTaXplKSB7XG4gICAgICBzaXplRnJvbSA9IHNwTG9vay5tYXJrZXJEZWZhdWx0U2l6ZSAvIDI7XG4gICAgICBzaXplVG8gPSBzcExvb2subWFya2VyRGVmYXVsdFNpemUgLyAyO1xuICAgIH1cbiAgICByZXR1cm4ge3NpemVGcm9tLCBzaXplVG99O1xuICB9XG5cblxuICBmaWxsTGVmdEJvdHRvbVJlY3QoKSB7XG4gICAgY29uc3QgcmVjdCA9IG5ldyBQYXRoMkQoKTtcbiAgICByZWN0LnJlY3QodGhpcy5zcC55QXhpc0JveC5taW5YLCB0aGlzLnNwLnlBeGlzQm94Lm1heFksIHRoaXMuc3AueUF4aXNCb3gud2lkdGgsIHRoaXMuc3AueEF4aXNCb3guaGVpZ2h0KTtcbiAgICB0aGlzLmN0eC5maWxsU3R5bGUgPSBgd2hpdGVgO1xuICAgIHRoaXMuY3R4LmJlZ2luUGF0aCgpO1xuICAgIHRoaXMuY3R4LmZpbGwocmVjdCk7XG4gICAgdGhpcy5jdHguY2xvc2VQYXRoKCk7XG4gIH1cblxuICBjcmVhdGVNdWx0aUxpbmVzSW5kaWNlcygpOiB2b2lkIHtcbiAgICBjb25zdCBsaW5lc0RpY3Q6IHtba2V5OiBzdHJpbmddOiBudW1iZXJbXX0gPSB7fTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGluZXMuZnJvbS5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IHNtYWxsZXJOdW0gPSAwO1xuICAgICAgbGV0IGJpZ2dlck51bSA9IDA7XG4gICAgICBpZiAodGhpcy5saW5lcy5mcm9tW2ldIDwgdGhpcy5saW5lcy50b1tpXSkge1xuICAgICAgICBzbWFsbGVyTnVtID0gdGhpcy5saW5lcy5mcm9tW2ldO1xuICAgICAgICBiaWdnZXJOdW0gPSB0aGlzLmxpbmVzLnRvW2ldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc21hbGxlck51bSA9IHRoaXMubGluZXMudG9baV07XG4gICAgICAgIGJpZ2dlck51bSA9IHRoaXMubGluZXMuZnJvbVtpXTtcbiAgICAgIH1cbiAgICAgIGlmICghbGluZXNEaWN0W2Ake3NtYWxsZXJOdW19fCR7YmlnZ2VyTnVtfWBdKSB7XG4gICAgICAgIGxpbmVzRGljdFtgJHtzbWFsbGVyTnVtfXwke2JpZ2dlck51bX1gXSA9IFtpXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChsaW5lc0RpY3RbYCR7c21hbGxlck51bX18JHtiaWdnZXJOdW19YF0ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgdGhpcy5tdWx0aXBsZUxpbmVzQ291bnRzW2xpbmVzRGljdFtgJHtzbWFsbGVyTnVtfXwke2JpZ2dlck51bX1gXVswXV0gPSAxO1xuICAgICAgICAgIGxpbmVzRGljdFtgJHtzbWFsbGVyTnVtfXwke2JpZ2dlck51bX1gXS5wdXNoKDEpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubXVsdGlwbGVMaW5lc0NvdW50c1tpXSA9ICsrbGluZXNEaWN0W2Ake3NtYWxsZXJOdW19fCR7YmlnZ2VyTnVtfWBdWzFdO1xuICAgICAgfVxuICAgIH0gXG4gIH1cblxuICBjaGVja0Nvb3Jkc09uTGluZSh4OiBudW1iZXIsIHk6IG51bWJlcik6IG51bWJlciB7XG4gICAgbGV0IGNhbmRpZGF0ZUlkeCA9IC0xO1xuICAgIGxldCBtaW5EaXN0ID0gbnVsbDtcbiAgICBsZXQgZGlzdCA9IG51bGw7XG4gICAgY29uc3Qgc3BMb29rID0gdGhpcy5zcC5nZXRPcHRpb25zKCkubG9vaztcbiAgICBjb25zdCBtYXJrZXJTaXplQ29sID0gc3BMb29rWydzaXplQ29sdW1uTmFtZSddID8gdGhpcy5zcC5kYXRhRnJhbWUuY29sKHNwTG9va1snc2l6ZUNvbHVtbk5hbWUnXSkgOiBudWxsO1xuICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuc3AuZGF0YUZyYW1lLmZpbHRlcjtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGluZXMuZnJvbS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGZpbHRlci5nZXQodGhpcy5saW5lcy5mcm9tW2ldKSAmJiBmaWx0ZXIuZ2V0KHRoaXMubGluZXMudG9baV0pICYmIHRoaXMudmlzaWJpbGl0eS5nZXRCaXQoaSkpIHtcbiAgICAgICAgY29uc3Qge3NpemVGcm9tLCBzaXplVG99ID0gdGhpcy5nZXRNYXJrZXJzU2l6ZXMoc3BMb29rLCBtYXJrZXJTaXplQ29sLCBpKTtcbiAgICAgICAgY29uc3QgcEZyb20gPSB0aGlzLnNwLndvcmxkVG9TY3JlZW4odGhpcy54QXhpc0NvbC5nZXQodGhpcy5saW5lcy5mcm9tW2ldKSwgdGhpcy55QXhpc0NvbC5nZXQodGhpcy5saW5lcy5mcm9tW2ldKSk7XG4gICAgICAgIGNvbnN0IHBUbyA9IHRoaXMuc3Aud29ybGRUb1NjcmVlbih0aGlzLnhBeGlzQ29sLmdldCh0aGlzLmxpbmVzLnRvW2ldKSwgdGhpcy55QXhpc0NvbC5nZXQodGhpcy5saW5lcy50b1tpXSkpO1xuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZUxpbmVzQ291bnRzW2ldKSB7XG4gICAgICAgICAgY29uc3QgbGVuID0gdGhpcy5nZXRMaW5lTGVuZ3RoKHBGcm9tLngsIHBGcm9tLnksIHBUby54LCBwVG8ueSk7XG4gICAgICAgICAgY29uc3QgZnJvbU1hcmtlciA9IHRoaXMuZ2V0UG9pbnRPbkRpc3RhbmNlKHBGcm9tLngsIHBGcm9tLnksIHBUby54LCBwVG8ueSwgc2l6ZVRvLCBsZW4pO1xuICAgICAgICAgIGNvbnN0IHRvTWFya2VyID0gdGhpcy5nZXRQb2ludE9uRGlzdGFuY2UocFRvLngsIHBUby55LCBwRnJvbT8ueCwgcEZyb20/LnksIHNpemVGcm9tLCBsZW4pO1xuICAgICAgICAgIGNvbnN0IGNvbnRyb2xQb2ludCA9IHRoaXMubGluZXMuZnJvbVtpXSA+IHRoaXMubGluZXMudG9baV0gP1xuICAgICAgICAgICAgdGhpcy5maW5kQ29udHJvbFBvaW50KHRoaXMubXVsdGlwbGVMaW5lc0NvdW50c1tpXSwgZnJvbU1hcmtlci54LCBmcm9tTWFya2VyLnksIHRvTWFya2VyLngsIHRvTWFya2VyLnksIGkpIDpcbiAgICAgICAgICAgIHRoaXMuZmluZENvbnRyb2xQb2ludCh0aGlzLm11bHRpcGxlTGluZXNDb3VudHNbaV0sIHRvTWFya2VyLngsIHRvTWFya2VyLnksIGZyb21NYXJrZXIueCwgZnJvbU1hcmtlci55LCBpKTtcbiAgICAgICAgICBkaXN0ID0gdGhpcy5jYWxjdWxhdGVEaXN0VG9DdXJ2ZUxpbmUoaSwgeCwgeSwgZnJvbU1hcmtlciwgdG9NYXJrZXIsIGNvbnRyb2xQb2ludCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGlzdCA9IHRoaXMuY2FsY3VsYXRlRGlzdFRvU3RyYWlnaHRMaW5lKHgsIHksIHBGcm9tLCBwVG8pO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoIW1pbkRpc3QgJiYgZGlzdCAhPT0gbnVsbCAmJiBkaXN0IDwgNSkgfHwgbWluRGlzdCAmJiBkaXN0ICE9PSBudWxsICYmIGRpc3QgPCBtaW5EaXN0KSB7XG4gICAgICAgICAgbWluRGlzdCA9IGRpc3Q7XG4gICAgICAgICAgY2FuZGlkYXRlSWR4ID0gaTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY2FuZGlkYXRlSWR4O1xuICB9XG5cbiAgY2FsY3VsYXRlRGlzdFRvU3RyYWlnaHRMaW5lKHg6IG51bWJlciwgeTogbnVtYmVyLCBwMTogREcuUG9pbnQsIHAyOiBERy5Qb2ludCk6IG51bWJlciB8IG51bGwge1xuICAgIC8qIGNhbGN1bGF0aW5nIGNvb3JkaW5hdGVzIG9mIGEgcmVjdCBhcm91bmQgYSBsaW5lLiBJZiBjdXJzb3IgY29vcmRzIGFyZSBvdXRzaWRlIHRoaXMgcmVjdCAtIGFzc3VtZSB0aGF0XG4gICAgICAgIHBvaW50IGlzIG5vdCBvbiBsaW5lIGFuZCBkbyBub3QgY2FsY3VsYXRlIGRpc3RhbmNlIHRvIGxpbmUgKi9cbiAgICBjb25zdCB4TWluID0gTWF0aC5taW4ocDEueCwgcDIueCk7XG4gICAgY29uc3QgeE1heCA9IE1hdGgubWF4KHAxLngsIHAyLngpO1xuICAgIGNvbnN0IHlNaW4gPSBNYXRoLm1pbihwMS55LCBwMi55KTtcbiAgICBjb25zdCB5TWF4ID0gTWF0aC5tYXgocDEueSwgcDIueSk7XG5cbiAgICAvL2FkZGluZyBhIGNvdXBsZSBvZiBwaXhlbHMgdG8gaW5jcmVhc2UgdGhlIHdpZHRoL2hlaWdodCBvZiB0aGUgcmVjdFxuICAgIGNvbnN0IHRocmVzaG9sZCA9IDI7XG4gICAgcmV0dXJuIHggPj0geE1pbiAtIHRocmVzaG9sZCAmJiB4IDw9IHhNYXggKyB0aHJlc2hvbGQgJiYgeSA+PSB5TWluIC0gdGhyZXNob2xkICYmIHkgPD0geU1heCArIHRocmVzaG9sZCA/XG4gICAgICB0aGlzLmRpc3RUb1N0cmFpZ2h0TGluZVNlZ21lbnQoeCwgeSwgcDEsIHAyKSA6XG4gICAgICBudWxsO1xuICB9XG5cbiAgZGlzdFRvU3RyYWlnaHRMaW5lU2VnbWVudCh4OiBudW1iZXIsIHk6IG51bWJlciwgcDE6IERHLlBvaW50LCBwMjogREcuUG9pbnQpIHtcbiAgICBjb25zdCBkaXN0ID0gKHgxOiBudW1iZXIsIHkxOiBudW1iZXIsIHgyOiBudW1iZXIsIHkyOiBudW1iZXIpID0+IE1hdGgucG93KCh4MSAtIHgyKSwgMikgKyBNYXRoLnBvdygoeTEgLSB5MiksIDIpO1xuICAgIGNvbnN0IGwgPSBkaXN0KHAxLngsIHAxLnksIHAyLngsIHAyLnkpO1xuICAgIGlmIChsID09IDApIHJldHVybiBkaXN0KHgsIHksIHAxLngsIHAxLnkpO1xuICAgIGxldCB0ID0gKCh4IC0gcDEueCkgKiAocDIueCAtIHAxLngpICsgKHkgLSBwMS55KSAqIChwMi55IC0gcDEueSkpIC8gbDtcbiAgICB0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgdCkpO1xuICAgIHJldHVybiBkaXN0KHgsIHksIHAxLnggKyB0ICogKHAyLnggLSBwMS54KSwgcDEueSArIHQgKiAocDIueSAtIHAxLnkpKTtcbiAgfVxuXG4gIGNhbGN1bGF0ZURpc3RUb0N1cnZlTGluZShpOiBudW1iZXIsIHg6IG51bWJlciwgeTogbnVtYmVyLCBwMTogREcuUG9pbnQsIHAyOiBERy5Qb2ludCxcbiAgICBwYzogREcuUG9pbnQpOiBudW1iZXIgfCBudWxsIHtcbiAgICAvKiBjYWxjdWxhdGluZyBjb29yZGluYXRlcyBvZiBhIHJlY3QgYXJvdW5kIGEgbGluZS4gSWYgY3Vyc29yIGNvb3JkcyBhcmUgb3V0c2lkZSB0aGlzIHNoYXBlIC0gYXNzdW1lIHRoYXRcbiAgICAgICAgcG9pbnQgaXMgbm90IG9uIGxpbmUgYW5kIGRvIG5vdCBjYWxjdWxhdGUgZGlzdGFuY2UgdG8gbGluZSAqL1xuICAgIGNvbnN0IHhNaW4gPSBNYXRoLm1pbihwMS54LCBwMi54LCBwYy54KTtcbiAgICBjb25zdCB4TWF4ID0gTWF0aC5tYXgocDEueCwgcDIueCwgcGMueCk7XG4gICAgY29uc3QgeU1pbiA9IE1hdGgubWluKHAxLnksIHAyLnksIHBjLnkpO1xuICAgIGNvbnN0IHlNYXggPSBNYXRoLm1heChwMS55LCBwMi55LCBwYy55KTtcblxuICAgIC8vYWRkaW5nIGEgY291cGxlIG9mIHBpeGVscyB0byBpbmNyZWFzZSB0aGUgd2lkdGgvaGVpZ2h0IG9mIHRoZSByZWN0XG4gICAgY29uc3QgdGhyZXNob2xkID0gMjtcbiAgICBpZiAoeCA+PSB4TWluIC0gdGhyZXNob2xkICYmIHggPD0geE1heCArIHRocmVzaG9sZCAmJiB5ID49IHlNaW4gLSB0aHJlc2hvbGQgJiYgeSA8PSB5TWF4ICsgdGhyZXNob2xkKSB7XG4gICAgICBjb25zdCB3ID0geE1heCAtIHhNaW47XG4gICAgICBjb25zdCBoID0geU1heCAtIHlNaW47XG4gICAgICByZXR1cm4gdGhpcy5jYWxjdWxhdGVEaXN0VG9DdXJ2ZUluUmVjdCh4LCB5LCBwMSwgcGMsIHAyLCB3LCBoKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjYWxjdWxhdGVEaXN0VG9DdXJ2ZUluUmVjdCh4OiBudW1iZXIsIHk6IG51bWJlciwgcDA6IERHLlBvaW50LCBwMTogREcuUG9pbnQsIHAyOiBERy5Qb2ludCxcbiAgICB3OiBudW1iZXIsIGg6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3Qgc3RlcExlbiA9IDM7XG4gICAgY29uc3Qgc3RlcHNOdW0gPSBNYXRoLmZsb29yKCh3ICsgaCkgLyBzdGVwTGVuKTtcbiAgICBjb25zdCBkZWx0YVQgPSAxIC8gc3RlcHNOdW07XG4gICAgY29uc3QgYXJyWCA9IG5ldyBVaW50MzJBcnJheShzdGVwc051bSk7XG4gICAgY29uc3QgYXJyWSA9IG5ldyBVaW50MzJBcnJheShzdGVwc051bSk7XG4gICAgY29uc3QgbWF4SFcgPSBuZXcgVWludDMyQXJyYXkoc3RlcHNOdW0pO1xuICAgIGxldCBtaW5TdW1IVzogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gICAgY29uc3QgY2FuZGlkYXRlSWR4cyA9IG5ldyBCaXRBcnJheShzdGVwc051bSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJYLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCB0ID0gaSAqIGRlbHRhVDtcbiAgICAgIGNvbnN0IHhPbkN1cnZlID0gTWF0aC5wb3coKDEgLSB0KSwgMikgKiBwMC54ICsgMiAqIHQgKiAoMSAtIHQpICogcDEueCArIE1hdGgucG93KHQsIDIpICogcDIueDtcbiAgICAgIGNvbnN0IHlPbkN1cnZlID0gTWF0aC5wb3coKDEgLSB0KSwgMikgKiBwMC55ICsgMiAqIHQgKiAoMSAtIHQpICogcDEueSArIE1hdGgucG93KHQsIDIpICogcDIueTtcbiAgICAgIGNvbnN0IHJlY3RXID0gTWF0aC5hYnMoeCAtIHhPbkN1cnZlKTtcbiAgICAgIGNvbnN0IHJlY3RIID0gTWF0aC5hYnMoeSAtIHlPbkN1cnZlKTtcbiAgICAgIGNvbnN0IHN1bUhXID0gcmVjdFcgKyByZWN0SDtcbiAgICAgIGlmICghbWluU3VtSFcgfHwgbWluU3VtSFcgPiBzdW1IVylcbiAgICAgICAgbWluU3VtSFcgPSBzdW1IVztcbiAgICAgIG1heEhXW2ldID0gTWF0aC5tYXgocmVjdFcsIHJlY3RIKTtcbiAgICAgIGFyclhbaV0gPSB4T25DdXJ2ZTtcbiAgICAgIGFycllbaV0gPSB5T25DdXJ2ZTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJYLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobWF4SFdbaV0gPCBtaW5TdW1IVyEpXG4gICAgICAgIGNhbmRpZGF0ZUlkeHMuc2V0Qml0KGksIHRydWUsIGZhbHNlKTtcbiAgICB9XG4gICAgbGV0IG1pbkRpc3Q6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgIGZvciAobGV0IGogPSAtMTsgKGogPSBjYW5kaWRhdGVJZHhzLmZpbmROZXh0KGopKSAhPT0gLTE7KSB7XG4gICAgICBjb25zdCBkaXN0ID0gTWF0aC5oeXBvdCgoYXJyWFtqXSAtIHgpLCAoYXJyWVtqXSAtIHkpKTtcbiAgICAgIGlmICghbWluRGlzdCB8fCBtaW5EaXN0ID4gZGlzdClcbiAgICAgICAgbWluRGlzdCA9IGRpc3Q7XG4gICAgfVxuICAgIHJldHVybiBtaW5EaXN0ITtcbiAgfVxuXG4gIGdldExpbmVMZW5ndGgocDF4OiBudW1iZXIsIHAxeTogbnVtYmVyLCBwMng6IG51bWJlciwgcDJ5OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLnNxcnQoTWF0aC5wb3cocDJ4IC0gcDF4LCAyKSArIE1hdGgucG93KHAyeSAtIHAxeSwgMikpO1xuICB9XG5cbiAgZ2V0UG9pbnRPbkRpc3RhbmNlKHAxeDogbnVtYmVyLCBwMXk6IG51bWJlciwgcDJ4OiBudW1iZXIsIHAyeTogbnVtYmVyLCBkaXN0YW5jZTogbnVtYmVyLCBsZW5ndGg6IG51bWJlcik6IERHLlBvaW50IHtcbiAgICBjb25zdCBkeCA9IChwMnggLSBwMXgpIC8gbGVuZ3RoO1xuICAgIGNvbnN0IGR5ID0gKHAyeSAtIHAxeSkgLyBsZW5ndGg7XG4gICAgY29uc3QgcDN4ID0gcDJ4IC0gZGlzdGFuY2UgKiBkeDtcbiAgICBjb25zdCBwM3kgPSBwMnkgLSBkaXN0YW5jZSAqIGR5O1xuXG4gICAgcmV0dXJuIG5ldyBERy5Qb2ludChwM3gsIHAzeSk7XG4gIH1cblxuICBmaW5kQ29udHJvbFBvaW50KGlkeDogbnVtYmVyLCB4MTogbnVtYmVyLCB5MTogbnVtYmVyLCB4MjogbnVtYmVyLCB5MjogbnVtYmVyLCBpPzogbnVtYmVyKTogREcuUG9pbnQge1xuICAgIGNvbnN0IG1pZFggPSB4MSArICh4MiAtIHgxKSAvIDI7XG4gICAgY29uc3QgbWlkWSA9IHkxICsgKHkyIC0geTEpIC8gMjtcbiAgICBsZXQgZHggPSBtaWRYIC0geDE7XG4gICAgbGV0IGR5ID0gbWlkWSAtIHkxO1xuICAgIGNvbnN0IGRpc3QgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuICAgIGR4IC89IGRpc3Q7XG4gICAgZHkgLz0gZGlzdDtcbiAgICBjb25zdCBwZXJwZW5kaWN1bGFyTGVuID0gNTAgKiBNYXRoLmNlaWwoaWR4IC8gMik7XG4gICAgcmV0dXJuIGlkeCAlIDIgPT09IDAgP1xuICAgICAgbmV3IERHLlBvaW50KG1pZFggKyAocGVycGVuZGljdWxhckxlbiAvIDIpICogZHksIG1pZFkgLSAocGVycGVuZGljdWxhckxlbiAvIDIpICogZHgpIDpcbiAgICAgIG5ldyBERy5Qb2ludChtaWRYIC0gKHBlcnBlbmRpY3VsYXJMZW4gLyAyKSAqIGR5LCBtaWRZICsgKHBlcnBlbmRpY3VsYXJMZW4gLyAyKSAqIGR4KTtcbiAgfVxuXG4gIGNhbnZhc0Fycm93KHBhdGg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgYXJyb3dFbmRYOiBudW1iZXIsIGFycm93RW5kWTogbnVtYmVyLCBxdWFkWDogbnVtYmVyLCBxdWFkWTogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgYXJyb3dBbmdsZSA9IE1hdGguYXRhbjIocXVhZFggLSBhcnJvd0VuZFgsIHF1YWRZIC0gYXJyb3dFbmRZKSArIE1hdGguUEk7XG4gICAgcGF0aC5tb3ZlVG8oYXJyb3dFbmRYIC0gKHRoaXMuYXJyb3dXaWR0aCAqIE1hdGguc2luKGFycm93QW5nbGUgLSBNYXRoLlBJIC8gMTApKSxcbiAgICAgIGFycm93RW5kWSAtICh0aGlzLmFycm93V2lkdGggKiBNYXRoLmNvcyhhcnJvd0FuZ2xlIC0gTWF0aC5QSSAvIDEwKSkpO1xuICAgIHBhdGgubGluZVRvKGFycm93RW5kWCwgYXJyb3dFbmRZKTtcbiAgICBwYXRoLmxpbmVUbyhhcnJvd0VuZFggLSAodGhpcy5hcnJvd1dpZHRoICogTWF0aC5zaW4oYXJyb3dBbmdsZSArIE1hdGguUEkgLyAxMCkpLFxuICAgICAgYXJyb3dFbmRZIC0gKHRoaXMuYXJyb3dXaWR0aCAqIE1hdGguY29zKGFycm93QW5nbGUgKyBNYXRoLlBJIC8gMTApKSk7XG4gIH1cbn1cbiJdfQ==