ng-zorro-antd
Version:
An enterprise-class UI components based on Ant Design and Angular
545 lines • 44.5 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: transfer.component.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { __decorate, __metadata, __read, __spread, __values } from "tslib";
/**
* @license
* Copyright Alibaba.com All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
*/
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, QueryList, TemplateRef, ViewChildren, ViewEncapsulation } from '@angular/core';
import { InputBoolean, toArray } from 'ng-zorro-antd/core/util';
import { NzI18nService } from 'ng-zorro-antd/i18n';
import { of, Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import { NzTransferListComponent } from './transfer-list.component';
var NzTransferComponent = /** @class */ (function () {
// #endregion
function NzTransferComponent(cdr, i18n) {
var _this = this;
this.cdr = cdr;
this.i18n = i18n;
this.unsubscribe$ = new Subject();
this.locale = {};
this.leftFilter = '';
this.rightFilter = '';
// #region fields
this.nzDisabled = false;
this.nzDataSource = [];
this.nzTitles = ['', ''];
this.nzOperations = [];
this.nzShowSelectAll = true;
this.nzCanMove = (/**
* @param {?} arg
* @return {?}
*/
function (arg) { return of(arg.list); });
this.nzRenderList = null;
this.nzShowSearch = false;
this.nzTargetKeys = [];
this.nzSelectedKeys = [];
// events
this.nzChange = new EventEmitter();
this.nzSearchChange = new EventEmitter();
this.nzSelectChange = new EventEmitter();
// #endregion
// #region process data
// left
this.leftDataSource = [];
// right
this.rightDataSource = [];
this.handleLeftSelectAll = (/**
* @param {?} checked
* @return {?}
*/
function (checked) { return _this.handleSelect('left', checked); });
this.handleRightSelectAll = (/**
* @param {?} checked
* @return {?}
*/
function (checked) { return _this.handleSelect('right', checked); });
this.handleLeftSelect = (/**
* @param {?} item
* @return {?}
*/
function (item) { return _this.handleSelect('left', !!item.checked, item); });
this.handleRightSelect = (/**
* @param {?} item
* @return {?}
*/
function (item) { return _this.handleSelect('right', !!item.checked, item); });
// #endregion
// #region operation
this.leftActive = false;
this.rightActive = false;
this.moveToLeft = (/**
* @return {?}
*/
function () { return _this.moveTo('left'); });
this.moveToRight = (/**
* @return {?}
*/
function () { return _this.moveTo('right'); });
}
/**
* @private
* @return {?}
*/
NzTransferComponent.prototype.splitDataSource = /**
* @private
* @return {?}
*/
function () {
var _this = this;
this.leftDataSource = [];
this.rightDataSource = [];
this.nzDataSource.forEach((/**
* @param {?} record
* @return {?}
*/
function (record) {
if (record.direction === 'right') {
record.direction = 'right';
_this.rightDataSource.push(record);
}
else {
record.direction = 'left';
_this.leftDataSource.push(record);
}
}));
};
/**
* @private
* @param {?} direction
* @return {?}
*/
NzTransferComponent.prototype.getCheckedData = /**
* @private
* @param {?} direction
* @return {?}
*/
function (direction) {
return this[direction === 'left' ? 'leftDataSource' : 'rightDataSource'].filter((/**
* @param {?} w
* @return {?}
*/
function (w) { return w.checked; }));
};
/**
* @param {?} direction
* @param {?} checked
* @param {?=} item
* @return {?}
*/
NzTransferComponent.prototype.handleSelect = /**
* @param {?} direction
* @param {?} checked
* @param {?=} item
* @return {?}
*/
function (direction, checked, item) {
/** @type {?} */
var list = this.getCheckedData(direction);
this.updateOperationStatus(direction, list.length);
this.nzSelectChange.emit({ direction: direction, checked: checked, list: list, item: item });
};
/**
* @param {?} ret
* @return {?}
*/
NzTransferComponent.prototype.handleFilterChange = /**
* @param {?} ret
* @return {?}
*/
function (ret) {
this.nzSearchChange.emit(ret);
};
/**
* @private
* @param {?} direction
* @param {?=} count
* @return {?}
*/
NzTransferComponent.prototype.updateOperationStatus = /**
* @private
* @param {?} direction
* @param {?=} count
* @return {?}
*/
function (direction, count) {
this[direction === 'right' ? 'leftActive' : 'rightActive'] =
(typeof count === 'undefined' ? this.getCheckedData(direction).filter((/**
* @param {?} w
* @return {?}
*/
function (w) { return !w.disabled; })).length : count) > 0;
};
/**
* @param {?} direction
* @return {?}
*/
NzTransferComponent.prototype.moveTo = /**
* @param {?} direction
* @return {?}
*/
function (direction) {
var _this = this;
/** @type {?} */
var oppositeDirection = direction === 'left' ? 'right' : 'left';
this.updateOperationStatus(oppositeDirection, 0);
/** @type {?} */
var datasource = direction === 'left' ? this.rightDataSource : this.leftDataSource;
/** @type {?} */
var moveList = datasource.filter((/**
* @param {?} item
* @return {?}
*/
function (item) { return item.checked === true && !item.disabled; }));
this.nzCanMove({ direction: direction, list: moveList }).subscribe((/**
* @param {?} newMoveList
* @return {?}
*/
function (newMoveList) {
return _this.truthMoveTo(direction, newMoveList.filter((/**
* @param {?} i
* @return {?}
*/
function (i) { return !!i; })));
}), (/**
* @return {?}
*/
function () { return moveList.forEach((/**
* @param {?} i
* @return {?}
*/
function (i) { return (i.checked = false); })); }));
};
/**
* @private
* @param {?} direction
* @param {?} list
* @return {?}
*/
NzTransferComponent.prototype.truthMoveTo = /**
* @private
* @param {?} direction
* @param {?} list
* @return {?}
*/
function (direction, list) {
var e_1, _a;
/** @type {?} */
var oppositeDirection = direction === 'left' ? 'right' : 'left';
/** @type {?} */
var datasource = direction === 'left' ? this.rightDataSource : this.leftDataSource;
/** @type {?} */
var targetDatasource = direction === 'left' ? this.leftDataSource : this.rightDataSource;
try {
for (var list_1 = __values(list), list_1_1 = list_1.next(); !list_1_1.done; list_1_1 = list_1.next()) {
var item = list_1_1.value;
item.checked = false;
item.hide = false;
item.direction = direction;
datasource.splice(datasource.indexOf(item), 1);
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (list_1_1 && !list_1_1.done && (_a = list_1.return)) _a.call(list_1);
}
finally { if (e_1) throw e_1.error; }
}
targetDatasource.splice.apply(targetDatasource, __spread([0, 0], list));
this.updateOperationStatus(oppositeDirection);
this.nzChange.emit({
from: oppositeDirection,
to: direction,
list: list
});
this.markForCheckAllList();
};
/**
* @private
* @return {?}
*/
NzTransferComponent.prototype.markForCheckAllList = /**
* @private
* @return {?}
*/
function () {
if (!this.lists) {
return;
}
this.lists.forEach((/**
* @param {?} i
* @return {?}
*/
function (i) { return i.markForCheck(); }));
};
/**
* @private
* @return {?}
*/
NzTransferComponent.prototype.handleNzTargetKeys = /**
* @private
* @return {?}
*/
function () {
/** @type {?} */
var keys = toArray(this.nzTargetKeys);
/** @type {?} */
var hasOwnKey = (/**
* @param {?} e
* @return {?}
*/
function (e) { return e.hasOwnProperty('key'); });
this.leftDataSource.forEach((/**
* @param {?} e
* @return {?}
*/
function (e) {
if (hasOwnKey(e) && keys.indexOf(e.key) !== -1 && !e.disabled) {
e.checked = true;
}
}));
this.moveToRight();
};
/**
* @private
* @return {?}
*/
NzTransferComponent.prototype.handleNzSelectedKeys = /**
* @private
* @return {?}
*/
function () {
/** @type {?} */
var keys = toArray(this.nzSelectedKeys);
this.nzDataSource.forEach((/**
* @param {?} e
* @return {?}
*/
function (e) {
if (keys.indexOf(e.key) !== -1) {
e.checked = true;
}
}));
/** @type {?} */
var term = (/**
* @param {?} ld
* @return {?}
*/
function (ld) { return ld.disabled === false && ld.checked === true; });
this.rightActive = this.leftDataSource.some(term);
this.leftActive = this.rightDataSource.some(term);
};
/**
* @return {?}
*/
NzTransferComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
var _this = this;
this.i18n.localeChange.pipe(takeUntil(this.unsubscribe$)).subscribe((/**
* @return {?}
*/
function () {
_this.locale = _this.i18n.getLocaleData('Transfer');
_this.markForCheckAllList();
}));
};
/**
* @param {?} changes
* @return {?}
*/
NzTransferComponent.prototype.ngOnChanges = /**
* @param {?} changes
* @return {?}
*/
function (changes) {
if (changes.nzDataSource) {
this.splitDataSource();
this.updateOperationStatus('left');
this.updateOperationStatus('right');
this.cdr.detectChanges();
this.markForCheckAllList();
}
if (changes.nzTargetKeys) {
this.handleNzTargetKeys();
}
if (changes.nzSelectedKeys) {
this.handleNzSelectedKeys();
}
};
/**
* @return {?}
*/
NzTransferComponent.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
this.unsubscribe$.next();
this.unsubscribe$.complete();
};
NzTransferComponent.decorators = [
{ type: Component, args: [{
selector: 'nz-transfer',
exportAs: 'nzTransfer',
preserveWhitespaces: false,
template: "\n <nz-transfer-list\n class=\"ant-transfer-list\"\n [ngStyle]=\"nzListStyle\"\n data-direction=\"left\"\n direction=\"left\"\n [titleText]=\"nzTitles[0]\"\n [showSelectAll]=\"nzShowSelectAll\"\n [dataSource]=\"leftDataSource\"\n [filter]=\"leftFilter\"\n [filterOption]=\"nzFilterOption\"\n (filterChange)=\"handleFilterChange($event)\"\n [renderList]=\"nzRenderList && nzRenderList[0]\"\n [render]=\"nzRender\"\n [disabled]=\"nzDisabled\"\n [showSearch]=\"nzShowSearch\"\n [searchPlaceholder]=\"nzSearchPlaceholder || locale.searchPlaceholder\"\n [notFoundContent]=\"nzNotFoundContent\"\n [itemUnit]=\"nzItemUnit || locale.itemUnit\"\n [itemsUnit]=\"nzItemsUnit || locale.itemsUnit\"\n [footer]=\"nzFooter\"\n (handleSelect)=\"handleLeftSelect($event)\"\n (handleSelectAll)=\"handleLeftSelectAll($event)\"\n >\n </nz-transfer-list>\n <div class=\"ant-transfer-operation\">\n <button nz-button (click)=\"moveToLeft()\" [disabled]=\"nzDisabled || !leftActive\" [nzType]=\"'primary'\" [nzSize]=\"'small'\">\n <i nz-icon nzType=\"left\"></i><span *ngIf=\"nzOperations[1]\">{{ nzOperations[1] }}</span>\n </button>\n <button nz-button (click)=\"moveToRight()\" [disabled]=\"nzDisabled || !rightActive\" [nzType]=\"'primary'\" [nzSize]=\"'small'\">\n <i nz-icon nzType=\"right\"></i><span *ngIf=\"nzOperations[0]\">{{ nzOperations[0] }}</span>\n </button>\n </div>\n <nz-transfer-list\n class=\"ant-transfer-list\"\n [ngStyle]=\"nzListStyle\"\n data-direction=\"right\"\n direction=\"right\"\n [titleText]=\"nzTitles[1]\"\n [showSelectAll]=\"nzShowSelectAll\"\n [dataSource]=\"rightDataSource\"\n [filter]=\"rightFilter\"\n [filterOption]=\"nzFilterOption\"\n (filterChange)=\"handleFilterChange($event)\"\n [renderList]=\"nzRenderList && nzRenderList[1]\"\n [render]=\"nzRender\"\n [disabled]=\"nzDisabled\"\n [showSearch]=\"nzShowSearch\"\n [searchPlaceholder]=\"nzSearchPlaceholder || locale.searchPlaceholder\"\n [notFoundContent]=\"nzNotFoundContent\"\n [itemUnit]=\"nzItemUnit || locale.itemUnit\"\n [itemsUnit]=\"nzItemsUnit || locale.itemsUnit\"\n [footer]=\"nzFooter\"\n (handleSelect)=\"handleRightSelect($event)\"\n (handleSelectAll)=\"handleRightSelectAll($event)\"\n >\n </nz-transfer-list>\n ",
host: {
'[class.ant-transfer]': "true",
'[class.ant-transfer-disabled]': "nzDisabled",
'[class.ant-transfer-customize-list]': "nzRenderList"
},
encapsulation: ViewEncapsulation.None,
changeDetection: ChangeDetectionStrategy.OnPush
}] }
];
/** @nocollapse */
NzTransferComponent.ctorParameters = function () { return [
{ type: ChangeDetectorRef },
{ type: NzI18nService }
]; };
NzTransferComponent.propDecorators = {
lists: [{ type: ViewChildren, args: [NzTransferListComponent,] }],
nzDisabled: [{ type: Input }],
nzDataSource: [{ type: Input }],
nzTitles: [{ type: Input }],
nzOperations: [{ type: Input }],
nzListStyle: [{ type: Input }],
nzShowSelectAll: [{ type: Input }],
nzItemUnit: [{ type: Input }],
nzItemsUnit: [{ type: Input }],
nzCanMove: [{ type: Input }],
nzRenderList: [{ type: Input }],
nzRender: [{ type: Input }],
nzFooter: [{ type: Input }],
nzShowSearch: [{ type: Input }],
nzFilterOption: [{ type: Input }],
nzSearchPlaceholder: [{ type: Input }],
nzNotFoundContent: [{ type: Input }],
nzTargetKeys: [{ type: Input }],
nzSelectedKeys: [{ type: Input }],
nzChange: [{ type: Output }],
nzSearchChange: [{ type: Output }],
nzSelectChange: [{ type: Output }]
};
__decorate([
InputBoolean(),
__metadata("design:type", Object)
], NzTransferComponent.prototype, "nzDisabled", void 0);
__decorate([
InputBoolean(),
__metadata("design:type", Object)
], NzTransferComponent.prototype, "nzShowSelectAll", void 0);
__decorate([
InputBoolean(),
__metadata("design:type", Object)
], NzTransferComponent.prototype, "nzShowSearch", void 0);
return NzTransferComponent;
}());
export { NzTransferComponent };
if (false) {
/** @type {?} */
NzTransferComponent.ngAcceptInputType_nzDisabled;
/** @type {?} */
NzTransferComponent.ngAcceptInputType_nzShowSelectAll;
/** @type {?} */
NzTransferComponent.ngAcceptInputType_nzShowSearch;
/**
* @type {?}
* @private
*/
NzTransferComponent.prototype.unsubscribe$;
/**
* @type {?}
* @private
*/
NzTransferComponent.prototype.lists;
/** @type {?} */
NzTransferComponent.prototype.locale;
/** @type {?} */
NzTransferComponent.prototype.leftFilter;
/** @type {?} */
NzTransferComponent.prototype.rightFilter;
/** @type {?} */
NzTransferComponent.prototype.nzDisabled;
/** @type {?} */
NzTransferComponent.prototype.nzDataSource;
/** @type {?} */
NzTransferComponent.prototype.nzTitles;
/** @type {?} */
NzTransferComponent.prototype.nzOperations;
/** @type {?} */
NzTransferComponent.prototype.nzListStyle;
/** @type {?} */
NzTransferComponent.prototype.nzShowSelectAll;
/** @type {?} */
NzTransferComponent.prototype.nzItemUnit;
/** @type {?} */
NzTransferComponent.prototype.nzItemsUnit;
/** @type {?} */
NzTransferComponent.prototype.nzCanMove;
/** @type {?} */
NzTransferComponent.prototype.nzRenderList;
/** @type {?} */
NzTransferComponent.prototype.nzRender;
/** @type {?} */
NzTransferComponent.prototype.nzFooter;
/** @type {?} */
NzTransferComponent.prototype.nzShowSearch;
/** @type {?} */
NzTransferComponent.prototype.nzFilterOption;
/** @type {?} */
NzTransferComponent.prototype.nzSearchPlaceholder;
/** @type {?} */
NzTransferComponent.prototype.nzNotFoundContent;
/** @type {?} */
NzTransferComponent.prototype.nzTargetKeys;
/** @type {?} */
NzTransferComponent.prototype.nzSelectedKeys;
/** @type {?} */
NzTransferComponent.prototype.nzChange;
/** @type {?} */
NzTransferComponent.prototype.nzSearchChange;
/** @type {?} */
NzTransferComponent.prototype.nzSelectChange;
/** @type {?} */
NzTransferComponent.prototype.leftDataSource;
/** @type {?} */
NzTransferComponent.prototype.rightDataSource;
/** @type {?} */
NzTransferComponent.prototype.handleLeftSelectAll;
/** @type {?} */
NzTransferComponent.prototype.handleRightSelectAll;
/** @type {?} */
NzTransferComponent.prototype.handleLeftSelect;
/** @type {?} */
NzTransferComponent.prototype.handleRightSelect;
/** @type {?} */
NzTransferComponent.prototype.leftActive;
/** @type {?} */
NzTransferComponent.prototype.rightActive;
/** @type {?} */
NzTransferComponent.prototype.moveToLeft;
/** @type {?} */
NzTransferComponent.prototype.moveToRight;
/**
* @type {?}
* @private
*/
NzTransferComponent.prototype.cdr;
/**
* @type {?}
* @private
*/
NzTransferComponent.prototype.i18n;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctem9ycm8tYW50ZC90cmFuc2Zlci8iLCJzb3VyY2VzIjpbInRyYW5zZmVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBUUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxFQUNOLFNBQVMsRUFFVCxXQUFXLEVBQ1gsWUFBWSxFQUNaLGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxPQUFPLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHM0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFcEU7SUEyTUUsYUFBYTtJQUViLDZCQUFvQixHQUFzQixFQUFVLElBQW1CO1FBQXZFLGlCQUEyRTtRQUF2RCxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUFVLFNBQUksR0FBSixJQUFJLENBQWU7UUFsSS9ELGlCQUFZLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUczQyxXQUFNLEdBQWMsRUFBRSxDQUFDO1FBRXZCLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFDaEIsZ0JBQVcsR0FBRyxFQUFFLENBQUM7O1FBSVEsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQyxpQkFBWSxHQUFtQixFQUFFLENBQUM7UUFDbEMsYUFBUSxHQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzlCLGlCQUFZLEdBQWEsRUFBRSxDQUFDO1FBRVosb0JBQWUs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Qzs7SUFDdkMsMENBQXlDOzs7OztJQXVDN0Isa0NBQThCOzs7OztJQUFFLG1DQUEyQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBBbGliYWJhLmNvbSBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9ORy1aT1JSTy9uZy16b3Jyby1hbnRkL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqL1xuXG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGRyZW4sXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQm9vbGVhbklucHV0LCBOelNhZmVBbnkgfSBmcm9tICduZy16b3Jyby1hbnRkL2NvcmUvdHlwZXMnO1xuaW1wb3J0IHsgSW5wdXRCb29sZWFuLCB0b0FycmF5IH0gZnJvbSAnbmctem9ycm8tYW50ZC9jb3JlL3V0aWwnO1xuaW1wb3J0IHsgTnpJMThuU2VydmljZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvaTE4bic7XG5cbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFRyYW5zZmVyQ2FuTW92ZSwgVHJhbnNmZXJDaGFuZ2UsIFRyYW5zZmVyRGlyZWN0aW9uLCBUcmFuc2Zlckl0ZW0sIFRyYW5zZmVyU2VhcmNoQ2hhbmdlLCBUcmFuc2ZlclNlbGVjdENoYW5nZSB9IGZyb20gJy4vaW50ZXJmYWNlJztcbmltcG9ydCB7IE56VHJhbnNmZXJMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi90cmFuc2Zlci1saXN0LmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ256LXRyYW5zZmVyJyxcbiAgZXhwb3J0QXM6ICduelRyYW5zZmVyJyxcbiAgcHJlc2VydmVXaGl0ZXNwYWNlczogZmFsc2UsXG4gIHRlbXBsYXRlOiBgXG4gICAgPG56LXRyYW5zZmVyLWxpc3RcbiAgICAgIGNsYXNzPVwiYW50LXRyYW5zZmVyLWxpc3RcIlxuICAgICAgW25nU3R5bGVdPVwibnpMaXN0U3R5bGVcIlxuICAgICAgZGF0YS1kaXJlY3Rpb249XCJsZWZ0XCJcbiAgICAgIGRpcmVjdGlvbj1cImxlZnRcIlxuICAgICAgW3RpdGxlVGV4dF09XCJuelRpdGxlc1swXVwiXG4gICAgICBbc2hvd1NlbGVjdEFsbF09XCJuelNob3dTZWxlY3RBbGxcIlxuICAgICAgW2RhdGFTb3VyY2VdPVwibGVmdERhdGFTb3VyY2VcIlxuICAgICAgW2ZpbHRlcl09XCJsZWZ0RmlsdGVyXCJcbiAgICAgIFtmaWx0ZXJPcHRpb25dPVwibnpGaWx0ZXJPcHRpb25cIlxuICAgICAgKGZpbHRlckNoYW5nZSk9XCJoYW5kbGVGaWx0ZXJDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICBbcmVuZGVyTGlzdF09XCJuelJlbmRlckxpc3QgJiYgbnpSZW5kZXJMaXN0WzBdXCJcbiAgICAgIFtyZW5kZXJdPVwibnpSZW5kZXJcIlxuICAgICAgW2Rpc2FibGVkXT1cIm56RGlzYWJsZWRcIlxuICAgICAgW3Nob3dTZWFyY2hdPVwibnpTaG93U2VhcmNoXCJcbiAgICAgIFtzZWFyY2hQbGFjZWhvbGRlcl09XCJuelNlYXJjaFBsYWNlaG9sZGVyIHx8IGxvY2FsZS5zZWFyY2hQbGFjZWhvbGRlclwiXG4gICAgICBbbm90Rm91bmRDb250ZW50XT1cIm56Tm90Rm91bmRDb250ZW50XCJcbiAgICAgIFtpdGVtVW5pdF09XCJuekl0ZW1Vbml0IHx8IGxvY2FsZS5pdGVtVW5pdFwiXG4gICAgICBbaXRlbXNVbml0XT1cIm56SXRlbXNVbml0IHx8IGxvY2FsZS5pdGVtc1VuaXRcIlxuICAgICAgW2Zvb3Rlcl09XCJuekZvb3RlclwiXG4gICAgICAoaGFuZGxlU2VsZWN0KT1cImhhbmRsZUxlZnRTZWxlY3QoJGV2ZW50KVwiXG4gICAgICAoaGFuZGxlU2VsZWN0QWxsKT1cImhhbmRsZUxlZnRTZWxlY3RBbGwoJGV2ZW50KVwiXG4gICAgPlxuICAgIDwvbnotdHJhbnNmZXItbGlzdD5cbiAgICA8ZGl2IGNsYXNzPVwiYW50LXRyYW5zZmVyLW9wZXJhdGlvblwiPlxuICAgICAgPGJ1dHRvbiBuei1idXR0b24gKGNsaWNrKT1cIm1vdmVUb0xlZnQoKVwiIFtkaXNhYmxlZF09XCJuekRpc2FibGVkIHx8ICFsZWZ0QWN0aXZlXCIgW256VHlwZV09XCIncHJpbWFyeSdcIiBbbnpTaXplXT1cIidzbWFsbCdcIj5cbiAgICAgICAgPGkgbnotaWNvbiBuelR5cGU9XCJsZWZ0XCI+PC9pPjxzcGFuICpuZ0lmPVwibnpPcGVyYXRpb25zWzFdXCI+e3sgbnpPcGVyYXRpb25zWzFdIH19PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIG56LWJ1dHRvbiAoY2xpY2spPVwibW92ZVRvUmlnaHQoKVwiIFtkaXNhYmxlZF09XCJuekRpc2FibGVkIHx8ICFyaWdodEFjdGl2ZVwiIFtuelR5cGVdPVwiJ3ByaW1hcnknXCIgW256U2l6ZV09XCInc21hbGwnXCI+XG4gICAgICAgIDxpIG56LWljb24gbnpUeXBlPVwicmlnaHRcIj48L2k+PHNwYW4gKm5nSWY9XCJuek9wZXJhdGlvbnNbMF1cIj57eyBuek9wZXJhdGlvbnNbMF0gfX08L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8bnotdHJhbnNmZXItbGlzdFxuICAgICAgY2xhc3M9XCJhbnQtdHJhbnNmZXItbGlzdFwiXG4gICAgICBbbmdTdHlsZV09XCJuekxpc3RTdHlsZVwiXG4gICAgICBkYXRhLWRpcmVjdGlvbj1cInJpZ2h0XCJcbiAgICAgIGRpcmVjdGlvbj1cInJpZ2h0XCJcbiAgICAgIFt0aXRsZVRleHRdPVwibnpUaXRsZXNbMV1cIlxuICAgICAgW3Nob3dTZWxlY3RBbGxdPVwibnpTaG93U2VsZWN0QWxsXCJcbiAgICAgIFtkYXRhU291cmNlXT1cInJpZ2h0RGF0YVNvdXJjZVwiXG4gICAgICBbZmlsdGVyXT1cInJpZ2h0RmlsdGVyXCJcbiAgICAgIFtmaWx0ZXJPcHRpb25dPVwibnpGaWx0ZXJPcHRpb25cIlxuICAgICAgKGZpbHRlckNoYW5nZSk9XCJoYW5kbGVGaWx0ZXJDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICBbcmVuZGVyTGlzdF09XCJuelJlbmRlckxpc3QgJiYgbnpSZW5kZXJMaXN0WzFdXCJcbiAgICAgIFtyZW5kZXJdPVwibnpSZW5kZXJcIlxuICAgICAgW2Rpc2FibGVkXT1cIm56RGlzYWJsZWRcIlxuICAgICAgW3Nob3dTZWFyY2hdPVwibnpTaG93U2VhcmNoXCJcbiAgICAgIFtzZWFyY2hQbGFjZWhvbGRlcl09XCJuelNlYXJjaFBsYWNlaG9sZGVyIHx8IGxvY2FsZS5zZWFyY2hQbGFjZWhvbGRlclwiXG4gICAgICBbbm90Rm91bmRDb250ZW50XT1cIm56Tm90Rm91bmRDb250ZW50XCJcbiAgICAgIFtpdGVtVW5pdF09XCJuekl0ZW1Vbml0IHx8IGxvY2FsZS5pdGVtVW5pdFwiXG4gICAgICBbaXRlbXNVbml0XT1cIm56SXRlbXNVbml0IHx8IGxvY2FsZS5pdGVtc1VuaXRcIlxuICAgICAgW2Zvb3Rlcl09XCJuekZvb3RlclwiXG4gICAgICAoaGFuZGxlU2VsZWN0KT1cImhhbmRsZVJpZ2h0U2VsZWN0KCRldmVudClcIlxuICAgICAgKGhhbmRsZVNlbGVjdEFsbCk9XCJoYW5kbGVSaWdodFNlbGVjdEFsbCgkZXZlbnQpXCJcbiAgICA+XG4gICAgPC9uei10cmFuc2Zlci1saXN0PlxuICBgLFxuICBob3N0OiB7XG4gICAgJ1tjbGFzcy5hbnQtdHJhbnNmZXJdJzogYHRydWVgLFxuICAgICdbY2xhc3MuYW50LXRyYW5zZmVyLWRpc2FibGVkXSc6IGBuekRpc2FibGVkYCxcbiAgICAnW2NsYXNzLmFudC10cmFuc2Zlci1jdXN0b21pemUtbGlzdF0nOiBgbnpSZW5kZXJMaXN0YFxuICB9LFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBOelRyYW5zZmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9uekRpc2FibGVkOiBCb29sZWFuSW5wdXQ7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9uelNob3dTZWxlY3RBbGw6IEJvb2xlYW5JbnB1dDtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX256U2hvd1NlYXJjaDogQm9vbGVhbklucHV0O1xuXG4gIHByaXZhdGUgdW5zdWJzY3JpYmUkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgQFZpZXdDaGlsZHJlbihOelRyYW5zZmVyTGlzdENvbXBvbmVudClcbiAgcHJpdmF0ZSBsaXN0cyE6IFF1ZXJ5TGlzdDxOelRyYW5zZmVyTGlzdENvbXBvbmVudD47XG4gIGxvY2FsZTogTnpTYWZlQW55ID0ge307XG5cbiAgbGVmdEZpbHRlciA9ICcnO1xuICByaWdodEZpbHRlciA9ICcnO1xuXG4gIC8vICNyZWdpb24gZmllbGRzXG5cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIG56RGlzYWJsZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgbnpEYXRhU291cmNlOiBUcmFuc2Zlckl0ZW1bXSA9IFtdO1xuICBASW5wdXQoKSBuelRpdGxlczogc3RyaW5nW10gPSBbJycsICcnXTtcbiAgQElucHV0KCkgbnpPcGVyYXRpb25zOiBzdHJpbmdbXSA9IFtdO1xuICBASW5wdXQoKSBuekxpc3RTdHlsZTogb2JqZWN0O1xuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgbnpTaG93U2VsZWN0QWxsID0gdHJ1ZTtcbiAgQElucHV0KCkgbnpJdGVtVW5pdDogc3RyaW5nO1xuICBASW5wdXQoKSBuekl0ZW1zVW5pdDogc3RyaW5nO1xuICBASW5wdXQoKSBuekNhbk1vdmU6IChhcmc6IFRyYW5zZmVyQ2FuTW92ZSkgPT4gT2JzZXJ2YWJsZTxUcmFuc2Zlckl0ZW1bXT4gPSAoYXJnOiBUcmFuc2ZlckNhbk1vdmUpID0+IG9mKGFyZy5saXN0KTtcbiAgQElucHV0KCkgbnpSZW5kZXJMaXN0OiBBcnJheTxUZW1wbGF0ZVJlZjxOelNhZmVBbnk+IHwgbnVsbD4gfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgbnpSZW5kZXI6IFRlbXBsYXRlUmVmPE56U2FmZUFueT47XG4gIEBJbnB1dCgpIG56Rm9vdGVyOiBUZW1wbGF0ZVJlZjxOelNhZmVBbnk+O1xuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgbnpTaG93U2VhcmNoID0gZmFsc2U7XG4gIEBJbnB1dCgpIG56RmlsdGVyT3B0aW9uOiAoaW5wdXRWYWx1ZTogc3RyaW5nLCBpdGVtOiBUcmFuc2Zlckl0ZW0pID0+IGJvb2xlYW47XG4gIEBJbnB1dCgpIG56U2VhcmNoUGxhY2Vob2xkZXI6IHN0cmluZztcbiAgQElucHV0KCkgbnpOb3RGb3VuZENvbnRlbnQ6IHN0cmluZztcbiAgQElucHV0KCkgbnpUYXJnZXRLZXlzOiBzdHJpbmdbXSA9IFtdO1xuICBASW5wdXQoKSBuelNlbGVjdGVkS2V5czogc3RyaW5nW10gPSBbXTtcblxuICAvLyBldmVudHNcbiAgQE91dHB1dCgpIHJlYWRvbmx5IG56Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxUcmFuc2ZlckNoYW5nZT4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IG56U2VhcmNoQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxUcmFuc2ZlclNlYXJjaENoYW5nZT4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IG56U2VsZWN0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxUcmFuc2ZlclNlbGVjdENoYW5nZT4oKTtcblxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBwcm9jZXNzIGRhdGFcblxuICAvLyBsZWZ0XG4gIGxlZnREYXRhU291cmNlOiBUcmFuc2Zlckl0ZW1bXSA9IFtdO1xuXG4gIC8vIHJpZ2h0XG4gIHJpZ2h0RGF0YVNvdXJjZTogVHJhbnNmZXJJdGVtW10gPSBbXTtcblxuICBwcml2YXRlIHNwbGl0RGF0YVNvdXJjZSgpOiB2b2lkIHtcbiAgICB0aGlzLmxlZnREYXRhU291cmNlID0gW107XG4gICAgdGhpcy5yaWdodERhdGFTb3VyY2UgPSBbXTtcbiAgICB0aGlzLm56RGF0YVNvdXJjZS5mb3JFYWNoKHJlY29yZCA9PiB7XG4gICAgICBpZiAocmVjb3JkLmRpcmVjdGlvbiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICByZWNvcmQuZGlyZWN0aW9uID0gJ3JpZ2h0JztcbiAgICAgICAgdGhpcy5yaWdodERhdGFTb3VyY2UucHVzaChyZWNvcmQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVjb3JkLmRpcmVjdGlvbiA9ICdsZWZ0JztcbiAgICAgICAgdGhpcy5sZWZ0RGF0YVNvdXJjZS5wdXNoKHJlY29yZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldENoZWNrZWREYXRhKGRpcmVjdGlvbjogVHJhbnNmZXJEaXJlY3Rpb24pOiBUcmFuc2Zlckl0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXNbZGlyZWN0aW9uID09PSAnbGVmdCcgPyAnbGVmdERhdGFTb3VyY2UnIDogJ3JpZ2h0RGF0YVNvdXJjZSddLmZpbHRlcih3ID0+IHcuY2hlY2tlZCk7XG4gIH1cblxuICBoYW5kbGVMZWZ0U2VsZWN0QWxsID0gKGNoZWNrZWQ6IGJvb2xlYW4pID0+IHRoaXMuaGFuZGxlU2VsZWN0KCdsZWZ0JywgY2hlY2tlZCk7XG4gIGhhbmRsZVJpZ2h0U2VsZWN0QWxsID0gKGNoZWNrZWQ6IGJvb2xlYW4pID0+IHRoaXMuaGFuZGxlU2VsZWN0KCdyaWdodCcsIGNoZWNrZWQpO1xuXG4gIGhhbmRsZUxlZnRTZWxlY3QgPSAoaXRlbTogVHJhbnNmZXJJdGVtKSA9PiB0aGlzLmhhbmRsZVNlbGVjdCgnbGVmdCcsICEhaXRlbS5jaGVja2VkLCBpdGVtKTtcbiAgaGFuZGxlUmlnaHRTZWxlY3QgPSAoaXRlbTogVHJhbnNmZXJJdGVtKSA9PiB0aGlzLmhhbmRsZVNlbGVjdCgncmlnaHQnLCAhIWl0ZW0uY2hlY2tlZCwgaXRlbSk7XG5cbiAgaGFuZGxlU2VsZWN0KGRpcmVjdGlvbjogVHJhbnNmZXJEaXJlY3Rpb24sIGNoZWNrZWQ6IGJvb2xlYW4sIGl0ZW0/OiBUcmFuc2Zlckl0ZW0pOiB2b2lkIHtcbiAgICBjb25zdCBsaXN0ID0gdGhpcy5nZXRDaGVja2VkRGF0YShkaXJlY3Rpb24pO1xuICAgIHRoaXMudXBkYXRlT3BlcmF0aW9uU3RhdHVzKGRpcmVjdGlvbiwgbGlzdC5sZW5ndGgpO1xuICAgIHRoaXMubnpTZWxlY3RDaGFuZ2UuZW1pdCh7IGRpcmVjdGlvbiwgY2hlY2tlZCwgbGlzdCwgaXRlbSB9KTtcbiAgfVxuXG4gIGhhbmRsZUZpbHRlckNoYW5nZShyZXQ6IHsgZGlyZWN0aW9uOiBUcmFuc2ZlckRpcmVjdGlvbjsgdmFsdWU6IHN0cmluZyB9KTogdm9pZCB7XG4gICAgdGhpcy5uelNlYXJjaENoYW5nZS5lbWl0KHJldCk7XG4gIH1cblxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBvcGVyYXRpb25cblxuICBsZWZ0QWN0aXZlID0gZmFsc2U7XG4gIHJpZ2h0QWN0aXZlID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSB1cGRhdGVPcGVyYXRpb25TdGF0dXMoZGlyZWN0aW9uOiBUcmFuc2ZlckRpcmVjdGlvbiwgY291bnQ/OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzW2RpcmVjdGlvbiA9PT0gJ3JpZ2h0JyA/ICdsZWZ0QWN0aXZlJyA6ICdyaWdodEFjdGl2ZSddID1cbiAgICAgICh0eXBlb2YgY291bnQgPT09ICd1bmRlZmluZWQnID8gdGhpcy5nZXRDaGVja2VkRGF0YShkaXJlY3Rpb24pLmZpbHRlcih3ID0+ICF3LmRpc2FibGVkKS5sZW5ndGggOiBjb3VudCkgPiAwO1xuICB9XG5cbiAgbW92ZVRvTGVmdCA9ICgpID0+IHRoaXMubW92ZVRvKCdsZWZ0Jyk7XG4gIG1vdmVUb1JpZ2h0ID0gKCkgPT4gdGhpcy5tb3ZlVG8oJ3JpZ2h0Jyk7XG5cbiAgbW92ZVRvKGRpcmVjdGlvbjogVHJhbnNmZXJEaXJlY3Rpb24pOiB2b2lkIHtcbiAgICBjb25zdCBvcHBvc2l0ZURpcmVjdGlvbiA9IGRpcmVjdGlvbiA9PT0gJ2xlZnQnID8gJ3JpZ2h0JyA6ICdsZWZ0JztcbiAgICB0aGlzLnVwZGF0ZU9wZXJhdGlvblN0YXR1cyhvcHBvc2l0ZURpcmVjdGlvbiwgMCk7XG4gICAgY29uc3QgZGF0YXNvdXJjZSA9IGRpcmVjdGlvbiA9PT0gJ2xlZnQnID8gdGhpcy5yaWdodERhdGFTb3VyY2UgOiB0aGlzLmxlZnREYXRhU291cmNlO1xuICAgIGNvbnN0IG1vdmVMaXN0ID0gZGF0YXNvdXJjZS5maWx0ZXIoaXRlbSA9PiBpdGVtLmNoZWNrZWQgPT09IHRydWUgJiYgIWl0ZW0uZGlzYWJsZWQpO1xuICAgIHRoaXMubnpDYW5Nb3ZlKHsgZGlyZWN0aW9uLCBsaXN0OiBtb3ZlTGlzdCB9KS5zdWJzY3JpYmUoXG4gICAgICBuZXdNb3ZlTGlzdCA9PlxuICAgICAgICB0aGlzLnRydXRoTW92ZVRvKFxuICAgICAgICAgIGRpcmVjdGlvbixcbiAgICAgICAgICBuZXdNb3ZlTGlzdC5maWx0ZXIoaSA9PiAhIWkpXG4gICAgICAgICksXG4gICAgICAoKSA9PiBtb3ZlTGlzdC5mb3JFYWNoKGkgPT4gKGkuY2hlY2tlZCA9IGZhbHNlKSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB0cnV0aE1vdmVUbyhkaXJlY3Rpb246IFRyYW5zZmVyRGlyZWN0aW9uLCBsaXN0OiBUcmFuc2Zlckl0ZW1bXSk6IHZvaWQge1xuICAgIGNvbnN0IG9wcG9zaXRlRGlyZWN0aW9uID0gZGlyZWN0aW9uID09PSAnbGVmdCcgPyAncmlnaHQnIDogJ2xlZnQnO1xuICAgIGNvbnN0IGRhdGFzb3VyY2UgPSBkaXJlY3Rpb24gPT09ICdsZWZ0JyA/IHRoaXMucmlnaHREYXRhU291cmNlIDogdGhpcy5sZWZ0RGF0YVNvdXJjZTtcbiAgICBjb25zdCB0YXJnZXREYXRhc291cmNlID0gZGlyZWN0aW9uID09PSAnbGVmdCcgPyB0aGlzLmxlZnREYXRhU291cmNlIDogdGhpcy5yaWdodERhdGFTb3VyY2U7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGxpc3QpIHtcbiAgICAgIGl0ZW0uY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgaXRlbS5oaWRlID0gZmFsc2U7XG4gICAgICBpdGVtLmRpcmVjdGlvbiA9IGRpcmVjdGlvbjtcbiAgICAgIGRhdGFzb3VyY2Uuc3BsaWNlKGRhdGFzb3VyY2UuaW5kZXhPZihpdGVtKSwgMSk7XG4gICAgfVxuICAgIHRhcmdldERhdGFzb3VyY2Uuc3BsaWNlKDAsIDAsIC4uLmxpc3QpO1xuICAgIHRoaXMudXBkYXRlT3BlcmF0aW9uU3RhdHVzKG9wcG9zaXRlRGlyZWN0aW9uKTtcbiAgICB0aGlzLm56Q2hhbmdlLmVtaXQoe1xuICAgICAgZnJvbTogb3Bwb3NpdGVEaXJlY3Rpb24sXG4gICAgICB0bzogZGlyZWN0aW9uLFxuICAgICAgbGlzdFxuICAgIH0pO1xuICAgIHRoaXMubWFya0ZvckNoZWNrQWxsTGlzdCgpO1xuICB9XG5cbiAgLy8gI2VuZHJlZ2lvblxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSBpMThuOiBOekkxOG5TZXJ2aWNlKSB7fVxuXG4gIHByaXZhdGUgbWFya0ZvckNoZWNrQWxsTGlzdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubGlzdHMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5saXN0cy5mb3JFYWNoKGkgPT4gaS5tYXJrRm9yQ2hlY2soKSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZU56VGFyZ2V0S2V5cygpOiB2b2lkIHtcbiAgICBjb25zdCBrZXlzID0gdG9BcnJheSh0aGlzLm56VGFyZ2V0S2V5cyk7XG4gICAgY29uc3QgaGFzT3duS2V5ID0gKGU6IFRyYW5zZmVySXRlbSkgPT4gZS5oYXNPd25Qcm9wZXJ0eSgna2V5Jyk7XG4gICAgdGhpcy5sZWZ0RGF0YVNvdXJjZS5mb3JFYWNoKGUgPT4ge1xuICAgICAgaWYgKGhhc093bktleShlKSAmJiBrZXlzLmluZGV4T2YoZS5rZXkpICE9PSAtMSAmJiAhZS5kaXNhYmxlZCkge1xuICAgICAgICBlLmNoZWNrZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMubW92ZVRvUmlnaHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlTnpTZWxlY3RlZEtleXMoKTogdm9pZCB7XG4gICAgY29uc3Qga2V5cyA9IHRvQXJyYXkodGhpcy5uelNlbGVjdGVkS2V5cyk7XG4gICAgdGhpcy5uekRhdGFTb3VyY2UuZm9yRWFjaChlID0+IHtcbiAgICAgIGlmIChrZXlzLmluZGV4T2YoZS5rZXkpICE9PSAtMSkge1xuICAgICAgICBlLmNoZWNrZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHRlcm0gPSAobGQ6IFRyYW5zZmVySXRlbSkgPT4gbGQuZGlzYWJsZWQgPT09IGZhbHNlICYmIGxkLmNoZWNrZWQgPT09IHRydWU7XG4gICAgdGhpcy5yaWdodEFjdGl2ZSA9IHRoaXMubGVmdERhdGFTb3VyY2Uuc29tZSh0ZXJtKTtcbiAgICB0aGlzLmxlZnRBY3RpdmUgPSB0aGlzLnJpZ2h0RGF0YVNvdXJjZS5zb21lKHRlcm0pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pMThuLmxvY2FsZUNoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmxvY2FsZSA9IHRoaXMuaTE4bi5nZXRMb2NhbGVEYXRhKCdUcmFuc2ZlcicpO1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2tBbGxMaXN0KCk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXMubnpEYXRhU291cmNlKSB7XG4gICAgICB0aGlzLnNwbGl0RGF0YVNvdXJjZSgpO1xuICAgICAgdGhpcy51cGRhdGVPcGVyYXRpb25TdGF0dXMoJ2xlZnQnKTtcbiAgICAgIHRoaXMudXBkYXRlT3BlcmF0aW9uU3RhdHVzKCdyaWdodCcpO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2tBbGxMaXN0KCk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLm56VGFyZ2V0S2V5cykge1xuICAgICAgdGhpcy5oYW5kbGVOelRhcmdldEtleXMoKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXMubnpTZWxlY3RlZEtleXMpIHtcbiAgICAgIHRoaXMuaGFuZGxlTnpTZWxlY3RlZEtleXMoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnVuc3Vic2NyaWJlJC5uZXh0KCk7XG4gICAgdGhpcy51bnN1YnNjcmliZSQuY29tcGxldGUoKTtcbiAgfVxufVxuIl19