Repository URL to install this package:
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { NGXLogger } from 'web-console-core';
import { Component, Input } from '@angular/core';
import { WCToasterService } from 'web-console-ui-kit';
import { SchedulerService } from '@wa-motif-open-api/scheduler-service';
import { MotifQuerySort, MotifQueryResults } from 'web-console-core';
import { HttpParams } from '@angular/common/http';
import * as _ from 'lodash';
/** @type {?} */
const LOG_TAG = "[SchedulerSection] [ScheduledTaskDetailsComponent]";
/** @type {?} */
const REFRESH_TOKENS_LIST_ENDPOINT = "/oauth2/refreshTokens/{0}/accessTokens";
export class ScheduledTaskDetailsComponent {
/**
* @param {?} logger
* @param {?} schedulerService
* @param {?} toaster
*/
constructor(logger, schedulerService, toaster) {
this.logger = logger;
this.schedulerService = schedulerService;
this.toaster = toaster;
//Data
this.taskExecutionsList = [];
//Grid Options
this.sort = [{
field: 'created',
dir: 'desc'
}];
this.type = 'numeric';
this.pageSize = 10;
this.skip = 0;
this.currentPage = 1;
this.totalPages = 0;
this.totalRecords = 0;
this.isFieldSortable = false;
}
/**
* @return {?}
*/
ngOnInit() {
this.refreshData();
}
/**
* Reload the list of access tokens for the selected refresh token
* @return {?}
*/
refreshData() {
this.logger.debug(LOG_TAG, "refreshData");
this.loadData(this.scheduledTask, this.currentPage, this.pageSize);
}
/**
* @param {?} __0
* @return {?}
*/
pageChange({ skip, take }) {
this.logger.debug(LOG_TAG, 'pageChange skip=', skip, ' take=', take);
this.skip = skip;
this.pageSize = take;
/** @type {?} */
const newPageIndex = this.calculatePageIndex(skip, take);
this.loadData(this.scheduledTask, newPageIndex, this.pageSize);
}
/**
* @param {?} sort
* @return {?}
*/
sortChange(sort) {
this.logger.debug(LOG_TAG, 'sortChange sort=', this.sort);
this.sort = sort;
this.refreshData();
}
/**
* @private
* @param {?} scheduledTask
* @param {?} pageIndex
* @param {?} pageSize
* @return {?}
*/
loadData(scheduledTask, pageIndex, pageSize) {
this.logger.debug(LOG_TAG, 'loadData pageIndex=', pageIndex, ' pageSize=', pageSize);
this.loading = true;
/** @type {?} */
const sort = this.buildQuerySort();
this.schedulerService.getTaskExecutionsList(scheduledTask, null, pageIndex, pageSize, sort.encode(new HttpParams()).get('sort'), 'response', false).subscribe((/**
* @param {?} response
* @return {?}
*/
(response) => {
/** @type {?} */
const results = MotifQueryResults.fromHttpResponse(response);
this.taskExecutionsList = results.data;
this.totalPages = results.totalPages;
this.totalRecords = results.totalRecords;
this.currentPage = results.pageIndex;
_.forEach(this.taskExecutionsList, (/**
* @param {?} element
* @return {?}
*/
function (element) {
element.created = new Date(element.created);
}));
this.gridView = {
data: this.taskExecutionsList,
total: results.totalRecords
};
this.currentPage = results.pageIndex;
this.loading = false;
}), (/**
* @param {?} error
* @return {?}
*/
error => {
this.logger.error(LOG_TAG, 'getScheduledTaskExecutions failed: ', error);
this.loading = false;
}));
}
/**
* @private
* @param {?} skip
* @param {?} take
* @return {?}
*/
calculatePageIndex(skip, take) {
return (skip / take) + 1;
}
/**
* @private
* @return {?}
*/
buildQuerySort() {
this.logger.debug(LOG_TAG, 'buildQuerySort: ', this.sort);
/** @type {?} */
let querySort = new MotifQuerySort();
if (this.sort) {
for (let i = 0; i < this.sort.length; i++) {
/** @type {?} */
let sortInfo = this.sort[i];
if (sortInfo.dir && sortInfo.dir === 'asc') {
querySort.orderAscendingBy(sortInfo.field);
}
else if (sortInfo.dir && sortInfo.dir === 'desc') {
querySort.orderDescendingBy(sortInfo.field);
}
}
}
return querySort;
}
}
ScheduledTaskDetailsComponent.decorators = [
{ type: Component, args: [{
selector: 'wa-scheduler-section-task-details',
template: "<kendo-grid [data]=\"gridView\" [columnMenu]=\"true\" [resizable]=\"true\" [reorderable]=\"true\" [sort]=\"sort\" \n (sortChange)=\"sortChange($event)\" [sortable]=\"{ allowUnsort: true, mode: 'multiple' }\"\n [scrollable]=\"true\" [pageSize]=\"pageSize\" [skip]=\"skip\" [pageable]=\"{\n buttonCount: 5,\n info: true,\n type: type,\n pageSizes: true,\n previousNext: true\n }\" (pageChange)=\"pageChange($event)\">\n <kendo-grid-column field=\"created\" title=\"Created\" width=\"25\" format=\"{0:dd/MM/yyyy HH:mm:ss}\">\n </kendo-grid-column>\n <kendo-grid-column field=\"taskExecId\" title=\"Execution ID\" width=\"80\">\n </kendo-grid-column>\n <kendo-grid-column field=\"resultCode\" title=\"Result Code\" width=\"30\">\n </kendo-grid-column>\n <kendo-grid-column field=\"resultDesc\" title=\"Result Desc\" width=\"100\">\n </kendo-grid-column>\n <kendo-grid-column field=\"elapsed\" title=\"Elapsed\" width=\"30\">\n </kendo-grid-column>\n <kendo-grid-column field=\"workerId\" title=\"WorkerId\" width=\"30\">\n </kendo-grid-column>\n</kendo-grid>",
styles: [":host ::ng-deep .grid-btn-editor.wc-table-delete-command{justify-content:center}"]
}] }
];
/** @nocollapse */
ScheduledTaskDetailsComponent.ctorParameters = () => [
{ type: NGXLogger },
{ type: SchedulerService },
{ type: WCToasterService }
];
ScheduledTaskDetailsComponent.propDecorators = {
scheduledTask: [{ type: Input }]
};
if (false) {
/** @type {?} */
ScheduledTaskDetailsComponent.prototype.scheduledTask;
/** @type {?} */
ScheduledTaskDetailsComponent.prototype.taskExecutionsList;
/** @type {?} */
ScheduledTaskDetailsComponent.prototype.sort;
/** @type {?} */
ScheduledTaskDetailsComponent.prototype.gridView;
/** @type {?} */
ScheduledTaskDetailsComponent.prototype.type;
/** @type {?} */
ScheduledTaskDetailsComponent.prototype.pageSize;
/** @type {?} */
ScheduledTaskDetailsComponent.prototype.skip;
/** @type {?} */
ScheduledTaskDetailsComponent.prototype.currentPage;
/** @type {?} */
ScheduledTaskDetailsComponent.prototype.totalPages;
/** @type {?} */
ScheduledTaskDetailsComponent.prototype.totalRecords;
/** @type {?} */
ScheduledTaskDetailsComponent.prototype.isFieldSortable;
/** @type {?} */
ScheduledTaskDetailsComponent.prototype.loading;
/**
* @type {?}
* @private
*/
ScheduledTaskDetailsComponent.prototype.logger;
/**
* @type {?}
* @private
*/
ScheduledTaskDetailsComponent.prototype.schedulerService;
/**
* @type {?}
* @private
*/
ScheduledTaskDetailsComponent.prototype.toaster;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVkLXRhc2stZGV0YWlscy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9tb3RpZi13ZWItYWRtaW4tY29yZS8iLCJzb3VyY2VzIjpbImxpYi9zZWN0aW9ucy9TY2hlZHVsZXIvY29tcG9uZW50cy9zY2hlZHVsZWQtdGFzay1kZXRhaWxzLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxnQkFBZ0IsRUFBZ0MsTUFBTSxzQ0FBc0MsQ0FBQztBQUd0RyxPQUFPLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDckUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFDOztNQUV0QixPQUFPLEdBQUcsb0RBQW9EOztNQUM5RCw0QkFBNEIsR0FBRyx3Q0FBd0M7QUFPN0UsTUFBTSxPQUFPLDZCQUE2Qjs7Ozs7O0lBdUJ4QyxZQUFvQixNQUFpQixFQUMzQixnQkFBa0MsRUFDbEMsT0FBeUI7UUFGZixXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQzNCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsWUFBTyxHQUFQLE9BQU8sQ0FBa0I7O1FBcEI1Qix1QkFBa0IsR0FBd0MsRUFBRSxDQUFDOztRQUc3RCxTQUFJLEdBQXFCLENBQUM7Z0JBQy9CLEtBQUssRUFBRSxTQUFTO2dCQUNoQixHQUFHLEVBQUUsTUFBTTthQUNaLENBQUMsQ0FBQztRQUVJLFNBQUksR0FBd0IsU0FBUyxDQUFDO1FBQ3RDLGFBQVEsR0FBRyxFQUFFLENBQUM7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USxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUM3QzthQUNGO1NBQ0Y7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDOzs7WUEzR0YsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxtQ0FBbUM7Z0JBRTdDLDhxQ0FBc0Q7O2FBQ3ZEOzs7O1lBakJRLFNBQVM7WUFHVCxnQkFBZ0I7WUFEaEIsZ0JBQWdCOzs7NEJBa0J0QixLQUFLOzs7O0lBQU4sc0RBQXNDOztJQUd0QywyREFBb0U7O0lBR3BFLDZDQUdHOztJQUNILGlEQUE0Qjs7SUFDNUIsNkNBQTZDOztJQUM3QyxpREFBcUI7O0lBQ3JCLDZDQUFnQjs7SUFDaEIsb0RBQXVCOztJQUN2QixtREFBc0I7O0lBQ3RCLHFEQUF3Qjs7SUFDeEIsd0RBQStCOztJQUUvQixnREFBaUI7Ozs7O0lBRUwsK0NBQXlCOzs7OztJQUNuQyx5REFBMEM7Ozs7O0lBQzFDLGdEQUFpQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5HWExvZ2dlcn0gZnJvbSAnd2ViLWNvbnNvbGUtY29yZSc7XG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFdDVG9hc3RlclNlcnZpY2UgfSBmcm9tICd3ZWItY29uc29sZS11aS1raXQnO1xuaW1wb3J0IHsgU2NoZWR1bGVyU2VydmljZSwgU2NoZWR1bGVkVGFza0V4ZWN1dGlvbkVudGl0eSB9IGZyb20gJ0B3YS1tb3RpZi1vcGVuLWFwaS9zY2hlZHVsZXItc2VydmljZSc7XG5pbXBvcnQgeyBTb3J0RGVzY3JpcHRvciwgR3JvdXBEZXNjcmlwdG9yLCBEYXRhUmVzdWx0IH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWRhdGEtcXVlcnknO1xuaW1wb3J0IHsgUGFnZUNoYW5nZUV2ZW50LCBHcmlkQ29tcG9uZW50IH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItZ3JpZCc7XG5pbXBvcnQgeyBNb3RpZlF1ZXJ5U29ydCwgTW90aWZRdWVyeVJlc3VsdHMgfSBmcm9tICd3ZWItY29uc29sZS1jb3JlJztcbmltcG9ydCB7IEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5cbmNvbnN0IExPR19UQUcgPSBcIltTY2hlZHVsZXJTZWN0aW9uXSBbU2NoZWR1bGVkVGFza0RldGFpbHNDb21wb25lbnRdXCI7XG5jb25zdCBSRUZSRVNIX1RPS0VOU19MSVNUX0VORFBPSU5UID0gXCIvb2F1dGgyL3JlZnJlc2hUb2tlbnMvezB9L2FjY2Vzc1Rva2Vuc1wiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd3YS1zY2hlZHVsZXItc2VjdGlvbi10YXNrLWRldGFpbHMnLFxuICBzdHlsZVVybHM6IFsgJy4vc2NoZWR1bGVkLXRhc2stZGV0YWlscy5jb21wb25lbnQuc2NzcycgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3NjaGVkdWxlZC10YXNrLWRldGFpbHMuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFNjaGVkdWxlZFRhc2tEZXRhaWxzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBASW5wdXQoKSBwdWJsaWMgc2NoZWR1bGVkVGFzazogc3RyaW5nO1xuXG4gIC8vRGF0YVxuICBwdWJsaWMgdGFza0V4ZWN1dGlvbnNMaXN0OiBBcnJheTxTY2hlZHVsZWRUYXNrRXhlY3V0aW9uRW50aXR5PiA9IFtdO1xuXG4gIC8vR3JpZCBPcHRpb25zXG4gIHB1YmxpYyBzb3J0OiBTb3J0RGVzY3JpcHRvcltdID0gW3tcbiAgICBmaWVsZDogJ2NyZWF0ZWQnLFxuICAgIGRpcjogJ2Rlc2MnXG4gIH1dO1xuICBwdWJsaWMgZ3JpZFZpZXc6IERhdGFSZXN1bHQ7XG4gIHB1YmxpYyB0eXBlOiAnbnVtZXJpYycgfCAnaW5wdXQnID0gJ251bWVyaWMnO1xuICBwdWJsaWMgcGFnZVNpemUgPSAxMDtcbiAgcHVibGljIHNraXAgPSAwO1xuICBwdWJsaWMgY3VycmVudFBhZ2UgPSAxO1xuICBwdWJsaWMgdG90YWxQYWdlcyA9IDA7XG4gIHB1YmxpYyB0b3RhbFJlY29yZHMgPSAwO1xuICBwdWJsaWMgaXNGaWVsZFNvcnRhYmxlID0gZmFsc2U7XG5cbiAgbG9hZGluZzogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGxvZ2dlcjogTkdYTG9nZ2VyLFxuICAgIHByaXZhdGUgc2NoZWR1bGVyU2VydmljZTogU2NoZWR1bGVyU2VydmljZSxcbiAgICBwcml2YXRlIHRvYXN0ZXI6IFdDVG9hc3RlclNlcnZpY2UpIHtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMucmVmcmVzaERhdGEoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWxvYWQgdGhlIGxpc3Qgb2YgYWNjZXNzIHRva2VucyBmb3IgdGhlIHNlbGVjdGVkIHJlZnJlc2ggdG9rZW5cbiAgICovXG4gIHB1YmxpYyByZWZyZXNoRGF0YSgpOiB2b2lkIHtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhMT0dfVEFHLCBcInJlZnJlc2hEYXRhXCIpO1xuICAgIHRoaXMubG9hZERhdGEodGhpcy5zY2hlZHVsZWRUYXNrLCB0aGlzLmN1cnJlbnRQYWdlLCB0aGlzLnBhZ2VTaXplKTtcbiAgfVxuXG4gIHB1YmxpYyBwYWdlQ2hhbmdlKHsgc2tpcCwgdGFrZSB9OiBQYWdlQ2hhbmdlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhMT0dfVEFHLCAncGFnZUNoYW5nZSBza2lwPScsIHNraXAsICcgdGFrZT0nLCB0YWtlKTtcbiAgICB0aGlzLnNraXAgPSBza2lwO1xuICAgIHRoaXMucGFnZVNpemUgPSB0YWtlO1xuICAgIGNvbnN0IG5ld1BhZ2VJbmRleCA9IHRoaXMuY2FsY3VsYXRlUGFnZUluZGV4KHNraXAsIHRha2UpO1xuICAgIHRoaXMubG9hZERhdGEodGhpcy5zY2hlZHVsZWRUYXNrLCBuZXdQYWdlSW5kZXgsIHRoaXMucGFnZVNpemUpO1xuICB9XG5cbiAgcHVibGljIHNvcnRDaGFuZ2Uoc29ydDogU29ydERlc2NyaXB0b3JbXSk6IHZvaWQge1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKExPR19UQUcsICdzb3J0Q2hhbmdlIHNvcnQ9JywgdGhpcy5zb3J0KTtcbiAgICB0aGlzLnNvcnQgPSBzb3J0O1xuICAgIHRoaXMucmVmcmVzaERhdGEoKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZERhdGEoc2NoZWR1bGVkVGFzazogc3RyaW5nLCBwYWdlSW5kZXg6IG51bWJlciwgcGFnZVNpemU6IG51bWJlcikge1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKExPR19UQUcsICdsb2FkRGF0YSBwYWdlSW5kZXg9JywgcGFnZUluZGV4LCAnIHBhZ2VTaXplPScsIHBhZ2VTaXplKTtcblxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgY29uc3Qgc29ydDogTW90aWZRdWVyeVNvcnQgPSB0aGlzLmJ1aWxkUXVlcnlTb3J0KCk7XG5cbiAgICB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0VGFza0V4ZWN1dGlvbnNMaXN0KHNjaGVkdWxlZFRhc2ssIG51bGwsXG4gICAgICBwYWdlSW5kZXgsIHBhZ2VTaXplLCBzb3J0LmVuY29kZShuZXcgSHR0cFBhcmFtcygpKS5nZXQoJ3NvcnQnKSwgJ3Jlc3BvbnNlJywgZmFsc2UpLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcblxuICAgICAgICBjb25zdCByZXN1bHRzOiBNb3RpZlF1ZXJ5UmVzdWx0cyA9IE1vdGlmUXVlcnlSZXN1bHRzLmZyb21IdHRwUmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgICB0aGlzLnRhc2tFeGVjdXRpb25zTGlzdCA9IHJlc3VsdHMuZGF0YTtcbiAgICAgICAgdGhpcy50b3RhbFBhZ2VzID0gcmVzdWx0cy50b3RhbFBhZ2VzO1xuICAgICAgICB0aGlzLnRvdGFsUmVjb3JkcyA9IHJlc3VsdHMudG90YWxSZWNvcmRzO1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gcmVzdWx0cy5wYWdlSW5kZXg7XG4gICAgICAgIF8uZm9yRWFjaCh0aGlzLnRhc2tFeGVjdXRpb25zTGlzdCwgZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgICAgICBlbGVtZW50LmNyZWF0ZWQgPSBuZXcgRGF0ZShlbGVtZW50LmNyZWF0ZWQpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5ncmlkVmlldyA9IHtcbiAgICAgICAgICBkYXRhOiB0aGlzLnRhc2tFeGVjdXRpb25zTGlzdCxcbiAgICAgICAgICB0b3RhbDogcmVzdWx0cy50b3RhbFJlY29yZHNcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHJlc3VsdHMucGFnZUluZGV4O1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihMT0dfVEFHLCAnZ2V0U2NoZWR1bGVkVGFza0V4ZWN1dGlvbnMgZmFpbGVkOiAnLCBlcnJvcik7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNhbGN1bGF0ZVBhZ2VJbmRleChza2lwOiBudW1iZXIsIHRha2U6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIChza2lwIC8gdGFrZSkgKyAxO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFF1ZXJ5U29ydCgpOiBNb3RpZlF1ZXJ5U29ydCB7XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoTE9HX1RBRywgJ2J1aWxkUXVlcnlTb3J0OiAnLCB0aGlzLnNvcnQpO1xuICAgIGxldCBxdWVyeVNvcnQgPSBuZXcgTW90aWZRdWVyeVNvcnQoKTtcbiAgICBpZiAodGhpcy5zb3J0KSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc29ydC5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgc29ydEluZm8gPSB0aGlzLnNvcnRbaV07XG4gICAgICAgIGlmIChzb3J0SW5mby5kaXIgJiYgc29ydEluZm8uZGlyID09PSAnYXNjJykge1xuICAgICAgICAgIHF1ZXJ5U29ydC5vcmRlckFzY2VuZGluZ0J5KHNvcnRJbmZvLmZpZWxkKTtcbiAgICAgICAgfSBlbHNlIGlmIChzb3J0SW5mby5kaXIgJiYgc29ydEluZm8uZGlyID09PSAnZGVzYycpIHtcbiAgICAgICAgICBxdWVyeVNvcnQub3JkZXJEZXNjZW5kaW5nQnkoc29ydEluZm8uZmllbGQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBxdWVyeVNvcnQ7XG4gIH1cbn1cbiJdfQ==