UNPKG

ng-zorro-antd

Version:

An enterprise-class UI components based on Ant Design and Angular

357 lines 29.4 kB
/** * @fileoverview added by tsickle * Generated from: src/cell/th-addon.component.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { __decorate, __metadata } 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 */ /* tslint:disable:component-selector */ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core'; import { warnDeprecation } from 'ng-zorro-antd/core/logger'; import { InputBoolean } from 'ng-zorro-antd/core/util'; import { Subject } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; export class NzThAddOnComponent { /** * @param {?} cdr */ constructor(cdr) { this.cdr = cdr; this.manualClickOrder$ = new Subject(); this.calcOperatorChange$ = new Subject(); this.nzFilterValue = null; this.sortOrder = null; this.sortDirections = ['ascend', 'descend', null]; this.sortOrderChange$ = new Subject(); this.destroy$ = new Subject(); this.isNzShowSortChanged = false; this.isNzShowFilterChanged = false; this.nzFilterMultiple = true; this.nzSortOrder = null; this.nzSortPriority = false; this.nzSortDirections = ['ascend', 'descend', null]; this.nzFilters = []; this.nzSortFn = null; this.nzFilterFn = null; this.nzShowSort = false; this.nzShowFilter = false; this.nzCustomFilter = false; this.nzCheckedChange = new EventEmitter(); this.nzSortOrderChange = new EventEmitter(); this.nzFilterChange = new EventEmitter(); /** * @deprecated use nzSortOrder instead * */ this.nzSort = null; /** * @deprecated use nzSortOrderChange instead * */ this.nzSortChange = new EventEmitter(); } /** * @param {?} sortDirections * @param {?} current * @return {?} */ getNextSortDirection(sortDirections, current) { /** @type {?} */ const index = sortDirections.indexOf(current); if (index === sortDirections.length - 1) { return sortDirections[0]; } else { return sortDirections[index + 1]; } } /** * @return {?} */ emitNextSortValue() { if (this.nzShowSort) { /** @type {?} */ const nextOrder = this.getNextSortDirection(this.sortDirections, (/** @type {?} */ (this.sortOrder))); this.setSortOrder(nextOrder); this.manualClickOrder$.next(this); } } /** * @param {?} order * @return {?} */ setSortOrder(order) { this.sortOrderChange$.next(order); } /** * @return {?} */ clearSortOrder() { if (this.sortOrder !== null) { this.setSortOrder(null); } } /** * @param {?} value * @return {?} */ onFilterValueChange(value) { this.nzFilterChange.emit(value); this.nzFilterValue = value; this.updateCalcOperator(); } /** * @return {?} */ updateCalcOperator() { this.calcOperatorChange$.next(); } /** * @return {?} */ ngOnInit() { this.sortOrderChange$.pipe(takeUntil(this.destroy$)).subscribe((/** * @param {?} order * @return {?} */ order => { if (this.sortOrder !== order) { this.sortOrder = order; this.nzSortChange.emit(order); this.nzSortOrderChange.emit(order); } this.updateCalcOperator(); this.cdr.markForCheck(); })); } /** * @param {?} changes * @return {?} */ ngOnChanges(changes) { const { nzSortKey, nzSort, nzSortDirections, nzFilters, nzSortOrder, nzSortFn, nzFilterFn, nzSortPriority, nzFilterMultiple, nzShowSort, nzShowFilter } = changes; if (nzSortDirections) { if (this.nzSortDirections && this.nzSortDirections.length) { this.sortDirections = this.nzSortDirections; } } if (nzSort) { this.sortOrder = this.nzSort; this.setSortOrder(this.nzSort); warnDeprecation(`'nzSort' and 'nzSortChange' is deprecated and will be removed in 10.0.0. Please use 'nzSortOrder' and 'nzSortOrderChange' instead.`); } if (nzSortKey) { this.nzColumnKey = this.nzSortKey; warnDeprecation(`'nzSortKey' is deprecated and will be removed in 10.0.0. Please use 'nzColumnKey' instead.`); } if (nzSortOrder) { this.sortOrder = this.nzSortOrder; this.setSortOrder(this.nzSortOrder); } if (nzShowSort) { this.isNzShowSortChanged = true; } if (nzShowFilter) { this.isNzShowFilterChanged = true; } /** @type {?} */ const isFirstChange = (/** * @param {?} value * @return {?} */ (value) => value && value.firstChange && value.currentValue !== undefined); if ((isFirstChange(nzSortKey) || isFirstChange(nzSort) || isFirstChange(nzSortOrder) || isFirstChange(nzSortFn)) && !this.isNzShowSortChanged) { this.nzShowSort = true; } if (isFirstChange(nzFilters) && !this.isNzShowFilterChanged) { this.nzShowFilter = true; } if ((nzFilters || nzFilterMultiple) && this.nzShowFilter) { /** @type {?} */ const listOfValue = this.nzFilters.filter((/** * @param {?} item * @return {?} */ item => item.byDefault)).map((/** * @param {?} item * @return {?} */ item => item.value)); this.nzFilterValue = this.nzFilterMultiple ? listOfValue : listOfValue[0] || null; } if (nzSortFn || nzFilterFn || nzSortPriority || nzFilters) { this.updateCalcOperator(); } } /** * @return {?} */ ngOnDestroy() { this.destroy$.next(); this.destroy$.complete(); } } NzThAddOnComponent.decorators = [ { type: Component, args: [{ selector: 'th[nzSortKey], th[nzColumnKey], th[nzSort], th[nzSortFn], th[nzSortOrder], th[nzFilters], th[nzShowSort], th[nzShowFilter], th[nzCustomFilter]', preserveWhitespaces: false, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: ` <nz-table-filter *ngIf="nzShowFilter || nzCustomFilter; else notFilterTemplate" [contentTemplate]="notFilterTemplate" [extraTemplate]="extraTemplate" [customFilter]="nzCustomFilter" [filterMultiple]="nzFilterMultiple" [listOfFilter]="nzFilters" (filterChange)="onFilterValueChange($event)" ></nz-table-filter> <ng-template #notFilterTemplate> <ng-template [ngTemplateOutlet]="nzShowSort ? sortTemplate : contentTemplate"></ng-template> </ng-template> <ng-template #extraTemplate> <ng-content select="[nz-th-extra]"></ng-content> <ng-content select="nz-filter-trigger"></ng-content> </ng-template> <ng-template #sortTemplate> <nz-table-sorters [sortOrder]="sortOrder" [sortDirections]="sortDirections" [contentTemplate]="contentTemplate"></nz-table-sorters> </ng-template> <ng-template #contentTemplate> <ng-content></ng-content> </ng-template> `, host: { '[class.ant-table-column-has-sorters]': 'nzShowSort', '[class.ant-table-column-sort]': `sortOrder === 'descend' || sortOrder === 'ascend'`, '(click)': 'emitNextSortValue()' } }] } ]; /** @nocollapse */ NzThAddOnComponent.ctorParameters = () => [ { type: ChangeDetectorRef } ]; NzThAddOnComponent.propDecorators = { nzColumnKey: [{ type: Input }], nzFilterMultiple: [{ type: Input }], nzSortOrder: [{ type: Input }], nzSortPriority: [{ type: Input }], nzSortDirections: [{ type: Input }], nzFilters: [{ type: Input }], nzSortFn: [{ type: Input }], nzFilterFn: [{ type: Input }], nzShowSort: [{ type: Input }], nzShowFilter: [{ type: Input }], nzCustomFilter: [{ type: Input }], nzCheckedChange: [{ type: Output }], nzSortOrderChange: [{ type: Output }], nzFilterChange: [{ type: Output }], nzSortKey: [{ type: Input }], nzSort: [{ type: Input }], nzSortChange: [{ type: Output }] }; __decorate([ InputBoolean(), __metadata("design:type", Object) ], NzThAddOnComponent.prototype, "nzShowSort", void 0); __decorate([ InputBoolean(), __metadata("design:type", Object) ], NzThAddOnComponent.prototype, "nzShowFilter", void 0); __decorate([ InputBoolean(), __metadata("design:type", Object) ], NzThAddOnComponent.prototype, "nzCustomFilter", void 0); if (false) { /** @type {?} */ NzThAddOnComponent.ngAcceptInputType_nzShowSort; /** @type {?} */ NzThAddOnComponent.ngAcceptInputType_nzShowFilter; /** @type {?} */ NzThAddOnComponent.ngAcceptInputType_nzCustomFilter; /** @type {?} */ NzThAddOnComponent.prototype.manualClickOrder$; /** @type {?} */ NzThAddOnComponent.prototype.calcOperatorChange$; /** @type {?} */ NzThAddOnComponent.prototype.nzFilterValue; /** @type {?} */ NzThAddOnComponent.prototype.sortOrder; /** @type {?} */ NzThAddOnComponent.prototype.sortDirections; /** * @type {?} * @private */ NzThAddOnComponent.prototype.sortOrderChange$; /** * @type {?} * @private */ NzThAddOnComponent.prototype.destroy$; /** * @type {?} * @private */ NzThAddOnComponent.prototype.isNzShowSortChanged; /** * @type {?} * @private */ NzThAddOnComponent.prototype.isNzShowFilterChanged; /** @type {?} */ NzThAddOnComponent.prototype.nzColumnKey; /** @type {?} */ NzThAddOnComponent.prototype.nzFilterMultiple; /** @type {?} */ NzThAddOnComponent.prototype.nzSortOrder; /** @type {?} */ NzThAddOnComponent.prototype.nzSortPriority; /** @type {?} */ NzThAddOnComponent.prototype.nzSortDirections; /** @type {?} */ NzThAddOnComponent.prototype.nzFilters; /** @type {?} */ NzThAddOnComponent.prototype.nzSortFn; /** @type {?} */ NzThAddOnComponent.prototype.nzFilterFn; /** @type {?} */ NzThAddOnComponent.prototype.nzShowSort; /** @type {?} */ NzThAddOnComponent.prototype.nzShowFilter; /** @type {?} */ NzThAddOnComponent.prototype.nzCustomFilter; /** @type {?} */ NzThAddOnComponent.prototype.nzCheckedChange; /** @type {?} */ NzThAddOnComponent.prototype.nzSortOrderChange; /** @type {?} */ NzThAddOnComponent.prototype.nzFilterChange; /** * @deprecated use nzColumnKey instead * * @type {?} */ NzThAddOnComponent.prototype.nzSortKey; /** * @deprecated use nzSortOrder instead * * @type {?} */ NzThAddOnComponent.prototype.nzSort; /** * @deprecated use nzSortOrderChange instead * * @type {?} */ NzThAddOnComponent.prototype.nzSortChange; /** * @type {?} * @private */ NzThAddOnComponent.prototype.cdr; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGgtYWRkb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctem9ycm8tYW50ZC90YWJsZS8iLCJzb3VyY2VzIjpbInNyYy9jZWxsL3RoLWFkZG9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQVFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUlMLE1BQU0sRUFHTixpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTVELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQXVDM0MsTUFBTSxPQUFPLGtCQUFrQjs7OztJQXdFN0IsWUFBb0IsR0FBc0I7UUFBdEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFuRTFDLHNCQUFpQixHQUFHLElBQUksT0FBTyxFQUFzQixDQUFDO1FBQ3RELHdCQUFtQixHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDcEMsa0JBQWEsR0FBdUIsSUFBSSxDQUFDO1FBQ3pDLGNBQVMsR0FBcUIsSUFBSSxDQUFDO1FBQ25DLG1CQUFjLEdBQXVCLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6RCxxQkFBZ0IsR0FBRyxJQUFJLE9BQU8sRUFBb0IsQ0FBQztRQUNuRCxhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUN6Qix3QkFBbUIsR0FBRyxLQUFLLENBQUM7UUFDNUIsMEJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBRTdCLHFCQUFnQixHQUFHLElBQUksQ0FBQztRQUN4QixnQkFBVyxHQUFxQixJQUFJLENBQUM7UUFD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QixvQ0FBeUM7Ozs7O0lBRXpDLDBDQUFvRTs7Ozs7SUF1Q3hELGlDQUE4QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBBbGliYWJhLmNvbSBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9ORy1aT1JSTy9uZy16b3Jyby1hbnRkL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqL1xuLyogdHNsaW50OmRpc2FibGU6Y29tcG9uZW50LXNlbGVjdG9yICovXG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2UsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgd2FybkRlcHJlY2F0aW9uIH0gZnJvbSAnbmctem9ycm8tYW50ZC9jb3JlL2xvZ2dlcic7XG5pbXBvcnQgeyBCb29sZWFuSW5wdXQgfSBmcm9tICduZy16b3Jyby1hbnRkL2NvcmUvdHlwZXMnO1xuaW1wb3J0IHsgSW5wdXRCb29sZWFuIH0gZnJvbSAnbmctem9ycm8tYW50ZC9jb3JlL3V0aWwnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTnpUYWJsZUZpbHRlckZuLCBOelRhYmxlRmlsdGVyTGlzdCwgTnpUYWJsZUZpbHRlclZhbHVlLCBOelRhYmxlU29ydEZuLCBOelRhYmxlU29ydE9yZGVyIH0gZnJvbSAnLi4vdGFibGUudHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6XG4gICAgJ3RoW256U29ydEtleV0sIHRoW256Q29sdW1uS2V5XSwgdGhbbnpTb3J0XSwgdGhbbnpTb3J0Rm5dLCB0aFtuelNvcnRPcmRlcl0sIHRoW256RmlsdGVyc10sIHRoW256U2hvd1NvcnRdLCB0aFtuelNob3dGaWx0ZXJdLCB0aFtuekN1c3RvbUZpbHRlcl0nLFxuICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiBmYWxzZSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHRlbXBsYXRlOiBgXG4gICAgPG56LXRhYmxlLWZpbHRlclxuICAgICAgKm5nSWY9XCJuelNob3dGaWx0ZXIgfHwgbnpDdXN0b21GaWx0ZXI7IGVsc2Ugbm90RmlsdGVyVGVtcGxhdGVcIlxuICAgICAgW2NvbnRlbnRUZW1wbGF0ZV09XCJub3RGaWx0ZXJUZW1wbGF0ZVwiXG4gICAgICBbZXh0cmFUZW1wbGF0ZV09XCJleHRyYVRlbXBsYXRlXCJcbiAgICAgIFtjdXN0b21GaWx0ZXJdPVwibnpDdXN0b21GaWx0ZXJcIlxuICAgICAgW2ZpbHRlck11bHRpcGxlXT1cIm56RmlsdGVyTXVsdGlwbGVcIlxuICAgICAgW2xpc3RPZkZpbHRlcl09XCJuekZpbHRlcnNcIlxuICAgICAgKGZpbHRlckNoYW5nZSk9XCJvbkZpbHRlclZhbHVlQ2hhbmdlKCRldmVudClcIlxuICAgID48L256LXRhYmxlLWZpbHRlcj5cbiAgICA8bmctdGVtcGxhdGUgI25vdEZpbHRlclRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm56U2hvd1NvcnQgPyBzb3J0VGVtcGxhdGUgOiBjb250ZW50VGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlICNleHRyYVRlbXBsYXRlPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW256LXRoLWV4dHJhXVwiPjwvbmctY29udGVudD5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIm56LWZpbHRlci10cmlnZ2VyXCI+PC9uZy1jb250ZW50PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlICNzb3J0VGVtcGxhdGU+XG4gICAgICA8bnotdGFibGUtc29ydGVycyBbc29ydE9yZGVyXT1cInNvcnRPcmRlclwiIFtzb3J0RGlyZWN0aW9uc109XCJzb3J0RGlyZWN0aW9uc1wiIFtjb250ZW50VGVtcGxhdGVdPVwiY29udGVudFRlbXBsYXRlXCI+PC9uei10YWJsZS1zb3J0ZXJzPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlICNjb250ZW50VGVtcGxhdGU+XG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgYCxcbiAgaG9zdDoge1xuICAgICdbY2xhc3MuYW50LXRhYmxlLWNvbHVtbi1oYXMtc29ydGVyc10nOiAnbnpTaG93U29ydCcsXG4gICAgJ1tjbGFzcy5hbnQtdGFibGUtY29sdW1uLXNvcnRdJzogYHNvcnRPcmRlciA9PT0gJ2Rlc2NlbmQnIHx8IHNvcnRPcmRlciA9PT0gJ2FzY2VuZCdgLFxuICAgICcoY2xpY2spJzogJ2VtaXROZXh0U29ydFZhbHVlKCknXG4gIH1cbn0pXG5leHBvcnQgY2xhc3MgTnpUaEFkZE9uQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9uelNob3dTb3J0OiBCb29sZWFuSW5wdXQ7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9uelNob3dGaWx0ZXI6IEJvb2xlYW5JbnB1dDtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX256Q3VzdG9tRmlsdGVyOiBCb29sZWFuSW5wdXQ7XG5cbiAgbWFudWFsQ2xpY2tPcmRlciQgPSBuZXcgU3ViamVjdDxOelRoQWRkT25Db21wb25lbnQ+KCk7XG4gIGNhbGNPcGVyYXRvckNoYW5nZSQgPSBuZXcgU3ViamVjdCgpO1xuICBuekZpbHRlclZhbHVlOiBOelRhYmxlRmlsdGVyVmFsdWUgPSBudWxsO1xuICBzb3J0T3JkZXI6IE56VGFibGVTb3J0T3JkZXIgPSBudWxsO1xuICBzb3J0RGlyZWN0aW9uczogTnpUYWJsZVNvcnRPcmRlcltdID0gWydhc2NlbmQnLCAnZGVzY2VuZCcsIG51bGxdO1xuICBwcml2YXRlIHNvcnRPcmRlckNoYW5nZSQgPSBuZXcgU3ViamVjdDxOelRhYmxlU29ydE9yZGVyPigpO1xuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcbiAgcHJpdmF0ZSBpc056U2hvd1NvcnRDaGFuZ2VkID0gZmFsc2U7XG4gIHByaXZhdGUgaXNOelNob3dGaWx0ZXJDaGFuZ2VkID0gZmFsc2U7XG4gIEBJbnB1dCgpIG56Q29sdW1uS2V5OiBzdHJpbmc7XG4gIEBJbnB1dCgpIG56RmlsdGVyTXVsdGlwbGUgPSB0cnVlO1xuICBASW5wdXQoKSBuelNvcnRPcmRlcjogTnpUYWJsZVNvcnRPcmRlciA9IG51bGw7XG4gIEBJbnB1dCgpIG56U29ydFByaW9yaXR5OiBudW1iZXIgfCBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIG56U29ydERpcmVjdGlvbnM6IE56VGFibGVTb3J0T3JkZXJbXSA9IFsnYXNjZW5kJywgJ2Rlc2NlbmQnLCBudWxsXTtcbiAgQElucHV0KCkgbnpGaWx0ZXJzOiBOelRhYmxlRmlsdGVyTGlzdCA9IFtdO1xuICBASW5wdXQoKSBuelNvcnRGbjogTnpUYWJsZVNvcnRGbiB8IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgbnpGaWx0ZXJGbjogTnpUYWJsZUZpbHRlckZuIHwgYm9vbGVhbiB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgbnpTaG93U29ydCA9IGZhbHNlO1xuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgbnpTaG93RmlsdGVyID0gZmFsc2U7XG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBuekN1c3RvbUZpbHRlciA9IGZhbHNlO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgbnpDaGVja2VkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgbnpTb3J0T3JkZXJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZyB8IG51bGw+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSBuekZpbHRlckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8TnpUYWJsZUZpbHRlclZhbHVlPigpO1xuICAvKiogQGRlcHJlY2F0ZWQgdXNlIG56Q29sdW1uS2V5IGluc3RlYWQgKiovXG4gIEBJbnB1dCgpIG56U29ydEtleTogc3RyaW5nO1xuICAvKiogQGRlcHJlY2F0ZWQgdXNlIG56U29ydE9yZGVyIGluc3RlYWQgKiovXG4gIEBJbnB1dCgpIG56U29ydDogTnpUYWJsZVNvcnRPcmRlciA9IG51bGw7XG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgbnpTb3J0T3JkZXJDaGFuZ2UgaW5zdGVhZCAqKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IG56U29ydENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nIHwgbnVsbD4oKTtcblxuICBnZXROZXh0U29ydERpcmVjdGlvbihzb3J0RGlyZWN0aW9uczogTnpUYWJsZVNvcnRPcmRlcltdLCBjdXJyZW50OiBOelRhYmxlU29ydE9yZGVyKTogTnpUYWJsZVNvcnRPcmRlciB7XG4gICAgY29uc3QgaW5kZXggPSBzb3J0RGlyZWN0aW9ucy5pbmRleE9mKGN1cnJlbnQpO1xuICAgIGlmIChpbmRleCA9PT0gc29ydERpcmVjdGlvbnMubGVuZ3RoIC0gMSkge1xuICAgICAgcmV0dXJuIHNvcnREaXJlY3Rpb25zWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gc29ydERpcmVjdGlvbnNbaW5kZXggKyAxXTtcbiAgICB9XG4gIH1cblxuICBlbWl0TmV4dFNvcnRWYWx1ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5uelNob3dTb3J0KSB7XG4gICAgICBjb25zdCBuZXh0T3JkZXIgPSB0aGlzLmdldE5leHRTb3J0RGlyZWN0aW9uKHRoaXMuc29ydERpcmVjdGlvbnMsIHRoaXMuc29ydE9yZGVyISk7XG4gICAgICB0aGlzLnNldFNvcnRPcmRlcihuZXh0T3JkZXIpO1xuICAgICAgdGhpcy5tYW51YWxDbGlja09yZGVyJC5uZXh0KHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIHNldFNvcnRPcmRlcihvcmRlcjogTnpUYWJsZVNvcnRPcmRlcik6IHZvaWQge1xuICAgIHRoaXMuc29ydE9yZGVyQ2hhbmdlJC5uZXh0KG9yZGVyKTtcbiAgfVxuXG4gIGNsZWFyU29ydE9yZGVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNvcnRPcmRlciAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5zZXRTb3J0T3JkZXIobnVsbCk7XG4gICAgfVxuICB9XG5cbiAgb25GaWx0ZXJWYWx1ZUNoYW5nZSh2YWx1ZTogTnpUYWJsZUZpbHRlclZhbHVlKTogdm9pZCB7XG4gICAgdGhpcy5uekZpbHRlckNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICB0aGlzLm56RmlsdGVyVmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLnVwZGF0ZUNhbGNPcGVyYXRvcigpO1xuICB9XG5cbiAgdXBkYXRlQ2FsY09wZXJhdG9yKCk6IHZvaWQge1xuICAgIHRoaXMuY2FsY09wZXJhdG9yQ2hhbmdlJC5uZXh0KCk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zb3J0T3JkZXJDaGFuZ2UkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUob3JkZXIgPT4ge1xuICAgICAgaWYgKHRoaXMuc29ydE9yZGVyICE9PSBvcmRlcikge1xuICAgICAgICB0aGlzLnNvcnRPcmRlciA9IG9yZGVyO1xuICAgICAgICB0aGlzLm56U29ydENoYW5nZS5lbWl0KG9yZGVyKTtcbiAgICAgICAgdGhpcy5uelNvcnRPcmRlckNoYW5nZS5lbWl0KG9yZGVyKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlQ2FsY09wZXJhdG9yKCk7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBjb25zdCB7XG4gICAgICBuelNvcnRLZXksXG4gICAgICBuelNvcnQsXG4gICAgICBuelNvcnREaXJlY3Rpb25zLFxuICAgICAgbnpGaWx0ZXJzLFxuICAgICAgbnpTb3J0T3JkZXIsXG4gICAgICBuelNvcnRGbixcbiAgICAgIG56RmlsdGVyRm4sXG4gICAgICBuelNvcnRQcmlvcml0eSxcbiAgICAgIG56RmlsdGVyTXVsdGlwbGUsXG4gICAgICBuelNob3dTb3J0LFxuICAgICAgbnpTaG93RmlsdGVyXG4gICAgfSA9IGNoYW5nZXM7XG4gICAgaWYgKG56U29ydERpcmVjdGlvbnMpIHtcbiAgICAgIGlmICh0aGlzLm56U29ydERpcmVjdGlvbnMgJiYgdGhpcy5uelNvcnREaXJlY3Rpb25zLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnNvcnREaXJlY3Rpb25zID0gdGhpcy5uelNvcnREaXJlY3Rpb25zO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAobnpTb3J0KSB7XG4gICAgICB0aGlzLnNvcnRPcmRlciA9IHRoaXMubnpTb3J0O1xuICAgICAgdGhpcy5zZXRTb3J0T3JkZXIodGhpcy5uelNvcnQpO1xuICAgICAgd2FybkRlcHJlY2F0aW9uKFxuICAgICAgICBgJ256U29ydCcgYW5kICduelNvcnRDaGFuZ2UnIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAxMC4wLjAuIFBsZWFzZSB1c2UgJ256U29ydE9yZGVyJyBhbmQgJ256U29ydE9yZGVyQ2hhbmdlJyBpbnN0ZWFkLmBcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChuelNvcnRLZXkpIHtcbiAgICAgIHRoaXMubnpDb2x1bW5LZXkgPSB0aGlzLm56U29ydEtleTtcbiAgICAgIHdhcm5EZXByZWNhdGlvbihgJ256U29ydEtleScgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIDEwLjAuMC4gUGxlYXNlIHVzZSAnbnpDb2x1bW5LZXknIGluc3RlYWQuYCk7XG4gICAgfVxuICAgIGlmIChuelNvcnRPcmRlcikge1xuICAgICAgdGhpcy5zb3J0T3JkZXIgPSB0aGlzLm56U29ydE9yZGVyO1xuICAgICAgdGhpcy5zZXRTb3J0T3JkZXIodGhpcy5uelNvcnRPcmRlcik7XG4gICAgfVxuICAgIGlmIChuelNob3dTb3J0KSB7XG4gICAgICB0aGlzLmlzTnpTaG93U29ydENoYW5nZWQgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAobnpTaG93RmlsdGVyKSB7XG4gICAgICB0aGlzLmlzTnpTaG93RmlsdGVyQ2hhbmdlZCA9IHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGlzRmlyc3RDaGFuZ2UgPSAodmFsdWU6IFNpbXBsZUNoYW5nZSkgPT4gdmFsdWUgJiYgdmFsdWUuZmlyc3RDaGFuZ2UgJiYgdmFsdWUuY3VycmVudFZhbHVlICE9PSB1bmRlZmluZWQ7XG4gICAgaWYgKFxuICAgICAgKGlzRmlyc3RDaGFuZ2UobnpTb3J0S2V5KSB8fCBpc0ZpcnN0Q2hhbmdlKG56U29ydCkgfHwgaXNGaXJzdENoYW5nZShuelNvcnRPcmRlcikgfHwgaXNGaXJzdENoYW5nZShuelNvcnRGbikpICYmXG4gICAgICAhdGhpcy5pc056U2hvd1NvcnRDaGFuZ2VkXG4gICAgKSB7XG4gICAgICB0aGlzLm56U2hvd1NvcnQgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoaXNGaXJzdENoYW5nZShuekZpbHRlcnMpICYmICF0aGlzLmlzTnpTaG93RmlsdGVyQ2hhbmdlZCkge1xuICAgICAgdGhpcy5uelNob3dGaWx0ZXIgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoKG56RmlsdGVycyB8fCBuekZpbHRlck11bHRpcGxlKSAmJiB0aGlzLm56U2hvd0ZpbHRlcikge1xuICAgICAgY29uc3QgbGlzdE9mVmFsdWUgPSB0aGlzLm56RmlsdGVycy5maWx0ZXIoaXRlbSA9PiBpdGVtLmJ5RGVmYXVsdCkubWFwKGl0ZW0gPT4gaXRlbS52YWx1ZSk7XG4gICAgICB0aGlzLm56RmlsdGVyVmFsdWUgPSB0aGlzLm56RmlsdGVyTXVsdGlwbGUgPyBsaXN0T2ZWYWx1ZSA6IGxpc3RPZlZhbHVlWzBdIHx8IG51bGw7XG4gICAgfVxuICAgIGlmIChuelNvcnRGbiB8fCBuekZpbHRlckZuIHx8IG56U29ydFByaW9yaXR5IHx8IG56RmlsdGVycykge1xuICAgICAgdGhpcy51cGRhdGVDYWxjT3BlcmF0b3IoKTtcbiAgICB9XG4gIH1cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG59XG4iXX0=