@acorex/components 3.0.20 → 3.0.24

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.
Files changed (34) hide show
  1. package/acorex-components.metadata.json +1 -1
  2. package/bundles/acorex-components.umd.js +13 -13
  3. package/bundles/acorex-components.umd.js.map +1 -1
  4. package/bundles/acorex-components.umd.min.js +1 -1
  5. package/bundles/acorex-components.umd.min.js.map +1 -1
  6. package/esm2015/lib/color-picker/color-picker.component.js +2 -2
  7. package/esm2015/lib/date-picker/date-picker.component.js +2 -2
  8. package/esm2015/lib/form-group/form-group.component.js +2 -2
  9. package/esm2015/lib/number-box/number-box.component.js +2 -2
  10. package/esm2015/lib/password-box/password-box.component.js +2 -2
  11. package/esm2015/lib/searchbox/searchbox.component.js +2 -2
  12. package/esm2015/lib/selectbox/selectbox.component.js +2 -2
  13. package/esm2015/lib/selectbox/selectbox2.component.js +2 -2
  14. package/esm2015/lib/textarea/textarea.component.js +2 -2
  15. package/esm2015/lib/textbox/textbox.component.js +2 -2
  16. package/esm2015/lib/time-picker/time-picker.component.js +2 -2
  17. package/esm2015/lib/tooltip/tooltip.directive.js +3 -3
  18. package/esm5/lib/color-picker/color-picker.component.js +2 -2
  19. package/esm5/lib/date-picker/date-picker.component.js +2 -2
  20. package/esm5/lib/form-group/form-group.component.js +2 -2
  21. package/esm5/lib/number-box/number-box.component.js +2 -2
  22. package/esm5/lib/password-box/password-box.component.js +2 -2
  23. package/esm5/lib/searchbox/searchbox.component.js +2 -2
  24. package/esm5/lib/selectbox/selectbox.component.js +2 -2
  25. package/esm5/lib/selectbox/selectbox2.component.js +2 -2
  26. package/esm5/lib/textarea/textarea.component.js +2 -2
  27. package/esm5/lib/textbox/textbox.component.js +2 -2
  28. package/esm5/lib/time-picker/time-picker.component.js +2 -2
  29. package/esm5/lib/tooltip/tooltip.directive.js +3 -3
  30. package/fesm2015/acorex-components.js +13 -13
  31. package/fesm2015/acorex-components.js.map +1 -1
  32. package/fesm5/acorex-components.js +13 -13
  33. package/fesm5/acorex-components.js.map +1 -1
  34. package/package.json +1 -1
@@ -1047,7 +1047,7 @@ var AXSelectBoxComponent = /** @class */ (function (_super) {
1047
1047
  template: "<ax-drop-down [size]=\"size\" [rtl]=\"rtl\" [showDropDownButton]=\"showDropDownButton\" [disabled]=\"disabled\"\r\n [readonly]=\"readonly\" #d (dropdownToggle)=\"dropdownToggleSelecBox($event)\">\r\n <ng-container start>\r\n <ng-content select=\"[start]\">\r\n </ng-content>\r\n </ng-container>\r\n <ng-container header>\r\n <div class=\"ax chips-container\" [horizontalScroll]=\"40\">\r\n <div class=\"chips\" [class.chips-blank]=\"mode === 'single'\" [title]=\"item[textField]\"\r\n *ngFor=\"let item of selectedItems\">\r\n <span class=\"chips-text\">\r\n {{item[textField]}}\r\n </span>\r\n <span class=\"close-icon\" (click)=\"handleItemRemoveClick(item)\"\r\n *ngIf=\"(readonly!=true || itemRemove ==true)&& disabled!=true && (allowNull==true || (selectedItems.length > 1))\">\r\n <i class=\"far fa-times-circle close\"></i>\r\n </span>\r\n </div>\r\n <div class=\"search-wrapper\" (click)=\"onTextBoxClick($event)\">\r\n <ax-text-box #textBoxSelectBox [textAlign]=\"textAlign\"\r\n [placeholder]=\"selectedItems.length == 0 ? placeholder : ''\" [readonly]=\"readonly\"\r\n [disabled]=\"disabled\" (onkey)=\"handleKeyEvent($event)\" [size]=\"size\"\r\n (onFocus)=\"onFocusTextBox($event)\">\r\n </ax-text-box>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container end>\r\n <ng-content select=\"[end]\">\r\n </ng-content>\r\n </ng-container>\r\n\r\n <ng-container panel>\r\n <div *ngIf=\"allowSearch\" class=\"search-wrapper\" style=\"padding: 0.7em;\">\r\n <ax-search-box #serchBox [(value)]=\"text\" (onkey)=\"handleKeyEventSearch($event)\"\r\n (textChanged)=\"textChanged($event)\" (onButtonClick)=\"textChanged($event)\">\r\n </ax-search-box>\r\n </div>\r\n <div class=\"ax list-container\">\r\n <div #listContainer style=\"max-height: 300px;overflow-y: auto;width: 100%;\" (scroll)=\"scrolled($event)\">\r\n <ng-container *ngIf=\"getItems().length>0; then thenTemplate; else elseTemplate\"></ng-container>\r\n <ng-template #thenTemplate>\r\n <div class=\"list-item\" *ngFor=\"let item of getItems();let i = index\"\r\n [class.focused]=\"i==currentfocusedIndex\" [class.selected]=\"isItemSelected(item)\"\r\n (click)=\"handleItemClick($event,item)\">\r\n <div style=\"display: flex;\">\r\n <ax-check-box *ngIf=\"showCheckBox\" [size]=\"size\" [value]=\"isItemSelected(item)\"\r\n [disabled]=\"!allowNull && selectedItems.length === 1 && isItemSelected(item)\">\r\n </ax-check-box>\r\n <ng-container *ngIf=\"rowTemplate; else elseTemplate\">\r\n <div style=\"white-space: nowrap;text-overflow: ellipsis;overflow: hidden;\"\r\n [title]=\"item[textField]\"\r\n [ngStyle]=\"(showCheckBox) ? {'padding-inline-start': '0.5rem'}:''\">\r\n <ng-container *ngTemplateOutlet=\"rowTemplate; context:{ $implicit: item }\">\r\n </ng-container>\r\n </div>\r\n\r\n </ng-container>\r\n <ng-template #elseTemplate>\r\n <div style=\"white-space: nowrap;text-overflow: ellipsis;overflow: hidden;\"\r\n [title]=\"item[textField]\"\r\n [ngStyle]=\"(showCheckBox) ? {'padding-inline-start': '0.5rem'}:''\">\r\n {{ item[textField] }}\r\n </div>\r\n </ng-template>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n </ng-template>\r\n <div *ngIf=\"showLoading\" class=\"ax-pad-sm\" style=\"text-align: center;\">\r\n <i class=\"far fa-spinner-third fa-pulse fa-2x\" style=\"color: var(--ax-primary-color);\"></i>\r\n\r\n </div>\r\n <!-- <ax-loading-indicator ></ax-loading-indicator> -->\r\n <ng-template #elseTemplate>\r\n <ng-container *ngIf=\"showLoading == true; then searchTemplate else noDataTemplate\"></ng-container>\r\n <ng-template #searchTemplate>\r\n <div class=\"list-item\">\r\n {{'common.searching' | trans}}\r\n </div>\r\n </ng-template>\r\n <ng-template #noDataTemplate>\r\n <div class=\"list-item\">\r\n {{'common.noDataFound' | trans}}\r\n </div>\r\n </ng-template>\r\n\r\n </ng-template>\r\n\r\n </div>\r\n\r\n </div>\r\n </ng-container>\r\n\r\n</ax-drop-down>",
1048
1048
  encapsulation: ViewEncapsulation.None,
1049
1049
  changeDetection: ChangeDetectionStrategy.OnPush,
1050
- host: { style: 'display: contents;' },
1050
+ host: {},
1051
1051
  providers: [{ provide: AXValidatableComponent, useExisting: AXSelectBoxComponent_1 }]
1052
1052
  }),
1053
1053
  __metadata("design:paramtypes", [ChangeDetectorRef, ElementRef, NgZone])
@@ -1055,4 +1055,4 @@ var AXSelectBoxComponent = /** @class */ (function (_super) {
1055
1055
  return AXSelectBoxComponent;
1056
1056
  }(AXValidatableComponent));
1057
1057
  export { AXSelectBoxComponent };
