@vgip/meta-ui 1.2.1 → 1.2.2
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/esm2020/lib/common/metaAutofocus.directive.mjs +3 -3
- package/esm2020/lib/common/metaIcons.pipe.mjs +3 -3
- package/esm2020/lib/common/metaModel.pipe.mjs +3 -3
- package/esm2020/lib/common/metaStripHtml.pipe.mjs +3 -3
- package/esm2020/lib/field.mjs +43 -58
- package/esm2020/lib/fieldAbstract.mjs +3 -3
- package/esm2020/lib/fieldBoolean/index.mjs +3 -3
- package/esm2020/lib/fieldDatetime/index.mjs +3 -3
- package/esm2020/lib/fieldInput/index.mjs +5 -5
- package/esm2020/lib/fieldRadio/index.mjs +3 -3
- package/esm2020/lib/fieldRichtext/index.mjs +3 -3
- package/esm2020/lib/fieldText/index.mjs +3 -3
- package/esm2020/lib/fieldUnknown/index.mjs +3 -3
- package/esm2020/lib/index.mjs +4 -4
- package/esm2020/lib/services/metaContext/index.mjs +3 -3
- package/esm2020/lib/services/metaMsg/index.mjs +3 -3
- package/esm2020/lib/services/metaReference/index.mjs +3 -3
- package/esm2020/lib/services/metaResource/index.mjs +3 -3
- package/esm2020/lib/services/metaResource/metaHttpClient.mjs +3 -3
- package/esm2020/lib/services/metaTracker/index.mjs +3 -3
- package/esm2020/lib/services/resourceDrafts/index.mjs +3 -3
- package/fesm2015/vgip-meta-ui.mjs +104 -119
- package/fesm2015/vgip-meta-ui.mjs.map +1 -1
- package/fesm2020/vgip-meta-ui.mjs +104 -119
- package/fesm2020/vgip-meta-ui.mjs.map +1 -1
- package/package.json +1 -1
package/esm2020/lib/field.mjs
CHANGED
|
@@ -149,9 +149,9 @@ export class MetaRefDialog {
|
|
|
149
149
|
}
|
|
150
150
|
}
|
|
151
151
|
}
|
|
152
|
-
MetaRefDialog.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.
|
|
153
|
-
MetaRefDialog.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.
|
|
154
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.
|
|
152
|
+
MetaRefDialog.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.2", ngImport: i0, type: MetaRefDialog, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
153
|
+
MetaRefDialog.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.2", type: MetaRefDialog, selector: "ng-component", ngImport: i0, template: "<div class='Vlt-modal Vlt-modal--large'>\n <div class=\"Vlt-modal__panel\">\n <div class=\"Vlt-tabs\">\n <div class='Vlt-tabs__header--background'>\n <div class=\"Vlt-tabs__header Vlt-tabs__header--shadow\">\n <svg class=\"Vlt-icon\" [ngStyle]=\"{fill: integrationIcon === 'Brand-icon-vonage' ? 'var(--vgip-meta-input-color)' : ''}\"><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\" /></svg>\n <div *ngFor='let r of resources | keyvalue: keepOrder' (click)='selectResource(r.key)' class=\"Vlt-tabs__link\" [ngClass]=\"{ 'Vlt-tabs__link_active': currentResource === r.key}\">\n {{r.key}}\n </div>\n <div class=\"Vlt-modal__dismiss\" (click)=\"dismiss()\">\n <svg class=\"Vlt-icon\"><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-cross\" /></svg>\n </div>\n </div>\n </div>\n <div class=\"Vlt-tabs__content\" style='min-height: 90px;'>\n <ng-container *ngFor='let r of resources | keyvalue: keepOrder'>\n <div *ngIf='currentResource === r.key' class=\"Vlt-tabs__panel Vlt-tabs__panel_active\">\n <vgip-meta-resource [resource]='r.value' [model]='models[r.key]' [metaResourceServiceDelegated]='metaResource' (done)='onResourceDone($event)' theme='inherit' [attr.data-theme]='theme'></vgip-meta-resource>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n</div>\n", styles: [".Vlt-modal_visible{background:var(--vgip-meta-overlay-background)}.Vlt-modal__panel{padding:0;background:var(--vgip-meta-resource-bg-color);overflow:hidden}@media only screen and (max-width: 575px){.Vlt-modal__panel{height:100%;width:100%;max-height:none;border-bottom-left-radius:0;border-bottom-right-radius:0;margin:10px 6px 0}.Vlt-modal__panel ::ng-deep .busy-mask{min-height:calc(100vh - 58px)}}.Vlt-modal__panel .Vlt-tabs__header--background{border-top-left-radius:5px;border-top-right-radius:5px}.Vlt-modal__panel .Vlt-tabs__header{background:var(--vgip-meta-resource-bar-color);padding-left:52px;padding-right:45px;border-bottom:0;flex-wrap:wrap;min-height:52px;max-height:52px;align-items:center}.Vlt-modal__panel .Vlt-tabs__header>.Vlt-icon{position:absolute;left:14px}.Vlt-modal__panel .Vlt-tabs__header h5{margin-bottom:0;font-weight:initial}.Vlt-modal__panel .Vlt-tabs__header .Vlt-tabs__link{padding-top:4px;padding-bottom:2px;color:var(--vgip-meta-input-label-color);text-transform:capitalize}.Vlt-modal__panel .Vlt-tabs__header .Vlt-tabs__link_active{color:var(--vgip-meta-input-accent-color)}.Vlt-modal__panel .Vlt-tabs__header .Vlt-tabs__link_active:after{background:var(--vgip-meta-input-accent-color)}.Vlt-modal__panel .Vlt-tabs__header .Vlt-modal__dismiss{background-image:none;width:18px;height:18px;opacity:initial}.Vlt-modal__panel .Vlt-tabs__header .Vlt-modal__dismiss svg{width:16px;height:16px;fill:var(--vgip-meta-input-label-color)}.Vlt-modal__panel .Vlt-tabs__header .Vlt-modal__dismiss:hover svg{fill:var(--vgip-meta-input-accent-color)}.Vlt-modal__panel .Vlt-tabs__header::-webkit-scrollbar{width:8px}.Vlt-modal__panel .Vlt-tabs__header::-webkit-scrollbar-thumb{background-color:var(--vgip-meta-scrollbar-color);border:2px solid transparent;border-radius:6px;background-clip:content-box}.Vlt-modal__panel .Vlt-tabs__content{margin-top:0}.Vlt-modal__panel .Vlt-tabs__content .Vlt-tabs__link{font-size:1.8rem}.Vlt-modal__panel .Vlt-callout--banner{justify-content:initial;text-align:initial;overflow-y:auto}.Vlt-modal__panel .Vlt-callout--banner.Vlt-callout--dismissed{padding:0}.Vlt-modal__panel .Vlt-callout--banner:not(.Vlt-callout--dismissed){min-height:78px}.Vlt-modal__panel .Vlt-modal__cancel{z-index:899}.Vlt-modal__panel .Vlt-modal__dismiss{right:16px;top:14px}.Vlt-modal__panel .Vlt-card__footer button{margin-top:0;margin-bottom:0}.Vlt-modal__panel .Vlt-select select:disabled{background:initial;cursor:not-allowed}.Vlt-modal__panel ::ng-deep .form-content{min-height:0;max-height:calc(95vh - 172px)}@media only screen and (max-width: 575px){.Vlt-modal__panel ::ng-deep .form-content{min-height:calc(100vh - 113px)}}.resource-menu button{margin:0 -10px}.resource-menu button:not(:hover) .Vlt-icon{color:#616266;fill:#616266}.busy-mask{position:absolute;top:0;right:0;bottom:0;left:0;background:rgba(0,0,0,.32);opacity:1;z-index:898;display:none;border-bottom-left-radius:6px;border-bottom-right-radius:6px;margin:1px;cursor:progress}.busy-mask.active{display:block}\n"], components: [{ type: i0.forwardRef(function () { return MetaResource; }), selector: "vgip-meta-resource", inputs: ["resource", "model", "metaResourceServiceDelegated", "theme"], outputs: ["done"] }], directives: [{ type: i0.forwardRef(function () { return i1.NgStyle; }), selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i0.forwardRef(function () { return i1.NgForOf; }), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i0.forwardRef(function () { return i1.NgClass; }), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i0.forwardRef(function () { return i1.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "keyvalue": i0.forwardRef(function () { return i1.KeyValuePipe; }) } });
|
|
154
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.2", ngImport: i0, type: MetaRefDialog, decorators: [{
|
|
155
155
|
type: Component,
|
|
156
156
|
args: [{ template: "<div class='Vlt-modal Vlt-modal--large'>\n <div class=\"Vlt-modal__panel\">\n <div class=\"Vlt-tabs\">\n <div class='Vlt-tabs__header--background'>\n <div class=\"Vlt-tabs__header Vlt-tabs__header--shadow\">\n <svg class=\"Vlt-icon\" [ngStyle]=\"{fill: integrationIcon === 'Brand-icon-vonage' ? 'var(--vgip-meta-input-color)' : ''}\"><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\" /></svg>\n <div *ngFor='let r of resources | keyvalue: keepOrder' (click)='selectResource(r.key)' class=\"Vlt-tabs__link\" [ngClass]=\"{ 'Vlt-tabs__link_active': currentResource === r.key}\">\n {{r.key}}\n </div>\n <div class=\"Vlt-modal__dismiss\" (click)=\"dismiss()\">\n <svg class=\"Vlt-icon\"><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-cross\" /></svg>\n </div>\n </div>\n </div>\n <div class=\"Vlt-tabs__content\" style='min-height: 90px;'>\n <ng-container *ngFor='let r of resources | keyvalue: keepOrder'>\n <div *ngIf='currentResource === r.key' class=\"Vlt-tabs__panel Vlt-tabs__panel_active\">\n <vgip-meta-resource [resource]='r.value' [model]='models[r.key]' [metaResourceServiceDelegated]='metaResource' (done)='onResourceDone($event)' theme='inherit' [attr.data-theme]='theme'></vgip-meta-resource>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n</div>\n", styles: [".Vlt-modal_visible{background:var(--vgip-meta-overlay-background)}.Vlt-modal__panel{padding:0;background:var(--vgip-meta-resource-bg-color);overflow:hidden}@media only screen and (max-width: 575px){.Vlt-modal__panel{height:100%;width:100%;max-height:none;border-bottom-left-radius:0;border-bottom-right-radius:0;margin:10px 6px 0}.Vlt-modal__panel ::ng-deep .busy-mask{min-height:calc(100vh - 58px)}}.Vlt-modal__panel .Vlt-tabs__header--background{border-top-left-radius:5px;border-top-right-radius:5px}.Vlt-modal__panel .Vlt-tabs__header{background:var(--vgip-meta-resource-bar-color);padding-left:52px;padding-right:45px;border-bottom:0;flex-wrap:wrap;min-height:52px;max-height:52px;align-items:center}.Vlt-modal__panel .Vlt-tabs__header>.Vlt-icon{position:absolute;left:14px}.Vlt-modal__panel .Vlt-tabs__header h5{margin-bottom:0;font-weight:initial}.Vlt-modal__panel .Vlt-tabs__header .Vlt-tabs__link{padding-top:4px;padding-bottom:2px;color:var(--vgip-meta-input-label-color);text-transform:capitalize}.Vlt-modal__panel .Vlt-tabs__header .Vlt-tabs__link_active{color:var(--vgip-meta-input-accent-color)}.Vlt-modal__panel .Vlt-tabs__header .Vlt-tabs__link_active:after{background:var(--vgip-meta-input-accent-color)}.Vlt-modal__panel .Vlt-tabs__header .Vlt-modal__dismiss{background-image:none;width:18px;height:18px;opacity:initial}.Vlt-modal__panel .Vlt-tabs__header .Vlt-modal__dismiss svg{width:16px;height:16px;fill:var(--vgip-meta-input-label-color)}.Vlt-modal__panel .Vlt-tabs__header .Vlt-modal__dismiss:hover svg{fill:var(--vgip-meta-input-accent-color)}.Vlt-modal__panel .Vlt-tabs__header::-webkit-scrollbar{width:8px}.Vlt-modal__panel .Vlt-tabs__header::-webkit-scrollbar-thumb{background-color:var(--vgip-meta-scrollbar-color);border:2px solid transparent;border-radius:6px;background-clip:content-box}.Vlt-modal__panel .Vlt-tabs__content{margin-top:0}.Vlt-modal__panel .Vlt-tabs__content .Vlt-tabs__link{font-size:1.8rem}.Vlt-modal__panel .Vlt-callout--banner{justify-content:initial;text-align:initial;overflow-y:auto}.Vlt-modal__panel .Vlt-callout--banner.Vlt-callout--dismissed{padding:0}.Vlt-modal__panel .Vlt-callout--banner:not(.Vlt-callout--dismissed){min-height:78px}.Vlt-modal__panel .Vlt-modal__cancel{z-index:899}.Vlt-modal__panel .Vlt-modal__dismiss{right:16px;top:14px}.Vlt-modal__panel .Vlt-card__footer button{margin-top:0;margin-bottom:0}.Vlt-modal__panel .Vlt-select select:disabled{background:initial;cursor:not-allowed}.Vlt-modal__panel ::ng-deep .form-content{min-height:0;max-height:calc(95vh - 172px)}@media only screen and (max-width: 575px){.Vlt-modal__panel ::ng-deep .form-content{min-height:calc(100vh - 113px)}}.resource-menu button{margin:0 -10px}.resource-menu button:not(:hover) .Vlt-icon{color:#616266;fill:#616266}.busy-mask{position:absolute;top:0;right:0;bottom:0;left:0;background:rgba(0,0,0,.32);opacity:1;z-index:898;display:none;border-bottom-left-radius:6px;border-bottom-right-radius:6px;margin:1px;cursor:progress}.busy-mask.active{display:block}\n"] }]
|
|
157
157
|
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; } });
|
|
@@ -179,9 +179,9 @@ export class FieldComposite extends FieldAbstract {
|
|
|
179
179
|
});
|
|
180
180
|
}
|
|
181
181
|
}
|
|
182
|
-
FieldComposite.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.
|
|
183
|
-
FieldComposite.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.
|
|
184
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.
|
|
182
|
+
FieldComposite.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.2", ngImport: i0, type: FieldComposite, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
183
|
+
FieldComposite.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.2", type: FieldComposite, selector: "ng-component", inputs: { meta: "meta" }, usesInheritance: true, ngImport: i0, template: "<div [ngClass]=\"{ 'Vlt-grid Vlt-grid--narrow': isRow }\" >\n <div style='margin: 0;' [ngClass]=\"{ 'Vlt-col': isRow, 'Vlt-col--1of3': isRow && fields.length > 3 }\" *ngFor='let field of fields'>\n <vgip-meta-field class='shown' [index]='index' [meta]='field' [parent]='parent' [integrationCode]='integrationCode' [preview]='preview' theme='inherit'></vgip-meta-field>\n </div>\n</div>", components: [{ type: i0.forwardRef(function () { return MetaField; }), selector: "vgip-meta-field", inputs: ["meta", "parent", "integrationCode", "resourceType", "index", "preview", "theme"], outputs: ["onChange", "onLeave"] }], directives: [{ type: i0.forwardRef(function () { return i1.NgClass; }), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i0.forwardRef(function () { return i1.NgForOf; }), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
|
|
184
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.2", ngImport: i0, type: FieldComposite, decorators: [{
|
|
185
185
|
type: Component,
|
|
186
186
|
args: [{ template: "<div [ngClass]=\"{ 'Vlt-grid Vlt-grid--narrow': isRow }\" >\n <div style='margin: 0;' [ngClass]=\"{ 'Vlt-col': isRow, 'Vlt-col--1of3': isRow && fields.length > 3 }\" *ngFor='let field of fields'>\n <vgip-meta-field class='shown' [index]='index' [meta]='field' [parent]='parent' [integrationCode]='integrationCode' [preview]='preview' theme='inherit'></vgip-meta-field>\n </div>\n</div>" }]
|
|
187
187
|
}], propDecorators: { meta: [{
|
|
@@ -610,13 +610,11 @@ export class FieldSelect extends FieldAbstract {
|
|
|
610
610
|
return this.metaResourceService;
|
|
611
611
|
}
|
|
612
612
|
}
|
|
613
|
-
FieldSelect.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.
|
|
614
|
-
FieldSelect.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: FieldSelect, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<div class='vgip-meta-field-preview' *ngIf='preview && model'>\n <div class='vgip-meta-field-label'>{{meta.label || meta.name}}</div>\n <div class='vgip-meta-field-value __gu'>\n {{model.label || model.id || model}}\n </div>\n</div>\n<div *ngIf='!preview' class=\"Vlt-form__element\" [ngClass]=\"{ 'Vlt-form__element--big': !meta.small ,'has-value': f.value, active: keyListenerActive, 'Vlt-form__element--error': f.invalid && ((f | metaModel)._parent.submitted || (ft | metaModel ).touched), 'no-x': meta.noX }\">\n\t<div class=\"Vlt-composite Vlt-dropdown Vlt-input\" style='display: block;' [ngClass]=\"{ 'has-append-button': isCreatable && !disabled }\">\n\t\t<div class=\"Vlt-select\">\n\t\t\t<label class='wrapper'>\n\t\t\t\t<label class='Vlt-truncate'>{{meta.label || meta.name}}<span *ngIf='validations.required && options.length' class='Vlt-red'>*</span></label>\n\t\t\t\t<input class='main' [required]='validations.required && !!options.length' readonly [ngModel]='showText' #ft='ngModel' [ngModelOptions]=\"{standalone: true}\" type=\"text\" [placeholder]=\"meta.placeholder || ' '\" (click)='onActivated($event)' (focus)='onActivated($event)' (blur)='onBlur($event)' [ngClass]=\"{ 'standalone': meta.standalone }\" [disabled]='disabled || !options.length' [attr.aria-label]='meta.label'/>\n\t\t\t</label>\n\t\t\t<select class='model' [required]='validations.required && !!options.length' style='display: none;' [(ngModel)]='model' [ngModelOptions]=\"{standalone: meta.standalone}\" (ngModelChange)=\"onModelChange($event)\" #f='ngModel' [name]='name'></select>\n\t\t\t<div *ngIf='searching' class='search-progress'>\n <div class=\"container\">\n <div class=\"bar Vlt-bg-purple\"></div>\n </div>\n\t\t\t</div>\n\t\t\t<div class='Vlt-composite__append right-actions'>\n <div *ngIf='model && !meta.noX && !disabled' class=\"Vlt-composite__append--icon\" (click)='clear($event)'>\n <div class=\"Vlt-composite__icon\">\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-cross\"/></svg>\n </div>\n </div>\n </div>\n\t\t</div>\n\t\t<div class='Vlt-dropdown__panel'>\n\t\t\t<div class=\"Vlt-dropdown__panel__content Vlt-dropdown__panel__content--scroll-area\">\n\t\t\t\t<!-- <div class=\"Vlt-dropdown__title\" style='padding-left: 15px;'>\n\t\t\t\t\tSelect ({{options.length}})\n\t\t\t\t\t<div class=\"Vlt-dropdown__close Vlt-white\" (click)='dismissDropdown($event)'>\n\t\t\t\t\t\t<svg class='Vlt-icon Vlt-icon--small'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-cross\"/></svg>\n\t\t\t\t\t</div>\n\t\t\t\t</div> -->\n\t\t\t\t<div class=\"Vlt-dropdown__block\"></div>\n\t\t\t\t<div *ngIf='dropdown' class='Vlt-dropdown__scroll'>\n\t\t\t\t\t<div [ngClass]=\"{ 'Vlt-dropdown__link--selected': activeSuggestionIndex === i }\" (click)='onOptionSelect($event, option)' *ngFor='let option of options; let i = index' class=\"Vlt-dropdown__link\">\n\t\t\t\t\t\t<div *ngIf='multiple' class=\"Vlt-checkbox\" style='width: 100%;'>\n\t\t\t\t\t\t\t<label>\n\t\t\t\t\t\t\t\t<span class=\"Vlt-checkbox__button\">\n\t\t\t\t\t\t\t\t\t<input type=\"checkbox\" [checked]='model && model.indexOf(option) != -1'/>\n\t\t\t\t\t\t\t\t\t<span class=\"Vlt-checkbox__icon\"></span>\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t{{option.label || (option.id === '' ? '--empty--' : option)}}\n\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div *ngIf='!multiple' style='padding: 12px 20px;'>{{option.label || (option.id === '' ? '--empty--' : option)}}</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div *ngIf='!multiple' class=\"Vlt-dropdown__block\"></div>\n\t\t\t\t<div *ngIf='multiple' class=\"Vlt-dropdown__block Vlt-dropdown__block--nowrap\" style='padding: 8px 16px 16px;'>\n <button (click)='clear($event)' type='button' class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--app Vlt-btn--small Vlt-btn--outline\" style='margin-right: 8px;'>Clear all</button>\n <button (click)='dismissDropdown($event)' type='button' class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--app Vlt-btn--small\">Done</button>\n </div>\n\t\t\t</div>\n\t\t</div>\n\t\t<!-- <span *ngIf='isCreatable'>\n <button type='button' (click)='openResource($event)' class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--icon Vlt-btn--large\" style='margin-left: 12px;'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\"/></svg>\n </button>\n\t\t</span> -->\n\t\t<div *ngIf='isCreatable && !disabled' class=\"Vlt-composite__append\">\n <button (focus)='onActivated($event)' (blur)='onBlur($event)' type='button' (click)='openResource($event)' class=\"Vlt-btn Vlt-btn--white Vlt-btn--icon add-button\" aria-label='Add new'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\"/></svg>\n </button>\n </div>\n\t</div>\n\t<small *ngIf='f.invalid && ((f | metaModel)._parent.submitted || ((ft | metaModel).touched && keyListenerActive))' class=\"Vlt-form__element__error\">\n\t\t<span *ngIf=\"f.errors.required\">Required. </span>\n\t</small>\n\t<small *ngIf='meta.hint' class=\"Vlt-form__element__hint\">{{meta.hint}}</small>\n</div>", styles: [".Vlt-form__element.no-x input.main{padding-right:40px}.Vlt-form__element--big:not(.has-value)>.Vlt-input>.Vlt-select>label>label{font-size:1.6rem;margin-top:-.8rem;top:50%}.Vlt-form__element--big input[readonly].main:not([disabled]){background:var(--vgip-meta-input-bg-color);border:1px solid var(--vgip-meta-input-border-color)}.Vlt-form__element--big:hover input[readonly].main,.Vlt-form__element--big:hover .Vlt-composite__append button,.Vlt-form__element--big:focus input[readonly].main,.Vlt-form__element--big:focus .Vlt-composite__append button,.Vlt-form__element--big.active input[readonly].main,.Vlt-form__element--big.active .Vlt-composite__append button{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-form__element--big.Vlt-form__element--error input[readonly].main,.Vlt-form__element--big.Vlt-form__element--error .Vlt-composite__append button{border-color:#f25a6b;box-shadow:none}.Vlt-form__element--big.Vlt-form__element--error:hover input[readonly].main,.Vlt-form__element--big.Vlt-form__element--error:hover .Vlt-composite__append button,.Vlt-form__element--big.Vlt-form__element--error:focus input[readonly].main,.Vlt-form__element--big.Vlt-form__element--error:focus .Vlt-composite__append button,.Vlt-form__element--big.Vlt-form__element--error.active input[readonly].main,.Vlt-form__element--big.Vlt-form__element--error.active .Vlt-composite__append button{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-form__element--big .Vlt-select input.main:hover,.Vlt-form__element--big .Vlt-select input.main:focus{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-form__element--big .Vlt-select:after{background-image:var(--vgip-meta-dropdown-icon);margin-right:2px}.Vlt-form__element--big .Vlt-form__element__hint{color:var(--vgip-meta-input-hint-color)}.Vlt-composite.has-append-button input[readonly].main{border-top-right-radius:0;border-bottom-right-radius:0;border-right:0}.Vlt-composite.has-append-button .Vlt-select:after{margin-right:-10px}.Vlt-composite__append{z-index:initial}.Vlt-composite__append button{height:48px;background:var(--vgip-meta-input-bg-color);border-color:var(--vgip-meta-input-border-color);padding-right:16px;padding-left:16px;border-left:0}.Vlt-composite__append button:hover{background:var(--vgip-meta-input-action-hover-bg-color)}.Vlt-composite__append button svg{margin:-2px 0 0;fill:var(--vgip-meta-input-accent-color)}.Vlt-dropdown__panel{width:100%}.Vlt-dropdown__panel .Vlt-dropdown__link{padding:0 20px 0 0}.Vlt-dropdown__panel .Vlt-dropdown__link.Vlt-dropdown__link--selected{background:rgba(44,45,48,.05)}.Vlt-dropdown__panel label{margin-top:0;padding:12px 20px;top:0;left:0;pointer-events:initial;position:initial;color:initial;font-size:inherit;transition:none;cursor:pointer}.Vlt-dropdown__panel label input{height:0}input.main{cursor:pointer;padding-right:76px}.Vlt-input.has-append-button .Vlt-composite__append.right-actions{right:42px}.Vlt-composite__append.right-actions{position:absolute;top:5px;right:53px;cursor:pointer}.Vlt-composite__append.right-actions .Vlt-composite__append--icon{width:36px;outline:none;position:initial;display:inline-block}.Vlt-composite__append.right-actions .Vlt-composite__append--icon svg{height:14px;width:14px}.Vlt-composite__append.right-actions .Vlt-composite__append--icon:hover svg,.Vlt-composite__append.right-actions .Vlt-composite__append--icon:focus svg{fill:var(--vgip-meta-input-accent-color)}\n"], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i4.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "metaModel": i5.MetaModelPipe }, viewProviders: [{ provide: ControlContainer, useExisting: NgForm }] });
|
|
615
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.
|
|
613
|
+
FieldSelect.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.2", ngImport: i0, type: FieldSelect, deps: [{ token: i0.ComponentFactoryResolver }, { token: i2.MetaReferenceService }, { token: i3.MetaResourceService }], target: i0.ɵɵFactoryTarget.Component });
|
|
614
|
+
FieldSelect.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.2", type: FieldSelect, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<div class='vgip-meta-field-preview' *ngIf='preview && model'>\n <div class='vgip-meta-field-label'>{{meta.label || meta.name}}</div>\n <div class='vgip-meta-field-value __gu'>\n {{model.label || model.id || model}}\n </div>\n</div>\n<div *ngIf='!preview' class=\"Vlt-form__element\" [ngClass]=\"{ 'Vlt-form__element--big': !meta.small ,'has-value': f.value, active: keyListenerActive, 'Vlt-form__element--error': f.invalid && ((f | metaModel)._parent.submitted || (ft | metaModel ).touched), 'no-x': meta.noX }\">\n\t<div class=\"Vlt-composite Vlt-dropdown Vlt-input\" style='display: block;' [ngClass]=\"{ 'has-append-button': isCreatable && !disabled }\">\n\t\t<div class=\"Vlt-select\">\n\t\t\t<label class='wrapper'>\n\t\t\t\t<label class='Vlt-truncate'>{{meta.label || meta.name}}<span *ngIf='validations.required && options.length' class='Vlt-red'>*</span></label>\n\t\t\t\t<input class='main' [required]='validations.required && !!options.length' readonly [ngModel]='showText' #ft='ngModel' [ngModelOptions]=\"{standalone: true}\" type=\"text\" [placeholder]=\"meta.placeholder || ' '\" (click)='onActivated($event)' (focus)='onActivated($event)' (blur)='onBlur($event)' [ngClass]=\"{ 'standalone': meta.standalone }\" [disabled]='disabled || !options.length' [attr.aria-label]='meta.label'/>\n\t\t\t</label>\n\t\t\t<select class='model' [required]='validations.required && !!options.length' style='display: none;' [(ngModel)]='model' [ngModelOptions]=\"{standalone: meta.standalone}\" (ngModelChange)=\"onModelChange($event)\" #f='ngModel' [name]='name'></select>\n\t\t\t<div *ngIf='searching' class='search-progress'>\n <div class=\"container\">\n <div class=\"bar Vlt-bg-purple\"></div>\n </div>\n\t\t\t</div>\n\t\t\t<div class='Vlt-composite__append right-actions'>\n <div *ngIf='model && !meta.noX && !disabled' class=\"Vlt-composite__append--icon\" (click)='clear($event)'>\n <div class=\"Vlt-composite__icon\">\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-cross\"/></svg>\n </div>\n </div>\n </div>\n\t\t</div>\n\t\t<div class='Vlt-dropdown__panel'>\n\t\t\t<div class=\"Vlt-dropdown__panel__content Vlt-dropdown__panel__content--scroll-area\">\n\t\t\t\t<!-- <div class=\"Vlt-dropdown__title\" style='padding-left: 15px;'>\n\t\t\t\t\tSelect ({{options.length}})\n\t\t\t\t\t<div class=\"Vlt-dropdown__close Vlt-white\" (click)='dismissDropdown($event)'>\n\t\t\t\t\t\t<svg class='Vlt-icon Vlt-icon--small'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-cross\"/></svg>\n\t\t\t\t\t</div>\n\t\t\t\t</div> -->\n\t\t\t\t<div class=\"Vlt-dropdown__block\"></div>\n\t\t\t\t<div *ngIf='dropdown' class='Vlt-dropdown__scroll'>\n\t\t\t\t\t<div [ngClass]=\"{ 'Vlt-dropdown__link--selected': activeSuggestionIndex === i }\" (click)='onOptionSelect($event, option)' *ngFor='let option of options; let i = index' class=\"Vlt-dropdown__link\">\n\t\t\t\t\t\t<div *ngIf='multiple' class=\"Vlt-checkbox\" style='width: 100%;'>\n\t\t\t\t\t\t\t<label>\n\t\t\t\t\t\t\t\t<span class=\"Vlt-checkbox__button\">\n\t\t\t\t\t\t\t\t\t<input type=\"checkbox\" [checked]='model && model.indexOf(option) !== -1'/>\n\t\t\t\t\t\t\t\t\t<span class=\"Vlt-checkbox__icon\"></span>\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t{{option.label || (option.id === '' ? '--empty--' : option)}}\n\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div *ngIf='!multiple' style='padding: 12px 20px;'>{{option.label || (option.id === '' ? '--empty--' : option)}}</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div *ngIf='!multiple' class=\"Vlt-dropdown__block\"></div>\n\t\t\t\t<div *ngIf='multiple' class=\"Vlt-dropdown__block Vlt-dropdown__block--nowrap\" style='padding: 8px 16px 16px;'>\n <button (click)='clear($event)' type='button' class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--app Vlt-btn--small Vlt-btn--outline\" style='margin-right: 8px;'>Clear all</button>\n <button (click)='dismissDropdown($event)' type='button' class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--app Vlt-btn--small\">Done</button>\n </div>\n\t\t\t</div>\n\t\t</div>\n\t\t<!-- <span *ngIf='isCreatable'>\n <button type='button' (click)='openResource($event)' class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--icon Vlt-btn--large\" style='margin-left: 12px;'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\"/></svg>\n </button>\n\t\t</span> -->\n\t\t<div *ngIf='isCreatable && !disabled' class=\"Vlt-composite__append\">\n <button (focus)='onActivated($event)' (blur)='onBlur($event)' type='button' (click)='openResource($event)' class=\"Vlt-btn Vlt-btn--white Vlt-btn--icon add-button\" aria-label='Add new'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\"/></svg>\n </button>\n </div>\n\t</div>\n\t<small *ngIf='f.invalid && ((f | metaModel)._parent.submitted || ((ft | metaModel).touched && keyListenerActive))' class=\"Vlt-form__element__error\">\n\t\t<span *ngIf=\"f.errors.required\">Required. </span>\n\t</small>\n\t<small *ngIf='meta.hint' class=\"Vlt-form__element__hint\">{{meta.hint}}</small>\n</div>", styles: [".Vlt-form__element.no-x input.main{padding-right:40px}.Vlt-form__element--big:not(.has-value)>.Vlt-input>.Vlt-select>label>label{font-size:1.6rem;margin-top:-.8rem;top:50%}.Vlt-form__element--big input[readonly].main:not([disabled]){background:var(--vgip-meta-input-bg-color);border:1px solid var(--vgip-meta-input-border-color)}.Vlt-form__element--big:hover input[readonly].main,.Vlt-form__element--big:hover .Vlt-composite__append button,.Vlt-form__element--big:focus input[readonly].main,.Vlt-form__element--big:focus .Vlt-composite__append button,.Vlt-form__element--big.active input[readonly].main,.Vlt-form__element--big.active .Vlt-composite__append button{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-form__element--big.Vlt-form__element--error input[readonly].main,.Vlt-form__element--big.Vlt-form__element--error .Vlt-composite__append button{border-color:#f25a6b;box-shadow:none}.Vlt-form__element--big.Vlt-form__element--error:hover input[readonly].main,.Vlt-form__element--big.Vlt-form__element--error:hover .Vlt-composite__append button,.Vlt-form__element--big.Vlt-form__element--error:focus input[readonly].main,.Vlt-form__element--big.Vlt-form__element--error:focus .Vlt-composite__append button,.Vlt-form__element--big.Vlt-form__element--error.active input[readonly].main,.Vlt-form__element--big.Vlt-form__element--error.active .Vlt-composite__append button{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-form__element--big .Vlt-select input.main:hover,.Vlt-form__element--big .Vlt-select input.main:focus{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-form__element--big .Vlt-select:after{background-image:var(--vgip-meta-dropdown-icon);margin-right:2px}.Vlt-form__element--big .Vlt-form__element__hint{color:var(--vgip-meta-input-hint-color)}.Vlt-composite.has-append-button input[readonly].main{border-top-right-radius:0;border-bottom-right-radius:0;border-right:0}.Vlt-composite.has-append-button .Vlt-select:after{margin-right:-10px}.Vlt-composite__append{z-index:initial}.Vlt-composite__append button{height:48px;background:var(--vgip-meta-input-bg-color);border-color:var(--vgip-meta-input-border-color);padding-right:16px;padding-left:16px;border-left:0}.Vlt-composite__append button:hover{background:var(--vgip-meta-input-action-hover-bg-color)}.Vlt-composite__append button svg{margin:-2px 0 0;fill:var(--vgip-meta-input-accent-color)}.Vlt-dropdown__panel{width:100%}.Vlt-dropdown__panel .Vlt-dropdown__link{padding:0 20px 0 0}.Vlt-dropdown__panel .Vlt-dropdown__link.Vlt-dropdown__link--selected{background:rgba(44,45,48,.05)}.Vlt-dropdown__panel label{margin-top:0;padding:12px 20px;top:0;left:0;pointer-events:initial;position:initial;color:initial;font-size:inherit;transition:none;cursor:pointer}.Vlt-dropdown__panel label input{height:0}input.main{cursor:pointer;padding-right:76px}.Vlt-input.has-append-button .Vlt-composite__append.right-actions{right:42px}.Vlt-composite__append.right-actions{position:absolute;top:5px;right:53px;cursor:pointer}.Vlt-composite__append.right-actions .Vlt-composite__append--icon{width:36px;outline:none;position:initial;display:inline-block}.Vlt-composite__append.right-actions .Vlt-composite__append--icon svg{height:14px;width:14px}.Vlt-composite__append.right-actions .Vlt-composite__append--icon:hover svg,.Vlt-composite__append.right-actions .Vlt-composite__append--icon:focus svg{fill:var(--vgip-meta-input-accent-color)}\n"], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i4.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "metaModel": i5.MetaModelPipe }, viewProviders: [{ provide: ControlContainer, useExisting: NgForm }] });
|
|
615
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.2", ngImport: i0, type: FieldSelect, decorators: [{
|
|
616
616
|
type: Component,
|
|
617
|
-
args: [{ viewProviders: [{ provide: ControlContainer, useExisting: NgForm }],
|
|
618
|
-
MetaRefDialog
|
|
619
|
-
], template: "<div class='vgip-meta-field-preview' *ngIf='preview && model'>\n <div class='vgip-meta-field-label'>{{meta.label || meta.name}}</div>\n <div class='vgip-meta-field-value __gu'>\n {{model.label || model.id || model}}\n </div>\n</div>\n<div *ngIf='!preview' class=\"Vlt-form__element\" [ngClass]=\"{ 'Vlt-form__element--big': !meta.small ,'has-value': f.value, active: keyListenerActive, 'Vlt-form__element--error': f.invalid && ((f | metaModel)._parent.submitted || (ft | metaModel ).touched), 'no-x': meta.noX }\">\n\t<div class=\"Vlt-composite Vlt-dropdown Vlt-input\" style='display: block;' [ngClass]=\"{ 'has-append-button': isCreatable && !disabled }\">\n\t\t<div class=\"Vlt-select\">\n\t\t\t<label class='wrapper'>\n\t\t\t\t<label class='Vlt-truncate'>{{meta.label || meta.name}}<span *ngIf='validations.required && options.length' class='Vlt-red'>*</span></label>\n\t\t\t\t<input class='main' [required]='validations.required && !!options.length' readonly [ngModel]='showText' #ft='ngModel' [ngModelOptions]=\"{standalone: true}\" type=\"text\" [placeholder]=\"meta.placeholder || ' '\" (click)='onActivated($event)' (focus)='onActivated($event)' (blur)='onBlur($event)' [ngClass]=\"{ 'standalone': meta.standalone }\" [disabled]='disabled || !options.length' [attr.aria-label]='meta.label'/>\n\t\t\t</label>\n\t\t\t<select class='model' [required]='validations.required && !!options.length' style='display: none;' [(ngModel)]='model' [ngModelOptions]=\"{standalone: meta.standalone}\" (ngModelChange)=\"onModelChange($event)\" #f='ngModel' [name]='name'></select>\n\t\t\t<div *ngIf='searching' class='search-progress'>\n <div class=\"container\">\n <div class=\"bar Vlt-bg-purple\"></div>\n </div>\n\t\t\t</div>\n\t\t\t<div class='Vlt-composite__append right-actions'>\n <div *ngIf='model && !meta.noX && !disabled' class=\"Vlt-composite__append--icon\" (click)='clear($event)'>\n <div class=\"Vlt-composite__icon\">\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-cross\"/></svg>\n </div>\n </div>\n </div>\n\t\t</div>\n\t\t<div class='Vlt-dropdown__panel'>\n\t\t\t<div class=\"Vlt-dropdown__panel__content Vlt-dropdown__panel__content--scroll-area\">\n\t\t\t\t<!-- <div class=\"Vlt-dropdown__title\" style='padding-left: 15px;'>\n\t\t\t\t\tSelect ({{options.length}})\n\t\t\t\t\t<div class=\"Vlt-dropdown__close Vlt-white\" (click)='dismissDropdown($event)'>\n\t\t\t\t\t\t<svg class='Vlt-icon Vlt-icon--small'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-cross\"/></svg>\n\t\t\t\t\t</div>\n\t\t\t\t</div> -->\n\t\t\t\t<div class=\"Vlt-dropdown__block\"></div>\n\t\t\t\t<div *ngIf='dropdown' class='Vlt-dropdown__scroll'>\n\t\t\t\t\t<div [ngClass]=\"{ 'Vlt-dropdown__link--selected': activeSuggestionIndex === i }\" (click)='onOptionSelect($event, option)' *ngFor='let option of options; let i = index' class=\"Vlt-dropdown__link\">\n\t\t\t\t\t\t<div *ngIf='multiple' class=\"Vlt-checkbox\" style='width: 100%;'>\n\t\t\t\t\t\t\t<label>\n\t\t\t\t\t\t\t\t<span class=\"Vlt-checkbox__button\">\n\t\t\t\t\t\t\t\t\t<input type=\"checkbox\" [checked]='model && model.indexOf(option) != -1'/>\n\t\t\t\t\t\t\t\t\t<span class=\"Vlt-checkbox__icon\"></span>\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t{{option.label || (option.id === '' ? '--empty--' : option)}}\n\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div *ngIf='!multiple' style='padding: 12px 20px;'>{{option.label || (option.id === '' ? '--empty--' : option)}}</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div *ngIf='!multiple' class=\"Vlt-dropdown__block\"></div>\n\t\t\t\t<div *ngIf='multiple' class=\"Vlt-dropdown__block Vlt-dropdown__block--nowrap\" style='padding: 8px 16px 16px;'>\n <button (click)='clear($event)' type='button' class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--app Vlt-btn--small Vlt-btn--outline\" style='margin-right: 8px;'>Clear all</button>\n <button (click)='dismissDropdown($event)' type='button' class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--app Vlt-btn--small\">Done</button>\n </div>\n\t\t\t</div>\n\t\t</div>\n\t\t<!-- <span *ngIf='isCreatable'>\n <button type='button' (click)='openResource($event)' class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--icon Vlt-btn--large\" style='margin-left: 12px;'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\"/></svg>\n </button>\n\t\t</span> -->\n\t\t<div *ngIf='isCreatable && !disabled' class=\"Vlt-composite__append\">\n <button (focus)='onActivated($event)' (blur)='onBlur($event)' type='button' (click)='openResource($event)' class=\"Vlt-btn Vlt-btn--white Vlt-btn--icon add-button\" aria-label='Add new'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\"/></svg>\n </button>\n </div>\n\t</div>\n\t<small *ngIf='f.invalid && ((f | metaModel)._parent.submitted || ((ft | metaModel).touched && keyListenerActive))' class=\"Vlt-form__element__error\">\n\t\t<span *ngIf=\"f.errors.required\">Required. </span>\n\t</small>\n\t<small *ngIf='meta.hint' class=\"Vlt-form__element__hint\">{{meta.hint}}</small>\n</div>", styles: [".Vlt-form__element.no-x input.main{padding-right:40px}.Vlt-form__element--big:not(.has-value)>.Vlt-input>.Vlt-select>label>label{font-size:1.6rem;margin-top:-.8rem;top:50%}.Vlt-form__element--big input[readonly].main:not([disabled]){background:var(--vgip-meta-input-bg-color);border:1px solid var(--vgip-meta-input-border-color)}.Vlt-form__element--big:hover input[readonly].main,.Vlt-form__element--big:hover .Vlt-composite__append button,.Vlt-form__element--big:focus input[readonly].main,.Vlt-form__element--big:focus .Vlt-composite__append button,.Vlt-form__element--big.active input[readonly].main,.Vlt-form__element--big.active .Vlt-composite__append button{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-form__element--big.Vlt-form__element--error input[readonly].main,.Vlt-form__element--big.Vlt-form__element--error .Vlt-composite__append button{border-color:#f25a6b;box-shadow:none}.Vlt-form__element--big.Vlt-form__element--error:hover input[readonly].main,.Vlt-form__element--big.Vlt-form__element--error:hover .Vlt-composite__append button,.Vlt-form__element--big.Vlt-form__element--error:focus input[readonly].main,.Vlt-form__element--big.Vlt-form__element--error:focus .Vlt-composite__append button,.Vlt-form__element--big.Vlt-form__element--error.active input[readonly].main,.Vlt-form__element--big.Vlt-form__element--error.active .Vlt-composite__append button{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-form__element--big .Vlt-select input.main:hover,.Vlt-form__element--big .Vlt-select input.main:focus{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-form__element--big .Vlt-select:after{background-image:var(--vgip-meta-dropdown-icon);margin-right:2px}.Vlt-form__element--big .Vlt-form__element__hint{color:var(--vgip-meta-input-hint-color)}.Vlt-composite.has-append-button input[readonly].main{border-top-right-radius:0;border-bottom-right-radius:0;border-right:0}.Vlt-composite.has-append-button .Vlt-select:after{margin-right:-10px}.Vlt-composite__append{z-index:initial}.Vlt-composite__append button{height:48px;background:var(--vgip-meta-input-bg-color);border-color:var(--vgip-meta-input-border-color);padding-right:16px;padding-left:16px;border-left:0}.Vlt-composite__append button:hover{background:var(--vgip-meta-input-action-hover-bg-color)}.Vlt-composite__append button svg{margin:-2px 0 0;fill:var(--vgip-meta-input-accent-color)}.Vlt-dropdown__panel{width:100%}.Vlt-dropdown__panel .Vlt-dropdown__link{padding:0 20px 0 0}.Vlt-dropdown__panel .Vlt-dropdown__link.Vlt-dropdown__link--selected{background:rgba(44,45,48,.05)}.Vlt-dropdown__panel label{margin-top:0;padding:12px 20px;top:0;left:0;pointer-events:initial;position:initial;color:initial;font-size:inherit;transition:none;cursor:pointer}.Vlt-dropdown__panel label input{height:0}input.main{cursor:pointer;padding-right:76px}.Vlt-input.has-append-button .Vlt-composite__append.right-actions{right:42px}.Vlt-composite__append.right-actions{position:absolute;top:5px;right:53px;cursor:pointer}.Vlt-composite__append.right-actions .Vlt-composite__append--icon{width:36px;outline:none;position:initial;display:inline-block}.Vlt-composite__append.right-actions .Vlt-composite__append--icon svg{height:14px;width:14px}.Vlt-composite__append.right-actions .Vlt-composite__append--icon:hover svg,.Vlt-composite__append.right-actions .Vlt-composite__append--icon:focus svg{fill:var(--vgip-meta-input-accent-color)}\n"] }]
|
|
617
|
+
args: [{ viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], template: "<div class='vgip-meta-field-preview' *ngIf='preview && model'>\n <div class='vgip-meta-field-label'>{{meta.label || meta.name}}</div>\n <div class='vgip-meta-field-value __gu'>\n {{model.label || model.id || model}}\n </div>\n</div>\n<div *ngIf='!preview' class=\"Vlt-form__element\" [ngClass]=\"{ 'Vlt-form__element--big': !meta.small ,'has-value': f.value, active: keyListenerActive, 'Vlt-form__element--error': f.invalid && ((f | metaModel)._parent.submitted || (ft | metaModel ).touched), 'no-x': meta.noX }\">\n\t<div class=\"Vlt-composite Vlt-dropdown Vlt-input\" style='display: block;' [ngClass]=\"{ 'has-append-button': isCreatable && !disabled }\">\n\t\t<div class=\"Vlt-select\">\n\t\t\t<label class='wrapper'>\n\t\t\t\t<label class='Vlt-truncate'>{{meta.label || meta.name}}<span *ngIf='validations.required && options.length' class='Vlt-red'>*</span></label>\n\t\t\t\t<input class='main' [required]='validations.required && !!options.length' readonly [ngModel]='showText' #ft='ngModel' [ngModelOptions]=\"{standalone: true}\" type=\"text\" [placeholder]=\"meta.placeholder || ' '\" (click)='onActivated($event)' (focus)='onActivated($event)' (blur)='onBlur($event)' [ngClass]=\"{ 'standalone': meta.standalone }\" [disabled]='disabled || !options.length' [attr.aria-label]='meta.label'/>\n\t\t\t</label>\n\t\t\t<select class='model' [required]='validations.required && !!options.length' style='display: none;' [(ngModel)]='model' [ngModelOptions]=\"{standalone: meta.standalone}\" (ngModelChange)=\"onModelChange($event)\" #f='ngModel' [name]='name'></select>\n\t\t\t<div *ngIf='searching' class='search-progress'>\n <div class=\"container\">\n <div class=\"bar Vlt-bg-purple\"></div>\n </div>\n\t\t\t</div>\n\t\t\t<div class='Vlt-composite__append right-actions'>\n <div *ngIf='model && !meta.noX && !disabled' class=\"Vlt-composite__append--icon\" (click)='clear($event)'>\n <div class=\"Vlt-composite__icon\">\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-cross\"/></svg>\n </div>\n </div>\n </div>\n\t\t</div>\n\t\t<div class='Vlt-dropdown__panel'>\n\t\t\t<div class=\"Vlt-dropdown__panel__content Vlt-dropdown__panel__content--scroll-area\">\n\t\t\t\t<!-- <div class=\"Vlt-dropdown__title\" style='padding-left: 15px;'>\n\t\t\t\t\tSelect ({{options.length}})\n\t\t\t\t\t<div class=\"Vlt-dropdown__close Vlt-white\" (click)='dismissDropdown($event)'>\n\t\t\t\t\t\t<svg class='Vlt-icon Vlt-icon--small'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-cross\"/></svg>\n\t\t\t\t\t</div>\n\t\t\t\t</div> -->\n\t\t\t\t<div class=\"Vlt-dropdown__block\"></div>\n\t\t\t\t<div *ngIf='dropdown' class='Vlt-dropdown__scroll'>\n\t\t\t\t\t<div [ngClass]=\"{ 'Vlt-dropdown__link--selected': activeSuggestionIndex === i }\" (click)='onOptionSelect($event, option)' *ngFor='let option of options; let i = index' class=\"Vlt-dropdown__link\">\n\t\t\t\t\t\t<div *ngIf='multiple' class=\"Vlt-checkbox\" style='width: 100%;'>\n\t\t\t\t\t\t\t<label>\n\t\t\t\t\t\t\t\t<span class=\"Vlt-checkbox__button\">\n\t\t\t\t\t\t\t\t\t<input type=\"checkbox\" [checked]='model && model.indexOf(option) !== -1'/>\n\t\t\t\t\t\t\t\t\t<span class=\"Vlt-checkbox__icon\"></span>\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t{{option.label || (option.id === '' ? '--empty--' : option)}}\n\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div *ngIf='!multiple' style='padding: 12px 20px;'>{{option.label || (option.id === '' ? '--empty--' : option)}}</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div *ngIf='!multiple' class=\"Vlt-dropdown__block\"></div>\n\t\t\t\t<div *ngIf='multiple' class=\"Vlt-dropdown__block Vlt-dropdown__block--nowrap\" style='padding: 8px 16px 16px;'>\n <button (click)='clear($event)' type='button' class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--app Vlt-btn--small Vlt-btn--outline\" style='margin-right: 8px;'>Clear all</button>\n <button (click)='dismissDropdown($event)' type='button' class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--app Vlt-btn--small\">Done</button>\n </div>\n\t\t\t</div>\n\t\t</div>\n\t\t<!-- <span *ngIf='isCreatable'>\n <button type='button' (click)='openResource($event)' class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--icon Vlt-btn--large\" style='margin-left: 12px;'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\"/></svg>\n </button>\n\t\t</span> -->\n\t\t<div *ngIf='isCreatable && !disabled' class=\"Vlt-composite__append\">\n <button (focus)='onActivated($event)' (blur)='onBlur($event)' type='button' (click)='openResource($event)' class=\"Vlt-btn Vlt-btn--white Vlt-btn--icon add-button\" aria-label='Add new'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\"/></svg>\n </button>\n </div>\n\t</div>\n\t<small *ngIf='f.invalid && ((f | metaModel)._parent.submitted || ((ft | metaModel).touched && keyListenerActive))' class=\"Vlt-form__element__error\">\n\t\t<span *ngIf=\"f.errors.required\">Required. </span>\n\t</small>\n\t<small *ngIf='meta.hint' class=\"Vlt-form__element__hint\">{{meta.hint}}</small>\n</div>", styles: [".Vlt-form__element.no-x input.main{padding-right:40px}.Vlt-form__element--big:not(.has-value)>.Vlt-input>.Vlt-select>label>label{font-size:1.6rem;margin-top:-.8rem;top:50%}.Vlt-form__element--big input[readonly].main:not([disabled]){background:var(--vgip-meta-input-bg-color);border:1px solid var(--vgip-meta-input-border-color)}.Vlt-form__element--big:hover input[readonly].main,.Vlt-form__element--big:hover .Vlt-composite__append button,.Vlt-form__element--big:focus input[readonly].main,.Vlt-form__element--big:focus .Vlt-composite__append button,.Vlt-form__element--big.active input[readonly].main,.Vlt-form__element--big.active .Vlt-composite__append button{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-form__element--big.Vlt-form__element--error input[readonly].main,.Vlt-form__element--big.Vlt-form__element--error .Vlt-composite__append button{border-color:#f25a6b;box-shadow:none}.Vlt-form__element--big.Vlt-form__element--error:hover input[readonly].main,.Vlt-form__element--big.Vlt-form__element--error:hover .Vlt-composite__append button,.Vlt-form__element--big.Vlt-form__element--error:focus input[readonly].main,.Vlt-form__element--big.Vlt-form__element--error:focus .Vlt-composite__append button,.Vlt-form__element--big.Vlt-form__element--error.active input[readonly].main,.Vlt-form__element--big.Vlt-form__element--error.active .Vlt-composite__append button{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-form__element--big .Vlt-select input.main:hover,.Vlt-form__element--big .Vlt-select input.main:focus{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-form__element--big .Vlt-select:after{background-image:var(--vgip-meta-dropdown-icon);margin-right:2px}.Vlt-form__element--big .Vlt-form__element__hint{color:var(--vgip-meta-input-hint-color)}.Vlt-composite.has-append-button input[readonly].main{border-top-right-radius:0;border-bottom-right-radius:0;border-right:0}.Vlt-composite.has-append-button .Vlt-select:after{margin-right:-10px}.Vlt-composite__append{z-index:initial}.Vlt-composite__append button{height:48px;background:var(--vgip-meta-input-bg-color);border-color:var(--vgip-meta-input-border-color);padding-right:16px;padding-left:16px;border-left:0}.Vlt-composite__append button:hover{background:var(--vgip-meta-input-action-hover-bg-color)}.Vlt-composite__append button svg{margin:-2px 0 0;fill:var(--vgip-meta-input-accent-color)}.Vlt-dropdown__panel{width:100%}.Vlt-dropdown__panel .Vlt-dropdown__link{padding:0 20px 0 0}.Vlt-dropdown__panel .Vlt-dropdown__link.Vlt-dropdown__link--selected{background:rgba(44,45,48,.05)}.Vlt-dropdown__panel label{margin-top:0;padding:12px 20px;top:0;left:0;pointer-events:initial;position:initial;color:initial;font-size:inherit;transition:none;cursor:pointer}.Vlt-dropdown__panel label input{height:0}input.main{cursor:pointer;padding-right:76px}.Vlt-input.has-append-button .Vlt-composite__append.right-actions{right:42px}.Vlt-composite__append.right-actions{position:absolute;top:5px;right:53px;cursor:pointer}.Vlt-composite__append.right-actions .Vlt-composite__append--icon{width:36px;outline:none;position:initial;display:inline-block}.Vlt-composite__append.right-actions .Vlt-composite__append--icon svg{height:14px;width:14px}.Vlt-composite__append.right-actions .Vlt-composite__append--icon:hover svg,.Vlt-composite__append.right-actions .Vlt-composite__append--icon:focus svg{fill:var(--vgip-meta-input-accent-color)}\n"] }]
|
|
620
618
|
}], ctorParameters: function () { return [{ type: i0.ComponentFactoryResolver }, { type: i2.MetaReferenceService }, { type: i3.MetaResourceService }]; } });
|
|
621
619
|
//// FIELD REFERENCE
|
|
622
620
|
export class FieldReference extends FieldAbstract {
|
|
@@ -1402,13 +1400,11 @@ export class FieldReference extends FieldAbstract {
|
|
|
1402
1400
|
return this.meta.reference || {};
|
|
1403
1401
|
}
|
|
1404
1402
|
}
|
|
1405
|
-
FieldReference.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.
|
|
1406
|
-
FieldReference.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: FieldReference, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<div class='vgip-meta-field-preview' *ngIf='preview && model && (!multiple || (multiple && model.length))'>\n <div class='vgip-meta-field-label'>{{meta.label || meta.name}}</div>\n <div *ngIf='!multiple' class='vgip-meta-field-value __gu'>\n <svg class=\"Vlt-icon Vlt-icon--smaller\" style='margin-top: -3px;'><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\"/></svg>\n {{model.label || model.id}} <span class='Vlt-grey'>({{model.type}})</span>\n </div>\n <div *ngIf='multiple' class='vgip-meta-field-value __gu'>\n <span *ngFor='let m of (model || [])' class='Vlt-badge Vlt-badge--app'>\n {{m.label || m.id || m}} <span class='Vlt-grey-dark' *ngIf='isPolymorphic'>({{m.type}})</span>\n </span>\n </div>\n</div>\n<div *ngIf='!preview' class=\"meta-field-reference Vlt-form__element Vlt-form__element--big\" [ngClass]=\"{ 'Vlt-form__element--error': (searchError && keyListenerActive) || (f.invalid && ((f | metaModel)._parent.submitted || (ft | metaModel ).touched)), 'multiple': multiple, 'has-value': model, active: keyListenerActive }\">\n <div *ngIf='multiple' class='items-container' [ngClass]='{ creatable: isCreatable }'>\n <div *ngIf='model' class='badges-container keep-focus' (click)='focus()' style='width: 100%;'>\n <div *ngFor='let item of model' class=\"Vlt-badge Vlt-badge--app Vlt-badge--large keep-focus\" [ngClass]=\"{ grid: (item.label || item.id || '').length > 56}\">\n <span class='Vlt-truncate'>{{item.label || item.id || item }} <span *ngIf='isPolymorphic' class='Vlt-grey-dark' style='font-weight: normal;'>({{item.type}})</span></span>\n <button class=\"Vlt-badge__dismiss keep-focus\" (click)='remove($event, item)' style='position: absolute; right: 12px; top: 8px;' aria-label='Remove'></button>\n </div>\n </div>\n </div>\n <div class=\"Vlt-composite\">\n <div class='dropdown-wrapper Vlt-dropdown' style='width: 100%; position: absolute; top: 48px;'>\n <div class=\"Vlt-dropdown__panel\">\n <div *ngIf='searchError'>\n <div class=\"Vlt-callout Vlt-callout--critical keep-focus\">\n <i></i>\n <div class=\"Vlt-callout__content\">{{searchError}}</div>\n </div>\n </div>\n <div *ngIf='!searchError && (suggestions.length || searchResults)' [ngClass]=\"{ suggestions: !searchResults}\" class=\"Vlt-dropdown__panel__content Vlt-dropdown__panel__content--scroll-area\" style='padding: 0;'>\n <div class=\"Vlt-dropdown__block\"></div>\n <div *ngIf='!searchResults' class=\"Vlt-dropdown__scroll\">\n <div [ngClass]=\"{ 'Vlt-dropdown__link--selected': activeSuggestionIndex === i, smart: suggestion.smart }\" (click)='onSuggestionSelect($event, suggestion)' *ngFor='let suggestion of suggestions; let i = index' class=\"Vlt-dropdown__link has-type\">\n <svg class='Vlt-icon Vlt-icon--small'><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\"/></svg>\n <div class='__gu' [title]='suggestion.label'>{{ suggestion.label }}</div>\n <small class='Vlt-grey-dark' style='text-transform: capitalize;'>{{suggestion.type}}</small>\n </div>\n </div>\n <div *ngIf='searchResults' class=\"Vlt-dropdown__scroll\">\n <div *ngIf='!searchResults.length' class='Vlt-dropdown__block'> No records matching '<b style='pointer-events: none;'>{{searchText}}</b>' were found.</div>\n <div [ngClass]=\"{ 'Vlt-dropdown__link--selected': activeSuggestionIndex === i }\" (click)='onSuggestionSelect($event, suggestion)' *ngFor='let suggestion of searchResults; let i = index' class=\"Vlt-dropdown__link has-type\">\n <svg class='Vlt-icon Vlt-icon--small'><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\"/></svg>\n <div class='__gu' [title]='suggestion.label'>{{ suggestion.label }}</div>\n <small class='Vlt-grey-dark' style='text-transform: capitalize;'>{{suggestion.type}}</small>\n </div>\n </div>\n <!-- <div *ngIf='searchResults' class=\"Vlt-dropdown__block\" style='text-align: right; padding-top: 0;'>\n <small>\n {{ searchResults ? searchResults.length+' results' : 'Suggestions' }} <span style='font-style: italic; font-weight: normal;' *ngIf='searchResults'>~{{ model ? 'last search' : searchText}}</span>\n </small>\n </div> -->\n <div class=\"Vlt-dropdown__block\"></div>\n </div>\n </div>\n </div>\n <div class=\"Vlt-composite__prepend\" *ngIf='isPolymorphic && showTypes && (multiple || !model || (dropdownVisible && ((suggestions || searchResults || []).length || searchResourceType.resourceType)))'>\n <div class=\"search-scope\" [ngClass]=\"{ 'has-value': searchResourceType.resourceType }\">\n <vgip-meta-field class='shown' [meta]='searchResourceTypeMeta' [parent]='searchResourceType' (onChange)='onSearchResourceTypeChanged($event)' (onLeave)='onBlur($event)' [integrationCode]='integrationCode' theme='inherit'></vgip-meta-field>\n <svg class='Vlt-icon Vlt-grey Vlt-icon--smaller visible-mobile mobile-icon' style='position: absolute; top: 15px; left: 14px; pointer-events: none;'>\n <use xlink:href=\"volta/volta-icons.svg#Vlt-icon-menu\"/>\n </svg>\n <label class='mobile-label hidden-mobile hidden-desktop'>Search</label>\n </div>\n </div>\n <div *ngIf='!(isPolymorphic && showTypes && (multiple || !model || dropdownVisible))'><!-- required by css --></div>\n <div class=\"Vlt-composite__wrapper Vlt-input\" style='overflow: hidden;' [ngClass]=\"{ 'has-append-button': hasAppendButton && !disabled }\">\n <label class='wrapper'>\n <div class=\"Vlt-composite__prepend Vlt-composite__prepend--icon\" style='top: 0; padding-top: 15px;'>\n <div class=\"Vlt-composite__icon\">\n <svg *ngIf='isSearchable && (!model || multiple)' class='Vlt-grey'><use attr.xlink:href=\"volta/volta-icons.svg#Vlt-icon-{{ multiple ? 'stack' : 'search'}}\"/></svg>\n <svg *ngIf='!isSearchable || (model && !multiple)' [ngStyle]=\"{fill: integrationIcon === 'Brand-icon-vonage' ? 'var(--vgip-meta-input-color)' : ''}\"><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\"/></svg>\n </div>\n <div *ngIf='suggestions.length' class=\"Vlt-badge Vlt-badge--small Vlt-badge--purple\" style='padding: 0px 4px; position: absolute; top: 26px; left: 4px; pointer-events: none; min-width: 14px;'>{{suggestions.length}}</div>\n </div>\n <input class='model' type='hidden' [required]='validations.required' [(ngModel)]='model' #f='ngModel' [name]='name' />\n <input class='main' [readonly]='!isSearchable || (model && !multiple)' [ngModel]='searchText' #ft='ngModel' (ngModelChange)='onSearchTextChanged($event)' [ngModelOptions]=\"{standalone: true}\" type=\"text\" placeholder=\"{{ placeHolderLabel || ' ' }}\" [ngClass]='{ ext: externalLink }' (click)='onActivated($event)' (focus)='onActivated($event)' (blur)='onBlur($event)' [disabled]='disabled' [title]=\"model ? model.label : ''\"/>\n <label class='Vlt-truncate hidden-mobile' style='padding-left: 25px; padding-right: 42px;'>{{ (multiple && isPolymorphic) ? '+Add ' : ((model || !isPolymorphic) ? meta.label : ( meta.searchLabel || 'Search')) }}<span *ngIf='validations.required' class='Vlt-red'>*</span> <span style='color: var(--vgip-meta-input-color); text-transform: capitalize;' *ngIf='model'>({{model.type || model.resourceType || model.length}})</span></label>\n <label class='Vlt-truncate hidden-desktop' style='padding-left: 25px; padding-right: 42px;'>{{meta.label || meta.name}}<span *ngIf='validations.required' class='Vlt-red'>*</span> <span style='color: var(--vgip-meta-input-color); text-transform: capitalize;' *ngIf='model'>({{model.type || model.resourceType || model.length}})</span></label>\n </label>\n <div *ngIf='searching' class='search-progress'>\n <div class=\"container\">\n <div class=\"bar Vlt-bg-purple\"></div>\n </div>\n </div>\n <div class='Vlt-composite__append right-actions'>\n <!-- <div *ngIf='prevModel && !model' class=\"Vlt-composite__append--icon\" (click)='revert()'>\n <div class=\"Vlt-composite__icon\">\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-reply\"/></svg>\n </div>\n </div> -->\n <div *ngIf='model && !multiple' class=\"Vlt-composite__append--icon\" (click)='removeSelection()'>\n <div class=\"Vlt-composite__icon\">\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-cross\"/></svg>\n </div>\n </div>\n <a [href]='externalLink || model.externalLink' target='_blank' rel='noopener' *ngIf='externalLink && (model && !multiple)' class=\"Vlt-composite__append--icon\" aria-label='Open external'>\n <div class=\"Vlt-composite__icon\">\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-open\"/></svg>\n </div>\n </a>\n </div>\n </div>\n <!-- <span *ngIf='hasCreatables'>\n <button type='button' *ngIf='!model || multiple' (click)='openResource()' class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--icon Vlt-btn--large\" style='margin-left: 12px;'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\"/></svg>\n </button>\n <button type='button' *ngIf='model && !multiple' (click)='openResource(model)' class=\"Vlt-btn Vlt-btn--primary Vlt-btn--icon Vlt-btn--large\" style='margin-left: 12px;'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-edit\"/></svg>\n </button>\n </span> -->\n <div *ngIf='hasAppendButton && !disabled' class=\"Vlt-composite__append\">\n <button (focus)='onActivated($event)' (blur)='onBlur($event)' type='button' *ngIf='!model || multiple' (click)='openResource()' class=\"Vlt-btn Vlt-btn--white Vlt-btn--icon\" aria-label='Add new'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\"/></svg>\n </button>\n <button (focus)='onActivated($event)' (blur)='onBlur($event)' type='button' *ngIf='model && !multiple' (click)='openResource(model)' class=\"Vlt-btn Vlt-btn--white Vlt-btn--icon\" aria-label='Edit'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-edit\"/></svg>\n </button>\n </div>\n </div>\n <small *ngIf='f.invalid && ((f | metaModel)._parent.submitted || ((ft | metaModel).touched && keyListenerActive))' class=\"Vlt-form__element__error\">\n <span *ngIf=\"f.errors.required\">Required</span>\n <span *ngIf=\"f.errors.pattern\">Should match '{{validations.pattern}}' pattern</span>\n </small>\n <small *ngIf='meta.helpText || meta.hint' class=\"Vlt-form__element__hint\">{{meta.helpText || meta.hint}}</small>\n</div>\n", styles: [".Vlt-form__element--big .Vlt-input input:placeholder-shown:not(:focus)~label.Vlt-truncate{font-size:1.6rem;margin-top:-.8rem;top:50%}.Vlt-form__element--big ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-right:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.Vlt-form__element--big:hover .items-container,.Vlt-form__element--big:hover .main,.Vlt-form__element--big:hover .Vlt-composite__append button,.Vlt-form__element--big:hover ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone,.Vlt-form__element--big.active .items-container,.Vlt-form__element--big.active .main,.Vlt-form__element--big.active .Vlt-composite__append button,.Vlt-form__element--big.active ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-form__element--big.Vlt-form__element--error .items-container,.Vlt-form__element--big.Vlt-form__element--error .main,.Vlt-form__element--big.Vlt-form__element--error .Vlt-composite__append button,.Vlt-form__element--big.Vlt-form__element--error ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-color:#f25a6b}.Vlt-form__element--big.multiple .Vlt-composite.Vlt-dropdown{margin-top:3px}.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) .items-container,.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) .main,.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) .Vlt-composite__append button,.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) .items-container,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) .main,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) .Vlt-composite__append button,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-form__element--big.multiple .items-container{background-color:var(--vgip-meta-input-bg-color);border:1px solid var(--vgip-meta-input-border-color);border-bottom:0;border-top-left-radius:6px;border-top-right-radius:6px}.Vlt-form__element--big.multiple .items-container .badges-container{overflow:auto;padding:6px 4px 3px 6px}.Vlt-form__element--big.multiple .items-container .badges-container .Vlt-badge{margin-bottom:3px;margin-left:0;margin-right:3px;overflow:hidden;max-width:100%;position:relative;padding-right:30px}.Vlt-form__element--big.multiple .items-container .badges-container .Vlt-badge.grid{display:grid}.Vlt-form__element--big.multiple:not(.has-value) .items-container{border:0}.Vlt-form__element--big.multiple.has-value .main,.Vlt-form__element--big.multiple.has-value .Vlt-composite__append button,.Vlt-form__element--big.multiple.has-value ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-top-left-radius:0;border-top-right-radius:0;height:48px}.Vlt-form__element--big.multiple.has-value .main:not(.Vlt-btn--icon),.Vlt-form__element--big.multiple.has-value .Vlt-composite__append button:not(.Vlt-btn--icon),.Vlt-form__element--big.multiple.has-value ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone:not(.Vlt-btn--icon){border-top:0}.Vlt-form__element--big.multiple.has-value .Vlt-composite__prepend ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-top-right-radius:6px}.Vlt-form__element--big.multiple.has-value .Vlt-composite__append button{border-top-left-radius:6px;border-top:0}.Vlt-composite__prepend{z-index:initial}.Vlt-composite__prepend--icon{top:0;padding-top:15px;left:3px}.Vlt-input.has-append-button .Vlt-composite__append.right-actions{right:0}.Vlt-input.has-append-button .Vlt-composite__append.right-actions .Vlt-composite__append--icon:last-child{width:36px}.Vlt-composite__append.right-actions{position:absolute;top:5px;right:5px;cursor:pointer}.Vlt-composite__append.right-actions .Vlt-composite__append--icon{outline:none;position:initial;display:inline-block}.Vlt-composite__append.right-actions .Vlt-composite__append--icon svg{height:14px;width:14px}.Vlt-composite__append.right-actions .Vlt-composite__append--icon:hover svg,.Vlt-composite__append.right-actions .Vlt-composite__append--icon:focus svg{fill:var(--vgip-meta-input-accent-color)}.Vlt-composite__append button{height:48px;padding-right:16px;background:var(--vgip-meta-input-bg-color);border-color:var(--vgip-meta-input-border-color);padding-left:16px;border-left:0}.Vlt-composite__append button:hover{background:var(--vgip-meta-input-action-hover-bg-color)}.Vlt-composite__append button svg{margin:-2px 0 0;fill:var(--vgip-meta-input-accent-color)}.Vlt-input input{padding-left:38px;text-overflow:ellipsis;padding-right:36px}.Vlt-input input.ext{padding-right:72px}.Vlt-composite__wrapper.has-append-button input.main{border-top-right-radius:0;border-bottom-right-radius:0;border-right:0}.Vlt-input input{background:var(--vgip-meta-input-bg-color);border-color:var(--vgip-meta-input-border-color);font-weight:bold}.Vlt-dropdown__panel{max-width:100%;width:100%;min-width:280px}.Vlt-dropdown__panel .Vlt-dropdown__link.smart{font-weight:bold;background:var(--vgip-meta-dropdown-bg-color)}.Vlt-dropdown__panel .Vlt-dropdown__link.smart.hidden{display:none}.Vlt-dropdown__panel .Vlt-dropdown__link.bold:after{background-color:#e1e2e6;content:\"\";height:1px;left:0;position:absolute;right:0;bottom:0}.Vlt-dropdown__panel .Vlt-dropdown__link--selected{background:rgba(44,45,48,.05)}.Vlt-dropdown__panel .Vlt-dropdown__link>div{flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.Vlt-dropdown__panel .Vlt-dropdown__link>svg{margin-right:8px}.vgip-meta-field-preview .Vlt-badge{margin:1px 3px 1px 0;overflow:hidden;max-width:100%}:host .search-scope{width:130px}:host .search-scope ::ng-deep .Vlt-form__element.has-value .Vlt-select:after{display:none}:host .search-scope ::ng-deep .Vlt-form__element .right-actions{right:12px}:host .search-scope ::ng-deep .Vlt-form__element label.Vlt-truncate{padding-right:48px}:host .search-scope .mobile-icon{display:none}@media only screen and (max-width: 575px){:host .search-scope{width:60px}:host .search-scope:not(.has-value) .mobile-icon{display:block}:host .search-scope.has-value .mobile-label{display:block}:host .search-scope ::ng-deep .Vlt-form__element.Vlt-form__element--big .Vlt-composite__append{display:none}:host .search-scope ::ng-deep .Vlt-form__element.Vlt-form__element--big .Vlt-select:after{margin-right:-7px}:host .search-scope ::ng-deep .Vlt-form__element.Vlt-form__element--big label.Vlt-truncate{visibility:hidden}}:host .search-scope ::ng-deep vgip-meta-field .Vlt-input input.main.standalone{padding-right:initial;background:var(--vgip-meta-input-accent-bg-color);border-color:var(--vgip-meta-input-border-color)}:host .search-scope ::ng-deep vgip-meta-field .Vlt-form__element{padding:0}:host .search-scope ::ng-deep vgip-meta-field .Vlt-form__element .Vlt-dropdown__panel{width:initial}\n"], components: [{ type: i0.forwardRef(function () { return MetaField; }), selector: "vgip-meta-field", inputs: ["meta", "parent", "integrationCode", "resourceType", "index", "preview", "theme"], outputs: ["onChange", "onLeave"] }], directives: [{ type: i0.forwardRef(function () { return i1.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i0.forwardRef(function () { return i1.NgForOf; }), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i0.forwardRef(function () { return i1.NgClass; }), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i0.forwardRef(function () { return i1.NgStyle; }), selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i0.forwardRef(function () { return i4.DefaultValueAccessor; }), selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i0.forwardRef(function () { return i4.RequiredValidator; }), selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i0.forwardRef(function () { return i4.NgControlStatus; }), selector: "[formControlName],[ngModel],[formControl]" }, { type: i0.forwardRef(function () { return i4.NgModel; }), selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "metaModel": i0.forwardRef(function () { return i5.MetaModelPipe; }) }, viewProviders: [{ provide: ControlContainer, useExisting: NgForm }] });
|
|
1407
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.
|
|
1403
|
+
FieldReference.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.2", ngImport: i0, type: FieldReference, deps: [{ token: i0.ComponentFactoryResolver }, { token: i2.MetaReferenceService }, { token: i3.MetaResourceService }, { token: i6.MetaMsgService }, { token: i7.MetaContextService }, { token: i8.MetaTrackerService }], target: i0.ɵɵFactoryTarget.Component });
|
|
1404
|
+
FieldReference.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.2", type: FieldReference, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<div class='vgip-meta-field-preview' *ngIf='preview && model && (!multiple || (multiple && model.length))'>\n <div class='vgip-meta-field-label'>{{meta.label || meta.name}}</div>\n <div *ngIf='!multiple' class='vgip-meta-field-value __gu'>\n <svg class=\"Vlt-icon Vlt-icon--smaller\" style='margin-top: -3px;'><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\"/></svg>\n {{model.label || model.id}} <span class='Vlt-grey'>({{model.type}})</span>\n </div>\n <div *ngIf='multiple' class='vgip-meta-field-value __gu'>\n <span *ngFor='let m of (model || [])' class='Vlt-badge Vlt-badge--app'>\n {{m.label || m.id || m}} <span class='Vlt-grey-dark' *ngIf='isPolymorphic'>({{m.type}})</span>\n </span>\n </div>\n</div>\n<div *ngIf='!preview' class=\"meta-field-reference Vlt-form__element Vlt-form__element--big\" [ngClass]=\"{ 'Vlt-form__element--error': (searchError && keyListenerActive) || (f.invalid && ((f | metaModel)._parent.submitted || (ft | metaModel ).touched)), 'multiple': multiple, 'has-value': model, active: keyListenerActive }\">\n <div *ngIf='multiple' class='items-container' [ngClass]='{ creatable: isCreatable }'>\n <div *ngIf='model' class='badges-container keep-focus' (click)='focus()' style='width: 100%;'>\n <div *ngFor='let item of model' class=\"Vlt-badge Vlt-badge--app Vlt-badge--large keep-focus\" [ngClass]=\"{ grid: (item.label || item.id || '').length > 56}\">\n <span class='Vlt-truncate'>{{item.label || item.id || item }} <span *ngIf='isPolymorphic' class='Vlt-grey-dark' style='font-weight: normal;'>({{item.type}})</span></span>\n <button class=\"Vlt-badge__dismiss keep-focus\" (click)='remove($event, item)' style='position: absolute; right: 12px; top: 8px;' aria-label='Remove'></button>\n </div>\n </div>\n </div>\n <div class=\"Vlt-composite\">\n <div class='dropdown-wrapper Vlt-dropdown' style='width: 100%; position: absolute; top: 48px;'>\n <div class=\"Vlt-dropdown__panel\">\n <div *ngIf='searchError'>\n <div class=\"Vlt-callout Vlt-callout--critical keep-focus\">\n <i></i>\n <div class=\"Vlt-callout__content\">{{searchError}}</div>\n </div>\n </div>\n <div *ngIf='!searchError && (suggestions.length || searchResults)' [ngClass]=\"{ suggestions: !searchResults}\" class=\"Vlt-dropdown__panel__content Vlt-dropdown__panel__content--scroll-area\" style='padding: 0;'>\n <div class=\"Vlt-dropdown__block\"></div>\n <div *ngIf='!searchResults' class=\"Vlt-dropdown__scroll\">\n <div [ngClass]=\"{ 'Vlt-dropdown__link--selected': activeSuggestionIndex === i, smart: suggestion.smart }\" (click)='onSuggestionSelect($event, suggestion)' *ngFor='let suggestion of suggestions; let i = index' class=\"Vlt-dropdown__link has-type\">\n <svg class='Vlt-icon Vlt-icon--small'><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\"/></svg>\n <div class='__gu' [title]='suggestion.label'>{{ suggestion.label }}</div>\n <small class='Vlt-grey-dark' style='text-transform: capitalize;'>{{suggestion.type}}</small>\n </div>\n </div>\n <div *ngIf='searchResults' class=\"Vlt-dropdown__scroll\">\n <div *ngIf='!searchResults.length' class='Vlt-dropdown__block'> No records matching '<b style='pointer-events: none;'>{{searchText}}</b>' were found.</div>\n <div [ngClass]=\"{ 'Vlt-dropdown__link--selected': activeSuggestionIndex === i }\" (click)='onSuggestionSelect($event, suggestion)' *ngFor='let suggestion of searchResults; let i = index' class=\"Vlt-dropdown__link has-type\">\n <svg class='Vlt-icon Vlt-icon--small'><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\"/></svg>\n <div class='__gu' [title]='suggestion.label'>{{ suggestion.label }}</div>\n <small class='Vlt-grey-dark' style='text-transform: capitalize;'>{{suggestion.type}}</small>\n </div>\n </div>\n <!-- <div *ngIf='searchResults' class=\"Vlt-dropdown__block\" style='text-align: right; padding-top: 0;'>\n <small>\n {{ searchResults ? searchResults.length+' results' : 'Suggestions' }} <span style='font-style: italic; font-weight: normal;' *ngIf='searchResults'>~{{ model ? 'last search' : searchText}}</span>\n </small>\n </div> -->\n <div class=\"Vlt-dropdown__block\"></div>\n </div>\n </div>\n </div>\n <div class=\"Vlt-composite__prepend\" *ngIf='isPolymorphic && showTypes && (multiple || !model || (dropdownVisible && ((suggestions || searchResults || []).length || searchResourceType.resourceType)))'>\n <div class=\"search-scope\" [ngClass]=\"{ 'has-value': searchResourceType.resourceType }\">\n <vgip-meta-field class='shown' [meta]='searchResourceTypeMeta' [parent]='searchResourceType' (onChange)='onSearchResourceTypeChanged($event)' (onLeave)='onBlur($event)' [integrationCode]='integrationCode' theme='inherit'></vgip-meta-field>\n <svg class='Vlt-icon Vlt-grey Vlt-icon--smaller visible-mobile mobile-icon' style='position: absolute; top: 15px; left: 14px; pointer-events: none;'>\n <use xlink:href=\"volta/volta-icons.svg#Vlt-icon-menu\"/>\n </svg>\n <label class='mobile-label hidden-mobile hidden-desktop'>Search</label>\n </div>\n </div>\n <div *ngIf='!(isPolymorphic && showTypes && (multiple || !model || dropdownVisible))'><!-- required by css --></div>\n <div class=\"Vlt-composite__wrapper Vlt-input\" style='overflow: hidden;' [ngClass]=\"{ 'has-append-button': hasAppendButton && !disabled }\">\n <label class='wrapper'>\n <div class=\"Vlt-composite__prepend Vlt-composite__prepend--icon\" style='top: 0; padding-top: 15px;'>\n <div class=\"Vlt-composite__icon\">\n <svg *ngIf='isSearchable && (!model || multiple)' class='Vlt-grey'><use attr.xlink:href=\"volta/volta-icons.svg#Vlt-icon-{{ multiple ? 'stack' : 'search'}}\"/></svg>\n <svg *ngIf='!isSearchable || (model && !multiple)' [ngStyle]=\"{fill: integrationIcon === 'Brand-icon-vonage' ? 'var(--vgip-meta-input-color)' : ''}\"><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\"/></svg>\n </div>\n <div *ngIf='suggestions.length' class=\"Vlt-badge Vlt-badge--small Vlt-badge--purple\" style='padding: 0px 4px; position: absolute; top: 26px; left: 4px; pointer-events: none; min-width: 14px;'>{{suggestions.length}}</div>\n </div>\n <input class='model' type='hidden' [required]='validations.required' [(ngModel)]='model' #f='ngModel' [name]='name' />\n <input class='main' [readonly]='!isSearchable || (model && !multiple)' [ngModel]='searchText' #ft='ngModel' (ngModelChange)='onSearchTextChanged($event)' [ngModelOptions]=\"{standalone: true}\" type=\"text\" placeholder=\"{{ placeHolderLabel || ' ' }}\" [ngClass]='{ ext: externalLink }' (click)='onActivated($event)' (focus)='onActivated($event)' (blur)='onBlur($event)' [disabled]='disabled' [title]=\"model ? model.label : ''\"/>\n <label class='Vlt-truncate hidden-mobile' style='padding-left: 25px; padding-right: 42px;'>{{ (multiple && isPolymorphic) ? '+Add ' : ((model || !isPolymorphic) ? meta.label : ( meta.searchLabel || 'Search')) }}<span *ngIf='validations.required' class='Vlt-red'>*</span> <span style='color: var(--vgip-meta-input-color); text-transform: capitalize;' *ngIf='model'>({{model.type || model.resourceType || model.length}})</span></label>\n <label class='Vlt-truncate hidden-desktop' style='padding-left: 25px; padding-right: 42px;'>{{meta.label || meta.name}}<span *ngIf='validations.required' class='Vlt-red'>*</span> <span style='color: var(--vgip-meta-input-color); text-transform: capitalize;' *ngIf='model'>({{model.type || model.resourceType || model.length}})</span></label>\n </label>\n <div *ngIf='searching' class='search-progress'>\n <div class=\"container\">\n <div class=\"bar Vlt-bg-purple\"></div>\n </div>\n </div>\n <div class='Vlt-composite__append right-actions'>\n <!-- <div *ngIf='prevModel && !model' class=\"Vlt-composite__append--icon\" (click)='revert()'>\n <div class=\"Vlt-composite__icon\">\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-reply\"/></svg>\n </div>\n </div> -->\n <div *ngIf='model && !multiple' class=\"Vlt-composite__append--icon\" (click)='removeSelection()'>\n <div class=\"Vlt-composite__icon\">\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-cross\"/></svg>\n </div>\n </div>\n <a [href]='externalLink || model.externalLink' target='_blank' rel='noopener' *ngIf='externalLink && (model && !multiple)' class=\"Vlt-composite__append--icon\" aria-label='Open external'>\n <div class=\"Vlt-composite__icon\">\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-open\"/></svg>\n </div>\n </a>\n </div>\n </div>\n <!-- <span *ngIf='hasCreatables'>\n <button type='button' *ngIf='!model || multiple' (click)='openResource()' class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--icon Vlt-btn--large\" style='margin-left: 12px;'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\"/></svg>\n </button>\n <button type='button' *ngIf='model && !multiple' (click)='openResource(model)' class=\"Vlt-btn Vlt-btn--primary Vlt-btn--icon Vlt-btn--large\" style='margin-left: 12px;'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-edit\"/></svg>\n </button>\n </span> -->\n <div *ngIf='hasAppendButton && !disabled' class=\"Vlt-composite__append\">\n <button (focus)='onActivated($event)' (blur)='onBlur($event)' type='button' *ngIf='!model || multiple' (click)='openResource()' class=\"Vlt-btn Vlt-btn--white Vlt-btn--icon\" aria-label='Add new'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\"/></svg>\n </button>\n <button (focus)='onActivated($event)' (blur)='onBlur($event)' type='button' *ngIf='model && !multiple' (click)='openResource(model)' class=\"Vlt-btn Vlt-btn--white Vlt-btn--icon\" aria-label='Edit'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-edit\"/></svg>\n </button>\n </div>\n </div>\n <small *ngIf='f.invalid && ((f | metaModel)._parent.submitted || ((ft | metaModel).touched && keyListenerActive))' class=\"Vlt-form__element__error\">\n <span *ngIf=\"f.errors.required\">Required</span>\n <span *ngIf=\"f.errors.pattern\">Should match '{{validations.pattern}}' pattern</span>\n </small>\n <small *ngIf='meta.helpText || meta.hint' class=\"Vlt-form__element__hint\">{{meta.helpText || meta.hint}}</small>\n</div>\n", styles: [".Vlt-form__element--big .Vlt-input input:placeholder-shown:not(:focus)~label.Vlt-truncate{font-size:1.6rem;margin-top:-.8rem;top:50%}.Vlt-form__element--big ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-right:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.Vlt-form__element--big:hover .items-container,.Vlt-form__element--big:hover .main,.Vlt-form__element--big:hover .Vlt-composite__append button,.Vlt-form__element--big:hover ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone,.Vlt-form__element--big.active .items-container,.Vlt-form__element--big.active .main,.Vlt-form__element--big.active .Vlt-composite__append button,.Vlt-form__element--big.active ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-form__element--big.Vlt-form__element--error .items-container,.Vlt-form__element--big.Vlt-form__element--error .main,.Vlt-form__element--big.Vlt-form__element--error .Vlt-composite__append button,.Vlt-form__element--big.Vlt-form__element--error ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-color:#f25a6b}.Vlt-form__element--big.multiple .Vlt-composite.Vlt-dropdown{margin-top:3px}.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) .items-container,.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) .main,.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) .Vlt-composite__append button,.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) .items-container,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) .main,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) .Vlt-composite__append button,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-form__element--big.multiple .items-container{background-color:var(--vgip-meta-input-bg-color);border:1px solid var(--vgip-meta-input-border-color);border-bottom:0;border-top-left-radius:6px;border-top-right-radius:6px}.Vlt-form__element--big.multiple .items-container .badges-container{overflow:auto;padding:6px 4px 3px 6px}.Vlt-form__element--big.multiple .items-container .badges-container .Vlt-badge{margin-bottom:3px;margin-left:0;margin-right:3px;overflow:hidden;max-width:100%;position:relative;padding-right:30px}.Vlt-form__element--big.multiple .items-container .badges-container .Vlt-badge.grid{display:grid}.Vlt-form__element--big.multiple:not(.has-value) .items-container{border:0}.Vlt-form__element--big.multiple.has-value .main,.Vlt-form__element--big.multiple.has-value .Vlt-composite__append button,.Vlt-form__element--big.multiple.has-value ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-top-left-radius:0;border-top-right-radius:0;height:48px}.Vlt-form__element--big.multiple.has-value .main:not(.Vlt-btn--icon),.Vlt-form__element--big.multiple.has-value .Vlt-composite__append button:not(.Vlt-btn--icon),.Vlt-form__element--big.multiple.has-value ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone:not(.Vlt-btn--icon){border-top:0}.Vlt-form__element--big.multiple.has-value .Vlt-composite__prepend ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-top-right-radius:6px}.Vlt-form__element--big.multiple.has-value .Vlt-composite__append button{border-top-left-radius:6px;border-top:0}.Vlt-composite__prepend{z-index:initial}.Vlt-composite__prepend--icon{top:0;padding-top:15px;left:3px}.Vlt-input.has-append-button .Vlt-composite__append.right-actions{right:0}.Vlt-input.has-append-button .Vlt-composite__append.right-actions .Vlt-composite__append--icon:last-child{width:36px}.Vlt-composite__append.right-actions{position:absolute;top:5px;right:5px;cursor:pointer}.Vlt-composite__append.right-actions .Vlt-composite__append--icon{outline:none;position:initial;display:inline-block}.Vlt-composite__append.right-actions .Vlt-composite__append--icon svg{height:14px;width:14px}.Vlt-composite__append.right-actions .Vlt-composite__append--icon:hover svg,.Vlt-composite__append.right-actions .Vlt-composite__append--icon:focus svg{fill:var(--vgip-meta-input-accent-color)}.Vlt-composite__append button{height:48px;padding-right:16px;background:var(--vgip-meta-input-bg-color);border-color:var(--vgip-meta-input-border-color);padding-left:16px;border-left:0}.Vlt-composite__append button:hover{background:var(--vgip-meta-input-action-hover-bg-color)}.Vlt-composite__append button svg{margin:-2px 0 0;fill:var(--vgip-meta-input-accent-color)}.Vlt-input input{padding-left:38px;text-overflow:ellipsis;padding-right:36px}.Vlt-input input.ext{padding-right:72px}.Vlt-composite__wrapper.has-append-button input.main{border-top-right-radius:0;border-bottom-right-radius:0;border-right:0}.Vlt-input input{background:var(--vgip-meta-input-bg-color);border-color:var(--vgip-meta-input-border-color);font-weight:bold}.Vlt-dropdown__panel{max-width:100%;width:100%;min-width:280px}.Vlt-dropdown__panel .Vlt-dropdown__link.smart{font-weight:bold;background:var(--vgip-meta-dropdown-bg-color)}.Vlt-dropdown__panel .Vlt-dropdown__link.smart.hidden{display:none}.Vlt-dropdown__panel .Vlt-dropdown__link.bold:after{background-color:#e1e2e6;content:\"\";height:1px;left:0;position:absolute;right:0;bottom:0}.Vlt-dropdown__panel .Vlt-dropdown__link--selected{background:rgba(44,45,48,.05)}.Vlt-dropdown__panel .Vlt-dropdown__link>div{flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.Vlt-dropdown__panel .Vlt-dropdown__link>svg{margin-right:8px}.vgip-meta-field-preview .Vlt-badge{margin:1px 3px 1px 0;overflow:hidden;max-width:100%}:host .search-scope{width:130px}:host .search-scope ::ng-deep .Vlt-form__element.has-value .Vlt-select:after{display:none}:host .search-scope ::ng-deep .Vlt-form__element .right-actions{right:12px}:host .search-scope ::ng-deep .Vlt-form__element label.Vlt-truncate{padding-right:48px}:host .search-scope .mobile-icon{display:none}@media only screen and (max-width: 575px){:host .search-scope{width:60px}:host .search-scope:not(.has-value) .mobile-icon{display:block}:host .search-scope.has-value .mobile-label{display:block}:host .search-scope ::ng-deep .Vlt-form__element.Vlt-form__element--big .Vlt-composite__append{display:none}:host .search-scope ::ng-deep .Vlt-form__element.Vlt-form__element--big .Vlt-select:after{margin-right:-7px}:host .search-scope ::ng-deep .Vlt-form__element.Vlt-form__element--big label.Vlt-truncate{visibility:hidden}}:host .search-scope ::ng-deep vgip-meta-field .Vlt-input input.main.standalone{padding-right:initial;background:var(--vgip-meta-input-accent-bg-color);border-color:var(--vgip-meta-input-border-color)}:host .search-scope ::ng-deep vgip-meta-field .Vlt-form__element{padding:0}:host .search-scope ::ng-deep vgip-meta-field .Vlt-form__element .Vlt-dropdown__panel{width:initial}\n"], components: [{ type: i0.forwardRef(function () { return MetaField; }), selector: "vgip-meta-field", inputs: ["meta", "parent", "integrationCode", "resourceType", "index", "preview", "theme"], outputs: ["onChange", "onLeave"] }], directives: [{ type: i0.forwardRef(function () { return i1.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i0.forwardRef(function () { return i1.NgForOf; }), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i0.forwardRef(function () { return i1.NgClass; }), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i0.forwardRef(function () { return i1.NgStyle; }), selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i0.forwardRef(function () { return i4.DefaultValueAccessor; }), selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i0.forwardRef(function () { return i4.RequiredValidator; }), selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i0.forwardRef(function () { return i4.NgControlStatus; }), selector: "[formControlName],[ngModel],[formControl]" }, { type: i0.forwardRef(function () { return i4.NgModel; }), selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "metaModel": i0.forwardRef(function () { return i5.MetaModelPipe; }) }, viewProviders: [{ provide: ControlContainer, useExisting: NgForm }] });
|
|
1405
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.2", ngImport: i0, type: FieldReference, decorators: [{
|
|
1408
1406
|
type: Component,
|
|
1409
|
-
args: [{ viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], entryComponents: [
|
|
1410
|
-
MetaRefDialog
|
|
1411
|
-
], template: "<div class='vgip-meta-field-preview' *ngIf='preview && model && (!multiple || (multiple && model.length))'>\n <div class='vgip-meta-field-label'>{{meta.label || meta.name}}</div>\n <div *ngIf='!multiple' class='vgip-meta-field-value __gu'>\n <svg class=\"Vlt-icon Vlt-icon--smaller\" style='margin-top: -3px;'><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\"/></svg>\n {{model.label || model.id}} <span class='Vlt-grey'>({{model.type}})</span>\n </div>\n <div *ngIf='multiple' class='vgip-meta-field-value __gu'>\n <span *ngFor='let m of (model || [])' class='Vlt-badge Vlt-badge--app'>\n {{m.label || m.id || m}} <span class='Vlt-grey-dark' *ngIf='isPolymorphic'>({{m.type}})</span>\n </span>\n </div>\n</div>\n<div *ngIf='!preview' class=\"meta-field-reference Vlt-form__element Vlt-form__element--big\" [ngClass]=\"{ 'Vlt-form__element--error': (searchError && keyListenerActive) || (f.invalid && ((f | metaModel)._parent.submitted || (ft | metaModel ).touched)), 'multiple': multiple, 'has-value': model, active: keyListenerActive }\">\n <div *ngIf='multiple' class='items-container' [ngClass]='{ creatable: isCreatable }'>\n <div *ngIf='model' class='badges-container keep-focus' (click)='focus()' style='width: 100%;'>\n <div *ngFor='let item of model' class=\"Vlt-badge Vlt-badge--app Vlt-badge--large keep-focus\" [ngClass]=\"{ grid: (item.label || item.id || '').length > 56}\">\n <span class='Vlt-truncate'>{{item.label || item.id || item }} <span *ngIf='isPolymorphic' class='Vlt-grey-dark' style='font-weight: normal;'>({{item.type}})</span></span>\n <button class=\"Vlt-badge__dismiss keep-focus\" (click)='remove($event, item)' style='position: absolute; right: 12px; top: 8px;' aria-label='Remove'></button>\n </div>\n </div>\n </div>\n <div class=\"Vlt-composite\">\n <div class='dropdown-wrapper Vlt-dropdown' style='width: 100%; position: absolute; top: 48px;'>\n <div class=\"Vlt-dropdown__panel\">\n <div *ngIf='searchError'>\n <div class=\"Vlt-callout Vlt-callout--critical keep-focus\">\n <i></i>\n <div class=\"Vlt-callout__content\">{{searchError}}</div>\n </div>\n </div>\n <div *ngIf='!searchError && (suggestions.length || searchResults)' [ngClass]=\"{ suggestions: !searchResults}\" class=\"Vlt-dropdown__panel__content Vlt-dropdown__panel__content--scroll-area\" style='padding: 0;'>\n <div class=\"Vlt-dropdown__block\"></div>\n <div *ngIf='!searchResults' class=\"Vlt-dropdown__scroll\">\n <div [ngClass]=\"{ 'Vlt-dropdown__link--selected': activeSuggestionIndex === i, smart: suggestion.smart }\" (click)='onSuggestionSelect($event, suggestion)' *ngFor='let suggestion of suggestions; let i = index' class=\"Vlt-dropdown__link has-type\">\n <svg class='Vlt-icon Vlt-icon--small'><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\"/></svg>\n <div class='__gu' [title]='suggestion.label'>{{ suggestion.label }}</div>\n <small class='Vlt-grey-dark' style='text-transform: capitalize;'>{{suggestion.type}}</small>\n </div>\n </div>\n <div *ngIf='searchResults' class=\"Vlt-dropdown__scroll\">\n <div *ngIf='!searchResults.length' class='Vlt-dropdown__block'> No records matching '<b style='pointer-events: none;'>{{searchText}}</b>' were found.</div>\n <div [ngClass]=\"{ 'Vlt-dropdown__link--selected': activeSuggestionIndex === i }\" (click)='onSuggestionSelect($event, suggestion)' *ngFor='let suggestion of searchResults; let i = index' class=\"Vlt-dropdown__link has-type\">\n <svg class='Vlt-icon Vlt-icon--small'><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\"/></svg>\n <div class='__gu' [title]='suggestion.label'>{{ suggestion.label }}</div>\n <small class='Vlt-grey-dark' style='text-transform: capitalize;'>{{suggestion.type}}</small>\n </div>\n </div>\n <!-- <div *ngIf='searchResults' class=\"Vlt-dropdown__block\" style='text-align: right; padding-top: 0;'>\n <small>\n {{ searchResults ? searchResults.length+' results' : 'Suggestions' }} <span style='font-style: italic; font-weight: normal;' *ngIf='searchResults'>~{{ model ? 'last search' : searchText}}</span>\n </small>\n </div> -->\n <div class=\"Vlt-dropdown__block\"></div>\n </div>\n </div>\n </div>\n <div class=\"Vlt-composite__prepend\" *ngIf='isPolymorphic && showTypes && (multiple || !model || (dropdownVisible && ((suggestions || searchResults || []).length || searchResourceType.resourceType)))'>\n <div class=\"search-scope\" [ngClass]=\"{ 'has-value': searchResourceType.resourceType }\">\n <vgip-meta-field class='shown' [meta]='searchResourceTypeMeta' [parent]='searchResourceType' (onChange)='onSearchResourceTypeChanged($event)' (onLeave)='onBlur($event)' [integrationCode]='integrationCode' theme='inherit'></vgip-meta-field>\n <svg class='Vlt-icon Vlt-grey Vlt-icon--smaller visible-mobile mobile-icon' style='position: absolute; top: 15px; left: 14px; pointer-events: none;'>\n <use xlink:href=\"volta/volta-icons.svg#Vlt-icon-menu\"/>\n </svg>\n <label class='mobile-label hidden-mobile hidden-desktop'>Search</label>\n </div>\n </div>\n <div *ngIf='!(isPolymorphic && showTypes && (multiple || !model || dropdownVisible))'><!-- required by css --></div>\n <div class=\"Vlt-composite__wrapper Vlt-input\" style='overflow: hidden;' [ngClass]=\"{ 'has-append-button': hasAppendButton && !disabled }\">\n <label class='wrapper'>\n <div class=\"Vlt-composite__prepend Vlt-composite__prepend--icon\" style='top: 0; padding-top: 15px;'>\n <div class=\"Vlt-composite__icon\">\n <svg *ngIf='isSearchable && (!model || multiple)' class='Vlt-grey'><use attr.xlink:href=\"volta/volta-icons.svg#Vlt-icon-{{ multiple ? 'stack' : 'search'}}\"/></svg>\n <svg *ngIf='!isSearchable || (model && !multiple)' [ngStyle]=\"{fill: integrationIcon === 'Brand-icon-vonage' ? 'var(--vgip-meta-input-color)' : ''}\"><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\"/></svg>\n </div>\n <div *ngIf='suggestions.length' class=\"Vlt-badge Vlt-badge--small Vlt-badge--purple\" style='padding: 0px 4px; position: absolute; top: 26px; left: 4px; pointer-events: none; min-width: 14px;'>{{suggestions.length}}</div>\n </div>\n <input class='model' type='hidden' [required]='validations.required' [(ngModel)]='model' #f='ngModel' [name]='name' />\n <input class='main' [readonly]='!isSearchable || (model && !multiple)' [ngModel]='searchText' #ft='ngModel' (ngModelChange)='onSearchTextChanged($event)' [ngModelOptions]=\"{standalone: true}\" type=\"text\" placeholder=\"{{ placeHolderLabel || ' ' }}\" [ngClass]='{ ext: externalLink }' (click)='onActivated($event)' (focus)='onActivated($event)' (blur)='onBlur($event)' [disabled]='disabled' [title]=\"model ? model.label : ''\"/>\n <label class='Vlt-truncate hidden-mobile' style='padding-left: 25px; padding-right: 42px;'>{{ (multiple && isPolymorphic) ? '+Add ' : ((model || !isPolymorphic) ? meta.label : ( meta.searchLabel || 'Search')) }}<span *ngIf='validations.required' class='Vlt-red'>*</span> <span style='color: var(--vgip-meta-input-color); text-transform: capitalize;' *ngIf='model'>({{model.type || model.resourceType || model.length}})</span></label>\n <label class='Vlt-truncate hidden-desktop' style='padding-left: 25px; padding-right: 42px;'>{{meta.label || meta.name}}<span *ngIf='validations.required' class='Vlt-red'>*</span> <span style='color: var(--vgip-meta-input-color); text-transform: capitalize;' *ngIf='model'>({{model.type || model.resourceType || model.length}})</span></label>\n </label>\n <div *ngIf='searching' class='search-progress'>\n <div class=\"container\">\n <div class=\"bar Vlt-bg-purple\"></div>\n </div>\n </div>\n <div class='Vlt-composite__append right-actions'>\n <!-- <div *ngIf='prevModel && !model' class=\"Vlt-composite__append--icon\" (click)='revert()'>\n <div class=\"Vlt-composite__icon\">\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-reply\"/></svg>\n </div>\n </div> -->\n <div *ngIf='model && !multiple' class=\"Vlt-composite__append--icon\" (click)='removeSelection()'>\n <div class=\"Vlt-composite__icon\">\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-cross\"/></svg>\n </div>\n </div>\n <a [href]='externalLink || model.externalLink' target='_blank' rel='noopener' *ngIf='externalLink && (model && !multiple)' class=\"Vlt-composite__append--icon\" aria-label='Open external'>\n <div class=\"Vlt-composite__icon\">\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-open\"/></svg>\n </div>\n </a>\n </div>\n </div>\n <!-- <span *ngIf='hasCreatables'>\n <button type='button' *ngIf='!model || multiple' (click)='openResource()' class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--icon Vlt-btn--large\" style='margin-left: 12px;'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\"/></svg>\n </button>\n <button type='button' *ngIf='model && !multiple' (click)='openResource(model)' class=\"Vlt-btn Vlt-btn--primary Vlt-btn--icon Vlt-btn--large\" style='margin-left: 12px;'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-edit\"/></svg>\n </button>\n </span> -->\n <div *ngIf='hasAppendButton && !disabled' class=\"Vlt-composite__append\">\n <button (focus)='onActivated($event)' (blur)='onBlur($event)' type='button' *ngIf='!model || multiple' (click)='openResource()' class=\"Vlt-btn Vlt-btn--white Vlt-btn--icon\" aria-label='Add new'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\"/></svg>\n </button>\n <button (focus)='onActivated($event)' (blur)='onBlur($event)' type='button' *ngIf='model && !multiple' (click)='openResource(model)' class=\"Vlt-btn Vlt-btn--white Vlt-btn--icon\" aria-label='Edit'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-edit\"/></svg>\n </button>\n </div>\n </div>\n <small *ngIf='f.invalid && ((f | metaModel)._parent.submitted || ((ft | metaModel).touched && keyListenerActive))' class=\"Vlt-form__element__error\">\n <span *ngIf=\"f.errors.required\">Required</span>\n <span *ngIf=\"f.errors.pattern\">Should match '{{validations.pattern}}' pattern</span>\n </small>\n <small *ngIf='meta.helpText || meta.hint' class=\"Vlt-form__element__hint\">{{meta.helpText || meta.hint}}</small>\n</div>\n", styles: [".Vlt-form__element--big .Vlt-input input:placeholder-shown:not(:focus)~label.Vlt-truncate{font-size:1.6rem;margin-top:-.8rem;top:50%}.Vlt-form__element--big ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-right:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.Vlt-form__element--big:hover .items-container,.Vlt-form__element--big:hover .main,.Vlt-form__element--big:hover .Vlt-composite__append button,.Vlt-form__element--big:hover ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone,.Vlt-form__element--big.active .items-container,.Vlt-form__element--big.active .main,.Vlt-form__element--big.active .Vlt-composite__append button,.Vlt-form__element--big.active ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-form__element--big.Vlt-form__element--error .items-container,.Vlt-form__element--big.Vlt-form__element--error .main,.Vlt-form__element--big.Vlt-form__element--error .Vlt-composite__append button,.Vlt-form__element--big.Vlt-form__element--error ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-color:#f25a6b}.Vlt-form__element--big.multiple .Vlt-composite.Vlt-dropdown{margin-top:3px}.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) .items-container,.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) .main,.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) .Vlt-composite__append button,.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) .items-container,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) .main,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) .Vlt-composite__append button,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-form__element--big.multiple .items-container{background-color:var(--vgip-meta-input-bg-color);border:1px solid var(--vgip-meta-input-border-color);border-bottom:0;border-top-left-radius:6px;border-top-right-radius:6px}.Vlt-form__element--big.multiple .items-container .badges-container{overflow:auto;padding:6px 4px 3px 6px}.Vlt-form__element--big.multiple .items-container .badges-container .Vlt-badge{margin-bottom:3px;margin-left:0;margin-right:3px;overflow:hidden;max-width:100%;position:relative;padding-right:30px}.Vlt-form__element--big.multiple .items-container .badges-container .Vlt-badge.grid{display:grid}.Vlt-form__element--big.multiple:not(.has-value) .items-container{border:0}.Vlt-form__element--big.multiple.has-value .main,.Vlt-form__element--big.multiple.has-value .Vlt-composite__append button,.Vlt-form__element--big.multiple.has-value ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-top-left-radius:0;border-top-right-radius:0;height:48px}.Vlt-form__element--big.multiple.has-value .main:not(.Vlt-btn--icon),.Vlt-form__element--big.multiple.has-value .Vlt-composite__append button:not(.Vlt-btn--icon),.Vlt-form__element--big.multiple.has-value ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone:not(.Vlt-btn--icon){border-top:0}.Vlt-form__element--big.multiple.has-value .Vlt-composite__prepend ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-top-right-radius:6px}.Vlt-form__element--big.multiple.has-value .Vlt-composite__append button{border-top-left-radius:6px;border-top:0}.Vlt-composite__prepend{z-index:initial}.Vlt-composite__prepend--icon{top:0;padding-top:15px;left:3px}.Vlt-input.has-append-button .Vlt-composite__append.right-actions{right:0}.Vlt-input.has-append-button .Vlt-composite__append.right-actions .Vlt-composite__append--icon:last-child{width:36px}.Vlt-composite__append.right-actions{position:absolute;top:5px;right:5px;cursor:pointer}.Vlt-composite__append.right-actions .Vlt-composite__append--icon{outline:none;position:initial;display:inline-block}.Vlt-composite__append.right-actions .Vlt-composite__append--icon svg{height:14px;width:14px}.Vlt-composite__append.right-actions .Vlt-composite__append--icon:hover svg,.Vlt-composite__append.right-actions .Vlt-composite__append--icon:focus svg{fill:var(--vgip-meta-input-accent-color)}.Vlt-composite__append button{height:48px;padding-right:16px;background:var(--vgip-meta-input-bg-color);border-color:var(--vgip-meta-input-border-color);padding-left:16px;border-left:0}.Vlt-composite__append button:hover{background:var(--vgip-meta-input-action-hover-bg-color)}.Vlt-composite__append button svg{margin:-2px 0 0;fill:var(--vgip-meta-input-accent-color)}.Vlt-input input{padding-left:38px;text-overflow:ellipsis;padding-right:36px}.Vlt-input input.ext{padding-right:72px}.Vlt-composite__wrapper.has-append-button input.main{border-top-right-radius:0;border-bottom-right-radius:0;border-right:0}.Vlt-input input{background:var(--vgip-meta-input-bg-color);border-color:var(--vgip-meta-input-border-color);font-weight:bold}.Vlt-dropdown__panel{max-width:100%;width:100%;min-width:280px}.Vlt-dropdown__panel .Vlt-dropdown__link.smart{font-weight:bold;background:var(--vgip-meta-dropdown-bg-color)}.Vlt-dropdown__panel .Vlt-dropdown__link.smart.hidden{display:none}.Vlt-dropdown__panel .Vlt-dropdown__link.bold:after{background-color:#e1e2e6;content:\"\";height:1px;left:0;position:absolute;right:0;bottom:0}.Vlt-dropdown__panel .Vlt-dropdown__link--selected{background:rgba(44,45,48,.05)}.Vlt-dropdown__panel .Vlt-dropdown__link>div{flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.Vlt-dropdown__panel .Vlt-dropdown__link>svg{margin-right:8px}.vgip-meta-field-preview .Vlt-badge{margin:1px 3px 1px 0;overflow:hidden;max-width:100%}:host .search-scope{width:130px}:host .search-scope ::ng-deep .Vlt-form__element.has-value .Vlt-select:after{display:none}:host .search-scope ::ng-deep .Vlt-form__element .right-actions{right:12px}:host .search-scope ::ng-deep .Vlt-form__element label.Vlt-truncate{padding-right:48px}:host .search-scope .mobile-icon{display:none}@media only screen and (max-width: 575px){:host .search-scope{width:60px}:host .search-scope:not(.has-value) .mobile-icon{display:block}:host .search-scope.has-value .mobile-label{display:block}:host .search-scope ::ng-deep .Vlt-form__element.Vlt-form__element--big .Vlt-composite__append{display:none}:host .search-scope ::ng-deep .Vlt-form__element.Vlt-form__element--big .Vlt-select:after{margin-right:-7px}:host .search-scope ::ng-deep .Vlt-form__element.Vlt-form__element--big label.Vlt-truncate{visibility:hidden}}:host .search-scope ::ng-deep vgip-meta-field .Vlt-input input.main.standalone{padding-right:initial;background:var(--vgip-meta-input-accent-bg-color);border-color:var(--vgip-meta-input-border-color)}:host .search-scope ::ng-deep vgip-meta-field .Vlt-form__element{padding:0}:host .search-scope ::ng-deep vgip-meta-field .Vlt-form__element .Vlt-dropdown__panel{width:initial}\n"] }]
|
|
1407
|
+
args: [{ viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], template: "<div class='vgip-meta-field-preview' *ngIf='preview && model && (!multiple || (multiple && model.length))'>\n <div class='vgip-meta-field-label'>{{meta.label || meta.name}}</div>\n <div *ngIf='!multiple' class='vgip-meta-field-value __gu'>\n <svg class=\"Vlt-icon Vlt-icon--smaller\" style='margin-top: -3px;'><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\"/></svg>\n {{model.label || model.id}} <span class='Vlt-grey'>({{model.type}})</span>\n </div>\n <div *ngIf='multiple' class='vgip-meta-field-value __gu'>\n <span *ngFor='let m of (model || [])' class='Vlt-badge Vlt-badge--app'>\n {{m.label || m.id || m}} <span class='Vlt-grey-dark' *ngIf='isPolymorphic'>({{m.type}})</span>\n </span>\n </div>\n</div>\n<div *ngIf='!preview' class=\"meta-field-reference Vlt-form__element Vlt-form__element--big\" [ngClass]=\"{ 'Vlt-form__element--error': (searchError && keyListenerActive) || (f.invalid && ((f | metaModel)._parent.submitted || (ft | metaModel ).touched)), 'multiple': multiple, 'has-value': model, active: keyListenerActive }\">\n <div *ngIf='multiple' class='items-container' [ngClass]='{ creatable: isCreatable }'>\n <div *ngIf='model' class='badges-container keep-focus' (click)='focus()' style='width: 100%;'>\n <div *ngFor='let item of model' class=\"Vlt-badge Vlt-badge--app Vlt-badge--large keep-focus\" [ngClass]=\"{ grid: (item.label || item.id || '').length > 56}\">\n <span class='Vlt-truncate'>{{item.label || item.id || item }} <span *ngIf='isPolymorphic' class='Vlt-grey-dark' style='font-weight: normal;'>({{item.type}})</span></span>\n <button class=\"Vlt-badge__dismiss keep-focus\" (click)='remove($event, item)' style='position: absolute; right: 12px; top: 8px;' aria-label='Remove'></button>\n </div>\n </div>\n </div>\n <div class=\"Vlt-composite\">\n <div class='dropdown-wrapper Vlt-dropdown' style='width: 100%; position: absolute; top: 48px;'>\n <div class=\"Vlt-dropdown__panel\">\n <div *ngIf='searchError'>\n <div class=\"Vlt-callout Vlt-callout--critical keep-focus\">\n <i></i>\n <div class=\"Vlt-callout__content\">{{searchError}}</div>\n </div>\n </div>\n <div *ngIf='!searchError && (suggestions.length || searchResults)' [ngClass]=\"{ suggestions: !searchResults}\" class=\"Vlt-dropdown__panel__content Vlt-dropdown__panel__content--scroll-area\" style='padding: 0;'>\n <div class=\"Vlt-dropdown__block\"></div>\n <div *ngIf='!searchResults' class=\"Vlt-dropdown__scroll\">\n <div [ngClass]=\"{ 'Vlt-dropdown__link--selected': activeSuggestionIndex === i, smart: suggestion.smart }\" (click)='onSuggestionSelect($event, suggestion)' *ngFor='let suggestion of suggestions; let i = index' class=\"Vlt-dropdown__link has-type\">\n <svg class='Vlt-icon Vlt-icon--small'><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\"/></svg>\n <div class='__gu' [title]='suggestion.label'>{{ suggestion.label }}</div>\n <small class='Vlt-grey-dark' style='text-transform: capitalize;'>{{suggestion.type}}</small>\n </div>\n </div>\n <div *ngIf='searchResults' class=\"Vlt-dropdown__scroll\">\n <div *ngIf='!searchResults.length' class='Vlt-dropdown__block'> No records matching '<b style='pointer-events: none;'>{{searchText}}</b>' were found.</div>\n <div [ngClass]=\"{ 'Vlt-dropdown__link--selected': activeSuggestionIndex === i }\" (click)='onSuggestionSelect($event, suggestion)' *ngFor='let suggestion of searchResults; let i = index' class=\"Vlt-dropdown__link has-type\">\n <svg class='Vlt-icon Vlt-icon--small'><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\"/></svg>\n <div class='__gu' [title]='suggestion.label'>{{ suggestion.label }}</div>\n <small class='Vlt-grey-dark' style='text-transform: capitalize;'>{{suggestion.type}}</small>\n </div>\n </div>\n <!-- <div *ngIf='searchResults' class=\"Vlt-dropdown__block\" style='text-align: right; padding-top: 0;'>\n <small>\n {{ searchResults ? searchResults.length+' results' : 'Suggestions' }} <span style='font-style: italic; font-weight: normal;' *ngIf='searchResults'>~{{ model ? 'last search' : searchText}}</span>\n </small>\n </div> -->\n <div class=\"Vlt-dropdown__block\"></div>\n </div>\n </div>\n </div>\n <div class=\"Vlt-composite__prepend\" *ngIf='isPolymorphic && showTypes && (multiple || !model || (dropdownVisible && ((suggestions || searchResults || []).length || searchResourceType.resourceType)))'>\n <div class=\"search-scope\" [ngClass]=\"{ 'has-value': searchResourceType.resourceType }\">\n <vgip-meta-field class='shown' [meta]='searchResourceTypeMeta' [parent]='searchResourceType' (onChange)='onSearchResourceTypeChanged($event)' (onLeave)='onBlur($event)' [integrationCode]='integrationCode' theme='inherit'></vgip-meta-field>\n <svg class='Vlt-icon Vlt-grey Vlt-icon--smaller visible-mobile mobile-icon' style='position: absolute; top: 15px; left: 14px; pointer-events: none;'>\n <use xlink:href=\"volta/volta-icons.svg#Vlt-icon-menu\"/>\n </svg>\n <label class='mobile-label hidden-mobile hidden-desktop'>Search</label>\n </div>\n </div>\n <div *ngIf='!(isPolymorphic && showTypes && (multiple || !model || dropdownVisible))'><!-- required by css --></div>\n <div class=\"Vlt-composite__wrapper Vlt-input\" style='overflow: hidden;' [ngClass]=\"{ 'has-append-button': hasAppendButton && !disabled }\">\n <label class='wrapper'>\n <div class=\"Vlt-composite__prepend Vlt-composite__prepend--icon\" style='top: 0; padding-top: 15px;'>\n <div class=\"Vlt-composite__icon\">\n <svg *ngIf='isSearchable && (!model || multiple)' class='Vlt-grey'><use attr.xlink:href=\"volta/volta-icons.svg#Vlt-icon-{{ multiple ? 'stack' : 'search'}}\"/></svg>\n <svg *ngIf='!isSearchable || (model && !multiple)' [ngStyle]=\"{fill: integrationIcon === 'Brand-icon-vonage' ? 'var(--vgip-meta-input-color)' : ''}\"><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\"/></svg>\n </div>\n <div *ngIf='suggestions.length' class=\"Vlt-badge Vlt-badge--small Vlt-badge--purple\" style='padding: 0px 4px; position: absolute; top: 26px; left: 4px; pointer-events: none; min-width: 14px;'>{{suggestions.length}}</div>\n </div>\n <input class='model' type='hidden' [required]='validations.required' [(ngModel)]='model' #f='ngModel' [name]='name' />\n <input class='main' [readonly]='!isSearchable || (model && !multiple)' [ngModel]='searchText' #ft='ngModel' (ngModelChange)='onSearchTextChanged($event)' [ngModelOptions]=\"{standalone: true}\" type=\"text\" placeholder=\"{{ placeHolderLabel || ' ' }}\" [ngClass]='{ ext: externalLink }' (click)='onActivated($event)' (focus)='onActivated($event)' (blur)='onBlur($event)' [disabled]='disabled' [title]=\"model ? model.label : ''\"/>\n <label class='Vlt-truncate hidden-mobile' style='padding-left: 25px; padding-right: 42px;'>{{ (multiple && isPolymorphic) ? '+Add ' : ((model || !isPolymorphic) ? meta.label : ( meta.searchLabel || 'Search')) }}<span *ngIf='validations.required' class='Vlt-red'>*</span> <span style='color: var(--vgip-meta-input-color); text-transform: capitalize;' *ngIf='model'>({{model.type || model.resourceType || model.length}})</span></label>\n <label class='Vlt-truncate hidden-desktop' style='padding-left: 25px; padding-right: 42px;'>{{meta.label || meta.name}}<span *ngIf='validations.required' class='Vlt-red'>*</span> <span style='color: var(--vgip-meta-input-color); text-transform: capitalize;' *ngIf='model'>({{model.type || model.resourceType || model.length}})</span></label>\n </label>\n <div *ngIf='searching' class='search-progress'>\n <div class=\"container\">\n <div class=\"bar Vlt-bg-purple\"></div>\n </div>\n </div>\n <div class='Vlt-composite__append right-actions'>\n <!-- <div *ngIf='prevModel && !model' class=\"Vlt-composite__append--icon\" (click)='revert()'>\n <div class=\"Vlt-composite__icon\">\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-reply\"/></svg>\n </div>\n </div> -->\n <div *ngIf='model && !multiple' class=\"Vlt-composite__append--icon\" (click)='removeSelection()'>\n <div class=\"Vlt-composite__icon\">\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-cross\"/></svg>\n </div>\n </div>\n <a [href]='externalLink || model.externalLink' target='_blank' rel='noopener' *ngIf='externalLink && (model && !multiple)' class=\"Vlt-composite__append--icon\" aria-label='Open external'>\n <div class=\"Vlt-composite__icon\">\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-open\"/></svg>\n </div>\n </a>\n </div>\n </div>\n <!-- <span *ngIf='hasCreatables'>\n <button type='button' *ngIf='!model || multiple' (click)='openResource()' class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--icon Vlt-btn--large\" style='margin-left: 12px;'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\"/></svg>\n </button>\n <button type='button' *ngIf='model && !multiple' (click)='openResource(model)' class=\"Vlt-btn Vlt-btn--primary Vlt-btn--icon Vlt-btn--large\" style='margin-left: 12px;'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-edit\"/></svg>\n </button>\n </span> -->\n <div *ngIf='hasAppendButton && !disabled' class=\"Vlt-composite__append\">\n <button (focus)='onActivated($event)' (blur)='onBlur($event)' type='button' *ngIf='!model || multiple' (click)='openResource()' class=\"Vlt-btn Vlt-btn--white Vlt-btn--icon\" aria-label='Add new'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\"/></svg>\n </button>\n <button (focus)='onActivated($event)' (blur)='onBlur($event)' type='button' *ngIf='model && !multiple' (click)='openResource(model)' class=\"Vlt-btn Vlt-btn--white Vlt-btn--icon\" aria-label='Edit'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-edit\"/></svg>\n </button>\n </div>\n </div>\n <small *ngIf='f.invalid && ((f | metaModel)._parent.submitted || ((ft | metaModel).touched && keyListenerActive))' class=\"Vlt-form__element__error\">\n <span *ngIf=\"f.errors.required\">Required</span>\n <span *ngIf=\"f.errors.pattern\">Should match '{{validations.pattern}}' pattern</span>\n </small>\n <small *ngIf='meta.helpText || meta.hint' class=\"Vlt-form__element__hint\">{{meta.helpText || meta.hint}}</small>\n</div>\n", styles: [".Vlt-form__element--big .Vlt-input input:placeholder-shown:not(:focus)~label.Vlt-truncate{font-size:1.6rem;margin-top:-.8rem;top:50%}.Vlt-form__element--big ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-right:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.Vlt-form__element--big:hover .items-container,.Vlt-form__element--big:hover .main,.Vlt-form__element--big:hover .Vlt-composite__append button,.Vlt-form__element--big:hover ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone,.Vlt-form__element--big.active .items-container,.Vlt-form__element--big.active .main,.Vlt-form__element--big.active .Vlt-composite__append button,.Vlt-form__element--big.active ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-form__element--big.Vlt-form__element--error .items-container,.Vlt-form__element--big.Vlt-form__element--error .main,.Vlt-form__element--big.Vlt-form__element--error .Vlt-composite__append button,.Vlt-form__element--big.Vlt-form__element--error ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-color:#f25a6b}.Vlt-form__element--big.multiple .Vlt-composite.Vlt-dropdown{margin-top:3px}.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) .items-container,.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) .main,.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) .Vlt-composite__append button,.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) .items-container,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) .main,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) .Vlt-composite__append button,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-form__element--big.multiple .items-container{background-color:var(--vgip-meta-input-bg-color);border:1px solid var(--vgip-meta-input-border-color);border-bottom:0;border-top-left-radius:6px;border-top-right-radius:6px}.Vlt-form__element--big.multiple .items-container .badges-container{overflow:auto;padding:6px 4px 3px 6px}.Vlt-form__element--big.multiple .items-container .badges-container .Vlt-badge{margin-bottom:3px;margin-left:0;margin-right:3px;overflow:hidden;max-width:100%;position:relative;padding-right:30px}.Vlt-form__element--big.multiple .items-container .badges-container .Vlt-badge.grid{display:grid}.Vlt-form__element--big.multiple:not(.has-value) .items-container{border:0}.Vlt-form__element--big.multiple.has-value .main,.Vlt-form__element--big.multiple.has-value .Vlt-composite__append button,.Vlt-form__element--big.multiple.has-value ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-top-left-radius:0;border-top-right-radius:0;height:48px}.Vlt-form__element--big.multiple.has-value .main:not(.Vlt-btn--icon),.Vlt-form__element--big.multiple.has-value .Vlt-composite__append button:not(.Vlt-btn--icon),.Vlt-form__element--big.multiple.has-value ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone:not(.Vlt-btn--icon){border-top:0}.Vlt-form__element--big.multiple.has-value .Vlt-composite__prepend ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-top-right-radius:6px}.Vlt-form__element--big.multiple.has-value .Vlt-composite__append button{border-top-left-radius:6px;border-top:0}.Vlt-composite__prepend{z-index:initial}.Vlt-composite__prepend--icon{top:0;padding-top:15px;left:3px}.Vlt-input.has-append-button .Vlt-composite__append.right-actions{right:0}.Vlt-input.has-append-button .Vlt-composite__append.right-actions .Vlt-composite__append--icon:last-child{width:36px}.Vlt-composite__append.right-actions{position:absolute;top:5px;right:5px;cursor:pointer}.Vlt-composite__append.right-actions .Vlt-composite__append--icon{outline:none;position:initial;display:inline-block}.Vlt-composite__append.right-actions .Vlt-composite__append--icon svg{height:14px;width:14px}.Vlt-composite__append.right-actions .Vlt-composite__append--icon:hover svg,.Vlt-composite__append.right-actions .Vlt-composite__append--icon:focus svg{fill:var(--vgip-meta-input-accent-color)}.Vlt-composite__append button{height:48px;padding-right:16px;background:var(--vgip-meta-input-bg-color);border-color:var(--vgip-meta-input-border-color);padding-left:16px;border-left:0}.Vlt-composite__append button:hover{background:var(--vgip-meta-input-action-hover-bg-color)}.Vlt-composite__append button svg{margin:-2px 0 0;fill:var(--vgip-meta-input-accent-color)}.Vlt-input input{padding-left:38px;text-overflow:ellipsis;padding-right:36px}.Vlt-input input.ext{padding-right:72px}.Vlt-composite__wrapper.has-append-button input.main{border-top-right-radius:0;border-bottom-right-radius:0;border-right:0}.Vlt-input input{background:var(--vgip-meta-input-bg-color);border-color:var(--vgip-meta-input-border-color);font-weight:bold}.Vlt-dropdown__panel{max-width:100%;width:100%;min-width:280px}.Vlt-dropdown__panel .Vlt-dropdown__link.smart{font-weight:bold;background:var(--vgip-meta-dropdown-bg-color)}.Vlt-dropdown__panel .Vlt-dropdown__link.smart.hidden{display:none}.Vlt-dropdown__panel .Vlt-dropdown__link.bold:after{background-color:#e1e2e6;content:\"\";height:1px;left:0;position:absolute;right:0;bottom:0}.Vlt-dropdown__panel .Vlt-dropdown__link--selected{background:rgba(44,45,48,.05)}.Vlt-dropdown__panel .Vlt-dropdown__link>div{flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.Vlt-dropdown__panel .Vlt-dropdown__link>svg{margin-right:8px}.vgip-meta-field-preview .Vlt-badge{margin:1px 3px 1px 0;overflow:hidden;max-width:100%}:host .search-scope{width:130px}:host .search-scope ::ng-deep .Vlt-form__element.has-value .Vlt-select:after{display:none}:host .search-scope ::ng-deep .Vlt-form__element .right-actions{right:12px}:host .search-scope ::ng-deep .Vlt-form__element label.Vlt-truncate{padding-right:48px}:host .search-scope .mobile-icon{display:none}@media only screen and (max-width: 575px){:host .search-scope{width:60px}:host .search-scope:not(.has-value) .mobile-icon{display:block}:host .search-scope.has-value .mobile-label{display:block}:host .search-scope ::ng-deep .Vlt-form__element.Vlt-form__element--big .Vlt-composite__append{display:none}:host .search-scope ::ng-deep .Vlt-form__element.Vlt-form__element--big .Vlt-select:after{margin-right:-7px}:host .search-scope ::ng-deep .Vlt-form__element.Vlt-form__element--big label.Vlt-truncate{visibility:hidden}}:host .search-scope ::ng-deep vgip-meta-field .Vlt-input input.main.standalone{padding-right:initial;background:var(--vgip-meta-input-accent-bg-color);border-color:var(--vgip-meta-input-border-color)}:host .search-scope ::ng-deep vgip-meta-field .Vlt-form__element{padding:0}:host .search-scope ::ng-deep vgip-meta-field .Vlt-form__element .Vlt-dropdown__panel{width:initial}\n"] }]
|
|
1412
1408
|
}], ctorParameters: function () { return [{ type: i0.ComponentFactoryResolver }, { type: i2.MetaReferenceService }, { type: i3.MetaResourceService }, { type: i6.MetaMsgService }, { type: i7.MetaContextService }, { type: i8.MetaTrackerService }]; } });
|
|
1413
1409
|
//// FIELD LIST
|
|
1414
1410
|
export class FieldList extends FieldAbstract {
|
|
@@ -1461,9 +1457,9 @@ export class FieldList extends FieldAbstract {
|
|
|
1461
1457
|
this.value = this.model;
|
|
1462
1458
|
}
|
|
1463
1459
|
}
|
|
1464
|
-
FieldList.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.
|
|
1465
|
-
FieldList.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.
|
|
1466
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.
|
|
1460
|
+
FieldList.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.2", ngImport: i0, type: FieldList, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
1461
|
+
FieldList.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.2", type: FieldList, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<div class=\"Vlt-form__element\" [ngClass]=\"{ 'Vlt-form__element--error': (f | metaModel)._parent.submitted && f.invalid }\">\n <label class=\"Vlt-label\">{{meta.label || meta.name}} ({{(model || []).length}})<span *ngIf='validations.required' class='Vlt-red'>*</span></label>\n <small style='margin-bottom: 4px;' *ngIf='meta.hint' class=\"Vlt-form__element__hint\">{{meta.hint}}</small>\n <input class='model' type='hidden' [required]='validations.required' [(ngModel)]='model' #f='ngModel' [name]='name' />\n <ng-container *ngIf='model'>\n <div *ngFor='let item of model; let i = index;' style='display: flex; border-bottom: 1px solid var(--vgip-meta-separator-color);'>\n <vgip-meta-field style='flex: 1;' [index]='i' [meta]='list' [parent]='item' [integrationCode]='integrationCode' theme='inherit'></vgip-meta-field>\n <div style='padding-left: 12px; margin-top: 3px;'>\n <button type='button' (click)='remove(i)' class=\"Vlt-btn Vlt-btn--link\" [disabled]='model.length === (validations.min || 0)' style='border: 0;' aria-label='Remove'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-bin\"/></svg>\n </button>\n </div>\n </div>\n </ng-container>\n <button style='width: 100%;' type='button' (click)='add()' class=\"Vlt-btn Vlt-btn--small Vlt-btn--tertiary Vlt-btn--app item-add-button\" [disabled]='validations.max && model && model.length === validations.max'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\"/></svg>{{list.label}}\n </button>\n <small *ngIf='(f | metaModel)._parent.submitted && f.invalid' class=\"Vlt-form__element__error\">\n <span *ngIf=\"f.errors.required\">Required</span>\n <span *ngIf=\"f.errors.maxlength\">Length can not exceed {{validations.maxlength}} characters</span>\n </small>\n <small *ngIf='meta.helpText' class=\"Vlt-form__element__hint\">{{meta.helpText}}</small>\n</div>", styles: [".Vlt-btn--link:not([disabled]) svg{fill:#e84545}.Vlt-btn--link:not([disabled]):hover svg{fill:#de1c1c}.item-add-button{background-color:var(--vgip-meta-input-action-hover-bg-color);color:var(--vgip-meta-input-color)}.item-add-button svg{fill:var(--vgip-meta-input-color)}.item-add-button:hover{transform:scale(1.02)}\n"], components: [{ type: i0.forwardRef(function () { return MetaField; }), selector: "vgip-meta-field", inputs: ["meta", "parent", "integrationCode", "resourceType", "index", "preview", "theme"], outputs: ["onChange", "onLeave"] }], directives: [{ type: i0.forwardRef(function () { return i1.NgClass; }), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i0.forwardRef(function () { return i1.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i0.forwardRef(function () { return i4.DefaultValueAccessor; }), selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i0.forwardRef(function () { return i4.RequiredValidator; }), selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i0.forwardRef(function () { return i4.NgControlStatus; }), selector: "[formControlName],[ngModel],[formControl]" }, { type: i0.forwardRef(function () { return i4.NgModel; }), selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i0.forwardRef(function () { return i1.NgForOf; }), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "metaModel": i0.forwardRef(function () { return i5.MetaModelPipe; }) }, viewProviders: [{ provide: ControlContainer, useExisting: NgForm }] });
|
|
1462
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.2", ngImport: i0, type: FieldList, decorators: [{
|
|
1467
1463
|
type: Component,
|
|
1468
1464
|
args: [{ viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], template: "<div class=\"Vlt-form__element\" [ngClass]=\"{ 'Vlt-form__element--error': (f | metaModel)._parent.submitted && f.invalid }\">\n <label class=\"Vlt-label\">{{meta.label || meta.name}} ({{(model || []).length}})<span *ngIf='validations.required' class='Vlt-red'>*</span></label>\n <small style='margin-bottom: 4px;' *ngIf='meta.hint' class=\"Vlt-form__element__hint\">{{meta.hint}}</small>\n <input class='model' type='hidden' [required]='validations.required' [(ngModel)]='model' #f='ngModel' [name]='name' />\n <ng-container *ngIf='model'>\n <div *ngFor='let item of model; let i = index;' style='display: flex; border-bottom: 1px solid var(--vgip-meta-separator-color);'>\n <vgip-meta-field style='flex: 1;' [index]='i' [meta]='list' [parent]='item' [integrationCode]='integrationCode' theme='inherit'></vgip-meta-field>\n <div style='padding-left: 12px; margin-top: 3px;'>\n <button type='button' (click)='remove(i)' class=\"Vlt-btn Vlt-btn--link\" [disabled]='model.length === (validations.min || 0)' style='border: 0;' aria-label='Remove'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-bin\"/></svg>\n </button>\n </div>\n </div>\n </ng-container>\n <button style='width: 100%;' type='button' (click)='add()' class=\"Vlt-btn Vlt-btn--small Vlt-btn--tertiary Vlt-btn--app item-add-button\" [disabled]='validations.max && model && model.length === validations.max'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\"/></svg>{{list.label}}\n </button>\n <small *ngIf='(f | metaModel)._parent.submitted && f.invalid' class=\"Vlt-form__element__error\">\n <span *ngIf=\"f.errors.required\">Required</span>\n <span *ngIf=\"f.errors.maxlength\">Length can not exceed {{validations.maxlength}} characters</span>\n </small>\n <small *ngIf='meta.helpText' class=\"Vlt-form__element__hint\">{{meta.helpText}}</small>\n</div>", styles: [".Vlt-btn--link:not([disabled]) svg{fill:#e84545}.Vlt-btn--link:not([disabled]):hover svg{fill:#de1c1c}.item-add-button{background-color:var(--vgip-meta-input-action-hover-bg-color);color:var(--vgip-meta-input-color)}.item-add-button svg{fill:var(--vgip-meta-input-color)}.item-add-button:hover{transform:scale(1.02)}\n"] }]
|
|
1469
1465
|
}] });
|
|
@@ -1583,13 +1579,11 @@ export class MetaLayout {
|
|
|
1583
1579
|
}
|
|
1584
1580
|
}
|
|
1585
1581
|
}
|
|
1586
|
-
MetaLayout.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.
|
|
1587
|
-
MetaLayout.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.
|
|
1588
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.
|
|
1582
|
+
MetaLayout.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.2", ngImport: i0, type: MetaLayout, deps: [{ token: i0.ComponentFactoryResolver }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i3.MetaResourceService }, { token: i2.MetaReferenceService }], target: i0.ɵɵFactoryTarget.Component });
|
|
1583
|
+
MetaLayout.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.2", type: MetaLayout, selector: "vgip-meta-layout", inputs: { meta: "meta", resource: "resource", integration: "integration", type: "type", preview: "preview", theme: "theme" }, usesOnChanges: true, ngImport: i0, template: "<div *ngFor='let section of meta.sections' class='Vlt-section' [ngClass]=\"{ shown: showAll || section.visible || (!meta.oneTimeOptional && !section.$optional) || (meta.oneTimeOptional && !optionalFieldsCount) }\">\n\t<h5 *ngIf='section.label' class=\"Vlt-section__title\">{{section.label}}</h5>\n\t<div style='overflow: visible;' [ngClass]=\"{ 'for-preview': preview }\">\n\t\t<small *ngIf='section.description' class=\"Vlt-form__element__hint\">{{section.description}}</small>\n\t\t<div>\n\t\t\t<ng-container *ngFor='let field of section.fields'>\n\t\t\t\t<vgip-meta-field *ngIf='!field.$hidden && (showAll || section.visible || !field.$optional)' [meta]='field' [parent]='resource' [integrationCode]='integrationCode' [resourceType]='resourceType' [preview]='preview' [ngClass]=\"{ shown: showAll || true }\" theme='inherit' [attr.data-theme]='theme'></vgip-meta-field>\n\t\t\t</ng-container>\n\t\t</div>\n\t</div>\n</div>\n<div *ngIf='isPersistedResource && meta.children && preview'>\n\t<div *ngFor='let child of meta.children'>\n\t\t<h5 class='Vlt-children__title'>\n\t\t\t<svg class=\"Vlt-icon\"><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-stack\" /></svg> \n\t\t\t{{child.label}} <span class='Vlt-grey'>({{(resource[child.name] || []).length}})</span>\n\t\t</h5>\n\t\t<div *ngFor=\"let c of resource[child.name]\" style='position: relative;'>\n\n\t\t\t<div class=\"Vlt-card Vlt-bg-white\">\n\t\t\t\t<div class=\"Vlt-card__content Vlt-btn-on-hover\">\n\t\t\t\t\t<h5>{{c.Subject || c.subject || c.summary || c.title || c.CaseNumber || c.comment || c.body || c.name || c.topic || c.content || '...' }}</h5>\n\t\t\t\t\t<div style='font-size: 12px; line-height: 16px;'>\n\t\t\t\t\t\tCreated: <span class='Vlt-black'>{{c._vgis.createdDate | date:'mediumDate'}}</span>\n\t\t\t\t\t\tEdited: <span class='Vlt-black'>{{c._vgis.modifiedDate | date:'medium'}}</span>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"Vlt-badge Vlt-badge--app Vlt-badge--purple Vlt-badge--small\">{{c._vgis.resourceType}}</div>\n\t\t\t\t\t<div class=\"Vlt-btn-group Vlt-btn-group--hover\">\n\t\t\t\t\t\t<a *ngIf='c._vgis.externalLink' attr.href='{{c._vgis.externalLink}}' target='_blank' rel='noopener' rel='noopener' class=\"Vlt-btn Vlt-btn--tertiary Vlt-btn--icon\" aria-label='Open external'><svg style='margin-left: 0; margin-right: 0;'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-open\"/></svg></a>\n\t\t\t\t\t\t<button type='button' (click)='openChild(child, c)' class=\"Vlt-btn Vlt-btn--tertiary Vlt-btn--icon\"><svg style='margin-left: 0; margin-right: 0;'><use attr.xlink:href=\"volta/volta-icons.svg#Vlt-icon-{{ child.reference.editable ? 'edit' : 'eye-negative' }}\"/></svg></button>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<button style='width: 100%; margin-top: 0; max-width: 100%;' type='button' (click)='openChild(child)' class=\"Vlt-btn Vlt-btn--small Vlt-btn--secondary\" [disabled]='child.creatable === false'>\n\t\t\t<svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\"/></svg>{{child.reference.label}}\n\t\t</button>\n\t</div>\n</div>\n<div *ngIf='!(meta.oneTimeOptional && showAll)' [ngClass]='{ centered: !meta.oneTimeOptional }'>\n\t<button *ngIf='!preview && optionalFieldsCount' type='button' (click)='toggleOptionalFields()' class=\"Vlt-btn Vlt-btn--small Vlt-btn--link more-button\" style='margin: 0; margin-bottom: 10px;'>\n\t\t<svg><use attr.xlink:href=\"volta/volta-icons.svg#Vlt-icon-chevron-{{ showAll ? 'up' : 'down' }}\"/></svg>\n\t\t{{ showAll ? 'Hide' : 'Show' }} Optional Fields ({{optionalFieldsCount}})\n\t</button>\n</div>\n", styles: ["vgip-meta-field{display:none}vgip-meta-field.shown{display:initial}.Vlt-section__title{line-height:14px;padding:16px 16px 14px 3px;margin:-9px -1px 8px;background-color:var(--vgip-meta-resource-bg-color);color:var(--vgip-meta-resource-color);position:sticky;top:-9px;z-index:3;border-bottom:1px solid var(--vgip-meta-separator-color)}.Vlt-section{margin:0;padding-bottom:8px;display:none}.Vlt-section.shown{display:block}.Vlt-btn.vlt-add-child:hover{transform:scale(1.02)}.for-preview{margin-top:-6px}.Vlt-card{margin-bottom:16px;padding:16px}.Vlt-card .Vlt-btn-group.Vlt-btn-group--hover{right:-8px}button.more-button:focus{font-weight:bold}.centered{text-align:center}.Vlt-btn--link{color:var(--vgip-meta-link-color)}.Vlt-btn--link:hover{color:var(--vgip-meta-link-hover-color)}.Vlt-btn--link svg{fill:var(--vgip-meta-link-color)}\n"], components: [{ type: i0.forwardRef(function () { return MetaField; }), selector: "vgip-meta-field", inputs: ["meta", "parent", "integrationCode", "resourceType", "index", "preview", "theme"], outputs: ["onChange", "onLeave"] }], directives: [{ type: i0.forwardRef(function () { return i1.NgForOf; }), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i0.forwardRef(function () { return i1.NgClass; }), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i0.forwardRef(function () { return i1.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "date": i0.forwardRef(function () { return i1.DatePipe; }) } });
|
|
1584
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.2", ngImport: i0, type: MetaLayout, decorators: [{
|
|
1589
1585
|
type: Component,
|
|
1590
|
-
args: [{ selector: 'vgip-meta-layout',
|
|
1591
|
-
MetaRefDialog
|
|
1592
|
-
], template: "<div *ngFor='let section of meta.sections' class='Vlt-section' [ngClass]=\"{ shown: showAll || section.visible || (!meta.oneTimeOptional && !section.$optional) || (meta.oneTimeOptional && !optionalFieldsCount) }\">\n\t<h5 *ngIf='section.label' class=\"Vlt-section__title\">{{section.label}}</h5>\n\t<div style='overflow: visible;' [ngClass]=\"{ 'for-preview': preview }\">\n\t\t<small *ngIf='section.description' class=\"Vlt-form__element__hint\">{{section.description}}</small>\n\t\t<div>\n\t\t\t<ng-container *ngFor='let field of section.fields'>\n\t\t\t\t<vgip-meta-field *ngIf='!field.$hidden && (showAll || section.visible || !field.$optional)' [meta]='field' [parent]='resource' [integrationCode]='integrationCode' [resourceType]='resourceType' [preview]='preview' [ngClass]=\"{ shown: showAll || true }\" theme='inherit' [attr.data-theme]='theme'></vgip-meta-field>\n\t\t\t</ng-container>\n\t\t</div>\n\t</div>\n</div>\n<div *ngIf='isPersistedResource && meta.children && preview'>\n\t<div *ngFor='let child of meta.children'>\n\t\t<h5 class='Vlt-children__title'>\n\t\t\t<svg class=\"Vlt-icon\"><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-stack\" /></svg> \n\t\t\t{{child.label}} <span class='Vlt-grey'>({{(resource[child.name] || []).length}})</span>\n\t\t</h5>\n\t\t<div *ngFor=\"let c of resource[child.name]\" style='position: relative;'>\n\n\t\t\t<div class=\"Vlt-card Vlt-bg-white\">\n\t\t\t\t<div class=\"Vlt-card__content Vlt-btn-on-hover\">\n\t\t\t\t\t<h5>{{c.Subject || c.subject || c.summary || c.title || c.CaseNumber || c.comment || c.body || c.name || c.topic || c.content || '...' }}</h5>\n\t\t\t\t\t<div style='font-size: 12px; line-height: 16px;'>\n\t\t\t\t\t\tCreated: <span class='Vlt-black'>{{c._vgis.createdDate | date:'mediumDate'}}</span>\n\t\t\t\t\t\tEdited: <span class='Vlt-black'>{{c._vgis.modifiedDate | date:'medium'}}</span>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"Vlt-badge Vlt-badge--app Vlt-badge--purple Vlt-badge--small\">{{c._vgis.resourceType}}</div>\n\t\t\t\t\t<div class=\"Vlt-btn-group Vlt-btn-group--hover\">\n\t\t\t\t\t\t<a *ngIf='c._vgis.externalLink' attr.href='{{c._vgis.externalLink}}' target='_blank' rel='noopener' rel='noopener' class=\"Vlt-btn Vlt-btn--tertiary Vlt-btn--icon\" aria-label='Open external'><svg style='margin-left: 0; margin-right: 0;'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-open\"/></svg></a>\n\t\t\t\t\t\t<button type='button' (click)='openChild(child, c)' class=\"Vlt-btn Vlt-btn--tertiary Vlt-btn--icon\"><svg style='margin-left: 0; margin-right: 0;'><use attr.xlink:href=\"volta/volta-icons.svg#Vlt-icon-{{ child.reference.editable ? 'edit' : 'eye-negative' }}\"/></svg></button>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<button style='width: 100%; margin-top: 0; max-width: 100%;' type='button' (click)='openChild(child)' class=\"Vlt-btn Vlt-btn--small Vlt-btn--secondary\" [disabled]='child.creatable === false'>\n\t\t\t<svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\"/></svg>{{child.reference.label}}\n\t\t</button>\n\t</div>\n</div>\n<div *ngIf='!(meta.oneTimeOptional && showAll)' [ngClass]='{ centered: !meta.oneTimeOptional }'>\n\t<button *ngIf='!preview && optionalFieldsCount' type='button' (click)='toggleOptionalFields()' class=\"Vlt-btn Vlt-btn--small Vlt-btn--link more-button\" style='margin: 0; margin-bottom: 10px;'>\n\t\t<svg><use attr.xlink:href=\"volta/volta-icons.svg#Vlt-icon-chevron-{{ showAll ? 'up' : 'down' }}\"/></svg>\n\t\t{{ showAll ? 'Hide' : 'Show' }} Optional Fields ({{optionalFieldsCount}})\n\t</button>\n</div>\n", styles: ["vgip-meta-field{display:none}vgip-meta-field.shown{display:initial}.Vlt-section__title{line-height:14px;padding:16px 16px 14px 3px;margin:-9px -1px 8px;background-color:var(--vgip-meta-resource-bg-color);color:var(--vgip-meta-resource-color);position:sticky;top:-9px;z-index:3;border-bottom:1px solid var(--vgip-meta-separator-color)}.Vlt-section{margin:0;padding-bottom:8px;display:none}.Vlt-section.shown{display:block}.Vlt-btn.vlt-add-child:hover{transform:scale(1.02)}.for-preview{margin-top:-6px}.Vlt-card{margin-bottom:16px;padding:16px}.Vlt-card .Vlt-btn-group.Vlt-btn-group--hover{right:-8px}button.more-button:focus{font-weight:bold}.centered{text-align:center}.Vlt-btn--link{color:var(--vgip-meta-link-color)}.Vlt-btn--link:hover{color:var(--vgip-meta-link-hover-color)}.Vlt-btn--link svg{fill:var(--vgip-meta-link-color)}\n"] }]
|
|
1586
|
+
args: [{ selector: 'vgip-meta-layout', template: "<div *ngFor='let section of meta.sections' class='Vlt-section' [ngClass]=\"{ shown: showAll || section.visible || (!meta.oneTimeOptional && !section.$optional) || (meta.oneTimeOptional && !optionalFieldsCount) }\">\n\t<h5 *ngIf='section.label' class=\"Vlt-section__title\">{{section.label}}</h5>\n\t<div style='overflow: visible;' [ngClass]=\"{ 'for-preview': preview }\">\n\t\t<small *ngIf='section.description' class=\"Vlt-form__element__hint\">{{section.description}}</small>\n\t\t<div>\n\t\t\t<ng-container *ngFor='let field of section.fields'>\n\t\t\t\t<vgip-meta-field *ngIf='!field.$hidden && (showAll || section.visible || !field.$optional)' [meta]='field' [parent]='resource' [integrationCode]='integrationCode' [resourceType]='resourceType' [preview]='preview' [ngClass]=\"{ shown: showAll || true }\" theme='inherit' [attr.data-theme]='theme'></vgip-meta-field>\n\t\t\t</ng-container>\n\t\t</div>\n\t</div>\n</div>\n<div *ngIf='isPersistedResource && meta.children && preview'>\n\t<div *ngFor='let child of meta.children'>\n\t\t<h5 class='Vlt-children__title'>\n\t\t\t<svg class=\"Vlt-icon\"><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-stack\" /></svg> \n\t\t\t{{child.label}} <span class='Vlt-grey'>({{(resource[child.name] || []).length}})</span>\n\t\t</h5>\n\t\t<div *ngFor=\"let c of resource[child.name]\" style='position: relative;'>\n\n\t\t\t<div class=\"Vlt-card Vlt-bg-white\">\n\t\t\t\t<div class=\"Vlt-card__content Vlt-btn-on-hover\">\n\t\t\t\t\t<h5>{{c.Subject || c.subject || c.summary || c.title || c.CaseNumber || c.comment || c.body || c.name || c.topic || c.content || '...' }}</h5>\n\t\t\t\t\t<div style='font-size: 12px; line-height: 16px;'>\n\t\t\t\t\t\tCreated: <span class='Vlt-black'>{{c._vgis.createdDate | date:'mediumDate'}}</span>\n\t\t\t\t\t\tEdited: <span class='Vlt-black'>{{c._vgis.modifiedDate | date:'medium'}}</span>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"Vlt-badge Vlt-badge--app Vlt-badge--purple Vlt-badge--small\">{{c._vgis.resourceType}}</div>\n\t\t\t\t\t<div class=\"Vlt-btn-group Vlt-btn-group--hover\">\n\t\t\t\t\t\t<a *ngIf='c._vgis.externalLink' attr.href='{{c._vgis.externalLink}}' target='_blank' rel='noopener' rel='noopener' class=\"Vlt-btn Vlt-btn--tertiary Vlt-btn--icon\" aria-label='Open external'><svg style='margin-left: 0; margin-right: 0;'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-open\"/></svg></a>\n\t\t\t\t\t\t<button type='button' (click)='openChild(child, c)' class=\"Vlt-btn Vlt-btn--tertiary Vlt-btn--icon\"><svg style='margin-left: 0; margin-right: 0;'><use attr.xlink:href=\"volta/volta-icons.svg#Vlt-icon-{{ child.reference.editable ? 'edit' : 'eye-negative' }}\"/></svg></button>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<button style='width: 100%; margin-top: 0; max-width: 100%;' type='button' (click)='openChild(child)' class=\"Vlt-btn Vlt-btn--small Vlt-btn--secondary\" [disabled]='child.creatable === false'>\n\t\t\t<svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\"/></svg>{{child.reference.label}}\n\t\t</button>\n\t</div>\n</div>\n<div *ngIf='!(meta.oneTimeOptional && showAll)' [ngClass]='{ centered: !meta.oneTimeOptional }'>\n\t<button *ngIf='!preview && optionalFieldsCount' type='button' (click)='toggleOptionalFields()' class=\"Vlt-btn Vlt-btn--small Vlt-btn--link more-button\" style='margin: 0; margin-bottom: 10px;'>\n\t\t<svg><use attr.xlink:href=\"volta/volta-icons.svg#Vlt-icon-chevron-{{ showAll ? 'up' : 'down' }}\"/></svg>\n\t\t{{ showAll ? 'Hide' : 'Show' }} Optional Fields ({{optionalFieldsCount}})\n\t</button>\n</div>\n", styles: ["vgip-meta-field{display:none}vgip-meta-field.shown{display:initial}.Vlt-section__title{line-height:14px;padding:16px 16px 14px 3px;margin:-9px -1px 8px;background-color:var(--vgip-meta-resource-bg-color);color:var(--vgip-meta-resource-color);position:sticky;top:-9px;z-index:3;border-bottom:1px solid var(--vgip-meta-separator-color)}.Vlt-section{margin:0;padding-bottom:8px;display:none}.Vlt-section.shown{display:block}.Vlt-btn.vlt-add-child:hover{transform:scale(1.02)}.for-preview{margin-top:-6px}.Vlt-card{margin-bottom:16px;padding:16px}.Vlt-card .Vlt-btn-group.Vlt-btn-group--hover{right:-8px}button.more-button:focus{font-weight:bold}.centered{text-align:center}.Vlt-btn--link{color:var(--vgip-meta-link-color)}.Vlt-btn--link:hover{color:var(--vgip-meta-link-hover-color)}.Vlt-btn--link svg{fill:var(--vgip-meta-link-color)}\n"] }]
|
|
1593
1587
|
}], ctorParameters: function () { return [{ type: i0.ComponentFactoryResolver }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i3.MetaResourceService }, { type: i2.MetaReferenceService }]; }, propDecorators: { meta: [{
|
|
1594
1588
|
type: Input
|
|
1595
1589
|
}], resource: [{
|
|
@@ -1673,6 +1667,7 @@ export class MetaResource {
|
|
|
1673
1667
|
delete this.resource.niceFields;
|
|
1674
1668
|
this.service.getMetadata(layoutId, refresh).subscribe({
|
|
1675
1669
|
next: (meta) => {
|
|
1670
|
+
console.log('meta', meta, this.service);
|
|
1676
1671
|
this.currentLayoutId = meta.layout.id;
|
|
1677
1672
|
if (layoutId !== meta.layout.id && !this.isPersistent) {
|
|
1678
1673
|
localStorage.removeItem(layoutStoreKey);
|
|
@@ -1950,6 +1945,9 @@ export class MetaResource {
|
|
|
1950
1945
|
if (!f.suggestions) {
|
|
1951
1946
|
f.suggestions = [];
|
|
1952
1947
|
}
|
|
1948
|
+
else {
|
|
1949
|
+
f.suggestions = f.suggestions.filter(sg => !sg.auto);
|
|
1950
|
+
}
|
|
1953
1951
|
let tLabel = c.displayName || c.name;
|
|
1954
1952
|
if (c.phoneNumbers) {
|
|
1955
1953
|
tLabel += (' ✆' + c.phoneNumbers.map(p => p.phoneNumber).join(','));
|
|
@@ -1957,7 +1955,8 @@ export class MetaResource {
|
|
|
1957
1955
|
f.suggestions.push({
|
|
1958
1956
|
id: c.externalId || c.identifier || c.id,
|
|
1959
1957
|
label: tLabel,
|
|
1960
|
-
type: c.resourceType || c.type
|
|
1958
|
+
type: c.resourceType || c.type,
|
|
1959
|
+
auto: true
|
|
1961
1960
|
});
|
|
1962
1961
|
}
|
|
1963
1962
|
}
|
|
@@ -1996,11 +1995,11 @@ export class MetaResource {
|
|
|
1996
1995
|
this.el.nativeElement.dispatchEvent(e);
|
|
1997
1996
|
}
|
|
1998
1997
|
}
|
|
1999
|
-
MetaResource.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.
|
|
2000
|
-
MetaResource.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.
|
|
2001
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.
|
|
1998
|
+
MetaResource.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.2", ngImport: i0, type: MetaResource, deps: [{ token: i0.ComponentFactoryResolver }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i3.MetaResourceService }, { token: i7.MetaContextService }, { token: i6.MetaMsgService }], target: i0.ɵɵFactoryTarget.Component });
|
|
1999
|
+
MetaResource.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.2", type: MetaResource, selector: "vgip-meta-resource", inputs: { resource: "resource", model: "model", metaResourceServiceDelegated: "metaResourceServiceDelegated", theme: "theme" }, outputs: { done: "done" }, usesOnChanges: true, ngImport: i0, template: "<div *ngIf='generalError' class=\"Vlt-callout Vlt-callout--critical\" style='overflow: auto; margin: 20px;'>\n\t<i></i>\n\t<div class=\"Vlt-callout__content\">\n\t\t<p>{{generalError}}</p>\n\t</div>\n</div>\n<div *ngIf='!meta' class=\"Vlt-progress\">\n\t<div class=\"Vlt-progress__bar\" [ngClass]=\"{ loading: metaLoading }\" role=\"progressbar\" aria-valuemin=\"0\" aria-valuetext=\"Loading Metadata\" aria-valuemax=\"100\"></div>\n</div>\n<form [vgipMetaFormAutofocus]='!resource || !resource.externalId' *ngIf='meta && !generalError' #resourceForm=\"ngForm\" [name]='resource.resourceType' (ngSubmit)='submit(resourceForm)' novalidate>\n\t<div class='form-content' style='overflow: hidden;'>\n\t\t<div [ngClass]=\"{ 'Vlt-callout--dismissed': !formErrors }\" class=\"Vlt-callout Vlt-callout--banner Vlt-callout--critical\">\n\t\t\t<i></i>\n\t\t\t<div class=\"Vlt-callout__content\" style=\"margin-top: auto;\">\n\t\t\t\t<p>There is a problem with one or more fields</p>\n\t\t\t\t<small style='font-weight: 600; font-size: 1.0em;' *ngIf='formErrors'>{{ formErrors.message || formErrors }}</small>\n\t\t\t</div>\n\t\t\t<button type='button' class=\"Vlt-callout__dismiss\" (click)='clearFormErrors()' aria-label=\"Dismiss\"></button>\n\t\t</div>\n\t\t<div class=\"Vlt-card__content\" style='min-height: 40px;'>\n\t\t\t<vgip-meta-layout *ngIf='edit' [meta]='meta.layout' [resource]='model' [preview]='false' [integration]='meta.integration' [type]='resource.resourceType' theme='inherit'></vgip-meta-layout>\n\t\t\t<vgip-meta-layout *ngIf='!edit' [meta]='meta.layout' [resource]='model' [preview]='true' [integration]='meta.integration' [type]='resource.resourceType' theme='inherit'></vgip-meta-layout>\n\t\t</div>\n\t</div>\n\t<div class=\"Vlt-card__footer\">\n\t\t<button class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--app Vlt-btn--outline\" type='button' aria-label='Cancel' (click)='close()'>\n\t\t\t{{ edit ? 'Cancel' : 'Close' }}\n\t\t</button>\n\t\t<button *ngIf='edit' class=\"Vlt-btn Vlt-btn--app\" [ngClass]=\"{ 'Vlt-btn--primary': isPersistent, 'Vlt-btn--secondary': !isPersistent }\" type='submit'>\n\t\t\t{{ (resource && resource.externalId) ? 'Update' : 'Create' }}\n\t\t</button>\n\t\t<button (click)='editMode()' *ngIf='!edit && isEditable' [disabled]='!isEditable' class=\"Vlt-btn Vlt-btn--app Vlt-btn--primary\" type='button' aria-label='Edit'>\n\t\t\tEdit\n\t\t</button>\n\t\t<div style='margin-right: 8px; flex: 1;'>\n\t\t\t<div *ngIf='meta.availableLayouts && meta.availableLayouts.length' class=\"Vlt-form__element Vlt-form__element--big\" style='padding: 0; margin: -8px -18px -8px 0;'>\n\t\t\t\t<div class=\"Vlt-select\">\n\t\t\t\t\t<label style='all: inherit;'>\n\t\t\t\t\t\t<select style='border: 0; margin-top: 3px; background: transparent;' (change)='changeLayout()' [(ngModel)]='currentLayoutId' [ngModelOptions]='{ standalone: true }' [disabled]='isPersistent'>\n\t\t\t\t\t\t\t<option selected disabled>Select layout</option>\n\t\t\t\t\t\t\t<option *ngFor='let layout of meta.availableLayouts' [ngValue]='layout.id'>{{layout.name}}</option>\n\t\t\t\t\t\t</select>\n\t\t\t\t\t\t<label>Layout</label>\n\t\t\t\t\t</label>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"Vlt-dropdown resource-menu\" [ngClass]=\"{ 'Vlt-dropdown--expanded': resourceMenuVisible }\" style='margin-left: 2px;'>\n\t\t\t<div class=\"Vlt-dropdown__panel\" style='bottom: 40px; right: -4px; top: initial;'>\n\t\t\t\t<div class=\"Vlt-dropdown__panel__content\">\n\t\t\t\t\t<a class=\"Vlt-dropdown__link\" (click)='loadMetadata(currentLayoutId, true)'>\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<svg class='Vlt-icon Vlt-icon--smaller'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-refresh\"/></svg> Refresh metadata\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</a>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"Vlt-dropdown__trigger\">\n\t\t\t\t<button type='button' (click)='openResourceMenu()' class=\"Vlt-btn Vlt-btn--link\" aria-label='Resource menu'>\n\t\t\t\t\t<svg class='Vlt-icon Vlt-icon--small' style='margin: 0;'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-more-v-negative\"/></svg>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</form>\n<div class='busy-mask' [ngClass]=\"{ active: busy }\">\n\t<div style='height: 100%; display: flex; flex-direction: column; align-items: center; justify-content: center;'>\n\t\t<div class=\"Vlt-spinner\"></div>\n\t</div>\n</div>", styles: [":host{flex:1;display:flex;flex-direction:column;min-height:0;color:var(--vgip-meta-resource-color)}.Vlt-callout--banner{justify-content:initial;text-align:initial;overflow-y:auto}.Vlt-callout--banner.Vlt-callout--dismissed{padding:0}.Vlt-callout--banner:not(.Vlt-callout--dismissed){min-height:78px}.Vlt-spinner:before,.Vlt-spinner:after{border:6px solid #616266;border-color:#616266 transparent transparent}.Vlt-card__content{padding:8px 8px 8px 16px;display:flex;flex-direction:column;min-height:0;flex:1;overflow-y:scroll;overflow-x:hidden;background-color:var(--vgip-meta-resource-bg-color)}@media (hover: none){.Vlt-card__content{padding-right:16px}}.Vlt-card__content::-webkit-scrollbar{width:8px}.Vlt-card__content::-webkit-scrollbar-thumb{background-color:var(--vgip-meta-scrollbar-color);border:2px solid transparent;border-radius:6px;background-clip:content-box}.Vlt-card__footer{background:var(--vgip-meta-resource-bar-color);border-top:1px solid var(--vgip-meta-separator-color);display:flex;flex-direction:row;margin:16px -24px -24px;padding:8px 8px 8px 16px;box-shadow:0 0 4px #00000040;z-index:1}.Vlt-card__footer .Vlt-select select{color:var(--vgip-meta-input-color)}.Vlt-card__footer .Vlt-select select:disabled{background:initial;cursor:not-allowed}.Vlt-card__footer .Vlt-select:after{background-image:var(--vgip-meta-dropdown-icon)}.Vlt-card__footer .resource-menu .Vlt-icon:not(:hover){fill:var(--vgip-meta-input-label-color)}.Vlt-card__footer button.Vlt-btn--secondary{border:none;box-shadow:inset 0 0 0 1px var(--vgip-meta-button-border-color)}.Vlt-card__footer button.Vlt-btn--secondary:not([type=submit]){color:var(--vgip-meta-input-color)}.Vlt-card__footer button.Vlt-btn--secondary:hover{box-shadow:inset 0 0 0 1px var(--vgip-meta-input-accent-color)}.Vlt-card__footer button.Vlt-btn--secondary:hover[type=submit]{background-color:var(--vgip-meta-submit-hover-bg-color)}.Vlt-progress{margin:0;position:sticky}.Vlt-progress .Vlt-progress__bar{width:0;transition:width 5s}.Vlt-progress .Vlt-progress__bar.loading{width:100%}form{border-radius:6px;padding:24px;display:flex;flex-direction:column;min-height:0;flex:1}form .form-content{margin:-24px -24px -16px;padding-bottom:0;flex:1;display:flex;flex-direction:column}.busy-mask{position:absolute;top:0;right:0;bottom:0;left:0;background:rgba(0,0,0,.32);opacity:1;z-index:898;display:none;border-bottom-left-radius:6px;border-bottom-right-radius:6px;margin:1px;cursor:progress}.busy-mask.active{display:block}\n"], components: [{ type: MetaLayout, selector: "vgip-meta-layout", inputs: ["meta", "resource", "integration", "type", "preview", "theme"] }], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i9.MetaAutofocusDirective, selector: "[vgipMetaFormAutofocus]", inputs: ["vgipMetaFormAutofocus"] }, { type: i4.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
|
|
2000
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.2", ngImport: i0, type: MetaResource, decorators: [{
|
|
2002
2001
|
type: Component,
|
|
2003
|
-
args: [{ selector: 'vgip-meta-resource', template: "<div *ngIf='generalError' class=\"Vlt-callout Vlt-callout--critical\" style='overflow: auto; margin: 20px;'>\n\t<i></i>\n\t<div class=\"Vlt-callout__content\">\n\t\t<p>{{generalError}}</p>\n\t</div>\n</div>\n<div *ngIf='!meta' class=\"Vlt-progress\">\n\t<div class=\"Vlt-progress__bar\" [ngClass]=\"{ loading: metaLoading }\" role=\"progressbar\" aria-valuemin=\"0\" aria-valuetext=\"Loading Metadata\" aria-valuemax=\"100\"></div>\n</div>\n<form [vgipMetaFormAutofocus]='!resource || !resource.externalId' *ngIf='meta && !generalError' #resourceForm=\"ngForm\" [name]='resource.resourceType' (ngSubmit)='submit(resourceForm)' novalidate>\n\t<div class='form-content'>\n\t\t<div [ngClass]=\"{ 'Vlt-callout--dismissed': !formErrors }\" class=\"Vlt-callout Vlt-callout--banner Vlt-callout--critical\">\n\t\t\t<i></i>\n\t\t\t<div class=\"Vlt-callout__content\" style=\"margin-top: auto;\">\n\t\t\t\t<p>There is a problem with one or more fields</p>\n\t\t\t\t<small style='font-weight: 600; font-size: 1.0em;' *ngIf='formErrors'>{{ formErrors.message || formErrors }}</small>\n\t\t\t</div>\n\t\t\t<button type='button' class=\"Vlt-callout__dismiss\" (click)='clearFormErrors()' aria-label=\"Dismiss\"></button>\n\t\t</div>\n\t\t<div class=\"Vlt-card__content\" style='min-height: 40px;'>\n\t\t\t<vgip-meta-layout *ngIf='edit' [meta]='meta.layout' [resource]='model' [preview]='false' [integration]='meta.integration' [type]='resource.resourceType' theme='inherit'></vgip-meta-layout>\n\t\t\t<vgip-meta-layout *ngIf='!edit' [meta]='meta.layout' [resource]='model' [preview]='true' [integration]='meta.integration' [type]='resource.resourceType' theme='inherit'></vgip-meta-layout>\n\t\t</div>\n\t</div>\n\t<div class=\"Vlt-card__footer\">\n\t\t<button class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--app Vlt-btn--outline\" type='button' aria-label='Cancel' (click)='close()'>\n\t\t\t{{ edit ? 'Cancel' : 'Close' }}\n\t\t</button>\n\t\t<button *ngIf='edit' class=\"Vlt-btn Vlt-btn--app\" [ngClass]=\"{ 'Vlt-btn--primary': isPersistent, 'Vlt-btn--secondary': !isPersistent }\" type='submit'>\n\t\t\t{{ (resource && resource.externalId) ? 'Update' : 'Create' }}\n\t\t</button>\n\t\t<button (click)='editMode()' *ngIf='!edit && isEditable' [disabled]='!isEditable' class=\"Vlt-btn Vlt-btn--app Vlt-btn--primary\" type='button' aria-label='Edit'>\n\t\t\tEdit\n\t\t</button>\n\t\t<div style='margin-right: 8px; flex: 1;'>\n\t\t\t<div *ngIf='meta.availableLayouts && meta.availableLayouts.length' class=\"Vlt-form__element Vlt-form__element--big\" style='padding: 0; margin: -8px -18px -8px 0;'>\n\t\t\t\t<div class=\"Vlt-select\">\n\t\t\t\t\t<label style='all: inherit;'>\n\t\t\t\t\t\t<select style='border: 0; margin-top: 3px; background: transparent;' (change)='changeLayout()' [(ngModel)]='currentLayoutId' [ngModelOptions]='{ standalone: true }' [disabled]='isPersistent'>\n\t\t\t\t\t\t\t<option selected disabled>Select layout</option>\n\t\t\t\t\t\t\t<option *ngFor='let layout of meta.availableLayouts' [ngValue]='layout.id'>{{layout.name}}</option>\n\t\t\t\t\t\t</select>\n\t\t\t\t\t\t<label>Layout</label>\n\t\t\t\t\t</label>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"Vlt-dropdown resource-menu\" [ngClass]=\"{ 'Vlt-dropdown--expanded': resourceMenuVisible }\" style='margin-left: 2px;'>\n\t\t\t<div class=\"Vlt-dropdown__panel\" style='bottom: 40px; right: -4px; top: initial;'>\n\t\t\t\t<div class=\"Vlt-dropdown__panel__content\">\n\t\t\t\t\t<a class=\"Vlt-dropdown__link\" (click)='loadMetadata(currentLayoutId, true)'>\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<svg class='Vlt-icon Vlt-icon--smaller'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-refresh\"/></svg> Refresh metadata\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</a>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"Vlt-dropdown__trigger\">\n\t\t\t\t<button type='button' (click)='openResourceMenu()' class=\"Vlt-btn Vlt-btn--link\" aria-label='Resource menu'>\n\t\t\t\t\t<svg class='Vlt-icon Vlt-icon--small' style='margin: 0;'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-more-v-negative\"/></svg>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</form>\n<div class='busy-mask' [ngClass]=\"{ active: busy }\">\n\t<div style='height: 100%; display: flex; flex-direction: column; align-items: center; justify-content: center;'>\n\t\t<div class=\"Vlt-spinner\"></div>\n\t</div>\n</div>", styles: [":host{flex:1;display:flex;flex-direction:column;min-height:0;color:var(--vgip-meta-resource-color)}.Vlt-callout--banner{justify-content:initial;text-align:initial;overflow-y:auto}.Vlt-callout--banner.Vlt-callout--dismissed{padding:0}.Vlt-callout--banner:not(.Vlt-callout--dismissed){min-height:78px}.Vlt-spinner:before,.Vlt-spinner:after{border:6px solid #616266;border-color:#616266 transparent transparent}.Vlt-card__content{padding:8px 8px 8px 16px;display:flex;flex-direction:column;min-height:0;flex:1;overflow-y:scroll;overflow-x:hidden;background-color:var(--vgip-meta-resource-bg-color)}@media (hover: none){.Vlt-card__content{padding-right:16px}}.Vlt-card__content::-webkit-scrollbar{width:8px}.Vlt-card__content::-webkit-scrollbar-thumb{background-color:var(--vgip-meta-scrollbar-color);border:2px solid transparent;border-radius:6px;background-clip:content-box}.Vlt-card__footer{background:var(--vgip-meta-resource-bar-color);border-top:1px solid var(--vgip-meta-separator-color);display:flex;flex-direction:row;margin:16px -24px -24px;padding:8px 8px 8px 16px;box-shadow:0 0 4px #00000040;z-index:1}.Vlt-card__footer .Vlt-select select{color:var(--vgip-meta-input-color)}.Vlt-card__footer .Vlt-select select:disabled{background:initial;cursor:not-allowed}.Vlt-card__footer .Vlt-select:after{background-image:var(--vgip-meta-dropdown-icon)}.Vlt-card__footer .resource-menu .Vlt-icon:not(:hover){fill:var(--vgip-meta-input-label-color)}.Vlt-card__footer button.Vlt-btn--secondary{border:none;box-shadow:inset 0 0 0 1px var(--vgip-meta-button-border-color)}.Vlt-card__footer button.Vlt-btn--secondary:not([type=submit]){color:var(--vgip-meta-input-color)}.Vlt-card__footer button.Vlt-btn--secondary:hover{box-shadow:inset 0 0 0 1px var(--vgip-meta-input-accent-color)}.Vlt-card__footer button.Vlt-btn--secondary:hover[type=submit]{background-color:var(--vgip-meta-submit-hover-bg-color)}.Vlt-progress{margin:0;position:sticky}.Vlt-progress .Vlt-progress__bar{width:0;transition:width 5s}.Vlt-progress .Vlt-progress__bar.loading{width:100%}form{border-radius:6px;padding:24px;display:flex;flex-direction:column;min-height:0;flex:1}form .form-content{margin:-24px -24px -16px;padding-bottom:0;flex:1;display:flex;flex-direction:column}.busy-mask{position:absolute;top:0;right:0;bottom:0;left:0;background:rgba(0,0,0,.32);opacity:1;z-index:898;display:none;border-bottom-left-radius:6px;border-bottom-right-radius:6px;margin:1px;cursor:progress}.busy-mask.active{display:block}\n"] }]
|
|
2002
|
+
args: [{ selector: 'vgip-meta-resource', template: "<div *ngIf='generalError' class=\"Vlt-callout Vlt-callout--critical\" style='overflow: auto; margin: 20px;'>\n\t<i></i>\n\t<div class=\"Vlt-callout__content\">\n\t\t<p>{{generalError}}</p>\n\t</div>\n</div>\n<div *ngIf='!meta' class=\"Vlt-progress\">\n\t<div class=\"Vlt-progress__bar\" [ngClass]=\"{ loading: metaLoading }\" role=\"progressbar\" aria-valuemin=\"0\" aria-valuetext=\"Loading Metadata\" aria-valuemax=\"100\"></div>\n</div>\n<form [vgipMetaFormAutofocus]='!resource || !resource.externalId' *ngIf='meta && !generalError' #resourceForm=\"ngForm\" [name]='resource.resourceType' (ngSubmit)='submit(resourceForm)' novalidate>\n\t<div class='form-content' style='overflow: hidden;'>\n\t\t<div [ngClass]=\"{ 'Vlt-callout--dismissed': !formErrors }\" class=\"Vlt-callout Vlt-callout--banner Vlt-callout--critical\">\n\t\t\t<i></i>\n\t\t\t<div class=\"Vlt-callout__content\" style=\"margin-top: auto;\">\n\t\t\t\t<p>There is a problem with one or more fields</p>\n\t\t\t\t<small style='font-weight: 600; font-size: 1.0em;' *ngIf='formErrors'>{{ formErrors.message || formErrors }}</small>\n\t\t\t</div>\n\t\t\t<button type='button' class=\"Vlt-callout__dismiss\" (click)='clearFormErrors()' aria-label=\"Dismiss\"></button>\n\t\t</div>\n\t\t<div class=\"Vlt-card__content\" style='min-height: 40px;'>\n\t\t\t<vgip-meta-layout *ngIf='edit' [meta]='meta.layout' [resource]='model' [preview]='false' [integration]='meta.integration' [type]='resource.resourceType' theme='inherit'></vgip-meta-layout>\n\t\t\t<vgip-meta-layout *ngIf='!edit' [meta]='meta.layout' [resource]='model' [preview]='true' [integration]='meta.integration' [type]='resource.resourceType' theme='inherit'></vgip-meta-layout>\n\t\t</div>\n\t</div>\n\t<div class=\"Vlt-card__footer\">\n\t\t<button class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--app Vlt-btn--outline\" type='button' aria-label='Cancel' (click)='close()'>\n\t\t\t{{ edit ? 'Cancel' : 'Close' }}\n\t\t</button>\n\t\t<button *ngIf='edit' class=\"Vlt-btn Vlt-btn--app\" [ngClass]=\"{ 'Vlt-btn--primary': isPersistent, 'Vlt-btn--secondary': !isPersistent }\" type='submit'>\n\t\t\t{{ (resource && resource.externalId) ? 'Update' : 'Create' }}\n\t\t</button>\n\t\t<button (click)='editMode()' *ngIf='!edit && isEditable' [disabled]='!isEditable' class=\"Vlt-btn Vlt-btn--app Vlt-btn--primary\" type='button' aria-label='Edit'>\n\t\t\tEdit\n\t\t</button>\n\t\t<div style='margin-right: 8px; flex: 1;'>\n\t\t\t<div *ngIf='meta.availableLayouts && meta.availableLayouts.length' class=\"Vlt-form__element Vlt-form__element--big\" style='padding: 0; margin: -8px -18px -8px 0;'>\n\t\t\t\t<div class=\"Vlt-select\">\n\t\t\t\t\t<label style='all: inherit;'>\n\t\t\t\t\t\t<select style='border: 0; margin-top: 3px; background: transparent;' (change)='changeLayout()' [(ngModel)]='currentLayoutId' [ngModelOptions]='{ standalone: true }' [disabled]='isPersistent'>\n\t\t\t\t\t\t\t<option selected disabled>Select layout</option>\n\t\t\t\t\t\t\t<option *ngFor='let layout of meta.availableLayouts' [ngValue]='layout.id'>{{layout.name}}</option>\n\t\t\t\t\t\t</select>\n\t\t\t\t\t\t<label>Layout</label>\n\t\t\t\t\t</label>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"Vlt-dropdown resource-menu\" [ngClass]=\"{ 'Vlt-dropdown--expanded': resourceMenuVisible }\" style='margin-left: 2px;'>\n\t\t\t<div class=\"Vlt-dropdown__panel\" style='bottom: 40px; right: -4px; top: initial;'>\n\t\t\t\t<div class=\"Vlt-dropdown__panel__content\">\n\t\t\t\t\t<a class=\"Vlt-dropdown__link\" (click)='loadMetadata(currentLayoutId, true)'>\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<svg class='Vlt-icon Vlt-icon--smaller'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-refresh\"/></svg> Refresh metadata\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</a>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"Vlt-dropdown__trigger\">\n\t\t\t\t<button type='button' (click)='openResourceMenu()' class=\"Vlt-btn Vlt-btn--link\" aria-label='Resource menu'>\n\t\t\t\t\t<svg class='Vlt-icon Vlt-icon--small' style='margin: 0;'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-more-v-negative\"/></svg>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</form>\n<div class='busy-mask' [ngClass]=\"{ active: busy }\">\n\t<div style='height: 100%; display: flex; flex-direction: column; align-items: center; justify-content: center;'>\n\t\t<div class=\"Vlt-spinner\"></div>\n\t</div>\n</div>", styles: [":host{flex:1;display:flex;flex-direction:column;min-height:0;color:var(--vgip-meta-resource-color)}.Vlt-callout--banner{justify-content:initial;text-align:initial;overflow-y:auto}.Vlt-callout--banner.Vlt-callout--dismissed{padding:0}.Vlt-callout--banner:not(.Vlt-callout--dismissed){min-height:78px}.Vlt-spinner:before,.Vlt-spinner:after{border:6px solid #616266;border-color:#616266 transparent transparent}.Vlt-card__content{padding:8px 8px 8px 16px;display:flex;flex-direction:column;min-height:0;flex:1;overflow-y:scroll;overflow-x:hidden;background-color:var(--vgip-meta-resource-bg-color)}@media (hover: none){.Vlt-card__content{padding-right:16px}}.Vlt-card__content::-webkit-scrollbar{width:8px}.Vlt-card__content::-webkit-scrollbar-thumb{background-color:var(--vgip-meta-scrollbar-color);border:2px solid transparent;border-radius:6px;background-clip:content-box}.Vlt-card__footer{background:var(--vgip-meta-resource-bar-color);border-top:1px solid var(--vgip-meta-separator-color);display:flex;flex-direction:row;margin:16px -24px -24px;padding:8px 8px 8px 16px;box-shadow:0 0 4px #00000040;z-index:1}.Vlt-card__footer .Vlt-select select{color:var(--vgip-meta-input-color)}.Vlt-card__footer .Vlt-select select:disabled{background:initial;cursor:not-allowed}.Vlt-card__footer .Vlt-select:after{background-image:var(--vgip-meta-dropdown-icon)}.Vlt-card__footer .resource-menu .Vlt-icon:not(:hover){fill:var(--vgip-meta-input-label-color)}.Vlt-card__footer button.Vlt-btn--secondary{border:none;box-shadow:inset 0 0 0 1px var(--vgip-meta-button-border-color)}.Vlt-card__footer button.Vlt-btn--secondary:not([type=submit]){color:var(--vgip-meta-input-color)}.Vlt-card__footer button.Vlt-btn--secondary:hover{box-shadow:inset 0 0 0 1px var(--vgip-meta-input-accent-color)}.Vlt-card__footer button.Vlt-btn--secondary:hover[type=submit]{background-color:var(--vgip-meta-submit-hover-bg-color)}.Vlt-progress{margin:0;position:sticky}.Vlt-progress .Vlt-progress__bar{width:0;transition:width 5s}.Vlt-progress .Vlt-progress__bar.loading{width:100%}form{border-radius:6px;padding:24px;display:flex;flex-direction:column;min-height:0;flex:1}form .form-content{margin:-24px -24px -16px;padding-bottom:0;flex:1;display:flex;flex-direction:column}.busy-mask{position:absolute;top:0;right:0;bottom:0;left:0;background:rgba(0,0,0,.32);opacity:1;z-index:898;display:none;border-bottom-left-radius:6px;border-bottom-right-radius:6px;margin:1px;cursor:progress}.busy-mask.active{display:block}\n"] }]
|
|
2004
2003
|
}], ctorParameters: function () { return [{ type: i0.ComponentFactoryResolver }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i3.MetaResourceService }, { type: i7.MetaContextService }, { type: i6.MetaMsgService }]; }, propDecorators: { resource: [{
|
|
2005
2004
|
type: Input
|
|
2006
2005
|
}], model: [{
|
|
@@ -2038,13 +2037,11 @@ export class MetaResourceCard {
|
|
|
2038
2037
|
});
|
|
2039
2038
|
}
|
|
2040
2039
|
}
|
|
2041
|
-
MetaResourceCard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.
|
|
2042
|
-
MetaResourceCard.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.
|
|
2043
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.
|
|
2040
|
+
MetaResourceCard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.2", ngImport: i0, type: MetaResourceCard, deps: [{ token: i0.ComponentFactoryResolver }, { token: i3.MetaResourceService }, { token: i2.MetaReferenceService }], target: i0.ɵɵFactoryTarget.Component });
|
|
2041
|
+
MetaResourceCard.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.2", type: MetaResourceCard, selector: "vgip-meta-resource-card", inputs: { resource: "resource", model: "model" }, ngImport: i0, template: "<div class=\"Vlt-card Vlt-bg-white\">\n\t<div class=\"Vlt-card__content Vlt-btn-on-hover\">\n\t\t<h5>{{model.Subject || model.subject || model.summary || model.title || model.CaseNumber || model.comment || model.body || model.name || model.topic || '...' }}</h5>\n\t\t<div style='font-size: 12px; line-height: 16px;'>\n\t\t\tCreated: <span class='Vlt-black'>{{model._vgis.createdDate | date:'mediumDate'}}</span>\n\t\t\tEdited: <span class='Vlt-black'>{{model._vgis.modifiedDate | date:'medium'}}</span>\n\t\t</div>\n\t\t<div class=\"Vlt-badge Vlt-badge--app Vlt-badge--purple Vlt-badge--small\">{{model._vgis.resourceType}}</div>\n\t\t<div class=\"Vlt-btn-group Vlt-btn-group--hover\">\n\t\t\t<a *ngIf='model._vgis.externalLink' attr.href='{{model._vgis.externalLink}}' target='_blank' rel='noopener' class=\"Vlt-btn Vlt-btn--tertiary Vlt-btn--icon\" aria-label='Open external'><svg style='margin-left: 0; margin-right: 0;'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-open\"/></svg></a>\n\t\t\t<button type='button' (click)='open(resource, model)' class=\"Vlt-btn Vlt-btn--tertiary Vlt-btn--icon\" aria-label='Edit'><svg style='margin-left: 0; margin-right: 0;'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-edit\"/></svg></button>\n\t\t</div>\n\t</div>\n</div>\n", styles: [".Vlt-card{margin-bottom:8px;padding:16px}.Vlt-card .Vlt-btn-group.Vlt-btn-group--hover{right:-8px}\n"], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "date": i1.DatePipe } });
|
|
2042
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.2", ngImport: i0, type: MetaResourceCard, decorators: [{
|
|
2044
2043
|
type: Component,
|
|
2045
|
-
args: [{ selector: 'vgip-meta-resource-card',
|
|
2046
|
-
MetaRefDialog
|
|
2047
|
-
], template: "<div class=\"Vlt-card Vlt-bg-white\">\n\t<div class=\"Vlt-card__content Vlt-btn-on-hover\">\n\t\t<h5>{{model.Subject || model.subject || model.summary || model.title || model.CaseNumber || model.comment || model.body || model.name || model.topic || '...' }}</h5>\n\t\t<div style='font-size: 12px; line-height: 16px;'>\n\t\t\tCreated: <span class='Vlt-black'>{{model._vgis.createdDate | date:'mediumDate'}}</span>\n\t\t\tEdited: <span class='Vlt-black'>{{model._vgis.modifiedDate | date:'medium'}}</span>\n\t\t</div>\n\t\t<div class=\"Vlt-badge Vlt-badge--app Vlt-badge--purple Vlt-badge--small\">{{model._vgis.resourceType}}</div>\n\t\t<div class=\"Vlt-btn-group Vlt-btn-group--hover\">\n\t\t\t<a *ngIf='model._vgis.externalLink' attr.href='{{model._vgis.externalLink}}' target='_blank' rel='noopener' class=\"Vlt-btn Vlt-btn--tertiary Vlt-btn--icon\" aria-label='Open external'><svg style='margin-left: 0; margin-right: 0;'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-open\"/></svg></a>\n\t\t\t<button type='button' (click)='open(resource, model)' class=\"Vlt-btn Vlt-btn--tertiary Vlt-btn--icon\" aria-label='Edit'><svg style='margin-left: 0; margin-right: 0;'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-edit\"/></svg></button>\n\t\t</div>\n\t</div>\n</div>\n", styles: [".Vlt-card{margin-bottom:8px;padding:16px}.Vlt-card .Vlt-btn-group.Vlt-btn-group--hover{right:-8px}\n"] }]
|
|
2044
|
+
args: [{ selector: 'vgip-meta-resource-card', template: "<div class=\"Vlt-card Vlt-bg-white\">\n\t<div class=\"Vlt-card__content Vlt-btn-on-hover\">\n\t\t<h5>{{model.Subject || model.subject || model.summary || model.title || model.CaseNumber || model.comment || model.body || model.name || model.topic || '...' }}</h5>\n\t\t<div style='font-size: 12px; line-height: 16px;'>\n\t\t\tCreated: <span class='Vlt-black'>{{model._vgis.createdDate | date:'mediumDate'}}</span>\n\t\t\tEdited: <span class='Vlt-black'>{{model._vgis.modifiedDate | date:'medium'}}</span>\n\t\t</div>\n\t\t<div class=\"Vlt-badge Vlt-badge--app Vlt-badge--purple Vlt-badge--small\">{{model._vgis.resourceType}}</div>\n\t\t<div class=\"Vlt-btn-group Vlt-btn-group--hover\">\n\t\t\t<a *ngIf='model._vgis.externalLink' attr.href='{{model._vgis.externalLink}}' target='_blank' rel='noopener' class=\"Vlt-btn Vlt-btn--tertiary Vlt-btn--icon\" aria-label='Open external'><svg style='margin-left: 0; margin-right: 0;'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-open\"/></svg></a>\n\t\t\t<button type='button' (click)='open(resource, model)' class=\"Vlt-btn Vlt-btn--tertiary Vlt-btn--icon\" aria-label='Edit'><svg style='margin-left: 0; margin-right: 0;'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-edit\"/></svg></button>\n\t\t</div>\n\t</div>\n</div>\n", styles: [".Vlt-card{margin-bottom:8px;padding:16px}.Vlt-card .Vlt-btn-group.Vlt-btn-group--hover{right:-8px}\n"] }]
|
|
2048
2045
|
}], ctorParameters: function () { return [{ type: i0.ComponentFactoryResolver }, { type: i3.MetaResourceService }, { type: i2.MetaReferenceService }]; }, propDecorators: { resource: [{
|
|
2049
2046
|
type: Input
|
|
2050
2047
|
}], model: [{
|
|
@@ -2103,9 +2100,9 @@ export class MetaFieldContentDirective {
|
|
|
2103
2100
|
this.viewContainerRef = viewContainerRef;
|
|
2104
2101
|
}
|
|
2105
2102
|
}
|
|
2106
|
-
MetaFieldContentDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.
|
|
2107
|
-
MetaFieldContentDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.
|
|
2108
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.
|
|
2103
|
+
MetaFieldContentDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.2", ngImport: i0, type: MetaFieldContentDirective, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
2104
|
+
MetaFieldContentDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.1.2", type: MetaFieldContentDirective, selector: "[metaFieldContent]", ngImport: i0 });
|
|
2105
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.2", ngImport: i0, type: MetaFieldContentDirective, decorators: [{
|
|
2109
2106
|
type: Directive,
|
|
2110
2107
|
args: [{
|
|
2111
2108
|
selector: '[metaFieldContent]'
|
|
@@ -2149,23 +2146,11 @@ export class MetaField extends FieldAbstract {
|
|
|
2149
2146
|
});
|
|
2150
2147
|
}
|
|
2151
2148
|
}
|
|
2152
|
-
MetaField.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.
|
|
2153
|
-
MetaField.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: MetaField, selector: "vgip-meta-field", inputs: { meta: "meta", parent: "parent", integrationCode: "integrationCode", resourceType: "resourceType", index: "index", preview: "preview", theme: "theme" }, outputs: { onChange: "onChange", onLeave: "onLeave" }, viewQueries: [{ propertyName: "fieldContent", first: true, predicate: MetaFieldContentDirective, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: '<ng-template metaFieldContent>Loading</ng-template>', isInline: true, styles: [":host ::ng-deep label.wrapper{padding:0;pointer-events:initial;position:initial;top:initial;transition:none}@media only screen and (max-width: 575px){:host ::ng-deep .hidden-mobile{display:none}}@media only screen and (min-width: 576px){:host ::ng-deep .hidden-desktop{display:none}}:host ::ng-deep .Vlt-form__element>.Vlt-label,:host ::ng-deep .Vlt-form__element>label>.Vlt-label{margin-top:-6px}:host ::ng-deep .Vlt-form__element .Vlt-form__element__hint{color:var(--vgip-meta-input-hint-color)}:host ::ng-deep .Vlt-form__element .Vlt-input input,:host ::ng-deep .Vlt-form__element .Vlt-select select,:host ::ng-deep .Vlt-form__element .Vlt-textarea textarea{color:var(--vgip-meta-input-color)}@media (hover: none){:host ::ng-deep .Vlt-form__element .Vlt-input input,:host ::ng-deep .Vlt-form__element .Vlt-select select,:host ::ng-deep .Vlt-form__element .Vlt-textarea textarea{font-size:16px}}:host ::ng-deep .Vlt-form__element .Vlt-input input::placeholder,:host ::ng-deep .Vlt-form__element .Vlt-select select::placeholder,:host ::ng-deep .Vlt-form__element .Vlt-textarea textarea::placeholder{color:var(--vgip-meta-input-placeholder-color)}:host ::ng-deep .Vlt-form__element label{color:var(--vgip-meta-input-label-color)}:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-form-error-style,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input.ng-untouched:invalid,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-select select.ng-untouched:invalid,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea.ng-untouched:invalid,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-custom-select__input:invalid,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-radio__icon,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-checkbox__icon,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-radio__icon,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-checkbox__icon{background:var(--vgip-meta-input-bg-color);border-color:var(--vgip-meta-input-border-color)}:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-form-error-style:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input.ng-untouched:invalid:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-select select.ng-untouched:invalid:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea.ng-untouched:invalid:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-custom-select__input:invalid:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-radio__icon:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-checkbox__icon:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-radio__icon:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-checkbox__icon:disabled{background:var(--vgip-meta-input-disabled-bg-color);border-color:var(--vgip-meta-input-disabled-border-color)}:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-form-error-style:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-form-error-style:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-form-error-style .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input.ng-untouched:invalid:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input.ng-untouched:invalid:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input.ng-untouched:invalid .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-select select.ng-untouched:invalid:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-select select.ng-untouched:invalid:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-select select.ng-untouched:invalid .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea.ng-untouched:invalid:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea.ng-untouched:invalid:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea.ng-untouched:invalid .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-custom-select__input:invalid:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-custom-select__input:invalid:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-custom-select__input:invalid .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-radio__icon:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-radio__icon:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-radio__icon .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-checkbox__icon:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-checkbox__icon:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-checkbox__icon .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-radio__icon:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-radio__icon:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-radio__icon .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-checkbox__icon:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-checkbox__icon:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-checkbox__icon .active{border-color:var(--vgip-meta-input-active-border-color)}:host ::ng-deep .Vlt-form__element.Vlt-form__element--error .Vlt-input input:focus,:host ::ng-deep .Vlt-form__element.Vlt-form__element--error .Vlt-select select:focus,:host ::ng-deep .Vlt-form__element.Vlt-form__element--error .Vlt-textarea textarea:focus,:host ::ng-deep .Vlt-form__element.Vlt-form__element--error .Vlt-custom-select__input:focus{border-color:#f25a6b}:host ::ng-deep .Vlt-dropdown__link{padding:12px}:host ::ng-deep .Vlt-dropdown__link svg{margin-left:0}:host ::ng-deep .Vlt-dropdown__link small{line-height:inherit}:host ::ng-deep .Vlt-dropdown__link.Vlt-dropdown__link--selected:after{width:20px;top:14px;background:var(--vgip-meta-dropdown-check-icon) no-repeat right center;background-size:contain}:host ::ng-deep .Vlt-dropdown__block{padding:2px 16px}:host ::ng-deep .meta-field-reference .Vlt-dropdown__link.has-type.Vlt-dropdown__link--selected:after{position:initial}:host ::ng-deep .Vlt-dropdown__panel__content{background:var(--vgip-meta-dropdown-bg-color);box-shadow:var(--vgip-meta-dropdown-shadow)}:host ::ng-deep .Vlt-dropdown__panel__content .Vlt-dropdown__link,:host ::ng-deep .Vlt-dropdown__panel__content .Vlt-dropdown__block{color:var(--vgip-meta-input-color)}:host ::ng-deep .Vlt-dropdown__panel__content .Vlt-dropdown__scroll::-webkit-scrollbar{width:8px}:host ::ng-deep .Vlt-dropdown__panel__content .Vlt-dropdown__scroll::-webkit-scrollbar-thumb{background-color:var(--vgip-meta-scrollbar-color);border:2px solid transparent;border-radius:6px;background-clip:content-box}:host ::ng-deep .Vlt-dropdown__panel__content.suggestions{background:var(--vgip-meta-suggestions-bg-color)}:host ::ng-deep .Vlt-dropdown__panel{z-index:999}:host ::ng-deep .Vlt-dropdown__panel__content--scroll-area{padding:0}:host ::ng-deep .Vlt-composite__append--icon{bottom:0;height:initial}:host ::ng-deep .search-progress{display:block;position:relative;width:100%;height:3px;margin-top:-3px;padding-top:0!important;margin-bottom:0!important}:host ::ng-deep .search-progress .container{display:block;position:relative;overflow:hidden;width:100%;height:3px;transform:translate(0) scale(1)}:host ::ng-deep .search-progress .container .bar{position:absolute;left:0;top:0;bottom:0;width:100%;height:3px;border-radius:50%;transition:all .3s linear;animation:query .9s infinite cubic-bezier(.3,.6,.6,1)}@keyframes query{0%{opacity:1;transform:translate(35%) scaleX(.3)}to{opacity:0;transform:translate(-50%) scaleX(0)}}::ng-deep vgip-meta-field.shown vgip-meta-field{display:initial}::ng-deep vgip-meta-field .vgip-meta-field-preview{display:flex;flex-direction:row;padding-bottom:5px;padding-top:5px;margin-left:10px;border-bottom:1px solid #e7ebee}::ng-deep vgip-meta-field .vgip-meta-field-preview .vgip-meta-field-label{flex:1 1 100%;max-width:20%;max-height:100%;box-sizing:border-box;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;margin-right:2px}::ng-deep vgip-meta-field .vgip-meta-field-preview .vgip-meta-field-value{min-width:0;width:0;box-sizing:border-box;flex:1;font-weight:bold}\n"], directives: [{ type: MetaFieldContentDirective, selector: "[metaFieldContent]" }] });
|
|
2154
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.
|
|
2149
|
+
MetaField.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.2", ngImport: i0, type: MetaField, deps: [{ token: i0.ComponentFactoryResolver }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
2150
|
+
MetaField.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.2", type: MetaField, selector: "vgip-meta-field", inputs: { meta: "meta", parent: "parent", integrationCode: "integrationCode", resourceType: "resourceType", index: "index", preview: "preview", theme: "theme" }, outputs: { onChange: "onChange", onLeave: "onLeave" }, viewQueries: [{ propertyName: "fieldContent", first: true, predicate: MetaFieldContentDirective, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: '<ng-template metaFieldContent>Loading</ng-template>', isInline: true, styles: [":host ::ng-deep label.wrapper{padding:0;pointer-events:initial;position:initial;top:initial;transition:none}@media only screen and (max-width: 575px){:host ::ng-deep .hidden-mobile{display:none}}@media only screen and (min-width: 576px){:host ::ng-deep .hidden-desktop{display:none}}:host ::ng-deep .Vlt-form__element>.Vlt-label,:host ::ng-deep .Vlt-form__element>label>.Vlt-label{margin-top:-6px}:host ::ng-deep .Vlt-form__element .Vlt-form__element__hint{color:var(--vgip-meta-input-hint-color)}:host ::ng-deep .Vlt-form__element .Vlt-input input,:host ::ng-deep .Vlt-form__element .Vlt-select select,:host ::ng-deep .Vlt-form__element .Vlt-textarea textarea{color:var(--vgip-meta-input-color)}@media (hover: none){:host ::ng-deep .Vlt-form__element .Vlt-input input,:host ::ng-deep .Vlt-form__element .Vlt-select select,:host ::ng-deep .Vlt-form__element .Vlt-textarea textarea{font-size:16px}}:host ::ng-deep .Vlt-form__element .Vlt-input input::placeholder,:host ::ng-deep .Vlt-form__element .Vlt-select select::placeholder,:host ::ng-deep .Vlt-form__element .Vlt-textarea textarea::placeholder{color:var(--vgip-meta-input-placeholder-color)}:host ::ng-deep .Vlt-form__element label{color:var(--vgip-meta-input-label-color)}:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-form-error-style,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input.ng-untouched:invalid,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-select select.ng-untouched:invalid,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea.ng-untouched:invalid,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-custom-select__input:invalid,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-radio__icon,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-checkbox__icon,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-radio__icon,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-checkbox__icon{background:var(--vgip-meta-input-bg-color);border-color:var(--vgip-meta-input-border-color)}:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-form-error-style:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input.ng-untouched:invalid:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-select select.ng-untouched:invalid:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea.ng-untouched:invalid:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-custom-select__input:invalid:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-radio__icon:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-checkbox__icon:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-radio__icon:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-checkbox__icon:disabled{background:var(--vgip-meta-input-disabled-bg-color);border-color:var(--vgip-meta-input-disabled-border-color)}:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-form-error-style:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-form-error-style:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-form-error-style .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input.ng-untouched:invalid:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input.ng-untouched:invalid:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input.ng-untouched:invalid .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-select select.ng-untouched:invalid:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-select select.ng-untouched:invalid:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-select select.ng-untouched:invalid .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea.ng-untouched:invalid:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea.ng-untouched:invalid:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea.ng-untouched:invalid .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-custom-select__input:invalid:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-custom-select__input:invalid:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-custom-select__input:invalid .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-radio__icon:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-radio__icon:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-radio__icon .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-checkbox__icon:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-checkbox__icon:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-checkbox__icon .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-radio__icon:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-radio__icon:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-radio__icon .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-checkbox__icon:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-checkbox__icon:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-checkbox__icon .active{border-color:var(--vgip-meta-input-active-border-color)}:host ::ng-deep .Vlt-form__element.Vlt-form__element--error .Vlt-input input:focus,:host ::ng-deep .Vlt-form__element.Vlt-form__element--error .Vlt-select select:focus,:host ::ng-deep .Vlt-form__element.Vlt-form__element--error .Vlt-textarea textarea:focus,:host ::ng-deep .Vlt-form__element.Vlt-form__element--error .Vlt-custom-select__input:focus{border-color:#f25a6b}:host ::ng-deep .Vlt-dropdown__link{padding:12px}:host ::ng-deep .Vlt-dropdown__link svg{margin-left:0}:host ::ng-deep .Vlt-dropdown__link small{line-height:inherit}:host ::ng-deep .Vlt-dropdown__link.Vlt-dropdown__link--selected:after{width:20px;top:14px;background:var(--vgip-meta-dropdown-check-icon) no-repeat right center;background-size:contain}:host ::ng-deep .Vlt-dropdown__block{padding:2px 16px}:host ::ng-deep .meta-field-reference .Vlt-dropdown__link.has-type.Vlt-dropdown__link--selected:after{position:initial}:host ::ng-deep .Vlt-dropdown__panel__content{background:var(--vgip-meta-dropdown-bg-color);box-shadow:var(--vgip-meta-dropdown-shadow)}:host ::ng-deep .Vlt-dropdown__panel__content .Vlt-dropdown__link,:host ::ng-deep .Vlt-dropdown__panel__content .Vlt-dropdown__block{color:var(--vgip-meta-input-color)}:host ::ng-deep .Vlt-dropdown__panel__content .Vlt-dropdown__scroll::-webkit-scrollbar{width:8px}:host ::ng-deep .Vlt-dropdown__panel__content .Vlt-dropdown__scroll::-webkit-scrollbar-thumb{background-color:var(--vgip-meta-scrollbar-color);border:2px solid transparent;border-radius:6px;background-clip:content-box}:host ::ng-deep .Vlt-dropdown__panel__content.suggestions{background:var(--vgip-meta-suggestions-bg-color)}:host ::ng-deep .Vlt-dropdown__panel{z-index:999}:host ::ng-deep .Vlt-dropdown__panel__content--scroll-area{padding:0}:host ::ng-deep .Vlt-composite__append--icon{bottom:0;height:initial}:host ::ng-deep .search-progress{display:block;position:relative;width:100%;height:3px;margin-top:-3px;padding-top:0!important;margin-bottom:0!important}:host ::ng-deep .search-progress .container{display:block;position:relative;overflow:hidden;width:100%;height:3px;transform:translate(0) scale(1)}:host ::ng-deep .search-progress .container .bar{position:absolute;left:0;top:0;bottom:0;width:100%;height:3px;border-radius:50%;transition:all .3s linear;animation:query .9s infinite cubic-bezier(.3,.6,.6,1)}@keyframes query{0%{opacity:1;transform:translate(35%) scaleX(.3)}to{opacity:0;transform:translate(-50%) scaleX(0)}}::ng-deep vgip-meta-field.shown vgip-meta-field{display:initial}::ng-deep vgip-meta-field .vgip-meta-field-preview{display:flex;flex-direction:row;padding-bottom:5px;padding-top:5px;margin-left:10px;border-bottom:1px solid #e7ebee}::ng-deep vgip-meta-field .vgip-meta-field-preview .vgip-meta-field-label{flex:1 1 100%;max-width:20%;max-height:100%;box-sizing:border-box;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;margin-right:2px}::ng-deep vgip-meta-field .vgip-meta-field-preview .vgip-meta-field-value{min-width:0;width:0;box-sizing:border-box;flex:1;font-weight:bold}\n"], directives: [{ type: MetaFieldContentDirective, selector: "[metaFieldContent]" }] });
|
|
2151
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.2", ngImport: i0, type: MetaField, decorators: [{
|
|
2155
2152
|
type: Component,
|
|
2156
|
-
args: [{ selector: 'vgip-meta-field', template: '<ng-template metaFieldContent>Loading</ng-template>', entryComponents: [
|
|
2157
|
-
FieldUnknown,
|
|
2158
|
-
FieldInput,
|
|
2159
|
-
FieldText,
|
|
2160
|
-
FieldSelect,
|
|
2161
|
-
FieldReference,
|
|
2162
|
-
FieldComposite,
|
|
2163
|
-
FieldBoolean,
|
|
2164
|
-
FieldRadio,
|
|
2165
|
-
FieldList,
|
|
2166
|
-
FieldRichtext,
|
|
2167
|
-
FieldDatetime
|
|
2168
|
-
], styles: [":host ::ng-deep label.wrapper{padding:0;pointer-events:initial;position:initial;top:initial;transition:none}@media only screen and (max-width: 575px){:host ::ng-deep .hidden-mobile{display:none}}@media only screen and (min-width: 576px){:host ::ng-deep .hidden-desktop{display:none}}:host ::ng-deep .Vlt-form__element>.Vlt-label,:host ::ng-deep .Vlt-form__element>label>.Vlt-label{margin-top:-6px}:host ::ng-deep .Vlt-form__element .Vlt-form__element__hint{color:var(--vgip-meta-input-hint-color)}:host ::ng-deep .Vlt-form__element .Vlt-input input,:host ::ng-deep .Vlt-form__element .Vlt-select select,:host ::ng-deep .Vlt-form__element .Vlt-textarea textarea{color:var(--vgip-meta-input-color)}@media (hover: none){:host ::ng-deep .Vlt-form__element .Vlt-input input,:host ::ng-deep .Vlt-form__element .Vlt-select select,:host ::ng-deep .Vlt-form__element .Vlt-textarea textarea{font-size:16px}}:host ::ng-deep .Vlt-form__element .Vlt-input input::placeholder,:host ::ng-deep .Vlt-form__element .Vlt-select select::placeholder,:host ::ng-deep .Vlt-form__element .Vlt-textarea textarea::placeholder{color:var(--vgip-meta-input-placeholder-color)}:host ::ng-deep .Vlt-form__element label{color:var(--vgip-meta-input-label-color)}:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-form-error-style,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input.ng-untouched:invalid,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-select select.ng-untouched:invalid,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea.ng-untouched:invalid,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-custom-select__input:invalid,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-radio__icon,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-checkbox__icon,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-radio__icon,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-checkbox__icon{background:var(--vgip-meta-input-bg-color);border-color:var(--vgip-meta-input-border-color)}:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-form-error-style:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input.ng-untouched:invalid:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-select select.ng-untouched:invalid:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea.ng-untouched:invalid:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-custom-select__input:invalid:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-radio__icon:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-checkbox__icon:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-radio__icon:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-checkbox__icon:disabled{background:var(--vgip-meta-input-disabled-bg-color);border-color:var(--vgip-meta-input-disabled-border-color)}:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-form-error-style:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-form-error-style:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-form-error-style .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input.ng-untouched:invalid:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input.ng-untouched:invalid:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input.ng-untouched:invalid .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-select select.ng-untouched:invalid:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-select select.ng-untouched:invalid:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-select select.ng-untouched:invalid .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea.ng-untouched:invalid:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea.ng-untouched:invalid:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea.ng-untouched:invalid .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-custom-select__input:invalid:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-custom-select__input:invalid:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-custom-select__input:invalid .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-radio__icon:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-radio__icon:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-radio__icon .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-checkbox__icon:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-checkbox__icon:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-checkbox__icon .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-radio__icon:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-radio__icon:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-radio__icon .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-checkbox__icon:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-checkbox__icon:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-checkbox__icon .active{border-color:var(--vgip-meta-input-active-border-color)}:host ::ng-deep .Vlt-form__element.Vlt-form__element--error .Vlt-input input:focus,:host ::ng-deep .Vlt-form__element.Vlt-form__element--error .Vlt-select select:focus,:host ::ng-deep .Vlt-form__element.Vlt-form__element--error .Vlt-textarea textarea:focus,:host ::ng-deep .Vlt-form__element.Vlt-form__element--error .Vlt-custom-select__input:focus{border-color:#f25a6b}:host ::ng-deep .Vlt-dropdown__link{padding:12px}:host ::ng-deep .Vlt-dropdown__link svg{margin-left:0}:host ::ng-deep .Vlt-dropdown__link small{line-height:inherit}:host ::ng-deep .Vlt-dropdown__link.Vlt-dropdown__link--selected:after{width:20px;top:14px;background:var(--vgip-meta-dropdown-check-icon) no-repeat right center;background-size:contain}:host ::ng-deep .Vlt-dropdown__block{padding:2px 16px}:host ::ng-deep .meta-field-reference .Vlt-dropdown__link.has-type.Vlt-dropdown__link--selected:after{position:initial}:host ::ng-deep .Vlt-dropdown__panel__content{background:var(--vgip-meta-dropdown-bg-color);box-shadow:var(--vgip-meta-dropdown-shadow)}:host ::ng-deep .Vlt-dropdown__panel__content .Vlt-dropdown__link,:host ::ng-deep .Vlt-dropdown__panel__content .Vlt-dropdown__block{color:var(--vgip-meta-input-color)}:host ::ng-deep .Vlt-dropdown__panel__content .Vlt-dropdown__scroll::-webkit-scrollbar{width:8px}:host ::ng-deep .Vlt-dropdown__panel__content .Vlt-dropdown__scroll::-webkit-scrollbar-thumb{background-color:var(--vgip-meta-scrollbar-color);border:2px solid transparent;border-radius:6px;background-clip:content-box}:host ::ng-deep .Vlt-dropdown__panel__content.suggestions{background:var(--vgip-meta-suggestions-bg-color)}:host ::ng-deep .Vlt-dropdown__panel{z-index:999}:host ::ng-deep .Vlt-dropdown__panel__content--scroll-area{padding:0}:host ::ng-deep .Vlt-composite__append--icon{bottom:0;height:initial}:host ::ng-deep .search-progress{display:block;position:relative;width:100%;height:3px;margin-top:-3px;padding-top:0!important;margin-bottom:0!important}:host ::ng-deep .search-progress .container{display:block;position:relative;overflow:hidden;width:100%;height:3px;transform:translate(0) scale(1)}:host ::ng-deep .search-progress .container .bar{position:absolute;left:0;top:0;bottom:0;width:100%;height:3px;border-radius:50%;transition:all .3s linear;animation:query .9s infinite cubic-bezier(.3,.6,.6,1)}@keyframes query{0%{opacity:1;transform:translate(35%) scaleX(.3)}to{opacity:0;transform:translate(-50%) scaleX(0)}}::ng-deep vgip-meta-field.shown vgip-meta-field{display:initial}::ng-deep vgip-meta-field .vgip-meta-field-preview{display:flex;flex-direction:row;padding-bottom:5px;padding-top:5px;margin-left:10px;border-bottom:1px solid #e7ebee}::ng-deep vgip-meta-field .vgip-meta-field-preview .vgip-meta-field-label{flex:1 1 100%;max-width:20%;max-height:100%;box-sizing:border-box;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;margin-right:2px}::ng-deep vgip-meta-field .vgip-meta-field-preview .vgip-meta-field-value{min-width:0;width:0;box-sizing:border-box;flex:1;font-weight:bold}\n"] }]
|
|
2153
|
+
args: [{ selector: 'vgip-meta-field', template: '<ng-template metaFieldContent>Loading</ng-template>', styles: [":host ::ng-deep label.wrapper{padding:0;pointer-events:initial;position:initial;top:initial;transition:none}@media only screen and (max-width: 575px){:host ::ng-deep .hidden-mobile{display:none}}@media only screen and (min-width: 576px){:host ::ng-deep .hidden-desktop{display:none}}:host ::ng-deep .Vlt-form__element>.Vlt-label,:host ::ng-deep .Vlt-form__element>label>.Vlt-label{margin-top:-6px}:host ::ng-deep .Vlt-form__element .Vlt-form__element__hint{color:var(--vgip-meta-input-hint-color)}:host ::ng-deep .Vlt-form__element .Vlt-input input,:host ::ng-deep .Vlt-form__element .Vlt-select select,:host ::ng-deep .Vlt-form__element .Vlt-textarea textarea{color:var(--vgip-meta-input-color)}@media (hover: none){:host ::ng-deep .Vlt-form__element .Vlt-input input,:host ::ng-deep .Vlt-form__element .Vlt-select select,:host ::ng-deep .Vlt-form__element .Vlt-textarea textarea{font-size:16px}}:host ::ng-deep .Vlt-form__element .Vlt-input input::placeholder,:host ::ng-deep .Vlt-form__element .Vlt-select select::placeholder,:host ::ng-deep .Vlt-form__element .Vlt-textarea textarea::placeholder{color:var(--vgip-meta-input-placeholder-color)}:host ::ng-deep .Vlt-form__element label{color:var(--vgip-meta-input-label-color)}:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-form-error-style,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input.ng-untouched:invalid,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-select select.ng-untouched:invalid,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea.ng-untouched:invalid,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-custom-select__input:invalid,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-radio__icon,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-checkbox__icon,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-radio__icon,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-checkbox__icon{background:var(--vgip-meta-input-bg-color);border-color:var(--vgip-meta-input-border-color)}:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-form-error-style:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input.ng-untouched:invalid:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-select select.ng-untouched:invalid:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea.ng-untouched:invalid:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-custom-select__input:invalid:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-radio__icon:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-checkbox__icon:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-radio__icon:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-checkbox__icon:disabled{background:var(--vgip-meta-input-disabled-bg-color);border-color:var(--vgip-meta-input-disabled-border-color)}:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-form-error-style:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-form-error-style:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-form-error-style .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input.ng-untouched:invalid:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input.ng-untouched:invalid:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input.ng-untouched:invalid .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-select select.ng-untouched:invalid:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-select select.ng-untouched:invalid:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-select select.ng-untouched:invalid .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea.ng-untouched:invalid:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea.ng-untouched:invalid:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea.ng-untouched:invalid .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-custom-select__input:invalid:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-custom-select__input:invalid:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-custom-select__input:invalid .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-radio__icon:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-radio__icon:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-radio__icon .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-checkbox__icon:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-checkbox__icon:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-checkbox__icon .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-radio__icon:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-radio__icon:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-radio__icon .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-checkbox__icon:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-checkbox__icon:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-checkbox__icon .active{border-color:var(--vgip-meta-input-active-border-color)}:host ::ng-deep .Vlt-form__element.Vlt-form__element--error .Vlt-input input:focus,:host ::ng-deep .Vlt-form__element.Vlt-form__element--error .Vlt-select select:focus,:host ::ng-deep .Vlt-form__element.Vlt-form__element--error .Vlt-textarea textarea:focus,:host ::ng-deep .Vlt-form__element.Vlt-form__element--error .Vlt-custom-select__input:focus{border-color:#f25a6b}:host ::ng-deep .Vlt-dropdown__link{padding:12px}:host ::ng-deep .Vlt-dropdown__link svg{margin-left:0}:host ::ng-deep .Vlt-dropdown__link small{line-height:inherit}:host ::ng-deep .Vlt-dropdown__link.Vlt-dropdown__link--selected:after{width:20px;top:14px;background:var(--vgip-meta-dropdown-check-icon) no-repeat right center;background-size:contain}:host ::ng-deep .Vlt-dropdown__block{padding:2px 16px}:host ::ng-deep .meta-field-reference .Vlt-dropdown__link.has-type.Vlt-dropdown__link--selected:after{position:initial}:host ::ng-deep .Vlt-dropdown__panel__content{background:var(--vgip-meta-dropdown-bg-color);box-shadow:var(--vgip-meta-dropdown-shadow)}:host ::ng-deep .Vlt-dropdown__panel__content .Vlt-dropdown__link,:host ::ng-deep .Vlt-dropdown__panel__content .Vlt-dropdown__block{color:var(--vgip-meta-input-color)}:host ::ng-deep .Vlt-dropdown__panel__content .Vlt-dropdown__scroll::-webkit-scrollbar{width:8px}:host ::ng-deep .Vlt-dropdown__panel__content .Vlt-dropdown__scroll::-webkit-scrollbar-thumb{background-color:var(--vgip-meta-scrollbar-color);border:2px solid transparent;border-radius:6px;background-clip:content-box}:host ::ng-deep .Vlt-dropdown__panel__content.suggestions{background:var(--vgip-meta-suggestions-bg-color)}:host ::ng-deep .Vlt-dropdown__panel{z-index:999}:host ::ng-deep .Vlt-dropdown__panel__content--scroll-area{padding:0}:host ::ng-deep .Vlt-composite__append--icon{bottom:0;height:initial}:host ::ng-deep .search-progress{display:block;position:relative;width:100%;height:3px;margin-top:-3px;padding-top:0!important;margin-bottom:0!important}:host ::ng-deep .search-progress .container{display:block;position:relative;overflow:hidden;width:100%;height:3px;transform:translate(0) scale(1)}:host ::ng-deep .search-progress .container .bar{position:absolute;left:0;top:0;bottom:0;width:100%;height:3px;border-radius:50%;transition:all .3s linear;animation:query .9s infinite cubic-bezier(.3,.6,.6,1)}@keyframes query{0%{opacity:1;transform:translate(35%) scaleX(.3)}to{opacity:0;transform:translate(-50%) scaleX(0)}}::ng-deep vgip-meta-field.shown vgip-meta-field{display:initial}::ng-deep vgip-meta-field .vgip-meta-field-preview{display:flex;flex-direction:row;padding-bottom:5px;padding-top:5px;margin-left:10px;border-bottom:1px solid #e7ebee}::ng-deep vgip-meta-field .vgip-meta-field-preview .vgip-meta-field-label{flex:1 1 100%;max-width:20%;max-height:100%;box-sizing:border-box;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;margin-right:2px}::ng-deep vgip-meta-field .vgip-meta-field-preview .vgip-meta-field-value{min-width:0;width:0;box-sizing:border-box;flex:1;font-weight:bold}\n"] }]
|
|
2169
2154
|
}], ctorParameters: function () { return [{ type: i0.ComponentFactoryResolver }, { type: i0.ElementRef }]; }, propDecorators: { meta: [{
|
|
2170
2155
|
type: Input
|
|
2171
2156
|
}], parent: [{
|
|
@@ -2188,4 +2173,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
|
|
|
2188
2173
|
type: ViewChild,
|
|
2189
2174
|
args: [MetaFieldContentDirective, { static: true }]
|
|
2190
2175
|
}] } });
|
|
2191
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXRhLXVpL3NyYy9saWIvZmllbGQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXRhLXVpL3NyYy9saWIvcmVmRGlhbG9nL3ZpZXcuaHRtbCIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL21ldGEtdWkvc3JjL2xpYi9maWVsZENvbXBvc2l0ZS92aWV3Lmh0bWwiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXRhLXVpL3NyYy9saWIvZmllbGRTZWxlY3Qvdmlldy5odG1sIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWV0YS11aS9zcmMvbGliL2ZpZWxkUmVmZXJlbmNlL3ZpZXcuaHRtbCIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL21ldGEtdWkvc3JjL2xpYi9maWVsZExpc3Qvdmlldy5odG1sIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWV0YS11aS9zcmMvbGliL2xheW91dC92aWV3Lmh0bWwiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXRhLXVpL3NyYy9saWIvcmVzb3VyY2Uvdmlldy5odG1sIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWV0YS11aS9zcmMvbGliL3Jlc291cmNlQ2FyZC92aWV3Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUMxQyxTQUFTLEVBQWdDLFlBQVksRUFDMUMsTUFBTSxlQUFlLENBQUM7QUFDbkMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBUXBFLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FB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c0JBQWhCLE1BQU07Z0JBRWlELFlBQVk7c0JBQW5FLFNBQVM7dUJBQUMseUJBQXlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIEBBdXRob3I6IEFsZXhhbmRlci5WYW5nZWxvdkB2b25hZ2UuY29tIFxuICogQERhdGU6IDIwMTktMDktMTkgMTc6MzU6MTkgXG4gKiBATGFzdCBNb2RpZmllZCBieTogQWxleGFuZGVyLlZhbmdlbG92QHZvbmFnZS5jb21cbiAqIEBMYXN0IE1vZGlmaWVkIHRpbWU6IDIwMjAtMDQtMTggMTg6MTE6NDJcbiAqL1xuXG5pbXBvcnQgeyBEaXJlY3RpdmUsIENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgT25Jbml0LCBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIFxuICBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgQ2hhbmdlRGV0ZWN0b3JSZWYsIEFmdGVyQ29udGVudENoZWNrZWQsXG4gIE9uQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbENvbnRhaW5lciwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuLy8gaW1wb3J0IHsgTWV0YVJlZkRpYWxvZyB9IGZyb20gJy4vcmVmRGlhbG9nJztcbmltcG9ydCB7IE1ldGFSZWZlcmVuY2VTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9tZXRhUmVmZXJlbmNlJztcbmltcG9ydCB7IE1ldGFSZXNvdXJjZVNlcnZpY2UsIElNZXRhUmVzb3VyY2VDb25maWcgfSBmcm9tICcuL3NlcnZpY2VzL21ldGFSZXNvdXJjZSc7XG5pbXBvcnQgeyBNZXRhTXNnU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvbWV0YU1zZyc7XG5pbXBvcnQgeyBNZXRhQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL21ldGFDb250ZXh0JztcbmltcG9ydCB7IE1ldGFUcmFja2VyU2VydmljZSwgSU1ldGFUcmFja2VyRXZlbnQgfSBmcm9tICcuL3NlcnZpY2VzL21ldGFUcmFja2VyJztcbmltcG9ydCB7IG1ldGFEYXJrLCBtZXRhTGlnaHQgfSBmcm9tICcuL2NvbW1vbi91dGlscy9jb2xvclRoZW1lcyc7XG5pbXBvcnQgeyBtZXRhTm9ybWFsaXplciB9IGZyb20gJy4vY29tbW9uL21ldGFOb3JtYWxpemVyJztcbmltcG9ydCB7IHRlbXBsYXRlQnVpbGRlciB9IGZyb20gJy4vY29tbW9uL3V0aWxzL3RlbXBsYXRlQnVpbGRlcic7XG5cbmltcG9ydCB7IEZpZWxkQWJzdHJhY3QgfSBmcm9tICcuL2ZpZWxkQWJzdHJhY3QnO1xuaW1wb3J0IHsgRmllbGRVbmtub3duIH0gZnJvbSAnLi9maWVsZFVua25vd24nO1xuaW1wb3J0IHsgRmllbGRUZXh0IH0gZnJvbSAnLi9maWVsZFRleHQnO1xuaW1wb3J0IHsgRmllbGRJbnB1dCB9IGZyb20gJy4vZmllbGRJbnB1dCc7XG4vLyBpbXBvcnQgeyBGaWVsZFNlbGVjdCB9IGZyb20gJy4vZmllbGRTZWxlY3QnO1xuLy8gaW1wb3J0IHsgRmllbGRSZWZlcmVuY2UgfSBmcm9tICcuL2ZpZWxkUmVmZXJlbmNlJztcbi8vIGltcG9ydCB7IEZpZWxkQ29tcG9zaXRlIH0gZnJvbSAnLi9maWVsZENvbXBvc2l0ZSc7XG5pbXBvcnQgeyBGaWVsZEJvb2xlYW4gfSBmcm9tICcuL2ZpZWxkQm9vbGVhbic7XG5pbXBvcnQgeyBGaWVsZFJhZGlvIH0gZnJvbSAnLi9maWVsZFJhZGlvJztcbi8vIGltcG9ydCB7IEZpZWxkTGlzdCB9IGZyb20gJy4vZmllbGRMaXN0JztcbmltcG9ydCB7IEZpZWxkUmljaHRleHQgfSBmcm9tICcuL2ZpZWxkUmljaHRleHQnO1xuaW1wb3J0IHsgRmllbGREYXRldGltZSB9IGZyb20gJy4vZmllbGREYXRldGltZSc7XG5cblxuLy8vLyBSRUYgRElBTE9HXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6ICcuL3JlZkRpYWxvZy92aWV3Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yZWZEaWFsb2cvc3R5bGUuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIE1ldGFSZWZEaWFsb2cgaW1wbGVtZW50cyBPbkluaXQge1xuICBtb2RhbDogSFRNTEVsZW1lbnQ7XG4gIG9uQ29tcGxldGU6IChyZXN1bHQ/KSA9PiB1bmRlZmluZWQ7XG4gIGZ1bGxSZXNvdXJjZTogYW55O1xuICByZXNvdXJjZXM6IGFueSA9IHt9O1xuICBtb2RlbHM6IGFueSA9IHt9O1xuICByZWZlcmVuY2U6IGFueTtcbiAgY3VycmVudFJlc291cmNlOiBzdHJpbmc7XG4gIHNlcnZpY2VzOiBhbnkgPSB7fTtcbiAgaW50ZWdyYXRpb25Db2RlOiBzdHJpbmc7XG4gIHJlc291cmNlOiBhbnk7XG4gIG1ldGFSZXNvdXJjZTogTWV0YVJlc291cmNlU2VydmljZTtcbiAgaW50ZWdyYXRpb25JY29uOiBzdHJpbmc7XG4gIHByZWZlclJlc291cmNlVHlwZTogc3RyaW5nO1xuICB0aGVtZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWZcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGxldCByZWZlcmVuY2VzID0gKHRoaXMucmVmZXJlbmNlIGluc3RhbmNlb2YgQXJyYXkpID8gdGhpcy5yZWZlcmVuY2UgOiBbdGhpcy5yZWZlcmVuY2VdO1xuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVyc2NvcmUtZGFuZ2xlICovXG4gICAgaWYgKHRoaXMucmVzb3VyY2UgJiYgdGhpcy5yZXNvdXJjZS5fdmdpcykge1xuICAgICAgdGhpcy5mdWxsUmVzb3VyY2UgPSB0aGlzLnJlc291cmNlO1xuICAgICAgdGhpcy5yZXNvdXJjZSA9IHRoaXMucmVzb3VyY2UuX3ZnaXM7XG4gICAgfVxuICAgIC8qIGVzbGludC1lbmFibGUgbm8tdW5kZXJzY29yZS1kYW5nbGUgKi9cbiAgICBpZiAodGhpcy5yZXNvdXJjZSkge1xuICAgICAgcmVmZXJlbmNlcyA9IHJlZmVyZW5jZXMuZmlsdGVyKChyKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc1R5cGUgPSByLm5hbWUgfHwgci5yZXNvdXJjZVR5cGUgfHwgJyc7XG4gICAgICAgIC8vIGNvbXBhcmluZyBjYXNlIGluc2Vuc2l0aXZlLCBiZWNhdXNlIG9mIFplbmRlc2sgY29tbWVudCB2cyBDb21tZW50XG4gICAgICAgIHJldHVybiAocmVzVHlwZS5pZCB8fCByZXNUeXBlIHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSAodGhpcy5yZXNvdXJjZS5yZXNvdXJjZVR5cGUgfHwgdGhpcy5yZXNvdXJjZS50eXBlIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCByZWYgb2YgcmVmZXJlbmNlcykge1xuICAgICAgaWYgKCFyZWYubmFtZSkge1xuICAgICAgICByZWYubmFtZSA9IHJlZi5yZXNvdXJjZVR5cGU7IC8vIHdoZW4gdGhlIHJlc291cmNlIGNvbWVzIGZyb20gcmVzb3VyY2VzIEFQSSwgbm90IGZyb20gbWV0YWRhdGFcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5jdXJyZW50UmVzb3VyY2UpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UmVzb3VyY2UgPSByZWYubmFtZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWYubmFtZSA9PT0gdGhpcy5wcmVmZXJSZXNvdXJjZVR5cGUpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UmVzb3VyY2UgPSB0aGlzLnByZWZlclJlc291cmNlVHlwZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJzOiBhbnkgPSB7XG4gICAgICAgIGludGVncmF0aW9uQ29kZTogdGhpcy5pbnRlZ3JhdGlvbkNvZGUsXG4gICAgICAgIHJlc291cmNlVHlwZTogcmVmLnJlc291cmNlVHlwZSB8fCByZWYubmFtZSxcbiAgICAgICAgcmVmXG4gICAgICB9O1xuICAgICAgaWYgKHRoaXMucmVzb3VyY2UpIHtcbiAgICAgICAgcnMuZXh0ZXJuYWxJZCA9IHRoaXMucmVzb3VyY2UuaWQgfHwgdGhpcy5yZXNvdXJjZS5leHRlcm5hbElkO1xuICAgICAgICBpZiAodGhpcy5yZXNvdXJjZS5ldmVudElkKSB7XG4gICAgICAgICAgcnMuZXZlbnRJZCA9IHRoaXMucmVzb3VyY2UuZXZlbnRJZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5mdWxsUmVzb3VyY2UpIHtcbiAgICAgICAgICBycy5hY3Rpdml0eSA9IHRoaXMuZnVsbFJlc291cmNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJlc291cmNlLmxheW91dElkKSB7XG4gICAgICAgICAgcnMubGF5b3V0SWQgPSB0aGlzLnJlc291cmNlLmxheW91dElkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBycy5wYXJlbnQgPSByZWYucGFyZW50O1xuICAgICAgdGhpcy5yZXNvdXJjZXNbcmVmLm5hbWVdID0gcnM7XG4gICAgICB0aGlzLm1vZGVsc1tyZWYubmFtZV0gPSB7fTtcbiAgICAgIGlmICh0aGlzLnJlc291cmNlKSB7XG4gICAgICAgIHRoaXMubW9kZWxzW3JlZi5uYW1lXS5fdmdpcyA9IHRoaXMucmVzb3VyY2U7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZXJzY29yZS1kYW5nbGVcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm1vZGFsID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNoaWxkTm9kZXNbMF07XG4gICAgdGhpcy5tb2RhbC5jbGFzc0xpc3QucmVtb3ZlKCdWbHQtbW9kYWwtLW91dCcpO1xuICAgIHRoaXMubW9kYWwuY2xhc3NMaXN0LmFkZCgnVmx0LW1vZGFsX3Zpc2libGUnKTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5rZXlFdmVudExpc3RlbmVyKTtcblxuICAgIGlmICh0aGlzLmludGVncmF0aW9uQ29kZSA9PT0gJ21vY2tzJykge1xuICAgICAgdGhpcy5pbnRlZ3JhdGlvbkljb24gPSAnQnJhbmQtaWNvbi12b25hZ2UnO1xuICAgIH0gZWxzZSB7XG4gICAgICBzd2l0Y2ggKHRoaXMuaW50ZWdyYXRpb25Db2RlLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgY2FzZSAnb2ZmaWNlMzY1JzpcbiAgICAgICAgICB0aGlzLmludGVncmF0aW9uSWNvbiA9ICdCcmFuZC1pY29uLW9mZmljZS1jb2xvcic7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3N1Z2FyJzpcbiAgICAgICAgICB0aGlzLmludGVncmF0aW9uSWNvbiA9ICdCcmFuZC1pY29uLXN1Z2FyY3JtLWNvbG9yJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbXNkeW5hbWljcyc6XG4gICAgICAgICAgdGhpcy5pbnRlZ3JhdGlvbkljb24gPSAnQnJhbmQtaWNvbi1keW5hbWljcy1jb2xvcic7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhpcy5pbnRlZ3JhdGlvbkljb24gPSBgQnJhbmQtaWNvbi0keyh0aGlzLmludGVncmF0aW9uQ29kZSB8fCAnJykudG9Mb3dlckNhc2UoKX0tY29sb3JgO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuYXBwbHlUaGVtZSgpO1xuICB9XG5cbiAgZ2V0IGlzRWRpdGFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2VzW3RoaXMuY3VycmVudFJlc291cmNlXS5tZXRhLmxheW91dC5lZGl0YWJsZSAhPT0gZmFsc2U7XG4gIH1cblxuICBnZXQgaXNQZXJzaXN0ZW50KCkge1xuICAgIHJldHVybiB0aGlzLnJlc291cmNlICYmICh0aGlzLnJlc291cmNlLmV4dGVybmFsSWQgfHwgdGhpcy5yZXNvdXJjZS5pZCk7XG4gIH1cblxuICBjbG9zZSgpIHtcbiAgICB0aGlzLm1vZGFsLmNsYXNzTGlzdC5yZW1vdmUoJ1ZsdC1tb2RhbF92aXNpYmxlJyk7XG4gICAgdGhpcy5tb2RhbC5jbGFzc0xpc3QuYWRkKCdWbHQtbW9kYWwtLW91dCcpO1xuICB9XG5cbiAgZGlzbWlzcygpIHtcbiAgICB0aGlzLmNsb3NlKCk7XG4gICAgdGhpcy5vbkNvbXBsZXRlKG51bGwpO1xuICB9XG5cbiAgb25SZXNvdXJjZURvbmUocmVzdWx0KSB7XG4gICAgdGhpcy5jbG9zZSgpO1xuICAgIHRoaXMub25Db21wbGV0ZShyZXN1bHQpO1xuICB9XG5cbiAgc2VsZWN0UmVzb3VyY2UocmVzb3VyY2UpIHtcbiAgICB0aGlzLmN1cnJlbnRSZXNvdXJjZSA9IHJlc291cmNlO1xuICB9XG5cbiAga2VlcE9yZGVyID0gKGEsIGIpID0+IGE7XG5cbiAgcHJpdmF0ZSBrZXlFdmVudExpc3RlbmVyID0gKGV2ZW50KSA9PiB7XG4gICAgaWYgKGV2ZW50ICYmIGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmtleUV2ZW50TGlzdGVuZXIpO1xuICAgICAgdGhpcy5kaXNtaXNzKCk7XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgYXBwbHlUaGVtZSgpIHtcbiAgICBjb25zdCBtZXRhVGhlbWUgPSB0aGlzLnRoZW1lID09PSAnZGFyaycgPyBtZXRhRGFyayA6IG1ldGFMaWdodDtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhtZXRhVGhlbWUucHJvcGVydGllcykpIHtcbiAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShrZXksIG1ldGFUaGVtZS5wcm9wZXJ0aWVzW2tleV0pO1xuICAgIH1cbiAgfVxufVxuXG4vLy8vIENPTVBPU0lURSBGSUVMRFxuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlVXJsOiAnLi9maWVsZENvbXBvc2l0ZS92aWV3Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEZpZWxkQ29tcG9zaXRlIGV4dGVuZHMgRmllbGRBYnN0cmFjdCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIG1ldGE6IGFueTtcblxuICBuZ09uSW5pdCgpIHtcbiAgICAvLyBzdXBlci5uZ09uSW5pdCgpXG4gICAgaWYgKHRoaXMuaXNSb3cpIHtcbiAgICAgIGZvciAoY29uc3QgZiBvZiB0aGlzLm1ldGEuZmllbGRzKSB7XG4gICAgICAgIGlmIChmLnR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgICAgIGYudHlwZSA9ICdzdHJpbmcnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IGlzUm93KCkge1xuICAgIHJldHVybiB0aGlzLm1ldGEuc3VidHlwZSAhPT0gJ2NvbHVtbic7XG4gIH1cblxuICBnZXQgZmllbGRzKCkge1xuICAgIHJldHVybiAodGhpcy5tZXRhLmZpZWxkcyB8fCBbXSkubWFwKChmKSA9PiB7XG4gICAgICBpZiAoZi50eXBlID09PSAndGV4dGFyZWEnKSB7IC8vIG5vIHRleHRhcmVhcyBpbnNpZGUgY29tcG9zaXRlICh1c2Ugc3RyaW5nKVxuICAgICAgICBkZWxldGUgZi50eXBlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGY7XG4gICAgfSk7XG4gIH1cbn1cblxuLy8vLyBTRUxFQ1QgRklFTERcbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZVVybDogJy4vZmllbGRTZWxlY3Qvdmlldy5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZmllbGRTZWxlY3Qvc3R5bGUuc2NzcyddLFxuICB2aWV3UHJvdmlkZXJzOiBbeyBwcm92aWRlOiBDb250cm9sQ29udGFpbmVyLCB1c2VFeGlzdGluZzogTmdGb3JtIH1dLFxuICBlbnRyeUNvbXBvbmVudHM6IFtcbiAgICBNZXRhUmVmRGlhbG9nXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgRmllbGRTZWxlY3QgZXh0ZW5kcyBGaWVsZEFic3RyYWN0IGltcGxlbWVudHMgT25Jbml0IHtcbiAgbXVsdGlwbGU6IGJvb2xlYW47XG4gIGlucHV0OiBIVE1MSW5wdXRFbGVtZW50O1xuICBkcm9wZG93bjogSFRNTEVsZW1lbnQ7XG4gIGRyb3Bkb3duU2Nyb2xsQ29udGFpbmVyOiBIVE1MRWxlbWVudDtcbiAgc2hvd1RleHQ6IHN0cmluZztcbiAgYWN0aXZlU3VnZ2VzdGlvbkluZGV4OiBudW1iZXI7XG4gIHZhbHVlOiBhbnk7XG4gIGlzQ3JlYXRhYmxlID0gZmFsc2U7XG4gIGFzeW5jT3B0aW9uczogQXJyYXk8YW55PjtcbiAgc2VhcmNoaW5nOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIFxuICAgIHByaXZhdGUgcmVmZXJlbmNlU2VydmljZTogTWV0YVJlZmVyZW5jZVNlcnZpY2UsIFxuICAgIHByaXZhdGUgbWV0YVJlc291cmNlOiBNZXRhUmVzb3VyY2VTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKCk7XG4gIH1cbiAgXG4gIHN0YXRpYyBzZXR1cChpbnN0YW5jZSwgcGFyZW50LCBtZXRhKSB7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICAvLyBjb25zb2xlLmxvZygncGFyZW50JywgdGhpcy5wYXJlbnQpO1xuICAgIHRoaXMudmFsaWRhdGlvbkF0dHJpYnV0ZXMgPSBbJ3JlcXVpcmVkJ107XG4gICAgdGhpcy5tdWx0aXBsZSA9ICh0aGlzLm1ldGEudHlwZSA9PT0gJ211bHRpcGlja2xpc3QnKSB8fCB0aGlzLm1ldGEubXVsdGlwbGU7XG4gICAgY29uc3Qgb3JpZ1ZhbHVlID0gdGhpcy5wYXJlbnRbdGhpcy5tZXRhLm5hbWVdO1xuICAgIGlmICh0aGlzLm1ldGEucmVmZXJlbmNlKSB7XG4gICAgICB0aGlzLmlzQ3JlYXRhYmxlID0gdHJ1ZTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMucGFyZW50LCB0aGlzLm1ldGEubmFtZSwge1xuICAgICAgc2V0OiAodmFsdWUpID0+IHtcbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUgaW5zdGFuY2VvZiBBcnJheSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHZhbHVlID0gW3ZhbHVlXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCF2YWx1ZSB8fCB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9ICh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5KSA/IHZhbHVlIDogKHZhbHVlIHx8ICcnKS5zcGxpdCgnOycpOyAvLyBzaG91bGQgbm90IGhhbmRsZSBpbmNvcnJlY3QgdmFsdWVzXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gW107XG4gICAgICAgICAgICB0aGlzLm1vZGVsID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHYgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBvIG9mIHRoaXMub3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgaWYgKCh2LmlkIHx8IHYpID09PSAoby5pZCB8fCBvLnZhbHVlIHx8IG8ubmFtZSB8fCAwKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnB1c2gobyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUucHVzaCh2KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMubW9kZWwubGVuZ3RoICYmICF0aGlzLmlzUGVyc2lzdGVkUGFyZW50KSB7XG4gICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLm1vZGVsO1xuICAgICAgICAgICAgICBkZWxldGUgdGhpcy52YWx1ZTtcbiAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuc2hvd1RleHQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnNob3dUZXh0ID0gKHRoaXMubW9kZWwgfHwgW10pLm1hcCgobykgPT4gby5sYWJlbCB8fCBvKS5qb2luKCcsICcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgbyBvZiB0aGlzLm1ldGEub3B0aW9ucykge1xuICAgICAgICAgICAgICBpZiAoKHZhbHVlLmlkIHx8IHZhbHVlKSA9PT0gKG8uaWQgfHwgby52YWx1ZSB8fCBvLm5hbWUgfHwgbykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsID0gbztcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5tb2RlbFRvVmFsdWUobywgdGhpcy5tZXRhLnZhbHVlVHlwZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93VGV4dCA9IG8ubGFiZWwgfHwgbztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5tb2RlbDtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnZhbHVlO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuc2hvd1RleHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMub25TdWJqZWN0Q2hhbmdlKHRoaXMubW9kZWwpO1xuICAgICAgICB0aGlzLm1ldGEuJG9wdGlvbmFsID0gdGhpcy5pc09wdGlvbmFsO1xuICAgICAgfSxcbiAgICAgIGdldDogKCkgPT4gdGhpcy52YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRoaXMuc2VuZFRvU2VydmVyLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgXG4gICAgaWYgKG9yaWdWYWx1ZSkge1xuICAgICAgdGhpcy5wYXJlbnRbdGhpcy5tZXRhLm5hbWVdID0gb3JpZ1ZhbHVlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRlZmF1bHQgJiYgIXRoaXMubW9kZWwpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnBhcmVudFt0aGlzLm1ldGEubmFtZV0gPSB0aGlzLmRlZmF1bHQuaWQgfHwgdGhpcy5kZWZhdWx0O1xuICAgICAgfSwgMCk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZih0aGlzLm1ldGEuZW5hYmxlZCkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZih0aGlzLm1ldGEuZW5hYmxlZCkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGZvciAoY29uc3QgcGFyIG9mIE9iamVjdC5rZXlzKHRoaXMubWV0YS5lbmFibGVkKSkge1xuICAgICAgICAgIGNvbnN0IHBhclZhbHVlID0gdGhpcy5wYXJlbnRbcGFyXTtcbiAgICAgICAgICBpZiAocGFyVmFsdWUpIHsgXG4gICAgICAgICAgICAvLyBsb2dpYyBmb3Igc3BlY2lmaWMgdmFsdWVzLCB0aGlzIHdvcmtzIG9ubHkgZm9yIHRydWVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5sb2dpY2FsRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmZpbHRlck9wdGlvbnMoKTtcbiAgICAgICAgICB0aGlzLnBhcmVudENoYW5nZVN1YmplY3Quc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmhhc093blByb3BlcnR5KHBhcikpIHtcbiAgICAgICAgICAgICAgdGhpcy5sb2dpY2FsRGlzYWJsZWQgPSAhdmFsdWVbcGFyXTtcbiAgICAgICAgICAgICAgaWYgKHRoaXMubG9naWNhbERpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyT3B0aW9ucygpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5tZXRhLnNlYXJjaCkge1xuICAgICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gdGhpcy5tZXRhLnNlYXJjaC5wYXJhbXM7XG4gICAgICBpZiAoc2VhcmNoUGFyYW1zKSB7XG4gICAgICAgIGZvciAoY29uc3QgcGFyIG9mIE9iamVjdC5rZXlzKHNlYXJjaFBhcmFtcykpIHtcbiAgICAgICAgICBjb25zdCBwYXJWYWx1ZSA9IHRoaXMucGFyZW50W3NlYXJjaFBhcmFtc1twYXJdXTtcbiAgICAgICAgICBpZiAocGFyVmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHt9O1xuICAgICAgICAgICAgcGFyYW1zW3Bhcl0gPSBwYXJWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoT3B0aW9ucyhwYXJhbXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnBhcmVudENoYW5nZVN1YmplY3Quc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmhhc093blByb3BlcnR5KHNlYXJjaFBhcmFtc1twYXJdKSkge1xuICAgICAgICAgICAgICB0aGlzLnNlYXJjaE9wdGlvbnModmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25BY3RpdmF0ZWQoZXYpIHtcbiAgICAvLyBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIC8vIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuaW5wdXQgPSBldi5zcmNFbGVtZW50O1xuICAgIGlmICghdGhpcy5kcm9wZG93bikge1xuICAgICAgdGhpcy5kcm9wZG93biA9IGV2LnNyY0VsZW1lbnQucGFyZW50Tm9kZS5wYXJlbnROb2RlLnBhcmVudE5vZGU7XG4gICAgfVxuICAgIHRoaXMuc2hvd0Ryb3Bkb3duKCk7XG4gIH1cblxuICBvbkJsdXIoZXYpIHtcbiAgICBsZXQgaW50ZXJuYWxDb250cm9sID0gZmFsc2U7XG4gICAgaWYgKGV2LnJlbGF0ZWRUYXJnZXQpIHtcbiAgICAgIGlmICghdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXYucmVsYXRlZFRhcmdldCkpIHtcbiAgICAgICAgdGhpcy5kaXNtaXNzRHJvcGRvd24oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGludGVybmFsQ29udHJvbCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLmtleUxpc3RlbmVyQWN0aXZlICYmICFpbnRlcm5hbENvbnRyb2wpIHtcbiAgICAgIHRoaXMuaW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMua2V5ZG93bik7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmtleUxpc3RlbmVyQWN0aXZlKSB7XG4gICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmNsaWNrb3V0KTtcbiAgICAgICAgfVxuICAgICAgfSwgNDAwKTtcbiAgICAgIGRlbGV0ZSB0aGlzLmtleUxpc3RlbmVyQWN0aXZlO1xuICAgIH1cbiAgICB0aGlzLm9uTGVhdmUuZW1pdChldik7XG4gIH1cblxuICBvbk9wdGlvblNlbGVjdChldiwgb3B0aW9uKSB7XG4gICAgaWYgKGV2KSB7XG4gICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICAgIHRoaXMuZm9jdXMoKTtcbiAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgaWYgKCF0aGlzLm1vZGVsKSB7XG4gICAgICAgIHRoaXMubW9kZWwgPSBbXTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG9wdGlvbkluZGV4ID0gdGhpcy5tb2RlbC5pbmRleE9mKG9wdGlvbik7XG4gICAgICBpZiAob3B0aW9uSW5kZXggPT09IC0xKSB7XG4gICAgICAgIHRoaXMubW9kZWwucHVzaChvcHRpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5tb2RlbC5zcGxpY2Uob3B0aW9uSW5kZXgsIDEpO1xuICAgICAgICBpZiAoIXRoaXMubW9kZWwubGVuZ3RoKSB7XG4gICAgICAgICAgZGVsZXRlIHRoaXMubW9kZWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMub25Nb2RlbENoYW5nZSh0aGlzLm1vZGVsKTtcbiAgICAgIGlmICh0aGlzLm1vZGVsKSB7XG4gICAgICAgIHRoaXMuc2hvd1RleHQgPSAodGhpcy5tb2RlbCB8fCBbXSkubWFwKChvKSA9PiBvLmxhYmVsIHx8IG8pLmpvaW4oJywgJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgdGhpcy5zaG93VGV4dDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaXNtaXNzRHJvcGRvd24oKTtcbiAgICAgIHRoaXMubW9kZWwgPSBvcHRpb247XG4gICAgICB0aGlzLm9uTW9kZWxDaGFuZ2Uob3B0aW9uKTtcbiAgICAgIHRoaXMuc2hvd1RleHQgPSBvcHRpb24ubGFiZWwgfHwgKG9wdGlvbi5pZCA9PT0gJycgPyAnLS1lbXB0eS0tJyA6IG9wdGlvbik7XG4gICAgICBpZiAodHlwZW9mKG9wdGlvbikgPT09ICdvYmplY3QnICYmICFvcHRpb24uaWQgJiYgb3B0aW9uLmlkICE9PSAnJykge1xuICAgICAgICBkZWxldGUgdGhpcy5zaG93VGV4dDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjbGVhcihldj8pIHtcbiAgICBkZWxldGUgdGhpcy5tb2RlbDtcbiAgICB0aGlzLm9uTW9kZWxDaGFuZ2UodGhpcy5tb2RlbCk7XG4gICAgZGVsZXRlIHRoaXMuc2hvd1RleHQ7XG4gICAgaWYgKGV2KSB7XG4gICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgb3BlblJlc291cmNlKGV2KSB7XG4gICAgY29uc3QgcmVmRGlhbG9nRmFjdG9yeSA9IHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KE1ldGFSZWZEaWFsb2cpO1xuICAgIHRoaXMucmVmZXJlbmNlU2VydmljZS5vcGVuRGlhbG9nKFxuICAgICAgcmVmRGlhbG9nRmFjdG9yeSwgdGhpcy5tZXRhUmVzb3VyY2UsIHRoaXMuaW50ZWdyYXRpb25Db2RlLCB0aGlzLm1ldGEucmVmZXJlbmNlLCBudWxsXG4gICAgKS5zdWJzY3JpYmUoKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nT3B0aW9ucyA9ICh0aGlzLm1ldGEub3B0aW9ucyB8fCBbXSkuZmluZCgobykgPT4gKG8uaWQgPT09IHJlc3VsdC5pZCAmJiBvLnR5cGUgPT09IHJlc3VsdC50eXBlKSk7XG4gICAgICAgIGlmIChleGlzdGluZ09wdGlvbnMpIHtcbiAgICAgICAgICBleGlzdGluZ09wdGlvbnMubGFiZWwgPSByZXN1bHQubGFiZWw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCF0aGlzLm1ldGEub3B0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5tZXRhLm9wdGlvbnMgPSBbXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5tZXRhLm9wdGlvbnMudW5zaGlmdChyZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub25PcHRpb25TZWxlY3QoZXYsIHJlc3VsdCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzaG93RHJvcGRvd24oKSB7XG4gICAgdGhpcy5kcm9wZG93bi5jbGFzc0xpc3QuYWRkKCdWbHQtZHJvcGRvd24tLWV4cGFuZGVkJyk7XG4gICAgaWYgKCF0aGlzLmtleUxpc3RlbmVyQWN0aXZlKSB7XG4gICAgICB0aGlzLmlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmtleWRvd24pO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5jbGlja291dCk7XG4gICAgICB9LCAyMDApO1xuICAgICAgdGhpcy5rZXlMaXN0ZW5lckFjdGl2ZSA9IHRydWU7XG4gICAgICBpZiAodGhpcy5vcHRpb25zICYmIHRoaXMubW9kZWwpIHtcbiAgICAgICAgZm9yIChsZXQgc3VnZ2VzdGlvbkluZGV4ID0gMDsgc3VnZ2VzdGlvbkluZGV4IDwgdGhpcy5vcHRpb25zLmxlbmd0aDsgc3VnZ2VzdGlvbkluZGV4KyspIHtcbiAgICAgICAgICBpZiAodGhpcy5tb2RlbCA9PT0gdGhpcy5vcHRpb25zW3N1Z2dlc3Rpb25JbmRleF0pIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4ID0gc3VnZ2VzdGlvbkluZGV4O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmVuc3VyZURyb3Bkb3duSXNWaXNpYmxlKCk7XG4gIH1cblxuICBkaXNtaXNzRHJvcGRvd24oZXZlbnQ/KSB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICB0aGlzLmZvY3VzKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRyb3Bkb3duKSB7XG4gICAgICB0aGlzLmRyb3Bkb3duLmNsYXNzTGlzdC5yZW1vdmUoJ1ZsdC1kcm9wZG93bi0tZXhwYW5kZWQnKTtcbiAgICB9XG4gICAgZGVsZXRlIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4O1xuICB9XG5cbiAgcHJpdmF0ZSBlbnN1cmVEcm9wZG93bklzVmlzaWJsZSgpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGhvbGRlciA9IHRoaXMuZHJvcGRvd24uY2xvc2VzdCgnLlZsdC1jYXJkX19jb250ZW50Jyk7XG4gICAgICBpZiAoaG9sZGVyKSB7XG4gICAgICAgIGNvbnN0IGVsID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLlZsdC1kcm9wZG93bl9fcGFuZWwnKTtcbiAgICAgICAgY29uc3QgZWxSZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IGhvbGRlclJlY3QgPSBob2xkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGlmIChob2xkZXJSZWN0LnRvcCArIGhvbGRlclJlY3QuaGVpZ2h0IDwgZWxSZWN0LnRvcCArIGVsUmVjdC5oZWlnaHQpIHtcbiAgICAgICAgICBlbC5zY3JvbGxJbnRvVmlldyh7IGJsb2NrOiAnZW5kJyB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIDQwMCk7XG4gIH1cblxuICBwcml2YXRlIGVuc3VyZURyb3Bkb3duT3B0aW9uSXNWaXNpYmxlKCkge1xuICAgIGlmICghdGhpcy5kcm9wZG93blNjcm9sbENvbnRhaW5lcikge1xuICAgICAgdGhpcy5kcm9wZG93blNjcm9sbENvbnRhaW5lciA9IHRoaXMuZHJvcGRvd24ucXVlcnlTZWxlY3RvcignLlZsdC1kcm9wZG93bl9fc2Nyb2xsJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRyb3Bkb3duU2Nyb2xsQ29udGFpbmVyICYmIHR5cGVvZiAodGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXgpID09PSAnbnVtYmVyJykge1xuICAgICAgY29uc3Qgc2Nyb2xsVG9wID0gNDQgKiB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleDtcbiAgICAgIGNvbnN0IHNjcm9sbEJvdHRvbSA9IDQ0ICogKHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4IC0gNyk7XG4gICAgICBpZiAoc2Nyb2xsVG9wIDwgdGhpcy5kcm9wZG93blNjcm9sbENvbnRhaW5lci5zY3JvbGxUb3ApIHtcbiAgICAgICAgdGhpcy5kcm9wZG93blNjcm9sbENvbnRhaW5lci5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7XG4gICAgICB9IGVsc2UgaWYgKHNjcm9sbEJvdHRvbSA+IHRoaXMuZHJvcGRvd25TY3JvbGxDb250YWluZXIuc2Nyb2xsVG9wKSB7XG4gICAgICAgIHRoaXMuZHJvcGRvd25TY3JvbGxDb250YWluZXIuc2Nyb2xsVG9wID0gc2Nyb2xsQm90dG9tO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmlsdGVyT3B0aW9ucygpIHtcbiAgICB0aGlzLmFzeW5jT3B0aW9ucyA9IFtdO1xuICAgIGlmICghdGhpcy5sb2dpY2FsRGlzYWJsZWQpIHtcbiAgICAgIGZvciAoY29uc3QgbyBvZiB0aGlzLm1ldGEub3B0aW9ucykge1xuICAgICAgICBpZiAoby5mb3IpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHBhciBvZiBPYmplY3Qua2V5cyhvLmZvcikpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhclZhbHVlID0gdGhpcy5wYXJlbnRbcGFyXTtcbiAgICAgICAgICAgIGlmIChvLmZvcltwYXJdLmluZGV4T2YocGFyVmFsdWUpICE9PSAtMSkge1xuICAgICAgICAgICAgICB0aGlzLmFzeW5jT3B0aW9ucy5wdXNoKG8pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmFzeW5jT3B0aW9ucy5wdXNoKG8pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbGlja291dCA9IChldmVudCkgPT4ge1xuICAgIGlmIChldmVudC50YXJnZXQuY2xhc3NOYW1lID09PSAnVmx0LWRyb3Bkb3duX19saW5rJyAmJiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XG4gICAgICB0aGlzLmZvY3VzKCk7XG4gICAgfSBlbHNlIGlmIChldmVudC50YXJnZXQgIT09IHRoaXMuaW5wdXQgJiYgIWV2ZW50LnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ1ZsdC1kcm9wZG93bl9fYmxvY2snKSkge1xuICAgICAgdGhpcy5kaXNtaXNzRHJvcGRvd24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb2N1cygpO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIGtleWRvd24gPSAoZXZlbnQpID0+IHtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnQXJyb3dEb3duJzoge1xuICAgICAgICB0aGlzLnNob3dEcm9wZG93bigpO1xuICAgICAgICBpZiAodHlwZW9mICh0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXggPSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4Kys7XG4gICAgICAgICAgaWYgKHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4ID49IHRoaXMub3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4ID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbnN1cmVEcm9wZG93bk9wdGlvbklzVmlzaWJsZSgpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdBcnJvd1VwJzoge1xuICAgICAgICB0aGlzLnNob3dEcm9wZG93bigpO1xuICAgICAgICBpZiAodHlwZW9mICh0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXggPSB0aGlzLm9wdGlvbnMubGVuZ3RoIC0gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleC0tO1xuICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCA8IDApIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4ID0gdGhpcy5vcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW5zdXJlRHJvcGRvd25PcHRpb25Jc1Zpc2libGUoKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgY2FzZSAnU3BhY2UnOlxuICAgICAgY2FzZSAnICc6IHtcbiAgICAgICAgaWYgKHR5cGVvZiAodGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXgpICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgdGhpcy5vbk9wdGlvblNlbGVjdChldmVudCwgdGhpcy5vcHRpb25zW3RoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4XSk7XG4gICAgICAgICAgaWYgKCF0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnRXNjYXBlJzoge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5kaXNtaXNzRHJvcGRvd24oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdCYWNrc3BhY2UnOiB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBnZXQgb3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5hc3luY09wdGlvbnMgfHwgdGhpcy5tZXRhLm9wdGlvbnMgfHwgdGhpcy5tZXRhLnBpY2tsaXN0IHx8IFtdO1xuICB9XG5cbiAgZ2V0IGdyb3VwZWRPcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMucmVkdWNlKChyLCB7IGdyb3VwIH0pID0+IHtcbiAgICAgIGlmICghci5zb21lKG8gPT4gby5ncm91cCA9PT0gZ3JvdXApKSB7XG4gICAgICAgIHIucHVzaCh7IGdyb3VwLCBncm91cEl0ZW06IHRoaXMub3B0aW9ucy5maWx0ZXIodiA9PiB2Lmdyb3VwID09PSBncm91cCkgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcjtcbiAgICB9LCBbXSk7XG4gIH1cblxuICBwcml2YXRlIHNlYXJjaE9wdGlvbnMocGFyYW1zPykge1xuICAgIGxldCBzZWFyY2hVcmwgPSBgL2ZpZWxkcy8ke3RoaXMubWV0YS5uYW1lfS9zZWFyY2hgO1xuICAgIGlmICh0aGlzLm1ldGEuc2VhcmNoKSB7XG4gICAgICBpZiAodGhpcy5tZXRhLnNlYXJjaC51cmwpIHtcbiAgICAgICAgc2VhcmNoVXJsID0gdGhpcy5tZXRhLnNlYXJjaC51cmw7XG4gICAgICB9XG4gICAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSB0aGlzLm1ldGEuc2VhcmNoLnBhcmFtcztcbiAgICAgIGlmIChzZWFyY2hQYXJhbXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBwYXIgb2YgT2JqZWN0LmtleXMoc2VhcmNoUGFyYW1zKSkge1xuICAgICAgICAgIGNvbnN0IHZhbCA9IHRoaXMucGFyZW50W3NlYXJjaFBhcmFtc1twYXJdXTtcbiAgICAgICAgICBpZiAodmFsKSB7XG4gICAgICAgICAgICBzZWFyY2hVcmwgKz0gYCR7c2VhcmNoVXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJid9JHtwYXJ9PSR7dmFsLmlkIHx8IHZhbH1gO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnNlYXJjaGluZyA9IHRydWU7XG4gICAgdGhpcy5yZXNvdXJjZVNlcnZpY2UuZ2V0QnlQYXRoKHNlYXJjaFVybCkuc3Vic2NyaWJlKChvcHRpb25zKSA9PiB7XG4gICAgICB0aGlzLmFzeW5jT3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICBsZXQgdmFsaWRWYWx1ZSA9IGZhbHNlO1xuICAgICAgaWYgKHRoaXMudmFsdWUpIHtcbiAgICAgICAgZm9yIChjb25zdCBvIG9mIG9wdGlvbnMpIHtcbiAgICAgICAgICBpZiAoKG8uaWQgfHwgbykgPT09ICh0aGlzLnZhbHVlLmlkIHx8IHRoaXMudmFsdWUpKSB7XG4gICAgICAgICAgICB2YWxpZFZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF2YWxpZFZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBkZWxldGUgdGhpcy5zZWFyY2hpbmc7XG4gICAgfSk7XG4gIH1cblxuICBnZXQgcmVzb3VyY2VTZXJ2aWNlKCkge1xuICAgIGlmICghdGhpcy5tZXRhUmVzb3VyY2VTZXJ2aWNlKSB7XG4gICAgICBjb25zdCBtZXRhUmVzb3VyY2VDb25maWc6IElNZXRhUmVzb3VyY2VDb25maWcgPSB7XG4gICAgICAgIGludGVncmF0aW9uQ29kZTogdGhpcy5pbnRlZ3JhdGlvbkNvZGUsXG4gICAgICAgIHJlc291cmNlVHlwZTogdGhpcy5yZXNvdXJjZVR5cGVcbiAgICAgIH07XG4gICAgICB0aGlzLm1ldGFSZXNvdXJjZVNlcnZpY2UgPSB0aGlzLm1ldGFSZXNvdXJjZS5uZXcobWV0YVJlc291cmNlQ29uZmlnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubWV0YVJlc291cmNlU2VydmljZTtcbiAgfVxufVxuXG4vLy8vIEZJRUxEIFJFRkVSRU5DRVxuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlVXJsOiAnLi9maWVsZFJlZmVyZW5jZS92aWV3Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9maWVsZFJlZmVyZW5jZS9zdHlsZS5zY3NzJ10sXG4gIHZpZXdQcm92aWRlcnM6IFt7IHByb3ZpZGU6IENvbnRyb2xDb250YWluZXIsIHVzZUV4aXN0aW5nOiBOZ0Zvcm0gfV0sXG4gIGVudHJ5Q29tcG9uZW50czogW1xuICAgIE1ldGFSZWZEaWFsb2dcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBGaWVsZFJlZmVyZW5jZSBleHRlbmRzIEZpZWxkQWJzdHJhY3QgaW1wbGVtZW50cyBPbkluaXQge1xuICBpbnB1dDogYW55O1xuICBkcm9wZG93bjogSFRNTEVsZW1lbnQ7XG4gIGRyb3Bkb3duU2Nyb2xsQ29udGFpbmVyOiBIVE1MRWxlbWVudDtcbiAgc2VhcmNoaW5nOiBib29sZWFuO1xuICBzZWFyY2hSZXNvdXJjZVR5cGU6IGFueSA9IHt9O1xuICBzZWFyY2hUZXh0OiBzdHJpbmc7XG4gIHNlYXJjaFJlc3VsdHM6IEFycmF5PGFueT47XG4gIHNlYXJjaEVycm9yOiBhbnk7XG4gIGFjdGl2ZVN1Z2dlc3Rpb25JbmRleDogbnVtYmVyO1xuICBzZWFyY2hSZXNvdXJjZVR5cGVzU2NvcGU6IHN0cmluZztcbiAgc2VhcmNoVGV4dENoYW5nZWQ6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcbiAgaXNDcmVhdGFibGUgPSBmYWxzZTtcbiAgdmFsdWU6IGFueTtcbiAgaXNQb2x5bW9ycGhpYzogYm9vbGVhbjtcbiAgaXNTZWFyY2hhYmxlOiBib29sZWFuO1xuICBtdWx0aXBsZTogYm9vbGVhbjtcbiAgdnI6IE1ldGFSZXNvdXJjZVNlcnZpY2U7XG4gIGV4dGVybmFsTGluazogc3RyaW5nO1xuICBkcm9wZG93blZpc2libGUgPSBmYWxzZTtcbiAgc2VhcmNoUmVzb3VyY2VUeXBlTWV0YTogYW55ID0ge1xuICAgIHR5cGU6ICdzZWxlY3QnLFxuICAgIG5hbWU6ICdyZXNvdXJjZVR5cGUnLFxuICAgIGxhYmVsOiAnVHlwZScsXG4gICAgb3B0aW9uczogW10sIC8vIHsgbGFiZWw6ICctLSBBbGwgdHlwZXMgLS0nIH1dLFxuICAgIHN0YW5kYWxvbmU6IHRydWVcbiAgfTtcbiAgZmlsdGVyZWRTdWdnZXN0aW9uczogQXJyYXk8YW55PiA9IFtdO1xuICBwbGFjZUhvbGRlckxhYmVsOiBzdHJpbmc7XG4gIGFzeW5jU3VnZ2VzdGlvbnM6IEFycmF5PGFueT47XG4gIHNtYXJ0U3VnZ2VzdGlvbnM6IEFycmF5PGFueT4gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgIHByaXZhdGUgcmVmZXJlbmNlU2VydmljZTogTWV0YVJlZmVyZW5jZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtZXRhUmVzb3VyY2U6IE1ldGFSZXNvdXJjZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtZXRhTXNnU2VydmljZTogTWV0YU1zZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBtZXRhQ29udGV4dDogTWV0YUNvbnRleHRTZXJ2aWNlLFxuICAgIHByaXZhdGUgbWV0YVRyYWNrZXI6IE1ldGFUcmFja2VyU2VydmljZVxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5tdWx0aXBsZSA9ICh0aGlzLm1ldGEudHlwZSA9PT0gJ211bHRpcmVmZXJlbmNlJykgfHwgdGhpcy5tZXRhLm11bHRpcGxlO1xuICAgIHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlTWV0YS5sYWJlbCA9IHRoaXMubWV0YS5sYWJlbDtcbiAgICBpZiAoIXRoaXMubWV0YS52YWx1ZVR5cGUpIHtcbiAgICAgIC8vIHRoaXMubWV0YS52YWx1ZVR5cGUgPSAnb2JqZWN0JztcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLm1ldGEsICd2YWx1ZVR5cGUnLCB7XG4gICAgICAgIHZhbHVlOiAnb2JqZWN0J1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLm1ldGFSZWZlcmVuY2UgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgdGhpcy5pc1BvbHltb3JwaGljID0gdHJ1ZTtcbiAgICAgIHRoaXMuaXNTZWFyY2hhYmxlID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlc1Njb3BlID0gdGhpcy5tZXRhUmVmZXJlbmNlLm1hcChydCA9PiBydC5uYW1lKS5qb2luKCcsJyk7XG4gICAgICBmb3IgKGNvbnN0IHJ0IG9mIHRoaXMubWV0YVJlZmVyZW5jZSkge1xuICAgICAgICBpZiAocnQuY3JlYXRhYmxlKSB7XG4gICAgICAgICAgdGhpcy5pc0NyZWF0YWJsZSA9IHRydWU7XG4gICAgICAgICAgaWYgKHR5cGVvZiAocnQuc2VhcmNoYWJsZSkgIT09ICd1bmRlZmluZWQnICYmICFydC5zZWFyY2hhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmlzU2VhcmNoYWJsZSA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5tZXRhUmVmZXJlbmNlLmZvckVhY2goKHIpID0+IHtcbiAgICAgICAgdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGVNZXRhLm9wdGlvbnMucHVzaCh7IGlkOiByLm5hbWUsIGxhYmVsOiByLmxhYmVsIHx8IHIubmFtZSB9KTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzU2VhcmNoYWJsZSA9IHR5cGVvZiAodGhpcy5tZXRhUmVmZXJlbmNlLnNlYXJjaGFibGUpID09PSAndW5kZWZpbmVkJyB8fCB0aGlzLm1ldGFSZWZlcmVuY2Uuc2VhcmNoYWJsZTtcbiAgICAgIHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlID0gdGhpcy5tZXRhUmVmZXJlbmNlO1xuICAgICAgdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGVzU2NvcGUgPSB0aGlzLm1ldGFSZWZlcmVuY2UubmFtZSB8fCB0aGlzLm1ldGFSZWZlcmVuY2UucmVzb3VyY2VUeXBlO1xuICAgICAgdGhpcy5pc0NyZWF0YWJsZSA9IHRoaXMubWV0YVJlZmVyZW5jZS5jcmVhdGFibGU7XG4gICAgfVxuICAgIHRoaXMuYnVpbGRQbGFjZWhvbGRlckxhYmVsKCk7XG4gICAgdGhpcy5zZWFyY2hUZXh0Q2hhbmdlZC5waXBlKGRlYm91bmNlVGltZSgzMDApLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKS5zdWJzY3JpYmUoKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgIHRoaXMuc2VhcmNoVGV4dCA9IHZhbHVlO1xuICAgICAgdGhpcy5zZWFyY2goKTtcbiAgICB9KTtcbiAgICBjb25zdCBvcmlnVmFsdWUgPSB0aGlzLnBhcmVudFt0aGlzLm1ldGEubmFtZV07XG5cbiAgICAvLyB0aGlzLnN1Z2dlc3Rpb25zID0gdGhpcy5tZXRhLnN1Z2dlc3Rpb25zOyAvLyBUT0RPIGZpbHRlciBieSBkZWZhdWx0IHR5cGVcbiAgICAvLyBjb25zb2xlLmxvZygndGhpcy5zdWdnZXN0aW9ucycsIHRoaXMuc3VnZ2VzdGlvbnMpO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMucGFyZW50LCB0aGlzLm1ldGEubmFtZSwge1xuICAgICAgc2V0OiAodmFsdWUpID0+IHtcbiAgICAgICAgaWYgKHZhbHVlID09PSAnJykge1xuICAgICAgICAgIHZhbHVlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCB2IG9mIHZhbHVlKSB7XG4gICAgICAgICAgICAgIGlmICghdGhpcy5tb2RlbCkge1xuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwgPSBbXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAodHlwZW9mICh2KSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnB1c2goe1xuICAgICAgICAgICAgICAgICAgaWQ6IHYsXG4gICAgICAgICAgICAgICAgICBsYWJlbDogdixcbiAgICAgICAgICAgICAgICAgIHR5cGU6IHRoaXMubWV0YVJlZmVyZW5jZS5uYW1lXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiAodmFsdWUpID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdmFsdWUgPSB7XG4gICAgICAgICAgICAgIGlkOiB2YWx1ZSxcbiAgICAgICAgICAgICAgbGFiZWw6IHZhbHVlLCAvLyBjb3VsZCBiZSBmb3VuZCB3aXRoIGV4dHJhIGNhbGxcbiAgICAgICAgICAgICAgdHlwZTogdGhpcy5tZXRhUmVmZXJlbmNlLm5hbWVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuc2VhcmNoVGV4dCA9IHZhbHVlID8gKCghdmFsdWUubGFiZWwgfHwgdmFsdWUubGFiZWwgPT09ICcgJykgPyBgTi9BICgke3ZhbHVlLnR5cGV9IyR7dmFsdWUuaWR9KWAgOiB2YWx1ZS5sYWJlbCB8fCB2YWx1ZSkgOiAnJztcbiAgICAgICAgICAvLyBpZiAodGhpcy5pc1BvbHltb3JwaGljICYmIHRoaXMubW9kZWwpIHsgLy9UT0RPIHNob3cgb3Igbm90P1xuICAgICAgICAgIC8vICAgdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGUgPSB0aGlzLm1ldGFSZWZlcmVuY2UuZmluZCgocnQpPT4ge1xuICAgICAgICAgIC8vICAgICByZXR1cm4gcnQubmFtZSA9PT0gdGhpcy5tb2RlbC50eXBlO1xuICAgICAgICAgIC8vICAgfSk7XG4gICAgICAgICAgLy8gfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMubW9kZWwgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICB0aGlzLmJ1aWxkRXh0ZXJuYWxMaW5rKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tZXRhLiRvcHRpb25hbCA9IHRoaXMuaXNPcHRpb25hbDtcbiAgICAgIH0sXG4gICAgICBnZXQ6ICgpID0+IHRoaXMudmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0aGlzLnNlbmRUb1NlcnZlcixcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGlmIChvcmlnVmFsdWUpIHtcbiAgICAgIHRoaXMucGFyZW50W3RoaXMubWV0YS5uYW1lXSA9IG9yaWdWYWx1ZTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLm1vZGVsICYmIHRoaXMuZGVmYXVsdCkge1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgdGhpcy5wYXJlbnRbdGhpcy5tZXRhLm5hbWVdID0gW107XG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHQubGVuZ3RoKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBkdiBvZiB0aGlzLmRlZmF1bHQpIHtcbiAgICAgICAgICAgIGlmICgoZHYuaWQgfHwgZHYudmFsdWUpICYmIGR2LnR5cGUpIHtcbiAgICAgICAgICAgICAgY29uc3QgaXRlbTogYW55ID0ge1xuICAgICAgICAgICAgICAgIGlkOiBkdi5pZCB8fCBkdi52YWx1ZSxcbiAgICAgICAgICAgICAgICBsYWJlbDogZHYubGFiZWwgfHwgZHYuaWQgfHwgZHYudmFsdWUsXG4gICAgICAgICAgICAgICAgdHlwZTogZHYudHlwZVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBpZiAoZHYuZXh0ZXJuYWxMaW5rKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5leHRlcm5hbExpbmsgPSBkdi5leHRlcm5hbExpbms7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5wYXJlbnRbdGhpcy5tZXRhLm5hbWVdLnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5wYXJlbnRbdGhpcy5tZXRhLm5hbWVdLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsdC5pZCAmJiB0aGlzLmRlZmF1bHQubGFiZWwgJiYgdGhpcy5kZWZhdWx0LnR5cGUpIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW06IGFueSA9IHtcbiAgICAgICAgICAgICAgaWQ6IHRoaXMuZGVmYXVsdC5pZCB8fCB0aGlzLmRlZmF1bHQudmFsdWUsXG4gICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmRlZmF1bHQubGFiZWwgfHwgdGhpcy5kZWZhdWx0LmlkIHx8IHRoaXMuZGVmYXVsdC52YWx1ZSxcbiAgICAgICAgICAgICAgdHlwZTogdGhpcy5kZWZhdWx0LnR5cGUsXG4gICAgICAgICAgICAgIHNtYXJ0OiB0cnVlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHRoaXMuZGVmYXVsdC5leHRlcm5hbExpbmspIHtcbiAgICAgICAgICAgICAgaXRlbS5leHRlcm5hbExpbmsgPSB0aGlzLmRlZmF1bHQuZXh0ZXJuYWxMaW5rO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wYXJlbnRbdGhpcy5tZXRhLm5hbWVdID0gaXRlbTtcbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJyEhIWRlZmF1bHQgdmFsdWUgaXMgbm90IHZhbGlkIGZvcm1hdCcsIHRoaXMubWV0YSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mKHRoaXMubWV0YS5kaXNhYmxlZCkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZih0aGlzLm1ldGEuZGlzYWJsZWQpID09PSAnb2JqZWN0Jykge1xuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgT2JqZWN0LmtleXModGhpcy5tZXRhLmRpc2FibGVkKSkge1xuICAgICAgICAgIGNvbnN0IHByb3BzID0gcC5zcGxpdCgnLicpO1xuICAgICAgICAgIGlmICh0eXBlb2YgKHRoaXMucGFyZW50W3Byb3BzWzBdXSkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBsZXQgdmFsID0gdGhpcy5wYXJlbnQ7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgcHJvcHMpIHtcbiAgICAgICAgICAgICAgdmFsID0gdmFsW3Byb3BdO1xuICAgICAgICAgICAgICBpZiAoIXZhbCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodmFsID09PSB0aGlzLm1ldGEuZGlzYWJsZWRbcF0pIHtcbiAgICAgICAgICAgICAgdGhpcy5sb2dpY2FsRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMucGFyZW50Q2hhbmdlU3ViamVjdC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUuaGFzT3duUHJvcGVydHkocHJvcHNbMF0pKSB7XG4gICAgICAgICAgICAgIGxldCB2YWwgPSB0aGlzLnBhcmVudDtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIHByb3BzKSB7XG4gICAgICAgICAgICAgICAgdmFsID0gdmFsW3Byb3BdO1xuICAgICAgICAgICAgICAgIGlmICghdmFsKSB7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHZhbCA9PT0gdGhpcy5tZXRhLmRpc2FibGVkW3BdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dpY2FsRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5sb2dpY2FsRGlzYWJsZWQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLm1ldGEuc2VhcmNoKSB7XG4gICAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSB0aGlzLm1ldGEuc2VhcmNoLnBhcmFtcztcbiAgICAgIGlmIChzZWFyY2hQYXJhbXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBwYXIgb2YgT2JqZWN0LmtleXMoc2VhcmNoUGFyYW1zKSkge1xuICAgICAgICAgIGNvbnN0IHByb3BzID0gc2VhcmNoUGFyYW1zW3Bhcl0uc3BsaXQoJyMnKTtcbiAgICAgICAgICBjb25zdCBmaWVsZCA9IHByb3BzWzBdO1xuICAgICAgICAgIGNvbnN0IHByb3AgPSBwcm9wc1sxXTtcbiAgICAgICAgICBsZXQgcGFyVmFsdWUgPSB0aGlzLnBhcmVudFtmaWVsZF07XG4gICAgICAgICAgaWYgKHBhclZhbHVlKSB7XG4gICAgICAgICAgICBpZiAocHJvcCkge1xuICAgICAgICAgICAgICBwYXJWYWx1ZSA9IHBhclZhbHVlW3Byb3BdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBhclZhbHVlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHt9O1xuICAgICAgICAgICAgICBwYXJhbXNbcGFyXSA9IHBhclZhbHVlO1xuICAgICAgICAgICAgICB0aGlzLnNlYXJjaFN1Z2dlc3Rpb25zKHBhcmFtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMucGFyZW50Q2hhbmdlU3ViamVjdC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUuaGFzT3duUHJvcGVydHkoZmllbGQpKSB7XG4gICAgICAgICAgICAgIGlmICh2YWx1ZVtmaWVsZF0pIHtcbiAgICAgICAgICAgICAgICBpZiAocHJvcCkge1xuICAgICAgICAgICAgICAgICAgdmFsdWVbZmllbGRdID0gdmFsdWVbZmllbGRdW3Byb3BdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBwYXJhbXMgPSB7fTtcbiAgICAgICAgICAgICAgICBwYXJhbXNbcGFyXSA9IHZhbHVlW2ZpZWxkXTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFN1Z2dlc3Rpb25zKHBhcmFtcyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNsZWFyU2VhcmNoUmVzb3VyY2VUeXBlKCkge1xuICAgIHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlID0ge307XG4gICAgdGhpcy5vblNlYXJjaFJlc291cmNlVHlwZUNoYW5nZWQoKTtcbiAgfVxuXG4gIG9uU2VhcmNoUmVzb3VyY2VUeXBlQ2hhbmdlZChyZXNvdXJjZVR5cGU/KSB7XG4gICAgaWYgKCFyZXNvdXJjZVR5cGUgfHwgIXJlc291cmNlVHlwZS5pZCkge1xuICAgICAgdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGUucmVzb3VyY2VUeXBlID0gbnVsbDtcbiAgICAgIHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlc1Njb3BlID0gKHRoaXMubWV0YVJlZmVyZW5jZSB8fCBbXSkubWFwKHJ0ID0+IHJ0Lm5hbWUpLmpvaW4oJywnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGUucmVzb3VyY2VUeXBlID0gcmVzb3VyY2VUeXBlLmlkO1xuICAgICAgdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGVzU2NvcGUgPSByZXNvdXJjZVR5cGUuaWQ7XG4gICAgfVxuICAgIHRoaXMuYnVpbGRQbGFjZWhvbGRlckxhYmVsKCk7XG4gICAgdGhpcy5mb2N1cygpO1xuICAgIGlmICghdGhpcy5tb2RlbCAmJiAhdGhpcy5zZWFyY2hUZXh0KSB7IC8vIGZpbHRlciBzdWdnZXN0aW9ucyBieSB0eXBlXG4gICAgICB0aGlzLmZpbHRlcmVkU3VnZ2VzdGlvbnMgPSAhcmVzb3VyY2VUeXBlID8gKHRoaXMubWV0YS5zdWdnZXN0aW9ucyB8fCBbXSkgOiAodGhpcy5tZXRhLnN1Z2dlc3Rpb25zIHx8IFtdKS5maWx0ZXIoXG4gICAgICAgIChzKSA9PiBzLnR5cGUgPT09IHJlc291cmNlVHlwZS5pZFxuICAgICAgKTtcbiAgICB9IGVsc2UgeyAvLyByZWd1bGFyIHNlYXJjaCAocmV0dXJuIHNjb3BlZCByZXN1bHRzKVxuICAgICAgaWYgKCF0aGlzLm1vZGVsKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoKCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc2VhcmNoUmVzdWx0cyAmJiByZXNvdXJjZVR5cGUpIHtcbiAgICAgICAgdGhpcy5zZWFyY2hSZXN1bHRzID0gdGhpcy5zZWFyY2hSZXN1bHRzLmZpbHRlcigocykgPT4gcy50eXBlID09PSByZXNvdXJjZVR5cGUuaWQpO1xuICAgICAgfVxuICAgIH1cbiAgICBkZWxldGUgdGhpcy5zZWFyY2hFcnJvcjtcbiAgfVxuXG4gIG9uU2VhcmNoVGV4dENoYW5nZWQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2VhcmNoVGV4dENoYW5nZWQubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBzZWFyY2goKSB7XG4gICAgdGhpcy5zZWFyY2hpbmcgPSB0cnVlO1xuICAgIC8vIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4O1xuICAgIGlmICghdGhpcy5zZWFyY2hUZXh0IHx8IHRoaXMuc2VhcmNoVGV4dC5sZW5ndGggPCAyKSB7XG4gICAgICB0aGlzLnNlYXJjaGluZyA9IGZhbHNlO1xuICAgICAgZGVsZXRlIHRoaXMuc2VhcmNoUmVzdWx0cztcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2hvd1NlYXJjaHJlc3VsdHMgPSAocmVzdWx0cykgPT4ge1xuICAgICAgdGhpcy5zZWFyY2hpbmcgPSBmYWxzZTtcbiAgICAgIGRlbGV0ZSB0aGlzLnNlYXJjaEVycm9yO1xuICAgICAgZGVsZXRlIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4O1xuICAgICAgaWYgKCFyZXN1bHRzIHx8ICEocmVzdWx0cyBpbnN0YW5jZW9mIEFycmF5KSkge1xuICAgICAgICByZXN1bHRzID0gW107XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5tZXRhLmFjY2VwdE5ldyAmJiB0aGlzLm1ldGEuYWNjZXB0TmV3LnR5cGUgJiYgdGhpcy5tZXRhLmFjY2VwdE5ldy5wYXR0ZXJuKSB7XG4gICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cCh0aGlzLm1ldGEuYWNjZXB0TmV3LnBhdHRlcm4pO1xuICAgICAgICBpZiAocmVnZXgudGVzdCh0aGlzLnNlYXJjaFRleHQpKSB7XG4gICAgICAgICAgcmVzdWx0cy51bnNoaWZ0KHsgaWQ6IG51bGwsIGxhYmVsOiB0aGlzLnNlYXJjaFRleHQsIHR5cGU6IHRoaXMubWV0YS5hY2NlcHROZXcudHlwZSB9KSA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuc2VhcmNoUmVzdWx0cyA9IHJlc3VsdHMubWFwKChyKSA9PiB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgYXJyb3ctYm9keS1zdHlsZVxuICAgICAgICByZXR1cm4geyBpZDogci5pZCwgbGFiZWw6IHIubGFiZWwsIHR5cGU6IHIudHlwZSB8fCByLnJlc291cmNlVHlwZSB8fCB0aGlzLnNlYXJjaFJlc291cmNlVHlwZS5uYW1lLCBleHRlcm5hbExpbms6IHIuZXh0ZXJuYWxMaW5rIH07XG4gICAgICB9KTtcbiAgICAgIGlmICghL1ZsdC1kcm9wZG93bi0tZXhwYW5kZWQvLnRlc3QodGhpcy5kcm9wZG93bi5jbGFzc05hbWUpKSB7XG4gICAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAodGhpcy5tZXRhLnNlYXJjaCkge1xuICAgICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gdGhpcy5tZXRhLnNlYXJjaC5wYXJhbXMgfHwge307XG4gICAgICBsZXQgc2VhcmNoVXJsID0gYC9maWVsZHMvJHt0aGlzLm1ldGEubmFtZX0vc2VhcmNoYDtcbiAgICAgIGlmICh0aGlzLm1ldGEuc2VhcmNoLnVybCkge1xuICAgICAgICBzZWFyY2hVcmwgPSB0aGlzLm1ldGEuc2VhcmNoLnVybC5yZXBsYWNlKC9cXCR7XFxzKihbXFx3XFwuXSspXFxzKn0vZywgKG1hdGNoLCBrZXkpID0+IHtcbiAgICAgICAgICBpZiAoc2VhcmNoUGFyYW1zLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9IHNlYXJjaFBhcmFtc1trZXldO1xuICAgICAgICAgICAgZGVsZXRlIHNlYXJjaFBhcmFtc1trZXldO1xuICAgICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgcCBvZiBPYmplY3Qua2V5cyhzZWFyY2hQYXJhbXMpKSB7XG4gICAgICAgIHNlYXJjaFVybCArPSBgJHtzZWFyY2hVcmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJ30ke2VuY29kZVVSSUNvbXBvbmVudChwKX09JHtlbmNvZGVVUklDb21wb25lbnQoc2VhcmNoUGFyYW1zW3BdKX1gO1xuICAgICAgfVxuICAgICAgc2VhcmNoVXJsICs9IGAke3NlYXJjaFVybC5pbmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnfXE9JHtlbmNvZGVVUklDb21wb25lbnQodGhpcy5zZWFyY2hUZXh0KX1gO1xuICAgICAgdGhpcy5zZWFyY2hpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5yZXNvdXJjZVNlcnZpY2UuZ2V0QnlQYXRoKHNlYXJjaFVybCkuc3Vic2NyaWJlKChyZXN1bHRzKSA9PiB7XG4gICAgICAgIHNob3dTZWFyY2hyZXN1bHRzKHJlc3VsdHMpO1xuICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnNlYXJjaGluZztcbiAgICAgICAgdGhpcy5zZWFyY2hSZXN1bHRzID0gW107XG4gICAgICAgIHRoaXMuc2VhcmNoRXJyb3IgPSBlcnJvci5lcnJvciA/IGVycm9yLmVycm9yLm1lc3NhZ2UgfHwgZXJyb3IuZXJyb3IgOiBlcnJvci5tZXNzYWdlIHx8IGVycm9yO1xuICAgICAgICBpZiAoIS9WbHQtZHJvcGRvd24tLWV4cGFuZGVkLy50ZXN0KHRoaXMuZHJvcGRvd24uY2xhc3NOYW1lKSkge1xuICAgICAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIXRoaXMudnIpIHtcbiAgICAgICAgdGhpcy52ciA9IHRoaXMubWV0YVJlc291cmNlLm5ldyh7XG4gICAgICAgICAgaW50ZWdyYXRpb25Db2RlOiB0aGlzLmludGVncmF0aW9uQ29kZSxcbiAgICAgICAgICByZXNvdXJjZVR5cGU6IG51bGxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLnZyLnNlYXJjaEludGVncmF0aW9uKFxuICAgICAgICB0aGlzLnNlYXJjaFRleHQsXG4gICAgICAgIHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlLm5hbWUgfHwgdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGVzU2NvcGVcbiAgICAgICkuc3Vic2NyaWJlKChyZXN1bHRzOiBBcnJheTxhbnk+KSA9PiB7XG4gICAgICAgIHNob3dTZWFyY2hyZXN1bHRzKHJlc3VsdHMpO1xuICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMuc2VhcmNoaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2VhcmNoUmVzdWx0cyA9IFtdO1xuICAgICAgICB0aGlzLnNlYXJjaEVycm9yID0gZXJyb3IuZXJyb3IgPyBlcnJvci5lcnJvci5tZXNzYWdlIHx8IGVycm9yLmVycm9yIDogZXJyb3IubWVzc2FnZSB8fCBlcnJvcjtcbiAgICAgICAgaWYgKCEvVmx0LWRyb3Bkb3duLS1leHBhbmRlZC8udGVzdCh0aGlzLmRyb3Bkb3duLmNsYXNzTmFtZSkpIHtcbiAgICAgICAgICB0aGlzLnNob3dEcm9wZG93bigpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBvbkFjdGl2YXRlZChldikge1xuICAgIC8vIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgLy8gZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5pbnB1dCA9IGV2LnNyY0VsZW1lbnQ7XG4gICAgaWYgKCF0aGlzLmRyb3Bkb3duKSB7XG4gICAgICAvLyB0aGlzLmRyb3Bkb3duID0gZXYuc3JjRWxlbWVudC5wYXJlbnROb2RlLnBhcmVudE5vZGU7XG4gICAgICB0aGlzLmRyb3Bkb3duID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmRyb3Bkb3duLXdyYXBwZXInKTtcbiAgICB9XG4gICAgdGhpcy5zaG93RHJvcGRvd24oKTtcbiAgfVxuXG4gIG9uQmx1cihldikge1xuICAgIGxldCBpbnRlcm5hbENvbnRyb2wgPSBmYWxzZTtcbiAgICBpZiAoZXYucmVsYXRlZFRhcmdldCkge1xuICAgICAgaWYgKCF0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhldi5yZWxhdGVkVGFyZ2V0KSkge1xuICAgICAgICB0aGlzLmRpc21pc3NEcm9wZG93bigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW50ZXJuYWxDb250cm9sID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMua2V5TGlzdGVuZXJBY3RpdmUgJiYgIWludGVybmFsQ29udHJvbCkge1xuICAgICAgdGhpcy5pbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5rZXlkb3duKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMua2V5TGlzdGVuZXJBY3RpdmUpIHtcbiAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuY2xpY2tvdXQpO1xuICAgICAgICB9XG4gICAgICB9LCA0MDApO1xuICAgICAgZGVsZXRlIHRoaXMua2V5TGlzdGVuZXJBY3RpdmU7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlU2VsZWN0aW9uKCkge1xuICAgIGlmICh0aGlzLm1vZGVsICYmICF0aGlzLnN1Z2dlc3Rpb25zLmZpbmQoKHMpID0+IChzLmlkID09PSB0aGlzLm1vZGVsLmlkICYmIHMudHlwZSA9PT0gdGhpcy5tb2RlbC50eXBlKSkpIHtcbiAgICAgIHRoaXMuc21hcnRTdWdnZXN0aW9ucy5wdXNoKHtcbiAgICAgICAgaWQ6IHRoaXMubW9kZWwuaWQsXG4gICAgICAgIGxhYmVsOiB0aGlzLm1vZGVsLmxhYmVsLFxuICAgICAgICB0eXBlOiB0aGlzLm1vZGVsLnR5cGUsXG4gICAgICAgIHNtYXJ0OiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5tZXRhVHJhY2tlci5lbWl0KHRoaXMuYnVpbGRUcmFja0V2ZW50KCdSRU1PVkUnKSk7XG4gICAgdGhpcy5jbGVhcigpO1xuICB9XG5cbiAgb25TdWdnZXN0aW9uU2VsZWN0KGV2LCBzdWdnZXN0aW9uKSB7XG4gICAgaWYgKCFzdWdnZXN0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5mb2N1cygpO1xuICAgIHRoaXMubWV0YVRyYWNrZXIuZW1pdCh0aGlzLmJ1aWxkVHJhY2tFdmVudCgnU0VMRUNUJykpO1xuICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICBpZiAoIXRoaXMubW9kZWwpIHtcbiAgICAgICAgdGhpcy5tb2RlbCA9IFtdO1xuICAgICAgfVxuICAgICAgbGV0IGV4aXN0aW5nRW50cnk7XG4gICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMubW9kZWwpIHtcbiAgICAgICAgaWYgKHN1Z2dlc3Rpb24uaWQgJiYgKGVudHJ5LmlkID09PSBzdWdnZXN0aW9uLmlkKSkge1xuICAgICAgICAgIGV4aXN0aW5nRW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIGlmIChzdWdnZXN0aW9uLmxhYmVsID09PSBlbnRyeS5sYWJlbCkgeyAvLyBjcmVhdGUgbmV3IChnb29nbGUgZW1haWxzKVxuICAgICAgICAgIGV4aXN0aW5nRW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFleGlzdGluZ0VudHJ5KSB7XG4gICAgICAgIHRoaXMubW9kZWwucHVzaChzdWdnZXN0aW9uKTtcbiAgICAgIH1cbiAgICAgIHRoaXMub25Nb2RlbENoYW5nZSh0aGlzLm1vZGVsKTtcbiAgICAgIGRlbGV0ZSB0aGlzLnNlYXJjaFRleHQ7XG4gICAgICB0aGlzLnNlYXJjaFRleHRDaGFuZ2VkLm5leHQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tb2RlbCA9IHN1Z2dlc3Rpb247XG4gICAgICB0aGlzLmV4dGVybmFsTGluayA9IHN1Z2dlc3Rpb24uZXh0ZXJuYWxMaW5rO1xuICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlKHN1Z2dlc3Rpb24pO1xuICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gc3VnZ2VzdGlvbi5sYWJlbDtcbiAgICAgIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4ID0gKHRoaXMuc2VhcmNoUmVzdWx0cyB8fCB0aGlzLnN1Z2dlc3Rpb25zKS5pbmRleE9mKHN1Z2dlc3Rpb24pO1xuICAgIH1cbiAgICB0aGlzLmRpc21pc3NEcm9wZG93bigpO1xuICAgIC8vIGlmICh0aGlzLmlzUG9seW1vcnBoaWMpIHtcbiAgICAvLyAgIHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlID0gdGhpcy5tZXRhUmVmZXJlbmNlLmZpbmQoKHJ0KT0+IHtcbiAgICAvLyAgICAgcmV0dXJuIHJ0Lm5hbWUgPT09IHN1Z2dlc3Rpb24udHlwZTtcbiAgICAvLyAgIH0pO1xuICAgIC8vIH1cbiAgfVxuXG4gIHNob3dEcm9wZG93bigpIHtcbiAgICB0aGlzLmRyb3Bkb3duVmlzaWJsZSA9IHRydWU7XG4gICAgdGhpcy5kcm9wZG93bi5jbGFzc0xpc3QuYWRkKCdWbHQtZHJvcGRvd24tLWV4cGFuZGVkJyk7XG4gICAgaWYgKCF0aGlzLmtleUxpc3RlbmVyQWN0aXZlKSB7XG4gICAgICB0aGlzLmlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmtleWRvd24pO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5jbGlja291dCk7XG4gICAgICB9LCAyMDApO1xuICAgICAgdGhpcy5rZXlMaXN0ZW5lckFjdGl2ZSA9IHRydWU7XG4gICAgfVxuICAgIGlmICh0eXBlb2YodGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXgpID09PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKHRoaXMubW9kZWwgJiYgKHRoaXMuc2VhcmNoUmVzdWx0cyB8fCB0aGlzLnN1Z2dlc3Rpb25zKSkge1xuICAgICAgICBmb3IgKGxldCBzdWdnZXN0aW9uSW5kZXggPSAwOyBzdWdnZXN0aW9uSW5kZXggPCAodGhpcy5zZWFyY2hSZXN1bHRzIHx8IHRoaXMuc3VnZ2VzdGlvbnMpLmxlbmd0aDsgc3VnZ2VzdGlvbkluZGV4KyspIHtcbiAgICAgICAgICBjb25zdCBpdGVtID0gKHRoaXMuc2VhcmNoUmVzdWx0cyB8fCB0aGlzLnN1Z2dlc3Rpb25zKVtzdWdnZXN0aW9uSW5kZXhdO1xuICAgICAgICAgIGlmICh0aGlzLm1vZGVsLmlkID09PSBpdGVtLmlkICYmIHRoaXMubW9kZWwudHlwZSA9PT0gaXRlbS50eXBlKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCA9IHN1Z2dlc3Rpb25JbmRleDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmVuc3VyZURyb3Bkb3duSXNWaXNpYmxlKCk7XG4gIH1cblxuICBkaXNtaXNzRHJvcGRvd24oZXZlbnQ/KSB7XG4gICAgdGhpcy5kcm9wZG93blZpc2libGUgPSBmYWxzZTtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZHJvcGRvd24pIHtcbiAgICAgIHRoaXMuZHJvcGRvd24uY2xhc3NMaXN0LnJlbW92ZSgnVmx0LWRyb3Bkb3duLS1leHBhbmRlZCcpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyKCkge1xuICAgIHRoaXMucHJldk1vZGVsID0gdGhpcy5tb2RlbDtcbiAgICBkZWxldGUgdGhpcy5zZWFyY2hUZXh0O1xuICAgIGRlbGV0ZSB0aGlzLnNlYXJjaFJlc3VsdHM7XG4gICAgZGVsZXRlIHRoaXMubW9kZWw7XG4gICAgZGVsZXRlIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4O1xuICAgIHRoaXMub25Nb2RlbENoYW5nZSh0aGlzLm1vZGVsKTtcbiAgICB0aGlzLm9uU2VhcmNoVGV4dENoYW5nZWQodGhpcy5zZWFyY2hUZXh0KTtcbiAgICB0aGlzLmZvY3VzKCk7XG4gIH1cblxuICByZXZlcnQoKSB7XG4gICAgdGhpcy5tb2RlbCA9IHRoaXMucHJldk1vZGVsO1xuICAgIGRlbGV0ZSB0aGlzLnByZXZNb2RlbDtcbiAgICB0aGlzLm9uTW9kZWxDaGFuZ2UodGhpcy5tb2RlbCk7XG4gICAgdGhpcy5mb2N1cygpO1xuICB9XG5cbiAgcmVtb3ZlKGV2LCBpdGVtKSB7XG4gICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBvcHRpb25JbmRleCA9IHRoaXMubW9kZWwuaW5kZXhPZihpdGVtKTtcbiAgICBpZiAob3B0aW9uSW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLm1vZGVsLnNwbGljZShvcHRpb25JbmRleCwgMSk7XG4gICAgICBpZiAoIXRoaXMubW9kZWwubGVuZ3RoKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLm1vZGVsO1xuICAgICAgICBkZWxldGUgdGhpcy52YWx1ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMub25Nb2RlbENoYW5nZSh0aGlzLm1vZGVsKTtcbiAgICB9XG4gIH1cblxuICBvcGVuUmVzb3VyY2UobW9kZWw/KSB7XG4gICAgdGhpcy5rZXlMaXN0ZW5lckFjdGl2ZSA9IHRydWU7IC8vIHN1cHByZXNzIGRyb3Bkb3duIGluIHRoaXMgY2FzZVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5kaXNtaXNzRHJvcGRvd24oKTtcbiAgICB9KTtcbiAgICBjb25zdCByZWZEaWFsb2dGYWN0b3J5ID0gdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoTWV0YVJlZkRpYWxvZyk7XG4gICAgdGhpcy5tZXRhVHJhY2tlci5lbWl0KHRoaXMuYnVpbGRUcmFja0V2ZW50KG1vZGVsID8gJ0VESVQnIDogJ05FVycpKTtcbiAgICBsZXQgdGhlbWUgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5kYXRhc2V0LnRoZW1lO1xuICAgIGlmICghdGhlbWUgfHwgdGhlbWUgPT09ICdpbmhlcml0Jykge1xuICAgICAgbGV0IHBhcmVudENvbXBvbmVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsb3Nlc3QoJ3ZnaXAtbWV0YS1sYXlvdXQnKTtcbiAgICAgIGlmIChwYXJlbnRDb21wb25lbnQpIHtcbiAgICAgICAgdGhlbWUgPSBwYXJlbnRDb21wb25lbnQuZGF0YXNldC50aGVtZTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhlbWUgfHwgdGhlbWUgPT09ICdpbmhlcml0Jykge1xuICAgICAgICBwYXJlbnRDb21wb25lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbG9zZXN0KCd2Z2lwLW1ldGEtcmVzb3VyY2UnKTtcbiAgICAgICAgaWYgKHBhcmVudENvbXBvbmVudCkge1xuICAgICAgICAgIHRoZW1lID0gcGFyZW50Q29tcG9uZW50LmRhdGFzZXQudGhlbWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5yZWZlcmVuY2VTZXJ2aWNlLm9wZW5EaWFsb2coXG4gICAgICByZWZEaWFsb2dGYWN0b3J5LCB0aGlzLm1ldGFSZXNvdXJjZSwgdGhpcy5pbnRlZ3JhdGlvbkNvZGUsIHRoaXMubWV0YVJlZmVyZW5jZSwgbW9kZWwsIG51bGwsIHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlLnJlc291cmNlVHlwZSxcbiAgICAgIHRoZW1lXG4gICAgKS5zdWJzY3JpYmUoKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIHRoaXMucGFyZW50W3RoaXMubWV0YS5uYW1lXSA9IHJlc3VsdDtcbiAgICAgICAgdGhpcy5vbkNoYW5nZS5lbWl0KHJlc3VsdCk7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nU3VnZ2VzdGlvbiA9ICh0aGlzLm1ldGEuc3VnZ2VzdGlvbnMgfHwgW10pLmZpbmQoKHMpID0+IChzLmlkID09PSByZXN1bHQuaWQgJiYgcy50eXBlID09PSByZXN1bHQudHlwZSkpO1xuICAgICAgICBpZiAoZXhpc3RpbmdTdWdnZXN0aW9uKSB7XG4gICAgICAgICAgZXhpc3RpbmdTdWdnZXN0aW9uLmxhYmVsID0gcmVzdWx0LmxhYmVsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICghdGhpcy5tZXRhLnN1Z2dlc3Rpb25zKSB7XG4gICAgICAgICAgICB0aGlzLm1ldGEuc3VnZ2VzdGlvbnMgPSBbXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5tZXRhLnN1Z2dlc3Rpb25zLnVuc2hpZnQocmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1ldGFUcmFja2VyLmVtaXQodGhpcy5idWlsZFRyYWNrRXZlbnQobW9kZWwgPyAnVVBEQVRFJyA6ICdDUkVBVEUnLCByZXN1bHQudHlwZSB8fCByZXN1bHQucmVzb3VyY2VUeXBlKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm1ldGFUcmFja2VyLmVtaXQodGhpcy5idWlsZFRyYWNrRXZlbnQobW9kZWwgPyAnQ0FOQ0VMX0VESVQnIDogJ0NBTkNFTF9VUERBVEUnKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGVuc3VyZURyb3Bkb3duSXNWaXNpYmxlKCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgaG9sZGVyID0gdGhpcy5kcm9wZG93bi5jbG9zZXN0KCcuVmx0LWNhcmRfX2NvbnRlbnQnKTtcbiAgICAgIGlmIChob2xkZXIpIHtcbiAgICAgICAgY29uc3QgZWwgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuVmx0LWRyb3Bkb3duX19wYW5lbCcpO1xuICAgICAgICBjb25zdCBlbFJlY3QgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgaG9sZGVyUmVjdCA9IGhvbGRlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgaWYgKGhvbGRlclJlY3QudG9wICsgaG9sZGVyUmVjdC5oZWlnaHQgPCBlbFJlY3QudG9wICsgZWxSZWN0LmhlaWdodCkge1xuICAgICAgICAgIGVsLnNjcm9sbEludG9WaWV3KHsgYmxvY2s6ICdlbmQnIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgNDAwKTtcbiAgfVxuXG4gIHByaXZhdGUgZW5zdXJlRHJvcGRvd25PcHRpb25Jc1Zpc2libGUoKSB7XG4gICAgaWYgKCF0aGlzLmRyb3Bkb3duU2Nyb2xsQ29udGFpbmVyKSB7XG4gICAgICB0aGlzLmRyb3Bkb3duU2Nyb2xsQ29udGFpbmVyID0gdGhpcy5kcm9wZG93bi5xdWVyeVNlbGVjdG9yKCcuVmx0LWRyb3Bkb3duX19zY3JvbGwnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZHJvcGRvd25TY3JvbGxDb250YWluZXIgJiYgdHlwZW9mICh0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCkgPT09ICdudW1iZXInKSB7XG4gICAgICBjb25zdCBzY3JvbGxUb3AgPSA0NCAqIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4O1xuICAgICAgY29uc3Qgc2Nyb2xsQm90dG9tID0gNDQgKiAodGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXggLSA3KTtcbiAgICAgIGlmIChzY3JvbGxUb3AgPCB0aGlzLmRyb3Bkb3duU2Nyb2xsQ29udGFpbmVyLnNjcm9sbFRvcCkge1xuICAgICAgICB0aGlzLmRyb3Bkb3duU2Nyb2xsQ29udGFpbmVyLnNjcm9sbFRvcCA9IHNjcm9sbFRvcDtcbiAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsQm90dG9tID4gdGhpcy5kcm9wZG93blNjcm9sbENvbnRhaW5lci5zY3JvbGxUb3ApIHtcbiAgICAgICAgdGhpcy5kcm9wZG93blNjcm9sbENvbnRhaW5lci5zY3JvbGxUb3AgPSBzY3JvbGxCb3R0b207XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbGlja291dCA9IChldmVudCkgPT4ge1xuICAgIGNvbnN0IGludGVybmFsQ29udHJvbCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCk7XG4gICAgaWYgKGludGVybmFsQ29udHJvbCAmJiBbJ1ZsdC1kcm9wZG93bl9fbGluaycsICdWbHQtZHJvcGRvd25fX2Jsb2NrJ10uaW5kZXhPZihldmVudC50YXJnZXQuY2xhc3NOYW1lKSAhPT0gLTEgKSB7XG4gICAgICB0aGlzLmZvY3VzKCk7XG4gICAgfSBlbHNlIGlmICghaW50ZXJuYWxDb250cm9sICYmIGV2ZW50LnRhcmdldCAhPT0gdGhpcy5pbnB1dCAmJiBldmVudC50YXJnZXQuY2xhc3NOYW1lICE9PSAnVmx0LWRyb3Bkb3duX190aXRsZScpIHtcbiAgICAgIHRoaXMuZGlzbWlzc0Ryb3Bkb3duKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghaW50ZXJuYWxDb250cm9sICYmIGludGVybmFsQ29udHJvbC50YWdOYW1lICE9PSAnSU5QVVQnKSB7XG4gICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgcHJpdmF0ZSBidWlsZFRyYWNrRXZlbnQoYWN0aW9uOiBzdHJpbmcsIHZhbHVlPzogc3RyaW5nKSB7XG4gICAgY29uc3QgZTogSU1ldGFUcmFja2VyRXZlbnQgPSB7XG4gICAgICBpbnRlZ3JhdGlvbjogdGhpcy5pbnRlZ3JhdGlvbkNvZGUsXG4gICAgICByZXNvdXJjZTogdGhpcy5tb2RlbCA/ICh0aGlzLm1vZGVsLnR5cGUgfHwgdGhpcy5tb2RlbC5yZXNvdXJjZVR5cGUpIDogdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGUucmVzb3VyY2VUeXBlLFxuICAgICAgZmllbGQ6IHRoaXMubWV0YS5uYW1lLFxuICAgICAgYWN0aW9uXG4gICAgfTtcbiAgICBpZiAodGhpcy5tZXRhLiRpc0NvbnRhY3RhYmxlKSB7XG4gICAgICBlLmlzQ29udGFjdGFibGUgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mKHZhbHVlKSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGUudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGU7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUGxhY2Vob2xkZXJMYWJlbCgpIHtcbiAgICB0aGlzLnBsYWNlSG9sZGVyTGFiZWwgPSB0aGlzLm1ldGEubGFiZWw7XG4gICAgaWYgKHRoaXMubXVsdGlwbGUgJiYgIXRoaXMuaXNQb2x5bW9ycGhpYykge1xuICAgICAgdGhpcy5wbGFjZUhvbGRlckxhYmVsID0gJytBZGQgJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wbGFjZUhvbGRlckxhYmVsID0gKHRoaXMuaXNTZWFyY2hhYmxlICYmICh0aGlzLm11bHRpcGxlIHx8ICF0aGlzLmlzUG9seW1vcnBoaWMpKSA/ICdTZWFyY2ggJyA6ICcnO1xuICAgIH1cbiAgICB0aGlzLnBsYWNlSG9sZGVyTGFiZWwgKz0gdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGUucmVzb3VyY2VUeXBlID8gdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGUucmVzb3VyY2VUeXBlIDogdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGVzU2NvcGU7XG4gIH1cblxuICBwcml2YXRlIGtleWRvd24gPSAoZXZlbnQpID0+IHtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnQXJyb3dEb3duJzoge1xuICAgICAgICB0aGlzLnNob3dEcm9wZG93bigpO1xuICAgICAgICBpZiAodHlwZW9mICh0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXggPSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4Kys7XG4gICAgICAgICAgaWYgKHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4ID49ICh0aGlzLnNlYXJjaFJlc3VsdHMgfHwgdGhpcy5zdWdnZXN0aW9ucykubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW5zdXJlRHJvcGRvd25PcHRpb25Jc1Zpc2libGUoKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnQXJyb3dVcCc6IHtcbiAgICAgICAgdGhpcy5zaG93RHJvcGRvd24oKTtcbiAgICAgICAgaWYgKHR5cGVvZiAodGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXgpID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4ID0gKHRoaXMuc2VhcmNoUmVzdWx0cyB8fCB0aGlzLnN1Z2dlc3Rpb25zKS5sZW5ndGggLSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4LS07XG4gICAgICAgICAgaWYgKHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4IDwgMCkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXggPSAodGhpcy5zZWFyY2hSZXN1bHRzIHx8IHRoaXMuc3VnZ2VzdGlvbnMpLmxlbmd0aCAtIDE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW5zdXJlRHJvcGRvd25PcHRpb25Jc1Zpc2libGUoKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnU3BhY2UnOlxuICAgICAgY2FzZSAnRW50ZXInOiB7XG4gICAgICAgIGlmICh0eXBlb2YgKHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4KSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHRoaXMub25TdWdnZXN0aW9uU2VsZWN0KGV2ZW50LCAodGhpcy5zZWFyY2hSZXN1bHRzIHx8IHRoaXMuc3VnZ2VzdGlvbnMpW3RoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4XSk7XG4gICAgICAgICAgZGVsZXRlIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4O1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnRXNjYXBlJzoge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5kaXNtaXNzRHJvcGRvd24oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdCYWNrc3BhY2UnOiB7XG4gICAgICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgdGhpcy5yZW1vdmVTZWxlY3Rpb24oKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgcHJpdmF0ZSBidWlsZEV4dGVybmFsTGluaygpIHtcbiAgICBpZiAodGhpcy5tb2RlbCkge1xuICAgICAgaWYgKHRoaXMubW9kZWwuZXh0ZXJuYWxMaW5rKSB7XG4gICAgICAgIHRoaXMuZXh0ZXJuYWxMaW5rID0gdGhpcy5tb2RlbC5leHRlcm5hbExpbms7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMubWV0YUNvbnRleHQucHJvZmlsZXNbdGhpcy5pbnRlZ3JhdGlvbkNvZGUudG9VcHBlckNhc2UoKV0pIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuZXh0ZXJuYWxMaW5rO1xuICAgICAgICB0aGlzLm1ldGFNc2dTZXJ2aWNlLnNlbmRNZXNzYWdlKFxuICAgICAgICAgIHRoaXMuaW50ZWdyYXRpb25Db2RlLnRvVXBwZXJDYXNlKCksXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWN0aW9uOiAnYnVpbGRFeHRlcm5hbExpbmsnLFxuICAgICAgICAgICAgaW50ZWdyYXRpb25Db2RlOiB0aGlzLmludGVncmF0aW9uQ29kZSxcbiAgICAgICAgICAgIHJlZjogdGhpcy5tb2RlbCxcbiAgICAgICAgICAgIHByb2ZpbGU6IHRoaXMubWV0YUNvbnRleHQucHJvZmlsZXNbdGhpcy5pbnRlZ3JhdGlvbkNvZGUudG9VcHBlckNhc2UoKV1cbiAgICAgICAgICB9LFxuICAgICAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5lcnJvcikge1xuICAgICAgICAgICAgICB0aGlzLmV4dGVybmFsTGluayA9IHJlc3BvbnNlLmV4dGVybmFsTGluaztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUud2FybignTm8gZXh0ZXJuYWwgbGluayBzdXBwb3J0IGZvcicsIHRoaXMuaW50ZWdyYXRpb25Db2RlLCB0aGlzLm1vZGVsLnJlc291cmNlVHlwZSB8fCB0aGlzLm1vZGVsLnR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHRoaXMuZXh0ZXJuYWxMaW5rO1xuICAgIH1cbiAgfVxuXG4gIGdldCBkaXNhYmxlZCgpIHtcbiAgICBjb25zdCBzdXBlckRpc2FibGVkID0gdGhpcy5sb2dpY2FsRGlzYWJsZWQgfHwgdGhpcy52YWxpZGF0aW9ucy5kaXNhYmxlZCB8fCB0aGlzLm1ldGEuZGlzYWJsZWQgPT09IHRydWVcbiAgICAgIHx8ICh0aGlzLm1ldGEudXBkYXRhYmxlID09PSBmYWxzZSAmJiB0aGlzLmlzUGVyc2lzdGVkUGFyZW50KTtcbiAgICB0aGlzLnNlYXJjaFJlc291cmNlVHlwZU1ldGEuZGlzYWJsZWQgPSBzdXBlckRpc2FibGVkO1xuICAgIHJldHVybiBzdXBlckRpc2FibGVkO1xuICB9XG5cbiAgZ2V0IHNob3dUeXBlcygpIHtcbiAgICByZXR1cm4gKHR5cGVvZiAodGhpcy5tZXRhLnNob3dUeXBlcykgIT09ICd1bmRlZmluZWQnKSA/IHRoaXMubWV0YS5zaG93VHlwZXMgOiB0cnVlO1xuICB9XG5cbiAgZ2V0IHN1Z2dlc3Rpb25zKCkge1xuICAgIHJldHVybiB0aGlzLnNtYXJ0U3VnZ2VzdGlvbnMuY29uY2F0KFxuICAgICAgIXRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlLnJlc291cmNlVHlwZSA/XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgICAgKHRoaXMuYXN5bmNTdWdnZXN0aW9ucyB8fCB0aGlzLm1ldGEuc3VnZ2VzdGlvbnMgfHwgW10pIDogKHRoaXMuYXN5bmNTdWdnZXN0aW9ucyB8fCB0aGlzLm1ldGEuc3VnZ2VzdGlvbnMgfHwgW10pLmZpbHRlcigocykgPT4gcy50eXBlID09PSB0aGlzLnNlYXJjaFJlc291cmNlVHlwZS5yZXNvdXJjZVR5cGUpXG4gICAgKTtcbiAgfVxuXG4gIGdldCBoYXNBcHBlbmRCdXR0b24oKSB7XG4gICAgaWYgKCF0aGlzLm11bHRpcGxlICYmIHRoaXMubW9kZWwpIHtcbiAgICAgIGlmICh0aGlzLmlzUG9seW1vcnBoaWMpIHtcbiAgICAgICAgZm9yIChjb25zdCByZWYgb2YgdGhpcy5tZXRhUmVmZXJlbmNlKSB7XG4gICAgICAgICAgaWYgKChyZWYubmFtZSB8fCByZWYucmVzb3VyY2VUeXBlKSA9PT0gKHRoaXMubW9kZWwudHlwZSB8fCB0aGlzLm1vZGVsLnJlc291cmNlVHlwZSkpIHtcbiAgICAgICAgICAgIHJldHVybiByZWYudXBkYXRhYmxlIHx8IChyZWYuY3JlYXRhYmxlICYmIHJlZi51cGRhdGFibGUgIT09IGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldGFSZWZlcmVuY2UudXBkYXRhYmxlIHx8ICh0aGlzLm1ldGFSZWZlcmVuY2UuY3JlYXRhYmxlICYmIHRoaXMubWV0YVJlZmVyZW5jZS51cGRhdGFibGUgIT09IGZhbHNlKTsgLy8gVkdJUy02OTExXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLm1ldGFSZWZlcmVuY2UgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIC8vIHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlc1Njb3BlID0gdGhpcy5tZXRhUmVmZXJlbmNlLm1hcChydCA9PiBydC5uYW1lKS5qb2luKCcsJyk7XG4gICAgICAvLyB9LCAwKTtcbiAgICAgIGZvciAoY29uc3QgcnQgb2YgdGhpcy5tZXRhUmVmZXJlbmNlKSB7XG4gICAgICAgIGlmIChydC5jcmVhdGFibGUpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5tZXRhUmVmZXJlbmNlLmNyZWF0YWJsZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNlYXJjaFN1Z2dlc3Rpb25zKHBhcmFtcz8pIHtcbiAgICBsZXQgc2VhcmNoVXJsID0gYC9zdWdnZXN0aW9ucy8ke3RoaXMubWV0YS5uYW1lfS9zZWFyY2hgO1xuICAgIGlmICh0aGlzLm1ldGEuc2VhcmNoKSB7XG4gICAgICBpZiAodGhpcy5tZXRhLnNlYXJjaC51cmwpIHtcbiAgICAgICAgc2VhcmNoVXJsID0gdGhpcy5tZXRhLnNlYXJjaC51cmwucmVwbGFjZSgvXFwke1xccyooW1xcd1xcLl0rKVxccyp9L2csIChtYXRjaCwga2V5KSA9PiB7XG4gICAgICAgICAgaWYgKHBhcmFtcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICBjb25zdCB2YWwgPSBwYXJhbXNba2V5XTtcbiAgICAgICAgICAgIGRlbGV0ZSBwYXJhbXNba2V5XTtcbiAgICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IHAgb2YgT2JqZWN0LmtleXMocGFyYW1zKSkge1xuICAgICAgICBzZWFyY2hVcmwgKz0gYCR7c2VhcmNoVXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJid9JHtlbmNvZGVVUklDb21wb25lbnQocCl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtc1twXSl9YDtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VhcmNoaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMucmVzb3VyY2VTZXJ2aWNlLmdldEJ5UGF0aChzZWFyY2hVcmwpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnNlYXJjaGluZztcbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgIGxldCBzdWdnZXN0aW9ucztcbiAgICAgICAgICBzdWdnZXN0aW9ucyA9IHJlc3VsdDtcbiAgICAgICAgICBpZiAodGhpcy5tZXRhLnNlYXJjaC5leHRyYWN0KSB7XG4gICAgICAgICAgICBzdWdnZXN0aW9ucyA9IHJlc3VsdFt0aGlzLm1ldGEuc2VhcmNoLmV4dHJhY3RdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc3VnZ2VzdGlvbnMgaW5zdGFuY2VvZiBBcnJheSAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgc3VnZ2VzdGlvbnMgPSBbc3VnZ2VzdGlvbnNdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBhc3luY1N1Z2dlc3Rpb25zID0gW107XG4gICAgICAgICAgc3VnZ2VzdGlvbnMuZm9yRWFjaCgocykgPT4ge1xuICAgICAgICAgICAgaWYgKHMgJiYgcy5pZCAmJiBzLnR5cGUpIHsgLy8gVE9PRCBjaGVjayB0aGUgdHlwZSBpcyBhY2NlcHRhYmxlXG4gICAgICAgICAgICAgIGFzeW5jU3VnZ2VzdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgaWQ6IHMuaWQsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHMubGFiZWwgfHwgYCR7cy50eXBlfSMke3MuaWR9YCxcbiAgICAgICAgICAgICAgICB0eXBlOiBzLnR5cGVcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGFzeW5jU3VnZ2VzdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoYXN5bmNTdWdnZXN0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgdGhpcy5wYXJlbnRbdGhpcy5tZXRhLm5hbWVdID0gYXN5bmNTdWdnZXN0aW9uc1swXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmFzeW5jU3VnZ2VzdGlvbnM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuYXN5bmNTdWdnZXN0aW9ucyA9IGFzeW5jU3VnZ2VzdGlvbnM7XG4gICAgICAgIH1cbiAgICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgZGVsZXRlIHRoaXMuc2VhcmNoaW5nO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHJlc291cmNlU2VydmljZSgpIHtcbiAgICBpZiAoIXRoaXMubWV0YVJlc291cmNlU2VydmljZSkge1xuICAgICAgY29uc3QgbWV0YVJlc291cmNlQ29uZmlnOiBJTWV0YVJlc291cmNlQ29uZmlnID0ge1xuICAgICAgICBpbnRlZ3JhdGlvbkNvZGU6IHRoaXMuaW50ZWdyYXRpb25Db2RlLFxuICAgICAgICByZXNvdXJjZVR5cGU6IHRoaXMucmVzb3VyY2VUeXBlXG4gICAgICB9O1xuICAgICAgdGhpcy5tZXRhUmVzb3VyY2VTZXJ2aWNlID0gdGhpcy5tZXRhUmVzb3VyY2UubmV3KG1ldGFSZXNvdXJjZUNvbmZpZyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm1ldGFSZXNvdXJjZVNlcnZpY2U7XG4gIH1cblxuICBnZXQgbWV0YVJlZmVyZW5jZSgpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRhLnJlZmVyZW5jZSB8fCB7fTtcbiAgfVxufVxuXG4vLy8vIEZJRUxEIExJU1RcbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZVVybDogJy4vZmllbGRMaXN0L3ZpZXcuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ZpZWxkTGlzdC9zdHlsZS5zY3NzJ10sXG4gIHZpZXdQcm92aWRlcnM6IFt7IHByb3ZpZGU6IENvbnRyb2xDb250YWluZXIsIHVzZUV4aXN0aW5nOiBOZ0Zvcm0gfV1cbn0pXG5leHBvcnQgY2xhc3MgRmllbGRMaXN0IGV4dGVuZHMgRmllbGRBYnN0cmFjdCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGl0ZW1zOiBBcnJheTxhbnk+ID0gW107XG4gIHZhbHVlOiBhbnk7XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgY29uc3Qgb3JpZ1ZhbHVlID0gdGhpcy5wYXJlbnRbdGhpcy5tZXRhLm5hbWVdO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLnBhcmVudCwgdGhpcy5tZXRhLm5hbWUsIHtcbiAgICAgIHNldDogKHZhbHVlKSA9PiB7XG4gICAgICAgIHRoaXMubW9kZWwgPSBbXTtcbiAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgIGZvciAoY29uc3QgaSBvZiB2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMubW9kZWwuaW5kZXhPZihpKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgdGhpcy5tb2RlbC5wdXNoKGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5tb2RlbDtcbiAgICAgICAgdGhpcy5tZXRhLiRvcHRpb25hbCA9IHRoaXMuaXNPcHRpb25hbDtcbiAgICAgIH0sXG4gICAgICBnZXQ6ICgpID0+IHRoaXMudmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgaWYgKG9yaWdWYWx1ZSkge1xuICAgICAgdGhpcy5wYXJlbnRbdGhpcy5tZXRhLm5hbWVdID0gb3JpZ1ZhbHVlO1xuICAgIH1cbiAgICBpZiAoIXRoaXMubW9kZWwgJiYgdGhpcy52YWxpZGF0aW9ucy5taW4pIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy52YWxpZGF0aW9ucy5taW47IGkrKykge1xuICAgICAgICB0aGlzLmFkZCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCBsaXN0KCkge1xuICAgIHJldHVybiB0aGlzLm1ldGEubGlzdCB8fCB0aGlzLm1ldGEucmVmZXJlbmNlO1xuICB9XG5cbiAgYWRkKCkge1xuICAgIGlmICghdGhpcy5tb2RlbCkge1xuICAgICAgdGhpcy5tb2RlbCA9IFtdO1xuICAgIH1cbiAgICBpZiAoIXRoaXMudmFsaWRhdGlvbnMubWF4IHx8ICh0aGlzLnZhbGlkYXRpb25zLm1heCA+IHRoaXMubW9kZWwubGVuZ3RoKSkge1xuICAgICAgdGhpcy5tb2RlbC5wdXNoKHt9KTtcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm1vZGVsO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZShpdGVtSW5kZXgpIHtcbiAgICB0aGlzLm1vZGVsLnNwbGljZShpdGVtSW5kZXgsIDEpO1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLm1vZGVsO1xuICB9XG59XG5cbi8vLy8gTEFZT1VUXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2Z2lwLW1ldGEtbGF5b3V0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2xheW91dC92aWV3Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9sYXlvdXQvc3R5bGUuc2NzcyddLFxuICBlbnRyeUNvbXBvbmVudHM6IFtcbiAgICBNZXRhUmVmRGlhbG9nXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgTWV0YUxheW91dCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50Q2hlY2tlZCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgbWV0YTogYW55O1xuICBASW5wdXQoKSByZXNvdXJjZTogYW55O1xuICBASW5wdXQoKSBpbnRlZ3JhdGlvbjogYW55O1xuICBASW5wdXQoKSB0eXBlOiBhbnk7XG4gIEBJbnB1dCgpIHByZXZpZXc6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHRoZW1lOiBzdHJpbmc7XG5cbiAgb3B0aW9uYWxGaWVsZHM6IGFueSA9IHt9O1xuICBvcHRpb25hbEZpZWxkc0NvdW50OiBudW1iZXI7XG4gIHNob3dBbGwgPSBmYWxzZTtcbiAgZmllbGRzVmlzaWJpbGl0eUNoYW5nZWQ6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcbiAgcmVmRGlhbG9nRmFjdG9yeTogYW55O1xuICBwYXJlbnRGb3JtOiBIVE1MRm9ybUVsZW1lbnQ7XG4gIGludGVncmF0aW9uQ29kZTogc3RyaW5nO1xuICByZXNvdXJjZVR5cGU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgIHByaXZhdGUgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgbWV0YVJlc291cmNlOiBNZXRhUmVzb3VyY2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVmZXJlbmNlU2VydmljZTogTWV0YVJlZmVyZW5jZVNlcnZpY2VcbiAgKSB7XG4gICAgLy8gY29uc29sZS5sb2coJ01ldGFMYXlvdXQnLCB0aGlzLm1ldGEpO1xuXG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmludGVncmF0aW9uQ29kZSA9IHRoaXMubWV0YS5pbnRlZ3JhdGlvbkNvZGUgfHwgdGhpcy5pbnRlZ3JhdGlvbjtcbiAgICB0aGlzLnJlc291cmNlVHlwZSA9IHRoaXMubWV0YS5yZXNvdXJjZVR5cGUgfHwgdGhpcy50eXBlO1xuICAgIHRoaXMucGFyZW50Rm9ybSA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5jbG9zZXN0KCdmb3JtJyk7XG4gICAgdGhpcy5jb25maWd1cmVPcHRpb25hbFNlY3Rpb25zKCk7XG4gICAgXG4gICAgdGhpcy5maWVsZHNWaXNpYmlsaXR5Q2hhbmdlZC5waXBlKGRlYm91bmNlVGltZSgxMDApLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKS5zdWJzY3JpYmUoKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgIHRoaXMuY291bnRPcHRpb25hbEZpZWxkcygpO1xuICAgIH0pO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5jb3VudE9wdGlvbmFsRmllbGRzKCk7XG4gICAgfSwgMCk7XG5cbiAgICBpZiAodGhpcy5wYXJlbnRGb3JtKSB7XG4gICAgICB0aGlzLnBhcmVudEZvcm0uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKGUpID0+IHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5maWVsZHNWaXNpYmlsaXR5Q2hhbmdlZC5uZXh0KEpTT04uc3RyaW5naWZ5KHRoaXMucmVzb3VyY2UpKTtcbiAgICAgICAgICB0aGlzLmNvdW50T3B0aW9uYWxGaWVsZHMoKTtcbiAgICAgICAgfSwgMCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50aGVtZSAhPT0gJ2luaGVyaXQnKSB7XG4gICAgICB0aGlzLmFwcGx5VGhlbWUoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBhbnkpIHtcbiAgICBpZiAoY2hhbmdlcy5tZXRhKSB7XG4gICAgICB0aGlzLmNvbmZpZ3VyZU9wdGlvbmFsU2VjdGlvbnMoKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmNvdW50T3B0aW9uYWxGaWVsZHMoKTtcbiAgICAgIH0sIDApO1xuICAgIH0gZWxzZSBpZiAoY2hhbmdlcy50aGVtZSkge1xuICAgICAgdGhpcy50aGVtZSA9IGNoYW5nZXMudGhlbWUuY3VycmVudFZhbHVlO1xuICAgICAgdGhpcy5hcHBseVRoZW1lKCk7XG4gICAgfVxuICB9XG5cbiAgY291bnRPcHRpb25hbEZpZWxkcygpIHtcbiAgICBsZXQgY291bnQgPSAwO1xuICAgIGNvbnN0IGNvdW50U2VjdGlvbkZpZWxkcyA9IChzKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGYgb2Ygcy5maWVsZHMpIHtcbiAgICAgICAgaWYgKGYuZmllbGRzICYmIGYuZmllbGRzLmxlbmd0aCAmJiAhZi52aXNpYmxlKSB7XG4gICAgICAgICAgY291bnRTZWN0aW9uRmllbGRzKGYpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChmLiRvcHRpb25hbCAmJiAhZi4kaGlkZGVuKSB7XG4gICAgICAgICAgICBjb3VudCsrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgZm9yIChjb25zdCBzIG9mIHRoaXMubWV0YS5zZWN0aW9ucykge1xuICAgICAgY29uc3Qgbm90T3B0aW9uYWxBbnkgPSBzLmZpZWxkcy5maW5kKGYgPT4gIWYuJG9wdGlvbmFsKTtcbiAgICAgIHMuJG9wdGlvbmFsID0gIW5vdE9wdGlvbmFsQW55O1xuICAgICAgaWYgKCFzLnZpc2libGUpIHtcbiAgICAgICAgY291bnRTZWN0aW9uRmllbGRzKHMpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm9wdGlvbmFsRmllbGRzQ291bnQgPSBjb3VudDtcbiAgfVxuXG4gIGNvbmZpZ3VyZU9wdGlvbmFsU2VjdGlvbnMoKSB7XG4gICAgaWYgKHRoaXMubWV0YSAmJiB0aGlzLm1ldGEuc2VjdGlvbnMpIHtcbiAgICAgIGZvciAoY29uc3QgcyBvZiB0aGlzLm1ldGEuc2VjdGlvbnMpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHMsICckb3B0aW9uYWwnLCB7XG4gICAgICAgICAgdmFsdWU6IHRydWUsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpIHtcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICB0b2dnbGVPcHRpb25hbEZpZWxkcygpIHtcbiAgICB0aGlzLnNob3dBbGwgPSAhdGhpcy5zaG93QWxsO1xuICAgIHRoaXMubmdBZnRlckNvbnRlbnRDaGVja2VkKCk7XG4gIH1cblxuICBvcGVuQ2hpbGQoY2hpbGRSZXNvdXJjZSwgY2hpbGRNb2RlbD8pIHtcbiAgICBjaGlsZFJlc291cmNlLnJlZmVyZW5jZS5wYXJlbnQgPSB0aGlzLnJlc291cmNlLl92Z2lzOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVyc2NvcmUtZGFuZ2xlXG4gICAgaWYgKCF0aGlzLnJlZkRpYWxvZ0ZhY3RvcnkpIHtcbiAgICAgIHRoaXMucmVmRGlhbG9nRmFjdG9yeSA9IHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KE1ldGFSZWZEaWFsb2cpO1xuICAgIH1cbiAgICB0aGlzLnJlZmVyZW5jZVNlcnZpY2Uub3BlbkRpYWxvZyhcbiAgICAgIHRoaXMucmVmRGlhbG9nRmFjdG9yeSwgdGhpcy5tZXRhUmVzb3VyY2UsIHRoaXMuaW50ZWdyYXRpb25Db2RlLCBjaGlsZFJlc291cmNlLnJlZmVyZW5jZSwgY2hpbGRNb2RlbCwgXG4gICAgICBjaGlsZE1vZGVsICYmIChjaGlsZFJlc291cmNlLnJlZmVyZW5jZS5lZGl0YWJsZSA9PT0gZmFsc2UpIC8vIGlzIHByZXZpZXcgbW9kZVxuICAgICkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQucmF3KSB7XG4gICAgICAgIGlmICghdGhpcy5yZXNvdXJjZVtjaGlsZFJlc291cmNlLm5hbWVdKSB7XG4gICAgICAgICAgdGhpcy5yZXNvdXJjZVtjaGlsZFJlc291cmNlLm5hbWVdID0gW107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZXNvdXJjZVtjaGlsZFJlc291cmNlLm5hbWVdLnB1c2gocmVzdWx0LnJhdyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXQgaXNQZXJzaXN0ZWRSZXNvdXJjZSgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZXJzY29yZS1kYW5nbGVcbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZSAmJiB0aGlzLnJlc291cmNlLl92Z2lzICYmICh0aGlzLnJlc291cmNlLl92Z2lzLmV4dGVybmFsSWQgfHwgdGhpcy5yZXNvdXJjZS5fdmdpcy5pZCApO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVRoZW1lKCkge1xuICAgIGNvbnN0IG1ldGFUaGVtZSA9IHRoaXMudGhlbWUgPT09ICdkYXJrJyA/IG1ldGFEYXJrIDogbWV0YUxpZ2h0O1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG1ldGFUaGVtZS5wcm9wZXJ0aWVzKSkge1xuICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KGtleSwgbWV0YVRoZW1lLnByb3BlcnRpZXNba2V5XSk7XG4gICAgfVxuICB9XG59XG5cbi8vLy8gUkVTT1VSQ0VcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZnaXAtbWV0YS1yZXNvdXJjZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9yZXNvdXJjZS92aWV3Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yZXNvdXJjZS9zdHlsZS5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTWV0YVJlc291cmNlIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSByZXNvdXJjZTogYW55O1xuICBASW5wdXQoKSBtb2RlbDogYW55O1xuICBASW5wdXQoKSBtZXRhUmVzb3VyY2VTZXJ2aWNlRGVsZWdhdGVkOiBNZXRhUmVzb3VyY2VTZXJ2aWNlOyAvLyBjYXJ5IGl0IGZyb20gdGhlIHBhcmVudCB0byBrZWVwIHRoZSBpbnRlcmNlcHRvcnNcbiAgQElucHV0KCkgdGhlbWU6IHN0cmluZztcbiAgQE91dHB1dCgpIHB1YmxpYyBkb25lID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIGludGVncmF0aW9uQ29kZTogc3RyaW5nO1xuICByZXNvdXJjZVR5cGU6IHN0cmluZztcbiAgbWV0YTogYW55O1xuICBzZXJ2aWNlOiBNZXRhUmVzb3VyY2VTZXJ2aWNlO1xuICBjdXJyZW50TGF5b3V0SWQ6IGFueTtcbiAgZm9ybUVycm9yczogYW55O1xuICBmaWVsZHNNYXA6IGFueTtcbiAgZWRpdCA9IHRydWU7XG4gIGJ1c3k6IGJvb2xlYW47XG4gIG1ldGFMb2FkaW5nOiBib29sZWFuO1xuICBnZW5lcmFsRXJyb3I6IHN0cmluZztcbiAgcmVzb3VyY2VNZW51VmlzaWJsZTogYm9vbGVhbjtcbiAgY29udGFjdHNTdWdnZXN0aW9uc0RvbmUgPSBmYWxzZTtcbiAgaXNFZGl0YWJsZTogYm9vbGVhbjtcbiAgaXNQZXJzaXN0ZW50OiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgcHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBtZXRhUmVzb3VyY2VTZXJ2aWNlOiBNZXRhUmVzb3VyY2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgbWV0YUNvbnRleHQ6IE1ldGFDb250ZXh0U2VydmljZSxcbiAgICBwcml2YXRlIG1ldGFNc2dTZXJ2aWNlOiBNZXRhTXNnU2VydmljZVxuICApIHtcblxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5pbnRlZ3JhdGlvbkNvZGUgPSAodGhpcy5yZXNvdXJjZS5pbnRlZ3JhdGlvbkNvZGUgfHwgJycpLnRvVXBwZXJDYXNlKCk7XG4gICAgdGhpcy5yZXNvdXJjZVR5cGUgPSB0aGlzLnJlc291cmNlLnJlc291cmNlVHlwZTtcbiAgICB0aGlzLnNlcnZpY2UgPSAodGhpcy5tZXRhUmVzb3VyY2VTZXJ2aWNlRGVsZWdhdGVkIHx8IHRoaXMubWV0YVJlc291cmNlU2VydmljZSkubmV3KHRoaXMucmVzb3VyY2UpO1xuICAgIGlmICghdGhpcy5tb2RlbCkge1xuICAgICAgdGhpcy5tb2RlbCA9IHt9O1xuICAgIH1cbiAgICBpZiAodGhpcy5yZXNvdXJjZS5yZWYgJiYgdGhpcy5yZXNvdXJjZS5yZWYuYWN0aXZpdHkpIHsgLy8gcmV1c2UgZmFpbGVkIGF1dG9hY3Rpdml0aWVzIGRhdGEgXG4gICAgICB0aGlzLm1vZGVsID0gdGhpcy5yZXNvdXJjZS5yZWYuYWN0aXZpdHk7XG4gICAgfVxuICAgIGlmICh0aGlzLnJlc291cmNlLmFjdGl2aXR5ICYmIHRoaXMucmVzb3VyY2UucmVmLmVkaXRhYmxlID09PSBmYWxzZSAmJiAhdGhpcy5yZXNvdXJjZS5leHRlcm5hbElkKSB7XG4gICAgICB0aGlzLnJlc291cmNlLmV4dGVybmFsSWQgPSAnTUlTU0lOR19FWFRFUk5BTF9JRCc7XG4gICAgfVxuICAgIHRoaXMuaXNQZXJzaXN0ZW50ID0gdGhpcy5yZXNvdXJjZSAmJiB0aGlzLnJlc291cmNlLmV4dGVybmFsSWQ7XG4gICAgaWYgKCF0aGlzLnJlc291cmNlLm1ldGEpIHtcbiAgICAgIHRoaXMubG9hZE1ldGFkYXRhKHRoaXMucmVzb3VyY2UubGF5b3V0SWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyAgIGlmICh0aGlzLmlzUGVyc2lzdGVudCAmJiAoIXRoaXMuaXNFZGl0YWJsZSB8fCB0aGlzLnJlc291cmNlc1tyZWYubmFtZV0ubWV0YS5sYXlvdXQuY2hpbGRyZW4pKSB7XG4gICAgICAvLyAgICAgdGhpcy5lZGl0ID0gZmFsc2U7XG4gICAgICAvLyAgIH1cbiAgICAgIHRoaXMubWV0YSA9IHRoaXMucmVzb3VyY2UubWV0YTtcbiAgICAgIHRoaXMuY3VycmVudExheW91dElkID0gdGhpcy5tZXRhLmxheW91dC5pZDtcbiAgICAgIHRoaXMuZ2V0RGV0YWlscygpO1xuICAgICAgdGhpcy5nZXRGaWVsZHNNYXAoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGhlbWUgIT09ICdpbmhlcml0Jykge1xuICAgICAgdGhpcy5hcHBseVRoZW1lKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogYW55KSB7XG4gICAgaWYgKGNoYW5nZXMudGhlbWUpIHtcbiAgICAgIHRoaXMudGhlbWUgPSBjaGFuZ2VzLnRoZW1lLmN1cnJlbnRWYWx1ZTtcbiAgICAgIGlmICh0aGlzLnRoZW1lICE9PSAnaW5oZXJpdCcpIHtcbiAgICAgICAgdGhpcy5hcHBseVRoZW1lKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZWRpdE1vZGUoKSB7XG4gICAgdGhpcy5lZGl0ID0gdHJ1ZTtcbiAgfVxuXG4gIGxvYWRNZXRhZGF0YShsYXlvdXRJZD8sIHJlZnJlc2ggPSBmYWxzZSkge1xuICAgIGNvbnN0IGxheW91dFN0b3JlS2V5ID0gYHZnaXMubGF5b3V0XyR7dGhpcy5tZXRhQ29udGV4dC52Z2lwVXNlcklkfV8ke3RoaXMuaW50ZWdyYXRpb25Db2RlfV8ke3RoaXMucmVzb3VyY2UucmVzb3VyY2VUeXBlfWA7XG4gICAgaWYgKCFsYXlvdXRJZCkge1xuICAgICAgbGF5b3V0SWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShsYXlvdXRTdG9yZUtleSk7XG4gICAgfVxuICAgIHRoaXMuYnVzeSA9IHRydWU7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLm1ldGFMb2FkaW5nID0gdHJ1ZTtcbiAgICB9LCAwKTtcbiAgICBkZWxldGUgdGhpcy5yZXNvdXJjZS5uaWNlRmllbGRzO1xuICAgIHRoaXMuc2VydmljZS5nZXRNZXRhZGF0YShsYXlvdXRJZCwgcmVmcmVzaCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChtZXRhOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5jdXJyZW50TGF5b3V0SWQgPSBtZXRhLmxheW91dC5pZDtcbiAgICAgICAgaWYgKGxheW91dElkICE9PSBtZXRhLmxheW91dC5pZCAmJiAhdGhpcy5pc1BlcnNpc3RlbnQpIHtcbiAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShsYXlvdXRTdG9yZUtleSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tZXRhID0gbWV0YU5vcm1hbGl6ZXIobWV0YSwgdGhpcy5pbnRlZ3JhdGlvbkNvZGUsIHRoaXMucmVzb3VyY2UucmVzb3VyY2VUeXBlKTtcbiAgICAgICAgdGhpcy5pc0VkaXRhYmxlID0gdGhpcy5tZXRhLmxheW91dCAmJiB0aGlzLm1ldGEubGF5b3V0LmVkaXRhYmxlICE9PSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZXNvdXJjZS5tZXRhID0gdGhpcy5tZXRhO1xuICAgICAgICBpZiAodGhpcy5pc1BlcnNpc3RlbnQgJiYgKCF0aGlzLmlzRWRpdGFibGUgfHwgdGhpcy5tZXRhLmxheW91dC5jaGlsZHJlbikpIHtcbiAgICAgICAgICB0aGlzLmVkaXQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBkZWxldGUgdGhpcy5idXN5O1xuICAgICAgICB0aGlzLmdldERldGFpbHMoKTtcbiAgICAgICAgdGhpcy5nZXRGaWVsZHNNYXAoKTtcbiAgICAgIH0sIFxuICAgICAgZXJyb3I6IChtZXRhRXJyb3I6IGFueSkgPT4ge1xuICAgICAgICBkZWxldGUgdGhpcy5idXN5O1xuICAgICAgICB0aGlzLmdlbmVyYWxFcnJvciA9IGBFcnJvciBsb2FkaW5nIHJlc291cmNlIG1ldGFkYXRhICgke21ldGFFcnJvci5zdGF0dXNUZXh0fSlgO1xuICAgICAgfSwgXG4gICAgICBjb21wbGV0ZTogKCkgPT4ge1xuICAgICAgICBkZWxldGUgdGhpcy5tZXRhTG9hZGluZztcbiAgICAgICAgdGhpcy5mb3JjZVVpVXBkYXRlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjaGFuZ2VMYXlvdXQoKSB7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXG4gICAgICBgdmdpcy5sYXlvdXRfJHt0aGlzLm1ldGFDb250ZXh0LnZnaXBVc2VySWR9XyR7dGhpcy5pbnRlZ3JhdGlvbkNvZGV9XyR7dGhpcy5yZXNvdXJjZS5yZXNvdXJjZVR5cGV9YCwgXG4gICAgICB0aGlzLmN1cnJlbnRMYXlvdXRJZFxuICAgICk7XG4gICAgdGhpcy5sb2FkTWV0YWRhdGEodGhpcy5jdXJyZW50TGF5b3V0SWQpO1xuICB9XG5cbiAgZ2V0RGV0YWlscygpIHtcbiAgICBpZiAodGhpcy5yZXNvdXJjZSAmJiAodGhpcy5yZXNvdXJjZS5leHRlcm5hbElkIHx8IHRoaXMucmVzb3VyY2UuaWQpKSB7XG4gICAgICBpZiAodGhpcy5yZXNvdXJjZS5wYXJlbnQgJiYgdGhpcy5yZXNvdXJjZS5hY3Rpdml0eSAvLyBza2lwIGZldGNoXG4gICAgICAgICYmIHRoaXMubWV0YS5sYXlvdXQuZWRpdGFibGUgPT09IGZhbHNlICYmICF0aGlzLm1ldGEubGF5b3V0LmNoaWxkcmVuXG4gICAgICApIHtcbiAgICAgICAgZm9yIChjb25zdCBwIGluIHRoaXMucmVzb3VyY2UuYWN0aXZpdHkpIHtcbiAgICAgICAgICBpZiAodGhpcy5yZXNvdXJjZS5hY3Rpdml0eVtwXSAmJiB0aGlzLmZpZWxkTmFtZXMuaW5kZXhPZihwKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMubW9kZWxbcF0gPSB0aGlzLnJlc291cmNlLmFjdGl2aXR5W3BdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5idXN5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZXJ2aWNlLmdldERldGFpbHMoXG4gICAgICAgICAgKHRoaXMucmVzb3VyY2UuZXh0ZXJuYWxJZCB8fCB0aGlzLnJlc291cmNlLmlkKSwgeyBcbiAgICAgICAgICAgIGV2ZW50SWQ6IHRoaXMucmVzb3VyY2UuZXZlbnRJZCAhPT0gJ05PX0VWRU5UJyA/IHRoaXMucmVzb3VyY2UuZXZlbnRJZCA6IG51bGwsIGxheW91dElkOiB0aGlzLnJlc291cmNlLmxheW91dElkIFxuICAgICAgICAgIH1cbiAgICAgICAgKS5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IChyZXNvdXJjZTogYW55KSA9PiB7XG4gICAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlcnNjb3JlLWRhbmdsZSAqL1xuICAgICAgICAgICAgaWYgKHJlc291cmNlLl92Z2lzKSB7IFxuICAgICAgICAgICAgICBpZiAocmVzb3VyY2UuX3ZnaXMuZXZlbnRJZCkge1xuICAgICAgICAgICAgICAgIHRoaXMubWV0YUNvbnRleHQudmdpcEV2ZW50SWQgPSByZXNvdXJjZS5fdmdpcy5ldmVudElkO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChyZXNvdXJjZS5sYXlvdXRJZCAmJiByZXNvdXJjZS5fdmdpcy5sYXlvdXRJZCAhPT0gdGhpcy5jdXJyZW50TGF5b3V0SWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRNZXRhZGF0YShyZXNvdXJjZS5fdmdpcy5sYXlvdXRJZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qIGVzbGludC1lbmFibGUgbm8tdW5kZXJzY29yZS1kYW5nbGUgKi9cbiAgICAgICAgICAgIGZvciAoY29uc3QgcCBpbiByZXNvdXJjZSkge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mKHJlc291cmNlW3BdICE9PSAndW5kZWZpbmVkJykgJiYgKHRoaXMuZmllbGROYW1lcy5pbmRleE9mKHApICE9PSAtMSB8fCBwID09PSAnX3ZnaXMnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubW9kZWxbcF0gPSByZXNvdXJjZVtwXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuYnVzeTtcbiAgICAgICAgICB9LCBcbiAgICAgICAgICBlcnJvcjogKHJlc291cmNlRXJyb3IpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhbEVycm9yID0gcmVzb3VyY2VFcnJvci5lcnJvciA/IHJlc291cmNlRXJyb3IuZXJyb3IubWVzc2FnZSB8fCByZXNvdXJjZUVycm9yLm1lc3NhZ2UgOiByZXNvdXJjZUVycm9yLm1lc3NhZ2U7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5idXN5O1xuICAgICAgICAgIH0sXG4gICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZm9yY2VVaVVwZGF0ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGVyZm9ybUF1dG9GaWxsKCk7XG4gICAgfVxuICB9XG5cbiAgcGVyZm9ybUF1dG9GaWxsKCkge1xuICAgIHRoaXMubWV0YU1zZ1NlcnZpY2Uuc2VuZE1lc3NhZ2UoXG4gICAgICB0aGlzLmludGVncmF0aW9uQ29kZSwgXG4gICAgICB7IFxuICAgICAgICBhY3Rpb246ICdhdXRvRmlsbCcsXG4gICAgICAgIGludGVncmF0aW9uOiB0aGlzLmludGVncmF0aW9uQ29kZSxcbiAgICAgICAgcmVzb3VyY2VUeXBlOiB0aGlzLnJlc291cmNlVHlwZSxcbiAgICAgICAgcmVzb3VyY2U6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5tb2RlbCkpLFxuICAgICAgICBmaWVsZHM6IHRoaXMubmljZUZpZWxkcyxcbiAgICAgICAgZXZlbnQ6IHRoaXMubWV0YUNvbnRleHQuY29udGV4dCwgXG4gICAgICAgIHByb2ZpbGU6IHRoaXMubWV0YUNvbnRleHQucHJvZmlsZXNbdGhpcy5pbnRlZ3JhdGlvbkNvZGVdXG4gICAgICB9LFxuICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmICghcmVzcG9uc2UuZXJyb3IpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGFmcCBpbiByZXNwb25zZS5hdXRvRmlsbCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLm1vZGVsW2FmcF0pIHtcbiAgICAgICAgICAgICAgdGhpcy5tb2RlbFthZnBdID0gcmVzcG9uc2UuYXV0b0ZpbGxbYWZwXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgZ2V0RmllbGRzTWFwKCkge1xuICAgIGlmICh0aGlzLm1ldGEuZmllbGRzTWFwKSB7XG4gICAgICB0aGlzLmZpZWxkc01hcCA9IHRoaXMubWV0YS5maWVsZHNNYXA7XG4gICAgICB0aGlzLm1hcmtDb250YWN0YWJsZXMoKTtcbiAgICAgIHRoaXMuYnVpbGRDb250YWN0c1N1Z2dlc3Rpb25zKCk7XG4gICAgICBpZiAoIXRoaXMucmVzb3VyY2UuZXh0ZXJuYWxJZCkge1xuICAgICAgICB0aGlzLmJ1aWxkU3ViamVjdFRlbXBsYXRlKCk7XG4gICAgICAgIHRoaXMuZXhlY1RyYW5zZm9ybWVyKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWV0YU1zZ1NlcnZpY2Uuc2VuZE1lc3NhZ2UoXG4gICAgICAgIHRoaXMuaW50ZWdyYXRpb25Db2RlLCBcbiAgICAgICAgeyBhY3Rpb246ICdmaWVsZHNNYXAnLCBpbnRlZ3JhdGlvbjogdGhpcy5pbnRlZ3JhdGlvbkNvZGUsIHJlc291cmNlVHlwZTogdGhpcy5yZXNvdXJjZVR5cGUgfSxcbiAgICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgaWYgKCFyZXNwb25zZS5lcnJvcikge1xuICAgICAgICAgICAgdGhpcy5maWVsZHNNYXAgPSByZXNwb25zZS5maWVsZHNNYXA7XG4gICAgICAgICAgICB0aGlzLm1hcmtDb250YWN0YWJsZXMoKTtcbiAgICAgICAgICAgIHRoaXMuYnVpbGRDb250YWN0c1N1Z2dlc3Rpb25zKCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMucmVzb3VyY2UuZXh0ZXJuYWxJZCkge1xuICAgICAgICAgICAgICB0aGlzLmJ1aWxkU3ViamVjdFRlbXBsYXRlKCk7XG4gICAgICAgICAgICAgIHRoaXMuZXhlY1RyYW5zZm9ybWVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdObyBmaWVsZHMgbWFwJywgdGhpcy5pbnRlZ3JhdGlvbkNvZGUsIHRoaXMucmVzb3VyY2VUeXBlLCByZXNwb25zZS5lcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIG9wZW5SZXNvdXJjZU1lbnUoKSB7XG4gICAgdGhpcy5yZXNvdXJjZU1lbnVWaXNpYmxlID0gdHJ1ZTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbk1lbnVDbGlja291dCk7XG4gICAgfSwgMTApO1xuICB9XG5cbiAgY2xvc2UocmVzdWx0Pykge1xuICAgIHRoaXMuZG9uZS5lbWl0KHJlc3VsdCk7XG4gIH1cblxuICBzdWJtaXQocmVzb3VyY2VGb3JtKSB7XG4gICAgZGVsZXRlIHRoaXMuZm9ybUVycm9ycztcbiAgICByZXNvdXJjZUZvcm0uZm9ybS5zdWJtaXR0ZWQgPSB0cnVlO1xuICAgIGlmIChyZXNvdXJjZUZvcm0udmFsaWQpIHtcbiAgICAgIHRoaXMuYnVzeSA9IHRydWU7XG4gICAgICBpZiAodGhpcy5tZXRhQ29udGV4dC52Z2lwRXZlbnRJZCkge1xuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlcnNjb3JlLWRhbmdsZSAqL1xuICAgICAgICBpZiAoIXRoaXMubW9kZWwuX3ZnaXMpIHtcbiAgICAgICAgICB0aGlzLm1vZGVsLl92Z2lzID0ge1xuICAgICAgICAgICAgY29ubmVjdG9yOiB0aGlzLmludGVncmF0aW9uQ29kZSxcbiAgICAgICAgICAgIHJlc291cmNlVHlwZTogdGhpcy5yZXNvdXJjZVR5cGVcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubW9kZWwuX3ZnaXMubGF5b3V0SWQgPSB0aGlzLmN1cnJlbnRMYXlvdXRJZDtcbiAgICAgICAgdGhpcy5tb2RlbC5fdmdpcy50aW1lWm9uZU9mZnNldEluTWludXRlcyA9IG5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICAgICAgdGhpcy5tb2RlbC5fdmdpcy5ldmVudElkID0gdGhpcy5tZXRhQ29udGV4dC52Z2lwRXZlbnRJZDtcbiAgICAgICAgLyogZXNsaW50LWVuYWJsZSBuby11bmRlcnNjb3JlLWRhbmdsZSAqL1xuICAgICAgfVxuICAgICAgdGhpcy5zZXJ2aWNlLnNhdmUodGhpcy5tb2RlbCkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmNsb3NlKHJlc3VsdCk7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmJ1c3k7XG4gICAgICB9LCAoZXJyb3JSZXN1bHQpID0+IHtcbiAgICAgICAgdGhpcy5mb3JtRXJyb3JzID0gZXJyb3JSZXN1bHQuZXJyb3I7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmJ1c3k7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb3JtRXJyb3JzID0gT2JqZWN0LmtleXMocmVzb3VyY2VGb3JtLmNvbnRyb2xzKVxuICAgICAgICAuZmlsdGVyKChjKSA9PiByZXNvdXJjZUZvcm0uY29udHJvbHNbY10uaW52YWxpZCkuam9pbignLCAnKTtcbiAgICAgICAgLy8gLm1hcCgoZikgPT4gdGhpcy5uaWNlRmllbGRzKHRoaXMuY3VycmVudFJlc291cmNlKS5sYWJlbCkuam9pbignLCAnKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCBzZWxlY3RvciA9IGBmb3JtW25hbWU9XCIke3RoaXMucmVzb3VyY2VUeXBlfVwiXSAuVmx0LWZvcm1fX2VsZW1lbnQtLWVycm9yIC5tYWluOm5vdCguc3RhbmRhbG9uZSlgO1xuICAgICAgICBjb25zdCBmaXJzdEludmFsaWQ6IEhUTUxJbnB1dEVsZW1lbnQgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgICAgIGlmIChmaXJzdEludmFsaWQpIHtcbiAgICAgICAgICBmaXJzdEludmFsaWQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJGb3JtRXJyb3JzKCkge1xuICAgIGRlbGV0ZSB0aGlzLmZvcm1FcnJvcnM7XG4gIH1cblxuICBnZXQgbmljZUZpZWxkcygpIHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5yZXNvdXJjZS5uaWNlRmllbGRzXG4gICAgICAmJiB0aGlzLnJlc291cmNlLm1ldGFcbiAgICAgICYmIHRoaXMucmVzb3VyY2UubWV0YS5sYXlvdXRcbiAgICAgICYmIHRoaXMucmVzb3VyY2UubWV0YS5sYXlvdXQuc2VjdGlvbnNcbiAgICApIHtcbiAgICAgIGNvbnN0IGV4dHJhY3RTZWN0aW9uRmllbGRzID0gKHMpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBmIG9mIHMuZmllbGRzKSB7XG4gICAgICAgICAgaWYgKGYuZmllbGRzICYmIGYuZmllbGRzLmxlbmd0aCkge1xuICAgICAgICAgICAgZXh0cmFjdFNlY3Rpb25GaWVsZHMoZik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVzb3VyY2UubmljZUZpZWxkc1tmLm5hbWVdID0gZjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB0aGlzLnJlc291cmNlLm5pY2VGaWVsZHMgPSB7fTtcbiAgICAgIGZvciAoY29uc3QgcyBvZiB0aGlzLnJlc291cmNlLm1ldGEubGF5b3V0LnNlY3Rpb25zKSB7XG4gICAgICAgIGV4dHJhY3RTZWN0aW9uRmllbGRzKHMpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZS5uaWNlRmllbGRzO1xuICB9XG5cbiAgZ2V0IGZpZWxkTmFtZXMoKSB7XG4gICAgY29uc3QgbmFtZXMgPSBPYmplY3Qua2V5cyh0aGlzLm5pY2VGaWVsZHMpO1xuICAgIGlmICh0aGlzLnJlc291cmNlLm1ldGEubGF5b3V0LmNoaWxkcmVuKSB7XG4gICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXMucmVzb3VyY2UubWV0YS5sYXlvdXQuY2hpbGRyZW4pIHtcbiAgICAgICAgbmFtZXMucHVzaChjaGlsZC5uYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5hbWVzO1xuICB9XG5cbiAgcHJpdmF0ZSBvbk1lbnVDbGlja291dCA9ICgpID0+IHtcbiAgICBkZWxldGUgdGhpcy5yZXNvdXJjZU1lbnVWaXNpYmxlO1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbk1lbnVDbGlja291dCk7XG4gIH07XG5cbiAgcHJpdmF0ZSBzdWdnZXN0RmllbGRQcm9wZXJ0eShrZXksIHZhbHVlKSB7XG4gICAgaWYgKGtleSAmJiB2YWx1ZSkge1xuICAgICAgY29uc3QgZmllbGROYW1lcyA9IHRoaXMuZmllbGROYW1lcztcbiAgICAgIGlmICh0aGlzLm1vZGVsKSB7XG4gICAgICAgIGNvbnN0IG5lc3RNYXRjaCA9IGtleS5tYXRjaCgvKFxcUyspXFxbXFxkXFxdXFwuKFxcUyspLyk7XG4gICAgICAgIGlmIChuZXN0TWF0Y2ggJiYgZmllbGROYW1lcy5pbmRleE9mKG5lc3RNYXRjaFsxXSkgIT09IC0xKSB7XG4gICAgICAgICAgdGhpcy5tb2RlbFtuZXN0TWF0Y2hbMV1dID0gW107XG4gICAgICAgICAgY29uc3QgbmVzdEtleXM6IGFueSA9IHt9O1xuICAgICAgICAgIG5lc3RLZXlzW25lc3RNYXRjaFsyXV0gPSB2YWx1ZTtcbiAgICAgICAgICB0aGlzLm1vZGVsW25lc3RNYXRjaFsxXV0ucHVzaChuZXN0S2V5cyk7XG4gICAgICAgIH0gZWxzZSBpZiAoZmllbGROYW1lcy5pbmRleE9mKGtleSkgIT09IC0xKSB7XG4gICAgICAgICAgdGhpcy5tb2RlbFtrZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGV4ZWNUcmFuc2Zvcm1lcigpIHtcbiAgICBpZiAodGhpcy5tZXRhQ29udGV4dCAmJiB0aGlzLmZpZWxkc01hcCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuc3VnZ2VzdEZpZWxkUHJvcGVydHkodGhpcy5maWVsZHNNYXAucGhvbmVOdW1iZXIsIHRoaXMubWV0YUNvbnRleHQucGhvbmVOdW1iZXIpO1xuICAgICAgICBpZiAodGhpcy5maWVsZHNNYXAuZmlyc3ROYW1lIHx8IHRoaXMuZmllbGRzTWFwLmxhc3ROYW1lKSB7XG4gICAgICAgICAgY29uc3QgbmFtZXMgPSAodGhpcy5tZXRhQ29udGV4dC5kaXNwbGF5TmFtZSB8fCAnJykuc3BsaXQoJyAnKTtcbiAgICAgICAgICB0aGlzLnN1Z2dlc3RGaWVsZFByb3BlcnR5KHRoaXMuZmllbGRzTWFwLmZpcnN0TmFtZSwgbmFtZXNbMF0pO1xuICAgICAgICAgIHRoaXMuc3VnZ2VzdEZpZWxkUHJvcGVydHkodGhpcy5maWVsZHNNYXAubGFzdE5hbWUsIG5hbWVzWzFdKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmZpZWxkc01hcC5kaXNwbGF5TmFtZSkge1xuICAgICAgICAgIHRoaXMuc3VnZ2VzdEZpZWxkUHJvcGVydHkodGhpcy5maWVsZHNNYXAuZGlzcGxheU5hbWUsIHRoaXMubWV0YUNvbnRleHQuZGlzcGxheU5hbWUpO1xuICAgICAgICB9XG4gICAgICB9LCAxMDApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFya0NvbnRhY3RhYmxlcygpIHtcbiAgICBpZiAodGhpcy5maWVsZHNNYXAuY29udGFjdGFibGVzICYmIHRoaXMuZmllbGRzTWFwLmNvbnRhY3RhYmxlcy5sZW5ndGgpIHtcbiAgICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmZpZWxkc01hcC5jb250YWN0YWJsZXMpIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLm5pY2VGaWVsZHNbY107XG4gICAgICAgIGlmIChmaWVsZCkge1xuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmaWVsZCwgJyRpc0NvbnRhY3RhYmxlJywge1xuICAgICAgICAgICAgdmFsdWU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFN1YmplY3RUZW1wbGF0ZSgpIHtcbiAgICBpZiAoIXRoaXMubW9kZWxbdGhpcy5maWVsZHNNYXAuc3ViamVjdF0gJiYgdGhpcy5maWVsZHNNYXAuc3ViamVjdCAmJiB0aGlzLm5pY2VGaWVsZHNbdGhpcy5maWVsZHNNYXAuc3ViamVjdF0pIHtcbiAgICAgIGxldCBzdWJqZWN0VGVtcGxhdGU6IHN0cmluZztcbiAgICAgIGlmICh0aGlzLm5pY2VGaWVsZHNbdGhpcy5maWVsZHNNYXAuc3ViamVjdF0uZGVmYXVsdCkge1xuICAgICAgICBzdWJqZWN0VGVtcGxhdGUgPSB0aGlzLm5pY2VGaWVsZHNbdGhpcy5maWVsZHNNYXAuc3ViamVjdF0uZGVmYXVsdC5pZCB8fCB0aGlzLm5pY2VGaWVsZHNbdGhpcy5maWVsZHNNYXAuc3ViamVjdF0uZGVmYXVsdDtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5tZXRhQ29udGV4dC5wcm9maWxlc1t0aGlzLmludGVncmF0aW9uQ29kZV0pIHtcbiAgICAgICAgY29uc3QgcHJvZmlsZSA9IHRoaXMubWV0YUNvbnRleHQucHJvZmlsZXNbdGhpcy5pbnRlZ3JhdGlvbkNvZGVdIHx8IHt9O1xuICAgICAgICBzdWJqZWN0VGVtcGxhdGUgPSBwcm9maWxlLmRlZmF1bHRTdWJqZWN0ID8gXG4gICAgICAgICAgcHJvZmlsZS5kZWZhdWx0U3ViamVjdFsoKHRoaXMubWV0YUNvbnRleHQuY29udGV4dCB8fCAnQ0FMTCcpLnR5cGUgfHwgJycpLnRvVXBwZXJDYXNlKCldIDogcHJvZmlsZS5hY3Rpdml0eURlZmF1bHRTdWJqZWN0VGVtcGxhdGU7XG4gICAgICB9XG4gICAgICBpZiAoc3ViamVjdFRlbXBsYXRlKSB7XG4gICAgICAgIHRoaXMubW9kZWxbdGhpcy5maWVsZHNNYXAuc3ViamVjdF0gPSB0ZW1wbGF0ZUJ1aWxkZXIodGhpcy5tZXRhQ29udGV4dCwgc3ViamVjdFRlbXBsYXRlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkQ29udGFjdHNTdWdnZXN0aW9ucygpIHtcbiAgICAvLyBsZXQgaGFzRGVmYXVsdENvbnRhY3QgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5tZXRhQ29udGV4dC5jb250YWN0YWJsZXNbdGhpcy5pbnRlZ3JhdGlvbkNvZGVdICYmIHRoaXMubWV0YS5sYXlvdXQgJiYgdGhpcy5tZXRhLmxheW91dC5zZWN0aW9ucykge1xuICAgICAgZm9yIChjb25zdCBzIG9mIHRoaXMubWV0YS5sYXlvdXQuc2VjdGlvbnMpIHtcbiAgICAgICAgZm9yIChjb25zdCBmIG9mIChzLmZpZWxkcyB8fCBbXSkpIHtcbiAgICAgICAgICBpZiAoZi50eXBlID09PSAncmVmZXJlbmNlJykge1xuICAgICAgICAgICAgY29uc3QgcmVmVHlwZXMgPSAoZi5yZWZlcmVuY2UubGVuZ3RoID8gZi5yZWZlcmVuY2UgOiBbZi5yZWZlcmVuY2VdKS5tYXAociA9PiByLm5hbWUpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBjIG9mIHRoaXMubWV0YUNvbnRleHQuY29udGFjdGFibGVzW3RoaXMuaW50ZWdyYXRpb25Db2RlXSkge1xuICAgICAgICAgICAgICBpZiAocmVmVHlwZXMuaW5kZXhPZihjLnJlc291cmNlVHlwZSB8fCBjLnR5cGUpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGlmICghZi5zdWdnZXN0aW9ucykge1xuICAgICAgICAgICAgICAgICAgZi5zdWdnZXN0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgdExhYmVsID0gYy5kaXNwbGF5TmFtZSB8fCBjLm5hbWU7XG4gICAgICAgICAgICAgICAgaWYgKGMucGhvbmVOdW1iZXJzKSB7XG4gICAgICAgICAgICAgICAgICB0TGFiZWwgKz0gKCcg4pyGJyArIGMucGhvbmVOdW1iZXJzLm1hcChwID0+IHAucGhvbmVOdW1iZXIpLmpvaW4oJywnKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGYuc3VnZ2VzdGlvbnMucHVzaCh7IFxuICAgICAgICAgICAgICAgICAgaWQ6IGMuZXh0ZXJuYWxJZCB8fCBjLmlkZW50aWZpZXIgfHwgYy5pZCwgXG4gICAgICAgICAgICAgICAgICBsYWJlbDogdExhYmVsLCBcbiAgICAgICAgICAgICAgICAgIHR5cGU6IGMucmVzb3VyY2VUeXBlIHx8IGMudHlwZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoKHRoaXMuZmllbGRzTWFwLmNvbnRhY3RhYmxlcyB8fCBbXSkuaW5kZXhPZihmLm5hbWUpICE9PSAtMSkgeyAvLyBldmFsdWF0ZSB1c2FiaWxpdHk/XG4gICAgICAgICAgICAgIGYuYWx3YXlzVmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZiAoXG4gICAgICAgICAgICAvLyAgICFoYXNEZWZhdWx0Q29udGFjdCAmJiB0aGlzLm1ldGFDb250ZXh0LmRlZmF1bHRDb250YWN0YWJsZXNbdGhpcy5pbnRlZ3JhdGlvbkNvZGVdXG4gICAgICAgICAgICAvLyAgICYmIHJlZlR5cGVzLmluZGV4T2YodGhpcy5tZXRhQ29udGV4dC5kZWZhdWx0Q29udGFjdGFibGVzW3RoaXMuaW50ZWdyYXRpb25Db2RlXS50eXBlKSAhPT0gLTFcbiAgICAgICAgICAgIC8vICkge1xuICAgICAgICAgICAgLy8gICB0aGlzLnJlc291cmNlW2YubmFtZV0gPSB0aGlzLm1ldGFDb250ZXh0LmRlZmF1bHRDb250YWN0YWJsZXNbdGhpcy5pbnRlZ3JhdGlvbkNvZGVdO1xuICAgICAgICAgICAgLy8gICBoYXNEZWZhdWx0Q29udGFjdCA9IHRydWU7XG4gICAgICAgICAgICAvLyB9IGVsc2UgaWYgKCFoYXNEZWZhdWx0Q29udGFjdCAmJiB0aGlzLmZpZWxkc01hcC5jb250YWN0YWJsZXMgJiYgZi5zdWdnZXN0aW9ucyAmJiBmLnN1Z2dlc3Rpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgLy8gICBpZiAodGhpcy5maWVsZHNNYXAuY29udGFjdGFibGVzLmluZGV4T2YoZi5uYW1lKSAhPT0gLTEgJiYgIWYuZGVmYXVsdCkge1xuICAgICAgICAgICAgLy8gICAgIGYuZGVmYXVsdCA9IGYuc3VnZ2VzdGlvbnNbMF07XG4gICAgICAgICAgICAvLyAgICAgaGFzRGVmYXVsdENvbnRhY3QgPSB0cnVlO1xuICAgICAgICAgICAgLy8gICB9XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmNvbnRhY3RzU3VnZ2VzdGlvbnNEb25lID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFwcGx5VGhlbWUoKSB7XG4gICAgY29uc3QgbWV0YVRoZW1lID0gdGhpcy50aGVtZSA9PT0gJ2RhcmsnID8gbWV0YURhcmsgOiBtZXRhTGlnaHQ7XG4gICAgY29uc29sZS5sb2coJ3Jlc291cmNlIGFwcGx5IHRoZW1lJywgdGhpcy50aGVtZSk7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobWV0YVRoZW1lLnByb3BlcnRpZXMpKSB7XG4gICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoa2V5LCBtZXRhVGhlbWUucHJvcGVydGllc1trZXldKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvcmNlVWlVcGRhdGUoKSB7IC8vIGlPUyB3ZWJ2aWV3IGRvZXMgbm90IHVwZGF0ZSB0aGUgVUkgYWZ0ZXIgYXN5YyBjaGFuZ2VzLiBUZW1wIGZpeCA6KFxuICAgIC8vIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICBjb25zdCBlID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50cycpO1xuICAgIGUuaW5pdEV2ZW50KCdjbGljaycsIHRydWUsIGZhbHNlKTtcbiAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChlKTtcbiAgfVxufVxuXG4vLy8vIFJFU09VUkNFIENBUkRcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZnaXAtbWV0YS1yZXNvdXJjZS1jYXJkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Jlc291cmNlQ2FyZC92aWV3Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yZXNvdXJjZUNhcmQvc3R5bGUuc2NzcyddLFxuICBlbnRyeUNvbXBvbmVudHM6IFtcbiAgICBNZXRhUmVmRGlhbG9nXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgTWV0YVJlc291cmNlQ2FyZCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIHJlc291cmNlOiBhbnk7XG4gIEBJbnB1dCgpIG1vZGVsOiBhbnk7XG5cbiAgaW50ZWdyYXRpb25Db2RlOiBzdHJpbmc7XG4gIHJlZkRpYWxvZ0ZhY3Rvcnk6IGFueTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgIHByaXZhdGUgbWV0YVJlc291cmNlOiBNZXRhUmVzb3VyY2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVmZXJlbmNlU2VydmljZTogTWV0YVJlZmVyZW5jZVNlcnZpY2VcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaW50ZWdyYXRpb25Db2RlID0gKHRoaXMucmVzb3VyY2UuaW50ZWdyYXRpb24gfHwgdGhpcy5yZXNvdXJjZS5pbnRlZ3JhdGlvbkNvZGUgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICBvcGVuKHJlZmVyZW5jZSwgbW9kZWw/KSB7XG4gICAgaWYgKCF0aGlzLnJlZkRpYWxvZ0ZhY3RvcnkpIHtcbiAgICAgIHRoaXMucmVmRGlhbG9nRmFjdG9yeSA9IHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KE1ldGFSZWZEaWFsb2cpO1xuICAgIH1cbiAgICB0aGlzLnJlZmVyZW5jZVNlcnZpY2Uub3BlbkRpYWxvZyhcbiAgICAgIHRoaXMucmVmRGlhbG9nRmFjdG9yeSwgdGhpcy5tZXRhUmVzb3VyY2UsIHRoaXMuaW50ZWdyYXRpb25Db2RlLCByZWZlcmVuY2UsIG1vZGVsLCBcbiAgICAgIG1vZGVsICYmIChyZWZlcmVuY2UuZWRpdGFibGUgPT09IGZhbHNlKSAvLyBpcyBwcmV2aWV3IG1vZGVcbiAgICApLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCdkaWFsb2cgcmVzdWx0JywgcmVzdWx0KTtcbiAgICAgIC8vIGlmIChyZXN1bHQgJiYgcmVzdWx0LnJhdykge1xuICAgICAgLy8gICBpZiAoIXRoaXMucGFyZW50W3JlZmVyZW5jZS50eXBlXSkge1xuICAgICAgLy8gICAgIHRoaXMucGFyZW50W3JlZmVyZW5jZS50eXBlXSA9IFtdO1xuICAgICAgLy8gICB9XG4gICAgICAvLyAgIHRoaXMucGFyZW50W3JlZmVyZW5jZS50eXBlXS5wdXNoKHJlc3VsdC5yYXcpO1xuICAgICAgLy8gfVxuICAgIH0pO1xuICB9XG5cbn1cblxuXG5jb25zdCBGTUFQID0gKGZUeXBlKSA9PiB7XG4gIHN3aXRjaCAoZlR5cGUpIHtcbiAgICBjYXNlICcnOlxuICAgIGNhc2UgbnVsbDpcbiAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICBjYXNlICdudW1iZXInOlxuICAgIC8vIGNhc2UgJ2RhdGV0aW1lJzpcbiAgICAvLyBjYXNlICd0aW1lJzpcbiAgICAvLyBjYXNlICdkYXRlJzpcbiAgICBjYXNlICdzdHJpbmcnOiB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZmFsbHRocm91Z2hcbiAgICAgIHJldHVybiBGaWVsZElucHV0O1xuICAgIH1cbiAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgY2FzZSAndGV4dCc6IHtcbiAgICAgIHJldHVybiBGaWVsZFRleHQ7XG4gICAgfVxuICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgY2FzZSAnb3B0aW9ucyc6IHtcbiAgICAgIHJldHVybiBGaWVsZFNlbGVjdDtcbiAgICB9XG4gICAgY2FzZSAncmVmZXJlbmNlJzoge1xuICAgICAgcmV0dXJuIEZpZWxkUmVmZXJlbmNlO1xuICAgIH1cbiAgICBjYXNlICdjb21wb3NpdGUnOiB7XG4gICAgICByZXR1cm4gRmllbGRDb21wb3NpdGU7XG4gICAgfVxuICAgIGNhc2UgJ2Jvb2xlYW4nOiB7XG4gICAgICByZXR1cm4gRmllbGRCb29sZWFuO1xuICAgIH1cbiAgICBjYXNlICdyYWRpbyc6IHtcbiAgICAgIHJldHVybiBGaWVsZFJhZGlvO1xuICAgIH1cbiAgICBjYXNlICdsaXN0Jzoge1xuICAgICAgcmV0dXJuIEZpZWxkTGlzdDtcbiAgICB9XG4gICAgY2FzZSAncmljaHRleHQnOiB7XG4gICAgICByZXR1cm4gRmllbGRSaWNodGV4dDtcbiAgICB9XG4gICAgY2FzZSAnZGF0ZXRpbWUnOlxuICAgIGNhc2UgJ3RpbWUnOlxuICAgIGNhc2UgJ2RhdGUnOiB7XG4gICAgICByZXR1cm4gRmllbGREYXRldGltZTtcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgcmV0dXJuIEZpZWxkVW5rbm93bjtcbiAgICB9XG4gIH1cbn07XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1ttZXRhRmllbGRDb250ZW50XSdcbn0pXG5leHBvcnQgY2xhc3MgTWV0YUZpZWxkQ29udGVudERpcmVjdGl2ZSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmKSB7IH1cbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmdpcC1tZXRhLWZpZWxkJyxcbiAgdGVtcGxhdGU6ICc8bmctdGVtcGxhdGUgbWV0YUZpZWxkQ29udGVudD5Mb2FkaW5nPC9uZy10ZW1wbGF0ZT4nLFxuICBzdHlsZVVybHM6IFsnLi9maWVsZC5zY3NzJ10sXG4gIGVudHJ5Q29tcG9uZW50czogW1xuICAgIEZpZWxkVW5rbm93bixcbiAgICBGaWVsZElucHV0LFxuICAgIEZpZWxkVGV4dCxcbiAgICBGaWVsZFNlbGVjdCxcbiAgICBGaWVsZFJlZmVyZW5jZSxcbiAgICBGaWVsZENvbXBvc2l0ZSxcbiAgICBGaWVsZEJvb2xlYW4sXG4gICAgRmllbGRSYWRpbyxcbiAgICBGaWVsZExpc3QsXG4gICAgRmllbGRSaWNodGV4dCxcbiAgICBGaWVsZERhdGV0aW1lXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgTWV0YUZpZWxkIGV4dGVuZHMgRmllbGRBYnN0cmFjdCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIG1ldGE6IGFueTtcbiAgQElucHV0KCkgcGFyZW50OiBhbnk7XG4gIEBJbnB1dCgpIGludGVncmF0aW9uQ29kZTogYW55O1xuICBASW5wdXQoKSByZXNvdXJjZVR5cGU6IGFueTtcbiAgQElucHV0KCkgaW5kZXg6IG51bWJlcjtcbiAgQElucHV0KCkgcHJldmlldzogYm9vbGVhbjtcbiAgQElucHV0KCkgdGhlbWU6IHN0cmluZztcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gIEBPdXRwdXQoKSBvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gIEBPdXRwdXQoKSBvbkxlYXZlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBWaWV3Q2hpbGQoTWV0YUZpZWxkQ29udGVudERpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSkgZmllbGRDb250ZW50OiBNZXRhRmllbGRDb250ZW50RGlyZWN0aXZlO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgcHJpdmF0ZSBlbDogRWxlbWVudFJlZikge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCBjb21wb25lbnQgPSBGTUFQKHRoaXMubWV0YS50eXBlKTtcbiAgICBjb25zdCBjb21wb25lbnRGYWN0b3J5ID0gdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoY29tcG9uZW50KTtcblxuICAgIHRoaXMuZmllbGRDb250ZW50LnZpZXdDb250YWluZXJSZWYuY2xlYXIoKTtcbiAgICBjb25zdCBjb21wb25lbnRSZWYgPSB0aGlzLmZpZWxkQ29udGVudC52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnRGYWN0b3J5KTtcbiAgICBjb25zdCBmaWVsZDogRmllbGRBYnN0cmFjdCA9IGNvbXBvbmVudFJlZi5pbnN0YW5jZTtcbiAgICBpZiAoY29tcG9uZW50LnNldHVwKSB7XG4gICAgICAvLyBjb25zb2xlLmxvZygnc2V0dXAnLCB7YTogdGhpcy5lbC5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGUucGFyZW50Tm9kZX0pXG4gICAgICBjb21wb25lbnQuc2V0dXAoZmllbGQsIHRoaXMucGFyZW50LCB0aGlzLm1ldGEpO1xuICAgIH1cbiAgICBmaWVsZC5tZXRhID0gdGhpcy5tZXRhO1xuICAgIGZpZWxkLnBhcmVudCA9IHRoaXMucGFyZW50O1xuICAgIGZpZWxkLmludGVncmF0aW9uQ29kZSA9ICh0aGlzLmludGVncmF0aW9uQ29kZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgICBmaWVsZC5yZXNvdXJjZVR5cGUgPSAodGhpcy5yZXNvdXJjZVR5cGUgfHwgJycpO1xuICAgIGZpZWxkLmluZGV4ID0gdGhpcy5pbmRleDtcbiAgICBmaWVsZC5lbGVtZW50UmVmID0gdGhpcy5lbDtcbiAgICBmaWVsZC5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2U7XG4gICAgZmllbGQub25MZWF2ZSA9IHRoaXMub25MZWF2ZTtcbiAgICBmaWVsZC5wcmV2aWV3ID0gdGhpcy5wcmV2aWV3O1xuICAgIGZpZWxkLnRoZW1lID0gdGhpcy50aGVtZTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZmllbGQubWV0YSwgJ3Vuc2V0Jywge1xuICAgICAgdmFsdWU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPSdWbHQtbW9kYWwgVmx0LW1vZGFsLS1sYXJnZSc+XG4gIDxkaXYgY2xhc3M9XCJWbHQtbW9kYWxfX3BhbmVsXCI+XG4gICAgPGRpdiBjbGFzcz1cIlZsdC10YWJzXCI+XG4gICAgICA8ZGl2IGNsYXNzPSdWbHQtdGFic19faGVhZGVyLS1iYWNrZ3JvdW5kJz5cbiAgICAgICAgPGRpdiBjbGFzcz1cIlZsdC10YWJzX19oZWFkZXIgVmx0LXRhYnNfX2hlYWRlci0tc2hhZG93XCI+XG4gICAgICAgICAgPHN2ZyBjbGFzcz1cIlZsdC1pY29uXCIgW25nU3R5bGVdPVwie2ZpbGw6IGludGVncmF0aW9uSWNvbiA9PT0gJ0JyYW5kLWljb24tdm9uYWdlJyA/ICd2YXIoLS12Z2lwLW1ldGEtaW5wdXQtY29sb3IpJyA6ICcnfVwiPjx1c2UgYXR0ci54bGluazpocmVmPVwidm9sdGEvdm9sdGEtYnJhbmQtaWNvbnMuc3ZnI3t7aW50ZWdyYXRpb25JY29ufX1cIiAvPjwvc3ZnPlxuICAgICAgICAgIDxkaXYgKm5nRm9yPSdsZXQgciBvZiByZXNvdXJjZXMgfCBrZXl2YWx1ZToga2VlcE9yZGVyJyAoY2xpY2spPSdzZWxlY3RSZXNvdXJjZShyLmtleSknIGNsYXNzPVwiVmx0LXRhYnNfX2xpbmtcIiBbbmdDbGFzc109XCJ7ICdWbHQtdGFic19fbGlua19hY3RpdmUnOiBjdXJyZW50UmVzb3VyY2UgPT09IHIua2V5fVwiPlxuICAgICAgICAgICAge3tyLmtleX19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIlZsdC1tb2RhbF9fZGlzbWlzc1wiIChjbGljayk9XCJkaXNtaXNzKClcIj5cbiAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJWbHQtaWNvblwiPjx1c2UgeGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1jcm9zc1wiIC8+PC9zdmc+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiVmx0LXRhYnNfX2NvbnRlbnRcIiBzdHlsZT0nbWluLWhlaWdodDogOTBweDsnPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj0nbGV0IHIgb2YgcmVzb3VyY2VzIHwga2V5dmFsdWU6IGtlZXBPcmRlcic+XG4gICAgICAgICAgPGRpdiAqbmdJZj0nY3VycmVudFJlc291cmNlID09PSByLmtleScgY2xhc3M9XCJWbHQtdGFic19fcGFuZWwgVmx0LXRhYnNfX3BhbmVsX2FjdGl2ZVwiPlxuICAgICAgICAgICAgPHZnaXAtbWV0YS1yZXNvdXJjZSBbcmVzb3VyY2VdPSdyLnZhbHVlJyBbbW9kZWxdPSdtb2RlbHNbci5rZXldJyBbbWV0YVJlc291cmNlU2VydmljZURlbGVnYXRlZF09J21ldGFSZXNvdXJjZScgKGRvbmUpPSdvblJlc291cmNlRG9uZSgkZXZlbnQpJyB0aGVtZT0naW5oZXJpdCcgW2F0dHIuZGF0YS10aGVtZV09J3RoZW1lJz48L3ZnaXAtbWV0YS1yZXNvdXJjZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiIsIjxkaXYgW25nQ2xhc3NdPVwieyAnVmx0LWdyaWQgVmx0LWdyaWQtLW5hcnJvdyc6IGlzUm93IH1cIiA+XG4gIDxkaXYgc3R5bGU9J21hcmdpbjogMDsnIFtuZ0NsYXNzXT1cInsgJ1ZsdC1jb2wnOiBpc1JvdywgJ1ZsdC1jb2wtLTFvZjMnOiBpc1JvdyAmJiBmaWVsZHMubGVuZ3RoID4gMyB9XCIgKm5nRm9yPSdsZXQgZmllbGQgb2YgZmllbGRzJz5cbiAgICA8dmdpcC1tZXRhLWZpZWxkIGNsYXNzPSdzaG93bicgW2luZGV4XT0naW5kZXgnIFttZXRhXT0nZmllbGQnIFtwYXJlbnRdPSdwYXJlbnQnIFtpbnRlZ3JhdGlvbkNvZGVdPSdpbnRlZ3JhdGlvbkNvZGUnIFtwcmV2aWV3XT0ncHJldmlldycgdGhlbWU9J2luaGVyaXQnPjwvdmdpcC1tZXRhLWZpZWxkPlxuICA8L2Rpdj5cbjwvZGl2PiIsIjxkaXYgY2xhc3M9J3ZnaXAtbWV0YS1maWVsZC1wcmV2aWV3JyAqbmdJZj0ncHJldmlldyAmJiBtb2RlbCc+XG4gIDxkaXYgY2xhc3M9J3ZnaXAtbWV0YS1maWVsZC1sYWJlbCc+e3ttZXRhLmxhYmVsIHx8IG1ldGEubmFtZX19PC9kaXY+XG4gIDxkaXYgY2xhc3M9J3ZnaXAtbWV0YS1maWVsZC12YWx1ZSBfX2d1Jz5cbiAgICB7e21vZGVsLmxhYmVsIHx8IG1vZGVsLmlkIHx8IG1vZGVsfX1cbiAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgKm5nSWY9JyFwcmV2aWV3JyBjbGFzcz1cIlZsdC1mb3JtX19lbGVtZW50XCIgW25nQ2xhc3NdPVwieyAnVmx0LWZvcm1fX2VsZW1lbnQtLWJpZyc6ICFtZXRhLnNtYWxsICwnaGFzLXZhbHVlJzogZi52YWx1ZSwgYWN0aXZlOiBrZXlMaXN0ZW5lckFjdGl2ZSwgJ1ZsdC1mb3JtX19lbGVtZW50LS1lcnJvcic6IGYuaW52YWxpZCAmJiAoKGYgfCBtZXRhTW9kZWwpLl9wYXJlbnQuc3VibWl0dGVkIHx8IChmdCB8IG1ldGFNb2RlbCApLnRvdWNoZWQpLCAnbm8teCc6IG1ldGEubm9YIH1cIj5cblx0PGRpdiBjbGFzcz1cIlZsdC1jb21wb3NpdGUgVmx0LWRyb3Bkb3duIFZsdC1pbnB1dFwiIHN0eWxlPSdkaXNwbGF5OiBibG9jazsnIFtuZ0NsYXNzXT1cInsgJ2hhcy1hcHBlbmQtYnV0dG9uJzogaXNDcmVhdGFibGUgJiYgIWRpc2FibGVkIH1cIj5cblx0XHQ8ZGl2IGNsYXNzPVwiVmx0LXNlbGVjdFwiPlxuXHRcdFx0PGxhYmVsIGNsYXNzPSd3cmFwcGVyJz5cblx0XHRcdFx0PGxhYmVsIGNsYXNzPSdWbHQtdHJ1bmNhdGUnPnt7bWV0YS5sYWJlbCB8fCBtZXRhLm5hbWV9fTxzcGFuICpuZ0lmPSd2YWxpZGF0aW9ucy5yZXF1aXJlZCAmJiBvcHRpb25zLmxlbmd0aCcgY2xhc3M9J1ZsdC1yZWQnPio8L3NwYW4+PC9sYWJlbD5cblx0XHRcdFx0PGlucHV0IGNsYXNzPSdtYWluJyBbcmVxdWlyZWRdPSd2YWxpZGF0aW9ucy5yZXF1aXJlZCAmJiAhIW9wdGlvbnMubGVuZ3RoJyByZWFkb25seSBbbmdNb2RlbF09J3Nob3dUZXh0JyAjZnQ9J25nTW9kZWwnIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIiB0eXBlPVwidGV4dFwiIFtwbGFjZWhvbGRlcl09XCJtZXRhLnBsYWNlaG9sZGVyIHx8ICcgJ1wiIChjbGljayk9J29uQWN0aXZhdGVkKCRldmVudCknIChmb2N1cyk9J29uQWN0aXZhdGVkKCRldmVudCknIChibHVyKT0nb25CbHVyKCRldmVudCknIFtuZ0NsYXNzXT1cInsgJ3N0YW5kYWxvbmUnOiBtZXRhLnN0YW5kYWxvbmUgfVwiIFtkaXNhYmxlZF09J2Rpc2FibGVkIHx8ICFvcHRpb25zLmxlbmd0aCcgW2F0dHIuYXJpYS1sYWJlbF09J21ldGEubGFiZWwnLz5cblx0XHRcdDwvbGFiZWw+XG5cdFx0XHQ8c2VsZWN0IGNsYXNzPSdtb2RlbCcgW3JlcXVpcmVkXT0ndmFsaWRhdGlvbnMucmVxdWlyZWQgJiYgISFvcHRpb25zLmxlbmd0aCcgc3R5bGU9J2Rpc3BsYXk6IG5vbmU7JyBbKG5nTW9kZWwpXT0nbW9kZWwnIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogbWV0YS5zdGFuZGFsb25lfVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uTW9kZWxDaGFuZ2UoJGV2ZW50KVwiICNmPSduZ01vZGVsJyBbbmFtZV09J25hbWUnPjwvc2VsZWN0PlxuXHRcdFx0PGRpdiAqbmdJZj0nc2VhcmNoaW5nJyBjbGFzcz0nc2VhcmNoLXByb2dyZXNzJz5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYXIgVmx0LWJnLXB1cnBsZVwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdFx0PGRpdiBjbGFzcz0nVmx0LWNvbXBvc2l0ZV9fYXBwZW5kIHJpZ2h0LWFjdGlvbnMnPlxuICAgICAgICA8ZGl2ICpuZ0lmPSdtb2RlbCAmJiAhbWV0YS5ub1ggJiYgIWRpc2FibGVkJyBjbGFzcz1cIlZsdC1jb21wb3NpdGVfX2FwcGVuZC0taWNvblwiIChjbGljayk9J2NsZWFyKCRldmVudCknPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJWbHQtY29tcG9zaXRlX19pY29uXCI+XG4gICAgICAgICAgICA8c3ZnPjx1c2UgeGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1jcm9zc1wiLz48L3N2Zz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0XHQ8ZGl2IGNsYXNzPSdWbHQtZHJvcGRvd25fX3BhbmVsJz5cblx0XHRcdDxkaXYgY2xhc3M9XCJWbHQtZHJvcGRvd25fX3BhbmVsX19jb250ZW50IFZsdC1kcm9wZG93bl9fcGFuZWxfX2NvbnRlbnQtLXNjcm9sbC1hcmVhXCI+XG5cdFx0XHRcdDwhLS0gPGRpdiBjbGFzcz1cIlZsdC1kcm9wZG93bl9fdGl0bGVcIiBzdHlsZT0ncGFkZGluZy1sZWZ0OiAxNXB4Oyc+XG5cdFx0XHRcdFx0U2VsZWN0ICh7e29wdGlvbnMubGVuZ3RofX0pXG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cIlZsdC1kcm9wZG93bl9fY2xvc2UgVmx0LXdoaXRlXCIgKGNsaWNrKT0nZGlzbWlzc0Ryb3Bkb3duKCRldmVudCknPlxuXHRcdFx0XHRcdFx0PHN2ZyBjbGFzcz0nVmx0LWljb24gVmx0LWljb24tLXNtYWxsJz48dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tY3Jvc3NcIi8+PC9zdmc+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PiAtLT5cblx0XHRcdFx0PGRpdiBjbGFzcz1cIlZsdC1kcm9wZG93bl9fYmxvY2tcIj48L2Rpdj5cblx0XHRcdFx0PGRpdiAqbmdJZj0nZHJvcGRvd24nIGNsYXNzPSdWbHQtZHJvcGRvd25fX3Njcm9sbCc+XG5cdFx0XHRcdFx0PGRpdiBbbmdDbGFzc109XCJ7ICdWbHQtZHJvcGRvd25fX2xpbmstLXNlbGVjdGVkJzogYWN0aXZlU3VnZ2VzdGlvbkluZGV4ID09PSBpIH1cIiAoY2xpY2spPSdvbk9wdGlvblNlbGVjdCgkZXZlbnQsIG9wdGlvbiknICpuZ0Zvcj0nbGV0IG9wdGlvbiBvZiBvcHRpb25zOyBsZXQgaSA9IGluZGV4JyBjbGFzcz1cIlZsdC1kcm9wZG93bl9fbGlua1wiPlxuXHRcdFx0XHRcdFx0PGRpdiAqbmdJZj0nbXVsdGlwbGUnIGNsYXNzPVwiVmx0LWNoZWNrYm94XCIgc3R5bGU9J3dpZHRoOiAxMDAlOyc+XG5cdFx0XHRcdFx0XHRcdDxsYWJlbD5cblx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cIlZsdC1jaGVja2JveF9fYnV0dG9uXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2NoZWNrZWRdPSdtb2RlbCAmJiBtb2RlbC5pbmRleE9mKG9wdGlvbikgIT0gLTEnLz5cblx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiVmx0LWNoZWNrYm94X19pY29uXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHR7e29wdGlvbi5sYWJlbCB8fCAob3B0aW9uLmlkID09PSAnJyA/ICctLWVtcHR5LS0nIDogb3B0aW9uKX19XG5cdFx0XHRcdFx0XHRcdDwvbGFiZWw+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDxkaXYgKm5nSWY9JyFtdWx0aXBsZScgc3R5bGU9J3BhZGRpbmc6IDEycHggMjBweDsnPnt7b3B0aW9uLmxhYmVsIHx8IChvcHRpb24uaWQgPT09ICcnID8gJy0tZW1wdHktLScgOiBvcHRpb24pfX08L2Rpdj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDxkaXYgKm5nSWY9JyFtdWx0aXBsZScgY2xhc3M9XCJWbHQtZHJvcGRvd25fX2Jsb2NrXCI+PC9kaXY+XG5cdFx0XHRcdDxkaXYgKm5nSWY9J211bHRpcGxlJyBjbGFzcz1cIlZsdC1kcm9wZG93bl9fYmxvY2sgVmx0LWRyb3Bkb3duX19ibG9jay0tbm93cmFwXCIgc3R5bGU9J3BhZGRpbmc6IDhweCAxNnB4IDE2cHg7Jz5cbiAgICAgICAgICA8YnV0dG9uIChjbGljayk9J2NsZWFyKCRldmVudCknIHR5cGU9J2J1dHRvbicgY2xhc3M9XCJWbHQtYnRuIFZsdC1idG4tLXNlY29uZGFyeSBWbHQtYnRuLS1hcHAgVmx0LWJ0bi0tc21hbGwgVmx0LWJ0bi0tb3V0bGluZVwiIHN0eWxlPSdtYXJnaW4tcmlnaHQ6IDhweDsnPkNsZWFyIGFsbDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT0nZGlzbWlzc0Ryb3Bkb3duKCRldmVudCknIHR5cGU9J2J1dHRvbicgY2xhc3M9XCJWbHQtYnRuIFZsdC1idG4tLXNlY29uZGFyeSBWbHQtYnRuLS1hcHAgVmx0LWJ0bi0tc21hbGxcIj5Eb25lPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdFx0PCEtLSA8c3BhbiAqbmdJZj0naXNDcmVhdGFibGUnPlxuICAgICAgPGJ1dHRvbiB0eXBlPSdidXR0b24nIChjbGljayk9J29wZW5SZXNvdXJjZSgkZXZlbnQpJyBjbGFzcz1cIlZsdC1idG4gVmx0LWJ0bi0tc2Vjb25kYXJ5IFZsdC1idG4tLWljb24gVmx0LWJ0bi0tbGFyZ2VcIiBzdHlsZT0nbWFyZ2luLWxlZnQ6IDEycHg7Jz5cbiAgICAgICAgPHN2Zz48dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tcGx1c1wiLz48L3N2Zz5cbiAgICAgIDwvYnV0dG9uPlxuXHRcdDwvc3Bhbj4gLS0+XG5cdFx0PGRpdiAqbmdJZj0naXNDcmVhdGFibGUgJiYgIWRpc2FibGVkJyBjbGFzcz1cIlZsdC1jb21wb3NpdGVfX2FwcGVuZFwiPlxuICAgICAgPGJ1dHRvbiAoZm9jdXMpPSdvbkFjdGl2YXRlZCgkZXZlbnQpJyAoYmx1cik9J29uQmx1cigkZXZlbnQpJyB0eXBlPSdidXR0b24nIChjbGljayk9J29wZW5SZXNvdXJjZSgkZXZlbnQpJyBjbGFzcz1cIlZsdC1idG4gVmx0LWJ0bi0td2hpdGUgVmx0LWJ0bi0taWNvbiBhZGQtYnV0dG9uXCIgYXJpYS1sYWJlbD0nQWRkIG5ldyc+XG4gICAgICAgIDxzdmc+PHVzZSB4bGluazpocmVmPVwidm9sdGEvdm9sdGEtaWNvbnMuc3ZnI1ZsdC1pY29uLXBsdXNcIi8+PC9zdmc+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblx0PC9kaXY+XG5cdDxzbWFsbCAqbmdJZj0nZi5pbnZhbGlkICYmICgoZiB8IG1ldGFNb2RlbCkuX3BhcmVudC5zdWJtaXR0ZWQgfHwgKChmdCB8IG1ldGFNb2RlbCkudG91Y2hlZCAmJiBrZXlMaXN0ZW5lckFjdGl2ZSkpJyBjbGFzcz1cIlZsdC1mb3JtX19lbGVtZW50X19lcnJvclwiPlxuXHRcdDxzcGFuICpuZ0lmPVwiZi5lcnJvcnMucmVxdWlyZWRcIj5SZXF1aXJlZC4mbmJzcDs8L3NwYW4+XG5cdDwvc21hbGw+XG5cdDxzbWFsbCAqbmdJZj0nbWV0YS5oaW50JyBjbGFzcz1cIlZsdC1mb3JtX19lbGVtZW50X19oaW50XCI+e3ttZXRhLmhpbnR9fTwvc21hbGw+XG48L2Rpdj4iLCI8ZGl2IGNsYXNzPSd2Z2lwLW1ldGEtZmllbGQtcHJldmlldycgKm5nSWY9J3ByZXZpZXcgJiYgbW9kZWwgJiYgKCFtdWx0aXBsZSB8fCAobXVsdGlwbGUgJiYgbW9kZWwubGVuZ3RoKSknPlxuICA8ZGl2IGNsYXNzPSd2Z2lwLW1ldGEtZmllbGQtbGFiZWwnPnt7bWV0YS5sYWJlbCB8fCBtZXRhLm5hbWV9fTwvZGl2PlxuICA8ZGl2ICpuZ0lmPSchbXVsdGlwbGUnIGNsYXNzPSd2Z2lwLW1ldGEtZmllbGQtdmFsdWUgX19ndSc+XG4gICAgPHN2ZyBjbGFzcz1cIlZsdC1pY29uIFZsdC1pY29uLS1zbWFsbGVyXCIgc3R5bGU9J21hcmdpbi10b3A6IC0zcHg7Jz48dXNlIGF0dHIueGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWJyYW5kLWljb25zLnN2ZyN7e2ludGVncmF0aW9uSWNvbn19XCIvPjwvc3ZnPlxuICAgIHt7bW9kZWwubGFiZWwgfHwgbW9kZWwuaWR9fSA8c3BhbiBjbGFzcz0nVmx0LWdyZXknPih7e21vZGVsLnR5cGV9fSk8L3NwYW4+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPSdtdWx0aXBsZScgY2xhc3M9J3ZnaXAtbWV0YS1maWVsZC12YWx1ZSBfX2d1Jz5cbiAgICA8c3BhbiAqbmdGb3I9J2xldCBtIG9mIChtb2RlbCB8fCBbXSknIGNsYXNzPSdWbHQtYmFkZ2UgVmx0LWJhZGdlLS1hcHAnPlxuICAgICAge3ttLmxhYmVsIHx8IG0uaWQgfHwgbX19IDxzcGFuIGNsYXNzPSdWbHQtZ3JleS1kYXJrJyAqbmdJZj0naXNQb2x5bW9ycGhpYyc+KHt7bS50eXBlfX0pPC9zcGFuPlxuICAgIDwvc3Bhbj5cbiAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgKm5nSWY9JyFwcmV2aWV3JyBjbGFzcz1cIm1ldGEtZmllbGQtcmVmZXJlbmNlIFZsdC1mb3JtX19lbGVtZW50IFZsdC1mb3JtX19lbGVtZW50LS1iaWdcIiBbbmdDbGFzc109XCJ7ICdWbHQtZm9ybV9fZWxlbWVudC0tZXJyb3InOiAoc2VhcmNoRXJyb3IgJiYga2V5TGlzdGVuZXJBY3RpdmUpIHx8IChmLmludmFsaWQgJiYgKChmIHwgbWV0YU1vZGVsKS5fcGFyZW50LnN1Ym1pdHRlZCB8fCAoZnQgfCBtZXRhTW9kZWwgKS50b3VjaGVkKSksICdtdWx0aXBsZSc6IG11bHRpcGxlLCAnaGFzLXZhbHVlJzogbW9kZWwsIGFjdGl2ZToga2V5TGlzdGVuZXJBY3RpdmUgfVwiPlxuICA8ZGl2ICpuZ0lmPSdtdWx0aXBsZScgY2xhc3M9J2l0ZW1zLWNvbnRhaW5lcicgW25nQ2xhc3NdPSd7IGNyZWF0YWJsZTogaXNDcmVhdGFibGUgfSc+XG4gICAgPGRpdiAqbmdJZj0nbW9kZWwnIGNsYXNzPSdiYWRnZXMtY29udGFpbmVyIGtlZXAtZm9jdXMnIChjbGljayk9J2ZvY3VzKCknIHN0eWxlPSd3aWR0aDogMTAwJTsnPlxuICAgICAgPGRpdiAqbmdGb3I9J2xldCBpdGVtIG9mIG1vZGVsJyBjbGFzcz1cIlZsdC1iYWRnZSBWbHQtYmFkZ2UtLWFwcCBWbHQtYmFkZ2UtLWxhcmdlIGtlZXAtZm9jdXNcIiBbbmdDbGFzc109XCJ7IGdyaWQ6IChpdGVtLmxhYmVsIHx8IGl0ZW0uaWQgfHwgJycpLmxlbmd0aCA+IDU2fVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz0nVmx0LXRydW5jYXRlJz57e2l0ZW0ubGFiZWwgfHwgaXRlbS5pZCB8fCBpdGVtIH19IDxzcGFuICpuZ0lmPSdpc1BvbHltb3JwaGljJyBjbGFzcz0nVmx0LWdyZXktZGFyaycgc3R5bGU9J2ZvbnQtd2VpZ2h0OiBub3JtYWw7Jz4oe3tpdGVtLnR5cGV9fSk8L3NwYW4+PC9zcGFuPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiVmx0LWJhZGdlX19kaXNtaXNzIGtlZXAtZm9jdXNcIiAoY2xpY2spPSdyZW1vdmUoJGV2ZW50LCBpdGVtKScgc3R5bGU9J3Bvc2l0aW9uOiBhYnNvbHV0ZTsgcmlnaHQ6IDEycHg7IHRvcDogOHB4OycgYXJpYS1sYWJlbD0nUmVtb3ZlJz48L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIlZsdC1jb21wb3NpdGVcIj5cbiAgICA8ZGl2IGNsYXNzPSdkcm9wZG93bi13cmFwcGVyIFZsdC1kcm9wZG93bicgc3R5bGU9J3dpZHRoOiAxMDAlOyBwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogNDhweDsnPlxuICAgICAgPGRpdiBjbGFzcz1cIlZsdC1kcm9wZG93bl9fcGFuZWxcIj5cbiAgICAgICAgPGRpdiAqbmdJZj0nc2VhcmNoRXJyb3InPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJWbHQtY2FsbG91dCBWbHQtY2FsbG91dC0tY3JpdGljYWwga2VlcC1mb2N1c1wiPlxuICAgICAgICAgICAgPGk+PC9pPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlZsdC1jYWxsb3V0X19jb250ZW50XCI+e3tzZWFyY2hFcnJvcn19PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPSchc2VhcmNoRXJyb3IgJiYgKHN1Z2dlc3Rpb25zLmxlbmd0aCB8fCBzZWFyY2hSZXN1bHRzKScgW25nQ2xhc3NdPVwieyBzdWdnZXN0aW9uczogIXNlYXJjaFJlc3VsdHN9XCIgY2xhc3M9XCJWbHQtZHJvcGRvd25fX3BhbmVsX19jb250ZW50IFZsdC1kcm9wZG93bl9fcGFuZWxfX2NvbnRlbnQtLXNjcm9sbC1hcmVhXCIgc3R5bGU9J3BhZGRpbmc6IDA7Jz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiVmx0LWRyb3Bkb3duX19ibG9ja1wiPjwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9JyFzZWFyY2hSZXN1bHRzJyBjbGFzcz1cIlZsdC1kcm9wZG93bl9fc2Nyb2xsXCI+XG4gICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgJ1ZsdC1kcm9wZG93bl9fbGluay0tc2VsZWN0ZWQnOiBhY3RpdmVTdWdnZXN0aW9uSW5kZXggPT09IGksIHNtYXJ0OiBzdWdnZXN0aW9uLnNtYXJ0IH1cIiAoY2xpY2spPSdvblN1Z2dlc3Rpb25TZWxlY3QoJGV2ZW50LCBzdWdnZXN0aW9uKScgKm5nRm9yPSdsZXQgc3VnZ2VzdGlvbiBvZiBzdWdnZXN0aW9uczsgbGV0IGkgPSBpbmRleCcgIGNsYXNzPVwiVmx0LWRyb3Bkb3duX19saW5rIGhhcy10eXBlXCI+XG4gICAgICAgICAgICAgIDxzdmcgY2xhc3M9J1ZsdC1pY29uICBWbHQtaWNvbi0tc21hbGwnPjx1c2UgYXR0ci54bGluazpocmVmPVwidm9sdGEvdm9sdGEtYnJhbmQtaWNvbnMuc3ZnI3t7aW50ZWdyYXRpb25JY29ufX1cIi8+PC9zdmc+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9J19fZ3UnIFt0aXRsZV09J3N1Z2dlc3Rpb24ubGFiZWwnPnt7IHN1Z2dlc3Rpb24ubGFiZWwgfX08L2Rpdj5cbiAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPSdWbHQtZ3JleS1kYXJrJyBzdHlsZT0ndGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7Jz57e3N1Z2dlc3Rpb24udHlwZX19PC9zbWFsbD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9J3NlYXJjaFJlc3VsdHMnIGNsYXNzPVwiVmx0LWRyb3Bkb3duX19zY3JvbGxcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9JyFzZWFyY2hSZXN1bHRzLmxlbmd0aCcgY2xhc3M9J1ZsdC1kcm9wZG93bl9fYmxvY2snPiBObyByZWNvcmRzIG1hdGNoaW5nICc8YiBzdHlsZT0ncG9pbnRlci1ldmVudHM6IG5vbmU7Jz57e3NlYXJjaFRleHR9fTwvYj4nIHdlcmUgZm91bmQuPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgJ1ZsdC1kcm9wZG93bl9fbGluay0tc2VsZWN0ZWQnOiBhY3RpdmVTdWdnZXN0aW9uSW5kZXggPT09IGkgfVwiIChjbGljayk9J29uU3VnZ2VzdGlvblNlbGVjdCgkZXZlbnQsIHN1Z2dlc3Rpb24pJyAqbmdGb3I9J2xldCBzdWdnZXN0aW9uIG9mIHNlYXJjaFJlc3VsdHM7IGxldCBpID0gaW5kZXgnICBjbGFzcz1cIlZsdC1kcm9wZG93bl9fbGluayBoYXMtdHlwZVwiPlxuICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSdWbHQtaWNvbiBWbHQtaWNvbi0tc21hbGwnPjx1c2UgYXR0ci54bGluazpocmVmPVwidm9sdGEvdm9sdGEtYnJhbmQtaWNvbnMuc3ZnI3t7aW50ZWdyYXRpb25JY29ufX1cIi8+PC9zdmc+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9J19fZ3UnIFt0aXRsZV09J3N1Z2dlc3Rpb24ubGFiZWwnPnt7IHN1Z2dlc3Rpb24ubGFiZWwgfX08L2Rpdj5cbiAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPSdWbHQtZ3JleS1kYXJrJyBzdHlsZT0ndGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7Jz57e3N1Z2dlc3Rpb24udHlwZX19PC9zbWFsbD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS0gPGRpdiAqbmdJZj0nc2VhcmNoUmVzdWx0cycgY2xhc3M9XCJWbHQtZHJvcGRvd25fX2Jsb2NrXCIgc3R5bGU9J3RleHQtYWxpZ246IHJpZ2h0OyBwYWRkaW5nLXRvcDogMDsnPlxuICAgICAgICAgICAgPHNtYWxsPlxuICAgICAgICAgICAgICB7eyBzZWFyY2hSZXN1bHRzID8gc2VhcmNoUmVzdWx0cy5sZW5ndGgrJyByZXN1bHRzJyA6ICdTdWdnZXN0aW9ucycgfX0gPHNwYW4gc3R5bGU9J2ZvbnQtc3R5bGU6IGl0YWxpYzsgZm9udC13ZWlnaHQ6IG5vcm1hbDsnICpuZ0lmPSdzZWFyY2hSZXN1bHRzJz5+e3sgbW9kZWwgPyAnbGFzdCBzZWFyY2gnIDogc2VhcmNoVGV4dH19PC9zcGFuPlxuICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIlZsdC1kcm9wZG93bl9fYmxvY2tcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiVmx0LWNvbXBvc2l0ZV9fcHJlcGVuZFwiICpuZ0lmPSdpc1BvbHltb3JwaGljICYmIHNob3dUeXBlcyAmJiAobXVsdGlwbGUgfHwgIW1vZGVsIHx8IChkcm9wZG93blZpc2libGUgJiYgKChzdWdnZXN0aW9ucyB8fCBzZWFyY2hSZXN1bHRzIHx8IFtdKS5sZW5ndGggfHwgc2VhcmNoUmVzb3VyY2VUeXBlLnJlc291cmNlVHlwZSkpKSc+XG4gICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLXNjb3BlXCIgW25nQ2xhc3NdPVwieyAnaGFzLXZhbHVlJzogc2VhcmNoUmVzb3VyY2VUeXBlLnJlc291cmNlVHlwZSB9XCI+XG4gICAgICAgIDx2Z2lwLW1ldGEtZmllbGQgY2xhc3M9J3Nob3duJyBbbWV0YV09J3NlYXJjaFJlc291cmNlVHlwZU1ldGEnIFtwYXJlbnRdPSdzZWFyY2hSZXNvdXJjZVR5cGUnIChvbkNoYW5nZSk9J29uU2VhcmNoUmVzb3VyY2VUeXBlQ2hhbmdlZCgkZXZlbnQpJyAob25MZWF2ZSk9J29uQmx1cigkZXZlbnQpJyBbaW50ZWdyYXRpb25Db2RlXT0naW50ZWdyYXRpb25Db2RlJyB0aGVtZT0naW5oZXJpdCc+PC92Z2lwLW1ldGEtZmllbGQ+XG4gICAgICAgIDxzdmcgY2xhc3M9J1ZsdC1pY29uIFZsdC1ncmV5IFZsdC1pY29uLS1zbWFsbGVyIHZpc2libGUtbW9iaWxlIG1vYmlsZS1pY29uJyBzdHlsZT0ncG9zaXRpb246IGFic29sdXRlOyB0b3A6IDE1cHg7IGxlZnQ6IDE0cHg7IHBvaW50ZXItZXZlbnRzOiBub25lOyc+XG4gICAgICAgICAgPHVzZSB4bGluazpocmVmPVwidm9sdGEvdm9sdGEtaWNvbnMuc3ZnI1ZsdC1pY29uLW1lbnVcIi8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgICA8bGFiZWwgY2xhc3M9J21vYmlsZS1sYWJlbCBoaWRkZW4tbW9iaWxlIGhpZGRlbi1kZXNrdG9wJz5TZWFyY2g8L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj0nIShpc1BvbHltb3JwaGljICYmIHNob3dUeXBlcyAmJiAobXVsdGlwbGUgfHwgIW1vZGVsIHx8IGRyb3Bkb3duVmlzaWJsZSkpJz48IS0tIHJlcXVpcmVkIGJ5IGNzcyAtLT48L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiVmx0LWNvbXBvc2l0ZV9fd3JhcHBlciBWbHQtaW5wdXRcIiBzdHlsZT0nb3ZlcmZsb3c6IGhpZGRlbjsnIFtuZ0NsYXNzXT1cInsgJ2hhcy1hcHBlbmQtYnV0dG9uJzogaGFzQXBwZW5kQnV0dG9uICYmICFkaXNhYmxlZCB9XCI+XG4gICAgICA8bGFiZWwgY2xhc3M9J3dyYXBwZXInPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiVmx0LWNvbXBvc2l0ZV9fcHJlcGVuZCBWbHQtY29tcG9zaXRlX19wcmVwZW5kLS1pY29uXCIgc3R5bGU9J3RvcDogMDsgcGFkZGluZy10b3A6IDE1cHg7Jz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiVmx0LWNvbXBvc2l0ZV9faWNvblwiPlxuICAgICAgICAgICAgPHN2ZyAqbmdJZj0naXNTZWFyY2hhYmxlICYmICghbW9kZWwgfHwgbXVsdGlwbGUpJyBjbGFzcz0nVmx0LWdyZXknPjx1c2UgYXR0ci54bGluazpocmVmPVwidm9sdGEvdm9sdGEtaWNvbnMuc3ZnI1ZsdC1pY29uLXt7IG11bHRpcGxlID8gJ3N0YWNrJyA6ICdzZWFyY2gnfX1cIi8+PC9zdmc+XG4gICAgICAgICAgICA8c3ZnICpuZ0lmPSchaXNTZWFyY2hhYmxlIHx8IChtb2RlbCAmJiAhbXVsdGlwbGUpJyBbbmdTdHlsZV09XCJ7ZmlsbDogaW50ZWdyYXRpb25JY29uID09PSAnQnJhbmQtaWNvbi12b25hZ2UnID8gJ3ZhcigtLXZnaXAtbWV0YS1pbnB1dC1jb2xvciknIDogJyd9XCI+PHVzZSBhdHRyLnhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1icmFuZC1pY29ucy5zdmcje3tpbnRlZ3JhdGlvbkljb259fVwiLz48L3N2Zz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPSdzdWdnZXN0aW9ucy5sZW5ndGgnIGNsYXNzPVwiVmx0LWJhZGdlIFZsdC1iYWRnZS0tc21hbGwgVmx0LWJhZGdlLS1wdXJwbGVcIiBzdHlsZT0ncGFkZGluZzogMHB4IDRweDsgcG9zaXRpb246IGFic29sdXRlOyB0b3A6IDI2cHg7IGxlZnQ6IDRweDsgcG9pbnRlci1ldmVudHM6IG5vbmU7IG1pbi13aWR0aDogMTRweDsnPnt7c3VnZ2VzdGlvbnMubGVuZ3RofX08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxpbnB1dCBjbGFzcz0nbW9kZWwnIHR5cGU9J2hpZGRlbicgW3JlcXVpcmVkXT0ndmFsaWRhdGlvbnMucmVxdWlyZWQnIFsobmdNb2RlbCldPSdtb2RlbCcgI2Y9J25nTW9kZWwnIFtuYW1lXT0nbmFtZScgLz5cbiAgICAgICAgPGlucHV0IGNsYXNzPSdtYWluJyBbcmVhZG9ubHldPSchaXNTZWFyY2hhYmxlIHx8IChtb2RlbCAmJiAhbXVsdGlwbGUpJyBbbmdNb2RlbF09J3NlYXJjaFRleHQnICNmdD0nbmdNb2RlbCcgKG5nTW9kZWxDaGFuZ2UpPSdvblNlYXJjaFRleHRDaGFuZ2VkKCRldmVudCknIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIiB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwie3sgcGxhY2VIb2xkZXJMYWJlbCB8fCAnICcgfX1cIiBbbmdDbGFzc109J3sgZXh0OiBleHRlcm5hbExpbmsgfScgKGNsaWNrKT0nb25BY3RpdmF0ZWQoJGV2ZW50KScgKGZvY3VzKT0nb25BY3RpdmF0ZWQoJGV2ZW50KScgKGJsdXIpPSdvbkJsdXIoJGV2ZW50KScgW2Rpc2FibGVkXT0nZGlzYWJsZWQnIFt0aXRsZV09XCJtb2RlbCA/IG1vZGVsLmxhYmVsIDogJydcIi8+XG4gICAgICAgIDxsYWJlbCBjbGFzcz0nVmx0LXRydW5jYXRlIGhpZGRlbi1tb2JpbGUnIHN0eWxlPSdwYWRkaW5nLWxlZnQ6IDI1cHg7IHBhZGRpbmctcmlnaHQ6IDQycHg7Jz57eyAobXVsdGlwbGUgJiYgaXNQb2x5bW9ycGhpYykgPyAnK0FkZCAnIDogKChtb2RlbCB8fCAhaXNQb2x5bW9ycGhpYykgPyBtZXRhLmxhYmVsIDogKCBtZXRhLnNlYXJjaExhYmVsIHx8ICdTZWFyY2gnKSkgfX08c3BhbiAqbmdJZj0ndmFsaWRhdGlvbnMucmVxdWlyZWQnIGNsYXNzPSdWbHQtcmVkJz4qPC9zcGFuPiZuYnNwOzxzcGFuIHN0eWxlPSdjb2xvcjogdmFyKC0tdmdpcC1tZXRhLWlucHV0LWNvbG9yKTsgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7JyAqbmdJZj0nbW9kZWwnPih7e21vZGVsLnR5cGUgfHwgbW9kZWwucmVzb3VyY2VUeXBlIHx8IG1vZGVsLmxlbmd0aH19KTwvc3Bhbj48L2xhYmVsPlxuICAgICAgICA8bGFiZWwgY2xhc3M9J1ZsdC10cnVuY2F0ZSBoaWRkZW4tZGVza3RvcCcgc3R5bGU9J3BhZGRpbmctbGVmdDogMjVweDsgcGFkZGluZy1yaWdodDogNDJweDsnPnt7bWV0YS5sYWJlbCB8fCBtZXRhLm5hbWV9fTxzcGFuICpuZ0lmPSd2YWxpZGF0aW9ucy5yZXF1aXJlZCcgY2xhc3M9J1ZsdC1yZWQnPio8L3NwYW4+Jm5ic3A7PHNwYW4gc3R5bGU9J2NvbG9yOiB2YXIoLS12Z2lwLW1ldGEtaW5wdXQtY29sb3IpOyB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTsnICpuZ0lmPSdtb2RlbCc+KHt7bW9kZWwudHlwZSB8fCBtb2RlbC5yZXNvdXJjZVR5cGUgfHwgbW9kZWwubGVuZ3RofX0pPC9zcGFuPjwvbGFiZWw+XG4gICAgICA8L2xhYmVsPlxuICAgICAgPGRpdiAqbmdJZj0nc2VhcmNoaW5nJyBjbGFzcz0nc2VhcmNoLXByb2dyZXNzJz5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYXIgVmx0LWJnLXB1cnBsZVwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0nVmx0LWNvbXBvc2l0ZV9fYXBwZW5kIHJpZ2h0LWFjdGlvbnMnPlxuICAgICAgICA8IS0tIDxkaXYgKm5nSWY9J3ByZXZNb2RlbCAmJiAhbW9kZWwnIGNsYXNzPVwiVmx0LWNvbXBvc2l0ZV9fYXBwZW5kLS1pY29uXCIgKGNsaWNrKT0ncmV2ZXJ0KCknPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJWbHQtY29tcG9zaXRlX19pY29uXCI+XG4gICAgICAgICAgICA8c3ZnPjx1c2UgeGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1yZXBseVwiLz48L3N2Zz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICA8ZGl2ICpuZ0lmPSdtb2RlbCAmJiAhbXVsdGlwbGUnIGNsYXNzPVwiVmx0LWNvbXBvc2l0ZV9fYXBwZW5kLS1pY29uXCIgKGNsaWNrKT0ncmVtb3ZlU2VsZWN0aW9uKCknPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJWbHQtY29tcG9zaXRlX19pY29uXCI+XG4gICAgICAgICAgICA8c3ZnPjx1c2UgeGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1jcm9zc1wiLz48L3N2Zz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxhIFtocmVmXT0nZXh0ZXJuYWxMaW5rIHx8IG1vZGVsLmV4dGVybmFsTGluaycgdGFyZ2V0PSdfYmxhbmsnIHJlbD0nbm9vcGVuZXInICpuZ0lmPSdleHRlcm5hbExpbmsgJiYgKG1vZGVsICYmICFtdWx0aXBsZSknIGNsYXNzPVwiVmx0LWNvbXBvc2l0ZV9fYXBwZW5kLS1pY29uXCIgYXJpYS1sYWJlbD0nT3BlbiBleHRlcm5hbCc+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIlZsdC1jb21wb3NpdGVfX2ljb25cIj5cbiAgICAgICAgICAgIDxzdmc+PHVzZSB4bGluazpocmVmPVwidm9sdGEvdm9sdGEtaWNvbnMuc3ZnI1ZsdC1pY29uLW9wZW5cIi8+PC9zdmc+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDwhLS0gPHNwYW4gKm5nSWY9J2hhc0NyZWF0YWJsZXMnPlxuICAgICAgPGJ1dHRvbiB0eXBlPSdidXR0b24nICpuZ0lmPSchbW9kZWwgfHwgbXVsdGlwbGUnIChjbGljayk9J29wZW5SZXNvdXJjZSgpJyBjbGFzcz1cIlZsdC1idG4gVmx0LWJ0bi0tc2Vjb25kYXJ5IFZsdC1idG4tLWljb24gVmx0LWJ0bi0tbGFyZ2VcIiBzdHlsZT0nbWFyZ2luLWxlZnQ6IDEycHg7Jz5cbiAgICAgICAgPHN2Zz48dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tcGx1c1wiLz48L3N2Zz5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiB0eXBlPSdidXR0b24nICpuZ0lmPSdtb2RlbCAmJiAhbXVsdGlwbGUnIChjbGljayk9J29wZW5SZXNvdXJjZShtb2RlbCknIGNsYXNzPVwiVmx0LWJ0biBWbHQtYnRuLS1wcmltYXJ5IFZsdC1idG4tLWljb24gVmx0LWJ0bi0tbGFyZ2VcIiBzdHlsZT0nbWFyZ2luLWxlZnQ6IDEycHg7Jz5cbiAgICAgICAgPHN2Zz48dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tZWRpdFwiLz48L3N2Zz5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvc3Bhbj4gLS0+XG4gICAgPGRpdiAqbmdJZj0naGFzQXBwZW5kQnV0dG9uICYmICFkaXNhYmxlZCcgY2xhc3M9XCJWbHQtY29tcG9zaXRlX19hcHBlbmRcIj5cbiAgICAgIDxidXR0b24gKGZvY3VzKT0nb25BY3RpdmF0ZWQoJGV2ZW50KScgKGJsdXIpPSdvbkJsdXIoJGV2ZW50KScgdHlwZT0nYnV0dG9uJyAqbmdJZj0nIW1vZGVsIHx8IG11bHRpcGxlJyAoY2xpY2spPSdvcGVuUmVzb3VyY2UoKScgY2xhc3M9XCJWbHQtYnRuIFZsdC1idG4tLXdoaXRlIFZsdC1idG4tLWljb25cIiBhcmlhLWxhYmVsPSdBZGQgbmV3Jz5cbiAgICAgICAgPHN2Zz48dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tcGx1c1wiLz48L3N2Zz5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiAoZm9jdXMpPSdvbkFjdGl2YXRlZCgkZXZlbnQpJyAoYmx1cik9J29uQmx1cigkZXZlbnQpJyB0eXBlPSdidXR0b24nICpuZ0lmPSdtb2RlbCAmJiAhbXVsdGlwbGUnIChjbGljayk9J29wZW5SZXNvdXJjZShtb2RlbCknIGNsYXNzPVwiVmx0LWJ0biBWbHQtYnRuLS13aGl0ZSBWbHQtYnRuLS1pY29uXCIgYXJpYS1sYWJlbD0nRWRpdCc+XG4gICAgICAgIDxzdmc+PHVzZSB4bGluazpocmVmPVwidm9sdGEvdm9sdGEtaWNvbnMuc3ZnI1ZsdC1pY29uLWVkaXRcIi8+PC9zdmc+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxzbWFsbCAqbmdJZj0nZi5pbnZhbGlkICYmICgoZiB8IG1ldGFNb2RlbCkuX3BhcmVudC5zdWJtaXR0ZWQgfHwgKChmdCB8IG1ldGFNb2RlbCkudG91Y2hlZCAmJiBrZXlMaXN0ZW5lckFjdGl2ZSkpJyBjbGFzcz1cIlZsdC1mb3JtX19lbGVtZW50X19lcnJvclwiPlxuICAgIDxzcGFuICpuZ0lmPVwiZi5lcnJvcnMucmVxdWlyZWRcIj5SZXF1aXJlZDwvc3Bhbj5cbiAgICA8c3BhbiAqbmdJZj1cImYuZXJyb3JzLnBhdHRlcm5cIj5TaG91bGQgbWF0Y2ggJ3t7dmFsaWRhdGlvbnMucGF0dGVybn19JyBwYXR0ZXJuPC9zcGFuPlxuICA8L3NtYWxsPlxuICA8c21hbGwgKm5nSWY9J21ldGEuaGVscFRleHQgfHwgbWV0YS5oaW50JyBjbGFzcz1cIlZsdC1mb3JtX19lbGVtZW50X19oaW50XCI+e3ttZXRhLmhlbHBUZXh0IHx8IG1ldGEuaGludH19PC9zbWFsbD5cbjwvZGl2PlxuIiwiPGRpdiBjbGFzcz1cIlZsdC1mb3JtX19lbGVtZW50XCIgW25nQ2xhc3NdPVwieyAnVmx0LWZvcm1fX2VsZW1lbnQtLWVycm9yJzogKGYgfCBtZXRhTW9kZWwpLl9wYXJlbnQuc3VibWl0dGVkICYmIGYuaW52YWxpZCB9XCI+XG4gIDxsYWJlbCBjbGFzcz1cIlZsdC1sYWJlbFwiPnt7bWV0YS5sYWJlbCB8fCBtZXRhLm5hbWV9fSAoe3sobW9kZWwgfHwgW10pLmxlbmd0aH19KTxzcGFuICpuZ0lmPSd2YWxpZGF0aW9ucy5yZXF1aXJlZCcgY2xhc3M9J1ZsdC1yZWQnPio8L3NwYW4+PC9sYWJlbD5cbiAgPHNtYWxsIHN0eWxlPSdtYXJnaW4tYm90dG9tOiA0cHg7JyAqbmdJZj0nbWV0YS5oaW50JyBjbGFzcz1cIlZsdC1mb3JtX19lbGVtZW50X19oaW50XCI+e3ttZXRhLmhpbnR9fTwvc21hbGw+XG4gIDxpbnB1dCBjbGFzcz0nbW9kZWwnIHR5cGU9J2hpZGRlbicgW3JlcXVpcmVkXT0ndmFsaWRhdGlvbnMucmVxdWlyZWQnIFsobmdNb2RlbCldPSdtb2RlbCcgI2Y9J25nTW9kZWwnIFtuYW1lXT0nbmFtZScgLz5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj0nbW9kZWwnPlxuICAgIDxkaXYgKm5nRm9yPSdsZXQgaXRlbSBvZiBtb2RlbDsgbGV0IGkgPSBpbmRleDsnIHN0eWxlPSdkaXNwbGF5OiBmbGV4OyBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tdmdpcC1tZXRhLXNlcGFyYXRvci1jb2xvcik7Jz5cbiAgICAgIDx2Z2lwLW1ldGEtZmllbGQgc3R5bGU9J2ZsZXg6IDE7JyBbaW5kZXhdPSdpJyBbbWV0YV09J2xpc3QnIFtwYXJlbnRdPSdpdGVtJyBbaW50ZWdyYXRpb25Db2RlXT0naW50ZWdyYXRpb25Db2RlJyB0aGVtZT0naW5oZXJpdCc+PC92Z2lwLW1ldGEtZmllbGQ+XG4gICAgICA8ZGl2IHN0eWxlPSdwYWRkaW5nLWxlZnQ6IDEycHg7IG1hcmdpbi10b3A6IDNweDsnPlxuICAgICAgICA8YnV0dG9uIHR5cGU9J2J1dHRvbicgKGNsaWNrKT0ncmVtb3ZlKGkpJyBjbGFzcz1cIlZsdC1idG4gVmx0LWJ0bi0tbGlua1wiIFtkaXNhYmxlZF09J21vZGVsLmxlbmd0aCA9PT0gKHZhbGlkYXRpb25zLm1pbiB8fCAwKScgc3R5bGU9J2JvcmRlcjogMDsnIGFyaWEtbGFiZWw9J1JlbW92ZSc+XG4gICAgICAgICAgPHN2Zz48dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tYmluXCIvPjwvc3ZnPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPGJ1dHRvbiBzdHlsZT0nd2lkdGg6IDEwMCU7JyB0eXBlPSdidXR0b24nIChjbGljayk9J2FkZCgpJyBjbGFzcz1cIlZsdC1idG4gVmx0LWJ0bi0tc21hbGwgVmx0LWJ0bi0tdGVydGlhcnkgVmx0LWJ0bi0tYXBwIGl0ZW0tYWRkLWJ1dHRvblwiIFtkaXNhYmxlZF09J3ZhbGlkYXRpb25zLm1heCAmJiBtb2RlbCAmJiBtb2RlbC5sZW5ndGggPT09IHZhbGlkYXRpb25zLm1heCc+XG4gICAgPHN2Zz48dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tcGx1c1wiLz48L3N2Zz57e2xpc3QubGFiZWx9fVxuICA8L2J1dHRvbj5cbiAgPHNtYWxsICpuZ0lmPScoZiB8IG1ldGFNb2RlbCkuX3BhcmVudC5zdWJtaXR0ZWQgJiYgZi5pbnZhbGlkJyBjbGFzcz1cIlZsdC1mb3JtX19lbGVtZW50X19lcnJvclwiPlxuICAgIDxzcGFuICpuZ0lmPVwiZi5lcnJvcnMucmVxdWlyZWRcIj5SZXF1aXJlZDwvc3Bhbj5cbiAgICA8c3BhbiAqbmdJZj1cImYuZXJyb3JzLm1heGxlbmd0aFwiPkxlbmd0aCBjYW4gbm90IGV4Y2VlZCB7e3ZhbGlkYXRpb25zLm1heGxlbmd0aH19IGNoYXJhY3RlcnM8L3NwYW4+XG4gIDwvc21hbGw+XG4gIDxzbWFsbCAqbmdJZj0nbWV0YS5oZWxwVGV4dCcgY2xhc3M9XCJWbHQtZm9ybV9fZWxlbWVudF9faGludFwiPnt7bWV0YS5oZWxwVGV4dH19PC9zbWFsbD5cbjwvZGl2PiIsIjxkaXYgKm5nRm9yPSdsZXQgc2VjdGlvbiBvZiBtZXRhLnNlY3Rpb25zJyBjbGFzcz0nVmx0LXNlY3Rpb24nIFtuZ0NsYXNzXT1cInsgc2hvd246IHNob3dBbGwgfHwgc2VjdGlvbi52aXNpYmxlIHx8ICghbWV0YS5vbmVUaW1lT3B0aW9uYWwgJiYgIXNlY3Rpb24uJG9wdGlvbmFsKSB8fCAobWV0YS5vbmVUaW1lT3B0aW9uYWwgJiYgIW9wdGlvbmFsRmllbGRzQ291bnQpIH1cIj5cblx0PGg1ICpuZ0lmPSdzZWN0aW9uLmxhYmVsJyBjbGFzcz1cIlZsdC1zZWN0aW9uX190aXRsZVwiPnt7c2VjdGlvbi5sYWJlbH19PC9oNT5cblx0PGRpdiBzdHlsZT0nb3ZlcmZsb3c6IHZpc2libGU7JyBbbmdDbGFzc109XCJ7ICdmb3ItcHJldmlldyc6IHByZXZpZXcgfVwiPlxuXHRcdDxzbWFsbCAqbmdJZj0nc2VjdGlvbi5kZXNjcmlwdGlvbicgY2xhc3M9XCJWbHQtZm9ybV9fZWxlbWVudF9faGludFwiPnt7c2VjdGlvbi5kZXNjcmlwdGlvbn19PC9zbWFsbD5cblx0XHQ8ZGl2PlxuXHRcdFx0PG5nLWNvbnRhaW5lciAqbmdGb3I9J2xldCBmaWVsZCBvZiBzZWN0aW9uLmZpZWxkcyc+XG5cdFx0XHRcdDx2Z2lwLW1ldGEtZmllbGQgKm5nSWY9JyFmaWVsZC4kaGlkZGVuICYmIChzaG93QWxsIHx8IHNlY3Rpb24udmlzaWJsZSB8fCAhZmllbGQuJG9wdGlvbmFsKScgW21ldGFdPSdmaWVsZCcgW3BhcmVudF09J3Jlc291cmNlJyBbaW50ZWdyYXRpb25Db2RlXT0naW50ZWdyYXRpb25Db2RlJyBbcmVzb3VyY2VUeXBlXT0ncmVzb3VyY2VUeXBlJyBbcHJldmlld109J3ByZXZpZXcnIFtuZ0NsYXNzXT1cInsgc2hvd246IHNob3dBbGwgfHwgdHJ1ZSB9XCIgdGhlbWU9J2luaGVyaXQnIFthdHRyLmRhdGEtdGhlbWVdPSd0aGVtZSc+PC92Z2lwLW1ldGEtZmllbGQ+XG5cdFx0XHQ8L25nLWNvbnRhaW5lcj5cblx0XHQ8L2Rpdj5cblx0PC9kaXY+XG48L2Rpdj5cbjxkaXYgKm5nSWY9J2lzUGVyc2lzdGVkUmVzb3VyY2UgJiYgbWV0YS5jaGlsZHJlbiAmJiBwcmV2aWV3Jz5cblx0PGRpdiAqbmdGb3I9J2xldCBjaGlsZCBvZiBtZXRhLmNoaWxkcmVuJz5cblx0XHQ8aDUgY2xhc3M9J1ZsdC1jaGlsZHJlbl9fdGl0bGUnPlxuXHRcdFx0PHN2ZyBjbGFzcz1cIlZsdC1pY29uXCI+PHVzZSB4bGluazpocmVmPVwidm9sdGEvdm9sdGEtaWNvbnMuc3ZnI1ZsdC1pY29uLXN0YWNrXCIgLz48L3N2Zz4mbmJzcDtcblx0XHRcdHt7Y2hpbGQubGFiZWx9fSA8c3BhbiBjbGFzcz0nVmx0LWdyZXknPih7eyhyZXNvdXJjZVtjaGlsZC5uYW1lXSB8fCBbXSkubGVuZ3RofX0pPC9zcGFuPlxuXHRcdDwvaDU+XG5cdFx0PGRpdiAqbmdGb3I9XCJsZXQgYyBvZiByZXNvdXJjZVtjaGlsZC5uYW1lXVwiIHN0eWxlPSdwb3NpdGlvbjogcmVsYXRpdmU7Jz5cblxuXHRcdFx0PGRpdiBjbGFzcz1cIlZsdC1jYXJkIFZsdC1iZy13aGl0ZVwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwiVmx0LWNhcmRfX2NvbnRlbnQgVmx0LWJ0bi1vbi1ob3ZlclwiPlxuXHRcdFx0XHRcdDxoNT57e2MuU3ViamVjdCB8fCBjLnN1YmplY3QgfHwgYy5zdW1tYXJ5IHx8IGMudGl0bGUgfHwgYy5DYXNlTnVtYmVyIHx8IGMuY29tbWVudCB8fCBjLmJvZHkgfHwgYy5uYW1lIHx8IGMudG9waWMgfHwgYy5jb250ZW50IHx8ICcuLi4nIH19PC9oNT5cblx0XHRcdFx0XHQ8ZGl2IHN0eWxlPSdmb250LXNpemU6IDEycHg7IGxpbmUtaGVpZ2h0OiAxNnB4Oyc+XG5cdFx0XHRcdFx0XHRDcmVhdGVkOiA8c3BhbiBjbGFzcz0nVmx0LWJsYWNrJz57e2MuX3ZnaXMuY3JlYXRlZERhdGUgfCBkYXRlOidtZWRpdW1EYXRlJ319PC9zcGFuPlxuXHRcdFx0XHRcdFx0RWRpdGVkOiA8c3BhbiBjbGFzcz0nVmx0LWJsYWNrJz57e2MuX3ZnaXMubW9kaWZpZWREYXRlIHwgZGF0ZTonbWVkaXVtJ319PC9zcGFuPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJWbHQtYmFkZ2UgVmx0LWJhZGdlLS1hcHAgVmx0LWJhZGdlLS1wdXJwbGUgVmx0LWJhZGdlLS1zbWFsbFwiPnt7Yy5fdmdpcy5yZXNvdXJjZVR5cGV9fTwvZGl2PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJWbHQtYnRuLWdyb3VwIFZsdC1idG4tZ3JvdXAtLWhvdmVyXCI+XG5cdFx0XHRcdFx0XHQ8YSAqbmdJZj0nYy5fdmdpcy5leHRlcm5hbExpbmsnIGF0dHIuaHJlZj0ne3tjLl92Z2lzLmV4dGVybmFsTGlua319JyB0YXJnZXQ9J19ibGFuaycgcmVsPSdub29wZW5lcicgcmVsPSdub29wZW5lcicgY2xhc3M9XCJWbHQtYnRuIFZsdC1idG4tLXRlcnRpYXJ5IFZsdC1idG4tLWljb25cIiBhcmlhLWxhYmVsPSdPcGVuIGV4dGVybmFsJz48c3ZnIHN0eWxlPSdtYXJnaW4tbGVmdDogMDsgbWFyZ2luLXJpZ2h0OiAwOyc+PHVzZSB4bGluazpocmVmPVwidm9sdGEvdm9sdGEtaWNvbnMuc3ZnI1ZsdC1pY29uLW9wZW5cIi8+PC9zdmc+PC9hPlxuXHRcdFx0XHRcdFx0PGJ1dHRvbiB0eXBlPSdidXR0b24nIChjbGljayk9J29wZW5DaGlsZChjaGlsZCwgYyknIGNsYXNzPVwiVmx0LWJ0biBWbHQtYnRuLS10ZXJ0aWFyeSBWbHQtYnRuLS1pY29uXCI+PHN2ZyBzdHlsZT0nbWFyZ2luLWxlZnQ6IDA7IG1hcmdpbi1yaWdodDogMDsnPjx1c2UgYXR0ci54bGluazpocmVmPVwidm9sdGEvdm9sdGEtaWNvbnMuc3ZnI1ZsdC1pY29uLXt7IGNoaWxkLnJlZmVyZW5jZS5lZGl0YWJsZSA/ICdlZGl0JyA6ICdleWUtbmVnYXRpdmUnIH19XCIvPjwvc3ZnPjwvYnV0dG9uPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PlxuXHRcdDxidXR0b24gc3R5bGU9J3dpZHRoOiAxMDAlOyBtYXJnaW4tdG9wOiAwOyBtYXgtd2lkdGg6IDEwMCU7JyB0eXBlPSdidXR0b24nIChjbGljayk9J29wZW5DaGlsZChjaGlsZCknIGNsYXNzPVwiVmx0LWJ0biBWbHQtYnRuLS1zbWFsbCBWbHQtYnRuLS1zZWNvbmRhcnlcIiBbZGlzYWJsZWRdPSdjaGlsZC5jcmVhdGFibGUgPT09IGZhbHNlJz5cblx0XHRcdDxzdmc+PHVzZSB4bGluazpocmVmPVwidm9sdGEvdm9sdGEtaWNvbnMuc3ZnI1ZsdC1pY29uLXBsdXNcIi8+PC9zdmc+e3tjaGlsZC5yZWZlcmVuY2UubGFiZWx9fVxuXHRcdDwvYnV0dG9uPlxuXHQ8L2Rpdj5cbjwvZGl2PlxuPGRpdiAqbmdJZj0nIShtZXRhLm9uZVRpbWVPcHRpb25hbCAmJiBzaG93QWxsKScgW25nQ2xhc3NdPSd7IGNlbnRlcmVkOiAhbWV0YS5vbmVUaW1lT3B0aW9uYWwgfSc+XG5cdDxidXR0b24gKm5nSWY9JyFwcmV2aWV3ICYmIG9wdGlvbmFsRmllbGRzQ291bnQnIHR5cGU9J2J1dHRvbicgKGNsaWNrKT0ndG9nZ2xlT3B0aW9uYWxGaWVsZHMoKScgY2xhc3M9XCJWbHQtYnRuIFZsdC1idG4tLXNtYWxsIFZsdC1idG4tLWxpbmsgbW9yZS1idXR0b25cIiBzdHlsZT0nbWFyZ2luOiAwOyBtYXJnaW4tYm90dG9tOiAxMHB4Oyc+XG5cdFx0PHN2Zz48dXNlIGF0dHIueGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1jaGV2cm9uLXt7IHNob3dBbGwgPyAndXAnIDogJ2Rvd24nIH19XCIvPjwvc3ZnPlxuXHRcdHt7IHNob3dBbGwgPyAnSGlkZScgOiAnU2hvdycgfX0gT3B0aW9uYWwgRmllbGRzICh7e29wdGlvbmFsRmllbGRzQ291bnR9fSlcblx0PC9idXR0b24+XG48L2Rpdj5cbiIsIjxkaXYgKm5nSWY9J2dlbmVyYWxFcnJvcicgY2xhc3M9XCJWbHQtY2FsbG91dCBWbHQtY2FsbG91dC0tY3JpdGljYWxcIiBzdHlsZT0nb3ZlcmZsb3c6IGF1dG87IG1hcmdpbjogMjBweDsnPlxuXHQ8aT48L2k+XG5cdDxkaXYgY2xhc3M9XCJWbHQtY2FsbG91dF9fY29udGVudFwiPlxuXHRcdDxwPnt7Z2VuZXJhbEVycm9yfX08L3A+XG5cdDwvZGl2PlxuPC9kaXY+XG48ZGl2ICpuZ0lmPSchbWV0YScgY2xhc3M9XCJWbHQtcHJvZ3Jlc3NcIj5cblx0PGRpdiBjbGFzcz1cIlZsdC1wcm9ncmVzc19fYmFyXCIgW25nQ2xhc3NdPVwieyBsb2FkaW5nOiBtZXRhTG9hZGluZyB9XCIgcm9sZT1cInByb2dyZXNzYmFyXCIgYXJpYS12YWx1ZW1pbj1cIjBcIiBhcmlhLXZhbHVldGV4dD1cIkxvYWRpbmcgTWV0YWRhdGFcIiBhcmlhLXZhbHVlbWF4PVwiMTAwXCI+PC9kaXY+XG48L2Rpdj5cbjxmb3JtIFt2Z2lwTWV0YUZvcm1BdXRvZm9jdXNdPSchcmVzb3VyY2UgfHwgIXJlc291cmNlLmV4dGVybmFsSWQnICpuZ0lmPSdtZXRhICYmICFnZW5lcmFsRXJyb3InICNyZXNvdXJjZUZvcm09XCJuZ0Zvcm1cIiBbbmFtZV09J3Jlc291cmNlLnJlc291cmNlVHlwZScgKG5nU3VibWl0KT0nc3VibWl0KHJlc291cmNlRm9ybSknIG5vdmFsaWRhdGU+XG5cdDxkaXYgY2xhc3M9J2Zvcm0tY29udGVudCc+XG5cdFx0PGRpdiBbbmdDbGFzc109XCJ7ICdWbHQtY2FsbG91dC0tZGlzbWlzc2VkJzogIWZvcm1FcnJvcnMgfVwiIGNsYXNzPVwiVmx0LWNhbGxvdXQgVmx0LWNhbGxvdXQtLWJhbm5lciBWbHQtY2FsbG91dC0tY3JpdGljYWxcIj5cblx0XHRcdDxpPjwvaT5cblx0XHRcdDxkaXYgY2xhc3M9XCJWbHQtY2FsbG91dF9fY29udGVudFwiIHN0eWxlPVwibWFyZ2luLXRvcDogYXV0bztcIj5cblx0XHRcdFx0PHA+VGhlcmUgaXMgYSBwcm9ibGVtIHdpdGggb25lIG9yIG1vcmUgZmllbGRzPC9wPlxuXHRcdFx0XHQ8c21hbGwgc3R5bGU9J2ZvbnQtd2VpZ2h0OiA2MDA7IGZvbnQtc2l6ZTogMS4wZW07JyAqbmdJZj0nZm9ybUVycm9ycyc+e3sgZm9ybUVycm9ycy5tZXNzYWdlIHx8IGZvcm1FcnJvcnMgfX08L3NtYWxsPlxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8YnV0dG9uIHR5cGU9J2J1dHRvbicgY2xhc3M9XCJWbHQtY2FsbG91dF9fZGlzbWlzc1wiIChjbGljayk9J2NsZWFyRm9ybUVycm9ycygpJyBhcmlhLWxhYmVsPVwiRGlzbWlzc1wiPjwvYnV0dG9uPlxuXHRcdDwvZGl2PlxuXHRcdDxkaXYgY2xhc3M9XCJWbHQtY2FyZF9fY29udGVudFwiIHN0eWxlPSdtaW4taGVpZ2h0OiA0MHB4Oyc+XG5cdFx0XHQ8dmdpcC1tZXRhLWxheW91dCAqbmdJZj0nZWRpdCcgW21ldGFdPSdtZXRhLmxheW91dCcgW3Jlc291cmNlXT0nbW9kZWwnIFtwcmV2aWV3XT0nZmFsc2UnIFtpbnRlZ3JhdGlvbl09J21ldGEuaW50ZWdyYXRpb24nIFt0eXBlXT0ncmVzb3VyY2UucmVzb3VyY2VUeXBlJyB0aGVtZT0naW5oZXJpdCc+PC92Z2lwLW1ldGEtbGF5b3V0PlxuXHRcdFx0PHZnaXAtbWV0YS1sYXlvdXQgKm5nSWY9JyFlZGl0JyBbbWV0YV09J21ldGEubGF5b3V0JyBbcmVzb3VyY2VdPSdtb2RlbCcgW3ByZXZpZXddPSd0cnVlJyBbaW50ZWdyYXRpb25dPSdtZXRhLmludGVncmF0aW9uJyBbdHlwZV09J3Jlc291cmNlLnJlc291cmNlVHlwZScgdGhlbWU9J2luaGVyaXQnPjwvdmdpcC1tZXRhLWxheW91dD5cblx0XHQ8L2Rpdj5cblx0PC9kaXY+XG5cdDxkaXYgY2xhc3M9XCJWbHQtY2FyZF9fZm9vdGVyXCI+XG5cdFx0PGJ1dHRvbiBjbGFzcz1cIlZsdC1idG4gVmx0LWJ0bi0tc2Vjb25kYXJ5IFZsdC1idG4tLWFwcCBWbHQtYnRuLS1vdXRsaW5lXCIgdHlwZT0nYnV0dG9uJyBhcmlhLWxhYmVsPSdDYW5jZWwnIChjbGljayk9J2Nsb3NlKCknPlxuXHRcdFx0e3sgZWRpdCA/ICdDYW5jZWwnIDogJ0Nsb3NlJyB9fVxuXHRcdDwvYnV0dG9uPlxuXHRcdDxidXR0b24gKm5nSWY9J2VkaXQnIGNsYXNzPVwiVmx0LWJ0biBWbHQtYnRuLS1hcHBcIiBbbmdDbGFzc109XCJ7ICdWbHQtYnRuLS1wcmltYXJ5JzogaXNQZXJzaXN0ZW50LCAnVmx0LWJ0bi0tc2Vjb25kYXJ5JzogIWlzUGVyc2lzdGVudCB9XCIgdHlwZT0nc3VibWl0Jz5cblx0XHRcdHt7IChyZXNvdXJjZSAmJiByZXNvdXJjZS5leHRlcm5hbElkKSA/ICdVcGRhdGUnIDogJ0NyZWF0ZScgfX1cblx0XHQ8L2J1dHRvbj5cblx0XHQ8YnV0dG9uIChjbGljayk9J2VkaXRNb2RlKCknICpuZ0lmPSchZWRpdCAmJiBpc0VkaXRhYmxlJyBbZGlzYWJsZWRdPSchaXNFZGl0YWJsZScgY2xhc3M9XCJWbHQtYnRuIFZsdC1idG4tLWFwcCBWbHQtYnRuLS1wcmltYXJ5XCIgdHlwZT0nYnV0dG9uJyBhcmlhLWxhYmVsPSdFZGl0Jz5cblx0XHRcdEVkaXRcblx0XHQ8L2J1dHRvbj5cblx0XHQ8ZGl2IHN0eWxlPSdtYXJnaW4tcmlnaHQ6IDhweDsgZmxleDogMTsnPlxuXHRcdFx0PGRpdiAqbmdJZj0nbWV0YS5hdmFpbGFibGVMYXlvdXRzICYmIG1ldGEuYXZhaWxhYmxlTGF5b3V0cy5sZW5ndGgnIGNsYXNzPVwiVmx0LWZvcm1fX2VsZW1lbnQgVmx0LWZvcm1fX2VsZW1lbnQtLWJpZ1wiIHN0eWxlPSdwYWRkaW5nOiAwOyBtYXJnaW46IC04cHggLTE4cHggLThweCAwOyc+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJWbHQtc2VsZWN0XCI+XG5cdFx0XHRcdFx0PGxhYmVsIHN0eWxlPSdhbGw6IGluaGVyaXQ7Jz5cblx0XHRcdFx0XHRcdDxzZWxlY3Qgc3R5bGU9J2JvcmRlcjogMDsgbWFyZ2luLXRvcDogM3B4OyBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsnIChjaGFuZ2UpPSdjaGFuZ2VMYXlvdXQoKScgWyhuZ01vZGVsKV09J2N1cnJlbnRMYXlvdXRJZCcgW25nTW9kZWxPcHRpb25zXT0neyBzdGFuZGFsb25lOiB0cnVlIH0nIFtkaXNhYmxlZF09J2lzUGVyc2lzdGVudCc+XG5cdFx0XHRcdFx0XHRcdDxvcHRpb24gc2VsZWN0ZWQgZGlzYWJsZWQ+U2VsZWN0IGxheW91dDwvb3B0aW9uPlxuXHRcdFx0XHRcdFx0XHQ8b3B0aW9uICpuZ0Zvcj0nbGV0IGxheW91dCBvZiBtZXRhLmF2YWlsYWJsZUxheW91dHMnIFtuZ1ZhbHVlXT0nbGF5b3V0LmlkJz57e2xheW91dC5uYW1lfX08L29wdGlvbj5cblx0XHRcdFx0XHRcdDwvc2VsZWN0PlxuXHRcdFx0XHRcdFx0PGxhYmVsPkxheW91dDwvbGFiZWw+XG5cdFx0XHRcdFx0PC9sYWJlbD5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0XHQ8ZGl2IGNsYXNzPVwiVmx0LWRyb3Bkb3duIHJlc291cmNlLW1lbnVcIiBbbmdDbGFzc109XCJ7ICdWbHQtZHJvcGRvd24tLWV4cGFuZGVkJzogcmVzb3VyY2VNZW51VmlzaWJsZSB9XCIgc3R5bGU9J21hcmdpbi1sZWZ0OiAycHg7Jz5cblx0XHRcdDxkaXYgY2xhc3M9XCJWbHQtZHJvcGRvd25fX3BhbmVsXCIgc3R5bGU9J2JvdHRvbTogNDBweDsgcmlnaHQ6IC00cHg7IHRvcDogaW5pdGlhbDsnPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwiVmx0LWRyb3Bkb3duX19wYW5lbF9fY29udGVudFwiPlxuXHRcdFx0XHRcdDxhIGNsYXNzPVwiVmx0LWRyb3Bkb3duX19saW5rXCIgKGNsaWNrKT0nbG9hZE1ldGFkYXRhKGN1cnJlbnRMYXlvdXRJZCwgdHJ1ZSknPlxuXHRcdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdFx0PHN2ZyBjbGFzcz0nVmx0LWljb24gVmx0LWljb24tLXNtYWxsZXInPjx1c2UgeGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1yZWZyZXNoXCIvPjwvc3ZnPiZuYnNwOyZuYnNwO1JlZnJlc2ggbWV0YWRhdGFcblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvYT5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDxkaXYgY2xhc3M9XCJWbHQtZHJvcGRvd25fX3RyaWdnZXJcIj5cblx0XHRcdFx0PGJ1dHRvbiB0eXBlPSdidXR0b24nIChjbGljayk9J29wZW5SZXNvdXJjZU1lbnUoKScgY2xhc3M9XCJWbHQtYnRuIFZsdC1idG4tLWxpbmtcIiBhcmlhLWxhYmVsPSdSZXNvdXJjZSBtZW51Jz5cblx0XHRcdFx0XHQ8c3ZnIGNsYXNzPSdWbHQtaWNvbiBWbHQtaWNvbi0tc21hbGwnIHN0eWxlPSdtYXJnaW46IDA7Jz48dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tbW9yZS12LW5lZ2F0aXZlXCIvPjwvc3ZnPlxuXHRcdFx0XHQ8L2J1dHRvbj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PlxuXHQ8L2Rpdj5cbjwvZm9ybT5cbjxkaXYgY2xhc3M9J2J1c3ktbWFzaycgW25nQ2xhc3NdPVwieyBhY3RpdmU6IGJ1c3kgfVwiPlxuXHQ8ZGl2IHN0eWxlPSdoZWlnaHQ6IDEwMCU7IGRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOyc+XG5cdFx0PGRpdiBjbGFzcz1cIlZsdC1zcGlubmVyXCI+PC9kaXY+XG5cdDwvZGl2PlxuPC9kaXY+IiwiPGRpdiBjbGFzcz1cIlZsdC1jYXJkIFZsdC1iZy13aGl0ZVwiPlxuXHQ8ZGl2IGNsYXNzPVwiVmx0LWNhcmRfX2NvbnRlbnQgVmx0LWJ0bi1vbi1ob3ZlclwiPlxuXHRcdDxoNT57e21vZGVsLlN1YmplY3QgfHwgbW9kZWwuc3ViamVjdCB8fCBtb2RlbC5zdW1tYXJ5IHx8IG1vZGVsLnRpdGxlIHx8IG1vZGVsLkNhc2VOdW1iZXIgfHwgbW9kZWwuY29tbWVudCB8fCBtb2RlbC5ib2R5IHx8IG1vZGVsLm5hbWUgfHwgbW9kZWwudG9waWMgfHwgJy4uLicgfX08L2g1PlxuXHRcdDxkaXYgc3R5bGU9J2ZvbnQtc2l6ZTogMTJweDsgbGluZS1oZWlnaHQ6IDE2cHg7Jz5cblx0XHRcdENyZWF0ZWQ6IDxzcGFuIGNsYXNzPSdWbHQtYmxhY2snPnt7bW9kZWwuX3ZnaXMuY3JlYXRlZERhdGUgfCBkYXRlOidtZWRpdW1EYXRlJ319PC9zcGFuPlxuXHRcdFx0RWRpdGVkOiA8c3BhbiBjbGFzcz0nVmx0LWJsYWNrJz57e21vZGVsLl92Z2lzLm1vZGlmaWVkRGF0ZSB8IGRhdGU6J21lZGl1bSd9fTwvc3Bhbj5cblx0XHQ8L2Rpdj5cblx0XHQ8ZGl2IGNsYXNzPVwiVmx0LWJhZGdlIFZsdC1iYWRnZS0tYXBwIFZsdC1iYWRnZS0tcHVycGxlIFZsdC1iYWRnZS0tc21hbGxcIj57e21vZGVsLl92Z2lzLnJlc291cmNlVHlwZX19PC9kaXY+XG5cdFx0PGRpdiBjbGFzcz1cIlZsdC1idG4tZ3JvdXAgVmx0LWJ0bi1ncm91cC0taG92ZXJcIj5cblx0XHRcdDxhICpuZ0lmPSdtb2RlbC5fdmdpcy5leHRlcm5hbExpbmsnIGF0dHIuaHJlZj0ne3ttb2RlbC5fdmdpcy5leHRlcm5hbExpbmt9fScgdGFyZ2V0PSdfYmxhbmsnIHJlbD0nbm9vcGVuZXInIGNsYXNzPVwiVmx0LWJ0biBWbHQtYnRuLS10ZXJ0aWFyeSBWbHQtYnRuLS1pY29uXCIgYXJpYS1sYWJlbD0nT3BlbiBleHRlcm5hbCc+PHN2ZyBzdHlsZT0nbWFyZ2luLWxlZnQ6IDA7IG1hcmdpbi1yaWdodDogMDsnPjx1c2UgeGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1vcGVuXCIvPjwvc3ZnPjwvYT5cblx0XHRcdDxidXR0b24gdHlwZT0nYnV0dG9uJyAoY2xpY2spPSdvcGVuKHJlc291cmNlLCBtb2RlbCknIGNsYXNzPVwiVmx0LWJ0biBWbHQtYnRuLS10ZXJ0aWFyeSBWbHQtYnRuLS1pY29uXCIgYXJpYS1sYWJlbD0nRWRpdCc+PHN2ZyBzdHlsZT0nbWFyZ2luLWxlZnQ6IDA7IG1hcmdpbi1yaWdodDogMDsnPjx1c2UgeGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1lZGl0XCIvPjwvc3ZnPjwvYnV0dG9uPlxuXHRcdDwvZGl2PlxuXHQ8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
2176
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXRhLXVpL3NyYy9saWIvZmllbGQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXRhLXVpL3NyYy9saWIvcmVmRGlhbG9nL3ZpZXcuaHRtbCIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL21ldGEtdWkvc3JjL2xpYi9maWVsZENvbXBvc2l0ZS92aWV3Lmh0bWwiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXRhLXVpL3NyYy9saWIvZmllbGRTZWxlY3Qvdmlldy5odG1sIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWV0YS11aS9zcmMvbGliL2ZpZWxkUmVmZXJlbmNlL3ZpZXcuaHRtbCIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL21ldGEtdWkvc3JjL2xpYi9maWVsZExpc3Qvdmlldy5odG1sIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWV0YS11aS9zcmMvbGliL2xheW91dC92aWV3Lmh0bWwiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXRhLXVpL3NyYy9saWIvcmVzb3VyY2Uvdmlldy5odG1sIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWV0YS11aS9zcmMvbGliL3Jlc291cmNlQ2FyZC92aWV3Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUMxQyxTQUFTLEVBQWdDLFlBQVksRUFDMUMsTUFBTSxlQUFlLENBQUM7QUFDbkMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBUXBFLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FB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RWlELFlBQVk7c0JBQW5FLFNBQVM7dUJBQUMseUJBQXlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIEBBdXRob3I6IEFsZXhhbmRlci5WYW5nZWxvdkB2b25hZ2UuY29tIFxuICogQERhdGU6IDIwMTktMDktMTkgMTc6MzU6MTkgXG4gKiBATGFzdCBNb2RpZmllZCBieTogQWxleGFuZGVyLlZhbmdlbG92QHZvbmFnZS5jb21cbiAqIEBMYXN0IE1vZGlmaWVkIHRpbWU6IDIwMjAtMDQtMTggMTg6MTE6NDJcbiAqL1xuXG5pbXBvcnQgeyBEaXJlY3RpdmUsIENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgT25Jbml0LCBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIFxuICBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgQ2hhbmdlRGV0ZWN0b3JSZWYsIEFmdGVyQ29udGVudENoZWNrZWQsXG4gIE9uQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbENvbnRhaW5lciwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuLy8gaW1wb3J0IHsgTWV0YVJlZkRpYWxvZyB9IGZyb20gJy4vcmVmRGlhbG9nJztcbmltcG9ydCB7IE1ldGFSZWZlcmVuY2VTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9tZXRhUmVmZXJlbmNlJztcbmltcG9ydCB7IE1ldGFSZXNvdXJjZVNlcnZpY2UsIElNZXRhUmVzb3VyY2VDb25maWcgfSBmcm9tICcuL3NlcnZpY2VzL21ldGFSZXNvdXJjZSc7XG5pbXBvcnQgeyBNZXRhTXNnU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvbWV0YU1zZyc7XG5pbXBvcnQgeyBNZXRhQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL21ldGFDb250ZXh0JztcbmltcG9ydCB7IE1ldGFUcmFja2VyU2VydmljZSwgSU1ldGFUcmFja2VyRXZlbnQgfSBmcm9tICcuL3NlcnZpY2VzL21ldGFUcmFja2VyJztcbmltcG9ydCB7IG1ldGFEYXJrLCBtZXRhTGlnaHQgfSBmcm9tICcuL2NvbW1vbi91dGlscy9jb2xvclRoZW1lcyc7XG5pbXBvcnQgeyBtZXRhTm9ybWFsaXplciB9IGZyb20gJy4vY29tbW9uL21ldGFOb3JtYWxpemVyJztcbmltcG9ydCB7IHRlbXBsYXRlQnVpbGRlciB9IGZyb20gJy4vY29tbW9uL3V0aWxzL3RlbXBsYXRlQnVpbGRlcic7XG5cbmltcG9ydCB7IEZpZWxkQWJzdHJhY3QgfSBmcm9tICcuL2ZpZWxkQWJzdHJhY3QnO1xuaW1wb3J0IHsgRmllbGRVbmtub3duIH0gZnJvbSAnLi9maWVsZFVua25vd24nO1xuaW1wb3J0IHsgRmllbGRUZXh0IH0gZnJvbSAnLi9maWVsZFRleHQnO1xuaW1wb3J0IHsgRmllbGRJbnB1dCB9IGZyb20gJy4vZmllbGRJbnB1dCc7XG4vLyBpbXBvcnQgeyBGaWVsZFNlbGVjdCB9IGZyb20gJy4vZmllbGRTZWxlY3QnO1xuLy8gaW1wb3J0IHsgRmllbGRSZWZlcmVuY2UgfSBmcm9tICcuL2ZpZWxkUmVmZXJlbmNlJztcbi8vIGltcG9ydCB7IEZpZWxkQ29tcG9zaXRlIH0gZnJvbSAnLi9maWVsZENvbXBvc2l0ZSc7XG5pbXBvcnQgeyBGaWVsZEJvb2xlYW4gfSBmcm9tICcuL2ZpZWxkQm9vbGVhbic7XG5pbXBvcnQgeyBGaWVsZFJhZGlvIH0gZnJvbSAnLi9maWVsZFJhZGlvJztcbi8vIGltcG9ydCB7IEZpZWxkTGlzdCB9IGZyb20gJy4vZmllbGRMaXN0JztcbmltcG9ydCB7IEZpZWxkUmljaHRleHQgfSBmcm9tICcuL2ZpZWxkUmljaHRleHQnO1xuaW1wb3J0IHsgRmllbGREYXRldGltZSB9IGZyb20gJy4vZmllbGREYXRldGltZSc7XG5cblxuLy8vLyBSRUYgRElBTE9HXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6ICcuL3JlZkRpYWxvZy92aWV3Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yZWZEaWFsb2cvc3R5bGUuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIE1ldGFSZWZEaWFsb2cgaW1wbGVtZW50cyBPbkluaXQge1xuICBtb2RhbDogSFRNTEVsZW1lbnQ7XG4gIG9uQ29tcGxldGU6IChyZXN1bHQ/KSA9PiB1bmRlZmluZWQ7XG4gIGZ1bGxSZXNvdXJjZTogYW55O1xuICByZXNvdXJjZXM6IGFueSA9IHt9O1xuICBtb2RlbHM6IGFueSA9IHt9O1xuICByZWZlcmVuY2U6IGFueTtcbiAgY3VycmVudFJlc291cmNlOiBzdHJpbmc7XG4gIHNlcnZpY2VzOiBhbnkgPSB7fTtcbiAgaW50ZWdyYXRpb25Db2RlOiBzdHJpbmc7XG4gIHJlc291cmNlOiBhbnk7XG4gIG1ldGFSZXNvdXJjZTogTWV0YVJlc291cmNlU2VydmljZTtcbiAgaW50ZWdyYXRpb25JY29uOiBzdHJpbmc7XG4gIHByZWZlclJlc291cmNlVHlwZTogc3RyaW5nO1xuICB0aGVtZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWZcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGxldCByZWZlcmVuY2VzID0gKHRoaXMucmVmZXJlbmNlIGluc3RhbmNlb2YgQXJyYXkpID8gdGhpcy5yZWZlcmVuY2UgOiBbdGhpcy5yZWZlcmVuY2VdO1xuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVyc2NvcmUtZGFuZ2xlICovXG4gICAgaWYgKHRoaXMucmVzb3VyY2UgJiYgdGhpcy5yZXNvdXJjZS5fdmdpcykge1xuICAgICAgdGhpcy5mdWxsUmVzb3VyY2UgPSB0aGlzLnJlc291cmNlO1xuICAgICAgdGhpcy5yZXNvdXJjZSA9IHRoaXMucmVzb3VyY2UuX3ZnaXM7XG4gICAgfVxuICAgIC8qIGVzbGludC1lbmFibGUgbm8tdW5kZXJzY29yZS1kYW5nbGUgKi9cbiAgICBpZiAodGhpcy5yZXNvdXJjZSkge1xuICAgICAgcmVmZXJlbmNlcyA9IHJlZmVyZW5jZXMuZmlsdGVyKChyKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc1R5cGUgPSByLm5hbWUgfHwgci5yZXNvdXJjZVR5cGUgfHwgJyc7XG4gICAgICAgIC8vIGNvbXBhcmluZyBjYXNlIGluc2Vuc2l0aXZlLCBiZWNhdXNlIG9mIFplbmRlc2sgY29tbWVudCB2cyBDb21tZW50XG4gICAgICAgIHJldHVybiAocmVzVHlwZS5pZCB8fCByZXNUeXBlIHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSAodGhpcy5yZXNvdXJjZS5yZXNvdXJjZVR5cGUgfHwgdGhpcy5yZXNvdXJjZS50eXBlIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCByZWYgb2YgcmVmZXJlbmNlcykge1xuICAgICAgaWYgKCFyZWYubmFtZSkge1xuICAgICAgICByZWYubmFtZSA9IHJlZi5yZXNvdXJjZVR5cGU7IC8vIHdoZW4gdGhlIHJlc291cmNlIGNvbWVzIGZyb20gcmVzb3VyY2VzIEFQSSwgbm90IGZyb20gbWV0YWRhdGFcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5jdXJyZW50UmVzb3VyY2UpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UmVzb3VyY2UgPSByZWYubmFtZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWYubmFtZSA9PT0gdGhpcy5wcmVmZXJSZXNvdXJjZVR5cGUpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UmVzb3VyY2UgPSB0aGlzLnByZWZlclJlc291cmNlVHlwZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJzOiBhbnkgPSB7XG4gICAgICAgIGludGVncmF0aW9uQ29kZTogdGhpcy5pbnRlZ3JhdGlvbkNvZGUsXG4gICAgICAgIHJlc291cmNlVHlwZTogcmVmLnJlc291cmNlVHlwZSB8fCByZWYubmFtZSxcbiAgICAgICAgcmVmXG4gICAgICB9O1xuICAgICAgaWYgKHRoaXMucmVzb3VyY2UpIHtcbiAgICAgICAgcnMuZXh0ZXJuYWxJZCA9IHRoaXMucmVzb3VyY2UuaWQgfHwgdGhpcy5yZXNvdXJjZS5leHRlcm5hbElkO1xuICAgICAgICBpZiAodGhpcy5yZXNvdXJjZS5ldmVudElkKSB7XG4gICAgICAgICAgcnMuZXZlbnRJZCA9IHRoaXMucmVzb3VyY2UuZXZlbnRJZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5mdWxsUmVzb3VyY2UpIHtcbiAgICAgICAgICBycy5hY3Rpdml0eSA9IHRoaXMuZnVsbFJlc291cmNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJlc291cmNlLmxheW91dElkKSB7XG4gICAgICAgICAgcnMubGF5b3V0SWQgPSB0aGlzLnJlc291cmNlLmxheW91dElkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBycy5wYXJlbnQgPSByZWYucGFyZW50O1xuICAgICAgdGhpcy5yZXNvdXJjZXNbcmVmLm5hbWVdID0gcnM7XG4gICAgICB0aGlzLm1vZGVsc1tyZWYubmFtZV0gPSB7fTtcbiAgICAgIGlmICh0aGlzLnJlc291cmNlKSB7XG4gICAgICAgIHRoaXMubW9kZWxzW3JlZi5uYW1lXS5fdmdpcyA9IHRoaXMucmVzb3VyY2U7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZXJzY29yZS1kYW5nbGVcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm1vZGFsID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNoaWxkTm9kZXNbMF07XG4gICAgdGhpcy5tb2RhbC5jbGFzc0xpc3QucmVtb3ZlKCdWbHQtbW9kYWwtLW91dCcpO1xuICAgIHRoaXMubW9kYWwuY2xhc3NMaXN0LmFkZCgnVmx0LW1vZGFsX3Zpc2libGUnKTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5rZXlFdmVudExpc3RlbmVyKTtcblxuICAgIGlmICh0aGlzLmludGVncmF0aW9uQ29kZSA9PT0gJ21vY2tzJykge1xuICAgICAgdGhpcy5pbnRlZ3JhdGlvbkljb24gPSAnQnJhbmQtaWNvbi12b25hZ2UnO1xuICAgIH0gZWxzZSB7XG4gICAgICBzd2l0Y2ggKHRoaXMuaW50ZWdyYXRpb25Db2RlLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgY2FzZSAnb2ZmaWNlMzY1JzpcbiAgICAgICAgICB0aGlzLmludGVncmF0aW9uSWNvbiA9ICdCcmFuZC1pY29uLW9mZmljZS1jb2xvcic7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3N1Z2FyJzpcbiAgICAgICAgICB0aGlzLmludGVncmF0aW9uSWNvbiA9ICdCcmFuZC1pY29uLXN1Z2FyY3JtLWNvbG9yJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbXNkeW5hbWljcyc6XG4gICAgICAgICAgdGhpcy5pbnRlZ3JhdGlvbkljb24gPSAnQnJhbmQtaWNvbi1keW5hbWljcy1jb2xvcic7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhpcy5pbnRlZ3JhdGlvbkljb24gPSBgQnJhbmQtaWNvbi0keyh0aGlzLmludGVncmF0aW9uQ29kZSB8fCAnJykudG9Mb3dlckNhc2UoKX0tY29sb3JgO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuYXBwbHlUaGVtZSgpO1xuICB9XG5cbiAgZ2V0IGlzRWRpdGFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2VzW3RoaXMuY3VycmVudFJlc291cmNlXS5tZXRhLmxheW91dC5lZGl0YWJsZSAhPT0gZmFsc2U7XG4gIH1cblxuICBnZXQgaXNQZXJzaXN0ZW50KCkge1xuICAgIHJldHVybiB0aGlzLnJlc291cmNlICYmICh0aGlzLnJlc291cmNlLmV4dGVybmFsSWQgfHwgdGhpcy5yZXNvdXJjZS5pZCk7XG4gIH1cblxuICBjbG9zZSgpIHtcbiAgICB0aGlzLm1vZGFsLmNsYXNzTGlzdC5yZW1vdmUoJ1ZsdC1tb2RhbF92aXNpYmxlJyk7XG4gICAgdGhpcy5tb2RhbC5jbGFzc0xpc3QuYWRkKCdWbHQtbW9kYWwtLW91dCcpO1xuICB9XG5cbiAgZGlzbWlzcygpIHtcbiAgICB0aGlzLmNsb3NlKCk7XG4gICAgdGhpcy5vbkNvbXBsZXRlKG51bGwpO1xuICB9XG5cbiAgb25SZXNvdXJjZURvbmUocmVzdWx0KSB7XG4gICAgdGhpcy5jbG9zZSgpO1xuICAgIHRoaXMub25Db21wbGV0ZShyZXN1bHQpO1xuICB9XG5cbiAgc2VsZWN0UmVzb3VyY2UocmVzb3VyY2UpIHtcbiAgICB0aGlzLmN1cnJlbnRSZXNvdXJjZSA9IHJlc291cmNlO1xuICB9XG5cbiAga2VlcE9yZGVyID0gKGEsIGIpID0+IGE7XG5cbiAgcHJpdmF0ZSBrZXlFdmVudExpc3RlbmVyID0gKGV2ZW50KSA9PiB7XG4gICAgaWYgKGV2ZW50ICYmIGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmtleUV2ZW50TGlzdGVuZXIpO1xuICAgICAgdGhpcy5kaXNtaXNzKCk7XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgYXBwbHlUaGVtZSgpIHtcbiAgICBjb25zdCBtZXRhVGhlbWUgPSB0aGlzLnRoZW1lID09PSAnZGFyaycgPyBtZXRhRGFyayA6IG1ldGFMaWdodDtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhtZXRhVGhlbWUucHJvcGVydGllcykpIHtcbiAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShrZXksIG1ldGFUaGVtZS5wcm9wZXJ0aWVzW2tleV0pO1xuICAgIH1cbiAgfVxufVxuXG4vLy8vIENPTVBPU0lURSBGSUVMRFxuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlVXJsOiAnLi9maWVsZENvbXBvc2l0ZS92aWV3Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEZpZWxkQ29tcG9zaXRlIGV4dGVuZHMgRmllbGRBYnN0cmFjdCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIG1ldGE6IGFueTtcblxuICBuZ09uSW5pdCgpIHtcbiAgICAvLyBzdXBlci5uZ09uSW5pdCgpXG4gICAgaWYgKHRoaXMuaXNSb3cpIHtcbiAgICAgIGZvciAoY29uc3QgZiBvZiB0aGlzLm1ldGEuZmllbGRzKSB7XG4gICAgICAgIGlmIChmLnR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgICAgIGYudHlwZSA9ICdzdHJpbmcnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IGlzUm93KCkge1xuICAgIHJldHVybiB0aGlzLm1ldGEuc3VidHlwZSAhPT0gJ2NvbHVtbic7XG4gIH1cblxuICBnZXQgZmllbGRzKCkge1xuICAgIHJldHVybiAodGhpcy5tZXRhLmZpZWxkcyB8fCBbXSkubWFwKChmKSA9PiB7XG4gICAgICBpZiAoZi50eXBlID09PSAndGV4dGFyZWEnKSB7IC8vIG5vIHRleHRhcmVhcyBpbnNpZGUgY29tcG9zaXRlICh1c2Ugc3RyaW5nKVxuICAgICAgICBkZWxldGUgZi50eXBlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGY7XG4gICAgfSk7XG4gIH1cbn1cblxuLy8vLyBTRUxFQ1QgRklFTERcbkBDb21wb25lbnQoe1xuICAgIHRlbXBsYXRlVXJsOiAnLi9maWVsZFNlbGVjdC92aWV3Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2ZpZWxkU2VsZWN0L3N0eWxlLnNjc3MnXSxcbiAgICB2aWV3UHJvdmlkZXJzOiBbeyBwcm92aWRlOiBDb250cm9sQ29udGFpbmVyLCB1c2VFeGlzdGluZzogTmdGb3JtIH1dXG59KVxuZXhwb3J0IGNsYXNzIEZpZWxkU2VsZWN0IGV4dGVuZHMgRmllbGRBYnN0cmFjdCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIG11bHRpcGxlOiBib29sZWFuO1xuICBpbnB1dDogSFRNTElucHV0RWxlbWVudDtcbiAgZHJvcGRvd246IEhUTUxFbGVtZW50O1xuICBkcm9wZG93blNjcm9sbENvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG4gIHNob3dUZXh0OiBzdHJpbmc7XG4gIGFjdGl2ZVN1Z2dlc3Rpb25JbmRleDogbnVtYmVyO1xuICB2YWx1ZTogYW55O1xuICBpc0NyZWF0YWJsZSA9IGZhbHNlO1xuICBhc3luY09wdGlvbnM6IEFycmF5PGFueT47XG4gIHNlYXJjaGluZzogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBcbiAgICBwcml2YXRlIHJlZmVyZW5jZVNlcnZpY2U6IE1ldGFSZWZlcmVuY2VTZXJ2aWNlLCBcbiAgICBwcml2YXRlIG1ldGFSZXNvdXJjZTogTWV0YVJlc291cmNlU2VydmljZVxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG4gIFxuICBzdGF0aWMgc2V0dXAoaW5zdGFuY2UsIHBhcmVudCwgbWV0YSkge1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgLy8gY29uc29sZS5sb2coJ3BhcmVudCcsIHRoaXMucGFyZW50KTtcbiAgICB0aGlzLnZhbGlkYXRpb25BdHRyaWJ1dGVzID0gWydyZXF1aXJlZCddO1xuICAgIHRoaXMubXVsdGlwbGUgPSAodGhpcy5tZXRhLnR5cGUgPT09ICdtdWx0aXBpY2tsaXN0JykgfHwgdGhpcy5tZXRhLm11bHRpcGxlO1xuICAgIGNvbnN0IG9yaWdWYWx1ZSA9IHRoaXMucGFyZW50W3RoaXMubWV0YS5uYW1lXTtcbiAgICBpZiAodGhpcy5tZXRhLnJlZmVyZW5jZSkge1xuICAgICAgdGhpcy5pc0NyZWF0YWJsZSA9IHRydWU7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLnBhcmVudCwgdGhpcy5tZXRhLm5hbWUsIHtcbiAgICAgIHNldDogKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlIGluc3RhbmNlb2YgQXJyYXkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IFt2YWx1ZV07XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghdmFsdWUgfHwgdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSAodmFsdWUgaW5zdGFuY2VvZiBBcnJheSkgPyB2YWx1ZSA6ICh2YWx1ZSB8fCAnJykuc3BsaXQoJzsnKTsgLy8gc2hvdWxkIG5vdCBoYW5kbGUgaW5jb3JyZWN0IHZhbHVlc1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5tb2RlbCA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCB2IG9mIHZhbHVlcykge1xuICAgICAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgbyBvZiB0aGlzLm9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgIGlmICgodi5pZCB8fCB2KSA9PT0gKG8uaWQgfHwgby52YWx1ZSB8fCBvLm5hbWUgfHwgMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5wdXNoKG8pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlLnB1c2godik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLm1vZGVsLmxlbmd0aCAmJiAhdGhpcy5pc1BlcnNpc3RlZFBhcmVudCkge1xuICAgICAgICAgICAgICBkZWxldGUgdGhpcy5tb2RlbDtcbiAgICAgICAgICAgICAgZGVsZXRlIHRoaXMudmFsdWU7XG4gICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnNob3dUZXh0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5zaG93VGV4dCA9ICh0aGlzLm1vZGVsIHx8IFtdKS5tYXAoKG8pID0+IG8ubGFiZWwgfHwgbykuam9pbignLCAnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG8gb2YgdGhpcy5tZXRhLm9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgaWYgKCh2YWx1ZS5pZCB8fCB2YWx1ZSkgPT09IChvLmlkIHx8IG8udmFsdWUgfHwgby5uYW1lIHx8IG8pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbCA9IG87XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubW9kZWxUb1ZhbHVlKG8sIHRoaXMubWV0YS52YWx1ZVR5cGUpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd1RleHQgPSBvLmxhYmVsIHx8IG87XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMubW9kZWw7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy52YWx1ZTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnNob3dUZXh0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uU3ViamVjdENoYW5nZSh0aGlzLm1vZGVsKTtcbiAgICAgICAgdGhpcy5tZXRhLiRvcHRpb25hbCA9IHRoaXMuaXNPcHRpb25hbDtcbiAgICAgIH0sXG4gICAgICBnZXQ6ICgpID0+IHRoaXMudmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0aGlzLnNlbmRUb1NlcnZlcixcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFxuICAgIGlmIChvcmlnVmFsdWUpIHtcbiAgICAgIHRoaXMucGFyZW50W3RoaXMubWV0YS5uYW1lXSA9IG9yaWdWYWx1ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kZWZhdWx0ICYmICF0aGlzLm1vZGVsKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5wYXJlbnRbdGhpcy5tZXRhLm5hbWVdID0gdGhpcy5kZWZhdWx0LmlkIHx8IHRoaXMuZGVmYXVsdDtcbiAgICAgIH0sIDApO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YodGhpcy5tZXRhLmVuYWJsZWQpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2YodGhpcy5tZXRhLmVuYWJsZWQpID09PSAnb2JqZWN0Jykge1xuICAgICAgICBmb3IgKGNvbnN0IHBhciBvZiBPYmplY3Qua2V5cyh0aGlzLm1ldGEuZW5hYmxlZCkpIHtcbiAgICAgICAgICBjb25zdCBwYXJWYWx1ZSA9IHRoaXMucGFyZW50W3Bhcl07XG4gICAgICAgICAgaWYgKHBhclZhbHVlKSB7IFxuICAgICAgICAgICAgLy8gbG9naWMgZm9yIHNwZWNpZmljIHZhbHVlcywgdGhpcyB3b3JrcyBvbmx5IGZvciB0cnVlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubG9naWNhbERpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5maWx0ZXJPcHRpb25zKCk7XG4gICAgICAgICAgdGhpcy5wYXJlbnRDaGFuZ2VTdWJqZWN0LnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5oYXNPd25Qcm9wZXJ0eShwYXIpKSB7XG4gICAgICAgICAgICAgIHRoaXMubG9naWNhbERpc2FibGVkID0gIXZhbHVlW3Bhcl07XG4gICAgICAgICAgICAgIGlmICh0aGlzLmxvZ2ljYWxEaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlck9wdGlvbnMoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubWV0YS5zZWFyY2gpIHtcbiAgICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IHRoaXMubWV0YS5zZWFyY2gucGFyYW1zO1xuICAgICAgaWYgKHNlYXJjaFBhcmFtcykge1xuICAgICAgICBmb3IgKGNvbnN0IHBhciBvZiBPYmplY3Qua2V5cyhzZWFyY2hQYXJhbXMpKSB7XG4gICAgICAgICAgY29uc3QgcGFyVmFsdWUgPSB0aGlzLnBhcmVudFtzZWFyY2hQYXJhbXNbcGFyXV07XG4gICAgICAgICAgaWYgKHBhclZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJhbXMgPSB7fTtcbiAgICAgICAgICAgIHBhcmFtc1twYXJdID0gcGFyVmFsdWU7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaE9wdGlvbnMocGFyYW1zKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5wYXJlbnRDaGFuZ2VTdWJqZWN0LnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5oYXNPd25Qcm9wZXJ0eShzZWFyY2hQYXJhbXNbcGFyXSkpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWFyY2hPcHRpb25zKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uQWN0aXZhdGVkKGV2KSB7XG4gICAgLy8gZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAvLyBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmlucHV0ID0gZXYuc3JjRWxlbWVudDtcbiAgICBpZiAoIXRoaXMuZHJvcGRvd24pIHtcbiAgICAgIHRoaXMuZHJvcGRvd24gPSBldi5zcmNFbGVtZW50LnBhcmVudE5vZGUucGFyZW50Tm9kZS5wYXJlbnROb2RlO1xuICAgIH1cbiAgICB0aGlzLnNob3dEcm9wZG93bigpO1xuICB9XG5cbiAgb25CbHVyKGV2KSB7XG4gICAgbGV0IGludGVybmFsQ29udHJvbCA9IGZhbHNlO1xuICAgIGlmIChldi5yZWxhdGVkVGFyZ2V0KSB7XG4gICAgICBpZiAoIXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2LnJlbGF0ZWRUYXJnZXQpKSB7XG4gICAgICAgIHRoaXMuZGlzbWlzc0Ryb3Bkb3duKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbnRlcm5hbENvbnRyb2wgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5rZXlMaXN0ZW5lckFjdGl2ZSAmJiAhaW50ZXJuYWxDb250cm9sKSB7XG4gICAgICB0aGlzLmlucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmtleWRvd24pO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5rZXlMaXN0ZW5lckFjdGl2ZSkge1xuICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5jbGlja291dCk7XG4gICAgICAgIH1cbiAgICAgIH0sIDQwMCk7XG4gICAgICBkZWxldGUgdGhpcy5rZXlMaXN0ZW5lckFjdGl2ZTtcbiAgICB9XG4gICAgdGhpcy5vbkxlYXZlLmVtaXQoZXYpO1xuICB9XG5cbiAgb25PcHRpb25TZWxlY3QoZXYsIG9wdGlvbikge1xuICAgIGlmIChldikge1xuICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgICB0aGlzLmZvY3VzKCk7XG4gICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgIGlmICghdGhpcy5tb2RlbCkge1xuICAgICAgICB0aGlzLm1vZGVsID0gW107XG4gICAgICB9XG4gICAgICBjb25zdCBvcHRpb25JbmRleCA9IHRoaXMubW9kZWwuaW5kZXhPZihvcHRpb24pO1xuICAgICAgaWYgKG9wdGlvbkluZGV4ID09PSAtMSkge1xuICAgICAgICB0aGlzLm1vZGVsLnB1c2gob3B0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubW9kZWwuc3BsaWNlKG9wdGlvbkluZGV4LCAxKTtcbiAgICAgICAgaWYgKCF0aGlzLm1vZGVsLmxlbmd0aCkge1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLm1vZGVsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLm9uTW9kZWxDaGFuZ2UodGhpcy5tb2RlbCk7XG4gICAgICBpZiAodGhpcy5tb2RlbCkge1xuICAgICAgICB0aGlzLnNob3dUZXh0ID0gKHRoaXMubW9kZWwgfHwgW10pLm1hcCgobykgPT4gby5sYWJlbCB8fCBvKS5qb2luKCcsICcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuc2hvd1RleHQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGlzbWlzc0Ryb3Bkb3duKCk7XG4gICAgICB0aGlzLm1vZGVsID0gb3B0aW9uO1xuICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlKG9wdGlvbik7XG4gICAgICB0aGlzLnNob3dUZXh0ID0gb3B0aW9uLmxhYmVsIHx8IChvcHRpb24uaWQgPT09ICcnID8gJy0tZW1wdHktLScgOiBvcHRpb24pO1xuICAgICAgaWYgKHR5cGVvZihvcHRpb24pID09PSAnb2JqZWN0JyAmJiAhb3B0aW9uLmlkICYmIG9wdGlvbi5pZCAhPT0gJycpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuc2hvd1RleHQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2xlYXIoZXY/KSB7XG4gICAgZGVsZXRlIHRoaXMubW9kZWw7XG4gICAgdGhpcy5vbk1vZGVsQ2hhbmdlKHRoaXMubW9kZWwpO1xuICAgIGRlbGV0ZSB0aGlzLnNob3dUZXh0O1xuICAgIGlmIChldikge1xuICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIG9wZW5SZXNvdXJjZShldikge1xuICAgIGNvbnN0IHJlZkRpYWxvZ0ZhY3RvcnkgPSB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShNZXRhUmVmRGlhbG9nKTtcbiAgICB0aGlzLnJlZmVyZW5jZVNlcnZpY2Uub3BlbkRpYWxvZyhcbiAgICAgIHJlZkRpYWxvZ0ZhY3RvcnksIHRoaXMubWV0YVJlc291cmNlLCB0aGlzLmludGVncmF0aW9uQ29kZSwgdGhpcy5tZXRhLnJlZmVyZW5jZSwgbnVsbFxuICAgICkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICBjb25zdCBleGlzdGluZ09wdGlvbnMgPSAodGhpcy5tZXRhLm9wdGlvbnMgfHwgW10pLmZpbmQoKG8pID0+IChvLmlkID09PSByZXN1bHQuaWQgJiYgby50eXBlID09PSByZXN1bHQudHlwZSkpO1xuICAgICAgICBpZiAoZXhpc3RpbmdPcHRpb25zKSB7XG4gICAgICAgICAgZXhpc3RpbmdPcHRpb25zLmxhYmVsID0gcmVzdWx0LmxhYmVsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICghdGhpcy5tZXRhLm9wdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMubWV0YS5vcHRpb25zID0gW107XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMubWV0YS5vcHRpb25zLnVuc2hpZnQocmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uT3B0aW9uU2VsZWN0KGV2LCByZXN1bHQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc2hvd0Ryb3Bkb3duKCkge1xuICAgIHRoaXMuZHJvcGRvd24uY2xhc3NMaXN0LmFkZCgnVmx0LWRyb3Bkb3duLS1leHBhbmRlZCcpO1xuICAgIGlmICghdGhpcy5rZXlMaXN0ZW5lckFjdGl2ZSkge1xuICAgICAgdGhpcy5pbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5rZXlkb3duKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuY2xpY2tvdXQpO1xuICAgICAgfSwgMjAwKTtcbiAgICAgIHRoaXMua2V5TGlzdGVuZXJBY3RpdmUgPSB0cnVlO1xuICAgICAgaWYgKHRoaXMub3B0aW9ucyAmJiB0aGlzLm1vZGVsKSB7XG4gICAgICAgIGZvciAobGV0IHN1Z2dlc3Rpb25JbmRleCA9IDA7IHN1Z2dlc3Rpb25JbmRleCA8IHRoaXMub3B0aW9ucy5sZW5ndGg7IHN1Z2dlc3Rpb25JbmRleCsrKSB7XG4gICAgICAgICAgaWYgKHRoaXMubW9kZWwgPT09IHRoaXMub3B0aW9uc1tzdWdnZXN0aW9uSW5kZXhdKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCA9IHN1Z2dlc3Rpb25JbmRleDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5lbnN1cmVEcm9wZG93bklzVmlzaWJsZSgpO1xuICB9XG5cbiAgZGlzbWlzc0Ryb3Bkb3duKGV2ZW50Pykge1xuICAgIGlmIChldmVudCkge1xuICAgICAgdGhpcy5mb2N1cygpO1xuICAgIH1cbiAgICBpZiAodGhpcy5kcm9wZG93bikge1xuICAgICAgdGhpcy5kcm9wZG93bi5jbGFzc0xpc3QucmVtb3ZlKCdWbHQtZHJvcGRvd24tLWV4cGFuZGVkJyk7XG4gICAgfVxuICAgIGRlbGV0ZSB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleDtcbiAgfVxuXG4gIHByaXZhdGUgZW5zdXJlRHJvcGRvd25Jc1Zpc2libGUoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBob2xkZXIgPSB0aGlzLmRyb3Bkb3duLmNsb3Nlc3QoJy5WbHQtY2FyZF9fY29udGVudCcpO1xuICAgICAgaWYgKGhvbGRlcikge1xuICAgICAgICBjb25zdCBlbCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5WbHQtZHJvcGRvd25fX3BhbmVsJyk7XG4gICAgICAgIGNvbnN0IGVsUmVjdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBob2xkZXJSZWN0ID0gaG9sZGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBpZiAoaG9sZGVyUmVjdC50b3AgKyBob2xkZXJSZWN0LmhlaWdodCA8IGVsUmVjdC50b3AgKyBlbFJlY3QuaGVpZ2h0KSB7XG4gICAgICAgICAgZWwuc2Nyb2xsSW50b1ZpZXcoeyBibG9jazogJ2VuZCcgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCA0MDApO1xuICB9XG5cbiAgcHJpdmF0ZSBlbnN1cmVEcm9wZG93bk9wdGlvbklzVmlzaWJsZSgpIHtcbiAgICBpZiAoIXRoaXMuZHJvcGRvd25TY3JvbGxDb250YWluZXIpIHtcbiAgICAgIHRoaXMuZHJvcGRvd25TY3JvbGxDb250YWluZXIgPSB0aGlzLmRyb3Bkb3duLnF1ZXJ5U2VsZWN0b3IoJy5WbHQtZHJvcGRvd25fX3Njcm9sbCcpO1xuICAgIH1cbiAgICBpZiAodGhpcy5kcm9wZG93blNjcm9sbENvbnRhaW5lciAmJiB0eXBlb2YgKHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4KSA9PT0gJ251bWJlcicpIHtcbiAgICAgIGNvbnN0IHNjcm9sbFRvcCA9IDQ0ICogdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXg7XG4gICAgICBjb25zdCBzY3JvbGxCb3R0b20gPSA0NCAqICh0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCAtIDcpO1xuICAgICAgaWYgKHNjcm9sbFRvcCA8IHRoaXMuZHJvcGRvd25TY3JvbGxDb250YWluZXIuc2Nyb2xsVG9wKSB7XG4gICAgICAgIHRoaXMuZHJvcGRvd25TY3JvbGxDb250YWluZXIuc2Nyb2xsVG9wID0gc2Nyb2xsVG9wO1xuICAgICAgfSBlbHNlIGlmIChzY3JvbGxCb3R0b20gPiB0aGlzLmRyb3Bkb3duU2Nyb2xsQ29udGFpbmVyLnNjcm9sbFRvcCkge1xuICAgICAgICB0aGlzLmRyb3Bkb3duU2Nyb2xsQ29udGFpbmVyLnNjcm9sbFRvcCA9IHNjcm9sbEJvdHRvbTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpbHRlck9wdGlvbnMoKSB7XG4gICAgdGhpcy5hc3luY09wdGlvbnMgPSBbXTtcbiAgICBpZiAoIXRoaXMubG9naWNhbERpc2FibGVkKSB7XG4gICAgICBmb3IgKGNvbnN0IG8gb2YgdGhpcy5tZXRhLm9wdGlvbnMpIHtcbiAgICAgICAgaWYgKG8uZm9yKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBwYXIgb2YgT2JqZWN0LmtleXMoby5mb3IpKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJWYWx1ZSA9IHRoaXMucGFyZW50W3Bhcl07XG4gICAgICAgICAgICBpZiAoby5mb3JbcGFyXS5pbmRleE9mKHBhclZhbHVlKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgdGhpcy5hc3luY09wdGlvbnMucHVzaChvKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5hc3luY09wdGlvbnMucHVzaChvKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2xpY2tvdXQgPSAoZXZlbnQpID0+IHtcbiAgICBpZiAoZXZlbnQudGFyZ2V0LmNsYXNzTmFtZSA9PT0gJ1ZsdC1kcm9wZG93bl9fbGluaycgJiYgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgdGhpcy5mb2N1cygpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQudGFyZ2V0ICE9PSB0aGlzLmlucHV0ICYmICFldmVudC50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdWbHQtZHJvcGRvd25fX2Jsb2NrJykpIHtcbiAgICAgIHRoaXMuZGlzbWlzc0Ryb3Bkb3duKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICB9XG4gIH07XG5cbiAgcHJpdmF0ZSBrZXlkb3duID0gKGV2ZW50KSA9PiB7XG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ0Fycm93RG93bic6IHtcbiAgICAgICAgdGhpcy5zaG93RHJvcGRvd24oKTtcbiAgICAgICAgaWYgKHR5cGVvZiAodGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXgpID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4ID0gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCsrO1xuICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCA+PSB0aGlzLm9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW5zdXJlRHJvcGRvd25PcHRpb25Jc1Zpc2libGUoKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnQXJyb3dVcCc6IHtcbiAgICAgICAgdGhpcy5zaG93RHJvcGRvd24oKTtcbiAgICAgICAgaWYgKHR5cGVvZiAodGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXgpID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4ID0gdGhpcy5vcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXgtLTtcbiAgICAgICAgICBpZiAodGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXggPCAwKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCA9IHRoaXMub3B0aW9ucy5sZW5ndGggLSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVuc3VyZURyb3Bkb3duT3B0aW9uSXNWaXNpYmxlKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgIGNhc2UgJ1NwYWNlJzpcbiAgICAgIGNhc2UgJyAnOiB7XG4gICAgICAgIGlmICh0eXBlb2YgKHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4KSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHRoaXMub25PcHRpb25TZWxlY3QoZXZlbnQsIHRoaXMub3B0aW9uc1t0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleF0pO1xuICAgICAgICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ0VzY2FwZSc6IHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMuZGlzbWlzc0Ryb3Bkb3duKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnQmFja3NwYWNlJzoge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuYXN5bmNPcHRpb25zIHx8IHRoaXMubWV0YS5vcHRpb25zIHx8IHRoaXMubWV0YS5waWNrbGlzdCB8fCBbXTtcbiAgfVxuXG4gIGdldCBncm91cGVkT3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnJlZHVjZSgociwgeyBncm91cCB9KSA9PiB7XG4gICAgICBpZiAoIXIuc29tZShvID0+IG8uZ3JvdXAgPT09IGdyb3VwKSkge1xuICAgICAgICByLnB1c2goeyBncm91cCwgZ3JvdXBJdGVtOiB0aGlzLm9wdGlvbnMuZmlsdGVyKHYgPT4gdi5ncm91cCA9PT0gZ3JvdXApIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHI7XG4gICAgfSwgW10pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZWFyY2hPcHRpb25zKHBhcmFtcz8pIHtcbiAgICBsZXQgc2VhcmNoVXJsID0gYC9maWVsZHMvJHt0aGlzLm1ldGEubmFtZX0vc2VhcmNoYDtcbiAgICBpZiAodGhpcy5tZXRhLnNlYXJjaCkge1xuICAgICAgaWYgKHRoaXMubWV0YS5zZWFyY2gudXJsKSB7XG4gICAgICAgIHNlYXJjaFVybCA9IHRoaXMubWV0YS5zZWFyY2gudXJsO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gdGhpcy5tZXRhLnNlYXJjaC5wYXJhbXM7XG4gICAgICBpZiAoc2VhcmNoUGFyYW1zKSB7XG4gICAgICAgIGZvciAoY29uc3QgcGFyIG9mIE9iamVjdC5rZXlzKHNlYXJjaFBhcmFtcykpIHtcbiAgICAgICAgICBjb25zdCB2YWwgPSB0aGlzLnBhcmVudFtzZWFyY2hQYXJhbXNbcGFyXV07XG4gICAgICAgICAgaWYgKHZhbCkge1xuICAgICAgICAgICAgc2VhcmNoVXJsICs9IGAke3NlYXJjaFVybC5pbmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnfSR7cGFyfT0ke3ZhbC5pZCB8fCB2YWx9YDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zZWFyY2hpbmcgPSB0cnVlO1xuICAgIHRoaXMucmVzb3VyY2VTZXJ2aWNlLmdldEJ5UGF0aChzZWFyY2hVcmwpLnN1YnNjcmliZSgob3B0aW9ucykgPT4ge1xuICAgICAgdGhpcy5hc3luY09wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgbGV0IHZhbGlkVmFsdWUgPSBmYWxzZTtcbiAgICAgIGlmICh0aGlzLnZhbHVlKSB7XG4gICAgICAgIGZvciAoY29uc3QgbyBvZiBvcHRpb25zKSB7XG4gICAgICAgICAgaWYgKChvLmlkIHx8IG8pID09PSAodGhpcy52YWx1ZS5pZCB8fCB0aGlzLnZhbHVlKSkge1xuICAgICAgICAgICAgdmFsaWRWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghdmFsaWRWYWx1ZSkge1xuICAgICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZGVsZXRlIHRoaXMuc2VhcmNoaW5nO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IHJlc291cmNlU2VydmljZSgpIHtcbiAgICBpZiAoIXRoaXMubWV0YVJlc291cmNlU2VydmljZSkge1xuICAgICAgY29uc3QgbWV0YVJlc291cmNlQ29uZmlnOiBJTWV0YVJlc291cmNlQ29uZmlnID0ge1xuICAgICAgICBpbnRlZ3JhdGlvbkNvZGU6IHRoaXMuaW50ZWdyYXRpb25Db2RlLFxuICAgICAgICByZXNvdXJjZVR5cGU6IHRoaXMucmVzb3VyY2VUeXBlXG4gICAgICB9O1xuICAgICAgdGhpcy5tZXRhUmVzb3VyY2VTZXJ2aWNlID0gdGhpcy5tZXRhUmVzb3VyY2UubmV3KG1ldGFSZXNvdXJjZUNvbmZpZyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm1ldGFSZXNvdXJjZVNlcnZpY2U7XG4gIH1cbn1cblxuLy8vLyBGSUVMRCBSRUZFUkVOQ0VcbkBDb21wb25lbnQoe1xuICAgIHRlbXBsYXRlVXJsOiAnLi9maWVsZFJlZmVyZW5jZS92aWV3Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2ZpZWxkUmVmZXJlbmNlL3N0eWxlLnNjc3MnXSxcbiAgICB2aWV3UHJvdmlkZXJzOiBbeyBwcm92aWRlOiBDb250cm9sQ29udGFpbmVyLCB1c2VFeGlzdGluZzogTmdGb3JtIH1dXG59KVxuZXhwb3J0IGNsYXNzIEZpZWxkUmVmZXJlbmNlIGV4dGVuZHMgRmllbGRBYnN0cmFjdCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGlucHV0OiBhbnk7XG4gIGRyb3Bkb3duOiBIVE1MRWxlbWVudDtcbiAgZHJvcGRvd25TY3JvbGxDb250YWluZXI6IEhUTUxFbGVtZW50O1xuICBzZWFyY2hpbmc6IGJvb2xlYW47XG4gIHNlYXJjaFJlc291cmNlVHlwZTogYW55ID0ge307XG4gIHNlYXJjaFRleHQ6IHN0cmluZztcbiAgc2VhcmNoUmVzdWx0czogQXJyYXk8YW55PjtcbiAgc2VhcmNoRXJyb3I6IGFueTtcbiAgYWN0aXZlU3VnZ2VzdGlvbkluZGV4OiBudW1iZXI7XG4gIHNlYXJjaFJlc291cmNlVHlwZXNTY29wZTogc3RyaW5nO1xuICBzZWFyY2hUZXh0Q2hhbmdlZDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuICBpc0NyZWF0YWJsZSA9IGZhbHNlO1xuICB2YWx1ZTogYW55O1xuICBpc1BvbHltb3JwaGljOiBib29sZWFuO1xuICBpc1NlYXJjaGFibGU6IGJvb2xlYW47XG4gIG11bHRpcGxlOiBib29sZWFuO1xuICB2cjogTWV0YVJlc291cmNlU2VydmljZTtcbiAgZXh0ZXJuYWxMaW5rOiBzdHJpbmc7XG4gIGRyb3Bkb3duVmlzaWJsZSA9IGZhbHNlO1xuICBzZWFyY2hSZXNvdXJjZVR5cGVNZXRhOiBhbnkgPSB7XG4gICAgdHlwZTogJ3NlbGVjdCcsXG4gICAgbmFtZTogJ3Jlc291cmNlVHlwZScsXG4gICAgbGFiZWw6ICdUeXBlJyxcbiAgICBvcHRpb25zOiBbXSwgLy8geyBsYWJlbDogJy0tIEFsbCB0eXBlcyAtLScgfV0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxuICB9O1xuICBmaWx0ZXJlZFN1Z2dlc3Rpb25zOiBBcnJheTxhbnk+ID0gW107XG4gIHBsYWNlSG9sZGVyTGFiZWw6IHN0cmluZztcbiAgYXN5bmNTdWdnZXN0aW9uczogQXJyYXk8YW55PjtcbiAgc21hcnRTdWdnZXN0aW9uczogQXJyYXk8YW55PiA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgcHJpdmF0ZSByZWZlcmVuY2VTZXJ2aWNlOiBNZXRhUmVmZXJlbmNlU2VydmljZSxcbiAgICBwcml2YXRlIG1ldGFSZXNvdXJjZTogTWV0YVJlc291cmNlU2VydmljZSxcbiAgICBwcml2YXRlIG1ldGFNc2dTZXJ2aWNlOiBNZXRhTXNnU2VydmljZSxcbiAgICBwcml2YXRlIG1ldGFDb250ZXh0OiBNZXRhQ29udGV4dFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtZXRhVHJhY2tlcjogTWV0YVRyYWNrZXJTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLm11bHRpcGxlID0gKHRoaXMubWV0YS50eXBlID09PSAnbXVsdGlyZWZlcmVuY2UnKSB8fCB0aGlzLm1ldGEubXVsdGlwbGU7XG4gICAgdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGVNZXRhLmxhYmVsID0gdGhpcy5tZXRhLmxhYmVsO1xuICAgIGlmICghdGhpcy5tZXRhLnZhbHVlVHlwZSkge1xuICAgICAgLy8gdGhpcy5tZXRhLnZhbHVlVHlwZSA9ICdvYmplY3QnO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMubWV0YSwgJ3ZhbHVlVHlwZScsIHtcbiAgICAgICAgdmFsdWU6ICdvYmplY3QnXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMubWV0YVJlZmVyZW5jZSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICB0aGlzLmlzUG9seW1vcnBoaWMgPSB0cnVlO1xuICAgICAgdGhpcy5pc1NlYXJjaGFibGUgPSB0cnVlO1xuICAgICAgdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGVzU2NvcGUgPSB0aGlzLm1ldGFSZWZlcmVuY2UubWFwKHJ0ID0+IHJ0Lm5hbWUpLmpvaW4oJywnKTtcbiAgICAgIGZvciAoY29uc3QgcnQgb2YgdGhpcy5tZXRhUmVmZXJlbmNlKSB7XG4gICAgICAgIGlmIChydC5jcmVhdGFibGUpIHtcbiAgICAgICAgICB0aGlzLmlzQ3JlYXRhYmxlID0gdHJ1ZTtcbiAgICAgICAgICBpZiAodHlwZW9mIChydC5zZWFyY2hhYmxlKSAhPT0gJ3VuZGVmaW5lZCcgJiYgIXJ0LnNlYXJjaGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuaXNTZWFyY2hhYmxlID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLm1ldGFSZWZlcmVuY2UuZm9yRWFjaCgocikgPT4ge1xuICAgICAgICB0aGlzLnNlYXJjaFJlc291cmNlVHlwZU1ldGEub3B0aW9ucy5wdXNoKHsgaWQ6IHIubmFtZSwgbGFiZWw6IHIubGFiZWwgfHwgci5uYW1lIH0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNTZWFyY2hhYmxlID0gdHlwZW9mICh0aGlzLm1ldGFSZWZlcmVuY2Uuc2VhcmNoYWJsZSkgPT09ICd1bmRlZmluZWQnIHx8IHRoaXMubWV0YVJlZmVyZW5jZS5zZWFyY2hhYmxlO1xuICAgICAgdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGUgPSB0aGlzLm1ldGFSZWZlcmVuY2U7XG4gICAgICB0aGlzLnNlYXJjaFJlc291cmNlVHlwZXNTY29wZSA9IHRoaXMubWV0YVJlZmVyZW5jZS5uYW1lIHx8IHRoaXMubWV0YVJlZmVyZW5jZS5yZXNvdXJjZVR5cGU7XG4gICAgICB0aGlzLmlzQ3JlYXRhYmxlID0gdGhpcy5tZXRhUmVmZXJlbmNlLmNyZWF0YWJsZTtcbiAgICB9XG4gICAgdGhpcy5idWlsZFBsYWNlaG9sZGVyTGFiZWwoKTtcbiAgICB0aGlzLnNlYXJjaFRleHRDaGFuZ2VkLnBpcGUoZGVib3VuY2VUaW1lKDMwMCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpLnN1YnNjcmliZSgodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gdmFsdWU7XG4gICAgICB0aGlzLnNlYXJjaCgpO1xuICAgIH0pO1xuICAgIGNvbnN0IG9yaWdWYWx1ZSA9IHRoaXMucGFyZW50W3RoaXMubWV0YS5uYW1lXTtcblxuICAgIC8vIHRoaXMuc3VnZ2VzdGlvbnMgPSB0aGlzLm1ldGEuc3VnZ2VzdGlvbnM7IC8vIFRPRE8gZmlsdGVyIGJ5IGRlZmF1bHQgdHlwZVxuICAgIC8vIGNvbnNvbGUubG9nKCd0aGlzLnN1Z2dlc3Rpb25zJywgdGhpcy5zdWdnZXN0aW9ucyk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5wYXJlbnQsIHRoaXMubWV0YS5uYW1lLCB7XG4gICAgICBzZXQ6ICh2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAodmFsdWUgPT09ICcnKSB7XG4gICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHYgb2YgdmFsdWUpIHtcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLm1vZGVsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbCA9IFtdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgKHYpID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwucHVzaCh7XG4gICAgICAgICAgICAgICAgICBpZDogdixcbiAgICAgICAgICAgICAgICAgIGxhYmVsOiB2LFxuICAgICAgICAgICAgICAgICAgdHlwZTogdGhpcy5tZXRhUmVmZXJlbmNlLm5hbWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mICh2YWx1ZSkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHtcbiAgICAgICAgICAgICAgaWQ6IHZhbHVlLFxuICAgICAgICAgICAgICBsYWJlbDogdmFsdWUsIC8vIGNvdWxkIGJlIGZvdW5kIHdpdGggZXh0cmEgY2FsbFxuICAgICAgICAgICAgICB0eXBlOiB0aGlzLm1ldGFSZWZlcmVuY2UubmFtZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gdmFsdWUgPyAoKCF2YWx1ZS5sYWJlbCB8fCB2YWx1ZS5sYWJlbCA9PT0gJyAnKSA/IGBOL0EgKCR7dmFsdWUudHlwZX0jJHt2YWx1ZS5pZH0pYCA6IHZhbHVlLmxhYmVsIHx8IHZhbHVlKSA6ICcnO1xuICAgICAgICAgIC8vIGlmICh0aGlzLmlzUG9seW1vcnBoaWMgJiYgdGhpcy5tb2RlbCkgeyAvL1RPRE8gc2hvdyBvciBub3Q/XG4gICAgICAgICAgLy8gICB0aGlzLnNlYXJjaFJlc291cmNlVHlwZSA9IHRoaXMubWV0YVJlZmVyZW5jZS5maW5kKChydCk9PiB7XG4gICAgICAgICAgLy8gICAgIHJldHVybiBydC5uYW1lID09PSB0aGlzLm1vZGVsLnR5cGU7XG4gICAgICAgICAgLy8gICB9KTtcbiAgICAgICAgICAvLyB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tb2RlbCA9IHZhbHVlO1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgIHRoaXMuYnVpbGRFeHRlcm5hbExpbmsoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1ldGEuJG9wdGlvbmFsID0gdGhpcy5pc09wdGlvbmFsO1xuICAgICAgfSxcbiAgICAgIGdldDogKCkgPT4gdGhpcy52YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRoaXMuc2VuZFRvU2VydmVyLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgaWYgKG9yaWdWYWx1ZSkge1xuICAgICAgdGhpcy5wYXJlbnRbdGhpcy5tZXRhLm5hbWVdID0gb3JpZ1ZhbHVlO1xuICAgIH1cbiAgICBpZiAoIXRoaXMubW9kZWwgJiYgdGhpcy5kZWZhdWx0KSB7XG4gICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICB0aGlzLnBhcmVudFt0aGlzLm1ldGEubmFtZV0gPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsdC5sZW5ndGgpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGR2IG9mIHRoaXMuZGVmYXVsdCkge1xuICAgICAgICAgICAgaWYgKChkdi5pZCB8fCBkdi52YWx1ZSkgJiYgZHYudHlwZSkge1xuICAgICAgICAgICAgICBjb25zdCBpdGVtOiBhbnkgPSB7XG4gICAgICAgICAgICAgICAgaWQ6IGR2LmlkIHx8IGR2LnZhbHVlLFxuICAgICAgICAgICAgICAgIGxhYmVsOiBkdi5sYWJlbCB8fCBkdi5pZCB8fCBkdi52YWx1ZSxcbiAgICAgICAgICAgICAgICB0eXBlOiBkdi50eXBlXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIGlmIChkdi5leHRlcm5hbExpbmspIHtcbiAgICAgICAgICAgICAgICBpdGVtLmV4dGVybmFsTGluayA9IGR2LmV4dGVybmFsTGluaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aGlzLnBhcmVudFt0aGlzLm1ldGEubmFtZV0ucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLnBhcmVudFt0aGlzLm1ldGEubmFtZV0ubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5kZWZhdWx0LmlkICYmIHRoaXMuZGVmYXVsdC5sYWJlbCAmJiB0aGlzLmRlZmF1bHQudHlwZSkge1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXRlbTogYW55ID0ge1xuICAgICAgICAgICAgICBpZDogdGhpcy5kZWZhdWx0LmlkIHx8IHRoaXMuZGVmYXVsdC52YWx1ZSxcbiAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuZGVmYXVsdC5sYWJlbCB8fCB0aGlzLmRlZmF1bHQuaWQgfHwgdGhpcy5kZWZhdWx0LnZhbHVlLFxuICAgICAgICAgICAgICB0eXBlOiB0aGlzLmRlZmF1bHQudHlwZSxcbiAgICAgICAgICAgICAgc21hcnQ6IHRydWVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAodGhpcy5kZWZhdWx0LmV4dGVybmFsTGluaykge1xuICAgICAgICAgICAgICBpdGVtLmV4dGVybmFsTGluayA9IHRoaXMuZGVmYXVsdC5leHRlcm5hbExpbms7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBhcmVudFt0aGlzLm1ldGEubmFtZV0gPSBpdGVtO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUud2FybignISEhZGVmYXVsdCB2YWx1ZSBpcyBub3QgdmFsaWQgZm9ybWF0JywgdGhpcy5tZXRhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YodGhpcy5tZXRhLmRpc2FibGVkKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mKHRoaXMubWV0YS5kaXNhYmxlZCkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGZvciAoY29uc3QgcCBvZiBPYmplY3Qua2V5cyh0aGlzLm1ldGEuZGlzYWJsZWQpKSB7XG4gICAgICAgICAgY29uc3QgcHJvcHMgPSBwLnNwbGl0KCcuJyk7XG4gICAgICAgICAgaWYgKHR5cGVvZiAodGhpcy5wYXJlbnRbcHJvcHNbMF1dKSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGxldCB2YWwgPSB0aGlzLnBhcmVudDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBwcm9wcykge1xuICAgICAgICAgICAgICB2YWwgPSB2YWxbcHJvcF07XG4gICAgICAgICAgICAgIGlmICghdmFsKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh2YWwgPT09IHRoaXMubWV0YS5kaXNhYmxlZFtwXSkge1xuICAgICAgICAgICAgICB0aGlzLmxvZ2ljYWxEaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5wYXJlbnRDaGFuZ2VTdWJqZWN0LnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5oYXNPd25Qcm9wZXJ0eShwcm9wc1swXSkpIHtcbiAgICAgICAgICAgICAgbGV0IHZhbCA9IHRoaXMucGFyZW50O1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgcHJvcHMpIHtcbiAgICAgICAgICAgICAgICB2YWwgPSB2YWxbcHJvcF07XG4gICAgICAgICAgICAgICAgaWYgKCF2YWwpIHtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAodmFsID09PSB0aGlzLm1ldGEuZGlzYWJsZWRbcF0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2ljYWxEaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmxvZ2ljYWxEaXNhYmxlZDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubWV0YS5zZWFyY2gpIHtcbiAgICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IHRoaXMubWV0YS5zZWFyY2gucGFyYW1zO1xuICAgICAgaWYgKHNlYXJjaFBhcmFtcykge1xuICAgICAgICBmb3IgKGNvbnN0IHBhciBvZiBPYmplY3Qua2V5cyhzZWFyY2hQYXJhbXMpKSB7XG4gICAgICAgICAgY29uc3QgcHJvcHMgPSBzZWFyY2hQYXJhbXNbcGFyXS5zcGxpdCgnIycpO1xuICAgICAgICAgIGNvbnN0IGZpZWxkID0gcHJvcHNbMF07XG4gICAgICAgICAgY29uc3QgcHJvcCA9IHByb3BzWzFdO1xuICAgICAgICAgIGxldCBwYXJWYWx1ZSA9IHRoaXMucGFyZW50W2ZpZWxkXTtcbiAgICAgICAgICBpZiAocGFyVmFsdWUpIHtcbiAgICAgICAgICAgIGlmIChwcm9wKSB7XG4gICAgICAgICAgICAgIHBhclZhbHVlID0gcGFyVmFsdWVbcHJvcF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocGFyVmFsdWUpIHtcbiAgICAgICAgICAgICAgY29uc3QgcGFyYW1zID0ge307XG4gICAgICAgICAgICAgIHBhcmFtc1twYXJdID0gcGFyVmFsdWU7XG4gICAgICAgICAgICAgIHRoaXMuc2VhcmNoU3VnZ2VzdGlvbnMocGFyYW1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5wYXJlbnRDaGFuZ2VTdWJqZWN0LnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpIHtcbiAgICAgICAgICAgICAgaWYgKHZhbHVlW2ZpZWxkXSkge1xuICAgICAgICAgICAgICAgIGlmIChwcm9wKSB7XG4gICAgICAgICAgICAgICAgICB2YWx1ZVtmaWVsZF0gPSB2YWx1ZVtmaWVsZF1bcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHt9O1xuICAgICAgICAgICAgICAgIHBhcmFtc1twYXJdID0gdmFsdWVbZmllbGRdO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoU3VnZ2VzdGlvbnMocGFyYW1zKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2xlYXJTZWFyY2hSZXNvdXJjZVR5cGUoKSB7XG4gICAgdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGUgPSB7fTtcbiAgICB0aGlzLm9uU2VhcmNoUmVzb3VyY2VUeXBlQ2hhbmdlZCgpO1xuICB9XG5cbiAgb25TZWFyY2hSZXNvdXJjZVR5cGVDaGFuZ2VkKHJlc291cmNlVHlwZT8pIHtcbiAgICBpZiAoIXJlc291cmNlVHlwZSB8fCAhcmVzb3VyY2VUeXBlLmlkKSB7XG4gICAgICB0aGlzLnNlYXJjaFJlc291cmNlVHlwZS5yZXNvdXJjZVR5cGUgPSBudWxsO1xuICAgICAgdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGVzU2NvcGUgPSAodGhpcy5tZXRhUmVmZXJlbmNlIHx8IFtdKS5tYXAocnQgPT4gcnQubmFtZSkuam9pbignLCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlYXJjaFJlc291cmNlVHlwZS5yZXNvdXJjZVR5cGUgPSByZXNvdXJjZVR5cGUuaWQ7XG4gICAgICB0aGlzLnNlYXJjaFJlc291cmNlVHlwZXNTY29wZSA9IHJlc291cmNlVHlwZS5pZDtcbiAgICB9XG4gICAgdGhpcy5idWlsZFBsYWNlaG9sZGVyTGFiZWwoKTtcbiAgICB0aGlzLmZvY3VzKCk7XG4gICAgaWYgKCF0aGlzLm1vZGVsICYmICF0aGlzLnNlYXJjaFRleHQpIHsgLy8gZmlsdGVyIHN1Z2dlc3Rpb25zIGJ5IHR5cGVcbiAgICAgIHRoaXMuZmlsdGVyZWRTdWdnZXN0aW9ucyA9ICFyZXNvdXJjZVR5cGUgPyAodGhpcy5tZXRhLnN1Z2dlc3Rpb25zIHx8IFtdKSA6ICh0aGlzLm1ldGEuc3VnZ2VzdGlvbnMgfHwgW10pLmZpbHRlcihcbiAgICAgICAgKHMpID0+IHMudHlwZSA9PT0gcmVzb3VyY2VUeXBlLmlkXG4gICAgICApO1xuICAgIH0gZWxzZSB7IC8vIHJlZ3VsYXIgc2VhcmNoIChyZXR1cm4gc2NvcGVkIHJlc3VsdHMpXG4gICAgICBpZiAoIXRoaXMubW9kZWwpIHtcbiAgICAgICAgdGhpcy5zZWFyY2goKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWFyY2hSZXN1bHRzICYmIHJlc291cmNlVHlwZSkge1xuICAgICAgICB0aGlzLnNlYXJjaFJlc3VsdHMgPSB0aGlzLnNlYXJjaFJlc3VsdHMuZmlsdGVyKChzKSA9PiBzLnR5cGUgPT09IHJlc291cmNlVHlwZS5pZCk7XG4gICAgICB9XG4gICAgfVxuICAgIGRlbGV0ZSB0aGlzLnNlYXJjaEVycm9yO1xuICB9XG5cbiAgb25TZWFyY2hUZXh0Q2hhbmdlZCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZWFyY2hUZXh0Q2hhbmdlZC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHNlYXJjaCgpIHtcbiAgICB0aGlzLnNlYXJjaGluZyA9IHRydWU7XG4gICAgLy8gdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXg7XG4gICAgaWYgKCF0aGlzLnNlYXJjaFRleHQgfHwgdGhpcy5zZWFyY2hUZXh0Lmxlbmd0aCA8IDIpIHtcbiAgICAgIHRoaXMuc2VhcmNoaW5nID0gZmFsc2U7XG4gICAgICBkZWxldGUgdGhpcy5zZWFyY2hSZXN1bHRzO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzaG93U2VhcmNocmVzdWx0cyA9IChyZXN1bHRzKSA9PiB7XG4gICAgICB0aGlzLnNlYXJjaGluZyA9IGZhbHNlO1xuICAgICAgZGVsZXRlIHRoaXMuc2VhcmNoRXJyb3I7XG4gICAgICBkZWxldGUgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXg7XG4gICAgICBpZiAoIXJlc3VsdHMgfHwgIShyZXN1bHRzIGluc3RhbmNlb2YgQXJyYXkpKSB7XG4gICAgICAgIHJlc3VsdHMgPSBbXTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm1ldGEuYWNjZXB0TmV3ICYmIHRoaXMubWV0YS5hY2NlcHROZXcudHlwZSAmJiB0aGlzLm1ldGEuYWNjZXB0TmV3LnBhdHRlcm4pIHtcbiAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKHRoaXMubWV0YS5hY2NlcHROZXcucGF0dGVybik7XG4gICAgICAgIGlmIChyZWdleC50ZXN0KHRoaXMuc2VhcmNoVGV4dCkpIHtcbiAgICAgICAgICByZXN1bHRzLnVuc2hpZnQoeyBpZDogbnVsbCwgbGFiZWw6IHRoaXMuc2VhcmNoVGV4dCwgdHlwZTogdGhpcy5tZXRhLmFjY2VwdE5ldy50eXBlIH0pIDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5zZWFyY2hSZXN1bHRzID0gcmVzdWx0cy5tYXAoKHIpID0+IHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBhcnJvdy1ib2R5LXN0eWxlXG4gICAgICAgIHJldHVybiB7IGlkOiByLmlkLCBsYWJlbDogci5sYWJlbCwgdHlwZTogci50eXBlIHx8IHIucmVzb3VyY2VUeXBlIHx8IHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlLm5hbWUsIGV4dGVybmFsTGluazogci5leHRlcm5hbExpbmsgfTtcbiAgICAgIH0pO1xuICAgICAgaWYgKCEvVmx0LWRyb3Bkb3duLS1leHBhbmRlZC8udGVzdCh0aGlzLmRyb3Bkb3duLmNsYXNzTmFtZSkpIHtcbiAgICAgICAgdGhpcy5zaG93RHJvcGRvd24oKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGlmICh0aGlzLm1ldGEuc2VhcmNoKSB7XG4gICAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSB0aGlzLm1ldGEuc2VhcmNoLnBhcmFtcyB8fCB7fTtcbiAgICAgIGxldCBzZWFyY2hVcmwgPSBgL2ZpZWxkcy8ke3RoaXMubWV0YS5uYW1lfS9zZWFyY2hgO1xuICAgICAgaWYgKHRoaXMubWV0YS5zZWFyY2gudXJsKSB7XG4gICAgICAgIHNlYXJjaFVybCA9IHRoaXMubWV0YS5zZWFyY2gudXJsLnJlcGxhY2UoL1xcJHtcXHMqKFtcXHdcXC5dKylcXHMqfS9nLCAobWF0Y2gsIGtleSkgPT4ge1xuICAgICAgICAgIGlmIChzZWFyY2hQYXJhbXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgY29uc3QgdmFsID0gc2VhcmNoUGFyYW1zW2tleV07XG4gICAgICAgICAgICBkZWxldGUgc2VhcmNoUGFyYW1zW2tleV07XG4gICAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBwIG9mIE9iamVjdC5rZXlzKHNlYXJjaFBhcmFtcykpIHtcbiAgICAgICAgc2VhcmNoVXJsICs9IGAke3NlYXJjaFVybC5pbmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnfSR7ZW5jb2RlVVJJQ29tcG9uZW50KHApfT0ke2VuY29kZVVSSUNvbXBvbmVudChzZWFyY2hQYXJhbXNbcF0pfWA7XG4gICAgICB9XG4gICAgICBzZWFyY2hVcmwgKz0gYCR7c2VhcmNoVXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJid9cT0ke2VuY29kZVVSSUNvbXBvbmVudCh0aGlzLnNlYXJjaFRleHQpfWA7XG4gICAgICB0aGlzLnNlYXJjaGluZyA9IHRydWU7XG4gICAgICB0aGlzLnJlc291cmNlU2VydmljZS5nZXRCeVBhdGgoc2VhcmNoVXJsKS5zdWJzY3JpYmUoKHJlc3VsdHMpID0+IHtcbiAgICAgICAgc2hvd1NlYXJjaHJlc3VsdHMocmVzdWx0cyk7XG4gICAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgICAgZGVsZXRlIHRoaXMuc2VhcmNoaW5nO1xuICAgICAgICB0aGlzLnNlYXJjaFJlc3VsdHMgPSBbXTtcbiAgICAgICAgdGhpcy5zZWFyY2hFcnJvciA9IGVycm9yLmVycm9yID8gZXJyb3IuZXJyb3IubWVzc2FnZSB8fCBlcnJvci5lcnJvciA6IGVycm9yLm1lc3NhZ2UgfHwgZXJyb3I7XG4gICAgICAgIGlmICghL1ZsdC1kcm9wZG93bi0tZXhwYW5kZWQvLnRlc3QodGhpcy5kcm9wZG93bi5jbGFzc05hbWUpKSB7XG4gICAgICAgICAgdGhpcy5zaG93RHJvcGRvd24oKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghdGhpcy52cikge1xuICAgICAgICB0aGlzLnZyID0gdGhpcy5tZXRhUmVzb3VyY2UubmV3KHtcbiAgICAgICAgICBpbnRlZ3JhdGlvbkNvZGU6IHRoaXMuaW50ZWdyYXRpb25Db2RlLFxuICAgICAgICAgIHJlc291cmNlVHlwZTogbnVsbFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMudnIuc2VhcmNoSW50ZWdyYXRpb24oXG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dCxcbiAgICAgICAgdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGUubmFtZSB8fCB0aGlzLnNlYXJjaFJlc291cmNlVHlwZXNTY29wZVxuICAgICAgKS5zdWJzY3JpYmUoKHJlc3VsdHM6IEFycmF5PGFueT4pID0+IHtcbiAgICAgICAgc2hvd1NlYXJjaHJlc3VsdHMocmVzdWx0cyk7XG4gICAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5zZWFyY2hpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zZWFyY2hSZXN1bHRzID0gW107XG4gICAgICAgIHRoaXMuc2VhcmNoRXJyb3IgPSBlcnJvci5lcnJvciA/IGVycm9yLmVycm9yLm1lc3NhZ2UgfHwgZXJyb3IuZXJyb3IgOiBlcnJvci5tZXNzYWdlIHx8IGVycm9yO1xuICAgICAgICBpZiAoIS9WbHQtZHJvcGRvd24tLWV4cGFuZGVkLy50ZXN0KHRoaXMuZHJvcGRvd24uY2xhc3NOYW1lKSkge1xuICAgICAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uQWN0aXZhdGVkKGV2KSB7XG4gICAgLy8gZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAvLyBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmlucHV0ID0gZXYuc3JjRWxlbWVudDtcbiAgICBpZiAoIXRoaXMuZHJvcGRvd24pIHtcbiAgICAgIC8vIHRoaXMuZHJvcGRvd24gPSBldi5zcmNFbGVtZW50LnBhcmVudE5vZGUucGFyZW50Tm9kZTtcbiAgICAgIHRoaXMuZHJvcGRvd24gPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZHJvcGRvd24td3JhcHBlcicpO1xuICAgIH1cbiAgICB0aGlzLnNob3dEcm9wZG93bigpO1xuICB9XG5cbiAgb25CbHVyKGV2KSB7XG4gICAgbGV0IGludGVybmFsQ29udHJvbCA9IGZhbHNlO1xuICAgIGlmIChldi5yZWxhdGVkVGFyZ2V0KSB7XG4gICAgICBpZiAoIXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2LnJlbGF0ZWRUYXJnZXQpKSB7XG4gICAgICAgIHRoaXMuZGlzbWlzc0Ryb3Bkb3duKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbnRlcm5hbENvbnRyb2wgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5rZXlMaXN0ZW5lckFjdGl2ZSAmJiAhaW50ZXJuYWxDb250cm9sKSB7XG4gICAgICB0aGlzLmlucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmtleWRvd24pO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5rZXlMaXN0ZW5lckFjdGl2ZSkge1xuICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5jbGlja291dCk7XG4gICAgICAgIH1cbiAgICAgIH0sIDQwMCk7XG4gICAgICBkZWxldGUgdGhpcy5rZXlMaXN0ZW5lckFjdGl2ZTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVTZWxlY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMubW9kZWwgJiYgIXRoaXMuc3VnZ2VzdGlvbnMuZmluZCgocykgPT4gKHMuaWQgPT09IHRoaXMubW9kZWwuaWQgJiYgcy50eXBlID09PSB0aGlzLm1vZGVsLnR5cGUpKSkge1xuICAgICAgdGhpcy5zbWFydFN1Z2dlc3Rpb25zLnB1c2goe1xuICAgICAgICBpZDogdGhpcy5tb2RlbC5pZCxcbiAgICAgICAgbGFiZWw6IHRoaXMubW9kZWwubGFiZWwsXG4gICAgICAgIHR5cGU6IHRoaXMubW9kZWwudHlwZSxcbiAgICAgICAgc21hcnQ6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLm1ldGFUcmFja2VyLmVtaXQodGhpcy5idWlsZFRyYWNrRXZlbnQoJ1JFTU9WRScpKTtcbiAgICB0aGlzLmNsZWFyKCk7XG4gIH1cblxuICBvblN1Z2dlc3Rpb25TZWxlY3QoZXYsIHN1Z2dlc3Rpb24pIHtcbiAgICBpZiAoIXN1Z2dlc3Rpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmZvY3VzKCk7XG4gICAgdGhpcy5tZXRhVHJhY2tlci5lbWl0KHRoaXMuYnVpbGRUcmFja0V2ZW50KCdTRUxFQ1QnKSk7XG4gICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgIGlmICghdGhpcy5tb2RlbCkge1xuICAgICAgICB0aGlzLm1vZGVsID0gW107XG4gICAgICB9XG4gICAgICBsZXQgZXhpc3RpbmdFbnRyeTtcbiAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5tb2RlbCkge1xuICAgICAgICBpZiAoc3VnZ2VzdGlvbi5pZCAmJiAoZW50cnkuaWQgPT09IHN1Z2dlc3Rpb24uaWQpKSB7XG4gICAgICAgICAgZXhpc3RpbmdFbnRyeSA9IGVudHJ5O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2UgaWYgKHN1Z2dlc3Rpb24ubGFiZWwgPT09IGVudHJ5LmxhYmVsKSB7IC8vIGNyZWF0ZSBuZXcgKGdvb2dsZSBlbWFpbHMpXG4gICAgICAgICAgZXhpc3RpbmdFbnRyeSA9IGVudHJ5O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWV4aXN0aW5nRW50cnkpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5wdXNoKHN1Z2dlc3Rpb24pO1xuICAgICAgfVxuICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlKHRoaXMubW9kZWwpO1xuICAgICAgZGVsZXRlIHRoaXMuc2VhcmNoVGV4dDtcbiAgICAgIHRoaXMuc2VhcmNoVGV4dENoYW5nZWQubmV4dCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1vZGVsID0gc3VnZ2VzdGlvbjtcbiAgICAgIHRoaXMuZXh0ZXJuYWxMaW5rID0gc3VnZ2VzdGlvbi5leHRlcm5hbExpbms7XG4gICAgICB0aGlzLm9uTW9kZWxDaGFuZ2Uoc3VnZ2VzdGlvbik7XG4gICAgICB0aGlzLnNlYXJjaFRleHQgPSBzdWdnZXN0aW9uLmxhYmVsO1xuICAgICAgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXggPSAodGhpcy5zZWFyY2hSZXN1bHRzIHx8IHRoaXMuc3VnZ2VzdGlvbnMpLmluZGV4T2Yoc3VnZ2VzdGlvbik7XG4gICAgfVxuICAgIHRoaXMuZGlzbWlzc0Ryb3Bkb3duKCk7XG4gICAgLy8gaWYgKHRoaXMuaXNQb2x5bW9ycGhpYykge1xuICAgIC8vICAgdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGUgPSB0aGlzLm1ldGFSZWZlcmVuY2UuZmluZCgocnQpPT4ge1xuICAgIC8vICAgICByZXR1cm4gcnQubmFtZSA9PT0gc3VnZ2VzdGlvbi50eXBlO1xuICAgIC8vICAgfSk7XG4gICAgLy8gfVxuICB9XG5cbiAgc2hvd0Ryb3Bkb3duKCkge1xuICAgIHRoaXMuZHJvcGRvd25WaXNpYmxlID0gdHJ1ZTtcbiAgICB0aGlzLmRyb3Bkb3duLmNsYXNzTGlzdC5hZGQoJ1ZsdC1kcm9wZG93bi0tZXhwYW5kZWQnKTtcbiAgICBpZiAoIXRoaXMua2V5TGlzdGVuZXJBY3RpdmUpIHtcbiAgICAgIHRoaXMuaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMua2V5ZG93bik7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmNsaWNrb3V0KTtcbiAgICAgIH0sIDIwMCk7XG4gICAgICB0aGlzLmtleUxpc3RlbmVyQWN0aXZlID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZih0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAodGhpcy5tb2RlbCAmJiAodGhpcy5zZWFyY2hSZXN1bHRzIHx8IHRoaXMuc3VnZ2VzdGlvbnMpKSB7XG4gICAgICAgIGZvciAobGV0IHN1Z2dlc3Rpb25JbmRleCA9IDA7IHN1Z2dlc3Rpb25JbmRleCA8ICh0aGlzLnNlYXJjaFJlc3VsdHMgfHwgdGhpcy5zdWdnZXN0aW9ucykubGVuZ3RoOyBzdWdnZXN0aW9uSW5kZXgrKykge1xuICAgICAgICAgIGNvbnN0IGl0ZW0gPSAodGhpcy5zZWFyY2hSZXN1bHRzIHx8IHRoaXMuc3VnZ2VzdGlvbnMpW3N1Z2dlc3Rpb25JbmRleF07XG4gICAgICAgICAgaWYgKHRoaXMubW9kZWwuaWQgPT09IGl0ZW0uaWQgJiYgdGhpcy5tb2RlbC50eXBlID09PSBpdGVtLnR5cGUpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4ID0gc3VnZ2VzdGlvbkluZGV4O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZW5zdXJlRHJvcGRvd25Jc1Zpc2libGUoKTtcbiAgfVxuXG4gIGRpc21pc3NEcm9wZG93bihldmVudD8pIHtcbiAgICB0aGlzLmRyb3Bkb3duVmlzaWJsZSA9IGZhbHNlO1xuICAgIGlmIChldmVudCkge1xuICAgICAgdGhpcy5mb2N1cygpO1xuICAgIH1cbiAgICBpZiAodGhpcy5kcm9wZG93bikge1xuICAgICAgdGhpcy5kcm9wZG93bi5jbGFzc0xpc3QucmVtb3ZlKCdWbHQtZHJvcGRvd24tLWV4cGFuZGVkJyk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXIoKSB7XG4gICAgdGhpcy5wcmV2TW9kZWwgPSB0aGlzLm1vZGVsO1xuICAgIGRlbGV0ZSB0aGlzLnNlYXJjaFRleHQ7XG4gICAgZGVsZXRlIHRoaXMuc2VhcmNoUmVzdWx0cztcbiAgICBkZWxldGUgdGhpcy5tb2RlbDtcbiAgICBkZWxldGUgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXg7XG4gICAgdGhpcy5vbk1vZGVsQ2hhbmdlKHRoaXMubW9kZWwpO1xuICAgIHRoaXMub25TZWFyY2hUZXh0Q2hhbmdlZCh0aGlzLnNlYXJjaFRleHQpO1xuICAgIHRoaXMuZm9jdXMoKTtcbiAgfVxuXG4gIHJldmVydCgpIHtcbiAgICB0aGlzLm1vZGVsID0gdGhpcy5wcmV2TW9kZWw7XG4gICAgZGVsZXRlIHRoaXMucHJldk1vZGVsO1xuICAgIHRoaXMub25Nb2RlbENoYW5nZSh0aGlzLm1vZGVsKTtcbiAgICB0aGlzLmZvY3VzKCk7XG4gIH1cblxuICByZW1vdmUoZXYsIGl0ZW0pIHtcbiAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbnN0IG9wdGlvbkluZGV4ID0gdGhpcy5tb2RlbC5pbmRleE9mKGl0ZW0pO1xuICAgIGlmIChvcHRpb25JbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMubW9kZWwuc3BsaWNlKG9wdGlvbkluZGV4LCAxKTtcbiAgICAgIGlmICghdGhpcy5tb2RlbC5sZW5ndGgpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMubW9kZWw7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnZhbHVlO1xuICAgICAgfVxuICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlKHRoaXMubW9kZWwpO1xuICAgIH1cbiAgfVxuXG4gIG9wZW5SZXNvdXJjZShtb2RlbD8pIHtcbiAgICB0aGlzLmtleUxpc3RlbmVyQWN0aXZlID0gdHJ1ZTsgLy8gc3VwcHJlc3MgZHJvcGRvd24gaW4gdGhpcyBjYXNlXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmRpc21pc3NEcm9wZG93bigpO1xuICAgIH0pO1xuICAgIGNvbnN0IHJlZkRpYWxvZ0ZhY3RvcnkgPSB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShNZXRhUmVmRGlhbG9nKTtcbiAgICB0aGlzLm1ldGFUcmFja2VyLmVtaXQodGhpcy5idWlsZFRyYWNrRXZlbnQobW9kZWwgPyAnRURJVCcgOiAnTkVXJykpO1xuICAgIGxldCB0aGVtZSA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmRhdGFzZXQudGhlbWU7XG4gICAgaWYgKCF0aGVtZSB8fCB0aGVtZSA9PT0gJ2luaGVyaXQnKSB7XG4gICAgICBsZXQgcGFyZW50Q29tcG9uZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xvc2VzdCgndmdpcC1tZXRhLWxheW91dCcpO1xuICAgICAgaWYgKHBhcmVudENvbXBvbmVudCkge1xuICAgICAgICB0aGVtZSA9IHBhcmVudENvbXBvbmVudC5kYXRhc2V0LnRoZW1lO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGVtZSB8fCB0aGVtZSA9PT0gJ2luaGVyaXQnKSB7XG4gICAgICAgIHBhcmVudENvbXBvbmVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsb3Nlc3QoJ3ZnaXAtbWV0YS1yZXNvdXJjZScpO1xuICAgICAgICBpZiAocGFyZW50Q29tcG9uZW50KSB7XG4gICAgICAgICAgdGhlbWUgPSBwYXJlbnRDb21wb25lbnQuZGF0YXNldC50aGVtZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnJlZmVyZW5jZVNlcnZpY2Uub3BlbkRpYWxvZyhcbiAgICAgIHJlZkRpYWxvZ0ZhY3RvcnksIHRoaXMubWV0YVJlc291cmNlLCB0aGlzLmludGVncmF0aW9uQ29kZSwgdGhpcy5tZXRhUmVmZXJlbmNlLCBtb2RlbCwgbnVsbCwgdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGUucmVzb3VyY2VUeXBlLFxuICAgICAgdGhlbWVcbiAgICApLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgdGhpcy5wYXJlbnRbdGhpcy5tZXRhLm5hbWVdID0gcmVzdWx0O1xuICAgICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQocmVzdWx0KTtcbiAgICAgICAgY29uc3QgZXhpc3RpbmdTdWdnZXN0aW9uID0gKHRoaXMubWV0YS5zdWdnZXN0aW9ucyB8fCBbXSkuZmluZCgocykgPT4gKHMuaWQgPT09IHJlc3VsdC5pZCAmJiBzLnR5cGUgPT09IHJlc3VsdC50eXBlKSk7XG4gICAgICAgIGlmIChleGlzdGluZ1N1Z2dlc3Rpb24pIHtcbiAgICAgICAgICBleGlzdGluZ1N1Z2dlc3Rpb24ubGFiZWwgPSByZXN1bHQubGFiZWw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCF0aGlzLm1ldGEuc3VnZ2VzdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMubWV0YS5zdWdnZXN0aW9ucyA9IFtdO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLm1ldGEuc3VnZ2VzdGlvbnMudW5zaGlmdChyZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWV0YVRyYWNrZXIuZW1pdCh0aGlzLmJ1aWxkVHJhY2tFdmVudChtb2RlbCA/ICdVUERBVEUnIDogJ0NSRUFURScsIHJlc3VsdC50eXBlIHx8IHJlc3VsdC5yZXNvdXJjZVR5cGUpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubWV0YVRyYWNrZXIuZW1pdCh0aGlzLmJ1aWxkVHJhY2tFdmVudChtb2RlbCA/ICdDQU5DRUxfRURJVCcgOiAnQ0FOQ0VMX1VQREFURScpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZW5zdXJlRHJvcGRvd25Jc1Zpc2libGUoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBob2xkZXIgPSB0aGlzLmRyb3Bkb3duLmNsb3Nlc3QoJy5WbHQtY2FyZF9fY29udGVudCcpO1xuICAgICAgaWYgKGhvbGRlcikge1xuICAgICAgICBjb25zdCBlbCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5WbHQtZHJvcGRvd25fX3BhbmVsJyk7XG4gICAgICAgIGNvbnN0IGVsUmVjdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBob2xkZXJSZWN0ID0gaG9sZGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBpZiAoaG9sZGVyUmVjdC50b3AgKyBob2xkZXJSZWN0LmhlaWdodCA8IGVsUmVjdC50b3AgKyBlbFJlY3QuaGVpZ2h0KSB7XG4gICAgICAgICAgZWwuc2Nyb2xsSW50b1ZpZXcoeyBibG9jazogJ2VuZCcgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCA0MDApO1xuICB9XG5cbiAgcHJpdmF0ZSBlbnN1cmVEcm9wZG93bk9wdGlvbklzVmlzaWJsZSgpIHtcbiAgICBpZiAoIXRoaXMuZHJvcGRvd25TY3JvbGxDb250YWluZXIpIHtcbiAgICAgIHRoaXMuZHJvcGRvd25TY3JvbGxDb250YWluZXIgPSB0aGlzLmRyb3Bkb3duLnF1ZXJ5U2VsZWN0b3IoJy5WbHQtZHJvcGRvd25fX3Njcm9sbCcpO1xuICAgIH1cbiAgICBpZiAodGhpcy5kcm9wZG93blNjcm9sbENvbnRhaW5lciAmJiB0eXBlb2YgKHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4KSA9PT0gJ251bWJlcicpIHtcbiAgICAgIGNvbnN0IHNjcm9sbFRvcCA9IDQ0ICogdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXg7XG4gICAgICBjb25zdCBzY3JvbGxCb3R0b20gPSA0NCAqICh0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCAtIDcpO1xuICAgICAgaWYgKHNjcm9sbFRvcCA8IHRoaXMuZHJvcGRvd25TY3JvbGxDb250YWluZXIuc2Nyb2xsVG9wKSB7XG4gICAgICAgIHRoaXMuZHJvcGRvd25TY3JvbGxDb250YWluZXIuc2Nyb2xsVG9wID0gc2Nyb2xsVG9wO1xuICAgICAgfSBlbHNlIGlmIChzY3JvbGxCb3R0b20gPiB0aGlzLmRyb3Bkb3duU2Nyb2xsQ29udGFpbmVyLnNjcm9sbFRvcCkge1xuICAgICAgICB0aGlzLmRyb3Bkb3duU2Nyb2xsQ29udGFpbmVyLnNjcm9sbFRvcCA9IHNjcm9sbEJvdHRvbTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNsaWNrb3V0ID0gKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgaW50ZXJuYWxDb250cm9sID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KTtcbiAgICBpZiAoaW50ZXJuYWxDb250cm9sICYmIFsnVmx0LWRyb3Bkb3duX19saW5rJywgJ1ZsdC1kcm9wZG93bl9fYmxvY2snXS5pbmRleE9mKGV2ZW50LnRhcmdldC5jbGFzc05hbWUpICE9PSAtMSApIHtcbiAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICB9IGVsc2UgaWYgKCFpbnRlcm5hbENvbnRyb2wgJiYgZXZlbnQudGFyZ2V0ICE9PSB0aGlzLmlucHV0ICYmIGV2ZW50LnRhcmdldC5jbGFzc05hbWUgIT09ICdWbHQtZHJvcGRvd25fX3RpdGxlJykge1xuICAgICAgdGhpcy5kaXNtaXNzRHJvcGRvd24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFpbnRlcm5hbENvbnRyb2wgJiYgaW50ZXJuYWxDb250cm9sLnRhZ05hbWUgIT09ICdJTlBVVCcpIHtcbiAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIGJ1aWxkVHJhY2tFdmVudChhY3Rpb246IHN0cmluZywgdmFsdWU/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBlOiBJTWV0YVRyYWNrZXJFdmVudCA9IHtcbiAgICAgIGludGVncmF0aW9uOiB0aGlzLmludGVncmF0aW9uQ29kZSxcbiAgICAgIHJlc291cmNlOiB0aGlzLm1vZGVsID8gKHRoaXMubW9kZWwudHlwZSB8fCB0aGlzLm1vZGVsLnJlc291cmNlVHlwZSkgOiB0aGlzLnNlYXJjaFJlc291cmNlVHlwZS5yZXNvdXJjZVR5cGUsXG4gICAgICBmaWVsZDogdGhpcy5tZXRhLm5hbWUsXG4gICAgICBhY3Rpb25cbiAgICB9O1xuICAgIGlmICh0aGlzLm1ldGEuJGlzQ29udGFjdGFibGUpIHtcbiAgICAgIGUuaXNDb250YWN0YWJsZSA9IHRydWU7XG4gICAgfVxuICAgIGlmICh0eXBlb2YodmFsdWUpICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgZS52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gZTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRQbGFjZWhvbGRlckxhYmVsKCkge1xuICAgIHRoaXMucGxhY2VIb2xkZXJMYWJlbCA9IHRoaXMubWV0YS5sYWJlbDtcbiAgICBpZiAodGhpcy5tdWx0aXBsZSAmJiAhdGhpcy5pc1BvbHltb3JwaGljKSB7XG4gICAgICB0aGlzLnBsYWNlSG9sZGVyTGFiZWwgPSAnK0FkZCAnO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBsYWNlSG9sZGVyTGFiZWwgPSAodGhpcy5pc1NlYXJjaGFibGUgJiYgKHRoaXMubXVsdGlwbGUgfHwgIXRoaXMuaXNQb2x5bW9ycGhpYykpID8gJ1NlYXJjaCAnIDogJyc7XG4gICAgfVxuICAgIHRoaXMucGxhY2VIb2xkZXJMYWJlbCArPSB0aGlzLnNlYXJjaFJlc291cmNlVHlwZS5yZXNvdXJjZVR5cGUgPyB0aGlzLnNlYXJjaFJlc291cmNlVHlwZS5yZXNvdXJjZVR5cGUgOiB0aGlzLnNlYXJjaFJlc291cmNlVHlwZXNTY29wZTtcbiAgfVxuXG4gIHByaXZhdGUga2V5ZG93biA9IChldmVudCkgPT4ge1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdBcnJvd0Rvd24nOiB7XG4gICAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duKCk7XG4gICAgICAgIGlmICh0eXBlb2YgKHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4KSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXgrKztcbiAgICAgICAgICBpZiAodGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXggPj0gKHRoaXMuc2VhcmNoUmVzdWx0cyB8fCB0aGlzLnN1Z2dlc3Rpb25zKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4ID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbnN1cmVEcm9wZG93bk9wdGlvbklzVmlzaWJsZSgpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdBcnJvd1VwJzoge1xuICAgICAgICB0aGlzLnNob3dEcm9wZG93bigpO1xuICAgICAgICBpZiAodHlwZW9mICh0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXggPSAodGhpcy5zZWFyY2hSZXN1bHRzIHx8IHRoaXMuc3VnZ2VzdGlvbnMpLmxlbmd0aCAtIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXgtLTtcbiAgICAgICAgICBpZiAodGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXggPCAwKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCA9ICh0aGlzLnNlYXJjaFJlc3VsdHMgfHwgdGhpcy5zdWdnZXN0aW9ucykubGVuZ3RoIC0gMTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbnN1cmVEcm9wZG93bk9wdGlvbklzVmlzaWJsZSgpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdTcGFjZSc6XG4gICAgICBjYXNlICdFbnRlcic6IHtcbiAgICAgICAgaWYgKHR5cGVvZiAodGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXgpICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgdGhpcy5vblN1Z2dlc3Rpb25TZWxlY3QoZXZlbnQsICh0aGlzLnNlYXJjaFJlc3VsdHMgfHwgdGhpcy5zdWdnZXN0aW9ucylbdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXhdKTtcbiAgICAgICAgICBkZWxldGUgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdFc2NhcGUnOiB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLmRpc21pc3NEcm9wZG93bigpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ0JhY2tzcGFjZSc6IHtcbiAgICAgICAgaWYgKCF0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB0aGlzLnJlbW92ZVNlbGVjdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIGJ1aWxkRXh0ZXJuYWxMaW5rKCkge1xuICAgIGlmICh0aGlzLm1vZGVsKSB7XG4gICAgICBpZiAodGhpcy5tb2RlbC5leHRlcm5hbExpbmspIHtcbiAgICAgICAgdGhpcy5leHRlcm5hbExpbmsgPSB0aGlzLm1vZGVsLmV4dGVybmFsTGluaztcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5tZXRhQ29udGV4dC5wcm9maWxlc1t0aGlzLmludGVncmF0aW9uQ29kZS50b1VwcGVyQ2FzZSgpXSkge1xuICAgICAgICBkZWxldGUgdGhpcy5leHRlcm5hbExpbms7XG4gICAgICAgIHRoaXMubWV0YU1zZ1NlcnZpY2Uuc2VuZE1lc3NhZ2UoXG4gICAgICAgICAgdGhpcy5pbnRlZ3JhdGlvbkNvZGUudG9VcHBlckNhc2UoKSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhY3Rpb246ICdidWlsZEV4dGVybmFsTGluaycsXG4gICAgICAgICAgICBpbnRlZ3JhdGlvbkNvZGU6IHRoaXMuaW50ZWdyYXRpb25Db2RlLFxuICAgICAgICAgICAgcmVmOiB0aGlzLm1vZGVsLFxuICAgICAgICAgICAgcHJvZmlsZTogdGhpcy5tZXRhQ29udGV4dC5wcm9maWxlc1t0aGlzLmludGVncmF0aW9uQ29kZS50b1VwcGVyQ2FzZSgpXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLmVycm9yKSB7XG4gICAgICAgICAgICAgIHRoaXMuZXh0ZXJuYWxMaW5rID0gcmVzcG9uc2UuZXh0ZXJuYWxMaW5rO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdObyBleHRlcm5hbCBsaW5rIHN1cHBvcnQgZm9yJywgdGhpcy5pbnRlZ3JhdGlvbkNvZGUsIHRoaXMubW9kZWwucmVzb3VyY2VUeXBlIHx8IHRoaXMubW9kZWwudHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdGhpcy5leHRlcm5hbExpbms7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGRpc2FibGVkKCkge1xuICAgIGNvbnN0IHN1cGVyRGlzYWJsZWQgPSB0aGlzLmxvZ2ljYWxEaXNhYmxlZCB8fCB0aGlzLnZhbGlkYXRpb25zLmRpc2FibGVkIHx8IHRoaXMubWV0YS5kaXNhYmxlZCA9PT0gdHJ1ZVxuICAgICAgfHwgKHRoaXMubWV0YS51cGRhdGFibGUgPT09IGZhbHNlICYmIHRoaXMuaXNQZXJzaXN0ZWRQYXJlbnQpO1xuICAgIHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlTWV0YS5kaXNhYmxlZCA9IHN1cGVyRGlzYWJsZWQ7XG4gICAgcmV0dXJuIHN1cGVyRGlzYWJsZWQ7XG4gIH1cblxuICBnZXQgc2hvd1R5cGVzKCkge1xuICAgIHJldHVybiAodHlwZW9mICh0aGlzLm1ldGEuc2hvd1R5cGVzKSAhPT0gJ3VuZGVmaW5lZCcpID8gdGhpcy5tZXRhLnNob3dUeXBlcyA6IHRydWU7XG4gIH1cblxuICBnZXQgc3VnZ2VzdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc21hcnRTdWdnZXN0aW9ucy5jb25jYXQoXG4gICAgICAhdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGUucmVzb3VyY2VUeXBlID9cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgICAodGhpcy5hc3luY1N1Z2dlc3Rpb25zIHx8IHRoaXMubWV0YS5zdWdnZXN0aW9ucyB8fCBbXSkgOiAodGhpcy5hc3luY1N1Z2dlc3Rpb25zIHx8IHRoaXMubWV0YS5zdWdnZXN0aW9ucyB8fCBbXSkuZmlsdGVyKChzKSA9PiBzLnR5cGUgPT09IHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlLnJlc291cmNlVHlwZSlcbiAgICApO1xuICB9XG5cbiAgZ2V0IGhhc0FwcGVuZEJ1dHRvbigpIHtcbiAgICBpZiAoIXRoaXMubXVsdGlwbGUgJiYgdGhpcy5tb2RlbCkge1xuICAgICAgaWYgKHRoaXMuaXNQb2x5bW9ycGhpYykge1xuICAgICAgICBmb3IgKGNvbnN0IHJlZiBvZiB0aGlzLm1ldGFSZWZlcmVuY2UpIHtcbiAgICAgICAgICBpZiAoKHJlZi5uYW1lIHx8IHJlZi5yZXNvdXJjZVR5cGUpID09PSAodGhpcy5tb2RlbC50eXBlIHx8IHRoaXMubW9kZWwucmVzb3VyY2VUeXBlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZi51cGRhdGFibGUgfHwgKHJlZi5jcmVhdGFibGUgJiYgcmVmLnVwZGF0YWJsZSAhPT0gZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0YVJlZmVyZW5jZS51cGRhdGFibGUgfHwgKHRoaXMubWV0YVJlZmVyZW5jZS5jcmVhdGFibGUgJiYgdGhpcy5tZXRhUmVmZXJlbmNlLnVwZGF0YWJsZSAhPT0gZmFsc2UpOyAvLyBWR0lTLTY5MTFcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMubWV0YVJlZmVyZW5jZSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgLy8gdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGVzU2NvcGUgPSB0aGlzLm1ldGFSZWZlcmVuY2UubWFwKHJ0ID0+IHJ0Lm5hbWUpLmpvaW4oJywnKTtcbiAgICAgIC8vIH0sIDApO1xuICAgICAgZm9yIChjb25zdCBydCBvZiB0aGlzLm1ldGFSZWZlcmVuY2UpIHtcbiAgICAgICAgaWYgKHJ0LmNyZWF0YWJsZSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLm1ldGFSZWZlcmVuY2UuY3JlYXRhYmxlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2VhcmNoU3VnZ2VzdGlvbnMocGFyYW1zPykge1xuICAgIGxldCBzZWFyY2hVcmwgPSBgL3N1Z2dlc3Rpb25zLyR7dGhpcy5tZXRhLm5hbWV9L3NlYXJjaGA7XG4gICAgaWYgKHRoaXMubWV0YS5zZWFyY2gpIHtcbiAgICAgIGlmICh0aGlzLm1ldGEuc2VhcmNoLnVybCkge1xuICAgICAgICBzZWFyY2hVcmwgPSB0aGlzLm1ldGEuc2VhcmNoLnVybC5yZXBsYWNlKC9cXCR7XFxzKihbXFx3XFwuXSspXFxzKn0vZywgKG1hdGNoLCBrZXkpID0+IHtcbiAgICAgICAgICBpZiAocGFyYW1zLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9IHBhcmFtc1trZXldO1xuICAgICAgICAgICAgZGVsZXRlIHBhcmFtc1trZXldO1xuICAgICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgcCBvZiBPYmplY3Qua2V5cyhwYXJhbXMpKSB7XG4gICAgICAgIHNlYXJjaFVybCArPSBgJHtzZWFyY2hVcmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJ30ke2VuY29kZVVSSUNvbXBvbmVudChwKX09JHtlbmNvZGVVUklDb21wb25lbnQocGFyYW1zW3BdKX1gO1xuICAgICAgfVxuICAgICAgdGhpcy5zZWFyY2hpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5yZXNvdXJjZVNlcnZpY2UuZ2V0QnlQYXRoKHNlYXJjaFVybCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgZGVsZXRlIHRoaXMuc2VhcmNoaW5nO1xuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgbGV0IHN1Z2dlc3Rpb25zO1xuICAgICAgICAgIHN1Z2dlc3Rpb25zID0gcmVzdWx0O1xuICAgICAgICAgIGlmICh0aGlzLm1ldGEuc2VhcmNoLmV4dHJhY3QpIHtcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zID0gcmVzdWx0W3RoaXMubWV0YS5zZWFyY2guZXh0cmFjdF07XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzdWdnZXN0aW9ucyBpbnN0YW5jZW9mIEFycmF5ICE9PSB0cnVlKSB7XG4gICAgICAgICAgICBzdWdnZXN0aW9ucyA9IFtzdWdnZXN0aW9uc107XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGFzeW5jU3VnZ2VzdGlvbnMgPSBbXTtcbiAgICAgICAgICBzdWdnZXN0aW9ucy5mb3JFYWNoKChzKSA9PiB7XG4gICAgICAgICAgICBpZiAocyAmJiBzLmlkICYmIHMudHlwZSkgeyAvLyBUT09EIGNoZWNrIHRoZSB0eXBlIGlzIGFjY2VwdGFibGVcbiAgICAgICAgICAgICAgYXN5bmNTdWdnZXN0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBpZDogcy5pZCxcbiAgICAgICAgICAgICAgICBsYWJlbDogcy5sYWJlbCB8fCBgJHtzLnR5cGV9IyR7cy5pZH1gLFxuICAgICAgICAgICAgICAgIHR5cGU6IHMudHlwZVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoYXN5bmNTdWdnZXN0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChhc3luY1N1Z2dlc3Rpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICB0aGlzLnBhcmVudFt0aGlzLm1ldGEubmFtZV0gPSBhc3luY1N1Z2dlc3Rpb25zWzBdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuYXN5bmNTdWdnZXN0aW9ucztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5hc3luY1N1Z2dlc3Rpb25zID0gYXN5bmNTdWdnZXN0aW9ucztcbiAgICAgICAgfVxuICAgICAgfSwgKGVycikgPT4ge1xuICAgICAgICBkZWxldGUgdGhpcy5zZWFyY2hpbmc7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBnZXQgcmVzb3VyY2VTZXJ2aWNlKCkge1xuICAgIGlmICghdGhpcy5tZXRhUmVzb3VyY2VTZXJ2aWNlKSB7XG4gICAgICBjb25zdCBtZXRhUmVzb3VyY2VDb25maWc6IElNZXRhUmVzb3VyY2VDb25maWcgPSB7XG4gICAgICAgIGludGVncmF0aW9uQ29kZTogdGhpcy5pbnRlZ3JhdGlvbkNvZGUsXG4gICAgICAgIHJlc291cmNlVHlwZTogdGhpcy5yZXNvdXJjZVR5cGVcbiAgICAgIH07XG4gICAgICB0aGlzLm1ldGFSZXNvdXJjZVNlcnZpY2UgPSB0aGlzLm1ldGFSZXNvdXJjZS5uZXcobWV0YVJlc291cmNlQ29uZmlnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubWV0YVJlc291cmNlU2VydmljZTtcbiAgfVxuXG4gIGdldCBtZXRhUmVmZXJlbmNlKCkge1xuICAgIHJldHVybiB0aGlzLm1ldGEucmVmZXJlbmNlIHx8IHt9O1xuICB9XG59XG5cbi8vLy8gRklFTEQgTElTVFxuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlVXJsOiAnLi9maWVsZExpc3Qvdmlldy5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZmllbGRMaXN0L3N0eWxlLnNjc3MnXSxcbiAgdmlld1Byb3ZpZGVyczogW3sgcHJvdmlkZTogQ29udHJvbENvbnRhaW5lciwgdXNlRXhpc3Rpbmc6IE5nRm9ybSB9XVxufSlcbmV4cG9ydCBjbGFzcyBGaWVsZExpc3QgZXh0ZW5kcyBGaWVsZEFic3RyYWN0IGltcGxlbWVudHMgT25Jbml0IHtcbiAgaXRlbXM6IEFycmF5PGFueT4gPSBbXTtcbiAgdmFsdWU6IGFueTtcblxuICBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCBvcmlnVmFsdWUgPSB0aGlzLnBhcmVudFt0aGlzLm1ldGEubmFtZV07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMucGFyZW50LCB0aGlzLm1ldGEubmFtZSwge1xuICAgICAgc2V0OiAodmFsdWUpID0+IHtcbiAgICAgICAgdGhpcy5tb2RlbCA9IFtdO1xuICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBpIG9mIHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5tb2RlbC5pbmRleE9mKGkpID09PSAtMSkge1xuICAgICAgICAgICAgICB0aGlzLm1vZGVsLnB1c2goaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm1vZGVsO1xuICAgICAgICB0aGlzLm1ldGEuJG9wdGlvbmFsID0gdGhpcy5pc09wdGlvbmFsO1xuICAgICAgfSxcbiAgICAgIGdldDogKCkgPT4gdGhpcy52YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBpZiAob3JpZ1ZhbHVlKSB7XG4gICAgICB0aGlzLnBhcmVudFt0aGlzLm1ldGEubmFtZV0gPSBvcmlnVmFsdWU7XG4gICAgfVxuICAgIGlmICghdGhpcy5tb2RlbCAmJiB0aGlzLnZhbGlkYXRpb25zLm1pbikge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnZhbGlkYXRpb25zLm1pbjsgaSsrKSB7XG4gICAgICAgIHRoaXMuYWRkKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IGxpc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0YS5saXN0IHx8IHRoaXMubWV0YS5yZWZlcmVuY2U7XG4gIH1cblxuICBhZGQoKSB7XG4gICAgaWYgKCF0aGlzLm1vZGVsKSB7XG4gICAgICB0aGlzLm1vZGVsID0gW107XG4gICAgfVxuICAgIGlmICghdGhpcy52YWxpZGF0aW9ucy5tYXggfHwgKHRoaXMudmFsaWRhdGlvbnMubWF4ID4gdGhpcy5tb2RlbC5sZW5ndGgpKSB7XG4gICAgICB0aGlzLm1vZGVsLnB1c2goe30pO1xuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubW9kZWw7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlKGl0ZW1JbmRleCkge1xuICAgIHRoaXMubW9kZWwuc3BsaWNlKGl0ZW1JbmRleCwgMSk7XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMubW9kZWw7XG4gIH1cbn1cblxuLy8vLyBMQVlPVVRcbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndmdpcC1tZXRhLWxheW91dCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2xheW91dC92aWV3Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2xheW91dC9zdHlsZS5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTWV0YUxheW91dCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50Q2hlY2tlZCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgbWV0YTogYW55O1xuICBASW5wdXQoKSByZXNvdXJjZTogYW55O1xuICBASW5wdXQoKSBpbnRlZ3JhdGlvbjogYW55O1xuICBASW5wdXQoKSB0eXBlOiBhbnk7XG4gIEBJbnB1dCgpIHByZXZpZXc6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHRoZW1lOiBzdHJpbmc7XG5cbiAgb3B0aW9uYWxGaWVsZHM6IGFueSA9IHt9O1xuICBvcHRpb25hbEZpZWxkc0NvdW50OiBudW1iZXI7XG4gIHNob3dBbGwgPSBmYWxzZTtcbiAgZmllbGRzVmlzaWJpbGl0eUNoYW5nZWQ6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcbiAgcmVmRGlhbG9nRmFjdG9yeTogYW55O1xuICBwYXJlbnRGb3JtOiBIVE1MRm9ybUVsZW1lbnQ7XG4gIGludGVncmF0aW9uQ29kZTogc3RyaW5nO1xuICByZXNvdXJjZVR5cGU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgIHByaXZhdGUgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgbWV0YVJlc291cmNlOiBNZXRhUmVzb3VyY2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVmZXJlbmNlU2VydmljZTogTWV0YVJlZmVyZW5jZVNlcnZpY2VcbiAgKSB7XG4gICAgLy8gY29uc29sZS5sb2coJ01ldGFMYXlvdXQnLCB0aGlzLm1ldGEpO1xuXG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmludGVncmF0aW9uQ29kZSA9IHRoaXMubWV0YS5pbnRlZ3JhdGlvbkNvZGUgfHwgdGhpcy5pbnRlZ3JhdGlvbjtcbiAgICB0aGlzLnJlc291cmNlVHlwZSA9IHRoaXMubWV0YS5yZXNvdXJjZVR5cGUgfHwgdGhpcy50eXBlO1xuICAgIHRoaXMucGFyZW50Rm9ybSA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5jbG9zZXN0KCdmb3JtJyk7XG4gICAgdGhpcy5jb25maWd1cmVPcHRpb25hbFNlY3Rpb25zKCk7XG4gICAgXG4gICAgdGhpcy5maWVsZHNWaXNpYmlsaXR5Q2hhbmdlZC5waXBlKGRlYm91bmNlVGltZSgxMDApLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKS5zdWJzY3JpYmUoKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgIHRoaXMuY291bnRPcHRpb25hbEZpZWxkcygpO1xuICAgIH0pO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5jb3VudE9wdGlvbmFsRmllbGRzKCk7XG4gICAgfSwgMCk7XG5cbiAgICBpZiAodGhpcy5wYXJlbnRGb3JtKSB7XG4gICAgICB0aGlzLnBhcmVudEZvcm0uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKGUpID0+IHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5maWVsZHNWaXNpYmlsaXR5Q2hhbmdlZC5uZXh0KEpTT04uc3RyaW5naWZ5KHRoaXMucmVzb3VyY2UpKTtcbiAgICAgICAgICB0aGlzLmNvdW50T3B0aW9uYWxGaWVsZHMoKTtcbiAgICAgICAgfSwgMCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50aGVtZSAhPT0gJ2luaGVyaXQnKSB7XG4gICAgICB0aGlzLmFwcGx5VGhlbWUoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBhbnkpIHtcbiAgICBpZiAoY2hhbmdlcy5tZXRhKSB7XG4gICAgICB0aGlzLmNvbmZpZ3VyZU9wdGlvbmFsU2VjdGlvbnMoKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmNvdW50T3B0aW9uYWxGaWVsZHMoKTtcbiAgICAgIH0sIDApO1xuICAgIH0gZWxzZSBpZiAoY2hhbmdlcy50aGVtZSkge1xuICAgICAgdGhpcy50aGVtZSA9IGNoYW5nZXMudGhlbWUuY3VycmVudFZhbHVlO1xuICAgICAgdGhpcy5hcHBseVRoZW1lKCk7XG4gICAgfVxuICB9XG5cbiAgY291bnRPcHRpb25hbEZpZWxkcygpIHtcbiAgICBsZXQgY291bnQgPSAwO1xuICAgIGNvbnN0IGNvdW50U2VjdGlvbkZpZWxkcyA9IChzKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGYgb2Ygcy5maWVsZHMpIHtcbiAgICAgICAgaWYgKGYuZmllbGRzICYmIGYuZmllbGRzLmxlbmd0aCAmJiAhZi52aXNpYmxlKSB7XG4gICAgICAgICAgY291bnRTZWN0aW9uRmllbGRzKGYpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChmLiRvcHRpb25hbCAmJiAhZi4kaGlkZGVuKSB7XG4gICAgICAgICAgICBjb3VudCsrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgZm9yIChjb25zdCBzIG9mIHRoaXMubWV0YS5zZWN0aW9ucykge1xuICAgICAgY29uc3Qgbm90T3B0aW9uYWxBbnkgPSBzLmZpZWxkcy5maW5kKGYgPT4gIWYuJG9wdGlvbmFsKTtcbiAgICAgIHMuJG9wdGlvbmFsID0gIW5vdE9wdGlvbmFsQW55O1xuICAgICAgaWYgKCFzLnZpc2libGUpIHtcbiAgICAgICAgY291bnRTZWN0aW9uRmllbGRzKHMpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm9wdGlvbmFsRmllbGRzQ291bnQgPSBjb3VudDtcbiAgfVxuXG4gIGNvbmZpZ3VyZU9wdGlvbmFsU2VjdGlvbnMoKSB7XG4gICAgaWYgKHRoaXMubWV0YSAmJiB0aGlzLm1ldGEuc2VjdGlvbnMpIHtcbiAgICAgIGZvciAoY29uc3QgcyBvZiB0aGlzLm1ldGEuc2VjdGlvbnMpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHMsICckb3B0aW9uYWwnLCB7XG4gICAgICAgICAgdmFsdWU6IHRydWUsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpIHtcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICB0b2dnbGVPcHRpb25hbEZpZWxkcygpIHtcbiAgICB0aGlzLnNob3dBbGwgPSAhdGhpcy5zaG93QWxsO1xuICAgIHRoaXMubmdBZnRlckNvbnRlbnRDaGVja2VkKCk7XG4gIH1cblxuICBvcGVuQ2hpbGQoY2hpbGRSZXNvdXJjZSwgY2hpbGRNb2RlbD8pIHtcbiAgICBjaGlsZFJlc291cmNlLnJlZmVyZW5jZS5wYXJlbnQgPSB0aGlzLnJlc291cmNlLl92Z2lzOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVyc2NvcmUtZGFuZ2xlXG4gICAgaWYgKCF0aGlzLnJlZkRpYWxvZ0ZhY3RvcnkpIHtcbiAgICAgIHRoaXMucmVmRGlhbG9nRmFjdG9yeSA9IHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KE1ldGFSZWZEaWFsb2cpO1xuICAgIH1cbiAgICB0aGlzLnJlZmVyZW5jZVNlcnZpY2Uub3BlbkRpYWxvZyhcbiAgICAgIHRoaXMucmVmRGlhbG9nRmFjdG9yeSwgdGhpcy5tZXRhUmVzb3VyY2UsIHRoaXMuaW50ZWdyYXRpb25Db2RlLCBjaGlsZFJlc291cmNlLnJlZmVyZW5jZSwgY2hpbGRNb2RlbCwgXG4gICAgICBjaGlsZE1vZGVsICYmIChjaGlsZFJlc291cmNlLnJlZmVyZW5jZS5lZGl0YWJsZSA9PT0gZmFsc2UpIC8vIGlzIHByZXZpZXcgbW9kZVxuICAgICkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQucmF3KSB7XG4gICAgICAgIGlmICghdGhpcy5yZXNvdXJjZVtjaGlsZFJlc291cmNlLm5hbWVdKSB7XG4gICAgICAgICAgdGhpcy5yZXNvdXJjZVtjaGlsZFJlc291cmNlLm5hbWVdID0gW107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZXNvdXJjZVtjaGlsZFJlc291cmNlLm5hbWVdLnB1c2gocmVzdWx0LnJhdyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXQgaXNQZXJzaXN0ZWRSZXNvdXJjZSgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZXJzY29yZS1kYW5nbGVcbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZSAmJiB0aGlzLnJlc291cmNlLl92Z2lzICYmICh0aGlzLnJlc291cmNlLl92Z2lzLmV4dGVybmFsSWQgfHwgdGhpcy5yZXNvdXJjZS5fdmdpcy5pZCApO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVRoZW1lKCkge1xuICAgIGNvbnN0IG1ldGFUaGVtZSA9IHRoaXMudGhlbWUgPT09ICdkYXJrJyA/IG1ldGFEYXJrIDogbWV0YUxpZ2h0O1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG1ldGFUaGVtZS5wcm9wZXJ0aWVzKSkge1xuICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KGtleSwgbWV0YVRoZW1lLnByb3BlcnRpZXNba2V5XSk7XG4gICAgfVxuICB9XG59XG5cbi8vLy8gUkVTT1VSQ0VcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZnaXAtbWV0YS1yZXNvdXJjZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9yZXNvdXJjZS92aWV3Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yZXNvdXJjZS9zdHlsZS5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTWV0YVJlc291cmNlIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSByZXNvdXJjZTogYW55O1xuICBASW5wdXQoKSBtb2RlbDogYW55O1xuICBASW5wdXQoKSBtZXRhUmVzb3VyY2VTZXJ2aWNlRGVsZWdhdGVkOiBNZXRhUmVzb3VyY2VTZXJ2aWNlOyAvLyBjYXJ5IGl0IGZyb20gdGhlIHBhcmVudCB0byBrZWVwIHRoZSBpbnRlcmNlcHRvcnNcbiAgQElucHV0KCkgdGhlbWU6IHN0cmluZztcbiAgQE91dHB1dCgpIHB1YmxpYyBkb25lID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIGludGVncmF0aW9uQ29kZTogc3RyaW5nO1xuICByZXNvdXJjZVR5cGU6IHN0cmluZztcbiAgbWV0YTogYW55O1xuICBzZXJ2aWNlOiBNZXRhUmVzb3VyY2VTZXJ2aWNlO1xuICBjdXJyZW50TGF5b3V0SWQ6IGFueTtcbiAgZm9ybUVycm9yczogYW55O1xuICBmaWVsZHNNYXA6IGFueTtcbiAgZWRpdCA9IHRydWU7XG4gIGJ1c3k6IGJvb2xlYW47XG4gIG1ldGFMb2FkaW5nOiBib29sZWFuO1xuICBnZW5lcmFsRXJyb3I6IHN0cmluZztcbiAgcmVzb3VyY2VNZW51VmlzaWJsZTogYm9vbGVhbjtcbiAgY29udGFjdHNTdWdnZXN0aW9uc0RvbmUgPSBmYWxzZTtcbiAgaXNFZGl0YWJsZTogYm9vbGVhbjtcbiAgaXNQZXJzaXN0ZW50OiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgcHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBtZXRhUmVzb3VyY2VTZXJ2aWNlOiBNZXRhUmVzb3VyY2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgbWV0YUNvbnRleHQ6IE1ldGFDb250ZXh0U2VydmljZSxcbiAgICBwcml2YXRlIG1ldGFNc2dTZXJ2aWNlOiBNZXRhTXNnU2VydmljZVxuICApIHtcblxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5pbnRlZ3JhdGlvbkNvZGUgPSAodGhpcy5yZXNvdXJjZS5pbnRlZ3JhdGlvbkNvZGUgfHwgJycpLnRvVXBwZXJDYXNlKCk7XG4gICAgdGhpcy5yZXNvdXJjZVR5cGUgPSB0aGlzLnJlc291cmNlLnJlc291cmNlVHlwZTtcbiAgICB0aGlzLnNlcnZpY2UgPSAodGhpcy5tZXRhUmVzb3VyY2VTZXJ2aWNlRGVsZWdhdGVkIHx8IHRoaXMubWV0YVJlc291cmNlU2VydmljZSkubmV3KHRoaXMucmVzb3VyY2UpO1xuICAgIGlmICghdGhpcy5tb2RlbCkge1xuICAgICAgdGhpcy5tb2RlbCA9IHt9O1xuICAgIH1cbiAgICBpZiAodGhpcy5yZXNvdXJjZS5yZWYgJiYgdGhpcy5yZXNvdXJjZS5yZWYuYWN0aXZpdHkpIHsgLy8gcmV1c2UgZmFpbGVkIGF1dG9hY3Rpdml0aWVzIGRhdGEgXG4gICAgICB0aGlzLm1vZGVsID0gdGhpcy5yZXNvdXJjZS5yZWYuYWN0aXZpdHk7XG4gICAgfVxuICAgIGlmICh0aGlzLnJlc291cmNlLmFjdGl2aXR5ICYmIHRoaXMucmVzb3VyY2UucmVmLmVkaXRhYmxlID09PSBmYWxzZSAmJiAhdGhpcy5yZXNvdXJjZS5leHRlcm5hbElkKSB7XG4gICAgICB0aGlzLnJlc291cmNlLmV4dGVybmFsSWQgPSAnTUlTU0lOR19FWFRFUk5BTF9JRCc7XG4gICAgfVxuICAgIHRoaXMuaXNQZXJzaXN0ZW50ID0gdGhpcy5yZXNvdXJjZSAmJiB0aGlzLnJlc291cmNlLmV4dGVybmFsSWQ7XG4gICAgaWYgKCF0aGlzLnJlc291cmNlLm1ldGEpIHtcbiAgICAgIHRoaXMubG9hZE1ldGFkYXRhKHRoaXMucmVzb3VyY2UubGF5b3V0SWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyAgIGlmICh0aGlzLmlzUGVyc2lzdGVudCAmJiAoIXRoaXMuaXNFZGl0YWJsZSB8fCB0aGlzLnJlc291cmNlc1tyZWYubmFtZV0ubWV0YS5sYXlvdXQuY2hpbGRyZW4pKSB7XG4gICAgICAvLyAgICAgdGhpcy5lZGl0ID0gZmFsc2U7XG4gICAgICAvLyAgIH1cbiAgICAgIHRoaXMubWV0YSA9IHRoaXMucmVzb3VyY2UubWV0YTtcbiAgICAgIHRoaXMuY3VycmVudExheW91dElkID0gdGhpcy5tZXRhLmxheW91dC5pZDtcbiAgICAgIHRoaXMuZ2V0RGV0YWlscygpO1xuICAgICAgdGhpcy5nZXRGaWVsZHNNYXAoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGhlbWUgIT09ICdpbmhlcml0Jykge1xuICAgICAgdGhpcy5hcHBseVRoZW1lKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogYW55KSB7XG4gICAgaWYgKGNoYW5nZXMudGhlbWUpIHtcbiAgICAgIHRoaXMudGhlbWUgPSBjaGFuZ2VzLnRoZW1lLmN1cnJlbnRWYWx1ZTtcbiAgICAgIGlmICh0aGlzLnRoZW1lICE9PSAnaW5oZXJpdCcpIHtcbiAgICAgICAgdGhpcy5hcHBseVRoZW1lKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZWRpdE1vZGUoKSB7XG4gICAgdGhpcy5lZGl0ID0gdHJ1ZTtcbiAgfVxuXG4gIGxvYWRNZXRhZGF0YShsYXlvdXRJZD8sIHJlZnJlc2ggPSBmYWxzZSkge1xuICAgIGNvbnN0IGxheW91dFN0b3JlS2V5ID0gYHZnaXMubGF5b3V0XyR7dGhpcy5tZXRhQ29udGV4dC52Z2lwVXNlcklkfV8ke3RoaXMuaW50ZWdyYXRpb25Db2RlfV8ke3RoaXMucmVzb3VyY2UucmVzb3VyY2VUeXBlfWA7XG4gICAgaWYgKCFsYXlvdXRJZCkge1xuICAgICAgbGF5b3V0SWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShsYXlvdXRTdG9yZUtleSk7XG4gICAgfVxuICAgIHRoaXMuYnVzeSA9IHRydWU7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLm1ldGFMb2FkaW5nID0gdHJ1ZTtcbiAgICB9LCAwKTtcbiAgICBkZWxldGUgdGhpcy5yZXNvdXJjZS5uaWNlRmllbGRzO1xuICAgIHRoaXMuc2VydmljZS5nZXRNZXRhZGF0YShsYXlvdXRJZCwgcmVmcmVzaCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChtZXRhOiBhbnkpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ21ldGEnLCBtZXRhLCB0aGlzLnNlcnZpY2UpO1xuICAgICAgICB0aGlzLmN1cnJlbnRMYXlvdXRJZCA9IG1ldGEubGF5b3V0LmlkO1xuICAgICAgICBpZiAobGF5b3V0SWQgIT09IG1ldGEubGF5b3V0LmlkICYmICF0aGlzLmlzUGVyc2lzdGVudCkge1xuICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGxheW91dFN0b3JlS2V5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1ldGEgPSBtZXRhTm9ybWFsaXplcihtZXRhLCB0aGlzLmludGVncmF0aW9uQ29kZSwgdGhpcy5yZXNvdXJjZS5yZXNvdXJjZVR5cGUpO1xuICAgICAgICB0aGlzLmlzRWRpdGFibGUgPSB0aGlzLm1ldGEubGF5b3V0ICYmIHRoaXMubWV0YS5sYXlvdXQuZWRpdGFibGUgIT09IGZhbHNlO1xuICAgICAgICB0aGlzLnJlc291cmNlLm1ldGEgPSB0aGlzLm1ldGE7XG4gICAgICAgIGlmICh0aGlzLmlzUGVyc2lzdGVudCAmJiAoIXRoaXMuaXNFZGl0YWJsZSB8fCB0aGlzLm1ldGEubGF5b3V0LmNoaWxkcmVuKSkge1xuICAgICAgICAgIHRoaXMuZWRpdCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZSB0aGlzLmJ1c3k7XG4gICAgICAgIHRoaXMuZ2V0RGV0YWlscygpO1xuICAgICAgICB0aGlzLmdldEZpZWxkc01hcCgpO1xuICAgICAgfSwgXG4gICAgICBlcnJvcjogKG1ldGFFcnJvcjogYW55KSA9PiB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmJ1c3k7XG4gICAgICAgIHRoaXMuZ2VuZXJhbEVycm9yID0gYEVycm9yIGxvYWRpbmcgcmVzb3VyY2UgbWV0YWRhdGEgKCR7bWV0YUVycm9yLnN0YXR1c1RleHR9KWA7XG4gICAgICB9LCBcbiAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLm1ldGFMb2FkaW5nO1xuICAgICAgICB0aGlzLmZvcmNlVWlVcGRhdGUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNoYW5nZUxheW91dCgpIHtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcbiAgICAgIGB2Z2lzLmxheW91dF8ke3RoaXMubWV0YUNvbnRleHQudmdpcFVzZXJJZH1fJHt0aGlzLmludGVncmF0aW9uQ29kZX1fJHt0aGlzLnJlc291cmNlLnJlc291cmNlVHlwZX1gLCBcbiAgICAgIHRoaXMuY3VycmVudExheW91dElkXG4gICAgKTtcbiAgICB0aGlzLmxvYWRNZXRhZGF0YSh0aGlzLmN1cnJlbnRMYXlvdXRJZCk7XG4gIH1cblxuICBnZXREZXRhaWxzKCkge1xuICAgIGlmICh0aGlzLnJlc291cmNlICYmICh0aGlzLnJlc291cmNlLmV4dGVybmFsSWQgfHwgdGhpcy5yZXNvdXJjZS5pZCkpIHtcbiAgICAgIGlmICh0aGlzLnJlc291cmNlLnBhcmVudCAmJiB0aGlzLnJlc291cmNlLmFjdGl2aXR5IC8vIHNraXAgZmV0Y2hcbiAgICAgICAgJiYgdGhpcy5tZXRhLmxheW91dC5lZGl0YWJsZSA9PT0gZmFsc2UgJiYgIXRoaXMubWV0YS5sYXlvdXQuY2hpbGRyZW5cbiAgICAgICkge1xuICAgICAgICBmb3IgKGNvbnN0IHAgaW4gdGhpcy5yZXNvdXJjZS5hY3Rpdml0eSkge1xuICAgICAgICAgIGlmICh0aGlzLnJlc291cmNlLmFjdGl2aXR5W3BdICYmIHRoaXMuZmllbGROYW1lcy5pbmRleE9mKHApICE9PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5tb2RlbFtwXSA9IHRoaXMucmVzb3VyY2UuYWN0aXZpdHlbcF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmJ1c3kgPSB0cnVlO1xuICAgICAgICB0aGlzLnNlcnZpY2UuZ2V0RGV0YWlscyhcbiAgICAgICAgICAodGhpcy5yZXNvdXJjZS5leHRlcm5hbElkIHx8IHRoaXMucmVzb3VyY2UuaWQpLCB7IFxuICAgICAgICAgICAgZXZlbnRJZDogdGhpcy5yZXNvdXJjZS5ldmVudElkICE9PSAnTk9fRVZFTlQnID8gdGhpcy5yZXNvdXJjZS5ldmVudElkIDogbnVsbCwgbGF5b3V0SWQ6IHRoaXMucmVzb3VyY2UubGF5b3V0SWQgXG4gICAgICAgICAgfVxuICAgICAgICApLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogKHJlc291cmNlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVyc2NvcmUtZGFuZ2xlICovXG4gICAgICAgICAgICBpZiAocmVzb3VyY2UuX3ZnaXMpIHsgXG4gICAgICAgICAgICAgIGlmIChyZXNvdXJjZS5fdmdpcy5ldmVudElkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tZXRhQ29udGV4dC52Z2lwRXZlbnRJZCA9IHJlc291cmNlLl92Z2lzLmV2ZW50SWQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHJlc291cmNlLmxheW91dElkICYmIHJlc291cmNlLl92Z2lzLmxheW91dElkICE9PSB0aGlzLmN1cnJlbnRMYXlvdXRJZCkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZE1ldGFkYXRhKHJlc291cmNlLl92Z2lzLmxheW91dElkKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyogZXNsaW50LWVuYWJsZSBuby11bmRlcnNjb3JlLWRhbmdsZSAqL1xuICAgICAgICAgICAgZm9yIChjb25zdCBwIGluIHJlc291cmNlKSB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YocmVzb3VyY2VbcF0gIT09ICd1bmRlZmluZWQnKSAmJiAodGhpcy5maWVsZE5hbWVzLmluZGV4T2YocCkgIT09IC0xIHx8IHAgPT09ICdfdmdpcycpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbFtwXSA9IHJlc291cmNlW3BdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5idXN5O1xuICAgICAgICAgIH0sIFxuICAgICAgICAgIGVycm9yOiAocmVzb3VyY2VFcnJvcikgPT4ge1xuICAgICAgICAgICAgdGhpcy5nZW5lcmFsRXJyb3IgPSByZXNvdXJjZUVycm9yLmVycm9yID8gcmVzb3VyY2VFcnJvci5lcnJvci5tZXNzYWdlIHx8IHJlc291cmNlRXJyb3IubWVzc2FnZSA6IHJlc291cmNlRXJyb3IubWVzc2FnZTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmJ1c3k7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mb3JjZVVpVXBkYXRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wZXJmb3JtQXV0b0ZpbGwoKTtcbiAgICB9XG4gIH1cblxuICBwZXJmb3JtQXV0b0ZpbGwoKSB7XG4gICAgdGhpcy5tZXRhTXNnU2VydmljZS5zZW5kTWVzc2FnZShcbiAgICAgIHRoaXMuaW50ZWdyYXRpb25Db2RlLCBcbiAgICAgIHsgXG4gICAgICAgIGFjdGlvbjogJ2F1dG9GaWxsJyxcbiAgICAgICAgaW50ZWdyYXRpb246IHRoaXMuaW50ZWdyYXRpb25Db2RlLFxuICAgICAgICByZXNvdXJjZVR5cGU6IHRoaXMucmVzb3VyY2VUeXBlLFxuICAgICAgICByZXNvdXJjZTogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLm1vZGVsKSksXG4gICAgICAgIGZpZWxkczogdGhpcy5uaWNlRmllbGRzLFxuICAgICAgICBldmVudDogdGhpcy5tZXRhQ29udGV4dC5jb250ZXh0LCBcbiAgICAgICAgcHJvZmlsZTogdGhpcy5tZXRhQ29udGV4dC5wcm9maWxlc1t0aGlzLmludGVncmF0aW9uQ29kZV1cbiAgICAgIH0sXG4gICAgICAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKCFyZXNwb25zZS5lcnJvcikge1xuICAgICAgICAgIGZvciAoY29uc3QgYWZwIGluIHJlc3BvbnNlLmF1dG9GaWxsKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMubW9kZWxbYWZwXSkge1xuICAgICAgICAgICAgICB0aGlzLm1vZGVsW2FmcF0gPSByZXNwb25zZS5hdXRvRmlsbFthZnBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBnZXRGaWVsZHNNYXAoKSB7XG4gICAgaWYgKHRoaXMubWV0YS5maWVsZHNNYXApIHtcbiAgICAgIHRoaXMuZmllbGRzTWFwID0gdGhpcy5tZXRhLmZpZWxkc01hcDtcbiAgICAgIHRoaXMubWFya0NvbnRhY3RhYmxlcygpO1xuICAgICAgdGhpcy5idWlsZENvbnRhY3RzU3VnZ2VzdGlvbnMoKTtcbiAgICAgIGlmICghdGhpcy5yZXNvdXJjZS5leHRlcm5hbElkKSB7XG4gICAgICAgIHRoaXMuYnVpbGRTdWJqZWN0VGVtcGxhdGUoKTtcbiAgICAgICAgdGhpcy5leGVjVHJhbnNmb3JtZXIoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tZXRhTXNnU2VydmljZS5zZW5kTWVzc2FnZShcbiAgICAgICAgdGhpcy5pbnRlZ3JhdGlvbkNvZGUsIFxuICAgICAgICB7IGFjdGlvbjogJ2ZpZWxkc01hcCcsIGludGVncmF0aW9uOiB0aGlzLmludGVncmF0aW9uQ29kZSwgcmVzb3VyY2VUeXBlOiB0aGlzLnJlc291cmNlVHlwZSB9LFxuICAgICAgICAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBpZiAoIXJlc3BvbnNlLmVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLmZpZWxkc01hcCA9IHJlc3BvbnNlLmZpZWxkc01hcDtcbiAgICAgICAgICAgIHRoaXMubWFya0NvbnRhY3RhYmxlcygpO1xuICAgICAgICAgICAgdGhpcy5idWlsZENvbnRhY3RzU3VnZ2VzdGlvbnMoKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5yZXNvdXJjZS5leHRlcm5hbElkKSB7XG4gICAgICAgICAgICAgIHRoaXMuYnVpbGRTdWJqZWN0VGVtcGxhdGUoKTtcbiAgICAgICAgICAgICAgdGhpcy5leGVjVHJhbnNmb3JtZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ05vIGZpZWxkcyBtYXAnLCB0aGlzLmludGVncmF0aW9uQ29kZSwgdGhpcy5yZXNvdXJjZVR5cGUsIHJlc3BvbnNlLmVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgb3BlblJlc291cmNlTWVudSgpIHtcbiAgICB0aGlzLnJlc291cmNlTWVudVZpc2libGUgPSB0cnVlO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9uTWVudUNsaWNrb3V0KTtcbiAgICB9LCAxMCk7XG4gIH1cblxuICBjbG9zZShyZXN1bHQ/KSB7XG4gICAgdGhpcy5kb25lLmVtaXQocmVzdWx0KTtcbiAgfVxuXG4gIHN1Ym1pdChyZXNvdXJjZUZvcm0pIHtcbiAgICBkZWxldGUgdGhpcy5mb3JtRXJyb3JzO1xuICAgIHJlc291cmNlRm9ybS5mb3JtLnN1Ym1pdHRlZCA9IHRydWU7XG4gICAgaWYgKHJlc291cmNlRm9ybS52YWxpZCkge1xuICAgICAgdGhpcy5idXN5ID0gdHJ1ZTtcbiAgICAgIGlmICh0aGlzLm1ldGFDb250ZXh0LnZnaXBFdmVudElkKSB7XG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVyc2NvcmUtZGFuZ2xlICovXG4gICAgICAgIGlmICghdGhpcy5tb2RlbC5fdmdpcykge1xuICAgICAgICAgIHRoaXMubW9kZWwuX3ZnaXMgPSB7XG4gICAgICAgICAgICBjb25uZWN0b3I6IHRoaXMuaW50ZWdyYXRpb25Db2RlLFxuICAgICAgICAgICAgcmVzb3VyY2VUeXBlOiB0aGlzLnJlc291cmNlVHlwZVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tb2RlbC5fdmdpcy5sYXlvdXRJZCA9IHRoaXMuY3VycmVudExheW91dElkO1xuICAgICAgICB0aGlzLm1vZGVsLl92Z2lzLnRpbWVab25lT2Zmc2V0SW5NaW51dGVzID0gbmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgICAgICB0aGlzLm1vZGVsLl92Z2lzLmV2ZW50SWQgPSB0aGlzLm1ldGFDb250ZXh0LnZnaXBFdmVudElkO1xuICAgICAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLXVuZGVyc2NvcmUtZGFuZ2xlICovXG4gICAgICB9XG4gICAgICB0aGlzLnNlcnZpY2Uuc2F2ZSh0aGlzLm1vZGVsKS5zdWJzY3JpYmUoKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuY2xvc2UocmVzdWx0KTtcbiAgICAgICAgZGVsZXRlIHRoaXMuYnVzeTtcbiAgICAgIH0sIChlcnJvclJlc3VsdCkgPT4ge1xuICAgICAgICB0aGlzLmZvcm1FcnJvcnMgPSBlcnJvclJlc3VsdC5lcnJvcjtcbiAgICAgICAgZGVsZXRlIHRoaXMuYnVzeTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvcm1FcnJvcnMgPSBPYmplY3Qua2V5cyhyZXNvdXJjZUZvcm0uY29udHJvbHMpXG4gICAgICAgIC5maWx0ZXIoKGMpID0+IHJlc291cmNlRm9ybS5jb250cm9sc1tjXS5pbnZhbGlkKS5qb2luKCcsICcpO1xuICAgICAgICAvLyAubWFwKChmKSA9PiB0aGlzLm5pY2VGaWVsZHModGhpcy5jdXJyZW50UmVzb3VyY2UpLmxhYmVsKS5qb2luKCcsICcpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNlbGVjdG9yID0gYGZvcm1bbmFtZT1cIiR7dGhpcy5yZXNvdXJjZVR5cGV9XCJdIC5WbHQtZm9ybV9fZWxlbWVudC0tZXJyb3IgLm1haW46bm90KC5zdGFuZGFsb25lKWA7XG4gICAgICAgIGNvbnN0IGZpcnN0SW52YWxpZDogSFRNTElucHV0RWxlbWVudCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcbiAgICAgICAgaWYgKGZpcnN0SW52YWxpZCkge1xuICAgICAgICAgIGZpcnN0SW52YWxpZC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjbGVhckZvcm1FcnJvcnMoKSB7XG4gICAgZGVsZXRlIHRoaXMuZm9ybUVycm9ycztcbiAgfVxuXG4gIGdldCBuaWNlRmllbGRzKCkge1xuICAgIGlmIChcbiAgICAgICF0aGlzLnJlc291cmNlLm5pY2VGaWVsZHNcbiAgICAgICYmIHRoaXMucmVzb3VyY2UubWV0YVxuICAgICAgJiYgdGhpcy5yZXNvdXJjZS5tZXRhLmxheW91dFxuICAgICAgJiYgdGhpcy5yZXNvdXJjZS5tZXRhLmxheW91dC5zZWN0aW9uc1xuICAgICkge1xuICAgICAgY29uc3QgZXh0cmFjdFNlY3Rpb25GaWVsZHMgPSAocykgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGYgb2Ygcy5maWVsZHMpIHtcbiAgICAgICAgICBpZiAoZi5maWVsZHMgJiYgZi5maWVsZHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBleHRyYWN0U2VjdGlvbkZpZWxkcyhmKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZXNvdXJjZS5uaWNlRmllbGRzW2YubmFtZV0gPSBmO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHRoaXMucmVzb3VyY2UubmljZUZpZWxkcyA9IHt9O1xuICAgICAgZm9yIChjb25zdCBzIG9mIHRoaXMucmVzb3VyY2UubWV0YS5sYXlvdXQuc2VjdGlvbnMpIHtcbiAgICAgICAgZXh0cmFjdFNlY3Rpb25GaWVsZHMocyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJlc291cmNlLm5pY2VGaWVsZHM7XG4gIH1cblxuICBnZXQgZmllbGROYW1lcygpIHtcbiAgICBjb25zdCBuYW1lcyA9IE9iamVjdC5rZXlzKHRoaXMubmljZUZpZWxkcyk7XG4gICAgaWYgKHRoaXMucmVzb3VyY2UubWV0YS5sYXlvdXQuY2hpbGRyZW4pIHtcbiAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpcy5yZXNvdXJjZS5tZXRhLmxheW91dC5jaGlsZHJlbikge1xuICAgICAgICBuYW1lcy5wdXNoKGNoaWxkLm5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmFtZXM7XG4gIH1cblxuICBwcml2YXRlIG9uTWVudUNsaWNrb3V0ID0gKCkgPT4ge1xuICAgIGRlbGV0ZSB0aGlzLnJlc291cmNlTWVudVZpc2libGU7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9uTWVudUNsaWNrb3V0KTtcbiAgfTtcblxuICBwcml2YXRlIHN1Z2dlc3RGaWVsZFByb3BlcnR5KGtleSwgdmFsdWUpIHtcbiAgICBpZiAoa2V5ICYmIHZhbHVlKSB7XG4gICAgICBjb25zdCBmaWVsZE5hbWVzID0gdGhpcy5maWVsZE5hbWVzO1xuICAgICAgaWYgKHRoaXMubW9kZWwpIHtcbiAgICAgICAgY29uc3QgbmVzdE1hdGNoID0ga2V5Lm1hdGNoKC8oXFxTKylcXFtcXGRcXF1cXC4oXFxTKykvKTtcbiAgICAgICAgaWYgKG5lc3RNYXRjaCAmJiBmaWVsZE5hbWVzLmluZGV4T2YobmVzdE1hdGNoWzFdKSAhPT0gLTEpIHtcbiAgICAgICAgICB0aGlzLm1vZGVsW25lc3RNYXRjaFsxXV0gPSBbXTtcbiAgICAgICAgICBjb25zdCBuZXN0S2V5czogYW55ID0ge307XG4gICAgICAgICAgbmVzdEtleXNbbmVzdE1hdGNoWzJdXSA9IHZhbHVlO1xuICAgICAgICAgIHRoaXMubW9kZWxbbmVzdE1hdGNoWzFdXS5wdXNoKG5lc3RLZXlzKTtcbiAgICAgICAgfSBlbHNlIGlmIChmaWVsZE5hbWVzLmluZGV4T2Yoa2V5KSAhPT0gLTEpIHtcbiAgICAgICAgICB0aGlzLm1vZGVsW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZXhlY1RyYW5zZm9ybWVyKCkge1xuICAgIGlmICh0aGlzLm1ldGFDb250ZXh0ICYmIHRoaXMuZmllbGRzTWFwKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5zdWdnZXN0RmllbGRQcm9wZXJ0eSh0aGlzLmZpZWxkc01hcC5waG9uZU51bWJlciwgdGhpcy5tZXRhQ29udGV4dC5waG9uZU51bWJlcik7XG4gICAgICAgIGlmICh0aGlzLmZpZWxkc01hcC5maXJzdE5hbWUgfHwgdGhpcy5maWVsZHNNYXAubGFzdE5hbWUpIHtcbiAgICAgICAgICBjb25zdCBuYW1lcyA9ICh0aGlzLm1ldGFDb250ZXh0LmRpc3BsYXlOYW1lIHx8ICcnKS5zcGxpdCgnICcpO1xuICAgICAgICAgIHRoaXMuc3VnZ2VzdEZpZWxkUHJvcGVydHkodGhpcy5maWVsZHNNYXAuZmlyc3ROYW1lLCBuYW1lc1swXSk7XG4gICAgICAgICAgdGhpcy5zdWdnZXN0RmllbGRQcm9wZXJ0eSh0aGlzLmZpZWxkc01hcC5sYXN0TmFtZSwgbmFtZXNbMV0pO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZmllbGRzTWFwLmRpc3BsYXlOYW1lKSB7XG4gICAgICAgICAgdGhpcy5zdWdnZXN0RmllbGRQcm9wZXJ0eSh0aGlzLmZpZWxkc01hcC5kaXNwbGF5TmFtZSwgdGhpcy5tZXRhQ29udGV4dC5kaXNwbGF5TmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH0sIDEwMCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXJrQ29udGFjdGFibGVzKCkge1xuICAgIGlmICh0aGlzLmZpZWxkc01hcC5jb250YWN0YWJsZXMgJiYgdGhpcy5maWVsZHNNYXAuY29udGFjdGFibGVzLmxlbmd0aCkge1xuICAgICAgZm9yIChjb25zdCBjIG9mIHRoaXMuZmllbGRzTWFwLmNvbnRhY3RhYmxlcykge1xuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMubmljZUZpZWxkc1tjXTtcbiAgICAgICAgaWYgKGZpZWxkKSB7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZpZWxkLCAnJGlzQ29udGFjdGFibGUnLCB7XG4gICAgICAgICAgICB2YWx1ZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU3ViamVjdFRlbXBsYXRlKCkge1xuICAgIGlmICghdGhpcy5tb2RlbFt0aGlzLmZpZWxkc01hcC5zdWJqZWN0XSAmJiB0aGlzLmZpZWxkc01hcC5zdWJqZWN0ICYmIHRoaXMubmljZUZpZWxkc1t0aGlzLmZpZWxkc01hcC5zdWJqZWN0XSkge1xuICAgICAgbGV0IHN1YmplY3RUZW1wbGF0ZTogc3RyaW5nO1xuICAgICAgaWYgKHRoaXMubmljZUZpZWxkc1t0aGlzLmZpZWxkc01hcC5zdWJqZWN0XS5kZWZhdWx0KSB7XG4gICAgICAgIHN1YmplY3RUZW1wbGF0ZSA9IHRoaXMubmljZUZpZWxkc1t0aGlzLmZpZWxkc01hcC5zdWJqZWN0XS5kZWZhdWx0LmlkIHx8IHRoaXMubmljZUZpZWxkc1t0aGlzLmZpZWxkc01hcC5zdWJqZWN0XS5kZWZhdWx0O1xuICAgICAgfSBlbHNlIGlmICh0aGlzLm1ldGFDb250ZXh0LnByb2ZpbGVzW3RoaXMuaW50ZWdyYXRpb25Db2RlXSkge1xuICAgICAgICBjb25zdCBwcm9maWxlID0gdGhpcy5tZXRhQ29udGV4dC5wcm9maWxlc1t0aGlzLmludGVncmF0aW9uQ29kZV0gfHwge307XG4gICAgICAgIHN1YmplY3RUZW1wbGF0ZSA9IHByb2ZpbGUuZGVmYXVsdFN1YmplY3QgPyBcbiAgICAgICAgICBwcm9maWxlLmRlZmF1bHRTdWJqZWN0WygodGhpcy5tZXRhQ29udGV4dC5jb250ZXh0IHx8ICdDQUxMJykudHlwZSB8fCAnJykudG9VcHBlckNhc2UoKV0gOiBwcm9maWxlLmFjdGl2aXR5RGVmYXVsdFN1YmplY3RUZW1wbGF0ZTtcbiAgICAgIH1cbiAgICAgIGlmIChzdWJqZWN0VGVtcGxhdGUpIHtcbiAgICAgICAgdGhpcy5tb2RlbFt0aGlzLmZpZWxkc01hcC5zdWJqZWN0XSA9IHRlbXBsYXRlQnVpbGRlcih0aGlzLm1ldGFDb250ZXh0LCBzdWJqZWN0VGVtcGxhdGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRDb250YWN0c1N1Z2dlc3Rpb25zKCkge1xuICAgIC8vIGxldCBoYXNEZWZhdWx0Q29udGFjdCA9IGZhbHNlO1xuICAgIGlmICh0aGlzLm1ldGFDb250ZXh0LmNvbnRhY3RhYmxlc1t0aGlzLmludGVncmF0aW9uQ29kZV0gJiYgdGhpcy5tZXRhLmxheW91dCAmJiB0aGlzLm1ldGEubGF5b3V0LnNlY3Rpb25zKSB7XG4gICAgICBmb3IgKGNvbnN0IHMgb2YgdGhpcy5tZXRhLmxheW91dC5zZWN0aW9ucykge1xuICAgICAgICBmb3IgKGNvbnN0IGYgb2YgKHMuZmllbGRzIHx8IFtdKSkge1xuICAgICAgICAgIGlmIChmLnR5cGUgPT09ICdyZWZlcmVuY2UnKSB7XG4gICAgICAgICAgICBjb25zdCByZWZUeXBlcyA9IChmLnJlZmVyZW5jZS5sZW5ndGggPyBmLnJlZmVyZW5jZSA6IFtmLnJlZmVyZW5jZV0pLm1hcChyID0+IHIubmFtZSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5tZXRhQ29udGV4dC5jb250YWN0YWJsZXNbdGhpcy5pbnRlZ3JhdGlvbkNvZGVdKSB7XG4gICAgICAgICAgICAgIGlmIChyZWZUeXBlcy5pbmRleE9mKGMucmVzb3VyY2VUeXBlIHx8IGMudHlwZSkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFmLnN1Z2dlc3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgICBmLnN1Z2dlc3Rpb25zID0gW107XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGYuc3VnZ2VzdGlvbnMgPSBmLnN1Z2dlc3Rpb25zLmZpbHRlcihzZyA9PiAhc2cuYXV0byk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCB0TGFiZWwgPSBjLmRpc3BsYXlOYW1lIHx8IGMubmFtZTtcbiAgICAgICAgICAgICAgICBpZiAoYy5waG9uZU51bWJlcnMpIHtcbiAgICAgICAgICAgICAgICAgIHRMYWJlbCArPSAoJyDinIYnICsgYy5waG9uZU51bWJlcnMubWFwKHAgPT4gcC5waG9uZU51bWJlcikuam9pbignLCcpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZi5zdWdnZXN0aW9ucy5wdXNoKHsgXG4gICAgICAgICAgICAgICAgICBpZDogYy5leHRlcm5hbElkIHx8IGMuaWRlbnRpZmllciB8fCBjLmlkLCBcbiAgICAgICAgICAgICAgICAgIGxhYmVsOiB0TGFiZWwsIFxuICAgICAgICAgICAgICAgICAgdHlwZTogYy5yZXNvdXJjZVR5cGUgfHwgYy50eXBlLFxuICAgICAgICAgICAgICAgICAgYXV0bzogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoKHRoaXMuZmllbGRzTWFwLmNvbnRhY3RhYmxlcyB8fCBbXSkuaW5kZXhPZihmLm5hbWUpICE9PSAtMSkgeyAvLyBldmFsdWF0ZSB1c2FiaWxpdHk/XG4gICAgICAgICAgICAgIGYuYWx3YXlzVmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZiAoXG4gICAgICAgICAgICAvLyAgICFoYXNEZWZhdWx0Q29udGFjdCAmJiB0aGlzLm1ldGFDb250ZXh0LmRlZmF1bHRDb250YWN0YWJsZXNbdGhpcy5pbnRlZ3JhdGlvbkNvZGVdXG4gICAgICAgICAgICAvLyAgICYmIHJlZlR5cGVzLmluZGV4T2YodGhpcy5tZXRhQ29udGV4dC5kZWZhdWx0Q29udGFjdGFibGVzW3RoaXMuaW50ZWdyYXRpb25Db2RlXS50eXBlKSAhPT0gLTFcbiAgICAgICAgICAgIC8vICkge1xuICAgICAgICAgICAgLy8gICB0aGlzLnJlc291cmNlW2YubmFtZV0gPSB0aGlzLm1ldGFDb250ZXh0LmRlZmF1bHRDb250YWN0YWJsZXNbdGhpcy5pbnRlZ3JhdGlvbkNvZGVdO1xuICAgICAgICAgICAgLy8gICBoYXNEZWZhdWx0Q29udGFjdCA9IHRydWU7XG4gICAgICAgICAgICAvLyB9IGVsc2UgaWYgKCFoYXNEZWZhdWx0Q29udGFjdCAmJiB0aGlzLmZpZWxkc01hcC5jb250YWN0YWJsZXMgJiYgZi5zdWdnZXN0aW9ucyAmJiBmLnN1Z2dlc3Rpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgLy8gICBpZiAodGhpcy5maWVsZHNNYXAuY29udGFjdGFibGVzLmluZGV4T2YoZi5uYW1lKSAhPT0gLTEgJiYgIWYuZGVmYXVsdCkge1xuICAgICAgICAgICAgLy8gICAgIGYuZGVmYXVsdCA9IGYuc3VnZ2VzdGlvbnNbMF07XG4gICAgICAgICAgICAvLyAgICAgaGFzRGVmYXVsdENvbnRhY3QgPSB0cnVlO1xuICAgICAgICAgICAgLy8gICB9XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmNvbnRhY3RzU3VnZ2VzdGlvbnNEb25lID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFwcGx5VGhlbWUoKSB7XG4gICAgY29uc3QgbWV0YVRoZW1lID0gdGhpcy50aGVtZSA9PT0gJ2RhcmsnID8gbWV0YURhcmsgOiBtZXRhTGlnaHQ7XG4gICAgY29uc29sZS5sb2coJ3Jlc291cmNlIGFwcGx5IHRoZW1lJywgdGhpcy50aGVtZSk7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobWV0YVRoZW1lLnByb3BlcnRpZXMpKSB7XG4gICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoa2V5LCBtZXRhVGhlbWUucHJvcGVydGllc1trZXldKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvcmNlVWlVcGRhdGUoKSB7IC8vIGlPUyB3ZWJ2aWV3IGRvZXMgbm90IHVwZGF0ZSB0aGUgVUkgYWZ0ZXIgYXN5YyBjaGFuZ2VzLiBUZW1wIGZpeCA6KFxuICAgIC8vIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICBjb25zdCBlID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50cycpO1xuICAgIGUuaW5pdEV2ZW50KCdjbGljaycsIHRydWUsIGZhbHNlKTtcbiAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChlKTtcbiAgfVxufVxuXG4vLy8vIFJFU09VUkNFIENBUkRcbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndmdpcC1tZXRhLXJlc291cmNlLWNhcmQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9yZXNvdXJjZUNhcmQvdmlldy5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9yZXNvdXJjZUNhcmQvc3R5bGUuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIE1ldGFSZXNvdXJjZUNhcmQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSByZXNvdXJjZTogYW55O1xuICBASW5wdXQoKSBtb2RlbDogYW55O1xuXG4gIGludGVncmF0aW9uQ29kZTogc3RyaW5nO1xuICByZWZEaWFsb2dGYWN0b3J5OiBhbnk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICBwcml2YXRlIG1ldGFSZXNvdXJjZTogTWV0YVJlc291cmNlU2VydmljZSxcbiAgICBwcml2YXRlIHJlZmVyZW5jZVNlcnZpY2U6IE1ldGFSZWZlcmVuY2VTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmludGVncmF0aW9uQ29kZSA9ICh0aGlzLnJlc291cmNlLmludGVncmF0aW9uIHx8IHRoaXMucmVzb3VyY2UuaW50ZWdyYXRpb25Db2RlIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICB9XG5cbiAgb3BlbihyZWZlcmVuY2UsIG1vZGVsPykge1xuICAgIGlmICghdGhpcy5yZWZEaWFsb2dGYWN0b3J5KSB7XG4gICAgICB0aGlzLnJlZkRpYWxvZ0ZhY3RvcnkgPSB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShNZXRhUmVmRGlhbG9nKTtcbiAgICB9XG4gICAgdGhpcy5yZWZlcmVuY2VTZXJ2aWNlLm9wZW5EaWFsb2coXG4gICAgICB0aGlzLnJlZkRpYWxvZ0ZhY3RvcnksIHRoaXMubWV0YVJlc291cmNlLCB0aGlzLmludGVncmF0aW9uQ29kZSwgcmVmZXJlbmNlLCBtb2RlbCwgXG4gICAgICBtb2RlbCAmJiAocmVmZXJlbmNlLmVkaXRhYmxlID09PSBmYWxzZSkgLy8gaXMgcHJldmlldyBtb2RlXG4gICAgKS5zdWJzY3JpYmUoKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICBjb25zb2xlLmxvZygnZGlhbG9nIHJlc3VsdCcsIHJlc3VsdCk7XG4gICAgICAvLyBpZiAocmVzdWx0ICYmIHJlc3VsdC5yYXcpIHtcbiAgICAgIC8vICAgaWYgKCF0aGlzLnBhcmVudFtyZWZlcmVuY2UudHlwZV0pIHtcbiAgICAgIC8vICAgICB0aGlzLnBhcmVudFtyZWZlcmVuY2UudHlwZV0gPSBbXTtcbiAgICAgIC8vICAgfVxuICAgICAgLy8gICB0aGlzLnBhcmVudFtyZWZlcmVuY2UudHlwZV0ucHVzaChyZXN1bHQucmF3KTtcbiAgICAgIC8vIH1cbiAgICB9KTtcbiAgfVxuXG59XG5cblxuY29uc3QgRk1BUCA9IChmVHlwZSkgPT4ge1xuICBzd2l0Y2ggKGZUeXBlKSB7XG4gICAgY2FzZSAnJzpcbiAgICBjYXNlIG51bGw6XG4gICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAvLyBjYXNlICdkYXRldGltZSc6XG4gICAgLy8gY2FzZSAndGltZSc6XG4gICAgLy8gY2FzZSAnZGF0ZSc6XG4gICAgY2FzZSAnc3RyaW5nJzogeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWZhbGx0aHJvdWdoXG4gICAgICByZXR1cm4gRmllbGRJbnB1dDtcbiAgICB9XG4gICAgY2FzZSAndGV4dGFyZWEnOlxuICAgIGNhc2UgJ3RleHQnOiB7XG4gICAgICByZXR1cm4gRmllbGRUZXh0O1xuICAgIH1cbiAgICBjYXNlICdzZWxlY3QnOlxuICAgIGNhc2UgJ29wdGlvbnMnOiB7XG4gICAgICByZXR1cm4gRmllbGRTZWxlY3Q7XG4gICAgfVxuICAgIGNhc2UgJ3JlZmVyZW5jZSc6IHtcbiAgICAgIHJldHVybiBGaWVsZFJlZmVyZW5jZTtcbiAgICB9XG4gICAgY2FzZSAnY29tcG9zaXRlJzoge1xuICAgICAgcmV0dXJuIEZpZWxkQ29tcG9zaXRlO1xuICAgIH1cbiAgICBjYXNlICdib29sZWFuJzoge1xuICAgICAgcmV0dXJuIEZpZWxkQm9vbGVhbjtcbiAgICB9XG4gICAgY2FzZSAncmFkaW8nOiB7XG4gICAgICByZXR1cm4gRmllbGRSYWRpbztcbiAgICB9XG4gICAgY2FzZSAnbGlzdCc6IHtcbiAgICAgIHJldHVybiBGaWVsZExpc3Q7XG4gICAgfVxuICAgIGNhc2UgJ3JpY2h0ZXh0Jzoge1xuICAgICAgcmV0dXJuIEZpZWxkUmljaHRleHQ7XG4gICAgfVxuICAgIGNhc2UgJ2RhdGV0aW1lJzpcbiAgICBjYXNlICd0aW1lJzpcbiAgICBjYXNlICdkYXRlJzoge1xuICAgICAgcmV0dXJuIEZpZWxkRGF0ZXRpbWU7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHJldHVybiBGaWVsZFVua25vd247XG4gICAgfVxuICB9XG59O1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbbWV0YUZpZWxkQ29udGVudF0nXG59KVxuZXhwb3J0IGNsYXNzIE1ldGFGaWVsZENvbnRlbnREaXJlY3RpdmUge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZikgeyB9XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndmdpcC1tZXRhLWZpZWxkJyxcbiAgICB0ZW1wbGF0ZTogJzxuZy10ZW1wbGF0ZSBtZXRhRmllbGRDb250ZW50PkxvYWRpbmc8L25nLXRlbXBsYXRlPicsXG4gICAgc3R5bGVVcmxzOiBbJy4vZmllbGQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIE1ldGFGaWVsZCBleHRlbmRzIEZpZWxkQWJzdHJhY3QgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBtZXRhOiBhbnk7XG4gIEBJbnB1dCgpIHBhcmVudDogYW55O1xuICBASW5wdXQoKSBpbnRlZ3JhdGlvbkNvZGU6IGFueTtcbiAgQElucHV0KCkgcmVzb3VyY2VUeXBlOiBhbnk7XG4gIEBJbnB1dCgpIGluZGV4OiBudW1iZXI7XG4gIEBJbnB1dCgpIHByZXZpZXc6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHRoZW1lOiBzdHJpbmc7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICBAT3V0cHV0KCkgb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICBAT3V0cHV0KCkgb25MZWF2ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAVmlld0NoaWxkKE1ldGFGaWVsZENvbnRlbnREaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pIGZpZWxkQ29udGVudDogTWV0YUZpZWxkQ29udGVudERpcmVjdGl2ZTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgY29uc3QgY29tcG9uZW50ID0gRk1BUCh0aGlzLm1ldGEudHlwZSk7XG4gICAgY29uc3QgY29tcG9uZW50RmFjdG9yeSA9IHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGNvbXBvbmVudCk7XG5cbiAgICB0aGlzLmZpZWxkQ29udGVudC52aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XG4gICAgY29uc3QgY29tcG9uZW50UmVmID0gdGhpcy5maWVsZENvbnRlbnQudmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50RmFjdG9yeSk7XG4gICAgY29uc3QgZmllbGQ6IEZpZWxkQWJzdHJhY3QgPSBjb21wb25lbnRSZWYuaW5zdGFuY2U7XG4gICAgaWYgKGNvbXBvbmVudC5zZXR1cCkge1xuICAgICAgLy8gY29uc29sZS5sb2coJ3NldHVwJywge2E6IHRoaXMuZWwubmF0aXZlRWxlbWVudC5wYXJlbnROb2RlLnBhcmVudE5vZGV9KVxuICAgICAgY29tcG9uZW50LnNldHVwKGZpZWxkLCB0aGlzLnBhcmVudCwgdGhpcy5tZXRhKTtcbiAgICB9XG4gICAgZmllbGQubWV0YSA9IHRoaXMubWV0YTtcbiAgICBmaWVsZC5wYXJlbnQgPSB0aGlzLnBhcmVudDtcbiAgICBmaWVsZC5pbnRlZ3JhdGlvbkNvZGUgPSAodGhpcy5pbnRlZ3JhdGlvbkNvZGUgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gICAgZmllbGQucmVzb3VyY2VUeXBlID0gKHRoaXMucmVzb3VyY2VUeXBlIHx8ICcnKTtcbiAgICBmaWVsZC5pbmRleCA9IHRoaXMuaW5kZXg7XG4gICAgZmllbGQuZWxlbWVudFJlZiA9IHRoaXMuZWw7XG4gICAgZmllbGQub25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlO1xuICAgIGZpZWxkLm9uTGVhdmUgPSB0aGlzLm9uTGVhdmU7XG4gICAgZmllbGQucHJldmlldyA9IHRoaXMucHJldmlldztcbiAgICBmaWVsZC50aGVtZSA9IHRoaXMudGhlbWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZpZWxkLm1ldGEsICd1bnNldCcsIHtcbiAgICAgIHZhbHVlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2VcbiAgICB9KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz0nVmx0LW1vZGFsIFZsdC1tb2RhbC0tbGFyZ2UnPlxuICA8ZGl2IGNsYXNzPVwiVmx0LW1vZGFsX19wYW5lbFwiPlxuICAgIDxkaXYgY2xhc3M9XCJWbHQtdGFic1wiPlxuICAgICAgPGRpdiBjbGFzcz0nVmx0LXRhYnNfX2hlYWRlci0tYmFja2dyb3VuZCc+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJWbHQtdGFic19faGVhZGVyIFZsdC10YWJzX19oZWFkZXItLXNoYWRvd1wiPlxuICAgICAgICAgIDxzdmcgY2xhc3M9XCJWbHQtaWNvblwiIFtuZ1N0eWxlXT1cIntmaWxsOiBpbnRlZ3JhdGlvbkljb24gPT09ICdCcmFuZC1pY29uLXZvbmFnZScgPyAndmFyKC0tdmdpcC1tZXRhLWlucHV0LWNvbG9yKScgOiAnJ31cIj48dXNlIGF0dHIueGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWJyYW5kLWljb25zLnN2ZyN7e2ludGVncmF0aW9uSWNvbn19XCIgLz48L3N2Zz5cbiAgICAgICAgICA8ZGl2ICpuZ0Zvcj0nbGV0IHIgb2YgcmVzb3VyY2VzIHwga2V5dmFsdWU6IGtlZXBPcmRlcicgKGNsaWNrKT0nc2VsZWN0UmVzb3VyY2Uoci5rZXkpJyBjbGFzcz1cIlZsdC10YWJzX19saW5rXCIgW25nQ2xhc3NdPVwieyAnVmx0LXRhYnNfX2xpbmtfYWN0aXZlJzogY3VycmVudFJlc291cmNlID09PSByLmtleX1cIj5cbiAgICAgICAgICAgIHt7ci5rZXl9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJWbHQtbW9kYWxfX2Rpc21pc3NcIiAoY2xpY2spPVwiZGlzbWlzcygpXCI+XG4gICAgICAgICAgICA8c3ZnIGNsYXNzPVwiVmx0LWljb25cIj48dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tY3Jvc3NcIiAvPjwvc3ZnPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIlZsdC10YWJzX19jb250ZW50XCIgc3R5bGU9J21pbi1oZWlnaHQ6IDkwcHg7Jz5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9J2xldCByIG9mIHJlc291cmNlcyB8IGtleXZhbHVlOiBrZWVwT3JkZXInPlxuICAgICAgICAgIDxkaXYgKm5nSWY9J2N1cnJlbnRSZXNvdXJjZSA9PT0gci5rZXknIGNsYXNzPVwiVmx0LXRhYnNfX3BhbmVsIFZsdC10YWJzX19wYW5lbF9hY3RpdmVcIj5cbiAgICAgICAgICAgIDx2Z2lwLW1ldGEtcmVzb3VyY2UgW3Jlc291cmNlXT0nci52YWx1ZScgW21vZGVsXT0nbW9kZWxzW3Iua2V5XScgW21ldGFSZXNvdXJjZVNlcnZpY2VEZWxlZ2F0ZWRdPSdtZXRhUmVzb3VyY2UnIChkb25lKT0nb25SZXNvdXJjZURvbmUoJGV2ZW50KScgdGhlbWU9J2luaGVyaXQnIFthdHRyLmRhdGEtdGhlbWVdPSd0aGVtZSc+PC92Z2lwLW1ldGEtcmVzb3VyY2U+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iLCI8ZGl2IFtuZ0NsYXNzXT1cInsgJ1ZsdC1ncmlkIFZsdC1ncmlkLS1uYXJyb3cnOiBpc1JvdyB9XCIgPlxuICA8ZGl2IHN0eWxlPSdtYXJnaW46IDA7JyBbbmdDbGFzc109XCJ7ICdWbHQtY29sJzogaXNSb3csICdWbHQtY29sLS0xb2YzJzogaXNSb3cgJiYgZmllbGRzLmxlbmd0aCA+IDMgfVwiICpuZ0Zvcj0nbGV0IGZpZWxkIG9mIGZpZWxkcyc+XG4gICAgPHZnaXAtbWV0YS1maWVsZCBjbGFzcz0nc2hvd24nIFtpbmRleF09J2luZGV4JyBbbWV0YV09J2ZpZWxkJyBbcGFyZW50XT0ncGFyZW50JyBbaW50ZWdyYXRpb25Db2RlXT0naW50ZWdyYXRpb25Db2RlJyBbcHJldmlld109J3ByZXZpZXcnIHRoZW1lPSdpbmhlcml0Jz48L3ZnaXAtbWV0YS1maWVsZD5cbiAgPC9kaXY+XG48L2Rpdj4iLCI8ZGl2IGNsYXNzPSd2Z2lwLW1ldGEtZmllbGQtcHJldmlldycgKm5nSWY9J3ByZXZpZXcgJiYgbW9kZWwnPlxuICA8ZGl2IGNsYXNzPSd2Z2lwLW1ldGEtZmllbGQtbGFiZWwnPnt7bWV0YS5sYWJlbCB8fCBtZXRhLm5hbWV9fTwvZGl2PlxuICA8ZGl2IGNsYXNzPSd2Z2lwLW1ldGEtZmllbGQtdmFsdWUgX19ndSc+XG4gICAge3ttb2RlbC5sYWJlbCB8fCBtb2RlbC5pZCB8fCBtb2RlbH19XG4gIDwvZGl2PlxuPC9kaXY+XG48ZGl2ICpuZ0lmPSchcHJldmlldycgY2xhc3M9XCJWbHQtZm9ybV9fZWxlbWVudFwiIFtuZ0NsYXNzXT1cInsgJ1ZsdC1mb3JtX19lbGVtZW50LS1iaWcnOiAhbWV0YS5zbWFsbCAsJ2hhcy12YWx1ZSc6IGYudmFsdWUsIGFjdGl2ZToga2V5TGlzdGVuZXJBY3RpdmUsICdWbHQtZm9ybV9fZWxlbWVudC0tZXJyb3InOiBmLmludmFsaWQgJiYgKChmIHwgbWV0YU1vZGVsKS5fcGFyZW50LnN1Ym1pdHRlZCB8fCAoZnQgfCBtZXRhTW9kZWwgKS50b3VjaGVkKSwgJ25vLXgnOiBtZXRhLm5vWCB9XCI+XG5cdDxkaXYgY2xhc3M9XCJWbHQtY29tcG9zaXRlIFZsdC1kcm9wZG93biBWbHQtaW5wdXRcIiBzdHlsZT0nZGlzcGxheTogYmxvY2s7JyBbbmdDbGFzc109XCJ7ICdoYXMtYXBwZW5kLWJ1dHRvbic6IGlzQ3JlYXRhYmxlICYmICFkaXNhYmxlZCB9XCI+XG5cdFx0PGRpdiBjbGFzcz1cIlZsdC1zZWxlY3RcIj5cblx0XHRcdDxsYWJlbCBjbGFzcz0nd3JhcHBlcic+XG5cdFx0XHRcdDxsYWJlbCBjbGFzcz0nVmx0LXRydW5jYXRlJz57e21ldGEubGFiZWwgfHwgbWV0YS5uYW1lfX08c3BhbiAqbmdJZj0ndmFsaWRhdGlvbnMucmVxdWlyZWQgJiYgb3B0aW9ucy5sZW5ndGgnIGNsYXNzPSdWbHQtcmVkJz4qPC9zcGFuPjwvbGFiZWw+XG5cdFx0XHRcdDxpbnB1dCBjbGFzcz0nbWFpbicgW3JlcXVpcmVkXT0ndmFsaWRhdGlvbnMucmVxdWlyZWQgJiYgISFvcHRpb25zLmxlbmd0aCcgcmVhZG9ubHkgW25nTW9kZWxdPSdzaG93VGV4dCcgI2Z0PSduZ01vZGVsJyBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCIgdHlwZT1cInRleHRcIiBbcGxhY2Vob2xkZXJdPVwibWV0YS5wbGFjZWhvbGRlciB8fCAnICdcIiAoY2xpY2spPSdvbkFjdGl2YXRlZCgkZXZlbnQpJyAoZm9jdXMpPSdvbkFjdGl2YXRlZCgkZXZlbnQpJyAoYmx1cik9J29uQmx1cigkZXZlbnQpJyBbbmdDbGFzc109XCJ7ICdzdGFuZGFsb25lJzogbWV0YS5zdGFuZGFsb25lIH1cIiBbZGlzYWJsZWRdPSdkaXNhYmxlZCB8fCAhb3B0aW9ucy5sZW5ndGgnIFthdHRyLmFyaWEtbGFiZWxdPSdtZXRhLmxhYmVsJy8+XG5cdFx0XHQ8L2xhYmVsPlxuXHRcdFx0PHNlbGVjdCBjbGFzcz0nbW9kZWwnIFtyZXF1aXJlZF09J3ZhbGlkYXRpb25zLnJlcXVpcmVkICYmICEhb3B0aW9ucy5sZW5ndGgnIHN0eWxlPSdkaXNwbGF5OiBub25lOycgWyhuZ01vZGVsKV09J21vZGVsJyBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IG1ldGEuc3RhbmRhbG9uZX1cIiAobmdNb2RlbENoYW5nZSk9XCJvbk1vZGVsQ2hhbmdlKCRldmVudClcIiAjZj0nbmdNb2RlbCcgW25hbWVdPSduYW1lJz48L3NlbGVjdD5cblx0XHRcdDxkaXYgKm5nSWY9J3NlYXJjaGluZycgY2xhc3M9J3NlYXJjaC1wcm9ncmVzcyc+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFyIFZsdC1iZy1wdXJwbGVcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDxkaXYgY2xhc3M9J1ZsdC1jb21wb3NpdGVfX2FwcGVuZCByaWdodC1hY3Rpb25zJz5cbiAgICAgICAgPGRpdiAqbmdJZj0nbW9kZWwgJiYgIW1ldGEubm9YICYmICFkaXNhYmxlZCcgY2xhc3M9XCJWbHQtY29tcG9zaXRlX19hcHBlbmQtLWljb25cIiAoY2xpY2spPSdjbGVhcigkZXZlbnQpJz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiVmx0LWNvbXBvc2l0ZV9faWNvblwiPlxuICAgICAgICAgICAgPHN2Zz48dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tY3Jvc3NcIi8+PC9zdmc+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cdFx0PC9kaXY+XG5cdFx0PGRpdiBjbGFzcz0nVmx0LWRyb3Bkb3duX19wYW5lbCc+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwiVmx0LWRyb3Bkb3duX19wYW5lbF9fY29udGVudCBWbHQtZHJvcGRvd25fX3BhbmVsX19jb250ZW50LS1zY3JvbGwtYXJlYVwiPlxuXHRcdFx0XHQ8IS0tIDxkaXYgY2xhc3M9XCJWbHQtZHJvcGRvd25fX3RpdGxlXCIgc3R5bGU9J3BhZGRpbmctbGVmdDogMTVweDsnPlxuXHRcdFx0XHRcdFNlbGVjdCAoe3tvcHRpb25zLmxlbmd0aH19KVxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJWbHQtZHJvcGRvd25fX2Nsb3NlIFZsdC13aGl0ZVwiIChjbGljayk9J2Rpc21pc3NEcm9wZG93bigkZXZlbnQpJz5cblx0XHRcdFx0XHRcdDxzdmcgY2xhc3M9J1ZsdC1pY29uIFZsdC1pY29uLS1zbWFsbCc+PHVzZSB4bGluazpocmVmPVwidm9sdGEvdm9sdGEtaWNvbnMuc3ZnI1ZsdC1pY29uLWNyb3NzXCIvPjwvc3ZnPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj4gLS0+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJWbHQtZHJvcGRvd25fX2Jsb2NrXCI+PC9kaXY+XG5cdFx0XHRcdDxkaXYgKm5nSWY9J2Ryb3Bkb3duJyBjbGFzcz0nVmx0LWRyb3Bkb3duX19zY3JvbGwnPlxuXHRcdFx0XHRcdDxkaXYgW25nQ2xhc3NdPVwieyAnVmx0LWRyb3Bkb3duX19saW5rLS1zZWxlY3RlZCc6IGFjdGl2ZVN1Z2dlc3Rpb25JbmRleCA9PT0gaSB9XCIgKGNsaWNrKT0nb25PcHRpb25TZWxlY3QoJGV2ZW50LCBvcHRpb24pJyAqbmdGb3I9J2xldCBvcHRpb24gb2Ygb3B0aW9uczsgbGV0IGkgPSBpbmRleCcgY2xhc3M9XCJWbHQtZHJvcGRvd25fX2xpbmtcIj5cblx0XHRcdFx0XHRcdDxkaXYgKm5nSWY9J211bHRpcGxlJyBjbGFzcz1cIlZsdC1jaGVja2JveFwiIHN0eWxlPSd3aWR0aDogMTAwJTsnPlxuXHRcdFx0XHRcdFx0XHQ8bGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJWbHQtY2hlY2tib3hfX2J1dHRvblwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT0nbW9kZWwgJiYgbW9kZWwuaW5kZXhPZihvcHRpb24pICE9PSAtMScvPlxuXHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJWbHQtY2hlY2tib3hfX2ljb25cIj48L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdHt7b3B0aW9uLmxhYmVsIHx8IChvcHRpb24uaWQgPT09ICcnID8gJy0tZW1wdHktLScgOiBvcHRpb24pfX1cblx0XHRcdFx0XHRcdFx0PC9sYWJlbD5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PGRpdiAqbmdJZj0nIW11bHRpcGxlJyBzdHlsZT0ncGFkZGluZzogMTJweCAyMHB4Oyc+e3tvcHRpb24ubGFiZWwgfHwgKG9wdGlvbi5pZCA9PT0gJycgPyAnLS1lbXB0eS0tJyA6IG9wdGlvbil9fTwvZGl2PlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PGRpdiAqbmdJZj0nIW11bHRpcGxlJyBjbGFzcz1cIlZsdC1kcm9wZG93bl9fYmxvY2tcIj48L2Rpdj5cblx0XHRcdFx0PGRpdiAqbmdJZj0nbXVsdGlwbGUnIGNsYXNzPVwiVmx0LWRyb3Bkb3duX19ibG9jayBWbHQtZHJvcGRvd25fX2Jsb2NrLS1ub3dyYXBcIiBzdHlsZT0ncGFkZGluZzogOHB4IDE2cHggMTZweDsnPlxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT0nY2xlYXIoJGV2ZW50KScgdHlwZT0nYnV0dG9uJyBjbGFzcz1cIlZsdC1idG4gVmx0LWJ0bi0tc2Vjb25kYXJ5IFZsdC1idG4tLWFwcCBWbHQtYnRuLS1zbWFsbCBWbHQtYnRuLS1vdXRsaW5lXCIgc3R5bGU9J21hcmdpbi1yaWdodDogOHB4Oyc+Q2xlYXIgYWxsPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPSdkaXNtaXNzRHJvcGRvd24oJGV2ZW50KScgdHlwZT0nYnV0dG9uJyBjbGFzcz1cIlZsdC1idG4gVmx0LWJ0bi0tc2Vjb25kYXJ5IFZsdC1idG4tLWFwcCBWbHQtYnRuLS1zbWFsbFwiPkRvbmU8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0XHQ8IS0tIDxzcGFuICpuZ0lmPSdpc0NyZWF0YWJsZSc+XG4gICAgICA8YnV0dG9uIHR5cGU9J2J1dHRvbicgKGNsaWNrKT0nb3BlblJlc291cmNlKCRldmVudCknIGNsYXNzPVwiVmx0LWJ0biBWbHQtYnRuLS1zZWNvbmRhcnkgVmx0LWJ0bi0taWNvbiBWbHQtYnRuLS1sYXJnZVwiIHN0eWxlPSdtYXJnaW4tbGVmdDogMTJweDsnPlxuICAgICAgICA8c3ZnPjx1c2UgeGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1wbHVzXCIvPjwvc3ZnPlxuICAgICAgPC9idXR0b24+XG5cdFx0PC9zcGFuPiAtLT5cblx0XHQ8ZGl2ICpuZ0lmPSdpc0NyZWF0YWJsZSAmJiAhZGlzYWJsZWQnIGNsYXNzPVwiVmx0LWNvbXBvc2l0ZV9fYXBwZW5kXCI+XG4gICAgICA8YnV0dG9uIChmb2N1cyk9J29uQWN0aXZhdGVkKCRldmVudCknIChibHVyKT0nb25CbHVyKCRldmVudCknIHR5cGU9J2J1dHRvbicgKGNsaWNrKT0nb3BlblJlc291cmNlKCRldmVudCknIGNsYXNzPVwiVmx0LWJ0biBWbHQtYnRuLS13aGl0ZSBWbHQtYnRuLS1pY29uIGFkZC1idXR0b25cIiBhcmlhLWxhYmVsPSdBZGQgbmV3Jz5cbiAgICAgICAgPHN2Zz48dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tcGx1c1wiLz48L3N2Zz5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXHQ8L2Rpdj5cblx0PHNtYWxsICpuZ0lmPSdmLmludmFsaWQgJiYgKChmIHwgbWV0YU1vZGVsKS5fcGFyZW50LnN1Ym1pdHRlZCB8fCAoKGZ0IHwgbWV0YU1vZGVsKS50b3VjaGVkICYmIGtleUxpc3RlbmVyQWN0aXZlKSknIGNsYXNzPVwiVmx0LWZvcm1fX2VsZW1lbnRfX2Vycm9yXCI+XG5cdFx0PHNwYW4gKm5nSWY9XCJmLmVycm9ycy5yZXF1aXJlZFwiPlJlcXVpcmVkLiZuYnNwOzwvc3Bhbj5cblx0PC9zbWFsbD5cblx0PHNtYWxsICpuZ0lmPSdtZXRhLmhpbnQnIGNsYXNzPVwiVmx0LWZvcm1fX2VsZW1lbnRfX2hpbnRcIj57e21ldGEuaGludH19PC9zbWFsbD5cbjwvZGl2PiIsIjxkaXYgY2xhc3M9J3ZnaXAtbWV0YS1maWVsZC1wcmV2aWV3JyAqbmdJZj0ncHJldmlldyAmJiBtb2RlbCAmJiAoIW11bHRpcGxlIHx8IChtdWx0aXBsZSAmJiBtb2RlbC5sZW5ndGgpKSc+XG4gIDxkaXYgY2xhc3M9J3ZnaXAtbWV0YS1maWVsZC1sYWJlbCc+e3ttZXRhLmxhYmVsIHx8IG1ldGEubmFtZX19PC9kaXY+XG4gIDxkaXYgKm5nSWY9JyFtdWx0aXBsZScgY2xhc3M9J3ZnaXAtbWV0YS1maWVsZC12YWx1ZSBfX2d1Jz5cbiAgICA8c3ZnIGNsYXNzPVwiVmx0LWljb24gVmx0LWljb24tLXNtYWxsZXJcIiBzdHlsZT0nbWFyZ2luLXRvcDogLTNweDsnPjx1c2UgYXR0ci54bGluazpocmVmPVwidm9sdGEvdm9sdGEtYnJhbmQtaWNvbnMuc3ZnI3t7aW50ZWdyYXRpb25JY29ufX1cIi8+PC9zdmc+XG4gICAge3ttb2RlbC5sYWJlbCB8fCBtb2RlbC5pZH19IDxzcGFuIGNsYXNzPSdWbHQtZ3JleSc+KHt7bW9kZWwudHlwZX19KTwvc3Bhbj5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9J211bHRpcGxlJyBjbGFzcz0ndmdpcC1tZXRhLWZpZWxkLXZhbHVlIF9fZ3UnPlxuICAgIDxzcGFuICpuZ0Zvcj0nbGV0IG0gb2YgKG1vZGVsIHx8IFtdKScgY2xhc3M9J1ZsdC1iYWRnZSBWbHQtYmFkZ2UtLWFwcCc+XG4gICAgICB7e20ubGFiZWwgfHwgbS5pZCB8fCBtfX0gPHNwYW4gY2xhc3M9J1ZsdC1ncmV5LWRhcmsnICpuZ0lmPSdpc1BvbHltb3JwaGljJz4oe3ttLnR5cGV9fSk8L3NwYW4+XG4gICAgPC9zcGFuPlxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiAqbmdJZj0nIXByZXZpZXcnIGNsYXNzPVwibWV0YS1maWVsZC1yZWZlcmVuY2UgVmx0LWZvcm1fX2VsZW1lbnQgVmx0LWZvcm1fX2VsZW1lbnQtLWJpZ1wiIFtuZ0NsYXNzXT1cInsgJ1ZsdC1mb3JtX19lbGVtZW50LS1lcnJvcic6IChzZWFyY2hFcnJvciAmJiBrZXlMaXN0ZW5lckFjdGl2ZSkgfHwgKGYuaW52YWxpZCAmJiAoKGYgfCBtZXRhTW9kZWwpLl9wYXJlbnQuc3VibWl0dGVkIHx8IChmdCB8IG1ldGFNb2RlbCApLnRvdWNoZWQpKSwgJ211bHRpcGxlJzogbXVsdGlwbGUsICdoYXMtdmFsdWUnOiBtb2RlbCwgYWN0aXZlOiBrZXlMaXN0ZW5lckFjdGl2ZSB9XCI+XG4gIDxkaXYgKm5nSWY9J211bHRpcGxlJyBjbGFzcz0naXRlbXMtY29udGFpbmVyJyBbbmdDbGFzc109J3sgY3JlYXRhYmxlOiBpc0NyZWF0YWJsZSB9Jz5cbiAgICA8ZGl2ICpuZ0lmPSdtb2RlbCcgY2xhc3M9J2JhZGdlcy1jb250YWluZXIga2VlcC1mb2N1cycgKGNsaWNrKT0nZm9jdXMoKScgc3R5bGU9J3dpZHRoOiAxMDAlOyc+XG4gICAgICA8ZGl2ICpuZ0Zvcj0nbGV0IGl0ZW0gb2YgbW9kZWwnIGNsYXNzPVwiVmx0LWJhZGdlIFZsdC1iYWRnZS0tYXBwIFZsdC1iYWRnZS0tbGFyZ2Uga2VlcC1mb2N1c1wiIFtuZ0NsYXNzXT1cInsgZ3JpZDogKGl0ZW0ubGFiZWwgfHwgaXRlbS5pZCB8fCAnJykubGVuZ3RoID4gNTZ9XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPSdWbHQtdHJ1bmNhdGUnPnt7aXRlbS5sYWJlbCB8fCBpdGVtLmlkIHx8IGl0ZW0gfX0gPHNwYW4gKm5nSWY9J2lzUG9seW1vcnBoaWMnIGNsYXNzPSdWbHQtZ3JleS1kYXJrJyBzdHlsZT0nZm9udC13ZWlnaHQ6IG5vcm1hbDsnPih7e2l0ZW0udHlwZX19KTwvc3Bhbj48L3NwYW4+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJWbHQtYmFkZ2VfX2Rpc21pc3Mga2VlcC1mb2N1c1wiIChjbGljayk9J3JlbW92ZSgkZXZlbnQsIGl0ZW0pJyBzdHlsZT0ncG9zaXRpb246IGFic29sdXRlOyByaWdodDogMTJweDsgdG9wOiA4cHg7JyBhcmlhLWxhYmVsPSdSZW1vdmUnPjwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiVmx0LWNvbXBvc2l0ZVwiPlxuICAgIDxkaXYgY2xhc3M9J2Ryb3Bkb3duLXdyYXBwZXIgVmx0LWRyb3Bkb3duJyBzdHlsZT0nd2lkdGg6IDEwMCU7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiA0OHB4Oyc+XG4gICAgICA8ZGl2IGNsYXNzPVwiVmx0LWRyb3Bkb3duX19wYW5lbFwiPlxuICAgICAgICA8ZGl2ICpuZ0lmPSdzZWFyY2hFcnJvcic+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIlZsdC1jYWxsb3V0IFZsdC1jYWxsb3V0LS1jcml0aWNhbCBrZWVwLWZvY3VzXCI+XG4gICAgICAgICAgICA8aT48L2k+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiVmx0LWNhbGxvdXRfX2NvbnRlbnRcIj57e3NlYXJjaEVycm9yfX08L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9JyFzZWFyY2hFcnJvciAmJiAoc3VnZ2VzdGlvbnMubGVuZ3RoIHx8IHNlYXJjaFJlc3VsdHMpJyBbbmdDbGFzc109XCJ7IHN1Z2dlc3Rpb25zOiAhc2VhcmNoUmVzdWx0c31cIiBjbGFzcz1cIlZsdC1kcm9wZG93bl9fcGFuZWxfX2NvbnRlbnQgVmx0LWRyb3Bkb3duX19wYW5lbF9fY29udGVudC0tc2Nyb2xsLWFyZWFcIiBzdHlsZT0ncGFkZGluZzogMDsnPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJWbHQtZHJvcGRvd25fX2Jsb2NrXCI+PC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj0nIXNlYXJjaFJlc3VsdHMnIGNsYXNzPVwiVmx0LWRyb3Bkb3duX19zY3JvbGxcIj5cbiAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyAnVmx0LWRyb3Bkb3duX19saW5rLS1zZWxlY3RlZCc6IGFjdGl2ZVN1Z2dlc3Rpb25JbmRleCA9PT0gaSwgc21hcnQ6IHN1Z2dlc3Rpb24uc21hcnQgfVwiIChjbGljayk9J29uU3VnZ2VzdGlvblNlbGVjdCgkZXZlbnQsIHN1Z2dlc3Rpb24pJyAqbmdGb3I9J2xldCBzdWdnZXN0aW9uIG9mIHN1Z2dlc3Rpb25zOyBsZXQgaSA9IGluZGV4JyAgY2xhc3M9XCJWbHQtZHJvcGRvd25fX2xpbmsgaGFzLXR5cGVcIj5cbiAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0nVmx0LWljb24gIFZsdC1pY29uLS1zbWFsbCc+PHVzZSBhdHRyLnhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1icmFuZC1pY29ucy5zdmcje3tpbnRlZ3JhdGlvbkljb259fVwiLz48L3N2Zz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nX19ndScgW3RpdGxlXT0nc3VnZ2VzdGlvbi5sYWJlbCc+e3sgc3VnZ2VzdGlvbi5sYWJlbCB9fTwvZGl2PlxuICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9J1ZsdC1ncmV5LWRhcmsnIHN0eWxlPSd0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTsnPnt7c3VnZ2VzdGlvbi50eXBlfX08L3NtYWxsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj0nc2VhcmNoUmVzdWx0cycgY2xhc3M9XCJWbHQtZHJvcGRvd25fX3Njcm9sbFwiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj0nIXNlYXJjaFJlc3VsdHMubGVuZ3RoJyBjbGFzcz0nVmx0LWRyb3Bkb3duX19ibG9jayc+IE5vIHJlY29yZHMgbWF0Y2hpbmcgJzxiIHN0eWxlPSdwb2ludGVyLWV2ZW50czogbm9uZTsnPnt7c2VhcmNoVGV4dH19PC9iPicgd2VyZSBmb3VuZC48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyAnVmx0LWRyb3Bkb3duX19saW5rLS1zZWxlY3RlZCc6IGFjdGl2ZVN1Z2dlc3Rpb25JbmRleCA9PT0gaSB9XCIgKGNsaWNrKT0nb25TdWdnZXN0aW9uU2VsZWN0KCRldmVudCwgc3VnZ2VzdGlvbiknICpuZ0Zvcj0nbGV0IHN1Z2dlc3Rpb24gb2Ygc2VhcmNoUmVzdWx0czsgbGV0IGkgPSBpbmRleCcgIGNsYXNzPVwiVmx0LWRyb3Bkb3duX19saW5rIGhhcy10eXBlXCI+XG4gICAgICAgICAgICAgIDxzdmcgY2xhc3M9J1ZsdC1pY29uIFZsdC1pY29uLS1zbWFsbCc+PHVzZSBhdHRyLnhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1icmFuZC1pY29ucy5zdmcje3tpbnRlZ3JhdGlvbkljb259fVwiLz48L3N2Zz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nX19ndScgW3RpdGxlXT0nc3VnZ2VzdGlvbi5sYWJlbCc+e3sgc3VnZ2VzdGlvbi5sYWJlbCB9fTwvZGl2PlxuICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9J1ZsdC1ncmV5LWRhcmsnIHN0eWxlPSd0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTsnPnt7c3VnZ2VzdGlvbi50eXBlfX08L3NtYWxsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPCEtLSA8ZGl2ICpuZ0lmPSdzZWFyY2hSZXN1bHRzJyBjbGFzcz1cIlZsdC1kcm9wZG93bl9fYmxvY2tcIiBzdHlsZT0ndGV4dC1hbGlnbjogcmlnaHQ7IHBhZGRpbmctdG9wOiAwOyc+XG4gICAgICAgICAgICA8c21hbGw+XG4gICAgICAgICAgICAgIHt7IHNlYXJjaFJlc3VsdHMgPyBzZWFyY2hSZXN1bHRzLmxlbmd0aCsnIHJlc3VsdHMnIDogJ1N1Z2dlc3Rpb25zJyB9fSA8c3BhbiBzdHlsZT0nZm9udC1zdHlsZTogaXRhbGljOyBmb250LXdlaWdodDogbm9ybWFsOycgKm5nSWY9J3NlYXJjaFJlc3VsdHMnPn57eyBtb2RlbCA/ICdsYXN0IHNlYXJjaCcgOiBzZWFyY2hUZXh0fX08L3NwYW4+XG4gICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiVmx0LWRyb3Bkb3duX19ibG9ja1wiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJWbHQtY29tcG9zaXRlX19wcmVwZW5kXCIgKm5nSWY9J2lzUG9seW1vcnBoaWMgJiYgc2hvd1R5cGVzICYmIChtdWx0aXBsZSB8fCAhbW9kZWwgfHwgKGRyb3Bkb3duVmlzaWJsZSAmJiAoKHN1Z2dlc3Rpb25zIHx8IHNlYXJjaFJlc3VsdHMgfHwgW10pLmxlbmd0aCB8fCBzZWFyY2hSZXNvdXJjZVR5cGUucmVzb3VyY2VUeXBlKSkpJz5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtc2NvcGVcIiBbbmdDbGFzc109XCJ7ICdoYXMtdmFsdWUnOiBzZWFyY2hSZXNvdXJjZVR5cGUucmVzb3VyY2VUeXBlIH1cIj5cbiAgICAgICAgPHZnaXAtbWV0YS1maWVsZCBjbGFzcz0nc2hvd24nIFttZXRhXT0nc2VhcmNoUmVzb3VyY2VUeXBlTWV0YScgW3BhcmVudF09J3NlYXJjaFJlc291cmNlVHlwZScgKG9uQ2hhbmdlKT0nb25TZWFyY2hSZXNvdXJjZVR5cGVDaGFuZ2VkKCRldmVudCknIChvbkxlYXZlKT0nb25CbHVyKCRldmVudCknIFtpbnRlZ3JhdGlvbkNvZGVdPSdpbnRlZ3JhdGlvbkNvZGUnIHRoZW1lPSdpbmhlcml0Jz48L3ZnaXAtbWV0YS1maWVsZD5cbiAgICAgICAgPHN2ZyBjbGFzcz0nVmx0LWljb24gVmx0LWdyZXkgVmx0LWljb24tLXNtYWxsZXIgdmlzaWJsZS1tb2JpbGUgbW9iaWxlLWljb24nIHN0eWxlPSdwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogMTVweDsgbGVmdDogMTRweDsgcG9pbnRlci1ldmVudHM6IG5vbmU7Jz5cbiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tbWVudVwiLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICAgIDxsYWJlbCBjbGFzcz0nbW9iaWxlLWxhYmVsIGhpZGRlbi1tb2JpbGUgaGlkZGVuLWRlc2t0b3AnPlNlYXJjaDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPSchKGlzUG9seW1vcnBoaWMgJiYgc2hvd1R5cGVzICYmIChtdWx0aXBsZSB8fCAhbW9kZWwgfHwgZHJvcGRvd25WaXNpYmxlKSknPjwhLS0gcmVxdWlyZWQgYnkgY3NzIC0tPjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJWbHQtY29tcG9zaXRlX193cmFwcGVyIFZsdC1pbnB1dFwiIHN0eWxlPSdvdmVyZmxvdzogaGlkZGVuOycgW25nQ2xhc3NdPVwieyAnaGFzLWFwcGVuZC1idXR0b24nOiBoYXNBcHBlbmRCdXR0b24gJiYgIWRpc2FibGVkIH1cIj5cbiAgICAgIDxsYWJlbCBjbGFzcz0nd3JhcHBlcic+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJWbHQtY29tcG9zaXRlX19wcmVwZW5kIFZsdC1jb21wb3NpdGVfX3ByZXBlbmQtLWljb25cIiBzdHlsZT0ndG9wOiAwOyBwYWRkaW5nLXRvcDogMTVweDsnPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJWbHQtY29tcG9zaXRlX19pY29uXCI+XG4gICAgICAgICAgICA8c3ZnICpuZ0lmPSdpc1NlYXJjaGFibGUgJiYgKCFtb2RlbCB8fCBtdWx0aXBsZSknIGNsYXNzPSdWbHQtZ3JleSc+PHVzZSBhdHRyLnhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24te3sgbXVsdGlwbGUgPyAnc3RhY2snIDogJ3NlYXJjaCd9fVwiLz48L3N2Zz5cbiAgICAgICAgICAgIDxzdmcgKm5nSWY9JyFpc1NlYXJjaGFibGUgfHwgKG1vZGVsICYmICFtdWx0aXBsZSknIFtuZ1N0eWxlXT1cIntmaWxsOiBpbnRlZ3JhdGlvbkljb24gPT09ICdCcmFuZC1pY29uLXZvbmFnZScgPyAndmFyKC0tdmdpcC1tZXRhLWlucHV0LWNvbG9yKScgOiAnJ31cIj48dXNlIGF0dHIueGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWJyYW5kLWljb25zLnN2ZyN7e2ludGVncmF0aW9uSWNvbn19XCIvPjwvc3ZnPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9J3N1Z2dlc3Rpb25zLmxlbmd0aCcgY2xhc3M9XCJWbHQtYmFkZ2UgVmx0LWJhZGdlLS1zbWFsbCBWbHQtYmFkZ2UtLXB1cnBsZVwiIHN0eWxlPSdwYWRkaW5nOiAwcHggNHB4OyBwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogMjZweDsgbGVmdDogNHB4OyBwb2ludGVyLWV2ZW50czogbm9uZTsgbWluLXdpZHRoOiAxNHB4Oyc+e3tzdWdnZXN0aW9ucy5sZW5ndGh9fTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGlucHV0IGNsYXNzPSdtb2RlbCcgdHlwZT0naGlkZGVuJyBbcmVxdWlyZWRdPSd2YWxpZGF0aW9ucy5yZXF1aXJlZCcgWyhuZ01vZGVsKV09J21vZGVsJyAjZj0nbmdNb2RlbCcgW25hbWVdPSduYW1lJyAvPlxuICAgICAgICA8aW5wdXQgY2xhc3M9J21haW4nIFtyZWFkb25seV09JyFpc1NlYXJjaGFibGUgfHwgKG1vZGVsICYmICFtdWx0aXBsZSknIFtuZ01vZGVsXT0nc2VhcmNoVGV4dCcgI2Z0PSduZ01vZGVsJyAobmdNb2RlbENoYW5nZSk9J29uU2VhcmNoVGV4dENoYW5nZWQoJGV2ZW50KScgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiIHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJ7eyBwbGFjZUhvbGRlckxhYmVsIHx8ICcgJyB9fVwiIFtuZ0NsYXNzXT0neyBleHQ6IGV4dGVybmFsTGluayB9JyAoY2xpY2spPSdvbkFjdGl2YXRlZCgkZXZlbnQpJyAoZm9jdXMpPSdvbkFjdGl2YXRlZCgkZXZlbnQpJyAoYmx1cik9J29uQmx1cigkZXZlbnQpJyBbZGlzYWJsZWRdPSdkaXNhYmxlZCcgW3RpdGxlXT1cIm1vZGVsID8gbW9kZWwubGFiZWwgOiAnJ1wiLz5cbiAgICAgICAgPGxhYmVsIGNsYXNzPSdWbHQtdHJ1bmNhdGUgaGlkZGVuLW1vYmlsZScgc3R5bGU9J3BhZGRpbmctbGVmdDogMjVweDsgcGFkZGluZy1yaWdodDogNDJweDsnPnt7IChtdWx0aXBsZSAmJiBpc1BvbHltb3JwaGljKSA/ICcrQWRkICcgOiAoKG1vZGVsIHx8ICFpc1BvbHltb3JwaGljKSA/IG1ldGEubGFiZWwgOiAoIG1ldGEuc2VhcmNoTGFiZWwgfHwgJ1NlYXJjaCcpKSB9fTxzcGFuICpuZ0lmPSd2YWxpZGF0aW9ucy5yZXF1aXJlZCcgY2xhc3M9J1ZsdC1yZWQnPio8L3NwYW4+Jm5ic3A7PHNwYW4gc3R5bGU9J2NvbG9yOiB2YXIoLS12Z2lwLW1ldGEtaW5wdXQtY29sb3IpOyB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTsnICpuZ0lmPSdtb2RlbCc+KHt7bW9kZWwudHlwZSB8fCBtb2RlbC5yZXNvdXJjZVR5cGUgfHwgbW9kZWwubGVuZ3RofX0pPC9zcGFuPjwvbGFiZWw+XG4gICAgICAgIDxsYWJlbCBjbGFzcz0nVmx0LXRydW5jYXRlIGhpZGRlbi1kZXNrdG9wJyBzdHlsZT0ncGFkZGluZy1sZWZ0OiAyNXB4OyBwYWRkaW5nLXJpZ2h0OiA0MnB4Oyc+e3ttZXRhLmxhYmVsIHx8IG1ldGEubmFtZX19PHNwYW4gKm5nSWY9J3ZhbGlkYXRpb25zLnJlcXVpcmVkJyBjbGFzcz0nVmx0LXJlZCc+Kjwvc3Bhbj4mbmJzcDs8c3BhbiBzdHlsZT0nY29sb3I6IHZhcigtLXZnaXAtbWV0YS1pbnB1dC1jb2xvcik7IHRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplOycgKm5nSWY9J21vZGVsJz4oe3ttb2RlbC50eXBlIHx8IG1vZGVsLnJlc291cmNlVHlwZSB8fCBtb2RlbC5sZW5ndGh9fSk8L3NwYW4+PC9sYWJlbD5cbiAgICAgIDwvbGFiZWw+XG4gICAgICA8ZGl2ICpuZ0lmPSdzZWFyY2hpbmcnIGNsYXNzPSdzZWFyY2gtcHJvZ3Jlc3MnPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJhciBWbHQtYmctcHVycGxlXCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSdWbHQtY29tcG9zaXRlX19hcHBlbmQgcmlnaHQtYWN0aW9ucyc+XG4gICAgICAgIDwhLS0gPGRpdiAqbmdJZj0ncHJldk1vZGVsICYmICFtb2RlbCcgY2xhc3M9XCJWbHQtY29tcG9zaXRlX19hcHBlbmQtLWljb25cIiAoY2xpY2spPSdyZXZlcnQoKSc+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIlZsdC1jb21wb3NpdGVfX2ljb25cIj5cbiAgICAgICAgICAgIDxzdmc+PHVzZSB4bGluazpocmVmPVwidm9sdGEvdm9sdGEtaWNvbnMuc3ZnI1ZsdC1pY29uLXJlcGx5XCIvPjwvc3ZnPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgIDxkaXYgKm5nSWY9J21vZGVsICYmICFtdWx0aXBsZScgY2xhc3M9XCJWbHQtY29tcG9zaXRlX19hcHBlbmQtLWljb25cIiAoY2xpY2spPSdyZW1vdmVTZWxlY3Rpb24oKSc+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIlZsdC1jb21wb3NpdGVfX2ljb25cIj5cbiAgICAgICAgICAgIDxzdmc+PHVzZSB4bGluazpocmVmPVwidm9sdGEvdm9sdGEtaWNvbnMuc3ZnI1ZsdC1pY29uLWNyb3NzXCIvPjwvc3ZnPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGEgW2hyZWZdPSdleHRlcm5hbExpbmsgfHwgbW9kZWwuZXh0ZXJuYWxMaW5rJyB0YXJnZXQ9J19ibGFuaycgcmVsPSdub29wZW5lcicgKm5nSWY9J2V4dGVybmFsTGluayAmJiAobW9kZWwgJiYgIW11bHRpcGxlKScgY2xhc3M9XCJWbHQtY29tcG9zaXRlX19hcHBlbmQtLWljb25cIiBhcmlhLWxhYmVsPSdPcGVuIGV4dGVybmFsJz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiVmx0LWNvbXBvc2l0ZV9faWNvblwiPlxuICAgICAgICAgICAgPHN2Zz48dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tb3BlblwiLz48L3N2Zz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9hPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPCEtLSA8c3BhbiAqbmdJZj0naGFzQ3JlYXRhYmxlcyc+XG4gICAgICA8YnV0dG9uIHR5cGU9J2J1dHRvbicgKm5nSWY9JyFtb2RlbCB8fCBtdWx0aXBsZScgKGNsaWNrKT0nb3BlblJlc291cmNlKCknIGNsYXNzPVwiVmx0LWJ0biBWbHQtYnRuLS1zZWNvbmRhcnkgVmx0LWJ0bi0taWNvbiBWbHQtYnRuLS1sYXJnZVwiIHN0eWxlPSdtYXJnaW4tbGVmdDogMTJweDsnPlxuICAgICAgICA8c3ZnPjx1c2UgeGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1wbHVzXCIvPjwvc3ZnPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIHR5cGU9J2J1dHRvbicgKm5nSWY9J21vZGVsICYmICFtdWx0aXBsZScgKGNsaWNrKT0nb3BlblJlc291cmNlKG1vZGVsKScgY2xhc3M9XCJWbHQtYnRuIFZsdC1idG4tLXByaW1hcnkgVmx0LWJ0bi0taWNvbiBWbHQtYnRuLS1sYXJnZVwiIHN0eWxlPSdtYXJnaW4tbGVmdDogMTJweDsnPlxuICAgICAgICA8c3ZnPjx1c2UgeGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1lZGl0XCIvPjwvc3ZnPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9zcGFuPiAtLT5cbiAgICA8ZGl2ICpuZ0lmPSdoYXNBcHBlbmRCdXR0b24gJiYgIWRpc2FibGVkJyBjbGFzcz1cIlZsdC1jb21wb3NpdGVfX2FwcGVuZFwiPlxuICAgICAgPGJ1dHRvbiAoZm9jdXMpPSdvbkFjdGl2YXRlZCgkZXZlbnQpJyAoYmx1cik9J29uQmx1cigkZXZlbnQpJyB0eXBlPSdidXR0b24nICpuZ0lmPSchbW9kZWwgfHwgbXVsdGlwbGUnIChjbGljayk9J29wZW5SZXNvdXJjZSgpJyBjbGFzcz1cIlZsdC1idG4gVmx0LWJ0bi0td2hpdGUgVmx0LWJ0bi0taWNvblwiIGFyaWEtbGFiZWw9J0FkZCBuZXcnPlxuICAgICAgICA8c3ZnPjx1c2UgeGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1wbHVzXCIvPjwvc3ZnPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIChmb2N1cyk9J29uQWN0aXZhdGVkKCRldmVudCknIChibHVyKT0nb25CbHVyKCRldmVudCknIHR5cGU9J2J1dHRvbicgKm5nSWY9J21vZGVsICYmICFtdWx0aXBsZScgKGNsaWNrKT0nb3BlblJlc291cmNlKG1vZGVsKScgY2xhc3M9XCJWbHQtYnRuIFZsdC1idG4tLXdoaXRlIFZsdC1idG4tLWljb25cIiBhcmlhLWxhYmVsPSdFZGl0Jz5cbiAgICAgICAgPHN2Zz48dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tZWRpdFwiLz48L3N2Zz5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPHNtYWxsICpuZ0lmPSdmLmludmFsaWQgJiYgKChmIHwgbWV0YU1vZGVsKS5fcGFyZW50LnN1Ym1pdHRlZCB8fCAoKGZ0IHwgbWV0YU1vZGVsKS50b3VjaGVkICYmIGtleUxpc3RlbmVyQWN0aXZlKSknIGNsYXNzPVwiVmx0LWZvcm1fX2VsZW1lbnRfX2Vycm9yXCI+XG4gICAgPHNwYW4gKm5nSWY9XCJmLmVycm9ycy5yZXF1aXJlZFwiPlJlcXVpcmVkPC9zcGFuPlxuICAgIDxzcGFuICpuZ0lmPVwiZi5lcnJvcnMucGF0dGVyblwiPlNob3VsZCBtYXRjaCAne3t2YWxpZGF0aW9ucy5wYXR0ZXJufX0nIHBhdHRlcm48L3NwYW4+XG4gIDwvc21hbGw+XG4gIDxzbWFsbCAqbmdJZj0nbWV0YS5oZWxwVGV4dCB8fCBtZXRhLmhpbnQnIGNsYXNzPVwiVmx0LWZvcm1fX2VsZW1lbnRfX2hpbnRcIj57e21ldGEuaGVscFRleHQgfHwgbWV0YS5oaW50fX08L3NtYWxsPlxuPC9kaXY+XG4iLCI8ZGl2IGNsYXNzPVwiVmx0LWZvcm1fX2VsZW1lbnRcIiBbbmdDbGFzc109XCJ7ICdWbHQtZm9ybV9fZWxlbWVudC0tZXJyb3InOiAoZiB8IG1ldGFNb2RlbCkuX3BhcmVudC5zdWJtaXR0ZWQgJiYgZi5pbnZhbGlkIH1cIj5cbiAgPGxhYmVsIGNsYXNzPVwiVmx0LWxhYmVsXCI+e3ttZXRhLmxhYmVsIHx8IG1ldGEubmFtZX19ICh7eyhtb2RlbCB8fCBbXSkubGVuZ3RofX0pPHNwYW4gKm5nSWY9J3ZhbGlkYXRpb25zLnJlcXVpcmVkJyBjbGFzcz0nVmx0LXJlZCc+Kjwvc3Bhbj48L2xhYmVsPlxuICA8c21hbGwgc3R5bGU9J21hcmdpbi1ib3R0b206IDRweDsnICpuZ0lmPSdtZXRhLmhpbnQnIGNsYXNzPVwiVmx0LWZvcm1fX2VsZW1lbnRfX2hpbnRcIj57e21ldGEuaGludH19PC9zbWFsbD5cbiAgPGlucHV0IGNsYXNzPSdtb2RlbCcgdHlwZT0naGlkZGVuJyBbcmVxdWlyZWRdPSd2YWxpZGF0aW9ucy5yZXF1aXJlZCcgWyhuZ01vZGVsKV09J21vZGVsJyAjZj0nbmdNb2RlbCcgW25hbWVdPSduYW1lJyAvPlxuICA8bmctY29udGFpbmVyICpuZ0lmPSdtb2RlbCc+XG4gICAgPGRpdiAqbmdGb3I9J2xldCBpdGVtIG9mIG1vZGVsOyBsZXQgaSA9IGluZGV4Oycgc3R5bGU9J2Rpc3BsYXk6IGZsZXg7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS12Z2lwLW1ldGEtc2VwYXJhdG9yLWNvbG9yKTsnPlxuICAgICAgPHZnaXAtbWV0YS1maWVsZCBzdHlsZT0nZmxleDogMTsnIFtpbmRleF09J2knIFttZXRhXT0nbGlzdCcgW3BhcmVudF09J2l0ZW0nIFtpbnRlZ3JhdGlvbkNvZGVdPSdpbnRlZ3JhdGlvbkNvZGUnIHRoZW1lPSdpbmhlcml0Jz48L3ZnaXAtbWV0YS1maWVsZD5cbiAgICAgIDxkaXYgc3R5bGU9J3BhZGRpbmctbGVmdDogMTJweDsgbWFyZ2luLXRvcDogM3B4Oyc+XG4gICAgICAgIDxidXR0b24gdHlwZT0nYnV0dG9uJyAoY2xpY2spPSdyZW1vdmUoaSknIGNsYXNzPVwiVmx0LWJ0biBWbHQtYnRuLS1saW5rXCIgW2Rpc2FibGVkXT0nbW9kZWwubGVuZ3RoID09PSAodmFsaWRhdGlvbnMubWluIHx8IDApJyBzdHlsZT0nYm9yZGVyOiAwOycgYXJpYS1sYWJlbD0nUmVtb3ZlJz5cbiAgICAgICAgICA8c3ZnPjx1c2UgeGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1iaW5cIi8+PC9zdmc+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuICA8YnV0dG9uIHN0eWxlPSd3aWR0aDogMTAwJTsnIHR5cGU9J2J1dHRvbicgKGNsaWNrKT0nYWRkKCknIGNsYXNzPVwiVmx0LWJ0biBWbHQtYnRuLS1zbWFsbCBWbHQtYnRuLS10ZXJ0aWFyeSBWbHQtYnRuLS1hcHAgaXRlbS1hZGQtYnV0dG9uXCIgW2Rpc2FibGVkXT0ndmFsaWRhdGlvbnMubWF4ICYmIG1vZGVsICYmIG1vZGVsLmxlbmd0aCA9PT0gdmFsaWRhdGlvbnMubWF4Jz5cbiAgICA8c3ZnPjx1c2UgeGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1wbHVzXCIvPjwvc3ZnPnt7bGlzdC5sYWJlbH19XG4gIDwvYnV0dG9uPlxuICA8c21hbGwgKm5nSWY9JyhmIHwgbWV0YU1vZGVsKS5fcGFyZW50LnN1Ym1pdHRlZCAmJiBmLmludmFsaWQnIGNsYXNzPVwiVmx0LWZvcm1fX2VsZW1lbnRfX2Vycm9yXCI+XG4gICAgPHNwYW4gKm5nSWY9XCJmLmVycm9ycy5yZXF1aXJlZFwiPlJlcXVpcmVkPC9zcGFuPlxuICAgIDxzcGFuICpuZ0lmPVwiZi5lcnJvcnMubWF4bGVuZ3RoXCI+TGVuZ3RoIGNhbiBub3QgZXhjZWVkIHt7dmFsaWRhdGlvbnMubWF4bGVuZ3RofX0gY2hhcmFjdGVyczwvc3Bhbj5cbiAgPC9zbWFsbD5cbiAgPHNtYWxsICpuZ0lmPSdtZXRhLmhlbHBUZXh0JyBjbGFzcz1cIlZsdC1mb3JtX19lbGVtZW50X19oaW50XCI+e3ttZXRhLmhlbHBUZXh0fX08L3NtYWxsPlxuPC9kaXY+IiwiPGRpdiAqbmdGb3I9J2xldCBzZWN0aW9uIG9mIG1ldGEuc2VjdGlvbnMnIGNsYXNzPSdWbHQtc2VjdGlvbicgW25nQ2xhc3NdPVwieyBzaG93bjogc2hvd0FsbCB8fCBzZWN0aW9uLnZpc2libGUgfHwgKCFtZXRhLm9uZVRpbWVPcHRpb25hbCAmJiAhc2VjdGlvbi4kb3B0aW9uYWwpIHx8IChtZXRhLm9uZVRpbWVPcHRpb25hbCAmJiAhb3B0aW9uYWxGaWVsZHNDb3VudCkgfVwiPlxuXHQ8aDUgKm5nSWY9J3NlY3Rpb24ubGFiZWwnIGNsYXNzPVwiVmx0LXNlY3Rpb25fX3RpdGxlXCI+e3tzZWN0aW9uLmxhYmVsfX08L2g1PlxuXHQ8ZGl2IHN0eWxlPSdvdmVyZmxvdzogdmlzaWJsZTsnIFtuZ0NsYXNzXT1cInsgJ2Zvci1wcmV2aWV3JzogcHJldmlldyB9XCI+XG5cdFx0PHNtYWxsICpuZ0lmPSdzZWN0aW9uLmRlc2NyaXB0aW9uJyBjbGFzcz1cIlZsdC1mb3JtX19lbGVtZW50X19oaW50XCI+e3tzZWN0aW9uLmRlc2NyaXB0aW9ufX08L3NtYWxsPlxuXHRcdDxkaXY+XG5cdFx0XHQ8bmctY29udGFpbmVyICpuZ0Zvcj0nbGV0IGZpZWxkIG9mIHNlY3Rpb24uZmllbGRzJz5cblx0XHRcdFx0PHZnaXAtbWV0YS1maWVsZCAqbmdJZj0nIWZpZWxkLiRoaWRkZW4gJiYgKHNob3dBbGwgfHwgc2VjdGlvbi52aXNpYmxlIHx8ICFmaWVsZC4kb3B0aW9uYWwpJyBbbWV0YV09J2ZpZWxkJyBbcGFyZW50XT0ncmVzb3VyY2UnIFtpbnRlZ3JhdGlvbkNvZGVdPSdpbnRlZ3JhdGlvbkNvZGUnIFtyZXNvdXJjZVR5cGVdPSdyZXNvdXJjZVR5cGUnIFtwcmV2aWV3XT0ncHJldmlldycgW25nQ2xhc3NdPVwieyBzaG93bjogc2hvd0FsbCB8fCB0cnVlIH1cIiB0aGVtZT0naW5oZXJpdCcgW2F0dHIuZGF0YS10aGVtZV09J3RoZW1lJz48L3ZnaXAtbWV0YS1maWVsZD5cblx0XHRcdDwvbmctY29udGFpbmVyPlxuXHRcdDwvZGl2PlxuXHQ8L2Rpdj5cbjwvZGl2PlxuPGRpdiAqbmdJZj0naXNQZXJzaXN0ZWRSZXNvdXJjZSAmJiBtZXRhLmNoaWxkcmVuICYmIHByZXZpZXcnPlxuXHQ8ZGl2ICpuZ0Zvcj0nbGV0IGNoaWxkIG9mIG1ldGEuY2hpbGRyZW4nPlxuXHRcdDxoNSBjbGFzcz0nVmx0LWNoaWxkcmVuX190aXRsZSc+XG5cdFx0XHQ8c3ZnIGNsYXNzPVwiVmx0LWljb25cIj48dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tc3RhY2tcIiAvPjwvc3ZnPiZuYnNwO1xuXHRcdFx0e3tjaGlsZC5sYWJlbH19IDxzcGFuIGNsYXNzPSdWbHQtZ3JleSc+KHt7KHJlc291cmNlW2NoaWxkLm5hbWVdIHx8IFtdKS5sZW5ndGh9fSk8L3NwYW4+XG5cdFx0PC9oNT5cblx0XHQ8ZGl2ICpuZ0Zvcj1cImxldCBjIG9mIHJlc291cmNlW2NoaWxkLm5hbWVdXCIgc3R5bGU9J3Bvc2l0aW9uOiByZWxhdGl2ZTsnPlxuXG5cdFx0XHQ8ZGl2IGNsYXNzPVwiVmx0LWNhcmQgVmx0LWJnLXdoaXRlXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJWbHQtY2FyZF9fY29udGVudCBWbHQtYnRuLW9uLWhvdmVyXCI+XG5cdFx0XHRcdFx0PGg1Pnt7Yy5TdWJqZWN0IHx8IGMuc3ViamVjdCB8fCBjLnN1bW1hcnkgfHwgYy50aXRsZSB8fCBjLkNhc2VOdW1iZXIgfHwgYy5jb21tZW50IHx8IGMuYm9keSB8fCBjLm5hbWUgfHwgYy50b3BpYyB8fCBjLmNvbnRlbnQgfHwgJy4uLicgfX08L2g1PlxuXHRcdFx0XHRcdDxkaXYgc3R5bGU9J2ZvbnQtc2l6ZTogMTJweDsgbGluZS1oZWlnaHQ6IDE2cHg7Jz5cblx0XHRcdFx0XHRcdENyZWF0ZWQ6IDxzcGFuIGNsYXNzPSdWbHQtYmxhY2snPnt7Yy5fdmdpcy5jcmVhdGVkRGF0ZSB8IGRhdGU6J21lZGl1bURhdGUnfX08L3NwYW4+XG5cdFx0XHRcdFx0XHRFZGl0ZWQ6IDxzcGFuIGNsYXNzPSdWbHQtYmxhY2snPnt7Yy5fdmdpcy5tb2RpZmllZERhdGUgfCBkYXRlOidtZWRpdW0nfX08L3NwYW4+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cIlZsdC1iYWRnZSBWbHQtYmFkZ2UtLWFwcCBWbHQtYmFkZ2UtLXB1cnBsZSBWbHQtYmFkZ2UtLXNtYWxsXCI+e3tjLl92Z2lzLnJlc291cmNlVHlwZX19PC9kaXY+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cIlZsdC1idG4tZ3JvdXAgVmx0LWJ0bi1ncm91cC0taG92ZXJcIj5cblx0XHRcdFx0XHRcdDxhICpuZ0lmPSdjLl92Z2lzLmV4dGVybmFsTGluaycgYXR0ci5ocmVmPSd7e2MuX3ZnaXMuZXh0ZXJuYWxMaW5rfX0nIHRhcmdldD0nX2JsYW5rJyByZWw9J25vb3BlbmVyJyByZWw9J25vb3BlbmVyJyBjbGFzcz1cIlZsdC1idG4gVmx0LWJ0bi0tdGVydGlhcnkgVmx0LWJ0bi0taWNvblwiIGFyaWEtbGFiZWw9J09wZW4gZXh0ZXJuYWwnPjxzdmcgc3R5bGU9J21hcmdpbi1sZWZ0OiAwOyBtYXJnaW4tcmlnaHQ6IDA7Jz48dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tb3BlblwiLz48L3N2Zz48L2E+XG5cdFx0XHRcdFx0XHQ8YnV0dG9uIHR5cGU9J2J1dHRvbicgKGNsaWNrKT0nb3BlbkNoaWxkKGNoaWxkLCBjKScgY2xhc3M9XCJWbHQtYnRuIFZsdC1idG4tLXRlcnRpYXJ5IFZsdC1idG4tLWljb25cIj48c3ZnIHN0eWxlPSdtYXJnaW4tbGVmdDogMDsgbWFyZ2luLXJpZ2h0OiAwOyc+PHVzZSBhdHRyLnhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24te3sgY2hpbGQucmVmZXJlbmNlLmVkaXRhYmxlID8gJ2VkaXQnIDogJ2V5ZS1uZWdhdGl2ZScgfX1cIi8+PC9zdmc+PC9idXR0b24+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdFx0PGJ1dHRvbiBzdHlsZT0nd2lkdGg6IDEwMCU7IG1hcmdpbi10b3A6IDA7IG1heC13aWR0aDogMTAwJTsnIHR5cGU9J2J1dHRvbicgKGNsaWNrKT0nb3BlbkNoaWxkKGNoaWxkKScgY2xhc3M9XCJWbHQtYnRuIFZsdC1idG4tLXNtYWxsIFZsdC1idG4tLXNlY29uZGFyeVwiIFtkaXNhYmxlZF09J2NoaWxkLmNyZWF0YWJsZSA9PT0gZmFsc2UnPlxuXHRcdFx0PHN2Zz48dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tcGx1c1wiLz48L3N2Zz57e2NoaWxkLnJlZmVyZW5jZS5sYWJlbH19XG5cdFx0PC9idXR0b24+XG5cdDwvZGl2PlxuPC9kaXY+XG48ZGl2ICpuZ0lmPSchKG1ldGEub25lVGltZU9wdGlvbmFsICYmIHNob3dBbGwpJyBbbmdDbGFzc109J3sgY2VudGVyZWQ6ICFtZXRhLm9uZVRpbWVPcHRpb25hbCB9Jz5cblx0PGJ1dHRvbiAqbmdJZj0nIXByZXZpZXcgJiYgb3B0aW9uYWxGaWVsZHNDb3VudCcgdHlwZT0nYnV0dG9uJyAoY2xpY2spPSd0b2dnbGVPcHRpb25hbEZpZWxkcygpJyBjbGFzcz1cIlZsdC1idG4gVmx0LWJ0bi0tc21hbGwgVmx0LWJ0bi0tbGluayBtb3JlLWJ1dHRvblwiIHN0eWxlPSdtYXJnaW46IDA7IG1hcmdpbi1ib3R0b206IDEwcHg7Jz5cblx0XHQ8c3ZnPjx1c2UgYXR0ci54bGluazpocmVmPVwidm9sdGEvdm9sdGEtaWNvbnMuc3ZnI1ZsdC1pY29uLWNoZXZyb24te3sgc2hvd0FsbCA/ICd1cCcgOiAnZG93bicgfX1cIi8+PC9zdmc+XG5cdFx0e3sgc2hvd0FsbCA/ICdIaWRlJyA6ICdTaG93JyB9fSBPcHRpb25hbCBGaWVsZHMgKHt7b3B0aW9uYWxGaWVsZHNDb3VudH19KVxuXHQ8L2J1dHRvbj5cbjwvZGl2PlxuIiwiPGRpdiAqbmdJZj0nZ2VuZXJhbEVycm9yJyBjbGFzcz1cIlZsdC1jYWxsb3V0IFZsdC1jYWxsb3V0LS1jcml0aWNhbFwiIHN0eWxlPSdvdmVyZmxvdzogYXV0bzsgbWFyZ2luOiAyMHB4Oyc+XG5cdDxpPjwvaT5cblx0PGRpdiBjbGFzcz1cIlZsdC1jYWxsb3V0X19jb250ZW50XCI+XG5cdFx0PHA+e3tnZW5lcmFsRXJyb3J9fTwvcD5cblx0PC9kaXY+XG48L2Rpdj5cbjxkaXYgKm5nSWY9JyFtZXRhJyBjbGFzcz1cIlZsdC1wcm9ncmVzc1wiPlxuXHQ8ZGl2IGNsYXNzPVwiVmx0LXByb2dyZXNzX19iYXJcIiBbbmdDbGFzc109XCJ7IGxvYWRpbmc6IG1ldGFMb2FkaW5nIH1cIiByb2xlPVwicHJvZ3Jlc3NiYXJcIiBhcmlhLXZhbHVlbWluPVwiMFwiIGFyaWEtdmFsdWV0ZXh0PVwiTG9hZGluZyBNZXRhZGF0YVwiIGFyaWEtdmFsdWVtYXg9XCIxMDBcIj48L2Rpdj5cbjwvZGl2PlxuPGZvcm0gW3ZnaXBNZXRhRm9ybUF1dG9mb2N1c109JyFyZXNvdXJjZSB8fCAhcmVzb3VyY2UuZXh0ZXJuYWxJZCcgKm5nSWY9J21ldGEgJiYgIWdlbmVyYWxFcnJvcicgI3Jlc291cmNlRm9ybT1cIm5nRm9ybVwiIFtuYW1lXT0ncmVzb3VyY2UucmVzb3VyY2VUeXBlJyAobmdTdWJtaXQpPSdzdWJtaXQocmVzb3VyY2VGb3JtKScgbm92YWxpZGF0ZT5cblx0PGRpdiBjbGFzcz0nZm9ybS1jb250ZW50JyBzdHlsZT0nb3ZlcmZsb3c6IGhpZGRlbjsnPlxuXHRcdDxkaXYgW25nQ2xhc3NdPVwieyAnVmx0LWNhbGxvdXQtLWRpc21pc3NlZCc6ICFmb3JtRXJyb3JzIH1cIiBjbGFzcz1cIlZsdC1jYWxsb3V0IFZsdC1jYWxsb3V0LS1iYW5uZXIgVmx0LWNhbGxvdXQtLWNyaXRpY2FsXCI+XG5cdFx0XHQ8aT48L2k+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwiVmx0LWNhbGxvdXRfX2NvbnRlbnRcIiBzdHlsZT1cIm1hcmdpbi10b3A6IGF1dG87XCI+XG5cdFx0XHRcdDxwPlRoZXJlIGlzIGEgcHJvYmxlbSB3aXRoIG9uZSBvciBtb3JlIGZpZWxkczwvcD5cblx0XHRcdFx0PHNtYWxsIHN0eWxlPSdmb250LXdlaWdodDogNjAwOyBmb250LXNpemU6IDEuMGVtOycgKm5nSWY9J2Zvcm1FcnJvcnMnPnt7IGZvcm1FcnJvcnMubWVzc2FnZSB8fCBmb3JtRXJyb3JzIH19PC9zbWFsbD5cblx0XHRcdDwvZGl2PlxuXHRcdFx0PGJ1dHRvbiB0eXBlPSdidXR0b24nIGNsYXNzPVwiVmx0LWNhbGxvdXRfX2Rpc21pc3NcIiAoY2xpY2spPSdjbGVhckZvcm1FcnJvcnMoKScgYXJpYS1sYWJlbD1cIkRpc21pc3NcIj48L2J1dHRvbj5cblx0XHQ8L2Rpdj5cblx0XHQ8ZGl2IGNsYXNzPVwiVmx0LWNhcmRfX2NvbnRlbnRcIiBzdHlsZT0nbWluLWhlaWdodDogNDBweDsnPlxuXHRcdFx0PHZnaXAtbWV0YS1sYXlvdXQgKm5nSWY9J2VkaXQnIFttZXRhXT0nbWV0YS5sYXlvdXQnIFtyZXNvdXJjZV09J21vZGVsJyBbcHJldmlld109J2ZhbHNlJyBbaW50ZWdyYXRpb25dPSdtZXRhLmludGVncmF0aW9uJyBbdHlwZV09J3Jlc291cmNlLnJlc291cmNlVHlwZScgdGhlbWU9J2luaGVyaXQnPjwvdmdpcC1tZXRhLWxheW91dD5cblx0XHRcdDx2Z2lwLW1ldGEtbGF5b3V0ICpuZ0lmPSchZWRpdCcgW21ldGFdPSdtZXRhLmxheW91dCcgW3Jlc291cmNlXT0nbW9kZWwnIFtwcmV2aWV3XT0ndHJ1ZScgW2ludGVncmF0aW9uXT0nbWV0YS5pbnRlZ3JhdGlvbicgW3R5cGVdPSdyZXNvdXJjZS5yZXNvdXJjZVR5cGUnIHRoZW1lPSdpbmhlcml0Jz48L3ZnaXAtbWV0YS1sYXlvdXQ+XG5cdFx0PC9kaXY+XG5cdDwvZGl2PlxuXHQ8ZGl2IGNsYXNzPVwiVmx0LWNhcmRfX2Zvb3RlclwiPlxuXHRcdDxidXR0b24gY2xhc3M9XCJWbHQtYnRuIFZsdC1idG4tLXNlY29uZGFyeSBWbHQtYnRuLS1hcHAgVmx0LWJ0bi0tb3V0bGluZVwiIHR5cGU9J2J1dHRvbicgYXJpYS1sYWJlbD0nQ2FuY2VsJyAoY2xpY2spPSdjbG9zZSgpJz5cblx0XHRcdHt7IGVkaXQgPyAnQ2FuY2VsJyA6ICdDbG9zZScgfX1cblx0XHQ8L2J1dHRvbj5cblx0XHQ8YnV0dG9uICpuZ0lmPSdlZGl0JyBjbGFzcz1cIlZsdC1idG4gVmx0LWJ0bi0tYXBwXCIgW25nQ2xhc3NdPVwieyAnVmx0LWJ0bi0tcHJpbWFyeSc6IGlzUGVyc2lzdGVudCwgJ1ZsdC1idG4tLXNlY29uZGFyeSc6ICFpc1BlcnNpc3RlbnQgfVwiIHR5cGU9J3N1Ym1pdCc+XG5cdFx0XHR7eyAocmVzb3VyY2UgJiYgcmVzb3VyY2UuZXh0ZXJuYWxJZCkgPyAnVXBkYXRlJyA6ICdDcmVhdGUnIH19XG5cdFx0PC9idXR0b24+XG5cdFx0PGJ1dHRvbiAoY2xpY2spPSdlZGl0TW9kZSgpJyAqbmdJZj0nIWVkaXQgJiYgaXNFZGl0YWJsZScgW2Rpc2FibGVkXT0nIWlzRWRpdGFibGUnIGNsYXNzPVwiVmx0LWJ0biBWbHQtYnRuLS1hcHAgVmx0LWJ0bi0tcHJpbWFyeVwiIHR5cGU9J2J1dHRvbicgYXJpYS1sYWJlbD0nRWRpdCc+XG5cdFx0XHRFZGl0XG5cdFx0PC9idXR0b24+XG5cdFx0PGRpdiBzdHlsZT0nbWFyZ2luLXJpZ2h0OiA4cHg7IGZsZXg6IDE7Jz5cblx0XHRcdDxkaXYgKm5nSWY9J21ldGEuYXZhaWxhYmxlTGF5b3V0cyAmJiBtZXRhLmF2YWlsYWJsZUxheW91dHMubGVuZ3RoJyBjbGFzcz1cIlZsdC1mb3JtX19lbGVtZW50IFZsdC1mb3JtX19lbGVtZW50LS1iaWdcIiBzdHlsZT0ncGFkZGluZzogMDsgbWFyZ2luOiAtOHB4IC0xOHB4IC04cHggMDsnPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwiVmx0LXNlbGVjdFwiPlxuXHRcdFx0XHRcdDxsYWJlbCBzdHlsZT0nYWxsOiBpbmhlcml0Oyc+XG5cdFx0XHRcdFx0XHQ8c2VsZWN0IHN0eWxlPSdib3JkZXI6IDA7IG1hcmdpbi10b3A6IDNweDsgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7JyAoY2hhbmdlKT0nY2hhbmdlTGF5b3V0KCknIFsobmdNb2RlbCldPSdjdXJyZW50TGF5b3V0SWQnIFtuZ01vZGVsT3B0aW9uc109J3sgc3RhbmRhbG9uZTogdHJ1ZSB9JyBbZGlzYWJsZWRdPSdpc1BlcnNpc3RlbnQnPlxuXHRcdFx0XHRcdFx0XHQ8b3B0aW9uIHNlbGVjdGVkIGRpc2FibGVkPlNlbGVjdCBsYXlvdXQ8L29wdGlvbj5cblx0XHRcdFx0XHRcdFx0PG9wdGlvbiAqbmdGb3I9J2xldCBsYXlvdXQgb2YgbWV0YS5hdmFpbGFibGVMYXlvdXRzJyBbbmdWYWx1ZV09J2xheW91dC5pZCc+e3tsYXlvdXQubmFtZX19PC9vcHRpb24+XG5cdFx0XHRcdFx0XHQ8L3NlbGVjdD5cblx0XHRcdFx0XHRcdDxsYWJlbD5MYXlvdXQ8L2xhYmVsPlxuXHRcdFx0XHRcdDwvbGFiZWw+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdFx0PGRpdiBjbGFzcz1cIlZsdC1kcm9wZG93biByZXNvdXJjZS1tZW51XCIgW25nQ2xhc3NdPVwieyAnVmx0LWRyb3Bkb3duLS1leHBhbmRlZCc6IHJlc291cmNlTWVudVZpc2libGUgfVwiIHN0eWxlPSdtYXJnaW4tbGVmdDogMnB4Oyc+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwiVmx0LWRyb3Bkb3duX19wYW5lbFwiIHN0eWxlPSdib3R0b206IDQwcHg7IHJpZ2h0OiAtNHB4OyB0b3A6IGluaXRpYWw7Jz5cblx0XHRcdFx0PGRpdiBjbGFzcz1cIlZsdC1kcm9wZG93bl9fcGFuZWxfX2NvbnRlbnRcIj5cblx0XHRcdFx0XHQ8YSBjbGFzcz1cIlZsdC1kcm9wZG93bl9fbGlua1wiIChjbGljayk9J2xvYWRNZXRhZGF0YShjdXJyZW50TGF5b3V0SWQsIHRydWUpJz5cblx0XHRcdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0XHRcdDxzdmcgY2xhc3M9J1ZsdC1pY29uIFZsdC1pY29uLS1zbWFsbGVyJz48dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tcmVmcmVzaFwiLz48L3N2Zz4mbmJzcDsmbmJzcDtSZWZyZXNoIG1ldGFkYXRhXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L2E+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwiVmx0LWRyb3Bkb3duX190cmlnZ2VyXCI+XG5cdFx0XHRcdDxidXR0b24gdHlwZT0nYnV0dG9uJyAoY2xpY2spPSdvcGVuUmVzb3VyY2VNZW51KCknIGNsYXNzPVwiVmx0LWJ0biBWbHQtYnRuLS1saW5rXCIgYXJpYS1sYWJlbD0nUmVzb3VyY2UgbWVudSc+XG5cdFx0XHRcdFx0PHN2ZyBjbGFzcz0nVmx0LWljb24gVmx0LWljb24tLXNtYWxsJyBzdHlsZT0nbWFyZ2luOiAwOyc+PHVzZSB4bGluazpocmVmPVwidm9sdGEvdm9sdGEtaWNvbnMuc3ZnI1ZsdC1pY29uLW1vcmUtdi1uZWdhdGl2ZVwiLz48L3N2Zz5cblx0XHRcdFx0PC9idXR0b24+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0PC9kaXY+XG48L2Zvcm0+XG48ZGl2IGNsYXNzPSdidXN5LW1hc2snIFtuZ0NsYXNzXT1cInsgYWN0aXZlOiBidXN5IH1cIj5cblx0PGRpdiBzdHlsZT0naGVpZ2h0OiAxMDAlOyBkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsnPlxuXHRcdDxkaXYgY2xhc3M9XCJWbHQtc3Bpbm5lclwiPjwvZGl2PlxuXHQ8L2Rpdj5cbjwvZGl2PiIsIjxkaXYgY2xhc3M9XCJWbHQtY2FyZCBWbHQtYmctd2hpdGVcIj5cblx0PGRpdiBjbGFzcz1cIlZsdC1jYXJkX19jb250ZW50IFZsdC1idG4tb24taG92ZXJcIj5cblx0XHQ8aDU+e3ttb2RlbC5TdWJqZWN0IHx8IG1vZGVsLnN1YmplY3QgfHwgbW9kZWwuc3VtbWFyeSB8fCBtb2RlbC50aXRsZSB8fCBtb2RlbC5DYXNlTnVtYmVyIHx8IG1vZGVsLmNvbW1lbnQgfHwgbW9kZWwuYm9keSB8fCBtb2RlbC5uYW1lIHx8IG1vZGVsLnRvcGljIHx8ICcuLi4nIH19PC9oNT5cblx0XHQ8ZGl2IHN0eWxlPSdmb250LXNpemU6IDEycHg7IGxpbmUtaGVpZ2h0OiAxNnB4Oyc+XG5cdFx0XHRDcmVhdGVkOiA8c3BhbiBjbGFzcz0nVmx0LWJsYWNrJz57e21vZGVsLl92Z2lzLmNyZWF0ZWREYXRlIHwgZGF0ZTonbWVkaXVtRGF0ZSd9fTwvc3Bhbj5cblx0XHRcdEVkaXRlZDogPHNwYW4gY2xhc3M9J1ZsdC1ibGFjayc+e3ttb2RlbC5fdmdpcy5tb2RpZmllZERhdGUgfCBkYXRlOidtZWRpdW0nfX08L3NwYW4+XG5cdFx0PC9kaXY+XG5cdFx0PGRpdiBjbGFzcz1cIlZsdC1iYWRnZSBWbHQtYmFkZ2UtLWFwcCBWbHQtYmFkZ2UtLXB1cnBsZSBWbHQtYmFkZ2UtLXNtYWxsXCI+e3ttb2RlbC5fdmdpcy5yZXNvdXJjZVR5cGV9fTwvZGl2PlxuXHRcdDxkaXYgY2xhc3M9XCJWbHQtYnRuLWdyb3VwIFZsdC1idG4tZ3JvdXAtLWhvdmVyXCI+XG5cdFx0XHQ8YSAqbmdJZj0nbW9kZWwuX3ZnaXMuZXh0ZXJuYWxMaW5rJyBhdHRyLmhyZWY9J3t7bW9kZWwuX3ZnaXMuZXh0ZXJuYWxMaW5rfX0nIHRhcmdldD0nX2JsYW5rJyByZWw9J25vb3BlbmVyJyBjbGFzcz1cIlZsdC1idG4gVmx0LWJ0bi0tdGVydGlhcnkgVmx0LWJ0bi0taWNvblwiIGFyaWEtbGFiZWw9J09wZW4gZXh0ZXJuYWwnPjxzdmcgc3R5bGU9J21hcmdpbi1sZWZ0OiAwOyBtYXJnaW4tcmlnaHQ6IDA7Jz48dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tb3BlblwiLz48L3N2Zz48L2E+XG5cdFx0XHQ8YnV0dG9uIHR5cGU9J2J1dHRvbicgKGNsaWNrKT0nb3BlbihyZXNvdXJjZSwgbW9kZWwpJyBjbGFzcz1cIlZsdC1idG4gVmx0LWJ0bi0tdGVydGlhcnkgVmx0LWJ0bi0taWNvblwiIGFyaWEtbGFiZWw9J0VkaXQnPjxzdmcgc3R5bGU9J21hcmdpbi1sZWZ0OiAwOyBtYXJnaW4tcmlnaHQ6IDA7Jz48dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tZWRpdFwiLz48L3N2Zz48L2J1dHRvbj5cblx0XHQ8L2Rpdj5cblx0PC9kaXY+XG48L2Rpdj5cbiJdfQ==
|