ng-tailwind 4.1.2 → 4.1.4
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/components/ngt-helper/ngt-helper.component.d.ts +2 -1
- package/components/ngt-input/ngt-input.component.d.ts +0 -13
- package/components/ngt-multi-select/ngt-multi-select.component.d.ts +4 -2
- package/esm2020/components/ngt-checkbox/ngt-checkbox.component.mjs +2 -2
- package/esm2020/components/ngt-date/ngt-date.component.mjs +5 -5
- package/esm2020/components/ngt-dropzone/ngt-dropzone.component.mjs +2 -2
- package/esm2020/components/ngt-helper/ngt-helper.component.mjs +6 -3
- package/esm2020/components/ngt-input/ngt-input.component.mjs +24 -37
- package/esm2020/components/ngt-multi-select/ngt-multi-select.component.mjs +36 -14
- package/esm2020/components/ngt-portlet/ngt-portlet-header/ngt-portlet-header.component.mjs +1 -1
- package/esm2020/components/ngt-radio-button/ngt-radio-button.component.mjs +2 -2
- package/esm2020/components/ngt-section/ngt-section.component.mjs +2 -2
- package/esm2020/components/ngt-select/ngt-select.component.mjs +2 -2
- package/esm2020/components/ngt-textarea/ngt-textarea.component.mjs +2 -2
- package/esm2020/helpers/input-mask/input-mask.helper.mjs +23 -0
- package/fesm2015/ng-tailwind.mjs +99 -63
- package/fesm2015/ng-tailwind.mjs.map +1 -1
- package/fesm2020/ng-tailwind.mjs +96 -63
- package/fesm2020/ng-tailwind.mjs.map +1 -1
- package/helpers/input-mask/input-mask.helper.d.ts +17 -0
- package/package.json +1 -1
|
@@ -71,7 +71,7 @@ export class NgtSectionComponent {
|
|
|
71
71
|
}
|
|
72
72
|
}
|
|
73
73
|
NgtSectionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: NgtSectionComponent, deps: [{ token: i0.Injector }, { token: i1.NgtStylizableDirective, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
74
|
-
NgtSectionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.3", type: NgtSectionComponent, selector: "ngt-section", inputs: { icon: "icon", caption: "caption", subtitle: "subtitle", accordion: "accordion", showSection: "showSection", removable: "removable", helpTitle: "helpTitle", helpText: "helpText", helpIconColor: "helpIconColor" }, outputs: { onRemove: "onRemove", onToggleSection: "onToggleSection" }, ngImport: i0, template: "<div class=\"flex mb-6\">\n <ngt-svg *ngIf=\"icon\" [src]='icon'\n class=\"hidden md:block {{ ngtSectionStyle.compile(['color.text', 'h', 'w', 'my', 'pr']) }}\">\n </ngt-svg>\n\n <div\n class=\"w-full pb-4 md:pb-0 border-b-4 md:border-b-0 border-dashed md:border-solid md:border-l {{ accordion && !showSection ? 'flex' : '' }}\">\n <div *ngIf=\"!accordion && caption\" class=\"flex\">\n <span class=\"pl-5 {{ ngtCaptionStyle.compile(['color.text', 'color.border', 'text', 'border', 'font']) }}\">\n {{ caption }}\n </span>\n\n <span *ngIf=\"subtitle\"\n class=\" pt-1 self-center {{ ngtSubtitleStyle.compile(['color.text', 'color.border', 'text', 'border', 'font', 'ml']) }}\">\n {{ subtitle }}\n </span>\n\n <ngt-helper *ngIf=\"helpText\" [helpTitle]=\"helpTitle\" class=\"ml-1 hover:opacity-100 opacity-100\"\n [iconColor]=\"helpIconColor\">\n {{ helpText }}\n </ngt-helper>\n </div>\n\n <ng-container *ngIf=\"accordion\">\n <div class=\"flex flex-wrap items-center px-5 cursor-pointer {{ helpText ? '' : 'hover:opacity-75' }} {{ accordion && showSection ? ngtCaptionStyle.compile(['pb']) : ngtCaptionStyle.compile(['py']) }}\"\n (click)='toggle()' style=\"max-width: fit-content;\">\n <div *ngIf=\"!showSection\"\n class=\"flex {{ ngtCaptionStyle.compile(['color.text', 'color.border', 'text', 'border', 'font']) }}\">\n <svg class=\"fill-current\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path d=\"M2.82 4.59l9.18 9.16 9.18 -9.16 2.82 2.82 -12 12 -12 -12 2.82 -2.82z\" />\n </svg>\n </div>\n\n <div *ngIf=\"showSection\"\n class=\"flex {{ ngtCaptionStyle.compile(['color.text', 'color.border', 'text', 'border', 'font']) }}\">\n <svg class=\"fill-current\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path d=\"M2.82 19.41l9.18 -9.16 9.18 9.16 2.82 -2.82 -12 -12 -12 12 2.82 2.82z\" />\n </svg>\n </div>\n\n <span [class]=\"ngtCaptionStyle.compile(['color.text', 'color.border', 'text', 'border', 'font', 'ml'])\">\n {{ caption }}\n </span>\n\n <span *ngIf=\"subtitle\"\n [class]=\"ngtSubtitleStyle.compile(['color.text', 'color.border', 'text', 'border', 'font', 'ml'])\">\n {{ subtitle }}\n </span>\n\n <ngt-helper *ngIf=\"helpText\" [helpTitle]=\"helpTitle\" class=\"ml-1\" [iconColor]=\"helpIconColor\"\n class=\"ml-1 hover:opacity-100 opacity-100\">\n {{ helpText }}\n </ngt-helper>\n\n <div *ngIf=\"removable\"\n class=\"flex items-center justify-center h-8 w-8 ml-2 rounded-full hover:bg-red-500 hover:text-white text-gray-600 text-xl\"\n (click)='remove($event)'>\n <svg class=\"fill-current\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path\n d=\"M4 21.33c0,1.47 1.2,2.67 2.67,2.67l10.66 0c1.47,0 2.67,-1.2 2.67,-2.67l0 -16 -16 0 0 16zm17.33 -20l-4.66 0 -1.34 -1.33 -6.66 0 -1.34 1.33 -4.66 0 0 2.67 18.66 0 0 -2.67z\" />\n </svg>\n </div>\n </div>\n </ng-container>\n\n <div *ngIf='showSection' class=\"{{ ngtSectionStyle.compile(['px']) }}\" [@enterAnimation]='!showSection'>\n <ng-content></ng-content>\n </div>\n </div>\n</div>", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.NgtSvgComponent, selector: "ngt-svg", inputs: ["src", "class"] }, { kind: "component", type: i4.NgtHelperComponent, selector: "ngt-helper", inputs: ["helpTextColor", "helpText", "helpTitle", "icon", "iconSize", "iconColor", "iconTitle", "tooltipSize"] }], animations: [
|
|
74
|
+
NgtSectionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.3", type: NgtSectionComponent, selector: "ngt-section", inputs: { icon: "icon", caption: "caption", subtitle: "subtitle", accordion: "accordion", showSection: "showSection", removable: "removable", helpTitle: "helpTitle", helpText: "helpText", helpIconColor: "helpIconColor" }, outputs: { onRemove: "onRemove", onToggleSection: "onToggleSection" }, ngImport: i0, template: "<div class=\"flex mb-6\">\n <ngt-svg *ngIf=\"icon\" [src]='icon'\n class=\"hidden md:block {{ ngtSectionStyle.compile(['color.text', 'h', 'w', 'my', 'pr']) }}\">\n </ngt-svg>\n\n <div\n class=\"w-full pb-4 md:pb-0 border-b-4 md:border-b-0 border-dashed md:border-solid md:border-l {{ accordion && !showSection ? 'flex' : '' }}\">\n <div *ngIf=\"!accordion && caption\" class=\"flex\">\n <span class=\"pl-5 {{ ngtCaptionStyle.compile(['color.text', 'color.border', 'text', 'border', 'font']) }}\">\n {{ caption }}\n </span>\n\n <span *ngIf=\"subtitle\"\n class=\" pt-1 self-center {{ ngtSubtitleStyle.compile(['color.text', 'color.border', 'text', 'border', 'font', 'ml']) }}\">\n {{ subtitle }}\n </span>\n\n <ngt-helper *ngIf=\"helpText\" [helpTitle]=\"helpTitle\" class=\"ml-1 hover:opacity-100 opacity-100\"\n [iconColor]=\"helpIconColor\">\n {{ helpText }}\n </ngt-helper>\n </div>\n\n <ng-container *ngIf=\"accordion\">\n <div class=\"flex flex-wrap items-center px-5 cursor-pointer {{ helpText ? '' : 'hover:opacity-75' }} {{ accordion && showSection ? ngtCaptionStyle.compile(['pb']) : ngtCaptionStyle.compile(['py']) }}\"\n (click)='toggle()' style=\"max-width: fit-content;\">\n <div *ngIf=\"!showSection\"\n class=\"flex {{ ngtCaptionStyle.compile(['color.text', 'color.border', 'text', 'border', 'font']) }}\">\n <svg class=\"fill-current\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path d=\"M2.82 4.59l9.18 9.16 9.18 -9.16 2.82 2.82 -12 12 -12 -12 2.82 -2.82z\" />\n </svg>\n </div>\n\n <div *ngIf=\"showSection\"\n class=\"flex {{ ngtCaptionStyle.compile(['color.text', 'color.border', 'text', 'border', 'font']) }}\">\n <svg class=\"fill-current\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path d=\"M2.82 19.41l9.18 -9.16 9.18 9.16 2.82 -2.82 -12 -12 -12 12 2.82 2.82z\" />\n </svg>\n </div>\n\n <span [class]=\"ngtCaptionStyle.compile(['color.text', 'color.border', 'text', 'border', 'font', 'ml'])\">\n {{ caption }}\n </span>\n\n <span *ngIf=\"subtitle\"\n [class]=\"ngtSubtitleStyle.compile(['color.text', 'color.border', 'text', 'border', 'font', 'ml'])\">\n {{ subtitle }}\n </span>\n\n <ngt-helper *ngIf=\"helpText\" [helpTitle]=\"helpTitle\" class=\"ml-1\" [iconColor]=\"helpIconColor\"\n class=\"ml-1 hover:opacity-100 opacity-100\">\n {{ helpText }}\n </ngt-helper>\n\n <div *ngIf=\"removable\"\n class=\"flex items-center justify-center h-8 w-8 ml-2 rounded-full hover:bg-red-500 hover:text-white text-gray-600 text-xl\"\n (click)='remove($event)'>\n <svg class=\"fill-current\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path\n d=\"M4 21.33c0,1.47 1.2,2.67 2.67,2.67l10.66 0c1.47,0 2.67,-1.2 2.67,-2.67l0 -16 -16 0 0 16zm17.33 -20l-4.66 0 -1.34 -1.33 -6.66 0 -1.34 1.33 -4.66 0 0 2.67 18.66 0 0 -2.67z\" />\n </svg>\n </div>\n </div>\n </ng-container>\n\n <div *ngIf='showSection' class=\"{{ ngtSectionStyle.compile(['px']) }}\" [@enterAnimation]='!showSection'>\n <ng-content></ng-content>\n </div>\n </div>\n</div>", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.NgtSvgComponent, selector: "ngt-svg", inputs: ["src", "class"] }, { kind: "component", type: i4.NgtHelperComponent, selector: "ngt-helper", inputs: ["helpTextColor", "helpText", "helpTitle", "icon", "iconSize", "iconColor", "iconTitle", "tooltipSize", "autoXReverse"] }], animations: [
|
|
75
75
|
trigger('enterAnimation', [
|
|
76
76
|
state('void', style({ transform: 'translateY(-20px)', opacity: 0 })),
|
|
77
77
|
transition(':enter', [
|
|
@@ -116,4 +116,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImpor
|
|
|
116
116
|
}], onToggleSection: [{
|
|
117
117
|
type: Output
|
|
118
118
|
}] } });
|
|
119
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd0LXNlY3Rpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdGFpbHdpbmQvc3JjL2NvbXBvbmVudHMvbmd0LXNlY3Rpb24vbmd0LXNlY3Rpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdGFpbHdpbmQvc3JjL2NvbXBvbmVudHMvbmd0LXNlY3Rpb24vbmd0LXNlY3Rpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRixPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBWSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHakcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0RBQXNELENBQUM7Ozs7OztBQWM1RixNQUFNLE9BQU8sbUJBQW1CO0lBa0I1QixZQUNZLFFBQWtCLEVBQ0Usc0JBQThDO1FBRGxFLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDRSwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBZjlELGdCQUFXLEdBQVksSUFBSSxDQUFDO1FBTTNCLGFBQVEsR0FBdUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNsRCxvQkFBZSxHQUEwQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBVXpFLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxvQkFBb0IsRUFBRSxDQUFDO1FBQ2xELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLG9CQUFvQixFQUFFLENBQUM7UUFFbkQsSUFBSSxJQUFJLENBQUMsc0JBQXNCLEVBQUU7WUFDN0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsdUJBQXVC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O2dCQUNVLE9BQU87c0JBQXRCLEtBQUs7Z0JBQ1UsUUFBUTtzQkFBdkIsS0FBSztnQkFDVSxTQUFTO3NCQUF4QixLQUFLO2dCQUNVLFdBQVc7c0JBQTFCLEtBQUs7Z0JBQ1UsU0FBUztzQkFBeEIsS0FBSztnQkFDVSxTQUFTO3NCQUF4QixLQUFLO2dCQUNVLFFBQVE7c0JBQXZCLEtBQUs7Z0JBQ1UsYUFBYTtzQkFBNUIsS0FBSztnQkFFVyxRQUFRO3NCQUF4QixNQUFNO2dCQUNVLGVBQWU7c0JBQS9CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbmplY3RvciwgSW5wdXQsIE9wdGlvbmFsLCBPdXRwdXQsIFNlbGYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTmd0U3R5bGl6YWJsZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvbmd0LXN0eWxpemFibGUvbmd0LXN0eWxpemFibGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IE5ndFN0eWxpemFibGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbmd0LXN0eWxpemFibGUvbmd0LXN0eWxpemFibGUuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd0LXNlY3Rpb24nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9uZ3Qtc2VjdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gICAgYW5pbWF0aW9uczogW1xuICAgICAgICB0cmlnZ2VyKCdlbnRlckFuaW1hdGlvbicsIFtcbiAgICAgICAgICAgIHN0YXRlKCd2b2lkJywgc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC0yMHB4KScsIG9wYWNpdHk6IDAgfSkpLFxuICAgICAgICAgICAgdHJhbnNpdGlvbignOmVudGVyJywgW1xuICAgICAgICAgICAgICAgIGFuaW1hdGUoNDAwKVxuICAgICAgICAgICAgXSlcbiAgICAgICAgXSksXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBOZ3RTZWN0aW9uQ29tcG9uZW50IHtcbiAgICBASW5wdXQoKSBwdWJsaWMgaWNvbjogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBjYXB0aW9uOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIHN1YnRpdGxlOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIGFjY29yZGlvbjogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBwdWJsaWMgc2hvd1NlY3Rpb246IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyByZW1vdmFibGU6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHVibGljIGhlbHBUaXRsZTogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBoZWxwVGV4dDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBoZWxwSWNvbkNvbG9yOiBzdHJpbmc7XG5cbiAgICBAT3V0cHV0KCkgcHVibGljIG9uUmVtb3ZlOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIHB1YmxpYyBvblRvZ2dsZVNlY3Rpb246IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIHB1YmxpYyBuZ3RTZWN0aW9uU3R5bGU6IE5ndFN0eWxpemFibGVTZXJ2aWNlO1xuICAgIHB1YmxpYyBuZ3RDYXB0aW9uU3R5bGU6IE5ndFN0eWxpemFibGVTZXJ2aWNlO1xuICAgIHB1YmxpYyBuZ3RTdWJ0aXRsZVN0eWxlOiBOZ3RTdHlsaXphYmxlU2VydmljZTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIEBTZWxmKCkgQE9wdGlvbmFsKCkgcHJpdmF0ZSBuZ3RTdHlsaXphYmxlRGlyZWN0aXZlOiBOZ3RTdHlsaXphYmxlRGlyZWN0aXZlXG4gICAgKSB7XG4gICAgICAgIHRoaXMubmd0Q2FwdGlvblN0eWxlID0gbmV3IE5ndFN0eWxpemFibGVTZXJ2aWNlKCk7XG4gICAgICAgIHRoaXMubmd0U3VidGl0bGVTdHlsZSA9IG5ldyBOZ3RTdHlsaXphYmxlU2VydmljZSgpO1xuXG4gICAgICAgIGlmICh0aGlzLm5ndFN0eWxpemFibGVEaXJlY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMubmd0U2VjdGlvblN0eWxlID0gdGhpcy5uZ3RTdHlsaXphYmxlRGlyZWN0aXZlLmdldE5ndFN0eWxpemFibGVTZXJ2aWNlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm5ndFNlY3Rpb25TdHlsZSA9IG5ldyBOZ3RTdHlsaXphYmxlU2VydmljZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5uZ3RTZWN0aW9uU3R5bGUubG9hZCh0aGlzLmluamVjdG9yLCAnTmd0U2VjdGlvbicsIHtcbiAgICAgICAgICAgIGg6ICdoLTEyJyxcbiAgICAgICAgICAgIHc6ICd3LTEyJyxcbiAgICAgICAgICAgIG15OiAnbXktMScsXG4gICAgICAgICAgICBwcjogJ3ByLTEnLFxuICAgICAgICAgICAgcHg6ICdtZDpweC01JyxcbiAgICAgICAgICAgIGNvbG9yOiB7XG4gICAgICAgICAgICAgICAgdGV4dDogJ3RleHQtZ3JheS04MDAnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMubmd0Q2FwdGlvblN0eWxlLmxvYWQodGhpcy5pbmplY3RvciwgJ05ndFNlY3Rpb25DYXB0aW9uJywge1xuICAgICAgICAgICAgdGV4dDogJ3RleHQtc20nLFxuICAgICAgICAgICAgZm9udDogJ2ZvbnQtbm9ybWFsJyxcbiAgICAgICAgICAgIG1sOiAnbWwtMicsXG4gICAgICAgICAgICBwYjogJ3BiLTInLFxuICAgICAgICAgICAgYm9yZGVyOiAnYm9yZGVyLW5vbmUnLFxuICAgICAgICAgICAgY29sb3I6IHtcbiAgICAgICAgICAgICAgICB0ZXh0OiAndGV4dC1ncmF5LTgwMCcsXG4gICAgICAgICAgICAgICAgYm9yZGVyOiAnJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLm5ndFN1YnRpdGxlU3R5bGUubG9hZCh0aGlzLmluamVjdG9yLCAnTmd0U2VjdGlvblN1YnRpdGxlJywge1xuICAgICAgICAgICAgdGV4dDogJ3RleHQteHMnLFxuICAgICAgICAgICAgZm9udDogJ2ZvbnQtbm9ybWFsJyxcbiAgICAgICAgICAgIGJvcmRlcjogJ2JvcmRlci1ub25lJyxcbiAgICAgICAgICAgIG1sOiAnbWwtMicsXG4gICAgICAgICAgICBjb2xvcjoge1xuICAgICAgICAgICAgICAgIHRleHQ6ICd0ZXh0LWdyYXktNTAwJyxcbiAgICAgICAgICAgICAgICBib3JkZXI6ICcnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvcGVuKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNob3dTZWN0aW9uID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLm9uVG9nZ2xlU2VjdGlvbi5lbWl0KHRoaXMuc2hvd1NlY3Rpb24pO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zaG93U2VjdGlvbiA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMub25Ub2dnbGVTZWN0aW9uLmVtaXQodGhpcy5zaG93U2VjdGlvbik7XG4gICAgfVxuXG4gICAgcHVibGljIHRvZ2dsZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zaG93U2VjdGlvbiA9ICF0aGlzLnNob3dTZWN0aW9uO1xuXG4gICAgICAgIHRoaXMub25Ub2dnbGVTZWN0aW9uLmVtaXQodGhpcy5zaG93U2VjdGlvbik7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgdGhpcy5vblJlbW92ZS5lbWl0KCk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZsZXggbWItNlwiPlxuICAgIDxuZ3Qtc3ZnICpuZ0lmPVwiaWNvblwiIFtzcmNdPSdpY29uJ1xuICAgICAgICBjbGFzcz1cImhpZGRlbiBtZDpibG9jayB7eyBuZ3RTZWN0aW9uU3R5bGUuY29tcGlsZShbJ2NvbG9yLnRleHQnLCAnaCcsICd3JywgJ215JywgJ3ByJ10pIH19XCI+XG4gICAgPC9uZ3Qtc3ZnPlxuXG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cInctZnVsbCBwYi00IG1kOnBiLTAgYm9yZGVyLWItNCBtZDpib3JkZXItYi0wIGJvcmRlci1kYXNoZWQgbWQ6Ym9yZGVyLXNvbGlkIG1kOmJvcmRlci1sIHt7IGFjY29yZGlvbiAmJiAhc2hvd1NlY3Rpb24gPyAnZmxleCcgOiAnJyB9fVwiPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIWFjY29yZGlvbiAmJiBjYXB0aW9uXCIgY2xhc3M9XCJmbGV4XCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBsLTUge3sgbmd0Q2FwdGlvblN0eWxlLmNvbXBpbGUoWydjb2xvci50ZXh0JywgJ2NvbG9yLmJvcmRlcicsICd0ZXh0JywgJ2JvcmRlcicsICdmb250J10pIH19XCI+XG4gICAgICAgICAgICAgICAge3sgY2FwdGlvbiB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cInN1YnRpdGxlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIiBwdC0xIHNlbGYtY2VudGVyIHt7IG5ndFN1YnRpdGxlU3R5bGUuY29tcGlsZShbJ2NvbG9yLnRleHQnLCAnY29sb3IuYm9yZGVyJywgJ3RleHQnLCAnYm9yZGVyJywgJ2ZvbnQnLCAnbWwnXSkgfX1cIj5cbiAgICAgICAgICAgICAgICB7eyBzdWJ0aXRsZSB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICA8bmd0LWhlbHBlciAqbmdJZj1cImhlbHBUZXh0XCIgW2hlbHBUaXRsZV09XCJoZWxwVGl0bGVcIiBjbGFzcz1cIm1sLTEgaG92ZXI6b3BhY2l0eS0xMDAgb3BhY2l0eS0xMDBcIlxuICAgICAgICAgICAgICAgIFtpY29uQ29sb3JdPVwiaGVscEljb25Db2xvclwiPlxuICAgICAgICAgICAgICAgIHt7IGhlbHBUZXh0IH19XG4gICAgICAgICAgICA8L25ndC1oZWxwZXI+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhY2NvcmRpb25cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgcHgtNSBjdXJzb3ItcG9pbnRlciB7eyBoZWxwVGV4dCA/ICcnIDogJ2hvdmVyOm9wYWNpdHktNzUnIH19IHt7IGFjY29yZGlvbiAmJiBzaG93U2VjdGlvbiA/IG5ndENhcHRpb25TdHlsZS5jb21waWxlKFsncGInXSkgOiBuZ3RDYXB0aW9uU3R5bGUuY29tcGlsZShbJ3B5J10pIH19XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPSd0b2dnbGUoKScgc3R5bGU9XCJtYXgtd2lkdGg6IGZpdC1jb250ZW50O1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhc2hvd1NlY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXgge3sgbmd0Q2FwdGlvblN0eWxlLmNvbXBpbGUoWydjb2xvci50ZXh0JywgJ2NvbG9yLmJvcmRlcicsICd0ZXh0JywgJ2JvcmRlcicsICdmb250J10pIH19XCI+XG4gICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJmaWxsLWN1cnJlbnRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yLjgyIDQuNTlsOS4xOCA5LjE2IDkuMTggLTkuMTYgMi44MiAyLjgyIC0xMiAxMiAtMTIgLTEyIDIuODIgLTIuODJ6XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd1NlY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXgge3sgbmd0Q2FwdGlvblN0eWxlLmNvbXBpbGUoWydjb2xvci50ZXh0JywgJ2NvbG9yLmJvcmRlcicsICd0ZXh0JywgJ2JvcmRlcicsICdmb250J10pIH19XCI+XG4gICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJmaWxsLWN1cnJlbnRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yLjgyIDE5LjQxbDkuMTggLTkuMTYgOS4xOCA5LjE2IDIuODIgLTIuODIgLTEyIC0xMiAtMTIgMTIgMi44MiAyLjgyelwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cIm5ndENhcHRpb25TdHlsZS5jb21waWxlKFsnY29sb3IudGV4dCcsICdjb2xvci5ib3JkZXInLCAndGV4dCcsICdib3JkZXInLCAnZm9udCcsICdtbCddKVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBjYXB0aW9uIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzdWJ0aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJuZ3RTdWJ0aXRsZVN0eWxlLmNvbXBpbGUoWydjb2xvci50ZXh0JywgJ2NvbG9yLmJvcmRlcicsICd0ZXh0JywgJ2JvcmRlcicsICdmb250JywgJ21sJ10pXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IHN1YnRpdGxlIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgPG5ndC1oZWxwZXIgKm5nSWY9XCJoZWxwVGV4dFwiIFtoZWxwVGl0bGVdPVwiaGVscFRpdGxlXCIgY2xhc3M9XCJtbC0xXCIgW2ljb25Db2xvcl09XCJoZWxwSWNvbkNvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtbC0xIGhvdmVyOm9wYWNpdHktMTAwIG9wYWNpdHktMTAwXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGhlbHBUZXh0IH19XG4gICAgICAgICAgICAgICAgPC9uZ3QtaGVscGVyPlxuXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInJlbW92YWJsZVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgaC04IHctOCBtbC0yIHJvdW5kZWQtZnVsbCBob3ZlcjpiZy1yZWQtNTAwIGhvdmVyOnRleHQtd2hpdGUgdGV4dC1ncmF5LTYwMCB0ZXh0LXhsXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ncmVtb3ZlKCRldmVudCknPlxuICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwiZmlsbC1jdXJyZW50XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk00IDIxLjMzYzAsMS40NyAxLjIsMi42NyAyLjY3LDIuNjdsMTAuNjYgMGMxLjQ3LDAgMi42NywtMS4yIDIuNjcsLTIuNjdsMCAtMTYgLTE2IDAgMCAxNnptMTcuMzMgLTIwbC00LjY2IDAgLTEuMzQgLTEuMzMgLTYuNjYgMCAtMS4zNCAxLjMzIC00LjY2IDAgMCAyLjY3IDE4LjY2IDAgMCAtMi42N3pcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8ZGl2ICpuZ0lmPSdzaG93U2VjdGlvbicgY2xhc3M9XCJ7eyBuZ3RTZWN0aW9uU3R5bGUuY29tcGlsZShbJ3B4J10pIH19XCIgW0BlbnRlckFuaW1hdGlvbl09JyFzaG93U2VjdGlvbic+XG4gICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+Il19
|
|
119
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd0LXNlY3Rpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdGFpbHdpbmQvc3JjL2NvbXBvbmVudHMvbmd0LXNlY3Rpb24vbmd0LXNlY3Rpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdGFpbHdpbmQvc3JjL2NvbXBvbmVudHMvbmd0LXNlY3Rpb24vbmd0LXNlY3Rpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRixPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBWSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHakcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0RBQXNELENBQUM7Ozs7OztBQWM1RixNQUFNLE9BQU8sbUJBQW1CO0lBa0I1QixZQUNZLFFBQWtCLEVBQ0Usc0JBQThDO1FBRGxFLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDRSwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBZjlELGdCQUFXLEdBQVksSUFBSSxDQUFDO1FBTTNCLGFBQVEsR0FBdUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNsRCxvQkFBZSxHQUEwQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBVXpFLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxvQkFBb0IsRUFBRSxDQUFDO1FBQ2xELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLG9CQUFvQixFQUFFLENBQUM7UUFFbkQsSUFBSSxJQUFJLENBQUMsc0JBQXNCLEVBQUU7WUFDN0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsdUJBQXVC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O2dCQUNVLE9BQU87c0JBQXRCLEtBQUs7Z0JBQ1UsUUFBUTtzQkFBdkIsS0FBSztnQkFDVSxTQUFTO3NCQUF4QixLQUFLO2dCQUNVLFdBQVc7c0JBQTFCLEtBQUs7Z0JBQ1UsU0FBUztzQkFBeEIsS0FBSztnQkFDVSxTQUFTO3NCQUF4QixLQUFLO2dCQUNVLFFBQVE7c0JBQXZCLEtBQUs7Z0JBQ1UsYUFBYTtzQkFBNUIsS0FBSztnQkFFVyxRQUFRO3NCQUF4QixNQUFNO2dCQUNVLGVBQWU7c0JBQS9CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbmplY3RvciwgSW5wdXQsIE9wdGlvbmFsLCBPdXRwdXQsIFNlbGYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTmd0U3R5bGl6YWJsZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvbmd0LXN0eWxpemFibGUvbmd0LXN0eWxpemFibGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IE5ndFN0eWxpemFibGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbmd0LXN0eWxpemFibGUvbmd0LXN0eWxpemFibGUuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd0LXNlY3Rpb24nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9uZ3Qtc2VjdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gICAgYW5pbWF0aW9uczogW1xuICAgICAgICB0cmlnZ2VyKCdlbnRlckFuaW1hdGlvbicsIFtcbiAgICAgICAgICAgIHN0YXRlKCd2b2lkJywgc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC0yMHB4KScsIG9wYWNpdHk6IDAgfSkpLFxuICAgICAgICAgICAgdHJhbnNpdGlvbignOmVudGVyJywgW1xuICAgICAgICAgICAgICAgIGFuaW1hdGUoNDAwKVxuICAgICAgICAgICAgXSlcbiAgICAgICAgXSksXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBOZ3RTZWN0aW9uQ29tcG9uZW50IHtcbiAgICBASW5wdXQoKSBwdWJsaWMgaWNvbjogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBjYXB0aW9uOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIHN1YnRpdGxlOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIGFjY29yZGlvbjogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBwdWJsaWMgc2hvd1NlY3Rpb246IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyByZW1vdmFibGU6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHVibGljIGhlbHBUaXRsZTogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBoZWxwVGV4dDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBoZWxwSWNvbkNvbG9yOiBzdHJpbmc7XG5cbiAgICBAT3V0cHV0KCkgcHVibGljIG9uUmVtb3ZlOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIHB1YmxpYyBvblRvZ2dsZVNlY3Rpb246IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIHB1YmxpYyBuZ3RTZWN0aW9uU3R5bGU6IE5ndFN0eWxpemFibGVTZXJ2aWNlO1xuICAgIHB1YmxpYyBuZ3RDYXB0aW9uU3R5bGU6IE5ndFN0eWxpemFibGVTZXJ2aWNlO1xuICAgIHB1YmxpYyBuZ3RTdWJ0aXRsZVN0eWxlOiBOZ3RTdHlsaXphYmxlU2VydmljZTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIEBTZWxmKCkgQE9wdGlvbmFsKCkgcHJpdmF0ZSBuZ3RTdHlsaXphYmxlRGlyZWN0aXZlOiBOZ3RTdHlsaXphYmxlRGlyZWN0aXZlXG4gICAgKSB7XG4gICAgICAgIHRoaXMubmd0Q2FwdGlvblN0eWxlID0gbmV3IE5ndFN0eWxpemFibGVTZXJ2aWNlKCk7XG4gICAgICAgIHRoaXMubmd0U3VidGl0bGVTdHlsZSA9IG5ldyBOZ3RTdHlsaXphYmxlU2VydmljZSgpO1xuXG4gICAgICAgIGlmICh0aGlzLm5ndFN0eWxpemFibGVEaXJlY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMubmd0U2VjdGlvblN0eWxlID0gdGhpcy5uZ3RTdHlsaXphYmxlRGlyZWN0aXZlLmdldE5ndFN0eWxpemFibGVTZXJ2aWNlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm5ndFNlY3Rpb25TdHlsZSA9IG5ldyBOZ3RTdHlsaXphYmxlU2VydmljZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5uZ3RTZWN0aW9uU3R5bGUubG9hZCh0aGlzLmluamVjdG9yLCAnTmd0U2VjdGlvbicsIHtcbiAgICAgICAgICAgIGg6ICdoLTEyJyxcbiAgICAgICAgICAgIHc6ICd3LTEyJyxcbiAgICAgICAgICAgIG15OiAnbXktMScsXG4gICAgICAgICAgICBwcjogJ3ByLTEnLFxuICAgICAgICAgICAgcHg6ICdtZDpweC01JyxcbiAgICAgICAgICAgIGNvbG9yOiB7XG4gICAgICAgICAgICAgICAgdGV4dDogJ3RleHQtZ3JheS04MDAnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMubmd0Q2FwdGlvblN0eWxlLmxvYWQodGhpcy5pbmplY3RvciwgJ05ndFNlY3Rpb25DYXB0aW9uJywge1xuICAgICAgICAgICAgdGV4dDogJ3RleHQtc20nLFxuICAgICAgICAgICAgZm9udDogJ2ZvbnQtbm9ybWFsJyxcbiAgICAgICAgICAgIG1sOiAnbWwtMicsXG4gICAgICAgICAgICBwYjogJ3BiLTInLFxuICAgICAgICAgICAgYm9yZGVyOiAnYm9yZGVyLW5vbmUnLFxuICAgICAgICAgICAgY29sb3I6IHtcbiAgICAgICAgICAgICAgICB0ZXh0OiAndGV4dC1ncmF5LTgwMCcsXG4gICAgICAgICAgICAgICAgYm9yZGVyOiAnJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLm5ndFN1YnRpdGxlU3R5bGUubG9hZCh0aGlzLmluamVjdG9yLCAnTmd0U2VjdGlvblN1YnRpdGxlJywge1xuICAgICAgICAgICAgdGV4dDogJ3RleHQteHMnLFxuICAgICAgICAgICAgZm9udDogJ2ZvbnQtbm9ybWFsJyxcbiAgICAgICAgICAgIGJvcmRlcjogJ2JvcmRlci1ub25lJyxcbiAgICAgICAgICAgIG1sOiAnbWwtMicsXG4gICAgICAgICAgICBjb2xvcjoge1xuICAgICAgICAgICAgICAgIHRleHQ6ICd0ZXh0LWdyYXktNTAwJyxcbiAgICAgICAgICAgICAgICBib3JkZXI6ICcnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvcGVuKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNob3dTZWN0aW9uID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLm9uVG9nZ2xlU2VjdGlvbi5lbWl0KHRoaXMuc2hvd1NlY3Rpb24pO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zaG93U2VjdGlvbiA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMub25Ub2dnbGVTZWN0aW9uLmVtaXQodGhpcy5zaG93U2VjdGlvbik7XG4gICAgfVxuXG4gICAgcHVibGljIHRvZ2dsZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zaG93U2VjdGlvbiA9ICF0aGlzLnNob3dTZWN0aW9uO1xuXG4gICAgICAgIHRoaXMub25Ub2dnbGVTZWN0aW9uLmVtaXQodGhpcy5zaG93U2VjdGlvbik7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgdGhpcy5vblJlbW92ZS5lbWl0KCk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZsZXggbWItNlwiPlxuICAgIDxuZ3Qtc3ZnICpuZ0lmPVwiaWNvblwiIFtzcmNdPSdpY29uJ1xuICAgICAgICBjbGFzcz1cImhpZGRlbiBtZDpibG9jayB7eyBuZ3RTZWN0aW9uU3R5bGUuY29tcGlsZShbJ2NvbG9yLnRleHQnLCAnaCcsICd3JywgJ215JywgJ3ByJ10pIH19XCI+XG4gICAgPC9uZ3Qtc3ZnPlxuXG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cInctZnVsbCBwYi00IG1kOnBiLTAgYm9yZGVyLWItNCBtZDpib3JkZXItYi0wIGJvcmRlci1kYXNoZWQgbWQ6Ym9yZGVyLXNvbGlkIG1kOmJvcmRlci1sIHt7IGFjY29yZGlvbiAmJiAhc2hvd1NlY3Rpb24gPyAnZmxleCcgOiAnJyB9fVwiPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIWFjY29yZGlvbiAmJiBjYXB0aW9uXCIgY2xhc3M9XCJmbGV4XCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBsLTUge3sgbmd0Q2FwdGlvblN0eWxlLmNvbXBpbGUoWydjb2xvci50ZXh0JywgJ2NvbG9yLmJvcmRlcicsICd0ZXh0JywgJ2JvcmRlcicsICdmb250J10pIH19XCI+XG4gICAgICAgICAgICAgICAge3sgY2FwdGlvbiB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cInN1YnRpdGxlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIiBwdC0xIHNlbGYtY2VudGVyIHt7IG5ndFN1YnRpdGxlU3R5bGUuY29tcGlsZShbJ2NvbG9yLnRleHQnLCAnY29sb3IuYm9yZGVyJywgJ3RleHQnLCAnYm9yZGVyJywgJ2ZvbnQnLCAnbWwnXSkgfX1cIj5cbiAgICAgICAgICAgICAgICB7eyBzdWJ0aXRsZSB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICA8bmd0LWhlbHBlciAqbmdJZj1cImhlbHBUZXh0XCIgW2hlbHBUaXRsZV09XCJoZWxwVGl0bGVcIiBjbGFzcz1cIm1sLTEgaG92ZXI6b3BhY2l0eS0xMDAgb3BhY2l0eS0xMDBcIlxuICAgICAgICAgICAgICAgIFtpY29uQ29sb3JdPVwiaGVscEljb25Db2xvclwiPlxuICAgICAgICAgICAgICAgIHt7IGhlbHBUZXh0IH19XG4gICAgICAgICAgICA8L25ndC1oZWxwZXI+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhY2NvcmRpb25cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgcHgtNSBjdXJzb3ItcG9pbnRlciB7eyBoZWxwVGV4dCA/ICcnIDogJ2hvdmVyOm9wYWNpdHktNzUnIH19IHt7IGFjY29yZGlvbiAmJiBzaG93U2VjdGlvbiA/IG5ndENhcHRpb25TdHlsZS5jb21waWxlKFsncGInXSkgOiBuZ3RDYXB0aW9uU3R5bGUuY29tcGlsZShbJ3B5J10pIH19XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPSd0b2dnbGUoKScgc3R5bGU9XCJtYXgtd2lkdGg6IGZpdC1jb250ZW50O1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhc2hvd1NlY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXgge3sgbmd0Q2FwdGlvblN0eWxlLmNvbXBpbGUoWydjb2xvci50ZXh0JywgJ2NvbG9yLmJvcmRlcicsICd0ZXh0JywgJ2JvcmRlcicsICdmb250J10pIH19XCI+XG4gICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJmaWxsLWN1cnJlbnRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yLjgyIDQuNTlsOS4xOCA5LjE2IDkuMTggLTkuMTYgMi44MiAyLjgyIC0xMiAxMiAtMTIgLTEyIDIuODIgLTIuODJ6XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd1NlY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXgge3sgbmd0Q2FwdGlvblN0eWxlLmNvbXBpbGUoWydjb2xvci50ZXh0JywgJ2NvbG9yLmJvcmRlcicsICd0ZXh0JywgJ2JvcmRlcicsICdmb250J10pIH19XCI+XG4gICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJmaWxsLWN1cnJlbnRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yLjgyIDE5LjQxbDkuMTggLTkuMTYgOS4xOCA5LjE2IDIuODIgLTIuODIgLTEyIC0xMiAtMTIgMTIgMi44MiAyLjgyelwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cIm5ndENhcHRpb25TdHlsZS5jb21waWxlKFsnY29sb3IudGV4dCcsICdjb2xvci5ib3JkZXInLCAndGV4dCcsICdib3JkZXInLCAnZm9udCcsICdtbCddKVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBjYXB0aW9uIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzdWJ0aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJuZ3RTdWJ0aXRsZVN0eWxlLmNvbXBpbGUoWydjb2xvci50ZXh0JywgJ2NvbG9yLmJvcmRlcicsICd0ZXh0JywgJ2JvcmRlcicsICdmb250JywgJ21sJ10pXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IHN1YnRpdGxlIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgPG5ndC1oZWxwZXIgKm5nSWY9XCJoZWxwVGV4dFwiIFtoZWxwVGl0bGVdPVwiaGVscFRpdGxlXCIgY2xhc3M9XCJtbC0xXCIgW2ljb25Db2xvcl09XCJoZWxwSWNvbkNvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtbC0xIGhvdmVyOm9wYWNpdHktMTAwIG9wYWNpdHktMTAwXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGhlbHBUZXh0IH19XG4gICAgICAgICAgICAgICAgPC9uZ3QtaGVscGVyPlxuXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInJlbW92YWJsZVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgaC04IHctOCBtbC0yIHJvdW5kZWQtZnVsbCBob3ZlcjpiZy1yZWQtNTAwIGhvdmVyOnRleHQtd2hpdGUgdGV4dC1ncmF5LTYwMCB0ZXh0LXhsXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ncmVtb3ZlKCRldmVudCknPlxuICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwiZmlsbC1jdXJyZW50XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk00IDIxLjMzYzAsMS40NyAxLjIsMi42NyAyLjY3LDIuNjdsMTAuNjYgMGMxLjQ3LDAgMi42NywtMS4yIDIuNjcsLTIuNjdsMCAtMTYgLTE2IDAgMCAxNnptMTcuMzMgLTIwbC00LjY2IDAgLTEuMzQgLTEuMzMgLTYuNjYgMCAtMS4zNCAxLjMzIC00LjY2IDAgMCAyLjY3IDE4LjY2IDAgMCAtMi42N3pcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8ZGl2ICpuZ0lmPSdzaG93U2VjdGlvbicgY2xhc3M9XCJ7eyBuZ3RTZWN0aW9uU3R5bGUuY29tcGlsZShbJ3B4J10pIH19XCIgW0BlbnRlckFuaW1hdGlvbl09JyFzaG93U2VjdGlvbic+XG4gICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+Il19
|
|
@@ -409,7 +409,7 @@ export class NgtSelectComponent extends NgtBaseNgModel {
|
|
|
409
409
|
NgtSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: NgtSelectComponent, deps: [{ token: i1.NgtStylizableDirective, optional: true, self: true }, { token: i0.Injector }, { token: i2.ControlContainer, host: true, optional: true }, { token: i3.NgtFormComponent, optional: true, skipSelf: true }, { token: i4.NgtHttpService }, { token: i0.ChangeDetectorRef }, { token: i5.NgtTranslateService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
410
410
|
NgtSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.3", type: NgtSelectComponent, selector: "ngt-select", inputs: { label: "label", labelIcon: "labelIcon", labelIconColor: "labelIconColor", helpTitle: "helpTitle", helpText: "helpText", helpTextColor: "helpTextColor", shining: "shining", loading: "loading", loadingText: "loadingText", notFoundText: "notFoundText", dropdownPosition: "dropdownPosition", typeToSearchText: "typeToSearchText", clearAllTooltip: "clearAllTooltip", placeholder: "placeholder", createText: "createText", labelForId: "labelForId", dropdownPanelMinHeight: "dropdownPanelMinHeight", name: "name", autoLoad: "autoLoad", allowCreate: "allowCreate", allowOriginalItemsUnselect: "allowOriginalItemsUnselect", isDisabled: "isDisabled", isReadonly: "isReadonly", remoteResource: "remoteResource", hideSelected: "hideSelected", bindLabel: "bindLabel", bindValue: "bindValue", items: "items", inputAttrs: "inputAttrs", closeOnSelect: "closeOnSelect", clearable: "clearable", groupBy: "groupBy", maxSelectedItems: "maxSelectedItems", multiple: "multiple", searchable: "searchable", clearSearchOnAdd: "clearSearchOnAdd", virtualScroll: "virtualScroll", tabIndex: "tabIndex", typeahead: "typeahead", guessCompareWith: "guessCompareWith", groupValue: "groupValue", trackBy: "trackBy", isRequired: "isRequired", compareWith: "compareWith" }, outputs: { onLoadRemoteResource: "onLoadRemoteResource", onClear: "onClear" }, providers: [
|
|
411
411
|
NgtMakeProvider(NgtSelectComponent)
|
|
412
|
-
], queries: [{ propertyName: "ngtOptionTemplate", first: true, predicate: NgtSelectOptionTmp, descendants: true, read: TemplateRef }, { propertyName: "ngtOptionSelectedTemplate", first: true, predicate: NgtSelectOptionSelectedTmp, descendants: true, read: TemplateRef }, { propertyName: "ngtSelectHeaderTemplate", first: true, predicate: NgtSelectHeaderTmp, descendants: true, read: TemplateRef }], viewQueries: [{ propertyName: "ngSelectComponent", first: true, predicate: NgSelectComponent, descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<label *ngIf=\"label\" [hidden]='shining'\n class=\"{{ shining ? '' : 'block' }} {{ ngtStyle.compile(['color.text', 'text', 'font', 'fontCase']) }} mb-2 flex\">\n <ngt-svg *ngIf=\"labelIcon\" class=\"mr-1 {{labelIconColor}}\" src=\"{{labelIcon}}\"></ngt-svg>\n {{ label }}:\n\n <span class=\"text-red-500 font-bold text-md ml-1\" *ngIf=\"isRequired\">*</span>\n\n <ngt-helper *ngIf=\"helpText\" [helpTitle]=\"helpTitle\" [iconColor]=\"helpTextColor\" class=\"ml-1\">\n {{ helpText }}\n </ngt-helper>\n</label>\n\n<div [hidden]='shining' class=\"{{ getSelectClass() }} normal-case\" style=\"min-height: 3rem;\">\n <ng-select class=\"custom\" [(ngModel)]='nativeValue' [name]='nativeName' [addTag]='allowCreate'\n [addTagText]=\"createText || ngtTranslateService.ngtSelectCreateText\" [bindLabel]=\"bindLabel\"\n [multiple]=\"multiple\" [hideSelected]=\"hideSelected\" [typeahead]=\"typeahead\"\n [notFoundText]=\"notFoundText || ngtTranslateService.ngtSelectNotFoundText\" [searchable]=\"searchable\"\n [disabled]='isDisabled || isReadonly' [clearable]=\"clearable && hasSelectedValue()\"\n [closeOnSelect]=\"closeOnSelect\" [trackByFn]=\"trackBy\" [labelForId]=\"labelForId\"\n [typeToSearchText]=\"typeToSearchText || ngtTranslateService.ngtSelectTypeToSearchText\"\n [placeholder]=\"placeholder || ngtTranslateService.ngtSelectPlaceholder\" [dropdownPosition]=\"dropdownPosition\"\n [groupBy]=\"groupBy\" [clearAllText]=\"clearAllTooltip || ngtTranslateService.ngtSelectClearAllTooltip\"\n [clearSearchOnAdd]=\"clearSearchOnAdd\" [bindValue]=\"bindValue\" [virtualScroll]=\"virtualScroll\"\n [loadingText]=\"loadingText || ngtTranslateService.ngtSelectLoadingText\" [maxSelectedItems]=\"maxSelectedItems\"\n [tabIndex]=\"tabIndex\" [items]=\"ngSelectItems | async\" [groupValue]=\"groupValue\" [loading]=\"loading\"\n [compareWith]='compareWith' [inputAttrs]=\"inputAttrs\" (scroll)=\"onScroll($event)\"\n (change)=\"onNativeChange($event)\" (clear)='onClearSelect()' (remove)='onRemoveSelectedItem($event)'\n (click)=\"wasClicked = true\">\n\n <ng-template *ngIf='ngtSelectHeaderTemplate' ng-header-tmp>\n <ng-template [ngTemplateOutlet]=\"ngtSelectHeaderTemplate\">\n </ng-template>\n </ng-template>\n\n <ng-template ng-label-tmp let-item=\"item\">\n <div class=\"flex w-full items-center pr-1\">\n <ng-container *ngIf=\"multiple\">\n <div class=\"ng-value-icon px-1 h-full border-r mr-2 {{ ngtStyle.compile(['color.text', 'text']) }} cursor-pointer\"\n (click)='removeItem($event, item)'>\n <svg class=\"ng-value-icon fill-current self-center\" xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\">\n <path\n d=\"M19.1 17.2l-5.3-5.3 5.3-5.3-1.8-1.8-5.3 5.4-5.3-5.3-1.8 1.7 5.3 5.3-5.3 5.3L6.7 19l5.3-5.3 5.3 5.3 1.8-1.8z\" />\n </svg>\n </div>\n </ng-container>\n\n <ng-template *ngIf='ngtOptionSelectedTemplate' [ngTemplateOutlet]=\"ngtOptionSelectedTemplate\"\n [ngTemplateOutletContext]=\"{ item: item }\">\n </ng-template>\n\n <ng-template *ngIf='!ngtOptionSelectedTemplate' [ngTemplateOutlet]=\"ngtOptionTemplate\"\n [ngTemplateOutletContext]=\"{ item: item }\">\n </ng-template>\n </div>\n </ng-template>\n\n <ng-template ng-option-tmp let-item=\"item\" let-index=\"index\" let-search=\"searchTerm\">\n <ng-template [ngTemplateOutlet]=\"ngtOptionTemplate\"\n [ngTemplateOutletContext]=\"{ item: item, index: index, searchTerm: search }\">\n </ng-template>\n </ng-template>\n </ng-select>\n</div>\n\n<ng-container *ngIf='shining'>\n <div class=\"flex\">\n <ngt-shining class=\"{{ ngtStyle.compile(['h']) }} w-full\"></ngt-shining>\n </div>\n</ng-container>\n\n<ngt-validation [control]=\"formControl\" [container]=\"formContainer\"></ngt-validation>\n\n<input *ngIf='componentReady' type='hidden' [ngModel]=\"value\" [name]=\"name\" [value]=\"value\">", styles: [".ng-select.ng-select-opened>.ng-select-container{background:#fff;border-color:#b3b3b3 #ccc #d9d9d9}.ng-select.ng-select-opened>.ng-select-container:hover{box-shadow:none}.ng-select.ng-select-opened>.ng-select-container .ng-arrow{top:-2px;border-color:transparent transparent #999;border-width:0 5px 5px}.ng-select.ng-select-opened>.ng-select-container .ng-arrow:hover{border-color:transparent transparent #333}.ng-select.ng-select-opened.ng-select-bottom>.ng-select-container{border-bottom-right-radius:0;border-bottom-left-radius:0}.ng-select.ng-select-opened.ng-select-top>.ng-select-container{border-top-right-radius:0;border-top-left-radius:0}.ng-select.ng-select-focused:not(.ng-select-opened)>.ng-select-container{border-color:#007eff;box-shadow:inset 0 1px 1px #00000013,0 0 0 3px #007eff1a}.ng-select.ng-select-disabled>.ng-select-container{background-color:#f9f9f9}.ng-select .ng-has-value .ng-placeholder{display:none}.ng-select .ng-select-container{background-color:#fff;border-radius:4px;border:1px solid #ccc;min-height:36px;align-items:center}.ng-select .ng-select-container:hover{box-shadow:0 1px #0000000f}.ng-select .ng-select-container .ng-value-container{align-items:center;padding-left:10px}[dir=rtl] .ng-select .ng-select-container .ng-value-container{padding-right:10px;padding-left:0}.ng-select .ng-select-container .ng-value-container .ng-placeholder{color:#999}.ng-select.ng-select-single .ng-select-container{height:36px}.ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{top:5px;left:0;padding-left:10px;padding-right:50px}[dir=rtl] .ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{padding-right:10px;padding-left:50px}.ng-select.ng-select-multiple.ng-select-disabled>.ng-select-container .ng-value-container .ng-value{background-color:#f9f9f9;border:1px solid #e6e6e6}.ng-select.ng-select-multiple.ng-select-disabled>.ng-select-container .ng-value-container .ng-value .ng-value-label{padding:0 5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container{padding-top:5px;padding-left:7px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container{padding-right:7px;padding-left:0}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{font-size:.9em;margin-bottom:5px;background-color:#ebf5ff;border-radius:2px;margin-right:5px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{margin-right:0;margin-left:5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled{background-color:#f9f9f9}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled .ng-value-label{padding-left:5px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled .ng-value-label{padding-left:0;padding-right:5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-label,.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon{display:inline-block;padding:1px 5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon:hover{background-color:#d1e8ff}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.left{border-right:1px solid #b8dbff}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.left{border-left:1px solid #b8dbff;border-right:none}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.right{border-left:1px solid #b8dbff}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.right{border-left:0;border-right:1px solid #b8dbff}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-input{padding:0 0 3px 3px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-input{padding:0 3px 3px 0}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{padding-bottom:5px;padding-left:3px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{padding-right:3px;padding-left:0}.ng-select .ng-clear-wrapper{color:#999}.ng-select .ng-clear-wrapper:hover .ng-clear{color:#d0021b}.ng-select .ng-spinner-zone{padding:5px 5px 0 0}[dir=rtl] .ng-select .ng-spinner-zone{padding:5px 0 0 5px}.ng-select .ng-arrow-wrapper{width:25px;padding-right:5px}[dir=rtl] .ng-select .ng-arrow-wrapper{padding-left:5px;padding-right:0}.ng-select .ng-arrow-wrapper:hover .ng-arrow{border-top-color:#666}.ng-select .ng-arrow-wrapper .ng-arrow{border-color:#999 transparent transparent;border-style:solid;border-width:5px 5px 2.5px}.ng-dropdown-panel{background-color:#fff;border:1px solid #ccc;box-shadow:0 1px #0000000f;left:0}.ng-dropdown-panel.ng-select-bottom{top:100%;border-bottom-right-radius:4px;border-bottom-left-radius:4px;border-top-color:#e6e6e6;margin-top:-1px}.ng-dropdown-panel.ng-select-bottom .ng-dropdown-panel-items .ng-option:last-child{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.ng-dropdown-panel.ng-select-top{bottom:100%;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-color:#e6e6e6;margin-bottom:-1px}.ng-dropdown-panel.ng-select-top .ng-dropdown-panel-items .ng-option:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.ng-dropdown-panel .ng-dropdown-header{border-bottom:1px solid #ccc;padding:5px 7px}.ng-dropdown-panel .ng-dropdown-footer{border-top:1px solid #ccc;padding:5px 7px}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup{-webkit-user-select:none;user-select:none;padding:8px 10px;font-weight:500;color:#0000008a;cursor:pointer}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-disabled{cursor:default}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-marked{background-color:#f5faff}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-selected,.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-selected.ng-option-marked{background-color:#ebf5ff;font-weight:600}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option{background-color:#fff;color:#000000de;padding:8px 10px}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected,.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected.ng-option-marked{color:#333;background-color:#ebf5ff}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected .ng-option-label,.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected.ng-option-marked .ng-option-label{font-weight:600}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-marked{background-color:#f5faff;color:#333}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-disabled{color:#ccc}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-child{padding-left:22px}[dir=rtl] .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-child{padding-right:22px;padding-left:0}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option .ng-tag-label{font-size:80%;font-weight:400;padding-right:5px}[dir=rtl] .ng-dropdown-panel .ng-dropdown-panel-items .ng-option .ng-tag-label{padding-left:5px;padding-right:0}[dir=rtl] .ng-dropdown-panel{direction:rtl;text-align:right}.ng-select,.ng-select.custom .ng-select-container{height:100%;margin-top:-1px;margin-bottom:-1px}.ng-select-container{color:inherit!important;min-height:3rem!important}.select-border-disabled .ng-select-container{border:solid #cbd5e0 1px!important;background-color:#fafafa!important;border-radius:.25rem;padding:1px}.select-border-error .ng-select-container{border:solid #c53030 1px!important;background-color:unset!important;border-radius:.25rem;padding:1px}.select-border-normal .ng-select-container{border:solid #cbd5e0 1px!important;background-color:unset!important;border-radius:.25rem;padding:1px}.ng-value{max-width:100%}.ng-select-dropdown-panel-auto .ng-dropdown-panel .ng-dropdown-panel-items{min-height:unset}.ng-select-dropdown-panel-xs .ng-dropdown-panel .ng-dropdown-panel-items{min-height:80px!important}.ng-select-dropdown-panel-sm .ng-dropdown-panel .ng-dropdown-panel-items{min-height:100px!important}.ng-select-dropdown-panel-md .ng-dropdown-panel .ng-dropdown-panel-items{min-height:120px!important}.ng-select-dropdown-panel-lg .ng-dropdown-panel .ng-dropdown-panel-items{min-height:140px!important}.ng-select-dropdown-panel-xl .ng-dropdown-panel .ng-dropdown-panel-items{min-height:160px!important}.ng-dropdown-panel .ng-dropdown-header{padding:0!important}\n"], dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i7.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { kind: "directive", type: i7.NgOptionTemplateDirective, selector: "[ng-option-tmp]" }, { kind: "directive", type: i7.NgLabelTemplateDirective, selector: "[ng-label-tmp]" }, { kind: "directive", type: i7.NgHeaderTemplateDirective, selector: "[ng-header-tmp]" }, { kind: "component", type: i8.NgtValidationComponent, selector: "ngt-validation", inputs: ["control", "container", "minValue", "minLength"] }, { kind: "component", type: i9.NgtShiningComponent, selector: "ngt-shining", inputs: ["shiningWidth"] }, { kind: "component", type: i10.NgtHelperComponent, selector: "ngt-helper", inputs: ["helpTextColor", "helpText", "helpTitle", "icon", "iconSize", "iconColor", "iconTitle", "tooltipSize"] }, { kind: "component", type: i11.NgtSvgComponent, selector: "ngt-svg", inputs: ["src", "class"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }], viewProviders: [
|
|
412
|
+
], queries: [{ propertyName: "ngtOptionTemplate", first: true, predicate: NgtSelectOptionTmp, descendants: true, read: TemplateRef }, { propertyName: "ngtOptionSelectedTemplate", first: true, predicate: NgtSelectOptionSelectedTmp, descendants: true, read: TemplateRef }, { propertyName: "ngtSelectHeaderTemplate", first: true, predicate: NgtSelectHeaderTmp, descendants: true, read: TemplateRef }], viewQueries: [{ propertyName: "ngSelectComponent", first: true, predicate: NgSelectComponent, descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<label *ngIf=\"label\" [hidden]='shining'\n class=\"{{ shining ? '' : 'block' }} {{ ngtStyle.compile(['color.text', 'text', 'font', 'fontCase']) }} mb-2 flex\">\n <ngt-svg *ngIf=\"labelIcon\" class=\"mr-1 {{labelIconColor}}\" src=\"{{labelIcon}}\"></ngt-svg>\n {{ label }}:\n\n <span class=\"text-red-500 font-bold text-md ml-1\" *ngIf=\"isRequired\">*</span>\n\n <ngt-helper *ngIf=\"helpText\" [helpTitle]=\"helpTitle\" [iconColor]=\"helpTextColor\" class=\"ml-1\">\n {{ helpText }}\n </ngt-helper>\n</label>\n\n<div [hidden]='shining' class=\"{{ getSelectClass() }} normal-case\" style=\"min-height: 3rem;\">\n <ng-select class=\"custom\" [(ngModel)]='nativeValue' [name]='nativeName' [addTag]='allowCreate'\n [addTagText]=\"createText || ngtTranslateService.ngtSelectCreateText\" [bindLabel]=\"bindLabel\"\n [multiple]=\"multiple\" [hideSelected]=\"hideSelected\" [typeahead]=\"typeahead\"\n [notFoundText]=\"notFoundText || ngtTranslateService.ngtSelectNotFoundText\" [searchable]=\"searchable\"\n [disabled]='isDisabled || isReadonly' [clearable]=\"clearable && hasSelectedValue()\"\n [closeOnSelect]=\"closeOnSelect\" [trackByFn]=\"trackBy\" [labelForId]=\"labelForId\"\n [typeToSearchText]=\"typeToSearchText || ngtTranslateService.ngtSelectTypeToSearchText\"\n [placeholder]=\"placeholder || ngtTranslateService.ngtSelectPlaceholder\" [dropdownPosition]=\"dropdownPosition\"\n [groupBy]=\"groupBy\" [clearAllText]=\"clearAllTooltip || ngtTranslateService.ngtSelectClearAllTooltip\"\n [clearSearchOnAdd]=\"clearSearchOnAdd\" [bindValue]=\"bindValue\" [virtualScroll]=\"virtualScroll\"\n [loadingText]=\"loadingText || ngtTranslateService.ngtSelectLoadingText\" [maxSelectedItems]=\"maxSelectedItems\"\n [tabIndex]=\"tabIndex\" [items]=\"ngSelectItems | async\" [groupValue]=\"groupValue\" [loading]=\"loading\"\n [compareWith]='compareWith' [inputAttrs]=\"inputAttrs\" (scroll)=\"onScroll($event)\"\n (change)=\"onNativeChange($event)\" (clear)='onClearSelect()' (remove)='onRemoveSelectedItem($event)'\n (click)=\"wasClicked = true\">\n\n <ng-template *ngIf='ngtSelectHeaderTemplate' ng-header-tmp>\n <ng-template [ngTemplateOutlet]=\"ngtSelectHeaderTemplate\">\n </ng-template>\n </ng-template>\n\n <ng-template ng-label-tmp let-item=\"item\">\n <div class=\"flex w-full items-center pr-1\">\n <ng-container *ngIf=\"multiple\">\n <div class=\"ng-value-icon px-1 h-full border-r mr-2 {{ ngtStyle.compile(['color.text', 'text']) }} cursor-pointer\"\n (click)='removeItem($event, item)'>\n <svg class=\"ng-value-icon fill-current self-center\" xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\">\n <path\n d=\"M19.1 17.2l-5.3-5.3 5.3-5.3-1.8-1.8-5.3 5.4-5.3-5.3-1.8 1.7 5.3 5.3-5.3 5.3L6.7 19l5.3-5.3 5.3 5.3 1.8-1.8z\" />\n </svg>\n </div>\n </ng-container>\n\n <ng-template *ngIf='ngtOptionSelectedTemplate' [ngTemplateOutlet]=\"ngtOptionSelectedTemplate\"\n [ngTemplateOutletContext]=\"{ item: item }\">\n </ng-template>\n\n <ng-template *ngIf='!ngtOptionSelectedTemplate' [ngTemplateOutlet]=\"ngtOptionTemplate\"\n [ngTemplateOutletContext]=\"{ item: item }\">\n </ng-template>\n </div>\n </ng-template>\n\n <ng-template ng-option-tmp let-item=\"item\" let-index=\"index\" let-search=\"searchTerm\">\n <ng-template [ngTemplateOutlet]=\"ngtOptionTemplate\"\n [ngTemplateOutletContext]=\"{ item: item, index: index, searchTerm: search }\">\n </ng-template>\n </ng-template>\n </ng-select>\n</div>\n\n<ng-container *ngIf='shining'>\n <div class=\"flex\">\n <ngt-shining class=\"{{ ngtStyle.compile(['h']) }} w-full\"></ngt-shining>\n </div>\n</ng-container>\n\n<ngt-validation [control]=\"formControl\" [container]=\"formContainer\"></ngt-validation>\n\n<input *ngIf='componentReady' type='hidden' [ngModel]=\"value\" [name]=\"name\" [value]=\"value\">", styles: [".ng-select.ng-select-opened>.ng-select-container{background:#fff;border-color:#b3b3b3 #ccc #d9d9d9}.ng-select.ng-select-opened>.ng-select-container:hover{box-shadow:none}.ng-select.ng-select-opened>.ng-select-container .ng-arrow{top:-2px;border-color:transparent transparent #999;border-width:0 5px 5px}.ng-select.ng-select-opened>.ng-select-container .ng-arrow:hover{border-color:transparent transparent #333}.ng-select.ng-select-opened.ng-select-bottom>.ng-select-container{border-bottom-right-radius:0;border-bottom-left-radius:0}.ng-select.ng-select-opened.ng-select-top>.ng-select-container{border-top-right-radius:0;border-top-left-radius:0}.ng-select.ng-select-focused:not(.ng-select-opened)>.ng-select-container{border-color:#007eff;box-shadow:inset 0 1px 1px #00000013,0 0 0 3px #007eff1a}.ng-select.ng-select-disabled>.ng-select-container{background-color:#f9f9f9}.ng-select .ng-has-value .ng-placeholder{display:none}.ng-select .ng-select-container{background-color:#fff;border-radius:4px;border:1px solid #ccc;min-height:36px;align-items:center}.ng-select .ng-select-container:hover{box-shadow:0 1px #0000000f}.ng-select .ng-select-container .ng-value-container{align-items:center;padding-left:10px}[dir=rtl] .ng-select .ng-select-container .ng-value-container{padding-right:10px;padding-left:0}.ng-select .ng-select-container .ng-value-container .ng-placeholder{color:#999}.ng-select.ng-select-single .ng-select-container{height:36px}.ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{top:5px;left:0;padding-left:10px;padding-right:50px}[dir=rtl] .ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{padding-right:10px;padding-left:50px}.ng-select.ng-select-multiple.ng-select-disabled>.ng-select-container .ng-value-container .ng-value{background-color:#f9f9f9;border:1px solid #e6e6e6}.ng-select.ng-select-multiple.ng-select-disabled>.ng-select-container .ng-value-container .ng-value .ng-value-label{padding:0 5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container{padding-top:5px;padding-left:7px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container{padding-right:7px;padding-left:0}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{font-size:.9em;margin-bottom:5px;background-color:#ebf5ff;border-radius:2px;margin-right:5px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{margin-right:0;margin-left:5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled{background-color:#f9f9f9}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled .ng-value-label{padding-left:5px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled .ng-value-label{padding-left:0;padding-right:5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-label,.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon{display:inline-block;padding:1px 5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon:hover{background-color:#d1e8ff}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.left{border-right:1px solid #b8dbff}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.left{border-left:1px solid #b8dbff;border-right:none}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.right{border-left:1px solid #b8dbff}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.right{border-left:0;border-right:1px solid #b8dbff}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-input{padding:0 0 3px 3px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-input{padding:0 3px 3px 0}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{padding-bottom:5px;padding-left:3px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{padding-right:3px;padding-left:0}.ng-select .ng-clear-wrapper{color:#999}.ng-select .ng-clear-wrapper:hover .ng-clear{color:#d0021b}.ng-select .ng-spinner-zone{padding:5px 5px 0 0}[dir=rtl] .ng-select .ng-spinner-zone{padding:5px 0 0 5px}.ng-select .ng-arrow-wrapper{width:25px;padding-right:5px}[dir=rtl] .ng-select .ng-arrow-wrapper{padding-left:5px;padding-right:0}.ng-select .ng-arrow-wrapper:hover .ng-arrow{border-top-color:#666}.ng-select .ng-arrow-wrapper .ng-arrow{border-color:#999 transparent transparent;border-style:solid;border-width:5px 5px 2.5px}.ng-dropdown-panel{background-color:#fff;border:1px solid #ccc;box-shadow:0 1px #0000000f;left:0}.ng-dropdown-panel.ng-select-bottom{top:100%;border-bottom-right-radius:4px;border-bottom-left-radius:4px;border-top-color:#e6e6e6;margin-top:-1px}.ng-dropdown-panel.ng-select-bottom .ng-dropdown-panel-items .ng-option:last-child{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.ng-dropdown-panel.ng-select-top{bottom:100%;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-color:#e6e6e6;margin-bottom:-1px}.ng-dropdown-panel.ng-select-top .ng-dropdown-panel-items .ng-option:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.ng-dropdown-panel .ng-dropdown-header{border-bottom:1px solid #ccc;padding:5px 7px}.ng-dropdown-panel .ng-dropdown-footer{border-top:1px solid #ccc;padding:5px 7px}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup{-webkit-user-select:none;user-select:none;padding:8px 10px;font-weight:500;color:#0000008a;cursor:pointer}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-disabled{cursor:default}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-marked{background-color:#f5faff}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-selected,.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-selected.ng-option-marked{background-color:#ebf5ff;font-weight:600}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option{background-color:#fff;color:#000000de;padding:8px 10px}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected,.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected.ng-option-marked{color:#333;background-color:#ebf5ff}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected .ng-option-label,.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected.ng-option-marked .ng-option-label{font-weight:600}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-marked{background-color:#f5faff;color:#333}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-disabled{color:#ccc}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-child{padding-left:22px}[dir=rtl] .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-child{padding-right:22px;padding-left:0}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option .ng-tag-label{font-size:80%;font-weight:400;padding-right:5px}[dir=rtl] .ng-dropdown-panel .ng-dropdown-panel-items .ng-option .ng-tag-label{padding-left:5px;padding-right:0}[dir=rtl] .ng-dropdown-panel{direction:rtl;text-align:right}.ng-select,.ng-select.custom .ng-select-container{height:100%;margin-top:-1px;margin-bottom:-1px}.ng-select-container{color:inherit!important;min-height:3rem!important}.select-border-disabled .ng-select-container{border:solid #cbd5e0 1px!important;background-color:#fafafa!important;border-radius:.25rem;padding:1px}.select-border-error .ng-select-container{border:solid #c53030 1px!important;background-color:unset!important;border-radius:.25rem;padding:1px}.select-border-normal .ng-select-container{border:solid #cbd5e0 1px!important;background-color:unset!important;border-radius:.25rem;padding:1px}.ng-value{max-width:100%}.ng-select-dropdown-panel-auto .ng-dropdown-panel .ng-dropdown-panel-items{min-height:unset}.ng-select-dropdown-panel-xs .ng-dropdown-panel .ng-dropdown-panel-items{min-height:80px!important}.ng-select-dropdown-panel-sm .ng-dropdown-panel .ng-dropdown-panel-items{min-height:100px!important}.ng-select-dropdown-panel-md .ng-dropdown-panel .ng-dropdown-panel-items{min-height:120px!important}.ng-select-dropdown-panel-lg .ng-dropdown-panel .ng-dropdown-panel-items{min-height:140px!important}.ng-select-dropdown-panel-xl .ng-dropdown-panel .ng-dropdown-panel-items{min-height:160px!important}.ng-dropdown-panel .ng-dropdown-header{padding:0!important}\n"], dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i7.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { kind: "directive", type: i7.NgOptionTemplateDirective, selector: "[ng-option-tmp]" }, { kind: "directive", type: i7.NgLabelTemplateDirective, selector: "[ng-label-tmp]" }, { kind: "directive", type: i7.NgHeaderTemplateDirective, selector: "[ng-header-tmp]" }, { kind: "component", type: i8.NgtValidationComponent, selector: "ngt-validation", inputs: ["control", "container", "minValue", "minLength"] }, { kind: "component", type: i9.NgtShiningComponent, selector: "ngt-shining", inputs: ["shiningWidth"] }, { kind: "component", type: i10.NgtHelperComponent, selector: "ngt-helper", inputs: ["helpTextColor", "helpText", "helpTitle", "icon", "iconSize", "iconColor", "iconTitle", "tooltipSize", "autoXReverse"] }, { kind: "component", type: i11.NgtSvgComponent, selector: "ngt-svg", inputs: ["src", "class"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }], viewProviders: [
|
|
413
413
|
{ provide: ControlContainer, useExisting: NgForm }
|
|
414
414
|
], encapsulation: i0.ViewEncapsulation.None });
|
|
415
415
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: NgtSelectComponent, decorators: [{
|
|
@@ -547,4 +547,4 @@ export var NgtSelectDropdownPanelHeight;
|
|
|
547
547
|
NgtSelectDropdownPanelHeight["LG"] = "lg";
|
|
548
548
|
NgtSelectDropdownPanelHeight["XL"] = "xl";
|
|
549
549
|
})(NgtSelectDropdownPanelHeight || (NgtSelectDropdownPanelHeight = {}));
|
|
550
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd0LXNlbGVjdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy10YWlsd2luZC9zcmMvY29tcG9uZW50cy9uZ3Qtc2VsZWN0L25ndC1zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdGFpbHdpbmQvc3JjL2NvbXBvbmVudHMvbmd0LXNlbGVjdC9uZ3Qtc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxTQUFTLEVBQ1QsWUFBWSxFQUVaLFlBQVksRUFDWixJQUFJLEVBRUosS0FBSyxFQUlMLFFBQVEsRUFDUixNQUFNLEVBQ04sSUFBSSxFQUVKLFFBQVEsRUFDUixXQUFXLEVBQ1gsU0FBUyxFQUNULGlCQUFpQixHQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQW1CLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNFLE9BQU8sRUFBWSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxVQUFVLEVBQVksT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUVuRSxPQUFPLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRS9FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzVELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUcxQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUU1RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsMEJBQTBCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7Ozs7OztBQWM1RyxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsY0FBYztJQTBGbEQsWUFFVyxzQkFBOEMs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QkFBekIsS0FBSztnQkFDVSxnQkFBZ0I7c0JBQS9CLEtBQUs7Z0JBQ1UsYUFBYTtzQkFBNUIsS0FBSztnQkFDVSxRQUFRO3NCQUF2QixLQUFLO2dCQUNVLFNBQVM7c0JBQXhCLEtBQUs7Z0JBQ1UsZ0JBQWdCO3NCQUEvQixLQUFLO2dCQUNVLFVBQVU7c0JBQXpCLEtBQUs7Z0JBQ1UsT0FBTztzQkFBdEIsS0FBSztnQkFHVSxVQUFVO3NCQUF6QixLQUFLO2dCQUVXLG9CQUFvQjtzQkFBcEMsTUFBTTtnQkFDVSxPQUFPO3NCQUF2QixNQUFNO2dCQTJFUyxXQUFXO3NCQUExQixLQUFLOztBQXVZVixNQUFNLENBQU4sSUFBWSw0QkFPWDtBQVBELFdBQVksNEJBQTRCO0lBQ3BDLDZDQUFhLENBQUE7SUFDYix5Q0FBUyxDQUFBO0lBQ1QseUNBQVMsQ0FBQTtJQUNULHlDQUFTLENBQUE7SUFDVCx5Q0FBUyxDQUFBO0lBQ1QseUNBQVMsQ0FBQTtBQUNiLENBQUMsRUFQVyw0QkFBNEIsS0FBNUIsNEJBQTRCLFFBT3ZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIERvQ2hlY2ssXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3QsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFNlbGYsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBTa2lwU2VsZixcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBDb250cm9sQ29udGFpbmVyLCBOZ0Zvcm0gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBOZ09wdGlvbiwgTmdTZWxlY3RDb21wb25lbnQgfSBmcm9tICdAbmctc2VsZWN0L25nLXNlbGVjdCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBPYnNlcnZlciwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IE5ndEJhc2VOZ01vZGVsLCBOZ3RNYWtlUHJvdmlkZXIgfSBmcm9tICcuLi8uLi9iYXNlL25ndC1iYXNlLW5nLW1vZGVsJztcbmltcG9ydCB7IE5ndFN0eWxpemFibGVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL25ndC1zdHlsaXphYmxlL25ndC1zdHlsaXphYmxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBnZXRFbnVtRnJvbVN0cmluZyB9IGZyb20gJy4uLy4uL2hlbHBlcnMvZW51bS9lbnVtJztcbmltcG9ydCB7IHV1aWQgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3V1aWQnO1xuaW1wb3J0IHsgTmd0SHR0cFJlc3BvbnNlLCBOZ3RIdHRwU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2h0dHAvbmd0LWh0dHAuc2VydmljZSc7XG5pbXBvcnQgeyBOZ3RUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaHR0cC9uZ3QtdHJhbnNsYXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTmd0U3R5bGl6YWJsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9uZ3Qtc3R5bGl6YWJsZS9uZ3Qtc3R5bGl6YWJsZS5zZXJ2aWNlJztcbmltcG9ydCB7IE5ndEZvcm1Db21wb25lbnQgfSBmcm9tICcuLi9uZ3QtZm9ybS9uZ3QtZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTmd0U2VsZWN0SGVhZGVyVG1wLCBOZ3RTZWxlY3RPcHRpb25TZWxlY3RlZFRtcCwgTmd0U2VsZWN0T3B0aW9uVG1wIH0gZnJvbSAnLi9uZ3Qtc2VsZWN0LmRpcmVjdGl2ZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd0LXNlbGVjdCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL25ndC1zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL25ndC1zZWxlY3QuY29tcG9uZW50LmNzcyddLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBOZ3RNYWtlUHJvdmlkZXIoTmd0U2VsZWN0Q29tcG9uZW50KVxuICAgIF0sXG4gICAgdmlld1Byb3ZpZGVyczogW1xuICAgICAgICB7IHByb3ZpZGU6IENvbnRyb2xDb250YWluZXIsIHVzZUV4aXN0aW5nOiBOZ0Zvcm0gfVxuICAgIF0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBOZ3RTZWxlY3RDb21wb25lbnQgZXh0ZW5kcyBOZ3RCYXNlTmdNb2RlbCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIERvQ2hlY2sge1xuICAgIEBWaWV3Q2hpbGQoTmdTZWxlY3RDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pIHB1YmxpYyBuZ1NlbGVjdENvbXBvbmVudDogTmdTZWxlY3RDb21wb25lbnQ7XG4gICAgQENvbnRlbnRDaGlsZChOZ3RTZWxlY3RPcHRpb25UbXAsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgcHVibGljIG5ndE9wdGlvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBDb250ZW50Q2hpbGQoTmd0U2VsZWN0T3B0aW9uU2VsZWN0ZWRUbXAsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgcHVibGljIG5ndE9wdGlvblNlbGVjdGVkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQENvbnRlbnRDaGlsZChOZ3RTZWxlY3RIZWFkZXJUbXAsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgcHVibGljIG5ndFNlbGVjdEhlYWRlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIFZpc3VhbCAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBsYWJlbDogc3RyaW5nID0gJyc7XG4gICAgQElucHV0KCkgcHVibGljIGxhYmVsSWNvbjogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBsYWJlbEljb25Db2xvcjogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBoZWxwVGl0bGU6IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgaGVscFRleHQ6IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgaGVscFRleHRDb2xvcjogc3RyaW5nID0gJ3RleHQtZ3JlZW4tNTAwJztcbiAgICBASW5wdXQoKSBwdWJsaWMgc2hpbmluZyA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgcHVibGljIGxvYWRpbmdUZXh0OiBzdHJpbmcgPSAnJztcbiAgICBASW5wdXQoKSBwdWJsaWMgbm90Rm91bmRUZXh0OiBzdHJpbmcgPSAnJztcbiAgICBASW5wdXQoKSBwdWJsaWMgZHJvcGRvd25Qb3NpdGlvbiA9ICdhdXRvJztcbiAgICBASW5wdXQoKSBwdWJsaWMgdHlwZVRvU2VhcmNoVGV4dDogc3RyaW5nID0gJyc7XG4gICAgQElucHV0KCkgcHVibGljIGNsZWFyQWxsVG9vbHRpcDogc3RyaW5nID0gJyc7XG4gICAgQElucHV0KCkgcHVibGljIHBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnJztcbiAgICBASW5wdXQoKSBwdWJsaWMgY3JlYXRlVGV4dDogc3RyaW5nID0gJyc7XG4gICAgQElucHV0KCkgcHVibGljIGxhYmVsRm9ySWQ6IHN0cmluZyA9ICcnO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBkcm9wZG93blBhbmVsTWluSGVpZ2h0OiBOZ3RTZWxlY3REcm9wZG93blBhbmVsSGVpZ2h0ID0gTmd0U2VsZWN0RHJvcGRvd25QYW5lbEhlaWdodC5BVVRPO1xuXG4gICAgLyoqIEJlaGF2aW9yICovXG4gICAgQElucHV0KCkgcHVibGljIG5hbWU6IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgYXV0b0xvYWQ6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHVibGljIGFsbG93Q3JlYXRlOiBib29sZWFuIHwgUHJvbWlzZTxhbnk+IHwgRnVuY3Rpb24gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgYWxsb3dPcmlnaW5hbEl0ZW1zVW5zZWxlY3Q6IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpc0Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgcHVibGljIGlzUmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgcmVtb3RlUmVzb3VyY2U6IGFueTtcbiAgICBASW5wdXQoKSBwdWJsaWMgaGlkZVNlbGVjdGVkOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBiaW5kTGFiZWw6IHN0cmluZyA9ICduYW1lJztcbiAgICBASW5wdXQoKSBwdWJsaWMgYmluZFZhbHVlOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIGl0ZW1zOiBBcnJheTxhbnk+IHwgT2JzZXJ2YWJsZTxhbnk+ID0gW107XG4gICAgQElucHV0KCkgcHVibGljIGlucHV0QXR0cnM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG4gICAgQElucHV0KCkgcHVibGljIGNsb3NlT25TZWxlY3Q6IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBjbGVhcmFibGU6IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBncm91cEJ5OiBzdHJpbmcgfCBGdW5jdGlvbiA9IG51bGw7XG4gICAgQElucHV0KCkgcHVibGljIG1heFNlbGVjdGVkSXRlbXM6IG51bWJlcjtcbiAgICBASW5wdXQoKSBwdWJsaWMgbXVsdGlwbGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgc2VhcmNoYWJsZTogYm9vbGVhbiA9IHRydWU7XG4gICAgQElucHV0KCkgcHVibGljIGNsZWFyU2VhcmNoT25BZGQ6IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyB2aXJ0dWFsU2Nyb2xsOiBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgdGFiSW5kZXg6IG51bWJlcjtcbiAgICBASW5wdXQoKSBwdWJsaWMgdHlwZWFoZWFkOiBTdWJqZWN0PGFueT47XG4gICAgQElucHV0KCkgcHVibGljIGd1ZXNzQ29tcGFyZVdpdGg6IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBncm91cFZhbHVlOiAoZ3JvdXBLZXk6IHN0cmluZywgY2lsZHJlbjogYW55W10pID0+IE9iamVjdDtcbiAgICBASW5wdXQoKSBwdWJsaWMgdHJhY2tCeTogKGl0ZW06IGFueSkgPT4gYW55O1xuXG4gICAgLyoqIFZhbGlkYXRpb24gKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgaXNSZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQE91dHB1dCgpIHB1YmxpYyBvbkxvYWRSZW1vdGVSZXNvdXJjZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgcHVibGljIG9uQ2xlYXI6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIHB1YmxpYyBuYXRpdmVOYW1lID0gdXVpZCgpO1xuICAgIHB1YmxpYyBuZ3RTdHlsZTogTmd0U3R5bGl6YWJsZVNlcnZpY2U7XG4gICAgcHVibGljIG5nU2VsZWN0SXRlbXM6IGFueSA9IFtdO1xuICAgIHB1YmxpYyBuYXRpdmVWYWx1ZTogYW55O1xuICAgIHB1YmxpYyBjb21wb25lbnRSZWFkeTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyB3YXNDbGlja2VkOiBib29sZWFuO1xuXG4gICAgcHJpdmF0ZSBuZ1NlYXJjaE9ic2VydmVyOiBPYnNlcnZlcjxhbnk+O1xuICAgIHByaXZhdGUgb3JpZ2luYWxQZXJQYWdlID0gMTU7XG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBBcnJheTxTdWJzY3JpcHRpb24+ID0gW107XG4gICAgcHJpdmF0ZSBvcmlnaW5hbEl0ZW1zOiBBcnJheTxhbnk+O1xuXG4gICAgcHJpdmF0ZSBjdXJyZW50U3RhdGUgPSB7XG4gICAgICAgIGZpbHRlcnM6IHt9LFxuICAgICAgICBzb3J0OiB7XG4gICAgICAgICAgICBmaWVsZDogJycsXG4gICAgICAgICAgICBkaXJlY3Rpb246ICcnXG4gICAgICAgIH0sXG4gICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgIGNvdW50OiBudWxsLFxuICAgICAgICAgICAgcGFnZTogMSxcbiAgICAgICAgICAgIHBhZ2VzOiBudWxsLFxuICAgICAgICAgICAgdG90YWw6IG51bGwsXG4gICAgICAgICAgICBmcm9tOiBudWxsLFxuICAgICAgICAgICAgdG86IG51bGwsXG4gICAgICAgICAgICBwZXJfcGFnZTogbnVsbFxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHByaXZhdGUgc2VhcmNoVGltZW91dDogYW55O1xuICAgIHByaXZhdGUgaGFkRmlyc3RJdGVtc0xvYWQ6IGJvb2xlYW47XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIEBPcHRpb25hbCgpIEBTZWxmKClcbiAgICAgICAgcHVibGljIG5ndFN0eWxpemFibGVEaXJlY3RpdmU6IE5ndFN0eWxpemFibGVEaXJlY3RpdmUsXG4gICAgICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBAT3B0aW9uYWwoKSBASG9zdCgpXG4gICAgICAgIHB1YmxpYyBmb3JtQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKVxuICAgICAgICBwdWJsaWMgbmd0Rm9ybUNvbXBvbmVudDogTmd0Rm9ybUNvbXBvbmVudCxcbiAgICAgICAgcHJpdmF0ZSBuZ3RIdHRwOiBOZ3RIdHRwU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIEBPcHRpb25hbCgpXG4gICAgICAgIHB1YmxpYyBuZ3RUcmFuc2xhdGVTZXJ2aWNlOiBOZ3RUcmFuc2xhdGVTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgaWYgKHRoaXMubmd0Rm9ybUNvbXBvbmVudCkge1xuICAgICAgICAgICAgdGhpcy5zaGluaW5nID0gdGhpcy5uZ3RGb3JtQ29tcG9uZW50LmlzU2hpbmluZygpO1xuXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgICB0aGlzLm5ndEZvcm1Db21wb25lbnQub25TaGluaW5nQ2hhbmdlLnN1YnNjcmliZSgoc2hpbmluZzogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNoaW5pbmcgPSBzaGluaW5nO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubmd0U3R5bGl6YWJsZURpcmVjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5uZ3RTdHlsZSA9IHRoaXMubmd0U3R5bGl6YWJsZURpcmVjdGl2ZS5nZXROZ3RTdHlsaXphYmxlU2VydmljZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5uZ3RTdHlsZSA9IG5ldyBOZ3RTdHlsaXphYmxlU2VydmljZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5uZ3RTdHlsZS5sb2FkKHRoaXMuaW5qZWN0b3IsICdOZ3RTZWxlY3QnLCB7XG4gICAgICAgICAgICBoOiAnaC0xMicsXG4gICAgICAgICAgICB0ZXh0OiAndGV4dC1zbScsXG4gICAgICAgICAgICBmb250Q2FzZTogJycsXG4gICAgICAgICAgICBjb2xvcjoge1xuICAgICAgICAgICAgICAgIGJnOiAnYmctd2hpdGUnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHB1YmxpYyBjb21wYXJlV2l0aCA9IChhOiBhbnksIGI6IGFueSkgPT4gYSA9PT0gYjtcblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmZvcm1Db250YWluZXIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJUaGUgZWxlbWVudCBtdXN0IGJlIGluc2lkZSBhIDxmb3JtICNmb3JtPSduZ0Zvcm0nPiB0YWchXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLm5hbWUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJUaGUgZWxlbWVudCBtdXN0IGNvbnRhaW4gYSBuYW1lIGF0dHJpYnV0ZSFcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMubXVsdGlwbGUgJiYgdGhpcy5pc1JlcXVpcmVkKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyYWJsZSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VPblNlbGVjdCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuaW5pdENvbXBvbmVudFZhbGlkYXRpb24oKTtcbiAgICAgICAgfSwgNTAwKTtcblxuICAgICAgICB0aGlzLm5nU2VsZWN0SXRlbXMgPSBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXIpID0+IHtcbiAgICAgICAgICAgIHRoaXMubmdTZWFyY2hPYnNlcnZlciA9IG9ic2VydmVyO1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChbXSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMuYmluZElubmVySW5wdXRVbmlxdWVJZCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ0RvQ2hlY2soKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5oYWRGaXJzdEl0ZW1zTG9hZCAmJiB0aGlzLmNhbkxvYWRJdGVtcygpKSB7XG4gICAgICAgICAgICB0aGlzLmhhZEZpcnN0SXRlbXNMb2FkID0gdHJ1ZTtcblxuICAgICAgICAgICAgdGhpcy5pbml0TmdTZWxlY3RJdGVtcygpO1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlcGxhY2VTaG93QWRkVGFnKCk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLm5nU2VsZWN0Q29tcG9uZW50Lml0ZW1zTGlzdC5tYXBTZWxlY3RlZEl0ZW1zKCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZ2V0RWxlbWVudFRpdGxlKCkgfHwgdGhpcy5nZXRFbGVtZW50VGl0bGUoKSA9PT0gJ251bGwnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmdTZWxlY3RDb21wb25lbnQuZWxlbWVudC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC50aXRsZSA9ICcnO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMub3JpZ2luYWxJdGVtcyA9IHRoaXMubmdTZWxlY3RDb21wb25lbnQuc2VsZWN0ZWRJdGVtcz8ubWFwKChlbGVtZW50KSA9PiBlbGVtZW50LnZhbHVlKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5kZXN0cm95U3Vic2NyaXB0aW9ucygpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVJdGVtKGV2ZW50OiBFdmVudCwgaXRlbTogYW55KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLm5nU2VsZWN0Q29tcG9uZW50LmNsZWFySXRlbShpdGVtKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVmcmVzaCgpIHtcbiAgICAgICAgdGhpcy5pbml0TmdTZWxlY3RJdGVtcygpO1xuICAgICAgICB0aGlzLmluaXRDb21wb25lbnRWYWxpZGF0aW9uKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlc2V0KCkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLm5hdGl2ZVZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBpZiAoY2hhbmdlcy5pc1JlcXVpcmVkKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbGlkYXRpb25zKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhbmdlcy5yZW1vdGVSZXNvdXJjZSB8fCBjaGFuZ2VzLml0ZW1zKSB7XG4gICAgICAgICAgICB0aGlzLmluaXROZ1NlbGVjdEl0ZW1zKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhbmdlcy5kcm9wZG93blBhbmVsTWluSGVpZ2h0KSB7XG4gICAgICAgICAgICB0aGlzLmRyb3Bkb3duUGFuZWxNaW5IZWlnaHQgPSBnZXRFbnVtRnJvbVN0cmluZyhjaGFuZ2VzLmRyb3Bkb3duUGFuZWxNaW5IZWlnaHQuY3VycmVudFZhbHVlLCBOZ3RTZWxlY3REcm9wZG93blBhbmVsSGVpZ2h0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRGb2N1cygpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5nU2VsZWN0Q29tcG9uZW50LmZvY3VzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkNsZWFyU2VsZWN0KCkge1xuICAgICAgICBpZiAoIXRoaXMubmF0aXZlVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMubWFya0FzUHJpc3RpbmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY3VycmVudFN0YXRlLmZpbHRlcnMgPSB7fTtcblxuICAgICAgICB0aGlzLm9uQ2xlYXIuZW1pdCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblJlbW92ZVNlbGVjdGVkSXRlbShpdGVtOiBOZ09wdGlvbikge1xuICAgICAgICBpZiAoIXRoaXMuYWxsb3dPcmlnaW5hbEl0ZW1zVW5zZWxlY3QgJiYgdGhpcy5oYWRQcmV2aW91c1NlbGVjdGlvbihpdGVtLnZhbHVlKSkge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLm5nU2VsZWN0Q29tcG9uZW50LnNlbGVjdChpdGVtKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RmlsdGVySW5wdXRWYWx1ZSgpIHtcbiAgICAgICAgbGV0IGlucHV0RmllbGQgPSB0aGlzLm5nU2VsZWN0Q29tcG9uZW50LnNlYXJjaElucHV0ID9cbiAgICAgICAgICAgIHRoaXMubmdTZWxlY3RDb21wb25lbnQuc2VhcmNoSW5wdXQgOlxuICAgICAgICAgICAgdGhpcy5uZ1NlbGVjdENvbXBvbmVudFsnc2VhcmNoSW5wdXQnXTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBpbnB1dEZpZWxkICYmXG4gICAgICAgICAgICBpbnB1dEZpZWxkLm5hdGl2ZUVsZW1lbnRcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXRGaWVsZC5uYXRpdmVFbGVtZW50LnZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNlYXJjaChmaWx0ZXJzOiBhbnkpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50U3RhdGUuZmlsdGVycyA9IHsgLi4udGhpcy5jdXJyZW50U3RhdGUuZmlsdGVycywgLi4uZmlsdGVycyB9O1xuXG4gICAgICAgIGlmICghdGhpcy5yZW1vdGVSZXNvdXJjZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2VhcmNoVGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc2VhcmNoVGltZW91dCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICB0aGlzLnNlYXJjaFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAgIHRoaXMubmd0SHR0cFxuICAgICAgICAgICAgICAgICAgICAuZ2V0KHRoaXMucmVtb3RlUmVzb3VyY2UsIHRoaXMuY3VycmVudFN0YXRlLmZpbHRlcnMsIHRoaXMuY3VycmVudFN0YXRlLnBhZ2luYXRpb24pXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgICAgICAgICAocmVzcG9uc2U6IE5ndEh0dHBSZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iaW5kQ29tcGFyZVdpdGhCeVJlc3BvbnNlKHJlc3BvbnNlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmdTZWFyY2hPYnNlcnZlci5uZXh0KHJlc3BvbnNlLmRhdGEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkxvYWRSZW1vdGVSZXNvdXJjZS5lbWl0KHJlc3BvbnNlLmRhdGEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RhdGUucGFnaW5hdGlvbiA9IHJlc3BvbnNlLm1ldGEucGFnaW5hdGlvbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmdTZWFyY2hPYnNlcnZlci5uZXh0KFtdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSwgNTAwKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25OYXRpdmVDaGFuZ2UodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzQ2hhbmdlc0JldHdlZW5Nb2RlbHModGhpcy52YWx1ZSwgdmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY2hhbmdlKHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLmhhc0NoYW5nZXNCZXR3ZWVuTW9kZWxzKHZhbHVlLCB0aGlzLm5hdGl2ZVZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5tYXAoKHZhbCkgPT4gdmFsKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5uYXRpdmVWYWx1ZSA9IHZhbHVlO1xuXG4gICAgICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uU2Nyb2xsKHsgZW5kIH0pIHtcbiAgICAgICAgbGV0IGN1cnJlbnRQZXJQYWdlID0gdGhpcy5jdXJyZW50U3RhdGUucGFnaW5hdGlvbi5wZXJfcGFnZTtcbiAgICAgICAgbGV0IG1heEl0ZW5zSW5CYWNrZW5kID0gdGhpcy5jdXJyZW50U3RhdGUucGFnaW5hdGlvbi50b3RhbDtcblxuICAgICAgICBpZiAoZW5kID49IGN1cnJlbnRQZXJQYWdlICYmIGVuZCA8PSBtYXhJdGVuc0luQmFja2VuZCkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RhdGUucGFnaW5hdGlvbi5wZXJfcGFnZSA9IHBhcnNlSW50KHRoaXMuY3VycmVudFN0YXRlLnBhZ2luYXRpb24ucGVyX3BhZ2UpICsgdGhpcy5vcmlnaW5hbFBlclBhZ2U7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaCh7fSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgaGFzU2VsZWN0ZWRWYWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUgJiYgSlNPTi5zdHJpbmdpZnkodGhpcy52YWx1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFNlbGVjdENsYXNzKCkge1xuICAgICAgICBsZXQgc2VsZWN0Q2xhc3MgPSB0aGlzLmRyb3Bkb3duUGFuZWxNaW5IZWlnaHQgPyAnbmctc2VsZWN0LWRyb3Bkb3duLXBhbmVsLScgKyB0aGlzLmRyb3Bkb3duUGFuZWxNaW5IZWlnaHQgOiAnbmctc2VsZWN0LWRyb3Bkb3duLXBhbmVsLWF1dG8nO1xuXG4gICAgICAgIGlmICh0aGlzLmlzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHNlbGVjdENsYXNzICs9ICcgc2VsZWN0LWJvcmRlci1kaXNhYmxlZCc7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5mb3JtQ29udHJvbCAmJiB0aGlzLmZvcm1Db250cm9sLmVycm9ycyAmJiAodGhpcy5mb3JtQ29udHJvbC5kaXJ0eSB8fCAodGhpcy5mb3JtQ29udGFpbmVyICYmIHRoaXMuZm9ybUNvbnRhaW5lclsnc3VibWl0dGVkJ10pKSkge1xuICAgICAgICAgICAgc2VsZWN0Q2xhc3MgKz0gJyBzZWxlY3QtYm9yZGVyLWVycm9yJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlbGVjdENsYXNzICs9ICcgc2VsZWN0LWJvcmRlci1ub3JtYWwnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHNlbGVjdENsYXNzICs9IGAgaC1hdXRvICR7dGhpcy5uZ3RTdHlsZS5jb21waWxlKFsnY29sb3IuYmcnLCAnY29sb3IudGV4dCddKX1gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VsZWN0Q2xhc3MgKz0gYCAke3RoaXMubmd0U3R5bGUuY29tcGlsZShbJ2gnLCAnY29sb3IuYmcnLCAnY29sb3IudGV4dCddKX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNlbGVjdENsYXNzO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdE5nU2VsZWN0SXRlbXMoKSB7XG4gICAgICAgIGlmICh0aGlzLnJlbW90ZVJlc291cmNlICYmIHRoaXMuY2FuTG9hZEl0ZW1zKCkpIHtcbiAgICAgICAgICAgIHRoaXMubmdTZWxlY3RJdGVtcyA9IG5ldyBPYnNlcnZhYmxlKG9ic2VydmVyID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm5nU2VhcmNoT2JzZXJ2ZXIgPSBvYnNlcnZlcjtcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaCh7fSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy50eXBlYWhlYWQgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgICB0aGlzLnR5cGVhaGVhZC5zdWJzY3JpYmUoKHRlcm0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2goeyB0ZXJtOiB0ZXJtIH0pO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbXMgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLm5nU2VsZWN0SXRlbXMgPSB0aGlzLml0ZW1zO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF0aGlzLml0ZW1zKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm5nU2VsZWN0SXRlbXMgPSBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXIpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm5nU2VhcmNoT2JzZXJ2ZXIgPSBvYnNlcnZlcjtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHRoaXMuaXRlbXMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRDb21wb25lbnRWYWxpZGF0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5mb3JtQ29udGFpbmVyICYmIHRoaXMuZm9ybUNvbnRhaW5lci5jb250cm9sICYmICh0aGlzLmZvcm1Db250cm9sID0gdGhpcy5mb3JtQ29udGFpbmVyLmNvbnRyb2wuZ2V0KHRoaXMubmFtZSkpKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sID0gdGhpcy5mb3JtQ29udGFpbmVyLmNvbnRyb2wuZ2V0KHRoaXMubmFtZSk7XG4gICAgICAgICAgICB0aGlzLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbGlkYXRpb25zKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEVsZW1lbnRUaXRsZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5uZ1NlbGVjdENvbXBvbmVudC5lbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LnRpdGxlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFzQ2hhbmdlc0JldHdlZW5Nb2RlbHModmFsdWUsIG5hdGl2ZVZhbHVlKSB7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgIT09IEpTT04uc3RyaW5naWZ5KG5hdGl2ZVZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVZhbGlkYXRpb25zKCkge1xuICAgICAgICBpZiAoIXRoaXMuZm9ybUNvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzeW5jVmFsaWRhdG9ycyA9IFtdO1xuXG4gICAgICAgIGlmICh0aGlzLmlzUmVxdWlyZWQpIHtcbiAgICAgICAgICAgIHN5bmNWYWxpZGF0b3JzLnB1c2godGhpcy5pc1JlcXVpcmVkVmFsaWRhdG9yKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbGlkYXRvcnMoc3luY1ZhbGlkYXRvcnMpO1xuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNSZXF1aXJlZFZhbGlkYXRvcigpIHtcbiAgICAgICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkgJiYgdGhpcy52YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udHJvbC52YWx1ZSAmJiBKU09OLnN0cmluZ2lmeShjb250cm9sLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4geyAncmVxdWlyZWQnOiB0cnVlIH07XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXBsYWNlU2hvd0FkZFRhZygpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMubmdTZWxlY3RDb21wb25lbnQsICdzaG93QWRkVGFnJywge1xuICAgICAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm5nU2VsZWN0Q29tcG9uZW50WydzZWFyY2hUZXJtJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHRlcm0gPSB0aGlzLm5nU2VsZWN0Q29tcG9uZW50WydzZWFyY2hUZXJtJ10udG9Mb2NhbGVMb3dlckNhc2UoKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm5nU2VsZWN0Q29tcG9uZW50LmFkZFRhZyAmJiAhdGhpcy5uZ1NlbGVjdENvbXBvbmVudC5sb2FkaW5nXG4gICAgICAgICAgICAgICAgICAgICYmICghdGhpcy5oYXNUZXJtSW5GaWx0ZXJlZEl0ZW1zKHRlcm0pICYmICghdGhpcy5oYXNUZXJtSW5TZWxlY3RlZEl0ZW1zKHRlcm0pXG4gICAgICAgICAgICAgICAgICAgICAgICB8fCAhdGhpcy5uZ1NlbGVjdENvbXBvbmVudC5oaWRlU2VsZWN0ZWQgJiYgdGhpcy5uZ1NlbGVjdENvbXBvbmVudC5pc09wZW4pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBiaW5kSW5uZXJJbnB1dFVuaXF1ZUlkKCkge1xuICAgICAgICBjb25zdCBjaGlsZElucHV0cyA9IHRoaXMubmdTZWxlY3RDb21wb25lbnQuZWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKTtcblxuICAgICAgICBpZiAoY2hpbGRJbnB1dHM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgaW5uZXJJbnB1dCA9IGNoaWxkSW5wdXRzWzBdO1xuXG4gICAgICAgICAgICBpbm5lcklucHV0LmlkID0gdXVpZCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBiaW5kQ29tcGFyZVdpdGhCeVJlc3BvbnNlKHJlc3BvbnNlOiBOZ3RIdHRwUmVzcG9uc2UpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZ3Vlc3NDb21wYXJlV2l0aCkge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGE/Lmxlbmd0aCAmJiB0eXBlb2YgcmVzcG9uc2UuZGF0YVswXVsnZ2V0QXBpSWQnXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRoaXMuY29tcGFyZVdpdGggPSAoYTogYW55LCBiOiBhbnkpID0+IGEuZ2V0QXBpSWQoKSA9PSBiLmdldEFwaUlkKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY29tcGFyZVdpdGggPSAoYTogYW55LCBiOiBhbnkpID0+IGEgPT09IGI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc1Rlcm1JbkZpbHRlcmVkSXRlbXModGVybTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkSXRlbXMgPSB0aGlzLm5nU2VsZWN0Q29tcG9uZW50Lml0ZW1zTGlzdC5maWx0ZXJlZEl0ZW1zO1xuXG4gICAgICAgIGlmIChmaWx0ZXJlZEl0ZW1zPy5sZW5ndGggJiYgdGhpcy5pc0NvbG9xdWVudFJlc291cmNlKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJlZEl0ZW1zLnNvbWUoKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRWYWx1ZSA9ICg8YW55PmVsZW1lbnQudmFsdWUpLmdldEF0dHJpYnV0ZSh0aGlzLmJpbmRMYWJlbCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudFZhbHVlICYmIGVsZW1lbnRWYWx1ZS50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSB0ZXJtO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmlsdGVyZWRJdGVtcy5zb21lKChlbGVtZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRWYWx1ZSA9ICg8YW55PmVsZW1lbnQudmFsdWUpW3RoaXMuYmluZExhYmVsXTtcblxuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRWYWx1ZSAmJiBlbGVtZW50VmFsdWUudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gdGVybTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYXNUZXJtSW5TZWxlY3RlZEl0ZW1zKHRlcm06IHN0cmluZykge1xuICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW1zID0gdGhpcy5uZ1NlbGVjdENvbXBvbmVudC5zZWxlY3RlZEl0ZW1zO1xuXG4gICAgICAgIGlmIChzZWxlY3RlZEl0ZW1zPy5sZW5ndGggJiYgdGhpcy5pc0NvbG9xdWVudFJlc291cmNlKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBzZWxlY3RlZEl0ZW1zLnNvbWUoKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRWYWx1ZSA9ICg8YW55PmVsZW1lbnQudmFsdWUpLmdldEF0dHJpYnV0ZSh0aGlzLmJpbmRMYWJlbCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudFZhbHVlICYmIGVsZW1lbnRWYWx1ZS50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSB0ZXJtO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2VsZWN0ZWRJdGVtcy5zb21lKChlbGVtZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRWYWx1ZSA9ICg8YW55PmVsZW1lbnQudmFsdWUpW3RoaXMuYmluZExhYmVsXTtcblxuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRWYWx1ZSAmJiBlbGVtZW50VmFsdWUudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gdGVybTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYWRQcmV2aW91c1NlbGVjdGlvbihpdGVtOiBhbnkpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5vcmlnaW5hbEl0ZW1zPy5maW5kKGVsZW1lbnQgPT4gdGhpcy5jb21wYXJlV2l0aChlbGVtZW50LCBpdGVtKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0NvbG9xdWVudFJlc291cmNlKCkge1xuICAgICAgICBjb25zdCBpdGVtcyA9IHRoaXMubmdTZWxlY3RDb21wb25lbnQuaXRlbXNMaXN0Lml0ZW1zO1xuXG4gICAgICAgIHJldHVybiBpdGVtcz8ubGVuZ3RoICYmIHR5cGVvZiBpdGVtc1swXS52YWx1ZVsnZ2V0QXR0cmlidXRlJ10gPT09ICdmdW5jdGlvbic7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYW5Mb2FkSXRlbXMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmF1dG9Mb2FkIHx8ICghdGhpcy5pc0Rpc2FibGVkICYmIHRoaXMud2FzQ2xpY2tlZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZXN0cm95U3Vic2NyaXB0aW9ucygpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goc3Vic2NyaXB0aW9uID0+IHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zID0gW107XG4gICAgfVxufVxuXG5leHBvcnQgZW51bSBOZ3RTZWxlY3REcm9wZG93blBhbmVsSGVpZ2h0IHtcbiAgICBBVVRPID0gJ2F1dG8nLFxuICAgIFhTID0gJ3hzJyxcbiAgICBNRCA9ICdtZCcsXG4gICAgU00gPSAnc20nLFxuICAgIExHID0gJ2xnJyxcbiAgICBYTCA9ICd4bCdcbn1cbiIsIjxsYWJlbCAqbmdJZj1cImxhYmVsXCIgW2hpZGRlbl09J3NoaW5pbmcnXG4gICAgY2xhc3M9XCJ7eyBzaGluaW5nID8gJycgOiAnYmxvY2snIH19IHt7IG5ndFN0eWxlLmNvbXBpbGUoWydjb2xvci50ZXh0JywgJ3RleHQnLCAnZm9udCcsICdmb250Q2FzZSddKSB9fSBtYi0yIGZsZXhcIj5cbiAgICA8bmd0LXN2ZyAqbmdJZj1cImxhYmVsSWNvblwiIGNsYXNzPVwibXItMSB7e2xhYmVsSWNvbkNvbG9yfX1cIiBzcmM9XCJ7e2xhYmVsSWNvbn19XCI+PC9uZ3Qtc3ZnPlxuICAgIHt7IGxhYmVsIH19OlxuXG4gICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXJlZC01MDAgZm9udC1ib2xkIHRleHQtbWQgbWwtMVwiICpuZ0lmPVwiaXNSZXF1aXJlZFwiPio8L3NwYW4+XG5cbiAgICA8bmd0LWhlbHBlciAqbmdJZj1cImhlbHBUZXh0XCIgW2hlbHBUaXRsZV09XCJoZWxwVGl0bGVcIiBbaWNvbkNvbG9yXT1cImhlbHBUZXh0Q29sb3JcIiBjbGFzcz1cIm1sLTFcIj5cbiAgICAgICAge3sgaGVscFRleHQgfX1cbiAgICA8L25ndC1oZWxwZXI+XG48L2xhYmVsPlxuXG48ZGl2IFtoaWRkZW5dPSdzaGluaW5nJyBjbGFzcz1cInt7IGdldFNlbGVjdENsYXNzKCkgfX0gbm9ybWFsLWNhc2VcIiBzdHlsZT1cIm1pbi1oZWlnaHQ6IDNyZW07XCI+XG4gICAgPG5nLXNlbGVjdCBjbGFzcz1cImN1c3RvbVwiIFsobmdNb2RlbCldPSduYXRpdmVWYWx1ZScgW25hbWVdPSduYXRpdmVOYW1lJyBbYWRkVGFnXT0nYWxsb3dDcmVhdGUnXG4gICAgICAgIFthZGRUYWdUZXh0XT1cImNyZWF0ZVRleHQgfHwgbmd0VHJhbnNsYXRlU2VydmljZS5uZ3RTZWxlY3RDcmVhdGVUZXh0XCIgW2JpbmRMYWJlbF09XCJiaW5kTGFiZWxcIlxuICAgICAgICBbbXVsdGlwbGVdPVwibXVsdGlwbGVcIiBbaGlkZVNlbGVjdGVkXT1cImhpZGVTZWxlY3RlZFwiIFt0eXBlYWhlYWRdPVwidHlwZWFoZWFkXCJcbiAgICAgICAgW25vdEZvdW5kVGV4dF09XCJub3RGb3VuZFRleHQgfHwgbmd0VHJhbnNsYXRlU2VydmljZS5uZ3RTZWxlY3ROb3RGb3VuZFRleHRcIiBbc2VhcmNoYWJsZV09XCJzZWFyY2hhYmxlXCJcbiAgICAgICAgW2Rpc2FibGVkXT0naXNEaXNhYmxlZCB8fCBpc1JlYWRvbmx5JyBbY2xlYXJhYmxlXT1cImNsZWFyYWJsZSAmJiBoYXNTZWxlY3RlZFZhbHVlKClcIlxuICAgICAgICBbY2xvc2VPblNlbGVjdF09XCJjbG9zZU9uU2VsZWN0XCIgW3RyYWNrQnlGbl09XCJ0cmFja0J5XCIgW2xhYmVsRm9ySWRdPVwibGFiZWxGb3JJZFwiXG4gICAgICAgIFt0eXBlVG9TZWFyY2hUZXh0XT1cInR5cGVUb1NlYXJjaFRleHQgfHwgbmd0VHJhbnNsYXRlU2VydmljZS5uZ3RTZWxlY3RUeXBlVG9TZWFyY2hUZXh0XCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyIHx8IG5ndFRyYW5zbGF0ZVNlcnZpY2Uubmd0U2VsZWN0UGxhY2Vob2xkZXJcIiBbZHJvcGRvd25Qb3NpdGlvbl09XCJkcm9wZG93blBvc2l0aW9uXCJcbiAgICAgICAgW2dyb3VwQnldPVwiZ3JvdXBCeVwiIFtjbGVhckFsbFRleHRdPVwiY2xlYXJBbGxUb29sdGlwIHx8IG5ndFRyYW5zbGF0ZVNlcnZpY2Uubmd0U2VsZWN0Q2xlYXJBbGxUb29sdGlwXCJcbiAgICAgICAgW2NsZWFyU2VhcmNoT25BZGRdPVwiY2xlYXJTZWFyY2hPbkFkZFwiIFtiaW5kVmFsdWVdPVwiYmluZFZhbHVlXCIgW3ZpcnR1YWxTY3JvbGxdPVwidmlydHVhbFNjcm9sbFwiXG4gICAgICAgIFtsb2FkaW5nVGV4dF09XCJsb2FkaW5nVGV4dCB8fCBuZ3RUcmFuc2xhdGVTZXJ2aWNlLm5ndFNlbGVjdExvYWRpbmdUZXh0XCIgW21heFNlbGVjdGVkSXRlbXNdPVwibWF4U2VsZWN0ZWRJdGVtc1wiXG4gICAgICAgIFt0YWJJbmRleF09XCJ0YWJJbmRleFwiIFtpdGVtc109XCJuZ1NlbGVjdEl0ZW1zIHwgYXN5bmNcIiBbZ3JvdXBWYWx1ZV09XCJncm91cFZhbHVlXCIgW2xvYWRpbmddPVwibG9hZGluZ1wiXG4gICAgICAgIFtjb21wYXJlV2l0aF09J2NvbXBhcmVXaXRoJyBbaW5wdXRBdHRyc109XCJpbnB1dEF0dHJzXCIgKHNjcm9sbCk9XCJvblNjcm9sbCgkZXZlbnQpXCJcbiAgICAgICAgKGNoYW5nZSk9XCJvbk5hdGl2ZUNoYW5nZSgkZXZlbnQpXCIgKGNsZWFyKT0nb25DbGVhclNlbGVjdCgpJyAocmVtb3ZlKT0nb25SZW1vdmVTZWxlY3RlZEl0ZW0oJGV2ZW50KSdcbiAgICAgICAgKGNsaWNrKT1cIndhc0NsaWNrZWQgPSB0cnVlXCI+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPSduZ3RTZWxlY3RIZWFkZXJUZW1wbGF0ZScgbmctaGVhZGVyLXRtcD5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJuZ3RTZWxlY3RIZWFkZXJUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICA8bmctdGVtcGxhdGUgbmctbGFiZWwtdG1wIGxldC1pdGVtPVwiaXRlbVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggdy1mdWxsIGl0ZW1zLWNlbnRlciBwci0xXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm11bHRpcGxlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuZy12YWx1ZS1pY29uIHB4LTEgaC1mdWxsIGJvcmRlci1yIG1yLTIge3sgbmd0U3R5bGUuY29tcGlsZShbJ2NvbG9yLnRleHQnLCAndGV4dCddKSB9fSBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSdyZW1vdmVJdGVtKCRldmVudCwgaXRlbSknPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cIm5nLXZhbHVlLWljb24gZmlsbC1jdXJyZW50IHNlbGYtY2VudGVyXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTkuMSAxNy4ybC01LjMtNS4zIDUuMy01LjMtMS44LTEuOC01LjMgNS40LTUuMy01LjMtMS44IDEuNyA1LjMgNS4zLTUuMyA1LjNMNi43IDE5bDUuMy01LjMgNS4zIDUuMyAxLjgtMS44elwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9J25ndE9wdGlvblNlbGVjdGVkVGVtcGxhdGUnIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm5ndE9wdGlvblNlbGVjdGVkVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBpdGVtOiBpdGVtIH1cIj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPSchbmd0T3B0aW9uU2VsZWN0ZWRUZW1wbGF0ZScgW25nVGVtcGxhdGVPdXRsZXRdPVwibmd0T3B0aW9uVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBpdGVtOiBpdGVtIH1cIj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlIG5nLW9wdGlvbi10bXAgbGV0LWl0ZW09XCJpdGVtXCIgbGV0LWluZGV4PVwiaW5kZXhcIiBsZXQtc2VhcmNoPVwic2VhcmNoVGVybVwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm5ndE9wdGlvblRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBpdGVtOiBpdGVtLCBpbmRleDogaW5kZXgsIHNlYXJjaFRlcm06IHNlYXJjaCB9XCI+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctc2VsZWN0PlxuPC9kaXY+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9J3NoaW5pbmcnPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4XCI+XG4gICAgICAgIDxuZ3Qtc2hpbmluZyBjbGFzcz1cInt7IG5ndFN0eWxlLmNvbXBpbGUoWydoJ10pIH19IHctZnVsbFwiPjwvbmd0LXNoaW5pbmc+XG4gICAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cblxuPG5ndC12YWxpZGF0aW9uIFtjb250cm9sXT1cImZvcm1Db250cm9sXCIgW2NvbnRhaW5lcl09XCJmb3JtQ29udGFpbmVyXCI+PC9uZ3QtdmFsaWRhdGlvbj5cblxuPGlucHV0ICpuZ0lmPSdjb21wb25lbnRSZWFkeScgdHlwZT0naGlkZGVuJyBbbmdNb2RlbF09XCJ2YWx1ZVwiIFtuYW1lXT1cIm5hbWVcIiBbdmFsdWVdPVwidmFsdWVcIj4iXX0=
|
|
550
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd0LXNlbGVjdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy10YWlsd2luZC9zcmMvY29tcG9uZW50cy9uZ3Qtc2VsZWN0L25ndC1zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdGFpbHdpbmQvc3JjL2NvbXBvbmVudHMvbmd0LXNlbGVjdC9uZ3Qtc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxTQUFTLEVBQ1QsWUFBWSxFQUVaLFlBQVksRUFDWixJQUFJLEVBRUosS0FBSyxFQUlMLFFBQVEsRUFDUixNQUFNLEVBQ04sSUFBSSxFQUVKLFFBQVEsRUFDUixXQUFXLEVBQ1gsU0FBUyxFQUNULGlCQUFpQixHQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQW1CLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNFLE9BQU8sRUFBWSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxVQUFVLEVBQVksT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUVuRSxPQUFPLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRS9FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzVELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUcxQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUU1RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsMEJBQTBCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7Ozs7OztBQWM1RyxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsY0FBYztJQTBGbEQsWUFFVyxzQkFBOEMs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QkFBekIsS0FBSztnQkFDVSxnQkFBZ0I7c0JBQS9CLEtBQUs7Z0JBQ1UsYUFBYTtzQkFBNUIsS0FBSztnQkFDVSxRQUFRO3NCQUF2QixLQUFLO2dCQUNVLFNBQVM7c0JBQXhCLEtBQUs7Z0JBQ1UsZ0JBQWdCO3NCQUEvQixLQUFLO2dCQUNVLFVBQVU7c0JBQXpCLEtBQUs7Z0JBQ1UsT0FBTztzQkFBdEIsS0FBSztnQkFHVSxVQUFVO3NCQUF6QixLQUFLO2dCQUVXLG9CQUFvQjtzQkFBcEMsTUFBTTtnQkFDVSxPQUFPO3NCQUF2QixNQUFNO2dCQTJFUyxXQUFXO3NCQUExQixLQUFLOztBQXVZVixNQUFNLENBQU4sSUFBWSw0QkFPWDtBQVBELFdBQVksNEJBQTRCO0lBQ3BDLDZDQUFhLENBQUE7SUFDYix5Q0FBUyxDQUFBO0lBQ1QseUNBQVMsQ0FBQTtJQUNULHlDQUFTLENBQUE7SUFDVCx5Q0FBUyxDQUFBO0lBQ1QseUNBQVMsQ0FBQTtBQUNiLENBQUMsRUFQVyw0QkFBNEIsS0FBNUIsNEJBQTRCLFFBT3ZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIERvQ2hlY2ssXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3QsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFNlbGYsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBTa2lwU2VsZixcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBDb250cm9sQ29udGFpbmVyLCBOZ0Zvcm0gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBOZ09wdGlvbiwgTmdTZWxlY3RDb21wb25lbnQgfSBmcm9tICdAbmctc2VsZWN0L25nLXNlbGVjdCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBPYnNlcnZlciwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IE5ndEJhc2VOZ01vZGVsLCBOZ3RNYWtlUHJvdmlkZXIgfSBmcm9tICcuLi8uLi9iYXNlL25ndC1iYXNlLW5nLW1vZGVsJztcbmltcG9ydCB7IE5ndFN0eWxpemFibGVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL25ndC1zdHlsaXphYmxlL25ndC1zdHlsaXphYmxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBnZXRFbnVtRnJvbVN0cmluZyB9IGZyb20gJy4uLy4uL2hlbHBlcnMvZW51bS9lbnVtJztcbmltcG9ydCB7IHV1aWQgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3V1aWQnO1xuaW1wb3J0IHsgTmd0SHR0cFJlc3BvbnNlLCBOZ3RIdHRwU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2h0dHAvbmd0LWh0dHAuc2VydmljZSc7XG5pbXBvcnQgeyBOZ3RUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaHR0cC9uZ3QtdHJhbnNsYXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTmd0U3R5bGl6YWJsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9uZ3Qtc3R5bGl6YWJsZS9uZ3Qtc3R5bGl6YWJsZS5zZXJ2aWNlJztcbmltcG9ydCB7IE5ndEZvcm1Db21wb25lbnQgfSBmcm9tICcuLi9uZ3QtZm9ybS9uZ3QtZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTmd0U2VsZWN0SGVhZGVyVG1wLCBOZ3RTZWxlY3RPcHRpb25TZWxlY3RlZFRtcCwgTmd0U2VsZWN0T3B0aW9uVG1wIH0gZnJvbSAnLi9uZ3Qtc2VsZWN0LmRpcmVjdGl2ZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd0LXNlbGVjdCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL25ndC1zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL25ndC1zZWxlY3QuY29tcG9uZW50LmNzcyddLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBOZ3RNYWtlUHJvdmlkZXIoTmd0U2VsZWN0Q29tcG9uZW50KVxuICAgIF0sXG4gICAgdmlld1Byb3ZpZGVyczogW1xuICAgICAgICB7IHByb3ZpZGU6IENvbnRyb2xDb250YWluZXIsIHVzZUV4aXN0aW5nOiBOZ0Zvcm0gfVxuICAgIF0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBOZ3RTZWxlY3RDb21wb25lbnQgZXh0ZW5kcyBOZ3RCYXNlTmdNb2RlbCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIERvQ2hlY2sge1xuICAgIEBWaWV3Q2hpbGQoTmdTZWxlY3RDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pIHB1YmxpYyBuZ1NlbGVjdENvbXBvbmVudDogTmdTZWxlY3RDb21wb25lbnQ7XG4gICAgQENvbnRlbnRDaGlsZChOZ3RTZWxlY3RPcHRpb25UbXAsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgcHVibGljIG5ndE9wdGlvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBDb250ZW50Q2hpbGQoTmd0U2VsZWN0T3B0aW9uU2VsZWN0ZWRUbXAsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgcHVibGljIG5ndE9wdGlvblNlbGVjdGVkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQENvbnRlbnRDaGlsZChOZ3RTZWxlY3RIZWFkZXJUbXAsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgcHVibGljIG5ndFNlbGVjdEhlYWRlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIFZpc3VhbCAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBsYWJlbDogc3RyaW5nID0gJyc7XG4gICAgQElucHV0KCkgcHVibGljIGxhYmVsSWNvbjogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBsYWJlbEljb25Db2xvcjogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBoZWxwVGl0bGU6IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgaGVscFRleHQ6IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgaGVscFRleHRDb2xvcjogc3RyaW5nID0gJ3RleHQtZ3JlZW4tNTAwJztcbiAgICBASW5wdXQoKSBwdWJsaWMgc2hpbmluZyA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgcHVibGljIGxvYWRpbmdUZXh0OiBzdHJpbmcgPSAnJztcbiAgICBASW5wdXQoKSBwdWJsaWMgbm90Rm91bmRUZXh0OiBzdHJpbmcgPSAnJztcbiAgICBASW5wdXQoKSBwdWJsaWMgZHJvcGRvd25Qb3NpdGlvbiA9ICdhdXRvJztcbiAgICBASW5wdXQoKSBwdWJsaWMgdHlwZVRvU2VhcmNoVGV4dDogc3RyaW5nID0gJyc7XG4gICAgQElucHV0KCkgcHVibGljIGNsZWFyQWxsVG9vbHRpcDogc3RyaW5nID0gJyc7XG4gICAgQElucHV0KCkgcHVibGljIHBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnJztcbiAgICBASW5wdXQoKSBwdWJsaWMgY3JlYXRlVGV4dDogc3RyaW5nID0gJyc7XG4gICAgQElucHV0KCkgcHVibGljIGxhYmVsRm9ySWQ6IHN0cmluZyA9ICcnO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBkcm9wZG93blBhbmVsTWluSGVpZ2h0OiBOZ3RTZWxlY3REcm9wZG93blBhbmVsSGVpZ2h0ID0gTmd0U2VsZWN0RHJvcGRvd25QYW5lbEhlaWdodC5BVVRPO1xuXG4gICAgLyoqIEJlaGF2aW9yICovXG4gICAgQElucHV0KCkgcHVibGljIG5hbWU6IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgYXV0b0xvYWQ6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHVibGljIGFsbG93Q3JlYXRlOiBib29sZWFuIHwgUHJvbWlzZTxhbnk+IHwgRnVuY3Rpb24gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgYWxsb3dPcmlnaW5hbEl0ZW1zVW5zZWxlY3Q6IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpc0Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgcHVibGljIGlzUmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgcmVtb3RlUmVzb3VyY2U6IGFueTtcbiAgICBASW5wdXQoKSBwdWJsaWMgaGlkZVNlbGVjdGVkOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBiaW5kTGFiZWw6IHN0cmluZyA9ICduYW1lJztcbiAgICBASW5wdXQoKSBwdWJsaWMgYmluZFZhbHVlOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIGl0ZW1zOiBBcnJheTxhbnk+IHwgT2JzZXJ2YWJsZTxhbnk+ID0gW107XG4gICAgQElucHV0KCkgcHVibGljIGlucHV0QXR0cnM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG4gICAgQElucHV0KCkgcHVibGljIGNsb3NlT25TZWxlY3Q6IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBjbGVhcmFibGU6IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBncm91cEJ5OiBzdHJpbmcgfCBGdW5jdGlvbiA9IG51bGw7XG4gICAgQElucHV0KCkgcHVibGljIG1heFNlbGVjdGVkSXRlbXM6IG51bWJlcjtcbiAgICBASW5wdXQoKSBwdWJsaWMgbXVsdGlwbGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgc2VhcmNoYWJsZTogYm9vbGVhbiA9IHRydWU7XG4gICAgQElucHV0KCkgcHVibGljIGNsZWFyU2VhcmNoT25BZGQ6IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyB2aXJ0dWFsU2Nyb2xsOiBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgdGFiSW5kZXg6IG51bWJlcjtcbiAgICBASW5wdXQoKSBwdWJsaWMgdHlwZWFoZWFkOiBTdWJqZWN0PGFueT47XG4gICAgQElucHV0KCkgcHVibGljIGd1ZXNzQ29tcGFyZVdpdGg6IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBncm91cFZhbHVlOiAoZ3JvdXBLZXk6IHN0cmluZywgY2lsZHJlbjogYW55W10pID0+IE9iamVjdDtcbiAgICBASW5wdXQoKSBwdWJsaWMgdHJhY2tCeTogKGl0ZW06IGFueSkgPT4gYW55O1xuXG4gICAgLyoqIFZhbGlkYXRpb24gKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgaXNSZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQE91dHB1dCgpIHB1YmxpYyBvbkxvYWRSZW1vdGVSZXNvdXJjZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgcHVibGljIG9uQ2xlYXI6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIHB1YmxpYyBuYXRpdmVOYW1lID0gdXVpZCgpO1xuICAgIHB1YmxpYyBuZ3RTdHlsZTogTmd0U3R5bGl6YWJsZVNlcnZpY2U7XG4gICAgcHVibGljIG5nU2VsZWN0SXRlbXM6IGFueSA9IFtdO1xuICAgIHB1YmxpYyBuYXRpdmVWYWx1ZTogYW55O1xuICAgIHB1YmxpYyBjb21wb25lbnRSZWFkeTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyB3YXNDbGlja2VkOiBib29sZWFuO1xuXG4gICAgcHJpdmF0ZSBuZ1NlYXJjaE9ic2VydmVyOiBPYnNlcnZlcjxhbnk+O1xuICAgIHByaXZhdGUgb3JpZ2luYWxQZXJQYWdlID0gMTU7XG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBBcnJheTxTdWJzY3JpcHRpb24+ID0gW107XG4gICAgcHJpdmF0ZSBvcmlnaW5hbEl0ZW1zOiBBcnJheTxhbnk+O1xuXG4gICAgcHJpdmF0ZSBjdXJyZW50U3RhdGUgPSB7XG4gICAgICAgIGZpbHRlcnM6IHt9LFxuICAgICAgICBzb3J0OiB7XG4gICAgICAgICAgICBmaWVsZDogJycsXG4gICAgICAgICAgICBkaXJlY3Rpb246ICcnXG4gICAgICAgIH0sXG4gICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgIGNvdW50OiBudWxsLFxuICAgICAgICAgICAgcGFnZTogMSxcbiAgICAgICAgICAgIHBhZ2VzOiBudWxsLFxuICAgICAgICAgICAgdG90YWw6IG51bGwsXG4gICAgICAgICAgICBmcm9tOiBudWxsLFxuICAgICAgICAgICAgdG86IG51bGwsXG4gICAgICAgICAgICBwZXJfcGFnZTogbnVsbFxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHByaXZhdGUgc2VhcmNoVGltZW91dDogYW55O1xuICAgIHByaXZhdGUgaGFkRmlyc3RJdGVtc0xvYWQ6IGJvb2xlYW47XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIEBPcHRpb25hbCgpIEBTZWxmKClcbiAgICAgICAgcHVibGljIG5ndFN0eWxpemFibGVEaXJlY3RpdmU6IE5ndFN0eWxpemFibGVEaXJlY3RpdmUsXG4gICAgICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBAT3B0aW9uYWwoKSBASG9zdCgpXG4gICAgICAgIHB1YmxpYyBmb3JtQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKVxuICAgICAgICBwdWJsaWMgbmd0Rm9ybUNvbXBvbmVudDogTmd0Rm9ybUNvbXBvbmVudCxcbiAgICAgICAgcHJpdmF0ZSBuZ3RIdHRwOiBOZ3RIdHRwU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIEBPcHRpb25hbCgpXG4gICAgICAgIHB1YmxpYyBuZ3RUcmFuc2xhdGVTZXJ2aWNlOiBOZ3RUcmFuc2xhdGVTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgaWYgKHRoaXMubmd0Rm9ybUNvbXBvbmVudCkge1xuICAgICAgICAgICAgdGhpcy5zaGluaW5nID0gdGhpcy5uZ3RGb3JtQ29tcG9uZW50LmlzU2hpbmluZygpO1xuXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgICB0aGlzLm5ndEZvcm1Db21wb25lbnQub25TaGluaW5nQ2hhbmdlLnN1YnNjcmliZSgoc2hpbmluZzogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNoaW5pbmcgPSBzaGluaW5nO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubmd0U3R5bGl6YWJsZURpcmVjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5uZ3RTdHlsZSA9IHRoaXMubmd0U3R5bGl6YWJsZURpcmVjdGl2ZS5nZXROZ3RTdHlsaXphYmxlU2VydmljZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5uZ3RTdHlsZSA9IG5ldyBOZ3RTdHlsaXphYmxlU2VydmljZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5uZ3RTdHlsZS5sb2FkKHRoaXMuaW5qZWN0b3IsICdOZ3RTZWxlY3QnLCB7XG4gICAgICAgICAgICBoOiAnaC0xMicsXG4gICAgICAgICAgICB0ZXh0OiAndGV4dC1zbScsXG4gICAgICAgICAgICBmb250Q2FzZTogJycsXG4gICAgICAgICAgICBjb2xvcjoge1xuICAgICAgICAgICAgICAgIGJnOiAnYmctd2hpdGUnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHB1YmxpYyBjb21wYXJlV2l0aCA9IChhOiBhbnksIGI6IGFueSkgPT4gYSA9PT0gYjtcblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmZvcm1Db250YWluZXIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJUaGUgZWxlbWVudCBtdXN0IGJlIGluc2lkZSBhIDxmb3JtICNmb3JtPSduZ0Zvcm0nPiB0YWchXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLm5hbWUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJUaGUgZWxlbWVudCBtdXN0IGNvbnRhaW4gYSBuYW1lIGF0dHJpYnV0ZSFcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMubXVsdGlwbGUgJiYgdGhpcy5pc1JlcXVpcmVkKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyYWJsZSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VPblNlbGVjdCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuaW5pdENvbXBvbmVudFZhbGlkYXRpb24oKTtcbiAgICAgICAgfSwgNTAwKTtcblxuICAgICAgICB0aGlzLm5nU2VsZWN0SXRlbXMgPSBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXIpID0+IHtcbiAgICAgICAgICAgIHRoaXMubmdTZWFyY2hPYnNlcnZlciA9IG9ic2VydmVyO1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChbXSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMuYmluZElubmVySW5wdXRVbmlxdWVJZCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ0RvQ2hlY2soKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5oYWRGaXJzdEl0ZW1zTG9hZCAmJiB0aGlzLmNhbkxvYWRJdGVtcygpKSB7XG4gICAgICAgICAgICB0aGlzLmhhZEZpcnN0SXRlbXNMb2FkID0gdHJ1ZTtcblxuICAgICAgICAgICAgdGhpcy5pbml0TmdTZWxlY3RJdGVtcygpO1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlcGxhY2VTaG93QWRkVGFnKCk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLm5nU2VsZWN0Q29tcG9uZW50Lml0ZW1zTGlzdC5tYXBTZWxlY3RlZEl0ZW1zKCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZ2V0RWxlbWVudFRpdGxlKCkgfHwgdGhpcy5nZXRFbGVtZW50VGl0bGUoKSA9PT0gJ251bGwnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmdTZWxlY3RDb21wb25lbnQuZWxlbWVudC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC50aXRsZSA9ICcnO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMub3JpZ2luYWxJdGVtcyA9IHRoaXMubmdTZWxlY3RDb21wb25lbnQuc2VsZWN0ZWRJdGVtcz8ubWFwKChlbGVtZW50KSA9PiBlbGVtZW50LnZhbHVlKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5kZXN0cm95U3Vic2NyaXB0aW9ucygpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVJdGVtKGV2ZW50OiBFdmVudCwgaXRlbTogYW55KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLm5nU2VsZWN0Q29tcG9uZW50LmNsZWFySXRlbShpdGVtKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVmcmVzaCgpIHtcbiAgICAgICAgdGhpcy5pbml0TmdTZWxlY3RJdGVtcygpO1xuICAgICAgICB0aGlzLmluaXRDb21wb25lbnRWYWxpZGF0aW9uKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlc2V0KCkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLm5hdGl2ZVZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBpZiAoY2hhbmdlcy5pc1JlcXVpcmVkKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbGlkYXRpb25zKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhbmdlcy5yZW1vdGVSZXNvdXJjZSB8fCBjaGFuZ2VzLml0ZW1zKSB7XG4gICAgICAgICAgICB0aGlzLmluaXROZ1NlbGVjdEl0ZW1zKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhbmdlcy5kcm9wZG93blBhbmVsTWluSGVpZ2h0KSB7XG4gICAgICAgICAgICB0aGlzLmRyb3Bkb3duUGFuZWxNaW5IZWlnaHQgPSBnZXRFbnVtRnJvbVN0cmluZyhjaGFuZ2VzLmRyb3Bkb3duUGFuZWxNaW5IZWlnaHQuY3VycmVudFZhbHVlLCBOZ3RTZWxlY3REcm9wZG93blBhbmVsSGVpZ2h0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRGb2N1cygpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5nU2VsZWN0Q29tcG9uZW50LmZvY3VzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkNsZWFyU2VsZWN0KCkge1xuICAgICAgICBpZiAoIXRoaXMubmF0aXZlVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMubWFya0FzUHJpc3RpbmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY3VycmVudFN0YXRlLmZpbHRlcnMgPSB7fTtcblxuICAgICAgICB0aGlzLm9uQ2xlYXIuZW1pdCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblJlbW92ZVNlbGVjdGVkSXRlbShpdGVtOiBOZ09wdGlvbikge1xuICAgICAgICBpZiAoIXRoaXMuYWxsb3dPcmlnaW5hbEl0ZW1zVW5zZWxlY3QgJiYgdGhpcy5oYWRQcmV2aW91c1NlbGVjdGlvbihpdGVtLnZhbHVlKSkge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLm5nU2VsZWN0Q29tcG9uZW50LnNlbGVjdChpdGVtKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RmlsdGVySW5wdXRWYWx1ZSgpIHtcbiAgICAgICAgbGV0IGlucHV0RmllbGQgPSB0aGlzLm5nU2VsZWN0Q29tcG9uZW50LnNlYXJjaElucHV0ID9cbiAgICAgICAgICAgIHRoaXMubmdTZWxlY3RDb21wb25lbnQuc2VhcmNoSW5wdXQgOlxuICAgICAgICAgICAgdGhpcy5uZ1NlbGVjdENvbXBvbmVudFsnc2VhcmNoSW5wdXQnXTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBpbnB1dEZpZWxkICYmXG4gICAgICAgICAgICBpbnB1dEZpZWxkLm5hdGl2ZUVsZW1lbnRcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXRGaWVsZC5uYXRpdmVFbGVtZW50LnZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNlYXJjaChmaWx0ZXJzOiBhbnkpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50U3RhdGUuZmlsdGVycyA9IHsgLi4udGhpcy5jdXJyZW50U3RhdGUuZmlsdGVycywgLi4uZmlsdGVycyB9O1xuXG4gICAgICAgIGlmICghdGhpcy5yZW1vdGVSZXNvdXJjZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2VhcmNoVGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc2VhcmNoVGltZW91dCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICB0aGlzLnNlYXJjaFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAgIHRoaXMubmd0SHR0cFxuICAgICAgICAgICAgICAgICAgICAuZ2V0KHRoaXMucmVtb3RlUmVzb3VyY2UsIHRoaXMuY3VycmVudFN0YXRlLmZpbHRlcnMsIHRoaXMuY3VycmVudFN0YXRlLnBhZ2luYXRpb24pXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgICAgICAgICAocmVzcG9uc2U6IE5ndEh0dHBSZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iaW5kQ29tcGFyZVdpdGhCeVJlc3BvbnNlKHJlc3BvbnNlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmdTZWFyY2hPYnNlcnZlci5uZXh0KHJlc3BvbnNlLmRhdGEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkxvYWRSZW1vdGVSZXNvdXJjZS5lbWl0KHJlc3BvbnNlLmRhdGEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RhdGUucGFnaW5hdGlvbiA9IHJlc3BvbnNlLm1ldGEucGFnaW5hdGlvbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmdTZWFyY2hPYnNlcnZlci5uZXh0KFtdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSwgNTAwKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25OYXRpdmVDaGFuZ2UodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzQ2hhbmdlc0JldHdlZW5Nb2RlbHModGhpcy52YWx1ZSwgdmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY2hhbmdlKHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLmhhc0NoYW5nZXNCZXR3ZWVuTW9kZWxzKHZhbHVlLCB0aGlzLm5hdGl2ZVZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5tYXAoKHZhbCkgPT4gdmFsKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5uYXRpdmVWYWx1ZSA9IHZhbHVlO1xuXG4gICAgICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uU2Nyb2xsKHsgZW5kIH0pIHtcbiAgICAgICAgbGV0IGN1cnJlbnRQZXJQYWdlID0gdGhpcy5jdXJyZW50U3RhdGUucGFnaW5hdGlvbi5wZXJfcGFnZTtcbiAgICAgICAgbGV0IG1heEl0ZW5zSW5CYWNrZW5kID0gdGhpcy5jdXJyZW50U3RhdGUucGFnaW5hdGlvbi50b3RhbDtcblxuICAgICAgICBpZiAoZW5kID49IGN1cnJlbnRQZXJQYWdlICYmIGVuZCA8PSBtYXhJdGVuc0luQmFja2VuZCkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RhdGUucGFnaW5hdGlvbi5wZXJfcGFnZSA9IHBhcnNlSW50KHRoaXMuY3VycmVudFN0YXRlLnBhZ2luYXRpb24ucGVyX3BhZ2UpICsgdGhpcy5vcmlnaW5hbFBlclBhZ2U7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaCh7fSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgaGFzU2VsZWN0ZWRWYWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUgJiYgSlNPTi5zdHJpbmdpZnkodGhpcy52YWx1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFNlbGVjdENsYXNzKCkge1xuICAgICAgICBsZXQgc2VsZWN0Q2xhc3MgPSB0aGlzLmRyb3Bkb3duUGFuZWxNaW5IZWlnaHQgPyAnbmctc2VsZWN0LWRyb3Bkb3duLXBhbmVsLScgKyB0aGlzLmRyb3Bkb3duUGFuZWxNaW5IZWlnaHQgOiAnbmctc2VsZWN0LWRyb3Bkb3duLXBhbmVsLWF1dG8nO1xuXG4gICAgICAgIGlmICh0aGlzLmlzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHNlbGVjdENsYXNzICs9ICcgc2VsZWN0LWJvcmRlci1kaXNhYmxlZCc7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5mb3JtQ29udHJvbCAmJiB0aGlzLmZvcm1Db250cm9sLmVycm9ycyAmJiAodGhpcy5mb3JtQ29udHJvbC5kaXJ0eSB8fCAodGhpcy5mb3JtQ29udGFpbmVyICYmIHRoaXMuZm9ybUNvbnRhaW5lclsnc3VibWl0dGVkJ10pKSkge1xuICAgICAgICAgICAgc2VsZWN0Q2xhc3MgKz0gJyBzZWxlY3QtYm9yZGVyLWVycm9yJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlbGVjdENsYXNzICs9ICcgc2VsZWN0LWJvcmRlci1ub3JtYWwnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHNlbGVjdENsYXNzICs9IGAgaC1hdXRvICR7dGhpcy5uZ3RTdHlsZS5jb21waWxlKFsnY29sb3IuYmcnLCAnY29sb3IudGV4dCddKX1gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VsZWN0Q2xhc3MgKz0gYCAke3RoaXMubmd0U3R5bGUuY29tcGlsZShbJ2gnLCAnY29sb3IuYmcnLCAnY29sb3IudGV4dCddKX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNlbGVjdENsYXNzO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdE5nU2VsZWN0SXRlbXMoKSB7XG4gICAgICAgIGlmICh0aGlzLnJlbW90ZVJlc291cmNlICYmIHRoaXMuY2FuTG9hZEl0ZW1zKCkpIHtcbiAgICAgICAgICAgIHRoaXMubmdTZWxlY3RJdGVtcyA9IG5ldyBPYnNlcnZhYmxlKG9ic2VydmVyID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm5nU2VhcmNoT2JzZXJ2ZXIgPSBvYnNlcnZlcjtcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaCh7fSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy50eXBlYWhlYWQgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgICB0aGlzLnR5cGVhaGVhZC5zdWJzY3JpYmUoKHRlcm0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2goeyB0ZXJtOiB0ZXJtIH0pO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbXMgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLm5nU2VsZWN0SXRlbXMgPSB0aGlzLml0ZW1zO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF0aGlzLml0ZW1zKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm5nU2VsZWN0SXRlbXMgPSBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXIpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm5nU2VhcmNoT2JzZXJ2ZXIgPSBvYnNlcnZlcjtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHRoaXMuaXRlbXMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRDb21wb25lbnRWYWxpZGF0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5mb3JtQ29udGFpbmVyICYmIHRoaXMuZm9ybUNvbnRhaW5lci5jb250cm9sICYmICh0aGlzLmZvcm1Db250cm9sID0gdGhpcy5mb3JtQ29udGFpbmVyLmNvbnRyb2wuZ2V0KHRoaXMubmFtZSkpKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sID0gdGhpcy5mb3JtQ29udGFpbmVyLmNvbnRyb2wuZ2V0KHRoaXMubmFtZSk7XG4gICAgICAgICAgICB0aGlzLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbGlkYXRpb25zKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEVsZW1lbnRUaXRsZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5uZ1NlbGVjdENvbXBvbmVudC5lbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LnRpdGxlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFzQ2hhbmdlc0JldHdlZW5Nb2RlbHModmFsdWUsIG5hdGl2ZVZhbHVlKSB7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgIT09IEpTT04uc3RyaW5naWZ5KG5hdGl2ZVZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVZhbGlkYXRpb25zKCkge1xuICAgICAgICBpZiAoIXRoaXMuZm9ybUNvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzeW5jVmFsaWRhdG9ycyA9IFtdO1xuXG4gICAgICAgIGlmICh0aGlzLmlzUmVxdWlyZWQpIHtcbiAgICAgICAgICAgIHN5bmNWYWxpZGF0b3JzLnB1c2godGhpcy5pc1JlcXVpcmVkVmFsaWRhdG9yKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbGlkYXRvcnMoc3luY1ZhbGlkYXRvcnMpO1xuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNSZXF1aXJlZFZhbGlkYXRvcigpIHtcbiAgICAgICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkgJiYgdGhpcy52YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udHJvbC52YWx1ZSAmJiBKU09OLnN0cmluZ2lmeShjb250cm9sLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4geyAncmVxdWlyZWQnOiB0cnVlIH07XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXBsYWNlU2hvd0FkZFRhZygpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMubmdTZWxlY3RDb21wb25lbnQsICdzaG93QWRkVGFnJywge1xuICAgICAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm5nU2VsZWN0Q29tcG9uZW50WydzZWFyY2hUZXJtJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHRlcm0gPSB0aGlzLm5nU2VsZWN0Q29tcG9uZW50WydzZWFyY2hUZXJtJ10udG9Mb2NhbGVMb3dlckNhc2UoKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm5nU2VsZWN0Q29tcG9uZW50LmFkZFRhZyAmJiAhdGhpcy5uZ1NlbGVjdENvbXBvbmVudC5sb2FkaW5nXG4gICAgICAgICAgICAgICAgICAgICYmICghdGhpcy5oYXNUZXJtSW5GaWx0ZXJlZEl0ZW1zKHRlcm0pICYmICghdGhpcy5oYXNUZXJtSW5TZWxlY3RlZEl0ZW1zKHRlcm0pXG4gICAgICAgICAgICAgICAgICAgICAgICB8fCAhdGhpcy5uZ1NlbGVjdENvbXBvbmVudC5oaWRlU2VsZWN0ZWQgJiYgdGhpcy5uZ1NlbGVjdENvbXBvbmVudC5pc09wZW4pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBiaW5kSW5uZXJJbnB1dFVuaXF1ZUlkKCkge1xuICAgICAgICBjb25zdCBjaGlsZElucHV0cyA9IHRoaXMubmdTZWxlY3RDb21wb25lbnQuZWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKTtcblxuICAgICAgICBpZiAoY2hpbGRJbnB1dHM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgaW5uZXJJbnB1dCA9IGNoaWxkSW5wdXRzWzBdO1xuXG4gICAgICAgICAgICBpbm5lcklucHV0LmlkID0gdXVpZCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBiaW5kQ29tcGFyZVdpdGhCeVJlc3BvbnNlKHJlc3BvbnNlOiBOZ3RIdHRwUmVzcG9uc2UpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZ3Vlc3NDb21wYXJlV2l0aCkge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGE/Lmxlbmd0aCAmJiB0eXBlb2YgcmVzcG9uc2UuZGF0YVswXVsnZ2V0QXBpSWQnXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRoaXMuY29tcGFyZVdpdGggPSAoYTogYW55LCBiOiBhbnkpID0+IGEuZ2V0QXBpSWQoKSA9PSBiLmdldEFwaUlkKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY29tcGFyZVdpdGggPSAoYTogYW55LCBiOiBhbnkpID0+IGEgPT09IGI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc1Rlcm1JbkZpbHRlcmVkSXRlbXModGVybTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkSXRlbXMgPSB0aGlzLm5nU2VsZWN0Q29tcG9uZW50Lml0ZW1zTGlzdC5maWx0ZXJlZEl0ZW1zO1xuXG4gICAgICAgIGlmIChmaWx0ZXJlZEl0ZW1zPy5sZW5ndGggJiYgdGhpcy5pc0NvbG9xdWVudFJlc291cmNlKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJlZEl0ZW1zLnNvbWUoKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRWYWx1ZSA9ICg8YW55PmVsZW1lbnQudmFsdWUpLmdldEF0dHJpYnV0ZSh0aGlzLmJpbmRMYWJlbCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudFZhbHVlICYmIGVsZW1lbnRWYWx1ZS50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSB0ZXJtO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmlsdGVyZWRJdGVtcy5zb21lKChlbGVtZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRWYWx1ZSA9ICg8YW55PmVsZW1lbnQudmFsdWUpW3RoaXMuYmluZExhYmVsXTtcblxuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRWYWx1ZSAmJiBlbGVtZW50VmFsdWUudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gdGVybTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYXNUZXJtSW5TZWxlY3RlZEl0ZW1zKHRlcm06IHN0cmluZykge1xuICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW1zID0gdGhpcy5uZ1NlbGVjdENvbXBvbmVudC5zZWxlY3RlZEl0ZW1zO1xuXG4gICAgICAgIGlmIChzZWxlY3RlZEl0ZW1zPy5sZW5ndGggJiYgdGhpcy5pc0NvbG9xdWVudFJlc291cmNlKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBzZWxlY3RlZEl0ZW1zLnNvbWUoKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRWYWx1ZSA9ICg8YW55PmVsZW1lbnQudmFsdWUpLmdldEF0dHJpYnV0ZSh0aGlzLmJpbmRMYWJlbCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudFZhbHVlICYmIGVsZW1lbnRWYWx1ZS50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSB0ZXJtO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2VsZWN0ZWRJdGVtcy5zb21lKChlbGVtZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRWYWx1ZSA9ICg8YW55PmVsZW1lbnQudmFsdWUpW3RoaXMuYmluZExhYmVsXTtcblxuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRWYWx1ZSAmJiBlbGVtZW50VmFsdWUudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gdGVybTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYWRQcmV2aW91c1NlbGVjdGlvbihpdGVtOiBhbnkpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5vcmlnaW5hbEl0ZW1zPy5maW5kKGVsZW1lbnQgPT4gdGhpcy5jb21wYXJlV2l0aChlbGVtZW50LCBpdGVtKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0NvbG9xdWVudFJlc291cmNlKCkge1xuICAgICAgICBjb25zdCBpdGVtcyA9IHRoaXMubmdTZWxlY3RDb21wb25lbnQuaXRlbXNMaXN0Lml0ZW1zO1xuXG4gICAgICAgIHJldHVybiBpdGVtcz8ubGVuZ3RoICYmIHR5cGVvZiBpdGVtc1swXS52YWx1ZVsnZ2V0QXR0cmlidXRlJ10gPT09ICdmdW5jdGlvbic7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYW5Mb2FkSXRlbXMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmF1dG9Mb2FkIHx8ICghdGhpcy5pc0Rpc2FibGVkICYmIHRoaXMud2FzQ2xpY2tlZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZXN0cm95U3Vic2NyaXB0aW9ucygpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goc3Vic2NyaXB0aW9uID0+IHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zID0gW107XG4gICAgfVxufVxuXG5leHBvcnQgZW51bSBOZ3RTZWxlY3REcm9wZG93blBhbmVsSGVpZ2h0IHtcbiAgICBBVVRPID0gJ2F1dG8nLFxuICAgIFhTID0gJ3hzJyxcbiAgICBNRCA9ICdtZCcsXG4gICAgU00gPSAnc20nLFxuICAgIExHID0gJ2xnJyxcbiAgICBYTCA9ICd4bCdcbn1cbiIsIjxsYWJlbCAqbmdJZj1cImxhYmVsXCIgW2hpZGRlbl09J3NoaW5pbmcnXG4gICAgY2xhc3M9XCJ7eyBzaGluaW5nID8gJycgOiAnYmxvY2snIH19IHt7IG5ndFN0eWxlLmNvbXBpbGUoWydjb2xvci50ZXh0JywgJ3RleHQnLCAnZm9udCcsICdmb250Q2FzZSddKSB9fSBtYi0yIGZsZXhcIj5cbiAgICA8bmd0LXN2ZyAqbmdJZj1cImxhYmVsSWNvblwiIGNsYXNzPVwibXItMSB7e2xhYmVsSWNvbkNvbG9yfX1cIiBzcmM9XCJ7e2xhYmVsSWNvbn19XCI+PC9uZ3Qtc3ZnPlxuICAgIHt7IGxhYmVsIH19OlxuXG4gICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXJlZC01MDAgZm9udC1ib2xkIHRleHQtbWQgbWwtMVwiICpuZ0lmPVwiaXNSZXF1aXJlZFwiPio8L3NwYW4+XG5cbiAgICA8bmd0LWhlbHBlciAqbmdJZj1cImhlbHBUZXh0XCIgW2hlbHBUaXRsZV09XCJoZWxwVGl0bGVcIiBbaWNvbkNvbG9yXT1cImhlbHBUZXh0Q29sb3JcIiBjbGFzcz1cIm1sLTFcIj5cbiAgICAgICAge3sgaGVscFRleHQgfX1cbiAgICA8L25ndC1oZWxwZXI+XG48L2xhYmVsPlxuXG48ZGl2IFtoaWRkZW5dPSdzaGluaW5nJyBjbGFzcz1cInt7IGdldFNlbGVjdENsYXNzKCkgfX0gbm9ybWFsLWNhc2VcIiBzdHlsZT1cIm1pbi1oZWlnaHQ6IDNyZW07XCI+XG4gICAgPG5nLXNlbGVjdCBjbGFzcz1cImN1c3RvbVwiIFsobmdNb2RlbCldPSduYXRpdmVWYWx1ZScgW25hbWVdPSduYXRpdmVOYW1lJyBbYWRkVGFnXT0nYWxsb3dDcmVhdGUnXG4gICAgICAgIFthZGRUYWdUZXh0XT1cImNyZWF0ZVRleHQgfHwgbmd0VHJhbnNsYXRlU2VydmljZS5uZ3RTZWxlY3RDcmVhdGVUZXh0XCIgW2JpbmRMYWJlbF09XCJiaW5kTGFiZWxcIlxuICAgICAgICBbbXVsdGlwbGVdPVwibXVsdGlwbGVcIiBbaGlkZVNlbGVjdGVkXT1cImhpZGVTZWxlY3RlZFwiIFt0eXBlYWhlYWRdPVwidHlwZWFoZWFkXCJcbiAgICAgICAgW25vdEZvdW5kVGV4dF09XCJub3RGb3VuZFRleHQgfHwgbmd0VHJhbnNsYXRlU2VydmljZS5uZ3RTZWxlY3ROb3RGb3VuZFRleHRcIiBbc2VhcmNoYWJsZV09XCJzZWFyY2hhYmxlXCJcbiAgICAgICAgW2Rpc2FibGVkXT0naXNEaXNhYmxlZCB8fCBpc1JlYWRvbmx5JyBbY2xlYXJhYmxlXT1cImNsZWFyYWJsZSAmJiBoYXNTZWxlY3RlZFZhbHVlKClcIlxuICAgICAgICBbY2xvc2VPblNlbGVjdF09XCJjbG9zZU9uU2VsZWN0XCIgW3RyYWNrQnlGbl09XCJ0cmFja0J5XCIgW2xhYmVsRm9ySWRdPVwibGFiZWxGb3JJZFwiXG4gICAgICAgIFt0eXBlVG9TZWFyY2hUZXh0XT1cInR5cGVUb1NlYXJjaFRleHQgfHwgbmd0VHJhbnNsYXRlU2VydmljZS5uZ3RTZWxlY3RUeXBlVG9TZWFyY2hUZXh0XCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyIHx8IG5ndFRyYW5zbGF0ZVNlcnZpY2Uubmd0U2VsZWN0UGxhY2Vob2xkZXJcIiBbZHJvcGRvd25Qb3NpdGlvbl09XCJkcm9wZG93blBvc2l0aW9uXCJcbiAgICAgICAgW2dyb3VwQnldPVwiZ3JvdXBCeVwiIFtjbGVhckFsbFRleHRdPVwiY2xlYXJBbGxUb29sdGlwIHx8IG5ndFRyYW5zbGF0ZVNlcnZpY2Uubmd0U2VsZWN0Q2xlYXJBbGxUb29sdGlwXCJcbiAgICAgICAgW2NsZWFyU2VhcmNoT25BZGRdPVwiY2xlYXJTZWFyY2hPbkFkZFwiIFtiaW5kVmFsdWVdPVwiYmluZFZhbHVlXCIgW3ZpcnR1YWxTY3JvbGxdPVwidmlydHVhbFNjcm9sbFwiXG4gICAgICAgIFtsb2FkaW5nVGV4dF09XCJsb2FkaW5nVGV4dCB8fCBuZ3RUcmFuc2xhdGVTZXJ2aWNlLm5ndFNlbGVjdExvYWRpbmdUZXh0XCIgW21heFNlbGVjdGVkSXRlbXNdPVwibWF4U2VsZWN0ZWRJdGVtc1wiXG4gICAgICAgIFt0YWJJbmRleF09XCJ0YWJJbmRleFwiIFtpdGVtc109XCJuZ1NlbGVjdEl0ZW1zIHwgYXN5bmNcIiBbZ3JvdXBWYWx1ZV09XCJncm91cFZhbHVlXCIgW2xvYWRpbmddPVwibG9hZGluZ1wiXG4gICAgICAgIFtjb21wYXJlV2l0aF09J2NvbXBhcmVXaXRoJyBbaW5wdXRBdHRyc109XCJpbnB1dEF0dHJzXCIgKHNjcm9sbCk9XCJvblNjcm9sbCgkZXZlbnQpXCJcbiAgICAgICAgKGNoYW5nZSk9XCJvbk5hdGl2ZUNoYW5nZSgkZXZlbnQpXCIgKGNsZWFyKT0nb25DbGVhclNlbGVjdCgpJyAocmVtb3ZlKT0nb25SZW1vdmVTZWxlY3RlZEl0ZW0oJGV2ZW50KSdcbiAgICAgICAgKGNsaWNrKT1cIndhc0NsaWNrZWQgPSB0cnVlXCI+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPSduZ3RTZWxlY3RIZWFkZXJUZW1wbGF0ZScgbmctaGVhZGVyLXRtcD5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJuZ3RTZWxlY3RIZWFkZXJUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICA8bmctdGVtcGxhdGUgbmctbGFiZWwtdG1wIGxldC1pdGVtPVwiaXRlbVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggdy1mdWxsIGl0ZW1zLWNlbnRlciBwci0xXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm11bHRpcGxlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuZy12YWx1ZS1pY29uIHB4LTEgaC1mdWxsIGJvcmRlci1yIG1yLTIge3sgbmd0U3R5bGUuY29tcGlsZShbJ2NvbG9yLnRleHQnLCAndGV4dCddKSB9fSBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSdyZW1vdmVJdGVtKCRldmVudCwgaXRlbSknPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cIm5nLXZhbHVlLWljb24gZmlsbC1jdXJyZW50IHNlbGYtY2VudGVyXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTkuMSAxNy4ybC01LjMtNS4zIDUuMy01LjMtMS44LTEuOC01LjMgNS40LTUuMy01LjMtMS44IDEuNyA1LjMgNS4zLTUuMyA1LjNMNi43IDE5bDUuMy01LjMgNS4zIDUuMyAxLjgtMS44elwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9J25ndE9wdGlvblNlbGVjdGVkVGVtcGxhdGUnIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm5ndE9wdGlvblNlbGVjdGVkVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBpdGVtOiBpdGVtIH1cIj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPSchbmd0T3B0aW9uU2VsZWN0ZWRUZW1wbGF0ZScgW25nVGVtcGxhdGVPdXRsZXRdPVwibmd0T3B0aW9uVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBpdGVtOiBpdGVtIH1cIj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlIG5nLW9wdGlvbi10bXAgbGV0LWl0ZW09XCJpdGVtXCIgbGV0LWluZGV4PVwiaW5kZXhcIiBsZXQtc2VhcmNoPVwic2VhcmNoVGVybVwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm5ndE9wdGlvblRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBpdGVtOiBpdGVtLCBpbmRleDogaW5kZXgsIHNlYXJjaFRlcm06IHNlYXJjaCB9XCI+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctc2VsZWN0PlxuPC9kaXY+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9J3NoaW5pbmcnPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4XCI+XG4gICAgICAgIDxuZ3Qtc2hpbmluZyBjbGFzcz1cInt7IG5ndFN0eWxlLmNvbXBpbGUoWydoJ10pIH19IHctZnVsbFwiPjwvbmd0LXNoaW5pbmc+XG4gICAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cblxuPG5ndC12YWxpZGF0aW9uIFtjb250cm9sXT1cImZvcm1Db250cm9sXCIgW2NvbnRhaW5lcl09XCJmb3JtQ29udGFpbmVyXCI+PC9uZ3QtdmFsaWRhdGlvbj5cblxuPGlucHV0ICpuZ0lmPSdjb21wb25lbnRSZWFkeScgdHlwZT0naGlkZGVuJyBbbmdNb2RlbF09XCJ2YWx1ZVwiIFtuYW1lXT1cIm5hbWVcIiBbdmFsdWVdPVwidmFsdWVcIj4iXX0=
|
|
@@ -177,7 +177,7 @@ export class NgtTextareaComponent extends NgtBaseNgModel {
|
|
|
177
177
|
NgtTextareaComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: NgtTextareaComponent, deps: [{ token: i0.Injector }, { token: i1.NgtStylizableDirective, optional: true, self: true }, { token: i2.ControlContainer, host: true, optional: true }, { token: i3.NgtFormComponent, optional: true, skipSelf: true }, { token: i0.Renderer2 }, { token: i4.NgtTranslateService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
178
178
|
NgtTextareaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.3", type: NgtTextareaComponent, selector: "ngt-textarea", inputs: { label: "label", placeholder: "placeholder", rows: "rows", showCharactersLength: "showCharactersLength", helpTitle: "helpTitle", helpText: "helpText", helpTextColor: "helpTextColor", shining: "shining", name: "name", isDisabled: "isDisabled", isReadonly: "isReadonly", jit: "jit", focus: "focus", isRequired: "isRequired", maxLength: "maxLength" }, providers: [
|
|
179
179
|
NgtMakeProvider(NgtTextareaComponent),
|
|
180
|
-
], viewQueries: [{ propertyName: "element", first: true, predicate: ["element"], descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<label class=\"{{ shining ? '' : 'block' }} mb-2 flex {{ ngtStyle.compile(['text', 'fontCase']) }}\" *ngIf=\"label\"\n [hidden]='shining'>\n {{ label }}:\n\n <span class=\"text-red-500 font-bold text-md ml-1\" *ngIf=\"isRequired\">*</span>\n\n <ngt-helper *ngIf=\"helpText\" [helpTitle]=\"helpTitle\" [iconColor]=\"helpTextColor\" class=\"ml-1\">\n {{ helpText }}\n </ngt-helper>\n</label>\n\n<div class=\"flex flex-col\">\n <div class=\"{{ shining ? '' : 'flex'}}\" [hidden]='shining'>\n <textarea [rows]='rows' autocomplete=\"new-password\" attr.type=\"text\"\n class=\"appearance-none block border focus:outline-none leading-tight px-4 py-3 rounded w-full h-full {{ ngtStyle.compile(['h', 'color.border', 'color.bg', 'color.text']) }}\"\n [disabled]=\"isDisabled\" [readonly]=\"isReadonly\" placeholder=\"{{ placeholder ? placeholder : ''}}\"\n [ngClass]=\"{'textarea-has-error border-red-700': formControl?.errors && (formControl?.dirty || (formContainer && formContainer['submitted']))}\"\n #element>\n </textarea>\n </div>\n\n <ng-container *ngIf=\"showCharactersLength && !shining\">\n <p class=\"text-xs mt-1\">\n {{ ngtTranslateService.ngtTextAreaRemainingCharacters }}: <span class=\"font-semibold\">\n {{ getRemainingCharacters() }}\n </span>\n </p>\n </ng-container>\n</div>\n\n<ng-container *ngIf='shining'>\n <div class=\"flex\">\n <ngt-shining class=\"h-10 w-full\"></ngt-shining>\n </div>\n</ng-container>\n\n<input *ngIf='componentReady' type=\"hidden\" [ngModel]=\"value\" [name]=\"name\" [value]=\"value\">\n\n<ng-content></ng-content>\n<ngt-validation [control]=\"formControl\" [container]=\"formContainer\"></ngt-validation>", dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.NgtValidationComponent, selector: "ngt-validation", inputs: ["control", "container", "minValue", "minLength"] }, { kind: "component", type: i7.NgtShiningComponent, selector: "ngt-shining", inputs: ["shiningWidth"] }, { kind: "component", type: i8.NgtHelperComponent, selector: "ngt-helper", inputs: ["helpTextColor", "helpText", "helpTitle", "icon", "iconSize", "iconColor", "iconTitle", "tooltipSize"] }], viewProviders: [
|
|
180
|
+
], viewQueries: [{ propertyName: "element", first: true, predicate: ["element"], descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<label class=\"{{ shining ? '' : 'block' }} mb-2 flex {{ ngtStyle.compile(['text', 'fontCase']) }}\" *ngIf=\"label\"\n [hidden]='shining'>\n {{ label }}:\n\n <span class=\"text-red-500 font-bold text-md ml-1\" *ngIf=\"isRequired\">*</span>\n\n <ngt-helper *ngIf=\"helpText\" [helpTitle]=\"helpTitle\" [iconColor]=\"helpTextColor\" class=\"ml-1\">\n {{ helpText }}\n </ngt-helper>\n</label>\n\n<div class=\"flex flex-col\">\n <div class=\"{{ shining ? '' : 'flex'}}\" [hidden]='shining'>\n <textarea [rows]='rows' autocomplete=\"new-password\" attr.type=\"text\"\n class=\"appearance-none block border focus:outline-none leading-tight px-4 py-3 rounded w-full h-full {{ ngtStyle.compile(['h', 'color.border', 'color.bg', 'color.text']) }}\"\n [disabled]=\"isDisabled\" [readonly]=\"isReadonly\" placeholder=\"{{ placeholder ? placeholder : ''}}\"\n [ngClass]=\"{'textarea-has-error border-red-700': formControl?.errors && (formControl?.dirty || (formContainer && formContainer['submitted']))}\"\n #element>\n </textarea>\n </div>\n\n <ng-container *ngIf=\"showCharactersLength && !shining\">\n <p class=\"text-xs mt-1\">\n {{ ngtTranslateService.ngtTextAreaRemainingCharacters }}: <span class=\"font-semibold\">\n {{ getRemainingCharacters() }}\n </span>\n </p>\n </ng-container>\n</div>\n\n<ng-container *ngIf='shining'>\n <div class=\"flex\">\n <ngt-shining class=\"h-10 w-full\"></ngt-shining>\n </div>\n</ng-container>\n\n<input *ngIf='componentReady' type=\"hidden\" [ngModel]=\"value\" [name]=\"name\" [value]=\"value\">\n\n<ng-content></ng-content>\n<ngt-validation [control]=\"formControl\" [container]=\"formContainer\"></ngt-validation>", dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.NgtValidationComponent, selector: "ngt-validation", inputs: ["control", "container", "minValue", "minLength"] }, { kind: "component", type: i7.NgtShiningComponent, selector: "ngt-shining", inputs: ["shiningWidth"] }, { kind: "component", type: i8.NgtHelperComponent, selector: "ngt-helper", inputs: ["helpTextColor", "helpText", "helpTitle", "icon", "iconSize", "iconColor", "iconTitle", "tooltipSize", "autoXReverse"] }], viewProviders: [
|
|
181
181
|
{ provide: ControlContainer, useExisting: NgForm }
|
|
182
182
|
] });
|
|
183
183
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: NgtTextareaComponent, decorators: [{
|
|
@@ -235,4 +235,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImpor
|
|
|
235
235
|
}], maxLength: [{
|
|
236
236
|
type: Input
|
|
237
237
|
}] } });
|
|
238
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd0LXRleHRhcmVhLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXRhaWx3aW5kL3NyYy9jb21wb25lbnRzL25ndC10ZXh0YXJlYS9uZ3QtdGV4dGFyZWEuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdGFpbHdpbmQvc3JjL2NvbXBvbmVudHMvbmd0LXRleHRhcmVhL25ndC10ZXh0YXJlYS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUVULElBQUksRUFFSixLQUFLLEVBR0wsUUFBUSxFQUVSLElBQUksRUFDSixRQUFRLEVBQ1IsU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHdEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUcvRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzREFBc0QsQ0FBQzs7Ozs7Ozs7OztBQWE1RixNQUFNLE9BQU8sb0JBQXFCLFNBQVEsY0FBYztJQTZCcEQsWUFDWSxRQUFrQixFQUNFLHNCQUE4QyxFQUVuRSxhQUErQixFQUU5QixnQkFBa0MsRUFDbEMsUUFBbUIsRUFFcEIsbUJBQXdDO1FBRS9DLEtBQUssRUFBRSxDQUFDO1FBVkEsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNFLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFFbkUsa0JBQWEsR0FBYixhQUFhLENBQWtCO1FBRTlCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUVwQix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBbkNuRCxTQUFTO1FBQ08sVUFBSyxHQUFXLEVBQUUsQ0FB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ICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBIb3N0LFxuICAgIEluamVjdG9yLFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgUmVuZGVyZXIyLFxuICAgIFNlbGYsXG4gICAgU2tpcFNlbGYsXG4gICAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xDb250YWluZXIsIE5nRm9ybSwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBOZ3RCYXNlTmdNb2RlbCwgTmd0TWFrZVByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vYmFzZS9uZ3QtYmFzZS1uZy1tb2RlbCc7XG5pbXBvcnQgeyBOZ3RTdHlsaXphYmxlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9uZ3Qtc3R5bGl6YWJsZS9uZ3Qtc3R5bGl6YWJsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTmd0VHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2h0dHAvbmd0LXRyYW5zbGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IE5ndFN0eWxpemFibGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbmd0LXN0eWxpemFibGUvbmd0LXN0eWxpemFibGUuc2VydmljZSc7XG5pbXBvcnQgeyBOZ3RGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vbmd0LWZvcm0vbmd0LWZvcm0uY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3QtdGV4dGFyZWEnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9uZ3QtdGV4dGFyZWEuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBOZ3RNYWtlUHJvdmlkZXIoTmd0VGV4dGFyZWFDb21wb25lbnQpLFxuICAgIF0sXG4gICAgdmlld1Byb3ZpZGVyczogW1xuICAgICAgICB7IHByb3ZpZGU6IENvbnRyb2xDb250YWluZXIsIHVzZUV4aXN0aW5nOiBOZ0Zvcm0gfVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgTmd0VGV4dGFyZWFDb21wb25lbnQgZXh0ZW5kcyBOZ3RCYXNlTmdNb2RlbCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICBAVmlld0NoaWxkKFwiZWxlbWVudFwiLCB7IHN0YXRpYzogdHJ1ZSB9KSBwdWJsaWMgZWxlbWVudDogRWxlbWVudFJlZjtcblxuICAgIC8vIFZpc3VhbFxuICAgIEBJbnB1dCgpIHB1YmxpYyBsYWJlbDogc3RyaW5nID0gXCJcIjtcbiAgICBASW5wdXQoKSBwdWJsaWMgcGxhY2Vob2xkZXI6IHN0cmluZyA9IFwiXCI7XG4gICAgQElucHV0KCkgcHVibGljIHJvd3M6IHN0cmluZyA9IFwiM1wiO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBzaG93Q2hhcmFjdGVyc0xlbmd0aDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBoZWxwVGl0bGU6IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgaGVscFRleHQ6IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgaGVscFRleHRDb2xvcjogc3RyaW5nID0gJ3RleHQtZ3JlZW4tNTAwJztcbiAgICBASW5wdXQoKSBwdWJsaWMgc2hpbmluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLy8gQmVoYXZpb3JcbiAgICBASW5wdXQoKSBwdWJsaWMgbmFtZTogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpc0Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgcHVibGljIGlzUmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgaml0OiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgcHVibGljIGZvY3VzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvLyBWYWxpZGF0aW9uXG4gICAgQElucHV0KCkgcHVibGljIGlzUmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgbWF4TGVuZ3RoOiBudW1iZXIgPSAzMDA7XG5cbiAgICBwdWJsaWMgY29tcG9uZW50UmVhZHkgPSBmYWxzZTtcbiAgICBwdWJsaWMgbmd0U3R5bGU6IE5ndFN0eWxpemFibGVTZXJ2aWNlO1xuXG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBBcnJheTxTdWJzY3JpcHRpb24+ID0gW107XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBAU2VsZigpIEBPcHRpb25hbCgpIHByaXZhdGUgbmd0U3R5bGl6YWJsZURpcmVjdGl2ZTogTmd0U3R5bGl6YWJsZURpcmVjdGl2ZSxcbiAgICAgICAgQE9wdGlvbmFsKCkgQEhvc3QoKVxuICAgICAgICBwdWJsaWMgZm9ybUNvbnRhaW5lcjogQ29udHJvbENvbnRhaW5lcixcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKClcbiAgICAgICAgcHJpdmF0ZSBuZ3RGb3JtQ29tcG9uZW50OiBOZ3RGb3JtQ29tcG9uZW50LFxuICAgICAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIEBPcHRpb25hbCgpXG4gICAgICAgIHB1YmxpYyBuZ3RUcmFuc2xhdGVTZXJ2aWNlOiBOZ3RUcmFuc2xhdGVTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgaWYgKHRoaXMubmd0Rm9ybUNvbXBvbmVudCkge1xuICAgICAgICAgICAgdGhpcy5zaGluaW5nID0gdGhpcy5uZ3RGb3JtQ29tcG9uZW50LmlzU2hpbmluZygpO1xuXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgICB0aGlzLm5ndEZvcm1Db21wb25lbnQub25TaGluaW5nQ2hhbmdlLnN1YnNjcmliZSgoc2hpbmluZzogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNoaW5pbmcgPSBzaGluaW5nO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubmd0U3R5bGl6YWJsZURpcmVjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5uZ3RTdHlsZSA9IHRoaXMubmd0U3R5bGl6YWJsZURpcmVjdGl2ZS5nZXROZ3RTdHlsaXphYmxlU2VydmljZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5uZ3RTdHlsZSA9IG5ldyBOZ3RTdHlsaXphYmxlU2VydmljZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5uZ3RTdHlsZS5sb2FkKHRoaXMuaW5qZWN0b3IsICdOZ3RUZXh0YXJlYScsIHtcbiAgICAgICAgICAgIHRleHQ6ICd0ZXh0LXNtJyxcbiAgICAgICAgICAgIGZvbnRDYXNlOiAnJyxcbiAgICAgICAgICAgIGNvbG9yOiB7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAnYm9yZGVyLWdyYXktNDAwIGZvY3VzOmJvcmRlci1ncmF5LTcwMCcsXG4gICAgICAgICAgICAgICAgYmc6ICdiZy1iZy13aGl0ZSBmb2N1czpiZy13aGl0ZScsXG4gICAgICAgICAgICAgICAgdGV4dDogJ3RleHQtZ3JheS04MDAnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzKSB7XG4gICAgICAgIGlmIChjaGFuZ2VzLmlzUmVxdWlyZWQpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVmFsaWRhdGlvbnMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmZvcm1Db250YWluZXIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcIlRoZSBlbGVtZW50IG11c3QgYmUgaW5zaWRlIGEgPGZvcm0gI2Zvcm09J25nRm9ybSc+IHRhZyFcIiwgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLm5hbWUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcIlRoZSBlbGVtZW50IG11c3QgY29udGFpbiBhIG5hbWUgYXR0cmlidXRlIVwiLCB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlYWR5ID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRDb21wb25lbnQoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuZGVzdHJveVN1YnNjcmlwdGlvbnMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0Rm9jdXMoKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfSwgMjAwKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gICAgICAgIHRoaXMudmFsdWUgPSAnJztcbiAgICB9XG5cbiAgICBwdWJsaWMgY2hhbmdlKHZhbHVlKSB7XG4gICAgICAgIGxldCBuYXRpdmVWYWx1ZSA9IHRoaXMuZ2V0TmF0aXZlVmFsdWUoKTtcbiAgICAgICAgbGV0IG5nTW9kZWxWYWx1ZSA9IHZhbHVlID8gdmFsdWUgOiAnJztcblxuICAgICAgICBpZiAodGhpcy5jb21wb25lbnRSZWFkeSkge1xuICAgICAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlRXZlbnQuZW1pdCh0aGlzLnZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnZhbHVlICE9IG5hdGl2ZVZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSA9IG5nTW9kZWxWYWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXRSZW1haW5pbmdDaGFyYWN0ZXJzKCkge1xuICAgICAgICBpZiAodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgJiYgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgJiYgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoKHRoaXMubWF4TGVuZ3RoIC0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUubGVuZ3RoKSA+IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYXhMZW5ndGggLSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZS5sZW5ndGg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubWF4TGVuZ3RoO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdENvbXBvbmVudCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybUNvbnRhaW5lciAmJiB0aGlzLmZvcm1Db250YWluZXIuY29udHJvbCAmJiAodGhpcy5mb3JtQ29udHJvbCA9IHRoaXMuZm9ybUNvbnRhaW5lci5jb250cm9sLmdldCh0aGlzLm5hbWUpKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZm9jdXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEZvY3VzKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCB3YXRjaCA9IFwiY2hhbmdlXCI7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmppdCkge1xuICAgICAgICAgICAgICAgIHdhdGNoICs9IFwiIGtleXVwIGtleWRvd24ga2V5cHJlc3NcIjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgd2F0Y2guc3BsaXQoJyAnKS5mb3JFYWNoKChldnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgZXZ0LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBuYXRpdmVWYWx1ZSA9IHRoaXMuZ2V0TmF0aXZlVmFsdWUoKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52YWx1ZSAhPSBuYXRpdmVWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG5hdGl2ZVZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIFwia2V5ZG93blwiLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgJiYgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgJiYgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUubGVuZ3RoID49IHRoaXMubWF4TGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEJhY2tzcGFjZSBhbmQgZGVsZXRlXG4gICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5rZXlDb2RlICE9IDggJiYgZXZlbnQua2V5Q29kZSAhPSA0Nikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlVmFsaWRhdGlvbnMoKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc0RpcnR5KCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzUHJpc3RpbmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcIlRoZSBlbGVtZW50IG11c3QgY29udGFpbiBhIG5nTW9kZWwgcHJvcGVydHlcIiwgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVWYWxpZGF0aW9ucygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmZvcm1Db250cm9sKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc3luY1ZhbGlkYXRvcnMgPSBbXTtcblxuICAgICAgICBpZiAodGhpcy5pc1JlcXVpcmVkKSB7XG4gICAgICAgICAgICBzeW5jVmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubWF4TGVuZ3RoKSB7XG4gICAgICAgICAgICBzeW5jVmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWF4TGVuZ3RoKHRoaXMubWF4TGVuZ3RoKSk7XG4gICAgICAgIH1cblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsaWRhdG9ycyhzeW5jVmFsaWRhdG9ycyk7XG4gICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXROYXRpdmVWYWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGVzdHJveVN1YnNjcmlwdGlvbnMoKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YnNjcmlwdGlvbiA9PiBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IFtdO1xuICAgIH1cbn1cbiIsIjxsYWJlbCBjbGFzcz1cInt7IHNoaW5pbmcgPyAnJyA6ICdibG9jaycgfX0gbWItMiBmbGV4IHt7IG5ndFN0eWxlLmNvbXBpbGUoWyd0ZXh0JywgJ2ZvbnRDYXNlJ10pIH19XCIgKm5nSWY9XCJsYWJlbFwiXG4gICAgW2hpZGRlbl09J3NoaW5pbmcnPlxuICAgIHt7IGxhYmVsIH19OlxuXG4gICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXJlZC01MDAgZm9udC1ib2xkIHRleHQtbWQgbWwtMVwiICpuZ0lmPVwiaXNSZXF1aXJlZFwiPio8L3NwYW4+XG5cbiAgICA8bmd0LWhlbHBlciAqbmdJZj1cImhlbHBUZXh0XCIgW2hlbHBUaXRsZV09XCJoZWxwVGl0bGVcIiBbaWNvbkNvbG9yXT1cImhlbHBUZXh0Q29sb3JcIiBjbGFzcz1cIm1sLTFcIj5cbiAgICAgICAge3sgaGVscFRleHQgfX1cbiAgICA8L25ndC1oZWxwZXI+XG48L2xhYmVsPlxuXG48ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbFwiPlxuICAgIDxkaXYgY2xhc3M9XCJ7eyBzaGluaW5nID8gJycgOiAnZmxleCd9fVwiIFtoaWRkZW5dPSdzaGluaW5nJz5cbiAgICAgICAgPHRleHRhcmVhIFtyb3dzXT0ncm93cycgYXV0b2NvbXBsZXRlPVwibmV3LXBhc3N3b3JkXCIgYXR0ci50eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBjbGFzcz1cImFwcGVhcmFuY2Utbm9uZSBibG9jayBib3JkZXIgZm9jdXM6b3V0bGluZS1ub25lIGxlYWRpbmctdGlnaHQgcHgtNCBweS0zIHJvdW5kZWQgdy1mdWxsIGgtZnVsbCB7eyBuZ3RTdHlsZS5jb21waWxlKFsnaCcsICdjb2xvci5ib3JkZXInLCAnY29sb3IuYmcnLCAnY29sb3IudGV4dCddKSB9fVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiIFtyZWFkb25seV09XCJpc1JlYWRvbmx5XCIgcGxhY2Vob2xkZXI9XCJ7eyBwbGFjZWhvbGRlciA/IHBsYWNlaG9sZGVyIDogJyd9fVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7J3RleHRhcmVhLWhhcy1lcnJvciBib3JkZXItcmVkLTcwMCc6IGZvcm1Db250cm9sPy5lcnJvcnMgJiYgKGZvcm1Db250cm9sPy5kaXJ0eSB8fCAoZm9ybUNvbnRhaW5lciAmJiBmb3JtQ29udGFpbmVyWydzdWJtaXR0ZWQnXSkpfVwiXG4gICAgICAgICAgICAjZWxlbWVudD5cbiAgICAgICAgPC90ZXh0YXJlYT5cbiAgICA8L2Rpdj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93Q2hhcmFjdGVyc0xlbmd0aCAmJiAhc2hpbmluZ1wiPlxuICAgICAgICA8cCBjbGFzcz1cInRleHQteHMgbXQtMVwiPlxuICAgICAgICAgICAge3sgbmd0VHJhbnNsYXRlU2VydmljZS5uZ3RUZXh0QXJlYVJlbWFpbmluZ0NoYXJhY3RlcnMgfX06IDxzcGFuIGNsYXNzPVwiZm9udC1zZW1pYm9sZFwiPlxuICAgICAgICAgICAgICAgIHt7IGdldFJlbWFpbmluZ0NoYXJhY3RlcnMoKSB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3A+XG4gICAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj0nc2hpbmluZyc+XG4gICAgPGRpdiBjbGFzcz1cImZsZXhcIj5cbiAgICAgICAgPG5ndC1zaGluaW5nIGNsYXNzPVwiaC0xMCB3LWZ1bGxcIj48L25ndC1zaGluaW5nPlxuICAgIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbjxpbnB1dCAqbmdJZj0nY29tcG9uZW50UmVhZHknIHR5cGU9XCJoaWRkZW5cIiBbbmdNb2RlbF09XCJ2YWx1ZVwiIFtuYW1lXT1cIm5hbWVcIiBbdmFsdWVdPVwidmFsdWVcIj5cblxuPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPG5ndC12YWxpZGF0aW9uIFtjb250cm9sXT1cImZvcm1Db250cm9sXCIgW2NvbnRhaW5lcl09XCJmb3JtQ29udGFpbmVyXCI+PC9uZ3QtdmFsaWRhdGlvbj4iXX0=
|
|
238
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd0LXRleHRhcmVhLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXRhaWx3aW5kL3NyYy9jb21wb25lbnRzL25ndC10ZXh0YXJlYS9uZ3QtdGV4dGFyZWEuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdGFpbHdpbmQvc3JjL2NvbXBvbmVudHMvbmd0LXRleHRhcmVhL25ndC10ZXh0YXJlYS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUVULElBQUksRUFFSixLQUFLLEVBR0wsUUFBUSxFQUVSLElBQUksRUFDSixRQUFRLEVBQ1IsU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHdEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUcvRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzREFBc0QsQ0FBQzs7Ozs7Ozs7OztBQWE1RixNQUFNLE9BQU8sb0JBQXFCLFNBQVEsY0FBYztJQTZCcEQsWUFDWSxRQUFrQixFQUNFLHNCQUE4QyxFQUVuRSxhQUErQixFQUU5QixnQkFBa0MsRUFDbEMsUUFBbUIsRUFFcEIsbUJBQXdDO1FBRS9DLEtBQUssRUFBRSxDQUFDO1FBVkEsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNFLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFFbkUsa0JBQWEsR0FBYixhQUFhLENBQWtCO1FBRTlCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUVwQix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBbkNuRCxTQUFTO1FBQ08sVUFBSyxHQUFXLEVBQUUsQ0FB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ICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBIb3N0LFxuICAgIEluamVjdG9yLFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgUmVuZGVyZXIyLFxuICAgIFNlbGYsXG4gICAgU2tpcFNlbGYsXG4gICAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xDb250YWluZXIsIE5nRm9ybSwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBOZ3RCYXNlTmdNb2RlbCwgTmd0TWFrZVByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vYmFzZS9uZ3QtYmFzZS1uZy1tb2RlbCc7XG5pbXBvcnQgeyBOZ3RTdHlsaXphYmxlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9uZ3Qtc3R5bGl6YWJsZS9uZ3Qtc3R5bGl6YWJsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTmd0VHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2h0dHAvbmd0LXRyYW5zbGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IE5ndFN0eWxpemFibGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbmd0LXN0eWxpemFibGUvbmd0LXN0eWxpemFibGUuc2VydmljZSc7XG5pbXBvcnQgeyBOZ3RGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vbmd0LWZvcm0vbmd0LWZvcm0uY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3QtdGV4dGFyZWEnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9uZ3QtdGV4dGFyZWEuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBOZ3RNYWtlUHJvdmlkZXIoTmd0VGV4dGFyZWFDb21wb25lbnQpLFxuICAgIF0sXG4gICAgdmlld1Byb3ZpZGVyczogW1xuICAgICAgICB7IHByb3ZpZGU6IENvbnRyb2xDb250YWluZXIsIHVzZUV4aXN0aW5nOiBOZ0Zvcm0gfVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgTmd0VGV4dGFyZWFDb21wb25lbnQgZXh0ZW5kcyBOZ3RCYXNlTmdNb2RlbCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICBAVmlld0NoaWxkKFwiZWxlbWVudFwiLCB7IHN0YXRpYzogdHJ1ZSB9KSBwdWJsaWMgZWxlbWVudDogRWxlbWVudFJlZjtcblxuICAgIC8vIFZpc3VhbFxuICAgIEBJbnB1dCgpIHB1YmxpYyBsYWJlbDogc3RyaW5nID0gXCJcIjtcbiAgICBASW5wdXQoKSBwdWJsaWMgcGxhY2Vob2xkZXI6IHN0cmluZyA9IFwiXCI7XG4gICAgQElucHV0KCkgcHVibGljIHJvd3M6IHN0cmluZyA9IFwiM1wiO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBzaG93Q2hhcmFjdGVyc0xlbmd0aDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBoZWxwVGl0bGU6IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgaGVscFRleHQ6IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgaGVscFRleHRDb2xvcjogc3RyaW5nID0gJ3RleHQtZ3JlZW4tNTAwJztcbiAgICBASW5wdXQoKSBwdWJsaWMgc2hpbmluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLy8gQmVoYXZpb3JcbiAgICBASW5wdXQoKSBwdWJsaWMgbmFtZTogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpc0Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgcHVibGljIGlzUmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgaml0OiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgcHVibGljIGZvY3VzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvLyBWYWxpZGF0aW9uXG4gICAgQElucHV0KCkgcHVibGljIGlzUmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgbWF4TGVuZ3RoOiBudW1iZXIgPSAzMDA7XG5cbiAgICBwdWJsaWMgY29tcG9uZW50UmVhZHkgPSBmYWxzZTtcbiAgICBwdWJsaWMgbmd0U3R5bGU6IE5ndFN0eWxpemFibGVTZXJ2aWNlO1xuXG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBBcnJheTxTdWJzY3JpcHRpb24+ID0gW107XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBAU2VsZigpIEBPcHRpb25hbCgpIHByaXZhdGUgbmd0U3R5bGl6YWJsZURpcmVjdGl2ZTogTmd0U3R5bGl6YWJsZURpcmVjdGl2ZSxcbiAgICAgICAgQE9wdGlvbmFsKCkgQEhvc3QoKVxuICAgICAgICBwdWJsaWMgZm9ybUNvbnRhaW5lcjogQ29udHJvbENvbnRhaW5lcixcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKClcbiAgICAgICAgcHJpdmF0ZSBuZ3RGb3JtQ29tcG9uZW50OiBOZ3RGb3JtQ29tcG9uZW50LFxuICAgICAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIEBPcHRpb25hbCgpXG4gICAgICAgIHB1YmxpYyBuZ3RUcmFuc2xhdGVTZXJ2aWNlOiBOZ3RUcmFuc2xhdGVTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgaWYgKHRoaXMubmd0Rm9ybUNvbXBvbmVudCkge1xuICAgICAgICAgICAgdGhpcy5zaGluaW5nID0gdGhpcy5uZ3RGb3JtQ29tcG9uZW50LmlzU2hpbmluZygpO1xuXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgICB0aGlzLm5ndEZvcm1Db21wb25lbnQub25TaGluaW5nQ2hhbmdlLnN1YnNjcmliZSgoc2hpbmluZzogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNoaW5pbmcgPSBzaGluaW5nO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubmd0U3R5bGl6YWJsZURpcmVjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5uZ3RTdHlsZSA9IHRoaXMubmd0U3R5bGl6YWJsZURpcmVjdGl2ZS5nZXROZ3RTdHlsaXphYmxlU2VydmljZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5uZ3RTdHlsZSA9IG5ldyBOZ3RTdHlsaXphYmxlU2VydmljZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5uZ3RTdHlsZS5sb2FkKHRoaXMuaW5qZWN0b3IsICdOZ3RUZXh0YXJlYScsIHtcbiAgICAgICAgICAgIHRleHQ6ICd0ZXh0LXNtJyxcbiAgICAgICAgICAgIGZvbnRDYXNlOiAnJyxcbiAgICAgICAgICAgIGNvbG9yOiB7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAnYm9yZGVyLWdyYXktNDAwIGZvY3VzOmJvcmRlci1ncmF5LTcwMCcsXG4gICAgICAgICAgICAgICAgYmc6ICdiZy1iZy13aGl0ZSBmb2N1czpiZy13aGl0ZScsXG4gICAgICAgICAgICAgICAgdGV4dDogJ3RleHQtZ3JheS04MDAnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzKSB7XG4gICAgICAgIGlmIChjaGFuZ2VzLmlzUmVxdWlyZWQpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVmFsaWRhdGlvbnMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmZvcm1Db250YWluZXIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcIlRoZSBlbGVtZW50IG11c3QgYmUgaW5zaWRlIGEgPGZvcm0gI2Zvcm09J25nRm9ybSc+IHRhZyFcIiwgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLm5hbWUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcIlRoZSBlbGVtZW50IG11c3QgY29udGFpbiBhIG5hbWUgYXR0cmlidXRlIVwiLCB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlYWR5ID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRDb21wb25lbnQoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuZGVzdHJveVN1YnNjcmlwdGlvbnMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0Rm9jdXMoKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfSwgMjAwKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gICAgICAgIHRoaXMudmFsdWUgPSAnJztcbiAgICB9XG5cbiAgICBwdWJsaWMgY2hhbmdlKHZhbHVlKSB7XG4gICAgICAgIGxldCBuYXRpdmVWYWx1ZSA9IHRoaXMuZ2V0TmF0aXZlVmFsdWUoKTtcbiAgICAgICAgbGV0IG5nTW9kZWxWYWx1ZSA9IHZhbHVlID8gdmFsdWUgOiAnJztcblxuICAgICAgICBpZiAodGhpcy5jb21wb25lbnRSZWFkeSkge1xuICAgICAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlRXZlbnQuZW1pdCh0aGlzLnZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnZhbHVlICE9IG5hdGl2ZVZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSA9IG5nTW9kZWxWYWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXRSZW1haW5pbmdDaGFyYWN0ZXJzKCkge1xuICAgICAgICBpZiAodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgJiYgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgJiYgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoKHRoaXMubWF4TGVuZ3RoIC0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUubGVuZ3RoKSA+IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYXhMZW5ndGggLSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZS5sZW5ndGg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubWF4TGVuZ3RoO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdENvbXBvbmVudCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybUNvbnRhaW5lciAmJiB0aGlzLmZvcm1Db250YWluZXIuY29udHJvbCAmJiAodGhpcy5mb3JtQ29udHJvbCA9IHRoaXMuZm9ybUNvbnRhaW5lci5jb250cm9sLmdldCh0aGlzLm5hbWUpKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZm9jdXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEZvY3VzKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCB3YXRjaCA9IFwiY2hhbmdlXCI7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmppdCkge1xuICAgICAgICAgICAgICAgIHdhdGNoICs9IFwiIGtleXVwIGtleWRvd24ga2V5cHJlc3NcIjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgd2F0Y2guc3BsaXQoJyAnKS5mb3JFYWNoKChldnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgZXZ0LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBuYXRpdmVWYWx1ZSA9IHRoaXMuZ2V0TmF0aXZlVmFsdWUoKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52YWx1ZSAhPSBuYXRpdmVWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG5hdGl2ZVZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIFwia2V5ZG93blwiLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgJiYgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgJiYgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUubGVuZ3RoID49IHRoaXMubWF4TGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEJhY2tzcGFjZSBhbmQgZGVsZXRlXG4gICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5rZXlDb2RlICE9IDggJiYgZXZlbnQua2V5Q29kZSAhPSA0Nikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlVmFsaWRhdGlvbnMoKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc0RpcnR5KCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzUHJpc3RpbmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcIlRoZSBlbGVtZW50IG11c3QgY29udGFpbiBhIG5nTW9kZWwgcHJvcGVydHlcIiwgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVWYWxpZGF0aW9ucygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmZvcm1Db250cm9sKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc3luY1ZhbGlkYXRvcnMgPSBbXTtcblxuICAgICAgICBpZiAodGhpcy5pc1JlcXVpcmVkKSB7XG4gICAgICAgICAgICBzeW5jVmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubWF4TGVuZ3RoKSB7XG4gICAgICAgICAgICBzeW5jVmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWF4TGVuZ3RoKHRoaXMubWF4TGVuZ3RoKSk7XG4gICAgICAgIH1cblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsaWRhdG9ycyhzeW5jVmFsaWRhdG9ycyk7XG4gICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXROYXRpdmVWYWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGVzdHJveVN1YnNjcmlwdGlvbnMoKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YnNjcmlwdGlvbiA9PiBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IFtdO1xuICAgIH1cbn1cbiIsIjxsYWJlbCBjbGFzcz1cInt7IHNoaW5pbmcgPyAnJyA6ICdibG9jaycgfX0gbWItMiBmbGV4IHt7IG5ndFN0eWxlLmNvbXBpbGUoWyd0ZXh0JywgJ2ZvbnRDYXNlJ10pIH19XCIgKm5nSWY9XCJsYWJlbFwiXG4gICAgW2hpZGRlbl09J3NoaW5pbmcnPlxuICAgIHt7IGxhYmVsIH19OlxuXG4gICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXJlZC01MDAgZm9udC1ib2xkIHRleHQtbWQgbWwtMVwiICpuZ0lmPVwiaXNSZXF1aXJlZFwiPio8L3NwYW4+XG5cbiAgICA8bmd0LWhlbHBlciAqbmdJZj1cImhlbHBUZXh0XCIgW2hlbHBUaXRsZV09XCJoZWxwVGl0bGVcIiBbaWNvbkNvbG9yXT1cImhlbHBUZXh0Q29sb3JcIiBjbGFzcz1cIm1sLTFcIj5cbiAgICAgICAge3sgaGVscFRleHQgfX1cbiAgICA8L25ndC1oZWxwZXI+XG48L2xhYmVsPlxuXG48ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbFwiPlxuICAgIDxkaXYgY2xhc3M9XCJ7eyBzaGluaW5nID8gJycgOiAnZmxleCd9fVwiIFtoaWRkZW5dPSdzaGluaW5nJz5cbiAgICAgICAgPHRleHRhcmVhIFtyb3dzXT0ncm93cycgYXV0b2NvbXBsZXRlPVwibmV3LXBhc3N3b3JkXCIgYXR0ci50eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBjbGFzcz1cImFwcGVhcmFuY2Utbm9uZSBibG9jayBib3JkZXIgZm9jdXM6b3V0bGluZS1ub25lIGxlYWRpbmctdGlnaHQgcHgtNCBweS0zIHJvdW5kZWQgdy1mdWxsIGgtZnVsbCB7eyBuZ3RTdHlsZS5jb21waWxlKFsnaCcsICdjb2xvci5ib3JkZXInLCAnY29sb3IuYmcnLCAnY29sb3IudGV4dCddKSB9fVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiIFtyZWFkb25seV09XCJpc1JlYWRvbmx5XCIgcGxhY2Vob2xkZXI9XCJ7eyBwbGFjZWhvbGRlciA/IHBsYWNlaG9sZGVyIDogJyd9fVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7J3RleHRhcmVhLWhhcy1lcnJvciBib3JkZXItcmVkLTcwMCc6IGZvcm1Db250cm9sPy5lcnJvcnMgJiYgKGZvcm1Db250cm9sPy5kaXJ0eSB8fCAoZm9ybUNvbnRhaW5lciAmJiBmb3JtQ29udGFpbmVyWydzdWJtaXR0ZWQnXSkpfVwiXG4gICAgICAgICAgICAjZWxlbWVudD5cbiAgICAgICAgPC90ZXh0YXJlYT5cbiAgICA8L2Rpdj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93Q2hhcmFjdGVyc0xlbmd0aCAmJiAhc2hpbmluZ1wiPlxuICAgICAgICA8cCBjbGFzcz1cInRleHQteHMgbXQtMVwiPlxuICAgICAgICAgICAge3sgbmd0VHJhbnNsYXRlU2VydmljZS5uZ3RUZXh0QXJlYVJlbWFpbmluZ0NoYXJhY3RlcnMgfX06IDxzcGFuIGNsYXNzPVwiZm9udC1zZW1pYm9sZFwiPlxuICAgICAgICAgICAgICAgIHt7IGdldFJlbWFpbmluZ0NoYXJhY3RlcnMoKSB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3A+XG4gICAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj0nc2hpbmluZyc+XG4gICAgPGRpdiBjbGFzcz1cImZsZXhcIj5cbiAgICAgICAgPG5ndC1zaGluaW5nIGNsYXNzPVwiaC0xMCB3LWZ1bGxcIj48L25ndC1zaGluaW5nPlxuICAgIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbjxpbnB1dCAqbmdJZj0nY29tcG9uZW50UmVhZHknIHR5cGU9XCJoaWRkZW5cIiBbbmdNb2RlbF09XCJ2YWx1ZVwiIFtuYW1lXT1cIm5hbWVcIiBbdmFsdWVdPVwidmFsdWVcIj5cblxuPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPG5ndC12YWxpZGF0aW9uIFtjb250cm9sXT1cImZvcm1Db250cm9sXCIgW2NvbnRhaW5lcl09XCJmb3JtQ29udGFpbmVyXCI+PC9uZ3QtdmFsaWRhdGlvbj4iXX0=
|