mis-crystal-design-system 18.0.9 → 18.0.11

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.
@@ -272,7 +272,9 @@ export class DropdownComponent {
272
272
  totalMeasuredHeight += rect.height;
273
273
  maxItemHeight = Math.max(maxItemHeight, rect.height);
274
274
  });
275
- const finalHeight = Math.max(50, Math.min(totalMeasuredHeight, 320));
275
+ //Needed to handle the scrollbar coming for 2-3 items case
276
+ const containerPadding = 8;
277
+ const finalHeight = Math.max(50, Math.min(totalMeasuredHeight + containerPadding, 320));
276
278
  this.dynamicHeight = `${finalHeight}px`;
277
279
  this.cdr.detectChanges();
278
280
  }
@@ -509,4 +511,4 @@ export class DropdownComponent {
509
511
  args: ["keyup.esc", ['$event']]
510
512
  }] }); })();
511
513
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(DropdownComponent, { className: "DropdownComponent" }); })();
512
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWlzLWNvbXBvbmVudHMvZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWlzLWNvbXBvbmVudHMvZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHNCQUFzQixFQUFXLGFBQWEsRUFBYyxNQUFNLHNCQUFzQixDQUFDO0FBQ2xHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBYyxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQWUsU0FBUyxFQUF1QyxNQUFNLGVBQWUsQ0FBQztBQUNwTCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUNlOUQsMEJBQXdIOzs7SUFBbEUsQUFBZCxBQUFiLDBCQUFZLGNBQWMsOEZBQWlDOzs7SUFFcEYsNkJBQXFEO0lBQ25ELFlBQ0Y7SUFBQSxpQkFBSTs7O0lBREYsY0FDRjtJQURFLDRQQUNGOzs7SUFFRSw2QkFBNEM7SUFDMUMsWUFDRjtJQUFBLGlCQUFJOzs7SUFERixjQUNGO0lBREUsNkNBQ0Y7OztJQUNBLDBCQUF5Rjs7O0lBQTFDLHFHQUEwQjs7O0lBQXpFLEFBSEEsNkVBQTRDLG9FQUc2Qzs7O0lBSHhFLHVGQUF5QjtJQUd2QixjQUEwQjtJQUExQix3RkFBMEI7Ozs7SUFnQy9DLCtCQVFDO0lBQ0MsMkJBS0U7SUFDSixpQkFBTTs7Ozs7SUFlTiwrQkFTQztJQU5DLDJNQUFTLGtDQUEyQixLQUFDO0lBT3JDLDJCQUtFO0lBQ0osaUJBQU07Ozs7SUEvQ1IsK0JBQW9EO0lBQ2xELDZGQVFDO0lBUUQsaUNBYUU7SUFIQSxBQUZBLGtOQUFpQixrQ0FBMkIsS0FBQywrS0FFcEMsMEJBQW1CLElBQUksQ0FBQyxLQUFDO0lBVnBDLGlCQWFFO0lBQ0YsNkZBU0M7SUFRSCxpQkFBTTs7O0lBOUNELGNBQTJCO0lBQTNCLG1EQUEyQjtJQWdCNUIsY0FBdUI7SUFRdkIsQUFGQSxBQUxBLEFBREEsNENBQXVCLDhNQUtyQixlQUNZLHNFQUV5Qzs7SUFNdEQsY0FBMEI7SUFBMUIsa0RBQTBCOzs7SUFpQi9CLCtCQUE4QztJQUM1QyxpQ0FBNkM7SUFDL0MsaUJBQU07O0lBRFEsY0FBbUI7SUFBbkIsaUNBQW1COzs7SUFFakMsMEJBQWdFOzs7SUFZNUQsNkJBQW9EO0lBQ2xELDRCQUdnQjs7Ozs7SUFGWixjQUErQjtJQUMvQixBQURBLG9EQUErQixnRUFDZ0I7OztJQU1qRCxnQ0FBK0Y7SUFBQyxZQUF1RjtJQUFBLGlCQUFPOzs7O0lBQWhKLCtFQUFnRDtJQUFFLGNBQXVGO0lBQXZGLDJPQUF1Rjs7O0lBRHZMLEFBREYsOEJBQXdMLGVBQzNHO0lBQUEsWUFBd0Q7SUFBQSxpQkFBTztJQUMxSSxrSkFBK0Y7SUFDakcsaUJBQU07Ozs7SUFIbUMsb0tBQThJO0lBQzNKLGNBQWdEO0lBQWhELCtFQUFnRDtJQUFDLGNBQXdEO0lBQXhELG1LQUF3RDtJQUN0RyxjQUFlO0lBQWYsdUNBQWU7OztJQUU5QywrQkFBOEM7SUFDNUMsMEJBQW1EO0lBQ3JELGlCQUFNOzs7SUFEYyxjQUFpQjtJQUFqQixvREFBaUI7OztJQURyQyxBQUpBLDBJQUF3TCw2SEFJMUk7Ozs7SUFKMUIsMkNBQW1CO0lBSVYsY0FBZTtJQUFmLG1DQUFlOzs7O0lBcEI5QywrQkFRQztJQUhELEFBREEsMlFBQXlCLElBQUksR0FBRywwQkFBZ0IsS0FBQywwUUFDbEIsSUFBSSxHQUFHLDBCQUFnQixLQUFDO0lBVXZELEFBTkEsOElBQW9ELCtKQU16QjtJQVM3QixpQkFBTTs7Ozs7SUFyQkosK01BQTBKO0lBTTNJLGNBQWtCO0lBQUEsQUFBbEIsd0NBQWtCLDZCQUFpQjs7O0lBVnBELHVEQUFrSDtJQUNoSCxzSEFRQztJQWlCTCxpQkFBOEI7OztJQTFCZ0MsZ0RBQTJCO0lBTzVELGNBQWU7SUFBZixvREFBZTs7O0lBb0IxQywrQkFBcUQ7SUFDbkQsWUFDRjtJQUFBLGlCQUFNOzs7SUFESixjQUNGO0lBREUsZ0dBQ0Y7OztJQTlCRixrQ0FBcUY7SUE0Qm5GLEFBM0JBLHdJQUFrSCwyRUEyQjdEO0lBR3ZELGlCQUFNOzs7SUEvQjZCLG9EQUErQjtJQUNsQyxlQUE0QjtJQUE1QixvREFBNEI7SUEyQnJDLGNBQThCO0lBQTlCLHNEQUE4Qjs7OztJQTFGdkQsK0JBUUM7SUFGQyxpTUFBYSx5QkFBa0IsS0FBQztJQXdEaEMsQUFEQSxBQUhBLEFBakRBLG1GQUFvRCxxRUFpRE4scUVBR1kscUVBQzJCO0lBZ0N2RixpQkFBTTs7O0lBNUZKLEFBRHFDLDhDQUFnQyw0RkFJbkU7SUFJSSxjQUFtQjtJQUFuQiwyQ0FBbUI7SUFpRE0sY0FBYTtJQUFiLHFDQUFhO0lBR3hCLGNBQW9CO0lBQXBCLDRDQUFvQjtJQUM0QixjQUFjO0lBQWQsc0NBQWM7O0FEcEd0RixNQUFNLE9BQU8saUJBQWlCO0lBcUM1QixZQUNVLElBQWdCLEVBQ2hCLE9BQWdCLEVBQ2hCLGdCQUFrQyxFQUNsQyxHQUFzQjtRQUh0QixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLFlBQU8sR0FBUCxPQUFPLENBQVM7UUFDaEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQXhDaEMsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUNmLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFDekIseUJBQW9CLEdBQVksS0FBSyxDQUFDO1FBQ3RDLGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBQ3pCLGVBQVUsR0FBbUIsRUFBRSxDQUFDO1FBQ2hDLGlCQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLGtCQUFhLEdBQVcsTUFBTSxDQUFDO1FBQ3RCLFNBQUksR0FBb0IsRUFBRSxDQUFDO1FBQzNCLFdBQU0sR0FBVyxFQUFFLENBQUM7UUFDcEIsY0FBUyxHQUFXLEVBQUUsQ0FBQztRQUN2QixVQUFLLEdBQVcsRUFBRSxDQUFDO1FBQ25CLFVBQUssR0FBVyxRQUFRLENBQUM7UUFFekIsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFDOUIsMEJBQXFCLEdBQVksS0FBSyxDQUFDO1FBQ3ZDLHVCQUFrQixHQUFXLEVBQUUsQ0FBQztRQUNoQyxzQkFBaUIsR0FBVyxFQUFFLENBQUM7UUFDL0IseUJBQW9CLEdBQXFCLE1BQU0sQ0FBQztRQUVoRCxrQkFBYSxHQUFZLElBQUksQ0FBQztRQUM5QixpQkFBWSxHQUFpQixFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQ3RELGtCQUFhLEdBQVcsU0FBUyxDQUFDO1FBQ2xDLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFFM0IsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFDaEMsZ0JBQVcsR0FBVSxnQkFBZ0IsQ0FBQztRQUV0QyxlQUFVLEdBQVksS0FBSyxDQUFDO1FBQzNCLGFBQVEsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQWF4RCxDQUFDO0lBRUosUUFBUTtJQUNSLENBQUM7SUFHRCxzQkFBc0I7UUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYztZQUFFLE9BQU87UUFFakQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUM7UUFDcEQsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWxELElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQztZQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3pCLE9BQU87UUFDVCxDQUFDO1FBR0QsSUFBSSxtQkFBbUIsR0FBRyxDQUFDLENBQUM7UUFDNUIsSUFBSSxhQUFhLEdBQUcsQ0FBQyxDQUFDO1FBRXRCLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFpQixFQUFFLEVBQUU7WUFDbEYsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDMUMsbUJBQW1CLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUNuQyxhQUFhLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZELENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRXJFLElBQUksQ0FBQyxhQUFhLEdBQUcsR0FBRyxXQUFXLElBQUksQ0FBQztRQUN4QyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDeEQsQ0FBQztJQUVELElBQUksbUJBQW1CO1FBQ3JCLE9BQU87WUFDTCxRQUFRLEVBQUUsSUFBSSxDQUFDLGFBQWE7WUFDNUIsWUFBWSxFQUFFLE9BQU87WUFDckIsWUFBWSxFQUFFLE1BQU07U0FDckIsQ0FBQztJQUNKLENBQUM7SUFFRCxhQUFhLENBQUMsSUFBUyxFQUFFLFVBQW1CO1FBQzFDLE9BQU87WUFDTCxPQUFPLEVBQUUsSUFBSSxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQzVDLGFBQWEsRUFBRSxJQUFJLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7U0FDL0MsQ0FBQztJQUNKLENBQUM7SUFFSCxvQkFBb0I7UUFFbEIsSUFBRyxJQUFJLENBQUMsTUFBTSxFQUNkLENBQUM7WUFDRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUEsRUFBRTtnQkFDM0MsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUE7Z0JBQ2YsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUE7Z0JBQ3BCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUN6RCxDQUFDLENBQUMsQ0FBQTtRQUNOLENBQUM7UUFDRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVGLElBQUksSUFBSSxDQUFDLGNBQWM7WUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFDQyxhQUFhLENBQUMsS0FBSyxFQUFFLE1BQWM7UUFDakMsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4RixDQUFDO0lBRUQsbUJBQW1CLENBQUMsS0FBSyxFQUFFLE1BQWM7UUFDdkMsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDcEcsQ0FBQztJQUNELG1CQUFtQixDQUFDLFFBQVE7UUFDMUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUM7UUFDNUIsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM3SCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLENBQUM7UUFDRCxxQkFBcUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFDRCxrQkFBa0IsQ0FBQyxTQUFrQjtRQUNuQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsU0FBUyxDQUFDO0lBQ3hDLENBQUM7SUFDRCxtQkFBbUIsQ0FBQyxLQUFLO1FBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO1FBQ2xDLHFCQUFxQixDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUNELGNBQWM7UUFDWixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMzQixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN6RSxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQ2hDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNWLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2xCLENBQUM7SUFDSCxDQUFDO0lBQ08sWUFBWSxDQUFDLFFBQThCLEVBQUUsTUFBbUI7UUFDdEUsTUFBTSxlQUFlLEdBQUc7WUFDdEIsSUFBSSxzQkFBc0IsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNqSCxJQUFJLHNCQUFzQixDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQzlHLENBQUM7UUFDRixNQUFNLFlBQVksR0FBRztZQUNuQixJQUFJLHNCQUFzQixDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDbEgsSUFBSSxzQkFBc0IsQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQy9HLENBQUM7UUFDRixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxPQUFPO2FBQ2xDLFFBQVEsRUFBRTthQUNWLG1CQUFtQixDQUFDLE1BQU0sQ0FBQzthQUMzQixhQUFhLENBQUM7WUFDYixHQUFHLENBQUMsSUFBSSxDQUFDLG9CQUFvQixLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUM7WUFDeEYsR0FBRyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO1NBQ25GLENBQUM7YUFDRCxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxhQUFhLENBQUM7WUFDaEMsV0FBVyxFQUFFLElBQUk7WUFDakIsYUFBYSxFQUFFLGtDQUFrQztZQUNqRCxjQUFjLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUU7WUFDMUQsZ0JBQWdCO1lBQ2hCLEtBQUssRUFBRSxNQUFNLENBQUMsV0FBVztTQUMxQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9DLElBQUksSUFBSSxDQUFDLGlCQUFpQjtZQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUM7UUFDMUYsSUFBSSxJQUFJLENBQUMsa0JBQWtCO1lBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQztRQUM3RixJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLGNBQWMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztRQUM1RSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUM5QyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsVUFBVSxDQUFDLElBQUk7UUFDYixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUNELFFBQVE7UUFDTixJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUdELFVBQVUsQ0FBQyxLQUFvQjtRQUM3QixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN6QixDQUFDO2tIQW5NVSxpQkFBaUI7b0VBQWpCLGlCQUFpQjs7Ozs7Ozs7OzJCQWlDakIsd0JBQXdCOzs7Ozs7OztZQWpDeEIsb0dBQUEsc0JBQWtCLElBQUQ7OztZQ1g5Qiw4QkFPQztZQU5ELEFBREssaUlBQVMsMEJBQXNCLEtBQUMsZ0lBQ3RCLDBCQUFzQixLQUFDO1lBT3BDLGlDQVNDO1lBSkMsQUFEQSw2SUFBZSxvQkFBZ0IsS0FBQyxvSEFDdkIsb0JBQWdCLEtBQUM7WUFLMUIsa0VBQXdIO1lBQ3hILDhCQUE2RztZQUkzRyxBQUhBLDhEQUFxRCxzR0FHOUI7WUFNekIsaUJBQU07O1lBQ04sK0JBUUM7WUFDQywyQkFLRTtZQUdSLEFBREUsQUFERSxpQkFBTSxFQUNGLEVBQ0Y7WUFDTixxSEFBNkI7OztZQTdDM0Isb0lBR0U7WUFRQSxjQUF3QjtZQUV4QixBQUZBLDBDQUF3Qiw4Q0FFZ0I7O1lBRWdELGVBQThCO1lBQTlCLG9GQUE4QjtZQUNuRyxjQUF5RjtZQUF6RixrS0FBeUY7WUFDekYsY0FBcUI7WUFBQSxBQUFyQix3Q0FBcUIseUJBQWE7WUFZbkQsZUFBcUU7WUFBckUscUdBQXFFOzs7aUZEckI5RCxpQkFBaUI7Y0FON0IsU0FBUzsyQkFDRSxjQUFjO2dJQWFmLElBQUk7a0JBQVosS0FBSztZQUNHLE1BQU07a0JBQWQsS0FBSztZQUNHLFNBQVM7a0JBQWpCLEtBQUs7WUFDRyxLQUFLO2tCQUFiLEtBQUs7WUFDRyxLQUFLO2tCQUFiLEtBQUs7WUFDRyxjQUFjO2tCQUF0QixLQUFLO1lBQ0csWUFBWTtrQkFBcEIsS0FBSztZQUNHLHFCQUFxQjtrQkFBN0IsS0FBSztZQUNHLGtCQUFrQjtrQkFBMUIsS0FBSztZQUNHLGlCQUFpQjtrQkFBekIsS0FBSztZQUNHLG9CQUFvQjtrQkFBNUIsS0FBSztZQUNHLE1BQU07a0JBQWQsS0FBSztZQUNHLGFBQWE7a0JBQXJCLEtBQUs7WUFDRyxZQUFZO2tCQUFwQixLQUFLO1lBQ0csYUFBYTtrQkFBckIsS0FBSztZQUNHLFNBQVM7a0JBQWpCLEtBQUs7WUFDRyxxQkFBcUI7a0JBQTdCLEtBQUs7WUFDRyxjQUFjO2tCQUF0QixLQUFLO1lBQ0csV0FBVztrQkFBbkIsS0FBSztZQUNHLFlBQVk7a0JBQXBCLEtBQUs7WUFDRyxVQUFVO2tCQUFsQixLQUFLO1lBQ0ksUUFBUTtrQkFBakIsTUFBTTtZQUNpQyxhQUFhO2tCQUFwRCxTQUFTO21CQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7WUFDVSxjQUFjO2tCQUE3RCxTQUFTO21CQUFDLGdCQUFnQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtZQUNFLGNBQWM7a0JBQTdELFNBQVM7bUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO1lBQ1QsUUFBUTtrQkFBNUMsU0FBUzttQkFBQyx3QkFBd0I7WUFDZSxVQUFVO2tCQUEzRCxZQUFZO21CQUFDLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7WUE2SmhELFVBQVU7a0JBRFQsWUFBWTttQkFBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUM7O2tGQTlMMUIsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29ubmVjdGlvblBvc2l0aW9uUGFpciwgT3ZlcmxheSwgT3ZlcmxheUNvbmZpZywgT3ZlcmxheVJlZiB9IGZyb20gXCJAYW5ndWxhci9jZGsvb3ZlcmxheVwiO1xuaW1wb3J0IHsgVGVtcGxhdGVQb3J0YWwgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL3BvcnRhbFwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYsIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwibWlzLWRyb3Bkb3duXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vZHJvcGRvd24uY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL2Ryb3Bkb3duLmNvbXBvbmVudC5zY3NzXCJdLFxuICBcbn0pXG5leHBvcnQgY2xhc3MgRHJvcGRvd25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBpc09wZW4gPSBmYWxzZTtcbiAgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1NlYXJjaElucHV0Rm9jdXNlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBzZWFyY2hJbnB1dDogc3RyaW5nID0gXCJcIjtcbiAgc2VhcmNoRGF0YTogRHJvcGRvd25JdGVtW10gPSBbXTtcbiAgdmlzaWJsZUl0ZW1zID0gMTA7XG4gIGR5bmFtaWNIZWlnaHQ6IHN0cmluZyA9IFwiYXV0b1wiO1xuICBASW5wdXQoKSBkYXRhOiBEcm9wZG93bkl0ZW1bXSAgPSBbXTtcbiAgQElucHV0KCkgaGVpZ2h0OiBzdHJpbmcgPSBcIlwiO1xuICBASW5wdXQoKSBhcmlhTGFiZWw6IHN0cmluZyA9IFwiXCI7XG4gIEBJbnB1dCgpIHdpZHRoOiBzdHJpbmcgPSBcIlwiO1xuICBASW5wdXQoKSBsYWJlbDogc3RyaW5nID0gXCJTZWxlY3RcIjtcbiAgQElucHV0KCkgaXRlbVNpemVGb3JDZGs6IG51bWJlcjtcbiAgQElucHV0KCkgc2hvd09ubHlJY29uOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGhpZ2xpZ2h0U2VsZWN0ZWRWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBkcm9wZG93bkxpc3RIZWlnaHQ6IHN0cmluZyA9IFwiXCI7XG4gIEBJbnB1dCgpIGRyb3Bkb3duTGlzdFdpZHRoOiBzdHJpbmcgPSBcIlwiO1xuICBASW5wdXQoKSBkcm9wZG93bkxpc3RQb3NpdGlvbjogXCJMZWZ0XCIgfCBcIlJpZ2h0XCIgPSBcIkxlZnRcIjtcbiAgQElucHV0KCkgY29uZmlnXG4gIEBJbnB1dCgpIHNlYXJjaEVuYWJsZWQ6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBzZWxlY3RlZEl0ZW06IERyb3Bkb3duSXRlbSA9IHsgdmFsdWU6IFwiXCIsIGxhYmVsOiBcIlwiIH07XG4gIEBJbnB1dCgpIG5vRGF0YU1lc3NhZ2U6IHN0cmluZyA9IFwiTm8gRGF0YVwiO1xuICBASW5wdXQoKSBtdWx0aUxpbmU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgYWRkaXRpb25hbEluZm9NZXNzYWdlIDogc3RyaW5nO1xuICBASW5wdXQoKSBzY3JvbGxJbnRvVmlldzogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzZWFyY2hMYWJlbDpzdHJpbmcgPSBcIlNlYXJjaCBLZXl3b3JkXCI7XG4gIEBJbnB1dCgpIGN1c3RvbVN0eWxlczogIHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG4gIEBJbnB1dCgpIGFjdGl2ZUl0ZW06IGJvb2xlYW4gPSBmYWxzZTtcbiAgQE91dHB1dCgpIG9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQFZpZXdDaGlsZChcInNlbGVjdFwiLCB7IHN0YXRpYzogZmFsc2UgfSkgc2VsZWN0RWxlbWVudDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZChcInBvcHVwQ29udGFpbmVyXCIsIHsgc3RhdGljOiBmYWxzZSB9KSBwb3B1cENvbnRhaW5lcjogVGVtcGxhdGVSZWY8RWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoXCJpdGVtc0NvbnRhaW5lclwiLCB7IHN0YXRpYzogZmFsc2UgfSkgaXRlbXNDb250YWluZXI6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0KSB2aWV3UG9ydDogQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0O1xuICBAQ29udGVudENoaWxkKFwibWlzQ3VzdG9tSXRlbVwiLCB7IHN0YXRpYzogZmFsc2UgfSkgY3VzdG9tSXRlbTogVGVtcGxhdGVSZWY8RWxlbWVudD47XG4gIHByaXZhdGUgb3ZlcmxheVJlZjogT3ZlcmxheVJlZjtcbiAgXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZVJlZjogRWxlbWVudFJlZiwgXG4gICAgcHJpdmF0ZSBvdmVybGF5OiBPdmVybGF5LCBcbiAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmXG4gICkge31cbiAgXG4gIG5nT25Jbml0KCkge1xuICB9XG5cblxuICBtZWFzdXJlQW5kVXBkYXRlSGVpZ2h0KCkge1xuICAgIGlmICghdGhpcy5pc09wZW4gfHwgIXRoaXMuaXRlbXNDb250YWluZXIpIHJldHVybjtcblxuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuaXRlbXNDb250YWluZXIubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCBpdGVtcyA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCcuaXRlbScpO1xuICAgIFxuICAgIGlmIChpdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuZHluYW1pY0hlaWdodCA9IFwiNTBweFwiO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIFxuICAgIGxldCB0b3RhbE1lYXN1cmVkSGVpZ2h0ID0gMDtcbiAgICBsZXQgbWF4SXRlbUhlaWdodCA9IDA7XG4gICAgXG4gICAgQXJyYXkuZnJvbShpdGVtcykuc2xpY2UoMCwgTWF0aC5taW4oOCwgaXRlbXMubGVuZ3RoKSkuZm9yRWFjaCgoaXRlbTogSFRNTEVsZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IHJlY3QgPSBpdGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgdG90YWxNZWFzdXJlZEhlaWdodCArPSByZWN0LmhlaWdodDtcbiAgICAgIG1heEl0ZW1IZWlnaHQgPSBNYXRoLm1heChtYXhJdGVtSGVpZ2h0LCByZWN0LmhlaWdodCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBmaW5hbEhlaWdodCA9IE1hdGgubWF4KDUwLCBNYXRoLm1pbih0b3RhbE1lYXN1cmVkSGVpZ2h0LCAzMjApKTtcbiAgICBcbiAgICB0aGlzLmR5bmFtaWNIZWlnaHQgPSBgJHtmaW5hbEhlaWdodH1weGA7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnREYXRhKCk6IERyb3Bkb3duSXRlbVtdIHtcbiAgICByZXR1cm4gdGhpcy5zZWFyY2hJbnB1dCA/IHRoaXMuc2VhcmNoRGF0YSA6IHRoaXMuZGF0YTtcbiAgfVxuXG4gIGdldCBpdGVtc0NvbnRhaW5lclN0eWxlKCk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgIHJldHVybiB7XG4gICAgICAnaGVpZ2h0JzogdGhpcy5keW5hbWljSGVpZ2h0LFxuICAgICAgJ21heC1oZWlnaHQnOiAnMzIwcHgnLFxuICAgICAgJ21pbi1oZWlnaHQnOiAnNTBweCdcbiAgICB9O1xuICB9XG5cbiAgZ2V0SWNvblN0eWxlcyhpdGVtOiBhbnksIGFjdGl2ZUl0ZW06IGJvb2xlYW4pOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgJ2NvbG9yJzogaXRlbSAmJiBhY3RpdmVJdGVtID8gJyMwOTM3QjInIDogJycsXG4gICAgICAnZm9udC13ZWlnaHQnOiBpdGVtICYmIGFjdGl2ZUl0ZW0gPyAnNzAwJyA6ICcnXG4gICAgfTtcbiAgfVxuXG5zZXRVcEFzeW5jRGF0YVNlYXJjaCgpXG57XG4gIGlmKHRoaXMuY29uZmlnKVxuICB7XG4gICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5jb25maWcuZGF0YVN0cmVhbSgpLnBpcGUoKS5zdWJzY3JpYmUocmVzPT4ge1xuICAgICAgICAgIHRoaXMuZGF0YSA9IHJlc1xuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLm1lYXN1cmVBbmRVcGRhdGVIZWlnaHQoKSwgMTAwKTtcbiAgICAgIH0pXG4gIH1cbiAgY29uc3QgaW5kZXggPSB0aGlzLmRhdGEuZmluZEluZGV4KChkYXRhSXRlbSkgPT4gZGF0YUl0ZW0udmFsdWUgPT09IHRoaXMuc2VsZWN0ZWRJdGVtLnZhbHVlKTtcbiAgaWYgKHRoaXMuc2Nyb2xsSW50b1ZpZXcpXG4gICAgdGhpcy52aWV3UG9ydC5zY3JvbGxUb0luZGV4KGluZGV4LCAnc21vb3RoJyk7XG59XG4gIGZpbHRlckJ5VmFsdWUoYXJyYXksIHN0cmluZzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFycmF5LmZpbHRlcihvID0+IG8ubGFiZWwudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzdHJpbmcudG9Mb3dlckNhc2UoKS50cmltKCkpKTtcbiAgfVxuXG4gIGZpbHRlckJ5UHJpbWFyeVRleHQoYXJyYXksIHN0cmluZzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFycmF5LmZpbHRlcihvID0+IG8ubGFiZWwucHJpbWFyeVRleHQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzdHJpbmcudG9Mb3dlckNhc2UoKS50cmltKCkpKTtcbiAgfVxuICBzZWFyY2hJbnB1dE9uQ2hhbmdlKG5ld1ZhbHVlKSB7XG4gICAgdGhpcy5zZWFyY2hJbnB1dCA9IG5ld1ZhbHVlO1xuICAgIGlmIChuZXdWYWx1ZSkge1xuICAgICAgdGhpcy5zZWFyY2hEYXRhID0gdGhpcy5tdWx0aUxpbmUgPyB0aGlzLmZpbHRlckJ5UHJpbWFyeVRleHQodGhpcy5kYXRhLCBuZXdWYWx1ZSkgOiB0aGlzLmZpbHRlckJ5VmFsdWUodGhpcy5kYXRhLCBuZXdWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VhcmNoRGF0YSA9IFtdO1xuICAgICAgdGhpcy5zZWFyY2hJbnB1dCA9IFwiXCI7XG4gICAgfVxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0aGlzLm1lYXN1cmVBbmRVcGRhdGVIZWlnaHQoKSk7XG4gIH1cbiAgc2VhcmNoSW5wdXRGb2N1c2VkKGlzRm9jdXNlZDogYm9vbGVhbikge1xuICAgIHRoaXMuaXNTZWFyY2hJbnB1dEZvY3VzZWQgPSBpc0ZvY3VzZWQ7XG4gIH1cbiAgc2VhcmNoSW5wdXRDYW5jZWxlZChldmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuc2VhcmNoSW5wdXQgPSBcIlwiO1xuICAgIHRoaXMuaXNTZWFyY2hJbnB1dEZvY3VzZWQgPSBmYWxzZTtcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gdGhpcy5tZWFzdXJlQW5kVXBkYXRlSGVpZ2h0KCkpO1xuICB9XG4gIHRvZ2dsZURyb3Bkb3duKCkge1xuICAgIHRoaXMuaXNPcGVuID0gIXRoaXMuaXNPcGVuO1xuICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgdGhpcy5vcGVuRHJvcGRvd24odGhpcy5wb3B1cENvbnRhaW5lciwgdGhpcy5zZWxlY3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMubWVhc3VyZUFuZFVwZGF0ZUhlaWdodCgpO1xuICAgICAgfSwgMTAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vbkNhbmNlbCgpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIG9wZW5Ecm9wZG93bih0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8RWxlbWVudD4sIG9yaWdpbjogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICBjb25zdCBwb3NpdGlvbnNCb3R0b20gPSBbXG4gICAgICBuZXcgQ29ubmVjdGlvblBvc2l0aW9uUGFpcih7IG9yaWdpblg6IFwic3RhcnRcIiwgb3JpZ2luWTogXCJib3R0b21cIiB9LCB7IG92ZXJsYXlYOiBcInN0YXJ0XCIsIG92ZXJsYXlZOiBcInRvcFwiIH0sIDAsIDQpLFxuICAgICAgbmV3IENvbm5lY3Rpb25Qb3NpdGlvblBhaXIoeyBvcmlnaW5YOiBcImVuZFwiLCBvcmlnaW5ZOiBcImJvdHRvbVwiIH0sIHsgb3ZlcmxheVg6IFwiZW5kXCIsIG92ZXJsYXlZOiBcInRvcFwiIH0sIDAsIDQpXG4gICAgXTtcbiAgICBjb25zdCBwb3NpdGlvbnNUb3AgPSBbXG4gICAgICBuZXcgQ29ubmVjdGlvblBvc2l0aW9uUGFpcih7IG9yaWdpblg6IFwic3RhcnRcIiwgb3JpZ2luWTogXCJ0b3BcIiB9LCB7IG92ZXJsYXlYOiBcInN0YXJ0XCIsIG92ZXJsYXlZOiBcImJvdHRvbVwiIH0sIDAsIC00KSxcbiAgICAgIG5ldyBDb25uZWN0aW9uUG9zaXRpb25QYWlyKHsgb3JpZ2luWDogXCJlbmRcIiwgb3JpZ2luWTogXCJ0b3BcIiB9LCB7IG92ZXJsYXlYOiBcImVuZFwiLCBvdmVybGF5WTogXCJib3R0b21cIiB9LCAwLCAtNClcbiAgICBdO1xuICAgIGNvbnN0IHBvc2l0aW9uU3RyYXRlZ3kgPSB0aGlzLm92ZXJsYXlcbiAgICAgIC5wb3NpdGlvbigpXG4gICAgICAuZmxleGlibGVDb25uZWN0ZWRUbyhvcmlnaW4pXG4gICAgICAud2l0aFBvc2l0aW9ucyhbXG4gICAgICAgIC4uLih0aGlzLmRyb3Bkb3duTGlzdFBvc2l0aW9uID09PSBcIlJpZ2h0XCIgPyBwb3NpdGlvbnNCb3R0b20ucmV2ZXJzZSgpIDogcG9zaXRpb25zQm90dG9tKSxcbiAgICAgICAgLi4uKHRoaXMuZHJvcGRvd25MaXN0UG9zaXRpb24gPT09IFwiUmlnaHRcIiA/IHBvc2l0aW9uc1RvcC5yZXZlcnNlKCkgOiBwb3NpdGlvbnNUb3ApXG4gICAgICBdKVxuICAgICAgLndpdGhQdXNoKHRydWUpO1xuICAgIGNvbnN0IGNvbmZpZ3MgPSBuZXcgT3ZlcmxheUNvbmZpZyh7XG4gICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcbiAgICAgIGJhY2tkcm9wQ2xhc3M6IFwiY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BcIixcbiAgICAgIHNjcm9sbFN0cmF0ZWd5OiB0aGlzLm92ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCksXG4gICAgICBwb3NpdGlvblN0cmF0ZWd5LFxuICAgICAgd2lkdGg6IG9yaWdpbi5jbGllbnRXaWR0aFxuICAgIH0pO1xuICAgIHRoaXMub3ZlcmxheVJlZiA9IHRoaXMub3ZlcmxheS5jcmVhdGUoY29uZmlncyk7XG4gICAgaWYgKHRoaXMuZHJvcGRvd25MaXN0V2lkdGgpIHRoaXMub3ZlcmxheVJlZi51cGRhdGVTaXplKHsgd2lkdGg6IHRoaXMuZHJvcGRvd25MaXN0V2lkdGggfSk7XG4gICAgaWYgKHRoaXMuZHJvcGRvd25MaXN0SGVpZ2h0KSB0aGlzLm92ZXJsYXlSZWYudXBkYXRlU2l6ZSh7IGhlaWdodDogdGhpcy5kcm9wZG93bkxpc3RIZWlnaHQgfSk7XG4gICAgdGhpcy5vdmVybGF5UmVmLmF0dGFjaChuZXcgVGVtcGxhdGVQb3J0YWwodGVtcGxhdGUsIHRoaXMudmlld0NvbnRhaW5lclJlZikpO1xuICAgIHRoaXMub3ZlcmxheVJlZi5iYWNrZHJvcENsaWNrKCkuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICB0aGlzLm9uQ2FuY2VsKCk7XG4gICAgfSk7XG4gIH1cbiAgc2VsZWN0SXRlbShpdGVtKSB7XG4gICAgdGhpcy5vbkNoYW5nZS5lbWl0KGl0ZW0pOyAgXG4gICAgdGhpcy50b2dnbGVEcm9wZG93bigpO1xuICB9XG4gIG9uQ2FuY2VsKCkge1xuICAgIHRoaXMuaXNTZWFyY2hJbnB1dEZvY3VzZWQgPSBmYWxzZTtcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMub3ZlcmxheVJlZj8uZGV0YWNoKCk7XG4gICAgdGhpcy5zZWFyY2hJbnB1dCA9IFwiXCI7XG4gIH1cbiAgXG4gIEBIb3N0TGlzdGVuZXIoXCJrZXl1cC5lc2NcIiwgWyckZXZlbnQnXSlcbiAgY2xvc2VPbkVzYyhldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIHRoaXMub25DYW5jZWwoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG59XG5leHBvcnQgaW50ZXJmYWNlIERyb3Bkb3duSXRlbSB7XG4gIGxhYmVsOiBhbnkgO1xuICB2YWx1ZTogc3RyaW5nO1xuICBpY29uPzogc3RyaW5nO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGN1c3RvbUljb24/OiBzdHJpbmdcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uSXRlbUxhYmVsIHtcbiAgcHJpbWFyeVRleHQgPzogc3RyaW5nO1xuICBzZWNvbmRhcnlUZXh0ID86IHN0cmluZztcbn1cbiIsIjxkaXYgKGNsaWNrKT1cInNldFVwQXN5bmNEYXRhU2VhcmNoKClcIlxuKGtleXVwLmVudGVyKT1cInNldFVwQXN5bmNEYXRhU2VhcmNoKClcIlxuICBjbGFzcz1cIm1haW4tY29udGFpbmVyXCJcbiAgW25nU3R5bGVdPVwie1xuICAgIGhlaWdodDogaGVpZ2h0Lmxlbmd0aCA+IDAgPyBoZWlnaHQgOiAnJyxcbiAgICB3aWR0aDogd2lkdGgubGVuZ3RoID4gMCA/IHdpZHRoIDogJydcbiAgfVwiXG4+XG4gIDxkaXZcbiAgICBjbGFzcz1cImRyb3Bkb3duXCJcbiAgICAjc2VsZWN0XG4gICAgdGFiaW5kZXg9XCIwXCJcbiAgICAoa2V5dXAuZW50ZXIpPVwidG9nZ2xlRHJvcGRvd24oKVwiXG4gICAgKGNsaWNrKT1cInRvZ2dsZURyb3Bkb3duKClcIlxuICAgIFtuZ1N0eWxlXT1cImN1c3RvbVN0eWxlc1wiXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIlxuICAgIFtuZ0NsYXNzXT1cImlzT3BlbiA/ICdkcm9wZG93bi1wb3J0JzogJydcIlxuICA+XG4gICAgPGltZyBjbGFzcz1cImltZy1jb250YWluZXJcIiBbd2lkdGhdPVwiMTZcIiBbaGVpZ2h0XT1cIjE2XCIgW3NyY109XCJzZWxlY3RlZEl0ZW0/LmN1c3RvbUljb25cIiAqbmdJZj1cInNlbGVjdGVkSXRlbT8uY3VzdG9tSWNvblwiPlxuICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiIFtuZ1N0eWxlXT1cInt3aWR0aDogc2VsZWN0ZWRJdGVtPy5jdXN0b21JY29uID8gJ2NhbGMoMTAwJSAtIDQ4cHgpJyA6ICdjYWxjKDEwMCUgLSAzMnB4KSd9XCI+XG4gICAgICA8cCBjbGFzcz1cInRleHRcIiAqbmdJZj1cIiFzaG93T25seUljb247IGVsc2Ugc2hvd0ljb25cIj5cbiAgICAgICAge3sgbXVsdGlMaW5lID8gc2VsZWN0ZWRJdGVtPy5sYWJlbD8ucHJpbWFyeVRleHQgOiBzZWxlY3RlZEl0ZW0/LmxhYmVsIHx8IGxhYmVsIH19XG4gICAgICA8L3A+XG4gICAgICA8bmctdGVtcGxhdGUgI3Nob3dJY29uPlxuICAgICAgICA8cCBjbGFzcz1cInRleHRcIiAqbmdJZj1cIiFzZWxlY3RlZEl0ZW0/Lmljb25cIj5cbiAgICAgICAgICB7eyBsYWJlbCB9fVxuICAgICAgICA8L3A+XG4gICAgICAgIDxpbWcgY2xhc3M9XCJpY29uXCIgKm5nSWY9XCIhIXNlbGVjdGVkSXRlbT8uaWNvblwiIFtzcmNdPVwic2VsZWN0ZWRJdGVtPy5pY29uXCIgYWx0PVwibm8gaW1nXCIgLz5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gICAgPHN2Z1xuICAgICAgY2xhc3M9XCJoYW5kbGVcIlxuICAgICAgW25nU3R5bGVdPVwieyB0cmFuc2Zvcm06IGlzT3BlbiA/ICdyb3RhdGUoMTgwZGVnKScgOiAncm90YXRlKDBkZWcpJyB9XCJcbiAgICAgIHdpZHRoPVwiMjBcIlxuICAgICAgaGVpZ2h0PVwiMjBcIlxuICAgICAgdmlld0JveD1cIjAgMCAyMCAyMFwiXG4gICAgICBmaWxsPVwibm9uZVwiXG4gICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICA+XG4gICAgICA8cGF0aFxuICAgICAgICBmaWxsLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgY2xpcC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgIGQ9XCJNMTMuODI1IDcuMTU4NDVMMTAgMTAuOTc1MUw2LjE3NSA3LjE1ODQ1TDUgOC4zMzM0NUwxMCAxMy4zMzM0TDE1IDguMzMzNDVMMTMuODI1IDcuMTU4NDVaXCJcbiAgICAgICAgZmlsbD1cIiMxODFGMzNcIlxuICAgICAgLz5cbiAgICA8L3N2Zz5cbiAgPC9kaXY+XG48L2Rpdj5cbjxuZy10ZW1wbGF0ZSAjcG9wdXBDb250YWluZXI+XG4gIDxkaXZcbiAgICBjbGFzcz1cInBvcHVwLWNvbnRhaW5lclwiIGNka1RyYXBGb2N1cyBbY2RrVHJhcEZvY3VzQXV0b0NhcHR1cmVdPVwidHJ1ZVwiIHRhYmluZGV4PVwiMFwiXG4gICAgW25nU3R5bGVdPVwie1xuICAgICAgaGVpZ2h0OiBkcm9wZG93bkxpc3RIZWlnaHQsXG4gICAgICB3aWR0aDogZHJvcGRvd25MaXN0V2lkdGhcbiAgICB9XCJcbiAgICAoa2V5dXAuZXNjKT1cImNsb3NlT25Fc2MoJGV2ZW50KVwiXG4gICAgYXJpYS1sYWJlbD1cImRyb3Bkb3duXCJcbiAgPlxuICAgIDxkaXYgKm5nSWY9XCJzZWFyY2hFbmFibGVkXCIgY2xhc3M9XCJzZWFyY2gtY29udGFpbmVyXCI+XG4gICAgICA8c3ZnXG4gICAgICAgICpuZ0lmPVwiIWlzU2VhcmNoSW5wdXRGb2N1c2VkXCJcbiAgICAgICAgY2xhc3M9XCJzZWFyY2gtaWNvblwiXG4gICAgICAgIHdpZHRoPVwiMjRcIlxuICAgICAgICBoZWlnaHQ9XCIyNFwiXG4gICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxuICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgPlxuICAgICAgICA8cGF0aFxuICAgICAgICAgIGZpbGwtcnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgIGNsaXAtcnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgIGQ9XCJNNC4yMTUwOCAxMS4xNDU2QzQuMjE1MDggNy4zMTc5IDcuMzM3MjIgNC4yMTE2NSAxMS4xOTI2IDQuMjExNjVDMTUuMDQ4IDQuMjExNjUgMTguMTcwMiA3LjMxNzkgMTguMTcwMiAxMS4xNDU2QzE4LjE3MDIgMTIuNjkzMSAxNy42NTk5IDE0LjEyMjYgMTYuNzk3MiAxNS4yNzY3TDE1LjM2ODUgMTYuNzAxM0MxNC4yMDQ0IDE3LjU2NjggMTIuNzU5IDE4LjA3OTYgMTEuMTkyNiAxOC4wNzk2QzcuMzM3MjIgMTguMDc5NiA0LjIxNTA4IDE0Ljk3MzQgNC4yMTUwOCAxMS4xNDU2Wk0xNS45NDIxIDE3Ljc4MzVDMTQuNjAyMSAxOC43MzI5IDEyLjk2MjcgMTkuMjkxMyAxMS4xOTI2IDE5LjI5MTNDNi42Njk3NyAxOS4yOTEzIDMgMTUuNjQ2MSAzIDExLjE0NTZDMyA2LjY0NTEyIDYuNjY5NzcgMyAxMS4xOTI2IDNDMTUuNzE1NSAzIDE5LjM4NTIgNi42NDUxMiAxOS4zODUyIDExLjE0NTZDMTkuMzg1MiAxMi45MzcxIDE4LjgwMzcgMTQuNTkzMSAxNy44MTg0IDE1LjkzNzVMMTkuODM2MSAxNy40MDQ4QzIwLjY3MDUgMTcuOTEyIDIxLjc1NTQgMTguNjU0MyAyMC4yNDU0IDIwLjIxNUMxOC43MzUzIDIxLjc3NTYgMTguMDA5OSAyMC42NjYzIDE3LjQ5OTEgMTkuODM2NEwxNS45NDIxIDE3Ljc4MzVaXCJcbiAgICAgICAgICBmaWxsPVwiIzZBNzM3RFwiXG4gICAgICAgIC8+XG4gICAgICA8L3N2Zz5cbiAgICAgIDxpbnB1dFxuICAgICAgICBbbmdNb2RlbF09XCJzZWFyY2hJbnB1dFwiXG4gICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICBwYWRkaW5nTGVmdDogaXNTZWFyY2hJbnB1dEZvY3VzZWQgPyAnMTJweCcgOiAnNDVweCcsXG4gICAgICAgICAgYm9yZGVyOiBpc1NlYXJjaElucHV0Rm9jdXNlZCA/ICcxcHggc29saWQgIzA5MzdCMicgOiAnMXB4IHNvbGlkICNlMGUwZTAnLFxuICAgICAgICAgIHBhZGRpbmdSaWdodDogaXNTZWFyY2hJbnB1dEZvY3VzZWQgPyAnNDVweCcgOiAnMTBweCdcbiAgICAgICAgfVwiXG4gICAgICAgIFt0YWJJbmRleF09XCIwXCJcbiAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2VhcmNoSW5wdXRPbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cImlzU2VhcmNoSW5wdXRGb2N1c2VkID8gJycgOiBzZWFyY2hMYWJlbFwiXG4gICAgICAgIChmb2N1cyk9XCJzZWFyY2hJbnB1dEZvY3VzZWQodHJ1ZSlcIlxuICAgICAgICBjbGFzcz1cInNlYXJjaC1pbnB1dFwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwic2VhcmNoTGFiZWxcIlxuICAgICAgLz5cbiAgICAgIDxzdmdcbiAgICAgICAgKm5nSWY9XCJpc1NlYXJjaElucHV0Rm9jdXNlZFwiXG4gICAgICAgIGNsYXNzPVwiY2FuY2VsLWljb25cIlxuICAgICAgICAoY2xpY2spPVwic2VhcmNoSW5wdXRDYW5jZWxlZCgkZXZlbnQpXCJcbiAgICAgICAgd2lkdGg9XCIyNFwiXG4gICAgICAgIGhlaWdodD1cIjI0XCJcbiAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiXG4gICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICA+XG4gICAgICAgIDxwYXRoXG4gICAgICAgICAgZmlsbC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgY2xpcC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgZD1cIk04Ljg3NDQ2IDcuMzIxNDRDOC40NDU4OCA2Ljg5Mjg1IDcuNzUxIDYuODkyODUgNy4zMjI0MiA3LjMyMTQ0QzYuODkzODMgNy43NTAwMiA2Ljg5MzgzIDguNDQ0OSA3LjMyMjQyIDguODczNDlMMTAuNDQ4OCAxMS45OTk5TDcuMzIzNTcgMTUuMTI1MkM2Ljg5NDk4IDE1LjU1MzggNi44OTQ5OCAxNi4yNDg2IDcuMzIzNTcgMTYuNjc3MkM3Ljc1MjE1IDE3LjEwNTggOC40NDcwMyAxNy4xMDU4IDguODc1NjEgMTYuNjc3MkwxMi4wMDA5IDEzLjU1MkwxNS4xMjYxIDE2LjY3NzJDMTUuNTU0NyAxNy4xMDU4IDE2LjI0OTYgMTcuMTA1OCAxNi42NzgxIDE2LjY3NzJDMTcuMTA2NyAxNi4yNDg2IDE3LjEwNjcgMTUuNTUzNyAxNi42NzgxIDE1LjEyNTFMMTMuNTUyOSAxMS45OTk5TDE2LjY3OTMgOC44NzM1NEMxNy4xMDc5IDguNDQ0OTYgMTcuMTA3OSA3Ljc1MDA4IDE2LjY3OTMgNy4zMjE1QzE2LjI1MDcgNi44OTI5MSAxNS41NTU4IDYuODkyOTEgMTUuMTI3MyA3LjMyMTVMMTIuMDAwOSAxMC40NDc5TDguODc0NDYgNy4zMjE0NFpcIlxuICAgICAgICAgIGZpbGw9XCIjNkE3MzdEXCJcbiAgICAgICAgLz5cbiAgICAgIDwvc3ZnPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJzdGF0dXMtY29udGFpbmVyXCIgKm5nSWY9XCJsb2FkaW5nXCI+XG4gICAgICA8bWlzLWxvYWRlciBbbW9iaWxlVmlld109XCJ0cnVlXCI+PC9taXMtbG9hZGVyPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgdGFiaW5kZXg9XCItMVwiICpuZ0lmPVwiIXNlYXJjaEVuYWJsZWRcIiBjZGtGb2N1c0luaXRpYWw+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIml0ZW1zXCIgI2l0ZW1zQ29udGFpbmVyIFtuZ1N0eWxlXT1cIml0ZW1zQ29udGFpbmVyU3R5bGVcIiAqbmdJZj1cIiFsb2FkaW5nIFwiPiAgICBcbiAgICAgIDxjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQgKm5nSWY9XCJjdXJyZW50RGF0YS5sZW5ndGggPiAwXCIgW2l0ZW1TaXplXT1cIml0ZW1TaXplRm9yQ2RrXCIgY2xhc3M9XCJkcm9wZG93bi12aWV3cG9ydFwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiaXRlbVwiXG4gICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgJ2l0ZW0tZGlzYWJsZWQnOiBpdGVtLmRpc2FibGVkLCAnaXRlbS1zZWxlY3RlZCc6IChoaWdsaWdodFNlbGVjdGVkVmFsdWUgJiYgaXRlbS52YWx1ZSA9PT0gc2VsZWN0ZWRJdGVtPy52YWx1ZSksICdpY29uLW9ubHknIDogc2hvd09ubHlJY29uIH1cIlxuICAgICAgICAoY2xpY2spPVwiaXRlbS5kaXNhYmxlZCA/IG51bGwgOiBzZWxlY3RJdGVtKGl0ZW0pXCJcbiAgICAgICAgKGtleXVwLmVudGVyKT1cIml0ZW0uZGlzYWJsZWQgPyBudWxsIDogc2VsZWN0SXRlbShpdGVtKVwiXG4gICAgICAgICpjZGtWaXJ0dWFsRm9yPVwibGV0IGl0ZW0gb2YgY3VycmVudERhdGE7XCJcbiAgICAgICAgdGFiSW5kZXg9XCIwXCJcbiAgICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3VzdG9tSXRlbTsgZWxzZSBzdGFuZGFyZEl0ZW1cIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImN1c3RvbUl0ZW1cIlxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGl0ZW0gfVwiXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNzdGFuZGFyZEl0ZW0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCIgKm5nSWY9XCIhc2hvd09ubHlJY29uXCIgW25nU3R5bGVdPVwieyB3aWR0aDogaXRlbS5pY29uID8gJzkwJScgOiAnMTAwJScsICdkaXNwbGF5JzogbXVsdGlMaW5lID8gJ2ZsZXgnOiAnaW5oZXJpdCcsICdmbGV4LWRpcmVjdGlvbic6IG11bHRpTGluZSA/ICdjb2x1bW4nOiAnaW5oZXJpdCcgfVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwcmltYXJ5VGV4dFwiIFtuZ1N0eWxlXT1cImdldEljb25TdHlsZXMoaXRlbS5pY29uLCBhY3RpdmVJdGVtKVwiPnt7IG11bHRpTGluZSA/IGl0ZW0/LmxhYmVsPy5wcmltYXJ5VGV4dCA6IGl0ZW0/LmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZWNvbmRhcnlUZXh0XCIgKm5nSWY9XCJtdWx0aUxpbmVcIiBbbmdTdHlsZV09XCJnZXRJY29uU3R5bGVzKGl0ZW0uaWNvbiwgYWN0aXZlSXRlbSlcIj4ge3sgaXRlbT8ubGFiZWw/LnNlY29uZGFyeVRleHQgPyBpdGVtPy5sYWJlbD8uc2Vjb25kYXJ5VGV4dCA6IGFkZGl0aW9uYWxJbmZvTWVzc2FnZSAgfX0gPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uLWNvbnRhaW5lclwiICpuZ0lmPVwiaXRlbS5pY29uXCI+XG4gICAgICAgICAgICA8aW1nIGNsYXNzPVwiaWNvblwiIFtzcmNdPVwiaXRlbS5pY29uXCIgYWx0PVwibm8gaW1nXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuICAgICAgPGRpdiBjbGFzcz1cIm5vRGF0YVwiICpuZ0lmPVwiY3VycmVudERhdGEubGVuZ3RoID09PSAwXCI+XG4gICAgICAgIHt7IHNlYXJjaElucHV0ID09PSBcIlwiID8gbm9EYXRhTWVzc2FnZSA6IFwiTm8gcmVzdWx0c1wiIH19XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
514
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWlzLWNvbXBvbmVudHMvZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWlzLWNvbXBvbmVudHMvZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHNCQUFzQixFQUFXLGFBQWEsRUFBYyxNQUFNLHNCQUFzQixDQUFDO0FBQ2xHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBYyxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQWUsU0FBUyxFQUF1QyxNQUFNLGVBQWUsQ0FBQztBQUNwTCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUNlOUQsMEJBQXdIOzs7SUFBbEUsQUFBZCxBQUFiLDBCQUFZLGNBQWMsOEZBQWlDOzs7SUFFcEYsNkJBQXFEO0lBQ25ELFlBQ0Y7SUFBQSxpQkFBSTs7O0lBREYsY0FDRjtJQURFLDRQQUNGOzs7SUFFRSw2QkFBNEM7SUFDMUMsWUFDRjtJQUFBLGlCQUFJOzs7SUFERixjQUNGO0lBREUsNkNBQ0Y7OztJQUNBLDBCQUF5Rjs7O0lBQTFDLHFHQUEwQjs7O0lBQXpFLEFBSEEsNkVBQTRDLG9FQUc2Qzs7O0lBSHhFLHVGQUF5QjtJQUd2QixjQUEwQjtJQUExQix3RkFBMEI7Ozs7SUFnQy9DLCtCQVFDO0lBQ0MsMkJBS0U7SUFDSixpQkFBTTs7Ozs7SUFlTiwrQkFTQztJQU5DLDJNQUFTLGtDQUEyQixLQUFDO0lBT3JDLDJCQUtFO0lBQ0osaUJBQU07Ozs7SUEvQ1IsK0JBQW9EO0lBQ2xELDZGQVFDO0lBUUQsaUNBYUU7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U0FBUzttQkFBQyxnQkFBZ0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7WUFDRSxjQUFjO2tCQUE3RCxTQUFTO21CQUFDLGdCQUFnQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtZQUNULFFBQVE7a0JBQTVDLFNBQVM7bUJBQUMsd0JBQXdCO1lBQ2UsVUFBVTtrQkFBM0QsWUFBWTttQkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO1lBOEpoRCxVQUFVO2tCQURULFlBQVk7bUJBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDOztrRkEvTDFCLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbm5lY3Rpb25Qb3NpdGlvblBhaXIsIE92ZXJsYXksIE92ZXJsYXlDb25maWcsIE92ZXJsYXlSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL292ZXJsYXlcIjtcbmltcG9ydCB7IFRlbXBsYXRlUG9ydGFsIH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9wb3J0YWxcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgQ29udGVudENoaWxkLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkLCBWaWV3Q29udGFpbmVyUmVmLCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcIm1pcy1kcm9wZG93blwiLFxuICB0ZW1wbGF0ZVVybDogXCIuL2Ryb3Bkb3duLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi9kcm9wZG93bi5jb21wb25lbnQuc2Nzc1wiXSxcbiAgXG59KVxuZXhwb3J0IGNsYXNzIERyb3Bkb3duQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgaXNPcGVuID0gZmFsc2U7XG4gIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNTZWFyY2hJbnB1dEZvY3VzZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2VhcmNoSW5wdXQ6IHN0cmluZyA9IFwiXCI7XG4gIHNlYXJjaERhdGE6IERyb3Bkb3duSXRlbVtdID0gW107XG4gIHZpc2libGVJdGVtcyA9IDEwO1xuICBkeW5hbWljSGVpZ2h0OiBzdHJpbmcgPSBcImF1dG9cIjtcbiAgQElucHV0KCkgZGF0YTogRHJvcGRvd25JdGVtW10gID0gW107XG4gIEBJbnB1dCgpIGhlaWdodDogc3RyaW5nID0gXCJcIjtcbiAgQElucHV0KCkgYXJpYUxhYmVsOiBzdHJpbmcgPSBcIlwiO1xuICBASW5wdXQoKSB3aWR0aDogc3RyaW5nID0gXCJcIjtcbiAgQElucHV0KCkgbGFiZWw6IHN0cmluZyA9IFwiU2VsZWN0XCI7XG4gIEBJbnB1dCgpIGl0ZW1TaXplRm9yQ2RrOiBudW1iZXI7XG4gIEBJbnB1dCgpIHNob3dPbmx5SWNvbjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBoaWdsaWdodFNlbGVjdGVkVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgZHJvcGRvd25MaXN0SGVpZ2h0OiBzdHJpbmcgPSBcIlwiO1xuICBASW5wdXQoKSBkcm9wZG93bkxpc3RXaWR0aDogc3RyaW5nID0gXCJcIjtcbiAgQElucHV0KCkgZHJvcGRvd25MaXN0UG9zaXRpb246IFwiTGVmdFwiIHwgXCJSaWdodFwiID0gXCJMZWZ0XCI7XG4gIEBJbnB1dCgpIGNvbmZpZ1xuICBASW5wdXQoKSBzZWFyY2hFbmFibGVkOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgc2VsZWN0ZWRJdGVtOiBEcm9wZG93bkl0ZW0gPSB7IHZhbHVlOiBcIlwiLCBsYWJlbDogXCJcIiB9O1xuICBASW5wdXQoKSBub0RhdGFNZXNzYWdlOiBzdHJpbmcgPSBcIk5vIERhdGFcIjtcbiAgQElucHV0KCkgbXVsdGlMaW5lOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGFkZGl0aW9uYWxJbmZvTWVzc2FnZSA6IHN0cmluZztcbiAgQElucHV0KCkgc2Nyb2xsSW50b1ZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2VhcmNoTGFiZWw6c3RyaW5nID0gXCJTZWFyY2ggS2V5d29yZFwiO1xuICBASW5wdXQoKSBjdXN0b21TdHlsZXM6ICB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICBASW5wdXQoKSBhY3RpdmVJdGVtOiBib29sZWFuID0gZmFsc2U7XG4gIEBPdXRwdXQoKSBvbkNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBWaWV3Q2hpbGQoXCJzZWxlY3RcIiwgeyBzdGF0aWM6IGZhbHNlIH0pIHNlbGVjdEVsZW1lbnQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoXCJwb3B1cENvbnRhaW5lclwiLCB7IHN0YXRpYzogZmFsc2UgfSkgcG9wdXBDb250YWluZXI6IFRlbXBsYXRlUmVmPEVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKFwiaXRlbXNDb250YWluZXJcIiwgeyBzdGF0aWM6IGZhbHNlIH0pIGl0ZW1zQ29udGFpbmVyOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCkgdmlld1BvcnQ6IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydDtcbiAgQENvbnRlbnRDaGlsZChcIm1pc0N1c3RvbUl0ZW1cIiwgeyBzdGF0aWM6IGZhbHNlIH0pIGN1c3RvbUl0ZW06IFRlbXBsYXRlUmVmPEVsZW1lbnQ+O1xuICBwcml2YXRlIG92ZXJsYXlSZWY6IE92ZXJsYXlSZWY7XG4gIFxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVSZWY6IEVsZW1lbnRSZWYsIFxuICAgIHByaXZhdGUgb3ZlcmxheTogT3ZlcmxheSwgXG4gICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHt9XG4gIFxuICBuZ09uSW5pdCgpIHtcbiAgfVxuXG5cbiAgbWVhc3VyZUFuZFVwZGF0ZUhlaWdodCgpIHtcbiAgICBpZiAoIXRoaXMuaXNPcGVuIHx8ICF0aGlzLml0ZW1zQ29udGFpbmVyKSByZXR1cm47XG5cbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLml0ZW1zQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgaXRlbXMgPSBjb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnLml0ZW0nKTtcbiAgICBcbiAgICBpZiAoaXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmR5bmFtaWNIZWlnaHQgPSBcIjUwcHhcIjtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBcbiAgICBsZXQgdG90YWxNZWFzdXJlZEhlaWdodCA9IDA7XG4gICAgbGV0IG1heEl0ZW1IZWlnaHQgPSAwO1xuICAgIFxuICAgIEFycmF5LmZyb20oaXRlbXMpLnNsaWNlKDAsIE1hdGgubWluKDgsIGl0ZW1zLmxlbmd0aCkpLmZvckVhY2goKGl0ZW06IEhUTUxFbGVtZW50KSA9PiB7XG4gICAgICBjb25zdCByZWN0ID0gaXRlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIHRvdGFsTWVhc3VyZWRIZWlnaHQgKz0gcmVjdC5oZWlnaHQ7XG4gICAgICBtYXhJdGVtSGVpZ2h0ID0gTWF0aC5tYXgobWF4SXRlbUhlaWdodCwgcmVjdC5oZWlnaHQpO1xuICAgIH0pO1xuICAgIC8vTmVlZGVkIHRvIGhhbmRsZSB0aGUgc2Nyb2xsYmFyIGNvbWluZyBmb3IgMi0zIGl0ZW1zIGNhc2VcbiAgICBjb25zdCBjb250YWluZXJQYWRkaW5nID0gODtcbiAgICBjb25zdCBmaW5hbEhlaWdodCA9IE1hdGgubWF4KDUwLCBNYXRoLm1pbih0b3RhbE1lYXN1cmVkSGVpZ2h0ICsgY29udGFpbmVyUGFkZGluZywgMzIwKSk7XG4gICAgXG4gICAgdGhpcy5keW5hbWljSGVpZ2h0ID0gYCR7ZmluYWxIZWlnaHR9cHhgO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGdldCBjdXJyZW50RGF0YSgpOiBEcm9wZG93bkl0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMuc2VhcmNoSW5wdXQgPyB0aGlzLnNlYXJjaERhdGEgOiB0aGlzLmRhdGE7XG4gIH1cblxuICBnZXQgaXRlbXNDb250YWluZXJTdHlsZSgpOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgJ2hlaWdodCc6IHRoaXMuZHluYW1pY0hlaWdodCxcbiAgICAgICdtYXgtaGVpZ2h0JzogJzMyMHB4JyxcbiAgICAgICdtaW4taGVpZ2h0JzogJzUwcHgnXG4gICAgfTtcbiAgfVxuXG4gIGdldEljb25TdHlsZXMoaXRlbTogYW55LCBhY3RpdmVJdGVtOiBib29sZWFuKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdjb2xvcic6IGl0ZW0gJiYgYWN0aXZlSXRlbSA/ICcjMDkzN0IyJyA6ICcnLFxuICAgICAgJ2ZvbnQtd2VpZ2h0JzogaXRlbSAmJiBhY3RpdmVJdGVtID8gJzcwMCcgOiAnJ1xuICAgIH07XG4gIH1cblxuc2V0VXBBc3luY0RhdGFTZWFyY2goKVxue1xuICBpZih0aGlzLmNvbmZpZylcbiAge1xuICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuY29uZmlnLmRhdGFTdHJlYW0oKS5waXBlKCkuc3Vic2NyaWJlKHJlcz0+IHtcbiAgICAgICAgICB0aGlzLmRhdGEgPSByZXNcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5tZWFzdXJlQW5kVXBkYXRlSGVpZ2h0KCksIDEwMCk7XG4gICAgICB9KVxuICB9XG4gIGNvbnN0IGluZGV4ID0gdGhpcy5kYXRhLmZpbmRJbmRleCgoZGF0YUl0ZW0pID0+IGRhdGFJdGVtLnZhbHVlID09PSB0aGlzLnNlbGVjdGVkSXRlbS52YWx1ZSk7XG4gIGlmICh0aGlzLnNjcm9sbEludG9WaWV3KVxuICAgIHRoaXMudmlld1BvcnQuc2Nyb2xsVG9JbmRleChpbmRleCwgJ3Ntb290aCcpO1xufVxuICBmaWx0ZXJCeVZhbHVlKGFycmF5LCBzdHJpbmc6IHN0cmluZykge1xuICAgIHJldHVybiBhcnJheS5maWx0ZXIobyA9PiBvLmxhYmVsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc3RyaW5nLnRvTG93ZXJDYXNlKCkudHJpbSgpKSk7XG4gIH1cblxuICBmaWx0ZXJCeVByaW1hcnlUZXh0KGFycmF5LCBzdHJpbmc6IHN0cmluZykge1xuICAgIHJldHVybiBhcnJheS5maWx0ZXIobyA9PiBvLmxhYmVsLnByaW1hcnlUZXh0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc3RyaW5nLnRvTG93ZXJDYXNlKCkudHJpbSgpKSk7XG4gIH1cbiAgc2VhcmNoSW5wdXRPbkNoYW5nZShuZXdWYWx1ZSkge1xuICAgIHRoaXMuc2VhcmNoSW5wdXQgPSBuZXdWYWx1ZTtcbiAgICBpZiAobmV3VmFsdWUpIHtcbiAgICAgIHRoaXMuc2VhcmNoRGF0YSA9IHRoaXMubXVsdGlMaW5lID8gdGhpcy5maWx0ZXJCeVByaW1hcnlUZXh0KHRoaXMuZGF0YSwgbmV3VmFsdWUpIDogdGhpcy5maWx0ZXJCeVZhbHVlKHRoaXMuZGF0YSwgbmV3VmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlYXJjaERhdGEgPSBbXTtcbiAgICAgIHRoaXMuc2VhcmNoSW5wdXQgPSBcIlwiO1xuICAgIH1cbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gdGhpcy5tZWFzdXJlQW5kVXBkYXRlSGVpZ2h0KCkpO1xuICB9XG4gIHNlYXJjaElucHV0Rm9jdXNlZChpc0ZvY3VzZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmlzU2VhcmNoSW5wdXRGb2N1c2VkID0gaXNGb2N1c2VkO1xuICB9XG4gIHNlYXJjaElucHV0Q2FuY2VsZWQoZXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLnNlYXJjaElucHV0ID0gXCJcIjtcbiAgICB0aGlzLmlzU2VhcmNoSW5wdXRGb2N1c2VkID0gZmFsc2U7XG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHRoaXMubWVhc3VyZUFuZFVwZGF0ZUhlaWdodCgpKTtcbiAgfVxuICB0b2dnbGVEcm9wZG93bigpIHtcbiAgICB0aGlzLmlzT3BlbiA9ICF0aGlzLmlzT3BlbjtcbiAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgIHRoaXMub3BlbkRyb3Bkb3duKHRoaXMucG9wdXBDb250YWluZXIsIHRoaXMuc2VsZWN0RWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLm1lYXN1cmVBbmRVcGRhdGVIZWlnaHQoKTtcbiAgICAgIH0sIDEwMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub25DYW5jZWwoKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBvcGVuRHJvcGRvd24odGVtcGxhdGU6IFRlbXBsYXRlUmVmPEVsZW1lbnQ+LCBvcmlnaW46IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgY29uc3QgcG9zaXRpb25zQm90dG9tID0gW1xuICAgICAgbmV3IENvbm5lY3Rpb25Qb3NpdGlvblBhaXIoeyBvcmlnaW5YOiBcInN0YXJ0XCIsIG9yaWdpblk6IFwiYm90dG9tXCIgfSwgeyBvdmVybGF5WDogXCJzdGFydFwiLCBvdmVybGF5WTogXCJ0b3BcIiB9LCAwLCA0KSxcbiAgICAgIG5ldyBDb25uZWN0aW9uUG9zaXRpb25QYWlyKHsgb3JpZ2luWDogXCJlbmRcIiwgb3JpZ2luWTogXCJib3R0b21cIiB9LCB7IG92ZXJsYXlYOiBcImVuZFwiLCBvdmVybGF5WTogXCJ0b3BcIiB9LCAwLCA0KVxuICAgIF07XG4gICAgY29uc3QgcG9zaXRpb25zVG9wID0gW1xuICAgICAgbmV3IENvbm5lY3Rpb25Qb3NpdGlvblBhaXIoeyBvcmlnaW5YOiBcInN0YXJ0XCIsIG9yaWdpblk6IFwidG9wXCIgfSwgeyBvdmVybGF5WDogXCJzdGFydFwiLCBvdmVybGF5WTogXCJib3R0b21cIiB9LCAwLCAtNCksXG4gICAgICBuZXcgQ29ubmVjdGlvblBvc2l0aW9uUGFpcih7IG9yaWdpblg6IFwiZW5kXCIsIG9yaWdpblk6IFwidG9wXCIgfSwgeyBvdmVybGF5WDogXCJlbmRcIiwgb3ZlcmxheVk6IFwiYm90dG9tXCIgfSwgMCwgLTQpXG4gICAgXTtcbiAgICBjb25zdCBwb3NpdGlvblN0cmF0ZWd5ID0gdGhpcy5vdmVybGF5XG4gICAgICAucG9zaXRpb24oKVxuICAgICAgLmZsZXhpYmxlQ29ubmVjdGVkVG8ob3JpZ2luKVxuICAgICAgLndpdGhQb3NpdGlvbnMoW1xuICAgICAgICAuLi4odGhpcy5kcm9wZG93bkxpc3RQb3NpdGlvbiA9PT0gXCJSaWdodFwiID8gcG9zaXRpb25zQm90dG9tLnJldmVyc2UoKSA6IHBvc2l0aW9uc0JvdHRvbSksXG4gICAgICAgIC4uLih0aGlzLmRyb3Bkb3duTGlzdFBvc2l0aW9uID09PSBcIlJpZ2h0XCIgPyBwb3NpdGlvbnNUb3AucmV2ZXJzZSgpIDogcG9zaXRpb25zVG9wKVxuICAgICAgXSlcbiAgICAgIC53aXRoUHVzaCh0cnVlKTtcbiAgICBjb25zdCBjb25maWdzID0gbmV3IE92ZXJsYXlDb25maWcoe1xuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXG4gICAgICBiYWNrZHJvcENsYXNzOiBcImNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wXCIsXG4gICAgICBzY3JvbGxTdHJhdGVneTogdGhpcy5vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpLFxuICAgICAgcG9zaXRpb25TdHJhdGVneSxcbiAgICAgIHdpZHRoOiBvcmlnaW4uY2xpZW50V2lkdGhcbiAgICB9KTtcbiAgICB0aGlzLm92ZXJsYXlSZWYgPSB0aGlzLm92ZXJsYXkuY3JlYXRlKGNvbmZpZ3MpO1xuICAgIGlmICh0aGlzLmRyb3Bkb3duTGlzdFdpZHRoKSB0aGlzLm92ZXJsYXlSZWYudXBkYXRlU2l6ZSh7IHdpZHRoOiB0aGlzLmRyb3Bkb3duTGlzdFdpZHRoIH0pO1xuICAgIGlmICh0aGlzLmRyb3Bkb3duTGlzdEhlaWdodCkgdGhpcy5vdmVybGF5UmVmLnVwZGF0ZVNpemUoeyBoZWlnaHQ6IHRoaXMuZHJvcGRvd25MaXN0SGVpZ2h0IH0pO1xuICAgIHRoaXMub3ZlcmxheVJlZi5hdHRhY2gobmV3IFRlbXBsYXRlUG9ydGFsKHRlbXBsYXRlLCB0aGlzLnZpZXdDb250YWluZXJSZWYpKTtcbiAgICB0aGlzLm92ZXJsYXlSZWYuYmFja2Ryb3BDbGljaygpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgdGhpcy5vbkNhbmNlbCgpO1xuICAgIH0pO1xuICB9XG4gIHNlbGVjdEl0ZW0oaXRlbSkge1xuICAgIHRoaXMub25DaGFuZ2UuZW1pdChpdGVtKTsgIFxuICAgIHRoaXMudG9nZ2xlRHJvcGRvd24oKTtcbiAgfVxuICBvbkNhbmNlbCgpIHtcbiAgICB0aGlzLmlzU2VhcmNoSW5wdXRGb2N1c2VkID0gZmFsc2U7XG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcbiAgICB0aGlzLm92ZXJsYXlSZWY/LmRldGFjaCgpO1xuICAgIHRoaXMuc2VhcmNoSW5wdXQgPSBcIlwiO1xuICB9XG4gIFxuICBASG9zdExpc3RlbmVyKFwia2V5dXAuZXNjXCIsIFsnJGV2ZW50J10pXG4gIGNsb3NlT25Fc2MoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICB0aGlzLm9uQ2FuY2VsKCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxufVxuZXhwb3J0IGludGVyZmFjZSBEcm9wZG93bkl0ZW0ge1xuICBsYWJlbDogYW55IDtcbiAgdmFsdWU6IHN0cmluZztcbiAgaWNvbj86IHN0cmluZztcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBjdXN0b21JY29uPzogc3RyaW5nXG59XG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvbkl0ZW1MYWJlbCB7XG4gIHByaW1hcnlUZXh0ID86IHN0cmluZztcbiAgc2Vjb25kYXJ5VGV4dCA/OiBzdHJpbmc7XG59XG4iLCI8ZGl2IChjbGljayk9XCJzZXRVcEFzeW5jRGF0YVNlYXJjaCgpXCJcbihrZXl1cC5lbnRlcik9XCJzZXRVcEFzeW5jRGF0YVNlYXJjaCgpXCJcbiAgY2xhc3M9XCJtYWluLWNvbnRhaW5lclwiXG4gIFtuZ1N0eWxlXT1cIntcbiAgICBoZWlnaHQ6IGhlaWdodC5sZW5ndGggPiAwID8gaGVpZ2h0IDogJycsXG4gICAgd2lkdGg6IHdpZHRoLmxlbmd0aCA+IDAgPyB3aWR0aCA6ICcnXG4gIH1cIlxuPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJkcm9wZG93blwiXG4gICAgI3NlbGVjdFxuICAgIHRhYmluZGV4PVwiMFwiXG4gICAgKGtleXVwLmVudGVyKT1cInRvZ2dsZURyb3Bkb3duKClcIlxuICAgIChjbGljayk9XCJ0b2dnbGVEcm9wZG93bigpXCJcbiAgICBbbmdTdHlsZV09XCJjdXN0b21TdHlsZXNcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsXCJcbiAgICBbbmdDbGFzc109XCJpc09wZW4gPyAnZHJvcGRvd24tcG9ydCc6ICcnXCJcbiAgPlxuICAgIDxpbWcgY2xhc3M9XCJpbWctY29udGFpbmVyXCIgW3dpZHRoXT1cIjE2XCIgW2hlaWdodF09XCIxNlwiIFtzcmNdPVwic2VsZWN0ZWRJdGVtPy5jdXN0b21JY29uXCIgKm5nSWY9XCJzZWxlY3RlZEl0ZW0/LmN1c3RvbUljb25cIj5cbiAgICA8ZGl2IGNsYXNzPVwibGFiZWxcIiBbbmdTdHlsZV09XCJ7d2lkdGg6IHNlbGVjdGVkSXRlbT8uY3VzdG9tSWNvbiA/ICdjYWxjKDEwMCUgLSA0OHB4KScgOiAnY2FsYygxMDAlIC0gMzJweCknfVwiPlxuICAgICAgPHAgY2xhc3M9XCJ0ZXh0XCIgKm5nSWY9XCIhc2hvd09ubHlJY29uOyBlbHNlIHNob3dJY29uXCI+XG4gICAgICAgIHt7IG11bHRpTGluZSA/IHNlbGVjdGVkSXRlbT8ubGFiZWw/LnByaW1hcnlUZXh0IDogc2VsZWN0ZWRJdGVtPy5sYWJlbCB8fCBsYWJlbCB9fVxuICAgICAgPC9wPlxuICAgICAgPG5nLXRlbXBsYXRlICNzaG93SWNvbj5cbiAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0XCIgKm5nSWY9XCIhc2VsZWN0ZWRJdGVtPy5pY29uXCI+XG4gICAgICAgICAge3sgbGFiZWwgfX1cbiAgICAgICAgPC9wPlxuICAgICAgICA8aW1nIGNsYXNzPVwiaWNvblwiICpuZ0lmPVwiISFzZWxlY3RlZEl0ZW0/Lmljb25cIiBbc3JjXT1cInNlbGVjdGVkSXRlbT8uaWNvblwiIGFsdD1cIm5vIGltZ1wiIC8+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuICAgIDxzdmdcbiAgICAgIGNsYXNzPVwiaGFuZGxlXCJcbiAgICAgIFtuZ1N0eWxlXT1cInsgdHJhbnNmb3JtOiBpc09wZW4gPyAncm90YXRlKDE4MGRlZyknIDogJ3JvdGF0ZSgwZGVnKScgfVwiXG4gICAgICB3aWR0aD1cIjIwXCJcbiAgICAgIGhlaWdodD1cIjIwXCJcbiAgICAgIHZpZXdCb3g9XCIwIDAgMjAgMjBcIlxuICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgPlxuICAgICAgPHBhdGhcbiAgICAgICAgZmlsbC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgIGNsaXAtcnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICBkPVwiTTEzLjgyNSA3LjE1ODQ1TDEwIDEwLjk3NTFMNi4xNzUgNy4xNTg0NUw1IDguMzMzNDVMMTAgMTMuMzMzNEwxNSA4LjMzMzQ1TDEzLjgyNSA3LjE1ODQ1WlwiXG4gICAgICAgIGZpbGw9XCIjMTgxRjMzXCJcbiAgICAgIC8+XG4gICAgPC9zdmc+XG4gIDwvZGl2PlxuPC9kaXY+XG48bmctdGVtcGxhdGUgI3BvcHVwQ29udGFpbmVyPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJwb3B1cC1jb250YWluZXJcIiBjZGtUcmFwRm9jdXMgW2Nka1RyYXBGb2N1c0F1dG9DYXB0dXJlXT1cInRydWVcIiB0YWJpbmRleD1cIjBcIlxuICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgIGhlaWdodDogZHJvcGRvd25MaXN0SGVpZ2h0LFxuICAgICAgd2lkdGg6IGRyb3Bkb3duTGlzdFdpZHRoXG4gICAgfVwiXG4gICAgKGtleXVwLmVzYyk9XCJjbG9zZU9uRXNjKCRldmVudClcIlxuICAgIGFyaWEtbGFiZWw9XCJkcm9wZG93blwiXG4gID5cbiAgICA8ZGl2ICpuZ0lmPVwic2VhcmNoRW5hYmxlZFwiIGNsYXNzPVwic2VhcmNoLWNvbnRhaW5lclwiPlxuICAgICAgPHN2Z1xuICAgICAgICAqbmdJZj1cIiFpc1NlYXJjaElucHV0Rm9jdXNlZFwiXG4gICAgICAgIGNsYXNzPVwic2VhcmNoLWljb25cIlxuICAgICAgICB3aWR0aD1cIjI0XCJcbiAgICAgICAgaGVpZ2h0PVwiMjRcIlxuICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcbiAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgID5cbiAgICAgICAgPHBhdGhcbiAgICAgICAgICBmaWxsLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICBjbGlwLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICBkPVwiTTQuMjE1MDggMTEuMTQ1NkM0LjIxNTA4IDcuMzE3OSA3LjMzNzIyIDQuMjExNjUgMTEuMTkyNiA0LjIxMTY1QzE1LjA0OCA0LjIxMTY1IDE4LjE3MDIgNy4zMTc5IDE4LjE3MDIgMTEuMTQ1NkMxOC4xNzAyIDEyLjY5MzEgMTcuNjU5OSAxNC4xMjI2IDE2Ljc5NzIgMTUuMjc2N0wxNS4zNjg1IDE2LjcwMTNDMTQuMjA0NCAxNy41NjY4IDEyLjc1OSAxOC4wNzk2IDExLjE5MjYgMTguMDc5NkM3LjMzNzIyIDE4LjA3OTYgNC4yMTUwOCAxNC45NzM0IDQuMjE1MDggMTEuMTQ1NlpNMTUuOTQyMSAxNy43ODM1QzE0LjYwMjEgMTguNzMyOSAxMi45NjI3IDE5LjI5MTMgMTEuMTkyNiAxOS4yOTEzQzYuNjY5NzcgMTkuMjkxMyAzIDE1LjY0NjEgMyAxMS4xNDU2QzMgNi42NDUxMiA2LjY2OTc3IDMgMTEuMTkyNiAzQzE1LjcxNTUgMyAxOS4zODUyIDYuNjQ1MTIgMTkuMzg1MiAxMS4xNDU2QzE5LjM4NTIgMTIuOTM3MSAxOC44MDM3IDE0LjU5MzEgMTcuODE4NCAxNS45Mzc1TDE5LjgzNjEgMTcuNDA0OEMyMC42NzA1IDE3LjkxMiAyMS43NTU0IDE4LjY1NDMgMjAuMjQ1NCAyMC4yMTVDMTguNzM1MyAyMS43NzU2IDE4LjAwOTkgMjAuNjY2MyAxNy40OTkxIDE5LjgzNjRMMTUuOTQyMSAxNy43ODM1WlwiXG4gICAgICAgICAgZmlsbD1cIiM2QTczN0RcIlxuICAgICAgICAvPlxuICAgICAgPC9zdmc+XG4gICAgICA8aW5wdXRcbiAgICAgICAgW25nTW9kZWxdPVwic2VhcmNoSW5wdXRcIlxuICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgcGFkZGluZ0xlZnQ6IGlzU2VhcmNoSW5wdXRGb2N1c2VkID8gJzEycHgnIDogJzQ1cHgnLFxuICAgICAgICAgIGJvcmRlcjogaXNTZWFyY2hJbnB1dEZvY3VzZWQgPyAnMXB4IHNvbGlkICMwOTM3QjInIDogJzFweCBzb2xpZCAjZTBlMGUwJyxcbiAgICAgICAgICBwYWRkaW5nUmlnaHQ6IGlzU2VhcmNoSW5wdXRGb2N1c2VkID8gJzQ1cHgnIDogJzEwcHgnXG4gICAgICAgIH1cIlxuICAgICAgICBbdGFiSW5kZXhdPVwiMFwiXG4gICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNlYXJjaElucHV0T25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJpc1NlYXJjaElucHV0Rm9jdXNlZCA/ICcnIDogc2VhcmNoTGFiZWxcIlxuICAgICAgICAoZm9jdXMpPVwic2VhcmNoSW5wdXRGb2N1c2VkKHRydWUpXCJcbiAgICAgICAgY2xhc3M9XCJzZWFyY2gtaW5wdXRcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInNlYXJjaExhYmVsXCJcbiAgICAgIC8+XG4gICAgICA8c3ZnXG4gICAgICAgICpuZ0lmPVwiaXNTZWFyY2hJbnB1dEZvY3VzZWRcIlxuICAgICAgICBjbGFzcz1cImNhbmNlbC1pY29uXCJcbiAgICAgICAgKGNsaWNrKT1cInNlYXJjaElucHV0Q2FuY2VsZWQoJGV2ZW50KVwiXG4gICAgICAgIHdpZHRoPVwiMjRcIlxuICAgICAgICBoZWlnaHQ9XCIyNFwiXG4gICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxuICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgPlxuICAgICAgICA8cGF0aFxuICAgICAgICAgIGZpbGwtcnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgIGNsaXAtcnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgIGQ9XCJNOC44NzQ0NiA3LjMyMTQ0QzguNDQ1ODggNi44OTI4NSA3Ljc1MSA2Ljg5Mjg1IDcuMzIyNDIgNy4zMjE0NEM2Ljg5MzgzIDcuNzUwMDIgNi44OTM4MyA4LjQ0NDkgNy4zMjI0MiA4Ljg3MzQ5TDEwLjQ0ODggMTEuOTk5OUw3LjMyMzU3IDE1LjEyNTJDNi44OTQ5OCAxNS41NTM4IDYuODk0OTggMTYuMjQ4NiA3LjMyMzU3IDE2LjY3NzJDNy43NTIxNSAxNy4xMDU4IDguNDQ3MDMgMTcuMTA1OCA4Ljg3NTYxIDE2LjY3NzJMMTIuMDAwOSAxMy41NTJMMTUuMTI2MSAxNi42NzcyQzE1LjU1NDcgMTcuMTA1OCAxNi4yNDk2IDE3LjEwNTggMTYuNjc4MSAxNi42NzcyQzE3LjEwNjcgMTYuMjQ4NiAxNy4xMDY3IDE1LjU1MzcgMTYuNjc4MSAxNS4xMjUxTDEzLjU1MjkgMTEuOTk5OUwxNi42NzkzIDguODczNTRDMTcuMTA3OSA4LjQ0NDk2IDE3LjEwNzkgNy43NTAwOCAxNi42NzkzIDcuMzIxNUMxNi4yNTA3IDYuODkyOTEgMTUuNTU1OCA2Ljg5MjkxIDE1LjEyNzMgNy4zMjE1TDEyLjAwMDkgMTAuNDQ3OUw4Ljg3NDQ2IDcuMzIxNDRaXCJcbiAgICAgICAgICBmaWxsPVwiIzZBNzM3RFwiXG4gICAgICAgIC8+XG4gICAgICA8L3N2Zz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwic3RhdHVzLWNvbnRhaW5lclwiICpuZ0lmPVwibG9hZGluZ1wiPlxuICAgICAgPG1pcy1sb2FkZXIgW21vYmlsZVZpZXddPVwidHJ1ZVwiPjwvbWlzLWxvYWRlcj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IHRhYmluZGV4PVwiLTFcIiAqbmdJZj1cIiFzZWFyY2hFbmFibGVkXCIgY2RrRm9jdXNJbml0aWFsPjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJpdGVtc1wiICNpdGVtc0NvbnRhaW5lciBbbmdTdHlsZV09XCJpdGVtc0NvbnRhaW5lclN0eWxlXCIgKm5nSWY9XCIhbG9hZGluZyBcIj4gICAgXG4gICAgICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0ICpuZ0lmPVwiY3VycmVudERhdGEubGVuZ3RoID4gMFwiIFtpdGVtU2l6ZV09XCJpdGVtU2l6ZUZvckNka1wiIGNsYXNzPVwiZHJvcGRvd24tdmlld3BvcnRcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cIml0ZW1cIlxuICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICBbbmdDbGFzc109XCJ7ICdpdGVtLWRpc2FibGVkJzogaXRlbS5kaXNhYmxlZCwgJ2l0ZW0tc2VsZWN0ZWQnOiAoaGlnbGlnaHRTZWxlY3RlZFZhbHVlICYmIGl0ZW0udmFsdWUgPT09IHNlbGVjdGVkSXRlbT8udmFsdWUpLCAnaWNvbi1vbmx5JyA6IHNob3dPbmx5SWNvbiB9XCJcbiAgICAgICAgKGNsaWNrKT1cIml0ZW0uZGlzYWJsZWQgPyBudWxsIDogc2VsZWN0SXRlbShpdGVtKVwiXG4gICAgICAgIChrZXl1cC5lbnRlcik9XCJpdGVtLmRpc2FibGVkID8gbnVsbCA6IHNlbGVjdEl0ZW0oaXRlbSlcIlxuICAgICAgICAqY2RrVmlydHVhbEZvcj1cImxldCBpdGVtIG9mIGN1cnJlbnREYXRhO1wiXG4gICAgICAgIHRhYkluZGV4PVwiMFwiXG4gICAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1c3RvbUl0ZW07IGVsc2Ugc3RhbmRhcmRJdGVtXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjdXN0b21JdGVtXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBpdGVtIH1cIlxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjc3RhbmRhcmRJdGVtPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiICpuZ0lmPVwiIXNob3dPbmx5SWNvblwiIFtuZ1N0eWxlXT1cInsgd2lkdGg6IGl0ZW0uaWNvbiA/ICc5MCUnIDogJzEwMCUnLCAnZGlzcGxheSc6IG11bHRpTGluZSA/ICdmbGV4JzogJ2luaGVyaXQnLCAnZmxleC1kaXJlY3Rpb24nOiBtdWx0aUxpbmUgPyAnY29sdW1uJzogJ2luaGVyaXQnIH1cIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicHJpbWFyeVRleHRcIiBbbmdTdHlsZV09XCJnZXRJY29uU3R5bGVzKGl0ZW0uaWNvbiwgYWN0aXZlSXRlbSlcIj57eyBtdWx0aUxpbmUgPyBpdGVtPy5sYWJlbD8ucHJpbWFyeVRleHQgOiBpdGVtPy5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2Vjb25kYXJ5VGV4dFwiICpuZ0lmPVwibXVsdGlMaW5lXCIgW25nU3R5bGVdPVwiZ2V0SWNvblN0eWxlcyhpdGVtLmljb24sIGFjdGl2ZUl0ZW0pXCI+IHt7IGl0ZW0/LmxhYmVsPy5zZWNvbmRhcnlUZXh0ID8gaXRlbT8ubGFiZWw/LnNlY29uZGFyeVRleHQgOiBhZGRpdGlvbmFsSW5mb01lc3NhZ2UgIH19IDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbi1jb250YWluZXJcIiAqbmdJZj1cIml0ZW0uaWNvblwiPlxuICAgICAgICAgICAgPGltZyBjbGFzcz1cImljb25cIiBbc3JjXT1cIml0ZW0uaWNvblwiIGFsdD1cIm5vIGltZ1wiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cbiAgICAgIDxkaXYgY2xhc3M9XCJub0RhdGFcIiAqbmdJZj1cImN1cnJlbnREYXRhLmxlbmd0aCA9PT0gMFwiPlxuICAgICAgICB7eyBzZWFyY2hJbnB1dCA9PT0gXCJcIiA/IG5vRGF0YU1lc3NhZ2UgOiBcIk5vIHJlc3VsdHNcIiB9fVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -1,6 +1,7 @@
1
- export { TableComponent } from "./table.component";
1
+ export * from './table.component';
2
+ export * from './table.module';
3
+ export * from './sort-icons.directive';
2
4
  export { SubTableComponent } from "./sub-table/sub-table.component";
