ng-zorro-antd-mobile
Version:
An enterprise-class mobile UI components based on Ant Design and Angular
687 lines (686 loc) • 44.5 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import { Component, Input, Output, EventEmitter, ViewChild, HostBinding, Renderer2, ElementRef, forwardRef } from '@angular/core';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
var InputItem = /** @class */ (function () {
function InputItem(element, render) {
this.element = element;
this.render = render;
this.prefixCls = 'am-input';
this.setFocus = {};
this.pattern = '';
this.autoFocus = false;
this.inputType = 'text';
this._type = 'text';
this._defaultValue = '';
this._placeholder = '';
this._editable = true;
this._disabled = false;
this._clear = false;
this._error = false;
this._extra = '';
this._labelNumber = 5;
this._updatePlaceholder = false;
this._prefixListCls = 'am-list';
this._moneyKeyboardAlign = 'right';
this._focus = false;
this._isClear = false;
this.onChange = new EventEmitter();
this.onBlur = new EventEmitter();
this.onFocus = new EventEmitter();
this.onErrorClick = new EventEmitter();
this.onExtraClick = new EventEmitter();
this.clsItem = true;
this.clsDisabled = this._disabled;
this.clsError = this._error;
this.clsFocus = this._focus;
this.clsAndroid = this._focus;
this._onChange = function (_) { };
this._el = element.nativeElement;
}
Object.defineProperty(InputItem.prototype, "type", {
get: /**
* @return {?}
*/
function () {
return this._type;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
if (value && value.length > 0) {
this.inputType = value;
if (value === 'bankCard' || value === 'phone') {
this._type = 'tel';
}
else if (value === 'password') {
this._type = 'password';
}
else if (value === 'digit') {
this._type = 'number';
}
else if (value !== 'text' && value !== 'number') {
this._type = value;
}
if (value === 'number') {
this.pattern = '[0-9]*';
}
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(InputItem.prototype, "value", {
get: /**
* @return {?}
*/
function () {
return this._value;
},
set: /**
* @param {?} v
* @return {?}
*/
function (v) {
if (typeof v === undefined || v === null) {
this._value = '';
}
this._value = v;
},
enumerable: true,
configurable: true
});
Object.defineProperty(InputItem.prototype, "defaultValue", {
get: /**
* @return {?}
*/
function () {
return this._defaultValue;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._defaultValue = value;
this._value = this._defaultValue;
},
enumerable: true,
configurable: true
});
Object.defineProperty(InputItem.prototype, "placeholder", {
get: /**
* @return {?}
*/
function () {
return this._placeholder;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._placeholder = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(InputItem.prototype, "editable", {
get: /**
* @return {?}
*/
function () {
return this._editable;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._editable = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(InputItem.prototype, "disabled", {
get: /**
* @return {?}
*/
function () {
return this._disabled;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._disabled = value;
this.clsDisabled = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(InputItem.prototype, "clear", {
get: /**
* @return {?}
*/
function () {
return this._clear;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._clear = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(InputItem.prototype, "maxLength", {
get: /**
* @return {?}
*/
function () {
return this._maxLength;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._maxLength = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(InputItem.prototype, "error", {
get: /**
* @return {?}
*/
function () {
return this._error;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._error = value;
this.clsError = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(InputItem.prototype, "extra", {
get: /**
* @return {?}
*/
function () {
return this._extra;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._extra = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(InputItem.prototype, "labelNumber", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._labelNumber = value;
this.setCls();
},
enumerable: true,
configurable: true
});
Object.defineProperty(InputItem.prototype, "updatePlaceholder", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._updatePlaceholder = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(InputItem.prototype, "prefixListCls", {
get: /**
* @return {?}
*/
function () {
return this._prefixListCls;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._prefixListCls = value;
this.render.addClass(this._el, value + '-item');
this.render.addClass(this._el, value + '-item-middle');
},
enumerable: true,
configurable: true
});
Object.defineProperty(InputItem.prototype, "name", {
get: /**
* @return {?}
*/
function () {
return this._name;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._name = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(InputItem.prototype, "moneyKeyboardAlign", {
get: /**
* @return {?}
*/
function () {
return this._moneyKeyboardAlign;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._moneyKeyboardAlign = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(InputItem.prototype, "locale", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._locale = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(InputItem.prototype, "focus", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
if (value && value.focus) {
this.autoFocus = value.focus;
if (this._type === 'money') {
this.setFocus = value;
}
else if (this.inputElementRef) {
this._focus = true;
this.inputElementRef.nativeElement.focus();
this.inputFocus('');
}
}
},
enumerable: true,
configurable: true
});
/**
* @return {?}
*/
InputItem.prototype.setCls = /**
* @return {?}
*/
function () {
var _a, _b;
if (this.lableRef.nativeElement.children.length > 0 ||
(this.lableRef.nativeElement && this.lableRef.nativeElement.innerText !== '')) {
this.labelCls = (_a = {},
_a[this.prefixCls + "-label"] = true,
_a[this.prefixCls + "-label-2"] = this._labelNumber === 2,
_a[this.prefixCls + "-label-3"] = this._labelNumber === 3,
_a[this.prefixCls + "-label-4"] = this._labelNumber === 4,
_a[this.prefixCls + "-label-5"] = this._labelNumber === 5,
_a[this.prefixCls + "-label-6"] = this._labelNumber === 6,
_a[this.prefixCls + "-label-7"] = this._labelNumber === 7,
_a);
}
this.controlCls = (_b = {}, _b[this.prefixCls + "-control"] = true, _b);
};
/**
* @param {?} e
* @return {?}
*/
InputItem.prototype.inputChange = /**
* @param {?} e
* @return {?}
*/
function (e) {
/** @type {?} */
var value = e;
switch (this.inputType) {
case 'text':
break;
case 'bankCard':
value = value.replace(/\D/g, '').replace(/(....)(?=.)/g, '$1 ');
break;
case 'phone':
value = value.replace(/\D/g, '').substring(0, 11);
/** @type {?} */
var valueLen = value.length;
if (valueLen > 3 && valueLen < 8) {
value = value.substr(0, 3) + " " + value.substr(3);
}
else if (valueLen >= 8) {
value = value.substr(0, 3) + " " + value.substr(3, 4) + " " + value.substr(7);
}
break;
case 'number':
value = value.replace(/\D/g, '');
break;
case 'password':
break;
default:
this._value = value;
break;
}
this._value = value;
if (this._type !== 'money') {
this.inputElementRef.nativeElement.value = this._value;
}
this._onChange(this._value);
this.onChange.emit(this._value);
};
/**
* @param {?} value
* @return {?}
*/
InputItem.prototype.inputFocus = /**
* @param {?} value
* @return {?}
*/
function (value) {
var _this = this;
setTimeout(function () {
_this._focus = true;
_this.clsFocus = true;
_this.clsAndroid = true;
}, 100);
this.onFocus.emit(value);
};
/**
* @param {?} value
* @param {?} event
* @return {?}
*/
InputItem.prototype.inputBlur = /**
* @param {?} value
* @param {?} event
* @return {?}
*/
function (value, event) {
var _this = this;
setTimeout(function () {
if (!_this._isClear) {
_this._focus = false;
_this.clsFocus = false;
_this.clsAndroid = false;
_this.onBlur.emit(value);
}
_this._isClear = false;
}, 100);
};
/**
* @return {?}
*/
InputItem.prototype.clearInput = /**
* @return {?}
*/
function () {
if (this._type !== 'password' && this._updatePlaceholder) {
this._placeholder = this._value;
}
this._value = '';
this.onChange.emit('');
this._isClear = true;
if (this._type !== 'money') {
this.inputElementRef.nativeElement.value = this._value;
}
this.inputFocus(this._value);
};
/**
* @param {?} e
* @return {?}
*/
InputItem.prototype.errorClick = /**
* @param {?} e
* @return {?}
*/
function (e) {
if (this.onErrorClick) {
this.onErrorClick.emit(e);
}
};
/**
* @param {?} e
* @return {?}
*/
InputItem.prototype.extraClick = /**
* @param {?} e
* @return {?}
*/
function (e) {
if (this.onExtraClick) {
this.onExtraClick.emit(e);
}
};
/**
* @param {?} value
* @return {?}
*/
InputItem.prototype.writeValue = /**
* @param {?} value
* @return {?}
*/
function (value) {
if (value) {
this._value = value;
}
};
/**
* @param {?} fn
* @return {?}
*/
InputItem.prototype.registerOnChange = /**
* @param {?} fn
* @return {?}
*/
function (fn) {
this._onChange = fn;
};
/**
* @param {?} fn
* @return {?}
*/
InputItem.prototype.registerOnTouched = /**
* @param {?} fn
* @return {?}
*/
function (fn) { };
/**
* @return {?}
*/
InputItem.prototype.ngOnChanges = /**
* @return {?}
*/
function () {
if (this.inputElementRef && this._type !== 'money' && this._value !== undefined) {
this.inputElementRef.nativeElement.value = this._value;
}
};
/**
* @return {?}
*/
InputItem.prototype.ngOnInit = /**
* @return {?}
*/
function () {
this.setCls();
this.render.addClass(this._el, this._prefixListCls + '-item');
this.render.addClass(this._el, this._prefixListCls + '-item-middle');
};
InputItem.decorators = [
{ type: Component, args: [{
selector: 'InputItem, nzm-input-item',
template: "<div class=\"{{prefixListCls}}-line\">\n <div #lableContent [ngClass]=\"labelCls\">\n <ng-content></ng-content>\n </div>\n <div [ngClass]=\"controlCls\">\n <CustomInput *ngIf=\"type==='money'\"\n [value]=\"value\"\n [defaultValue]=\"defaultValue\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [editable]=\"editable\"\n [moneyKeyboardAlign]=\"moneyKeyboardAlign\"\n [setFocus]=\"setFocus\"\n [maxLength]=\"maxLength\"\n (onChange)=\"inputChange($event)\"\n (onBlur)=\"inputBlur(value)\"\n (onFocus)=\"inputFocus(value)\">\n </CustomInput>\n <div *ngIf=\"type!=='money'\">\n <input #inputElement\n [type]=\"type\"\n [name]=\"name\"\n [(ngModel)]=\"value\"\n [defaultValue]=\"defaultValue\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [readOnly]=\"!editable\"\n [autofocus]=\"autoFocus\"\n [maxlength]=\"maxLength\"\n [pattern]=\"pattern\"\n (ngModelChange)=\"inputChange($event)\"\n (blur)=\"inputBlur(value , $event)\"\n (focus)=\"inputFocus(value)\"\n style=\"outline:none\" />\n </div>\n </div>\n <div *ngIf=\"clear && editable && !disabled && (value && value.length >0 )\"\n class=\"{{prefixCls}}-clear\"\n (click)=\"clearInput()\"\n ></div>\n <div *ngIf=\"error\"\n class=\"{{prefixCls}}-error-extra\"\n (click)=\"errorClick($event)\"\n ></div>\n <div *ngIf=\"extra!==''\"\n class=\"{{prefixCls}}-extra\"\n (click)=\"extraClick($event)\"\n >{{extra}}</div>\n</div>",
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(function () { return InputItem; }),
multi: true
}
]
}] }
];
/** @nocollapse */
InputItem.ctorParameters = function () { return [
{ type: ElementRef },
{ type: Renderer2 }
]; };
InputItem.propDecorators = {
lableRef: [{ type: ViewChild, args: ['lableContent',] }],
inputElementRef: [{ type: ViewChild, args: ['inputElement',] }],
type: [{ type: Input }],
value: [{ type: Input }],
defaultValue: [{ type: Input }],
placeholder: [{ type: Input }],
editable: [{ type: Input }],
disabled: [{ type: Input }],
clear: [{ type: Input }],
maxLength: [{ type: Input }],
error: [{ type: Input }],
extra: [{ type: Input }],
labelNumber: [{ type: Input }],
updatePlaceholder: [{ type: Input }],
prefixListCls: [{ type: Input }],
name: [{ type: Input }],
moneyKeyboardAlign: [{ type: Input }],
locale: [{ type: Input }],
focus: [{ type: Input }],
onChange: [{ type: Output }],
onBlur: [{ type: Output }],
onFocus: [{ type: Output }],
onErrorClick: [{ type: Output }],
onExtraClick: [{ type: Output }],
clsItem: [{ type: HostBinding, args: ['class.am-input-item',] }],
clsDisabled: [{ type: HostBinding, args: ['class.am-input-disabled',] }],
clsError: [{ type: HostBinding, args: ['class.am-input-error',] }],
clsFocus: [{ type: HostBinding, args: ['class.am-input-focus',] }],
clsAndroid: [{ type: HostBinding, args: ['class.am-input-android,',] }]
};
return InputItem;
}());
export { InputItem };
if (false) {
/** @type {?} */
InputItem.prototype.prefixCls;
/** @type {?} */
InputItem.prototype.wrapCls;
/** @type {?} */
InputItem.prototype.labelCls;
/** @type {?} */
InputItem.prototype.controlCls;
/** @type {?} */
InputItem.prototype.setFocus;
/** @type {?} */
InputItem.prototype.pattern;
/** @type {?} */
InputItem.prototype.autoFocus;
/** @type {?} */
InputItem.prototype.inputType;
/** @type {?} */
InputItem.prototype._el;
/** @type {?} */
InputItem.prototype._type;
/** @type {?} */
InputItem.prototype._value;
/** @type {?} */
InputItem.prototype._defaultValue;
/** @type {?} */
InputItem.prototype._placeholder;
/** @type {?} */
InputItem.prototype._editable;
/** @type {?} */
InputItem.prototype._disabled;
/** @type {?} */
InputItem.prototype._clear;
/** @type {?} */
InputItem.prototype._maxLength;
/** @type {?} */
InputItem.prototype._error;
/** @type {?} */
InputItem.prototype._extra;
/** @type {?} */
InputItem.prototype._labelNumber;
/** @type {?} */
InputItem.prototype._updatePlaceholder;
/** @type {?} */
InputItem.prototype._prefixListCls;
/** @type {?} */
InputItem.prototype._name;
/** @type {?} */
InputItem.prototype._moneyKeyboardAlign;
/** @type {?} */
InputItem.prototype._locale;
/** @type {?} */
InputItem.prototype._focus;
/** @type {?} */
InputItem.prototype._isClear;
/** @type {?} */
InputItem.prototype.lableRef;
/** @type {?} */
InputItem.prototype.inputElementRef;
/** @type {?} */
InputItem.prototype.onChange;
/** @type {?} */
InputItem.prototype.onBlur;
/** @type {?} */
InputItem.prototype.onFocus;
/** @type {?} */
InputItem.prototype.onErrorClick;
/** @type {?} */
InputItem.prototype.onExtraClick;
/** @type {?} */
InputItem.prototype.clsItem;
/** @type {?} */
InputItem.prototype.clsDisabled;
/** @type {?} */
InputItem.prototype.clsError;
/** @type {?} */
InputItem.prototype.clsFocus;
/** @type {?} */
InputItem.prototype.clsAndroid;
/** @type {?} */
InputItem.prototype._onChange;
/** @type {?} */
InputItem.prototype.element;
/** @type {?} */
InputItem.prototype.render;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS8iLCJzb3VyY2VzIjpbImlucHV0LWl0ZW0vaW5wdXQtaXRlbS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osU0FBUyxFQUVULFdBQVcsRUFDWCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFVBQVUsRUFDWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0lBb052RSxtQkFBb0IsT0FBbUIsRUFBVSxNQUFpQjtRQUE5QyxZQUFPLEdBQVAsT0FBTyxDQUFZO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBVzt5QkF0TTlDLFVBQVU7d0JBSVgsRUFBRTt1QkFDSCxFQUFFO3lCQUNDLEtBQUs7eUJBQ04sTUFBTTtxQkFHRixNQUFNOzZCQUVFLEVBQUU7NEJBQ0gsRUFBRTt5QkFDSixJQUFJO3lCQUNKLEtBQUs7c0JBQ1IsS0FBSztzQkFFTCxLQUFLO3NCQUNOLEVBQUU7NEJBQ0ksQ0FBQztrQ0FDTSxLQUFLOzhCQUNWLFNBQVM7bUNBRUosT0FBTztzQkFFbkIsS0FBSzt3QkFDSCxLQUFLO3dCQXNKSCxJQUFJLFlBQVksRUFBTztzQkFFekIsSUFBSSxZQUFZLEVBQU87dUJBRXRCLElBQUksWUFBWSxFQUFPOzRCQUVsQixJQUFJLFlBQVksRUFBTzs0QkFFdkIsSUFBSSxZQUFZLEVBQU87dUJBR3RDLElBQUk7MkJBRUEsSUFBSSxDQUFDLFNBQVM7d0JBRWpCLElBQUksQ0FBQyxNQUFNO3dCQUVYLElBQUksQ0FBQyxNQUFNOzBCQUVULElBQUksQ0FBQyxNQUFNO3lCQU1yQixVQUFDLENBQU0sS0FBTztRQUh4QixJQUFJLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUM7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QkFDeEMsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7aUJBQ0Y7Ozs7Z0JBZkMsVUFBVTtnQkFEVixTQUFTOzs7MkJBK0NSLFNBQVMsU0FBQyxjQUFjO2tDQUV4QixTQUFTLFNBQUMsY0FBYzt1QkFHeEIsS0FBSzt3QkFxQkwsS0FBSzsrQkFVTCxLQUFLOzhCQVFMLEtBQUs7MkJBUUwsS0FBSzsyQkFRTCxLQUFLO3dCQVFMLEtBQUs7NEJBT0wsS0FBSzt3QkFPTCxLQUFLO3dCQVFMLEtBQUs7OEJBT0wsS0FBSztvQ0FLTCxLQUFLO2dDQUlMLEtBQUs7dUJBU0wsS0FBSztxQ0FPTCxLQUFLO3lCQU9MLEtBQUs7d0JBSUwsS0FBSzsyQkFjTCxNQUFNO3lCQUVOLE1BQU07MEJBRU4sTUFBTTsrQkFFTixNQUFNOytCQUVOLE1BQU07MEJBR04sV0FBVyxTQUFDLHFCQUFxQjs4QkFFakMsV0FBVyxTQUFDLHlCQUF5QjsyQkFFckMsV0FBVyxTQUFDLHNCQUFzQjsyQkFFbEMsV0FBVyxTQUFDLHNCQUFzQjs2QkFFbEMsV0FBVyxTQUFDLHlCQUF5Qjs7b0JBOU54Qzs7U0EwQmEsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgT25Jbml0LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIFZpZXdDaGlsZCxcbiAgT25DaGFuZ2VzLFxuICBIb3N0QmluZGluZyxcbiAgUmVuZGVyZXIyLFxuICBFbGVtZW50UmVmLFxuICBmb3J3YXJkUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdJbnB1dEl0ZW0sIG56bS1pbnB1dC1pdGVtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2lucHV0LWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IElucHV0SXRlbSksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgSW5wdXRJdGVtIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgcHJlZml4Q2xzOiBzdHJpbmcgPSAnYW0taW5wdXQnO1xuICB3cmFwQ2xzOiBvYmplY3Q7XG4gIGxhYmVsQ2xzOiBvYmplY3Q7XG4gIGNvbnRyb2xDbHM6IG9iamVjdDtcbiAgc2V0Rm9jdXM6IG9iamVjdCA9IHt9O1xuICBwYXR0ZXJuOiBzdHJpbmcgPSAnJztcbiAgYXV0b0ZvY3VzOiBib29sZWFuID0gZmFsc2U7XG4gIGlucHV0VHlwZTogc3RyaW5nID0gJ3RleHQnO1xuXG4gIHByaXZhdGUgX2VsOiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBfdHlwZTogc3RyaW5nID0gJ3RleHQnO1xuICBwcml2YXRlIF92YWx1ZTogc3RyaW5nO1xuICBwcml2YXRlIF9kZWZhdWx0VmFsdWU6IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIF9wbGFjZWhvbGRlcjogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgX2VkaXRhYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfY2xlYXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfbWF4TGVuZ3RoOiBudW1iZXI7XG4gIHByaXZhdGUgX2Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2V4dHJhOiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSBfbGFiZWxOdW1iZXI6IG51bWJlciA9IDU7XG4gIHByaXZhdGUgX3VwZGF0ZVBsYWNlaG9sZGVyOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX3ByZWZpeExpc3RDbHM6IHN0cmluZyA9ICdhbS1saXN0JztcbiAgcHJpdmF0ZSBfbmFtZTogc3RyaW5nO1xuICBwcml2YXRlIF9tb25leUtleWJvYXJkQWxpZ246IHN0cmluZyA9ICdyaWdodCc7XG4gIHByaXZhdGUgX2xvY2FsZTtcbiAgcHJpdmF0ZSBfZm9jdXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfaXNDbGVhcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBWaWV3Q2hpbGQoJ2xhYmxlQ29udGVudCcpXG4gIGxhYmxlUmVmO1xuICBAVmlld0NoaWxkKCdpbnB1dEVsZW1lbnQnKVxuICBpbnB1dEVsZW1lbnRSZWY7XG5cbiAgQElucHV0KClcbiAgZ2V0IHR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdHlwZTtcbiAgfVxuICBzZXQgdHlwZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlICYmIHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuaW5wdXRUeXBlID0gdmFsdWU7XG4gICAgICBpZiAodmFsdWUgPT09ICdiYW5rQ2FyZCcgfHwgdmFsdWUgPT09ICdwaG9uZScpIHtcbiAgICAgICAgdGhpcy5fdHlwZSA9ICd0ZWwnO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJ3Bhc3N3b3JkJykge1xuICAgICAgICB0aGlzLl90eXBlID0gJ3Bhc3N3b3JkJztcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09ICdkaWdpdCcpIHtcbiAgICAgICAgdGhpcy5fdHlwZSA9ICdudW1iZXInO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZSAhPT0gJ3RleHQnICYmIHZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aGlzLl90eXBlID0gdmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHRoaXMucGF0dGVybiA9ICdbMC05XSonO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBASW5wdXQoKVxuICBnZXQgdmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cbiAgc2V0IHZhbHVlKHY6IHN0cmluZykge1xuICAgIGlmICh0eXBlb2YgdiA9PT0gdW5kZWZpbmVkIHx8IHYgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gJyc7XG4gICAgfVxuICAgIHRoaXMuX3ZhbHVlID0gdjtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgZGVmYXVsdFZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRWYWx1ZTtcbiAgfVxuICBzZXQgZGVmYXVsdFZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9kZWZhdWx0VmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLl92YWx1ZSA9IHRoaXMuX2RlZmF1bHRWYWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgcGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fcGxhY2Vob2xkZXI7XG4gIH1cbiAgc2V0IHBsYWNlaG9sZGVyKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9wbGFjZWhvbGRlciA9IHZhbHVlO1xuICB9XG5cbiAgQElucHV0KClcbiAgZ2V0IGVkaXRhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9lZGl0YWJsZTtcbiAgfVxuICBzZXQgZWRpdGFibGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9lZGl0YWJsZSA9IHZhbHVlO1xuICB9XG5cbiAgQElucHV0KClcbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgfVxuICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IHZhbHVlO1xuICAgIHRoaXMuY2xzRGlzYWJsZWQgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgY2xlYXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2NsZWFyO1xuICB9XG4gIHNldCBjbGVhcih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2NsZWFyID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IG1heExlbmd0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9tYXhMZW5ndGg7XG4gIH1cbiAgc2V0IG1heExlbmd0aCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbWF4TGVuZ3RoID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IGVycm9yKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9lcnJvcjtcbiAgfVxuICBzZXQgZXJyb3IodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9lcnJvciA9IHZhbHVlO1xuICAgIHRoaXMuY2xzRXJyb3IgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgZXh0cmEoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZXh0cmE7XG4gIH1cbiAgc2V0IGV4dHJhKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9leHRyYSA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBsYWJlbE51bWJlcih2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbGFiZWxOdW1iZXIgPSB2YWx1ZTtcbiAgICB0aGlzLnNldENscygpO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCB1cGRhdGVQbGFjZWhvbGRlcih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3VwZGF0ZVBsYWNlaG9sZGVyID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IHByZWZpeExpc3RDbHMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fcHJlZml4TGlzdENscztcbiAgfVxuICBzZXQgcHJlZml4TGlzdENscyh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fcHJlZml4TGlzdENscyA9IHZhbHVlO1xuICAgIHRoaXMucmVuZGVyLmFkZENsYXNzKHRoaXMuX2VsLCB2YWx1ZSArICctaXRlbScpO1xuICAgIHRoaXMucmVuZGVyLmFkZENsYXNzKHRoaXMuX2VsLCB2YWx1ZSArICctaXRlbS1taWRkbGUnKTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9uYW1lO1xuICB9XG4gIHNldCBuYW1lKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9uYW1lID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IG1vbmV5S2V5Ym9hcmRBbGlnbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9tb25leUtleWJvYXJkQWxpZ247XG4gIH1cbiAgc2V0IG1vbmV5S2V5Ym9hcmRBbGlnbih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fbW9uZXlLZXlib2FyZEFsaWduID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IGxvY2FsZSh2YWx1ZSkge1xuICAgIHRoaXMuX2xvY2FsZSA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBmb2N1cyh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5mb2N1cykge1xuICAgICAgdGhpcy5hdXRvRm9jdXMgPSB2YWx1ZS5mb2N1cztcbiAgICAgIGlmICh0aGlzLl90eXBlID09PSAnbW9uZXknKSB7XG4gICAgICAgIHRoaXMuc2V0Rm9jdXMgPSB2YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5pbnB1dEVsZW1lbnRSZWYpIHtcbiAgICAgICAgdGhpcy5fZm9jdXMgPSB0cnVlO1xuICAgICAgICB0aGlzLmlucHV0RWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIHRoaXMuaW5wdXRGb2N1cygnJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQE91dHB1dCgpXG4gIG9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KClcbiAgb25CbHVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KClcbiAgb25Gb2N1czogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpXG4gIG9uRXJyb3JDbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpXG4gIG9uRXh0cmFDbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLWlucHV0LWl0ZW0nKVxuICBjbHNJdGVtOiBib29sZWFuID0gdHJ1ZTtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS1pbnB1dC1kaXNhYmxlZCcpXG4gIGNsc0Rpc2FibGVkOiBib29sZWFuID0gdGhpcy5fZGlzYWJsZWQ7XG4gIEBIb3N0QmluZGluZygnY2xhc3MuYW0taW5wdXQtZXJyb3InKVxuICBjbHNFcnJvcjogYm9vbGVhbiA9IHRoaXMuX2Vycm9yO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLWlucHV0LWZvY3VzJylcbiAgY2xzRm9jdXM6IGJvb2xlYW4gPSB0aGlzLl9mb2N1cztcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS1pbnB1dC1hbmRyb2lkLCcpXG4gIGNsc0FuZHJvaWQ6IGJvb2xlYW4gPSB0aGlzLl9mb2N1cztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnQ6IEVsZW1lbnRSZWYsIHByaXZhdGUgcmVuZGVyOiBSZW5kZXJlcjIpIHtcbiAgICB0aGlzLl9lbCA9IGVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIF9vbkNoYW5nZSA9IChfOiBhbnkpID0+IHt9O1xuXG4gIHNldENscygpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmxhYmxlUmVmLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoID4gMCB8fFxuICAgICAgKHRoaXMubGFibGVSZWYubmF0aXZlRWxlbWVudCAmJiB0aGlzLmxhYmxlUmVmLm5hdGl2ZUVsZW1lbnQuaW5uZXJUZXh0ICE9PSAnJylcbiAgICApIHtcbiAgICAgIHRoaXMubGFiZWxDbHMgPSB7XG4gICAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tbGFiZWxgXTogdHJ1ZSxcbiAgICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1sYWJlbC0yYF06IHRoaXMuX2xhYmVsTnVtYmVyID09PSAyLFxuICAgICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWxhYmVsLTNgXTogdGhpcy5fbGFiZWxOdW1iZXIgPT09IDMsXG4gICAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tbGFiZWwtNGBdOiB0aGlzLl9sYWJlbE51bWJlciA9PT0gNCxcbiAgICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1sYWJlbC01YF06IHRoaXMuX2xhYmVsTnVtYmVyID09PSA1LFxuICAgICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWxhYmVsLTZgXTogdGhpcy5fbGFiZWxOdW1iZXIgPT09IDYsXG4gICAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tbGFiZWwtN2BdOiB0aGlzLl9sYWJlbE51bWJlciA9PT0gN1xuICAgICAgfTtcbiAgICB9XG4gICAgdGhpcy5jb250cm9sQ2xzID0geyBbYCR7dGhpcy5wcmVmaXhDbHN9LWNvbnRyb2xgXTogdHJ1ZSB9O1xuICB9XG5cbiAgaW5wdXRDaGFuZ2UoZSkge1xuICAgIGxldCB2YWx1ZSA9IGU7XG4gICAgc3dpdGNoICh0aGlzLmlucHV0VHlwZSkge1xuICAgICAgY2FzZSAndGV4dCc6XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYmFua0NhcmQnOlxuICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL1xcRC9nLCAnJykucmVwbGFjZSgvKC4uLi4pKD89LikvZywgJyQxICcpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3Bob25lJzpcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9cXEQvZywgJycpLnN1YnN0cmluZygwLCAxMSk7XG4gICAgICAgIGNvbnN0IHZhbHVlTGVuID0gdmFsdWUubGVuZ3RoO1xuICAgICAgICBpZiAodmFsdWVMZW4gPiAzICYmIHZhbHVlTGVuIDwgOCkge1xuICAgICAgICAgIHZhbHVlID0gYCR7dmFsdWUuc3Vic3RyKDAsIDMpfSAke3ZhbHVlLnN1YnN0cigzKX1gO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlTGVuID49IDgpIHtcbiAgICAgICAgICB2YWx1ZSA9IGAke3ZhbHVlLnN1YnN0cigwLCAzKX0gJHt2YWx1ZS5zdWJzdHIoMywgNCl9ICR7dmFsdWUuc3Vic3RyKDcpfWA7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL1xcRC9nLCAnJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncGFzc3dvcmQnOlxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuXG4gICAgaWYgKHRoaXMuX3R5cGUgIT09ICdtb25leScpIHtcbiAgICAgIHRoaXMuaW5wdXRFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB0aGlzLl92YWx1ZTtcbiAgICB9XG5cbiAgICB0aGlzLl9vbkNoYW5nZSh0aGlzLl92YWx1ZSk7XG4gICAgdGhpcy5vbkNoYW5nZS5lbWl0KHRoaXMuX3ZhbHVlKTtcbiAgfVxuXG4gIGlucHV0Rm9jdXModmFsdWUpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuX2ZvY3VzID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2xzRm9jdXMgPSB0cnVlO1xuICAgICAgdGhpcy5jbHNBbmRyb2lkID0gdHJ1ZTtcbiAgICB9LCAxMDApO1xuICAgIHRoaXMub25Gb2N1cy5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIGlucHV0Qmx1cih2YWx1ZSwgZXZlbnQpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5faXNDbGVhcikge1xuICAgICAgICB0aGlzLl9mb2N1cyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNsc0ZvY3VzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2xzQW5kcm9pZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLm9uQmx1ci5lbWl0KHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2lzQ2xlYXIgPSBmYWxzZTtcbiAgICB9LCAxMDApO1xuICB9XG5cbiAgY2xlYXJJbnB1dCgpIHtcbiAgICBpZiAodGhpcy5fdHlwZSAhPT0gJ3Bhc3N3b3JkJyAmJiB0aGlzLl91cGRhdGVQbGFjZWhvbGRlcikge1xuICAgICAgdGhpcy5fcGxhY2Vob2xkZXIgPSB0aGlzLl92YWx1ZTtcbiAgICB9XG4gICAgdGhpcy5fdmFsdWUgPSAnJztcbiAgICB0aGlzLm9uQ2hhbmdlLmVtaXQoJycpO1xuICAgIHRoaXMuX2lzQ2xlYXIgPSB0cnVlO1xuICAgIGlmICh0aGlzLl90eXBlICE9PSAnbW9uZXknKSB7XG4gICAgICB0aGlzLmlucHV0RWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5fdmFsdWU7XG4gICAgfVxuICAgIHRoaXMuaW5wdXRGb2N1cyh0aGlzLl92YWx1ZSk7XG4gIH1cblxuICBlcnJvckNsaWNrKGUpIHtcbiAgICBpZiAodGhpcy5vbkVycm9yQ2xpY2spIHtcbiAgICAgIHRoaXMub25FcnJvckNsaWNrLmVtaXQoZSk7XG4gICAgfVxuICB9XG5cbiAgZXh0cmFDbGljayhlKSB7XG4gICAgaWYgKHRoaXMub25FeHRyYUNsaWNrKSB7XG4gICAgICB0aGlzLm9uRXh0cmFDbGljay5lbWl0KGUpO1xuICAgIH1cbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAoXzogYW55KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5fb25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHt9XG5cbiAgbmdPbkNoYW5nZXMoKSB7XG4gICAgaWYgKHRoaXMuaW5wdXRFbGVtZW50UmVmICYmIHRoaXMuX3R5cGUgIT09ICdtb25leScgJiYgdGhpcy5fdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5pbnB1dEVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC52YWx1ZSA9IHRoaXMuX3ZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuc2V0Q2xzKCk7XG4gICAgdGhpcy5yZW5kZXIuYWRkQ2xhc3ModGhpcy5fZWwsIHRoaXMuX3ByZWZpeExpc3RDbHMgKyAnLWl0ZW0nKTtcbiAgICB0aGlzLnJlbmRlci5hZGRDbGFzcyh0aGlzLl9lbCwgdGhpcy5fcHJlZml4TGlzdENscyArICctaXRlbS1taWRkbGUnKTtcbiAgfVxufVxuIl19