@sd-angular/core 1.3.243 → 1.3.245
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.
- package/autocomplete/sd-angular-core-autocomplete.metadata.json +1 -1
- package/bundles/sd-angular-core-autocomplete.umd.js +20 -21
- package/bundles/sd-angular-core-autocomplete.umd.js.map +1 -1
- package/bundles/sd-angular-core-autocomplete.umd.min.js +1 -15
- package/bundles/sd-angular-core-autocomplete.umd.min.js.map +1 -1
- package/bundles/sd-angular-core-date-full.umd.js +716 -0
- package/bundles/sd-angular-core-date-full.umd.js.map +1 -0
- package/bundles/sd-angular-core-date-full.umd.min.js +2 -0
- package/bundles/sd-angular-core-date-full.umd.min.js.map +1 -0
- package/bundles/sd-angular-core-date-time.umd.js +5 -6
- package/bundles/sd-angular-core-date-time.umd.js.map +1 -1
- package/bundles/sd-angular-core-date-time.umd.min.js +1 -1
- package/bundles/sd-angular-core-date-time.umd.min.js.map +1 -1
- package/bundles/sd-angular-core-date.umd.js +718 -0
- package/bundles/sd-angular-core-date.umd.js.map +1 -0
- package/bundles/sd-angular-core-date.umd.min.js +2 -0
- package/bundles/sd-angular-core-date.umd.min.js.map +1 -0
- package/bundles/sd-angular-core-export.umd.js +3 -0
- package/bundles/sd-angular-core-export.umd.js.map +1 -1
- package/bundles/sd-angular-core-export.umd.min.js +1 -1
- package/bundles/sd-angular-core-export.umd.min.js.map +1 -1
- package/bundles/sd-angular-core-form.umd.js +10 -4
- package/bundles/sd-angular-core-form.umd.js.map +1 -1
- package/bundles/sd-angular-core-form.umd.min.js +1 -1
- package/bundles/sd-angular-core-form.umd.min.js.map +1 -1
- package/bundles/sd-angular-core-input-number.umd.js +7 -10
- package/bundles/sd-angular-core-input-number.umd.js.map +1 -1
- package/bundles/sd-angular-core-input-number.umd.min.js +2 -2
- package/bundles/sd-angular-core-input-number.umd.min.js.map +1 -1
- package/bundles/sd-angular-core-month.umd.js +741 -0
- package/bundles/sd-angular-core-month.umd.js.map +1 -0
- package/bundles/sd-angular-core-month.umd.min.js +2 -0
- package/bundles/sd-angular-core-month.umd.min.js.map +1 -0
- package/bundles/sd-angular-core.umd.js +4 -4
- package/bundles/sd-angular-core.umd.min.js +1 -1
- package/bundles/sd-angular-core.umd.min.js.map +1 -1
- package/date/index.d.ts +1 -0
- package/date/package.json +12 -0
- package/date/sd-angular-core-date.d.ts +4 -0
- package/date/sd-angular-core-date.metadata.json +1 -0
- package/date/src/lib/date.component.d.ts +62 -0
- package/date/src/lib/date.module.d.ts +2 -0
- package/date/src/public-api.d.ts +2 -0
- package/date-full/index.d.ts +1 -0
- package/date-full/package.json +12 -0
- package/date-full/sd-angular-core-date-full.d.ts +4 -0
- package/date-full/sd-angular-core-date-full.metadata.json +1 -0
- package/date-full/src/lib/date-full.component.d.ts +64 -0
- package/date-full/src/lib/date-full.module.d.ts +2 -0
- package/date-full/src/public-api.d.ts +2 -0
- package/date-time/sd-angular-core-date-time.metadata.json +1 -1
- package/esm2015/autocomplete/src/lib/autocomplete.component.js +2 -2
- package/esm2015/autocomplete/src/lib/autocomplete.module.js +8 -10
- package/esm2015/date/index.js +2 -0
- package/esm2015/date/sd-angular-core-date.js +5 -0
- package/esm2015/date/src/lib/date.component.js +309 -0
- package/esm2015/date/src/lib/date.module.js +38 -0
- package/esm2015/date/src/public-api.js +3 -0
- package/esm2015/date-full/index.js +2 -0
- package/esm2015/date-full/sd-angular-core-date-full.js +5 -0
- package/esm2015/date-full/src/lib/date-full.component.js +307 -0
- package/esm2015/date-full/src/lib/date-full.module.js +40 -0
- package/esm2015/date-full/src/public-api.js +3 -0
- package/esm2015/date-time/src/lib/date-time.component.js +2 -2
- package/esm2015/date-time/src/lib/date-time.module.js +10 -12
- package/esm2015/export/src/lib/export.service.js +4 -1
- package/esm2015/form/src/lib/form.module.js +21 -12
- package/esm2015/input-number/src/lib/input-number.component.js +2 -2
- package/esm2015/input-number/src/lib/input-number.module.js +3 -7
- package/esm2015/month/index.js +2 -0
- package/esm2015/month/sd-angular-core-month.js +5 -0
- package/esm2015/month/src/lib/month.component.js +332 -0
- package/esm2015/month/src/lib/month.module.js +40 -0
- package/esm2015/month/src/public-api.js +3 -0
- package/esm2015/public-api.js +4 -1
- package/fesm2015/sd-angular-core-autocomplete.js +8 -10
- package/fesm2015/sd-angular-core-autocomplete.js.map +1 -1
- package/fesm2015/sd-angular-core-date-full.js +348 -0
- package/fesm2015/sd-angular-core-date-full.js.map +1 -0
- package/fesm2015/sd-angular-core-date-time.js +12 -14
- package/fesm2015/sd-angular-core-date-time.js.map +1 -1
- package/fesm2015/sd-angular-core-date.js +348 -0
- package/fesm2015/sd-angular-core-date.js.map +1 -0
- package/fesm2015/sd-angular-core-export.js +3 -0
- package/fesm2015/sd-angular-core-export.js.map +1 -1
- package/fesm2015/sd-angular-core-form.js +19 -10
- package/fesm2015/sd-angular-core-form.js.map +1 -1
- package/fesm2015/sd-angular-core-input-number.js +3 -7
- package/fesm2015/sd-angular-core-input-number.js.map +1 -1
- package/fesm2015/sd-angular-core-month.js +373 -0
- package/fesm2015/sd-angular-core-month.js.map +1 -0
- package/fesm2015/sd-angular-core.js +3 -0
- package/fesm2015/sd-angular-core.js.map +1 -1
- package/form/sd-angular-core-form.metadata.json +1 -1
- package/input-number/sd-angular-core-input-number.metadata.json +1 -1
- package/month/index.d.ts +1 -0
- package/month/package.json +12 -0
- package/month/sd-angular-core-month.d.ts +4 -0
- package/month/sd-angular-core-month.metadata.json +1 -0
- package/month/src/lib/month.component.d.ts +64 -0
- package/month/src/lib/month.module.d.ts +2 -0
- package/month/src/public-api.d.ts +2 -0
- package/package.json +1 -1
- package/public-api.d.ts +3 -0
- package/{sd-angular-core-1.3.243.tgz → sd-angular-core-1.3.245.tgz} +0 -0
|
@@ -310,7 +310,7 @@ _date = new WeakMap(), _name = new WeakMap(), _form = new WeakMap(), _subscripti
|
|
|
310
310
|
SdDateTime.decorators = [
|
|
311
311
|
{ type: Component, args: [{
|
|
312
312
|
selector: 'sd-date-time',
|
|
313
|
-
template: "<ng-container *ngIf=\"!appearance && sdLabelDef?.templateRef\">\r\n <ng-container *ngTemplateOutlet=\"sdLabelDef.templateRef\"> </ng-container>\r\n</ng-container>\r\n<label *ngIf=\"!appearance && label && !sdLabelDef?.templateRef\" class=\"d-block mb-0 T14M\"\r\n >{{ label }} <span class=\"text-danger mb-2\" *ngIf=\"required\">*</span></label\r\n>\r\n<div\r\n class=\"d-flex align-items-center\"\r\n [class.sd-view]=\"sdView?.templateRef\"\r\n [class.c-focused]=\"isFocused\"\r\n [class.c-disabled]=\"formControl.disabled\"\r\n (click)=\"onClick()\">\r\n <ng-container *ngIf=\"sdView?.templateRef && !isFocused && !datePicker?.opened && !dateTimePicker?.opened; else default\">\r\n <ng-container *ngTemplateOutlet=\"sdView.templateRef; context: { value: formControl.value }\"> </ng-container>\r\n </ng-container>\r\n <ng-template #default>\r\n <mat-form-field\r\n *ngIf=\"type === 'datetime'\"\r\n class=\"sd-md\"\r\n [ngClass]=\"{ 'sd-sm': size === 'sm', 'no-padding-wrapper': disableErrorMessage }\"\r\n [appearance]=\"appearance || 'outline'\">\r\n <mat-label *ngIf=\"appearance && label\">{{ label }}</mat-label>\r\n <input\r\n aria-hidden=\"true\"\r\n [id]=\"id\"\r\n matInput\r\n (keyup)=\"onKeyup($event)\"\r\n (keydown)=\"onKeyDown($event)\"\r\n (dateChange)=\"onChange($event)\"\r\n [autocomplete]=\"id\"\r\n autocorrect=\"off\"\r\n [formControl]=\"formControl\"\r\n [ngxMatDatetimePicker]=\"picker1\"\r\n [placeholder]=\"placeholder || (appearance ? label : '')\"\r\n [min]=\"min\"\r\n [required]=\"required\"\r\n [max]=\"max\"\r\n (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\"\r\n [attr.data-qclabel]=\"label\"\r\n [attr.data-qcid]=\"qcId\"\r\n [sdPopoverTriggerFor]=\"null\"\r\n [sdPopoverDisabled]=\"!disableErrorMessage || formControl.valid\"\r\n #input\r\n [maxLength]=\"maxlength\" />\r\n <!-- <mat-icon class=\"pointer sd-suffix-icon\" (click)=\"!formControl?.disabled && picker1.open()\" matSuffix>today\r\n </mat-icon> -->\r\n <ng-content select=\"[sdSuffixIcon]\" matSuffix></ng-content>\r\n <mat-icon\r\n *ngIf=\"formControl?.value && !required && !formControl.disabled\"\r\n class=\"pointer sd-suffix-icon\"\r\n (click)=\"clear($event)\"\r\n matSuffix\r\n >cancel\r\n </mat-icon>\r\n <mat-datepicker-toggle matSuffix [for]=\"picker1\"> </mat-datepicker-toggle>\r\n <ngx-mat-datetime-picker\r\n #picker1\r\n [defaultTime]=\"defaultTime\"\r\n [touchUi]=\"isMobileOrTablet\"\r\n [showSpinners]=\"false\"\r\n (opened)=\"onFocus()\"\r\n (closed)=\"onBlur(); focusInputElement()\">\r\n </ngx-mat-datetime-picker>\r\n\r\n <mat-error *ngIf=\"formControl?.errors?.required && formControl?.touched\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ 'This field is required' | sdTranslate }}</ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.matDatetimePickerMin && formControl?.touched && !isFocused\">\r\n <ng-container *ngIf=\"!disableErrorMessage\"\r\n >{{ 'Min date' | sdTranslate }}:\r\n <strong>{{ min | date : 'dd/MM/yyyy HH:mm' }}</strong>\r\n </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.matDatetimePickerMax && formControl?.touched && !isFocused\">\r\n <ng-container *ngIf=\"!disableErrorMessage\"\r\n >{{ 'Max date' | sdTranslate }}:\r\n <strong>{{ max | date : 'dd/MM/yyyy HH:mm' }}</strong>\r\n </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.matDatetimePickerParse && formControl?.touched && !isFocused\">\r\n <ng-container *ngIf=\"!disableErrorMessage\"\r\n >{{ 'Parse error' | sdTranslate }}:\r\n <strong>{{ formControl?.errors?.matDatetimePickerParse?.text }}</strong>\r\n </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.customValidator && formControl?.touched && !disableErrorMessage\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ formControl?.errors?.customValidator }} </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.date && formControl?.touched && !disableErrorMessage\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ formControl?.errors?.date }} </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl.errors?.inlineError && formControl?.touched && !disableErrorMessage\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ inlineError }}</ng-container>\r\n </mat-error>\r\n </mat-form-field>\r\n <mat-form-field\r\n *ngIf=\"type === 'date'\"\r\n class=\"sd-md\"\r\n [ngClass]=\"{ 'sd-sm': size === 'sm', 'no-padding-wrapper': disableErrorMessage }\"\r\n [appearance]=\"appearance || 'outline'\">\r\n <mat-label *ngIf=\"appearance && label\">{{ label }}</mat-label>\r\n <input\r\n aria-hidden=\"true\"\r\n [id]=\"id\"\r\n matInput\r\n (keyup)=\"onKeyup($event)\"\r\n (keydown)=\"onKeyDown($event)\"\r\n (dateChange)=\"onChange($event)\"\r\n [autocomplete]=\"id\"\r\n autocorrect=\"off\"\r\n [formControl]=\"formControl\"\r\n [required]=\"required\"\r\n [matDatepicker]=\"picker2\"\r\n [placeholder]=\"placeholder || (appearance ? label : '')\"\r\n [min]=\"min\"\r\n [max]=\"max\"\r\n (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\"\r\n [attr.data-qclabel]=\"label\"\r\n [attr.data-qcid]=\"qcId\"\r\n [sdPopoverTriggerFor]=\"null\"\r\n [sdPopoverDisabled]=\"!disableErrorMessage || formControl.valid\"\r\n #input\r\n [maxLength]=\"maxlength\" />\r\n <ng-content select=\"[sdSuffixIcon]\" matSuffix></ng-content>\r\n <mat-icon\r\n *ngIf=\"formControl?.value && !required && !formControl.disabled\"\r\n class=\"pointer sd-suffix-icon\"\r\n (click)=\"clear($event)\"\r\n matSuffix\r\n >cancel\r\n </mat-icon>\r\n\r\n <mat-icon class=\"pointer sd-suffix-icon\" (click)=\"!formControl?.disabled && picker2.open()\" #btn matSuffix>today </mat-icon>\r\n\r\n <mat-datepicker #picker2 [touchUi]=\"isMobileOrTablet\"></mat-datepicker>\r\n\r\n <mat-error *ngIf=\"formControl?.errors?.required && formControl?.touched\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ 'This field is required' | sdTranslate }}</ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.matDatepickerMin && formControl?.touched && !isFocused\">\r\n <ng-container *ngIf=\"!disableErrorMessage\"\r\n >{{ 'Min date' | sdTranslate }}:\r\n <strong>{{ min | date : 'dd/MM/yyyy HH:mm' }}</strong>\r\n </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.matDatepickerMax && formControl?.touched && !isFocused\">\r\n <ng-container *ngIf=\"!disableErrorMessage\"\r\n >{{ 'Max date' | sdTranslate }}:\r\n <strong>{{ max | date : 'dd/MM/yyyy HH:mm' }}</strong>\r\n </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.matDatetimePickerParse && formControl?.touched && !isFocused\">\r\n <ng-container *ngIf=\"!disableErrorMessage\"\r\n >{{ 'Parse error' | sdTranslate }}:\r\n <strong>{{ formControl?.errors?.matDatetimePickerParse?.text }}</strong>\r\n </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.customValidator && formControl?.touched && !disableErrorMessage\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ formControl?.errors?.customValidator }} </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.date && formControl?.touched && !disableErrorMessage\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ formControl?.errors?.date }} </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl.errors?.inlineError && formControl?.touched && !disableErrorMessage\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ inlineError }}</ng-container>\r\n </mat-error>\r\n </mat-form-field>\r\n\r\n <mat-form-field\r\n *ngIf=\"type === 'month'\"\r\n class=\"sd-md\"\r\n [ngClass]=\"{ 'sd-sm': size === 'sm', 'no-padding-wrapper': disableErrorMessage }\"\r\n appearance=\"outline\">\r\n <mat-label *ngIf=\"label\">{{ label }}</mat-label>\r\n <input\r\n aria-hidden=\"true\"\r\n [id]=\"id\"\r\n matInput\r\n (keyup)=\"onKeyup($event)\"\r\n (keydown)=\"onKeyDown($event)\"\r\n (dateChange)=\"onChange($event)\"\r\n [autocomplete]=\"id\"\r\n autocorrect=\"off\"\r\n [formControl]=\"formControl\"\r\n [required]=\"required\"\r\n [matDatepicker]=\"pickerMonth\"\r\n [placeholder]=\"placeholder || (appearance ? label : '')\"\r\n [min]=\"min\"\r\n [max]=\"max\"\r\n (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\"\r\n [sdPopoverTriggerFor]=\"null\"\r\n [sdPopoverDisabled]=\"!disableErrorMessage || formControl.valid\"\r\n #input />\r\n\r\n <mat-icon\r\n *ngIf=\"formControl?.value && !required && !formControl.disabled\"\r\n class=\"pointer sd-suffix-icon\"\r\n (click)=\"clear($event)\"\r\n matSuffix\r\n >cancel\r\n </mat-icon>\r\n <mat-icon class=\"pointer sd-suffix-icon\" (click)=\"!formControl?.disabled && pickerMonth.open()\" #btn matSuffix> today </mat-icon>\r\n\r\n <mat-datepicker\r\n #pickerMonth\r\n [touchUi]=\"isMobileOrTablet\"\r\n startView=\"multi-year\"\r\n (monthSelected)=\"setMonthAndYear($event, pickerMonth)\"></mat-datepicker>\r\n\r\n <mat-error *ngIf=\"formControl?.errors?.required && formControl?.touched\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ 'This field is required' | sdTranslate }}</ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.matDatepickerMin && formControl?.touched\">\r\n <ng-container *ngIf=\"!disableErrorMessage\"\r\n >{{ 'Min date' | sdTranslate }}:\r\n <strong>{{ min | date : 'dd/MM/yyyy HH:mm' }}</strong>\r\n </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.matDatepickerMax && formControl?.touched\">\r\n <ng-container *ngIf=\"!disableErrorMessage\"\r\n >{{ 'Max date' | sdTranslate }}:\r\n <strong>{{ max | date : 'dd/MM/yyyy HH:mm' }}</strong>\r\n </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.matDatetimePickerParse && formControl?.touched\">\r\n <ng-container *ngIf=\"!disableErrorMessage\"\r\n >{{ 'Parse error' | sdTranslate }}:\r\n <strong>{{ formControl?.errors?.matDatetimePickerParse?.text }}</strong>\r\n </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.customValidator && formControl?.touched && !disableErrorMessage\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ formControl?.errors?.customValidator }} </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl.errors?.inlineError && formControl?.touched && !disableErrorMessage\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ inlineError }}</ng-container>\r\n </mat-error>\r\n </mat-form-field>\r\n\r\n <ng-container *ngIf=\"type === 'time'\">\r\n <mat-form-field [appearance]=\"appearance || 'outline'\" class=\"sd-md pt-5\">\r\n <mat-label *ngIf=\"appearance && label\">{{ label }}</mat-label>\r\n <input\r\n [ngxTimepicker]=\"openingTime\"\r\n aria-hidden=\"true\"\r\n [id]=\"id\"\r\n matInput\r\n (keyup)=\"onKeyup($event)\"\r\n (keydown)=\"onKeyDown($event)\"\r\n [autocomplete]=\"id\"\r\n autocorrect=\"off\"\r\n [formControl]=\"formControl\"\r\n [required]=\"required\"\r\n [placeholder]=\"placeholder || (appearance ? label : '')\"\r\n [min]=\"min\"\r\n [max]=\"max\"\r\n (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\"\r\n [attr.data-qclabel]=\"label\"\r\n [attr.data-qcid]=\"qcId\"\r\n #input\r\n [format]=\"24\" />\r\n\r\n <ngx-material-timepicker\r\n #openingTime\r\n [defaultTime]=\"defaultTime\"\r\n (timeChanged)=\"timeChanged($event)\"\r\n [enableKeyboardInput]=\"true\"\r\n [cancelBtnTmpl]=\"cancelBtn\"\r\n [confirmBtnTmpl]=\"confirmBtn\"></ngx-material-timepicker>\r\n\r\n <mat-error *ngIf=\"formControl?.errors?.required && formControl?.touched\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ 'This field is required' | sdTranslate }}</ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl.errors?.inlineError && formControl?.touched\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ inlineError }}</ng-container>\r\n </mat-error>\r\n </mat-form-field>\r\n\r\n <ng-template #cancelBtn>\r\n <sd-button title=\"{{ 'Cancel' | sdTranslate }}\" size=\"sm\"></sd-button>\r\n </ng-template>\r\n <ng-template #confirmBtn>\r\n <sd-button class=\"ml-8\" title=\"{{ 'Apply' | sdTranslate }}\" color=\"primary\" size=\"sm\"></sd-button>\r\n </ng-template>\r\n </ng-container>\r\n </ng-template>\r\n</div>\r\n<!-- <sd-popover #error=\"sdPopover\" type=\"danger\" width=\"300px\">\r\n <span *ngIf=\"formControl.errors?.required\">\r\n {{ \"This field is required\" | sdTranslate }}\r\n </span>\r\n <span *ngIf=\"formControl?.errors?.matDatetimePickerMin\">\r\n {{ \"Min date\" | sdTranslate }}:\r\n <strong>{{ min | date: \"dd/MM/yyyy HH:mm\" }}</strong>\r\n </span>\r\n <span *ngIf=\"formControl?.errors?.matDatetimePickerMax\">\r\n {{ \"Max date\" | sdTranslate }}:\r\n <strong>{{ max | date: \"dd/MM/yyyy HH:mm\" }}</strong>\r\n </span>\r\n <span *ngIf=\"formControl?.errors?.matDatetimePickerParse\">\r\n {{ \"Parse error\" | sdTranslate }}:\r\n <strong>{{ formControl?.errors?.matDatetimePickerParse?.text }}</strong>\r\n </span>\r\n <span *ngIf=\"formControl?.errors?.customValidator\">\r\n {{ formControl?.errors?.customValidator }}\r\n </span>\r\n</sd-popover> -->\r\n",
|
|
313
|
+
template: "<ng-container *ngIf=\"!appearance && sdLabelDef?.templateRef\">\r\n <ng-container *ngTemplateOutlet=\"sdLabelDef.templateRef\"> </ng-container>\r\n</ng-container>\r\n<label *ngIf=\"!appearance && label && !sdLabelDef?.templateRef\" class=\"d-block mb-0 T14M\"\r\n >{{ label }} <span class=\"text-danger mb-2\" *ngIf=\"required\">*</span></label\r\n>\r\n<div\r\n class=\"d-flex align-items-center\"\r\n [class.sd-view]=\"sdView?.templateRef\"\r\n [class.c-focused]=\"isFocused\"\r\n [class.c-disabled]=\"formControl.disabled\"\r\n (click)=\"onClick()\">\r\n <ng-container *ngIf=\"sdView?.templateRef && !isFocused && !datePicker?.opened && !dateTimePicker?.opened; else default\">\r\n <ng-container *ngTemplateOutlet=\"sdView.templateRef; context: { value: formControl.value }\"> </ng-container>\r\n </ng-container>\r\n <ng-template #default>\r\n <mat-form-field\r\n *ngIf=\"type === 'datetime'\"\r\n class=\"sd-md\"\r\n [ngClass]=\"{ 'sd-sm': size === 'sm', 'no-padding-wrapper': disableErrorMessage }\"\r\n [appearance]=\"appearance || 'outline'\">\r\n <mat-label *ngIf=\"appearance && label\">{{ label }}</mat-label>\r\n <input\r\n aria-hidden=\"true\"\r\n [id]=\"id\"\r\n matInput\r\n (keyup)=\"onKeyup($event)\"\r\n (keydown)=\"onKeyDown($event)\"\r\n (dateChange)=\"onChange($event)\"\r\n [autocomplete]=\"id\"\r\n autocorrect=\"off\"\r\n [formControl]=\"formControl\"\r\n [ngxMatDatetimePicker]=\"picker1\"\r\n [placeholder]=\"placeholder || (appearance ? label : '')\"\r\n [min]=\"min\"\r\n [required]=\"required\"\r\n [max]=\"max\"\r\n (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\"\r\n [attr.data-qclabel]=\"label\"\r\n [attr.data-qcid]=\"qcId\"\r\n #input\r\n [maxLength]=\"maxlength\" />\r\n <!-- <mat-icon class=\"pointer sd-suffix-icon\" (click)=\"!formControl?.disabled && picker1.open()\" matSuffix>today\r\n </mat-icon> -->\r\n <ng-content select=\"[sdSuffixIcon]\" matSuffix></ng-content>\r\n <mat-icon\r\n *ngIf=\"formControl?.value && !required && !formControl.disabled\"\r\n class=\"pointer sd-suffix-icon\"\r\n (click)=\"clear($event)\"\r\n matSuffix\r\n >cancel\r\n </mat-icon>\r\n <mat-datepicker-toggle matSuffix [for]=\"picker1\"> </mat-datepicker-toggle>\r\n <ngx-mat-datetime-picker\r\n #picker1\r\n [defaultTime]=\"defaultTime\"\r\n [touchUi]=\"isMobileOrTablet\"\r\n [showSpinners]=\"false\"\r\n (opened)=\"onFocus()\"\r\n (closed)=\"onBlur(); focusInputElement()\">\r\n </ngx-mat-datetime-picker>\r\n\r\n <mat-error *ngIf=\"formControl?.errors?.required && formControl?.touched\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ 'This field is required' | sdTranslate }}</ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.matDatetimePickerMin && formControl?.touched && !isFocused\">\r\n <ng-container *ngIf=\"!disableErrorMessage\"\r\n >{{ 'Min date' | sdTranslate }}:\r\n <strong>{{ min | date : 'dd/MM/yyyy HH:mm' }}</strong>\r\n </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.matDatetimePickerMax && formControl?.touched && !isFocused\">\r\n <ng-container *ngIf=\"!disableErrorMessage\"\r\n >{{ 'Max date' | sdTranslate }}:\r\n <strong>{{ max | date : 'dd/MM/yyyy HH:mm' }}</strong>\r\n </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.matDatetimePickerParse && formControl?.touched && !isFocused\">\r\n <ng-container *ngIf=\"!disableErrorMessage\"\r\n >{{ 'Parse error' | sdTranslate }}:\r\n <strong>{{ formControl?.errors?.matDatetimePickerParse?.text }}</strong>\r\n </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.customValidator && formControl?.touched && !disableErrorMessage\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ formControl?.errors?.customValidator }} </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.date && formControl?.touched && !disableErrorMessage\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ formControl?.errors?.date }} </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl.errors?.inlineError && formControl?.touched && !disableErrorMessage\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ inlineError }}</ng-container>\r\n </mat-error>\r\n </mat-form-field>\r\n <mat-form-field\r\n *ngIf=\"type === 'date'\"\r\n class=\"sd-md\"\r\n [ngClass]=\"{ 'sd-sm': size === 'sm', 'no-padding-wrapper': disableErrorMessage }\"\r\n [appearance]=\"appearance || 'outline'\">\r\n <mat-label *ngIf=\"appearance && label\">{{ label }}</mat-label>\r\n <input\r\n aria-hidden=\"true\"\r\n [id]=\"id\"\r\n matInput\r\n (keyup)=\"onKeyup($event)\"\r\n (keydown)=\"onKeyDown($event)\"\r\n (dateChange)=\"onChange($event)\"\r\n [autocomplete]=\"id\"\r\n autocorrect=\"off\"\r\n [formControl]=\"formControl\"\r\n [required]=\"required\"\r\n [matDatepicker]=\"picker2\"\r\n [placeholder]=\"placeholder || (appearance ? label : '')\"\r\n [min]=\"min\"\r\n [max]=\"max\"\r\n (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\"\r\n [attr.data-qclabel]=\"label\"\r\n [attr.data-qcid]=\"qcId\"\r\n #input\r\n [maxLength]=\"maxlength\" />\r\n <ng-content select=\"[sdSuffixIcon]\" matSuffix></ng-content>\r\n <mat-icon\r\n *ngIf=\"formControl?.value && !required && !formControl.disabled\"\r\n class=\"pointer sd-suffix-icon\"\r\n (click)=\"clear($event)\"\r\n matSuffix\r\n >cancel\r\n </mat-icon>\r\n\r\n <mat-icon class=\"pointer sd-suffix-icon\" (click)=\"!formControl?.disabled && picker2.open()\" #btn matSuffix>today </mat-icon>\r\n\r\n <mat-datepicker #picker2 [touchUi]=\"isMobileOrTablet\"></mat-datepicker>\r\n\r\n <mat-error *ngIf=\"formControl?.errors?.required && formControl?.touched\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ 'This field is required' | sdTranslate }}</ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.matDatepickerMin && formControl?.touched && !isFocused\">\r\n <ng-container *ngIf=\"!disableErrorMessage\"\r\n >{{ 'Min date' | sdTranslate }}:\r\n <strong>{{ min | date : 'dd/MM/yyyy HH:mm' }}</strong>\r\n </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.matDatepickerMax && formControl?.touched && !isFocused\">\r\n <ng-container *ngIf=\"!disableErrorMessage\"\r\n >{{ 'Max date' | sdTranslate }}:\r\n <strong>{{ max | date : 'dd/MM/yyyy HH:mm' }}</strong>\r\n </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.matDatetimePickerParse && formControl?.touched && !isFocused\">\r\n <ng-container *ngIf=\"!disableErrorMessage\"\r\n >{{ 'Parse error' | sdTranslate }}:\r\n <strong>{{ formControl?.errors?.matDatetimePickerParse?.text }}</strong>\r\n </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.customValidator && formControl?.touched && !disableErrorMessage\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ formControl?.errors?.customValidator }} </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.date && formControl?.touched && !disableErrorMessage\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ formControl?.errors?.date }} </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl.errors?.inlineError && formControl?.touched && !disableErrorMessage\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ inlineError }}</ng-container>\r\n </mat-error>\r\n </mat-form-field>\r\n\r\n <mat-form-field\r\n *ngIf=\"type === 'month'\"\r\n class=\"sd-md\"\r\n [ngClass]=\"{ 'sd-sm': size === 'sm', 'no-padding-wrapper': disableErrorMessage }\"\r\n appearance=\"outline\">\r\n <mat-label *ngIf=\"label\">{{ label }}</mat-label>\r\n <input\r\n aria-hidden=\"true\"\r\n [id]=\"id\"\r\n matInput\r\n (keyup)=\"onKeyup($event)\"\r\n (keydown)=\"onKeyDown($event)\"\r\n (dateChange)=\"onChange($event)\"\r\n [autocomplete]=\"id\"\r\n autocorrect=\"off\"\r\n [formControl]=\"formControl\"\r\n [required]=\"required\"\r\n [matDatepicker]=\"pickerMonth\"\r\n [placeholder]=\"placeholder || (appearance ? label : '')\"\r\n [min]=\"min\"\r\n [max]=\"max\"\r\n (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\"\r\n #input />\r\n\r\n <mat-icon\r\n *ngIf=\"formControl?.value && !required && !formControl.disabled\"\r\n class=\"pointer sd-suffix-icon\"\r\n (click)=\"clear($event)\"\r\n matSuffix\r\n >cancel\r\n </mat-icon>\r\n <mat-icon class=\"pointer sd-suffix-icon\" (click)=\"!formControl?.disabled && pickerMonth.open()\" #btn matSuffix> today </mat-icon>\r\n\r\n <mat-datepicker\r\n #pickerMonth\r\n [touchUi]=\"isMobileOrTablet\"\r\n startView=\"multi-year\"\r\n (monthSelected)=\"setMonthAndYear($event, pickerMonth)\"></mat-datepicker>\r\n\r\n <mat-error *ngIf=\"formControl?.errors?.required && formControl?.touched\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ 'This field is required' | sdTranslate }}</ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.matDatepickerMin && formControl?.touched\">\r\n <ng-container *ngIf=\"!disableErrorMessage\"\r\n >{{ 'Min date' | sdTranslate }}:\r\n <strong>{{ min | date : 'dd/MM/yyyy HH:mm' }}</strong>\r\n </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.matDatepickerMax && formControl?.touched\">\r\n <ng-container *ngIf=\"!disableErrorMessage\"\r\n >{{ 'Max date' | sdTranslate }}:\r\n <strong>{{ max | date : 'dd/MM/yyyy HH:mm' }}</strong>\r\n </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.matDatetimePickerParse && formControl?.touched\">\r\n <ng-container *ngIf=\"!disableErrorMessage\"\r\n >{{ 'Parse error' | sdTranslate }}:\r\n <strong>{{ formControl?.errors?.matDatetimePickerParse?.text }}</strong>\r\n </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.customValidator && formControl?.touched && !disableErrorMessage\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ formControl?.errors?.customValidator }} </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl.errors?.inlineError && formControl?.touched && !disableErrorMessage\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ inlineError }}</ng-container>\r\n </mat-error>\r\n </mat-form-field>\r\n\r\n <ng-container *ngIf=\"type === 'time'\">\r\n <mat-form-field [appearance]=\"appearance || 'outline'\" class=\"sd-md pt-5\">\r\n <mat-label *ngIf=\"appearance && label\">{{ label }}</mat-label>\r\n <input\r\n [ngxTimepicker]=\"openingTime\"\r\n aria-hidden=\"true\"\r\n [id]=\"id\"\r\n matInput\r\n (keyup)=\"onKeyup($event)\"\r\n (keydown)=\"onKeyDown($event)\"\r\n [autocomplete]=\"id\"\r\n autocorrect=\"off\"\r\n [formControl]=\"formControl\"\r\n [required]=\"required\"\r\n [placeholder]=\"placeholder || (appearance ? label : '')\"\r\n [min]=\"min\"\r\n [max]=\"max\"\r\n (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\"\r\n [attr.data-qclabel]=\"label\"\r\n [attr.data-qcid]=\"qcId\"\r\n #input\r\n [format]=\"24\" />\r\n\r\n <ngx-material-timepicker\r\n #openingTime\r\n [defaultTime]=\"defaultTime\"\r\n (timeChanged)=\"timeChanged($event)\"\r\n [enableKeyboardInput]=\"true\"\r\n [cancelBtnTmpl]=\"cancelBtn\"\r\n [confirmBtnTmpl]=\"confirmBtn\"></ngx-material-timepicker>\r\n\r\n <mat-error *ngIf=\"formControl?.errors?.required && formControl?.touched\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ 'This field is required' | sdTranslate }}</ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl.errors?.inlineError && formControl?.touched\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ inlineError }}</ng-container>\r\n </mat-error>\r\n </mat-form-field>\r\n\r\n <ng-template #cancelBtn>\r\n <sd-button title=\"{{ 'Cancel' | sdTranslate }}\" size=\"sm\"></sd-button>\r\n </ng-template>\r\n <ng-template #confirmBtn>\r\n <sd-button class=\"ml-8\" title=\"{{ 'Apply' | sdTranslate }}\" color=\"primary\" size=\"sm\"></sd-button>\r\n </ng-template>\r\n </ng-container>\r\n </ng-template>\r\n</div>\r\n<!-- <sd-popover #error=\"sdPopover\" type=\"danger\" width=\"300px\">\r\n <span *ngIf=\"formControl.errors?.required\">\r\n {{ \"This field is required\" | sdTranslate }}\r\n </span>\r\n <span *ngIf=\"formControl?.errors?.matDatetimePickerMin\">\r\n {{ \"Min date\" | sdTranslate }}:\r\n <strong>{{ min | date: \"dd/MM/yyyy HH:mm\" }}</strong>\r\n </span>\r\n <span *ngIf=\"formControl?.errors?.matDatetimePickerMax\">\r\n {{ \"Max date\" | sdTranslate }}:\r\n <strong>{{ max | date: \"dd/MM/yyyy HH:mm\" }}</strong>\r\n </span>\r\n <span *ngIf=\"formControl?.errors?.matDatetimePickerParse\">\r\n {{ \"Parse error\" | sdTranslate }}:\r\n <strong>{{ formControl?.errors?.matDatetimePickerParse?.text }}</strong>\r\n </span>\r\n <span *ngIf=\"formControl?.errors?.customValidator\">\r\n {{ formControl?.errors?.customValidator }}\r\n </span>\r\n</sd-popover> -->\r\n",
|
|
314
314
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
315
315
|
providers: [
|
|
316
316
|
{ provide: MAT_DATE_FORMATS, useValue: ɵ0 },
|
|
@@ -353,4 +353,4 @@ SdDateTime.propDecorators = {
|
|
|
353
353
|
dateTimePicker: [{ type: ViewChild, args: [NgxMatDatetimePicker,] }]
|
|
354
354
|
};
|
|
355
355
|
export { ɵ0, ɵ1 };
|
|
356
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJDOi9Vc2Vycy9uZ2hpYXR0MTVfb25lbW91bnQvRG9jdW1lbnRzL2xpYi1jb3JlLXVpL3Byb2plY3RzL3NkLWNvcmUvZGF0ZS10aW1lLyIsInNvdXJjZXMiOlsic3JjL2xpYi9kYXRlLXRpbWUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsWUFBWSxFQUNaLE1BQU0sRUFHTixpQkFBaUIsRUFFakIsU0FBUyxFQUNULHVCQUF1QixFQUN2QixZQUFZLEVBRVosTUFBTSxFQUNOLFFBQVEsRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLElBQUksTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxNQUFnQixNQUFNLFFBQVEsQ0FBQztBQUN0QyxPQUFPLEVBQTZCLE1BQU0sRUFBZSxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRixPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsYUFBYSxFQUEwQixNQUFNLDhCQUE4QixDQUFDO0FBQ3BGLE9BQU8sRUFBQyxvQkFBb0IsRUFBRSxvQkFBb0IsR0FBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3pHLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3hELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDbEMsT0FBTyxFQUFDLFdBQVcsRUFBc0IsYUFBYSxFQUFFLGtCQUFrQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFFM0csT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFFNUQsTUFBTSx1QkFBdUIsR0FBRztJQUM5QixLQUFLLEVBQUU7UUFDTCxTQUFTLEVBQUUsa0JBQWtC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QyxTQUFTLFNBQUMsT0FBTzt5QkFDakIsU0FBUyxTQUFDLGFBQWE7NkJBQ3ZCLFNBQVMsU0FBQyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBJbnB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgT3V0cHV0LFxyXG4gIE9uRGVzdHJveSxcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIE9uSW5pdCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ29udGVudENoaWxkLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSW5qZWN0LFxyXG4gIE9wdGlvbmFsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCAqIGFzIHV1aWQgZnJvbSAndXVpZCc7XHJcbmltcG9ydCBoYXNoIGZyb20gJ29iamVjdC1oYXNoJztcclxuaW1wb3J0IG1vbWVudCwge01vbWVudH0gZnJvbSAnbW9tZW50JztcclxuaW1wb3J0IHtBYnN0cmFjdENvbnRyb2wsIEZvcm1Hcm91cCwgTmdGb3JtLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9yc30gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge0RldmljZURldGVjdG9yU2VydmljZX0gZnJvbSAnbmd4LWRldmljZS1kZXRlY3Rvcic7XHJcbmltcG9ydCB7TWF0RGF0ZXBpY2tlciwgTWF0RGF0ZXBpY2tlcklucHV0RXZlbnR9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xyXG5pbXBvcnQge05neE1hdERhdGV0aW1lUGlja2VyLCBOR1hfTUFUX0RBVEVfRk9STUFUUyx9IGZyb20gJ0Bhbmd1bGFyLW1hdGVyaWFsLWNvbXBvbmVudHMvZGF0ZXRpbWUtcGlja2VyJztcclxuaW1wb3J0IHtNQVRfREFURV9GT1JNQVRTfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcclxuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge0ZPUk1fQ09ORklHLCBJRm9ybUNvbmZpZ3VyYXRpb24sIFNkRm9ybUNvbnRyb2wsIFNkVmlld0RlZkRpcmVjdGl2ZX0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS9jb21tb24nO1xyXG5pbXBvcnQge01hdEZvcm1GaWVsZEFwcGVhcmFuY2V9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xyXG5pbXBvcnQge1NkTGFiZWxEZWZEaXJlY3RpdmV9IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvY29tbW9uJztcclxuXHJcbmNvbnN0IENVU1RPTV9EQVRFVElNRV9GT1JNQVRTID0ge1xyXG4gIHBhcnNlOiB7XHJcbiAgICBkYXRlSW5wdXQ6ICdERC9NTS9ZWVlZIEhIOm1tJ1xyXG4gIH0sXHJcbiAgZGlzcGxheToge1xyXG4gICAgZGF0ZUlucHV0OiAnREQvTU0vWVlZWSBISDptbScsXHJcbiAgICBtb250aFllYXJMYWJlbDogJ01NTSBZWVlZJyxcclxuICAgIGRhdGVBMTF5TGFiZWw6ICdMTCcsXHJcbiAgICBtb250aFllYXJBMTF5TGFiZWw6ICdNTU1NIFlZWVknXHJcbiAgfVxyXG59O1xyXG5jb25zdCBDVVNUT01fREFURV9GT1JNQVRTID0ge1xyXG4gIHBhcnNlOiB7XHJcbiAgICBkYXRlSW5wdXQ6ICdERC9NTS9ZWVlZJ1xyXG4gIH0sXHJcbiAgZGlzcGxheToge1xyXG4gICAgZGF0ZUlucHV0OiAnREQvTU0vWVlZWScsXHJcbiAgICBtb250aFllYXJMYWJlbDogJ01NTSBZWVlZJyxcclxuICAgIGRhdGVBMTF5TGFiZWw6ICdMTCcsXHJcbiAgICBtb250aFllYXJBMTF5TGFiZWw6ICdNTU1NIFlZWVknXHJcbiAgfVxyXG59O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzZC1kYXRlLXRpbWUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRlLXRpbWUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2RhdGUtdGltZS5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge3Byb3ZpZGU6IE1BVF9EQVRFX0ZPUk1BVFMsIHVzZVZhbHVlOiBDVVNUT01fREFURV9GT1JNQVRTfSxcclxuICAgIHtwcm92aWRlOiBOR1hfTUFUX0RBVEVfRk9STUFUUywgdXNlVmFsdWU6IENVU1RPTV9EQVRFVElNRV9GT1JNQVRTfVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFNkRGF0ZVRpbWUgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgaWQgPSBgSSR7dXVpZC52NCgpfWA7XHJcbiAgaXNNb2JpbGVPclRhYmxldCA9IGZhbHNlO1xyXG4gICNkYXRlOiBhbnk7XHJcbiAgI25hbWUgPSB1dWlkLnY0KCk7XHJcbiAgQElucHV0KCkgc2V0IG5hbWUodmFsOiBzdHJpbmcpIHtcclxuICAgIGlmICh2YWwpIHtcclxuICAgICAgdGhpcy4jbmFtZSA9IHZhbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIGFwcGVhcmFuY2U6IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2U7XHJcbiAgZGlzYWJsZUVycm9yTWVzc2FnZSA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoJ2Rpc2FibGVFcnJvck1lc3NhZ2UnKSBzZXQgX2Rpc2FibGVFcnJvck1lc3NhZ2UodmFsOiBib29sZWFuIHwgJycpIHtcclxuICAgIHRoaXMuZGlzYWJsZUVycm9yTWVzc2FnZSA9ICh2YWwgPT09ICcnKSB8fCB2YWw7XHJcbiAgICB2YWwgPSAodmFsID09PSAnJykgfHwgdmFsO1xyXG4gIH1cclxuXHJcbiAgZm9ybUNvbnRyb2wgPSBuZXcgU2RGb3JtQ29udHJvbCgpO1xyXG4gIG1pbjogRGF0ZTtcclxuXHJcbiAgQElucHV0KCdtaW4nKSBzZXQgX21pbih2YWw6IHN0cmluZyB8IERhdGUgfCBudW1iZXIpIHtcclxuICAgIGlmIChEYXRlLmlzRGF0ZSh2YWwpKSB7XHJcbiAgICAgIHRoaXMubWluID0gbmV3IERhdGUodmFsKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubWluID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1heDogRGF0ZTtcclxuXHJcbiAgQElucHV0KCdtYXgnKSBzZXQgX21heCh2YWw6IHN0cmluZyB8IERhdGUgfCBudW1iZXIpIHtcclxuICAgIGlmIChEYXRlLmlzRGF0ZSh2YWwpKSB7XHJcbiAgICAgIHRoaXMubWF4ID0gbmV3IERhdGUodmFsKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubWF4ID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHNpemU6ICdzbScgfCAnbGcnO1xyXG4gICNmb3JtOiBGb3JtR3JvdXA7XHJcbiAgQElucHV0KCkgc2V0IGZvcm0odmFsOiBOZ0Zvcm0gfCBGb3JtR3JvdXApIHtcclxuICAgIGlmICh2YWwpIHtcclxuICAgICAgaWYgKHZhbCBpbnN0YW5jZW9mIE5nRm9ybSkge1xyXG4gICAgICAgIHRoaXMuI2Zvcm0gPSB2YWwuZm9ybTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLiNmb3JtID0gdmFsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtYXhsZW5ndGg6IG51bWJlcjtcclxuICB0eXBlOiAnZGF0ZXRpbWUnIHwgJ2RhdGUnIHwgJ3RpbWUnIHwgJ21vbnRoJyA9ICdkYXRldGltZSc7XHJcblxyXG4gIEBJbnB1dCgndHlwZScpIHNldCBfdHlwZSh2YWw6ICdkYXRldGltZScgfCAnZGF0ZScgfCAndGltZScgfCAnbW9udGgnKSB7XHJcbiAgICB0aGlzLnR5cGUgPSB2YWwgfHwgJ2RhdGV0aW1lJztcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHNldCBkaXNhYmxlZCh2YWw6IGJvb2xlYW4gfCAnJykge1xyXG4gICAgdmFsID0gKHZhbCA9PT0gJycpIHx8IHZhbDtcclxuICAgIGlmICh2YWwpIHtcclxuICAgICAgdGhpcy5mb3JtQ29udHJvbC5kaXNhYmxlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZvcm1Db250cm9sLmVuYWJsZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVxdWlyZWQgPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCdyZXF1aXJlZCcpIHNldCBfcmVxdWlyZWQodmFsOiBib29sZWFuIHwgJycpIHtcclxuICAgIHRoaXMucmVxdWlyZWQgPSAodmFsID09PSAnJykgfHwgdmFsO1xyXG4gICAgaWYgKHRoaXMucmVxdWlyZWQpIHtcclxuICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZvcm1Db250cm9sLmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5saW5lRXJyb3I6IHN0cmluZztcclxuXHJcbiAgQElucHV0KCdpbmxpbmVFcnJvcicpIHNldCBfaW5saW5lRXJyb3IodmFsOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuaW5saW5lRXJyb3IgPSB2YWw7XHJcbiAgICAvLyB0aGlzLiN1cGRhdGVWYWxpZGF0b3IoKTtcclxuICAgIGlmICh0aGlzLmlubGluZUVycm9yKSB7XHJcblxyXG5cclxuICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWxpZGF0b3JzKFt0aGlzLmN1c3RvbUlubGluZUVycm9yVmFsaWRhdG9yKCldKTtcclxuICAgICAgdGhpcy5mb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcblxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5mb3JtQ29udHJvbC5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgdGhpcy5mb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHFjSWQ6IHN0cmluZztcclxuICBsYWJlbDogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoJ2xhYmVsJykgc2V0IF9sYWJlbCh2YWw6IHN0cmluZykge1xyXG4gICAgdGhpcy5sYWJlbCA9IHZhbDtcclxuICAgIHRoaXMucWNJZCA9IGhhc2goe1xyXG4gICAgICBzZWxlY3RvcjogJ3NkLWRhdGUtdGltZScsXHJcbiAgICAgIGxhYmVsOiB2YWxcclxuICAgIH0pO1xyXG4gIH07XHJcblxyXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZGVmYXVsdFRpbWU6IGFueTtcclxuXHJcbiAgQElucHV0KCkgc2V0IG1pbkRhdGUodmFsOiBzdHJpbmcgfCBEYXRlKSB7XHJcbiAgICBpZiAoRGF0ZS5pc0RhdGUodmFsKSkge1xyXG4gICAgICB0aGlzLm1pbiA9IG5ldyBEYXRlKHZhbCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm1pbiA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSBzZXQgbWF4RGF0ZSh2YWw6IHN0cmluZyB8IERhdGUpIHtcclxuICAgIGlmIChEYXRlLmlzRGF0ZSh2YWwpKSB7XHJcbiAgICAgIHRoaXMubWF4ID0gbmV3IERhdGUodmFsKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubWF4ID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHZhbGlkYXRvcjogKHZhbHVlOiBhbnkpID0+IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPjtcclxuICBAT3V0cHV0KCkgc2RDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHNkRm9jdXMgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgQElucHV0KCkgc2V0IG1vZGVsKHZhbDogYW55KSB7XHJcbiAgICBpZiAoIURhdGUuaXNEYXRlKHZhbCkpIHtcclxuICAgICAgdmFsID0gbnVsbDtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLiNkYXRlICE9PSB2YWwpIHtcclxuICAgICAgdGhpcy4jZGF0ZSA9IHZhbDtcclxuICAgICAgY29uc3QgZGF0ZSA9IERhdGUuaXNEYXRlKHRoaXMuI2RhdGUpID8gbW9tZW50KERhdGUudG9Gb3JtYXQodGhpcy4jZGF0ZSwgJ01NL2RkL3l5eXkgSEg6bW06c3MnKSwgJ01NL0REL1lZWVkgSEg6bW06c3MnKSA6IG51bGw7XHJcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUoZGF0ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAT3V0cHV0KCkgbW9kZWxDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgI3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuICBAQ29udGVudENoaWxkKFNkVmlld0RlZkRpcmVjdGl2ZSkgc2RWaWV3OiBTZFZpZXdEZWZEaXJlY3RpdmU7XHJcbiAgQENvbnRlbnRDaGlsZChTZExhYmVsRGVmRGlyZWN0aXZlKSBzZExhYmVsRGVmOiBTZExhYmVsRGVmRGlyZWN0aXZlO1xyXG4gIEBWaWV3Q2hpbGQoJ2lucHV0JykgaW5wdXQ6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZChNYXREYXRlcGlja2VyKSBkYXRlUGlja2VyOiBNYXREYXRlcGlja2VyPE1vbWVudD47XHJcbiAgQFZpZXdDaGlsZChOZ3hNYXREYXRldGltZVBpY2tlcikgZGF0ZVRpbWVQaWNrZXI6IE5neE1hdERhdGV0aW1lUGlja2VyPE1vbWVudD47XHJcbiAgaXNGb2N1c2VkID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgZGV2aWNlU2VydmljZTogRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLFxyXG4gICAgQEluamVjdChGT1JNX0NPTkZJRykgQE9wdGlvbmFsKCkgcHJpdmF0ZSBmb3JtQ29uZmlnOiBJRm9ybUNvbmZpZ3VyYXRpb24pIHtcclxuICAgIHRoaXMuaXNNb2JpbGVPclRhYmxldCA9ICFkZXZpY2VTZXJ2aWNlLmlzRGVza3RvcCgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLiNmb3JtPy5yZW1vdmVDb250cm9sKHRoaXMuI25hbWUpO1xyXG4gICAgdGhpcy4jc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMubWF4bGVuZ3RoID0gdGhpcy50eXBlID09PSAnZGF0ZXRpbWUnID8gMTYgOiAxMDtcclxuICAgIHRoaXMuYXBwZWFyYW5jZSA9IHRoaXMuYXBwZWFyYW5jZSB8fCB0aGlzLmZvcm1Db25maWc/LmFwcGVhcmFuY2U7XHJcbiAgICB0aGlzLiNzdWJzY3JpcHRpb24uYWRkKHRoaXMuZm9ybUNvbnRyb2wuc2RDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIC8vIHRoaXMuZm9ybUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH0pKTtcclxuICAgIHRoaXMuI2Zvcm0/LmFkZENvbnRyb2wodGhpcy4jbmFtZSwgdGhpcy5mb3JtQ29udHJvbCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gSMOgbSB04bqhbyBWYWxpZGF0b3JzIHTDuXkgY2jhu4luaCBjaG8gaW5saW5lRXJyb3JcclxuICBjdXN0b21JbmxpbmVFcnJvclZhbGlkYXRvcigpOiBWYWxpZGF0b3JGbiB7XHJcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCBudWxsID0+IHtcclxuICAgICAgcmV0dXJuIHtpbmxpbmVFcnJvcjogdHJ1ZX07XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gIH1cclxuXHJcbiAgb25Gb2N1cyA9ICgpID0+IHtcclxuICAgIHRoaXMuaXNGb2N1c2VkID0gdHJ1ZTtcclxuICAgIHRoaXMuc2RGb2N1cy5lbWl0KCk7XHJcbiAgfTtcclxuXHJcbiAgb25CbHVyID0gKCkgPT4ge1xyXG4gICAgdGhpcy5pc0ZvY3VzZWQgPSBmYWxzZTtcclxuICB9O1xyXG5cclxuICBvbkNsaWNrID0gKCkgPT4ge1xyXG4gICAgaWYgKHRoaXMuc2RWaWV3Py50ZW1wbGF0ZVJlZikge1xyXG4gICAgICBpZiAoIXRoaXMuZm9ybUNvbnRyb2wuZGlzYWJsZWQgJiYgIXRoaXMuaXNGb2N1c2VkKSB7XHJcbiAgICAgICAgdGhpcy5mb2N1cygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgYmx1ciA9ICgpID0+IHtcclxuICAgIHRoaXMuaW5wdXQ/Lm5hdGl2ZUVsZW1lbnQ/LmJsdXIoKTtcclxuICB9O1xyXG5cclxuICBmb2N1cyA9ICgpID0+IHtcclxuICAgIHRoaXMuaXNGb2N1c2VkID0gdHJ1ZTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmlucHV0Py5uYXRpdmVFbGVtZW50Py5mb2N1cygpO1xyXG4gICAgICBpZiAodGhpcy50eXBlID09PSAnZGF0ZScpIHtcclxuICAgICAgICB0aGlzLmRhdGVQaWNrZXI/Lm9wZW4oKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmRhdGVUaW1lUGlja2VyPy5vcGVuKCk7XHJcbiAgICAgIH1cclxuICAgICAgLy9cclxuICAgIH0sIDEwMCk7XHJcbiAgfTtcclxuXHJcbiAgZm9jdXNJbnB1dEVsZW1lbnQoKSB7XHJcbiAgICB0aGlzLmlucHV0Py5uYXRpdmVFbGVtZW50Py5mb2N1cygpO1xyXG4gIH1cclxuXHJcbiAgaXNWYWxpZDogYm9vbGVhbjtcclxuICBvbktleURvd24gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcclxuICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleUNvZGUgfHwgZXZlbnQuY2hhckNvZGU7XHJcbiAgICBsZXQgaXNTaGlmdCA9IGZhbHNlO1xyXG4gICAgaWYgKGtleSA9PT0gMTYpIHtcclxuICAgICAgaXNTaGlmdCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2hvIHBow6lwIGNvcHkgcGFyc2VcclxuICAgIGlmIChldmVudC5jdHJsS2V5ICYmIChrZXkgPT09IDY3IHx8IGtleSA9PT0gODYpKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdhY3Rpb24gY29weSBwYXJzZS4uLiBkYXRlcGlja2VyJyk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEFsbG93IG9ubHkgTnVtZXJpYyBLZXlzLlxyXG4gICAgaWYgKCgoa2V5ID49IDQ4ICYmIGtleSA8PSA1NykgfHwga2V5ID09PSA4IHx8IGtleSA8PSAzNyB8fCBrZXkgPD0gMzkgfHwgKGtleSA+PSA5NiAmJiBrZXkgPD0gMTA1KSB8fCBrZXkgPT09IDE5MSB8fCBrZXkgPT09IDE4NiB8fCBrZXkgPT09IDU5KSAmJiBpc1NoaWZ0ID09PSBmYWxzZSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBvbktleXVwID0gKGV2ZW50KSA9PiB7XHJcbiAgICBjb25zdCBjdXJyZW50VmFsOiBzdHJpbmcgPSBldmVudC50YXJnZXQudmFsdWU7XHJcbiAgICBjb25zdCBmb3JtQ29udHJvbDogQWJzdHJhY3RDb250cm9sID0gdGhpcy5mb3JtQ29udHJvbDtcclxuICAgIGxldCByZWdleCA9IC9eKFsxLTldfChbMDEyXVswLTldKXwoM1swMV0pKVxcLyhbMF17MCwxfVsxLTldfDFbMDEyXSlcXC9cXGRcXGRcXGRcXGQkL2c7XHJcblxyXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gJ2RhdGV0aW1lJyB8fCB0aGlzLnR5cGUgPT09ICd0aW1lJykge1xyXG4gICAgICByZWdleCA9IC9eKFsxLTldfChbMDEyXVswLTldKXwoM1swMV0pKVxcLyhbMF17MCwxfVsxLTldfDFbMDEyXSlcXC9cXGRcXGRcXGRcXGQgWzAxMl17MCwxfVswLTldOlswLTZdWzAtOV0kL2c7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy50eXBlID09PSAnbW9udGgnKSB7XHJcbiAgICAgIHJlZ2V4ID0gL14oWzBdezAsMX1bMS05XXwxWzAxMl0pXFwvXFxkXFxkXFxkXFxkIFswMTJdezAsMX1bMC05XTpbMC02XVswLTldJC9nO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IHRoaXMudHlwZSA9PT0gJ2RhdGUnID8gJ2RkL01NL3l5eXknIDogJ2RkL01NL3l5eXkgSEg6bW0nO1xyXG4gICAgaWYgKGN1cnJlbnRWYWwgJiYgIXJlZ2V4LnRlc3QoY3VycmVudFZhbCkpIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc1ZhbGlkID0gdHJ1ZTtcclxuICAgICAgICBmb3JtQ29udHJvbC5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgICAgIGZvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgICBmb3JtQ29udHJvbC5zZXRFcnJvcnMoey4uLmZvcm1Db250cm9sLmVycm9ycywgZGF0ZTogYENoxrBhIMSRw7puZyDEkeG7i25oIGThuqFuZyAke2Vycm9yTWVzc2FnZX1gfSk7XHJcbiAgICAgIH0sIDApO1xyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaXNWYWxpZCA9IGZhbHNlO1xyXG4gICAgICAgIGZvcm1Db250cm9sLnNldEVycm9ycyh7Li4uZm9ybUNvbnRyb2wuZXJyb3JzLCBkYXRlOiBudWxsfSk7XHJcbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgIH0sIDApO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIG9uQ2hhbmdlID0gKGV2ZW50OiBNYXREYXRlcGlja2VySW5wdXRFdmVudDxNb21lbnQ+KSA9PiB7XHJcbiAgICBjb25zdCB2YWx1ZSA9IGV2ZW50LnZhbHVlPy50b0RhdGUoKTtcclxuICAgIGlmICghdGhpcy5kYXRlVGltZVBpY2tlcikge1xyXG4gICAgICB0aGlzLmlucHV0Py5uYXRpdmVFbGVtZW50Py5mb2N1cygpO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHtcclxuICAgICAgaWYgKG5ldyBEYXRlKHRoaXMuI2RhdGUpICE9PSB2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMubW9kZWxDaGFuZ2UuZW1pdCh2YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5zZENoYW5nZS5lbWl0KHZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pc1ZhbGlkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUobnVsbCk7XHJcbiAgICAgIHRoaXMubW9kZWxDaGFuZ2UuZW1pdChudWxsKTtcclxuICAgICAgdGhpcy5zZENoYW5nZS5lbWl0KG51bGwpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIHRpbWVDaGFuZ2VkID0gKGV2ZW50KSA9PiB7XHJcbiAgICBjb25zdCB2YWx1ZSA9IGV2ZW50O1xyXG4gICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZSh2YWx1ZSk7XHJcbiAgICB0aGlzLm1vZGVsQ2hhbmdlLmVtaXQodmFsdWUpO1xyXG4gICAgdGhpcy5zZENoYW5nZS5lbWl0KHZhbHVlKTtcclxuXHJcbiAgfTtcclxuXHJcbiAgY2xlYXIgPSAoJGV2ZW50OiBhbnkpID0+IHtcclxuICAgICRldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICBpZiAodGhpcy5mb3JtQ29udHJvbC52YWx1ZSkge1xyXG4gICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKG51bGwpO1xyXG4gICAgICB0aGlzLm1vZGVsQ2hhbmdlLmVtaXQobnVsbCk7XHJcbiAgICAgIHRoaXMuc2RDaGFuZ2UuZW1pdChudWxsKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBzZXRNb250aEFuZFllYXIgPSAobm9ybWFsaXplZE1vbnRoQW5kWWVhcjogTW9tZW50LCBkYXRlcGlja2VyOiBNYXREYXRlcGlja2VyPE1vbWVudD4pID0+IHtcclxuICAgIGNvbnN0IGN0cmxWYWx1ZSA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUgfHwgbW9tZW50KCk7XHJcbiAgICBjdHJsVmFsdWUubW9udGgobm9ybWFsaXplZE1vbnRoQW5kWWVhci5tb250aCgpKTtcclxuICAgIGN0cmxWYWx1ZS55ZWFyKG5vcm1hbGl6ZWRNb250aEFuZFllYXIueWVhcigpKTtcclxuICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUoY3RybFZhbHVlKTtcclxuICAgIGRhdGVwaWNrZXIuY2xvc2UoKTtcclxuICAgIHRoaXMubW9kZWxDaGFuZ2UuZW1pdChjdHJsVmFsdWUpO1xyXG4gICAgdGhpcy5zZENoYW5nZS5lbWl0KGN0cmxWYWx1ZSk7XHJcbiAgfTtcclxufVxyXG4iXX0=
|
|
356
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJDOi9Vc2Vycy9uZ2hpYXR0MTVfb25lbW91bnQvRG9jdW1lbnRzL2xpYi1jb3JlLXVpL3Byb2plY3RzL3NkLWNvcmUvZGF0ZS10aW1lLyIsInNvdXJjZXMiOlsic3JjL2xpYi9kYXRlLXRpbWUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsWUFBWSxFQUNaLE1BQU0sRUFHTixpQkFBaUIsRUFFakIsU0FBUyxFQUNULHVCQUF1QixFQUN2QixZQUFZLEVBRVosTUFBTSxFQUNOLFFBQVEsRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLElBQUksTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxNQUFnQixNQUFNLFFBQVEsQ0FBQztBQUN0QyxPQUFPLEVBQTZCLE1BQU0sRUFBZSxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRixPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsYUFBYSxFQUEwQixNQUFNLDhCQUE4QixDQUFDO0FBQ3BGLE9BQU8sRUFBQyxvQkFBb0IsRUFBRSxvQkFBb0IsR0FBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3pHLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3hELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDbEMsT0FBTyxFQUFDLFdBQVcsRUFBc0IsYUFBYSxFQUFFLGtCQUFrQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFFM0csT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFFNUQsTUFBTSx1QkFBdUIsR0FBRztJQUM5QixLQUFLLEVBQUU7UUFDTCxTQUFTLEVBQUUsa0JBQWtC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QyxTQUFTLFNBQUMsT0FBTzt5QkFDakIsU0FBUyxTQUFDLGFBQWE7NkJBQ3ZCLFNBQVMsU0FBQyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBJbnB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgT3V0cHV0LFxyXG4gIE9uRGVzdHJveSxcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIE9uSW5pdCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ29udGVudENoaWxkLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSW5qZWN0LFxyXG4gIE9wdGlvbmFsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCAqIGFzIHV1aWQgZnJvbSAndXVpZCc7XHJcbmltcG9ydCBoYXNoIGZyb20gJ29iamVjdC1oYXNoJztcclxuaW1wb3J0IG1vbWVudCwge01vbWVudH0gZnJvbSAnbW9tZW50JztcclxuaW1wb3J0IHtBYnN0cmFjdENvbnRyb2wsIEZvcm1Hcm91cCwgTmdGb3JtLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9yc30gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge0RldmljZURldGVjdG9yU2VydmljZX0gZnJvbSAnbmd4LWRldmljZS1kZXRlY3Rvcic7XHJcbmltcG9ydCB7TWF0RGF0ZXBpY2tlciwgTWF0RGF0ZXBpY2tlcklucHV0RXZlbnR9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xyXG5pbXBvcnQge05neE1hdERhdGV0aW1lUGlja2VyLCBOR1hfTUFUX0RBVEVfRk9STUFUUyx9IGZyb20gJ0Bhbmd1bGFyLW1hdGVyaWFsLWNvbXBvbmVudHMvZGF0ZXRpbWUtcGlja2VyJztcclxuaW1wb3J0IHtNQVRfREFURV9GT1JNQVRTfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcclxuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge0ZPUk1fQ09ORklHLCBJRm9ybUNvbmZpZ3VyYXRpb24sIFNkRm9ybUNvbnRyb2wsIFNkVmlld0RlZkRpcmVjdGl2ZX0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS9jb21tb24nO1xyXG5pbXBvcnQge01hdEZvcm1GaWVsZEFwcGVhcmFuY2V9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xyXG5pbXBvcnQge1NkTGFiZWxEZWZEaXJlY3RpdmV9IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvY29tbW9uJztcclxuXHJcbmNvbnN0IENVU1RPTV9EQVRFVElNRV9GT1JNQVRTID0ge1xyXG4gIHBhcnNlOiB7XHJcbiAgICBkYXRlSW5wdXQ6ICdERC9NTS9ZWVlZIEhIOm1tJ1xyXG4gIH0sXHJcbiAgZGlzcGxheToge1xyXG4gICAgZGF0ZUlucHV0OiAnREQvTU0vWVlZWSBISDptbScsXHJcbiAgICBtb250aFllYXJMYWJlbDogJ01NTSBZWVlZJyxcclxuICAgIGRhdGVBMTF5TGFiZWw6ICdMTCcsXHJcbiAgICBtb250aFllYXJBMTF5TGFiZWw6ICdNTU1NIFlZWVknXHJcbiAgfVxyXG59O1xyXG5jb25zdCBDVVNUT01fREFURV9GT1JNQVRTID0ge1xyXG4gIHBhcnNlOiB7XHJcbiAgICBkYXRlSW5wdXQ6ICdERC9NTS9ZWVlZJ1xyXG4gIH0sXHJcbiAgZGlzcGxheToge1xyXG4gICAgZGF0ZUlucHV0OiAnREQvTU0vWVlZWScsXHJcbiAgICBtb250aFllYXJMYWJlbDogJ01NTSBZWVlZJyxcclxuICAgIGRhdGVBMTF5TGFiZWw6ICdMTCcsXHJcbiAgICBtb250aFllYXJBMTF5TGFiZWw6ICdNTU1NIFlZWVknXHJcbiAgfVxyXG59O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzZC1kYXRlLXRpbWUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRlLXRpbWUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2RhdGUtdGltZS5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge3Byb3ZpZGU6IE1BVF9EQVRFX0ZPUk1BVFMsIHVzZVZhbHVlOiBDVVNUT01fREFURV9GT1JNQVRTfSxcclxuICAgIHtwcm92aWRlOiBOR1hfTUFUX0RBVEVfRk9STUFUUywgdXNlVmFsdWU6IENVU1RPTV9EQVRFVElNRV9GT1JNQVRTfVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFNkRGF0ZVRpbWUgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgaWQgPSBgSSR7dXVpZC52NCgpfWA7XHJcbiAgaXNNb2JpbGVPclRhYmxldCA9IGZhbHNlO1xyXG4gICNkYXRlOiBhbnk7XHJcbiAgI25hbWUgPSB1dWlkLnY0KCk7XHJcbiAgQElucHV0KCkgc2V0IG5hbWUodmFsOiBzdHJpbmcpIHtcclxuICAgIGlmICh2YWwpIHtcclxuICAgICAgdGhpcy4jbmFtZSA9IHZhbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIGFwcGVhcmFuY2U6IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2U7XHJcbiAgZGlzYWJsZUVycm9yTWVzc2FnZSA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoJ2Rpc2FibGVFcnJvck1lc3NhZ2UnKSBzZXQgX2Rpc2FibGVFcnJvck1lc3NhZ2UodmFsOiBib29sZWFuIHwgJycpIHtcclxuICAgIHRoaXMuZGlzYWJsZUVycm9yTWVzc2FnZSA9ICh2YWwgPT09ICcnKSB8fCB2YWw7XHJcbiAgICB2YWwgPSAodmFsID09PSAnJykgfHwgdmFsO1xyXG4gIH1cclxuXHJcbiAgZm9ybUNvbnRyb2wgPSBuZXcgU2RGb3JtQ29udHJvbCgpO1xyXG4gIG1pbjogRGF0ZTtcclxuXHJcbiAgQElucHV0KCdtaW4nKSBzZXQgX21pbih2YWw6IHN0cmluZyB8IERhdGUgfCBudW1iZXIpIHtcclxuICAgIGlmIChEYXRlLmlzRGF0ZSh2YWwpKSB7XHJcbiAgICAgIHRoaXMubWluID0gbmV3IERhdGUodmFsKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubWluID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1heDogRGF0ZTtcclxuXHJcbiAgQElucHV0KCdtYXgnKSBzZXQgX21heCh2YWw6IHN0cmluZyB8IERhdGUgfCBudW1iZXIpIHtcclxuICAgIGlmIChEYXRlLmlzRGF0ZSh2YWwpKSB7XHJcbiAgICAgIHRoaXMubWF4ID0gbmV3IERhdGUodmFsKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubWF4ID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHNpemU6ICdzbScgfCAnbGcnO1xyXG4gICNmb3JtOiBGb3JtR3JvdXA7XHJcbiAgQElucHV0KCkgc2V0IGZvcm0odmFsOiBOZ0Zvcm0gfCBGb3JtR3JvdXApIHtcclxuICAgIGlmICh2YWwpIHtcclxuICAgICAgaWYgKHZhbCBpbnN0YW5jZW9mIE5nRm9ybSkge1xyXG4gICAgICAgIHRoaXMuI2Zvcm0gPSB2YWwuZm9ybTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLiNmb3JtID0gdmFsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtYXhsZW5ndGg6IG51bWJlcjtcclxuICB0eXBlOiAnZGF0ZXRpbWUnIHwgJ2RhdGUnIHwgJ3RpbWUnIHwgJ21vbnRoJyA9ICdkYXRldGltZSc7XHJcblxyXG4gIEBJbnB1dCgndHlwZScpIHNldCBfdHlwZSh2YWw6ICdkYXRldGltZScgfCAnZGF0ZScgfCAndGltZScgfCAnbW9udGgnKSB7XHJcbiAgICB0aGlzLnR5cGUgPSB2YWwgfHwgJ2RhdGV0aW1lJztcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHNldCBkaXNhYmxlZCh2YWw6IGJvb2xlYW4gfCAnJykge1xyXG4gICAgdmFsID0gKHZhbCA9PT0gJycpIHx8IHZhbDtcclxuICAgIGlmICh2YWwpIHtcclxuICAgICAgdGhpcy5mb3JtQ29udHJvbC5kaXNhYmxlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZvcm1Db250cm9sLmVuYWJsZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVxdWlyZWQgPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCdyZXF1aXJlZCcpIHNldCBfcmVxdWlyZWQodmFsOiBib29sZWFuIHwgJycpIHtcclxuICAgIHRoaXMucmVxdWlyZWQgPSAodmFsID09PSAnJykgfHwgdmFsO1xyXG4gICAgaWYgKHRoaXMucmVxdWlyZWQpIHtcclxuICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZvcm1Db250cm9sLmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5saW5lRXJyb3I6IHN0cmluZztcclxuXHJcbiAgQElucHV0KCdpbmxpbmVFcnJvcicpIHNldCBfaW5saW5lRXJyb3IodmFsOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuaW5saW5lRXJyb3IgPSB2YWw7XHJcbiAgICAvLyB0aGlzLiN1cGRhdGVWYWxpZGF0b3IoKTtcclxuICAgIGlmICh0aGlzLmlubGluZUVycm9yKSB7XHJcblxyXG5cclxuICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWxpZGF0b3JzKFt0aGlzLmN1c3RvbUlubGluZUVycm9yVmFsaWRhdG9yKCldKTtcclxuICAgICAgdGhpcy5mb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcblxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5mb3JtQ29udHJvbC5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgdGhpcy5mb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHFjSWQ6IHN0cmluZztcclxuICBsYWJlbDogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoJ2xhYmVsJykgc2V0IF9sYWJlbCh2YWw6IHN0cmluZykge1xyXG4gICAgdGhpcy5sYWJlbCA9IHZhbDtcclxuICAgIHRoaXMucWNJZCA9IGhhc2goe1xyXG4gICAgICBzZWxlY3RvcjogJ3NkLWRhdGUtdGltZScsXHJcbiAgICAgIGxhYmVsOiB2YWxcclxuICAgIH0pO1xyXG4gIH07XHJcblxyXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZGVmYXVsdFRpbWU6IGFueTtcclxuXHJcbiAgQElucHV0KCkgc2V0IG1pbkRhdGUodmFsOiBzdHJpbmcgfCBEYXRlKSB7XHJcbiAgICBpZiAoRGF0ZS5pc0RhdGUodmFsKSkge1xyXG4gICAgICB0aGlzLm1pbiA9IG5ldyBEYXRlKHZhbCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm1pbiA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSBzZXQgbWF4RGF0ZSh2YWw6IHN0cmluZyB8IERhdGUpIHtcclxuICAgIGlmIChEYXRlLmlzRGF0ZSh2YWwpKSB7XHJcbiAgICAgIHRoaXMubWF4ID0gbmV3IERhdGUodmFsKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubWF4ID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHZhbGlkYXRvcjogKHZhbHVlOiBhbnkpID0+IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPjtcclxuICBAT3V0cHV0KCkgc2RDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHNkRm9jdXMgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgQElucHV0KCkgc2V0IG1vZGVsKHZhbDogYW55KSB7XHJcbiAgICBpZiAoIURhdGUuaXNEYXRlKHZhbCkpIHtcclxuICAgICAgdmFsID0gbnVsbDtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLiNkYXRlICE9PSB2YWwpIHtcclxuICAgICAgdGhpcy4jZGF0ZSA9IHZhbDtcclxuICAgICAgY29uc3QgZGF0ZSA9IERhdGUuaXNEYXRlKHRoaXMuI2RhdGUpID8gbW9tZW50KERhdGUudG9Gb3JtYXQodGhpcy4jZGF0ZSwgJ01NL2RkL3l5eXkgSEg6bW06c3MnKSwgJ01NL0REL1lZWVkgSEg6bW06c3MnKSA6IG51bGw7XHJcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUoZGF0ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAT3V0cHV0KCkgbW9kZWxDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgI3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuICBAQ29udGVudENoaWxkKFNkVmlld0RlZkRpcmVjdGl2ZSkgc2RWaWV3OiBTZFZpZXdEZWZEaXJlY3RpdmU7XHJcbiAgQENvbnRlbnRDaGlsZChTZExhYmVsRGVmRGlyZWN0aXZlKSBzZExhYmVsRGVmOiBTZExhYmVsRGVmRGlyZWN0aXZlO1xyXG4gIEBWaWV3Q2hpbGQoJ2lucHV0JykgaW5wdXQ6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZChNYXREYXRlcGlja2VyKSBkYXRlUGlja2VyOiBNYXREYXRlcGlja2VyPE1vbWVudD47XHJcbiAgQFZpZXdDaGlsZChOZ3hNYXREYXRldGltZVBpY2tlcikgZGF0ZVRpbWVQaWNrZXI6IE5neE1hdERhdGV0aW1lUGlja2VyPE1vbWVudD47XHJcbiAgaXNGb2N1c2VkID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgZGV2aWNlU2VydmljZTogRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLFxyXG4gICAgQEluamVjdChGT1JNX0NPTkZJRykgQE9wdGlvbmFsKCkgcHJpdmF0ZSBmb3JtQ29uZmlnOiBJRm9ybUNvbmZpZ3VyYXRpb24pIHtcclxuICAgIHRoaXMuaXNNb2JpbGVPclRhYmxldCA9ICFkZXZpY2VTZXJ2aWNlLmlzRGVza3RvcCgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLiNmb3JtPy5yZW1vdmVDb250cm9sKHRoaXMuI25hbWUpO1xyXG4gICAgdGhpcy4jc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMubWF4bGVuZ3RoID0gdGhpcy50eXBlID09PSAnZGF0ZXRpbWUnID8gMTYgOiAxMDtcclxuICAgIHRoaXMuYXBwZWFyYW5jZSA9IHRoaXMuYXBwZWFyYW5jZSB8fCB0aGlzLmZvcm1Db25maWc/LmFwcGVhcmFuY2U7XHJcbiAgICB0aGlzLiNzdWJzY3JpcHRpb24uYWRkKHRoaXMuZm9ybUNvbnRyb2wuc2RDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIC8vIHRoaXMuZm9ybUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH0pKTtcclxuICAgIHRoaXMuI2Zvcm0/LmFkZENvbnRyb2wodGhpcy4jbmFtZSwgdGhpcy5mb3JtQ29udHJvbCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gSMOgbSB04bqhbyBWYWxpZGF0b3JzIHTDuXkgY2jhu4luaCBjaG8gaW5saW5lRXJyb3JcclxuICBjdXN0b21JbmxpbmVFcnJvclZhbGlkYXRvcigpOiBWYWxpZGF0b3JGbiB7XHJcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCBudWxsID0+IHtcclxuICAgICAgcmV0dXJuIHtpbmxpbmVFcnJvcjogdHJ1ZX07XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gIH1cclxuXHJcbiAgb25Gb2N1cyA9ICgpID0+IHtcclxuICAgIHRoaXMuaXNGb2N1c2VkID0gdHJ1ZTtcclxuICAgIHRoaXMuc2RGb2N1cy5lbWl0KCk7XHJcbiAgfTtcclxuXHJcbiAgb25CbHVyID0gKCkgPT4ge1xyXG4gICAgdGhpcy5pc0ZvY3VzZWQgPSBmYWxzZTtcclxuICB9O1xyXG5cclxuICBvbkNsaWNrID0gKCkgPT4ge1xyXG4gICAgaWYgKHRoaXMuc2RWaWV3Py50ZW1wbGF0ZVJlZikge1xyXG4gICAgICBpZiAoIXRoaXMuZm9ybUNvbnRyb2wuZGlzYWJsZWQgJiYgIXRoaXMuaXNGb2N1c2VkKSB7XHJcbiAgICAgICAgdGhpcy5mb2N1cygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgYmx1ciA9ICgpID0+IHtcclxuICAgIHRoaXMuaW5wdXQ/Lm5hdGl2ZUVsZW1lbnQ/LmJsdXIoKTtcclxuICB9O1xyXG5cclxuICBmb2N1cyA9ICgpID0+IHtcclxuICAgIHRoaXMuaXNGb2N1c2VkID0gdHJ1ZTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmlucHV0Py5uYXRpdmVFbGVtZW50Py5mb2N1cygpO1xyXG4gICAgICBpZiAodGhpcy50eXBlID09PSAnZGF0ZScpIHtcclxuICAgICAgICB0aGlzLmRhdGVQaWNrZXI/Lm9wZW4oKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmRhdGVUaW1lUGlja2VyPy5vcGVuKCk7XHJcbiAgICAgIH1cclxuICAgICAgLy9cclxuICAgIH0sIDEwMCk7XHJcbiAgfTtcclxuXHJcbiAgZm9jdXNJbnB1dEVsZW1lbnQoKSB7XHJcbiAgICB0aGlzLmlucHV0Py5uYXRpdmVFbGVtZW50Py5mb2N1cygpO1xyXG4gIH1cclxuXHJcbiAgaXNWYWxpZDogYm9vbGVhbjtcclxuICBvbktleURvd24gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcclxuICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleUNvZGUgfHwgZXZlbnQuY2hhckNvZGU7XHJcbiAgICBsZXQgaXNTaGlmdCA9IGZhbHNlO1xyXG4gICAgaWYgKGtleSA9PT0gMTYpIHtcclxuICAgICAgaXNTaGlmdCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2hvIHBow6lwIGNvcHkgcGFyc2VcclxuICAgIGlmIChldmVudC5jdHJsS2V5ICYmIChrZXkgPT09IDY3IHx8IGtleSA9PT0gODYpKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdhY3Rpb24gY29weSBwYXJzZS4uLiBkYXRlcGlja2VyJyk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEFsbG93IG9ubHkgTnVtZXJpYyBLZXlzLlxyXG4gICAgaWYgKCgoa2V5ID49IDQ4ICYmIGtleSA8PSA1NykgfHwga2V5ID09PSA4IHx8IGtleSA8PSAzNyB8fCBrZXkgPD0gMzkgfHwgKGtleSA+PSA5NiAmJiBrZXkgPD0gMTA1KSB8fCBrZXkgPT09IDE5MSB8fCBrZXkgPT09IDE4NiB8fCBrZXkgPT09IDU5KSAmJiBpc1NoaWZ0ID09PSBmYWxzZSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBvbktleXVwID0gKGV2ZW50KSA9PiB7XHJcbiAgICBjb25zdCBjdXJyZW50VmFsOiBzdHJpbmcgPSBldmVudC50YXJnZXQudmFsdWU7XHJcbiAgICBjb25zdCBmb3JtQ29udHJvbDogQWJzdHJhY3RDb250cm9sID0gdGhpcy5mb3JtQ29udHJvbDtcclxuICAgIGxldCByZWdleCA9IC9eKFsxLTldfChbMDEyXVswLTldKXwoM1swMV0pKVxcLyhbMF17MCwxfVsxLTldfDFbMDEyXSlcXC9cXGRcXGRcXGRcXGQkL2c7XHJcblxyXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gJ2RhdGV0aW1lJyB8fCB0aGlzLnR5cGUgPT09ICd0aW1lJykge1xyXG4gICAgICByZWdleCA9IC9eKFsxLTldfChbMDEyXVswLTldKXwoM1swMV0pKVxcLyhbMF17MCwxfVsxLTldfDFbMDEyXSlcXC9cXGRcXGRcXGRcXGQgWzAxMl17MCwxfVswLTldOlswLTZdWzAtOV0kL2c7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy50eXBlID09PSAnbW9udGgnKSB7XHJcbiAgICAgIHJlZ2V4ID0gL14oWzBdezAsMX1bMS05XXwxWzAxMl0pXFwvXFxkXFxkXFxkXFxkIFswMTJdezAsMX1bMC05XTpbMC02XVswLTldJC9nO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IHRoaXMudHlwZSA9PT0gJ2RhdGUnID8gJ2RkL01NL3l5eXknIDogJ2RkL01NL3l5eXkgSEg6bW0nO1xyXG4gICAgaWYgKGN1cnJlbnRWYWwgJiYgIXJlZ2V4LnRlc3QoY3VycmVudFZhbCkpIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc1ZhbGlkID0gdHJ1ZTtcclxuICAgICAgICBmb3JtQ29udHJvbC5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgICAgIGZvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgICBmb3JtQ29udHJvbC5zZXRFcnJvcnMoey4uLmZvcm1Db250cm9sLmVycm9ycywgZGF0ZTogYENoxrBhIMSRw7puZyDEkeG7i25oIGThuqFuZyAke2Vycm9yTWVzc2FnZX1gfSk7XHJcbiAgICAgIH0sIDApO1xyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaXNWYWxpZCA9IGZhbHNlO1xyXG4gICAgICAgIGZvcm1Db250cm9sLnNldEVycm9ycyh7Li4uZm9ybUNvbnRyb2wuZXJyb3JzLCBkYXRlOiBudWxsfSk7XHJcbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgIH0sIDApO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIG9uQ2hhbmdlID0gKGV2ZW50OiBNYXREYXRlcGlja2VySW5wdXRFdmVudDxNb21lbnQ+KSA9PiB7XHJcbiAgICBjb25zdCB2YWx1ZSA9IGV2ZW50LnZhbHVlPy50b0RhdGUoKTtcclxuICAgIGlmICghdGhpcy5kYXRlVGltZVBpY2tlcikge1xyXG4gICAgICB0aGlzLmlucHV0Py5uYXRpdmVFbGVtZW50Py5mb2N1cygpO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHtcclxuICAgICAgaWYgKG5ldyBEYXRlKHRoaXMuI2RhdGUpICE9PSB2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMubW9kZWxDaGFuZ2UuZW1pdCh2YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5zZENoYW5nZS5lbWl0KHZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pc1ZhbGlkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUobnVsbCk7XHJcbiAgICAgIHRoaXMubW9kZWxDaGFuZ2UuZW1pdChudWxsKTtcclxuICAgICAgdGhpcy5zZENoYW5nZS5lbWl0KG51bGwpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIHRpbWVDaGFuZ2VkID0gKGV2ZW50KSA9PiB7XHJcbiAgICBjb25zdCB2YWx1ZSA9IGV2ZW50O1xyXG4gICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZSh2YWx1ZSk7XHJcbiAgICB0aGlzLm1vZGVsQ2hhbmdlLmVtaXQodmFsdWUpO1xyXG4gICAgdGhpcy5zZENoYW5nZS5lbWl0KHZhbHVlKTtcclxuXHJcbiAgfTtcclxuXHJcbiAgY2xlYXIgPSAoJGV2ZW50OiBhbnkpID0+IHtcclxuICAgICRldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICBpZiAodGhpcy5mb3JtQ29udHJvbC52YWx1ZSkge1xyXG4gICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKG51bGwpO1xyXG4gICAgICB0aGlzLm1vZGVsQ2hhbmdlLmVtaXQobnVsbCk7XHJcbiAgICAgIHRoaXMuc2RDaGFuZ2UuZW1pdChudWxsKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBzZXRNb250aEFuZFllYXIgPSAobm9ybWFsaXplZE1vbnRoQW5kWWVhcjogTW9tZW50LCBkYXRlcGlja2VyOiBNYXREYXRlcGlja2VyPE1vbWVudD4pID0+IHtcclxuICAgIGNvbnN0IGN0cmxWYWx1ZSA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUgfHwgbW9tZW50KCk7XHJcbiAgICBjdHJsVmFsdWUubW9udGgobm9ybWFsaXplZE1vbnRoQW5kWWVhci5tb250aCgpKTtcclxuICAgIGN0cmxWYWx1ZS55ZWFyKG5vcm1hbGl6ZWRNb250aEFuZFllYXIueWVhcigpKTtcclxuICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUoY3RybFZhbHVlKTtcclxuICAgIGRhdGVwaWNrZXIuY2xvc2UoKTtcclxuICAgIHRoaXMubW9kZWxDaGFuZ2UuZW1pdChjdHJsVmFsdWUpO1xyXG4gICAgdGhpcy5zZENoYW5nZS5lbWl0KGN0cmxWYWx1ZSk7XHJcbiAgfTtcclxufVxyXG4iXX0=
|
|
@@ -1,19 +1,18 @@
|
|
|
1
|
-
import { NgModule } from '@angular/core';
|
|
2
|
-
import { CommonModule } from '@angular/common';
|
|
3
|
-
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
4
|
-
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
5
|
-
import { MatDatepickerModule } from '@angular/material/datepicker';
|
|
6
1
|
import { NgxMatDatetimePickerModule, NgxMatTimepickerModule } from '@angular-material-components/datetime-picker';
|
|
7
|
-
import { SdDateTime } from './date-time.component';
|
|
8
|
-
import { SdTranslateModule } from '@sd-angular/core/translate';
|
|
9
|
-
import { MatInputModule } from '@angular/material/input';
|
|
10
2
|
import { NgxMatMomentModule } from '@angular-material-components/moment-adapter';
|
|
3
|
+
import { CommonModule } from '@angular/common';
|
|
4
|
+
import { NgModule } from '@angular/core';
|
|
5
|
+
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
11
6
|
import { MatMomentDateModule } from '@angular/material-moment-adapter';
|
|
7
|
+
import { MatDatepickerModule } from '@angular/material/datepicker';
|
|
8
|
+
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
12
9
|
import { MatIconModule } from '@angular/material/icon';
|
|
10
|
+
import { MatInputModule } from '@angular/material/input';
|
|
11
|
+
import { SdButtonModule } from "@sd-angular/core/button";
|
|
13
12
|
import { SdCommonModule } from '@sd-angular/core/common';
|
|
14
|
-
import {
|
|
13
|
+
import { SdTranslateModule } from '@sd-angular/core/translate';
|
|
15
14
|
import { NgxMaterialTimepickerModule } from 'ngx-material-timepicker';
|
|
16
|
-
import {
|
|
15
|
+
import { SdDateTime } from './date-time.component';
|
|
17
16
|
export class SdDateTimeModule {
|
|
18
17
|
}
|
|
19
18
|
SdDateTimeModule.decorators = [
|
|
@@ -32,7 +31,6 @@ SdDateTimeModule.decorators = [
|
|
|
32
31
|
NgxMatMomentModule,
|
|
33
32
|
SdTranslateModule,
|
|
34
33
|
SdCommonModule,
|
|
35
|
-
SdPopoverModule,
|
|
36
34
|
NgxMaterialTimepickerModule,
|
|
37
35
|
SdButtonModule
|
|
38
36
|
],
|
|
@@ -46,4 +44,4 @@ SdDateTimeModule.decorators = [
|
|
|
46
44
|
providers: []
|
|
47
45
|
},] }
|
|
48
46
|
];
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiJDOi9Vc2Vycy9uZ2hpYXR0MTVfb25lbW91bnQvRG9jdW1lbnRzL2xpYi1jb3JlLXVpL3Byb2plY3RzL3NkLWNvcmUvZGF0ZS10aW1lLyIsInNvdXJjZXMiOlsic3JjL2xpYi9kYXRlLXRpbWUubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCwwQkFBMEIsRUFDMUIsc0JBQXNCLEVBQ3ZCLE1BQU0sOENBQThDLENBQUM7QUFDdEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDakYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUE4Qm5ELE1BQU0sT0FBTyxnQkFBZ0I7OztZQTVCNUIsUUFBUSxTQUFDO2dCQUNSLE9BQU8sRUFBRTtvQkFDUCxZQUFZO29CQUNaLFdBQVc7b0JBQ1gsbUJBQW1CO29CQUNuQixjQUFjO29CQUNkLGFBQWE7b0JBQ2Isa0JBQWtCO29CQUNsQixtQkFBbUI7b0JBQ25CLG1CQUFtQjtvQkFDbkIsMEJBQTBCO29CQUMxQixzQkFBc0I7b0JBQ3RCLGtCQUFrQjtvQkFDbEIsaUJBQWlCO29CQUNqQixjQUFjO29CQUNkLDJCQUEyQjtvQkFDM0IsY0FBYztpQkFDZjtnQkFDRCxZQUFZLEVBQUU7b0JBQ1osVUFBVTtpQkFDWDtnQkFDRCxPQUFPLEVBQUU7b0JBQ1AsY0FBYztvQkFDZCxVQUFVO2lCQUNYO2dCQUNELFNBQVMsRUFBRSxFQUNWO2FBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIE5neE1hdERhdGV0aW1lUGlja2VyTW9kdWxlLFxyXG4gIE5neE1hdFRpbWVwaWNrZXJNb2R1bGVcclxufSBmcm9tICdAYW5ndWxhci1tYXRlcmlhbC1jb21wb25lbnRzL2RhdGV0aW1lLXBpY2tlcic7XHJcbmltcG9ydCB7IE5neE1hdE1vbWVudE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyLW1hdGVyaWFsLWNvbXBvbmVudHMvbW9tZW50LWFkYXB0ZXInO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0TW9tZW50RGF0ZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsLW1vbWVudC1hZGFwdGVyJztcclxuaW1wb3J0IHsgTWF0RGF0ZXBpY2tlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcclxuaW1wb3J0IHsgU2RCdXR0b25Nb2R1bGUgfSBmcm9tIFwiQHNkLWFuZ3VsYXIvY29yZS9idXR0b25cIjtcclxuaW1wb3J0IHsgU2RDb21tb25Nb2R1bGUgfSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL2NvbW1vbic7XHJcbmltcG9ydCB7IFNkVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS90cmFuc2xhdGUnO1xyXG5pbXBvcnQgeyBOZ3hNYXRlcmlhbFRpbWVwaWNrZXJNb2R1bGUgfSBmcm9tICduZ3gtbWF0ZXJpYWwtdGltZXBpY2tlcic7XHJcbmltcG9ydCB7IFNkRGF0ZVRpbWUgfSBmcm9tICcuL2RhdGUtdGltZS5jb21wb25lbnQnO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgICBNYXRJbnB1dE1vZHVsZSxcclxuICAgIE1hdEljb25Nb2R1bGUsXHJcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXHJcbiAgICBNYXREYXRlcGlja2VyTW9kdWxlLFxyXG4gICAgTWF0TW9tZW50RGF0ZU1vZHVsZSxcclxuICAgIE5neE1hdERhdGV0aW1lUGlja2VyTW9kdWxlLFxyXG4gICAgTmd4TWF0VGltZXBpY2tlck1vZHVsZSxcclxuICAgIE5neE1hdE1vbWVudE1vZHVsZSxcclxuICAgIFNkVHJhbnNsYXRlTW9kdWxlLFxyXG4gICAgU2RDb21tb25Nb2R1bGUsXHJcbiAgICBOZ3hNYXRlcmlhbFRpbWVwaWNrZXJNb2R1bGUsXHJcbiAgICBTZEJ1dHRvbk1vZHVsZVxyXG4gIF0sXHJcbiAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICBTZERhdGVUaW1lXHJcbiAgXSxcclxuICBleHBvcnRzOiBbXHJcbiAgICBTZENvbW1vbk1vZHVsZSxcclxuICAgIFNkRGF0ZVRpbWVcclxuICBdLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFNkRGF0ZVRpbWVNb2R1bGUge1xyXG5cclxufVxyXG4iXX0=
|
|
@@ -355,6 +355,9 @@ export class SdExportService {
|
|
|
355
355
|
else {
|
|
356
356
|
firstSheet.getCell(fromRow + idx1, 1 + idx2).value = e[column.field];
|
|
357
357
|
firstSheet.getCell(fromRow + idx1, 1 + idx2).numFmt = column.numFmt;
|
|
358
|
+
if (column.numFmt) {
|
|
359
|
+
console.log(column);
|
|
360
|
+
}
|
|
358
361
|
}
|
|
359
362
|
firstSheet.getCell(fromRow + idx1, 1 + idx2).style = __classPrivateFieldGet(this, _cellStyle);
|
|
360
363
|
});
|
|
@@ -492,4 +495,4 @@ SdExportService.ctorParameters = () => [
|
|
|
492
495
|
{ type: SdNotifyService },
|
|
493
496
|
{ type: undefined, decorators: [{ type: Inject, args: [FIREBASE_CONFIG,] }, { type: Optional }] }
|
|
494
497
|
];
|
|
495
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiQzovVXNlcnMvbmdoaWF0dDE1X29uZW1vdW50L0RvY3VtZW50cy9saWItY29yZS11aS9wcm9qZWN0cy9zZC1jb3JlL2V4cG9ydC8iLCJzb3VyY2VzIjpbInNyYy9saWIvZXhwb3J0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLElBQUksTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsUUFBUSxFQUFTLE1BQU0sU0FBUyxDQUFDO0FBQzFDLE9BQU8sRUFBb0MsR0FBRyxFQUFzQyxNQUFNLGdCQUFnQixDQUFDO0FBQzNHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUEwQixNQUFNLHlCQUF5QixDQUFDOzs7OztBQUtsRixNQUFNLE9BQU8sZUFBZTtJQStIMUIsWUFDVSxVQUF3QixFQUN4QixhQUE4QixFQUNPLHFCQUE2QztRQUZsRixlQUFVLEdBQVYsVUFBVSxDQUFjO1FBQ3hCLGtCQUFhLEdBQWIsYUFBYSxDQUFpQjtRQUNPLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBd0I7UUE3RzVGLHNCQUE4QjtZQUM1QixNQUFNLEVBQUU7Z0JBQ04sTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTtnQkFDekIsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTtnQkFDdkIsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTthQUN6QjtZQUNELFNBQVMsRUFBRTtnQkFDVCxRQUFRLEVBQUUsUUFBUTtnQkFDbEIsVUFBVSxFQUFFLFFBQVE7Z0JBQ3BCLFFBQVEsRUFBRSxJQUFJO2FBQ2Y7WUFDRCxJQUFJLEVBQUU7Z0JBQ0osSUFBSSxFQUFFLElBQUk7Z0JBQ1YsSUFBSSxFQUFFLEVBQUU7Z0JBQ1IsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTthQUMxQjtZQUNELElBQUksRUFBRTtnQkFDSixJQUFJLEVBQUUsU0FBUztnQkFDZixPQUFPLEVBQUUsT0FBTztnQkFDaEIsT0FBTyxFQUFFO29CQUNQLElBQUksRUFBRSxRQUFRO2lCQUNmO2FBQ0Y7U0FDRixFQUFDO1FBQ0Ysc0JBQWMsUUFBUSxFQUFDO1FBQ3ZCLHdCQUFnQixRQUFRLEVBQUM7UUFDekIsc0JBQThCO1lBQzVCLE1BQU0sRUFBRTtnQkFDTixNQUFNLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO2dCQUN6QixJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO2dCQUN2QixLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO2FBQ3pCO1lBQ0QsU0FBUyxFQUFFO2dCQUNULFFBQVEsRUFBRSxRQUFRO2dCQUNsQixVQUFVLEVBQUUsUUFBUTtnQkFDcEIsUUFBUSxFQUFFLElBQUk7YUFDZjtZQUNELElBQUksRUFBRTtnQkFDSixJQUFJLEVBQUUsSUFBSTtnQkFDVixJQUFJLEVBQUUsRUFBRTtnQkFDUixLQUFLLEVBQUUsRUFBRSxJQUFJLDJDQUFrQixFQUFFO2FBQ2xDO1lBQ0QsSUFBSSxFQUFFO2dCQUNKLElBQUksRUFBRSxTQUFTO2dCQUNmLE9BQU8sRUFBRSxPQUFPO2dCQUNoQixPQUFPLEVBQUU7b0JBQ1AsSUFBSSw2Q0FBb0I7aUJBQ3pCO2FBQ0Y7U0FDRixFQUFDO1FBRUYseUJBQWlDO1lBQy9CLE1BQU0sRUFBRTtnQkFDTixNQUFNLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO2dCQUN6QixJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO2dCQUN2QixLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO2FBQ3pCO1lBQ0QsU0FBUyxFQUFFO2dCQUNULFFBQVEsRUFBRSxRQUFRO2dCQUNsQixVQUFVLEVBQUUsUUFBUTtnQkFDcEIsUUFBUSxFQUFFLElBQUk7YUFDZjtZQUNELElBQUksRUFBRTtnQkFDSixNQUFNLEVBQUUsSUFBSTtnQkFDWixJQUFJLEVBQUUsRUFBRTtnQkFDUixLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO2FBQzFCO1lBQ0QsSUFBSSxFQUFFO2dCQUNKLElBQUksRUFBRSxTQUFTO2dCQUNmLE9BQU8sRUFBRSxPQUFPO2dCQUNoQixPQUFPLEVBQUU7b0JBQ1AsSUFBSSxFQUFFLFFBQVE7aUJBQ2Y7YUFDRjtTQUNGLEVBQUM7UUFFRiw0QkFBb0M7WUFDbEMsTUFBTSxFQUFFO2dCQUNOLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7Z0JBQ3pCLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7Z0JBQ3ZCLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7YUFDekI7WUFDRCxTQUFTLEVBQUU7Z0JBQ1QsUUFBUSxFQUFFLElBQUk7YUFDZjtZQUNELElBQUksRUFBRTtnQkFDSixNQUFNLEVBQUUsSUFBSTtnQkFDWixJQUFJLEVBQUUsQ0FBQztnQkFDUCxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO2FBQzFCO1lBQ0QsSUFBSSxFQUFFO2dCQUNKLElBQUksRUFBRSxTQUFTO2dCQUNmLE9BQU8sRUFBRSxPQUFPO2dCQUNoQixPQUFPLEVBQUU7b0JBQ1AsSUFBSSxFQUFFLFFBQVE7aUJBQ2Y7YUFDRjtTQUNGLEVBQUM7UUFFRixxQkFBNkI7WUFDM0IsU0FBUyxFQUFFO2dCQUNULFFBQVEsRUFBRSxRQUFRO2dCQUNsQixRQUFRLEVBQUUsSUFBSTthQUNmO1NBQ0YsRUFBQztRQVFGLHFCQUFhLENBQUMsR0FBVyxFQUFFLEtBQWEsRUFBRSxFQUFFO1lBQzFDLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQztnQkFDdEIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO2dCQUNuQixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7YUFDNUIsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDVixPQUFPLFFBQVEsSUFBSSxDQUFDLE1BQU0sV0FBVyxZQUFZLFNBQVMsR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDO2FBQ3ZFO1lBQ0QsWUFBWSxHQUFHLElBQUksQ0FBQztnQkFDbEIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO2dCQUNuQixLQUFLO2FBQ04sQ0FBQyxDQUFDO1lBQ0gsT0FBTyxRQUFRLElBQUksQ0FBQyxNQUFNLFdBQVcsWUFBWSxTQUFTLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQztRQUN4RSxDQUFDLEVBQUM7UUFFRixxQkFBZ0IsR0FBRyxDQUFPLFFBQTBCLEVBQUUsRUFBRTtZQUN0RCxNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUM7WUFDL0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLENBQUMsQ0FBQzthQUM1RDtZQUNELEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQzdDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO29CQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQztpQkFDekQ7Z0JBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7b0JBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2lCQUN6RDthQUNGO1lBQ0QsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNsRSxNQUFNLFFBQVEsR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDLENBQUMsc0VBQXNFO1lBQ3ZHLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyx3QkFBd0I7WUFDOUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTs7Z0JBQ2hDLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sQ0FBQztnQkFDN0MsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNuRCxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ25ELE1BQU0sZUFBZSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDekQsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDO2dCQUNoQixJQUFJLE1BQU0sQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQy9DLEtBQUssR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztpQkFDekM7Z0JBQ0QsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN4RCxTQUFTLENBQUMsS0FBSyw0Q0FBbUIsQ0FBQztnQkFDbkMsSUFBSSxRQUFRLEVBQUU7b0JBQ1osU0FBUyxDQUFDLEtBQUssK0NBQXNCLENBQUM7aUJBQ3ZDO3FCQUFNO29CQUNMLFNBQVMsQ0FBQyxLQUFLLDRDQUFtQixDQUFDO2lCQUNwQztnQkFDRCxTQUFTLENBQUMsS0FBSyxpRkFFYixJQUFJLDJIQUNtQixJQUFJLEtBQ3pCLEtBQUssaUlBQ2tCLElBQUksMENBQUUsS0FBSyxLQUNoQyxJQUFJLEVBQUUsU0FBUywwR0FBc0IsSUFBSSwwQ0FBRSxLQUFLLDBDQUFFLElBQUksQ0FBQSxRQUcxRCxJQUFJLEVBQUU7d0JBQ0osSUFBSSxFQUFFLFNBQVM7d0JBQ2YsT0FBTyxFQUFFLE9BQU87d0JBQ2hCLE9BQU8sRUFBRTs0QkFDUCxJQUFJLEVBQUUsSUFBSSwrQ0FBc0I7eUJBQ2pDO3FCQUNGLEdBQ0YsQ0FBQztnQkFDRixTQUFTLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7Z0JBQy9CLFNBQVMsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztnQkFDL0IsSUFBSSxjQUFjLEVBQUU7b0JBQ2xCLGVBQWUsQ0FBQyxLQUFLLGtEQUF5QixDQUFDO29CQUMvQyxlQUFlLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDO2lCQUNsRDtZQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsTUFBTSxFQUFFO2dCQUNsQixLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRTtvQkFDMUIsSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFO3dCQUMzRSxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDbkQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7NEJBQ3BDLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7NEJBQ3pDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLDRDQUFtQixDQUFDOzRCQUN4RCxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQzt3QkFDL0MsQ0FBQyxDQUFDLENBQUM7d0JBQ0gsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUU7NEJBQ2pDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO2dDQUNuQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0NBQ3pELFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsS0FBSywyQ0FBa0IsQ0FBQzs0QkFDL0QsQ0FBQyxDQUFDLENBQUM7d0JBQ0wsQ0FBQyxDQUFDLENBQUM7cUJBQ0o7aUJBQ0Y7YUFDRjtZQUNELE1BQU0sSUFBSSxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUMvQyxTQUFTLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsbUVBQW1FLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3BJLENBQUMsQ0FBQSxDQUFDO1FBRUYsbUJBQWMsR0FBRyxDQUFPLElBQStFLEVBQXlCLEVBQUU7WUFDaEksTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEdBQUcsSUFBSSxDQUFDO1lBQ3ZDLE1BQU0sRUFBRSxjQUFjLEVBQUUsR0FBRyxHQUFHLENBQUM7WUFDL0IsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLGNBQWMsSUFBSSw4Q0FBQSxJQUFJLEVBQVksR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbEYsTUFBTSxJQUFJLEdBQUcsTUFBTSxTQUFTLENBQUMsTUFBTSxDQUFDO2dCQUNsQyxVQUFVLEVBQUUsQ0FBQyxNQUFNLENBQUM7Z0JBQ3BCLFdBQVcsRUFBRSxHQUFHO2dCQUNoQixTQUFTO2FBQ1YsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxJQUFJLEVBQUU7Z0JBQ1IsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFVLEVBQUUsRUFBRTtvQkFDMUYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxPQUFPLENBQUMsQ0FBQztvQkFDaEQsTUFBTSxHQUFHLENBQUM7Z0JBQ1osQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsT0FBTztvQkFDTCxRQUFRO29CQUNSLFFBQVE7aUJBQ1QsQ0FBQzthQUNIO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUEsQ0FBQztRQUVGLDJCQUFzQixHQUFHLENBQU8sSUFBaUUsRUFBRSxFQUFFO1lBQ25HLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQztZQUN0QyxNQUFNLEVBQUUsc0JBQXNCLEVBQUUsR0FBRyxHQUFHLENBQUM7WUFDdkMsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLHNCQUFzQixJQUFJLDhDQUFBLElBQUksRUFBWSxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMxRixNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3pFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUM7UUFDaEMsQ0FBQyxDQUFBLENBQUM7UUFFRixlQUFVLEdBQUcsQ0FBTyxJQUF3RCxFQUFFLEVBQUU7WUFDOUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDO1lBQ3RDLE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxHQUFHLENBQUM7WUFDM0IsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsSUFBSSw4Q0FBQSxJQUFJLEVBQVksR0FBRyxFQUFFLEtBQUssQ0FBQyxTQUFTLFFBQVEsRUFBRSxDQUFDO1lBQy9GLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFBLENBQUM7UUFFRixrQkFBYSxHQUFHLENBQU8sSUFBcUMsRUFBMkIsRUFBRTs7WUFTdkYsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUM7WUFDNUIsTUFBTSxFQUFFLGFBQWEsRUFBRSxHQUFHLEdBQUcsQ0FBQztZQUM5QixNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsYUFBYSxJQUFJLDhDQUFBLElBQUksRUFBWSxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNqRixNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFtQixHQUFHLENBQUMsQ0FBQztZQUM3RCxPQUFPLENBQ0wsT0FBQSxHQUFHLENBQUMsS0FBSywwQ0FBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNuQixRQUFRLEVBQUUsQ0FBQyxDQUFDLFNBQVM7Z0JBQ3JCLFFBQVEsRUFBRSxDQUFDLENBQUMsSUFBSTthQUNqQixDQUFDLE1BQUssRUFBRSxDQUNWLENBQUM7UUFDSixDQUFDLENBQUEsQ0FBQztRQUVGLGFBQVEsR0FBRyxDQUFDLFFBQWdCLEVBQUUsUUFBaUIsRUFBRSxFQUFFO1lBQ2pELE1BQU0sSUFBSSxHQUFRLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLFFBQVEsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQztZQUNoRCxJQUFJLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQztZQUNyQixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDYixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxDQUFDLENBQUM7UUFFRixxQkFBZ0IsR0FBRyxDQUFPLElBQTJFLEVBQUUsRUFBRTtZQUN2RyxNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDO1lBQ3BELE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxHQUFHLEdBQUcsQ0FBQztZQUNuQyxNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsa0JBQWtCLEVBQUUsQ0FBQztZQUN2RCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUN2QyxHQUFHLEVBQ0g7Z0JBQ0UsUUFBUTtnQkFDUixPQUFPO2dCQUNQLEtBQUs7Z0JBQ0wsUUFBUTthQUNULEVBQ0QsSUFBSSxFQUNKO2dCQUNFLFlBQVksRUFBRSxhQUFhO2FBQzVCLENBQ0YsQ0FBQztZQUNGLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsMkVBQTJFLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZILFNBQVMsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQSxDQUFDO1FBRUYsY0FBUyxHQUFHLENBQU8sTUFBc0IsRUFBRSxFQUFFO1lBQzNDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxHQUFHLE1BQU0sQ0FBQztZQUM1QyxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7WUFDckIsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUU7Z0JBQzVCLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQzthQUN4QztZQUNELE1BQU0sV0FBVyxHQUFHLElBQUksV0FBVyxDQUFDO2dCQUNsQyxRQUFRLEVBQUUsR0FBRyxRQUFRLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxxQkFBcUIsQ0FBQyxFQUFFO2dCQUNwRixjQUFjLEVBQUUsR0FBRztnQkFDbkIsWUFBWSxFQUFFLEdBQUc7Z0JBQ2pCLGdCQUFnQixFQUFFLEdBQUc7Z0JBQ3JCLFVBQVUsRUFBRSxJQUFJO2dCQUNoQixTQUFTLEVBQUUsS0FBSztnQkFDaEIsS0FBSyxFQUFFLFFBQVEsSUFBSSxLQUFLO2dCQUN4QixNQUFNLEVBQUUsSUFBSTthQUNiLENBQUMsQ0FBQztZQUNILFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ2pELENBQUMsQ0FBQSxDQUFDO1FBRUYsV0FBTSxHQUFHLENBQU8sTUFBc0IsRUFBRSxFQUFFO1lBQ3hDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUM7WUFDcEQsSUFBSSxjQUFjLEdBQUcsS0FBSyxDQUFDO1lBQzNCLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQzdDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO29CQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQztpQkFDekQ7Z0JBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7b0JBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2lCQUN6RDtnQkFDRCxJQUFJLE1BQU0sQ0FBQyxXQUFXLEVBQUU7b0JBQ3RCLGNBQWMsR0FBRyxJQUFJLENBQUM7aUJBQ3ZCO2FBQ0Y7WUFDRCxNQUFNLFFBQVEsR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDLENBQUMsc0VBQXNFO1lBQ3ZHLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyx3QkFBd0I7WUFDMUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDaEMsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDO2dCQUNoQixJQUFJLE1BQU0sQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQy9DLEtBQUssR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztpQkFDekM7Z0JBQ0QsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN4RCxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyw0Q0FBbUIsQ0FBQztnQkFDMUQsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFO29CQUNuQixVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSywrQ0FBc0IsQ0FBQztpQkFDOUQ7cUJBQU07b0JBQ0wsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssNENBQW1CLENBQUM7aUJBQzNEO2dCQUNELFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztnQkFDdEQsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO2dCQUN0RCxJQUFJLGNBQWMsRUFBRTtvQkFDbEIsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssa0RBQXlCLENBQUM7b0JBQ2hFLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7aUJBQ25FO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxNQUFNLEVBQUU7Z0JBQ2xCLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFO29CQUMxQixJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7d0JBQzNFLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNuRCxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTs0QkFDcEMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQzs0QkFDekMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssNENBQW1CLENBQUM7NEJBQ3hELFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO3dCQUMvQyxDQUFDLENBQUMsQ0FBQzt3QkFDSCxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRTs0QkFDakMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUU7Z0NBQ25DLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQ0FDekQsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxLQUFLLDJDQUFrQixDQUFDOzRCQUMvRCxDQUFDLENBQUMsQ0FBQzt3QkFDTCxDQUFDLENBQUMsQ0FBQztxQkFDSjtpQkFDRjthQUNGO1lBRUQsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2QyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFO2dCQUN4QixPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFO29CQUMvQixJQUFJLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO3dCQUN6RCw4QkFBOEI7d0JBQzlCLFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxHQUFHLElBQUksRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDdEUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsSUFBSSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO3FCQUMzRDt5QkFBTTt3QkFDTCxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sR0FBRyxJQUFJLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUNyRSxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sR0FBRyxJQUFJLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO3FCQUNyRTtvQkFDRCxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sR0FBRyxJQUFJLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEtBQUssMkNBQWtCLENBQUM7Z0JBQ3ZFLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDSCxNQUFNLElBQUksR0FBRyxNQUFNLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDL0MsU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLG1FQUFtRSxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNwSSxDQUFDLENBQUEsQ0FBQztRQUVGLGlCQUFZLEdBQUcsQ0FBTyxNQUE0QixFQUFFLEVBQUU7WUFDcEQsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUM7WUFDcEMsSUFBSSxFQUFDLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxNQUFNLENBQUEsRUFBRTtnQkFDbkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLHlCQUF5QixDQUFDLENBQUM7Z0JBQzdELE9BQU87YUFDUjtZQUNELE1BQU0sUUFBUSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7WUFDaEMsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDM0MsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsS0FBSyxDQUFDO2dCQUN2QyxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxTQUFTLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNwRSxLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sSUFBSSxFQUFFLEVBQUU7b0JBQ2xDLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO29CQUN2RCxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztpQkFDeEQ7Z0JBQ0QsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUU7b0JBQ3hCLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUM7b0JBQzNDLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLElBQUksU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUM7b0JBQ2xGLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7aUJBQzlDO2FBQ0Y7WUFDRCxNQUFNLElBQUksR0FBRyxNQUFNLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDL0MsU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLG1FQUFtRSxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNwSSxDQUFDLENBQUEsQ0FBQztRQUVGLGFBQVEsR0FBRyxDQUFPLElBQWMsRUFBRSxFQUFFO1lBQ2xDLE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxHQUFHLENBQUM7WUFDM0IsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsRUFBRSxDQUFDO1lBQy9DLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQ3ZDLEdBQUcsRUFDSDtnQkFDRSxJQUFJO2FBQ0wsRUFDRCxJQUFJLEVBQ0o7Z0JBQ0UsWUFBWSxFQUFFLGFBQWE7YUFDNUIsQ0FDRixDQUFDO1lBQ0YsU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFFLENBQUMsQ0FBQSxDQUFDO1FBRUYsZUFBVSxHQUFHLEdBQTRELEVBQUU7WUFDekUsT0FBTyxNQUFNLFNBQVMsQ0FBQyxNQUFNLENBQUM7Z0JBQzVCLFVBQVUsRUFBRSxDQUFDLE1BQU0sQ0FBQztnQkFDcEIsV0FBVyxFQUFFLEVBQUU7YUFDaEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDYixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUEsQ0FBQztRQUVGLGNBQVMsR0FBRyxDQUFPLElBQVUsRUFBcUQsRUFBRTtZQUNsRixJQUFJLElBQUksRUFBRTtnQkFDUixPQUFPLElBQUksT0FBTyxDQUErQixDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtvQkFDbkUsTUFBTSxFQUFFLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztvQkFDMUIsTUFBTSxNQUFNLEdBQWUsSUFBSSxVQUFVLEVBQUUsQ0FBQztvQkFDNUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUU7d0JBQ25CLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFxQixDQUFDO3dCQUM1QyxJQUFJLENBQUMsTUFBTSxFQUFFOzRCQUNYLE1BQU0sQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDOzRCQUNyQyxPQUFPO3lCQUNSO3dCQUNELEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTs0QkFDbkMsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDckMsSUFBSSxDQUFDLEtBQUssRUFBRTtnQ0FDVixNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQztnQ0FDakMsT0FBTzs2QkFDUjs0QkFDRCxNQUFNLEtBQUssR0FBVSxFQUFFLENBQUM7NEJBQ3hCLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDOzRCQUN2QyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0NBQzFCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUU7b0NBQzlCLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDO29DQUNsQyxzQ0FBc0M7b0NBQ3RDLElBQUksU0FBUyxJQUFJLFFBQVEsR0FBRyxDQUFDLEVBQUU7d0NBQzdCLE1BQU0sSUFBSSxHQUFRLEVBQUUsQ0FBQzt3Q0FDckIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsRUFBRTs0Q0FDbkMsSUFBSSxTQUFTLEVBQUU7Z0RBQ2IsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dEQUNuQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dEQUM1QixJQUFJLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLFFBQVEsRUFBRTtvREFDbkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztpREFDbEM7Z0RBQ0QsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxTQUFTLEVBQUU7b0RBQ25ELElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUM7aURBQ3BCOzZDQUNGO3dDQUNILENBQUMsQ0FBQyxDQUFDO3dDQUNILEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7cUNBQ2xCO2dDQUNILENBQUMsQ0FBQyxDQUFDO2dDQUNILE9BQU8sQ0FBQztvQ0FDTixLQUFLO29DQUNMLElBQUk7aUNBQ0wsQ0FBQyxDQUFDOzZCQUNKO3dCQUNILENBQUMsQ0FBQyxDQUFDO29CQUNMLENBQUMsQ0FBQztvQkFDRixNQUFNLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2pDLENBQUMsQ0FBQyxDQUFDO2FBQ0o7aUJBQU07Z0JBQ0wsT0FBTztvQkFDTCxLQUFLLEVBQUUsRUFBRTtvQkFDVCxJQUFJLEVBQUUsSUFBSTtpQkFDWCxDQUFDO2FBQ0g7UUFDSCxDQUFDLENBQUEsQ0FBQztJQTFYQyxDQUFDO0lBbElKLElBQVksV0FBVzs7UUFDckIsYUFBTyxJQUFJLENBQUMscUJBQXFCLDBDQUFFLFdBQVcsQ0FBQztJQUNqRCxDQUFDO0lBRUQsSUFBWSxNQUFNO1FBQ2hCLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDO1FBQ3BELE9BQU8sR0FBRyxPQUFPLElBQUksR0FBRyxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQVksVUFBVTtRQUNwQixNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDO1FBQzlDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDWCxPQUFPO1NBQ1I7UUFDRCxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRTtZQUM5QixPQUFPLE1BQU0sQ0FBQztTQUNmO1FBQ0QsT0FBTyxNQUFNLEVBQUUsQ0FBQztJQUNsQixDQUFDOzs7OztZQXRCRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7OztZQVhRLFlBQVk7WUFNWixlQUFlOzRDQXdJbkIsTUFBTSxTQUFDLGVBQWUsY0FBRyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFNkQXBpU2VydmljZSB9IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvYXBpJztcclxuaW1wb3J0ICogYXMgdXVpZCBmcm9tICd1dWlkJztcclxuaW1wb3J0IGhhc2ggZnJvbSAnb2JqZWN0LWhhc2gnO1xyXG5pbXBvcnQgeyBFeHBvcnRUb0NzdiB9IGZyb20gJ2V4cG9ydC10by1jc3YnO1xyXG5pbXBvcnQgeyBXb3JrYm9vaywgU3R5bGUgfSBmcm9tICdleGNlbGpzJztcclxuaW1wb3J0IHsgU2RFeHBvcnRUZW1wbGF0ZSwgU2RFeHBvcnRPcHRpb24sIEFQSSwgU2RFeHBvcnRGaWxlLCBTZEV4cG9ydEN1c3RvbU9wdGlvbiB9IGZyb20gJy4vZXhwb3J0Lm1vZGVsJztcclxuaW1wb3J0IHsgU2ROb3RpZnlTZXJ2aWNlIH0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS9ub3RpZnknO1xyXG5pbXBvcnQgeyBGSVJFQkFTRV9DT05GSUcsIElGaXJlYmFzZUNvbmZpZ3VyYXRpb24gfSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL2NvbW1vbic7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2RFeHBvcnRTZXJ2aWNlIHtcclxuICBwcml2YXRlIGdldCBmdW5jdGlvblVybCgpIHtcclxuICAgIHJldHVybiB0aGlzLmZpcmViYXNlQ29uZmlndXJhdGlvbj8uZnVuY3Rpb25Vcmw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldCBmb2xkZXIoKSB7XHJcbiAgICBjb25zdCB7IHByb2plY3QsIGVudiB9ID0gdGhpcy5maXJlYmFzZUNvbmZpZ3VyYXRpb247XHJcbiAgICByZXR1cm4gYCR7cHJvamVjdH0tJHtlbnZ9YDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0IHVzZXJGb2xkZXIoKSB7XHJcbiAgICBjb25zdCB7IGZvbGRlciB9ID0gdGhpcy5maXJlYmFzZUNvbmZpZ3VyYXRpb247XHJcbiAgICBpZiAoIWZvbGRlcikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIGZvbGRlciA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgcmV0dXJuIGZvbGRlcjtcclxuICAgIH1cclxuICAgIHJldHVybiBmb2xkZXIoKTtcclxuICB9XHJcblxyXG4gICNmaWVsZFN0eWxlOiBQYXJ0aWFsPFN0eWxlPiA9IHtcclxuICAgIGJvcmRlcjoge1xyXG4gICAgICBib3R0b206IHsgc3R5bGU6ICd0aGluJyB9LFxyXG4gICAgICBsZWZ0OiB7IHN0eWxlOiAndGhpbicgfSxcclxuICAgICAgcmlnaHQ6IHsgc3R5bGU6ICd0aGluJyB9LFxyXG4gICAgfSxcclxuICAgIGFsaWdubWVudDoge1xyXG4gICAgICB2ZXJ0aWNhbDogJ21pZGRsZScsXHJcbiAgICAgIGhvcml6b250YWw6ICdjZW50ZXInLFxyXG4gICAgICB3cmFwVGV4dDogdHJ1ZSxcclxuICAgIH0sXHJcbiAgICBmb250OiB7XHJcbiAgICAgIGJvbGQ6IHRydWUsXHJcbiAgICAgIHNpemU6IDExLFxyXG4gICAgICBjb2xvcjogeyBhcmdiOiAnMDAwMDAwJyB9LFxyXG4gICAgfSxcclxuICAgIGZpbGw6IHtcclxuICAgICAgdHlwZTogJ3BhdHRlcm4nLFxyXG4gICAgICBwYXR0ZXJuOiAnc29saWQnLFxyXG4gICAgICBmZ0NvbG9yOiB7XHJcbiAgICAgICAgYXJnYjogJ0ZBRkFGQScsXHJcbiAgICAgIH0sXHJcbiAgICB9LFxyXG4gIH07XHJcbiAgI3RpdGxlQ29sb3IgPSAnRkZGRkZGJztcclxuICAjdGl0bGVGZ0NvbG9yID0gJzE0MzE4MCc7XHJcbiAgI3RpdGxlU3R5bGU6IFBhcnRpYWw8U3R5bGU+ID0ge1xyXG4gICAgYm9yZGVyOiB7XHJcbiAgICAgIGJvdHRvbTogeyBzdHlsZTogJ3RoaW4nIH0sXHJcbiAgICAgIGxlZnQ6IHsgc3R5bGU6ICd0aGluJyB9LFxyXG4gICAgICByaWdodDogeyBzdHlsZTogJ3RoaW4nIH0sXHJcbiAgICB9LFxyXG4gICAgYWxpZ25tZW50OiB7XHJcbiAgICAgIHZlcnRpY2FsOiAnbWlkZGxlJyxcclxuICAgICAgaG9yaXpvbnRhbDogJ2NlbnRlcicsXHJcbiAgICAgIHdyYXBUZXh0OiB0cnVlLFxyXG4gICAgfSxcclxuICAgIGZvbnQ6IHtcclxuICAgICAgYm9sZDogdHJ1ZSxcclxuICAgICAgc2l6ZTogMTEsXHJcbiAgICAgIGNvbG9yOiB7IGFyZ2I6IHRoaXMuI3RpdGxlQ29sb3IgfSxcclxuICAgIH0sXHJcbiAgICBmaWxsOiB7XHJcbiAgICAgIHR5cGU6ICdwYXR0ZXJuJyxcclxuICAgICAgcGF0dGVybjogJ3NvbGlkJyxcclxuICAgICAgZmdDb2xvcjoge1xyXG4gICAgICAgIGFyZ2I6IHRoaXMuI3RpdGxlRmdDb2xvcixcclxuICAgICAgfSxcclxuICAgIH0sXHJcbiAgfTtcclxuXHJcbiAgI3JlcXVpcmVkU3R5bGU6IFBhcnRpYWw8U3R5bGU+ID0ge1xyXG4gICAgYm9yZGVyOiB7XHJcbiAgICAgIGJvdHRvbTogeyBzdHlsZTogJ3RoaW4nIH0sXHJcbiAgICAgIGxlZnQ6IHsgc3R5bGU6ICd0aGluJyB9LFxyXG4gICAgICByaWdodDogeyBzdHlsZTogJ3RoaW4nIH0sXHJcbiAgICB9LFxyXG4gICAgYWxpZ25tZW50OiB7XHJcbiAgICAgIHZlcnRpY2FsOiAnbWlkZGxlJyxcclxuICAgICAgaG9yaXpvbnRhbDogJ2NlbnRlcicsXHJcbiAgICAgIHdyYXBUZXh0OiB0cnVlLFxyXG4gICAgfSxcclxuICAgIGZvbnQ6IHtcclxuICAgICAgaXRhbGljOiB0cnVlLFxyXG4gICAgICBzaXplOiAxMSxcclxuICAgICAgY29sb3I6IHsgYXJnYjogJ0ZGRkZGRicgfSxcclxuICAgIH0sXHJcbiAgICBmaWxsOiB7XHJcbiAgICAgIHR5cGU6ICdwYXR0ZXJuJyxcclxuICAgICAgcGF0dGVybjogJ3NvbGlkJyxcclxuICAgICAgZmdDb2xvcjoge1xyXG4gICAgICAgIGFyZ2I6ICdGRjE3NDQnLFxyXG4gICAgICB9LFxyXG4gICAgfSxcclxuICB9O1xyXG5cclxuICAjZGVzY3JpcHRpb25TdHlsZTogUGFydGlhbDxTdHlsZT4gPSB7XHJcbiAgICBib3JkZXI6IHtcclxuICAgICAgYm90dG9tOiB7IHN0eWxlOiAndGhpbicgfSxcclxuICAgICAgbGVmdDogeyBzdHlsZTogJ3RoaW4nIH0sXHJcbiAgICAgIHJpZ2h0OiB7IHN0eWxlOiAndGhpbicgfSxcclxuICAgIH0sXHJcbiAgICBhbGlnbm1lbnQ6IHtcclxuICAgICAgd3JhcFRleHQ6IHRydWUsXHJcbiAgICB9LFxyXG4gICAgZm9udDoge1xyXG4gICAgICBpdGFsaWM6IHRydWUsXHJcbiAgICAgIHNpemU6IDksXHJcbiAgICAgIGNvbG9yOiB7IGFyZ2I6ICcwMDAwMDAnIH0sXHJcbiAgICB9LFxyXG4gICAgZmlsbDoge1xyXG4gICAgICB0eXBlOiAncGF0dGVybicsXHJcbiAgICAgIHBhdHRlcm46ICdzb2xpZCcsXHJcbiAgICAgIGZnQ29sb3I6IHtcclxuICAgICAgICBhcmdiOiAnQ0ZEOERDJyxcclxuICAgICAgfSxcclxuICAgIH0sXHJcbiAgfTtcclxuXHJcbiAgI2NlbGxTdHlsZTogUGFydGlhbDxTdHlsZT4gPSB7XHJcbiAgICBhbGlnbm1lbnQ6IHtcclxuICAgICAgdmVydGljYWw6ICdtaWRkbGUnLFxyXG4gICAgICB3cmFwVGV4dDogdHJ1ZSxcclxuICAgIH0sXHJcbiAgfTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGFwaVNlcnZpY2U6IFNkQXBpU2VydmljZSxcclxuICAgIHByaXZhdGUgbm90aWZ5U2VydmljZTogU2ROb3RpZnlTZXJ2aWNlLFxyXG4gICAgQEluamVjdChGSVJFQkFTRV9DT05GSUcpIEBPcHRpb25hbCgpIHByaXZhdGUgZmlyZWJhc2VDb25maWd1cmF0aW9uOiBJRmlyZWJhc2VDb25maWd1cmF0aW9uXHJcbiAgKSB7fVxyXG5cclxuICAjZGlyZWN0b3J5ID0gKGtleTogc3RyaW5nLCBncm91cDogc3RyaW5nKSA9PiB7XHJcbiAgICBsZXQgaGFzaGVkRm9sZGVyID0gaGFzaCh7XHJcbiAgICAgIGZvbGRlcjogdGhpcy5mb2xkZXIsXHJcbiAgICAgIHVzZXJGb2xkZXI6IHRoaXMudXNlckZvbGRlcixcclxuICAgIH0pO1xyXG4gICAgaWYgKCFncm91cCkge1xyXG4gICAgICByZXR1cm4gYGRpcjE9JHt0aGlzLmZvbGRlcn0mZGlyMj1VLSR7aGFzaGVkRm9sZGVyfSZkaXIzPSR7a2V5IHx8ICcnfWA7XHJcbiAgICB9XHJcbiAgICBoYXNoZWRGb2xkZXIgPSBoYXNoKHtcclxuICAgICAgZm9sZGVyOiB0aGlzLmZvbGRlcixcclxuICAgICAgZ3JvdXAsXHJcbiAgICB9KTtcclxuICAgIHJldHVybiBgZGlyMT0ke3RoaXMuZm9sZGVyfSZkaXIyPUctJHtoYXNoZWRGb2xkZXJ9JmRpcjM9JHtrZXkgfHwgJyd9YDtcclxuICB9O1xyXG5cclxuICBnZW5lcmF0ZVRlbXBsYXRlID0gYXN5bmMgKHRlbXBsYXRlOiBTZEV4cG9ydFRlbXBsYXRlKSA9PiB7XHJcbiAgICBjb25zdCB7IGZpbGVOYW1lLCBjb2x1bW5zLCBzaGVldHMgfSA9IHRlbXBsYXRlO1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbHVtbnMpKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhjZWwgdGVtcGxhdGUgY29sdW1ucyBtdXN0IGJlIGFuIGFycmF5Jyk7XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IFtpZHgsIGNvbHVtbl0gb2YgY29sdW1ucy5lbnRyaWVzKCkpIHtcclxuICAgICAgaWYgKCFjb2x1bW4uZmllbGQpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbHVtbiAke2lkeCArIDF9OiBGaWVsZCBpcyByZXF1aXJlZGApO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghY29sdW1uLnRpdGxlKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb2x1bW4gJHtpZHggKyAxfTogVGl0bGUgaXMgcmVxdWlyZWRgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgaGFzRGVzY3JpcHRpb24gPSBjb2x1bW5zLnNvbWUoY29sdW1uID0+IGNvbHVtbi5kZXNjcmlwdGlvbik7XHJcbiAgICBjb25zdCB3b3JrYm9vayA9IG5ldyBXb3JrYm9vaygpOyAvL2F3YWl0IFhsc3hQb3B1bGF0ZS5mcm9tQmxhbmtBc3luYygpOyAvLyDEkOG7jWMgZmlsZSBzYXUga2hpIMSRw6MgZG93bmxvYWRcclxuICAgIGNvbnN0IGZpcnN0U2hlZXQgPSB3b3JrYm9vay5hZGRXb3Jrc2hlZXQoJ3RlbXBsYXRlJyk7IC8vIEzhuqV5IHJhIHNoZWV0IMSR4bqndSB0acOqblxyXG4gICAgY29sdW1ucy5mb3JFYWNoKChjb2x1bW4sIGluZGV4KSA9PiB7XHJcbiAgICAgIGNvbnN0IHsgcmVxdWlyZWQsIGZpbGwsIGZvbnRDb2xvciB9ID0gY29sdW1uO1xyXG4gICAgICBjb25zdCBjZWxsRmllbGQgPSBmaXJzdFNoZWV0LmdldENlbGwoMSwgaW5kZXggKyAxKTtcclxuICAgICAgY29uc3QgY2VsbFRpdGxlID0gZmlyc3RTaGVldC5nZXRDZWxsKDIsIGluZGV4ICsgMSk7XHJcbiAgICAgIGNvbnN0IGNlbGxEZXNjcmlwdGlvbiA9IGZpcnN0U2hlZXQuZ2V0Q2VsbCgzLCBpbmRleCArIDEpO1xyXG4gICAgICBsZXQgd2lkdGggPSAxMjA7XHJcbiAgICAgIGlmIChjb2x1bW4ud2lkdGggJiYgY29sdW1uLndpZHRoLmVuZHNXaXRoKCdweCcpKSB7XHJcbiAgICAgICAgd2lkdGggPSArY29sdW1uLndpZHRoLnJlcGxhY2UoJ3B4JywgJycpO1xyXG4gICAgICB9XHJcbiAgICAgIGZpcnN0U2hlZXQuZ2V0Q29sdW1uKGluZGV4ICsgMSkud2lkdGggPSB3aWR0aCAvIDcgfHwgMjA7XHJcbiAgICAgIGNlbGxGaWVsZC5zdHlsZSA9IHRoaXMuI2ZpZWxkU3R5bGU7XHJcbiAgICAgIGlmIChyZXF1aXJlZCkge1xyXG4gICAgICAgIGNlbGxGaWVsZC5zdHlsZSA9IHRoaXMuI3JlcXVpcmVkU3R5bGU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY2VsbEZpZWxkLnN0eWxlID0gdGhpcy4jZmllbGRTdHlsZTtcclxuICAgICAgfVxyXG4gICAgICBjZWxsVGl0bGUuc3R5bGUgPSB7XHJcbiAgICAgICAgLi4udGhpcy4jdGl0bGVTdHlsZSxcclxuICAgICAgICBmb250OiB7XHJcbiAgICAgICAgICAuLi50aGlzLiN0aXRsZVN0eWxlPy5mb250LFxyXG4gICAgICAgICAgY29sb3I6IHtcclxuICAgICAgICAgICAgLi4udGhpcy4jdGl0bGVTdHlsZT8uZm9udD8uY29sb3IsXHJcbiAgICAgICAgICAgIGFyZ2I6IGZvbnRDb2xvciB8fCB0aGlzLiN0aXRsZVN0eWxlPy5mb250Py5jb2xvcj8uYXJnYixcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgICBmaWxsOiB7XHJcbiAgICAgICAgICB0eXBlOiAncGF0dGVybicsXHJcbiAgICAgICAgICBwYXR0ZXJuOiAnc29saWQnLFxyXG4gICAgICAgICAgZmdDb2xvcjoge1xyXG4gICAgICAgICAgICBhcmdiOiBmaWxsIHx8IHRoaXMuI3RpdGxlRmdDb2xvcixcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgfTtcclxuICAgICAgY2VsbEZpZWxkLnZhbHVlID0gY29sdW1uLmZpZWxkO1xyXG4gICAgICBjZWxsVGl0bGUudmFsdWUgPSBjb2x1bW4udGl0bGU7XHJcbiAgICAgIGlmIChoYXNEZXNjcmlwdGlvbikge1xyXG4gICAgICAgIGNlbGxEZXNjcmlwdGlvbi5zdHlsZSA9IHRoaXMuI2Rlc2NyaXB0aW9uU3R5bGU7XHJcbiAgICAgICAgY2VsbERlc2NyaXB0aW9uLnZhbHVlID0gY29sdW1uLmRlc2NyaXB0aW9uIHx8ICcnO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGlmIChzaGVldHM/Lmxlbmd0aCkge1xyXG4gICAgICBmb3IgKGNvbnN0IHNoZWV0IG9mIHNoZWV0cykge1xyXG4gICAgICAgIGlmIChzaGVldC5uYW1lICYmIEFycmF5LmlzQXJyYXkoc2hlZXQuaXRlbXMpICYmIEFycmF5LmlzQXJyYXkoc2hlZXQuZmllbGRzKSkge1xyXG4gICAgICAgICAgY29uc3QgbmV3U2hlZXQgPSB3b3JrYm9vay5hZGRXb3Jrc2hlZXQoc2hlZXQubmFtZSk7XHJcbiAgICAgICAgICBzaGVldC5maWVsZHMuZm9yRWFjaCgoZmllbGQsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIG5ld1NoZWV0LmdldENvbHVtbihpbmRleCArIDEpLndpZHRoID0gMzA7XHJcbiAgICAgICAgICAgIG5ld1NoZWV0LmdldENlbGwoMSwgaW5kZXggKyAxKS5zdHlsZSA9IHRoaXMuI3RpdGxlU3R5bGU7XHJcbiAgICAgICAgICAgIG5ld1NoZWV0LmdldENlbGwoMSwgaW5kZXggKyAxKS52YWx1ZSA9IGZpZWxkO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBzaGVldC5pdGVtcy5mb3JFYWNoKChpdGVtLCBpZHgxKSA9PiB7XHJcbiAgICAgICAgICAgIHNoZWV0LmZpZWxkcy5mb3JFYWNoKChmaWVsZCwgaWR4MikgPT4ge1xyXG4gICAgICAgICAgICAgIG5ld1NoZWV0LmdldENlbGwoMiArIGlkeDEsIDEgKyBpZHgyKS52YWx1ZSA9IGl0ZW1bZmllbGRdO1xyXG4gICAgICAgICAgICAgIG5ld1NoZWV0LmdldENlbGwoMiArIGlkeDEsIDEgKyBpZHgyKS5zdHlsZSA9IHRoaXMuI2NlbGxTdHlsZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IGZpbGUgPSBhd2FpdCB3b3JrYm9vay54bHN4LndyaXRlQnVmZmVyKCk7XHJcbiAgICBTZFV0aWxpdHkuZG93bmxvYWRCbG9iKG5ldyBCbG9iKFtmaWxlXSwgeyB0eXBlOiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnIH0pLCBmaWxlTmFtZSk7XHJcbiAgfTtcclxuXHJcbiAgdXBsb2FkVGVtcGxhdGUgPSBhc3luYyAoYXJnczogeyBrZXk6IHN0cmluZzsgZ3JvdXA/OiBzdHJpbmc7IHZhbGlkYXRvcj86IChmaWxlTmFtZTogc3RyaW5nKSA9PiBzdHJpbmcgfSk6IFByb21pc2U8U2RFeHBvcnRGaWxlPiA9PiB7XHJcbiAgICBjb25zdCB7IGtleSwgZ3JvdXAsIHZhbGlkYXRvciB9ID0gYXJncztcclxuICAgIGNvbnN0IHsgdXBsb2FkVGVtcGxhdGUgfSA9IEFQSTtcclxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZnVuY3Rpb25Vcmx9JHt1cGxvYWRUZW1wbGF0ZX0/JHt0aGlzLiNkaXJlY3Rvcnkoa2V5LCBncm91cCl9YDtcclxuICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBTZFV0aWxpdHkudXBsb2FkKHtcclxuICAgICAgZXh0ZW5zaW9uczogWyd4bHN4J10sXHJcbiAgICAgIG1heFNpemVJbk1iOiAwLjEsXHJcbiAgICAgIHZhbGlkYXRvcixcclxuICAgIH0pO1xyXG4gICAgaWYgKGZpbGUpIHtcclxuICAgICAgY29uc3QgeyBmaWxlUGF0aCwgZmlsZU5hbWUgfSA9IGF3YWl0IHRoaXMuYXBpU2VydmljZS51cGxvYWQodXJsLCBmaWxlKS5jYXRjaCgoZXJyOiBFcnJvcikgPT4ge1xyXG4gICAgICAgIHRoaXMubm90aWZ5U2VydmljZS5ub3RpZnkud2FybmluZyhlcnI/Lm1lc3NhZ2UpO1xyXG4gICAgICAgIHRocm93IGVycjtcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgZmlsZVBhdGgsXHJcbiAgICAgICAgZmlsZU5hbWUsXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9O1xyXG5cclxuICBnZW5lcmF0ZVVwbG9hZFRlbXBsYXRlID0gYXN5bmMgKGFyZ3M6IHsga2V5OiBzdHJpbmc7IHRlbXBsYXRlOiBTZEV4cG9ydFRlbXBsYXRlOyBncm91cD86IHN0cmluZyB9KSA9PiB7XHJcbiAgICBjb25zdCB7IGtleSwgdGVtcGxhdGUsIGdyb3VwIH0gPSBhcmdzO1xyXG4gICAgY29uc3QgeyBnZW5lcmF0ZVVwbG9hZFRlbXBsYXRlIH0gPSBBUEk7XHJcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmZ1bmN0aW9uVXJsfSR7Z2VuZXJhdGVVcGxvYWRUZW1wbGF0ZX0/JHt0aGlzLiNkaXJlY3Rvcnkoa2V5LCBncm91cCl9YDtcclxuICAgIGNvbnN0IHsgZmlsZVBhdGgsIGZpbGVOYW1lIH0gPSBhd2FpdCB0aGlzLmFwaVNlcnZpY2UucG9zdCh1cmwsIHRlbXBsYXRlKTtcclxuICAgIHJldHVybiB7IGZpbGVQYXRoLCBmaWxlTmFtZSB9O1xyXG4gIH07XHJcblxyXG4gIHJlbW92ZUZpbGUgPSBhc3luYyAoYXJnczogeyBrZXk6IHN0cmluZzsgZ3JvdXA/OiBzdHJpbmc7IGZpbGVOYW1lPzogc3RyaW5nIH0pID0+IHtcclxuICAgIGNvbnN0IHsga2V5LCBncm91cCwgZmlsZU5hbWUgfSA9IGFyZ3M7XHJcbiAgICBjb25zdCB7IHJlbW92ZUZpbGUgfSA9IEFQSTtcclxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZnVuY3Rpb25Vcmx9JHtyZW1vdmVGaWxlfT8ke3RoaXMuI2RpcmVjdG9yeShrZXksIGdyb3VwKX0mbmFtZT0ke2ZpbGVOYW1lfWA7XHJcbiAgICBhd2FpdCB0aGlzLmFwaVNlcnZpY2UucG9zdCh1cmwpO1xyXG4gIH07XHJcblxyXG4gIGZpbGVzSW5Gb2xkZXIgPSBhc3luYyAoYXJnczogeyBrZXk6IHN0cmluZzsgZ3JvdXA/OiBzdHJpbmcgfSk6IFByb21pc2U8U2RFeHBvcnRGaWxlW10+ID0+IHtcclxuICAgIGludGVyZmFjZSBGaWxlc0luRm9sZGVyUmVzIHtcclxuICAgICAgZGlyZWN0b3J5OiBzdHJpbmc7XHJcbiAgICAgIGZpbGVzOiB7XHJcbiAgICAgICAgcHVibGljVXJsOiBzdHJpbmc7XHJcbiAgICAgICAgZnVsbFBhdGg6IHN0cmluZztcclxuICAgICAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICAgIH1bXTtcclxuICAgIH1cclxuICAgIGNvbnN0IHsga2V5LCBncm91cCB9ID0gYXJncztcclxuICAgIGNvbnN0IHsgZmlsZXNJbkZvbGRlciB9ID0gQVBJO1xyXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5mdW5jdGlvblVybH0ke2ZpbGVzSW5Gb2xkZXJ9PyR7dGhpcy4jZGlyZWN0b3J5KGtleSwgZ3JvdXApfWA7XHJcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmFwaVNlcnZpY2UuZ2V0PEZpbGVzSW5Gb2xkZXJSZXM+KHVybCk7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICByZXMuZmlsZXM/Lm1hcChlID0+ICh7XHJcbiAgICAgICAgZmlsZVBhdGg6IGUucHVibGljVXJsLFxyXG4gICAgICAgIGZpbGVOYW1lOiBlLm5hbWUsXHJcbiAgICAgIH0pKSB8fCBbXVxyXG4gICAgKTtcclxuICB9O1xyXG5cclxuICBkb3dubG9hZCA9IChmaWxlUGF0aDogc3RyaW5nLCBmaWxlTmFtZT86IHN0cmluZykgPT4ge1xyXG4gICAgY29uc3QgbGluazogYW55ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgbGluay5kb3dubG9hZCA9IGAke2ZpbGVOYW1lIHx8IHV1aWQudjQoKX0ueGxzeGA7XHJcbiAgICBsaW5rLmhyZWYgPSBmaWxlUGF0aDtcclxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7XHJcbiAgICBsaW5rLmNsaWNrKCk7XHJcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmspO1xyXG4gIH07XHJcblxyXG4gIGV4cG9ydEJ5VGVtcGxhdGUgPSBhc3luYyAoYXJnczogeyBmaWxlUGF0aDogc3RyaW5nOyBjb2x1bW5zOiBhbnlbXTsgaXRlbXM6IGFueVtdOyBmaWxlTmFtZT86IHN0cmluZyB9KSA9PiB7XHJcbiAgICBjb25zdCB7IGZpbGVQYXRoLCBjb2x1bW5zLCBpdGVtcywgZmlsZU5hbWUgfSA9IGFyZ3M7XHJcbiAgICBjb25zdCB7IHNkRXhwb3J0QnlUZW1wbGF0ZSB9ID0gQVBJO1xyXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5mdW5jdGlvblVybH0ke3NkRXhwb3J0QnlUZW1wbGF0ZX1gO1xyXG4gICAgY29uc3QgYnVmZmVyID0gYXdhaXQgdGhpcy5hcGlTZXJ2aWNlLnBvc3QoXHJcbiAgICAgIHVybCxcclxuICAgICAge1xyXG4gICAgICAgIGZpbGVQYXRoLFxyXG4gICAgICAgIGNvbHVtbnMsXHJcbiAgICAgICAgaXRlbXMsXHJcbiAgICAgICAgZmlsZU5hbWUsXHJcbiAgICAgIH0sXHJcbiAgICAgIG51bGwsXHJcbiAgICAgIHtcclxuICAgICAgICByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcicsXHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2J1ZmZlcl0sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0O2Jhc2U2NCwnIH0pO1xyXG4gICAgU2RVdGlsaXR5LmRvd25sb2FkQmxvYihibG9iLCBmaWxlTmFtZSk7XHJcbiAgfTtcclxuXHJcbiAgZXhwb3J0Q1NWID0gYXN5bmMgKG9wdGlvbjogU2RFeHBvcnRPcHRpb24pID0+IHtcclxuICAgIGNvbnN0IHsgY29sdW1ucywgaXRlbXMsIGZpbGVOYW1lIH0gPSBvcHRpb247XHJcbiAgICBjb25zdCBoZWFkZXJDU1YgPSB7fTtcclxuICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuICAgICAgaGVhZGVyQ1NWW2NvbHVtbi5maWVsZF0gPSBjb2x1bW4udGl0bGU7XHJcbiAgICB9XHJcbiAgICBjb25zdCBjc3ZFeHBvcnRlciA9IG5ldyBFeHBvcnRUb0Nzdih7XHJcbiAgICAgIGZpbGVuYW1lOiBgJHtmaWxlTmFtZSB8fCAnQ1NWJ31fJHtEYXRlLnRvRm9ybWF0KG5ldyBEYXRlKCksICd5eXl5LU1NLWRkLUhILW1tLXNzJyl9YCxcclxuICAgICAgZmllbGRTZXBhcmF0b3I6ICcsJyxcclxuICAgICAgcXVvdGVTdHJpbmdzOiAnXCInLFxyXG4gICAgICBkZWNpbWFsU2VwYXJhdG9yOiAnLicsXHJcbiAgICAgIHNob3dMYWJlbHM6IHRydWUsXHJcbiAgICAgIHNob3dUaXRsZTogZmFsc2UsXHJcbiAgICAgIHRpdGxlOiBmaWxlTmFtZSB8fCAnQ1NWJyxcclxuICAgICAgdXNlQm9tOiB0cnVlLFxyXG4gICAgfSk7XHJcbiAgICBjc3ZFeHBvcnRlci5nZW5lcmF0ZUNzdihbaGVhZGVyQ1NWLCAuLi5pdGVtc10pO1xyXG4gIH07XHJcblxyXG4gIGV4cG9ydCA9IGFzeW5jIChvcHRpb246IFNkRXhwb3J0T3B0aW9uKSA9PiB7XHJcbiAgICBjb25zdCB7IGNvbHVtbnMsIGl0ZW1zLCBmaWxlTmFtZSwgc2hlZXRzIH0gPSBvcHRpb247XHJcbiAgICBsZXQgaGFzRGVzY3JpcHRpb24gPSBmYWxzZTtcclxuICAgIGZvciAoY29uc3QgW2lkeCwgY29sdW1uXSBvZiBjb2x1bW5zLmVudHJpZXMoKSkge1xyXG4gICAgICBpZiAoIWNvbHVtbi5maWVsZCkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ29sdW1uICR7aWR4ICsgMX06IEZpZWxkIGlzIHJlcXVpcmVkYCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFjb2x1bW4udGl0bGUpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbHVtbiAke2lkeCArIDF9OiBUaXRsZSBpcyByZXF1aXJlZGApO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb2x1bW4uZGVzY3JpcHRpb24pIHtcclxuICAgICAgICBoYXNEZXNjcmlwdGlvbiA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IHdvcmtib29rID0gbmV3IFdvcmtib29rKCk7IC8vYXdhaXQgWGxzeFBvcHVsYXRlLmZyb21CbGFua0FzeW5jKCk7IC8vIMSQ4buNYyBmaWxlIHNhdSBraGkgxJHDoyBkb3dubG9hZFxyXG4gICAgY29uc3QgZmlyc3RTaGVldCA9IHdvcmtib29rLmFkZFdvcmtzaGVldCgnZGF0YScpOyAvLyBM4bqleSByYSBzaGVldCDEkeG6p3UgdGnDqm5cclxuICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uLCBpbmRleCkgPT4ge1xyXG4gICAgICBsZXQgd2lkdGggPSAxMjA7XHJcbiAgICAgIGlmIChjb2x1bW4ud2lkdGggJiYgY29sdW1uLndpZHRoLmVuZHNXaXRoKCdweCcpKSB7XHJcbiAgICAgICAgd2lkdGggPSArY29sdW1uLndpZHRoLnJlcGxhY2UoJ3B4JywgJycpO1xyXG4gICAgICB9XHJcbiAgICAgIGZpcnN0U2hlZXQuZ2V0Q29sdW1uKGluZGV4ICsgMSkud2lkdGggPSB3aWR0aCAvIDcgfHwgMjA7XHJcbiAgICAgIGZpcnN0U2hlZXQuZ2V0Q2VsbCgxLCBpbmRleCArIDEpLnN0eWxlID0gdGhpcy4jZmllbGRTdHlsZTtcclxuICAgICAgaWYgKGNvbHVtbi5yZXF1aXJlZCkge1xyXG4gICAgICAgIGZpcnN0U2hlZXQuZ2V0Q2VsbCgyLCBpbmRleCArIDEpLnN0eWxlID0gdGhpcy4jcmVxdWlyZWRTdHlsZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBmaXJzdFNoZWV0LmdldENlbGwoMiwgaW5kZXggKyAxKS5zdHlsZSA9IHRoaXMuI3RpdGxlU3R5bGU7XHJcbiAgICAgIH1cclxuICAgICAgZmlyc3RTaGVldC5nZXRDZWxsKDEsIGluZGV4ICsgMSkudmFsdWUgPSBjb2x1bW4uZmllbGQ7XHJcbiAgICAgIGZpcnN0U2hlZXQuZ2V0Q2VsbCgyLCBpbmRleCArIDEpLnZhbHVlID0gY29sdW1uLnRpdGxlO1xyXG4gICAgICBpZiAoaGFzRGVzY3JpcHRpb24pIHtcclxuICAgICAgICBmaXJzdFNoZWV0LmdldENlbGwoMywgaW5kZXggKyAxKS5zdHlsZSA9IHRoaXMuI2Rlc2NyaXB0aW9uU3R5bGU7XHJcbiAgICAgICAgZmlyc3RTaGVldC5nZXRDZWxsKDMsIGluZGV4ICsgMSkudmFsdWUgPSBjb2x1bW4uZGVzY3JpcHRpb24gfHwgJyc7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgaWYgKHNoZWV0cz8ubGVuZ3RoKSB7XHJcbiAgICAgIGZvciAoY29uc3Qgc2hlZXQgb2Ygc2hlZXRzKSB7XHJcbiAgICAgICAgaWYgKHNoZWV0Lm5hbWUgJiYgQXJyYXkuaXNBcnJheShzaGVldC5pdGVtcykgJiYgQXJyYXkuaXNBcnJheShzaGVldC5maWVsZHMpKSB7XHJcbiAgICAgICAgICBjb25zdCBuZXdTaGVldCA9IHdvcmtib29rLmFkZFdvcmtzaGVldChzaGVldC5uYW1lKTtcclxuICAgICAgICAgIHNoZWV0LmZpZWxkcy5mb3JFYWNoKChmaWVsZCwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgbmV3U2hlZXQuZ2V0Q29sdW1uKGluZGV4ICsgMSkud2lkdGggPSAzMDtcclxuICAgICAgICAgICAgbmV3U2hlZXQuZ2V0Q2VsbCgxLCBpbmRleCArIDEpLnN0eWxlID0gdGhpcy4jdGl0bGVTdHlsZTtcclxuICAgICAgICAgICAgbmV3U2hlZXQuZ2V0Q2VsbCgxLCBpbmRleCArIDEpLnZhbHVlID0gZmllbGQ7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHNoZWV0Lml0ZW1zLmZvckVhY2goKGl0ZW0sIGlkeDEpID0+IHtcclxuICAgICAgICAgICAgc2hlZXQuZmllbGRzLmZvckVhY2goKGZpZWxkLCBpZHgyKSA9PiB7XHJcbiAgICAgICAgICAgICAgbmV3U2hlZXQuZ2V0Q2VsbCgyICsgaWR4MSwgMSArIGlkeDIpLnZhbHVlID0gaXRlbVtmaWVsZF07XHJcbiAgICAgICAgICAgICAgbmV3U2hlZXQuZ2V0Q2VsbCgyICsgaWR4MSwgMSArIGlkeDIpLnN0eWxlID0gdGhpcy4jY2VsbFN0eWxlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGZyb21Sb3cgPSBoYXNEZXNjcmlwdGlvbiA/IDQgOiAzO1xyXG4gICAgaXRlbXMuZm9yRWFjaCgoZSwgaWR4MSkgPT4ge1xyXG4gICAgICBjb2x1bW5zLmZvckVhY2goKGNvbHVtbiwgaWR4MikgPT4ge1xyXG4gICAgICAgIGlmICh0eXBlb2YgZVtjb2x1bW4uZmllbGRdID09PSAnbnVtYmVyJyAmJiAhY29sdW1uLm51bUZtdCkge1xyXG4gICAgICAgICAgLy8gRm9ybWF0IG3hurdjIMSR4buLbmggduG7m2kga2nhu4N1IHPhu5FcclxuICAgICAgICAgIGZpcnN0U2hlZXQuZ2V0Q2VsbChmcm9tUm93ICsgaWR4MSwgMSArIGlkeDIpLnZhbHVlID0gK2VbY29sdW1uLmZpZWxkXTtcclxuICAgICAgICAgIGZpcnN0U2hlZXQuZ2V0Q2VsbChmcm9tUm93ICsgaWR4MSwgMSArIGlkeDIpLm51bUZtdCA9ICcjJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZmlyc3RTaGVldC5nZXRDZWxsKGZyb21Sb3cgKyBpZHgxLCAxICsgaWR4MikudmFsdWUgPSBlW2NvbHVtbi5maWVsZF07XHJcbiAgICAgICAgICBmaXJzdFNoZWV0LmdldENlbGwoZnJvbVJvdyArIGlkeDEsIDEgKyBpZHgyKS5udW1GbXQgPSBjb2x1bW4ubnVtRm10O1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaXJzdFNoZWV0LmdldENlbGwoZnJvbVJvdyArIGlkeDEsIDEgKyBpZHgyKS5zdHlsZSA9IHRoaXMuI2NlbGxTdHlsZTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IGZpbGUgPSBhd2FpdCB3b3JrYm9vay54bHN4LndyaXRlQnVmZmVyKCk7XHJcbiAgICBTZFV0aWxpdHkuZG93bmxvYWRCbG9iKG5ldyBCbG9iKFtmaWxlXSwgeyB0eXBlOiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnIH0pLCBmaWxlTmFtZSk7XHJcbiAgfTtcclxuXHJcbiAgZXhwb3J0Q3VzdG9tID0gYXN5bmMgKG9wdGlvbjogU2RFeHBvcnRDdXN0b21PcHRpb24pID0+IHtcclxuICAgIGNvbnN0IHsgZmlsZU5hbWUsIHNoZWV0cyB9ID0gb3B0aW9uO1xyXG4gICAgaWYgKCFzaGVldHM/Lmxlbmd0aCkge1xyXG4gICAgICB0aGlzLm5vdGlmeVNlcnZpY2Uubm90aWZ5Lndhcm5pbmcoJ1Bo4bqjaSBjw7Mgw610IG5o4bqldCAxIHNoZWV0Jyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHdvcmtib29rID0gbmV3IFdvcmtib29rKCk7XHJcbiAgICBmb3IgKGNvbnN0IFtpZHgsIHNoZWV0XSBvZiBzaGVldHMuZW50cmllcygpKSB7XHJcbiAgICAgIGNvbnN0IHsgbmFtZSwgY29sdW1ucywgY2VsbHMgfSA9IHNoZWV0O1xyXG4gICAgICBjb25zdCB3b3Jrc2hlZXQgPSB3b3JrYm9vay5hZGRXb3Jrc2hlZXQobmFtZSB8fCBgU2hlZXQgJHtpZHggKyAxfWApO1xyXG4gICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zIHx8IFtdKSB7XHJcbiAgICAgICAgd29ya3NoZWV0LmdldENvbHVtbihjb2x1bW4uaW5kZXgpLnN0eWxlID0gY29sdW1uLnN0eWxlO1xyXG4gICAgICAgIHdvcmtzaGVldC5nZXRDb2x1bW4oY29sdW1uLmluZGV4KS53aWR0aCA9IGNvbHVtbi53aWR0aDtcclxuICAgICAgfVxyXG4gICAgICBmb3IgKGNvbnN0IGNlbGwgb2YgY2VsbHMpIHtcclxuICAgICAgICBjb25zdCB7IHJvdywgY29sdW1uLCB2YWx1ZSwgc3R5bGUgfSA9IGNlbGw7XHJcbiAgICAgICAgd29ya3NoZWV0LmdldENlbGwocm93LCBjb2x1bW4pLnN0eWxlID0gc3R5bGUgfHwgd29ya3NoZWV0LmdldENvbHVtbihjb2x1bW4pLnN0eWxlO1xyXG4gICAgICAgIHdvcmtzaGVldC5nZXRDZWxsKHJvdywgY29sdW1uKS52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCBmaWxlID0gYXdhaXQgd29ya2Jvb2sueGxzeC53cml0ZUJ1ZmZlcigpO1xyXG4gICAgU2RVdGlsaXR5LmRvd25sb2FkQmxvYihuZXcgQmxvYihbZmlsZV0sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0JyB9KSwgZmlsZU5hbWUpO1xyXG4gIH07XHJcblxyXG4gIG1lcmdlUERGID0gYXN5bmMgKHVybHM6IHN0cmluZ1tdKSA9PiB7XHJcbiAgICBjb25zdCB7IHNkTWVyZ2VQREYgfSA9IEFQSTtcclxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZnVuY3Rpb25Vcmx9JHtzZE1lcmdlUERGfWA7XHJcbiAgICBjb25zdCBidWZmZXIgPSBhd2FpdCB0aGlzLmFwaVNlcnZpY2UucG9zdChcclxuICAgICAgdXJsLFxyXG4gICAgICB7XHJcbiAgICAgICAgdXJscyxcclxuICAgICAgfSxcclxuICAgICAgbnVsbCxcclxuICAgICAge1xyXG4gICAgICAgIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJyxcclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIFNkVXRpbGl0eS5kb3dubG9hZEJsb2IobmV3IEJsb2IoW2J1ZmZlcl0sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL3BkZicgfSkpO1xyXG4gIH07XHJcblxyXG4gIHVwbG9hZFhsc3ggPSBhc3luYyAoKTogUHJvbWlzZTx7IGl0ZW1zOiBhbnlbXTsgZmlsZTogRmlsZSB9IHwgdW5kZWZpbmVkPiA9PiB7XHJcbiAgICByZXR1cm4gYXdhaXQgU2RVdGlsaXR5LnVwbG9hZCh7XHJcbiAgICAgIGV4dGVuc2lvbnM6IFsneGxzeCddLFxyXG4gICAgICBtYXhTaXplSW5NYjogMTAsXHJcbiAgICB9KS50aGVuKGZpbGUgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5wYXJzZVhsc3goZmlsZSk7XHJcbiAgICB9KTtcclxuICB9O1xyXG5cclxuICBwYXJzZVhsc3ggPSBhc3luYyAoZmlsZTogRmlsZSk6IFByb21pc2U8eyBpdGVtczogYW55W107IGZpbGU6IEZpbGUgfSB8IHVuZGVmaW5lZD4gPT4ge1xyXG4gICAgaWYgKGZpbGUpIHtcclxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHsgaXRlbXM6IGFueVtdOyBmaWxlOiBGaWxlIH0+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICBjb25zdCB3YiA9IG5ldyBXb3JrYm9vaygpO1xyXG4gICAgICAgIGNvbnN0IHJlYWRlcjogRmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICAgICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IHJlYWRlci5yZXN1bHQgYXMgQXJyYXlCdWZmZXI7XHJcbiAgICAgICAgICBpZiAoIWJ1ZmZlcikge1xyXG4gICAgICAgICAgICByZWplY3QoJ0PDsyBs4buXaSB44bqjeSByYSBraGkgxJHhu41jIGZpbGUnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgd2IueGxzeC5sb2FkKGJ1ZmZlcikudGhlbih3b3JrYm9vayA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNoZWV0ID0gd29ya2Jvb2sud29ya3NoZWV0c1swXTtcclxuICAgICAgICAgICAgaWYgKCFzaGVldCkge1xyXG4gICAgICAgICAgICAgIHJlamVjdCgnS2jDtG5nIHTDrG0gdGjhuqV5IGThu68gbGnhu4d1Jyk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1zOiBhbnlbXSA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBoZWFkZXJzID0gc2hlZXQuZ2V0Um93KDEpLnZhbHVlcztcclxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcclxuICAgICAgICAgICAgICBzaGVldC5lYWNoUm93KChyb3csIHJvd0luZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IGhhc1ZhbHVlcywgdmFsdWVzIH0gPSByb3c7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhyb3csIGhhc1ZhbHVlcywgdmFsdWVzKVxyXG4gICAgICAgICAgICAgICAgaWYgKGhhc1ZhbHVlcyAmJiByb3dJbmRleCA+IDEpIHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbTogYW55ID0ge307XHJcbiAgICAgICAgICAgICAgICAgIGhlYWRlcnMuZm9yRWFjaCgoY2VsbFZhbHVlLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjZWxsVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gY2VsbFZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtW2ZpZWxkXSA9IHZhbHVlc1tpbmRleF07XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW1bZmllbGRdID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtW2ZpZWxkXSA9IGl0ZW1bZmllbGRdLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtW2ZpZWxkXSA9PT0gJycgfHwgaXRlbVtmaWVsZF0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtW2ZpZWxkXSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICByZXNvbHZlKHtcclxuICAgICAgICAgICAgICAgIGl0ZW1zLFxyXG4gICAgICAgICAgICAgICAgZmlsZSxcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoZmlsZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBpdGVtczogW10sXHJcbiAgICAgICAgZmlsZTogbnVsbCxcclxuICAgICAgfTtcclxuICAgIH1cclxuICB9O1xyXG59XHJcbiJdfQ==
|
|
498
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiQzovVXNlcnMvbmdoaWF0dDE1X29uZW1vdW50L0RvY3VtZW50cy9saWItY29yZS11aS9wcm9qZWN0cy9zZC1jb3JlL2V4cG9ydC8iLCJzb3VyY2VzIjpbInNyYy9saWIvZXhwb3J0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLElBQUksTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsUUFBUSxFQUFTLE1BQU0sU0FBUyxDQUFDO0FBQzFDLE9BQU8sRUFBb0MsR0FBRyxFQUFzQyxNQUFNLGdCQUFnQixDQUFDO0FBQzNHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUEwQixNQUFNLHlCQUF5QixDQUFDOzs7OztBQUtsRixNQUFNLE9BQU8sZUFBZTtJQStIMUIsWUFDVSxVQUF3QixFQUN4QixhQUE4QixFQUNPLHFCQUE2QztRQUZsRixlQUFVLEdBQVYsVUFBVSxDQUFjO1FBQ3hCLGtCQUFhLEdBQWIsYUFBYSxDQUFpQjtRQUNPLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBd0I7UUE3RzVGLHNCQUE4QjtZQUM1QixNQUFNLEVBQUU7Z0JBQ04sTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTtnQkFDekIsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTtnQkFDdkIsS0FBSyxFQUFFLEVBQUUsS0FB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O2lCQUNYLENBQUM7YUFDSDtRQUNILENBQUMsQ0FBQSxDQUFDO0lBN1hDLENBQUM7SUFsSUosSUFBWSxXQUFXOztRQUNyQixhQUFPLElBQUksQ0FBQyxxQkFBcUIsMENBQUUsV0FBVyxDQUFDO0lBQ2pELENBQUM7SUFFRCxJQUFZLE1BQU07UUFDaEIsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUM7UUFDcEQsT0FBTyxHQUFHLE9BQU8sSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBWSxVQUFVO1FBQ3BCLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUM7UUFDOUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNYLE9BQU87U0FDUjtRQUNELElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFO1lBQzlCLE9BQU8sTUFBTSxDQUFDO1NBQ2Y7UUFDRCxPQUFPLE1BQU0sRUFBRSxDQUFDO0lBQ2xCLENBQUM7Ozs7O1lBdEJGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7O1lBWFEsWUFBWTtZQU1aLGVBQWU7NENBd0luQixNQUFNLFNBQUMsZUFBZSxjQUFHLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU2RBcGlTZXJ2aWNlIH0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS9hcGknO1xyXG5pbXBvcnQgKiBhcyB1dWlkIGZyb20gJ3V1aWQnO1xyXG5pbXBvcnQgaGFzaCBmcm9tICdvYmplY3QtaGFzaCc7XHJcbmltcG9ydCB7IEV4cG9ydFRvQ3N2IH0gZnJvbSAnZXhwb3J0LXRvLWNzdic7XHJcbmltcG9ydCB7IFdvcmtib29rLCBTdHlsZSB9IGZyb20gJ2V4Y2VsanMnO1xyXG5pbXBvcnQgeyBTZEV4cG9ydFRlbXBsYXRlLCBTZEV4cG9ydE9wdGlvbiwgQVBJLCBTZEV4cG9ydEZpbGUsIFNkRXhwb3J0Q3VzdG9tT3B0aW9uIH0gZnJvbSAnLi9leHBvcnQubW9kZWwnO1xyXG5pbXBvcnQgeyBTZE5vdGlmeVNlcnZpY2UgfSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL25vdGlmeSc7XHJcbmltcG9ydCB7IEZJUkVCQVNFX0NPTkZJRywgSUZpcmViYXNlQ29uZmlndXJhdGlvbiB9IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvY29tbW9uJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZEV4cG9ydFNlcnZpY2Uge1xyXG4gIHByaXZhdGUgZ2V0IGZ1bmN0aW9uVXJsKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZmlyZWJhc2VDb25maWd1cmF0aW9uPy5mdW5jdGlvblVybDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0IGZvbGRlcigpIHtcclxuICAgIGNvbnN0IHsgcHJvamVjdCwgZW52IH0gPSB0aGlzLmZpcmViYXNlQ29uZmlndXJhdGlvbjtcclxuICAgIHJldHVybiBgJHtwcm9qZWN0fS0ke2Vudn1gO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXQgdXNlckZvbGRlcigpIHtcclxuICAgIGNvbnN0IHsgZm9sZGVyIH0gPSB0aGlzLmZpcmViYXNlQ29uZmlndXJhdGlvbjtcclxuICAgIGlmICghZm9sZGVyKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgZm9sZGVyID09PSAnc3RyaW5nJykge1xyXG4gICAgICByZXR1cm4gZm9sZGVyO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZvbGRlcigpO1xyXG4gIH1cclxuXHJcbiAgI2ZpZWxkU3R5bGU6IFBhcnRpYWw8U3R5bGU+ID0ge1xyXG4gICAgYm9yZGVyOiB7XHJcbiAgICAgIGJvdHRvbTogeyBzdHlsZTogJ3RoaW4nIH0sXHJcbiAgICAgIGxlZnQ6IHsgc3R5bGU6ICd0aGluJyB9LFxyXG4gICAgICByaWdodDogeyBzdHlsZTogJ3RoaW4nIH0sXHJcbiAgICB9LFxyXG4gICAgYWxpZ25tZW50OiB7XHJcbiAgICAgIHZlcnRpY2FsOiAnbWlkZGxlJyxcclxuICAgICAgaG9yaXpvbnRhbDogJ2NlbnRlcicsXHJcbiAgICAgIHdyYXBUZXh0OiB0cnVlLFxyXG4gICAgfSxcclxuICAgIGZvbnQ6IHtcclxuICAgICAgYm9sZDogdHJ1ZSxcclxuICAgICAgc2l6ZTogMTEsXHJcbiAgICAgIGNvbG9yOiB7IGFyZ2I6ICcwMDAwMDAnIH0sXHJcbiAgICB9LFxyXG4gICAgZmlsbDoge1xyXG4gICAgICB0eXBlOiAncGF0dGVybicsXHJcbiAgICAgIHBhdHRlcm46ICdzb2xpZCcsXHJcbiAgICAgIGZnQ29sb3I6IHtcclxuICAgICAgICBhcmdiOiAnRkFGQUZBJyxcclxuICAgICAgfSxcclxuICAgIH0sXHJcbiAgfTtcclxuICAjdGl0bGVDb2xvciA9ICdGRkZGRkYnO1xyXG4gICN0aXRsZUZnQ29sb3IgPSAnMTQzMTgwJztcclxuICAjdGl0bGVTdHlsZTogUGFydGlhbDxTdHlsZT4gPSB7XHJcbiAgICBib3JkZXI6IHtcclxuICAgICAgYm90dG9tOiB7IHN0eWxlOiAndGhpbicgfSxcclxuICAgICAgbGVmdDogeyBzdHlsZTogJ3RoaW4nIH0sXHJcbiAgICAgIHJpZ2h0OiB7IHN0eWxlOiAndGhpbicgfSxcclxuICAgIH0sXHJcbiAgICBhbGlnbm1lbnQ6IHtcclxuICAgICAgdmVydGljYWw6ICdtaWRkbGUnLFxyXG4gICAgICBob3Jpem9udGFsOiAnY2VudGVyJyxcclxuICAgICAgd3JhcFRleHQ6IHRydWUsXHJcbiAgICB9LFxyXG4gICAgZm9udDoge1xyXG4gICAgICBib2xkOiB0cnVlLFxyXG4gICAgICBzaXplOiAxMSxcclxuICAgICAgY29sb3I6IHsgYXJnYjogdGhpcy4jdGl0bGVDb2xvciB9LFxyXG4gICAgfSxcclxuICAgIGZpbGw6IHtcclxuICAgICAgdHlwZTogJ3BhdHRlcm4nLFxyXG4gICAgICBwYXR0ZXJuOiAnc29saWQnLFxyXG4gICAgICBmZ0NvbG9yOiB7XHJcbiAgICAgICAgYXJnYjogdGhpcy4jdGl0bGVGZ0NvbG9yLFxyXG4gICAgICB9LFxyXG4gICAgfSxcclxuICB9O1xyXG5cclxuICAjcmVxdWlyZWRTdHlsZTogUGFydGlhbDxTdHlsZT4gPSB7XHJcbiAgICBib3JkZXI6IHtcclxuICAgICAgYm90dG9tOiB7IHN0eWxlOiAndGhpbicgfSxcclxuICAgICAgbGVmdDogeyBzdHlsZTogJ3RoaW4nIH0sXHJcbiAgICAgIHJpZ2h0OiB7IHN0eWxlOiAndGhpbicgfSxcclxuICAgIH0sXHJcbiAgICBhbGlnbm1lbnQ6IHtcclxuICAgICAgdmVydGljYWw6ICdtaWRkbGUnLFxyXG4gICAgICBob3Jpem9udGFsOiAnY2VudGVyJyxcclxuICAgICAgd3JhcFRleHQ6IHRydWUsXHJcbiAgICB9LFxyXG4gICAgZm9udDoge1xyXG4gICAgICBpdGFsaWM6IHRydWUsXHJcbiAgICAgIHNpemU6IDExLFxyXG4gICAgICBjb2xvcjogeyBhcmdiOiAnRkZGRkZGJyB9LFxyXG4gICAgfSxcclxuICAgIGZpbGw6IHtcclxuICAgICAgdHlwZTogJ3BhdHRlcm4nLFxyXG4gICAgICBwYXR0ZXJuOiAnc29saWQnLFxyXG4gICAgICBmZ0NvbG9yOiB7XHJcbiAgICAgICAgYXJnYjogJ0ZGMTc0NCcsXHJcbiAgICAgIH0sXHJcbiAgICB9LFxyXG4gIH07XHJcblxyXG4gICNkZXNjcmlwdGlvblN0eWxlOiBQYXJ0aWFsPFN0eWxlPiA9IHtcclxuICAgIGJvcmRlcjoge1xyXG4gICAgICBib3R0b206IHsgc3R5bGU6ICd0aGluJyB9LFxyXG4gICAgICBsZWZ0OiB7IHN0eWxlOiAndGhpbicgfSxcclxuICAgICAgcmlnaHQ6IHsgc3R5bGU6ICd0aGluJyB9LFxyXG4gICAgfSxcclxuICAgIGFsaWdubWVudDoge1xyXG4gICAgICB3cmFwVGV4dDogdHJ1ZSxcclxuICAgIH0sXHJcbiAgICBmb250OiB7XHJcbiAgICAgIGl0YWxpYzogdHJ1ZSxcclxuICAgICAgc2l6ZTogOSxcclxuICAgICAgY29sb3I6IHsgYXJnYjogJzAwMDAwMCcgfSxcclxuICAgIH0sXHJcbiAgICBmaWxsOiB7XHJcbiAgICAgIHR5cGU6ICdwYXR0ZXJuJyxcclxuICAgICAgcGF0dGVybjogJ3NvbGlkJyxcclxuICAgICAgZmdDb2xvcjoge1xyXG4gICAgICAgIGFyZ2I6ICdDRkQ4REMnLFxyXG4gICAgICB9LFxyXG4gICAgfSxcclxuICB9O1xyXG5cclxuICAjY2VsbFN0eWxlOiBQYXJ0aWFsPFN0eWxlPiA9IHtcclxuICAgIGFsaWdubWVudDoge1xyXG4gICAgICB2ZXJ0aWNhbDogJ21pZGRsZScsXHJcbiAgICAgIHdyYXBUZXh0OiB0cnVlLFxyXG4gICAgfSxcclxuICB9O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgYXBpU2VydmljZTogU2RBcGlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBub3RpZnlTZXJ2aWNlOiBTZE5vdGlmeVNlcnZpY2UsXHJcbiAgICBASW5qZWN0KEZJUkVCQVNFX0NPTkZJRykgQE9wdGlvbmFsKCkgcHJpdmF0ZSBmaXJlYmFzZUNvbmZpZ3VyYXRpb246IElGaXJlYmFzZUNvbmZpZ3VyYXRpb25cclxuICApIHt9XHJcblxyXG4gICNkaXJlY3RvcnkgPSAoa2V5OiBzdHJpbmcsIGdyb3VwOiBzdHJpbmcpID0+IHtcclxuICAgIGxldCBoYXNoZWRGb2xkZXIgPSBoYXNoKHtcclxuICAgICAgZm9sZGVyOiB0aGlzLmZvbGRlcixcclxuICAgICAgdXNlckZvbGRlcjogdGhpcy51c2VyRm9sZGVyLFxyXG4gICAgfSk7XHJcbiAgICBpZiAoIWdyb3VwKSB7XHJcbiAgICAgIHJldHVybiBgZGlyMT0ke3RoaXMuZm9sZGVyfSZkaXIyPVUtJHtoYXNoZWRGb2xkZXJ9JmRpcjM9JHtrZXkgfHwgJyd9YDtcclxuICAgIH1cclxuICAgIGhhc2hlZEZvbGRlciA9IGhhc2goe1xyXG4gICAgICBmb2xkZXI6IHRoaXMuZm9sZGVyLFxyXG4gICAgICBncm91cCxcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGBkaXIxPSR7dGhpcy5mb2xkZXJ9JmRpcjI9Ry0ke2hhc2hlZEZvbGRlcn0mZGlyMz0ke2tleSB8fCAnJ31gO1xyXG4gIH07XHJcblxyXG4gIGdlbmVyYXRlVGVtcGxhdGUgPSBhc3luYyAodGVtcGxhdGU6IFNkRXhwb3J0VGVtcGxhdGUpID0+IHtcclxuICAgIGNvbnN0IHsgZmlsZU5hbWUsIGNvbHVtbnMsIHNoZWV0cyB9ID0gdGVtcGxhdGU7XHJcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29sdW1ucykpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeGNlbCB0ZW1wbGF0ZSBjb2x1bW5zIG11c3QgYmUgYW4gYXJyYXknKTtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3QgW2lkeCwgY29sdW1uXSBvZiBjb2x1bW5zLmVudHJpZXMoKSkge1xyXG4gICAgICBpZiAoIWNvbHVtbi5maWVsZCkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ29sdW1uICR7aWR4ICsgMX06IEZpZWxkIGlzIHJlcXVpcmVkYCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFjb2x1bW4udGl0bGUpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbHVtbiAke2lkeCArIDF9OiBUaXRsZSBpcyByZXF1aXJlZGApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCBoYXNEZXNjcmlwdGlvbiA9IGNvbHVtbnMuc29tZShjb2x1bW4gPT4gY29sdW1uLmRlc2NyaXB0aW9uKTtcclxuICAgIGNvbnN0IHdvcmtib29rID0gbmV3IFdvcmtib29rKCk7IC8vYXdhaXQgWGxzeFBvcHVsYXRlLmZyb21CbGFua0FzeW5jKCk7IC8vIMSQ4buNYyBmaWxlIHNhdSBraGkgxJHDoyBkb3dubG9hZFxyXG4gICAgY29uc3QgZmlyc3RTaGVldCA9IHdvcmtib29rLmFkZFdvcmtzaGVldCgndGVtcGxhdGUnKTsgLy8gTOG6pXkgcmEgc2hlZXQgxJHhuqd1IHRpw6puXHJcbiAgICBjb2x1bW5zLmZvckVhY2goKGNvbHVtbiwgaW5kZXgpID0+IHtcclxuICAgICAgY29uc3QgeyByZXF1aXJlZCwgZmlsbCwgZm9udENvbG9yIH0gPSBjb2x1bW47XHJcbiAgICAgIGNvbnN0IGNlbGxGaWVsZCA9IGZpcnN0U2hlZXQuZ2V0Q2VsbCgxLCBpbmRleCArIDEpO1xyXG4gICAgICBjb25zdCBjZWxsVGl0bGUgPSBmaXJzdFNoZWV0LmdldENlbGwoMiwgaW5kZXggKyAxKTtcclxuICAgICAgY29uc3QgY2VsbERlc2NyaXB0aW9uID0gZmlyc3RTaGVldC5nZXRDZWxsKDMsIGluZGV4ICsgMSk7XHJcbiAgICAgIGxldCB3aWR0aCA9IDEyMDtcclxuICAgICAgaWYgKGNvbHVtbi53aWR0aCAmJiBjb2x1bW4ud2lkdGguZW5kc1dpdGgoJ3B4JykpIHtcclxuICAgICAgICB3aWR0aCA9ICtjb2x1bW4ud2lkdGgucmVwbGFjZSgncHgnLCAnJyk7XHJcbiAgICAgIH1cclxuICAgICAgZmlyc3RTaGVldC5nZXRDb2x1bW4oaW5kZXggKyAxKS53aWR0aCA9IHdpZHRoIC8gNyB8fCAyMDtcclxuICAgICAgY2VsbEZpZWxkLnN0eWxlID0gdGhpcy4jZmllbGRTdHlsZTtcclxuICAgICAgaWYgKHJlcXVpcmVkKSB7XHJcbiAgICAgICAgY2VsbEZpZWxkLnN0eWxlID0gdGhpcy4jcmVxdWlyZWRTdHlsZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjZWxsRmllbGQuc3R5bGUgPSB0aGlzLiNmaWVsZFN0eWxlO1xyXG4gICAgICB9XHJcbiAgICAgIGNlbGxUaXRsZS5zdHlsZSA9IHtcclxuICAgICAgICAuLi50aGlzLiN0aXRsZVN0eWxlLFxyXG4gICAgICAgIGZvbnQ6IHtcclxuICAgICAgICAgIC4uLnRoaXMuI3RpdGxlU3R5bGU/LmZvbnQsXHJcbiAgICAgICAgICBjb2xvcjoge1xyXG4gICAgICAgICAgICAuLi50aGlzLiN0aXRsZVN0eWxlPy5mb250Py5jb2xvcixcclxuICAgICAgICAgICAgYXJnYjogZm9udENvbG9yIHx8IHRoaXMuI3RpdGxlU3R5bGU/LmZvbnQ/LmNvbG9yPy5hcmdiLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGZpbGw6IHtcclxuICAgICAgICAgIHR5cGU6ICdwYXR0ZXJuJyxcclxuICAgICAgICAgIHBhdHRlcm46ICdzb2xpZCcsXHJcbiAgICAgICAgICBmZ0NvbG9yOiB7XHJcbiAgICAgICAgICAgIGFyZ2I6IGZpbGwgfHwgdGhpcy4jdGl0bGVGZ0NvbG9yLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICB9O1xyXG4gICAgICBjZWxsRmllbGQudmFsdWUgPSBjb2x1bW4uZmllbGQ7XHJcbiAgICAgIGNlbGxUaXRsZS52YWx1ZSA9IGNvbHVtbi50aXRsZTtcclxuICAgICAgaWYgKGhhc0Rlc2NyaXB0aW9uKSB7XHJcbiAgICAgICAgY2VsbERlc2NyaXB0aW9uLnN0eWxlID0gdGhpcy4jZGVzY3JpcHRpb25TdHlsZTtcclxuICAgICAgICBjZWxsRGVzY3JpcHRpb24udmFsdWUgPSBjb2x1bW4uZGVzY3JpcHRpb24gfHwgJyc7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgaWYgKHNoZWV0cz8ubGVuZ3RoKSB7XHJcbiAgICAgIGZvciAoY29uc3Qgc2hlZXQgb2Ygc2hlZXRzKSB7XHJcbiAgICAgICAgaWYgKHNoZWV0Lm5hbWUgJiYgQXJyYXkuaXNBcnJheShzaGVldC5pdGVtcykgJiYgQXJyYXkuaXNBcnJheShzaGVldC5maWVsZHMpKSB7XHJcbiAgICAgICAgICBjb25zdCBuZXdTaGVldCA9IHdvcmtib29rLmFkZFdvcmtzaGVldChzaGVldC5uYW1lKTtcclxuICAgICAgICAgIHNoZWV0LmZpZWxkcy5mb3JFYWNoKChmaWVsZCwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgbmV3U2hlZXQuZ2V0Q29sdW1uKGluZGV4ICsgMSkud2lkdGggPSAzMDtcclxuICAgICAgICAgICAgbmV3U2hlZXQuZ2V0Q2VsbCgxLCBpbmRleCArIDEpLnN0eWxlID0gdGhpcy4jdGl0bGVTdHlsZTtcclxuICAgICAgICAgICAgbmV3U2hlZXQuZ2V0Q2VsbCgxLCBpbmRleCArIDEpLnZhbHVlID0gZmllbGQ7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHNoZWV0Lml0ZW1zLmZvckVhY2goKGl0ZW0sIGlkeDEpID0+IHtcclxuICAgICAgICAgICAgc2hlZXQuZmllbGRzLmZvckVhY2goKGZpZWxkLCBpZHgyKSA9PiB7XHJcbiAgICAgICAgICAgICAgbmV3U2hlZXQuZ2V0Q2VsbCgyICsgaWR4MSwgMSArIGlkeDIpLnZhbHVlID0gaXRlbVtmaWVsZF07XHJcbiAgICAgICAgICAgICAgbmV3U2hlZXQuZ2V0Q2VsbCgyICsgaWR4MSwgMSArIGlkeDIpLnN0eWxlID0gdGhpcy4jY2VsbFN0eWxlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgZmlsZSA9IGF3YWl0IHdvcmtib29rLnhsc3gud3JpdGVCdWZmZXIoKTtcclxuICAgIFNkVXRpbGl0eS5kb3dubG9hZEJsb2IobmV3IEJsb2IoW2ZpbGVdLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCcgfSksIGZpbGVOYW1lKTtcclxuICB9O1xyXG5cclxuICB1cGxvYWRUZW1wbGF0ZSA9IGFzeW5jIChhcmdzOiB7IGtleTogc3RyaW5nOyBncm91cD86IHN0cmluZzsgdmFsaWRhdG9yPzogKGZpbGVOYW1lOiBzdHJpbmcpID0+IHN0cmluZyB9KTogUHJvbWlzZTxTZEV4cG9ydEZpbGU+ID0+IHtcclxuICAgIGNvbnN0IHsga2V5LCBncm91cCwgdmFsaWRhdG9yIH0gPSBhcmdzO1xyXG4gICAgY29uc3QgeyB1cGxvYWRUZW1wbGF0ZSB9ID0gQVBJO1xyXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5mdW5jdGlvblVybH0ke3VwbG9hZFRlbXBsYXRlfT8ke3RoaXMuI2RpcmVjdG9yeShrZXksIGdyb3VwKX1gO1xyXG4gICAgY29uc3QgZmlsZSA9IGF3YWl0IFNkVXRpbGl0eS51cGxvYWQoe1xyXG4gICAgICBleHRlbnNpb25zOiBbJ3hsc3gnXSxcclxuICAgICAgbWF4U2l6ZUluTWI6IDAuMSxcclxuICAgICAgdmFsaWRhdG9yLFxyXG4gICAgfSk7XHJcbiAgICBpZiAoZmlsZSkge1xyXG4gICAgICBjb25zdCB7IGZpbGVQYXRoLCBmaWxlTmFtZSB9ID0gYXdhaXQgdGhpcy5hcGlTZXJ2aWNlLnVwbG9hZCh1cmwsIGZpbGUpLmNhdGNoKChlcnI6IEVycm9yKSA9PiB7XHJcbiAgICAgICAgdGhpcy5ub3RpZnlTZXJ2aWNlLm5vdGlmeS53YXJuaW5nKGVycj8ubWVzc2FnZSk7XHJcbiAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBmaWxlUGF0aCxcclxuICAgICAgICBmaWxlTmFtZSxcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH07XHJcblxyXG4gIGdlbmVyYXRlVXBsb2FkVGVtcGxhdGUgPSBhc3luYyAoYXJnczogeyBrZXk6IHN0cmluZzsgdGVtcGxhdGU6IFNkRXhwb3J0VGVtcGxhdGU7IGdyb3VwPzogc3RyaW5nIH0pID0+IHtcclxuICAgIGNvbnN0IHsga2V5LCB0ZW1wbGF0ZSwgZ3JvdXAgfSA9IGFyZ3M7XHJcbiAgICBjb25zdCB7IGdlbmVyYXRlVXBsb2FkVGVtcGxhdGUgfSA9IEFQSTtcclxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZnVuY3Rpb25Vcmx9JHtnZW5lcmF0ZVVwbG9hZFRlbXBsYXRlfT8ke3RoaXMuI2RpcmVjdG9yeShrZXksIGdyb3VwKX1gO1xyXG4gICAgY29uc3QgeyBmaWxlUGF0aCwgZmlsZU5hbWUgfSA9IGF3YWl0IHRoaXMuYXBpU2VydmljZS5wb3N0KHVybCwgdGVtcGxhdGUpO1xyXG4gICAgcmV0dXJuIHsgZmlsZVBhdGgsIGZpbGVOYW1lIH07XHJcbiAgfTtcclxuXHJcbiAgcmVtb3ZlRmlsZSA9IGFzeW5jIChhcmdzOiB7IGtleTogc3RyaW5nOyBncm91cD86IHN0cmluZzsgZmlsZU5hbWU/OiBzdHJpbmcgfSkgPT4ge1xyXG4gICAgY29uc3QgeyBrZXksIGdyb3VwLCBmaWxlTmFtZSB9ID0gYXJncztcclxuICAgIGNvbnN0IHsgcmVtb3ZlRmlsZSB9ID0gQVBJO1xyXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5mdW5jdGlvblVybH0ke3JlbW92ZUZpbGV9PyR7dGhpcy4jZGlyZWN0b3J5KGtleSwgZ3JvdXApfSZuYW1lPSR7ZmlsZU5hbWV9YDtcclxuICAgIGF3YWl0IHRoaXMuYXBpU2VydmljZS5wb3N0KHVybCk7XHJcbiAgfTtcclxuXHJcbiAgZmlsZXNJbkZvbGRlciA9IGFzeW5jIChhcmdzOiB7IGtleTogc3RyaW5nOyBncm91cD86IHN0cmluZyB9KTogUHJvbWlzZTxTZEV4cG9ydEZpbGVbXT4gPT4ge1xyXG4gICAgaW50ZXJmYWNlIEZpbGVzSW5Gb2xkZXJSZXMge1xyXG4gICAgICBkaXJlY3Rvcnk6IHN0cmluZztcclxuICAgICAgZmlsZXM6IHtcclxuICAgICAgICBwdWJsaWNVcmw6IHN0cmluZztcclxuICAgICAgICBmdWxsUGF0aDogc3RyaW5nO1xyXG4gICAgICAgIG5hbWU6IHN0cmluZztcclxuICAgICAgfVtdO1xyXG4gICAgfVxyXG4gICAgY29uc3QgeyBrZXksIGdyb3VwIH0gPSBhcmdzO1xyXG4gICAgY29uc3QgeyBmaWxlc0luRm9sZGVyIH0gPSBBUEk7XHJcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmZ1bmN0aW9uVXJsfSR7ZmlsZXNJbkZvbGRlcn0/JHt0aGlzLiNkaXJlY3Rvcnkoa2V5LCBncm91cCl9YDtcclxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuYXBpU2VydmljZS5nZXQ8RmlsZXNJbkZvbGRlclJlcz4odXJsKTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHJlcy5maWxlcz8ubWFwKGUgPT4gKHtcclxuICAgICAgICBmaWxlUGF0aDogZS5wdWJsaWNVcmwsXHJcbiAgICAgICAgZmlsZU5hbWU6IGUubmFtZSxcclxuICAgICAgfSkpIHx8IFtdXHJcbiAgICApO1xyXG4gIH07XHJcblxyXG4gIGRvd25sb2FkID0gKGZpbGVQYXRoOiBzdHJpbmcsIGZpbGVOYW1lPzogc3RyaW5nKSA9PiB7XHJcbiAgICBjb25zdCBsaW5rOiBhbnkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICBsaW5rLmRvd25sb2FkID0gYCR7ZmlsZU5hbWUgfHwgdXVpZC52NCgpfS54bHN4YDtcclxuICAgIGxpbmsuaHJlZiA9IGZpbGVQYXRoO1xyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcclxuICAgIGxpbmsuY2xpY2soKTtcclxuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluayk7XHJcbiAgfTtcclxuXHJcbiAgZXhwb3J0QnlUZW1wbGF0ZSA9IGFzeW5jIChhcmdzOiB7IGZpbGVQYXRoOiBzdHJpbmc7IGNvbHVtbnM6IGFueVtdOyBpdGVtczogYW55W107IGZpbGVOYW1lPzogc3RyaW5nIH0pID0+IHtcclxuICAgIGNvbnN0IHsgZmlsZVBhdGgsIGNvbHVtbnMsIGl0ZW1zLCBmaWxlTmFtZSB9ID0gYXJncztcclxuICAgIGNvbnN0IHsgc2RFeHBvcnRCeVRlbXBsYXRlIH0gPSBBUEk7XHJcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmZ1bmN0aW9uVXJsfSR7c2RFeHBvcnRCeVRlbXBsYXRlfWA7XHJcbiAgICBjb25zdCBidWZmZXIgPSBhd2FpdCB0aGlzLmFwaVNlcnZpY2UucG9zdChcclxuICAgICAgdXJsLFxyXG4gICAgICB7XHJcbiAgICAgICAgZmlsZVBhdGgsXHJcbiAgICAgICAgY29sdW1ucyxcclxuICAgICAgICBpdGVtcyxcclxuICAgICAgICBmaWxlTmFtZSxcclxuICAgICAgfSxcclxuICAgICAgbnVsbCxcclxuICAgICAge1xyXG4gICAgICAgIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJyxcclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbYnVmZmVyXSwgeyB0eXBlOiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQ7YmFzZTY0LCcgfSk7XHJcbiAgICBTZFV0aWxpdHkuZG93bmxvYWRCbG9iKGJsb2IsIGZpbGVOYW1lKTtcclxuICB9O1xyXG5cclxuICBleHBvcnRDU1YgPSBhc3luYyAob3B0aW9uOiBTZEV4cG9ydE9wdGlvbikgPT4ge1xyXG4gICAgY29uc3QgeyBjb2x1bW5zLCBpdGVtcywgZmlsZU5hbWUgfSA9IG9wdGlvbjtcclxuICAgIGNvbnN0IGhlYWRlckNTViA9IHt9O1xyXG4gICAgZm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG4gICAgICBoZWFkZXJDU1ZbY29sdW1uLmZpZWxkXSA9IGNvbHVtbi50aXRsZTtcclxuICAgIH1cclxuICAgIGNvbnN0IGNzdkV4cG9ydGVyID0gbmV3IEV4cG9ydFRvQ3N2KHtcclxuICAgICAgZmlsZW5hbWU6IGAke2ZpbGVOYW1lIHx8ICdDU1YnfV8ke0RhdGUudG9Gb3JtYXQobmV3IERhdGUoKSwgJ3l5eXktTU0tZGQtSEgtbW0tc3MnKX1gLFxyXG4gICAgICBmaWVsZFNlcGFyYXRvcjogJywnLFxyXG4gICAgICBxdW90ZVN0cmluZ3M6ICdcIicsXHJcbiAgICAgIGRlY2ltYWxTZXBhcmF0b3I6ICcuJyxcclxuICAgICAgc2hvd0xhYmVsczogdHJ1ZSxcclxuICAgICAgc2hvd1RpdGxlOiBmYWxzZSxcclxuICAgICAgdGl0bGU6IGZpbGVOYW1lIHx8ICdDU1YnLFxyXG4gICAgICB1c2VCb206IHRydWUsXHJcbiAgICB9KTtcclxuICAgIGNzdkV4cG9ydGVyLmdlbmVyYXRlQ3N2KFtoZWFkZXJDU1YsIC4uLml0ZW1zXSk7XHJcbiAgfTtcclxuXHJcbiAgZXhwb3J0ID0gYXN5bmMgKG9wdGlvbjogU2RFeHBvcnRPcHRpb24pID0+IHtcclxuICAgIGNvbnN0IHsgY29sdW1ucywgaXRlbXMsIGZpbGVOYW1lLCBzaGVldHMgfSA9IG9wdGlvbjtcclxuICAgIGxldCBoYXNEZXNjcmlwdGlvbiA9IGZhbHNlO1xyXG4gICAgZm9yIChjb25zdCBbaWR4LCBjb2x1bW5dIG9mIGNvbHVtbnMuZW50cmllcygpKSB7XHJcbiAgICAgIGlmICghY29sdW1uLmZpZWxkKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb2x1bW4gJHtpZHggKyAxfTogRmllbGQgaXMgcmVxdWlyZWRgKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIWNvbHVtbi50aXRsZSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ29sdW1uICR7aWR4ICsgMX06IFRpdGxlIGlzIHJlcXVpcmVkYCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbHVtbi5kZXNjcmlwdGlvbikge1xyXG4gICAgICAgIGhhc0Rlc2NyaXB0aW9uID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3Qgd29ya2Jvb2sgPSBuZXcgV29ya2Jvb2soKTsgLy9hd2FpdCBYbHN4UG9wdWxhdGUuZnJvbUJsYW5rQXN5bmMoKTsgLy8gxJDhu41jIGZpbGUgc2F1IGtoaSDEkcOjIGRvd25sb2FkXHJcbiAgICBjb25zdCBmaXJzdFNoZWV0ID0gd29ya2Jvb2suYWRkV29ya3NoZWV0KCdkYXRhJyk7IC8vIEzhuqV5IHJhIHNoZWV0IMSR4bqndSB0acOqblxyXG4gICAgY29sdW1ucy5mb3JFYWNoKChjb2x1bW4sIGluZGV4KSA9PiB7XHJcbiAgICAgIGxldCB3aWR0aCA9IDEyMDtcclxuICAgICAgaWYgKGNvbHVtbi53aWR0aCAmJiBjb2x1bW4ud2lkdGguZW5kc1dpdGgoJ3B4JykpIHtcclxuICAgICAgICB3aWR0aCA9ICtjb2x1bW4ud2lkdGgucmVwbGFjZSgncHgnLCAnJyk7XHJcbiAgICAgIH1cclxuICAgICAgZmlyc3RTaGVldC5nZXRDb2x1bW4oaW5kZXggKyAxKS53aWR0aCA9IHdpZHRoIC8gNyB8fCAyMDtcclxuICAgICAgZmlyc3RTaGVldC5nZXRDZWxsKDEsIGluZGV4ICsgMSkuc3R5bGUgPSB0aGlzLiNmaWVsZFN0eWxlO1xyXG4gICAgICBpZiAoY29sdW1uLnJlcXVpcmVkKSB7XHJcbiAgICAgICAgZmlyc3RTaGVldC5nZXRDZWxsKDIsIGluZGV4ICsgMSkuc3R5bGUgPSB0aGlzLiNyZXF1aXJlZFN0eWxlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZpcnN0U2hlZXQuZ2V0Q2VsbCgyLCBpbmRleCArIDEpLnN0eWxlID0gdGhpcy4jdGl0bGVTdHlsZTtcclxuICAgICAgfVxyXG4gICAgICBmaXJzdFNoZWV0LmdldENlbGwoMSwgaW5kZXggKyAxKS52YWx1ZSA9IGNvbHVtbi5maWVsZDtcclxuICAgICAgZmlyc3RTaGVldC5nZXRDZWxsKDIsIGluZGV4ICsgMSkudmFsdWUgPSBjb2x1bW4udGl0bGU7XHJcbiAgICAgIGlmIChoYXNEZXNjcmlwdGlvbikge1xyXG4gICAgICAgIGZpcnN0U2hlZXQuZ2V0Q2VsbCgzLCBpbmRleCArIDEpLnN0eWxlID0gdGhpcy4jZGVzY3JpcHRpb25TdHlsZTtcclxuICAgICAgICBmaXJzdFNoZWV0LmdldENlbGwoMywgaW5kZXggKyAxKS52YWx1ZSA9IGNvbHVtbi5kZXNjcmlwdGlvbiB8fCAnJztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBpZiAoc2hlZXRzPy5sZW5ndGgpIHtcclxuICAgICAgZm9yIChjb25zdCBzaGVldCBvZiBzaGVldHMpIHtcclxuICAgICAgICBpZiAoc2hlZXQubmFtZSAmJiBBcnJheS5pc0FycmF5KHNoZWV0Lml0ZW1zKSAmJiBBcnJheS5pc0FycmF5KHNoZWV0LmZpZWxkcykpIHtcclxuICAgICAgICAgIGNvbnN0IG5ld1NoZWV0ID0gd29ya2Jvb2suYWRkV29ya3NoZWV0KHNoZWV0Lm5hbWUpO1xyXG4gICAgICAgICAgc2hlZXQuZmllbGRzLmZvckVhY2goKGZpZWxkLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICBuZXdTaGVldC5nZXRDb2x1bW4oaW5kZXggKyAxKS53aWR0aCA9IDMwO1xyXG4gICAgICAgICAgICBuZXdTaGVldC5nZXRDZWxsKDEsIGluZGV4ICsgMSkuc3R5bGUgPSB0aGlzLiN0aXRsZVN0eWxlO1xyXG4gICAgICAgICAgICBuZXdTaGVldC5nZXRDZWxsKDEsIGluZGV4ICsgMSkudmFsdWUgPSBmaWVsZDtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgc2hlZXQuaXRlbXMuZm9yRWFjaCgoaXRlbSwgaWR4MSkgPT4ge1xyXG4gICAgICAgICAgICBzaGVldC5maWVsZHMuZm9yRWFjaCgoZmllbGQsIGlkeDIpID0+IHtcclxuICAgICAgICAgICAgICBuZXdTaGVldC5nZXRDZWxsKDIgKyBpZHgxLCAxICsgaWR4MikudmFsdWUgPSBpdGVtW2ZpZWxkXTtcclxuICAgICAgICAgICAgICBuZXdTaGVldC5nZXRDZWxsKDIgKyBpZHgxLCAxICsgaWR4Mikuc3R5bGUgPSB0aGlzLiNjZWxsU3R5bGU7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZnJvbVJvdyA9IGhhc0Rlc2NyaXB0aW9uID8gNCA6IDM7XHJcbiAgICBpdGVtcy5mb3JFYWNoKChlLCBpZHgxKSA9PiB7XHJcbiAgICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uLCBpZHgyKSA9PiB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBlW2NvbHVtbi5maWVsZF0gPT09ICdudW1iZXInICYmICFjb2x1bW4ubnVtRm10KSB7XHJcbiAgICAgICAgICAvLyBGb3JtYXQgbeG6t2MgxJHhu4tuaCB24bubaSBraeG7g3Ugc+G7kVxyXG4gICAgICAgICAgZmlyc3RTaGVldC5nZXRDZWxsKGZyb21Sb3cgKyBpZHgxLCAxICsgaWR4MikudmFsdWUgPSArZVtjb2x1bW4uZmllbGRdO1xyXG4gICAgICAgICAgZmlyc3RTaGVldC5nZXRDZWxsKGZyb21Sb3cgKyBpZHgxLCAxICsgaWR4MikubnVtRm10ID0gJyMnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBmaXJzdFNoZWV0LmdldENlbGwoZnJvbVJvdyArIGlkeDEsIDEgKyBpZHgyKS52YWx1ZSA9IGVbY29sdW1uLmZpZWxkXTtcclxuICAgICAgICAgIGZpcnN0U2hlZXQuZ2V0Q2VsbChmcm9tUm93ICsgaWR4MSwgMSArIGlkeDIpLm51bUZtdCA9IGNvbHVtbi5udW1GbXQ7XHJcbiAgICAgICAgICBpZihjb2x1bW4ubnVtRm10KSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNvbHVtbik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpcnN0U2hlZXQuZ2V0Q2VsbChmcm9tUm93ICsgaWR4MSwgMSArIGlkeDIpLnN0eWxlID0gdGhpcy4jY2VsbFN0eWxlO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgY29uc3QgZmlsZSA9IGF3YWl0IHdvcmtib29rLnhsc3gud3JpdGVCdWZmZXIoKTtcclxuICAgIFNkVXRpbGl0eS5kb3dubG9hZEJsb2IobmV3IEJsb2IoW2ZpbGVdLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCcgfSksIGZpbGVOYW1lKTtcclxuICB9O1xyXG5cclxuICBleHBvcnRDdXN0b20gPSBhc3luYyAob3B0aW9uOiBTZEV4cG9ydEN1c3RvbU9wdGlvbikgPT4ge1xyXG4gICAgY29uc3QgeyBmaWxlTmFtZSwgc2hlZXRzIH0gPSBvcHRpb247XHJcbiAgICBpZiAoIXNoZWV0cz8ubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMubm90aWZ5U2VydmljZS5ub3RpZnkud2FybmluZygnUGjhuqNpIGPDsyDDrXQgbmjhuqV0IDEgc2hlZXQnKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgd29ya2Jvb2sgPSBuZXcgV29ya2Jvb2soKTtcclxuICAgIGZvciAoY29uc3QgW2lkeCwgc2hlZXRdIG9mIHNoZWV0cy5lbnRyaWVzKCkpIHtcclxuICAgICAgY29uc3QgeyBuYW1lLCBjb2x1bW5zLCBjZWxscyB9ID0gc2hlZXQ7XHJcbiAgICAgIGNvbnN0IHdvcmtzaGVldCA9IHdvcmtib29rLmFkZFdvcmtzaGVldChuYW1lIHx8IGBTaGVldCAke2lkeCArIDF9YCk7XHJcbiAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMgfHwgW10pIHtcclxuICAgICAgICB3b3Jrc2hlZXQuZ2V0Q29sdW1uKGNvbHVtbi5pbmRleCkuc3R5bGUgPSBjb2x1bW4uc3R5bGU7XHJcbiAgICAgICAgd29ya3NoZWV0LmdldENvbHVtbihjb2x1bW4uaW5kZXgpLndpZHRoID0gY29sdW1uLndpZHRoO1xyXG4gICAgICB9XHJcbiAgICAgIGZvciAoY29uc3QgY2VsbCBvZiBjZWxscykge1xyXG4gICAgICAgIGNvbnN0IHsgcm93LCBjb2x1bW4sIHZhbHVlLCBzdHlsZSB9ID0gY2VsbDtcclxuICAgICAgICB3b3Jrc2hlZXQuZ2V0Q2VsbChyb3csIGNvbHVtbikuc3R5bGUgPSBzdHlsZSB8fCB3b3Jrc2hlZXQuZ2V0Q29sdW1uKGNvbHVtbikuc3R5bGU7XHJcbiAgICAgICAgd29ya3NoZWV0LmdldENlbGwocm93LCBjb2x1bW4pLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IGZpbGUgPSBhd2FpdCB3b3JrYm9vay54bHN4LndyaXRlQnVmZmVyKCk7XHJcbiAgICBTZFV0aWxpdHkuZG93bmxvYWRCbG9iKG5ldyBCbG9iKFtmaWxlXSwgeyB0eXBlOiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnIH0pLCBmaWxlTmFtZSk7XHJcbiAgfTtcclxuXHJcbiAgbWVyZ2VQREYgPSBhc3luYyAodXJsczogc3RyaW5nW10pID0+IHtcclxuICAgIGNvbnN0IHsgc2RNZXJnZVBERiB9ID0gQVBJO1xyXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5mdW5jdGlvblVybH0ke3NkTWVyZ2VQREZ9YDtcclxuICAgIGNvbnN0IGJ1ZmZlciA9IGF3YWl0IHRoaXMuYXBpU2VydmljZS5wb3N0KFxyXG4gICAgICB1cmwsXHJcbiAgICAgIHtcclxuICAgICAgICB1cmxzLFxyXG4gICAgICB9LFxyXG4gICAgICBudWxsLFxyXG4gICAgICB7XHJcbiAgICAgICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInLFxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgU2RVdGlsaXR5LmRvd25sb2FkQmxvYihuZXcgQmxvYihbYnVmZmVyXSwgeyB0eXBlOiAnYXBwbGljYXRpb24vcGRmJyB9KSk7XHJcbiAgfTtcclxuXHJcbiAgdXBsb2FkWGxzeCA9IGFzeW5jICgpOiBQcm9taXNlPHsgaXRlbXM6IGFueVtdOyBmaWxlOiBGaWxlIH0gfCB1bmRlZmluZWQ+ID0+IHtcclxuICAgIHJldHVybiBhd2FpdCBTZFV0aWxpdHkudXBsb2FkKHtcclxuICAgICAgZXh0ZW5zaW9uczogWyd4bHN4J10sXHJcbiAgICAgIG1heFNpemVJbk1iOiAxMCxcclxuICAgIH0pLnRoZW4oZmlsZSA9PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLnBhcnNlWGxzeChmaWxlKTtcclxuICAgIH0pO1xyXG4gIH07XHJcblxyXG4gIHBhcnNlWGxzeCA9IGFzeW5jIChmaWxlOiBGaWxlKTogUHJvbWlzZTx7IGl0ZW1zOiBhbnlbXTsgZmlsZTogRmlsZSB9IHwgdW5kZWZpbmVkPiA9PiB7XHJcbiAgICBpZiAoZmlsZSkge1xyXG4gICAgICByZXR1cm4gbmV3IFByb21pc2U8eyBpdGVtczogYW55W107IGZpbGU6IEZpbGUgfT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHdiID0gbmV3IFdvcmtib29rKCk7XHJcbiAgICAgICAgY29uc3QgcmVhZGVyOiBGaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgICByZWFkZXIub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgYnVmZmVyID0gcmVhZGVyLnJlc3VsdCBhcyBBcnJheUJ1ZmZlcjtcclxuICAgICAgICAgIGlmICghYnVmZmVyKSB7XHJcbiAgICAgICAgICAgIHJlamVjdCgnQ8OzIGzhu5dpIHjhuqN5IHJhIGtoaSDEkeG7jWMgZmlsZScpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB3Yi54bHN4LmxvYWQoYnVmZmVyKS50aGVuKHdvcmtib29rID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc2hlZXQgPSB3b3JrYm9vay53b3Jrc2hlZXRzWzBdO1xyXG4gICAgICAgICAgICBpZiAoIXNoZWV0KSB7XHJcbiAgICAgICAgICAgICAgcmVqZWN0KCdLaMO0bmcgdMOsbSB0aOG6pXkgZOG7ryBsaeG7h3UnKTtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgaXRlbXM6IGFueVtdID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSBzaGVldC5nZXRSb3coMSkudmFsdWVzO1xyXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkge1xyXG4gICAgICAgICAgICAgIHNoZWV0LmVhY2hSb3coKHJvdywgcm93SW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgaGFzVmFsdWVzLCB2YWx1ZXMgfSA9IHJvdztcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHJvdywgaGFzVmFsdWVzLCB2YWx1ZXMpXHJcbiAgICAgICAgICAgICAgICBpZiAoaGFzVmFsdWVzICYmIHJvd0luZGV4ID4gMSkge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBpdGVtOiBhbnkgPSB7fTtcclxuICAgICAgICAgICAgICAgICAgaGVhZGVycy5mb3JFYWNoKChjZWxsVmFsdWUsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNlbGxWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmllbGQgPSBjZWxsVmFsdWUudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW1bZmllbGRdID0gdmFsdWVzW2luZGV4XTtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaXRlbVtmaWVsZF0gPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1bZmllbGRdID0gaXRlbVtmaWVsZF0udHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1bZmllbGRdID09PSAnJyB8fCBpdGVtW2ZpZWxkXSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1bZmllbGRdID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIHJlc29sdmUoe1xyXG4gICAgICAgICAgICAgICAgaXRlbXMsXHJcbiAgICAgICAgICAgICAgICBmaWxlLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihmaWxlKTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGl0ZW1zOiBbXSxcclxuICAgICAgICBmaWxlOiBudWxsLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gIH07XHJcbn1cclxuIl19
|