3
5
  export { CustomTableCellDirective } from "./custom-table-cell.directive";
4
- export { TableModule } from "./table.module";
5
6
  export { TableFilterComponent } from "./filter/filter.component";
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL21pcy1jb21wb25lbnRzL3RhYmxlL3B1YmxpY19hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUc3QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IFRhYmxlQ29tcG9uZW50IH0gZnJvbSBcIi4vdGFibGUuY29tcG9uZW50XCI7XG5leHBvcnQgeyBTdWJUYWJsZUNvbXBvbmVudCB9IGZyb20gXCIuL3N1Yi10YWJsZS9zdWItdGFibGUuY29tcG9uZW50XCI7XG5leHBvcnQgeyBDdXN0b21UYWJsZUNlbGxEaXJlY3RpdmUgfSBmcm9tIFwiLi9jdXN0b20tdGFibGUtY2VsbC5kaXJlY3RpdmVcIjtcbmV4cG9ydCB7IFRhYmxlTW9kdWxlIH0gZnJvbSBcIi4vdGFibGUubW9kdWxlXCI7XG5leHBvcnQgeyBUYWJsZUNvbmZpZywgUGFnaW5hdGlvbkNvbmZpZywgUm93Q29uZmlnLCBDb2xIZWFkZXJDb25maWcsIENvbENvbmZpZyB9IGZyb20gXCIuL3RhYmxlLmNvbXBvbmVudFwiO1xuZXhwb3J0IHsgU3ViVGFibGVDb25maWcsIFN1YlRhYmxlQ29sQ29uZmlnLCBTdWJUYWJsZUNvbEhlYWRlckNvbmZpZywgU3ViVGFibGVSb3dDb25maWcgfSBmcm9tIFwiLi9zdWItdGFibGUvc3ViLXRhYmxlLmNvbXBvbmVudFwiO1xuZXhwb3J0IHsgVGFibGVGaWx0ZXJDb21wb25lbnQgfSBmcm9tIFwiLi9maWx0ZXIvZmlsdGVyLmNvbXBvbmVudFwiO1xuZXhwb3J0IHsgRmlsdGVyIH0gZnJvbSBcIi4vZmlsdGVyL2ZpbHRlci5jb21wb25lbnRcIjtcbiJdfQ==
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL21pcy1jb21wb25lbnRzL3RhYmxlL3B1YmxpY19hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDcEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHekUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3RhYmxlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3RhYmxlLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3NvcnQtaWNvbnMuZGlyZWN0aXZlJztcbmV4cG9ydCB7IFN1YlRhYmxlQ29tcG9uZW50IH0gZnJvbSBcIi4vc3ViLXRhYmxlL3N1Yi10YWJsZS5jb21wb25lbnRcIjtcbmV4cG9ydCB7IEN1c3RvbVRhYmxlQ2VsbERpcmVjdGl2ZSB9IGZyb20gXCIuL2N1c3RvbS10YWJsZS1jZWxsLmRpcmVjdGl2ZVwiO1xuZXhwb3J0IHsgVGFibGVDb25maWcsIFBhZ2luYXRpb25Db25maWcsIFJvd0NvbmZpZywgQ29sSGVhZGVyQ29uZmlnLCBDb2xDb25maWcgfSBmcm9tIFwiLi90YWJsZS5jb21wb25lbnRcIjtcbmV4cG9ydCB7IFN1YlRhYmxlQ29uZmlnLCBTdWJUYWJsZUNvbENvbmZpZywgU3ViVGFibGVDb2xIZWFkZXJDb25maWcsIFN1YlRhYmxlUm93Q29uZmlnIH0gZnJvbSBcIi4vc3ViLXRhYmxlL3N1Yi10YWJsZS5jb21wb25lbnRcIjtcbmV4cG9ydCB7IFRhYmxlRmlsdGVyQ29tcG9uZW50IH0gZnJvbSBcIi4vZmlsdGVyL2ZpbHRlci5jb21wb25lbnRcIjtcbmV4cG9ydCB7IEZpbHRlciB9IGZyb20gXCIuL2ZpbHRlci9maWx0ZXIuY29tcG9uZW50XCI7XG4iXX0=
@@ -0,0 +1,139 @@
1
+ import { Directive, input, output, signal, } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class SortIconsDirective {
4
+ constructor(el, renderer) {
5
+ this.el = el;
6
+ this.renderer = renderer;
7
+ // Convert inputs to signals
8
+ this.column = input();
9
+ this.activeSort = input();
10
+ this.activeSorts = input();
11
+ this.multiColumnSort = input(false);
12
+ // Convert output to signal
13
+ this.sortChange = output();
14
+ this.multiSortChange = output();
15
+ // Internal state as signals
16
+ this.currentDirection = signal('');
17
+ }
18
+ ngOnInit() {
19
+ // Create a container for the icons
20
+ const container = this.renderer.createElement('div');
21
+ this.renderer?.setStyle(container, 'display', 'inline-flex');
22
+ this.renderer?.setStyle(container, 'align-items', 'center');
23
+ const iconContainer = this.renderer.createElement('div');
24
+ this.renderer?.setStyle(iconContainer, 'display', 'inline-flex');
25
+ this.renderer?.setStyle(iconContainer, 'flex-direction', 'column');
26
+ this.renderer?.setStyle(iconContainer, 'align-items', 'center');
27
+ this.upIcon = this.renderer.createElement('img');
28
+ this.renderer?.setAttribute(this.upIcon, 'src', this.column()?.sortAscIcon);
29
+ this.renderer?.setStyle(this.upIcon, 'opacity', '0.5');
30
+ this.renderer?.setStyle(this.upIcon, 'transition', 'opacity 0.3s ease');
31
+ this.renderer?.setStyle(this.upIcon, 'width', '9px');
32
+ this.renderer?.setStyle(this.upIcon, 'cursor', 'pointer');
33
+ this.renderer?.listen(this.upIcon, 'click', () => this.setSortDirection('ASC'));
34
+ this.downIcon = this.renderer.createElement('img');
35
+ this.renderer?.setAttribute(this.downIcon, 'src', this.column()?.sortDescIcon);
36
+ this.renderer?.setStyle(this.downIcon, 'opacity', '0.5');
37
+ this.renderer?.setStyle(this.downIcon, 'transition', 'opacity 0.3s ease');
38
+ this.renderer?.setStyle(this.downIcon, 'width', '9px');
39
+ this.renderer?.setStyle(this.downIcon, 'cursor', 'pointer');
40
+ this.renderer?.listen(this.downIcon, 'click', () => this.setSortDirection('DESC'));
41
+ this.renderer?.appendChild(iconContainer, this.upIcon);
42
+ this.renderer?.appendChild(iconContainer, this.downIcon);
43
+ this.renderer?.appendChild(container, iconContainer);
44
+ if (this.multiColumnSort()) {
45
+ this.sortOrderElement = this.renderer.createElement('span');
46
+ this.renderer?.setStyle(this.sortOrderElement, 'font-size', '12px');
47
+ this.renderer?.setStyle(this.sortOrderElement, 'font-weight', 'bold');
48
+ this.renderer?.setStyle(this.sortOrderElement, 'color', '#000');
49
+ this.renderer?.appendChild(container, this.sortOrderElement);
50
+ }
51
+ this.renderer?.appendChild(this.el.nativeElement, container);
52
+ this.updateIconStyles();
53
+ }
54
+ ngOnChanges(changes) {
55
+ if (changes['activeSort'] || changes['activeSorts']) {
56
+ this.updateIconStyles();
57
+ }
58
+ }
59
+ setSortDirection(direction) {
60
+ if (this.multiColumnSort()) {
61
+ this.handleMultiColumnSort(direction);
62
+ }
63
+ else {
64
+ this.handleSingleColumnSort(direction);
65
+ }
66
+ }
67
+ handleSingleColumnSort(direction) {
68
+ if (this.currentDirection() === direction) {
69
+ this.currentDirection.set(''); // Reset sorting if the same direction is clicked
70
+ }
71
+ else {
72
+ this.currentDirection.set(direction);
73
+ }
74
+ this.sortChange.emit({
75
+ column: this.column()?.data || '',
76
+ direction: this.currentDirection()
77
+ });
78
+ this.updateIconStyles();
79
+ }
80
+ handleMultiColumnSort(direction) {
81
+ const existingSortIndex = this.activeSorts().findIndex(sort => sort.column === this.column()?.data);
82
+ if (existingSortIndex !== -1) {
83
+ if (this.activeSorts()[existingSortIndex].direction !== direction) {
84
+ this.activeSorts()[existingSortIndex].direction = direction;
85
+ }
86
+ else {
87
+ return;
88
+ }
89
+ }
90
+ else {
91
+ this.activeSorts().push({
92
+ column: this.column()?.data || '',
93
+ direction
94
+ });
95
+ }
96
+ this.multiSortChange.emit([...this.activeSorts()]);
97
+ this.updateIconStyles();
98
+ }
99
+ updateIconStyles() {
100
+ if (this.multiColumnSort()) {
101
+ this.updateMultiColumnIconStyles();
102
+ }
103
+ else {
104
+ this.updateSingleColumnIconStyles();
105
+ }
106
+ }
107
+ updateSingleColumnIconStyles() {
108
+ const isActiveColumn = this.activeSort()?.column === this.column()?.data;
109
+ setTimeout(() => {
110
+ this.renderer?.setStyle(this.upIcon, 'opacity', isActiveColumn && this.currentDirection() === 'ASC' ? '1' : '0.5');
111
+ this.renderer?.setStyle(this.downIcon, 'opacity', isActiveColumn && this.currentDirection() === 'DESC' ? '1' : '0.5');
112
+ }, 0);
113
+ }
114
+ updateMultiColumnIconStyles() {
115
+ const columnSort = this.activeSorts().find(sort => sort.column === this.column()?.data);
116
+ setTimeout(() => {
117
+ this.renderer?.setStyle(this.upIcon, 'opacity', columnSort?.direction === 'ASC' ? '1' : '0.5');
118
+ this.renderer?.setStyle(this.downIcon, 'opacity', columnSort?.direction === 'DESC' ? '1' : '0.5');
119
+ if (this.sortOrderElement) {
120
+ const sortIndex = this.activeSorts().findIndex(sort => sort.column === this.column()?.data);
121
+ if (sortIndex !== -1) {
122
+ this.renderer?.setProperty(this.sortOrderElement, 'textContent', (sortIndex + 1).toString());
123
+ }
124
+ else {
125
+ this.renderer?.setProperty(this.sortOrderElement, 'textContent', '');
126
+ }
127
+ }
128
+ }, 0);
129
+ }
130
+ static { this.ɵfac = function SortIconsDirective_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SortIconsDirective)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.Renderer2)); }; }
131
+ static { this.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: SortIconsDirective, selectors: [["", "appSortIcons", ""]], inputs: { column: [1, "column"], activeSort: [1, "activeSort"], activeSorts: [1, "activeSorts"], multiColumnSort: [1, "multiColumnSort"] }, outputs: { sortChange: "sortChange", multiSortChange: "multiSortChange" }, features: [i0.ɵɵNgOnChangesFeature] }); }
132
+ }
133
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SortIconsDirective, [{
134
+ type: Directive,
135
+ args: [{
136
+ selector: '[appSortIcons]',
137
+ }]
138
+ }], () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }], null); })();
139
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydC1pY29ucy5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9taXMtY29tcG9uZW50cy90YWJsZS9zb3J0LWljb25zLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQVNULEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDOztBQWdCdkIsTUFBTSxPQUFPLGtCQUFrQjtJQW1CN0IsWUFBb0IsRUFBYyxFQUFVLFFBQW1CO1FBQTNDLE9BQUUsR0FBRixFQUFFLENBQVk7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBbEIvRCw0QkFBNEI7UUFDNUIsV0FBTSxHQUFHLEtBQUssRUFBYyxDQUFDO1FBQzdCLGVBQVUsR0FBRyxLQUFLLEVBQWEsQ0FBQztRQUNoQyxnQkFBVyxHQUFHLEtBQUssRUFBZSxDQUFDO1FBQ25DLG9CQUFlLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBRXhDLDJCQUEyQjtRQUMzQixlQUFVLEdBQUcsTUFBTSxFQUFhLENBQUM7UUFDakMsb0JBQWUsR0FBRyxNQUFNLEVBQWUsQ0FBQztRQUV4Qyw0QkFBNEI7UUFDNUIscUJBQWdCLEdBQUcsTUFBTSxDQUFzQixFQUFFLENBQUMsQ0FBQztJQU9lLENBQUM7SUFFbkUsUUFBUTtRQUVOLG1DQUFtQztRQUNuQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFNUQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFFBQVEs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IjpbImltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUmVuZGVyZXIyLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNvcnRTdGF0ZSB7XG4gIGNvbHVtbjogc3RyaW5nO1xuICBkaXJlY3Rpb246ICdBU0MnIHwgJ0RFU0MnIHwgJyc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU29ydENvbHVtbiB7XG4gIGRhdGE6IHN0cmluZztcbiAgc29ydEFzY0ljb24/OiBzdHJpbmc7XG4gIHNvcnREZXNjSWNvbj86IHN0cmluZztcbn1cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2FwcFNvcnRJY29uc10nLFxufSlcbmV4cG9ydCBjbGFzcyBTb3J0SWNvbnNEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIC8vIENvbnZlcnQgaW5wdXRzIHRvIHNpZ25hbHNcbiAgY29sdW1uID0gaW5wdXQ8U29ydENvbHVtbj4oKTtcbiAgYWN0aXZlU29ydCA9IGlucHV0PFNvcnRTdGF0ZT4oKTtcbiAgYWN0aXZlU29ydHMgPSBpbnB1dDxTb3J0U3RhdGVbXT4oKTtcbiAgbXVsdGlDb2x1bW5Tb3J0ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICBcbiAgLy8gQ29udmVydCBvdXRwdXQgdG8gc2lnbmFsXG4gIHNvcnRDaGFuZ2UgPSBvdXRwdXQ8U29ydFN0YXRlPigpO1xuICBtdWx0aVNvcnRDaGFuZ2UgPSBvdXRwdXQ8U29ydFN0YXRlW10+KCk7XG5cbiAgLy8gSW50ZXJuYWwgc3RhdGUgYXMgc2lnbmFsc1xuICBjdXJyZW50RGlyZWN0aW9uID0gc2lnbmFsPCdBU0MnIHwgJ0RFU0MnIHwgJyc+KCcnKTtcblxuICAvLyBBc3NldHNcbiAgcHJpdmF0ZSB1cEljb24hOiBIVE1MSW1hZ2VFbGVtZW50O1xuICBwcml2YXRlIGRvd25JY29uITogSFRNTEltYWdlRWxlbWVudDtcbiAgcHJpdmF0ZSBzb3J0T3JkZXJFbGVtZW50PzogSFRNTFNwYW5FbGVtZW50O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMikge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICBcbiAgICAvLyBDcmVhdGUgYSBjb250YWluZXIgZm9yIHRoZSBpY29uc1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgdGhpcy5yZW5kZXJlcj8uc2V0U3R5bGUoY29udGFpbmVyLCAnZGlzcGxheScsICdpbmxpbmUtZmxleCcpO1xuICAgIHRoaXMucmVuZGVyZXI/LnNldFN0eWxlKGNvbnRhaW5lciwgJ2FsaWduLWl0ZW1zJywgJ2NlbnRlcicpO1xuXG4gICAgY29uc3QgaWNvbkNvbnRhaW5lciA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgdGhpcy5yZW5kZXJlcj8uc2V0U3R5bGUoaWNvbkNvbnRhaW5lciwgJ2Rpc3BsYXknLCAnaW5saW5lLWZsZXgnKTtcbiAgICB0aGlzLnJlbmRlcmVyPy5zZXRTdHlsZShpY29uQ29udGFpbmVyLCAnZmxleC1kaXJlY3Rpb24nLCAnY29sdW1uJyk7XG4gICAgdGhpcy5yZW5kZXJlcj8uc2V0U3R5bGUoaWNvbkNvbnRhaW5lciwgJ2FsaWduLWl0ZW1zJywgJ2NlbnRlcicpO1xuXG4gICAgdGhpcy51cEljb24gPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xuICAgIHRoaXMucmVuZGVyZXI/LnNldEF0dHJpYnV0ZSh0aGlzLnVwSWNvbiwgJ3NyYycsIHRoaXMuY29sdW1uKCk/LnNvcnRBc2NJY29uKTtcbiAgICB0aGlzLnJlbmRlcmVyPy5zZXRTdHlsZSh0aGlzLnVwSWNvbiwgJ29wYWNpdHknLCAnMC41Jyk7XG4gICAgdGhpcy5yZW5kZXJlcj8uc2V0U3R5bGUodGhpcy51cEljb24sICd0cmFuc2l0aW9uJywgJ29wYWNpdHkgMC4zcyBlYXNlJyk7XG4gICAgdGhpcy5yZW5kZXJlcj8uc2V0U3R5bGUodGhpcy51cEljb24sICd3aWR0aCcsICc5cHgnKTtcbiAgICB0aGlzLnJlbmRlcmVyPy5zZXRTdHlsZSh0aGlzLnVwSWNvbiwgJ2N1cnNvcicsICdwb2ludGVyJyk7XG4gICAgdGhpcy5yZW5kZXJlcj8ubGlzdGVuKHRoaXMudXBJY29uLCAnY2xpY2snLCAoKSA9PiB0aGlzLnNldFNvcnREaXJlY3Rpb24oJ0FTQycpKTtcblxuICAgIHRoaXMuZG93bkljb24gPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xuICAgIHRoaXMucmVuZGVyZXI/LnNldEF0dHJpYnV0ZSh0aGlzLmRvd25JY29uLCAnc3JjJywgdGhpcy5jb2x1bW4oKT8uc29ydERlc2NJY29uKTtcbiAgICB0aGlzLnJlbmRlcmVyPy5zZXRTdHlsZSh0aGlzLmRvd25JY29uLCAnb3BhY2l0eScsICcwLjUnKTtcbiAgICB0aGlzLnJlbmRlcmVyPy5zZXRTdHlsZSh0aGlzLmRvd25JY29uLCAndHJhbnNpdGlvbicsICdvcGFjaXR5IDAuM3MgZWFzZScpO1xuICAgIHRoaXMucmVuZGVyZXI/LnNldFN0eWxlKHRoaXMuZG93bkljb24sICd3aWR0aCcsICc5cHgnKTtcbiAgICB0aGlzLnJlbmRlcmVyPy5zZXRTdHlsZSh0aGlzLmRvd25JY29uLCAnY3Vyc29yJywgJ3BvaW50ZXInKTtcbiAgICB0aGlzLnJlbmRlcmVyPy5saXN0ZW4odGhpcy5kb3duSWNvbiwgJ2NsaWNrJywgKCkgPT4gdGhpcy5zZXRTb3J0RGlyZWN0aW9uKCdERVNDJykpO1xuXG4gICAgdGhpcy5yZW5kZXJlcj8uYXBwZW5kQ2hpbGQoaWNvbkNvbnRhaW5lciwgdGhpcy51cEljb24pO1xuICAgIHRoaXMucmVuZGVyZXI/LmFwcGVuZENoaWxkKGljb25Db250YWluZXIsIHRoaXMuZG93bkljb24pO1xuICAgIHRoaXMucmVuZGVyZXI/LmFwcGVuZENoaWxkKGNvbnRhaW5lciwgaWNvbkNvbnRhaW5lcik7XG5cbiAgICBpZiAodGhpcy5tdWx0aUNvbHVtblNvcnQoKSkge1xuICAgICAgdGhpcy5zb3J0T3JkZXJFbGVtZW50ID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICB0aGlzLnJlbmRlcmVyPy5zZXRTdHlsZSh0aGlzLnNvcnRPcmRlckVsZW1lbnQsICdmb250LXNpemUnLCAnMTJweCcpO1xuICAgICAgdGhpcy5yZW5kZXJlcj8uc2V0U3R5bGUodGhpcy5zb3J0T3JkZXJFbGVtZW50LCAnZm9udC13ZWlnaHQnLCAnYm9sZCcpO1xuICAgICAgdGhpcy5yZW5kZXJlcj8uc2V0U3R5bGUodGhpcy5zb3J0T3JkZXJFbGVtZW50LCAnY29sb3InLCAnIzAwMCcpO1xuICAgICAgdGhpcy5yZW5kZXJlcj8uYXBwZW5kQ2hpbGQoY29udGFpbmVyLCB0aGlzLnNvcnRPcmRlckVsZW1lbnQpO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyZXI/LmFwcGVuZENoaWxkKHRoaXMuZWwubmF0aXZlRWxlbWVudCwgY29udGFpbmVyKTtcbiAgICB0aGlzLnVwZGF0ZUljb25TdHlsZXMoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlc1snYWN0aXZlU29ydCddIHx8IGNoYW5nZXNbJ2FjdGl2ZVNvcnRzJ10pIHtcbiAgICAgIHRoaXMudXBkYXRlSWNvblN0eWxlcygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0U29ydERpcmVjdGlvbihkaXJlY3Rpb246ICdBU0MnIHwgJ0RFU0MnKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubXVsdGlDb2x1bW5Tb3J0KCkpIHtcbiAgICAgIHRoaXMuaGFuZGxlTXVsdGlDb2x1bW5Tb3J0KGRpcmVjdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGFuZGxlU2luZ2xlQ29sdW1uU29ydChkaXJlY3Rpb24pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlU2luZ2xlQ29sdW1uU29ydChkaXJlY3Rpb246ICdBU0MnIHwgJ0RFU0MnKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY3VycmVudERpcmVjdGlvbigpID09PSBkaXJlY3Rpb24pIHtcbiAgICAgIHRoaXMuY3VycmVudERpcmVjdGlvbi5zZXQoJycpOyAvLyBSZXNldCBzb3J0aW5nIGlmIHRoZSBzYW1lIGRpcmVjdGlvbiBpcyBjbGlja2VkXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3VycmVudERpcmVjdGlvbi5zZXQoZGlyZWN0aW9uKTtcbiAgICB9XG5cbiAgICB0aGlzLnNvcnRDaGFuZ2UuZW1pdCh7IFxuICAgICAgY29sdW1uOiB0aGlzLmNvbHVtbigpPy5kYXRhIHx8ICcnLCBcbiAgICAgIGRpcmVjdGlvbjogdGhpcy5jdXJyZW50RGlyZWN0aW9uKClcbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZUljb25TdHlsZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlTXVsdGlDb2x1bW5Tb3J0KGRpcmVjdGlvbjogJ0FTQycgfCAnREVTQycpOiB2b2lkIHtcbiAgICBjb25zdCBleGlzdGluZ1NvcnRJbmRleCA9IHRoaXMuYWN0aXZlU29ydHMoKS5maW5kSW5kZXgoc29ydCA9PiBzb3J0LmNvbHVtbiA9PT0gdGhpcy5jb2x1bW4oKT8uZGF0YSk7XG4gICAgXG4gICAgaWYgKGV4aXN0aW5nU29ydEluZGV4ICE9PSAtMSkge1xuICAgICAgaWYgKHRoaXMuYWN0aXZlU29ydHMoKVtleGlzdGluZ1NvcnRJbmRleF0uZGlyZWN0aW9uICE9PSBkaXJlY3Rpb24pIHtcbiAgICAgICAgdGhpcy5hY3RpdmVTb3J0cygpW2V4aXN0aW5nU29ydEluZGV4XS5kaXJlY3Rpb24gPSBkaXJlY3Rpb247XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWN0aXZlU29ydHMoKS5wdXNoKHsgXG4gICAgICAgIGNvbHVtbjogdGhpcy5jb2x1bW4oKT8uZGF0YSB8fCAnJywgXG4gICAgICAgIGRpcmVjdGlvblxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMubXVsdGlTb3J0Q2hhbmdlLmVtaXQoWy4uLnRoaXMuYWN0aXZlU29ydHMoKV0pO1xuICAgIHRoaXMudXBkYXRlSWNvblN0eWxlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVJY29uU3R5bGVzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm11bHRpQ29sdW1uU29ydCgpKSB7XG4gICAgICB0aGlzLnVwZGF0ZU11bHRpQ29sdW1uSWNvblN0eWxlcygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVwZGF0ZVNpbmdsZUNvbHVtbkljb25TdHlsZXMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNpbmdsZUNvbHVtbkljb25TdHlsZXMoKTogdm9pZCB7XG4gICAgY29uc3QgaXNBY3RpdmVDb2x1bW4gPSB0aGlzLmFjdGl2ZVNvcnQoKT8uY29sdW1uID09PSB0aGlzLmNvbHVtbigpPy5kYXRhO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnJlbmRlcmVyPy5zZXRTdHlsZShcbiAgICAgICAgdGhpcy51cEljb24sXG4gICAgICAgICdvcGFjaXR5JyxcbiAgICAgICAgaXNBY3RpdmVDb2x1bW4gJiYgdGhpcy5jdXJyZW50RGlyZWN0aW9uKCkgPT09ICdBU0MnID8gJzEnIDogJzAuNSdcbiAgICAgICk7XG4gICAgICB0aGlzLnJlbmRlcmVyPy5zZXRTdHlsZShcbiAgICAgICAgdGhpcy5kb3duSWNvbixcbiAgICAgICAgJ29wYWNpdHknLFxuICAgICAgICBpc0FjdGl2ZUNvbHVtbiAmJiB0aGlzLmN1cnJlbnREaXJlY3Rpb24oKSA9PT0gJ0RFU0MnID8gJzEnIDogJzAuNSdcbiAgICAgICk7XG4gICAgfSwgMCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU11bHRpQ29sdW1uSWNvblN0eWxlcygpOiB2b2lkIHtcbiAgICBjb25zdCBjb2x1bW5Tb3J0ID0gdGhpcy5hY3RpdmVTb3J0cygpLmZpbmQoc29ydCA9PiBzb3J0LmNvbHVtbiA9PT0gdGhpcy5jb2x1bW4oKT8uZGF0YSk7XG4gICAgXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnJlbmRlcmVyPy5zZXRTdHlsZShcbiAgICAgICAgdGhpcy51cEljb24sXG4gICAgICAgICdvcGFjaXR5JyxcbiAgICAgICAgY29sdW1uU29ydD8uZGlyZWN0aW9uID09PSAnQVNDJyA/ICcxJyA6ICcwLjUnXG4gICAgICApO1xuICAgICAgdGhpcy5yZW5kZXJlcj8uc2V0U3R5bGUoXG4gICAgICAgIHRoaXMuZG93bkljb24sXG4gICAgICAgICdvcGFjaXR5JyxcbiAgICAgICAgY29sdW1uU29ydD8uZGlyZWN0aW9uID09PSAnREVTQycgPyAnMScgOiAnMC41J1xuICAgICAgKTtcblxuICAgICAgaWYgKHRoaXMuc29ydE9yZGVyRWxlbWVudCkge1xuICAgICAgICBjb25zdCBzb3J0SW5kZXggPSB0aGlzLmFjdGl2ZVNvcnRzKCkuZmluZEluZGV4KHNvcnQgPT4gc29ydC5jb2x1bW4gPT09IHRoaXMuY29sdW1uKCk/LmRhdGEpO1xuICAgICAgICBpZiAoc29ydEluZGV4ICE9PSAtMSkge1xuICAgICAgICAgIHRoaXMucmVuZGVyZXI/LnNldFByb3BlcnR5KHRoaXMuc29ydE9yZGVyRWxlbWVudCwgJ3RleHRDb250ZW50JywgKHNvcnRJbmRleCArIDEpLnRvU3RyaW5nKCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucmVuZGVyZXI/LnNldFByb3BlcnR5KHRoaXMuc29ydE9yZGVyRWxlbWVudCwgJ3RleHRDb250ZW50JywgJycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgMCk7XG4gIH1cbn0iXX0=