com.phloxui
Version:
PhloxUI Ng2+ Framework
645 lines (644 loc) • 46.6 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, ElementRef, Input, Output, EventEmitter, Type } from '@angular/core';
import { AbstractFloatingHeaderPanel } from './AbstractFloatingHeaderPanel';
import { NeedFocusService } from '../../service/NeedFocusService.service';
import { Option } from '../../decorator/Option.decorator';
import { I18N } from '../../decorator/I18N.decorator';
const /** @type {?} */ TYPE_NAME = "phx-component-floating-header-panel";
const /** @type {?} */ ANIMATE_MOVE_UP = "animate-move-up";
const /** @type {?} */ ANIMATE_MOVE_UP_CLASS = "." + ANIMATE_MOVE_UP;
const /** @type {?} */ ANIMATE_OPACITY = "animate-opacity";
const /** @type {?} */ ANIMATE_OPACITY_CLASS = "." + ANIMATE_OPACITY;
const /** @type {?} */ ANIMATE_LABEL_HEADER = "animate-label-header";
const /** @type {?} */ ANIMATE_LABEL_HEADER_CLASS = "." + ANIMATE_LABEL_HEADER;
export class ComponentFloatingHeaderPanel extends AbstractFloatingHeaderPanel {
/**
* @param {?} elementRef
* @param {?} needFocusService
*/
constructor(elementRef, needFocusService) {
super(elementRef, needFocusService);
this.scroll = (event) => {
let /** @type {?} */ scrollTop = $(event.target).scrollTop();
let /** @type {?} */ bodyY = (this.getScrollOffsetEnd() === null || this.getScrollOffsetEnd() === undefined) ? $(this.getBodyInstance().elementRef.nativeElement).position().top - this.getScrollOffsetStart() : this.getScrollOffsetEnd() - this.getScrollOffsetStart();
if (scrollTop <= bodyY) {
$(this.elementRef.nativeElement).find(ANIMATE_LABEL_HEADER_CLASS).css({
'margin-top': (this.heightFloating - this.heightFloating * (scrollTop / bodyY)) + 'px',
'opacity': (scrollTop / bodyY) + ''
});
$(this.elementRef.nativeElement).find(ANIMATE_LABEL_HEADER_CLASS).css({
'margin-top': (this.heightFloating - this.heightFloating * (scrollTop / bodyY)) + 'px',
'opacity': (scrollTop / bodyY) + ''
});
$(this.elementRef.nativeElement).find(ANIMATE_MOVE_UP_CLASS).css({
'margin-top': (this.heightFloating - this.heightFloating * (scrollTop / bodyY)) + 'px',
});
$(this.elementRef.nativeElement).find(ANIMATE_OPACITY_CLASS).css({
'opacity': (scrollTop / bodyY) + ''
});
}
else {
$(this.elementRef.nativeElement).find(ANIMATE_LABEL_HEADER_CLASS).css({
'margin-top': '0px',
'opacity': '1'
});
$(this.elementRef.nativeElement).find(ANIMATE_MOVE_UP_CLASS).css({
'margin-top': '0px',
});
$(this.elementRef.nativeElement).find(ANIMATE_OPACITY_CLASS).css({
'opacity': '1'
});
}
this.onScroll(event);
};
this.elementRef = elementRef;
this.setAlwaysShowHeader(false);
// this.floatingHeaderHandler = (event: any) => {
// this.floatingHeaderInstance = event.instance;
// };
this._headerHandler = (event) => {
this.headerInstance = event.instance;
if (this.headerHandler !== null && typeof this.headerHandler === 'function') {
this.headerHandler(event);
}
};
this._floatingMenuHandler = (event) => {
this.floatingMenuInstance = event.instance;
if (this.floatingMenuHandler !== null && typeof this.floatingMenuHandler === 'function') {
this.floatingMenuHandler(event);
}
};
this._bodyHandler = (event) => {
this.bodyInstance = event.instance;
if (this.bodyHandler !== null && typeof this.bodyHandler === 'function') {
this.bodyHandler(event);
}
};
}
/**
* @return {?}
*/
ngOnInit() {
super.ngOnInit();
setTimeout(() => {
window.addEventListener('scroll', this.scroll, true);
this.setScrollOffsetStart(53);
this.heightFloating = 82;
}, 50);
}
/**
* @return {?}
*/
ngOnDestroy() {
window.removeEventListener('scroll', this.scroll, true);
}
/**
* @param {?} inputValue
* @param {?} results
* @return {?}
*/
onValidationEnd(inputValue, results) {
}
/**
* @param {?} data
* @param {?} inputVal
* @return {?}
*/
onDataChange(data, inputVal) {
}
/**
* @param {?} $event
* @return {?}
*/
doFocus($event) {
}
/**
* @param {?} $event
* @return {?}
*/
doLostFocus($event) {
}
/**
* @return {?}
*/
isSelfDataDirty() {
return false;
}
/**
* @param {?} data
* @return {?}
*/
selfSaveData(data) {
}
/**
* @return {?}
*/
selfResetData() {
}
/**
* @return {?}
*/
getFloatingHeaderLabel() {
return this.floatingHeaderLabel;
}
/**
* @param {?} floatingHeaderLabel
* @return {?}
*/
setFloatingHeaderLabel(floatingHeaderLabel) {
this.floatingHeaderLabel = floatingHeaderLabel;
}
/**
* @return {?}
*/
getHeaderType() {
return this.headerType;
}
/**
* @param {?} headerType
* @return {?}
*/
setHeaderType(headerType) {
this.headerType = headerType;
}
/**
* @return {?}
*/
getFloatingMenuType() {
return this.floatingMenuType;
}
/**
* @param {?} floatingMenuType
* @return {?}
*/
setFloatingMenuType(floatingMenuType) {
this.floatingMenuType = floatingMenuType;
}
/**
* @return {?}
*/
getBodyType() {
return this.bodyType;
}
/**
* @param {?} bodyType
* @return {?}
*/
setBodyType(bodyType) {
this.bodyType = bodyType;
}
/**
* @return {?}
*/
getHeaderModel() {
return this.headerModel;
}
/**
* @param {?} headerModel
* @return {?}
*/
setHeaderModel(headerModel) {
this.headerModel = headerModel;
}
/**
* @return {?}
*/
getFloatingMenuModel() {
return this.floatingMenuModel;
}
/**
* @param {?} floatingMenuModel
* @return {?}
*/
setFloatingMenuModel(floatingMenuModel) {
this.floatingMenuModel = floatingMenuModel;
}
/**
* @return {?}
*/
getBodyModel() {
return this.bodyModel;
}
/**
* @param {?} bodyModel
* @return {?}
*/
setBodyModel(bodyModel) {
this.bodyModel = bodyModel;
}
/**
* @param {?} headerInstance
* @return {?}
*/
setHeaderInstance(headerInstance) {
this.headerInstance = headerInstance;
}
/**
* @return {?}
*/
getHeaderInstance() {
return this.headerInstance;
}
/**
* @param {?} floatingMenuInstance
* @return {?}
*/
setFloatingMenuInstance(floatingMenuInstance) {
this.floatingMenuInstance = floatingMenuInstance;
}
/**
* @return {?}
*/
getFloatingMenuInstance() {
return this.floatingMenuInstance;
}
/**
* @param {?} bodyInstance
* @return {?}
*/
setBodyInstance(bodyInstance) {
this.bodyInstance = bodyInstance;
}
/**
* @return {?}
*/
getBodyInstance() {
return this.bodyInstance;
}
/**
* @return {?}
*/
getHeaderHandler() {
return this.headerHandler;
}
/**
* @param {?} headerHandler
* @return {?}
*/
setHeaderHandler(headerHandler) {
this.headerHandler = headerHandler;
}
/**
* @return {?}
*/
getFloatingMenuHandler() {
return this.floatingMenuHandler;
}
/**
* @param {?} floatingMenuHandler
* @return {?}
*/
setFloatingMenuHandler(floatingMenuHandler) {
this.floatingMenuHandler = floatingMenuHandler;
}
/**
* @return {?}
*/
getBodyHandler() {
return this.bodyHandler;
}
/**
* @param {?} bodyHandler
* @return {?}
*/
setBodyHandler(bodyHandler) {
this.bodyHandler = bodyHandler;
}
}
ComponentFloatingHeaderPanel.TYPE_NAME = TYPE_NAME;
ComponentFloatingHeaderPanel.decorators = [
{ type: Component, args: [{
moduleId: module.id,
selector: TYPE_NAME,
template: `<div class="phx-component-floating-header-panel">
<div class="floating-header-panel-container">
<phx-component-wrapper
[type]="getHeaderType()"
[data]="getData()"
[handler]="_headerHandler"
[dataParent]="this"
[model]="getHeaderModel()">
</phx-component-wrapper>
<phx-component-wrapper
[type]="getFloatingMenuType()"
[data]="getData()"
[handler]="_floatingMenuHandler"
[dataParent]="this"
[model]="getFloatingMenuModel()">
</phx-component-wrapper>
<phx-component-wrapper
[type]="getBodyType()"
[data]="getData()"
[handler]="_bodyHandler"
[dataParent]="this"
[model]="getBodyModel()">
</phx-component-wrapper>
</div>
</div>
`
},] },
];
/** @nocollapse */
ComponentFloatingHeaderPanel.ctorParameters = () => [
{ type: ElementRef, },
{ type: NeedFocusService, },
];
ComponentFloatingHeaderPanel.propDecorators = {
"dataParent": [{ type: Input },],
"ignoreParentData": [{ type: Input },],
"data": [{ type: Input },],
"ignoreParentDisabled": [{ type: Input },],
"delegateHistory": [{ type: Input },],
"onDisabled": [{ type: Input },],
"onEnabled": [{ type: Input },],
"loadingEnabled": [{ type: Input },],
"i18nKey": [{ type: Input },],
"bypass": [{ type: Input, args: ['i18nBypass',] },],
"options": [{ type: Input },],
"disabled": [{ type: Input },],
"field": [{ type: Input },],
"name": [{ type: Input },],
"typeOfData": [{ type: Input },],
"readOnly": [{ type: Input },],
"help": [{ type: Input },],
"scrollOffset": [{ type: Input },],
"allowShowFloatingHeaderPanel": [{ type: Input },],
"floatingHeaderLabel": [{ type: Input },],
"headerType": [{ type: Input },],
"headerModel": [{ type: Input },],
"headerHandler": [{ type: Input },],
"floatingMenuType": [{ type: Input },],
"floatingMenuModel": [{ type: Input },],
"floatingMenuHandler": [{ type: Input },],
"bodyType": [{ type: Input },],
"bodyModel": [{ type: Input },],
"bodyHandler": [{ type: Input },],
"loadEvent": [{ type: Output, args: ['phxLoad',] },],
"startValidateEvent": [{ type: Output, args: ['phxStartValidate',] },],
"endValidateEvent": [{ type: Output, args: ['phxEndValidate',] },],
"beforeFocusEvent": [{ type: Output, args: ['phxBeforeFocus',] },],
"focusEvent": [{ type: Output, args: ['phxFocus',] },],
"beforeLostFocusEvent": [{ type: Output, args: ['phxBeforeLostFocus',] },],
"lostFocusEvent": [{ type: Output, args: ['phxLostFocus',] },],
"beforeChangeEvent": [{ type: Output, args: ['phxBeforeChange',] },],
"changeEvent": [{ type: Output, args: ['phxChange',] },],
};
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Object)
], ComponentFloatingHeaderPanel.prototype, "dataParent", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], ComponentFloatingHeaderPanel.prototype, "ignoreParentData", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Object)
], ComponentFloatingHeaderPanel.prototype, "data", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], ComponentFloatingHeaderPanel.prototype, "ignoreParentDisabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], ComponentFloatingHeaderPanel.prototype, "delegateHistory", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Function)
], ComponentFloatingHeaderPanel.prototype, "onDisabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Function)
], ComponentFloatingHeaderPanel.prototype, "onEnabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], ComponentFloatingHeaderPanel.prototype, "loadingEnabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], ComponentFloatingHeaderPanel.prototype, "i18nKey", void 0);
tslib_1.__decorate([
Option('i18nBypass'),
tslib_1.__metadata("design:type", Boolean)
], ComponentFloatingHeaderPanel.prototype, "bypass", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], ComponentFloatingHeaderPanel.prototype, "disabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], ComponentFloatingHeaderPanel.prototype, "field", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], ComponentFloatingHeaderPanel.prototype, "name", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], ComponentFloatingHeaderPanel.prototype, "typeOfData", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], ComponentFloatingHeaderPanel.prototype, "readOnly", void 0);
tslib_1.__decorate([
I18N(),
Option(),
tslib_1.__metadata("design:type", Object)
], ComponentFloatingHeaderPanel.prototype, "help", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Number)
], ComponentFloatingHeaderPanel.prototype, "scrollOffset", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], ComponentFloatingHeaderPanel.prototype, "allowShowFloatingHeaderPanel", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], ComponentFloatingHeaderPanel.prototype, "floatingHeaderLabel", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Type)
], ComponentFloatingHeaderPanel.prototype, "headerType", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Object)
], ComponentFloatingHeaderPanel.prototype, "headerModel", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Function)
], ComponentFloatingHeaderPanel.prototype, "headerHandler", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Type)
], ComponentFloatingHeaderPanel.prototype, "floatingMenuType", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Object)
], ComponentFloatingHeaderPanel.prototype, "floatingMenuModel", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Function)
], ComponentFloatingHeaderPanel.prototype, "floatingMenuHandler", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Type)
], ComponentFloatingHeaderPanel.prototype, "bodyType", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Object)
], ComponentFloatingHeaderPanel.prototype, "bodyModel", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Function)
], ComponentFloatingHeaderPanel.prototype, "bodyHandler", void 0);
tslib_1.__decorate([
Option('load'),
tslib_1.__metadata("design:type", EventEmitter)
], ComponentFloatingHeaderPanel.prototype, "loadEvent", void 0);
tslib_1.__decorate([
Option('startValidate'),
tslib_1.__metadata("design:type", EventEmitter)
], ComponentFloatingHeaderPanel.prototype, "startValidateEvent", void 0);
tslib_1.__decorate([
Option('endValidate'),
tslib_1.__metadata("design:type", EventEmitter)
], ComponentFloatingHeaderPanel.prototype, "endValidateEvent", void 0);
tslib_1.__decorate([
Option('beforeFocus'),
tslib_1.__metadata("design:type", EventEmitter)
], ComponentFloatingHeaderPanel.prototype, "beforeFocusEvent", void 0);
tslib_1.__decorate([
Option('focus'),
tslib_1.__metadata("design:type", EventEmitter)
], ComponentFloatingHeaderPanel.prototype, "focusEvent", void 0);
tslib_1.__decorate([
Option('beforeLostFocus'),
tslib_1.__metadata("design:type", EventEmitter)
], ComponentFloatingHeaderPanel.prototype, "beforeLostFocusEvent", void 0);
tslib_1.__decorate([
Option('lostFocus'),
tslib_1.__metadata("design:type", EventEmitter)
], ComponentFloatingHeaderPanel.prototype, "lostFocusEvent", void 0);
tslib_1.__decorate([
Option('beforeChange'),
tslib_1.__metadata("design:type", EventEmitter)
], ComponentFloatingHeaderPanel.prototype, "beforeChangeEvent", void 0);
tslib_1.__decorate([
Option('change'),
tslib_1.__metadata("design:type", EventEmitter)
], ComponentFloatingHeaderPanel.prototype, "changeEvent", void 0);
function ComponentFloatingHeaderPanel_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
ComponentFloatingHeaderPanel.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
ComponentFloatingHeaderPanel.ctorParameters;
/** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */
ComponentFloatingHeaderPanel.propDecorators;
/** @type {?} */
ComponentFloatingHeaderPanel.TYPE_NAME;
/** @type {?} */
ComponentFloatingHeaderPanel.prototype.dataParent;
/** @type {?} */
ComponentFloatingHeaderPanel.prototype.ignoreParentData;
/** @type {?} */
ComponentFloatingHeaderPanel.prototype.data;
/** @type {?} */
ComponentFloatingHeaderPanel.prototype.ignoreParentDisabled;
/** @type {?} */
ComponentFloatingHeaderPanel.prototype.delegateHistory;
/** @type {?} */
ComponentFloatingHeaderPanel.prototype.onDisabled;
/** @type {?} */
ComponentFloatingHeaderPanel.prototype.onEnabled;
/** @type {?} */
ComponentFloatingHeaderPanel.prototype.loadingEnabled;
/** @type {?} */
ComponentFloatingHeaderPanel.prototype.i18nKey;
/** @type {?} */
ComponentFloatingHeaderPanel.prototype.bypass;
/** @type {?} */
ComponentFloatingHeaderPanel.prototype.options;
/** @type {?} */
ComponentFloatingHeaderPanel.prototype.disabled;
/** @type {?} */
ComponentFloatingHeaderPanel.prototype.field;
/** @type {?} */
ComponentFloatingHeaderPanel.prototype.name;
/** @type {?} */
ComponentFloatingHeaderPanel.prototype.typeOfData;
/** @type {?} */
ComponentFloatingHeaderPanel.prototype.readOnly;
/** @type {?} */
ComponentFloatingHeaderPanel.prototype.help;
/** @type {?} */
ComponentFloatingHeaderPanel.prototype.scrollOffset;
/** @type {?} */
ComponentFloatingHeaderPanel.prototype.allowShowFloatingHeaderPanel;
/** @type {?} */
ComponentFloatingHeaderPanel.prototype.floatingHeaderLabel;
/** @type {?} */
ComponentFloatingHeaderPanel.prototype.headerType;
/** @type {?} */
ComponentFloatingHeaderPanel.prototype.headerModel;
/** @type {?} */
ComponentFloatingHeaderPanel.prototype.headerHandler;
/** @type {?} */
ComponentFloatingHeaderPanel.prototype.floatingMenuType;
/** @type {?} */
ComponentFloatingHeaderPanel.prototype.floatingMenuModel;
/** @type {?} */
ComponentFloatingHeaderPanel.prototype.floatingMenuHandler;
/** @type {?} */
ComponentFloatingHeaderPanel.prototype.bodyType;
/** @type {?} */
ComponentFloatingHeaderPanel.prototype.bodyModel;
/** @type {?} */
ComponentFloatingHeaderPanel.prototype.bodyHandler;
/** @type {?} */
ComponentFloatingHeaderPanel.prototype.heightFloating;
/** @type {?} */
ComponentFloatingHeaderPanel.prototype.headerInstance;
/** @type {?} */
ComponentFloatingHeaderPanel.prototype.floatingMenuInstance;
/** @type {?} */
ComponentFloatingHeaderPanel.prototype.bodyInstance;
/** @type {?} */
ComponentFloatingHeaderPanel.prototype._headerHandler;
/** @type {?} */
ComponentFloatingHeaderPanel.prototype._floatingMenuHandler;
/** @type {?} */
ComponentFloatingHeaderPanel.prototype._bodyHandler;
/** @type {?} */
ComponentFloatingHeaderPanel.prototype.loadEvent;
/** @type {?} */
ComponentFloatingHeaderPanel.prototype.startValidateEvent;
/** @type {?} */
ComponentFloatingHeaderPanel.prototype.endValidateEvent;
/** @type {?} */
ComponentFloatingHeaderPanel.prototype.beforeFocusEvent;
/** @type {?} */
ComponentFloatingHeaderPanel.prototype.focusEvent;
/** @type {?} */
ComponentFloatingHeaderPanel.prototype.beforeLostFocusEvent;
/** @type {?} */
ComponentFloatingHeaderPanel.prototype.lostFocusEvent;
/** @type {?} */
ComponentFloatingHeaderPanel.prototype.beforeChangeEvent;
/** @type {?} */
ComponentFloatingHeaderPanel.prototype.changeEvent;
/** @type {?} */
ComponentFloatingHeaderPanel.prototype.scroll;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcG9uZW50RmxvYXRpbmdIZWFkZXJQYW5lbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9jb20ucGhsb3h1aS8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnQvZGF0YXZpZXcvQ29tcG9uZW50RmxvYXRpbmdIZWFkZXJQYW5lbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUEyQixZQUFZLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFILE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTVFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRTFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUUxRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFHdEQsdUJBQU0sU0FBUyxHQUFXLHFDQUFxQyxDQUFDO0FBQ2hFLHVCQUFNLGVBQWUsR0FBVyxpQkFBaUIsQ0FBQztBQUNsRCx1QkFBTSxxQkFBcUIsR0FBVyxHQUFHLEdBQUcsZUFBZSxDQUFDO0FBQzVELHVCQUFNLGVBQWUsR0FBVyxpQkFBaUIsQ0FBQztBQUNsRCx1QkFBTSxxQkFBcUIsR0FBVyxHQUFHLEdBQUcsZUFBZSxDQUFDO0FBQzVELHVCQUFNLG9CQUFvQixHQUFXLHNCQUFzQixDQUFDO0FBQzVELHVCQUFNLDBCQUEwQixHQUFXLEdBQUcsR0FBRyxvQkFBb0IsQ0FBQztBQWdDdEUsTUFBTSxtQ0FBb0MsU0FBUSwyQkFBMkI7Ozs7O0lBa0ozRSxZQUFZLFVBQXNCLEVBQUUsZ0JBQWtDO1FBQ3BFLEtBQUssQ0FBQyxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztzQkE0Q3RCLENBQUMsS0FBVSxFQUFRLEVBQUU7WUFFbkMscUJBQUksU0FBUyxHQUFH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QU0sQ0FBQyxjQUFjLENBQUM7c0NBQ00sWUFBWTs7O0lBRXhDLE1BQU0sQ0FBQyxRQUFRLENBQUM7c0NBQ00sWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBFbGVtZW50UmVmLCBJbnB1dCwgT3V0cHV0LCBIb3N0TGlzdGVuZXIsIFZpZXdDaGlsZCwgRXZlbnRFbWl0dGVyLCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdEZsb2F0aW5nSGVhZGVyUGFuZWwgfSBmcm9tICcuL0Fic3RyYWN0RmxvYXRpbmdIZWFkZXJQYW5lbCc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uUmVzdWx0IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50L21vZGVsL1ZhbGlkYXRpb25SZXN1bHQnO1xuaW1wb3J0IHsgTmVlZEZvY3VzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UvTmVlZEZvY3VzU2VydmljZS5zZXJ2aWNlJztcbmltcG9ydCB7IENvbXBvbmVudEZsb2F0aW5nTW9kZWwgfSBmcm9tICcuLi8uL21vZGVsL0NvbXBvbmVudEZsb2F0aW5nTW9kZWwnO1xuaW1wb3J0IHsgT3B0aW9uIH0gZnJvbSAnLi4vLi4vZGVjb3JhdG9yL09wdGlvbi5kZWNvcmF0b3InO1xuaW1wb3J0IHsgSUhhc0RhdGEgfSBmcm9tICcuLi9JSGFzRGF0YSc7XG5pbXBvcnQgeyBJMThOIH0gZnJvbSAnLi4vLi4vZGVjb3JhdG9yL0kxOE4uZGVjb3JhdG9yJztcblxuZGVjbGFyZSB2YXIgJDogYW55O1xuY29uc3QgVFlQRV9OQU1FOiBzdHJpbmcgPSBcInBoeC1jb21wb25lbnQtZmxvYXRpbmctaGVhZGVyLXBhbmVsXCI7XG5jb25zdCBBTklNQVRFX01PVkVfVVA6IHN0cmluZyA9IFwiYW5pbWF0ZS1tb3ZlLXVwXCI7XG5jb25zdCBBTklNQVRFX01PVkVfVVBfQ0xBU1M6IHN0cmluZyA9IFwiLlwiICsgQU5JTUFURV9NT1ZFX1VQO1xuY29uc3QgQU5JTUFURV9PUEFDSVRZOiBzdHJpbmcgPSBcImFuaW1hdGUtb3BhY2l0eVwiO1xuY29uc3QgQU5JTUFURV9PUEFDSVRZX0NMQVNTOiBzdHJpbmcgPSBcIi5cIiArIEFOSU1BVEVfT1BBQ0lUWTtcbmNvbnN0IEFOSU1BVEVfTEFCRUxfSEVBREVSOiBzdHJpbmcgPSBcImFuaW1hdGUtbGFiZWwtaGVhZGVyXCI7XG5jb25zdCBBTklNQVRFX0xBQkVMX0hFQURFUl9DTEFTUzogc3RyaW5nID0gXCIuXCIgKyBBTklNQVRFX0xBQkVMX0hFQURFUjtcblxuQENvbXBvbmVudCh7XG4gIG1vZHVsZUlkOiBtb2R1bGUuaWQsXG4gIHNlbGVjdG9yOiBUWVBFX05BTUUsXG4gIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cInBoeC1jb21wb25lbnQtZmxvYXRpbmctaGVhZGVyLXBhbmVsXCI+XG4gICAgPGRpdiBjbGFzcz1cImZsb2F0aW5nLWhlYWRlci1wYW5lbC1jb250YWluZXJcIj5cbiAgICAgICAgPHBoeC1jb21wb25lbnQtd3JhcHBlclxuICAgICAgICAgICAgW3R5cGVdPVwiZ2V0SGVhZGVyVHlwZSgpXCJcbiAgICAgICAgICAgIFtkYXRhXT1cImdldERhdGEoKVwiXG4gICAgICAgICAgICBbaGFuZGxlcl09XCJfaGVhZGVySGFuZGxlclwiXG4gICAgICAgICAgICBbZGF0YVBhcmVudF09XCJ0aGlzXCJcbiAgICAgICAgICAgIFttb2RlbF09XCJnZXRIZWFkZXJNb2RlbCgpXCI+XG4gICAgICAgIDwvcGh4LWNvbXBvbmVudC13cmFwcGVyPlxuICAgICAgICA8cGh4LWNvbXBvbmVudC13cmFwcGVyXG4gICAgICAgICAgICBbdHlwZV09XCJnZXRGbG9hdGluZ01lbnVUeXBlKClcIlxuICAgICAgICAgICAgW2RhdGFdPVwiZ2V0RGF0YSgpXCJcbiAgICAgICAgICAgIFtoYW5kbGVyXT1cIl9mbG9hdGluZ01lbnVIYW5kbGVyXCJcbiAgICAgICAgICAgIFtkYXRhUGFyZW50XT1cInRoaXNcIlxuICAgICAgICAgICAgW21vZGVsXT1cImdldEZsb2F0aW5nTWVudU1vZGVsKClcIj5cbiAgICAgICAgPC9waHgtY29tcG9uZW50LXdyYXBwZXI+XG4gICAgICAgIDxwaHgtY29tcG9uZW50LXdyYXBwZXJcbiAgICAgICAgICAgIFt0eXBlXT1cImdldEJvZHlUeXBlKClcIlxuICAgICAgICAgICAgW2RhdGFdPVwiZ2V0RGF0YSgpXCJcbiAgICAgICAgICAgIFtoYW5kbGVyXT1cIl9ib2R5SGFuZGxlclwiXG4gICAgICAgICAgICBbZGF0YVBhcmVudF09XCJ0aGlzXCJcbiAgICAgICAgICAgIFttb2RlbF09XCJnZXRCb2R5TW9kZWwoKVwiPlxuICAgICAgICA8L3BoeC1jb21wb25lbnQtd3JhcHBlcj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuYFxufSlcbmV4cG9ydCBjbGFzcyBDb21wb25lbnRGbG9hdGluZ0hlYWRlclBhbmVsIGV4dGVuZHMgQWJzdHJhY3RGbG9hdGluZ0hlYWRlclBhbmVsIGltcGxlbWVudHMgT25Jbml0IHtcblxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFRZUEVfTkFNRTogc3RyaW5nID0gVFlQRV9OQU1FO1xuXG4gIC8vIFJlLWRlY2xhcmUgZmllbGQgdG8gZGVjbGFyZSBuZyBASW5wdXQuXG4gIC8vIC0tLSBmcm9tIEFic3RyYWN0SGFzRGF0YVxuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGRhdGFQYXJlbnQ6IElIYXNEYXRhO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGlnbm9yZVBhcmVudERhdGE6IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgZGF0YTogYW55O1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGlnbm9yZVBhcmVudERpc2FibGVkOiBib29sZWFuO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGRlbGVnYXRlSGlzdG9yeTogYm9vbGVhbjtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBvbkRpc2FibGVkOiBGdW5jdGlvbjtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBvbkVuYWJsZWQ6IEZ1bmN0aW9uO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGxvYWRpbmdFbmFibGVkOiBib29sZWFuO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGkxOG5LZXk6IHN0cmluZztcbiAgQElucHV0KCdpMThuQnlwYXNzJylcbiAgQE9wdGlvbignaTE4bkJ5cGFzcycpXG4gIHByb3RlY3RlZCBieXBhc3M6IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIHByb3RlY3RlZCBvcHRpb25zOiBhbnk7XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgZGlzYWJsZWQ6IGJvb2xlYW47XG4gIC8vIC0tLSBmcm9tIEFic3RyYWN0RGF0YVZpZXdcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBmaWVsZDogc3RyaW5nO1xuICAvLyAtLS0gZnJvbSBBYnN0cmFjdElucHV0RGF0YVZpZXdcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBuYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgdHlwZU9mRGF0YTogc3RyaW5nO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIHJlYWRPbmx5OiBib29sZWFuO1xuICBASW5wdXQoKVxuICBASTE4TigpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgaGVscDogYW55O1xuICAvLyAtLS0gZnJvbSBBYnN0cmFjdEZsb2F0aW5nSGVhZGVyUGFuZWxcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBzY3JvbGxPZmZzZXQ6IG51bWJlcjtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBhbGxvd1Nob3dGbG9hdGluZ0hlYWRlclBhbmVsOiBib29sZWFuO1xuICAvLyAtLS0gU2VsZlxuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJpdmF0ZSBmbG9hdGluZ0hlYWRlckxhYmVsOiBzdHJpbmc7XG4gIC8vIEBJbnB1dCgpXG4gIC8vIEBPcHRpb24oKVxuICAvLyBwcml2YXRlIGZsb2F0aW5nSGVhZGVyVHlwZTogYW55O1xuICAvLyBASW5wdXQoKVxuICAvLyBAT3B0aW9uKClcbiAgLy8gcHJpdmF0ZSBmbG9hdGluZ0hlYWRlck1vZGVsOiBhbnk7XG4gIC8vIHByaXZhdGUgZmxvYXRpbmdIZWFkZXJJbnN0YW5jZTogYW55O1xuICAvLyBwcml2YXRlIGZsb2F0aW5nSGVhZGVySGFuZGxlcjogRnVuY3Rpb247XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcml2YXRlIGhlYWRlclR5cGU6IFR5cGU8YW55PjtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByaXZhdGUgaGVhZGVyTW9kZWw6IGFueTtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByaXZhdGUgaGVhZGVySGFuZGxlcjogRnVuY3Rpb247XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcml2YXRlIGZsb2F0aW5nTWVudVR5cGU6IFR5cGU8YW55PjtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByaXZhdGUgZmxvYXRpbmdNZW51TW9kZWw6IGFueTtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByaXZhdGUgZmxvYXRpbmdNZW51SGFuZGxlcjogRnVuY3Rpb25cbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByaXZhdGUgYm9keVR5cGU6IFR5cGU8YW55PjtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByaXZhdGUgYm9keU1vZGVsOiBhbnk7XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcml2YXRlIGJvZHlIYW5kbGVyOiBGdW5jdGlvbjtcblxuICBwcml2YXRlIGhlaWdodEZsb2F0aW5nOiBudW1iZXI7XG4gIHByaXZhdGUgaGVhZGVySW5zdGFuY2U6IGFueTtcbiAgcHJpdmF0ZSBmbG9hdGluZ01lbnVJbnN0YW5jZTogYW55O1xuICBwcml2YXRlIGJvZHlJbnN0YW5jZTogYW55O1xuICBwdWJsaWMgX2hlYWRlckhhbmRsZXI6IEZ1bmN0aW9uO1xuICBwdWJsaWMgX2Zsb2F0aW5nTWVudUhhbmRsZXI6IEZ1bmN0aW9uO1xuICBwdWJsaWMgX2JvZHlIYW5kbGVyOiBGdW5jdGlvbjtcblxuICAvLyBSZS1kZWNsYXJlIGZpZWxkIHRvIGRlY2xhcmUgbmcgQE91dHB1dC5cbiAgLy8gLS0tIGZyb20gQWJzdHJhY3RIYXNEYXRhXG4gIEBPdXRwdXQoJ3BoeExvYWQnKVxuICBAT3B0aW9uKCdsb2FkJylcbiAgcHJvdGVjdGVkIGxvYWRFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIC8vIC0tLSBmcm9tIEFic3RyYWN0RGF0YVZpZXdcbiAgLy8gLS0tIGZyb20gQWJzdHJhY3RJbnB1dERhdGFWaWV3XG4gIEBPdXRwdXQoJ3BoeFN0YXJ0VmFsaWRhdGUnKVxuICBAT3B0aW9uKCdzdGFydFZhbGlkYXRlJylcbiAgcHJvdGVjdGVkIHN0YXJ0VmFsaWRhdGVFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoJ3BoeEVuZFZhbGlkYXRlJylcbiAgQE9wdGlvbignZW5kVmFsaWRhdGUnKVxuICBwcm90ZWN0ZWQgZW5kVmFsaWRhdGVFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoJ3BoeEJlZm9yZUZvY3VzJylcbiAgQE9wdGlvbignYmVmb3JlRm9jdXMnKVxuICBwcm90ZWN0ZWQgYmVmb3JlRm9jdXNFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoJ3BoeEZvY3VzJylcbiAgQE9wdGlvbignZm9jdXMnKVxuICBwcm90ZWN0ZWQgZm9jdXNFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoJ3BoeEJlZm9yZUxvc3RGb2N1cycpXG4gIEBPcHRpb24oJ2JlZm9yZUxvc3RGb2N1cycpXG4gIHByb3RlY3RlZCBiZWZvcmVMb3N0Rm9jdXNFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoJ3BoeExvc3RGb2N1cycpXG4gIEBPcHRpb24oJ2xvc3RGb2N1cycpXG4gIHByb3RlY3RlZCBsb3N0Rm9jdXNFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoJ3BoeEJlZm9yZUNoYW5nZScpXG4gIEBPcHRpb24oJ2JlZm9yZUNoYW5nZScpXG4gIHByb3RlY3RlZCBiZWZvcmVDaGFuZ2VFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoJ3BoeENoYW5nZScpXG4gIEBPcHRpb24oJ2NoYW5nZScpXG4gIHByb3RlY3RlZCBjaGFuZ2VFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG5cbiAgY29uc3RydWN0b3IoZWxlbWVudFJlZjogRWxlbWVudFJlZiwgbmVlZEZvY3VzU2VydmljZTogTmVlZEZvY3VzU2VydmljZSkge1xuICAgIHN1cGVyKGVsZW1lbnRSZWYsIG5lZWRGb2N1c1NlcnZpY2UpO1xuXG4gICAgdGhpcy5lbGVtZW50UmVmID0gZWxlbWVudFJlZjtcbiAgICB0aGlzLnNldEFsd2F5c1Nob3dIZWFkZXIoZmFsc2UpO1xuXG4gICAgLy8gdGhpcy5mbG9hdGluZ0hlYWRlckhhbmRsZXIgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIC8vICAgdGhpcy5mbG9hdGluZ0hlYWRlckluc3RhbmNlID0gZXZlbnQuaW5zdGFuY2U7XG4gICAgLy8gfTtcblxuICAgIHRoaXMuX2hlYWRlckhhbmRsZXIgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgdGhpcy5oZWFkZXJJbnN0YW5jZSA9IGV2ZW50Lmluc3RhbmNlO1xuXG4gICAgICBpZiAodGhpcy5oZWFkZXJIYW5kbGVyICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLmhlYWRlckhhbmRsZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJIYW5kbGVyKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5fZmxvYXRpbmdNZW51SGFuZGxlciA9IChldmVudDogYW55KSA9PiB7XG4gICAgICB0aGlzLmZsb2F0aW5nTWVudUluc3RhbmNlID0gZXZlbnQuaW5zdGFuY2U7XG5cbiAgICAgIGlmICh0aGlzLmZsb2F0aW5nTWVudUhhbmRsZXIgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuZmxvYXRpbmdNZW51SGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLmZsb2F0aW5nTWVudUhhbmRsZXIoZXZlbnQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLl9ib2R5SGFuZGxlciA9IChldmVudDogYW55KSA9PiB7XG4gICAgICB0aGlzLmJvZHlJbnN0YW5jZSA9IGV2ZW50Lmluc3RhbmNlO1xuXG4gICAgICBpZiAodGhpcy5ib2R5SGFuZGxlciAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5ib2R5SGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLmJvZHlIYW5kbGVyKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLnNjcm9sbCwgdHJ1ZSk7XG4gICAgICB0aGlzLnNldFNjcm9sbE9mZnNldFN0YXJ0KDUzKTtcbiAgICAgIHRoaXMuaGVpZ2h0RmxvYXRpbmcgPSA4MjtcbiAgICB9LCA1MCk7XG4gIH1cblxuICBwdWJsaWMgc2Nyb2xsID0gKGV2ZW50OiBhbnkpOiB2b2lkID0+IHtcblxuICAgIGxldCBzY3JvbGxUb3AgPSAkKGV2ZW50LnRhcmdldCkuc2Nyb2xsVG9wKCk7XG4gICAgbGV0IGJvZHlZID0gKHRoaXMuZ2V0U2Nyb2xsT2Zmc2V0RW5kKCkgPT09IG51bGwgfHwgdGhpcy5nZXRTY3JvbGxPZmZzZXRFbmQoKSA9PT0gdW5kZWZpbmVkKSA/ICQodGhpcy5nZXRCb2R5SW5zdGFuY2UoKS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLnBvc2l0aW9uKCkudG9wIC0gdGhpcy5nZXRTY3JvbGxPZmZzZXRTdGFydCgpIDogdGhpcy5nZXRTY3JvbGxPZmZzZXRFbmQoKSAtIHRoaXMuZ2V0U2Nyb2xsT2Zmc2V0U3RhcnQoKTtcblxuICAgIGlmIChzY3JvbGxUb3AgPD0gYm9keVkpIHtcbiAgICAgICQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLmZpbmQoQU5JTUFURV9MQUJFTF9IRUFERVJfQ0xBU1MpLmNzcyh7XG4gICAgICAgICdtYXJnaW4tdG9wJzogKHRoaXMuaGVpZ2h0RmxvYXRpbmcgLSB0aGlzLmhlaWdodEZsb2F0aW5nICogKHNjcm9sbFRvcCAvIGJvZHlZKSkgKyAncHgnLFxuICAgICAgICAnb3BhY2l0eSc6IChzY3JvbGxUb3AgLyBib2R5WSkgKyAnJ1xuICAgICAgfSk7XG5cbiAgICAgICQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLmZpbmQoQU5JTUFURV9MQUJFTF9IRUFERVJfQ0xBU1MpLmNzcyh7XG4gICAgICAgICdtYXJnaW4tdG9wJzogKHRoaXMuaGVpZ2h0RmxvYXRpbmcgLSB0aGlzLmhlaWdodEZsb2F0aW5nICogKHNjcm9sbFRvcCAvIGJvZHlZKSkgKyAncHgnLFxuICAgICAgICAnb3BhY2l0eSc6IChzY3JvbGxUb3AgLyBib2R5WSkgKyAnJ1xuICAgICAgfSk7XG5cbiAgICAgICQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLmZpbmQoQU5JTUFURV9NT1ZFX1VQX0NMQVNTKS5jc3Moe1xuICAgICAgICAnbWFyZ2luLXRvcCc6ICh0aGlzLmhlaWdodEZsb2F0aW5nIC0gdGhpcy5oZWlnaHRGbG9hdGluZyAqIChzY3JvbGxUb3AgLyBib2R5WSkpICsgJ3B4JyxcbiAgICAgIH0pO1xuXG4gICAgICAkKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KS5maW5kKEFOSU1BVEVfT1BBQ0lUWV9DTEFTUykuY3NzKHtcbiAgICAgICAgJ29wYWNpdHknOiAoc2Nyb2xsVG9wIC8gYm9keVkpICsgJydcbiAgICAgIH0pO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgICQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLmZpbmQoQU5JTUFURV9MQUJFTF9IRUFERVJfQ0xBU1MpLmNzcyh7XG4gICAgICAgICdtYXJnaW4tdG9wJzogJzBweCcsXG4gICAgICAgICdvcGFjaXR5JzogJzEnXG4gICAgICB9KTtcblxuICAgICAgJCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkuZmluZChBTklNQVRFX01PVkVfVVBfQ0xBU1MpLmNzcyh7XG4gICAgICAgICdtYXJnaW4tdG9wJzogJzBweCcsXG4gICAgICB9KTtcblxuICAgICAgJCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkuZmluZChBTklNQVRFX09QQUNJVFlfQ0xBU1MpLmNzcyh7XG4gICAgICAgICdvcGFjaXR5JzogJzEnXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLm9uU2Nyb2xsKGV2ZW50KTtcbiAgfTtcblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMuc2Nyb2xsLCB0cnVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvblZhbGlkYXRpb25FbmQoaW5wdXRWYWx1ZTogYW55LCByZXN1bHRzOiBWYWxpZGF0aW9uUmVzdWx0W10pOiB2b2lkIHtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkRhdGFDaGFuZ2UoZGF0YTogYW55LCBpbnB1dFZhbDogYW55KTogdm9pZCB7XG4gIH1cblxuICBwcm90ZWN0ZWQgZG9Gb2N1cygkZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gIH1cblxuICBwcm90ZWN0ZWQgZG9Mb3N0Rm9jdXMoJGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICB9XG5cbiAgcHVibGljIGlzU2VsZkRhdGFEaXJ0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgc2VsZlNhdmVEYXRhKGRhdGE6IGFueSk6IHZvaWQge1xuICB9XG5cbiAgcHVibGljIHNlbGZSZXNldERhdGEoKTogdm9pZCB7XG4gIH1cblxuICBwdWJsaWMgZ2V0RmxvYXRpbmdIZWFkZXJMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmZsb2F0aW5nSGVhZGVyTGFiZWw7XG4gIH1cblxuICBwdWJsaWMgc2V0RmxvYXRpbmdIZWFkZXJMYWJlbChmbG9hdGluZ0hlYWRlckxhYmVsOiBzdHJpbmcpIHtcbiAgICB0aGlzLmZsb2F0aW5nSGVhZGVyTGFiZWwgPSBmbG9hdGluZ0hlYWRlckxhYmVsO1xuICB9XG5cbiAgcHVibGljIGdldEhlYWRlclR5cGUoKTogVHlwZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5oZWFkZXJUeXBlO1xuICB9XG5cbiAgcHVibGljIHNldEhlYWRlclR5cGUoaGVhZGVyVHlwZTogVHlwZTxhbnk+KSB7XG4gICAgdGhpcy5oZWFkZXJUeXBlID0gaGVhZGVyVHlwZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRGbG9hdGluZ01lbnVUeXBlKCk6IFR5cGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuZmxvYXRpbmdNZW51VHlwZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRGbG9hdGluZ01lbnVUeXBlKGZsb2F0aW5nTWVudVR5cGU6IFR5cGU8YW55Pikge1xuICAgIHRoaXMuZmxvYXRpbmdNZW51VHlwZSA9IGZsb2F0aW5nTWVudVR5cGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0Qm9keVR5cGUoKTogVHlwZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5ib2R5VHlwZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRCb2R5VHlwZShib2R5VHlwZTogVHlwZTxhbnk+KSB7XG4gICAgdGhpcy5ib2R5VHlwZSA9IGJvZHlUeXBlO1xuICB9XG5cbiAgcHVibGljIGdldEhlYWRlck1vZGVsKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuaGVhZGVyTW9kZWw7XG4gIH1cblxuICBwdWJsaWMgc2V0SGVhZGVyTW9kZWwoaGVhZGVyTW9kZWw6IGFueSkge1xuICAgIHRoaXMuaGVhZGVyTW9kZWwgPSBoZWFkZXJNb2RlbDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRGbG9hdGluZ01lbnVNb2RlbCgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmZsb2F0aW5nTWVudU1vZGVsO1xuICB9XG5cbiAgcHVibGljIHNldEZsb2F0aW5nTWVudU1vZGVsKGZsb2F0aW5nTWVudU1vZGVsOiBhbnkpIHtcbiAgICB0aGlzLmZsb2F0aW5nTWVudU1vZGVsID0gZmxvYXRpbmdNZW51TW9kZWw7XG4gIH1cblxuICBwdWJsaWMgZ2V0Qm9keU1vZGVsKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuYm9keU1vZGVsO1xuICB9XG5cbiAgcHVibGljIHNldEJvZHlNb2RlbChib2R5TW9kZWw6IGFueSkge1xuICAgIHRoaXMuYm9keU1vZGVsID0gYm9keU1vZGVsO1xuICB9XG5cbiAgcHVibGljIHNldEhlYWRlckluc3RhbmNlKGhlYWRlckluc3RhbmNlOiBhbnkpIHtcbiAgICB0aGlzLmhlYWRlckluc3RhbmNlID0gaGVhZGVySW5zdGFuY2U7XG4gIH1cblxuICBwdWJsaWMgZ2V0SGVhZGVySW5zdGFuY2UoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5oZWFkZXJJbnN0YW5jZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRGbG9hdGluZ01lbnVJbnN0YW5jZShmbG9hdGluZ01lbnVJbnN0YW5jZTogYW55KSB7XG4gICAgdGhpcy5mbG9hdGluZ01lbnVJbnN0YW5jZSA9IGZsb2F0aW5nTWVudUluc3RhbmNlO1xuICB9XG5cbiAgcHVibGljIGdldEZsb2F0aW5nTWVudUluc3RhbmNlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZmxvYXRpbmdNZW51SW5zdGFuY2U7XG4gIH1cblxuICBwdWJsaWMgc2V0Qm9keUluc3RhbmNlKGJvZHlJbnN0YW5jZTogYW55KSB7XG4gICAgdGhpcy5ib2R5SW5zdGFuY2UgPSBib2R5SW5zdGFuY2U7XG4gIH1cblxuICBwdWJsaWMgZ2V0Qm9keUluc3RhbmNlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuYm9keUluc3RhbmNlO1xuICB9XG5cbiAgcHVibGljIGdldEhlYWRlckhhbmRsZXIoKTogYW55e1xuICAgIHJldHVybiB0aGlzLmhlYWRlckhhbmRsZXI7XG4gIH1cblxuICBwdWJsaWMgc2V0SGVhZGVySGFuZGxlcihoZWFkZXJIYW5kbGVyOiBGdW5jdGlvbik6IHZvaWQge1xuICAgIHRoaXMuaGVhZGVySGFuZGxlciA9IGhlYWRlckhhbmRsZXI7XG4gIH1cblxuICBwdWJsaWMgZ2V0RmxvYXRpbmdNZW51SGFuZGxlcigpOiBGdW5jdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuZmxvYXRpbmdNZW51SGFuZGxlcjtcbiAgfVxuXG4gIHB1YmxpYyBzZXRGbG9hdGluZ01lbnVIYW5kbGVyKGZsb2F0aW5nTWVudUhhbmRsZXI6IEZ1bmN0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5mbG9hdGluZ01lbnVIYW5kbGVyID0gZmxvYXRpbmdNZW51SGFuZGxlcjtcbiAgfVxuXG4gIHB1YmxpYyBnZXRCb2R5SGFuZGxlcigpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmJvZHlIYW5kbGVyO1xuICB9XG5cbiAgcHVibGljIHNldEJvZHlIYW5kbGVyKGJvZHlIYW5kbGVyOiBGdW5jdGlvbik6IHZvaWQge1xuICAgIHRoaXMuYm9keUhhbmRsZXIgPSBib2R5SGFuZGxlcjtcbiAgfVxufVxuIl19