@bnsights/bbsf-controls 1.0.24 → 1.0.27
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/bnsights-bbsf-controls-1.0.27.tgz +0 -0
- package/bnsights-bbsf-controls.d.ts +0 -23
- package/bnsights-bbsf-controls.metadata.json +1 -1
- package/bundles/bnsights-bbsf-controls.umd.js +1145 -220
- package/bundles/bnsights-bbsf-controls.umd.js.map +1 -1
- package/esm2015/bnsights-bbsf-controls.js +1 -24
- package/esm2015/lib/Shared/Directives/template-name.directive.js +18 -0
- package/esm2015/lib/Shared/Enums/Enums.js +45 -0
- package/esm2015/lib/Shared/Models/RepeaterField.js +3 -0
- package/esm2015/lib/Shared/Models/RepeaterOptions.js +10 -0
- package/esm2015/lib/Shared/services/render-component-service.service.js +19 -0
- package/esm2015/lib/controls/DropdownList/DropdownList.component.js +2 -2
- package/esm2015/lib/controls/ImageUpload/ImageUpload.component.js +6 -3
- package/esm2015/lib/controls/Paging/Paging.component.js +2 -2
- package/esm2015/lib/controls/Repeater/repeater/repeater.component.js +112 -0
- package/esm2015/lib/controls/Repeater/repeater-field-builder/repeater-field-builder.component.js +704 -0
- package/esm2015/lib/controls/Repeater/repeater-item-field/repeater-item-field.component.js +20 -0
- package/esm2015/lib/controls/TextBox/TextBox.component.js +1 -1
- package/esm2015/lib/controls/bbsf-controls.module.js +17 -10
- package/esm2015/public-api.js +32 -23
- package/fesm2015/bnsights-bbsf-controls.js +1087 -186
- package/fesm2015/bnsights-bbsf-controls.js.map +1 -1
- package/lib/Shared/Directives/template-name.directive.d.ts +6 -0
- package/lib/Shared/Enums/Enums.d.ts +40 -0
- package/lib/Shared/Models/RepeaterField.d.ts +5 -0
- package/lib/Shared/Models/RepeaterOptions.d.ts +13 -0
- package/lib/Shared/services/render-component-service.service.d.ts +7 -0
- package/lib/controls/Repeater/repeater/repeater.component.d.ts +25 -0
- package/lib/controls/Repeater/repeater-field-builder/repeater-field-builder.component.d.ts +17 -0
- package/lib/controls/Repeater/repeater-item-field/repeater-item-field.component.d.ts +8 -0
- package/package.json +1 -1
- package/public-api.d.ts +31 -0
- package/bnsights-bbsf-controls-1.0.24.tgz +0 -0
|
@@ -224,7 +224,7 @@ export class PagingComponent {
|
|
|
224
224
|
PagingComponent.decorators = [
|
|
225
225
|
{ type: Component, args: [{
|
|
226
226
|
selector: 'BBSF-Paging',
|
|
227
|
-
template: "<div class=\"b-control b-paging\" *ngIf=\"(result.length > 0)\">\r\n <div class=\"d-flex justify-content-between align-items-center\" *ngIf=\"!options.IsLoadMoreControl\">\r\n <div class=\"b-pagination\">\r\n <jw-pagination [items]=\"items\" *ngIf=\"!((Pages==1)&&options.HidePaginationWhenPageSizeEqualOne)\"\r\n (changePage)=\"onChangePage($event)\" [pageSize]=\"options.PageSize\" [ShowFirstAndLast]=\"options.ShowFirstAndLast\"\r\n [initialPage]=\"1\" [maxPages]=\"10\"></jw-pagination>\r\n </div>\r\n <div class=\"b-pages d-flex\" *ngIf=\"!((Pages==1)&&options.HidePaginationWhenPageSizeEqualOne)\" >\r\n <select (change)=\"changePageSize($event)\" *ngIf=\"options.ShowPageSizeOption\">\r\n <option>10</option>\r\n <option>20</option>\r\n <option>50</option>\r\n <option>100</option>\r\n <option>200</option>\r\n </select>\r\n <div class=\"b-items ml-3\">\r\n <strong>{{totalRow}}</strong> {{utilityService.getResourceValue(\"ItemsIn\")}} <strong> {{Pages}}</strong> {{utilityService.getResourceValue(\"Pages\")}}\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"row\" style=\"align-self:center; align-items: center; text-align: center;\" *ngIf=\"options.IsLoadMoreControl\">\r\n <div class=\"search-results\" infinite-scroll [infiniteScrollDistance]=\"ScrollDistance\"\r\n [infiniteScrollUpDistance]=\"ScrollUpDistance\" [infiniteScrollThrottle]=\"Throttle\" (scrolled)=\"options.IsInfiniteScroll==true?onScrollDown():null\"\r\n [scrollWindow]=\"options.ScrollWindow\" [infiniteScrollContainer]=\"options.InfiniteScrollContainer\">\r\n </div>\r\n <button class=\"btn btn-
|
|
227
|
+
template: "<div class=\"b-control b-paging\" *ngIf=\"(result.length > 0)\">\r\n <div class=\"d-flex justify-content-between align-items-center\" *ngIf=\"!options.IsLoadMoreControl\">\r\n <div class=\"b-pagination\">\r\n <jw-pagination [items]=\"items\" *ngIf=\"!((Pages==1)&&options.HidePaginationWhenPageSizeEqualOne)\"\r\n (changePage)=\"onChangePage($event)\" [pageSize]=\"options.PageSize\" [ShowFirstAndLast]=\"options.ShowFirstAndLast\"\r\n [initialPage]=\"1\" [maxPages]=\"10\"></jw-pagination>\r\n </div>\r\n <div class=\"b-pages d-flex\" *ngIf=\"!((Pages==1)&&options.HidePaginationWhenPageSizeEqualOne)\" >\r\n <select (change)=\"changePageSize($event)\" *ngIf=\"options.ShowPageSizeOption\">\r\n <option>10</option>\r\n <option>20</option>\r\n <option>50</option>\r\n <option>100</option>\r\n <option>200</option>\r\n </select>\r\n <div class=\"b-items ml-3\">\r\n <strong>{{totalRow}}</strong> {{utilityService.getResourceValue(\"ItemsIn\")}} <strong> {{Pages}}</strong> {{utilityService.getResourceValue(\"Pages\")}}\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"row\" style=\"align-self:center; align-items: center; text-align: center;\" *ngIf=\"options.IsLoadMoreControl\">\r\n <div class=\"search-results\" infinite-scroll [infiniteScrollDistance]=\"ScrollDistance\"\r\n [infiniteScrollUpDistance]=\"ScrollUpDistance\" [infiniteScrollThrottle]=\"Throttle\" (scrolled)=\"options.IsInfiniteScroll==true?onScrollDown():null\"\r\n [scrollWindow]=\"options.ScrollWindow\" [infiniteScrollContainer]=\"options.InfiniteScrollContainer\">\r\n </div>\r\n <button class=\"btn btn-info\" (click)=\"onScrollDown()\" *ngIf=\"!(result.length==totalRow)\">{{utilityService.getResourceValue(\"LoadMore\")}}</button>\r\n </div>\r\n</div>\r\n",
|
|
228
228
|
styles: [".ngx-pager-container{text-align:center;padding:25px 0 0}.ngx-pager-container li{display:inline-block;margin:0 4px}.ngx-pager-container li a{display:block;width:26px;height:26px;border:1px solid #707070;text-align:center;color:#3e4e59;font-size:14px;line-height:24px;border-radius:5px;text-decoration:none}.ngx-pager-container li a:hover{color:#fff;background:#0a0e03}.ngx-pager-container li.invisible{display:none}.ngx-pager-container li.active{background:#0a0e03;border-radius:5px}.ngx-pager-container li.active a{border:none;color:#fff}\n"]
|
|
229
229
|
},] }
|
|
230
230
|
];
|
|
@@ -240,4 +240,4 @@ PagingComponent.propDecorators = {
|
|
|
240
240
|
options: [{ type: Input }],
|
|
241
241
|
group: [{ type: Input }]
|
|
242
242
|
};
|
|
243
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFnaW5nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtY29udHJvbHMvc3JjL2xpYi9jb250cm9scy9QYWdpbmcvUGFnaW5nLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUE2QixNQUFNLGVBQWUsQ0FBQztBQUMxRyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLFVBQVUsRUFBa0MsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDOUYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBSzFELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ25HLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDakYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWpELHFEQUFxRDtBQU1yRCxNQUFNLE9BQU8sZUFBZTtJQXlCMUIsWUFBbUIsY0FBOEIsRUFBVSxJQUFnQixFQUFVLE1BQWMsRUFBVSxlQUE2QyxFQUFVLHFCQUE0QztRQUE3TCxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFBVSxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFVLG9CQUFlLEdBQWYsZUFBZSxDQUE4QjtRQUFVLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7UUF4QmhOLFVBQUssR0FBRyxFQUFFLENBQUM7UUFFWCxXQUFNLEdBQVEsRUFBRSxDQUFDO1FBQ2pCLGdCQUFXLEdBQVEsSUFBSSxDQUFDO1FBQ3hCLGFBQVEs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WUFDbEIsT0FBTyxDQUFDLEVBQUUsRUFBRTtnQkFDVixHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNkLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQTtnQkFDZCxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3ZFO1lBQ0QsSUFBSSxXQUFXLEdBQUUsU0FBYyxDQUFBO1lBQy9CLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUE7U0FDaEM7UUFFRCxPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDOzs7WUF0UEYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxhQUFhO2dCQUN2Qix1MERBQXNDOzthQUV2Qzs7O1lBUitCLGNBQWM7WUFSckMsVUFBVTtZQURWLE1BQU07WUFPTiw0QkFBNEI7WUFFNUIscUJBQXFCOzs7b0JBNEIzQixNQUFNO3NCQUNOLEtBQUs7b0JBRUwsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIFNpbXBsZUNoYW5nZXMsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEVycm9yUmVzcG9uc2UsIEh0dHBIZWFkZXJzLCBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBQYWdpbmdEVE8gfSBmcm9tICcuLi8uLi9TaGFyZWQvTW9kZWxzL1BhZ2luZ0RUTyc7XHJcbmltcG9ydCB7IFBhZ2luZ09wdGlvbnMgfSBmcm9tICcuLi8uLi9TaGFyZWQvTW9kZWxzL1BhZ2luZ09wdGlvbnMnO1xyXG5pbXBvcnQgeyBSZXF1ZXN0T3B0aW9ucywgUmVzcG9uc2VDb250ZW50VHlwZSwgSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2h0dHAnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgT25QYWdpbmdGaWx0ZXJzQ2hhbmdlU2VydmljZSB9IGZyb20gJy4uLy4uL1NoYXJlZC9zZXJ2aWNlcy9PblBhZ2luZ0ZpbHRlcnNDaGFuZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEZpbHRlclR5cGUgfSBmcm9tICcuLi8uLi9TaGFyZWQvRW51bXMvRmlsdGVyVHlwZSc7XHJcbmltcG9ydCB7IFJlcXVlc3RIYW5kbGVyU2VydmljZSwgVXRpbGl0eVNlcnZpY2UgfSBmcm9tICdAYm5zaWdodHMvYmJzZi11dGlsaXRpZXMnO1xyXG5pbXBvcnQgeyBwbGFpblRvQ2xhc3MgfSBmcm9tICdjbGFzcy10cmFuc2Zvcm1lcic7XHJcblxyXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWNvbmZsaWN0aW5nLWxpZmVjeWNsZVxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ0JCU0YtUGFnaW5nJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vUGFnaW5nLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9QYWdpbmcuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGFnaW5nQ29tcG9uZW50PFQ+IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBpdGVtcyA9IFtdO1xyXG4gIHBhZ2VPZkl0ZW1zOiBBcnJheTxhbnk+O1xyXG4gIHJlc3VsdDogVFtdID0gW107XHJcbiAgcGFnZXJDb25maWc6IGFueSA9IG51bGw7XHJcbiAgdG90YWxSb3c6IGFueSA9IDA7XHJcbiAgcGFnZVNpemU6IGFueSA9IDEwXHJcbiAgUGFnZXM6IGFueSA9IDBcclxuICBDdXJyZW50UGFnZTogYW55ID0gMVxyXG4gIFNob3dQYWdlU2l6ZU9wdGlvbiA9IHRydWU7XHJcbiAgU2hvd0ZpcnN0QW5kTGFzdCA9IHRydWU7XHJcbiAgaGlkZVBhZ2luYXRpb25XaGVuUGFnZVNpemVFcXVhbE9uZSA9IHRydWVcclxuICBTdW0gPSAwO1xyXG4gIFRocm90dGxlID0gMzAwO1xyXG4gIFNjcm9sbERpc3RhbmNlID0gMTtcclxuICBTY3JvbGxVcERpc3RhbmNlID0gMjtcclxuICBkaXJlY3Rpb24gPSAnJztcclxuICBIZWFkZXJzOiBIdHRwSGVhZGVycztcclxuICBJc0ZpcnN0Q2FsbDogYm9vbGVhbiA9IHRydWU7XHJcbiAgQE91dHB1dCgpIEl0ZW1zOiBFdmVudEVtaXR0ZXI8VFtdPiA9IG5ldyBFdmVudEVtaXR0ZXI8VFtdPigpO1xyXG4gIEBJbnB1dCgpIG9wdGlvbnM6IFBhZ2luZ09wdGlvbnM7XHJcblxyXG4gIEBJbnB1dCgpIGdyb3VwOiBGb3JtR3JvdXA7XHJcblxyXG5cclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgdXRpbGl0eVNlcnZpY2U6IFV0aWxpdHlTZXJ2aWNlLCBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsIHByaXZhdGUgb25DaGFuZ2VTZXJ2aWNlOiBPblBhZ2luZ0ZpbHRlcnNDaGFuZ2VTZXJ2aWNlLCBwcml2YXRlIHJlcXVlc3RIYW5kbGVyU2VydmljZTogUmVxdWVzdEhhbmRsZXJTZXJ2aWNlKSB7XHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLklzTG9hZE1vcmVDb250cm9sKVxyXG4gICAgICB0aGlzLlN1bSA9IHRoaXMub3B0aW9ucy5QYWdlU2l6ZTtcclxuXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLkRyb3Bkb3duRmlsdGVyc0NvbnRyb2xOYW1lcyAhPSBudWxsICYmIHRoaXMub3B0aW9ucy5Ecm9wZG93bkZpbHRlcnNDb250cm9sTmFtZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCBEcm9wZG93bkZpbHRlcnNDb250cm9sTmFtZXMgPSB0aGlzLm9wdGlvbnMuRHJvcGRvd25GaWx0ZXJzQ29udHJvbE5hbWVzO1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlU2VydmljZS5HZXRWYWx1ZSgpLnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5vcHRpb25zLkRyb3Bkb3duRmlsdGVyc0NvbnRyb2xOYW1lcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0gPT0gdmFsdWUpXHJcbiAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0aGlzLklzRmlyc3RDYWxsID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuQ3VycmVudFBhZ2UgPSAxO1xyXG4gICAgICAgICAgdGhpcy5nZXRJdGVtTGlzdCh0aGlzLkN1cnJlbnRQYWdlLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5Cb290c3RyYXBEYXRlUGlja2Vyc0ZpbHRlcnNDb250cm9sTmFtZXMgIT0gbnVsbCAmJiB0aGlzLm9wdGlvbnMuQm9vdHN0cmFwRGF0ZVBpY2tlcnNGaWx0ZXJzQ29udHJvbE5hbWVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc3QgQm9vdHN0cmFwRGF0ZVBpY2tlcnNGaWx0ZXJzQ29udHJvbE5hbWVzID0gdGhpcy5vcHRpb25zLkJvb3RzdHJhcERhdGVQaWNrZXJzRmlsdGVyc0NvbnRyb2xOYW1lcztcclxuICAgICAgdGhpcy5vbkNoYW5nZVNlcnZpY2UuR2V0VmFsdWUoKS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IHRoaXMub3B0aW9ucy5Cb290c3RyYXBEYXRlUGlja2Vyc0ZpbHRlcnNDb250cm9sTmFtZXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtID09IHZhbHVlKVxyXG4gICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgdGhpcy5Jc0ZpcnN0Q2FsbCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLkN1cnJlbnRQYWdlID0gMTtcclxuICAgICAgICAgIHRoaXMuZ2V0SXRlbUxpc3QodGhpcy5DdXJyZW50UGFnZSwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgdGhpcy5Jc0ZpcnN0Q2FsbCA9IHRydWU7XHJcbiAgICB0aGlzLmdldEl0ZW1MaXN0KHRoaXMuQ3VycmVudFBhZ2UsIHRydWUpO1xyXG4gIH1cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5PbkNsaWNrRmlsdGVyc0NvbnRyb2xOYW1lcyAhPSBudWxsICYmIHRoaXMub3B0aW9ucy5PbkNsaWNrRmlsdGVyc0NvbnRyb2xOYW1lcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IE9uQ2xpY2tGaWx0ZXJzQ29udHJvbE5hbWVzID0gdGhpcy5vcHRpb25zLk9uQ2xpY2tGaWx0ZXJzQ29udHJvbE5hbWVzO1xyXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgT25DbGlja0ZpbHRlcnNDb250cm9sTmFtZXMubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgY29uc3QgT25DbGlja0ZpbHRlcnNDb250cm9sTmFtZSA9IE9uQ2xpY2tGaWx0ZXJzQ29udHJvbE5hbWVzW2luZGV4XTtcclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChPbkNsaWNrRmlsdGVyc0NvbnRyb2xOYW1lKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5DdXJyZW50UGFnZSA9IDE7XHJcbiAgICAgICAgICB0aGlzLklzRmlyc3RDYWxsID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuZ2V0SXRlbUxpc3QodGhpcy5DdXJyZW50UGFnZSwgdHJ1ZSk7XHJcbiAgICAgICAgfSwgZmFsc2UpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLk9uS2V5UHJlc3NGaWx0ZXJzQ29udHJvbE5hbWVzICE9IG51bGwgJiYgdGhpcy5vcHRpb25zLk9uS2V5UHJlc3NGaWx0ZXJzQ29udHJvbE5hbWVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc3QgT25LZXlQcmVzc0ZpbHRlcnNDb250cm9sTmFtZXMgPSB0aGlzLm9wdGlvbnMuT25LZXlQcmVzc0ZpbHRlcnNDb250cm9sTmFtZXM7XHJcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBPbktleVByZXNzRmlsdGVyc0NvbnRyb2xOYW1lcy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICBjb25zdCBPbktleVByZXNzRmlsdGVyc0NvbnRyb2xOYW1lID0gT25LZXlQcmVzc0ZpbHRlcnNDb250cm9sTmFtZXNbaW5kZXhdO1xyXG4gICAgICAgbGV0IGVsZW1lbnQ9ICg8YW55PnRoaXMuZ3JvdXAuZ2V0KE9uS2V5UHJlc3NGaWx0ZXJzQ29udHJvbE5hbWUpKS5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5cHJlc3NcIiwgKGUpID0+IHtcclxuICAgICAgICAgIGlmIChlLmtleSA9PSBcIkVudGVyXCIpIHtcclxuICAgICAgICAgICAgdGhpcy5DdXJyZW50UGFnZSA9IDE7XHJcbiAgICAgICAgICAgIHRoaXMuSXNGaXJzdENhbGwgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmdldEl0ZW1MaXN0KHRoaXMuQ3VycmVudFBhZ2UsIHRydWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sIGZhbHNlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5UeXBlYWhlYWRTZWFyY2hDb250cm9sTmFtZXMgIT0gbnVsbCAmJiB0aGlzLm9wdGlvbnMuVHlwZWFoZWFkU2VhcmNoQ29udHJvbE5hbWVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc3QgVHlwZWFoZWFkU2VhcmNoQ29udHJvbE5hbWVzID0gdGhpcy5vcHRpb25zLlR5cGVhaGVhZFNlYXJjaENvbnRyb2xOYW1lcztcclxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IFR5cGVhaGVhZFNlYXJjaENvbnRyb2xOYW1lcy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICBjb25zdCBUeXBlYWhlYWRTZWFyY2hDb250cm9sTmFtZSA9IFR5cGVhaGVhZFNlYXJjaENvbnRyb2xOYW1lc1tpbmRleF07XHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoVHlwZWFoZWFkU2VhcmNoQ29udHJvbE5hbWUpLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlwcmVzc1wiLCAoZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGUua2V5ID09IFwiRW50ZXJcIikge1xyXG4gICAgICAgICAgICB0aGlzLkN1cnJlbnRQYWdlID0gMTtcclxuICAgICAgICAgICAgdGhpcy5Jc0ZpcnN0Q2FsbCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0SXRlbUxpc3QodGhpcy5DdXJyZW50UGFnZSwgdHJ1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSwgZmFsc2UpO1xyXG5cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIG9uRHJvcERvd25DaGFuZ2UocmVzdWx0KSB7XHJcbiAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgIHRoaXMuQ3VycmVudFBhZ2UgPSAxO1xyXG4gICAgICB0aGlzLklzRmlyc3RDYWxsID0gdHJ1ZTtcclxuICAgICAgdGhpcy5nZXRJdGVtTGlzdCh0aGlzLkN1cnJlbnRQYWdlLCB0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlUGFnZShQYWdlKSB7XHJcblxyXG4gICAgaWYgKFBhZ2UgPT0gMClcclxuICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGlmIChQYWdlID4gMCkge1xyXG4gICAgICBpZiAodGhpcy5Jc0ZpcnN0Q2FsbCkge1xyXG4gICAgICAgIHRoaXMuSXNGaXJzdENhbGwgPSBmYWxzZTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5DdXJyZW50UGFnZSA9IFBhZ2U7XHJcbiAgICAgIHRoaXMuZ2V0SXRlbUxpc3QoUGFnZSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGNoYW5nZVBhZ2VTaXplKGUpIHtcclxuXHJcbiAgICB0aGlzLm9wdGlvbnMuUGFnZVNpemUgPSBlLnRhcmdldC52YWx1ZTtcclxuICAgIHRoaXMuQ3VycmVudFBhZ2UgPSAxO1xyXG4gICAgdGhpcy5Jc0ZpcnN0Q2FsbCA9IHRydWU7XHJcbiAgICB0aGlzLmdldEl0ZW1MaXN0KHRoaXMuQ3VycmVudFBhZ2UsIHRydWUpO1xyXG4gIH1cclxuXHJcblxyXG5cclxuXHJcbiAgb25TY3JvbGxEb3duKCkge1xyXG4gICAgdGhpcy5TdW0gKz0gdGhpcy5vcHRpb25zLlBhZ2VTaXplXHJcbiAgICB0aGlzLkN1cnJlbnRQYWdlID0gMVxyXG4gICAgdGhpcy5Jc0ZpcnN0Q2FsbCA9IHRydWU7XHJcbiAgICB0aGlzLmRpcmVjdGlvbiA9ICdkb3duJztcclxuICAgIHRoaXMuZ2V0SXRlbUxpc3QodGhpcy5DdXJyZW50UGFnZSwgdHJ1ZSk7XHJcblxyXG4gIH1cclxuXHJcblxyXG5cclxuICBnZXRJdGVtTGlzdChwYWdlLCBJc0ZpbHRlclVwZGF0ZWQgPSBmYWxzZSkge1xyXG4gICAgbGV0IHBhZ2luZ0RUTyA9IG5ldyBQYWdpbmdEVE8oKTtcclxuICAgIGxldCBzaXplID0gTnVtYmVyLnBhcnNlSW50KHRoaXMub3B0aW9ucy5QYWdlU2l6ZS50b1N0cmluZygpKTtcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuSXNMb2FkTW9yZUNvbnRyb2wpXHJcbiAgICAgIHBhZ2luZ0RUTy5QYWdlQ291bnQgPSB0aGlzLlN1bTtcclxuICAgIGVsc2VcclxuICAgICAgcGFnaW5nRFRPLlBhZ2VDb3VudCA9IHNpemU7XHJcbiAgICBwYWdpbmdEVE8uQ3VycmVudFBhZ2VOdW1iZXIgPSBwYWdlO1xyXG4gICAgcGFnaW5nRFRPLlRvdGFsQ291bnQgPSB0aGlzLnRvdGFsUm93O1xyXG4gICAgcGFnaW5nRFRPLklzRmlsdGVyVXBkYXRlZCA9IElzRmlsdGVyVXBkYXRlZDtcclxuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5GaWx0ZXJzICE9IG51bGwgJiYgdGhpcy5vcHRpb25zLkZpbHRlcnMgIT0gW10pIHtcclxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMub3B0aW9ucy5GaWx0ZXJzLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuRmlsdGVyc1tpbmRleF0uRm9ybUNvbnRyb2xOYW1lICE9IG51bGwgJiYgdGhpcy5vcHRpb25zLkZpbHRlcnNbaW5kZXhdLkZvcm1Db250cm9sTmFtZSAhPSBcIlwiKSB7XHJcbiAgICAgICAgICBjb25zdCBGb3JtQ29udHJvbE5hbWUgPSB0aGlzLm9wdGlvbnMuRmlsdGVyc1tpbmRleF0uRm9ybUNvbnRyb2xOYW1lO1xyXG4gICAgICAgICAgbGV0IENvbnRyb2xWYWx1ZSA9IHRoaXMuZ3JvdXAuY29udHJvbHNbRm9ybUNvbnRyb2xOYW1lXS52YWx1ZTtcclxuICAgICAgICAgIGlmIChDb250cm9sVmFsdWUgIT0gdW5kZWZpbmVkICYmIENvbnRyb2xWYWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuRmlsdGVyc1tpbmRleF0uRmlsdGVyVHlwZSA9PSBGaWx0ZXJUeXBlLkRhdGVQaWNrZXIpIHtcclxuICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShDb250cm9sVmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBlbGVtZW50ID0gMDsgZWxlbWVudCA8IENvbnRyb2xWYWx1ZS5sZW5ndGg7IGVsZW1lbnQrKykge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IENvbnRyb2xWYWx1ZVtlbGVtZW50XTtcclxuICAgICAgICAgICAgICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCh0aGlzLm9wdGlvbnMuRmlsdGVyc1tpbmRleF0uQWN0aW9uUGFyYW1ldGVyTmFtZSwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQodGhpcy5vcHRpb25zLkZpbHRlcnNbaW5kZXhdLkFjdGlvblBhcmFtZXRlck5hbWUsIENvbnRyb2xWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuRmlsdGVyc1tpbmRleF0uRmlsdGVyVHlwZSA9PSBGaWx0ZXJUeXBlLkF1dG9jb21wbGV0ZVRleHRCb3gpXHJcbiAgICAgICAgICAgICAgICBDb250cm9sVmFsdWUgPSBKU09OLnN0cmluZ2lmeShDb250cm9sVmFsdWUpO1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuRmlsdGVyc1tpbmRleF0uRmlsdGVyVHlwZSA9PSBGaWx0ZXJUeXBlLlRhZ0lucHV0KVxyXG4gICAgICAgICAgICAgICBDb250cm9sVmFsdWUgPSBKU09OLnN0cmluZ2lmeShDb250cm9sVmFsdWUpO1xyXG5cclxuICAgICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKHRoaXMub3B0aW9ucy5GaWx0ZXJzW2luZGV4XS5BY3Rpb25QYXJhbWV0ZXJOYW1lLCBDb250cm9sVmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgRWxlbWVudGpRdWVyeVNlbGVjdG9yID0gdGhpcy5vcHRpb25zLkZpbHRlcnNbaW5kZXhdLmpRdWVyeVNlbGVjdG9yO1xyXG4gICAgICAgICAgbGV0IEVsZW1lbnRWYWx1ZSA9IChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKEVsZW1lbnRqUXVlcnlTZWxlY3RvcikgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XHJcbiAgICAgICAgICBpZiAoRWxlbWVudFZhbHVlICE9IHVuZGVmaW5lZCAmJiBFbGVtZW50VmFsdWUgIT0gbnVsbClcclxuICAgICAgICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCh0aGlzLm9wdGlvbnMuRmlsdGVyc1tpbmRleF0uQWN0aW9uUGFyYW1ldGVyTmFtZSwgRWxlbWVudFZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlcXVlc3RIYW5kbGVyU2VydmljZS5wb3N0KHRoaXMub3B0aW9ucy5BY3Rpb25Qb3N0VVJMLCBwYWdpbmdEVE8sbnVsbCwgcGFyYW1zLG51bGwpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlRGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgZGVidWdnZXI7XHJcbiAgICAgICAgdGhpcy5yZXN1bHQgPSAgcmVzcG9uc2VEYXRhLml0ZW1zIC8vdGhpcy5jYXN0SXRlbXMocmVzcG9uc2VEYXRhLml0ZW1zKTtcclxuICAgICAgICBsZXQgY2FzdGVkUmVzdWx0PXBsYWluVG9DbGFzcyh0aGlzLm9wdGlvbnMuVHlwZU9mUmVzcG9uc2UsdGhpcy5yZXN1bHQsIHsgZXhjbHVkZUV4dHJhbmVvdXNWYWx1ZXM6IHRydWUgfSlcclxuICAgICAgICB0aGlzLkl0ZW1zLmVtaXQoY2FzdGVkUmVzdWx0KTtcclxuICAgICAgICB0aGlzLnRvdGFsUm93ID0gcmVzcG9uc2VEYXRhLnRvdGFsQ291bnQ7XHJcblxyXG4gICAgICAgIGlmIChJc0ZpbHRlclVwZGF0ZWQpIHtcclxuICAgICAgICAgIHRoaXMuaXRlbXMgPSBbXTtcclxuICAgICAgICAgIHRoaXMuUGFnZXMgPSBNYXRoLmNlaWwoKHRoaXMudG90YWxSb3cgLyB0aGlzLm9wdGlvbnMuUGFnZVNpemUpKTtcclxuICAgICAgICAgIHRoaXMuaXRlbXMgPSBBcnJheSh0aGlzLnRvdGFsUm93KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sKGVycm9yOkh0dHBFcnJvclJlc3BvbnNlKT0+e1xyXG4gICAgICAgIGlmKGVycm9yLnN0YXR1cz09NDAxKVxyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcIi9BZG1pbi9hY2NvdW50L2xvZ2luXCJdKSAgXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgUmVpbml0aWFsaXplUGFnaW5nID0gKCkgPT4ge1xyXG4gICAgdGhpcy5Jc0ZpcnN0Q2FsbCA9IHRydWU7XHJcbiAgICB0aGlzLmdldEl0ZW1MaXN0KDEsIHRydWUpO1xyXG4gIH1cclxuXHJcbiAgVXBkYXRlUGFnaW5nID0gKCkgPT4ge1xyXG4gICAgLy90aGlzLklzRmlyc3RDYWxsPXRydWU7XHJcbiAgICB0aGlzLmdldEl0ZW1MaXN0KHRoaXMuQ3VycmVudFBhZ2UpO1xyXG4gIH1cclxuXHJcbiAgY2FzdEl0ZW1zKG9iamVjdEFyciA6YW55W10pIDpUW10ge1xyXG4gICAgZGVidWdnZXJcclxuICAgIGxldCBvcmlnaW5hbEFycmF5OlRbXT1bXVxyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IG9iamVjdEFyci5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgY29uc3QgZWxlbWVudCA9IG9iamVjdEFycltpbmRleF07XHJcbiAgICAgIGxldCBrZXksIGtleXMgPSBPYmplY3Qua2V5cyhlbGVtZW50KTtcclxuICAgICAgbGV0IG4gPSBrZXlzLmxlbmd0aDtcclxuICAgICAgbGV0IG5ld09iamVjdCA9IHt9XHJcbiAgICAgIHdoaWxlIChuLS0pIHtcclxuICAgICAgICBrZXkgPSBrZXlzW25dO1xyXG4gICAgICAgIGxldCBPa2V5ID0ga2V5XHJcbiAgICAgICAgbmV3T2JqZWN0W2tleS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIE9rZXkuc2xpY2UoMSldID0gZWxlbWVudFtrZXldO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBmaW5hbE9iamVjdD0gbmV3T2JqZWN0IGFzIFRcclxuICAgICAgb3JpZ2luYWxBcnJheS5wdXNoKGZpbmFsT2JqZWN0KVxyXG4gICAgfVxyXG4gICBcclxuICAgIHJldHVybiBvcmlnaW5hbEFycmF5O1xyXG4gIH1cclxuXHJcblxyXG59XHJcbiJdfQ==
|
|
243
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFnaW5nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtY29udHJvbHMvc3JjL2xpYi9jb250cm9scy9QYWdpbmcvUGFnaW5nLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUE2QixNQUFNLGVBQWUsQ0FBQztBQUMxRyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLFVBQVUsRUFBa0MsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDOUYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBSzFELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ25HLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDakYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWpELHFEQUFxRDtBQU1yRCxNQUFNLE9BQU8sZUFBZTtJQXlCMUIsWUFBbUIsY0FBOEIsRUFBVSxJQUFnQixFQUFVLE1BQWMsRUFBVSxlQUE2QyxFQUFVLHFCQUE0QztRQUE3TCxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFBVSxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFVLG9CQUFlLEdBQWYsZUFBZSxDQUE4QjtRQUFVLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7UUF4QmhOLFVBQUssR0FBRyxFQUFFLENBQUM7UUFFWCxXQUFNLEdBQVEsRUFBRSxDQUFDO1FBQ2pCLGdCQUFXLEdBQVEsSUFBSSxDQUFDO1FBQ3hCLGFBQVEs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WUFDbEIsT0FBTyxDQUFDLEVBQUUsRUFBRTtnQkFDVixHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNkLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQTtnQkFDZCxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3ZFO1lBQ0QsSUFBSSxXQUFXLEdBQUUsU0FBYyxDQUFBO1lBQy9CLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUE7U0FDaEM7UUFFRCxPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDOzs7WUF0UEYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxhQUFhO2dCQUN2QiwwMkRBQXNDOzthQUV2Qzs7O1lBUitCLGNBQWM7WUFSckMsVUFBVTtZQURWLE1BQU07WUFPTiw0QkFBNEI7WUFFNUIscUJBQXFCOzs7b0JBNEIzQixNQUFNO3NCQUNOLEtBQUs7b0JBRUwsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIFNpbXBsZUNoYW5nZXMsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEVycm9yUmVzcG9uc2UsIEh0dHBIZWFkZXJzLCBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBQYWdpbmdEVE8gfSBmcm9tICcuLi8uLi9TaGFyZWQvTW9kZWxzL1BhZ2luZ0RUTyc7XHJcbmltcG9ydCB7IFBhZ2luZ09wdGlvbnMgfSBmcm9tICcuLi8uLi9TaGFyZWQvTW9kZWxzL1BhZ2luZ09wdGlvbnMnO1xyXG5pbXBvcnQgeyBSZXF1ZXN0T3B0aW9ucywgUmVzcG9uc2VDb250ZW50VHlwZSwgSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2h0dHAnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgT25QYWdpbmdGaWx0ZXJzQ2hhbmdlU2VydmljZSB9IGZyb20gJy4uLy4uL1NoYXJlZC9zZXJ2aWNlcy9PblBhZ2luZ0ZpbHRlcnNDaGFuZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEZpbHRlclR5cGUgfSBmcm9tICcuLi8uLi9TaGFyZWQvRW51bXMvRmlsdGVyVHlwZSc7XHJcbmltcG9ydCB7IFJlcXVlc3RIYW5kbGVyU2VydmljZSwgVXRpbGl0eVNlcnZpY2UgfSBmcm9tICdAYm5zaWdodHMvYmJzZi11dGlsaXRpZXMnO1xyXG5pbXBvcnQgeyBwbGFpblRvQ2xhc3MgfSBmcm9tICdjbGFzcy10cmFuc2Zvcm1lcic7XHJcblxyXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWNvbmZsaWN0aW5nLWxpZmVjeWNsZVxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ0JCU0YtUGFnaW5nJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vUGFnaW5nLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9QYWdpbmcuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGFnaW5nQ29tcG9uZW50PFQ+IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBpdGVtcyA9IFtdO1xyXG4gIHBhZ2VPZkl0ZW1zOiBBcnJheTxhbnk+O1xyXG4gIHJlc3VsdDogVFtdID0gW107XHJcbiAgcGFnZXJDb25maWc6IGFueSA9IG51bGw7XHJcbiAgdG90YWxSb3c6IGFueSA9IDA7XHJcbiAgcGFnZVNpemU6IGFueSA9IDEwXHJcbiAgUGFnZXM6IGFueSA9IDBcclxuICBDdXJyZW50UGFnZTogYW55ID0gMVxyXG4gIFNob3dQYWdlU2l6ZU9wdGlvbiA9IHRydWU7XHJcbiAgU2hvd0ZpcnN0QW5kTGFzdCA9IHRydWU7XHJcbiAgaGlkZVBhZ2luYXRpb25XaGVuUGFnZVNpemVFcXVhbE9uZSA9IHRydWVcclxuICBTdW0gPSAwO1xyXG4gIFRocm90dGxlID0gMzAwO1xyXG4gIFNjcm9sbERpc3RhbmNlID0gMTtcclxuICBTY3JvbGxVcERpc3RhbmNlID0gMjtcclxuICBkaXJlY3Rpb24gPSAnJztcclxuICBIZWFkZXJzOiBIdHRwSGVhZGVycztcclxuICBJc0ZpcnN0Q2FsbDogYm9vbGVhbiA9IHRydWU7XHJcbiAgQE91dHB1dCgpIEl0ZW1zOiBFdmVudEVtaXR0ZXI8VFtdPiA9IG5ldyBFdmVudEVtaXR0ZXI8VFtdPigpO1xyXG4gIEBJbnB1dCgpIG9wdGlvbnM6IFBhZ2luZ09wdGlvbnM7XHJcblxyXG4gIEBJbnB1dCgpIGdyb3VwOiBGb3JtR3JvdXA7XHJcblxyXG5cclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgdXRpbGl0eVNlcnZpY2U6IFV0aWxpdHlTZXJ2aWNlLCBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsIHByaXZhdGUgb25DaGFuZ2VTZXJ2aWNlOiBPblBhZ2luZ0ZpbHRlcnNDaGFuZ2VTZXJ2aWNlLCBwcml2YXRlIHJlcXVlc3RIYW5kbGVyU2VydmljZTogUmVxdWVzdEhhbmRsZXJTZXJ2aWNlKSB7XHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLklzTG9hZE1vcmVDb250cm9sKVxyXG4gICAgICB0aGlzLlN1bSA9IHRoaXMub3B0aW9ucy5QYWdlU2l6ZTtcclxuXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLkRyb3Bkb3duRmlsdGVyc0NvbnRyb2xOYW1lcyAhPSBudWxsICYmIHRoaXMub3B0aW9ucy5Ecm9wZG93bkZpbHRlcnNDb250cm9sTmFtZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCBEcm9wZG93bkZpbHRlcnNDb250cm9sTmFtZXMgPSB0aGlzLm9wdGlvbnMuRHJvcGRvd25GaWx0ZXJzQ29udHJvbE5hbWVzO1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlU2VydmljZS5HZXRWYWx1ZSgpLnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5vcHRpb25zLkRyb3Bkb3duRmlsdGVyc0NvbnRyb2xOYW1lcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0gPT0gdmFsdWUpXHJcbiAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0aGlzLklzRmlyc3RDYWxsID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuQ3VycmVudFBhZ2UgPSAxO1xyXG4gICAgICAgICAgdGhpcy5nZXRJdGVtTGlzdCh0aGlzLkN1cnJlbnRQYWdlLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5Cb290c3RyYXBEYXRlUGlja2Vyc0ZpbHRlcnNDb250cm9sTmFtZXMgIT0gbnVsbCAmJiB0aGlzLm9wdGlvbnMuQm9vdHN0cmFwRGF0ZVBpY2tlcnNGaWx0ZXJzQ29udHJvbE5hbWVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc3QgQm9vdHN0cmFwRGF0ZVBpY2tlcnNGaWx0ZXJzQ29udHJvbE5hbWVzID0gdGhpcy5vcHRpb25zLkJvb3RzdHJhcERhdGVQaWNrZXJzRmlsdGVyc0NvbnRyb2xOYW1lcztcclxuICAgICAgdGhpcy5vbkNoYW5nZVNlcnZpY2UuR2V0VmFsdWUoKS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IHRoaXMub3B0aW9ucy5Cb290c3RyYXBEYXRlUGlja2Vyc0ZpbHRlcnNDb250cm9sTmFtZXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtID09IHZhbHVlKVxyXG4gICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgdGhpcy5Jc0ZpcnN0Q2FsbCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLkN1cnJlbnRQYWdlID0gMTtcclxuICAgICAgICAgIHRoaXMuZ2V0SXRlbUxpc3QodGhpcy5DdXJyZW50UGFnZSwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgdGhpcy5Jc0ZpcnN0Q2FsbCA9IHRydWU7XHJcbiAgICB0aGlzLmdldEl0ZW1MaXN0KHRoaXMuQ3VycmVudFBhZ2UsIHRydWUpO1xyXG4gIH1cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5PbkNsaWNrRmlsdGVyc0NvbnRyb2xOYW1lcyAhPSBudWxsICYmIHRoaXMub3B0aW9ucy5PbkNsaWNrRmlsdGVyc0NvbnRyb2xOYW1lcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IE9uQ2xpY2tGaWx0ZXJzQ29udHJvbE5hbWVzID0gdGhpcy5vcHRpb25zLk9uQ2xpY2tGaWx0ZXJzQ29udHJvbE5hbWVzO1xyXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgT25DbGlja0ZpbHRlcnNDb250cm9sTmFtZXMubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgY29uc3QgT25DbGlja0ZpbHRlcnNDb250cm9sTmFtZSA9IE9uQ2xpY2tGaWx0ZXJzQ29udHJvbE5hbWVzW2luZGV4XTtcclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChPbkNsaWNrRmlsdGVyc0NvbnRyb2xOYW1lKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5DdXJyZW50UGFnZSA9IDE7XHJcbiAgICAgICAgICB0aGlzLklzRmlyc3RDYWxsID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuZ2V0SXRlbUxpc3QodGhpcy5DdXJyZW50UGFnZSwgdHJ1ZSk7XHJcbiAgICAgICAgfSwgZmFsc2UpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLk9uS2V5UHJlc3NGaWx0ZXJzQ29udHJvbE5hbWVzICE9IG51bGwgJiYgdGhpcy5vcHRpb25zLk9uS2V5UHJlc3NGaWx0ZXJzQ29udHJvbE5hbWVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc3QgT25LZXlQcmVzc0ZpbHRlcnNDb250cm9sTmFtZXMgPSB0aGlzLm9wdGlvbnMuT25LZXlQcmVzc0ZpbHRlcnNDb250cm9sTmFtZXM7XHJcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBPbktleVByZXNzRmlsdGVyc0NvbnRyb2xOYW1lcy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICBjb25zdCBPbktleVByZXNzRmlsdGVyc0NvbnRyb2xOYW1lID0gT25LZXlQcmVzc0ZpbHRlcnNDb250cm9sTmFtZXNbaW5kZXhdO1xyXG4gICAgICAgbGV0IGVsZW1lbnQ9ICg8YW55PnRoaXMuZ3JvdXAuZ2V0KE9uS2V5UHJlc3NGaWx0ZXJzQ29udHJvbE5hbWUpKS5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5cHJlc3NcIiwgKGUpID0+IHtcclxuICAgICAgICAgIGlmIChlLmtleSA9PSBcIkVudGVyXCIpIHtcclxuICAgICAgICAgICAgdGhpcy5DdXJyZW50UGFnZSA9IDE7XHJcbiAgICAgICAgICAgIHRoaXMuSXNGaXJzdENhbGwgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmdldEl0ZW1MaXN0KHRoaXMuQ3VycmVudFBhZ2UsIHRydWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sIGZhbHNlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5UeXBlYWhlYWRTZWFyY2hDb250cm9sTmFtZXMgIT0gbnVsbCAmJiB0aGlzLm9wdGlvbnMuVHlwZWFoZWFkU2VhcmNoQ29udHJvbE5hbWVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc3QgVHlwZWFoZWFkU2VhcmNoQ29udHJvbE5hbWVzID0gdGhpcy5vcHRpb25zLlR5cGVhaGVhZFNlYXJjaENvbnRyb2xOYW1lcztcclxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IFR5cGVhaGVhZFNlYXJjaENvbnRyb2xOYW1lcy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICBjb25zdCBUeXBlYWhlYWRTZWFyY2hDb250cm9sTmFtZSA9IFR5cGVhaGVhZFNlYXJjaENvbnRyb2xOYW1lc1tpbmRleF07XHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoVHlwZWFoZWFkU2VhcmNoQ29udHJvbE5hbWUpLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlwcmVzc1wiLCAoZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGUua2V5ID09IFwiRW50ZXJcIikge1xyXG4gICAgICAgICAgICB0aGlzLkN1cnJlbnRQYWdlID0gMTtcclxuICAgICAgICAgICAgdGhpcy5Jc0ZpcnN0Q2FsbCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0SXRlbUxpc3QodGhpcy5DdXJyZW50UGFnZSwgdHJ1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSwgZmFsc2UpO1xyXG5cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIG9uRHJvcERvd25DaGFuZ2UocmVzdWx0KSB7XHJcbiAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgIHRoaXMuQ3VycmVudFBhZ2UgPSAxO1xyXG4gICAgICB0aGlzLklzRmlyc3RDYWxsID0gdHJ1ZTtcclxuICAgICAgdGhpcy5nZXRJdGVtTGlzdCh0aGlzLkN1cnJlbnRQYWdlLCB0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlUGFnZShQYWdlKSB7XHJcblxyXG4gICAgaWYgKFBhZ2UgPT0gMClcclxuICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGlmIChQYWdlID4gMCkge1xyXG4gICAgICBpZiAodGhpcy5Jc0ZpcnN0Q2FsbCkge1xyXG4gICAgICAgIHRoaXMuSXNGaXJzdENhbGwgPSBmYWxzZTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5DdXJyZW50UGFnZSA9IFBhZ2U7XHJcbiAgICAgIHRoaXMuZ2V0SXRlbUxpc3QoUGFnZSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGNoYW5nZVBhZ2VTaXplKGUpIHtcclxuXHJcbiAgICB0aGlzLm9wdGlvbnMuUGFnZVNpemUgPSBlLnRhcmdldC52YWx1ZTtcclxuICAgIHRoaXMuQ3VycmVudFBhZ2UgPSAxO1xyXG4gICAgdGhpcy5Jc0ZpcnN0Q2FsbCA9IHRydWU7XHJcbiAgICB0aGlzLmdldEl0ZW1MaXN0KHRoaXMuQ3VycmVudFBhZ2UsIHRydWUpO1xyXG4gIH1cclxuXHJcblxyXG5cclxuXHJcbiAgb25TY3JvbGxEb3duKCkge1xyXG4gICAgdGhpcy5TdW0gKz0gdGhpcy5vcHRpb25zLlBhZ2VTaXplXHJcbiAgICB0aGlzLkN1cnJlbnRQYWdlID0gMVxyXG4gICAgdGhpcy5Jc0ZpcnN0Q2FsbCA9IHRydWU7XHJcbiAgICB0aGlzLmRpcmVjdGlvbiA9ICdkb3duJztcclxuICAgIHRoaXMuZ2V0SXRlbUxpc3QodGhpcy5DdXJyZW50UGFnZSwgdHJ1ZSk7XHJcblxyXG4gIH1cclxuXHJcblxyXG5cclxuICBnZXRJdGVtTGlzdChwYWdlLCBJc0ZpbHRlclVwZGF0ZWQgPSBmYWxzZSkge1xyXG4gICAgbGV0IHBhZ2luZ0RUTyA9IG5ldyBQYWdpbmdEVE8oKTtcclxuICAgIGxldCBzaXplID0gTnVtYmVyLnBhcnNlSW50KHRoaXMub3B0aW9ucy5QYWdlU2l6ZS50b1N0cmluZygpKTtcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuSXNMb2FkTW9yZUNvbnRyb2wpXHJcbiAgICAgIHBhZ2luZ0RUTy5QYWdlQ291bnQgPSB0aGlzLlN1bTtcclxuICAgIGVsc2VcclxuICAgICAgcGFnaW5nRFRPLlBhZ2VDb3VudCA9IHNpemU7XHJcbiAgICBwYWdpbmdEVE8uQ3VycmVudFBhZ2VOdW1iZXIgPSBwYWdlO1xyXG4gICAgcGFnaW5nRFRPLlRvdGFsQ291bnQgPSB0aGlzLnRvdGFsUm93O1xyXG4gICAgcGFnaW5nRFRPLklzRmlsdGVyVXBkYXRlZCA9IElzRmlsdGVyVXBkYXRlZDtcclxuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5GaWx0ZXJzICE9IG51bGwgJiYgdGhpcy5vcHRpb25zLkZpbHRlcnMgIT0gW10pIHtcclxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMub3B0aW9ucy5GaWx0ZXJzLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuRmlsdGVyc1tpbmRleF0uRm9ybUNvbnRyb2xOYW1lICE9IG51bGwgJiYgdGhpcy5vcHRpb25zLkZpbHRlcnNbaW5kZXhdLkZvcm1Db250cm9sTmFtZSAhPSBcIlwiKSB7XHJcbiAgICAgICAgICBjb25zdCBGb3JtQ29udHJvbE5hbWUgPSB0aGlzLm9wdGlvbnMuRmlsdGVyc1tpbmRleF0uRm9ybUNvbnRyb2xOYW1lO1xyXG4gICAgICAgICAgbGV0IENvbnRyb2xWYWx1ZSA9IHRoaXMuZ3JvdXAuY29udHJvbHNbRm9ybUNvbnRyb2xOYW1lXS52YWx1ZTtcclxuICAgICAgICAgIGlmIChDb250cm9sVmFsdWUgIT0gdW5kZWZpbmVkICYmIENvbnRyb2xWYWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuRmlsdGVyc1tpbmRleF0uRmlsdGVyVHlwZSA9PSBGaWx0ZXJUeXBlLkRhdGVQaWNrZXIpIHtcclxuICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShDb250cm9sVmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBlbGVtZW50ID0gMDsgZWxlbWVudCA8IENvbnRyb2xWYWx1ZS5sZW5ndGg7IGVsZW1lbnQrKykge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IENvbnRyb2xWYWx1ZVtlbGVtZW50XTtcclxuICAgICAgICAgICAgICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCh0aGlzLm9wdGlvbnMuRmlsdGVyc1tpbmRleF0uQWN0aW9uUGFyYW1ldGVyTmFtZSwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQodGhpcy5vcHRpb25zLkZpbHRlcnNbaW5kZXhdLkFjdGlvblBhcmFtZXRlck5hbWUsIENvbnRyb2xWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuRmlsdGVyc1tpbmRleF0uRmlsdGVyVHlwZSA9PSBGaWx0ZXJUeXBlLkF1dG9jb21wbGV0ZVRleHRCb3gpXHJcbiAgICAgICAgICAgICAgICBDb250cm9sVmFsdWUgPSBKU09OLnN0cmluZ2lmeShDb250cm9sVmFsdWUpO1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuRmlsdGVyc1tpbmRleF0uRmlsdGVyVHlwZSA9PSBGaWx0ZXJUeXBlLlRhZ0lucHV0KVxyXG4gICAgICAgICAgICAgICBDb250cm9sVmFsdWUgPSBKU09OLnN0cmluZ2lmeShDb250cm9sVmFsdWUpO1xyXG5cclxuICAgICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKHRoaXMub3B0aW9ucy5GaWx0ZXJzW2luZGV4XS5BY3Rpb25QYXJhbWV0ZXJOYW1lLCBDb250cm9sVmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgRWxlbWVudGpRdWVyeVNlbGVjdG9yID0gdGhpcy5vcHRpb25zLkZpbHRlcnNbaW5kZXhdLmpRdWVyeVNlbGVjdG9yO1xyXG4gICAgICAgICAgbGV0IEVsZW1lbnRWYWx1ZSA9IChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKEVsZW1lbnRqUXVlcnlTZWxlY3RvcikgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XHJcbiAgICAgICAgICBpZiAoRWxlbWVudFZhbHVlICE9IHVuZGVmaW5lZCAmJiBFbGVtZW50VmFsdWUgIT0gbnVsbClcclxuICAgICAgICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCh0aGlzLm9wdGlvbnMuRmlsdGVyc1tpbmRleF0uQWN0aW9uUGFyYW1ldGVyTmFtZSwgRWxlbWVudFZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlcXVlc3RIYW5kbGVyU2VydmljZS5wb3N0KHRoaXMub3B0aW9ucy5BY3Rpb25Qb3N0VVJMLCBwYWdpbmdEVE8sbnVsbCwgcGFyYW1zLG51bGwpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlRGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgZGVidWdnZXI7XHJcbiAgICAgICAgdGhpcy5yZXN1bHQgPSAgcmVzcG9uc2VEYXRhLml0ZW1zIC8vdGhpcy5jYXN0SXRlbXMocmVzcG9uc2VEYXRhLml0ZW1zKTtcclxuICAgICAgICBsZXQgY2FzdGVkUmVzdWx0PXBsYWluVG9DbGFzcyh0aGlzLm9wdGlvbnMuVHlwZU9mUmVzcG9uc2UsdGhpcy5yZXN1bHQsIHsgZXhjbHVkZUV4dHJhbmVvdXNWYWx1ZXM6IHRydWUgfSlcclxuICAgICAgICB0aGlzLkl0ZW1zLmVtaXQoY2FzdGVkUmVzdWx0KTtcclxuICAgICAgICB0aGlzLnRvdGFsUm93ID0gcmVzcG9uc2VEYXRhLnRvdGFsQ291bnQ7XHJcblxyXG4gICAgICAgIGlmIChJc0ZpbHRlclVwZGF0ZWQpIHtcclxuICAgICAgICAgIHRoaXMuaXRlbXMgPSBbXTtcclxuICAgICAgICAgIHRoaXMuUGFnZXMgPSBNYXRoLmNlaWwoKHRoaXMudG90YWxSb3cgLyB0aGlzLm9wdGlvbnMuUGFnZVNpemUpKTtcclxuICAgICAgICAgIHRoaXMuaXRlbXMgPSBBcnJheSh0aGlzLnRvdGFsUm93KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sKGVycm9yOkh0dHBFcnJvclJlc3BvbnNlKT0+e1xyXG4gICAgICAgIGlmKGVycm9yLnN0YXR1cz09NDAxKVxyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcIi9BZG1pbi9hY2NvdW50L2xvZ2luXCJdKSAgXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgUmVpbml0aWFsaXplUGFnaW5nID0gKCkgPT4ge1xyXG4gICAgdGhpcy5Jc0ZpcnN0Q2FsbCA9IHRydWU7XHJcbiAgICB0aGlzLmdldEl0ZW1MaXN0KDEsIHRydWUpO1xyXG4gIH1cclxuXHJcbiAgVXBkYXRlUGFnaW5nID0gKCkgPT4ge1xyXG4gICAgLy90aGlzLklzRmlyc3RDYWxsPXRydWU7XHJcbiAgICB0aGlzLmdldEl0ZW1MaXN0KHRoaXMuQ3VycmVudFBhZ2UpO1xyXG4gIH1cclxuXHJcbiAgY2FzdEl0ZW1zKG9iamVjdEFyciA6YW55W10pIDpUW10ge1xyXG4gICAgZGVidWdnZXJcclxuICAgIGxldCBvcmlnaW5hbEFycmF5OlRbXT1bXVxyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IG9iamVjdEFyci5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgY29uc3QgZWxlbWVudCA9IG9iamVjdEFycltpbmRleF07XHJcbiAgICAgIGxldCBrZXksIGtleXMgPSBPYmplY3Qua2V5cyhlbGVtZW50KTtcclxuICAgICAgbGV0IG4gPSBrZXlzLmxlbmd0aDtcclxuICAgICAgbGV0IG5ld09iamVjdCA9IHt9XHJcbiAgICAgIHdoaWxlIChuLS0pIHtcclxuICAgICAgICBrZXkgPSBrZXlzW25dO1xyXG4gICAgICAgIGxldCBPa2V5ID0ga2V5XHJcbiAgICAgICAgbmV3T2JqZWN0W2tleS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIE9rZXkuc2xpY2UoMSldID0gZWxlbWVudFtrZXldO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBmaW5hbE9iamVjdD0gbmV3T2JqZWN0IGFzIFRcclxuICAgICAgb3JpZ2luYWxBcnJheS5wdXNoKGZpbmFsT2JqZWN0KVxyXG4gICAgfVxyXG4gICBcclxuICAgIHJldHVybiBvcmlnaW5hbEFycmF5O1xyXG4gIH1cclxuXHJcblxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { Component, Input, ViewChild, ViewChildren } from '@angular/core';
|
|
2
|
+
import { FormGroup } from '@angular/forms';
|
|
3
|
+
import { NgTemplateNameDirective } from '../../../Shared/Directives/template-name.directive';
|
|
4
|
+
export class RepeaterComponent {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.templateRefs = [];
|
|
7
|
+
this.items = [];
|
|
8
|
+
this.repeaterContext = { index: 0, delete: null, elements: null };
|
|
9
|
+
}
|
|
10
|
+
ngOnInit() {
|
|
11
|
+
this.currentTemplate = this.initialTemplate;
|
|
12
|
+
this.repeaterGroup = new FormGroup({});
|
|
13
|
+
this.group.addControl(this.options.Name, this.repeaterGroup);
|
|
14
|
+
this.group.get(this.options.Name).setValue(this.options.RepeaterValue);
|
|
15
|
+
for (let index = 0; index < this.options.MinRequiredItems; index++) {
|
|
16
|
+
this.items.push(index);
|
|
17
|
+
}
|
|
18
|
+
this.repeaterGroup.valueChanges.subscribe((res) => {
|
|
19
|
+
let result = [];
|
|
20
|
+
let rowNumber = [];
|
|
21
|
+
let addItems = [];
|
|
22
|
+
for (const key in this.repeaterGroup.controls) {
|
|
23
|
+
if (Object.prototype.hasOwnProperty.call(this.repeaterGroup.controls, key)) {
|
|
24
|
+
const keySplitArr = key.split('.');
|
|
25
|
+
let item = {
|
|
26
|
+
[keySplitArr[1]]: { [keySplitArr[0]]: this.group.controls[this.options.Name].value[key] }
|
|
27
|
+
};
|
|
28
|
+
addItems.push(item);
|
|
29
|
+
if (!rowNumber.includes(keySplitArr[1]))
|
|
30
|
+
rowNumber.push(keySplitArr[1]);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
for (let index = 0; index < rowNumber.length; index++) {
|
|
34
|
+
const row = rowNumber[index];
|
|
35
|
+
let addObject = {};
|
|
36
|
+
let filteredElements = addItems.filter(item => item[row]);
|
|
37
|
+
for (let index = 0; index < filteredElements.length; index++) {
|
|
38
|
+
const filteredElement = filteredElements[index];
|
|
39
|
+
for (const key in filteredElement) {
|
|
40
|
+
if (Object.prototype.hasOwnProperty.call(filteredElement, key)) {
|
|
41
|
+
const element = filteredElement[key];
|
|
42
|
+
for (const key in element) {
|
|
43
|
+
if (Object.prototype.hasOwnProperty.call(element, key)) {
|
|
44
|
+
const value = element[key];
|
|
45
|
+
addObject[key] = value;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
result.push(addObject);
|
|
52
|
+
}
|
|
53
|
+
this.options.RepeaterValue = result;
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
deleteItem(Index) {
|
|
57
|
+
if (this.items.length == this.options.MinRequiredItems && this.options.IsRequired)
|
|
58
|
+
return;
|
|
59
|
+
let deletedControls = [];
|
|
60
|
+
let controlNames = this.options.RepeaterStructure.map(e => e.ControlOptions.Name);
|
|
61
|
+
for (const key in this.repeaterGroup.controls) {
|
|
62
|
+
if (Object.prototype.hasOwnProperty.call(this.repeaterGroup.controls, key)) {
|
|
63
|
+
for (let index = 0; index < controlNames.length; index++) {
|
|
64
|
+
const element = controlNames[index];
|
|
65
|
+
const keySplitArr = key.split('.');
|
|
66
|
+
if (keySplitArr[0] + keySplitArr[1] == `${element}${Index}`) {
|
|
67
|
+
const element = this.repeaterGroup.controls[key];
|
|
68
|
+
deletedControls.push({ [key]: element });
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
for (let index = 0; index < deletedControls.length; index++) {
|
|
74
|
+
const element = deletedControls[index];
|
|
75
|
+
for (const key in element) {
|
|
76
|
+
if (Object.prototype.hasOwnProperty.call(element, key)) {
|
|
77
|
+
this.repeaterGroup.removeControl(key);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
let item = this.items[Index];
|
|
82
|
+
this.items = this.items.filter((res) => res != item);
|
|
83
|
+
}
|
|
84
|
+
AddItem() {
|
|
85
|
+
this.items.push(this.items.length + 1);
|
|
86
|
+
}
|
|
87
|
+
ngAfterViewInit() {
|
|
88
|
+
let templateRefs = this._templates["_results"].map((item) => item["template"]);
|
|
89
|
+
this.templateRefs = templateRefs;
|
|
90
|
+
this.repeaterContext.elements = this.templateRefs;
|
|
91
|
+
this.repeaterContext.delete = this.delete;
|
|
92
|
+
}
|
|
93
|
+
setCurrentIndex(i) {
|
|
94
|
+
this.repeaterContext.index = i;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
RepeaterComponent.decorators = [
|
|
98
|
+
{ type: Component, args: [{
|
|
99
|
+
selector: 'BBSF-repeater',
|
|
100
|
+
template: "<div *ngFor='let item of items ; index as i'>\r\n {{setCurrentIndex(i)}}\r\n <ng-container *ngTemplateOutlet=\"currentTemplate; context: repeaterContext\">\r\n </ng-container>\r\n\r\n</div>\r\n\r\n<div>\r\n <ng-container *ngTemplateOutlet=\"add\">\r\n </ng-container>\r\n</div>\r\n\r\n<ng-template *ngFor=\"let RepeaterField of options.RepeaterStructure ; index as i\" name=\"R{{i}}\" \r\n let-Index=\"itemIndex\" let-control=\"controlIndex\">\r\n <repeater-field-builder *ngIf=\"RepeaterField\" [RepeaterField]=\"RepeaterField\" [itemNumber]=\"Index\" [controlNumber]=\"control\"\r\n [group]=\"repeaterGroup\"></repeater-field-builder>\r\n</ng-template>\r\n\r\n<ng-template #delete let-item=\"itemIndex\">\r\n <button class=\"{{options.DeleteButtonExtraClasses}}\" type=\"button\" (click)=\"deleteItem(item)\"\r\n [disabled]=\"items.length ==options.MinRequiredItems&&options.IsRequired\"> <span [innerHTML]=\"options.DeleteButtonText\"></span></button>\r\n</ng-template>\r\n\r\n<ng-template #add>\r\n <button class=\"{{options.AddButtonExtraClasses}}\" type=\"button\"\r\n (click)=\"AddItem()\"><span [innerHTML]=\"options.AddButtonText\"></span></button>\r\n</ng-template>\r\n\r\n\r\n\r\n\r\n\r\n<!-- <ng-template adHost></ng-template> -->",
|
|
101
|
+
styles: [""]
|
|
102
|
+
},] }
|
|
103
|
+
];
|
|
104
|
+
RepeaterComponent.ctorParameters = () => [];
|
|
105
|
+
RepeaterComponent.propDecorators = {
|
|
106
|
+
group: [{ type: Input }],
|
|
107
|
+
options: [{ type: Input }],
|
|
108
|
+
initialTemplate: [{ type: Input }],
|
|
109
|
+
_templates: [{ type: ViewChildren, args: [NgTemplateNameDirective,] }],
|
|
110
|
+
delete: [{ type: ViewChild, args: ['delete', { static: false },] }]
|
|
111
|
+
};
|
|
112
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwZWF0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1jb250cm9scy9zcmMvbGliL2NvbnRyb2xzL1JlcGVhdGVyL3JlcGVhdGVyL3JlcGVhdGVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBa0MsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFRN0YsTUFBTSxPQUFPLGlCQUFpQjtJQVk1QjtRQU5BLGlCQUFZLEdBQTRCLEVBQUUsQ0FBQztRQUMzQyxVQUFLLEdBQWEsRUFBRSxDQUFBO1FBR3BCLG9CQUFlLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO0lBRTdDLENBQUM7SUFFakIsUUFBUTtRQUNOLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUM1QyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBQ3RFLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FB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QUFFLGVBQWU7Z0JBQ3pCLHl4Q0FBd0M7O2FBRXpDOzs7O29CQUVFLEtBQUs7c0JBQ0wsS0FBSzs4QkFDTCxLQUFLO3lCQUNMLFlBQVksU0FBQyx1QkFBdUI7cUJBQ3BDLFNBQVMsU0FBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBRdWVyeUxpc3QsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIFZpZXdDaGlsZHJlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFJlcGVhdGVyT3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL1NoYXJlZC9Nb2RlbHMvUmVwZWF0ZXJPcHRpb25zJztcclxuaW1wb3J0IHsgTmdUZW1wbGF0ZU5hbWVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9TaGFyZWQvRGlyZWN0aXZlcy90ZW1wbGF0ZS1uYW1lLmRpcmVjdGl2ZSc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdCQlNGLXJlcGVhdGVyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmVwZWF0ZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3JlcGVhdGVyLmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVwZWF0ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQgeyBcclxuICBASW5wdXQoKSBncm91cDogRm9ybUdyb3VwO1xyXG4gIEBJbnB1dCgpIG9wdGlvbnM6IFJlcGVhdGVyT3B0aW9ucztcclxuICBASW5wdXQoKSBpbml0aWFsVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZHJlbihOZ1RlbXBsYXRlTmFtZURpcmVjdGl2ZSkgcHJpdmF0ZSBfdGVtcGxhdGVzOiBRdWVyeUxpc3Q8TmdUZW1wbGF0ZU5hbWVEaXJlY3RpdmU+O1xyXG4gIEBWaWV3Q2hpbGQoJ2RlbGV0ZScsIHsgc3RhdGljOiBmYWxzZSB9KSBkZWxldGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgdGVtcGxhdGVSZWZzOiBBcnJheTxUZW1wbGF0ZVJlZjxhbnk+PiA9IFtdO1xyXG4gIGl0ZW1zOiBudW1iZXJbXSA9IFtdXHJcbiAgcmVwZWF0ZXJHcm91cDogRm9ybUdyb3VwO1xyXG4gIGN1cnJlbnRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICByZXBlYXRlckNvbnRleHQgPSB7IGluZGV4OiAwLCBkZWxldGU6IG51bGwsIGVsZW1lbnRzOiBudWxsIH07XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5jdXJyZW50VGVtcGxhdGUgPSB0aGlzLmluaXRpYWxUZW1wbGF0ZTtcclxuICAgIHRoaXMucmVwZWF0ZXJHcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gICAgdGhpcy5ncm91cC5hZGRDb250cm9sKHRoaXMub3B0aW9ucy5OYW1lLCB0aGlzLnJlcGVhdGVyR3JvdXApO1xyXG4gICAgdGhpcy5ncm91cC5nZXQodGhpcy5vcHRpb25zLk5hbWUpLnNldFZhbHVlKHRoaXMub3B0aW9ucy5SZXBlYXRlclZhbHVlKVxyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMub3B0aW9ucy5NaW5SZXF1aXJlZEl0ZW1zOyBpbmRleCsrKSB7XHJcbiAgICAgIHRoaXMuaXRlbXMucHVzaChpbmRleCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlcGVhdGVyR3JvdXAudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgIGxldCByZXN1bHQgPSBbXTtcclxuICAgICAgbGV0IHJvd051bWJlciA9IFtdO1xyXG4gICAgICBsZXQgYWRkSXRlbXMgPSBbXTtcclxuICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5yZXBlYXRlckdyb3VwLmNvbnRyb2xzKSB7XHJcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnJlcGVhdGVyR3JvdXAuY29udHJvbHMsIGtleSkpIHtcclxuICAgICAgICAgIGNvbnN0IGtleVNwbGl0QXJyID0ga2V5LnNwbGl0KCcuJylcclxuICAgICAgICAgIGxldCBpdGVtID0ge1xyXG4gICAgICAgICAgICBba2V5U3BsaXRBcnJbMV1dOiB7IFtrZXlTcGxpdEFyclswXV06IHRoaXMuZ3JvdXAuY29udHJvbHNbdGhpcy5vcHRpb25zLk5hbWVdLnZhbHVlW2tleV0gfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYWRkSXRlbXMucHVzaChpdGVtKVxyXG4gICAgICAgICAgaWYgKCFyb3dOdW1iZXIuaW5jbHVkZXMoa2V5U3BsaXRBcnJbMV0pKVxyXG4gICAgICAgICAgICByb3dOdW1iZXIucHVzaChrZXlTcGxpdEFyclsxXSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHJvd051bWJlci5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICBjb25zdCByb3cgPSByb3dOdW1iZXJbaW5kZXhdO1xyXG4gICAgICAgIGxldCBhZGRPYmplY3QgPSB7fVxyXG4gICAgICAgIGxldCBmaWx0ZXJlZEVsZW1lbnRzID0gYWRkSXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbVtyb3ddKVxyXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBmaWx0ZXJlZEVsZW1lbnRzLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgICAgY29uc3QgZmlsdGVyZWRFbGVtZW50ID0gZmlsdGVyZWRFbGVtZW50c1tpbmRleF07XHJcbiAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBmaWx0ZXJlZEVsZW1lbnQpIHtcclxuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChmaWx0ZXJlZEVsZW1lbnQsIGtleSkpIHtcclxuICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZmlsdGVyZWRFbGVtZW50W2tleV07XHJcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlbGVtZW50LCBrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZWxlbWVudFtrZXldO1xyXG4gICAgICAgICAgICAgICAgICBhZGRPYmplY3Rba2V5XSA9IHZhbHVlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlc3VsdC5wdXNoKGFkZE9iamVjdClcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm9wdGlvbnMuUmVwZWF0ZXJWYWx1ZSA9IHJlc3VsdDtcclxuICAgIH0pXHJcblxyXG4gIH1cclxuXHJcbiAgZGVsZXRlSXRlbShJbmRleCkge1xyXG4gICAgaWYgKHRoaXMuaXRlbXMubGVuZ3RoID09IHRoaXMub3B0aW9ucy5NaW5SZXF1aXJlZEl0ZW1zICYmIHRoaXMub3B0aW9ucy5Jc1JlcXVpcmVkKVxyXG4gICAgICByZXR1cm47XHJcbiAgICBsZXQgZGVsZXRlZENvbnRyb2xzOiBhbnlbXSA9IFtdXHJcbiAgICBsZXQgY29udHJvbE5hbWVzID0gdGhpcy5vcHRpb25zLlJlcGVhdGVyU3RydWN0dXJlLm1hcChlID0+IGUuQ29udHJvbE9wdGlvbnMuTmFtZSlcclxuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMucmVwZWF0ZXJHcm91cC5jb250cm9scykge1xyXG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMucmVwZWF0ZXJHcm91cC5jb250cm9scywga2V5KSkge1xyXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBjb250cm9sTmFtZXMubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gY29udHJvbE5hbWVzW2luZGV4XTtcclxuICAgICAgICAgIGNvbnN0IGtleVNwbGl0QXJyID0ga2V5LnNwbGl0KCcuJylcclxuICAgICAgICAgIGlmIChrZXlTcGxpdEFyclswXSArIGtleVNwbGl0QXJyWzFdID09IGAke2VsZW1lbnR9JHtJbmRleH1gKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnJlcGVhdGVyR3JvdXAuY29udHJvbHNba2V5XTtcclxuICAgICAgICAgICAgZGVsZXRlZENvbnRyb2xzLnB1c2goeyBba2V5XTogZWxlbWVudCB9KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGRlbGV0ZWRDb250cm9scy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgY29uc3QgZWxlbWVudCA9IGRlbGV0ZWRDb250cm9sc1tpbmRleF07XHJcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIGVsZW1lbnQpIHtcclxuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGVsZW1lbnQsIGtleSkpIHtcclxuICAgICAgICAgIHRoaXMucmVwZWF0ZXJHcm91cC5yZW1vdmVDb250cm9sKGtleSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCBpdGVtID0gdGhpcy5pdGVtc1tJbmRleF07XHJcbiAgICB0aGlzLml0ZW1zID0gdGhpcy5pdGVtcy5maWx0ZXIoKHJlcykgPT4gcmVzICE9IGl0ZW0pXHJcbiAgfVxyXG5cclxuICBBZGRJdGVtKCkge1xyXG4gICAgdGhpcy5pdGVtcy5wdXNoKHRoaXMuaXRlbXMubGVuZ3RoICsgMSlcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIGxldCB0ZW1wbGF0ZVJlZnMgPSAodGhpcy5fdGVtcGxhdGVzW1wiX3Jlc3VsdHNcIl0gYXMgYW55W10pLm1hcCgoaXRlbSkgPT4gaXRlbVtcInRlbXBsYXRlXCJdKVxyXG4gICAgdGhpcy50ZW1wbGF0ZVJlZnMgPSB0ZW1wbGF0ZVJlZnNcclxuICAgIHRoaXMucmVwZWF0ZXJDb250ZXh0LmVsZW1lbnRzID0gdGhpcy50ZW1wbGF0ZVJlZnNcclxuICAgIHRoaXMucmVwZWF0ZXJDb250ZXh0LmRlbGV0ZSA9IHRoaXMuZGVsZXRlXHJcblxyXG4gIH1cclxuXHJcbiAgc2V0Q3VycmVudEluZGV4KGk6IG51bWJlcikge1xyXG4gICAgdGhpcy5yZXBlYXRlckNvbnRleHQuaW5kZXggPSBpO1xyXG4gIH1cclxuXHJcbn1cclxuIl19
|