@libs-ui/components-inputs-input 0.2.119 → 0.2.121

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -120,7 +120,10 @@ export class LibsUiComponentsInputsInputComponent {
120
120
  this.init();
121
121
  }, { allowSignalWrites: true });
122
122
  effect(() => {
123
- untracked(() => this.afterViewInit());
123
+ if (this.Element) {
124
+ this.onDestroy.next();
125
+ untracked(() => this.afterViewInit());
126
+ }
124
127
  });
125
128
  }
126
129
  ngOnInit() {
@@ -778,4 +781,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
778
781
  LibsUiComponentsButtonsSortComponent
779
782
  ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [class]=\"'flex relative !text-[#9ca2ad] ' + classContainerInput()\"\n [class.libs-ui-components-input-textarea-container]=\"tagInput() === 'textarea' && resize() === 'auto'\">\n @if (tagInput() === 'input') {\n <input #inputRef\n [class.libs-ui-readonly]=\"readonly()\"\n [class.libs-ui-readonly-background]=\"readonly()\"\n [class.libs-ui-disable]=\"disable()\"\n [class.libs-ui-disable-background]=\"disable()\"\n [style.height.px]=\"defaultHeight()\"\n [style.minHeight.px]=\"defaultHeight()\"\n [style.paddingRight.px.important]=\"paddingRightCustom()\"\n [class.w-full]=\"!ignoreWidthInput100()\"\n [class]=\"'libs-ui-input ' + classInclude()\"\n [class.border-primary-focus-general]=\"focusInput()\"\n [class.libs-ui-input-not-border]=\"noBorder()\"\n [class.libs-ui-bg-special-none]=\"backgroundNone()\"\n [class.libs-ui-border-error-general]=\"borderError()\"\n [class.text-[#29c7cc]]=\"useColorModeExist()\"\n [class.!pl-[40px]]=\"iconLeftClass()\"\n [attr.maxLength]=\"maxLength() || undefined\"\n [placeholder]=\"placeholder() | translate\"\n [attr.type]=\"hiddenContent() ? 'password':'text'\"\n [readonly]=\"readonly()\"\n [disabled]=\"disable()\"\n [autocomplete]=\"resetAutoCompletePassword()? 'new-password':''\" />\n }\n @if (tagInput() === 'textarea') {\n @if (resize() === 'auto') {\n <div class=\"libs-ui-components-input-textarea-container-resize-icon\"></div>\n }\n <textarea #inputRef\n [class.libs-ui-readonly]=\"readonly()\"\n [class.libs-ui-readonly-background]=\"readonly()\"\n [class.libs-ui-disable]=\"disable()\"\n [class.libs-ui-disable-background]=\"disable()\"\n [style.height.px]=\"defaultHeight()\"\n [style.minHeight.px]=\"minHeightTextArea() ?? defaultHeight()\"\n [style.paddingRight.px]=\"paddingRightCustom()\"\n [style.maxHeight.px]=\"maxHeightTextArea()\"\n [style.resize]=\"resize()\"\n [class.w-full]=\"!ignoreWidthInput100()\"\n [class]=\"'libs-ui-input libs-ui-cursor-auto ' + classInclude()\"\n [class.libs-ui-input-not-border]=\"noBorder()\"\n [class.libs-ui-bg-special-none]=\"backgroundNone()\"\n [class.libs-ui-border-error-general]=\"borderError()\"\n [class.text-[#29c7cc]]=\"useColorModeExist()\"\n [class.pl-[32px]]=\"iconLeftClass()\"\n [attr.maxLength]=\"maxLength() || undefined\"\n [placeholder]=\"placeholder() | translate\"\n [readonly]=\"readonly()\"\n [disabled]=\"disable()\">\n </textarea>\n }\n\n @if (tagInput() === 'iframe-textarea' && htmlIframeArea()) {\n <span class=\"d-none\">\n </span>\n <iframe #iframeRef\n [style.maxHeight.px]=\"maxHeightTextArea()\"\n [style.height.px]=\"defaultHeight()\"\n [srcdoc]=\"htmlIframeArea()\"\n class=\"w-full\"\n frameBorder=\"0\"\n (load)=\"handlerOnLoad($event,iframeRef)\">\n </iframe>\n }\n @if (iconLeftClass()) {\n <libs_ui-components-popover [ignoreShowPopover]=\"!popoverContentIconLeft()\"\n [config]=\"{maxWidth:250,direction:'bottom',content:popoverContentIconLeft(),zIndex: zIndexPopoverContent()}\">\n <i [attr.tagInput]=\"tagInput()\"\n [class]=\"iconLeftClass() +' libs-ui-input-icon-left !text-[#9ca2ad]'\"\n (click)=\"handlerEventIconLeft($event,'click')\">\n </i>\n </libs_ui-components-popover>\n }\n <div #elementRightRef\n class=\"absolute flex items-center h-full top-0 right-0\">\n @if (value() && placeholder().trim() && keepPlaceholderOnly()) {\n <span [class]=\"'libs-ui-input-placeholder-custom libs-ui-font-h5r'\">\n {{ placeholder() }}\n </span>\n }\n @if (dataType() !=='string' && valueUpDownNumber()) {\n <libs_ui-components-buttons-sort class=\"mr-[12px]\"\n [disableAsc]=\"disableAsc()\"\n [disableDesc]=\"disableDesc()\"\n [attr.tagInput]=\"tagInput()\"\n [onlyEmit]=\"true\"\n [disable]=\"disable() || readonly()\"\n (outChange)=\"handlerChangeValue($event)\" />\n }\n @if (iconRightClass()) {\n <libs_ui-components-popover class=\"flex\"\n [ignoreShowPopover]=\"!popoverContentIconRight()\"\n [config]=\"{maxWidth:250,direction:'bottom',content:popoverContentIconRight(),zIndex: zIndexPopoverContent()}\">\n <i [attr.tagInput]=\"tagInput()\"\n [class.text-[#6a7383]]=\"(!disable() && !readonly()) || acceptOnlyClickIcon()\"\n [class.text-[#cdd0d6]]='((disable() || readonly()) && !acceptOnlyClickIcon()) || setIconRightColorSameColorDisableReadOnly()'\n [class]=\"iconRightClass() +' libs-ui-input-icon-right'\"\n (click)=\"handlerEventIconRight($event,'click')\">\n </i>\n </libs_ui-components-popover>\n }\n </div>\n\n <div class=\"libs-ui-input-text-bottom {{ classContainerBottomInput() }}\"\n [style.right.px]=\"(tagInput() === 'input' ? (elementRightRef.clientWidth || 0) : 0) + 8\">\n @if (templateLeftBottomInput()) {\n <ng-container *ngTemplateOutlet=\"templateLeftBottomInput()\" />\n }\n @if (dataType() === 'string' && showCount()) {\n <div #textCountRef\n class=\"text-[#9ca2ad] libs-ui-font-h7r\">\n <span>{{ countDisplay() }}</span>\n @if (maxLength()) {\n <span>/{{ maxLengthDisplay() }}</span>\n }\n </div>\n }\n @if (templateRightBottomInput()) {\n <ng-container *ngTemplateOutlet=\"templateRightBottomInput()\" />\n }\n </div>\n</div>\n", styles: [".libs-ui-input{max-width:100%;border-radius:none;font-family:var(--libs-ui-font-family-name, \"Arial\");font-weight:400;font-size:12px;color:#071631;padding:7px 12px;background-color:#fff;background-clip:padding-box;min-height:32px}.libs-ui-input:not(.libs-ui-input-not-border){border:1px solid #e6e7ea;border-radius:4px}.libs-ui-input:focus{outline:none}.libs-ui-input:focus:not(:read-only):not(:disabled):not(.libs-ui-input-not-border){border:1px solid var(--libs-ui-color-light-1, #4e8cf7)}.libs-ui-input .libs-ui-input-valid-check{position:absolute;left:-27px}.libs-ui-input-not-border{border:transparent}libs-ui-components-button-sort{position:absolute;right:12px;top:0}libs-ui-components-button-sort[tagInput=textarea]{top:-10px}.libs-ui-input-icon-left{position:absolute;top:8px;left:16px;font-size:16px}.libs-ui-input-icon-right{font-size:16px;margin-right:8px}.libs-ui-input-text-bottom{display:flex;align-items:center;position:absolute;bottom:8px}input::-ms-reveal,input::-ms-clear{display:none}input::-webkit-credentials-auto-fill-button{margin-right:8px!important}textarea::-webkit-resizer{border:transparent;outline:none}.libs-ui-components-input-textarea-container:after{content:\"\";border-top:1.5px solid #9ca2ad;width:15px;transform:rotate(-45deg);background:transparent;position:absolute;right:0;bottom:8px;pointer-events:none;border-radius:25%}.libs-ui-components-input-textarea-container .libs-ui-components-input-textarea-container-resize-icon{border-top:1.5px solid #9ca2ad;width:7px;transform:rotate(-45deg);position:absolute;bottom:5px;right:1px;pointer-events:none;border-radius:25%}.libs-ui-input-placeholder-custom{color:#6a7378;margin-right:16px;background:inherit}\n"] }]
780
783
  }], ctorParameters: () => [] });
781
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9pbnB1dC9zcmMvaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9pbnB1dC9zcmMvaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQWlDLFNBQVMsRUFBZSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4TSxPQUFPLEVBQUUsWUFBWSxFQUFZLE1BQU0sMkJBQTJCLENBQUM7QUFDbkUsT0FBTyxFQUFTLG9DQUFvQyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDL0YsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFL0UsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxvQkFBb0IsRUFBRSxzQkFBc0IsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5SyxPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEUsT0FBTyxFQUFjLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFF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QWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQztvQkFDNUYsQ0FBQyxDQUFDLENBQUE7Z0JBQ0osQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sR0FBRyx3QkFBd0IsQ0FBRSxJQUFJLENBQUMsS0FBSyxFQUFhLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7SUFDL0UsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDNUIsQ0FBQzt3R0FuNUJVLG9DQUFvQzs0RkFBcEMsb0NBQW9DLDZxUkM5QmpELGs4S0E0SEEsd3RERHJHSSxlQUFlLDRGQUNmLGdDQUFnQyxxZUFDaEMsb0NBQW9DOzs0RkFLM0Isb0NBQW9DO2tCQWRoRCxTQUFTOytCQUVFLGlDQUFpQyxjQUcvQixJQUFJLFdBQ1A7d0JBQ1AsZUFBZTt3QkFDZixnQ0FBZ0M7d0JBQ2hDLG9DQUFvQztxQkFDckMsbUJBQ2dCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJcbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSwgT25Jbml0LCBSZW5kZXJlcjIsIFRlbXBsYXRlUmVmLCBjb21wdXRlZCwgZWZmZWN0LCBpbmplY3QsIGlucHV0LCBtb2RlbCwgb3V0cHV0LCBzaWduYWwsIHVudHJhY2tlZCwgdmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBJU29ydCwgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNTb3J0Q29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1idXR0b25zLXNvcnQnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXBvcG92ZXInO1xuaW1wb3J0IHsgSUV2ZW50LCBJRXZlbnRDdXN0b20sIElTdHJpbmcsIFRZUEVfVEVNUExBVEVfUkVGIH0gZnJvbSAnQGxpYnMtdWkvaW50ZXJmYWNlcy10eXBlcyc7XG5pbXBvcnQgeyBMaWJzVWlDb25maWdQcm9qZWN0U2VydmljZSB9IGZyb20gJ0BsaWJzLXVpL3NlcnZpY2VzLWNvbmZpZy1wcm9qZWN0JztcbmltcG9ydCB7IFV0aWxzQ2FjaGUsIFV0aWxzS2V5Q29kZUNvbnN0YW50LCBVdGlsc0xhbmd1YWdlQ29uc3RhbnRzLCBmb3JtYXROdW1iZXIsIGlzTmlsLCByZW1vdmVFbW9qaSwgc2V0Q2FyZXRQb3NpdGlvbiwgdXVpZCwgdmlld0RhdGFOdW1iZXJCeUxhbmd1YWdlIH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlsdGVyLCBtZXJnZU1hcCwgdGFrZSwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBpbmRleElucHV0SHRtbCB9IGZyb20gJy4vZGVmaW5lcy9pbmRleC1pZnJhbWUtYXJlYS5kZWZpbmUnO1xuaW1wb3J0IHsgSUZvY3VzQW5kQmx1ckV2ZW50IH0gZnJvbSAnLi9pbnRlcmZhY2VzL2ZvY3VzLWFuZC1ibHVyLWV2ZW50LmludGVyZmFjZSc7XG5pbXBvcnQgeyBJSW5wdXRGdW5jdGlvbkNvbnRyb2xFdmVudCB9IGZyb20gJy4vaW50ZXJmYWNlcy9mdW5jdGlvbi1jb250cm9sLWV2ZW50LmludGVyZmFjZSc7XG5cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2xpYnNfdWktY29tcG9uZW50cy1pbnB1dHMtaW5wdXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9pbnB1dC5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNCdXR0b25zU29ydENvbXBvbmVudFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcblxuZXhwb3J0IGNsYXNzIExpYnNVaUNvbXBvbmVudHNJbnB1dHNJbnB1dENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgLyogUFJPUEVSVFkgKi9cbiAgcHJvdGVjdGVkIGRpc2FibGVBc2MgPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgZGlzYWJsZURlc2MgPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgaHRtbElmcmFtZUFyZWEgPSBzaWduYWw8U2FmZUh0bWwgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCBjb3VudERpc3BsYXkgPSBjb21wdXRlZCh0aGlzLmNvdW50RGlzcGxheUNvbXB1dGVkLmJpbmQodGhpcykpO1xuICBwcm90ZWN0ZWQgbWF4TGVuZ3RoRGlzcGxheSA9IGNvbXB1dGVkKCgpID0+IGAke3ZpZXdEYXRhTnVtYmVyQnlMYW5ndWFnZSh0aGlzLm1heExlbmd0aCgpIHx8IDAsIGZhbHNlKX1gKTtcbiAgcHJvdGVjdGVkIHBhZGRpbmdSaWdodEN1c3RvbSA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcm90ZWN0ZWQgaW5wdXRJZnJhbWVSZWYgPSBzaWduYWw8RWxlbWVudFJlZiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IERFRkFVTFRfTUFYX0hFSUdIVF9URVhUX0FSRUEgPSAyNTA7XG4gIHByaXZhdGUgY2hhckZpcnN0SXNaZXJvID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSBwcmVIZWlnaHRBcmVhID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHByaXZhdGUgaWZyYW1lUmVmOiBIVE1MSUZyYW1lRWxlbWVudCB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBkYXRhVGV4dFBhc3RlID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICBwcml2YXRlIG9uRGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgLyogSU5QVVQgKi9cbiAgcmVhZG9ubHkgdGFnSW5wdXQgPSBpbnB1dDwnaW5wdXQnIHwgJ3RleHRhcmVhJyB8ICdpZnJhbWUtdGV4dGFyZWEnLCAnaW5wdXQnIHwgJ3RleHRhcmVhJyB8ICdpZnJhbWUtdGV4dGFyZWEnIHwgdW5kZWZpbmVkPignaW5wdXQnLCB7IHRyYW5zZm9ybTogdmFsdWUgPT4gdmFsdWUgPz8gJ2lucHV0JyB9KTtcbiAgcmVhZG9ubHkgZGF0YVR5cGUgPSBpbnB1dDwnc3RyaW5nJyB8ICdpbnQnIHwgJ2Zsb2F0JyB8ICdiaWdpbnQnPignc3RyaW5nJyk7XG4gIHJlYWRvbmx5IHRhYkluc2VydENvbnRlbnRUYWdJbnB1dCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgdGV4dEFyZWFFbnRlck5vdE5ld0xpbmUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGVtaXRFbXB0eUluRGF0YVR5cGVOdW1iZXIgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSk7XG4gIHJlYWRvbmx5IGtlZXBaZXJvSW5UeXBlSW50ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBhdXRvQWRkWmVyb0xlc3NUaGFuMTBJblR5cGVJbnQgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSk7XG4gIHJlYWRvbmx5IGlnbm9yZUJsb2NrSW5wdXRNYXhWYWx1ZSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGhpZGRlbkNvbnRlbnQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7IC8vIHPhu60gZOG7pW5nIMSR4buDIHNldCB0eXBlIGNobyBpbnB1dCBk4bqhbmcgdGV4dCBoYXkgcGFzc3dvcmRcbiAgcmVhZG9ubHkgbWF4VmFsdWVOdW1iZXIgPSBtb2RlbDxudW1iZXI+KCk7XG4gIHJlYWRvbmx5IG1pblZhbHVlTnVtYmVyID0gbW9kZWw8bnVtYmVyPigpO1xuICByZWFkb25seSBmaXhlZEZsb2F0ID0gbW9kZWw8bnVtYmVyPigpO1xuICByZWFkb25seSBhY2NlcHROZWdhdGl2ZVZhbHVlID0gbW9kZWw8Ym9vbGVhbiB8IHVuZGVmaW5lZD4oZmFsc2UpO1xuICByZWFkb25seSB2YWx1ZVVwRG93bk51bWJlciA9IGlucHV0PG51bWJlciB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgY2xhc3NJbmNsdWRlID0gaW5wdXQ8c3RyaW5nLCBzdHJpbmc+KCcgdy1mdWxsICcsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlIHx8ICcgdy1mdWxsICcgfSk7XG4gIHJlYWRvbmx5IG1heExlbmd0aCA9IG1vZGVsPG51bWJlciB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgcmVhZG9ubHkgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSk7XG4gIHJlYWRvbmx5IGRpc2FibGUgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSk7XG4gIHJlYWRvbmx5IG5vQm9yZGVyID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgYmFja2dyb3VuZE5vbmUgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSk7XG4gIHJlYWRvbmx5IGJvcmRlckVycm9yID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSB1c2VDb2xvck1vZGVFeGlzdCA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlKTtcbiAgcmVhZG9ubHkgcGxhY2Vob2xkZXIgPSBpbnB1dDxzdHJpbmcsIHN0cmluZz4oJyAnLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSB8fCAnICcgfSk7XG4gIHJlYWRvbmx5IGtlZXBQbGFjZWhvbGRlck9ubHkgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSk7XG4gIHJlYWRvbmx5IHZhbHVlID0gbW9kZWw8c3RyaW5nIHwgbnVtYmVyPignJyk7XG4gIHJlYWRvbmx5IGF1dG9SZW1vdmVFbW9qaSA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlKTtcbiAgcmVhZG9ubHkgZGVmYXVsdEhlaWdodCA9IGlucHV0PG51bWJlciwgbnVtYmVyIHwgdW5kZWZpbmVkPigzMiwgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgfHwgMzIgfSk7XG4gIHJlYWRvbmx5IG1pbkhlaWdodFRleHRBcmVhID0gaW5wdXQ8bnVtYmVyIHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSBtYXhIZWlnaHRUZXh0QXJlYSA9IGlucHV0PG51bWJlciwgbnVtYmVyIHwgdW5kZWZpbmVkPih0aGlzLkRFRkFVTFRfTUFYX0hFSUdIVF9URVhUX0FSRUEsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlIHx8IHRoaXMuREVGQVVMVF9NQVhfSEVJR0hUX1RFWFRfQVJFQSB9KTtcbiAgcmVhZG9ubHkgZm9jdXNUaW1lT3V0ID0gaW5wdXQ8bnVtYmVyLCBudW1iZXIgfCB1bmRlZmluZWQ+KDYwMCwgeyB0cmFuc2Zvcm06IHZhbHVlID0+IHZhbHVlID8/IDYwMCB9KTtcbiAgcmVhZG9ubHkgYmx1clRpbWVPdXQgPSBpbnB1dDxudW1iZXIsIG51bWJlciB8IHVuZGVmaW5lZD4oMzIsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlIHx8IDMyIH0pO1xuICByZWFkb25seSB6SW5kZXhQb3BvdmVyQ29udGVudCA9IGlucHV0PG51bWJlciwgbnVtYmVyIHwgdW5kZWZpbmVkPigxMCwgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgfHwgMTAgfSk7XG4gIHJlYWRvbmx5IGNsYXNzQ29udGFpbmVySW5wdXQgPSBpbnB1dDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4oJ3ctZnVsbCcsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlIHx8ICd3LWZ1bGwnIH0pO1xuICByZWFkb25seSBzaG93Q291bnQgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBpZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudCA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IHJlc2l6ZSA9IGlucHV0PCdhdXRvJyB8ICdub25lJyB8IHVuZGVmaW5lZCwgJ2F1dG8nIHwgJ25vbmUnIHwgdW5kZWZpbmVkPignYXV0bycsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlIHx8ICdhdXRvJyB9KTtcbiAgcmVhZG9ubHkgdGVtcGxhdGVMZWZ0Qm90dG9tSW5wdXQgPSBpbnB1dDxUZW1wbGF0ZVJlZjxUWVBFX1RFTVBMQVRFX1JFRj4+KCk7XG4gIHJlYWRvbmx5IHRlbXBsYXRlUmlnaHRCb3R0b21JbnB1dCA9IGlucHV0PFRlbXBsYXRlUmVmPFRZUEVfVEVNUExBVEVfUkVGPj4oKTtcbiAgcmVhZG9ubHkgY2xhc3NDb250YWluZXJCb3R0b21JbnB1dCA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZCwgc3RyaW5nIHwgdW5kZWZpbmVkPignICcsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlIHx8ICcgJyB9KTtcbiAgcmVhZG9ubHkgaWdub3JlV2lkdGhJbnB1dDEwMCA9IGlucHV0PGJvb2xlYW4+KCk7XG5cbiAgcmVhZG9ubHkgaWNvbkxlZnRDbGFzcyA9IGlucHV0PHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPignJywgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgfHwgJycgfSk7XG4gIHJlYWRvbmx5IHBvcG92ZXJDb250ZW50SWNvbkxlZnQgPSBpbnB1dDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4oJycsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlIHx8ICcnIH0pO1xuICByZWFkb25seSBpY29uUmlnaHRDbGFzcyA9IGlucHV0PHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPignJywgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgfHwgJycgfSk7XG4gIHJlYWRvbmx5IHBvcG92ZXJDb250ZW50SWNvblJpZ2h0ID0gaW5wdXQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+KCcnLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSB8fCAnJyB9KTtcbiAgcmVhZG9ubHkgcmVzZXRBdXRvQ29tcGxldGVQYXNzd29yZCA9IGlucHV0PGJvb2xlYW4sIGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlLCB7IHRyYW5zZm9ybTogdmFsdWUgPT4gdmFsdWUgPz8gZmFsc2UgfSk7XG4gIHJlYWRvbmx5IGFjY2VwdE9ubHlDbGlja0ljb24gPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSk7XG4gIHJlYWRvbmx5IHNldEljb25SaWdodENvbG9yU2FtZUNvbG9yRGlzYWJsZVJlYWRPbmx5ID0gaW5wdXQ8Ym9vbGVhbiB8IHVuZGVmaW5lZD4oZmFsc2UpO1xuICByZWFkb25seSBvbmx5QWNjZXB0TmVnYXRpdmVWYWx1ZSA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlKTtcbiAgcmVhZG9ubHkgbWF4TGVuZ3RoTnVtYmVyQ291bnQgPSBtb2RlbDxudW1iZXIgfCB1bmRlZmluZWQ+KCk7XG4gIHJlYWRvbmx5IGZvY3VzSW5wdXQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cbiAgLyogT1VUUFVUICovXG4gIHJlYWRvbmx5IG91dEhlaWdodEFyZWFDaGFuZ2UgPSBvdXRwdXQ8eyBpc0NoYW5nZTogYm9vbGVhbiwgaGVpZ2h0OiBudW1iZXIgfT4oKTtcbiAgcmVhZG9ubHkgb3V0Q2hhbmdlID0gb3V0cHV0PGFueT4oKTtcbiAgcmVhZG9ubHkgb3V0Rm9jdXNBbmRCbHVyRXZlbnQgPSBvdXRwdXQ8SUZvY3VzQW5kQmx1ckV2ZW50PigpO1xuICByZWFkb25seSBvdXRFbnRlckV2ZW50ID0gb3V0cHV0PElFdmVudD4oKTtcbiAgcmVhZG9ubHkgb3V0SW5wdXRFdmVudCA9IG91dHB1dDxJRXZlbnQ+KCk7Ly8gZW1pdCBwdXJlIGV2ZW50IGlucHV0XG4gIHJlYWRvbmx5IG91dEljb25MZWZ0ID0gb3V0cHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgb3V0SWNvblJpZ2h0ID0gb3V0cHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgb3V0RnVuY3Rpb25zQ29udHJvbCA9IG91dHB1dDxJSW5wdXRGdW5jdGlvbkNvbnRyb2xFdmVudD4oKTtcbiAgcmVhZG9ubHkgb3V0RmlsZXNEcm9wID0gb3V0cHV0PEFycmF5PEZpbGU+PigpO1xuICByZWFkb25seSBvdXRGaWxlRHJvcCA9IG91dHB1dDxGaWxlPigpO1xuICByZWFkb25seSBvdXRDaGFuZ2VWYWx1ZUJ5QnV0dG9uVXBEb3duID0gb3V0cHV0PHZvaWQ+KCk7XG5cbiAgLyogVklFVyBDSElMRCAqL1xuICBwcm90ZWN0ZWQgaW5wdXRSZWYgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ2lucHV0UmVmJyk7XG4gIHByb3RlY3RlZCB0ZXh0Q291bnRSZWYgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ3RleHRDb3VudFJlZicpO1xuICBwcm90ZWN0ZWQgZWxlbWVudFJpZ2h0UmVmID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCdlbGVtZW50UmlnaHRSZWYnKTtcblxuICAvKiBJTkpFQ1QgKi9cbiAgcHJpdmF0ZSByZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpO1xuICBwcml2YXRlIGNvbmZpZ1Byb2plY3RTZXJ2aWNlID0gaW5qZWN0KExpYnNVaUNvbmZpZ1Byb2plY3RTZXJ2aWNlKTtcbiAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuICBwcml2YXRlIHNhbml0aXplciA9IGluamVjdChEb21TYW5pdGl6ZXIpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5vbmx5QWNjZXB0TmVnYXRpdmVWYWx1ZSgpKSB7XG4gICAgICAgIHRoaXMuYWNjZXB0TmVnYXRpdmVWYWx1ZS5zZXQodHJ1ZSk7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuRWxlbWVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmRhdGFUeXBlKCkgPT09ICdzdHJpbmcnKSB7XG5cbiAgICAgICAgaWYgKHRoaXMuRWxlbWVudC52YWx1ZSAhPT0gdGhpcy52YWx1ZSgpKSB7XG4gICAgICAgICAgdGhpcy5pbml0KCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZU1heExlbmd0aE1pbk1heFZhbHVlQnlEYXRhVHlwZSgpO1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnBhcnNlVmFsdWVCeURhdGFUeXBlKHRoaXMuRWxlbWVudC52YWx1ZSk7XG5cbiAgICAgIGlmICgodGhpcy5FbGVtZW50LnZhbHVlICE9PSAnJyAmJiB2YWx1ZSA9PT0gdGhpcy52YWx1ZSgpKSB8fCAodGhpcy5FbGVtZW50LnZhbHVlID09PSAnJyAmJiB0aGlzLmVtaXRFbXB0eUluRGF0YVR5cGVOdW1iZXIoKSAmJiB0aGlzLnZhbHVlKCkgPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5pbml0KCk7XG4gICAgfSwgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9KTtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgdW50cmFja2VkKCgpID0+IHRoaXMuYWZ0ZXJWaWV3SW5pdCgpKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaHRtbElmcmFtZUFyZWEuc2V0KHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKGluZGV4SW5wdXRIdG1sKHRoaXMubm9Cb3JkZXIoKSA/ICcnIDogYCR7dGhpcy5jb25maWdQcm9qZWN0U2VydmljZS5jb2xvclN0ZXBDb250cmFzdEZyb21PcmlnaW4oMjApPy5saWdodH1gKSkpO1xuICB9XG5cbiAgYWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAoIXRoaXMuRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm91dEhlaWdodEFyZWFDaGFuZ2UuZW1pdCh7IGlzQ2hhbmdlOiBmYWxzZSwgaGVpZ2h0OiB0aGlzLkVsZW1lbnQ/LnNjcm9sbEhlaWdodCB9KTtcbiAgICB0aGlzLm91dEZ1bmN0aW9uc0NvbnRyb2wuZW1pdCh7XG4gICAgICBmb2N1czogdGhpcy5mb2N1cy5iaW5kKHRoaXMpLFxuICAgICAgYmx1cjogdGhpcy5ibHVyLmJpbmQodGhpcyksXG4gICAgICBpbnNlcnRDb250ZW50OiB0aGlzLmFkZERhdGFUb1NlbGVjdGlvbklucHV0LmJpbmQodGhpcyksXG4gICAgICByZXNldFZhbHVlOiB0aGlzLnJlc2V0VmFsdWUuYmluZCh0aGlzKSxcbiAgICAgIGdldEVsZW1lbnRWYWx1ZTogdGhpcy5nZXRFbGVtZW50VmFsdWUuYmluZCh0aGlzKSxcbiAgICAgIGNoZWNrQW5kRGlzYWJsZVVwRG93bkJ1dHRvbjogdGhpcy5jaGVja0FuZERpc2FibGVVcERvd25CdXR0b24uYmluZCh0aGlzKVxuICAgIH0pO1xuICAgIHRoaXMuaW5pdCgpO1xuXG4gICAgdGhpcy5pbml0RXZlbnQoJ2ZvY3VzJywgdGhpcy5pZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudCgpKS5zdWJzY3JpYmUoKGU6IElFdmVudCkgPT4gdGhpcy5vdXRGb2N1c0FuZEJsdXJFdmVudC5lbWl0KHsgbmFtZTogJ2ZvY3VzJywgZXZlbnQ6IGUgfSkpO1xuICAgIHRoaXMuaW5pdEV2ZW50KCdibHVyJywgdGhpcy5pZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudCgpKS5zdWJzY3JpYmUoKGU6IElFdmVudCkgPT4gdGhpcy5vdXRGb2N1c0FuZEJsdXJFdmVudC5lbWl0KHsgbmFtZTogJ2JsdXInLCBldmVudDogZSB9KSk7XG4gICAgY29uc3QgbW91c2VEb3duRXZlbnQgPSB0aGlzLmluaXRFdmVudCgnbW91c2Vkb3duJywgdGhpcy5pZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudCgpKS5waXBlKHRha2UoMSkpO1xuICAgIGNvbnN0IGtleURvd25FdmVudCA9IHRoaXMuaW5pdEV2ZW50KCdrZXlkb3duJywgdGhpcy5pZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudCgpKTtcbiAgICBjb25zdCBpbnB1dEV2ZW50ID0gdGhpcy5pbml0RXZlbnQoJ2lucHV0JywgdGhpcy5pZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudCgpKTtcbiAgICBjb25zdCBjdXRFdmVudCA9IHRoaXMuaW5pdEV2ZW50KCdjdXQnLCB0aGlzLmlnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50KCkpO1xuICAgIGNvbnN0IHBhc3RlRXZlbnQgPSB0aGlzLmluaXRFdmVudCgncGFzdGUnLCB0aGlzLmlnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50KCkpO1xuICAgIGNvbnN0IGtleXVwRXZlbnQgPSB0aGlzLmluaXRFdmVudCgna2V5dXAnLCB0aGlzLmlnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50KCkpO1xuXG4gICAgdGhpcy5pbml0RXZlbnQoJ2NsaWNrJywgdGhpcy5pZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudCgpID8/IHRydWUpLnN1YnNjcmliZSgpO1xuICAgIHRoaXMuaW5pdEV2ZW50KCdkcmFnb3ZlcicsIHRoaXMuaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnQoKSkucGlwZSh0YXAoKGV2ZW50OiBJRXZlbnQpID0+IHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gJ2NvcHknO1xuICAgIH0pKS5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMuaW5pdEV2ZW50KCdkcm9wJywgdGhpcy5pZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudCgpKS5zdWJzY3JpYmUodGhpcy5jaGVja0FuZEVtaXRGaWxlcy5iaW5kKHRoaXMpKTtcbiAgICBwYXN0ZUV2ZW50LnN1YnNjcmliZSh0aGlzLmNoZWNrQW5kRW1pdEZpbGVzLmJpbmQodGhpcykpO1xuXG4gICAgdGhpcy5jb21iaW5lT2JzZXJ2YWJsZShtb3VzZURvd25FdmVudCwgcGFzdGVFdmVudCk7XG4gICAgdGhpcy5jb21iaW5lT2JzZXJ2YWJsZShtb3VzZURvd25FdmVudCwgY3V0RXZlbnQpO1xuICAgIGtleURvd25FdmVudC5waXBlKFxuICAgICAgdGFrZSgxKSxcbiAgICAgIHRhcCgoZTogSUV2ZW50KSA9PiB0aGlzLmNoZWNrVHlwZU51bWJlcihlLCAna2V5JykpLFxuICAgICAgbWVyZ2VNYXAoKCkgPT4gaW5wdXRFdmVudCksXG4gICAgICB0YXAoKGU6IElFdmVudCkgPT4gdGhpcy5jaGVja1R5cGVOdW1iZXIoZSwgJ2RhdGEnKSksXG4gICAgKS5zdWJzY3JpYmUoKGU6IElFdmVudCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZGF0YVR5cGUoKSA9PT0gJ3N0cmluZycgJiYgdGhpcy5tYXhMZW5ndGgoKSAmJiAoZS5pbnB1dFR5cGUgPT09ICdpbnNlcnRDb21wb3NpdGlvblRleHQnIHx8IGUuaW5wdXRUeXBlID09PSAnaW5zZXJ0VGV4dCcpICYmIGUudGFyZ2V0LnZhbHVlPy5sZW5ndGggPiAodGhpcy5tYXhMZW5ndGgoKSB8fCAwKSkge1xuICAgICAgICBlLnRhcmdldC52YWx1ZSA9IGUudGFyZ2V0LnZhbHVlLnNsaWNlKDAsIHRoaXMubWF4TGVuZ3RoKCkpO1xuICAgICAgfVxuICAgICAgdGhpcy5wcm9jZXNzRXZlbnRBbmRFbWl0VmFsdWUoZSk7XG4gICAgfSk7XG5cbiAgICBrZXl1cEV2ZW50LnBpcGUoXG4gICAgICBmaWx0ZXIoKGV2ZW50OiBJRXZlbnQpID0+IGV2ZW50LmtleUNvZGUgPT09IFV0aWxzS2V5Q29kZUNvbnN0YW50LkVOVEVSKSxcbiAgICAgIGZpbHRlcigoZXZlbnQ6IElFdmVudCkgPT4gIXRoaXMudGV4dEFyZWFFbnRlck5vdE5ld0xpbmUoKSB8fCAodGhpcy50ZXh0QXJlYUVudGVyTm90TmV3TGluZSgpICYmICFldmVudC5zaGlmdEtleSkpKS5zdWJzY3JpYmUoKGV2ZW50OiBJRXZlbnQpID0+IHRoaXMub3V0RW50ZXJFdmVudC5lbWl0KGV2ZW50KSk7XG5cbiAgICBpZiAodGhpcy5kYXRhVHlwZSgpID09PSAnc3RyaW5nJyAmJiAodGhpcy50YWdJbnB1dCgpICE9PSAnaW5wdXQnIHx8ICh0aGlzLnRhZ0lucHV0KCkgPT09ICdpbnB1dCcgJiYgdGhpcy50YWJJbnNlcnRDb250ZW50VGFnSW5wdXQoKSkpKSB7XG4gICAgICBrZXlEb3duRXZlbnQucGlwZShcbiAgICAgICAgZmlsdGVyKChldmVudDogSUV2ZW50KSA9PiBldmVudC5rZXlDb2RlID09PSBVdGlsc0tleUNvZGVDb25zdGFudC5UQUIpLFxuICAgICAgICB0YXAoKGV2ZW50OiBJRXZlbnQpID0+IGV2ZW50LnByZXZlbnREZWZhdWx0KCkpLFxuICAgICAgICBmaWx0ZXIoKGV2ZW50OiBJRXZlbnQpID0+ICFldmVudC50YXJnZXQudmFsdWUgfHwgIXRoaXMubWF4TGVuZ3RoKCkgfHwgZXZlbnQudGFyZ2V0LnZhbHVlLmxlbmd0aCA8ICh0aGlzLm1heExlbmd0aCgpIHx8IDI1KSksXG4gICAgICAgIHRhcCgoZXZlbnQ6IElFdmVudCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLnJlYWRvbmx5KCkgfHwgdGhpcy5kaXNhYmxlKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5pbnNldFZhbHVlVG9TZWxlY3Rpb25TdGFydCgnXFx0JywgZXZlbnQpO1xuICAgICAgICB9KVxuICAgICAgKS5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50ZXh0QXJlYUVudGVyTm90TmV3TGluZSgpKSB7XG4gICAgICBrZXlEb3duRXZlbnQucGlwZShcbiAgICAgICAgZmlsdGVyKChldmVudDogSUV2ZW50KSA9PiBldmVudC5rZXlDb2RlID09PSBVdGlsc0tleUNvZGVDb25zdGFudC5FTlRFUiAmJiAhZXZlbnQuc2hpZnRLZXkpLFxuICAgICAgICB0YXAoKGU6IElFdmVudCkgPT4gZS5wcmV2ZW50RGVmYXVsdCgpKVxuICAgICAgKS5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgfVxuXG4gIC8qIEZVTkNUSU9OUyovXG4gIHByaXZhdGUgdXBkYXRlTWF4TGVuZ3RoTWluTWF4VmFsdWVCeURhdGFUeXBlKCkge1xuICAgIGlmICh0aGlzLmRhdGFUeXBlKCkgPT09ICdpbnQnIHx8IHRoaXMuZGF0YVR5cGUoKSA9PT0gJ2Zsb2F0Jykge1xuICAgICAgdGhpcy5tYXhMZW5ndGgudXBkYXRlKHZhbHVlID0+IHtcbiAgICAgICAgcmV0dXJuICF2YWx1ZSB8fCB2YWx1ZSA+IDIxID8gMjEgOiB2YWx1ZTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5taW5WYWx1ZU51bWJlci51cGRhdGUodmFsdWUgPT4gdmFsdWUgfHwgTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIpO1xuICAgICAgdGhpcy5tYXhWYWx1ZU51bWJlci51cGRhdGUodmFsdWUgPT4gdmFsdWUgfHwgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpO1xuICAgIH1cbiAgICBpZiAodGhpcy5kYXRhVHlwZSgpID09PSAnYmlnaW50Jykge1xuICAgICAgdGhpcy5tYXhMZW5ndGgudXBkYXRlKHZhbHVlID0+ICF2YWx1ZSB8fCB2YWx1ZSA+IDI1ID8gMjUgOiB2YWx1ZSk7XG4gICAgICB0aGlzLmZpeGVkRmxvYXQudXBkYXRlKHZhbHVlID0+IHZhbHVlID8/IDQpO1xuICAgICAgdGhpcy5tYXhMZW5ndGhOdW1iZXJDb3VudC51cGRhdGUodmFsdWUgPT4gdmFsdWUgPz8gMTkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0RWxlbWVudFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLkVsZW1lbnQ/LnZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0FuZEVtaXRGaWxlcyhldmVudDogSUV2ZW50KSB7XG4gICAgY29uc3QgZmlsZXMgPSBldmVudC5kYXRhVHJhbnNmZXI/LmZpbGVzIHx8IGV2ZW50LmNsaXBib2FyZERhdGE/LmZpbGVzO1xuICAgIGNvbnN0IHRleHQgPSAoZXZlbnQuY2xpcGJvYXJkRGF0YSB8fCAod2luZG93IGFzIGFueSkuY2xpcGJvYXJkRGF0YSk/LmdldERhdGEoJ3RleHQnKTtcblxuICAgIHRoaXMuZGF0YVRleHRQYXN0ZS5zZXQodGV4dCk7XG4gICAgaWYgKCFmaWxlcyB8fCAhZmlsZXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGV4dCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgY29uc3QgZmlsZUxpc3QgPSBbXTtcblxuICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChmaWxlKSA9PT0gJ1tvYmplY3QgRmlsZV0nKSB7XG4gICAgICAgIHRoaXMub3V0RmlsZURyb3AuZW1pdChmaWxlKTtcbiAgICAgICAgZmlsZUxpc3QucHVzaChmaWxlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5vdXRGaWxlc0Ryb3AuZW1pdChmaWxlTGlzdCk7XG5cbiAgfVxuXG4gIHByaXZhdGUgaW5zZXRWYWx1ZVRvU2VsZWN0aW9uU3RhcnQodGV4dDogc3RyaW5nLCBldmVudDogSUV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLkVsZW1lbnQuc2V0UmFuZ2VUZXh0KHRleHQsIHRoaXMuRWxlbWVudC5zZWxlY3Rpb25TdGFydCwgdGhpcy5FbGVtZW50LnNlbGVjdGlvblN0YXJ0LCAnZW5kJyk7XG4gICAgdGhpcy5wcm9jZXNzRXZlbnRBbmRFbWl0VmFsdWUoZXZlbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5pbnB1dElmcmFtZVJlZigpPy5uYXRpdmVFbGVtZW50IHx8IHRoaXMuaW5wdXRSZWYoKT8ubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2hhbmdlVmFsdWUoZGF0YTogSVNvcnQpIHtcbiAgICBkYXRhLnJlc2V0KCk7XG4gICAgaWYgKHRoaXMuZGlzYWJsZSgpIHx8IHRoaXMucmVhZG9ubHkoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBvcGVyYXRvciA9IGRhdGEubW9kZSA9PT0gJ2FzYycgPyAxIDogLTE7XG4gICAgbGV0IHZhbHVlID0gK3RoaXMudmFsdWUoKSB8fCAwO1xuICAgIGNvbnN0IHNlcGFyYXRvciA9IFV0aWxzQ2FjaGUuZ2V0TGFuZygpID09PSBVdGlsc0xhbmd1YWdlQ29uc3RhbnRzLlZJID8gJy4nIDogJywnO1xuICAgIGNvbnN0IHNwbGl0VmFsdWUgPSAodGhpcy52YWx1ZSgpIHx8IHRoaXMubWluVmFsdWVOdW1iZXIoKSB8fCAwKS50b1N0cmluZygpLnNwbGl0KHNlcGFyYXRvcik7XG4gICAgY29uc3QgZGF0YUJlaGluZFNlcGFyYXRvciA9IHNwbGl0VmFsdWU/LlsxXTtcblxuICAgIGlmICh0aGlzLmRhdGFUeXBlKCkgPT09ICdiaWdpbnQnKSB7XG4gICAgICB2YWx1ZSA9ICsoc3BsaXRWYWx1ZT8uWzBdIHx8IDApO1xuICAgIH1cbiAgICB2YWx1ZSA9IHZhbHVlICsgKHRoaXMudmFsdWVVcERvd25OdW1iZXIoKSA/PyAxKSAqIG9wZXJhdG9yO1xuICAgIGlmICghdGhpcy5hY2NlcHROZWdhdGl2ZVZhbHVlKCkgJiYgdmFsdWUgPCAwKSB7XG4gICAgICB2YWx1ZSA9IDA7XG4gICAgfVxuICAgIGNvbnN0IGRhdGFFbWl0ID0gdGhpcy5kYXRhVHlwZSgpID09PSAnYmlnaW50JyA/IGAke3ZhbHVlfSR7ZGF0YUJlaGluZFNlcGFyYXRvciA/IHNlcGFyYXRvciA6ICcnfSR7ZGF0YUJlaGluZFNlcGFyYXRvcn1gIDogdmFsdWU7XG4gICAgdGhpcy52YWx1ZS5zZXQoZGF0YUVtaXQpXG4gICAgdGhpcy5vdXRDaGFuZ2UuZW1pdChkYXRhRW1pdCk7XG4gICAgdGhpcy5vdXRDaGFuZ2VWYWx1ZUJ5QnV0dG9uVXBEb3duLmVtaXQoKTtcbiAgICB0aGlzLmNoZWNrQW5kRGlzYWJsZVVwRG93bkJ1dHRvbih2YWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckV2ZW50SWNvbkxlZnQoZTogRXZlbnQsIGV2ZW50TmFtZTogc3RyaW5nKSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoKHRoaXMuZGlzYWJsZSgpIHx8IHRoaXMucmVhZG9ubHkoKSkgJiYgIXRoaXMuYWNjZXB0T25seUNsaWNrSWNvbigpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMub3V0SWNvbkxlZnQuZW1pdChldmVudE5hbWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJFdmVudEljb25SaWdodChlOiBFdmVudCwgZXZlbnROYW1lOiBzdHJpbmcpIHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmICgodGhpcy5kaXNhYmxlKCkgfHwgdGhpcy5yZWFkb25seSgpKSAmJiAhdGhpcy5hY2NlcHRPbmx5Q2xpY2tJY29uKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5vdXRJY29uUmlnaHQuZW1pdChldmVudE5hbWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjaGVja0FuZERpc2FibGVVcERvd25CdXR0b24odmFsdWU6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmRhdGFUeXBlKCkgIT09ICdpbnQnICYmIHRoaXMuZGF0YVR5cGUoKSAhPT0gJ2Zsb2F0JyAmJiB0aGlzLmRhdGFUeXBlKCkgIT09ICdiaWdpbnQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZGlzYWJsZUFzYy5zZXQoZmFsc2UpO1xuICAgIHRoaXMuZGlzYWJsZURlc2Muc2V0KGZhbHNlKTtcbiAgICB0aGlzLm1pblZhbHVlTnVtYmVyLnVwZGF0ZSh2YWx1ZSA9PiB2YWx1ZSA/PyBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUik7XG4gICAgdGhpcy5tYXhWYWx1ZU51bWJlci51cGRhdGUodmFsdWUgPT4gdmFsdWUgPz8gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpO1xuICAgIHZhbHVlID0gdmFsdWUgPz8gMDtcblxuICAgIGlmICghaXNOaWwodGhpcy5tYXhWYWx1ZU51bWJlcigpKSAmJiB2YWx1ZSA+PSAodGhpcy5tYXhWYWx1ZU51bWJlcigpID8/IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSkge1xuICAgICAgdGhpcy5kaXNhYmxlQXNjLnNldCh0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAoIWlzTmlsKHRoaXMubWluVmFsdWVOdW1iZXIoKSkgJiYgdmFsdWUgPD0gKHRoaXMubWluVmFsdWVOdW1iZXIoKSB8fCAwKSkge1xuICAgICAgdGhpcy5kaXNhYmxlRGVzYy5zZXQodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGluaXRFdmVudChldmVudE5hbWU6IHN0cmluZywgaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnQ/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxJRXZlbnQ+IHtcbiAgICByZXR1cm4gZnJvbUV2ZW50PElFdmVudD4odGhpcy5FbGVtZW50LCBldmVudE5hbWUpLnBpcGUoXG4gICAgICB0YXAoKGU6IElFdmVudCkgPT4ge1xuICAgICAgICBpZiAoIWlnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50KSB7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm91dElucHV0RXZlbnQuZW1pdChlKTtcbiAgICAgIH0pLFxuICAgICAgdGFrZVVudGlsKHRoaXMub25EZXN0cm95KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlICYmIHRoaXMuZGF0YVR5cGUoKSA9PT0gJ2JpZ2ludCcpIHtcbiAgICAgIGNvbnN0IHNlcGFyYXRvciA9IChVdGlsc0NhY2hlLmdldExhbmcoKSA9PT0gVXRpbHNMYW5ndWFnZUNvbnN0YW50cy5WSSkgPyAnLicgOiAnLCc7XG4gICAgICBsZXQgW2ludCwgZGVjaW1hbF0gPSB2YWx1ZS5zcGxpdChzZXBhcmF0b3IpO1xuICAgICAgY29uc3QgZGVjaW1hbFNwbGl0ID0gZGVjaW1hbCA/IGRlY2ltYWwuc3BsaXQoJycpIDogW107XG4gICAgICBjb25zdCBkZWNpbWFsRXZlcnlaZXJvID0gZGVjaW1hbFNwbGl0LmV2ZXJ5KGl0ZW0gPT4gaXRlbSA9PT0gJzAnKTtcblxuICAgICAgaWYgKGludCA9PT0gJy0wJyAmJiAoIWRlY2ltYWwgfHwgZGVjaW1hbEV2ZXJ5WmVybykpIHtcbiAgICAgICAgaW50ID0gJzAnO1xuICAgICAgfVxuICAgICAgaWYgKCFkZWNpbWFsIHx8IGRlY2ltYWxFdmVyeVplcm8pIHtcbiAgICAgICAgZGVjaW1hbCA9ICcwJztcbiAgICAgIH1cbiAgICAgIGlmIChkZWNpbWFsU3BsaXQuc29tZShpdGVtID0+IGl0ZW0gIT09ICcwJykpIHtcbiAgICAgICAgY29uc3QgZGVjaW1hbFJldmVyc2UgPSBkZWNpbWFsU3BsaXQucmV2ZXJzZSgpLmpvaW4oJycpO1xuXG4gICAgICAgIGRlY2ltYWwgPSBkZWNpbWFsUmV2ZXJzZS5yZXBsYWNlKC8oXlswXSspLywgJycpLnNwbGl0KCcnKS5yZXZlcnNlKCkuam9pbignJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBgJHtpbnR9JHtzZXBhcmF0b3J9JHtkZWNpbWFsfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0KCkge1xuICAgIGlmICghdGhpcy5tYXhMZW5ndGgoKSkge1xuICAgICAgdGhpcy51cGRhdGVNYXhMZW5ndGhNaW5NYXhWYWx1ZUJ5RGF0YVR5cGUoKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLkVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGVsZW1lbnRWYWx1ZSA9IHRoaXMuY29udmVydFZhbHVlKGAke3RoaXMudmFsdWUoKSA/PyAnJ31gKTtcblxuICAgIGlmICh0aGlzLmRhdGFUeXBlKCkgIT09ICdzdHJpbmcnKSB7XG4gICAgICBlbGVtZW50VmFsdWUgPSBlbGVtZW50VmFsdWUucmVwbGFjZSgobmV3IFJlZ0V4cChgW14wLTkuLCR7dGhpcy5hY2NlcHROZWdhdGl2ZVZhbHVlKCkgPyAnLScgOiAnJ31dYCwgJ2cnKSksICcnKTtcbiAgICAgIGlmIChVdGlsc0NhY2hlLmdldExhbmcoKSA9PT0gVXRpbHNMYW5ndWFnZUNvbnN0YW50cy5FTikge1xuICAgICAgICBlbGVtZW50VmFsdWUgPSBlbGVtZW50VmFsdWUucmVwbGFjZSgvWyxdLywgJycpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLkVsZW1lbnQudmFsdWUgPSBlbGVtZW50VmFsdWU7XG5cbiAgICBjb25zdCBldmVudEZha2U6IElFdmVudEN1c3RvbSA9IHsgcHJldmVudERlZmF1bHQ6ICgpID0+IHsgcmV0dXJuIH0sIHRhcmdldDogdGhpcy5FbGVtZW50LCBkYXRhOiBlbGVtZW50VmFsdWUsIGZha2VFdmVudDogdHJ1ZSB9O1xuXG4gICAgdGhpcy5jaGVja1R5cGVOdW1iZXIoZXZlbnRGYWtlLCAnZGF0YScpO1xuICAgIHRoaXMucHJvY2Vzc0V2ZW50QW5kRW1pdFZhbHVlKGV2ZW50RmFrZSk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NFdmVudEFuZEVtaXRWYWx1ZShlOiBJRXZlbnQgfCBJRXZlbnRDdXN0b20pOiB2b2lkIHtcbiAgICBjb25zdCB2YWx1ZTogYW55ID0gdGhpcy5wYXJzZVZhbHVlQnlEYXRhVHlwZShlLnRhcmdldC52YWx1ZSk7XG5cbiAgICBpZiAodGhpcy5kYXRhVHlwZSgpICE9PSAnc3RyaW5nJyAmJiAhdGhpcy5pZ25vcmVCbG9ja0lucHV0TWF4VmFsdWUoKSAmJiAhaXNOaWwodGhpcy5tYXhWYWx1ZU51bWJlcigpKSAmJiB2YWx1ZSA+ICh0aGlzLm1heFZhbHVlTnVtYmVyKCkgfHwgMCkgJiYgdGhpcy52YWx1ZSgpIDwgdmFsdWUpIHtcbiAgICAgIGNvbnN0IHZhbHVlRGlzcGxheSA9IHZpZXdEYXRhTnVtYmVyQnlMYW5ndWFnZShgJHt0aGlzLnZhbHVlKCl9YC5yZXBsYWNlKC9bLl0vZywgJywnKSwgdGhpcy5hY2NlcHROZWdhdGl2ZVZhbHVlKCksICh0aGlzLmZpeGVkRmxvYXQoKSA/PyAxNCkpO1xuXG4gICAgICBlLnRhcmdldC52YWx1ZSA9IGAke3RoaXMuZ2V0Q2hlY2taZXJvKCt2YWx1ZURpc3BsYXksIGUudGFyZ2V0LnZhbHVlKX0ke3ZhbHVlRGlzcGxheX1gO1xuXG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRXZlbnRBbmRFbWl0VmFsdWUoZSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRhdGFUeXBlKCkgIT09ICdzdHJpbmcnICYmIGlzTmlsKHZhbHVlKSkge1xuICAgICAgZS50YXJnZXQudmFsdWUgPSAwO1xuXG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRXZlbnRBbmRFbWl0VmFsdWUoZSk7XG4gICAgfVxuXG4gICAgaWYgKGUuZmFrZUV2ZW50ICYmIChgJHt0aGlzLnZhbHVlKCkgPz8gJyd9YCA9PT0gYCR7dmFsdWV9YCB8fCAodGhpcy5lbWl0RW1wdHlJbkRhdGFUeXBlTnVtYmVyKCkgJiYgZS50YXJnZXQudmFsdWUudHJpbSgpID09PSAnJykpKSB7XG4gICAgICB0aGlzLmNoZWNrQW5kRGlzYWJsZVVwRG93bkJ1dHRvbih0aGlzLmRhdGFUeXBlKCkgPT09ICdiaWdpbnQnID8gdmFsdWUgOiArdmFsdWUpO1xuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5jYWxjdWxhdG9ySGVpZ2h0VGV4dEFyZWEoZSk7XG4gICAgICB9LCAyNTApO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudmFsdWUuc2V0KHZhbHVlKTtcbiAgICBpZiAodGhpcy5lbWl0RW1wdHlJbkRhdGFUeXBlTnVtYmVyKCkgJiYgZS50YXJnZXQudmFsdWUudHJpbSgpID09PSAnJykge1xuICAgICAgY29uc3QgZGF0YUVtaXQgPSB0aGlzLmRhdGFUeXBlKCkgPT09ICdzdHJpbmcnID8gJycgOiB1bmRlZmluZWQ7XG4gICAgICB0aGlzLnZhbHVlLnNldChkYXRhRW1pdCBhcyBhbnkpO1xuICAgIH1cbiAgICB0aGlzLm91dENoYW5nZS5lbWl0KHRoaXMudmFsdWUoKSk7XG4gICAgdGhpcy5jaGVja0FuZERpc2FibGVVcERvd25CdXR0b24odGhpcy5kYXRhVHlwZSgpID09PSAnYmlnaW50JyA/IHZhbHVlIDogK3ZhbHVlKTtcbiAgICB0aGlzLmNhbGN1bGF0b3JIZWlnaHRUZXh0QXJlYShlKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tNYXhMZW5ndGhOdW1iZXJBbmRTZXRWYWx1ZSh2YWx1ZURpc3BsYXk6IHN0cmluZywgZTogSUV2ZW50IHwgSUV2ZW50Q3VzdG9tKTogYm9vbGVhbiB7XG4gICAgaWYgKGlzTmlsKHRoaXMudmFsdWUoKSkgfHwgKCt0aGlzLnZhbHVlKCkgPiAwICYmIHRoaXMucGFyc2VWYWx1ZUJ5RGF0YVR5cGUodmFsdWVEaXNwbGF5KSA8IHRoaXMudmFsdWUoKSkgfHwgKCt0aGlzLnZhbHVlKCkgPCAwICYmIHRoaXMucGFyc2VWYWx1ZUJ5RGF0YVR5cGUodmFsdWVEaXNwbGF5KSA+IHRoaXMudmFsdWUoKSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgdmFsdWVDb21wYXJlID0gZm9ybWF0TnVtYmVyKHZhbHVlRGlzcGxheSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBudW1iZXJzID0gdmFsdWVDb21wYXJlLnNwbGl0KCcuJyk7XG4gICAgbGV0IGxlbmd0aFZhbHVlQ29tcGFyZSA9IDA7XG4gICAgbGV0IG1heExlbmd0aCA9ICh0aGlzLmFjY2VwdE5lZ2F0aXZlVmFsdWUoKSAmJiB0eXBlb2YgK3RoaXMudmFsdWUoKSA9PT0gJ251bWJlcicgJiYgK3RoaXMudmFsdWUoKSA8IDApID8gKHRoaXMubWF4TGVuZ3RoKCkgfHwgMjEpICsgMSA6ICh0aGlzLm1heExlbmd0aCgpIHx8IDIxKTtcblxuICAgIGlmICh0aGlzLmRhdGFUeXBlKCkgPT09ICdmbG9hdCcpIHtcbiAgICAgIG1heExlbmd0aC0tO1xuICAgIH1cbiAgICBpZiAobnVtYmVycyAmJiBudW1iZXJzWzBdKSB7XG4gICAgICBsZW5ndGhWYWx1ZUNvbXBhcmUgPSB2aWV3RGF0YU51bWJlckJ5TGFuZ3VhZ2UoYCR7bnVtYmVyc1swXX1gLnJlcGxhY2UoL1suXS9nLCAnLCcpLCB0aGlzLmFjY2VwdE5lZ2F0aXZlVmFsdWUoKSwgKHRoaXMuZml4ZWRGbG9hdCgpID8/IDE0KSkubGVuZ3RoO1xuICAgIH1cbiAgICBpZiAobnVtYmVycyAmJiBudW1iZXJzWzFdKSB7XG4gICAgICBsZW5ndGhWYWx1ZUNvbXBhcmUgKz0gMSArIG51bWJlcnNbMV0ubGVuZ3RoO1xuICAgIH1cbiAgICBpZiAobWF4TGVuZ3RoICYmIGxlbmd0aFZhbHVlQ29tcGFyZSA+PSBtYXhMZW5ndGgpIHtcbiAgICAgIGNvbnN0IHZhbHVlRGlzcGxheSA9IHZpZXdEYXRhTnVtYmVyQnlMYW5ndWFnZSgobGVuZ3RoVmFsdWVDb21wYXJlID09PSBtYXhMZW5ndGggPyB2YWx1ZUNvbXBhcmUgOiBgJHt0aGlzLnZhbHVlKCl9YCkucmVwbGFjZSgvWy5dL2csICcsJyksIHRoaXMuYWNjZXB0TmVnYXRpdmVWYWx1ZSgpLCAodGhpcy5maXhlZEZsb2F0KCkgPz8gMTQpKTtcblxuICAgICAgZS50YXJnZXQudmFsdWUgPSBgJHt0aGlzLmdldENoZWNrWmVybygrdmFsdWVEaXNwbGF5LCBlLnRhcmdldC52YWx1ZSl9JHt2YWx1ZURpc3BsYXl9YDtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja1R5cGVOdW1iZXIoZTogSUV2ZW50IHwgSUV2ZW50Q3VzdG9tLCBmaWVsZE5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGN1cnJlbnRMYW5nID0gVXRpbHNDYWNoZS5nZXRMYW5nKCk7XG4gICAgY29uc3Qgc2VwYXJhdG9yID0gKGN1cnJlbnRMYW5nID09PSBVdGlsc0xhbmd1YWdlQ29uc3RhbnRzLlZJKSA/ICcuJyA6ICcsJztcbiAgICBjb25zdCBzZXBhcmF0b3JSZXZlcnQgPSAoY3VycmVudExhbmcgPT09IFV0aWxzTGFuZ3VhZ2VDb25zdGFudHMuVkkpID8gJywnIDogJy4nO1xuICAgIGxldCB2YWx1ZVRhcmdldDogSVN0cmluZyA9IGUudGFyZ2V0LnZhbHVlO1xuICAgIGNvbnN0IHNlbGVjdGlvblN0YXJ0ID0gZS50YXJnZXQuc2VsZWN0aW9uU3RhcnQgLSAxO1xuICAgIGNvbnN0IHsgZGF0YSwga2V5Q29kZSB9ID0gZTtcblxuICAgIHRoaXMuY2hhckZpcnN0SXNaZXJvLnNldChmYWxzZSk7XG4gICAgaWYgKHZhbHVlVGFyZ2V0LmNoYXJBdCgwKSA9PT0gJzAnKSB7XG4gICAgICB0aGlzLmNoYXJGaXJzdElzWmVyby5zZXQodHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0YVR5cGUoKSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmICh0aGlzLmF1dG9SZW1vdmVFbW9qaSgpKSB7XG4gICAgICAgIGUudGFyZ2V0LnZhbHVlID0gcmVtb3ZlRW1vamkodmFsdWVUYXJnZXQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICgvWzAtOV0vZy50ZXN0KGRhdGEpICYmIHZhbHVlVGFyZ2V0LmNoYXJBdChzZWxlY3Rpb25TdGFydCArIDEpID09PSAnLScpIHtcbiAgICAgIHZhbHVlVGFyZ2V0ID0gdmFsdWVUYXJnZXQucmVwbGFjZUF0KDAsICcnKSBhcyBJU3RyaW5nO1xuICAgIH1cbiAgICBsZXQgc3RyUmVnZXggPSBgW14wLTkuLCR7dGhpcy5hY2NlcHROZWdhdGl2ZVZhbHVlKCkgPyAnLScgOiAnJ31dYDtcblxuICAgIGlmICgobmV3IFJlZ0V4cChzdHJSZWdleCwgJ2dpJykpLnRlc3QoKGUgYXMgYW55KVtmaWVsZE5hbWVdKSAmJiBrZXlDb2RlICE9PSBVdGlsc0tleUNvZGVDb25zdGFudC5CQUNLU1BBQ0UpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGUudGFyZ2V0LnZhbHVlID0gdmFsdWVUYXJnZXQgPSBlLnRhcmdldC52YWx1ZS5yZXBsYWNlKChuZXcgUmVnRXhwKHN0clJlZ2V4LCAnZ2knKSksICcnKSBhcyBJU3RyaW5nO1xuICAgIH1cbiAgICBpZiAoIWUuZmFrZUV2ZW50KSB7XG4gICAgICBzd2l0Y2ggKGRhdGEpIHtcbiAgICAgICAgY2FzZSBzZXBhcmF0b3I6XG4gICAgICAgICAgdmFsdWVUYXJnZXQgPSB2YWx1ZVRhcmdldC5yZXBsYWNlKChuZXcgUmVnRXhwKGBbJHtzZXBhcmF0b3J9XWAsICdnaScpKSwgJycpIGFzIElTdHJpbmc7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBzZXBhcmF0b3JSZXZlcnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRMYW5nID09PSBVdGlsc0xhbmd1YWdlQ29uc3RhbnRzLlZJICYmIHRoaXMuZGF0YVR5cGUoKSA9PT0gJ2ludCcpIHtcbiAgICAgICAgICAgICAgZS50YXJnZXQudmFsdWUgPSB2YWx1ZVRhcmdldC5yZXBsYWNlKChuZXcgUmVnRXhwKGBbJHtzZXBhcmF0b3JSZXZlcnR9XWAsICdnaScpKSwgJycpIGFzIElTdHJpbmc7XG5cbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZhbHVlVGFyZ2V0ID09PSBzZXBhcmF0b3JSZXZlcnQpIHtcbiAgICAgICAgICAgICAgZS50YXJnZXQudmFsdWUgPSAnJztcblxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodmFsdWVUYXJnZXQgJiYgdmFsdWVUYXJnZXQubGVuZ3RoID09PSAyICYmIHZhbHVlVGFyZ2V0LmNoYXJBdCgwKSA9PT0gJy0nICYmIGRhdGEgJiYgIS9bMC05XS9nLnRlc3QoZGF0YSkpIHtcbiAgICAgICAgICAgICAgZS50YXJnZXQudmFsdWUgPSAnLSc7XG5cbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgb2NjdXJyZW5jZXNCeUNoYXJhY3RlciA9IHZhbHVlVGFyZ2V0Lm9jY3VycmVuY2VzQnlDaGFyYWN0ZXIoc2VwYXJhdG9yUmV2ZXJ0KTtcblxuICAgICAgICAgICAgaWYgKG9jY3VycmVuY2VzQnlDaGFyYWN0ZXIgPiAxKSB7XG4gICAgICAgICAgICAgIHZhbHVlVGFyZ2V0ID0gdmFsdWVUYXJnZXQucmVwbGFjZUF0KGUudGFyZ2V0LnNlbGVjdGlvblN0YXJ0IC0gMSwgJycpIGFzIElTdHJpbmc7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IG1heExlbmd0aCA9IHRoaXMuZGF0YVR5cGUoKSA9PT0gJ2Zsb2F0JyA/ICh0aGlzLm1heExlbmd0aCgpIHx8IDIxKSAtIDEgOiAodGhpcy5tYXhMZW5ndGgoKSB8fCAyMSk7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZVRhcmdldC5pbmRleE9mKCctJykgPj0gMCkge1xuICAgICAgICAgICAgICBtYXhMZW5ndGgrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvY2N1cnJlbmNlc0J5Q2hhcmFjdGVyID09PSAxICYmIHZhbHVlVGFyZ2V0Lmxlbmd0aCA9PT0gbWF4TGVuZ3RoICYmIHZhbHVlVGFyZ2V0LmluZGV4T2Yoc2VwYXJhdG9yUmV2ZXJ0KSA9PT0gdmFsdWVUYXJnZXQubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICB2YWx1ZVRhcmdldCA9IHZhbHVlVGFyZ2V0LnJlcGxhY2VBdChlLnRhcmdldC5zZWxlY3Rpb25TdGFydCAtIDEsICcnKSBhcyBJU3RyaW5nO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLm9ubHlBY2NlcHROZWdhdGl2ZVZhbHVlKCkgJiYgdmFsdWVUYXJnZXQgPT09IGAwJHtzZXBhcmF0b3JSZXZlcnR9YCkge1xuICAgICAgICAgICAgICBlLnRhcmdldC52YWx1ZSA9ICcwJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhbHVlVGFyZ2V0ID0gZm9ybWF0TnVtYmVyKHZhbHVlVGFyZ2V0KSBhcyBJU3RyaW5nO1xuICAgIH1cbiAgICBjb25zdCBpbmRleGVzT2ZEYXNoID0gdmFsdWVUYXJnZXQuaW5kZXhlc09mQ2hhcmFjdGVyPy4oJy0nKSB8fCBbXTtcblxuICAgIGlmIChpbmRleGVzT2ZEYXNoLmxlbmd0aCkge1xuICAgICAgY29uc3QgW2ZpcnN0SW5kZXgsIHNlY29uZEluZGV4XSA9IGluZGV4ZXNPZkRhc2g7XG4gICAgICBjb25zdCBpbmRleFJlcGxhY2UgPSBmaXJzdEluZGV4IHx8IHNlY29uZEluZGV4OyAvLyBmaXJzdEluZGV4PTAgdGjDrCBrbyB4w7NhXG5cbiAgICAgIGlmIChpbmRleFJlcGxhY2UpIHtcbiAgICAgICAgdmFsdWVUYXJnZXQgPSB2YWx1ZVRhcmdldC5yZXBsYWNlQWxsKGluZGV4UmVwbGFjZSwgJy0nLCAnJykgYXMgSVN0cmluZztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuYWNjZXB0TmVnYXRpdmVWYWx1ZSgpICYmIHZhbHVlVGFyZ2V0ID09PSAnLScpIHtcbiAgICAgIGUudGFyZ2V0LnZhbHVlID0gdmFsdWVUYXJnZXQ7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3dpdGNoICh0aGlzLmRhdGFUeXBlKCkpIHtcbiAgICAgIGNhc2UgJ2ludCc6XG4gICAgICAgIHtcbiAgICAgICAgICBzdHJSZWdleCA9IGBbXjAtOSR7dGhpcy5hY2NlcHROZWdhdGl2ZVZhbHVlKCkgPyAnLScgOiAnJ31dYDtcbiAgICAgICAgICBpZiAoIWUuZmFrZUV2ZW50KSB7XG4gICAgICAgICAgICB2YWx1ZVRhcmdldCA9IHZhbHVlVGFyZ2V0LnJlcGxhY2UobmV3IFJlZ0V4cChzdHJSZWdleCwgJ2dpJyksICcnKSBhcyBJU3RyaW5nO1xuICAgICAgICAgICAgY29uc3QgbWF4VG90YWxOdW1iZXIgPSB2YWx1ZVRhcmdldC5pbmNsdWRlcygnLScpID8gMTcgOiAxNjtcblxuICAgICAgICAgICAgaWYgKHZhbHVlVGFyZ2V0Lmxlbmd0aCA+IG1heFRvdGFsTnVtYmVyKSB7XG4gICAgICAgICAgICAgIHZhbHVlVGFyZ2V0ID0gdmFsdWVUYXJnZXQuc2xpY2UoMCwgbWF4VG90YWxOdW1iZXIpIGFzIElTdHJpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoTWF0aC5hYnMocGFyc2VJbnQodmFsdWVUYXJnZXQpKSA+ICh0aGlzLm1heFZhbHVlTnVtYmVyKCkgfHwgOTAwNzE5OTI1NDc0MDk5MSkpIHtcbiAgICAgICAgICAgICAgdmFsdWVUYXJnZXQgPSB2YWx1ZVRhcmdldC5zbGljZSgwLCBtYXhUb3RhbE51bWJlciAtIDEpIGFzIElTdHJpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5vbmx5QWNjZXB0TmVnYXRpdmVWYWx1ZSgpICYmIHZhbHVlVGFyZ2V0WzBdICE9PSAnLScgJiYgdmFsdWVUYXJnZXRbMF0gIT09ICcwJykge1xuICAgICAgICAgICAgICB2YWx1ZVRhcmdldCA9ICcnIGFzIElTdHJpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodmFsdWVUYXJnZXQgJiYgLyheLSk/KF5bMF0rKS8udGVzdCh2YWx1ZVRhcmdldCkpIHtcbiAgICAgICAgICAgICAgY29uc3QgaWQgPSB1dWlkKCk7XG5cbiAgICAgICAgICAgICAgdmFsdWVUYXJnZXQgPSB2YWx1ZVRhcmdldC5yZXBsYWNlKC8oXi0pPyheWzBdKykvLCBgJDEke2lkfWApLnJlcGxhY2UoaWQsICcwJykgYXMgSVN0cmluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh2YWx1ZVRhcmdldCA9PT0gJy0wJykge1xuICAgICAgICAgICAgICB2YWx1ZVRhcmdldCA9ICcwJyBhcyBJU3RyaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZhbHVlVGFyZ2V0ICYmIC8oXlswXSkoWzEtOV0pKFswLTldKyk/Ly50ZXN0KHZhbHVlVGFyZ2V0KSkge1xuICAgICAgICAgICAgICB2YWx1ZVRhcmdldCA9IHZhbHVlVGFyZ2V0LnJlcGxhY2UoLyheWzBdKShbMS05XSkoWzAtOV0rKT8vLCAnJDIkMycpIGFzIElTdHJpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB2YWx1ZURpc3BsYXkgPSB2aWV3RGF0YU51bWJlckJ5TGFuZ3VhZ2UodmFsdWVUYXJnZXQsICh0aGlzLmFjY2VwdE5lZ2F0aXZlVmFsdWUoKSB8fCBmYWxzZSksIDApO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5jaGVja01heExlbmd0aE51bWJlckFuZFNldFZhbHVlKHZhbHVlRGlzcGxheSwgZSkpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlLnRhcmdldC52YWx1ZSA9IGAke3RoaXMuZ2V0Q2hlY2taZXJvKCt2YWx1ZURpc3BsYXksIGUudGFyZ2V0LnZhbHVlKX0ke3ZhbHVlRGlzcGxheX1gO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGluZGV4T2ZEb3QgPSB2YWx1ZVRhcmdldC5pbmRleE9mKCcuJyk7XG4gICAgICAgICAgY29uc3QgaW5kZXhPZkNvbW1hID0gdmFsdWVUYXJnZXQuaW5kZXhPZignLCcpO1xuICAgICAgICAgIGxldCBpbmRleENob29zZSA9IGluZGV4T2ZEb3Q7XG5cbiAgICAgICAgICBpZiAoaW5kZXhPZkRvdCA8IDAgfHwgaW5kZXhPZkRvdCA+IGluZGV4T2ZDb21tYSkge1xuICAgICAgICAgICAgaW5kZXhDaG9vc2UgPSBpbmRleE9mQ29tbWE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpbmRleENob29zZSA+PSAwKSB7XG4gICAgICAgICAgICB2YWx1ZVRhcmdldCA9IHZhbHVlVGFyZ2V0LnN1YnN0cmluZygwLCBpbmRleENob29zZSkgYXMgSVN0cmluZztcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgdmFsdWVEaXNwbGF5ID0gdmlld0RhdGFOdW1iZXJCeUxhbmd1YWdlKHZhbHVlVGFyZ2V0LCAodGhpcy5hY2NlcHROZWdhdGl2ZVZhbHVlKCkgfHwgZmFsc2UpLCAwKTtcblxuICAgICAgICAgIGlmICh0aGlzLmNoZWNrTWF4TGVuZ3RoTnVtYmVyQW5kU2V0VmFsdWUodmFsdWVEaXNwbGF5LCBlKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGUudGFyZ2V0LnZhbHVlID0gYCR7dGhpcy5nZXRDaGVja1plcm8oK3ZhbHVlRGlzcGxheSwgZS50YXJnZXQudmFsdWUpfSR7dmFsdWVEaXNwbGF5fWA7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSAnZmxvYXQnOlxuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZmFsbHRocm91Z2hcbiAgICAgIGNhc2UgJ2JpZ2ludCc6XG4gICAgICAgIHRoaXMuZ2V0VmFsdWVGb3JtYXQoZSwgdmFsdWVUYXJnZXQsIHNlcGFyYXRvciwgc2VwYXJhdG9yUmV2ZXJ0LCBjdXJyZW50TGFuZyk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBpZiAodmFsdWVUYXJnZXQgPT09ICdOYU4nKSB7XG4gICAgICBlLnRhcmdldC52YWx1ZSA9ICcnIGFzIElTdHJpbmc7XG4gICAgfVxuICAgIGlmIChlLmZha2VFdmVudCB8fCBkYXRhID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zZXRDYXJldFBvc2l0aW9uKGUsIHNlbGVjdGlvblN0YXJ0ICsgMSk7XG4gIH1cblxuICBwcml2YXRlIGdldFZhbHVlRm9ybWF0KGU6IElFdmVudCB8IElFdmVudEN1c3RvbSwgdmFsdWVUYXJnZXQ6IElTdHJpbmcsIHNlcGFyYXRvcjogJy4nIHwgJywnLCBzZXBhcmF0b3JSZXZlcnQ6ICcuJyB8ICcsJywgY3VycmVudExhbmc6IHN0cmluZykge1xuICAgIGxldCBzdHJSZWdleCA9IGBbXjAtOSR7c2VwYXJhdG9yfSR7Y3VycmVudExhbmcgPT09IFV0aWxzTGFuZ3VhZ2VDb25zdGFudHMuRU4gPyAnLicgOiAnJ30ke3RoaXMuYWNjZXB0TmVnYXRpdmVWYWx1ZSgpID8gJy0nIDogJyd9XWA7XG5cbiAgICBpZiAoIWUuZmFrZUV2ZW50KSB7XG4gICAgICB2YWx1ZVRhcmdldCA9IHZhbHVlVGFyZ2V0LnJlcGxhY2UobmV3IFJlZ0V4cChzdHJSZWdleCwgJ2dpJyksICcnKSBhcyBJU3RyaW5nO1xuICAgIH1cbiAgICBjb25zdCBpbmRleGVzT2ZTZXBhcmF0b3IgPSB2YWx1ZVRhcmdldC5pbmRleGVzT2ZDaGFyYWN0ZXIoc2VwYXJhdG9yKTtcbiAgICBjb25zdCBbZmlyc3RJbmRleCwgc2Vjb25kSW5kZXhdID0gaW5kZXhlc09mU2VwYXJhdG9yO1xuXG4gICAgaWYgKHNlY29uZEluZGV4KSB7XG4gICAgICB2YWx1ZVRhcmdldCA9IGUudGFyZ2V0LnZhbHVlLnJlcGxhY2VBbGwoc2Vjb25kSW5kZXgsIHNlcGFyYXRvciwgJycpO1xuICAgIH1cbiAgICBpZiAoZmlyc3RJbmRleCAmJiB2YWx1ZVRhcmdldC5zdWJzdHJpbmcoZmlyc3RJbmRleCArIDEpLmxlbmd0aCA+PSAodGhpcy5maXhlZEZsb2F0KCkgPz8gMTQpKSB7XG4gICAgICB2YWx1ZVRhcmdldCA9IHZhbHVlVGFyZ2V0LnN1YnN0cmluZygwLCBmaXJzdEluZGV4ICsgKHRoaXMuZml4ZWRGbG9hdCgpID8/IDE0KSArIDEpIGFzIElTdHJpbmc7XG4gICAgfVxuICAgIHN0clJlZ2V4ID0gYFske3NlcGFyYXRvcn1dYDtcbiAgICB2YWx1ZVRhcmdldCA9IHZhbHVlVGFyZ2V0LnJlcGxhY2UobmV3IFJlZ0V4cChzdHJSZWdleCwgJ2cnKSwgc2VwYXJhdG9yUmV2ZXJ0KSBhcyBJU3RyaW5nO1xuICAgIGxldCB2YWx1ZUZvcm1hdCA9ICcnO1xuICAgIGxldCBbZm9udFNlcGFyYXRvck51bWJlciwgYmVoaW5kU2VwYXJhdG9yTnVtYmVyXSA9IHZhbHVlVGFyZ2V0LnNwbGl0KHNlcGFyYXRvclJldmVydCk7XG4gICAgbGV0IG1heEZvbnRUb3RhbE51bWJlciA9IChmb250U2VwYXJhdG9yTnVtYmVyICYmIGZvbnRTZXBhcmF0b3JOdW1iZXIuaW5jbHVkZXMoJy0nKSkgPyAxNiA6IDE1O1xuXG4gICAgaWYgKHRoaXMuZGF0YVR5cGUoKSA9PT0gJ2JpZ2ludCcpIHtcbiAgICAgIG1heEZvbnRUb3RhbE51bWJlciA9ICh0aGlzLm1heExlbmd0aE51bWJlckNvdW50KCkgPz8gMTkpIC0gKHRoaXMuZml4ZWRGbG9hdCgpID8/IDQpICsgKGZvbnRTZXBhcmF0b3JOdW1iZXIuaW5jbHVkZXMoJy0nKSA/IDEgOiAwKTtcbiAgICB9XG4gICAgY29uc3QgZm9udE92ZXJNYXhUb3RhbE51bWJlciA9IGZvbnRTZXBhcmF0b3JOdW1iZXIgJiYgZm9udFNlcGFyYXRvck51bWJlci5sZW5ndGggPj0gbWF4Rm9udFRvdGFsTnVtYmVyO1xuXG4gICAgaWYgKGZvbnRPdmVyTWF4VG90YWxOdW1iZXIpIHtcbiAgICAgIGZvbnRTZXBhcmF0b3JOdW1iZXIgPSBmb250U2VwYXJhdG9yTnVtYmVyLnNsaWNlKDAsIG1heEZvbnRUb3RhbE51bWJlcikgYXMgSVN0cmluZztcbiAgICAgIGlmICh0aGlzLmRhdGFUeXBlKCkgPT09ICdmbG9hdCcpIHtcbiAgICAgICAgYmVoaW5kU2VwYXJhdG9yTnVtYmVyID0gJyc7XG4gICAgICB9XG4gICAgfVxuICAgIHN3aXRjaCAodGhpcy5kYXRhVHlwZSgpKSB7XG4gICAgICBjYXNlICdmbG9hdCc6XG4gICAgICAgIGlmICghZm9udE92ZXJNYXhUb3RhbE51bWJlciAmJiBiZWhpbmRTZXBhcmF0b3JOdW1iZXIgJiYgYmVoaW5kU2VwYXJhdG9yTnVtYmVyLmxlbmd0aCkge1xuICAgICAgICAgIGJlaGluZFNlcGFyYXRvck51bWJlciA9IGJlaGluZFNlcGFyYXRvck51bWJlci5zbGljZSgwLCBtYXhGb250VG90YWxOdW1iZXIgLSBmb250U2VwYXJhdG9yTnVtYmVyLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgYmVoaW5kU2VwYXJhdG9yTnVtYmVyID0gYCR7YmVoaW5kU2VwYXJhdG9yTnVtYmVyID8/ICcnfWA7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdiaWdpbnQnOlxuICAgICAgICBpZiAoYmVoaW5kU2VwYXJhdG9yTnVtYmVyICYmIGJlaGluZFNlcGFyYXRvck51bWJlci5sZW5ndGggJiYgYmVoaW5kU2VwYXJhdG9yTnVtYmVyLmxlbmd0aCA+ICh0aGlzLmZpeGVkRmxvYXQoKSA/PyA0KSkge1xuICAgICAgICAgIGJlaGluZFNlcGFyYXRvck51bWJlciA9IGJlaGluZFNlcGFyYXRvck51bWJlci5zbGljZSgwLCAodGhpcy5maXhlZEZsb2F0KCkgPz8gNCkpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjb25zdCBpbmRleE9mU2VwYXJhdG9yUmV2ZXJ0ID0gdmFsdWVUYXJnZXQuaW5kZXhPZihzZXBhcmF0b3JSZXZlcnQpO1xuXG4gICAgaWYgKHRoaXMub25seUFjY2VwdE5lZ2F0aXZlVmFsdWUoKSAmJiBmb250U2VwYXJhdG9yTnVtYmVyWzBdICE9PSAnLScgJiYgZm9udFNlcGFyYXRvck51bWJlclswXSAhPT0gJzAnKSB7XG4gICAgICBmb250U2VwYXJhdG9yTnVtYmVyID0gJyc7XG4gICAgfVxuICAgIGlmICh0aGlzLm9ubHlBY2NlcHROZWdhdGl2ZVZhbHVlKCkgJiYgaW5kZXhPZlNlcGFyYXRvclJldmVydCA+PSAwICYmIGZvbnRTZXBhcmF0b3JOdW1iZXJbMF0gIT09ICctJykge1xuICAgICAgZm9udFNlcGFyYXRvck51bWJlciA9ICcwJztcbiAgICAgIGJlaGluZFNlcGFyYXRvck51bWJlciA9IHRoaXMuZGF0YVR5cGUoKSA9PT0gJ2JpZ2ludCcgPyAnMCcgOiAnJztcbiAgICB9XG4gICAgaWYgKGZvbnRTZXBhcmF0b3JOdW1iZXIgJiYgLyheLSkoWzBdKykvLnRlc3QoZm9udFNlcGFyYXRvck51bWJlcikpIHtcbiAgICAgIGNvbnN0IGlkID0gdXVpZCgpO1xuXG4gICAgICBmb250U2VwYXJhdG9yTnVtYmVyID0gZm9udFNlcGFyYXRvck51bWJlci5yZXBsYWNlKC8oXi0pKFswXSspLywgYCQxJHtpZH1gKS5yZXBsYWNlKGlkLCAnMCcpO1xuICAgIH1cbiAgICBpZiAoZm9udFNlcGFyYXRvck51bWJlciAmJiAvKF5bMF0rKS8udGVzdChmb250U2VwYXJhdG9yTnVtYmVyKSkge1xuICAgICAgZm9udFNlcGFyYXRvck51bWJlciA9IGZvbnRTZXBhcmF0b3JOdW1iZXIucmVwbGFjZSgvKF5bMF0rKS8sICcwJyk7XG4gICAgfVxuICAgIGlmICgvKF4tKShbMF0rKShbMS05XSkoWzAtOS5dKyk/Ly50ZXN0KGZvbnRTZXBhcmF0b3JOdW1iZXIpKSB7XG4gICAgICBmb250U2VwYXJhdG9yTnVtYmVyID0gZm9udFNlcGFyYXRvck51bWJlci5yZXBsYWNlKC8oXi0pKFswXSspKFsxLTldKShbMC05Ll0rKT8vLCAnJDEkMyQ0Jyk7XG4gICAgfVxuICAgIGlmICgvKF5bMF0rKShbMS05XSkoWzAtOS5dKyk/Ly50ZXN0KGZvbnRTZXBhcmF0b3JOdW1iZXIpKSB7XG4gICAgICBmb250U2VwYXJhdG9yTnVtYmVyID0gZm9udFNlcGFyYXRvck51bWJlci5yZXBsYWNlKC8oXlswXSspKFsxLTldKShbMC05Ll0rKT8vLCAnJDIkMycpO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRoaXMuZGF0YVR5cGUoKSkge1xuICAgICAgY2FzZSAnZmxvYXQnOlxuICAgICAgICBpZiAoLyheWzBdezZ9KS8udGVzdChiZWhpbmRTZXBhcmF0b3JOdW1iZXIpKSB7XG4gICAgICAgICAgYmVoaW5kU2VwYXJhdG9yTnVtYmVyID0gYmVoaW5kU2VwYXJhdG9yTnVtYmVyLnJlcGxhY2UoLyheWzBdezZ9KS8sICcwMDAwMCcpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdiaWdpbnQnOlxuICAgICAgICBpZiAoLyheWzBdezR9KS8udGVzdChiZWhpbmRTZXBhcmF0b3JOdW1iZXIpKSB7XG4gICAgICAgICAgYmVoaW5kU2VwYXJhdG9yTnVtYmVyID0gYmVoaW5kU2VwYXJhdG9yTnVtYmVyLnJlcGxhY2UoLyheWzBdezR9KS8sICcwMDAwJyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmIChmb250U2VwYXJhdG9yTnVtYmVyKSB7XG4gICAgICBmb250U2VwYXJhdG9yTnVtYmVyID0gdmlld0RhdGFOdW1iZXJCeUxhbmd1YWdlKGZvbnRTZXBhcmF0b3JOdW1iZXIsIHRoaXMuYWNjZXB0TmVnYXRpdmVWYWx1ZSgpLCAodGhpcy5maXhlZEZsb2F0KCkgPz8gKHRoaXMuZGF0YVR5cGUoKSA9PT0gJ2JpZ2ludCcgPyA0IDogMTQpKSk7XG4gICAgfVxuICAgIGNvbnN0IGhhc1NlcGFyYXRvclJldmVydCA9ICh0aGlzLmRhdGFUeXBlKCkgPT09ICdiaWdpbnQnID8gdHJ1ZSA6ICFmb250T3Zlck1heFRvdGFsTnVtYmVyKSAmJiBpbmRleE9mU2VwYXJhdG9yUmV2ZXJ0ID49IDA7XG5cbiAgICB2YWx1ZUZvcm1hdCA9IGAke2ZvbnRTZXBhcmF0b3JOdW1iZXIgPz8gJyd9JHtoYXNTZXBhcmF0b3JSZXZlcnQgPyBzZXBhcmF0b3JSZXZlcnQgOiAnJ30ke2JlaGluZFNlcGFyYXRvck51bWJlciA/PyAnJ31gO1xuICAgIGlmICh2YWx1ZUZvcm1hdCAmJiB0aGlzLm9ubHlBY2NlcHROZWdhdGl2ZVZhbHVlKCkgJiYgdmFsdWVGb3JtYXRbMF0gIT09ICctJyAmJiB2YWx1ZUZvcm1hdFswXSAhPT0gJzAnKSB7XG4gICAgICB2YWx1ZUZvcm1hdCA9ICcwJztcbiAgICB9XG4gICAgaWYgKHRoaXMuY2hlY2tNYXhMZW5ndGhOdW1iZXJBbmRTZXRWYWx1ZSh2YWx1ZUZvcm1hdCwgZSkpIHtcbiAgICAgIHZhbHVlVGFyZ2V0ID0gZS50YXJnZXQudmFsdWU7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFsdWVUYXJnZXQgPSBlLnRhcmdldC52YWx1ZSA9IHZhbHVlRm9ybWF0IGFzIElTdHJpbmc7XG4gIH1cblxuICBwcml2YXRlIGdldENoZWNrWmVybyh2YWx1ZTogbnVtYmVyLCB0YXJnZXRDdXJyZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCB6ZXJvID0gJyc7XG5cbiAgICBpZiAodGhpcy5kYXRhVHlwZSgpICE9PSAnaW50Jykge1xuICAgICAgcmV0dXJuIHplcm87XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2hhckZpcnN0SXNaZXJvKCkgJiYgdGhpcy5rZWVwWmVyb0luVHlwZUludCgpICYmIHZhbHVlICE9PSAwKSB7XG4gICAgICB6ZXJvID0gJzAnO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNoYXJGaXJzdElzWmVybygpICYmIHRoaXMuYXV0b0FkZFplcm9MZXNzVGhhbjEwSW5UeXBlSW50KCkgJiYgKCh2YWx1ZSA+IDAgJiYgdmFsdWUgPCAxMCAmJiAhLyheMCkrLy50ZXN0KGAke3RhcmdldEN1cnJlbnR9YCkpIHx8ICh0YXJnZXRDdXJyZW50ICYmIHRhcmdldEN1cnJlbnQubWF0Y2goL15bMF17Mix9JC8pPy5sZW5ndGggJiYgdmFsdWUgPT09IDApKSkge1xuICAgICAgemVybyA9ICcwJztcbiAgICB9XG5cbiAgICByZXR1cm4gemVybztcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q2FyZXRQb3NpdGlvbihlOiBJRXZlbnQgfCBJRXZlbnRDdXN0b20sIHNlbGVjdGlvblN0YXJ0OiBudW1iZXIpIHtcbiAgICBjb25zdCB7IGtleUNvZGUsIGlucHV0VHlwZSB9ID0gZTtcblxuICAgIGlmIChrZXlDb2RlID09PSBVdGlsc0tleUNvZGVDb25zdGFudC5VUF9BUlJPVyB8fCBrZXlDb2RlID09PSBVdGlsc0tleUNvZGVDb25zdGFudC5ET1dOX0FSUk9XIHx8IGtleUNvZGUgPT09IFV0aWxzS2V5Q29kZUNvbnN0YW50LkxFRlRfQVJST1cgfHwga2V5Q29kZSA9PT0gVXRpbHNLZXlDb2RlQ29uc3RhbnQuUklHSFRfQVJST1cpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdmFsdWVUYXJnZXQgPSBlLnRhcmdldC52YWx1ZS5yZXBsYWNlKCctJywgJycpO1xuICAgIGxldCB2YWx1ZSA9IFV0aWxzQ2FjaGUuZ2V0TGFuZygpID09PSBVdGlsc0xhbmd1YWdlQ29uc3RhbnRzLlZJID8gYCR7dGhpcy52YWx1ZSgpIHx8IDB9YC5yZXBsYWNlKCcuJywgJywnKSA6IGAke3RoaXMudmFsdWUoKSB8fCAwfWA7XG5cbiAgICB2YWx1ZSA9IHZpZXdEYXRhTnVtYmVyQnlMYW5ndWFnZSh2YWx1ZSwgdGhpcy5hY2NlcHROZWdhdGl2ZVZhbHVlKCksICh0aGlzLmZpeGVkRmxvYXQoKSA/PyAxNCkpO1xuICAgIHZhbHVlID0gYCR7dmFsdWV9YC5yZXBsYWNlKCctJywgJycpO1xuXG4gICAgaWYgKHZhbHVlID09PSB2YWx1ZVRhcmdldCAmJiB2YWx1ZSAhPT0gJzAnICYmIHZhbHVlICE9PSAnLScpIHtcbiAgICAgIHNldENhcmV0UG9zaXRpb24odGhpcy5FbGVtZW50LCBzZWxlY3Rpb25TdGFydCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgZmFjdG9yID0gMDtcbiAgICBjb25zdCBkaXN0YW5jZSA9IHZhbHVlVGFyZ2V0Lmxlbmd0aCAtIHZhbHVlLmxlbmd0aDtcbiAgICBpZiAoZGlzdGFuY2UgPCAtMSkge1xuICAgICAgZmFjdG9yID0gLTE7XG4gICAgfVxuICAgIGlmIChkaXN0YW5jZSA+IDEpIHtcbiAgICAgIGZhY3RvciA9IDE7XG4gICAgfVxuICAgIHNlbGVjdGlvblN0YXJ0ICs9IGZhY3RvcjtcbiAgICBpZiAoaW5wdXRUeXBlID09PSAnaW5zZXJ0RnJvbVBhc3RlJyAmJiB0aGlzLmRhdGFUZXh0UGFzdGUoKSkge1xuICAgICAgY29uc3QgZGF0YVRleHREaXNwbGF5ID0gYCR7dmlld0RhdGFOdW1iZXJCeUxhbmd1YWdlKHRoaXMuZGF0YVRleHRQYXN0ZSgpLCB0aGlzLmFjY2VwdE5lZ2F0aXZlVmFsdWUoKSwgKHRoaXMuZml4ZWRGbG9hdCgpID8/IDE0KSl9YDtcbiAgICAgIGNvbnN0IGluZGV4ZXM6IEFycmF5PG51bWJlcj4gPSBlLnRhcmdldC52YWx1ZS5pbmRleGVzQnlTdHJpbmcoZGF0YVRleHREaXNwbGF5KTtcblxuICAgICAgc2VsZWN0aW9uU3RhcnQgLT0gZmFjdG9yO1xuXG4gICAgICBpZiAoaW5kZXhlcy5zb21lKGluZGV4ID0+IGluZGV4ID09PSBzZWxlY3Rpb25TdGFydCkgfHwgIWluZGV4ZXMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBzZXRDYXJldFBvc2l0aW9uKHRoaXMuRWxlbWVudCwgc2VsZWN0aW9uU3RhcnQpO1xuICAgICAgfVxuXG4gICAgICBsZXQgbmV3U2VsZWN0aW9uU3RhcnQgPSBpbmRleGVzWzBdO1xuXG4gICAgICBmb3IgKGNvbnN0IGluZGV4IG9mIGluZGV4ZXMpIHtcbiAgICAgICAgbGV0IHJlcGxhY2VWYWx1ZSA9IGZvcm1hdE51bWJlcihgJHt2YWx1ZVRhcmdldC5zdWJzdHJpbmcoMCwgaW5kZXgpfSR7dmFsdWVUYXJnZXQuc3Vic3RyaW5nKGluZGV4ICsgZGF0YVRleHREaXNwbGF5Lmxlbmd0aCArIDEsIHZhbHVlVGFyZ2V0Lmxlbmd0aCl9YCk7XG5cbiAgICAgICAgcmVwbGFjZVZhbHVlID0gdmlld0RhdGFOdW1iZXJCeUxhbmd1YWdlKHJlcGxhY2VWYWx1ZSwgdGhpcy5hY2NlcHROZWdhdGl2ZVZhbHVlKCksICh0aGlzLmZpeGVkRmxvYXQoKSA/PyAxNCkpO1xuICAgICAgICBpZiAodmFsdWUgPT09IHJlcGxhY2VWYWx1ZSkge1xuICAgICAgICAgIG5ld1NlbGVjdGlvblN0YXJ0ID0gaW5kZXg7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG5ld1NlbGVjdGlvblN0YXJ0ID49IDApIHtcbiAgICAgICAgc2VsZWN0aW9uU3RhcnQgPSBuZXdTZWxlY3Rpb25TdGFydCArIGRhdGFUZXh0RGlzcGxheS5sZW5ndGggKyAxO1xuXG4gICAgICAgIHJldHVybiBzZXRDYXJldFBvc2l0aW9uKHRoaXMuRWxlbWVudCwgc2VsZWN0aW9uU3RhcnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNldENhcmV0UG9zaXRpb24odGhpcy5FbGVtZW50LCBzZWxlY3Rpb25TdGFydCk7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlVmFsdWVCeURhdGFUeXBlKHZhbHVlOiBzdHJpbmcpOiBudW1iZXIgfCBzdHJpbmcge1xuICAgIHN3aXRjaCAodGhpcy5kYXRhVHlwZSgpKSB7XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICByZXR1cm4gdmFsdWU7XG5cbiAgICAgIGNhc2UgJ2ludCc6XG4gICAgICAgIGlmICh0aGlzLmFjY2VwdE5lZ2F0aXZlVmFsdWUoKSAmJiAodmFsdWUgPT09ICctJyB8fCB2YWx1ZSA9PT0gJywnIHx8IHZhbHVlID09PSAnLicpKSB7XG4gICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKyhmb3JtYXROdW1iZXIodmFsdWUpKTtcblxuICAgICAgY2FzZSAnZmxvYXQnOlxuICAgICAgICBpZiAodGhpcy5hY2NlcHROZWdhdGl2ZVZhbHVlKCkgJiYgKHZhbHVlID09PSAnLScgfHwgdmFsdWUgPT09ICcsJyB8fCB2YWx1ZSA9PT0gJy4nKSkge1xuICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQoKCtmb3JtYXROdW1iZXIodmFsdWUpKS50b0ZpeGVkKHRoaXMuZml4ZWRGbG9hdCgpID8/IDE0KSk7XG5cbiAgICAgIGNhc2UgJ2JpZ2ludCc6XG4gICAgICAgIGlmICh0aGlzLmFjY2VwdE5lZ2F0aXZlVmFsdWUoKSAmJiAodmFsdWUgPT09ICctJyB8fCB2YWx1ZSA9PT0gJywnIHx8IHZhbHVlID09PSAnLicpKSB7XG4gICAgICAgICAgcmV0dXJuICcwJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmb3JtYXROdW1iZXIodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2FsY3VsYXRvckhlaWdodFRleHRBcmVhKGU6IElFdmVudCB8IElFdmVudEN1c3RvbSkge1xuICAgIGlmICh0aGlzLnRhZ0lucHV0KCkgPT09ICdpbnB1dCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdGFyZ2V0ID0gZS50YXJnZXQ7XG5cbiAgICB0YXJnZXQuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgICB0YXJnZXQuc3R5bGUuaGVpZ2h0ID0gYCR7dGhpcy5kZWZhdWx0SGVpZ2h0KCl9cHhgO1xuICAgIGNvbnN0IHsgc2Nyb2xsSGVpZ2h0IH0gPSB0YXJnZXQ7XG5cbiAgICBjb25zdCBoZWlnaHQgPSBzY3JvbGxIZWlnaHQgKyAyOyAvLyAgYm9yZGVyIHRvcCArIGJvdHRvbSA9IDJcblxuICAgIGlmICghdGhpcy5wcmVIZWlnaHRBcmVhKCkgJiYgdGhpcy5wcmVIZWlnaHRBcmVhKCkgIT09IGhlaWdodCkge1xuICAgICAgdGhpcy5vdXRIZWlnaHRBcmVhQ2hhbmdlLmVtaXQoeyBpc0NoYW5nZTogdHJ1ZSwgaGVpZ2h0OiBoZWlnaHQgfSk7XG4gICAgfVxuXG4gICAgaWYgKGhlaWdodCA+ICh0aGlzLm1heEhlaWdodFRleHRBcmVhKCkgPz8gMzIpKSB7XG4gICAgICB0YXJnZXQuc3R5bGUub3ZlcmZsb3cgPSAnYXV0byc7XG4gICAgfVxuICAgIGlmICh0aGlzLmlmcmFtZVJlZikge1xuICAgICAgdGhpcy5pZnJhbWVSZWYuc3R5bGUuaGVpZ2h0ID0gYCR7aGVpZ2h0fXB4YDtcbiAgICB9XG4gICAgdGFyZ2V0LnN0eWxlLmhlaWdodCA9IGAke2hlaWdodH1weGA7XG4gICAgdGhpcy5wcmVIZWlnaHRBcmVhLnNldChoZWlnaHQpO1xuXG4gIH1cblxuICBwcml2YXRlIGNvbWJpbmVPYnNlcnZhYmxlKG1vdXNlRG93bkV2ZW50OiBPYnNlcnZhYmxlPElFdmVudD4sIG9ic2VydmFibGVNZXJnZTogT2JzZXJ2YWJsZTxJRXZlbnQ+KSB7XG4gICAgbW91c2VEb3duRXZlbnQucGlwZShcbiAgICAgIG1lcmdlTWFwKCgpID0+IG9ic2VydmFibGVNZXJnZSksXG4gICAgICBkZWJvdW5jZVRpbWUoMCksXG4gICAgICB0YXAoKGU6IElFdmVudCkgPT4gdGhpcy5jaGVja1R5cGVOdW1iZXIoZSwgJ2tleScpKSxcbiAgICApLnN1YnNjcmliZSgoZTogSUV2ZW50KSA9PiB0aGlzLnByb2Nlc3NFdmVudEFuZEVtaXRWYWx1ZShlKSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZvY3VzKCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5FbGVtZW50Py5mb2N1cygpO1xuICAgIH0sIHRoaXMuZm9jdXNUaW1lT3V0KCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBibHVyKCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5FbGVtZW50Py5ibHVyKCk7XG4gICAgfSwgdGhpcy5ibHVyVGltZU91dCgpKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYWRkRGF0YVRvU2VsZWN0aW9uSW5wdXQoZGF0YTogc3RyaW5nIHwgbnVtYmVyKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5FbGVtZW50O1xuICAgIGNvbnN0IHNlbGVjdGlvblN0YXJ0ID0gdGFyZ2V0LnNlbGVjdGlvblN0YXJ0O1xuXG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLkVsZW1lbnQudmFsdWU7XG4gICAgY29uc3QgYmVmb3JlVmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcoMCwgc2VsZWN0aW9uU3RhcnQpO1xuICAgIGNvbnN0IGFmdGVyVmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcoc2VsZWN0aW9uU3RhcnQpO1xuXG4gICAgdGhpcy5FbGVtZW50LnZhbHVlID0gYCR7YmVmb3JlVmFsdWV9JHtkYXRhfSR7YWZ0ZXJWYWx1ZX1gO1xuICAgIHNldENhcmV0UG9zaXRpb24odGhpcy5FbGVtZW50LCBzZWxlY3Rpb25TdGFydCArIGRhdGEudG9TdHJpbmcoKS5sZW5ndGgpO1xuICAgIGNvbnN0IGV2ZW50RmFrZTogSUV2ZW50Q3VzdG9tID0geyBwcmV2ZW50RGVmYXVsdDogKCkgPT4geyByZXR1cm4gfSwgdGFyZ2V0OiB0aGlzLkVsZW1lbnQsIGRhdGE6ICcnLCBmYWtlRXZlbnQ6IHRydWUgfTtcblxuICAgIHRoaXMucHJvY2Vzc0V2ZW50QW5kRW1pdFZhbHVlKGV2ZW50RmFrZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlck9uTG9hZChlOiBFdmVudCwgZWxlbWVudDogSFRNTElGcmFtZUVsZW1lbnQpIHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuaWZyYW1lUmVmID0gZWxlbWVudDtcbiAgICBjb25zdCBpZnJhbWU6IGFueSA9IGVsZW1lbnQuY29udGVudFdpbmRvdyB8fCBlbGVtZW50LmNvbnRlbnREb2N1bWVudDtcbiAgICB0aGlzLmNvbmZpZ1Byb2plY3RTZXJ2aWNlLnNldHVwRm9udEZhbWlseShpZnJhbWUuZG9jdW1lbnQpO1xuXG4gICAgdGhpcy5pbnB1dElmcmFtZVJlZi5zZXQoeyBuYXRpdmVFbGVtZW50OiBpZnJhbWUuZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ1RFWFRBUkVBJylbMF0gfSk7XG4gICAgaWYgKHRoaXMuRWxlbWVudCkge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5FbGVtZW50LCAncGxhY2Vob2xkZXInLCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCh0aGlzLnBsYWNlaG9sZGVyKCkpKTtcbiAgICAgIGlmICh0aGlzLmRpc2FibGUoKSkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLkVsZW1lbnQsICdkaXNhYmxlZCcsICd0cnVlJyk7XG4gICAgICB9XG4gICAgICB0aGlzLmFmdGVyVmlld0luaXQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlc2V0VmFsdWUoKSB7XG4gICAgdGhpcy5FbGVtZW50LnZhbHVlID0gJyc7XG4gIH1cblxuICBwcml2YXRlIGNvdW50RGlzcGxheUNvbXB1dGVkKCkge1xuICAgIGlmICghdGhpcy5zaG93Q291bnQoKSB8fCB0aGlzLmRhdGFUeXBlKCkgIT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0aGlzLnZhbHVlKCkgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gJzAnO1xuICAgIH1cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMucGFkZGluZ1JpZ2h0Q3VzdG9tLnNldCgodGhpcy5lbGVtZW50UmlnaHRSZWYoKT8ubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCB8fCAwKSArIDEyKTtcbiAgICAgIGlmICh0aGlzLnNob3dDb3VudCgpKSB7XG4gICAgICAgIGlmICh0aGlzLnRleHRDb3VudFJlZigpKSB7XG4gICAgICAgICAgdGhpcy5wYWRkaW5nUmlnaHRDdXN0b20uc2V0KHRoaXMudGV4dENvdW50UmVmKCk/Lm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGggKyAxNik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy50YWdJbnB1dCgpID09PSAnaW5wdXQnKSB7XG4gICAgICAgICAgdGhpcy5wYWRkaW5nUmlnaHRDdXN0b20udXBkYXRlKHZhbHVlID0+IHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZSArICh0aGlzLmVsZW1lbnRSaWdodFJlZigpPy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIHx8IDApO1xuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBgJHt2aWV3RGF0YU51bWJlckJ5TGFuZ3VhZ2UoKHRoaXMudmFsdWUoKSBhcyBzdHJpbmcpLmxlbmd0aCwgZmFsc2UpfWA7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLm9uRGVzdHJveS5uZXh0KCk7XG4gICAgdGhpcy5vbkRlc3Ryb3kuY29tcGxldGUoKTtcbiAgfVxufVxuIiwiPGRpdiBbY2xhc3NdPVwiJ2ZsZXggcmVsYXRpdmUgIXRleHQtWyM5Y2EyYWRdICcgKyBjbGFzc0NvbnRhaW5lcklucHV0KClcIlxuICBbY2xhc3MubGlicy11aS1jb21wb25lbnRzLWlucHV0LXRleHRhcmVhLWNvbnRhaW5lcl09XCJ0YWdJbnB1dCgpID09PSAndGV4dGFyZWEnICYmIHJlc2l6ZSgpID09PSAnYXV0bydcIj5cbiAgQGlmICh0YWdJbnB1dCgpID09PSAnaW5wdXQnKSB7XG4gICAgPGlucHV0ICNpbnB1dFJlZlxuICAgICAgW2NsYXNzLmxpYnMtdWktcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiXG4gICAgICBbY2xhc3MubGlicy11aS1yZWFkb25seS1iYWNrZ3JvdW5kXT1cInJlYWRvbmx5KClcIlxuICAgICAgW2NsYXNzLmxpYnMtdWktZGlzYWJsZV09XCJkaXNhYmxlKClcIlxuICAgICAgW2NsYXNzLmxpYnMtdWktZGlzYWJsZS1iYWNrZ3JvdW5kXT1cImRpc2FibGUoKVwiXG4gICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImRlZmF1bHRIZWlnaHQoKVwiXG4gICAgICBbc3R5bGUubWluSGVpZ2h0LnB4XT1cImRlZmF1bHRIZWlnaHQoKVwiXG4gICAgICBbc3R5bGUucGFkZGluZ1JpZ2h0LnB4LmltcG9ydGFudF09XCJwYWRkaW5nUmlnaHRDdXN0b20oKVwiXG4gICAgICBbY2xhc3Mudy1mdWxsXT1cIiFpZ25vcmVXaWR0aElucHV0MTAwKClcIlxuICAgICAgW2NsYXNzXT1cIidsaWJzLXVpLWlucHV0ICcgKyBjbGFzc0luY2x1ZGUoKVwiXG4gICAgICBbY2xhc3MuYm9yZGVyLXByaW1hcnktZm9jdXMtZ2VuZXJhbF09XCJmb2N1c0lucHV0KClcIlxuICAgICAgW2NsYXNzLmxpYnMtdWktaW5wdXQtbm90LWJvcmRlcl09XCJub0JvcmRlcigpXCJcbiAgICAgIFtjbGFzcy5saWJzLXVpLWJnLXNwZWNpYWwtbm9uZV09XCJiYWNrZ3JvdW5kTm9uZSgpXCJcbiAgICAgIFtjbGFzcy5saWJzLXVpLWJvcmRlci1lcnJvci1nZW5lcmFsXT1cImJvcmRlckVycm9yKClcIlxuICAgICAgW2NsYXNzLnRleHQtWyMyOWM3Y2NdXT1cInVzZUNvbG9yTW9kZUV4aXN0KClcIlxuICAgICAgW2NsYXNzLiFwbC1bNDBweF1dPVwiaWNvbkxlZnRDbGFzcygpXCJcbiAgICAgIFthdHRyLm1heExlbmd0aF09XCJtYXhMZW5ndGgoKSB8fCB1bmRlZmluZWRcIlxuICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyKCkgfCB0cmFuc2xhdGVcIlxuICAgICAgW2F0dHIudHlwZV09XCJoaWRkZW5Db250ZW50KCkgPyAncGFzc3dvcmQnOid0ZXh0J1wiXG4gICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZSgpXCJcbiAgICAgIFthdXRvY29tcGxldGVdPVwicmVzZXRBdXRvQ29tcGxldGVQYXNzd29yZCgpPyAnbmV3LXBhc3N3b3JkJzonJ1wiIC8+XG4gIH1cbiAgQGlmICh0YWdJbnB1dCgpID09PSAndGV4dGFyZWEnKSB7XG4gICAgQGlmIChyZXNpemUoKSA9PT0gJ2F1dG8nKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1jb21wb25lbnRzLWlucHV0LXRleHRhcmVhLWNvbnRhaW5lci1yZXNpemUtaWNvblwiPjwvZGl2PlxuICAgIH1cbiAgICA8dGV4dGFyZWEgI2lucHV0UmVmXG4gICAgICBbY2xhc3MubGlicy11aS1yZWFkb25seV09XCJyZWFkb25seSgpXCJcbiAgICAgIFtjbGFzcy5saWJzLXVpLXJlYWRvbmx5LWJhY2tncm91bmRdPVwicmVhZG9ubHkoKVwiXG4gICAgICBbY2xhc3MubGlicy11aS1kaXNhYmxlXT1cImRpc2FibGUoKVwiXG4gICAgICBbY2xhc3MubGlicy11aS1kaXNhYmxlLWJhY2tncm91bmRdPVwiZGlzYWJsZSgpXCJcbiAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiZGVmYXVsdEhlaWdodCgpXCJcbiAgICAgIFtzdHlsZS5taW5IZWlnaHQucHhdPVwibWluSGVpZ2h0VGV4dEFyZWEoKSA/PyBkZWZhdWx0SGVpZ2h0KClcIlxuICAgICAgW3N0eWxlLnBhZGRpbmdSaWdodC5weF09XCJwYWRkaW5nUmlnaHRDdXN0b20oKVwiXG4gICAgICBbc3R5bGUubWF4SGVpZ2h0LnB4XT1cIm1heEhlaWdodFRleHRBcmVhKClcIlxuICAgICAgW3N0eWxlLnJlc2l6ZV09XCJyZXNpemUoKVwiXG4gICAgICBbY2xhc3Mudy1mdWxsXT1cIiFpZ25vcmVXaWR0aElucHV0MTAwKClcIlxuICAgICAgW2NsYXNzXT1cIidsaWJzLXVpLWlucHV0IGxpYnMtdWktY3Vyc29yLWF1dG8gJyArIGNsYXNzSW5jbHVkZSgpXCJcbiAgICAgIFtjbGFzcy5saWJzLXVpLWlucHV0LW5vdC1ib3JkZXJdPVwibm9Cb3JkZXIoKVwiXG4gICAgICBbY2xhc3MubGlicy11aS1iZy1zcGVjaWFsLW5vbmVdPVwiYmFja2dyb3VuZE5vbmUoKVwiXG4gICAgICBbY2xhc3MubGlicy11aS1ib3JkZXItZXJyb3ItZ2VuZXJhbF09XCJib3JkZXJFcnJvcigpXCJcbiAgICAgIFtjbGFzcy50ZXh0LVsjMjljN2NjXV09XCJ1c2VDb2xvck1vZGVFeGlzdCgpXCJcbiAgICAgIFtjbGFzcy5wbC1bMzJweF1dPVwiaWNvbkxlZnRDbGFzcygpXCJcbiAgICAgIFthdHRyLm1heExlbmd0aF09XCJtYXhMZW5ndGgoKSB8fCB1bmRlZmluZWRcIlxuICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyKCkgfCB0cmFuc2xhdGVcIlxuICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5KClcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGUoKVwiPlxuICAgICAgPC90ZXh0YXJlYT5cbiAgfVxuXG4gIEBpZiAodGFnSW5wdXQoKSA9PT0gJ2lmcmFtZS10ZXh0YXJlYScgJiYgaHRtbElmcmFtZUFyZWEoKSkge1xuICAgIDxzcGFuIGNsYXNzPVwiZC1ub25lXCI+XG4gICAgPC9zcGFuPlxuICAgIDxpZnJhbWUgI2lmcmFtZVJlZlxuICAgICAgW3N0eWxlLm1heEhlaWdodC5weF09XCJtYXhIZWlnaHRUZXh0QXJlYSgpXCJcbiAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiZGVmYXVsdEhlaWdodCgpXCJcbiAgICAgIFtzcmNkb2NdPVwiaHRtbElmcmFtZUFyZWEoKVwiXG4gICAgICBjbGFzcz1cInctZnVsbFwiXG4gICAgICBmcmFtZUJvcmRlcj1cIjBcIlxuICAgICAgKGxvYWQpPVwiaGFuZGxlck9uTG9hZCgkZXZlbnQsaWZyYW1lUmVmKVwiPlxuICAgIDwvaWZyYW1lPlxuICB9XG4gIEBpZiAoaWNvbkxlZnRDbGFzcygpKSB7XG4gICAgPGxpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyIFtpZ25vcmVTaG93UG9wb3Zlcl09XCIhcG9wb3ZlckNvbnRlbnRJY29uTGVmdCgpXCJcbiAgICAgIFtjb25maWddPVwie21heFdpZHRoOjI1MCxkaXJlY3Rpb246J2JvdHRvbScsY29udGVudDpwb3BvdmVyQ29udGVudEljb25MZWZ0KCksekluZGV4OiB6SW5kZXhQb3BvdmVyQ29udGVudCgpfVwiPlxuICAgICAgPGkgW2F0dHIudGFnSW5wdXRdPVwidGFnSW5wdXQoKVwiXG4gICAgICAgIFtjbGFzc109XCJpY29uTGVmdENsYXNzKCkgKycgbGlicy11aS1pbnB1dC1pY29uLWxlZnQgIXRleHQtWyM5Y2EyYWRdJ1wiXG4gICAgICAgIChjbGljayk9XCJoYW5kbGVyRXZlbnRJY29uTGVmdCgkZXZlbnQsJ2NsaWNrJylcIj5cbiAgICAgIDwvaT5cbiAgICA8L2xpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyPlxuICB9XG4gIDxkaXYgI2VsZW1lbnRSaWdodFJlZlxuICAgIGNsYXNzPVwiYWJzb2x1dGUgZmxleCBpdGVtcy1jZW50ZXIgaC1mdWxsIHRvcC0wIHJpZ2h0LTBcIj5cbiAgICBAaWYgKHZhbHVlKCkgJiYgcGxhY2Vob2xkZXIoKS50cmltKCkgJiYga2VlcFBsYWNlaG9sZGVyT25seSgpKSB7XG4gICAgICA8c3BhbiBbY2xhc3NdPVwiJ2xpYnMtdWktaW5wdXQtcGxhY2Vob2xkZXItY3VzdG9tIGxpYnMtdWktZm9udC1oNXInXCI+XG4gICAgICAgIHt7IHBsYWNlaG9sZGVyKCkgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICB9XG4gICAgQGlmIChkYXRhVHlwZSgpICE9PSdzdHJpbmcnICYmIHZhbHVlVXBEb3duTnVtYmVyKCkpIHtcbiAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1zb3J0IGNsYXNzPVwibXItWzEycHhdXCJcbiAgICAgICAgW2Rpc2FibGVBc2NdPVwiZGlzYWJsZUFzYygpXCJcbiAgICAgICAgW2Rpc2FibGVEZXNjXT1cImRpc2FibGVEZXNjKClcIlxuICAgICAgICBbYXR0ci50YWdJbnB1dF09XCJ0YWdJbnB1dCgpXCJcbiAgICAgICAgW29ubHlFbWl0XT1cInRydWVcIlxuICAgICAgICBbZGlzYWJsZV09XCJkaXNhYmxlKCkgfHwgcmVhZG9ubHkoKVwiXG4gICAgICAgIChvdXRDaGFuZ2UpPVwiaGFuZGxlckNoYW5nZVZhbHVlKCRldmVudClcIiAvPlxuICAgIH1cbiAgICBAaWYgKGljb25SaWdodENsYXNzKCkpIHtcbiAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtcG9wb3ZlciBjbGFzcz1cImZsZXhcIlxuICAgICAgICBbaWdub3JlU2hvd1BvcG92ZXJdPVwiIXBvcG92ZXJDb250ZW50SWNvblJpZ2h0KClcIlxuICAgICAgICBbY29uZmlnXT1cInttYXhXaWR0aDoyNTAsZGlyZWN0aW9uOidib3R0b20nLGNvbnRlbnQ6cG9wb3ZlckNvbnRlbnRJY29uUmlnaHQoKSx6SW5kZXg6IHpJbmRleFBvcG92ZXJDb250ZW50KCl9XCI+XG4gICAgICAgIDxpIFthdHRyLnRhZ0lucHV0XT1cInRhZ0lucHV0KClcIlxuICAgICAgICAgIFtjbGFzcy50ZXh0LVsjNmE3MzgzXV09XCIoIWRpc2FibGUoKSAmJiAhcmVhZG9ubHkoKSkgfHwgYWNjZXB0T25seUNsaWNrSWNvbigpXCJcbiAgICAgICAgICBbY2xhc3MudGV4dC1bI2NkZDBkNl1dPScoKGRpc2FibGUoKSB8fCByZWFkb25seSgpKSAmJiAhYWNjZXB0T25seUNsaWNrSWNvbigpKSB8fCBzZXRJY29uUmlnaHRDb2xvclNhbWVDb2xvckRpc2FibGVSZWFkT25seSgpJ1xuICAgICAgICAgIFtjbGFzc109XCJpY29uUmlnaHRDbGFzcygpICsnIGxpYnMtdWktaW5wdXQtaWNvbi1yaWdodCdcIlxuICAgICAgICAgIChjbGljayk9XCJoYW5kbGVyRXZlbnRJY29uUmlnaHQoJGV2ZW50LCdjbGljaycpXCI+XG4gICAgICAgIDwvaT5cbiAgICAgIDwvbGlic191aS1jb21wb25lbnRzLXBvcG92ZXI+XG4gICAgfVxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwibGlicy11aS1pbnB1dC10ZXh0LWJvdHRvbSB7eyBjbGFzc0NvbnRhaW5lckJvdHRvbUlucHV0KCkgfX1cIlxuICAgIFtzdHlsZS5yaWdodC5weF09XCIodGFnSW5wdXQoKSA9PT0gJ2lucHV0JyA/IChlbGVtZW50UmlnaHRSZWYuY2xpZW50V2lkdGggfHwgMCkgOiAwKSArIDhcIj5cbiAgICBAaWYgKHRlbXBsYXRlTGVmdEJvdHRvbUlucHV0KCkpIHtcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZUxlZnRCb3R0b21JbnB1dCgpXCIgLz5cbiAgICB9XG4gICAgQGlmIChkYXRhVHlwZSgpID09PSAnc3RyaW5nJyAmJiBzaG93Q291bnQoKSkge1xuICAgICAgPGRpdiAjdGV4dENvdW50UmVmXG4gICAgICAgIGNsYXNzPVwidGV4dC1bIzljYTJhZF0gbGlicy11aS1mb250LWg3clwiPlxuICAgICAgICA8c3Bhbj57eyBjb3VudERpc3BsYXkoKSB9fTwvc3Bhbj5cbiAgICAgICAgQGlmIChtYXhMZW5ndGgoKSkge1xuICAgICAgICAgIDxzcGFuPi97eyBtYXhMZW5ndGhEaXNwbGF5KCkgfX08L3NwYW4+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgQGlmICh0ZW1wbGF0ZVJpZ2h0Qm90dG9tSW5wdXQoKSkge1xuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVSaWdodEJvdHRvbUlucHV0KClcIiAvPlxuICAgICAgfVxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
784
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9pbnB1dC9zcmMvaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9pbnB1dC9zcmMvaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQWlDLFNBQVMsRUFBZSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4TSxPQUFPLEVBQUUsWUFBWSxFQUFZLE1BQU0sMkJBQTJCLENBQUM7QUFDbkUsT0FBTyxFQUFTLG9DQUFvQyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDL0YsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFL0UsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxvQkFBb0IsRUFBRSxzQkFBc0IsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5SyxPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEUsT0FBTyxFQUFjLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFF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SUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUM7WUFDdEssTUFBTSxZQUFZLEdBQUcsd0JBQXdCLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFFN0ksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsWUFBWSxFQUFFLENBQUM7WUFFdEYsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNqRCxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7WUFFbkIsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsQ0FBQztRQUVELElBQUksQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxLQUFLLEdBQUcsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsSUFBSSxDQUFDLENBQUMsTUFBTSxD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QUFrQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRTt3QkFDckMsT0FBTyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO29CQUM1RixDQUFDLENBQUMsQ0FBQTtnQkFDSixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxHQUFHLHdCQUF3QixDQUFFLElBQUksQ0FBQyxLQUFLLEVBQWEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztJQUMvRSxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QixDQUFDO3dHQXQ1QlUsb0NBQW9DOzRGQUFwQyxvQ0FBb0MsNnFSQzlCakQsazhLQTRIQSx3dEREckdJLGVBQWUsNEZBQ2YsZ0NBQWdDLHFlQUNoQyxvQ0FBb0M7OzRGQUszQixvQ0FBb0M7a0JBZGhELFNBQVM7K0JBRUUsaUNBQWlDLGNBRy9CLElBQUksV0FDUDt3QkFDUCxlQUFlO3dCQUNmLGdDQUFnQzt3QkFDaEMsb0NBQW9DO3FCQUNyQyxtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIlxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRWxlbWVudFJlZiwgT25EZXN0cm95LCBPbkluaXQsIFJlbmRlcmVyMiwgVGVtcGxhdGVSZWYsIGNvbXB1dGVkLCBlZmZlY3QsIGluamVjdCwgaW5wdXQsIG1vZGVsLCBvdXRwdXQsIHNpZ25hbCwgdW50cmFja2VkLCB2aWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IElTb3J0LCBMaWJzVWlDb21wb25lbnRzQnV0dG9uc1NvcnRDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWJ1dHRvbnMtc29ydCc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtcG9wb3Zlcic7XG5pbXBvcnQgeyBJRXZlbnQsIElFdmVudEN1c3RvbSwgSVN0cmluZywgVFlQRV9URU1QTEFURV9SRUYgfSBmcm9tICdAbGlicy11aS9pbnRlcmZhY2VzLXR5cGVzJztcbmltcG9ydCB7IExpYnNVaUNvbmZpZ1Byb2plY3RTZXJ2aWNlIH0gZnJvbSAnQGxpYnMtdWkvc2VydmljZXMtY29uZmlnLXByb2plY3QnO1xuaW1wb3J0IHsgVXRpbHNDYWNoZSwgVXRpbHNLZXlDb2RlQ29uc3RhbnQsIFV0aWxzTGFuZ3VhZ2VDb25zdGFudHMsIGZvcm1hdE51bWJlciwgaXNOaWwsIHJlbW92ZUVtb2ppLCBzZXRDYXJldFBvc2l0aW9uLCB1dWlkLCB2aWV3RGF0YU51bWJlckJ5TGFuZ3VhZ2UgfSBmcm9tICdAbGlicy11aS91dGlscyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIG1lcmdlTWFwLCB0YWtlLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGluZGV4SW5wdXRIdG1sIH0gZnJvbSAnLi9kZWZpbmVzL2luZGV4LWlmcmFtZS1hcmVhLmRlZmluZSc7XG5pbXBvcnQgeyBJRm9jdXNBbmRCbHVyRXZlbnQgfSBmcm9tICcuL2ludGVyZmFjZXMvZm9jdXMtYW5kLWJsdXItZXZlbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IElJbnB1dEZ1bmN0aW9uQ29udHJvbEV2ZW50IH0gZnJvbSAnLi9pbnRlcmZhY2VzL2Z1bmN0aW9uLWNvbnRyb2wtZXZlbnQuaW50ZXJmYWNlJztcblxuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlic191aS1jb21wb25lbnRzLWlucHV0cy1pbnB1dCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2lucHV0LmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNTb3J0Q29tcG9uZW50XG4gIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c0lucHV0c0lucHV0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvKiBQUk9QRVJUWSAqL1xuICBwcm90ZWN0ZWQgZGlzYWJsZUFzYyA9IHNpZ25hbChmYWxzZSk7XG4gIHByb3RlY3RlZCBkaXNhYmxlRGVzYyA9IHNpZ25hbChmYWxzZSk7XG4gIHByb3RlY3RlZCBodG1sSWZyYW1lQXJlYSA9IHNpZ25hbDxTYWZlSHRtbCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJvdGVjdGVkIGNvdW50RGlzcGxheSA9IGNvbXB1dGVkKHRoaXMuY291bnREaXNwbGF5Q29tcHV0ZWQuYmluZCh0aGlzKSk7XG4gIHByb3RlY3RlZCBtYXhMZW5ndGhEaXNwbGF5ID0gY29tcHV0ZWQoKCkgPT4gYCR7dmlld0RhdGFOdW1iZXJCeUxhbmd1YWdlKHRoaXMubWF4TGVuZ3RoKCkgfHwgMCwgZmFsc2UpfWApO1xuICBwcm90ZWN0ZWQgcGFkZGluZ1JpZ2h0Q3VzdG9tID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHByb3RlY3RlZCBpbnB1dElmcmFtZVJlZiA9IHNpZ25hbDxFbGVtZW50UmVmIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgREVGQVVMVF9NQVhfSEVJR0hUX1RFWFRfQVJFQSA9IDI1MDtcbiAgcHJpdmF0ZSBjaGFyRmlyc3RJc1plcm8gPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHByZUhlaWdodEFyZWEgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSBpZnJhbWVSZWY6IEhUTUxJRnJhbWVFbGVtZW50IHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIGRhdGFUZXh0UGFzdGUgPSBzaWduYWw8c3RyaW5nPignJyk7XG4gIHByaXZhdGUgb25EZXN0cm95ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAvKiBJTlBVVCAqL1xuICByZWFkb25seSB0YWdJbnB1dCA9IGlucHV0PCdpbnB1dCcgfCAndGV4dGFyZWEnIHwgJ2lmcmFtZS10ZXh0YXJlYScsICdpbnB1dCcgfCAndGV4dGFyZWEnIHwgJ2lmcmFtZS10ZXh0YXJlYScgfCB1bmRlZmluZWQ+KCdpbnB1dCcsIHsgdHJhbnNmb3JtOiB2YWx1ZSA9PiB2YWx1ZSA/PyAnaW5wdXQnIH0pO1xuICByZWFkb25seSBkYXRhVHlwZSA9IGlucHV0PCdzdHJpbmcnIHwgJ2ludCcgfCAnZmxvYXQnIHwgJ2JpZ2ludCc+KCdzdHJpbmcnKTtcbiAgcmVhZG9ubHkgdGFiSW5zZXJ0Q29udGVudFRhZ0lucHV0ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSB0ZXh0QXJlYUVudGVyTm90TmV3TGluZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgZW1pdEVtcHR5SW5EYXRhVHlwZU51bWJlciA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlKTtcbiAgcmVhZG9ubHkga2VlcFplcm9JblR5cGVJbnQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGF1dG9BZGRaZXJvTGVzc1RoYW4xMEluVHlwZUludCA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlKTtcbiAgcmVhZG9ubHkgaWdub3JlQmxvY2tJbnB1dE1heFZhbHVlID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgaGlkZGVuQ29udGVudCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTsgLy8gc+G7rSBk4bulbmcgxJHhu4Mgc2V0IHR5cGUgY2hvIGlucHV0IGThuqFuZyB0ZXh0IGhheSBwYXNzd29yZFxuICByZWFkb25seSBtYXhWYWx1ZU51bWJlciA9IG1vZGVsPG51bWJlcj4oKTtcbiAgcmVhZG9ubHkgbWluVmFsdWVOdW1iZXIgPSBtb2RlbDxudW1iZXI+KCk7XG4gIHJlYWRvbmx5IGZpeGVkRmxvYXQgPSBtb2RlbDxudW1iZXI+KCk7XG4gIHJlYWRvbmx5IGFjY2VwdE5lZ2F0aXZlVmFsdWUgPSBtb2RlbDxib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSk7XG4gIHJlYWRvbmx5IHZhbHVlVXBEb3duTnVtYmVyID0gaW5wdXQ8bnVtYmVyIHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSBjbGFzc0luY2x1ZGUgPSBpbnB1dDxzdHJpbmcsIHN0cmluZz4oJyB3LWZ1bGwgJywgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgfHwgJyB3LWZ1bGwgJyB9KTtcbiAgcmVhZG9ubHkgbWF4TGVuZ3RoID0gbW9kZWw8bnVtYmVyIHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSByZWFkb25seSA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlKTtcbiAgcmVhZG9ubHkgZGlzYWJsZSA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlKTtcbiAgcmVhZG9ubHkgbm9Cb3JkZXIgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBiYWNrZ3JvdW5kTm9uZSA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlKTtcbiAgcmVhZG9ubHkgYm9yZGVyRXJyb3IgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IHVzZUNvbG9yTW9kZUV4aXN0ID0gaW5wdXQ8Ym9vbGVhbiB8IHVuZGVmaW5lZD4oZmFsc2UpO1xuICByZWFkb25seSBwbGFjZWhvbGRlciA9IGlucHV0PHN0cmluZywgc3RyaW5nPignICcsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlIHx8ICcgJyB9KTtcbiAgcmVhZG9ubHkga2VlcFBsYWNlaG9sZGVyT25seSA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlKTtcbiAgcmVhZG9ubHkgdmFsdWUgPSBtb2RlbDxzdHJpbmcgfCBudW1iZXI+KCcnKTtcbiAgcmVhZG9ubHkgYXV0b1JlbW92ZUVtb2ppID0gaW5wdXQ8Ym9vbGVhbiB8IHVuZGVmaW5lZD4oZmFsc2UpO1xuICByZWFkb25seSBkZWZhdWx0SGVpZ2h0ID0gaW5wdXQ8bnVtYmVyLCBudW1iZXIgfCB1bmRlZmluZWQ+KDMyLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSB8fCAzMiB9KTtcbiAgcmVhZG9ubHkgbWluSGVpZ2h0VGV4dEFyZWEgPSBpbnB1dDxudW1iZXIgfCB1bmRlZmluZWQ+KCk7XG4gIHJlYWRvbmx5IG1heEhlaWdodFRleHRBcmVhID0gaW5wdXQ8bnVtYmVyLCBudW1iZXIgfCB1bmRlZmluZWQ+KHRoaXMuREVGQVVMVF9NQVhfSEVJR0hUX1RFWFRfQVJFQSwgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgfHwgdGhpcy5ERUZBVUxUX01BWF9IRUlHSFRfVEVYVF9BUkVBIH0pO1xuICByZWFkb25seSBmb2N1c1RpbWVPdXQgPSBpbnB1dDxudW1iZXIsIG51bWJlciB8IHVuZGVmaW5lZD4oNjAwLCB7IHRyYW5zZm9ybTogdmFsdWUgPT4gdmFsdWUgPz8gNjAwIH0pO1xuICByZWFkb25seSBibHVyVGltZU91dCA9IGlucHV0PG51bWJlciwgbnVtYmVyIHwgdW5kZWZpbmVkPigzMiwgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgfHwgMzIgfSk7XG4gIHJlYWRvbmx5IHpJbmRleFBvcG92ZXJDb250ZW50ID0gaW5wdXQ8bnVtYmVyLCBudW1iZXIgfCB1bmRlZmluZWQ+KDEwLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSB8fCAxMCB9KTtcbiAgcmVhZG9ubHkgY2xhc3NDb250YWluZXJJbnB1dCA9IGlucHV0PHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPigndy1mdWxsJywgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgfHwgJ3ctZnVsbCcgfSk7XG4gIHJlYWRvbmx5IHNob3dDb3VudCA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGlnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50ID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgcmVzaXplID0gaW5wdXQ8J2F1dG8nIHwgJ25vbmUnIHwgdW5kZWZpbmVkLCAnYXV0bycgfCAnbm9uZScgfCB1bmRlZmluZWQ+KCdhdXRvJywgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgfHwgJ2F1dG8nIH0pO1xuICByZWFkb25seSB0ZW1wbGF0ZUxlZnRCb3R0b21JbnB1dCA9IGlucHV0PFRlbXBsYXRlUmVmPFRZUEVfVEVNUExBVEVfUkVGPj4oKTtcbiAgcmVhZG9ubHkgdGVtcGxhdGVSaWdodEJvdHRvbUlucHV0ID0gaW5wdXQ8VGVtcGxhdGVSZWY8VFlQRV9URU1QTEFURV9SRUY+PigpO1xuICByZWFkb25seSBjbGFzc0NvbnRhaW5lckJvdHRvbUlucHV0ID0gaW5wdXQ8c3RyaW5nIHwgdW5kZWZpbmVkLCBzdHJpbmcgfCB1bmRlZmluZWQ+KCcgJywgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgfHwgJyAnIH0pO1xuICByZWFkb25seSBpZ25vcmVXaWR0aElucHV0MTAwID0gaW5wdXQ8Ym9vbGVhbj4oKTtcblxuICByZWFkb25seSBpY29uTGVmdENsYXNzID0gaW5wdXQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+KCcnLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSB8fCAnJyB9KTtcbiAgcmVhZG9ubHkgcG9wb3ZlckNvbnRlbnRJY29uTGVmdCA9IGlucHV0PHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPignJywgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgfHwgJycgfSk7XG4gIHJlYWRvbmx5IGljb25SaWdodENsYXNzID0gaW5wdXQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+KCcnLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSB8fCAnJyB9KTtcbiAgcmVhZG9ubHkgcG9wb3ZlckNvbnRlbnRJY29uUmlnaHQgPSBpbnB1dDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4oJycsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlIHx8ICcnIH0pO1xuICByZWFkb25seSByZXNldEF1dG9Db21wbGV0ZVBhc3N3b3JkID0gaW5wdXQ8Ym9vbGVhbiwgYm9vbGVhbiB8IHVuZGVmaW5lZD4oZmFsc2UsIHsgdHJhbnNmb3JtOiB2YWx1ZSA9PiB2YWx1ZSA/PyBmYWxzZSB9KTtcbiAgcmVhZG9ubHkgYWNjZXB0T25seUNsaWNrSWNvbiA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlKTtcbiAgcmVhZG9ubHkgc2V0SWNvblJpZ2h0Q29sb3JTYW1lQ29sb3JEaXNhYmxlUmVhZE9ubHkgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSk7XG4gIHJlYWRvbmx5IG9ubHlBY2NlcHROZWdhdGl2ZVZhbHVlID0gaW5wdXQ8Ym9vbGVhbiB8IHVuZGVmaW5lZD4oZmFsc2UpO1xuICByZWFkb25seSBtYXhMZW5ndGhOdW1iZXJDb3VudCA9IG1vZGVsPG51bWJlciB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgZm9jdXNJbnB1dCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcblxuICAvKiBPVVRQVVQgKi9cbiAgcmVhZG9ubHkgb3V0SGVpZ2h0QXJlYUNoYW5nZSA9IG91dHB1dDx7IGlzQ2hhbmdlOiBib29sZWFuLCBoZWlnaHQ6IG51bWJlciB9PigpO1xuICByZWFkb25seSBvdXRDaGFuZ2UgPSBvdXRwdXQ8YW55PigpO1xuICByZWFkb25seSBvdXRGb2N1c0FuZEJsdXJFdmVudCA9IG91dHB1dDxJRm9jdXNBbmRCbHVyRXZlbnQ+KCk7XG4gIHJlYWRvbmx5IG91dEVudGVyRXZlbnQgPSBvdXRwdXQ8SUV2ZW50PigpO1xuICByZWFkb25seSBvdXRJbnB1dEV2ZW50ID0gb3V0cHV0PElFdmVudD4oKTsvLyBlbWl0IHB1cmUgZXZlbnQgaW5wdXRcbiAgcmVhZG9ubHkgb3V0SWNvbkxlZnQgPSBvdXRwdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBvdXRJY29uUmlnaHQgPSBvdXRwdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBvdXRGdW5jdGlvbnNDb250cm9sID0gb3V0cHV0PElJbnB1dEZ1bmN0aW9uQ29udHJvbEV2ZW50PigpO1xuICByZWFkb25seSBvdXRGaWxlc0Ryb3AgPSBvdXRwdXQ8QXJyYXk8RmlsZT4+KCk7XG4gIHJlYWRvbmx5IG91dEZpbGVEcm9wID0gb3V0cHV0PEZpbGU+KCk7XG4gIHJlYWRvbmx5IG91dENoYW5nZVZhbHVlQnlCdXR0b25VcERvd24gPSBvdXRwdXQ8dm9pZD4oKTtcblxuICAvKiBWSUVXIENISUxEICovXG4gIHByb3RlY3RlZCBpbnB1dFJlZiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPignaW5wdXRSZWYnKTtcbiAgcHJvdGVjdGVkIHRleHRDb3VudFJlZiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPigndGV4dENvdW50UmVmJyk7XG4gIHByb3RlY3RlZCBlbGVtZW50UmlnaHRSZWYgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ2VsZW1lbnRSaWdodFJlZicpO1xuXG4gIC8qIElOSkVDVCAqL1xuICBwcml2YXRlIHJlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMik7XG4gIHByaXZhdGUgY29uZmlnUHJvamVjdFNlcnZpY2UgPSBpbmplY3QoTGlic1VpQ29uZmlnUHJvamVjdFNlcnZpY2UpO1xuICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2UgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG4gIHByaXZhdGUgc2FuaXRpemVyID0gaW5qZWN0KERvbVNhbml0aXplcik7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLm9ubHlBY2NlcHROZWdhdGl2ZVZhbHVlKCkpIHtcbiAgICAgICAgdGhpcy5hY2NlcHROZWdhdGl2ZVZhbHVlLnNldCh0cnVlKTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5FbGVtZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZGF0YVR5cGUoKSA9PT0gJ3N0cmluZycpIHtcblxuICAgICAgICBpZiAodGhpcy5FbGVtZW50LnZhbHVlICE9PSB0aGlzLnZhbHVlKCkpIHtcbiAgICAgICAgICB0aGlzLmluaXQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlTWF4TGVuZ3RoTWluTWF4VmFsdWVCeURhdGFUeXBlKCk7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMucGFyc2VWYWx1ZUJ5RGF0YVR5cGUodGhpcy5FbGVtZW50LnZhbHVlKTtcblxuICAgICAgaWYgKCh0aGlzLkVsZW1lbnQudmFsdWUgIT09ICcnICYmIHZhbHVlID09PSB0aGlzLnZhbHVlKCkpIHx8ICh0aGlzLkVsZW1lbnQudmFsdWUgPT09ICcnICYmIHRoaXMuZW1pdEVtcHR5SW5EYXRhVHlwZU51bWJlcigpICYmIHRoaXMudmFsdWUoKSA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmluaXQoKTtcbiAgICB9LCB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0pO1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5FbGVtZW50KSB7XG4gICAgICAgIHRoaXMub25EZXN0cm95Lm5leHQoKTtcbiAgICAgICAgdW50cmFja2VkKCgpID0+IHRoaXMuYWZ0ZXJWaWV3SW5pdCgpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaHRtbElmcmFtZUFyZWEuc2V0KHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKGluZGV4SW5wdXRIdG1sKHRoaXMubm9Cb3JkZXIoKSA/ICcnIDogYCR7dGhpcy5jb25maWdQcm9qZWN0U2VydmljZS5jb2xvclN0ZXBDb250cmFzdEZyb21PcmlnaW4oMjApPy5saWdodH1gKSkpO1xuICB9XG5cbiAgYWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAoIXRoaXMuRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm91dEhlaWdodEFyZWFDaGFuZ2UuZW1pdCh7IGlzQ2hhbmdlOiBmYWxzZSwgaGVpZ2h0OiB0aGlzLkVsZW1lbnQ/LnNjcm9sbEhlaWdodCB9KTtcbiAgICB0aGlzLm91dEZ1bmN0aW9uc0NvbnRyb2wuZW1pdCh7XG4gICAgICBmb2N1czogdGhpcy5mb2N1cy5iaW5kKHRoaXMpLFxuICAgICAgYmx1cjogdGhpcy5ibHVyLmJpbmQodGhpcyksXG4gICAgICBpbnNlcnRDb250ZW50OiB0aGlzLmFkZERhdGFUb1NlbGVjdGlvbklucHV0LmJpbmQodGhpcyksXG4gICAgICByZXNldFZhbHVlOiB0aGlzLnJlc2V0VmFsdWUuYmluZCh0aGlzKSxcbiAgICAgIGdldEVsZW1lbnRWYWx1ZTogdGhpcy5nZXRFbGVtZW50VmFsdWUuYmluZCh0aGlzKSxcbiAgICAgIGNoZWNrQW5kRGlzYWJsZVVwRG93bkJ1dHRvbjogdGhpcy5jaGVja0FuZERpc2FibGVVcERvd25CdXR0b24uYmluZCh0aGlzKVxuICAgIH0pO1xuICAgIHRoaXMuaW5pdCgpO1xuXG4gICAgdGhpcy5pbml0RXZlbnQoJ2ZvY3VzJywgdGhpcy5pZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudCgpKS5zdWJzY3JpYmUoKGU6IElFdmVudCkgPT4gdGhpcy5vdXRGb2N1c0FuZEJsdXJFdmVudC5lbWl0KHsgbmFtZTogJ2ZvY3VzJywgZXZlbnQ6IGUgfSkpO1xuICAgIHRoaXMuaW5pdEV2ZW50KCdibHVyJywgdGhpcy5pZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudCgpKS5zdWJzY3JpYmUoKGU6IElFdmVudCkgPT4gdGhpcy5vdXRGb2N1c0FuZEJsdXJFdmVudC5lbWl0KHsgbmFtZTogJ2JsdXInLCBldmVudDogZSB9KSk7XG4gICAgY29uc3QgbW91c2VEb3duRXZlbnQgPSB0aGlzLmluaXRFdmVudCgnbW91c2Vkb3duJywgdGhpcy5pZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudCgpKS5waXBlKHRha2UoMSkpO1xuICAgIGNvbnN0IGtleURvd25FdmVudCA9IHRoaXMuaW5pdEV2ZW50KCdrZXlkb3duJywgdGhpcy5pZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudCgpKTtcbiAgICBjb25zdCBpbnB1dEV2ZW50ID0gdGhpcy5pbml0RXZlbnQoJ2lucHV0JywgdGhpcy5pZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudCgpKTtcbiAgICBjb25zdCBjdXRFdmVudCA9IHRoaXMuaW5pdEV2ZW50KCdjdXQnLCB0aGlzLmlnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50KCkpO1xuICAgIGNvbnN0IHBhc3RlRXZlbnQgPSB0aGlzLmluaXRFdmVudCgncGFzdGUnLCB0aGlzLmlnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50KCkpO1xuICAgIGNvbnN0IGtleXVwRXZlbnQgPSB0aGlzLmluaXRFdmVudCgna2V5dXAnLCB0aGlzLmlnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50KCkpO1xuXG4gICAgdGhpcy5pbml0RXZlbnQoJ2NsaWNrJywgdGhpcy5pZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudCgpID8/IHRydWUpLnN1YnNjcmliZSgpO1xuICAgIHRoaXMuaW5pdEV2ZW50KCdkcmFnb3ZlcicsIHRoaXMuaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnQoKSkucGlwZSh0YXAoKGV2ZW50OiBJRXZlbnQpID0+IHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gJ2NvcHknO1xuICAgIH0pKS5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMuaW5pdEV2ZW50KCdkcm9wJywgdGhpcy5pZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudCgpKS5zdWJzY3JpYmUodGhpcy5jaGVja0FuZEVtaXRGaWxlcy5iaW5kKHRoaXMpKTtcbiAgICBwYXN0ZUV2ZW50LnN1YnNjcmliZSh0aGlzLmNoZWNrQW5kRW1pdEZpbGVzLmJpbmQodGhpcykpO1xuXG4gICAgdGhpcy5jb21iaW5lT2JzZXJ2YWJsZShtb3VzZURvd25FdmVudCwgcGFzdGVFdmVudCk7XG4gICAgdGhpcy5jb21iaW5lT2JzZXJ2YWJsZShtb3VzZURvd25FdmVudCwgY3V0RXZlbnQpO1xuICAgIGtleURvd25FdmVudC5waXBlKFxuICAgICAgdGFrZSgxKSxcbiAgICAgIHRhcCgoZTogSUV2ZW50KSA9PiB0aGlzLmNoZWNrVHlwZU51bWJlcihlLCAna2V5JykpLFxuICAgICAgbWVyZ2VNYXAoKCkgPT4gaW5wdXRFdmVudCksXG4gICAgICB0YXAoKGU6IElFdmVudCkgPT4gdGhpcy5jaGVja1R5cGVOdW1iZXIoZSwgJ2RhdGEnKSksXG4gICAgKS5zdWJzY3JpYmUoKGU6IElFdmVudCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZGF0YVR5cGUoKSA9PT0gJ3N0cmluZycgJiYgdGhpcy5tYXhMZW5ndGgoKSAmJiAoZS5pbnB1dFR5cGUgPT09ICdpbnNlcnRDb21wb3NpdGlvblRleHQnIHx8IGUuaW5wdXRUeXBlID09PSAnaW5zZXJ0VGV4dCcpICYmIGUudGFyZ2V0LnZhbHVlPy5sZW5ndGggPiAodGhpcy5tYXhMZW5ndGgoKSB8fCAwKSkge1xuICAgICAgICBlLnRhcmdldC52YWx1ZSA9IGUudGFyZ2V0LnZhbHVlLnNsaWNlKDAsIHRoaXMubWF4TGVuZ3RoKCkpO1xuICAgICAgfVxuICAgICAgdGhpcy5wcm9jZXNzRXZlbnRBbmRFbWl0VmFsdWUoZSk7XG4gICAgfSk7XG5cbiAgICBrZXl1cEV2ZW50LnBpcGUoXG4gICAgICBmaWx0ZXIoKGV2ZW50OiBJRXZlbnQpID0+IGV2ZW50LmtleUNvZGUgPT09IFV0aWxzS2V5Q29kZUNvbnN0YW50LkVOVEVSKSxcbiAgICAgIGZpbHRlcigoZXZlbnQ6IElFdmVudCkgPT4gIXRoaXMudGV4dEFyZWFFbnRlck5vdE5ld0xpbmUoKSB8fCAodGhpcy50ZXh0QXJlYUVudGVyTm90TmV3TGluZSgpICYmICFldmVudC5zaGlmdEtleSkpKS5zdWJzY3JpYmUoKGV2ZW50OiBJRXZlbnQpID0+IHRoaXMub3V0RW50ZXJFdmVudC5lbWl0KGV2ZW50KSk7XG5cbiAgICBpZiAodGhpcy5kYXRhVHlwZSgpID09PSAnc3RyaW5nJyAmJiAodGhpcy50YWdJbnB1dCgpICE9PSAnaW5wdXQnIHx8ICh0aGlzLnRhZ0lucHV0KCkgPT09ICdpbnB1dCcgJiYgdGhpcy50YWJJbnNlcnRDb250ZW50VGFnSW5wdXQoKSkpKSB7XG4gICAgICBrZXlEb3duRXZlbnQucGlwZShcbiAgICAgICAgZmlsdGVyKChldmVudDogSUV2ZW50KSA9PiBldmVudC5rZXlDb2RlID09PSBVdGlsc0tleUNvZGVDb25zdGFudC5UQUIpLFxuICAgICAgICB0YXAoKGV2ZW50OiBJRXZlbnQpID0+IGV2ZW50LnByZXZlbnREZWZhdWx0KCkpLFxuICAgICAgICBmaWx0ZXIoKGV2ZW50OiBJRXZlbnQpID0+ICFldmVudC50YXJnZXQudmFsdWUgfHwgIXRoaXMubWF4TGVuZ3RoKCkgfHwgZXZlbnQudGFyZ2V0LnZhbHVlLmxlbmd0aCA8ICh0aGlzLm1heExlbmd0aCgpIHx8IDI1KSksXG4gICAgICAgIHRhcCgoZXZlbnQ6IElFdmVudCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLnJlYWRvbmx5KCkgfHwgdGhpcy5kaXNhYmxlKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5pbnNldFZhbHVlVG9TZWxlY3Rpb25TdGFydCgnXFx0JywgZXZlbnQpO1xuICAgICAgICB9KVxuICAgICAgKS5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50ZXh0QXJlYUVudGVyTm90TmV3TGluZSgpKSB7XG4gICAgICBrZXlEb3duRXZlbnQucGlwZShcbiAgICAgICAgZmlsdGVyKChldmVudDogSUV2ZW50KSA9PiBldmVudC5rZXlDb2RlID09PSBVdGlsc0tleUNvZGVDb25zdGFudC5FTlRFUiAmJiAhZXZlbnQuc2hpZnRLZXkpLFxuICAgICAgICB0YXAoKGU6IElFdmVudCkgPT4gZS5wcmV2ZW50RGVmYXVsdCgpKVxuICAgICAgKS5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgfVxuXG4gIC8qIEZVTkNUSU9OUyovXG4gIHByaXZhdGUgdXBkYXRlTWF4TGVuZ3RoTWluTWF4VmFsdWVCeURhdGFUeXBlKCkge1xuICAgIGlmICh0aGlzLmRhdGFUeXBlKCkgPT09ICdpbnQnIHx8IHRoaXMuZGF0YVR5cGUoKSA9PT0gJ2Zsb2F0Jykge1xuICAgICAgdGhpcy5tYXhMZW5ndGgudXBkYXRlKHZhbHVlID0+IHtcbiAgICAgICAgcmV0dXJuICF2YWx1ZSB8fCB2YWx1ZSA+IDIxID8gMjEgOiB2YWx1ZTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5taW5WYWx1ZU51bWJlci51cGRhdGUodmFsdWUgPT4gdmFsdWUgfHwgTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIpO1xuICAgICAgdGhpcy5tYXhWYWx1ZU51bWJlci51cGRhdGUodmFsdWUgPT4gdmFsdWUgfHwgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpO1xuICAgIH1cbiAgICBpZiAodGhpcy5kYXRhVHlwZSgpID09PSAnYmlnaW50Jykge1xuICAgICAgdGhpcy5tYXhMZW5ndGgudXBkYXRlKHZhbHVlID0+ICF2YWx1ZSB8fCB2YWx1ZSA+IDI1ID8gMjUgOiB2YWx1ZSk7XG4gICAgICB0aGlzLmZpeGVkRmxvYXQudXBkYXRlKHZhbHVlID0+IHZhbHVlID8/IDQpO1xuICAgICAgdGhpcy5tYXhMZW5ndGhOdW1iZXJDb3VudC51cGRhdGUodmFsdWUgPT4gdmFsdWUgPz8gMTkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0RWxlbWVudFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLkVsZW1lbnQ/LnZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0FuZEVtaXRGaWxlcyhldmVudDogSUV2ZW50KSB7XG4gICAgY29uc3QgZmlsZXMgPSBldmVudC5kYXRhVHJhbnNmZXI/LmZpbGVzIHx8IGV2ZW50LmNsaXBib2FyZERhdGE/LmZpbGVzO1xuICAgIGNvbnN0IHRleHQgPSAoZXZlbnQuY2xpcGJvYXJkRGF0YSB8fCAod2luZG93IGFzIGFueSkuY2xpcGJvYXJkRGF0YSk/LmdldERhdGEoJ3RleHQnKTtcblxuICAgIHRoaXMuZGF0YVRleHRQYXN0ZS5zZXQodGV4dCk7XG4gICAgaWYgKCFmaWxlcyB8fCAhZmlsZXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGV4dCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgY29uc3QgZmlsZUxpc3QgPSBbXTtcblxuICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChmaWxlKSA9PT0gJ1tvYmplY3QgRmlsZV0nKSB7XG4gICAgICAgIHRoaXMub3V0RmlsZURyb3AuZW1pdChmaWxlKTtcbiAgICAgICAgZmlsZUxpc3QucHVzaChmaWxlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5vdXRGaWxlc0Ryb3AuZW1pdChmaWxlTGlzdCk7XG5cbiAgfVxuXG4gIHByaXZhdGUgaW5zZXRWYWx1ZVRvU2VsZWN0aW9uU3RhcnQodGV4dDogc3RyaW5nLCBldmVudDogSUV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLkVsZW1lbnQuc2V0UmFuZ2VUZXh0KHRleHQsIHRoaXMuRWxlbWVudC5zZWxlY3Rpb25TdGFydCwgdGhpcy5FbGVtZW50LnNlbGVjdGlvblN0YXJ0LCAnZW5kJyk7XG4gICAgdGhpcy5wcm9jZXNzRXZlbnRBbmRFbWl0VmFsdWUoZXZlbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5pbnB1dElmcmFtZVJlZigpPy5uYXRpdmVFbGVtZW50IHx8IHRoaXMuaW5wdXRSZWYoKT8ubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2hhbmdlVmFsdWUoZGF0YTogSVNvcnQpIHtcbiAgICBkYXRhLnJlc2V0KCk7XG4gICAgaWYgKHRoaXMuZGlzYWJsZSgpIHx8IHRoaXMucmVhZG9ubHkoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBvcGVyYXRvciA9IGRhdGEubW9kZSA9PT0gJ2FzYycgPyAxIDogLTE7XG4gICAgbGV0IHZhbHVlID0gK3RoaXMudmFsdWUoKSB8fCAwO1xuICAgIGNvbnN0IHNlcGFyYXRvciA9IFV0aWxzQ2FjaGUuZ2V0TGFuZygpID09PSBVdGlsc0xhbmd1YWdlQ29uc3RhbnRzLlZJID8gJy4nIDogJywnO1xuICAgIGNvbnN0IHNwbGl0VmFsdWUgPSAodGhpcy52YWx1ZSgpIHx8IHRoaXMubWluVmFsdWVOdW1iZXIoKSB8fCAwKS50b1N0cmluZygpLnNwbGl0KHNlcGFyYXRvcik7XG4gICAgY29uc3QgZGF0YUJlaGluZFNlcGFyYXRvciA9IHNwbGl0VmFsdWU/LlsxXTtcblxuICAgIGlmICh0aGlzLmRhdGFUeXBlKCkgPT09ICdiaWdpbnQnKSB7XG4gICAgICB2YWx1ZSA9ICsoc3BsaXRWYWx1ZT8uWzBdIHx8IDApO1xuICAgIH1cbiAgICB2YWx1ZSA9IHZhbHVlICsgKHRoaXMudmFsdWVVcERvd25OdW1iZXIoKSA/PyAxKSAqIG9wZXJhdG9yO1xuICAgIGlmICghdGhpcy5hY2NlcHROZWdhdGl2ZVZhbHVlKCkgJiYgdmFsdWUgPCAwKSB7XG4gICAgICB2YWx1ZSA9IDA7XG4gICAgfVxuICAgIGNvbnN0IGRhdGFFbWl0ID0gdGhpcy5kYXRhVHlwZSgpID09PSAnYmlnaW50JyA/IGAke3ZhbHVlfSR7ZGF0YUJlaGluZFNlcGFyYXRvciA/IHNlcGFyYXRvciA6ICcnfSR7ZGF0YUJlaGluZFNlcGFyYXRvcn1gIDogdmFsdWU7XG4gICAgdGhpcy52YWx1ZS5zZXQoZGF0YUVtaXQpXG4gICAgdGhpcy5vdXRDaGFuZ2UuZW1pdChkYXRhRW1pdCk7XG4gICAgdGhpcy5vdXRDaGFuZ2VWYWx1ZUJ5QnV0dG9uVXBEb3duLmVtaXQoKTtcbiAgICB0aGlzLmNoZWNrQW5kRGlzYWJsZVVwRG93bkJ1dHRvbih2YWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckV2ZW50SWNvbkxlZnQoZTogRXZlbnQsIGV2ZW50TmFtZTogc3RyaW5nKSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoKHRoaXMuZGlzYWJsZSgpIHx8IHRoaXMucmVhZG9ubHkoKSkgJiYgIXRoaXMuYWNjZXB0T25seUNsaWNrSWNvbigpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMub3V0SWNvbkxlZnQuZW1pdChldmVudE5hbWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJFdmVudEljb25SaWdodChlOiBFdmVudCwgZXZlbnROYW1lOiBzdHJpbmcpIHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmICgodGhpcy5kaXNhYmxlKCkgfHwgdGhpcy5yZWFkb25seSgpKSAmJiAhdGhpcy5hY2NlcHRPbmx5Q2xpY2tJY29uKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5vdXRJY29uUmlnaHQuZW1pdChldmVudE5hbWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjaGVja0FuZERpc2FibGVVcERvd25CdXR0b24odmFsdWU6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmRhdGFUeXBlKCkgIT09ICdpbnQnICYmIHRoaXMuZGF0YVR5cGUoKSAhPT0gJ2Zsb2F0JyAmJiB0aGlzLmRhdGFUeXBlKCkgIT09ICdiaWdpbnQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZGlzYWJsZUFzYy5zZXQoZmFsc2UpO1xuICAgIHRoaXMuZGlzYWJsZURlc2Muc2V0KGZhbHNlKTtcbiAgICB0aGlzLm1pblZhbHVlTnVtYmVyLnVwZGF0ZSh2YWx1ZSA9PiB2YWx1ZSA/PyBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUik7XG4gICAgdGhpcy5tYXhWYWx1ZU51bWJlci51cGRhdGUodmFsdWUgPT4gdmFsdWUgPz8gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpO1xuICAgIHZhbHVlID0gdmFsdWUgPz8gMDtcblxuICAgIGlmICghaXNOaWwodGhpcy5tYXhWYWx1ZU51bWJlcigpKSAmJiB2YWx1ZSA+PSAodGhpcy5tYXhWYWx1ZU51bWJlcigpID8/IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSkge1xuICAgICAgdGhpcy5kaXNhYmxlQXNjLnNldCh0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAoIWlzTmlsKHRoaXMubWluVmFsdWVOdW1iZXIoKSkgJiYgdmFsdWUgPD0gKHRoaXMubWluVmFsdWVOdW1iZXIoKSB8fCAwKSkge1xuICAgICAgdGhpcy5kaXNhYmxlRGVzYy5zZXQodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGluaXRFdmVudChldmVudE5hbWU6IHN0cmluZywgaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnQ/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxJRXZlbnQ+IHtcbiAgICByZXR1cm4gZnJvbUV2ZW50PElFdmVudD4odGhpcy5FbGVtZW50LCBldmVudE5hbWUpLnBpcGUoXG4gICAgICB0YXAoKGU6IElFdmVudCkgPT4ge1xuICAgICAgICBpZiAoIWlnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50KSB7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm91dElucHV0RXZlbnQuZW1pdChlKTtcbiAgICAgIH0pLFxuICAgICAgdGFrZVVudGlsKHRoaXMub25EZXN0cm95KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlICYmIHRoaXMuZGF0YVR5cGUoKSA9PT0gJ2JpZ2ludCcpIHtcbiAgICAgIGNvbnN0IHNlcGFyYXRvciA9IChVdGlsc0NhY2hlLmdldExhbmcoKSA9PT0gVXRpbHNMYW5ndWFnZUNvbnN0YW50cy5WSSkgPyAnLicgOiAnLCc7XG4gICAgICBsZXQgW2ludCwgZGVjaW1hbF0gPSB2YWx1ZS5zcGxpdChzZXBhcmF0b3IpO1xuICAgICAgY29uc3QgZGVjaW1hbFNwbGl0ID0gZGVjaW1hbCA/IGRlY2ltYWwuc3BsaXQoJycpIDogW107XG4gICAgICBjb25zdCBkZWNpbWFsRXZlcnlaZXJvID0gZGVjaW1hbFNwbGl0LmV2ZXJ5KGl0ZW0gPT4gaXRlbSA9PT0gJzAnKTtcblxuICAgICAgaWYgKGludCA9PT0gJy0wJyAmJiAoIWRlY2ltYWwgfHwgZGVjaW1hbEV2ZXJ5WmVybykpIHtcbiAgICAgICAgaW50ID0gJzAnO1xuICAgICAgfVxuICAgICAgaWYgKCFkZWNpbWFsIHx8IGRlY2ltYWxFdmVyeVplcm8pIHtcbiAgICAgICAgZGVjaW1hbCA9ICcwJztcbiAgICAgIH1cbiAgICAgIGlmIChkZWNpbWFsU3BsaXQuc29tZShpdGVtID0+IGl0ZW0gIT09ICcwJykpIHtcbiAgICAgICAgY29uc3QgZGVjaW1hbFJldmVyc2UgPSBkZWNpbWFsU3BsaXQucmV2ZXJzZSgpLmpvaW4oJycpO1xuXG4gICAgICAgIGRlY2ltYWwgPSBkZWNpbWFsUmV2ZXJzZS5yZXBsYWNlKC8oXlswXSspLywgJycpLnNwbGl0KCcnKS5yZXZlcnNlKCkuam9pbignJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBgJHtpbnR9JHtzZXBhcmF0b3J9JHtkZWNpbWFsfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0KCkge1xuICAgIGlmICghdGhpcy5tYXhMZW5ndGgoKSkge1xuICAgICAgdGhpcy51cGRhdGVNYXhMZW5ndGhNaW5NYXhWYWx1ZUJ5RGF0YVR5cGUoKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLkVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGVsZW1lbnRWYWx1ZSA9IHRoaXMuY29udmVydFZhbHVlKGAke3RoaXMudmFsdWUoKSA/PyAnJ31gKTtcblxuICAgIGlmICh0aGlzLmRhdGFUeXBlKCkgIT09ICdzdHJpbmcnKSB7XG4gICAgICBlbGVtZW50VmFsdWUgPSBlbGVtZW50VmFsdWUucmVwbGFjZSgobmV3IFJlZ0V4cChgW14wLTkuLCR7dGhpcy5hY2NlcHROZWdhdGl2ZVZhbHVlKCkgPyAnLScgOiAnJ31dYCwgJ2cnKSksICcnKTtcbiAgICAgIGlmIChVdGlsc0NhY2hlLmdldExhbmcoKSA9PT0gVXRpbHNMYW5ndWFnZUNvbnN0YW50cy5FTikge1xuICAgICAgICBlbGVtZW50VmFsdWUgPSBlbGVtZW50VmFsdWUucmVwbGFjZSgvWyxdLywgJycpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLkVsZW1lbnQudmFsdWUgPSBlbGVtZW50VmFsdWU7XG5cbiAgICBjb25zdCBldmVudEZha2U6IElFdmVudEN1c3RvbSA9IHsgcHJldmVudERlZmF1bHQ6ICgpID0+IHsgcmV0dXJuIH0sIHRhcmdldDogdGhpcy5FbGVtZW50LCBkYXRhOiBlbGVtZW50VmFsdWUsIGZha2VFdmVudDogdHJ1ZSB9O1xuXG4gICAgdGhpcy5jaGVja1R5cGVOdW1iZXIoZXZlbnRGYWtlLCAnZGF0YScpO1xuICAgIHRoaXMucHJvY2Vzc0V2ZW50QW5kRW1pdFZhbHVlKGV2ZW50RmFrZSk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NFdmVudEFuZEVtaXRWYWx1ZShlOiBJRXZlbnQgfCBJRXZlbnRDdXN0b20pOiB2b2lkIHtcbiAgICBjb25zdCB2YWx1ZTogYW55ID0gdGhpcy5wYXJzZVZhbHVlQnlEYXRhVHlwZShlLnRhcmdldC52YWx1ZSk7XG5cbiAgICBpZiAodGhpcy5kYXRhVHlwZSgpICE9PSAnc3RyaW5nJyAmJiAhdGhpcy5pZ25vcmVCbG9ja0lucHV0TWF4VmFsdWUoKSAmJiAhaXNOaWwodGhpcy5tYXhWYWx1ZU51bWJlcigpKSAmJiB2YWx1ZSA+ICh0aGlzLm1heFZhbHVlTnVtYmVyKCkgfHwgMCkgJiYgdGhpcy52YWx1ZSgpIDwgdmFsdWUpIHtcbiAgICAgIGNvbnN0IHZhbHVlRGlzcGxheSA9IHZpZXdEYXRhTnVtYmVyQnlMYW5ndWFnZShgJHt0aGlzLnZhbHVlKCl9YC5yZXBsYWNlKC9bLl0vZywgJywnKSwgdGhpcy5hY2NlcHROZWdhdGl2ZVZhbHVlKCksICh0aGlzLmZpeGVkRmxvYXQoKSA/PyAxNCkpO1xuXG4gICAgICBlLnRhcmdldC52YWx1ZSA9IGAke3RoaXMuZ2V0Q2hlY2taZXJvKCt2YWx1ZURpc3BsYXksIGUudGFyZ2V0LnZhbHVlKX0ke3ZhbHVlRGlzcGxheX1gO1xuXG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRXZlbnRBbmRFbWl0VmFsdWUoZSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRhdGFUeXBlKCkgIT09ICdzdHJpbmcnICYmIGlzTmlsKHZhbHVlKSkge1xuICAgICAgZS50YXJnZXQudmFsdWUgPSAwO1xuXG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRXZlbnRBbmRFbWl0VmFsdWUoZSk7XG4gICAgfVxuXG4gICAgaWYgKGUuZmFrZUV2ZW50ICYmIChgJHt0aGlzLnZhbHVlKCkgPz8gJyd9YCA9PT0gYCR7dmFsdWV9YCB8fCAodGhpcy5lbWl0RW1wdHlJbkRhdGFUeXBlTnVtYmVyKCkgJiYgZS50YXJnZXQudmFsdWUudHJpbSgpID09PSAnJykpKSB7XG4gICAgICB0aGlzLmNoZWNrQW5kRGlzYWJsZVVwRG93bkJ1dHRvbih0aGlzLmRhdGFUeXBlKCkgPT09ICdiaWdpbnQnID8gdmFsdWUgOiArdmFsdWUpO1xuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5jYWxjdWxhdG9ySGVpZ2h0VGV4dEFyZWEoZSk7XG4gICAgICB9LCAyNTApO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudmFsdWUuc2V0KHZhbHVlKTtcbiAgICBpZiAodGhpcy5lbWl0RW1wdHlJbkRhdGFUeXBlTnVtYmVyKCkgJiYgZS50YXJnZXQudmFsdWUudHJpbSgpID09PSAnJykge1xuICAgICAgY29uc3QgZGF0YUVtaXQgPSB0aGlzLmRhdGFUeXBlKCkgPT09ICdzdHJpbmcnID8gJycgOiB1bmRlZmluZWQ7XG4gICAgICB0aGlzLnZhbHVlLnNldChkYXRhRW1pdCBhcyBhbnkpO1xuICAgIH1cbiAgICB0aGlzLm91dENoYW5nZS5lbWl0KHRoaXMudmFsdWUoKSk7XG4gICAgdGhpcy5jaGVja0FuZERpc2FibGVVcERvd25CdXR0b24odGhpcy5kYXRhVHlwZSgpID09PSAnYmlnaW50JyA/IHZhbHVlIDogK3ZhbHVlKTtcbiAgICB0aGlzLmNhbGN1bGF0b3JIZWlnaHRUZXh0QXJlYShlKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tNYXhMZW5ndGhOdW1iZXJBbmRTZXRWYWx1ZSh2YWx1ZURpc3BsYXk6IHN0cmluZywgZTogSUV2ZW50IHwgSUV2ZW50Q3VzdG9tKTogYm9vbGVhbiB7XG4gICAgaWYgKGlzTmlsKHRoaXMudmFsdWUoKSkgfHwgKCt0aGlzLnZhbHVlKCkgPiAwICYmIHRoaXMucGFyc2VWYWx1ZUJ5RGF0YVR5cGUodmFsdWVEaXNwbGF5KSA8IHRoaXMudmFsdWUoKSkgfHwgKCt0aGlzLnZhbHVlKCkgPCAwICYmIHRoaXMucGFyc2VWYWx1ZUJ5RGF0YVR5cGUodmFsdWVEaXNwbGF5KSA+IHRoaXMudmFsdWUoKSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgdmFsdWVDb21wYXJlID0gZm9ybWF0TnVtYmVyKHZhbHVlRGlzcGxheSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBudW1iZXJzID0gdmFsdWVDb21wYXJlLnNwbGl0KCcuJyk7XG4gICAgbGV0IGxlbmd0aFZhbHVlQ29tcGFyZSA9IDA7XG4gICAgbGV0IG1heExlbmd0aCA9ICh0aGlzLmFjY2VwdE5lZ2F0aXZlVmFsdWUoKSAmJiB0eXBlb2YgK3RoaXMudmFsdWUoKSA9PT0gJ251bWJlcicgJiYgK3RoaXMudmFsdWUoKSA8IDApID8gKHRoaXMubWF4TGVuZ3RoKCkgfHwgMjEpICsgMSA6ICh0aGlzLm1heExlbmd0aCgpIHx8IDIxKTtcblxuICAgIGlmICh0aGlzLmRhdGFUeXBlKCkgPT09ICdmbG9hdCcpIHtcbiAgICAgIG1heExlbmd0aC0tO1xuICAgIH1cbiAgICBpZiAobnVtYmVycyAmJiBudW1iZXJzWzBdKSB7XG4gICAgICBsZW5ndGhWYWx1ZUNvbXBhcmUgPSB2aWV3RGF0YU51bWJlckJ5TGFuZ3VhZ2UoYCR7bnVtYmVyc1swXX1gLnJlcGxhY2UoL1suXS9nLCAnLCcpLCB0aGlzLmFjY2VwdE5lZ2F0aXZlVmFsdWUoKSwgKHRoaXMuZml4ZWRGbG9hdCgpID8/IDE0KSkubGVuZ3RoO1xuICAgIH1cbiAgICBpZiAobnVtYmVycyAmJiBudW1iZXJzWzFdKSB7XG4gICAgICBsZW5ndGhWYWx1ZUNvbXBhcmUgKz0gMSArIG51bWJlcnNbMV0ubGVuZ3RoO1xuICAgIH1cbiAgICBpZiAobWF4TGVuZ3RoICYmIGxlbmd0aFZhbHVlQ29tcGFyZSA+PSBtYXhMZW5ndGgpIHtcbiAgICAgIGNvbnN0IHZhbHVlRGlzcGxheSA9IHZpZXdEYXRhTnVtYmVyQnlMYW5ndWFnZSgobGVuZ3RoVmFsdWVDb21wYXJlID09PSBtYXhMZW5ndGggPyB2YWx1ZUNvbXBhcmUgOiBgJHt0aGlzLnZhbHVlKCl9YCkucmVwbGFjZSgvWy5dL2csICcsJyksIHRoaXMuYWNjZXB0TmVnYXRpdmVWYWx1ZSgpLCAodGhpcy5maXhlZEZsb2F0KCkgPz8gMTQpKTtcblxuICAgICAgZS50YXJnZXQudmFsdWUgPSBgJHt0aGlzLmdldENoZWNrWmVybygrdmFsdWVEaXNwbGF5LCBlLnRhcmdldC52YWx1ZSl9JHt2YWx1ZURpc3BsYXl9YDtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja1R5cGVOdW1iZXIoZTogSUV2ZW50IHwgSUV2ZW50Q3VzdG9tLCBmaWVsZE5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGN1cnJlbnRMYW5nID0gVXRpbHNDYWNoZS5nZXRMYW5nKCk7XG4gICAgY29uc3Qgc2VwYXJhdG9yID0gKGN1cnJlbnRMYW5nID09PSBVdGlsc0xhbmd1YWdlQ29uc3RhbnRzLlZJKSA/ICcuJyA6ICcsJztcbiAgICBjb25zdCBzZXBhcmF0b3JSZXZlcnQgPSAoY3VycmVudExhbmcgPT09IFV0aWxzTGFuZ3VhZ2VDb25zdGFudHMuVkkpID8gJywnIDogJy4nO1xuICAgIGxldCB2YWx1ZVRhcmdldDogSVN0cmluZyA9IGUudGFyZ2V0LnZhbHVlO1xuICAgIGNvbnN0IHNlbGVjdGlvblN0YXJ0ID0gZS50YXJnZXQuc2VsZWN0aW9uU3RhcnQgLSAxO1xuICAgIGNvbnN0IHsgZGF0YSwga2V5Q29kZSB9ID0gZTtcblxuICAgIHRoaXMuY2hhckZpcnN0SXNaZXJvLnNldChmYWxzZSk7XG4gICAgaWYgKHZhbHVlVGFyZ2V0LmNoYXJBdCgwKSA9PT0gJzAnKSB7XG4gICAgICB0aGlzLmNoYXJGaXJzdElzWmVyby5zZXQodHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0YVR5cGUoKSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmICh0aGlzLmF1dG9SZW1vdmVFbW9qaSgpKSB7XG4gICAgICAgIGUudGFyZ2V0LnZhbHVlID0gcmVtb3ZlRW1vamkodmFsdWVUYXJnZXQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICgvWzAtOV0vZy50ZXN0KGRhdGEpICYmIHZhbHVlVGFyZ2V0LmNoYXJBdChzZWxlY3Rpb25TdGFydCArIDEpID09PSAnLScpIHtcbiAgICAgIHZhbHVlVGFyZ2V0ID0gdmFsdWVUYXJnZXQucmVwbGFjZUF0KDAsICcnKSBhcyBJU3RyaW5nO1xuICAgIH1cbiAgICBsZXQgc3RyUmVnZXggPSBgW14wLTkuLCR7dGhpcy5hY2NlcHROZWdhdGl2ZVZhbHVlKCkgPyAnLScgOiAnJ31dYDtcblxuICAgIGlmICgobmV3IFJlZ0V4cChzdHJSZWdleCwgJ2dpJykpLnRlc3QoKGUgYXMgYW55KVtmaWVsZE5hbWVdKSAmJiBrZXlDb2RlICE9PSBVdGlsc0tleUNvZGVDb25zdGFudC5CQUNLU1BBQ0UpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGUudGFyZ2V0LnZhbHVlID0gdmFsdWVUYXJnZXQgPSBlLnRhcmdldC52YWx1ZS5yZXBsYWNlKChuZXcgUmVnRXhwKHN0clJlZ2V4LCAnZ2knKSksICcnKSBhcyBJU3RyaW5nO1xuICAgIH1cbiAgICBpZiAoIWUuZmFrZUV2ZW50KSB7XG4gICAgICBzd2l0Y2ggKGRhdGEpIHtcbiAgICAgICAgY2FzZSBzZXBhcmF0b3I6XG4gICAgICAgICAgdmFsdWVUYXJnZXQgPSB2YWx1ZVRhcmdldC5yZXBsYWNlKChuZXcgUmVnRXhwKGBbJHtzZXBhcmF0b3J9XWAsICdnaScpKSwgJycpIGFzIElTdHJpbmc7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBzZXBhcmF0b3JSZXZlcnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRMYW5nID09PSBVdGlsc0xhbmd1YWdlQ29uc3RhbnRzLlZJICYmIHRoaXMuZGF0YVR5cGUoKSA9PT0gJ2ludCcpIHtcbiAgICAgICAgICAgICAgZS50YXJnZXQudmFsdWUgPSB2YWx1ZVRhcmdldC5yZXBsYWNlKChuZXcgUmVnRXhwKGBbJHtzZXBhcmF0b3JSZXZlcnR9XWAsICdnaScpKSwgJycpIGFzIElTdHJpbmc7XG5cbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZhbHVlVGFyZ2V0ID09PSBzZXBhcmF0b3JSZXZlcnQpIHtcbiAgICAgICAgICAgICAgZS50YXJnZXQudmFsdWUgPSAnJztcblxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodmFsdWVUYXJnZXQgJiYgdmFsdWVUYXJnZXQubGVuZ3RoID09PSAyICYmIHZhbHVlVGFyZ2V0LmNoYXJBdCgwKSA9PT0gJy0nICYmIGRhdGEgJiYgIS9bMC05XS9nLnRlc3QoZGF0YSkpIHtcbiAgICAgICAgICAgICAgZS50YXJnZXQudmFsdWUgPSAnLSc7XG5cbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgb2NjdXJyZW5jZXNCeUNoYXJhY3RlciA9IHZhbHVlVGFyZ2V0Lm9jY3VycmVuY2VzQnlDaGFyYWN0ZXIoc2VwYXJhdG9yUmV2ZXJ0KTtcblxuICAgICAgICAgICAgaWYgKG9jY3VycmVuY2VzQnlDaGFyYWN0ZXIgPiAxKSB7XG4gICAgICAgICAgICAgIHZhbHVlVGFyZ2V0ID0gdmFsdWVUYXJnZXQucmVwbGFjZUF0KGUudGFyZ2V0LnNlbGVjdGlvblN0YXJ0IC0gMSwgJycpIGFzIElTdHJpbmc7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IG1heExlbmd0aCA9IHRoaXMuZGF0YVR5cGUoKSA9PT0gJ2Zsb2F0JyA/ICh0aGlzLm1heExlbmd0aCgpIHx8IDIxKSAtIDEgOiAodGhpcy5tYXhMZW5ndGgoKSB8fCAyMSk7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZVRhcmdldC5pbmRleE9mKCctJykgPj0gMCkge1xuICAgICAgICAgICAgICBtYXhMZW5ndGgrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvY2N1cnJlbmNlc0J5Q2hhcmFjdGVyID09PSAxICYmIHZhbHVlVGFyZ2V0Lmxlbmd0aCA9PT0gbWF4TGVuZ3RoICYmIHZhbHVlVGFyZ2V0LmluZGV4T2Yoc2VwYXJhdG9yUmV2ZXJ0KSA9PT0gdmFsdWVUYXJnZXQubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICB2YWx1ZVRhcmdldCA9IHZhbHVlVGFyZ2V0LnJlcGxhY2VBdChlLnRhcmdldC5zZWxlY3Rpb25TdGFydCAtIDEsICcnKSBhcyBJU3RyaW5nO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLm9ubHlBY2NlcHROZWdhdGl2ZVZhbHVlKCkgJiYgdmFsdWVUYXJnZXQgPT09IGAwJHtzZXBhcmF0b3JSZXZlcnR9YCkge1xuICAgICAgICAgICAgICBlLnRhcmdldC52YWx1ZSA9ICcwJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhbHVlVGFyZ2V0ID0gZm9ybWF0TnVtYmVyKHZhbHVlVGFyZ2V0KSBhcyBJU3RyaW5nO1xuICAgIH1cbiAgICBjb25zdCBpbmRleGVzT2ZEYXNoID0gdmFsdWVUYXJnZXQuaW5kZXhlc09mQ2hhcmFjdGVyPy4oJy0nKSB8fCBbXTtcblxuICAgIGlmIChpbmRleGVzT2ZEYXNoLmxlbmd0aCkge1xuICAgICAgY29uc3QgW2ZpcnN0SW5kZXgsIHNlY29uZEluZGV4XSA9IGluZGV4ZXNPZkRhc2g7XG4gICAgICBjb25zdCBpbmRleFJlcGxhY2UgPSBmaXJzdEluZGV4IHx8IHNlY29uZEluZGV4OyAvLyBmaXJzdEluZGV4PTAgdGjDrCBrbyB4w7NhXG5cbiAgICAgIGlmIChpbmRleFJlcGxhY2UpIHtcbiAgICAgICAgdmFsdWVUYXJnZXQgPSB2YWx1ZVRhcmdldC5yZXBsYWNlQWxsKGluZGV4UmVwbGFjZSwgJy0nLCAnJykgYXMgSVN0cmluZztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuYWNjZXB0TmVnYXRpdmVWYWx1ZSgpICYmIHZhbHVlVGFyZ2V0ID09PSAnLScpIHtcbiAgICAgIGUudGFyZ2V0LnZhbHVlID0gdmFsdWVUYXJnZXQ7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3dpdGNoICh0aGlzLmRhdGFUeXBlKCkpIHtcbiAgICAgIGNhc2UgJ2ludCc6XG4gICAgICAgIHtcbiAgICAgICAgICBzdHJSZWdleCA9IGBbXjAtOSR7dGhpcy5hY2NlcHROZWdhdGl2ZVZhbHVlKCkgPyAnLScgOiAnJ31dYDtcbiAgICAgICAgICBpZiAoIWUuZmFrZUV2ZW50KSB7XG4gICAgICAgICAgICB2YWx1ZVRhcmdldCA9IHZhbHVlVGFyZ2V0LnJlcGxhY2UobmV3IFJlZ0V4cChzdHJSZWdleCwgJ2dpJyksICcnKSBhcyBJU3RyaW5nO1xuICAgICAgICAgICAgY29uc3QgbWF4VG90YWxOdW1iZXIgPSB2YWx1ZVRhcmdldC5pbmNsdWRlcygnLScpID8gMTcgOiAxNjtcblxuICAgICAgICAgICAgaWYgKHZhbHVlVGFyZ2V0Lmxlbmd0aCA+IG1heFRvdGFsTnVtYmVyKSB7XG4gICAgICAgICAgICAgIHZhbHVlVGFyZ2V0ID0gdmFsdWVUYXJnZXQuc2xpY2UoMCwgbWF4VG90YWxOdW1iZXIpIGFzIElTdHJpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoTWF0aC5hYnMocGFyc2VJbnQodmFsdWVUYXJnZXQpKSA+ICh0aGlzLm1heFZhbHVlTnVtYmVyKCkgfHwgOTAwNzE5OTI1NDc0MDk5MSkpIHtcbiAgICAgICAgICAgICAgdmFsdWVUYXJnZXQgPSB2YWx1ZVRhcmdldC5zbGljZSgwLCBtYXhUb3RhbE51bWJlciAtIDEpIGFzIElTdHJpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5vbmx5QWNjZXB0TmVnYXRpdmVWYWx1ZSgpICYmIHZhbHVlVGFyZ2V0WzBdICE9PSAnLScgJiYgdmFsdWVUYXJnZXRbMF0gIT09ICcwJykge1xuICAgICAgICAgICAgICB2YWx1ZVRhcmdldCA9ICcnIGFzIElTdHJpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodmFsdWVUYXJnZXQgJiYgLyheLSk/KF5bMF0rKS8udGVzdCh2YWx1ZVRhcmdldCkpIHtcbiAgICAgICAgICAgICAgY29uc3QgaWQgPSB1dWlkKCk7XG5cbiAgICAgICAgICAgICAgdmFsdWVUYXJnZXQgPSB2YWx1ZVRhcmdldC5yZXBsYWNlKC8oXi0pPyheWzBdKykvLCBgJDEke2lkfWApLnJlcGxhY2UoaWQsICcwJykgYXMgSVN0cmluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh2YWx1ZVRhcmdldCA9PT0gJy0wJykge1xuICAgICAgICAgICAgICB2YWx1ZVRhcmdldCA9ICcwJyBhcyBJU3RyaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZhbHVlVGFyZ2V0ICYmIC8oXlswXSkoWzEtOV0pKFswLTldKyk/Ly50ZXN0KHZhbHVlVGFyZ2V0KSkge1xuICAgICAgICAgICAgICB2YWx1ZVRhcmdldCA9IHZhbHVlVGFyZ2V0LnJlcGxhY2UoLyheWzBdKShbMS05XSkoWzAtOV0rKT8vLCAnJDIkMycpIGFzIElTdHJpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB2YWx1ZURpc3BsYXkgPSB2aWV3RGF0YU51bWJlckJ5TGFuZ3VhZ2UodmFsdWVUYXJnZXQsICh0aGlzLmFjY2VwdE5lZ2F0aXZlVmFsdWUoKSB8fCBmYWxzZSksIDApO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5jaGVja01heExlbmd0aE51bWJlckFuZFNldFZhbHVlKHZhbHVlRGlzcGxheSwgZSkpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlLnRhcmdldC52YWx1ZSA9IGAke3RoaXMuZ2V0Q2hlY2taZXJvKCt2YWx1ZURpc3BsYXksIGUudGFyZ2V0LnZhbHVlKX0ke3ZhbHVlRGlzcGxheX1gO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGluZGV4T2ZEb3QgPSB2YWx1ZVRhcmdldC5pbmRleE9mKCcuJyk7XG4gICAgICAgICAgY29uc3QgaW5kZXhPZkNvbW1hID0gdmFsdWVUYXJnZXQuaW5kZXhPZignLCcpO1xuICAgICAgICAgIGxldCBpbmRleENob29zZSA9IGluZGV4T2ZEb3Q7XG5cbiAgICAgICAgICBpZiAoaW5kZXhPZkRvdCA8IDAgfHwgaW5kZXhPZkRvdCA+IGluZGV4T2ZDb21tYSkge1xuICAgICAgICAgICAgaW5kZXhDaG9vc2UgPSBpbmRleE9mQ29tbWE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpbmRleENob29zZSA+PSAwKSB7XG4gICAgICAgICAgICB2YWx1ZVRhcmdldCA9IHZhbHVlVGFyZ2V0LnN1YnN0cmluZygwLCBpbmRleENob29zZSkgYXMgSVN0cmluZztcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgdmFsdWVEaXNwbGF5ID0gdmlld0RhdGFOdW1iZXJCeUxhbmd1YWdlKHZhbHVlVGFyZ2V0LCAodGhpcy5hY2NlcHROZWdhdGl2ZVZhbHVlKCkgfHwgZmFsc2UpLCAwKTtcblxuICAgICAgICAgIGlmICh0aGlzLmNoZWNrTWF4TGVuZ3RoTnVtYmVyQW5kU2V0VmFsdWUodmFsdWVEaXNwbGF5LCBlKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGUudGFyZ2V0LnZhbHVlID0gYCR7dGhpcy5nZXRDaGVja1plcm8oK3ZhbHVlRGlzcGxheSwgZS50YXJnZXQudmFsdWUpfSR7dmFsdWVEaXNwbGF5fWA7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSAnZmxvYXQnOlxuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZmFsbHRocm91Z2hcbiAgICAgIGNhc2UgJ2JpZ2ludCc6XG4gICAgICAgIHRoaXMuZ2V0VmFsdWVGb3JtYXQoZSwgdmFsdWVUYXJnZXQsIHNlcGFyYXRvciwgc2VwYXJhdG9yUmV2ZXJ0LCBjdXJyZW50TGFuZyk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBpZiAodmFsdWVUYXJnZXQgPT09ICdOYU4nKSB7XG4gICAgICBlLnRhcmdldC52YWx1ZSA9ICcnIGFzIElTdHJpbmc7XG4gICAgfVxuICAgIGlmIChlLmZha2VFdmVudCB8fCBkYXRhID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zZXRDYXJldFBvc2l0aW9uKGUsIHNlbGVjdGlvblN0YXJ0ICsgMSk7XG4gIH1cblxuICBwcml2YXRlIGdldFZhbHVlRm9ybWF0KGU6IElFdmVudCB8IElFdmVudEN1c3RvbSwgdmFsdWVUYXJnZXQ6IElTdHJpbmcsIHNlcGFyYXRvcjogJy4nIHwgJywnLCBzZXBhcmF0b3JSZXZlcnQ6ICcuJyB8ICcsJywgY3VycmVudExhbmc6IHN0cmluZykge1xuICAgIGxldCBzdHJSZWdleCA9IGBbXjAtOSR7c2VwYXJhdG9yfSR7Y3VycmVudExhbmcgPT09IFV0aWxzTGFuZ3VhZ2VDb25zdGFudHMuRU4gPyAnLicgOiAnJ30ke3RoaXMuYWNjZXB0TmVnYXRpdmVWYWx1ZSgpID8gJy0nIDogJyd9XWA7XG5cbiAgICBpZiAoIWUuZmFrZUV2ZW50KSB7XG4gICAgICB2YWx1ZVRhcmdldCA9IHZhbHVlVGFyZ2V0LnJlcGxhY2UobmV3IFJlZ0V4cChzdHJSZWdleCwgJ2dpJyksICcnKSBhcyBJU3RyaW5nO1xuICAgIH1cbiAgICBjb25zdCBpbmRleGVzT2ZTZXBhcmF0b3IgPSB2YWx1ZVRhcmdldC5pbmRleGVzT2ZDaGFyYWN0ZXIoc2VwYXJhdG9yKTtcbiAgICBjb25zdCBbZmlyc3RJbmRleCwgc2Vjb25kSW5kZXhdID0gaW5kZXhlc09mU2VwYXJhdG9yO1xuXG4gICAgaWYgKHNlY29uZEluZGV4KSB7XG4gICAgICB2YWx1ZVRhcmdldCA9IGUudGFyZ2V0LnZhbHVlLnJlcGxhY2VBbGwoc2Vjb25kSW5kZXgsIHNlcGFyYXRvciwgJycpO1xuICAgIH1cbiAgICBpZiAoZmlyc3RJbmRleCAmJiB2YWx1ZVRhcmdldC5zdWJzdHJpbmcoZmlyc3RJbmRleCArIDEpLmxlbmd0aCA+PSAodGhpcy5maXhlZEZsb2F0KCkgPz8gMTQpKSB7XG4gICAgICB2YWx1ZVRhcmdldCA9IHZhbHVlVGFyZ2V0LnN1YnN0cmluZygwLCBmaXJzdEluZGV4ICsgKHRoaXMuZml4ZWRGbG9hdCgpID8/IDE0KSArIDEpIGFzIElTdHJpbmc7XG4gICAgfVxuICAgIHN0clJlZ2V4ID0gYFske3NlcGFyYXRvcn1dYDtcbiAgICB2YWx1ZVRhcmdldCA9IHZhbHVlVGFyZ2V0LnJlcGxhY2UobmV3IFJlZ0V4cChzdHJSZWdleCwgJ2cnKSwgc2VwYXJhdG9yUmV2ZXJ0KSBhcyBJU3RyaW5nO1xuICAgIGxldCB2YWx1ZUZvcm1hdCA9ICcnO1xuICAgIGxldCBbZm9udFNlcGFyYXRvck51bWJlciwgYmVoaW5kU2VwYXJhdG9yTnVtYmVyXSA9IHZhbHVlVGFyZ2V0LnNwbGl0KHNlcGFyYXRvclJldmVydCk7XG4gICAgbGV0IG1heEZvbnRUb3RhbE51bWJlciA9IChmb250U2VwYXJhdG9yTnVtYmVyICYmIGZvbnRTZXBhcmF0b3JOdW1iZXIuaW5jbHVkZXMoJy0nKSkgPyAxNiA6IDE1O1xuXG4gICAgaWYgKHRoaXMuZGF0YVR5cGUoKSA9PT0gJ2JpZ2ludCcpIHtcbiAgICAgIG1heEZvbnRUb3RhbE51bWJlciA9ICh0aGlzLm1heExlbmd0aE51bWJlckNvdW50KCkgPz8gMTkpIC0gKHRoaXMuZml4ZWRGbG9hdCgpID8/IDQpICsgKGZvbnRTZXBhcmF0b3JOdW1iZXIuaW5jbHVkZXMoJy0nKSA/IDEgOiAwKTtcbiAgICB9XG4gICAgY29uc3QgZm9udE92ZXJNYXhUb3RhbE51bWJlciA9IGZvbnRTZXBhcmF0b3JOdW1iZXIgJiYgZm9udFNlcGFyYXRvck51bWJlci5sZW5ndGggPj0gbWF4Rm9udFRvdGFsTnVtYmVyO1xuXG4gICAgaWYgKGZvbnRPdmVyTWF4VG90YWxOdW1iZXIpIHtcbiAgICAgIGZvbnRTZXBhcmF0b3JOdW1iZXIgPSBmb250U2VwYXJhdG9yTnVtYmVyLnNsaWNlKDAsIG1heEZvbnRUb3RhbE51bWJlcikgYXMgSVN0cmluZztcbiAgICAgIGlmICh0aGlzLmRhdGFUeXBlKCkgPT09ICdmbG9hdCcpIHtcbiAgICAgICAgYmVoaW5kU2VwYXJhdG9yTnVtYmVyID0gJyc7XG4gICAgICB9XG4gICAgfVxuICAgIHN3aXRjaCAodGhpcy5kYXRhVHlwZSgpKSB7XG4gICAgICBjYXNlICdmbG9hdCc6XG4gICAgICAgIGlmICghZm9udE92ZXJNYXhUb3RhbE51bWJlciAmJiBiZWhpbmRTZXBhcmF0b3JOdW1iZXIgJiYgYmVoaW5kU2VwYXJhdG9yTnVtYmVyLmxlbmd0aCkge1xuICAgICAgICAgIGJlaGluZFNlcGFyYXRvck51bWJlciA9IGJlaGluZFNlcGFyYXRvck51bWJlci5zbGljZSgwLCBtYXhGb250VG90YWxOdW1iZXIgLSBmb250U2VwYXJhdG9yTnVtYmVyLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgYmVoaW5kU2VwYXJhdG9yTnVtYmVyID0gYCR7YmVoaW5kU2VwYXJhdG9yTnVtYmVyID8/ICcnfWA7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdiaWdpbnQnOlxuICAgICAgICBpZiAoYmVoaW5kU2VwYXJhdG9yTnVtYmVyICYmIGJlaGluZFNlcGFyYXRvck51bWJlci5sZW5ndGggJiYgYmVoaW5kU2VwYXJhdG9yTnVtYmVyLmxlbmd0aCA+ICh0aGlzLmZpeGVkRmxvYXQoKSA/PyA0KSkge1xuICAgICAgICAgIGJlaGluZFNlcGFyYXRvck51bWJlciA9IGJlaGluZFNlcGFyYXRvck51bWJlci5zbGljZSgwLCAodGhpcy5maXhlZEZsb2F0KCkgPz8gNCkpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjb25zdCBpbmRleE9mU2VwYXJhdG9yUmV2ZXJ0ID0gdmFsdWVUYXJnZXQuaW5kZXhPZihzZXBhcmF0b3JSZXZlcnQpO1xuXG4gICAgaWYgKHRoaXMub25seUFjY2VwdE5lZ2F0aXZlVmFsdWUoKSAmJiBmb250U2VwYXJhdG9yTnVtYmVyWzBdICE9PSAnLScgJiYgZm9udFNlcGFyYXRvck51bWJlclswXSAhPT0gJzAnKSB7XG4gICAgICBmb250U2VwYXJhdG9yTnVtYmVyID0gJyc7XG4gICAgfVxuICAgIGlmICh0aGlzLm9ubHlBY2NlcHROZWdhdGl2ZVZhbHVlKCkgJiYgaW5kZXhPZlNlcGFyYXRvclJldmVydCA+PSAwICYmIGZvbnRTZXBhcmF0b3JOdW1iZXJbMF0gIT09ICctJykge1xuICAgICAgZm9udFNlcGFyYXRvck51bWJlciA9ICcwJztcbiAgICAgIGJlaGluZFNlcGFyYXRvck51bWJlciA9IHRoaXMuZGF0YVR5cGUoKSA9PT0gJ2JpZ2ludCcgPyAnMCcgOiAnJztcbiAgICB9XG4gICAgaWYgKGZvbnRTZXBhcmF0b3JOdW1iZXIgJiYgLyheLSkoWzBdKykvLnRlc3QoZm9udFNlcGFyYXRvck51bWJlcikpIHtcbiAgICAgIGNvbnN0IGlkID0gdXVpZCgpO1xuXG4gICAgICBmb250U2VwYXJhdG9yTnVtYmVyID0gZm9udFNlcGFyYXRvck51bWJlci5yZXBsYWNlKC8oXi0pKFswXSspLywgYCQxJHtpZH1gKS5yZXBsYWNlKGlkLCAnMCcpO1xuICAgIH1cbiAgICBpZiAoZm9udFNlcGFyYXRvck51bWJlciAmJiAvKF5bMF0rKS8udGVzdChmb250U2VwYXJhdG9yTnVtYmVyKSkge1xuICAgICAgZm9udFNlcGFyYXRvck51bWJlciA9IGZvbnRTZXBhcmF0b3JOdW1iZXIucmVwbGFjZSgvKF5bMF0rKS8sICcwJyk7XG4gICAgfVxuICAgIGlmICgvKF4tKShbMF0rKShbMS05XSkoWzAtOS5dKyk/Ly50ZXN0KGZvbnRTZXBhcmF0b3JOdW1iZXIpKSB7XG4gICAgICBmb250U2VwYXJhdG9yTnVtYmVyID0gZm9udFNlcGFyYXRvck51bWJlci5yZXBsYWNlKC8oXi0pKFswXSspKFsxLTldKShbMC05Ll0rKT8vLCAnJDEkMyQ0Jyk7XG4gICAgfVxuICAgIGlmICgvKF5bMF0rKShbMS05XSkoWzAtOS5dKyk/Ly50ZXN0KGZvbnRTZXBhcmF0b3JOdW1iZXIpKSB7XG4gICAgICBmb250U2VwYXJhdG9yTnVtYmVyID0gZm9udFNlcGFyYXRvck51bWJlci5yZXBsYWNlKC8oXlswXSspKFsxLTldKShbMC05Ll0rKT8vLCAnJDIkMycpO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRoaXMuZGF0YVR5cGUoKSkge1xuICAgICAgY2FzZSAnZmxvYXQnOlxuICAgICAgICBpZiAoLyheWzBdezZ9KS8udGVzdChiZWhpbmRTZXBhcmF0b3JOdW1iZXIpKSB7XG4gICAgICAgICAgYmVoaW5kU2VwYXJhdG9yTnVtYmVyID0gYmVoaW5kU2VwYXJhdG9yTnVtYmVyLnJlcGxhY2UoLyheWzBdezZ9KS8sICcwMDAwMCcpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdiaWdpbnQnOlxuICAgICAgICBpZiAoLyheWzBdezR9KS8udGVzdChiZWhpbmRTZXBhcmF0b3JOdW1iZXIpKSB7XG4gICAgICAgICAgYmVoaW5kU2VwYXJhdG9yTnVtYmVyID0gYmVoaW5kU2VwYXJhdG9yTnVtYmVyLnJlcGxhY2UoLyheWzBdezR9KS8sICcwMDAwJyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmIChmb250U2VwYXJhdG9yTnVtYmVyKSB7XG4gICAgICBmb250U2VwYXJhdG9yTnVtYmVyID0gdmlld0RhdGFOdW1iZXJCeUxhbmd1YWdlKGZvbnRTZXBhcmF0b3JOdW1iZXIsIHRoaXMuYWNjZXB0TmVnYXRpdmVWYWx1ZSgpLCAodGhpcy5maXhlZEZsb2F0KCkgPz8gKHRoaXMuZGF0YVR5cGUoKSA9PT0gJ2JpZ2ludCcgPyA0IDogMTQpKSk7XG4gICAgfVxuICAgIGNvbnN0IGhhc1NlcGFyYXRvclJldmVydCA9ICh0aGlzLmRhdGFUeXBlKCkgPT09ICdiaWdpbnQnID8gdHJ1ZSA6ICFmb250T3Zlck1heFRvdGFsTnVtYmVyKSAmJiBpbmRleE9mU2VwYXJhdG9yUmV2ZXJ0ID49IDA7XG5cbiAgICB2YWx1ZUZvcm1hdCA9IGAke2ZvbnRTZXBhcmF0b3JOdW1iZXIgPz8gJyd9JHtoYXNTZXBhcmF0b3JSZXZlcnQgPyBzZXBhcmF0b3JSZXZlcnQgOiAnJ30ke2JlaGluZFNlcGFyYXRvck51bWJlciA/PyAnJ31gO1xuICAgIGlmICh2YWx1ZUZvcm1hdCAmJiB0aGlzLm9ubHlBY2NlcHROZWdhdGl2ZVZhbHVlKCkgJiYgdmFsdWVGb3JtYXRbMF0gIT09ICctJyAmJiB2YWx1ZUZvcm1hdFswXSAhPT0gJzAnKSB7XG4gICAgICB2YWx1ZUZvcm1hdCA9ICcwJztcbiAgICB9XG4gICAgaWYgKHRoaXMuY2hlY2tNYXhMZW5ndGhOdW1iZXJBbmRTZXRWYWx1ZSh2YWx1ZUZvcm1hdCwgZSkpIHtcbiAgICAgIHZhbHVlVGFyZ2V0ID0gZS50YXJnZXQudmFsdWU7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFsdWVUYXJnZXQgPSBlLnRhcmdldC52YWx1ZSA9IHZhbHVlRm9ybWF0IGFzIElTdHJpbmc7XG4gIH1cblxuICBwcml2YXRlIGdldENoZWNrWmVybyh2YWx1ZTogbnVtYmVyLCB0YXJnZXRDdXJyZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCB6ZXJvID0gJyc7XG5cbiAgICBpZiAodGhpcy5kYXRhVHlwZSgpICE9PSAnaW50Jykge1xuICAgICAgcmV0dXJuIHplcm87XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2hhckZpcnN0SXNaZXJvKCkgJiYgdGhpcy5rZWVwWmVyb0luVHlwZUludCgpICYmIHZhbHVlICE9PSAwKSB7XG4gICAgICB6ZXJvID0gJzAnO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNoYXJGaXJzdElzWmVybygpICYmIHRoaXMuYXV0b0FkZFplcm9MZXNzVGhhbjEwSW5UeXBlSW50KCkgJiYgKCh2YWx1ZSA+IDAgJiYgdmFsdWUgPCAxMCAmJiAhLyheMCkrLy50ZXN0KGAke3RhcmdldEN1cnJlbnR9YCkpIHx8ICh0YXJnZXRDdXJyZW50ICYmIHRhcmdldEN1cnJlbnQubWF0Y2goL15bMF17Mix9JC8pPy5sZW5ndGggJiYgdmFsdWUgPT09IDApKSkge1xuICAgICAgemVybyA9ICcwJztcbiAgICB9XG5cbiAgICByZXR1cm4gemVybztcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q2FyZXRQb3NpdGlvbihlOiBJRXZlbnQgfCBJRXZlbnRDdXN0b20sIHNlbGVjdGlvblN0YXJ0OiBudW1iZXIpIHtcbiAgICBjb25zdCB7IGtleUNvZGUsIGlucHV0VHlwZSB9ID0gZTtcblxuICAgIGlmIChrZXlDb2RlID09PSBVdGlsc0tleUNvZGVDb25zdGFudC5VUF9BUlJPVyB8fCBrZXlDb2RlID09PSBVdGlsc0tleUNvZGVDb25zdGFudC5ET1dOX0FSUk9XIHx8IGtleUNvZGUgPT09IFV0aWxzS2V5Q29kZUNvbnN0YW50LkxFRlRfQVJST1cgfHwga2V5Q29kZSA9PT0gVXRpbHNLZXlDb2RlQ29uc3RhbnQuUklHSFRfQVJST1cpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdmFsdWVUYXJnZXQgPSBlLnRhcmdldC52YWx1ZS5yZXBsYWNlKCctJywgJycpO1xuICAgIGxldCB2YWx1ZSA9IFV0aWxzQ2FjaGUuZ2V0TGFuZygpID09PSBVdGlsc0xhbmd1YWdlQ29uc3RhbnRzLlZJID8gYCR7dGhpcy52YWx1ZSgpIHx8IDB9YC5yZXBsYWNlKCcuJywgJywnKSA6IGAke3RoaXMudmFsdWUoKSB8fCAwfWA7XG5cbiAgICB2YWx1ZSA9IHZpZXdEYXRhTnVtYmVyQnlMYW5ndWFnZSh2YWx1ZSwgdGhpcy5hY2NlcHROZWdhdGl2ZVZhbHVlKCksICh0aGlzLmZpeGVkRmxvYXQoKSA/PyAxNCkpO1xuICAgIHZhbHVlID0gYCR7dmFsdWV9YC5yZXBsYWNlKCctJywgJycpO1xuXG4gICAgaWYgKHZhbHVlID09PSB2YWx1ZVRhcmdldCAmJiB2YWx1ZSAhPT0gJzAnICYmIHZhbHVlICE9PSAnLScpIHtcbiAgICAgIHNldENhcmV0UG9zaXRpb24odGhpcy5FbGVtZW50LCBzZWxlY3Rpb25TdGFydCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgZmFjdG9yID0gMDtcbiAgICBjb25zdCBkaXN0YW5jZSA9IHZhbHVlVGFyZ2V0Lmxlbmd0aCAtIHZhbHVlLmxlbmd0aDtcbiAgICBpZiAoZGlzdGFuY2UgPCAtMSkge1xuICAgICAgZmFjdG9yID0gLTE7XG4gICAgfVxuICAgIGlmIChkaXN0YW5jZSA+IDEpIHtcbiAgICAgIGZhY3RvciA9IDE7XG4gICAgfVxuICAgIHNlbGVjdGlvblN0YXJ0ICs9IGZhY3RvcjtcbiAgICBpZiAoaW5wdXRUeXBlID09PSAnaW5zZXJ0RnJvbVBhc3RlJyAmJiB0aGlzLmRhdGFUZXh0UGFzdGUoKSkge1xuICAgICAgY29uc3QgZGF0YVRleHREaXNwbGF5ID0gYCR7dmlld0RhdGFOdW1iZXJCeUxhbmd1YWdlKHRoaXMuZGF0YVRleHRQYXN0ZSgpLCB0aGlzLmFjY2VwdE5lZ2F0aXZlVmFsdWUoKSwgKHRoaXMuZml4ZWRGbG9hdCgpID8/IDE0KSl9YDtcbiAgICAgIGNvbnN0IGluZGV4ZXM6IEFycmF5PG51bWJlcj4gPSBlLnRhcmdldC52YWx1ZS5pbmRleGVzQnlTdHJpbmcoZGF0YVRleHREaXNwbGF5KTtcblxuICAgICAgc2VsZWN0aW9uU3RhcnQgLT0gZmFjdG9yO1xuXG4gICAgICBpZiAoaW5kZXhlcy5zb21lKGluZGV4ID0+IGluZGV4ID09PSBzZWxlY3Rpb25TdGFydCkgfHwgIWluZGV4ZXMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBzZXRDYXJldFBvc2l0aW9uKHRoaXMuRWxlbWVudCwgc2VsZWN0aW9uU3RhcnQpO1xuICAgICAgfVxuXG4gICAgICBsZXQgbmV3U2VsZWN0aW9uU3RhcnQgPSBpbmRleGVzWzBdO1xuXG4gICAgICBmb3IgKGNvbnN0IGluZGV4IG9mIGluZGV4ZXMpIHtcbiAgICAgICAgbGV0IHJlcGxhY2VWYWx1ZSA9IGZvcm1hdE51bWJlcihgJHt2YWx1ZVRhcmdldC5zdWJzdHJpbmcoMCwgaW5kZXgpfSR7dmFsdWVUYXJnZXQuc3Vic3RyaW5nKGluZGV4ICsgZGF0YVRleHREaXNwbGF5Lmxlbmd0aCArIDEsIHZhbHVlVGFyZ2V0Lmxlbmd0aCl9YCk7XG5cbiAgICAgICAgcmVwbGFjZVZhbHVlID0gdmlld0RhdGFOdW1iZXJCeUxhbmd1YWdlKHJlcGxhY2VWYWx1ZSwgdGhpcy5hY2NlcHROZWdhdGl2ZVZhbHVlKCksICh0aGlzLmZpeGVkRmxvYXQoKSA/PyAxNCkpO1xuICAgICAgICBpZiAodmFsdWUgPT09IHJlcGxhY2VWYWx1ZSkge1xuICAgICAgICAgIG5ld1NlbGVjdGlvblN0YXJ0ID0gaW5kZXg7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG5ld1NlbGVjdGlvblN0YXJ0ID49IDApIHtcbiAgICAgICAgc2VsZWN0aW9uU3RhcnQgPSBuZXdTZWxlY3Rpb25TdGFydCArIGRhdGFUZXh0RGlzcGxheS5sZW5ndGggKyAxO1xuXG4gICAgICAgIHJldHVybiBzZXRDYXJldFBvc2l0aW9uKHRoaXMuRWxlbWVudCwgc2VsZWN0aW9uU3RhcnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNldENhcmV0UG9zaXRpb24odGhpcy5FbGVtZW50LCBzZWxlY3Rpb25TdGFydCk7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlVmFsdWVCeURhdGFUeXBlKHZhbHVlOiBzdHJpbmcpOiBudW1iZXIgfCBzdHJpbmcge1xuICAgIHN3aXRjaCAodGhpcy5kYXRhVHlwZSgpKSB7XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICByZXR1cm4gdmFsdWU7XG5cbiAgICAgIGNhc2UgJ2ludCc6XG4gICAgICAgIGlmICh0aGlzLmFjY2VwdE5lZ2F0aXZlVmFsdWUoKSAmJiAodmFsdWUgPT09ICctJyB8fCB2YWx1ZSA9PT0gJywnIHx8IHZhbHVlID09PSAnLicpKSB7XG4gICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKyhmb3JtYXROdW1iZXIodmFsdWUpKTtcblxuICAgICAgY2FzZSAnZmxvYXQnOlxuICAgICAgICBpZiAodGhpcy5hY2NlcHROZWdhdGl2ZVZhbHVlKCkgJiYgKHZhbHVlID09PSAnLScgfHwgdmFsdWUgPT09ICcsJyB8fCB2YWx1ZSA9PT0gJy4nKSkge1xuICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQoKCtmb3JtYXROdW1iZXIodmFsdWUpKS50b0ZpeGVkKHRoaXMuZml4ZWRGbG9hdCgpID8/IDE0KSk7XG5cbiAgICAgIGNhc2UgJ2JpZ2ludCc6XG4gICAgICAgIGlmICh0aGlzLmFjY2VwdE5lZ2F0aXZlVmFsdWUoKSAmJiAodmFsdWUgPT09ICctJyB8fCB2YWx1ZSA9PT0gJywnIHx8IHZhbHVlID09PSAnLicpKSB7XG4gICAgICAgICAgcmV0dXJuICcwJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmb3JtYXROdW1iZXIodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2FsY3VsYXRvckhlaWdodFRleHRBcmVhKGU6IElFdmVudCB8IElFdmVudEN1c3RvbSkge1xuICAgIGlmICh0aGlzLnRhZ0lucHV0KCkgPT09ICdpbnB1dCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdGFyZ2V0ID0gZS50YXJnZXQ7XG5cbiAgICB0YXJnZXQuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgICB0YXJnZXQuc3R5bGUuaGVpZ2h0ID0gYCR7dGhpcy5kZWZhdWx0SGVpZ2h0KCl9cHhgO1xuICAgIGNvbnN0IHsgc2Nyb2xsSGVpZ2h0IH0gPSB0YXJnZXQ7XG5cbiAgICBjb25zdCBoZWlnaHQgPSBzY3JvbGxIZWlnaHQgKyAyOyAvLyAgYm9yZGVyIHRvcCArIGJvdHRvbSA9IDJcblxuICAgIGlmICghdGhpcy5wcmVIZWlnaHRBcmVhKCkgJiYgdGhpcy5wcmVIZWlnaHRBcmVhKCkgIT09IGhlaWdodCkge1xuICAgICAgdGhpcy5vdXRIZWlnaHRBcmVhQ2hhbmdlLmVtaXQoeyBpc0NoYW5nZTogdHJ1ZSwgaGVpZ2h0OiBoZWlnaHQgfSk7XG4gICAgfVxuXG4gICAgaWYgKGhlaWdodCA+ICh0aGlzLm1heEhlaWdodFRleHRBcmVhKCkgPz8gMzIpKSB7XG4gICAgICB0YXJnZXQuc3R5bGUub3ZlcmZsb3cgPSAnYXV0byc7XG4gICAgfVxuICAgIGlmICh0aGlzLmlmcmFtZVJlZikge1xuICAgICAgdGhpcy5pZnJhbWVSZWYuc3R5bGUuaGVpZ2h0ID0gYCR7aGVpZ2h0fXB4YDtcbiAgICB9XG4gICAgdGFyZ2V0LnN0eWxlLmhlaWdodCA9IGAke2hlaWdodH1weGA7XG4gICAgdGhpcy5wcmVIZWlnaHRBcmVhLnNldChoZWlnaHQpO1xuXG4gIH1cblxuICBwcml2YXRlIGNvbWJpbmVPYnNlcnZhYmxlKG1vdXNlRG93bkV2ZW50OiBPYnNlcnZhYmxlPElFdmVudD4sIG9ic2VydmFibGVNZXJnZTogT2JzZXJ2YWJsZTxJRXZlbnQ+KSB7XG4gICAgbW91c2VEb3duRXZlbnQucGlwZShcbiAgICAgIG1lcmdlTWFwKCgpID0+IG9ic2VydmFibGVNZXJnZSksXG4gICAgICBkZWJvdW5jZVRpbWUoMCksXG4gICAgICB0YXAoKGU6IElFdmVudCkgPT4gdGhpcy5jaGVja1R5cGVOdW1iZXIoZSwgJ2tleScpKSxcbiAgICApLnN1YnNjcmliZSgoZTogSUV2ZW50KSA9PiB0aGlzLnByb2Nlc3NFdmVudEFuZEVtaXRWYWx1ZShlKSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZvY3VzKCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5FbGVtZW50Py5mb2N1cygpO1xuICAgIH0sIHRoaXMuZm9jdXNUaW1lT3V0KCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBibHVyKCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5FbGVtZW50Py5ibHVyKCk7XG4gICAgfSwgdGhpcy5ibHVyVGltZU91dCgpKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYWRkRGF0YVRvU2VsZWN0aW9uSW5wdXQoZGF0YTogc3RyaW5nIHwgbnVtYmVyKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5FbGVtZW50O1xuICAgIGNvbnN0IHNlbGVjdGlvblN0YXJ0ID0gdGFyZ2V0LnNlbGVjdGlvblN0YXJ0O1xuXG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLkVsZW1lbnQudmFsdWU7XG4gICAgY29uc3QgYmVmb3JlVmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcoMCwgc2VsZWN0aW9uU3RhcnQpO1xuICAgIGNvbnN0IGFmdGVyVmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcoc2VsZWN0aW9uU3RhcnQpO1xuXG4gICAgdGhpcy5FbGVtZW50LnZhbHVlID0gYCR7YmVmb3JlVmFsdWV9JHtkYXRhfSR7YWZ0ZXJWYWx1ZX1gO1xuICAgIHNldENhcmV0UG9zaXRpb24odGhpcy5FbGVtZW50LCBzZWxlY3Rpb25TdGFydCArIGRhdGEudG9TdHJpbmcoKS5sZW5ndGgpO1xuICAgIGNvbnN0IGV2ZW50RmFrZTogSUV2ZW50Q3VzdG9tID0geyBwcmV2ZW50RGVmYXVsdDogKCkgPT4geyByZXR1cm4gfSwgdGFyZ2V0OiB0aGlzLkVsZW1lbnQsIGRhdGE6ICcnLCBmYWtlRXZlbnQ6IHRydWUgfTtcblxuICAgIHRoaXMucHJvY2Vzc0V2ZW50QW5kRW1pdFZhbHVlKGV2ZW50RmFrZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlck9uTG9hZChlOiBFdmVudCwgZWxlbWVudDogSFRNTElGcmFtZUVsZW1lbnQpIHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuaWZyYW1lUmVmID0gZWxlbWVudDtcbiAgICBjb25zdCBpZnJhbWU6IGFueSA9IGVsZW1lbnQuY29udGVudFdpbmRvdyB8fCBlbGVtZW50LmNvbnRlbnREb2N1bWVudDtcbiAgICB0aGlzLmNvbmZpZ1Byb2plY3RTZXJ2aWNlLnNldHVwRm9udEZhbWlseShpZnJhbWUuZG9jdW1lbnQpO1xuXG4gICAgdGhpcy5pbnB1dElmcmFtZVJlZi5zZXQoeyBuYXRpdmVFbGVtZW50OiBpZnJhbWUuZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ1RFWFRBUkVBJylbMF0gfSk7XG4gICAgaWYgKHRoaXMuRWxlbWVudCkge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5FbGVtZW50LCAncGxhY2Vob2xkZXInLCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCh0aGlzLnBsYWNlaG9sZGVyKCkpKTtcbiAgICAgIGlmICh0aGlzLmRpc2FibGUoKSkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLkVsZW1lbnQsICdkaXNhYmxlZCcsICd0cnVlJyk7XG4gICAgICB9XG4gICAgICB0aGlzLmFmdGVyVmlld0luaXQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlc2V0VmFsdWUoKSB7XG4gICAgdGhpcy5FbGVtZW50LnZhbHVlID0gJyc7XG4gIH1cblxuICBwcml2YXRlIGNvdW50RGlzcGxheUNvbXB1dGVkKCkge1xuICAgIGlmICghdGhpcy5zaG93Q291bnQoKSB8fCB0aGlzLmRhdGFUeXBlKCkgIT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0aGlzLnZhbHVlKCkgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gJzAnO1xuICAgIH1cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMucGFkZGluZ1JpZ2h0Q3VzdG9tLnNldCgodGhpcy5lbGVtZW50UmlnaHRSZWYoKT8ubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCB8fCAwKSArIDEyKTtcbiAgICAgIGlmICh0aGlzLnNob3dDb3VudCgpKSB7XG4gICAgICAgIGlmICh0aGlzLnRleHRDb3VudFJlZigpKSB7XG4gICAgICAgICAgdGhpcy5wYWRkaW5nUmlnaHRDdXN0b20uc2V0KHRoaXMudGV4dENvdW50UmVmKCk/Lm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGggKyAxNik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy50YWdJbnB1dCgpID09PSAnaW5wdXQnKSB7XG4gICAgICAgICAgdGhpcy5wYWRkaW5nUmlnaHRDdXN0b20udXBkYXRlKHZhbHVlID0+IHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZSArICh0aGlzLmVsZW1lbnRSaWdodFJlZigpPy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIHx8IDApO1xuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBgJHt2aWV3RGF0YU51bWJlckJ5TGFuZ3VhZ2UoKHRoaXMudmFsdWUoKSBhcyBzdHJpbmcpLmxlbmd0aCwgZmFsc2UpfWA7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLm9uRGVzdHJveS5uZXh0KCk7XG4gICAgdGhpcy5vbkRlc3Ryb3kuY29tcGxldGUoKTtcbiAgfVxufVxuIiwiPGRpdiBbY2xhc3NdPVwiJ2ZsZXggcmVsYXRpdmUgIXRleHQtWyM5Y2EyYWRdICcgKyBjbGFzc0NvbnRhaW5lcklucHV0KClcIlxuICBbY2xhc3MubGlicy11aS1jb21wb25lbnRzLWlucHV0LXRleHRhcmVhLWNvbnRhaW5lcl09XCJ0YWdJbnB1dCgpID09PSAndGV4dGFyZWEnICYmIHJlc2l6ZSgpID09PSAnYXV0bydcIj5cbiAgQGlmICh0YWdJbnB1dCgpID09PSAnaW5wdXQnKSB7XG4gICAgPGlucHV0ICNpbnB1dFJlZlxuICAgICAgW2NsYXNzLmxpYnMtdWktcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiXG4gICAgICBbY2xhc3MubGlicy11aS1yZWFkb25seS1iYWNrZ3JvdW5kXT1cInJlYWRvbmx5KClcIlxuICAgICAgW2NsYXNzLmxpYnMtdWktZGlzYWJsZV09XCJkaXNhYmxlKClcIlxuICAgICAgW2NsYXNzLmxpYnMtdWktZGlzYWJsZS1iYWNrZ3JvdW5kXT1cImRpc2FibGUoKVwiXG4gICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImRlZmF1bHRIZWlnaHQoKVwiXG4gICAgICBbc3R5bGUubWluSGVpZ2h0LnB4XT1cImRlZmF1bHRIZWlnaHQoKVwiXG4gICAgICBbc3R5bGUucGFkZGluZ1JpZ2h0LnB4LmltcG9ydGFudF09XCJwYWRkaW5nUmlnaHRDdXN0b20oKVwiXG4gICAgICBbY2xhc3Mudy1mdWxsXT1cIiFpZ25vcmVXaWR0aElucHV0MTAwKClcIlxuICAgICAgW2NsYXNzXT1cIidsaWJzLXVpLWlucHV0ICcgKyBjbGFzc0luY2x1ZGUoKVwiXG4gICAgICBbY2xhc3MuYm9yZGVyLXByaW1hcnktZm9jdXMtZ2VuZXJhbF09XCJmb2N1c0lucHV0KClcIlxuICAgICAgW2NsYXNzLmxpYnMtdWktaW5wdXQtbm90LWJvcmRlcl09XCJub0JvcmRlcigpXCJcbiAgICAgIFtjbGFzcy5saWJzLXVpLWJnLXNwZWNpYWwtbm9uZV09XCJiYWNrZ3JvdW5kTm9uZSgpXCJcbiAgICAgIFtjbGFzcy5saWJzLXVpLWJvcmRlci1lcnJvci1nZW5lcmFsXT1cImJvcmRlckVycm9yKClcIlxuICAgICAgW2NsYXNzLnRleHQtWyMyOWM3Y2NdXT1cInVzZUNvbG9yTW9kZUV4aXN0KClcIlxuICAgICAgW2NsYXNzLiFwbC1bNDBweF1dPVwiaWNvbkxlZnRDbGFzcygpXCJcbiAgICAgIFthdHRyLm1heExlbmd0aF09XCJtYXhMZW5ndGgoKSB8fCB1bmRlZmluZWRcIlxuICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyKCkgfCB0cmFuc2xhdGVcIlxuICAgICAgW2F0dHIudHlwZV09XCJoaWRkZW5Db250ZW50KCkgPyAncGFzc3dvcmQnOid0ZXh0J1wiXG4gICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZSgpXCJcbiAgICAgIFthdXRvY29tcGxldGVdPVwicmVzZXRBdXRvQ29tcGxldGVQYXNzd29yZCgpPyAnbmV3LXBhc3N3b3JkJzonJ1wiIC8+XG4gIH1cbiAgQGlmICh0YWdJbnB1dCgpID09PSAndGV4dGFyZWEnKSB7XG4gICAgQGlmIChyZXNpemUoKSA9PT0gJ2F1dG8nKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1jb21wb25lbnRzLWlucHV0LXRleHRhcmVhLWNvbnRhaW5lci1yZXNpemUtaWNvblwiPjwvZGl2PlxuICAgIH1cbiAgICA8dGV4dGFyZWEgI2lucHV0UmVmXG4gICAgICBbY2xhc3MubGlicy11aS1yZWFkb25seV09XCJyZWFkb25seSgpXCJcbiAgICAgIFtjbGFzcy5saWJzLXVpLXJlYWRvbmx5LWJhY2tncm91bmRdPVwicmVhZG9ubHkoKVwiXG4gICAgICBbY2xhc3MubGlicy11aS1kaXNhYmxlXT1cImRpc2FibGUoKVwiXG4gICAgICBbY2xhc3MubGlicy11aS1kaXNhYmxlLWJhY2tncm91bmRdPVwiZGlzYWJsZSgpXCJcbiAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiZGVmYXVsdEhlaWdodCgpXCJcbiAgICAgIFtzdHlsZS5taW5IZWlnaHQucHhdPVwibWluSGVpZ2h0VGV4dEFyZWEoKSA/PyBkZWZhdWx0SGVpZ2h0KClcIlxuICAgICAgW3N0eWxlLnBhZGRpbmdSaWdodC5weF09XCJwYWRkaW5nUmlnaHRDdXN0b20oKVwiXG4gICAgICBbc3R5bGUubWF4SGVpZ2h0LnB4XT1cIm1heEhlaWdodFRleHRBcmVhKClcIlxuICAgICAgW3N0eWxlLnJlc2l6ZV09XCJyZXNpemUoKVwiXG4gICAgICBbY2xhc3Mudy1mdWxsXT1cIiFpZ25vcmVXaWR0aElucHV0MTAwKClcIlxuICAgICAgW2NsYXNzXT1cIidsaWJzLXVpLWlucHV0IGxpYnMtdWktY3Vyc29yLWF1dG8gJyArIGNsYXNzSW5jbHVkZSgpXCJcbiAgICAgIFtjbGFzcy5saWJzLXVpLWlucHV0LW5vdC1ib3JkZXJdPVwibm9Cb3JkZXIoKVwiXG4gICAgICBbY2xhc3MubGlicy11aS1iZy1zcGVjaWFsLW5vbmVdPVwiYmFja2dyb3VuZE5vbmUoKVwiXG4gICAgICBbY2xhc3MubGlicy11aS1ib3JkZXItZXJyb3ItZ2VuZXJhbF09XCJib3JkZXJFcnJvcigpXCJcbiAgICAgIFtjbGFzcy50ZXh0LVsjMjljN2NjXV09XCJ1c2VDb2xvck1vZGVFeGlzdCgpXCJcbiAgICAgIFtjbGFzcy5wbC1bMzJweF1dPVwiaWNvbkxlZnRDbGFzcygpXCJcbiAgICAgIFthdHRyLm1heExlbmd0aF09XCJtYXhMZW5ndGgoKSB8fCB1bmRlZmluZWRcIlxuICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyKCkgfCB0cmFuc2xhdGVcIlxuICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5KClcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGUoKVwiPlxuICAgICAgPC90ZXh0YXJlYT5cbiAgfVxuXG4gIEBpZiAodGFnSW5wdXQoKSA9PT0gJ2lmcmFtZS10ZXh0YXJlYScgJiYgaHRtbElmcmFtZUFyZWEoKSkge1xuICAgIDxzcGFuIGNsYXNzPVwiZC1ub25lXCI+XG4gICAgPC9zcGFuPlxuICAgIDxpZnJhbWUgI2lmcmFtZVJlZlxuICAgICAgW3N0eWxlLm1heEhlaWdodC5weF09XCJtYXhIZWlnaHRUZXh0QXJlYSgpXCJcbiAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiZGVmYXVsdEhlaWdodCgpXCJcbiAgICAgIFtzcmNkb2NdPVwiaHRtbElmcmFtZUFyZWEoKVwiXG4gICAgICBjbGFzcz1cInctZnVsbFwiXG4gICAgICBmcmFtZUJvcmRlcj1cIjBcIlxuICAgICAgKGxvYWQpPVwiaGFuZGxlck9uTG9hZCgkZXZlbnQsaWZyYW1lUmVmKVwiPlxuICAgIDwvaWZyYW1lPlxuICB9XG4gIEBpZiAoaWNvbkxlZnRDbGFzcygpKSB7XG4gICAgPGxpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyIFtpZ25vcmVTaG93UG9wb3Zlcl09XCIhcG9wb3ZlckNvbnRlbnRJY29uTGVmdCgpXCJcbiAgICAgIFtjb25maWddPVwie21heFdpZHRoOjI1MCxkaXJlY3Rpb246J2JvdHRvbScsY29udGVudDpwb3BvdmVyQ29udGVudEljb25MZWZ0KCksekluZGV4OiB6SW5kZXhQb3BvdmVyQ29udGVudCgpfVwiPlxuICAgICAgPGkgW2F0dHIudGFnSW5wdXRdPVwidGFnSW5wdXQoKVwiXG4gICAgICAgIFtjbGFzc109XCJpY29uTGVmdENsYXNzKCkgKycgbGlicy11aS1pbnB1dC1pY29uLWxlZnQgIXRleHQtWyM5Y2EyYWRdJ1wiXG4gICAgICAgIChjbGljayk9XCJoYW5kbGVyRXZlbnRJY29uTGVmdCgkZXZlbnQsJ2NsaWNrJylcIj5cbiAgICAgIDwvaT5cbiAgICA8L2xpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyPlxuICB9XG4gIDxkaXYgI2VsZW1lbnRSaWdodFJlZlxuICAgIGNsYXNzPVwiYWJzb2x1dGUgZmxleCBpdGVtcy1jZW50ZXIgaC1mdWxsIHRvcC0wIHJpZ2h0LTBcIj5cbiAgICBAaWYgKHZhbHVlKCkgJiYgcGxhY2Vob2xkZXIoKS50cmltKCkgJiYga2VlcFBsYWNlaG9sZGVyT25seSgpKSB7XG4gICAgICA8c3BhbiBbY2xhc3NdPVwiJ2xpYnMtdWktaW5wdXQtcGxhY2Vob2xkZXItY3VzdG9tIGxpYnMtdWktZm9udC1oNXInXCI+XG4gICAgICAgIHt7IHBsYWNlaG9sZGVyKCkgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICB9XG4gICAgQGlmIChkYXRhVHlwZSgpICE9PSdzdHJpbmcnICYmIHZhbHVlVXBEb3duTnVtYmVyKCkpIHtcbiAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1zb3J0IGNsYXNzPVwibXItWzEycHhdXCJcbiAgICAgICAgW2Rpc2FibGVBc2NdPVwiZGlzYWJsZUFzYygpXCJcbiAgICAgICAgW2Rpc2FibGVEZXNjXT1cImRpc2FibGVEZXNjKClcIlxuICAgICAgICBbYXR0ci50YWdJbnB1dF09XCJ0YWdJbnB1dCgpXCJcbiAgICAgICAgW29ubHlFbWl0XT1cInRydWVcIlxuICAgICAgICBbZGlzYWJsZV09XCJkaXNhYmxlKCkgfHwgcmVhZG9ubHkoKVwiXG4gICAgICAgIChvdXRDaGFuZ2UpPVwiaGFuZGxlckNoYW5nZVZhbHVlKCRldmVudClcIiAvPlxuICAgIH1cbiAgICBAaWYgKGljb25SaWdodENsYXNzKCkpIHtcbiAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtcG9wb3ZlciBjbGFzcz1cImZsZXhcIlxuICAgICAgICBbaWdub3JlU2hvd1BvcG92ZXJdPVwiIXBvcG92ZXJDb250ZW50SWNvblJpZ2h0KClcIlxuICAgICAgICBbY29uZmlnXT1cInttYXhXaWR0aDoyNTAsZGlyZWN0aW9uOidib3R0b20nLGNvbnRlbnQ6cG9wb3ZlckNvbnRlbnRJY29uUmlnaHQoKSx6SW5kZXg6IHpJbmRleFBvcG92ZXJDb250ZW50KCl9XCI+XG4gICAgICAgIDxpIFthdHRyLnRhZ0lucHV0XT1cInRhZ0lucHV0KClcIlxuICAgICAgICAgIFtjbGFzcy50ZXh0LVsjNmE3MzgzXV09XCIoIWRpc2FibGUoKSAmJiAhcmVhZG9ubHkoKSkgfHwgYWNjZXB0T25seUNsaWNrSWNvbigpXCJcbiAgICAgICAgICBbY2xhc3MudGV4dC1bI2NkZDBkNl1dPScoKGRpc2FibGUoKSB8fCByZWFkb25seSgpKSAmJiAhYWNjZXB0T25seUNsaWNrSWNvbigpKSB8fCBzZXRJY29uUmlnaHRDb2xvclNhbWVDb2xvckRpc2FibGVSZWFkT25seSgpJ1xuICAgICAgICAgIFtjbGFzc109XCJpY29uUmlnaHRDbGFzcygpICsnIGxpYnMtdWktaW5wdXQtaWNvbi1yaWdodCdcIlxuICAgICAgICAgIChjbGljayk9XCJoYW5kbGVyRXZlbnRJY29uUmlnaHQoJGV2ZW50LCdjbGljaycpXCI+XG4gICAgICAgIDwvaT5cbiAgICAgIDwvbGlic191aS1jb21wb25lbnRzLXBvcG92ZXI+XG4gICAgfVxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwibGlicy11aS1pbnB1dC10ZXh0LWJvdHRvbSB7eyBjbGFzc0NvbnRhaW5lckJvdHRvbUlucHV0KCkgfX1cIlxuICAgIFtzdHlsZS5yaWdodC5weF09XCIodGFnSW5wdXQoKSA9PT0gJ2lucHV0JyA/IChlbGVtZW50UmlnaHRSZWYuY2xpZW50V2lkdGggfHwgMCkgOiAwKSArIDhcIj5cbiAgICBAaWYgKHRlbXBsYXRlTGVmdEJvdHRvbUlucHV0KCkpIHtcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZUxlZnRCb3R0b21JbnB1dCgpXCIgLz5cbiAgICB9XG4gICAgQGlmIChkYXRhVHlwZSgpID09PSAnc3RyaW5nJyAmJiBzaG93Q291bnQoKSkge1xuICAgICAgPGRpdiAjdGV4dENvdW50UmVmXG4gICAgICAgIGNsYXNzPVwidGV4dC1bIzljYTJhZF0gbGlicy11aS1mb250LWg3clwiPlxuICAgICAgICA8c3Bhbj57eyBjb3VudERpc3BsYXkoKSB9fTwvc3Bhbj5cbiAgICAgICAgQGlmIChtYXhMZW5ndGgoKSkge1xuICAgICAgICAgIDxzcGFuPi97eyBtYXhMZW5ndGhEaXNwbGF5KCkgfX08L3NwYW4+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgQGlmICh0ZW1wbGF0ZVJpZ2h0Qm90dG9tSW5wdXQoKSkge1xuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVSaWdodEJvdHRvbUlucHV0KClcIiAvPlxuICAgICAgfVxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -239,7 +239,10 @@ class LibsUiComponentsInputsInputComponent {
239
239
  this.init();
240
240
  }, { allowSignalWrites: true });
241
241
  effect(() => {
242
- untracked(() => this.afterViewInit());
242
+ if (this.Element) {
243
+ this.onDestroy.next();
244
+ untracked(() => this.afterViewInit());
245
+ }
243
246
  });
244
247
  }
245
248
  ngOnInit() {
@@ -1 +1 @@
1
- {"version":3,"file":"libs-ui-components-inputs-input.mjs","sources":["../../../../../../libs-ui/components/inputs/input/src/defines/index-iframe-area.define.ts","../../../../../../libs-ui/components/inputs/input/src/input.component.ts","../../../../../../libs-ui/components/inputs/input/src/input.component.html","../../../../../../libs-ui/components/inputs/input/src/libs-ui-components-inputs-input.ts"],"sourcesContent":["export const indexInputHtml = (borderColor?: string) => `\n<!DOCTYPE html>\n<html>\n <head>\n <base href=\"/\" />\n </head>\n <style type=\"text/css\">\n \t::-webkit-scrollbar {\n\t width: 8px;\n\t height: 8px; \n\t cursor: default;\n\t}\n\t \n\t::-webkit-scrollbar-track {\n\t border-radius: 0;\n\t background: #fff;\n\t}\n\n\t \n\t::-webkit-scrollbar-track:hover {\n\t background: rgba(78, 78, 78, 0.05);\n\t}\n\n\t::-webkit-scrollbar-track:focus {\n\t background: #b3b3b3;\n\t}\n\n\t::-webkit-scrollbar-track:checked {\n\t background: #b3b3b3;\n\t}\n\t \n\t \n\t::-webkit-scrollbar-thumb {\n\t border-radius: 0;\n\t background: rgba(78, 78, 78, 0.15);\n\t box-shadow: inset 1px 1px 2px 0 rgba(78, 78, 78, 0.3);\n\t}\n\n\t::-webkit-scrollbar-thumb:hover {\n\t background: #dadada;\n\t box-shadow: inset 1px 1px 2px 0 rgba(78, 78, 78, 0.3);\n\t}\n\n\t::-webkit-scrollbar-thumb:focus {\n\t background: #b3b3b3;\n\t box-shadow: inset 1px 1px 2px 0 rgba(78, 78, 78, 0.3);\n\t}\n\n\t::-webkit-scrollbar-thumb:checked {\n\t background: #b3b3b3;\n\t box-shadow: inset 1px 1px 2px 0 rgba(78, 78, 78, 0.3);\n\t}\n\n\tbody{\n\t\tmax-width: 100vw;\n\t\tmax-height:100vh;\n\t\tpadding: 0;\n\t\tmargin: 0;\n\t\toverflow: hidden;\n\t}\n\n\ttextarea{\n\t\tmax-width: 100vw;\n\t\tmax-height:100vh;\n\t\tresize: none;\n\t\tborder: none;\n\t\tborder: ${borderColor ? ' 1px solid #e6e7ea;':'none'};\n\t\twidth: 100%;\n\t\tborder-radius: 4px;\n\t\tfont-size: 14px;\n\t\tfont-weight: normal;\n\t\tfont-style: normal;\n\t\tline-height: 16px;\n\t\theight: auto;\n\t\tcolor: #4e4e4e;\n\t\tpadding: 6px 12px;\n\t\tbackground-color: #fff;\n\t\tfont-size: 12px !important;\n\t\tfont-family:var(--libs-ui-font-family-name) !important;\n\t\toverflow: hidden;\n\t\tmargin: 0;\n\t\tresize: none;\n\t}\n\t${borderColor ? `textarea:focus:not(:read-only):not(:disabled) {\n\t\tborder: 1px solid ${borderColor};\n\t}`: ''}\n\n\ttextarea::-webkit-input-placeholder {\n\t\tcolor: rgba(78, 78, 78, 0.5) !important;\n\t}\n\n\ttextarea:-moz-placeholder {\n\t\t/* Firefox 18- */\n\t\tcolor: rgba(78, 78, 78, 0.5) !important;\n\t}\n\n\ttextarea::-moz-placeholder {\n\t\t/* Firefox 19+ */\n\t\tcolor: rgba(78, 78, 78, 0.5) !important;\n\t}\n\n\ttextarea:-ms-input-placeholder {\n\t\tcolor: rgba(78, 78, 78, 0.5) !important;\n\t}\n\n\ttextarea:focus {\n \toutline: none;\n\t}\n\t*, ::after, ::before {\n \tbox-sizing: border-box;\n\t}\n \n </style>\n\n <body>\n\t <textarea></textarea>\n </body>\n</html>`;","\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ChangeDetectionStrategy, Component, ElementRef, OnDestroy, OnInit, Renderer2, TemplateRef, computed, effect, inject, input, model, output, signal, untracked, viewChild } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { ISort, LibsUiComponentsButtonsSortComponent } from '@libs-ui/components-buttons-sort';\nimport { LibsUiComponentsPopoverComponent } from '@libs-ui/components-popover';\nimport { IEvent, IEventCustom, IString, TYPE_TEMPLATE_REF } from '@libs-ui/interfaces-types';\nimport { LibsUiConfigProjectService } from '@libs-ui/services-config-project';\nimport { UtilsCache, UtilsKeyCodeConstant, UtilsLanguageConstants, formatNumber, isNil, removeEmoji, setCaretPosition, uuid, viewDataNumberByLanguage } from '@libs-ui/utils';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { Observable, Subject, fromEvent } from 'rxjs';\nimport { debounceTime, filter, mergeMap, take, takeUntil, tap } from 'rxjs/operators';\nimport { indexInputHtml } from './defines/index-iframe-area.define';\nimport { IFocusAndBlurEvent } from './interfaces/focus-and-blur-event.interface';\nimport { IInputFunctionControlEvent } from './interfaces/function-control-event.interface';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-inputs-input',\n templateUrl: './input.component.html',\n styleUrls: ['./input.component.scss'],\n standalone: true,\n imports: [\n TranslateModule,\n LibsUiComponentsPopoverComponent,\n LibsUiComponentsButtonsSortComponent\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\n\nexport class LibsUiComponentsInputsInputComponent implements OnInit, OnDestroy {\n /* PROPERTY */\n protected disableAsc = signal(false);\n protected disableDesc = signal(false);\n protected htmlIframeArea = signal<SafeHtml | undefined>(undefined);\n protected countDisplay = computed(this.countDisplayComputed.bind(this));\n protected maxLengthDisplay = computed(() => `${viewDataNumberByLanguage(this.maxLength() || 0, false)}`);\n protected paddingRightCustom = signal<number>(0);\n protected inputIframeRef = signal<ElementRef | undefined>(undefined);\n\n private readonly DEFAULT_MAX_HEIGHT_TEXT_AREA = 250;\n private charFirstIsZero = signal<boolean>(false);\n private preHeightArea = signal<number>(0);\n private iframeRef: HTMLIFrameElement | undefined;\n private dataTextPaste = signal<string>('');\n private onDestroy = new Subject<void>();\n\n /* INPUT */\n readonly tagInput = input<'input' | 'textarea' | 'iframe-textarea', 'input' | 'textarea' | 'iframe-textarea' | undefined>('input', { transform: value => value ?? 'input' });\n readonly dataType = input<'string' | 'int' | 'float' | 'bigint'>('string');\n readonly tabInsertContentTagInput = input<boolean>(false);\n readonly textAreaEnterNotNewLine = input<boolean>(false);\n readonly emitEmptyInDataTypeNumber = input<boolean | undefined>(false);\n readonly keepZeroInTypeInt = input<boolean>(false);\n readonly autoAddZeroLessThan10InTypeInt = input<boolean | undefined>(false);\n readonly ignoreBlockInputMaxValue = input<boolean>();\n readonly hiddenContent = input<boolean>(false); // sử dụng để set type cho input dạng text hay password\n readonly maxValueNumber = model<number>();\n readonly minValueNumber = model<number>();\n readonly fixedFloat = model<number>();\n readonly acceptNegativeValue = model<boolean | undefined>(false);\n readonly valueUpDownNumber = input<number | undefined>();\n readonly classInclude = input<string, string>(' w-full ', { transform: (value) => value || ' w-full ' });\n readonly maxLength = model<number | undefined>();\n readonly readonly = input<boolean | undefined>(false);\n readonly disable = input<boolean | undefined>(false);\n readonly noBorder = input<boolean>();\n readonly backgroundNone = input<boolean | undefined>(false);\n readonly borderError = input<boolean>(false);\n readonly useColorModeExist = input<boolean | undefined>(false);\n readonly placeholder = input<string, string>(' ', { transform: (value) => value || ' ' });\n readonly keepPlaceholderOnly = input<boolean | undefined>(false);\n readonly value = model<string | number>('');\n readonly autoRemoveEmoji = input<boolean | undefined>(false);\n readonly defaultHeight = input<number, number | undefined>(32, { transform: (value) => value || 32 });\n readonly minHeightTextArea = input<number | undefined>();\n readonly maxHeightTextArea = input<number, number | undefined>(this.DEFAULT_MAX_HEIGHT_TEXT_AREA, { transform: (value) => value || this.DEFAULT_MAX_HEIGHT_TEXT_AREA });\n readonly focusTimeOut = input<number, number | undefined>(600, { transform: value => value ?? 600 });\n readonly blurTimeOut = input<number, number | undefined>(32, { transform: (value) => value || 32 });\n readonly zIndexPopoverContent = input<number, number | undefined>(10, { transform: (value) => value || 10 });\n readonly classContainerInput = input<string, string | undefined>('w-full', { transform: (value) => value || 'w-full' });\n readonly showCount = input<boolean>();\n readonly ignoreStopPropagationEvent = input<boolean>();\n readonly resize = input<'auto' | 'none' | undefined, 'auto' | 'none' | undefined>('auto', { transform: (value) => value || 'auto' });\n readonly templateLeftBottomInput = input<TemplateRef<TYPE_TEMPLATE_REF>>();\n readonly templateRightBottomInput = input<TemplateRef<TYPE_TEMPLATE_REF>>();\n readonly classContainerBottomInput = input<string | undefined, string | undefined>(' ', { transform: (value) => value || ' ' });\n readonly ignoreWidthInput100 = input<boolean>();\n\n readonly iconLeftClass = input<string, string | undefined>('', { transform: (value) => value || '' });\n readonly popoverContentIconLeft = input<string, string | undefined>('', { transform: (value) => value || '' });\n readonly iconRightClass = input<string, string | undefined>('', { transform: (value) => value || '' });\n readonly popoverContentIconRight = input<string, string | undefined>('', { transform: (value) => value || '' });\n readonly resetAutoCompletePassword = input<boolean, boolean | undefined>(false, { transform: value => value ?? false });\n readonly acceptOnlyClickIcon = input<boolean | undefined>(false);\n readonly setIconRightColorSameColorDisableReadOnly = input<boolean | undefined>(false);\n readonly onlyAcceptNegativeValue = input<boolean | undefined>(false);\n readonly maxLengthNumberCount = model<number | undefined>();\n readonly focusInput = input<boolean>(false);\n\n /* OUTPUT */\n readonly outHeightAreaChange = output<{ isChange: boolean, height: number }>();\n readonly outChange = output<any>();\n readonly outFocusAndBlurEvent = output<IFocusAndBlurEvent>();\n readonly outEnterEvent = output<IEvent>();\n readonly outInputEvent = output<IEvent>();// emit pure event input\n readonly outIconLeft = output<string>();\n readonly outIconRight = output<string>();\n readonly outFunctionsControl = output<IInputFunctionControlEvent>();\n readonly outFilesDrop = output<Array<File>>();\n readonly outFileDrop = output<File>();\n readonly outChangeValueByButtonUpDown = output<void>();\n\n /* VIEW CHILD */\n protected inputRef = viewChild<ElementRef>('inputRef');\n protected textCountRef = viewChild<ElementRef>('textCountRef');\n protected elementRightRef = viewChild<ElementRef>('elementRightRef');\n\n /* INJECT */\n private renderer = inject(Renderer2);\n private configProjectService = inject(LibsUiConfigProjectService);\n private translateService = inject(TranslateService);\n private sanitizer = inject(DomSanitizer);\n\n constructor() {\n effect(() => {\n if (this.onlyAcceptNegativeValue()) {\n this.acceptNegativeValue.set(true);\n }\n if (!this.Element) {\n return;\n }\n\n if (this.dataType() === 'string') {\n\n if (this.Element.value !== this.value()) {\n this.init();\n }\n\n return;\n }\n this.updateMaxLengthMinMaxValueByDataType();\n const value = this.parseValueByDataType(this.Element.value);\n\n if ((this.Element.value !== '' && value === this.value()) || (this.Element.value === '' && this.emitEmptyInDataTypeNumber() && this.value() === undefined)) {\n return;\n }\n this.init();\n }, { allowSignalWrites: true });\n effect(() => {\n untracked(() => this.afterViewInit());\n });\n }\n\n ngOnInit(): void {\n this.htmlIframeArea.set(this.sanitizer.bypassSecurityTrustHtml(indexInputHtml(this.noBorder() ? '' : `${this.configProjectService.colorStepContrastFromOrigin(20)?.light}`)));\n }\n\n afterViewInit() {\n if (!this.Element) {\n return;\n }\n this.outHeightAreaChange.emit({ isChange: false, height: this.Element?.scrollHeight });\n this.outFunctionsControl.emit({\n focus: this.focus.bind(this),\n blur: this.blur.bind(this),\n insertContent: this.addDataToSelectionInput.bind(this),\n resetValue: this.resetValue.bind(this),\n getElementValue: this.getElementValue.bind(this),\n checkAndDisableUpDownButton: this.checkAndDisableUpDownButton.bind(this)\n });\n this.init();\n\n this.initEvent('focus', this.ignoreStopPropagationEvent()).subscribe((e: IEvent) => this.outFocusAndBlurEvent.emit({ name: 'focus', event: e }));\n this.initEvent('blur', this.ignoreStopPropagationEvent()).subscribe((e: IEvent) => this.outFocusAndBlurEvent.emit({ name: 'blur', event: e }));\n const mouseDownEvent = this.initEvent('mousedown', this.ignoreStopPropagationEvent()).pipe(take(1));\n const keyDownEvent = this.initEvent('keydown', this.ignoreStopPropagationEvent());\n const inputEvent = this.initEvent('input', this.ignoreStopPropagationEvent());\n const cutEvent = this.initEvent('cut', this.ignoreStopPropagationEvent());\n const pasteEvent = this.initEvent('paste', this.ignoreStopPropagationEvent());\n const keyupEvent = this.initEvent('keyup', this.ignoreStopPropagationEvent());\n\n this.initEvent('click', this.ignoreStopPropagationEvent() ?? true).subscribe();\n this.initEvent('dragover', this.ignoreStopPropagationEvent()).pipe(tap((event: IEvent) => {\n event.preventDefault();\n event.stopPropagation();\n event.dataTransfer.dropEffect = 'copy';\n })).subscribe();\n\n this.initEvent('drop', this.ignoreStopPropagationEvent()).subscribe(this.checkAndEmitFiles.bind(this));\n pasteEvent.subscribe(this.checkAndEmitFiles.bind(this));\n\n this.combineObservable(mouseDownEvent, pasteEvent);\n this.combineObservable(mouseDownEvent, cutEvent);\n keyDownEvent.pipe(\n take(1),\n tap((e: IEvent) => this.checkTypeNumber(e, 'key')),\n mergeMap(() => inputEvent),\n tap((e: IEvent) => this.checkTypeNumber(e, 'data')),\n ).subscribe((e: IEvent) => {\n if (this.dataType() === 'string' && this.maxLength() && (e.inputType === 'insertCompositionText' || e.inputType === 'insertText') && e.target.value?.length > (this.maxLength() || 0)) {\n e.target.value = e.target.value.slice(0, this.maxLength());\n }\n this.processEventAndEmitValue(e);\n });\n\n keyupEvent.pipe(\n filter((event: IEvent) => event.keyCode === UtilsKeyCodeConstant.ENTER),\n filter((event: IEvent) => !this.textAreaEnterNotNewLine() || (this.textAreaEnterNotNewLine() && !event.shiftKey))).subscribe((event: IEvent) => this.outEnterEvent.emit(event));\n\n if (this.dataType() === 'string' && (this.tagInput() !== 'input' || (this.tagInput() === 'input' && this.tabInsertContentTagInput()))) {\n keyDownEvent.pipe(\n filter((event: IEvent) => event.keyCode === UtilsKeyCodeConstant.TAB),\n tap((event: IEvent) => event.preventDefault()),\n filter((event: IEvent) => !event.target.value || !this.maxLength() || event.target.value.length < (this.maxLength() || 25)),\n tap((event: IEvent) => {\n if (this.readonly() || this.disable()) {\n return;\n }\n this.insetValueToSelectionStart('\\t', event);\n })\n ).subscribe();\n }\n\n if (this.textAreaEnterNotNewLine()) {\n keyDownEvent.pipe(\n filter((event: IEvent) => event.keyCode === UtilsKeyCodeConstant.ENTER && !event.shiftKey),\n tap((e: IEvent) => e.preventDefault())\n ).subscribe();\n }\n\n }\n\n /* FUNCTIONS*/\n private updateMaxLengthMinMaxValueByDataType() {\n if (this.dataType() === 'int' || this.dataType() === 'float') {\n this.maxLength.update(value => {\n return !value || value > 21 ? 21 : value;\n });\n this.minValueNumber.update(value => value || Number.MIN_SAFE_INTEGER);\n this.maxValueNumber.update(value => value || Number.MAX_SAFE_INTEGER);\n }\n if (this.dataType() === 'bigint') {\n this.maxLength.update(value => !value || value > 25 ? 25 : value);\n this.fixedFloat.update(value => value ?? 4);\n this.maxLengthNumberCount.update(value => value ?? 19);\n }\n }\n\n private async getElementValue() {\n return this.Element?.value;\n }\n\n private checkAndEmitFiles(event: IEvent) {\n const files = event.dataTransfer?.files || event.clipboardData?.files;\n const text = (event.clipboardData || (window as any).clipboardData)?.getData('text');\n\n this.dataTextPaste.set(text);\n if (!files || !files.length) {\n return;\n }\n if (!text) {\n event.preventDefault();\n }\n event.stopPropagation();\n const fileList = [];\n\n for (const file of files) {\n if (Object.prototype.toString.call(file) === '[object File]') {\n this.outFileDrop.emit(file);\n fileList.push(file);\n }\n }\n this.outFilesDrop.emit(fileList);\n\n }\n\n private insetValueToSelectionStart(text: string, event: IEvent) {\n event.preventDefault();\n event.stopPropagation();\n this.Element.setRangeText(text, this.Element.selectionStart, this.Element.selectionStart, 'end');\n this.processEventAndEmitValue(event);\n }\n\n private get Element() {\n return this.inputIframeRef()?.nativeElement || this.inputRef()?.nativeElement;\n }\n\n protected handlerChangeValue(data: ISort) {\n data.reset();\n if (this.disable() || this.readonly()) {\n return;\n }\n const operator = data.mode === 'asc' ? 1 : -1;\n let value = +this.value() || 0;\n const separator = UtilsCache.getLang() === UtilsLanguageConstants.VI ? '.' : ',';\n const splitValue = (this.value() || this.minValueNumber() || 0).toString().split(separator);\n const dataBehindSeparator = splitValue?.[1];\n\n if (this.dataType() === 'bigint') {\n value = +(splitValue?.[0] || 0);\n }\n value = value + (this.valueUpDownNumber() ?? 1) * operator;\n if (!this.acceptNegativeValue() && value < 0) {\n value = 0;\n }\n const dataEmit = this.dataType() === 'bigint' ? `${value}${dataBehindSeparator ? separator : ''}${dataBehindSeparator}` : value;\n this.value.set(dataEmit)\n this.outChange.emit(dataEmit);\n this.outChangeValueByButtonUpDown.emit();\n this.checkAndDisableUpDownButton(value);\n }\n\n protected handlerEventIconLeft(e: Event, eventName: string) {\n e.stopPropagation();\n if ((this.disable() || this.readonly()) && !this.acceptOnlyClickIcon()) {\n return;\n }\n this.outIconLeft.emit(eventName);\n }\n\n protected handlerEventIconRight(e: Event, eventName: string) {\n e.stopPropagation();\n if ((this.disable() || this.readonly()) && !this.acceptOnlyClickIcon()) {\n return;\n }\n this.outIconRight.emit(eventName);\n }\n\n private async checkAndDisableUpDownButton(value: number) {\n if (this.dataType() !== 'int' && this.dataType() !== 'float' && this.dataType() !== 'bigint') {\n return;\n }\n this.disableAsc.set(false);\n this.disableDesc.set(false);\n this.minValueNumber.update(value => value ?? Number.MIN_SAFE_INTEGER);\n this.maxValueNumber.update(value => value ?? Number.MAX_SAFE_INTEGER);\n value = value ?? 0;\n\n if (!isNil(this.maxValueNumber()) && value >= (this.maxValueNumber() ?? Number.MAX_SAFE_INTEGER)) {\n this.disableAsc.set(true);\n }\n\n if (!isNil(this.minValueNumber()) && value <= (this.minValueNumber() || 0)) {\n this.disableDesc.set(true);\n }\n }\n\n protected initEvent(eventName: string, ignoreStopPropagationEvent?: boolean): Observable<IEvent> {\n return fromEvent<IEvent>(this.Element, eventName).pipe(\n tap((e: IEvent) => {\n if (!ignoreStopPropagationEvent) {\n e.stopPropagation();\n }\n this.outInputEvent.emit(e);\n }),\n takeUntil(this.onDestroy)\n );\n }\n\n private convertValue(value: string) {\n if (value && this.dataType() === 'bigint') {\n const separator = (UtilsCache.getLang() === UtilsLanguageConstants.VI) ? '.' : ',';\n let [int, decimal] = value.split(separator);\n const decimalSplit = decimal ? decimal.split('') : [];\n const decimalEveryZero = decimalSplit.every(item => item === '0');\n\n if (int === '-0' && (!decimal || decimalEveryZero)) {\n int = '0';\n }\n if (!decimal || decimalEveryZero) {\n decimal = '0';\n }\n if (decimalSplit.some(item => item !== '0')) {\n const decimalReverse = decimalSplit.reverse().join('');\n\n decimal = decimalReverse.replace(/(^[0]+)/, '').split('').reverse().join('');\n }\n\n return `${int}${separator}${decimal}`;\n }\n\n return value;\n }\n\n private init() {\n if (!this.maxLength()) {\n this.updateMaxLengthMinMaxValueByDataType();\n }\n if (!this.Element) {\n return;\n }\n let elementValue = this.convertValue(`${this.value() ?? ''}`);\n\n if (this.dataType() !== 'string') {\n elementValue = elementValue.replace((new RegExp(`[^0-9.,${this.acceptNegativeValue() ? '-' : ''}]`, 'g')), '');\n if (UtilsCache.getLang() === UtilsLanguageConstants.EN) {\n elementValue = elementValue.replace(/[,]/, '');\n }\n }\n this.Element.value = elementValue;\n\n const eventFake: IEventCustom = { preventDefault: () => { return }, target: this.Element, data: elementValue, fakeEvent: true };\n\n this.checkTypeNumber(eventFake, 'data');\n this.processEventAndEmitValue(eventFake);\n }\n\n private processEventAndEmitValue(e: IEvent | IEventCustom): void {\n const value: any = this.parseValueByDataType(e.target.value);\n\n if (this.dataType() !== 'string' && !this.ignoreBlockInputMaxValue() && !isNil(this.maxValueNumber()) && value > (this.maxValueNumber() || 0) && this.value() < value) {\n const valueDisplay = viewDataNumberByLanguage(`${this.value()}`.replace(/[.]/g, ','), this.acceptNegativeValue(), (this.fixedFloat() ?? 14));\n\n e.target.value = `${this.getCheckZero(+valueDisplay, e.target.value)}${valueDisplay}`;\n\n return this.processEventAndEmitValue(e);\n }\n if (this.dataType() !== 'string' && isNil(value)) {\n e.target.value = 0;\n\n return this.processEventAndEmitValue(e);\n }\n\n if (e.fakeEvent && (`${this.value() ?? ''}` === `${value}` || (this.emitEmptyInDataTypeNumber() && e.target.value.trim() === ''))) {\n this.checkAndDisableUpDownButton(this.dataType() === 'bigint' ? value : +value);\n\n setTimeout(() => {\n this.calculatorHeightTextArea(e);\n }, 250);\n\n return;\n }\n this.value.set(value);\n if (this.emitEmptyInDataTypeNumber() && e.target.value.trim() === '') {\n const dataEmit = this.dataType() === 'string' ? '' : undefined;\n this.value.set(dataEmit as any);\n }\n this.outChange.emit(this.value());\n this.checkAndDisableUpDownButton(this.dataType() === 'bigint' ? value : +value);\n this.calculatorHeightTextArea(e);\n }\n\n private checkMaxLengthNumberAndSetValue(valueDisplay: string, e: IEvent | IEventCustom): boolean {\n if (isNil(this.value()) || (+this.value() > 0 && this.parseValueByDataType(valueDisplay) < this.value()) || (+this.value() < 0 && this.parseValueByDataType(valueDisplay) > this.value())) {\n return false;\n }\n const valueCompare = formatNumber(valueDisplay).toString();\n const numbers = valueCompare.split('.');\n let lengthValueCompare = 0;\n let maxLength = (this.acceptNegativeValue() && typeof +this.value() === 'number' && +this.value() < 0) ? (this.maxLength() || 21) + 1 : (this.maxLength() || 21);\n\n if (this.dataType() === 'float') {\n maxLength--;\n }\n if (numbers && numbers[0]) {\n lengthValueCompare = viewDataNumberByLanguage(`${numbers[0]}`.replace(/[.]/g, ','), this.acceptNegativeValue(), (this.fixedFloat() ?? 14)).length;\n }\n if (numbers && numbers[1]) {\n lengthValueCompare += 1 + numbers[1].length;\n }\n if (maxLength && lengthValueCompare >= maxLength) {\n const valueDisplay = viewDataNumberByLanguage((lengthValueCompare === maxLength ? valueCompare : `${this.value()}`).replace(/[.]/g, ','), this.acceptNegativeValue(), (this.fixedFloat() ?? 14));\n\n e.target.value = `${this.getCheckZero(+valueDisplay, e.target.value)}${valueDisplay}`;\n\n return true;\n }\n\n return false;\n }\n\n private checkTypeNumber(e: IEvent | IEventCustom, fieldName: string) {\n const currentLang = UtilsCache.getLang();\n const separator = (currentLang === UtilsLanguageConstants.VI) ? '.' : ',';\n const separatorRevert = (currentLang === UtilsLanguageConstants.VI) ? ',' : '.';\n let valueTarget: IString = e.target.value;\n const selectionStart = e.target.selectionStart - 1;\n const { data, keyCode } = e;\n\n this.charFirstIsZero.set(false);\n if (valueTarget.charAt(0) === '0') {\n this.charFirstIsZero.set(true);\n }\n\n if (this.dataType() === 'string') {\n if (this.autoRemoveEmoji()) {\n e.target.value = removeEmoji(valueTarget);\n }\n\n return;\n }\n if (/[0-9]/g.test(data) && valueTarget.charAt(selectionStart + 1) === '-') {\n valueTarget = valueTarget.replaceAt(0, '') as IString;\n }\n let strRegex = `[^0-9.,${this.acceptNegativeValue() ? '-' : ''}]`;\n\n if ((new RegExp(strRegex, 'gi')).test((e as any)[fieldName]) && keyCode !== UtilsKeyCodeConstant.BACKSPACE) {\n e.preventDefault();\n e.target.value = valueTarget = e.target.value.replace((new RegExp(strRegex, 'gi')), '') as IString;\n }\n if (!e.fakeEvent) {\n switch (data) {\n case separator:\n valueTarget = valueTarget.replace((new RegExp(`[${separator}]`, 'gi')), '') as IString;\n break;\n\n case separatorRevert:\n {\n if (currentLang === UtilsLanguageConstants.VI && this.dataType() === 'int') {\n e.target.value = valueTarget.replace((new RegExp(`[${separatorRevert}]`, 'gi')), '') as IString;\n\n return;\n }\n if (valueTarget === separatorRevert) {\n e.target.value = '';\n\n return;\n }\n if (valueTarget && valueTarget.length === 2 && valueTarget.charAt(0) === '-' && data && !/[0-9]/g.test(data)) {\n e.target.value = '-';\n\n return;\n }\n const occurrencesByCharacter = valueTarget.occurrencesByCharacter(separatorRevert);\n\n if (occurrencesByCharacter > 1) {\n valueTarget = valueTarget.replaceAt(e.target.selectionStart - 1, '') as IString;\n break;\n }\n let maxLength = this.dataType() === 'float' ? (this.maxLength() || 21) - 1 : (this.maxLength() || 21);\n\n if (valueTarget.indexOf('-') >= 0) {\n maxLength++;\n }\n if (occurrencesByCharacter === 1 && valueTarget.length === maxLength && valueTarget.indexOf(separatorRevert) === valueTarget.length - 1) {\n valueTarget = valueTarget.replaceAt(e.target.selectionStart - 1, '') as IString;\n break;\n }\n if (this.onlyAcceptNegativeValue() && valueTarget === `0${separatorRevert}`) {\n e.target.value = '0';\n }\n\n return;\n }\n }\n valueTarget = formatNumber(valueTarget) as IString;\n }\n const indexesOfDash = valueTarget.indexesOfCharacter?.('-') || [];\n\n if (indexesOfDash.length) {\n const [firstIndex, secondIndex] = indexesOfDash;\n const indexReplace = firstIndex || secondIndex; // firstIndex=0 thì ko xóa\n\n if (indexReplace) {\n valueTarget = valueTarget.replaceAll(indexReplace, '-', '') as IString;\n }\n }\n if (this.acceptNegativeValue() && valueTarget === '-') {\n e.target.value = valueTarget;\n\n return;\n }\n switch (this.dataType()) {\n case 'int':\n {\n strRegex = `[^0-9${this.acceptNegativeValue() ? '-' : ''}]`;\n if (!e.fakeEvent) {\n valueTarget = valueTarget.replace(new RegExp(strRegex, 'gi'), '') as IString;\n const maxTotalNumber = valueTarget.includes('-') ? 17 : 16;\n\n if (valueTarget.length > maxTotalNumber) {\n valueTarget = valueTarget.slice(0, maxTotalNumber) as IString;\n }\n if (Math.abs(parseInt(valueTarget)) > (this.maxValueNumber() || 9007199254740991)) {\n valueTarget = valueTarget.slice(0, maxTotalNumber - 1) as IString;\n }\n if (this.onlyAcceptNegativeValue() && valueTarget[0] !== '-' && valueTarget[0] !== '0') {\n valueTarget = '' as IString;\n }\n if (valueTarget && /(^-)?(^[0]+)/.test(valueTarget)) {\n const id = uuid();\n\n valueTarget = valueTarget.replace(/(^-)?(^[0]+)/, `$1${id}`).replace(id, '0') as IString;\n }\n if (valueTarget === '-0') {\n valueTarget = '0' as IString;\n }\n if (valueTarget && /(^[0])([1-9])([0-9]+)?/.test(valueTarget)) {\n valueTarget = valueTarget.replace(/(^[0])([1-9])([0-9]+)?/, '$2$3') as IString;\n }\n const valueDisplay = viewDataNumberByLanguage(valueTarget, (this.acceptNegativeValue() || false), 0);\n\n if (this.checkMaxLengthNumberAndSetValue(valueDisplay, e)) {\n break;\n }\n e.target.value = `${this.getCheckZero(+valueDisplay, e.target.value)}${valueDisplay}`;\n break;\n }\n const indexOfDot = valueTarget.indexOf('.');\n const indexOfComma = valueTarget.indexOf(',');\n let indexChoose = indexOfDot;\n\n if (indexOfDot < 0 || indexOfDot > indexOfComma) {\n indexChoose = indexOfComma;\n }\n if (indexChoose >= 0) {\n valueTarget = valueTarget.substring(0, indexChoose) as IString;\n }\n const valueDisplay = viewDataNumberByLanguage(valueTarget, (this.acceptNegativeValue() || false), 0);\n\n if (this.checkMaxLengthNumberAndSetValue(valueDisplay, e)) {\n break;\n }\n e.target.value = `${this.getCheckZero(+valueDisplay, e.target.value)}${valueDisplay}`;\n break;\n }\n\n case 'float':\n\n // eslint-disable-next-line no-fallthrough\n case 'bigint':\n this.getValueFormat(e, valueTarget, separator, separatorRevert, currentLang);\n break;\n }\n if (valueTarget === 'NaN') {\n e.target.value = '' as IString;\n }\n if (e.fakeEvent || data === undefined) {\n return;\n }\n this.setCaretPosition(e, selectionStart + 1);\n }\n\n private getValueFormat(e: IEvent | IEventCustom, valueTarget: IString, separator: '.' | ',', separatorRevert: '.' | ',', currentLang: string) {\n let strRegex = `[^0-9${separator}${currentLang === UtilsLanguageConstants.EN ? '.' : ''}${this.acceptNegativeValue() ? '-' : ''}]`;\n\n if (!e.fakeEvent) {\n valueTarget = valueTarget.replace(new RegExp(strRegex, 'gi'), '') as IString;\n }\n const indexesOfSeparator = valueTarget.indexesOfCharacter(separator);\n const [firstIndex, secondIndex] = indexesOfSeparator;\n\n if (secondIndex) {\n valueTarget = e.target.value.replaceAll(secondIndex, separator, '');\n }\n if (firstIndex && valueTarget.substring(firstIndex + 1).length >= (this.fixedFloat() ?? 14)) {\n valueTarget = valueTarget.substring(0, firstIndex + (this.fixedFloat() ?? 14) + 1) as IString;\n }\n strRegex = `[${separator}]`;\n valueTarget = valueTarget.replace(new RegExp(strRegex, 'g'), separatorRevert) as IString;\n let valueFormat = '';\n let [fontSeparatorNumber, behindSeparatorNumber] = valueTarget.split(separatorRevert);\n let maxFontTotalNumber = (fontSeparatorNumber && fontSeparatorNumber.includes('-')) ? 16 : 15;\n\n if (this.dataType() === 'bigint') {\n maxFontTotalNumber = (this.maxLengthNumberCount() ?? 19) - (this.fixedFloat() ?? 4) + (fontSeparatorNumber.includes('-') ? 1 : 0);\n }\n const fontOverMaxTotalNumber = fontSeparatorNumber && fontSeparatorNumber.length >= maxFontTotalNumber;\n\n if (fontOverMaxTotalNumber) {\n fontSeparatorNumber = fontSeparatorNumber.slice(0, maxFontTotalNumber) as IString;\n if (this.dataType() === 'float') {\n behindSeparatorNumber = '';\n }\n }\n switch (this.dataType()) {\n case 'float':\n if (!fontOverMaxTotalNumber && behindSeparatorNumber && behindSeparatorNumber.length) {\n behindSeparatorNumber = behindSeparatorNumber.slice(0, maxFontTotalNumber - fontSeparatorNumber.length);\n }\n behindSeparatorNumber = `${behindSeparatorNumber ?? ''}`;\n break;\n\n case 'bigint':\n if (behindSeparatorNumber && behindSeparatorNumber.length && behindSeparatorNumber.length > (this.fixedFloat() ?? 4)) {\n behindSeparatorNumber = behindSeparatorNumber.slice(0, (this.fixedFloat() ?? 4));\n }\n break;\n }\n const indexOfSeparatorRevert = valueTarget.indexOf(separatorRevert);\n\n if (this.onlyAcceptNegativeValue() && fontSeparatorNumber[0] !== '-' && fontSeparatorNumber[0] !== '0') {\n fontSeparatorNumber = '';\n }\n if (this.onlyAcceptNegativeValue() && indexOfSeparatorRevert >= 0 && fontSeparatorNumber[0] !== '-') {\n fontSeparatorNumber = '0';\n behindSeparatorNumber = this.dataType() === 'bigint' ? '0' : '';\n }\n if (fontSeparatorNumber && /(^-)([0]+)/.test(fontSeparatorNumber)) {\n const id = uuid();\n\n fontSeparatorNumber = fontSeparatorNumber.replace(/(^-)([0]+)/, `$1${id}`).replace(id, '0');\n }\n if (fontSeparatorNumber && /(^[0]+)/.test(fontSeparatorNumber)) {\n fontSeparatorNumber = fontSeparatorNumber.replace(/(^[0]+)/, '0');\n }\n if (/(^-)([0]+)([1-9])([0-9.]+)?/.test(fontSeparatorNumber)) {\n fontSeparatorNumber = fontSeparatorNumber.replace(/(^-)([0]+)([1-9])([0-9.]+)?/, '$1$3$4');\n }\n if (/(^[0]+)([1-9])([0-9.]+)?/.test(fontSeparatorNumber)) {\n fontSeparatorNumber = fontSeparatorNumber.replace(/(^[0]+)([1-9])([0-9.]+)?/, '$2$3');\n }\n switch (this.dataType()) {\n case 'float':\n if (/(^[0]{6})/.test(behindSeparatorNumber)) {\n behindSeparatorNumber = behindSeparatorNumber.replace(/(^[0]{6})/, '00000');\n }\n break;\n\n case 'bigint':\n if (/(^[0]{4})/.test(behindSeparatorNumber)) {\n behindSeparatorNumber = behindSeparatorNumber.replace(/(^[0]{4})/, '0000');\n }\n break;\n }\n if (fontSeparatorNumber) {\n fontSeparatorNumber = viewDataNumberByLanguage(fontSeparatorNumber, this.acceptNegativeValue(), (this.fixedFloat() ?? (this.dataType() === 'bigint' ? 4 : 14)));\n }\n const hasSeparatorRevert = (this.dataType() === 'bigint' ? true : !fontOverMaxTotalNumber) && indexOfSeparatorRevert >= 0;\n\n valueFormat = `${fontSeparatorNumber ?? ''}${hasSeparatorRevert ? separatorRevert : ''}${behindSeparatorNumber ?? ''}`;\n if (valueFormat && this.onlyAcceptNegativeValue() && valueFormat[0] !== '-' && valueFormat[0] !== '0') {\n valueFormat = '0';\n }\n if (this.checkMaxLengthNumberAndSetValue(valueFormat, e)) {\n valueTarget = e.target.value;\n\n return;\n }\n valueTarget = e.target.value = valueFormat as IString;\n }\n\n private getCheckZero(value: number, targetCurrent: string): string {\n let zero = '';\n\n if (this.dataType() !== 'int') {\n return zero;\n }\n\n if (this.charFirstIsZero() && this.keepZeroInTypeInt() && value !== 0) {\n zero = '0';\n }\n\n if (this.charFirstIsZero() && this.autoAddZeroLessThan10InTypeInt() && ((value > 0 && value < 10 && !/(^0)+/.test(`${targetCurrent}`)) || (targetCurrent && targetCurrent.match(/^[0]{2,}$/)?.length && value === 0))) {\n zero = '0';\n }\n\n return zero;\n }\n\n private setCaretPosition(e: IEvent | IEventCustom, selectionStart: number) {\n const { keyCode, inputType } = e;\n\n if (keyCode === UtilsKeyCodeConstant.UP_ARROW || keyCode === UtilsKeyCodeConstant.DOWN_ARROW || keyCode === UtilsKeyCodeConstant.LEFT_ARROW || keyCode === UtilsKeyCodeConstant.RIGHT_ARROW) {\n return;\n }\n const valueTarget = e.target.value.replace('-', '');\n let value = UtilsCache.getLang() === UtilsLanguageConstants.VI ? `${this.value() || 0}`.replace('.', ',') : `${this.value() || 0}`;\n\n value = viewDataNumberByLanguage(value, this.acceptNegativeValue(), (this.fixedFloat() ?? 14));\n value = `${value}`.replace('-', '');\n\n if (value === valueTarget && value !== '0' && value !== '-') {\n setCaretPosition(this.Element, selectionStart);\n\n return;\n }\n\n let factor = 0;\n const distance = valueTarget.length - value.length;\n if (distance < -1) {\n factor = -1;\n }\n if (distance > 1) {\n factor = 1;\n }\n selectionStart += factor;\n if (inputType === 'insertFromPaste' && this.dataTextPaste()) {\n const dataTextDisplay = `${viewDataNumberByLanguage(this.dataTextPaste(), this.acceptNegativeValue(), (this.fixedFloat() ?? 14))}`;\n const indexes: Array<number> = e.target.value.indexesByString(dataTextDisplay);\n\n selectionStart -= factor;\n\n if (indexes.some(index => index === selectionStart) || !indexes.length) {\n return setCaretPosition(this.Element, selectionStart);\n }\n\n let newSelectionStart = indexes[0];\n\n for (const index of indexes) {\n let replaceValue = formatNumber(`${valueTarget.substring(0, index)}${valueTarget.substring(index + dataTextDisplay.length + 1, valueTarget.length)}`);\n\n replaceValue = viewDataNumberByLanguage(replaceValue, this.acceptNegativeValue(), (this.fixedFloat() ?? 14));\n if (value === replaceValue) {\n newSelectionStart = index;\n break;\n }\n }\n\n if (newSelectionStart >= 0) {\n selectionStart = newSelectionStart + dataTextDisplay.length + 1;\n\n return setCaretPosition(this.Element, selectionStart);\n }\n }\n\n setCaretPosition(this.Element, selectionStart);\n }\n\n private parseValueByDataType(value: string): number | string {\n switch (this.dataType()) {\n case 'string':\n return value;\n\n case 'int':\n if (this.acceptNegativeValue() && (value === '-' || value === ',' || value === '.')) {\n return 0;\n }\n\n return +(formatNumber(value));\n\n case 'float':\n if (this.acceptNegativeValue() && (value === '-' || value === ',' || value === '.')) {\n return 0;\n }\n\n return parseFloat((+formatNumber(value)).toFixed(this.fixedFloat() ?? 14));\n\n case 'bigint':\n if (this.acceptNegativeValue() && (value === '-' || value === ',' || value === '.')) {\n return '0';\n }\n\n return formatNumber(value);\n }\n }\n\n private calculatorHeightTextArea(e: IEvent | IEventCustom) {\n if (this.tagInput() === 'input') {\n return;\n }\n const target = e.target;\n\n target.style.overflow = 'hidden';\n target.style.height = `${this.defaultHeight()}px`;\n const { scrollHeight } = target;\n\n const height = scrollHeight + 2; // border top + bottom = 2\n\n if (!this.preHeightArea() && this.preHeightArea() !== height) {\n this.outHeightAreaChange.emit({ isChange: true, height: height });\n }\n\n if (height > (this.maxHeightTextArea() ?? 32)) {\n target.style.overflow = 'auto';\n }\n if (this.iframeRef) {\n this.iframeRef.style.height = `${height}px`;\n }\n target.style.height = `${height}px`;\n this.preHeightArea.set(height);\n\n }\n\n private combineObservable(mouseDownEvent: Observable<IEvent>, observableMerge: Observable<IEvent>) {\n mouseDownEvent.pipe(\n mergeMap(() => observableMerge),\n debounceTime(0),\n tap((e: IEvent) => this.checkTypeNumber(e, 'key')),\n ).subscribe((e: IEvent) => this.processEventAndEmitValue(e));\n }\n\n private async focus() {\n setTimeout(() => {\n this.Element?.focus();\n }, this.focusTimeOut());\n }\n\n private async blur() {\n setTimeout(() => {\n this.Element?.blur();\n }, this.blurTimeOut());\n }\n\n private async addDataToSelectionInput(data: string | number) {\n const target = this.Element;\n const selectionStart = target.selectionStart;\n\n const value = this.Element.value;\n const beforeValue = value.substring(0, selectionStart);\n const afterValue = value.substring(selectionStart);\n\n this.Element.value = `${beforeValue}${data}${afterValue}`;\n setCaretPosition(this.Element, selectionStart + data.toString().length);\n const eventFake: IEventCustom = { preventDefault: () => { return }, target: this.Element, data: '', fakeEvent: true };\n\n this.processEventAndEmitValue(eventFake);\n }\n\n protected handlerOnLoad(e: Event, element: HTMLIFrameElement) {\n e.stopPropagation();\n this.iframeRef = element;\n const iframe: any = element.contentWindow || element.contentDocument;\n this.configProjectService.setupFontFamily(iframe.document);\n\n this.inputIframeRef.set({ nativeElement: iframe.document.getElementsByTagName('TEXTAREA')[0] });\n if (this.Element) {\n this.renderer.setAttribute(this.Element, 'placeholder', this.translateService.instant(this.placeholder()));\n if (this.disable()) {\n this.renderer.setAttribute(this.Element, 'disabled', 'true');\n }\n this.afterViewInit();\n }\n }\n\n private async resetValue() {\n this.Element.value = '';\n }\n\n private countDisplayComputed() {\n if (!this.showCount() || this.dataType() !== 'string' || typeof this.value() !== 'string') {\n return '0';\n }\n setTimeout(() => {\n this.paddingRightCustom.set((this.elementRightRef()?.nativeElement.getBoundingClientRect().width || 0) + 12);\n if (this.showCount()) {\n if (this.textCountRef()) {\n this.paddingRightCustom.set(this.textCountRef()?.nativeElement.clientWidth + 16);\n }\n\n if (this.tagInput() === 'input') {\n this.paddingRightCustom.update(value => {\n return value + (this.elementRightRef()?.nativeElement.getBoundingClientRect().width || 0);\n })\n }\n }\n });\n\n return `${viewDataNumberByLanguage((this.value() as string).length, false)}`;\n }\n\n ngOnDestroy(): void {\n this.onDestroy.next();\n this.onDestroy.complete();\n }\n}\n","<div [class]=\"'flex relative !text-[#9ca2ad] ' + classContainerInput()\"\n [class.libs-ui-components-input-textarea-container]=\"tagInput() === 'textarea' && resize() === 'auto'\">\n @if (tagInput() === 'input') {\n <input #inputRef\n [class.libs-ui-readonly]=\"readonly()\"\n [class.libs-ui-readonly-background]=\"readonly()\"\n [class.libs-ui-disable]=\"disable()\"\n [class.libs-ui-disable-background]=\"disable()\"\n [style.height.px]=\"defaultHeight()\"\n [style.minHeight.px]=\"defaultHeight()\"\n [style.paddingRight.px.important]=\"paddingRightCustom()\"\n [class.w-full]=\"!ignoreWidthInput100()\"\n [class]=\"'libs-ui-input ' + classInclude()\"\n [class.border-primary-focus-general]=\"focusInput()\"\n [class.libs-ui-input-not-border]=\"noBorder()\"\n [class.libs-ui-bg-special-none]=\"backgroundNone()\"\n [class.libs-ui-border-error-general]=\"borderError()\"\n [class.text-[#29c7cc]]=\"useColorModeExist()\"\n [class.!pl-[40px]]=\"iconLeftClass()\"\n [attr.maxLength]=\"maxLength() || undefined\"\n [placeholder]=\"placeholder() | translate\"\n [attr.type]=\"hiddenContent() ? 'password':'text'\"\n [readonly]=\"readonly()\"\n [disabled]=\"disable()\"\n [autocomplete]=\"resetAutoCompletePassword()? 'new-password':''\" />\n }\n @if (tagInput() === 'textarea') {\n @if (resize() === 'auto') {\n <div class=\"libs-ui-components-input-textarea-container-resize-icon\"></div>\n }\n <textarea #inputRef\n [class.libs-ui-readonly]=\"readonly()\"\n [class.libs-ui-readonly-background]=\"readonly()\"\n [class.libs-ui-disable]=\"disable()\"\n [class.libs-ui-disable-background]=\"disable()\"\n [style.height.px]=\"defaultHeight()\"\n [style.minHeight.px]=\"minHeightTextArea() ?? defaultHeight()\"\n [style.paddingRight.px]=\"paddingRightCustom()\"\n [style.maxHeight.px]=\"maxHeightTextArea()\"\n [style.resize]=\"resize()\"\n [class.w-full]=\"!ignoreWidthInput100()\"\n [class]=\"'libs-ui-input libs-ui-cursor-auto ' + classInclude()\"\n [class.libs-ui-input-not-border]=\"noBorder()\"\n [class.libs-ui-bg-special-none]=\"backgroundNone()\"\n [class.libs-ui-border-error-general]=\"borderError()\"\n [class.text-[#29c7cc]]=\"useColorModeExist()\"\n [class.pl-[32px]]=\"iconLeftClass()\"\n [attr.maxLength]=\"maxLength() || undefined\"\n [placeholder]=\"placeholder() | translate\"\n [readonly]=\"readonly()\"\n [disabled]=\"disable()\">\n </textarea>\n }\n\n @if (tagInput() === 'iframe-textarea' && htmlIframeArea()) {\n <span class=\"d-none\">\n </span>\n <iframe #iframeRef\n [style.maxHeight.px]=\"maxHeightTextArea()\"\n [style.height.px]=\"defaultHeight()\"\n [srcdoc]=\"htmlIframeArea()\"\n class=\"w-full\"\n frameBorder=\"0\"\n (load)=\"handlerOnLoad($event,iframeRef)\">\n </iframe>\n }\n @if (iconLeftClass()) {\n <libs_ui-components-popover [ignoreShowPopover]=\"!popoverContentIconLeft()\"\n [config]=\"{maxWidth:250,direction:'bottom',content:popoverContentIconLeft(),zIndex: zIndexPopoverContent()}\">\n <i [attr.tagInput]=\"tagInput()\"\n [class]=\"iconLeftClass() +' libs-ui-input-icon-left !text-[#9ca2ad]'\"\n (click)=\"handlerEventIconLeft($event,'click')\">\n </i>\n </libs_ui-components-popover>\n }\n <div #elementRightRef\n class=\"absolute flex items-center h-full top-0 right-0\">\n @if (value() && placeholder().trim() && keepPlaceholderOnly()) {\n <span [class]=\"'libs-ui-input-placeholder-custom libs-ui-font-h5r'\">\n {{ placeholder() }}\n </span>\n }\n @if (dataType() !=='string' && valueUpDownNumber()) {\n <libs_ui-components-buttons-sort class=\"mr-[12px]\"\n [disableAsc]=\"disableAsc()\"\n [disableDesc]=\"disableDesc()\"\n [attr.tagInput]=\"tagInput()\"\n [onlyEmit]=\"true\"\n [disable]=\"disable() || readonly()\"\n (outChange)=\"handlerChangeValue($event)\" />\n }\n @if (iconRightClass()) {\n <libs_ui-components-popover class=\"flex\"\n [ignoreShowPopover]=\"!popoverContentIconRight()\"\n [config]=\"{maxWidth:250,direction:'bottom',content:popoverContentIconRight(),zIndex: zIndexPopoverContent()}\">\n <i [attr.tagInput]=\"tagInput()\"\n [class.text-[#6a7383]]=\"(!disable() && !readonly()) || acceptOnlyClickIcon()\"\n [class.text-[#cdd0d6]]='((disable() || readonly()) && !acceptOnlyClickIcon()) || setIconRightColorSameColorDisableReadOnly()'\n [class]=\"iconRightClass() +' libs-ui-input-icon-right'\"\n (click)=\"handlerEventIconRight($event,'click')\">\n </i>\n </libs_ui-components-popover>\n }\n </div>\n\n <div class=\"libs-ui-input-text-bottom {{ classContainerBottomInput() }}\"\n [style.right.px]=\"(tagInput() === 'input' ? (elementRightRef.clientWidth || 0) : 0) + 8\">\n @if (templateLeftBottomInput()) {\n <ng-container *ngTemplateOutlet=\"templateLeftBottomInput()\" />\n }\n @if (dataType() === 'string' && showCount()) {\n <div #textCountRef\n class=\"text-[#9ca2ad] libs-ui-font-h7r\">\n <span>{{ countDisplay() }}</span>\n @if (maxLength()) {\n <span>/{{ maxLengthDisplay() }}</span>\n }\n </div>\n }\n @if (templateRightBottomInput()) {\n <ng-container *ngTemplateOutlet=\"templateRightBottomInput()\" />\n }\n </div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"libs-ui-components-inputs-input.mjs","sources":["../../../../../../libs-ui/components/inputs/input/src/defines/index-iframe-area.define.ts","../../../../../../libs-ui/components/inputs/input/src/input.component.ts","../../../../../../libs-ui/components/inputs/input/src/input.component.html","../../../../../../libs-ui/components/inputs/input/src/libs-ui-components-inputs-input.ts"],"sourcesContent":["export const indexInputHtml = (borderColor?: string) => `\n<!DOCTYPE html>\n<html>\n <head>\n <base href=\"/\" />\n </head>\n <style type=\"text/css\">\n \t::-webkit-scrollbar {\n\t width: 8px;\n\t height: 8px; \n\t cursor: default;\n\t}\n\t \n\t::-webkit-scrollbar-track {\n\t border-radius: 0;\n\t background: #fff;\n\t}\n\n\t \n\t::-webkit-scrollbar-track:hover {\n\t background: rgba(78, 78, 78, 0.05);\n\t}\n\n\t::-webkit-scrollbar-track:focus {\n\t background: #b3b3b3;\n\t}\n\n\t::-webkit-scrollbar-track:checked {\n\t background: #b3b3b3;\n\t}\n\t \n\t \n\t::-webkit-scrollbar-thumb {\n\t border-radius: 0;\n\t background: rgba(78, 78, 78, 0.15);\n\t box-shadow: inset 1px 1px 2px 0 rgba(78, 78, 78, 0.3);\n\t}\n\n\t::-webkit-scrollbar-thumb:hover {\n\t background: #dadada;\n\t box-shadow: inset 1px 1px 2px 0 rgba(78, 78, 78, 0.3);\n\t}\n\n\t::-webkit-scrollbar-thumb:focus {\n\t background: #b3b3b3;\n\t box-shadow: inset 1px 1px 2px 0 rgba(78, 78, 78, 0.3);\n\t}\n\n\t::-webkit-scrollbar-thumb:checked {\n\t background: #b3b3b3;\n\t box-shadow: inset 1px 1px 2px 0 rgba(78, 78, 78, 0.3);\n\t}\n\n\tbody{\n\t\tmax-width: 100vw;\n\t\tmax-height:100vh;\n\t\tpadding: 0;\n\t\tmargin: 0;\n\t\toverflow: hidden;\n\t}\n\n\ttextarea{\n\t\tmax-width: 100vw;\n\t\tmax-height:100vh;\n\t\tresize: none;\n\t\tborder: none;\n\t\tborder: ${borderColor ? ' 1px solid #e6e7ea;':'none'};\n\t\twidth: 100%;\n\t\tborder-radius: 4px;\n\t\tfont-size: 14px;\n\t\tfont-weight: normal;\n\t\tfont-style: normal;\n\t\tline-height: 16px;\n\t\theight: auto;\n\t\tcolor: #4e4e4e;\n\t\tpadding: 6px 12px;\n\t\tbackground-color: #fff;\n\t\tfont-size: 12px !important;\n\t\tfont-family:var(--libs-ui-font-family-name) !important;\n\t\toverflow: hidden;\n\t\tmargin: 0;\n\t\tresize: none;\n\t}\n\t${borderColor ? `textarea:focus:not(:read-only):not(:disabled) {\n\t\tborder: 1px solid ${borderColor};\n\t}`: ''}\n\n\ttextarea::-webkit-input-placeholder {\n\t\tcolor: rgba(78, 78, 78, 0.5) !important;\n\t}\n\n\ttextarea:-moz-placeholder {\n\t\t/* Firefox 18- */\n\t\tcolor: rgba(78, 78, 78, 0.5) !important;\n\t}\n\n\ttextarea::-moz-placeholder {\n\t\t/* Firefox 19+ */\n\t\tcolor: rgba(78, 78, 78, 0.5) !important;\n\t}\n\n\ttextarea:-ms-input-placeholder {\n\t\tcolor: rgba(78, 78, 78, 0.5) !important;\n\t}\n\n\ttextarea:focus {\n \toutline: none;\n\t}\n\t*, ::after, ::before {\n \tbox-sizing: border-box;\n\t}\n \n </style>\n\n <body>\n\t <textarea></textarea>\n </body>\n</html>`;","\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ChangeDetectionStrategy, Component, ElementRef, OnDestroy, OnInit, Renderer2, TemplateRef, computed, effect, inject, input, model, output, signal, untracked, viewChild } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { ISort, LibsUiComponentsButtonsSortComponent } from '@libs-ui/components-buttons-sort';\nimport { LibsUiComponentsPopoverComponent } from '@libs-ui/components-popover';\nimport { IEvent, IEventCustom, IString, TYPE_TEMPLATE_REF } from '@libs-ui/interfaces-types';\nimport { LibsUiConfigProjectService } from '@libs-ui/services-config-project';\nimport { UtilsCache, UtilsKeyCodeConstant, UtilsLanguageConstants, formatNumber, isNil, removeEmoji, setCaretPosition, uuid, viewDataNumberByLanguage } from '@libs-ui/utils';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { Observable, Subject, fromEvent } from 'rxjs';\nimport { debounceTime, filter, mergeMap, take, takeUntil, tap } from 'rxjs/operators';\nimport { indexInputHtml } from './defines/index-iframe-area.define';\nimport { IFocusAndBlurEvent } from './interfaces/focus-and-blur-event.interface';\nimport { IInputFunctionControlEvent } from './interfaces/function-control-event.interface';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-inputs-input',\n templateUrl: './input.component.html',\n styleUrls: ['./input.component.scss'],\n standalone: true,\n imports: [\n TranslateModule,\n LibsUiComponentsPopoverComponent,\n LibsUiComponentsButtonsSortComponent\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\n\nexport class LibsUiComponentsInputsInputComponent implements OnInit, OnDestroy {\n /* PROPERTY */\n protected disableAsc = signal(false);\n protected disableDesc = signal(false);\n protected htmlIframeArea = signal<SafeHtml | undefined>(undefined);\n protected countDisplay = computed(this.countDisplayComputed.bind(this));\n protected maxLengthDisplay = computed(() => `${viewDataNumberByLanguage(this.maxLength() || 0, false)}`);\n protected paddingRightCustom = signal<number>(0);\n protected inputIframeRef = signal<ElementRef | undefined>(undefined);\n\n private readonly DEFAULT_MAX_HEIGHT_TEXT_AREA = 250;\n private charFirstIsZero = signal<boolean>(false);\n private preHeightArea = signal<number>(0);\n private iframeRef: HTMLIFrameElement | undefined;\n private dataTextPaste = signal<string>('');\n private onDestroy = new Subject<void>();\n\n /* INPUT */\n readonly tagInput = input<'input' | 'textarea' | 'iframe-textarea', 'input' | 'textarea' | 'iframe-textarea' | undefined>('input', { transform: value => value ?? 'input' });\n readonly dataType = input<'string' | 'int' | 'float' | 'bigint'>('string');\n readonly tabInsertContentTagInput = input<boolean>(false);\n readonly textAreaEnterNotNewLine = input<boolean>(false);\n readonly emitEmptyInDataTypeNumber = input<boolean | undefined>(false);\n readonly keepZeroInTypeInt = input<boolean>(false);\n readonly autoAddZeroLessThan10InTypeInt = input<boolean | undefined>(false);\n readonly ignoreBlockInputMaxValue = input<boolean>();\n readonly hiddenContent = input<boolean>(false); // sử dụng để set type cho input dạng text hay password\n readonly maxValueNumber = model<number>();\n readonly minValueNumber = model<number>();\n readonly fixedFloat = model<number>();\n readonly acceptNegativeValue = model<boolean | undefined>(false);\n readonly valueUpDownNumber = input<number | undefined>();\n readonly classInclude = input<string, string>(' w-full ', { transform: (value) => value || ' w-full ' });\n readonly maxLength = model<number | undefined>();\n readonly readonly = input<boolean | undefined>(false);\n readonly disable = input<boolean | undefined>(false);\n readonly noBorder = input<boolean>();\n readonly backgroundNone = input<boolean | undefined>(false);\n readonly borderError = input<boolean>(false);\n readonly useColorModeExist = input<boolean | undefined>(false);\n readonly placeholder = input<string, string>(' ', { transform: (value) => value || ' ' });\n readonly keepPlaceholderOnly = input<boolean | undefined>(false);\n readonly value = model<string | number>('');\n readonly autoRemoveEmoji = input<boolean | undefined>(false);\n readonly defaultHeight = input<number, number | undefined>(32, { transform: (value) => value || 32 });\n readonly minHeightTextArea = input<number | undefined>();\n readonly maxHeightTextArea = input<number, number | undefined>(this.DEFAULT_MAX_HEIGHT_TEXT_AREA, { transform: (value) => value || this.DEFAULT_MAX_HEIGHT_TEXT_AREA });\n readonly focusTimeOut = input<number, number | undefined>(600, { transform: value => value ?? 600 });\n readonly blurTimeOut = input<number, number | undefined>(32, { transform: (value) => value || 32 });\n readonly zIndexPopoverContent = input<number, number | undefined>(10, { transform: (value) => value || 10 });\n readonly classContainerInput = input<string, string | undefined>('w-full', { transform: (value) => value || 'w-full' });\n readonly showCount = input<boolean>();\n readonly ignoreStopPropagationEvent = input<boolean>();\n readonly resize = input<'auto' | 'none' | undefined, 'auto' | 'none' | undefined>('auto', { transform: (value) => value || 'auto' });\n readonly templateLeftBottomInput = input<TemplateRef<TYPE_TEMPLATE_REF>>();\n readonly templateRightBottomInput = input<TemplateRef<TYPE_TEMPLATE_REF>>();\n readonly classContainerBottomInput = input<string | undefined, string | undefined>(' ', { transform: (value) => value || ' ' });\n readonly ignoreWidthInput100 = input<boolean>();\n\n readonly iconLeftClass = input<string, string | undefined>('', { transform: (value) => value || '' });\n readonly popoverContentIconLeft = input<string, string | undefined>('', { transform: (value) => value || '' });\n readonly iconRightClass = input<string, string | undefined>('', { transform: (value) => value || '' });\n readonly popoverContentIconRight = input<string, string | undefined>('', { transform: (value) => value || '' });\n readonly resetAutoCompletePassword = input<boolean, boolean | undefined>(false, { transform: value => value ?? false });\n readonly acceptOnlyClickIcon = input<boolean | undefined>(false);\n readonly setIconRightColorSameColorDisableReadOnly = input<boolean | undefined>(false);\n readonly onlyAcceptNegativeValue = input<boolean | undefined>(false);\n readonly maxLengthNumberCount = model<number | undefined>();\n readonly focusInput = input<boolean>(false);\n\n /* OUTPUT */\n readonly outHeightAreaChange = output<{ isChange: boolean, height: number }>();\n readonly outChange = output<any>();\n readonly outFocusAndBlurEvent = output<IFocusAndBlurEvent>();\n readonly outEnterEvent = output<IEvent>();\n readonly outInputEvent = output<IEvent>();// emit pure event input\n readonly outIconLeft = output<string>();\n readonly outIconRight = output<string>();\n readonly outFunctionsControl = output<IInputFunctionControlEvent>();\n readonly outFilesDrop = output<Array<File>>();\n readonly outFileDrop = output<File>();\n readonly outChangeValueByButtonUpDown = output<void>();\n\n /* VIEW CHILD */\n protected inputRef = viewChild<ElementRef>('inputRef');\n protected textCountRef = viewChild<ElementRef>('textCountRef');\n protected elementRightRef = viewChild<ElementRef>('elementRightRef');\n\n /* INJECT */\n private renderer = inject(Renderer2);\n private configProjectService = inject(LibsUiConfigProjectService);\n private translateService = inject(TranslateService);\n private sanitizer = inject(DomSanitizer);\n\n constructor() {\n effect(() => {\n if (this.onlyAcceptNegativeValue()) {\n this.acceptNegativeValue.set(true);\n }\n if (!this.Element) {\n return;\n }\n\n if (this.dataType() === 'string') {\n\n if (this.Element.value !== this.value()) {\n this.init();\n }\n\n return;\n }\n this.updateMaxLengthMinMaxValueByDataType();\n const value = this.parseValueByDataType(this.Element.value);\n\n if ((this.Element.value !== '' && value === this.value()) || (this.Element.value === '' && this.emitEmptyInDataTypeNumber() && this.value() === undefined)) {\n return;\n }\n this.init();\n }, { allowSignalWrites: true });\n effect(() => {\n if (this.Element) {\n this.onDestroy.next();\n untracked(() => this.afterViewInit());\n }\n });\n }\n\n ngOnInit(): void {\n this.htmlIframeArea.set(this.sanitizer.bypassSecurityTrustHtml(indexInputHtml(this.noBorder() ? '' : `${this.configProjectService.colorStepContrastFromOrigin(20)?.light}`)));\n }\n\n afterViewInit() {\n if (!this.Element) {\n return;\n }\n this.outHeightAreaChange.emit({ isChange: false, height: this.Element?.scrollHeight });\n this.outFunctionsControl.emit({\n focus: this.focus.bind(this),\n blur: this.blur.bind(this),\n insertContent: this.addDataToSelectionInput.bind(this),\n resetValue: this.resetValue.bind(this),\n getElementValue: this.getElementValue.bind(this),\n checkAndDisableUpDownButton: this.checkAndDisableUpDownButton.bind(this)\n });\n this.init();\n\n this.initEvent('focus', this.ignoreStopPropagationEvent()).subscribe((e: IEvent) => this.outFocusAndBlurEvent.emit({ name: 'focus', event: e }));\n this.initEvent('blur', this.ignoreStopPropagationEvent()).subscribe((e: IEvent) => this.outFocusAndBlurEvent.emit({ name: 'blur', event: e }));\n const mouseDownEvent = this.initEvent('mousedown', this.ignoreStopPropagationEvent()).pipe(take(1));\n const keyDownEvent = this.initEvent('keydown', this.ignoreStopPropagationEvent());\n const inputEvent = this.initEvent('input', this.ignoreStopPropagationEvent());\n const cutEvent = this.initEvent('cut', this.ignoreStopPropagationEvent());\n const pasteEvent = this.initEvent('paste', this.ignoreStopPropagationEvent());\n const keyupEvent = this.initEvent('keyup', this.ignoreStopPropagationEvent());\n\n this.initEvent('click', this.ignoreStopPropagationEvent() ?? true).subscribe();\n this.initEvent('dragover', this.ignoreStopPropagationEvent()).pipe(tap((event: IEvent) => {\n event.preventDefault();\n event.stopPropagation();\n event.dataTransfer.dropEffect = 'copy';\n })).subscribe();\n\n this.initEvent('drop', this.ignoreStopPropagationEvent()).subscribe(this.checkAndEmitFiles.bind(this));\n pasteEvent.subscribe(this.checkAndEmitFiles.bind(this));\n\n this.combineObservable(mouseDownEvent, pasteEvent);\n this.combineObservable(mouseDownEvent, cutEvent);\n keyDownEvent.pipe(\n take(1),\n tap((e: IEvent) => this.checkTypeNumber(e, 'key')),\n mergeMap(() => inputEvent),\n tap((e: IEvent) => this.checkTypeNumber(e, 'data')),\n ).subscribe((e: IEvent) => {\n if (this.dataType() === 'string' && this.maxLength() && (e.inputType === 'insertCompositionText' || e.inputType === 'insertText') && e.target.value?.length > (this.maxLength() || 0)) {\n e.target.value = e.target.value.slice(0, this.maxLength());\n }\n this.processEventAndEmitValue(e);\n });\n\n keyupEvent.pipe(\n filter((event: IEvent) => event.keyCode === UtilsKeyCodeConstant.ENTER),\n filter((event: IEvent) => !this.textAreaEnterNotNewLine() || (this.textAreaEnterNotNewLine() && !event.shiftKey))).subscribe((event: IEvent) => this.outEnterEvent.emit(event));\n\n if (this.dataType() === 'string' && (this.tagInput() !== 'input' || (this.tagInput() === 'input' && this.tabInsertContentTagInput()))) {\n keyDownEvent.pipe(\n filter((event: IEvent) => event.keyCode === UtilsKeyCodeConstant.TAB),\n tap((event: IEvent) => event.preventDefault()),\n filter((event: IEvent) => !event.target.value || !this.maxLength() || event.target.value.length < (this.maxLength() || 25)),\n tap((event: IEvent) => {\n if (this.readonly() || this.disable()) {\n return;\n }\n this.insetValueToSelectionStart('\\t', event);\n })\n ).subscribe();\n }\n\n if (this.textAreaEnterNotNewLine()) {\n keyDownEvent.pipe(\n filter((event: IEvent) => event.keyCode === UtilsKeyCodeConstant.ENTER && !event.shiftKey),\n tap((e: IEvent) => e.preventDefault())\n ).subscribe();\n }\n\n }\n\n /* FUNCTIONS*/\n private updateMaxLengthMinMaxValueByDataType() {\n if (this.dataType() === 'int' || this.dataType() === 'float') {\n this.maxLength.update(value => {\n return !value || value > 21 ? 21 : value;\n });\n this.minValueNumber.update(value => value || Number.MIN_SAFE_INTEGER);\n this.maxValueNumber.update(value => value || Number.MAX_SAFE_INTEGER);\n }\n if (this.dataType() === 'bigint') {\n this.maxLength.update(value => !value || value > 25 ? 25 : value);\n this.fixedFloat.update(value => value ?? 4);\n this.maxLengthNumberCount.update(value => value ?? 19);\n }\n }\n\n private async getElementValue() {\n return this.Element?.value;\n }\n\n private checkAndEmitFiles(event: IEvent) {\n const files = event.dataTransfer?.files || event.clipboardData?.files;\n const text = (event.clipboardData || (window as any).clipboardData)?.getData('text');\n\n this.dataTextPaste.set(text);\n if (!files || !files.length) {\n return;\n }\n if (!text) {\n event.preventDefault();\n }\n event.stopPropagation();\n const fileList = [];\n\n for (const file of files) {\n if (Object.prototype.toString.call(file) === '[object File]') {\n this.outFileDrop.emit(file);\n fileList.push(file);\n }\n }\n this.outFilesDrop.emit(fileList);\n\n }\n\n private insetValueToSelectionStart(text: string, event: IEvent) {\n event.preventDefault();\n event.stopPropagation();\n this.Element.setRangeText(text, this.Element.selectionStart, this.Element.selectionStart, 'end');\n this.processEventAndEmitValue(event);\n }\n\n private get Element() {\n return this.inputIframeRef()?.nativeElement || this.inputRef()?.nativeElement;\n }\n\n protected handlerChangeValue(data: ISort) {\n data.reset();\n if (this.disable() || this.readonly()) {\n return;\n }\n const operator = data.mode === 'asc' ? 1 : -1;\n let value = +this.value() || 0;\n const separator = UtilsCache.getLang() === UtilsLanguageConstants.VI ? '.' : ',';\n const splitValue = (this.value() || this.minValueNumber() || 0).toString().split(separator);\n const dataBehindSeparator = splitValue?.[1];\n\n if (this.dataType() === 'bigint') {\n value = +(splitValue?.[0] || 0);\n }\n value = value + (this.valueUpDownNumber() ?? 1) * operator;\n if (!this.acceptNegativeValue() && value < 0) {\n value = 0;\n }\n const dataEmit = this.dataType() === 'bigint' ? `${value}${dataBehindSeparator ? separator : ''}${dataBehindSeparator}` : value;\n this.value.set(dataEmit)\n this.outChange.emit(dataEmit);\n this.outChangeValueByButtonUpDown.emit();\n this.checkAndDisableUpDownButton(value);\n }\n\n protected handlerEventIconLeft(e: Event, eventName: string) {\n e.stopPropagation();\n if ((this.disable() || this.readonly()) && !this.acceptOnlyClickIcon()) {\n return;\n }\n this.outIconLeft.emit(eventName);\n }\n\n protected handlerEventIconRight(e: Event, eventName: string) {\n e.stopPropagation();\n if ((this.disable() || this.readonly()) && !this.acceptOnlyClickIcon()) {\n return;\n }\n this.outIconRight.emit(eventName);\n }\n\n private async checkAndDisableUpDownButton(value: number) {\n if (this.dataType() !== 'int' && this.dataType() !== 'float' && this.dataType() !== 'bigint') {\n return;\n }\n this.disableAsc.set(false);\n this.disableDesc.set(false);\n this.minValueNumber.update(value => value ?? Number.MIN_SAFE_INTEGER);\n this.maxValueNumber.update(value => value ?? Number.MAX_SAFE_INTEGER);\n value = value ?? 0;\n\n if (!isNil(this.maxValueNumber()) && value >= (this.maxValueNumber() ?? Number.MAX_SAFE_INTEGER)) {\n this.disableAsc.set(true);\n }\n\n if (!isNil(this.minValueNumber()) && value <= (this.minValueNumber() || 0)) {\n this.disableDesc.set(true);\n }\n }\n\n protected initEvent(eventName: string, ignoreStopPropagationEvent?: boolean): Observable<IEvent> {\n return fromEvent<IEvent>(this.Element, eventName).pipe(\n tap((e: IEvent) => {\n if (!ignoreStopPropagationEvent) {\n e.stopPropagation();\n }\n this.outInputEvent.emit(e);\n }),\n takeUntil(this.onDestroy)\n );\n }\n\n private convertValue(value: string) {\n if (value && this.dataType() === 'bigint') {\n const separator = (UtilsCache.getLang() === UtilsLanguageConstants.VI) ? '.' : ',';\n let [int, decimal] = value.split(separator);\n const decimalSplit = decimal ? decimal.split('') : [];\n const decimalEveryZero = decimalSplit.every(item => item === '0');\n\n if (int === '-0' && (!decimal || decimalEveryZero)) {\n int = '0';\n }\n if (!decimal || decimalEveryZero) {\n decimal = '0';\n }\n if (decimalSplit.some(item => item !== '0')) {\n const decimalReverse = decimalSplit.reverse().join('');\n\n decimal = decimalReverse.replace(/(^[0]+)/, '').split('').reverse().join('');\n }\n\n return `${int}${separator}${decimal}`;\n }\n\n return value;\n }\n\n private init() {\n if (!this.maxLength()) {\n this.updateMaxLengthMinMaxValueByDataType();\n }\n if (!this.Element) {\n return;\n }\n let elementValue = this.convertValue(`${this.value() ?? ''}`);\n\n if (this.dataType() !== 'string') {\n elementValue = elementValue.replace((new RegExp(`[^0-9.,${this.acceptNegativeValue() ? '-' : ''}]`, 'g')), '');\n if (UtilsCache.getLang() === UtilsLanguageConstants.EN) {\n elementValue = elementValue.replace(/[,]/, '');\n }\n }\n this.Element.value = elementValue;\n\n const eventFake: IEventCustom = { preventDefault: () => { return }, target: this.Element, data: elementValue, fakeEvent: true };\n\n this.checkTypeNumber(eventFake, 'data');\n this.processEventAndEmitValue(eventFake);\n }\n\n private processEventAndEmitValue(e: IEvent | IEventCustom): void {\n const value: any = this.parseValueByDataType(e.target.value);\n\n if (this.dataType() !== 'string' && !this.ignoreBlockInputMaxValue() && !isNil(this.maxValueNumber()) && value > (this.maxValueNumber() || 0) && this.value() < value) {\n const valueDisplay = viewDataNumberByLanguage(`${this.value()}`.replace(/[.]/g, ','), this.acceptNegativeValue(), (this.fixedFloat() ?? 14));\n\n e.target.value = `${this.getCheckZero(+valueDisplay, e.target.value)}${valueDisplay}`;\n\n return this.processEventAndEmitValue(e);\n }\n if (this.dataType() !== 'string' && isNil(value)) {\n e.target.value = 0;\n\n return this.processEventAndEmitValue(e);\n }\n\n if (e.fakeEvent && (`${this.value() ?? ''}` === `${value}` || (this.emitEmptyInDataTypeNumber() && e.target.value.trim() === ''))) {\n this.checkAndDisableUpDownButton(this.dataType() === 'bigint' ? value : +value);\n\n setTimeout(() => {\n this.calculatorHeightTextArea(e);\n }, 250);\n\n return;\n }\n this.value.set(value);\n if (this.emitEmptyInDataTypeNumber() && e.target.value.trim() === '') {\n const dataEmit = this.dataType() === 'string' ? '' : undefined;\n this.value.set(dataEmit as any);\n }\n this.outChange.emit(this.value());\n this.checkAndDisableUpDownButton(this.dataType() === 'bigint' ? value : +value);\n this.calculatorHeightTextArea(e);\n }\n\n private checkMaxLengthNumberAndSetValue(valueDisplay: string, e: IEvent | IEventCustom): boolean {\n if (isNil(this.value()) || (+this.value() > 0 && this.parseValueByDataType(valueDisplay) < this.value()) || (+this.value() < 0 && this.parseValueByDataType(valueDisplay) > this.value())) {\n return false;\n }\n const valueCompare = formatNumber(valueDisplay).toString();\n const numbers = valueCompare.split('.');\n let lengthValueCompare = 0;\n let maxLength = (this.acceptNegativeValue() && typeof +this.value() === 'number' && +this.value() < 0) ? (this.maxLength() || 21) + 1 : (this.maxLength() || 21);\n\n if (this.dataType() === 'float') {\n maxLength--;\n }\n if (numbers && numbers[0]) {\n lengthValueCompare = viewDataNumberByLanguage(`${numbers[0]}`.replace(/[.]/g, ','), this.acceptNegativeValue(), (this.fixedFloat() ?? 14)).length;\n }\n if (numbers && numbers[1]) {\n lengthValueCompare += 1 + numbers[1].length;\n }\n if (maxLength && lengthValueCompare >= maxLength) {\n const valueDisplay = viewDataNumberByLanguage((lengthValueCompare === maxLength ? valueCompare : `${this.value()}`).replace(/[.]/g, ','), this.acceptNegativeValue(), (this.fixedFloat() ?? 14));\n\n e.target.value = `${this.getCheckZero(+valueDisplay, e.target.value)}${valueDisplay}`;\n\n return true;\n }\n\n return false;\n }\n\n private checkTypeNumber(e: IEvent | IEventCustom, fieldName: string) {\n const currentLang = UtilsCache.getLang();\n const separator = (currentLang === UtilsLanguageConstants.VI) ? '.' : ',';\n const separatorRevert = (currentLang === UtilsLanguageConstants.VI) ? ',' : '.';\n let valueTarget: IString = e.target.value;\n const selectionStart = e.target.selectionStart - 1;\n const { data, keyCode } = e;\n\n this.charFirstIsZero.set(false);\n if (valueTarget.charAt(0) === '0') {\n this.charFirstIsZero.set(true);\n }\n\n if (this.dataType() === 'string') {\n if (this.autoRemoveEmoji()) {\n e.target.value = removeEmoji(valueTarget);\n }\n\n return;\n }\n if (/[0-9]/g.test(data) && valueTarget.charAt(selectionStart + 1) === '-') {\n valueTarget = valueTarget.replaceAt(0, '') as IString;\n }\n let strRegex = `[^0-9.,${this.acceptNegativeValue() ? '-' : ''}]`;\n\n if ((new RegExp(strRegex, 'gi')).test((e as any)[fieldName]) && keyCode !== UtilsKeyCodeConstant.BACKSPACE) {\n e.preventDefault();\n e.target.value = valueTarget = e.target.value.replace((new RegExp(strRegex, 'gi')), '') as IString;\n }\n if (!e.fakeEvent) {\n switch (data) {\n case separator:\n valueTarget = valueTarget.replace((new RegExp(`[${separator}]`, 'gi')), '') as IString;\n break;\n\n case separatorRevert:\n {\n if (currentLang === UtilsLanguageConstants.VI && this.dataType() === 'int') {\n e.target.value = valueTarget.replace((new RegExp(`[${separatorRevert}]`, 'gi')), '') as IString;\n\n return;\n }\n if (valueTarget === separatorRevert) {\n e.target.value = '';\n\n return;\n }\n if (valueTarget && valueTarget.length === 2 && valueTarget.charAt(0) === '-' && data && !/[0-9]/g.test(data)) {\n e.target.value = '-';\n\n return;\n }\n const occurrencesByCharacter = valueTarget.occurrencesByCharacter(separatorRevert);\n\n if (occurrencesByCharacter > 1) {\n valueTarget = valueTarget.replaceAt(e.target.selectionStart - 1, '') as IString;\n break;\n }\n let maxLength = this.dataType() === 'float' ? (this.maxLength() || 21) - 1 : (this.maxLength() || 21);\n\n if (valueTarget.indexOf('-') >= 0) {\n maxLength++;\n }\n if (occurrencesByCharacter === 1 && valueTarget.length === maxLength && valueTarget.indexOf(separatorRevert) === valueTarget.length - 1) {\n valueTarget = valueTarget.replaceAt(e.target.selectionStart - 1, '') as IString;\n break;\n }\n if (this.onlyAcceptNegativeValue() && valueTarget === `0${separatorRevert}`) {\n e.target.value = '0';\n }\n\n return;\n }\n }\n valueTarget = formatNumber(valueTarget) as IString;\n }\n const indexesOfDash = valueTarget.indexesOfCharacter?.('-') || [];\n\n if (indexesOfDash.length) {\n const [firstIndex, secondIndex] = indexesOfDash;\n const indexReplace = firstIndex || secondIndex; // firstIndex=0 thì ko xóa\n\n if (indexReplace) {\n valueTarget = valueTarget.replaceAll(indexReplace, '-', '') as IString;\n }\n }\n if (this.acceptNegativeValue() && valueTarget === '-') {\n e.target.value = valueTarget;\n\n return;\n }\n switch (this.dataType()) {\n case 'int':\n {\n strRegex = `[^0-9${this.acceptNegativeValue() ? '-' : ''}]`;\n if (!e.fakeEvent) {\n valueTarget = valueTarget.replace(new RegExp(strRegex, 'gi'), '') as IString;\n const maxTotalNumber = valueTarget.includes('-') ? 17 : 16;\n\n if (valueTarget.length > maxTotalNumber) {\n valueTarget = valueTarget.slice(0, maxTotalNumber) as IString;\n }\n if (Math.abs(parseInt(valueTarget)) > (this.maxValueNumber() || 9007199254740991)) {\n valueTarget = valueTarget.slice(0, maxTotalNumber - 1) as IString;\n }\n if (this.onlyAcceptNegativeValue() && valueTarget[0] !== '-' && valueTarget[0] !== '0') {\n valueTarget = '' as IString;\n }\n if (valueTarget && /(^-)?(^[0]+)/.test(valueTarget)) {\n const id = uuid();\n\n valueTarget = valueTarget.replace(/(^-)?(^[0]+)/, `$1${id}`).replace(id, '0') as IString;\n }\n if (valueTarget === '-0') {\n valueTarget = '0' as IString;\n }\n if (valueTarget && /(^[0])([1-9])([0-9]+)?/.test(valueTarget)) {\n valueTarget = valueTarget.replace(/(^[0])([1-9])([0-9]+)?/, '$2$3') as IString;\n }\n const valueDisplay = viewDataNumberByLanguage(valueTarget, (this.acceptNegativeValue() || false), 0);\n\n if (this.checkMaxLengthNumberAndSetValue(valueDisplay, e)) {\n break;\n }\n e.target.value = `${this.getCheckZero(+valueDisplay, e.target.value)}${valueDisplay}`;\n break;\n }\n const indexOfDot = valueTarget.indexOf('.');\n const indexOfComma = valueTarget.indexOf(',');\n let indexChoose = indexOfDot;\n\n if (indexOfDot < 0 || indexOfDot > indexOfComma) {\n indexChoose = indexOfComma;\n }\n if (indexChoose >= 0) {\n valueTarget = valueTarget.substring(0, indexChoose) as IString;\n }\n const valueDisplay = viewDataNumberByLanguage(valueTarget, (this.acceptNegativeValue() || false), 0);\n\n if (this.checkMaxLengthNumberAndSetValue(valueDisplay, e)) {\n break;\n }\n e.target.value = `${this.getCheckZero(+valueDisplay, e.target.value)}${valueDisplay}`;\n break;\n }\n\n case 'float':\n\n // eslint-disable-next-line no-fallthrough\n case 'bigint':\n this.getValueFormat(e, valueTarget, separator, separatorRevert, currentLang);\n break;\n }\n if (valueTarget === 'NaN') {\n e.target.value = '' as IString;\n }\n if (e.fakeEvent || data === undefined) {\n return;\n }\n this.setCaretPosition(e, selectionStart + 1);\n }\n\n private getValueFormat(e: IEvent | IEventCustom, valueTarget: IString, separator: '.' | ',', separatorRevert: '.' | ',', currentLang: string) {\n let strRegex = `[^0-9${separator}${currentLang === UtilsLanguageConstants.EN ? '.' : ''}${this.acceptNegativeValue() ? '-' : ''}]`;\n\n if (!e.fakeEvent) {\n valueTarget = valueTarget.replace(new RegExp(strRegex, 'gi'), '') as IString;\n }\n const indexesOfSeparator = valueTarget.indexesOfCharacter(separator);\n const [firstIndex, secondIndex] = indexesOfSeparator;\n\n if (secondIndex) {\n valueTarget = e.target.value.replaceAll(secondIndex, separator, '');\n }\n if (firstIndex && valueTarget.substring(firstIndex + 1).length >= (this.fixedFloat() ?? 14)) {\n valueTarget = valueTarget.substring(0, firstIndex + (this.fixedFloat() ?? 14) + 1) as IString;\n }\n strRegex = `[${separator}]`;\n valueTarget = valueTarget.replace(new RegExp(strRegex, 'g'), separatorRevert) as IString;\n let valueFormat = '';\n let [fontSeparatorNumber, behindSeparatorNumber] = valueTarget.split(separatorRevert);\n let maxFontTotalNumber = (fontSeparatorNumber && fontSeparatorNumber.includes('-')) ? 16 : 15;\n\n if (this.dataType() === 'bigint') {\n maxFontTotalNumber = (this.maxLengthNumberCount() ?? 19) - (this.fixedFloat() ?? 4) + (fontSeparatorNumber.includes('-') ? 1 : 0);\n }\n const fontOverMaxTotalNumber = fontSeparatorNumber && fontSeparatorNumber.length >= maxFontTotalNumber;\n\n if (fontOverMaxTotalNumber) {\n fontSeparatorNumber = fontSeparatorNumber.slice(0, maxFontTotalNumber) as IString;\n if (this.dataType() === 'float') {\n behindSeparatorNumber = '';\n }\n }\n switch (this.dataType()) {\n case 'float':\n if (!fontOverMaxTotalNumber && behindSeparatorNumber && behindSeparatorNumber.length) {\n behindSeparatorNumber = behindSeparatorNumber.slice(0, maxFontTotalNumber - fontSeparatorNumber.length);\n }\n behindSeparatorNumber = `${behindSeparatorNumber ?? ''}`;\n break;\n\n case 'bigint':\n if (behindSeparatorNumber && behindSeparatorNumber.length && behindSeparatorNumber.length > (this.fixedFloat() ?? 4)) {\n behindSeparatorNumber = behindSeparatorNumber.slice(0, (this.fixedFloat() ?? 4));\n }\n break;\n }\n const indexOfSeparatorRevert = valueTarget.indexOf(separatorRevert);\n\n if (this.onlyAcceptNegativeValue() && fontSeparatorNumber[0] !== '-' && fontSeparatorNumber[0] !== '0') {\n fontSeparatorNumber = '';\n }\n if (this.onlyAcceptNegativeValue() && indexOfSeparatorRevert >= 0 && fontSeparatorNumber[0] !== '-') {\n fontSeparatorNumber = '0';\n behindSeparatorNumber = this.dataType() === 'bigint' ? '0' : '';\n }\n if (fontSeparatorNumber && /(^-)([0]+)/.test(fontSeparatorNumber)) {\n const id = uuid();\n\n fontSeparatorNumber = fontSeparatorNumber.replace(/(^-)([0]+)/, `$1${id}`).replace(id, '0');\n }\n if (fontSeparatorNumber && /(^[0]+)/.test(fontSeparatorNumber)) {\n fontSeparatorNumber = fontSeparatorNumber.replace(/(^[0]+)/, '0');\n }\n if (/(^-)([0]+)([1-9])([0-9.]+)?/.test(fontSeparatorNumber)) {\n fontSeparatorNumber = fontSeparatorNumber.replace(/(^-)([0]+)([1-9])([0-9.]+)?/, '$1$3$4');\n }\n if (/(^[0]+)([1-9])([0-9.]+)?/.test(fontSeparatorNumber)) {\n fontSeparatorNumber = fontSeparatorNumber.replace(/(^[0]+)([1-9])([0-9.]+)?/, '$2$3');\n }\n switch (this.dataType()) {\n case 'float':\n if (/(^[0]{6})/.test(behindSeparatorNumber)) {\n behindSeparatorNumber = behindSeparatorNumber.replace(/(^[0]{6})/, '00000');\n }\n break;\n\n case 'bigint':\n if (/(^[0]{4})/.test(behindSeparatorNumber)) {\n behindSeparatorNumber = behindSeparatorNumber.replace(/(^[0]{4})/, '0000');\n }\n break;\n }\n if (fontSeparatorNumber) {\n fontSeparatorNumber = viewDataNumberByLanguage(fontSeparatorNumber, this.acceptNegativeValue(), (this.fixedFloat() ?? (this.dataType() === 'bigint' ? 4 : 14)));\n }\n const hasSeparatorRevert = (this.dataType() === 'bigint' ? true : !fontOverMaxTotalNumber) && indexOfSeparatorRevert >= 0;\n\n valueFormat = `${fontSeparatorNumber ?? ''}${hasSeparatorRevert ? separatorRevert : ''}${behindSeparatorNumber ?? ''}`;\n if (valueFormat && this.onlyAcceptNegativeValue() && valueFormat[0] !== '-' && valueFormat[0] !== '0') {\n valueFormat = '0';\n }\n if (this.checkMaxLengthNumberAndSetValue(valueFormat, e)) {\n valueTarget = e.target.value;\n\n return;\n }\n valueTarget = e.target.value = valueFormat as IString;\n }\n\n private getCheckZero(value: number, targetCurrent: string): string {\n let zero = '';\n\n if (this.dataType() !== 'int') {\n return zero;\n }\n\n if (this.charFirstIsZero() && this.keepZeroInTypeInt() && value !== 0) {\n zero = '0';\n }\n\n if (this.charFirstIsZero() && this.autoAddZeroLessThan10InTypeInt() && ((value > 0 && value < 10 && !/(^0)+/.test(`${targetCurrent}`)) || (targetCurrent && targetCurrent.match(/^[0]{2,}$/)?.length && value === 0))) {\n zero = '0';\n }\n\n return zero;\n }\n\n private setCaretPosition(e: IEvent | IEventCustom, selectionStart: number) {\n const { keyCode, inputType } = e;\n\n if (keyCode === UtilsKeyCodeConstant.UP_ARROW || keyCode === UtilsKeyCodeConstant.DOWN_ARROW || keyCode === UtilsKeyCodeConstant.LEFT_ARROW || keyCode === UtilsKeyCodeConstant.RIGHT_ARROW) {\n return;\n }\n const valueTarget = e.target.value.replace('-', '');\n let value = UtilsCache.getLang() === UtilsLanguageConstants.VI ? `${this.value() || 0}`.replace('.', ',') : `${this.value() || 0}`;\n\n value = viewDataNumberByLanguage(value, this.acceptNegativeValue(), (this.fixedFloat() ?? 14));\n value = `${value}`.replace('-', '');\n\n if (value === valueTarget && value !== '0' && value !== '-') {\n setCaretPosition(this.Element, selectionStart);\n\n return;\n }\n\n let factor = 0;\n const distance = valueTarget.length - value.length;\n if (distance < -1) {\n factor = -1;\n }\n if (distance > 1) {\n factor = 1;\n }\n selectionStart += factor;\n if (inputType === 'insertFromPaste' && this.dataTextPaste()) {\n const dataTextDisplay = `${viewDataNumberByLanguage(this.dataTextPaste(), this.acceptNegativeValue(), (this.fixedFloat() ?? 14))}`;\n const indexes: Array<number> = e.target.value.indexesByString(dataTextDisplay);\n\n selectionStart -= factor;\n\n if (indexes.some(index => index === selectionStart) || !indexes.length) {\n return setCaretPosition(this.Element, selectionStart);\n }\n\n let newSelectionStart = indexes[0];\n\n for (const index of indexes) {\n let replaceValue = formatNumber(`${valueTarget.substring(0, index)}${valueTarget.substring(index + dataTextDisplay.length + 1, valueTarget.length)}`);\n\n replaceValue = viewDataNumberByLanguage(replaceValue, this.acceptNegativeValue(), (this.fixedFloat() ?? 14));\n if (value === replaceValue) {\n newSelectionStart = index;\n break;\n }\n }\n\n if (newSelectionStart >= 0) {\n selectionStart = newSelectionStart + dataTextDisplay.length + 1;\n\n return setCaretPosition(this.Element, selectionStart);\n }\n }\n\n setCaretPosition(this.Element, selectionStart);\n }\n\n private parseValueByDataType(value: string): number | string {\n switch (this.dataType()) {\n case 'string':\n return value;\n\n case 'int':\n if (this.acceptNegativeValue() && (value === '-' || value === ',' || value === '.')) {\n return 0;\n }\n\n return +(formatNumber(value));\n\n case 'float':\n if (this.acceptNegativeValue() && (value === '-' || value === ',' || value === '.')) {\n return 0;\n }\n\n return parseFloat((+formatNumber(value)).toFixed(this.fixedFloat() ?? 14));\n\n case 'bigint':\n if (this.acceptNegativeValue() && (value === '-' || value === ',' || value === '.')) {\n return '0';\n }\n\n return formatNumber(value);\n }\n }\n\n private calculatorHeightTextArea(e: IEvent | IEventCustom) {\n if (this.tagInput() === 'input') {\n return;\n }\n const target = e.target;\n\n target.style.overflow = 'hidden';\n target.style.height = `${this.defaultHeight()}px`;\n const { scrollHeight } = target;\n\n const height = scrollHeight + 2; // border top + bottom = 2\n\n if (!this.preHeightArea() && this.preHeightArea() !== height) {\n this.outHeightAreaChange.emit({ isChange: true, height: height });\n }\n\n if (height > (this.maxHeightTextArea() ?? 32)) {\n target.style.overflow = 'auto';\n }\n if (this.iframeRef) {\n this.iframeRef.style.height = `${height}px`;\n }\n target.style.height = `${height}px`;\n this.preHeightArea.set(height);\n\n }\n\n private combineObservable(mouseDownEvent: Observable<IEvent>, observableMerge: Observable<IEvent>) {\n mouseDownEvent.pipe(\n mergeMap(() => observableMerge),\n debounceTime(0),\n tap((e: IEvent) => this.checkTypeNumber(e, 'key')),\n ).subscribe((e: IEvent) => this.processEventAndEmitValue(e));\n }\n\n private async focus() {\n setTimeout(() => {\n this.Element?.focus();\n }, this.focusTimeOut());\n }\n\n private async blur() {\n setTimeout(() => {\n this.Element?.blur();\n }, this.blurTimeOut());\n }\n\n private async addDataToSelectionInput(data: string | number) {\n const target = this.Element;\n const selectionStart = target.selectionStart;\n\n const value = this.Element.value;\n const beforeValue = value.substring(0, selectionStart);\n const afterValue = value.substring(selectionStart);\n\n this.Element.value = `${beforeValue}${data}${afterValue}`;\n setCaretPosition(this.Element, selectionStart + data.toString().length);\n const eventFake: IEventCustom = { preventDefault: () => { return }, target: this.Element, data: '', fakeEvent: true };\n\n this.processEventAndEmitValue(eventFake);\n }\n\n protected handlerOnLoad(e: Event, element: HTMLIFrameElement) {\n e.stopPropagation();\n this.iframeRef = element;\n const iframe: any = element.contentWindow || element.contentDocument;\n this.configProjectService.setupFontFamily(iframe.document);\n\n this.inputIframeRef.set({ nativeElement: iframe.document.getElementsByTagName('TEXTAREA')[0] });\n if (this.Element) {\n this.renderer.setAttribute(this.Element, 'placeholder', this.translateService.instant(this.placeholder()));\n if (this.disable()) {\n this.renderer.setAttribute(this.Element, 'disabled', 'true');\n }\n this.afterViewInit();\n }\n }\n\n private async resetValue() {\n this.Element.value = '';\n }\n\n private countDisplayComputed() {\n if (!this.showCount() || this.dataType() !== 'string' || typeof this.value() !== 'string') {\n return '0';\n }\n setTimeout(() => {\n this.paddingRightCustom.set((this.elementRightRef()?.nativeElement.getBoundingClientRect().width || 0) + 12);\n if (this.showCount()) {\n if (this.textCountRef()) {\n this.paddingRightCustom.set(this.textCountRef()?.nativeElement.clientWidth + 16);\n }\n\n if (this.tagInput() === 'input') {\n this.paddingRightCustom.update(value => {\n return value + (this.elementRightRef()?.nativeElement.getBoundingClientRect().width || 0);\n })\n }\n }\n });\n\n return `${viewDataNumberByLanguage((this.value() as string).length, false)}`;\n }\n\n ngOnDestroy(): void {\n this.onDestroy.next();\n this.onDestroy.complete();\n }\n}\n","<div [class]=\"'flex relative !text-[#9ca2ad] ' + classContainerInput()\"\n [class.libs-ui-components-input-textarea-container]=\"tagInput() === 'textarea' && resize() === 'auto'\">\n @if (tagInput() === 'input') {\n <input #inputRef\n [class.libs-ui-readonly]=\"readonly()\"\n [class.libs-ui-readonly-background]=\"readonly()\"\n [class.libs-ui-disable]=\"disable()\"\n [class.libs-ui-disable-background]=\"disable()\"\n [style.height.px]=\"defaultHeight()\"\n [style.minHeight.px]=\"defaultHeight()\"\n [style.paddingRight.px.important]=\"paddingRightCustom()\"\n [class.w-full]=\"!ignoreWidthInput100()\"\n [class]=\"'libs-ui-input ' + classInclude()\"\n [class.border-primary-focus-general]=\"focusInput()\"\n [class.libs-ui-input-not-border]=\"noBorder()\"\n [class.libs-ui-bg-special-none]=\"backgroundNone()\"\n [class.libs-ui-border-error-general]=\"borderError()\"\n [class.text-[#29c7cc]]=\"useColorModeExist()\"\n [class.!pl-[40px]]=\"iconLeftClass()\"\n [attr.maxLength]=\"maxLength() || undefined\"\n [placeholder]=\"placeholder() | translate\"\n [attr.type]=\"hiddenContent() ? 'password':'text'\"\n [readonly]=\"readonly()\"\n [disabled]=\"disable()\"\n [autocomplete]=\"resetAutoCompletePassword()? 'new-password':''\" />\n }\n @if (tagInput() === 'textarea') {\n @if (resize() === 'auto') {\n <div class=\"libs-ui-components-input-textarea-container-resize-icon\"></div>\n }\n <textarea #inputRef\n [class.libs-ui-readonly]=\"readonly()\"\n [class.libs-ui-readonly-background]=\"readonly()\"\n [class.libs-ui-disable]=\"disable()\"\n [class.libs-ui-disable-background]=\"disable()\"\n [style.height.px]=\"defaultHeight()\"\n [style.minHeight.px]=\"minHeightTextArea() ?? defaultHeight()\"\n [style.paddingRight.px]=\"paddingRightCustom()\"\n [style.maxHeight.px]=\"maxHeightTextArea()\"\n [style.resize]=\"resize()\"\n [class.w-full]=\"!ignoreWidthInput100()\"\n [class]=\"'libs-ui-input libs-ui-cursor-auto ' + classInclude()\"\n [class.libs-ui-input-not-border]=\"noBorder()\"\n [class.libs-ui-bg-special-none]=\"backgroundNone()\"\n [class.libs-ui-border-error-general]=\"borderError()\"\n [class.text-[#29c7cc]]=\"useColorModeExist()\"\n [class.pl-[32px]]=\"iconLeftClass()\"\n [attr.maxLength]=\"maxLength() || undefined\"\n [placeholder]=\"placeholder() | translate\"\n [readonly]=\"readonly()\"\n [disabled]=\"disable()\">\n </textarea>\n }\n\n @if (tagInput() === 'iframe-textarea' && htmlIframeArea()) {\n <span class=\"d-none\">\n </span>\n <iframe #iframeRef\n [style.maxHeight.px]=\"maxHeightTextArea()\"\n [style.height.px]=\"defaultHeight()\"\n [srcdoc]=\"htmlIframeArea()\"\n class=\"w-full\"\n frameBorder=\"0\"\n (load)=\"handlerOnLoad($event,iframeRef)\">\n </iframe>\n }\n @if (iconLeftClass()) {\n <libs_ui-components-popover [ignoreShowPopover]=\"!popoverContentIconLeft()\"\n [config]=\"{maxWidth:250,direction:'bottom',content:popoverContentIconLeft(),zIndex: zIndexPopoverContent()}\">\n <i [attr.tagInput]=\"tagInput()\"\n [class]=\"iconLeftClass() +' libs-ui-input-icon-left !text-[#9ca2ad]'\"\n (click)=\"handlerEventIconLeft($event,'click')\">\n </i>\n </libs_ui-components-popover>\n }\n <div #elementRightRef\n class=\"absolute flex items-center h-full top-0 right-0\">\n @if (value() && placeholder().trim() && keepPlaceholderOnly()) {\n <span [class]=\"'libs-ui-input-placeholder-custom libs-ui-font-h5r'\">\n {{ placeholder() }}\n </span>\n }\n @if (dataType() !=='string' && valueUpDownNumber()) {\n <libs_ui-components-buttons-sort class=\"mr-[12px]\"\n [disableAsc]=\"disableAsc()\"\n [disableDesc]=\"disableDesc()\"\n [attr.tagInput]=\"tagInput()\"\n [onlyEmit]=\"true\"\n [disable]=\"disable() || readonly()\"\n (outChange)=\"handlerChangeValue($event)\" />\n }\n @if (iconRightClass()) {\n <libs_ui-components-popover class=\"flex\"\n [ignoreShowPopover]=\"!popoverContentIconRight()\"\n [config]=\"{maxWidth:250,direction:'bottom',content:popoverContentIconRight(),zIndex: zIndexPopoverContent()}\">\n <i [attr.tagInput]=\"tagInput()\"\n [class.text-[#6a7383]]=\"(!disable() && !readonly()) || acceptOnlyClickIcon()\"\n [class.text-[#cdd0d6]]='((disable() || readonly()) && !acceptOnlyClickIcon()) || setIconRightColorSameColorDisableReadOnly()'\n [class]=\"iconRightClass() +' libs-ui-input-icon-right'\"\n (click)=\"handlerEventIconRight($event,'click')\">\n </i>\n </libs_ui-components-popover>\n }\n </div>\n\n <div class=\"libs-ui-input-text-bottom {{ classContainerBottomInput() }}\"\n [style.right.px]=\"(tagInput() === 'input' ? (elementRightRef.clientWidth || 0) : 0) + 8\">\n @if (templateLeftBottomInput()) {\n <ng-container *ngTemplateOutlet=\"templateLeftBottomInput()\" />\n }\n @if (dataType() === 'string' && showCount()) {\n <div #textCountRef\n class=\"text-[#9ca2ad] libs-ui-font-h7r\">\n <span>{{ countDisplay() }}</span>\n @if (maxLength()) {\n <span>/{{ maxLengthDisplay() }}</span>\n }\n </div>\n }\n @if (templateRightBottomInput()) {\n <ng-container *ngTemplateOutlet=\"templateRightBottomInput()\" />\n }\n </div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -55,7 +55,7 @@ export declare class LibsUiComponentsInputsInputComponent implements OnInit, OnD
55
55
  readonly classContainerInput: import("@angular/core").InputSignalWithTransform<string, string | undefined>;
56
56
  readonly showCount: import("@angular/core").InputSignal<boolean | undefined>;
57
57
  readonly ignoreStopPropagationEvent: import("@angular/core").InputSignal<boolean | undefined>;
58
- readonly resize: import("@angular/core").InputSignalWithTransform<"none" | "auto" | undefined, "none" | "auto" | undefined>;
58
+ readonly resize: import("@angular/core").InputSignalWithTransform<"auto" | "none" | undefined, "auto" | "none" | undefined>;
59
59
  readonly templateLeftBottomInput: import("@angular/core").InputSignal<TemplateRef<any> | undefined>;
60
60
  readonly templateRightBottomInput: import("@angular/core").InputSignal<TemplateRef<any> | undefined>;
61
61
  readonly classContainerBottomInput: import("@angular/core").InputSignalWithTransform<string | undefined, string | undefined>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@libs-ui/components-inputs-input",
3
- "version": "0.2.119",
3
+ "version": "0.2.121",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^18.2.0",
6
6
  "@angular/core": "^18.2.0"