1058
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0Ym94LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BhY29yZXgvY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImxpYi9zZWxlY3Rib3gvc2VsZWN0Ym94LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsdUJBQXVCLEVBQ3ZCLEtBQUssRUFDTCxZQUFZLEVBQ1osTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sU0FBUyxFQUNULGVBQWUsRUFDZixXQUFXLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsQyxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDckUsT0FBTyxFQUErRCxzQkFBc0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVILE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUVsRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDeEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3RDO0lBQXNELG9EQUFXO0lBQy9ELDBDQUFZLFNBQWMsRUFBUyxhQUFvQixFQUFTLGNBQTJCO1FBQTNGLFlBQ0UsaUJB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QUksRUFBRSxFQUFFLEtBQUssRUFBRSxvQkFBb0IsRUFBRTtZQUNyQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxXQUFXLEVBQUUsc0JBQW9CLEVBQUUsQ0FBQztTQUNwRixDQUFDO3lDQXVGeUIsaUJBQWlCLEVBQWUsVUFBVSxFQUFnQixNQUFNO09BdEY5RSxvQkFBb0IsQ0FrNUJoQztJQUFELDJCQUFDO0NBQUEsQUFsNUJELENBQTBDLHNCQUFzQixHQWs1Qi9EO1NBbDVCWSxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBJbnB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgT3V0cHV0LFxyXG4gIFZpZXdDaGlsZCxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBFbGVtZW50UmVmLFxyXG4gIENvbnRlbnRDaGlsZCxcclxuICBOZ1pvbmUsXHJcbiAgUXVlcnlMaXN0LFxyXG4gIENvbnRlbnRDaGlsZHJlbixcclxuICBUZW1wbGF0ZVJlZlxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEFYVGV4dEJveENvbXBvbmVudCB9IGZyb20gJy4uL3RleHRib3gvdGV4dGJveC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBWERyb3Bkb3duQ29tcG9uZW50IH0gZnJvbSAnLi4vZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgQVhCYXNlU2l6YWJsZUNvbXBvbmVudCwgQVhCYXNlSW5wdXRDb21wb25lbnQsIEFYRWxlbWVudFNpemUsIEFYVmFsaWRhdGFibGVDb21wb25lbnQgfSBmcm9tICcuLi9iYXNlL2VsZW1lbnQuY2xhc3MnO1xyXG5pbXBvcnQgeyBBWERhdGFTb3VyY2VDb21wb25lbnQgfSBmcm9tICcuLi9kYXRhLXNvdXJjZS9kYXRhc291cmNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFYVmFsaWRhdGlvbiB9IGZyb20gJy4uL3ZhbGlkYXRpb24vdmFsaWRhdGlvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBWERhdGFTb3VyY2VSZWFkUGFyYW1zIH0gZnJvbSAnLi4vZGF0YS1zb3VyY2UvcmVhZC1wYXJhbSc7XHJcbmltcG9ydCB7IEFYQmFzZUV2ZW50IH0gZnJvbSAnLi4vYmFzZS9ldmVudHMuY2xhc3MnO1xyXG5pbXBvcnQgeyBBWFNlYXJjaEJveENvbXBvbmVudCB9IGZyb20gJy4uL3NlYXJjaGJveC9zZWFyY2hib3guY29tcG9uZW50JztcclxuaW1wb3J0IHsgQVhDb25maWcgfSBmcm9tICdAYWNvcmV4L2NvcmUnO1xyXG5pbXBvcnQgeyBkaWZmZXJlbmNlQnkgfSBmcm9tICdsb2Rhc2gnO1xyXG5leHBvcnQgY2xhc3MgQVhTZWxlY3RCb3hTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXh0ZW5kcyBBWEJhc2VFdmVudCB7XHJcbiAgY29uc3RydWN0b3IoY29tcG9uZW50OiBhbnksIHB1YmxpYyBzZWxlY3RlZEl0ZW1zOiBhbnlbXSwgcHVibGljIHNlbGVjdGVkVmFsdWVzOiBhbnlbXSB8IGFueSkge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIHRoaXMuY29tcG9uZW50ID0gY29tcG9uZW50O1xyXG4gIH1cclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdheC1zZWxlY3QtYm94JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2VsZWN0Ym94LmNvbXBvbmVudC5odG1sJyxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIGhvc3Q6IHsgc3R5bGU6ICdkaXNwbGF5OiBjb250ZW50czsnIH0sXHJcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBBWFZhbGlkYXRhYmxlQ29tcG9uZW50LCB1c2VFeGlzdGluZzogQVhTZWxlY3RCb3hDb21wb25lbnQgfV1cclxufSlcclxuZXhwb3J0IGNsYXNzIEFYU2VsZWN0Qm94Q29tcG9uZW50IGV4dGVuZHMgQVhWYWxpZGF0YWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFYQmFzZVNpemFibGVDb21wb25lbnQsIEFYQmFzZUlucHV0Q29tcG9uZW50IHtcclxuICBASW5wdXQoKSBzaG93RHJvcERvd25CdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBAQ29udGVudENoaWxkKFRlbXBsYXRlUmVmLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIHJvd1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHJvd0lucHV0VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZChBWFRleHRCb3hDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgc3BhbjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcblxyXG4gIEBWaWV3Q2hpbGQoQVhUZXh0Qm94Q29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIHRleHRib3g6IEFYVGV4dEJveENvbXBvbmVudDtcclxuXHJcbiAgQFZpZXdDaGlsZCgnbGlzdENvbnRhaW5lcicsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgbGlzdENvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3NlcmNoQm94JywgeyBzdGF0aWM6IGZhbHNlIH0pXHJcbiAgc2VyY2hCb3g6IEFYU2VhcmNoQm94Q29tcG9uZW50O1xyXG5cclxuICBAVmlld0NoaWxkKCd0ZXh0Qm94U2VsZWN0Qm94JywgeyBzdGF0aWM6IHRydWUgfSlcclxuICB0ZXh0Qm94U2VsZWN0Qm94OiBBWFRleHRCb3hDb21wb25lbnQ7XHJcblxyXG4gIEBJbnB1dCgpIHNob3dDaGVja0JveDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIEBJbnB1dCgpIHJlYWRvbmx5OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIHJ0bDogYm9vbGVhbiA9IEFYQ29uZmlnLmdldCgnbGF5b3V0LnJ0bCcpO1xyXG5cclxuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoKSBzaXplOiBBWEVsZW1lbnRTaXplID0gJ21kJztcclxuXHJcbiAgQElucHV0KCkgYWxsb3dOdWxsOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KCkgdGV4dEFsaWduOiAncmlnaHQnIHwgJ2xlZnQnIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIEBJbnB1dCgpIGJ1ZmZlclNpemU6IG51bWJlciA9IDIwO1xyXG5cclxuICBASW5wdXQoKSByZW1vdGVPcGVyYXRpb246IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgZHJvcGRvd25Ub2dnbGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgLy8gdGhpcyBpbnB1dCBpcyBQcml2YXRlIGFuZCBvbmx5IHVzZSBpbiBMT1ZcclxuXHJcbiAgY3VycmVudGZvY3VzZWRJbmRleDogbnVtYmVyID0gLTE7XHJcbiAgc2hvd0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgc2tpcDogbnVtYmVyID0gLTE7XHJcbiAgc2VhcmNoVGV4dDogc3RyaW5nID0gJyc7XHJcbiAgLy8gQElucHV0KClcclxuICAvLyBjaGlwc1dpZHRoOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgdGV4dDogc3RyaW5nID0gJyc7XHJcbiAgdG90YWxDb3VudDogbnVtYmVyID0gMDtcclxuXHJcbiAgQENvbnRlbnRDaGlsZChBWERhdGFTb3VyY2VDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgcHJpdmF0ZSBfY29udGVudERhdGFTb3VyY2U6IEFYRGF0YVNvdXJjZUNvbXBvbmVudDtcclxuXHJcbiAgcHJpdmF0ZSBfZGF0YVNvdXJjZTogQVhEYXRhU291cmNlQ29tcG9uZW50O1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBnZXQgZGF0YVNvdXJjZSgpOiBBWERhdGFTb3VyY2VDb21wb25lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RhdGFTb3VyY2UgPyB0aGlzLl9kYXRhU291cmNlIDogdGhpcy5fY29udGVudERhdGFTb3VyY2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGRhdGFTb3VyY2UodjogQVhEYXRhU291cmNlQ29tcG9uZW50KSB7XHJcbiAgICB0aGlzLl9kYXRhU291cmNlID0gdjtcclxuICB9XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoQVhWYWxpZGF0aW9uLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIHByaXZhdGUgX2NvbnRlbnRWYWxpZGF0aW9uOiBBWFZhbGlkYXRpb247XHJcblxyXG4gIHByaXZhdGUgX3ZhbGlkYXRpb246IEFYVmFsaWRhdGlvbjtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZ2V0IHZhbGlkYXRpb24oKTogQVhWYWxpZGF0aW9uIHtcclxuICAgIHJldHVybiB0aGlzLl92YWxpZGF0aW9uID8gdGhpcy5fdmFsaWRhdGlvbiA6IHRoaXMuX2NvbnRlbnRWYWxpZGF0aW9uO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCB2YWxpZGF0aW9uKHY6IEFYVmFsaWRhdGlvbikge1xyXG4gICAgdGhpcy5fdmFsaWRhdGlvbiA9IHY7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgcmVmOiBFbGVtZW50UmVmLCBwcml2YXRlIHpvbmU6IE5nWm9uZSkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2QnLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGRyb3Bkb3duOiBBWERyb3Bkb3duQ29tcG9uZW50O1xyXG5cclxuICBASW5wdXQoKSBhbGxvd1NlYXJjaDogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgdGV4dEZpZWxkOiBzdHJpbmcgPSAndGV4dCc7XHJcbiAgQElucHV0KCkgdmFsdWVGaWVsZDogc3RyaW5nID0gJ3ZhbHVlJztcclxuICBASW5wdXQoKSBtb2RlOiAnc2luZ2xlJyB8ICdtdWx0aXBsZScgPSAnc2luZ2xlJztcclxuICBpdGVtUmVtb3ZlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQE91dHB1dCgpIGl0ZW1zQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55W10+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcclxuXHJcbiAgQE91dHB1dCgpIG9uQmx1cjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgQE91dHB1dCgpIG9uRm9jdXM6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIHByaXZhdGUgX2l0ZW1zOiBhbnlbXSA9IFtdO1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGdldCBpdGVtcygpOiBhbnlbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5faXRlbXM7XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgaXRlbXModjogYW55W10pIHtcclxuICAgIHRoaXMuX2l0ZW1zID0gdjtcclxuICAgIGlmICh0aGlzLml0ZW1zQ2hhbmdlKSB7XHJcbiAgICAgIHRoaXMuaXRlbXNDaGFuZ2UuZW1pdCh2KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLml0ZW1zU3RhdHVzT2JzZXJ2ZXIpIHtcclxuICAgICAgdGhpcy5pdGVtc1N0YXR1c09ic2VydmVyLm5leHQodGhpcy5pdGVtcy5sZW5ndGgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFzU2VsZWN0ZWRWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGl0ZW1zRmlsdGVyZWQ6IGFueVtdID0gW107XHJcblxyXG4gIC8vICNlbmRyZWdpb25cclxuXHJcbiAgZHJvcERvd25EaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBAT3V0cHV0KClcclxuICBzZWxlY3Rpb25DaGFuZ2VkOiBFdmVudEVtaXR0ZXI8QVhTZWxlY3RCb3hTZWxlY3Rpb25DaGFuZ2VkRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxBWFNlbGVjdEJveFNlbGVjdGlvbkNoYW5nZWRFdmVudD4oKTtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgc2VsZWN0ZWRJdGVtc0NoYW5nZTogRXZlbnRFbWl0dGVyPGFueVtdPiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XHJcblxyXG4gIHByaXZhdGUgX3NlbGVjdGVkSXRlbXM6IGFueVtdID0gW107XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZ2V0IHNlbGVjdGVkSXRlbXMoKTogYW55W10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkSXRlbXMgfHwgW107XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgc2VsZWN0ZWRJdGVtcyh2OiBhbnlbXSkge1xyXG4gICAgdGhpcy5zZXRTZWxlY3RlZEl0ZW1zQ2hhbmdlKHYpO1xyXG4gICAgLy8gaWYgKCF2KSB7XHJcbiAgICAvLyAgIHYgPSBbXTtcclxuICAgIC8vIH1cclxuXHJcbiAgICAvLyBjb25zdCBvbGQgPSB0aGlzLnNlbGVjdGVkSXRlbXM7XHJcbiAgICAvLyBpZiAoSlNPTi5zdHJpbmdpZnkob2xkKSAhPT0gSlNPTi5zdHJpbmdpZnkodikpIHtcclxuICAgIC8vICAgdGhpcy5fc2VsZWN0ZWRJdGVtcyA9IHRoaXMubW9kZSA9PSAnc2luZ2xlJyA/IHYuc2xpY2UoMCwgMSkgOiBbLi4ubmV3IFNldCh2KV07IC8vWy4uLm5ldyBTZXQodlswXSldIDogWy4uLm5ldyBTZXQodildO1xyXG4gICAgLy8gICB0aGlzLl9zZWxlY3RlZEl0ZW1zLmZvckVhY2goKGMpID0+IChjLnNlbGVjdGVkID0gdHJ1ZSkpO1xyXG4gICAgLy8gICB0aGlzLnNlbGVjdGVkSXRlbXNDaGFuZ2UuZW1pdCh0aGlzLl9zZWxlY3RlZEl0ZW1zKTtcclxuICAgIC8vICAgdGhpcy5zZWxlY3RlZFZhbHVlc0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRWYWx1ZXMpO1xyXG4gICAgLy8gICB0aGlzLmNsZWFyVmFsaWRhdGlvblN0eWxlKHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgLy8gICB0aGlzLndhaXRGb3JEYXRhKCgpID0+IHtcclxuICAgIC8vICAgICBpZiAodGhpcy5fc2VsZWN0ZWRJdGVtcykge1xyXG4gICAgLy8gICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKChjKSA9PiAoYy5zZWxlY3RlZCA9IHRoaXMuX3NlbGVjdGVkSXRlbXMuc29tZSgoaSkgPT4gaVt0aGlzLnZhbHVlRmllbGRdID09IGNbdGhpcy52YWx1ZUZpZWxkXSkpKTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgIH0pO1xyXG4gICAgLy8gfVxyXG4gIH1cclxuXHJcbiAgc2V0U2VsZWN0ZWRJdGVtc0NoYW5nZSh2OiBhbnlbXSwgb2xkOiBhbnlbXSA9IHRoaXMuc2VsZWN0ZWRJdGVtcykge1xyXG4gICAgaWYgKCF2KSB7XHJcbiAgICAgIHYgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBjb25zdCBvbGQgPSB0aGlzLnNlbGVjdGVkSXRlbXM7XHJcbiAgICBpZiAoSlNPTi5zdHJpbmdpZnkob2xkKSAhPT0gSlNPTi5zdHJpbmdpZnkodikpIHtcclxuICAgICAgdGhpcy5fc2VsZWN0ZWRJdGVtcyA9IHRoaXMubW9kZSA9PSAnc2luZ2xlJyA/IHYuc2xpY2UoMCwgMSkgOiBbLi4ubmV3IFNldCh2KV07IC8vWy4uLm5ldyBTZXQodlswXSldIDogWy4uLm5ldyBTZXQodildO1xyXG4gICAgICB0aGlzLl9zZWxlY3RlZEl0ZW1zLmZvckVhY2goKGMpID0+IChjLnNlbGVjdGVkID0gdHJ1ZSkpO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXNDaGFuZ2UuZW1pdCh0aGlzLl9zZWxlY3RlZEl0ZW1zKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlc0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRWYWx1ZXMpO1xyXG4gICAgICB0aGlzLmNsZWFyVmFsaWRhdGlvblN0eWxlKHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgICB0aGlzLndhaXRGb3JEYXRhKCgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5fc2VsZWN0ZWRJdGVtcykge1xyXG4gICAgICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKChjKSA9PiAoYy5zZWxlY3RlZCA9IHRoaXMuX3NlbGVjdGVkSXRlbXMuc29tZSgoaSkgPT4gaVt0aGlzLnZhbHVlRmllbGRdID09IGNbdGhpcy52YWx1ZUZpZWxkXSkpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBpZiAodGhpcy5yb3dUZW1wbGF0ZSA9PT0gdW5kZWZpbmVkICYmIHRoaXMucm93SW5wdXRUZW1wbGF0ZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5yb3dUZW1wbGF0ZSA9IHRoaXMucm93SW5wdXRUZW1wbGF0ZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnJ0bCA9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMucnRsID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5yZWYubmF0aXZlRWxlbWVudCwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnZGlyZWN0aW9uJykgPT09ICdydGwnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2Nyb2xsZWQoZSkge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnJlbW90ZU9wZXJhdGlvbiAmJlxyXG4gICAgICB0aGlzLnRvdGFsQ291bnQgPiB0aGlzLml0ZW1zLmxlbmd0aCAmJlxyXG4gICAgICB0aGlzLmxpc3RDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQgIT0gMCAmJlxyXG4gICAgICB0aGlzLmxpc3RDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQgLSB0aGlzLmxpc3RDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgLSAzMDAgPCA1MFxyXG4gICAgKSB7XHJcbiAgICAgIGlmICh0aGlzLnNraXAgIT09IHRoaXMuaXRlbXMubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5zaG93TG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5za2lwID0gdGhpcy5pdGVtcy5sZW5ndGg7XHJcbiAgICAgICAgY29uc3QgcGFyYW1zOiBBWERhdGFTb3VyY2VSZWFkUGFyYW1zID0ge307XHJcbiAgICAgICAgcGFyYW1zLnNraXAgPSB0aGlzLml0ZW1zLmxlbmd0aDtcclxuICAgICAgICBwYXJhbXMudGFrZSA9IHRoaXMuYnVmZmVyU2l6ZTsgLy8qIChNYXRoLmZsb29yKHRoaXMuaXRlbXMubGVuZ3RoIC8gdGhpcy5idWZmZXJTaXplKSArIDEpO1xyXG4gICAgICAgIGlmICh0aGlzLnRleHRib3gpIHtcclxuICAgICAgICAgIHBhcmFtcy5zZWFyY2hUZXh0ID0gdGhpcy50ZXh0O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBwYXJhbXMuc2VhcmNoVGV4dCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZmV0Y2gocGFyYW1zKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIHNldFNlbGVjdGVkSXRlbXModjogYW55W10sIGlzVXNlcklucHV0OiBib29sZWFuKSB7XHJcbiAgICBsZXQgY2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgaWYgKGlzVXNlcklucHV0KSB7XHJcbiAgICAgIGNoYW5nZWQgPSBKU09OLnN0cmluZ2lmeSh2KSAhPT0gSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZEl0ZW1zKTtcclxuICAgIH1cclxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHY7XHJcbiAgICB0aGlzLnNldFNlbGVjdGVkSW5kZXgoKTtcclxuICAgIGlmIChpc1VzZXJJbnB1dCAmJiBjaGFuZ2VkKSB7XHJcbiAgICAgIHRoaXMuZW1pdFNlbGVjdGlvbkNoYW5nZWRFdmVudCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZWFyY2hDaGFuZ2VPYnNlcnZlcjogYW55O1xyXG5cclxuICBkZWxheTogbnVtYmVyID0gNTAwO1xyXG5cclxuICB0ZXh0Q2hhbmdlZChlKSB7XHJcbiAgICBpZiAoKGUudmFsdWUgPT09IG51bGwgfHwgZS52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGUudmFsdWUgPT09ICcnKSAmJiAoZS5vbGRWYWx1ZSA9PT0gbnVsbCB8fCBlLm9sZFZhbHVlID09PSB1bmRlZmluZWQgfHwgZS5vbGRWYWx1ZSA9PT0gJycpKSB7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXggPSAtMTtcclxuICAgICAgaWYgKHRoaXMucmVtb3RlT3BlcmF0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gdGhpcy50ZXh0O1xyXG4gICAgICAgIC8vICB0aGlzLnNlYXJjaFRleHQgPSBlLnZhbHVlO1xyXG4gICAgICAgIC8vIHRoaXMudGV4dCA9IGUudmFsdWU7XHJcbiAgICAgICAgLy8gdGhpcy5pdGVtcyA9IFtdO1xyXG4gICAgICAgIGlmICh0aGlzLml0ZW1zKSB7XHJcbiAgICAgICAgICBsZXQgdCA9IHRoaXMuaXRlbXMubGVuZ3RoO1xyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0OyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5pdGVtcy5wb3AoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHRoaXMuaXRlbXMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xyXG4gICAgICAgIC8vICAgdGhpcy5pdGVtcy5wb3AoKTtcclxuICAgICAgICAvLyB9KTtcclxuICAgICAgICBjb25zdCBwYXJhbXM6IEFYRGF0YVNvdXJjZVJlYWRQYXJhbXMgPSB7fTtcclxuICAgICAgICBwYXJhbXMuc2VhcmNoVGV4dCA9IHRoaXMudGV4dDtcclxuICAgICAgICAvLyBwYXJhbXMuc2VhcmNoVGV4dCA9IGUudmFsdWU7XHJcbiAgICAgICAgcGFyYW1zLnNraXAgPSAwO1xyXG4gICAgICAgIHBhcmFtcy50YWtlID0gdGhpcy5idWZmZXJTaXplO1xyXG4gICAgICAgIHRoaXMuZmV0Y2gocGFyYW1zKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25CdXR0b25DbGljayhlKSB7XHJcbiAgICBjb25zb2xlLmxvZygnb25CdXR0b25DbGljaycsIGUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRTZWxlY3RlZEluZGV4KHNpZ246IC0xIHwgMSB8IG51bGwgPSBudWxsKTogdm9pZCB7XHJcbiAgICBpZiAoc2lnbiA9PSBudWxsKSB7XHJcbiAgICAgIGlmICghdGhpcy5yZW1vdGVPcGVyYXRpb24gJiYgdGhpcy50ZXh0ICYmIHRoaXMudGV4dCAhPT0gJycpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXggPSB0aGlzLml0ZW1zXHJcbiAgICAgICAgICAuZmlsdGVyKChjKSA9PiAoY1t0aGlzLnRleHRGaWVsZF0gYXMgc3RyaW5nKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMudGV4dC50b0xvd2VyQ2FzZSgpKSlcclxuICAgICAgICAgIC5pbmRleE9mKHRoaXMuc2VsZWN0ZWRJdGVtc1t0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoIC0gMV0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY3VycmVudGZvY3VzZWRJbmRleCA9IHRoaXMuaXRlbXMuaW5kZXhPZih0aGlzLnNlbGVjdGVkSXRlbXNbdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCAtIDFdKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc2lnbiA9PT0gLTEgPyB0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXgtLSA6IHRoaXMuY3VycmVudGZvY3VzZWRJbmRleCsrO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnJlbW90ZU9wZXJhdGlvbikge1xyXG4gICAgICB0aGlzLml0ZW1zRmlsdGVyZWQgPSB0aGlzLml0ZW1zO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pdGVtc0ZpbHRlcmVkID0gdGhpcy50ZXh0XHJcbiAgICAgICAgPyB0aGlzLml0ZW1zLmZpbHRlcigoYykgPT4gKGNbdGhpcy50ZXh0RmllbGRdIGFzIHN0cmluZykudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnRleHQudG9Mb3dlckNhc2UoKSkpXHJcbiAgICAgICAgOiB0aGlzLml0ZW1zO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY3VycmVudGZvY3VzZWRJbmRleCA9XHJcbiAgICAgIHRoaXMuY3VycmVudGZvY3VzZWRJbmRleCA8IDBcclxuICAgICAgICA/IDBcclxuICAgICAgICA6IHRoaXMuY3VycmVudGZvY3VzZWRJbmRleCA+PSB0aGlzLml0ZW1zRmlsdGVyZWQubGVuZ3RoXHJcbiAgICAgICAgPyB0aGlzLml0ZW1zRmlsdGVyZWQubGVuZ3RoIC0gMVxyXG4gICAgICAgIDogdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4O1xyXG4gICAgLy9cclxuICAgIC8vIHNldCBzY3JvbGxcclxuICAgIGlmICh0aGlzLmxpc3RDb250YWluZXIpIHtcclxuICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcclxuICAgICAgICBjb25zdCBpdGVtRGl2ID0gdGhpcy5saXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihgLmxpc3QtaXRlbTpudGgtY2hpbGQoJHt0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXh9KWApO1xyXG4gICAgICAgIGlmIChpdGVtRGl2KSB7XHJcbiAgICAgICAgICBpdGVtRGl2LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAT3V0cHV0KClcclxuICBzZWxlY3RlZFZhbHVlc0NoYW5nZTogRXZlbnRFbWl0dGVyPGFueVtdIHwgYW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10gfCBhbnk+KCk7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGdldCBzZWxlY3RlZFZhbHVlcygpOiBhbnlbXSB8IGFueSB7XHJcbiAgICBpZiAodGhpcy5tb2RlID09PSAnc2luZ2xlJykge1xyXG4gICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRJdGVtcy5tYXAoKGMpID0+IGNbdGhpcy52YWx1ZUZpZWxkXSlbMF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRJdGVtcy5tYXAoKGMpID0+IGNbdGhpcy52YWx1ZUZpZWxkXSkgfHwgW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHNlbGVjdGVkVmFsdWVzKHY6IGFueVtdIHwgYW55KSB7XHJcbiAgICBpZiAodGhpcy5jb21wYXJlU2VsZWN0ZWRWYWx1ZXModikpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHYgPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh2ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBpZiAodiAhPSBbXSAmJiB2ICE9ICcnICYmIHYgIT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5oYXNTZWxlY3RlZFZhbHVlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMud2FpdEZvckRhdGEoKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ3NpbmdsZScpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXRlbXMuZmlsdGVyKChjKSA9PiB2ID09IGNbdGhpcy52YWx1ZUZpZWxkXSkpIHtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLml0ZW1zLmZpbHRlcigoYykgPT4gdiA9PSBjW3RoaXMudmFsdWVGaWVsZF0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2KSkge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gdi5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuc2VsZWN0ZWRJdGVtcy5maWx0ZXIoKGMpID0+IHYuaW5jbHVkZXMoY1t0aGlzLnZhbHVlRmllbGRdKSk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGxldCBhZGRJZCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdi5mb3JFYWNoKCh2SWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgYWRkSWQucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgW3RoaXMudmFsdWVGaWVsZF06IHZJZFxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBuZXdJZCA9IGRpZmZlcmVuY2VCeShhZGRJZCwgdGhpcy5zZWxlY3RlZEl0ZW1zLCB0aGlzLnZhbHVlRmllbGQpO1xyXG4gICAgICAgICAgICAgICAgbGV0IHZ2ID0gW107XHJcbiAgICAgICAgICAgICAgICBuZXdJZC5mb3JFYWNoKChyYykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICB2di5wdXNoKHJjW3RoaXMudmFsdWVGaWVsZF0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zXHJcbiAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGMpID0+IHZ2LmluY2x1ZGVzKGNbdGhpcy52YWx1ZUZpZWxkXSkpXHJcbiAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKChyZXMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaChyZXMpO1xyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIC8vICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaCh0aGlzLml0ZW1zLmZpbHRlcigoYykgPT4gdnYuaW5jbHVkZXMoY1t0aGlzLnZhbHVlRmllbGRdKSkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZEl0ZW1zQ2hhbmdlKHRoaXMuc2VsZWN0ZWRJdGVtcywgdnYubGVuZ3RoID4gMCA/IFsxXSA6IHRoaXMuc2VsZWN0ZWRJdGVtcyk7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAvLyAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5pdGVtcy5maWx0ZXIoKGMpID0+IHYuaW5jbHVkZXMoY1t0aGlzLnZhbHVlRmllbGRdKSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodikge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuaXRlbXMuZmlsdGVyKChjKSA9PiB2ID09PSBjW3RoaXMudmFsdWVGaWVsZF0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFZhbHVlcyk7XHJcbiAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb21wYXJlU2VsZWN0ZWRWYWx1ZXMobmV3VmFsdWU6IGFueVtdIHwgYW55KSB7XHJcbiAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB0aGlzLnNlbGVjdGVkVmFsdWVzO1xyXG4gICAgcmV0dXJuIChjdXJyZW50VmFsdWUgPT0gbnVsbCAmJiBuZXdWYWx1ZSA9PSBudWxsKSB8fCBKU09OLnN0cmluZ2lmeShjdXJyZW50VmFsdWUpID09PSBKU09OLnN0cmluZ2lmeShuZXdWYWx1ZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFNlbGVjdGVkVmFsdWVzKHY6IGFueVtdIHwgYW55LCBpc1VzZXJJbnB1dDogYm9vbGVhbikge1xyXG4gICAgY29uc3QgY2hhbmdlZCA9IGlzVXNlcklucHV0ID8gIXRoaXMuY29tcGFyZVNlbGVjdGVkVmFsdWVzKHYpIDogZmFsc2U7XHJcbiAgICB0aGlzLnNlbGVjdGVkVmFsdWVzID0gdjtcclxuICAgIGlmIChpc1VzZXJJbnB1dCAmJiBjaGFuZ2VkKSB7XHJcbiAgICAgIHRoaXMuZW1pdFNlbGVjdGlvbkNoYW5nZWRFdmVudCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBlbWl0U2VsZWN0aW9uQ2hhbmdlZEV2ZW50KCkge1xyXG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2VkLmVtaXQobmV3IEFYU2VsZWN0Qm94U2VsZWN0aW9uQ2hhbmdlZEV2ZW50KHRoaXMsIHRoaXMuc2VsZWN0ZWRJdGVtcywgdGhpcy5zZWxlY3RlZFZhbHVlcykpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuYnVmZmVyU2l6ZSA8IDEwKSB7XHJcbiAgICAgIHRoaXMuYnVmZmVyU2l6ZSA9IDEwO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubW9kZSA9PSAnc2luZ2xlJykge1xyXG4gICAgICB0aGlzLnNob3dDaGVja0JveCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLnJlbW90ZU9wZXJhdGlvbiB8fCAodGhpcy5yZW1vdGVPcGVyYXRpb24gJiYgdGhpcy5oYXNTZWxlY3RlZFZhbHVlKSkge1xyXG4gICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgIH1cclxuICB9XHJcbiAgZHJvcGRvd25Ub2dnbGVTZWxlY0JveChlKSB7XHJcbiAgICB0aGlzLnRleHQgPSAnJztcclxuICAgIGlmICh0aGlzLmRyb3Bkb3duLmlzT3Blbikge1xyXG4gICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VyY2hCb3gpIHtcclxuICAgICAgICAgIHRoaXMuc2VyY2hCb3guZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIDEpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gIHRoaXMucmVmcmVzaCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kcm9wZG93blRvZ2dsZS5lbWl0KGUpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xyXG4gICAgLy8gaWYgKCF0aGlzLmFsbG93U2VhcmNoKSB7XHJcbiAgICAvLyAgICAgaWYgKHRoaXMucmVhZG9ubHkgPT0gZmFsc2UpIHtcclxuICAgIC8vICAgICAgICAgdGhpcy5pdGVtUmVtb3ZlID0gdHJ1ZTtcclxuICAgIC8vICAgICAgICAgdGhpcy5yZWFkb25seSA9IHRydWU7XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gfVxyXG4gICAgdGhpcy5pbml0VmFsaWRhdGlvbih0aGlzLnJlZiwgJ3NlbGVjdGVkSXRlbXMnLCB0aGlzLnZhbGlkYXRpb24pO1xyXG4gICAgaWYgKHRoaXMuZGF0YVNvdXJjZSkge1xyXG4gICAgICAvLyBpZiAodGhpcy5hbGxvd1NlYXJjaCA9PSBmYWxzZSkge1xyXG4gICAgICAvLyAgIHRoaXMuZmV0Y2goKTtcclxuICAgICAgLy8gfVxyXG4gICAgICB0aGlzLmRhdGFTb3VyY2Uub25EYXRhUmVjZWl2ZWQuc3Vic2NyaWJlKChjKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zaG93TG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZGF0YVJlY2VpdmVkKGMuZGF0YS5yZXN1bHQpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBkYXRhUmVjZWl2ZWQoZGF0YTogYW55KSB7XHJcbiAgICBpZiAodGhpcy5yZW1vdGVPcGVyYXRpb24pIHtcclxuICAgICAgaWYgKHRoaXMuc2VhcmNoVGV4dCAmJiB0aGlzLnNlYXJjaFRleHQgIT0gbnVsbCAmJiB0aGlzLnNlYXJjaFRleHQgIT09ICcnKSB7XHJcbiAgICAgICAgaWYgKGRhdGEudG90YWxDb3VudCkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuaXRlbXMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgLy90aGlzLml0ZW1zID0gZGF0YS5pdGVtcztcclxuICAgICAgICAgICAgZGF0YS5pdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGRhdGEuaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuaXRlbXMucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIC8vIGlmICh0aGlzLml0ZW1zU3RhdHVzT2JzZXJ2ZXIpIHtcclxuICAgICAgICAgICAgLy8gICB0aGlzLml0ZW1zU3RhdHVzT2JzZXJ2ZXIubmV4dCh0aGlzLml0ZW1zLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSBkYXRhLnRvdGFsQ291bnQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmICh0aGlzLml0ZW1zLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXMgPSBkYXRhLml0ZW1zO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZGF0YS5pdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgLy8gaWYgKHRoaXMuaXRlbXNTdGF0dXNPYnNlcnZlcikge1xyXG4gICAgICAgICAgICAvLyAgIHRoaXMuaXRlbXNTdGF0dXNPYnNlcnZlci5uZXh0KHRoaXMuaXRlbXMubGVuZ3RoKTtcclxuICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy50b3RhbENvdW50ID0gZGF0YS5pdGVtcyA9PSB1bmRlZmluZWQgPyAwIDogZGF0YS5pdGVtcy5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKGRhdGEuaXRlbXMgJiYgZGF0YS5pdGVtcy5sZW5ndGggPT09IGRhdGEudG90YWxDb3VudCkge1xyXG4gICAgICAgIHRoaXMuaXRlbXMgPSBkYXRhLml0ZW1zO1xyXG4gICAgICAgIHRoaXMudG90YWxDb3VudCA9IGRhdGEuaXRlbXMubGVuZ3RoO1xyXG4gICAgICB9IGVsc2UgaWYgKGRhdGEudG90YWxDb3VudCkge1xyXG4gICAgICAgIGRhdGEuaXRlbXMuZm9yRWFjaCgoZWxtKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goZWxtKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICAvLyBpZiAodGhpcy5pdGVtc1N0YXR1c09ic2VydmVyKSB7XHJcbiAgICAgICAgLy8gICB0aGlzLml0ZW1zU3RhdHVzT2JzZXJ2ZXIubmV4dCh0aGlzLml0ZW1zLmxlbmd0aCk7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIHRoaXMudG90YWxDb3VudCA9IGRhdGEudG90YWxDb3VudDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBkYXRhLmZvckVhY2goKGVsbSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKGVsbSk7XHJcbiAgICAgICAgICAvLyBpZiAodGhpcy5pdGVtc1N0YXR1c09ic2VydmVyKSB7XHJcbiAgICAgICAgICAvLyAgIHRoaXMuaXRlbXNTdGF0dXNPYnNlcnZlci5uZXh0KHRoaXMuaXRlbXMubGVuZ3RoKTtcclxuICAgICAgICAgIC8vIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSBkYXRhLmxlbmd0aDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pdGVtcyA9IGRhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICAvLyBwcml2YXRlIHBhcmFtczogQVhEYXRhU291cmNlUmVhZFBhcmFtcyA9IHt9O1xyXG5cclxuICBmZXRjaChwYXJhbXM6IEFYRGF0YVNvdXJjZVJlYWRQYXJhbXMgPSB7fSkge1xyXG4gICAgLy8gIHRoaXMucGFyYW1zID0gcGFyYW1zO1xyXG4gICAgaWYgKHRoaXMuZGF0YVNvdXJjZSkge1xyXG4gICAgICB0aGlzLnNob3dMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgdGhpcy5kYXRhU291cmNlLmZldGNoKHBhcmFtcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWZyZXNoKCkge1xyXG4gICAgY29uc3QgcGFyYW1zOiBBWERhdGFTb3VyY2VSZWFkUGFyYW1zID0ge307XHJcbiAgICBpZiAodGhpcy5yZW1vdGVPcGVyYXRpb24pIHtcclxuICAgICAgcGFyYW1zLnNraXAgPSAwO1xyXG4gICAgICB0aGlzLnNraXAgPSAwO1xyXG4gICAgICBwYXJhbXMudGFrZSA9IHRoaXMuYnVmZmVyU2l6ZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRhdGFTb3VyY2UgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIC8vIHRoaXMuaXRlbXMgPSBbXTtcclxuICAgICAgLy8gdGhpcy5pdGVtcy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XHJcbiAgICAgIC8vICAgdGhpcy5pdGVtcy5wb3AoKTtcclxuICAgICAgLy8gfSk7XHJcblxyXG4gICAgICBpZiAodGhpcy5pdGVtcykge1xyXG4gICAgICAgIGxldCB0ID0gdGhpcy5pdGVtcy5sZW5ndGg7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0OyBpKyspIHtcclxuICAgICAgICAgIHRoaXMuaXRlbXMucG9wKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmZldGNoKHBhcmFtcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVJdGVtUmVtb3ZlQ2xpY2soaXRlbSkge1xyXG4gICAgaWYgKHRoaXMubW9kZSA9PT0gJ3NpbmdsZScpIHtcclxuICAgICAgLy8gdGhpcy5zZWxlY3RlZEl0ZW1zID0gbnVsbDtcclxuICAgICAgdGhpcy5zZXRTZWxlY3RlZFZhbHVlcyhudWxsLCB0cnVlKTtcclxuICAgICAgLy8gdGhpcy5zZWxlY3RlZEl0ZW1zQ2hhbmdlLmVtaXQodGhpcy5fc2VsZWN0ZWRJdGVtcyk7XHJcbiAgICAgIC8vIHRoaXMuY2xlYXJWYWxpZGF0aW9uU3R5bGUodGhpcy5yZWYubmF0aXZlRWxlbWVudCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKChjKSA9PiBjICE9PSBpdGVtKTtcclxuICAgICAgdGhpcy5zZXRTZWxlY3RlZEl0ZW1zKFxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5maWx0ZXIoKGMpID0+IGNbdGhpcy52YWx1ZUZpZWxkXSAhPT0gaXRlbVt0aGlzLnZhbHVlRmllbGRdKSxcclxuICAgICAgICB0cnVlXHJcbiAgICAgICk7XHJcbiAgICAgIC8vIHRoaXMuX3NlbGVjdGVkSXRlbXMgPSB0aGlzLl9zZWxlY3RlZEl0ZW1zLmZpbHRlcihjID0+IGMgIT09IGl0ZW0pO1xyXG4gICAgICAvLyB0aGlzLnNlbGVjdGVkSXRlbXNDaGFuZ2UuZW1pdCh0aGlzLl9zZWxlY3RlZEl0ZW1zKTtcclxuICAgICAgLy8gdGhpcy5jbGVhclZhbGlkYXRpb25TdHlsZSh0aGlzLnJlZi5uYXRpdmVFbGVtZW50KTtcclxuICAgIH1cclxuICAgIC8vIHRoaXMudGV4dCA9ICcnO1xyXG4gICAgdGhpcy52YWxpZGF0ZSgpO1xyXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBvbkZvY3VzVGV4dEJveChlKSB7fVxyXG5cclxuICBvblRleHRCb3hDbGljayhlKSB7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZCA9PSBmYWxzZSAmJiB0aGlzLnJlYWRvbmx5ID09IGZhbHNlKSB7XHJcbiAgICAgIHRoaXMuZHJvcGRvd24ub3BlbigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlSXRlbUNsaWNrKGU6IE1vdXNlRXZlbnQsIGl0ZW06IGFueSkge1xyXG4gICAgY29uc3QgdmFsdWUgPSBpdGVtW3RoaXMudmFsdWVGaWVsZF07XHJcblxyXG4gICAgaWYgKHRoaXMubW9kZSA9PT0gJ3NpbmdsZScpIHtcclxuICAgICAgLy8gdGhpcy5zZWxlY3RlZFZhbHVlcyA9IHZhbHVlO1xyXG4gICAgICB0aGlzLnNldFNlbGVjdGVkVmFsdWVzKHZhbHVlLCB0cnVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGV4aXN0cyA9IHRoaXMuc2VsZWN0ZWRWYWx1ZXMuc2xpY2UoMCk7XHJcbiAgICAgIGlmIChleGlzdHMuaW5jbHVkZXModmFsdWUpKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYWxsb3dOdWxsID09IHRydWUgfHwgKHRoaXMuYWxsb3dOdWxsID09IGZhbHNlICYmIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAxKSkge1xyXG4gICAgICAgICAgdGhpcy5oYW5kbGVJdGVtUmVtb3ZlQ2xpY2soaXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGV4aXN0cy5wdXNoKHZhbHVlKTtcclxuICAgICAgICAvLyB0aGlzLnNlbGVjdGVkVmFsdWVzID0gZXhpc3RzO1xyXG4gICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRWYWx1ZXMoZXhpc3RzLCB0cnVlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm1vZGUgPT0gJ3NpbmdsZScpIHtcclxuICAgICAgdGhpcy50ZXh0ID0gJyc7XHJcbiAgICAgIHRoaXMuZHJvcGRvd24uY2xvc2UoKTtcclxuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcbiAgICAvLyBpZiAoZS5zdG9wUHJvcGFnYXRpb24oKSA9PSB1bmRlZmluZWQpIHtcclxuICAgIC8vICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgLy8gfVxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLnNlcmNoQm94KSB7XHJcbiAgICAgICAgdGhpcy5zZXJjaEJveC5mb2N1cygpO1xyXG4gICAgICB9XHJcbiAgICB9LCAwKTtcclxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVLZXlFdmVudFNlYXJjaChlOiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSB7XHJcbiAgICAgIHRoaXMuZHJvcGRvd24uY2xvc2UoKTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy50ZXh0Qm94U2VsZWN0Qm94LmZvY3VzKCk7XHJcbiAgICAgIH0sIDApO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoZS5rZXkgPT09ICdFc2NhcGUnKSB7XHJcbiAgICAgIHRoaXMudGV4dCA9IG51bGw7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudGV4dEJveFNlbGVjdEJveC5mb2N1cygpO1xyXG4gICAgICB9LCAwKTtcclxuICAgIH1cclxuICAgIGlmICgoZS5rZXkgPT09ICdBcnJvd0Rvd24nIHx8IGUua2V5ID09PSAnQXJyb3dVcCcpICYmIHRoaXMuZ2V0SXRlbXMoKS5sZW5ndGggPiAwICYmIGUudHlwZSA9PT0gJ2tleWRvd24nKSB7XHJcbiAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdzaW5nbGUnKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4ID0gdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4ICsgKGUua2V5ID09PSAnQXJyb3dEb3duJyA/IDEgOiAtMSk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1CeUluZGV4KHRoaXMuY3VycmVudGZvY3VzZWRJbmRleCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZHJvcGRvd24uaXNPcGVuKSB7XHJcbiAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkSW5kZXgoZS5rZXkgPT09ICdBcnJvd0Rvd24nID8gMSA6IC0xKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5kcm9wZG93bi5vcGVuKCk7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VyY2hCb3gpIHtcclxuICAgICAgICAgICAgICB0aGlzLnNlcmNoQm94LmZvY3VzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gaWYgKGUua2V5ID09ICdFbnRlcicgJiYgdGhpcy5kcm9wZG93bi5pc09wZW4gJiYgdGhpcy5tb2RlID09ICdzaW5nbGUnKSB7XHJcbiAgICAvLyAgICAgdGhpcy5kcm9wZG93bi5jbG9zZSgpO1xyXG4gICAgLy8gICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgLy8gICAgICAgICB0aGlzLmRyb3Bkb3duLmZvY3VzKCk7XHJcbiAgICAvLyAgICAgfSwgMCk7XHJcbiAgICAvLyB9XHJcbiAgICAvL2Uuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAvL2UucHJldmVudERlZmF1bHQoKTtcclxuICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcbiAgICBpZiAoZS50eXBlID09PSAna2V5ZG93bicgJiYgZS5rZXkgPT0gJ0VudGVyJyAmJiB0aGlzLmRyb3Bkb3duLmlzT3Blbikge1xyXG4gICAgICBpZiAoIXRoaXMucmVtb3RlT3BlcmF0aW9uICYmIHRoaXMudGV4dCAmJiB0aGlzLnRleHQgIT09ICcnKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtc0ZpbHRlcmVkID0gdGhpcy5pdGVtcy5maWx0ZXIoKGMpID0+IChjW3RoaXMudGV4dEZpZWxkXSBhcyBzdHJpbmcpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy50ZXh0LnRvTG93ZXJDYXNlKCkpKTtcclxuICAgICAgICBpZiAodGhpcy5pdGVtc0ZpbHRlcmVkLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4ID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5pdGVtc0ZpbHRlcmVkID0gdGhpcy5pdGVtcztcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5maWx0ZXIoKGMpID0+IGNbdGhpcy52YWx1ZUZpZWxkXSA9PT0gdGhpcy5pdGVtc0ZpbHRlcmVkW3RoaXMuY3VycmVudGZvY3VzZWRJbmRleF1bdGhpcy52YWx1ZUZpZWxkXSkubGVuZ3RoID4gMCAmJlxyXG4gICAgICAgIHRoaXMubW9kZSA9PSAnbXVsdGlwbGUnXHJcbiAgICAgICkge1xyXG4gICAgICAgIGlmICh0aGlzLmFsbG93TnVsbCA9PSB0cnVlIHx8ICh0aGlzLmFsbG93TnVsbCA9PSBmYWxzZSAmJiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMSkpIHtcclxuICAgICAgICAgIGlmICghdGhpcy5yZW1vdGVPcGVyYXRpb24gJiYgdGhpcy50ZXh0ICYmIHRoaXMudGV4dCAhPT0gJycpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcihcclxuICAgICAgICAgICAgICAoYykgPT5cclxuICAgICAgICAgICAgICAgIGMgIT09XHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zLmZpbHRlcigoYykgPT4gKGNbdGhpcy50ZXh0RmllbGRdIGFzIHN0cmluZykudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnRleHQudG9Mb3dlckNhc2UoKSkpW3RoaXMuY3VycmVudGZvY3VzZWRJbmRleF1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuc2VsZWN0ZWRJdGVtcy5maWx0ZXIoKGMpID0+IGNbdGhpcy52YWx1ZUZpZWxkXSAhPT0gdGhpcy5pdGVtc1t0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXhdW3RoaXMudmFsdWVGaWVsZF0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5lbWl0U2VsZWN0aW9uQ2hhbmdlZEV2ZW50KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGUgPT0gJ211bHRpcGxlJykge1xyXG4gICAgICAgICAgaWYgKHRoaXMuY3VycmVudGZvY3VzZWRJbmRleCAhPSAtMSkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMucmVtb3RlT3BlcmF0aW9uICYmIHRoaXMudGV4dCAmJiB0aGlzLnRleHQgIT09ICcnKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuaXRlbXNGaWx0ZXJlZC5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5wdXNoKHRoaXMuaXRlbXNGaWx0ZXJlZFswXSk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5wdXNoKHRoaXMuaXRlbXNGaWx0ZXJlZFt0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXhdKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2godGhpcy5pdGVtc1t0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXhdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKHRoaXMudGV4dCAmJiB0aGlzLml0ZW1zRmlsdGVyZWQ/Lmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkSXRlbXModGhpcy5pdGVtc0ZpbHRlcmVkLCB0cnVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0aGlzLm1vZGUgPT0gJ3NpbmdsZScpIHtcclxuICAgICAgICAgICAgdGhpcy5kcm9wZG93bi5jbG9zZSgpO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnRleHRCb3hTZWxlY3RCb3guZm9jdXMoKTtcclxuICAgICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuICAgIH1cclxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgaXNDaGFyKHN0cjogc3RyaW5nKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHN0ci5pbmNsdWRlcygnU2hpZnQnKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ1RhYicpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnQ29udHJvbCcpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnQWx0JykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdDYXBzTG9jaycpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnTWV0YScpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnQ29udGV4dE1lbnUnKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ0VudGVyJykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdCYWNrc3BhY2UnKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ1ByaW50U2NyZWVuJykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdTY3JvbGxMb2NrJykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdQYXVzZScpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnSG9tZScpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnRW5kJykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdJbnNlcnQnKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ1BhZ2VVcCcpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnRGVsZXRlJykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdQYWdlRG93bicpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnTnVtTG9jaycpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnRXNjYXBlJykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdBcnJvdycpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygn2ZFGMScpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnRjInKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ0YzJykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdGNCcpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnRjUnKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ0Y2JykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdGNycpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnRjgnKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ0Y5JykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdGMTAnKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ0YxMScpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnRjEyJylcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZUtleUV2ZW50KGU6IGFueSkge1xyXG4gICAgLy8gY29uc3QgTnVtYmVyTWludXNQYXR0ZXJuID0gL1thLXpBLVowLTlcXC1dL2c7XHJcbiAgICAvLyBjb25zdCBGYXJzaSA9IC9b2b7ahtis2K3YrtmH2LnYutmB2YLYq9i12LbYtNiz24zYqNmE2KfYqtmG2YXaqdqv2YjYptiv2LDYsdiy2LfYuNqY2KTYpdij2KHZi9mM2Y3ZjtmP2ZDZkVxcc10rJC87XHJcbiAgICAvLyAgY29uc3QgaW5wdXRDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZShlLmNoYXJDb2RlKTtcclxuICAgIC8vIGNvbnN0IHBhdHRlcm5FbiA9IC9eW2EtekEtWjAtOV0qJC87XHJcbiAgICAvLyBjb25zdCBwYXR0ZXJuID0gL15bXFx1MDYwMC1cXHUwNkZGXFxzXSskLztcclxuICAgIGNvbnN0IGlucHV0Q2hhciA9IGUua2V5O1xyXG4gICAgaWYgKFxyXG4gICAgICAoaW5wdXRDaGFyICE9ICdCYWNrc3BhY2UnICYmXHJcbiAgICAgICAgaW5wdXRDaGFyICE9ICdCYWNrc3BhY2UnICYmXHJcbiAgICAgICAgaW5wdXRDaGFyICE9ICdUYWInICYmXHJcbiAgICAgICAgaW5wdXRDaGFyICE9ICdFbnRlcicgJiZcclxuICAgICAgICBpbnB1dENoYXIgIT0gJ0VzY2FwZScgJiZcclxuICAgICAgICBpbnB1dENoYXIgIT0gJ0Fycm93RG93bicgJiZcclxuICAgICAgICBpbnB1dENoYXIgIT0gJ0Fycm93VXAnKSB8fFxyXG4gICAgICBlLmNvZGUgPT09ICdTcGFjZScgfHxcclxuICAgICAgZS5jdHJsS2V5ID09IHRydWVcclxuICAgICkge1xyXG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgIGUua2V5ID09PSAnQmFja3NwYWNlJyAmJlxyXG4gICAgICBlLnR5cGUgPT09ICdrZXlkb3duJyAmJlxyXG4gICAgICAoKHRoaXMuYWxsb3dOdWxsID09PSB0cnVlICYmIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwKSB8fCAodGhpcy5hbGxvd051bGwgPT09IGZhbHNlICYmIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAxKSlcclxuICAgICkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucG9wKCk7XHJcbiAgICAgIHRoaXMuZW1pdFNlbGVjdGlvbkNoYW5nZWRFdmVudCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkge1xyXG4gICAgICB0aGlzLmRyb3Bkb3duLmNsb3NlKCk7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudGV4dEJveFNlbGVjdEJveC5mb2N1cygpO1xyXG4gICAgICB9LCAwKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgSU5QVVQgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGUua2V5Q29kZSk7XHJcbiAgICBpZiAodGhpcy5pc0NoYXIoZS5rZXkpICYmIHRoaXMuYWxsb3dTZWFyY2ggJiYgZS5jdHJsS2V5ID09IGZhbHNlKSB7XHJcbiAgICAgIHRoaXMuZHJvcGRvd24ub3BlbigpO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5zZXJjaEJveCkge1xyXG4gICAgICAgICAgdGhpcy5zZXJjaEJveC5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSwgMCk7XHJcbiAgICAgIHRoaXMudGV4dCA9IGUua2V5O1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChlLmtleSA9PT0gJ0VzY2FwZScpIHtcclxuICAgICAgdGhpcy50ZXh0ID0gbnVsbDtcclxuICAgICAgdGhpcy5kcm9wZG93bi5jbG9zZSgpO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLnRleHRCb3hTZWxlY3RCb3guZm9jdXMoKTtcclxuICAgICAgfSwgMCk7XHJcbiAgICB9XHJcbiAgICBpZiAoKGUua2V5ID09PSAnQXJyb3dEb3duJyB8fCBlLmtleSA9PT0gJ0Fycm93VXAnKSAmJiB0aGlzLmdldEl0ZW1zKCkubGVuZ3RoID4gMCAmJiBlLnR5cGUgPT09ICdrZXlkb3duJykge1xyXG4gICAgICBpZiAodGhpcy5tb2RlID09PSAnc2luZ2xlJykge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtQnlJbmRleCh0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXggKyAoZS5rZXkgPT09ICdBcnJvd0Rvd24nID8gMSA6IC0xKSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZHJvcGRvd24uaXNPcGVuKSB7XHJcbiAgICAgICAgICAvLyAgdGhpcy5zZXRTZWxlY3RlZEluZGV4KChlLmtleSA9PT0gJ0Fycm93RG93bicgPyAxIDogLTEpKTtcclxuICAgICAgICAgIGlmICh0aGlzLmFsbG93U2VhcmNoID09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRJbmRleChlLmtleSA9PT0gJ0Fycm93RG93bicgPyAxIDogLTEpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuc2VyY2hCb3gpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VyY2hCb3guZm9jdXMoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmRyb3Bkb3duLm9wZW4oKTtcclxuICAgICAgICAgIGlmICh0aGlzLmFsbG93U2VhcmNoID09IHRydWUpIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuc2VyY2hCb3gpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VyY2hCb3guZm9jdXMoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmFsbG93U2VhcmNoID09PSBmYWxzZSkge1xyXG4gICAgICBpZiAoZS50eXBlID09PSAna2V5ZG93bicgJiYgZS5rZXkgPT0gJ0VudGVyJyAmJiB0aGlzLmRyb3Bkb3duLmlzT3Blbikge1xyXG4gICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcigoYykgPT4gY1t0aGlzLnZhbHVlRmllbGRdID09PSB0aGlzLml0ZW1zRmlsdGVyZWRbdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4XVt0aGlzLnZhbHVlRmllbGRdKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICB0aGlzLm1vZGUgPT0gJ211bHRpcGxlJ1xyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuYWxsb3dOdWxsID09IHRydWUgfHwgKHRoaXMuYWxsb3dOdWxsID09IGZhbHNlICYmIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAxKSkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMucmVtb3RlT3BlcmF0aW9uICYmIHRoaXMudGV4dCAmJiB0aGlzLnRleHQgIT09ICcnKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcihcclxuICAgICAgICAgICAgICAgIChjKSA9PlxyXG4gICAgICAgICAgICAgICAgICBjICE9PVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zLmZpbHRlcigoYykgPT4gKGNbdGhpcy50ZXh0RmllbGRdIGFzIHN0cmluZykudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnRleHQudG9Mb3dlckNhc2UoKSkpW3RoaXMuY3VycmVudGZvY3VzZWRJbmRleF1cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuc2VsZWN0ZWRJdGVtcy5maWx0ZXIoKGMpID0+IGNbdGhpcy52YWx1ZUZpZWxkXSAhPT0gdGhpcy5pdGVtc1t0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXhdW3RoaXMudmFsdWVGaWVsZF0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdFNlbGVjdGlvbkNoYW5nZWRFdmVudCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5tb2RlID09ICdtdWx0aXBsZScpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudGZvY3VzZWRJbmRleCAhPSAtMSkge1xyXG4gICAgICAgICAgICAgIGlmICghdGhpcy5yZW1vdGVPcGVyYXRpb24gJiYgdGhpcy50ZXh0ICYmIHRoaXMudGV4dCAhPT0gJycpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLml0ZW1zRmlsdGVyZWQubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5wdXNoKHRoaXMuaXRlbXNGaWx0ZXJlZFswXSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaCh0aGlzLml0ZW1zRmlsdGVyZWRbdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4XSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5wdXNoKHRoaXMuaXRlbXNbdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4XSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMuZW1pdFNlbGVjdGlvbkNoYW5nZWRFdmVudCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy50ZXh0ICYmIHRoaXMuaXRlbXNGaWx0ZXJlZC5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkSXRlbXModGhpcy5pdGVtc0ZpbHRlcmVkLCB0cnVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5tb2RlID09ICdzaW5nbGUnKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5kcm9wZG93bi5jbG9zZSgpO1xyXG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50ZXh0Qm94U2VsZWN0Qm94LmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIGZvY3VzKCk6IHZvaWQge1xyXG4gICAgdGhpcy50ZXh0Ym94LmZvY3VzKCk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RlZEl0ZW1CeUluZGV4KGluZGV4OiBudW1iZXIpIHtcclxuICAgIGxldCBpdGVtID0gW107XHJcbiAgICBpZiAoIXRoaXMucmVtb3RlT3BlcmF0aW9uICYmIHRoaXMudGV4dCAmJiB0aGlzLnRleHQgIT09ICcnKSB7XHJcbiAgICAgIHRoaXMuaXRlbXNGaWx0ZXJlZCA9IHRoaXMuaXRlbXMuZmlsdGVyKChjKSA9PiAoY1t0aGlzLnRleHRGaWVsZF0gYXMgc3RyaW5nKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMudGV4dC50b0xvd2VyQ2FzZSgpKSk7XHJcblxyXG4gICAgICBpdGVtID0gdGhpcy5pdGVtc0ZpbHRlcmVkW2luZGV4XTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGl0ZW0gPSB0aGlzLml0ZW1zW2luZGV4XTtcclxuICAgIH1cclxuICAgIC8vXHJcbiAgICAvLyAgY29uc3QgaXRlbSA9IHRoaXMudGV4dCA/IHRoaXMuaXRlbXMuZmlsdGVyKChjKSA9PiAoY1t0aGlzLnRleHRGaWVsZF0gYXMgc3RyaW5nKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMudGV4dC50b0xvd2VyQ2FzZSgpKSlbaW5kZXhdIDogdGhpcy5pdGVtc1tpbmRleF07XHJcbiAgICBpZiAoaXRlbSkge1xyXG4gICAgICB0aGlzLnNldFNlbGVjdGVkSXRlbXMoW2l0ZW1dLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNldFNlbGVjdGVkSW5kZXgoKTtcclxuICB9XHJcblxyXG4gIGdldEl0ZW1zKCk6IGFueVtdIHtcclxuICAgIGlmICh0aGlzLml0ZW1zID09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICF0aGlzLnJlbW90ZU9wZXJhdGlvbiAmJiB0aGlzLnRleHQgJiYgdGhpcy50ZXh0ICE9PSAnJ1xyXG4gICAgICA/IHRoaXMuaXRlbXMuZmlsdGVyKChjKSA9PiAoY1t0aGlzLnRleHRGaWVsZF0gYXMgc3RyaW5nKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMudGV4dC50b0xvd2VyQ2FzZSgpKSlcclxuICAgICAgOiB0aGlzLml0ZW1zO1xyXG4gIH1cclxuXHJcbiAgaXNJdGVtU2VsZWN0ZWQoaXRlbTogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEl0ZW1zICYmIHRoaXMuc2VsZWN0ZWRJdGVtcy5maWx0ZXIoKGMpID0+IGNbdGhpcy52YWx1ZUZpZWxkXSA9PT0gaXRlbVt0aGlzLnZhbHVlRmllbGRdKS5sZW5ndGggPiAwO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpdGVtc1N0YXR1c09ic2VydmVyOiBhbnk7XHJcbiAgcHJpdmF0ZSB3YWl0Rm9yRGF0YShjYWxsYmFja2ZuOiAoKSA9PiB2b2lkKSB7XHJcbiAgICBpZiAodGhpcy5pdGVtcyAmJiB0aGlzLml0ZW1zLmxlbmd0aCkge1xyXG4gICAgICBjYWxsYmFja2ZuKCk7XHJcbiAgICB9IGVsc2UgaWYgKCF0aGlzLml0ZW1zU3RhdHVzT2JzZXJ2ZXIpIHtcclxuICAgICAgT2JzZXJ2YWJsZS5jcmVhdGUoKG9ic2VydmVyKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pdGVtc1N0YXR1c09ic2VydmVyID0gb2JzZXJ2ZXI7XHJcbiAgICAgIH0pXHJcbiAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDEwMCkpXHJcbiAgICAgICAgLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSlcclxuICAgICAgICAuc3Vic2NyaWJlKChjKSA9PiB7XHJcbiAgICAgICAgICBjYWxsYmFja2ZuKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
1058
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0Ym94LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BhY29yZXgvY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImxpYi9zZWxlY3Rib3gvc2VsZWN0Ym94LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsdUJBQXVCLEVBQ3ZCLEtBQUssRUFDTCxZQUFZLEVBQ1osTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sU0FBUyxFQUNULGVBQWUsRUFDZixXQUFXLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsQyxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDckUsT0FBTyxFQUErRCxzQkFBc0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVILE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUVsRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDeEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3RDO0lBQXNELG9EQUFXO0lBQy9ELDBDQUFZLFNBQWMsRUFBUyxhQUFvQixFQUFTLGNBQTJCO1FBQTNGLFlBQ0UsaUJB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QUksRUFBRSxFQUFJO1lBQ1YsU0FBUyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsV0FBVyxFQUFFLHNCQUFvQixFQUFFLENBQUM7U0FDcEYsQ0FBQzt5Q0F1RnlCLGlCQUFpQixFQUFlLFVBQVUsRUFBZ0IsTUFBTTtPQXRGOUUsb0JBQW9CLENBazVCaEM7SUFBRCwyQkFBQztDQUFBLEFBbDVCRCxDQUEwQyxzQkFBc0IsR0FrNUIvRDtTQWw1Qlksb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgSW5wdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIE91dHB1dCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgRWxlbWVudFJlZixcclxuICBDb250ZW50Q2hpbGQsXHJcbiAgTmdab25lLFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBDb250ZW50Q2hpbGRyZW4sXHJcbiAgVGVtcGxhdGVSZWZcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBBWFRleHRCb3hDb21wb25lbnQgfSBmcm9tICcuLi90ZXh0Ym94L3RleHRib3guY29tcG9uZW50JztcclxuaW1wb3J0IHsgQVhEcm9wZG93bkNvbXBvbmVudCB9IGZyb20gJy4uL2Ryb3Bkb3duL2Ryb3Bkb3duLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFYQmFzZVNpemFibGVDb21wb25lbnQsIEFYQmFzZUlucHV0Q29tcG9uZW50LCBBWEVsZW1lbnRTaXplLCBBWFZhbGlkYXRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vYmFzZS9lbGVtZW50LmNsYXNzJztcclxuaW1wb3J0IHsgQVhEYXRhU291cmNlQ29tcG9uZW50IH0gZnJvbSAnLi4vZGF0YS1zb3VyY2UvZGF0YXNvdXJjZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBWFZhbGlkYXRpb24gfSBmcm9tICcuLi92YWxpZGF0aW9uL3ZhbGlkYXRpb24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgQVhEYXRhU291cmNlUmVhZFBhcmFtcyB9IGZyb20gJy4uL2RhdGEtc291cmNlL3JlYWQtcGFyYW0nO1xyXG5pbXBvcnQgeyBBWEJhc2VFdmVudCB9IGZyb20gJy4uL2Jhc2UvZXZlbnRzLmNsYXNzJztcclxuaW1wb3J0IHsgQVhTZWFyY2hCb3hDb21wb25lbnQgfSBmcm9tICcuLi9zZWFyY2hib3gvc2VhcmNoYm94LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFYQ29uZmlnIH0gZnJvbSAnQGFjb3JleC9jb3JlJztcclxuaW1wb3J0IHsgZGlmZmVyZW5jZUJ5IH0gZnJvbSAnbG9kYXNoJztcclxuZXhwb3J0IGNsYXNzIEFYU2VsZWN0Qm94U2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV4dGVuZHMgQVhCYXNlRXZlbnQge1xyXG4gIGNvbnN0cnVjdG9yKGNvbXBvbmVudDogYW55LCBwdWJsaWMgc2VsZWN0ZWRJdGVtczogYW55W10sIHB1YmxpYyBzZWxlY3RlZFZhbHVlczogYW55W10gfCBhbnkpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLmNvbXBvbmVudCA9IGNvbXBvbmVudDtcclxuICB9XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXgtc2VsZWN0LWJveCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NlbGVjdGJveC5jb21wb25lbnQuaHRtbCcsXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBob3N0OiB7ICB9LFxyXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogQVhWYWxpZGF0YWJsZUNvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IEFYU2VsZWN0Qm94Q29tcG9uZW50IH1dXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBWFNlbGVjdEJveENvbXBvbmVudCBleHRlbmRzIEFYVmFsaWRhdGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBBWEJhc2VTaXphYmxlQ29tcG9uZW50LCBBWEJhc2VJbnB1dENvbXBvbmVudCB7XHJcbiAgQElucHV0KCkgc2hvd0Ryb3BEb3duQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgQENvbnRlbnRDaGlsZChUZW1wbGF0ZVJlZiwgeyBzdGF0aWM6IHRydWUgfSlcclxuICByb3dUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgQElucHV0KClcclxuICByb3dJbnB1dFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoQVhUZXh0Qm94Q29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIHNwYW46IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xyXG5cclxuICBAVmlld0NoaWxkKEFYVGV4dEJveENvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcclxuICB0ZXh0Ym94OiBBWFRleHRCb3hDb21wb25lbnQ7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2xpc3RDb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGxpc3RDb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xyXG5cclxuICBAVmlld0NoaWxkKCdzZXJjaEJveCcsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIHNlcmNoQm94OiBBWFNlYXJjaEJveENvbXBvbmVudDtcclxuXHJcbiAgQFZpZXdDaGlsZCgndGV4dEJveFNlbGVjdEJveCcsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgdGV4dEJveFNlbGVjdEJveDogQVhUZXh0Qm94Q29tcG9uZW50O1xyXG5cclxuICBASW5wdXQoKSBzaG93Q2hlY2tCb3g6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKSByZWFkb25seTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSBydGw6IGJvb2xlYW4gPSBBWENvbmZpZy5nZXQoJ2xheW91dC5ydGwnKTtcclxuXHJcbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZztcclxuXHJcbiAgQElucHV0KCkgc2l6ZTogQVhFbGVtZW50U2l6ZSA9ICdtZCc7XHJcblxyXG4gIEBJbnB1dCgpIGFsbG93TnVsbDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIEBJbnB1dCgpIHRleHRBbGlnbjogJ3JpZ2h0JyB8ICdsZWZ0JyB8IG51bGwgPSBudWxsO1xyXG5cclxuICBASW5wdXQoKSBidWZmZXJTaXplOiBudW1iZXIgPSAyMDtcclxuXHJcbiAgQElucHV0KCkgcmVtb3RlT3BlcmF0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIGRyb3Bkb3duVG9nZ2xlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIC8vIHRoaXMgaW5wdXQgaXMgUHJpdmF0ZSBhbmQgb25seSB1c2UgaW4gTE9WXHJcblxyXG4gIGN1cnJlbnRmb2N1c2VkSW5kZXg6IG51bWJlciA9IC0xO1xyXG4gIHNob3dMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHNraXA6IG51bWJlciA9IC0xO1xyXG4gIHNlYXJjaFRleHQ6IHN0cmluZyA9ICcnO1xyXG4gIC8vIEBJbnB1dCgpXHJcbiAgLy8gY2hpcHNXaWR0aDogc3RyaW5nID0gJyc7XHJcblxyXG4gIHRleHQ6IHN0cmluZyA9ICcnO1xyXG4gIHRvdGFsQ291bnQ6IG51bWJlciA9IDA7XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoQVhEYXRhU291cmNlQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIHByaXZhdGUgX2NvbnRlbnREYXRhU291cmNlOiBBWERhdGFTb3VyY2VDb21wb25lbnQ7XHJcblxyXG4gIHByaXZhdGUgX2RhdGFTb3VyY2U6IEFYRGF0YVNvdXJjZUNvbXBvbmVudDtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZ2V0IGRhdGFTb3VyY2UoKTogQVhEYXRhU291cmNlQ29tcG9uZW50IHtcclxuICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlID8gdGhpcy5fZGF0YVNvdXJjZSA6IHRoaXMuX2NvbnRlbnREYXRhU291cmNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBkYXRhU291cmNlKHY6IEFYRGF0YVNvdXJjZUNvbXBvbmVudCkge1xyXG4gICAgdGhpcy5fZGF0YVNvdXJjZSA9IHY7XHJcbiAgfVxyXG5cclxuICBAQ29udGVudENoaWxkKEFYVmFsaWRhdGlvbiwgeyBzdGF0aWM6IHRydWUgfSlcclxuICBwcml2YXRlIF9jb250ZW50VmFsaWRhdGlvbjogQVhWYWxpZGF0aW9uO1xyXG5cclxuICBwcml2YXRlIF92YWxpZGF0aW9uOiBBWFZhbGlkYXRpb247XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGdldCB2YWxpZGF0aW9uKCk6IEFYVmFsaWRhdGlvbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fdmFsaWRhdGlvbiA/IHRoaXMuX3ZhbGlkYXRpb24gOiB0aGlzLl9jb250ZW50VmFsaWRhdGlvbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgdmFsaWRhdGlvbih2OiBBWFZhbGlkYXRpb24pIHtcclxuICAgIHRoaXMuX3ZhbGlkYXRpb24gPSB2O1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIHJlZjogRWxlbWVudFJlZiwgcHJpdmF0ZSB6b25lOiBOZ1pvbmUpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBAVmlld0NoaWxkKCdkJywgeyBzdGF0aWM6IHRydWUgfSlcclxuICBkcm9wZG93bjogQVhEcm9wZG93bkNvbXBvbmVudDtcclxuXHJcbiAgQElucHV0KCkgYWxsb3dTZWFyY2g6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHRleHRGaWVsZDogc3RyaW5nID0gJ3RleHQnO1xyXG4gIEBJbnB1dCgpIHZhbHVlRmllbGQ6IHN0cmluZyA9ICd2YWx1ZSc7XHJcbiAgQElucHV0KCkgbW9kZTogJ3NpbmdsZScgfCAnbXVsdGlwbGUnID0gJ3NpbmdsZSc7XHJcbiAgaXRlbVJlbW92ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBPdXRwdXQoKSBpdGVtc0NoYW5nZTogRXZlbnRFbWl0dGVyPGFueVtdPiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XHJcblxyXG4gIEBPdXRwdXQoKSBvbkJsdXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBPdXRwdXQoKSBvbkZvY3VzOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBwcml2YXRlIF9pdGVtczogYW55W10gPSBbXTtcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBnZXQgaXRlbXMoKTogYW55W10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IGl0ZW1zKHY6IGFueVtdKSB7XHJcbiAgICB0aGlzLl9pdGVtcyA9IHY7XHJcbiAgICBpZiAodGhpcy5pdGVtc0NoYW5nZSkge1xyXG4gICAgICB0aGlzLml0ZW1zQ2hhbmdlLmVtaXQodik7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5pdGVtc1N0YXR1c09ic2VydmVyKSB7XHJcbiAgICAgIHRoaXMuaXRlbXNTdGF0dXNPYnNlcnZlci5uZXh0KHRoaXMuaXRlbXMubGVuZ3RoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhc1NlbGVjdGVkVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpdGVtc0ZpbHRlcmVkOiBhbnlbXSA9IFtdO1xyXG5cclxuICAvLyAjZW5kcmVnaW9uXHJcblxyXG4gIGRyb3BEb3duRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgc2VsZWN0aW9uQ2hhbmdlZDogRXZlbnRFbWl0dGVyPEFYU2VsZWN0Qm94U2VsZWN0aW9uQ2hhbmdlZEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8QVhTZWxlY3RCb3hTZWxlY3Rpb25DaGFuZ2VkRXZlbnQ+KCk7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHNlbGVjdGVkSXRlbXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnlbXT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xyXG5cclxuICBwcml2YXRlIF9zZWxlY3RlZEl0ZW1zOiBhbnlbXSA9IFtdO1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGdldCBzZWxlY3RlZEl0ZW1zKCk6IGFueVtdIHtcclxuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZEl0ZW1zIHx8IFtdO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IHNlbGVjdGVkSXRlbXModjogYW55W10pIHtcclxuICAgIHRoaXMuc2V0U2VsZWN0ZWRJdGVtc0NoYW5nZSh2KTtcclxuICAgIC8vIGlmICghdikge1xyXG4gICAgLy8gICB2ID0gW107XHJcbiAgICAvLyB9XHJcblxyXG4gICAgLy8gY29uc3Qgb2xkID0gdGhpcy5zZWxlY3RlZEl0ZW1zO1xyXG4gICAgLy8gaWYgKEpTT04uc3RyaW5naWZ5KG9sZCkgIT09IEpTT04uc3RyaW5naWZ5KHYpKSB7XHJcbiAgICAvLyAgIHRoaXMuX3NlbGVjdGVkSXRlbXMgPSB0aGlzLm1vZGUgPT0gJ3NpbmdsZScgPyB2LnNsaWNlKDAsIDEpIDogWy4uLm5ldyBTZXQodildOyAvL1suLi5uZXcgU2V0KHZbMF0pXSA6IFsuLi5uZXcgU2V0KHYpXTtcclxuICAgIC8vICAgdGhpcy5fc2VsZWN0ZWRJdGVtcy5mb3JFYWNoKChjKSA9PiAoYy5zZWxlY3RlZCA9IHRydWUpKTtcclxuICAgIC8vICAgdGhpcy5zZWxlY3RlZEl0ZW1zQ2hhbmdlLmVtaXQodGhpcy5fc2VsZWN0ZWRJdGVtcyk7XHJcbiAgICAvLyAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXNDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkVmFsdWVzKTtcclxuICAgIC8vICAgdGhpcy5jbGVhclZhbGlkYXRpb25TdHlsZSh0aGlzLnJlZi5uYXRpdmVFbGVtZW50KTtcclxuICAgIC8vICAgdGhpcy53YWl0Rm9yRGF0YSgoKSA9PiB7XHJcbiAgICAvLyAgICAgaWYgKHRoaXMuX3NlbGVjdGVkSXRlbXMpIHtcclxuICAgIC8vICAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaCgoYykgPT4gKGMuc2VsZWN0ZWQgPSB0aGlzLl9zZWxlY3RlZEl0ZW1zLnNvbWUoKGkpID0+IGlbdGhpcy52YWx1ZUZpZWxkXSA9PSBjW3RoaXMudmFsdWVGaWVsZF0pKSk7XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICB9KTtcclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIHNldFNlbGVjdGVkSXRlbXNDaGFuZ2UodjogYW55W10sIG9sZDogYW55W10gPSB0aGlzLnNlbGVjdGVkSXRlbXMpIHtcclxuICAgIGlmICghdikge1xyXG4gICAgICB2ID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgLy8gY29uc3Qgb2xkID0gdGhpcy5zZWxlY3RlZEl0ZW1zO1xyXG4gICAgaWYgKEpTT04uc3RyaW5naWZ5KG9sZCkgIT09IEpTT04uc3RyaW5naWZ5KHYpKSB7XHJcbiAgICAgIHRoaXMuX3NlbGVjdGVkSXRlbXMgPSB0aGlzLm1vZGUgPT0gJ3NpbmdsZScgPyB2LnNsaWNlKDAsIDEpIDogWy4uLm5ldyBTZXQodildOyAvL1suLi5uZXcgU2V0KHZbMF0pXSA6IFsuLi5uZXcgU2V0KHYpXTtcclxuICAgICAgdGhpcy5fc2VsZWN0ZWRJdGVtcy5mb3JFYWNoKChjKSA9PiAoYy5zZWxlY3RlZCA9IHRydWUpKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zQ2hhbmdlLmVtaXQodGhpcy5fc2VsZWN0ZWRJdGVtcyk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXNDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkVmFsdWVzKTtcclxuICAgICAgdGhpcy5jbGVhclZhbGlkYXRpb25TdHlsZSh0aGlzLnJlZi5uYXRpdmVFbGVtZW50KTtcclxuICAgICAgdGhpcy53YWl0Rm9yRGF0YSgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3NlbGVjdGVkSXRlbXMpIHtcclxuICAgICAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaCgoYykgPT4gKGMuc2VsZWN0ZWQgPSB0aGlzLl9zZWxlY3RlZEl0ZW1zLnNvbWUoKGkpID0+IGlbdGhpcy52YWx1ZUZpZWxkXSA9PSBjW3RoaXMudmFsdWVGaWVsZF0pKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgaWYgKHRoaXMucm93VGVtcGxhdGUgPT09IHVuZGVmaW5lZCAmJiB0aGlzLnJvd0lucHV0VGVtcGxhdGUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMucm93VGVtcGxhdGUgPSB0aGlzLnJvd0lucHV0VGVtcGxhdGU7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5ydGwgPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnJ0bCA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQsIG51bGwpLmdldFByb3BlcnR5VmFsdWUoJ2RpcmVjdGlvbicpID09PSAncnRsJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNjcm9sbGVkKGUpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5yZW1vdGVPcGVyYXRpb24gJiZcclxuICAgICAgdGhpcy50b3RhbENvdW50ID4gdGhpcy5pdGVtcy5sZW5ndGggJiZcclxuICAgICAgdGhpcy5saXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0ICE9IDAgJiZcclxuICAgICAgdGhpcy5saXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0IC0gdGhpcy5saXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wIC0gMzAwIDwgNTBcclxuICAgICkge1xyXG4gICAgICBpZiAodGhpcy5za2lwICE9PSB0aGlzLml0ZW1zLmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMuc2hvd0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2tpcCA9IHRoaXMuaXRlbXMubGVuZ3RoO1xyXG4gICAgICAgIGNvbnN0IHBhcmFtczogQVhEYXRhU291cmNlUmVhZFBhcmFtcyA9IHt9O1xyXG4gICAgICAgIHBhcmFtcy5za2lwID0gdGhpcy5pdGVtcy5sZW5ndGg7XHJcbiAgICAgICAgcGFyYW1zLnRha2UgPSB0aGlzLmJ1ZmZlclNpemU7IC8vKiAoTWF0aC5mbG9vcih0aGlzLml0ZW1zLmxlbmd0aCAvIHRoaXMuYnVmZmVyU2l6ZSkgKyAxKTtcclxuICAgICAgICBpZiAodGhpcy50ZXh0Ym94KSB7XHJcbiAgICAgICAgICBwYXJhbXMuc2VhcmNoVGV4dCA9IHRoaXMudGV4dDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcGFyYW1zLnNlYXJjaFRleHQgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZldGNoKHBhcmFtcyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgcHJpdmF0ZSBzZXRTZWxlY3RlZEl0ZW1zKHY6IGFueVtdLCBpc1VzZXJJbnB1dDogYm9vbGVhbikge1xyXG4gICAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcclxuICAgIGlmIChpc1VzZXJJbnB1dCkge1xyXG4gICAgICBjaGFuZ2VkID0gSlNPTi5zdHJpbmdpZnkodikgIT09IEpTT04uc3RyaW5naWZ5KHRoaXMuc2VsZWN0ZWRJdGVtcyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB2O1xyXG4gICAgdGhpcy5zZXRTZWxlY3RlZEluZGV4KCk7XHJcbiAgICBpZiAoaXNVc2VySW5wdXQgJiYgY2hhbmdlZCkge1xyXG4gICAgICB0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2VhcmNoQ2hhbmdlT2JzZXJ2ZXI6IGFueTtcclxuXHJcbiAgZGVsYXk6IG51bWJlciA9IDUwMDtcclxuXHJcbiAgdGV4dENoYW5nZWQoZSkge1xyXG4gICAgaWYgKChlLnZhbHVlID09PSBudWxsIHx8IGUudmFsdWUgPT09IHVuZGVmaW5lZCB8fCBlLnZhbHVlID09PSAnJykgJiYgKGUub2xkVmFsdWUgPT09IG51bGwgfHwgZS5vbGRWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGUub2xkVmFsdWUgPT09ICcnKSkge1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4ID0gLTE7XHJcbiAgICAgIGlmICh0aGlzLnJlbW90ZU9wZXJhdGlvbikge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dCA9IHRoaXMudGV4dDtcclxuICAgICAgICAvLyAgdGhpcy5zZWFyY2hUZXh0ID0gZS52YWx1ZTtcclxuICAgICAgICAvLyB0aGlzLnRleHQgPSBlLnZhbHVlO1xyXG4gICAgICAgIC8vIHRoaXMuaXRlbXMgPSBbXTtcclxuICAgICAgICBpZiAodGhpcy5pdGVtcykge1xyXG4gICAgICAgICAgbGV0IHQgPSB0aGlzLml0ZW1zLmxlbmd0aDtcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXMucG9wKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0aGlzLml0ZW1zLmZvckVhY2goKGVsZW1lbnQpID0+IHtcclxuICAgICAgICAvLyAgIHRoaXMuaXRlbXMucG9wKCk7XHJcbiAgICAgICAgLy8gfSk7XHJcbiAgICAgICAgY29uc3QgcGFyYW1zOiBBWERhdGFTb3VyY2VSZWFkUGFyYW1zID0ge307XHJcbiAgICAgICAgcGFyYW1zLnNlYXJjaFRleHQgPSB0aGlzLnRleHQ7XHJcbiAgICAgICAgLy8gcGFyYW1zLnNlYXJjaFRleHQgPSBlLnZhbHVlO1xyXG4gICAgICAgIHBhcmFtcy5za2lwID0gMDtcclxuICAgICAgICBwYXJhbXMudGFrZSA9IHRoaXMuYnVmZmVyU2l6ZTtcclxuICAgICAgICB0aGlzLmZldGNoKHBhcmFtcyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQnV0dG9uQ2xpY2soZSkge1xyXG4gICAgY29uc29sZS5sb2coJ29uQnV0dG9uQ2xpY2snLCBlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0U2VsZWN0ZWRJbmRleChzaWduOiAtMSB8IDEgfCBudWxsID0gbnVsbCk6IHZvaWQge1xyXG4gICAgaWYgKHNpZ24gPT0gbnVsbCkge1xyXG4gICAgICBpZiAoIXRoaXMucmVtb3RlT3BlcmF0aW9uICYmIHRoaXMudGV4dCAmJiB0aGlzLnRleHQgIT09ICcnKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4ID0gdGhpcy5pdGVtc1xyXG4gICAgICAgICAgLmZpbHRlcigoYykgPT4gKGNbdGhpcy50ZXh0RmllbGRdIGFzIHN0cmluZykudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnRleHQudG9Mb3dlckNhc2UoKSkpXHJcbiAgICAgICAgICAuaW5kZXhPZih0aGlzLnNlbGVjdGVkSXRlbXNbdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCAtIDFdKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXggPSB0aGlzLml0ZW1zLmluZGV4T2YodGhpcy5zZWxlY3RlZEl0ZW1zW3RoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggLSAxXSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHNpZ24gPT09IC0xID8gdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4LS0gOiB0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXgrKztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5yZW1vdGVPcGVyYXRpb24pIHtcclxuICAgICAgdGhpcy5pdGVtc0ZpbHRlcmVkID0gdGhpcy5pdGVtcztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaXRlbXNGaWx0ZXJlZCA9IHRoaXMudGV4dFxyXG4gICAgICAgID8gdGhpcy5pdGVtcy5maWx0ZXIoKGMpID0+IChjW3RoaXMudGV4dEZpZWxkXSBhcyBzdHJpbmcpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy50ZXh0LnRvTG93ZXJDYXNlKCkpKVxyXG4gICAgICAgIDogdGhpcy5pdGVtcztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXggPVxyXG4gICAgICB0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXggPCAwXHJcbiAgICAgICAgPyAwXHJcbiAgICAgICAgOiB0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXggPj0gdGhpcy5pdGVtc0ZpbHRlcmVkLmxlbmd0aFxyXG4gICAgICAgID8gdGhpcy5pdGVtc0ZpbHRlcmVkLmxlbmd0aCAtIDFcclxuICAgICAgICA6IHRoaXMuY3VycmVudGZvY3VzZWRJbmRleDtcclxuICAgIC8vXHJcbiAgICAvLyBzZXQgc2Nyb2xsXHJcbiAgICBpZiAodGhpcy5saXN0Q29udGFpbmVyKSB7XHJcbiAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaXRlbURpdiA9IHRoaXMubGlzdENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYC5saXN0LWl0ZW06bnRoLWNoaWxkKCR7dGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4fSlgKTtcclxuICAgICAgICBpZiAoaXRlbURpdikge1xyXG4gICAgICAgICAgaXRlbURpdi5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgc2VsZWN0ZWRWYWx1ZXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnlbXSB8IGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdIHwgYW55PigpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRWYWx1ZXMoKTogYW55W10gfCBhbnkge1xyXG4gICAgaWYgKHRoaXMubW9kZSA9PT0gJ3NpbmdsZScpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkSXRlbXMubWFwKChjKSA9PiBjW3RoaXMudmFsdWVGaWVsZF0pWzBdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkSXRlbXMubWFwKChjKSA9PiBjW3RoaXMudmFsdWVGaWVsZF0pIHx8IFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBzZWxlY3RlZFZhbHVlcyh2OiBhbnlbXSB8IGFueSkge1xyXG4gICAgaWYgKHRoaXMuY29tcGFyZVNlbGVjdGVkVmFsdWVzKHYpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh2ID09IG51bGwpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gW107XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKHYgIT0gW10gJiYgdiAhPSAnJyAmJiB2ICE9IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMuaGFzU2VsZWN0ZWRWYWx1ZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLndhaXRGb3JEYXRhKCgpID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdzaW5nbGUnKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLml0ZW1zLmZpbHRlcigoYykgPT4gdiA9PSBjW3RoaXMudmFsdWVGaWVsZF0pKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5pdGVtcy5maWx0ZXIoKGMpID0+IHYgPT0gY1t0aGlzLnZhbHVlRmllbGRdKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodikpIHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IHYubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKChjKSA9PiB2LmluY2x1ZGVzKGNbdGhpcy52YWx1ZUZpZWxkXSkpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgYWRkSWQgPSBbXTtcclxuICAgICAgICAgICAgICAgIHYuZm9yRWFjaCgodklkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGFkZElkLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIFt0aGlzLnZhbHVlRmllbGRdOiB2SWRcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgbmV3SWQgPSBkaWZmZXJlbmNlQnkoYWRkSWQsIHRoaXMuc2VsZWN0ZWRJdGVtcywgdGhpcy52YWx1ZUZpZWxkKTtcclxuICAgICAgICAgICAgICAgIGxldCB2diA9IFtdO1xyXG4gICAgICAgICAgICAgICAgbmV3SWQuZm9yRWFjaCgocmMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgdnYucHVzaChyY1t0aGlzLnZhbHVlRmllbGRdKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1xyXG4gICAgICAgICAgICAgICAgICAuZmlsdGVyKChjKSA9PiB2di5pbmNsdWRlcyhjW3RoaXMudmFsdWVGaWVsZF0pKVxyXG4gICAgICAgICAgICAgICAgICAuZm9yRWFjaCgocmVzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2gocmVzKTtcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAvLyAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2godGhpcy5pdGVtcy5maWx0ZXIoKGMpID0+IHZ2LmluY2x1ZGVzKGNbdGhpcy52YWx1ZUZpZWxkXSkpKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRJdGVtc0NoYW5nZSh0aGlzLnNlbGVjdGVkSXRlbXMsIHZ2Lmxlbmd0aCA+IDAgPyBbMV0gOiB0aGlzLnNlbGVjdGVkSXRlbXMpO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgLy8gIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuaXRlbXMuZmlsdGVyKChjKSA9PiB2LmluY2x1ZGVzKGNbdGhpcy52YWx1ZUZpZWxkXSkpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHYpIHtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLml0ZW1zLmZpbHRlcigoYykgPT4gdiA9PT0gY1t0aGlzLnZhbHVlRmllbGRdKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlc0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRWYWx1ZXMpO1xyXG4gICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29tcGFyZVNlbGVjdGVkVmFsdWVzKG5ld1ZhbHVlOiBhbnlbXSB8IGFueSkge1xyXG4gICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy5zZWxlY3RlZFZhbHVlcztcclxuICAgIHJldHVybiAoY3VycmVudFZhbHVlID09IG51bGwgJiYgbmV3VmFsdWUgPT0gbnVsbCkgfHwgSlNPTi5zdHJpbmdpZnkoY3VycmVudFZhbHVlKSA9PT0gSlNPTi5zdHJpbmdpZnkobmV3VmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRTZWxlY3RlZFZhbHVlcyh2OiBhbnlbXSB8IGFueSwgaXNVc2VySW5wdXQ6IGJvb2xlYW4pIHtcclxuICAgIGNvbnN0IGNoYW5nZWQgPSBpc1VzZXJJbnB1dCA/ICF0aGlzLmNvbXBhcmVTZWxlY3RlZFZhbHVlcyh2KSA6IGZhbHNlO1xyXG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlcyA9IHY7XHJcbiAgICBpZiAoaXNVc2VySW5wdXQgJiYgY2hhbmdlZCkge1xyXG4gICAgICB0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZW1pdFNlbGVjdGlvbkNoYW5nZWRFdmVudCgpIHtcclxuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlZC5lbWl0KG5ldyBBWFNlbGVjdEJveFNlbGVjdGlvbkNoYW5nZWRFdmVudCh0aGlzLCB0aGlzLnNlbGVjdGVkSXRlbXMsIHRoaXMuc2VsZWN0ZWRWYWx1ZXMpKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmJ1ZmZlclNpemUgPCAxMCkge1xyXG4gICAgICB0aGlzLmJ1ZmZlclNpemUgPSAxMDtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLm1vZGUgPT0gJ3NpbmdsZScpIHtcclxuICAgICAgdGhpcy5zaG93Q2hlY2tCb3ggPSBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5yZW1vdGVPcGVyYXRpb24gfHwgKHRoaXMucmVtb3RlT3BlcmF0aW9uICYmIHRoaXMuaGFzU2VsZWN0ZWRWYWx1ZSkpIHtcclxuICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGRyb3Bkb3duVG9nZ2xlU2VsZWNCb3goZSkge1xyXG4gICAgdGhpcy50ZXh0ID0gJyc7XHJcbiAgICBpZiAodGhpcy5kcm9wZG93bi5pc09wZW4pIHtcclxuICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnNlcmNoQm94KSB7XHJcbiAgICAgICAgICB0aGlzLnNlcmNoQm94LmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCAxKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vICB0aGlzLnJlZnJlc2goKTtcclxuICAgIH1cclxuICAgIHRoaXMuZHJvcGRvd25Ub2dnbGUuZW1pdChlKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcclxuICAgIC8vIGlmICghdGhpcy5hbGxvd1NlYXJjaCkge1xyXG4gICAgLy8gICAgIGlmICh0aGlzLnJlYWRvbmx5ID09IGZhbHNlKSB7XHJcbiAgICAvLyAgICAgICAgIHRoaXMuaXRlbVJlbW92ZSA9IHRydWU7XHJcbiAgICAvLyAgICAgICAgIHRoaXMucmVhZG9ubHkgPSB0cnVlO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vIH1cclxuICAgIHRoaXMuaW5pdFZhbGlkYXRpb24odGhpcy5yZWYsICdzZWxlY3RlZEl0ZW1zJywgdGhpcy52YWxpZGF0aW9uKTtcclxuICAgIGlmICh0aGlzLmRhdGFTb3VyY2UpIHtcclxuICAgICAgLy8gaWYgKHRoaXMuYWxsb3dTZWFyY2ggPT0gZmFsc2UpIHtcclxuICAgICAgLy8gICB0aGlzLmZldGNoKCk7XHJcbiAgICAgIC8vIH1cclxuICAgICAgdGhpcy5kYXRhU291cmNlLm9uRGF0YVJlY2VpdmVkLnN1YnNjcmliZSgoYykgPT4ge1xyXG4gICAgICAgIHRoaXMuc2hvd0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmRhdGFSZWNlaXZlZChjLmRhdGEucmVzdWx0KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZGF0YVJlY2VpdmVkKGRhdGE6IGFueSkge1xyXG4gICAgaWYgKHRoaXMucmVtb3RlT3BlcmF0aW9uKSB7XHJcbiAgICAgIGlmICh0aGlzLnNlYXJjaFRleHQgJiYgdGhpcy5zZWFyY2hUZXh0ICE9IG51bGwgJiYgdGhpcy5zZWFyY2hUZXh0ICE9PSAnJykge1xyXG4gICAgICAgIGlmIChkYXRhLnRvdGFsQ291bnQpIHtcclxuICAgICAgICAgIGlmICh0aGlzLml0ZW1zLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIC8vdGhpcy5pdGVtcyA9IGRhdGEuaXRlbXM7XHJcbiAgICAgICAgICAgIGRhdGEuaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuaXRlbXMucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBkYXRhLml0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAvLyBpZiAodGhpcy5pdGVtc1N0YXR1c09ic2VydmVyKSB7XHJcbiAgICAgICAgICAgIC8vICAgdGhpcy5pdGVtc1N0YXR1c09ic2VydmVyLm5leHQodGhpcy5pdGVtcy5sZW5ndGgpO1xyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy50b3RhbENvdW50ID0gZGF0YS50b3RhbENvdW50O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5pdGVtcy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zID0gZGF0YS5pdGVtcztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGRhdGEuaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuaXRlbXMucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIC8vIGlmICh0aGlzLml0ZW1zU3RhdHVzT2JzZXJ2ZXIpIHtcclxuICAgICAgICAgICAgLy8gICB0aGlzLml0ZW1zU3RhdHVzT2JzZXJ2ZXIubmV4dCh0aGlzLml0ZW1zLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMudG90YWxDb3VudCA9IGRhdGEuaXRlbXMgPT0gdW5kZWZpbmVkID8gMCA6IGRhdGEuaXRlbXMubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChkYXRhLml0ZW1zICYmIGRhdGEuaXRlbXMubGVuZ3RoID09PSBkYXRhLnRvdGFsQ291bnQpIHtcclxuICAgICAgICB0aGlzLml0ZW1zID0gZGF0YS5pdGVtcztcclxuICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSBkYXRhLml0ZW1zLmxlbmd0aDtcclxuICAgICAgfSBlbHNlIGlmIChkYXRhLnRvdGFsQ291bnQpIHtcclxuICAgICAgICBkYXRhLml0ZW1zLmZvckVhY2goKGVsbSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKGVsbSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy8gaWYgKHRoaXMuaXRlbXNTdGF0dXNPYnNlcnZlcikge1xyXG4gICAgICAgIC8vICAgdGhpcy5pdGVtc1N0YXR1c09ic2VydmVyLm5leHQodGhpcy5pdGVtcy5sZW5ndGgpO1xyXG4gICAgICAgIC8vIH1cclxuICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSBkYXRhLnRvdGFsQ291bnQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZGF0YS5mb3JFYWNoKChlbG0pID0+IHtcclxuICAgICAgICAgIHRoaXMuaXRlbXMucHVzaChlbG0pO1xyXG4gICAgICAgICAgLy8gaWYgKHRoaXMuaXRlbXNTdGF0dXNPYnNlcnZlcikge1xyXG4gICAgICAgICAgLy8gICB0aGlzLml0ZW1zU3RhdHVzT2JzZXJ2ZXIubmV4dCh0aGlzLml0ZW1zLmxlbmd0aCk7XHJcbiAgICAgICAgICAvLyB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy50b3RhbENvdW50ID0gZGF0YS5sZW5ndGg7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaXRlbXMgPSBkYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgLy8gcHJpdmF0ZSBwYXJhbXM6IEFYRGF0YVNvdXJjZVJlYWRQYXJhbXMgPSB7fTtcclxuXHJcbiAgZmV0Y2gocGFyYW1zOiBBWERhdGFTb3VyY2VSZWFkUGFyYW1zID0ge30pIHtcclxuICAgIC8vICB0aGlzLnBhcmFtcyA9IHBhcmFtcztcclxuICAgIGlmICh0aGlzLmRhdGFTb3VyY2UpIHtcclxuICAgICAgdGhpcy5zaG93TG9hZGluZyA9IHRydWU7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5mZXRjaChwYXJhbXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVmcmVzaCgpIHtcclxuICAgIGNvbnN0IHBhcmFtczogQVhEYXRhU291cmNlUmVhZFBhcmFtcyA9IHt9O1xyXG4gICAgaWYgKHRoaXMucmVtb3RlT3BlcmF0aW9uKSB7XHJcbiAgICAgIHBhcmFtcy5za2lwID0gMDtcclxuICAgICAgdGhpcy5za2lwID0gMDtcclxuICAgICAgcGFyYW1zLnRha2UgPSB0aGlzLmJ1ZmZlclNpemU7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5kYXRhU291cmNlICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAvLyB0aGlzLml0ZW1zID0gW107XHJcbiAgICAgIC8vIHRoaXMuaXRlbXMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xyXG4gICAgICAvLyAgIHRoaXMuaXRlbXMucG9wKCk7XHJcbiAgICAgIC8vIH0pO1xyXG5cclxuICAgICAgaWYgKHRoaXMuaXRlbXMpIHtcclxuICAgICAgICBsZXQgdCA9IHRoaXMuaXRlbXMubGVuZ3RoO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdDsgaSsrKSB7XHJcbiAgICAgICAgICB0aGlzLml0ZW1zLnBvcCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5mZXRjaChwYXJhbXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlSXRlbVJlbW92ZUNsaWNrKGl0ZW0pIHtcclxuICAgIGlmICh0aGlzLm1vZGUgPT09ICdzaW5nbGUnKSB7XHJcbiAgICAgIC8vIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IG51bGw7XHJcbiAgICAgIHRoaXMuc2V0U2VsZWN0ZWRWYWx1ZXMobnVsbCwgdHJ1ZSk7XHJcbiAgICAgIC8vIHRoaXMuc2VsZWN0ZWRJdGVtc0NoYW5nZS5lbWl0KHRoaXMuX3NlbGVjdGVkSXRlbXMpO1xyXG4gICAgICAvLyB0aGlzLmNsZWFyVmFsaWRhdGlvblN0eWxlKHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcigoYykgPT4gYyAhPT0gaXRlbSk7XHJcbiAgICAgIHRoaXMuc2V0U2VsZWN0ZWRJdGVtcyhcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKChjKSA9PiBjW3RoaXMudmFsdWVGaWVsZF0gIT09IGl0ZW1bdGhpcy52YWx1ZUZpZWxkXSksXHJcbiAgICAgICAgdHJ1ZVxyXG4gICAgICApO1xyXG4gICAgICAvLyB0aGlzLl9zZWxlY3RlZEl0ZW1zID0gdGhpcy5fc2VsZWN0ZWRJdGVtcy5maWx0ZXIoYyA9PiBjICE9PSBpdGVtKTtcclxuICAgICAgLy8gdGhpcy5zZWxlY3RlZEl0ZW1zQ2hhbmdlLmVtaXQodGhpcy5fc2VsZWN0ZWRJdGVtcyk7XHJcbiAgICAgIC8vIHRoaXMuY2xlYXJWYWxpZGF0aW9uU3R5bGUodGhpcy5yZWYubmF0aXZlRWxlbWVudCk7XHJcbiAgICB9XHJcbiAgICAvLyB0aGlzLnRleHQgPSAnJztcclxuICAgIHRoaXMudmFsaWRhdGUoKTtcclxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgb25Gb2N1c1RleHRCb3goZSkge31cclxuXHJcbiAgb25UZXh0Qm94Q2xpY2soZSkge1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgPT0gZmFsc2UgJiYgdGhpcy5yZWFkb25seSA9PSBmYWxzZSkge1xyXG4gICAgICB0aGlzLmRyb3Bkb3duLm9wZW4oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZUl0ZW1DbGljayhlOiBNb3VzZUV2ZW50LCBpdGVtOiBhbnkpIHtcclxuICAgIGNvbnN0IHZhbHVlID0gaXRlbVt0aGlzLnZhbHVlRmllbGRdO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGUgPT09ICdzaW5nbGUnKSB7XHJcbiAgICAgIC8vIHRoaXMuc2VsZWN0ZWRWYWx1ZXMgPSB2YWx1ZTtcclxuICAgICAgdGhpcy5zZXRTZWxlY3RlZFZhbHVlcyh2YWx1ZSwgdHJ1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBleGlzdHMgPSB0aGlzLnNlbGVjdGVkVmFsdWVzLnNsaWNlKDApO1xyXG4gICAgICBpZiAoZXhpc3RzLmluY2x1ZGVzKHZhbHVlKSkge1xyXG4gICAgICAgIGlmICh0aGlzLmFsbG93TnVsbCA9PSB0cnVlIHx8ICh0aGlzLmFsbG93TnVsbCA9PSBmYWxzZSAmJiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMSkpIHtcclxuICAgICAgICAgIHRoaXMuaGFuZGxlSXRlbVJlbW92ZUNsaWNrKGl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBleGlzdHMucHVzaCh2YWx1ZSk7XHJcbiAgICAgICAgLy8gdGhpcy5zZWxlY3RlZFZhbHVlcyA9IGV4aXN0cztcclxuICAgICAgICB0aGlzLnNldFNlbGVjdGVkVmFsdWVzKGV4aXN0cywgdHJ1ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5tb2RlID09ICdzaW5nbGUnKSB7XHJcbiAgICAgIHRoaXMudGV4dCA9ICcnO1xyXG4gICAgICB0aGlzLmRyb3Bkb3duLmNsb3NlKCk7XHJcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfVxyXG4gICAgLy8gaWYgKGUuc3RvcFByb3BhZ2F0aW9uKCkgPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAvLyAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIC8vIH1cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5zZXJjaEJveCkge1xyXG4gICAgICAgIHRoaXMuc2VyY2hCb3guZm9jdXMoKTtcclxuICAgICAgfVxyXG4gICAgfSwgMCk7XHJcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlS2V5RXZlbnRTZWFyY2goZTogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkge1xyXG4gICAgICB0aGlzLmRyb3Bkb3duLmNsb3NlKCk7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudGV4dEJveFNlbGVjdEJveC5mb2N1cygpO1xyXG4gICAgICB9LCAwKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKGUua2V5ID09PSAnRXNjYXBlJykge1xyXG4gICAgICB0aGlzLnRleHQgPSBudWxsO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLnRleHRCb3hTZWxlY3RCb3guZm9jdXMoKTtcclxuICAgICAgfSwgMCk7XHJcbiAgICB9XHJcbiAgICBpZiAoKGUua2V5ID09PSAnQXJyb3dEb3duJyB8fCBlLmtleSA9PT0gJ0Fycm93VXAnKSAmJiB0aGlzLmdldEl0ZW1zKCkubGVuZ3RoID4gMCAmJiBlLnR5cGUgPT09ICdrZXlkb3duJykge1xyXG4gICAgICBpZiAodGhpcy5tb2RlID09PSAnc2luZ2xlJykge1xyXG4gICAgICAgIHRoaXMuY3VycmVudGZvY3VzZWRJbmRleCA9IHRoaXMuY3VycmVudGZvY3VzZWRJbmRleCArIChlLmtleSA9PT0gJ0Fycm93RG93bicgPyAxIDogLTEpO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtQnlJbmRleCh0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLmRyb3Bkb3duLmlzT3Blbikge1xyXG4gICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZEluZGV4KGUua2V5ID09PSAnQXJyb3dEb3duJyA/IDEgOiAtMSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZHJvcGRvd24ub3BlbigpO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlcmNoQm94KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXJjaEJveC5mb2N1cygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIGlmIChlLmtleSA9PSAnRW50ZXInICYmIHRoaXMuZHJvcGRvd24uaXNPcGVuICYmIHRoaXMubW9kZSA9PSAnc2luZ2xlJykge1xyXG4gICAgLy8gICAgIHRoaXMuZHJvcGRvd24uY2xvc2UoKTtcclxuICAgIC8vICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIC8vICAgICAgICAgdGhpcy5kcm9wZG93bi5mb2N1cygpO1xyXG4gICAgLy8gICAgIH0sIDApO1xyXG4gICAgLy8gfVxyXG4gICAgLy9lLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgLy9lLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gICAgaWYgKGUudHlwZSA9PT0gJ2tleWRvd24nICYmIGUua2V5ID09ICdFbnRlcicgJiYgdGhpcy5kcm9wZG93bi5pc09wZW4pIHtcclxuICAgICAgaWYgKCF0aGlzLnJlbW90ZU9wZXJhdGlvbiAmJiB0aGlzLnRleHQgJiYgdGhpcy50ZXh0ICE9PSAnJykge1xyXG4gICAgICAgIHRoaXMuaXRlbXNGaWx0ZXJlZCA9IHRoaXMuaXRlbXMuZmlsdGVyKChjKSA9PiAoY1t0aGlzLnRleHRGaWVsZF0gYXMgc3RyaW5nKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMudGV4dC50b0xvd2VyQ2FzZSgpKSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXRlbXNGaWx0ZXJlZC5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgIHRoaXMuY3VycmVudGZvY3VzZWRJbmRleCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuaXRlbXNGaWx0ZXJlZCA9IHRoaXMuaXRlbXM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKChjKSA9PiBjW3RoaXMudmFsdWVGaWVsZF0gPT09IHRoaXMuaXRlbXNGaWx0ZXJlZFt0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXhdW3RoaXMudmFsdWVGaWVsZF0pLmxlbmd0aCA+IDAgJiZcclxuICAgICAgICB0aGlzLm1vZGUgPT0gJ211bHRpcGxlJ1xyXG4gICAgICApIHtcclxuICAgICAgICBpZiAodGhpcy5hbGxvd051bGwgPT0gdHJ1ZSB8fCAodGhpcy5hbGxvd051bGwgPT0gZmFsc2UgJiYgdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDEpKSB7XHJcbiAgICAgICAgICBpZiAoIXRoaXMucmVtb3RlT3BlcmF0aW9uICYmIHRoaXMudGV4dCAmJiB0aGlzLnRleHQgIT09ICcnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuc2VsZWN0ZWRJdGVtcy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgKGMpID0+XHJcbiAgICAgICAgICAgICAgICBjICE9PVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtcy5maWx0ZXIoKGMpID0+IChjW3RoaXMudGV4dEZpZWxkXSBhcyBzdHJpbmcpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy50ZXh0LnRvTG93ZXJDYXNlKCkpKVt0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXhdXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKChjKSA9PiBjW3RoaXMudmFsdWVGaWVsZF0gIT09IHRoaXMuaXRlbXNbdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4XVt0aGlzLnZhbHVlRmllbGRdKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuZW1pdFNlbGVjdGlvbkNoYW5nZWRFdmVudCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAodGhpcy5tb2RlID09ICdtdWx0aXBsZScpIHtcclxuICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXggIT0gLTEpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnJlbW90ZU9wZXJhdGlvbiAmJiB0aGlzLnRleHQgJiYgdGhpcy50ZXh0ICE9PSAnJykge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLml0ZW1zRmlsdGVyZWQubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaCh0aGlzLml0ZW1zRmlsdGVyZWRbMF0pO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaCh0aGlzLml0ZW1zRmlsdGVyZWRbdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4XSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5wdXNoKHRoaXMuaXRlbXNbdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4XSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5lbWl0U2VsZWN0aW9uQ2hhbmdlZEV2ZW50KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmICh0aGlzLnRleHQgJiYgdGhpcy5pdGVtc0ZpbHRlcmVkPy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZEl0ZW1zKHRoaXMuaXRlbXNGaWx0ZXJlZCwgdHJ1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGhpcy5tb2RlID09ICdzaW5nbGUnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZHJvcGRvd24uY2xvc2UoKTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy50ZXh0Qm94U2VsZWN0Qm94LmZvY3VzKCk7XHJcbiAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIGlzQ2hhcihzdHI6IHN0cmluZykge1xyXG4gICAgaWYgKFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ1NoaWZ0JykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdUYWInKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ0NvbnRyb2wnKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ0FsdCcpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnQ2Fwc0xvY2snKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ01ldGEnKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ0NvbnRleHRNZW51JykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdFbnRlcicpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnQmFja3NwYWNlJykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdQcmludFNjcmVlbicpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnU2Nyb2xsTG9jaycpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnUGF1c2UnKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ0hvbWUnKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ0VuZCcpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnSW5zZXJ0JykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdQYWdlVXAnKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ0RlbGV0ZScpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnUGFnZURvd24nKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ051bUxvY2snKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ0VzY2FwZScpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnQXJyb3cnKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ9mRRjEnKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ0YyJykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdGMycpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnRjQnKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ0Y1JykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdGNicpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnRjcnKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ0Y4JykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdGOScpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnRjEwJykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdGMTEnKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ0YxMicpXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVLZXlFdmVudChlOiBhbnkpIHtcclxuICAgIC8vIGNvbnN0IE51bWJlck1pbnVzUGF0dGVybiA9IC9bYS16QS1aMC05XFwtXS9nO1xyXG4gICAgLy8gY29uc3QgRmFyc2kgPSAvW9m+2obYrNit2K7Zh9i52LrZgdmC2KvYtdi22LTYs9uM2KjZhNin2KrZhtmF2qnar9mI2KbYr9iw2LHYsti32LjamNik2KXYo9ih2YvZjNmN2Y7Zj9mQ2ZFcXHNdKyQvO1xyXG4gICAgLy8gIGNvbnN0IGlucHV0Q2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoZS5jaGFyQ29kZSk7XHJcbiAgICAvLyBjb25zdCBwYXR0ZXJuRW4gPSAvXlthLXpBLVowLTldKiQvO1xyXG4gICAgLy8gY29uc3QgcGF0dGVybiA9IC9eW1xcdTA2MDAtXFx1MDZGRlxcc10rJC87XHJcbiAgICBjb25zdCBpbnB1dENoYXIgPSBlLmtleTtcclxuICAgIGlmIChcclxuICAgICAgKGlucHV0Q2hhciAhPSAnQmFja3NwYWNlJyAmJlxyXG4gICAgICAgIGlucHV0Q2hhciAhPSAnQmFja3NwYWNlJyAmJlxyXG4gICAgICAgIGlucHV0Q2hhciAhPSAnVGFiJyAmJlxyXG4gICAgICAgIGlucHV0Q2hhciAhPSAnRW50ZXInICYmXHJcbiAgICAgICAgaW5wdXRDaGFyICE9ICdFc2NhcGUnICYmXHJcbiAgICAgICAgaW5wdXRDaGFyICE9ICdBcnJvd0Rvd24nICYmXHJcbiAgICAgICAgaW5wdXRDaGFyICE9ICdBcnJvd1VwJykgfHxcclxuICAgICAgZS5jb2RlID09PSAnU3BhY2UnIHx8XHJcbiAgICAgIGUuY3RybEtleSA9PSB0cnVlXHJcbiAgICApIHtcclxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICBlLmtleSA9PT0gJ0JhY2tzcGFjZScgJiZcclxuICAgICAgZS50eXBlID09PSAna2V5ZG93bicgJiZcclxuICAgICAgKCh0aGlzLmFsbG93TnVsbCA9PT0gdHJ1ZSAmJiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCkgfHwgKHRoaXMuYWxsb3dOdWxsID09PSBmYWxzZSAmJiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMSkpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnBvcCgpO1xyXG4gICAgICB0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpIHtcclxuICAgICAgdGhpcy5kcm9wZG93bi5jbG9zZSgpO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLnRleHRCb3hTZWxlY3RCb3guZm9jdXMoKTtcclxuICAgICAgfSwgMCk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnN0IElOUFVUID0gU3RyaW5nLmZyb21DaGFyQ29kZShlLmtleUNvZGUpO1xyXG4gICAgaWYgKHRoaXMuaXNDaGFyKGUua2V5KSAmJiB0aGlzLmFsbG93U2VhcmNoICYmIGUuY3RybEtleSA9PSBmYWxzZSkge1xyXG4gICAgICB0aGlzLmRyb3Bkb3duLm9wZW4oKTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VyY2hCb3gpIHtcclxuICAgICAgICAgIHRoaXMuc2VyY2hCb3guZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIDApO1xyXG4gICAgICB0aGlzLnRleHQgPSBlLmtleTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZS5rZXkgPT09ICdFc2NhcGUnKSB7XHJcbiAgICAgIHRoaXMudGV4dCA9IG51bGw7XHJcbiAgICAgIHRoaXMuZHJvcGRvd24uY2xvc2UoKTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy50ZXh0Qm94U2VsZWN0Qm94LmZvY3VzKCk7XHJcbiAgICAgIH0sIDApO1xyXG4gICAgfVxyXG4gICAgaWYgKChlLmtleSA9PT0gJ0Fycm93RG93bicgfHwgZS5rZXkgPT09ICdBcnJvd1VwJykgJiYgdGhpcy5nZXRJdGVtcygpLmxlbmd0aCA+IDAgJiYgZS50eXBlID09PSAna2V5ZG93bicpIHtcclxuICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ3NpbmdsZScpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUJ5SW5kZXgodGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4ICsgKGUua2V5ID09PSAnQXJyb3dEb3duJyA/IDEgOiAtMSkpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLmRyb3Bkb3duLmlzT3Blbikge1xyXG4gICAgICAgICAgLy8gIHRoaXMuc2V0U2VsZWN0ZWRJbmRleCgoZS5rZXkgPT09ICdBcnJvd0Rvd24nID8gMSA6IC0xKSk7XHJcbiAgICAgICAgICBpZiAodGhpcy5hbGxvd1NlYXJjaCA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkSW5kZXgoZS5rZXkgPT09ICdBcnJvd0Rvd24nID8gMSA6IC0xKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLnNlcmNoQm94KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlcmNoQm94LmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCAwKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5kcm9wZG93bi5vcGVuKCk7XHJcbiAgICAgICAgICBpZiAodGhpcy5hbGxvd1NlYXJjaCA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLnNlcmNoQm94KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlcmNoQm94LmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCAwKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5hbGxvd1NlYXJjaCA9PT0gZmFsc2UpIHtcclxuICAgICAgaWYgKGUudHlwZSA9PT0gJ2tleWRvd24nICYmIGUua2V5ID09ICdFbnRlcicgJiYgdGhpcy5kcm9wZG93bi5pc09wZW4pIHtcclxuICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5maWx0ZXIoKGMpID0+IGNbdGhpcy52YWx1ZUZpZWxkXSA9PT0gdGhpcy5pdGVtc0ZpbHRlcmVkW3RoaXMuY3VycmVudGZvY3VzZWRJbmRleF1bdGhpcy52YWx1ZUZpZWxkXSkubGVuZ3RoID4gMCAmJlxyXG4gICAgICAgICAgdGhpcy5tb2RlID09ICdtdWx0aXBsZSdcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGlmICh0aGlzLmFsbG93TnVsbCA9PSB0cnVlIHx8ICh0aGlzLmFsbG93TnVsbCA9PSBmYWxzZSAmJiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMSkpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnJlbW90ZU9wZXJhdGlvbiAmJiB0aGlzLnRleHQgJiYgdGhpcy50ZXh0ICE9PSAnJykge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuc2VsZWN0ZWRJdGVtcy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAoYykgPT5cclxuICAgICAgICAgICAgICAgICAgYyAhPT1cclxuICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtcy5maWx0ZXIoKGMpID0+IChjW3RoaXMudGV4dEZpZWxkXSBhcyBzdHJpbmcpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy50ZXh0LnRvTG93ZXJDYXNlKCkpKVt0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXhdXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKChjKSA9PiBjW3RoaXMudmFsdWVGaWVsZF0gIT09IHRoaXMuaXRlbXNbdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4XVt0aGlzLnZhbHVlRmllbGRdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKHRoaXMubW9kZSA9PSAnbXVsdGlwbGUnKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXggIT0gLTEpIHtcclxuICAgICAgICAgICAgICBpZiAoIXRoaXMucmVtb3RlT3BlcmF0aW9uICYmIHRoaXMudGV4dCAmJiB0aGlzLnRleHQgIT09ICcnKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pdGVtc0ZpbHRlcmVkLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaCh0aGlzLml0ZW1zRmlsdGVyZWRbMF0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2godGhpcy5pdGVtc0ZpbHRlcmVkW3RoaXMuY3VycmVudGZvY3VzZWRJbmRleF0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaCh0aGlzLml0ZW1zW3RoaXMuY3VycmVudGZvY3VzZWRJbmRleF0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudGV4dCAmJiB0aGlzLml0ZW1zRmlsdGVyZWQubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZEl0ZW1zKHRoaXMuaXRlbXNGaWx0ZXJlZCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMubW9kZSA9PSAnc2luZ2xlJykge1xyXG4gICAgICAgICAgICAgIHRoaXMuZHJvcGRvd24uY2xvc2UoKTtcclxuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMudGV4dEJveFNlbGVjdEJveC5mb2N1cygpO1xyXG4gICAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBmb2N1cygpOiB2b2lkIHtcclxuICAgIHRoaXMudGV4dGJveC5mb2N1cygpO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0ZWRJdGVtQnlJbmRleChpbmRleDogbnVtYmVyKSB7XHJcbiAgICBsZXQgaXRlbSA9IFtdO1xyXG4gICAgaWYgKCF0aGlzLnJlbW90ZU9wZXJhdGlvbiAmJiB0aGlzLnRleHQgJiYgdGhpcy50ZXh0ICE9PSAnJykge1xyXG4gICAgICB0aGlzLml0ZW1zRmlsdGVyZWQgPSB0aGlzLml0ZW1zLmZpbHRlcigoYykgPT4gKGNbdGhpcy50ZXh0RmllbGRdIGFzIHN0cmluZykudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnRleHQudG9Mb3dlckNhc2UoKSkpO1xyXG5cclxuICAgICAgaXRlbSA9IHRoaXMuaXRlbXNGaWx0ZXJlZFtpbmRleF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpdGVtID0gdGhpcy5pdGVtc1tpbmRleF07XHJcbiAgICB9XHJcbiAgICAvL1xyXG4gICAgLy8gIGNvbnN0IGl0ZW0gPSB0aGlzLnRleHQgPyB0aGlzLml0ZW1zLmZpbHRlcigoYykgPT4gKGNbdGhpcy50ZXh0RmllbGRdIGFzIHN0cmluZykudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnRleHQudG9Mb3dlckNhc2UoKSkpW2luZGV4XSA6IHRoaXMuaXRlbXNbaW5kZXhdO1xyXG4gICAgaWYgKGl0ZW0pIHtcclxuICAgICAgdGhpcy5zZXRTZWxlY3RlZEl0ZW1zKFtpdGVtXSwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZXRTZWxlY3RlZEluZGV4KCk7XHJcbiAgfVxyXG5cclxuICBnZXRJdGVtcygpOiBhbnlbXSB7XHJcbiAgICBpZiAodGhpcy5pdGVtcyA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICAgIHJldHVybiAhdGhpcy5yZW1vdGVPcGVyYXRpb24gJiYgdGhpcy50ZXh0ICYmIHRoaXMudGV4dCAhPT0gJydcclxuICAgICAgPyB0aGlzLml0ZW1zLmZpbHRlcigoYykgPT4gKGNbdGhpcy50ZXh0RmllbGRdIGFzIHN0cmluZykudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnRleHQudG9Mb3dlckNhc2UoKSkpXHJcbiAgICAgIDogdGhpcy5pdGVtcztcclxuICB9XHJcblxyXG4gIGlzSXRlbVNlbGVjdGVkKGl0ZW06IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRJdGVtcyAmJiB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKChjKSA9PiBjW3RoaXMudmFsdWVGaWVsZF0gPT09IGl0ZW1bdGhpcy52YWx1ZUZpZWxkXSkubGVuZ3RoID4gMDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXRlbXNTdGF0dXNPYnNlcnZlcjogYW55O1xyXG4gIHByaXZhdGUgd2FpdEZvckRhdGEoY2FsbGJhY2tmbjogKCkgPT4gdm9pZCkge1xyXG4gICAgaWYgKHRoaXMuaXRlbXMgJiYgdGhpcy5pdGVtcy5sZW5ndGgpIHtcclxuICAgICAgY2FsbGJhY2tmbigpO1xyXG4gICAgfSBlbHNlIGlmICghdGhpcy5pdGVtc1N0YXR1c09ic2VydmVyKSB7XHJcbiAgICAgIE9ic2VydmFibGUuY3JlYXRlKChvYnNlcnZlcikgPT4ge1xyXG4gICAgICAgIHRoaXMuaXRlbXNTdGF0dXNPYnNlcnZlciA9IG9ic2VydmVyO1xyXG4gICAgICB9KVxyXG4gICAgICAgIC5waXBlKGRlYm91bmNlVGltZSgxMDApKVxyXG4gICAgICAgIC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoYykgPT4ge1xyXG4gICAgICAgICAgY2FsbGJhY2tmbigpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=