@datorama/core 22.11.2 → 22.12.1-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundle.scss +91 -89
- package/bundles/datorama-core.umd.js +110 -92
- package/bundles/datorama-core.umd.js.map +1 -1
- package/bundles/datorama-core.umd.min.js +10 -3
- package/bundles/datorama-core.umd.min.js.map +1 -1
- package/datorama-core.metadata.json +1 -1
- package/esm2015/lib/grid-v2/grid/grid-v2.component.js +4 -4
- package/esm2015/lib/grid-v2/grid/grid-v2.config.js +2 -2
- package/esm2015/lib/grid-v2/grid/grid-v2.types.js +1 -1
- package/esm2015/lib/grid-v2/grid-store/grid.service.js +13 -5
- package/esm2015/lib/select/select.component.js +10 -2
- package/esm2015/lib/select/trigger-single/trigger-single.component.js +4 -1
- package/esm2015/lib/version.js +2 -2
- package/esm5/lib/grid-v2/grid/grid-v2.component.js +4 -4
- package/esm5/lib/grid-v2/grid/grid-v2.config.js +2 -2
- package/esm5/lib/grid-v2/grid/grid-v2.types.js +1 -1
- package/esm5/lib/grid-v2/grid-store/grid.service.js +13 -5
- package/esm5/lib/select/select.component.js +10 -2
- package/esm5/lib/select/trigger-single/trigger-single.component.js +4 -1
- package/esm5/lib/version.js +2 -2
- package/fesm2015/datorama-core.js +93 -75
- package/fesm2015/datorama-core.js.map +1 -1
- package/fesm5/datorama-core.js +110 -92
- package/fesm5/datorama-core.js.map +1 -1
- package/lib/grid-v2/grid/grid-v2.component.d.ts +1 -1
- package/lib/grid-v2/grid/grid-v2.types.d.ts +1 -0
- package/lib/select/select.component.d.ts +2 -0
- package/lib/select/trigger-single/trigger-single.component.d.ts +1 -0
- package/package.json +1 -1
|
@@ -31,6 +31,7 @@ import { zIndexPlease } from '../internal/z-index';
|
|
|
31
31
|
import { isTestEnv } from '../istest-env';
|
|
32
32
|
import { isMobile } from '../utils/user-agent';
|
|
33
33
|
import { setDimensions } from '../internal/custom-dimensions';
|
|
34
|
+
import { DatoTriggerSingle } from './trigger-single/trigger-single.component';
|
|
34
35
|
const valueAccessor = {
|
|
35
36
|
provide: NG_VALUE_ACCESSOR,
|
|
36
37
|
useExisting: forwardRef(() => DatoSelectComponent),
|
|
@@ -719,6 +720,9 @@ let DatoSelectComponent = class DatoSelectComponent extends BaseCustomControl {
|
|
|
719
720
|
setTimeout(() => this.datoOverlay.scheduleUpdate(), 0);
|
|
720
721
|
}
|
|
721
722
|
}
|
|
723
|
+
triggerChangeDetectionInDatoSingle() {
|
|
724
|
+
this.datoTriggerSingle.triggerChangeDetection();
|
|
725
|
+
}
|
|
722
726
|
};
|
|
723
727
|
DatoSelectComponent.ctorParameters = () => [
|
|
724
728
|
{ type: ChangeDetectorRef },
|
|
@@ -729,6 +733,10 @@ DatoSelectComponent.ctorParameters = () => [
|
|
|
729
733
|
{ type: undefined, decorators: [{ type: Attribute, args: ['datoSize',] }] },
|
|
730
734
|
{ type: String, decorators: [{ type: Attribute, args: ['width',] }] }
|
|
731
735
|
];
|
|
736
|
+
__decorate([
|
|
737
|
+
ViewChild('datoTriggerSingle'),
|
|
738
|
+
__metadata("design:type", DatoTriggerSingle)
|
|
739
|
+
], DatoSelectComponent.prototype, "datoTriggerSingle", void 0);
|
|
732
740
|
__decorate([
|
|
733
741
|
ViewChild('dropdown'),
|
|
734
742
|
__metadata("design:type", TemplateRef)
|
|
@@ -895,7 +903,7 @@ __decorate([
|
|
|
895
903
|
DatoSelectComponent = __decorate([
|
|
896
904
|
Component({
|
|
897
905
|
selector: 'dato-select',
|
|
898
|
-
template: "<section class=\"dato-select__trigger\" [class.dato-select--naked]=\"_naked\" [class.dato-select--disabled]=\"_disabled\">\n\n <div class=\"dato-select__single\" *ngIf=\"isSingle\" [ngClass]=\"_dropdownClass\">\n <dato-input [class.force-hide]=\"(!open && isCombo) || !isCombo\" [placeholder]=\"searchPlaceholder | translate\"\n (keyup)=\"keyup($event)\" [isFocused]=\"_focus\" [isLoading]=\"isLoading\" [formControl]=\"searchControl\" type=\"search\">\n </dato-input>\n\n <dato-trigger-single [loadingTemplate]=\"loadingTemplate\" [active]=\"active\" datoErrorValidationBorderAnchor tabindex=\"0\" [labelKey]=\"labelKey\"\n [context]=\"_model[0]\" [class.force-hide]=\"open && isCombo\" [placeholder]=\"placeholder | translate\"\n class=\"ontop-overlay\" (keydown)=\"preventBodyScroll($event)\" (keyup)=\"keyup($event)\" (click)=\"openDropdown()\">\n </dato-trigger-single>\n </div>\n\n <dato-trigger-multi [loadingTemplate]=\"loadingTemplate\" [options]=\"_model\" datoErrorValidationBorderAnchor [control]=\"searchControl\"\n [placeholder]=\"placeholder | translate\" [labelKey]=\"labelKey\" [idKey]=\"idKey\" (keyup)=\"keyup($event)\"\n [isLoading]=\"isLoading\" [keepFocus]=\"keepFocus\" [limitTo]=\"limitTo\" [clickOutside]=\"_clickOutside\" [isSortable]=\"isSortable\"\n [selectAllChipTxt]=\"selectAllChipTxt\"\n [showSelectAllChip]=\"selectAllChipTxt && showSelectAllChip\"\n (unselectAll)=\"checkAll(false)\"\n (removeOption)=\"removeOption($event)\" (reorderOptions)=\"reorderOptions($event)\" *ngIf=\"isMulti\"\n (click)=\"openDropdown($event)\"></dato-trigger-multi>\n\n</section>\n\n<ng-template #dropdown>\n <section class=\"dato-select__dropdown-container\" tabindex=\"0\" (keyup)=\"keyup($event)\">\n\n <!-- HEADER -->\n\n <header class=\"dato-select__header dato-select__option dato-select__option--simple\" data-is-floating\n *ngIf=\"isMulti && allowSelectAll\" [class.force-hide]=\"_showEmptyResults\" [class.ml-10]=\"containsGroups\">\n <dato-checkbox [checked]=\"_isAllChecked\" (check)=\"checkAll($event)\"\n [indeterminatelyChecked]=\"_isIndeterminatelyChecked\">\n {{'core.select-all' | translate}}<span class=\"primary-300-color note-italic ml-5\">{{_count}}</span>\n </dato-checkbox>\n </header>\n\n <!-- END HEADER -->\n\n <!-- DROPDOWN -->\n\n <div class=\"dato-select__dropdown\">\n\n <ng-content></ng-content>\n\n <dato-select-empty [show]=\"_showEmptyResults\">{{_noItemsLabel}}</dato-select-empty>\n <div class=\"dato-select__option dato-select-infinite-spinner\" data-is-floating *ngIf=\"infiniteScrollLoading\">\n <span class=\"dato-input__spinner\"></span>\n </div>\n\n </div>\n\n <!-- END DROPDOWN -->\n\n\n <!-- FOOTER -->\n\n <footer class=\"dato-select__footer d-flex\" [class.with-actions]=\"_withActions\">\n\n <ng-content select=\"[datoSelectFooter]\"></ng-content>\n\n <ng-container *ngIf=\"_withActions\">\n <dato-link class=\"mr-20\" datoType=\"secondary\" (click)=\"close()\">Cancel</dato-link>\n <dato-button datoSize=\"sm\" (click)=\"save.emit(); close();\">Save</dato-button>\n </ng-container>\n\n </footer>\n\n <!-- END FOOTER -->\n\n </section>\n\n</ng-template>\n",
|
|
906
|
+
template: "<section class=\"dato-select__trigger\" [class.dato-select--naked]=\"_naked\" [class.dato-select--disabled]=\"_disabled\">\n\n <div class=\"dato-select__single\" *ngIf=\"isSingle\" [ngClass]=\"_dropdownClass\">\n <dato-input [class.force-hide]=\"(!open && isCombo) || !isCombo\" [placeholder]=\"searchPlaceholder | translate\"\n (keyup)=\"keyup($event)\" [isFocused]=\"_focus\" [isLoading]=\"isLoading\" [formControl]=\"searchControl\" type=\"search\">\n </dato-input>\n\n <dato-trigger-single #datoTriggerSingle [loadingTemplate]=\"loadingTemplate\" [active]=\"active\" datoErrorValidationBorderAnchor tabindex=\"0\" [labelKey]=\"labelKey\"\n [context]=\"_model[0]\" [class.force-hide]=\"open && isCombo\" [placeholder]=\"placeholder | translate\"\n class=\"ontop-overlay\" (keydown)=\"preventBodyScroll($event)\" (keyup)=\"keyup($event)\" (click)=\"openDropdown()\">\n </dato-trigger-single>\n </div>\n\n <dato-trigger-multi [loadingTemplate]=\"loadingTemplate\" [options]=\"_model\" datoErrorValidationBorderAnchor [control]=\"searchControl\"\n [placeholder]=\"placeholder | translate\" [labelKey]=\"labelKey\" [idKey]=\"idKey\" (keyup)=\"keyup($event)\"\n [isLoading]=\"isLoading\" [keepFocus]=\"keepFocus\" [limitTo]=\"limitTo\" [clickOutside]=\"_clickOutside\" [isSortable]=\"isSortable\"\n [selectAllChipTxt]=\"selectAllChipTxt\"\n [showSelectAllChip]=\"selectAllChipTxt && showSelectAllChip\"\n (unselectAll)=\"checkAll(false)\"\n (removeOption)=\"removeOption($event)\" (reorderOptions)=\"reorderOptions($event)\" *ngIf=\"isMulti\"\n (click)=\"openDropdown($event)\"></dato-trigger-multi>\n\n</section>\n\n<ng-template #dropdown>\n <section class=\"dato-select__dropdown-container\" tabindex=\"0\" (keyup)=\"keyup($event)\">\n\n <!-- HEADER -->\n\n <header class=\"dato-select__header dato-select__option dato-select__option--simple\" data-is-floating\n *ngIf=\"isMulti && allowSelectAll\" [class.force-hide]=\"_showEmptyResults\" [class.ml-10]=\"containsGroups\">\n <dato-checkbox [checked]=\"_isAllChecked\" (check)=\"checkAll($event)\"\n [indeterminatelyChecked]=\"_isIndeterminatelyChecked\">\n {{'core.select-all' | translate}}<span class=\"primary-300-color note-italic ml-5\">{{_count}}</span>\n </dato-checkbox>\n </header>\n\n <!-- END HEADER -->\n\n <!-- DROPDOWN -->\n\n <div class=\"dato-select__dropdown\">\n\n <ng-content></ng-content>\n\n <dato-select-empty [show]=\"_showEmptyResults\">{{_noItemsLabel}}</dato-select-empty>\n <div class=\"dato-select__option dato-select-infinite-spinner\" data-is-floating *ngIf=\"infiniteScrollLoading\">\n <span class=\"dato-input__spinner\"></span>\n </div>\n\n </div>\n\n <!-- END DROPDOWN -->\n\n\n <!-- FOOTER -->\n\n <footer class=\"dato-select__footer d-flex\" [class.with-actions]=\"_withActions\">\n\n <ng-content select=\"[datoSelectFooter]\"></ng-content>\n\n <ng-container *ngIf=\"_withActions\">\n <dato-link class=\"mr-20\" datoType=\"secondary\" (click)=\"close()\">Cancel</dato-link>\n <dato-button datoSize=\"sm\" (click)=\"save.emit(); close();\">Save</dato-button>\n </ng-container>\n\n </footer>\n\n <!-- END FOOTER -->\n\n </section>\n\n</ng-template>\n",
|
|
899
907
|
preserveWhitespaces: false,
|
|
900
908
|
providers: [valueAccessor, DatoOverlay],
|
|
901
909
|
encapsulation: ViewEncapsulation.None,
|
|
@@ -911,4 +919,4 @@ DatoSelectComponent = __decorate([
|
|
|
911
919
|
DatoOverlay, Object, Object, String])
|
|
912
920
|
], DatoSelectComponent);
|
|
913
921
|
export { DatoSelectComponent };
|
|
914
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BkYXRvcmFtYS9jb3JlLyIsInNvdXJjZXMiOlsibGliL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7QUFFSCxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLFNBQVMsRUFDVCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxFQUNULFdBQVcsRUFDWCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDMUUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9FLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3RFLE9BQU8sRUFBNEIsMkJBQTJCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRixPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMvRCxP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LGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7O3FDQUNwQixhQUFhOzs0REFLckM7QUE3d0JVLG1CQUFtQjtJQVQvQixTQUFTLENBQUM7UUFDVCxRQUFRLEVBQUUsYUFBYTtRQUN2QiwyeEdBQXNDO1FBQ3RDLG1CQUFtQixFQUFFLEtBQUs7UUFDMUIsU0FBUyxFQUFFLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQztRQUN2QyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtRQUNyQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtRQUMvQyxRQUFRLEVBQUUsWUFBWTtLQUN2QixDQUFDO0lBK1RHLFdBQUEsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ2xCLFdBQUEsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ3JCLFdBQUEsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFBO3FDQU5OLGlCQUFpQjtRQUNYLG9CQUFvQjtRQUN6QixVQUFVO1FBQ0gsV0FBVztHQTdUdkIsbUJBQW1CLENBdTRCL0I7U0F2NEJZLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBEYXRvcmFtYS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBBcGFjaGUgTGljZW5zZSAyLjAgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vZGF0b3JhbWEvY2xpZW50LWNvcmUvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICovXG5cbmltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIEF0dHJpYnV0ZSxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUNvbnRyb2wsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQmFzZUN1c3RvbUNvbnRyb2wgfSBmcm9tICcuLi9jdXN0b20tY29udHJvbC9iYXNlLWN1c3RvbS1jb250cm9sJztcbmltcG9ydCB7IGRlZmF1bHRPcHRpb25zRGlzcGxheUxpbWl0LCBTZWxlY3RUeXBlIH0gZnJvbSAnLi9zZWxlY3QudHlwZXMnO1xuaW1wb3J0IHsgRGF0b09wdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uL29wdGlvbnMvb3B0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIG1lcmdlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlsdGVyLCBtYXAsIHRha2UsIHRocm90dGxlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IERhdG9TZWxlY3RBY3RpdmVEaXJlY3RpdmUgfSBmcm9tICcuL3NlbGVjdC1hY3RpdmUuZGlyZWN0aXZlJztcbmltcG9ydCB7IERhdG9TZWxlY3RTZWFyY2hTdHJhdGVneSwgZGVmYXVsdENsaWVudFNlYXJjaFN0cmF0ZWd5IH0gZnJvbSAnLi9zZWFyY2guc3RyYXRlZ3knO1xuaW1wb3J0IHsgY2xvc2VzdCwgcXVlcnksIHNldFN0eWxlIH0gZnJvbSAnLi4vaW50ZXJuYWwvaGVscGVycyc7XG5pbXBvcnQgeyBEYXRvT3ZlcmxheSwgRGF0b1RlbXBsYXRlUG9ydGFsIH0gZnJvbSAnLi4vYW5ndWxhci9vdmVybGF5JztcbmltcG9ydCB7IEFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgX3Njcm9sbFRvT3B0aW9uIH0gZnJvbSAnLi4vb3B0aW9ucy9vcHRpb25zLXV0aWxzJztcbmltcG9ydCB7IERhdG9UcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdHJhbnNsYXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgbm9ybWFsaXplRGF0YSB9IGZyb20gJy4uL2ludGVybmFsL2RhdGEtbm9ybWFsaXphdGlvbic7XG5pbXBvcnQgeyBEYXRvQWNjb3JkaW9uQ29tcG9uZW50LCBEYXRvQWNjb3JkaW9uR3JvdXBDb21wb25lbnQgfSBmcm9tICcuLi9hY2NvcmRpb24vcHVibGljX2FwaSc7XG5pbXBvcnQgeyBEYXRvR3JvdXBDb21wb25lbnQgfSBmcm9tICcuLi9vcHRpb25zL2dyb3VwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMaXN0R3JvdXBDb21wb25lbnQgfSBmcm9tICcuLi9saXN0L2xpc3QudHlwZXMnO1xuaW1wb3J0IHsgdW50aWxEZXN0cm95ZWQgfSBmcm9tICduZ3gtdGFrZS11bnRpbC1kZXN0cm95JztcbmltcG9ydCB7IGlzQXJyb3dVcERvd24sIGlzRW50ZXIsIGlzRXNjYXBlIH0gZnJvbSAnLi4vcngvZXZlbnRzJztcbmltcG9ydCB7IGNvZXJjZUFycmF5IH0gZnJvbSAnQGRhdG9yYW1hL2FraXRhJztcbmltcG9ydCB7IGlzU3RyaW5nLCBzaXplIH0gZnJvbSAnLi4vdXRpbHMvcHVibGljX2FwaSc7XG5pbXBvcnQgeyB6SW5kZXhQbGVhc2UgfSBmcm9tICcuLi9pbnRlcm5hbC96LWluZGV4JztcbmltcG9ydCB7IGlzVGVzdEVudiB9IGZyb20gJy4uL2lzdGVzdC1lbnYnO1xuaW1wb3J0IHsgaXNNb2JpbGUgfSBmcm9tICcuLi91dGlscy91c2VyLWFnZW50JztcbmltcG9ydCB7IFBvcHBlck9wdGlvbnMgfSBmcm9tICcuLi9zZXJ2aWNlcy9wb3BwZXInO1xuaW1wb3J0IHsgc2V0RGltZW5zaW9ucyB9IGZyb20gJy4uL2ludGVybmFsL2N1c3RvbS1kaW1lbnNpb25zJztcblxuY29uc3QgdmFsdWVBY2Nlc3NvciA9IHtcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdG9TZWxlY3RDb21wb25lbnQpLFxuICBtdWx0aTogdHJ1ZVxufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGF0by1zZWxlY3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcbiAgcHJlc2VydmVXaGl0ZXNwYWNlczogZmFsc2UsXG4gIHByb3ZpZGVyczogW3ZhbHVlQWNjZXNzb3IsIERhdG9PdmVybGF5XSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGV4cG9ydEFzOiAnZGF0b1NlbGVjdCdcbn0pXG5leHBvcnQgY2xhc3MgRGF0b1NlbGVjdENvbXBvbmVudCBleHRlbmRzIEJhc2VDdXN0b21Db250cm9sXG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBBZnRlckNvbnRlbnRJbml0IHtcbiAgLyoqIFRoZSBkcm9wZG93biBjb250YWluZXIgZWxlbWVudCB3aGljaCBpcyB0aGUgcG9ydGFsICAqKi9cbiAgQFZpZXdDaGlsZCgnZHJvcGRvd24nKVxuICBkcm9wZG93bjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAvKiogVGhlIG92ZXJsYXkgb3JpZ2luIHdoaWNoIGlzIG9uZSBvZiBkYXRvLXRyaWdnZXJzICoqL1xuICBAVmlld0NoaWxkKCdvdmVybGF5T3JpZ2luJylcbiAgb3JpZ2luOiBFbGVtZW50UmVmO1xuXG4gIC8qKiBRdWVyeUxpc3Qgb2YgZGF0b09wdGlvbnMgY2hpbGRyZW4gKi9cbiAgQENvbnRlbnRDaGlsZHJlbihEYXRvT3B0aW9uQ29tcG9uZW50LCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gIG9wdGlvbnM6IFF1ZXJ5TGlzdDxEYXRvT3B0aW9uQ29tcG9uZW50PjtcblxuICAvKiogUXVlcnlMaXN0IG9mIGRhdG9BY2NvcmRpb25Hcm91cHMgY2hpbGRyZW4gKi9cbiAgQENvbnRlbnRDaGlsZHJlbihmb3J3YXJkUmVmKCgpID0+IERhdG9BY2NvcmRpb25Db21wb25lbnQpLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gIGFjY29yZGlvbjogUXVlcnlMaXN0PERhdG9BY2NvcmRpb25Db21wb25lbnQ+O1xuXG4gIC8qKiBRdWVyeUxpc3Qgb2YgZGF0b0dyb3VwcyBjaGlsZHJlbiAqL1xuICBAQ29udGVudENoaWxkcmVuKERhdG9Hcm91cENvbXBvbmVudClcbiAgZ3JvdXBzOiBRdWVyeUxpc3Q8RGF0b0dyb3VwQ29tcG9uZW50PjtcblxuICAvKiogQWxsb3dpbmcgY3VzdG9tIHRlbXBsYXRlIGJ5IHBhc3NpbmcgKmRhdG9BY3RpdmUgZGlyZWN0aXZlIHdoaWNoIGdldHMgdGhlIGFjdGl2ZSBhcyBjb250ZXh0ICovXG4gIEBDb250ZW50Q2hpbGQoRGF0b1NlbGVjdEFjdGl2ZURpcmVjdGl2ZSlcbiAgYWN0aXZlOiBEYXRvU2VsZWN0QWN0aXZlRGlyZWN0aXZlO1xuXG4gIC8qKiBUaGUga2V5IHRoYXQgc3RvcmVzIHRoZSBvcHRpb24gaWQgKi9cbiAgQElucHV0KClcbiAgaWRLZXkgPSAnaWQnO1xuXG4gIC8qKiBUaGUgbG9va3VwIGtleSBmb3IgdGhlIGxhYmVsICovXG4gIEBJbnB1dCgpXG4gIGxhYmVsS2V5ID0gJ2xhYmVsJztcblxuICAvKiogQSBwbGFjZWhvbGRlciBmb3IgdGhlIHRyaWdnZXIgKi9cbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnY29yZS5zZWxlY3QnO1xuXG4gIC8qKiBBIHBsYWNlaG9sZGVyIGZvciB0aGUgc2VhcmNoICovXG4gIEBJbnB1dCgpIHNlYXJjaFBsYWNlaG9sZGVyID0gJ2NvcmUuc2VhcmNoJztcblxuICAvKiogQ3VzdG9tIHRleHQgd2hlbiB3ZSBkb24ndCBoYXZlIHJlc3VsdHMgKi9cbiAgQElucHV0KClcbiAgc2V0IG5vSXRlbXNMYWJlbCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fbm9JdGVtc0xhYmVsID0gdGhpcy50cmFuc2xhdGUudHJhbnNmb3JtKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBJZiBkZWZpbmVkLCBpbmRpY2F0ZXMgYnkgd2hpY2gga2V5IHRoZSBkYXRhIHNob3VsZCBiZSBub3JtYWxpemVkICovXG4gIEBJbnB1dCgpXG4gIGdyb3VwQnk6IHN0cmluZztcblxuICAvKiogQWRkL3JlbW92ZXMgc2VhcmNoIGlucHV0ICovXG4gIEBJbnB1dCgpXG4gIGlzQ29tYm8gPSB0cnVlO1xuXG4gIC8qKiBXaGV0aGVyIGl0J3MgYSBncm91cCAqL1xuICBASW5wdXQoKVxuICBpc0dyb3VwID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIERlY2lkZSB3aGV0aGVyIHRvIGZpbHRlciB0aGUgcmVzdWx0cyBpbnRlcm5hbGx5IGJhc2VkIG9uIHNlYXJjaCBxdWVyeS5cbiAgICogVXNlZnVsIGZvciBhc3luYyBmaWx0ZXJpbmcsIHdoZXJlIHdlIHNlYXJjaCB0aHJvdWdoIG1vcmUgY29tcGxleCBkYXRhLlxuICAgKi9cbiAgQElucHV0KClcbiAgaW50ZXJuYWxTZWFyY2ggPSB0cnVlO1xuXG4gIC8qKiBEZWJvdW5jZSB0aW1lIHRvIGVtaXQgc2VhcmNoIHF1ZXJpZXMgKi9cbiAgQElucHV0KClcbiAgZGVib3VuY2VUaW1lID0gMzAwO1xuXG4gIC8qKiBXaGV0aGVyIHRvIHNob3cgbG9hZGluZyBpbmRpY2F0b3IgKi9cbiAgQElucHV0KClcbiAgaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgLyoqIFdoZXRoZXIgdG8gYWxsb3cgc2VsZWN0IGFsbCBjaGVja2JveCAqL1xuICBASW5wdXQoKVxuICBhbGxvd1NlbGVjdEFsbCA9IGZhbHNlO1xuXG4gIC8qKiBXaGV0aGVyIHRvIGFsbG93IHNlbGVjdCBhbGwgY2hpcC4gZW1wdHkgbWVhbnMgaXQncyBkaXNhYmxlZCAqL1xuICBASW5wdXQoKVxuICBzZWxlY3RBbGxDaGlwVHh0ID0gJyc7XG5cbiAgLyoqIFRoZSB0eXBlIG9mIHRoZSBzZWxlY3QgKi9cbiAgQElucHV0KClcbiAgdHlwZTogU2VsZWN0VHlwZSA9IFNlbGVjdFR5cGUuU0lOR0xFO1xuXG4gIC8qKiBDbGllbnQgc2VhcmNoIHN0cmF0ZWd5ICovXG4gIEBJbnB1dCgpXG4gIHNlYXJjaFN0cmF0ZWd5OiBEYXRvU2VsZWN0U2VhcmNoU3RyYXRlZ3kgPSBkZWZhdWx0Q2xpZW50U2VhcmNoU3RyYXRlZ3k7XG5cbiAgLyoqIFRoZSBkZWZhdWx0IHBvc2l0aW9uIG9mIHRoZSBkcm9wZG93biAqL1xuICBASW5wdXQoKVxuICBwbGFjZW1lbnQ6IFBvcHBlck9wdGlvbnNbJ3BsYWNlbWVudCddID0gJ2JvdHRvbS1zdGFydCc7XG5cbiAgQElucHV0KClcbiAgaW5maW5pdGVTY3JvbGxMb2FkaW5nID0gZmFsc2U7XG5cbiAgLyoqIExpbWl0IHRoZSBudW1iZXIgb2YgcmVzdWx0cyBzaG93biAqL1xuICBASW5wdXQoKVxuICBsaW1pdFRvID0gZGVmYXVsdE9wdGlvbnNEaXNwbGF5TGltaXQ7XG5cbiAgQElucHV0KCdsaW1pdFNlbGVjdGVkVG8nKVxuICBzZXQgbGltaXRTZWxlY3RlZChsaW1pdFNlbGVjdGVkVG86IG51bWJlcikge1xuICAgIHRoaXMubGltaXRTZWxlY3RlZFRvID0gbGltaXRTZWxlY3RlZFRvO1xuICAgIGlmICh0aGlzLm9wdGlvbnMpIHtcbiAgICAgIHRoaXMudXBkYXRlRGlzYWJsZWRTdGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBBbGxvdyBzb3J0aW5nIG9mIHNlbGVjdGVkIG9wdGlvbnMgaW4gbXVsdGkgbW9kZSAqL1xuICBASW5wdXQoKVxuICBpc1NvcnRhYmxlID0gZmFsc2U7XG5cbiAgLyoqIEVsZW1lbnQgdG8gYXBwZW5kIHRoZSBvcHRpb25zIG92ZXJsYXkgdG8gKi9cbiAgQElucHV0KClcbiAgYXBwZW5kVG86IEhUTUxFbGVtZW50IHwgc3RyaW5nO1xuXG4gIC8qKiBUaGUgb3B0aW9ucyB0byBkaXNwbGF5IGluIHRoZSBkcm9wZG93biAqL1xuICBASW5wdXQoKVxuICBzZXQgZGF0YVNldChkYXRhOiBhbnlbXSkge1xuICAgIGlmICghdGhpcy5pbml0aWFsUnVuKSB7XG4gICAgICB0aGlzLl9kYXRhID0gbm9ybWFsaXplRGF0YShkYXRhLCB0aGlzLmxhYmVsS2V5LCB0aGlzLmdyb3VwQnkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvKiogZGF0YSBub3JtYWxpemF0aW9uLCBpZiByZXF1aXJlZCwgd2lsbCBiZSBoYW5kbGVkIGJ5IG5nT25Jbml0IGluIHRoZSBpbml0aWFsIHJ1biAqL1xuICAgICAgdGhpcy5fZGF0YSA9IGRhdGE7XG4gICAgfVxuXG4gICAgLyoqIElmIGl0J3MgYXN5bmMgdXBkYXRlcywgY3JlYXRlIG1pY3JvIHRhc2sgaW4gb3JkZXIgdG8gcmUtc3Vic2NyaWJlIHRvIGNsaWNrcyAqL1xuICAgIGlmICh0aGlzLl9kYXRhSXNEaXJ0eSkge1xuICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlVG9PcHRpb25DbGljayh0aGlzLm9wdGlvbnMpO1xuICAgICAgICB0aGlzLm1hcmtBc0FjdGl2ZSh0aGlzLl9tb2RlbCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLl9kYXRhSXNEaXJ0eSA9IHRydWU7XG4gIH1cblxuICAvKiogU2VhcmNoIGdyb3VwcyBhcyB3ZWxsIGFzIG9wdGlvbnMgKi9cbiAgQElucHV0KClcbiAgc2VhcmNoR3JvdXBMYWJlbHMgPSB0cnVlO1xuXG4gIC8qKiBBZGQgY3VzdG9tIGNsYXNzIHRvIHRoZSBzZWxlY3QgZHJvcERvd24gKi9cbiAgQElucHV0KClcbiAgZGF0b1NlbGVjdENsYXNzOiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgbG9hZGluZ1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIC8qKiBzaG93IGVtcHR5IHJlc3VsdCB0ZXh0ICovXG4gIEBJbnB1dCgpXG4gIHNob3dFbXB0eVJlc3VsdHNUZXh0ID0gdHJ1ZTtcblxuICAvKipcbiAgICoga2VlcCBmb2N1cyBpbiBpbnB1dCBhZnRlciBzZWxlY3Rpbmcgb3B0aW9uXG4gICAqL1xuICBASW5wdXQoKVxuICBrZWVwRm9jdXMgPSBmYWxzZTtcblxuICAvKiogRW1pdCBzZWFyY2ggdmFsdWUgd2hlbiBpbnRlcm5hbCBzZWFyY2ggaXMgZmFsc2UgKi9cbiAgQE91dHB1dCgpXG4gIHNlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIC8qKiBFbWl0IHdoZW4gW3dpdGhBY3Rpb25zXSBpcyB0cnVlIGFuZCB0aGUgdXNlciBjbGlja3Mgc2F2ZSAqL1xuICBAT3V0cHV0KClcbiAgc2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBAT3V0cHV0KClcbiAgZmV0Y2ggPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgQE91dHB1dCgpXG4gIGJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgbGltaXRTZWxlY3RlZFRvOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEdldHRlcnMgYW5kIFNldHRlcnNcbiAgICovXG5cbiAgZ2V0IGNvbnRhaW5zR3JvdXBzKCkge1xuICAgIHJldHVybiB0aGlzLmdyb3VwcyAmJiB0aGlzLmdyb3Vwcy5sZW5ndGggPiAwO1xuICB9XG5cbiAgZ2V0IGRhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gIH1cblxuICBnZXQgb3BlbigpIHtcbiAgICByZXR1cm4gdGhpcy5fb3BlbjtcbiAgfVxuXG4gIHNldCBvcGVuKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fb3BlbiA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGhhc1Jlc3VsdHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2hhc1Jlc3VsdHM7XG4gIH1cblxuICBzZXQgaGFzUmVzdWx0cyh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2hhc1Jlc3VsdHMgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBoYXNWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fbW9kZWwubGVuZ3RoO1xuICB9XG5cbiAgZ2V0IGlzU2luZ2xlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGUgPT09IFNlbGVjdFR5cGUuU0lOR0xFO1xuICB9XG5cbiAgZ2V0IGlzTXVsdGkoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gU2VsZWN0VHlwZS5NVUxUSTtcbiAgfVxuXG4gIGdldCBfc2hvd0VtcHR5UmVzdWx0cygpIHtcbiAgICByZXR1cm4gdGhpcy5zaG93RW1wdHlSZXN1bHRzVGV4dCAmJiB0aGlzLl9kYXRhICYmICghdGhpcy5oYXNSZXN1bHRzIHx8ICF0aGlzLl9kYXRhLmxlbmd0aCkgJiYgIXRoaXMuaXNHcm91cDtcbiAgfVxuXG4gIGdldCBfY291bnQoKSB7XG4gICAgY29uc3QgdG90YWwgPSB0aGlzLmdldFZpc2libGVPcHRpb25zKGZhbHNlKS5sZW5ndGg7XG4gICAgY29uc3QgYWN0aXZlcyA9IHRoaXMuX21vZGVsLmxlbmd0aDtcbiAgICByZXR1cm4gYCgke2FjdGl2ZXN9LyR7dG90YWx9KWA7XG4gIH1cblxuICAvKiogV2hldGhlciBhbGwgdGhlIG9wdGlvbnMgYXJlIGNoZWNrZWQgKi9cbiAgZ2V0IF9pc0FsbENoZWNrZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmlzaWJsZU9wdGlvbnMoKS5ldmVyeShvcHRpb24gPT4gdGhpcy5fbW9kZWwuaW5kZXhPZihvcHRpb24pID4gLTEpO1xuICB9XG5cbiAgZ2V0IHNob3dTZWxlY3RBbGxDaGlwKCkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGVuZ3RoICYmIHRoaXMuX21vZGVsLmxlbmd0aCA9PT0gdGhpcy5vcHRpb25zLmxlbmd0aDtcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHNvbWUgdGhlIG9wdGlvbnMgYXJlIGNoZWNrZWQgKi9cbiAgZ2V0IF9pc0luZGV0ZXJtaW5hdGVseUNoZWNrZWQoKSB7XG4gICAgbGV0IHNvbWVDaGVja2VkLFxuICAgICAgc29tZU5vdENoZWNrZWQgPSBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IHZpc2libGVPcHRpb24gb2YgdGhpcy5nZXRWaXNpYmxlT3B0aW9ucygpKSB7XG4gICAgICBpZiAodGhpcy5fbW9kZWwuaW5kZXhPZih2aXNpYmxlT3B0aW9uKSA+IC0xKSB7XG4gICAgICAgIHNvbWVDaGVja2VkID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNvbWVOb3RDaGVja2VkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChzb21lQ2hlY2tlZCAmJiBzb21lTm90Q2hlY2tlZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqIEZvcm1Db250cm9sIHdoaWNoIGxpc3RlbnMgZm9yIHNlYXJjaCB2YWx1ZSBjaGFuZ2VzICovXG4gIHNlYXJjaENvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcblxuICAvKiogRXhwb3NlIHRoZSBzZWFyY2ggdGVybSBzbyBpdCBjYW4gYmUgdXNlZCB3aXRoIHRoZSBoaWdobGlnaHQgZGlyZWN0aXZlICovXG4gIHNlYXJjaFRlcm0gPSAnJztcblxuICAvKipcbiAgICogUHJpdmF0ZSBQcm9wZXJ0aWVzXG4gICAqL1xuICBfbm9JdGVtc0xhYmVsID0gdGhpcy50cmFuc2xhdGUudHJhbnNmb3JtKCdjb3JlLm5vLWl0ZW1zJyk7XG5cbiAgLyoqIFN0b3JlIHRoZSBpbml0aWFsIGRhdGEgKi9cbiAgX2RhdGEgPSBbXTtcblxuICAvKiogSW5kaWNhdGVzIHdoZXRoZXIgd2UgYWxyZWFkeSBpbml0aWFsaXplZCB0aGUgZGF0YSxcbiAgICogIFRoaXMgaXMgb3B0aW1pemF0aW9uIGZvciBub24gYXN5bmMgY2FsbHMuXG4gICAqICovXG4gIF9kYXRhSXNEaXJ0eSA9IGZhbHNlO1xuXG4gIC8qKiBUcmlnZ2VycyB0aGUgZm9jdXMgb24gdGhlIGlucHV0ICovXG4gIF9mb2N1cyA9IGZhbHNlO1xuXG4gIC8qKiBTdG9yZSB0aGUgYWN0aXZlIG9wdGlvbnMgKi9cbiAgX21vZGVsID0gW107XG5cbiAgLyoqIEVuYWJsZS9kaXNhYmxlIHRoZSBzZWxlY3QtdHJpZ2dlciAqL1xuICBfZGlzYWJsZWQ7XG5cbiAgLyoqIFdoZXRlciB0aGUgZHJvcGRvd24gaXMgb3BlbiAqL1xuICBfb3BlbiA9IGZhbHNlO1xuXG4gIC8qKiBXaGV0aGVyIHdlIGhhdmUgc2VhcmNoIHJlc3VsdHMgKi9cbiAgX2hhc1Jlc3VsdHMgPSB0cnVlO1xuXG4gIC8qKiBJbmRpY2F0aW9uIGlmIHdlIG5lZWQgdG8gc2V0IHRoZSBpbml0aWFsIGNvbnRyb2wgdmFsdWUgYXMgYWN0aXZlcyAqL1xuICBfaW5pdGlhbE9wZW4gPSB0cnVlO1xuXG4gIC8qKiBXaGV0aGVyIGdlbmVyYXRlIGNhbmNlbC9zYXZlIGZvb3RlciAqL1xuICBfd2l0aEFjdGlvbnMgPSBmYWxzZTtcblxuICBfd2l0aEluZmluaXRlU2Nyb2xsID0gZmFsc2U7XG5cbiAgLyoqIE5vdGlmeSB0aGUgbXVsdGkgdHJpZ2dlciB3aGVuIGNsaWNrIG91dHNpZGUgdG8gcmVtb3ZlIHRoZSBmb2N1cyAgKi9cbiAgX2NsaWNrT3V0c2lkZSA9IGZhbHNlO1xuXG4gIC8qKiBEcm9wZG93biBzaXplIGNsYXNzICovXG4gIF9kcm9wZG93bkNsYXNzOiBzdHJpbmdbXTtcblxuICAvKiogdHJ1ZSB1bnRpbCBuZ09uSW5pdCAqL1xuICBwcml2YXRlIGluaXRpYWxSdW4gPSB0cnVlO1xuXG4gIC8qKiBTZWFyY2ggY29udHJvbCBzdWJzY3JpcHRpb24gKi9cbiAgcHJpdmF0ZSBzZWFyY2hTdWJzY3JpcHRpb247XG5cbiAgLyoqIENsaWNrcyBvcHRpb25zIHN1YnNjcmlwdGlvbiAqL1xuICBwcml2YXRlIGNsaWNrc1N1YnNjcmlwdGlvbjtcblxuICBwcml2YXRlIGtleU1hbmFnZXI6IEFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyPERhdG9PcHRpb25Db21wb25lbnQ+O1xuXG4gIHByaXZhdGUgaW5maW5pdGVTdWJzY3JpcHRpb247XG5cbiAgcHJpdmF0ZSBzY3JvbGxFdmVudFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogRGF0b1RyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBob3N0OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBwcml2YXRlIGRhdG9PdmVybGF5OiBEYXRvT3ZlcmxheSxcbiAgICBAQXR0cmlidXRlKCduYWtlZCcpIHB1YmxpYyBfbmFrZWQsXG4gICAgQEF0dHJpYnV0ZSgnZGF0b1NpemUnKSBwdWJsaWMgc2l6ZSxcbiAgICBAQXR0cmlidXRlKCd3aWR0aCcpIHB1YmxpYyB3aWR0aDogc3RyaW5nXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5zaXplID0gc2l6ZSB8fCAnbWQnO1xuICAgIHRoaXMuX2Ryb3Bkb3duQ2xhc3MgPSBbYGRhdG8tc2VsZWN0LSR7dGhpcy5zaXplfWBdO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMuZGF0b1NlbGVjdENsYXNzKSB7XG4gICAgICB0aGlzLl9kcm9wZG93bkNsYXNzLnB1c2godGhpcy5kYXRvU2VsZWN0Q2xhc3MpO1xuICAgIH1cblxuICAgIHRoaXMuX3dpdGhBY3Rpb25zID0gdGhpcy5zYXZlLm9ic2VydmVycy5sZW5ndGggPT09IDE7XG4gICAgdGhpcy5fd2l0aEluZmluaXRlU2Nyb2xsID0gdGhpcy5mZXRjaC5vYnNlcnZlcnMubGVuZ3RoID09PSAxO1xuICAgIHRoaXMubGlzdGVuVG9TZWFyY2goKTtcbiAgICB0aGlzLl9kYXRhID0gbm9ybWFsaXplRGF0YSh0aGlzLl9kYXRhLCB0aGlzLmxhYmVsS2V5LCB0aGlzLmdyb3VwQnkpO1xuICAgIHRoaXMuaW5pdGlhbFJ1biA9IGZhbHNlO1xuICAgIC8vIGhlaWdodCBpcyBiZWluZyBjb250cm9sbGVkIGJ5IHNpemUgcHJvcGVydHlcbiAgICBzZXREaW1lbnNpb25zKHRoaXMud2lkdGgsIG51bGwsIHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2ZvY3Vzb3V0JylcbiAgbWFya1RvdWNoZWQoKSB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB0aGlzLm9uVG91Y2hlZCgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZSB0aGUgZHJvcGRvd25cbiAgICovXG4gIGNsb3NlKCkge1xuICAgIHRoaXMua2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKC0xKTtcbiAgICB0aGlzLnNlYXJjaENvbnRyb2wucGF0Y2hWYWx1ZSgnJyk7XG4gICAgdGhpcy5kYXRvT3ZlcmxheS5kZXRhY2goKTtcbiAgICB0aGlzLnRvZ2dsZSgpO1xuICAgIHRoaXMuX2ZvY3VzID0gZmFsc2U7XG4gICAgdGhpcy5fY2xpY2tPdXRzaWRlID0gdHJ1ZTtcbiAgICB0aGlzLmluZmluaXRlU3Vic2NyaXB0aW9uICYmIHRoaXMuaW5maW5pdGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnNjcm9sbEV2ZW50U3Vic2NyaXB0aW9uICYmIHRoaXMuc2Nyb2xsRXZlbnRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmJsdXIuZW1pdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSB0aGUgZHJvcGRvd24gdmlzaWJpbGl0eVxuICAgKi9cbiAgdG9nZ2xlKCkge1xuICAgIHRoaXMub3BlbiA9ICF0aGlzLm9wZW47XG4gICAgaWYgKHRoaXMub3BlbiAmJiAodGhpcy5pc011bHRpIHx8IHRoaXMuaXNDb21ibykpIHtcbiAgICAgIHRoaXMuX2ZvY3VzID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2NsaWNrT3V0c2lkZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZShhY3RpdmVPcHRpb25zOiBhbnkgfCBhbnlbXSk6IHZvaWQge1xuICAgIHRoaXMuX21vZGVsID0gYWN0aXZlT3B0aW9ucyA/IGNvZXJjZUFycmF5KGFjdGl2ZU9wdGlvbnMpIDogW107XG4gICAgaWYgKHRoaXMub3B0aW9ucykge1xuICAgICAgY29uc3Qgb3ZlclRoZUxpbWl0ID0gdGhpcy5saW1pdFNlbGVjdGVkVG8gJiYgdGhpcy5pc011bHRpICYmIHRoaXMuX21vZGVsLmxlbmd0aCA+PSB0aGlzLmxpbWl0U2VsZWN0ZWRUbztcbiAgICAgIHRoaXMubWFya0FzQWN0aXZlKHRoaXMuX21vZGVsLCB7IGRlc2VsZWN0QWxsOiB0cnVlIH0pO1xuICAgICAgb3ZlclRoZUxpbWl0ICYmIHRoaXMudXBkYXRlRGlzYWJsZWRTdGF0ZSgpO1xuICAgIH1cbiAgICAvKiogRm9yIGxhdGVyIHVwZGF0ZXMgKi9cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVuIHRoZSBvdmVybGF5XG4gICAqL1xuICBvcGVuRHJvcGRvd24oZXZlbnQ/KSB7XG4gICAgLyoqIENsb3NlIHRoZSBkcm9wZG93biB3aGVuIHdlIGNsaWNrIG9uIHRoZSB0cmlnZ2VyIGFuZCB3ZSBkb24ndCBoYXZlIHNlYXJjaCBvciBtdWx0aXBsZSAqL1xuICAgIGlmICh0aGlzLm9wZW4gJiYgIXRoaXMuaXNDb21ibyAmJiB0aGlzLmlzU2luZ2xlKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLyoqIERvbid0IGNsb3NlIHRoZSBkcm9wZG93biBpZiB3ZSBjbGljayBvbiB0aGUgaW5wdXQgYW5kIGl0J3Mgb3BlbiAqL1xuICAgIGlmICh0aGlzLm9wZW4gJiYgKHRoaXMuaXNNdWx0aSB8fCB0aGlzLmlzQ29tYm8pKSB7XG4gICAgICBpZiAoZXZlbnQgJiYgZXZlbnQudGFyZ2V0Lm5vZGVOYW1lICE9PSAnSU5QVVQnKSB7XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5kYXRvT3ZlcmxheS5jcmVhdGVkKSB7XG4gICAgICB0aGlzLmNyZWF0ZU92ZXJsYXkoKTtcbiAgICB9XG5cbiAgICB0aGlzLmRhdG9PdmVybGF5LmJhY2tEcm9wQ2xpY2skLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuX2NsaWNrT3V0c2lkZSA9IHRydWU7XG4gICAgICB0aGlzLm9wZW4gJiYgdGhpcy5jbG9zZSgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5kYXRvT3ZlcmxheS5hdHRhY2goeyBwbGFjZW1lbnQ6IHRoaXMucGxhY2VtZW50IH0sIHRoaXMuX2Ryb3Bkb3duQ2xhc3MpO1xuXG4gICAgdGhpcy50b2dnbGUoKTtcblxuICAgIGlmICh0aGlzLmhhc1ZhbHVlKSB7XG4gICAgICAvKipcbiAgICAgICAqIFdoZW4gd2UgZmlyc3Qgb3BlbiB0aGUgZHJvcGRvd24gd2UgbmVlZCB0byBtYXJrIHRoZVxuICAgICAgICogRm9ybUNvbnRyb2wgdmFsdWVzIGFzIGFjdGl2ZXNcbiAgICAgICAqL1xuICAgICAgaWYgKHRoaXMuX2luaXRpYWxPcGVuKSB7XG4gICAgICAgIHRoaXMubWFya0FzQWN0aXZlKHRoaXMuX21vZGVsKTtcbiAgICAgICAgdGhpcy5faW5pdGlhbE9wZW4gPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMubGltaXRTZWxlY3RlZFRvICYmIHRoaXMuX21vZGVsLmxlbmd0aCA9PT0gdGhpcy5saW1pdFNlbGVjdGVkVG8pIHtcbiAgICAgICAgdGhpcy51cGRhdGVEaXNhYmxlZFN0YXRlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3dpdGhJbmZpbml0ZVNjcm9sbCkge1xuICAgICAgdGhpcy5hY3RpdmF0ZUluZmluaXRlU2Nyb2xsKCk7XG4gICAgfVxuXG4gICAgc2V0U3R5bGUocXVlcnkoJy5kYXRvLW92ZXJsYXknKSwgJ3pJbmRleCcsIHpJbmRleFBsZWFzZSgpKTtcbiAgICBjb25zdCBkcm9wZG93bkNvbnRhaW5lciA9IHF1ZXJ5KCcuZGF0by1zZWxlY3RfX2Ryb3Bkb3duLWNvbnRhaW5lcicpO1xuICAgIHNldFN0eWxlKGRyb3Bkb3duQ29udGFpbmVyLCAnd2lkdGgnLCBgJHt0aGlzLmhvc3QubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aH1weGApO1xuXG4gICAgLyoqIFByZXZlbnQgc2Nyb2xsIHdoaWxlIHRoZSBkcm9wZG93biBpcyBvcGVuICovXG4gICAgaWYgKGlzVGVzdEVudigpKSB7XG4gICAgICB0aGlzLnNjcm9sbEV2ZW50U3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBldmVudE5hbWUgPSBpc01vYmlsZSgpID8gJ3RvdWNobW92ZScgOiAnc2Nyb2xsJztcbiAgICAgIGxldCBzY3JvbGxFdmVudCA9IGZyb21FdmVudCh3aW5kb3csIGV2ZW50TmFtZSk7XG4gICAgICBpZiAoaXNNb2JpbGUoKSkge1xuICAgICAgICBzY3JvbGxFdmVudCA9IHNjcm9sbEV2ZW50LnBpcGUoZmlsdGVyKGV2ZW50ID0+ICFkcm9wZG93bkNvbnRhaW5lci5jb250YWlucyhldmVudC50YXJnZXQgYXMgTm9kZSkpKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2Nyb2xsRXZlbnRTdWJzY3JpcHRpb24gPSBzY3JvbGxFdmVudC5waXBlKHVudGlsRGVzdHJveWVkKHRoaXMpKS5zdWJzY3JpYmUoZSA9PiB0aGlzLmNsb3NlKCkpO1xuICAgIH1cblxuICAgIHRoaXMuaGFuZGxlUGVyZmVjdFNjcm9sbEJhcigpO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaWJlVG9PcHRpb25DbGljayh0aGlzLm9wdGlvbnMpO1xuICAgIHRoaXMua2V5TWFuYWdlciA9IG5ldyBBY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlcih0aGlzLm9wdGlvbnMpLndpdGhXcmFwKCk7XG4gIH1cblxuICBjaGVja0FsbChjaGVjazogYm9vbGVhbikge1xuICAgIGxldCBjaGVja2VkID0gY2hlY2s7XG4gICAgaWYgKHRoaXMuX2lzSW5kZXRlcm1pbmF0ZWx5Q2hlY2tlZCkge1xuICAgICAgY2hlY2tlZCA9IGZhbHNlO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGRhdG9PcHRpb24gb2YgdGhpcy5vcHRpb25zLnRvQXJyYXkoKSkge1xuICAgICAgaWYgKCFkYXRvT3B0aW9uLmRpc2FibGVkKSB7XG4gICAgICAgIGRhdG9PcHRpb24uYWN0aXZlID0gY2hlY2tlZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB2aXNpYmxlT3B0aW9ucyA9IHRoaXMuZ2V0VmlzaWJsZU9wdGlvbnMoKTtcbiAgICBjb25zdCBpc0FsbFZpc2libGUgPSB2aXNpYmxlT3B0aW9ucy5sZW5ndGggPT09IHRoaXMub3B0aW9ucy5sZW5ndGg7XG5cbiAgICBpZiAoaXNBbGxWaXNpYmxlKSB7XG4gICAgICB0aGlzLl9tb2RlbCA9IGNoZWNrZWQgPyB2aXNpYmxlT3B0aW9ucyA6IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY2hlY2tlZCkge1xuICAgICAgICBjb25zdCB0ZW1wID0gW107XG4gICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIHZpc2libGVPcHRpb25zKSB7XG4gICAgICAgICAgaWYgKHRoaXMuX21vZGVsLmluZGV4T2Yob3B0aW9uKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRlbXAucHVzaChvcHRpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9tb2RlbCA9IFsuLi50aGlzLl9tb2RlbCwgLi4udGVtcF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9tb2RlbCA9IHRoaXMuX21vZGVsLmZpbHRlcihvcHRpb24gPT4gdmlzaWJsZU9wdGlvbnMuaW5kZXhPZihvcHRpb24pID09PSAtMSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLl9tb2RlbCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgdGhpcy5hc3luY1VwZGF0ZURyb3Bkb3duUG9zaXRpb24oKTtcbiAgfVxuXG4gIHJlb3JkZXJPcHRpb25zKG5ld09yZGVyOiBhbnlbXSkge1xuICAgIHRoaXMuX21vZGVsID0gbmV3T3JkZXI7XG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLl9tb2RlbCk7XG4gIH1cblxuICByZW1vdmVPcHRpb24ob3B0aW9uKSB7XG4gICAgY29uc3QgdXBkYXRlRGlzYWJsZWQgPSB0aGlzLmxpbWl0U2VsZWN0ZWRUbyAmJiB0aGlzLl9tb2RlbC5sZW5ndGggPT09IHRoaXMubGltaXRTZWxlY3RlZFRvO1xuICAgIHRoaXMuX21vZGVsID0gdGhpcy5fbW9kZWwuZmlsdGVyKGN1cnJlbnQgPT4gY3VycmVudFt0aGlzLmlkS2V5XSAhPT0gb3B0aW9uW3RoaXMuaWRLZXldKTtcbiAgICBjb25zdCBvcHRpb25Ub1JlbW92ZSA9IHRoaXMub3B0aW9ucy5maW5kKFxuICAgICAgZGF0b09wdGlvbiA9PiBkYXRvT3B0aW9uLm9wdGlvbiAmJiBkYXRvT3B0aW9uLm9wdGlvblt0aGlzLmlkS2V5XSA9PT0gb3B0aW9uW3RoaXMuaWRLZXldXG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIFRvIHByZXZlbnQgY2FzZXMgd2hlbiB0aGUgb3B0aW9ucyBhcmUgbGltaXRlZCBhbmQgZG9lc250IGluY2x1ZGUgdGhlIGFjdGl2ZSBvcHRpb24sXG4gICAgICogdGhhdCBjYW4gYmUgcmVhY2hlZCBvbmx5IGJ5IHNlcnZlciBzZWFyY2guXG4gICAgICovXG4gICAgaWYgKG9wdGlvblRvUmVtb3ZlKSB7XG4gICAgICBvcHRpb25Ub1JlbW92ZS5hY3RpdmUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB1cGRhdGVEaXNhYmxlZCAmJiB0aGlzLnVwZGF0ZURpc2FibGVkU3RhdGUoKTtcblxuICAgIHRoaXMub25DaGFuZ2UodGhpcy5fbW9kZWwpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIHRoaXMuYXN5bmNVcGRhdGVEcm9wZG93blBvc2l0aW9uKCk7XG4gIH1cblxuICBwcmV2ZW50Qm9keVNjcm9sbChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmIChpc0Fycm93VXBEb3duKGV2ZW50KSkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgdGhlIG92ZXJsYXkgdG8gZGlzcGxheSB0aGUgc2VsZWN0IG9wdGlvbnNcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlT3ZlcmxheSgpIHtcbiAgICBjb25zdCB0ZW1wbGF0ZVBvcnRhbCA9IG5ldyBEYXRvVGVtcGxhdGVQb3J0YWwodGhpcy5kcm9wZG93bik7XG4gICAgbGV0IGFwcGVuZFRvRWxlbWVudDtcbiAgICBpZiAoaXNTdHJpbmcodGhpcy5hcHBlbmRUbykpIHtcbiAgICAgIGFwcGVuZFRvRWxlbWVudCA9IGNsb3Nlc3QodGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQsIHRoaXMuYXBwZW5kVG8gYXMgc3RyaW5nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBwZW5kVG9FbGVtZW50ID0gdGhpcy5hcHBlbmRUbztcbiAgICB9XG5cbiAgICB0aGlzLmRhdG9PdmVybGF5LmNyZWF0ZSh0aGlzLmhvc3QubmF0aXZlRWxlbWVudCwgdGVtcGxhdGVQb3J0YWwsIGFwcGVuZFRvRWxlbWVudCk7XG4gIH1cblxuICAvKipcbiAgICogUG9wcGVyIGRvZXNuJ3Qgc3VwcG9ydCBwZXJmZWN0LXNjcm9sbC1iYXIsIHNvIHdlIG5lZWQgdG8gZG8gaXQgbWFudWFsbHlcbiAgICovXG4gIHByaXZhdGUgaGFuZGxlUGVyZmVjdFNjcm9sbEJhcigpIHtcbiAgICBjb25zdCBwZXJmZWN0U2Nyb2xsQmFyUGFyZW50ID0gY2xvc2VzdCh0aGlzLmhvc3QubmF0aXZlRWxlbWVudCwgJy5wcycpO1xuICAgIGlmIChwZXJmZWN0U2Nyb2xsQmFyUGFyZW50KSB7XG4gICAgICBmcm9tRXZlbnQocGVyZmVjdFNjcm9sbEJhclBhcmVudCwgJ3Njcm9sbCcpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRocm90dGxlVGltZSgxMCksXG4gICAgICAgICAgdW50aWxEZXN0cm95ZWQodGhpcylcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmRhdG9PdmVybGF5LnNjaGVkdWxlVXBkYXRlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0VmlzaWJsZU9wdGlvbnMoZ2V0UmF3T3B0aW9ucyA9IHRydWUpIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zLmZpbHRlcihkYXRvT3B0aW9uID0+ICFkYXRvT3B0aW9uLmRpc2FibGVkKTtcbiAgICBpZiAoZ2V0UmF3T3B0aW9ucykge1xuICAgICAgcmV0dXJuIG9wdGlvbnMubWFwKGRhdG9PcHRpb24gPT4gZGF0b09wdGlvbi5vcHRpb24pO1xuICAgIH1cbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXJrIHRoZSBpbml0aWFsIGNvbnRyb2wgdmFsdWUgYXMgYWN0aXZlXG4gICAqL1xuICBwcml2YXRlIG1hcmtBc0FjdGl2ZShtb2RlbDogYW55W10sIG9wdGlvbnM6IHsgZGVzZWxlY3RBbGw6IGJvb2xlYW4gfSA9IHsgZGVzZWxlY3RBbGw6IGZhbHNlIH0pIHtcbiAgICBjb25zdCBhc0FycmF5ID0gdGhpcy5vcHRpb25zLnRvQXJyYXkoKTtcbiAgICBpZiAob3B0aW9ucy5kZXNlbGVjdEFsbCkge1xuICAgICAgdGhpcy5yZXNldEFsbCgpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBtb2RlbCkge1xuICAgICAgaWYgKCFvcHRpb24pIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBtYXRjaCA9IGFzQXJyYXkuZmluZChjdXJyZW50ID0+IGN1cnJlbnQub3B0aW9uICYmIGN1cnJlbnQub3B0aW9uW3RoaXMuaWRLZXldID09PSBvcHRpb25bdGhpcy5pZEtleV0pO1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIG1hdGNoLmFjdGl2ZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNob3cgYWxsIG9wdGlvbnNcbiAgICovXG4gIHByaXZhdGUgc2hvd0FsbCgpIHtcbiAgICBjb25zdCBpc0FjY29yZGlvbiA9IHRoaXMuaXNBY2NvcmRpb25Hcm91cCgpO1xuICAgIGNvbnN0IGdyb3VwQ29tcG9uZW50czogTGlzdEdyb3VwQ29tcG9uZW50W10gPSB0aGlzLmdldEdyb3VwQ29tcG9uZW50c0FycmF5KCk7XG5cbiAgICBmb3IgKGNvbnN0IGdyb3VwQ29tcG9uZW50IG9mIGdyb3VwQ29tcG9uZW50cykge1xuICAgICAgZ3JvdXBDb21wb25lbnQuX2hpZGRlbiA9IGZhbHNlO1xuXG4gICAgICAvKiBJZiB0aGlzIGFjY29yZGlvbiBncm91cCBoYXMgYmVlbiBleHBlbmRlZCBieSB0aGUgc2VhcmNoIGZ1bmN0aW9uLFxuICAgICAgICAgdGhlbiBjb2xsYXBzZSBpdCB0byB0aGUgb3JpZ2luYWwgc3RhdGVcbiAgICAgICovXG4gICAgICBpZiAoaXNBY2NvcmRpb24pIHtcbiAgICAgICAgY29uc3QgYW55R3JvdXAgPSBncm91cENvbXBvbmVudCBhcyBhbnk7XG5cbiAgICAgICAgaWYgKGFueUdyb3VwLl9fZXhwZW5kZWQpIHtcbiAgICAgICAgICBhbnlHcm91cC5fX2V4cGVuZGVkID0gZmFsc2U7XG4gICAgICAgICAgY29uc3QgYWNjb3JkaW9uR3JvdXAgPSBhbnlHcm91cCBhcyBEYXRvQWNjb3JkaW9uR3JvdXBDb21wb25lbnQ7XG4gICAgICAgICAgYWNjb3JkaW9uR3JvdXAuY29udGVudC5kaXNhYmxlQW5pbWF0aW9uID0gZmFsc2U7XG4gICAgICAgICAgYWNjb3JkaW9uR3JvdXAuZXhwYW5kKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgZGF0b09wdGlvbiBvZiB0aGlzLm9wdGlvbnMudG9BcnJheSgpKSB7XG4gICAgICBkYXRvT3B0aW9uLmhpZGVBbmREaXNhYmxlZChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaCBmb3Igb3B0aW9ucyBhbmQgcmV0dXJucyBpZiB3ZSBoYXZlIHJlc3VsdFxuICAgKi9cbiAgcHJpdmF0ZSBzZWFyY2hPcHRpb25zKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBsZXQgaGFzUmVzdWx0ID0gZmFsc2U7XG4gICAgY29uc3QgZ3JvdXBDb21wb25lbnRzQXJyYXk6IExpc3RHcm91cENvbXBvbmVudFtdID0gdGhpcy5nZXRHcm91cENvbXBvbmVudHNBcnJheSgpO1xuICAgIGNvbnN0IGhhc0dyb3VwcyA9IGdyb3VwQ29tcG9uZW50c0FycmF5Lmxlbmd0aDtcblxuICAgIGlmIChoYXNHcm91cHMpIHtcbiAgICAgIGhhc1Jlc3VsdCA9IHRoaXMuc2VhcmNoSW5Hcm91cHMoZ3JvdXBDb21wb25lbnRzQXJyYXksIHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGFzUmVzdWx0ID0gdGhpcy5zZWFyY2hJbk9wdGlvbnModmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiBoYXNSZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoIGZvciBtYXRjaGluZyBncm91cHMgYW5kIGNoaWxkcmVuLlxuICAgKi9cbiAgcHJpdmF0ZSBzZWFyY2hJbkdyb3Vwcyhncm91cENvbXBvbmVudHNBcnJheTogTGlzdEdyb3VwQ29tcG9uZW50W10sIHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBpc0FjY29yZGlvbiA9IHRoaXMuaXNBY2NvcmRpb25Hcm91cCgpO1xuICAgIGNvbnN0IGRhdGFMZW5ndGggPSB0aGlzLl9kYXRhLmxlbmd0aDtcbiAgICBsZXQgaGFzUmVzdWx0cyA9IGZhbHNlO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhTGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5fZGF0YVtpXTtcbiAgICAgIGNvbnN0IGdyb3VwS2V5ID0gdGhpcy5nZXRHcm91cEtleShncm91cCk7XG4gICAgICBjb25zdCBncm91cE1hdGNoID0gdGhpcy5zZWFyY2hHcm91cExhYmVscyAmJiB0aGlzLnNlYXJjaFN0cmF0ZWd5KGdyb3VwLCB2YWx1ZSwgdGhpcy5sYWJlbEtleSk7XG4gICAgICBjb25zdCBncm91cE9wdGlvbnMgPSBncm91cC5jaGlsZHJlbi5tYXAoY2hpbGQgPT4gY2hpbGRbdGhpcy5pZEtleV0pO1xuICAgICAgLyogc2hvdy9oaWRlIHRoZSBvcHRpb25zICovXG4gICAgICBjb25zdCBzaG93R3JvdXAgPSB0aGlzLnNlYXJjaEluT3B0aW9ucyh2YWx1ZSwgZ3JvdXBPcHRpb25zLCBncm91cE1hdGNoKTtcblxuICAgICAgaWYgKHNob3dHcm91cCAmJiAhaGFzUmVzdWx0cykge1xuICAgICAgICBoYXNSZXN1bHRzID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLyogRmluZCB0aGUgcmlnaHQgY29tcG9uZW50LCBhY2NvcmRpbmcgdG8gdGhlIGludGVybmFsIGtleSBhc3NpZ25lZCBpbiB0aGUgcHJldmlvdXMgc2VhcmNoLlxuICAgICAgICAgV2hlbiBubyBtYXRjaCBpcyBmb3VuZCwgZmFsbGluZyBiYWNrIHRvIHRoZSBzYW1lIGluZGV4IGFzIHRoZSBncm91cCBvcHRpb24uXG4gICAgICAqICBUaGUgaW5kZXggaXMgY29uc2lkZXJlZCBsZXNzIHNhZmUsIGJlY2F1c2UgaXQgY2FuIGNoYW5nZSBhZnRlciBzb3J0aW5nLiAqL1xuICAgICAgY29uc3QgZ3JvdXBDb21wb25lbnQgPSBncm91cENvbXBvbmVudHNBcnJheS5maW5kKChnOiBhbnkpID0+IGcuX19rZXkgPT09IGdyb3VwS2V5KSB8fCBncm91cENvbXBvbmVudHNBcnJheVtpXTtcbiAgICAgIC8qIFNob3cvaGlkZSB0aGUgZ3JvdXAgKi9cbiAgICAgIGlmIChncm91cENvbXBvbmVudCkge1xuICAgICAgICBncm91cENvbXBvbmVudC5faGlkZGVuID0gIXNob3dHcm91cDtcbiAgICAgICAgLyogYXNzaWduIGFuIGludGVybmFsIGtleSB0byB0aGUgY29tcG9uZW50IGluc3RhbmNlLCBzbyB3ZSBjYW4gZmluZCBpdCBsYXRlciAoYWJvdmUpLiAqL1xuICAgICAgICAoZ3JvdXBDb21wb25lbnQgYXMgYW55KS5fX2tleSA9IGdyb3VwS2V5O1xuICAgICAgICAvKiBFeHBhbmQgdGhlIGFjY29yZGlvbiBvbiBtYXRjaGluZyByZXN1bHRzICovXG4gICAgICAgIGlmIChpc0FjY29yZGlvbiAmJiBzaG93R3JvdXApIHtcbiAgICAgICAgICBjb25zdCBhY2NvcmRpb25Hcm91cCA9IGdyb3VwQ29tcG9uZW50IGFzIERhdG9BY2NvcmRpb25Hcm91cENvbXBvbmVudDtcblxuICAgICAgICAgIGlmICghYWNjb3JkaW9uR3JvdXAuZXhwYW5kZWQpIHtcbiAgICAgICAgICAgIGFjY29yZGlvbkdyb3VwLmNvbnRlbnQuZGlzYWJsZUFuaW1hdGlvbiA9IHRydWU7XG4gICAgICAgICAgICAvKiBFeHBhbmQgdGhlIGFjY29yZGlvbiAqL1xuICAgICAgICAgICAgYWNjb3JkaW9uR3JvdXAuZXhwYW5kKHRydWUpO1xuICAgICAgICAgICAgLyogTWFyayB0aGUgYWNjb3JkaW9uIGFzIGV4cGFuZGVkLCBzbyB3ZSBjYW4gcmV0dXJuIHRvIHRoZSBkZWZhdWx0IHN0YXRlIGxhdGVyICovXG4gICAgICAgICAgICAoZ3JvdXBDb21wb25lbnQgYXMgYW55KS5fX2V4cGVuZGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaGFzUmVzdWx0cztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2ggdGhlIG9wdGlvbnMgdG8gc2hvdyBvciBoaWRlIGVhY2ggYW5kIHJldHVybiBpZiByZXN1bHQgaGFzIGJlZW4gZm91bmQuXG4gICAqIENvbnNpZGVyIHdlIGhhdmUgYSBncm91cCB0aGF0IG1hdGNoIHdlIHNob3cgYWxsIG9mIGl0cyBvcHRpb25zLlxuICAgKi9cbiAgcHJpdmF0ZSBzZWFyY2hJbk9wdGlvbnModmFsdWU6IHN0cmluZywgZ3JvdXBPcHRpb25zID0gW10sIGdyb3VwTWF0Y2ggPSBmYWxzZSkge1xuICAgIGxldCBoYXNSZXN1bHRzID0gZmFsc2U7XG5cbiAgICBmb3IgKGNvbnN0IGRhdG9PcHRpb24gb2YgdGhpcy5vcHRpb25zLnRvQXJyYXkoKSkge1xuICAgICAgY29uc3Qgb3B0aW9uSW5Hcm91cCA9IGdyb3VwT3B0aW9ucy5pbmRleE9mKGRhdG9PcHRpb24ub3B0aW9uICYmIGRhdG9PcHRpb24ub3B0aW9uW3RoaXMuaWRLZXldKSAhPT0gLTE7XG5cbiAgICAgIGlmIChncm91cE1hdGNoICYmIG9wdGlvbkluR3JvdXApIHtcbiAgICAgICAgZGF0b09wdGlvbi5oaWRlQW5kRGlzYWJsZWQoZmFsc2UpO1xuICAgICAgICBoYXNSZXN1bHRzID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoIXNpemUoZ3JvdXBPcHRpb25zKSB8fCBvcHRpb25Jbkdyb3VwKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gdGhpcy5zZWFyY2hTdHJhdGVneShkYXRvT3B0aW9uLCB2YWx1ZSwgdGhpcy5sYWJlbEtleSk7XG5cbiAgICAgICAgaWYgKCFtYXRjaCkge1xuICAgICAgICAgIGRhdG9PcHRpb24uaGlkZUFuZERpc2FibGVkKHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRhdG9PcHRpb24uaGlkZUFuZERpc2FibGVkKGZhbHNlKTtcbiAgICAgICAgICBoYXNSZXN1bHRzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoYXNSZXN1bHRzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUga2V5IG9mIHRoZSBvcHRpb24gZ3JvdXAuIEl0IGNhbiBiZSB0aGUgZ3JvdXAgSWQgaWYgZXhpc3RzLCBvciB0aGUgbGFiZWwuXG4gICAqL1xuICBwcml2YXRlIGdldEdyb3VwS2V5KG9wdGlvbikge1xuICAgIHJldHVybiBvcHRpb24gJiYgKG9wdGlvblt0aGlzLmlkS2V5XSB8fCBvcHRpb25bdGhpcy5sYWJlbEtleV0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0VtcHR5KHZhbHVlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09ICcnO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1YnNjcmliZSB0byBzZWFyY2ggY2hhbmdlcyBhbmQgZmlsdGVyIHRoZSBsaXN0XG4gICAqL1xuICBwcml2YXRlIGxpc3RlblRvU2VhcmNoKCkge1xuICAgIHRoaXMuc2VhcmNoU3Vic2NyaXB0aW9uID1cbiAgICAgIHRoaXMuaXNDb21ibyAmJlxuICAgICAgdGhpcy5zZWFyY2hDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZSh0aGlzLmRlYm91bmNlVGltZSkpLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmludGVybmFsU2VhcmNoKSB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNFbXB0eSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0FsbCgpO1xuICAgICAgICAgICAgdGhpcy5oYXNSZXN1bHRzID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5oYXNSZXN1bHRzID0gdGhpcy5zZWFyY2hPcHRpb25zKHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZWFyY2guZW1pdCh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlYXJjaFRlcm0gPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0oLTEpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgdGhpcy5hc3luY1VwZGF0ZURyb3Bkb3duUG9zaXRpb24oKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1YnNjcmliZSB0byBvcHRpb24gY2xpY2sgYW5kIGNoYW5nZSB0aGUgc3RhdGUgYWNjb3JkaW5nbHlcbiAgICovXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9PcHRpb25DbGljayhvcHRpb25zOiBRdWVyeUxpc3Q8RGF0b09wdGlvbkNvbXBvbmVudD4pIHtcbiAgICB0aGlzLmNsaWNrc1N1YnNjcmlwdGlvbiAmJiB0aGlzLmNsaWNrc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuXG4gICAgLyoqIEdhdGhlciBhbGwgdGhlIGNsaWNrcyAqL1xuICAgIGNvbnN0IGNsaWNrcyQgPSBvcHRpb25zLm1hcChvcHRpb24gPT5cbiAgICAgIG9wdGlvbi5jbGljayQucGlwZShcbiAgICAgICAgbWFwKChldmVudDogRXZlbnQpID0+ICh7XG4gICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgb3B0aW9uXG4gICAgICAgIH0pKVxuICAgICAgKVxuICAgICk7XG5cbiAgICAvKiogQ29uc2lkZXIgY2hhbmdlIGl0IHRvIHVzZSBldmVudCBkZWxlZ2F0aW9uICovXG4gICAgdGhpcy5jbGlja3NTdWJzY3JpcHRpb24gPSBtZXJnZSguLi5jbGlja3MkKS5zdWJzY3JpYmUoKHsgb3B0aW9uLCBldmVudCB9KSA9PiB7XG4gICAgICBpZiAob3B0aW9uLmRpc2FibGVkKSByZXR1cm47XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5pc1NpbmdsZSA/IHRoaXMuaGFuZGxlU2luZ2xlQ2xpY2sob3B0aW9uKSA6IHRoaXMuaGFuZGxlTXVsdGlDbGljayhvcHRpb24pO1xuICAgIH0pO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bicsIFsnJGV2ZW50J10pXG4gIG9uRG9jdW1lbnRLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKGlzRXNjYXBlKGV2ZW50KSAmJiB0aGlzLm9wZW4pIHtcbiAgICAgIHRoaXMuX2NsaWNrT3V0c2lkZSA9IHRydWU7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAga2V5dXAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoaXNFbnRlcihldmVudCkpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW1JbmRleDtcbiAgICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMub3B0aW9ucy50b0FycmF5KClbaW5kZXhdO1xuICAgICAgdGhpcy5pc1NpbmdsZSA/IHRoaXMuaGFuZGxlU2luZ2xlQ2xpY2soYWN0aXZlKSA6IHRoaXMuaGFuZGxlTXVsdGlDbGljayhhY3RpdmUpO1xuICAgIH1cblxuICAgIGlmIChpc0Fycm93VXBEb3duKGV2ZW50KSkge1xuICAgICAgdGhpcy5rZXlNYW5hZ2VyLm9uS2V5ZG93bihldmVudCk7XG4gICAgICBjb25zdCBwYW5lbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kYXRvLXNlbGVjdF9fZHJvcGRvd24nKTtcbiAgICAgIF9zY3JvbGxUb09wdGlvbih7XG4gICAgICAgIHNpemU6IHRoaXMuc2l6ZSxcbiAgICAgICAgcGFuZWwsXG4gICAgICAgIGFjdGl2ZUl0ZW1JbmRleDogdGhpcy5rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW1JbmRleCxcbiAgICAgICAgZ3JvdXBzOiB0aGlzLmdyb3VwcyxcbiAgICAgICAgb3B0aW9uczogdGhpcy5vcHRpb25zXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoaXNFc2NhcGUoZXZlbnQpKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXNldEFsbCgpIHtcbiAgICBmb3IgKGNvbnN0IGRhdG9PcHRpb24gb2YgdGhpcy5vcHRpb25zLnRvQXJyYXkoKSkge1xuICAgICAgZGF0b09wdGlvbi5hY3RpdmUgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVNpbmdsZUNsaWNrKGRhdG9PcHRpb246IERhdG9PcHRpb25Db21wb25lbnQpIHtcbiAgICBpZiAoIWRhdG9PcHRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGRhdG9PcHRpb24uYWN0aXZlKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVzZXRBbGwoKTtcbiAgICAgIGRhdG9PcHRpb24uYWN0aXZlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCByYXdPcHRpb24gPSBkYXRvT3B0aW9uLm9wdGlvbjtcbiAgICB0aGlzLl9tb2RlbCA9IFtyYXdPcHRpb25dO1xuICAgIHRoaXMub25DaGFuZ2UocmF3T3B0aW9uKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZU11bHRpQ2xpY2soZGF0b09wdGlvbjogRGF0b09wdGlvbkNvbXBvbmVudCkge1xuICAgIGlmICghZGF0b09wdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBtb2RlbExlbmd0aCA9IHRoaXMuX21vZGVsLmxlbmd0aDtcbiAgICBjb25zdCB1cGRhdGVEaXNhYmxlZCA9XG4gICAgICB0aGlzLmxpbWl0U2VsZWN0ZWRUbyAmJlxuICAgICAgKG1vZGVsTGVuZ3RoID09PSB0aGlzLmxpbWl0U2VsZWN0ZWRUbyB8fCAobW9kZWxMZW5ndGggPT09IHRoaXMubGltaXRTZWxlY3RlZFRvIC0gMSAmJiAhZGF0b09wdGlvbi5hY3RpdmUpKTtcbiAgICBkYXRvT3B0aW9uLmFjdGl2ZSA9ICFkYXRvT3B0aW9uLmFjdGl2ZTtcbiAgICBjb25zdCByYXdPcHRpb24gPSBkYXRvT3B0aW9uLm9wdGlvbjtcbiAgICBpZiAoZGF0b09wdGlvbi5hY3RpdmUpIHtcbiAgICAgIHRoaXMuX21vZGVsID0gdGhpcy5fbW9kZWwuY29uY2F0KHJhd09wdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX21vZGVsID0gdGhpcy5fbW9kZWwuZmlsdGVyKGN1cnJlbnQgPT4gY3VycmVudFt0aGlzLmlkS2V5XSAhPT0gcmF3T3B0aW9uW3RoaXMuaWRLZXldKTtcbiAgICB9XG4gICAgdXBkYXRlRGlzYWJsZWQgJiYgdGhpcy51cGRhdGVEaXNhYmxlZFN0YXRlKCk7XG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLl9tb2RlbCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgdGhpcy5hc3luY1VwZGF0ZURyb3Bkb3duUG9zaXRpb24oKTtcbiAgfVxuXG4gIHByaXZhdGUgYWN0aXZhdGVJbmZpbml0ZVNjcm9sbCgpIHtcbiAgICB0aGlzLmluZmluaXRlU3Vic2NyaXB0aW9uID0gZnJvbUV2ZW50KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kYXRvLXNlbGVjdF9fZHJvcGRvd24nKSwgJ3Njcm9sbCcpXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoNTApKVxuICAgICAgLnN1YnNjcmliZShfID0+IHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmRhdG8tc2VsZWN0X19kcm9wZG93bicpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBjb25zdCBzY3JvbGxZID0gY29udGFpbmVyLnNjcm9sbEhlaWdodCAtIGNvbnRhaW5lci5zY3JvbGxUb3A7XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IGNvbnRhaW5lci5vZmZzZXRIZWlnaHQ7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IGhlaWdodCAtIHNjcm9sbFk7XG4gICAgICAgIGlmIChvZmZzZXQgPT09IDAgfHwgb2Zmc2V0ID09PSAxKSB7XG4gICAgICAgICAgdGhpcy5mZXRjaC5lbWl0KHRydWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuc2VhcmNoU3Vic2NyaXB0aW9uICYmIHRoaXMuc2VhcmNoU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jbGlja3NTdWJzY3JpcHRpb24gJiYgdGhpcy5jbGlja3NTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmluZmluaXRlU3Vic2NyaXB0aW9uICYmIHRoaXMuaW5maW5pdGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmRhdG9PdmVybGF5LmF0dGFjaGVkICYmIHRoaXMuZGF0b092ZXJsYXkuZGVzdHJveSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGdyb3VwIGNvbXBvbmVudCBpcyBBY2NvcmRpb25cbiAgICovXG4gIHByaXZhdGUgaXNBY2NvcmRpb25Hcm91cCgpIHtcbiAgICByZXR1cm4gdGhpcy5hY2NvcmRpb24gJiYgdGhpcy5hY2NvcmRpb24ubGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGFuIGFycmF5IG9mIHRoZSBncm91cCBjb21wb25lbnRzXG4gICAqL1xuICBwcml2YXRlIGdldEdyb3VwQ29tcG9uZW50c0FycmF5KCk6IExpc3RHcm91cENvbXBvbmVudFtdIHtcbiAgICByZXR1cm4gdGhpcy5pc0FjY29yZGlvbkdyb3VwKCkgPyB0aGlzLmFjY29yZGlvbi5maXJzdC5ncm91cHMudG9BcnJheSgpIDogdGhpcy5ncm91cHMgJiYgdGhpcy5ncm91cHMudG9BcnJheSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVEaXNhYmxlZFN0YXRlKCkge1xuICAgIGNvbnN0IGRpc2FibGVkID0gdGhpcy5fbW9kZWwubGVuZ3RoID09PSB0aGlzLmxpbWl0U2VsZWN0ZWRUbztcbiAgICBmb3IgKGNvbnN0IGRhdG9PcHRpb24gb2YgdGhpcy5vcHRpb25zLnRvQXJyYXkoKSkge1xuICAgICAgaWYgKCFkYXRvT3B0aW9uLmFjdGl2ZSkge1xuICAgICAgICBkYXRvT3B0aW9uLmRpc2FibGVkID0gZGlzYWJsZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gTWFrZSBzdXJlIHRoZSBvdmVybGF5IHdpbGwgYmUgdXBkYXRlIEFGVEVSIENoYW5nZSBEZXRlY3Rpb24gd2FzIGRvbmVcbiAgLy8gU28gdGhlIGl0ZW1zIGluIHRoZSBpbnB1dCAoYW5kIGl0cyBoZWlnaHQpIGlzIHVwZGF0ZVxuICBwcml2YXRlIGFzeW5jVXBkYXRlRHJvcGRvd25Qb3NpdGlvbigpIHtcbiAgICBpZiAodGhpcy5kYXRvT3ZlcmxheSAmJiB0aGlzLmRhdG9PdmVybGF5LmF0dGFjaGVkKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZGF0b092ZXJsYXkuc2NoZWR1bGVVcGRhdGUoKSwgMCk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
922
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BkYXRvcmFtYS9jb3JlLyIsInNvdXJjZXMiOlsibGliL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7QUFFSCxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLFNBQVMsRUFDVCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxFQUNULFdBQVcsRUFDWCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDMUUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9FLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3RFLE9BQU8sRUFBNEIsMkJBQTJCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRixPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMvRCxP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QU0sRUFBRTs7bURBQzJCO0FBSXBDO0lBREMsTUFBTSxFQUFFOztpREFDdUI7QUFHaEM7SUFEQyxNQUFNLEVBQUU7O2tEQUMyQjtBQUdwQztJQURDLE1BQU0sRUFBRTs7aURBQ3VCO0FBNEtoQztJQURDLFlBQVksQ0FBQyxVQUFVLENBQUM7Ozs7c0RBR3hCO0FBZ2JEO0lBREMsWUFBWSxDQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7O3FDQUNwQixhQUFhOzs0REFLckM7QUFoeEJVLG1CQUFtQjtJQVQvQixTQUFTLENBQUM7UUFDVCxRQUFRLEVBQUUsYUFBYTtRQUN2Qiw4eUdBQXNDO1FBQ3RDLG1CQUFtQixFQUFFLEtBQUs7UUFDMUIsU0FBUyxFQUFFLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQztRQUN2QyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtRQUNyQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtRQUMvQyxRQUFRLEVBQUUsWUFBWTtLQUN2QixDQUFDO0lBa1VHLFdBQUEsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ2xCLFdBQUEsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ3JCLFdBQUEsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFBO3FDQU5OLGlCQUFpQjtRQUNYLG9CQUFvQjtRQUN6QixVQUFVO1FBQ0gsV0FBVztHQWhVdkIsbUJBQW1CLENBODRCL0I7U0E5NEJZLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBEYXRvcmFtYS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBBcGFjaGUgTGljZW5zZSAyLjAgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vZGF0b3JhbWEvY2xpZW50LWNvcmUvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICovXG5cbmltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIEF0dHJpYnV0ZSxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUNvbnRyb2wsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQmFzZUN1c3RvbUNvbnRyb2wgfSBmcm9tICcuLi9jdXN0b20tY29udHJvbC9iYXNlLWN1c3RvbS1jb250cm9sJztcbmltcG9ydCB7IGRlZmF1bHRPcHRpb25zRGlzcGxheUxpbWl0LCBTZWxlY3RUeXBlIH0gZnJvbSAnLi9zZWxlY3QudHlwZXMnO1xuaW1wb3J0IHsgRGF0b09wdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uL29wdGlvbnMvb3B0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIG1lcmdlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlsdGVyLCBtYXAsIHRha2UsIHRocm90dGxlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IERhdG9TZWxlY3RBY3RpdmVEaXJlY3RpdmUgfSBmcm9tICcuL3NlbGVjdC1hY3RpdmUuZGlyZWN0aXZlJztcbmltcG9ydCB7IERhdG9TZWxlY3RTZWFyY2hTdHJhdGVneSwgZGVmYXVsdENsaWVudFNlYXJjaFN0cmF0ZWd5IH0gZnJvbSAnLi9zZWFyY2guc3RyYXRlZ3knO1xuaW1wb3J0IHsgY2xvc2VzdCwgcXVlcnksIHNldFN0eWxlIH0gZnJvbSAnLi4vaW50ZXJuYWwvaGVscGVycyc7XG5pbXBvcnQgeyBEYXRvT3ZlcmxheSwgRGF0b1RlbXBsYXRlUG9ydGFsIH0gZnJvbSAnLi4vYW5ndWxhci9vdmVybGF5JztcbmltcG9ydCB7IEFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgX3Njcm9sbFRvT3B0aW9uIH0gZnJvbSAnLi4vb3B0aW9ucy9vcHRpb25zLXV0aWxzJztcbmltcG9ydCB7IERhdG9UcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdHJhbnNsYXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgbm9ybWFsaXplRGF0YSB9IGZyb20gJy4uL2ludGVybmFsL2RhdGEtbm9ybWFsaXphdGlvbic7XG5pbXBvcnQgeyBEYXRvQWNjb3JkaW9uQ29tcG9uZW50LCBEYXRvQWNjb3JkaW9uR3JvdXBDb21wb25lbnQgfSBmcm9tICcuLi9hY2NvcmRpb24vcHVibGljX2FwaSc7XG5pbXBvcnQgeyBEYXRvR3JvdXBDb21wb25lbnQgfSBmcm9tICcuLi9vcHRpb25zL2dyb3VwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMaXN0R3JvdXBDb21wb25lbnQgfSBmcm9tICcuLi9saXN0L2xpc3QudHlwZXMnO1xuaW1wb3J0IHsgdW50aWxEZXN0cm95ZWQgfSBmcm9tICduZ3gtdGFrZS11bnRpbC1kZXN0cm95JztcbmltcG9ydCB7IGlzQXJyb3dVcERvd24sIGlzRW50ZXIsIGlzRXNjYXBlIH0gZnJvbSAnLi4vcngvZXZlbnRzJztcbmltcG9ydCB7IGNvZXJjZUFycmF5IH0gZnJvbSAnQGRhdG9yYW1hL2FraXRhJztcbmltcG9ydCB7IGlzU3RyaW5nLCBzaXplIH0gZnJvbSAnLi4vdXRpbHMvcHVibGljX2FwaSc7XG5pbXBvcnQgeyB6SW5kZXhQbGVhc2UgfSBmcm9tICcuLi9pbnRlcm5hbC96LWluZGV4JztcbmltcG9ydCB7IGlzVGVzdEVudiB9IGZyb20gJy4uL2lzdGVzdC1lbnYnO1xuaW1wb3J0IHsgaXNNb2JpbGUgfSBmcm9tICcuLi91dGlscy91c2VyLWFnZW50JztcbmltcG9ydCB7IFBvcHBlck9wdGlvbnMgfSBmcm9tICcuLi9zZXJ2aWNlcy9wb3BwZXInO1xuaW1wb3J0IHsgc2V0RGltZW5zaW9ucyB9IGZyb20gJy4uL2ludGVybmFsL2N1c3RvbS1kaW1lbnNpb25zJztcbmltcG9ydCB7IERhdG9UcmlnZ2VyU2luZ2xlIH0gZnJvbSAnLi90cmlnZ2VyLXNpbmdsZS90cmlnZ2VyLXNpbmdsZS5jb21wb25lbnQnO1xuXG5jb25zdCB2YWx1ZUFjY2Vzc29yID0ge1xuICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGF0b1NlbGVjdENvbXBvbmVudCksXG4gIG11bHRpOiB0cnVlXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkYXRvLXNlbGVjdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxuICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiBmYWxzZSxcbiAgcHJvdmlkZXJzOiBbdmFsdWVBY2Nlc3NvciwgRGF0b092ZXJsYXldLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZXhwb3J0QXM6ICdkYXRvU2VsZWN0J1xufSlcbmV4cG9ydCBjbGFzcyBEYXRvU2VsZWN0Q29tcG9uZW50IGV4dGVuZHMgQmFzZUN1c3RvbUNvbnRyb2xcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEFmdGVyQ29udGVudEluaXQge1xuICBAVmlld0NoaWxkKCdkYXRvVHJpZ2dlclNpbmdsZScpXG4gIHByaXZhdGUgZGF0b1RyaWdnZXJTaW5nbGU6IERhdG9UcmlnZ2VyU2luZ2xlO1xuXG4gIC8qKiBUaGUgZHJvcGRvd24gY29udGFpbmVyIGVsZW1lbnQgd2hpY2ggaXMgdGhlIHBvcnRhbCAgKiovXG4gIEBWaWV3Q2hpbGQoJ2Ryb3Bkb3duJylcbiAgZHJvcGRvd246IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgLyoqIFRoZSBvdmVybGF5IG9yaWdpbiB3aGljaCBpcyBvbmUgb2YgZGF0by10cmlnZ2VycyAqKi9cbiAgQFZpZXdDaGlsZCgnb3ZlcmxheU9yaWdpbicpXG4gIG9yaWdpbjogRWxlbWVudFJlZjtcblxuICAvKiogUXVlcnlMaXN0IG9mIGRhdG9PcHRpb25zIGNoaWxkcmVuICovXG4gIEBDb250ZW50Q2hpbGRyZW4oRGF0b09wdGlvbkNvbXBvbmVudCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICBvcHRpb25zOiBRdWVyeUxpc3Q8RGF0b09wdGlvbkNvbXBvbmVudD47XG5cbiAgLyoqIFF1ZXJ5TGlzdCBvZiBkYXRvQWNjb3JkaW9uR3JvdXBzIGNoaWxkcmVuICovXG4gIEBDb250ZW50Q2hpbGRyZW4oZm9yd2FyZFJlZigoKSA9PiBEYXRvQWNjb3JkaW9uQ29tcG9uZW50KSwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICBhY2NvcmRpb246IFF1ZXJ5TGlzdDxEYXRvQWNjb3JkaW9uQ29tcG9uZW50PjtcblxuICAvKiogUXVlcnlMaXN0IG9mIGRhdG9Hcm91cHMgY2hpbGRyZW4gKi9cbiAgQENvbnRlbnRDaGlsZHJlbihEYXRvR3JvdXBDb21wb25lbnQpXG4gIGdyb3VwczogUXVlcnlMaXN0PERhdG9Hcm91cENvbXBvbmVudD47XG5cbiAgLyoqIEFsbG93aW5nIGN1c3RvbSB0ZW1wbGF0ZSBieSBwYXNzaW5nICpkYXRvQWN0aXZlIGRpcmVjdGl2ZSB3aGljaCBnZXRzIHRoZSBhY3RpdmUgYXMgY29udGV4dCAqL1xuICBAQ29udGVudENoaWxkKERhdG9TZWxlY3RBY3RpdmVEaXJlY3RpdmUpXG4gIGFjdGl2ZTogRGF0b1NlbGVjdEFjdGl2ZURpcmVjdGl2ZTtcblxuICAvKiogVGhlIGtleSB0aGF0IHN0b3JlcyB0aGUgb3B0aW9uIGlkICovXG4gIEBJbnB1dCgpXG4gIGlkS2V5ID0gJ2lkJztcblxuICAvKiogVGhlIGxvb2t1cCBrZXkgZm9yIHRoZSBsYWJlbCAqL1xuICBASW5wdXQoKVxuICBsYWJlbEtleSA9ICdsYWJlbCc7XG5cbiAgLyoqIEEgcGxhY2Vob2xkZXIgZm9yIHRoZSB0cmlnZ2VyICovXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJ2NvcmUuc2VsZWN0JztcblxuICAvKiogQSBwbGFjZWhvbGRlciBmb3IgdGhlIHNlYXJjaCAqL1xuICBASW5wdXQoKSBzZWFyY2hQbGFjZWhvbGRlciA9ICdjb3JlLnNlYXJjaCc7XG5cbiAgLyoqIEN1c3RvbSB0ZXh0IHdoZW4gd2UgZG9uJ3QgaGF2ZSByZXN1bHRzICovXG4gIEBJbnB1dCgpXG4gIHNldCBub0l0ZW1zTGFiZWwodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX25vSXRlbXNMYWJlbCA9IHRoaXMudHJhbnNsYXRlLnRyYW5zZm9ybSh2YWx1ZSk7XG4gIH1cblxuICAvKiogSWYgZGVmaW5lZCwgaW5kaWNhdGVzIGJ5IHdoaWNoIGtleSB0aGUgZGF0YSBzaG91bGQgYmUgbm9ybWFsaXplZCAqL1xuICBASW5wdXQoKVxuICBncm91cEJ5OiBzdHJpbmc7XG5cbiAgLyoqIEFkZC9yZW1vdmVzIHNlYXJjaCBpbnB1dCAqL1xuICBASW5wdXQoKVxuICBpc0NvbWJvID0gdHJ1ZTtcblxuICAvKiogV2hldGhlciBpdCdzIGEgZ3JvdXAgKi9cbiAgQElucHV0KClcbiAgaXNHcm91cCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEZWNpZGUgd2hldGhlciB0byBmaWx0ZXIgdGhlIHJlc3VsdHMgaW50ZXJuYWxseSBiYXNlZCBvbiBzZWFyY2ggcXVlcnkuXG4gICAqIFVzZWZ1bCBmb3IgYXN5bmMgZmlsdGVyaW5nLCB3aGVyZSB3ZSBzZWFyY2ggdGhyb3VnaCBtb3JlIGNvbXBsZXggZGF0YS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGludGVybmFsU2VhcmNoID0gdHJ1ZTtcblxuICAvKiogRGVib3VuY2UgdGltZSB0byBlbWl0IHNlYXJjaCBxdWVyaWVzICovXG4gIEBJbnB1dCgpXG4gIGRlYm91bmNlVGltZSA9IDMwMDtcblxuICAvKiogV2hldGhlciB0byBzaG93IGxvYWRpbmcgaW5kaWNhdG9yICovXG4gIEBJbnB1dCgpXG4gIGlzTG9hZGluZyA9IGZhbHNlO1xuXG4gIC8qKiBXaGV0aGVyIHRvIGFsbG93IHNlbGVjdCBhbGwgY2hlY2tib3ggKi9cbiAgQElucHV0KClcbiAgYWxsb3dTZWxlY3RBbGwgPSBmYWxzZTtcblxuICAvKiogV2hldGhlciB0byBhbGxvdyBzZWxlY3QgYWxsIGNoaXAuIGVtcHR5IG1lYW5zIGl0J3MgZGlzYWJsZWQgKi9cbiAgQElucHV0KClcbiAgc2VsZWN0QWxsQ2hpcFR4dCA9ICcnO1xuXG4gIC8qKiBUaGUgdHlwZSBvZiB0aGUgc2VsZWN0ICovXG4gIEBJbnB1dCgpXG4gIHR5cGU6IFNlbGVjdFR5cGUgPSBTZWxlY3RUeXBlLlNJTkdMRTtcblxuICAvKiogQ2xpZW50IHNlYXJjaCBzdHJhdGVneSAqL1xuICBASW5wdXQoKVxuICBzZWFyY2hTdHJhdGVneTogRGF0b1NlbGVjdFNlYXJjaFN0cmF0ZWd5ID0gZGVmYXVsdENsaWVudFNlYXJjaFN0cmF0ZWd5O1xuXG4gIC8qKiBUaGUgZGVmYXVsdCBwb3NpdGlvbiBvZiB0aGUgZHJvcGRvd24gKi9cbiAgQElucHV0KClcbiAgcGxhY2VtZW50OiBQb3BwZXJPcHRpb25zWydwbGFjZW1lbnQnXSA9ICdib3R0b20tc3RhcnQnO1xuXG4gIEBJbnB1dCgpXG4gIGluZmluaXRlU2Nyb2xsTG9hZGluZyA9IGZhbHNlO1xuXG4gIC8qKiBMaW1pdCB0aGUgbnVtYmVyIG9mIHJlc3VsdHMgc2hvd24gKi9cbiAgQElucHV0KClcbiAgbGltaXRUbyA9IGRlZmF1bHRPcHRpb25zRGlzcGxheUxpbWl0O1xuXG4gIEBJbnB1dCgnbGltaXRTZWxlY3RlZFRvJylcbiAgc2V0IGxpbWl0U2VsZWN0ZWQobGltaXRTZWxlY3RlZFRvOiBudW1iZXIpIHtcbiAgICB0aGlzLmxpbWl0U2VsZWN0ZWRUbyA9IGxpbWl0U2VsZWN0ZWRUbztcbiAgICBpZiAodGhpcy5vcHRpb25zKSB7XG4gICAgICB0aGlzLnVwZGF0ZURpc2FibGVkU3RhdGUoKTtcbiAgICB9XG4gIH1cblxuICAvKiogQWxsb3cgc29ydGluZyBvZiBzZWxlY3RlZCBvcHRpb25zIGluIG11bHRpIG1vZGUgKi9cbiAgQElucHV0KClcbiAgaXNTb3J0YWJsZSA9IGZhbHNlO1xuXG4gIC8qKiBFbGVtZW50IHRvIGFwcGVuZCB0aGUgb3B0aW9ucyBvdmVybGF5IHRvICovXG4gIEBJbnB1dCgpXG4gIGFwcGVuZFRvOiBIVE1MRWxlbWVudCB8IHN0cmluZztcblxuICAvKiogVGhlIG9wdGlvbnMgdG8gZGlzcGxheSBpbiB0aGUgZHJvcGRvd24gKi9cbiAgQElucHV0KClcbiAgc2V0IGRhdGFTZXQoZGF0YTogYW55W10pIHtcbiAgICBpZiAoIXRoaXMuaW5pdGlhbFJ1bikge1xuICAgICAgdGhpcy5fZGF0YSA9IG5vcm1hbGl6ZURhdGEoZGF0YSwgdGhpcy5sYWJlbEtleSwgdGhpcy5ncm91cEJ5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLyoqIGRhdGEgbm9ybWFsaXphdGlvbiwgaWYgcmVxdWlyZWQsIHdpbGwgYmUgaGFuZGxlZCBieSBuZ09uSW5pdCBpbiB0aGUgaW5pdGlhbCBydW4gKi9cbiAgICAgIHRoaXMuX2RhdGEgPSBkYXRhO1xuICAgIH1cblxuICAgIC8qKiBJZiBpdCdzIGFzeW5jIHVwZGF0ZXMsIGNyZWF0ZSBtaWNybyB0YXNrIGluIG9yZGVyIHRvIHJlLXN1YnNjcmliZSB0byBjbGlja3MgKi9cbiAgICBpZiAodGhpcy5fZGF0YUlzRGlydHkpIHtcbiAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLnN1YnNjcmliZVRvT3B0aW9uQ2xpY2sodGhpcy5vcHRpb25zKTtcbiAgICAgICAgdGhpcy5tYXJrQXNBY3RpdmUodGhpcy5fbW9kZWwpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5fZGF0YUlzRGlydHkgPSB0cnVlO1xuICB9XG5cbiAgLyoqIFNlYXJjaCBncm91cHMgYXMgd2VsbCBhcyBvcHRpb25zICovXG4gIEBJbnB1dCgpXG4gIHNlYXJjaEdyb3VwTGFiZWxzID0gdHJ1ZTtcblxuICAvKiogQWRkIGN1c3RvbSBjbGFzcyB0byB0aGUgc2VsZWN0IGRyb3BEb3duICovXG4gIEBJbnB1dCgpXG4gIGRhdG9TZWxlY3RDbGFzczogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIGxvYWRpbmdUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAvKiogc2hvdyBlbXB0eSByZXN1bHQgdGV4dCAqL1xuICBASW5wdXQoKVxuICBzaG93RW1wdHlSZXN1bHRzVGV4dCA9IHRydWU7XG5cbiAgLyoqXG4gICAqIGtlZXAgZm9jdXMgaW4gaW5wdXQgYWZ0ZXIgc2VsZWN0aW5nIG9wdGlvblxuICAgKi9cbiAgQElucHV0KClcbiAga2VlcEZvY3VzID0gZmFsc2U7XG5cbiAgLyoqIEVtaXQgc2VhcmNoIHZhbHVlIHdoZW4gaW50ZXJuYWwgc2VhcmNoIGlzIGZhbHNlICovXG4gIEBPdXRwdXQoKVxuICBzZWFyY2ggPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAvKiogRW1pdCB3aGVuIFt3aXRoQWN0aW9uc10gaXMgdHJ1ZSBhbmQgdGhlIHVzZXIgY2xpY2tzIHNhdmUgKi9cbiAgQE91dHB1dCgpXG4gIHNhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQE91dHB1dCgpXG4gIGZldGNoID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIEBPdXRwdXQoKVxuICBibHVyID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIGxpbWl0U2VsZWN0ZWRUbzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBHZXR0ZXJzIGFuZCBTZXR0ZXJzXG4gICAqL1xuXG4gIGdldCBjb250YWluc0dyb3VwcygpIHtcbiAgICByZXR1cm4gdGhpcy5ncm91cHMgJiYgdGhpcy5ncm91cHMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGdldCBkYXRhKCkge1xuICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICB9XG5cbiAgZ2V0IG9wZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuX29wZW47XG4gIH1cblxuICBzZXQgb3Blbih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX29wZW4gPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBoYXNSZXN1bHRzKCkge1xuICAgIHJldHVybiB0aGlzLl9oYXNSZXN1bHRzO1xuICB9XG5cbiAgc2V0IGhhc1Jlc3VsdHModmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9oYXNSZXN1bHRzID0gdmFsdWU7XG4gIH1cblxuICBnZXQgaGFzVmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX21vZGVsLmxlbmd0aDtcbiAgfVxuXG4gIGdldCBpc1NpbmdsZSgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlID09PSBTZWxlY3RUeXBlLlNJTkdMRTtcbiAgfVxuXG4gIGdldCBpc011bHRpKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGUgPT09IFNlbGVjdFR5cGUuTVVMVEk7XG4gIH1cblxuICBnZXQgX3Nob3dFbXB0eVJlc3VsdHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hvd0VtcHR5UmVzdWx0c1RleHQgJiYgdGhpcy5fZGF0YSAmJiAoIXRoaXMuaGFzUmVzdWx0cyB8fCAhdGhpcy5fZGF0YS5sZW5ndGgpICYmICF0aGlzLmlzR3JvdXA7XG4gIH1cblxuICBnZXQgX2NvdW50KCkge1xuICAgIGNvbnN0IHRvdGFsID0gdGhpcy5nZXRWaXNpYmxlT3B0aW9ucyhmYWxzZSkubGVuZ3RoO1xuICAgIGNvbnN0IGFjdGl2ZXMgPSB0aGlzLl9tb2RlbC5sZW5ndGg7XG4gICAgcmV0dXJuIGAoJHthY3RpdmVzfS8ke3RvdGFsfSlgO1xuICB9XG5cbiAgLyoqIFdoZXRoZXIgYWxsIHRoZSBvcHRpb25zIGFyZSBjaGVja2VkICovXG4gIGdldCBfaXNBbGxDaGVja2VkKCkge1xuICAgIHJldHVybiB0aGlzLmdldFZpc2libGVPcHRpb25zKCkuZXZlcnkob3B0aW9uID0+IHRoaXMuX21vZGVsLmluZGV4T2Yob3B0aW9uKSA+IC0xKTtcbiAgfVxuXG4gIGdldCBzaG93U2VsZWN0QWxsQ2hpcCgpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxlbmd0aCAmJiB0aGlzLl9tb2RlbC5sZW5ndGggPT09IHRoaXMub3B0aW9ucy5sZW5ndGg7XG4gIH1cblxuICAvKiogV2hldGhlciBzb21lIHRoZSBvcHRpb25zIGFyZSBjaGVja2VkICovXG4gIGdldCBfaXNJbmRldGVybWluYXRlbHlDaGVja2VkKCkge1xuICAgIGxldCBzb21lQ2hlY2tlZCxcbiAgICAgIHNvbWVOb3RDaGVja2VkID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCB2aXNpYmxlT3B0aW9uIG9mIHRoaXMuZ2V0VmlzaWJsZU9wdGlvbnMoKSkge1xuICAgICAgaWYgKHRoaXMuX21vZGVsLmluZGV4T2YodmlzaWJsZU9wdGlvbikgPiAtMSkge1xuICAgICAgICBzb21lQ2hlY2tlZCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzb21lTm90Q2hlY2tlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoc29tZUNoZWNrZWQgJiYgc29tZU5vdENoZWNrZWQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKiBGb3JtQ29udHJvbCB3aGljaCBsaXN0ZW5zIGZvciBzZWFyY2ggdmFsdWUgY2hhbmdlcyAqL1xuICBzZWFyY2hDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XG5cbiAgLyoqIEV4cG9zZSB0aGUgc2VhcmNoIHRlcm0gc28gaXQgY2FuIGJlIHVzZWQgd2l0aCB0aGUgaGlnaGxpZ2h0IGRpcmVjdGl2ZSAqL1xuICBzZWFyY2hUZXJtID0gJyc7XG5cbiAgLyoqXG4gICAqIFByaXZhdGUgUHJvcGVydGllc1xuICAgKi9cbiAgX25vSXRlbXNMYWJlbCA9IHRoaXMudHJhbnNsYXRlLnRyYW5zZm9ybSgnY29yZS5uby1pdGVtcycpO1xuXG4gIC8qKiBTdG9yZSB0aGUgaW5pdGlhbCBkYXRhICovXG4gIF9kYXRhID0gW107XG5cbiAgLyoqIEluZGljYXRlcyB3aGV0aGVyIHdlIGFscmVhZHkgaW5pdGlhbGl6ZWQgdGhlIGRhdGEsXG4gICAqICBUaGlzIGlzIG9wdGltaXphdGlvbiBmb3Igbm9uIGFzeW5jIGNhbGxzLlxuICAgKiAqL1xuICBfZGF0YUlzRGlydHkgPSBmYWxzZTtcblxuICAvKiogVHJpZ2dlcnMgdGhlIGZvY3VzIG9uIHRoZSBpbnB1dCAqL1xuICBfZm9jdXMgPSBmYWxzZTtcblxuICAvKiogU3RvcmUgdGhlIGFjdGl2ZSBvcHRpb25zICovXG4gIF9tb2RlbCA9IFtdO1xuXG4gIC8qKiBFbmFibGUvZGlzYWJsZSB0aGUgc2VsZWN0LXRyaWdnZXIgKi9cbiAgX2Rpc2FibGVkO1xuXG4gIC8qKiBXaGV0ZXIgdGhlIGRyb3Bkb3duIGlzIG9wZW4gKi9cbiAgX29wZW4gPSBmYWxzZTtcblxuICAvKiogV2hldGhlciB3ZSBoYXZlIHNlYXJjaCByZXN1bHRzICovXG4gIF9oYXNSZXN1bHRzID0gdHJ1ZTtcblxuICAvKiogSW5kaWNhdGlvbiBpZiB3ZSBuZWVkIHRvIHNldCB0aGUgaW5pdGlhbCBjb250cm9sIHZhbHVlIGFzIGFjdGl2ZXMgKi9cbiAgX2luaXRpYWxPcGVuID0gdHJ1ZTtcblxuICAvKiogV2hldGhlciBnZW5lcmF0ZSBjYW5jZWwvc2F2ZSBmb290ZXIgKi9cbiAgX3dpdGhBY3Rpb25zID0gZmFsc2U7XG5cbiAgX3dpdGhJbmZpbml0ZVNjcm9sbCA9IGZhbHNlO1xuXG4gIC8qKiBOb3RpZnkgdGhlIG11bHRpIHRyaWdnZXIgd2hlbiBjbGljayBvdXRzaWRlIHRvIHJlbW92ZSB0aGUgZm9jdXMgICovXG4gIF9jbGlja091dHNpZGUgPSBmYWxzZTtcblxuICAvKiogRHJvcGRvd24gc2l6ZSBjbGFzcyAqL1xuICBfZHJvcGRvd25DbGFzczogc3RyaW5nW107XG5cbiAgLyoqIHRydWUgdW50aWwgbmdPbkluaXQgKi9cbiAgcHJpdmF0ZSBpbml0aWFsUnVuID0gdHJ1ZTtcblxuICAvKiogU2VhcmNoIGNvbnRyb2wgc3Vic2NyaXB0aW9uICovXG4gIHByaXZhdGUgc2VhcmNoU3Vic2NyaXB0aW9uO1xuXG4gIC8qKiBDbGlja3Mgb3B0aW9ucyBzdWJzY3JpcHRpb24gKi9cbiAgcHJpdmF0ZSBjbGlja3NTdWJzY3JpcHRpb247XG5cbiAgcHJpdmF0ZSBrZXlNYW5hZ2VyOiBBY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlcjxEYXRvT3B0aW9uQ29tcG9uZW50PjtcblxuICBwcml2YXRlIGluZmluaXRlU3Vic2NyaXB0aW9uO1xuXG4gIHByaXZhdGUgc2Nyb2xsRXZlbnRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IERhdG9UcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgaG9zdDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgcHJpdmF0ZSBkYXRvT3ZlcmxheTogRGF0b092ZXJsYXksXG4gICAgQEF0dHJpYnV0ZSgnbmFrZWQnKSBwdWJsaWMgX25ha2VkLFxuICAgIEBBdHRyaWJ1dGUoJ2RhdG9TaXplJykgcHVibGljIHNpemUsXG4gICAgQEF0dHJpYnV0ZSgnd2lkdGgnKSBwdWJsaWMgd2lkdGg6IHN0cmluZ1xuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuc2l6ZSA9IHNpemUgfHwgJ21kJztcbiAgICB0aGlzLl9kcm9wZG93bkNsYXNzID0gW2BkYXRvLXNlbGVjdC0ke3RoaXMuc2l6ZX1gXTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLmRhdG9TZWxlY3RDbGFzcykge1xuICAgICAgdGhpcy5fZHJvcGRvd25DbGFzcy5wdXNoKHRoaXMuZGF0b1NlbGVjdENsYXNzKTtcbiAgICB9XG5cbiAgICB0aGlzLl93aXRoQWN0aW9ucyA9IHRoaXMuc2F2ZS5vYnNlcnZlcnMubGVuZ3RoID09PSAxO1xuICAgIHRoaXMuX3dpdGhJbmZpbml0ZVNjcm9sbCA9IHRoaXMuZmV0Y2gub2JzZXJ2ZXJzLmxlbmd0aCA9PT0gMTtcbiAgICB0aGlzLmxpc3RlblRvU2VhcmNoKCk7XG4gICAgdGhpcy5fZGF0YSA9IG5vcm1hbGl6ZURhdGEodGhpcy5fZGF0YSwgdGhpcy5sYWJlbEtleSwgdGhpcy5ncm91cEJ5KTtcbiAgICB0aGlzLmluaXRpYWxSdW4gPSBmYWxzZTtcbiAgICAvLyBoZWlnaHQgaXMgYmVpbmcgY29udHJvbGxlZCBieSBzaXplIHByb3BlcnR5XG4gICAgc2V0RGltZW5zaW9ucyh0aGlzLndpZHRoLCBudWxsLCB0aGlzLmhvc3QubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdmb2N1c291dCcpXG4gIG1hcmtUb3VjaGVkKCkge1xuICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gdGhpcy5vblRvdWNoZWQoKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2UgdGhlIGRyb3Bkb3duXG4gICAqL1xuICBjbG9zZSgpIHtcbiAgICB0aGlzLmtleU1hbmFnZXIuc2V0QWN0aXZlSXRlbSgtMSk7XG4gICAgdGhpcy5zZWFyY2hDb250cm9sLnBhdGNoVmFsdWUoJycpO1xuICAgIHRoaXMuZGF0b092ZXJsYXkuZGV0YWNoKCk7XG4gICAgdGhpcy50b2dnbGUoKTtcbiAgICB0aGlzLl9mb2N1cyA9IGZhbHNlO1xuICAgIHRoaXMuX2NsaWNrT3V0c2lkZSA9IHRydWU7XG4gICAgdGhpcy5pbmZpbml0ZVN1YnNjcmlwdGlvbiAmJiB0aGlzLmluZmluaXRlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5zY3JvbGxFdmVudFN1YnNjcmlwdGlvbiAmJiB0aGlzLnNjcm9sbEV2ZW50U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5ibHVyLmVtaXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGUgdGhlIGRyb3Bkb3duIHZpc2liaWxpdHlcbiAgICovXG4gIHRvZ2dsZSgpIHtcbiAgICB0aGlzLm9wZW4gPSAhdGhpcy5vcGVuO1xuICAgIGlmICh0aGlzLm9wZW4gJiYgKHRoaXMuaXNNdWx0aSB8fCB0aGlzLmlzQ29tYm8pKSB7XG4gICAgICB0aGlzLl9mb2N1cyA9IHRydWU7XG4gICAgICB0aGlzLl9jbGlja091dHNpZGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuX2Rpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHdyaXRlVmFsdWUoYWN0aXZlT3B0aW9uczogYW55IHwgYW55W10pOiB2b2lkIHtcbiAgICB0aGlzLl9tb2RlbCA9IGFjdGl2ZU9wdGlvbnMgPyBjb2VyY2VBcnJheShhY3RpdmVPcHRpb25zKSA6IFtdO1xuICAgIGlmICh0aGlzLm9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IG92ZXJUaGVMaW1pdCA9IHRoaXMubGltaXRTZWxlY3RlZFRvICYmIHRoaXMuaXNNdWx0aSAmJiB0aGlzLl9tb2RlbC5sZW5ndGggPj0gdGhpcy5saW1pdFNlbGVjdGVkVG87XG4gICAgICB0aGlzLm1hcmtBc0FjdGl2ZSh0aGlzLl9tb2RlbCwgeyBkZXNlbGVjdEFsbDogdHJ1ZSB9KTtcbiAgICAgIG92ZXJUaGVMaW1pdCAmJiB0aGlzLnVwZGF0ZURpc2FibGVkU3RhdGUoKTtcbiAgICB9XG4gICAgLyoqIEZvciBsYXRlciB1cGRhdGVzICovXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogT3BlbiB0aGUgb3ZlcmxheVxuICAgKi9cbiAgb3BlbkRyb3Bkb3duKGV2ZW50Pykge1xuICAgIC8qKiBDbG9zZSB0aGUgZHJvcGRvd24gd2hlbiB3ZSBjbGljayBvbiB0aGUgdHJpZ2dlciBhbmQgd2UgZG9uJ3QgaGF2ZSBzZWFyY2ggb3IgbXVsdGlwbGUgKi9cbiAgICBpZiAodGhpcy5vcGVuICYmICF0aGlzLmlzQ29tYm8gJiYgdGhpcy5pc1NpbmdsZSkge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8qKiBEb24ndCBjbG9zZSB0aGUgZHJvcGRvd24gaWYgd2UgY2xpY2sgb24gdGhlIGlucHV0IGFuZCBpdCdzIG9wZW4gKi9cbiAgICBpZiAodGhpcy5vcGVuICYmICh0aGlzLmlzTXVsdGkgfHwgdGhpcy5pc0NvbWJvKSkge1xuICAgICAgaWYgKGV2ZW50ICYmIGV2ZW50LnRhcmdldC5ub2RlTmFtZSAhPT0gJ0lOUFVUJykge1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZGF0b092ZXJsYXkuY3JlYXRlZCkge1xuICAgICAgdGhpcy5jcmVhdGVPdmVybGF5KCk7XG4gICAgfVxuXG4gICAgdGhpcy5kYXRvT3ZlcmxheS5iYWNrRHJvcENsaWNrJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLl9jbGlja091dHNpZGUgPSB0cnVlO1xuICAgICAgdGhpcy5vcGVuICYmIHRoaXMuY2xvc2UoKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZGF0b092ZXJsYXkuYXR0YWNoKHsgcGxhY2VtZW50OiB0aGlzLnBsYWNlbWVudCB9LCB0aGlzLl9kcm9wZG93bkNsYXNzKTtcblxuICAgIHRoaXMudG9nZ2xlKCk7XG5cbiAgICBpZiAodGhpcy5oYXNWYWx1ZSkge1xuICAgICAgLyoqXG4gICAgICAgKiBXaGVuIHdlIGZpcnN0IG9wZW4gdGhlIGRyb3Bkb3duIHdlIG5lZWQgdG8gbWFyayB0aGVcbiAgICAgICAqIEZvcm1Db250cm9sIHZhbHVlcyBhcyBhY3RpdmVzXG4gICAgICAgKi9cbiAgICAgIGlmICh0aGlzLl9pbml0aWFsT3Blbikge1xuICAgICAgICB0aGlzLm1hcmtBc0FjdGl2ZSh0aGlzLl9tb2RlbCk7XG4gICAgICAgIHRoaXMuX2luaXRpYWxPcGVuID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmxpbWl0U2VsZWN0ZWRUbyAmJiB0aGlzLl9tb2RlbC5sZW5ndGggPT09IHRoaXMubGltaXRTZWxlY3RlZFRvKSB7XG4gICAgICAgIHRoaXMudXBkYXRlRGlzYWJsZWRTdGF0ZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl93aXRoSW5maW5pdGVTY3JvbGwpIHtcbiAgICAgIHRoaXMuYWN0aXZhdGVJbmZpbml0ZVNjcm9sbCgpO1xuICAgIH1cblxuICAgIHNldFN0eWxlKHF1ZXJ5KCcuZGF0by1vdmVybGF5JyksICd6SW5kZXgnLCB6SW5kZXhQbGVhc2UoKSk7XG4gICAgY29uc3QgZHJvcGRvd25Db250YWluZXIgPSBxdWVyeSgnLmRhdG8tc2VsZWN0X19kcm9wZG93bi1jb250YWluZXInKTtcbiAgICBzZXRTdHlsZShkcm9wZG93bkNvbnRhaW5lciwgJ3dpZHRoJywgYCR7dGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGh9cHhgKTtcblxuICAgIC8qKiBQcmV2ZW50IHNjcm9sbCB3aGlsZSB0aGUgZHJvcGRvd24gaXMgb3BlbiAqL1xuICAgIGlmIChpc1Rlc3RFbnYoKSkge1xuICAgICAgdGhpcy5zY3JvbGxFdmVudFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZXZlbnROYW1lID0gaXNNb2JpbGUoKSA/ICd0b3VjaG1vdmUnIDogJ3Njcm9sbCc7XG4gICAgICBsZXQgc2Nyb2xsRXZlbnQgPSBmcm9tRXZlbnQod2luZG93LCBldmVudE5hbWUpO1xuICAgICAgaWYgKGlzTW9iaWxlKCkpIHtcbiAgICAgICAgc2Nyb2xsRXZlbnQgPSBzY3JvbGxFdmVudC5waXBlKGZpbHRlcihldmVudCA9PiAhZHJvcGRvd25Db250YWluZXIuY29udGFpbnMoZXZlbnQudGFyZ2V0IGFzIE5vZGUpKSk7XG4gICAgICB9XG4gICAgICB0aGlzLnNjcm9sbEV2ZW50U3Vic2NyaXB0aW9uID0gc2Nyb2xsRXZlbnQucGlwZSh1bnRpbERlc3Ryb3llZCh0aGlzKSkuc3Vic2NyaWJlKGUgPT4gdGhpcy5jbG9zZSgpKTtcbiAgICB9XG5cbiAgICB0aGlzLmhhbmRsZVBlcmZlY3RTY3JvbGxCYXIoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmliZVRvT3B0aW9uQ2xpY2sodGhpcy5vcHRpb25zKTtcbiAgICB0aGlzLmtleU1hbmFnZXIgPSBuZXcgQWN0aXZlRGVzY2VuZGFudEtleU1hbmFnZXIodGhpcy5vcHRpb25zKS53aXRoV3JhcCgpO1xuICB9XG5cbiAgY2hlY2tBbGwoY2hlY2s6IGJvb2xlYW4pIHtcbiAgICBsZXQgY2hlY2tlZCA9IGNoZWNrO1xuICAgIGlmICh0aGlzLl9pc0luZGV0ZXJtaW5hdGVseUNoZWNrZWQpIHtcbiAgICAgIGNoZWNrZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBkYXRvT3B0aW9uIG9mIHRoaXMub3B0aW9ucy50b0FycmF5KCkpIHtcbiAgICAgIGlmICghZGF0b09wdGlvbi5kaXNhYmxlZCkge1xuICAgICAgICBkYXRvT3B0aW9uLmFjdGl2ZSA9IGNoZWNrZWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgdmlzaWJsZU9wdGlvbnMgPSB0aGlzLmdldFZpc2libGVPcHRpb25zKCk7XG4gICAgY29uc3QgaXNBbGxWaXNpYmxlID0gdmlzaWJsZU9wdGlvbnMubGVuZ3RoID09PSB0aGlzLm9wdGlvbnMubGVuZ3RoO1xuXG4gICAgaWYgKGlzQWxsVmlzaWJsZSkge1xuICAgICAgdGhpcy5fbW9kZWwgPSBjaGVja2VkID8gdmlzaWJsZU9wdGlvbnMgOiBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGNoZWNrZWQpIHtcbiAgICAgICAgY29uc3QgdGVtcCA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiB2aXNpYmxlT3B0aW9ucykge1xuICAgICAgICAgIGlmICh0aGlzLl9tb2RlbC5pbmRleE9mKG9wdGlvbikgPT09IC0xKSB7XG4gICAgICAgICAgICB0ZW1wLnB1c2gob3B0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbW9kZWwgPSBbLi4udGhpcy5fbW9kZWwsIC4uLnRlbXBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fbW9kZWwgPSB0aGlzLl9tb2RlbC5maWx0ZXIob3B0aW9uID0+IHZpc2libGVPcHRpb25zLmluZGV4T2Yob3B0aW9uKSA9PT0gLTEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMub25DaGFuZ2UodGhpcy5fbW9kZWwpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIHRoaXMuYXN5bmNVcGRhdGVEcm9wZG93blBvc2l0aW9uKCk7XG4gIH1cblxuICByZW9yZGVyT3B0aW9ucyhuZXdPcmRlcjogYW55W10pIHtcbiAgICB0aGlzLl9tb2RlbCA9IG5ld09yZGVyO1xuICAgIHRoaXMub25DaGFuZ2UodGhpcy5fbW9kZWwpO1xuICB9XG5cbiAgcmVtb3ZlT3B0aW9uKG9wdGlvbikge1xuICAgIGNvbnN0IHVwZGF0ZURpc2FibGVkID0gdGhpcy5saW1pdFNlbGVjdGVkVG8gJiYgdGhpcy5fbW9kZWwubGVuZ3RoID09PSB0aGlzLmxpbWl0U2VsZWN0ZWRUbztcbiAgICB0aGlzLl9tb2RlbCA9IHRoaXMuX21vZGVsLmZpbHRlcihjdXJyZW50ID0+IGN1cnJlbnRbdGhpcy5pZEtleV0gIT09IG9wdGlvblt0aGlzLmlkS2V5XSk7XG4gICAgY29uc3Qgb3B0aW9uVG9SZW1vdmUgPSB0aGlzLm9wdGlvbnMuZmluZChcbiAgICAgIGRhdG9PcHRpb24gPT4gZGF0b09wdGlvbi5vcHRpb24gJiYgZGF0b09wdGlvbi5vcHRpb25bdGhpcy5pZEtleV0gPT09IG9wdGlvblt0aGlzLmlkS2V5XVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiBUbyBwcmV2ZW50IGNhc2VzIHdoZW4gdGhlIG9wdGlvbnMgYXJlIGxpbWl0ZWQgYW5kIGRvZXNudCBpbmNsdWRlIHRoZSBhY3RpdmUgb3B0aW9uLFxuICAgICAqIHRoYXQgY2FuIGJlIHJlYWNoZWQgb25seSBieSBzZXJ2ZXIgc2VhcmNoLlxuICAgICAqL1xuICAgIGlmIChvcHRpb25Ub1JlbW92ZSkge1xuICAgICAgb3B0aW9uVG9SZW1vdmUuYWN0aXZlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdXBkYXRlRGlzYWJsZWQgJiYgdGhpcy51cGRhdGVEaXNhYmxlZFN0YXRlKCk7XG5cbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuX21vZGVsKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB0aGlzLmFzeW5jVXBkYXRlRHJvcGRvd25Qb3NpdGlvbigpO1xuICB9XG5cbiAgcHJldmVudEJvZHlTY3JvbGwoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoaXNBcnJvd1VwRG93bihldmVudCkpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBvdmVybGF5IHRvIGRpc3BsYXkgdGhlIHNlbGVjdCBvcHRpb25zXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZU92ZXJsYXkoKSB7XG4gICAgY29uc3QgdGVtcGxhdGVQb3J0YWwgPSBuZXcgRGF0b1RlbXBsYXRlUG9ydGFsKHRoaXMuZHJvcGRvd24pO1xuICAgIGxldCBhcHBlbmRUb0VsZW1lbnQ7XG4gICAgaWYgKGlzU3RyaW5nKHRoaXMuYXBwZW5kVG8pKSB7XG4gICAgICBhcHBlbmRUb0VsZW1lbnQgPSBjbG9zZXN0KHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LCB0aGlzLmFwcGVuZFRvIGFzIHN0cmluZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFwcGVuZFRvRWxlbWVudCA9IHRoaXMuYXBwZW5kVG87XG4gICAgfVxuXG4gICAgdGhpcy5kYXRvT3ZlcmxheS5jcmVhdGUodGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQsIHRlbXBsYXRlUG9ydGFsLCBhcHBlbmRUb0VsZW1lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBvcHBlciBkb2Vzbid0IHN1cHBvcnQgcGVyZmVjdC1zY3JvbGwtYmFyLCBzbyB3ZSBuZWVkIHRvIGRvIGl0IG1hbnVhbGx5XG4gICAqL1xuICBwcml2YXRlIGhhbmRsZVBlcmZlY3RTY3JvbGxCYXIoKSB7XG4gICAgY29uc3QgcGVyZmVjdFNjcm9sbEJhclBhcmVudCA9IGNsb3Nlc3QodGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQsICcucHMnKTtcbiAgICBpZiAocGVyZmVjdFNjcm9sbEJhclBhcmVudCkge1xuICAgICAgZnJvbUV2ZW50KHBlcmZlY3RTY3JvbGxCYXJQYXJlbnQsICdzY3JvbGwnKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0aHJvdHRsZVRpbWUoMTApLFxuICAgICAgICAgIHVudGlsRGVzdHJveWVkKHRoaXMpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5kYXRvT3ZlcmxheS5zY2hlZHVsZVVwZGF0ZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFZpc2libGVPcHRpb25zKGdldFJhd09wdGlvbnMgPSB0cnVlKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucy5maWx0ZXIoZGF0b09wdGlvbiA9PiAhZGF0b09wdGlvbi5kaXNhYmxlZCk7XG4gICAgaWYgKGdldFJhd09wdGlvbnMpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLm1hcChkYXRvT3B0aW9uID0+IGRhdG9PcHRpb24ub3B0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogTWFyayB0aGUgaW5pdGlhbCBjb250cm9sIHZhbHVlIGFzIGFjdGl2ZVxuICAgKi9cbiAgcHJpdmF0ZSBtYXJrQXNBY3RpdmUobW9kZWw6IGFueVtdLCBvcHRpb25zOiB7IGRlc2VsZWN0QWxsOiBib29sZWFuIH0gPSB7IGRlc2VsZWN0QWxsOiBmYWxzZSB9KSB7XG4gICAgY29uc3QgYXNBcnJheSA9IHRoaXMub3B0aW9ucy50b0FycmF5KCk7XG4gICAgaWYgKG9wdGlvbnMuZGVzZWxlY3RBbGwpIHtcbiAgICAgIHRoaXMucmVzZXRBbGwoKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBvcHRpb24gb2YgbW9kZWwpIHtcbiAgICAgIGlmICghb3B0aW9uKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgbWF0Y2ggPSBhc0FycmF5LmZpbmQoY3VycmVudCA9PiBjdXJyZW50Lm9wdGlvbiAmJiBjdXJyZW50Lm9wdGlvblt0aGlzLmlkS2V5XSA9PT0gb3B0aW9uW3RoaXMuaWRLZXldKTtcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBtYXRjaC5hY3RpdmUgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93IGFsbCBvcHRpb25zXG4gICAqL1xuICBwcml2YXRlIHNob3dBbGwoKSB7XG4gICAgY29uc3QgaXNBY2NvcmRpb24gPSB0aGlzLmlzQWNjb3JkaW9uR3JvdXAoKTtcbiAgICBjb25zdCBncm91cENvbXBvbmVudHM6IExpc3RHcm91cENvbXBvbmVudFtdID0gdGhpcy5nZXRHcm91cENvbXBvbmVudHNBcnJheSgpO1xuXG4gICAgZm9yIChjb25zdCBncm91cENvbXBvbmVudCBvZiBncm91cENvbXBvbmVudHMpIHtcbiAgICAgIGdyb3VwQ29tcG9uZW50Ll9oaWRkZW4gPSBmYWxzZTtcblxuICAgICAgLyogSWYgdGhpcyBhY2NvcmRpb24gZ3JvdXAgaGFzIGJlZW4gZXhwZW5kZWQgYnkgdGhlIHNlYXJjaCBmdW5jdGlvbixcbiAgICAgICAgIHRoZW4gY29sbGFwc2UgaXQgdG8gdGhlIG9yaWdpbmFsIHN0YXRlXG4gICAgICAqL1xuICAgICAgaWYgKGlzQWNjb3JkaW9uKSB7XG4gICAgICAgIGNvbnN0IGFueUdyb3VwID0gZ3JvdXBDb21wb25lbnQgYXMgYW55O1xuXG4gICAgICAgIGlmIChhbnlHcm91cC5fX2V4cGVuZGVkKSB7XG4gICAgICAgICAgYW55R3JvdXAuX19leHBlbmRlZCA9IGZhbHNlO1xuICAgICAgICAgIGNvbnN0IGFjY29yZGlvbkdyb3VwID0gYW55R3JvdXAgYXMgRGF0b0FjY29yZGlvbkdyb3VwQ29tcG9uZW50O1xuICAgICAgICAgIGFjY29yZGlvbkdyb3VwLmNvbnRlbnQuZGlzYWJsZUFuaW1hdGlvbiA9IGZhbHNlO1xuICAgICAgICAgIGFjY29yZGlvbkdyb3VwLmV4cGFuZChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGRhdG9PcHRpb24gb2YgdGhpcy5vcHRpb25zLnRvQXJyYXkoKSkge1xuICAgICAgZGF0b09wdGlvbi5oaWRlQW5kRGlzYWJsZWQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2ggZm9yIG9wdGlvbnMgYW5kIHJldHVybnMgaWYgd2UgaGF2ZSByZXN1bHRcbiAgICovXG4gIHByaXZhdGUgc2VhcmNoT3B0aW9ucyh2YWx1ZTogc3RyaW5nKSB7XG4gICAgbGV0IGhhc1Jlc3VsdCA9IGZhbHNlO1xuICAgIGNvbnN0IGdyb3VwQ29tcG9uZW50c0FycmF5OiBMaXN0R3JvdXBDb21wb25lbnRbXSA9IHRoaXMuZ2V0R3JvdXBDb21wb25lbnRzQXJyYXkoKTtcbiAgICBjb25zdCBoYXNHcm91cHMgPSBncm91cENvbXBvbmVudHNBcnJheS5sZW5ndGg7XG5cbiAgICBpZiAoaGFzR3JvdXBzKSB7XG4gICAgICBoYXNSZXN1bHQgPSB0aGlzLnNlYXJjaEluR3JvdXBzKGdyb3VwQ29tcG9uZW50c0FycmF5LCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhhc1Jlc3VsdCA9IHRoaXMuc2VhcmNoSW5PcHRpb25zKHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaGFzUmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaCBmb3IgbWF0Y2hpbmcgZ3JvdXBzIGFuZCBjaGlsZHJlbi5cbiAgICovXG4gIHByaXZhdGUgc2VhcmNoSW5Hcm91cHMoZ3JvdXBDb21wb25lbnRzQXJyYXk6IExpc3RHcm91cENvbXBvbmVudFtdLCB2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaXNBY2NvcmRpb24gPSB0aGlzLmlzQWNjb3JkaW9uR3JvdXAoKTtcbiAgICBjb25zdCBkYXRhTGVuZ3RoID0gdGhpcy5fZGF0YS5sZW5ndGg7XG4gICAgbGV0IGhhc1Jlc3VsdHMgPSBmYWxzZTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YUxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBncm91cCA9IHRoaXMuX2RhdGFbaV07XG4gICAgICBjb25zdCBncm91cEtleSA9IHRoaXMuZ2V0R3JvdXBLZXkoZ3JvdXApO1xuICAgICAgY29uc3QgZ3JvdXBNYXRjaCA9IHRoaXMuc2VhcmNoR3JvdXBMYWJlbHMgJiYgdGhpcy5zZWFyY2hTdHJhdGVneShncm91cCwgdmFsdWUsIHRoaXMubGFiZWxLZXkpO1xuICAgICAgY29uc3QgZ3JvdXBPcHRpb25zID0gZ3JvdXAuY2hpbGRyZW4ubWFwKGNoaWxkID0+IGNoaWxkW3RoaXMuaWRLZXldKTtcbiAgICAgIC8qIHNob3cvaGlkZSB0aGUgb3B0aW9ucyAqL1xuICAgICAgY29uc3Qgc2hvd0dyb3VwID0gdGhpcy5zZWFyY2hJbk9wdGlvbnModmFsdWUsIGdyb3VwT3B0aW9ucywgZ3JvdXBNYXRjaCk7XG5cbiAgICAgIGlmIChzaG93R3JvdXAgJiYgIWhhc1Jlc3VsdHMpIHtcbiAgICAgICAgaGFzUmVzdWx0cyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8qIEZpbmQgdGhlIHJpZ2h0IGNvbXBvbmVudCwgYWNjb3JkaW5nIHRvIHRoZSBpbnRlcm5hbCBrZXkgYXNzaWduZWQgaW4gdGhlIHByZXZpb3VzIHNlYXJjaC5cbiAgICAgICAgIFdoZW4gbm8gbWF0Y2ggaXMgZm91bmQsIGZhbGxpbmcgYmFjayB0byB0aGUgc2FtZSBpbmRleCBhcyB0aGUgZ3JvdXAgb3B0aW9uLlxuICAgICAgKiAgVGhlIGluZGV4IGlzIGNvbnNpZGVyZWQgbGVzcyBzYWZlLCBiZWNhdXNlIGl0IGNhbiBjaGFuZ2UgYWZ0ZXIgc29ydGluZy4gKi9cbiAgICAgIGNvbnN0IGdyb3VwQ29tcG9uZW50ID0gZ3JvdXBDb21wb25lbnRzQXJyYXkuZmluZCgoZzogYW55KSA9PiBnLl9fa2V5ID09PSBncm91cEtleSkgfHwgZ3JvdXBDb21wb25lbnRzQXJyYXlbaV07XG4gICAgICAvKiBTaG93L2hpZGUgdGhlIGdyb3VwICovXG4gICAgICBpZiAoZ3JvdXBDb21wb25lbnQpIHtcbiAgICAgICAgZ3JvdXBDb21wb25lbnQuX2hpZGRlbiA9ICFzaG93R3JvdXA7XG4gICAgICAgIC8qIGFzc2lnbiBhbiBpbnRlcm5hbCBrZXkgdG8gdGhlIGNvbXBvbmVudCBpbnN0YW5jZSwgc28gd2UgY2FuIGZpbmQgaXQgbGF0ZXIgKGFib3ZlKS4gKi9cbiAgICAgICAgKGdyb3VwQ29tcG9uZW50IGFzIGFueSkuX19rZXkgPSBncm91cEtleTtcbiAgICAgICAgLyogRXhwYW5kIHRoZSBhY2NvcmRpb24gb24gbWF0Y2hpbmcgcmVzdWx0cyAqL1xuICAgICAgICBpZiAoaXNBY2NvcmRpb24gJiYgc2hvd0dyb3VwKSB7XG4gICAgICAgICAgY29uc3QgYWNjb3JkaW9uR3JvdXAgPSBncm91cENvbXBvbmVudCBhcyBEYXRvQWNjb3JkaW9uR3JvdXBDb21wb25lbnQ7XG5cbiAgICAgICAgICBpZiAoIWFjY29yZGlvbkdyb3VwLmV4cGFuZGVkKSB7XG4gICAgICAgICAgICBhY2NvcmRpb25Hcm91cC5jb250ZW50LmRpc2FibGVBbmltYXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgLyogRXhwYW5kIHRoZSBhY2NvcmRpb24gKi9cbiAgICAgICAgICAgIGFjY29yZGlvbkdyb3VwLmV4cGFuZCh0cnVlKTtcbiAgICAgICAgICAgIC8qIE1hcmsgdGhlIGFjY29yZGlvbiBhcyBleHBhbmRlZCwgc28gd2UgY2FuIHJldHVybiB0byB0aGUgZGVmYXVsdCBzdGF0ZSBsYXRlciAqL1xuICAgICAgICAgICAgKGdyb3VwQ29tcG9uZW50IGFzIGFueSkuX19leHBlbmRlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGhhc1Jlc3VsdHM7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoIHRoZSBvcHRpb25zIHRvIHNob3cgb3IgaGlkZSBlYWNoIGFuZCByZXR1cm4gaWYgcmVzdWx0IGhhcyBiZWVuIGZvdW5kLlxuICAgKiBDb25zaWRlciB3ZSBoYXZlIGEgZ3JvdXAgdGhhdCBtYXRjaCB3ZSBzaG93IGFsbCBvZiBpdHMgb3B0aW9ucy5cbiAgICovXG4gIHByaXZhdGUgc2VhcmNoSW5PcHRpb25zKHZhbHVlOiBzdHJpbmcsIGdyb3VwT3B0aW9ucyA9IFtdLCBncm91cE1hdGNoID0gZmFsc2UpIHtcbiAgICBsZXQgaGFzUmVzdWx0cyA9IGZhbHNlO1xuXG4gICAgZm9yIChjb25zdCBkYXRvT3B0aW9uIG9mIHRoaXMub3B0aW9ucy50b0FycmF5KCkpIHtcbiAgICAgIGNvbnN0IG9wdGlvbkluR3JvdXAgPSBncm91cE9wdGlvbnMuaW5kZXhPZihkYXRvT3B0aW9uLm9wdGlvbiAmJiBkYXRvT3B0aW9uLm9wdGlvblt0aGlzLmlkS2V5XSkgIT09IC0xO1xuXG4gICAgICBpZiAoZ3JvdXBNYXRjaCAmJiBvcHRpb25Jbkdyb3VwKSB7XG4gICAgICAgIGRhdG9PcHRpb24uaGlkZUFuZERpc2FibGVkKGZhbHNlKTtcbiAgICAgICAgaGFzUmVzdWx0cyA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKCFzaXplKGdyb3VwT3B0aW9ucykgfHwgb3B0aW9uSW5Hcm91cCkge1xuICAgICAgICBjb25zdCBtYXRjaCA9IHRoaXMuc2VhcmNoU3RyYXRlZ3koZGF0b09wdGlvbiwgdmFsdWUsIHRoaXMubGFiZWxLZXkpO1xuXG4gICAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgICBkYXRvT3B0aW9uLmhpZGVBbmREaXNhYmxlZCh0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkYXRvT3B0aW9uLmhpZGVBbmREaXNhYmxlZChmYWxzZSk7XG4gICAgICAgICAgaGFzUmVzdWx0cyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaGFzUmVzdWx0cztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGtleSBvZiB0aGUgb3B0aW9uIGdyb3VwLiBJdCBjYW4gYmUgdGhlIGdyb3VwIElkIGlmIGV4aXN0cywgb3IgdGhlIGxhYmVsLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRHcm91cEtleShvcHRpb24pIHtcbiAgICByZXR1cm4gb3B0aW9uICYmIChvcHRpb25bdGhpcy5pZEtleV0gfHwgb3B0aW9uW3RoaXMubGFiZWxLZXldKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNFbXB0eSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmUgdG8gc2VhcmNoIGNoYW5nZXMgYW5kIGZpbHRlciB0aGUgbGlzdFxuICAgKi9cbiAgcHJpdmF0ZSBsaXN0ZW5Ub1NlYXJjaCgpIHtcbiAgICB0aGlzLnNlYXJjaFN1YnNjcmlwdGlvbiA9XG4gICAgICB0aGlzLmlzQ29tYm8gJiZcbiAgICAgIHRoaXMuc2VhcmNoQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShkZWJvdW5jZVRpbWUodGhpcy5kZWJvdW5jZVRpbWUpKS5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgICBpZiAodGhpcy5pbnRlcm5hbFNlYXJjaCkge1xuICAgICAgICAgIGlmICh0aGlzLmlzRW1wdHkodmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dBbGwoKTtcbiAgICAgICAgICAgIHRoaXMuaGFzUmVzdWx0cyA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaGFzUmVzdWx0cyA9IHRoaXMuc2VhcmNoT3B0aW9ucyh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2VhcmNoLmVtaXQodmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWFyY2hUZXJtID0gdmFsdWU7XG4gICAgICAgIHRoaXMua2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKC0xKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIHRoaXMuYXN5bmNVcGRhdGVEcm9wZG93blBvc2l0aW9uKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmUgdG8gb3B0aW9uIGNsaWNrIGFuZCBjaGFuZ2UgdGhlIHN0YXRlIGFjY29yZGluZ2x5XG4gICAqL1xuICBwcml2YXRlIHN1YnNjcmliZVRvT3B0aW9uQ2xpY2sob3B0aW9uczogUXVlcnlMaXN0PERhdG9PcHRpb25Db21wb25lbnQ+KSB7XG4gICAgdGhpcy5jbGlja3NTdWJzY3JpcHRpb24gJiYgdGhpcy5jbGlja3NTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcblxuICAgIC8qKiBHYXRoZXIgYWxsIHRoZSBjbGlja3MgKi9cbiAgICBjb25zdCBjbGlja3MkID0gb3B0aW9ucy5tYXAob3B0aW9uID0+XG4gICAgICBvcHRpb24uY2xpY2skLnBpcGUoXG4gICAgICAgIG1hcCgoZXZlbnQ6IEV2ZW50KSA9PiAoe1xuICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgIG9wdGlvblxuICAgICAgICB9KSlcbiAgICAgIClcbiAgICApO1xuXG4gICAgLyoqIENvbnNpZGVyIGNoYW5nZSBpdCB0byB1c2UgZXZlbnQgZGVsZWdhdGlvbiAqL1xuICAgIHRoaXMuY2xpY2tzU3Vic2NyaXB0aW9uID0gbWVyZ2UoLi4uY2xpY2tzJCkuc3Vic2NyaWJlKCh7IG9wdGlvbiwgZXZlbnQgfSkgPT4ge1xuICAgICAgaWYgKG9wdGlvbi5kaXNhYmxlZCkgcmV0dXJuO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuaXNTaW5nbGUgPyB0aGlzLmhhbmRsZVNpbmdsZUNsaWNrKG9wdGlvbikgOiB0aGlzLmhhbmRsZU11bHRpQ2xpY2sob3B0aW9uKTtcbiAgICB9KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24nLCBbJyRldmVudCddKVxuICBvbkRvY3VtZW50S2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmIChpc0VzY2FwZShldmVudCkgJiYgdGhpcy5vcGVuKSB7XG4gICAgICB0aGlzLl9jbGlja091dHNpZGUgPSB0cnVlO1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIGtleXVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKGlzRW50ZXIoZXZlbnQpKSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMua2V5TWFuYWdlci5hY3RpdmVJdGVtSW5kZXg7XG4gICAgICBjb25zdCBhY3RpdmUgPSB0aGlzLm9wdGlvbnMudG9BcnJheSgpW2luZGV4XTtcbiAgICAgIHRoaXMuaXNTaW5nbGUgPyB0aGlzLmhhbmRsZVNpbmdsZUNsaWNrKGFjdGl2ZSkgOiB0aGlzLmhhbmRsZU11bHRpQ2xpY2soYWN0aXZlKTtcbiAgICB9XG5cbiAgICBpZiAoaXNBcnJvd1VwRG93bihldmVudCkpIHtcbiAgICAgIHRoaXMua2V5TWFuYWdlci5vbktleWRvd24oZXZlbnQpO1xuICAgICAgY29uc3QgcGFuZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuZGF0by1zZWxlY3RfX2Ryb3Bkb3duJyk7XG4gICAgICBfc2Nyb2xsVG9PcHRpb24oe1xuICAgICAgICBzaXplOiB0aGlzLnNpemUsXG4gICAgICAgIHBhbmVsLFxuICAgICAgICBhY3RpdmVJdGVtSW5kZXg6IHRoaXMua2V5TWFuYWdlci5hY3RpdmVJdGVtSW5kZXgsXG4gICAgICAgIGdyb3VwczogdGhpcy5ncm91cHMsXG4gICAgICAgIG9wdGlvbnM6IHRoaXMub3B0aW9uc1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGlzRXNjYXBlKGV2ZW50KSkge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRBbGwoKSB7XG4gICAgZm9yIChjb25zdCBkYXRvT3B0aW9uIG9mIHRoaXMub3B0aW9ucy50b0FycmF5KCkpIHtcbiAgICAgIGRhdG9PcHRpb24uYWN0aXZlID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVTaW5nbGVDbGljayhkYXRvT3B0aW9uOiBEYXRvT3B0aW9uQ29tcG9uZW50KSB7XG4gICAgaWYgKCFkYXRvT3B0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChkYXRvT3B0aW9uLmFjdGl2ZSkge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlc2V0QWxsKCk7XG4gICAgICBkYXRvT3B0aW9uLmFjdGl2ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgcmF3T3B0aW9uID0gZGF0b09wdGlvbi5vcHRpb247XG4gICAgdGhpcy5fbW9kZWwgPSBbcmF3T3B0aW9uXTtcbiAgICB0aGlzLm9uQ2hhbmdlKHJhd09wdGlvbik7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVNdWx0aUNsaWNrKGRhdG9PcHRpb246IERhdG9PcHRpb25Db21wb25lbnQpIHtcbiAgICBpZiAoIWRhdG9PcHRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbW9kZWxMZW5ndGggPSB0aGlzLl9tb2RlbC5sZW5ndGg7XG4gICAgY29uc3QgdXBkYXRlRGlzYWJsZWQgPVxuICAgICAgdGhpcy5saW1pdFNlbGVjdGVkVG8gJiZcbiAgICAgIChtb2RlbExlbmd0aCA9PT0gdGhpcy5saW1pdFNlbGVjdGVkVG8gfHwgKG1vZGVsTGVuZ3RoID09PSB0aGlzLmxpbWl0U2VsZWN0ZWRUbyAtIDEgJiYgIWRhdG9PcHRpb24uYWN0aXZlKSk7XG4gICAgZGF0b09wdGlvbi5hY3RpdmUgPSAhZGF0b09wdGlvbi5hY3RpdmU7XG4gICAgY29uc3QgcmF3T3B0aW9uID0gZGF0b09wdGlvbi5vcHRpb247XG4gICAgaWYgKGRhdG9PcHRpb24uYWN0aXZlKSB7XG4gICAgICB0aGlzLl9tb2RlbCA9IHRoaXMuX21vZGVsLmNvbmNhdChyYXdPcHRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9tb2RlbCA9IHRoaXMuX21vZGVsLmZpbHRlcihjdXJyZW50ID0+IGN1cnJlbnRbdGhpcy5pZEtleV0gIT09IHJhd09wdGlvblt0aGlzLmlkS2V5XSk7XG4gICAgfVxuICAgIHVwZGF0ZURpc2FibGVkICYmIHRoaXMudXBkYXRlRGlzYWJsZWRTdGF0ZSgpO1xuICAgIHRoaXMub25DaGFuZ2UodGhpcy5fbW9kZWwpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIHRoaXMuYXN5bmNVcGRhdGVEcm9wZG93blBvc2l0aW9uKCk7XG4gIH1cblxuICBwcml2YXRlIGFjdGl2YXRlSW5maW5pdGVTY3JvbGwoKSB7XG4gICAgdGhpcy5pbmZpbml0ZVN1YnNjcmlwdGlvbiA9IGZyb21FdmVudChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuZGF0by1zZWxlY3RfX2Ryb3Bkb3duJyksICdzY3JvbGwnKVxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDUwKSlcbiAgICAgIC5zdWJzY3JpYmUoXyA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kYXRvLXNlbGVjdF9fZHJvcGRvd24nKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgY29uc3Qgc2Nyb2xsWSA9IGNvbnRhaW5lci5zY3JvbGxIZWlnaHQgLSBjb250YWluZXIuc2Nyb2xsVG9wO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSBjb250YWluZXIub2Zmc2V0SGVpZ2h0O1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBoZWlnaHQgLSBzY3JvbGxZO1xuICAgICAgICBpZiAob2Zmc2V0ID09PSAwIHx8IG9mZnNldCA9PT0gMSkge1xuICAgICAgICAgIHRoaXMuZmV0Y2guZW1pdCh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnNlYXJjaFN1YnNjcmlwdGlvbiAmJiB0aGlzLnNlYXJjaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2xpY2tzU3Vic2NyaXB0aW9uICYmIHRoaXMuY2xpY2tzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5pbmZpbml0ZVN1YnNjcmlwdGlvbiAmJiB0aGlzLmluZmluaXRlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5kYXRvT3ZlcmxheS5hdHRhY2hlZCAmJiB0aGlzLmRhdG9PdmVybGF5LmRlc3Ryb3koKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBncm91cCBjb21wb25lbnQgaXMgQWNjb3JkaW9uXG4gICAqL1xuICBwcml2YXRlIGlzQWNjb3JkaW9uR3JvdXAoKSB7XG4gICAgcmV0dXJuIHRoaXMuYWNjb3JkaW9uICYmIHRoaXMuYWNjb3JkaW9uLmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBhbiBhcnJheSBvZiB0aGUgZ3JvdXAgY29tcG9uZW50c1xuICAgKi9cbiAgcHJpdmF0ZSBnZXRHcm91cENvbXBvbmVudHNBcnJheSgpOiBMaXN0R3JvdXBDb21wb25lbnRbXSB7XG4gICAgcmV0dXJuIHRoaXMuaXNBY2NvcmRpb25Hcm91cCgpID8gdGhpcy5hY2NvcmRpb24uZmlyc3QuZ3JvdXBzLnRvQXJyYXkoKSA6IHRoaXMuZ3JvdXBzICYmIHRoaXMuZ3JvdXBzLnRvQXJyYXkoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRGlzYWJsZWRTdGF0ZSgpIHtcbiAgICBjb25zdCBkaXNhYmxlZCA9IHRoaXMuX21vZGVsLmxlbmd0aCA9PT0gdGhpcy5saW1pdFNlbGVjdGVkVG87XG4gICAgZm9yIChjb25zdCBkYXRvT3B0aW9uIG9mIHRoaXMub3B0aW9ucy50b0FycmF5KCkpIHtcbiAgICAgIGlmICghZGF0b09wdGlvbi5hY3RpdmUpIHtcbiAgICAgICAgZGF0b09wdGlvbi5kaXNhYmxlZCA9IGRpc2FibGVkO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIE1ha2Ugc3VyZSB0aGUgb3ZlcmxheSB3aWxsIGJlIHVwZGF0ZSBBRlRFUiBDaGFuZ2UgRGV0ZWN0aW9uIHdhcyBkb25lXG4gIC8vIFNvIHRoZSBpdGVtcyBpbiB0aGUgaW5wdXQgKGFuZCBpdHMgaGVpZ2h0KSBpcyB1cGRhdGVcbiAgcHJpdmF0ZSBhc3luY1VwZGF0ZURyb3Bkb3duUG9zaXRpb24oKSB7XG4gICAgaWYgKHRoaXMuZGF0b092ZXJsYXkgJiYgdGhpcy5kYXRvT3ZlcmxheS5hdHRhY2hlZCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmRhdG9PdmVybGF5LnNjaGVkdWxlVXBkYXRlKCksIDApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB0cmlnZ2VyQ2hhbmdlRGV0ZWN0aW9uSW5EYXRvU2luZ2xlKCk6IHZvaWQge1xuICAgIHRoaXMuZGF0b1RyaWdnZXJTaW5nbGUudHJpZ2dlckNoYW5nZURldGVjdGlvbigpO1xuICB9XG59XG4iXX0=
|
|
@@ -30,6 +30,9 @@ let DatoTriggerSingle = class DatoTriggerSingle {
|
|
|
30
30
|
get getLabel() {
|
|
31
31
|
return this._model && this._model.$implicit && this._model.$implicit[this.labelKey];
|
|
32
32
|
}
|
|
33
|
+
triggerChangeDetection() {
|
|
34
|
+
this.cdr.detectChanges();
|
|
35
|
+
}
|
|
33
36
|
};
|
|
34
37
|
DatoTriggerSingle.ctorParameters = () => [
|
|
35
38
|
{ type: ChangeDetectorRef }
|
|
@@ -66,4 +69,4 @@ DatoTriggerSingle = __decorate([
|
|
|
66
69
|
__metadata("design:paramtypes", [ChangeDetectorRef])
|
|
67
70
|
], DatoTriggerSingle);
|
|
68
71
|
export { DatoTriggerSingle };
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJpZ2dlci1zaW5nbGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGRhdG9yYW1hL2NvcmUvIiwic291cmNlcyI6WyJsaWIvc2VsZWN0L3RyaWdnZXItc2luZ2xlL3RyaWdnZXItc2luZ2xlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7O0FBRUgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsSCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQVF2RSxJQUFhLGlCQUFpQixHQUE5QixNQUFhLGlCQUFpQjtJQTJCNUIsWUFBb0IsR0FBc0I7UUFBdEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFIMUMsaUJBQVksR0FBRyxFQUFFLENBQUM7SUFHMkIsQ0FBQztJQXBCOUMsSUFBSSxXQUFXLENBQUMsS0FBSztRQUNuQixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFLRCxJQUFJLE9BQU8sQ0FBQyxLQUFLO1FBQ2YsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDakIsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztJQUNoRCxDQUFDO0lBT0QsUUFBUTtRQUNOLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVELElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUVNLHNCQUFzQjtRQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7Q0FDRixDQUFBOztZQWIwQixpQkFBaUI7O0FBekIxQztJQURDLEtBQUssRUFBRTs4QkFDUyxXQUFXOzBEQUFNO0FBRXpCO0lBQVIsS0FBSyxFQUFFOzhCQUFTLHlCQUF5QjtpREFBQztBQUczQztJQURDLEtBQUssRUFBRTs7O29EQUlQO0FBRVE7SUFBUixLQUFLLEVBQUU7O21EQUFrQjtBQUcxQjtJQURDLEtBQUssRUFBRTs7O2dEQUlQO0FBbEJVLGlCQUFpQjtJQU43QixTQUFTLENBQUM7UUFDVCxRQUFRLEVBQUUscUJBQXFCO1FBQy9CLDZoQkFBOEM7UUFDOUMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07O0tBRWhELENBQUM7cUNBNEJ5QixpQkFBaUI7R0EzQi9CLGlCQUFpQixDQXdDN0I7U0F4Q1ksaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IERhdG9yYW1hLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIEFwYWNoZSBMaWNlbnNlIDIuMCBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRvcmFtYS9jbGllbnQtY29yZS9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKi9cblxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYXRvU2VsZWN0QWN0aXZlRGlyZWN0aXZlIH0gZnJvbSAnLi4vc2VsZWN0LWFjdGl2ZS5kaXJlY3RpdmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkYXRvLXRyaWdnZXItc2luZ2xlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RyaWdnZXItc2luZ2xlLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0eWxlVXJsczogW2AuL3RyaWdnZXItc2luZ2xlLmNvbXBvbmVudC5zY3NzYF1cbn0pXG5leHBvcnQgY2xhc3MgRGF0b1RyaWdnZXJTaW5nbGUgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKVxuICBsb2FkaW5nVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQElucHV0KCkgYWN0aXZlOiBEYXRvU2VsZWN0QWN0aXZlRGlyZWN0aXZlO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBwbGFjZWhvbGRlcih2YWx1ZSkge1xuICAgIHRoaXMuX3BsYWNlaG9sZGVyID0gdmFsdWU7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgQElucHV0KCkgbGFiZWxLZXk6IHN0cmluZztcblxuICBASW5wdXQoKVxuICBzZXQgY29udGV4dCh2YWx1ZSkge1xuICAgIHRoaXMuX21vZGVsID0geyAkaW1wbGljaXQ6IHZhbHVlIH07XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgZ2V0IGhpZGVQbGFjZWhvbGRlcigpIHtcbiAgICByZXR1cm4gIXRoaXMuX21vZGVsIHx8ICF0aGlzLl9tb2RlbC4kaW1wbGljaXQ7XG4gIH1cblxuICBfcGxhY2Vob2xkZXIgPSAnJztcbiAgX21vZGVsOiB7ICRpbXBsaWNpdD86IGFueSB9O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmNkci5kZXRhY2goKTtcbiAgfVxuXG4gIGdldCBnZXRMYWJlbCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbW9kZWwgJiYgdGhpcy5fbW9kZWwuJGltcGxpY2l0ICYmIHRoaXMuX21vZGVsLiRpbXBsaWNpdFt0aGlzLmxhYmVsS2V5XTtcbiAgfVxuXG4gIHB1YmxpYyB0cmlnZ2VyQ2hhbmdlRGV0ZWN0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxufVxuIl19
|
package/esm2015/lib/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
window.coreVersion = '22.
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
window.coreVersion = '22.12.0';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BkYXRvcmFtYS9jb3JlLyIsInNvdXJjZXMiOlsibGliL3ZlcnNpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUMsTUFBYyxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIod2luZG93IGFzIGFueSkuY29yZVZlcnNpb24gPSAnMjIuMTIuMCc7Il19
|
|
@@ -44,9 +44,9 @@ var DatoGridV2Component = /** @class */ (function () {
|
|
|
44
44
|
enumerable: true,
|
|
45
45
|
configurable: true
|
|
46
46
|
});
|
|
47
|
-
Object.defineProperty(DatoGridV2Component.prototype, "
|
|
47
|
+
Object.defineProperty(DatoGridV2Component.prototype, "isPivotStyle", {
|
|
48
48
|
get: function () {
|
|
49
|
-
return this.gridOptions ? this.gridOptions.
|
|
49
|
+
return this.gridOptions ? this.gridOptions.pivotGridStyle : false;
|
|
50
50
|
},
|
|
51
51
|
enumerable: true,
|
|
52
52
|
configurable: true
|
|
@@ -63,7 +63,7 @@ var DatoGridV2Component = /** @class */ (function () {
|
|
|
63
63
|
DatoGridV2Component = __decorate([
|
|
64
64
|
Component({
|
|
65
65
|
selector: 'dato-grid-v2',
|
|
66
|
-
template: "<ag-grid-angular data-auto-id=\"grid\" class=\"dato-grid ag-theme-material\" [class.has-background]=\"enableBackground\" [class.enable-v2_1]=\"enableV2_1\"\n [class.with-multi-selection-col]=\"gridOptions?.showMultiSelectionCheckboxes\" [class.pivot-
|
|
66
|
+
template: "<ag-grid-angular data-auto-id=\"grid\" class=\"dato-grid ag-theme-material\" [class.has-background]=\"enableBackground\" [class.enable-v2_1]=\"enableV2_1\"\n [class.with-multi-selection-col]=\"gridOptions?.showMultiSelectionCheckboxes\" [class.pivot-style]=\"isPivotStyle\">\n</ag-grid-angular>\n<dato-grid-pagination-v2 [class.has-background]=\"enableBackground\"></dato-grid-pagination-v2>\n",
|
|
67
67
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
68
68
|
encapsulation: ViewEncapsulation.None,
|
|
69
69
|
styles: ["dato-grid-v2{flex-grow:1;display:flex;flex-direction:column;position:relative}dato-grid-v2 .dato-grid,dato-grid-v2 dato-grid-pagination-v2{position:absolute;left:0;right:0;bottom:0}dato-grid-v2 .dato-grid{top:0;bottom:50px}dato-grid-v2 .grid-hover-actions{position:absolute;z-index:2;transition:opacity .2s ease-in-out}dato-grid-v2 .ag-row-drag{width:initial!important}dato-grid-v2 .da-grid-icon{display:inline-block;line-height:31px;vertical-align:middle;width:initial;height:initial}dato-grid-v2 .da-grid-icon.drag{width:14px;height:14px;margin-right:6px;opacity:0;transition:opacity .3s;transform:translateY(-50%)}dato-grid-v2 .da-grid-icon.folder{width:18px;height:35px;margin:0 8px}dato-grid-v2 .ag-row.ag-row-hover .da-grid-icon.drag{opacity:1}dato-grid-v2 ag-grid-angular.tree .ag-group-contracted,dato-grid-v2 ag-grid-angular.tree .ag-group-expanded{display:inline-block;width:18px;text-align:center}dato-grid-v2 ag-grid-angular.tree .ag-group-checkbox{display:none}dato-grid-v2 ag-grid-angular.tree .ag-row.ag-empty-folder .folder{margin-left:26px}dato-grid-v2 ag-grid-angular.tree .ag-row.ag-row-level-1 .ag-cell-wrapper .ag-row-drag{padding-right:calc(55px * 1)}dato-grid-v2 ag-grid-angular.tree .ag-row .ag-row-group-indent-1{margin-left:0!important;padding-left:0!important}dato-grid-v2 ag-grid-angular.tree .ag-row.ag-row-level-2 .ag-cell-wrapper .ag-row-drag{padding-right:calc(55px * 2)}dato-grid-v2 ag-grid-angular.tree .ag-row .ag-row-group-indent-2{margin-left:0!important;padding-left:0!important}dato-grid-v2 ag-grid-angular.tree .ag-row.ag-row-level-3 .ag-cell-wrapper .ag-row-drag{padding-right:calc(55px * 3)}dato-grid-v2 ag-grid-angular.tree .ag-row .ag-row-group-indent-3{margin-left:0!important;padding-left:0!important}dato-grid-v2 ag-grid-angular.tree .ag-row.ag-row-level-4 .ag-cell-wrapper .ag-row-drag{padding-right:calc(55px * 4)}dato-grid-v2 ag-grid-angular.tree .ag-row .ag-row-group-indent-4{margin-left:0!important;padding-left:0!important}dato-grid-v2 ag-grid-angular.tree .ag-row div[col-id=ag-Grid-AutoColumn]{padding-left:0}dato-grid-v2 ag-grid-angular.tree .ag-row .ag-cell{display:flex;align-items:center}dato-grid-v2 ag-grid-angular.tree .ag-row .ag-cell .ag-group-value>span{display:inline-block;vertical-align:middle}dato-grid-v2 ag-grid-angular.tree .ag-row .ag-cell .initials{border-radius:50%;padding:4px;margin-right:8px;margin-left:20px;width:28px;height:28px;display:inline-block;text-align:center}dato-grid-v2 ag-grid-angular.tree .ag-row-group-leaf-indent{margin-left:0!important}dato-grid-v2 ag-grid-angular.tree .ag-selection-checkbox .ag-icon-checkbox-indeterminate:before{text-align:center;content:'-';display:inline-block;position:absolute;top:0;left:0;right:0;bottom:0;line-height:.5;color:#fff}dato-grid-v2 ag-grid-angular.row-height-35 .ag-cell{line-height:33px}dato-grid-v2 ag-grid-angular.row-height-35 .ag-cell.dato-editable-cell{line-height:29px}dato-grid-v2 ag-grid-angular.row-height-35 .ag-cell.ag-cell-inline-editing{height:35px}dato-grid-v2 ag-grid-angular.row-height-44 .ag-cell{line-height:42px}dato-grid-v2 ag-grid-angular.row-height-44 .ag-cell.dato-editable-cell{line-height:38px}dato-grid-v2 ag-grid-angular.row-height-44 .ag-cell.ag-cell-inline-editing{height:44px}dato-grid-v2 ag-grid-angular.row-height-50 .ag-cell{line-height:48px}dato-grid-v2 ag-grid-angular.row-height-50 .ag-cell.dato-editable-cell{line-height:44px}dato-grid-v2 ag-grid-angular.row-height-50 .ag-cell.ag-cell-inline-editing{height:50px}dato-grid-v2 ag-grid-angular.row-height-59 .ag-cell{line-height:57px}dato-grid-v2 ag-grid-angular.row-height-59 .ag-cell.dato-editable-cell{line-height:53px}dato-grid-v2 ag-grid-angular.row-height-59 .ag-cell.ag-cell-inline-editing{height:59px}dato-grid-v2 ag-grid-angular .ag-cell.checkbox-selection-cell{display:flex}dato-grid-v2 .ag-menu .da-grid-icon svg{vertical-align:middle}dato-grid-v2 .ag-header-cell-sortable .ag-sort-none-icon{opacity:0;transition:opacity .2s}dato-grid-v2 .ag-header-cell-sortable:hover .ag-sort-none-icon{opacity:1}dato-grid-v2 .group-contracted-icon,dato-grid-v2 .group-expanded-icon{width:7px}dato-grid-v2 .group-expanded-icon{transform:rotate(90deg)}dato-grid-v2 .dato-grid .ag-cell{border-top:0;border-bottom:0}dato-grid-v2 .ag-overlay-wrapper ng-component{display:flex}.ag-dnd-ghost{min-width:100px;border:none;display:flex;justify-content:flex-start;align-content:center;align-items:center;cursor:-webkit-grabbing;cursor:grabbing;z-index:10000000}.ag-dnd-ghost .da-grid-icon.column-move-hide svg{height:18px;width:18px}.ag-dnd-ghost .da-grid-icon.column-move svg,.ag-dnd-ghost .da-grid-icon.column-move-pin svg{height:16px;width:16px}"]
|
|
@@ -73,4 +73,4 @@ var DatoGridV2Component = /** @class */ (function () {
|
|
|
73
73
|
return DatoGridV2Component;
|
|
74
74
|
}());
|
|
75
75
|
export { DatoGridV2Component };
|
|
76
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC12Mi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AZGF0b3JhbWEvY29yZS8iLCJzb3VyY2VzIjpbImxpYi9ncmlkLXYyL2dyaWQvZ3JpZC12Mi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOztBQUVILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDM0YsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBVS9DO0lBc0JFLDZCQUFvQixVQUF1QyxFQUFVLElBQWdCO1FBQWpFLGVBQVUsR0FBVixVQUFVLENBQTZCO1FBQVUsU0FBSSxHQUFKLElBQUksQ0FBWTtJQUFHLENBQUM7SUFyQmpELHNCQUFJLHFDQUFJO2FBQVIsVUFBUyxNQUFpQjtZQUNoRSxJQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNuRSxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDcEQsQ0FBQzs7O09BQUE7SUFFRCxzQkFBSSw0Q0FBVzthQUFmO1lBQ0UsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzlELENBQUM7OztPQUFBO0lBRUQsc0JBQUksaURBQWdCO2FBQXBCO1lBQ0UsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDdEUsQ0FBQzs7O09BQUE7SUFFRCxzQkFBSSwyQ0FBVTthQUFkO1lBQ0UsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ2hFLENBQUM7OztPQUFBO0lBRUQsc0JBQUksNkNBQVk7YUFBaEI7WUFDRSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDcEUsQ0FBQzs7O09BQUE7O2dCQUUrQiwyQkFBMkI7Z0JBQWdCLFVBQVU7O0lBckI3QztRQUF2QyxTQUFTLENBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO2tDQUFrQixTQUFTO3lDQUFULFNBQVM7bURBR2pFO0lBSlUsbUJBQW1CO1FBUC9CLFNBQVMsQ0FBQztZQUNULFFBQVEsRUFBRSxjQUFjO1lBQ3hCLHFhQUF1QztZQUV2QyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtZQUMvQyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTs7U0FDdEMsQ0FBQzt5Q0F1QmdDLDJCQUEyQixFQUFnQixVQUFVO09BdEIxRSxtQkFBbUIsQ0F1Qi9CO0lBQUQsMEJBQUM7Q0FBQSxBQXZCRCxJQXVCQztTQXZCWSxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgRGF0b3JhbWEuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gQXBhY2hlIExpY2Vuc2UgMi4wIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL2RhdG9yYW1hL2NsaWVudC1jb3JlL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqL1xuXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBWaWV3Q2hpbGQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBZ0dyaWROZzIgfSBmcm9tICdhZy1ncmlkLWFuZ3VsYXInO1xuaW1wb3J0IHsgRGF0b0dyaWRDb250cm9sbGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vZ3JpZC1jb250cm9sbGVyL2dyaWQtY29udHJvbGxlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgcXVlcnkgfSBmcm9tICcuLi8uLi9pbnRlcm5hbC9oZWxwZXJzJztcbmltcG9ydCB7IERhdG9HcmlkT3B0aW9ucyB9IGZyb20gJy4vZ3JpZC12Mi50eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2RhdG8tZ3JpZC12MicsXG4gIHRlbXBsYXRlVXJsOiAnLi9ncmlkLXYyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZ3JpZC12Mi5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBEYXRvR3JpZFYyQ29tcG9uZW50IHtcbiAgQFZpZXdDaGlsZChBZ0dyaWROZzIsIHsgc3RhdGljOiB0cnVlIH0pIHNldCBncmlkKGFnR3JpZDogQWdHcmlkTmcyKSB7XG4gICAgY29uc3QgYWdHcmlkRWwgPSBxdWVyeSgnYWctZ3JpZC1hbmd1bGFyJywgdGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQpO1xuICAgIHRoaXMuY29udHJvbGxlci5faW5pdGlhbGl6ZUdyaWQoYWdHcmlkLCBhZ0dyaWRFbCk7XG4gIH1cblxuICBnZXQgZ3JpZE9wdGlvbnMoKTogRGF0b0dyaWRPcHRpb25zIHtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyID8gdGhpcy5jb250cm9sbGVyLmdyaWRPcHRpb25zIDogbnVsbDtcbiAgfVxuXG4gIGdldCBlbmFibGVCYWNrZ3JvdW5kKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdyaWRPcHRpb25zID8gdGhpcy5ncmlkT3B0aW9ucy5lbmFibGVCYWNrZ3JvdW5kIDogZmFsc2U7XG4gIH1cblxuICBnZXQgZW5hYmxlVjJfMSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5ncmlkT3B0aW9ucyA/IHRoaXMuZ3JpZE9wdGlvbnMuZW5hYmxlVjJfMSA6IGZhbHNlO1xuICB9XG5cbiAgZ2V0IGlzUGl2b3RTdHlsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5ncmlkT3B0aW9ucyA/IHRoaXMuZ3JpZE9wdGlvbnMucGl2b3RHcmlkU3R5bGUgOiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29udHJvbGxlcjogRGF0b0dyaWRDb250cm9sbGVyQ29tcG9uZW50LCBwcml2YXRlIGhvc3Q6IEVsZW1lbnRSZWYpIHt9XG59XG4iXX0=
|