angular-admin-lte-teliqo
Version:
npm# angular-admin-lte
485 lines (484 loc) • 38.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import { ChangeDetectorRef, Component, ContentChild, ContentChildren, EventEmitter, Input, NgZone, Output, QueryList, Renderer2, TemplateRef, ViewChild, ViewChildren } from '@angular/core';
import { AccordionToggleDirective } from './accordion.directive';
import { removeListeners, removeSubscriptions } from '../helpers';
var AccordionHeaderComponent = /** @class */ (function () {
function AccordionHeaderComponent() {
}
AccordionHeaderComponent.decorators = [
{ type: Component, args: [{
selector: 'mk-accordion-header',
template: '<ng-template #templateRef><ng-content></ng-content></ng-template>'
},] },
];
/** @nocollapse */
AccordionHeaderComponent.propDecorators = {
"templateRef": [{ type: ViewChild, args: ['templateRef',] },],
};
return AccordionHeaderComponent;
}());
export { AccordionHeaderComponent };
function AccordionHeaderComponent_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
AccordionHeaderComponent.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
AccordionHeaderComponent.ctorParameters;
/** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */
AccordionHeaderComponent.propDecorators;
/** @type {?} */
AccordionHeaderComponent.prototype.templateRef;
}
var AccordionContentComponent = /** @class */ (function () {
function AccordionContentComponent() {
}
AccordionContentComponent.decorators = [
{ type: Component, args: [{
selector: 'mk-accordion-content',
template: '<ng-template #templateRef><ng-content></ng-content></ng-template>'
},] },
];
/** @nocollapse */
AccordionContentComponent.propDecorators = {
"templateRef": [{ type: ViewChild, args: ['templateRef',] },],
};
return AccordionContentComponent;
}());
export { AccordionContentComponent };
function AccordionContentComponent_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
AccordionContentComponent.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
AccordionContentComponent.ctorParameters;
/** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */
AccordionContentComponent.propDecorators;
/** @type {?} */
AccordionContentComponent.prototype.templateRef;
}
var AccordionComponent = /** @class */ (function () {
function AccordionComponent() {
this.contentStyleClass = 'box-body';
this.headerStyleClass = 'box-header with-border';
}
/**
* @method ngOnInit
*/
/**
* \@method ngOnInit
* @return {?}
*/
AccordionComponent.prototype.ngOnInit = /**
* \@method ngOnInit
* @return {?}
*/
function () {
this.headerStyleColor = this.headerColor;
if (!this.header && !this.accordionHeaderComponent) {
throw new Error('Attribute "header" OR Component "mk-+accordion-header" is required for component "mk-+accordion"');
}
if (this.accordionContentComponent) {
this.contentTemplateRef = this.accordionContentComponent.templateRef;
}
else {
this.contentTemplateRef = this.templateRef;
}
};
AccordionComponent.decorators = [
{ type: Component, args: [{
selector: 'mk-accordion',
template: '<ng-template #templateRef><ng-content></ng-content></ng-template>'
},] },
];
/** @nocollapse */
AccordionComponent.propDecorators = {
"borderColor": [{ type: Input },],
"contentColor": [{ type: Input },],
"contentStyleClass": [{ type: Input },],
"header": [{ type: Input },],
"headerColor": [{ type: Input },],
"headerColorHover": [{ type: Input },],
"headerStyleClass": [{ type: Input },],
"accordionHeaderComponent": [{ type: ContentChild, args: [AccordionHeaderComponent,] },],
"accordionContentComponent": [{ type: ContentChild, args: [AccordionContentComponent,] },],
"templateRef": [{ type: ViewChild, args: ['templateRef',] },],
};
return AccordionComponent;
}());
export { AccordionComponent };
function AccordionComponent_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
AccordionComponent.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
AccordionComponent.ctorParameters;
/** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */
AccordionComponent.propDecorators;
/** @type {?} */
AccordionComponent.prototype.contentTemplateRef;
/** @type {?} */
AccordionComponent.prototype.headerStyleColor;
/** @type {?} */
AccordionComponent.prototype.isCollapsing;
/** @type {?} */
AccordionComponent.prototype.isCollapsed;
/** @type {?} */
AccordionComponent.prototype.index;
/** @type {?} */
AccordionComponent.prototype.borderColor;
/** @type {?} */
AccordionComponent.prototype.contentColor;
/** @type {?} */
AccordionComponent.prototype.contentStyleClass;
/** @type {?} */
AccordionComponent.prototype.header;
/** @type {?} */
AccordionComponent.prototype.headerColor;
/** @type {?} */
AccordionComponent.prototype.headerColorHover;
/** @type {?} */
AccordionComponent.prototype.headerStyleClass;
/** @type {?} */
AccordionComponent.prototype.accordionHeaderComponent;
/** @type {?} */
AccordionComponent.prototype.accordionContentComponent;
/** @type {?} */
AccordionComponent.prototype.templateRef;
}
var AccordionGroupComponent = /** @class */ (function () {
/**
* @method constructor
* @param changeDetectorRef [description]
* @param ngZone [description]
* @param renderer2 [description]
*/
function AccordionGroupComponent(changeDetectorRef, ngZone, renderer2) {
this.changeDetectorRef = changeDetectorRef;
this.ngZone = ngZone;
this.renderer2 = renderer2;
this.activeIndex = [0];
this.listeners = [];
this.subscriptions = [];
this.styleClass = 'box-group';
this.onCollapseStart = new EventEmitter();
this.onCollapseDone = new EventEmitter();
}
Object.defineProperty(AccordionGroupComponent.prototype, "_activeIndex", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this.activeIndex = value instanceof Array ? value : [value];
},
enumerable: true,
configurable: true
});
/**
* [headerMouseLeave description]
* \@method headerMouseLeave
* @param {?} accordion [description]
* @return {?}
*/
AccordionGroupComponent.headerMouseLeave = /**
* [headerMouseLeave description]
* \@method headerMouseLeave
* @param {?} accordion [description]
* @return {?}
*/
function (accordion) {
accordion.headerStyleColor = accordion.headerColor;
};
/**
* [headerMouseEnter description]
* \@method headerMouseEnter
* @param {?} accordion [description]
* @return {?}
*/
AccordionGroupComponent.headerMouseEnter = /**
* [headerMouseEnter description]
* \@method headerMouseEnter
* @param {?} accordion [description]
* @return {?}
*/
function (accordion) {
if (accordion.headerColorHover) {
accordion.headerStyleColor = accordion.headerColorHover;
}
};
/**
* @method ngAfterViewInit
*/
/**
* \@method ngAfterViewInit
* @return {?}
*/
AccordionGroupComponent.prototype.ngAfterContentInit = /**
* \@method ngAfterViewInit
* @return {?}
*/
function () {
var _this = this;
this.setAccordionsIndex();
this.updateAccordionIsCollapsed();
this.subscriptions.push(this.accordionComponents.changes.subscribe(function () {
_this.setAccordionsIndex();
}));
};
/**
* @method ngAfterViewInit
*/
/**
* \@method ngAfterViewInit
* @return {?}
*/
AccordionGroupComponent.prototype.ngAfterViewInit = /**
* \@method ngAfterViewInit
* @return {?}
*/
function () {
var _this = this;
this.setAccordionsToggle();
this.subscriptions.push(this.accordionToggleDirectives.changes.subscribe(function () {
_this.setAccordionsToggle();
}));
};
/**
* [ngOnChanges description]
* @method ngOnChanges
* @param changes [description]
* @return [description]
*/
/**
* [ngOnChanges description]
* \@method ngOnChanges
* @param {?} changes [description]
* @return {?} [description]
*/
AccordionGroupComponent.prototype.ngOnChanges = /**
* [ngOnChanges description]
* \@method ngOnChanges
* @param {?} changes [description]
* @return {?} [description]
*/
function (changes) {
if (changes["_activeIndex"].firstChange === false) {
this.updateAccordionIsCollapsed();
}
};
/**
* @method ngOnDestroy
*/
/**
* \@method ngOnDestroy
* @return {?}
*/
AccordionGroupComponent.prototype.ngOnDestroy = /**
* \@method ngOnDestroy
* @return {?}
*/
function () {
removeListeners(this.listeners);
removeSubscriptions(this.subscriptions);
};
/**
* [toggleAccordion description]
* \@method toggleAccordion
* @param {?} event [description]
* @param {?} toggleIndex [description]
* @return {?}
*/
AccordionGroupComponent.prototype.toggleAccordion = /**
* [toggleAccordion description]
* \@method toggleAccordion
* @param {?} event [description]
* @param {?} toggleIndex [description]
* @return {?}
*/
function (event, toggleIndex) {
event.preventDefault();
var /** @type {?} */ indexOf = this.activeIndex['indexOf'](toggleIndex);
if (indexOf === -1) {
if (this.isMultiple) {
this.activeIndex.push(toggleIndex);
}
else {
this.activeIndex = [toggleIndex];
}
}
else {
if (this.isMultiple) {
this.activeIndex.splice(indexOf, 1);
}
else {
this.activeIndex = [];
}
}
this.updateAccordionIsCollapsed();
};
/**
* [collapseStart description]
* \@method collapseStart
* @param {?} event [description]
* @param {?} accordion [description]
* @return {?}
*/
AccordionGroupComponent.prototype.collapseStart = /**
* [collapseStart description]
* \@method collapseStart
* @param {?} event [description]
* @param {?} accordion [description]
* @return {?}
*/
function (event, accordion) {
accordion.isCollapsing = true;
this.onCollapseStart.emit({ animationEvent: event, index: accordion.index });
};
/**
* [collapseDone description]
* \@method collapseDone
* @param {?} event [description]
* @param {?} accordion [description]
* @return {?}
*/
AccordionGroupComponent.prototype.collapseDone = /**
* [collapseDone description]
* \@method collapseDone
* @param {?} event [description]
* @param {?} accordion [description]
* @return {?}
*/
function (event, accordion) {
accordion.isCollapsing = false;
this.onCollapseDone.emit({ animationEvent: event, index: accordion.index });
};
/**
* [setAccordionsIndex description]
* \@method setAccordionsIndex
* @return {?}
*/
AccordionGroupComponent.prototype.setAccordionsIndex = /**
* [setAccordionsIndex description]
* \@method setAccordionsIndex
* @return {?}
*/
function () {
this.accordionComponents.forEach(function (accordion, index) {
accordion.index = index;
});
};
/**
* [setAccordionsToggle description]
* \@method setAccordionsToggle
* @return {?}
*/
AccordionGroupComponent.prototype.setAccordionsToggle = /**
* [setAccordionsToggle description]
* \@method setAccordionsToggle
* @return {?}
*/
function () {
var _this = this;
this.listeners = removeListeners(this.listeners);
this.ngZone.runOutsideAngular(function () {
_this.accordionToggleDirectives.forEach(function (accordionToggle) {
_this.listeners.push(_this.renderer2.listen(accordionToggle.elementRef.nativeElement, 'click', function (event) {
_this.toggleAccordion(event, accordionToggle.accordionComponent.index);
_this.changeDetectorRef.detectChanges();
}));
_this.listeners.push(_this.renderer2.listen(accordionToggle.elementRef.nativeElement, 'mouseenter', function () {
AccordionGroupComponent.headerMouseEnter(accordionToggle.accordionComponent);
_this.changeDetectorRef.detectChanges();
}));
_this.listeners.push(_this.renderer2.listen(accordionToggle.elementRef.nativeElement, 'mouseleave', function () {
AccordionGroupComponent.headerMouseLeave(accordionToggle.accordionComponent);
_this.changeDetectorRef.detectChanges();
}));
});
});
};
/**
* [updateAccordionIsCollapsed description]
* \@method updateAccordionIsCollapsed
* @return {?}
*/
AccordionGroupComponent.prototype.updateAccordionIsCollapsed = /**
* [updateAccordionIsCollapsed description]
* \@method updateAccordionIsCollapsed
* @return {?}
*/
function () {
var _this = this;
this.accordionComponents.forEach(function (accordion, index) {
accordion.isCollapsed = _this.activeIndex.indexOf(index) === -1;
});
};
AccordionGroupComponent.decorators = [
{ type: Component, args: [{
selector: 'mk-accordion-group',
template: "<div [ngClass]=\"styleClass\">\n <div *ngFor=\"let accordion of accordionComponents\" class=\"panel box\" [mkColor]=\"accordion.borderColor\" mkColorProperty=\"border-top-color\" mkColorPrefix=\"box\">\n <div [ngClass]=\"accordion.headerStyleClass\" [class.no-border]=\"accordion.isCollapsed && !accordion.isCollapsing\">\n <h4 class=\"box-title\">\n <a [mkAccordionToggle]=\"accordion\" href=\"#\" [mkFontColor]=\"accordion.headerStyleColor\" [class.collapsed]=\"accordion.isCollapsed\">\n {{accordion.header}}\n <ng-template *ngIf=\"!accordion.header\" [ngTemplateOutlet]=\"accordion.accordionHeaderComponent?.templateRef\"></ng-template>\n </a>\n </h4>\n </div>\n <div class=\"panel-collapse\" [collapseAnimation]=\"accordion.isCollapsed\" (collapseAnimation.start)=\"collapseStart($event, accordion)\" (collapseAnimation.done)=\"collapseDone($event, accordion)\">\n <div [ngClass]=\"accordion.contentStyleClass\" [mkFontColor]=\"accordion.contentColor\">\n <ng-template [ngTemplateOutlet]=\"accordion.contentTemplateRef\"></ng-template>\n </div>\n </div>\n </div>\n</div>\n"
},] },
];
/** @nocollapse */
AccordionGroupComponent.ctorParameters = function () { return [
{ type: ChangeDetectorRef, },
{ type: NgZone, },
{ type: Renderer2, },
]; };
AccordionGroupComponent.propDecorators = {
"_activeIndex": [{ type: Input, args: ['activeIndex',] },],
"isMultiple": [{ type: Input },],
"styleClass": [{ type: Input },],
"onCollapseStart": [{ type: Output },],
"onCollapseDone": [{ type: Output },],
"accordionComponents": [{ type: ContentChildren, args: [AccordionComponent,] },],
"accordionToggleDirectives": [{ type: ViewChildren, args: [AccordionToggleDirective,] },],
};
return AccordionGroupComponent;
}());
export { AccordionGroupComponent };
function AccordionGroupComponent_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
AccordionGroupComponent.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
AccordionGroupComponent.ctorParameters;
/** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */
AccordionGroupComponent.propDecorators;
/** @type {?} */
AccordionGroupComponent.prototype.activeIndex;
/** @type {?} */
AccordionGroupComponent.prototype.listeners;
/** @type {?} */
AccordionGroupComponent.prototype.subscriptions;
/** @type {?} */
AccordionGroupComponent.prototype.isMultiple;
/** @type {?} */
AccordionGroupComponent.prototype.styleClass;
/** @type {?} */
AccordionGroupComponent.prototype.onCollapseStart;
/** @type {?} */
AccordionGroupComponent.prototype.onCollapseDone;
/** @type {?} */
AccordionGroupComponent.prototype.accordionComponents;
/** @type {?} */
AccordionGroupComponent.prototype.accordionToggleDirectives;
/** @type {?} */
AccordionGroupComponent.prototype.changeDetectorRef;
/** @type {?} */
AccordionGroupComponent.prototype.ngZone;
/** @type {?} */
AccordionGroupComponent.prototype.renderer2;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3JkaW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2FuZ3VsYXItYWRtaW4tbHRlLXRlbGlxby8iLCJzb3VyY2VzIjpbImxpYi9hY2NvcmRpb24vYWNjb3JkaW9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUdMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFJTixNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsRUFFVCxXQUFXLEVBQ1gsU0FBUyxFQUNULFlBQVksRUFDYixNQUFNLGVBQWUsQ0FBQztBQUl2QixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVqRSxPQUFPLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sWUFBWSxDQUFDOzs7OztnQkFNakUsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLFFBQVEsRUFBRSxtRUFBbUU7aUJBQzlFOzs7O2dDQUVFLFNBQVMsU0FBQyxhQUFhOzttQ0FyQzFCOztTQW9DYSx3QkFBd0I7Ozs7Ozs7Ozs7Ozs7Ozs7OztnQkFRcEMsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSxzQkFBc0I7b0JBQ2hDLFFBQVEsRUFBRSxtRUFBbUU7aUJBQzlFOzs7O2dDQUVFLFNBQVMsU0FBQyxhQUFhOztvQ0FqRDFCOztTQWdEYSx5QkFBeUI7Ozs7Ozs7Ozs7Ozs7Ozs7aUNBcUJBLFVBQVU7Z0NBSVgsd0JBQXdCOztJQU8zRDs7T0FFRzs7Ozs7SUFDSCxxQ0FBUTs7OztJQUFSO1FBQ0UsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFFekMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQztZQUNuRCxN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QUFDO2lCQUN4QyxDQUFDLENBQUMsQ0FBQztnQkFDSixLQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxZQUFZLEVBQUU7b0JBQ2hHLHVCQUF1QixDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO29CQUM3RSxLQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7aUJBQ3hDLENBQUMsQ0FBQyxDQUFDO2FBQ0wsQ0FBQyxDQUFDO1NBQ0osQ0FBQyxDQUFDOzs7Ozs7O0lBT0csNERBQTBCOzs7Ozs7O1FBQ2hDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsVUFBQyxTQUE2QixFQUFFLEtBQWE7WUFDNUUsU0FBUyxDQUFDLFdBQVcsR0FBRyxLQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUNoRSxDQUFDLENBQUM7OztnQkEvTU4sU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSxvQkFBb0I7b0JBQzlCLFFBQVEsRUFBRSxnb0NBaUJYO2lCQUNBOzs7O2dCQXZIQyxpQkFBaUI7Z0JBTWpCLE1BQU07Z0JBTU4sU0FBUzs7O2lDQW9IUixLQUFLLFNBQUMsYUFBYTsrQkFHbkIsS0FBSzsrQkFDTCxLQUFLO29DQUVMLE1BQU07bUNBQ04sTUFBTTt3Q0FFTixlQUFlLFNBQUMsa0JBQWtCOzhDQUVsQyxZQUFZLFNBQUMsd0JBQXdCOztrQ0E5SXhDOztTQTJIYSx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgUmVuZGVyZXIyLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW5cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEFuaW1hdGlvbkV2ZW50IH0gZnJvbSAnLi4vYW5pbWF0aW9ucy9hbmltYXRpb25zLmludGVyZmFjZSc7XG5cbmltcG9ydCB7IEFjY29yZGlvblRvZ2dsZURpcmVjdGl2ZSB9IGZyb20gJy4vYWNjb3JkaW9uLmRpcmVjdGl2ZSc7XG5cbmltcG9ydCB7IHJlbW92ZUxpc3RlbmVycywgcmVtb3ZlU3Vic2NyaXB0aW9ucyB9IGZyb20gJy4uL2hlbHBlcnMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbi8qXG4gKlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtay1hY2NvcmRpb24taGVhZGVyJyxcbiAgdGVtcGxhdGU6ICc8bmctdGVtcGxhdGUgI3RlbXBsYXRlUmVmPjxuZy1jb250ZW50PjwvbmctY29udGVudD48L25nLXRlbXBsYXRlPidcbn0pXG5leHBvcnQgY2xhc3MgQWNjb3JkaW9uSGVhZGVyQ29tcG9uZW50IHtcbiAgQFZpZXdDaGlsZCgndGVtcGxhdGVSZWYnKSBwdWJsaWMgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG59XG5cblxuLypcbiAqXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21rLWFjY29yZGlvbi1jb250ZW50JyxcbiAgdGVtcGxhdGU6ICc8bmctdGVtcGxhdGUgI3RlbXBsYXRlUmVmPjxuZy1jb250ZW50PjwvbmctY29udGVudD48L25nLXRlbXBsYXRlPidcbn0pXG5leHBvcnQgY2xhc3MgQWNjb3JkaW9uQ29udGVudENvbXBvbmVudCB7XG4gIEBWaWV3Q2hpbGQoJ3RlbXBsYXRlUmVmJykgcHVibGljIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xufVxuXG5cbi8qXG4gKlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtay1hY2NvcmRpb24nLFxuICB0ZW1wbGF0ZTogJzxuZy10ZW1wbGF0ZSAjdGVtcGxhdGVSZWY+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PjwvbmctdGVtcGxhdGU+J1xufSlcbmV4cG9ydCBjbGFzcyBBY2NvcmRpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwdWJsaWMgY29udGVudFRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxBY2NvcmRpb25Db250ZW50Q29tcG9uZW50PjtcbiAgcHVibGljIGhlYWRlclN0eWxlQ29sb3I6IHN0cmluZztcbiAgcHVibGljIGlzQ29sbGFwc2luZzogYm9vbGVhbjtcbiAgcHVibGljIGlzQ29sbGFwc2VkOiBib29sZWFuO1xuICBwdWJsaWMgaW5kZXg6IG51bWJlcjtcblxuICBASW5wdXQoKSBwdWJsaWMgYm9yZGVyQ29sb3I6IHN0cmluZztcbiAgQElucHV0KCkgcHVibGljIGNvbnRlbnRDb2xvcjogc3RyaW5nO1xuICBASW5wdXQoKSBwdWJsaWMgY29udGVudFN0eWxlQ2xhc3MgPSAnYm94LWJvZHknO1xuICBASW5wdXQoKSBwdWJsaWMgaGVhZGVyOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHB1YmxpYyBoZWFkZXJDb2xvcjogc3RyaW5nO1xuICBASW5wdXQoKSBwdWJsaWMgaGVhZGVyQ29sb3JIb3Zlcjogc3RyaW5nO1xuICBASW5wdXQoKSBwdWJsaWMgaGVhZGVyU3R5bGVDbGFzcyA9ICdib3gtaGVhZGVyIHdpdGgtYm9yZGVyJztcblxuICBAQ29udGVudENoaWxkKEFjY29yZGlvbkhlYWRlckNvbXBvbmVudCkgcHVibGljIGFjY29yZGlvbkhlYWRlckNvbXBvbmVudDogQWNjb3JkaW9uSGVhZGVyQ29tcG9uZW50O1xuICBAQ29udGVudENoaWxkKEFjY29yZGlvbkNvbnRlbnRDb21wb25lbnQpIHB1YmxpYyBhY2NvcmRpb25Db250ZW50Q29tcG9uZW50OiBBY2NvcmRpb25Db250ZW50Q29tcG9uZW50O1xuXG4gIEBWaWV3Q2hpbGQoJ3RlbXBsYXRlUmVmJykgcHVibGljIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIC8qKlxuICAgKiBAbWV0aG9kIG5nT25Jbml0XG4gICAqL1xuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmhlYWRlclN0eWxlQ29sb3IgPSB0aGlzLmhlYWRlckNvbG9yO1xuXG4gICAgaWYgKCF0aGlzLmhlYWRlciAmJiAhdGhpcy5hY2NvcmRpb25IZWFkZXJDb21wb25lbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXR0cmlidXRlIFwiaGVhZGVyXCIgT1IgQ29tcG9uZW50IFwibWstK2FjY29yZGlvbi1oZWFkZXJcIiBpcyByZXF1aXJlZCBmb3IgY29tcG9uZW50IFwibWstK2FjY29yZGlvblwiJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYWNjb3JkaW9uQ29udGVudENvbXBvbmVudCkge1xuICAgICAgdGhpcy5jb250ZW50VGVtcGxhdGVSZWYgPSB0aGlzLmFjY29yZGlvbkNvbnRlbnRDb21wb25lbnQudGVtcGxhdGVSZWY7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29udGVudFRlbXBsYXRlUmVmID0gdGhpcy50ZW1wbGF0ZVJlZjtcbiAgICB9XG4gIH1cbn1cblxuXG4vKlxuICpcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWstYWNjb3JkaW9uLWdyb3VwJyxcbiAgdGVtcGxhdGU6IGA8ZGl2IFtuZ0NsYXNzXT1cInN0eWxlQ2xhc3NcIj5cbiAgPGRpdiAqbmdGb3I9XCJsZXQgYWNjb3JkaW9uIG9mIGFjY29yZGlvbkNvbXBvbmVudHNcIiBjbGFzcz1cInBhbmVsIGJveFwiIFtta0NvbG9yXT1cImFjY29yZGlvbi5ib3JkZXJDb2xvclwiIG1rQ29sb3JQcm9wZXJ0eT1cImJvcmRlci10b3AtY29sb3JcIiBta0NvbG9yUHJlZml4PVwiYm94XCI+XG4gICAgPGRpdiBbbmdDbGFzc109XCJhY2NvcmRpb24uaGVhZGVyU3R5bGVDbGFzc1wiIFtjbGFzcy5uby1ib3JkZXJdPVwiYWNjb3JkaW9uLmlzQ29sbGFwc2VkICYmICFhY2NvcmRpb24uaXNDb2xsYXBzaW5nXCI+XG4gICAgICA8aDQgY2xhc3M9XCJib3gtdGl0bGVcIj5cbiAgICAgICAgPGEgW21rQWNjb3JkaW9uVG9nZ2xlXT1cImFjY29yZGlvblwiIGhyZWY9XCIjXCIgW21rRm9udENvbG9yXT1cImFjY29yZGlvbi5oZWFkZXJTdHlsZUNvbG9yXCIgW2NsYXNzLmNvbGxhcHNlZF09XCJhY2NvcmRpb24uaXNDb2xsYXBzZWRcIj5cbiAgICAgICAgICB7e2FjY29yZGlvbi5oZWFkZXJ9fVxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cIiFhY2NvcmRpb24uaGVhZGVyXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiYWNjb3JkaW9uLmFjY29yZGlvbkhlYWRlckNvbXBvbmVudD8udGVtcGxhdGVSZWZcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2E+XG4gICAgICA8L2g0PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJwYW5lbC1jb2xsYXBzZVwiIFtjb2xsYXBzZUFuaW1hdGlvbl09XCJhY2NvcmRpb24uaXNDb2xsYXBzZWRcIiAoY29sbGFwc2VBbmltYXRpb24uc3RhcnQpPVwiY29sbGFwc2VTdGFydCgkZXZlbnQsIGFjY29yZGlvbilcIiAoY29sbGFwc2VBbmltYXRpb24uZG9uZSk9XCJjb2xsYXBzZURvbmUoJGV2ZW50LCBhY2NvcmRpb24pXCI+XG4gICAgICA8ZGl2IFtuZ0NsYXNzXT1cImFjY29yZGlvbi5jb250ZW50U3R5bGVDbGFzc1wiIFtta0ZvbnRDb2xvcl09XCJhY2NvcmRpb24uY29udGVudENvbG9yXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJhY2NvcmRpb24uY29udGVudFRlbXBsYXRlUmVmXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuYFxufSlcbmV4cG9ydCBjbGFzcyBBY2NvcmRpb25Hcm91cENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBhY3RpdmVJbmRleDogYW55ID0gWzBdO1xuICAvLyBAVE9ETyBjaGFuZ2UgdHlwZXMgZm9yIGxpc3RlbmVycyB0byBhbGwgZmlsZXNcbiAgcHJpdmF0ZSBsaXN0ZW5lcnM6IEFycmF5PEZ1bmN0aW9uPiA9IFtdO1xuICAvLyBAVE9ETyBjaGFuZ2UgdHlwZXMgZm9yIHN1YnNjcmlwdGlvbnMgdG8gYWxsIGZpbGVzXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uczogQXJyYXk8U3Vic2NyaXB0aW9uPiA9IFtdO1xuXG5cbiAgQElucHV0KCdhY3RpdmVJbmRleCcpIHNldCBfYWN0aXZlSW5kZXgodmFsdWUpIHtcbiAgICB0aGlzLmFjdGl2ZUluZGV4ID0gdmFsdWUgaW5zdGFuY2VvZiBBcnJheSA/IHZhbHVlIDogW3ZhbHVlXTtcbiAgfVxuICBASW5wdXQoKSBwdWJsaWMgaXNNdWx0aXBsZTogYm9vbGVhbjtcbiAgQElucHV0KCkgcHVibGljIHN0eWxlQ2xhc3MgPSAnYm94LWdyb3VwJztcblxuICBAT3V0cHV0KCkgcHVibGljIG9uQ29sbGFwc2VTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHB1YmxpYyBvbkNvbGxhcHNlRG9uZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAQ29udGVudENoaWxkcmVuKEFjY29yZGlvbkNvbXBvbmVudCkgcHVibGljIGFjY29yZGlvbkNvbXBvbmVudHM6IFF1ZXJ5TGlzdDxBY2NvcmRpb25Db21wb25lbnQ+O1xuXG4gIEBWaWV3Q2hpbGRyZW4oQWNjb3JkaW9uVG9nZ2xlRGlyZWN0aXZlKSBwcml2YXRlIGFjY29yZGlvblRvZ2dsZURpcmVjdGl2ZXM6IFF1ZXJ5TGlzdDxBY2NvcmRpb25Ub2dnbGVEaXJlY3RpdmU+O1xuXG4gIC8qKlxuICAgKiBAbWV0aG9kIGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSBjaGFuZ2VEZXRlY3RvclJlZiBbZGVzY3JpcHRpb25dXG4gICAqIEBwYXJhbSBuZ1pvbmUgICAgICAgICAgICBbZGVzY3JpcHRpb25dXG4gICAqIEBwYXJhbSByZW5kZXJlcjIgICAgICAgICBbZGVzY3JpcHRpb25dXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgIHByaXZhdGUgcmVuZGVyZXIyOiBSZW5kZXJlcjJcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBbaGVhZGVyTW91c2VMZWF2ZSBkZXNjcmlwdGlvbl1cbiAgICogQG1ldGhvZCBoZWFkZXJNb3VzZUxlYXZlXG4gICAqIEBwYXJhbSBhY2NvcmRpb24gW2Rlc2NyaXB0aW9uXVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBoZWFkZXJNb3VzZUxlYXZlKGFjY29yZGlvbjogQWNjb3JkaW9uQ29tcG9uZW50KTogdm9pZCB7XG4gICAgYWNjb3JkaW9uLmhlYWRlclN0eWxlQ29sb3IgPSBhY2NvcmRpb24uaGVhZGVyQ29sb3I7XG4gIH1cblxuICAvKipcbiAgICogW2hlYWRlck1vdXNlRW50ZXIgZGVzY3JpcHRpb25dXG4gICAqIEBtZXRob2QgaGVhZGVyTW91c2VFbnRlclxuICAgKiBAcGFyYW0gYWNjb3JkaW9uIFtkZXNjcmlwdGlvbl1cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaGVhZGVyTW91c2VFbnRlcihhY2NvcmRpb246IEFjY29yZGlvbkNvbXBvbmVudCk6IHZvaWQge1xuICAgIGlmIChhY2NvcmRpb24uaGVhZGVyQ29sb3JIb3Zlcikge1xuICAgICAgYWNjb3JkaW9uLmhlYWRlclN0eWxlQ29sb3IgPSBhY2NvcmRpb24uaGVhZGVyQ29sb3JIb3ZlcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQG1ldGhvZCBuZ0FmdGVyVmlld0luaXRcbiAgICovXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICB0aGlzLnNldEFjY29yZGlvbnNJbmRleCgpO1xuICAgIHRoaXMudXBkYXRlQWNjb3JkaW9uSXNDb2xsYXBzZWQoKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuYWNjb3JkaW9uQ29tcG9uZW50cy5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnNldEFjY29yZGlvbnNJbmRleCgpO1xuICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbWV0aG9kIG5nQWZ0ZXJWaWV3SW5pdFxuICAgKi9cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuc2V0QWNjb3JkaW9uc1RvZ2dsZSgpO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5hY2NvcmRpb25Ub2dnbGVEaXJlY3RpdmVzLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuc2V0QWNjb3JkaW9uc1RvZ2dsZSgpO1xuICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBbbmdPbkNoYW5nZXMgZGVzY3JpcHRpb25dXG4gICAqIEBtZXRob2QgbmdPbkNoYW5nZXNcbiAgICogQHBhcmFtIGNoYW5nZXMgW2Rlc2NyaXB0aW9uXVxuICAgKiBAcmV0dXJuIFtkZXNjcmlwdGlvbl1cbiAgICovXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlcy5fYWN0aXZlSW5kZXguZmlyc3RDaGFuZ2UgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLnVwZGF0ZUFjY29yZGlvbklzQ29sbGFwc2VkKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBtZXRob2QgbmdPbkRlc3Ryb3lcbiAgICovXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHJlbW92ZUxpc3RlbmVycyh0aGlzLmxpc3RlbmVycyk7XG4gICAgcmVtb3ZlU3Vic2NyaXB0aW9ucyh0aGlzLnN1YnNjcmlwdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFt0b2dnbGVBY2NvcmRpb24gZGVzY3JpcHRpb25dXG4gICAqIEBtZXRob2QgdG9nZ2xlQWNjb3JkaW9uXG4gICAqIEBwYXJhbSBldmVudCAgICAgICBbZGVzY3JpcHRpb25dXG4gICAqIEBwYXJhbSB0b2dnbGVJbmRleCBbZGVzY3JpcHRpb25dXG4gICAqL1xuICBwdWJsaWMgdG9nZ2xlQWNjb3JkaW9uKGV2ZW50OiBFdmVudCwgdG9nZ2xlSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBjb25zdCBpbmRleE9mID0gdGhpcy5hY3RpdmVJbmRleFsnaW5kZXhPZiddKHRvZ2dsZUluZGV4KTtcbiAgICBpZiAoaW5kZXhPZiA9PT0gLTEpIHtcbiAgICAgIGlmICh0aGlzLmlzTXVsdGlwbGUpIHtcbiAgICAgICAgdGhpcy5hY3RpdmVJbmRleC5wdXNoKHRvZ2dsZUluZGV4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSBbdG9nZ2xlSW5kZXhdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5pc011bHRpcGxlKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlSW5kZXguc3BsaWNlKGluZGV4T2YsIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hY3RpdmVJbmRleCA9IFtdO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnVwZGF0ZUFjY29yZGlvbklzQ29sbGFwc2VkKCk7XG4gIH1cblxuICAvKipcbiAgICogW2NvbGxhcHNlU3RhcnQgZGVzY3JpcHRpb25dXG4gICAqIEBtZXRob2QgY29sbGFwc2VTdGFydFxuICAgKiBAcGFyYW0gZXZlbnQgW2Rlc2NyaXB0aW9uXVxuICAgKiBAcGFyYW0gYWNjb3JkaW9uIFtkZXNjcmlwdGlvbl1cbiAgICovXG4gIHB1YmxpYyBjb2xsYXBzZVN0YXJ0KGV2ZW50OiBBbmltYXRpb25FdmVudCwgYWNjb3JkaW9uOiBBY2NvcmRpb25Db21wb25lbnQpOiB2b2lkIHtcbiAgICBhY2NvcmRpb24uaXNDb2xsYXBzaW5nID0gdHJ1ZTtcbiAgICB0aGlzLm9uQ29sbGFwc2VTdGFydC5lbWl0KHthbmltYXRpb25FdmVudDogZXZlbnQsIGluZGV4OiBhY2NvcmRpb24uaW5kZXh9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBbY29sbGFwc2VEb25lIGRlc2NyaXB0aW9uXVxuICAgKiBAbWV0aG9kIGNvbGxhcHNlRG9uZVxuICAgKiBAcGFyYW0gZXZlbnQgW2Rlc2NyaXB0aW9uXVxuICAgKiBAcGFyYW0gYWNjb3JkaW9uIFtkZXNjcmlwdGlvbl1cbiAgICovXG4gIHB1YmxpYyBjb2xsYXBzZURvbmUoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50LCBhY2NvcmRpb246IEFjY29yZGlvbkNvbXBvbmVudCk6IHZvaWQge1xuICAgIGFjY29yZGlvbi5pc0NvbGxhcHNpbmcgPSBmYWxzZTtcbiAgICB0aGlzLm9uQ29sbGFwc2VEb25lLmVtaXQoe2FuaW1hdGlvbkV2ZW50OiBldmVudCwgaW5kZXg6IGFjY29yZGlvbi5pbmRleH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFtzZXRBY2NvcmRpb25zSW5kZXggZGVzY3JpcHRpb25dXG4gICAqIEBtZXRob2Qgc2V0QWNjb3JkaW9uc0luZGV4XG4gICAqL1xuICBwcml2YXRlIHNldEFjY29yZGlvbnNJbmRleCgpOiB2b2lkIHtcbiAgICB0aGlzLmFjY29yZGlvbkNvbXBvbmVudHMuZm9yRWFjaCgoYWNjb3JkaW9uOiBBY2NvcmRpb25Db21wb25lbnQsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIGFjY29yZGlvbi5pbmRleCA9IGluZGV4O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFtzZXRBY2NvcmRpb25zVG9nZ2xlIGRlc2NyaXB0aW9uXVxuICAgKiBAbWV0aG9kIHNldEFjY29yZGlvbnNUb2dnbGVcbiAgICovXG4gIHByaXZhdGUgc2V0QWNjb3JkaW9uc1RvZ2dsZSgpOiB2b2lkIHtcbiAgICB0aGlzLmxpc3RlbmVycyA9IHJlbW92ZUxpc3RlbmVycyh0aGlzLmxpc3RlbmVycyk7XG5cbiAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICB0aGlzLmFjY29yZGlvblRvZ2dsZURpcmVjdGl2ZXMuZm9yRWFjaCgoYWNjb3JkaW9uVG9nZ2xlOiBBY2NvcmRpb25Ub2dnbGVEaXJlY3RpdmUpID0+IHtcbiAgICAgICAgdGhpcy5saXN0ZW5lcnMucHVzaCh0aGlzLnJlbmRlcmVyMi5saXN0ZW4oYWNjb3JkaW9uVG9nZ2xlLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2NsaWNrJywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgdGhpcy50b2dnbGVBY2NvcmRpb24oZXZlbnQsIGFjY29yZGlvblRvZ2dsZS5hY2NvcmRpb25Db21wb25lbnQuaW5kZXgpO1xuICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9KSk7XG4gICAgICAgIHRoaXMubGlzdGVuZXJzLnB1c2godGhpcy5yZW5kZXJlcjIubGlzdGVuKGFjY29yZGlvblRvZ2dsZS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdtb3VzZWVudGVyJywgKCkgPT4ge1xuICAgICAgICAgIEFjY29yZGlvbkdyb3VwQ29tcG9uZW50LmhlYWRlck1vdXNlRW50ZXIoYWNjb3JkaW9uVG9nZ2xlLmFjY29yZGlvbkNvbXBvbmVudCk7XG4gICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0pKTtcbiAgICAgICAgdGhpcy5saXN0ZW5lcnMucHVzaCh0aGlzLnJlbmRlcmVyMi5saXN0ZW4oYWNjb3JkaW9uVG9nZ2xlLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ21vdXNlbGVhdmUnLCAoKSA9PiB7XG4gICAgICAgICAgQWNjb3JkaW9uR3JvdXBDb21wb25lbnQuaGVhZGVyTW91c2VMZWF2ZShhY2NvcmRpb25Ub2dnbGUuYWNjb3JkaW9uQ29tcG9uZW50KTtcbiAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogW3VwZGF0ZUFjY29yZGlvbklzQ29sbGFwc2VkIGRlc2NyaXB0aW9uXVxuICAgKiBAbWV0aG9kIHVwZGF0ZUFjY29yZGlvbklzQ29sbGFwc2VkXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZUFjY29yZGlvbklzQ29sbGFwc2VkKCk6IHZvaWQge1xuICAgIHRoaXMuYWNjb3JkaW9uQ29tcG9uZW50cy5mb3JFYWNoKChhY2NvcmRpb246IEFjY29yZGlvbkNvbXBvbmVudCwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgYWNjb3JkaW9uLmlzQ29sbGFwc2VkID0gdGhpcy5hY3RpdmVJbmRleC5pbmRleE9mKGluZGV4KSA9PT0gLTE7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==