@wavemaker/app-ng-runtime 11.5.1-rc.5420 → 11.5.1-rc.5422

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.
@@ -1275,7 +1275,7 @@
1275
1275
  attachClickEvent() {
1276
1276
  let dataObj;
1277
1277
  d3.select('#wmChart' + this.$id + ' svg').selectAll(chartDataPointXpath[this.type]).style('pointer-events', 'all')
1278
- .on('click', (data, index) => {
1278
+ .on('click', (event, data, index) => {
1279
1279
  switch (this.type) {
1280
1280
  case 'Column':
1281
1281
  case 'Bar':
@@ -525,7 +525,7 @@ export class ChartComponent extends StylableComponent {
525
525
  attachClickEvent() {
526
526
  let dataObj;
527
527
  d3.select('#wmChart' + this.$id + ' svg').selectAll(chartDataPointXpath[this.type]).style('pointer-events', 'all')
528
- .on('click', (data, index) => {
528
+ .on('click', (event, data, index) => {
529
529
  switch (this.type) {
530
530
  case 'Column':
531
531
  case 'Bar':
@@ -997,4 +997,4 @@ ChartComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ChartCompone
997
997
  type: HostBinding,
998
998
  args: ['class.panel']
999
999
  }] }); })();
1000
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0L3NyYy9jaGFydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnQvc3JjL2NoYXJ0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBMkIsU0FBUyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQVcsTUFBTSxlQUFlLENBQUM7QUFFdEgsT0FBTyxFQUNILEdBQUcsRUFDSCxVQUFVLEVBQ1YsZUFBZSxFQUNmLGlCQUFpQixFQUNqQixhQUFhLEVBQ2IsWUFBWSxFQUNaLGNBQWMsRUFDZCxVQUFVLEVBQ1YsU0FBUyxFQUdaLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSxpQkFBaUIsRUFBd0Isa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxHQUFJLE1BQU0scUJBQXFCLENBQUM7QUFFL0gsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5QyxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7O0lDZHpOLHlCQUEyRTs7O0lBQS9CLGdFQUF3Qjs7O0lBSjVFLDhCQUF5QyxZQUFBLGFBQUE7SUFFVixvQkFBOEU7SUFBQSxpQkFBTTtJQUMzRyx5QkFBK0M7SUFDL0MscUVBQTJFO0lBQy9FLGlCQUFLLEVBQUE7OztJQUh5QixlQUF5QztJQUF6Qyx1RUFBeUM7SUFBQyw0Q0FBNEI7SUFDM0UsZUFBbUI7SUFBbkIsMkRBQW1CO0lBQ2QsZUFBZ0I7SUFBaEIsd0NBQWdCOzs7OztJQUs5QyxvQkFBNEY7SUFBNUYsK0JBQTRGO0lBQ3hGLHdCQUFzRztJQUMxRyxpQkFBTTs7O0lBRG9CLGVBQWlCO0lBQWpCLHNDQUFpQiw2REFBQSw0QkFBQTs7O0FEWS9DLE1BQU0sYUFBYSxHQUFHLEVBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFDLENBQUM7QUFFdkUsTUFBTSxPQUFPLEdBQUc7SUFDUixRQUFRLEVBQUcsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDO0NBQ3JDLEVBQ0QsSUFBSSxHQUFHLE1BQU0sRUFDYixnQkFBZ0IsR0FBRyxDQUFDLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDO0FBQzdFLHFEQUFxRDtBQUNyRCxtQkFBbUIsR0FBRztJQUNsQixRQUFRLEVBQVcsYUFBYTtJQUNoQyxLQUFLLEVBQWMsVUFBVTtJQUM3QixNQUFNLEVBQWEsMkJBQTJCO0lBQzlDLGlCQUFpQixFQUFFLGtEQUFrRDtJQUNyRSxNQUFNLEVBQWEsNkNBQTZDO0lBQ2hFLEtBQUssRUFBYyw2QkFBNkI7SUFDaEQsT0FBTyxFQUFZLDZCQUE2QjtJQUNoRCxRQUFRLEVBQVcsdUNBQXVDO0NBQzdEO0FBQ0QsOEJBQThCO0FBQzlCLFVBQVUsR0FBRyxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsRUFDcEMsVUFBVSxHQUFHO0lBQ1QsVUFBVSxFQUFRLFdBQVc7SUFDN0IsVUFBVSxFQUFRLFdBQVc7SUFDN0IsT0FBTyxFQUFXLE1BQU07SUFDeEIsWUFBWSxFQUFNLGFBQWE7SUFDL0IsWUFBWSxFQUFNLGFBQWE7SUFDL0IsV0FBVyxFQUFPLFlBQVk7SUFDOUIsZ0JBQWdCLEVBQUUsaUJBQWlCO0NBQ3RDO0FBQ0QseUVBQXlFO0FBQ3pFLGdCQUFnQixHQUFHO0lBQ2YsU0FBUyxFQUFHLEtBQUs7SUFDakIsT0FBTyxFQUFLLE9BQU87SUFDbkIsU0FBUyxFQUFHLEtBQUs7SUFDakIsU0FBUyxFQUFHLEtBQUs7SUFDakIsS0FBSyxFQUFPLEtBQUs7Q0FDcEIsQ0FBQztBQUVOLE1BQU0sZUFBZSxHQUFHLEdBQUcsQ0FBQyxFQUFFO0lBQzFCLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLEtBQUssTUFBTSxFQUFFO1FBQ2hDLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7SUFDRCxJQUFJLEdBQUcsS0FBSyxLQUFLLElBQUksR0FBRyxLQUFLLE9BQU8sRUFBRTtRQUNsQyxPQUFPLEtBQUssQ0FBQztLQUNoQjtJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2YsQ0FBQyxDQUFDO0FBRUYsa0VBQWtFO0FBQ2xFLE1BQU0sc0JBQXNCLEdBQUcsT0FBTyxDQUFDLEVBQUU7SUFDckMsSUFBSSxPQUFPLENBQUM7SUFDWixNQUFNLGNBQWMsR0FBRyxFQUFFLEVBQ3JCLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFFaEIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsRUFBRSxVQUFVLEdBQUc7UUFDMUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzVCLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QixDQUFDLENBQUMsQ0FBQztJQUNILE9BQU87UUFDSCxTQUFTLEVBQUcsY0FBYztRQUMxQixRQUFRLEVBQUksTUFBTTtLQUNyQixDQUFDO0FBQ04sQ0FBQyxDQUFDO0FBRUYsK0VBQStFO0FBQy9FLE1BQU0saUJBQWlCLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFFeEYsaURBQWlEO0FBQ2pELE1BQU0sWUFBWSxHQUFHLENBQUMsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFO0lBQ3BDLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBVSxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEUsU0FBUyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNoQyxDQUFDLENBQUM7QUFFRixNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRTtJQUNkLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQzFELE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLENBQUMsQ0FBQztBQVdGLE1BQU0sT0FBTyxjQUFlLFNBQVEsaUJBQWlCO0lBcURqRCxnQkFBZ0I7UUFDWixPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQsZ0VBQWdFO0lBQ2hFLFdBQVc7UUFDUCwwREFBMEQ7UUFDMUQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDOUUsQ0FBQztJQUVELGlDQUFpQztJQUNqQyxvQkFBb0I7UUFDaEIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7SUFDaEcsQ0FBQztJQUVELDREQUE0RDtJQUM1RCxzQkFBc0I7UUFDbEI7OztZQUdJO1FBRUosT0FBTyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBRUQ7O29DQUVnQztJQUNoQyxXQUFXLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLO1FBQzVCLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ25DLHVEQUF1RDtRQUN2RCxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQ2pFLDJDQUEyQztZQUMzQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3Qiw4QkFBOEI7WUFDOUIsSUFBSSxLQUFLLFlBQVksSUFBSSxFQUFFO2dCQUN2QixPQUFPLEtBQUssQ0FBQzthQUNoQjtpQkFBTTtnQkFDSCxPQUFPLEtBQUssQ0FBQzthQUNoQjtTQUNKO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVELHdEQUF3RDtJQUN4RCxnQkFBZ0IsQ0FBQyxLQUFLO1FBQ2xCLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDUixPQUFPO1NBQ1Y7UUFDRCxNQUFNLE9BQU8sR0FBUSxFQUFFLENBQUM7UUFDeEI7Ozs7Ozs7O1VBUUU7UUFDRixPQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakY7Ozs7Ozs7O1dBUUc7UUFDSCxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakYsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQztJQUVELHdEQUF3RDtJQUN4RCxnQkFBZ0IsQ0FBQyxLQUFLO1FBQ2xCLE1BQU0sT0FBTyxHQUFRLEVBQUUsRUFDbkIsU0FBUyxHQUFHLEVBQUUsRUFDZCxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDUixPQUFPO1NBQ1Y7UUFFRDs7Ozs7Ozs7Ozs7O1dBWUc7UUFFSCxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNwQixTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxVQUFVLFVBQVUsSUFBSSxPQUFPLFVBQVUsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0RyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxVQUFVLFVBQVUsSUFBSSxPQUFPLFVBQVUsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxRyxDQUFDLENBQUMsQ0FBQztRQUNILGtHQUFrRztRQUNsRyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5RSxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5RSxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDO0lBRUQsc0ZBQXNGO0lBQ3RGLFlBQVksQ0FBQyxNQUFNO1FBQ2YsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDMUUsQ0FBQztJQUVELDRFQUE0RTtJQUM1RSxXQUFXLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBTSxFQUFFLEtBQU07UUFDM0MsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUMvQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQzVCLElBQUksR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxFQUNqQyxJQUFJLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckQsSUFBSSxTQUFTLEdBQVEsRUFBRSxDQUFDO1FBRXhCLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUM1QixTQUFTLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUNuQixTQUFTLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUNuQiw0Q0FBNEM7WUFDNUMsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUMxQixTQUFTLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztnQkFDdEIsU0FBUyxDQUFDLEtBQUssR0FBRyxLQUFLLElBQUksUUFBUSxDQUFDO2FBQ3ZDO1NBQ0o7YUFBTSxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNwQyxTQUFTLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDNUI7UUFDRCxzR0FBc0c7UUFDdEcsU0FBUyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7UUFDN0IsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztJQUVELHFDQUFxQztJQUNyQyxTQUFTLENBQUMsT0FBTztRQUNiLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNwQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1lBQzFCLHdDQUF3QztZQUN4QyxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUFDLDhCQUE4QjtTQUNuRDtJQUNMLENBQUM7SUFFRCxnQkFBZ0I7UUFDWixJQUFJLENBQUMsVUFBVSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxnRUFBZ0U7UUFDaEUsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdEIsMEVBQTBFO1FBQzFFLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxFQUFFLENBQUM7WUFDakMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO1NBQzFCO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRTtZQUMzQyxPQUFPLEVBQUUsQ0FBQztTQUNiO1FBRUQsSUFBSSxLQUFLLEdBQUcsRUFBRSxFQUNWLFFBQVEsRUFDUixNQUFNLEdBQVEsRUFBRSxFQUNoQixNQUFNLEdBQVEsRUFBRSxDQUFDO1FBQ3JCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQzlCLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUNqRSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUU3QixJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDcEIsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUN0QixRQUFRLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN4QixLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUU7b0JBQ3RDLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7d0JBQ2hDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO3FCQUMvRDtnQkFDTCxDQUFDLENBQUMsQ0FBQztnQkFDSCxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNwQztpQkFBTTtnQkFDSCxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQzFCLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO2lCQUM3RDtnQkFDRCxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFO29CQUNuQyxNQUFNLEdBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUU7d0JBQ3hDLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7NEJBQ2hDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzt5QkFDM0g7b0JBQ0wsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ25DLEtBQUssQ0FBQyxJQUFJLENBQUM7d0JBQ1AsTUFBTSxFQUFFLE1BQU07d0JBQ2QsR0FBRyxFQUFFLGNBQWMsQ0FBQyxRQUFRLENBQUM7cUJBQ2hDLENBQUMsQ0FBQztnQkFDUCxDQUFDLENBQUMsQ0FBQzthQUNOO1NBQ0o7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQsWUFBWSxDQUFDLElBQUk7UUFDYixJQUFJLElBQUksRUFBRTtZQUNOLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1NBQzlCO0lBQ0wsQ0FBQztJQUVELFlBQVk7UUFDUixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDL0IsQ0FBQztJQUVELDhFQUE4RTtJQUM5RSxzQkFBc0IsQ0FBQyxhQUFhLEVBQUUsY0FBYztRQUNoRCxJQUFJLFNBQVMsR0FBUSxFQUFFLEVBQ25CLFdBQVcsR0FBUSxFQUFFLEVBQ3JCLGNBQWMsRUFDZCxTQUFTLENBQUM7UUFDZCxNQUFNLFNBQVMsR0FBUSxFQUFFLEVBQ3JCLFlBQVksR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUNyQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN0QixhQUFhLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDckUsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2QsY0FBYyxHQUFHLHNCQUFzQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN0RCxhQUFhLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsY0FBYyxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDM0Y7UUFDRCxhQUFhLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDekQscUVBQXFFO1FBQ3JFLElBQUksWUFBWSxFQUFFO1lBQ2QsU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUM5RDtRQUNELENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxFQUFFO1lBQzFDLFdBQVcsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3RFLENBQUMsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUNwQyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDckYsQ0FBQyxDQUFDLENBQUM7WUFDSCxTQUFTLEdBQUc7Z0JBQ1IsR0FBRyxFQUFHLFFBQVE7Z0JBQ2QsTUFBTSxFQUFHLFdBQVc7YUFDdkIsQ0FBQztZQUNGLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDO0lBRUQ7dUlBQ21JO0lBQ25JLGtCQUFrQjtRQUNkLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsRUFBRTtZQUN6RCxJQUFJLGlCQUFpQixHQUFHLEtBQUssRUFDekIsb0JBQW9CLEVBQ3BCLGtCQUFrQixFQUNsQixPQUFPLEdBQVEsRUFBRSxFQUNqQixtQkFBbUIsQ0FBQztZQUN4QixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUN2RixTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUV0RSxJQUFJLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUMzQiwyRUFBMkU7Z0JBQzNFLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7b0JBQ25DLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxNQUFNLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7d0JBQ3JFLGlCQUFpQixHQUFHLElBQUksQ0FBQzt3QkFDekIsb0JBQW9CLEdBQUcsTUFBTSxDQUFDO3dCQUM5QixtQkFBbUIsR0FBRyxLQUFLLENBQUM7d0JBQzVCLGNBQWMsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQzlDLE9BQU8sS0FBSyxDQUFDO3FCQUNoQjtvQkFDRCxPQUFPLElBQUksQ0FBQztnQkFDaEIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsc0NBQXNDO2dCQUN0QyxJQUFJLG9CQUFvQixFQUFFO29CQUN0QixPQUFPLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7aUJBQ3RDO2dCQUVELElBQUksY0FBYyxDQUFDLE1BQU0sRUFBRTtvQkFDdkIsT0FBTyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDO2lCQUMvQzthQUNKO1lBQ0QsaUZBQWlGO1lBQ2pGLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsaUJBQWlCLEVBQUU7Z0JBQzlDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQ25DO1lBQ0QsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLEVBQUU7Z0JBQ3ZCLElBQUksR0FBRyxLQUFLLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtvQkFDaEMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDckI7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUNILGtCQUFrQixHQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDeEMsb0RBQW9EO1lBQ3BELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztZQUUzQyxPQUFPO2dCQUNILFVBQVUsRUFBRSxrQkFBa0I7Z0JBQzlCLGlCQUFpQixFQUFFLGlCQUFpQjtnQkFDcEMsb0JBQW9CLEVBQUUsb0JBQW9CO2FBQzdDLENBQUM7U0FDTDtRQUNELE9BQU87WUFDSCxVQUFVLEVBQUUsRUFBRTtZQUNkLGlCQUFpQixFQUFFLEtBQUs7WUFDeEIsb0JBQW9CLEVBQUUsRUFBRTtTQUMzQixDQUFDO0lBQ04sQ0FBQztJQUVELHdHQUF3RztJQUN4RyxpQkFBaUIsQ0FBQyxRQUFRO1FBQ3RCLE1BQU0sUUFBUSxHQUFRLElBQUksQ0FBQyxVQUFVLEVBQ2pDLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUNqRSxJQUFJLEdBQVEsRUFBRSxDQUFDO1FBQ25CLElBQUksUUFBUSxFQUNSLE9BQU8sR0FBUSxFQUFFLEVBQ2pCLFFBQVEsRUFDUixjQUFjLEVBQ2QsYUFBYSxHQUFRLEVBQUUsQ0FBQztRQUU1QixJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ1gsT0FBTztTQUNWO1FBQ0QsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFBRTtZQUN6QixhQUFhLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQzlDO1FBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2QsUUFBUSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDOUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdFLGNBQWMsR0FBRyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQzlELHFHQUFxRztZQUNyRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFO2dCQUNyRCxRQUFRLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2xDLFFBQVEsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDbEQsQ0FBQyxDQUFDLENBQUM7U0FDTjtRQUNELElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLEVBQUU7WUFDN0IsK0VBQStFO1lBQy9FLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1lBQ25DLElBQUksQ0FBQyxZQUFZLEdBQUk7Z0JBQ2pCO29CQUNJLE9BQU8sRUFBRSxJQUFJLENBQUMsaUJBQWlCO29CQUMvQixNQUFNLEVBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztvQkFDM0MsT0FBTyxFQUFFLGlCQUFpQixDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztpQkFDckQ7YUFDSixDQUFDO1NBQ0w7UUFDRCxxQkFBcUI7UUFDckIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRTtZQUNsQyxjQUFjLEVBQUcsSUFBSTtZQUNyQixNQUFNLEVBQVcsUUFBUTtTQUM1QixDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ2YsNkRBQTZEO1lBQzdELE1BQU0sU0FBUyxHQUFRLEVBQUUsRUFDckIsZ0JBQWdCLEdBQVEsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQ2pFLGFBQWEsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQ3BELGNBQWMsR0FBRyxFQUFFLENBQUM7WUFFeEIsU0FBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRWhGLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxlQUFlLEVBQUUsRUFBRTtnQkFDakQsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDO2dCQUNmLG1HQUFtRztnQkFDbkcsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsRUFBRTtvQkFDN0IsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO29CQUNoRSxHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztpQkFDNUg7Z0JBRUQsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBRTVHLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLEVBQUU7b0JBQ2xDLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxlQUFlLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7b0JBQ3ZELEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDdEcsQ0FBQyxDQUFDLENBQUM7Z0JBRUgsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN4QixDQUFDLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1lBRTNCLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4QixDQUFDLEVBQUUsR0FBRyxFQUFFO1lBQ0osSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLFNBQVMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1lBQzNDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxvSEFBb0g7SUFDcEgsaUJBQWlCO1FBQ2IsSUFBSSxNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsRUFDVCxLQUFLLEVBQ0wsS0FBSyxFQUNMLFdBQVcsRUFDWCxXQUFXLEVBQ1gsVUFBVSxFQUNWLG9CQUFvQixFQUNwQixVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsQ0FBQztRQUNmLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFDOUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkMsbUNBQW1DO1FBQ25DLE1BQU0sR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFdEYsa0ZBQWtGO1FBQ2xGLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDUixNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEIsSUFBSSxVQUFVLEVBQ1YsUUFBUSxDQUFDO1lBQ2IsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLEVBQUU7Z0JBQzlDLFVBQVUsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDekQsS0FBSyxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzdDLEtBQUssR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO2dCQUN6QyxJQUFJLENBQUMsVUFBVSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7b0JBQzFCLFFBQVEsR0FBRyxLQUFLLENBQUM7aUJBQ3BCO3FCQUFNLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtvQkFDbEIsUUFBUSxHQUFHLEtBQUssQ0FBQztpQkFDcEI7Z0JBQ0QsSUFBSSxTQUFTLEVBQUU7b0JBQ1gsU0FBUyxHQUFHLFFBQVEsR0FBRyxTQUFTLENBQUM7b0JBQ2pDLE9BQU8sS0FBSyxDQUFDO2lCQUNoQjtnQkFDRCxTQUFTLEdBQUcsUUFBUSxDQUFDO2dCQUNyQixPQUFPLElBQUksQ0FBQzthQUNmO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxrRkFBa0Y7UUFDbEYsSUFBSSxVQUFVLEVBQUU7WUFDWixVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLGdDQUFnQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUUsWUFBWSxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyx5QkFBeUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZFLFVBQVUsR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEQsd0NBQXdDO1lBQ3hDLFdBQVcsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pFLHFDQUFxQztZQUNyQyxvQkFBb0IsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLEtBQUssR0FBRyxZQUFZLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLEtBQUssQ0FBQztZQUN2Syx1Q0FBdUM7WUFDdkMsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsb0JBQW9CLEdBQUcsUUFBUSxDQUFDLENBQUM7WUFDeEQsK0RBQStEO1lBQy9ELDJDQUEyQztZQUMzQyxJQUFJLFNBQVMsR0FBRyxRQUFRLEVBQUU7Z0JBQ3RCLGtEQUFrRDtnQkFDbEQsV0FBVyxHQUFHLFdBQVcsR0FBRyxRQUFRLENBQUM7Z0JBQ3JDLCtCQUErQjtnQkFDL0IsVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDLENBQUM7Z0JBQzVELDhCQUE4QjtnQkFDOUIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQztvQkFDaEgsK0JBQStCO29CQUMvQixJQUFJLENBQUMsR0FBRyxVQUFVLEtBQUssQ0FBQyxFQUFFO3dCQUN0QixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7cUJBQ3RDO2dCQUNMLENBQUMsQ0FBQyxDQUFDO2FBQ047U0FDSjthQUFNO1lBQ0gsdUNBQXVDO1lBQ3ZDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsQ0FBQztTQUNoRDtRQUVELCtDQUErQztRQUMvQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoQyxxR0FBcUc7UUFDckcsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNSLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsU0FBUyxFQUFFO2dCQUNyQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsR0FBRyxLQUFLLENBQUM7YUFDcEU7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxpRUFBaUU7SUFDakUsaUJBQWlCO1FBQ2IsSUFBSSxJQUFJLEVBQ0osWUFBWSxFQUNaLENBQUMsRUFDRCxJQUFJLENBQUM7UUFDVCxNQUFNLGNBQWMsR0FBRyxFQUFFLEVBQ3JCLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxDQUFDO1FBRXJGLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sSUFBSSxjQUFjLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2xFLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7Z0JBQy9DLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQzdDO2lCQUFNLElBQUksSUFBSSxLQUFLLFFBQVEsSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDM0MsWUFBWSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7YUFDdkM7U0FDSjtRQUNELHdEQUF3RDtRQUN4RCw2Q0FBNkM7UUFDN0MsSUFBSSxZQUFZLElBQUksY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3hFLElBQUksR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekIsY0FBYyxDQUFDLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQztZQUNqQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO1NBQzVCO1FBRUQsT0FBTyxjQUFjLENBQUM7SUFDMUIsQ0FBQztJQUVELHlGQUF5RjtJQUN6RixnQkFBZ0I7UUFDWixJQUFJLE9BQU8sQ0FBQztRQUNaLEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUM7YUFDN0csRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUN6QixRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUU7Z0JBQ2YsS0FBSyxRQUFRLENBQUM7Z0JBQ2QsS0FBSyxLQUFLO29CQUNOLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO29CQUN4QixNQUFNO2dCQUNWLEtBQUssS0FBSyxDQUFDO2dCQUNYLEtBQUssT0FBTztvQkFDUixPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7b0JBQzdCLE1BQU07Z0JBQ1YsS0FBSyxNQUFNLENBQUM7Z0JBQ1osS0FBSyxpQkFBaUIsQ0FBQztnQkFDdkIsS0FBSyxNQUFNO29CQUNQLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO29CQUMzQixNQUFNO2dCQUNWLEtBQUssUUFBUTtvQkFDVCxPQUFPLEdBQUcsSUFBSSxDQUFDO29CQUNmLE1BQU07YUFDYjtZQUNELElBQUksQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDO1lBQzVCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsRUFBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUMsQ0FBQyxDQUFDO1FBQ3JILENBQUMsQ0FBQyxDQUFDO0lBRVgsQ0FBQztJQUVEOzs7Ozs7U0FNSztJQUVMLGVBQWUsQ0FBQyxLQUFLO1FBQ2pCLElBQUksUUFBUSxFQUNSLFNBQVMsRUFDVCxTQUFTLEVBQ1QsVUFBVSxDQUFDO1FBQ2YsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFFOUIsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFM0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdkIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7U0FDNUI7YUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQ2hDO29FQUN3RDtZQUN4RCxtRUFBbUU7WUFDbkUsUUFBUSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUM7WUFDckQsU0FBUyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3BFLFNBQVMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUM5RCxVQUFVLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLElBQUksU0FBUyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUU7Z0JBQy9CLFNBQVMsQ0FBQyxJQUFJLENBQUM7b0JBQ1gsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQzt3QkFDekMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDOUIsQ0FBQyxDQUFDLENBQUM7Z0JBQ1AsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO29CQUN6QixNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUM5QixDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsU0FBUyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztnQkFDbkYsQ0FBQyxDQUFDLENBQUM7YUFDTjtTQUNKO1FBRUQsMENBQTBDO1FBQzFDLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ2pDLElBQUksR0FBRyxLQUFLLFVBQVUsSUFBSSxHQUFHLEtBQUssVUFBVSxFQUFFO2dCQUMxQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO2FBQ25EO2lCQUFNO2dCQUNILFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDL0I7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILFlBQVksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRWpDOzs7YUFHSztRQUNMLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUU7WUFDeEMsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxNQUFNLEVBQUU7Z0JBQzNDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDZixvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ3ZCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2lCQUM1QjthQUNKO2lCQUFNO2dCQUNILHNDQUFzQztnQkFDdEM7OzttQkFHRzthQUNOO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsK0NBQStDO0lBQy9DLGNBQWM7UUFDViw0REFBNEQ7UUFDNUQsNEdBQTRHO1FBQzVHLElBQUksYUFBYSxDQUFDO1FBQ2xCLElBQUksYUFBYSxDQUFDO1FBQ2xCLElBQUksS0FBSyxDQUFDO1FBQ1YsSUFBSSxlQUFlLENBQUM7UUFDcEIsTUFBTSxjQUFjLEdBQVEsRUFBRSxDQUFDO1FBRS9CLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2hDLElBQUksaUJBQWlCLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFO2dCQUM5QixhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUcsRUFBQyxHQUFHLEVBQUUsQ0FBQyxFQUFDLEVBQUcsS0FBSyxFQUFHLEVBQUMsR0FBRyxFQUFHLENBQUMsRUFBQyxFQUFDLENBQUM7YUFDOUg7WUFDRCxJQUFJLGlCQUFpQixDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRTtnQkFDOUIsYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFHLEVBQUMsR0FBRyxFQUFHLENBQUMsRUFBQyxFQUFFLEtBQUssRUFBRyxFQUFDLEdBQUcsRUFBRyxDQUFDLEVBQUMsRUFBQyxDQUFDO2FBQzNIO1NBQ0o7UUFFRCxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDbkUsSUFBSSxDQUFDLGNBQWMsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDbkY7UUFFRCx1QkFBdUI7UUFDdkIsS0FBSyxHQUFHLFNBQVMsQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFL0UsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRTtZQUNoQyxtRkFBbUY7WUFDbkYsTUFBTSxTQUFTLEdBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbkYsSUFBSSxTQUFTLElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRTtnQkFDL0IsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO2FBQ3RCO1lBQ0QsZUFBZSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLEVBQUUsRUFBRSxlQUFlLEVBQUcsS0FBSyxFQUFDLENBQUMsQ0FBQztZQUN2RixJQUFJLGVBQWUsRUFBRTtnQkFDakIsS0FBSyxHQUFHLGVBQWUsQ0FBQzthQUMzQjtZQUNELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ25CLHVDQUF1QztZQUN2QyxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztpQkFDcEMsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7aUJBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1QixPQUFPLEtBQUssQ0FBQztTQUNoQjtJQUNMLENBQUM7SUFFRCwwREFBMEQ7SUFDMUQsU0FBUztRQUNMLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDOUIsaUNBQWlDO1FBQ2pDLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDO1FBRTNFLHNIQUFzSDtRQUN0SCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDakQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1NBQ3hDO2FBQU07WUFDSCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1NBQ2pEO1FBQ0QsMERBQTBEO1FBQzFELElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxNQUFNLEVBQUU7WUFDNUMsT0FBTztTQUNWO1FBQ0QsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2xCLDZCQUE2QjtZQUM3QixPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUMvQyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztTQUM1QjtRQUVELHlEQUF5RDtRQUN6RCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1NBQzVCO1FBQ0QsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUcsR0FBRyxFQUFFO1lBQzNDOzt1Q0FFMkI7WUFDM0IsVUFBVSxDQUFFLEdBQUcsRUFBRTtnQkFDYixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUM1QixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDWixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7SUFDbEMsQ0FBQztJQUNELGtFQUFrRTtJQUNsRSxJQUFJLGNBQWM7UUFDZCxxRUFBcUU7UUFDckUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNwQyxPQUFPLFdBQVcsSUFBSSxXQUFXLENBQUMsUUFBUSxLQUFLLGlCQUFpQixDQUFDO0lBQ3JFLENBQUM7SUFFRCxjQUFjO1FBQ1YsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQztRQUNsQyxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUMzQixzQ0FBc0M7UUFDdEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUM3QixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUNsRCw0SEFBNEg7UUFDNUgsK0NBQStDO1FBQy9DLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxFQUFFO1lBQ2pHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztTQUNsRDthQUFNLEVBQUUsK0JBQStCO1lBQ3BDLHFIQUFxSDtZQUNySCxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFDckMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO2dCQUM5QixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLGVBQWUsQ0FBQyxpQkFBaUIsRUFBRTtvQkFDOUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxlQUFlLENBQUMsb0JBQW9CLENBQUMsQ0FBQztpQkFDdEc7YUFFSjtZQUNELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztTQUNwQjtJQUNMLENBQUM7SUFFRCx3Q0FBd0M7SUFDeEMscUJBQXFCO1FBQ2pCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ2hELDJFQUEyRTtRQUMzRSxvR0FBb0c7UUFDcEcsSUFBSSxDQUFDLFlBQVksR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO1FBQzlDLElBQUksQ0FBQyxZQUFZLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQztJQUNsRCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsSUFBSSxFQUFFLE1BQU07UUFDNUIsTUFBTSxjQUFjLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxFQUM3QyxVQUFVLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbkIsT0FBTyxNQUFNLENBQUM7U0FDakI7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNuQixJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztTQUM3QjtRQUNELElBQUksVUFBVSxDQUFDO1FBQ2YsUUFBUSxJQUFJLEVBQUU7WUFDVixLQUFLLGNBQWM7Z0JBQ2YscUZBQXFGO2dCQUNyRixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFO29CQUN6QixVQUFVLEdBQUcsY0FBYyxDQUFDO2lCQUMvQjtnQkFDRCxNQUFNO1lBQ1YsS0FBSyxjQUFjO2dCQUNmLCtGQUErRjtnQkFDL0YsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsRUFBRTtvQkFDN0IsVUFBVSxHQUFHLFVBQVUsQ0FBQztpQkFDM0I7cUJBQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO29CQUM1QiwyREFBMkQ7b0JBQzNELFVBQVUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO2lCQUNwQztnQkFDRCxNQUFNO1lBQ1YsS0FBSyxTQUFTO2dCQUNWLHlDQUF5QztnQkFDekMsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFO29CQUNoRixVQUFVLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO2lCQUN2QztnQkFDRCxNQUFNO1lBQ1YsS0FBSyxtQkFBbUI7Z0JBQ3BCLCtIQUErSDtnQkFDL0gsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssT0FBTyxFQUFFO29CQUNwRixVQUFVLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztpQkFDcEM7Z0JBQ0QsTUFBTTtZQUNWLEtBQUssU0FBUztnQkFDViwrSEFBK0g7Z0JBQy9ILElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsRUFBRTtvQkFDcEQsVUFBVSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztpQkFDN0Q7Z0JBQ0QsTUFBTTtZQUNWLEtBQUssWUFBWTtnQkFDYixJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUU7b0JBQ25ELFVBQVUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO2lCQUNwQztnQkFDRCxNQUFNO1NBQ2I7UUFFRCxPQUFPLFVBQVUsSUFBSSxNQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUNwRCxDQUFDO0lBRUQsa0hBQWtIO0lBQ2xILDhCQUE4QjtRQUMxQixJQUFJLE9BQU8sRUFDUCxJQUFJLENBQUM7UUFDVCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDdkYsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUM1QiwyQkFBMkI7UUFDM0IsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsRUFBRTtZQUMzQyxPQUFPLEdBQUcsRUFBRSxDQUFDLENBQUMsa0RBQWtEO1NBQ25FO1FBRUQsSUFBSSxPQUFPLEVBQUU7WUFDVCx5RkFBeUY7WUFDekYsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ3BDLElBQUksR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUN6QixJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDcEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ2pDO2dCQUNELGtDQUFrQztnQkFDbEMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxLQUFLLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxZQUFZLEVBQUU7b0JBQ25FLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ3BDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDakQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUMxRDtJQUNMLENBQUM7SUFFRCxpQkFBaUI7SUFDakIsYUFBYSxDQUFDLE1BQU07UUFDaEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDakIsMkRBQTJEO1FBQzNELElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQzlCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7WUFDL0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7U0FDM0I7UUFFRCxpRUFBaUU7UUFDakUsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsU0FBUyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFFdkksK0RBQStEO1FBQy9ELElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUMxRCxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ3JDO1FBRUQsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLFlBQVksRUFBRTtZQUMvQixJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUM7U0FDM0M7UUFFRCwyRUFBMkU7UUFDM0UsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUMxQjtJQUNMLENBQUM7SUFJRCw2Q0FBNkM7SUFDN0MsbUJBQW1CLENBQUMsVUFBVTtRQUMxQixJQUFJLFFBQVEsRUFBRSxTQUFTLENBQUM7UUFDeEIsUUFBUSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUM7UUFFckQsU0FBUyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDakUsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuQixTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQzthQUNuQixJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQzthQUNuQixJQUFJLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQzthQUM3QixJQUFJLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQzthQUM3QixJQUFJLENBQUMsVUFBVSxDQUFDO2FBQ2hCLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDYixJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUM1QixJQUFJLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQ3BDLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLHFCQUFxQixFQUFFLENBQUMsS0FBSyxDQUFDO1lBQzlELHdDQUF3QztZQUN4QyxVQUFVLEdBQUcsVUFBVSxHQUFHLEVBQUUsRUFDNUIsU0FBUyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQ3pDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLFVBQVUsR0FBRyxTQUFTLENBQUMsQ0FBQztRQUNwRCxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFO1lBQ3BCLG9IQUFvSDtZQUNwSCxJQUFJLFFBQVEsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDdkQsT0FBTyxRQUFRLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDOUMsQ0FBQyxDQUFDLENBQUM7SUFDYixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFPO1FBQ2pDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzVDLFFBQVEsR0FBRyxFQUFFO1lBQ1QsS0FBSyxTQUFTO2dCQUNWLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzNCLE1BQU07WUFDVixLQUFLLGFBQWE7Z0JBQ2QsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO29CQUNaLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUN6QixJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQ3BDO2dCQUNELE1BQU07WUFDVixLQUFLLE1BQU07Z0JBQ1AsMkRBQTJEO2dCQUMzRCxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ3RCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO29CQUNwQixJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztvQkFDckIsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7b0JBQ3RCLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO2lCQUN2QjtxQkFBTSxJQUFJLE1BQU0sS0FBSyxLQUFLLElBQUksTUFBTSxLQUFLLE9BQU8sRUFBRTtvQkFDL0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7b0JBQ3BCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO29CQUN0QixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztvQkFDdkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7aUJBQ3hCO2dCQUVELElBQUksTUFBTSxLQUFLLE1BQU0sRUFBRTtvQkFDbkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7aUJBQzNCO2dCQUNELCtEQUErRDtnQkFDL0QsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN2QixNQUFNO1lBQ1Y7Z0JBQ0ksOEVBQThFO2dCQUM5RSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3ZCLE1BQU07U0FDYjtRQUNELElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsRUFBRTtZQUNuQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDMUI7SUFDTCxDQUFDO0lBRUQsYUFBYSxDQUFDLElBQUk7UUFDZCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ25DLElBQUksVUFBVSxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxFQUFFO1lBQ3JILElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQ3ZDO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDUCxFQUFFLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELGFBQWEsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU07UUFDN0IsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN6QyxRQUFRLEdBQUcsRUFBRTtZQUNULEtBQUssVUFBVSxDQUFDO1lBQ2hCLEtBQUssVUFBVSxDQUFDO1lBQ2hCLEtBQUssT0FBTyxDQUFDO1lBQ2IsS0FBSyxZQUFZLENBQUM7WUFDbEIsS0FBSyxZQUFZLENBQUM7WUFDbEIsS0FBSyxXQUFXLENBQUM7WUFDakIsS0FBSyxnQkFBZ0I7Z0JBQ2pCLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxVQUFVLElBQUksR0FBRyxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztnQkFDaEgsWUFBWSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2pDLE1BQU07U0FDYjtJQUNMLENBQUM7SUFFRCxZQUFZLEdBQWEsRUFBVSxHQUFRO1FBQ3ZDLEtBQUssQ0FBQyxHQUFHLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFESyxRQUFHLEdBQUgsR0FBRyxDQUFLO1FBdDhCM0MsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQTZCUCxzQkFBaUIsR0FBUSxFQUFFLENBQUM7UUFHNUIsZ0JBQVcsR0FBUSxFQUFFLENBQUM7UUFLdEIsY0FBUyxHQUFVLEVBQUUsQ0FBQztRQUN0QixtQkFBYyxHQUFVLEVBQUUsQ0FBQztRQUMzQixrQkFBYSxHQUFRLEVBQUUsQ0FBQztRQTJ6QmhDLG9CQUFlLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQWlKbEUsV0FBTSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBM0NyQyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLENBQUMsU0FBUyxFQUFFLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1FBRTVKLHVDQUF1QztRQUN2QyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzFDLDRGQUE0RjtRQUM1RixVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ25FLHVEQUF1RDtRQUN2RCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyx1QkFBdUIsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEcsZ0VBQWdFO1FBQ2hFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUUsR0FBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlGLENBQUM7SUFFRCxlQUFlO1FBQ1gsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLG1CQUFtQjtRQUNuQixJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQzdELElBQUksQ0FBQyxVQUFVLEdBQVUsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMxRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ2pFLElBQUksQ0FBQyxVQUFVLEdBQVUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztTQUN2RztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2IsdUVBQXVFO1lBQ3ZFLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUM7U0FDL0Q7UUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1RCx3RUFBd0U7UUFDeEUsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsRUFBRTtZQUN2RSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDMUI7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNQLG9EQUFvRDtRQUNwRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLEVBQUMsRUFBRTtZQUN2QyxZQUFZLEVBQUUsQ0FBQztRQUNuQixDQUFDLENBQUMsQ0FBQztRQUNILEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN4QixDQUFDOztBQTMvQk0sOEJBQWUsR0FBRyxhQUFhLEVBQUUsQ0FBQzs0RUFEaEMsY0FBYztpRUFBZCxjQUFjOzswQ0FMWjtZQUNQLGtCQUFrQixDQUFDLGNBQWMsQ0FBQztTQUNyQztRQzNHTCwrREFNTTtRQUNOLDhCQUEyRjtRQUN2RixtQkFBSztRQUFMLHNCQUFXO1FBQ1gsK0RBRU07UUFDTixvQkFBMEU7UUFBMUUseUJBQWdGO1FBQ3BGLGlCQUFNOztRQWJzQixnQ0FBVztRQU9WLGVBQTZEO1FBQTdELHFGQUE2RDtRQUV2QyxlQUEyQztRQUEzQyxvRUFBMkM7O3VGRHFHakYsY0FBYztjQVQxQixTQUFTOzJCQUNJLGNBQWMsYUFHYjtvQkFDUCxrQkFBa0IsZ0JBQWdCO2lCQUNyQyxpQkFDYyxpQkFBaUIsQ0FBQyxJQUFJOzZFQXFEVCxLQUFLO2tCQUFoQyxXQUFXO21CQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgQ29tcG9uZW50LCBIb3N0QmluZGluZywgSW5qZWN0b3IsIFZpZXdFbmNhcHN1bGF0aW9uLCBPcHRpb25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7XG4gICAgQXBwLFxuICAgIERhdGFTb3VyY2UsXG4gICAgZ2V0Q2xvbmVkT2JqZWN0LFxuICAgIGlzRGF0YVNvdXJjZUVxdWFsLFxuICAgIGlzRW1wdHlPYmplY3QsXG4gICAgaXNOdW1iZXJUeXBlLFxuICAgIHByZXR0aWZ5TGFiZWxzLFxuICAgIHJlbW92ZUF0dHIsXG4gICAgdHJpZ2dlckZuLFxuICAgIGlzTW9iaWxlQXBwLFxuICAgIG5vb3Bcbn0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHsgQVBQTFlfU1RZTEVTX1RZUEUsIElSZWRyYXdhYmxlQ29tcG9uZW50LCBwcm92aWRlQXNXaWRnZXRSZWYsIFN0eWxhYmxlQ29tcG9uZW50LCBzdHlsZXIsICB9IGZyb20gJ0B3bS9jb21wb25lbnRzL2Jhc2UnO1xuXG5pbXBvcnQgeyByZWdpc3RlclByb3BzIH0gZnJvbSAnLi9jaGFydC5wcm9wcyc7XG5pbXBvcnQgeyBhbGxTaGFwZXMsIGdldERhdGVMaXN0LCBnZXRTYW1wbGVEYXRhLCBpbml0Q2hhcnQsIGlzQXJlYUNoYXJ0LCBpc0F4aXNEb21haW5WYWxpZCwgaXNCYXJDaGFydCwgaXNCdWJibGVDaGFydCwgaXNDaGFydERhdGFBcnJheSwgaXNDaGFydERhdGFKU09OLCBpc0xpbmVUeXBlQ2hhcnQsIGlzUGllVHlwZSwgcG9zdFBsb3RDaGFydFByb2Nlc3MgfSBmcm9tICcuL2NoYXJ0LnV0aWxzJztcblxuZGVjbGFyZSBjb25zdCAkLCBfLCBkMywgbnY7XG5cbmNvbnN0IFdJREdFVF9DT05GSUcgPSB7d2lkZ2V0VHlwZTogJ3dtLWNoYXJ0JywgaG9zdENsYXNzOiAnYXBwLWNoYXJ0J307XG5cbmNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICdCdWJibGUnIDogWydidWJibGVzaXplJywgJ3NoYXBlJ11cbiAgICB9LFxuICAgIE5PTkUgPSAnbm9uZScsXG4gICAgYWR2YW5jZURhdGFQcm9wcyA9IFsnYWdncmVnYXRpb24nLCAnYWdncmVnYXRpb25jb2x1bW4nLCAnZ3JvdXBieScsICdvcmRlcmJ5J10sXG4gICAgLy8gWFBhdGhzIHRvIGdldCBhY3R1YWwgZGF0YSBvZiBkYXRhIHBvaW50cyBpbiBjaGFydHNcbiAgICBjaGFydERhdGFQb2ludFhwYXRoID0ge1xuICAgICAgICAnQ29sdW1uJyAgICAgICAgIDogJ3JlY3QubnYtYmFyJyxcbiAgICAgICAgJ0JhcicgICAgICAgICAgICA6ICdnLm52LWJhcicsXG4gICAgICAgICdBcmVhJyAgICAgICAgICAgOiAnLm52LXN0YWNrZWRhcmVhIC5udi1wb2ludCcsXG4gICAgICAgICdDdW11bGF0aXZlIExpbmUnOiAnLm52LWN1bXVsYXRpdmVMaW5lIC5udi1zY2F0dGVyV3JhcCBwYXRoLm52LXBvaW50JyxcbiAgICAgICAgJ0xpbmUnICAgICAgICAgICA6ICcubnYtbGluZUNoYXJ0IC5udi1zY2F0dGVyV3JhcCBwYXRoLm52LXBvaW50JyxcbiAgICAgICAgJ1BpZScgICAgICAgICAgICA6ICcubnYtcGllQ2hhcnQgLm52LXNsaWNlIHBhdGgnLFxuICAgICAgICAnRG9udXQnICAgICAgICAgIDogJy5udi1waWVDaGFydCAubnYtc2xpY2UgcGF0aCcsXG4gICAgICAgICdCdWJibGUnICAgICAgICAgOiAnLm52LXNjYXR0ZXJDaGFydCAubnYtcG9pbnQtcGF0aHMgcGF0aCdcbiAgICB9LFxuICAgIC8vIGFsbCBwcm9wZXJ0aWVzIG9mIHRoZSBjaGFydFxuICAgIGFsbE9wdGlvbnMgPSBbJ2J1YmJsZXNpemUnLCAnc2hhcGUnXSxcbiAgICBzdHlsZVByb3BzID0ge1xuICAgICAgICAnZm9udHVuaXQnICAgICAgOiAnZm9udC1zaXplJyxcbiAgICAgICAgJ2ZvbnRzaXplJyAgICAgIDogJ2ZvbnQtc2l6ZScsXG4gICAgICAgICdjb2xvcicgICAgICAgICA6ICdmaWxsJyxcbiAgICAgICAgJ2ZvbnRmYW1pbHknICAgIDogJ2ZvbnQtZmFtaWx5JyxcbiAgICAgICAgJ2ZvbnR3ZWlnaHQnICAgIDogJ2ZvbnQtd2VpZ2h0JyxcbiAgICAgICAgJ2ZvbnRzdHlsZScgICAgIDogJ2ZvbnQtc3R5bGUnLFxuICAgICAgICAndGV4dGRlY29yYXRpb24nOiAndGV4dC1kZWNvcmF0aW9uJ1xuICAgIH0sXG4gICAgLy8gR2V0dGluZyB0aGUgcmVsZXZhbnQgYWdncmVnYXRpb24gZnVuY3Rpb24gYmFzZWQgb24gdGhlIHNlbGVjdGVkIG9wdGlvblxuICAgIGFnZ3JlZ2F0aW9uRm5NYXAgPSB7XG4gICAgICAgICdhdmVyYWdlJyA6ICdBVkcnLFxuICAgICAgICAnY291bnQnICAgOiAnQ09VTlQnLFxuICAgICAgICAnbWF4aW11bScgOiAnTUFYJyxcbiAgICAgICAgJ21pbmltdW0nIDogJ01JTicsXG4gICAgICAgICdzdW0nICAgICA6ICdTVU0nXG4gICAgfTtcblxuY29uc3QgZ2V0Qm9vbGVhblZhbHVlID0gdmFsID0+IHtcbiAgICBpZiAodmFsID09PSB0cnVlIHx8IHZhbCA9PT0gJ3RydWUnKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAodmFsID09PSBmYWxzZSB8fCB2YWwgPT09ICdmYWxzZScpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdmFsO1xufTtcblxuLy8gcmV0dXJucyBvcmRlcmJ5IGNvbHVtbnMgYW5kIHRoZWlyIG9yZGVycyBpbiB0d28gc2VwYXJhdGUgYXJyYXlzXG5jb25zdCBnZXRMb2Rhc2hPcmRlckJ5Rm9ybWF0ID0gb3JkZXJieSA9PiB7XG4gICAgbGV0IGNvbHVtbnM7XG4gICAgY29uc3Qgb3JkZXJCeUNvbHVtbnMgPSBbXSxcbiAgICAgICAgb3JkZXJzID0gW107XG5cbiAgICBfLmZvckVhY2goXy5zcGxpdChvcmRlcmJ5LCAnLCcpLCBmdW5jdGlvbiAoY29sKSB7XG4gICAgICAgIGNvbHVtbnMgPSBfLnNwbGl0KGNvbCwgJzonKTtcbiAgICAgICAgb3JkZXJCeUNvbHVtbnMucHVzaChjb2x1bW5zWzBdKTtcbiAgICAgICAgb3JkZXJzLnB1c2goY29sdW1uc1sxXSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgJ2NvbHVtbnMnIDogb3JkZXJCeUNvbHVtbnMsXG4gICAgICAgICdvcmRlcnMnICA6IG9yZGVyc1xuICAgIH07XG59O1xuXG4vLyBSZXBsYWNpbmcgdGhlICcuJyBieSB0aGUgJyQnIGJlY2F1c2UgJy4nIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhlIGFsaWFzIG5hbWVzXG5jb25zdCBnZXRWYWxpZEFsaWFzTmFtZSA9IGFsaWFzTmFtZSA9PiBhbGlhc05hbWUgPyBhbGlhc05hbWUucmVwbGFjZSgvXFwuL2csICckJykgOiBudWxsO1xuXG4vLyBBcHBseWluZyB0aGUgZm9udCByZWxhdGVkIHN0eWxlcyBmb3IgdGhlIGNoYXJ0XG5jb25zdCBzZXRUZXh0U3R5bGUgPSAocHJvcGVydGllcywgaWQpID0+IHtcbiAgICBjb25zdCBjaGFydHRleHQgPSBkMy5zZWxlY3QoJyN3bUNoYXJ0JyArIGlkICsgJyBzdmcnKS5zZWxlY3RBbGwoJ3RleHQnKTtcbiAgICBjaGFydHRleHQuc3R5bGUocHJvcGVydGllcyk7XG59O1xuXG5jb25zdCBhbmdsZSA9IGQgPT4ge1xuICAgIGNvbnN0IGEgPSAoZC5zdGFydEFuZ2xlICsgZC5lbmRBbmdsZSkgKiA5MCAvIE1hdGguUEkgLSA5MDtcbiAgICByZXR1cm4gYSA+IDkwID8gYSAtIDE4MCA6IGE7XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2Rpdlt3bUNoYXJ0XScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NoYXJ0LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B3YXZlbWFrZXIuY29tL252ZDMvYnVpbGQvbnYuZDMubWluLmNzcyddLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBwcm92aWRlQXNXaWRnZXRSZWYoQ2hhcnRDb21wb25lbnQpXG4gICAgXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIENoYXJ0Q29tcG9uZW50IGV4dGVuZHMgU3R5bGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIElSZWRyYXdhYmxlQ29tcG9uZW50IHtcbiAgICBzdGF0aWMgaW5pdGlhbGl6ZVByb3BzID0gcmVnaXN0ZXJQcm9wcygpO1xuXG4gICAgeGF4aXNkYXRha2V5O1xuICAgIHlheGlzZGF0YWtleTtcbiAgICBncm91cGJ5O1xuICAgIGFnZ3JlZ2F0aW9uO1xuICAgIGFnZ3JlZ2F0aW9uY29sdW1uO1xuICAgIGlzVmlzdWFsbHlHcm91cGVkO1xuICAgIG9yZGVyYnk7XG4gICAgaWNvbmNsYXNzID0gJyc7XG4gICAgdHlwZTogc3RyaW5nO1xuICAgIHNob3dDb250ZW50TG9hZEVycm9yO1xuICAgIGludmFsaWRDb25maWc7XG4gICAgZXJyTXNnO1xuICAgIHNoYXBlOiBzdHJpbmc7XG4gICAgZGF0YXNvdXJjZTogYW55O1xuICAgIGZvbnRzaXplOiBzdHJpbmc7XG4gICAgc2VsZWN0ZWRpdGVtOiBhbnk7XG4gICAgZm9udHVuaXQ6IHN0cmluZztcbiAgICBvZmZzZXR0b3A6IG51bWJlcjtcbiAgICBvZmZzZXRsZWZ0OiBudW1iZXI7XG4gICAgb2Zmc2V0cmlnaHQ6IG51bWJlcjtcbiAgICBvZmZzZXRib3R0b206IG51bWJlcjtcbiAgICBzaG93bGFiZWxzOiBhbnk7XG4gICAgdGhlbWU6IHN0cmluZztcblxuICAgIHByaXZhdGUgJGlkO1xuICAgIHByaXZhdGUgc2NvcGVkYXRhc2V0OiBhbnk7XG4gICAgcHJpdmF0ZSBiaW5kZGF0YXNldDogYW55O1xuICAgIHByaXZhdGUgc2hvd2xhYmVsc291dHNpZGU6IGFueTtcbiAgICBwcml2YXRlIF9yZXNpemVGbjogYW55O1xuICAgIHByaXZhdGUgY2hhcnQ6IGFueTtcbiAgICBwcml2YXRlIGNsZWFyQ2FudmFzOiBib29sZWFuO1xuICAgIHB1YmxpYyBpc0xvYWRJblByb2dyZXNzOiBib29sZWFuO1xuICAgIHByaXZhdGUgZmlsdGVyRmllbGRzOiBib29sZWFuIHwgYW55O1xuICAgIHByaXZhdGUgZGF0YXNldDogYW55O1xuICAgIHByaXZhdGUgYXhpc29wdGlvbnM6IGFueTtcbiAgICBwcml2YXRlIG51bWVyaWNDb2x1bW5zOiBhbnk7XG4gICAgcHJpdmF0ZSBub25QcmltYXJ5Q29sdW1uczogYW55ID0gW107XG4gICAgcHJpdmF0ZSB2YXJpYWJsZUluZmxpZ2h0OiBhbnk7XG4gICAgcHJpdmF0ZSBjaGFydFJlYWR5OiBib29sZWFuO1xuICAgIHByaXZhdGUgeERhdGFLZXlBcnI6IGFueSA9IFtdO1xuICAgIHByaXZhdGUgeEF4aXNEYXRhVHlwZTogc3RyaW5nO1xuICAgIHByaXZhdGUgYnViYmxlc2l6ZTogYW55O1xuICAgIHB1YmxpYyBzaG93Tm9EYXRhTXNnOiBhbnk7XG4gICAgcHJpdmF0ZSBzYW1wbGVEYXRhOiBhbnlbXTtcbiAgICBwcml2YXRlIGNoYXJ0RGF0YTogYW55W10gPSBbXTtcbiAgICBwcml2YXRlIF9wcm9jZXNzZWREYXRhOiBhbnlbXSA9IFtdO1xuICAgIHByaXZhdGUgX3N1YnNjaXB0aW9uczogYW55ID0gW107XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnBhbmVsJykgdGl0bGU7XG5cbiAgICBpc0dyb3VwQnlFbmFibGVkKCkge1xuICAgICAgICByZXR1cm4gISEodGhpcy5ncm91cGJ5ICYmIHRoaXMuZ3JvdXBieSAhPT0gTk9ORSk7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgeCBhbmQgeSBheGlzIHRoYXQgYXJlIGNob3NlbiBhcmUgdmFsaWQgdG8gcGxvdCBjaGFydFxuICAgIGlzVmFsaWRBeGlzKCkge1xuICAgICAgICAvLyBDaGVjayBpZiB4IGF4aXMgYW5kIHkgYXhpcyBhcmUgY2hvc2VuIGFuZCBhcmUgbm90IGVxdWFsXG4gICAgICAgIHJldHVybiB0aGlzLmJpbmRkYXRhc2V0ID8gKHRoaXMueGF4aXNkYXRha2V5ICYmIHRoaXMueWF4aXNkYXRha2V5KSA6IHRydWU7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgYWdncmVnYXRpb24gaXMgY2hvc2VuXG4gICAgaXNBZ2dyZWdhdGlvbkVuYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiAhISgodGhpcy5pc0dyb3VwQnlFbmFibGVkKCkgJiYgdGhpcy5hZ2dyZWdhdGlvbiAhPT0gTk9ORSAmJiB0aGlzLmFnZ3JlZ2F0aW9uY29sdW1uKSk7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgZWl0aGVyIGdyb3VwYnksIGFnZ3JlZ2F0aW9uIG9yIG9yZGVyYnkgaXMgY2hvc2VuXG4gICAgaXNEYXRhRmlsdGVyaW5nRW5hYmxlZCgpIHtcbiAgICAgICAgLypRdWVyeSBuZWVkIHRvIGJlIHRyaWdnZXJlZCBpZiBhbnkgb2YgdGhlIGZvbGxvd2luZyBjYXNlcyBzYXRpc2Z5XG4gICAgICAgICogMS4gR3JvdXAgQnkgYW5kIGFnZ3JlZ2F0aW9uIGJvdGggY2hvc2VuXG4gICAgICAgICogMi4gT25seSBPcmRlciBCeSBpcyBjaG9zZW5cbiAgICAgICAgKiAqL1xuXG4gICAgICAgIHJldHVybiB0aGlzLmlzQWdncmVnYXRpb25FbmFibGVkKCkgfHwgKCF0aGlzLmlzVmlzdWFsbHlHcm91cGVkICYmIHRoaXMub3JkZXJieSk7XG4gICAgfVxuXG4gICAgLypDaGFydHMgbGlrZSBMaW5lLEFyZWEsQ3VtdWxhdGl2ZSBMaW5lIGRvZXMgbm90IHN1cHBvcnQgYW55IG90aGVyIGRhdGF0eXBlXG4gICAgICAgIG90aGVyIHRoYW4gaW50ZWdlciB1bmxpa2UgdGhlIGNvbHVtbiBhbmQgYmFyLkl0IGlzIGEgbnZkMyBpc3N1ZS4gSW5vcmRlciB0b1xuICAgICAgICBzdXBwb3J0IHRoYXQgdGhpcyBpcyBhIGZpeCovXG4gICAgZ2V0eEF4aXNWYWwoZGF0YU9iaiwgeEtleSwgaW5kZXgpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBfLmdldChkYXRhT2JqLCB4S2V5KTtcbiAgICAgICAgLy8gSWYgeCBheGlzIGlzIG90aGVyIHRoYW4gbnVtYmVyIHR5cGUgdGhlbiBhZGQgaW5kZXhlc1xuICAgICAgICBpZiAoaXNMaW5lVHlwZUNoYXJ0KHRoaXMudHlwZSkgJiYgIWlzTnVtYmVyVHlwZSh0aGlzLnhBeGlzRGF0YVR5cGUpKSB7XG4gICAgICAgICAgICAvLyBWZXJpZmljYXRpb24gdG8gZ2V0IHRoZSB1bmlxdWUgZGF0YSBrZXlzXG4gICAgICAgICAgICB0aGlzLnhEYXRhS2V5QXJyLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgaXQgaXMgb2YgdHlwZSBEYXRlXG4gICAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIC8vIEdldHRpbmcgdGhlIG1pbiBhbmQgbWF4IHZhbHVlcyBhbW9uZyBhbGwgdGhlIHggdmFsdWVzXG4gICAgZ2V0WE1pbk1heFZhbHVlcyhkYXR1bSkge1xuICAgICAgICBpZiAoIWRhdHVtKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeFZhbHVlczogYW55ID0ge307XG4gICAgICAgIC8qXG4gICAgICAgICBjb21wdXRlIHRoZSBtaW4geCB2YWx1ZVxuICAgICAgICAgZWc6IFdoZW4gZGF0YSBoYXMgb2JqZWN0c1xuICAgICAgICAgICAgaW5wdXQ6IFt7eDoxLCB5OjJ9LCB7eDoyLCB5OjN9LCB7eDozLCB5OjR9XVxuICAgICAgICAgICAgbWluIHg6IDFcbiAgICAgICAgIGVnOiBXaGVuIGRhdGEgaGFzIGFycmF5c1xuICAgICAgICAgICAgaW5wdXQ6IFtbMTAsIDIwXSwgWzIwLCAzMF0sIFszMCwgNDBdXTtcbiAgICAgICAgICAgIG1pbiB4OiAxMFxuICAgICAgICAqL1xuICAgICAgICB4VmFsdWVzLm1pbiA9IF8ubWluQnkoZGF0dW0udmFsdWVzLCBkYXRhT2JqZWN0ID0+IGRhdGFPYmplY3QueCB8fCBkYXRhT2JqZWN0WzBdKTtcbiAgICAgICAgLypcbiAgICAgICAgIGNvbXB1dGUgdGhlIG1heCB4IHZhbHVlXG4gICAgICAgICBlZzogV2hlbiBkYXRhIGhhcyBvYmplY3RzXG4gICAgICAgICAgICBpbnB1dDogW3t4OjEsIHk6Mn0sIHt4OjIsIHk6M30sIHt4OjMsIHk6NH1dXG4gICAgICAgICAgICBtYXggeDogM1xuICAgICAgICAgZWc6IFdoZW4gZGF0YSBoYXMgYXJyYXlzXG4gICAgICAgICAgICBpbnB1dDogW1sxMCwgMjBdLCBbMjAsIDMwXSwgWzMwLCA0MF1dO1xuICAgICAgICAgICAgbWF4IHg6IDMwXG4gICAgICAgICAqL1xuICAgICAgICB4VmFsdWVzLm1heCA9IF8ubWF4QnkoZGF0dW0udmFsdWVzLCBkYXRhT2JqZWN0ID0+IGRhdGFPYmplY3QueCB8fCBkYXRhT2JqZWN0WzBdKTtcbiAgICAgICAgcmV0dXJuIHhWYWx1ZXM7XG4gICAgfVxuXG4gICAgLy8gR2V0dGluZyB0aGUgbWluIGFuZCBtYXggdmFsdWVzIGFtb25nIGFsbCB0aGUgeSB2YWx1ZXNcbiAgICBnZXRZTWluTWF4VmFsdWVzKGRhdHVtKSB7XG4gICAgICAgIGNvbnN0IHlWYWx1ZXM6IGFueSA9IHt9LFxuICAgICAgICAgICAgbWluVmFsdWVzID0gW10sXG4gICAgICAgICAgICBtYXhWYWx1ZXMgPSBbXTtcbiAgICAgICAgaWYgKCFkYXR1bSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLypcbiAgICAgICAgIEdldHRpbmcgdGhlIG1pbiBhbmQgbWF4IHkgdmFsdWVzIGFtb25nIGFsbCB0aGUgc2VyaWVzIG9mIGRhdGFcbiAgICAgICAgIGNvbXB1dGUgdGhlIG1pbiB5IHZhbHVlXG4gICAgICAgICBlZzogV2hlbiBkYXRhIGhhcyBvYmplY3RzXG4gICAgICAgICAgICBpbnB1dDogW1t7eDoxLCB5OjJ9LCB7eDoyLCB5OjN9LCB7eDozLCB5OjR9XSwgW3t4OjIsIHk6M30sIHt4OjMsIHk6NH0sIHt4OjQsIHk6NX1dXVxuICAgICAgICAgICAgbWluIHkgdmFsdWVzIDogJzInKGFtb25nIGZpcnN0IHNldCkgJiAnMycoYW1vbmcgc2Vjb25kIHNldClcbiAgICAgICAgICAgIG1heCB5IHZhbHVlcyA6ICc0JyhhbW9uZyBmaXJzdCBzZXQpICYgJzUnKGFtb25nIHNlY29uZCBzZXQpXG5cbiAgICAgICAgIGVnOiBXaGVuIGRhdGEgaGFzIGFycmF5c1xuICAgICAgICAgICAgaW5wdXQ6IFtbWzEwLCAyMF0sIFsyMCwgMzBdLCBbMzAsIDQwXV0sIFtbMjAsIDMwXSwgWzMwLCA0MF0sIFs0MCwgNTBdXV1cbiAgICAgICAgICAgIG1pbiB5IHZhbHVlcyA6ICcyMCcoYW1vbmcgZmlyc3Qgc2V0KSAmICczMCcoYW1vbmcgc2Vjb25kIHNldClcbiAgICAgICAgICAgIG1heCB5IHZhbHVlcyA6ICc0MCcoYW1vbmcgZmlyc3Qgc2V0KSAmICc1MCcoYW1vbmcgc2Vjb25kIHNldClcbiAgICAgICAgICovXG5cbiAgICAgICAgXy5mb3JFYWNoKGRhdHVtLCBkYXRhID0+IHtcbiAgICAgICAgICAgIG1pblZhbHVlcy5wdXNoKF8ubWluQnkoZGF0YS52YWx1ZXMsIGZ1bmN0aW9uIChkYXRhT2JqZWN0KSB7IHJldHVybiBkYXRhT2JqZWN0LnkgfHwgZGF0YU9iamVjdFsxXTsgfSkpO1xuICAgICAgICAgICAgbWF4VmFsdWVzLnB1c2goXy5tYXhCeShkYXRhLnZhbHVlcywgZnVuY3Rpb24gKGRhdGFPYmplY3QpIHsgcmV0dXJuIGRhdGFPYmplY3QueSB8fCBkYXRhT2JqZWN0WzFdOyB9KSk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBHZXRzIHRoZSBsZWFzdCBhbmQgaGlnaGVzdCB2YWx1ZXMgYW1vbmcgYWxsIHRoZSBtaW4gYW5kIG1heCB2YWx1ZXMgb2YgcmVzcGVjdGl2ZSBzZXJpZXMgb2YgZGF0YVxuICAgICAgICB5VmFsdWVzLm1pbiA9IF8ubWluQnkobWluVmFsdWVzLCBkYXRhT2JqZWN0ID0+IGRhdGFPYmplY3QueSB8fCBkYXRhT2JqZWN0WzFdKTtcbiAgICAgICAgeVZhbHVlcy5tYXggPSBfLm1heEJ5KG1heFZhbHVlcywgZGF0YU9iamVjdCA9PiBkYXRhT2JqZWN0LnkgfHwgZGF0YU9iamVjdFsxXSk7XG4gICAgICAgIHJldHVybiB5VmFsdWVzO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSB4LWF4aXMgdmFsdWVzIGFyZSB1bmRlZmluZWQsIHdlIHJldHVybiBlbXB0eSBhcnJheSBlbHNlIHdlIHJldHVybiB0aGUgdmFsdWVzXG4gICAgZ2V0VmFsaWREYXRhKHZhbHVlcykge1xuICAgICAgICByZXR1cm4gKHZhbHVlcy5sZW5ndGggPT09IDEgJiYgdmFsdWVzWzBdID09PSB1bmRlZmluZWQpID8gW10gOiB2YWx1ZXM7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJucyB0aGUgc2luZ2xlIGRhdGEgcG9pbnQgYmFzZWQgb24gdGhlIHR5cGUgb2YgdGhlIGRhdGEgY2hhcnQgYWNjZXB0c1xuICAgIHZhbHVlRmluZGVyKGRhdGFPYmosIHhLZXksIHlLZXksIGluZGV4Pywgc2hhcGU/KSB7XG4gICAgICAgIGNvbnN0IHhWYWwgPSB0aGlzLmdldHhBeGlzVmFsKGRhdGFPYmosIHhLZXksIGluZGV4KSxcbiAgICAgICAgICAgIHZhbHVlID0gXy5nZXQoZGF0YU9iaiwgeUtleSksXG4gICAgICAgICAgICB5VmFsID0gcGFyc2VGbG9hdCh2YWx1ZSkgfHwgdmFsdWUsXG4gICAgICAgICAgICBzaXplID0gcGFyc2VGbG9hdChkYXRhT2JqW3RoaXMuYnViYmxlc2l6ZV0pIHx8IDI7XG4gICAgICAgIGxldCBkYXRhUG9pbnQ6IGFueSA9IHt9O1xuXG4gICAgICAgIGlmIChpc0NoYXJ0RGF0YUpTT04odGhpcy50eXBlKSkge1xuICAgICAgICAgICAgZGF0YVBvaW50LnggPSB4VmFsO1xuICAgICAgICAgICAgZGF0YVBvaW50LnkgPSB5VmFsO1xuICAgICAgICAgICAgLy8gb25seSBCdWJibGUgY2hhcnQgaGFzIHRoZSB0aGlyZCBkaW1lbnNpb25cbiAgICAgICAgICAgIGlmIChpc0J1YmJsZUNoYXJ0KHRoaXMudHlwZSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhUG9pbnQuc2l6ZSA9IHNpemU7XG4gICAgICAgICAgICAgICAgZGF0YVBvaW50LnNoYXBlID0gc2hhcGUgfHwgJ2NpcmNsZSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoaXNDaGFydERhdGFBcnJheSh0aGlzLnR5cGUpKSB7XG4gICAgICAgICAgICBkYXRhUG9pbnQgPSBbeFZhbCwgeVZhbF07XG4gICAgICAgIH1cbiAgICAgICAgLy8gQWRkaW5nIGFjdHVhbCB1bndyYXBwZWQgZGF0YSB0byBjaGFydCBkYXRhIHRvIHVzZSBhdCB0aGUgdGltZSBvZiBzZWxlY3RlZCBkYXRhIHBvaW50IG9mIGNoYXJ0IGV2ZW50XG4gICAgICAgIGRhdGFQb2ludC5fZGF0YU9iaiA9IGRhdGFPYmo7XG4gICAgICAgIHJldHVybiBkYXRhUG9pbnQ7XG4gICAgfVxuXG4gICAgLy8gU2V0dGluZyBhcHByb3ByaWF0ZSBlcnJvciBtZXNzYWdlc1xuICAgIHNldEVyck1zZyhtZXNzYWdlKSB7XG4gICAgICAgIGlmICh0aGlzLnNob3dOb0RhdGFNc2cpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0NvbnRlbnRMb2FkRXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5pbnZhbGlkQ29uZmlnID0gdHJ1ZTtcbiAgICAgICAgICAgIC8vIFRPRE86IFNldCB0aGUgbG9jYWxlIGZyb20gdGhlIG1lc3NhZ2VcbiAgICAgICAgICAgIHRoaXMuZXJyTXNnID0gJyc7IC8vICRyb290U2NvcGUubG9jYWxlW21lc3NhZ2VdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvY2Vzc0NoYXJ0RGF0YSgpIHtcbiAgICAgICAgdGhpcy5zYW1wbGVEYXRhID0gZ2V0U2FtcGxlRGF0YSh0aGlzKTtcbiAgICAgICAgLy8gc2NvcGUgdmFyaWFibGVzIHVzZWQgdG8ga2VlcCB0aGUgYWN0dWFsIGtleSB2YWx1ZXMgZm9yIHgtYXhpc1xuICAgICAgICB0aGlzLnhEYXRhS2V5QXJyID0gW107XG4gICAgICAgIC8vIFBsb3R0aW5nIHRoZSBjaGFydCB3aXRoIHNhbXBsZSBkYXRhIHdoZW4gdGhlIGNoYXJ0IGRhdGFzZXQgaXMgbm90IGJvdW5kXG4gICAgICAgIGlmICghdGhpcy5iaW5kZGF0YXNldCkge1xuICAgICAgICAgICAgdGhpcy54RGF0YUtleUFyciA9IGdldERhdGVMaXN0KCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zYW1wbGVEYXRhO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmNoYXJ0RGF0YSB8fCAhdGhpcy5jaGFydERhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZGF0dW0gPSBbXSxcbiAgICAgICAgICAgIHlBeGlzS2V5LFxuICAgICAgICAgICAgc2hhcGVzOiBhbnkgPSBbXSxcbiAgICAgICAgICAgIHZhbHVlczogYW55ID0gW107XG4gICAgICAgIGNvbnN0IHhBeGlzS2V5ID0gdGhpcy54YXhpc2RhdGFrZXksXG4gICAgICAgICAgICB5QXhpc0tleXMgPSB0aGlzLnlheGlzZGF0YWtleSA/IHRoaXMueWF4aXNkYXRha2V5LnNwbGl0KCcsJykgOiBbXSxcbiAgICAgICAgICAgIGRhdGFTZXQgPSB0aGlzLmNoYXJ0RGF0YTtcblxuICAgICAgICBpZiAoXy5pc0FycmF5KGRhdGFTZXQpKSB7XG4gICAgICAgICAgICBpZiAoaXNQaWVUeXBlKHRoaXMudHlwZSkpIHtcbiAgICAgICAgICAgICAgICB5QXhpc0tleSA9IHlBeGlzS2V5c1swXTtcbiAgICAgICAgICAgICAgICBkYXR1bSA9IF8ubWFwKGRhdGFTZXQsIChkYXRhT2JqLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRW1wdHlPYmplY3QoZGF0YVNldFtpbmRleF0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUZpbmRlcihkYXRhU2V0W2luZGV4XSwgeEF4aXNLZXksIHlBeGlzS2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGRhdHVtID0gdGhpcy5nZXRWYWxpZERhdGEoZGF0dW0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNCdWJibGVDaGFydCh0aGlzLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNoYXBlcyA9IHRoaXMuc2hhcGUgPT09ICdyYW5kb20nID8gYWxsU2hhcGVzIDogdGhpcy5zaGFwZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeUF4aXNLZXlzLmZvckVhY2goKHlBeGlzS2V5LCBzZXJpZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0gIF8ubWFwKGRhdGFTZXQsIChkYXRhT2JqLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0VtcHR5T2JqZWN0KGRhdGFTZXRbaW5kZXhdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlRmluZGVyKGRhdGFTZXRbaW5kZXhdLCB4QXhpc0tleSwgeUF4aXNLZXksIGluZGV4LCAoXy5pc0FycmF5KHNoYXBlcykgJiYgc2hhcGVzW3Nlcmllc10pIHx8IHRoaXMuc2hhcGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0gdGhpcy5nZXRWYWxpZERhdGEodmFsdWVzKTtcbiAgICAgICAgICAgICAgICAgICAgZGF0dW0ucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM6IHZhbHVlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogcHJldHRpZnlMYWJlbHMoeUF4aXNLZXkpXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXR1bTtcbiAgICB9XG5cbiAgICBzZXRDaGFydERhdGEoZGF0YSkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5fcHJvY2Vzc2VkRGF0YSA9IGRhdGE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRDaGFydERhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9jZXNzZWREYXRhO1xuICAgIH1cblxuICAgIC8vIGNvbnN0cnVjdGluZyB0aGUgZ3JvdXBlZCBkYXRhIGJhc2VkIG9uIHRoZSBzZWxlY3Rpb24gb2Ygb3JkZXJieSwgeCAmIHkgYXhpc1xuICAgIGdldFZpc3VhbGx5R3JvdXBlZERhdGEocXVlcnlSZXNwb25zZSwgZ3JvdXBpbmdDb2x1bW4pIHtcbiAgICAgICAgbGV0IGdyb3VwRGF0YTogYW55ID0ge30sXG4gICAgICAgICAgICBncm91cFZhbHVlczogYW55ID0gW10sXG4gICAgICAgICAgICBvcmRlckJ5RGV0YWlscyxcbiAgICAgICAgICAgIG1heExlbmd0aDtcbiAgICAgICAgY29uc3QgY2hhcnREYXRhOiBhbnkgPSBbXSxcbiAgICAgICAgICAgIF9pc0FyZWFDaGFydCA9IGlzQXJlYUNoYXJ0KHRoaXMudHlwZSksXG4gICAgICAgICAgICB5QXhpc0tleSA9IF8uZmlyc3QoXy5zcGxpdCh0aGlzLnlheGlzZGF0YWtleSwgJywnKSk7XG4gICAgICAgIHRoaXMueERhdGFLZXlBcnIgPSBbXTtcbiAgICAgICAgcXVlcnlSZXNwb25zZSA9IF8ub3JkZXJCeShxdWVyeVJlc3BvbnNlLCBfLnNwbGl0KHRoaXMuZ3JvdXBieSwgJywnKSk7XG4gICAgICAgIGlmICh0aGlzLm9yZGVyYnkpIHtcbiAgICAgICAgICAgIG9yZGVyQnlEZXRhaWxzID0gZ2V0TG9kYXNoT3JkZXJCeUZvcm1hdCh0aGlzLm9yZGVyYnkpO1xuICAgICAgICAgICAgcXVlcnlSZXNwb25zZSA9IF8ub3JkZXJCeShxdWVyeVJlc3BvbnNlLCBvcmRlckJ5RGV0YWlscy5jb2x1bW5zLCBvcmRlckJ5RGV0YWlscy5vcmRlcnMpO1xuICAgICAgICB9XG4gICAgICAgIHF1ZXJ5UmVzcG9uc2UgPSBfLmdyb3VwQnkocXVlcnlSZXNwb25zZSwgZ3JvdXBpbmdDb2x1bW4pO1xuICAgICAgICAvLyBJbiBjYXNlIG9mIGFyZWEgY2hhcnQgYWxsIHRoZSBzZXJpZXMgZGF0YSBzaG91bGQgYmUgb2Ygc2FtZSBsZW5ndGhcbiAgICAgICAgaWYgKF9pc0FyZWFDaGFydCkge1xuICAgICAgICAgICAgbWF4TGVuZ3RoID0gXy5tYXgoXy5tYXAocXVlcnlSZXNwb25zZSwgb2JqID0+IG9iai5sZW5ndGgpKTtcbiAgICAgICAgfVxuICAgICAgICBfLmZvckVhY2gocXVlcnlSZXNwb25zZSwgKHZhbHVlcywgZ3JvdXBLZXkpID0+IHtcbiAgICAgICAgICAgIGdyb3VwVmFsdWVzID0gaXNBcmVhQ2hhcnQgPyBfLmZpbGwobmV3IEFycmF5KG1heExlbmd0aCksIFswLCAwXSkgOiBbXTtcbiAgICAgICAgICAgIF8uZm9yRWFjaFJpZ2h0KHZhbHVlcywgKHZhbHVlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGdyb3VwVmFsdWVzW2luZGV4XSA9IHRoaXMudmFsdWVGaW5kZXIodmFsdWUsIHRoaXMueGF4aXNkYXRha2V5LCB5QXhpc0tleSwgaW5kZXgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBncm91cERhdGEgPSB7XG4gICAgICAgICAgICAgICAga2V5IDogZ3JvdXBLZXksXG4gICAgICAgICAgICAgICAgdmFsdWVzIDogZ3JvdXBWYWx1ZXNcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjaGFydERhdGEucHVzaChncm91cERhdGEpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNoYXJ0RGF0YTtcbiAgICB9XG5cbiAgICAvKkRlY2lkZXMgd2hldGhlciB0aGUgZGF0YSBzaG91bGQgYmUgdmlzdWFsbHkgZ3JvdXBlZCBvciBub3RcbiAgICAgICAgICAgIFZpc3VhbGx5IGdyb3VwZWQgd2hlbiBhIGRpZmZlcmVudCBjb2x1bW4gaXMgY2hvb3NlbiBpbiB0aGUgZ3JvdXAgYnkgb3RoZXIgdGhhbiB4IGFuZCB5IGF4aXMgYW5kIGFnZ3JlZ2F0aW9uIGlzIG5vdCBjaG9zZW4qL1xuICAgIGdldEdyb3VwaW5nRGV0YWlscygpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNHcm91cEJ5RW5hYmxlZCgpICYmICF0aGlzLmlzQWdncmVnYXRpb25FbmFibGVkKCkpIHtcbiAgICAgICAgICAgIGxldCBpc1Zpc3VhbGx5R3JvdXBlZCA9IGZhbHNlLFxuICAgICAgICAgICAgICAgIHZpc3VhbEdyb3VwaW5nQ29sdW1uLFxuICAgICAgICAgICAgICAgIGdyb3VwaW5nRXhwcmVzc2lvbixcbiAgICAgICAgICAgICAgICBjb2x1bW5zOiBhbnkgPSBbXSxcbiAgICAgICAgICAgICAgICBncm91cGluZ0NvbHVtbkluZGV4O1xuICAgICAgICAgICAgY29uc3QgZ3JvdXBieUNvbHVtbnMgPSB0aGlzLmdyb3VwYnkgJiYgdGhpcy5ncm91cGJ5ICE9PSBOT05FID8gdGhpcy5ncm91cGJ5LnNwbGl0KCcsJykgOiBbXSxcbiAgICAgICAgICAgICAgICB5QXhpc0tleXMgPSB0aGlzLnlheGlzZGF0YWtleSA/IHRoaXMueWF4aXNkYXRha2V5LnNwbGl0KCcsJykgOiBbXTtcblxuICAgICAgICAgICAgaWYgKGdyb3VwYnlDb2x1bW5zLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAvKkdldHRpbmcgdGhlIGdyb3VwIGJ5IGNvbHVtbiB3aGljaCBpcyBub3Qgc2VsZWN0ZWQgZWl0aGVyIGluIHggb3IgeSBheGlzKi9cbiAgICAgICAgICAgICAgICBncm91cGJ5Q29sdW1ucy5ldmVyeSgoY29sdW1uLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy54YXhpc2RhdGFrZXkgIT09IGNvbHVtbiAmJiAkLmluQXJyYXkoY29sdW1uLCB5QXhpc0tleXMpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXNWaXN1YWxseUdyb3VwZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmlzdWFsR3JvdXBpbmdDb2x1bW4gPSBjb2x1bW47XG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cGluZ0NvbHVtbkluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cGJ5Q29sdW1ucy5zcGxpY2UoZ3JvdXBpbmdDb2x1bW5JbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgLy8gQ29uc3RydWN0aW5nIHRoZSBncm91cGJ5IGV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICBpZiAodmlzdWFsR3JvdXBpbmdDb2x1bW4pIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1ucy5wdXNoKHZpc3VhbEdyb3VwaW5nQ29sdW1uKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoZ3JvdXBieUNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbnMgPSBfLmNvbmNhdChjb2x1bW5zLCBncm91cGJ5Q29sdW1ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSWYgeCBhbmQgeSBheGlzIGFyZSBub3QgaW5jbHVkZWQgaW4gYWdncmVnYXRpb24gbmVlZCB0byBiZSBpbmNsdWRlZCBpbiBncm91cGJ5XG4gICAgICAgICAgICBpZiAodGhpcy54YXhpc2RhdGFrZXkgIT09IHRoaXMuYWdncmVnYXRpb25jb2x1bW4pIHtcbiAgICAgICAgICAgICAgICBjb2x1bW5zLnB1c2godGhpcy54YXhpc2RhdGFrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXy5mb3JFYWNoKHlBeGlzS2V5cywga2V5ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5ICE9PSB0aGlzLmFnZ3JlZ2F0aW9uY29sdW1uKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbnMucHVzaChrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZ3JvdXBpbmdFeHByZXNzaW9uID0gIGNvbHVtbnMuam9pbignLCcpO1xuICAgICAgICAgICAgLy8gc2V0IGlzVmlzdWFsbHlHcm91cGVkIGZsYWcgaW4gc2NvcGUgZm9yIGxhdGVyIHVzZVxuICAgICAgICAgICAgdGhpcy5pc1Zpc3VhbGx5R3JvdXBlZCA9IGlzVmlzdWFsbHlHcm91cGVkO1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGdyb3VwaW5nRXhwcmVzc2lvbixcbiAgICAgICAgICAgICAgICBpc1Zpc3VhbGx5R3JvdXBlZDogaXNWaXN1YWxseUdyb3VwZWQsXG4gICAgICAgICAgICAgICAgdmlzdWFsR3JvdXBpbmdDb2x1bW46IHZpc3VhbEdyb3VwaW5nQ29sdW1uXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBleHByZXNzaW9uOiAnJyxcbiAgICAgICAgICAgIGlzVmlzdWFsbHlHcm91cGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHZpc3VhbEdyb3VwaW5nQ29sdW1uOiAnJ1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIEZ1bmN0aW9uIHRvIGdldCB0aGUgYWdncmVnYXRlZCBkYXRhIGFmdGVyIGFwcGx5aW5nIHRoZSBhZ2dyZWdhdGlvbiAmIGdyb3VwIGJ5IG9yIG9yZGVyIGJ5IG9wZXJhdGlvbnMuXG4gICAgZ2V0QWdncmVnYXRlZERhdGEoY2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgdmFyaWFibGU6IGFueSA9IHRoaXMuZGF0YXNvdXJjZSxcbiAgICAgICAgICAgIHlBeGlzS2V5cyA9IHRoaXMueWF4aXNkYXRha2V5ID8gdGhpcy55YXhpc2RhdGFrZXkuc3BsaXQoJywnKSA6IFtdLFxuICAgICAgICAgICAgZGF0YTogYW55ID0ge307XG4gICAgICAgIGxldCBzb3J0RXhwcixcbiAgICAgICAgICAgIGNvbHVtbnM6IGFueSA9IFtdLFxuICAgICAgICAgICAgY29sQWxpYXMsXG4gICAgICAgICAgICBvcmRlckJ5Q29sdW1ucyxcbiAgICAgICAgICAgIGdyb3VwQnlGaWVsZHM6IGFueSA9IFtdO1xuXG4gICAgICAgIGlmICghdmFyaWFibGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0dyb3VwQnlFbmFibGVkKCkpIHtcbiAgICAgICAgICAgIGdyb3VwQnlGaWVsZHMgPSBfLnNwbGl0KHRoaXMuZ3JvdXBieSwgJywnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcmRlcmJ5KSB7XG4gICAgICAgICAgICBzb3J0RXhwciA9IF8ucmVwbGFjZSh0aGlzLm9yZGVyYnksIC86L2csICcgJyk7XG4gICAgICAgICAgICBjb2x1bW5zID0gXy51bmlxKF8uY29uY2F0KGNvbHVtbnMsIGdyb3VwQnlGaWVsZHMsIFt0aGlzLmFnZ3JlZ2F0aW9uY29sdW1uXSkpO1xuICAgICAgICAgICAgb3JkZXJCeUNvbHVtbnMgPSBnZXRMb2Rhc2hPcmRlckJ5Rm9ybWF0KHRoaXMub3JkZXJieSkuY29sdW1ucztcbiAgICAgICAgICAgIC8vIElmIHRoZSBvcmRlcmJ5IGNvbHVtbiBpcyBjaG9zZW4gZWl0aGVyIGluIGdyb3VwYnkgb3Igb3JkZXJieSB0aGVuIHJlcGxhY2UgLiB3aXRoICQgZm9yIHRoYXQgY29sdW1uXG4gICAgICAgICAgICBfLmZvckVhY2goXy5pbnRlcnNlY3Rpb24oY29sdW1ucywgb3JkZXJCeUNvbHVtbnMpLCBjb2wgPT4ge1xuICAgICAgICAgICAgICAgIGNvbEFsaWFzID0gZ2V0VmFsaWRBbGlhc05hbWUoY29sKTtcbiAgICAgICAgICAgICAgICBzb3J0RXhwciA9IF8ucmVwbGFjZShzb3J0RXhwciwgY29sLCBjb2xBbGlhcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0FnZ3JlZ2F0aW9uRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAvLyBTZW5kIHRoZSBncm91cCBieSBpbiB0aGUgYWdncmVnYXRpb25zIGFwaSBvbmx5IGlmIGFnZ3JlZ2F0aW9uIGlzIGFsc28gY2hvc2VuXG4gICAgICAgICAgICBkYXRhLmdyb3VwQnlGaWVsZHMgPSBncm91cEJ5RmllbGRzO1xuICAgICAgICAgICAgZGF0YS5hZ2dyZWdhdGlvbnMgPSAgW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgJ2ZpZWxkJzogdGhpcy5hZ2dyZWdhdGlvbmNvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgJ3R5cGUnOiAgYWdncmVnYXRpb25Gbk1hcFt0aGlzLmFnZ3JlZ2F0aW9uXSxcbiAgICAgICAgICAgICAgICAgICAgJ2FsaWFzJzogZ2V0VmFsaWRBbGlhc05hbWUodGhpcy5hZ2dyZWdhdGlvbmNvbHVtbilcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIC8vIEV4ZWN1dGUgdGhlIHF1ZXJ5LlxuICAgICAgICB2YXJpYWJsZS5leGVjdXRlKCdnZXRBZ2dyZWdhdGVkRGF0YScsIHtcbiAgICAgICAgICAgICdhZ2dyZWdhdGlvbnMnIDogZGF0YSxcbiAgICAgICAgICAgICdzb3J0JyAgICAgICAgIDogc29ydEV4cHJcbiAgICAgICAgfSkudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAvLyBUcmFuc2Zvcm0gdGhlIHJlc3VsdCBpbnRvIGEgZm9ybWF0IHN1cHBvcnRlZCBieSB0aGUgY2hhcnQuXG4gICAgICAgICAgICBjb25zdCBjaGFydERhdGE6IGFueSA9IFtdLFxuICAgICAgICAgICAgICAgIGFnZ3JlZ2F0aW9uQWxpYXM6IGFueSA9IGdldFZhbGlkQWxpYXNOYW1lKHRoaXMuYWdncmVnYXRpb25jb2x1bW4pLFxuICAgICAgICAgICAgICAgIHhBeGlzQWxpYXNLZXkgPSBnZXRWYWxpZEFsaWFzTmFtZSh0aGlzLnhheGlzZGF0YWtleSksXG4gICAgICAgICAgICAgICAgeUF4aXNBbGlhc0tleXMgPSBbXTtcblxuICAgICAgICAgICAgeUF4aXNLZXlzLmZvckVhY2goeUF4aXNLZXkgPT4geUF4aXNBbGlhc0tleXMucHVzaChnZXRWYWxpZEFsaWFzTmFtZSh5QXhpc0tleSkpKTtcblxuICAgICAgICAgICAgXy5mb3JFYWNoKHJlc3BvbnNlLmJvZHkuY29udGVudCwgKHJlc3BvbnNlQ29udGVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgcmVzcG9uc2UgaW4gdGhlIGNoYXJ0RGF0YSBiYXNlZCBvbiAnYWdncmVnYXRpb25Db2x1bW4nLCAneEF4aXNEYXRhS2V5JyAmICd5QXhpc0RhdGFLZXknLlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzQWdncmVnYXRpb25FbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqW3RoaXMuYWdncmVnYXRpb25jb2x1bW5dID0gcmVzcG9uc2VDb250ZW50W2FnZ3JlZ2F0aW9uQWxpYXNdO1xuICAgICAgICAgICAgICAgICAgICBvYmpbdGhpcy5hZ2dyZWdhdGlvbmNvbHVtbl0gPSBfLmdldChyZXNwb25zZUNvbnRlbnQsIGFnZ3JlZ2F0aW9uQWxpYXMpIHx8IF8uZ2V0KHJlc3BvbnNlQ29udGVudCwgdGhpcy5hZ2dyZWdhdGlvbmNvbHVtbik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgb2JqW3RoaXMueGF4aXNkYXRha2V5XSA9IF8uZ2V0KHJlc3BvbnNlQ29udGVudCwgeEF4aXNBbGlhc0tleSkgfHwgXy5nZXQocmVzcG9uc2VDb250ZW50LCB0aGlzLnhheGlzZGF0YWtleSk7XG5cbiAgICAgICAgICAgICAgICB5QXhpc0tleXMuZm9yRWFjaCgoeUF4aXNLZXksIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG9ialt5QXhpc0tleV0gPSByZXNwb25zZUNvbnRlbnRbeUF4aXNBbGlhc0tleXNbaW5kZXhdXTtcbiAgICAgICAgICAgICAgICAgICAgb2JqW3lBeGlzS2V5XSA9IF8uZ2V0KHJlc3BvbnNlQ29udGVudCwgeUF4aXNBbGlhc0tleXNbaW5kZXhdKSB8fCBfLmdldChyZXNwb25zZUNvbnRlbnQsIHlBeGlzS2V5KTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGNoYXJ0RGF0YS5wdXNoKG9iaik7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5jaGFydERhdGEgPSBjaGFydERhdGE7XG5cbiAgICAgICAgICAgIHRyaWdnZXJGbihjYWxsYmFjayk7XG4gICAgICAgIH0sICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2hhcnREYXRhID0gW107XG4gICAgICAgICAgICB0aGlzLnNldEVyck1zZygnTUVTU0FHRV9FUlJPUl9GRVRDSF9EQVRBJyk7XG4gICAgICAgICAgICB0cmlnZ2VyRm4oY2FsbGJhY2spO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHNldHMgbWF4aW11bSB3aWR0aCBmb3IgdGhlIGxhYmVscyB0aGF0IGNhbiBiZSBkaXNwbGF5ZWQuVGhpcyB3aWxsIGhlbHBmdWwgd2hlbiB0aGV5IGFyZSBvdmVybGFwcGluZ1xuICAgIHNldExhYmVsc01heFdpZHRoKCkge1xuICAgICAgICBsZXQgeFRpY2tzLFxuICAgICAgICAgICAgdGlja1dpZHRoLFxuICAgICAgICAgICAgbWF4TGVuZ3RoLFxuICAgICAgICAgICAgeERpc3QsXG4gICAgICAgICAgICB5RGlzdCxcbiAgICAgICAgICAgIHRvdGFsSGVpZ2h0LFxuICAgICAgICAgICAgbWF4Tm9MYWJlbHMsXG4gICAgICAgICAgICBudGhFbGVtZW50LFxuICAgICAgICAgICAgbGFiZWxzQXZhaWxhYmxlV2lkdGgsXG4gICAgICAgICAgICBiYXJXcmFwcGVyLFxuICAgICAgICAgICAgeUF4aXNXcmFwcGVyLFxuICAgICAgICAgICAgc3ZnV3JhcHBlcjtcbiAgICAgICAgY29uc3QgZm9udHNpemUgPSBwYXJzZUludCh0aGlzLmZvbnRzaXplLCAxMCkgfHwgMTIsXG4gICAgICAgICAgICBpc0JhcmNoYXJ0ID0gaXNCYXJDaGFydCh0aGlzLnR5cGUpO1xuICAgICAgICAvLyBnZXR0aW5nIHRoZSB4IHRpY2tzIGluIHRoZSBjaGFydFxuICAgICAgICB4VGlja3MgPSAkKCcjd21DaGFydCcgKyB0aGlzLiRpZCArICcgc3ZnJykuZmluZCgnZy5udi14JykuZmluZCgnZy50aWNrJykuZmluZCgndGV4dCcpO1xuXG4gICAgICAgIC8vIGdldHRpbmcgdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIHR3byB2aXNpYmxlIHRpY2tzIGFzc29jaWF0ZWQgd2l0aCB2aXNpYmxlIHRleHRcbiAgICAgICAgeFRpY2tzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgeFRpY2sgPSAkKHRoaXMpO1xuICAgICAgICAgICAgbGV0IHhUcmFuc2Zvcm0sXG4gICAgICAgICAgICAgICAgdGlja0Rpc3Q7XG4gICAgICAgICAgICBpZiAoeFRpY2sudGV4dCgpICYmIHhUaWNrLmNzcygnb3BhY2l0eScpID09PSAnMScpIHtcbiAgICAgICAgICAgICAgICB4VHJhbnNmb3JtID0geFRpY2sucGFyZW50KCkuYXR0cigndHJhbnNmb3JtJykuc3BsaXQoJywnKTtcbiAgICAgICAgICAgICAgICB4RGlzdCA9IHBhcnNlRmxvYXQoeFRyYW5zZm9ybVswXS5zdWJzdHIoMTApKTtcbiAgICAgICAgICAgICAgICB5RGlzdCA9IHBhcnNlRmxvYXQoeFRyYW5zZm9ybVsxXSB8fCAnMCcpO1xuICAgICAgICAgICAgICAgIGlmICghaXNCYXJjaGFydCAmJiB4RGlzdCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGlja0Rpc3QgPSB4RGlzdDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHlEaXN0ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aWNrRGlzdCA9IHlEaXN0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGlja1dpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRpY2tXaWR0aCA9IHRpY2tEaXN0IC0gdGlja1dpZHRoO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRpY2tXaWR0aCA9IHRpY2tEaXN0O1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBJbiBjYXNlIG9mIGJhciBjaGFydCBnZXR0aW5nIHRoZSBhdmFpbGFibGUgc3BhY2UgZm9yIHRoZSBsYWJlbHMgdG8gYmUgZGlzcGxheWVkXG4gICAgICAgIGlmIChpc0JhcmNoYXJ0KSB7XG4gICAgICAgICAgICBiYXJXcmFwcGVyID0gJCgnI3dtQ2hhcnQnICsgdGhpcy4kaWQgKyAnIHN2Zz5nLm52LXdyYXA+Zz5nLm52LWJhcnNXcmFwJylbMF07XG4gICAgICAgICAgICB5QXhpc1dyYXBwZXIgPSAkKCcjd21DaGFydCcgKyB0aGlzLiRpZCArICcgc3ZnPmcubnYtd3JhcD5nPmcubnYteScpWzBdO1xuICAgICAgICAgICAgc3ZnV3JhcHBlciA9ICQoJyN3bUNoYXJ0JyArIHRoaXMuJGlkICsgJyBzdmcnKVswXTtcbiAgICAgICAgICAgIC8vIGdldHRpbmcgdGhlIHRvdGFsIGhlaWdodCBvZiB0aGUgY2hhcnRcbiAgICAgICAgICAgIHRvdGFsSGVpZ2h0ID0gYmFyV3JhcHBlciA/IGJhcldyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0IDogMDtcbiAgICAgICAgICAgIC8vIGdldHRpbmcgdGhlIGxhYmVscyBhdmFpbGFibGUgc3BhY2VcbiAgICAgICAgICAgIGxhYmVsc0F2YWlsYWJsZVdpZHRoID0geUF4aXNXcmFwcGVyID8gc3ZnV3JhcHBlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCAtIHlBeGlzV3JhcHBlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCA6IHN2Z1dyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICAgICAgICAvLyBTZXR0aW5nIHRoZSBtYXggbGVuZ3RoIGZvciB0aGUgbGFiZWxcbiAgICAgICAgICAgIG1heExlbmd0aCA9IE1hdGgucm91bmQobGFiZWxzQXZhaWxhYmxlV2lkdGggLyBmb250c2l6ZSk7XG4gICAgICAgICAgICAvLyBpZiBhdmFpbGFibGUgc3BhY2UgZm9yIGVhY2ggbGFiZWwgaXMgbGVzcyB0aGFuIHRoZSBmb250LXNpemVcbiAgICAgICAgICAgIC8vIHRoZW4gbGltaXRpbmcgdGhlIGxhYmVscyB0byBiZSBkaXNwbGF5ZWRcbiAgICAgICAgICAgIGlmICh0aWNrV2lkdGggPCBmb250c2l6ZSkge1xuICAgICAgICAgICAgICAgIC8vIGNhbGN1bGF0ZSB0aGUgbWF4aW11bSBubyBvZiBsYWJlbHMgdG8gYmUgZml0dGVkXG4gICAgICAgICAgICAgICAgbWF4Tm9MYWJlbHMgPSB0b3RhbEhlaWdodCAvIGZvbnRzaXplO1xuICAgICAgICAgICAgICAgIC8vIHNob3dpbmcgb25seSB0aGUgbnRoIGVsZW1lbnRcbiAgICAgICAgICAgICAgICBudGhFbGVtZW50ID0gTWF0aC5jZWlsKHRoaXMuY2hhcnREYXRhLmxlbmd0aCAvIG1heE5vTGFiZWxzKTtcbiAgICAgICAgICAgICAgICAvLyBzaG93aW5nIHVwIG9ubHkgc29tZSBsYWJlbHNcbiAgICAgICAgICAgICAgICBkMy5zZWxlY3QoJyN3bUNoYXJ0JyArIHRoaXMuJGlkICsgJyBzdmcnKS5zZWxlY3QoJ2cubnYteCcpLnNlbGVjdEFsbCgnZy50aWNrJykuc2VsZWN0KCd0ZXh0JykuZWFjaChmdW5jdGlvbiAodGV4dCwgaSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBoaWRpbmcgZXZlcnkgbm9uIG50aCBlbGVtZW50XG4gICAgICAgICAgICAgICAgICAgIGlmIChpICUgbnRoRWxlbWVudCAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZDMuc2VsZWN0KHRoaXMpLmF0dHIoJ29wYWNpdHknLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gU2V0dGluZyB0aGUgbWF4IGxlbmd0aCBmb3IgdGhlIGxhYmVsXG4gICAgICAgICAgICBtYXhMZW5ndGggPSBNYXRoLnJvdW5kKHRpY2tXaWR0aCAvIGZvbnRzaXplKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1heExlbmd0aCBzaG91bGQgYWx3YXlzIGJlIGEgcG9zaXRpdmUgbnVtYmVyXG4gICAgICAgIG1heExlbmd0aCA9IE1hdGguYWJzKG1heExlbmd0aCk7XG4gICAgICAgIC8vIFZhbGlkYXRpbmcgaWYgZXZlcnkgbGFiZWwgZXhjZWVkcyB0aGUgbWF4IGxlbmd0aCBhbmQgaWYgc28gbGltaXRpbmcgdGhlIGxlbmd0aCBhbmQgYWRkaW5nIGVsbGlwc2lzXG4gICAgICAgIHhUaWNrcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRleHRDb250ZW50Lmxlbmd0aCA+IG1heExlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMudGV4dENvbnRlbnQgPSB0aGlzLnRleHRDb250ZW50LnN1YnN0cigwLCBtYXhMZW5ndGgpICsgJy4uLic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFJldHVybnMgdGhlIGNvbHVtbnMgb2YgdGhhdCBjYW4gYmUgY2hvb3NlbiBpbiB0aGUgeCBhbmQgeSBheGlzXG4gICAgZ2V0RGVmYXVsdENvbHVtbnMoKSB7XG4gICAgICAgIGxldCB0eXBlLFxuICAgICAgICAgICAgc3RyaW5nQ29sdW1uLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIHRlbXA7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRDb2x1bW5zID0gW10sXG4gICAgICAgICAgICBjb2x1bW5zID0gdGhpcy5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uR0VUX1BST1BFUlRJRVNfTUFQKSB8fCBbXTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29sdW1ucy5sZW5ndGggJiYgZGVmYXVsdENvbHVtbnMubGVuZ3RoIDw9IDI7IGkgKz0gMSkge1xuICAgICAgICAgICAgdHlwZSA9IGNvbHVtbnNbaV0udHlwZTtcbiAgICAgICAgICAgIGlmICghY29sdW1uc1tpXS5pc1JlbGF0ZWQgJiYgKGlzTnVtYmVyVHlwZSh0eXBlKSkpIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0Q29sdW1ucy5wdXNoKGNvbHVtbnNbaV0uZmllbGROYW1lKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3N0cmluZycgJiYgIXN0cmluZ0NvbHVtbikge1xuICAgICAgICAgICAgICAgIHN0cmluZ0NvbHVtbiA9IGNvbHVtbnNbaV0uZmllbGROYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIE90aGVyIHRoYW4gYnViYmxlIGNoYXJ0IHg6IHN0cmluZyB0eXBlIHk6IG51bWJlciB0eXBlXG4gICAgICAgIC8vIEJ1YmJsZSBjaGFydCB4OiBudW1iZXIgdHlwZSB5OiBudW1iZXIgdHlwZVxuICAgICAgICBpZiAoc3RyaW5nQ29sdW1uICYmIGRlZmF1bHRDb2x1bW5zLmxlbmd0aCA+IDAgJiYgIWlzQnViYmxlQ2hhcnQodGhpcy50eXBlKSkge1xuICAgICAgICAgICAgdGVtcCA9IGRlZmF1bHRDb2x1bW5zWzBdO1xuICAgICAgICAgICAgZGVmYXVsdENvbHVtbnNbMF0gPSBzdHJpbmdDb2x1bW47XG4gICAgICAgICAgICBkZWZhdWx0Q29sdW1uc1sxXSA9IHRlbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGVmYXVsdENvbHVtbnM7XG4gICAgfVxuXG4gICAgLy8gQ2FsbCB1c2VyIGRlZmluZWQgamF2YXNjcmlwdCBmdW5jdGlvbiB3aGVuIHVzZXIgbGlua3MgaXQgdG8gY2xpY2sgZXZlbnQgb2YgdGhlIHdpZGdldC5cbiAgICBhdHRhY2hDbGlja0V2ZW50KCkge1xuICAgICAgICBsZXQgZGF0YU9iajtcbiAgICAgICAgZDMuc2VsZWN0KCcjd21DaGFydCcgKyB0aGlzLiRpZCArICcgc3ZnJykuc2VsZWN0QWxsKGNoYXJ0RGF0YVBvaW50WHBhdGhbdGhpcy50eXBlXSkuc3R5bGUoJ3BvaW50ZXItZXZlbnRzJywgJ2FsbCcpXG4gICAgICAgICAgICAub24oJ2NsaWNrJywgKGRhdGEsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnQ29sdW1uJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnQmFyJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFPYmogPSBkYXRhLl9kYXRhT2JqO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1BpZSc6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0RvbnV0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFPYmogPSBkYXRhLmRhdGEuX2RhdGFPYmo7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnQXJlYSc6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0N1bXVsYXRpdmUgTGluZSc6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0xpbmUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YU9iaiA9IGRhdGFbMF0uX2RhdGFPYmo7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnQnViYmxlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFPYmogPSBkYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRpdGVtID0gZGF0YU9iajtcbiAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3NlbGVjdCcsIHskZXZlbnQ6IGQzLmV2ZW50LCBzZWxlY3RlZENoYXJ0SXRlbTogZGF0YSwgc2VsZWN0ZWRJdGVtOiB0aGlzLnNlbGVjdGVkaXRlbX0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICAvKiAgUmV0dXJucyBZIFNjYWxlIG1pbiB2YWx1ZVxuICAgICAgICAgICBFeDogSW5wdXQgICA6IDguOTdcbiAgICAgICAgICAgICAgIE91dHB1dCAgOiA4Ljg3XG5cbiAgICAgICAgICAgICAgIElucHV0ICAgOiA4XG4gICAgICAgICAgICAgICBPdXRwdXQgIDogN1xuICAgICAgICovXG5cbiAgICBwb3N0UGxvdFByb2Nlc3MoY2hhcnQpIHtcbiAgICAgICAgbGV0IGNoYXJ0U3ZnLFxuICAgICAgICAgICAgcGllTGFiZWxzLFxuICAgICAgICAgICAgcGllR3JvdXBzLFxuICAgICAgICAgICAgYW5nbGVBcnJheTtcbiAgICAgICAgY29uc3Qgc3R5bGVPYmogPSB7fTtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuJGVsZW1lbnQ7XG5cbiAgICAgICAgcG9zdFBsb3RDaGFydFByb2Nlc3ModGhpcyk7XG5cbiAgICAgICAgaWYgKCFpc1BpZVR5cGUodGhpcy50eXBlKSkge1xuICAgICAgICAgICAgdGhpcy5zZXRMYWJlbHNNYXhXaWR0aCgpO1xuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLnNob3dsYWJlbHNvdXRzaWRlKSB7XG4gICAgICAgICAgICAvKiogTnZkMyBoYXMgYSBpc3N1ZSBpbiByb3RhdGluZyB0ZXh0LiBTbyB3ZSB3aWxsIHVzZSB0aGlzIGFzIGEgdGVtcCBmaXguXG4gICAgICAgICAgICAgKiBJZiB0aGUgaXNzdWUgaXMgcmVzb2x2ZWQgdGhlcmUsIHdlIGNhbiByZW1vdmUgdGhpcy4qL1xuICAgICAgICAgICAgLyogSWYgaXQgaXMgYSBkb251dCBjaGFydCwgdGhlbiByb3RhdGUgdGhlIHRleHQgYW5kIHBvc2l0aW9uIHRoZW0qL1xuICAgICAgICAgICAgY2hhcnRTdmcgPSBkMy5zZWxlY3QoJyN3bUNoYXJ0JyArIHRoaXMuJGlkICsgJyBzdmcnKTtcbiAgICAgICAgICAgIHBpZUxhYmVscyA9IGNoYXJ0U3ZnLnNlbGVjdCgnLm52LXBpZUxhYmVscycpLnNlbGVjdEFsbCgnLm52LWxhYmVsJyk7XG4gICAgICAgICAgICBwaWVHcm91cHMgPSBjaGFydFN2Zy5zZWxlY3QoJy5udi1waWUnKS5zZWxlY3RBbGwoJy5udi1zbGljZScpO1xuICAgICAgICAgICAgYW5nbGVBcnJheSA9IFtdO1xuICAgICAgICAgICAgaWYgKHBpZUdyb3VwcyAmJiBwaWVHcm91cHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcGllR3JvdXBzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBkMy5zZWxlY3QodGhpcykuYXR0cigndHJhbnNmb3JtJywgZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlQXJyYXkucHVzaChhbmdsZShkKSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHBpZUxhYmVscy5lYWNoKGZ1bmN0aW9uIChkLCBpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gZDMuc2VsZWN0KHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAkKGdyb3VwWzBdWzBdKS5maW5kKCd0ZXh0JykuYXR0cigndHJhbnNmb3JtJywgJ3JvdGF0ZSgnICsgYW5nbGVBcnJheVtpXSArICcpJyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBwcmVwYXJlIHRleHQgc3R5bGUgcHJvcHMgb2JqZWN0IGFuZCBzZXRcbiAgICAgICAgXy5mb3JFYWNoKHN0eWxlUHJvcHMsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSAnZm9udHNpemUnIHx8IGtleSA9PT0gJ2ZvbnR1bml0Jykge1xuICAgICAgICAgICAgICAgIHN0eWxlT2JqW3ZhbHVlXSA9IHRoaXMuZm9udHNpemUgKyB0aGlzLmZvbnR1bml0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdHlsZU9ialt2YWx1ZV0gPSB0aGlzW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBzZXRUZXh0U3R5bGUoc3R5bGVPYmosIHRoaXMuJGlkKTtcblxuICAgICAgICAvKlxuICAgICAgICAgKiBhbGxvdyB3aW5kb3ctcmVzaXplIGZ1bmN0aW9uYWxpdHksIGZvciBvbmx5LXJ1biBtb2RlIGFzXG4gICAgICAgICAqIHVwZGF0aW5nIGNoYXJ0IGlzIGJlaW5nIGhhbmRsZWQgYnkgd2F0Y2hlcnMgb2YgaGVpZ2h0ICYgd2lkdGggaW4gc3R1ZGlvLW1vZGVcbiAgICAgICAgICogKi9cbiAgICAgICAgdHJpZ2dlckZuKHRoaXMuX3Jlc2l6ZUZuICYmIHRoaXMuX3Jlc2l6ZUZuLmNsZWFyKTtcbiAgICAgICAgdGhpcy5fcmVzaXplRm4gPSBudi51dGlscy53aW5kb3dSZXNpemUoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGVsZW1lbnRbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgY2hhcnQudXBkYXRlKCk7XG4gICAgICAgICAgICAgICAgcG9zdFBsb3RDaGFydFByb2Nlc3ModGhpcyk7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1BpZVR5cGUodGhpcy50eXBlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldExhYmVsc01heFdpZHRoKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBnZXQgcGFyZW50cyBvZiBhY2NvcmRpb24gdHlwZVxuICAgICAgICAgICAgICAgIC8qbGV0IHBhcmVudCA9IGVsZW1lbnQuY2xvc2VzdCgnLmFwcC1hY2NvcmRpb24tcGFuZWwsIC50YWItcGFuZScpLmlzb2xhdGVTY29wZSgpO1xuICAgICAgICAgICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50LmluaXRpYWxpemVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSovXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIHByZXBhcmVzIGFuZCBjb25maWd1cmVzIHRoZSBjaGFydCBwcm9wZXJ0aWVzXG4gICAgY29uZmlndXJlQ2hhcnQoKSB7XG4gICAgICAgIC8vIENvcHkgdGhlIGRhdGEgb25seSBpbiBjYXNlIG9mIHBpZSBjaGFydCB3aXRoIGRlZmF1bHQgZGF0YVxuICAgICAgICAvLyBSZWFzb24gOiB3aGVuIG11bHRpcGxlIHBpZSBjaGFydHMgYXJlIGJvdW5kIHRvIHNhbWUgZGF0YSwgZmlyc3QgY2hhcnQgdGhlbWUgd2lsbCBiZSBhcHBsaWVkIHRvIGFsbCBjaGFydHNcbiAgICAgICAgbGV0IHhEb21haW5WYWx1ZXM7XG4gICAgICAgIGxldCB5RG9tYWluVmFsdWVzO1xuICAgICAgICBsZXQgY2hhcnQ7XG4gICAgICAgIGxldCBiZWZvcmVSZW5kZXJWYWw7XG4gICAgICAgIGNvbnN0IHlmb3JtYXRPcHRpb25zOiBhbnkgPSB7fTtcblxuICAgICAgICBpZiAodGhpcy5fcHJvY2Vzc2VkRGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBpZiAoaXNBeGlzRG9tYWluVmFsaWQodGhpcywgJ3gnKSkge1xuICAgICAgICAgICAgICAgIHhEb21haW5WYWx1ZXMgPSB0aGlzLmJpbmRkYXRhc2V0ID8gdGhpcy5nZXRYTWluTWF4VmFsdWVzKHRoaXMuX3Byb2Nlc3NlZERhdGFbMF0pIDogeyAnbWluJyA6IHsneCc6IDF9LCAgJ21heCcgOiB7J3gnIDogNX19O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzQXhpc0RvbWFpblZhbGlkKHRoaXMsICd5JykpIHtcbiAgICAgICAgICAgICAgICB5RG9tYWluVmFsdWVzID0gdGhpcy5iaW5kZGF0YXNldCA/IHRoaXMuZ2V0WU1pbk1heFZhbHVlcyh0aGlzLl9wcm9jZXNzZWREYXRhKSA6IHsgJ21pbicgOiB7J3knIDogMX0sICdtYXgnIDogeyd5JyA6IDV9fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc1BpZVR5cGUodGhpcy50eXBlKSAmJiAoIXRoaXMuYmluZGRhdGFzZXQgfHwgIXRoaXMuc2NvcGVkYXRhc2V0KSkge1xuICAgICAgICAgICAgdGhpcy5fcHJvY2Vzc2VkRGF0YSA9IGdldENsb25lZE9iamVjdCh0aGlzLnNjb3BlZGF0YXNldCB8fCB0aGlzLl9wcm9jZXNzZWREYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGdldCB0aGUgY2hhcnQgb2JqZWN0XG4gICAgICAgIGNoYXJ0ID0gaW5pdENoYXJ0KHRoaXMsIHhEb21haW5WYWx1ZXMsIHlEb21haW5WYWx1ZXMsIG51bGwsICF0aGlzLmJpbmRkYXRhc2V0KTtcblxuICAgICAgICBpZiAoXy5pc0FycmF5KHRoaXMuX3Byb2Nlc3NlZERhdGEpKSB7XG4gICAgICAgICAgICAvLyBXTVMtMTk0OTk6ICBUbyByZW1vdmUgY2hhcnQgWC1heGlzIG9sZCB0aWNrcyB3aGVuIGNoYXJ0IGRhdGEgbG9hZGVkIGR5bmFtaWNhbGx5LlxuICAgICAgICAgICAgY29uc3Qgb2xkZ1RpY2tzID0gICQoJyN3bUNoYXJ0JyArIHRoaXMuJGlkICsgJyBzdmcnKS5maW5kKCdnLm52LXgnKS5maW5kKCdnLnRpY2snKTtcbiAgICAgICAgICAgIGlmIChvbGRnVGlja3MgJiYgb2xkZ1RpY2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIG9sZGdUaWNrcy5yZW1vdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJlZm9yZVJlbmRlclZhbCA9IHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnYmVmb3JlcmVuZGVyJywgeyAnY2hhcnRJbnN0YW5jZScgOiBjaGFydH0pO1xuICAgICAgICAgICAgaWYgKGJlZm9yZVJlbmRlclZhbCkge1xuICAgICAgICAgICAgICAgIGNoYXJ0ID0gYmVmb3JlUmVuZGVyVmFsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jaGFydCA9IGNoYXJ0O1xuICAgICAgICAgICAgLy8gY2hhbmdpbmcgdGhlIGRlZmF1bHQgbm8gZGF0YSBtZXNzYWdlXG4gICAgICAgICAgICBkMy5zZWxlY3QoJyN3bUNoYXJ0JyArIHRoaXMuJGlkICsgJyBzdmcnKVxuICAgICAgICAgICAgICAgIC5kYXR1bSh0aGlzLl9wcm9jZXNzZWREYXRhKVxuICAgICAgICAgICAgICAgIC5jYWxsKHRoaXMuY2hhcnQpO1xuICAgICAgICAgICAgdGhpcy5wb3N0UGxvdFByb2Nlc3MoY2hhcnQpO1xuICAgICAgICAgICAgcmV0dXJuIGNoYXJ0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gUGxvdHRpbmcgdGhlIGNoYXJ0IHdpdGggc2V0IG9mIHRoZSBwcm9wZXJ0aWVzIHNldCB0byBpdFxuICAgIHBsb3RDaGFydCgpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuJGVsZW1lbnQ7XG4gICAgICAgIC8vIGNhbGwgdXNlci10cmFuc2Zvcm1lZCBmdW5jdGlvblxuICAgICAgICB0aGlzLmNoYXJ0RGF0YSA9ICh0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3RyYW5zZm9ybScpKSB8fCB0aGlzLmNoYXJ0RGF0YTtcblxuICAgICAgICAvLyBHZXR0aW5nIHRoZSBvcmRlciBieSBkYXRhIG9ubHkgaW4gcnVuIG1vZGUuIFRoZSBvcmRlciBieSBhcHBsaWVzIGZvciBhbGwgdGhlIGNoYXJ0cyBvdGhlciB0aGFuIHBpZSBhbmQgZG9udXQgY2hhcnRzXG4gICAgICAgIGlmICh0aGlzLmlzVmlzdWFsbHlHcm91cGVkICYmICFpc1BpZVR5cGUodGhpcy50eXBlKSkge1xuICAgICAgICAgICAgdGhpcy5fcHJvY2Vzc2VkRGF0YSA9IHRoaXMuY2hhcnREYXRhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fcHJvY2Vzc2VkRGF0YSA9IHRoaXMucHJvY2Vzc0NoYXJ0RGF0YSgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNoZWNraW5nIHRoZSBwYXJlbnQgY29udGFpbmVyIGJlZm9yZSBwbG90dGluZyB0aGUgY2hhcnRcbiAgICAgICAgaWYgKCFlbGVtZW50WzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNsZWFyQ2FudmFzKSB7XG4gICAgICAgICAgICAvLyBlbXB0eSBzdmcgdG8gYWRkLW5ldyBjaGFydFxuICAgICAgICAgICAgZWxlbWVudC5maW5kKCdzdmcnKS5yZXBsYWNlV2l0aCgnPHN2Zz48L3N2Zz4nKTtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJDYW52YXMgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEluIGNhc2Ugb2YgaW52YWxpZCBheGlzIHNob3cgbm8gZGF0YSBhdmFpbGFibGUgbWVzc2FnZVxuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZEF4aXMoKSkge1xuICAgICAgICAgICAgdGhpcy5fcHJvY2Vzc2VkRGF0YSA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIG52LmFkZEdyYXBoKCgpID0+IHRoaXMuY29uZmlndXJlQ2hhcnQoKSwgICgpID0+IHtcbiAgICAgICAgICAgIC8qQnViYmxlIGNoYXJ0IGhhcyBhbiB0aW1lIG91dCBkZWxheSBvZiAzMDBtcyBpbiB0aGVpciBpbXBsZW1lbnRhdGlvbiBkdWUgdG8gd2hpY2ggd2VcbiAgICAgICAgICAgICogd29uJ3QgYmUgZ2V0dGluZyByZXF1aXJlZCBkYXRhIHBvaW50cyBvbiBhdHRhY2hpbmcgZXZlbnRzXG4gICAgICAgICAgICAqIGhlbmNlIGRlbGF5aW5nIGl0IDYwMG1zKi9cbiAgICAgICAgICAgIHNldFRpbWVvdXQoICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmF0dGFjaENsaWNrRXZlbnQoKTtcbiAgICAgICAgICAgIH0sIDYwMCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmlzTG9hZEluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICB9XG4gICAgLy8gVE9ETzogTmVlZCB3YXkgdG8gZmlndXJlIG91dCBpZiB0aGUgZGF0YXNvdXJjZSBpcyBhIGxpdmUgc291cmNlXG4gICAgZ2V0IGlzTGl2ZVZhcmlhYmxlKCkge1xuICAgICAgICAvLyBzZXR0aW5nIHRoZSBmbGFnIGZvciB0aGUgbGl2ZSB2YXJpYWJsZSBpbiB0aGUgc2NvcGUgZm9yIHRoZSBjaGVja3NcbiAgICAgICAgY29uc3QgdmFyaWFibGVPYmogPSB0aGlzLmRhdGFzb3VyY2U7XG4gICAgICAgIHJldHVybiB2YXJpYWJsZU9iaiAmJiB2YXJpYWJsZU9iai5jYXRlZ29yeSA9PT0gJ3dtLkxpdmVWYXJpYWJsZSc7XG4gICAgfVxuXG4gICAgcGxvdENoYXJ0UHJveHkoKSB7XG4gICAgICAgIHRoaXMuc2hvd0NvbnRlbnRMb2FkRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pbnZhbGlkQ29uZmlnID0gZmFsc2U7XG4gICAgICAgIC8vIENoZWNraW5nIGlmIHggYW5kIHkgYXhpcyBhcmUgY2hvc2VuXG4gICAgICAgIHRoaXMuaXNMb2FkSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgICAgIGNvbnN0IGdyb3VwaW5nRGV0YWlscyA9IHRoaXMuZ2V0R3JvdXBpbmdEZXRhaWxzKCk7XG4gICAgICAgIC8vIElmIGFnZ3JlZ2F0aW9uL2dyb3VwIGJ5L29yZGVyIGJ5IHByb3BlcnRpZXMgaGF2ZSBiZWVuIHNldCwgdGhlbiBnZXQgdGhlIGFnZ3JlZ2F0ZWQgZGF0YSBhbmQgcGxvdCB0aGUgcmVzdWx0IGluIHRoZSBjaGFydC5cbiAgICAgICAgLy8gVE9ETzogZGF0YXNvdXJjZSBmb3IgbGl2ZSB2YXJpYWJsZSBkZXRlY3Rpb25cbiAgICAgICAgaWYgKHRoaXMuYmluZGRhdGFzZXQgJiYgdGhpcy5pc0xpdmVWYXJpYWJsZSAmJiAodGhpcy5maWx0ZXJGaWVsZHMgfHwgdGhpcy5pc0RhdGFGaWx0ZXJpbmdFbmFibGVkKCkpKSB7XG4gICAgICAgICAgICB0aGlzLmdldEFnZ3JlZ2F0ZWREYXRhKCgpID0+IHRoaXMucGxvdENoYXJ0KCkpO1xuICAgICAgICB9IGVsc2UgeyAvLyBFbHNlLCBzaW1wbHkgcGxvdCB0aGUgY2hhcnQuXG4gICAgICAgICAgICAvLyBJbiBjYXNlIG9mIGxpdmUgdmFyaWFibGUgcmVzZXR0aW5nIHRoZSBhZ2dyZWdhdGVkIGRhdGEgdG8gdGhlIG5vcm1hbCBkYXRhc2V0IHdoZW4gdGhlIGFnZ3JlZ2F0aW9uIGhhcyBiZWVuIHJlbW92ZWRcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGFzZXQgJiYgdGhpcy5pc0xpdmVWYXJpYWJsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhcnREYXRhID0gdGhpcy5kYXRhc2V0O1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzR3JvdXBCeUVuYWJsZWQoKSAmJiBncm91cGluZ0RldGFpbHMuaXNWaXN1YWxseUdyb3VwZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFydERhdGEgPSB0aGlzLmdldFZpc3VhbGx5R3JvdXBlZERhdGEodGhpcy5jaGFydERhdGEsIGdyb3VwaW5nRGV0YWlscy52aXN1YWxHcm91cGluZ0NvbHVtbik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBsb3RDaGFydCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gc2V0cyB0aGUgZGVmYXVsdCB4IGFuZCB5IGF4aXMgb3B0aW9uc1xuICAgIHNldERlZmF1bHRBeGlzT3B0aW9ucygpIHtcbiAgICAgICAgY29uc3QgZGVmYXVsdENvbHVtbnMgPSB0aGlzLmdldERlZmF1bHRDb2x1bW5zKCk7XG4gICAgICAgIC8vIElmIHdlIGdldCB0aGUgdmFsaWQgZGVmYXVsdCBjb2x1bW5zIHRoZW4gYXNzaWduIHRoZW0gYXMgdGhlIHggYW5kIHkgYXhpc1xuICAgICAgICAvLyBJbiBjYXNlIG9mIHNlcnZpY2UgdmFyaWFibGUgd2UgbWF5IG5vdCBnZXQgdGhlIHZhbGlkIGNvbHVtbnMgYmVjYXVzZSB3ZSBjYW5ub3Qga25vdyB0aGUgZGF0YXR5cGVzXG4gICAgICAgIHRoaXMueGF4aXNkYXRha2V5ID0gZGVmYXVsdENvbHVtbnNbMF0gfHwgbnVsbDtcbiAgICAgICAgdGhpcy55YXhpc2RhdGFrZXkgPSBkZWZhdWx0Q29sdW1uc1sxXSB8fCBudWxsO1xuICAgIH1cblxuICAgIGdldEN1dG9taXplZE9wdGlvbnMocHJvcCwgZmllbGRzKSB7XG4gICAgICAgIGNvbnN0IGdyb3VwQnlDb2x1bW5zID0gXy5zcGxpdCh0aGlzLmdyb3VwYnksICcsJyksXG4gICAgICAgICAgICBhZ2dDb2x1bW5zID0gXy5zcGxpdCh0aGlzLmFnZ3JlZ2F0aW9uY29sdW1uLCAnLCcpO1xuICAgICAgICBpZiAoIXRoaXMuYmluZGRhdGFzZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWVsZHM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmF4aXNvcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLmF4aXNvcHRpb25zID0gZmllbGRzO1xuICAgICAgICB9XG4gICAgICAgIGxldCBuZXdPcHRpb25zO1xuICAgICAgICBzd2l0Y2ggKHByb3ApIHtcbiAgICAgICAgICAgIGNhc2UgJ3hheGlzZGF0YWtleSc6XG4gICAgICAgICAgICAgICAgLy8gSWYgZ3JvdXAgYnkgZW5hYmxlZCwgY29sdW1ucyBjaG9zZW4gaW4gZ3JvdXBieSB3aWxsIGJlIHBvcHVsYXRlZCBpbiB4IGF4aXMgb3B0aW9uc1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzR3JvdXBCeUVuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICBuZXdPcHRpb25zID0gZ3JvdXBCeUNvbHVtbnM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAneWF4aXNkYXRha2V5JzpcbiAgICAgICAgICAgICAgICAvLyBJZiBhZ2dyZWdhdGlvbiBieSBlbmFibGVkLCBjb2x1bW5zIGNob3NlbiBpbiBhZ2dyZWdhdGlvbiB3aWxsIGJlIHBvcHVsYXRlZCBpbiB5IGF4aXMgb3B0aW9uc1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzQWdncmVnYXRpb25FbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3T3B0aW9ucyA9IGFnZ0NvbHVtbnM7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzTGl2ZVZhcmlhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEluIGNhc2Ugb2YgbGl2ZSB2YXJpYWJsZSBwb3B1bGF0aW5nIG9ubHkgbnVtZXJpYyBjb2x1bW5zXG4gICAgICAgICAgICAgICAgICAgIG5ld09wdGlvbnMgPSB0aGlzLm51bWVyaWNDb2x1bW5zO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2dyb3VwYnknOlxuICAgICAgICAgICAgICAgIC8vIEZpbHRlcmluZyBvbmx5IG5vbiBwcmltYXJ5IGtleSBjb2x1bW5zXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNMaXZlVmFyaWFibGUgJiYgdGhpcy5ub25QcmltYXJ5Q29sdW1ucyAmJiB0aGlzLm5vblByaW1hcnlDb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBuZXdPcHRpb25zID0gdGhpcy5ub25QcmltYXJ5Q29sdW1ucztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdhZ2dyZWdhdGlvbmNvbHVtbic6XG4gICAgICAgICAgICAgICAgLy8gU2V0IHRoZSAnYWdncmVnYXRpb25Db2x1bW4nIHRvIHNob3cgYWxsIGtleXMgaW4gY2FzZSBvZiBhZ2dyZWdhdGlvbiBmdW5jdGlvbiBpcyBjb3VudCBvciB0byBudW1lcmljIGtleXMgaW4gYWxsIG90aGVyIGNhc2VzLlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzTGl2ZVZhcmlhYmxlICYmIHRoaXMuaXNBZ2dyZWdhdGlvbkVuYWJsZWQoKSAmJiB0aGlzLmFnZ3JlZ2F0aW9uICE9PSAnY291bnQnKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld09wdGlvbnMgPSB0aGlzLm51bWVyaWNDb2x1bW5zO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ29yZGVyYnknOlxuICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgJ2FnZ3JlZ2F0aW9uQ29sdW1uJyB0byBzaG93IGFsbCBrZXlzIGluIGNhc2Ugb2YgYWdncmVnYXRpb24gZnVuY3Rpb24gaXMgY291bnQgb3IgdG8gbnVtZXJpYyBrZXlzIGluIGFsbCBvdGhlciBjYXNlcy5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0xpdmVWYXJpYWJsZSAmJiB0aGlzLmlzQWdncmVnYXRpb25FbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3T3B0aW9ucyA9IF8udW5pcShfLmNvbmNhdChncm91cEJ5Q29sdW1ucywgYWdnQ29sdW1ucykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2J1YmJsZXNpemUnOlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm51bWVyaWNDb2x1bW5zICYmIHRoaXMubnVtZXJpY0NvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld09wdGlvbnMgPSB0aGlzLm51bWVyaWNDb2x1bW5zO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXdPcHRpb25zIHx8IGZpZWxkcyB8fCB0aGlzLmF4aXNvcHRpb25zO1xuICAgIH1cblxuICAgIC8vIEZ1bmN0aW9uIHRoYXQgaXRlcmF0ZXMgdGhyb3VnaCBhbGwgdGhlIGNvbHVtbnMgYW5kIHRoZW4gZmV0Y2hpbmcgdGhlIG51bWVyaWMgYW5kIG5vbiBwcmltYXJ5IGNvbHVtbnMgYW1vbmcgdGhlbVxuICAgIHNldE51bWVyaWNhbmROb25QcmltYXJ5Q29sdW1ucygpIHtcbiAgICAgICAgbGV0IGNvbHVtbnMsXG4gICAgICAgICAgICB0eXBlO1xuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzTWFwID0gdGhpcy5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uR0VUX1BST1BFUlRJRVNfTUFQKTtcbiAgICAgICAgdGhpcy5udW1lcmljQ29sdW1ucyA9IFtdO1xuICAgICAgICB0aGlzLm5vblByaW1hcnlDb2x1bW5zID0gW107XG4gICAgICAgIC8vIEZldGNoaW5nIGFsbCB0aGUgY29sdW1uc1xuICAgICAgICBpZiAodGhpcy5kYXRhc2V0ICYmICFfLmlzRW1wdHkocHJvcGVydGllc01hcCkpIHtcbiAgICAgICAgICAgIGNvbHVtbnMgPSBbXTsgLy8gVE9ETzogZmV0Y2hQcm9wZXJ0aWVzTWFwQ29sdW1ucyhwcm9wZXJ0aWVzTWFwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb2x1bW5zKSB7XG4gICAgICAgICAgICAvLyBJdGVyYXRpbmcgdGhyb3VnaCBhbGwgdGhlIGNvbHVtbnMgYW5kIGZldGNoaW5nIHRoZSBudW1lcmljIGFuZCBub24gcHJpbWFyeSBrZXkgY29sdW1uc1xuICAgICAgICAgICAgXy5mb3JFYWNoKE9iamVjdC5rZXlzKGNvbHVtbnMpLCAoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgdHlwZSA9IGNvbHVtbnNba2V5XS50eXBlO1xuICAgICAgICAgICAgICAgIGlmIChpc051bWJlclR5cGUodHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5udW1lcmljQ29sdW1ucy5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEhpZGluZyBvbmx5IHRhYmxlJ3MgcHJpbWFyeSBrZXlcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uc1trZXldLmlzUmVsYXRlZFBrID09PSAndHJ1ZScgfHwgIWNvbHVtbnNba2V5XS5pc1ByaW1hcnlLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub25QcmltYXJ5Q29sdW1ucy5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLm51bWVyaWNDb2x1bW5zID0gdGhpcy5udW1lcmljQ29sdW1ucy5zb3J0KCk7XG4gICAgICAgICAgICB0aGlzLm5vblByaW1hcnlDb2x1bW5zID0gdGhpcy5ub25QcmltYXJ5Q29sdW1ucy5zb3J0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBwbG90IHRoZSBjaGFydFxuICAgIGhhbmRsZURhdGFTZXQobmV3VmFsKSB7XG4gICAgICAgIHRoaXMuZXJyTXNnID0gJyc7XG4gICAgICAgIC8vIFJlc2V0dGluZyB0aGUgZmxhZyB0byBmYWxzZSB3aGVuIHRoZSBiaW5kaW5nIHdhcyByZW1vdmVkXG4gICAgICAgIGlmICghbmV3VmFsICYmICF0aGlzLmJpbmRkYXRhc2V0KSB7XG4gICAgICAgICAgICB0aGlzLmlzVmlzdWFsbHlHcm91cGVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmF4aXNvcHRpb25zID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGxpdmVWYXJpYWJsZXMgY29udGFpbiBkYXRhIGluICdkYXRhJyBwcm9wZXJ0eScgb2YgdGhlIHZhcmlhYmxlXG4gICAgICAgIHRoaXMuY2hhcnREYXRhID0gdGhpcy5pc0xpdmVWYXJpYWJsZSA/IG5ld1ZhbCB8fCAnJyA6IChuZXdWYWwgJiYgbmV3VmFsLmRhdGFWYWx1ZSA9PT0gJycgJiYgXy5rZXlzKG5ld1ZhbCkubGVuZ3RoID09PSAxKSA/ICcnIDogbmV3VmFsO1xuXG4gICAgICAgIC8vIGlmIHRoZSBkYXRhIHJldHVybmVkIGlzIGFuIG9iamVjdCBtYWtlIGl0IGFuIGFycmF5IG9mIG9iamVjdFxuICAgICAgICBpZiAoIV8uaXNBcnJheSh0aGlzLmNoYXJ0RGF0YSkgJiYgXy5pc09iamVjdCh0aGlzLmNoYXJ0RGF0YSkpIHtcbiAgICAgICAgICAgIHRoaXMuY2hhcnREYXRhID0gW3RoaXMuY2hhcnREYXRhXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXdWYWwgJiYgbmV3VmFsLmZpbHRlckZpZWxkcykge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJGaWVsZHMgPSBuZXdWYWwuZmlsdGVyRmllbGRzO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcGxvdGNoYXJ0IGZvciBvbmx5IHZhbGlkIGRhdGEgYW5kIG9ubHkgYWZ0ZXIgYm91bmQgdmFyaWFibGUgcmV0dXJucyBkYXRhXG4gICAgICAgIGlmICh0aGlzLmNoYXJ0RGF0YSkge1xuICAgICAgICAgICAgdGhpcy5fcGxvdENoYXJ0UHJveHkoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9wbG90Q2hhcnRQcm94eSA9IF8uZGVib3VuY2UodGhpcy5wbG90Q2hhcnRQcm94eS5iaW5kKHRoaXMpLCAxMDApO1xuXG4gICAgLy8gc2V0cyB0aGUgY2VudGVyIGxhYmVsIGZvciBkb251dCBjaGFydCB0eXBlXG4gICAgc2V0RG9udXRDZW50ZXJMYWJlbChsYWJlbFZhbHVlKSB7XG4gICAgICAgIGxldCBjaGFydFN2ZywgcGllR3JvdXBzO1xuICAgICAgICBjaGFydFN2ZyA9IGQzLnNlbGVjdCgnI3dtQ2hhcnQnICsgdGhpcy4kaWQgKyAnIHN2ZycpO1xuXG4gICAgICAgIHBpZUdyb3VwcyA9IGNoYXJ0U3ZnLnNlbGVjdCgnLm52LXdyYXAubnYtcGllJykuc2VsZWN0KCcubnYtcGllJyk7XG4gICAgICAgIHBpZUdyb3Vwcy50ZXh0KCcnKTtcbiAgICAgICAgcGllR3JvdXBzLmFwcGVuZCgndGV4dCcpXG4gICAgICAgICAgICAuYXR0cignZHknLCAnLjM1ZW0nKVxuICAgICAgICAgICAgLmF0dHIoJ3RleHQtYW5jaG9yJywgJ21pZGRsZScpXG4gICAgICAgICAgICAuYXR0cignY2xhc3MnLCAnbnYtcGllLXRpdGxlJylcbiAgICAgICAgICAgIC50ZXh0KGxhYmVsVmFsdWUpXG4gICAgICAgICAgICAuZWFjaChmdW5jdGlvbiAoZCkge1xuICAgICAgICAgICAgICAgIHZhciBkM3RleHQgPSBkMy5zZWxlY3QodGhpcyksXG4gICAgICAgICAgICAgICAgY2lyYyA9IGQzLnNlbGVjdCh0aGlzLnBhcmVudEVsZW1lbnQpLFxuICAgICAgICAgICAgICAgIHRvdGFsV2lkdGggPSBOdW1iZXIoY2lyYy5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpLFxuICAgICAgICAgICAgICAgIC8vIG1pbnVzIHRoZSByaW5nIHdpZHRoIGZyb20gdG90YWwgd2lkdGhcbiAgICAgICAgICAgICAgICBhdmFpbFdpZHRoID0gdG90YWxXaWR0aCAtIDMwLFxuICAgICAgICAgICAgICAgIHRleHRXaWR0aCA9IHRoaXMuZ2V0Q29tcHV0ZWRUZXh0TGVuZ3RoKCk7XG4gICAgICAgICAgICAgICAgZDN0ZXh0LmF0dHIoXCJkYXRhLXNjYWxlXCIsIGF2YWlsV2lkdGggLyB0ZXh0V2lkdGgpO1xuICAgICAgICAgICAgICB9KS5zdHlsZShcImZvbnQtc2l6ZVwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAvLyAxNiBpcyB0aGUgZGVmYXVsdCBmb250IHNpemUgdG8gbXVsdGlwbHkgd2l0aCB0aGUgc2NhbGVkIHZhbHVlIGFuZCAyNCBpcyB0aGUgbWF4aW11bSBmb250IHNpemUgdGhhdCBjYW4gYmUgYXBwbGllZFxuICAgICAgICAgICAgICAgIHZhciBmb250U2l6ZSA9IDE2ICogZDMuc2VsZWN0KHRoaXMpLmF0dHIoXCJkYXRhLXNjYWxlXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmb250U2l6ZSA+IDI0ID8gMjQgOiBmb250U2l6ZSArIFwicHhcIjtcbiAgICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25Qcm9wZXJ0eUNoYW5nZShrZXksIG5ld1ZhbCwgb2xkVmFsPykge1xuICAgICAgICBzdXBlci5vblByb3BlcnR5Q2hhbmdlKGtleSwgbmV3VmFsLCBvbGRWYWwpO1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAnZGF0YXNldCc6XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVEYXRhU2V0KG5ld1ZhbCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdjZW50ZXJsYWJlbCc6XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFydC50aXRsZShuZXdWYWwpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldERvbnV0Q2VudGVyTGFiZWwobmV3VmFsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd0eXBlJzpcbiAgICAgICAgICAgICAgICAvLyBCYXNlZCBvbiB0aGUgY2hhbmdlIGluIHR5cGUgZGVjaWRpbmcgdGhlIGRlZmF1bHQgbWFyZ2luc1xuICAgICAgICAgICAgICAgIGlmIChpc1BpZVR5cGUodGhpcy50eXBlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9mZnNldHRvcCA9IDIwO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9mZnNldHJpZ2h0ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vZmZzZXRib3R0b20gPSAwO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9mZnNldGxlZnQgPSAwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob2xkVmFsID09PSAnUGllJyB8fCBvbGRWYWwgPT09ICdEb251dCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vZmZzZXR0b3AgPSAyNTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vZmZzZXRyaWdodCA9IDI1O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9mZnNldGJvdHRvbSA9IDU1O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9mZnNldGxlZnQgPSA3NTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAob2xkVmFsICE9PSBuZXdWYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGVhckNhbnZhcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEluIHN0dWRpbyBtb2RlLCBjb25maWd1cmUgcHJvcGVydGllcyBkZXBlbmRlbnQgb24gY2hhcnQgdHlwZVxuICAgICAgICAgICAgICAgIHRoaXMuX3Bsb3RDaGFydFByb3h5KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIC8vIEluIFJ1bk1vZGUsIHRoZSBwbG90Y2hhcnQgbWV0aG9kIHdpbGwgbm90IGJlIGNhbGxlZCBmb3IgYWxsIHByb3BlcnR5IGNoYW5nZVxuICAgICAgICAgICAgICAgIHRoaXMuX3Bsb3RDaGFydFByb3h5KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKF8uaW5jbHVkZXMoYWR2YW5jZURhdGFQcm9wcywga2V5KSkge1xuICAgICAgICAgICAgdGhpcy5fcGxvdENoYXJ0UHJveHkoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZUxvYWRpbmcoZGF0YSkge1xuICAgICAgICBjb25zdCBkYXRhU291cmNlID0gdGhpcy5kYXRhc291cmNlO1xuICAgICAgICBpZiAoZGF0YVNvdXJjZSAmJiBkYXRhU291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uSVNfQVBJX0FXQVJFKSAmJiBpc0RhdGFTb3VyY2VFcXVhbChkYXRhLnZhcmlhYmxlLCBkYXRhU291cmNlKSkge1xuICAgICAgICAgICAgdGhpcy52YXJpYWJsZUluZmxpZ2h0ID0gZGF0YS5hY3RpdmU7XG4gICAgICAgICAgICB0aGlzLmlzTG9hZEluUHJvZ3Jlc3MgPSBkYXRhLmFjdGl2ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhpZGVUb29sdGlwKCkge1xuICAgICAgICBkMy5zZWxlY3RBbGwoJy5udnRvb2x0aXAnKS5zdHlsZSgnb3BhY2l0eScsIDApO1xuICAgIH1cblxuICAgIG9uU3R5bGVDaGFuZ2Uoa2V5LCBuZXdWYWwsIG9sZFZhbCkge1xuICAgICAgICBjb25zdCBzdHlsZU9iaiA9IHt9O1xuICAgICAgICBzdXBlci5vblN0eWxlQ2hhbmdlKGtleSwgbmV3VmFsLCBvbGRWYWwpO1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAnZm9udHNpemUnOlxuICAgICAgICAgICAgY2FzZSAnZm9udHVuaXQnOlxuICAgICAgICAgICAgY2FzZSAnY29sb3InOlxuICAgICAgICAgICAgY2FzZSAnZm9udGZhbWlseSc6XG4gICAgICAgICAgICBjYXNlICdmb250d2VpZ2h0JzpcbiAgICAgICAgICAgIGNhc2UgJ2ZvbnRzdHlsZSc6XG4gICAgICAgICAgICBjYXNlICd0ZXh0ZGVjb3JhdGlvbic6XG4gICAgICAgICAgICAgICAgc3R5bGVPYmpbc3R5bGVQcm9wc1trZXldXSA9IChrZXkgPT09ICdmb250c2l6ZScgfHwga2V5ID09PSAnZm9udHVuaXQnKSA/IHRoaXMuZm9udHNpemUgKyB0aGlzLmZvbnR1bml0IDogbmV3VmFsO1xuICAgICAgICAgICAgICAgIHNldFRleHRTdHlsZShzdHlsZU9iaiwgdGhpcy4kaWQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoaW5qOiBJbmplY3RvciwgcHJpdmF0ZSBhcHA6IEFwcCkge1xuICAgICAgICBzdXBlcihpbmosIFdJREdFVF9DT05GSUcpO1xuICAgICAgICBzdHlsZXIodGhpcy5uYXRpdmVFbGVtZW50LCB0aGlzLCBBUFBMWV9TVFlMRVNfVFlQRS5DT05UQUlORVIsIFsnZm9udHNpemUnLCAnZm9udHVuaXQnLCAnY29sb3InLCAnZm9udGZhbWlseScsICdmb250d2VpZ2h0JywgJ2ZvbnRzdHlsZScsICd0ZXh0ZGVjb3JhdGlvbiddKTtcblxuICAgICAgICAvLyBnZW5lcmF0ZSB1bmlxdWUgaWQgZm9yIHRoZSBjb21wb25lbnRcbiAgICAgICAgdGhpcy4kaWQgPSB0aGlzLndpZGdldElkIHx8IE1hdGgucmFuZG9tKCk7XG4gICAgICAgIC8vIHJlbW92ZSB0aXRsZSBhdHRyaWJ1dGUgYXMgdGhlIGVsZW1lbnQgb24gaG92ZXIgc2hvd3MgeW91IHRoZSBoaW50IHRocm91Z2gtb3V0IHRoZSBlbGVtZW50XG4gICAgICAgIHJlbW92ZUF0dHIodGhpcy5uYXRpdmVFbGVtZW50LCAndGl0bGUnKTtcbiAgICAgICAgdGhpcy5jaGFydFJlYWR5ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYmluZGRhdGFzZXQgPSB0aGlzLm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhc2V0LmJpbmQnKTtcbiAgICAgICAgLy8gU2hvdyBsb2FkaW5nIHN0YXR1cyBiYXNlZCBvbiB0aGUgdmFyaWFibGUgbGlmZSBjeWNsZVxuICAgICAgICB0aGlzLl9zdWJzY2lwdGlvbnMucHVzaCh0aGlzLmFwcC5zdWJzY3JpYmUoJ3RvZ2dsZS12YXJpYWJsZS1zdGF0ZScsIHRoaXMuaGFuZGxlTG9hZGluZy5iaW5kKHRoaXMpKSk7XG4gICAgICAgIC8vIFdpbGwgaGlkZSB0b2xsdGlwIG9mIGEgY2hhcnQgaW4gbW9iaWxlIHdoZW4gdGhlIHVzZXIgc2Nyb2xscy5cbiAgICAgICAgdGhpcy5fc3Vic2NpcHRpb25zLnB1c2godGhpcy5hcHAuc3Vic2NyaWJlKCdpc2Nyb2xsLXN0YXJ0JywgKCkgPT4ge3RoaXMuaGlkZVRvb2x0aXAoKTt9KSk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICAgICAgLy8gRm9yIG9sZCBwcm9qZWN0c1xuICAgICAgICBpZiAoIV8uaW5jbHVkZXMoWydvdXRzaWRlJywgJ2luc2lkZScsICdoaWRlJ10sIHRoaXMuc2hvd2xhYmVscykpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd2xhYmVscyAgICAgICAgPSBnZXRCb29sZWFuVmFsdWUodGhpcy5zaG93bGFiZWxzKTtcbiAgICAgICAgICAgIHRoaXMuc2hvd2xhYmVsc291dHNpZGUgPSBnZXRCb29sZWFuVmFsdWUodGhpcy5zaG93bGFiZWxzb3V0c2lkZSk7XG4gICAgICAgICAgICB0aGlzLnNob3dsYWJlbHMgICAgICAgID0gdGhpcy5zaG93bGFiZWxzID8gKHRoaXMuc2hvd2xhYmVsc291dHNpZGUgPyAnb3V0c2lkZScgOiAnaW5zaWRlJykgOiAnaGlkZSc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMudGhlbWUpIHtcbiAgICAgICAgICAgIC8vIERlZmF1bHQgdGhlbWUgZm9yIHBpZS9kb251dCBpcyBBenVyZSBhbmQgZm9yIG90aGVyIGl0IGlzIFRlcnJlc3RyaWFsXG4gICAgICAgICAgICB0aGlzLnRoZW1lID0gaXNQaWVUeXBlKHRoaXMudHlwZSkgPyAnQXp1cmUnIDogJ1RlcnJlc3RyaWFsJztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2lkJywgJ3dtQ2hhcnQnICsgdGhpcy4kaWQpO1xuICAgICAgICAvLyBXaGVuIHRoZXJlIGlzIG5vdCB2YWx1ZSBiaW5kaW5nLCB0aGVuIHBsb3QgdGhlIGNoYXJ0IHdpdGggc2FtcGxlIGRhdGFcbiAgICAgICAgaWYgKCF0aGlzLmJpbmRkYXRhc2V0ICYmICF0aGlzLm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdzY29wZWRhdGFzZXQnKSkge1xuICAgICAgICAgICAgdGhpcy5fcGxvdENoYXJ0UHJveHkoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICAvLyBkZXN0cm95IGFsbCBzdWJzY3JpcHRpb25zIHRvIHByZXZlbnQgbWVtb3J5IGxlYWsuXG4gICAgICAgIHRoaXMuaGlkZVRvb2x0aXAoKTtcbiAgICAgICAgdGhpcy5fc3Vic2NpcHRpb25zLmZvckVhY2goKHN1YnNjcmlwdGlvbik9PntcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbigpO1xuICAgICAgICB9KTtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB9XG4gICAgcmVkcmF3ID0gdGhpcy5fcGxvdENoYXJ0UHJveHkuYmluZCh0aGlzKTtcbn1cbiIsIjxkaXYgY2xhc3M9XCJwYW5lbC1oZWFkaW5nXCIgKm5nSWY9XCJ0aXRsZVwiPlxuICAgIDxoMyBjbGFzcz1cInBhbmVsLXRpdGxlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwdWxsLWxlZnRcIj48aSBjbGFzcz1cImFwcC1pY29uIHBhbmVsLWljb24ge3tpY29uY2xhc3N9fVwiIFtjbGFzcy5uZy1oaWRlXT1cIiFpY29uY2xhc3NcIj48L2k+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkaW5nXCIgW2lubmVySFRNTF09XCJ0aXRsZVwiPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzY3JpcHRpb25cIiAqbmdJZj1cInN1YmhlYWRpbmdcIiBbaW5uZXJIVE1MXT1cInN1YmhlYWRpbmdcIj48L2Rpdj5cbiAgICA8L2gzPlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwiYXBwLWNoYXJ0LWlubmVyXCIgW25nQ2xhc3NdPVwieydsb2FkaW5nJzppc0xvYWRJblByb2dyZXNzLCAncGFuZWwtYm9keSc6IHRpdGxlfVwiPlxuICAgIDxzdmc+PC9zdmc+XG4gICAgPGRpdiBjbGFzcz1cIndtLWNvbnRlbnQtaW5mbyByZWFkb25seS13cmFwcGVyXCIgKm5nSWY9XCJzaG93Q29udGVudExvYWRFcnJvciAmJiBzaG93Tm9EYXRhTXNnXCI+XG4gICAgICAgIDxwIGNsYXNzPVwid20tbWVzc2FnZVwiIFt0aXRsZV09XCJoaW50TXNnXCIgW25nQ2xhc3NdPVwieydlcnJvcic6IGludmFsaWRDb25maWd9XCIgW2lubmVyVGV4dF09XCJlcnJNc2dcIj48L3A+XG4gICAgPC9kaXY+XG4gICAgPGRpdiB3bVNwaW5uZXIgc2hvdy5iaW5kPVwiaXNMb2FkSW5Qcm9ncmVzc1wiIGNhcHRpb24uYmluZD1cImxvYWRpbmdkYXRhbXNnXCI+PC9kaXY+XG48L2Rpdj5cbiJdfQ==
1000
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy93aWRnZXRzL2NoYXJ0L3NyYy9jaGFydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvY2hhcnQvc3JjL2NoYXJ0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBMkIsU0FBUyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQVcsTUFBTSxlQUFlLENBQUM7QUFFdEgsT0FBTyxFQUNILEdBQUcsRUFDSCxVQUFVLEVBQ1YsZUFBZSxFQUNmLGlCQUFpQixFQUNqQixhQUFhLEVBQ2IsWUFBWSxFQUNaLGNBQWMsRUFDZCxVQUFVLEVBQ1YsU0FBUyxFQUdaLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSxpQkFBaUIsRUFBd0Isa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxHQUFJLE1BQU0scUJBQXFCLENBQUM7QUFFL0gsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5QyxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7O0lDZHpOLHlCQUEyRTs7O0lBQS9CLGdFQUF3Qjs7O0lBSjVFLDhCQUF5QyxZQUFBLGFBQUE7SUFFVixvQkFBOEU7SUFBQSxpQkFBTTtJQUMzRyx5QkFBK0M7SUFDL0MscUVBQTJFO0lBQy9FLGlCQUFLLEVBQUE7OztJQUh5QixlQUF5QztJQUF6Qyx1RUFBeUM7SUFBQyw0Q0FBNEI7SUFDM0UsZUFBbUI7SUFB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QUMsSUFBSTs2RUFxRFQsS0FBSztrQkFBaEMsV0FBVzttQkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIENvbXBvbmVudCwgSG9zdEJpbmRpbmcsIEluamVjdG9yLCBWaWV3RW5jYXBzdWxhdGlvbiwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1xuICAgIEFwcCxcbiAgICBEYXRhU291cmNlLFxuICAgIGdldENsb25lZE9iamVjdCxcbiAgICBpc0RhdGFTb3VyY2VFcXVhbCxcbiAgICBpc0VtcHR5T2JqZWN0LFxuICAgIGlzTnVtYmVyVHlwZSxcbiAgICBwcmV0dGlmeUxhYmVscyxcbiAgICByZW1vdmVBdHRyLFxuICAgIHRyaWdnZXJGbixcbiAgICBpc01vYmlsZUFwcCxcbiAgICBub29wXG59IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7IEFQUExZX1NUWUxFU19UWVBFLCBJUmVkcmF3YWJsZUNvbXBvbmVudCwgcHJvdmlkZUFzV2lkZ2V0UmVmLCBTdHlsYWJsZUNvbXBvbmVudCwgc3R5bGVyLCAgfSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNlJztcblxuaW1wb3J0IHsgcmVnaXN0ZXJQcm9wcyB9IGZyb20gJy4vY2hhcnQucHJvcHMnO1xuaW1wb3J0IHsgYWxsU2hhcGVzLCBnZXREYXRlTGlzdCwgZ2V0U2FtcGxlRGF0YSwgaW5pdENoYXJ0LCBpc0FyZWFDaGFydCwgaXNBeGlzRG9tYWluVmFsaWQsIGlzQmFyQ2hhcnQsIGlzQnViYmxlQ2hhcnQsIGlzQ2hhcnREYXRhQXJyYXksIGlzQ2hhcnREYXRhSlNPTiwgaXNMaW5lVHlwZUNoYXJ0LCBpc1BpZVR5cGUsIHBvc3RQbG90Q2hhcnRQcm9jZXNzIH0gZnJvbSAnLi9jaGFydC51dGlscyc7XG5cbmRlY2xhcmUgY29uc3QgJCwgXywgZDMsIG52O1xuXG5jb25zdCBXSURHRVRfQ09ORklHID0ge3dpZGdldFR5cGU6ICd3bS1jaGFydCcsIGhvc3RDbGFzczogJ2FwcC1jaGFydCd9O1xuXG5jb25zdCBvcHRpb25zID0ge1xuICAgICAgICAnQnViYmxlJyA6IFsnYnViYmxlc2l6ZScsICdzaGFwZSddXG4gICAgfSxcbiAgICBOT05FID0gJ25vbmUnLFxuICAgIGFkdmFuY2VEYXRhUHJvcHMgPSBbJ2FnZ3JlZ2F0aW9uJywgJ2FnZ3JlZ2F0aW9uY29sdW1uJywgJ2dyb3VwYnknLCAnb3JkZXJieSddLFxuICAgIC8vIFhQYXRocyB0byBnZXQgYWN0dWFsIGRhdGEgb2YgZGF0YSBwb2ludHMgaW4gY2hhcnRzXG4gICAgY2hhcnREYXRhUG9pbnRYcGF0aCA9IHtcbiAgICAgICAgJ0NvbHVtbicgICAgICAgICA6ICdyZWN0Lm52LWJhcicsXG4gICAgICAgICdCYXInICAgICAgICAgICAgOiAnZy5udi1iYXInLFxuICAgICAgICAnQXJlYScgICAgICAgICAgIDogJy5udi1zdGFja2VkYXJlYSAubnYtcG9pbnQnLFxuICAgICAgICAnQ3VtdWxhdGl2ZSBMaW5lJzogJy5udi1jdW11bGF0aXZlTGluZSAubnYtc2NhdHRlcldyYXAgcGF0aC5udi1wb2ludCcsXG4gICAgICAgICdMaW5lJyAgICAgICAgICAgOiAnLm52LWxpbmVDaGFydCAubnYtc2NhdHRlcldyYXAgcGF0aC5udi1wb2ludCcsXG4gICAgICAgICdQaWUnICAgICAgICAgICAgOiAnLm52LXBpZUNoYXJ0IC5udi1zbGljZSBwYXRoJyxcbiAgICAgICAgJ0RvbnV0JyAgICAgICAgICA6ICcubnYtcGllQ2hhcnQgLm52LXNsaWNlIHBhdGgnLFxuICAgICAgICAnQnViYmxlJyAgICAgICAgIDogJy5udi1zY2F0dGVyQ2hhcnQgLm52LXBvaW50LXBhdGhzIHBhdGgnXG4gICAgfSxcbiAgICAvLyBhbGwgcHJvcGVydGllcyBvZiB0aGUgY2hhcnRcbiAgICBhbGxPcHRpb25zID0gWydidWJibGVzaXplJywgJ3NoYXBlJ10sXG4gICAgc3R5bGVQcm9wcyA9IHtcbiAgICAgICAgJ2ZvbnR1bml0JyAgICAgIDogJ2ZvbnQtc2l6ZScsXG4gICAgICAgICdmb250c2l6ZScgICAgICA6ICdmb250LXNpemUnLFxuICAgICAgICAnY29sb3InICAgICAgICAgOiAnZmlsbCcsXG4gICAgICAgICdmb250ZmFtaWx5JyAgICA6ICdmb250LWZhbWlseScsXG4gICAgICAgICdmb250d2VpZ2h0JyAgICA6ICdmb250LXdlaWdodCcsXG4gICAgICAgICdmb250c3R5bGUnICAgICA6ICdmb250LXN0eWxlJyxcbiAgICAgICAgJ3RleHRkZWNvcmF0aW9uJzogJ3RleHQtZGVjb3JhdGlvbidcbiAgICB9LFxuICAgIC8vIEdldHRpbmcgdGhlIHJlbGV2YW50IGFnZ3JlZ2F0aW9uIGZ1bmN0aW9uIGJhc2VkIG9uIHRoZSBzZWxlY3RlZCBvcHRpb25cbiAgICBhZ2dyZWdhdGlvbkZuTWFwID0ge1xuICAgICAgICAnYXZlcmFnZScgOiAnQVZHJyxcbiAgICAgICAgJ2NvdW50JyAgIDogJ0NPVU5UJyxcbiAgICAgICAgJ21heGltdW0nIDogJ01BWCcsXG4gICAgICAgICdtaW5pbXVtJyA6ICdNSU4nLFxuICAgICAgICAnc3VtJyAgICAgOiAnU1VNJ1xuICAgIH07XG5cbmNvbnN0IGdldEJvb2xlYW5WYWx1ZSA9IHZhbCA9PiB7XG4gICAgaWYgKHZhbCA9PT0gdHJ1ZSB8fCB2YWwgPT09ICd0cnVlJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHZhbCA9PT0gZmFsc2UgfHwgdmFsID09PSAnZmFsc2UnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbDtcbn07XG5cbi8vIHJldHVybnMgb3JkZXJieSBjb2x1bW5zIGFuZCB0aGVpciBvcmRlcnMgaW4gdHdvIHNlcGFyYXRlIGFycmF5c1xuY29uc3QgZ2V0TG9kYXNoT3JkZXJCeUZvcm1hdCA9IG9yZGVyYnkgPT4ge1xuICAgIGxldCBjb2x1bW5zO1xuICAgIGNvbnN0IG9yZGVyQnlDb2x1bW5zID0gW10sXG4gICAgICAgIG9yZGVycyA9IFtdO1xuXG4gICAgXy5mb3JFYWNoKF8uc3BsaXQob3JkZXJieSwgJywnKSwgZnVuY3Rpb24gKGNvbCkge1xuICAgICAgICBjb2x1bW5zID0gXy5zcGxpdChjb2wsICc6Jyk7XG4gICAgICAgIG9yZGVyQnlDb2x1bW5zLnB1c2goY29sdW1uc1swXSk7XG4gICAgICAgIG9yZGVycy5wdXNoKGNvbHVtbnNbMV0pO1xuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICAgICdjb2x1bW5zJyA6IG9yZGVyQnlDb2x1bW5zLFxuICAgICAgICAnb3JkZXJzJyAgOiBvcmRlcnNcbiAgICB9O1xufTtcblxuLy8gUmVwbGFjaW5nIHRoZSAnLicgYnkgdGhlICckJyBiZWNhdXNlICcuJyBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBhbGlhcyBuYW1lc1xuY29uc3QgZ2V0VmFsaWRBbGlhc05hbWUgPSBhbGlhc05hbWUgPT4gYWxpYXNOYW1lID8gYWxpYXNOYW1lLnJlcGxhY2UoL1xcLi9nLCAnJCcpIDogbnVsbDtcblxuLy8gQXBwbHlpbmcgdGhlIGZvbnQgcmVsYXRlZCBzdHlsZXMgZm9yIHRoZSBjaGFydFxuY29uc3Qgc2V0VGV4dFN0eWxlID0gKHByb3BlcnRpZXMsIGlkKSA9PiB7XG4gICAgY29uc3QgY2hhcnR0ZXh0ID0gZDMuc2VsZWN0KCcjd21DaGFydCcgKyBpZCArICcgc3ZnJykuc2VsZWN0QWxsKCd0ZXh0Jyk7XG4gICAgY2hhcnR0ZXh0LnN0eWxlKHByb3BlcnRpZXMpO1xufTtcblxuY29uc3QgYW5nbGUgPSBkID0+IHtcbiAgICBjb25zdCBhID0gKGQuc3RhcnRBbmdsZSArIGQuZW5kQW5nbGUpICogOTAgLyBNYXRoLlBJIC0gOTA7XG4gICAgcmV0dXJuIGEgPiA5MCA/IGEgLSAxODAgOiBhO1xufTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdkaXZbd21DaGFydF0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jaGFydC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9Ad2F2ZW1ha2VyLmNvbS9udmQzL2J1aWxkL252LmQzLm1pbi5jc3MnXSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgcHJvdmlkZUFzV2lkZ2V0UmVmKENoYXJ0Q29tcG9uZW50KVxuICAgIF0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBDaGFydENvbXBvbmVudCBleHRlbmRzIFN0eWxhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBJUmVkcmF3YWJsZUNvbXBvbmVudCB7XG4gICAgc3RhdGljIGluaXRpYWxpemVQcm9wcyA9IHJlZ2lzdGVyUHJvcHMoKTtcblxuICAgIHhheGlzZGF0YWtleTtcbiAgICB5YXhpc2RhdGFrZXk7XG4gICAgZ3JvdXBieTtcbiAgICBhZ2dyZWdhdGlvbjtcbiAgICBhZ2dyZWdhdGlvbmNvbHVtbjtcbiAgICBpc1Zpc3VhbGx5R3JvdXBlZDtcbiAgICBvcmRlcmJ5O1xuICAgIGljb25jbGFzcyA9ICcnO1xuICAgIHR5cGU6IHN0cmluZztcbiAgICBzaG93Q29udGVudExvYWRFcnJvcjtcbiAgICBpbnZhbGlkQ29uZmlnO1xuICAgIGVyck1zZztcbiAgICBzaGFwZTogc3RyaW5nO1xuICAgIGRhdGFzb3VyY2U6IGFueTtcbiAgICBmb250c2l6ZTogc3RyaW5nO1xuICAgIHNlbGVjdGVkaXRlbTogYW55O1xuICAgIGZvbnR1bml0OiBzdHJpbmc7XG4gICAgb2Zmc2V0dG9wOiBudW1iZXI7XG4gICAgb2Zmc2V0bGVmdDogbnVtYmVyO1xuICAgIG9mZnNldHJpZ2h0OiBudW1iZXI7XG4gICAgb2Zmc2V0Ym90dG9tOiBudW1iZXI7XG4gICAgc2hvd2xhYmVsczogYW55O1xuICAgIHRoZW1lOiBzdHJpbmc7XG5cbiAgICBwcml2YXRlICRpZDtcbiAgICBwcml2YXRlIHNjb3BlZGF0YXNldDogYW55O1xuICAgIHByaXZhdGUgYmluZGRhdGFzZXQ6IGFueTtcbiAgICBwcml2YXRlIHNob3dsYWJlbHNvdXRzaWRlOiBhbnk7XG4gICAgcHJpdmF0ZSBfcmVzaXplRm46IGFueTtcbiAgICBwcml2YXRlIGNoYXJ0OiBhbnk7XG4gICAgcHJpdmF0ZSBjbGVhckNhbnZhczogYm9vbGVhbjtcbiAgICBwdWJsaWMgaXNMb2FkSW5Qcm9ncmVzczogYm9vbGVhbjtcbiAgICBwcml2YXRlIGZpbHRlckZpZWxkczogYm9vbGVhbiB8IGFueTtcbiAgICBwcml2YXRlIGRhdGFzZXQ6IGFueTtcbiAgICBwcml2YXRlIGF4aXNvcHRpb25zOiBhbnk7XG4gICAgcHJpdmF0ZSBudW1lcmljQ29sdW1uczogYW55O1xuICAgIHByaXZhdGUgbm9uUHJpbWFyeUNvbHVtbnM6IGFueSA9IFtdO1xuICAgIHByaXZhdGUgdmFyaWFibGVJbmZsaWdodDogYW55O1xuICAgIHByaXZhdGUgY2hhcnRSZWFkeTogYm9vbGVhbjtcbiAgICBwcml2YXRlIHhEYXRhS2V5QXJyOiBhbnkgPSBbXTtcbiAgICBwcml2YXRlIHhBeGlzRGF0YVR5cGU6IHN0cmluZztcbiAgICBwcml2YXRlIGJ1YmJsZXNpemU6IGFueTtcbiAgICBwdWJsaWMgc2hvd05vRGF0YU1zZzogYW55O1xuICAgIHByaXZhdGUgc2FtcGxlRGF0YTogYW55W107XG4gICAgcHJpdmF0ZSBjaGFydERhdGE6IGFueVtdID0gW107XG4gICAgcHJpdmF0ZSBfcHJvY2Vzc2VkRGF0YTogYW55W10gPSBbXTtcbiAgICBwcml2YXRlIF9zdWJzY2lwdGlvbnM6IGFueSA9IFtdO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5wYW5lbCcpIHRpdGxlO1xuXG4gICAgaXNHcm91cEJ5RW5hYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuICEhKHRoaXMuZ3JvdXBieSAmJiB0aGlzLmdyb3VwYnkgIT09IE5PTkUpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHggYW5kIHkgYXhpcyB0aGF0IGFyZSBjaG9zZW4gYXJlIHZhbGlkIHRvIHBsb3QgY2hhcnRcbiAgICBpc1ZhbGlkQXhpcygpIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgeCBheGlzIGFuZCB5IGF4aXMgYXJlIGNob3NlbiBhbmQgYXJlIG5vdCBlcXVhbFxuICAgICAgICByZXR1cm4gdGhpcy5iaW5kZGF0YXNldCA/ICh0aGlzLnhheGlzZGF0YWtleSAmJiB0aGlzLnlheGlzZGF0YWtleSkgOiB0cnVlO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIGFnZ3JlZ2F0aW9uIGlzIGNob3NlblxuICAgIGlzQWdncmVnYXRpb25FbmFibGVkKCkge1xuICAgICAgICByZXR1cm4gISEoKHRoaXMuaXNHcm91cEJ5RW5hYmxlZCgpICYmIHRoaXMuYWdncmVnYXRpb24gIT09IE5PTkUgJiYgdGhpcy5hZ2dyZWdhdGlvbmNvbHVtbikpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIGVpdGhlciBncm91cGJ5LCBhZ2dyZWdhdGlvbiBvciBvcmRlcmJ5IGlzIGNob3NlblxuICAgIGlzRGF0YUZpbHRlcmluZ0VuYWJsZWQoKSB7XG4gICAgICAgIC8qUXVlcnkgbmVlZCB0byBiZSB0cmlnZ2VyZWQgaWYgYW55IG9mIHRoZSBmb2xsb3dpbmcgY2FzZXMgc2F0aXNmeVxuICAgICAgICAqIDEuIEdyb3VwIEJ5IGFuZCBhZ2dyZWdhdGlvbiBib3RoIGNob3NlblxuICAgICAgICAqIDIuIE9ubHkgT3JkZXIgQnkgaXMgY2hvc2VuXG4gICAgICAgICogKi9cblxuICAgICAgICByZXR1cm4gdGhpcy5pc0FnZ3JlZ2F0aW9uRW5hYmxlZCgpIHx8ICghdGhpcy5pc1Zpc3VhbGx5R3JvdXBlZCAmJiB0aGlzLm9yZGVyYnkpO1xuICAgIH1cblxuICAgIC8qQ2hhcnRzIGxpa2UgTGluZSxBcmVhLEN1bXVsYXRpdmUgTGluZSBkb2VzIG5vdCBzdXBwb3J0IGFueSBvdGhlciBkYXRhdHlwZVxuICAgICAgICBvdGhlciB0aGFuIGludGVnZXIgdW5saWtlIHRoZSBjb2x1bW4gYW5kIGJhci5JdCBpcyBhIG52ZDMgaXNzdWUuIElub3JkZXIgdG9cbiAgICAgICAgc3VwcG9ydCB0aGF0IHRoaXMgaXMgYSBmaXgqL1xuICAgIGdldHhBeGlzVmFsKGRhdGFPYmosIHhLZXksIGluZGV4KSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gXy5nZXQoZGF0YU9iaiwgeEtleSk7XG4gICAgICAgIC8vIElmIHggYXhpcyBpcyBvdGhlciB0aGFuIG51bWJlciB0eXBlIHRoZW4gYWRkIGluZGV4ZXNcbiAgICAgICAgaWYgKGlzTGluZVR5cGVDaGFydCh0aGlzLnR5cGUpICYmICFpc051bWJlclR5cGUodGhpcy54QXhpc0RhdGFUeXBlKSkge1xuICAgICAgICAgICAgLy8gVmVyaWZpY2F0aW9uIHRvIGdldCB0aGUgdW5pcXVlIGRhdGEga2V5c1xuICAgICAgICAgICAgdGhpcy54RGF0YUtleUFyci5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIGl0IGlzIG9mIHR5cGUgRGF0ZVxuICAgICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvLyBHZXR0aW5nIHRoZSBtaW4gYW5kIG1heCB2YWx1ZXMgYW1vbmcgYWxsIHRoZSB4IHZhbHVlc1xuICAgIGdldFhNaW5NYXhWYWx1ZXMoZGF0dW0pIHtcbiAgICAgICAgaWYgKCFkYXR1bSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHhWYWx1ZXM6IGFueSA9IHt9O1xuICAgICAgICAvKlxuICAgICAgICAgY29tcHV0ZSB0aGUgbWluIHggdmFsdWVcbiAgICAgICAgIGVnOiBXaGVuIGRhdGEgaGFzIG9iamVjdHNcbiAgICAgICAgICAgIGlucHV0OiBbe3g6MSwgeToyfSwge3g6MiwgeTozfSwge3g6MywgeTo0fV1cbiAgICAgICAgICAgIG1pbiB4OiAxXG4gICAgICAgICBlZzogV2hlbiBkYXRhIGhhcyBhcnJheXNcbiAgICAgICAgICAgIGlucHV0OiBbWzEwLCAyMF0sIFsyMCwgMzBdLCBbMzAsIDQwXV07XG4gICAgICAgICAgICBtaW4geDogMTBcbiAgICAgICAgKi9cbiAgICAgICAgeFZhbHVlcy5taW4gPSBfLm1pbkJ5KGRhdHVtLnZhbHVlcywgZGF0YU9iamVjdCA9PiBkYXRhT2JqZWN0LnggfHwgZGF0YU9iamVjdFswXSk7XG4gICAgICAgIC8qXG4gICAgICAgICBjb21wdXRlIHRoZSBtYXggeCB2YWx1ZVxuICAgICAgICAgZWc6IFdoZW4gZGF0YSBoYXMgb2JqZWN0c1xuICAgICAgICAgICAgaW5wdXQ6IFt7eDoxLCB5OjJ9LCB7eDoyLCB5OjN9LCB7eDozLCB5OjR9XVxuICAgICAgICAgICAgbWF4IHg6IDNcbiAgICAgICAgIGVnOiBXaGVuIGRhdGEgaGFzIGFycmF5c1xuICAgICAgICAgICAgaW5wdXQ6IFtbMTAsIDIwXSwgWzIwLCAzMF0sIFszMCwgNDBdXTtcbiAgICAgICAgICAgIG1heCB4OiAzMFxuICAgICAgICAgKi9cbiAgICAgICAgeFZhbHVlcy5tYXggPSBfLm1heEJ5KGRhdHVtLnZhbHVlcywgZGF0YU9iamVjdCA9PiBkYXRhT2JqZWN0LnggfHwgZGF0YU9iamVjdFswXSk7XG4gICAgICAgIHJldHVybiB4VmFsdWVzO1xuICAgIH1cblxuICAgIC8vIEdldHRpbmcgdGhlIG1pbiBhbmQgbWF4IHZhbHVlcyBhbW9uZyBhbGwgdGhlIHkgdmFsdWVzXG4gICAgZ2V0WU1pbk1heFZhbHVlcyhkYXR1bSkge1xuICAgICAgICBjb25zdCB5VmFsdWVzOiBhbnkgPSB7fSxcbiAgICAgICAgICAgIG1pblZhbHVlcyA9IFtdLFxuICAgICAgICAgICAgbWF4VmFsdWVzID0gW107XG4gICAgICAgIGlmICghZGF0dW0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qXG4gICAgICAgICBHZXR0aW5nIHRoZSBtaW4gYW5kIG1heCB5IHZhbHVlcyBhbW9uZyBhbGwgdGhlIHNlcmllcyBvZiBkYXRhXG4gICAgICAgICBjb21wdXRlIHRoZSBtaW4geSB2YWx1ZVxuICAgICAgICAgZWc6IFdoZW4gZGF0YSBoYXMgb2JqZWN0c1xuICAgICAgICAgICAgaW5wdXQ6IFtbe3g6MSwgeToyfSwge3g6MiwgeTozfSwge3g6MywgeTo0fV0sIFt7eDoyLCB5OjN9LCB7eDozLCB5OjR9LCB7eDo0LCB5OjV9XV1cbiAgICAgICAgICAgIG1pbiB5IHZhbHVlcyA6ICcyJyhhbW9uZyBmaXJzdCBzZXQpICYgJzMnKGFtb25nIHNlY29uZCBzZXQpXG4gICAgICAgICAgICBtYXggeSB2YWx1ZXMgOiAnNCcoYW1vbmcgZmlyc3Qgc2V0KSAmICc1JyhhbW9uZyBzZWNvbmQgc2V0KVxuXG4gICAgICAgICBlZzogV2hlbiBkYXRhIGhhcyBhcnJheXNcbiAgICAgICAgICAgIGlucHV0OiBbW1sxMCwgMjBdLCBbMjAsIDMwXSwgWzMwLCA0MF1dLCBbWzIwLCAzMF0sIFszMCwgNDBdLCBbNDAsIDUwXV1dXG4gICAgICAgICAgICBtaW4geSB2YWx1ZXMgOiAnMjAnKGFtb25nIGZpcnN0IHNldCkgJiAnMzAnKGFtb25nIHNlY29uZCBzZXQpXG4gICAgICAgICAgICBtYXggeSB2YWx1ZXMgOiAnNDAnKGFtb25nIGZpcnN0IHNldCkgJiAnNTAnKGFtb25nIHNlY29uZCBzZXQpXG4gICAgICAgICAqL1xuXG4gICAgICAgIF8uZm9yRWFjaChkYXR1bSwgZGF0YSA9PiB7XG4gICAgICAgICAgICBtaW5WYWx1ZXMucHVzaChfLm1pbkJ5KGRhdGEudmFsdWVzLCBmdW5jdGlvbiAoZGF0YU9iamVjdCkgeyByZXR1cm4gZGF0YU9iamVjdC55IHx8IGRhdGFPYmplY3RbMV07IH0pKTtcbiAgICAgICAgICAgIG1heFZhbHVlcy5wdXNoKF8ubWF4QnkoZGF0YS52YWx1ZXMsIGZ1bmN0aW9uIChkYXRhT2JqZWN0KSB7IHJldHVybiBkYXRhT2JqZWN0LnkgfHwgZGF0YU9iamVjdFsxXTsgfSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gR2V0cyB0aGUgbGVhc3QgYW5kIGhpZ2hlc3QgdmFsdWVzIGFtb25nIGFsbCB0aGUgbWluIGFuZCBtYXggdmFsdWVzIG9mIHJlc3BlY3RpdmUgc2VyaWVzIG9mIGRhdGFcbiAgICAgICAgeVZhbHVlcy5taW4gPSBfLm1pbkJ5KG1pblZhbHVlcywgZGF0YU9iamVjdCA9PiBkYXRhT2JqZWN0LnkgfHwgZGF0YU9iamVjdFsxXSk7XG4gICAgICAgIHlWYWx1ZXMubWF4ID0gXy5tYXhCeShtYXhWYWx1ZXMsIGRhdGFPYmplY3QgPT4gZGF0YU9iamVjdC55IHx8IGRhdGFPYmplY3RbMV0pO1xuICAgICAgICByZXR1cm4geVZhbHVlcztcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgeC1heGlzIHZhbHVlcyBhcmUgdW5kZWZpbmVkLCB3ZSByZXR1cm4gZW1wdHkgYXJyYXkgZWxzZSB3ZSByZXR1cm4gdGhlIHZhbHVlc1xuICAgIGdldFZhbGlkRGF0YSh2YWx1ZXMpIHtcbiAgICAgICAgcmV0dXJuICh2YWx1ZXMubGVuZ3RoID09PSAxICYmIHZhbHVlc1swXSA9PT0gdW5kZWZpbmVkKSA/IFtdIDogdmFsdWVzO1xuICAgIH1cblxuICAgIC8vIFJldHVybnMgdGhlIHNpbmdsZSBkYXRhIHBvaW50IGJhc2VkIG9uIHRoZSB0eXBlIG9mIHRoZSBkYXRhIGNoYXJ0IGFjY2VwdHNcbiAgICB2YWx1ZUZpbmRlcihkYXRhT2JqLCB4S2V5LCB5S2V5LCBpbmRleD8sIHNoYXBlPykge1xuICAgICAgICBjb25zdCB4VmFsID0gdGhpcy5nZXR4QXhpc1ZhbChkYXRhT2JqLCB4S2V5LCBpbmRleCksXG4gICAgICAgICAgICB2YWx1ZSA9IF8uZ2V0KGRhdGFPYmosIHlLZXkpLFxuICAgICAgICAgICAgeVZhbCA9IHBhcnNlRmxvYXQodmFsdWUpIHx8IHZhbHVlLFxuICAgICAgICAgICAgc2l6ZSA9IHBhcnNlRmxvYXQoZGF0YU9ialt0aGlzLmJ1YmJsZXNpemVdKSB8fCAyO1xuICAgICAgICBsZXQgZGF0YVBvaW50OiBhbnkgPSB7fTtcblxuICAgICAgICBpZiAoaXNDaGFydERhdGFKU09OKHRoaXMudHlwZSkpIHtcbiAgICAgICAgICAgIGRhdGFQb2ludC54ID0geFZhbDtcbiAgICAgICAgICAgIGRhdGFQb2ludC55ID0geVZhbDtcbiAgICAgICAgICAgIC8vIG9ubHkgQnViYmxlIGNoYXJ0IGhhcyB0aGUgdGhpcmQgZGltZW5zaW9uXG4gICAgICAgICAgICBpZiAoaXNCdWJibGVDaGFydCh0aGlzLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgZGF0YVBvaW50LnNpemUgPSBzaXplO1xuICAgICAgICAgICAgICAgIGRhdGFQb2ludC5zaGFwZSA9IHNoYXBlIHx8ICdjaXJjbGUnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGlzQ2hhcnREYXRhQXJyYXkodGhpcy50eXBlKSkge1xuICAgICAgICAgICAgZGF0YVBvaW50ID0gW3hWYWwsIHlWYWxdO1xuICAgICAgICB9XG4gICAgICAgIC8vIEFkZGluZyBhY3R1YWwgdW53cmFwcGVkIGRhdGEgdG8gY2hhcnQgZGF0YSB0byB1c2UgYXQgdGhlIHRpbWUgb2Ygc2VsZWN0ZWQgZGF0YSBwb2ludCBvZiBjaGFydCBldmVudFxuICAgICAgICBkYXRhUG9pbnQuX2RhdGFPYmogPSBkYXRhT2JqO1xuICAgICAgICByZXR1cm4gZGF0YVBvaW50O1xuICAgIH1cblxuICAgIC8vIFNldHRpbmcgYXBwcm9wcmlhdGUgZXJyb3IgbWVzc2FnZXNcbiAgICBzZXRFcnJNc2cobWVzc2FnZSkge1xuICAgICAgICBpZiAodGhpcy5zaG93Tm9EYXRhTXNnKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dDb250ZW50TG9hZEVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuaW52YWxpZENvbmZpZyA9IHRydWU7XG4gICAgICAgICAgICAvLyBUT0RPOiBTZXQgdGhlIGxvY2FsZSBmcm9tIHRoZSBtZXNzYWdlXG4gICAgICAgICAgICB0aGlzLmVyck1zZyA9ICcnOyAvLyAkcm9vdFNjb3BlLmxvY2FsZVttZXNzYWdlXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb2Nlc3NDaGFydERhdGEoKSB7XG4gICAgICAgIHRoaXMuc2FtcGxlRGF0YSA9IGdldFNhbXBsZURhdGEodGhpcyk7XG4gICAgICAgIC8vIHNjb3BlIHZhcmlhYmxlcyB1c2VkIHRvIGtlZXAgdGhlIGFjdHVhbCBrZXkgdmFsdWVzIGZvciB4LWF4aXNcbiAgICAgICAgdGhpcy54RGF0YUtleUFyciA9IFtdO1xuICAgICAgICAvLyBQbG90dGluZyB0aGUgY2hhcnQgd2l0aCBzYW1wbGUgZGF0YSB3aGVuIHRoZSBjaGFydCBkYXRhc2V0IGlzIG5vdCBib3VuZFxuICAgICAgICBpZiAoIXRoaXMuYmluZGRhdGFzZXQpIHtcbiAgICAgICAgICAgIHRoaXMueERhdGFLZXlBcnIgPSBnZXREYXRlTGlzdCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2FtcGxlRGF0YTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5jaGFydERhdGEgfHwgIXRoaXMuY2hhcnREYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGRhdHVtID0gW10sXG4gICAgICAgICAgICB5QXhpc0tleSxcbiAgICAgICAgICAgIHNoYXBlczogYW55ID0gW10sXG4gICAgICAgICAgICB2YWx1ZXM6IGFueSA9IFtdO1xuICAgICAgICBjb25zdCB4QXhpc0tleSA9IHRoaXMueGF4aXNkYXRha2V5LFxuICAgICAgICAgICAgeUF4aXNLZXlzID0gdGhpcy55YXhpc2RhdGFrZXkgPyB0aGlzLnlheGlzZGF0YWtleS5zcGxpdCgnLCcpIDogW10sXG4gICAgICAgICAgICBkYXRhU2V0ID0gdGhpcy5jaGFydERhdGE7XG5cbiAgICAgICAgaWYgKF8uaXNBcnJheShkYXRhU2V0KSkge1xuICAgICAgICAgICAgaWYgKGlzUGllVHlwZSh0aGlzLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgeUF4aXNLZXkgPSB5QXhpc0tleXNbMF07XG4gICAgICAgICAgICAgICAgZGF0dW0gPSBfLm1hcChkYXRhU2V0LCAoZGF0YU9iaiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0VtcHR5T2JqZWN0KGRhdGFTZXRbaW5kZXhdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVGaW5kZXIoZGF0YVNldFtpbmRleF0sIHhBeGlzS2V5LCB5QXhpc0tleSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBkYXR1bSA9IHRoaXMuZ2V0VmFsaWREYXRhKGRhdHVtKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzQnViYmxlQ2hhcnQodGhpcy50eXBlKSkge1xuICAgICAgICAgICAgICAgICAgICBzaGFwZXMgPSB0aGlzLnNoYXBlID09PSAncmFuZG9tJyA/IGFsbFNoYXBlcyA6IHRoaXMuc2hhcGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHlBeGlzS2V5cy5mb3JFYWNoKCh5QXhpc0tleSwgc2VyaWVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9ICBfLm1hcChkYXRhU2V0LCAoZGF0YU9iaiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNFbXB0eU9iamVjdChkYXRhU2V0W2luZGV4XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUZpbmRlcihkYXRhU2V0W2luZGV4XSwgeEF4aXNLZXksIHlBeGlzS2V5LCBpbmRleCwgKF8uaXNBcnJheShzaGFwZXMpICYmIHNoYXBlc1tzZXJpZXNdKSB8fCB0aGlzLnNoYXBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IHRoaXMuZ2V0VmFsaWREYXRhKHZhbHVlcyk7XG4gICAgICAgICAgICAgICAgICAgIGRhdHVtLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzOiB2YWx1ZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IHByZXR0aWZ5TGFiZWxzKHlBeGlzS2V5KVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0dW07XG4gICAgfVxuXG4gICAgc2V0Q2hhcnREYXRhKGRhdGEpIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NlZERhdGEgPSBkYXRhO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0Q2hhcnREYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc2VkRGF0YTtcbiAgICB9XG5cbiAgICAvLyBjb25zdHJ1Y3RpbmcgdGhlIGdyb3VwZWQgZGF0YSBiYXNlZCBvbiB0aGUgc2VsZWN0aW9uIG9mIG9yZGVyYnksIHggJiB5IGF4aXNcbiAgICBnZXRWaXN1YWxseUdyb3VwZWREYXRhKHF1ZXJ5UmVzcG9uc2UsIGdyb3VwaW5nQ29sdW1uKSB7XG4gICAgICAgIGxldCBncm91cERhdGE6IGFueSA9IHt9LFxuICAgICAgICAgICAgZ3JvdXBWYWx1ZXM6IGFueSA9IFtdLFxuICAgICAgICAgICAgb3JkZXJCeURldGFpbHMsXG4gICAgICAgICAgICBtYXhMZW5ndGg7XG4gICAgICAgIGNvbnN0IGNoYXJ0RGF0YTogYW55ID0gW10sXG4gICAgICAgICAgICBfaXNBcmVhQ2hhcnQgPSBpc0FyZWFDaGFydCh0aGlzLnR5cGUpLFxuICAgICAgICAgICAgeUF4aXNLZXkgPSBfLmZpcnN0KF8uc3BsaXQodGhpcy55YXhpc2RhdGFrZXksICcsJykpO1xuICAgICAgICB0aGlzLnhEYXRhS2V5QXJyID0gW107XG4gICAgICAgIHF1ZXJ5UmVzcG9uc2UgPSBfLm9yZGVyQnkocXVlcnlSZXNwb25zZSwgXy5zcGxpdCh0aGlzLmdyb3VwYnksICcsJykpO1xuICAgICAgICBpZiAodGhpcy5vcmRlcmJ5KSB7XG4gICAgICAgICAgICBvcmRlckJ5RGV0YWlscyA9IGdldExvZGFzaE9yZGVyQnlGb3JtYXQodGhpcy5vcmRlcmJ5KTtcbiAgICAgICAgICAgIHF1ZXJ5UmVzcG9uc2UgPSBfLm9yZGVyQnkocXVlcnlSZXNwb25zZSwgb3JkZXJCeURldGFpbHMuY29sdW1ucywgb3JkZXJCeURldGFpbHMub3JkZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBxdWVyeVJlc3BvbnNlID0gXy5ncm91cEJ5KHF1ZXJ5UmVzcG9uc2UsIGdyb3VwaW5nQ29sdW1uKTtcbiAgICAgICAgLy8gSW4gY2FzZSBvZiBhcmVhIGNoYXJ0IGFsbCB0aGUgc2VyaWVzIGRhdGEgc2hvdWxkIGJlIG9mIHNhbWUgbGVuZ3RoXG4gICAgICAgIGlmIChfaXNBcmVhQ2hhcnQpIHtcbiAgICAgICAgICAgIG1heExlbmd0aCA9IF8ubWF4KF8ubWFwKHF1ZXJ5UmVzcG9uc2UsIG9iaiA9PiBvYmoubGVuZ3RoKSk7XG4gICAgICAgIH1cbiAgICAgICAgXy5mb3JFYWNoKHF1ZXJ5UmVzcG9uc2UsICh2YWx1ZXMsIGdyb3VwS2V5KSA9PiB7XG4gICAgICAgICAgICBncm91cFZhbHVlcyA9IGlzQXJlYUNoYXJ0ID8gXy5maWxsKG5ldyBBcnJheShtYXhMZW5ndGgpLCBbMCwgMF0pIDogW107XG4gICAgICAgICAgICBfLmZvckVhY2hSaWdodCh2YWx1ZXMsICh2YWx1ZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBncm91cFZhbHVlc1tpbmRleF0gPSB0aGlzLnZhbHVlRmluZGVyKHZhbHVlLCB0aGlzLnhheGlzZGF0YWtleSwgeUF4aXNLZXksIGluZGV4KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZ3JvdXBEYXRhID0ge1xuICAgICAgICAgICAgICAgIGtleSA6IGdyb3VwS2V5LFxuICAgICAgICAgICAgICAgIHZhbHVlcyA6IGdyb3VwVmFsdWVzXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY2hhcnREYXRhLnB1c2goZ3JvdXBEYXRhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjaGFydERhdGE7XG4gICAgfVxuXG4gICAgLypEZWNpZGVzIHdoZXRoZXIgdGhlIGRhdGEgc2hvdWxkIGJlIHZpc3VhbGx5IGdyb3VwZWQgb3Igbm90XG4gICAgICAgICAgICBWaXN1YWxseSBncm91cGVkIHdoZW4gYSBkaWZmZXJlbnQgY29sdW1uIGlzIGNob29zZW4gaW4gdGhlIGdyb3VwIGJ5IG90aGVyIHRoYW4geCBhbmQgeSBheGlzIGFuZCBhZ2dyZWdhdGlvbiBpcyBub3QgY2hvc2VuKi9cbiAgICBnZXRHcm91cGluZ0RldGFpbHMoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzR3JvdXBCeUVuYWJsZWQoKSAmJiAhdGhpcy5pc0FnZ3JlZ2F0aW9uRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICBsZXQgaXNWaXN1YWxseUdyb3VwZWQgPSBmYWxzZSxcbiAgICAgICAgICAgICAgICB2aXN1YWxHcm91cGluZ0NvbHVtbixcbiAgICAgICAgICAgICAgICBncm91cGluZ0V4cHJlc3Npb24sXG4gICAgICAgICAgICAgICAgY29sdW1uczogYW55ID0gW10sXG4gICAgICAgICAgICAgICAgZ3JvdXBpbmdDb2x1bW5JbmRleDtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwYnlDb2x1bW5zID0gdGhpcy5ncm91cGJ5ICYmIHRoaXMuZ3JvdXBieSAhPT0gTk9ORSA/IHRoaXMuZ3JvdXBieS5zcGxpdCgnLCcpIDogW10sXG4gICAgICAgICAgICAgICAgeUF4aXNLZXlzID0gdGhpcy55YXhpc2RhdGFrZXkgPyB0aGlzLnlheGlzZGF0YWtleS5zcGxpdCgnLCcpIDogW107XG5cbiAgICAgICAgICAgIGlmIChncm91cGJ5Q29sdW1ucy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgLypHZXR0aW5nIHRoZSBncm91cCBieSBjb2x1bW4gd2hpY2ggaXMgbm90IHNlbGVjdGVkIGVpdGhlciBpbiB4IG9yIHkgYXhpcyovXG4gICAgICAgICAgICAgICAgZ3JvdXBieUNvbHVtbnMuZXZlcnkoKGNvbHVtbiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMueGF4aXNkYXRha2V5ICE9PSBjb2x1bW4gJiYgJC5pbkFycmF5KGNvbHVtbiwgeUF4aXNLZXlzKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzVmlzdWFsbHlHcm91cGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpc3VhbEdyb3VwaW5nQ29sdW1uID0gY29sdW1uO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBpbmdDb2x1bW5JbmRleCA9IGluZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBieUNvbHVtbnMuc3BsaWNlKGdyb3VwaW5nQ29sdW1uSW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIC8vIENvbnN0cnVjdGluZyB0aGUgZ3JvdXBieSBleHByZXNzaW9uXG4gICAgICAgICAgICAgICAgaWYgKHZpc3VhbEdyb3VwaW5nQ29sdW1uKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbnMucHVzaCh2aXN1YWxHcm91cGluZ0NvbHVtbik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGdyb3VwYnlDb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5zID0gXy5jb25jYXQoY29sdW1ucywgZ3JvdXBieUNvbHVtbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIElmIHggYW5kIHkgYXhpcyBhcmUgbm90IGluY2x1ZGVkIGluIGFnZ3JlZ2F0aW9uIG5lZWQgdG8gYmUgaW5jbHVkZWQgaW4gZ3JvdXBieVxuICAgICAgICAgICAgaWYgKHRoaXMueGF4aXNkYXRha2V5ICE9PSB0aGlzLmFnZ3JlZ2F0aW9uY29sdW1uKSB7XG4gICAgICAgICAgICAgICAgY29sdW1ucy5wdXNoKHRoaXMueGF4aXNkYXRha2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF8uZm9yRWFjaCh5QXhpc0tleXMsIGtleSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGtleSAhPT0gdGhpcy5hZ2dyZWdhdGlvbmNvbHVtbikge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5zLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGdyb3VwaW5nRXhwcmVzc2lvbiA9ICBjb2x1bW5zLmpvaW4oJywnKTtcbiAgICAgICAgICAgIC8vIHNldCBpc1Zpc3VhbGx5R3JvdXBlZCBmbGFnIGluIHNjb3BlIGZvciBsYXRlciB1c2VcbiAgICAgICAgICAgIHRoaXMuaXNWaXN1YWxseUdyb3VwZWQgPSBpc1Zpc3VhbGx5R3JvdXBlZDtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBncm91cGluZ0V4cHJlc3Npb24sXG4gICAgICAgICAgICAgICAgaXNWaXN1YWxseUdyb3VwZWQ6IGlzVmlzdWFsbHlHcm91cGVkLFxuICAgICAgICAgICAgICAgIHZpc3VhbEdyb3VwaW5nQ29sdW1uOiB2aXN1YWxHcm91cGluZ0NvbHVtblxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXhwcmVzc2lvbjogJycsXG4gICAgICAgICAgICBpc1Zpc3VhbGx5R3JvdXBlZDogZmFsc2UsXG4gICAgICAgICAgICB2aXN1YWxHcm91cGluZ0NvbHVtbjogJydcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBGdW5jdGlvbiB0byBnZXQgdGhlIGFnZ3JlZ2F0ZWQgZGF0YSBhZnRlciBhcHBseWluZyB0aGUgYWdncmVnYXRpb24gJiBncm91cCBieSBvciBvcmRlciBieSBvcGVyYXRpb25zLlxuICAgIGdldEFnZ3JlZ2F0ZWREYXRhKGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IHZhcmlhYmxlOiBhbnkgPSB0aGlzLmRhdGFzb3VyY2UsXG4gICAgICAgICAgICB5QXhpc0tleXMgPSB0aGlzLnlheGlzZGF0YWtleSA/IHRoaXMueWF4aXNkYXRha2V5LnNwbGl0KCcsJykgOiBbXSxcbiAgICAgICAgICAgIGRhdGE6IGFueSA9IHt9O1xuICAgICAgICBsZXQgc29ydEV4cHIsXG4gICAgICAgICAgICBjb2x1bW5zOiBhbnkgPSBbXSxcbiAgICAgICAgICAgIGNvbEFsaWFzLFxuICAgICAgICAgICAgb3JkZXJCeUNvbHVtbnMsXG4gICAgICAgICAgICBncm91cEJ5RmllbGRzOiBhbnkgPSBbXTtcblxuICAgICAgICBpZiAoIXZhcmlhYmxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNHcm91cEJ5RW5hYmxlZCgpKSB7XG4gICAgICAgICAgICBncm91cEJ5RmllbGRzID0gXy5zcGxpdCh0aGlzLmdyb3VwYnksICcsJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3JkZXJieSkge1xuICAgICAgICAgICAgc29ydEV4cHIgPSBfLnJlcGxhY2UodGhpcy5vcmRlcmJ5LCAvOi9nLCAnICcpO1xuICAgICAgICAgICAgY29sdW1ucyA9IF8udW5pcShfLmNvbmNhdChjb2x1bW5zLCBncm91cEJ5RmllbGRzLCBbdGhpcy5hZ2dyZWdhdGlvbmNvbHVtbl0pKTtcbiAgICAgICAgICAgIG9yZGVyQnlDb2x1bW5zID0gZ2V0TG9kYXNoT3JkZXJCeUZvcm1hdCh0aGlzLm9yZGVyYnkpLmNvbHVtbnM7XG4gICAgICAgICAgICAvLyBJZiB0aGUgb3JkZXJieSBjb2x1bW4gaXMgY2hvc2VuIGVpdGhlciBpbiBncm91cGJ5IG9yIG9yZGVyYnkgdGhlbiByZXBsYWNlIC4gd2l0aCAkIGZvciB0aGF0IGNvbHVtblxuICAgICAgICAgICAgXy5mb3JFYWNoKF8uaW50ZXJzZWN0aW9uKGNvbHVtbnMsIG9yZGVyQnlDb2x1bW5zKSwgY29sID0+IHtcbiAgICAgICAgICAgICAgICBjb2xBbGlhcyA9IGdldFZhbGlkQWxpYXNOYW1lKGNvbCk7XG4gICAgICAgICAgICAgICAgc29ydEV4cHIgPSBfLnJlcGxhY2Uoc29ydEV4cHIsIGNvbCwgY29sQWxpYXMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNBZ2dyZWdhdGlvbkVuYWJsZWQoKSkge1xuICAgICAgICAgICAgLy8gU2VuZCB0aGUgZ3JvdXAgYnkgaW4gdGhlIGFnZ3JlZ2F0aW9ucyBhcGkgb25seSBpZiBhZ2dyZWdhdGlvbiBpcyBhbHNvIGNob3NlblxuICAgICAgICAgICAgZGF0YS5ncm91cEJ5RmllbGRzID0gZ3JvdXBCeUZpZWxkcztcbiAgICAgICAgICAgIGRhdGEuYWdncmVnYXRpb25zID0gIFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICdmaWVsZCc6IHRoaXMuYWdncmVnYXRpb25jb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgICd0eXBlJzogIGFnZ3JlZ2F0aW9uRm5NYXBbdGhpcy5hZ2dyZWdhdGlvbl0sXG4gICAgICAgICAgICAgICAgICAgICdhbGlhcyc6IGdldFZhbGlkQWxpYXNOYW1lKHRoaXMuYWdncmVnYXRpb25jb2x1bW4pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBFeGVjdXRlIHRoZSBxdWVyeS5cbiAgICAgICAgdmFyaWFibGUuZXhlY3V0ZSgnZ2V0QWdncmVnYXRlZERhdGEnLCB7XG4gICAgICAgICAgICAnYWdncmVnYXRpb25zJyA6IGRhdGEsXG4gICAgICAgICAgICAnc29ydCcgICAgICAgICA6IHNvcnRFeHByXG4gICAgICAgIH0pLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgLy8gVHJhbnNmb3JtIHRoZSByZXN1bHQgaW50byBhIGZvcm1hdCBzdXBwb3J0ZWQgYnkgdGhlIGNoYXJ0LlxuICAgICAgICAgICAgY29uc3QgY2hhcnREYXRhOiBhbnkgPSBbXSxcbiAgICAgICAgICAgICAgICBhZ2dyZWdhdGlvbkFsaWFzOiBhbnkgPSBnZXRWYWxpZEFsaWFzTmFtZSh0aGlzLmFnZ3JlZ2F0aW9uY29sdW1uKSxcbiAgICAgICAgICAgICAgICB4QXhpc0FsaWFzS2V5ID0gZ2V0VmFsaWRBbGlhc05hbWUodGhpcy54YXhpc2RhdGFrZXkpLFxuICAgICAgICAgICAgICAgIHlBeGlzQWxpYXNLZXlzID0gW107XG5cbiAgICAgICAgICAgIHlBeGlzS2V5cy5mb3JFYWNoKHlBeGlzS2V5ID0+IHlBeGlzQWxpYXNLZXlzLnB1c2goZ2V0VmFsaWRBbGlhc05hbWUoeUF4aXNLZXkpKSk7XG5cbiAgICAgICAgICAgIF8uZm9yRWFjaChyZXNwb25zZS5ib2R5LmNvbnRlbnQsIChyZXNwb25zZUNvbnRlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBvYmogPSB7fTtcbiAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIHJlc3BvbnNlIGluIHRoZSBjaGFydERhdGEgYmFzZWQgb24gJ2FnZ3JlZ2F0aW9uQ29sdW1uJywgJ3hBeGlzRGF0YUtleScgJiAneUF4aXNEYXRhS2V5Jy5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0FnZ3JlZ2F0aW9uRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ialt0aGlzLmFnZ3JlZ2F0aW9uY29sdW1uXSA9IHJlc3BvbnNlQ29udGVudFthZ2dyZWdhdGlvbkFsaWFzXTtcbiAgICAgICAgICAgICAgICAgICAgb2JqW3RoaXMuYWdncmVnYXRpb25jb2x1bW5dID0gXy5nZXQocmVzcG9uc2VDb250ZW50LCBhZ2dyZWdhdGlvbkFsaWFzKSB8fCBfLmdldChyZXNwb25zZUNvbnRlbnQsIHRoaXMuYWdncmVnYXRpb25jb2x1bW4pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIG9ialt0aGlzLnhheGlzZGF0YWtleV0gPSBfLmdldChyZXNwb25zZUNvbnRlbnQsIHhBeGlzQWxpYXNLZXkpIHx8IF8uZ2V0KHJlc3BvbnNlQ29udGVudCwgdGhpcy54YXhpc2RhdGFrZXkpO1xuXG4gICAgICAgICAgICAgICAgeUF4aXNLZXlzLmZvckVhY2goKHlBeGlzS2V5LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBvYmpbeUF4aXNLZXldID0gcmVzcG9uc2VDb250ZW50W3lBeGlzQWxpYXNLZXlzW2luZGV4XV07XG4gICAgICAgICAgICAgICAgICAgIG9ialt5QXhpc0tleV0gPSBfLmdldChyZXNwb25zZUNvbnRlbnQsIHlBeGlzQWxpYXNLZXlzW2luZGV4XSkgfHwgXy5nZXQocmVzcG9uc2VDb250ZW50LCB5QXhpc0tleSk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBjaGFydERhdGEucHVzaChvYmopO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuY2hhcnREYXRhID0gY2hhcnREYXRhO1xuXG4gICAgICAgICAgICB0cmlnZ2VyRm4oY2FsbGJhY2spO1xuICAgICAgICB9LCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNoYXJ0RGF0YSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5zZXRFcnJNc2coJ01FU1NBR0VfRVJST1JfRkVUQ0hfREFUQScpO1xuICAgICAgICAgICAgdHJpZ2dlckZuKGNhbGxiYWNrKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBzZXRzIG1heGltdW0gd2lkdGggZm9yIHRoZSBsYWJlbHMgdGhhdCBjYW4gYmUgZGlzcGxheWVkLlRoaXMgd2lsbCBoZWxwZnVsIHdoZW4gdGhleSBhcmUgb3ZlcmxhcHBpbmdcbiAgICBzZXRMYWJlbHNNYXhXaWR0aCgpIHtcbiAgICAgICAgbGV0IHhUaWNrcyxcbiAgICAgICAgICAgIHRpY2tXaWR0aCxcbiAgICAgICAgICAgIG1heExlbmd0aCxcbiAgICAgICAgICAgIHhEaXN0LFxuICAgICAgICAgICAgeURpc3QsXG4gICAgICAgICAgICB0b3RhbEhlaWdodCxcbiAgICAgICAgICAgIG1heE5vTGFiZWxzLFxuICAgICAgICAgICAgbnRoRWxlbWVudCxcbiAgICAgICAgICAgIGxhYmVsc0F2YWlsYWJsZVdpZHRoLFxuICAgICAgICAgICAgYmFyV3JhcHBlcixcbiAgICAgICAgICAgIHlBeGlzV3JhcHBlcixcbiAgICAgICAgICAgIHN2Z1dyYXBwZXI7XG4gICAgICAgIGNvbnN0IGZvbnRzaXplID0gcGFyc2VJbnQodGhpcy5mb250c2l6ZSwgMTApIHx8IDEyLFxuICAgICAgICAgICAgaXNCYXJjaGFydCA9IGlzQmFyQ2hhcnQodGhpcy50eXBlKTtcbiAgICAgICAgLy8gZ2V0dGluZyB0aGUgeCB0aWNrcyBpbiB0aGUgY2hhcnRcbiAgICAgICAgeFRpY2tzID0gJCgnI3dtQ2hhcnQnICsgdGhpcy4kaWQgKyAnIHN2ZycpLmZpbmQoJ2cubnYteCcpLmZpbmQoJ2cudGljaycpLmZpbmQoJ3RleHQnKTtcblxuICAgICAgICAvLyBnZXR0aW5nIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSB0d28gdmlzaWJsZSB0aWNrcyBhc3NvY2lhdGVkIHdpdGggdmlzaWJsZSB0ZXh0XG4gICAgICAgIHhUaWNrcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IHhUaWNrID0gJCh0aGlzKTtcbiAgICAgICAgICAgIGxldCB4VHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgIHRpY2tEaXN0O1xuICAgICAgICAgICAgaWYgKHhUaWNrLnRleHQoKSAmJiB4VGljay5jc3MoJ29wYWNpdHknKSA9PT0gJzEnKSB7XG4gICAgICAgICAgICAgICAgeFRyYW5zZm9ybSA9IHhUaWNrLnBhcmVudCgpLmF0dHIoJ3RyYW5zZm9ybScpLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICAgICAgeERpc3QgPSBwYXJzZUZsb2F0KHhUcmFuc2Zvcm1bMF0uc3Vic3RyKDEwKSk7XG4gICAgICAgICAgICAgICAgeURpc3QgPSBwYXJzZUZsb2F0KHhUcmFuc2Zvcm1bMV0gfHwgJzAnKTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzQmFyY2hhcnQgJiYgeERpc3QgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRpY2tEaXN0ID0geERpc3Q7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh5RGlzdCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGlja0Rpc3QgPSB5RGlzdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRpY2tXaWR0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aWNrV2lkdGggPSB0aWNrRGlzdCAtIHRpY2tXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aWNrV2lkdGggPSB0aWNrRGlzdDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gSW4gY2FzZSBvZiBiYXIgY2hhcnQgZ2V0dGluZyB0aGUgYXZhaWxhYmxlIHNwYWNlIGZvciB0aGUgbGFiZWxzIHRvIGJlIGRpc3BsYXllZFxuICAgICAgICBpZiAoaXNCYXJjaGFydCkge1xuICAgICAgICAgICAgYmFyV3JhcHBlciA9ICQoJyN3bUNoYXJ0JyArIHRoaXMuJGlkICsgJyBzdmc+Zy5udi13cmFwPmc+Zy5udi1iYXJzV3JhcCcpWzBdO1xuICAgICAgICAgICAgeUF4aXNXcmFwcGVyID0gJCgnI3dtQ2hhcnQnICsgdGhpcy4kaWQgKyAnIHN2Zz5nLm52LXdyYXA+Zz5nLm52LXknKVswXTtcbiAgICAgICAgICAgIHN2Z1dyYXBwZXIgPSAkKCcjd21DaGFydCcgKyB0aGlzLiRpZCArICcgc3ZnJylbMF07XG4gICAgICAgICAgICAvLyBnZXR0aW5nIHRoZSB0b3RhbCBoZWlnaHQgb2YgdGhlIGNoYXJ0XG4gICAgICAgICAgICB0b3RhbEhlaWdodCA9IGJhcldyYXBwZXIgPyBiYXJXcmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCA6IDA7XG4gICAgICAgICAgICAvLyBnZXR0aW5nIHRoZSBsYWJlbHMgYXZhaWxhYmxlIHNwYWNlXG4gICAgICAgICAgICBsYWJlbHNBdmFpbGFibGVXaWR0aCA9IHlBeGlzV3JhcHBlciA/IHN2Z1dyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggLSB5QXhpc1dyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggOiBzdmdXcmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICAgICAgLy8gU2V0dGluZyB0aGUgbWF4IGxlbmd0aCBmb3IgdGhlIGxhYmVsXG4gICAgICAgICAgICBtYXhMZW5ndGggPSBNYXRoLnJvdW5kKGxhYmVsc0F2YWlsYWJsZVdpZHRoIC8gZm9udHNpemUpO1xuICAgICAgICAgICAgLy8gaWYgYXZhaWxhYmxlIHNwYWNlIGZvciBlYWNoIGxhYmVsIGlzIGxlc3MgdGhhbiB0aGUgZm9udC1zaXplXG4gICAgICAgICAgICAvLyB0aGVuIGxpbWl0aW5nIHRoZSBsYWJlbHMgdG8gYmUgZGlzcGxheWVkXG4gICAgICAgICAgICBpZiAodGlja1dpZHRoIDwgZm9udHNpemUpIHtcbiAgICAgICAgICAgICAgICAvLyBjYWxjdWxhdGUgdGhlIG1heGltdW0gbm8gb2YgbGFiZWxzIHRvIGJlIGZpdHRlZFxuICAgICAgICAgICAgICAgIG1heE5vTGFiZWxzID0gdG90YWxIZWlnaHQgLyBmb250c2l6ZTtcbiAgICAgICAgICAgICAgICAvLyBzaG93aW5nIG9ubHkgdGhlIG50aCBlbGVtZW50XG4gICAgICAgICAgICAgICAgbnRoRWxlbWVudCA9IE1hdGguY2VpbCh0aGlzLmNoYXJ0RGF0YS5sZW5ndGggLyBtYXhOb0xhYmVscyk7XG4gICAgICAgICAgICAgICAgLy8gc2hvd2luZyB1cCBvbmx5IHNvbWUgbGFiZWxzXG4gICAgICAgICAgICAgICAgZDMuc2VsZWN0KCcjd21DaGFydCcgKyB0aGlzLiRpZCArICcgc3ZnJykuc2VsZWN0KCdnLm52LXgnKS5zZWxlY3RBbGwoJ2cudGljaycpLnNlbGVjdCgndGV4dCcpLmVhY2goZnVuY3Rpb24gKHRleHQsIGkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaGlkaW5nIGV2ZXJ5IG5vbiBudGggZWxlbWVudFxuICAgICAgICAgICAgICAgICAgICBpZiAoaSAlIG50aEVsZW1lbnQgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGQzLnNlbGVjdCh0aGlzKS5hdHRyKCdvcGFjaXR5JywgMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFNldHRpbmcgdGhlIG1heCBsZW5ndGggZm9yIHRoZSBsYWJlbFxuICAgICAgICAgICAgbWF4TGVuZ3RoID0gTWF0aC5yb3VuZCh0aWNrV2lkdGggLyBmb250c2l6ZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBtYXhMZW5ndGggc2hvdWxkIGFsd2F5cyBiZSBhIHBvc2l0aXZlIG51bWJlclxuICAgICAgICBtYXhMZW5ndGggPSBNYXRoLmFicyhtYXhMZW5ndGgpO1xuICAgICAgICAvLyBWYWxpZGF0aW5nIGlmIGV2ZXJ5IGxhYmVsIGV4Y2VlZHMgdGhlIG1heCBsZW5ndGggYW5kIGlmIHNvIGxpbWl0aW5nIHRoZSBsZW5ndGggYW5kIGFkZGluZyBlbGxpcHNpc1xuICAgICAgICB4VGlja3MuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy50ZXh0Q29udGVudC5sZW5ndGggPiBtYXhMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRleHRDb250ZW50ID0gdGhpcy50ZXh0Q29udGVudC5zdWJzdHIoMCwgbWF4TGVuZ3RoKSArICcuLi4nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm5zIHRoZSBjb2x1bW5zIG9mIHRoYXQgY2FuIGJlIGNob29zZW4gaW4gdGhlIHggYW5kIHkgYXhpc1xuICAgIGdldERlZmF1bHRDb2x1bW5zKCkge1xuICAgICAgICBsZXQgdHlwZSxcbiAgICAgICAgICAgIHN0cmluZ0NvbHVtbixcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICB0ZW1wO1xuICAgICAgICBjb25zdCBkZWZhdWx0Q29sdW1ucyA9IFtdLFxuICAgICAgICAgICAgY29sdW1ucyA9IHRoaXMuZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLkdFVF9QUk9QRVJUSUVTX01BUCkgfHwgW107XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvbHVtbnMubGVuZ3RoICYmIGRlZmF1bHRDb2x1bW5zLmxlbmd0aCA8PSAyOyBpICs9IDEpIHtcbiAgICAgICAgICAgIHR5cGUgPSBjb2x1bW5zW2ldLnR5cGU7XG4gICAgICAgICAgICBpZiAoIWNvbHVtbnNbaV0uaXNSZWxhdGVkICYmIChpc051bWJlclR5cGUodHlwZSkpKSB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdENvbHVtbnMucHVzaChjb2x1bW5zW2ldLmZpZWxkTmFtZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdzdHJpbmcnICYmICFzdHJpbmdDb2x1bW4pIHtcbiAgICAgICAgICAgICAgICBzdHJpbmdDb2x1bW4gPSBjb2x1bW5zW2ldLmZpZWxkTmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBPdGhlciB0aGFuIGJ1YmJsZSBjaGFydCB4OiBzdHJpbmcgdHlwZSB5OiBudW1iZXIgdHlwZVxuICAgICAgICAvLyBCdWJibGUgY2hhcnQgeDogbnVtYmVyIHR5cGUgeTogbnVtYmVyIHR5cGVcbiAgICAgICAgaWYgKHN0cmluZ0NvbHVtbiAmJiBkZWZhdWx0Q29sdW1ucy5sZW5ndGggPiAwICYmICFpc0J1YmJsZUNoYXJ0KHRoaXMudHlwZSkpIHtcbiAgICAgICAgICAgIHRlbXAgPSBkZWZhdWx0Q29sdW1uc1swXTtcbiAgICAgICAgICAgIGRlZmF1bHRDb2x1bW5zWzBdID0gc3RyaW5nQ29sdW1uO1xuICAgICAgICAgICAgZGVmYXVsdENvbHVtbnNbMV0gPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRlZmF1bHRDb2x1bW5zO1xuICAgIH1cblxuICAgIC8vIENhbGwgdXNlciBkZWZpbmVkIGphdmFzY3JpcHQgZnVuY3Rpb24gd2hlbiB1c2VyIGxpbmtzIGl0IHRvIGNsaWNrIGV2ZW50IG9mIHRoZSB3aWRnZXQuXG4gICAgYXR0YWNoQ2xpY2tFdmVudCgpIHtcbiAgICAgICAgbGV0IGRhdGFPYmo7XG4gICAgICAgIGQzLnNlbGVjdCgnI3dtQ2hhcnQnICsgdGhpcy4kaWQgKyAnIHN2ZycpLnNlbGVjdEFsbChjaGFydERhdGFQb2ludFhwYXRoW3RoaXMudHlwZV0pLnN0eWxlKCdwb2ludGVyLWV2ZW50cycsICdhbGwnKVxuICAgICAgICAgICAgLm9uKCdjbGljaycsIChldmVudCwgZGF0YSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdDb2x1bW4nOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICdCYXInOlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YU9iaiA9IGRhdGEuX2RhdGFPYmo7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnUGllJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnRG9udXQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YU9iaiA9IGRhdGEuZGF0YS5fZGF0YU9iajtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdBcmVhJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnQ3VtdWxhdGl2ZSBMaW5lJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTGluZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhT2JqID0gZGF0YVswXS5fZGF0YU9iajtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdCdWJibGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YU9iaiA9IGRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZGl0ZW0gPSBkYXRhT2JqO1xuICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnc2VsZWN0JywgeyRldmVudDogZDMuZXZlbnQsIHNlbGVjdGVkQ2hhcnRJdGVtOiBkYXRhLCBzZWxlY3RlZEl0ZW06IHRoaXMuc2VsZWN0ZWRpdGVtfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgIH1cblxuICAgIC8qICBSZXR1cm5zIFkgU2NhbGUgbWluIHZhbHVlXG4gICAgICAgICAgIEV4OiBJbnB1dCAgIDogOC45N1xuICAgICAgICAgICAgICAgT3V0cHV0ICA6IDguODdcblxuICAgICAgICAgICAgICAgSW5wdXQgICA6IDhcbiAgICAgICAgICAgICAgIE91dHB1dCAgOiA3XG4gICAgICAgKi9cblxuICAgIHBvc3RQbG90UHJvY2VzcyhjaGFydCkge1xuICAgICAgICBsZXQgY2hhcnRTdmcsXG4gICAgICAgICAgICBwaWVMYWJlbHMsXG4gICAgICAgICAgICBwaWVHcm91cHMsXG4gICAgICAgICAgICBhbmdsZUFycmF5O1xuICAgICAgICBjb25zdCBzdHlsZU9iaiA9IHt9O1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy4kZWxlbWVudDtcblxuICAgICAgICBwb3N0UGxvdENoYXJ0UHJvY2Vzcyh0aGlzKTtcblxuICAgICAgICBpZiAoIWlzUGllVHlwZSh0aGlzLnR5cGUpKSB7XG4gICAgICAgICAgICB0aGlzLnNldExhYmVsc01heFdpZHRoKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuc2hvd2xhYmVsc291dHNpZGUpIHtcbiAgICAgICAgICAgIC8qKiBOdmQzIGhhcyBhIGlzc3VlIGluIHJvdGF0aW5nIHRleHQuIFNvIHdlIHdpbGwgdXNlIHRoaXMgYXMgYSB0ZW1wIGZpeC5cbiAgICAgICAgICAgICAqIElmIHRoZSBpc3N1ZSBpcyByZXNvbHZlZCB0aGVyZSwgd2UgY2FuIHJlbW92ZSB0aGlzLiovXG4gICAgICAgICAgICAvKiBJZiBpdCBpcyBhIGRvbnV0IGNoYXJ0LCB0aGVuIHJvdGF0ZSB0aGUgdGV4dCBhbmQgcG9zaXRpb24gdGhlbSovXG4gICAgICAgICAgICBjaGFydFN2ZyA9IGQzLnNlbGVjdCgnI3dtQ2hhcnQnICsgdGhpcy4kaWQgKyAnIHN2ZycpO1xuICAgICAgICAgICAgcGllTGFiZWxzID0gY2hhcnRTdmcuc2VsZWN0KCcubnYtcGllTGFiZWxzJykuc2VsZWN0QWxsKCcubnYtbGFiZWwnKTtcbiAgICAgICAgICAgIHBpZUdyb3VwcyA9IGNoYXJ0U3ZnLnNlbGVjdCgnLm52LXBpZScpLnNlbGVjdEFsbCgnLm52LXNsaWNlJyk7XG4gICAgICAgICAgICBhbmdsZUFycmF5ID0gW107XG4gICAgICAgICAgICBpZiAocGllR3JvdXBzICYmIHBpZUdyb3Vwcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBwaWVHcm91cHMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGQzLnNlbGVjdCh0aGlzKS5hdHRyKCd0cmFuc2Zvcm0nLCBmdW5jdGlvbiAoZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGVBcnJheS5wdXNoKGFuZ2xlKGQpKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcGllTGFiZWxzLmVhY2goZnVuY3Rpb24gKGQsIGkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBkMy5zZWxlY3QodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICQoZ3JvdXBbMF1bMF0pLmZpbmQoJ3RleHQnKS5hdHRyKCd0cmFuc2Zvcm0nLCAncm90YXRlKCcgKyBhbmdsZUFycmF5W2ldICsgJyknKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHByZXBhcmUgdGV4dCBzdHlsZSBwcm9wcyBvYmplY3QgYW5kIHNldFxuICAgICAgICBfLmZvckVhY2goc3R5bGVQcm9wcywgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICAgIGlmIChrZXkgPT09ICdmb250c2l6ZScgfHwga2V5ID09PSAnZm9udHVuaXQnKSB7XG4gICAgICAgICAgICAgICAgc3R5bGVPYmpbdmFsdWVdID0gdGhpcy5mb250c2l6ZSArIHRoaXMuZm9udHVuaXQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0eWxlT2JqW3ZhbHVlXSA9IHRoaXNba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHNldFRleHRTdHlsZShzdHlsZU9iaiwgdGhpcy4kaWQpO1xuXG4gICAgICAgIC8qXG4gICAgICAgICAqIGFsbG93IHdpbmRvdy1yZXNpemUgZnVuY3Rpb25hbGl0eSwgZm9yIG9ubHktcnVuIG1vZGUgYXNcbiAgICAgICAgICogdXBkYXRpbmcgY2hhcnQgaXMgYmVpbmcgaGFuZGxlZCBieSB3YXRjaGVycyBvZiBoZWlnaHQgJiB3aWR0aCBpbiBzdHVkaW8tbW9kZVxuICAgICAgICAgKiAqL1xuICAgICAgICB0cmlnZ2VyRm4odGhpcy5fcmVzaXplRm4gJiYgdGhpcy5fcmVzaXplRm4uY2xlYXIpO1xuICAgICAgICB0aGlzLl9yZXNpemVGbiA9IG52LnV0aWxzLndpbmRvd1Jlc2l6ZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoZWxlbWVudFswXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQpIHtcbiAgICAgICAgICAgICAgICBjaGFydC51cGRhdGUoKTtcbiAgICAgICAgICAgICAgICBwb3N0UGxvdENoYXJ0UHJvY2Vzcyh0aGlzKTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzUGllVHlwZSh0aGlzLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TGFiZWxzTWF4V2lkdGgoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFRPRE86IGdldCBwYXJlbnRzIG9mIGFjY29yZGlvbiB0eXBlXG4gICAgICAgICAgICAgICAgLypsZXQgcGFyZW50ID0gZWxlbWVudC5jbG9zZXN0KCcuYXBwLWFjY29yZGlvbi1wYW5lbCwgLnRhYi1wYW5lJykuaXNvbGF0ZVNjb3BlKCk7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnQuaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9Ki9cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gcHJlcGFyZXMgYW5kIGNvbmZpZ3VyZXMgdGhlIGNoYXJ0IHByb3BlcnRpZXNcbiAgICBjb25maWd1cmVDaGFydCgpIHtcbiAgICAgICAgLy8gQ29weSB0aGUgZGF0YSBvbmx5IGluIGNhc2Ugb2YgcGllIGNoYXJ0IHdpdGggZGVmYXVsdCBkYXRhXG4gICAgICAgIC8vIFJlYXNvbiA6IHdoZW4gbXVsdGlwbGUgcGllIGNoYXJ0cyBhcmUgYm91bmQgdG8gc2FtZSBkYXRhLCBmaXJzdCBjaGFydCB0aGVtZSB3aWxsIGJlIGFwcGxpZWQgdG8gYWxsIGNoYXJ0c1xuICAgICAgICBsZXQgeERvbWFpblZhbHVlcztcbiAgICAgICAgbGV0IHlEb21haW5WYWx1ZXM7XG4gICAgICAgIGxldCBjaGFydDtcbiAgICAgICAgbGV0IGJlZm9yZVJlbmRlclZhbDtcbiAgICAgICAgY29uc3QgeWZvcm1hdE9wdGlvbnM6IGFueSA9IHt9O1xuXG4gICAgICAgIGlmICh0aGlzLl9wcm9jZXNzZWREYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGlmIChpc0F4aXNEb21haW5WYWxpZCh0aGlzLCAneCcpKSB7XG4gICAgICAgICAgICAgICAgeERvbWFpblZhbHVlcyA9IHRoaXMuYmluZGRhdGFzZXQgPyB0aGlzLmdldFhNaW5NYXhWYWx1ZXModGhpcy5fcHJvY2Vzc2VkRGF0YVswXSkgOiB7ICdtaW4nIDogeyd4JzogMX0sICAnbWF4JyA6IHsneCcgOiA1fX07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNBeGlzRG9tYWluVmFsaWQodGhpcywgJ3knKSkge1xuICAgICAgICAgICAgICAgIHlEb21haW5WYWx1ZXMgPSB0aGlzLmJpbmRkYXRhc2V0ID8gdGhpcy5nZXRZTWluTWF4VmFsdWVzKHRoaXMuX3Byb2Nlc3NlZERhdGEpIDogeyAnbWluJyA6IHsneScgOiAxfSwgJ21heCcgOiB7J3knIDogNX19O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzUGllVHlwZSh0aGlzLnR5cGUpICYmICghdGhpcy5iaW5kZGF0YXNldCB8fCAhdGhpcy5zY29wZWRhdGFzZXQpKSB7XG4gICAgICAgICAgICB0aGlzLl9wcm9jZXNzZWREYXRhID0gZ2V0Q2xvbmVkT2JqZWN0KHRoaXMuc2NvcGVkYXRhc2V0IHx8IHRoaXMuX3Byb2Nlc3NlZERhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZ2V0IHRoZSBjaGFydCBvYmplY3RcbiAgICAgICAgY2hhcnQgPSBpbml0Q2hhcnQodGhpcywgeERvbWFpblZhbHVlcywgeURvbWFpblZhbHVlcywgbnVsbCwgIXRoaXMuYmluZGRhdGFzZXQpO1xuXG4gICAgICAgIGlmIChfLmlzQXJyYXkodGhpcy5fcHJvY2Vzc2VkRGF0YSkpIHtcbiAgICAgICAgICAgIC8vIFdNUy0xOTQ5OTogIFRvIHJlbW92ZSBjaGFydCBYLWF4aXMgb2xkIHRpY2tzIHdoZW4gY2hhcnQgZGF0YSBsb2FkZWQgZHluYW1pY2FsbHkuXG4gICAgICAgICAgICBjb25zdCBvbGRnVGlja3MgPSAgJCgnI3dtQ2hhcnQnICsgdGhpcy4kaWQgKyAnIHN2ZycpLmZpbmQoJ2cubnYteCcpLmZpbmQoJ2cudGljaycpO1xuICAgICAgICAgICAgaWYgKG9sZGdUaWNrcyAmJiBvbGRnVGlja3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgb2xkZ1RpY2tzLnJlbW92ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYmVmb3JlUmVuZGVyVmFsID0gdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdiZWZvcmVyZW5kZXInLCB7ICdjaGFydEluc3RhbmNlJyA6IGNoYXJ0fSk7XG4gICAgICAgICAgICBpZiAoYmVmb3JlUmVuZGVyVmFsKSB7XG4gICAgICAgICAgICAgICAgY2hhcnQgPSBiZWZvcmVSZW5kZXJWYWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNoYXJ0ID0gY2hhcnQ7XG4gICAgICAgICAgICAvLyBjaGFuZ2luZyB0aGUgZGVmYXVsdCBubyBkYXRhIG1lc3NhZ2VcbiAgICAgICAgICAgIGQzLnNlbGVjdCgnI3dtQ2hhcnQnICsgdGhpcy4kaWQgKyAnIHN2ZycpXG4gICAgICAgICAgICAgICAgLmRhdHVtKHRoaXMuX3Byb2Nlc3NlZERhdGEpXG4gICAgICAgICAgICAgICAgLmNhbGwodGhpcy5jaGFydCk7XG4gICAgICAgICAgICB0aGlzLnBvc3RQbG90UHJvY2VzcyhjaGFydCk7XG4gICAgICAgICAgICByZXR1cm4gY2hhcnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBQbG90dGluZyB0aGUgY2hhcnQgd2l0aCBzZXQgb2YgdGhlIHByb3BlcnRpZXMgc2V0IHRvIGl0XG4gICAgcGxvdENoYXJ0KCkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy4kZWxlbWVudDtcbiAgICAgICAgLy8gY2FsbCB1c2VyLXRyYW5zZm9ybWVkIGZ1bmN0aW9uXG4gICAgICAgIHRoaXMuY2hhcnREYXRhID0gKHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygndHJhbnNmb3JtJykpIHx8IHRoaXMuY2hhcnREYXRhO1xuXG4gICAgICAgIC8vIEdldHRpbmcgdGhlIG9yZGVyIGJ5IGRhdGEgb25seSBpbiBydW4gbW9kZS4gVGhlIG9yZGVyIGJ5IGFwcGxpZXMgZm9yIGFsbCB0aGUgY2hhcnRzIG90aGVyIHRoYW4gcGllIGFuZCBkb251dCBjaGFydHNcbiAgICAgICAgaWYgKHRoaXMuaXNWaXN1YWxseUdyb3VwZWQgJiYgIWlzUGllVHlwZSh0aGlzLnR5cGUpKSB7XG4gICAgICAgICAgICB0aGlzLl9wcm9jZXNzZWREYXRhID0gdGhpcy5jaGFydERhdGE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9wcm9jZXNzZWREYXRhID0gdGhpcy5wcm9jZXNzQ2hhcnREYXRhKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2hlY2tpbmcgdGhlIHBhcmVudCBjb250YWluZXIgYmVmb3JlIHBsb3R0aW5nIHRoZSBjaGFydFxuICAgICAgICBpZiAoIWVsZW1lbnRbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY2xlYXJDYW52YXMpIHtcbiAgICAgICAgICAgIC8vIGVtcHR5IHN2ZyB0byBhZGQtbmV3IGNoYXJ0XG4gICAgICAgICAgICBlbGVtZW50LmZpbmQoJ3N2ZycpLnJlcGxhY2VXaXRoKCc8c3ZnPjwvc3ZnPicpO1xuICAgICAgICAgICAgdGhpcy5jbGVhckNhbnZhcyA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSW4gY2FzZSBvZiBpbnZhbGlkIGF4aXMgc2hvdyBubyBkYXRhIGF2YWlsYWJsZSBtZXNzYWdlXG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkQXhpcygpKSB7XG4gICAgICAgICAgICB0aGlzLl9wcm9jZXNzZWREYXRhID0gW107XG4gICAgICAgIH1cbiAgICAgICAgbnYuYWRkR3JhcGgoKCkgPT4gdGhpcy5jb25maWd1cmVDaGFydCgpLCAgKCkgPT4ge1xuICAgICAgICAgICAgLypCdWJibGUgY2hhcnQgaGFzIGFuIHRpbWUgb3V0IGRlbGF5IG9mIDMwMG1zIGluIHRoZWlyIGltcGxlbWVudGF0aW9uIGR1ZSB0byB3aGljaCB3ZVxuICAgICAgICAgICAgKiB3b24ndCBiZSBnZXR0aW5nIHJlcXVpcmVkIGRhdGEgcG9pbnRzIG9uIGF0dGFjaGluZyBldmVudHNcbiAgICAgICAgICAgICogaGVuY2UgZGVsYXlpbmcgaXQgNjAwbXMqL1xuICAgICAgICAgICAgc2V0VGltZW91dCggKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYXR0YWNoQ2xpY2tFdmVudCgpO1xuICAgICAgICAgICAgfSwgNjAwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaXNMb2FkSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgIH1cbiAgICAvLyBUT0RPOiBOZWVkIHdheSB0byBmaWd1cmUgb3V0IGlmIHRoZSBkYXRhc291cmNlIGlzIGEgbGl2ZSBzb3VyY2VcbiAgICBnZXQgaXNMaXZlVmFyaWFibGUoKSB7XG4gICAgICAgIC8vIHNldHRpbmcgdGhlIGZsYWcgZm9yIHRoZSBsaXZlIHZhcmlhYmxlIGluIHRoZSBzY29wZSBmb3IgdGhlIGNoZWNrc1xuICAgICAgICBjb25zdCB2YXJpYWJsZU9iaiA9IHRoaXMuZGF0YXNvdXJjZTtcbiAgICAgICAgcmV0dXJuIHZhcmlhYmxlT2JqICYmIHZhcmlhYmxlT2JqLmNhdGVnb3J5ID09PSAnd20uTGl2ZVZhcmlhYmxlJztcbiAgICB9XG5cbiAgICBwbG90Q2hhcnRQcm94eSgpIHtcbiAgICAgICAgdGhpcy5zaG93Q29udGVudExvYWRFcnJvciA9IGZhbHNlO1xuICAgICAgICB0aGlzLmludmFsaWRDb25maWcgPSBmYWxzZTtcbiAgICAgICAgLy8gQ2hlY2tpbmcgaWYgeCBhbmQgeSBheGlzIGFyZSBjaG9zZW5cbiAgICAgICAgdGhpcy5pc0xvYWRJblByb2dyZXNzID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgZ3JvdXBpbmdEZXRhaWxzID0gdGhpcy5nZXRHcm91cGluZ0RldGFpbHMoKTtcbiAgICAgICAgLy8gSWYgYWdncmVnYXRpb24vZ3JvdXAgYnkvb3JkZXIgYnkgcHJvcGVydGllcyBoYXZlIGJlZW4gc2V0LCB0aGVuIGdldCB0aGUgYWdncmVnYXRlZCBkYXRhIGFuZCBwbG90IHRoZSByZXN1bHQgaW4gdGhlIGNoYXJ0LlxuICAgICAgICAvLyBUT0RPOiBkYXRhc291cmNlIGZvciBsaXZlIHZhcmlhYmxlIGRldGVjdGlvblxuICAgICAgICBpZiAodGhpcy5iaW5kZGF0YXNldCAmJiB0aGlzLmlzTGl2ZVZhcmlhYmxlICYmICh0aGlzLmZpbHRlckZpZWxkcyB8fCB0aGlzLmlzRGF0YUZpbHRlcmluZ0VuYWJsZWQoKSkpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0QWdncmVnYXRlZERhdGEoKCkgPT4gdGhpcy5wbG90Q2hhcnQoKSk7XG4gICAgICAgIH0gZWxzZSB7IC8vIEVsc2UsIHNpbXBseSBwbG90IHRoZSBjaGFydC5cbiAgICAgICAgICAgIC8vIEluIGNhc2Ugb2YgbGl2ZSB2YXJpYWJsZSByZXNldHRpbmcgdGhlIGFnZ3JlZ2F0ZWQgZGF0YSB0byB0aGUgbm9ybWFsIGRhdGFzZXQgd2hlbiB0aGUgYWdncmVnYXRpb24gaGFzIGJlZW4gcmVtb3ZlZFxuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YXNldCAmJiB0aGlzLmlzTGl2ZVZhcmlhYmxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFydERhdGEgPSB0aGlzLmRhdGFzZXQ7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNHcm91cEJ5RW5hYmxlZCgpICYmIGdyb3VwaW5nRGV0YWlscy5pc1Zpc3VhbGx5R3JvdXBlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0RGF0YSA9IHRoaXMuZ2V0VmlzdWFsbHlHcm91cGVkRGF0YSh0aGlzLmNoYXJ0RGF0YSwgZ3JvdXBpbmdEZXRhaWxzLnZpc3VhbEdyb3VwaW5nQ29sdW1uKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucGxvdENoYXJ0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzZXRzIHRoZSBkZWZhdWx0IHggYW5kIHkgYXhpcyBvcHRpb25zXG4gICAgc2V0RGVmYXVsdEF4aXNPcHRpb25zKCkge1xuICAgICAgICBjb25zdCBkZWZhdWx0Q29sdW1ucyA9IHRoaXMuZ2V0RGVmYXVsdENvbHVtbnMoKTtcbiAgICAgICAgLy8gSWYgd2UgZ2V0IHRoZSB2YWxpZCBkZWZhdWx0IGNvbHVtbnMgdGhlbiBhc3NpZ24gdGhlbSBhcyB0aGUgeCBhbmQgeSBheGlzXG4gICAgICAgIC8vIEluIGNhc2Ugb2Ygc2VydmljZSB2YXJpYWJsZSB3ZSBtYXkgbm90IGdldCB0aGUgdmFsaWQgY29sdW1ucyBiZWNhdXNlIHdlIGNhbm5vdCBrbm93IHRoZSBkYXRhdHlwZXNcbiAgICAgICAgdGhpcy54YXhpc2RhdGFrZXkgPSBkZWZhdWx0Q29sdW1uc1swXSB8fCBudWxsO1xuICAgICAgICB0aGlzLnlheGlzZGF0YWtleSA9IGRlZmF1bHRDb2x1bW5zWzFdIHx8IG51bGw7XG4gICAgfVxuXG4gICAgZ2V0Q3V0b21pemVkT3B0aW9ucyhwcm9wLCBmaWVsZHMpIHtcbiAgICAgICAgY29uc3QgZ3JvdXBCeUNvbHVtbnMgPSBfLnNwbGl0KHRoaXMuZ3JvdXBieSwgJywnKSxcbiAgICAgICAgICAgIGFnZ0NvbHVtbnMgPSBfLnNwbGl0KHRoaXMuYWdncmVnYXRpb25jb2x1bW4sICcsJyk7XG4gICAgICAgIGlmICghdGhpcy5iaW5kZGF0YXNldCkge1xuICAgICAgICAgICAgcmV0dXJuIGZpZWxkcztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuYXhpc29wdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuYXhpc29wdGlvbnMgPSBmaWVsZHM7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG5ld09wdGlvbnM7XG4gICAgICAgIHN3aXRjaCAocHJvcCkge1xuICAgICAgICAgICAgY2FzZSAneGF4aXNkYXRha2V5JzpcbiAgICAgICAgICAgICAgICAvLyBJZiBncm91cCBieSBlbmFibGVkLCBjb2x1bW5zIGNob3NlbiBpbiBncm91cGJ5IHdpbGwgYmUgcG9wdWxhdGVkIGluIHggYXhpcyBvcHRpb25zXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNHcm91cEJ5RW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld09wdGlvbnMgPSBncm91cEJ5Q29sdW1ucztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd5YXhpc2RhdGFrZXknOlxuICAgICAgICAgICAgICAgIC8vIElmIGFnZ3JlZ2F0aW9uIGJ5IGVuYWJsZWQsIGNvbHVtbnMgY2hvc2VuIGluIGFnZ3JlZ2F0aW9uIHdpbGwgYmUgcG9wdWxhdGVkIGluIHkgYXhpcyBvcHRpb25zXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNBZ2dyZWdhdGlvbkVuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICBuZXdPcHRpb25zID0gYWdnQ29sdW1ucztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNMaXZlVmFyaWFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSW4gY2FzZSBvZiBsaXZlIHZhcmlhYmxlIHBvcHVsYXRpbmcgb25seSBudW1lcmljIGNvbHVtbnNcbiAgICAgICAgICAgICAgICAgICAgbmV3T3B0aW9ucyA9IHRoaXMubnVtZXJpY0NvbHVtbnM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZ3JvdXBieSc6XG4gICAgICAgICAgICAgICAgLy8gRmlsdGVyaW5nIG9ubHkgbm9uIHByaW1hcnkga2V5IGNvbHVtbnNcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0xpdmVWYXJpYWJsZSAmJiB0aGlzLm5vblByaW1hcnlDb2x1bW5zICYmIHRoaXMubm9uUHJpbWFyeUNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld09wdGlvbnMgPSB0aGlzLm5vblByaW1hcnlDb2x1bW5zO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2FnZ3JlZ2F0aW9uY29sdW1uJzpcbiAgICAgICAgICAgICAgICAvLyBTZXQgdGhlICdhZ2dyZWdhdGlvbkNvbHVtbicgdG8gc2hvdyBhbGwga2V5cyBpbiBjYXNlIG9mIGFnZ3JlZ2F0aW9uIGZ1bmN0aW9uIGlzIGNvdW50IG9yIHRvIG51bWVyaWMga2V5cyBpbiBhbGwgb3RoZXIgY2FzZXMuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNMaXZlVmFyaWFibGUgJiYgdGhpcy5pc0FnZ3JlZ2F0aW9uRW5hYmxlZCgpICYmIHRoaXMuYWdncmVnYXRpb24gIT09ICdjb3VudCcpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3T3B0aW9ucyA9IHRoaXMubnVtZXJpY0NvbHVtbnM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnb3JkZXJieSc6XG4gICAgICAgICAgICAgICAgLy8gU2V0IHRoZSAnYWdncmVnYXRpb25Db2x1bW4nIHRvIHNob3cgYWxsIGtleXMgaW4gY2FzZSBvZiBhZ2dyZWdhdGlvbiBmdW5jdGlvbiBpcyBjb3VudCBvciB0byBudW1lcmljIGtleXMgaW4gYWxsIG90aGVyIGNhc2VzLlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzTGl2ZVZhcmlhYmxlICYmIHRoaXMuaXNBZ2dyZWdhdGlvbkVuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICBuZXdPcHRpb25zID0gXy51bmlxKF8uY29uY2F0KGdyb3VwQnlDb2x1bW5zLCBhZ2dDb2x1bW5zKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYnViYmxlc2l6ZSc6XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubnVtZXJpY0NvbHVtbnMgJiYgdGhpcy5udW1lcmljQ29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3T3B0aW9ucyA9IHRoaXMubnVtZXJpY0NvbHVtbnM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ld09wdGlvbnMgfHwgZmllbGRzIHx8IHRoaXMuYXhpc29wdGlvbnM7XG4gICAgfVxuXG4gICAgLy8gRnVuY3Rpb24gdGhhdCBpdGVyYXRlcyB0aHJvdWdoIGFsbCB0aGUgY29sdW1ucyBhbmQgdGhlbiBmZXRjaGluZyB0aGUgbnVtZXJpYyBhbmQgbm9uIHByaW1hcnkgY29sdW1ucyBhbW9uZyB0aGVtXG4gICAgc2V0TnVtZXJpY2FuZE5vblByaW1hcnlDb2x1bW5zKCkge1xuICAgICAgICBsZXQgY29sdW1ucyxcbiAgICAgICAgICAgIHR5cGU7XG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXNNYXAgPSB0aGlzLmRhdGFzb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5HRVRfUFJPUEVSVElFU19NQVApO1xuICAgICAgICB0aGlzLm51bWVyaWNDb2x1bW5zID0gW107XG4gICAgICAgIHRoaXMubm9uUHJpbWFyeUNvbHVtbnMgPSBbXTtcbiAgICAgICAgLy8gRmV0Y2hpbmcgYWxsIHRoZSBjb2x1bW5zXG4gICAgICAgIGlmICh0aGlzLmRhdGFzZXQgJiYgIV8uaXNFbXB0eShwcm9wZXJ0aWVzTWFwKSkge1xuICAgICAgICAgICAgY29sdW1ucyA9IFtdOyAvLyBUT0RPOiBmZXRjaFByb3BlcnRpZXNNYXBDb2x1bW5zKHByb3BlcnRpZXNNYXApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbHVtbnMpIHtcbiAgICAgICAgICAgIC8vIEl0ZXJhdGluZyB0aHJvdWdoIGFsbCB0aGUgY29sdW1ucyBhbmQgZmV0Y2hpbmcgdGhlIG51bWVyaWMgYW5kIG5vbiBwcmltYXJ5IGtleSBjb2x1bW5zXG4gICAgICAgICAgICBfLmZvckVhY2goT2JqZWN0LmtleXMoY29sdW1ucyksIChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICB0eXBlID0gY29sdW1uc1trZXldLnR5cGU7XG4gICAgICAgICAgICAgICAgaWYgKGlzTnVtYmVyVHlwZSh0eXBlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm51bWVyaWNDb2x1bW5zLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gSGlkaW5nIG9ubHkgdGFibGUncyBwcmltYXJ5IGtleVxuICAgICAgICAgICAgICAgIGlmIChjb2x1bW5zW2tleV0uaXNSZWxhdGVkUGsgPT09ICd0cnVlJyB8fCAhY29sdW1uc1trZXldLmlzUHJpbWFyeUtleSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vblByaW1hcnlDb2x1bW5zLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMubnVtZXJpY0NvbHVtbnMgPSB0aGlzLm51bWVyaWNDb2x1bW5zLnNvcnQoKTtcbiAgICAgICAgICAgIHRoaXMubm9uUHJpbWFyeUNvbHVtbnMgPSB0aGlzLm5vblByaW1hcnlDb2x1bW5zLnNvcnQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHBsb3QgdGhlIGNoYXJ0XG4gICAgaGFuZGxlRGF0YVNldChuZXdWYWwpIHtcbiAgICAgICAgdGhpcy5lcnJNc2cgPSAnJztcbiAgICAgICAgLy8gUmVzZXR0aW5nIHRoZSBmbGFnIHRvIGZhbHNlIHdoZW4gdGhlIGJpbmRpbmcgd2FzIHJlbW92ZWRcbiAgICAgICAgaWYgKCFuZXdWYWwgJiYgIXRoaXMuYmluZGRhdGFzZXQpIHtcbiAgICAgICAgICAgIHRoaXMuaXNWaXN1YWxseUdyb3VwZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuYXhpc29wdGlvbnMgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbGl2ZVZhcmlhYmxlcyBjb250YWluIGRhdGEgaW4gJ2RhdGEnIHByb3BlcnR5JyBvZiB0aGUgdmFyaWFibGVcbiAgICAgICAgdGhpcy5jaGFydERhdGEgPSB0aGlzLmlzTGl2ZVZhcmlhYmxlID8gbmV3VmFsIHx8ICcnIDogKG5ld1ZhbCAmJiBuZXdWYWwuZGF0YVZhbHVlID09PSAnJyAmJiBfLmtleXMobmV3VmFsKS5sZW5ndGggPT09IDEpID8gJycgOiBuZXdWYWw7XG5cbiAgICAgICAgLy8gaWYgdGhlIGRhdGEgcmV0dXJuZWQgaXMgYW4gb2JqZWN0IG1ha2UgaXQgYW4gYXJyYXkgb2Ygb2JqZWN0XG4gICAgICAgIGlmICghXy5pc0FycmF5KHRoaXMuY2hhcnREYXRhKSAmJiBfLmlzT2JqZWN0KHRoaXMuY2hhcnREYXRhKSkge1xuICAgICAgICAgICAgdGhpcy5jaGFydERhdGEgPSBbdGhpcy5jaGFydERhdGFdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5ld1ZhbCAmJiBuZXdWYWwuZmlsdGVyRmllbGRzKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlckZpZWxkcyA9IG5ld1ZhbC5maWx0ZXJGaWVsZHM7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBwbG90Y2hhcnQgZm9yIG9ubHkgdmFsaWQgZGF0YSBhbmQgb25seSBhZnRlciBib3VuZCB2YXJpYWJsZSByZXR1cm5zIGRhdGFcbiAgICAgICAgaWYgKHRoaXMuY2hhcnREYXRhKSB7XG4gICAgICAgICAgICB0aGlzLl9wbG90Q2hhcnRQcm94eSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3Bsb3RDaGFydFByb3h5ID0gXy5kZWJvdW5jZSh0aGlzLnBsb3RDaGFydFByb3h5LmJpbmQodGhpcyksIDEwMCk7XG5cbiAgICAvLyBzZXRzIHRoZSBjZW50ZXIgbGFiZWwgZm9yIGRvbnV0IGNoYXJ0IHR5cGVcbiAgICBzZXREb251dENlbnRlckxhYmVsKGxhYmVsVmFsdWUpIHtcbiAgICAgICAgbGV0IGNoYXJ0U3ZnLCBwaWVHcm91cHM7XG4gICAgICAgIGNoYXJ0U3ZnID0gZDMuc2VsZWN0KCcjd21DaGFydCcgKyB0aGlzLiRpZCArICcgc3ZnJyk7XG5cbiAgICAgICAgcGllR3JvdXBzID0gY2hhcnRTdmcuc2VsZWN0KCcubnYtd3JhcC5udi1waWUnKS5zZWxlY3QoJy5udi1waWUnKTtcbiAgICAgICAgcGllR3JvdXBzLnRleHQoJycpO1xuICAgICAgICBwaWVHcm91cHMuYXBwZW5kKCd0ZXh0JylcbiAgICAgICAgICAgIC5hdHRyKCdkeScsICcuMzVlbScpXG4gICAgICAgICAgICAuYXR0cigndGV4dC1hbmNob3InLCAnbWlkZGxlJylcbiAgICAgICAgICAgIC5hdHRyKCdjbGFzcycsICdudi1waWUtdGl0bGUnKVxuICAgICAgICAgICAgLnRleHQobGFiZWxWYWx1ZSlcbiAgICAgICAgICAgIC5lYWNoKGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgICAgICAgdmFyIGQzdGV4dCA9IGQzLnNlbGVjdCh0aGlzKSxcbiAgICAgICAgICAgICAgICBjaXJjID0gZDMuc2VsZWN0KHRoaXMucGFyZW50RWxlbWVudCksXG4gICAgICAgICAgICAgICAgdG90YWxXaWR0aCA9IE51bWJlcihjaXJjLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCksXG4gICAgICAgICAgICAgICAgLy8gbWludXMgdGhlIHJpbmcgd2lkdGggZnJvbSB0b3RhbCB3aWR0aFxuICAgICAgICAgICAgICAgIGF2YWlsV2lkdGggPSB0b3RhbFdpZHRoIC0gMzAsXG4gICAgICAgICAgICAgICAgdGV4dFdpZHRoID0gdGhpcy5nZXRDb21wdXRlZFRleHRMZW5ndGgoKTtcbiAgICAgICAgICAgICAgICBkM3RleHQuYXR0cihcImRhdGEtc2NhbGVcIiwgYXZhaWxXaWR0aCAvIHRleHRXaWR0aCk7XG4gICAgICAgICAgICAgIH0pLnN0eWxlKFwiZm9udC1zaXplXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIC8vIDE2IGlzIHRoZSBkZWZhdWx0IGZvbnQgc2l6ZSB0byBtdWx0aXBseSB3aXRoIHRoZSBzY2FsZWQgdmFsdWUgYW5kIDI0IGlzIHRoZSBtYXhpbXVtIGZvbnQgc2l6ZSB0aGF0IGNhbiBiZSBhcHBsaWVkXG4gICAgICAgICAgICAgICAgdmFyIGZvbnRTaXplID0gMTYgKiBkMy5zZWxlY3QodGhpcykuYXR0cihcImRhdGEtc2NhbGVcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvbnRTaXplID4gMjQgPyAyNCA6IGZvbnRTaXplICsgXCJweFwiO1xuICAgICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvblByb3BlcnR5Q2hhbmdlKGtleSwgbmV3VmFsLCBvbGRWYWw/KSB7XG4gICAgICAgIHN1cGVyLm9uUHJvcGVydHlDaGFuZ2Uoa2V5LCBuZXdWYWwsIG9sZFZhbCk7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdkYXRhc2V0JzpcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZURhdGFTZXQobmV3VmFsKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2NlbnRlcmxhYmVsJzpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jaGFydCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJ0LnRpdGxlKG5ld1ZhbCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RG9udXRDZW50ZXJMYWJlbChuZXdWYWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3R5cGUnOlxuICAgICAgICAgICAgICAgIC8vIEJhc2VkIG9uIHRoZSBjaGFuZ2UgaW4gdHlwZSBkZWNpZGluZyB0aGUgZGVmYXVsdCBtYXJnaW5zXG4gICAgICAgICAgICAgICAgaWYgKGlzUGllVHlwZSh0aGlzLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub2Zmc2V0dG9wID0gMjA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub2Zmc2V0cmlnaHQgPSAwO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9mZnNldGJvdHRvbSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub2Zmc2V0bGVmdCA9IDA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvbGRWYWwgPT09ICdQaWUnIHx8IG9sZFZhbCA9PT0gJ0RvbnV0Jykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9mZnNldHRvcCA9IDI1O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9mZnNldHJpZ2h0ID0gMjU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub2Zmc2V0Ym90dG9tID0gNTU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub2Zmc2V0bGVmdCA9IDc1O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChvbGRWYWwgIT09IG5ld1ZhbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsZWFyQ2FudmFzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gSW4gc3R1ZGlvIG1vZGUsIGNvbmZpZ3VyZSBwcm9wZXJ0aWVzIGRlcGVuZGVudCBvbiBjaGFydCB0eXBlXG4gICAgICAgICAgICAgICAgdGhpcy5fcGxvdENoYXJ0UHJveHkoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgLy8gSW4gUnVuTW9kZSwgdGhlIHBsb3RjaGFydCBtZXRob2Qgd2lsbCBub3QgYmUgY2FsbGVkIGZvciBhbGwgcHJvcGVydHkgY2hhbmdlXG4gICAgICAgICAgICAgICAgdGhpcy5fcGxvdENoYXJ0UHJveHkoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoXy5pbmNsdWRlcyhhZHZhbmNlRGF0YVByb3BzLCBrZXkpKSB7XG4gICAgICAgICAgICB0aGlzLl9wbG90Q2hhcnRQcm94eSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlTG9hZGluZyhkYXRhKSB7XG4gICAgICAgIGNvbnN0IGRhdGFTb3VyY2UgPSB0aGlzLmRhdGFzb3VyY2U7XG4gICAgICAgIGlmIChkYXRhU291cmNlICYmIGRhdGFTb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5JU19BUElfQVdBUkUpICYmIGlzRGF0YVNvdXJjZUVxdWFsKGRhdGEudmFyaWFibGUsIGRhdGFTb3VyY2UpKSB7XG4gICAgICAgICAgICB0aGlzLnZhcmlhYmxlSW5mbGlnaHQgPSBkYXRhLmFjdGl2ZTtcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkSW5Qcm9ncmVzcyA9IGRhdGEuYWN0aXZlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGlkZVRvb2x0aXAoKSB7XG4gICAgICAgIGQzLnNlbGVjdEFsbCgnLm52dG9vbHRpcCcpLnN0eWxlKCdvcGFjaXR5JywgMCk7XG4gICAgfVxuXG4gICAgb25TdHlsZUNoYW5nZShrZXksIG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICAgIGNvbnN0IHN0eWxlT2JqID0ge307XG4gICAgICAgIHN1cGVyLm9uU3R5bGVDaGFuZ2Uoa2V5LCBuZXdWYWwsIG9sZFZhbCk7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdmb250c2l6ZSc6XG4gICAgICAgICAgICBjYXNlICdmb250dW5pdCc6XG4gICAgICAgICAgICBjYXNlICdjb2xvcic6XG4gICAgICAgICAgICBjYXNlICdmb250ZmFtaWx5JzpcbiAgICAgICAgICAgIGNhc2UgJ2ZvbnR3ZWlnaHQnOlxuICAgICAgICAgICAgY2FzZSAnZm9udHN0eWxlJzpcbiAgICAgICAgICAgIGNhc2UgJ3RleHRkZWNvcmF0aW9uJzpcbiAgICAgICAgICAgICAgICBzdHlsZU9ialtzdHlsZVByb3BzW2tleV1dID0gKGtleSA9PT0gJ2ZvbnRzaXplJyB8fCBrZXkgPT09ICdmb250dW5pdCcpID8gdGhpcy5mb250c2l6ZSArIHRoaXMuZm9udHVuaXQgOiBuZXdWYWw7XG4gICAgICAgICAgICAgICAgc2V0VGV4dFN0eWxlKHN0eWxlT2JqLCB0aGlzLiRpZCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihpbmo6IEluamVjdG9yLCBwcml2YXRlIGFwcDogQXBwKSB7XG4gICAgICAgIHN1cGVyKGluaiwgV0lER0VUX0NPTkZJRyk7XG4gICAgICAgIHN0eWxlcih0aGlzLm5hdGl2ZUVsZW1lbnQsIHRoaXMsIEFQUExZX1NUWUxFU19UWVBFLkNPTlRBSU5FUiwgWydmb250c2l6ZScsICdmb250dW5pdCcsICdjb2xvcicsICdmb250ZmFtaWx5JywgJ2ZvbnR3ZWlnaHQnLCAnZm9udHN0eWxlJywgJ3RleHRkZWNvcmF0aW9uJ10pO1xuXG4gICAgICAgIC8vIGdlbmVyYXRlIHVuaXF1ZSBpZCBmb3IgdGhlIGNvbXBvbmVudFxuICAgICAgICB0aGlzLiRpZCA9IHRoaXMud2lkZ2V0SWQgfHwgTWF0aC5yYW5kb20oKTtcbiAgICAgICAgLy8gcmVtb3ZlIHRpdGxlIGF0dHJpYnV0ZSBhcyB0aGUgZWxlbWVudCBvbiBob3ZlciBzaG93cyB5b3UgdGhlIGhpbnQgdGhyb3VnaC1vdXQgdGhlIGVsZW1lbnRcbiAgICAgICAgcmVtb3ZlQXR0cih0aGlzLm5hdGl2ZUVsZW1lbnQsICd0aXRsZScpO1xuICAgICAgICB0aGlzLmNoYXJ0UmVhZHkgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5iaW5kZGF0YXNldCA9IHRoaXMubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGFzZXQuYmluZCcpO1xuICAgICAgICAvLyBTaG93IGxvYWRpbmcgc3RhdHVzIGJhc2VkIG9uIHRoZSB2YXJpYWJsZSBsaWZlIGN5Y2xlXG4gICAgICAgIHRoaXMuX3N1YnNjaXB0aW9ucy5wdXNoKHRoaXMuYXBwLnN1YnNjcmliZSgndG9nZ2xlLXZhcmlhYmxlLXN0YXRlJywgdGhpcy5oYW5kbGVMb2FkaW5nLmJpbmQodGhpcykpKTtcbiAgICAgICAgLy8gV2lsbCBoaWRlIHRvbGx0aXAgb2YgYSBjaGFydCBpbiBtb2JpbGUgd2hlbiB0aGUgdXNlciBzY3JvbGxzLlxuICAgICAgICB0aGlzLl9zdWJzY2lwdGlvbnMucHVzaCh0aGlzLmFwcC5zdWJzY3JpYmUoJ2lzY3JvbGwtc3RhcnQnLCAoKSA9PiB7dGhpcy5oaWRlVG9vbHRpcCgpO30pKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHN1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpO1xuICAgICAgICAvLyBGb3Igb2xkIHByb2plY3RzXG4gICAgICAgIGlmICghXy5pbmNsdWRlcyhbJ291dHNpZGUnLCAnaW5zaWRlJywgJ2hpZGUnXSwgdGhpcy5zaG93bGFiZWxzKSkge1xuICAgICAgICAgICAgdGhpcy5zaG93bGFiZWxzICAgICAgICA9IGdldEJvb2xlYW5WYWx1ZSh0aGlzLnNob3dsYWJlbHMpO1xuICAgICAgICAgICAgdGhpcy5zaG93bGFiZWxzb3V0c2lkZSA9IGdldEJvb2xlYW5WYWx1ZSh0aGlzLnNob3dsYWJlbHNvdXRzaWRlKTtcbiAgICAgICAgICAgIHRoaXMuc2hvd2xhYmVscyAgICAgICAgPSB0aGlzLnNob3dsYWJlbHMgPyAodGhpcy5zaG93bGFiZWxzb3V0c2lkZSA/ICdvdXRzaWRlJyA6ICdpbnNpZGUnKSA6ICdoaWRlJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy50aGVtZSkge1xuICAgICAgICAgICAgLy8gRGVmYXVsdCB0aGVtZSBmb3IgcGllL2RvbnV0IGlzIEF6dXJlIGFuZCBmb3Igb3RoZXIgaXQgaXMgVGVycmVzdHJpYWxcbiAgICAgICAgICAgIHRoaXMudGhlbWUgPSBpc1BpZVR5cGUodGhpcy50eXBlKSA/ICdBenVyZScgOiAnVGVycmVzdHJpYWwnO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnaWQnLCAnd21DaGFydCcgKyB0aGlzLiRpZCk7XG4gICAgICAgIC8vIFdoZW4gdGhlcmUgaXMgbm90IHZhbHVlIGJpbmRpbmcsIHRoZW4gcGxvdCB0aGUgY2hhcnQgd2l0aCBzYW1wbGUgZGF0YVxuICAgICAgICBpZiAoIXRoaXMuYmluZGRhdGFzZXQgJiYgIXRoaXMubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3Njb3BlZGF0YXNldCcpKSB7XG4gICAgICAgICAgICB0aGlzLl9wbG90Q2hhcnRQcm94eSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIC8vIGRlc3Ryb3kgYWxsIHN1YnNjcmlwdGlvbnMgdG8gcHJldmVudCBtZW1vcnkgbGVhay5cbiAgICAgICAgdGhpcy5oaWRlVG9vbHRpcCgpO1xuICAgICAgICB0aGlzLl9zdWJzY2lwdGlvbnMuZm9yRWFjaCgoc3Vic2NyaXB0aW9uKT0+e1xuICAgICAgICAgICAgc3Vic2NyaXB0aW9uKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIH1cbiAgICByZWRyYXcgPSB0aGlzLl9wbG90Q2hhcnRQcm94eS5iaW5kKHRoaXMpO1xufVxuIiwiPGRpdiBjbGFzcz1cInBhbmVsLWhlYWRpbmdcIiAqbmdJZj1cInRpdGxlXCI+XG4gICAgPGgzIGNsYXNzPVwicGFuZWwtdGl0bGVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInB1bGwtbGVmdFwiPjxpIGNsYXNzPVwiYXBwLWljb24gcGFuZWwtaWNvbiB7e2ljb25jbGFzc319XCIgW2NsYXNzLm5nLWhpZGVdPVwiIWljb25jbGFzc1wiPjwvaT48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRpbmdcIiBbaW5uZXJIVE1MXT1cInRpdGxlXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkZXNjcmlwdGlvblwiICpuZ0lmPVwic3ViaGVhZGluZ1wiIFtpbm5lckhUTUxdPVwic3ViaGVhZGluZ1wiPjwvZGl2PlxuICAgIDwvaDM+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJhcHAtY2hhcnQtaW5uZXJcIiBbbmdDbGFzc109XCJ7J2xvYWRpbmcnOmlzTG9hZEluUHJvZ3Jlc3MsICdwYW5lbC1ib2R5JzogdGl0bGV9XCI+XG4gICAgPHN2Zz48L3N2Zz5cbiAgICA8ZGl2IGNsYXNzPVwid20tY29udGVudC1pbmZvIHJlYWRvbmx5LXdyYXBwZXJcIiAqbmdJZj1cInNob3dDb250ZW50TG9hZEVycm9yICYmIHNob3dOb0RhdGFNc2dcIj5cbiAgICAgICAgPHAgY2xhc3M9XCJ3bS1tZXNzYWdlXCIgW3RpdGxlXT1cImhpbnRNc2dcIiBbbmdDbGFzc109XCJ7J2Vycm9yJzogaW52YWxpZENvbmZpZ31cIiBbaW5uZXJUZXh0XT1cImVyck1zZ1wiPjwvcD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IHdtU3Bpbm5lciBzaG93LmJpbmQ9XCJpc0xvYWRJblByb2dyZXNzXCIgY2FwdGlvbi5iaW5kPVwibG9hZGluZ2RhdGFtc2dcIj48L2Rpdj5cbjwvZGl2PlxuIl19
@@ -1290,7 +1290,7 @@ class ChartComponent extends StylableComponent {
1290
1290
  attachClickEvent() {
1291
1291
  let dataObj;
1292
1292
  d3.select('#wmChart' + this.$id + ' svg').selectAll(chartDataPointXpath[this.type]).style('pointer-events', 'all')
1293
- .on('click', (data, index) => {
1293
+ .on('click', (event, data, index) => {
1294
1294
  switch (this.type) {
1295
1295
  case 'Column':
1296
1296
  case 'Bar':