@datorama/core 22.5.2 → 22.6.0
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/bundles/datorama-core.umd.js +25 -8
- package/bundles/datorama-core.umd.js.map +1 -1
- package/bundles/datorama-core.umd.min.js +4 -4
- 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.types.js +1 -1
- package/esm2015/lib/grid-v2/grid-filter/grid-filter.component.js +6 -2
- package/esm2015/lib/grid-v2/grid-no-data-overlay/grid-v2-no-data-overlay.component.js +15 -6
- package/esm2015/lib/grid-v2/grid-pagination/grid-pagination.component.js +2 -2
- package/esm2015/lib/grid-v2/grid-store/grid.service.js +2 -2
- package/esm2015/lib/icon/icon.types.js +1 -1
- package/esm2015/lib/version.js +2 -2
- package/esm5/lib/grid-v2/grid/grid-v2.types.js +1 -1
- package/esm5/lib/grid-v2/grid-filter/grid-filter.component.js +6 -2
- package/esm5/lib/grid-v2/grid-no-data-overlay/grid-v2-no-data-overlay.component.js +19 -6
- package/esm5/lib/grid-v2/grid-pagination/grid-pagination.component.js +2 -2
- package/esm5/lib/grid-v2/grid-store/grid.service.js +2 -2
- package/esm5/lib/icon/icon.types.js +1 -1
- package/esm5/lib/version.js +2 -2
- package/fesm2015/datorama-core.js +21 -8
- package/fesm2015/datorama-core.js.map +1 -1
- package/fesm5/datorama-core.js +25 -8
- package/fesm5/datorama-core.js.map +1 -1
- package/i18n/locale-en_US.json +2 -0
- package/lib/grid-v2/grid/grid-v2.types.d.ts +1 -0
- package/lib/grid-v2/grid-filter/grid-filter.component.d.ts +1 -0
- package/lib/grid-v2/grid-no-data-overlay/grid-v2-no-data-overlay.component.d.ts +4 -1
- package/lib/icon/icon.types.d.ts +1 -1
- package/package.json +1 -1
|
@@ -290,7 +290,7 @@ DatoGridPaginationV2Component = __decorate([
|
|
|
290
290
|
Component({
|
|
291
291
|
selector: 'dato-grid-pagination-v2',
|
|
292
292
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
293
|
-
template: "<div class=\"d-flex-row d-flex-auto d-flex-wrap container\" [class.small]=\"smallVersion\"\n [attr.data-pages-count]=\"totalPages\"\n [attr.data-current-page]=\"pageNumbersDisplay.currentPage\"\n [attr.data-page-size]=\"rowsPerPage\"\n [attr.data-rows-count]=\"rowCount\">\n <div *ngIf=\"totalPages > 1\" #navigation\n class=\"navigation d-flex-row d-flex-0-0-auto align-center\">\n\n <!-- First Page -->\n <dato-icon-button *ngIf=\"!disableButtons\"\n class=\"mr-4\" data-auto-id=\"pagiantion-first-page\"\n icon=\"chevron-left-double\"\n datoType=\"secondary\"\n datoSize=\"md\"\n [disabled]=\"prevPageDisabled\"\n (click)=\"navigateFirstPage()\">\n </dato-icon-button>\n\n <!-- Previous Page -->\n <dato-icon-button icon=\"arrow-left\" datoType=\"secondary\" datoSize=\"md\"\n [disabled]=\"prevPageDisabled\" data-auto-id=\"pagiantion-previous-page\"\n (click)=\"navigatePrevPage()\">\n </dato-icon-button>\n\n\n <div class=\"d-flex mx-5 align-center number-container\">\n <dato-link class=\"page-number mx-5\" datoType=\"secondary\" datoSize=\"sm\" data-auto-id=\"pagiantion-previous-batch\"\n *ngIf=\"pageNumbersDisplay.showFirstEllipsis && !smallVersion\"\n (click)=\"showPreviousBatch()\">...\n </dato-link>\n <dato-link class=\"page-number mx-5\" [datoType]=\"page === pageNumbersDisplay.currentPage ? 'primary' : 'secondary'\" datoSize=\"sm\"\n *ngFor=\"let page of pageNumbersDisplay.pages; index as i; trackBy: trackByPage;\" [attr.data-auto-id]=\"'pagiantion-page-' + i\"\n (click)=\"navigatePage(page - 1)\">\n {{page}}\n </dato-link>\n\n <div class=\"d-flex\" *ngIf=\"pageNumbersDisplay.showLastPage && !smallVersion\">\n <dato-link class=\"page-number mx-5\" datoType=\"secondary\" datoSize=\"sm\" data-auto-id=\"pagiantion-next-batch\"\n (click)=\"showNextBatch()\">...</dato-link>\n <dato-link class=\"page-number mx-5\" datoType=\"secondary\" datoSize=\"sm\"\n [attr.data-auto-id]=\"'pagiantion-page-' + totalPages\"\n (click)=\"navigatePage(totalPages - 1)\">\n {{totalPages}}\n </dato-link>\n </div>\n\n </div>\n\n <!-- Next Page -->\n <dato-icon-button icon=\"arrow-right\" datoType=\"secondary\" datoSize=\"md\"\n (click)=\"navigateNextPage()\" data-auto-id=\"pagiantion-next-page\"\n [disabled]=\"nextPageDisabled\">\n </dato-icon-button>\n\n <!-- Last Page -->\n <dato-icon-button *ngIf=\"!disableButtons\"\n class=\"ml-4\" icon=\"chevron-right-double\"\n datoType=\"secondary\" datoSize=\"md\" data-auto-id=\"pagiantion-last-page\"\n [disabled]=\"nextPageDisabled\"\n (click)=\"navigatePage(totalPages - 1)\">\n </dato-icon-button>\n\n </div>\n\n <div *ngIf=\"totalPages > 1 && !smallVersion\"\n class=\"separator mx-10 my-auto primary-100-background-color\">\n </div>\n\n <div class=\"total d-flex-0-0-auto d-flex-row align-center\">\n <span class=\"dato-note primary-300-color\">{{rowsRange}}</span>\n </div>\n\n <div *ngIf=\"showBottomControls\" class=\"grid-controls d-flex d-flex-1 justify-end\">\n <dato-icon-button *ngIf=\"hasRowGroupColumns\" [icon]=\"isExpanded ? 'collapse' : 'expand'\" datoType=\"secondary\"\n datoSize=\"md\" (click)=\"toggleGroupsState()\" data-auto-id=\"pagination-expand-collapse\"\n [datoTooltipV2]=\"isExpanded ? 'core.collapse-rows' : 'core.expand-rows'\">\n </dato-icon-button>\n\n <dato-icon-button class=\"mx-4\" icon=\"maximize-horizontal\" datoType=\"secondary\" datoSize=\"md\"\n (click)=\"autoFitGrid('content')\" [datoTooltipV2]=\"'core.fit-to-
|
|
293
|
+
template: "<div class=\"d-flex-row d-flex-auto d-flex-wrap container\" [class.small]=\"smallVersion\"\n [attr.data-pages-count]=\"totalPages\"\n [attr.data-current-page]=\"pageNumbersDisplay.currentPage\"\n [attr.data-page-size]=\"rowsPerPage\"\n [attr.data-rows-count]=\"rowCount\">\n <div *ngIf=\"totalPages > 1\" #navigation\n class=\"navigation d-flex-row d-flex-0-0-auto align-center\">\n\n <!-- First Page -->\n <dato-icon-button *ngIf=\"!disableButtons\"\n class=\"mr-4\" data-auto-id=\"pagiantion-first-page\"\n icon=\"chevron-left-double\"\n datoType=\"secondary\"\n datoSize=\"md\"\n [disabled]=\"prevPageDisabled\"\n (click)=\"navigateFirstPage()\">\n </dato-icon-button>\n\n <!-- Previous Page -->\n <dato-icon-button icon=\"arrow-left\" datoType=\"secondary\" datoSize=\"md\"\n [disabled]=\"prevPageDisabled\" data-auto-id=\"pagiantion-previous-page\"\n (click)=\"navigatePrevPage()\">\n </dato-icon-button>\n\n\n <div class=\"d-flex mx-5 align-center number-container\">\n <dato-link class=\"page-number mx-5\" datoType=\"secondary\" datoSize=\"sm\" data-auto-id=\"pagiantion-previous-batch\"\n *ngIf=\"pageNumbersDisplay.showFirstEllipsis && !smallVersion\"\n (click)=\"showPreviousBatch()\">...\n </dato-link>\n <dato-link class=\"page-number mx-5\" [datoType]=\"page === pageNumbersDisplay.currentPage ? 'primary' : 'secondary'\" datoSize=\"sm\"\n *ngFor=\"let page of pageNumbersDisplay.pages; index as i; trackBy: trackByPage;\" [attr.data-auto-id]=\"'pagiantion-page-' + i\"\n (click)=\"navigatePage(page - 1)\">\n {{page}}\n </dato-link>\n\n <div class=\"d-flex\" *ngIf=\"pageNumbersDisplay.showLastPage && !smallVersion\">\n <dato-link class=\"page-number mx-5\" datoType=\"secondary\" datoSize=\"sm\" data-auto-id=\"pagiantion-next-batch\"\n (click)=\"showNextBatch()\">...</dato-link>\n <dato-link class=\"page-number mx-5\" datoType=\"secondary\" datoSize=\"sm\"\n [attr.data-auto-id]=\"'pagiantion-page-' + totalPages\"\n (click)=\"navigatePage(totalPages - 1)\">\n {{totalPages}}\n </dato-link>\n </div>\n\n </div>\n\n <!-- Next Page -->\n <dato-icon-button icon=\"arrow-right\" datoType=\"secondary\" datoSize=\"md\"\n (click)=\"navigateNextPage()\" data-auto-id=\"pagiantion-next-page\"\n [disabled]=\"nextPageDisabled\">\n </dato-icon-button>\n\n <!-- Last Page -->\n <dato-icon-button *ngIf=\"!disableButtons\"\n class=\"ml-4\" icon=\"chevron-right-double\"\n datoType=\"secondary\" datoSize=\"md\" data-auto-id=\"pagiantion-last-page\"\n [disabled]=\"nextPageDisabled\"\n (click)=\"navigatePage(totalPages - 1)\">\n </dato-icon-button>\n\n </div>\n\n <div *ngIf=\"totalPages > 1 && !smallVersion\"\n class=\"separator mx-10 my-auto primary-100-background-color\">\n </div>\n\n <div class=\"total d-flex-0-0-auto d-flex-row align-center\">\n <span class=\"dato-note primary-300-color\">{{rowsRange}}</span>\n </div>\n\n <div *ngIf=\"showBottomControls\" class=\"grid-controls d-flex d-flex-1 justify-end\">\n <dato-icon-button *ngIf=\"hasRowGroupColumns\" [icon]=\"isExpanded ? 'collapse' : 'expand'\" datoType=\"secondary\"\n datoSize=\"md\" (click)=\"toggleGroupsState()\" data-auto-id=\"pagination-expand-collapse\"\n [datoTooltipV2]=\"isExpanded ? 'core.collapse-rows' : 'core.expand-rows'\">\n </dato-icon-button>\n\n <dato-icon-button class=\"mx-4\" icon=\"maximize-horizontal\" datoType=\"secondary\" datoSize=\"md\"\n (click)=\"autoFitGrid('content')\" [datoTooltipV2]=\"'core.fit-to-text'\"\n data-auto-id=\"pagination-fit-to-content\">\n </dato-icon-button>\n\n <dato-icon-button icon=\"minimize-horizontal\" datoType=\"secondary\" datoSize=\"md\"\n (click)=\"autoFitGrid('container')\" [datoTooltipV2]=\"'core.revert-to-default-size'\"\n data-auto-id=\"pagination-fit-to-container\">\n </dato-icon-button>\n </div>\n</div>\n",
|
|
294
294
|
providers: [DecimalPipe],
|
|
295
295
|
styles: [":host{padding:12px 0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;min-height:25px}:host .container{height:25px}:host .navigation .page-number{transition:color .3s ease-in-out}:host .navigation .page-number:first-of-type{margin-left:7px}:host .navigation .page-number:last-of-type{margin-right:7px}:host .separator{width:1px;height:25px}:host .container.small .navigation,:host .container.small .total{margin-top:8px;margin-left:auto;margin-right:auto}"]
|
|
296
296
|
}),
|
|
@@ -302,4 +302,4 @@ DatoGridPaginationV2Component = __decorate([
|
|
|
302
302
|
DecimalPipe])
|
|
303
303
|
], DatoGridPaginationV2Component);
|
|
304
304
|
export { DatoGridPaginationV2Component };
|
|
305
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1wYWdpbmF0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BkYXRvcmFtYS9jb3JlLyIsInNvdXJjZXMiOlsibGliL2dyaWQtdjIvZ3JpZC1wYWdpbmF0aW9uL2dyaWQtcGFnaW5hdGlvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOztBQUVILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFckgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUMzRixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBU3ZDLElBQWEsNkJBQTZCLEdBQTFDLE1BQWEsNkJBQTZCO0lBdUR4QyxZQUNVLEdBQXNCLEVBQ3RCLFNBQStCLEVBQy9CLFNBQW9CLEVBQ3BCLFdBQXdCLEVBQ3hCLFVBQXVDLEVBQ3ZDLFdBQXdCO1FBTHhCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLGNBQVMsR0FBVCxTQUFTLENBQXNCO1FBQy9CLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFDcEIs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Q0FBQzthQUN0QjtTQUNGO2FBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsRUFBRTtZQUNyRCxXQUFXLEdBQUcsQ0FBQyxDQUFDO1NBQ2pCO2FBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUU7WUFDaEQsV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3pEO1FBQ0QsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVPLGdCQUFnQixDQUFDLFVBQWtCO1FBQ3pDLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUM3RixDQUFDO0NBQ0YsQ0FBQTs7WUF6UGdCLGlCQUFpQjtZQUNYLG9CQUFvQjtZQUNwQixTQUFTO1lBQ1AsV0FBVztZQUNaLDJCQUEyQjtZQUMxQixXQUFXOztBQXREbEM7SUFEQyxTQUFTLENBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDOzhCQUNyQixVQUFVO3FDQUFWLFVBQVU7NERBSzlCO0FBWlUsNkJBQTZCO0lBUHpDLFNBQVMsQ0FBQztRQUNULFFBQVEsRUFBRSx5QkFBeUI7UUFDbkMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07UUFDL0MsdzVJQUErQztRQUUvQyxTQUFTLEVBQUUsQ0FBQyxXQUFXLENBQUM7O0tBQ3pCLENBQUM7cUNBeURlLGlCQUFpQjtRQUNYLG9CQUFvQjtRQUNwQixTQUFTO1FBQ1AsV0FBVztRQUNaLDJCQUEyQjtRQUMxQixXQUFXO0dBN0R2Qiw2QkFBNkIsQ0FpVHpDO1NBalRZLDZCQUE2QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBEYXRvcmFtYS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBBcGFjaGUgTGljZW5zZSAyLjAgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vZGF0b3JhbWEvY2xpZW50LWNvcmUvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICovXG5cbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgR3JpZEFwaSwgUm93Tm9kZSB9IGZyb20gJ2FnLWdyaWQtY29tbXVuaXR5JztcbmltcG9ydCB7IHVudGlsRGVzdHJveWVkIH0gZnJvbSAnbmd4LXRha2UtdW50aWwtZGVzdHJveSc7XG5pbXBvcnQgeyBEYXRvVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RyYW5zbGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IHN3aXRjaE1hcCwgdGFwLCB0aHJvdHRsZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBHcmlkUXVlcnkgfSBmcm9tICcuLi9ncmlkLXN0b3JlL2dyaWQucXVlcnknO1xuaW1wb3J0IHsgRGF0b0dyaWRDb250cm9sbGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vZ3JpZC1jb250cm9sbGVyL2dyaWQtY29udHJvbGxlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgaXNOaWwgfSBmcm9tICcuLi8uLi91dGlscy92YWxpZGF0b3JzJztcbmltcG9ydCB7IERlY2ltYWxQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEdyaWRTZXJ2aWNlIH0gZnJvbSAnLi4vZ3JpZC1zdG9yZS9ncmlkLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0b0dyaWREYXRhQ2hhbmdlZEV2ZW50IH0gZnJvbSAnLi4vZ3JpZC9ncmlkLXYyLnR5cGVzJztcbmltcG9ydCB7IHRhcE9uY2UgfSBmcm9tICcuLi8uLi9yeC90YXAnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkYXRvLWdyaWQtcGFnaW5hdGlvbi12MicsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICB0ZW1wbGF0ZVVybDogJy4vZ3JpZC1wYWdpbmF0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZ3JpZC1wYWdpbmF0aW9uLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW0RlY2ltYWxQaXBlXVxufSlcbmV4cG9ydCBjbGFzcyBEYXRvR3JpZFBhZ2luYXRpb25WMkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8qKlxuICAgKiBUaGlzIHNldHRlciBpcyB1c2VkIHRvIGFzc2lnbiB0aGUgbmF2aWdhdGlvbiBlbGVtZW50IHJlZiBhbmQgdG8gc2V0XG4gICAqIHRoZSBwYWdpbmF0aW9uIHNpemUgd2hlbiB0aGUgY29tcG9uZW50IHN0YXJ0c1xuICAgKiBAcGFyYW0ge0VsZW1lbnRSZWZ9IGNvbnRlbnRcbiAgICovXG4gIEBWaWV3Q2hpbGQoJ25hdmlnYXRpb24nLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBzZXQgY29udGVudChjb250ZW50OiBFbGVtZW50UmVmKSB7XG4gICAgdGhpcy5uYXZpZ2F0aW9uRWxlbWVudCA9IGNvbnRlbnQ7XG4gICAgaWYgKGNvbnRlbnQgJiYgdGhpcy5zbWFsbFZlcnNpb24gPT09IG51bGwpIHtcbiAgICAgIHRoaXMuY2FsY3VsYXRlTmF2aWdhdGlvblNpemUoKTtcbiAgICB9XG4gIH1cblxuICAvLyBudW1iZXIgb2Ygcm93cyBpbiB0aGUgdGFibGVcbiAgcm93Q291bnQ6IG51bWJlcjtcbiAgcm93c1BlclBhZ2U6IG51bWJlcjtcbiAgLy8gd2hlbiB0aGUgd2lkZ2V0J3Mgd2lkdGggaXMgc21hbGxlciB0aGFuIFhTX0RJU1BMQVlfU0laRSBkaXNhYmxlIGdvIHRvIGZpcnN0L2xhc3QgYnV0dG9uc1xuICBkaXNhYmxlQnV0dG9uczogYm9vbGVhbiA9IG51bGw7XG4gIC8vIHdoZW4gdGhlIHdpZGdldCdzIHdpZHRoIGlzIHNtYWxsZXIgdGhhbiBTTUFMTF9ESVNQTEFZX1NJWkUgY2hhbmdlIHRvIHNtYWxsIHBhZ2luYXRpb24gdmlld1xuICBzbWFsbFZlcnNpb246IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcbiAgLy8gbnVtYmVyIG9mIHBhZ2VzIGluIHRoZSB0YWJsZVxuICB0b3RhbFBhZ2VzOiBudW1iZXI7XG4gIC8vIFRoZSBkaXNwbGF5IHJvd3MgcmFuZ2VcbiAgcm93c1JhbmdlOiBzdHJpbmc7XG4gIC8vIG1hbmFnaW5nIG9iamVjdCBmb3IgdGhlIG5hdmlnYXRpb25cbiAgcGFnZU51bWJlcnNEaXNwbGF5ID0ge1xuICAgIGN1cnJlbnRQYWdlOiAxLFxuICAgIHBhZ2VzOiBbXSxcbiAgICBzaG93Rmlyc3RFbGxpcHNpczogZmFsc2UsXG4gICAgc2hvd0xhc3RQYWdlOiBmYWxzZVxuICB9O1xuXG4gIC8vIFNob3cgZml0IGNlbGwgY29udGVudCBhbmQgY29sbGFwc2UvZXhwYW5kIHJvdyBncm91cHMgY29udHJvbHNcbiAgc2hvd0JvdHRvbUNvbnRyb2xzID0gZmFsc2U7XG4gIGlzRXhwYW5kZWQgPSB0cnVlO1xuICBoYXNSb3dHcm91cENvbHVtbnMgPSBmYWxzZTtcblxuICAvLyBob3cgbWFueSBudW1iZXJzIGFyZSBzaG93aW5nIG9uIHRoZSBzYW1lIHRpbWUgYmVzaWRlcyB0aGUgbGFzdCBwYWdlIG51bWJlclxuICBwcml2YXRlIF9wYWdlc0luVmlldzogbnVtYmVyO1xuICAvLyBUaGUgbnVtYmVyIG9mIHBhZ2VzIGRpc3BsYXllZCBvbiBlYWNoIHNpZGUgb2YgdGhlIHNlbGVjdGVkIHBhZ2UuXG4gIHByaXZhdGUgcGFnZXNPblNpZGVzOiBudW1iZXI7XG4gIC8vIGlmIHRoZSBudW1iZXIgb2YgcGFnZXMgaW4gdGhlIHRhYmxlIGZpdHMgdGhlIG51bWJlciBvZiBkaXNwbGF5aW5nIHBhZ2VzXG4gIHByaXZhdGUgcGFnZXNGaXRWaWV3OiBib29sZWFuO1xuICAvLyBob3cgbWFueSBudW1iZXJzIHRvIHNob3cgb24gZWFjaCBzaWRlIGJlc2lkZXMgdGhlIHNlbGVjdGVkIG51bWJlclxuICBwcml2YXRlIG5hdmlnYXRpb25FbGVtZW50OiBFbGVtZW50UmVmO1xuICBwcml2YXRlIGlzU2VydmVyU2lkZVBhZ2luYXRpb24gPSBmYWxzZTtcbiAgcHJpdmF0ZSBncmlkQXBpOiBHcmlkQXBpO1xuICAvLyBUaGUgbnVtYmVyIG9mIHBhZ2VzIGRpc3BsYXllZCBpbiB0aGUgbmF2aWdhdGlvbiBwYW5lbCBmb3IgZWFjaCB2aWV3IGFzIGRlZmluZWQgYnkgcHJvZHVjdC5cbiAgcHJpdmF0ZSByZWFkb25seSBNSU5JX0RJU1BMQVlfTEVOR1RIOiBudW1iZXIgPSAyO1xuICBwcml2YXRlIHJlYWRvbmx5IERJU1BMQVlfTEVOR1RIOiBudW1iZXIgPSA1O1xuICAvLyBXaWRnZXQncyB3aWR0aCB0aGUgZGV0ZXJtaW5lcyB0aGUgcGFnaW5hdGlvbiB2aWV3IHR5cGUgWyBzbWFsbCwgeHNdIGFzIGRlZmluZWQgYnkgcHJvZHVjdC5cbiAgcHJpdmF0ZSByZWFkb25seSBYU19ESVNQTEFZX1NJWkU6IG51bWJlciA9IDE2MDtcbiAgcHJpdmF0ZSByZWFkb25seSBTTUFMTF9ESVNQTEFZX1NJWkU6IG51bWJlciA9IDM5MDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IERhdG9UcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZ3JpZFF1ZXJ5OiBHcmlkUXVlcnksXG4gICAgcHJpdmF0ZSBncmlkU2VydmljZTogR3JpZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb250cm9sbGVyOiBEYXRvR3JpZENvbnRyb2xsZXJDb21wb25lbnQsXG4gICAgcHJpdmF0ZSBkZWNpbWFsUGlwZTogRGVjaW1hbFBpcGVcbiAgKSB7fVxuXG4gIGdldCBwcmV2UGFnZURpc2FibGVkKCkge1xuICAgIHJldHVybiB0aGlzLnBhZ2VOdW1iZXJzRGlzcGxheS5jdXJyZW50UGFnZSA9PT0gMTtcbiAgfVxuXG4gIGdldCBuZXh0UGFnZURpc2FibGVkKCkge1xuICAgIHJldHVybiB0aGlzLnBhZ2VOdW1iZXJzRGlzcGxheS5jdXJyZW50UGFnZSA9PT0gdGhpcy50b3RhbFBhZ2VzO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5ncmlkUXVlcnlcbiAgICAgIC53YWl0Rm9yR3JpZCgoKSA9PiB0aGlzLmdyaWRRdWVyeS5ncmlkUmVmLmZpbHRlckNoYW5nZWQpXG4gICAgICAucGlwZSh1bnRpbERlc3Ryb3llZCh0aGlzKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmdyaWRBcGkucGFnaW5hdGlvbkdvVG9QYWdlKDApO1xuICAgICAgICB0aGlzLmluaXRQYWdpbmF0aW9uKCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuZ3JpZFF1ZXJ5LmdyaWRSZWFkeSRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJvd0dyb3VwQ29sdW1ucyA9IHRoaXMuZ3JpZFF1ZXJ5LmFwaS5jb2x1bW5zLmdldFJvd0dyb3VwQ29sdW1ucygpO1xuXG4gICAgICAgICAgdGhpcy5ncmlkQXBpID0gdGhpcy5ncmlkUXVlcnkuYXBpLmdyaWQ7XG4gICAgICAgICAgdGhpcy5zaG93Qm90dG9tQ29udHJvbHMgPSB0aGlzLmdyaWRRdWVyeS5nZXRHcmlkT3B0aW9ucygpLnNob3dCb3R0b21Db250cm9scztcbiAgICAgICAgICB0aGlzLmhhc1Jvd0dyb3VwQ29sdW1ucyA9IHJvd0dyb3VwQ29sdW1ucyAmJiByb3dHcm91cENvbHVtbnMubGVuZ3RoID4gMDtcbiAgICAgICAgfSksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc1NlcnZlclNpZGVQYWdpbmF0aW9uID0gdGhpcy5ncmlkUXVlcnkuaXNTZXJ2ZXJTaWRlO1xuICAgICAgICAgIHJldHVybiB0aGlzLmlzU2VydmVyU2lkZVBhZ2luYXRpb24gPyB0aGlzLmdyaWRRdWVyeS5zZXJ2ZXJEYXRhTG9hZGVkJCA6IHRoaXMuZ3JpZFF1ZXJ5LnJvd0RhdGFDaGFuZ2VkJDtcbiAgICAgICAgfSksXG4gICAgICAgIHRocm90dGxlVGltZSgxMDApLFxuICAgICAgICB0YXBPbmNlKCgpID0+IHRoaXMuaW5pdFBhZ2luYXRpb24oKSksXG4gICAgICAgIHVudGlsRGVzdHJveWVkKHRoaXMpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCh7IHBhZ2luYXRpb25QYWdlID0gMSB9OiBEYXRvR3JpZERhdGFDaGFuZ2VkRXZlbnQpID0+IHtcbiAgICAgICAgLyoqICBBZyBncmlkIGluZGV4IGlzIGZyb20gMCwgYnV0IHRoZSBpbmRleCBmaXJlZCBmcm9tIHRoZSBldmVudCBzdGFydCBmcm9tIDEqL1xuICAgICAgICB0aGlzLmluaXRQYWdpbmF0aW9uKHBhZ2luYXRpb25QYWdlIC0gMSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNhbGN1bGF0ZSB0aGUgcm93IGNvdW50IGFuZCBwYWdlIGxlbmd0aHNcbiAgICovXG4gIGNhbGN1bGF0ZVJvd3NDb3VudCh0b3RhbFJvd3M6IG51bWJlcikge1xuICAgIHRoaXMudG90YWxQYWdlcyA9IHRvdGFsUm93cyA/IE1hdGguY2VpbCh0b3RhbFJvd3MgLyB0aGlzLnJvd3NQZXJQYWdlKSA6IHRoaXMuZ3JpZEFwaS5wYWdpbmF0aW9uR2V0VG90YWxQYWdlcygpO1xuICAgIHRoaXMucm93Q291bnQgPSB0aGlzLmdyaWRBcGkucGFnaW5hdGlvbkdldFJvd0NvdW50KCk7XG4gICAgdGhpcy5zZXRSb3dzRGlzcGxheVJhbmdlKHRoaXMucGFnZU51bWJlcnNEaXNwbGF5LmN1cnJlbnRQYWdlKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBpbml0UGFnaW5hdGlvbihwYWdlTnVtYmVyID0gMCkge1xuICAgIGNvbnN0IHsgdG90YWxSb3dzLCBlbmFibGVkIH0gPSB0aGlzLmdyaWRRdWVyeS5zZXJ2ZXJTaWRlQ29uZmlnO1xuICAgIGlmIChlbmFibGVkICYmIGlzTmlsKHRvdGFsUm93cykpIHJldHVybjtcbiAgICAvKiogcmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBwYWdlcyBzdGFydGluZyBmcm9tIDEgKi9cbiAgICB0aGlzLnJvd3NQZXJQYWdlID0gdGhpcy5ncmlkQXBpLnBhZ2luYXRpb25HZXRQYWdlU2l6ZSgpO1xuICAgIHRoaXMuY2FsY3VsYXRlUm93c0NvdW50KHRvdGFsUm93cyk7XG4gICAgLyoqIHNldCB0aGUgaW5pdCB2YWx1ZSBvZiB0aGUgcGFnaW5hdGlvbiB2aWV3IHRvIG5vcm1hbCBzaXplICovXG4gICAgdGhpcy5wYWdlc0luVmlldyA9IHRoaXMuRElTUExBWV9MRU5HVEg7XG4gICAgLyoqIGN1cnJlbnQgcGFnZSBpbmRleCBzdGFydHMgZnJvbSAwICovXG4gICAgdGhpcy5uYXZpZ2F0ZVBhZ2UocGFnZU51bWJlcik7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBudW1iZXIgb2YgcGFnZSBudW1iZXJzIHNob3dpbmcgYXQgdGhlIHNhbWUgdGltZSBpbiB0aGUgbmF2aWdhdGlvblxuICAgKiBwYW5lbCAmIHVwZGF0ZSB0aGUgbnVtYmVyIG9mIHBhZ2VzIGRpc3BsYXllZCBvbiBlYWNoIHNpZGUgb2YgdGhlIHNlbGVjdGVkIHBhZ2UuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBuZXdOdW1iZXJzTGVuZ3RoIC0gVGhlIG5ldyBsZW5ndGggb2YgdGhlIGRpc3BsYXlpbmcgbnVtYmVyc1xuICAgKi9cbiAgc2V0IHBhZ2VzSW5WaWV3KG5ld051bWJlcnNMZW5ndGg6IG51bWJlcikge1xuICAgIHRoaXMuX3BhZ2VzSW5WaWV3ID0gbmV3TnVtYmVyc0xlbmd0aDtcbiAgICB0aGlzLnBhZ2VzT25TaWRlcyA9IE1hdGguZmxvb3IodGhpcy5fcGFnZXNJblZpZXcgLyAyKTtcbiAgICB0aGlzLnBhZ2VzRml0VmlldyA9IHRoaXMuX3BhZ2VzSW5WaWV3ICsgMSA+PSB0aGlzLnRvdGFsUGFnZXM7XG4gICAgLy8gaW52YWxpZGF0ZSBkaXNwbGF5aW5nIHBhZ2VzIHVwb24gcmVzaXplXG4gICAgdGhpcy5wYWdlTnVtYmVyc0Rpc3BsYXkucGFnZXMgPSBbXTtcbiAgfVxuXG4gIC8qKiBUT0RPIFRoaXMgaXMgbm90IGxpc3RlbmluZyB0byBzaXplIGNoYW5nZXMgKi9cbiAgY2FsY3VsYXRlTmF2aWdhdGlvblNpemUoKSB7XG4gICAgaWYgKHRoaXMubmF2aWdhdGlvbkVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnRXaWR0aCA9IHRoaXMubmF2aWdhdGlvbkVsZW1lbnQubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50LmNsaWVudFdpZHRoO1xuICAgICAgdGhpcy5kaXNhYmxlQnV0dG9ucyA9IGVsZW1lbnRXaWR0aCA8IHRoaXMuWFNfRElTUExBWV9TSVpFO1xuICAgICAgaWYgKGVsZW1lbnRXaWR0aCA8IHRoaXMuU01BTExfRElTUExBWV9TSVpFKSB7XG4gICAgICAgIGlmICh0aGlzLl9wYWdlc0luVmlldyAhPT0gdGhpcy5NSU5JX0RJU1BMQVlfTEVOR1RIKSB7XG4gICAgICAgICAgdGhpcy5zbWFsbFZlcnNpb24gPSB0cnVlO1xuICAgICAgICAgIHRoaXMucGFnZXNJblZpZXcgPSB0aGlzLk1JTklfRElTUExBWV9MRU5HVEg7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLl9wYWdlc0luVmlldyAhPT0gdGhpcy5ESVNQTEFZX0xFTkdUSCkge1xuICAgICAgICAgIHRoaXMuc21hbGxWZXJzaW9uID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5wYWdlc0luVmlldyA9IHRoaXMuRElTUExBWV9MRU5HVEg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTmF2aWdhdGVzIHRvIGEgZ2l2ZW4gcGFnZS5cbiAgICogdXBkYXRlcyB0aGUgZGlzcGxheWluZyBwYWdlIG51bWJlcnMgYW5kIHRoZSBjdXJyZW50IG51bWJlci5cbiAgICogQHBhcmFtIHBhZ2VOdW1iZXIgLSBUaGUgcGFnZSBudW1iZXIgdG8gbmF2aWdhdGUgdG9cbiAgICovXG4gIG5hdmlnYXRlUGFnZShwYWdlTnVtYmVyOiBudW1iZXIpIHtcbiAgICBpZiAocGFnZU51bWJlciA+PSAwICYmIHBhZ2VOdW1iZXIgPD0gdGhpcy50b3RhbFBhZ2VzIC0gMSkge1xuICAgICAgdGhpcy5zaG91bGRTaG93TG9hZGVyKHBhZ2VOdW1iZXIpICYmIHRoaXMuZ3JpZFNlcnZpY2Uuc2V0TG9hZGluZyh0cnVlKTtcbiAgICAgIHRoaXMuZ3JpZEFwaS5wYWdpbmF0aW9uR29Ub1BhZ2UocGFnZU51bWJlcik7XG4gICAgICAvLyBBZGQgMSBiZWNhdXNlIGFnLWdyaWQgQVBJIHdvcmtzIHdpdGggZmlyc3QgaW5kZXggMFxuICAgICAgY29uc3QgZGlzcGxheU51bWJlciA9IHBhZ2VOdW1iZXIgKyAxO1xuICAgICAgdGhpcy5wYWdlTnVtYmVyc0Rpc3BsYXkuY3VycmVudFBhZ2UgPSBkaXNwbGF5TnVtYmVyO1xuXG4gICAgICBpZiAodGhpcy5wYWdlTnVtYmVyc0Rpc3BsYXkucGFnZXMubGVuZ3RoID09PSAwIHx8ICF0aGlzLnBhZ2VzRml0Vmlldykge1xuICAgICAgICB0aGlzLnBhZ2VOdW1iZXJzRGlzcGxheS5wYWdlcyA9IHRoaXMuZ2V0UGFnZXMoZGlzcGxheU51bWJlcik7XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCB0aGUgZGlzcGxheWluZyByb3dzIHJhbmdlXG4gICAgICB0aGlzLnNldFJvd3NEaXNwbGF5UmFuZ2UoZGlzcGxheU51bWJlcik7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgbmF2aWdhdGVGaXJzdFBhZ2UoKSB7XG4gICAgdGhpcy5uYXZpZ2F0ZVBhZ2UoMCk7XG4gIH1cblxuICBuYXZpZ2F0ZU5leHRQYWdlKCkge1xuICAgIHRoaXMubmF2aWdhdGVQYWdlKHRoaXMucGFnZU51bWJlcnNEaXNwbGF5LmN1cnJlbnRQYWdlKTtcbiAgfVxuXG4gIG5hdmlnYXRlUHJldlBhZ2UoKSB7XG4gICAgLyoqIGFnLWdyaWQgQVBJIHdvcmtzIHdpdGggZmlyc3QgaW5kZXggMCBzbyB3ZSBuZWVkIHRvIHJlZHVjZSAyIGluc3RlYWQgb2Ygb25lICovXG4gICAgY29uc3QgcHJldmlvdXNQYWdlSW5kZXggPSB0aGlzLnBhZ2VOdW1iZXJzRGlzcGxheS5jdXJyZW50UGFnZSAtIDI7XG4gICAgdGhpcy5uYXZpZ2F0ZVBhZ2UocHJldmlvdXNQYWdlSW5kZXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIHVwZGF0ZXMgdGhlIGRpc3BsYXlpbmcgcGFnZSBudW1iZXJzIHRvIHNob3cgdGhlIG5leHQgbnVtYmVycyBzZXRcbiAgICovXG4gIHNob3dOZXh0QmF0Y2goKSB7XG4gICAgY29uc3QgYW5jaG9yID0gdGhpcy5wYWdlTnVtYmVyc0Rpc3BsYXkucGFnZXNbMF0gKyB0aGlzLl9wYWdlc0luVmlldyArIHRoaXMucGFnZXNPblNpZGVzO1xuICAgIHRoaXMucGFnZU51bWJlcnNEaXNwbGF5LnBhZ2VzID0gdGhpcy5nZXRQYWdlcyhhbmNob3IpO1xuICB9XG5cbiAgLyoqXG4gICAqIHVwZGF0ZXMgdGhlIGRpc3BsYXlpbmcgcGFnZSBudW1iZXJzIHRvIHNob3cgdGhlIHByZXZpb3VzIG51bWJlcnMgc2V0XG4gICAqL1xuICBzaG93UHJldmlvdXNCYXRjaCgpIHtcbiAgICBjb25zdCBhbmNob3IgPSB0aGlzLnBhZ2VOdW1iZXJzRGlzcGxheS5wYWdlc1swXSAtIHRoaXMuX3BhZ2VzSW5WaWV3ICsgdGhpcy5wYWdlc09uU2lkZXM7XG4gICAgdGhpcy5wYWdlTnVtYmVyc0Rpc3BsYXkucGFnZXMgPSB0aGlzLmdldFBhZ2VzKGFuY2hvcik7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHRyYWNrQnkgZnVuY3Rpb24gZm9yIHRoZSBuZ0ZvclxuICAgKiBAcGFyYW0gaW5kZXggLSBjdXJyZW50IGl0ZW0gaW5kZXhcbiAgICogQHBhcmFtIHBhZ2UgLSB0aGUgY3VycmVudCBpdGVtJ3MgcGFnZSBudW1iZXJcbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgdHJhY2tCeVBhZ2UoaW5kZXg6IG51bWJlciwgcGFnZTogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHBhZ2U7XG4gIH1cblxuICB0b2dnbGVHcm91cHNTdGF0ZSgpIHtcbiAgICB0aGlzLmlzRXhwYW5kZWQgPyB0aGlzLmdyaWRBcGkuY29sbGFwc2VBbGwoKSA6IHRoaXMuZ3JpZEFwaS5leHBhbmRBbGwoKTtcbiAgICB0aGlzLmlzRXhwYW5kZWQgPSAhdGhpcy5pc0V4cGFuZGVkO1xuICB9XG5cbiAgYXV0b0ZpdEdyaWQodHlwZTogJ2NvbnRhaW5lcicgfCAnY29udGVudCcpIHtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLmZpdEdyaWQodHlwZSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHt9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHJvd3MgZGlzcGxheSBzdHJpbmdcbiAgICogQHBhcmFtIGRpc3BsYXlOdW1iZXIgLSBUaGUgY3VycmVudCBwYWdlIG51bWJlciAoc3RhcnRpbmcgaW5kZXggMSlcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgc2V0Um93c0Rpc3BsYXlSYW5nZShkaXNwbGF5TnVtYmVyKTogdm9pZCB7XG4gICAgLyoqIERlY3JlYXNlIGJ5IDEgYmVjYXVzZSBhZy1ncmlkIEFQSSB3b3JrcyB3aXRoIGZpcnN0IGluZGV4IDAgKi9cbiAgICBjb25zdCBwYWdlTnVtYmVyID0gZGlzcGxheU51bWJlciAtIDE7XG4gICAgY29uc3QgZmlyc3RSb3dJbmRleCA9IDEgKyBwYWdlTnVtYmVyICogdGhpcy5yb3dzUGVyUGFnZTtcbiAgICBjb25zdCBsYXN0Um93ID0gKHBhZ2VOdW1iZXIgKyAxKSAqIHRoaXMucm93c1BlclBhZ2U7XG4gICAgY29uc3QgbGFzdFJvd0luZGV4ID0gdGhpcy5yb3dDb3VudCA+IGxhc3RSb3cgPyBsYXN0Um93IDogdGhpcy5yb3dDb3VudDtcbiAgICB0aGlzLnJvd3NSYW5nZSA9XG4gICAgICB0aGlzLnJvd0NvdW50ID4gMFxuICAgICAgICA/IHRoaXMudHJhbnNsYXRlLnRyYW5zZm9ybSgnY29yZS5pdGVtc1JhbmdlJywge1xuICAgICAgICAgICAgcmFuZ2U6IGAke3RoaXMuZGVjaW1hbFBpcGUudHJhbnNmb3JtKGZpcnN0Um93SW5kZXgpfSAtICR7dGhpcy5kZWNpbWFsUGlwZS50cmFuc2Zvcm0obGFzdFJvd0luZGV4KX1gLFxuICAgICAgICAgICAgbnVtYmVyOiB0aGlzLmRlY2ltYWxQaXBlLnRyYW5zZm9ybSh0aGlzLnJvd0NvdW50KVxuICAgICAgICAgIH0pXG4gICAgICAgIDogdGhpcy50cmFuc2xhdGUudHJhbnNmb3JtKCdjb3JlLm51bWJlck9mSXRlbXMnLCB7IG51bWJlcjogMCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGEgbnVtYmVyIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIHRoZSBkaXNwbGF5aW5nIG51bWJlcnMuXG4gICAqIEBwYXJhbSBhbmNob3IgLSBUaGUgbnVtYmVyIHRvIHVzZSBhcyBhbiBhbmNob3IgZm9yIHRoZSBjYWxjdWxhdGlvbnMuXG4gICAqIEByZXR1cm4ge251bWJlcltdfSAtIEFuIGFycmF5IG9mIHRoZSBuZXcgbnVtYmVycyB0byBkaXNwbGF5XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGdldFBhZ2VzKGFuY2hvcjogbnVtYmVyKTogbnVtYmVyW10ge1xuICAgIGNvbnN0IHBhZ2VzVG9EaXNwbGF5ID0gW107XG4gICAgLy8gaW5kaWNhdGVzIHJhdGhlciB0aGUgdGFibGUgaGFzIG1vcmUgcGFnZXMgdGhhbiB0aGUgZGlzcGxheSBsZW5ndGgsIHdlIGFkZCAxIGJlY2F1c2Ugb2ZcbiAgICAvLyBhIGxvZ2ljIHRoYXQgc2F5cyB0aGF0IGlmIHlvdXIgY3VycmVudCB2aWV3IGlzIDEgbnVtYmVyIGF3YXkgZnJvbSB0aGUgbGFzdCBwYWdlXG4gICAgLy8gZGlzcGxheSBoaW0gYXMgd2VsbC5cbiAgICB0aGlzLnBhZ2VOdW1iZXJzRGlzcGxheS5zaG93TGFzdFBhZ2UgPSAhdGhpcy5wYWdlc0ZpdFZpZXcgJiYgYW5jaG9yICsgdGhpcy5wYWdlc09uU2lkZXMgPCB0aGlzLnRvdGFsUGFnZXM7XG4gICAgdGhpcy5wYWdlTnVtYmVyc0Rpc3BsYXkuc2hvd0ZpcnN0RWxsaXBzaXMgPSAhdGhpcy5wYWdlc0ZpdFZpZXcgJiYgYW5jaG9yIC0gdGhpcy5wYWdlc09uU2lkZXMgPiAxO1xuXG4gICAgLy8gc2V0IHRoZSBmaXJzdCBudW1iZXIgdG8gYmUgZGlzcGxheWVkXG4gICAgY29uc3QgZmlyc3ROdW1iZXIgPSB0aGlzLmdldEZpcnN0UGFnZU51bWJlcihhbmNob3IpO1xuICAgIGNvbnN0IGxvb3BMZW5ndGggPSB0aGlzLnBhZ2VzRml0VmlldyA/IHRoaXMudG90YWxQYWdlcyA6IHRoaXMuX3BhZ2VzSW5WaWV3O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbG9vcExlbmd0aDsgaSsrKSB7XG4gICAgICBwYWdlc1RvRGlzcGxheS5wdXNoKGZpcnN0TnVtYmVyICsgaSk7XG4gICAgfVxuICAgIC8vIElmIHRoZSBsYXN0IGRpc3BsYXllZCBudW1iZXIgaXMgMSBudW1iZXIgYmVmb3JlIHRoZSBsYXN0IHBhZ2UgZGlzcGxheSBoaW0gYXMgd2VsbFxuICAgIGlmICghdGhpcy5zbWFsbFZlcnNpb24gJiYgcGFnZXNUb0Rpc3BsYXlbbG9vcExlbmd0aCAtIDFdICsgMSA9PT0gdGhpcy50b3RhbFBhZ2VzKSB7XG4gICAgICBwYWdlc1RvRGlzcGxheS5wdXNoKHRoaXMudG90YWxQYWdlcyk7XG4gICAgICB0aGlzLnBhZ2VOdW1iZXJzRGlzcGxheS5zaG93TGFzdFBhZ2UgPSBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHBhZ2VzVG9EaXNwbGF5O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGZpcnN0IG51bWJlciB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHBhZ2luYXRpb24gbmF2aWdhdGlvbiB2aWV3XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhbmNob3IgLSBUaGUgYW5jaG9yIGZvciB0aGUgY2FsY3VsYXRpb25zXG4gICAqIEByZXR1cm4ge251bWJlcn0gLSBUaGUgZmlyc3QgbnVtYmVyIHRvIGJlIGRpc3BsYXllZFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRGaXJzdFBhZ2VOdW1iZXIoYW5jaG9yOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGxldCBmaXJzdE51bWJlciA9IGFuY2hvciAtIHRoaXMucGFnZXNPblNpZGVzO1xuICAgIC8vIElmIGluIHNtYWxsIHZlcnNpb24gc2hvdyBvbmx5IG5leHQgcGFnZSBzbyBzZXQgZmlyc3QgcGFnZSB0byBhbmNob3JcbiAgICBpZiAodGhpcy5zbWFsbFZlcnNpb24gJiYgYW5jaG9yID4gMSkge1xuICAgICAgaWYgKGFuY2hvciAhPT0gdGhpcy50b3RhbFBhZ2VzKSB7XG4gICAgICAgIGZpcnN0TnVtYmVyID0gYW5jaG9yO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXRoaXMucGFnZU51bWJlcnNEaXNwbGF5LnNob3dGaXJzdEVsbGlwc2lzKSB7XG4gICAgICBmaXJzdE51bWJlciA9IDE7XG4gICAgfSBlbHNlIGlmICghdGhpcy5wYWdlTnVtYmVyc0Rpc3BsYXkuc2hvd0xhc3RQYWdlKSB7XG4gICAgICBmaXJzdE51bWJlciA9IHRoaXMudG90YWxQYWdlcyAtICh0aGlzLl9wYWdlc0luVmlldyAtIDEpO1xuICAgIH1cbiAgICByZXR1cm4gZmlyc3ROdW1iZXI7XG4gIH1cblxuICBwcml2YXRlIHNob3VsZFNob3dMb2FkZXIocGFnZU51bWJlcjogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNTZXJ2ZXJTaWRlUGFnaW5hdGlvbiAmJiBpc05pbCh0aGlzLmdyaWRBcGkuZ2V0Q2FjaGVCbG9ja1N0YXRlKClbcGFnZU51bWJlcl0pO1xuICB9XG59XG4iXX0=
|
|
305
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1wYWdpbmF0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BkYXRvcmFtYS9jb3JlLyIsInNvdXJjZXMiOlsibGliL2dyaWQtdjIvZ3JpZC1wYWdpbmF0aW9uL2dyaWQtcGFnaW5hdGlvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOztBQUVILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFckgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUMzRixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBU3ZDLElBQWEsNkJBQTZCLEdBQTFDLE1BQWEsNkJBQTZCO0lBdUR4QyxZQUNVLEdBQXNCLEVBQ3RCLFNBQStCLEVBQy9CLFNBQW9CLEVBQ3BCLFdBQXdCLEVBQ3hCLFVBQXVDLEVBQ3ZDLFdBQXdCO1FBTHhCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLGNBQVMsR0FBVCxTQUFTLENBQXNCO1FBQy9CLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFDcEIs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Q0FBQzthQUN0QjtTQUNGO2FBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsRUFBRTtZQUNyRCxXQUFXLEdBQUcsQ0FBQyxDQUFDO1NBQ2pCO2FBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUU7WUFDaEQsV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3pEO1FBQ0QsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVPLGdCQUFnQixDQUFDLFVBQWtCO1FBQ3pDLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUM3RixDQUFDO0NBQ0YsQ0FBQTs7WUF6UGdCLGlCQUFpQjtZQUNYLG9CQUFvQjtZQUNwQixTQUFTO1lBQ1AsV0FBVztZQUNaLDJCQUEyQjtZQUMxQixXQUFXOztBQXREbEM7SUFEQyxTQUFTLENBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDOzhCQUNyQixVQUFVO3FDQUFWLFVBQVU7NERBSzlCO0FBWlUsNkJBQTZCO0lBUHpDLFNBQVMsQ0FBQztRQUNULFFBQVEsRUFBRSx5QkFBeUI7UUFDbkMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07UUFDL0MsMjVJQUErQztRQUUvQyxTQUFTLEVBQUUsQ0FBQyxXQUFXLENBQUM7O0tBQ3pCLENBQUM7cUNBeURlLGlCQUFpQjtRQUNYLG9CQUFvQjtRQUNwQixTQUFTO1FBQ1AsV0FBVztRQUNaLDJCQUEyQjtRQUMxQixXQUFXO0dBN0R2Qiw2QkFBNkIsQ0FpVHpDO1NBalRZLDZCQUE2QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBEYXRvcmFtYS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBBcGFjaGUgTGljZW5zZSAyLjAgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vZGF0b3JhbWEvY2xpZW50LWNvcmUvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICovXG5cbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgR3JpZEFwaSwgUm93Tm9kZSB9IGZyb20gJ2FnLWdyaWQtY29tbXVuaXR5JztcbmltcG9ydCB7IHVudGlsRGVzdHJveWVkIH0gZnJvbSAnbmd4LXRha2UtdW50aWwtZGVzdHJveSc7XG5pbXBvcnQgeyBEYXRvVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RyYW5zbGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IHN3aXRjaE1hcCwgdGFwLCB0aHJvdHRsZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBHcmlkUXVlcnkgfSBmcm9tICcuLi9ncmlkLXN0b3JlL2dyaWQucXVlcnknO1xuaW1wb3J0IHsgRGF0b0dyaWRDb250cm9sbGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vZ3JpZC1jb250cm9sbGVyL2dyaWQtY29udHJvbGxlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgaXNOaWwgfSBmcm9tICcuLi8uLi91dGlscy92YWxpZGF0b3JzJztcbmltcG9ydCB7IERlY2ltYWxQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEdyaWRTZXJ2aWNlIH0gZnJvbSAnLi4vZ3JpZC1zdG9yZS9ncmlkLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0b0dyaWREYXRhQ2hhbmdlZEV2ZW50IH0gZnJvbSAnLi4vZ3JpZC9ncmlkLXYyLnR5cGVzJztcbmltcG9ydCB7IHRhcE9uY2UgfSBmcm9tICcuLi8uLi9yeC90YXAnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkYXRvLWdyaWQtcGFnaW5hdGlvbi12MicsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICB0ZW1wbGF0ZVVybDogJy4vZ3JpZC1wYWdpbmF0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZ3JpZC1wYWdpbmF0aW9uLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW0RlY2ltYWxQaXBlXVxufSlcbmV4cG9ydCBjbGFzcyBEYXRvR3JpZFBhZ2luYXRpb25WMkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8qKlxuICAgKiBUaGlzIHNldHRlciBpcyB1c2VkIHRvIGFzc2lnbiB0aGUgbmF2aWdhdGlvbiBlbGVtZW50IHJlZiBhbmQgdG8gc2V0XG4gICAqIHRoZSBwYWdpbmF0aW9uIHNpemUgd2hlbiB0aGUgY29tcG9uZW50IHN0YXJ0c1xuICAgKiBAcGFyYW0ge0VsZW1lbnRSZWZ9IGNvbnRlbnRcbiAgICovXG4gIEBWaWV3Q2hpbGQoJ25hdmlnYXRpb24nLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBzZXQgY29udGVudChjb250ZW50OiBFbGVtZW50UmVmKSB7XG4gICAgdGhpcy5uYXZpZ2F0aW9uRWxlbWVudCA9IGNvbnRlbnQ7XG4gICAgaWYgKGNvbnRlbnQgJiYgdGhpcy5zbWFsbFZlcnNpb24gPT09IG51bGwpIHtcbiAgICAgIHRoaXMuY2FsY3VsYXRlTmF2aWdhdGlvblNpemUoKTtcbiAgICB9XG4gIH1cblxuICAvLyBudW1iZXIgb2Ygcm93cyBpbiB0aGUgdGFibGVcbiAgcm93Q291bnQ6IG51bWJlcjtcbiAgcm93c1BlclBhZ2U6IG51bWJlcjtcbiAgLy8gd2hlbiB0aGUgd2lkZ2V0J3Mgd2lkdGggaXMgc21hbGxlciB0aGFuIFhTX0RJU1BMQVlfU0laRSBkaXNhYmxlIGdvIHRvIGZpcnN0L2xhc3QgYnV0dG9uc1xuICBkaXNhYmxlQnV0dG9uczogYm9vbGVhbiA9IG51bGw7XG4gIC8vIHdoZW4gdGhlIHdpZGdldCdzIHdpZHRoIGlzIHNtYWxsZXIgdGhhbiBTTUFMTF9ESVNQTEFZX1NJWkUgY2hhbmdlIHRvIHNtYWxsIHBhZ2luYXRpb24gdmlld1xuICBzbWFsbFZlcnNpb246IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcbiAgLy8gbnVtYmVyIG9mIHBhZ2VzIGluIHRoZSB0YWJsZVxuICB0b3RhbFBhZ2VzOiBudW1iZXI7XG4gIC8vIFRoZSBkaXNwbGF5IHJvd3MgcmFuZ2VcbiAgcm93c1JhbmdlOiBzdHJpbmc7XG4gIC8vIG1hbmFnaW5nIG9iamVjdCBmb3IgdGhlIG5hdmlnYXRpb25cbiAgcGFnZU51bWJlcnNEaXNwbGF5ID0ge1xuICAgIGN1cnJlbnRQYWdlOiAxLFxuICAgIHBhZ2VzOiBbXSxcbiAgICBzaG93Rmlyc3RFbGxpcHNpczogZmFsc2UsXG4gICAgc2hvd0xhc3RQYWdlOiBmYWxzZVxuICB9O1xuXG4gIC8vIFNob3cgZml0IGNlbGwgY29udGVudCBhbmQgY29sbGFwc2UvZXhwYW5kIHJvdyBncm91cHMgY29udHJvbHNcbiAgc2hvd0JvdHRvbUNvbnRyb2xzID0gZmFsc2U7XG4gIGlzRXhwYW5kZWQgPSB0cnVlO1xuICBoYXNSb3dHcm91cENvbHVtbnMgPSBmYWxzZTtcblxuICAvLyBob3cgbWFueSBudW1iZXJzIGFyZSBzaG93aW5nIG9uIHRoZSBzYW1lIHRpbWUgYmVzaWRlcyB0aGUgbGFzdCBwYWdlIG51bWJlclxuICBwcml2YXRlIF9wYWdlc0luVmlldzogbnVtYmVyO1xuICAvLyBUaGUgbnVtYmVyIG9mIHBhZ2VzIGRpc3BsYXllZCBvbiBlYWNoIHNpZGUgb2YgdGhlIHNlbGVjdGVkIHBhZ2UuXG4gIHByaXZhdGUgcGFnZXNPblNpZGVzOiBudW1iZXI7XG4gIC8vIGlmIHRoZSBudW1iZXIgb2YgcGFnZXMgaW4gdGhlIHRhYmxlIGZpdHMgdGhlIG51bWJlciBvZiBkaXNwbGF5aW5nIHBhZ2VzXG4gIHByaXZhdGUgcGFnZXNGaXRWaWV3OiBib29sZWFuO1xuICAvLyBob3cgbWFueSBudW1iZXJzIHRvIHNob3cgb24gZWFjaCBzaWRlIGJlc2lkZXMgdGhlIHNlbGVjdGVkIG51bWJlclxuICBwcml2YXRlIG5hdmlnYXRpb25FbGVtZW50OiBFbGVtZW50UmVmO1xuICBwcml2YXRlIGlzU2VydmVyU2lkZVBhZ2luYXRpb24gPSBmYWxzZTtcbiAgcHJpdmF0ZSBncmlkQXBpOiBHcmlkQXBpO1xuICAvLyBUaGUgbnVtYmVyIG9mIHBhZ2VzIGRpc3BsYXllZCBpbiB0aGUgbmF2aWdhdGlvbiBwYW5lbCBmb3IgZWFjaCB2aWV3IGFzIGRlZmluZWQgYnkgcHJvZHVjdC5cbiAgcHJpdmF0ZSByZWFkb25seSBNSU5JX0RJU1BMQVlfTEVOR1RIOiBudW1iZXIgPSAyO1xuICBwcml2YXRlIHJlYWRvbmx5IERJU1BMQVlfTEVOR1RIOiBudW1iZXIgPSA1O1xuICAvLyBXaWRnZXQncyB3aWR0aCB0aGUgZGV0ZXJtaW5lcyB0aGUgcGFnaW5hdGlvbiB2aWV3IHR5cGUgWyBzbWFsbCwgeHNdIGFzIGRlZmluZWQgYnkgcHJvZHVjdC5cbiAgcHJpdmF0ZSByZWFkb25seSBYU19ESVNQTEFZX1NJWkU6IG51bWJlciA9IDE2MDtcbiAgcHJpdmF0ZSByZWFkb25seSBTTUFMTF9ESVNQTEFZX1NJWkU6IG51bWJlciA9IDM5MDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IERhdG9UcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZ3JpZFF1ZXJ5OiBHcmlkUXVlcnksXG4gICAgcHJpdmF0ZSBncmlkU2VydmljZTogR3JpZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb250cm9sbGVyOiBEYXRvR3JpZENvbnRyb2xsZXJDb21wb25lbnQsXG4gICAgcHJpdmF0ZSBkZWNpbWFsUGlwZTogRGVjaW1hbFBpcGVcbiAgKSB7fVxuXG4gIGdldCBwcmV2UGFnZURpc2FibGVkKCkge1xuICAgIHJldHVybiB0aGlzLnBhZ2VOdW1iZXJzRGlzcGxheS5jdXJyZW50UGFnZSA9PT0gMTtcbiAgfVxuXG4gIGdldCBuZXh0UGFnZURpc2FibGVkKCkge1xuICAgIHJldHVybiB0aGlzLnBhZ2VOdW1iZXJzRGlzcGxheS5jdXJyZW50UGFnZSA9PT0gdGhpcy50b3RhbFBhZ2VzO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5ncmlkUXVlcnlcbiAgICAgIC53YWl0Rm9yR3JpZCgoKSA9PiB0aGlzLmdyaWRRdWVyeS5ncmlkUmVmLmZpbHRlckNoYW5nZWQpXG4gICAgICAucGlwZSh1bnRpbERlc3Ryb3llZCh0aGlzKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmdyaWRBcGkucGFnaW5hdGlvbkdvVG9QYWdlKDApO1xuICAgICAgICB0aGlzLmluaXRQYWdpbmF0aW9uKCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuZ3JpZFF1ZXJ5LmdyaWRSZWFkeSRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJvd0dyb3VwQ29sdW1ucyA9IHRoaXMuZ3JpZFF1ZXJ5LmFwaS5jb2x1bW5zLmdldFJvd0dyb3VwQ29sdW1ucygpO1xuXG4gICAgICAgICAgdGhpcy5ncmlkQXBpID0gdGhpcy5ncmlkUXVlcnkuYXBpLmdyaWQ7XG4gICAgICAgICAgdGhpcy5zaG93Qm90dG9tQ29udHJvbHMgPSB0aGlzLmdyaWRRdWVyeS5nZXRHcmlkT3B0aW9ucygpLnNob3dCb3R0b21Db250cm9scztcbiAgICAgICAgICB0aGlzLmhhc1Jvd0dyb3VwQ29sdW1ucyA9IHJvd0dyb3VwQ29sdW1ucyAmJiByb3dHcm91cENvbHVtbnMubGVuZ3RoID4gMDtcbiAgICAgICAgfSksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc1NlcnZlclNpZGVQYWdpbmF0aW9uID0gdGhpcy5ncmlkUXVlcnkuaXNTZXJ2ZXJTaWRlO1xuICAgICAgICAgIHJldHVybiB0aGlzLmlzU2VydmVyU2lkZVBhZ2luYXRpb24gPyB0aGlzLmdyaWRRdWVyeS5zZXJ2ZXJEYXRhTG9hZGVkJCA6IHRoaXMuZ3JpZFF1ZXJ5LnJvd0RhdGFDaGFuZ2VkJDtcbiAgICAgICAgfSksXG4gICAgICAgIHRocm90dGxlVGltZSgxMDApLFxuICAgICAgICB0YXBPbmNlKCgpID0+IHRoaXMuaW5pdFBhZ2luYXRpb24oKSksXG4gICAgICAgIHVudGlsRGVzdHJveWVkKHRoaXMpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCh7IHBhZ2luYXRpb25QYWdlID0gMSB9OiBEYXRvR3JpZERhdGFDaGFuZ2VkRXZlbnQpID0+IHtcbiAgICAgICAgLyoqICBBZyBncmlkIGluZGV4IGlzIGZyb20gMCwgYnV0IHRoZSBpbmRleCBmaXJlZCBmcm9tIHRoZSBldmVudCBzdGFydCBmcm9tIDEqL1xuICAgICAgICB0aGlzLmluaXRQYWdpbmF0aW9uKHBhZ2luYXRpb25QYWdlIC0gMSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNhbGN1bGF0ZSB0aGUgcm93IGNvdW50IGFuZCBwYWdlIGxlbmd0aHNcbiAgICovXG4gIGNhbGN1bGF0ZVJvd3NDb3VudCh0b3RhbFJvd3M6IG51bWJlcikge1xuICAgIHRoaXMudG90YWxQYWdlcyA9IHRvdGFsUm93cyA/IE1hdGguY2VpbCh0b3RhbFJvd3MgLyB0aGlzLnJvd3NQZXJQYWdlKSA6IHRoaXMuZ3JpZEFwaS5wYWdpbmF0aW9uR2V0VG90YWxQYWdlcygpO1xuICAgIHRoaXMucm93Q291bnQgPSB0aGlzLmdyaWRBcGkucGFnaW5hdGlvbkdldFJvd0NvdW50KCk7XG4gICAgdGhpcy5zZXRSb3dzRGlzcGxheVJhbmdlKHRoaXMucGFnZU51bWJlcnNEaXNwbGF5LmN1cnJlbnRQYWdlKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBpbml0UGFnaW5hdGlvbihwYWdlTnVtYmVyID0gMCkge1xuICAgIGNvbnN0IHsgdG90YWxSb3dzLCBlbmFibGVkIH0gPSB0aGlzLmdyaWRRdWVyeS5zZXJ2ZXJTaWRlQ29uZmlnO1xuICAgIGlmIChlbmFibGVkICYmIGlzTmlsKHRvdGFsUm93cykpIHJldHVybjtcbiAgICAvKiogcmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBwYWdlcyBzdGFydGluZyBmcm9tIDEgKi9cbiAgICB0aGlzLnJvd3NQZXJQYWdlID0gdGhpcy5ncmlkQXBpLnBhZ2luYXRpb25HZXRQYWdlU2l6ZSgpO1xuICAgIHRoaXMuY2FsY3VsYXRlUm93c0NvdW50KHRvdGFsUm93cyk7XG4gICAgLyoqIHNldCB0aGUgaW5pdCB2YWx1ZSBvZiB0aGUgcGFnaW5hdGlvbiB2aWV3IHRvIG5vcm1hbCBzaXplICovXG4gICAgdGhpcy5wYWdlc0luVmlldyA9IHRoaXMuRElTUExBWV9MRU5HVEg7XG4gICAgLyoqIGN1cnJlbnQgcGFnZSBpbmRleCBzdGFydHMgZnJvbSAwICovXG4gICAgdGhpcy5uYXZpZ2F0ZVBhZ2UocGFnZU51bWJlcik7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBudW1iZXIgb2YgcGFnZSBudW1iZXJzIHNob3dpbmcgYXQgdGhlIHNhbWUgdGltZSBpbiB0aGUgbmF2aWdhdGlvblxuICAgKiBwYW5lbCAmIHVwZGF0ZSB0aGUgbnVtYmVyIG9mIHBhZ2VzIGRpc3BsYXllZCBvbiBlYWNoIHNpZGUgb2YgdGhlIHNlbGVjdGVkIHBhZ2UuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBuZXdOdW1iZXJzTGVuZ3RoIC0gVGhlIG5ldyBsZW5ndGggb2YgdGhlIGRpc3BsYXlpbmcgbnVtYmVyc1xuICAgKi9cbiAgc2V0IHBhZ2VzSW5WaWV3KG5ld051bWJlcnNMZW5ndGg6IG51bWJlcikge1xuICAgIHRoaXMuX3BhZ2VzSW5WaWV3ID0gbmV3TnVtYmVyc0xlbmd0aDtcbiAgICB0aGlzLnBhZ2VzT25TaWRlcyA9IE1hdGguZmxvb3IodGhpcy5fcGFnZXNJblZpZXcgLyAyKTtcbiAgICB0aGlzLnBhZ2VzRml0VmlldyA9IHRoaXMuX3BhZ2VzSW5WaWV3ICsgMSA+PSB0aGlzLnRvdGFsUGFnZXM7XG4gICAgLy8gaW52YWxpZGF0ZSBkaXNwbGF5aW5nIHBhZ2VzIHVwb24gcmVzaXplXG4gICAgdGhpcy5wYWdlTnVtYmVyc0Rpc3BsYXkucGFnZXMgPSBbXTtcbiAgfVxuXG4gIC8qKiBUT0RPIFRoaXMgaXMgbm90IGxpc3RlbmluZyB0byBzaXplIGNoYW5nZXMgKi9cbiAgY2FsY3VsYXRlTmF2aWdhdGlvblNpemUoKSB7XG4gICAgaWYgKHRoaXMubmF2aWdhdGlvbkVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnRXaWR0aCA9IHRoaXMubmF2aWdhdGlvbkVsZW1lbnQubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50LmNsaWVudFdpZHRoO1xuICAgICAgdGhpcy5kaXNhYmxlQnV0dG9ucyA9IGVsZW1lbnRXaWR0aCA8IHRoaXMuWFNfRElTUExBWV9TSVpFO1xuICAgICAgaWYgKGVsZW1lbnRXaWR0aCA8IHRoaXMuU01BTExfRElTUExBWV9TSVpFKSB7XG4gICAgICAgIGlmICh0aGlzLl9wYWdlc0luVmlldyAhPT0gdGhpcy5NSU5JX0RJU1BMQVlfTEVOR1RIKSB7XG4gICAgICAgICAgdGhpcy5zbWFsbFZlcnNpb24gPSB0cnVlO1xuICAgICAgICAgIHRoaXMucGFnZXNJblZpZXcgPSB0aGlzLk1JTklfRElTUExBWV9MRU5HVEg7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLl9wYWdlc0luVmlldyAhPT0gdGhpcy5ESVNQTEFZX0xFTkdUSCkge1xuICAgICAgICAgIHRoaXMuc21hbGxWZXJzaW9uID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5wYWdlc0luVmlldyA9IHRoaXMuRElTUExBWV9MRU5HVEg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTmF2aWdhdGVzIHRvIGEgZ2l2ZW4gcGFnZS5cbiAgICogdXBkYXRlcyB0aGUgZGlzcGxheWluZyBwYWdlIG51bWJlcnMgYW5kIHRoZSBjdXJyZW50IG51bWJlci5cbiAgICogQHBhcmFtIHBhZ2VOdW1iZXIgLSBUaGUgcGFnZSBudW1iZXIgdG8gbmF2aWdhdGUgdG9cbiAgICovXG4gIG5hdmlnYXRlUGFnZShwYWdlTnVtYmVyOiBudW1iZXIpIHtcbiAgICBpZiAocGFnZU51bWJlciA+PSAwICYmIHBhZ2VOdW1iZXIgPD0gdGhpcy50b3RhbFBhZ2VzIC0gMSkge1xuICAgICAgdGhpcy5zaG91bGRTaG93TG9hZGVyKHBhZ2VOdW1iZXIpICYmIHRoaXMuZ3JpZFNlcnZpY2Uuc2V0TG9hZGluZyh0cnVlKTtcbiAgICAgIHRoaXMuZ3JpZEFwaS5wYWdpbmF0aW9uR29Ub1BhZ2UocGFnZU51bWJlcik7XG4gICAgICAvLyBBZGQgMSBiZWNhdXNlIGFnLWdyaWQgQVBJIHdvcmtzIHdpdGggZmlyc3QgaW5kZXggMFxuICAgICAgY29uc3QgZGlzcGxheU51bWJlciA9IHBhZ2VOdW1iZXIgKyAxO1xuICAgICAgdGhpcy5wYWdlTnVtYmVyc0Rpc3BsYXkuY3VycmVudFBhZ2UgPSBkaXNwbGF5TnVtYmVyO1xuXG4gICAgICBpZiAodGhpcy5wYWdlTnVtYmVyc0Rpc3BsYXkucGFnZXMubGVuZ3RoID09PSAwIHx8ICF0aGlzLnBhZ2VzRml0Vmlldykge1xuICAgICAgICB0aGlzLnBhZ2VOdW1iZXJzRGlzcGxheS5wYWdlcyA9IHRoaXMuZ2V0UGFnZXMoZGlzcGxheU51bWJlcik7XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCB0aGUgZGlzcGxheWluZyByb3dzIHJhbmdlXG4gICAgICB0aGlzLnNldFJvd3NEaXNwbGF5UmFuZ2UoZGlzcGxheU51bWJlcik7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgbmF2aWdhdGVGaXJzdFBhZ2UoKSB7XG4gICAgdGhpcy5uYXZpZ2F0ZVBhZ2UoMCk7XG4gIH1cblxuICBuYXZpZ2F0ZU5leHRQYWdlKCkge1xuICAgIHRoaXMubmF2aWdhdGVQYWdlKHRoaXMucGFnZU51bWJlcnNEaXNwbGF5LmN1cnJlbnRQYWdlKTtcbiAgfVxuXG4gIG5hdmlnYXRlUHJldlBhZ2UoKSB7XG4gICAgLyoqIGFnLWdyaWQgQVBJIHdvcmtzIHdpdGggZmlyc3QgaW5kZXggMCBzbyB3ZSBuZWVkIHRvIHJlZHVjZSAyIGluc3RlYWQgb2Ygb25lICovXG4gICAgY29uc3QgcHJldmlvdXNQYWdlSW5kZXggPSB0aGlzLnBhZ2VOdW1iZXJzRGlzcGxheS5jdXJyZW50UGFnZSAtIDI7XG4gICAgdGhpcy5uYXZpZ2F0ZVBhZ2UocHJldmlvdXNQYWdlSW5kZXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIHVwZGF0ZXMgdGhlIGRpc3BsYXlpbmcgcGFnZSBudW1iZXJzIHRvIHNob3cgdGhlIG5leHQgbnVtYmVycyBzZXRcbiAgICovXG4gIHNob3dOZXh0QmF0Y2goKSB7XG4gICAgY29uc3QgYW5jaG9yID0gdGhpcy5wYWdlTnVtYmVyc0Rpc3BsYXkucGFnZXNbMF0gKyB0aGlzLl9wYWdlc0luVmlldyArIHRoaXMucGFnZXNPblNpZGVzO1xuICAgIHRoaXMucGFnZU51bWJlcnNEaXNwbGF5LnBhZ2VzID0gdGhpcy5nZXRQYWdlcyhhbmNob3IpO1xuICB9XG5cbiAgLyoqXG4gICAqIHVwZGF0ZXMgdGhlIGRpc3BsYXlpbmcgcGFnZSBudW1iZXJzIHRvIHNob3cgdGhlIHByZXZpb3VzIG51bWJlcnMgc2V0XG4gICAqL1xuICBzaG93UHJldmlvdXNCYXRjaCgpIHtcbiAgICBjb25zdCBhbmNob3IgPSB0aGlzLnBhZ2VOdW1iZXJzRGlzcGxheS5wYWdlc1swXSAtIHRoaXMuX3BhZ2VzSW5WaWV3ICsgdGhpcy5wYWdlc09uU2lkZXM7XG4gICAgdGhpcy5wYWdlTnVtYmVyc0Rpc3BsYXkucGFnZXMgPSB0aGlzLmdldFBhZ2VzKGFuY2hvcik7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHRyYWNrQnkgZnVuY3Rpb24gZm9yIHRoZSBuZ0ZvclxuICAgKiBAcGFyYW0gaW5kZXggLSBjdXJyZW50IGl0ZW0gaW5kZXhcbiAgICogQHBhcmFtIHBhZ2UgLSB0aGUgY3VycmVudCBpdGVtJ3MgcGFnZSBudW1iZXJcbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgdHJhY2tCeVBhZ2UoaW5kZXg6IG51bWJlciwgcGFnZTogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHBhZ2U7XG4gIH1cblxuICB0b2dnbGVHcm91cHNTdGF0ZSgpIHtcbiAgICB0aGlzLmlzRXhwYW5kZWQgPyB0aGlzLmdyaWRBcGkuY29sbGFwc2VBbGwoKSA6IHRoaXMuZ3JpZEFwaS5leHBhbmRBbGwoKTtcbiAgICB0aGlzLmlzRXhwYW5kZWQgPSAhdGhpcy5pc0V4cGFuZGVkO1xuICB9XG5cbiAgYXV0b0ZpdEdyaWQodHlwZTogJ2NvbnRhaW5lcicgfCAnY29udGVudCcpIHtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLmZpdEdyaWQodHlwZSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHt9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHJvd3MgZGlzcGxheSBzdHJpbmdcbiAgICogQHBhcmFtIGRpc3BsYXlOdW1iZXIgLSBUaGUgY3VycmVudCBwYWdlIG51bWJlciAoc3RhcnRpbmcgaW5kZXggMSlcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgc2V0Um93c0Rpc3BsYXlSYW5nZShkaXNwbGF5TnVtYmVyKTogdm9pZCB7XG4gICAgLyoqIERlY3JlYXNlIGJ5IDEgYmVjYXVzZSBhZy1ncmlkIEFQSSB3b3JrcyB3aXRoIGZpcnN0IGluZGV4IDAgKi9cbiAgICBjb25zdCBwYWdlTnVtYmVyID0gZGlzcGxheU51bWJlciAtIDE7XG4gICAgY29uc3QgZmlyc3RSb3dJbmRleCA9IDEgKyBwYWdlTnVtYmVyICogdGhpcy5yb3dzUGVyUGFnZTtcbiAgICBjb25zdCBsYXN0Um93ID0gKHBhZ2VOdW1iZXIgKyAxKSAqIHRoaXMucm93c1BlclBhZ2U7XG4gICAgY29uc3QgbGFzdFJvd0luZGV4ID0gdGhpcy5yb3dDb3VudCA+IGxhc3RSb3cgPyBsYXN0Um93IDogdGhpcy5yb3dDb3VudDtcbiAgICB0aGlzLnJvd3NSYW5nZSA9XG4gICAgICB0aGlzLnJvd0NvdW50ID4gMFxuICAgICAgICA/IHRoaXMudHJhbnNsYXRlLnRyYW5zZm9ybSgnY29yZS5pdGVtc1JhbmdlJywge1xuICAgICAgICAgICAgcmFuZ2U6IGAke3RoaXMuZGVjaW1hbFBpcGUudHJhbnNmb3JtKGZpcnN0Um93SW5kZXgpfSAtICR7dGhpcy5kZWNpbWFsUGlwZS50cmFuc2Zvcm0obGFzdFJvd0luZGV4KX1gLFxuICAgICAgICAgICAgbnVtYmVyOiB0aGlzLmRlY2ltYWxQaXBlLnRyYW5zZm9ybSh0aGlzLnJvd0NvdW50KVxuICAgICAgICAgIH0pXG4gICAgICAgIDogdGhpcy50cmFuc2xhdGUudHJhbnNmb3JtKCdjb3JlLm51bWJlck9mSXRlbXMnLCB7IG51bWJlcjogMCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGEgbnVtYmVyIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIHRoZSBkaXNwbGF5aW5nIG51bWJlcnMuXG4gICAqIEBwYXJhbSBhbmNob3IgLSBUaGUgbnVtYmVyIHRvIHVzZSBhcyBhbiBhbmNob3IgZm9yIHRoZSBjYWxjdWxhdGlvbnMuXG4gICAqIEByZXR1cm4ge251bWJlcltdfSAtIEFuIGFycmF5IG9mIHRoZSBuZXcgbnVtYmVycyB0byBkaXNwbGF5XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGdldFBhZ2VzKGFuY2hvcjogbnVtYmVyKTogbnVtYmVyW10ge1xuICAgIGNvbnN0IHBhZ2VzVG9EaXNwbGF5ID0gW107XG4gICAgLy8gaW5kaWNhdGVzIHJhdGhlciB0aGUgdGFibGUgaGFzIG1vcmUgcGFnZXMgdGhhbiB0aGUgZGlzcGxheSBsZW5ndGgsIHdlIGFkZCAxIGJlY2F1c2Ugb2ZcbiAgICAvLyBhIGxvZ2ljIHRoYXQgc2F5cyB0aGF0IGlmIHlvdXIgY3VycmVudCB2aWV3IGlzIDEgbnVtYmVyIGF3YXkgZnJvbSB0aGUgbGFzdCBwYWdlXG4gICAgLy8gZGlzcGxheSBoaW0gYXMgd2VsbC5cbiAgICB0aGlzLnBhZ2VOdW1iZXJzRGlzcGxheS5zaG93TGFzdFBhZ2UgPSAhdGhpcy5wYWdlc0ZpdFZpZXcgJiYgYW5jaG9yICsgdGhpcy5wYWdlc09uU2lkZXMgPCB0aGlzLnRvdGFsUGFnZXM7XG4gICAgdGhpcy5wYWdlTnVtYmVyc0Rpc3BsYXkuc2hvd0ZpcnN0RWxsaXBzaXMgPSAhdGhpcy5wYWdlc0ZpdFZpZXcgJiYgYW5jaG9yIC0gdGhpcy5wYWdlc09uU2lkZXMgPiAxO1xuXG4gICAgLy8gc2V0IHRoZSBmaXJzdCBudW1iZXIgdG8gYmUgZGlzcGxheWVkXG4gICAgY29uc3QgZmlyc3ROdW1iZXIgPSB0aGlzLmdldEZpcnN0UGFnZU51bWJlcihhbmNob3IpO1xuICAgIGNvbnN0IGxvb3BMZW5ndGggPSB0aGlzLnBhZ2VzRml0VmlldyA/IHRoaXMudG90YWxQYWdlcyA6IHRoaXMuX3BhZ2VzSW5WaWV3O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbG9vcExlbmd0aDsgaSsrKSB7XG4gICAgICBwYWdlc1RvRGlzcGxheS5wdXNoKGZpcnN0TnVtYmVyICsgaSk7XG4gICAgfVxuICAgIC8vIElmIHRoZSBsYXN0IGRpc3BsYXllZCBudW1iZXIgaXMgMSBudW1iZXIgYmVmb3JlIHRoZSBsYXN0IHBhZ2UgZGlzcGxheSBoaW0gYXMgd2VsbFxuICAgIGlmICghdGhpcy5zbWFsbFZlcnNpb24gJiYgcGFnZXNUb0Rpc3BsYXlbbG9vcExlbmd0aCAtIDFdICsgMSA9PT0gdGhpcy50b3RhbFBhZ2VzKSB7XG4gICAgICBwYWdlc1RvRGlzcGxheS5wdXNoKHRoaXMudG90YWxQYWdlcyk7XG4gICAgICB0aGlzLnBhZ2VOdW1iZXJzRGlzcGxheS5zaG93TGFzdFBhZ2UgPSBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHBhZ2VzVG9EaXNwbGF5O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGZpcnN0IG51bWJlciB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHBhZ2luYXRpb24gbmF2aWdhdGlvbiB2aWV3XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhbmNob3IgLSBUaGUgYW5jaG9yIGZvciB0aGUgY2FsY3VsYXRpb25zXG4gICAqIEByZXR1cm4ge251bWJlcn0gLSBUaGUgZmlyc3QgbnVtYmVyIHRvIGJlIGRpc3BsYXllZFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRGaXJzdFBhZ2VOdW1iZXIoYW5jaG9yOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGxldCBmaXJzdE51bWJlciA9IGFuY2hvciAtIHRoaXMucGFnZXNPblNpZGVzO1xuICAgIC8vIElmIGluIHNtYWxsIHZlcnNpb24gc2hvdyBvbmx5IG5leHQgcGFnZSBzbyBzZXQgZmlyc3QgcGFnZSB0byBhbmNob3JcbiAgICBpZiAodGhpcy5zbWFsbFZlcnNpb24gJiYgYW5jaG9yID4gMSkge1xuICAgICAgaWYgKGFuY2hvciAhPT0gdGhpcy50b3RhbFBhZ2VzKSB7XG4gICAgICAgIGZpcnN0TnVtYmVyID0gYW5jaG9yO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXRoaXMucGFnZU51bWJlcnNEaXNwbGF5LnNob3dGaXJzdEVsbGlwc2lzKSB7XG4gICAgICBmaXJzdE51bWJlciA9IDE7XG4gICAgfSBlbHNlIGlmICghdGhpcy5wYWdlTnVtYmVyc0Rpc3BsYXkuc2hvd0xhc3RQYWdlKSB7XG4gICAgICBmaXJzdE51bWJlciA9IHRoaXMudG90YWxQYWdlcyAtICh0aGlzLl9wYWdlc0luVmlldyAtIDEpO1xuICAgIH1cbiAgICByZXR1cm4gZmlyc3ROdW1iZXI7XG4gIH1cblxuICBwcml2YXRlIHNob3VsZFNob3dMb2FkZXIocGFnZU51bWJlcjogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNTZXJ2ZXJTaWRlUGFnaW5hdGlvbiAmJiBpc05pbCh0aGlzLmdyaWRBcGkuZ2V0Q2FjaGVCbG9ja1N0YXRlKClbcGFnZU51bWJlcl0pO1xuICB9XG59XG4iXX0=
|