@vgip/meta-ui 1.7.4 → 1.7.6
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/esm2022/lib/fieldAbstract.mjs +1 -1
- package/esm2022/lib/fieldBoolean/index.mjs +4 -6
- package/esm2022/lib/fieldComposite/index.mjs +4 -8
- package/esm2022/lib/fieldList/index.mjs +2 -2
- package/esm2022/lib/fieldRadio/index.mjs +4 -6
- package/esm2022/lib/fieldReference/index.mjs +15 -13
- package/esm2022/lib/fieldRichtext/index.mjs +4 -6
- package/esm2022/lib/fieldSelect/index.mjs +19 -4
- package/esm2022/lib/fieldText/index.mjs +25 -16
- package/esm2022/lib/layout/index.mjs +5 -4
- package/esm2022/lib/metaField/index.mjs +5 -2
- package/esm2022/lib/refDialog/index.mjs +1 -1
- package/esm2022/lib/resource/index.mjs +20 -4
- package/esm2022/lib/services/metaReference/index.mjs +8 -3
- package/esm2022/lib/services/metaResource/index.mjs +4 -4
- package/fesm2022/vgip-meta-ui-fieldAbstract-9955be39.mjs.map +1 -1
- package/fesm2022/vgip-meta-ui-index-1799a060.mjs +864 -0
- package/fesm2022/vgip-meta-ui-index-1799a060.mjs.map +1 -0
- package/fesm2022/{vgip-meta-ui-index-9fd8e1b0.mjs → vgip-meta-ui-index-45a741f4.mjs} +5 -9
- package/fesm2022/vgip-meta-ui-index-45a741f4.mjs.map +1 -0
- package/fesm2022/{vgip-meta-ui-index-24fe289e.mjs → vgip-meta-ui-index-46c7f4e4.mjs} +36 -16
- package/fesm2022/vgip-meta-ui-index-46c7f4e4.mjs.map +1 -0
- package/fesm2022/{vgip-meta-ui-index-bc945c3c.mjs → vgip-meta-ui-index-6f647ae9.mjs} +21 -6
- package/fesm2022/vgip-meta-ui-index-6f647ae9.mjs.map +1 -0
- package/fesm2022/{vgip-meta-ui-index-c39ea0ec.mjs → vgip-meta-ui-index-8b2ba164.mjs} +4 -6
- package/fesm2022/vgip-meta-ui-index-8b2ba164.mjs.map +1 -0
- package/fesm2022/{vgip-meta-ui-index-c5756fbe.mjs → vgip-meta-ui-index-aa21fd6a.mjs} +13 -10
- package/fesm2022/vgip-meta-ui-index-aa21fd6a.mjs.map +1 -0
- package/fesm2022/{vgip-meta-ui-index-b0a76073.mjs → vgip-meta-ui-index-b3099377.mjs} +4 -6
- package/fesm2022/vgip-meta-ui-index-b3099377.mjs.map +1 -0
- package/fesm2022/vgip-meta-ui-index-ea3cad77.mjs +77 -0
- package/fesm2022/vgip-meta-ui-index-ea3cad77.mjs.map +1 -0
- package/fesm2022/{vgip-meta-ui-index-9c99e9b0.mjs → vgip-meta-ui-index-ebaddb9b.mjs} +3 -3
- package/fesm2022/{vgip-meta-ui-index-9c99e9b0.mjs.map → vgip-meta-ui-index-ebaddb9b.mjs.map} +1 -1
- package/fesm2022/{vgip-meta-ui-index-5871a6f2.mjs → vgip-meta-ui-index-ee4a5a52.mjs} +4 -6
- package/fesm2022/vgip-meta-ui-index-ee4a5a52.mjs.map +1 -0
- package/fesm2022/vgip-meta-ui.mjs +12 -12
- package/lib/fieldAbstract.d.ts +1 -0
- package/lib/fieldBoolean/index.d.ts +1 -2
- package/lib/fieldComposite/index.d.ts +1 -3
- package/lib/fieldRadio/index.d.ts +1 -2
- package/lib/fieldRichtext/index.d.ts +1 -2
- package/lib/fieldSelect/index.d.ts +0 -1
- package/lib/fieldText/index.d.ts +2 -2
- package/lib/layout/index.d.ts +1 -0
- package/lib/metaField/index.d.ts +2 -1
- package/lib/resource/index.d.ts +5 -1
- package/lib/services/metaReference/index.d.ts +1 -1
- package/package.json +1 -1
- package/fesm2022/vgip-meta-ui-index-24fe289e.mjs.map +0 -1
- package/fesm2022/vgip-meta-ui-index-5871a6f2.mjs.map +0 -1
- package/fesm2022/vgip-meta-ui-index-9e4137fe.mjs +0 -68
- package/fesm2022/vgip-meta-ui-index-9e4137fe.mjs.map +0 -1
- package/fesm2022/vgip-meta-ui-index-9fd8e1b0.mjs.map +0 -1
- package/fesm2022/vgip-meta-ui-index-a3a43cf7.mjs +0 -862
- package/fesm2022/vgip-meta-ui-index-a3a43cf7.mjs.map +0 -1
- package/fesm2022/vgip-meta-ui-index-b0a76073.mjs.map +0 -1
- package/fesm2022/vgip-meta-ui-index-bc945c3c.mjs.map +0 -1
- package/fesm2022/vgip-meta-ui-index-c39ea0ec.mjs.map +0 -1
- package/fesm2022/vgip-meta-ui-index-c5756fbe.mjs.map +0 -1
|
@@ -289,16 +289,18 @@ export class FieldReference extends FieldAbstract {
|
|
|
289
289
|
else {
|
|
290
290
|
if (this.default.id && this.default.label && this.default.type) {
|
|
291
291
|
setTimeout(() => {
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
292
|
+
if (!this.model) {
|
|
293
|
+
const item = {
|
|
294
|
+
id: this.default.id || this.default.value,
|
|
295
|
+
label: this.default.label || this.default.id || this.default.value,
|
|
296
|
+
type: this.default.type,
|
|
297
|
+
smart: true
|
|
298
|
+
};
|
|
299
|
+
if (this.default.externalLink) {
|
|
300
|
+
item.externalLink = this.default.externalLink;
|
|
301
|
+
}
|
|
302
|
+
this.parent[this.meta.name] = item;
|
|
300
303
|
}
|
|
301
|
-
this.parent[this.meta.name] = item;
|
|
302
304
|
}, 0);
|
|
303
305
|
}
|
|
304
306
|
else {
|
|
@@ -666,7 +668,7 @@ export class FieldReference extends FieldAbstract {
|
|
|
666
668
|
}
|
|
667
669
|
}
|
|
668
670
|
}
|
|
669
|
-
this.referenceService.openDialog(refDialogComponent, this.metaResource, this.integrationCode, (this.metaReference instanceof Array) ? this.metaReference.filter(rt => rt.hidden !== true) : this.metaReference, model, null, this.searchResourceType.resourceType, theme).subscribe((result) => {
|
|
671
|
+
this.referenceService.openDialog(refDialogComponent, this.metaResource, this.integrationCode, (this.metaReference instanceof Array) ? this.metaReference.filter(rt => rt.hidden !== true) : this.metaReference, model, null, this.searchResourceType.resourceType, theme, this.overlayContainer).subscribe((result) => {
|
|
670
672
|
if (result) {
|
|
671
673
|
this.parent[this.meta.name] = result;
|
|
672
674
|
this.onChange.emit(result);
|
|
@@ -820,10 +822,10 @@ export class FieldReference extends FieldAbstract {
|
|
|
820
822
|
}
|
|
821
823
|
}
|
|
822
824
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.11", ngImport: i0, type: FieldReference, deps: [{ token: i1.MetaReferenceService }, { token: i2.MetaResourceService }, { token: i3.MetaMsgService }, { token: i4.MetaContextService }, { token: i5.MetaTrackerService }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
823
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.11", 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' [title]='meta.label || meta.name'>{{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;'>\n <use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\" />\n </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 <a [href]='externalLink || model.externalLink' target='_blank' rel='noopener'\n *ngIf='externalLink && (model && !multiple)' class=\"Vlt-composite__append--icon preview\" aria-label='Open external'>\n <div class=\"Vlt-composite__icon\">\n <svg>\n <use xlink:href=\"volta/volta-icons.svg#Vlt-icon-open\" />\n </svg>\n </div>\n </a>\n</div>\n<div *ngIf='!preview' class=\"meta-field-reference Vlt-form__element Vlt-form__element--big\"\n [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%;'> <!-- eslint-disable-line -->\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}\"\n 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 <a href='#' [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 </a>\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 <a href='#' [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 </a>\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\"\n *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'\n (onChange)='onSearchResourceTypeChanged($event)' (onLeave)='onBlur($event)'\n [integrationCode]='integrationCode' theme='inherit'></vgip-meta-field>\n <svg class='Vlt-icon Vlt-grey Vlt-icon--smaller visible-mobile mobile-icon'\n style='position: absolute; top: 15px; left: 14px; pointer-events: none;'>\n <use xlink:href=\"volta/volta-icons.svg#Vlt-icon-menu\" />\n </svg>\n </div>\n </div>\n <div *ngIf='!(isPolymorphic && showTypes && (multiple || !model || dropdownVisible))'>\n <!-- required by css -->\n </div>\n <div class=\"Vlt-composite__wrapper Vlt-input\" style='overflow: hidden;'\n [ngClass]=\"{ 'has-append-button': hasAppendButton && !disabled, 'vgip-disable': 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'>\n <use attr.xlink:href=\"volta/volta-icons.svg#Vlt-icon-{{ multiple ? 'stack' : 'search'}}\" />\n </svg>\n <svg *ngIf='!isSearchable || (model && !multiple)'\n [ngStyle]=\"{fill: integrationIcon === 'Brand-icon-vonage' ? 'var(--vgip-meta-input-color)' : ''}\">\n <use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\" />\n </svg>\n </div>\n <div *ngIf='suggestions.length' class=\"Vlt-badge Vlt-badge--small Vlt-badge--purple\"\n style='padding: 0px 4px; position: absolute; top: 26px; left: 4px; pointer-events: none; min-width: 14px;'>\n {{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> <!-- eslint-disable-line @angular-eslint/template/label-has-associated-control-->\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> <!-- eslint-disable-line @angular-eslint/template/label-has-associated-control-->\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 <a href='#' *ngIf='model && !multiple' class=\"Vlt-composite__append--icon\" (click)='removeSelection($event)'>\n <div class=\"Vlt-composite__icon\">\n <svg>\n <use xlink:href=\"volta/volta-icons.svg#Vlt-icon-cross\" />\n </svg>\n </div>\n </a>\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>\n <use xlink:href=\"volta/volta-icons.svg#Vlt-icon-open\" />\n </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'\n (click)='openResource()' class=\"Vlt-btn Vlt-btn--white Vlt-btn--icon\" aria-label='Add new'>\n <svg>\n <use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\" />\n </svg>\n </button>\n <button (focus)='onActivated($event)' (blur)='onBlur($event)' type='button' *ngIf='model && !multiple'\n (click)='openResource(model)' class=\"Vlt-btn Vlt-btn--white Vlt-btn--icon\" aria-label='Edit'>\n <svg>\n <use xlink:href=\"volta/volta-icons.svg#Vlt-icon-edit\" />\n </svg>\n </button>\n </div>\n </div>\n <small *ngIf='f.invalid && ((f | metaModel)._parent.submitted || ((ft | metaModel).touched && keyListenerActive))'\n 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 <span *ngIf=\"f.errors.custom\">{{f.errors.custom}} </span>\n </small>\n <small *ngIf='meta.helpText || meta.hint' class=\"Vlt-form__element__hint\">{{meta.helpText || meta.hint}}</small>\n</div>", 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)}.vgip-disable .Vlt-composite__append{cursor:not-allowed;pointer-events:none}.Vlt-composite__append--icon.preview{bottom:initial;padding:0 2px}.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:700}.Vlt-dropdown__panel{max-width:100%;width:100%;min-width:280px}.Vlt-dropdown__panel .Vlt-dropdown__link.smart{font-weight:700;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"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i8.MetaField, selector: "vgip-meta-field", inputs: ["meta", "parent", "integrationCode", "resourceType", "index", "scope", "preview", "theme"], outputs: ["onChange", "onLeave"] }, { kind: "pipe", type: i9.MetaModelPipe, name: "metaModel" }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }] }); }
|
|
825
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.11", 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' [title]='meta.label || meta.name'>{{meta.label || meta.name}}</div>\n <div *ngIf='!multiple' class='vgip-meta-field-value __gu' [ngClass]=\"{ 'has-external-link': externalLink || model.externalLink }\">\n <svg class=\"Vlt-icon Vlt-icon--smaller\" style='margin-top: -3px;'>\n <use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\" />\n </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 <a [href]='externalLink || model.externalLink' target='_blank' rel='noopener'\n *ngIf='externalLink && (model && !multiple)' class=\"Vlt-composite__append--icon preview\" aria-label='Open external'>\n <div class=\"Vlt-composite__icon\">\n <svg>\n <use xlink:href=\"volta/volta-icons.svg#Vlt-icon-open\" />\n </svg>\n </div>\n </a>\n</div>\n<div *ngIf='!preview' class=\"meta-field-reference Vlt-form__element Vlt-form__element--big\"\n [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%;'> <!-- eslint-disable-line -->\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}\"\n 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 <a href='#' [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 </a>\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 <a href='#' [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 </a>\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\"\n *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'\n (onChange)='onSearchResourceTypeChanged($event)' (onLeave)='onBlur($event)'\n [integrationCode]='integrationCode' theme='inherit'></vgip-meta-field>\n <svg class='Vlt-icon Vlt-grey Vlt-icon--smaller visible-mobile mobile-icon'\n style='position: absolute; top: 15px; left: 14px; pointer-events: none;'>\n <use xlink:href=\"volta/volta-icons.svg#Vlt-icon-menu\" />\n </svg>\n </div>\n </div>\n <div *ngIf='!(isPolymorphic && showTypes && (multiple || !model || dropdownVisible))'>\n <!-- required by css -->\n </div>\n <div class=\"Vlt-composite__wrapper Vlt-input\" style='overflow: hidden;'\n [ngClass]=\"{ 'has-append-button': hasAppendButton && !disabled, 'vgip-disable': 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'>\n <use attr.xlink:href=\"volta/volta-icons.svg#Vlt-icon-{{ multiple ? 'stack' : 'search'}}\" />\n </svg>\n <svg *ngIf='!isSearchable || (model && !multiple)'\n [ngStyle]=\"{fill: integrationIcon === 'Brand-icon-vonage' ? 'var(--vgip-meta-input-color)' : ''}\">\n <use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\" />\n </svg>\n </div>\n <div *ngIf='suggestions.length' class=\"Vlt-badge Vlt-badge--small Vlt-badge--purple\"\n style='padding: 0px 4px; position: absolute; top: 26px; left: 4px; pointer-events: none; min-width: 14px;'>\n {{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> <!-- eslint-disable-line @angular-eslint/template/label-has-associated-control-->\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> <!-- eslint-disable-line @angular-eslint/template/label-has-associated-control-->\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 <a href='#' *ngIf='model && !multiple' class=\"Vlt-composite__append--icon\" (click)='removeSelection($event)'>\n <div class=\"Vlt-composite__icon\">\n <svg>\n <use xlink:href=\"volta/volta-icons.svg#Vlt-icon-cross\" />\n </svg>\n </div>\n </a>\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>\n <use xlink:href=\"volta/volta-icons.svg#Vlt-icon-open\" />\n </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'\n (click)='openResource()' class=\"Vlt-btn Vlt-btn--white Vlt-btn--icon\" aria-label='Add new'>\n <svg>\n <use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\" />\n </svg>\n </button>\n <button (focus)='onActivated($event)' (blur)='onBlur($event)' type='button' *ngIf='model && !multiple'\n (click)='openResource(model)' class=\"Vlt-btn Vlt-btn--white Vlt-btn--icon\" aria-label='Edit'>\n <svg>\n <use xlink:href=\"volta/volta-icons.svg#Vlt-icon-edit\" />\n </svg>\n </button>\n </div>\n </div>\n <small *ngIf='f.invalid && ((f | metaModel)._parent.submitted || ((ft | metaModel).touched && keyListenerActive))'\n 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 <span *ngIf=\"f.errors.custom\">{{f.errors.custom}} </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)}.vgip-disable .Vlt-composite__append{cursor:not-allowed;pointer-events:none}.Vlt-composite__append--icon.preview{bottom:initial;padding:0 2px}.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:700}.Vlt-dropdown__panel{max-width:100%;width:100%;min-width:280px}.Vlt-dropdown__panel .Vlt-dropdown__link.smart{font-weight:700;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"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i8.MetaField, selector: "vgip-meta-field", inputs: ["meta", "parent", "integrationCode", "resourceType", "index", "scope", "preview", "theme", "overlayContainer"], outputs: ["onChange", "onLeave"] }, { kind: "pipe", type: i9.MetaModelPipe, name: "metaModel" }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }] }); }
|
|
824
826
|
}
|
|
825
827
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.11", ngImport: i0, type: FieldReference, decorators: [{
|
|
826
828
|
type: Component,
|
|
827
|
-
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' [title]='meta.label || meta.name'>{{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;'>\n <use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\" />\n </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 <a [href]='externalLink || model.externalLink' target='_blank' rel='noopener'\n *ngIf='externalLink && (model && !multiple)' class=\"Vlt-composite__append--icon preview\" aria-label='Open external'>\n <div class=\"Vlt-composite__icon\">\n <svg>\n <use xlink:href=\"volta/volta-icons.svg#Vlt-icon-open\" />\n </svg>\n </div>\n </a>\n</div>\n<div *ngIf='!preview' class=\"meta-field-reference Vlt-form__element Vlt-form__element--big\"\n [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%;'> <!-- eslint-disable-line -->\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}\"\n 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 <a href='#' [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 </a>\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 <a href='#' [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 </a>\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\"\n *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'\n (onChange)='onSearchResourceTypeChanged($event)' (onLeave)='onBlur($event)'\n [integrationCode]='integrationCode' theme='inherit'></vgip-meta-field>\n <svg class='Vlt-icon Vlt-grey Vlt-icon--smaller visible-mobile mobile-icon'\n style='position: absolute; top: 15px; left: 14px; pointer-events: none;'>\n <use xlink:href=\"volta/volta-icons.svg#Vlt-icon-menu\" />\n </svg>\n </div>\n </div>\n <div *ngIf='!(isPolymorphic && showTypes && (multiple || !model || dropdownVisible))'>\n <!-- required by css -->\n </div>\n <div class=\"Vlt-composite__wrapper Vlt-input\" style='overflow: hidden;'\n [ngClass]=\"{ 'has-append-button': hasAppendButton && !disabled, 'vgip-disable': 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'>\n <use attr.xlink:href=\"volta/volta-icons.svg#Vlt-icon-{{ multiple ? 'stack' : 'search'}}\" />\n </svg>\n <svg *ngIf='!isSearchable || (model && !multiple)'\n [ngStyle]=\"{fill: integrationIcon === 'Brand-icon-vonage' ? 'var(--vgip-meta-input-color)' : ''}\">\n <use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\" />\n </svg>\n </div>\n <div *ngIf='suggestions.length' class=\"Vlt-badge Vlt-badge--small Vlt-badge--purple\"\n style='padding: 0px 4px; position: absolute; top: 26px; left: 4px; pointer-events: none; min-width: 14px;'>\n {{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> <!-- eslint-disable-line @angular-eslint/template/label-has-associated-control-->\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> <!-- eslint-disable-line @angular-eslint/template/label-has-associated-control-->\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 <a href='#' *ngIf='model && !multiple' class=\"Vlt-composite__append--icon\" (click)='removeSelection($event)'>\n <div class=\"Vlt-composite__icon\">\n <svg>\n <use xlink:href=\"volta/volta-icons.svg#Vlt-icon-cross\" />\n </svg>\n </div>\n </a>\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>\n <use xlink:href=\"volta/volta-icons.svg#Vlt-icon-open\" />\n </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'\n (click)='openResource()' class=\"Vlt-btn Vlt-btn--white Vlt-btn--icon\" aria-label='Add new'>\n <svg>\n <use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\" />\n </svg>\n </button>\n <button (focus)='onActivated($event)' (blur)='onBlur($event)' type='button' *ngIf='model && !multiple'\n (click)='openResource(model)' class=\"Vlt-btn Vlt-btn--white Vlt-btn--icon\" aria-label='Edit'>\n <svg>\n <use xlink:href=\"volta/volta-icons.svg#Vlt-icon-edit\" />\n </svg>\n </button>\n </div>\n </div>\n <small *ngIf='f.invalid && ((f | metaModel)._parent.submitted || ((ft | metaModel).touched && keyListenerActive))'\n 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 <span *ngIf=\"f.errors.custom\">{{f.errors.custom}} </span>\n </small>\n <small *ngIf='meta.helpText || meta.hint' class=\"Vlt-form__element__hint\">{{meta.helpText || meta.hint}}</small>\n</div>", 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)}.vgip-disable .Vlt-composite__append{cursor:not-allowed;pointer-events:none}.Vlt-composite__append--icon.preview{bottom:initial;padding:0 2px}.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:700}.Vlt-dropdown__panel{max-width:100%;width:100%;min-width:280px}.Vlt-dropdown__panel .Vlt-dropdown__link.smart{font-weight:700;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"] }]
|
|
829
|
+
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' [title]='meta.label || meta.name'>{{meta.label || meta.name}}</div>\n <div *ngIf='!multiple' class='vgip-meta-field-value __gu' [ngClass]=\"{ 'has-external-link': externalLink || model.externalLink }\">\n <svg class=\"Vlt-icon Vlt-icon--smaller\" style='margin-top: -3px;'>\n <use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\" />\n </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 <a [href]='externalLink || model.externalLink' target='_blank' rel='noopener'\n *ngIf='externalLink && (model && !multiple)' class=\"Vlt-composite__append--icon preview\" aria-label='Open external'>\n <div class=\"Vlt-composite__icon\">\n <svg>\n <use xlink:href=\"volta/volta-icons.svg#Vlt-icon-open\" />\n </svg>\n </div>\n </a>\n</div>\n<div *ngIf='!preview' class=\"meta-field-reference Vlt-form__element Vlt-form__element--big\"\n [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%;'> <!-- eslint-disable-line -->\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}\"\n 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 <a href='#' [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 </a>\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 <a href='#' [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 </a>\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\"\n *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'\n (onChange)='onSearchResourceTypeChanged($event)' (onLeave)='onBlur($event)'\n [integrationCode]='integrationCode' theme='inherit'></vgip-meta-field>\n <svg class='Vlt-icon Vlt-grey Vlt-icon--smaller visible-mobile mobile-icon'\n style='position: absolute; top: 15px; left: 14px; pointer-events: none;'>\n <use xlink:href=\"volta/volta-icons.svg#Vlt-icon-menu\" />\n </svg>\n </div>\n </div>\n <div *ngIf='!(isPolymorphic && showTypes && (multiple || !model || dropdownVisible))'>\n <!-- required by css -->\n </div>\n <div class=\"Vlt-composite__wrapper Vlt-input\" style='overflow: hidden;'\n [ngClass]=\"{ 'has-append-button': hasAppendButton && !disabled, 'vgip-disable': 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'>\n <use attr.xlink:href=\"volta/volta-icons.svg#Vlt-icon-{{ multiple ? 'stack' : 'search'}}\" />\n </svg>\n <svg *ngIf='!isSearchable || (model && !multiple)'\n [ngStyle]=\"{fill: integrationIcon === 'Brand-icon-vonage' ? 'var(--vgip-meta-input-color)' : ''}\">\n <use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\" />\n </svg>\n </div>\n <div *ngIf='suggestions.length' class=\"Vlt-badge Vlt-badge--small Vlt-badge--purple\"\n style='padding: 0px 4px; position: absolute; top: 26px; left: 4px; pointer-events: none; min-width: 14px;'>\n {{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> <!-- eslint-disable-line @angular-eslint/template/label-has-associated-control-->\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> <!-- eslint-disable-line @angular-eslint/template/label-has-associated-control-->\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 <a href='#' *ngIf='model && !multiple' class=\"Vlt-composite__append--icon\" (click)='removeSelection($event)'>\n <div class=\"Vlt-composite__icon\">\n <svg>\n <use xlink:href=\"volta/volta-icons.svg#Vlt-icon-cross\" />\n </svg>\n </div>\n </a>\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>\n <use xlink:href=\"volta/volta-icons.svg#Vlt-icon-open\" />\n </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'\n (click)='openResource()' class=\"Vlt-btn Vlt-btn--white Vlt-btn--icon\" aria-label='Add new'>\n <svg>\n <use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\" />\n </svg>\n </button>\n <button (focus)='onActivated($event)' (blur)='onBlur($event)' type='button' *ngIf='model && !multiple'\n (click)='openResource(model)' class=\"Vlt-btn Vlt-btn--white Vlt-btn--icon\" aria-label='Edit'>\n <svg>\n <use xlink:href=\"volta/volta-icons.svg#Vlt-icon-edit\" />\n </svg>\n </button>\n </div>\n </div>\n <small *ngIf='f.invalid && ((f | metaModel)._parent.submitted || ((ft | metaModel).touched && keyListenerActive))'\n 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 <span *ngIf=\"f.errors.custom\">{{f.errors.custom}} </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)}.vgip-disable .Vlt-composite__append{cursor:not-allowed;pointer-events:none}.Vlt-composite__append--icon.preview{bottom:initial;padding:0 2px}.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:700}.Vlt-dropdown__panel{max-width:100%;width:100%;min-width:280px}.Vlt-dropdown__panel .Vlt-dropdown__link.smart{font-weight:700;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"] }]
|
|
828
830
|
}], ctorParameters: function () { return [{ type: i1.MetaReferenceService }, { type: i2.MetaResourceService }, { type: i3.MetaMsgService }, { type: i4.MetaContextService }, { type: i5.MetaTrackerService }, { type: i0.ViewContainerRef }]; } });
|
|
829
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXRhLXVpL3NyYy9saWIvZmllbGRSZWZlcmVuY2UvaW5kZXgudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXRhLXVpL3NyYy9saWIvZmllbGRSZWZlcmVuY2Uvdmlldy5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQTRCLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFMUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7Ozs7Ozs7Ozs7QUFVN0MsTUFBTSxPQUFPLGNBQWUsU0FBUSxhQUFhO0lBZ0MvQyxZQUNVLGdCQUFzQyxFQUN0QyxZQUFpQyxFQUNqQyxjQUE4QixFQUM5QixXQUErQixFQUMvQixXQUErQixFQUMvQixnQkFBa0M7UUFFMUMsS0FBSyxFQUFFLENBQUM7UUFQQSxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXNCO1FBQ3RDLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtRQUNqQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBQy9CLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQUMvQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBakM1Qyx1QkFBa0IsR0FBUSxFQUFFLENBQUM7UUFNN0Isc0JBQWlCLEdBQW9CLElBQUksT0FBTyxFQUFVLENBQUM7UUFDM0QsZ0JBQVcsR0FBRyxLQUFLLENB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Q0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQzt5QkFDbkQ7NkJBQU07NEJBQ0wsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7eUJBQzlCO3FCQUNGO29CQUNELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztpQkFDMUM7WUFDSCxDQUFDLEVBQUUsR0FBRyxFQUFFO2dCQUNOLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUN4QixDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQzsrR0EzMEJVLGNBQWM7bUdBQWQsY0FBYywyRUNqQjNCLDZrWEFrS00sNnFSRG5KVyxDQUFDLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQzs7NEZBRXhELGNBQWM7a0JBTDFCLFNBQVM7b0NBR08sQ0FBQyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRmllbGRBYnN0cmFjdCB9IGZyb20gJy4uL2ZpZWxkQWJzdHJhY3QnO1xuaW1wb3J0IHsgQ29udHJvbENvbnRhaW5lciwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWV0YVJlZmVyZW5jZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9tZXRhUmVmZXJlbmNlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBNZXRhUmVzb3VyY2VTZXJ2aWNlLCBJTWV0YVJlc291cmNlQ29uZmlnIH0gZnJvbSAnLi4vc2VydmljZXMvbWV0YVJlc291cmNlJztcbmltcG9ydCB7IE1ldGFSZWZEaWFsb2cgfSBmcm9tICcuLi9yZWZEaWFsb2cnO1xuaW1wb3J0IHsgTWV0YU1zZ1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9tZXRhTXNnJztcbmltcG9ydCB7IE1ldGFDb250ZXh0U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL21ldGFDb250ZXh0JztcbmltcG9ydCB7IElNZXRhVHJhY2tlckV2ZW50LCBNZXRhVHJhY2tlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9tZXRhVHJhY2tlcic7XG5cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZVVybDogJy4vdmlldy5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc3R5bGUuc2NzcyddLFxuICB2aWV3UHJvdmlkZXJzOiBbeyBwcm92aWRlOiBDb250cm9sQ29udGFpbmVyLCB1c2VFeGlzdGluZzogTmdGb3JtIH1dXG59KVxuZXhwb3J0IGNsYXNzIEZpZWxkUmVmZXJlbmNlIGV4dGVuZHMgRmllbGRBYnN0cmFjdCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGlucHV0OiBhbnk7XG4gIGRyb3Bkb3duOiBIVE1MRWxlbWVudDtcbiAgZHJvcGRvd25TY3JvbGxDb250YWluZXI6IEhUTUxFbGVtZW50O1xuICBzZWFyY2hpbmc6IGJvb2xlYW47XG4gIHNlYXJjaFJlc291cmNlVHlwZTogYW55ID0ge307XG4gIHNlYXJjaFRleHQ6IHN0cmluZztcbiAgc2VhcmNoUmVzdWx0czogQXJyYXk8YW55PjtcbiAgc2VhcmNoRXJyb3I6IGFueTtcbiAgYWN0aXZlU3VnZ2VzdGlvbkluZGV4OiBudW1iZXI7XG4gIHNlYXJjaFJlc291cmNlVHlwZXNTY29wZTogc3RyaW5nO1xuICBzZWFyY2hUZXh0Q2hhbmdlZDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuICBpc0NyZWF0YWJsZSA9IGZhbHNlO1xuICB2YWx1ZTogYW55O1xuICBpc1BvbHltb3JwaGljOiBib29sZWFuO1xuICBpc1NlYXJjaGFibGU6IGJvb2xlYW47XG4gIG11bHRpcGxlOiBib29sZWFuO1xuICB2cjogTWV0YVJlc291cmNlU2VydmljZTtcbiAgZXh0ZXJuYWxMaW5rOiBzdHJpbmc7XG4gIGRyb3Bkb3duVmlzaWJsZSA9IGZhbHNlO1xuICBzZWFyY2hSZXNvdXJjZVR5cGVNZXRhOiBhbnkgPSB7XG4gICAgdHlwZTogJ3NlbGVjdCcsXG4gICAgbmFtZTogJ3Jlc291cmNlVHlwZScsXG4gICAgbGFiZWw6ICdUeXBlJyxcbiAgICBvcHRpb25zOiBbXSwgLy8geyBsYWJlbDogJy0tIEFsbCB0eXBlcyAtLScgfV0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxuICB9O1xuICBmaWx0ZXJlZFN1Z2dlc3Rpb25zOiBBcnJheTxhbnk+ID0gW107XG4gIHBsYWNlSG9sZGVyTGFiZWw6IHN0cmluZztcbiAgYXN5bmNTdWdnZXN0aW9uczogQXJyYXk8YW55PjtcbiAgc21hcnRTdWdnZXN0aW9uczogQXJyYXk8YW55PiA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVmZXJlbmNlU2VydmljZTogTWV0YVJlZmVyZW5jZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtZXRhUmVzb3VyY2U6IE1ldGFSZXNvdXJjZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtZXRhTXNnU2VydmljZTogTWV0YU1zZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBtZXRhQ29udGV4dDogTWV0YUNvbnRleHRTZXJ2aWNlLFxuICAgIHByaXZhdGUgbWV0YVRyYWNrZXI6IE1ldGFUcmFja2VyU2VydmljZSxcbiAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWZcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGdldCBkaXNhYmxlZCgpIHtcbiAgICBjb25zdCBzdXBlckRpc2FibGVkID0gdGhpcy5sb2dpY2FsRGlzYWJsZWQgfHwgdGhpcy52YWxpZGF0aW9ucy5kaXNhYmxlZCB8fCB0aGlzLm1ldGEuZGlzYWJsZWQgPT09IHRydWVcbiAgICAgIHx8ICh0aGlzLm1ldGEudXBkYXRhYmxlID09PSBmYWxzZSAmJiB0aGlzLmlzUGVyc2lzdGVkUGFyZW50KTtcbiAgICB0aGlzLnNlYXJjaFJlc291cmNlVHlwZU1ldGEuZGlzYWJsZWQgPSBzdXBlckRpc2FibGVkO1xuICAgIHJldHVybiBzdXBlckRpc2FibGVkO1xuICB9XG5cbiAgZ2V0IHNob3dUeXBlcygpIHtcbiAgICByZXR1cm4gKHR5cGVvZiAodGhpcy5tZXRhLnNob3dUeXBlcykgIT09ICd1bmRlZmluZWQnKSA/IHRoaXMubWV0YS5zaG93VHlwZXMgOiB0cnVlO1xuICB9XG5cbiAgZ2V0IHN1Z2dlc3Rpb25zKCkge1xuICAgIHJldHVybiB0aGlzLnNtYXJ0U3VnZ2VzdGlvbnMuY29uY2F0KFxuICAgICAgIXRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlLnJlc291cmNlVHlwZSA/XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgICAgICh0aGlzLmFzeW5jU3VnZ2VzdGlvbnMgfHwgdGhpcy5tZXRhLnN1Z2dlc3Rpb25zIHx8IFtdKSA6ICh0aGlzLmFzeW5jU3VnZ2VzdGlvbnMgfHwgdGhpcy5tZXRhLnN1Z2dlc3Rpb25zIHx8IFtdKS5maWx0ZXIoKHMpID0+IHMudHlwZSA9PT0gdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGUucmVzb3VyY2VUeXBlKVxuICAgICk7XG4gIH1cblxuICBnZXQgaGFzQXBwZW5kQnV0dG9uKCkge1xuICAgIGlmICghdGhpcy5tdWx0aXBsZSAmJiB0aGlzLm1vZGVsKSB7XG4gICAgICBpZiAodGhpcy5pc1BvbHltb3JwaGljKSB7XG4gICAgICAgIGZvciAoY29uc3QgcmVmIG9mIHRoaXMubWV0YVJlZmVyZW5jZSkge1xuICAgICAgICAgIGlmICgocmVmLm5hbWUgfHwgcmVmLnJlc291cmNlVHlwZSkgPT09ICh0aGlzLm1vZGVsLnR5cGUgfHwgdGhpcy5tb2RlbC5yZXNvdXJjZVR5cGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVmLnVwZGF0YWJsZSB8fCAocmVmLmNyZWF0YWJsZSAmJiByZWYudXBkYXRhYmxlICE9PSBmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5tZXRhUmVmZXJlbmNlLnVwZGF0YWJsZSB8fCAodGhpcy5tZXRhUmVmZXJlbmNlLmNyZWF0YWJsZSAmJiB0aGlzLm1ldGFSZWZlcmVuY2UudXBkYXRhYmxlICE9PSBmYWxzZSk7IC8vIFZHSVMtNjkxMVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5tZXRhUmVmZXJlbmNlIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGVzU2NvcGUgPSB0aGlzLm1ldGFSZWZlcmVuY2UubWFwKHJ0ID0+IHJ0Lm5hbWUpLmpvaW4oJywnKTtcbiAgICAgIC8vIH0sIDApO1xuICAgICAgZm9yIChjb25zdCBydCBvZiB0aGlzLm1ldGFSZWZlcmVuY2UpIHtcbiAgICAgICAgaWYgKHJ0LmhpZGRlbiAhPT0gZmFsc2UgJiYgcnQuY3JlYXRhYmxlKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMubWV0YVJlZmVyZW5jZS5jcmVhdGFibGU7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHJlc291cmNlU2VydmljZSgpIHtcbiAgICBpZiAoIXRoaXMubWV0YVJlc291cmNlU2VydmljZSkge1xuICAgICAgY29uc3QgbWV0YVJlc291cmNlQ29uZmlnOiBJTWV0YVJlc291cmNlQ29uZmlnID0ge1xuICAgICAgICBpbnRlZ3JhdGlvbkNvZGU6IHRoaXMuaW50ZWdyYXRpb25Db2RlLFxuICAgICAgICByZXNvdXJjZVR5cGU6IHRoaXMucmVzb3VyY2VUeXBlXG4gICAgICB9O1xuICAgICAgdGhpcy5tZXRhUmVzb3VyY2VTZXJ2aWNlID0gdGhpcy5tZXRhUmVzb3VyY2UubmV3KG1ldGFSZXNvdXJjZUNvbmZpZyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm1ldGFSZXNvdXJjZVNlcnZpY2U7XG4gIH1cblxuICBnZXQgbWV0YVJlZmVyZW5jZSgpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRhLnJlZmVyZW5jZSB8fCB7fTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMubXVsdGlwbGUgPSAodGhpcy5tZXRhLnR5cGUgPT09ICdtdWx0aXJlZmVyZW5jZScpIHx8IHRoaXMubWV0YS5tdWx0aXBsZTtcbiAgICB0aGlzLnNlYXJjaFJlc291cmNlVHlwZU1ldGEubGFiZWwgPSB0aGlzLm1ldGEubGFiZWw7XG4gICAgaWYgKCF0aGlzLm1ldGEudmFsdWVUeXBlKSB7XG4gICAgICAvLyB0aGlzLm1ldGEudmFsdWVUeXBlID0gJ29iamVjdCc7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5tZXRhLCAndmFsdWVUeXBlJywge1xuICAgICAgICB2YWx1ZTogJ29iamVjdCdcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5tZXRhUmVmZXJlbmNlIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgIHRoaXMuaXNQb2x5bW9ycGhpYyA9IHRydWU7XG4gICAgICB0aGlzLmlzU2VhcmNoYWJsZSA9IHRydWU7XG4gICAgICB0aGlzLnNlYXJjaFJlc291cmNlVHlwZXNTY29wZSA9IHRoaXMubWV0YVJlZmVyZW5jZS5maWx0ZXIocnQgPT4gcnQuaGlkZGVuICE9PSB0cnVlKS5tYXAocnQgPT4gcnQubmFtZSkuam9pbignLCcpO1xuICAgICAgZm9yIChjb25zdCBydCBvZiB0aGlzLm1ldGFSZWZlcmVuY2UpIHtcbiAgICAgICAgaWYgKHJ0LmNyZWF0YWJsZSkge1xuICAgICAgICAgIHRoaXMuaXNDcmVhdGFibGUgPSB0cnVlO1xuICAgICAgICAgIGlmICh0eXBlb2YgKHJ0LnNlYXJjaGFibGUpICE9PSAndW5kZWZpbmVkJyAmJiAhcnQuc2VhcmNoYWJsZSkge1xuICAgICAgICAgICAgdGhpcy5pc1NlYXJjaGFibGUgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMubWV0YVJlZmVyZW5jZS5mb3JFYWNoKChyKSA9PiB7XG4gICAgICAgIGlmICghci5oaWRkZW4pIHtcbiAgICAgICAgICB0aGlzLnNlYXJjaFJlc291cmNlVHlwZU1ldGEub3B0aW9ucy5wdXNoKHsgaWQ6IHIubmFtZSwgbGFiZWw6IHIubGFiZWwgfHwgci5uYW1lIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc1NlYXJjaGFibGUgPSB0eXBlb2YgKHRoaXMubWV0YVJlZmVyZW5jZS5zZWFyY2hhYmxlKSA9PT0gJ3VuZGVmaW5lZCcgfHwgdGhpcy5tZXRhUmVmZXJlbmNlLnNlYXJjaGFibGU7XG4gICAgICB0aGlzLnNlYXJjaFJlc291cmNlVHlwZSA9IHRoaXMubWV0YVJlZmVyZW5jZTtcbiAgICAgIHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlc1Njb3BlID0gdGhpcy5tZXRhUmVmZXJlbmNlLm5hbWUgfHwgdGhpcy5tZXRhUmVmZXJlbmNlLnJlc291cmNlVHlwZTtcbiAgICAgIHRoaXMuaXNDcmVhdGFibGUgPSB0aGlzLm1ldGFSZWZlcmVuY2UuY3JlYXRhYmxlO1xuICAgIH1cbiAgICB0aGlzLmJ1aWxkUGxhY2Vob2xkZXJMYWJlbCgpO1xuICAgIHRoaXMuc2VhcmNoVGV4dENoYW5nZWQucGlwZShkZWJvdW5jZVRpbWUoMzAwKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSkuc3Vic2NyaWJlKCh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICB0aGlzLnNlYXJjaFRleHQgPSB2YWx1ZTtcbiAgICAgIHRoaXMuc2VhcmNoKCk7XG4gICAgfSk7XG4gICAgY29uc3Qgb3JpZ1ZhbHVlID0gdGhpcy5wYXJlbnRbdGhpcy5tZXRhLm5hbWVdO1xuXG4gICAgLy8gdGhpcy5zdWdnZXN0aW9ucyA9IHRoaXMubWV0YS5zdWdnZXN0aW9uczsgLy8gVE9ETyBmaWx0ZXIgYnkgZGVmYXVsdCB0eXBlXG4gICAgLy8gY29uc29sZS5sb2coJ3RoaXMuc3VnZ2VzdGlvbnMnLCB0aGlzLnN1Z2dlc3Rpb25zKTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLnBhcmVudCwgdGhpcy5tZXRhLm5hbWUsIHtcbiAgICAgIHNldDogKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCB2IG9mIHZhbHVlKSB7XG4gICAgICAgICAgICAgIGlmICghdGhpcy5tb2RlbCkge1xuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwgPSBbXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAodHlwZW9mICh2KSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnB1c2goe1xuICAgICAgICAgICAgICAgICAgaWQ6IHYsXG4gICAgICAgICAgICAgICAgICBsYWJlbDogdixcbiAgICAgICAgICAgICAgICAgIHR5cGU6IHRoaXMubWV0YVJlZmVyZW5jZS5uYW1lXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUgPSBudWxsOyAvLyBwcm90ZWN0IHdoZW4gdmFsdWUgZnJvbSBzZXJ2ZXIgaXMgbm90IGFycmF5XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgKHZhbHVlKSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHZhbHVlID0ge1xuICAgICAgICAgICAgICBpZDogdmFsdWUsXG4gICAgICAgICAgICAgIGxhYmVsOiB2YWx1ZSwgLy8gY291bGQgYmUgZm91bmQgd2l0aCBleHRyYSBjYWxsXG4gICAgICAgICAgICAgIHR5cGU6IHRoaXMubWV0YVJlZmVyZW5jZS5uYW1lXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnNlYXJjaFRleHQgPSB2YWx1ZSA/XG4gICAgICAgICAgICAoKCF2YWx1ZS5sYWJlbCB8fCB2YWx1ZS5sYWJlbCA9PT0gJyAnKSA/IGBOL0EgKCR7dmFsdWUudHlwZX0jJHt2YWx1ZS5pZH0pYCA6IHZhbHVlLmxhYmVsIHx8IHZhbHVlKSA6XG4gICAgICAgICAgICAnJztcbiAgICAgICAgICAvLyBpZiAodGhpcy5pc1BvbHltb3JwaGljICYmIHRoaXMubW9kZWwpIHsgLy9UT0RPIHNob3cgb3Igbm90P1xuICAgICAgICAgIC8vICAgdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGUgPSB0aGlzLm1ldGFSZWZlcmVuY2UuZmluZCgocnQpPT4ge1xuICAgICAgICAgIC8vICAgICByZXR1cm4gcnQubmFtZSA9PT0gdGhpcy5tb2RlbC50eXBlO1xuICAgICAgICAgIC8vICAgfSk7XG4gICAgICAgICAgLy8gfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMubW9kZWwgPSB2YWx1ZTtcbiAgICAgICAgaWYgKCF0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubW9kZWxUb1ZhbHVlKHZhbHVlLCB0aGlzLm1ldGEudmFsdWVUeXBlIHx8ICdvYmplY3QnKTtcbiAgICAgICAgICB0aGlzLmJ1aWxkRXh0ZXJuYWxMaW5rKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9ICF0aGlzLm1vZGVsID8gdGhpcy5tb2RlbCA6IHRoaXMubW9kZWwubWFwKChtKSA9PiB0aGlzLm1vZGVsVG9WYWx1ZShtLCB0aGlzLm1ldGEudmFsdWVUeXBlIHx8ICdvYmplY3QnKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tZXRhLiRvcHRpb25hbCA9IHRoaXMuaXNPcHRpb25hbDtcbiAgICAgIH0sXG4gICAgICBnZXQ6ICgpID0+IHRoaXMudmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0aGlzLnNlbmRUb1NlcnZlcixcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGlmIChvcmlnVmFsdWUpIHtcbiAgICAgIHRoaXMucGFyZW50W3RoaXMubWV0YS5uYW1lXSA9IG9yaWdWYWx1ZTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLm1vZGVsICYmIHRoaXMuZGVmYXVsdCkge1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgdGhpcy5wYXJlbnRbdGhpcy5tZXRhLm5hbWVdID0gW107XG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHQubGVuZ3RoKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBkdiBvZiB0aGlzLmRlZmF1bHQpIHtcbiAgICAgICAgICAgIGlmICgoZHYuaWQgfHwgZHYudmFsdWUpICYmIGR2LnR5cGUpIHtcbiAgICAgICAgICAgICAgY29uc3QgaXRlbTogYW55ID0ge1xuICAgICAgICAgICAgICAgIGlkOiBkdi5pZCB8fCBkdi52YWx1ZSxcbiAgICAgICAgICAgICAgICBsYWJlbDogZHYubGFiZWwgfHwgZHYuaWQgfHwgZHYudmFsdWUsXG4gICAgICAgICAgICAgICAgdHlwZTogZHYudHlwZVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBpZiAoZHYuZXh0ZXJuYWxMaW5rKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5leHRlcm5hbExpbmsgPSBkdi5leHRlcm5hbExpbms7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5wYXJlbnRbdGhpcy5tZXRhLm5hbWVdLnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5wYXJlbnRbdGhpcy5tZXRhLm5hbWVdLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsdC5pZCAmJiB0aGlzLmRlZmF1bHQubGFiZWwgJiYgdGhpcy5kZWZhdWx0LnR5cGUpIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW06IGFueSA9IHtcbiAgICAgICAgICAgICAgaWQ6IHRoaXMuZGVmYXVsdC5pZCB8fCB0aGlzLmRlZmF1bHQudmFsdWUsXG4gICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmRlZmF1bHQubGFiZWwgfHwgdGhpcy5kZWZhdWx0LmlkIHx8IHRoaXMuZGVmYXVsdC52YWx1ZSxcbiAgICAgICAgICAgICAgdHlwZTogdGhpcy5kZWZhdWx0LnR5cGUsXG4gICAgICAgICAgICAgIHNtYXJ0OiB0cnVlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHRoaXMuZGVmYXVsdC5leHRlcm5hbExpbmspIHtcbiAgICAgICAgICAgICAgaXRlbS5leHRlcm5hbExpbmsgPSB0aGlzLmRlZmF1bHQuZXh0ZXJuYWxMaW5rO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wYXJlbnRbdGhpcy5tZXRhLm5hbWVdID0gaXRlbTtcbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJyEhIWRlZmF1bHQgdmFsdWUgaXMgbm90IHZhbGlkIGZvcm1hdCcsIHRoaXMubWV0YSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mICh0aGlzLm1ldGEuZGlzYWJsZWQpICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKHR5cGVvZiAodGhpcy5tZXRhLmRpc2FibGVkKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgZm9yIChjb25zdCBwIG9mIE9iamVjdC5rZXlzKHRoaXMubWV0YS5kaXNhYmxlZCkpIHtcbiAgICAgICAgICBjb25zdCBwcm9wcyA9IHAuc3BsaXQoJy4nKTtcbiAgICAgICAgICBpZiAodHlwZW9mICh0aGlzLnBhcmVudFtwcm9wc1swXV0pICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgbGV0IHZhbCA9IHRoaXMucGFyZW50O1xuICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIHByb3BzKSB7XG4gICAgICAgICAgICAgIHZhbCA9IHZhbFtwcm9wXTtcbiAgICAgICAgICAgICAgaWYgKCF2YWwpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZhbCA9PT0gdGhpcy5tZXRhLmRpc2FibGVkW3BdKSB7XG4gICAgICAgICAgICAgIHRoaXMubG9naWNhbERpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnBhcmVudENoYW5nZVN1YmplY3Quc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmhhc093blByb3BlcnR5KHByb3BzWzBdKSkge1xuICAgICAgICAgICAgICBsZXQgdmFsID0gdGhpcy5wYXJlbnQ7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBwcm9wcykge1xuICAgICAgICAgICAgICAgIHZhbCA9IHZhbFtwcm9wXTtcbiAgICAgICAgICAgICAgICBpZiAoIXZhbCkge1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICh2YWwgPT09IHRoaXMubWV0YS5kaXNhYmxlZFtwXSkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9naWNhbERpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMubG9naWNhbERpc2FibGVkO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5tZXRhLmF1dG8gJiYgdGhpcy5tZXRhLmF1dG8uc2VhcmNoKSB7XG4gICAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSB0aGlzLm1ldGEuYXV0by5zZWFyY2gucGFyYW1zO1xuICAgICAgaWYgKHNlYXJjaFBhcmFtcykge1xuICAgICAgICBmb3IgKGNvbnN0IHBhciBvZiBPYmplY3Qua2V5cyhzZWFyY2hQYXJhbXMpKSB7XG4gICAgICAgICAgY29uc3QgcHJvcHMgPSBzZWFyY2hQYXJhbXNbcGFyXS5zcGxpdCgnLicpO1xuICAgICAgICAgIGNvbnN0IGZpZWxkID0gcHJvcHNbMF07XG4gICAgICAgICAgY29uc3QgcHJvcCA9IHByb3BzWzFdO1xuICAgICAgICAgIGxldCBwYXJWYWx1ZSA9IHRoaXMucGFyZW50W2ZpZWxkXTtcbiAgICAgICAgICBpZiAocGFyVmFsdWUpIHtcbiAgICAgICAgICAgIGlmIChwcm9wKSB7XG4gICAgICAgICAgICAgIHBhclZhbHVlID0gcGFyVmFsdWVbcHJvcF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocGFyVmFsdWUpIHtcbiAgICAgICAgICAgICAgY29uc3QgcGFyYW1zID0ge307XG4gICAgICAgICAgICAgIHBhcmFtc1twYXJdID0gcGFyVmFsdWU7XG4gICAgICAgICAgICAgIHRoaXMuc2VhcmNoQXV0b1N1Z2dlc3Rpb25zKHBhcmFtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMucGFyZW50Q2hhbmdlU3ViamVjdC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUuaGFzT3duUHJvcGVydHkoZmllbGQpKSB7XG4gICAgICAgICAgICAgIGlmICh2YWx1ZVtmaWVsZF0pIHtcbiAgICAgICAgICAgICAgICBpZiAocHJvcCkge1xuICAgICAgICAgICAgICAgICAgdmFsdWVbZmllbGRdID0gdmFsdWVbZmllbGRdW3Byb3BdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBwYXJhbXMgPSB7fTtcbiAgICAgICAgICAgICAgICBwYXJhbXNbcGFyXSA9IHZhbHVlW2ZpZWxkXTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaEF1dG9TdWdnZXN0aW9ucyhwYXJhbXMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjbGVhclNlYXJjaFJlc291cmNlVHlwZSgpIHtcbiAgICB0aGlzLnNlYXJjaFJlc291cmNlVHlwZSA9IHt9O1xuICAgIHRoaXMub25TZWFyY2hSZXNvdXJjZVR5cGVDaGFuZ2VkKCk7XG4gIH1cblxuICBvblNlYXJjaFJlc291cmNlVHlwZUNoYW5nZWQocmVzb3VyY2VUeXBlPykge1xuICAgIGlmICghcmVzb3VyY2VUeXBlIHx8ICFyZXNvdXJjZVR5cGUuaWQpIHtcbiAgICAgIHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlLnJlc291cmNlVHlwZSA9IG51bGw7XG4gICAgICB0aGlzLnNlYXJjaFJlc291cmNlVHlwZXNTY29wZSA9ICh0aGlzLm1ldGFSZWZlcmVuY2UgfHwgW10pLmZpbHRlcihydCA9PiBydC5oaWRkZW4gIT09IHRydWUpLm1hcChydCA9PiBydC5uYW1lKS5qb2luKCcsJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlLnJlc291cmNlVHlwZSA9IHJlc291cmNlVHlwZS5pZDtcbiAgICAgIHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlc1Njb3BlID0gcmVzb3VyY2VUeXBlLmlkO1xuICAgIH1cbiAgICB0aGlzLmJ1aWxkUGxhY2Vob2xkZXJMYWJlbCgpO1xuICAgIHRoaXMuZm9jdXMoKTtcbiAgICBpZiAoIXRoaXMubW9kZWwgJiYgIXRoaXMuc2VhcmNoVGV4dCkgeyAvLyBmaWx0ZXIgc3VnZ2VzdGlvbnMgYnkgdHlwZVxuICAgICAgdGhpcy5maWx0ZXJlZFN1Z2dlc3Rpb25zID0gIXJlc291cmNlVHlwZSA/ICh0aGlzLm1ldGEuc3VnZ2VzdGlvbnMgfHwgW10pIDogKHRoaXMubWV0YS5zdWdnZXN0aW9ucyB8fCBbXSkuZmlsdGVyKFxuICAgICAgICAocykgPT4gcy50eXBlID09PSByZXNvdXJjZVR5cGUuaWRcbiAgICAgICk7XG4gICAgfSBlbHNlIHsgLy8gcmVndWxhciBzZWFyY2ggKHJldHVybiBzY29wZWQgcmVzdWx0cylcbiAgICAgIGlmICghdGhpcy5tb2RlbCkge1xuICAgICAgICB0aGlzLnNlYXJjaCgpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnNlYXJjaFJlc3VsdHMgJiYgcmVzb3VyY2VUeXBlKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoUmVzdWx0cyA9IHRoaXMuc2VhcmNoUmVzdWx0cy5maWx0ZXIoKHMpID0+IHMudHlwZSA9PT0gcmVzb3VyY2VUeXBlLmlkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZGVsZXRlIHRoaXMuc2VhcmNoRXJyb3I7XG4gIH1cblxuICBvblNlYXJjaFRleHRDaGFuZ2VkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNlYXJjaFRleHRDaGFuZ2VkLm5leHQodmFsdWUpO1xuICB9XG5cbiAgc2VhcmNoKCkge1xuICAgIHRoaXMuc2VhcmNoaW5nID0gdHJ1ZTtcbiAgICAvLyB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleDtcbiAgICBpZiAoIXRoaXMuc2VhcmNoVGV4dCB8fCB0aGlzLnNlYXJjaFRleHQubGVuZ3RoIDwgMikge1xuICAgICAgdGhpcy5zZWFyY2hpbmcgPSBmYWxzZTtcbiAgICAgIGRlbGV0ZSB0aGlzLnNlYXJjaFJlc3VsdHM7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNob3dTZWFyY2hSZXN1bHRzID0gKHJlc3VsdHMpID0+IHtcbiAgICAgIHRoaXMuc2VhcmNoaW5nID0gZmFsc2U7XG4gICAgICBkZWxldGUgdGhpcy5zZWFyY2hFcnJvcjtcbiAgICAgIGRlbGV0ZSB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleDtcbiAgICAgIGlmICghcmVzdWx0cyB8fCAhKHJlc3VsdHMgaW5zdGFuY2VvZiBBcnJheSkpIHtcbiAgICAgICAgcmVzdWx0cyA9IFtdO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMubWV0YS5hY2NlcHROZXcgJiYgdGhpcy5tZXRhLmFjY2VwdE5ldy50eXBlICYmIHRoaXMubWV0YS5hY2NlcHROZXcucGF0dGVybikge1xuICAgICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAodGhpcy5tZXRhLmFjY2VwdE5ldy5wYXR0ZXJuKTtcbiAgICAgICAgaWYgKHJlZ2V4LnRlc3QodGhpcy5zZWFyY2hUZXh0KSkge1xuICAgICAgICAgIHJlc3VsdHMudW5zaGlmdCh7IGlkOiBudWxsLCBsYWJlbDogdGhpcy5zZWFyY2hUZXh0LCB0eXBlOiB0aGlzLm1ldGEuYWNjZXB0TmV3LnR5cGUgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuc2VhcmNoUmVzdWx0cyA9IHJlc3VsdHMubWFwKChyKSA9PiB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgYXJyb3ctYm9keS1zdHlsZVxuICAgICAgICByZXR1cm4geyBpZDogci5pZCwgbGFiZWw6IHIubGFiZWwsIHR5cGU6IHIudHlwZSB8fCByLnJlc291cmNlVHlwZSB8fCB0aGlzLnNlYXJjaFJlc291cmNlVHlwZS5uYW1lLCBleHRlcm5hbExpbms6IHIuZXh0ZXJuYWxMaW5rIH07XG4gICAgICB9KTtcbiAgICAgIGlmICghL1ZsdC1kcm9wZG93bi0tZXhwYW5kZWQvLnRlc3QodGhpcy5kcm9wZG93bi5jbGFzc05hbWUpKSB7XG4gICAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmICh0aGlzLm1ldGEuc2VhcmNoKSB7XG4gICAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSB0aGlzLm1ldGEuc2VhcmNoLnBhcmFtcyB8fCB7fTtcbiAgICAgIGxldCBzZWFyY2hVcmwgPSBgL2ZpZWxkcy8ke3RoaXMubWV0YS5uYW1lfS9zZWFyY2hgO1xuICAgICAgaWYgKHRoaXMubWV0YS5zZWFyY2gudXJsKSB7XG4gICAgICAgIHNlYXJjaFVybCA9IHRoaXMubWV0YS5zZWFyY2gudXJsLnJlcGxhY2UoL1xcJHtcXHMqKFtcXHcuXSspXFxzKn0vZywgKG1hdGNoLCBrZXkpID0+IHtcbiAgICAgICAgICBpZiAoc2VhcmNoUGFyYW1zLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BzID0gc2VhcmNoUGFyYW1zW2tleV0uc3BsaXQoJy4nKTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gcHJvcHNbMF07XG4gICAgICAgICAgICBjb25zdCBwcm9wID0gcHJvcHNbMV07XG4gICAgICAgICAgICBkZWxldGUgc2VhcmNoUGFyYW1zW2tleV07IC8vIGlmIGl0IGlzIFVSTCBwYXJhbSwgcmVtb3ZlIGl0IGFzIHF1ZXJ5IHBhcmFtXG4gICAgICAgICAgICBsZXQgcGFyVmFsdWUgPSB0aGlzLnBhcmVudFtmaWVsZF07XG4gICAgICAgICAgICBpZiAocGFyVmFsdWUpIHtcbiAgICAgICAgICAgICAgaWYgKHByb3ApIHtcbiAgICAgICAgICAgICAgICBwYXJWYWx1ZSA9IHBhclZhbHVlW3Byb3BdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChwYXJWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJWYWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gJ3VuZGVmaW5lZCc7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBwIG9mIE9iamVjdC5rZXlzKHNlYXJjaFBhcmFtcykpIHtcbiAgICAgICAgc2VhcmNoVXJsICs9IGAke3NlYXJjaFVybC5pbmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnfSR7ZW5jb2RlVVJJQ29tcG9uZW50KHApfT0ke2VuY29kZVVSSUNvbXBvbmVudChzZWFyY2hQYXJhbXNbcF0pfWA7XG4gICAgICB9XG4gICAgICBzZWFyY2hVcmwgKz0gYCR7c2VhcmNoVXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJid9cT0ke2VuY29kZVVSSUNvbXBvbmVudCh0aGlzLnNlYXJjaFRleHQpfWA7XG4gICAgICB0aGlzLnNlYXJjaGluZyA9IHRydWU7XG4gICAgICB0aGlzLnJlc291cmNlU2VydmljZS5nZXRCeVBhdGgoc2VhcmNoVXJsKS5zdWJzY3JpYmUoKHJlc3VsdHMpID0+IHtcbiAgICAgICAgc2hvd1NlYXJjaFJlc3VsdHMocmVzdWx0cyk7XG4gICAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgICAgZGVsZXRlIHRoaXMuc2VhcmNoaW5nO1xuICAgICAgICB0aGlzLnNlYXJjaFJlc3VsdHMgPSBbXTtcbiAgICAgICAgdGhpcy5zZWFyY2hFcnJvciA9IGVycm9yLmVycm9yID8gZXJyb3IuZXJyb3IubWVzc2FnZSB8fCBlcnJvci5lcnJvciA6IGVycm9yLm1lc3NhZ2UgfHwgZXJyb3I7XG4gICAgICAgIGlmICghL1ZsdC1kcm9wZG93bi0tZXhwYW5kZWQvLnRlc3QodGhpcy5kcm9wZG93bi5jbGFzc05hbWUpKSB7XG4gICAgICAgICAgdGhpcy5zaG93RHJvcGRvd24oKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghdGhpcy52cikge1xuICAgICAgICB0aGlzLnZyID0gdGhpcy5tZXRhUmVzb3VyY2UubmV3KHtcbiAgICAgICAgICBpbnRlZ3JhdGlvbkNvZGU6IHRoaXMuaW50ZWdyYXRpb25Db2RlLFxuICAgICAgICAgIHJlc291cmNlVHlwZTogbnVsbFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMudnIuc2VhcmNoSW50ZWdyYXRpb24oXG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dCxcbiAgICAgICAgdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGUubmFtZSB8fCB0aGlzLnNlYXJjaFJlc291cmNlVHlwZXNTY29wZVxuICAgICAgKS5zdWJzY3JpYmUoKHJlc3VsdHM6IEFycmF5PGFueT4pID0+IHtcbiAgICAgICAgc2hvd1NlYXJjaFJlc3VsdHMocmVzdWx0cyk7XG4gICAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5zZWFyY2hpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zZWFyY2hSZXN1bHRzID0gW107XG4gICAgICAgIHRoaXMuc2VhcmNoRXJyb3IgPSBlcnJvci5lcnJvciA/IGVycm9yLmVycm9yLm1lc3NhZ2UgfHwgZXJyb3IuZXJyb3IgOiBlcnJvci5tZXNzYWdlIHx8IGVycm9yO1xuICAgICAgICBpZiAoIS9WbHQtZHJvcGRvd24tLWV4cGFuZGVkLy50ZXN0KHRoaXMuZHJvcGRvd24uY2xhc3NOYW1lKSkge1xuICAgICAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uQWN0aXZhdGVkKGV2KSB7XG4gICAgLy8gZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAvLyBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmlucHV0ID0gZXYuc3JjRWxlbWVudDtcbiAgICBpZiAoIXRoaXMuZHJvcGRvd24pIHtcbiAgICAgIC8vIHRoaXMuZHJvcGRvd24gPSBldi5zcmNFbGVtZW50LnBhcmVudE5vZGUucGFyZW50Tm9kZTtcbiAgICAgIHRoaXMuZHJvcGRvd24gPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZHJvcGRvd24td3JhcHBlcicpO1xuICAgIH1cbiAgICB0aGlzLnNob3dEcm9wZG93bigpO1xuICB9XG5cbiAgb25CbHVyKGV2KSB7XG4gICAgbGV0IGludGVybmFsQ29udHJvbCA9IGZhbHNlO1xuICAgIGlmIChldi5yZWxhdGVkVGFyZ2V0KSB7XG4gICAgICBpZiAoIXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2LnJlbGF0ZWRUYXJnZXQpKSB7XG4gICAgICAgIHRoaXMuZGlzbWlzc0Ryb3Bkb3duKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbnRlcm5hbENvbnRyb2wgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5rZXlMaXN0ZW5lckFjdGl2ZSAmJiAhaW50ZXJuYWxDb250cm9sKSB7XG4gICAgICB0aGlzLmlucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmtleWRvd24pO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5rZXlMaXN0ZW5lckFjdGl2ZSkge1xuICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5jbGlja291dCk7XG4gICAgICAgIH1cbiAgICAgIH0sIDQwMCk7XG4gICAgICBkZWxldGUgdGhpcy5rZXlMaXN0ZW5lckFjdGl2ZTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVTZWxlY3Rpb24oZXY/KSB7XG4gICAgaWYgKGV2KSB7XG4gICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLm1vZGVsICYmICF0aGlzLnN1Z2dlc3Rpb25zLmZpbmQoKHMpID0+IChzLmlkID09PSB0aGlzLm1vZGVsLmlkICYmIHMudHlwZSA9PT0gdGhpcy5tb2RlbC50eXBlKSkpIHtcbiAgICAgIHRoaXMuc21hcnRTdWdnZXN0aW9ucy5wdXNoKHtcbiAgICAgICAgaWQ6IHRoaXMubW9kZWwuaWQsXG4gICAgICAgIGxhYmVsOiB0aGlzLm1vZGVsLmxhYmVsLFxuICAgICAgICB0eXBlOiB0aGlzLm1vZGVsLnR5cGUsXG4gICAgICAgIHNtYXJ0OiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5tZXRhVHJhY2tlci5lbWl0KHRoaXMuYnVpbGRUcmFja0V2ZW50KCdSRU1PVkUnKSk7XG4gICAgdGhpcy5jbGVhcigpO1xuICB9XG5cbiAgb25TdWdnZXN0aW9uU2VsZWN0KGV2LCBzdWdnZXN0aW9uKSB7XG4gICAgaWYgKCFzdWdnZXN0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5mb2N1cygpO1xuICAgIHRoaXMubWV0YVRyYWNrZXIuZW1pdCh0aGlzLmJ1aWxkVHJhY2tFdmVudCgnU0VMRUNUJykpO1xuICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICBpZiAoIXRoaXMubW9kZWwpIHtcbiAgICAgICAgdGhpcy5tb2RlbCA9IFtdO1xuICAgICAgfVxuICAgICAgbGV0IGV4aXN0aW5nRW50cnk7XG4gICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMubW9kZWwpIHtcbiAgICAgICAgaWYgKHN1Z2dlc3Rpb24uaWQgJiYgKGVudHJ5LmlkID09PSBzdWdnZXN0aW9uLmlkKSkge1xuICAgICAgICAgIGV4aXN0aW5nRW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIGlmIChzdWdnZXN0aW9uLmxhYmVsID09PSBlbnRyeS5sYWJlbCkgeyAvLyBjcmVhdGUgbmV3IChnb29nbGUgZW1haWxzKVxuICAgICAgICAgIGV4aXN0aW5nRW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFleGlzdGluZ0VudHJ5KSB7XG4gICAgICAgIHRoaXMubW9kZWwucHVzaChzdWdnZXN0aW9uKTtcbiAgICAgIH1cbiAgICAgIHRoaXMub25Nb2RlbENoYW5nZSh0aGlzLm1vZGVsKTtcbiAgICAgIGRlbGV0ZSB0aGlzLnNlYXJjaFRleHQ7XG4gICAgICB0aGlzLnNlYXJjaFRleHRDaGFuZ2VkLm5leHQodGhpcy5zZWFyY2hUZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tb2RlbCA9IHN1Z2dlc3Rpb247XG4gICAgICB0aGlzLmV4dGVybmFsTGluayA9IHN1Z2dlc3Rpb24uZXh0ZXJuYWxMaW5rO1xuICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlKHN1Z2dlc3Rpb24pO1xuICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gc3VnZ2VzdGlvbi5sYWJlbDtcbiAgICAgIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4ID0gKHRoaXMuc2VhcmNoUmVzdWx0cyB8fCB0aGlzLnN1Z2dlc3Rpb25zKS5pbmRleE9mKHN1Z2dlc3Rpb24pO1xuICAgIH1cbiAgICB0aGlzLmRpc21pc3NEcm9wZG93bigpO1xuICAgIC8vIGlmICh0aGlzLmlzUG9seW1vcnBoaWMpIHtcbiAgICAvLyAgIHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlID0gdGhpcy5tZXRhUmVmZXJlbmNlLmZpbmQoKHJ0KT0+IHtcbiAgICAvLyAgICAgcmV0dXJuIHJ0Lm5hbWUgPT09IHN1Z2dlc3Rpb24udHlwZTtcbiAgICAvLyAgIH0pO1xuICAgIC8vIH1cbiAgfVxuXG4gIHNob3dEcm9wZG93bigpIHtcbiAgICB0aGlzLmRyb3Bkb3duVmlzaWJsZSA9IHRydWU7XG4gICAgdGhpcy5kcm9wZG93bi5jbGFzc0xpc3QuYWRkKCdWbHQtZHJvcGRvd24tLWV4cGFuZGVkJyk7XG4gICAgaWYgKCF0aGlzLmtleUxpc3RlbmVyQWN0aXZlKSB7XG4gICAgICB0aGlzLmlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmtleWRvd24pO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5jbGlja291dCk7XG4gICAgICB9LCAyMDApO1xuICAgICAgdGhpcy5rZXlMaXN0ZW5lckFjdGl2ZSA9IHRydWU7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgKHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4KSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmICh0aGlzLm1vZGVsICYmICh0aGlzLnNlYXJjaFJlc3VsdHMgfHwgdGhpcy5zdWdnZXN0aW9ucykpIHtcbiAgICAgICAgZm9yIChsZXQgc3VnZ2VzdGlvbkluZGV4ID0gMDsgc3VnZ2VzdGlvbkluZGV4IDwgKHRoaXMuc2VhcmNoUmVzdWx0cyB8fCB0aGlzLnN1Z2dlc3Rpb25zKS5sZW5ndGg7IHN1Z2dlc3Rpb25JbmRleCsrKSB7XG4gICAgICAgICAgY29uc3QgaXRlbSA9ICh0aGlzLnNlYXJjaFJlc3VsdHMgfHwgdGhpcy5zdWdnZXN0aW9ucylbc3VnZ2VzdGlvbkluZGV4XTtcbiAgICAgICAgICBpZiAodGhpcy5tb2RlbC5pZCA9PT0gaXRlbS5pZCAmJiB0aGlzLm1vZGVsLnR5cGUgPT09IGl0ZW0udHlwZSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXggPSBzdWdnZXN0aW9uSW5kZXg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5lbnN1cmVEcm9wZG93bklzVmlzaWJsZSgpO1xuICB9XG5cbiAgZGlzbWlzc0Ryb3Bkb3duKGV2ZW50Pykge1xuICAgIHRoaXMuZHJvcGRvd25WaXNpYmxlID0gZmFsc2U7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICB0aGlzLmZvY3VzKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRyb3Bkb3duKSB7XG4gICAgICB0aGlzLmRyb3Bkb3duLmNsYXNzTGlzdC5yZW1vdmUoJ1ZsdC1kcm9wZG93bi0tZXhwYW5kZWQnKTtcbiAgICB9XG4gIH1cblxuICBjbGVhcigpIHtcbiAgICB0aGlzLnByZXZNb2RlbCA9IHRoaXMubW9kZWw7XG4gICAgZGVsZXRlIHRoaXMuc2VhcmNoVGV4dDtcbiAgICBkZWxldGUgdGhpcy5zZWFyY2hSZXN1bHRzO1xuICAgIGRlbGV0ZSB0aGlzLm1vZGVsO1xuICAgIGRlbGV0ZSB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleDtcbiAgICB0aGlzLm9uTW9kZWxDaGFuZ2UodGhpcy5tb2RlbCk7XG4gICAgdGhpcy5vblNlYXJjaFRleHRDaGFuZ2VkKHRoaXMuc2VhcmNoVGV4dCk7XG4gICAgdGhpcy5mb2N1cygpO1xuICB9XG5cbiAgcmV2ZXJ0KCkge1xuICAgIHRoaXMubW9kZWwgPSB0aGlzLnByZXZNb2RlbDtcbiAgICBkZWxldGUgdGhpcy5wcmV2TW9kZWw7XG4gICAgdGhpcy5vbk1vZGVsQ2hhbmdlKHRoaXMubW9kZWwpO1xuICAgIHRoaXMuZm9jdXMoKTtcbiAgfVxuXG4gIHJlbW92ZShldiwgaXRlbSkge1xuICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgY29uc3Qgb3B0aW9uSW5kZXggPSB0aGlzLm1vZGVsLmluZGV4T2YoaXRlbSk7XG4gICAgaWYgKG9wdGlvbkluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5tb2RlbC5zcGxpY2Uob3B0aW9uSW5kZXgsIDEpO1xuICAgICAgaWYgKCF0aGlzLm1vZGVsLmxlbmd0aCkge1xuICAgICAgICBkZWxldGUgdGhpcy5tb2RlbDtcbiAgICAgICAgZGVsZXRlIHRoaXMudmFsdWU7XG4gICAgICB9XG4gICAgICB0aGlzLm9uTW9kZWxDaGFuZ2UodGhpcy5tb2RlbCk7XG4gICAgfVxuICB9XG5cbiAgb3BlblJlc291cmNlKG1vZGVsPykge1xuICAgIHRoaXMua2V5TGlzdGVuZXJBY3RpdmUgPSB0cnVlOyAvLyBzdXBwcmVzcyBkcm9wZG93biBpbiB0aGlzIGNhc2VcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZGlzbWlzc0Ryb3Bkb3duKCk7XG4gICAgfSk7XG4gICAgY29uc3QgcmVmRGlhbG9nQ29tcG9uZW50ID0gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChNZXRhUmVmRGlhbG9nKTtcbiAgICB0aGlzLm1ldGFUcmFja2VyLmVtaXQodGhpcy5idWlsZFRyYWNrRXZlbnQobW9kZWwgPyAnRURJVCcgOiAnTkVXJykpO1xuICAgIGxldCB0aGVtZSA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmRhdGFzZXQudGhlbWU7XG4gICAgaWYgKCF0aGVtZSB8fCB0aGVtZSA9PT0gJ2luaGVyaXQnKSB7XG4gICAgICBsZXQgcGFyZW50Q29tcG9uZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xvc2VzdCgndmdpcC1tZXRhLWxheW91dCcpO1xuICAgICAgaWYgKHBhcmVudENvbXBvbmVudCkge1xuICAgICAgICB0aGVtZSA9IHBhcmVudENvbXBvbmVudC5kYXRhc2V0LnRoZW1lO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGVtZSB8fCB0aGVtZSA9PT0gJ2luaGVyaXQnKSB7XG4gICAgICAgIHBhcmVudENvbXBvbmVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsb3Nlc3QoJ3ZnaXAtbWV0YS1yZXNvdXJjZScpO1xuICAgICAgICBpZiAocGFyZW50Q29tcG9uZW50KSB7XG4gICAgICAgICAgdGhlbWUgPSBwYXJlbnRDb21wb25lbnQuZGF0YXNldC50aGVtZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnJlZmVyZW5jZVNlcnZpY2Uub3BlbkRpYWxvZyhcbiAgICAgIHJlZkRpYWxvZ0NvbXBvbmVudCwgdGhpcy5tZXRhUmVzb3VyY2UsIHRoaXMuaW50ZWdyYXRpb25Db2RlLFxuICAgICAgKHRoaXMubWV0YVJlZmVyZW5jZSBpbnN0YW5jZW9mIEFycmF5KSA/IHRoaXMubWV0YVJlZmVyZW5jZS5maWx0ZXIocnQgPT4gcnQuaGlkZGVuICE9PSB0cnVlKSA6IHRoaXMubWV0YVJlZmVyZW5jZSxcbiAgICAgIG1vZGVsLCBudWxsLCB0aGlzLnNlYXJjaFJlc291cmNlVHlwZS5yZXNvdXJjZVR5cGUsIHRoZW1lXG4gICAgKS5zdWJzY3JpYmUoKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIHRoaXMucGFyZW50W3RoaXMubWV0YS5uYW1lXSA9IHJlc3VsdDtcbiAgICAgICAgdGhpcy5vbkNoYW5nZS5lbWl0KHJlc3VsdCk7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nU3VnZ2VzdGlvbiA9ICh0aGlzLm1ldGEuc3VnZ2VzdGlvbnMgfHwgW10pLmZpbmQoKHMpID0+IChzLmlkID09PSByZXN1bHQuaWQgJiYgcy50eXBlID09PSByZXN1bHQudHlwZSkpO1xuICAgICAgICBpZiAoZXhpc3RpbmdTdWdnZXN0aW9uKSB7XG4gICAgICAgICAgZXhpc3RpbmdTdWdnZXN0aW9uLmxhYmVsID0gcmVzdWx0LmxhYmVsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICghdGhpcy5tZXRhLnN1Z2dlc3Rpb25zKSB7XG4gICAgICAgICAgICB0aGlzLm1ldGEuc3VnZ2VzdGlvbnMgPSBbXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5tZXRhLnN1Z2dlc3Rpb25zLnVuc2hpZnQocmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1ldGFUcmFja2VyLmVtaXQodGhpcy5idWlsZFRyYWNrRXZlbnQobW9kZWwgPyAnVVBEQVRFJyA6ICdDUkVBVEUnLCByZXN1bHQudHlwZSB8fCByZXN1bHQucmVzb3VyY2VUeXBlKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm1ldGFUcmFja2VyLmVtaXQodGhpcy5idWlsZFRyYWNrRXZlbnQobW9kZWwgPyAnQ0FOQ0VMX0VESVQnIDogJ0NBTkNFTF9VUERBVEUnKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGVuc3VyZURyb3Bkb3duSXNWaXNpYmxlKCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgaG9sZGVyID0gdGhpcy5kcm9wZG93bi5jbG9zZXN0KCcuVmx0LWNhcmRfX2NvbnRlbnQnKTtcbiAgICAgIGlmIChob2xkZXIpIHtcbiAgICAgICAgY29uc3QgZWwgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuVmx0LWRyb3Bkb3duX19wYW5lbCcpO1xuICAgICAgICBjb25zdCBlbFJlY3QgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgaG9sZGVyUmVjdCA9IGhvbGRlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgaWYgKGhvbGRlclJlY3QudG9wICsgaG9sZGVyUmVjdC5oZWlnaHQgPCBlbFJlY3QudG9wICsgZWxSZWN0LmhlaWdodCkge1xuICAgICAgICAgIGVsLnNjcm9sbEludG9WaWV3KHsgYmxvY2s6ICdlbmQnIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgNDAwKTtcbiAgfVxuXG4gIHByaXZhdGUgZW5zdXJlRHJvcGRvd25PcHRpb25Jc1Zpc2libGUoKSB7XG4gICAgaWYgKCF0aGlzLmRyb3Bkb3duU2Nyb2xsQ29udGFpbmVyKSB7XG4gICAgICB0aGlzLmRyb3Bkb3duU2Nyb2xsQ29udGFpbmVyID0gdGhpcy5kcm9wZG93bi5xdWVyeVNlbGVjdG9yKCcuVmx0LWRyb3Bkb3duX19zY3JvbGwnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZHJvcGRvd25TY3JvbGxDb250YWluZXIgJiYgdHlwZW9mICh0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCkgPT09ICdudW1iZXInKSB7XG4gICAgICBjb25zdCBzY3JvbGxUb3AgPSA0NCAqIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4O1xuICAgICAgY29uc3Qgc2Nyb2xsQm90dG9tID0gNDQgKiAodGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXggLSA3KTtcbiAgICAgIGlmIChzY3JvbGxUb3AgPCB0aGlzLmRyb3Bkb3duU2Nyb2xsQ29udGFpbmVyLnNjcm9sbFRvcCkge1xuICAgICAgICB0aGlzLmRyb3Bkb3duU2Nyb2xsQ29udGFpbmVyLnNjcm9sbFRvcCA9IHNjcm9sbFRvcDtcbiAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsQm90dG9tID4gdGhpcy5kcm9wZG93blNjcm9sbENvbnRhaW5lci5zY3JvbGxUb3ApIHtcbiAgICAgICAgdGhpcy5kcm9wZG93blNjcm9sbENvbnRhaW5lci5zY3JvbGxUb3AgPSBzY3JvbGxCb3R0b207XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbGlja291dCA9IChldmVudCkgPT4ge1xuICAgIGNvbnN0IGludGVybmFsQ29udHJvbCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCk7XG4gICAgaWYgKGludGVybmFsQ29udHJvbCAmJiBbJ1ZsdC1kcm9wZG93bl9fbGluaycsICdWbHQtZHJvcGRvd25fX2Jsb2NrJ10uaW5kZXhPZihldmVudC50YXJnZXQuY2xhc3NOYW1lKSAhPT0gLTEpIHtcbiAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICB9IGVsc2UgaWYgKCFpbnRlcm5hbENvbnRyb2wgJiYgZXZlbnQudGFyZ2V0ICE9PSB0aGlzLmlucHV0ICYmIGV2ZW50LnRhcmdldC5jbGFzc05hbWUgIT09ICdWbHQtZHJvcGRvd25fX3RpdGxlJykge1xuICAgICAgdGhpcy5kaXNtaXNzRHJvcGRvd24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFpbnRlcm5hbENvbnRyb2wgJiYgaW50ZXJuYWxDb250cm9sLnRhZ05hbWUgIT09ICdJTlBVVCcpIHtcbiAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIGJ1aWxkVHJhY2tFdmVudChhY3Rpb246IHN0cmluZywgdmFsdWU/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBlOiBJTWV0YVRyYWNrZXJFdmVudCA9IHtcbiAgICAgIGludGVncmF0aW9uOiB0aGlzLmludGVncmF0aW9uQ29kZSxcbiAgICAgIHJlc291cmNlOiB0aGlzLm1vZGVsID8gKHRoaXMubW9kZWwudHlwZSB8fCB0aGlzLm1vZGVsLnJlc291cmNlVHlwZSkgOiB0aGlzLnNlYXJjaFJlc291cmNlVHlwZS5yZXNvdXJjZVR5cGUsXG4gICAgICBmaWVsZDogdGhpcy5tZXRhLm5hbWUsXG4gICAgICBhY3Rpb25cbiAgICB9O1xuICAgIGlmICh0aGlzLm1ldGEuJGlzQ29udGFjdGFibGUpIHtcbiAgICAgIGUuaXNDb250YWN0YWJsZSA9IHRydWU7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgKHZhbHVlKSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGUudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGU7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUGxhY2Vob2xkZXJMYWJlbCgpIHtcbiAgICB0aGlzLnBsYWNlSG9sZGVyTGFiZWwgPSB0aGlzLm1ldGEubGFiZWw7XG4gICAgaWYgKHRoaXMubXVsdGlwbGUgJiYgIXRoaXMuaXNQb2x5bW9ycGhpYykge1xuICAgICAgdGhpcy5wbGFjZUhvbGRlckxhYmVsID0gJytBZGQgJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wbGFjZUhvbGRlckxhYmVsID0gKHRoaXMuaXNTZWFyY2hhYmxlICYmICh0aGlzLm11bHRpcGxlIHx8ICF0aGlzLmlzUG9seW1vcnBoaWMpKSA/ICdTZWFyY2ggJyA6ICcnO1xuICAgIH1cbiAgICB0aGlzLnBsYWNlSG9sZGVyTGFiZWwgKz0gdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGUucmVzb3VyY2VUeXBlID8gdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGUucmVzb3VyY2VUeXBlIDogdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGVzU2NvcGU7XG4gIH1cblxuICBwcml2YXRlIGtleWRvd24gPSAoZXZlbnQpID0+IHtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnQXJyb3dEb3duJzoge1xuICAgICAgICB0aGlzLnNob3dEcm9wZG93bigpO1xuICAgICAgICBpZiAodHlwZW9mICh0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXggPSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4Kys7XG4gICAgICAgICAgaWYgKHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4ID49ICh0aGlzLnNlYXJjaFJlc3VsdHMgfHwgdGhpcy5zdWdnZXN0aW9ucykubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW5zdXJlRHJvcGRvd25PcHRpb25Jc1Zpc2libGUoKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnQXJyb3dVcCc6IHtcbiAgICAgICAgdGhpcy5zaG93RHJvcGRvd24oKTtcbiAgICAgICAgaWYgKHR5cGVvZiAodGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXgpID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4ID0gKHRoaXMuc2VhcmNoUmVzdWx0cyB8fCB0aGlzLnN1Z2dlc3Rpb25zKS5sZW5ndGggLSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4LS07XG4gICAgICAgICAgaWYgKHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4IDwgMCkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXggPSAodGhpcy5zZWFyY2hSZXN1bHRzIHx8IHRoaXMuc3VnZ2VzdGlvbnMpLmxlbmd0aCAtIDE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW5zdXJlRHJvcGRvd25PcHRpb25Jc1Zpc2libGUoKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnU3BhY2UnOlxuICAgICAgY2FzZSAnRW50ZXInOiB7XG4gICAgICAgIGlmICh0eXBlb2YgKHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4KSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHRoaXMub25TdWdnZXN0aW9uU2VsZWN0KGV2ZW50LCAodGhpcy5zZWFyY2hSZXN1bHRzIHx8IHRoaXMuc3VnZ2VzdGlvbnMpW3RoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4XSk7XG4gICAgICAgICAgZGVsZXRlIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4O1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnRXNjYXBlJzoge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5kaXNtaXNzRHJvcGRvd24oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdCYWNrc3BhY2UnOiB7XG4gICAgICAgIGlmICghdGhpcy5tdWx0aXBsZSAmJiB0aGlzLm1vZGVsKSB7IC8vIEhQQlItODIyOVxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgdGhpcy5yZW1vdmVTZWxlY3Rpb24oKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgcHJpdmF0ZSBidWlsZEV4dGVybmFsTGluaygpIHtcbiAgICBpZiAodGhpcy5tb2RlbCkge1xuICAgICAgaWYgKHRoaXMubW9kZWwuZXh0ZXJuYWxMaW5rKSB7XG4gICAgICAgIHRoaXMuZXh0ZXJuYWxMaW5rID0gdGhpcy5tb2RlbC5leHRlcm5hbExpbms7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMubWV0YUNvbnRleHQucHJvZmlsZXNbdGhpcy5pbnRlZ3JhdGlvbkNvZGUudG9VcHBlckNhc2UoKV0pIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuZXh0ZXJuYWxMaW5rO1xuICAgICAgICB0aGlzLm1ldGFNc2dTZXJ2aWNlLnNlbmRNZXNzYWdlKFxuICAgICAgICAgIHRoaXMuaW50ZWdyYXRpb25Db2RlLnRvVXBwZXJDYXNlKCksXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWN0aW9uOiAnYnVpbGRFeHRlcm5hbExpbmsnLFxuICAgICAgICAgICAgaW50ZWdyYXRpb25Db2RlOiB0aGlzLmludGVncmF0aW9uQ29kZSxcbiAgICAgICAgICAgIHJlZjogdGhpcy5tb2RlbCxcbiAgICAgICAgICAgIHByb2ZpbGU6IHRoaXMubWV0YUNvbnRleHQucHJvZmlsZXNbdGhpcy5pbnRlZ3JhdGlvbkNvZGUudG9VcHBlckNhc2UoKV1cbiAgICAgICAgICB9LFxuICAgICAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5lcnJvcikge1xuICAgICAgICAgICAgICB0aGlzLmV4dGVybmFsTGluayA9IHJlc3BvbnNlLmV4dGVybmFsTGluaztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUud2FybignTm8gZXh0ZXJuYWwgbGluayBzdXBwb3J0IGZvcicsIHRoaXMuaW50ZWdyYXRpb25Db2RlLCB0aGlzLm1vZGVsLnJlc291cmNlVHlwZSB8fCB0aGlzLm1vZGVsLnR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHRoaXMuZXh0ZXJuYWxMaW5rO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2VhcmNoQXV0b1N1Z2dlc3Rpb25zKHBhcmFtcz8pIHtcbiAgICBsZXQgc2VhcmNoVXJsID0gYC9zdWdnZXN0aW9ucy8ke3RoaXMubWV0YS5uYW1lfS9zZWFyY2hgO1xuICAgIGlmICh0aGlzLm1ldGEuYXV0byAmJiB0aGlzLm1ldGEuYXV0by5zZWFyY2gpIHtcbiAgICAgIGlmICh0aGlzLm1ldGEuYXV0by5zZWFyY2gudXJsKSB7XG4gICAgICAgIHNlYXJjaFVybCA9IHRoaXMubWV0YS5hdXRvLnNlYXJjaC51cmwucmVwbGFjZSgvXFwke1xccyooW1xcdy5dKylcXHMqfS9nLCAobWF0Y2gsIGtleSkgPT4ge1xuICAgICAgICAgIGlmIChwYXJhbXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgY29uc3QgdmFsID0gcGFyYW1zW2tleV07XG4gICAgICAgICAgICBkZWxldGUgcGFyYW1zW2tleV07XG4gICAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBwIG9mIE9iamVjdC5rZXlzKHBhcmFtcykpIHtcbiAgICAgICAgc2VhcmNoVXJsICs9IGAke3NlYXJjaFVybC5pbmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnfSR7ZW5jb2RlVVJJQ29tcG9uZW50KHApfT0ke2VuY29kZVVSSUNvbXBvbmVudChwYXJhbXNbcF0pfWA7XG4gICAgICB9XG4gICAgICB0aGlzLnNlYXJjaGluZyA9IHRydWU7XG4gICAgICB0aGlzLnJlc291cmNlU2VydmljZS5nZXRCeVBhdGgoc2VhcmNoVXJsKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICBkZWxldGUgdGhpcy5zZWFyY2hpbmc7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICBsZXQgc3VnZ2VzdGlvbnM7XG4gICAgICAgICAgc3VnZ2VzdGlvbnMgPSByZXN1bHQ7XG4gICAgICAgICAgaWYgKHRoaXMubWV0YS5hdXRvLnNlYXJjaC5leHRyYWN0KSB7XG4gICAgICAgICAgICBzdWdnZXN0aW9ucyA9IHJlc3VsdFt0aGlzLm1ldGEuYXV0by5zZWFyY2guZXh0cmFjdF07XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzdWdnZXN0aW9ucyBpbnN0YW5jZW9mIEFycmF5ICE9PSB0cnVlKSB7XG4gICAgICAgICAgICBzdWdnZXN0aW9ucyA9IFtzdWdnZXN0aW9uc107XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGFzeW5jU3VnZ2VzdGlvbnMgPSBbXTtcbiAgICAgICAgICBzdWdnZXN0aW9ucy5mb3JFYWNoKChzKSA9PiB7XG4gICAgICAgICAgICBpZiAocyAmJiBzLmlkICYmIHMudHlwZSkgeyAvLyBUT09EIGNoZWNrIHRoZSB0eXBlIGlzIGFjY2VwdGFibGVcbiAgICAgICAgICAgICAgYXN5bmNTdWdnZXN0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBpZDogcy5pZCxcbiAgICAgICAgICAgICAgICBsYWJlbDogcy5sYWJlbCB8fCBgJHtzLnR5cGV9IyR7cy5pZH1gLFxuICAgICAgICAgICAgICAgIHR5cGU6IHMudHlwZVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoYXN5bmNTdWdnZXN0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChhc3luY1N1Z2dlc3Rpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICB0aGlzLnBhcmVudFt0aGlzLm1ldGEubmFtZV0gPSBhc3luY1N1Z2dlc3Rpb25zWzBdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuYXN5bmNTdWdnZXN0aW9ucztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5hc3luY1N1Z2dlc3Rpb25zID0gYXN5bmNTdWdnZXN0aW9ucztcbiAgICAgICAgfVxuICAgICAgfSwgKCkgPT4ge1xuICAgICAgICBkZWxldGUgdGhpcy5zZWFyY2hpbmc7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxufVxuIiwiPGRpdiBjbGFzcz0ndmdpcC1tZXRhLWZpZWxkLXByZXZpZXcnICpuZ0lmPSdwcmV2aWV3ICYmIG1vZGVsICYmICghbXVsdGlwbGUgfHwgKG11bHRpcGxlICYmIG1vZGVsLmxlbmd0aCkpJz5cbiAgPGRpdiBjbGFzcz0ndmdpcC1tZXRhLWZpZWxkLWxhYmVsJyBbdGl0bGVdPSdtZXRhLmxhYmVsIHx8IG1ldGEubmFtZSc+e3ttZXRhLmxhYmVsIHx8IG1ldGEubmFtZX19PC9kaXY+XG4gIDxkaXYgKm5nSWY9JyFtdWx0aXBsZScgY2xhc3M9J3ZnaXAtbWV0YS1maWVsZC12YWx1ZSBfX2d1Jz5cbiAgICA8c3ZnIGNsYXNzPVwiVmx0LWljb24gVmx0LWljb24tLXNtYWxsZXJcIiBzdHlsZT0nbWFyZ2luLXRvcDogLTNweDsnPlxuICAgICAgPHVzZSBhdHRyLnhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1icmFuZC1pY29ucy5zdmcje3tpbnRlZ3JhdGlvbkljb259fVwiIC8+XG4gICAgPC9zdmc+XG4gICAge3ttb2RlbC5sYWJlbCB8fCBtb2RlbC5pZH19IDxzcGFuIGNsYXNzPSdWbHQtZ3JleSc+KHt7bW9kZWwudHlwZX19KTwvc3Bhbj5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9J211bHRpcGxlJyBjbGFzcz0ndmdpcC1tZXRhLWZpZWxkLXZhbHVlIF9fZ3UnPlxuICAgIDxzcGFuICpuZ0Zvcj0nbGV0IG0gb2YgKG1vZGVsIHx8IFtdKScgY2xhc3M9J1ZsdC1iYWRnZSBWbHQtYmFkZ2UtLWFwcCc+XG4gICAgICB7e20ubGFiZWwgfHwgbS5pZCB8fCBtfX0gPHNwYW4gY2xhc3M9J1ZsdC1ncmV5LWRhcmsnICpuZ0lmPSdpc1BvbHltb3JwaGljJz4oe3ttLnR5cGV9fSk8L3NwYW4+XG4gICAgPC9zcGFuPlxuICA8L2Rpdj5cbiAgPGEgW2hyZWZdPSdleHRlcm5hbExpbmsgfHwgbW9kZWwuZXh0ZXJuYWxMaW5rJyB0YXJnZXQ9J19ibGFuaycgcmVsPSdub29wZW5lcidcbiAgICAqbmdJZj0nZXh0ZXJuYWxMaW5rICYmIChtb2RlbCAmJiAhbXVsdGlwbGUpJyBjbGFzcz1cIlZsdC1jb21wb3NpdGVfX2FwcGVuZC0taWNvbiBwcmV2aWV3XCIgYXJpYS1sYWJlbD0nT3BlbiBleHRlcm5hbCc+XG4gICAgPGRpdiBjbGFzcz1cIlZsdC1jb21wb3NpdGVfX2ljb25cIj5cbiAgICAgIDxzdmc+XG4gICAgICAgIDx1c2UgeGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1vcGVuXCIgLz5cbiAgICAgIDwvc3ZnPlxuICAgIDwvZGl2PlxuICA8L2E+XG48L2Rpdj5cbjxkaXYgKm5nSWY9JyFwcmV2aWV3JyBjbGFzcz1cIm1ldGEtZmllbGQtcmVmZXJlbmNlIFZsdC1mb3JtX19lbGVtZW50IFZsdC1mb3JtX19lbGVtZW50LS1iaWdcIlxuICBbbmdDbGFzc109XCJ7ICdWbHQtZm9ybV9fZWxlbWVudC0tZXJyb3InOiAoc2VhcmNoRXJyb3IgJiYga2V5TGlzdGVuZXJBY3RpdmUpIHx8IChmLmludmFsaWQgJiYgKChmIHwgbWV0YU1vZGVsKS5fcGFyZW50LnN1Ym1pdHRlZCB8fCAoZnQgfCBtZXRhTW9kZWwgKS50b3VjaGVkKSksICdtdWx0aXBsZSc6IG11bHRpcGxlLCAnaGFzLXZhbHVlJzogbW9kZWwsIGFjdGl2ZToga2V5TGlzdGVuZXJBY3RpdmUgfVwiPlxuICA8ZGl2ICpuZ0lmPSdtdWx0aXBsZScgY2xhc3M9J2l0ZW1zLWNvbnRhaW5lcicgW25nQ2xhc3NdPSd7IGNyZWF0YWJsZTogaXNDcmVhdGFibGUgfSc+XG4gICAgPGRpdiAqbmdJZj0nbW9kZWwnIGNsYXNzPSdiYWRnZXMtY29udGFpbmVyIGtlZXAtZm9jdXMnIChjbGljayk9J2ZvY3VzKCknIHN0eWxlPSd3aWR0aDogMTAwJTsnPiA8IS0tIGVzbGludC1kaXNhYmxlLWxpbmUgLS0+XG4gICAgICA8ZGl2ICpuZ0Zvcj0nbGV0IGl0ZW0gb2YgbW9kZWwnIGNsYXNzPVwiVmx0LWJhZGdlIFZsdC1iYWRnZS0tYXBwIFZsdC1iYWRnZS0tbGFyZ2Uga2VlcC1mb2N1c1wiIFtuZ0NsYXNzXT1cInsgZ3JpZDogKGl0ZW0ubGFiZWwgfHwgaXRlbS5pZCB8fCAnJykubGVuZ3RoID4gNTZ9XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPSdWbHQtdHJ1bmNhdGUnPnt7aXRlbS5sYWJlbCB8fCBpdGVtLmlkIHx8IGl0ZW0gfX0gPHNwYW4gKm5nSWY9J2lzUG9seW1vcnBoaWMnIGNsYXNzPSdWbHQtZ3JleS1kYXJrJyBzdHlsZT0nZm9udC13ZWlnaHQ6IG5vcm1hbDsnPih7e2l0ZW0udHlwZX19KTwvc3Bhbj48L3NwYW4+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJWbHQtYmFkZ2VfX2Rpc21pc3Mga2VlcC1mb2N1c1wiIChjbGljayk9J3JlbW92ZSgkZXZlbnQsIGl0ZW0pJyBzdHlsZT0ncG9zaXRpb246IGFic29sdXRlOyByaWdodDogMTJweDsgdG9wOiA4cHg7JyBhcmlhLWxhYmVsPSdSZW1vdmUnPjwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiVmx0LWNvbXBvc2l0ZVwiPlxuICAgIDxkaXYgY2xhc3M9J2Ryb3Bkb3duLXdyYXBwZXIgVmx0LWRyb3Bkb3duJyBzdHlsZT0nd2lkdGg6IDEwMCU7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiA0OHB4Oyc+XG4gICAgICA8ZGl2IGNsYXNzPVwiVmx0LWRyb3Bkb3duX19wYW5lbFwiPlxuICAgICAgICA8ZGl2ICpuZ0lmPSdzZWFyY2hFcnJvcic+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIlZsdC1jYWxsb3V0IFZsdC1jYWxsb3V0LS1jcml0aWNhbCBrZWVwLWZvY3VzXCI+XG4gICAgICAgICAgICA8aT48L2k+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiVmx0LWNhbGxvdXRfX2NvbnRlbnRcIj57e3NlYXJjaEVycm9yfX08L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9JyFzZWFyY2hFcnJvciAmJiAoc3VnZ2VzdGlvbnMubGVuZ3RoIHx8IHNlYXJjaFJlc3VsdHMpJyBbbmdDbGFzc109XCJ7IHN1Z2dlc3Rpb25zOiAhc2VhcmNoUmVzdWx0c31cIlxuICAgICAgICAgIGNsYXNzPVwiVmx0LWRyb3Bkb3duX19wYW5lbF9fY29udGVudCBWbHQtZHJvcGRvd25fX3BhbmVsX19jb250ZW50LS1zY3JvbGwtYXJlYVwiIHN0eWxlPSdwYWRkaW5nOiAwOyc+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIlZsdC1kcm9wZG93bl9fYmxvY2tcIj48L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPSchc2VhcmNoUmVzdWx0cycgY2xhc3M9XCJWbHQtZHJvcGRvd25fX3Njcm9sbFwiPlxuICAgICAgICAgICAgPGEgaHJlZj0nIycgW25nQ2xhc3NdPVwieyAnVmx0LWRyb3Bkb3duX19saW5rLS1zZWxlY3RlZCc6IGFjdGl2ZVN1Z2dlc3Rpb25JbmRleCA9PT0gaSwgc21hcnQ6IHN1Z2dlc3Rpb24uc21hcnQgfVwiIChjbGljayk9J29uU3VnZ2VzdGlvblNlbGVjdCgkZXZlbnQsIHN1Z2dlc3Rpb24pJyAqbmdGb3I9J2xldCBzdWdnZXN0aW9uIG9mIHN1Z2dlc3Rpb25zOyBsZXQgaSA9IGluZGV4JyAgY2xhc3M9XCJWbHQtZHJvcGRvd25fX2xpbmsgaGFzLXR5cGVcIj5cbiAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0nVmx0LWljb24gIFZsdC1pY29uLS1zbWFsbCc+PHVzZSBhdHRyLnhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1icmFuZC1pY29ucy5zdmcje3tpbnRlZ3JhdGlvbkljb259fVwiLz48L3N2Zz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nX19ndScgW3RpdGxlXT0nc3VnZ2VzdGlvbi5sYWJlbCc+e3sgc3VnZ2VzdGlvbi5sYWJlbCB9fTwvZGl2PlxuICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9J1ZsdC1ncmV5LWRhcmsnIHN0eWxlPSd0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTsnPnt7c3VnZ2VzdGlvbi50eXBlfX08L3NtYWxsPlxuICAgICAgICAgICAgPC9hPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9J3NlYXJjaFJlc3VsdHMnIGNsYXNzPVwiVmx0LWRyb3Bkb3duX19zY3JvbGxcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9JyFzZWFyY2hSZXN1bHRzLmxlbmd0aCcgY2xhc3M9J1ZsdC1kcm9wZG93bl9fYmxvY2snPiBObyByZWNvcmRzIG1hdGNoaW5nICc8YiBzdHlsZT0ncG9pbnRlci1ldmVudHM6IG5vbmU7Jz57e3NlYXJjaFRleHR9fTwvYj4nIHdlcmUgZm91bmQuPC9kaXY+XG4gICAgICAgICAgICA8YSBocmVmPScjJyBbbmdDbGFzc109XCJ7ICdWbHQtZHJvcGRvd25fX2xpbmstLXNlbGVjdGVkJzogYWN0aXZlU3VnZ2VzdGlvbkluZGV4ID09PSBpIH1cIiAoY2xpY2spPSdvblN1Z2dlc3Rpb25TZWxlY3QoJGV2ZW50LCBzdWdnZXN0aW9uKScgKm5nRm9yPSdsZXQgc3VnZ2VzdGlvbiBvZiBzZWFyY2hSZXN1bHRzOyBsZXQgaSA9IGluZGV4JyAgY2xhc3M9XCJWbHQtZHJvcGRvd25fX2xpbmsgaGFzLXR5cGVcIj5cbiAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0nVmx0LWljb24gVmx0LWljb24tLXNtYWxsJz48dXNlIGF0dHIueGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWJyYW5kLWljb25zLnN2ZyN7e2ludGVncmF0aW9uSWNvbn19XCIvPjwvc3ZnPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdfX2d1JyBbdGl0bGVdPSdzdWdnZXN0aW9uLmxhYmVsJz57eyBzdWdnZXN0aW9uLmxhYmVsIH19PC9kaXY+XG4gICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz0nVmx0LWdyZXktZGFyaycgc3R5bGU9J3RleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplOyc+e3tzdWdnZXN0aW9uLnR5cGV9fTwvc21hbGw+XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPCEtLSA8ZGl2ICpuZ0lmPSdzZWFyY2hSZXN1bHRzJyBjbGFzcz1cIlZsdC1kcm9wZG93bl9fYmxvY2tcIiBzdHlsZT0ndGV4dC1hbGlnbjogcmlnaHQ7IHBhZGRpbmctdG9wOiAwOyc+XG4gICAgICAgICAgICA8c21hbGw+XG4gICAgICAgICAgICAgIHt7IHNlYXJjaFJlc3VsdHMgPyBzZWFyY2hSZXN1bHRzLmxlbmd0aCsnIHJlc3VsdHMnIDogJ1N1Z2dlc3Rpb25zJyB9fSA8c3BhbiBzdHlsZT0nZm9udC1zdHlsZTogaXRhbGljOyBmb250LXdlaWdodDogbm9ybWFsOycgKm5nSWY9J3NlYXJjaFJlc3VsdHMnPn57eyBtb2RlbCA/ICdsYXN0IHNlYXJjaCcgOiBzZWFyY2hUZXh0fX08L3NwYW4+XG4gICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiVmx0LWRyb3Bkb3duX19ibG9ja1wiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJWbHQtY29tcG9zaXRlX19wcmVwZW5kXCJcbiAgICAgICpuZ0lmPSdpc1BvbHltb3JwaGljICYmIHNob3dUeXBlcyAmJiAobXVsdGlwbGUgfHwgIW1vZGVsIHx8IChkcm9wZG93blZpc2libGUgJiYgKChzdWdnZXN0aW9ucyB8fCBzZWFyY2hSZXN1bHRzIHx8IFtdKS5sZW5ndGggfHwgc2VhcmNoUmVzb3VyY2VUeXBlLnJlc291cmNlVHlwZSkpKSc+XG4gICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLXNjb3BlXCIgW25nQ2xhc3NdPVwieyAnaGFzLXZhbHVlJzogc2VhcmNoUmVzb3VyY2VUeXBlLnJlc291cmNlVHlwZSB9XCI+XG4gICAgICAgIDx2Z2lwLW1ldGEtZmllbGQgY2xhc3M9J3Nob3duJyBbbWV0YV09J3NlYXJjaFJlc291cmNlVHlwZU1ldGEnIFtwYXJlbnRdPSdzZWFyY2hSZXNvdXJjZVR5cGUnXG4gICAgICAgICAgKG9uQ2hhbmdlKT0nb25TZWFyY2hSZXNvdXJjZVR5cGVDaGFuZ2VkKCRldmVudCknIChvbkxlYXZlKT0nb25CbHVyKCRldmVudCknXG4gICAgICAgICAgW2ludGVncmF0aW9uQ29kZV09J2ludGVncmF0aW9uQ29kZScgdGhlbWU9J2luaGVyaXQnPjwvdmdpcC1tZXRhLWZpZWxkPlxuICAgICAgICA8c3ZnIGNsYXNzPSdWbHQtaWNvbiBWbHQtZ3JleSBWbHQtaWNvbi0tc21hbGxlciB2aXNpYmxlLW1vYmlsZSBtb2JpbGUtaWNvbidcbiAgICAgICAgICBzdHlsZT0ncG9zaXRpb246IGFic29sdXRlOyB0b3A6IDE1cHg7IGxlZnQ6IDE0cHg7IHBvaW50ZXItZXZlbnRzOiBub25lOyc+XG4gICAgICAgICAgPHVzZSB4bGluazpocmVmPVwidm9sdGEvdm9sdGEtaWNvbnMuc3ZnI1ZsdC1pY29uLW1lbnVcIiAvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9JyEoaXNQb2x5bW9ycGhpYyAmJiBzaG93VHlwZXMgJiYgKG11bHRpcGxlIHx8ICFtb2RlbCB8fCBkcm9wZG93blZpc2libGUpKSc+XG4gICAgICA8IS0tIHJlcXVpcmVkIGJ5IGNzcyAtLT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiVmx0LWNvbXBvc2l0ZV9fd3JhcHBlciBWbHQtaW5wdXRcIiBzdHlsZT0nb3ZlcmZsb3c6IGhpZGRlbjsnXG4gICAgICBbbmdDbGFzc109XCJ7ICdoYXMtYXBwZW5kLWJ1dHRvbic6IGhhc0FwcGVuZEJ1dHRvbiAmJiAhZGlzYWJsZWQsICd2Z2lwLWRpc2FibGUnOiBkaXNhYmxlZCB9XCI+XG4gICAgICA8bGFiZWwgY2xhc3M9J3dyYXBwZXInPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiVmx0LWNvbXBvc2l0ZV9fcHJlcGVuZCBWbHQtY29tcG9zaXRlX19wcmVwZW5kLS1pY29uXCIgc3R5bGU9J3RvcDogMDsgcGFkZGluZy10b3A6IDE1cHg7Jz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiVmx0LWNvbXBvc2l0ZV9faWNvblwiPlxuICAgICAgICAgICAgPHN2ZyAqbmdJZj0naXNTZWFyY2hhYmxlICYmICghbW9kZWwgfHwgbXVsdGlwbGUpJyBjbGFzcz0nVmx0LWdyZXknPlxuICAgICAgICAgICAgICA8dXNlIGF0dHIueGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi17eyBtdWx0aXBsZSA/ICdzdGFjaycgOiAnc2VhcmNoJ319XCIgLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPHN2ZyAqbmdJZj0nIWlzU2VhcmNoYWJsZSB8fCAobW9kZWwgJiYgIW11bHRpcGxlKSdcbiAgICAgICAgICAgICAgW25nU3R5bGVdPVwie2ZpbGw6IGludGVncmF0aW9uSWNvbiA9PT0gJ0JyYW5kLWljb24tdm9uYWdlJyA/ICd2YXIoLS12Z2lwLW1ldGEtaW5wdXQtY29sb3IpJyA6ICcnfVwiPlxuICAgICAgICAgICAgICA8dXNlIGF0dHIueGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWJyYW5kLWljb25zLnN2ZyN7e2ludGVncmF0aW9uSWNvbn19XCIgLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9J3N1Z2dlc3Rpb25zLmxlbmd0aCcgY2xhc3M9XCJWbHQtYmFkZ2UgVmx0LWJhZGdlLS1zbWFsbCBWbHQtYmFkZ2UtLXB1cnBsZVwiXG4gICAgICAgICAgICBzdHlsZT0ncGFkZGluZzogMHB4IDRweDsgcG9zaXRpb246IGFic29sdXRlOyB0b3A6IDI2cHg7IGxlZnQ6IDRweDsgcG9pbnRlci1ldmVudHM6IG5vbmU7IG1pbi13aWR0aDogMTRweDsnPlxuICAgICAgICAgICAge3tzdWdnZXN0aW9ucy5sZW5ndGh9fTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGlucHV0IGNsYXNzPSdtb2RlbCcgdHlwZT0naGlkZGVuJyBbcmVxdWlyZWRdPSd2YWxpZGF0aW9ucy5yZXF1aXJlZCcgWyhuZ01vZGVsKV09J21vZGVsJyAjZj0nbmdNb2RlbCcgW25hbWVdPSduYW1lJyAvPlxuICAgICAgICA8aW5wdXQgY2xhc3M9J21haW4nIFtyZWFkb25seV09JyFpc1NlYXJjaGFibGUgfHwgKG1vZGVsICYmICFtdWx0aXBsZSknIFtuZ01vZGVsXT0nc2VhcmNoVGV4dCcgI2Z0PSduZ01vZGVsJyAobmdNb2RlbENoYW5nZSk9J29uU2VhcmNoVGV4dENoYW5nZWQoJGV2ZW50KScgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiIHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJ7eyBwbGFjZUhvbGRlckxhYmVsIHx8ICcgJyB9fVwiIFtuZ0NsYXNzXT0neyBleHQ6IGV4dGVybmFsTGluayB9JyAoY2xpY2spPSdvbkFjdGl2YXRlZCgkZXZlbnQpJyAoZm9jdXMpPSdvbkFjdGl2YXRlZCgkZXZlbnQpJyAoYmx1cik9J29uQmx1cigkZXZlbnQpJyBbZGlzYWJsZWRdPSdkaXNhYmxlZCcgW3RpdGxlXT1cIm1vZGVsID8gbW9kZWwubGFiZWwgOiAnJ1wiLz5cbiAgICAgICAgPGxhYmVsIGNsYXNzPSdWbHQtdHJ1bmNhdGUgaGlkZGVuLW1vYmlsZScgc3R5bGU9J3BhZGRpbmctbGVmdDogMjVweDsgcGFkZGluZy1yaWdodDogNDJweDsnPnt7IChtdWx0aXBsZSAmJiBpc1BvbHltb3JwaGljKSA/ICcrQWRkICcgOiAoKG1vZGVsIHx8ICFpc1BvbHltb3JwaGljKSA/IG1ldGEubGFiZWwgOiAoIG1ldGEuc2VhcmNoTGFiZWwgfHwgJ1NlYXJjaCcpKSB9fTxzcGFuICpuZ0lmPSd2YWxpZGF0aW9ucy5yZXF1aXJlZCcgY2xhc3M9J1ZsdC1yZWQnPio8L3NwYW4+Jm5ic3A7PHNwYW4gc3R5bGU9J2NvbG9yOiB2YXIoLS12Z2lwLW1ldGEtaW5wdXQtY29sb3IpOyB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTsnICpuZ0lmPSdtb2RlbCc+KHt7bW9kZWwudHlwZSB8fCBtb2RlbC5yZXNvdXJjZVR5cGUgfHwgbW9kZWwubGVuZ3RofX0pPC9zcGFuPjwvbGFiZWw+IDwhLS0gZXNsaW50LWRpc2FibGUtbGluZSBAYW5ndWxhci1lc2xpbnQvdGVtcGxhdGUvbGFiZWwtaGFzLWFzc29jaWF0ZWQtY29udHJvbC0tPlxuICAgICAgICA8bGFiZWwgY2xhc3M9J1ZsdC10cnVuY2F0ZSBoaWRkZW4tZGVza3RvcCcgc3R5bGU9J3BhZGRpbmctbGVmdDogMjVweDsgcGFkZGluZy1yaWdodDogNDJweDsnPnt7bWV0YS5sYWJlbCB8fCBtZXRhLm5hbWV9fTxzcGFuICpuZ0lmPSd2YWxpZGF0aW9ucy5yZXF1aXJlZCcgY2xhc3M9J1ZsdC1yZWQnPio8L3NwYW4+Jm5ic3A7PHNwYW4gc3R5bGU9J2NvbG9yOiB2YXIoLS12Z2lwLW1ldGEtaW5wdXQtY29sb3IpOyB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTsnICpuZ0lmPSdtb2RlbCc+KHt7bW9kZWwudHlwZSB8fCBtb2RlbC5yZXNvdXJjZVR5cGUgfHwgbW9kZWwubGVuZ3RofX0pPC9zcGFuPjwvbGFiZWw+IDwhLS0gZXNsaW50LWRpc2FibGUtbGluZSBAYW5ndWxhci1lc2xpbnQvdGVtcGxhdGUvbGFiZWwtaGFzLWFzc29jaWF0ZWQtY29udHJvbC0tPlxuICAgICAgPC9sYWJlbD5cbiAgICAgIDxkaXYgKm5nSWY9J3NlYXJjaGluZycgY2xhc3M9J3NlYXJjaC1wcm9ncmVzcyc+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFyIFZsdC1iZy1wdXJwbGVcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9J1ZsdC1jb21wb3NpdGVfX2FwcGVuZCByaWdodC1hY3Rpb25zJz5cbiAgICAgICAgPCEtLSA8ZGl2ICpuZ0lmPSdwcmV2TW9kZWwgJiYgIW1vZGVsJyBjbGFzcz1cIlZsdC1jb21wb3NpdGVfX2FwcGVuZC0taWNvblwiIChjbGljayk9J3JldmVydCgpJz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiVmx0LWNvbXBvc2l0ZV9faWNvblwiPlxuICAgICAgICAgICAgPHN2Zz48dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tcmVwbHlcIi8+PC9zdmc+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgPGEgaHJlZj0nIycgKm5nSWY9J21vZGVsICYmICFtdWx0aXBsZScgY2xhc3M9XCJWbHQtY29tcG9zaXRlX19hcHBlbmQtLWljb25cIiAoY2xpY2spPSdyZW1vdmVTZWxlY3Rpb24oJGV2ZW50KSc+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIlZsdC1jb21wb3NpdGVfX2ljb25cIj5cbiAgICAgICAgICAgIDxzdmc+XG4gICAgICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1jcm9zc1wiIC8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9hPlxuICAgICAgICA8YSBbaHJlZl09J2V4dGVybmFsTGluayB8fCBtb2RlbC5leHRlcm5hbExpbmsnIHRhcmdldD0nX2JsYW5rJyByZWw9J25vb3BlbmVyJyAqbmdJZj0nZXh0ZXJuYWxMaW5rICYmIChtb2RlbCAmJiAhbXVsdGlwbGUpJyBjbGFzcz1cIlZsdC1jb21wb3NpdGVfX2FwcGVuZC0taWNvblwiIGFyaWEtbGFiZWw9J09wZW4gZXh0ZXJuYWwnPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJWbHQtY29tcG9zaXRlX19pY29uXCI+XG4gICAgICAgICAgICA8c3ZnPlxuICAgICAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tb3BlblwiIC8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9hPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPCEtLSA8c3BhbiAqbmdJZj0naGFzQ3JlYXRhYmxlcyc+XG4gICAgICA8YnV0dG9uIHR5cGU9J2J1dHRvbicgKm5nSWY9JyFtb2RlbCB8fCBtdWx0aXBsZScgKGNsaWNrKT0nb3BlblJlc291cmNlKCknIGNsYXNzPVwiVmx0LWJ0biBWbHQtYnRuLS1zZWNvbmRhcnkgVmx0LWJ0bi0taWNvbiBWbHQtYnRuLS1sYXJnZVwiIHN0eWxlPSdtYXJnaW4tbGVmdDogMTJweDsnPlxuICAgICAgICA8c3ZnPjx1c2UgeGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1wbHVzXCIvPjwvc3ZnPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIHR5cGU9J2J1dHRvbicgKm5nSWY9J21vZGVsICYmICFtdWx0aXBsZScgKGNsaWNrKT0nb3BlblJlc291cmNlKG1vZGVsKScgY2xhc3M9XCJWbHQtYnRuIFZsdC1idG4tLXByaW1hcnkgVmx0LWJ0bi0taWNvbiBWbHQtYnRuLS1sYXJnZVwiIHN0eWxlPSdtYXJnaW4tbGVmdDogMTJweDsnPlxuICAgICAgICA8c3ZnPjx1c2UgeGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1lZGl0XCIvPjwvc3ZnPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9zcGFuPiAtLT5cbiAgICA8ZGl2ICpuZ0lmPSdoYXNBcHBlbmRCdXR0b24gJiYgIWRpc2FibGVkJyBjbGFzcz1cIlZsdC1jb21wb3NpdGVfX2FwcGVuZFwiPlxuICAgICAgPGJ1dHRvbiAoZm9jdXMpPSdvbkFjdGl2YXRlZCgkZXZlbnQpJyAoYmx1cik9J29uQmx1cigkZXZlbnQpJyB0eXBlPSdidXR0b24nICpuZ0lmPSchbW9kZWwgfHwgbXVsdGlwbGUnXG4gICAgICAgIChjbGljayk9J29wZW5SZXNvdXJjZSgpJyBjbGFzcz1cIlZsdC1idG4gVmx0LWJ0bi0td2hpdGUgVmx0LWJ0bi0taWNvblwiIGFyaWEtbGFiZWw9J0FkZCBuZXcnPlxuICAgICAgICA8c3ZnPlxuICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1wbHVzXCIgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gKGZvY3VzKT0nb25BY3RpdmF0ZWQoJGV2ZW50KScgKGJsdXIpPSdvbkJsdXIoJGV2ZW50KScgdHlwZT0nYnV0dG9uJyAqbmdJZj0nbW9kZWwgJiYgIW11bHRpcGxlJ1xuICAgICAgICAoY2xpY2spPSdvcGVuUmVzb3VyY2UobW9kZWwpJyBjbGFzcz1cIlZsdC1idG4gVmx0LWJ0bi0td2hpdGUgVmx0LWJ0bi0taWNvblwiIGFyaWEtbGFiZWw9J0VkaXQnPlxuICAgICAgICA8c3ZnPlxuICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1lZGl0XCIgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxzbWFsbCAqbmdJZj0nZi5pbnZhbGlkICYmICgoZiB8IG1ldGFNb2RlbCkuX3BhcmVudC5zdWJtaXR0ZWQgfHwgKChmdCB8IG1ldGFNb2RlbCkudG91Y2hlZCAmJiBrZXlMaXN0ZW5lckFjdGl2ZSkpJ1xuICAgIGNsYXNzPVwiVmx0LWZvcm1fX2VsZW1lbnRfX2Vycm9yXCI+XG4gICAgPHNwYW4gKm5nSWY9XCJmLmVycm9ycy5yZXF1aXJlZFwiPlJlcXVpcmVkPC9zcGFuPlxuICAgIDxzcGFuICpuZ0lmPVwiZi5lcnJvcnMucGF0dGVyblwiPlNob3VsZCBtYXRjaCAne3t2YWxpZGF0aW9ucy5wYXR0ZXJufX0nIHBhdHRlcm48L3NwYW4+XG4gICAgPHNwYW4gKm5nSWY9XCJmLmVycm9ycy5jdXN0b21cIj57e2YuZXJyb3JzLmN1c3RvbX19Jm5ic3A7PC9zcGFuPlxuICA8L3NtYWxsPlxuICA8c21hbGwgKm5nSWY9J21ldGEuaGVscFRleHQgfHwgbWV0YS5oaW50JyBjbGFzcz1cIlZsdC1mb3JtX19lbGVtZW50X19oaW50XCI+e3ttZXRhLmhlbHBUZXh0IHx8IG1ldGEuaGludH19PC9zbWFsbD5cbjwvZGl2PiJdfQ==
|
|
831
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXRhLXVpL3NyYy9saWIvZmllbGRSZWZlcmVuY2UvaW5kZXgudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXRhLXVpL3NyYy9saWIvZmllbGRSZWZlcmVuY2Uvdmlldy5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQTRCLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFMUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7Ozs7Ozs7Ozs7QUFVN0MsTUFBTSxPQUFPLGNBQWUsU0FBUSxhQUFhO0lBZ0MvQyxZQUNVLGdCQUFzQyxFQUN0QyxZQUFpQyxFQUNqQyxjQUE4QixFQUM5QixXQUErQixFQUMvQixXQUErQixFQUMvQixnQkFBa0M7UUFFMUMsS0FBSyxFQUFFLENBQUM7UUFQQSxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXNCO1FBQ3RDLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtRQUNqQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBQy9CLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQUMvQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBakM1Qyx1QkFBa0IsR0FBUSxFQUFFLENBQUM7UUFNN0Isc0JBQWlCLEdBQW9CLElBQUksT0FBTyxFQUFVLENBQUM7UUFDM0QsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFPcEIsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFDeEIsMkJBQXNCLEdBQVE7WUFDNUIsSUFBSSxFQUFFLFFBQVE7WUFDZCxJQUFJLEVBQUUsY0FBYztZQUNwQixLQUFLLEVBQUUsTUFBTTtZQUNiLE9BQU8sRUFBRSxFQUFFO1lBQ1gsVUFBVSxFQUFFLElBQUk7U0FDakIsQ0FBQztRQUNGLHdCQUFtQixHQUFlLEVBQUUsQ0FBQztRQUdyQyxxQkFBZ0IsR0FBZSxFQUFFLENBQUM7UUE4bkIxQixhQUFRLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUMzQixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzdFLElBQUksZUFBZSxJQUFJLENBQUMsb0JBQW9CLEVBQUUscUJBQXFCLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtnQkFDM0csSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQ2Q7aUJBQU0sSUFBSSxDQUFDLGVBQWUsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEtBQUsscUJBQXFCLEVBQUU7Z0JBQzlHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQzthQUN4QjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsZUFBZSxJQUFJLGVBQWUsQ0FBQyxPQUFPLEtBQUssT0FBTyxFQUFFO29CQUMzRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7aUJBQ2Q7YUFDRjtRQUNILENBQUMsQ0FBQztRQTRCTSxZQUFPLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUMxQixRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUU7Z0JBQ2pCLEtBQUssV0FBVyxDQUFDLENBQUM7b0JBQ2hCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztvQkFDcEIsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssV0FBVyxFQUFFO3dCQUN2RCxJQUFJLENBQUMscUJBQXFCLEdBQUcsQ0FBQyxDQUFDO3FCQUNoQzt5QkFBTTt3QkFDTCxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQzt3QkFDN0IsSUFBSSxJQUFJLENBQUMscUJBQXFCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLEVBQUU7NEJBQ2pGLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLENBQUM7eUJBQ2hDO3FCQUNGO29CQUNELElBQUksQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO29CQUNyQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztvQkFDeEIsTUFBTTtpQkFDUDtnQkFDRCxLQUFLLFNBQVMsQ0FBQyxDQUFDO29CQUNkLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztvQkFDcEIsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssV0FBVyxFQUFFO3dCQUN2RCxJQUFJLENBQUMscUJBQXFCLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO3FCQUNsRjt5QkFBTTt3QkFDTCxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQzt3QkFDN0IsSUFBSSxJQUFJLENBQUMscUJBQXFCLEdBQUcsQ0FBQyxFQUFFOzRCQUNsQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO3lCQUNsRjtxQkFDRjtvQkFDRCxJQUFJLENBQUMsNkJBQTZCLEVBQUUsQ0FBQztvQkFDckMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7b0JBQ3hCLE1BQU07aUJBQ1A7Z0JBQ0QsS0FBSyxPQUFPLENBQUM7Z0JBQ2IsS0FBSyxPQUFPLENBQUMsQ0FBQztvQkFDWixJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxXQUFXLEVBQUU7d0JBQ3ZELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQzt3QkFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO3dCQUN4QixJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQzt3QkFDckcsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUM7cUJBQ25DO29CQUNELE1BQU07aUJBQ1A7Z0JBQ0QsS0FBSyxRQUFRLENBQUMsQ0FBQztvQkFDYixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztvQkFDeEIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO29CQUN2QixNQUFNO2lCQUNQO2dCQUNELEtBQUssV0FBVyxDQUFDLENBQUM7b0JBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxZQUFZO3dCQUM5QyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7d0JBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQzt3QkFDeEIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO3FCQUN4QjtvQkFDRCxNQUFNO2lCQUNQO2FBQ0Y7UUFDSCxDQUFDLENBQUM7SUFudEJGLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDVixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUk7ZUFDakcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsR0FBRyxhQUFhLENBQUM7UUFDckQsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNyRixDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUNqQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNyQyxtQ0FBbUM7WUFDbkMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLENBQ2pMLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxlQUFlO1FBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDaEMsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO2dCQUN0QixLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7b0JBQ3BDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLEVBQUU7d0JBQ25GLE9BQU8sR0FBRyxDQUFDLFNBQVMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLElBQUksR0FBRyxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUMsQ0FBQztxQkFDcEU7aUJBQ0Y7YUFDRjtpQkFBTTtnQkFDTCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxZQUFZO2FBQzlIO1NBQ0Y7YUFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLFlBQVksS0FBSyxFQUFFO1lBQzlDLHFCQUFxQjtZQUNyQixtRkFBbUY7WUFDbkYsU0FBUztZQUNULEtBQUssTUFBTSxFQUFFLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDbkMsSUFBSSxFQUFFLENBQUMsTUFBTSxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUMsU0FBUyxFQUFFO29CQUN2QyxPQUFPLElBQUksQ0FBQztpQkFDYjthQUNGO1NBQ0Y7YUFBTTtZQUNMLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUM7U0FDckM7SUFDSCxDQUFDO0lBRUQsSUFBSSxlQUFlO1FBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDN0IsTUFBTSxrQkFBa0IsR0FBd0I7Z0JBQzlDLGVBQWUsRUFBRSxJQUFJLENBQUMsZUFBZTtnQkFDckMsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO2FBQ2hDLENBQUM7WUFDRixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQztTQUN0RTtRQUNELE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQzVFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDcEQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ3hCLGtDQUFrQztZQUNsQyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO2dCQUM1QyxLQUFLLEVBQUUsUUFBUTthQUNoQixDQUFDLENBQUM7U0FDSjtRQUNELElBQUksSUFBSSxDQUFDLGFBQWEsWUFBWSxLQUFLLEVBQUU7WUFDdkMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7WUFDMUIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7WUFDekIsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2pILEtBQUssTUFBTSxFQUFFLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDbkMsSUFBSSxFQUFFLENBQUMsU0FBUyxFQUFFO29CQUNoQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztvQkFDeEIsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLFdBQVcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUU7d0JBQzVELElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO3FCQUMzQjtpQkFDRjthQUNGO1lBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDL0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUU7b0JBQ2IsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztpQkFDcEY7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO2FBQU07WUFDTCxJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQztZQUM1RyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUM3QyxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUM7WUFDM0YsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQztTQUNqRDtRQUNELElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLG9CQUFvQixFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFhLEVBQUUsRUFBRTtZQUNqRyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztZQUN4QixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFOUMsMkVBQTJFO1FBQzNFLHFEQUFxRDtRQUVyRCxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDakQsR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ2IsSUFBSSxLQUFLLEtBQUssRUFBRSxFQUFFO29CQUNoQixLQUFLLEdBQUcsSUFBSSxDQUFDO2lCQUNkO2dCQUNELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtvQkFDakIsSUFBSSxLQUFLLElBQUksS0FBSyxZQUFZLEtBQUssRUFBRTt3QkFDbkMsS0FBSyxNQUFNLENBQUMsSUFBSSxLQUFLLEVBQUU7NEJBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO2dDQUNmLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDOzZCQUNqQjs0QkFDRCxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUU7Z0NBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO29DQUNkLEVBQUUsRUFBRSxDQUFDO29DQUNMLEtBQUssRUFBRSxDQUFDO29DQUNSLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUk7aUNBQzlCLENBQUMsQ0FBQzs2QkFDSjt5QkFDRjtxQkFDRjt5QkFBTTt3QkFDTCxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsOENBQThDO3FCQUM3RDtpQkFDRjtxQkFBTTtvQkFDTCxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxRQUFRLEVBQUU7d0JBQy9CLEtBQUssR0FBRzs0QkFDTixFQUFFLEVBQUUsS0FBSzs0QkFDVCxLQUFLLEVBQUUsS0FBSzs0QkFDWixJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJO3lCQUM5QixDQUFDO3FCQUNIO29CQUNELElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLENBQUM7d0JBQ3ZCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDO3dCQUNwRyxFQUFFLENBQUM7b0JBQ0wsOERBQThEO29CQUM5RCwrREFBK0Q7b0JBQy9ELDBDQUEwQztvQkFDMUMsUUFBUTtvQkFDUixJQUFJO2lCQUNMO2dCQUNELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO2dCQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtvQkFDbEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxRQUFRLENBQUMsQ0FBQztvQkFDdkUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7aUJBQzFCO3FCQUFNO29CQUNMLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQztpQkFDdEg7Z0JBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUN4QyxDQUFDO1lBQ0QsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLO1lBQ3JCLFVBQVUsRUFBRSxJQUFJLENBQUMsWUFBWTtZQUM3QixZQUFZLEVBQUUsSUFBSTtTQUNuQixDQUFDLENBQUM7UUFDSCxJQUFJLFNBQVMsRUFBRTtZQUNiLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUM7U0FDekM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQy9CLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRTtvQkFDdkIsS0FBSyxNQUFNLEVBQUUsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO3dCQUM3QixJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksRUFBRTs0QkFDbEMsTUFBTSxJQUFJLEdBQVE7Z0NBQ2hCLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxLQUFLO2dDQUNyQixLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxLQUFLO2dDQUNwQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUk7NkJBQ2QsQ0FBQzs0QkFDRixJQUFJLEVBQUUsQ0FBQyxZQUFZLEVBQUU7Z0NBQ25CLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQzs2QkFDckM7NEJBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzt5QkFDeEM7cUJBQ0Y7aUJBQ0Y7Z0JBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUU7b0JBQ3ZDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztpQkFDZDthQUNGO2lCQUFNO2dCQUNMLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUU7b0JBQzlELFVBQVUsQ0FBQyxHQUFHLEVBQUU7d0JBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7NEJBQ2YsTUFBTSxJQUFJLEdBQVE7Z0NBQ2hCLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUs7Z0NBQ3pDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUs7Z0NBQ2xFLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUk7Z0NBQ3ZCLEtBQUssRUFBRSxJQUFJOzZCQUNaLENBQUM7NEJBQ0YsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRTtnQ0FDN0IsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQzs2QkFDL0M7NEJBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQzt5QkFDcEM7b0JBQ0gsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUNQO3FCQUFNO29CQUNMLE9BQU8sQ0FBQyxJQUFJLENBQUMsc0NBQXNDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUNqRTthQUNGO1NBQ0Y7UUFFRCxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLFdBQVcsRUFBRTtZQUMvQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLFFBQVEsRUFBRTtnQkFDNUMsS0FBSyxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUU7b0JBQy9DLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQzNCLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxXQUFXLEVBQUU7d0JBQ2xELElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7d0JBQ3RCLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFOzRCQUN4QixHQUFHLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDOzRCQUNoQixJQUFJLENBQUMsR0FBRyxFQUFFO2dDQUNSLE1BQU07NkJBQ1A7eUJBQ0Y7d0JBQ0QsSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUU7NEJBQ2pDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDOzRCQUM1QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7eUJBQ2Q7cUJBQ0Y7b0JBQ0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO3dCQUMzQyxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFOzRCQUMzQyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDOzRCQUN0QixLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRTtnQ0FDeEIsR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQ0FDaEIsSUFBSSxDQUFDLEdBQUcsRUFBRTtvQ0FDUixNQUFNO2lDQUNQOzZCQUNGOzRCQUNELElBQUksR0FBRyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFO2dDQUNqQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztnQ0FDNUIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDOzZCQUNkO2lDQUFNO2dDQUNMLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQzs2QkFDN0I7eUJBQ0Y7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7aUJBQ0o7YUFDRjtTQUNGO1FBRUQsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDM0MsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUNsRCxJQUFJLFlBQVksRUFBRTtnQkFDaEIsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFO29CQUMzQyxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUMzQyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3ZCLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDdEIsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDbEMsSUFBSSxRQUFRLEVBQUU7d0JBQ1osSUFBSSxJQUFJLEVBQUU7NEJBQ1IsUUFBUSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQzt5QkFDM0I7d0JBQ0QsSUFBSSxRQUFRLEVBQUU7NEJBQ1osTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDOzRCQUNsQixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDOzRCQUN2QixJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7eUJBQ3BDO3FCQUNGO29CQUNELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTt3QkFDM0MsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsRUFBRTs0QkFDeEMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0NBQ2hCLElBQUksSUFBSSxFQUFFO29DQUNSLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7aUNBQ25DO2dDQUNELE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztnQ0FDbEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztnQ0FDM0IsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDOzZCQUNwQzt5QkFDRjtvQkFDSCxDQUFDLENBQUMsQ0FBQztpQkFDSjthQUNGO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsdUJBQXVCO1FBQ3JCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVELDJCQUEyQixDQUFDLFlBQWE7UUFDdkMsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUU7WUFDckMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7WUFDNUMsSUFBSSxDQUFDLHdCQUF3QixHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDMUg7YUFBTTtZQUNMLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUN2RCxJQUFJLENBQUMsd0JBQXdCLEdBQUcsWUFBWSxDQUFDLEVBQUUsQ0FBQztTQUNqRDtRQUNELElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLDZCQUE2QjtZQUNsRSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUM3RyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxZQUFZLENBQUMsRUFBRSxDQUNsQyxDQUFDO1NBQ0g7YUFBTSxFQUFFLHlDQUF5QztZQUNoRCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDZixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7YUFDZjtpQkFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksWUFBWSxFQUFFO2dCQUM3QyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUNuRjtTQUNGO1FBQ0QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxLQUFhO1FBQy9CLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0Qiw4QkFBOEI7UUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2xELElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQ3ZCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUMxQixPQUFPO1NBQ1I7UUFDRCxNQUFNLGlCQUFpQixHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDcEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDdkIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQ3hCLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDO1lBQ2xDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLE9BQU8sWUFBWSxLQUFLLENBQUMsRUFBRTtnQkFDM0MsT0FBTyxHQUFHLEVBQUUsQ0FBQzthQUNkO1lBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFO2dCQUNsRixNQUFNLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDdEQsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRTtvQkFDL0IsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7aUJBQ3ZGO2FBQ0Y7WUFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDckMsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BJLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFO2dCQUMzRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7YUFDckI7UUFDSCxDQUFDLENBQUM7UUFFRixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ3BCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7WUFDbkQsSUFBSSxTQUFTLEdBQUcsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDO1lBQ25ELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFO2dCQUN4QixTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRTtvQkFDN0UsSUFBSSxZQUFZLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFO3dCQUNwQyxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUMzQyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ3ZCLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDdEIsT0FBTyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQywrQ0FBK0M7d0JBQ3pFLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQ2xDLElBQUksUUFBUSxFQUFFOzRCQUNaLElBQUksSUFBSSxFQUFFO2dDQUNSLFFBQVEsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7NkJBQzNCOzRCQUNELElBQUksUUFBUSxFQUFFO2dDQUNaLE9BQU8sUUFBUSxDQUFDOzZCQUNqQjt5QkFDRjtxQkFDRjtvQkFDRCxPQUFPLFdBQVcsQ0FBQztnQkFDckIsQ0FBQyxDQUFDLENBQUM7YUFDSjtZQUNELEtBQUssTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRTtnQkFDekMsU0FBUyxJQUFJLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLElBQUksa0JBQWtCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzthQUM1SDtZQUNELFNBQVMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ3BHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUM5RCxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM3QixDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDWCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO2dCQUN4QixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDO2dCQUM3RixJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUU7b0JBQzNELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztpQkFDckI7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO2FBQU07WUFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRTtnQkFDWixJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDO29CQUM5QixlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWU7b0JBQ3JDLFlBQVksRUFBRSxJQUFJO2lCQUNuQixDQUFDLENBQUM7YUFDSjtZQUNELElBQUksQ0FBQyxFQUFFLENBQUMsaUJBQWlCLENBQ3ZCLElBQUksQ0FBQyxVQUFVLEVBQ2YsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsd0JBQXdCLENBQzlELENBQUMsU0FBUyxDQUFDLENBQUMsT0FBbUIsRUFBRSxFQUFFO2dCQUNsQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM3QixDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDWCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztnQkFDdkIsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUM7Z0JBQzdGLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRTtvQkFDM0QsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2lCQUNyQjtZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLEVBQUU7UUFDWix1QkFBdUI7UUFDdkIsd0JBQXdCO1FBQ3hCLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQztRQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNsQix1REFBdUQ7WUFDdkQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsbUJBQW1CLENBQUMsQ0FBQztTQUNsRjtRQUNELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsTUFBTSxDQUFDLEVBQUU7UUFDUCxJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDNUIsSUFBSSxFQUFFLENBQUMsYUFBYSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxFQUFFO2dCQUM3RCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7YUFDeEI7aUJBQU07Z0JBQ0wsZUFBZSxHQUFHLElBQUksQ0FBQzthQUN4QjtTQUNGO1FBQ0QsSUFBSSxJQUFJLENBQUMsaUJBQWlCLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDOUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3hELFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtvQkFDM0IsUUFBUSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQ3REO1lBQ0gsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ1IsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7U0FDL0I7SUFDSCxDQUFDO0lBRUQsZUFBZSxDQUFDLEVBQUc7UUFDakIsSUFBSSxFQUFFLEVBQUU7WUFDTixFQUFFLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDcEIsRUFBRSxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ3RCO1FBQ0QsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTtZQUN2RyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO2dCQUN6QixFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNqQixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLO2dCQUN2QixJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJO2dCQUNyQixLQUFLLEVBQUUsSUFBSTthQUNaLENBQUMsQ0FBQztTQUNKO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNmLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsVUFBVTtRQUMvQixJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2YsT0FBTztTQUNSO1FBQ0QsRUFBRSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3BCLEVBQUUsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDYixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDdEQsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNmLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO2FBQ2pCO1lBQ0QsSUFBSSxhQUFhLENBQUM7WUFDbEIsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUM5QixJQUFJLFVBQVUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRTtvQkFDakQsYUFBYSxHQUFHLEtBQUssQ0FBQztvQkFDdEIsTUFBTTtpQkFDUDtxQkFBTSxJQUFJLFVBQVUsQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLDZCQUE2QjtvQkFDMUUsYUFBYSxHQUFHLEtBQUssQ0FBQztvQkFDdEIsTUFBTTtpQkFDUDthQUNGO1lBQ0QsSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDN0I7WUFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMvQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDdkIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDOUM7YUFBTTtZQUNMLElBQUksQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxZQUFZLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQztZQUM1QyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQy9CLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQztZQUNuQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDM0Y7UUFDRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIsNEJBQTRCO1FBQzVCLCtEQUErRDtRQUMvRCwwQ0FBMEM7UUFDMUMsUUFBUTtRQUNSLElBQUk7SUFDTixDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBQzVCLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3JELFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsUUFBUSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDcEQsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ1IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztTQUMvQjtRQUNELElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLFdBQVcsRUFBRTtZQUN2RCxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRTtnQkFDMUQsS0FBSyxJQUFJLGVBQWUsR0FBRyxDQUFDLEVBQUUsZUFBZSxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxFQUFFLGVBQWUsRUFBRSxFQUFFO29CQUNsSCxNQUFNLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDO29CQUN2RSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksRUFBRTt3QkFDOUQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLGVBQWUsQ0FBQzt3QkFDN0MsTUFBTTtxQkFDUDtpQkFDRjthQUNGO1NBQ0Y7UUFDRCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQU07UUFDcEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDN0IsSUFBSSxLQUFLLEVBQUU7WUFDVCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDZDtRQUNELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQztTQUMxRDtJQUNILENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQzVCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUN2QixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDMUIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDO1FBQ2xDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2YsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDNUIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNmLENBQUM7SUFFRCxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUk7UUFDYixFQUFFLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDcEIsRUFBRSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3JCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdDLElBQUksV0FBVyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ3RCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7Z0JBQ3RCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztnQkFDbEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO2FBQ25CO1lBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDaEM7SUFDSCxDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQU07UUFDakIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxDQUFDLGlDQUFpQztRQUNoRSxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2hGLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDcEUsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUN4RCxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUU7WUFDakMsSUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDaEYsSUFBSSxlQUFlLEVBQUU7Z0JBQ25CLEtBQUssR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQzthQUN2QztZQUNELElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRTtnQkFDakMsZUFBZSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO2dCQUM5RSxJQUFJLGVBQWUsRUFBRTtvQkFDbkIsS0FBSyxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO2lCQUN2QzthQUNGO1NBQ0Y7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUM5QixrQkFBa0IsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQzNELENBQUMsSUFBSSxDQUFDLGFBQWEsWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUNoSCxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FDaEYsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRTtZQUMxQixJQUFJLE1BQU0sRUFBRTtnQkFDVixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDO2dCQUNyQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDM0IsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDckgsSUFBSSxrQkFBa0IsRUFBRTtvQkFDdEIsa0JBQWtCLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7aUJBQ3pDO3FCQUFNO29CQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTt3QkFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO3FCQUM1QjtvQkFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQ3ZDO2dCQUNELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO2FBQzlHO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7YUFDdEY7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyx1QkFBdUI7UUFDN0IsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDM0QsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUFDLENBQUM7Z0JBQy9FLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO2dCQUMxQyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDbEQsSUFBSSxVQUFVLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFO29CQUNuRSxFQUFFLENBQUMsY0FBYyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7aUJBQ3JDO2FBQ0Y7UUFDSCxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBRU8sNkJBQTZCO1FBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUU7WUFDakMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLHVCQUF1QixDQUFDLENBQUM7U0FDckY7UUFDRCxJQUFJLElBQUksQ0FBQyx1QkFBdUIsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssUUFBUSxFQUFFO1lBQ3BGLE1BQU0sU0FBUyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUM7WUFDbEQsTUFBTSxZQUFZLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzNELElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLEVBQUU7Z0JBQ3RELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO2FBQ3BEO2lCQUFNLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLEVBQUU7Z0JBQ2hFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLEdBQUcsWUFBWSxDQUFDO2FBQ3ZEO1NBQ0Y7SUFDSCxDQUFDO0lBZU8sZUFBZSxDQUFDLE1BQWMsRUFBRSxLQUFjO1FBQ3BELE1BQU0sQ0FBQyxHQUFzQjtZQUMzQixXQUFXLEVBQUUsSUFBSSxDQUFDLGVBQWU7WUFDakMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVk7WUFDMUcsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSTtZQUNyQixNQUFNO1NBQ1AsQ0FBQztRQUNGLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDNUIsQ0FBQyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7U0FDeEI7UUFDRCxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxXQUFXLEVBQUU7WUFDbEMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7U0FDakI7UUFDRCxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFTyxxQkFBcUI7UUFDM0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3hDLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDeEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE9BQU8sQ0FBQztTQUNqQzthQUFNO1lBQ0wsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDeEc7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDO0lBQ3ZJLENBQUM7SUE2RE8saUJBQWlCO1FBQ3ZCLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNkLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUU7Z0JBQzNCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUM7YUFDN0M7aUJBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUU7Z0JBQ3hFLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztnQkFDekIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQzdCLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLEVBQ2xDO29CQUNFLE1BQU0sRUFBRSxtQkFBbUI7b0JBQzNCLGVBQWUsRUFBRSxJQUFJLENBQUMsZUFBZTtvQkFDckMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLO29CQUNmLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxDQUFDO2lCQUN2RSxFQUNELENBQUMsUUFBUSxFQUFFLEVBQUU7b0JBQ1gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUU7d0JBQ25CLElBQUksQ0FBQyxZQUFZLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQztxQkFDM0M7eUJBQU07d0JBQ0wsT0FBTyxDQUFDLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7cUJBQ2hIO2dCQUNILENBQUMsQ0FDRixDQUFDO2FBQ0g7U0FDRjthQUFNO1lBQ0wsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO1NBQzFCO0lBQ0gsQ0FBQztJQUVPLHFCQUFxQixDQUFDLE1BQU87UUFDbkMsSUFBSSxTQUFTLEdBQUcsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxTQUFTLENBQUM7UUFDeEQsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDM0MsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFO2dCQUM3QixTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUU7b0JBQ2xGLElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRTt3QkFDOUIsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUN4QixPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDbkIsT0FBTyxHQUFHLENBQUM7cUJBQ1o7b0JBQ0QsT0FBTyxFQUFFLENBQUM7Z0JBQ1osQ0FBQyxDQUFDLENBQUM7YUFDSjtZQUNELEtBQUssTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDbkMsU0FBUyxJQUFJLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLElBQUksa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzthQUN0SDtZQUNELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUM3RCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQ3RCLElBQUksTUFBTSxFQUFFO29CQUNWLElBQUksV0FBVyxDQUFDO29CQUNoQixXQUFXLEdBQUcsTUFBTSxDQUFDO29CQUNyQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7d0JBQ2pDLFdBQVcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO3FCQUNyRDtvQkFDRCxJQUFJLFdBQVcsWUFBWSxLQUFLLEtBQUssSUFBSSxFQUFFO3dCQUN6QyxXQUFXLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztxQkFDN0I7b0JBQ0QsTUFBTSxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7b0JBQzVCLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTt3QkFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsb0NBQW9DOzRCQUM3RCxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7Z0NBQ3BCLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRTtnQ0FDUixLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQ0FDckMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJOzZCQUNiLENBQUMsQ0FBQzt5QkFDSjtvQkFDSCxDQUFDLENBQUMsQ0FBQztvQkFDSCxJQUFJLGdCQUFnQixDQUFDLE1BQU0sRUFBRTt3QkFDM0IsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFOzRCQUNqQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7eUJBQ25EOzZCQUFNOzRCQUNMLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO3lCQUM5QjtxQkFDRjtvQkFDRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUM7aUJBQzFDO1lBQ0gsQ0FBQyxFQUFFLEdBQUcsRUFBRTtnQkFDTixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDeEIsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7K0dBNzBCVSxjQUFjO21HQUFkLGNBQWMsMkVDakIzQix5cFhBbUtBLGlzUkRwSmlCLENBQUMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDOzs0RkFFeEQsY0FBYztrQkFMMUIsU0FBUztvQ0FHTyxDQUFDLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGaWVsZEFic3RyYWN0IH0gZnJvbSAnLi4vZmllbGRBYnN0cmFjdCc7XG5pbXBvcnQgeyBDb250cm9sQ29udGFpbmVyLCBOZ0Zvcm0gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNZXRhUmVmZXJlbmNlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL21ldGFSZWZlcmVuY2UnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE1ldGFSZXNvdXJjZVNlcnZpY2UsIElNZXRhUmVzb3VyY2VDb25maWcgfSBmcm9tICcuLi9zZXJ2aWNlcy9tZXRhUmVzb3VyY2UnO1xuaW1wb3J0IHsgTWV0YVJlZkRpYWxvZyB9IGZyb20gJy4uL3JlZkRpYWxvZyc7XG5pbXBvcnQgeyBNZXRhTXNnU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL21ldGFNc2cnO1xuaW1wb3J0IHsgTWV0YUNvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbWV0YUNvbnRleHQnO1xuaW1wb3J0IHsgSU1ldGFUcmFja2VyRXZlbnQsIE1ldGFUcmFja2VyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL21ldGFUcmFja2VyJztcblxuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlVXJsOiAnLi92aWV3Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zdHlsZS5zY3NzJ10sXG4gIHZpZXdQcm92aWRlcnM6IFt7IHByb3ZpZGU6IENvbnRyb2xDb250YWluZXIsIHVzZUV4aXN0aW5nOiBOZ0Zvcm0gfV1cbn0pXG5leHBvcnQgY2xhc3MgRmllbGRSZWZlcmVuY2UgZXh0ZW5kcyBGaWVsZEFic3RyYWN0IGltcGxlbWVudHMgT25Jbml0IHtcbiAgaW5wdXQ6IGFueTtcbiAgZHJvcGRvd246IEhUTUxFbGVtZW50O1xuICBkcm9wZG93blNjcm9sbENvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG4gIHNlYXJjaGluZzogYm9vbGVhbjtcbiAgc2VhcmNoUmVzb3VyY2VUeXBlOiBhbnkgPSB7fTtcbiAgc2VhcmNoVGV4dDogc3RyaW5nO1xuICBzZWFyY2hSZXN1bHRzOiBBcnJheTxhbnk+O1xuICBzZWFyY2hFcnJvcjogYW55O1xuICBhY3RpdmVTdWdnZXN0aW9uSW5kZXg6IG51bWJlcjtcbiAgc2VhcmNoUmVzb3VyY2VUeXBlc1Njb3BlOiBzdHJpbmc7XG4gIHNlYXJjaFRleHRDaGFuZ2VkOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG4gIGlzQ3JlYXRhYmxlID0gZmFsc2U7XG4gIHZhbHVlOiBhbnk7XG4gIGlzUG9seW1vcnBoaWM6IGJvb2xlYW47XG4gIGlzU2VhcmNoYWJsZTogYm9vbGVhbjtcbiAgbXVsdGlwbGU6IGJvb2xlYW47XG4gIHZyOiBNZXRhUmVzb3VyY2VTZXJ2aWNlO1xuICBleHRlcm5hbExpbms6IHN0cmluZztcbiAgZHJvcGRvd25WaXNpYmxlID0gZmFsc2U7XG4gIHNlYXJjaFJlc291cmNlVHlwZU1ldGE6IGFueSA9IHtcbiAgICB0eXBlOiAnc2VsZWN0JyxcbiAgICBuYW1lOiAncmVzb3VyY2VUeXBlJyxcbiAgICBsYWJlbDogJ1R5cGUnLFxuICAgIG9wdGlvbnM6IFtdLCAvLyB7IGxhYmVsOiAnLS0gQWxsIHR5cGVzIC0tJyB9XSxcbiAgICBzdGFuZGFsb25lOiB0cnVlXG4gIH07XG4gIGZpbHRlcmVkU3VnZ2VzdGlvbnM6IEFycmF5PGFueT4gPSBbXTtcbiAgcGxhY2VIb2xkZXJMYWJlbDogc3RyaW5nO1xuICBhc3luY1N1Z2dlc3Rpb25zOiBBcnJheTxhbnk+O1xuICBzbWFydFN1Z2dlc3Rpb25zOiBBcnJheTxhbnk+ID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWZlcmVuY2VTZXJ2aWNlOiBNZXRhUmVmZXJlbmNlU2VydmljZSxcbiAgICBwcml2YXRlIG1ldGFSZXNvdXJjZTogTWV0YVJlc291cmNlU2VydmljZSxcbiAgICBwcml2YXRlIG1ldGFNc2dTZXJ2aWNlOiBNZXRhTXNnU2VydmljZSxcbiAgICBwcml2YXRlIG1ldGFDb250ZXh0OiBNZXRhQ29udGV4dFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtZXRhVHJhY2tlcjogTWV0YVRyYWNrZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZlxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgZ2V0IGRpc2FibGVkKCkge1xuICAgIGNvbnN0IHN1cGVyRGlzYWJsZWQgPSB0aGlzLmxvZ2ljYWxEaXNhYmxlZCB8fCB0aGlzLnZhbGlkYXRpb25zLmRpc2FibGVkIHx8IHRoaXMubWV0YS5kaXNhYmxlZCA9PT0gdHJ1ZVxuICAgICAgfHwgKHRoaXMubWV0YS51cGRhdGFibGUgPT09IGZhbHNlICYmIHRoaXMuaXNQZXJzaXN0ZWRQYXJlbnQpO1xuICAgIHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlTWV0YS5kaXNhYmxlZCA9IHN1cGVyRGlzYWJsZWQ7XG4gICAgcmV0dXJuIHN1cGVyRGlzYWJsZWQ7XG4gIH1cblxuICBnZXQgc2hvd1R5cGVzKCkge1xuICAgIHJldHVybiAodHlwZW9mICh0aGlzLm1ldGEuc2hvd1R5cGVzKSAhPT0gJ3VuZGVmaW5lZCcpID8gdGhpcy5tZXRhLnNob3dUeXBlcyA6IHRydWU7XG4gIH1cblxuICBnZXQgc3VnZ2VzdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc21hcnRTdWdnZXN0aW9ucy5jb25jYXQoXG4gICAgICAhdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGUucmVzb3VyY2VUeXBlID9cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICAgICAgKHRoaXMuYXN5bmNTdWdnZXN0aW9ucyB8fCB0aGlzLm1ldGEuc3VnZ2VzdGlvbnMgfHwgW10pIDogKHRoaXMuYXN5bmNTdWdnZXN0aW9ucyB8fCB0aGlzLm1ldGEuc3VnZ2VzdGlvbnMgfHwgW10pLmZpbHRlcigocykgPT4gcy50eXBlID09PSB0aGlzLnNlYXJjaFJlc291cmNlVHlwZS5yZXNvdXJjZVR5cGUpXG4gICAgKTtcbiAgfVxuXG4gIGdldCBoYXNBcHBlbmRCdXR0b24oKSB7XG4gICAgaWYgKCF0aGlzLm11bHRpcGxlICYmIHRoaXMubW9kZWwpIHtcbiAgICAgIGlmICh0aGlzLmlzUG9seW1vcnBoaWMpIHtcbiAgICAgICAgZm9yIChjb25zdCByZWYgb2YgdGhpcy5tZXRhUmVmZXJlbmNlKSB7XG4gICAgICAgICAgaWYgKChyZWYubmFtZSB8fCByZWYucmVzb3VyY2VUeXBlKSA9PT0gKHRoaXMubW9kZWwudHlwZSB8fCB0aGlzLm1vZGVsLnJlc291cmNlVHlwZSkpIHtcbiAgICAgICAgICAgIHJldHVybiByZWYudXBkYXRhYmxlIHx8IChyZWYuY3JlYXRhYmxlICYmIHJlZi51cGRhdGFibGUgIT09IGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldGFSZWZlcmVuY2UudXBkYXRhYmxlIHx8ICh0aGlzLm1ldGFSZWZlcmVuY2UuY3JlYXRhYmxlICYmIHRoaXMubWV0YVJlZmVyZW5jZS51cGRhdGFibGUgIT09IGZhbHNlKTsgLy8gVkdJUy02OTExXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLm1ldGFSZWZlcmVuY2UgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyB0aGlzLnNlYXJjaFJlc291cmNlVHlwZXNTY29wZSA9IHRoaXMubWV0YVJlZmVyZW5jZS5tYXAocnQgPT4gcnQubmFtZSkuam9pbignLCcpO1xuICAgICAgLy8gfSwgMCk7XG4gICAgICBmb3IgKGNvbnN0IHJ0IG9mIHRoaXMubWV0YVJlZmVyZW5jZSkge1xuICAgICAgICBpZiAocnQuaGlkZGVuICE9PSBmYWxzZSAmJiBydC5jcmVhdGFibGUpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5tZXRhUmVmZXJlbmNlLmNyZWF0YWJsZTtcbiAgICB9XG4gIH1cblxuICBnZXQgcmVzb3VyY2VTZXJ2aWNlKCkge1xuICAgIGlmICghdGhpcy5tZXRhUmVzb3VyY2VTZXJ2aWNlKSB7XG4gICAgICBjb25zdCBtZXRhUmVzb3VyY2VDb25maWc6IElNZXRhUmVzb3VyY2VDb25maWcgPSB7XG4gICAgICAgIGludGVncmF0aW9uQ29kZTogdGhpcy5pbnRlZ3JhdGlvbkNvZGUsXG4gICAgICAgIHJlc291cmNlVHlwZTogdGhpcy5yZXNvdXJjZVR5cGVcbiAgICAgIH07XG4gICAgICB0aGlzLm1ldGFSZXNvdXJjZVNlcnZpY2UgPSB0aGlzLm1ldGFSZXNvdXJjZS5uZXcobWV0YVJlc291cmNlQ29uZmlnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubWV0YVJlc291cmNlU2VydmljZTtcbiAgfVxuXG4gIGdldCBtZXRhUmVmZXJlbmNlKCkge1xuICAgIHJldHVybiB0aGlzLm1ldGEucmVmZXJlbmNlIHx8IHt9O1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5tdWx0aXBsZSA9ICh0aGlzLm1ldGEudHlwZSA9PT0gJ211bHRpcmVmZXJlbmNlJykgfHwgdGhpcy5tZXRhLm11bHRpcGxlO1xuICAgIHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlTWV0YS5sYWJlbCA9IHRoaXMubWV0YS5sYWJlbDtcbiAgICBpZiAoIXRoaXMubWV0YS52YWx1ZVR5cGUpIHtcbiAgICAgIC8vIHRoaXMubWV0YS52YWx1ZVR5cGUgPSAnb2JqZWN0JztcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLm1ldGEsICd2YWx1ZVR5cGUnLCB7XG4gICAgICAgIHZhbHVlOiAnb2JqZWN0J1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLm1ldGFSZWZlcmVuY2UgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgdGhpcy5pc1BvbHltb3JwaGljID0gdHJ1ZTtcbiAgICAgIHRoaXMuaXNTZWFyY2hhYmxlID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlc1Njb3BlID0gdGhpcy5tZXRhUmVmZXJlbmNlLmZpbHRlcihydCA9PiBydC5oaWRkZW4gIT09IHRydWUpLm1hcChydCA9PiBydC5uYW1lKS5qb2luKCcsJyk7XG4gICAgICBmb3IgKGNvbnN0IHJ0IG9mIHRoaXMubWV0YVJlZmVyZW5jZSkge1xuICAgICAgICBpZiAocnQuY3JlYXRhYmxlKSB7XG4gICAgICAgICAgdGhpcy5pc0NyZWF0YWJsZSA9IHRydWU7XG4gICAgICAgICAgaWYgKHR5cGVvZiAocnQuc2VhcmNoYWJsZSkgIT09ICd1bmRlZmluZWQnICYmICFydC5zZWFyY2hhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmlzU2VhcmNoYWJsZSA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5tZXRhUmVmZXJlbmNlLmZvckVhY2goKHIpID0+IHtcbiAgICAgICAgaWYgKCFyLmhpZGRlbikge1xuICAgICAgICAgIHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlTWV0YS5vcHRpb25zLnB1c2goeyBpZDogci5uYW1lLCBsYWJlbDogci5sYWJlbCB8fCByLm5hbWUgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzU2VhcmNoYWJsZSA9IHR5cGVvZiAodGhpcy5tZXRhUmVmZXJlbmNlLnNlYXJjaGFibGUpID09PSAndW5kZWZpbmVkJyB8fCB0aGlzLm1ldGFSZWZlcmVuY2Uuc2VhcmNoYWJsZTtcbiAgICAgIHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlID0gdGhpcy5tZXRhUmVmZXJlbmNlO1xuICAgICAgdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGVzU2NvcGUgPSB0aGlzLm1ldGFSZWZlcmVuY2UubmFtZSB8fCB0aGlzLm1ldGFSZWZlcmVuY2UucmVzb3VyY2VUeXBlO1xuICAgICAgdGhpcy5pc0NyZWF0YWJsZSA9IHRoaXMubWV0YVJlZmVyZW5jZS5jcmVhdGFibGU7XG4gICAgfVxuICAgIHRoaXMuYnVpbGRQbGFjZWhvbGRlckxhYmVsKCk7XG4gICAgdGhpcy5zZWFyY2hUZXh0Q2hhbmdlZC5waXBlKGRlYm91bmNlVGltZSgzMDApLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKS5zdWJzY3JpYmUoKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgIHRoaXMuc2VhcmNoVGV4dCA9IHZhbHVlO1xuICAgICAgdGhpcy5zZWFyY2goKTtcbiAgICB9KTtcbiAgICBjb25zdCBvcmlnVmFsdWUgPSB0aGlzLnBhcmVudFt0aGlzLm1ldGEubmFtZV07XG5cbiAgICAvLyB0aGlzLnN1Z2dlc3Rpb25zID0gdGhpcy5tZXRhLnN1Z2dlc3Rpb25zOyAvLyBUT0RPIGZpbHRlciBieSBkZWZhdWx0IHR5cGVcbiAgICAvLyBjb25zb2xlLmxvZygndGhpcy5zdWdnZXN0aW9ucycsIHRoaXMuc3VnZ2VzdGlvbnMpO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMucGFyZW50LCB0aGlzLm1ldGEubmFtZSwge1xuICAgICAgc2V0OiAodmFsdWUpID0+IHtcbiAgICAgICAgaWYgKHZhbHVlID09PSAnJykge1xuICAgICAgICAgIHZhbHVlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHYgb2YgdmFsdWUpIHtcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLm1vZGVsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbCA9IFtdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgKHYpID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwucHVzaCh7XG4gICAgICAgICAgICAgICAgICBpZDogdixcbiAgICAgICAgICAgICAgICAgIGxhYmVsOiB2LFxuICAgICAgICAgICAgICAgICAgdHlwZTogdGhpcy5tZXRhUmVmZXJlbmNlLm5hbWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZSA9IG51bGw7IC8vIHByb3RlY3Qgd2hlbiB2YWx1ZSBmcm9tIHNlcnZlciBpcyBub3QgYXJyYXlcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiAodmFsdWUpID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdmFsdWUgPSB7XG4gICAgICAgICAgICAgIGlkOiB2YWx1ZSxcbiAgICAgICAgICAgICAgbGFiZWw6IHZhbHVlLCAvLyBjb3VsZCBiZSBmb3VuZCB3aXRoIGV4dHJhIGNhbGxcbiAgICAgICAgICAgICAgdHlwZTogdGhpcy5tZXRhUmVmZXJlbmNlLm5hbWVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuc2VhcmNoVGV4dCA9IHZhbHVlID9cbiAgICAgICAgICAgICgoIXZhbHVlLmxhYmVsIHx8IHZhbHVlLmxhYmVsID09PSAnICcpID8gYE4vQSAoJHt2YWx1ZS50eXBlfSMke3ZhbHVlLmlkfSlgIDogdmFsdWUubGFiZWwgfHwgdmFsdWUpIDpcbiAgICAgICAgICAgICcnO1xuICAgICAgICAgIC8vIGlmICh0aGlzLmlzUG9seW1vcnBoaWMgJiYgdGhpcy5tb2RlbCkgeyAvL1RPRE8gc2hvdyBvciBub3Q/XG4gICAgICAgICAgLy8gICB0aGlzLnNlYXJjaFJlc291cmNlVHlwZSA9IHRoaXMubWV0YVJlZmVyZW5jZS5maW5kKChydCk9PiB7XG4gICAgICAgICAgLy8gICAgIHJldHVybiBydC5uYW1lID09PSB0aGlzLm1vZGVsLnR5cGU7XG4gICAgICAgICAgLy8gICB9KTtcbiAgICAgICAgICAvLyB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tb2RlbCA9IHZhbHVlO1xuICAgICAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5tb2RlbFRvVmFsdWUodmFsdWUsIHRoaXMubWV0YS52YWx1ZVR5cGUgfHwgJ29iamVjdCcpO1xuICAgICAgICAgIHRoaXMuYnVpbGRFeHRlcm5hbExpbmsoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gIXRoaXMubW9kZWwgPyB0aGlzLm1vZGVsIDogdGhpcy5tb2RlbC5tYXAoKG0pID0+IHRoaXMubW9kZWxUb1ZhbHVlKG0sIHRoaXMubWV0YS52YWx1ZVR5cGUgfHwgJ29iamVjdCcpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1ldGEuJG9wdGlvbmFsID0gdGhpcy5pc09wdGlvbmFsO1xuICAgICAgfSxcbiAgICAgIGdldDogKCkgPT4gdGhpcy52YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRoaXMuc2VuZFRvU2VydmVyLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgaWYgKG9yaWdWYWx1ZSkge1xuICAgICAgdGhpcy5wYXJlbnRbdGhpcy5tZXRhLm5hbWVdID0gb3JpZ1ZhbHVlO1xuICAgIH1cbiAgICBpZiAoIXRoaXMubW9kZWwgJiYgdGhpcy5kZWZhdWx0KSB7XG4gICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICB0aGlzLnBhcmVudFt0aGlzLm1ldGEubmFtZV0gPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsdC5sZW5ndGgpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGR2IG9mIHRoaXMuZGVmYXVsdCkge1xuICAgICAgICAgICAgaWYgKChkdi5pZCB8fCBkdi52YWx1ZSkgJiYgZHYudHlwZSkge1xuICAgICAgICAgICAgICBjb25zdCBpdGVtOiBhbnkgPSB7XG4gICAgICAgICAgICAgICAgaWQ6IGR2LmlkIHx8IGR2LnZhbHVlLFxuICAgICAgICAgICAgICAgIGxhYmVsOiBkdi5sYWJlbCB8fCBkdi5pZCB8fCBkdi52YWx1ZSxcbiAgICAgICAgICAgICAgICB0eXBlOiBkdi50eXBlXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIGlmIChkdi5leHRlcm5hbExpbmspIHtcbiAgICAgICAgICAgICAgICBpdGVtLmV4dGVybmFsTGluayA9IGR2LmV4dGVybmFsTGluaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aGlzLnBhcmVudFt0aGlzLm1ldGEubmFtZV0ucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLnBhcmVudFt0aGlzLm1ldGEubmFtZV0ubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5kZWZhdWx0LmlkICYmIHRoaXMuZGVmYXVsdC5sYWJlbCAmJiB0aGlzLmRlZmF1bHQudHlwZSkge1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLm1vZGVsKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGl0ZW06IGFueSA9IHtcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5kZWZhdWx0LmlkIHx8IHRoaXMuZGVmYXVsdC52YWx1ZSxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5kZWZhdWx0LmxhYmVsIHx8IHRoaXMuZGVmYXVsdC5pZCB8fCB0aGlzLmRlZmF1bHQudmFsdWUsXG4gICAgICAgICAgICAgICAgdHlwZTogdGhpcy5kZWZhdWx0LnR5cGUsXG4gICAgICAgICAgICAgICAgc21hcnQ6IHRydWVcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuZGVmYXVsdC5leHRlcm5hbExpbmspIHtcbiAgICAgICAgICAgICAgICBpdGVtLmV4dGVybmFsTGluayA9IHRoaXMuZGVmYXVsdC5leHRlcm5hbExpbms7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5wYXJlbnRbdGhpcy5tZXRhLm5hbWVdID0gaXRlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJyEhIWRlZmF1bHQgdmFsdWUgaXMgbm90IHZhbGlkIGZvcm1hdCcsIHRoaXMubWV0YSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mICh0aGlzLm1ldGEuZGlzYWJsZWQpICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKHR5cGVvZiAodGhpcy5tZXRhLmRpc2FibGVkKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgZm9yIChjb25zdCBwIG9mIE9iamVjdC5rZXlzKHRoaXMubWV0YS5kaXNhYmxlZCkpIHtcbiAgICAgICAgICBjb25zdCBwcm9wcyA9IHAuc3BsaXQoJy4nKTtcbiAgICAgICAgICBpZiAodHlwZW9mICh0aGlzLnBhcmVudFtwcm9wc1swXV0pICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgbGV0IHZhbCA9IHRoaXMucGFyZW50O1xuICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIHByb3BzKSB7XG4gICAgICAgICAgICAgIHZhbCA9IHZhbFtwcm9wXTtcbiAgICAgICAgICAgICAgaWYgKCF2YWwpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZhbCA9PT0gdGhpcy5tZXRhLmRpc2FibGVkW3BdKSB7XG4gICAgICAgICAgICAgIHRoaXMubG9naWNhbERpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnBhcmVudENoYW5nZVN1YmplY3Quc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmhhc093blByb3BlcnR5KHByb3BzWzBdKSkge1xuICAgICAgICAgICAgICBsZXQgdmFsID0gdGhpcy5wYXJlbnQ7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBwcm9wcykge1xuICAgICAgICAgICAgICAgIHZhbCA9IHZhbFtwcm9wXTtcbiAgICAgICAgICAgICAgICBpZiAoIXZhbCkge1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICh2YWwgPT09IHRoaXMubWV0YS5kaXNhYmxlZFtwXSkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9naWNhbERpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMubG9naWNhbERpc2FibGVkO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5tZXRhLmF1dG8gJiYgdGhpcy5tZXRhLmF1dG8uc2VhcmNoKSB7XG4gICAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSB0aGlzLm1ldGEuYXV0by5zZWFyY2gucGFyYW1zO1xuICAgICAgaWYgKHNlYXJjaFBhcmFtcykge1xuICAgICAgICBmb3IgKGNvbnN0IHBhciBvZiBPYmplY3Qua2V5cyhzZWFyY2hQYXJhbXMpKSB7XG4gICAgICAgICAgY29uc3QgcHJvcHMgPSBzZWFyY2hQYXJhbXNbcGFyXS5zcGxpdCgnLicpO1xuICAgICAgICAgIGNvbnN0IGZpZWxkID0gcHJvcHNbMF07XG4gICAgICAgICAgY29uc3QgcHJvcCA9IHByb3BzWzFdO1xuICAgICAgICAgIGxldCBwYXJWYWx1ZSA9IHRoaXMucGFyZW50W2ZpZWxkXTtcbiAgICAgICAgICBpZiAocGFyVmFsdWUpIHtcbiAgICAgICAgICAgIGlmIChwcm9wKSB7XG4gICAgICAgICAgICAgIHBhclZhbHVlID0gcGFyVmFsdWVbcHJvcF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocGFyVmFsdWUpIHtcbiAgICAgICAgICAgICAgY29uc3QgcGFyYW1zID0ge307XG4gICAgICAgICAgICAgIHBhcmFtc1twYXJdID0gcGFyVmFsdWU7XG4gICAgICAgICAgICAgIHRoaXMuc2VhcmNoQXV0b1N1Z2dlc3Rpb25zKHBhcmFtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMucGFyZW50Q2hhbmdlU3ViamVjdC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUuaGFzT3duUHJvcGVydHkoZmllbGQpKSB7XG4gICAgICAgICAgICAgIGlmICh2YWx1ZVtmaWVsZF0pIHtcbiAgICAgICAgICAgICAgICBpZiAocHJvcCkge1xuICAgICAgICAgICAgICAgICAgdmFsdWVbZmllbGRdID0gdmFsdWVbZmllbGRdW3Byb3BdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBwYXJhbXMgPSB7fTtcbiAgICAgICAgICAgICAgICBwYXJhbXNbcGFyXSA9IHZhbHVlW2ZpZWxkXTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaEF1dG9TdWdnZXN0aW9ucyhwYXJhbXMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjbGVhclNlYXJjaFJlc291cmNlVHlwZSgpIHtcbiAgICB0aGlzLnNlYXJjaFJlc291cmNlVHlwZSA9IHt9O1xuICAgIHRoaXMub25TZWFyY2hSZXNvdXJjZVR5cGVDaGFuZ2VkKCk7XG4gIH1cblxuICBvblNlYXJjaFJlc291cmNlVHlwZUNoYW5nZWQocmVzb3VyY2VUeXBlPykge1xuICAgIGlmICghcmVzb3VyY2VUeXBlIHx8ICFyZXNvdXJjZVR5cGUuaWQpIHtcbiAgICAgIHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlLnJlc291cmNlVHlwZSA9IG51bGw7XG4gICAgICB0aGlzLnNlYXJjaFJlc291cmNlVHlwZXNTY29wZSA9ICh0aGlzLm1ldGFSZWZlcmVuY2UgfHwgW10pLmZpbHRlcihydCA9PiBydC5oaWRkZW4gIT09IHRydWUpLm1hcChydCA9PiBydC5uYW1lKS5qb2luKCcsJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlLnJlc291cmNlVHlwZSA9IHJlc291cmNlVHlwZS5pZDtcbiAgICAgIHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlc1Njb3BlID0gcmVzb3VyY2VUeXBlLmlkO1xuICAgIH1cbiAgICB0aGlzLmJ1aWxkUGxhY2Vob2xkZXJMYWJlbCgpO1xuICAgIHRoaXMuZm9jdXMoKTtcbiAgICBpZiAoIXRoaXMubW9kZWwgJiYgIXRoaXMuc2VhcmNoVGV4dCkgeyAvLyBmaWx0ZXIgc3VnZ2VzdGlvbnMgYnkgdHlwZVxuICAgICAgdGhpcy5maWx0ZXJlZFN1Z2dlc3Rpb25zID0gIXJlc291cmNlVHlwZSA/ICh0aGlzLm1ldGEuc3VnZ2VzdGlvbnMgfHwgW10pIDogKHRoaXMubWV0YS5zdWdnZXN0aW9ucyB8fCBbXSkuZmlsdGVyKFxuICAgICAgICAocykgPT4gcy50eXBlID09PSByZXNvdXJjZVR5cGUuaWRcbiAgICAgICk7XG4gICAgfSBlbHNlIHsgLy8gcmVndWxhciBzZWFyY2ggKHJldHVybiBzY29wZWQgcmVzdWx0cylcbiAgICAgIGlmICghdGhpcy5tb2RlbCkge1xuICAgICAgICB0aGlzLnNlYXJjaCgpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnNlYXJjaFJlc3VsdHMgJiYgcmVzb3VyY2VUeXBlKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoUmVzdWx0cyA9IHRoaXMuc2VhcmNoUmVzdWx0cy5maWx0ZXIoKHMpID0+IHMudHlwZSA9PT0gcmVzb3VyY2VUeXBlLmlkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZGVsZXRlIHRoaXMuc2VhcmNoRXJyb3I7XG4gIH1cblxuICBvblNlYXJjaFRleHRDaGFuZ2VkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNlYXJjaFRleHRDaGFuZ2VkLm5leHQodmFsdWUpO1xuICB9XG5cbiAgc2VhcmNoKCkge1xuICAgIHRoaXMuc2VhcmNoaW5nID0gdHJ1ZTtcbiAgICAvLyB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleDtcbiAgICBpZiAoIXRoaXMuc2VhcmNoVGV4dCB8fCB0aGlzLnNlYXJjaFRleHQubGVuZ3RoIDwgMikge1xuICAgICAgdGhpcy5zZWFyY2hpbmcgPSBmYWxzZTtcbiAgICAgIGRlbGV0ZSB0aGlzLnNlYXJjaFJlc3VsdHM7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNob3dTZWFyY2hSZXN1bHRzID0gKHJlc3VsdHMpID0+IHtcbiAgICAgIHRoaXMuc2VhcmNoaW5nID0gZmFsc2U7XG4gICAgICBkZWxldGUgdGhpcy5zZWFyY2hFcnJvcjtcbiAgICAgIGRlbGV0ZSB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleDtcbiAgICAgIGlmICghcmVzdWx0cyB8fCAhKHJlc3VsdHMgaW5zdGFuY2VvZiBBcnJheSkpIHtcbiAgICAgICAgcmVzdWx0cyA9IFtdO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMubWV0YS5hY2NlcHROZXcgJiYgdGhpcy5tZXRhLmFjY2VwdE5ldy50eXBlICYmIHRoaXMubWV0YS5hY2NlcHROZXcucGF0dGVybikge1xuICAgICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAodGhpcy5tZXRhLmFjY2VwdE5ldy5wYXR0ZXJuKTtcbiAgICAgICAgaWYgKHJlZ2V4LnRlc3QodGhpcy5zZWFyY2hUZXh0KSkge1xuICAgICAgICAgIHJlc3VsdHMudW5zaGlmdCh7IGlkOiBudWxsLCBsYWJlbDogdGhpcy5zZWFyY2hUZXh0LCB0eXBlOiB0aGlzLm1ldGEuYWNjZXB0TmV3LnR5cGUgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuc2VhcmNoUmVzdWx0cyA9IHJlc3VsdHMubWFwKChyKSA9PiB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgYXJyb3ctYm9keS1zdHlsZVxuICAgICAgICByZXR1cm4geyBpZDogci5pZCwgbGFiZWw6IHIubGFiZWwsIHR5cGU6IHIudHlwZSB8fCByLnJlc291cmNlVHlwZSB8fCB0aGlzLnNlYXJjaFJlc291cmNlVHlwZS5uYW1lLCBleHRlcm5hbExpbms6IHIuZXh0ZXJuYWxMaW5rIH07XG4gICAgICB9KTtcbiAgICAgIGlmICghL1ZsdC1kcm9wZG93bi0tZXhwYW5kZWQvLnRlc3QodGhpcy5kcm9wZG93bi5jbGFzc05hbWUpKSB7XG4gICAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmICh0aGlzLm1ldGEuc2VhcmNoKSB7XG4gICAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSB0aGlzLm1ldGEuc2VhcmNoLnBhcmFtcyB8fCB7fTtcbiAgICAgIGxldCBzZWFyY2hVcmwgPSBgL2ZpZWxkcy8ke3RoaXMubWV0YS5uYW1lfS9zZWFyY2hgO1xuICAgICAgaWYgKHRoaXMubWV0YS5zZWFyY2gudXJsKSB7XG4gICAgICAgIHNlYXJjaFVybCA9IHRoaXMubWV0YS5zZWFyY2gudXJsLnJlcGxhY2UoL1xcJHtcXHMqKFtcXHcuXSspXFxzKn0vZywgKG1hdGNoLCBrZXkpID0+IHtcbiAgICAgICAgICBpZiAoc2VhcmNoUGFyYW1zLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BzID0gc2VhcmNoUGFyYW1zW2tleV0uc3BsaXQoJy4nKTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gcHJvcHNbMF07XG4gICAgICAgICAgICBjb25zdCBwcm9wID0gcHJvcHNbMV07XG4gICAgICAgICAgICBkZWxldGUgc2VhcmNoUGFyYW1zW2tleV07IC8vIGlmIGl0IGlzIFVSTCBwYXJhbSwgcmVtb3ZlIGl0IGFzIHF1ZXJ5IHBhcmFtXG4gICAgICAgICAgICBsZXQgcGFyVmFsdWUgPSB0aGlzLnBhcmVudFtmaWVsZF07XG4gICAgICAgICAgICBpZiAocGFyVmFsdWUpIHtcbiAgICAgICAgICAgICAgaWYgKHByb3ApIHtcbiAgICAgICAgICAgICAgICBwYXJWYWx1ZSA9IHBhclZhbHVlW3Byb3BdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChwYXJWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJWYWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gJ3VuZGVmaW5lZCc7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBwIG9mIE9iamVjdC5rZXlzKHNlYXJjaFBhcmFtcykpIHtcbiAgICAgICAgc2VhcmNoVXJsICs9IGAke3NlYXJjaFVybC5pbmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnfSR7ZW5jb2RlVVJJQ29tcG9uZW50KHApfT0ke2VuY29kZVVSSUNvbXBvbmVudChzZWFyY2hQYXJhbXNbcF0pfWA7XG4gICAgICB9XG4gICAgICBzZWFyY2hVcmwgKz0gYCR7c2VhcmNoVXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJid9cT0ke2VuY29kZVVSSUNvbXBvbmVudCh0aGlzLnNlYXJjaFRleHQpfWA7XG4gICAgICB0aGlzLnNlYXJjaGluZyA9IHRydWU7XG4gICAgICB0aGlzLnJlc291cmNlU2VydmljZS5nZXRCeVBhdGgoc2VhcmNoVXJsKS5zdWJzY3JpYmUoKHJlc3VsdHMpID0+IHtcbiAgICAgICAgc2hvd1NlYXJjaFJlc3VsdHMocmVzdWx0cyk7XG4gICAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgICAgZGVsZXRlIHRoaXMuc2VhcmNoaW5nO1xuICAgICAgICB0aGlzLnNlYXJjaFJlc3VsdHMgPSBbXTtcbiAgICAgICAgdGhpcy5zZWFyY2hFcnJvciA9IGVycm9yLmVycm9yID8gZXJyb3IuZXJyb3IubWVzc2FnZSB8fCBlcnJvci5lcnJvciA6IGVycm9yLm1lc3NhZ2UgfHwgZXJyb3I7XG4gICAgICAgIGlmICghL1ZsdC1kcm9wZG93bi0tZXhwYW5kZWQvLnRlc3QodGhpcy5kcm9wZG93bi5jbGFzc05hbWUpKSB7XG4gICAgICAgICAgdGhpcy5zaG93RHJvcGRvd24oKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghdGhpcy52cikge1xuICAgICAgICB0aGlzLnZyID0gdGhpcy5tZXRhUmVzb3VyY2UubmV3KHtcbiAgICAgICAgICBpbnRlZ3JhdGlvbkNvZGU6IHRoaXMuaW50ZWdyYXRpb25Db2RlLFxuICAgICAgICAgIHJlc291cmNlVHlwZTogbnVsbFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMudnIuc2VhcmNoSW50ZWdyYXRpb24oXG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dCxcbiAgICAgICAgdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGUubmFtZSB8fCB0aGlzLnNlYXJjaFJlc291cmNlVHlwZXNTY29wZVxuICAgICAgKS5zdWJzY3JpYmUoKHJlc3VsdHM6IEFycmF5PGFueT4pID0+IHtcbiAgICAgICAgc2hvd1NlYXJjaFJlc3VsdHMocmVzdWx0cyk7XG4gICAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5zZWFyY2hpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zZWFyY2hSZXN1bHRzID0gW107XG4gICAgICAgIHRoaXMuc2VhcmNoRXJyb3IgPSBlcnJvci5lcnJvciA/IGVycm9yLmVycm9yLm1lc3NhZ2UgfHwgZXJyb3IuZXJyb3IgOiBlcnJvci5tZXNzYWdlIHx8IGVycm9yO1xuICAgICAgICBpZiAoIS9WbHQtZHJvcGRvd24tLWV4cGFuZGVkLy50ZXN0KHRoaXMuZHJvcGRvd24uY2xhc3NOYW1lKSkge1xuICAgICAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uQWN0aXZhdGVkKGV2KSB7XG4gICAgLy8gZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAvLyBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmlucHV0ID0gZXYuc3JjRWxlbWVudDtcbiAgICBpZiAoIXRoaXMuZHJvcGRvd24pIHtcbiAgICAgIC8vIHRoaXMuZHJvcGRvd24gPSBldi5zcmNFbGVtZW50LnBhcmVudE5vZGUucGFyZW50Tm9kZTtcbiAgICAgIHRoaXMuZHJvcGRvd24gPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZHJvcGRvd24td3JhcHBlcicpO1xuICAgIH1cbiAgICB0aGlzLnNob3dEcm9wZG93bigpO1xuICB9XG5cbiAgb25CbHVyKGV2KSB7XG4gICAgbGV0IGludGVybmFsQ29udHJvbCA9IGZhbHNlO1xuICAgIGlmIChldi5yZWxhdGVkVGFyZ2V0KSB7XG4gICAgICBpZiAoIXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2LnJlbGF0ZWRUYXJnZXQpKSB7XG4gICAgICAgIHRoaXMuZGlzbWlzc0Ryb3Bkb3duKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbnRlcm5hbENvbnRyb2wgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5rZXlMaXN0ZW5lckFjdGl2ZSAmJiAhaW50ZXJuYWxDb250cm9sKSB7XG4gICAgICB0aGlzLmlucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmtleWRvd24pO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5rZXlMaXN0ZW5lckFjdGl2ZSkge1xuICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5jbGlja291dCk7XG4gICAgICAgIH1cbiAgICAgIH0sIDQwMCk7XG4gICAgICBkZWxldGUgdGhpcy5rZXlMaXN0ZW5lckFjdGl2ZTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVTZWxlY3Rpb24oZXY/KSB7XG4gICAgaWYgKGV2KSB7XG4gICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLm1vZGVsICYmICF0aGlzLnN1Z2dlc3Rpb25zLmZpbmQoKHMpID0+IChzLmlkID09PSB0aGlzLm1vZGVsLmlkICYmIHMudHlwZSA9PT0gdGhpcy5tb2RlbC50eXBlKSkpIHtcbiAgICAgIHRoaXMuc21hcnRTdWdnZXN0aW9ucy5wdXNoKHtcbiAgICAgICAgaWQ6IHRoaXMubW9kZWwuaWQsXG4gICAgICAgIGxhYmVsOiB0aGlzLm1vZGVsLmxhYmVsLFxuICAgICAgICB0eXBlOiB0aGlzLm1vZGVsLnR5cGUsXG4gICAgICAgIHNtYXJ0OiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5tZXRhVHJhY2tlci5lbWl0KHRoaXMuYnVpbGRUcmFja0V2ZW50KCdSRU1PVkUnKSk7XG4gICAgdGhpcy5jbGVhcigpO1xuICB9XG5cbiAgb25TdWdnZXN0aW9uU2VsZWN0KGV2LCBzdWdnZXN0aW9uKSB7XG4gICAgaWYgKCFzdWdnZXN0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5mb2N1cygpO1xuICAgIHRoaXMubWV0YVRyYWNrZXIuZW1pdCh0aGlzLmJ1aWxkVHJhY2tFdmVudCgnU0VMRUNUJykpO1xuICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICBpZiAoIXRoaXMubW9kZWwpIHtcbiAgICAgICAgdGhpcy5tb2RlbCA9IFtdO1xuICAgICAgfVxuICAgICAgbGV0IGV4aXN0aW5nRW50cnk7XG4gICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMubW9kZWwpIHtcbiAgICAgICAgaWYgKHN1Z2dlc3Rpb24uaWQgJiYgKGVudHJ5LmlkID09PSBzdWdnZXN0aW9uLmlkKSkge1xuICAgICAgICAgIGV4aXN0aW5nRW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIGlmIChzdWdnZXN0aW9uLmxhYmVsID09PSBlbnRyeS5sYWJlbCkgeyAvLyBjcmVhdGUgbmV3IChnb29nbGUgZW1haWxzKVxuICAgICAgICAgIGV4aXN0aW5nRW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFleGlzdGluZ0VudHJ5KSB7XG4gICAgICAgIHRoaXMubW9kZWwucHVzaChzdWdnZXN0aW9uKTtcbiAgICAgIH1cbiAgICAgIHRoaXMub25Nb2RlbENoYW5nZSh0aGlzLm1vZGVsKTtcbiAgICAgIGRlbGV0ZSB0aGlzLnNlYXJjaFRleHQ7XG4gICAgICB0aGlzLnNlYXJjaFRleHRDaGFuZ2VkLm5leHQodGhpcy5zZWFyY2hUZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tb2RlbCA9IHN1Z2dlc3Rpb247XG4gICAgICB0aGlzLmV4dGVybmFsTGluayA9IHN1Z2dlc3Rpb24uZXh0ZXJuYWxMaW5rO1xuICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlKHN1Z2dlc3Rpb24pO1xuICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gc3VnZ2VzdGlvbi5sYWJlbDtcbiAgICAgIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4ID0gKHRoaXMuc2VhcmNoUmVzdWx0cyB8fCB0aGlzLnN1Z2dlc3Rpb25zKS5pbmRleE9mKHN1Z2dlc3Rpb24pO1xuICAgIH1cbiAgICB0aGlzLmRpc21pc3NEcm9wZG93bigpO1xuICAgIC8vIGlmICh0aGlzLmlzUG9seW1vcnBoaWMpIHtcbiAgICAvLyAgIHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlID0gdGhpcy5tZXRhUmVmZXJlbmNlLmZpbmQoKHJ0KT0+IHtcbiAgICAvLyAgICAgcmV0dXJuIHJ0Lm5hbWUgPT09IHN1Z2dlc3Rpb24udHlwZTtcbiAgICAvLyAgIH0pO1xuICAgIC8vIH1cbiAgfVxuXG4gIHNob3dEcm9wZG93bigpIHtcbiAgICB0aGlzLmRyb3Bkb3duVmlzaWJsZSA9IHRydWU7XG4gICAgdGhpcy5kcm9wZG93bi5jbGFzc0xpc3QuYWRkKCdWbHQtZHJvcGRvd24tLWV4cGFuZGVkJyk7XG4gICAgaWYgKCF0aGlzLmtleUxpc3RlbmVyQWN0aXZlKSB7XG4gICAgICB0aGlzLmlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmtleWRvd24pO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5jbGlja291dCk7XG4gICAgICB9LCAyMDApO1xuICAgICAgdGhpcy5rZXlMaXN0ZW5lckFjdGl2ZSA9IHRydWU7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgKHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4KSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmICh0aGlzLm1vZGVsICYmICh0aGlzLnNlYXJjaFJlc3VsdHMgfHwgdGhpcy5zdWdnZXN0aW9ucykpIHtcbiAgICAgICAgZm9yIChsZXQgc3VnZ2VzdGlvbkluZGV4ID0gMDsgc3VnZ2VzdGlvbkluZGV4IDwgKHRoaXMuc2VhcmNoUmVzdWx0cyB8fCB0aGlzLnN1Z2dlc3Rpb25zKS5sZW5ndGg7IHN1Z2dlc3Rpb25JbmRleCsrKSB7XG4gICAgICAgICAgY29uc3QgaXRlbSA9ICh0aGlzLnNlYXJjaFJlc3VsdHMgfHwgdGhpcy5zdWdnZXN0aW9ucylbc3VnZ2VzdGlvbkluZGV4XTtcbiAgICAgICAgICBpZiAodGhpcy5tb2RlbC5pZCA9PT0gaXRlbS5pZCAmJiB0aGlzLm1vZGVsLnR5cGUgPT09IGl0ZW0udHlwZSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXggPSBzdWdnZXN0aW9uSW5kZXg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5lbnN1cmVEcm9wZG93bklzVmlzaWJsZSgpO1xuICB9XG5cbiAgZGlzbWlzc0Ryb3Bkb3duKGV2ZW50Pykge1xuICAgIHRoaXMuZHJvcGRvd25WaXNpYmxlID0gZmFsc2U7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICB0aGlzLmZvY3VzKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRyb3Bkb3duKSB7XG4gICAgICB0aGlzLmRyb3Bkb3duLmNsYXNzTGlzdC5yZW1vdmUoJ1ZsdC1kcm9wZG93bi0tZXhwYW5kZWQnKTtcbiAgICB9XG4gIH1cblxuICBjbGVhcigpIHtcbiAgICB0aGlzLnByZXZNb2RlbCA9IHRoaXMubW9kZWw7XG4gICAgZGVsZXRlIHRoaXMuc2VhcmNoVGV4dDtcbiAgICBkZWxldGUgdGhpcy5zZWFyY2hSZXN1bHRzO1xuICAgIGRlbGV0ZSB0aGlzLm1vZGVsO1xuICAgIGRlbGV0ZSB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleDtcbiAgICB0aGlzLm9uTW9kZWxDaGFuZ2UodGhpcy5tb2RlbCk7XG4gICAgdGhpcy5vblNlYXJjaFRleHRDaGFuZ2VkKHRoaXMuc2VhcmNoVGV4dCk7XG4gICAgdGhpcy5mb2N1cygpO1xuICB9XG5cbiAgcmV2ZXJ0KCkge1xuICAgIHRoaXMubW9kZWwgPSB0aGlzLnByZXZNb2RlbDtcbiAgICBkZWxldGUgdGhpcy5wcmV2TW9kZWw7XG4gICAgdGhpcy5vbk1vZGVsQ2hhbmdlKHRoaXMubW9kZWwpO1xuICAgIHRoaXMuZm9jdXMoKTtcbiAgfVxuXG4gIHJlbW92ZShldiwgaXRlbSkge1xuICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgY29uc3Qgb3B0aW9uSW5kZXggPSB0aGlzLm1vZGVsLmluZGV4T2YoaXRlbSk7XG4gICAgaWYgKG9wdGlvbkluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5tb2RlbC5zcGxpY2Uob3B0aW9uSW5kZXgsIDEpO1xuICAgICAgaWYgKCF0aGlzLm1vZGVsLmxlbmd0aCkge1xuICAgICAgICBkZWxldGUgdGhpcy5tb2RlbDtcbiAgICAgICAgZGVsZXRlIHRoaXMudmFsdWU7XG4gICAgICB9XG4gICAgICB0aGlzLm9uTW9kZWxDaGFuZ2UodGhpcy5tb2RlbCk7XG4gICAgfVxuICB9XG5cbiAgb3BlblJlc291cmNlKG1vZGVsPykge1xuICAgIHRoaXMua2V5TGlzdGVuZXJBY3RpdmUgPSB0cnVlOyAvLyBzdXBwcmVzcyBkcm9wZG93biBpbiB0aGlzIGNhc2VcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZGlzbWlzc0Ryb3Bkb3duKCk7XG4gICAgfSk7XG4gICAgY29uc3QgcmVmRGlhbG9nQ29tcG9uZW50ID0gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChNZXRhUmVmRGlhbG9nKTtcbiAgICB0aGlzLm1ldGFUcmFja2VyLmVtaXQodGhpcy5idWlsZFRyYWNrRXZlbnQobW9kZWwgPyAnRURJVCcgOiAnTkVXJykpO1xuICAgIGxldCB0aGVtZSA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmRhdGFzZXQudGhlbWU7XG4gICAgaWYgKCF0aGVtZSB8fCB0aGVtZSA9PT0gJ2luaGVyaXQnKSB7XG4gICAgICBsZXQgcGFyZW50Q29tcG9uZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xvc2VzdCgndmdpcC1tZXRhLWxheW91dCcpO1xuICAgICAgaWYgKHBhcmVudENvbXBvbmVudCkge1xuICAgICAgICB0aGVtZSA9IHBhcmVudENvbXBvbmVudC5kYXRhc2V0LnRoZW1lO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGVtZSB8fCB0aGVtZSA9PT0gJ2luaGVyaXQnKSB7XG4gICAgICAgIHBhcmVudENvbXBvbmVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsb3Nlc3QoJ3ZnaXAtbWV0YS1yZXNvdXJjZScpO1xuICAgICAgICBpZiAocGFyZW50Q29tcG9uZW50KSB7XG4gICAgICAgICAgdGhlbWUgPSBwYXJlbnRDb21wb25lbnQuZGF0YXNldC50aGVtZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnJlZmVyZW5jZVNlcnZpY2Uub3BlbkRpYWxvZyhcbiAgICAgIHJlZkRpYWxvZ0NvbXBvbmVudCwgdGhpcy5tZXRhUmVzb3VyY2UsIHRoaXMuaW50ZWdyYXRpb25Db2RlLFxuICAgICAgKHRoaXMubWV0YVJlZmVyZW5jZSBpbnN0YW5jZW9mIEFycmF5KSA/IHRoaXMubWV0YVJlZmVyZW5jZS5maWx0ZXIocnQgPT4gcnQuaGlkZGVuICE9PSB0cnVlKSA6IHRoaXMubWV0YVJlZmVyZW5jZSxcbiAgICAgIG1vZGVsLCBudWxsLCB0aGlzLnNlYXJjaFJlc291cmNlVHlwZS5yZXNvdXJjZVR5cGUsIHRoZW1lLCB0aGlzLm92ZXJsYXlDb250YWluZXJcbiAgICApLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgdGhpcy5wYXJlbnRbdGhpcy5tZXRhLm5hbWVdID0gcmVzdWx0O1xuICAgICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQocmVzdWx0KTtcbiAgICAgICAgY29uc3QgZXhpc3RpbmdTdWdnZXN0aW9uID0gKHRoaXMubWV0YS5zdWdnZXN0aW9ucyB8fCBbXSkuZmluZCgocykgPT4gKHMuaWQgPT09IHJlc3VsdC5pZCAmJiBzLnR5cGUgPT09IHJlc3VsdC50eXBlKSk7XG4gICAgICAgIGlmIChleGlzdGluZ1N1Z2dlc3Rpb24pIHtcbiAgICAgICAgICBleGlzdGluZ1N1Z2dlc3Rpb24ubGFiZWwgPSByZXN1bHQubGFiZWw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCF0aGlzLm1ldGEuc3VnZ2VzdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMubWV0YS5zdWdnZXN0aW9ucyA9IFtdO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLm1ldGEuc3VnZ2VzdGlvbnMudW5zaGlmdChyZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWV0YVRyYWNrZXIuZW1pdCh0aGlzLmJ1aWxkVHJhY2tFdmVudChtb2RlbCA/ICdVUERBVEUnIDogJ0NSRUFURScsIHJlc3VsdC50eXBlIHx8IHJlc3VsdC5yZXNvdXJjZVR5cGUpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubWV0YVRyYWNrZXIuZW1pdCh0aGlzLmJ1aWxkVHJhY2tFdmVudChtb2RlbCA/ICdDQU5DRUxfRURJVCcgOiAnQ0FOQ0VMX1VQREFURScpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZW5zdXJlRHJvcGRvd25Jc1Zpc2libGUoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBob2xkZXIgPSB0aGlzLmRyb3Bkb3duLmNsb3Nlc3QoJy5WbHQtY2FyZF9fY29udGVudCcpO1xuICAgICAgaWYgKGhvbGRlcikge1xuICAgICAgICBjb25zdCBlbCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5WbHQtZHJvcGRvd25fX3BhbmVsJyk7XG4gICAgICAgIGNvbnN0IGVsUmVjdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBob2xkZXJSZWN0ID0gaG9sZGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBpZiAoaG9sZGVyUmVjdC50b3AgKyBob2xkZXJSZWN0LmhlaWdodCA8IGVsUmVjdC50b3AgKyBlbFJlY3QuaGVpZ2h0KSB7XG4gICAgICAgICAgZWwuc2Nyb2xsSW50b1ZpZXcoeyBibG9jazogJ2VuZCcgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCA0MDApO1xuICB9XG5cbiAgcHJpdmF0ZSBlbnN1cmVEcm9wZG93bk9wdGlvbklzVmlzaWJsZSgpIHtcbiAgICBpZiAoIXRoaXMuZHJvcGRvd25TY3JvbGxDb250YWluZXIpIHtcbiAgICAgIHRoaXMuZHJvcGRvd25TY3JvbGxDb250YWluZXIgPSB0aGlzLmRyb3Bkb3duLnF1ZXJ5U2VsZWN0b3IoJy5WbHQtZHJvcGRvd25fX3Njcm9sbCcpO1xuICAgIH1cbiAgICBpZiAodGhpcy5kcm9wZG93blNjcm9sbENvbnRhaW5lciAmJiB0eXBlb2YgKHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4KSA9PT0gJ251bWJlcicpIHtcbiAgICAgIGNvbnN0IHNjcm9sbFRvcCA9IDQ0ICogdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXg7XG4gICAgICBjb25zdCBzY3JvbGxCb3R0b20gPSA0NCAqICh0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCAtIDcpO1xuICAgICAgaWYgKHNjcm9sbFRvcCA8IHRoaXMuZHJvcGRvd25TY3JvbGxDb250YWluZXIuc2Nyb2xsVG9wKSB7XG4gICAgICAgIHRoaXMuZHJvcGRvd25TY3JvbGxDb250YWluZXIuc2Nyb2xsVG9wID0gc2Nyb2xsVG9wO1xuICAgICAgfSBlbHNlIGlmIChzY3JvbGxCb3R0b20gPiB0aGlzLmRyb3Bkb3duU2Nyb2xsQ29udGFpbmVyLnNjcm9sbFRvcCkge1xuICAgICAgICB0aGlzLmRyb3Bkb3duU2Nyb2xsQ29udGFpbmVyLnNjcm9sbFRvcCA9IHNjcm9sbEJvdHRvbTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNsaWNrb3V0ID0gKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgaW50ZXJuYWxDb250cm9sID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KTtcbiAgICBpZiAoaW50ZXJuYWxDb250cm9sICYmIFsnVmx0LWRyb3Bkb3duX19saW5rJywgJ1ZsdC1kcm9wZG93bl9fYmxvY2snXS5pbmRleE9mKGV2ZW50LnRhcmdldC5jbGFzc05hbWUpICE9PSAtMSkge1xuICAgICAgdGhpcy5mb2N1cygpO1xuICAgIH0gZWxzZSBpZiAoIWludGVybmFsQ29udHJvbCAmJiBldmVudC50YXJnZXQgIT09IHRoaXMuaW5wdXQgJiYgZXZlbnQudGFyZ2V0LmNsYXNzTmFtZSAhPT0gJ1ZsdC1kcm9wZG93bl9fdGl0bGUnKSB7XG4gICAgICB0aGlzLmRpc21pc3NEcm9wZG93bigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWludGVybmFsQ29udHJvbCAmJiBpbnRlcm5hbENvbnRyb2wudGFnTmFtZSAhPT0gJ0lOUFVUJykge1xuICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgYnVpbGRUcmFja0V2ZW50KGFjdGlvbjogc3RyaW5nLCB2YWx1ZT86IHN0cmluZykge1xuICAgIGNvbnN0IGU6IElNZXRhVHJhY2tlckV2ZW50ID0ge1xuICAgICAgaW50ZWdyYXRpb246IHRoaXMuaW50ZWdyYXRpb25Db2RlLFxuICAgICAgcmVzb3VyY2U6IHRoaXMubW9kZWwgPyAodGhpcy5tb2RlbC50eXBlIHx8IHRoaXMubW9kZWwucmVzb3VyY2VUeXBlKSA6IHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlLnJlc291cmNlVHlwZSxcbiAgICAgIGZpZWxkOiB0aGlzLm1ldGEubmFtZSxcbiAgICAgIGFjdGlvblxuICAgIH07XG4gICAgaWYgKHRoaXMubWV0YS4kaXNDb250YWN0YWJsZSkge1xuICAgICAgZS5pc0NvbnRhY3RhYmxlID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiAodmFsdWUpICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgZS52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gZTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRQbGFjZWhvbGRlckxhYmVsKCkge1xuICAgIHRoaXMucGxhY2VIb2xkZXJMYWJlbCA9IHRoaXMubWV0YS5sYWJlbDtcbiAgICBpZiAodGhpcy5tdWx0aXBsZSAmJiAhdGhpcy5pc1BvbHltb3JwaGljKSB7XG4gICAgICB0aGlzLnBsYWNlSG9sZGVyTGFiZWwgPSAnK0FkZCAnO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBsYWNlSG9sZGVyTGFiZWwgPSAodGhpcy5pc1NlYXJjaGFibGUgJiYgKHRoaXMubXVsdGlwbGUgfHwgIXRoaXMuaXNQb2x5bW9ycGhpYykpID8gJ1NlYXJjaCAnIDogJyc7XG4gICAgfVxuICAgIHRoaXMucGxhY2VIb2xkZXJMYWJlbCArPSB0aGlzLnNlYXJjaFJlc291cmNlVHlwZS5yZXNvdXJjZVR5cGUgPyB0aGlzLnNlYXJjaFJlc291cmNlVHlwZS5yZXNvdXJjZVR5cGUgOiB0aGlzLnNlYXJjaFJlc291cmNlVHlwZXNTY29wZTtcbiAgfVxuXG4gIHByaXZhdGUga2V5ZG93biA9IChldmVudCkgPT4ge1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdBcnJvd0Rvd24nOiB7XG4gICAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duKCk7XG4gICAgICAgIGlmICh0eXBlb2YgKHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4KSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXgrKztcbiAgICAgICAgICBpZiAodGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXggPj0gKHRoaXMuc2VhcmNoUmVzdWx0cyB8fCB0aGlzLnN1Z2dlc3Rpb25zKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4ID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbnN1cmVEcm9wZG93bk9wdGlvbklzVmlzaWJsZSgpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdBcnJvd1VwJzoge1xuICAgICAgICB0aGlzLnNob3dEcm9wZG93bigpO1xuICAgICAgICBpZiAodHlwZW9mICh0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXggPSAodGhpcy5zZWFyY2hSZXN1bHRzIHx8IHRoaXMuc3VnZ2VzdGlvbnMpLmxlbmd0aCAtIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXgtLTtcbiAgICAgICAgICBpZiAodGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXggPCAwKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCA9ICh0aGlzLnNlYXJjaFJlc3VsdHMgfHwgdGhpcy5zdWdnZXN0aW9ucykubGVuZ3RoIC0gMTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbnN1cmVEcm9wZG93bk9wdGlvbklzVmlzaWJsZSgpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdTcGFjZSc6XG4gICAgICBjYXNlICdFbnRlcic6IHtcbiAgICAgICAgaWYgKHR5cGVvZiAodGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXgpICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgdGhpcy5vblN1Z2dlc3Rpb25TZWxlY3QoZXZlbnQsICh0aGlzLnNlYXJjaFJlc3VsdHMgfHwgdGhpcy5zdWdnZXN0aW9ucylbdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXhdKTtcbiAgICAgICAgICBkZWxldGUgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdFc2NhcGUnOiB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLmRpc21pc3NEcm9wZG93bigpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ0JhY2tzcGFjZSc6IHtcbiAgICAgICAgaWYgKCF0aGlzLm11bHRpcGxlICYmIHRoaXMubW9kZWwpIHsgLy8gSFBCUi04MjI5XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB0aGlzLnJlbW92ZVNlbGVjdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIGJ1aWxkRXh0ZXJuYWxMaW5rKCkge1xuICAgIGlmICh0aGlzLm1vZGVsKSB7XG4gICAgICBpZiAodGhpcy5tb2RlbC5leHRlcm5hbExpbmspIHtcbiAgICAgICAgdGhpcy5leHRlcm5hbExpbmsgPSB0aGlzLm1vZGVsLmV4dGVybmFsTGluaztcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5tZXRhQ29udGV4dC5wcm9maWxlc1t0aGlzLmludGVncmF0aW9uQ29kZS50b1VwcGVyQ2FzZSgpXSkge1xuICAgICAgICBkZWxldGUgdGhpcy5leHRlcm5hbExpbms7XG4gICAgICAgIHRoaXMubWV0YU1zZ1NlcnZpY2Uuc2VuZE1lc3NhZ2UoXG4gICAgICAgICAgdGhpcy5pbnRlZ3JhdGlvbkNvZGUudG9VcHBlckNhc2UoKSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhY3Rpb246ICdidWlsZEV4dGVybmFsTGluaycsXG4gICAgICAgICAgICBpbnRlZ3JhdGlvbkNvZGU6IHRoaXMuaW50ZWdyYXRpb25Db2RlLFxuICAgICAgICAgICAgcmVmOiB0aGlzLm1vZGVsLFxuICAgICAgICAgICAgcHJvZmlsZTogdGhpcy5tZXRhQ29udGV4dC5wcm9maWxlc1t0aGlzLmludGVncmF0aW9uQ29kZS50b1VwcGVyQ2FzZSgpXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLmVycm9yKSB7XG4gICAgICAgICAgICAgIHRoaXMuZXh0ZXJuYWxMaW5rID0gcmVzcG9uc2UuZXh0ZXJuYWxMaW5rO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdObyBleHRlcm5hbCBsaW5rIHN1cHBvcnQgZm9yJywgdGhpcy5pbnRlZ3JhdGlvbkNvZGUsIHRoaXMubW9kZWwucmVzb3VyY2VUeXBlIHx8IHRoaXMubW9kZWwudHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdGhpcy5leHRlcm5hbExpbms7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZWFyY2hBdXRvU3VnZ2VzdGlvbnMocGFyYW1zPykge1xuICAgIGxldCBzZWFyY2hVcmwgPSBgL3N1Z2dlc3Rpb25zLyR7dGhpcy5tZXRhLm5hbWV9L3NlYXJjaGA7XG4gICAgaWYgKHRoaXMubWV0YS5hdXRvICYmIHRoaXMubWV0YS5hdXRvLnNlYXJjaCkge1xuICAgICAgaWYgKHRoaXMubWV0YS5hdXRvLnNlYXJjaC51cmwpIHtcbiAgICAgICAgc2VhcmNoVXJsID0gdGhpcy5tZXRhLmF1dG8uc2VhcmNoLnVybC5yZXBsYWNlKC9cXCR7XFxzKihbXFx3Ll0rKVxccyp9L2csIChtYXRjaCwga2V5KSA9PiB7XG4gICAgICAgICAgaWYgKHBhcmFtcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICBjb25zdCB2YWwgPSBwYXJhbXNba2V5XTtcbiAgICAgICAgICAgIGRlbGV0ZSBwYXJhbXNba2V5XTtcbiAgICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IHAgb2YgT2JqZWN0LmtleXMocGFyYW1zKSkge1xuICAgICAgICBzZWFyY2hVcmwgKz0gYCR7c2VhcmNoVXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJid9JHtlbmNvZGVVUklDb21wb25lbnQocCl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtc1twXSl9YDtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VhcmNoaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMucmVzb3VyY2VTZXJ2aWNlLmdldEJ5UGF0aChzZWFyY2hVcmwpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnNlYXJjaGluZztcbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgIGxldCBzdWdnZXN0aW9ucztcbiAgICAgICAgICBzdWdnZXN0aW9ucyA9IHJlc3VsdDtcbiAgICAgICAgICBpZiAodGhpcy5tZXRhLmF1dG8uc2VhcmNoLmV4dHJhY3QpIHtcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zID0gcmVzdWx0W3RoaXMubWV0YS5hdXRvLnNlYXJjaC5leHRyYWN0XTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHN1Z2dlc3Rpb25zIGluc3RhbmNlb2YgQXJyYXkgIT09IHRydWUpIHtcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zID0gW3N1Z2dlc3Rpb25zXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgYXN5bmNTdWdnZXN0aW9ucyA9IFtdO1xuICAgICAgICAgIHN1Z2dlc3Rpb25zLmZvckVhY2goKHMpID0+IHtcbiAgICAgICAgICAgIGlmIChzICYmIHMuaWQgJiYgcy50eXBlKSB7IC8vIFRPT0QgY2hlY2sgdGhlIHR5cGUgaXMgYWNjZXB0YWJsZVxuICAgICAgICAgICAgICBhc3luY1N1Z2dlc3Rpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgIGlkOiBzLmlkLFxuICAgICAgICAgICAgICAgIGxhYmVsOiBzLmxhYmVsIHx8IGAke3MudHlwZX0jJHtzLmlkfWAsXG4gICAgICAgICAgICAgICAgdHlwZTogcy50eXBlXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChhc3luY1N1Z2dlc3Rpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKGFzeW5jU3VnZ2VzdGlvbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgIHRoaXMucGFyZW50W3RoaXMubWV0YS5uYW1lXSA9IGFzeW5jU3VnZ2VzdGlvbnNbMF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBkZWxldGUgdGhpcy5hc3luY1N1Z2dlc3Rpb25zO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmFzeW5jU3VnZ2VzdGlvbnMgPSBhc3luY1N1Z2dlc3Rpb25zO1xuICAgICAgICB9XG4gICAgICB9LCAoKSA9PiB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnNlYXJjaGluZztcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG59XG4iLCI8ZGl2IGNsYXNzPSd2Z2lwLW1ldGEtZmllbGQtcHJldmlldycgKm5nSWY9J3ByZXZpZXcgJiYgbW9kZWwgJiYgKCFtdWx0aXBsZSB8fCAobXVsdGlwbGUgJiYgbW9kZWwubGVuZ3RoKSknPlxuICA8ZGl2IGNsYXNzPSd2Z2lwLW1ldGEtZmllbGQtbGFiZWwnIFt0aXRsZV09J21ldGEubGFiZWwgfHwgbWV0YS5uYW1lJz57e21ldGEubGFiZWwgfHwgbWV0YS5uYW1lfX08L2Rpdj5cbiAgPGRpdiAqbmdJZj0nIW11bHRpcGxlJyBjbGFzcz0ndmdpcC1tZXRhLWZpZWxkLXZhbHVlIF9fZ3UnIFtuZ0NsYXNzXT1cInsgJ2hhcy1leHRlcm5hbC1saW5rJzogZXh0ZXJuYWxMaW5rIHx8IG1vZGVsLmV4dGVybmFsTGluayB9XCI+XG4gICAgPHN2ZyBjbGFzcz1cIlZsdC1pY29uIFZsdC1pY29uLS1zbWFsbGVyXCIgc3R5bGU9J21hcmdpbi10b3A6IC0zcHg7Jz5cbiAgICAgIDx1c2UgYXR0ci54bGluazpocmVmPVwidm9sdGEvdm9sdGEtYnJhbmQtaWNvbnMuc3ZnI3t7aW50ZWdyYXRpb25JY29ufX1cIiAvPlxuICAgIDwvc3ZnPlxuICAgIHt7bW9kZWwubGFiZWwgfHwgbW9kZWwuaWR9fSA8c3BhbiBjbGFzcz0nVmx0LWdyZXknPih7e21vZGVsLnR5cGV9fSk8L3NwYW4+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPSdtdWx0aXBsZScgY2xhc3M9J3ZnaXAtbWV0YS1maWVsZC12YWx1ZSBfX2d1Jz5cbiAgICA8c3BhbiAqbmdGb3I9J2xldCBtIG9mIChtb2RlbCB8fCBbXSknIGNsYXNzPSdWbHQtYmFkZ2UgVmx0LWJhZGdlLS1hcHAnPlxuICAgICAge3ttLmxhYmVsIHx8IG0uaWQgfHwgbX19IDxzcGFuIGNsYXNzPSdWbHQtZ3JleS1kYXJrJyAqbmdJZj0naXNQb2x5bW9ycGhpYyc+KHt7bS50eXBlfX0pPC9zcGFuPlxuICAgIDwvc3Bhbj5cbiAgPC9kaXY+XG4gIDxhIFtocmVmXT0nZXh0ZXJuYWxMaW5rIHx8IG1vZGVsLmV4dGVybmFsTGluaycgdGFyZ2V0PSdfYmxhbmsnIHJlbD0nbm9vcGVuZXInXG4gICAgKm5nSWY9J2V4dGVybmFsTGluayAmJiAobW9kZWwgJiYgIW11bHRpcGxlKScgY2xhc3M9XCJWbHQtY29tcG9zaXRlX19hcHBlbmQtLWljb24gcHJldmlld1wiIGFyaWEtbGFiZWw9J09wZW4gZXh0ZXJuYWwnPlxuICAgIDxkaXYgY2xhc3M9XCJWbHQtY29tcG9zaXRlX19pY29uXCI+XG4gICAgICA8c3ZnPlxuICAgICAgICA8dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tb3BlblwiIC8+XG4gICAgICA8L3N2Zz5cbiAgICA8L2Rpdj5cbiAgPC9hPlxuPC9kaXY+XG48ZGl2ICpuZ0lmPSchcHJldmlldycgY2xhc3M9XCJtZXRhLWZpZWxkLXJlZmVyZW5jZSBWbHQtZm9ybV9fZWxlbWVudCBWbHQtZm9ybV9fZWxlbWVudC0tYmlnXCJcbiAgW25nQ2xhc3NdPVwieyAnVmx0LWZvcm1fX2VsZW1lbnQtLWVycm9yJzogKHNlYXJjaEVycm9yICYmIGtleUxpc3RlbmVyQWN0aXZlKSB8fCAoZi5pbnZhbGlkICYmICgoZiB8IG1ldGFNb2RlbCkuX3BhcmVudC5zdWJtaXR0ZWQgfHwgKGZ0IHwgbWV0YU1vZGVsICkudG91Y2hlZCkpLCAnbXVsdGlwbGUnOiBtdWx0aXBsZSwgJ2hhcy12YWx1ZSc6IG1vZGVsLCBhY3RpdmU6IGtleUxpc3RlbmVyQWN0aXZlIH1cIj5cbiAgPGRpdiAqbmdJZj0nbXVsdGlwbGUnIGNsYXNzPSdpdGVtcy1jb250YWluZXInIFtuZ0NsYXNzXT0neyBjcmVhdGFibGU6IGlzQ3JlYXRhYmxlIH0nPlxuICAgIDxkaXYgKm5nSWY9J21vZGVsJyBjbGFzcz0nYmFkZ2VzLWNvbnRhaW5lciBrZWVwLWZvY3VzJyAoY2xpY2spPSdmb2N1cygpJyBzdHlsZT0nd2lkdGg6IDEwMCU7Jz4gPCEtLSBlc2xpbnQtZGlzYWJsZS1saW5lIC0tPlxuICAgICAgPGRpdiAqbmdGb3I9J2xldCBpdGVtIG9mIG1vZGVsJyBjbGFzcz1cIlZsdC1iYWRnZSBWbHQtYmFkZ2UtLWFwcCBWbHQtYmFkZ2UtLWxhcmdlIGtlZXAtZm9jdXNcIiBbbmdDbGFzc109XCJ7IGdyaWQ6IChpdGVtLmxhYmVsIHx8IGl0ZW0uaWQgfHwgJycpLmxlbmd0aCA+IDU2fVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz0nVmx0LXRydW5jYXRlJz57e2l0ZW0ubGFiZWwgfHwgaXRlbS5pZCB8fCBpdGVtIH19IDxzcGFuICpuZ0lmPSdpc1BvbHltb3JwaGljJyBjbGFzcz0nVmx0LWdyZXktZGFyaycgc3R5bGU9J2ZvbnQtd2VpZ2h0OiBub3JtYWw7Jz4oe3tpdGVtLnR5cGV9fSk8L3NwYW4+PC9zcGFuPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiVmx0LWJhZGdlX19kaXNtaXNzIGtlZXAtZm9jdXNcIiAoY2xpY2spPSdyZW1vdmUoJGV2ZW50LCBpdGVtKScgc3R5bGU9J3Bvc2l0aW9uOiBhYnNvbHV0ZTsgcmlnaHQ6IDEycHg7IHRvcDogOHB4OycgYXJpYS1sYWJlbD0nUmVtb3ZlJz48L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIlZsdC1jb21wb3NpdGVcIj5cbiAgICA8ZGl2IGNsYXNzPSdkcm9wZG93bi13cmFwcGVyIFZsdC1kcm9wZG93bicgc3R5bGU9J3dpZHRoOiAxMDAlOyBwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogNDhweDsnPlxuICAgICAgPGRpdiBjbGFzcz1cIlZsdC1kcm9wZG93bl9fcGFuZWxcIj5cbiAgICAgICAgPGRpdiAqbmdJZj0nc2VhcmNoRXJyb3InPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJWbHQtY2FsbG91dCBWbHQtY2FsbG91dC0tY3JpdGljYWwga2VlcC1mb2N1c1wiPlxuICAgICAgICAgICAgPGk+PC9pPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlZsdC1jYWxsb3V0X19jb250ZW50XCI+e3tzZWFyY2hFcnJvcn19PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPSchc2VhcmNoRXJyb3IgJiYgKHN1Z2dlc3Rpb25zLmxlbmd0aCB8fCBzZWFyY2hSZXN1bHRzKScgW25nQ2xhc3NdPVwieyBzdWdnZXN0aW9uczogIXNlYXJjaFJlc3VsdHN9XCJcbiAgICAgICAgICBjbGFzcz1cIlZsdC1kcm9wZG93bl9fcGFuZWxfX2NvbnRlbnQgVmx0LWRyb3Bkb3duX19wYW5lbF9fY29udGVudC0tc2Nyb2xsLWFyZWFcIiBzdHlsZT0ncGFkZGluZzogMDsnPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJWbHQtZHJvcGRvd25fX2Jsb2NrXCI+PC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj0nIXNlYXJjaFJlc3VsdHMnIGNsYXNzPVwiVmx0LWRyb3Bkb3duX19zY3JvbGxcIj5cbiAgICAgICAgICAgIDxhIGhyZWY9JyMnIFtuZ0NsYXNzXT1cInsgJ1ZsdC1kcm9wZG93bl9fbGluay0tc2VsZWN0ZWQnOiBhY3RpdmVTdWdnZXN0aW9uSW5kZXggPT09IGksIHNtYXJ0OiBzdWdnZXN0aW9uLnNtYXJ0IH1cIiAoY2xpY2spPSdvblN1Z2dlc3Rpb25TZWxlY3QoJGV2ZW50LCBzdWdnZXN0aW9uKScgKm5nRm9yPSdsZXQgc3VnZ2VzdGlvbiBvZiBzdWdnZXN0aW9uczsgbGV0IGkgPSBpbmRleCcgIGNsYXNzPVwiVmx0LWRyb3Bkb3duX19saW5rIGhhcy10eXBlXCI+XG4gICAgICAgICAgICAgIDxzdmcgY2xhc3M9J1ZsdC1pY29uICBWbHQtaWNvbi0tc21hbGwnPjx1c2UgYXR0ci54bGluazpocmVmPVwidm9sdGEvdm9sdGEtYnJhbmQtaWNvbnMuc3ZnI3t7aW50ZWdyYXRpb25JY29ufX1cIi8+PC9zdmc+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9J19fZ3UnIFt0aXRsZV09J3N1Z2dlc3Rpb24ubGFiZWwnPnt7IHN1Z2dlc3Rpb24ubGFiZWwgfX08L2Rpdj5cbiAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPSdWbHQtZ3JleS1kYXJrJyBzdHlsZT0ndGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7Jz57e3N1Z2dlc3Rpb24udHlwZX19PC9zbWFsbD5cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPSdzZWFyY2hSZXN1bHRzJyBjbGFzcz1cIlZsdC1kcm9wZG93bl9fc2Nyb2xsXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPSchc2VhcmNoUmVzdWx0cy5sZW5ndGgnIGNsYXNzPSdWbHQtZHJvcGRvd25fX2Jsb2NrJz4gTm8gcmVjb3JkcyBtYXRjaGluZyAnPGIgc3R5bGU9J3BvaW50ZXItZXZlbnRzOiBub25lOyc+e3tzZWFyY2hUZXh0fX08L2I+JyB3ZXJlIGZvdW5kLjwvZGl2PlxuICAgICAgICAgICAgPGEgaHJlZj0nIycgW25nQ2xhc3NdPVwieyAnVmx0LWRyb3Bkb3duX19saW5rLS1zZWxlY3RlZCc6IGFjdGl2ZVN1Z2dlc3Rpb25JbmRleCA9PT0gaSB9XCIgKGNsaWNrKT0nb25TdWdnZXN0aW9uU2VsZWN0KCRldmVudCwgc3VnZ2VzdGlvbiknICpuZ0Zvcj0nbGV0IHN1Z2dlc3Rpb24gb2Ygc2VhcmNoUmVzdWx0czsgbGV0IGkgPSBpbmRleCcgIGNsYXNzPVwiVmx0LWRyb3Bkb3duX19saW5rIGhhcy10eXBlXCI+XG4gICAgICAgICAgICAgIDxzdmcgY2xhc3M9J1ZsdC1pY29uIFZsdC1pY29uLS1zbWFsbCc+PHVzZSBhdHRyLnhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1icmFuZC1pY29ucy5zdmcje3tpbnRlZ3JhdGlvbkljb259fVwiLz48L3N2Zz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nX19ndScgW3RpdGxlXT0nc3VnZ2VzdGlvbi5sYWJlbCc+e3sgc3VnZ2VzdGlvbi5sYWJlbCB9fTwvZGl2PlxuICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9J1ZsdC1ncmV5LWRhcmsnIHN0eWxlPSd0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTsnPnt7c3VnZ2VzdGlvbi50eXBlfX08L3NtYWxsPlxuICAgICAgICAgICAgPC9hPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS0gPGRpdiAqbmdJZj0nc2VhcmNoUmVzdWx0cycgY2xhc3M9XCJWbHQtZHJvcGRvd25fX2Jsb2NrXCIgc3R5bGU9J3RleHQtYWxpZ246IHJpZ2h0OyBwYWRkaW5nLXRvcDogMDsnPlxuICAgICAgICAgICAgPHNtYWxsPlxuICAgICAgICAgICAgICB7eyBzZWFyY2hSZXN1bHRzID8gc2VhcmNoUmVzdWx0cy5sZW5ndGgrJyByZXN1bHRzJyA6ICdTdWdnZXN0aW9ucycgfX0gPHNwYW4gc3R5bGU9J2ZvbnQtc3R5bGU6IGl0YWxpYzsgZm9udC13ZWlnaHQ6IG5vcm1hbDsnICpuZ0lmPSdzZWFyY2hSZXN1bHRzJz5+e3sgbW9kZWwgPyAnbGFzdCBzZWFyY2gnIDogc2VhcmNoVGV4dH19PC9zcGFuPlxuICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIlZsdC1kcm9wZG93bl9fYmxvY2tcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiVmx0LWNvbXBvc2l0ZV9fcHJlcGVuZFwiXG4gICAgICAqbmdJZj0naXNQb2x5bW9ycGhpYyAmJiBzaG93VHlwZXMgJiYgKG11bHRpcGxlIHx8ICFtb2RlbCB8fCAoZHJvcGRvd25WaXNpYmxlICYmICgoc3VnZ2VzdGlvbnMgfHwgc2VhcmNoUmVzdWx0cyB8fCBbXSkubGVuZ3RoIHx8IHNlYXJjaFJlc291cmNlVHlwZS5yZXNvdXJjZVR5cGUpKSknPlxuICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1zY29wZVwiIFtuZ0NsYXNzXT1cInsgJ2hhcy12YWx1ZSc6IHNlYXJjaFJlc291cmNlVHlwZS5yZXNvdXJjZVR5cGUgfVwiPlxuICAgICAgICA8dmdpcC1tZXRhLWZpZWxkIGNsYXNzPSdzaG93bicgW21ldGFdPSdzZWFyY2hSZXNvdXJjZVR5cGVNZXRhJyBbcGFyZW50XT0nc2VhcmNoUmVzb3VyY2VUeXBlJ1xuICAgICAgICAgIChvbkNoYW5nZSk9J29uU2VhcmNoUmVzb3VyY2VUeXBlQ2hhbmdlZCgkZXZlbnQpJyAob25MZWF2ZSk9J29uQmx1cigkZXZlbnQpJ1xuICAgICAgICAgIFtpbnRlZ3JhdGlvbkNvZGVdPSdpbnRlZ3JhdGlvbkNvZGUnIHRoZW1lPSdpbmhlcml0Jz48L3ZnaXAtbWV0YS1maWVsZD5cbiAgICAgICAgPHN2ZyBjbGFzcz0nVmx0LWljb24gVmx0LWdyZXkgVmx0LWljb24tLXNtYWxsZXIgdmlzaWJsZS1tb2JpbGUgbW9iaWxlLWljb24nXG4gICAgICAgICAgc3R5bGU9J3Bvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAxNXB4OyBsZWZ0OiAxNHB4OyBwb2ludGVyLWV2ZW50czogbm9uZTsnPlxuICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1tZW51XCIgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPSchKGlzUG9seW1vcnBoaWMgJiYgc2hvd1R5cGVzICYmIChtdWx0aXBsZSB8fCAhbW9kZWwgfHwgZHJvcGRvd25WaXNpYmxlKSknPlxuICAgICAgPCEtLSByZXF1aXJlZCBieSBjc3MgLS0+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIlZsdC1jb21wb3NpdGVfX3dyYXBwZXIgVmx0LWlucHV0XCIgc3R5bGU9J292ZXJmbG93OiBoaWRkZW47J1xuICAgICAgW25nQ2xhc3NdPVwieyAnaGFzLWFwcGVuZC1idXR0b24nOiBoYXNBcHBlbmRCdXR0b24gJiYgIWRpc2FibGVkLCAndmdpcC1kaXNhYmxlJzogZGlzYWJsZWQgfVwiPlxuICAgICAgPGxhYmVsIGNsYXNzPSd3cmFwcGVyJz5cbiAgICAgICAgPGRpdiBjbGFzcz1cIlZsdC1jb21wb3NpdGVfX3ByZXBlbmQgVmx0LWNvbXBvc2l0ZV9fcHJlcGVuZC0taWNvblwiIHN0eWxlPSd0b3A6IDA7IHBhZGRpbmctdG9wOiAxNXB4Oyc+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIlZsdC1jb21wb3NpdGVfX2ljb25cIj5cbiAgICAgICAgICAgIDxzdmcgKm5nSWY9J2lzU2VhcmNoYWJsZSAmJiAoIW1vZGVsIHx8IG11bHRpcGxlKScgY2xhc3M9J1ZsdC1ncmV5Jz5cbiAgICAgICAgICAgICAgPHVzZSBhdHRyLnhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24te3sgbXVsdGlwbGUgPyAnc3RhY2snIDogJ3NlYXJjaCd9fVwiIC8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDxzdmcgKm5nSWY9JyFpc1NlYXJjaGFibGUgfHwgKG1vZGVsICYmICFtdWx0aXBsZSknXG4gICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntmaWxsOiBpbnRlZ3JhdGlvbkljb24gPT09ICdCcmFuZC1pY29uLXZvbmFnZScgPyAndmFyKC0tdmdpcC1tZXRhLWlucHV0LWNvbG9yKScgOiAnJ31cIj5cbiAgICAgICAgICAgICAgPHVzZSBhdHRyLnhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1icmFuZC1pY29ucy5zdmcje3tpbnRlZ3JhdGlvbkljb259fVwiIC8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPSdzdWdnZXN0aW9ucy5sZW5ndGgnIGNsYXNzPVwiVmx0LWJhZGdlIFZsdC1iYWRnZS0tc21hbGwgVmx0LWJhZGdlLS1wdXJwbGVcIlxuICAgICAgICAgICAgc3R5bGU9J3BhZGRpbmc6IDBweCA0cHg7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAyNnB4OyBsZWZ0OiA0cHg7IHBvaW50ZXItZXZlbnRzOiBub25lOyBtaW4td2lkdGg6IDE0cHg7Jz5cbiAgICAgICAgICAgIHt7c3VnZ2VzdGlvbnMubGVuZ3RofX08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxpbnB1dCBjbGFzcz0nbW9kZWwnIHR5cGU9J2hpZGRlbicgW3JlcXVpcmVkXT0ndmFsaWRhdGlvbnMucmVxdWlyZWQnIFsobmdNb2RlbCldPSdtb2RlbCcgI2Y9J25nTW9kZWwnIFtuYW1lXT0nbmFtZScgLz5cbiAgICAgICAgPGlucHV0IGNsYXNzPSdtYWluJyBbcmVhZG9ubHldPSchaXNTZWFyY2hhYmxlIHx8IChtb2RlbCAmJiAhbXVsdGlwbGUpJyBbbmdNb2RlbF09J3NlYXJjaFRleHQnICNmdD0nbmdNb2RlbCcgKG5nTW9kZWxDaGFuZ2UpPSdvblNlYXJjaFRleHRDaGFuZ2VkKCRldmVudCknIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIiB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwie3sgcGxhY2VIb2xkZXJMYWJlbCB8fCAnICcgfX1cIiBbbmdDbGFzc109J3sgZXh0OiBleHRlcm5hbExpbmsgfScgKGNsaWNrKT0nb25BY3RpdmF0ZWQoJGV2ZW50KScgKGZvY3VzKT0nb25BY3RpdmF0ZWQoJGV2ZW50KScgKGJsdXIpPSdvbkJsdXIoJGV2ZW50KScgW2Rpc2FibGVkXT0nZGlzYWJsZWQnIFt0aXRsZV09XCJtb2RlbCA/IG1vZGVsLmxhYmVsIDogJydcIi8+XG4gICAgICAgIDxsYWJlbCBjbGFzcz0nVmx0LXRydW5jYXRlIGhpZGRlbi1tb2JpbGUnIHN0eWxlPSdwYWRkaW5nLWxlZnQ6IDI1cHg7IHBhZGRpbmctcmlnaHQ6IDQycHg7Jz57eyAobXVsdGlwbGUgJiYgaXNQb2x5bW9ycGhpYykgPyAnK0FkZCAnIDogKChtb2RlbCB8fCAhaXNQb2x5bW9ycGhpYykgPyBtZXRhLmxhYmVsIDogKCBtZXRhLnNlYXJjaExhYmVsIHx8ICdTZWFyY2gnKSkgfX08c3BhbiAqbmdJZj0ndmFsaWRhdGlvbnMucmVxdWlyZWQnIGNsYXNzPSdWbHQtcmVkJz4qPC9zcGFuPiZuYnNwOzxzcGFuIHN0eWxlPSdjb2xvcjogdmFyKC0tdmdpcC1tZXRhLWlucHV0LWNvbG9yKTsgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7JyAqbmdJZj0nbW9kZWwnPih7e21vZGVsLnR5cGUgfHwgbW9kZWwucmVzb3VyY2VUeXBlIHx8IG1vZGVsLmxlbmd0aH19KTwvc3Bhbj48L2xhYmVsPiA8IS0tIGVzbGludC1kaXNhYmxlLWxpbmUgQGFuZ3VsYXItZXNsaW50L3RlbXBsYXRlL2xhYmVsLWhhcy1hc3NvY2lhdGVkLWNvbnRyb2wtLT5cbiAgICAgICAgPGxhYmVsIGNsYXNzPSdWbHQtdHJ1bmNhdGUgaGlkZGVuLWRlc2t0b3AnIHN0eWxlPSdwYWRkaW5nLWxlZnQ6IDI1cHg7IHBhZGRpbmctcmlnaHQ6IDQycHg7Jz57e21ldGEubGFiZWwgfHwgbWV0YS5uYW1lfX08c3BhbiAqbmdJZj0ndmFsaWRhdGlvbnMucmVxdWlyZWQnIGNsYXNzPSdWbHQtcmVkJz4qPC9zcGFuPiZuYnNwOzxzcGFuIHN0eWxlPSdjb2xvcjogdmFyKC0tdmdpcC1tZXRhLWlucHV0LWNvbG9yKTsgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7JyAqbmdJZj0nbW9kZWwnPih7e21vZGVsLnR5cGUgfHwgbW9kZWwucmVzb3VyY2VUeXBlIHx8IG1vZGVsLmxlbmd0aH19KTwvc3Bhbj48L2xhYmVsPiA8IS0tIGVzbGludC1kaXNhYmxlLWxpbmUgQGFuZ3VsYXItZXNsaW50L3RlbXBsYXRlL2xhYmVsLWhhcy1hc3NvY2lhdGVkLWNvbnRyb2wtLT5cbiAgICAgIDwvbGFiZWw+XG4gICAgICA8ZGl2ICpuZ0lmPSdzZWFyY2hpbmcnIGNsYXNzPSdzZWFyY2gtcHJvZ3Jlc3MnPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJhciBWbHQtYmctcHVycGxlXCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSdWbHQtY29tcG9zaXRlX19hcHBlbmQgcmlnaHQtYWN0aW9ucyc+XG4gICAgICAgIDwhLS0gPGRpdiAqbmdJZj0ncHJldk1vZGVsICYmICFtb2RlbCcgY2xhc3M9XCJWbHQtY29tcG9zaXRlX19hcHBlbmQtLWljb25cIiAoY2xpY2spPSdyZXZlcnQoKSc+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIlZsdC1jb21wb3NpdGVfX2ljb25cIj5cbiAgICAgICAgICAgIDxzdmc+PHVzZSB4bGluazpocmVmPVwidm9sdGEvdm9sdGEtaWNvbnMuc3ZnI1ZsdC1pY29uLXJlcGx5XCIvPjwvc3ZnPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgIDxhIGhyZWY9JyMnICpuZ0lmPSdtb2RlbCAmJiAhbXVsdGlwbGUnIGNsYXNzPVwiVmx0LWNvbXBvc2l0ZV9fYXBwZW5kLS1pY29uXCIgKGNsaWNrKT0ncmVtb3ZlU2VsZWN0aW9uKCRldmVudCknPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJWbHQtY29tcG9zaXRlX19pY29uXCI+XG4gICAgICAgICAgICA8c3ZnPlxuICAgICAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tY3Jvc3NcIiAvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYT5cbiAgICAgICAgPGEgW2hyZWZdPSdleHRlcm5hbExpbmsgfHwgbW9kZWwuZXh0ZXJuYWxMaW5rJyB0YXJnZXQ9J19ibGFuaycgcmVsPSdub29wZW5lcicgKm5nSWY9J2V4dGVybmFsTGluayAmJiAobW9kZWwgJiYgIW11bHRpcGxlKScgY2xhc3M9XCJWbHQtY29tcG9zaXRlX19hcHBlbmQtLWljb25cIiBhcmlhLWxhYmVsPSdPcGVuIGV4dGVybmFsJz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiVmx0LWNvbXBvc2l0ZV9faWNvblwiPlxuICAgICAgICAgICAgPHN2Zz5cbiAgICAgICAgICAgICAgPHVzZSB4bGluazpocmVmPVwidm9sdGEvdm9sdGEtaWNvbnMuc3ZnI1ZsdC1pY29uLW9wZW5cIiAvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDwhLS0gPHNwYW4gKm5nSWY9J2hhc0NyZWF0YWJsZXMnPlxuICAgICAgPGJ1dHRvbiB0eXBlPSdidXR0b24nICpuZ0lmPSchbW9kZWwgfHwgbXVsdGlwbGUnIChjbGljayk9J29wZW5SZXNvdXJjZSgpJyBjbGFzcz1cIlZsdC1idG4gVmx0LWJ0bi0tc2Vjb25kYXJ5IFZsdC1idG4tLWljb24gVmx0LWJ0bi0tbGFyZ2VcIiBzdHlsZT0nbWFyZ2luLWxlZnQ6IDEycHg7Jz5cbiAgICAgICAgPHN2Zz48dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tcGx1c1wiLz48L3N2Zz5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiB0eXBlPSdidXR0b24nICpuZ0lmPSdtb2RlbCAmJiAhbXVsdGlwbGUnIChjbGljayk9J29wZW5SZXNvdXJjZShtb2RlbCknIGNsYXNzPVwiVmx0LWJ0biBWbHQtYnRuLS1wcmltYXJ5IFZsdC1idG4tLWljb24gVmx0LWJ0bi0tbGFyZ2VcIiBzdHlsZT0nbWFyZ2luLWxlZnQ6IDEycHg7Jz5cbiAgICAgICAgPHN2Zz48dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tZWRpdFwiLz48L3N2Zz5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvc3Bhbj4gLS0+XG4gICAgPGRpdiAqbmdJZj0naGFzQXBwZW5kQnV0dG9uICYmICFkaXNhYmxlZCcgY2xhc3M9XCJWbHQtY29tcG9zaXRlX19hcHBlbmRcIj5cbiAgICAgIDxidXR0b24gKGZvY3VzKT0nb25BY3RpdmF0ZWQoJGV2ZW50KScgKGJsdXIpPSdvbkJsdXIoJGV2ZW50KScgdHlwZT0nYnV0dG9uJyAqbmdJZj0nIW1vZGVsIHx8IG11bHRpcGxlJ1xuICAgICAgICAoY2xpY2spPSdvcGVuUmVzb3VyY2UoKScgY2xhc3M9XCJWbHQtYnRuIFZsdC1idG4tLXdoaXRlIFZsdC1idG4tLWljb25cIiBhcmlhLWxhYmVsPSdBZGQgbmV3Jz5cbiAgICAgICAgPHN2Zz5cbiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tcGx1c1wiIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIChmb2N1cyk9J29uQWN0aXZhdGVkKCRldmVudCknIChibHVyKT0nb25CbHVyKCRldmVudCknIHR5cGU9J2J1dHRvbicgKm5nSWY9J21vZGVsICYmICFtdWx0aXBsZSdcbiAgICAgICAgKGNsaWNrKT0nb3BlblJlc291cmNlKG1vZGVsKScgY2xhc3M9XCJWbHQtYnRuIFZsdC1idG4tLXdoaXRlIFZsdC1idG4tLWljb25cIiBhcmlhLWxhYmVsPSdFZGl0Jz5cbiAgICAgICAgPHN2Zz5cbiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tZWRpdFwiIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8c21hbGwgKm5nSWY9J2YuaW52YWxpZCAmJiAoKGYgfCBtZXRhTW9kZWwpLl9wYXJlbnQuc3VibWl0dGVkIHx8ICgoZnQgfCBtZXRhTW9kZWwpLnRvdWNoZWQgJiYga2V5TGlzdGVuZXJBY3RpdmUpKSdcbiAgICBjbGFzcz1cIlZsdC1mb3JtX19lbGVtZW50X19lcnJvclwiPlxuICAgIDxzcGFuICpuZ0lmPVwiZi5lcnJvcnMucmVxdWlyZWRcIj5SZXF1aXJlZDwvc3Bhbj5cbiAgICA8c3BhbiAqbmdJZj1cImYuZXJyb3JzLnBhdHRlcm5cIj5TaG91bGQgbWF0Y2ggJ3t7dmFsaWRhdGlvbnMucGF0dGVybn19JyBwYXR0ZXJuPC9zcGFuPlxuICAgIDxzcGFuICpuZ0lmPVwiZi5lcnJvcnMuY3VzdG9tXCI+e3tmLmVycm9ycy5jdXN0b219fSZuYnNwOzwvc3Bhbj5cbiAgPC9zbWFsbD5cbiAgPHNtYWxsICpuZ0lmPSdtZXRhLmhlbHBUZXh0IHx8IG1ldGEuaGludCcgY2xhc3M9XCJWbHQtZm9ybV9fZWxlbWVudF9faGludFwiPnt7bWV0YS5oZWxwVGV4dCB8fCBtZXRhLmhpbnR9fTwvc21hbGw+XG48L2Rpdj5cbiJdfQ==
|