UNPKG

e5core-angular-ui

Version:

e5 Anywhere Angular UI

581 lines 45.3 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { map } from 'rxjs/operators'; import { Injectable } from '@angular/core'; import { UiSearchDefinitionService, WorkSearchFoundationService } from 'e5core-angular-services'; import { DataSourceColumnStatus } from './data-source-column'; import * as i0 from "@angular/core"; import * as i1 from "e5core-angular-services"; /** @type {?} */ var TESTDATA = { '$id': '2111', 'findClassId': 4, 'page': 0, 'pageSize': 10, 'resultCount': 10, 'total': 24, 'columns': [ { '$id': '2112', 'code': 'Id', 'label': 'Work Id', 'type': 'System.Guid' }, { '$id': '2113', 'code': 'SLAExpiryDate', 'label': 'Due Date', 'type': 'System.DateTime' }, { '$id': '2114', 'code': 'Allocation', 'label': 'Allocation', 'type': 'System.String' }, { '$id': '2115', 'code': '_NextDueTask', 'label': 'Next Due Task', 'type': 'System.String' }, { '$id': '2116', 'code': 'Status_Id', 'label': 'Status', 'type': 'System.String' }, { '$id': '2117', 'code': 'AssignedUser', 'label': 'Assigned User', 'type': 'System.String' }, { '$id': '2118', 'code': 'Category1_Id', 'label': 'Business Area', 'type': 'System.String' }, { '$id': '2119', 'code': 'Category3_Id', 'label': 'Category', 'type': 'System.String' }, { '$id': '2120', 'code': 'HealthFundNumber', 'label': 'Client Number', 'type': 'System.String' }, { '$id': '2121', 'code': 'FirstName', 'label': 'First Name', 'type': 'System.String' }, { '$id': '2122', 'code': 'Surname', 'label': 'Surname', 'type': 'System.String' }, { '$id': '2123', 'code': 'Category2_Id', 'label': 'Product Type', 'type': 'System.String' }, { '$id': '2124', 'code': 'ProviderName', 'label': 'Provider Name', 'type': 'System.String' }, { '$id': '2125', 'code': 'ProviderNumber', 'label': 'Provider Number', 'type': 'System.String' }, { '$id': '2126', 'code': 'Reference', 'label': 'Reference', 'type': 'System.Int32' }, { '$id': '2127', 'code': 'RelatedItem', 'label': 'Related Items', 'type': 'System.String' }, { '$id': '2128', 'code': '_SLAExpiryStatus', 'label': '_SLAExpiryStatus', 'type': 'System.String' } ], 'results': [ [ 'ca3a1219-03eb-11e9-9682-005056ba65e4', '2018-12-24T11:11:27+11:00', '2|1005|1011|0', null, 'Complete', null, 'Member Health', 'Benefit Eligibility', '29405564', null, null, 'Ancillary Benefits Management', '', '25', 1778, null, 'within' ], [ '603b82ff-03e6-11e9-9682-005056ba65e4', '2018-12-24T10:32:41+11:00', '2|1002|1037|0', null, 'Complete', 'Leo Santos', 'Member Health', 'Benefit Eligibility', '29405564', null, null, 'Clinical Review', '', '24', 1776, null, 'within' ], [ '2b4701f5-03e6-11e9-9682-005056ba65e4', '2018-12-24T10:31:12+11:00', '2|1005|1010|0', null, 'Active', null, 'Member Health', 'Benefit Review', '29405564', null, null, 'Ancillary Benefits Management', '', '22', 1775, null, 'within' ], [ 'f2e4ce57-033d-11e9-9682-005056ba65e4', '2018-12-21T14:27:02+11:00', '2|1005|1014|0', null, 'Complete', 'Devashi Wesumperuma', 'Member Health', 'Investigation', '29405564', null, null, 'Ancillary Benefits Management', '', '19', 1769, null, 'within' ], [ '6d575c6c-0327-11e9-9682-005056ba65e4', '2018-12-21T11:45:49+11:00', '2|1006|1012|0', null, 'Complete', 'Vinh Tang', 'Member Health', 'Unclassified', '29405564', null, null, 'Unclassified', '', '18', 1768, null, 'within' ], [ 'd417c057-0326-11e9-9682-005056ba65e4', '2018-12-21T11:41:32+11:00', '2|1006|1012|0', null, 'Complete', null, 'Member Health', 'Unclassified', '29405564', null, null, 'Unclassified', '', '17', 1767, null, 'within' ], [ 'f72a5b05-0325-11e9-9682-005056ba65e4', '2018-12-21T11:35:22+11:00', '2|1004|1017|0', null, 'Complete', null, 'Member Health', 'Exgratia', '29405564', null, null, 'Compensable', '', '16', 1766, null, 'within' ], [ 'e88fefe7-0325-11e9-9682-005056ba65e4', '2018-12-21T11:34:57+11:00', '2|1005|1010|0', null, 'Complete', null, 'Member Health', 'Benefit Review', '29405564', null, null, 'Ancillary Benefits Management', '', '15', 1765, null, 'within' ], [ '644e3d8c-0325-11e9-9682-005056ba65e4', '2018-12-21T11:31:15+11:00', '2|1005|1010|0', null, 'Complete', null, 'Member Health', 'Benefit Review', '29405564', null, null, 'Ancillary Benefits Management', '', '14', 1764, null, 'within' ], [ '3588e678-0325-11e9-9682-005056ba65e4', '2018-12-21T11:29:57+11:00', '2|1003|1031|0', null, 'Complete', null, 'Member Health', 'Investigation', '29405564', null, null, 'Investigations', '', '13', 1763, null, 'within' ] ] }; var SearchDataSourceService = /** @class */ (function () { function SearchDataSourceService(searchDefinitionService, searchService) { this.searchDefinitionService = searchDefinitionService; this.searchService = searchService; this.SlaExpiryColumnCode = '_SLAExpiryStatus'; this.NextTaskColumnCode = '_NextDueTask'; this.searchDefinitionId = 0; this.searchOptions = {}; } /** * @return {?} */ SearchDataSourceService.prototype.defaultOptions = /** * @return {?} */ function () { return (this.searchOptions); }; /** * @param {?} options * @return {?} */ SearchDataSourceService.prototype.setDefaultOptions = /** * @param {?} options * @return {?} */ function (options) { this.searchOptions = tslib_1.__assign({}, options); // clone }; /** * @param {?} id * @return {?} */ SearchDataSourceService.prototype.setSearchDefinitionId = /** * @param {?} id * @return {?} */ function (id) { this.searchDefinitionId = id; return (this); }; /** * @return {?} */ SearchDataSourceService.prototype.columns = /** * @return {?} */ function () { var _this = this; return this.searchDefinitionService.get(this.searchDefinitionId).pipe(map(function (r) { /** @type {?} */ var columns = r.searchFields.map(function (sf) { return (/** @type {?} */ ({ code: sf.fieldDefinitionId, label: sf.fieldLabel, type: sf.fieldDataType, status: sf.fieldStatus })); }); return _this.addOptionalColumns(columns); })); }; /** * @private * @param {?} columns * @return {?} */ SearchDataSourceService.prototype.addOptionalColumns = /** * @private * @param {?} columns * @return {?} */ function (columns) { if (this.searchOptions) { if (this.searchOptions.includeSla) { // Add to start columns.unshift((/** @type {?} */ ({ label: 'SLA', code: this.SlaExpiryColumnCode, type: 'SLA', status: DataSourceColumnStatus.Selected }))); } if (this.searchOptions.includeNextDueTask) { // Add to end columns.push((/** @type {?} */ ({ code: this.NextTaskColumnCode, label: 'Next Due Task', type: 'Input', status: DataSourceColumnStatus.Selected }))); } } return (columns); }; /** * @param {?} page * @param {?} pageSize * @param {?} optionsIn * @return {?} */ SearchDataSourceService.prototype.read = /** * @param {?} page * @param {?} pageSize * @param {?} optionsIn * @return {?} */ function (page, pageSize, optionsIn) { var _this = this; /** @type {?} */ var options = tslib_1.__assign({}, this.searchOptions, optionsIn, { page: page, pageSize: pageSize }); /** @type {?} */ var filterBy = this.mapQueryToFilterBy(options.query); return this.searchService.getFindWorkItem(this.searchDefinitionId, filterBy, options) .pipe(map(function (results) { return { total: results.total, data: _this.mapResults(results) }; })); }; /** * The data that comes back from the API is a columns defintion and an array * of array of data. We need to map this into an array of objects with the column property * id as the object key so that it's easier to handle by the table. * @param model */ /** * The data that comes back from the API is a columns defintion and an array * of array of data. We need to map this into an array of objects with the column property * id as the object key so that it's easier to handle by the table. * @private * @param {?} model * @return {?} */ SearchDataSourceService.prototype.mapResults = /** * The data that comes back from the API is a columns defintion and an array * of array of data. We need to map this into an array of objects with the column property * id as the object key so that it's easier to handle by the table. * @private * @param {?} model * @return {?} */ function (model) { /** @type {?} */ var data = model.results; /** @type {?} */ var results; if (model && model.total > 0 && model.results && model.columns) { /** @type {?} */ var colDefs_1 = model.columns; results = model.results.map(function (r) { /** @type {?} */ var dataRow = r; /** @type {?} */ var objectRow = {}; for (var c = 0; c < colDefs_1.length; c++) { /** @type {?} */ var columnDef = colDefs_1[c]; objectRow[columnDef.code] = dataRow[c]; } return (objectRow); }); } return results; }; // In order to use the foundation service we need to map the DataSourceQuery into // the underlying foundation query // { // 'filters': [ // { // 'field': 'string', // 'operator': 'string', // 'value': 'string' // } // ], // 'logic': 'string' // } // In order to use the foundation service we need to map the DataSourceQuery into // the underlying foundation query // { // 'filters': [ // { // 'field': 'string', // 'operator': 'string', // 'value': 'string' // } // ], // 'logic': 'string' // } /** * @private * @param {?} query * @return {?} */ SearchDataSourceService.prototype.mapQueryToFilterBy = // In order to use the foundation service we need to map the DataSourceQuery into // the underlying foundation query // { // 'filters': [ // { // 'field': 'string', // 'operator': 'string', // 'value': 'string' // } // ], // 'logic': 'string' // } /** * @private * @param {?} query * @return {?} */ function (query) { /** @type {?} */ var filterBy = {}; if (query && query.Expressions && query.Expressions.length > 0) { /** @type {?} */ var filters = query.Expressions .filter(function (e) { return e.Value; }) .map(function (e) { return { field: e.Field, value: e.Value }; }); filterBy = { filters: filters }; } return (filterBy); }; SearchDataSourceService.decorators = [ { type: Injectable, args: [{ providedIn: null // 'root' },] } ]; /** @nocollapse */ SearchDataSourceService.ctorParameters = function () { return [ { type: UiSearchDefinitionService }, { type: WorkSearchFoundationService } ]; }; /** @nocollapse */ SearchDataSourceService.ngInjectableDef = i0.defineInjectable({ factory: function SearchDataSourceService_Factory() { return new SearchDataSourceService(i0.inject(i1.UiSearchDefinitionService), i0.inject(i1.WorkSearchFoundationService)); }, token: SearchDataSourceService, providedIn: null }); return SearchDataSourceService; }()); export { SearchDataSourceService }; if (false) { /** @type {?} */ SearchDataSourceService.prototype.SlaExpiryColumnCode; /** @type {?} */ SearchDataSourceService.prototype.NextTaskColumnCode; /** @type {?} */ SearchDataSourceService.prototype.searchDefinitionId; /** @type {?} */ SearchDataSourceService.prototype.searchOptions; /** * @type {?} * @private */ SearchDataSourceService.prototype.searchDefinitionService; /** * @type {?} * @private */ SearchDataSourceService.prototype.searchService; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWRhdGEtc291cmNlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9lNWNvcmUtYW5ndWxhci11aS8iLCJzb3VyY2VzIjpbImxpYi9kYXRhc291cmNlL3NlYXJjaC1kYXRhLXNvdXJjZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBRUEsT0FBTyxFQUFFLEdBQUcsRUFBYyxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLHlCQUF5QixFQUFFLDJCQUEyQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDakcsT0FBTyxFQUFvQixzQkFBc0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7O0lBUTFFLFFBQVEsR0FBRztJQUNiLEtBQUssRUFBRSxNQUFNO0lBQ2IsYUFBYSxFQUFFLENBQUM7SUFDaEIsTUFBTSxFQUFFLENBQUM7SUFDVCxVQUFVLEVBQUUsRUFBRTtJQUNkLGFBQWEsRUFBRSxFQUFFO0lBQ2pCLE9BQU8sRUFBRSxFQUFFO0lBQ1gsU0FBUyxFQUFFO1FBQ1I7WUFDRyxLQUFLLEVBQUUsTUFBTTtZQUNiLE1BQU0sRUFBRSxJQUFJO1lBQ1osT0FBTyxFQUFFLFNBQVM7WUFDbEIsTUFBTSxFQUFFLGFBQWE7U0FDdkI7UUFDRDtZQUNHLEtBQUssRUFBRSxNQUFNO1lBQ2IsTUFBTSxFQUFFLGVBQWU7WUFDdkIsT0FBTyxFQUFFLFVBQVU7WUFDbkIsTUFBTSxFQUFFLGlCQUFpQjtTQUMzQjtRQUNEO1lBQ0csS0FBSyxFQUFFLE1BQU07WUFDYixNQUFNLEVBQUUsWUFBWTtZQUNwQixPQUFPLEVBQUUsWUFBWTtZQUNyQixNQUFNLEVBQUUsZUFBZTtTQUN6QjtRQUNEO1lBQ0csS0FBSyxFQUFFLE1BQU07WUFDYixNQUFNLEVBQUUsY0FBYztZQUN0QixPQUFPLEVBQUUsZUFBZTtZQUN4QixNQUFNLEVBQUUsZUFBZTtTQUN6QjtRQUNEO1lB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QUFPO2FBQ3BCLENBQUM7U0FDTDtRQUNELE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBRTtJQUN2QixDQUFDOztnQkE1SUosVUFBVSxTQUFDO29CQUNSLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUztpQkFDN0I7Ozs7Z0JBNVRRLHlCQUF5QjtnQkFBRSwyQkFBMkI7OztrQ0FKL0Q7Q0EyY0MsQUE3SUQsSUE2SUM7U0ExSVksdUJBQXVCOzs7SUFFaEMsc0RBQWtEOztJQUNsRCxxREFBNkM7O0lBRTdDLHFEQUF1Qjs7SUFDdkIsZ0RBQTZDOzs7OztJQUVqQywwREFBMEQ7Ozs7O0lBQUUsZ0RBQWtEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSURhdGFTb3VyY2UgfSBmcm9tICcuL2RhdGEtc291cmNlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAsIGNhdGNoRXJyb3IgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVWlTZWFyY2hEZWZpbml0aW9uU2VydmljZSwgV29ya1NlYXJjaEZvdW5kYXRpb25TZXJ2aWNlIH0gZnJvbSAnZTVjb3JlLWFuZ3VsYXItc2VydmljZXMnO1xyXG5pbXBvcnQgeyBEYXRhU291cmNlQ29sdW1uLCBEYXRhU291cmNlQ29sdW1uU3RhdHVzIH0gZnJvbSAnLi9kYXRhLXNvdXJjZS1jb2x1bW4nO1xyXG5pbXBvcnQgeyBEYXRhU291cmNlUmVzdWx0cyB9IGZyb20gJy4vZGF0YS1zb3VyY2UtcmVzdWx0cyc7XHJcbmltcG9ydCB7IEZvdW5kYXRpb25Xb3JrRmluZFdvcmtJdGVtUmVzdWx0TW9kZWwgfSBmcm9tICdlNWNvcmUtYW5ndWxhci1zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IEZvdW5kYXRpb25Xb3JrRmluZFdvcmtJdGVtQ29sdW1uRGVmTW9kZWwgfSBmcm9tICdlNWNvcmUtYW5ndWxhci1zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IFNlYXJjaERhdGFTb3VyY2VPcHRpb25zIH0gZnJvbSAnLi9zZWFyY2gtZGF0YS1zb3VyY2Utb3B0aW9ucyc7XHJcbmltcG9ydCB7IERhdGFTb3VyY2VPcHRpb25zIH0gZnJvbSAnLi9kYXRhLXNvdXJjZS1vcHRpb25zJztcclxuaW1wb3J0IHsgRGF0YVNvdXJjZVF1ZXJ5IH0gZnJvbSAnLi9kYXRhLXNvdXJjZS1xdWVyeSc7XHJcblxyXG5jb25zdCBURVNUREFUQSA9IHtcclxuICAgICckaWQnOiAnMjExMScsXHJcbiAgICAnZmluZENsYXNzSWQnOiA0LFxyXG4gICAgJ3BhZ2UnOiAwLFxyXG4gICAgJ3BhZ2VTaXplJzogMTAsXHJcbiAgICAncmVzdWx0Q291bnQnOiAxMCxcclxuICAgICd0b3RhbCc6IDI0LFxyXG4gICAgJ2NvbHVtbnMnOiBbXHJcbiAgICAgICB7XHJcbiAgICAgICAgICAnJGlkJzogJzIxMTInLFxyXG4gICAgICAgICAgJ2NvZGUnOiAnSWQnLFxyXG4gICAgICAgICAgJ2xhYmVsJzogJ1dvcmsgSWQnLFxyXG4gICAgICAgICAgJ3R5cGUnOiAnU3lzdGVtLkd1aWQnXHJcbiAgICAgICB9LFxyXG4gICAgICAge1xyXG4gICAgICAgICAgJyRpZCc6ICcyMTEzJyxcclxuICAgICAgICAgICdjb2RlJzogJ1NMQUV4cGlyeURhdGUnLFxyXG4gICAgICAgICAgJ2xhYmVsJzogJ0R1ZSBEYXRlJyxcclxuICAgICAgICAgICd0eXBlJzogJ1N5c3RlbS5EYXRlVGltZSdcclxuICAgICAgIH0sXHJcbiAgICAgICB7XHJcbiAgICAgICAgICAnJGlkJzogJzIxMTQnLFxyXG4gICAgICAgICAgJ2NvZGUnOiAnQWxsb2NhdGlvbicsXHJcbiAgICAgICAgICAnbGFiZWwnOiAnQWxsb2NhdGlvbicsXHJcbiAgICAgICAgICAndHlwZSc6ICdTeXN0ZW0uU3RyaW5nJ1xyXG4gICAgICAgfSxcclxuICAgICAgIHtcclxuICAgICAgICAgICckaWQnOiAnMjExNScsXHJcbiAgICAgICAgICAnY29kZSc6ICdfTmV4dER1ZVRhc2snLFxyXG4gICAgICAgICAgJ2xhYmVsJzogJ05leHQgRHVlIFRhc2snLFxyXG4gICAgICAgICAgJ3R5cGUnOiAnU3lzdGVtLlN0cmluZydcclxuICAgICAgIH0sXHJcbiAgICAgICB7XHJcbiAgICAgICAgICAnJGlkJzogJzIxMTYnLFxyXG4gICAgICAgICAgJ2NvZGUnOiAnU3RhdHVzX0lkJyxcclxuICAgICAgICAgICdsYWJlbCc6ICdTdGF0dXMnLFxyXG4gICAgICAgICAgJ3R5cGUnOiAnU3lzdGVtLlN0cmluZydcclxuICAgICAgIH0sXHJcbiAgICAgICB7XHJcbiAgICAgICAgICAnJGlkJzogJzIxMTcnLFxyXG4gICAgICAgICAgJ2NvZGUnOiAnQXNzaWduZWRVc2VyJyxcclxuICAgICAgICAgICdsYWJlbCc6ICdBc3NpZ25lZCBVc2VyJyxcclxuICAgICAgICAgICd0eXBlJzogJ1N5c3RlbS5TdHJpbmcnXHJcbiAgICAgICB9LFxyXG4gICAgICAge1xyXG4gICAgICAgICAgJyRpZCc6ICcyMTE4JyxcclxuICAgICAgICAgICdjb2RlJzogJ0NhdGVnb3J5MV9JZCcsXHJcbiAgICAgICAgICAnbGFiZWwnOiAnQnVzaW5lc3MgQXJlYScsXHJcbiAgICAgICAgICAndHlwZSc6ICdTeXN0ZW0uU3RyaW5nJ1xyXG4gICAgICAgfSxcclxuICAgICAgIHtcclxuICAgICAgICAgICckaWQnOiAnMjExOScsXHJcbiAgICAgICAgICAnY29kZSc6ICdDYXRlZ29yeTNfSWQnLFxyXG4gICAgICAgICAgJ2xhYmVsJzogJ0NhdGVnb3J5JyxcclxuICAgICAgICAgICd0eXBlJzogJ1N5c3RlbS5TdHJpbmcnXHJcbiAgICAgICB9LFxyXG4gICAgICAge1xyXG4gICAgICAgICAgJyRpZCc6ICcyMTIwJyxcclxuICAgICAgICAgICdjb2RlJzogJ0hlYWx0aEZ1bmROdW1iZXInLFxyXG4gICAgICAgICAgJ2xhYmVsJzogJ0NsaWVudCBOdW1iZXInLFxyXG4gICAgICAgICAgJ3R5cGUnOiAnU3lzdGVtLlN0cmluZydcclxuICAgICAgIH0sXHJcbiAgICAgICB7XHJcbiAgICAgICAgICAnJGlkJzogJzIxMjEnLFxyXG4gICAgICAgICAgJ2NvZGUnOiAnRmlyc3ROYW1lJyxcclxuICAgICAgICAgICdsYWJlbCc6ICdGaXJzdCBOYW1lJyxcclxuICAgICAgICAgICd0eXBlJzogJ1N5c3RlbS5TdHJpbmcnXHJcbiAgICAgICB9LFxyXG4gICAgICAge1xyXG4gICAgICAgICAgJyRpZCc6ICcyMTIyJyxcclxuICAgICAgICAgICdjb2RlJzogJ1N1cm5hbWUnLFxyXG4gICAgICAgICAgJ2xhYmVsJzogJ1N1cm5hbWUnLFxyXG4gICAgICAgICAgJ3R5cGUnOiAnU3lzdGVtLlN0cmluZydcclxuICAgICAgIH0sXHJcbiAgICAgICB7XHJcbiAgICAgICAgICAnJGlkJzogJzIxMjMnLFxyXG4gICAgICAgICAgJ2NvZGUnOiAnQ2F0ZWdvcnkyX0lkJyxcclxuICAgICAgICAgICdsYWJlbCc6ICdQcm9kdWN0IFR5cGUnLFxyXG4gICAgICAgICAgJ3R5cGUnOiAnU3lzdGVtLlN0cmluZydcclxuICAgICAgIH0sXHJcbiAgICAgICB7XHJcbiAgICAgICAgICAnJGlkJzogJzIxMjQnLFxyXG4gICAgICAgICAgJ2NvZGUnOiAnUHJvdmlkZXJOYW1lJyxcclxuICAgICAgICAgICdsYWJlbCc6ICdQcm92aWRlciBOYW1lJyxcclxuICAgICAgICAgICd0eXBlJzogJ1N5c3RlbS5TdHJpbmcnXHJcbiAgICAgICB9LFxyXG4gICAgICAge1xyXG4gICAgICAgICAgJyRpZCc6ICcyMTI1JyxcclxuICAgICAgICAgICdjb2RlJzogJ1Byb3ZpZGVyTnVtYmVyJyxcclxuICAgICAgICAgICdsYWJlbCc6ICdQcm92aWRlciBOdW1iZXInLFxyXG4gICAgICAgICAgJ3R5cGUnOiAnU3lzdGVtLlN0cmluZydcclxuICAgICAgIH0sXHJcbiAgICAgICB7XHJcbiAgICAgICAgICAnJGlkJzogJzIxMjYnLFxyXG4gICAgICAgICAgJ2NvZGUnOiAnUmVmZXJlbmNlJyxcclxuICAgICAgICAgICdsYWJlbCc6ICdSZWZlcmVuY2UnLFxyXG4gICAgICAgICAgJ3R5cGUnOiAnU3lzdGVtLkludDMyJ1xyXG4gICAgICAgfSxcclxuICAgICAgIHtcclxuICAgICAgICAgICckaWQnOiAnMjEyNycsXHJcbiAgICAgICAgICAnY29kZSc6ICdSZWxhdGVkSXRlbScsXHJcbiAgICAgICAgICAnbGFiZWwnOiAnUmVsYXRlZCBJdGVtcycsXHJcbiAgICAgICAgICAndHlwZSc6ICdTeXN0ZW0uU3RyaW5nJ1xyXG4gICAgICAgfSxcclxuICAgICAgIHtcclxuICAgICAgICAgICckaWQnOiAnMjEyOCcsXHJcbiAgICAgICAgICAnY29kZSc6ICdfU0xBRXhwaXJ5U3RhdHVzJyxcclxuICAgICAgICAgICdsYWJlbCc6ICdfU0xBRXhwaXJ5U3RhdHVzJyxcclxuICAgICAgICAgICd0eXBlJzogJ1N5c3RlbS5TdHJpbmcnXHJcbiAgICAgICB9XHJcbiAgICBdLFxyXG4gICAgJ3Jlc3VsdHMnOiBbXHJcbiAgICAgICBbXHJcbiAgICAgICAgICAnY2EzYTEyMTktMDNlYi0xMWU5LTk2ODItMDA1MDU2YmE2NWU0JyxcclxuICAgICAgICAgICcyMDE4LTEyLTI0VDExOjExOjI3KzExOjAwJyxcclxuICAgICAgICAgICcyfDEwMDV8MTAxMXwwJyxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAnQ29tcGxldGUnLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICdNZW1iZXIgSGVhbHRoJyxcclxuICAgICAgICAgICdCZW5lZml0IEVsaWdpYmlsaXR5JyxcclxuICAgICAgICAgICcyOTQwNTU2NCcsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICdBbmNpbGxhcnkgQmVuZWZpdHMgTWFuYWdlbWVudCcsXHJcbiAgICAgICAgICAnJyxcclxuICAgICAgICAgICcyNScsXHJcbiAgICAgICAgICAxNzc4LFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICd3aXRoaW4nXHJcbiAgICAgICBdLFxyXG4gICAgICAgW1xyXG4gICAgICAgICAgJzYwM2I4MmZmLTAzZTYtMTFlOS05NjgyLTAwNTA1NmJhNjVlNCcsXHJcbiAgICAgICAgICAnMjAxOC0xMi0yNFQxMDozMjo0MSsxMTowMCcsXHJcbiAgICAgICAgICAnMnwxMDAyfDEwMzd8MCcsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgJ0NvbXBsZXRlJyxcclxuICAgICAgICAgICdMZW8gU2FudG9zJyxcclxuICAgICAgICAgICdNZW1iZXIgSGVhbHRoJyxcclxuICAgICAgICAgICdCZW5lZml0IEVsaWdpYmlsaXR5JyxcclxuICAgICAgICAgICcyOTQwNTU2NCcsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICdDbGluaWNhbCBSZXZpZXcnLFxyXG4gICAgICAgICAgJycsXHJcbiAgICAgICAgICAnMjQnLFxyXG4gICAgICAgICAgMTc3NixcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAnd2l0aGluJ1xyXG4gICAgICAgXSxcclxuICAgICAgIFtcclxuICAgICAgICAgICcyYjQ3MDFmNS0wM2U2LTExZTktOTY4Mi0wMDUwNTZiYTY1ZTQnLFxyXG4gICAgICAgICAgJzIwMTgtMTItMjRUMTA6MzE6MTIrMTE6MDAnLFxyXG4gICAgICAgICAgJzJ8MTAwNXwxMDEwfDAnLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICdBY3RpdmUnLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICdNZW1iZXIgSGVhbHRoJyxcclxuICAgICAgICAgICdCZW5lZml0IFJldmlldycsXHJcbiAgICAgICAgICAnMjk0MDU1NjQnLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAnQW5jaWxsYXJ5IEJlbmVmaXRzIE1hbmFnZW1lbnQnLFxyXG4gICAgICAgICAgJycsXHJcbiAgICAgICAgICAnMjInLFxyXG4gICAgICAgICAgMTc3NSxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAnd2l0aGluJ1xyXG4gICAgICAgXSxcclxuICAgICAgIFtcclxuICAgICAgICAgICdmMmU0Y2U1Ny0wMzNkLTExZTktOTY4Mi0wMDUwNTZiYTY1ZTQnLFxyXG4gICAgICAgICAgJzIwMTgtMTItMjFUMTQ6Mjc6MDIrMTE6MDAnLFxyXG4gICAgICAgICAgJzJ8MTAwNXwxMDE0fDAnLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICdDb21wbGV0ZScsXHJcbiAgICAgICAgICAnRGV2YXNoaSBXZXN1bXBlcnVtYScsXHJcbiAgICAgICAgICAnTWVtYmVyIEhlYWx0aCcsXHJcbiAgICAgICAgICAnSW52ZXN0aWdhdGlvbicsXHJcbiAgICAgICAgICAnMjk0MDU1NjQnLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAnQW5jaWxsYXJ5IEJlbmVmaXRzIE1hbmFnZW1lbnQnLFxyXG4gICAgICAgICAgJycsXHJcbiAgICAgICAgICAnMTknLFxyXG4gICAgICAgICAgMTc2OSxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAnd2l0aGluJ1xyXG4gICAgICAgXSxcclxuICAgICAgIFtcclxuICAgICAgICAgICc2ZDU3NWM2Yy0wMzI3LTExZTktOTY4Mi0wMDUwNTZiYTY1ZTQnLFxyXG4gICAgICAgICAgJzIwMTgtMTItMjFUMTE6NDU6NDkrMTE6MDAnLFxyXG4gICAgICAgICAgJzJ8MTAwNnwxMDEyfDAnLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICdDb21wbGV0ZScsXHJcbiAgICAgICAgICAnVmluaCBUYW5nJyxcclxuICAgICAgICAgICdNZW1iZXIgSGVhbHRoJyxcclxuICAgICAgICAgICdVbmNsYXNzaWZpZWQnLFxyXG4gICAgICAgICAgJzI5NDA1NTY0JyxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgJ1VuY2xhc3NpZmllZCcsXHJcbiAgICAgICAgICAnJyxcclxuICAgICAgICAgICcxOCcsXHJcbiAgICAgICAgICAxNzY4LFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICd3aXRoaW4nXHJcbiAgICAgICBdLFxyXG4gICAgICAgW1xyXG4gICAgICAgICAgJ2Q0MTdjMDU3LTAzMjYtMTFlOS05NjgyLTAwNTA1NmJhNjVlNCcsXHJcbiAgICAgICAgICAnMjAxOC0xMi0yMVQxMTo0MTozMisxMTowMCcsXHJcbiAgICAgICAgICAnMnwxMDA2fDEwMTJ8MCcsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgJ0NvbXBsZXRlJyxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAnTWVtYmVyIEhlYWx0aCcsXHJcbiAgICAgICAgICAnVW5jbGFzc2lmaWVkJyxcclxuICAgICAgICAgICcyOTQwNTU2NCcsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICdVbmNsYXNzaWZpZWQnLFxyXG4gICAgICAgICAgJycsXHJcbiAgICAgICAgICAnMTcnLFxyXG4gICAgICAgICAgMTc2NyxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAnd2l0aGluJ1xyXG4gICAgICAgXSxcclxuICAgICAgIFtcclxuICAgICAgICAgICdmNzJhNWIwNS0wMzI1LTExZTktOTY4Mi0wMDUwNTZiYTY1ZTQnLFxyXG4gICAgICAgICAgJzIwMTgtMTItMjFUMTE6MzU6MjIrMTE6MDAnLFxyXG4gICAgICAgICAgJzJ8MTAwNHwxMDE3fDAnLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICdDb21wbGV0ZScsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgJ01lbWJlciBIZWFsdGgnLFxyXG4gICAgICAgICAgJ0V4Z3JhdGlhJyxcclxuICAgICAgICAgICcyOTQwNTU2NCcsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICdDb21wZW5zYWJsZScsXHJcbiAgICAgICAgICAnJyxcclxuICAgICAgICAgICcxNicsXHJcbiAgICAgICAgICAxNzY2LFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICd3aXRoaW4nXHJcbiAgICAgICBdLFxyXG4gICAgICAgW1xyXG4gICAgICAgICAgJ2U4OGZlZmU3LTAzMjUtMTFlOS05NjgyLTAwNTA1NmJhNjVlNCcsXHJcbiAgICAgICAgICAnMjAxOC0xMi0yMVQxMTozNDo1NysxMTowMCcsXHJcbiAgICAgICAgICAnMnwxMDA1fDEwMTB8MCcsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgJ0NvbXBsZXRlJyxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAnTWVtYmVyIEhlYWx0aCcsXHJcbiAgICAgICAgICAnQmVuZWZpdCBSZXZpZXcnLFxyXG4gICAgICAgICAgJzI5NDA1NTY0JyxcclxuICAgICAgICAgbnVsbCxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAnQW5jaWxsYXJ5IEJlbmVmaXRzIE1hbmFnZW1lbnQnLFxyXG4gICAgICAgICAgJycsXHJcbiAgICAgICAgICAnMTUnLFxyXG4gICAgICAgICAgMTc2NSxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAnd2l0aGluJ1xyXG4gICAgICAgXSxcclxuICAgICAgIFtcclxuICAgICAgICAgICc2NDRlM2Q4Yy0wMzI1LTExZTktOTY4Mi0wMDUwNTZiYTY1ZTQnLFxyXG4gICAgICAgICAgJzIwMTgtMTItMjFUMTE6MzE6MTUrMTE6MDAnLFxyXG4gICAgICAgICAgJzJ8MTAwNXwxMDEwfDAnLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICdDb21wbGV0ZScsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgJ01lbWJlciBIZWFsdGgnLFxyXG4gICAgICAgICAgJ0JlbmVmaXQgUmV2aWV3JyxcclxuICAgICAgICAgICcyOTQwNTU2NCcsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICdBbmNpbGxhcnkgQmVuZWZpdHMgTWFuYWdlbWVudCcsXHJcbiAgICAgICAgICAnJyxcclxuICAgICAgICAgICcxNCcsXHJcbiAgICAgICAgICAxNzY0LFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICd3aXRoaW4nXHJcbiAgICAgICBdLFxyXG4gICAgICAgW1xyXG4gICAgICAgICAgJzM1ODhlNjc4LTAzMjUtMTFlOS05NjgyLTAwNTA1NmJhNjVlNCcsXHJcbiAgICAgICAgICAnMjAxOC0xMi0yMVQxMToyOTo1NysxMTowMCcsXHJcbiAgICAgICAgICAnMnwxMDAzfDEwMzF8MCcsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgJ0NvbXBsZXRlJyxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAnTWVtYmVyIEhlYWx0aCcsXHJcbiAgICAgICAgICAnSW52ZXN0aWdhdGlvbicsXHJcbiAgICAgICAgICAnMjk0MDU1NjQnLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAnSW52ZXN0aWdhdGlvbnMnLFxyXG4gICAgICAgICAgJycsXHJcbiAgICAgICAgICAnMTMnLFxyXG4gICAgICAgICAgMTc2MyxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAnd2l0aGluJ1xyXG4gICAgICAgXVxyXG4gICAgXVxyXG4gfSA7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiBudWxsIC8vICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgU2VhcmNoRGF0YVNvdXJjZVNlcnZpY2UgaW1wbGVtZW50cyBJRGF0YVNvdXJjZSB7XHJcblxyXG4gICAgcmVhZG9ubHkgU2xhRXhwaXJ5Q29sdW1uQ29kZSA9ICdfU0xBRXhwaXJ5U3RhdHVzJztcclxuICAgIHJlYWRvbmx5IE5leHRUYXNrQ29sdW1uQ29kZSA9ICdfTmV4dER1ZVRhc2snO1xyXG5cclxuICAgIHNlYXJjaERlZmluaXRpb25JZCA9IDA7XHJcbiAgICBzZWFyY2hPcHRpb25zOiBTZWFyY2hEYXRhU291cmNlT3B0aW9ucyA9IHt9IDtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNlYXJjaERlZmluaXRpb25TZXJ2aWNlOiBVaVNlYXJjaERlZmluaXRpb25TZXJ2aWNlLCBwcml2YXRlIHNlYXJjaFNlcnZpY2U6IFdvcmtTZWFyY2hGb3VuZGF0aW9uU2VydmljZSkge1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkZWZhdWx0T3B0aW9ucygpOiBEYXRhU291cmNlT3B0aW9ucyB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLnNlYXJjaE9wdGlvbnMpIDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0RGVmYXVsdE9wdGlvbnMob3B0aW9uczogRGF0YVNvdXJjZU9wdGlvbnMpIHtcclxuICAgICAgICB0aGlzLnNlYXJjaE9wdGlvbnMgPSB7Li4ub3B0aW9uc30gOyAvLyBjbG9uZVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRTZWFyY2hEZWZpbml0aW9uSWQoaWQ6IG51bWJlcik6IFNlYXJjaERhdGFTb3VyY2VTZXJ2aWNlIHtcclxuICAgICAgICB0aGlzLnNlYXJjaERlZmluaXRpb25JZCA9IGlkO1xyXG4gICAgICAgIHJldHVybiAodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgY29sdW1ucygpOiBPYnNlcnZhYmxlPERhdGFTb3VyY2VDb2x1bW5bXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlYXJjaERlZmluaXRpb25TZXJ2aWNlLmdldCh0aGlzLnNlYXJjaERlZmluaXRpb25JZCkucGlwZTxEYXRhU291cmNlQ29sdW1uW10+KFxyXG4gICAgICAgICAgICBtYXAociA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5zID0gci5zZWFyY2hGaWVsZHMubWFwPERhdGFTb3VyY2VDb2x1bW4+KHNmID0+IDxEYXRhU291cmNlQ29sdW1uPntcclxuICAgICAgICAgICAgICAgICAgICBjb2RlOiBzZi5maWVsZERlZmluaXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogc2YuZmllbGRMYWJlbCxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBzZi5maWVsZERhdGFUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1czogc2YuZmllbGRTdGF0dXNcclxuICAgICAgICAgICAgICAgIH0pIDtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFkZE9wdGlvbmFsQ29sdW1ucyhjb2x1bW5zKSA7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKSA7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhZGRPcHRpb25hbENvbHVtbnMoY29sdW1uczogRGF0YVNvdXJjZUNvbHVtbltdKTogRGF0YVNvdXJjZUNvbHVtbltdIHtcclxuICAgICAgICBpZiAodGhpcy5zZWFyY2hPcHRpb25zKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlYXJjaE9wdGlvbnMuaW5jbHVkZVNsYSkge1xyXG4gICAgICAgICAgICAgICAgLy8gQWRkIHRvIHN0YXJ0XHJcbiAgICAgICAgICAgICAgICBjb2x1bW5zLnVuc2hpZnQoPERhdGFTb3VyY2VDb2x1bW4+e1xyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnU0xBJyxcclxuICAgICAgICAgICAgICAgICAgICBjb2RlOiB0aGlzLlNsYUV4cGlyeUNvbHVtbkNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1NMQScsXHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiBEYXRhU291cmNlQ29sdW1uU3RhdHVzLlNlbGVjdGVkXHJcbiAgICAgICAgICAgICAgICB9KSA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VhcmNoT3B0aW9ucy5pbmNsdWRlTmV4dER1ZVRhc2spIHtcclxuICAgICAgICAgICAgICAgIC8vIEFkZCB0byBlbmRcclxuICAgICAgICAgICAgICAgIGNvbHVtbnMucHVzaCg8RGF0YVNvdXJjZUNvbHVtbj57XHJcbiAgICAgICAgICAgICAgICAgICAgY29kZTogdGhpcy5OZXh0VGFza0NvbHVtbkNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdOZXh0IER1ZSBUYXNrJyxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnSW5wdXQnLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1czogRGF0YVNvdXJjZUNvbHVtblN0YXR1cy5TZWxlY3RlZFxyXG4gICAgICAgICAgICAgICAgfSkgO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoY29sdW1ucykgO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZWFkKHBhZ2U6IG51bWJlciwgcGFnZVNpemU6IG51bWJlciwgb3B0aW9uc0luOiBEYXRhU291cmNlT3B0aW9ucyk6IE9ic2VydmFibGU8RGF0YVNvdXJjZVJlc3VsdHM+IHtcclxuICAgICAgICBjb25zdCBvcHRpb25zOiBTZWFyY2hEYXRhU291cmNlT3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgLi4udGhpcy5zZWFyY2hPcHRpb25zLFxyXG4gICAgICAgICAgICAuLi5vcHRpb25zSW4sXHJcbiAgICAgICAgICAgIHBhZ2U6IHBhZ2UsXHJcbiAgICAgICAgICAgIHBhZ2VTaXplOiBwYWdlU2l6ZVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICBjb25zdCBmaWx0ZXJCeSA9IHRoaXMubWFwUXVlcnlUb0ZpbHRlckJ5KG9wdGlvbnMucXVlcnkpIDtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZWFyY2hTZXJ2aWNlLmdldEZpbmRXb3JrSXRlbSh0aGlzLnNlYXJjaERlZmluaXRpb25JZCwgZmlsdGVyQnksIG9wdGlvbnMpXHJcbiAgICAgICAgICAgIC5waXBlPERhdGFTb3VyY2VSZXN1bHRzPihcclxuICAgICAgICAgICAgICAgIG1hcChyZXN1bHRzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3RhbDogcmVzdWx0cy50b3RhbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogdGhpcy5tYXBSZXN1bHRzKHJlc3VsdHMpXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgKiBUaGUgZGF0YSB0aGF0IGNvbWVzIGJhY2sgZnJvbSB0aGUgQVBJIGlzIGEgY29sdW1ucyBkZWZpbnRpb24gYW5kIGFuIGFycmF5XHJcbiAgICogb2YgYXJyYXkgb2YgZGF0YS4gV2UgbmVlZCB0byBtYXAgdGhpcyBpbnRvIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCB0aGUgY29sdW1uIHByb3BlcnR5XHJcbiAgICogaWQgYXMgdGhlIG9iamVjdCBrZXkgc28gdGhhdCBpdCdzIGVhc2llciB0byBoYW5kbGUgYnkgdGhlIHRhYmxlLlxyXG4gICAqIEBwYXJhbSBtb2RlbFxyXG4gICAqL1xyXG4gICAgcHJpdmF0ZSBtYXBSZXN1bHRzKG1vZGVsOiBGb3VuZGF0aW9uV29ya0ZpbmRXb3JrSXRlbVJlc3VsdE1vZGVsKTogYW55W10ge1xyXG5cclxuICAgICAgICBjb25zdCBkYXRhOiBhbnlbXVtdID0gbW9kZWwucmVzdWx0cztcclxuICAgICAgICBsZXQgcmVzdWx0czogYW55W107XHJcblxyXG4gICAgICAgIGlmIChtb2RlbCAmJiBtb2RlbC50b3RhbCA+IDAgJiYgbW9kZWwucmVzdWx0cyAmJiBtb2RlbC5jb2x1bW5zKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbERlZnM6IEZvdW5kYXRpb25Xb3JrRmluZFdvcmtJdGVtQ29sdW1uRGVmTW9kZWxbXSA9IG1vZGVsLmNvbHVtbnM7XHJcblxyXG4gICAgICAgICAgICByZXN1bHRzID0gbW9kZWwucmVzdWx0cy5tYXA8YW55PihyID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFSb3c6IGFueVtdID0gcjtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9iamVjdFJvdzogYW55ID0ge307XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGNvbERlZnMubGVuZ3RoOyBjKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5EZWYgPSBjb2xEZWZzW2NdO1xyXG4gICAgICAgICAgICAgICAgICAgIG9iamVjdFJvd1tjb2x1bW5EZWYuY29kZV0gPSBkYXRhUm93W2NdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChvYmplY3RSb3cpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdHMgO1xyXG4gICAgfVxyXG5cclxuICAgIC8vICBJbiBvcmRlciB0byB1c2UgdGhlIGZvdW5kYXRpb24gc2VydmljZSB3ZSBuZWVkIHRvIG1hcCB0aGUgRGF0YVNvdXJjZVF1ZXJ5IGludG8gXHJcbiAgICAvLyAgdGhlIHVuZGVybHlpbmcgZm91bmRhdGlvbiBxdWVyeVxyXG4gICAgLy8gXHR7XHJcbiAgICAvLyBcdFx0J2ZpbHRlcnMnOiBbXHJcbiAgICAvLyBcdCAgXHRcdHtcclxuICAgIC8vIFx0XHRcdFx0J2ZpZWxkJzogJ3N0cmluZycsXHJcbiAgICAvLyBcdFx0XHRcdCdvcGVyYXRvcic6ICdzdHJpbmcnLFxyXG4gICAgLy8gXHRcdFx0XHQndmFsdWUnOiAnc3RyaW5nJ1xyXG4gICAgLy8gXHQgIFx0XHR9XHJcbiAgICAvLyBcdFx0XSxcclxuICAgIC8vIFx0XHQnbG9naWMnOiAnc3RyaW5nJ1xyXG4gICAgLy8gXHR9XHJcbiAgICBwcml2YXRlIG1hcFF1ZXJ5VG9GaWx0ZXJCeShxdWVyeTogRGF0YVNvdXJjZVF1ZXJ5KTogYW55IHtcclxuICAgICAgICBsZXQgZmlsdGVyQnkgPSB7fSA7XHJcbiAgICAgICAgaWYgKHF1ZXJ5ICYmIHF1ZXJ5LkV4cHJlc3Npb25zICYmIHF1ZXJ5LkV4cHJlc3Npb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgZmlsdGVycyA9IHF1ZXJ5LkV4cHJlc3Npb25zXHJcbiAgICAgICAgICAgICAgICAuZmlsdGVyKCBlID0+IGUuVmFsdWUgKVxyXG4gICAgICAgICAgICAgICAgLm1hcCggZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQgOiBlLkZpZWxkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA6IGUuVmFsdWVcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfSkgO1xyXG4gICAgICAgICAgICBmaWx0ZXJCeSA9IHtcclxuICAgICAgICAgICAgICAgIGZpbHRlcnMgOiBmaWx0ZXJzXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoZmlsdGVyQnkpIDtcclxuICAgIH1cclxufSJdfQ==