UNPKG

@kre-form/survey

Version:

526 lines 41.1 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Input, NgZone, Output, ElementRef, Directive, EventEmitter, } from '@angular/core'; var ContenteditableModel = /** @class */ (function () { // changeBySelf = false; // instance: any; // cursor: any; // splitIndex; // debounceTimeout: any; // lastRange: any; // editableEle: any; // priousV: string; // languagetype = 1; // private lastViewModel: any; function ContenteditableModel(elRef, zone) { this.elRef = elRef; this.zone = zone; this.model = {}; this.hasI18n = false; this.change = new EventEmitter(); // @Output() limetValue: EventEmitter<any> = new EventEmitter<any>(); this.blur = new EventEmitter(); this.focus = new EventEmitter(); this.debounce = ""; this.placeholder = ''; this.brMode = false; } /** * @return {?} */ ContenteditableModel.prototype.ngAfterViewInit = /** * @return {?} */ function () { //this.initEditor(); }; // initEditor() { // let config = { // startupFocus: false, // toolbar: 'Basic', // allowedContent: true, // placeholder: this.placeholder, // extraPlugins: '', // toolbar_Basic: [ // [ // 'Font', // 'FontSize', // 'Bold', // 'Underline', // 'Italic', // '-', // 'JustifyLeft', // 'JustifyCenter', // 'JustifyRight', // 'TextColor', // 'BGColor', // ], // ] // }; // if (this.hasI18n) { // const pluginName = (config.extraPlugins ? ',' : '') + 'i18n'; // config.extraPlugins = config.extraPlugins + pluginName; // config.toolbar_Basic[0].unshift('Chinese', '-', 'English'); // } // // console.log('config==', config); // if (this.brMode) { // config['enterMode'] = CKEDITOR.ENTER_BR; // config['shiftEnterMode'] = CKEDITOR.ENTER_BR; // } // this.instance = CKEDITOR.inline(this.elRef.nativeElement, config); // // console.log('this.instance==', this.instance); // // 设置国际化语言及侦听 // // this.languagetype = this.instance.element.getAttribute('data-i18n') || this.languagetype; // // this.instance.on('i18n', (evt: any) => { // // // console.log('i18n change= ', evt); // // if (evt.data != this.languagetype) { // // this.languagetype = evt.data; // // this.updateEditorValue(); // // } // // }); // // 更新表单值 // this.updateEditorValue(); // // CKEditor blur event // this.instance.on('blur', (evt: any) => { // this.blur.emit(evt); // }); // // CKEditor focus event // this.instance.on('focus', (evt: any) => { // this.focus.emit(evt); // }); // this.instance.on('change', (evt: any) => { // // console.log('onchange == ', evt); // let value = this.instance.getData(); // if (this.model !== value) { // // Debounce update // if (this.debounce) { // if (this.debounceTimeout) clearTimeout(this.debounceTimeout); // this.debounceTimeout = setTimeout(() => { // this.updateValue(this.instance.getData()); // this.debounceTimeout = null; // }, parseInt(this.debounce, 10)); // } else { // this.updateValue(value); // } // } // }); // } // doFocus() { // setTimeout(() => { // this.instance.focus(); // }, 0); // } // insertAfter(newElement, targetElement) { // var parent = targetElement.parentNode; // if (parent.lastChild == targetElement) { // parent.appendChild(newElement); // } else { // parent.insertBefore(newElement, targetElement.nextSibling); // } // } // initEditor() { // let config = { // startupFocus: false, // toolbar: 'Basic', // allowedContent: true, // placeholder: this.placeholder, // extraPlugins: '', // toolbar_Basic: [ // [ // 'Font', // 'FontSize', // 'Bold', // 'Underline', // 'Italic', // '-', // 'JustifyLeft', // 'JustifyCenter', // 'JustifyRight', // 'TextColor', // 'BGColor', // ], // ] // }; // if (this.hasI18n) { // const pluginName = (config.extraPlugins ? ',' : '') + 'i18n'; // config.extraPlugins = config.extraPlugins + pluginName; // config.toolbar_Basic[0].unshift('Chinese', '-', 'English'); // } // // console.log('config==', config); // if (this.brMode) { // config['enterMode'] = CKEDITOR.ENTER_BR; // config['shiftEnterMode'] = CKEDITOR.ENTER_BR; // } // this.instance = CKEDITOR.inline(this.elRef.nativeElement, config); // // console.log('this.instance==', this.instance); // // 设置国际化语言及侦听 // // this.languagetype = this.instance.element.getAttribute('data-i18n') || this.languagetype; // // this.instance.on('i18n', (evt: any) => { // // // console.log('i18n change= ', evt); // // if (evt.data != this.languagetype) { // // this.languagetype = evt.data; // // this.updateEditorValue(); // // } // // }); // // 更新表单值 // this.updateEditorValue(); // // CKEditor blur event // this.instance.on('blur', (evt: any) => { // this.blur.emit(evt); // }); // // CKEditor focus event // this.instance.on('focus', (evt: any) => { // this.focus.emit(evt); // }); // this.instance.on('change', (evt: any) => { // // console.log('onchange == ', evt); // let value = this.instance.getData(); // if (this.model !== value) { // // Debounce update // if (this.debounce) { // if (this.debounceTimeout) clearTimeout(this.debounceTimeout); // this.debounceTimeout = setTimeout(() => { // this.updateValue(this.instance.getData()); // this.debounceTimeout = null; // }, parseInt(this.debounce, 10)); // } else { // this.updateValue(value); // } // } // }); // } // doFocus() { // setTimeout(() => { // this.instance.focus(); // }, 0); // } // insertAfter(newElement, targetElement) { // var parent = targetElement.parentNode; // if (parent.lastChild == targetElement) { // parent.appendChild(newElement); // } else { // parent.insertBefore(newElement, targetElement.nextSibling); // } // } /** * @param {?} changes * @return {?} */ ContenteditableModel.prototype.ngOnChanges = // initEditor() { // let config = { // startupFocus: false, // toolbar: 'Basic', // allowedContent: true, // placeholder: this.placeholder, // extraPlugins: '', // toolbar_Basic: [ // [ // 'Font', // 'FontSize', // 'Bold', // 'Underline', // 'Italic', // '-', // 'JustifyLeft', // 'JustifyCenter', // 'JustifyRight', // 'TextColor', // 'BGColor', // ], // ] // }; // if (this.hasI18n) { // const pluginName = (config.extraPlugins ? ',' : '') + 'i18n'; // config.extraPlugins = config.extraPlugins + pluginName; // config.toolbar_Basic[0].unshift('Chinese', '-', 'English'); // } // // console.log('config==', config); // if (this.brMode) { // config['enterMode'] = CKEDITOR.ENTER_BR; // config['shiftEnterMode'] = CKEDITOR.ENTER_BR; // } // this.instance = CKEDITOR.inline(this.elRef.nativeElement, config); // // console.log('this.instance==', this.instance); // // 设置国际化语言及侦听 // // this.languagetype = this.instance.element.getAttribute('data-i18n') || this.languagetype; // // this.instance.on('i18n', (evt: any) => { // // // console.log('i18n change= ', evt); // // if (evt.data != this.languagetype) { // // this.languagetype = evt.data; // // this.updateEditorValue(); // // } // // }); // // 更新表单值 // this.updateEditorValue(); // // CKEditor blur event // this.instance.on('blur', (evt: any) => { // this.blur.emit(evt); // }); // // CKEditor focus event // this.instance.on('focus', (evt: any) => { // this.focus.emit(evt); // }); // this.instance.on('change', (evt: any) => { // // console.log('onchange == ', evt); // let value = this.instance.getData(); // if (this.model !== value) { // // Debounce update // if (this.debounce) { // if (this.debounceTimeout) clearTimeout(this.debounceTimeout); // this.debounceTimeout = setTimeout(() => { // this.updateValue(this.instance.getData()); // this.debounceTimeout = null; // }, parseInt(this.debounce, 10)); // } else { // this.updateValue(value); // } // } // }); // } // doFocus() { // setTimeout(() => { // this.instance.focus(); // }, 0); // } // insertAfter(newElement, targetElement) { // var parent = targetElement.parentNode; // if (parent.lastChild == targetElement) { // parent.appendChild(newElement); // } else { // parent.insertBefore(newElement, targetElement.nextSibling); // } // } /** * @param {?} changes * @return {?} */ function (changes) { // this.lastViewModel = this.model; // this.updateEditorValue(); }; // onKeyup() { // var value = this.elRef.nativeElement.innerHTML; // this.lastViewModel = value; // this.change.emit(value); // } // updateValue(value: any) { // // this.zone.run(() => { // // this.lastViewModel = value; // // this.changeBySelf = true; // // if (_.isArray(this.model)) { // // const found = this.model.find(item => { // // return item.languagetype == this.languagetype; //zhcn // // }); // // if (found) { // // found.name = value; // // } // // this.change.emit(this.model); // // } else { // // this.change.emit(value); // // } // // }); // } // refreshView() { // if (this.instance) this.instance.setData(this.lastViewModel); // // this.elRef.nativeElement.innerHTML = this.lastViewModel // } // updateEditorValue() { // // if (this.instance) { // // let model = this.model; // // // console.log('this.model==', this.model); // // if (_.isArray(this.model)) { // // let foundItem = this.model.find(item => { // // return item.languagetype == this.languagetype; //zhcn // // }); // // if (!foundItem) { // // foundItem = { languagetype: this.languagetype, id: 0, name: '' }; // // this.model.push(foundItem); // // } // // model = foundItem.name; // // } // // this.instance.setData(model); // // } // } // empty() { // this.model = ''; // this.lastViewModel = ''; // this.instance.setData(''); // } /** * On component destroy */ // onKeyup() { // var value = this.elRef.nativeElement.innerHTML; // this.lastViewModel = value; // this.change.emit(value); // } // updateValue(value: any) { // // this.zone.run(() => { // // this.lastViewModel = value; // // this.changeBySelf = true; // // if (_.isArray(this.model)) { // // const found = this.model.find(item => { // // return item.languagetype == this.languagetype; //zhcn // // }); // // if (found) { // // found.name = value; // // } // // this.change.emit(this.model); // // } else { // // this.change.emit(value); // // } // // }); // } // refreshView() { // if (this.instance) this.instance.setData(this.lastViewModel); // // this.elRef.nativeElement.innerHTML = this.lastViewModel // } // updateEditorValue() { // // if (this.instance) { // // let model = this.model; // // // console.log('this.model==', this.model); // // if (_.isArray(this.model)) { // // let foundItem = this.model.find(item => { // // return item.languagetype == this.languagetype; //zhcn // // }); // // if (!foundItem) { // // foundItem = { languagetype: this.languagetype, id: 0, name: '' }; // // this.model.push(foundItem); // // } // // model = foundItem.name; // // } // // this.instance.setData(model); // // } // } // empty() { // this.model = ''; // this.lastViewModel = ''; // this.instance.setData(''); // } /** * On component destroy * @return {?} */ ContenteditableModel.prototype.ngOnDestroy = // onKeyup() { // var value = this.elRef.nativeElement.innerHTML; // this.lastViewModel = value; // this.change.emit(value); // } // updateValue(value: any) { // // this.zone.run(() => { // // this.lastViewModel = value; // // this.changeBySelf = true; // // if (_.isArray(this.model)) { // // const found = this.model.find(item => { // // return item.languagetype == this.languagetype; //zhcn // // }); // // if (found) { // // found.name = value; // // } // // this.change.emit(this.model); // // } else { // // this.change.emit(value); // // } // // }); // } // refreshView() { // if (this.instance) this.instance.setData(this.lastViewModel); // // this.elRef.nativeElement.innerHTML = this.lastViewModel // } // updateEditorValue() { // // if (this.instance) { // // let model = this.model; // // // console.log('this.model==', this.model); // // if (_.isArray(this.model)) { // // let foundItem = this.model.find(item => { // // return item.languagetype == this.languagetype; //zhcn // // }); // // if (!foundItem) { // // foundItem = { languagetype: this.languagetype, id: 0, name: '' }; // // this.model.push(foundItem); // // } // // model = foundItem.name; // // } // // this.instance.setData(model); // // } // } // empty() { // this.model = ''; // this.lastViewModel = ''; // this.instance.setData(''); // } /** * On component destroy * @return {?} */ function () { // if (this.debounceTimeout) { // clearTimeout(this.debounceTimeout); // this.debounceTimeout = null; // } // if (this.instance) { // setTimeout(() => { // this.instance.removeAllListeners(); // let dom = document.querySelector('#cke_' + this.instance.name); // if (dom) { // dom.parentNode.removeChild(dom); // } // CKEDITOR.instances[this.instance.name].destroy(true); // this.instance.destroy(true); // this.instance = null; // }); // } }; ContenteditableModel.decorators = [ { type: Directive, args: [{ selector: '[contenteditableModel]', },] } ]; /** @nocollapse */ ContenteditableModel.ctorParameters = function () { return [ { type: ElementRef }, { type: NgZone } ]; }; ContenteditableModel.propDecorators = { model: [{ type: Input, args: ['contenteditableModel',] }], hasI18n: [{ type: Input }], change: [{ type: Output, args: ['contenteditableModelChange',] }], blur: [{ type: Output }], focus: [{ type: Output }], debounce: [{ type: Input }], placeholder: [{ type: Input }], brMode: [{ type: Input }] }; return ContenteditableModel; }()); export { ContenteditableModel }; if (false) { /** @type {?} */ ContenteditableModel.prototype.model; /** @type {?} */ ContenteditableModel.prototype.hasI18n; /** @type {?} */ ContenteditableModel.prototype.change; /** @type {?} */ ContenteditableModel.prototype.blur; /** @type {?} */ ContenteditableModel.prototype.focus; /** @type {?} */ ContenteditableModel.prototype.debounce; /** @type {?} */ ContenteditableModel.prototype.placeholder; /** @type {?} */ ContenteditableModel.prototype.brMode; /** * @type {?} * @private */ ContenteditableModel.prototype.elRef; /** @type {?} */ ContenteditableModel.prototype.zone; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudGVkaXRhYmxlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGtyZS1mb3JtL3N1cnZleS8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2lubGluZS1lZGl0b3IvY29udGVudGVkaXRhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQ0wsS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBR04sVUFBVSxFQUNWLFNBQVMsRUFDVCxZQUFZLEdBSWIsTUFBTSxlQUFlLENBQUM7QUFLdkI7SUFjRSx3QkFBd0I7SUFDeEIsaUJBQWlCO0lBQ2pCLGVBQWU7SUFDZixjQUFjO0lBQ2Qsd0JBQXdCO0lBQ3hCLGtCQUFrQjtJQUNsQixvQkFBb0I7SUFDcEIsbUJBQW1CO0lBQ25CLG9CQUFvQjtJQUNwQiw4QkFBOEI7SUFDOUIsOEJBQW9CLEtBQWlCLEVBQVMsSUFBWTtRQUF0QyxVQUFLLEdBQUwsS0FBSyxDQUFZO1FBQVMsU0FBSSxHQUFKLElBQUksQ0FBUTtRQXBCM0IsVUFBSyxHQUFNLEVBQUUsQ0FBQztRQUNwQyxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2EsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7O1FBRXhELFNBQUksR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzFCLFVBQUssR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzVCLGFBQVEsR0FBUyxFQUFFLENBQUM7UUFDcEIsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFDakIsV0FBTSxHQUFHLEtBQUssQ0FBQztJQVlxQyxDQUFDOzs7O0lBRTlELDhDQUFlOzs7SUFBZjtRQUNFLG9CQUFvQjtJQUN0QixDQUFDO0lBRUQsaUJBQWlCO0lBQ2pCLG1CQUFtQjtJQUNuQiwyQkFBMkI7SUFDM0Isd0JBQXdCO0lBQ3hCLDRCQUE0QjtJQUM1QixxQ0FBcUM7SUFDckMsd0JBQXdCO0lBQ3hCLHVCQUF1QjtJQUN2QixVQUFVO0lBQ1Ysa0JBQWtCO0lBQ2xCLHNCQUFz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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFBWDtRQUNFLDhCQUE4QjtRQUM5Qix3Q0FBd0M7UUFDeEMsaUNBQWlDO1FBQ2pDLElBQUk7UUFDSix1QkFBdUI7UUFDdkIsdUJBQXVCO1FBQ3ZCLDBDQUEwQztRQUMxQyxzRUFBc0U7UUFDdEUsaUJBQWlCO1FBQ2pCLHlDQUF5QztRQUN6QyxRQUFRO1FBQ1IsNERBQTREO1FBQzVELG1DQUFtQztRQUNuQyw0QkFBNEI7UUFDNUIsUUFBUTtRQUNSLElBQUk7SUFDTixDQUFDOztnQkF4TUYsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSx3QkFBd0I7aUJBQ25DOzs7O2dCQWJDLFVBQVU7Z0JBSlYsTUFBTTs7O3dCQW1CTCxLQUFLLFNBQUMsc0JBQXNCOzBCQUM1QixLQUFLO3lCQUNMLE1BQU0sU0FBQyw0QkFBNEI7dUJBRW5DLE1BQU07d0JBQ04sTUFBTTsyQkFDTixLQUFLOzhCQUNMLEtBQUs7eUJBQ0wsS0FBSzs7SUFzWFIsMkJBQUM7Q0FBQSxBQWxZRCxJQWtZQztTQS9YWSxvQkFBb0I7OztJQUMvQixxQ0FBNkM7O0lBQzdDLHVDQUF5Qjs7SUFDekIsc0NBQWtFOztJQUVsRSxvQ0FBb0M7O0lBQ3BDLHFDQUFxQzs7SUFDckMsd0NBQTZCOztJQUM3QiwyQ0FBMEI7O0lBQzFCLHNDQUF3Qjs7Ozs7SUFZWixxQ0FBeUI7O0lBQUUsb0NBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBJbnB1dCxcclxuICBOZ1pvbmUsXHJcbiAgT3V0cHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgRWxlbWVudFJlZixcclxuICBEaXJlY3RpdmUsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIE9uSW5pdCxcclxuICBUeXBlLFxyXG4gIFZpZXdDb250YWluZXJSZWYsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuZGVjbGFyZSB2YXIgQ0tFRElUT1I6IGFueTsgXHJcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW2NvbnRlbnRlZGl0YWJsZU1vZGVsXScsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb250ZW50ZWRpdGFibGVNb2RlbCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XHJcbiAgQElucHV0KCdjb250ZW50ZWRpdGFibGVNb2RlbCcpIG1vZGVsOiBhbnk9e307XHJcbiAgQElucHV0KCkgaGFzSTE4biA9IGZhbHNlO1xyXG4gIEBPdXRwdXQoJ2NvbnRlbnRlZGl0YWJsZU1vZGVsQ2hhbmdlJykgY2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIC8vIEBPdXRwdXQoKSBsaW1ldFZhbHVlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBibHVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBmb2N1cyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBASW5wdXQoKSBkZWJvdW5jZTogc3RyaW5nPVwiXCI7XHJcbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnJztcclxuICBASW5wdXQoKSBick1vZGUgPSBmYWxzZTtcclxuXHJcbiAgLy8gY2hhbmdlQnlTZWxmID0gZmFsc2U7XHJcbiAgLy8gaW5zdGFuY2U6IGFueTtcclxuICAvLyBjdXJzb3I6IGFueTtcclxuICAvLyBzcGxpdEluZGV4O1xyXG4gIC8vIGRlYm91bmNlVGltZW91dDogYW55O1xyXG4gIC8vIGxhc3RSYW5nZTogYW55O1xyXG4gIC8vIGVkaXRhYmxlRWxlOiBhbnk7XHJcbiAgLy8gcHJpb3VzVjogc3RyaW5nO1xyXG4gIC8vIGxhbmd1YWdldHlwZSA9IDE7XHJcbiAgLy8gcHJpdmF0ZSBsYXN0Vmlld01vZGVsOiBhbnk7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbFJlZjogRWxlbWVudFJlZiwgcHVibGljIHpvbmU6IE5nWm9uZSkge31cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgLy90aGlzLmluaXRFZGl0b3IoKTtcclxuICB9XHJcblxyXG4gIC8vIGluaXRFZGl0b3IoKSB7XHJcbiAgLy8gICBsZXQgY29uZmlnID0ge1xyXG4gIC8vICAgICBzdGFydHVwRm9jdXM6IGZhbHNlLFxyXG4gIC8vICAgICB0b29sYmFyOiAnQmFzaWMnLFxyXG4gIC8vICAgICBhbGxvd2VkQ29udGVudDogdHJ1ZSxcclxuICAvLyAgICAgcGxhY2Vob2xkZXI6IHRoaXMucGxhY2Vob2xkZXIsXHJcbiAgLy8gICAgIGV4dHJhUGx1Z2luczogJycsXHJcbiAgLy8gICAgIHRvb2xiYXJfQmFzaWM6IFtcclxuICAvLyAgICAgICBbXHJcbiAgLy8gICAgICAgICAnRm9udCcsXHJcbiAgLy8gICAgICAgICAnRm9udFNpemUnLFxyXG4gIC8vICAgICAgICAgJ0JvbGQnLFxyXG4gIC8vICAgICAgICAgJ1VuZGVybGluZScsXHJcbiAgLy8gICAgICAgICAnSXRhbGljJyxcclxuICAvLyAgICAgICAgICctJyxcclxuICAvLyAgICAgICAgICdKdXN0aWZ5TGVmdCcsXHJcbiAgLy8gICAgICAgICAnSnVzdGlmeUNlbnRlcicsXHJcbiAgLy8gICAgICAgICAnSnVzdGlmeVJpZ2h0JyxcclxuICAvLyAgICAgICAgICdUZXh0Q29sb3InLFxyXG4gIC8vICAgICAgICAgJ0JHQ29sb3InLFxyXG4gIC8vICAgICAgIF0sXHJcbiAgLy8gICAgIF1cclxuICAvLyAgIH07XHJcbiAgLy8gICBpZiAodGhpcy5oYXNJMThuKSB7XHJcbiAgLy8gICAgIGNvbnN0IHBsdWdpbk5hbWUgPSAoY29uZmlnLmV4dHJhUGx1Z2lucyA/ICcsJyA6ICcnKSArICdpMThuJztcclxuICAvLyAgICAgY29uZmlnLmV4dHJhUGx1Z2lucyA9IGNvbmZpZy5leHRyYVBsdWdpbnMgKyBwbHVnaW5OYW1lO1xyXG4gIC8vICAgICBjb25maWcudG9vbGJhcl9CYXNpY1swXS51bnNoaWZ0KCdDaGluZXNlJywgJy0nLCAnRW5nbGlzaCcpO1xyXG4gIC8vICAgfVxyXG4gIC8vICAgLy8gY29uc29sZS5sb2coJ2NvbmZpZz09JywgY29uZmlnKTtcclxuICAvLyAgIGlmICh0aGlzLmJyTW9kZSkge1xyXG4gIC8vICAgICBjb25maWdbJ2VudGVyTW9kZSddID0gQ0tFRElUT1IuRU5URVJfQlI7XHJcbiAgLy8gICAgIGNvbmZpZ1snc2hpZnRFbnRlck1vZGUnXSA9IENLRURJVE9SLkVOVEVSX0JSO1xyXG4gIC8vICAgfVxyXG4gIC8vICAgdGhpcy5pbnN0YW5jZSA9IENLRURJVE9SLmlubGluZSh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsIGNvbmZpZyk7XHJcbiAgLy8gICAvLyBjb25zb2xlLmxvZygndGhpcy5pbnN0YW5jZT09JywgdGhpcy5pbnN0YW5jZSk7XHJcblxyXG4gIC8vICAgLy8g6K6+572u5Zu96ZmF5YyW6K+t6KiA5Y+K5L6m5ZCsXHJcbiAgLy8gICAvLyB0aGlzLmxhbmd1YWdldHlwZSA9IHRoaXMuaW5zdGFuY2UuZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtaTE4bicpIHx8IHRoaXMubGFuZ3VhZ2V0eXBlO1xyXG4gIC8vICAgLy8gdGhpcy5pbnN0YW5jZS5vbignaTE4bicsIChldnQ6IGFueSkgPT4ge1xyXG4gIC8vICAgLy8gICAvLyBjb25zb2xlLmxvZygnaTE4biBjaGFuZ2U9ICcsIGV2dCk7XHJcbiAgLy8gICAvLyAgIGlmIChldnQuZGF0YSAhPSB0aGlzLmxhbmd1YWdldHlwZSkge1xyXG4gIC8vICAgLy8gICAgIHRoaXMubGFuZ3VhZ2V0eXBlID0gZXZ0LmRhdGE7XHJcbiAgLy8gICAvLyAgICAgdGhpcy51cGRhdGVFZGl0b3JWYWx1ZSgpO1xyXG4gIC8vICAgLy8gICB9XHJcbiAgLy8gICAvLyB9KTtcclxuXHJcbiAgLy8gICAvLyDmm7TmlrDooajljZXlgLxcclxuICAvLyAgIHRoaXMudXBkYXRlRWRpdG9yVmFsdWUoKTtcclxuXHJcbiAgLy8gICAvLyBDS0VkaXRvciBibHVyIGV2ZW50XHJcbiAgLy8gICB0aGlzLmluc3RhbmNlLm9uKCdibHVyJywgKGV2dDogYW55KSA9PiB7XHJcbiAgLy8gICAgIHRoaXMuYmx1ci5lbWl0KGV2dCk7XHJcbiAgLy8gICB9KTtcclxuXHJcbiAgLy8gICAvLyBDS0VkaXRvciBmb2N1cyBldmVudFxyXG4gIC8vICAgdGhpcy5pbnN0YW5jZS5vbignZm9jdXMnLCAoZXZ0OiBhbnkpID0+IHtcclxuICAvLyAgICAgdGhpcy5mb2N1cy5lbWl0KGV2dCk7XHJcbiAgLy8gICB9KTtcclxuXHJcbiAgLy8gICB0aGlzLmluc3RhbmNlLm9uKCdjaGFuZ2UnLCAoZXZ0OiBhbnkpID0+IHtcclxuICAvLyAgICAgLy8gY29uc29sZS5sb2coJ29uY2hhbmdlID09ICcsIGV2dCk7XHJcbiAgLy8gICAgIGxldCB2YWx1ZSA9IHRoaXMuaW5zdGFuY2UuZ2V0RGF0YSgpO1xyXG4gIC8vICAgICBpZiAodGhpcy5tb2RlbCAhPT0gdmFsdWUpIHtcclxuICAvLyAgICAgICAvLyBEZWJvdW5jZSB1cGRhdGVcclxuICAvLyAgICAgICBpZiAodGhpcy5kZWJvdW5jZSkge1xyXG4gIC8vICAgICAgICAgaWYgKHRoaXMuZGVib3VuY2VUaW1lb3V0KSBjbGVhclRpbWVvdXQodGhpcy5kZWJvdW5jZVRpbWVvdXQpO1xyXG4gIC8vICAgICAgICAgdGhpcy5kZWJvdW5jZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAvLyAgICAgICAgICAgdGhpcy51cGRhdGVWYWx1ZSh0aGlzLmluc3RhbmNlLmdldERhdGEoKSk7XHJcbiAgLy8gICAgICAgICAgIHRoaXMuZGVib3VuY2VUaW1lb3V0ID0gbnVsbDtcclxuICAvLyAgICAgICAgIH0sIHBhcnNlSW50KHRoaXMuZGVib3VuY2UsIDEwKSk7XHJcbiAgLy8gICAgICAgfSBlbHNlIHtcclxuICAvLyAgICAgICAgIHRoaXMudXBkYXRlVmFsdWUodmFsdWUpO1xyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgfVxyXG4gIC8vICAgfSk7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBkb0ZvY3VzKCkge1xyXG4gIC8vICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgLy8gICAgIHRoaXMuaW5zdGFuY2UuZm9jdXMoKTtcclxuICAvLyAgIH0sIDApO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gaW5zZXJ0QWZ0ZXIobmV3RWxlbWVudCwgdGFyZ2V0RWxlbWVudCkge1xyXG4gIC8vICAgdmFyIHBhcmVudCA9IHRhcmdldEVsZW1lbnQucGFyZW50Tm9kZTtcclxuICAvLyAgIGlmIChwYXJlbnQubGFzdENoaWxkID09IHRhcmdldEVsZW1lbnQpIHtcclxuICAvLyAgICAgcGFyZW50LmFwcGVuZENoaWxkKG5ld0VsZW1lbnQpO1xyXG4gIC8vICAgfSBlbHNlIHtcclxuICAvLyAgICAgcGFyZW50Lmluc2VydEJlZm9yZShuZXdFbGVtZW50LCB0YXJnZXRFbGVtZW50Lm5leHRTaWJsaW5nKTtcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6YW55KSB7XHJcbiAgICAvLyB0aGlzLmxhc3RWaWV3TW9kZWwgPSB0aGlzLm1vZGVsO1xyXG4gICAgLy8gdGhpcy51cGRhdGVFZGl0b3JWYWx1ZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8gb25LZXl1cCgpIHtcclxuICAvLyAgIHZhciB2YWx1ZSA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5pbm5lckhUTUw7XHJcbiAgLy8gICB0aGlzLmxhc3RWaWV3TW9kZWwgPSB2YWx1ZTtcclxuICAvLyAgIHRoaXMuY2hhbmdlLmVtaXQodmFsdWUpO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gdXBkYXRlVmFsdWUodmFsdWU6IGFueSkge1xyXG4gIC8vICAgLy8gdGhpcy56b25lLnJ1bigoKSA9PiB7XHJcbiAgLy8gICAvLyAgIHRoaXMubGFzdFZpZXdNb2RlbCA9IHZhbHVlO1xyXG4gIC8vICAgLy8gICB0aGlzLmNoYW5nZUJ5U2VsZiA9IHRydWU7XHJcbiAgLy8gICAvLyAgIGlmIChfLmlzQXJyYXkodGhpcy5tb2RlbCkpIHtcclxuICAvLyAgIC8vICAgICBjb25zdCBmb3VuZCA9IHRoaXMubW9kZWwuZmluZChpdGVtID0+IHtcclxuICAvLyAgIC8vICAgICAgIHJldHVybiBpdGVtLmxhbmd1YWdldHlwZSA9PSB0aGlzLmxhbmd1YWdldHlwZTsgLy96aGNuXHJcbiAgLy8gICAvLyAgICAgfSk7XHJcbiAgLy8gICAvLyAgICAgaWYgKGZvdW5kKSB7XHJcbiAgLy8gICAvLyAgICAgICBmb3VuZC5uYW1lID0gdmFsdWU7XHJcbiAgLy8gICAvLyAgICAgfVxyXG4gIC8vICAgLy8gICAgIHRoaXMuY2hhbmdlLmVtaXQodGhpcy5tb2RlbCk7XHJcbiAgLy8gICAvLyAgIH0gZWxzZSB7XHJcbiAgLy8gICAvLyAgICAgdGhpcy5jaGFuZ2UuZW1pdCh2YWx1ZSk7XHJcbiAgLy8gICAvLyAgIH1cclxuICAvLyAgIC8vIH0pO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gcmVmcmVzaFZpZXcoKSB7XHJcbiAgLy8gICBpZiAodGhpcy5pbnN0YW5jZSkgdGhpcy5pbnN0YW5jZS5zZXREYXRhKHRoaXMubGFzdFZpZXdNb2RlbCk7XHJcbiAgLy8gICAvLyB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5sYXN0Vmlld01vZGVsXHJcbiAgLy8gfVxyXG5cclxuICAvLyB1cGRhdGVFZGl0b3JWYWx1ZSgpIHtcclxuICAvLyAgIC8vIGlmICh0aGlzLmluc3RhbmNlKSB7XHJcbiAgLy8gICAvLyAgIGxldCBtb2RlbCA9IHRoaXMubW9kZWw7XHJcbiAgLy8gICAvLyAgIC8vIGNvbnNvbGUubG9nKCd0aGlzLm1vZGVsPT0nLCB0aGlzLm1vZGVsKTtcclxuICAvLyAgIC8vICAgaWYgKF8uaXNBcnJheSh0aGlzLm1vZGVsKSkge1xyXG4gIC8vICAgLy8gICAgIGxldCBmb3VuZEl0ZW0gPSB0aGlzLm1vZGVsLmZpbmQoaXRlbSA9PiB7XHJcbiAgLy8gICAvLyAgICAgICByZXR1cm4gaXRlbS5sYW5ndWFnZXR5cGUgPT0gdGhpcy5sYW5ndWFnZXR5cGU7IC8vemhjblxyXG4gIC8vICAgLy8gICAgIH0pO1xyXG4gIC8vICAgLy8gICAgIGlmICghZm91bmRJdGVtKSB7XHJcbiAgLy8gICAvLyAgICAgICBmb3VuZEl0ZW0gPSB7IGxhbmd1YWdldHlwZTogdGhpcy5sYW5ndWFnZXR5cGUsIGlkOiAwLCBuYW1lOiAnJyB9O1xyXG4gIC8vICAgLy8gICAgICAgdGhpcy5tb2RlbC5wdXNoKGZvdW5kSXRlbSk7XHJcbiAgLy8gICAvLyAgICAgfVxyXG4gIC8vICAgLy8gICAgIG1vZGVsID0gZm91bmRJdGVtLm5hbWU7XHJcbiAgLy8gICAvLyAgIH1cclxuICAvLyAgIC8vICAgdGhpcy5pbnN0YW5jZS5zZXREYXRhKG1vZGVsKTtcclxuICAvLyAgIC8vIH1cclxuICAvLyB9XHJcblxyXG4gIC8vIGVtcHR5KCkge1xyXG4gIC8vICAgdGhpcy5tb2RlbCA9ICcnO1xyXG4gIC8vICAgdGhpcy5sYXN0Vmlld01vZGVsID0gJyc7XHJcbiAgLy8gICB0aGlzLmluc3RhbmNlLnNldERhdGEoJycpO1xyXG4gIC8vIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT24gY29tcG9uZW50IGRlc3Ryb3lcclxuICAgKi9cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIC8vIGlmICh0aGlzLmRlYm91bmNlVGltZW91dCkge1xyXG4gICAgLy8gICBjbGVhclRpbWVvdXQodGhpcy5kZWJvdW5jZVRpbWVvdXQpO1xyXG4gICAgLy8gICB0aGlzLmRlYm91bmNlVGltZW91dCA9IG51bGw7XHJcbiAgICAvLyB9XHJcbiAgICAvLyBpZiAodGhpcy5pbnN0YW5jZSkge1xyXG4gICAgLy8gICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIC8vICAgICB0aGlzLmluc3RhbmNlLnJlbW92ZUFsbExpc3RlbmVycygpO1xyXG4gICAgLy8gICAgIGxldCBkb20gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjY2tlXycgKyB0aGlzLmluc3RhbmNlLm5hbWUpO1xyXG4gICAgLy8gICAgIGlmIChkb20pIHtcclxuICAgIC8vICAgICAgIGRvbS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGRvbSk7XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICAgIENLRURJVE9SLmluc3RhbmNlc1t0aGlzLmluc3RhbmNlLm5hbWVdLmRlc3Ryb3kodHJ1ZSk7XHJcbiAgICAvLyAgICAgdGhpcy5pbnN0YW5jZS5kZXN0cm95KHRydWUpO1xyXG4gICAgLy8gICAgIHRoaXMuaW5zdGFuY2UgPSBudWxsO1xyXG4gICAgLy8gICB9KTtcclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIC8vIHJlcGVhdFN0cihzdHIsIGNvdW50KSB7XHJcbiAgLy8gICB2YXIgcmV0ID0gJyc7XHJcbiAgLy8gICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcclxuICAvLyAgICAgcmV0ICs9IHN0cjtcclxuICAvLyAgIH1cclxuICAvLyAgIHJldHVybiByZXQ7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBjaGVja0FsbElzVW5kbGluZShpbnB1dCkge1xyXG4gIC8vICAgbGV0IHJldCA9IHRydWU7XHJcbiAgLy8gICBmb3IgKHZhciBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgLy8gICAgIGlmIChpbnB1dFtpXSAhPSAnXycpIHtcclxuICAvLyAgICAgICByZXQgPSBmYWxzZTtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfVxyXG4gIC8vICAgcmV0dXJuIHJldDtcclxuICAvLyB9XHJcblxyXG4gIC8vIGdldFRleHROb2RlKHBhcmVudCkge1xyXG4gIC8vICAgdmFyIGNoaWxkTm9kZXMgPSBwYXJlbnQuY2hpbGROb2RlcztcclxuICAvLyAgIHZhciBjaGlsZExlbiA9IGNoaWxkTm9kZXMubGVuZ3RoO1xyXG4gIC8vICAgaWYgKGNoaWxkTGVuID4gMCkge1xyXG4gIC8vICAgICB2YXIgY2hpbGQgPSBjaGlsZE5vZGVzWzBdO1xyXG4gIC8vICAgICBpZiAoY2hpbGQuY2hpbGROb2Rlcy5sZW5ndGggPiAwKSB7XHJcbiAgLy8gICAgICAgcmV0dXJuIGNoaWxkLmNoaWxkTm9kZXNbMF07XHJcbiAgLy8gICAgIH0gZWxzZSByZXR1cm4gY2hpbGQ7XHJcbiAgLy8gICB9XHJcbiAgLy8gICByZXR1cm4gcGFyZW50O1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gcHJlcGFyZVJlcGxhY2UoKSB7XHJcbiAgLy8gICAvLyDorr7nva7mnIDlkI7lhYnmoIflr7nosaFcclxuICAvLyAgIC8vY29uc29sZS5sb2cobGFzdFJhbmdlKVxyXG4gIC8vICAgdmFyIHN0YXJ0T2Zmc2V0ID0gdGhpcy5sYXN0UmFuZ2Uuc3RhcnRPZmZzZXQ7XHJcbiAgLy8gICB2YXIgc3RhcnRUZXh0ID0gdGhpcy5sYXN0UmFuZ2Uuc3RhcnRDb250YWluZXIuZGF0YTtcclxuICAvLyAgIHZhciBwYXJlbnRUYWdOYW1lID0gdGhpcy5sYXN0UmFuZ2Uuc3RhcnRDb250YWluZXIucGFyZW50Tm9kZS5ub2RlTmFtZTtcclxuICAvLyAgIHZhciBpc0JsYW5rID0gdGhpcy5sYXN0UmFuZ2Uuc3RhcnRDb250YWluZXIucGFyZW50Tm9kZS5jbGFzc05hbWUuaW5kZXhPZignbW9kX2ZpbGxibGFuaycpID49IDA7XHJcbiAgLy8gICAvL2NvbnNvbGUubG9nKFwic3RhcnRUZXh0OlwiK3N0YXJ0VGV4dClcclxuICAvLyAgIGlmIChwYXJlbnRUYWdOYW1lID09ICdQJyB8fCAoaXNCbGFuayAmJiBwYXJlbnRUYWdOYW1lID09ICdTUEFOJykpIHtcclxuICAvLyAgICAgaWYgKHRoaXMuY2hlY2tBbGxJc1VuZGxpbmUoc3RhcnRUZXh0KSkge1xyXG4gIC8vICAgICAgIHRoaXMuY3Vyc29yID0gc3RhcnRPZmZzZXQ7XHJcbiAgLy8gICAgIH0gZWxzZSBpZiAoc3RhcnRUZXh0LnN1YnN0cigtMSwgMSkgPT0gJ18nKSB7XHJcbiAgLy8gICAgICAgLy/mnIDlkI7kuIDkuKrmmK9fXHJcbiAgLy8gICAgICAgdmFyIGZsYWdDb3VudCA9IDA7XHJcbiAgLy8gICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGFydE9mZnNldDsgaSsrKSB7XHJcbiAgLy8gICAgICAgICBpZiAoc3RhcnRUZXh0W2ldID09ICdfJykgZmxhZ0NvdW50Kys7XHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgICAgIHRoaXMuY3Vyc29yID0gZmxhZ0NvdW50O1xyXG4gIC8vICAgICB9IGVsc2UgaWYgKHN0YXJ0VGV4dC5pbmRleE9mKCdfJykgPj0gMCkge1xyXG4gIC8vICAgICAgIC8vY2hlY2sgZmlyc3QgaXMgX1xyXG4gIC8vICAgICAgIGlmIChzdGFydFRleHRbMF0gPT0gJ18nKSB7XHJcbiAgLy8gICAgICAgICB2YXIgZmxhZ0NvdW50ID0gMDtcclxuICAvLyAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhcnRPZmZzZXQ7IGkrKykge1xyXG4gIC8vICAgICAgICAgICBpZiAoc3RhcnRUZXh0W2ldID09ICdfJykgZmxhZ0NvdW50Kys7XHJcbiAgLy8gICAgICAgICB9XHJcbiAgLy8gICAgICAgICB0aGlzLmN1cnNvciA9IHN0YXJ0T2Zmc2V0IC0gZmxhZ0NvdW50O1xyXG4gIC8vICAgICAgIH0gZWxzZSB7XHJcbiAgLy8gICAgICAgICB2YXIgZmxhZ0NvdW50ID0gMDtcclxuICAvLyAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhcnRPZmZzZXQ7IGkrKykge1xyXG4gIC8vICAgICAgICAgICBpZiAoc3RhcnRUZXh0W2ldICE9ICdfJykgZmxhZ0NvdW50Kys7XHJcbiAgLy8gICAgICAgICB9XHJcbiAgLy8gICAgICAgICB0aGlzLmN1cnNvciA9IHN0YXJ0T2Zmc2V0IC0gZmxhZ0NvdW50O1xyXG4gIC8vICAgICAgIH1cclxuXHJcbiAgLy8gICAgICAgLy/liKTmlq3lt6bovrnmmK/pnZ7lrZfmr43nmoTmg4XlhrVcclxuICAvLyAgICAgfSBlbHNlIHtcclxuICAvLyAgICAgICB0aGlzLmN1cnNvciA9IHN0YXJ0T2Zmc2V0O1xyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9IGVsc2Uge1xyXG4gIC8vICAgICB0aGlzLmN1cnNvciA9IHN0YXJ0T2Zmc2V0O1xyXG4gIC8vICAgfVxyXG5cclxuICAvLyAgIC8vIGNvbnNvbGUubG9nKCdsYXN0IGN1cnNvcjonICsgdGhpcy5jdXJzb3IpO1xyXG4gIC8vICAgLy/mgI7kuYjliIbmrrVcclxuICAvLyAgIHZhciBjaGlsZE5vZGVzID0gdGhpcy5lZGl0YWJsZUVsZS5jaGlsZE5vZGVzO1xyXG4gIC8vICAgdmFyIGNoaWxkTm9kZUxlbiA9IGNoaWxkTm9kZXMubGVuZ3RoO1xyXG4gIC8vICAgLy9jb25zb2xlLmxvZyhjaGlsZE5vZGVzKVxyXG4gIC8vICAgdmFyIGZpbmRJbmRleDtcclxuICAvLyAgIHZhciB0ZXh0Tm9kZTtcclxuICAvLyAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGROb2RlTGVuOyBpKyspIHtcclxuICAvLyAgICAgdGV4dE5vZGUgPSB0aGlzLmdldFRleHROb2RlKGNoaWxkTm9kZXNbaV0pO1xyXG4gIC8vICAgICAvLyBjb25zb2xlLmxvZyh0ZXh0Tm9kZSlcclxuICAvLyAgICAgaWYgKHRleHROb2RlID09IHRoaXMubGFzdFJhbmdlLnN0YXJ0Q29udGFpbmVyKSB7XHJcbiAgLy8gICAgICAgLy9jb25zb2xlLmxvZyhcIm1hdGNoXCIpXHJcbiAgLy8gICAgICAgZmluZEluZGV4ID0gaTtcclxuICAvLyAgICAgICB2YXIgcGFyZW50VGFnTmFtZSA9IHRleHROb2RlLnBhcmVudE5vZGUubm9kZU5hbWU7XHJcbiAgLy8gICAgICAgdmFyIGlzQmxhbmsgPSB0ZXh0Tm9kZS5wYXJlbnROb2RlLmNsYXNzTmFtZS5pbmRleE9mKCdtb2RfZmlsbGJsYW5rJykgPj0gMDtcclxuICAvLyAgICAgICBpZiAoXHJcbiAgLy8gICAgICAgICAhdGhpcy5jaGVja0FsbElzVW5kbGluZSh0ZXh0Tm9kZS5kYXRhKSAmJlxyXG4gIC8vICAgICAgICAgKChwYXJlbnRUYWdOYW1lID09ICdTUEFOJyAmJiBpc0JsYW5rKSB8fCBwYXJlbnRUYWdOYW1lID09ICdQJylcclxuICAvLyAgICAgICApIHtcclxuICAvLyAgICAgICAgIGlmICh0ZXh0Tm9kZS5kYXRhLmluZGV4T2YoJ18nKSA+PSAwKSB7XHJcbiAgLy8gICAgICAgICAgIGZpbmRJbmRleCA9IGkgKyAxO1xyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgfVxyXG4gIC8vICAgfVxyXG4gIC8vICAgdGhpcy5zcGxpdEluZGV4ID0gZmluZEluZGV4O1xyXG4gIC8vICAgLy8gY29uc29sZS5sb2coJ2luZGV4OicgKyBmaW5kSW5kZXgpO1xyXG4gIC8vICAgLy90aGlzLmRvUmVwbGFjZSgpXHJcbiAgLy8gfVxyXG5cclxuICAvLyBkb1JlcGxhY2UoKSB7XHJcbiAgLy8gICB2YXIgaW5uZXJIVE1MID0gdGhpcy5lZGl0YWJsZUVsZS5pbm5lckhUTUw7XHJcbiAgLy8gICAvL2NvbnNvbGUubG9nKFwiaW5uZXJIVE1MOlwiK2lubmVySFRNTClcclxuICAvLyAgIHZhciByZXBsYWNlU3RyID0gdGhpcy5nZXRSZXBsYWNlU3RyKGlubmVySFRNTCk7XHJcbiAgLy8gICBjb25zb2xlLmxvZyhyZXBsYWNlU3RyKTtcclxuICAvLyAgIC8vIGVkaXRhYmxlRWxlLmlubmVySFRNTCA9IHJlcGxhY2VTdHJcclxuICAvLyAgIC8vdGhpcy5pbnN0YW5jZS5zZXREYXRhKHJlcGxhY2VTdHIpO1xyXG4gIC8vICAgdmFyIGNoaWxkTm9kZXMgPSB0aGlzLmVkaXRhYmxlRWxlLmNoaWxkTm9kZXM7XHJcbiAgLy8gICAvLyBjb25zb2xlLmxvZyhjaGlsZE5vZGVzKTtcclxuICAvLyAgIC8vY29uc29sZS5sb2coc2VsZWN0aW9uKVxyXG4gIC8vICAgLy8g5Yik5pat5piv5ZCm5pyJ5pyA5ZCO5YWJ5qCH5a+56LGh5a2Y5ZyoXHJcbiAgLy8gICBpZiAodGhpcy5jdXJzb3IpIHtcclxuICAvLyAgICAgLy9jb25zb2xlLmxvZyhcImV4aXN0IHJhbmdlXCIpXHJcbiAgLy8gICAgIC8vY29uc29sZS5sb2coY2hpbGROb2RlcylcclxuICAvLyAgICAgdmFyIHNlbGVjdGlvbiA9IGdldFNlbGVjdGlvbigpO1xyXG4gIC8vICAgICB2YXIgdGV4dE5vZGU7XHJcbiAgLy8gICAgIC8vdmFyIHJhbmdlTmV3ID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcclxuICAvLyAgICAgdmFyIHJhbmdlID0gbmV3IENLRURJVE9SLmRvbS5yYW5nZSh0aGlzLmluc3RhbmNlLmRvY3VtZW50KTtcclxuICAvLyAgICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKHRoaXMuaW5zdGFuY2UuZG9jdW1lbnQuZ2V0Qm9keSgpKTtcclxuICAvLyAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgLy8gICAgICAgaWYgKGkgPT0gdGhpcy5zcGxpdEluZGV4KSB7XHJcbiAgLy8gICAgICAgICB0ZXh0Tm9kZSA9IHRoaXMuZ2V0VGV4dE5vZGUoY2hpbGROb2Rlc1tpXSk7XHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgICB9XHJcbiAgLy8gICAgIC8vIGNvbnNvbGUubG9nKCd0ZXh0Tm9kZTonICsgdGV4dE5vZGUpO1xyXG4gIC8vICAgICBpZiAodGV4dE5vZGUpIHtcclxuICAvLyAgICAgICAvL3JhbmdlLnNldFN0YXJ0KHRleHROb2RlLCB0aGlzLmN1cnNvcilcclxuICAvLyAgICAgICAvLyDkvb/lhYnmoIflvIDlp4vlkozlhYnmoIfnu5PmnZ/ph43lj6BcclxuICAvLyAgICAgICAvL3JhbmdlLmNvbGxhcHNlKHRydWUpXHJcbiAgLy8gICAgIH1cclxuXHJcbiAgLy8gICAgIC8vIOa4hemZpOmAieWumuWvueixoeeahOaJgOacieWFieagh+WvueixoVxyXG4gIC8vICAgICAvL3NlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKVxyXG4gIC8vICAgICAvLyDmj5LlhaXmlrDnmoTlhYnmoIflr7nosaFcclxuICAvLyAgICAgLy9zZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpXHJcbiAgLy8gICB9XHJcblxyXG4gIC8vICAgLy8gY29uc29sZS5sb2cocmFuZ2UpXHJcbiAgLy8gfVxyXG5cclxuICAvLyBnZXRSZXBsYWNlU3RyKHN0cikge1xyXG4gIC8vICAgLy8gY29uc29sZS5sb2coXCJvcmlnaW5cIilcclxuICAvLyAgIC8vY29uc29sZS5sb2coc3RyKVxyXG4gIC8vICAgdmFyIHJlZ2V4MSA9IC88c3BhbiBkYXRhLWlkPVwiZmlsbGJsYW5rLVtcXHddK1wiIGNsYXNzPVwibW9kX2ZpbGxibGFua1wiPihbXFx3fFxcdTRlMDAtXFx1OWZhNWFdKyk8XFwvc3Bhbj4vZztcclxuICAvLyAgIC8vIOWumuS5ieacgOWQjuWFieagh+WvueixoVxyXG4gIC8vICAgdmFyIGxhc3RFZGl0UmFuZ2U7XHJcblxyXG4gIC8vICAgc3RyID0gc3RyLnJlcGxhY2UocmVnZXgxLCBmdW5jdGlvbihtYXRjaCwgJDEpIHtcclxuICAvLyAgICAgLy8gY29uc29sZS5sb2cobWF0Y2gpXHJcbiAgLy8gICAgIC8vY29uc29sZS5sb2coJDEpXHJcbiAgLy8gICAgIC8vIHZhciBmb3JtYXRTdHIgPSAkMS5yZXBsYWNlKC9bX10rL2csZnVuY3Rpb24obWF0Y2gpe1xyXG4gIC8vICAgICAvLyBcdC8vL2NvbnNvbGUubG9nKG1hdGNoKVxyXG4gIC8vICAgICAvLyBcdHJldHVybiAnPHNwYW4gZGF0YS1pZD1cImZpbGxibGFuay13NzFFXCIgY2xhc3M9XCJtb2RfZmlsbGJsYW5rXCI+JyttYXRjaCsnPC9zcGFuPidcclxuICAvLyAgICAgLy8gfSlcclxuICAvLyAgICAgLy9jb25zb2xlLmxvZyhzdHIpXHJcbiAgLy8gICAgIHJldHVybiAkMTtcclxuICAvLyAgIH0pO1xyXG4gIC8vICAgLy9jb25zb2xlLmxvZyhcInN0ZXAxOlwiKVxyXG4gIC8vICAgLy8gY29uc29sZS5sb2coc3RyKVxyXG4gIC8vICAgc3RyID0gc3RyLnJlcGxhY2UoLzwoW14+XSs+KShcXHcqW19dK1xcdyopKDxbXj5dKz4pL2csIGZ1bmN0aW9uKG1hdGNoLCAkMSwgJDIpIHtcclxuICAvLyAgICAgLy9jb25zb2xlLmxvZyhtYXRjaCwkMSwkMilcclxuICAvLyAgICAgdmFyIGZvcm1hdFN0ciA9IG1hdGNoLnJlcGxhY2UoL1tfXSsvZywgZnVuY3Rpb24obWF0Y2gpIHtcclxuICAvLyAgICAgICAvLyBjb25zb2xlLmxvZyhtYXRjaClcclxuICAvLyAgICAgICByZXR1cm4gdGhpcy5yZXBlYXRTdHIoJ1xcbicsIG1hdGNoLmxlbmd0aCk7XHJcbiAgLy8gICAgIH0pO1xyXG4gIC8vICAgICByZXR1cm4gZm9ybWF0U3RyO1xyXG4gIC8vICAgfSk7IC8v5Y675o6J5omA5pyJ55qEaHRtbOagh+iusFxyXG4gIC8vICAgLy8gY29uc29sZS5sb2coc3RyKVxyXG4gIC8vICAgc3RyID0gc3RyLnJlcGxhY2UoL1tfXSsvZywgZnVuY3Rpb24obWF0Y2gpIHtcclxuICAvLyAgICAgLy9jb25zb2xlLmxvZyhtYXRjaClcclxuICAvLyAgICAgcmV0dXJuICc8c3BhbiBkYXRhLWlkPVwiZmlsbGJsYW5rLXc3MUVcIiBjbGFzcz1cIm1vZF9maWxsYmxhbmtcIj4nICsgbWF0Y2ggKyAnPC9zcGFuPic7XHJcbiAgLy8gICB9KTtcclxuICAvLyAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cXG4rL2csIGZ1bmN0aW9uKG1hdGNoKSB7XHJcbiAgLy8gICAgIHJldHVybiB0aGlzLnJlcGVhdFN0cignXycsIG1hdGNoLmxlbmd0aCk7XHJcbiAgLy8gICB9KTtcclxuICAvLyAgIC8vY29uc29sZS5sb2coc3RyKVxyXG4gIC8vICAgcmV0dXJuIHN0cjtcclxuICAvLyB9XHJcblxyXG4gIC8vIGluc2VydFRleHQodGV4dCkge1xyXG4gIC8vICAgdGhpcy5pbnN0YW5jZS5pbnNlcnRUZXh0KHRleHQpO1xyXG4gIC8vIH1cclxufVxyXG4iXX0=