raise-common-lib 0.0.154 → 0.0.156

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.
@@ -767,7 +767,7 @@ var CommonGridComponent = /** @class */ (function () {
767
767
  CommonGridComponent.decorators = [
768
768
  { type: Component, args: [{
769
769
  selector: "rs-common-grid",
770
- template: "<ejs-grid\r\n #grid\r\n [id]=\"gridId\"\r\n [ngClass]=\"{\r\n 'hide-Check-box': !alwaysShowCheckbox,\r\n 'grid-loading': className === 'grid-loading'\r\n }\"\r\n [dataSource]=\"dataSource\"\r\n [allowPaging]=\"allowPaging && pageSettings\"\r\n [allowResizing]=\"true\"\r\n [pageSettings]=\"pageSettings\"\r\n [showColumnMenu]=\"true\"\r\n [allowSorting]=\"true\"\r\n [allowFiltering]=\"true\"\r\n [allowExcelExport]=\"true\"\r\n [allowRowDragAndDrop]=\"allowRowDragAndDrop\"\r\n [filterSettings]=\"filterSettings\"\r\n [resizeSettings]=\"resizeSettings\"\r\n [allowSelection]=\"true\"\r\n [editSettings]=\"editSettings\"\r\n [childGrid]=\"childGrid\"\r\n [contextMenuItems]=\"dataSource && dataSource.length ? contextMenuItems : null\"\r\n [selectionSettings]=\"selectionSettings\"\r\n (recordClick)=\"_recordClick($event)\"\r\n (recordDoubleClick)=\"_recordDoubleClick($event)\"\r\n (actionBegin)=\"_actionBegin($event)\"\r\n (actionComplete)=\"_actionHandler($event)\"\r\n (rowSelected)=\"_rowSelected($event)\"\r\n (rowDeselected)=\"_rowDeselected($event)\"\r\n style=\"border: none\"\r\n (contextMenuClick)=\"_onContextMenu($event)\"\r\n (contextMenuOpen)=\"contextMenuOpen($event)\"\r\n (queryCellInfo)=\"customiseCell($event)\"\r\n (dataBound)=\"_dataBound($event)\"\r\n (rowDataBound)=\"_rowDataBound($event)\"\r\n (rowSelecting)=\"_rowSelecting($event)\"\r\n (excelQueryCellInfo)=\"_exportQueryCellInfo($event)\"\r\n (rowDrop)=\"onRowDrop($event)\"\r\n (rowDragStart)=\"_rowDragStart($event)\"\r\n (rowDrag)=\"_rowDrag($event)\"\r\n (load)=\"_load()\"\r\n [frozenColumns]=\"frozenColumns\"\r\n [columnChooserSettings]=\"columnChooserSettings\"\r\n>\r\n <e-columns>\r\n <e-column\r\n *ngIf=\"showCheckBox\"\r\n type=\"checkbox\"\r\n [width]=\"checkBoxWidth\"\r\n [showColumnMenu]=\"false\"\r\n [allowResizing]=\"false\"\r\n ></e-column>\r\n <e-column\r\n *ngFor=\"let item of fields; trackBy: trackByFn; let last = last\"\r\n [field]=\"item.columnName\"\r\n [filter]=\"item.filter ? item.filter : { type: 'CheckBox' }\"\r\n [customAttributes]=\"\r\n item.colName === 'entityUserList' || item.colName === 'kycProgress'\r\n ? { class: 'hideColumnFilterClass' }\r\n : {}\r\n \"\r\n [headerText]=\"item.columnDisplayName\"\r\n [textAlign]=\"item.textAlign\"\r\n [showColumnMenu]=\"item.showColumnMenu === undefined ? true : false\"\r\n [allowFiltering]=\"item.allowFiltering === undefined ? true : false\"\r\n [allowSorting]=\"item.allowSorting === undefined ? true : false\"\r\n [editType]=\"item.editType\"\r\n [validationRules]=\"item.validationRules\"\r\n [type]=\"item.dataType || 'string'\"\r\n [width]=\"item.width\"\r\n [minWidth]=\"item.minWidth\"\r\n [format]=\"item.format\"\r\n [visible]=\"item.visible\"\r\n [template]=\"item.showTemplate ? columnTemplate : undefined\"\r\n [clipMode]=\"\r\n item.clipMode ? item.clipMode : clipMode || 'EllipsisWithTooltip'\r\n \"\r\n [sortComparer]=\"item.dateComparer || null\"\r\n [allowResizing]=\"!last\"\r\n >\r\n </e-column>\r\n </e-columns>\r\n</ejs-grid>\r\n",
770
+ template: "<ejs-grid\r\n #grid\r\n [id]=\"gridId\"\r\n [ngClass]=\"{\r\n 'hide-Check-box': !alwaysShowCheckbox,\r\n 'grid-loading': className === 'grid-loading'\r\n }\"\r\n [dataSource]=\"dataSource\"\r\n [allowPaging]=\"allowPaging && pageSettings\"\r\n [allowResizing]=\"true\"\r\n [pageSettings]=\"pageSettings\"\r\n [showColumnMenu]=\"true\"\r\n [allowSorting]=\"true\"\r\n [allowFiltering]=\"true\"\r\n [allowExcelExport]=\"true\"\r\n [allowRowDragAndDrop]=\"allowRowDragAndDrop\"\r\n [filterSettings]=\"filterSettings\"\r\n [resizeSettings]=\"resizeSettings\"\r\n [allowSelection]=\"true\"\r\n [editSettings]=\"editSettings\"\r\n [childGrid]=\"childGrid\"\r\n [contextMenuItems]=\"dataSource && dataSource.length ? contextMenuItems : null\"\r\n [selectionSettings]=\"selectionSettings\"\r\n (recordClick)=\"_recordClick($event)\"\r\n (recordDoubleClick)=\"_recordDoubleClick($event)\"\r\n (actionBegin)=\"_actionBegin($event)\"\r\n (actionComplete)=\"_actionHandler($event)\"\r\n (rowSelected)=\"_rowSelected($event)\"\r\n (rowDeselected)=\"_rowDeselected($event)\"\r\n style=\"border: none\"\r\n (contextMenuClick)=\"_onContextMenu($event)\"\r\n (contextMenuOpen)=\"contextMenuOpen($event)\"\r\n (queryCellInfo)=\"customiseCell($event)\"\r\n (dataBound)=\"_dataBound($event)\"\r\n (rowDataBound)=\"_rowDataBound($event)\"\r\n (rowSelecting)=\"_rowSelecting($event)\"\r\n (excelQueryCellInfo)=\"_exportQueryCellInfo($event)\"\r\n (rowDrop)=\"onRowDrop($event)\"\r\n (rowDragStart)=\"_rowDragStart($event)\"\r\n (rowDrag)=\"_rowDrag($event)\"\r\n (load)=\"_load()\"\r\n [frozenColumns]=\"frozenColumns\"\r\n [columnChooserSettings]=\"columnChooserSettings\"\r\n>\r\n <e-columns>\r\n <e-column\r\n *ngIf=\"showCheckBox\"\r\n type=\"checkbox\"\r\n [width]=\"checkBoxWidth\"\r\n [minWidth]=\"checkBoxWidth\"\r\n [showColumnMenu]=\"false\"\r\n [allowResizing]=\"false\"\r\n ></e-column>\r\n <e-column\r\n *ngFor=\"let item of fields; trackBy: trackByFn; let last = last\"\r\n [field]=\"item.columnName\"\r\n [filter]=\"item.filter ? item.filter : { type: 'CheckBox' }\"\r\n [customAttributes]=\"\r\n item.colName === 'entityUserList' || item.colName === 'kycProgress'\r\n ? { class: 'hideColumnFilterClass' }\r\n : {}\r\n \"\r\n [headerText]=\"item.columnDisplayName\"\r\n [textAlign]=\"item.textAlign\"\r\n [showColumnMenu]=\"item.showColumnMenu === undefined ? true : false\"\r\n [allowFiltering]=\"item.allowFiltering === undefined ? true : false\"\r\n [allowSorting]=\"item.allowSorting === undefined ? true : false\"\r\n [editType]=\"item.editType\"\r\n [validationRules]=\"item.validationRules\"\r\n [type]=\"item.dataType || 'string'\"\r\n [width]=\"item.width\"\r\n [minWidth]=\"item.minWidth\"\r\n [format]=\"item.format\"\r\n [visible]=\"item.visible\"\r\n [template]=\"item.showTemplate ? columnTemplate : undefined\"\r\n [clipMode]=\"\r\n item.clipMode ? item.clipMode : clipMode || 'EllipsisWithTooltip'\r\n \"\r\n [sortComparer]=\"item.dateComparer || null\"\r\n [allowResizing]=\"!last\"\r\n >\r\n </e-column>\r\n </e-columns>\r\n</ejs-grid>\r\n",
771
771
  styles: [""]
772
772
  }] }
773
773
  ];
@@ -948,4 +948,4 @@ if (false) {
948
948
  */
949
949
  CommonGridComponent.prototype.ref;
950
950
  }
951
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vcmFpc2UtY29tbW9uLWxpYi8iLCJzb3VyY2VzIjpbImxpYi9jb21tb24tZ3JpZC9pbmRleC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixXQUFXLEVBRVgsU0FBUyxFQUVULGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUkvQjtJQXFGRSw2QkFBb0IsR0FBc0I7UUFBdEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUE3RWpDLGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLFdBQU0sR0FBRyxJQUFJLENBQUM7UUFDZCxpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUNyQixlQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsMkJBQTJCOzs7UUFFOUMsb0JBQWUsR0FBRyxFQUFFLENBQUM7UUFDckIsZUFBVSxHQUFHLEVBQUUsQ0FBQzs7UUFFaEIsV0FBTSxHQUFHLE1BQU0sQ0FBQztRQUNoQixtQkFBYyxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ2xDLG1CQUFjLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFFbEMsV0FBTSxHQUFtQixFQUFFLENBQUM7UUFDNUIsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUloQixnQkFBVyxHQUFHLElBQUksQ0FBQztRQUNuQix3QkFBbUIsR0FBRyxLQUFLLENBQUM7UUFDNUIsYUFBUSxHQUFHLHFCQUFxQixDQUFDO1FBQ2pDLGtCQUFhLEdBQUcsRUFBRSxDQUFDLENBQUMsbUNBQW1DOzs7Ozs7Ozs7Ozs7Ozs7Ozs7UUFzQnZELHFCQUFnQixHQUFz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O0lBQzFDLDJDQUFzQjs7SUFDdEIsMENBQTRCOztJQUM1QixrREFBcUM7O0lBQ3JDLHVDQUEwQzs7SUFDMUMsNENBQTRCOztJQUM1Qix3Q0FBbUI7O0lBQ25CLDRDQUF1Qjs7SUFDdkIsb0RBQStCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBbUIvQiwrQ0FBa0Q7O0lBRWxELGdEQUlFOztJQUNGLGlEQUE2Qzs7SUFDN0MsNENBQTRCOztJQUM1QiwrQ0FBMkM7O0lBRTNDLGdEQUFpRDs7SUFDakQsNkNBQThDOztJQUM5QywwQ0FBMkM7O0lBQzNDLDRDQUE2Qzs7SUFDN0MsNENBQTZDOztJQUM3Qyw0Q0FBNkM7O0lBQzdDLDRDQUE2Qzs7SUFDN0MsMENBQTJDOztJQUMzQywwQ0FBMkM7O0lBQzNDLDJDQUE0Qzs7SUFDNUMsd0NBQXlDOztJQUN6QyxrREFBbUQ7O0lBQ25ELDJDQUE0Qzs7SUFDNUMsc0NBQXVDOztJQUN2QyxzQ0FBdUM7O0lBQ3ZDLDJDQUE0Qzs7SUFFNUMsdUNBQWM7O0lBQ2QsMENBQW9COztJQUNwQix3Q0FBZTs7SUFDZix3Q0FBMkI7O0lBRTNCLDBDQUFtQjs7SUE4VW5CLHVDQVFFOzs7OztJQXBWVSxrQ0FBOEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBUZW1wbGF0ZVJlZixcclxuICBPbkNoYW5nZXMsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgR3JpZENvbXBvbmVudCB9IGZyb20gXCJAc3luY2Z1c2lvbi9lajItYW5ndWxhci1ncmlkc1wiO1xyXG5pbXBvcnQgeyB0aW1lcyB9IGZyb20gXCJsb2Rhc2hcIjtcclxuaW1wb3J0IHsgQmVmb3JlT3BlbkNsb3NlRXZlbnRBcmdzIH0gZnJvbSBcIkBzeW5jZnVzaW9uL2VqMi1hbmd1bGFyLWlucHV0c1wiO1xyXG5pbXBvcnQgeyBJQWN0aW9uTWVudUl0ZW0sIElDb2x1bW5GaWVsZCB9IGZyb20gXCIuLi9jb25zdGFudFwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwicnMtY29tbW9uLWdyaWRcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL2luZGV4LmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL2luZGV4LmNvbXBvbmVudC5zY3NzXCJdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29tbW9uR3JpZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuICBAVmlld0NoaWxkKFwiZ3JpZFwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBwdWJsaWMgZ3JpZDogR3JpZENvbXBvbmVudDtcclxuICBASW5wdXQoKSBzaG93Q2hlY2tCb3ggPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGxvYWRlZCA9IHRydWU7XHJcbiAgQElucHV0KCkgaGlkZGVuTG9hZGVkID0gZmFsc2U7XHJcbiAgQElucHV0KCkgYXV0aG9yaXplZCA9IHRydWU7IC8vIERhdGFzZXTmmK/lkKbmjojmnYPvvIzmnKrmjojmnYPliJnmmL7npLrmnYPpmZDplJnor6/mj5DnpLpcclxuICAvLyBvbmx5IHVzZSBmb3IgbG9jYWwgZGF0YSBwYWdpbmF0aW9uXHJcbiAgQElucHV0KCkgc2VsZWN0ZWREaWZmS2V5ID0gXCJcIjtcclxuICBASW5wdXQoKSBncmlkSGVpZ2h0ID0gXCJcIjtcclxuICAvLyDov5nnjqnmhI/lv4XloavvvIzkuI3nhLZmaWx0ZXIgY29sdW1uQ2hvb3NlcumDveS8muaKpemUmVxyXG4gIEBJbnB1dCgpIGdyaWRJZCA9IFwiZ3JpZFwiO1xyXG4gIEBJbnB1dCgpIHJlc2l6ZVNldHRpbmdzID0geyBtb2RlOiBcIkF1dG9cIiB9O1xyXG4gIEBJbnB1dCgpIGZpbHRlclNldHRpbmdzID0geyB0eXBlOiBcIk1lbnVcIiB9O1xyXG4gIEBJbnB1dCgpIHRlbXBsYXRlOiBhbnk7XHJcbiAgQElucHV0KCkgZmllbGRzOiBJQ29sdW1uRmllbGRbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIGRhdGFTb3VyY2UgPSBbXTtcclxuICBASW5wdXQoKSBlZGl0U2V0dGluZ3M7XHJcbiAgQElucHV0KCkgY29sdW1uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQElucHV0KCkgcGFnZVNldHRpbmdzO1xyXG4gIEBJbnB1dCgpIGFsbG93UGFnaW5nID0gdHJ1ZTtcclxuICBASW5wdXQoKSBhbGxvd1Jvd0RyYWdBbmREcm9wID0gZmFsc2U7XHJcbiAgQElucHV0KCkgY2xpcE1vZGUgPSBcIkVsbGlwc2lzV2l0aFRvb2x0aXBcIjtcclxuICBASW5wdXQoKSBjaGVja0JveFdpZHRoID0gMzI7IC8vIGNvbCDmlbDph4/ov4flsJHnmoTml7blgJnvvIxjaGVja+WuveW6puS8muaLieS8uO+8jOi/meaXtuWAmeiuvue9rm51bGxcclxuICBASW5wdXQoKSBjaGlsZEdyaWQ7XHJcbiAgQElucHV0KCkgZnJvemVuQ29sdW1uczsgLy8gY29sIOaVsOmHj+i/h+WwkeeahOaXtuWAme+8jGNoZWNr5a695bqm5Lya5ouJ5Ly477yM6L+Z5pe25YCZ6K6+572ubnVsbFxyXG4gIEBJbnB1dCgpIGNvbHVtbkNob29zZXJTZXR0aW5ncztcclxuXHJcbiAgLyoqXHJcblx0ICogU2FtcGxlOiBbXHJcblx0XHRcdHtcclxuXHRcdFx0XHR0ZXh0OiBcIlByZXZpZXdcIixcclxuXHRcdFx0XHR0YXJnZXQ6IFwiLmUtY29udGVudFwiLFxyXG5cdFx0XHRcdGlkOiBcInByZXZpZXctaWNvblwiLFxyXG5cdFx0XHRcdGljb25Dc3M6IFwicHJldmlld1wiLFxyXG5cdFx0XHR9LFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0dGV4dDogXCJEb3dubG9hZFwiLFxyXG5cdFx0XHRcdHRhcmdldDogXCIuZS1jb250ZW50XCIsXHJcblx0XHRcdFx0aWQ6IFwiZG93bmxvYWQtaWNvblwiLFxyXG5cdFx0XHRcdGljb25Dc3M6IFwiZG93bmxvYWRcIixcclxuXHRcdFx0fVxyXG5cdFx0XVxyXG5cdFx055So5LqO5a6a5LmJcm935LitIOeCueWHu+S6i+S7tlxyXG5cdCAqL1xyXG4gIEBJbnB1dCgpIGNvbnRleHRNZW51SXRlbXM6IElBY3Rpb25NZW51SXRlbVtdID0gW107XHJcbiAgLy8gQElucHV0KCkgc2VsZWN0aW9uU2V0dGluZ3MgPSB7IGNoZWNrYm94T25seTogdHJ1ZSwgdHlwZTogXCJNdWx0aXBsZVwiIH07XHJcbiAgQElucHV0KCkgc2VsZWN0aW9uU2V0dGluZ3MgPSB7XHJcbiAgICB0eXBlOiBcIk11bHRpcGxlXCIsXHJcbiAgICAvLyBwZXJzaXN0U2VsZWN0aW9uOiB0cnVlLFxyXG4gICAgY2hlY2tib3hPbmx5OiB0cnVlLFxyXG4gIH07XHJcbiAgQElucHV0KCkgYWx3YXlzU2hvd0NoZWNrYm94OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZGVmYXVsdFJlY29yZDogYW55O1xyXG4gIEBJbnB1dCgpIGRpc2FibGVTeXN0ZW1Sb3c6IGJvb2xlYW4gPSBmYWxzZTsgLy8g56aB55SoSXNTeXRlbSA9IHRydWXnmoTmlbTooYxcclxuXHJcbiAgQE91dHB1dCgpIHJlY29yZERvdWJsZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBhY3Rpb25Db21wbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgcm93U2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHJvd0Rlc2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG9uQ29udGV4dE1lbnUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGFjdGlvbkhhbmRsZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHF1ZXJ5Q2VsbEluZm8gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHJlY29yZENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBhY3Rpb25CZWdpbiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgcm93RGF0YUJvdW5kID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBkYXRhQm91bmQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGV4cG9ydFF1ZXJ5Q2VsbEluZm8gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHJvd1NlbGVjdGluZyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgcm93RHJvcCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgcm93RHJhZyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgcm93RHJhZ1N0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBzZWxlY3RJZCA9IFtdO1xyXG4gIHN0YXJ0UGFnaW5nID0gZmFsc2U7XHJcbiAgaW5kZXhMaXN0ID0gW107XHJcbiAgY2xhc3NOYW1lID0gXCJncmlkLWxvYWRpbmdcIjtcclxuXHJcbiAgcHVibGljIHRyYW5zbGF0aW9uO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcclxuICAgIHRoaXMudHJhbnNsYXRpb24gPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwidHJhbnNsYXRpb25cIikpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5oaWRkZW5Mb2FkZWQpIHRoaXMuY2xhc3NOYW1lID0gXCJcIjtcclxuICAgIHRoaXMuZ3JpZElkID1cclxuICAgICAgdGhpcy5ncmlkSWQgKyBEYXRlLm5vdygpICsgXCJfXCIgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyLCA1KTtcclxuICAgIHRoaXMucmVmICYmIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgdHJhY2tCeUZuKGluZGV4LCBpdGVtKSB7XHJcbiAgICByZXR1cm4gaW5kZXg7IC8vIG9yIGEgdW5pcXVlIGlkZW50aWZpZXIgaW4geW91ciBvYmplY3RcclxuICB9XHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgaWYgKGNoYW5nZXMuZGF0YVNvdXJjZSAmJiBjaGFuZ2VzLmRhdGFTb3VyY2UuY3VycmVudFZhbHVlKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmFsbG93UGFnaW5nICYmXHJcbiAgICAgICAgY2hhbmdlcy5kYXRhU291cmNlLmN1cnJlbnRWYWx1ZS5sZW5ndGggJiZcclxuICAgICAgICAhdGhpcy5wYWdlU2V0dGluZ3NcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5wYWdlU2V0dGluZ3MgPVxyXG4gICAgICAgICAgY2hhbmdlcy5kYXRhU291cmNlLmN1cnJlbnRWYWx1ZS5sZW5ndGggPiA5XHJcbiAgICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgICAgcGFnZVNpemVzOiBbXCJBbGxcIiwgXCIyNVwiLCBcIjUwXCIsIFwiMTAwXCJdLFxyXG4gICAgICAgICAgICAgICAgcGFnZVNpemU6IDUwLFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgOiBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBfbG9hZCgpIHtcclxuICAgIGlmICghdGhpcy5hdXRob3JpemVkKSB7XHJcbiAgICAgICh0aGlzLmdyaWQubG9jYWxlT2JqIGFzIGFueSkubG9jYWxlU3RyaW5ncy5FbXB0eVJlY29yZCA9XHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGlvbi5ZT1VfRE9fTk9UX0hBVkVfVEhFX0RBVEFTRVRfUEVSTUlTU0lPTiB8fFxyXG4gICAgICAgIFwiWW91IGRvbid0IGhhdmUgdGhlIGRhdGFzZXQgcGVybWlzc2lvbiB0byB2aWV3IHRoZSByZWNvcmQuXCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBfZGF0YUJvdW5kKGFyZ3M6IGFueSkge1xyXG4gICAgLy8g5pW05Liq57uE5Lu25Yqg6L295a6M5oiQ5pe255qE5Zue6LCD5Ye95pWwXHJcbiAgICB2YXIgcGFnZXJDb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmUtcGFnZXJjb250YWluZXJcIik7XHJcbiAgICBpZiAocGFnZXJDb250YWluZXIpIHtcclxuICAgICAgdmFyIGxpbmtFbGVtZW50cyA9IHBhZ2VyQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXCIuZS1saW5rXCIpO1xyXG4gICAgICBsaW5rRWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKFwiaHJlZlwiKTsgLy8gU01QMi0xMDMxMCDliKDpmaTliIbpobXlmajnmoRocmVm5bGe5oCnXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWREaWZmS2V5KSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2hvb3NlUmVjb3JkcygpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuZGF0YUJvdW5kLmVtaXQoYXJncyk7XHJcbiAgfVxyXG5cclxuICBfZXhwb3J0UXVlcnlDZWxsSW5mbyhhcmdzKSB7XHJcbiAgICB0aGlzLmV4cG9ydFF1ZXJ5Q2VsbEluZm8uZW1pdChhcmdzKTtcclxuICB9XHJcblxyXG4gIF9yb3dEcmFnKGFyZ3MpIHtcclxuICAgIHRoaXMucm93RHJhZy5lbWl0KGFyZ3MpO1xyXG4gIH1cclxuXHJcbiAgX3Jvd0RyYWdTdGFydChhcmdzKSB7XHJcbiAgICB0aGlzLnJvd0RyYWdTdGFydC5lbWl0KGFyZ3MpO1xyXG4gIH1cclxuXHJcbiAgX3JlY29yZERvdWJsZUNsaWNrKCRldmVudCkge1xyXG4gICAgdGhpcy5yZWNvcmREb3VibGVDbGljay5lbWl0KCRldmVudCk7XHJcbiAgfVxyXG4gIC8qKlxyXG5cdCAqIFtzZWxlY3Rpb25TZXR0aW5nc109XCJ7IGNoZWNrYm94T25seTogdHJ1ZSB9XCJcclxuXHQgICBbc2hvd0NoZWNrQm94XT1cInRydWVcIlxyXG5cdCAgIOaOp+S7tuS9v+eUqOaXtu+8jOW/hemhu+mFjee9ruS4iumdouS4pOS4quWxnuaAp++8jOWQpuWIme+8jOWFqOmAieS8muWkseaViFxyXG5cdCAqL1xyXG4gIF9yb3dTZWxlY3RlZCgkZXZlbnQpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkRGlmZktleSkge1xyXG4gICAgICBpZiAoJGV2ZW50LmlzSGVhZGVyQ2hlY2tib3hDbGlja2VkICYmIEFycmF5LmlzQXJyYXkoJGV2ZW50LmRhdGEpKSB7XHJcbiAgICAgICAgaWYgKCRldmVudC5kYXRhICYmICRldmVudC5kYXRhLmxlbmd0aCkge1xyXG4gICAgICAgICAgJGV2ZW50LmRhdGEuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICBpdGVtLmlzU2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdElkLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5mb3JFYWNoKChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICRldmVudC5kYXRhLmZvckVhY2goKF9kYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKF9kYXRhW3RoaXMuc2VsZWN0ZWREaWZmS2V5XSA9PT0gZGF0YVt0aGlzLnNlbGVjdGVkRGlmZktleV0pIHtcclxuICAgICAgICAgICAgICAgIGRhdGEuaXNTZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAkZXZlbnQuZGF0YS5pc1NlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNlbGVjdElkLnB1c2goJGV2ZW50LmRhdGEpO1xyXG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5mb3JFYWNoKChkYXRhKSA9PiB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGRhdGFbdGhpcy5zZWxlY3RlZERpZmZLZXldID09PSAkZXZlbnQuZGF0YVt0aGlzLnNlbGVjdGVkRGlmZktleV1cclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBkYXRhLmlzU2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucmVmICYmIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yb3dTZWxlY3RlZC5lbWl0KCRldmVudCk7XHJcbiAgfVxyXG5cclxuICBfcm93RGVzZWxlY3RlZCgkZXZlbnQpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkRGlmZktleSkge1xyXG4gICAgICBpZiAodGhpcy5zdGFydFBhZ2luZykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoJGV2ZW50LmlzSGVhZGVyQ2hlY2tib3hDbGlja2VkICYmIEFycmF5LmlzQXJyYXkoJGV2ZW50LmRhdGEpKSB7XHJcbiAgICAgICAgJGV2ZW50LmRhdGEuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgaXRlbS5pc1NlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RJZCA9IFtdO1xyXG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5mb3JFYWNoKChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAkZXZlbnQuZGF0YS5mb3JFYWNoKChfZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoX2RhdGFbdGhpcy5zZWxlY3RlZERpZmZLZXldID09PSBkYXRhW3RoaXMuc2VsZWN0ZWREaWZmS2V5XSkge1xyXG4gICAgICAgICAgICAgIGRhdGEuaXNTZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAkZXZlbnQuZGF0YS5pc1NlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RJZCA9IHRoaXMuc2VsZWN0SWQuZmlsdGVyKFxyXG4gICAgICAgICAgKGl0ZW0pID0+XHJcbiAgICAgICAgICAgIGl0ZW1bdGhpcy5zZWxlY3RlZERpZmZLZXldICE9PSAkZXZlbnQuZGF0YVt0aGlzLnNlbGVjdGVkRGlmZktleV1cclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5mb3JFYWNoKChkYXRhKSA9PiB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGRhdGFbdGhpcy5zZWxlY3RlZERpZmZLZXldID09PSAkZXZlbnQuZGF0YVt0aGlzLnNlbGVjdGVkRGlmZktleV1cclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBkYXRhLmlzU2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnJlZiAmJiB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH1cclxuICAgIHRoaXMucm93RGVzZWxlY3RlZC5lbWl0KCRldmVudCk7XHJcbiAgfVxyXG5cclxuICBfb25Db250ZXh0TWVudShhcmdzKSB7XHJcbiAgICB0aGlzLm9uQ29udGV4dE1lbnUuZW1pdChhcmdzKTtcclxuICB9XHJcblxyXG4gIF9hY3Rpb25CZWdpbihhcmdzKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWREaWZmS2V5ICYmXHJcbiAgICAgIChhcmdzLnJlcXVlc3RUeXBlID09PSBcInBhZ2luZ1wiIHx8XHJcbiAgICAgICAgYXJncy5yZXF1ZXN0VHlwZSA9PT0gXCJzZWFyY2hpbmdcIiB8fFxyXG4gICAgICAgIGFyZ3MucmVxdWVzdFR5cGUgPT09IFwiZmlsdGVyaW5nXCIgfHxcclxuICAgICAgICBhcmdzLnJlcXVlc3RUeXBlID09PSBcInNvcnRpbmdcIilcclxuICAgICkge1xyXG4gICAgICB0aGlzLnN0YXJ0UGFnaW5nID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgYXJncy5yZXF1ZXN0VHlwZSA9PSBcImZpbHRlcmNob2ljZXJlcXVlc3RcIiB8fFxyXG4gICAgICBhcmdzLnJlcXVlc3RUeXBlID09PSBcImZpbHRlcnNlYXJjaGJlZ2luXCJcclxuICAgICkge1xyXG4gICAgICBhcmdzLmZpbHRlckNob2ljZUNvdW50ID0gMTUwMDA7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hY3Rpb25CZWdpbi5lbWl0KGFyZ3MpO1xyXG4gIH1cclxuXHJcbiAgc2VhcmNoKGtleXdvcmRzKSB7XHJcbiAgICB0aGlzLmdyaWQuc2VhcmNoKGtleXdvcmRzKTtcclxuICB9XHJcbiAgc2VsZWN0Um93cyhpbmRleExpc3Q6IG51bWJlcltdKSB7XHJcbiAgICB0aGlzLmdyaWQuc2VsZWN0Um93cyhpbmRleExpc3QpO1xyXG4gIH1cclxuICBzZWxlY3RSb3coaW5kZXgpIHtcclxuICAgIHRoaXMuZ3JpZC5zZWxlY3RSb3coaW5kZXgpO1xyXG4gIH1cclxuICBnZXRDdXJyZW50Vmlld1JlY29yZHMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5ncmlkLmdldEN1cnJlbnRWaWV3UmVjb3JkcygpO1xyXG4gIH1cclxuXHJcbiAgY3VzdG9taXNlQ2VsbCgkZXZlbnQpIHtcclxuICAgIHRoaXMucXVlcnlDZWxsSW5mby5lbWl0KCRldmVudCk7XHJcbiAgfVxyXG5cclxuICBjb250ZXh0TWVudU9wZW4oYXJncz86IEJlZm9yZU9wZW5DbG9zZUV2ZW50QXJncyk6IHZvaWQge1xyXG4gICAgY29uc3QgZGF0YSA9IChhcmdzIGFzIEJlZm9yZU9wZW5DbG9zZUV2ZW50QXJncyB8IGFueSkucm93SW5mby5yb3dEYXRhO1xyXG4gICAgaWYgKCFkYXRhKSB7XHJcbiAgICAgIGFyZ3MuY2FuY2VsID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IGVuYWJsZUl0ZW1zID0gW107XHJcbiAgICBsZXQgaGlkZUl0ZW1zID0gW107XHJcbiAgICB0aGlzLmdyaWQuY29udGV4dE1lbnVNb2R1bGUuY29udGV4dE1lbnUucmVmcmVzaCgpOyAvLyDmr4/mrKHngrnlh7vmjInpkq7lvLnnqpfliY3pnIDlho3mrKHliJ3lp4vljJbnirbmgIEg5ZCm5YiZ5LiN5pu05paw77ybXHJcbiAgICB0aGlzLmNvbnRleHRNZW51SXRlbXMuZm9yRWFjaCgoaXRlbTogSUFjdGlvbk1lbnVJdGVtKSA9PiB7XHJcbiAgICAgIC8vIOeUqOS6juWkhOeQhumDqOWIhuaMiemSrmRpc2FibGVk55qE5oOF5Ya1XHJcbiAgICAgIGlmIChcclxuICAgICAgICBpdGVtLmRpc2FibGVkIHx8XHJcbiAgICAgICAgKGRhdGEuZGlzYWJsZUl0ZW0gJiYgZGF0YS5kaXNhYmxlSXRlbS5pbmNsdWRlcyhpdGVtLmljb25Dc3MpKVxyXG4gICAgICApIHtcclxuICAgICAgICBlbmFibGVJdGVtcy5wdXNoKGl0ZW0udGV4dCk7XHJcbiAgICAgICAgLy8gdGhpcy5ncmlkLmNvbnRleHRNZW51TW9kdWxlLmNvbnRleHRNZW51LmVuYWJsZUl0ZW1zKFxyXG4gICAgICAgIC8vIFx0W2l0ZW0udGV4dF0sXHJcbiAgICAgICAgLy8gXHRmYWxzZVxyXG4gICAgICAgIC8vICk7XHJcbiAgICAgIH1cclxuICAgICAgLy8g55So5LqO5aSE55CG6YOo5YiG5oyJ6ZKu6ZyA6KaBaGlkZeeahOaDheWGtVxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgaXRlbS5pc0hpZGUgfHxcclxuICAgICAgICAoZGF0YS5oaWRlSXRlbSAmJiBkYXRhLmhpZGVJdGVtLmluY2x1ZGVzKGl0ZW0uaWNvbkNzcykpXHJcbiAgICAgICkge1xyXG4gICAgICAgIGhpZGVJdGVtcy5wdXNoKGl0ZW0udGV4dCk7XHJcbiAgICAgICAgLy8gdGhpcy5ncmlkLmNvbnRleHRNZW51TW9kdWxlLmNvbnRleHRNZW51LmhpZGVJdGVtcyhcclxuICAgICAgICAvLyBcdFtpdGVtLnRleHRdLFxyXG4gICAgICAgIC8vIFx0ZmFsc2VcclxuICAgICAgICAvLyApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuZ3JpZC5jb250ZXh0TWVudU1vZHVsZS5jb250ZXh0TWVudS5lbmFibGVJdGVtcyhlbmFibGVJdGVtcywgZmFsc2UpO1xyXG4gICAgdGhpcy5ncmlkLmNvbnRleHRNZW51TW9kdWxlLmNvbnRleHRNZW51LmhpZGVJdGVtcyhoaWRlSXRlbXMsIGZhbHNlKTtcclxuICB9XHJcblxyXG4gIF9hY3Rpb25IYW5kbGVyKCRldmVudCkge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnNlbGVjdGVkRGlmZktleSAmJlxyXG4gICAgICAoJGV2ZW50LnJlcXVlc3RUeXBlID09PSBcInBhZ2luZ1wiIHx8XHJcbiAgICAgICAgJGV2ZW50LnJlcXVlc3RUeXBlID09PSBcInNlYXJjaGluZ1wiIHx8XHJcbiAgICAgICAgJGV2ZW50LnJlcXVlc3RUeXBlID09PSBcImZpbHRlcmluZ1wiIHx8XHJcbiAgICAgICAgJGV2ZW50LnJlcXVlc3RUeXBlID09PSBcInNvcnRpbmdcIilcclxuICAgICkge1xyXG4gICAgICB0aGlzLmluZGV4TGlzdCA9IFtdO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLmNob29zZVJlY29yZHMoKTtcclxuICAgICAgICB0aGlzLnN0YXJ0UGFnaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yZWYgJiYgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIHRoaXMucmVmICYmIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuYWN0aW9uSGFuZGxlci5lbWl0KCRldmVudCk7XHJcbiAgICB0aGlzLmFjdGlvbkNvbXBsZXRlLmVtaXQoJGV2ZW50KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2hvb3NlUmVjb3JkcygpIHtcclxuICAgIHRoaXMuaW5kZXhMaXN0ID0gW107XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UuZm9yRWFjaCgoZGF0YSkgPT4ge1xyXG4gICAgICB0aGlzLmdyaWQuZ2V0Q3VycmVudFZpZXdSZWNvcmRzKCkuZm9yRWFjaCgocm93OiBhbnksIGkpID0+IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICByb3cgJiZcclxuICAgICAgICAgIGRhdGFbdGhpcy5zZWxlY3RlZERpZmZLZXldID09PSByb3dbdGhpcy5zZWxlY3RlZERpZmZLZXldICYmXHJcbiAgICAgICAgICBkYXRhLmlzU2VsZWN0ZWRcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMuaW5kZXhMaXN0LnB1c2goaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZ3JpZC5zZWxlY3RSb3dzKHRoaXMuaW5kZXhMaXN0KTtcclxuICB9XHJcblxyXG4gIF9yZWNvcmRDbGljaygkZXZlbnQpIHtcclxuICAgIHRoaXMucmVjb3JkQ2xpY2suZW1pdCgkZXZlbnQpO1xyXG4gIH1cclxuICByZWZyZXNoKCkge1xyXG4gICAgdGhpcy5ncmlkLnJlZnJlc2goKTtcclxuICB9XHJcbiAgX3Jvd1NlbGVjdGluZyhlKSB7XHJcbiAgICB0aGlzLnJvd1NlbGVjdGluZy5lbWl0KGUpO1xyXG4gIH1cclxuICByZWZyZXNoQ29sdW1ucygpIHtcclxuICAgIHRoaXMuZ3JpZC5yZWZyZXNoQ29sdW1ucygpO1xyXG4gIH1cclxuICByZWZyZXNoSGVhZGVyKCkge1xyXG4gICAgdGhpcy5ncmlkLnJlZnJlc2hIZWFkZXIoKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydChleGNlbEV4cG9ydFByb3BlcnRpZXM/KSB7XHJcbiAgICB0aGlzLmdyaWQuZXhjZWxFeHBvcnQoZXhjZWxFeHBvcnRQcm9wZXJ0aWVzKTtcclxuICB9XHJcblxyXG4gIGdldFNlbGVjdGVkUmVjb3JkcygpIHtcclxuICAgIHJldHVybiB0aGlzLmdyaWQuZ2V0U2VsZWN0ZWRSZWNvcmRzKCk7XHJcbiAgfVxyXG5cclxuICBvblJvd0Ryb3AoZSkge1xyXG4gICAgdGhpcy5yb3dEcm9wLmVtaXQoZSk7XHJcbiAgfVxyXG5cclxuICBfcm93RGF0YUJvdW5kKCRldmVudCkge1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZVN5c3RlbVJvdyAmJiAkZXZlbnQuZGF0YSAmJiAkZXZlbnQuZGF0YS5Jc1N5c3RlbSkge1xyXG4gICAgICAkZXZlbnQucm93LmNsYXNzTGlzdC5hZGQoXCJlLWRpc2FibGVkXCIpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yb3dEYXRhQm91bmQuZW1pdCgkZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJTZWxlY3Rpb24oKSB7XHJcbiAgICB0aGlzLmdyaWQuY2xlYXJTZWxlY3Rpb24oKTtcclxuICB9XHJcblxyXG4gIGV4Y2VsRXhwb3J0KCkge1xyXG4gICAgdGhpcy5ncmlkLmV4Y2VsRXhwb3J0KCk7XHJcbiAgfVxyXG5cclxuICBhZGRJdGVtKCkge1xyXG4gICAgdGhpcy5ncmlkLmFkZFJlY29yZCh7IC4uLnRoaXMuZGVmYXVsdFJlY29yZCwgaXNOZXc6IHRydWUgfSwgMCk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5ncmlkLnNlbGVjdFJvdygwKTtcclxuICAgICAgdGhpcy5ncmlkLnN0YXJ0RWRpdCgpO1xyXG4gICAgfSwgMzApO1xyXG4gIH1cclxuXHJcbiAgc2F2ZUl0ZW0oKSB7XHJcbiAgICB0aGlzLmdyaWQuZW5kRWRpdCgpO1xyXG4gIH1cclxuXHJcbiAgZWRpdEl0ZW0oaW5kZXgpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmdyaWQuc2VsZWN0Um93KE51bWJlcihpbmRleCkpO1xyXG4gICAgICB0aGlzLmdyaWQuc3RhcnRFZGl0KCk7XHJcbiAgICB9LCAzMCk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVJdGVtKGluZGV4KSB7XHJcbiAgICB0aGlzLmdyaWQuc2VsZWN0Um93KE51bWJlcihpbmRleCkpO1xyXG4gICAgdmFyIHNlbGVjdGVkUmVjb3JkID0gdGhpcy5ncmlkLmdldFNlbGVjdGVkUmVjb3JkcygpWzBdIGFzIGFueTtcclxuICAgIHRoaXMuZ3JpZC5kZWxldGVSZWNvcmQoc2VsZWN0ZWRSZWNvcmQgYXMgc3RyaW5nKTtcclxuICB9XHJcblxyXG4gIGNhbmNlbEl0ZW0oaW5kZXgpIHtcclxuICAgIHRoaXMuZ3JpZC5jbG9zZUVkaXQoKTtcclxuICAgIHRoaXMuZGVsZXRlSXRlbShpbmRleCk7XHJcbiAgfVxyXG4gIHB1YmxpYyBpbml0TGlzdCA9IChudW0gPSAyNSwga2V5ID0gXCJJZFwiKSA9PiB7XHJcbiAgICBjb25zdCBsaXN0ID0gW107XHJcbiAgICB0aW1lcyhudW0sIChpKSA9PiB7XHJcbiAgICAgIGxpc3QucHVzaCh7XHJcbiAgICAgICAgW2tleV06IGksXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gbGlzdDtcclxuICB9O1xyXG4gIHB1YmxpYyBzaG93TG9hZGluZygpIHtcclxuICAgIHRoaXMuY2xhc3NOYW1lID0gXCJncmlkLWxvYWRpbmdcIjtcclxuICAgIHRoaXMucmVmICYmIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgdGhpcy5yZWYgJiYgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhpZGVMb2FkaW5nKCkge1xyXG4gICAgdGhpcy5jbGFzc05hbWUgPSBcIlwiO1xyXG4gICAgdGhpcy5yZWYgJiYgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICB0aGlzLnJlZiAmJiB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
951
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vcmFpc2UtY29tbW9uLWxpYi8iLCJzb3VyY2VzIjpbImxpYi9jb21tb24tZ3JpZC9pbmRleC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixXQUFXLEVBRVgsU0FBUyxFQUVULGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUkvQjtJQXFGRSw2QkFBb0IsR0FBc0I7UUFBdEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUE3RWpDLGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLFdBQU0sR0FBRyxJQUFJLENBQUM7UUFDZCxpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUNyQixlQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsMkJBQTJCOzs7UUFFOUMsb0JBQWUsR0FBRyxFQUFFLENBQUM7UUFDckIsZUFBVSxHQUFHLEVBQUUsQ0FBQzs7UUFFaEIsV0FBTSxHQUFHLE1BQU0sQ0FBQztRQUNoQixtQkFBYyxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ2xDLG1CQUFjLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFFbEMsV0FBTSxHQUFtQixFQUFFLENBQUM7UUFDNUIsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUloQixnQkFBVyxHQUFHLElBQUksQ0FBQztRQUNuQix3QkFBbUIsR0FBRyxLQUFLLENBQUM7UUFDNUIsYUFBUSxHQUFHLHFCQUFxQixDQUFDO1FBQ2pDLGtCQUFhLEdBQUcsRUFBRSxDQUFDLENBQUMsbUNBQW1DOzs7Ozs7Ozs7Ozs7Ozs7Ozs7UUFzQnZELHFCQUFnQixHQUFz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O0lBQzFDLDJDQUFzQjs7SUFDdEIsMENBQTRCOztJQUM1QixrREFBcUM7O0lBQ3JDLHVDQUEwQzs7SUFDMUMsNENBQTRCOztJQUM1Qix3Q0FBbUI7O0lBQ25CLDRDQUF1Qjs7SUFDdkIsb0RBQStCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBbUIvQiwrQ0FBa0Q7O0lBRWxELGdEQUlFOztJQUNGLGlEQUE2Qzs7SUFDN0MsNENBQTRCOztJQUM1QiwrQ0FBMkM7O0lBRTNDLGdEQUFpRDs7SUFDakQsNkNBQThDOztJQUM5QywwQ0FBMkM7O0lBQzNDLDRDQUE2Qzs7SUFDN0MsNENBQTZDOztJQUM3Qyw0Q0FBNkM7O0lBQzdDLDRDQUE2Qzs7SUFDN0MsMENBQTJDOztJQUMzQywwQ0FBMkM7O0lBQzNDLDJDQUE0Qzs7SUFDNUMsd0NBQXlDOztJQUN6QyxrREFBbUQ7O0lBQ25ELDJDQUE0Qzs7SUFDNUMsc0NBQXVDOztJQUN2QyxzQ0FBdUM7O0lBQ3ZDLDJDQUE0Qzs7SUFFNUMsdUNBQWM7O0lBQ2QsMENBQW9COztJQUNwQix3Q0FBZTs7SUFDZix3Q0FBMkI7O0lBRTNCLDBDQUFtQjs7SUE4VW5CLHVDQVFFOzs7OztJQXBWVSxrQ0FBOEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBUZW1wbGF0ZVJlZixcclxuICBPbkNoYW5nZXMsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgR3JpZENvbXBvbmVudCB9IGZyb20gXCJAc3luY2Z1c2lvbi9lajItYW5ndWxhci1ncmlkc1wiO1xyXG5pbXBvcnQgeyB0aW1lcyB9IGZyb20gXCJsb2Rhc2hcIjtcclxuaW1wb3J0IHsgQmVmb3JlT3BlbkNsb3NlRXZlbnRBcmdzIH0gZnJvbSBcIkBzeW5jZnVzaW9uL2VqMi1hbmd1bGFyLWlucHV0c1wiO1xyXG5pbXBvcnQgeyBJQWN0aW9uTWVudUl0ZW0sIElDb2x1bW5GaWVsZCB9IGZyb20gXCIuLi9jb25zdGFudFwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwicnMtY29tbW9uLWdyaWRcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL2luZGV4LmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL2luZGV4LmNvbXBvbmVudC5zY3NzXCJdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29tbW9uR3JpZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuICBAVmlld0NoaWxkKFwiZ3JpZFwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBwdWJsaWMgZ3JpZDogR3JpZENvbXBvbmVudDtcclxuICBASW5wdXQoKSBzaG93Q2hlY2tCb3ggPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGxvYWRlZCA9IHRydWU7XHJcbiAgQElucHV0KCkgaGlkZGVuTG9hZGVkID0gZmFsc2U7XHJcbiAgQElucHV0KCkgYXV0aG9yaXplZCA9IHRydWU7IC8vIERhdGFzZXTmmK/lkKbmjojmnYPvvIzmnKrmjojmnYPliJnmmL7npLrmnYPpmZDplJnor6/mj5DnpLpcclxuICAvLyBvbmx5IHVzZSBmb3IgbG9jYWwgZGF0YSBwYWdpbmF0aW9uXHJcbiAgQElucHV0KCkgc2VsZWN0ZWREaWZmS2V5ID0gXCJcIjtcclxuICBASW5wdXQoKSBncmlkSGVpZ2h0ID0gXCJcIjtcclxuICAvLyDov5nnjqnmhI/lv4XloavvvIzkuI3nhLZmaWx0ZXIgY29sdW1uQ2hvb3NlcumDveS8muaKpemUmVxyXG4gIEBJbnB1dCgpIGdyaWRJZCA9IFwiZ3JpZFwiO1xyXG4gIEBJbnB1dCgpIHJlc2l6ZVNldHRpbmdzID0geyBtb2RlOiBcIkF1dG9cIiB9O1xyXG4gIEBJbnB1dCgpIGZpbHRlclNldHRpbmdzID0geyB0eXBlOiBcIk1lbnVcIiB9O1xyXG4gIEBJbnB1dCgpIHRlbXBsYXRlOiBhbnk7XHJcbiAgQElucHV0KCkgZmllbGRzOiBJQ29sdW1uRmllbGRbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIGRhdGFTb3VyY2UgPSBbXTtcclxuICBASW5wdXQoKSBlZGl0U2V0dGluZ3M7XHJcbiAgQElucHV0KCkgY29sdW1uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQElucHV0KCkgcGFnZVNldHRpbmdzO1xyXG4gIEBJbnB1dCgpIGFsbG93UGFnaW5nID0gdHJ1ZTtcclxuICBASW5wdXQoKSBhbGxvd1Jvd0RyYWdBbmREcm9wID0gZmFsc2U7XHJcbiAgQElucHV0KCkgY2xpcE1vZGUgPSBcIkVsbGlwc2lzV2l0aFRvb2x0aXBcIjtcclxuICBASW5wdXQoKSBjaGVja0JveFdpZHRoID0gMzI7IC8vIGNvbCDmlbDph4/ov4flsJHnmoTml7blgJnvvIxjaGVja+WuveW6puS8muaLieS8uO+8jOi/meaXtuWAmeiuvue9rm51bGxcclxuICBASW5wdXQoKSBjaGlsZEdyaWQ7XHJcbiAgQElucHV0KCkgZnJvemVuQ29sdW1uczsgLy8gY29sIOaVsOmHj+i/h+WwkeeahOaXtuWAme+8jGNoZWNr5a695bqm5Lya5ouJ5Ly477yM6L+Z5pe25YCZ6K6+572ubnVsbFxyXG4gIEBJbnB1dCgpIGNvbHVtbkNob29zZXJTZXR0aW5ncztcclxuXHJcbiAgLyoqXHJcblx0ICogU2FtcGxlOiBbXHJcblx0XHRcdHtcclxuXHRcdFx0XHR0ZXh0OiBcIlByZXZpZXdcIixcclxuXHRcdFx0XHR0YXJnZXQ6IFwiLmUtY29udGVudFwiLFxyXG5cdFx0XHRcdGlkOiBcInByZXZpZXctaWNvblwiLFxyXG5cdFx0XHRcdGljb25Dc3M6IFwicHJldmlld1wiLFxyXG5cdFx0XHR9LFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0dGV4dDogXCJEb3dubG9hZFwiLFxyXG5cdFx0XHRcdHRhcmdldDogXCIuZS1jb250ZW50XCIsXHJcblx0XHRcdFx0aWQ6IFwiZG93bmxvYWQtaWNvblwiLFxyXG5cdFx0XHRcdGljb25Dc3M6IFwiZG93bmxvYWRcIixcclxuXHRcdFx0fVxyXG5cdFx0XVxyXG5cdFx055So5LqO5a6a5LmJcm935LitIOeCueWHu+S6i+S7tlxyXG5cdCAqL1xyXG4gIEBJbnB1dCgpIGNvbnRleHRNZW51SXRlbXM6IElBY3Rpb25NZW51SXRlbVtdID0gW107XHJcbiAgLy8gQElucHV0KCkgc2VsZWN0aW9uU2V0dGluZ3MgPSB7IGNoZWNrYm94T25seTogdHJ1ZSwgdHlwZTogXCJNdWx0aXBsZVwiIH07XHJcbiAgQElucHV0KCkgc2VsZWN0aW9uU2V0dGluZ3MgPSB7XHJcbiAgICB0eXBlOiBcIk11bHRpcGxlXCIsXHJcbiAgICAvLyBwZXJzaXN0U2VsZWN0aW9uOiB0cnVlLFxyXG4gICAgY2hlY2tib3hPbmx5OiB0cnVlLFxyXG4gIH07XHJcbiAgQElucHV0KCkgYWx3YXlzU2hvd0NoZWNrYm94OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZGVmYXVsdFJlY29yZDogYW55O1xyXG4gIEBJbnB1dCgpIGRpc2FibGVTeXN0ZW1Sb3c6IGJvb2xlYW4gPSBmYWxzZTsgLy8g56aB55SoSXNTeXRlbSA9IHRydWXnmoTmlbTooYxcclxuXHJcbiAgQE91dHB1dCgpIHJlY29yZERvdWJsZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBhY3Rpb25Db21wbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgcm93U2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHJvd0Rlc2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG9uQ29udGV4dE1lbnUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGFjdGlvbkhhbmRsZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHF1ZXJ5Q2VsbEluZm8gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHJlY29yZENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBhY3Rpb25CZWdpbiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgcm93RGF0YUJvdW5kID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBkYXRhQm91bmQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGV4cG9ydFF1ZXJ5Q2VsbEluZm8gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHJvd1NlbGVjdGluZyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgcm93RHJvcCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgcm93RHJhZyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgcm93RHJhZ1N0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBzZWxlY3RJZCA9IFtdO1xyXG4gIHN0YXJ0UGFnaW5nID0gZmFsc2U7XHJcbiAgaW5kZXhMaXN0ID0gW107XHJcbiAgY2xhc3NOYW1lID0gXCJncmlkLWxvYWRpbmdcIjtcclxuXHJcbiAgcHVibGljIHRyYW5zbGF0aW9uO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcclxuICAgIHRoaXMudHJhbnNsYXRpb24gPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwidHJhbnNsYXRpb25cIikpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5oaWRkZW5Mb2FkZWQpIHRoaXMuY2xhc3NOYW1lID0gXCJcIjtcclxuICAgIHRoaXMuZ3JpZElkID1cclxuICAgICAgdGhpcy5ncmlkSWQgKyBEYXRlLm5vdygpICsgXCJfXCIgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyLCA1KTtcclxuICAgIHRoaXMucmVmICYmIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgdHJhY2tCeUZuKGluZGV4LCBpdGVtKSB7XHJcbiAgICByZXR1cm4gaW5kZXg7IC8vIG9yIGEgdW5pcXVlIGlkZW50aWZpZXIgaW4geW91ciBvYmplY3RcclxuICB9XHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgaWYgKGNoYW5nZXMuZGF0YVNvdXJjZSAmJiBjaGFuZ2VzLmRhdGFTb3VyY2UuY3VycmVudFZhbHVlKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmFsbG93UGFnaW5nICYmXHJcbiAgICAgICAgY2hhbmdlcy5kYXRhU291cmNlLmN1cnJlbnRWYWx1ZS5sZW5ndGggJiZcclxuICAgICAgICAhdGhpcy5wYWdlU2V0dGluZ3NcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5wYWdlU2V0dGluZ3MgPVxyXG4gICAgICAgICAgY2hhbmdlcy5kYXRhU291cmNlLmN1cnJlbnRWYWx1ZS5sZW5ndGggPiA5XHJcbiAgICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgICAgcGFnZVNpemVzOiBbXCJBbGxcIiwgXCIyNVwiLCBcIjUwXCIsIFwiMTAwXCJdLFxyXG4gICAgICAgICAgICAgICAgcGFnZVNpemU6IDUwLFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgOiBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBfbG9hZCgpIHtcclxuICAgIGlmICghdGhpcy5hdXRob3JpemVkKSB7XHJcbiAgICAgICh0aGlzLmdyaWQubG9jYWxlT2JqIGFzIGFueSkubG9jYWxlU3RyaW5ncy5FbXB0eVJlY29yZCA9XHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGlvbi5ZT1VfRE9fTk9UX0hBVkVfVEhFX0RBVEFTRVRfUEVSTUlTU0lPTiB8fFxyXG4gICAgICAgIFwiWW91IGRvbid0IGhhdmUgdGhlIGRhdGFzZXQgcGVybWlzc2lvbiB0byB2aWV3IHRoZSByZWNvcmQuXCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBfZGF0YUJvdW5kKGFyZ3M6IGFueSkge1xyXG4gICAgLy8g5pW05Liq57uE5Lu25Yqg6L295a6M5oiQ5pe255qE5Zue6LCD5Ye95pWwXHJcbiAgICB2YXIgcGFnZXJDb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmUtcGFnZXJjb250YWluZXJcIik7XHJcbiAgICBpZiAocGFnZXJDb250YWluZXIpIHtcclxuICAgICAgdmFyIGxpbmtFbGVtZW50cyA9IHBhZ2VyQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXCIuZS1saW5rXCIpO1xyXG4gICAgICBsaW5rRWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKFwiaHJlZlwiKTsgLy8gU01QMi0xMDMxMCDliKDpmaTliIbpobXlmajnmoRocmVm5bGe5oCnXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWREaWZmS2V5KSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2hvb3NlUmVjb3JkcygpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuZGF0YUJvdW5kLmVtaXQoYXJncyk7XHJcbiAgfVxyXG5cclxuICBfZXhwb3J0UXVlcnlDZWxsSW5mbyhhcmdzKSB7XHJcbiAgICB0aGlzLmV4cG9ydFF1ZXJ5Q2VsbEluZm8uZW1pdChhcmdzKTtcclxuICB9XHJcblxyXG4gIF9yb3dEcmFnKGFyZ3MpIHtcclxuICAgIHRoaXMucm93RHJhZy5lbWl0KGFyZ3MpO1xyXG4gIH1cclxuXHJcbiAgX3Jvd0RyYWdTdGFydChhcmdzKSB7XHJcbiAgICB0aGlzLnJvd0RyYWdTdGFydC5lbWl0KGFyZ3MpO1xyXG4gIH1cclxuXHJcbiAgX3JlY29yZERvdWJsZUNsaWNrKCRldmVudCkge1xyXG4gICAgdGhpcy5yZWNvcmREb3VibGVDbGljay5lbWl0KCRldmVudCk7XHJcbiAgfVxyXG4gIC8qKlxyXG5cdCAqIFtzZWxlY3Rpb25TZXR0aW5nc109XCJ7IGNoZWNrYm94T25seTogdHJ1ZSB9XCJcclxuXHQgICBbc2hvd0NoZWNrQm94XT1cInRydWVcIlxyXG5cdCAgIOaOp+S7tuS9v+eUqOaXtu+8jOW/hemhu+mFjee9ruS4iumdouS4pOS4quWxnuaAp++8jOWQpuWIme+8jOWFqOmAieS8muWkseaViFxyXG5cdCAqL1xyXG4gIF9yb3dTZWxlY3RlZCgkZXZlbnQpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkRGlmZktleSkge1xyXG4gICAgICBpZiAoJGV2ZW50LmlzSGVhZGVyQ2hlY2tib3hDbGlja2VkICYmIEFycmF5LmlzQXJyYXkoJGV2ZW50LmRhdGEpKSB7XHJcbiAgICAgICAgaWYgKCRldmVudC5kYXRhICYmICRldmVudC5kYXRhLmxlbmd0aCkge1xyXG4gICAgICAgICAgJGV2ZW50LmRhdGEuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICBpdGVtLmlzU2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdElkLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5mb3JFYWNoKChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICRldmVudC5kYXRhLmZvckVhY2goKF9kYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKF9kYXRhW3RoaXMuc2VsZWN0ZWREaWZmS2V5XSA9PT0gZGF0YVt0aGlzLnNlbGVjdGVkRGlmZktleV0pIHtcclxuICAgICAgICAgICAgICAgIGRhdGEuaXNTZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAkZXZlbnQuZGF0YS5pc1NlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNlbGVjdElkLnB1c2goJGV2ZW50LmRhdGEpO1xyXG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5mb3JFYWNoKChkYXRhKSA9PiB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGRhdGFbdGhpcy5zZWxlY3RlZERpZmZLZXldID09PSAkZXZlbnQuZGF0YVt0aGlzLnNlbGVjdGVkRGlmZktleV1cclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBkYXRhLmlzU2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucmVmICYmIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yb3dTZWxlY3RlZC5lbWl0KCRldmVudCk7XHJcbiAgfVxyXG5cclxuICBfcm93RGVzZWxlY3RlZCgkZXZlbnQpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkRGlmZktleSkge1xyXG4gICAgICBpZiAodGhpcy5zdGFydFBhZ2luZykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoJGV2ZW50LmlzSGVhZGVyQ2hlY2tib3hDbGlja2VkICYmIEFycmF5LmlzQXJyYXkoJGV2ZW50LmRhdGEpKSB7XHJcbiAgICAgICAgJGV2ZW50LmRhdGEuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgaXRlbS5pc1NlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RJZCA9IFtdO1xyXG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5mb3JFYWNoKChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAkZXZlbnQuZGF0YS5mb3JFYWNoKChfZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoX2RhdGFbdGhpcy5zZWxlY3RlZERpZmZLZXldID09PSBkYXRhW3RoaXMuc2VsZWN0ZWREaWZmS2V5XSkge1xyXG4gICAgICAgICAgICAgIGRhdGEuaXNTZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAkZXZlbnQuZGF0YS5pc1NlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RJZCA9IHRoaXMuc2VsZWN0SWQuZmlsdGVyKFxyXG4gICAgICAgICAgKGl0ZW0pID0+XHJcbiAgICAgICAgICAgIGl0ZW1bdGhpcy5zZWxlY3RlZERpZmZLZXldICE9PSAkZXZlbnQuZGF0YVt0aGlzLnNlbGVjdGVkRGlmZktleV1cclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5mb3JFYWNoKChkYXRhKSA9PiB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGRhdGFbdGhpcy5zZWxlY3RlZERpZmZLZXldID09PSAkZXZlbnQuZGF0YVt0aGlzLnNlbGVjdGVkRGlmZktleV1cclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBkYXRhLmlzU2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnJlZiAmJiB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH1cclxuICAgIHRoaXMucm93RGVzZWxlY3RlZC5lbWl0KCRldmVudCk7XHJcbiAgfVxyXG5cclxuICBfb25Db250ZXh0TWVudShhcmdzKSB7XHJcbiAgICB0aGlzLm9uQ29udGV4dE1lbnUuZW1pdChhcmdzKTtcclxuICB9XHJcblxyXG4gIF9hY3Rpb25CZWdpbihhcmdzKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWREaWZmS2V5ICYmXHJcbiAgICAgIChhcmdzLnJlcXVlc3RUeXBlID09PSBcInBhZ2luZ1wiIHx8XHJcbiAgICAgICAgYXJncy5yZXF1ZXN0VHlwZSA9PT0gXCJzZWFyY2hpbmdcIiB8fFxyXG4gICAgICAgIGFyZ3MucmVxdWVzdFR5cGUgPT09IFwiZmlsdGVyaW5nXCIgfHxcclxuICAgICAgICBhcmdzLnJlcXVlc3RUeXBlID09PSBcInNvcnRpbmdcIilcclxuICAgICkge1xyXG4gICAgICB0aGlzLnN0YXJ0UGFnaW5nID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgYXJncy5yZXF1ZXN0VHlwZSA9PSBcImZpbHRlcmNob2ljZXJlcXVlc3RcIiB8fFxyXG4gICAgICBhcmdzLnJlcXVlc3RUeXBlID09PSBcImZpbHRlcnNlYXJjaGJlZ2luXCJcclxuICAgICkge1xyXG4gICAgICBhcmdzLmZpbHRlckNob2ljZUNvdW50ID0gMTUwMDA7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hY3Rpb25CZWdpbi5lbWl0KGFyZ3MpO1xyXG4gIH1cclxuXHJcbiAgc2VhcmNoKGtleXdvcmRzKSB7XHJcbiAgICB0aGlzLmdyaWQuc2VhcmNoKGtleXdvcmRzKTtcclxuICB9XHJcbiAgc2VsZWN0Um93cyhpbmRleExpc3Q6IG51bWJlcltdKSB7XHJcbiAgICB0aGlzLmdyaWQuc2VsZWN0Um93cyhpbmRleExpc3QpO1xyXG4gIH1cclxuICBzZWxlY3RSb3coaW5kZXgpIHtcclxuICAgIHRoaXMuZ3JpZC5zZWxlY3RSb3coaW5kZXgpO1xyXG4gIH1cclxuICBnZXRDdXJyZW50Vmlld1JlY29yZHMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5ncmlkLmdldEN1cnJlbnRWaWV3UmVjb3JkcygpO1xyXG4gIH1cclxuXHJcbiAgY3VzdG9taXNlQ2VsbCgkZXZlbnQpIHtcclxuICAgIHRoaXMucXVlcnlDZWxsSW5mby5lbWl0KCRldmVudCk7XHJcbiAgfVxyXG5cclxuICBjb250ZXh0TWVudU9wZW4oYXJncz86IEJlZm9yZU9wZW5DbG9zZUV2ZW50QXJncyk6IHZvaWQge1xyXG4gICAgY29uc3QgZGF0YSA9IChhcmdzIGFzIEJlZm9yZU9wZW5DbG9zZUV2ZW50QXJncyB8IGFueSkucm93SW5mby5yb3dEYXRhO1xyXG4gICAgaWYgKCFkYXRhKSB7XHJcbiAgICAgIGFyZ3MuY2FuY2VsID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IGVuYWJsZUl0ZW1zID0gW107XHJcbiAgICBsZXQgaGlkZUl0ZW1zID0gW107XHJcbiAgICB0aGlzLmdyaWQuY29udGV4dE1lbnVNb2R1bGUuY29udGV4dE1lbnUucmVmcmVzaCgpOyAvLyDmr4/mrKHngrnlh7vmjInpkq7lvLnnqpfliY3pnIDlho3mrKHliJ3lp4vljJbnirbmgIEg5ZCm5YiZ5LiN5pu05paw77ybXHJcbiAgICB0aGlzLmNvbnRleHRNZW51SXRlbXMuZm9yRWFjaCgoaXRlbTogSUFjdGlvbk1lbnVJdGVtKSA9PiB7XHJcbiAgICAgIC8vIOeUqOS6juWkhOeQhumDqOWIhuaMiemSrmRpc2FibGVk55qE5oOF5Ya1XHJcbiAgICAgIGlmIChcclxuICAgICAgICBpdGVtLmRpc2FibGVkIHx8XHJcbiAgICAgICAgKGRhdGEuZGlzYWJsZUl0ZW0gJiYgZGF0YS5kaXNhYmxlSXRlbS5pbmNsdWRlcyhpdGVtLmljb25Dc3MpKVxyXG4gICAgICApIHtcclxuICAgICAgICBlbmFibGVJdGVtcy5wdXNoKGl0ZW0udGV4dCk7XHJcbiAgICAgICAgLy8gdGhpcy5ncmlkLmNvbnRleHRNZW51TW9kdWxlLmNvbnRleHRNZW51LmVuYWJsZUl0ZW1zKFxyXG4gICAgICAgIC8vIFx0W2l0ZW0udGV4dF0sXHJcbiAgICAgICAgLy8gXHRmYWxzZVxyXG4gICAgICAgIC8vICk7XHJcbiAgICAgIH1cclxuICAgICAgLy8g55So5LqO5aSE55CG6YOo5YiG5oyJ6ZKu6ZyA6KaBaGlkZeeahOaDheWGtVxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgaXRlbS5pc0hpZGUgfHxcclxuICAgICAgICAoZGF0YS5oaWRlSXRlbSAmJiBkYXRhLmhpZGVJdGVtLmluY2x1ZGVzKGl0ZW0uaWNvbkNzcykpXHJcbiAgICAgICkge1xyXG4gICAgICAgIGhpZGVJdGVtcy5wdXNoKGl0ZW0udGV4dCk7XHJcbiAgICAgICAgLy8gdGhpcy5ncmlkLmNvbnRleHRNZW51TW9kdWxlLmNvbnRleHRNZW51LmhpZGVJdGVtcyhcclxuICAgICAgICAvLyBcdFtpdGVtLnRleHRdLFxyXG4gICAgICAgIC8vIFx0ZmFsc2VcclxuICAgICAgICAvLyApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuZ3JpZC5jb250ZXh0TWVudU1vZHVsZS5jb250ZXh0TWVudS5lbmFibGVJdGVtcyhlbmFibGVJdGVtcywgZmFsc2UpO1xyXG4gICAgdGhpcy5ncmlkLmNvbnRleHRNZW51TW9kdWxlLmNvbnRleHRNZW51LmhpZGVJdGVtcyhoaWRlSXRlbXMsIGZhbHNlKTtcclxuICB9XHJcblxyXG4gIF9hY3Rpb25IYW5kbGVyKCRldmVudCkge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnNlbGVjdGVkRGlmZktleSAmJlxyXG4gICAgICAoJGV2ZW50LnJlcXVlc3RUeXBlID09PSBcInBhZ2luZ1wiIHx8XHJcbiAgICAgICAgJGV2ZW50LnJlcXVlc3RUeXBlID09PSBcInNlYXJjaGluZ1wiIHx8XHJcbiAgICAgICAgJGV2ZW50LnJlcXVlc3RUeXBlID09PSBcImZpbHRlcmluZ1wiIHx8XHJcbiAgICAgICAgJGV2ZW50LnJlcXVlc3RUeXBlID09PSBcInNvcnRpbmdcIilcclxuICAgICkge1xyXG4gICAgICB0aGlzLmluZGV4TGlzdCA9IFtdO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLmNob29zZVJlY29yZHMoKTtcclxuICAgICAgICB0aGlzLnN0YXJ0UGFnaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yZWYgJiYgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIHRoaXMucmVmICYmIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuYWN0aW9uSGFuZGxlci5lbWl0KCRldmVudCk7XHJcbiAgICB0aGlzLmFjdGlvbkNvbXBsZXRlLmVtaXQoJGV2ZW50KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2hvb3NlUmVjb3JkcygpIHtcclxuICAgIHRoaXMuaW5kZXhMaXN0ID0gW107XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UuZm9yRWFjaCgoZGF0YSkgPT4ge1xyXG4gICAgICB0aGlzLmdyaWQuZ2V0Q3VycmVudFZpZXdSZWNvcmRzKCkuZm9yRWFjaCgocm93OiBhbnksIGkpID0+IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICByb3cgJiZcclxuICAgICAgICAgIGRhdGFbdGhpcy5zZWxlY3RlZERpZmZLZXldID09PSByb3dbdGhpcy5zZWxlY3RlZERpZmZLZXldICYmXHJcbiAgICAgICAgICBkYXRhLmlzU2VsZWN0ZWRcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMuaW5kZXhMaXN0LnB1c2goaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZ3JpZC5zZWxlY3RSb3dzKHRoaXMuaW5kZXhMaXN0KTtcclxuICB9XHJcblxyXG4gIF9yZWNvcmRDbGljaygkZXZlbnQpIHtcclxuICAgIHRoaXMucmVjb3JkQ2xpY2suZW1pdCgkZXZlbnQpO1xyXG4gIH1cclxuICByZWZyZXNoKCkge1xyXG4gICAgdGhpcy5ncmlkLnJlZnJlc2goKTtcclxuICB9XHJcbiAgX3Jvd1NlbGVjdGluZyhlKSB7XHJcbiAgICB0aGlzLnJvd1NlbGVjdGluZy5lbWl0KGUpO1xyXG4gIH1cclxuICByZWZyZXNoQ29sdW1ucygpIHtcclxuICAgIHRoaXMuZ3JpZC5yZWZyZXNoQ29sdW1ucygpO1xyXG4gIH1cclxuICByZWZyZXNoSGVhZGVyKCkge1xyXG4gICAgdGhpcy5ncmlkLnJlZnJlc2hIZWFkZXIoKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydChleGNlbEV4cG9ydFByb3BlcnRpZXM/KSB7XHJcbiAgICB0aGlzLmdyaWQuZXhjZWxFeHBvcnQoZXhjZWxFeHBvcnRQcm9wZXJ0aWVzKTtcclxuICB9XHJcblxyXG4gIGdldFNlbGVjdGVkUmVjb3JkcygpIHtcclxuICAgIHJldHVybiB0aGlzLmdyaWQuZ2V0U2VsZWN0ZWRSZWNvcmRzKCk7XHJcbiAgfVxyXG5cclxuICBvblJvd0Ryb3AoZSkge1xyXG4gICAgdGhpcy5yb3dEcm9wLmVtaXQoZSk7XHJcbiAgfVxyXG5cclxuICBfcm93RGF0YUJvdW5kKCRldmVudCkge1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZVN5c3RlbVJvdyAmJiAkZXZlbnQuZGF0YSAmJiAkZXZlbnQuZGF0YS5Jc1N5c3RlbSkge1xyXG4gICAgICAkZXZlbnQucm93LmNsYXNzTGlzdC5hZGQoXCJlLWRpc2FibGVkXCIpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yb3dEYXRhQm91bmQuZW1pdCgkZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJTZWxlY3Rpb24oKSB7XHJcbiAgICB0aGlzLmdyaWQuY2xlYXJTZWxlY3Rpb24oKTtcclxuICB9XHJcblxyXG4gIGV4Y2VsRXhwb3J0KCkge1xyXG4gICAgdGhpcy5ncmlkLmV4Y2VsRXhwb3J0KCk7XHJcbiAgfVxyXG5cclxuICBhZGRJdGVtKCkge1xyXG4gICAgdGhpcy5ncmlkLmFkZFJlY29yZCh7IC4uLnRoaXMuZGVmYXVsdFJlY29yZCwgaXNOZXc6IHRydWUgfSwgMCk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5ncmlkLnNlbGVjdFJvdygwKTtcclxuICAgICAgdGhpcy5ncmlkLnN0YXJ0RWRpdCgpO1xyXG4gICAgfSwgMzApO1xyXG4gIH1cclxuXHJcbiAgc2F2ZUl0ZW0oKSB7XHJcbiAgICB0aGlzLmdyaWQuZW5kRWRpdCgpO1xyXG4gIH1cclxuXHJcbiAgZWRpdEl0ZW0oaW5kZXgpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmdyaWQuc2VsZWN0Um93KE51bWJlcihpbmRleCkpO1xyXG4gICAgICB0aGlzLmdyaWQuc3RhcnRFZGl0KCk7XHJcbiAgICB9LCAzMCk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVJdGVtKGluZGV4KSB7XHJcbiAgICB0aGlzLmdyaWQuc2VsZWN0Um93KE51bWJlcihpbmRleCkpO1xyXG4gICAgdmFyIHNlbGVjdGVkUmVjb3JkID0gdGhpcy5ncmlkLmdldFNlbGVjdGVkUmVjb3JkcygpWzBdIGFzIGFueTtcclxuICAgIHRoaXMuZ3JpZC5kZWxldGVSZWNvcmQoc2VsZWN0ZWRSZWNvcmQgYXMgc3RyaW5nKTtcclxuICB9XHJcblxyXG4gIGNhbmNlbEl0ZW0oaW5kZXgpIHtcclxuICAgIHRoaXMuZ3JpZC5jbG9zZUVkaXQoKTtcclxuICAgIHRoaXMuZGVsZXRlSXRlbShpbmRleCk7XHJcbiAgfVxyXG4gIHB1YmxpYyBpbml0TGlzdCA9IChudW0gPSAyNSwga2V5ID0gXCJJZFwiKSA9PiB7XHJcbiAgICBjb25zdCBsaXN0ID0gW107XHJcbiAgICB0aW1lcyhudW0sIChpKSA9PiB7XHJcbiAgICAgIGxpc3QucHVzaCh7XHJcbiAgICAgICAgW2tleV06IGksXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gbGlzdDtcclxuICB9O1xyXG4gIHB1YmxpYyBzaG93TG9hZGluZygpIHtcclxuICAgIHRoaXMuY2xhc3NOYW1lID0gXCJncmlkLWxvYWRpbmdcIjtcclxuICAgIHRoaXMucmVmICYmIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgdGhpcy5yZWYgJiYgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhpZGVMb2FkaW5nKCkge1xyXG4gICAgdGhpcy5jbGFzc05hbWUgPSBcIlwiO1xyXG4gICAgdGhpcy5yZWYgJiYgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICB0aGlzLnJlZiAmJiB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -37,14 +37,11 @@ var MultiTabComponent = /** @class */ (function () {
37
37
  this.timer = null;
38
38
  this.keepAlive = (/** @type {?} */ (this.routeReuseStrategy));
39
39
  }
40
- // 初始化屏幕宽度
41
40
  /**
42
41
  * @param {?} event
43
42
  * @return {?}
44
43
  */
45
- MultiTabComponent.prototype.onResize =
46
- // 初始化屏幕宽度
47
- /**
44
+ MultiTabComponent.prototype.onResize = /**
48
45
  * @param {?} event
49
46
  * @return {?}
50
47
  */
@@ -60,6 +57,7 @@ var MultiTabComponent = /** @class */ (function () {
60
57
  */
61
58
  function () {
62
59
  var _this = this;
60
+ this.translation = JSON.parse(localStorage.getItem("translation"));
63
61
  this.initTab();
64
62
  // 解决刷新页面后,选中的 tab 丢失问题
65
63
  /** @type {?} */
@@ -155,14 +153,12 @@ var MultiTabComponent = /** @class */ (function () {
155
153
  function (sub) { return sub.unsubscribe(); }));
156
154
  };
157
155
  /**
158
- * @param {?=} title
159
156
  * @return {?}
160
157
  */
161
158
  MultiTabComponent.prototype.setEllipsisTitle = /**
162
- * @param {?=} title
163
159
  * @return {?}
164
160
  */
165
- function (title) {
161
+ function () {
166
162
  var _this = this;
167
163
  this.textGap = this.GAP_NORMAL;
168
164
  if (this.screenWidth <= 1100) {
@@ -171,23 +167,16 @@ var MultiTabComponent = /** @class */ (function () {
171
167
  var _a = this.calcTabWidth(), allWidth = _a.allWidth, leftWidth = _a.leftWidth, rightWidth = _a.rightWidth;
172
168
  /** @type {?} */
173
169
  var width = Math.floor((allWidth - rightWidth) / (this.tabList && this.tabList.length));
174
- if (title) {
175
- return this.cf.setMiddleEllipsis(title, width > this.TAB_WIDTH
176
- ? this.TAB_WIDTH - this.textGap
177
- : width - this.textGap, 12);
178
- }
179
- else {
180
- this.tabList.forEach((/**
181
- * @param {?} ele
182
- * @param {?} idx
183
- * @return {?}
184
- */
185
- function (ele, idx) {
186
- ele.displayTitle = _this.cf.setMiddleEllipsis(ele.title, width > _this.TAB_WIDTH
187
- ? _this.TAB_WIDTH - _this.textGap
188
- : width - _this.textGap, 12);
189
- }));
190
- }
170
+ this.tabList.forEach((/**
171
+ * @param {?} ele
172
+ * @param {?} idx
173
+ * @return {?}
174
+ */
175
+ function (ele, idx) {
176
+ ele.displayTitle = _this.cf.setMiddleEllipsis(_this.translation[ele.title] || ele.title, width > _this.TAB_WIDTH
177
+ ? _this.TAB_WIDTH - _this.textGap
178
+ : width - _this.textGap, 12);
179
+ }));
191
180
  this.ref.markForCheck();
192
181
  this.ref.detectChanges();
193
182
  };
@@ -242,38 +231,28 @@ var MultiTabComponent = /** @class */ (function () {
242
231
  this.tabList = TabCache || [];
243
232
  if (this.tabList.length === 0) {
244
233
  /** @type {?} */
245
- var title = sessionStorage.getItem("firstTabTitle");
246
- if (title) {
247
- sessionStorage.removeItem("firstTabTitle");
248
- /** @type {?} */
249
- var url = this.router.url;
250
- this.addTab(url, title);
251
- }
252
- else {
253
- /** @type {?} */
254
- var pureUrl_1 = this.urlWithoutQuery(this.router.url);
255
- /** @type {?} */
256
- var target = this.flattenMenu.find((/**
257
- * @param {?} ele
258
- * @return {?}
259
- */
260
- function (ele) { return ele.url === pureUrl_1; }));
261
- if (target) {
262
- if (target.url !== this.defaultTabUrl) {
263
- /** @type {?} */
264
- var defaultTab = this.flattenMenu.find((/**
265
- * @param {?} ele
266
- * @return {?}
267
- */
268
- function (ele) { return ele.url === _this.defaultTabUrl; }));
269
- this.tabList.push({
270
- url: defaultTab.url,
271
- title: defaultTab.label,
272
- displayTitle: defaultTab.label,
273
- });
274
- }
275
- this.addTab(target.url, target.label);
234
+ var pureUrl_1 = this.urlWithoutQuery(this.router.url);
235
+ /** @type {?} */
236
+ var target = this.flattenMenu.find((/**
237
+ * @param {?} ele
238
+ * @return {?}
239
+ */
240
+ function (ele) { return ele.url === pureUrl_1; }));
241
+ if (target) {
242
+ if (target.url !== this.defaultTabUrl) {
243
+ /** @type {?} */
244
+ var defaultTab = this.flattenMenu.find((/**
245
+ * @param {?} ele
246
+ * @return {?}
247
+ */
248
+ function (ele) { return ele.url === _this.defaultTabUrl; }));
249
+ this.tabList.push({
250
+ url: defaultTab.url,
251
+ title: this.translation[defaultTab.menuCode] || defaultTab.label,
252
+ displayTitle: this.translation[defaultTab.menuCode] || defaultTab.label,
253
+ });
276
254
  }
255
+ this.addTab(target.url, this.translation[target.menuCode] || target.label);
277
256
  }
278
257
  }
279
258
  };
@@ -522,7 +501,7 @@ var MultiTabComponent = /** @class */ (function () {
522
501
  MultiTabComponent.decorators = [
523
502
  { type: Component, args: [{
524
503
  selector: "rs-multi-tab",
525
- template: "<div class=\"rs-multi-tab\" [ngClass]=\"{ 'b-line': tabList.length > 0 }\">\r\n <ul\r\n cdkDropList\r\n cdkDropListOrientation=\"horizontal\"\r\n (cdkDropListDropped)=\"onTabDrop($event)\"\r\n >\r\n <li\r\n class=\"tab-item\"\r\n *ngFor=\"let tab of tabList; let i = index\"\r\n [ngClass]=\"selectedTab === i ? 'isSelect' : 'notSelect'\"\r\n [cdkDragDisabled]=\"i === 0\"\r\n cdkDrag\r\n (click)=\"changeTab(tab, i)\"\r\n >\r\n <ng-template cdkDragPlaceholder let-item>\r\n <div class=\"placeholder\">\r\n\t\t</div>\r\n </ng-template>\r\n\t \r\n <ejs-tooltip\r\n id=\"notSelectTooltip\"\r\n [showTipPointer]=\"false\"\r\n [openDelay]=\"500\"\r\n *ngIf=\"tab.displayTitle !== tab.title; else originText\"\r\n style=\"height: 27px\"\r\n >\r\n <ng-template #content>\r\n <div class=\"tooltip-content\">\r\n {{ tab.title }}\r\n </div>\r\n </ng-template>\r\n <span class=\"tabTitle\">{{ tab.displayTitle }}</span>\r\n </ejs-tooltip>\r\n <ng-template #originText>\r\n <span class=\"tabTitle\">\r\n {{ tab.displayTitle }}\r\n </span>\r\n </ng-template>\r\n <span class=\"img-block\" *ngIf=\"selectedTab !== i && i !== 0\"></span>\r\n <img\r\n *ngIf=\"i !== 0\"\r\n src=\"../../../assets/img/close-url.svg\"\r\n (click)=\"closeTab(i)\"\r\n />\r\n </li>\r\n </ul>\r\n <div class=\"refresh-tab\" (click)=\"refreshTab()\" *ngIf=\"tabList.length > 0\">\r\n <ejs-tooltip\r\n id=\"notSelectTooltip\"\r\n cssClass=\"notSelectTooltip\"\r\n [showTipPointer]=\"false\"\r\n [openDelay]=\"500\"\r\n style=\"height: 27px\"\r\n >\r\n <ng-template #content>\r\n <div class=\"tooltip-content\">Refresh Current Tab</div>\r\n </ng-template>\r\n <img\r\n id=\"loadingIcon\"\r\n alt\r\n class=\"refresh-btn\"\r\n src=\"../../../assets/img/desktop-refresh-btn.svg\"\r\n />\r\n </ejs-tooltip>\r\n </div>\r\n</div>\r\n",
504
+ template: "<div class=\"rs-multi-tab\" [ngClass]=\"{ 'b-line': tabList.length > 0 }\">\r\n <ul\r\n cdkDropList\r\n cdkDropListOrientation=\"horizontal\"\r\n (cdkDropListDropped)=\"onTabDrop($event)\"\r\n >\r\n <li\r\n class=\"tab-item\"\r\n *ngFor=\"let tab of tabList; let i = index\"\r\n [ngClass]=\"selectedTab === i ? 'isSelect' : 'notSelect'\"\r\n [cdkDragDisabled]=\"i === 0\"\r\n cdkDrag\r\n (click)=\"changeTab(tab, i)\"\r\n >\r\n <ng-template cdkDragPlaceholder let-item>\r\n <div class=\"placeholder\"></div>\r\n </ng-template>\r\n <ejs-tooltip\r\n id=\"notSelectTooltip\"\r\n [showTipPointer]=\"false\"\r\n [openDelay]=\"500\"\r\n *ngIf=\"tab.displayTitle !== (translation[tab.title] || tab.title) ; else originText\"\r\n style=\"height: 27px\"\r\n >\r\n <ng-template #content>\r\n <div class=\"tooltip-content\">\r\n {{ translation[tab.title] || tab.title }}\r\n </div>\r\n </ng-template>\r\n <span class=\"tabTitle\">{{ tab.displayTitle }}</span>\r\n </ejs-tooltip>\r\n <ng-template #originText>\r\n <span class=\"tabTitle\">\r\n {{ tab.displayTitle }}\r\n </span>\r\n </ng-template>\r\n <span class=\"img-block\" *ngIf=\"selectedTab !== i && i !== 0\"></span>\r\n <img\r\n *ngIf=\"i !== 0\"\r\n src=\"../../../assets/img/close-url.svg\"\r\n (click)=\"closeTab(i)\"\r\n />\r\n </li>\r\n </ul>\r\n <div class=\"refresh-tab\" (click)=\"refreshTab()\" *ngIf=\"tabList.length > 0\">\r\n <ejs-tooltip\r\n id=\"notSelectTooltip\"\r\n cssClass=\"notSelectTooltip\"\r\n [showTipPointer]=\"false\"\r\n [openDelay]=\"500\"\r\n style=\"height: 27px\"\r\n >\r\n <ng-template #content>\r\n <div class=\"tooltip-content\">\r\n {{ translation.REFRESH_CURRENT_TAB || \".REFRESH_CURRENT_TAB\" }}\r\n </div>\r\n </ng-template>\r\n <img\r\n id=\"loadingIcon\"\r\n alt\r\n class=\"refresh-btn\"\r\n src=\"../../../assets/img/desktop-refresh-btn.svg\"\r\n />\r\n </ejs-tooltip>\r\n </div>\r\n</div>\r\n",
526
505
  styles: ["@charset \"UTF-8\";.rs-multi-tab{width:100%;display:flex;justify-content:space-between;margin:0 auto;max-width:1886px}.rs-multi-tab.b-line{border-bottom:1px solid #e5eaef}.rs-multi-tab ul{display:flex;margin:0 8px;padding:0;overflow:hidden;height:100%}.rs-multi-tab ul .tab-item{max-width:164px;padding:0 12px;display:flex;align-items:center;flex:auto;border:1px solid #e5eaef;border-bottom:none;color:#5f6f81;font-family:Arial;font-size:11px;font-style:normal;font-weight:400;line-height:28px;height:28px;background:#f8fafb;vertical-align:top;position:relative;cursor:default}.rs-multi-tab ul .tab-item .tabTitle{display:inline-block;white-space:nowrap;font-size:11px;font-family:Arial;font-style:normal;font-weight:400;line-height:16px;transition:width .3s}.rs-multi-tab ul .tab-item img{border-radius:4px;padding:4px;margin-left:6px;margin-top:1px;vertical-align:top;cursor:pointer}.rs-multi-tab ul .tab-item img:hover{background:#dce8f6}.rs-multi-tab ul .tab-item:not(:last-child){border-right:none}.rs-multi-tab ul .tab-item:first-of-type{border-top-left-radius:8px}.rs-multi-tab ul .tab-item:last-child{border-top-right-radius:8px}.rs-multi-tab ul.cdk-drop-list-dragging .tab-item.cdk-drag-disabled:hover{background:#f8fafb!important;cursor:no-drop}.rs-multi-tab ul .isSelect{color:#1f3f5c;background:#fff}.rs-multi-tab ul .notSelect img{display:none}.rs-multi-tab ul .notSelect .img-block{display:inline-block;width:22px}.rs-multi-tab ul .notSelect:hover{color:#1f3f5c;background-color:rgba(31,123,255,.04)}.rs-multi-tab ul .notSelect:hover .img-block{display:none}.rs-multi-tab ul .notSelect:hover img{display:inline-block}.rs-multi-tab .refresh-tab{cursor:pointer;text-align:right;color:#6c7c90;font-family:Arial;font-size:11px;font-style:normal;font-weight:400;line-height:28px;padding-right:12px}.rs-multi-tab .refresh-tab img{vertical-align:middle;margin-right:4px}.refresh-tab-loading{-webkit-animation:1s linear infinite spin;animation:1s linear infinite spin}.notSelectTooltip{transform:translateX(-12px)}.tab-item.cdk-drag{max-width:164px;padding:0 12px;display:flex;align-items:center;flex:auto;border:1px solid #e5eaef;border-bottom:none;color:#5f6f81;font-family:Arial;font-size:11px;font-style:normal;font-weight:400;line-height:28px;height:28px;background:#f8fafb;vertical-align:top;position:relative;cursor:default}.tab-item.cdk-drag .tabTitle{display:inline-block;white-space:nowrap;font-size:11px;font-family:Arial;font-style:normal;font-weight:400;line-height:16px;transition:width .3s}.tab-item.cdk-drag img{border-radius:4px;padding:4px;margin-left:6px;margin-top:1px;vertical-align:top;cursor:pointer}.tab-item.cdk-drag img:hover{background:#dce8f6}@-webkit-keyframes spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.tooltip-content{padding:4px;color:#f8fafb;font-family:Arial;font-size:11px;font-style:normal;font-weight:400;line-height:14px}@media (max-width:1400px){.refresh-tab{padding-right:0!important}.refresh-tab span{display:none!important}}@media (max-width:1100px){.rs-multi-tab ul .tab-item img{position:absolute;right:3px;background-color:#fff}.notSelect:hover img{position:absolute;right:3px;background-color:#eff5fb}.img-block{display:none!important}.isSelect:not(:first-child){padding-right:20px!important}}@media (max-width:600px){.rs-multi-tab ul .tab-item{padding:0 8px}.rs-multi-tab ul .notSelect .img-block{width:0!important}}"]
527
506
  }] }
528
507
  ];
@@ -585,6 +564,8 @@ if (false) {
585
564
  /** @type {?} */
586
565
  MultiTabComponent.prototype.screenWidth;
587
566
  /** @type {?} */
567
+ MultiTabComponent.prototype.translation;
568
+ /** @type {?} */
588
569
  MultiTabComponent.prototype.timer;
589
570
  /** @type {?} */
590
571
  MultiTabComponent.prototype.router;
@@ -608,4 +589,4 @@ if (false) {
608
589
  */
609
590
  MultiTabComponent.prototype.routeReuseStrategy;
610
591
  }
611
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vcmFpc2UtY29tbW9uLWxpYi8iLCJzb3VyY2VzIjpbImxpYi9sYXlvdXQvbXVsdGktdGFiL2luZGV4LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLGNBQWMsRUFDZCxhQUFhLEVBQ2IsTUFBTSxHQUVQLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXhDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUU3RCxPQUFPLEVBQWUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEU7SUFNRSwyQkFDUyxNQUFjLEVBQ2QsRUFBeUIsRUFDekIsY0FBOEIsRUFDN0IsR0FBc0IsRUFDdEIsTUFBcUIsRUFDckIsa0JBQXNDO1FBTHZDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxPQUFFLEdBQUYsRUFBRSxDQUF1QjtRQUN6QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDN0IsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUNyQix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBS3ZDLG9CQUFlLEdBQWEsRUFBRSxDQUFDLENBQUMsWUFBWTs7UUFDNUMsc0JBQWlCLEdBQWEsRUFBRSxDQUFDLENBQUMsWUFBWTs7UUFDOUMsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFDakIsa0JBQWEs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MkNBQWU7Ozs7O0lBQXZCLFVBQXdCLEdBQUc7UUFDekIsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNCLENBQUM7O2dCQXZVRixTQUFTLFNBQUM7b0JBQ1QsUUFBUSxFQUFFLGNBQWM7b0JBQ3hCLGdsRUFBcUM7O2lCQUV0Qzs7OztnQkFkQyxNQUFNO2dCQU1DLHFCQUFxQjtnQkFSNUIsY0FBYztnQkFWZCxpQkFBaUI7Z0JBbUJWLGFBQWE7Z0JBRmIsa0JBQWtCOzs7a0NBc0J4QixLQUFLO29DQUNMLEtBQUs7OEJBQ0wsS0FBSztnQ0FDTCxLQUFLOytCQUVMLE1BQU07MkJBYU4sWUFBWSxTQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7SUFxUzNDLHdCQUFDO0NBQUEsQUF4VUQsSUF3VUM7U0FuVVksaUJBQWlCOzs7SUFXNUIsc0NBQTRCOztJQUM1Qiw0Q0FBd0M7O0lBQ3hDLDhDQUEwQzs7SUFDMUMsd0NBQTBCOztJQUMxQiwwQ0FBNEI7O0lBRTVCLHlDQUE0Qzs7Ozs7SUFFNUMsMENBQTJDOztJQUMzQyxzQ0FBZ0I7O0lBQ2hCLHVDQUFnQjs7SUFDaEIsc0NBQWU7O0lBQ2Ysb0NBQVE7O0lBQ1IsZ0NBQWtCOztJQUNsQixtQ0FBWTs7SUFDWixvQ0FBYTs7SUFDYix3Q0FBd0I7O0lBQ3hCLG9DQUFxQjs7SUFDckIsd0NBQXdDOztJQW9ReEMsa0NBQWE7O0lBL1JYLG1DQUFxQjs7SUFDckIsK0JBQWdDOztJQUNoQywyQ0FBcUM7Ozs7O0lBQ3JDLGdDQUE4Qjs7Ozs7SUFDOUIsbUNBQTZCOzs7OztJQUM3QiwrQ0FBOEMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyDnu4Tku7bnsbtcclxuaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIElucHV0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7XHJcbiAgQWN0aXZhdGVkUm91dGUsXHJcbiAgTmF2aWdhdGlvbkVuZCxcclxuICBSb3V0ZXIsXHJcbiAgUm91dGVyT3V0bGV0LFxyXG59IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IFJvdXRlUmV1c2VTdHJhdGVneSB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgQ29tbW9uRnVuY3Rpb25TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2UvY29tbW9uLWZ1bmN0aW9uLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRHJhd2VyU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlL2RyYXdlci5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEtlZXBBbGl2ZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZS9rZWVwLWFsaXZlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQ2RrRHJhZ0Ryb3AsIG1vdmVJdGVtSW5BcnJheSB9IGZyb20gXCJAYW5ndWxhci9jZGsvZHJhZy1kcm9wXCI7XHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcInJzLW11bHRpLXRhYlwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vaW5kZXguY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybHM6IFtcIi4vaW5kZXguY29tcG9uZW50LnNjc3NcIl0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNdWx0aVRhYkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyByb3V0ZXI6IFJvdXRlcixcclxuICAgIHB1YmxpYyBjZjogQ29tbW9uRnVuY3Rpb25TZXJ2aWNlLFxyXG4gICAgcHVibGljIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgZHJhd2VyOiBEcmF3ZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZVJldXNlU3RyYXRlZ3k6IFJvdXRlUmV1c2VTdHJhdGVneVxyXG4gICkge1xyXG4gICAgdGhpcy5rZWVwQWxpdmUgPSB0aGlzLnJvdXRlUmV1c2VTdHJhdGVneSBhcyBLZWVwQWxpdmVTZXJ2aWNlO1xyXG4gIH1cclxuICBrZWVwQWxpdmU6IEtlZXBBbGl2ZVNlcnZpY2U7XHJcbiAgQElucHV0KCkgc2luZ2xlUmV1c2VVcmxzOiBzdHJpbmdbXSA9IFtdOyAvL+WPquiDveWNleS4que8k+WtmOeahHVybFxyXG4gIEBJbnB1dCgpIG5vR2VuZXJhdGVUYWJVcmxzOiBzdHJpbmdbXSA9IFtdOyAvL+S4jeeUn+aIkHRhYueahHVybFxyXG4gIEBJbnB1dCgpIGZsYXR0ZW5NZW51ID0gW107XHJcbiAgQElucHV0KCkgZGVmYXVsdFRhYlVybCA9IFwiXCI7XHJcblxyXG4gIEBPdXRwdXQoKSBvblJlZnJlc2hUYWIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuICBUQUJfV0lEVEggPSAxNjQ7XHJcbiAgR0FQX05PUk1BTCA9IDU0O1xyXG4gIEdBUF9TTUFMTCA9IDMwO1xyXG4gIHRleHRHYXA7IC8vIOaWh+acrOS4jui+ueahhueahOaAu+mXtOi3nVxyXG4gIGZvbzogUm91dGVyT3V0bGV0O1xyXG4gIGNvbVJlZjogYW55O1xyXG4gIHRhYkxpc3QgPSBbXTtcclxuICBzZWxlY3RlZFRhYjogbnVtYmVyID0gMDtcclxuICBtYXhUYWJzOiBudW1iZXIgPSAxMDtcclxuICBzY3JlZW5XaWR0aDogbnVtYmVyID0gd2luZG93LmlubmVyV2lkdGg7IC8vIOWIneWni+WMluWxj+W5leWuveW6plxyXG4gIEBIb3N0TGlzdGVuZXIoXCJ3aW5kb3c6cmVzaXplXCIsIFtcIiRldmVudFwiXSlcclxuICBvblJlc2l6ZShldmVudCkge1xyXG4gICAgdGhpcy5zY3JlZW5XaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoOyAvLyDmm7TmlrDlsY/luZXlrr3luqZcclxuICAgIC8vIHRoaXMuc2V0RWxsaXBzaXNUaXRsZSgpOyDlnKjmnIDlpJbpnaLlrrnlmajosIPnlKhcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5pbml0VGFiKCk7XHJcbiAgICAvLyDop6PlhrPliLfmlrDpobXpnaLlkI7vvIzpgInkuK3nmoQgdGFiIOS4ouWksemXrumimFxyXG4gICAgY29uc3QgaXNFeGlzdElkeCA9IHRoaXMudGFiTGlzdC5maW5kSW5kZXgoXHJcbiAgICAgIChlbGUpID0+XHJcbiAgICAgICAgdGhpcy51cmxXaXRob3V0UXVlcnkoZWxlLnVybCkgPT09IHRoaXMudXJsV2l0aG91dFF1ZXJ5KHRoaXMucm91dGVyLnVybClcclxuICAgICk7XHJcbiAgICBpZiAoaXNFeGlzdElkeCAhPT0gLTEpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFRhYiA9IGlzRXhpc3RJZHg7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMucm91dGVyLmV2ZW50c1xyXG4gICAgICAgIC5waXBlKGZpbHRlcigoZXZlbnQpID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBuYXZpZ2F0aW9uID0gdGhpcy5yb3V0ZXIuZ2V0Q3VycmVudE5hdmlnYXRpb24oKTsgLy8g6I635Y+W5b2T5YmN5a+86IiqXHJcbiAgICAgICAgICBpZiAobmF2aWdhdGlvbikge1xyXG4gICAgICAgICAgICBjb25zdCB0b29sdGlwRWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLmUtcG9wdXAtb3BlblwiKTtcclxuICAgICAgICAgICAgLy8g5Yig6ZmkdG9vbHRpcHNcclxuICAgICAgICAgICAgdG9vbHRpcEVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBodG1sRWxlbWVudCA9IGVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgaHRtbEVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSBuYXZpZ2F0aW9uLmV4dHJhcy5zdGF0ZTsgLy8g6I635Y+W5Lyg6YCS55qEIHN0YXRlXHJcbiAgICAgICAgICAgIGNvbnN0IHNraXBMb2NhdGlvbkNoYW5nZSA9IG5hdmlnYXRpb24uZXh0cmFzLnNraXBMb2NhdGlvbkNoYW5nZTsgLy8g6I635Y+W5piv5ZCm6Lez6L+HIGxvY2F0aW9uIGNoYW5nZVxyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Um91dGUgPSB0aGlzLnJvdXRlci5yb3V0ZXJTdGF0ZS5yb290LmZpcnN0Q2hpbGQ7XHJcbiAgICAgICAgICAgIGNvbnN0IG5hdmlnYXRpb25JbmZvID0gSlNPTi5wYXJzZShcclxuICAgICAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwibmF2aWdhdGlvbkluZm9cIikgfHwgXCJ7fVwiXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGxldCB0aXRsZSA9XHJcbiAgICAgICAgICAgICAgKHN0YXRlICYmIHN0YXRlW1widGl0bGVcIl0pIHx8XHJcbiAgICAgICAgICAgICAgbmF2aWdhdGlvbkluZm8udGl0bGUgfHxcclxuICAgICAgICAgICAgICBuYXZpZ2F0aW9uSW5mby5zdWJUaXRsZSB8fFxyXG4gICAgICAgICAgICAgIG5hdmlnYXRpb25JbmZvLm5hbWU7XHJcblxyXG4gICAgICAgICAgICBsZXQgbm9SZXVzZWQgPSAoc3RhdGUgJiYgc3RhdGVbXCJub1JldXNlZFwiXSkgfHwgZmFsc2U7IC8vIOW9k+WJjXRhYuS4jeWkjeeUqO+8jOaWsOW8gOS4gOS4qnRhYizlvZPmnInlt7Lnu4/lrZjlnKjnmoR0YWLml7blgJnkuZ/mmK/mlrDlvIBcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRSb3V0ZSAmJiAhc2tpcExvY2F0aW9uQ2hhbmdlKSB7XHJcbiAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5ub0dlbmVyYXRlVGFiVXJscy5pbmNsdWRlcyhcclxuICAgICAgICAgICAgICAgICAgdGhpcy51cmxXaXRob3V0UXVlcnkodGhpcy5yb3V0ZXIudXJsKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuOyAvLyDmjpLpmaTkuI3nlJ/miJB0YWLnmoR1cmxcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXRUYWIoXHJcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci51cmwsXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50Um91dGUuc25hcHNob3Qucm91dGVDb25maWcucGF0aCxcclxuICAgICAgICAgICAgICAgIHRpdGxlLFxyXG4gICAgICAgICAgICAgICAgbm9SZXVzZWRcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnNldEVsbGlwc2lzVGl0bGUoKTtcclxuICAgIH0sIDUwKTtcclxuICB9XHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLnRhYkxpc3QgPSBbXTsgLy8g5riF56m6IHRhYiDliJfooahcclxuICAgIHRoaXMuc2VsZWN0ZWRUYWIgPSAwOyAvLyDph43nva7pgInkuK3nmoQgdGFiIOe0ouW8lVxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goKHN1YikgPT4gc3ViLnVuc3Vic2NyaWJlKCkpO1xyXG4gIH1cclxuXHJcbiAgc2V0RWxsaXBzaXNUaXRsZSh0aXRsZT8pIHtcclxuICAgIHRoaXMudGV4dEdhcCA9IHRoaXMuR0FQX05PUk1BTDtcclxuICAgIGlmICh0aGlzLnNjcmVlbldpZHRoIDw9IDExMDApIHtcclxuICAgICAgdGhpcy50ZXh0R2FwID0gdGhpcy5HQVBfU01BTEw7XHJcbiAgICB9XHJcbiAgICBsZXQgeyBhbGxXaWR0aCwgbGVmdFdpZHRoLCByaWdodFdpZHRoIH0gPSB0aGlzLmNhbGNUYWJXaWR0aCgpO1xyXG4gICAgbGV0IHdpZHRoID0gTWF0aC5mbG9vcihcclxuICAgICAgKGFsbFdpZHRoIC0gcmlnaHRXaWR0aCkgLyAodGhpcy50YWJMaXN0ICYmIHRoaXMudGFiTGlzdC5sZW5ndGgpXHJcbiAgICApO1xyXG4gICAgaWYgKHRpdGxlKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNmLnNldE1pZGRsZUVsbGlwc2lzKFxyXG4gICAgICAgIHRpdGxlLFxyXG4gICAgICAgIHdpZHRoID4gdGhpcy5UQUJfV0lEVEhcclxuICAgICAgICAgID8gdGhpcy5UQUJfV0lEVEggLSB0aGlzLnRleHRHYXBcclxuICAgICAgICAgIDogd2lkdGggLSB0aGlzLnRleHRHYXAsXHJcbiAgICAgICAgMTJcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudGFiTGlzdC5mb3JFYWNoKChlbGUsIGlkeCkgPT4ge1xyXG4gICAgICAgIGVsZS5kaXNwbGF5VGl0bGUgPSB0aGlzLmNmLnNldE1pZGRsZUVsbGlwc2lzKFxyXG4gICAgICAgICAgZWxlLnRpdGxlLFxyXG4gICAgICAgICAgd2lkdGggPiB0aGlzLlRBQl9XSURUSFxyXG4gICAgICAgICAgICA/IHRoaXMuVEFCX1dJRFRIIC0gdGhpcy50ZXh0R2FwXHJcbiAgICAgICAgICAgIDogd2lkdGggLSB0aGlzLnRleHRHYXAsXHJcbiAgICAgICAgICAxMlxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBjYWxjVGFiV2lkdGgoKSB7XHJcbiAgICBjb25zdCB3cmFwID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5ycy1tdWx0aS10YWJcIik7XHJcbiAgICBjb25zdCB1bEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLnJzLW11bHRpLXRhYiA+IHVsXCIpO1xyXG4gICAgY29uc3QgcmVmcmVzaFRhYkRpdiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIucnMtbXVsdGktdGFiIC5yZWZyZXNoLXRhYlwiKTtcclxuICAgIGxldCBhbGxXaWR0aDtcclxuICAgIGxldCBsZWZ0V2lkdGg7XHJcbiAgICBsZXQgcmlnaHRXaWR0aDtcclxuICAgIGlmICh3cmFwICYmIHVsRWxlbWVudCkge1xyXG4gICAgICAvLyDojrflj5blhYPntKDnmoTkvY3nva7kv6Hmga9cclxuICAgICAgY29uc3Qgd3JhcFJlY3QgPSB3cmFwLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICBjb25zdCB1bFJlY3QgPSB1bEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgIGNvbnN0IHJlZnJlc2hUYWJSZWN0ID1cclxuICAgICAgICByZWZyZXNoVGFiRGl2ICYmIHJlZnJlc2hUYWJEaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgIGFsbFdpZHRoID0gd3JhcFJlY3Qud2lkdGg7XHJcbiAgICAgIGxlZnRXaWR0aCA9IHVsUmVjdC53aWR0aDtcclxuICAgICAgcmlnaHRXaWR0aCA9IChyZWZyZXNoVGFiUmVjdCAmJiByZWZyZXNoVGFiUmVjdC53aWR0aCkgfHwgMTAwO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgYWxsV2lkdGgsXHJcbiAgICAgIGxlZnRXaWR0aCxcclxuICAgICAgcmlnaHRXaWR0aCxcclxuICAgIH07XHJcbiAgfVxyXG4gIGluaXRUYWIoKSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhcInRoaXMuZmxhdHRlbk1lbnVcIiwgdGhpcy5mbGF0dGVuTWVudSk7XHJcbiAgICBsZXQgVGFiQ2FjaGUgPSBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJUYWJDYWNoZVwiKSk7XHJcbiAgICB0aGlzLnRhYkxpc3QgPSBUYWJDYWNoZSB8fCBbXTtcclxuICAgIGlmICh0aGlzLnRhYkxpc3QubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIGNvbnN0IHRpdGxlID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcImZpcnN0VGFiVGl0bGVcIik7XHJcbiAgICAgIGlmICh0aXRsZSkge1xyXG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oXCJmaXJzdFRhYlRpdGxlXCIpO1xyXG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMucm91dGVyLnVybDtcclxuICAgICAgICB0aGlzLmFkZFRhYih1cmwsIHRpdGxlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBwdXJlVXJsID0gdGhpcy51cmxXaXRob3V0UXVlcnkodGhpcy5yb3V0ZXIudXJsKTtcclxuICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLmZsYXR0ZW5NZW51LmZpbmQoKGVsZSkgPT4gZWxlLnVybCA9PT0gcHVyZVVybCk7XHJcbiAgICAgICAgaWYgKHRhcmdldCkge1xyXG4gICAgICAgICAgaWYgKHRhcmdldC51cmwgIT09IHRoaXMuZGVmYXVsdFRhYlVybCkge1xyXG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0VGFiID0gdGhpcy5mbGF0dGVuTWVudS5maW5kKFxyXG4gICAgICAgICAgICAgIChlbGUpID0+IGVsZS51cmwgPT09IHRoaXMuZGVmYXVsdFRhYlVybFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLnRhYkxpc3QucHVzaCh7XHJcbiAgICAgICAgICAgICAgdXJsOiBkZWZhdWx0VGFiLnVybCxcclxuICAgICAgICAgICAgICB0aXRsZTogZGVmYXVsdFRhYi5sYWJlbCxcclxuICAgICAgICAgICAgICBkaXNwbGF5VGl0bGU6IGRlZmF1bHRUYWIubGFiZWwsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5hZGRUYWIodGFyZ2V0LnVybCwgdGFyZ2V0LmxhYmVsKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsb3NlVGFiKGlkeCwgbm9DaGFuZ2U/KSB7XHJcbiAgICBjb25zdCB0YWIgPSB0aGlzLnRhYkxpc3RbaWR4XTtcclxuICAgIHRoaXMudGFiTGlzdCA9IHRoaXMudGFiTGlzdC5maWx0ZXIoKGVsZSkgPT4gZWxlLnVybCAhPT0gdGFiLnVybCk7XHJcbiAgICB0aGlzLmNsZWFyQ2FjaGUodGFiLnVybCk7XHJcbiAgICBpZiAoIW5vQ2hhbmdlICYmIHRoaXMuc2VsZWN0ZWRUYWIgPT09IGlkeCkge1xyXG4gICAgICBjb25zdCB0YXJnZXRJZHggPSBNYXRoLm1heCgwLCBpZHggLSAxKTtcclxuICAgICAgdGhpcy5jaGFuZ2VUYWIodGhpcy50YWJMaXN0W3RhcmdldElkeF0sIHRhcmdldElkeCk7XHJcbiAgICB9XHJcbiAgICBpZiAoaWR4IDwgdGhpcy5zZWxlY3RlZFRhYikge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVGFiID0gdGhpcy5zZWxlY3RlZFRhYiAtIDE7IC8vIOWmguaenOWFs+mXreeahHRhYuWcqOW9k+WJjemAieS4reeahHRhYuS5i+WJje+8jOmAieS4rXRhYue0ouW8leWHjzFcclxuICAgIH1cclxuICAgIHRoaXMuc2V0RWxsaXBzaXNUaXRsZSgpO1xyXG4gICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShcIlRhYkNhY2hlXCIsIEpTT04uc3RyaW5naWZ5KHRoaXMudGFiTGlzdCkpO1xyXG4gICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VUYWIodGFiLCBpZHgpIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodGFiLnVybCk7XHJcbiAgICBpZiAodGFiLm5hdmlnYXRpb25JbmZvKSB7XHJcbiAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oXHJcbiAgICAgICAgXCJuYXZpZ2F0aW9uSW5mb1wiLFxyXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHRhYi5uYXZpZ2F0aW9uSW5mbylcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmICh0YWIuZnJvbUluZm8pIHtcclxuICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShcImZyb21JbmZvXCIsIEpTT04uc3RyaW5naWZ5KHRhYi5mcm9tSW5mbykpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRhYi5wZXJtaXNzaW9ucykge1xyXG4gICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKFwicGVybWlzc2lvbnNcIiwgSlNPTi5zdHJpbmdpZnkodGFiLnBlcm1pc3Npb25zKSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlbGVjdGVkVGFiID0gaWR4O1xyXG4gICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBhZGRUYWIodXJsLCB0aXRsZSkge1xyXG4gICAgaWYgKHRoaXMudGFiTGlzdC5sZW5ndGggPj0gdGhpcy5tYXhUYWJzKSB7XHJcbiAgICAgIGNvbnN0IHNlY29uZFRhYiA9IHRoaXMudGFiTGlzdFsxXTtcclxuICAgICAgdGhpcy50YWJMaXN0ID0gdGhpcy50YWJMaXN0LmZpbHRlcigoZWxlKSA9PiBlbGUudXJsICE9PSBzZWNvbmRUYWIudXJsKTtcclxuICAgICAgdGhpcy5jbGVhckNhY2hlKHNlY29uZFRhYi51cmwpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbG9jYWxQZXJtaXNzaW9ucyA9XHJcbiAgICAgIHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJwZXJtaXNzaW9uc1wiKSB8fFxyXG4gICAgICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcInBlcm1pc3Npb25zXCIpO1xyXG4gICAgY29uc3QgbmF2aWdhdGlvbkluZm8gPSBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJuYXZpZ2F0aW9uSW5mb1wiKSk7XHJcbiAgICBjb25zdCBmcm9tSW5mbyA9IEpTT04ucGFyc2Uoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcImZyb21JbmZvXCIpKTtcclxuICAgIGNvbnN0IHBlcm1pc3Npb25zID0gSlNPTi5wYXJzZShsb2NhbFBlcm1pc3Npb25zKTtcclxuXHJcbiAgICB0aGlzLnRhYkxpc3QucHVzaCh7XHJcbiAgICAgIHVybDogdXJsLFxyXG4gICAgICB0aXRsZTogdGl0bGUgfHwgXCJkZWZhdWx0XCIsXHJcbiAgICAgIGRpc3BsYXlUaXRsZTogdGl0bGUsXHJcbiAgICAgIG5hdmlnYXRpb25JbmZvOiBuYXZpZ2F0aW9uSW5mbyxcclxuICAgICAgcGVybWlzc2lvbnM6IHBlcm1pc3Npb25zLFxyXG4gICAgICBmcm9tSW5mbzogZnJvbUluZm8sXHJcbiAgICB9KTtcclxuICAgIHRoaXMuc2VsZWN0ZWRUYWIgPSB0aGlzLnRhYkxpc3QubGVuZ3RoIC0gMTtcclxuICAgIHRoaXMuc2V0RWxsaXBzaXNUaXRsZSgpO1xyXG4gICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShcIlRhYkNhY2hlXCIsIEpTT04uc3RyaW5naWZ5KHRoaXMudGFiTGlzdCkpO1xyXG4gICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0VGFiKHVybCwgcHVyZVVybCwgdGl0bGUsIG5vUmV1c2VkKSB7XHJcbiAgICBjb25zdCBpc0V4aXN0SWR4ID0gdGhpcy50YWJMaXN0LmZpbmRJbmRleChcclxuICAgICAgKGVsZSkgPT4gdGhpcy51cmxXaXRob3V0UXVlcnkoZWxlLnVybCkgPT09IHRoaXMudXJsV2l0aG91dFF1ZXJ5KHVybClcclxuICAgICk7XHJcbiAgICBpZiAoaXNFeGlzdElkeCA9PT0gLTEpIHtcclxuICAgICAgY29uc3Qgc2luZ2xlSWR4ID0gdGhpcy5zaW5nbGVSZXVzZVVybHMuZmluZEluZGV4KFxyXG4gICAgICAgIChlbGUpID0+IGVsZSA9PT0gcHVyZVVybFxyXG4gICAgICApO1xyXG4gICAgICBpZiAoc2luZ2xlSWR4ICE9PSAtMSkge1xyXG4gICAgICAgIHRoaXMudGFiTGlzdCA9IHRoaXMudGFiTGlzdC5maWx0ZXIoXHJcbiAgICAgICAgICAoZWxlKSA9PiAhZWxlLnVybC5pbmNsdWRlcyh0aGlzLnNpbmdsZVJldXNlVXJsc1tzaW5nbGVJZHhdKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5rZWVwQWxpdmUuY2xlYXJDYWNoZSh0aGlzLnVybFdpdGhvdXRRdWVyeSh1cmwpKTtcclxuICAgICAgICB0aGlzLmRyYXdlci5kZWxldGVDYWNoZSh1cmwpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuYWRkVGFiKHVybCwgdGl0bGUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgdGFyZ2V0VGFiVXJsID0gdGhpcy50YWJMaXN0W2lzRXhpc3RJZHhdLnVybDtcclxuICAgICAgaWYgKHRhcmdldFRhYlVybCAhPT0gdXJsIHx8IG5vUmV1c2VkKSB7XHJcbiAgICAgICAgLy8g5b2T57yT5a2Y5LiA6Ie05pe25YCZ77yM5L2G5pivdXJs5LiN5LiA6Ie077yM6YeN5paw5oyJ54Wn5paw55qEdXJs55Sf5oiQdGFiXHJcbiAgICAgICAgdGhpcy5jbG9zZVRhYihpc0V4aXN0SWR4LCB0cnVlKTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuYWRkVGFiKHVybCwgdGl0bGUpO1xyXG4gICAgICAgIH0sIDMwKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmNoYW5nZVRhYih0aGlzLnRhYkxpc3RbaXNFeGlzdElkeF0sIGlzRXhpc3RJZHgpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25UYWJEcm9wKGV2ZW50OiBDZGtEcmFnRHJvcDxzdHJpbmdbXT4pIHtcclxuICAgIGNvbnN0IHsgcHJldmlvdXNJbmRleCwgY3VycmVudEluZGV4IH0gPSBldmVudDtcclxuICAgIGNvbnNvbGUubG9nKFwicHJldmlvdXNJbmRleFwiLCBwcmV2aW91c0luZGV4LCBcImN1cnJlbnRJbmRleFwiLCBjdXJyZW50SW5kZXgpO1xyXG4gICAgaWYgKHByZXZpb3VzSW5kZXggPT09IDAgfHwgY3VycmVudEluZGV4ID09PSAwKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIG1vdmVJdGVtSW5BcnJheSh0aGlzLnRhYkxpc3QsIGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCk7XHJcbiAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKFwiVGFiQ2FjaGVcIiwgSlNPTi5zdHJpbmdpZnkodGhpcy50YWJMaXN0KSk7XHJcbiAgfVxyXG5cclxuICB0aW1lciA9IG51bGw7XHJcbiAgcmVmcmVzaFRhYigpIHtcclxuICAgIGNvbnN0IGxvYWRpbmdJY29uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJsb2FkaW5nSWNvblwiKTtcclxuICAgIGxvYWRpbmdJY29uLmNsYXNzTGlzdC5hZGQoXCJyZWZyZXNoLXRhYi1sb2FkaW5nXCIpO1xyXG4gICAgaWYgKHRoaXMudGltZXIpIHtcclxuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnRpbWVyKTtcclxuICAgIH1cclxuICAgIC8vIOaooeaLn+WKoOi9vei/h+eoi++8jDHnp5LlkI7np7vpmaTliqjnlLtcclxuICAgIHRoaXMudGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgbG9hZGluZ0ljb24uY2xhc3NMaXN0LnJlbW92ZShcInJlZnJlc2gtdGFiLWxvYWRpbmdcIik7XHJcbiAgICAgIHRoaXMudGltZXIgPSBudWxsO1xyXG4gICAgfSwgMTUwMCk7XHJcbiAgICAvLyB0aGlzLmtlZXBBbGl2ZS5jbGVhckNhY2hlKHRoaXMudGFiTGlzdFt0aGlzLnNlbGVjdGVkVGFiXS51cmwpO1xyXG4gICAgLy8gdGhpcy5kcmF3ZXIuZGVsZXRlQ2FjaGUodGhpcy50YWJMaXN0W3RoaXMuc2VsZWN0ZWRUYWJdLnVybCk7XHJcbiAgICBjb25zdCBjdXJyZW50VXJsID0gdGhpcy5yb3V0ZXIudXJsOyAvLyDojrflj5blvZPliY0gVVJMXHJcbiAgICB0aGlzLm9uUmVmcmVzaFRhYi5lbWl0KGN1cnJlbnRVcmwpO1xyXG4gICAgLy8gdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChcIi9cIiwgeyBza2lwTG9jYXRpb25DaGFuZ2U6IHRydWUgfSkudGhlbigoKSA9PiB7XHJcbiAgICAvLyAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoY3VycmVudFVybCk7IC8vIOmHjeaWsOWvvOiIquWIsOW9k+WJjSBVUkxcclxuICAgIC8vIH0pO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJDYWNoZSh1cmwpIHtcclxuICAgIHRoaXMua2VlcEFsaXZlLmNsZWFyQ2FjaGUodGhpcy51cmxXaXRob3V0UXVlcnkodXJsKSk7IC8vIOiwg+eUqOiHquWumuS5ieetlueVpeeahOa4hemZpOe8k+WtmOaWueazlVxyXG4gICAgdGhpcy5kcmF3ZXIuZGVsZXRlQ2FjaGUodXJsKTtcclxuICB9XHJcbiAgY2xlYW5BbGxDYWNoZSgpIHtcclxuICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oXCJUYWJDYWNoZVwiKTsgLy8g5riF6Zmk57yT5a2YXHJcbiAgICB0aGlzLnRhYkxpc3QgPSBbXTsgLy8g5riF56m6IHRhYiDliJfooahcclxuICAgIHRoaXMuc2VsZWN0ZWRUYWIgPSAwOyAvLyDph43nva7pgInkuK3nmoQgdGFiIOe0ouW8lVxyXG4gICAgdGhpcy5rZWVwQWxpdmUuY2xlYXJBbGxDYWNoZSgpOyAvLyDosIPnlKjoh6rlrprkuYnnrZbnlaXnmoTmuIXpmaTnvJPlrZjmlrnms5VcclxuICB9XHJcbiAgcHJpdmF0ZSB1cmxXaXRob3V0UXVlcnkodXJsKSB7XHJcbiAgICByZXR1cm4gdXJsLnNwbGl0KFwiP1wiKVswXTtcclxuICB9XHJcbn1cclxuIl19
592
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vcmFpc2UtY29tbW9uLWxpYi8iLCJzb3VyY2VzIjpbImxpYi9sYXlvdXQvbXVsdGktdGFiL2luZGV4LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLGNBQWMsRUFDZCxhQUFhLEVBQ2IsTUFBTSxHQUVQLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXhDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUU3RCxPQUFPLEVBQWUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEU7SUFNRSwyQkFDUyxNQUFjLEVBQ2QsRUFBeUIsRUFDekIsY0FBOEIsRUFDN0IsR0FBc0IsRUFDdEIsTUFBcUIsRUFDckIsa0JBQXNDO1FBTHZDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxPQUFFLEdBQUYsRUFBRSxDQUF1QjtRQUN6QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDN0IsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUNyQix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBS3ZDLG9CQUFlLEdBQWEsRUFBRSxDQUFDLENBQUMsWUFBWTs7UUFDNUMsc0JBQWlCLEdBQWEsRUFBRSxDQUFDLENBQUMsWUFBWTs7UUFDOUMsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFDakIsa0JBQWEs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VmQsaUJBQWlCO2dCQW1CVixhQUFhO2dCQUZiLGtCQUFrQjs7O2tDQXNCeEIsS0FBSztvQ0FDTCxLQUFLOzhCQUNMLEtBQUs7Z0NBQ0wsS0FBSzsrQkFFTCxNQUFNOzJCQWVOLFlBQVksU0FBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUM7O0lBMFIzQyx3QkFBQztDQUFBLEFBL1RELElBK1RDO1NBMVRZLGlCQUFpQjs7O0lBVzVCLHNDQUE0Qjs7SUFDNUIsNENBQXdDOztJQUN4Qyw4Q0FBMEM7O0lBQzFDLHdDQUEwQjs7SUFDMUIsMENBQTRCOztJQUU1Qix5Q0FBNEM7Ozs7O0lBRTVDLDBDQUEyQzs7SUFDM0Msc0NBQWdCOztJQUNoQix1Q0FBZ0I7O0lBQ2hCLHNDQUFlOztJQUNmLG9DQUFROztJQUNSLGdDQUFrQjs7SUFDbEIsbUNBQVk7O0lBQ1osb0NBQWE7O0lBQ2Isd0NBQXdCOztJQUN4QixvQ0FBcUI7O0lBQ3JCLHdDQUF3Qzs7SUFDeEMsd0NBQVk7O0lBMFBaLGtDQUFhOztJQXRSWCxtQ0FBcUI7O0lBQ3JCLCtCQUFnQzs7SUFDaEMsMkNBQXFDOzs7OztJQUNyQyxnQ0FBOEI7Ozs7O0lBQzlCLG1DQUE2Qjs7Ozs7SUFDN0IsK0NBQThDIiwic291cmNlc0NvbnRlbnQiOlsiLy8g57uE5Lu257G7XHJcbmltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBJbnB1dCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge1xyXG4gIEFjdGl2YXRlZFJvdXRlLFxyXG4gIE5hdmlnYXRpb25FbmQsXHJcbiAgUm91dGVyLFxyXG4gIFJvdXRlck91dGxldCxcclxufSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBSb3V0ZVJldXNlU3RyYXRlZ3kgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbmltcG9ydCB7IENvbW1vbkZ1bmN0aW9uU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlL2NvbW1vbi1mdW5jdGlvbi5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IERyYXdlclNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZS9kcmF3ZXIuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBLZWVwQWxpdmVTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2Uva2VlcC1hbGl2ZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IENka0RyYWdEcm9wLCBtb3ZlSXRlbUluQXJyYXkgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL2RyYWctZHJvcFwiO1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJycy1tdWx0aS10YWJcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL2luZGV4LmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL2luZGV4LmNvbXBvbmVudC5zY3NzXCJdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTXVsdGlUYWJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwdWJsaWMgY2Y6IENvbW1vbkZ1bmN0aW9uU2VydmljZSxcclxuICAgIHB1YmxpYyBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIGRyYXdlcjogRHJhd2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgcm91dGVSZXVzZVN0cmF0ZWd5OiBSb3V0ZVJldXNlU3RyYXRlZ3lcclxuICApIHtcclxuICAgIHRoaXMua2VlcEFsaXZlID0gdGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kgYXMgS2VlcEFsaXZlU2VydmljZTtcclxuICB9XHJcbiAga2VlcEFsaXZlOiBLZWVwQWxpdmVTZXJ2aWNlO1xyXG4gIEBJbnB1dCgpIHNpbmdsZVJldXNlVXJsczogc3RyaW5nW10gPSBbXTsgLy/lj6rog73ljZXkuKrnvJPlrZjnmoR1cmxcclxuICBASW5wdXQoKSBub0dlbmVyYXRlVGFiVXJsczogc3RyaW5nW10gPSBbXTsgLy/kuI3nlJ/miJB0YWLnmoR1cmxcclxuICBASW5wdXQoKSBmbGF0dGVuTWVudSA9IFtdO1xyXG4gIEBJbnB1dCgpIGRlZmF1bHRUYWJVcmwgPSBcIlwiO1xyXG5cclxuICBAT3V0cHV0KCkgb25SZWZyZXNoVGFiID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcbiAgVEFCX1dJRFRIID0gMTY0O1xyXG4gIEdBUF9OT1JNQUwgPSA1NDtcclxuICBHQVBfU01BTEwgPSAzMDtcclxuICB0ZXh0R2FwOyAvLyDmlofmnKzkuI7ovrnmoYbnmoTmgLvpl7Tot51cclxuICBmb286IFJvdXRlck91dGxldDtcclxuICBjb21SZWY6IGFueTtcclxuICB0YWJMaXN0ID0gW107XHJcbiAgc2VsZWN0ZWRUYWI6IG51bWJlciA9IDA7XHJcbiAgbWF4VGFiczogbnVtYmVyID0gMTA7XHJcbiAgc2NyZWVuV2lkdGg6IG51bWJlciA9IHdpbmRvdy5pbm5lcldpZHRoOyAvLyDliJ3lp4vljJblsY/luZXlrr3luqZcclxuICB0cmFuc2xhdGlvbjtcclxuXHJcbiAgQEhvc3RMaXN0ZW5lcihcIndpbmRvdzpyZXNpemVcIiwgW1wiJGV2ZW50XCJdKVxyXG4gIG9uUmVzaXplKGV2ZW50KSB7XHJcbiAgICB0aGlzLnNjcmVlbldpZHRoID0gd2luZG93LmlubmVyV2lkdGg7IC8vIOabtOaWsOWxj+W5leWuveW6plxyXG4gICAgLy8gdGhpcy5zZXRFbGxpcHNpc1RpdGxlKCk7IOWcqOacgOWklumdouWuueWZqOiwg+eUqFxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnRyYW5zbGF0aW9uID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcInRyYW5zbGF0aW9uXCIpKTtcclxuXHJcbiAgICB0aGlzLmluaXRUYWIoKTtcclxuICAgIC8vIOino+WGs+WIt+aWsOmhtemdouWQju+8jOmAieS4reeahCB0YWIg5Lii5aSx6Zeu6aKYXHJcbiAgICBjb25zdCBpc0V4aXN0SWR4ID0gdGhpcy50YWJMaXN0LmZpbmRJbmRleChcclxuICAgICAgKGVsZSkgPT5cclxuICAgICAgICB0aGlzLnVybFdpdGhvdXRRdWVyeShlbGUudXJsKSA9PT0gdGhpcy51cmxXaXRob3V0UXVlcnkodGhpcy5yb3V0ZXIudXJsKVxyXG4gICAgKTtcclxuICAgIGlmIChpc0V4aXN0SWR4ICE9PSAtMSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVGFiID0gaXNFeGlzdElkeDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5yb3V0ZXIuZXZlbnRzXHJcbiAgICAgICAgLnBpcGUoZmlsdGVyKChldmVudCkgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSlcclxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgIGNvbnN0IG5hdmlnYXRpb24gPSB0aGlzLnJvdXRlci5nZXRDdXJyZW50TmF2aWdhdGlvbigpOyAvLyDojrflj5blvZPliY3lr7zoiKpcclxuICAgICAgICAgIGlmIChuYXZpZ2F0aW9uKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRvb2x0aXBFbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuZS1wb3B1cC1vcGVuXCIpO1xyXG4gICAgICAgICAgICAvLyDliKDpmaR0b29sdGlwc1xyXG4gICAgICAgICAgICB0b29sdGlwRWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGh0bWxFbGVtZW50ID0gZWxlbWVudCBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgICAgICBodG1sRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBjb25zdCBzdGF0ZSA9IG5hdmlnYXRpb24uZXh0cmFzLnN0YXRlOyAvLyDojrflj5bkvKDpgJLnmoQgc3RhdGVcclxuICAgICAgICAgICAgY29uc3Qgc2tpcExvY2F0aW9uQ2hhbmdlID0gbmF2aWdhdGlvbi5leHRyYXMuc2tpcExvY2F0aW9uQ2hhbmdlOyAvLyDojrflj5bmmK/lkKbot7Pov4cgbG9jYXRpb24gY2hhbmdlXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRSb3V0ZSA9IHRoaXMucm91dGVyLnJvdXRlclN0YXRlLnJvb3QuZmlyc3RDaGlsZDtcclxuICAgICAgICAgICAgY29uc3QgbmF2aWdhdGlvbkluZm8gPSBKU09OLnBhcnNlKFxyXG4gICAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJuYXZpZ2F0aW9uSW5mb1wiKSB8fCBcInt9XCJcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgbGV0IHRpdGxlID1cclxuICAgICAgICAgICAgICAoc3RhdGUgJiYgc3RhdGVbXCJ0aXRsZVwiXSkgfHxcclxuICAgICAgICAgICAgICBuYXZpZ2F0aW9uSW5mby50aXRsZSB8fFxyXG4gICAgICAgICAgICAgIG5hdmlnYXRpb25JbmZvLnN1YlRpdGxlIHx8XHJcbiAgICAgICAgICAgICAgbmF2aWdhdGlvbkluZm8ubmFtZTtcclxuXHJcbiAgICAgICAgICAgIGxldCBub1JldXNlZCA9IChzdGF0ZSAmJiBzdGF0ZVtcIm5vUmV1c2VkXCJdKSB8fCBmYWxzZTsgLy8g5b2T5YmNdGFi5LiN5aSN55So77yM5paw5byA5LiA5LiqdGFiLOW9k+acieW3sue7j+WtmOWcqOeahHRhYuaXtuWAmeS5n+aYr+aWsOW8gFxyXG4gICAgICAgICAgICBpZiAoY3VycmVudFJvdXRlICYmICFza2lwTG9jYXRpb25DaGFuZ2UpIHtcclxuICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vR2VuZXJhdGVUYWJVcmxzLmluY2x1ZGVzKFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnVybFdpdGhvdXRRdWVyeSh0aGlzLnJvdXRlci51cmwpXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47IC8vIOaOkumZpOS4jeeUn+aIkHRhYueahHVybFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLnNldFRhYihcclxuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLnVybCxcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRSb3V0ZS5zbmFwc2hvdC5yb3V0ZUNvbmZpZy5wYXRoLFxyXG4gICAgICAgICAgICAgICAgdGl0bGUsXHJcbiAgICAgICAgICAgICAgICBub1JldXNlZFxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2V0RWxsaXBzaXNUaXRsZSgpO1xyXG4gICAgfSwgNTApO1xyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMudGFiTGlzdCA9IFtdOyAvLyDmuIXnqbogdGFiIOWIl+ihqFxyXG4gICAgdGhpcy5zZWxlY3RlZFRhYiA9IDA7IC8vIOmHjee9rumAieS4reeahCB0YWIg57Si5byVXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaCgoc3ViKSA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XHJcbiAgfVxyXG5cclxuICBzZXRFbGxpcHNpc1RpdGxlKCkge1xyXG4gICAgdGhpcy50ZXh0R2FwID0gdGhpcy5HQVBfTk9STUFMO1xyXG4gICAgaWYgKHRoaXMuc2NyZWVuV2lkdGggPD0gMTEwMCkge1xyXG4gICAgICB0aGlzLnRleHRHYXAgPSB0aGlzLkdBUF9TTUFMTDtcclxuICAgIH1cclxuICAgIGxldCB7IGFsbFdpZHRoLCBsZWZ0V2lkdGgsIHJpZ2h0V2lkdGggfSA9IHRoaXMuY2FsY1RhYldpZHRoKCk7XHJcbiAgICBsZXQgd2lkdGggPSBNYXRoLmZsb29yKFxyXG4gICAgICAoYWxsV2lkdGggLSByaWdodFdpZHRoKSAvICh0aGlzLnRhYkxpc3QgJiYgdGhpcy50YWJMaXN0Lmxlbmd0aClcclxuICAgICk7XHJcbiAgICB0aGlzLnRhYkxpc3QuZm9yRWFjaCgoZWxlLCBpZHgpID0+IHtcclxuICAgICAgZWxlLmRpc3BsYXlUaXRsZSA9IHRoaXMuY2Yuc2V0TWlkZGxlRWxsaXBzaXMoXHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGlvbltlbGUudGl0bGVdIHx8IGVsZS50aXRsZSxcclxuICAgICAgICB3aWR0aCA+IHRoaXMuVEFCX1dJRFRIXHJcbiAgICAgICAgICA/IHRoaXMuVEFCX1dJRFRIIC0gdGhpcy50ZXh0R2FwXHJcbiAgICAgICAgICA6IHdpZHRoIC0gdGhpcy50ZXh0R2FwLFxyXG4gICAgICAgIDEyXHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgY2FsY1RhYldpZHRoKCkge1xyXG4gICAgY29uc3Qgd3JhcCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIucnMtbXVsdGktdGFiXCIpO1xyXG4gICAgY29uc3QgdWxFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5ycy1tdWx0aS10YWIgPiB1bFwiKTtcclxuICAgIGNvbnN0IHJlZnJlc2hUYWJEaXYgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLnJzLW11bHRpLXRhYiAucmVmcmVzaC10YWJcIik7XHJcbiAgICBsZXQgYWxsV2lkdGg7XHJcbiAgICBsZXQgbGVmdFdpZHRoO1xyXG4gICAgbGV0IHJpZ2h0V2lkdGg7XHJcbiAgICBpZiAod3JhcCAmJiB1bEVsZW1lbnQpIHtcclxuICAgICAgLy8g6I635Y+W5YWD57Sg55qE5L2N572u5L+h5oGvXHJcbiAgICAgIGNvbnN0IHdyYXBSZWN0ID0gd3JhcC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgY29uc3QgdWxSZWN0ID0gdWxFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICBjb25zdCByZWZyZXNoVGFiUmVjdCA9XHJcbiAgICAgICAgcmVmcmVzaFRhYkRpdiAmJiByZWZyZXNoVGFiRGl2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICBhbGxXaWR0aCA9IHdyYXBSZWN0LndpZHRoO1xyXG4gICAgICBsZWZ0V2lkdGggPSB1bFJlY3Qud2lkdGg7XHJcbiAgICAgIHJpZ2h0V2lkdGggPSAocmVmcmVzaFRhYlJlY3QgJiYgcmVmcmVzaFRhYlJlY3Qud2lkdGgpIHx8IDEwMDtcclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGFsbFdpZHRoLFxyXG4gICAgICBsZWZ0V2lkdGgsXHJcbiAgICAgIHJpZ2h0V2lkdGgsXHJcbiAgICB9O1xyXG4gIH1cclxuICBpbml0VGFiKCkge1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJ0aGlzLmZsYXR0ZW5NZW51XCIsIHRoaXMuZmxhdHRlbk1lbnUpO1xyXG4gICAgbGV0IFRhYkNhY2hlID0gSlNPTi5wYXJzZShzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwiVGFiQ2FjaGVcIikpO1xyXG4gICAgdGhpcy50YWJMaXN0ID0gVGFiQ2FjaGUgfHwgW107XHJcbiAgICBpZiAodGhpcy50YWJMaXN0Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBjb25zdCBwdXJlVXJsID0gdGhpcy51cmxXaXRob3V0UXVlcnkodGhpcy5yb3V0ZXIudXJsKTtcclxuICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5mbGF0dGVuTWVudS5maW5kKChlbGUpID0+IGVsZS51cmwgPT09IHB1cmVVcmwpO1xyXG4gICAgICBpZiAodGFyZ2V0KSB7XHJcbiAgICAgICAgaWYgKHRhcmdldC51cmwgIT09IHRoaXMuZGVmYXVsdFRhYlVybCkge1xyXG4gICAgICAgICAgY29uc3QgZGVmYXVsdFRhYiA9IHRoaXMuZmxhdHRlbk1lbnUuZmluZChcclxuICAgICAgICAgICAgKGVsZSkgPT4gZWxlLnVybCA9PT0gdGhpcy5kZWZhdWx0VGFiVXJsXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy50YWJMaXN0LnB1c2goe1xyXG4gICAgICAgICAgICB1cmw6IGRlZmF1bHRUYWIudXJsLFxyXG4gICAgICAgICAgICB0aXRsZTogdGhpcy50cmFuc2xhdGlvbltkZWZhdWx0VGFiLm1lbnVDb2RlXSB8fCBkZWZhdWx0VGFiLmxhYmVsLFxyXG4gICAgICAgICAgICBkaXNwbGF5VGl0bGU6XHJcbiAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGlvbltkZWZhdWx0VGFiLm1lbnVDb2RlXSB8fCBkZWZhdWx0VGFiLmxhYmVsLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYWRkVGFiKFxyXG4gICAgICAgICAgdGFyZ2V0LnVybCxcclxuICAgICAgICAgIHRoaXMudHJhbnNsYXRpb25bdGFyZ2V0Lm1lbnVDb2RlXSB8fCB0YXJnZXQubGFiZWxcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbG9zZVRhYihpZHgsIG5vQ2hhbmdlPykge1xyXG4gICAgY29uc3QgdGFiID0gdGhpcy50YWJMaXN0W2lkeF07XHJcbiAgICB0aGlzLnRhYkxpc3QgPSB0aGlzLnRhYkxpc3QuZmlsdGVyKChlbGUpID0+IGVsZS51cmwgIT09IHRhYi51cmwpO1xyXG4gICAgdGhpcy5jbGVhckNhY2hlKHRhYi51cmwpO1xyXG4gICAgaWYgKCFub0NoYW5nZSAmJiB0aGlzLnNlbGVjdGVkVGFiID09PSBpZHgpIHtcclxuICAgICAgY29uc3QgdGFyZ2V0SWR4ID0gTWF0aC5tYXgoMCwgaWR4IC0gMSk7XHJcbiAgICAgIHRoaXMuY2hhbmdlVGFiKHRoaXMudGFiTGlzdFt0YXJnZXRJZHhdLCB0YXJnZXRJZHgpO1xyXG4gICAgfVxyXG4gICAgaWYgKGlkeCA8IHRoaXMuc2VsZWN0ZWRUYWIpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFRhYiA9IHRoaXMuc2VsZWN0ZWRUYWIgLSAxOyAvLyDlpoLmnpzlhbPpl63nmoR0YWLlnKjlvZPliY3pgInkuK3nmoR0YWLkuYvliY3vvIzpgInkuK10YWLntKLlvJXlh48xXHJcbiAgICB9XHJcbiAgICB0aGlzLnNldEVsbGlwc2lzVGl0bGUoKTtcclxuICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oXCJUYWJDYWNoZVwiLCBKU09OLnN0cmluZ2lmeSh0aGlzLnRhYkxpc3QpKTtcclxuICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlVGFiKHRhYiwgaWR4KSB7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRhYi51cmwpO1xyXG4gICAgaWYgKHRhYi5uYXZpZ2F0aW9uSW5mbykge1xyXG4gICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKFxyXG4gICAgICAgIFwibmF2aWdhdGlvbkluZm9cIixcclxuICAgICAgICBKU09OLnN0cmluZ2lmeSh0YWIubmF2aWdhdGlvbkluZm8pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAodGFiLmZyb21JbmZvKSB7XHJcbiAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oXCJmcm9tSW5mb1wiLCBKU09OLnN0cmluZ2lmeSh0YWIuZnJvbUluZm8pKTtcclxuICAgIH1cclxuICAgIGlmICh0YWIucGVybWlzc2lvbnMpIHtcclxuICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShcInBlcm1pc3Npb25zXCIsIEpTT04uc3RyaW5naWZ5KHRhYi5wZXJtaXNzaW9ucykpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZWxlY3RlZFRhYiA9IGlkeDtcclxuICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgYWRkVGFiKHVybCwgdGl0bGUpIHtcclxuICAgIGlmICh0aGlzLnRhYkxpc3QubGVuZ3RoID49IHRoaXMubWF4VGFicykge1xyXG4gICAgICBjb25zdCBzZWNvbmRUYWIgPSB0aGlzLnRhYkxpc3RbMV07XHJcbiAgICAgIHRoaXMudGFiTGlzdCA9IHRoaXMudGFiTGlzdC5maWx0ZXIoKGVsZSkgPT4gZWxlLnVybCAhPT0gc2Vjb25kVGFiLnVybCk7XHJcbiAgICAgIHRoaXMuY2xlYXJDYWNoZShzZWNvbmRUYWIudXJsKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGxvY2FsUGVybWlzc2lvbnMgPVxyXG4gICAgICBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwicGVybWlzc2lvbnNcIikgfHxcclxuICAgICAgbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJwZXJtaXNzaW9uc1wiKTtcclxuICAgIGNvbnN0IG5hdmlnYXRpb25JbmZvID0gSlNPTi5wYXJzZShzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwibmF2aWdhdGlvbkluZm9cIikpO1xyXG4gICAgY29uc3QgZnJvbUluZm8gPSBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJmcm9tSW5mb1wiKSk7XHJcbiAgICBjb25zdCBwZXJtaXNzaW9ucyA9IEpTT04ucGFyc2UobG9jYWxQZXJtaXNzaW9ucyk7XHJcblxyXG4gICAgdGhpcy50YWJMaXN0LnB1c2goe1xyXG4gICAgICB1cmw6IHVybCxcclxuICAgICAgdGl0bGU6IHRpdGxlIHx8IFwiZGVmYXVsdFwiLFxyXG4gICAgICBkaXNwbGF5VGl0bGU6IHRpdGxlLFxyXG4gICAgICBuYXZpZ2F0aW9uSW5mbzogbmF2aWdhdGlvbkluZm8sXHJcbiAgICAgIHBlcm1pc3Npb25zOiBwZXJtaXNzaW9ucyxcclxuICAgICAgZnJvbUluZm86IGZyb21JbmZvLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnNlbGVjdGVkVGFiID0gdGhpcy50YWJMaXN0Lmxlbmd0aCAtIDE7XHJcbiAgICB0aGlzLnNldEVsbGlwc2lzVGl0bGUoKTtcclxuICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oXCJUYWJDYWNoZVwiLCBKU09OLnN0cmluZ2lmeSh0aGlzLnRhYkxpc3QpKTtcclxuICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFRhYih1cmwsIHB1cmVVcmwsIHRpdGxlLCBub1JldXNlZCkge1xyXG4gICAgY29uc3QgaXNFeGlzdElkeCA9IHRoaXMudGFiTGlzdC5maW5kSW5kZXgoXHJcbiAgICAgIChlbGUpID0+IHRoaXMudXJsV2l0aG91dFF1ZXJ5KGVsZS51cmwpID09PSB0aGlzLnVybFdpdGhvdXRRdWVyeSh1cmwpXHJcbiAgICApO1xyXG4gICAgaWYgKGlzRXhpc3RJZHggPT09IC0xKSB7XHJcbiAgICAgIGNvbnN0IHNpbmdsZUlkeCA9IHRoaXMuc2luZ2xlUmV1c2VVcmxzLmZpbmRJbmRleChcclxuICAgICAgICAoZWxlKSA9PiBlbGUgPT09IHB1cmVVcmxcclxuICAgICAgKTtcclxuICAgICAgaWYgKHNpbmdsZUlkeCAhPT0gLTEpIHtcclxuICAgICAgICB0aGlzLnRhYkxpc3QgPSB0aGlzLnRhYkxpc3QuZmlsdGVyKFxyXG4gICAgICAgICAgKGVsZSkgPT4gIWVsZS51cmwuaW5jbHVkZXModGhpcy5zaW5nbGVSZXVzZVVybHNbc2luZ2xlSWR4XSlcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMua2VlcEFsaXZlLmNsZWFyQ2FjaGUodGhpcy51cmxXaXRob3V0UXVlcnkodXJsKSk7XHJcbiAgICAgICAgdGhpcy5kcmF3ZXIuZGVsZXRlQ2FjaGUodXJsKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmFkZFRhYih1cmwsIHRpdGxlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHRhcmdldFRhYlVybCA9IHRoaXMudGFiTGlzdFtpc0V4aXN0SWR4XS51cmw7XHJcbiAgICAgIGlmICh0YXJnZXRUYWJVcmwgIT09IHVybCB8fCBub1JldXNlZCkge1xyXG4gICAgICAgIC8vIOW9k+e8k+WtmOS4gOiHtOaXtuWAme+8jOS9huaYr3VybOS4jeS4gOiHtO+8jOmHjeaWsOaMieeFp+aWsOeahHVybOeUn+aIkHRhYlxyXG4gICAgICAgIHRoaXMuY2xvc2VUYWIoaXNFeGlzdElkeCwgdHJ1ZSk7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmFkZFRhYih1cmwsIHRpdGxlKTtcclxuICAgICAgICB9LCAzMCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VUYWIodGhpcy50YWJMaXN0W2lzRXhpc3RJZHhdLCBpc0V4aXN0SWR4KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uVGFiRHJvcChldmVudDogQ2RrRHJhZ0Ryb3A8c3RyaW5nW10+KSB7XHJcbiAgICBjb25zdCB7IHByZXZpb3VzSW5kZXgsIGN1cnJlbnRJbmRleCB9ID0gZXZlbnQ7XHJcbiAgICBjb25zb2xlLmxvZyhcInByZXZpb3VzSW5kZXhcIiwgcHJldmlvdXNJbmRleCwgXCJjdXJyZW50SW5kZXhcIiwgY3VycmVudEluZGV4KTtcclxuICAgIGlmIChwcmV2aW91c0luZGV4ID09PSAwIHx8IGN1cnJlbnRJbmRleCA9PT0gMCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBtb3ZlSXRlbUluQXJyYXkodGhpcy50YWJMaXN0LCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xyXG4gICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShcIlRhYkNhY2hlXCIsIEpTT04uc3RyaW5naWZ5KHRoaXMudGFiTGlzdCkpO1xyXG4gIH1cclxuXHJcbiAgdGltZXIgPSBudWxsO1xyXG4gIHJlZnJlc2hUYWIoKSB7XHJcbiAgICBjb25zdCBsb2FkaW5nSWNvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibG9hZGluZ0ljb25cIik7XHJcbiAgICBsb2FkaW5nSWNvbi5jbGFzc0xpc3QuYWRkKFwicmVmcmVzaC10YWItbG9hZGluZ1wiKTtcclxuICAgIGlmICh0aGlzLnRpbWVyKSB7XHJcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy50aW1lcik7XHJcbiAgICB9XHJcbiAgICAvLyDmqKHmi5/liqDovb3ov4fnqIvvvIwx56eS5ZCO56e76Zmk5Yqo55S7XHJcbiAgICB0aGlzLnRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGxvYWRpbmdJY29uLmNsYXNzTGlzdC5yZW1vdmUoXCJyZWZyZXNoLXRhYi1sb2FkaW5nXCIpO1xyXG4gICAgICB0aGlzLnRpbWVyID0gbnVsbDtcclxuICAgIH0sIDE1MDApO1xyXG4gICAgLy8gdGhpcy5rZWVwQWxpdmUuY2xlYXJDYWNoZSh0aGlzLnRhYkxpc3RbdGhpcy5zZWxlY3RlZFRhYl0udXJsKTtcclxuICAgIC8vIHRoaXMuZHJhd2VyLmRlbGV0ZUNhY2hlKHRoaXMudGFiTGlzdFt0aGlzLnNlbGVjdGVkVGFiXS51cmwpO1xyXG4gICAgY29uc3QgY3VycmVudFVybCA9IHRoaXMucm91dGVyLnVybDsgLy8g6I635Y+W5b2T5YmNIFVSTFxyXG4gICAgdGhpcy5vblJlZnJlc2hUYWIuZW1pdChjdXJyZW50VXJsKTtcclxuICAgIC8vIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoXCIvXCIsIHsgc2tpcExvY2F0aW9uQ2hhbmdlOiB0cnVlIH0pLnRoZW4oKCkgPT4ge1xyXG4gICAgLy8gICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGN1cnJlbnRVcmwpOyAvLyDph43mlrDlr7zoiKrliLDlvZPliY0gVVJMXHJcbiAgICAvLyB9KTtcclxuICB9XHJcblxyXG4gIGNsZWFyQ2FjaGUodXJsKSB7XHJcbiAgICB0aGlzLmtlZXBBbGl2ZS5jbGVhckNhY2hlKHRoaXMudXJsV2l0aG91dFF1ZXJ5KHVybCkpOyAvLyDosIPnlKjoh6rlrprkuYnnrZbnlaXnmoTmuIXpmaTnvJPlrZjmlrnms5VcclxuICAgIHRoaXMuZHJhd2VyLmRlbGV0ZUNhY2hlKHVybCk7XHJcbiAgfVxyXG4gIGNsZWFuQWxsQ2FjaGUoKSB7XHJcbiAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKFwiVGFiQ2FjaGVcIik7IC8vIOa4hemZpOe8k+WtmFxyXG4gICAgdGhpcy50YWJMaXN0ID0gW107IC8vIOa4heepuiB0YWIg5YiX6KGoXHJcbiAgICB0aGlzLnNlbGVjdGVkVGFiID0gMDsgLy8g6YeN572u6YCJ5Lit55qEIHRhYiDntKLlvJVcclxuICAgIHRoaXMua2VlcEFsaXZlLmNsZWFyQWxsQ2FjaGUoKTsgLy8g6LCD55So6Ieq5a6a5LmJ562W55Wl55qE5riF6Zmk57yT5a2Y5pa55rOVXHJcbiAgfVxyXG4gIHByaXZhdGUgdXJsV2l0aG91dFF1ZXJ5KHVybCkge1xyXG4gICAgcmV0dXJuIHVybC5zcGxpdChcIj9cIilbMF07XHJcbiAgfVxyXG59XHJcbiJdfQ==