@eo-sdk/client 11.14.4 → 11.14.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/app/eo-framework/form-elements/dynamic-list/dynamic-list.component.d.ts +2 -1
- package/app/eo-framework/form-elements/dynamic-list/dynamic-list.component.d.ts.map +1 -1
- package/app/eo-framework/form-elements/id-reference/id-reference.component.d.ts +1 -0
- package/app/eo-framework/form-elements/id-reference/id-reference.component.d.ts.map +1 -1
- package/app/eo-framework/form-elements/organization/organization.component.d.ts.map +1 -1
- package/app/eo-framework/object-form/object-form-helper.service.d.ts.map +1 -1
- package/app/eo-framework/stored-query/stored-query-details/stored-query-details.component.d.ts.map +1 -1
- package/app/eo-framework-core/api/grid.service.d.ts.map +1 -1
- package/assets/_default/i18n/de.json +1 -0
- package/assets/_default/i18n/en.json +1 -0
- package/esm2022/app/eo-client/about-state/about-state.component.mjs +3 -3
- package/esm2022/app/eo-client/inbox-state/inbox-state/inbox-state.component.mjs +1 -1
- package/esm2022/app/eo-client/process-state/process-state.component.mjs +1 -1
- package/esm2022/app/eo-framework/app-shell/app-bar/app-search/app-search.component.mjs +3 -3
- package/esm2022/app/eo-framework/form-elements/dynamic-list/dynamic-list.component.mjs +6 -3
- package/esm2022/app/eo-framework/form-elements/id-reference/id-reference.component.mjs +7 -4
- package/esm2022/app/eo-framework/form-elements/organization/organization.component.mjs +16 -4
- package/esm2022/app/eo-framework/grid/filters/organization-filter.component.mjs +3 -3
- package/esm2022/app/eo-framework/object-form/object-form/form-element/form-element.component.mjs +3 -3
- package/esm2022/app/eo-framework/object-form/object-form-helper.service.mjs +20 -1
- package/esm2022/app/eo-framework/stored-query/stored-query-details/stored-query-details.component.mjs +8 -4
- package/esm2022/app/eo-framework-core/api/grid.service.mjs +7 -5
- package/fesm2022/eo-sdk-client.mjs +68 -25
- package/fesm2022/eo-sdk-client.mjs.map +1 -1
- package/package.json +2 -2
|
@@ -413,7 +413,11 @@ let StoredQueryDetailsComponent = class StoredQueryDetailsComponent {
|
|
|
413
413
|
case SearchQuery.BASE_PARAMS.MODIFIER:
|
|
414
414
|
this.systemService.getOrganizationObjects(filter.firstValue)
|
|
415
415
|
.subscribe(orgUsers => restrictions.push({
|
|
416
|
-
field, label, items: orgUsers.map(u =>
|
|
416
|
+
field, label, items: orgUsers.map((u) => {
|
|
417
|
+
return u.id === "#currentuser#"
|
|
418
|
+
? this.translate.instant('eo.form.property.organization.current.user')
|
|
419
|
+
: u.title;
|
|
420
|
+
})
|
|
417
421
|
}));
|
|
418
422
|
break;
|
|
419
423
|
}
|
|
@@ -551,7 +555,7 @@ let StoredQueryDetailsComponent = class StoredQueryDetailsComponent {
|
|
|
551
555
|
});
|
|
552
556
|
}
|
|
553
557
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: StoredQueryDetailsComponent, deps: [{ token: i1.Router }, { token: i2.SearchService }, { token: i2.UserService }, { token: i2.SystemService }, { token: i3.SelectionService }, { token: i4.PendingChangesService }, { token: i2.StoredQueriesService }, { token: i5.ObjectFormHelperService }, { token: i0.ElementRef }, { token: i2.TranslateService }, { token: i2.EventService }, { token: i6.AppSearchService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
554
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: StoredQueryDetailsComponent, selector: "eo-stored-query-details", inputs: { query: "query" }, outputs: { notifyList: "notifyList" }, viewQueries: [{ propertyName: "storedQueryForm", first: true, predicate: ["storedQueryForm"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"storedQuery\">\n <div class=\"eo-head\">\n <header class=\"eo-header\">\n <eo-icon class=\"eo-header-icon\"\n [iconSrc]=\"'assets/_default/svg/ic_saved_search.svg'\"\n [iconTitle]=\"('eo.view.navigation.storedqueries' | translate)\">\n </eo-icon>\n <div class=\"eo-header-info\">\n <h2 class=\"eo-header-title\">{{ storedQuery.name }}</h2>\n <h3 class=\"eo-header-subtitle\" translate>eo.search.title.storedqueries</h3>\n </div>\n </header>\n </div>\n\n <div class=\"eo-body\">\n\n <div class=\"form\">\n\n <ng-template #queryForm>\n <eo-stored-query [query]=\"storedQuery\" [formOnly]=\"true\" #storedQueryForm\n (onQueryLoaded)=\"onStoredQueryLoaded()\"\n (onQueryExecute)=\"onStoredQueryExecute($event)\"></eo-stored-query>\n </ng-template>\n\n <form class=\"edit-form\" [formGroup]=\"editForm.form\" *ngIf=\"editForm.form; else queryForm\">\n\n <div class=\"context dark\">\n\n <!-- title and fulltext term fields -->\n <eo-form-input class=\"title\">\n <input type=\"text\" name=\"storedQueryTitle\" maxlength=\"64\" onfocus=\"this.select()\"\n [formControlName]=\"'storedQueryTitle'\"/>\n </eo-form-input>\n\n <eo-query-scope-select [selection]=\"queryScope\" (select)=\"setQueryScope($event)\"></eo-query-scope-select>\n <div class=\"form-field\">\n <eo-form-element [skipToggle]=\"true\" [element]=\"editForm.fulltextFormControl\"\n [situation]=\"'SEARCH'\"></eo-form-element>\n <eo-dynamic-property-switch [parentFormControl]=\"editForm.fulltextFormControl\"\n (onPropertyChanged)=\"parameterChanged($event)\"></eo-dynamic-property-switch>\n </div>\n\n <!-- context type form controls -->\n <h3>{{ storedQuery.contextFolderTypes[0]?.label }}</h3>\n <div class=\"form-field\" *ngFor=\"let ctxElement of editForm.contextControls; trackBy: trackByQName\">\n <eo-form-element [element]=\"ctxElement\" [situation]=\"'SEARCH'\"></eo-form-element>\n <eo-dynamic-property-switch [parentFormControl]=\"ctxElement\"\n (onPropertyChanged)=\"parameterChanged($event)\"></eo-dynamic-property-switch>\n </div>\n </div>\n\n <!-- object type form controls -->\n <div class=\"form-fields\" [ngClass]=\"{empty: !editForm.controls?.length}\">\n @for(element of editForm.controls;track trackByQName) {\n @if (isTableDataMap.get(element)) {\n <div class=\"form-field\">\n <eo-form-element [element]=\"element\" [situation]=\"'SEARCH'\"></eo-form-element>\n <eo-dynamic-property-switch [parentFormControl]=\"element\"\n (onPropertyChanged)=\"parameterChanged($event)\"></eo-dynamic-property-switch>\n </div>\n }\n }\n </div>\n </form>\n </div>\n\n <aside class=\"aside\">\n\n <!-- favorite and share -->\n <div class=\"meta-actions\" *ngIf=\"!isNewQuery\">\n\n <ng-container *ngIf=\"isOwnQuery; else sharedWithMe\">\n <eo-icon class=\"button btn-share\" [iconSrc]=\"'assets/_default/svg/ic_share.svg'\" *ngIf=\"enableSharing\"\n [ngClass]=\"{active: storedQuery.shared || storedQuery.roles.length, editing: editingShare}\"\n (click)=\"toggleShareEdit()\"\n [iconTitle]=\"iconTitles.share\"></eo-icon>\n\n <eo-icon class=\"button btn-fav\" [iconSrc]=\"'assets/_default/svg/ic_favorite.svg'\"\n [ngClass]=\"{active: storedQuery.favorite}\"\n (click)=\"toggleFavoriteState()\"\n [iconTitle]=\"iconTitles.favor\"></eo-icon>\n </ng-container>\n\n <ng-template #sharedWithMe>\n <eo-icon class=\"sharedWithMe\" [iconSrc]=\"'assets/_default/svg/ic_share.svg'\"\n [iconTitle]=\"iconTitles.shared\"></eo-icon>\n <eo-icon class=\"sharedWithMe\" [iconSrc]=\"'assets/_default/svg/ic_favorite.svg'\"\n [iconTitle]=\"iconTitles.favored\"></eo-icon>\n </ng-template>\n\n </div>\n\n <!-- roles that share this query -->\n <div class=\"meta-roles\" *ngIf=\"!isNewQuery\" [ngClass]=\"{dark: editingShare, empty: !storedQuery.roles?.length}\">\n\n <div class=\"label\" translate>eo.storedquery.share.sharedwith</div>\n <div class=\"form-field\" *ngIf=\"rolesPicker?.codesystem?.entries\">\n <eo-codesystem [pickerTitle]=\"rolesPicker.title\"\n [codesystem]=\"rolesPicker.codesystem\"\n [multiselect]=\"true\"\n [readonly]=\"!editingShare\"\n [inputStyleClass]=\"'stored-query__share'\"\n [(ngModel)]=\"rolesPicker.value\" class=\"hide-chip-close-button\"></eo-codesystem>\n </div>\n\n <div class=\"share-actions\" *ngIf=\"editingShare\">\n <button class=\"secondary\" (click)=\"cancelShare()\" translate>eo.cta.button.cancel</button>\n <button class=\"primary\" (click)=\"share()\" translate>eo.storedquery.share.ok</button>\n </div>\n </div>\n\n <!-- queries meta info like baseparam settings -->\n <div class=\"meta-data\" *ngIf=\"restrictions?.length\">\n <div class=\"restriction\" *ngFor=\"let restriction of restrictions; trackBy: trackByIndex\">\n <div class=\"label\">{{ restriction.label }}</div>\n <div class=\"items\">\n <div *ngFor=\"let item of restriction.items; trackBy: trackByIndex\">{{ item }}</div>\n </div>\n </div>\n </div>\n\n </aside>\n\n </div>\n\n <div class=\"actions\">\n <ng-container *ngIf=\"!editForm.form; else actionEdit\">\n <button class=\"secondary btn-delete\" (click)=\"isStoredQueryUsed() ? showDeleteDialog = true : delete()\"\n [disabled]=\"!isOwnQuery\" translate>eo.cta.button.delete\n </button>\n <button class=\"secondary btn-open\" (click)=\"setQueryToAppSearch()\" translate>eo.storedquery.load</button>\n <button class=\"primary grey btn-edit\" (click)=\"edit()\" [disabled]=\"!isOwnQuery\" translate>\n eo.storedquery.action.edit\n </button>\n <button class=\"primary btn-search\" [disabled]=\"storedQuery.state?.isEmpty\" (click)=\"executeQuery()\" translate>\n eo.storedquery.run\n </button>\n </ng-container>\n\n <eo-dialog [title]=\"'eo.storedquery.delete.dialog.title' | translate\" [(visible)]=\"showDeleteDialog\"\n [focusOnShow]=\"false\" [minWidth]=\"400\" [styleClass]=\"'storedQuery-delete__dialog'\">\n <div>\n <span>{{'eo.storedquery.delete.dialog.message' | translate: {\n storedquery: this.storedQuery.name,\n name: this.info\n }\n }}\n </span>\n </div>\n <div class=\"action-buttons flex-row\">\n <button type=\"button\" class=\"button cancel\" (click)=\"showDeleteDialog = false\"\n translate>eo.cta.button.cancel\n </button>\n <button type=\"button\" #confirmDelete (click)=\"delete(); showDeleteDialog = false\" class=\"button primary\"\n translate>eo.cta.button.delete\n </button>\n </div>\n </eo-dialog>\n\n <ng-template #actionEdit>\n <!-- action while editing the query form -->\n <button class=\"secondary btn-cancel\" (click)=\"cancelEdit()\" translate>eo.cta.button.cancel</button>\n <button class=\"primary btn-save\" (click)=\"updateStoredQuery()\" [disabled]=\"editForm.form.invalid\" translate>\n eo.storedquery.action.save\n </button>\n </ng-template>\n </div>\n\n</ng-container>\n", styles: [":host{--stored-query-aside-width: 300px;display:flex;flex:1;flex-direction:column;min-height:0;min-width:0;background:var(--panel-background-grey);height:100%;overflow-y:auto}:host .eo-head{background-color:var(--color-white);border-bottom:1px solid var(--panel-header-border-bottom-color)}:host .eo-body{overflow-y:hidden}:host .eo-body .form{overflow-y:auto;padding:var(--app-pane-padding);padding-right:calc(var(--stored-query-aside-width) + var(--app-pane-padding) * 2)}:host .eo-body .form eo-stored-query{background-color:var(--color-white);padding:var(--app-pane-padding)}:host .eo-body .aside{width:var(--stored-query-aside-width);position:absolute;right:var(--app-pane-padding);top:var(--app-pane-padding);background-color:rgba(var(--color-black-rgb),.02);border:1px solid rgba(var(--color-black-rgb),.1);box-sizing:border-box;padding:var(--app-pane-padding)}:host .eo-body .aside .meta-actions{display:flex;justify-content:flex-end;margin:0 -2px}:host .eo-body .aside .meta-actions eo-icon{margin:0 2px;padding:4px;color:var(--text-color-hint)}:host .eo-body .aside .meta-actions eo-icon.active{color:var(--color-favorite)}:host .eo-body .aside .meta-actions eo-icon.editing{background-color:var(--color-primary-2);color:var(--color-white);border-radius:2px 2px 0 0}:host .eo-body .aside .meta-actions eo-icon.sharedWithMe{background-color:var(--text-color-hint);color:var(--color-white);border-radius:2px}:host .eo-body .aside .meta-roles.dark{background-color:var(--color-primary-2);color:var(--color-white);border-radius:2px;padding:calc(var(--app-pane-padding) / 2);margin-bottom:var(--app-pane-padding)}:host .eo-body .aside .meta-roles.dark .actions{display:flex}:host .eo-body .aside .meta-roles.dark .label{display:none}:host .eo-body .aside .meta-roles.dark .form-field{background-color:rgba(var(--color-white-rgb),.2)}:host .eo-body .aside .meta-roles .form-field{background-color:rgba(var(--color-white-rgb),.2);border:1px solid rgba(var(--color-black-rgb),.1);padding:2px 2px 4px 4px;margin-bottom:calc(var(--app-pane-padding) / 2)}:host .eo-body .aside .meta-roles .form-field eo-codesystem.hide-chip-close-button ::ng-deep .readonly yvc-autocomplete yvc-chips-list ul.chips li.chip span+.yvc-icon{display:none}:host .eo-body .aside .meta-roles .label{color:var(--text-color-caption);font-style:italic;margin-bottom:calc(var(--app-pane-padding) / 4)}:host .eo-body .aside .meta-roles .share-actions{display:flex;justify-content:flex-end;margin:0 calc(var(--app-pane-padding) / 8 * -1)}:host .eo-body .aside .meta-roles .share-actions button{margin:0 calc(var(--app-pane-padding) / 8);padding:calc(var(--app-pane-padding) / 4) calc(var(--app-pane-padding) / 2)}:host .eo-body .aside .meta-roles.empty:not(.dark) .label,:host .eo-body .aside .meta-roles.empty:not(.dark) .form-field{display:none}:host .eo-body .aside .meta-data{order:1;flex:1 1 40%;margin:0 0 var(--app-pane-padding) 0;display:table;border-collapse:collapse}:host .eo-body .aside .meta-data .restriction{display:table-row}:host .eo-body .aside .meta-data .restriction .label{display:table-cell;padding-right:calc(var(--app-pane-padding) / 2);color:var(--text-color-caption);font-style:italic}:host .eo-body .aside .meta-data .restriction .items{display:table-cell;border-left:1px solid rgba(var(--color-black-rgb),.1);padding:0 0 calc(var(--app-pane-padding) / 2) calc(var(--app-pane-padding) / 2)}:host .actions{display:flex;flex-flow:row;justify-content:flex-end;padding:var(--app-pane-padding) calc(var(--app-pane-padding) - 2px);background-color:var(--color-white);border-top:1px solid var(--panel-header-border-bottom-color)}:host .actions button{margin:0 2px}:host .edit-form{background-color:var(--color-white);max-width:500px}:host .edit-form .context{background-color:var(--color-primary-2);padding:calc(var(--app-pane-padding) / 2)}:host .edit-form .context h3{padding:var(--app-pane-padding) 0 calc(var(--app-pane-padding) / 2) 0;margin:0;font-weight:var(--font-weight-light);font-size:var(--font-subhead);color:var(--color-white);display:flex;justify-content:flex-end}:host .edit-form .form-fields{padding:calc(var(--app-pane-padding) / 2)}:host .edit-form .form-fields.empty{display:none}:host .edit-form .form-field{display:flex;flex-flow:row nowrap;align-items:center}:host .edit-form .form-field eo-form-element{flex:1 1 auto}:host .edit-form .form-field eo-dynamic-property-switch{flex:0 0 auto}:host eo-stored-query{max-width:500px;display:block}:host ::ng-deep eo-form-input.title{display:block;margin-bottom:var(--app-pane-padding)}:host ::ng-deep eo-form-input.title input{width:100%;font-size:var(--font-title);font-weight:var(--font-weight-light);border:0;background-color:transparent}::ng-deep .storedQuery-delete__dialog{padding:8px;min-height:unset!important}::ng-deep .storedQuery-delete__dialog--header{font-size:1.17em!important;font-weight:400!important;color:rgba(var(--color-black-rgb),.54)!important;padding:0 0 1em!important;margin:0;background:#fff!important}::ng-deep .storedQuery-delete__dialog .storedQuery-delete__dialog_warning{color:var(--color-error)}\n"], dependencies: [{ kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i8.FormElementComponent, selector: "eo-form-element", inputs: ["situation", "skipToggle", "isTableElement", "element"] }, { kind: "directive", type: i9.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i10.EoIconComponent, selector: "eo-icon", inputs: ["objectType", "iconId", "iconSrc", "badge", "iconTitle"] }, { kind: "component", type: i11.EoDialogComponent, selector: "eo-dialog", inputs: ["hasPreviewFile", "title", "subtitle", "styleClass", "dirtyCheck", "minWidth", "minHeight", "height", "width", "focusOnShow", "align", "isFormTable", "showPreview", "closeOnCancelOnly", "visible"], outputs: ["onTogglePreview", "visibleChange", "hide", "show"] }, { kind: "component", type: i12.QueryScopeSelectComponent, selector: "eo-query-scope-select", inputs: ["selection"], outputs: ["select"] }, { kind: "directive", type: i13.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i13.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: i13.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i13.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i13.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i13.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i13.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i13.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i14.FormInputComponent, selector: "eo-form-input", inputs: ["label", "tag", "description", "skipToggle", "isNull", "invalid", "disabled", "required"], outputs: ["onToggleLabel"] }, { kind: "component", type: i15.CodesystemComponent, selector: "eo-codesystem", inputs: ["situation", "pickerTitle", "placeholder", "codesystem", "multiselect", "readonly", "inputStyleClass", "emptyMessage", "isTableElement", "filterFunction", "disablingFilterFunction"] }, { kind: "component", type: i16.StoredQueryComponent, selector: "eo-stored-query", inputs: ["query", "formOnly"], outputs: ["onQueryLoaded", "onQueryExecute"] }, { kind: "component", type: i17.DynamicPropertySwitchComponent, selector: "eo-dynamic-property-switch", inputs: ["parentFormControl"], outputs: ["onPropertyChanged"] }, { kind: "pipe", type: i9.TranslatePipe, name: "translate" }] }); }
|
|
558
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: StoredQueryDetailsComponent, selector: "eo-stored-query-details", inputs: { query: "query" }, outputs: { notifyList: "notifyList" }, viewQueries: [{ propertyName: "storedQueryForm", first: true, predicate: ["storedQueryForm"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"storedQuery\">\n <div class=\"eo-head\">\n <header class=\"eo-header\">\n <eo-icon class=\"eo-header-icon\"\n [iconSrc]=\"'assets/_default/svg/ic_saved_search.svg'\"\n [iconTitle]=\"('eo.view.navigation.storedqueries' | translate)\">\n </eo-icon>\n <div class=\"eo-header-info\">\n <h2 class=\"eo-header-title\">{{ storedQuery.name }}</h2>\n <h3 class=\"eo-header-subtitle\" translate>eo.search.title.storedqueries</h3>\n </div>\n </header>\n </div>\n\n <div class=\"eo-body\">\n\n <div class=\"form\">\n\n <ng-template #queryForm>\n <eo-stored-query [query]=\"storedQuery\" [formOnly]=\"true\" #storedQueryForm\n (onQueryLoaded)=\"onStoredQueryLoaded()\"\n (onQueryExecute)=\"onStoredQueryExecute($event)\"></eo-stored-query>\n </ng-template>\n\n <form class=\"edit-form\" [formGroup]=\"editForm.form\" *ngIf=\"editForm.form; else queryForm\">\n\n <div class=\"context dark\">\n\n <!-- title and fulltext term fields -->\n <eo-form-input class=\"title\">\n <input type=\"text\" name=\"storedQueryTitle\" maxlength=\"64\" onfocus=\"this.select()\"\n [formControlName]=\"'storedQueryTitle'\"/>\n </eo-form-input>\n\n <eo-query-scope-select [selection]=\"queryScope\" (select)=\"setQueryScope($event)\"></eo-query-scope-select>\n <div class=\"form-field\">\n <eo-form-element [skipToggle]=\"true\" [element]=\"editForm.fulltextFormControl\"\n [situation]=\"'SEARCH'\"></eo-form-element>\n <eo-dynamic-property-switch [parentFormControl]=\"editForm.fulltextFormControl\"\n (onPropertyChanged)=\"parameterChanged($event)\"></eo-dynamic-property-switch>\n </div>\n\n <!-- context type form controls -->\n <h3>{{ storedQuery.contextFolderTypes[0]?.label }}</h3>\n <div class=\"form-field\" *ngFor=\"let ctxElement of editForm.contextControls; trackBy: trackByQName\">\n <eo-form-element [element]=\"ctxElement\" [situation]=\"'SEARCH'\"></eo-form-element>\n <eo-dynamic-property-switch [parentFormControl]=\"ctxElement\"\n (onPropertyChanged)=\"parameterChanged($event)\"></eo-dynamic-property-switch>\n </div>\n </div>\n\n <!-- object type form controls -->\n <div class=\"form-fields\" [ngClass]=\"{empty: !editForm.controls?.length}\">\n @for(element of editForm.controls;track trackByQName) {\n @if (isTableDataMap.get(element)) {\n <div class=\"form-field\">\n <eo-form-element [element]=\"element\" [situation]=\"'SEARCH'\"></eo-form-element>\n <eo-dynamic-property-switch [parentFormControl]=\"element\"\n (onPropertyChanged)=\"parameterChanged($event)\"></eo-dynamic-property-switch>\n </div>\n }\n }\n </div>\n </form>\n </div>\n\n <aside class=\"aside\">\n\n <!-- favorite and share -->\n <div class=\"meta-actions\" *ngIf=\"!isNewQuery\">\n\n <ng-container *ngIf=\"isOwnQuery; else sharedWithMe\">\n <eo-icon class=\"button btn-share\" [iconSrc]=\"'assets/_default/svg/ic_share.svg'\" *ngIf=\"enableSharing\"\n [ngClass]=\"{active: storedQuery.shared || storedQuery.roles.length, editing: editingShare}\"\n (click)=\"toggleShareEdit()\"\n [iconTitle]=\"iconTitles.share\"></eo-icon>\n\n <eo-icon class=\"button btn-fav\" [iconSrc]=\"'assets/_default/svg/ic_favorite.svg'\"\n [ngClass]=\"{active: storedQuery.favorite}\"\n (click)=\"toggleFavoriteState()\"\n [iconTitle]=\"iconTitles.favor\"></eo-icon>\n </ng-container>\n\n <ng-template #sharedWithMe>\n <eo-icon class=\"sharedWithMe\" [iconSrc]=\"'assets/_default/svg/ic_share.svg'\"\n [iconTitle]=\"iconTitles.shared\"></eo-icon>\n <eo-icon class=\"sharedWithMe\" [iconSrc]=\"'assets/_default/svg/ic_favorite.svg'\"\n [iconTitle]=\"iconTitles.favored\"></eo-icon>\n </ng-template>\n\n </div>\n\n <!-- roles that share this query -->\n <div class=\"meta-roles\" *ngIf=\"!isNewQuery\" [ngClass]=\"{dark: editingShare, empty: !storedQuery.roles?.length}\">\n\n <div class=\"label\" translate>eo.storedquery.share.sharedwith</div>\n <div class=\"form-field\" *ngIf=\"rolesPicker?.codesystem?.entries\">\n <eo-codesystem [pickerTitle]=\"rolesPicker.title\"\n [codesystem]=\"rolesPicker.codesystem\"\n [multiselect]=\"true\"\n [readonly]=\"!editingShare\"\n [inputStyleClass]=\"'stored-query__share'\"\n [(ngModel)]=\"rolesPicker.value\" class=\"hide-chip-close-button\"></eo-codesystem>\n </div>\n\n <div class=\"share-actions\" *ngIf=\"editingShare\">\n <button class=\"secondary\" (click)=\"cancelShare()\" translate>eo.cta.button.cancel</button>\n <button class=\"primary\" (click)=\"share()\" translate>eo.storedquery.share.ok</button>\n </div>\n </div>\n\n <!-- queries meta info like baseparam settings -->\n <div class=\"meta-data\" *ngIf=\"restrictions?.length\">\n <div class=\"restriction\" *ngFor=\"let restriction of restrictions; trackBy: trackByIndex\">\n <div class=\"label\">{{ restriction.label }}</div>\n <div class=\"items\">\n <div *ngFor=\"let item of restriction.items; trackBy: trackByIndex\">{{ item }}</div>\n </div>\n </div>\n </div>\n\n </aside>\n\n </div>\n\n <div class=\"actions\">\n <ng-container *ngIf=\"!editForm.form; else actionEdit\">\n <button class=\"secondary btn-delete\" (click)=\"showDeleteDialog = true\"\n [disabled]=\"!isOwnQuery\" translate>eo.cta.button.delete\n </button>\n <button class=\"secondary btn-open\" (click)=\"setQueryToAppSearch()\" translate>eo.storedquery.load</button>\n <button class=\"primary grey btn-edit\" (click)=\"edit()\" [disabled]=\"!isOwnQuery\" translate>\n eo.storedquery.action.edit\n </button>\n <button class=\"primary btn-search\" [disabled]=\"storedQuery.state?.isEmpty\" (click)=\"executeQuery()\" translate>\n eo.storedquery.run\n </button>\n </ng-container>\n\n <eo-dialog [title]=\"'eo.storedquery.delete.dialog.title' | translate\" [(visible)]=\"showDeleteDialog\"\n [focusOnShow]=\"false\" [minWidth]=\"400\" [styleClass]=\"'storedQuery-delete__dialog'\">\n <div>\n @if(isStoredQueryUsed()){\n <span>{{'eo.storedquery.delete.dialog.message' | translate: {\n storedquery: this.storedQuery.name,\n name: this.info}\n }}\n </span>\n } @else {\n <span>{{'eo.storedquery.delete.dialog.message.default' | translate: {\n storedquery: this.storedQuery.name}\n }}\n </span>\n }\n </div>\n <div class=\"action-buttons flex-row\">\n <button type=\"button\" class=\"button cancel\" (click)=\"showDeleteDialog = false\"\n translate>eo.cta.button.cancel\n </button>\n <button type=\"button\" #confirmDelete (click)=\"delete(); showDeleteDialog = false\" class=\"button primary\"\n translate>eo.cta.button.delete\n </button>\n </div>\n </eo-dialog>\n\n <ng-template #actionEdit>\n <!-- action while editing the query form -->\n <button class=\"secondary btn-cancel\" (click)=\"cancelEdit()\" translate>eo.cta.button.cancel</button>\n <button class=\"primary btn-save\" (click)=\"updateStoredQuery()\" [disabled]=\"editForm.form.invalid\" translate>\n eo.storedquery.action.save\n </button>\n </ng-template>\n </div>\n\n</ng-container>\n", styles: [":host{--stored-query-aside-width: 300px;display:flex;flex:1;flex-direction:column;min-height:0;min-width:0;background:var(--panel-background-grey);height:100%;overflow-y:auto}:host .eo-head{background-color:var(--color-white);border-bottom:1px solid var(--panel-header-border-bottom-color)}:host .eo-body{overflow-y:hidden}:host .eo-body .form{overflow-y:auto;padding:var(--app-pane-padding);padding-right:calc(var(--stored-query-aside-width) + var(--app-pane-padding) * 2)}:host .eo-body .form eo-stored-query{background-color:var(--color-white);padding:var(--app-pane-padding)}:host .eo-body .aside{width:var(--stored-query-aside-width);position:absolute;right:var(--app-pane-padding);top:var(--app-pane-padding);background-color:rgba(var(--color-black-rgb),.02);border:1px solid rgba(var(--color-black-rgb),.1);box-sizing:border-box;padding:var(--app-pane-padding)}:host .eo-body .aside .meta-actions{display:flex;justify-content:flex-end;margin:0 -2px}:host .eo-body .aside .meta-actions eo-icon{margin:0 2px;padding:4px;color:var(--text-color-hint)}:host .eo-body .aside .meta-actions eo-icon.active{color:var(--color-favorite)}:host .eo-body .aside .meta-actions eo-icon.editing{background-color:var(--color-primary-2);color:var(--color-white);border-radius:2px 2px 0 0}:host .eo-body .aside .meta-actions eo-icon.sharedWithMe{background-color:var(--text-color-hint);color:var(--color-white);border-radius:2px}:host .eo-body .aside .meta-roles.dark{background-color:var(--color-primary-2);color:var(--color-white);border-radius:2px;padding:calc(var(--app-pane-padding) / 2);margin-bottom:var(--app-pane-padding)}:host .eo-body .aside .meta-roles.dark .actions{display:flex}:host .eo-body .aside .meta-roles.dark .label{display:none}:host .eo-body .aside .meta-roles.dark .form-field{background-color:rgba(var(--color-white-rgb),.2)}:host .eo-body .aside .meta-roles .form-field{background-color:rgba(var(--color-white-rgb),.2);border:1px solid rgba(var(--color-black-rgb),.1);padding:2px 2px 4px 4px;margin-bottom:calc(var(--app-pane-padding) / 2)}:host .eo-body .aside .meta-roles .form-field eo-codesystem.hide-chip-close-button ::ng-deep .readonly yvc-autocomplete yvc-chips-list ul.chips li.chip span+.yvc-icon{display:none}:host .eo-body .aside .meta-roles .label{color:var(--text-color-caption);font-style:italic;margin-bottom:calc(var(--app-pane-padding) / 4)}:host .eo-body .aside .meta-roles .share-actions{display:flex;justify-content:flex-end;margin:0 calc(var(--app-pane-padding) / 8 * -1)}:host .eo-body .aside .meta-roles .share-actions button{margin:0 calc(var(--app-pane-padding) / 8);padding:calc(var(--app-pane-padding) / 4) calc(var(--app-pane-padding) / 2)}:host .eo-body .aside .meta-roles.empty:not(.dark) .label,:host .eo-body .aside .meta-roles.empty:not(.dark) .form-field{display:none}:host .eo-body .aside .meta-data{order:1;flex:1 1 40%;margin:0 0 var(--app-pane-padding) 0;display:table;border-collapse:collapse}:host .eo-body .aside .meta-data .restriction{display:table-row}:host .eo-body .aside .meta-data .restriction .label{display:table-cell;padding-right:calc(var(--app-pane-padding) / 2);color:var(--text-color-caption);font-style:italic}:host .eo-body .aside .meta-data .restriction .items{display:table-cell;border-left:1px solid rgba(var(--color-black-rgb),.1);padding:0 0 calc(var(--app-pane-padding) / 2) calc(var(--app-pane-padding) / 2)}:host .actions{display:flex;flex-flow:row;justify-content:flex-end;padding:var(--app-pane-padding) calc(var(--app-pane-padding) - 2px);background-color:var(--color-white);border-top:1px solid var(--panel-header-border-bottom-color)}:host .actions button{margin:0 2px}:host .edit-form{background-color:var(--color-white);max-width:500px}:host .edit-form .context{background-color:var(--color-primary-2);padding:calc(var(--app-pane-padding) / 2)}:host .edit-form .context h3{padding:var(--app-pane-padding) 0 calc(var(--app-pane-padding) / 2) 0;margin:0;font-weight:var(--font-weight-light);font-size:var(--font-subhead);color:var(--color-white);display:flex;justify-content:flex-end}:host .edit-form .form-fields{padding:calc(var(--app-pane-padding) / 2)}:host .edit-form .form-fields.empty{display:none}:host .edit-form .form-field{display:flex;flex-flow:row nowrap;align-items:center}:host .edit-form .form-field eo-form-element{flex:1 1 auto}:host .edit-form .form-field eo-dynamic-property-switch{flex:0 0 auto}:host eo-stored-query{max-width:500px;display:block}:host ::ng-deep eo-form-input.title{display:block;margin-bottom:var(--app-pane-padding)}:host ::ng-deep eo-form-input.title input{width:100%;font-size:var(--font-title);font-weight:var(--font-weight-light);border:0;background-color:transparent}::ng-deep .storedQuery-delete__dialog{padding:8px;min-height:unset!important}::ng-deep .storedQuery-delete__dialog--header{font-size:1.17em!important;font-weight:400!important;color:rgba(var(--color-black-rgb),.54)!important;padding:0 0 1em!important;margin:0;background:#fff!important}::ng-deep .storedQuery-delete__dialog .storedQuery-delete__dialog_warning{color:var(--color-error)}\n"], dependencies: [{ kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i8.FormElementComponent, selector: "eo-form-element", inputs: ["situation", "skipToggle", "isTableElement", "element"] }, { kind: "directive", type: i9.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i10.EoIconComponent, selector: "eo-icon", inputs: ["objectType", "iconId", "iconSrc", "badge", "iconTitle"] }, { kind: "component", type: i11.EoDialogComponent, selector: "eo-dialog", inputs: ["hasPreviewFile", "title", "subtitle", "styleClass", "dirtyCheck", "minWidth", "minHeight", "height", "width", "focusOnShow", "align", "isFormTable", "showPreview", "closeOnCancelOnly", "visible"], outputs: ["onTogglePreview", "visibleChange", "hide", "show"] }, { kind: "component", type: i12.QueryScopeSelectComponent, selector: "eo-query-scope-select", inputs: ["selection"], outputs: ["select"] }, { kind: "directive", type: i13.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i13.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: i13.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i13.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i13.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i13.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i13.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i13.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i14.FormInputComponent, selector: "eo-form-input", inputs: ["label", "tag", "description", "skipToggle", "isNull", "invalid", "disabled", "required"], outputs: ["onToggleLabel"] }, { kind: "component", type: i15.CodesystemComponent, selector: "eo-codesystem", inputs: ["situation", "pickerTitle", "placeholder", "codesystem", "multiselect", "readonly", "inputStyleClass", "emptyMessage", "isTableElement", "filterFunction", "disablingFilterFunction"] }, { kind: "component", type: i16.StoredQueryComponent, selector: "eo-stored-query", inputs: ["query", "formOnly"], outputs: ["onQueryLoaded", "onQueryExecute"] }, { kind: "component", type: i17.DynamicPropertySwitchComponent, selector: "eo-dynamic-property-switch", inputs: ["parentFormControl"], outputs: ["onPropertyChanged"] }, { kind: "pipe", type: i9.TranslatePipe, name: "translate" }] }); }
|
|
555
559
|
};
|
|
556
560
|
StoredQueryDetailsComponent = __decorate([
|
|
557
561
|
UntilDestroy()
|
|
@@ -559,7 +563,7 @@ StoredQueryDetailsComponent = __decorate([
|
|
|
559
563
|
export { StoredQueryDetailsComponent };
|
|
560
564
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: StoredQueryDetailsComponent, decorators: [{
|
|
561
565
|
type: Component,
|
|
562
|
-
args: [{ selector: 'eo-stored-query-details', template: "<ng-container *ngIf=\"storedQuery\">\n <div class=\"eo-head\">\n <header class=\"eo-header\">\n <eo-icon class=\"eo-header-icon\"\n [iconSrc]=\"'assets/_default/svg/ic_saved_search.svg'\"\n [iconTitle]=\"('eo.view.navigation.storedqueries' | translate)\">\n </eo-icon>\n <div class=\"eo-header-info\">\n <h2 class=\"eo-header-title\">{{ storedQuery.name }}</h2>\n <h3 class=\"eo-header-subtitle\" translate>eo.search.title.storedqueries</h3>\n </div>\n </header>\n </div>\n\n <div class=\"eo-body\">\n\n <div class=\"form\">\n\n <ng-template #queryForm>\n <eo-stored-query [query]=\"storedQuery\" [formOnly]=\"true\" #storedQueryForm\n (onQueryLoaded)=\"onStoredQueryLoaded()\"\n (onQueryExecute)=\"onStoredQueryExecute($event)\"></eo-stored-query>\n </ng-template>\n\n <form class=\"edit-form\" [formGroup]=\"editForm.form\" *ngIf=\"editForm.form; else queryForm\">\n\n <div class=\"context dark\">\n\n <!-- title and fulltext term fields -->\n <eo-form-input class=\"title\">\n <input type=\"text\" name=\"storedQueryTitle\" maxlength=\"64\" onfocus=\"this.select()\"\n [formControlName]=\"'storedQueryTitle'\"/>\n </eo-form-input>\n\n <eo-query-scope-select [selection]=\"queryScope\" (select)=\"setQueryScope($event)\"></eo-query-scope-select>\n <div class=\"form-field\">\n <eo-form-element [skipToggle]=\"true\" [element]=\"editForm.fulltextFormControl\"\n [situation]=\"'SEARCH'\"></eo-form-element>\n <eo-dynamic-property-switch [parentFormControl]=\"editForm.fulltextFormControl\"\n (onPropertyChanged)=\"parameterChanged($event)\"></eo-dynamic-property-switch>\n </div>\n\n <!-- context type form controls -->\n <h3>{{ storedQuery.contextFolderTypes[0]?.label }}</h3>\n <div class=\"form-field\" *ngFor=\"let ctxElement of editForm.contextControls; trackBy: trackByQName\">\n <eo-form-element [element]=\"ctxElement\" [situation]=\"'SEARCH'\"></eo-form-element>\n <eo-dynamic-property-switch [parentFormControl]=\"ctxElement\"\n (onPropertyChanged)=\"parameterChanged($event)\"></eo-dynamic-property-switch>\n </div>\n </div>\n\n <!-- object type form controls -->\n <div class=\"form-fields\" [ngClass]=\"{empty: !editForm.controls?.length}\">\n @for(element of editForm.controls;track trackByQName) {\n @if (isTableDataMap.get(element)) {\n <div class=\"form-field\">\n <eo-form-element [element]=\"element\" [situation]=\"'SEARCH'\"></eo-form-element>\n <eo-dynamic-property-switch [parentFormControl]=\"element\"\n (onPropertyChanged)=\"parameterChanged($event)\"></eo-dynamic-property-switch>\n </div>\n }\n }\n </div>\n </form>\n </div>\n\n <aside class=\"aside\">\n\n <!-- favorite and share -->\n <div class=\"meta-actions\" *ngIf=\"!isNewQuery\">\n\n <ng-container *ngIf=\"isOwnQuery; else sharedWithMe\">\n <eo-icon class=\"button btn-share\" [iconSrc]=\"'assets/_default/svg/ic_share.svg'\" *ngIf=\"enableSharing\"\n [ngClass]=\"{active: storedQuery.shared || storedQuery.roles.length, editing: editingShare}\"\n (click)=\"toggleShareEdit()\"\n [iconTitle]=\"iconTitles.share\"></eo-icon>\n\n <eo-icon class=\"button btn-fav\" [iconSrc]=\"'assets/_default/svg/ic_favorite.svg'\"\n [ngClass]=\"{active: storedQuery.favorite}\"\n (click)=\"toggleFavoriteState()\"\n [iconTitle]=\"iconTitles.favor\"></eo-icon>\n </ng-container>\n\n <ng-template #sharedWithMe>\n <eo-icon class=\"sharedWithMe\" [iconSrc]=\"'assets/_default/svg/ic_share.svg'\"\n [iconTitle]=\"iconTitles.shared\"></eo-icon>\n <eo-icon class=\"sharedWithMe\" [iconSrc]=\"'assets/_default/svg/ic_favorite.svg'\"\n [iconTitle]=\"iconTitles.favored\"></eo-icon>\n </ng-template>\n\n </div>\n\n <!-- roles that share this query -->\n <div class=\"meta-roles\" *ngIf=\"!isNewQuery\" [ngClass]=\"{dark: editingShare, empty: !storedQuery.roles?.length}\">\n\n <div class=\"label\" translate>eo.storedquery.share.sharedwith</div>\n <div class=\"form-field\" *ngIf=\"rolesPicker?.codesystem?.entries\">\n <eo-codesystem [pickerTitle]=\"rolesPicker.title\"\n [codesystem]=\"rolesPicker.codesystem\"\n [multiselect]=\"true\"\n [readonly]=\"!editingShare\"\n [inputStyleClass]=\"'stored-query__share'\"\n [(ngModel)]=\"rolesPicker.value\" class=\"hide-chip-close-button\"></eo-codesystem>\n </div>\n\n <div class=\"share-actions\" *ngIf=\"editingShare\">\n <button class=\"secondary\" (click)=\"cancelShare()\" translate>eo.cta.button.cancel</button>\n <button class=\"primary\" (click)=\"share()\" translate>eo.storedquery.share.ok</button>\n </div>\n </div>\n\n <!-- queries meta info like baseparam settings -->\n <div class=\"meta-data\" *ngIf=\"restrictions?.length\">\n <div class=\"restriction\" *ngFor=\"let restriction of restrictions; trackBy: trackByIndex\">\n <div class=\"label\">{{ restriction.label }}</div>\n <div class=\"items\">\n <div *ngFor=\"let item of restriction.items; trackBy: trackByIndex\">{{ item }}</div>\n </div>\n </div>\n </div>\n\n </aside>\n\n </div>\n\n <div class=\"actions\">\n <ng-container *ngIf=\"!editForm.form; else actionEdit\">\n <button class=\"secondary btn-delete\" (click)=\"isStoredQueryUsed() ? showDeleteDialog = true : delete()\"\n [disabled]=\"!isOwnQuery\" translate>eo.cta.button.delete\n </button>\n <button class=\"secondary btn-open\" (click)=\"setQueryToAppSearch()\" translate>eo.storedquery.load</button>\n <button class=\"primary grey btn-edit\" (click)=\"edit()\" [disabled]=\"!isOwnQuery\" translate>\n eo.storedquery.action.edit\n </button>\n <button class=\"primary btn-search\" [disabled]=\"storedQuery.state?.isEmpty\" (click)=\"executeQuery()\" translate>\n eo.storedquery.run\n </button>\n </ng-container>\n\n <eo-dialog [title]=\"'eo.storedquery.delete.dialog.title' | translate\" [(visible)]=\"showDeleteDialog\"\n [focusOnShow]=\"false\" [minWidth]=\"400\" [styleClass]=\"'storedQuery-delete__dialog'\">\n <div>\n <span>{{'eo.storedquery.delete.dialog.message' | translate: {\n storedquery: this.storedQuery.name,\n name: this.info\n }\n }}\n </span>\n </div>\n <div class=\"action-buttons flex-row\">\n <button type=\"button\" class=\"button cancel\" (click)=\"showDeleteDialog = false\"\n translate>eo.cta.button.cancel\n </button>\n <button type=\"button\" #confirmDelete (click)=\"delete(); showDeleteDialog = false\" class=\"button primary\"\n translate>eo.cta.button.delete\n </button>\n </div>\n </eo-dialog>\n\n <ng-template #actionEdit>\n <!-- action while editing the query form -->\n <button class=\"secondary btn-cancel\" (click)=\"cancelEdit()\" translate>eo.cta.button.cancel</button>\n <button class=\"primary btn-save\" (click)=\"updateStoredQuery()\" [disabled]=\"editForm.form.invalid\" translate>\n eo.storedquery.action.save\n </button>\n </ng-template>\n </div>\n\n</ng-container>\n", styles: [":host{--stored-query-aside-width: 300px;display:flex;flex:1;flex-direction:column;min-height:0;min-width:0;background:var(--panel-background-grey);height:100%;overflow-y:auto}:host .eo-head{background-color:var(--color-white);border-bottom:1px solid var(--panel-header-border-bottom-color)}:host .eo-body{overflow-y:hidden}:host .eo-body .form{overflow-y:auto;padding:var(--app-pane-padding);padding-right:calc(var(--stored-query-aside-width) + var(--app-pane-padding) * 2)}:host .eo-body .form eo-stored-query{background-color:var(--color-white);padding:var(--app-pane-padding)}:host .eo-body .aside{width:var(--stored-query-aside-width);position:absolute;right:var(--app-pane-padding);top:var(--app-pane-padding);background-color:rgba(var(--color-black-rgb),.02);border:1px solid rgba(var(--color-black-rgb),.1);box-sizing:border-box;padding:var(--app-pane-padding)}:host .eo-body .aside .meta-actions{display:flex;justify-content:flex-end;margin:0 -2px}:host .eo-body .aside .meta-actions eo-icon{margin:0 2px;padding:4px;color:var(--text-color-hint)}:host .eo-body .aside .meta-actions eo-icon.active{color:var(--color-favorite)}:host .eo-body .aside .meta-actions eo-icon.editing{background-color:var(--color-primary-2);color:var(--color-white);border-radius:2px 2px 0 0}:host .eo-body .aside .meta-actions eo-icon.sharedWithMe{background-color:var(--text-color-hint);color:var(--color-white);border-radius:2px}:host .eo-body .aside .meta-roles.dark{background-color:var(--color-primary-2);color:var(--color-white);border-radius:2px;padding:calc(var(--app-pane-padding) / 2);margin-bottom:var(--app-pane-padding)}:host .eo-body .aside .meta-roles.dark .actions{display:flex}:host .eo-body .aside .meta-roles.dark .label{display:none}:host .eo-body .aside .meta-roles.dark .form-field{background-color:rgba(var(--color-white-rgb),.2)}:host .eo-body .aside .meta-roles .form-field{background-color:rgba(var(--color-white-rgb),.2);border:1px solid rgba(var(--color-black-rgb),.1);padding:2px 2px 4px 4px;margin-bottom:calc(var(--app-pane-padding) / 2)}:host .eo-body .aside .meta-roles .form-field eo-codesystem.hide-chip-close-button ::ng-deep .readonly yvc-autocomplete yvc-chips-list ul.chips li.chip span+.yvc-icon{display:none}:host .eo-body .aside .meta-roles .label{color:var(--text-color-caption);font-style:italic;margin-bottom:calc(var(--app-pane-padding) / 4)}:host .eo-body .aside .meta-roles .share-actions{display:flex;justify-content:flex-end;margin:0 calc(var(--app-pane-padding) / 8 * -1)}:host .eo-body .aside .meta-roles .share-actions button{margin:0 calc(var(--app-pane-padding) / 8);padding:calc(var(--app-pane-padding) / 4) calc(var(--app-pane-padding) / 2)}:host .eo-body .aside .meta-roles.empty:not(.dark) .label,:host .eo-body .aside .meta-roles.empty:not(.dark) .form-field{display:none}:host .eo-body .aside .meta-data{order:1;flex:1 1 40%;margin:0 0 var(--app-pane-padding) 0;display:table;border-collapse:collapse}:host .eo-body .aside .meta-data .restriction{display:table-row}:host .eo-body .aside .meta-data .restriction .label{display:table-cell;padding-right:calc(var(--app-pane-padding) / 2);color:var(--text-color-caption);font-style:italic}:host .eo-body .aside .meta-data .restriction .items{display:table-cell;border-left:1px solid rgba(var(--color-black-rgb),.1);padding:0 0 calc(var(--app-pane-padding) / 2) calc(var(--app-pane-padding) / 2)}:host .actions{display:flex;flex-flow:row;justify-content:flex-end;padding:var(--app-pane-padding) calc(var(--app-pane-padding) - 2px);background-color:var(--color-white);border-top:1px solid var(--panel-header-border-bottom-color)}:host .actions button{margin:0 2px}:host .edit-form{background-color:var(--color-white);max-width:500px}:host .edit-form .context{background-color:var(--color-primary-2);padding:calc(var(--app-pane-padding) / 2)}:host .edit-form .context h3{padding:var(--app-pane-padding) 0 calc(var(--app-pane-padding) / 2) 0;margin:0;font-weight:var(--font-weight-light);font-size:var(--font-subhead);color:var(--color-white);display:flex;justify-content:flex-end}:host .edit-form .form-fields{padding:calc(var(--app-pane-padding) / 2)}:host .edit-form .form-fields.empty{display:none}:host .edit-form .form-field{display:flex;flex-flow:row nowrap;align-items:center}:host .edit-form .form-field eo-form-element{flex:1 1 auto}:host .edit-form .form-field eo-dynamic-property-switch{flex:0 0 auto}:host eo-stored-query{max-width:500px;display:block}:host ::ng-deep eo-form-input.title{display:block;margin-bottom:var(--app-pane-padding)}:host ::ng-deep eo-form-input.title input{width:100%;font-size:var(--font-title);font-weight:var(--font-weight-light);border:0;background-color:transparent}::ng-deep .storedQuery-delete__dialog{padding:8px;min-height:unset!important}::ng-deep .storedQuery-delete__dialog--header{font-size:1.17em!important;font-weight:400!important;color:rgba(var(--color-black-rgb),.54)!important;padding:0 0 1em!important;margin:0;background:#fff!important}::ng-deep .storedQuery-delete__dialog .storedQuery-delete__dialog_warning{color:var(--color-error)}\n"] }]
|
|
566
|
+
args: [{ selector: 'eo-stored-query-details', template: "<ng-container *ngIf=\"storedQuery\">\n <div class=\"eo-head\">\n <header class=\"eo-header\">\n <eo-icon class=\"eo-header-icon\"\n [iconSrc]=\"'assets/_default/svg/ic_saved_search.svg'\"\n [iconTitle]=\"('eo.view.navigation.storedqueries' | translate)\">\n </eo-icon>\n <div class=\"eo-header-info\">\n <h2 class=\"eo-header-title\">{{ storedQuery.name }}</h2>\n <h3 class=\"eo-header-subtitle\" translate>eo.search.title.storedqueries</h3>\n </div>\n </header>\n </div>\n\n <div class=\"eo-body\">\n\n <div class=\"form\">\n\n <ng-template #queryForm>\n <eo-stored-query [query]=\"storedQuery\" [formOnly]=\"true\" #storedQueryForm\n (onQueryLoaded)=\"onStoredQueryLoaded()\"\n (onQueryExecute)=\"onStoredQueryExecute($event)\"></eo-stored-query>\n </ng-template>\n\n <form class=\"edit-form\" [formGroup]=\"editForm.form\" *ngIf=\"editForm.form; else queryForm\">\n\n <div class=\"context dark\">\n\n <!-- title and fulltext term fields -->\n <eo-form-input class=\"title\">\n <input type=\"text\" name=\"storedQueryTitle\" maxlength=\"64\" onfocus=\"this.select()\"\n [formControlName]=\"'storedQueryTitle'\"/>\n </eo-form-input>\n\n <eo-query-scope-select [selection]=\"queryScope\" (select)=\"setQueryScope($event)\"></eo-query-scope-select>\n <div class=\"form-field\">\n <eo-form-element [skipToggle]=\"true\" [element]=\"editForm.fulltextFormControl\"\n [situation]=\"'SEARCH'\"></eo-form-element>\n <eo-dynamic-property-switch [parentFormControl]=\"editForm.fulltextFormControl\"\n (onPropertyChanged)=\"parameterChanged($event)\"></eo-dynamic-property-switch>\n </div>\n\n <!-- context type form controls -->\n <h3>{{ storedQuery.contextFolderTypes[0]?.label }}</h3>\n <div class=\"form-field\" *ngFor=\"let ctxElement of editForm.contextControls; trackBy: trackByQName\">\n <eo-form-element [element]=\"ctxElement\" [situation]=\"'SEARCH'\"></eo-form-element>\n <eo-dynamic-property-switch [parentFormControl]=\"ctxElement\"\n (onPropertyChanged)=\"parameterChanged($event)\"></eo-dynamic-property-switch>\n </div>\n </div>\n\n <!-- object type form controls -->\n <div class=\"form-fields\" [ngClass]=\"{empty: !editForm.controls?.length}\">\n @for(element of editForm.controls;track trackByQName) {\n @if (isTableDataMap.get(element)) {\n <div class=\"form-field\">\n <eo-form-element [element]=\"element\" [situation]=\"'SEARCH'\"></eo-form-element>\n <eo-dynamic-property-switch [parentFormControl]=\"element\"\n (onPropertyChanged)=\"parameterChanged($event)\"></eo-dynamic-property-switch>\n </div>\n }\n }\n </div>\n </form>\n </div>\n\n <aside class=\"aside\">\n\n <!-- favorite and share -->\n <div class=\"meta-actions\" *ngIf=\"!isNewQuery\">\n\n <ng-container *ngIf=\"isOwnQuery; else sharedWithMe\">\n <eo-icon class=\"button btn-share\" [iconSrc]=\"'assets/_default/svg/ic_share.svg'\" *ngIf=\"enableSharing\"\n [ngClass]=\"{active: storedQuery.shared || storedQuery.roles.length, editing: editingShare}\"\n (click)=\"toggleShareEdit()\"\n [iconTitle]=\"iconTitles.share\"></eo-icon>\n\n <eo-icon class=\"button btn-fav\" [iconSrc]=\"'assets/_default/svg/ic_favorite.svg'\"\n [ngClass]=\"{active: storedQuery.favorite}\"\n (click)=\"toggleFavoriteState()\"\n [iconTitle]=\"iconTitles.favor\"></eo-icon>\n </ng-container>\n\n <ng-template #sharedWithMe>\n <eo-icon class=\"sharedWithMe\" [iconSrc]=\"'assets/_default/svg/ic_share.svg'\"\n [iconTitle]=\"iconTitles.shared\"></eo-icon>\n <eo-icon class=\"sharedWithMe\" [iconSrc]=\"'assets/_default/svg/ic_favorite.svg'\"\n [iconTitle]=\"iconTitles.favored\"></eo-icon>\n </ng-template>\n\n </div>\n\n <!-- roles that share this query -->\n <div class=\"meta-roles\" *ngIf=\"!isNewQuery\" [ngClass]=\"{dark: editingShare, empty: !storedQuery.roles?.length}\">\n\n <div class=\"label\" translate>eo.storedquery.share.sharedwith</div>\n <div class=\"form-field\" *ngIf=\"rolesPicker?.codesystem?.entries\">\n <eo-codesystem [pickerTitle]=\"rolesPicker.title\"\n [codesystem]=\"rolesPicker.codesystem\"\n [multiselect]=\"true\"\n [readonly]=\"!editingShare\"\n [inputStyleClass]=\"'stored-query__share'\"\n [(ngModel)]=\"rolesPicker.value\" class=\"hide-chip-close-button\"></eo-codesystem>\n </div>\n\n <div class=\"share-actions\" *ngIf=\"editingShare\">\n <button class=\"secondary\" (click)=\"cancelShare()\" translate>eo.cta.button.cancel</button>\n <button class=\"primary\" (click)=\"share()\" translate>eo.storedquery.share.ok</button>\n </div>\n </div>\n\n <!-- queries meta info like baseparam settings -->\n <div class=\"meta-data\" *ngIf=\"restrictions?.length\">\n <div class=\"restriction\" *ngFor=\"let restriction of restrictions; trackBy: trackByIndex\">\n <div class=\"label\">{{ restriction.label }}</div>\n <div class=\"items\">\n <div *ngFor=\"let item of restriction.items; trackBy: trackByIndex\">{{ item }}</div>\n </div>\n </div>\n </div>\n\n </aside>\n\n </div>\n\n <div class=\"actions\">\n <ng-container *ngIf=\"!editForm.form; else actionEdit\">\n <button class=\"secondary btn-delete\" (click)=\"showDeleteDialog = true\"\n [disabled]=\"!isOwnQuery\" translate>eo.cta.button.delete\n </button>\n <button class=\"secondary btn-open\" (click)=\"setQueryToAppSearch()\" translate>eo.storedquery.load</button>\n <button class=\"primary grey btn-edit\" (click)=\"edit()\" [disabled]=\"!isOwnQuery\" translate>\n eo.storedquery.action.edit\n </button>\n <button class=\"primary btn-search\" [disabled]=\"storedQuery.state?.isEmpty\" (click)=\"executeQuery()\" translate>\n eo.storedquery.run\n </button>\n </ng-container>\n\n <eo-dialog [title]=\"'eo.storedquery.delete.dialog.title' | translate\" [(visible)]=\"showDeleteDialog\"\n [focusOnShow]=\"false\" [minWidth]=\"400\" [styleClass]=\"'storedQuery-delete__dialog'\">\n <div>\n @if(isStoredQueryUsed()){\n <span>{{'eo.storedquery.delete.dialog.message' | translate: {\n storedquery: this.storedQuery.name,\n name: this.info}\n }}\n </span>\n } @else {\n <span>{{'eo.storedquery.delete.dialog.message.default' | translate: {\n storedquery: this.storedQuery.name}\n }}\n </span>\n }\n </div>\n <div class=\"action-buttons flex-row\">\n <button type=\"button\" class=\"button cancel\" (click)=\"showDeleteDialog = false\"\n translate>eo.cta.button.cancel\n </button>\n <button type=\"button\" #confirmDelete (click)=\"delete(); showDeleteDialog = false\" class=\"button primary\"\n translate>eo.cta.button.delete\n </button>\n </div>\n </eo-dialog>\n\n <ng-template #actionEdit>\n <!-- action while editing the query form -->\n <button class=\"secondary btn-cancel\" (click)=\"cancelEdit()\" translate>eo.cta.button.cancel</button>\n <button class=\"primary btn-save\" (click)=\"updateStoredQuery()\" [disabled]=\"editForm.form.invalid\" translate>\n eo.storedquery.action.save\n </button>\n </ng-template>\n </div>\n\n</ng-container>\n", styles: [":host{--stored-query-aside-width: 300px;display:flex;flex:1;flex-direction:column;min-height:0;min-width:0;background:var(--panel-background-grey);height:100%;overflow-y:auto}:host .eo-head{background-color:var(--color-white);border-bottom:1px solid var(--panel-header-border-bottom-color)}:host .eo-body{overflow-y:hidden}:host .eo-body .form{overflow-y:auto;padding:var(--app-pane-padding);padding-right:calc(var(--stored-query-aside-width) + var(--app-pane-padding) * 2)}:host .eo-body .form eo-stored-query{background-color:var(--color-white);padding:var(--app-pane-padding)}:host .eo-body .aside{width:var(--stored-query-aside-width);position:absolute;right:var(--app-pane-padding);top:var(--app-pane-padding);background-color:rgba(var(--color-black-rgb),.02);border:1px solid rgba(var(--color-black-rgb),.1);box-sizing:border-box;padding:var(--app-pane-padding)}:host .eo-body .aside .meta-actions{display:flex;justify-content:flex-end;margin:0 -2px}:host .eo-body .aside .meta-actions eo-icon{margin:0 2px;padding:4px;color:var(--text-color-hint)}:host .eo-body .aside .meta-actions eo-icon.active{color:var(--color-favorite)}:host .eo-body .aside .meta-actions eo-icon.editing{background-color:var(--color-primary-2);color:var(--color-white);border-radius:2px 2px 0 0}:host .eo-body .aside .meta-actions eo-icon.sharedWithMe{background-color:var(--text-color-hint);color:var(--color-white);border-radius:2px}:host .eo-body .aside .meta-roles.dark{background-color:var(--color-primary-2);color:var(--color-white);border-radius:2px;padding:calc(var(--app-pane-padding) / 2);margin-bottom:var(--app-pane-padding)}:host .eo-body .aside .meta-roles.dark .actions{display:flex}:host .eo-body .aside .meta-roles.dark .label{display:none}:host .eo-body .aside .meta-roles.dark .form-field{background-color:rgba(var(--color-white-rgb),.2)}:host .eo-body .aside .meta-roles .form-field{background-color:rgba(var(--color-white-rgb),.2);border:1px solid rgba(var(--color-black-rgb),.1);padding:2px 2px 4px 4px;margin-bottom:calc(var(--app-pane-padding) / 2)}:host .eo-body .aside .meta-roles .form-field eo-codesystem.hide-chip-close-button ::ng-deep .readonly yvc-autocomplete yvc-chips-list ul.chips li.chip span+.yvc-icon{display:none}:host .eo-body .aside .meta-roles .label{color:var(--text-color-caption);font-style:italic;margin-bottom:calc(var(--app-pane-padding) / 4)}:host .eo-body .aside .meta-roles .share-actions{display:flex;justify-content:flex-end;margin:0 calc(var(--app-pane-padding) / 8 * -1)}:host .eo-body .aside .meta-roles .share-actions button{margin:0 calc(var(--app-pane-padding) / 8);padding:calc(var(--app-pane-padding) / 4) calc(var(--app-pane-padding) / 2)}:host .eo-body .aside .meta-roles.empty:not(.dark) .label,:host .eo-body .aside .meta-roles.empty:not(.dark) .form-field{display:none}:host .eo-body .aside .meta-data{order:1;flex:1 1 40%;margin:0 0 var(--app-pane-padding) 0;display:table;border-collapse:collapse}:host .eo-body .aside .meta-data .restriction{display:table-row}:host .eo-body .aside .meta-data .restriction .label{display:table-cell;padding-right:calc(var(--app-pane-padding) / 2);color:var(--text-color-caption);font-style:italic}:host .eo-body .aside .meta-data .restriction .items{display:table-cell;border-left:1px solid rgba(var(--color-black-rgb),.1);padding:0 0 calc(var(--app-pane-padding) / 2) calc(var(--app-pane-padding) / 2)}:host .actions{display:flex;flex-flow:row;justify-content:flex-end;padding:var(--app-pane-padding) calc(var(--app-pane-padding) - 2px);background-color:var(--color-white);border-top:1px solid var(--panel-header-border-bottom-color)}:host .actions button{margin:0 2px}:host .edit-form{background-color:var(--color-white);max-width:500px}:host .edit-form .context{background-color:var(--color-primary-2);padding:calc(var(--app-pane-padding) / 2)}:host .edit-form .context h3{padding:var(--app-pane-padding) 0 calc(var(--app-pane-padding) / 2) 0;margin:0;font-weight:var(--font-weight-light);font-size:var(--font-subhead);color:var(--color-white);display:flex;justify-content:flex-end}:host .edit-form .form-fields{padding:calc(var(--app-pane-padding) / 2)}:host .edit-form .form-fields.empty{display:none}:host .edit-form .form-field{display:flex;flex-flow:row nowrap;align-items:center}:host .edit-form .form-field eo-form-element{flex:1 1 auto}:host .edit-form .form-field eo-dynamic-property-switch{flex:0 0 auto}:host eo-stored-query{max-width:500px;display:block}:host ::ng-deep eo-form-input.title{display:block;margin-bottom:var(--app-pane-padding)}:host ::ng-deep eo-form-input.title input{width:100%;font-size:var(--font-title);font-weight:var(--font-weight-light);border:0;background-color:transparent}::ng-deep .storedQuery-delete__dialog{padding:8px;min-height:unset!important}::ng-deep .storedQuery-delete__dialog--header{font-size:1.17em!important;font-weight:400!important;color:rgba(var(--color-black-rgb),.54)!important;padding:0 0 1em!important;margin:0;background:#fff!important}::ng-deep .storedQuery-delete__dialog .storedQuery-delete__dialog_warning{color:var(--color-error)}\n"] }]
|
|
563
567
|
}], ctorParameters: () => [{ type: i1.Router }, { type: i2.SearchService }, { type: i2.UserService }, { type: i2.SystemService }, { type: i3.SelectionService }, { type: i4.PendingChangesService }, { type: i2.StoredQueriesService }, { type: i5.ObjectFormHelperService }, { type: i0.ElementRef }, { type: i2.TranslateService }, { type: i2.EventService }, { type: i6.AppSearchService }], propDecorators: { storedQueryForm: [{
|
|
564
568
|
type: ViewChild,
|
|
565
569
|
args: ['storedQueryForm']
|
|
@@ -568,4 +572,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
|
|
|
568
572
|
}], notifyList: [{
|
|
569
573
|
type: Output
|
|
570
574
|
}] } });
|
|
571
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmVkLXF1ZXJ5LWRldGFpbHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvc3RvcmVkLXF1ZXJ5L3N0b3JlZC1xdWVyeS1kZXRhaWxzL3N0b3JlZC1xdWVyeS1kZXRhaWxzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZW8tZnJhbWV3b3JrL3N0b3JlZC1xdWVyeS9zdG9yZWQtcXVlcnktZGV0YWlscy9zdG9yZWQtcXVlcnktZGV0YWlscy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDcEcsT0FBTyxFQUFDLGtCQUFrQixFQUFFLFVBQVUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTlELE9BQU8sRUFDTCxVQUFVLEVBS1YsWUFBWSxFQUNaLFdBQVcsRUFFWCxvQkFBb0IsRUFDcEIsV0FBVyxFQUlYLEtBQUssRUFDTixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUMsWUFBWSxFQUFFLGNBQWMsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ25FLE9BQU8sRUFBYSxRQUFRLEVBQUUsRUFBRSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuQyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbURBQW1ELENBQUM7QUFLakYsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHVEQUF1RCxDQUFDO0FBQ3RGLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHVDQUF1QyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBWWhFLElBQU0sMkJBQTJCLEdBQWpDLE1BQU0sMkJBQTJCO0lBOEJ0QyxJQUNJLEtBQUssQ0FBQyxDQUFjO1FBQ3RCLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkIsQ0FBQztJQUlELFlBQW9CLE1BQWMsRUFDeEIsYUFBNEIsRUFDNUIsV0FBd0IsRUFDeEIsYUFBNEIsRUFDNUIsU0FBMkIsRUFDM0IsY0FBcUMsRUFDckMsb0JBQTBDLEVBQzFDLGlCQUEwQyxFQUMxQyxPQUFtQixFQUNuQixTQUEyQixFQUMzQixZQUEwQixFQUMxQixnQkFBa0M7UUFYeEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUN4QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixtQkFBYyxHQUFkLGNBQWMsQ0FBdUI7UUFDckMseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQUMxQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQXlCO1FBQzFDLFlBQU8sR0FBUCxPQUFPLENBQVk7UUFDbkIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQTlDcEMscUJBQWdCLEdBQUcsa0JBQWtCLENBQUM7UUFDdEMsd0JBQW1CLEdBQUcscUJBQXFCLENBQUM7UUFDNUMsdUJBQWtCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBaUJ2RyxnQkFBVyxHQUFHO1lBQ1osS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDO1lBQ3JELFVBQVUsRUFBRSxJQUFJO1lBQ2hCLEtBQUssRUFBRSxJQUFJO1NBQ1osQ0FBQztRQUNGLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUN6QixTQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ1YsbUJBQWMsR0FBc0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQU9wQyxlQUFVLEdBQTZCLElBQUksWUFBWSxFQUFjLENBQUM7UUFnQjlFLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxjQUFjLEVBQUUsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxDQUFDO0lBQ25HLENBQUM7SUFFTSxhQUFhLENBQUMsS0FBaUI7UUFDcEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQy9CLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQzFCLENBQUM7SUFFRCxRQUFRLENBQUMsQ0FBYztRQUNyQixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsd0NBQXdDO1FBQ3hDLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxZQUFZLFdBQVcsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUMxQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQy9DLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdEYsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDM0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUNqQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsc0JBQXNCLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUV0RyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO2dCQUNkLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7Z0JBQ3BGLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDWixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztnQkFDdEQsVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFDZCxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtnQkFDL0UsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ1YsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRU8sWUFBWTtRQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ25FLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN2RCxDQUFDO0lBQ0gsQ0FBQztJQUVPLGFBQWE7UUFDbkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxJQUFJO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDeEIsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztZQUN4RCxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDO0lBQ0gsQ0FBQztJQUVELG1CQUFtQixDQUFDLFNBQVM7UUFDM0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDL0QsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztJQUN6QyxDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1FBQ2hELElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsU0FBUyxDQUNuRSxDQUFDLENBQUMsRUFBRTtZQUNGLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQzdELENBQUMsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDLENBQ2pGLENBQUM7UUFDRixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztJQUM1QixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1FBQ2hELElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxpQkFBaUI7UUFDZixJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNmLElBQUksTUFBTSxDQUFDO1FBQ1gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNqRSxJQUFJLFFBQVEsQ0FBQyxZQUFZLEVBQUUsV0FBVyxLQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQy9ELElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksU0FBUyxDQUFDLEtBQUssR0FBRyxDQUFDO2dCQUM5RCxNQUFNLEdBQUcsSUFBSSxDQUFDO2dCQUNkLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDSixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksQ0FBQyxvQkFBb0I7YUFDdEIsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7YUFDdEMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztRQUN6RCxDQUFDLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsb0NBQW9DLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEYsQ0FBQztJQUVELG1CQUFtQjtRQUNqQixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDO1FBQ3ZELElBQUksQ0FBQyxvQkFBb0I7YUFDdEIsZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7YUFDakMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2IsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDaEUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGtDQUFrQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNwQixDQUFDO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUMsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7SUFFRCxtQkFBbUI7UUFDakIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELGdDQUFnQztJQUNoQyxpQkFBaUI7UUFFZixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQzlHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO2FBQ2xCLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNYLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsQ0FBQztpQkFBTSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLE9BQU8sR0FBbUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6RyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0RCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFTCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUV6RSxvREFBb0Q7UUFDcEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ3ZELE1BQU0sb0JBQW9CLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxRQUFRLEtBQUssWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2pILElBQUksb0JBQW9CLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsY0FBYyxHQUFHLG9CQUFvQixDQUFDLGNBQWMsQ0FBQztnQkFDckYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxHQUFHLG9CQUFvQixDQUFDLFFBQVEsQ0FBQztnQkFDekUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsVUFBVSxHQUFHLG9CQUFvQixDQUFDLFVBQVUsQ0FBQztnQkFDN0UsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxHQUFHLG9CQUFvQixDQUFDLFdBQVcsQ0FBQztnQkFDL0UsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLG9CQUFvQixDQUFDLE1BQU0sQ0FBQztnQkFDckUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsYUFBYSxHQUFHLG9CQUFvQixDQUFDLGFBQWEsQ0FBQztZQUNyRixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsb0JBQW9CO2FBQ3RCLGVBQWUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO2FBQ2pDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO1lBQzlCLElBQUksQ0FBQyxLQUFLLEdBQUcsa0JBQWtCLENBQUM7WUFDaEMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUMsQ0FBQyxDQUFDO1FBQ3RGLENBQUMsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsZ0JBQWdCLENBQUMsS0FBd0M7UUFFdkQsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdEIsNEJBQTRCO1lBQzVCLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pHLENBQUM7YUFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM3Qix3QkFBd0I7WUFDeEIsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNyRCxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNWLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN6QyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFTyxXQUFXO1FBRWpCLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekQsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBR2QsVUFBVSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUU1QixNQUFNLEVBQUUsR0FBNkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBNkIsQ0FBQztZQUN2RyxJQUFJLFdBQVcsQ0FBQztZQUNoQixJQUFJLEVBQUUsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUN6QyxNQUFNLEVBQUUsR0FBc0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQXNCLENBQUM7Z0JBQ3pFLFdBQVcsR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDO1lBQ2xDLENBQUM7WUFDRCxJQUFJLFdBQVcsSUFBSSxXQUFXLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQzdDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDeEIsQ0FBQztpQkFBTSxDQUFDO2dCQUVOLFFBQVEsUUFBUSxFQUFFLENBQUM7b0JBQ2pCLEtBQUssSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQzt3QkFDM0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7d0JBQzFELE1BQU07b0JBQ1IsQ0FBQztvQkFDRCxLQUFLLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7d0JBQzlCLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO3dCQUN6RixNQUFNO29CQUNSLENBQUM7b0JBQ0QsT0FBTyxDQUFDLENBQUMsQ0FBQzt3QkFDUixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7d0JBQ3ZELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzs0QkFDakMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDckIsQ0FBQztvQkFDSCxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssb0JBQW9CLENBQUMsS0FBYTtRQUV4QyxJQUFJLENBQUM7WUFDSCxJQUFJLEtBQXdCLENBQUM7WUFDN0IsdUNBQXVDO1lBQ3ZDLElBQUksS0FBSyxLQUFLLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUM1QyxLQUFLLEdBQUc7b0JBQ04sS0FBSyxFQUFFLEtBQUs7b0JBQ1osSUFBSSxFQUFFLEtBQUs7aUJBQ1osQ0FBQztZQUNKLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLEVBQUUsR0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUE4QixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQXVCLENBQUM7Z0JBQ25ILE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUM7Z0JBQzdCLEtBQUssR0FBRztvQkFDTixLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUs7b0JBQ2YsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJO2lCQUNkLENBQUM7WUFDSixDQUFDO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFTyxhQUFhO1FBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUc7WUFDZCxJQUFJLEVBQUUsSUFBSTtZQUNWLG1CQUFtQixFQUFFLElBQUk7WUFDekIsUUFBUSxFQUFFLEVBQUU7WUFDWixlQUFlLEVBQUUsRUFBRTtTQUNwQixDQUFDO0lBQ0osQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLENBQUMsUUFBUTthQUNWLElBQUk7YUFDSixZQUFZO2FBQ1osU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVPLGNBQWM7UUFFcEIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUVyQyxJQUFJLElBQUksR0FBRyxJQUFJLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNuQyxJQUFJLE9BQU8sR0FBRyxJQUFJLGtCQUFrQixDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDOUQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRXhDLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLHNCQUFzQixDQUNsRixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBQyxFQUNwRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FDdEIsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsR0FBRyxVQUFVLENBQUM7WUFFL0MsK0JBQStCO1lBQy9CLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2hELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBRXRELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUMxRSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVE7cUJBQ25CLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzNFLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZTtxQkFDMUIsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3RSxDQUFDO1lBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQzFCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLG9FQUFvRTtRQUNwRSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN4QyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsNEJBQTRCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FDeEcsR0FBRyxDQUFDLENBQUMsUUFBZSxFQUFFLEVBQUU7Z0JBQ3RCLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQ25CLCtFQUErRTtvQkFDL0UsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO3dCQUN4QixJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQzs0QkFDZixDQUFDLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQzt3QkFDckIsQ0FBQzt3QkFDRCxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQzs0QkFDZixDQUFDLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQzt3QkFDckIsQ0FBQzt3QkFDRCxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNqQyxJQUFJLEVBQUUsRUFBRSxDQUFDOzRCQUNQLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDbEMsQ0FBQztvQkFDSCxDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFBO1lBQ0osQ0FBQyxDQUFDLENBQ0gsQ0FBQyxDQUFBO1FBQ0osQ0FBQztRQUNELG9DQUFvQztRQUNwQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDL0MsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQzNILEdBQUcsQ0FBQyxDQUFDLFFBQWUsRUFBRSxFQUFFO2dCQUN0QixRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUNuQixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNqQyxJQUFJLEVBQUUsRUFBRSxDQUFDO3dCQUNQLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDekMsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQTtZQUNKLENBQUMsQ0FBQyxDQUNILENBQUMsQ0FBQTtRQUNKLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFTyxVQUFVO1FBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3ZELElBQUksQ0FBQyxhQUFhO2lCQUNmLFFBQVEsRUFBRTtpQkFDVixTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ2YsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxHQUFHO29CQUM1QixPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO3dCQUNyQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7d0JBQ1gsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJO3dCQUNoQixxQkFBcUIsRUFBRSxJQUFJLENBQUMsSUFBSTt3QkFDaEMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO3FCQUNoQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDcEMsQ0FBQTtZQUNILENBQUMsQ0FDQSxDQUFBO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxZQUFZLEdBQWtCLEVBQUUsQ0FBQztRQUVyQyxtQkFBbUI7UUFDbkIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM1RCxZQUFZLENBQUMsSUFBSSxDQUFDO2dCQUNoQixLQUFLLEVBQUUsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJO2dCQUNuQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQWlDLENBQUM7Z0JBQ2hFLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO2FBQ2hELENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCwrQkFBK0I7UUFDL0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDaEQsSUFBSSxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUVoRSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO2dCQUM5QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsR0FBRyxLQUFLLENBQUMsQ0FBQztnQkFFNUUsUUFBUSxLQUFLLEVBQUUsQ0FBQztvQkFDZCxLQUFLLFdBQVcsQ0FBQyxXQUFXLENBQUMsYUFBYTt3QkFDeEMsWUFBWSxDQUFDLElBQUksQ0FBQzs0QkFDaEIsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQzt5QkFDaEcsQ0FBQyxDQUFDO3dCQUNILE1BQU07b0JBQ1IsS0FBSyxXQUFXLENBQUMsV0FBVyxDQUFDLFFBQVE7d0JBQ25DLFlBQVksQ0FBQyxJQUFJLENBQUM7NEJBQ2hCLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQzt5QkFDekMsQ0FBQyxDQUFDO3dCQUNILE1BQU07b0JBQ1IsS0FBSyxXQUFXLENBQUMsV0FBVyxDQUFDLFFBQVE7d0JBQ25DLFlBQVksQ0FBQyxJQUFJLENBQUM7NEJBQ2hCLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMseUJBQXlCLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO3lCQUM3RixDQUFDLENBQUM7d0JBQ0gsTUFBTTtvQkFDUixLQUFLLFdBQVcsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDO29CQUNyQyxLQUFLLFdBQVcsQ0FBQyxXQUFXLENBQUMsUUFBUTt3QkFDbkMsWUFBWSxDQUFDLElBQUksQ0FBQzs0QkFDaEIsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7eUJBQzFELENBQUMsQ0FBQzt3QkFDSCxNQUFNO29CQUNSLEtBQUssV0FBVyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUM7b0JBQ3JDLEtBQUssV0FBVyxDQUFDLFdBQVcsQ0FBQyxRQUFRO3dCQUNuQyxJQUFJLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7NkJBQ3pELFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7NEJBQ3ZDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO3lCQUNoRCxDQUFDLENBQUMsQ0FBQzt3QkFDTixNQUFNO2dCQUNWLENBQUM7WUFDSCxDQUFDO1FBRUgsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBRUQscUJBQXFCLENBQUMsTUFBb0I7UUFDeEMsUUFBUSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDeEIsS0FBSyxZQUFZLENBQUMsUUFBUSxDQUFDLEtBQUs7Z0JBQzlCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsc0JBQXNCLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1lBQzNFLEtBQUssWUFBWSxDQUFDLFFBQVEsQ0FBQyxLQUFLO2dCQUM5QixPQUFPLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQzFFLEtBQUssWUFBWSxDQUFDLFFBQVEsQ0FBQyxxQkFBcUI7Z0JBQzlDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsYUFBYSxDQUFDLEVBQUUsQ0FBQztZQUN4SSxLQUFLLFlBQVksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCO2dCQUN6QyxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsK0JBQStCLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxFQUFFLENBQUM7WUFDbkksS0FBSyxZQUFZLENBQUMsUUFBUSxDQUFDLGFBQWE7Z0JBQ3RDLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQywrQkFBK0IsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLEVBQUUsQ0FBQztZQUNuSTtnQkFDRSxPQUFPLElBQUksTUFBTSxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxFQUFFLENBQUM7UUFDL0YsQ0FBQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssYUFBYSxDQUFDLFdBQVc7UUFFL0Isc0ZBQXNGO1FBQ3RGLGtGQUFrRjtRQUNsRiwwQkFBMEI7UUFDMUIsV0FBVyxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDO1FBRXJDLElBQUksV0FBVyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUNqQyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbEUsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUM5QixXQUFXLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsMEJBQTBCLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNuRyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sV0FBVyxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUN6QixPQUFPLFdBQVcsQ0FBQyxhQUFhLENBQUM7WUFDbkMsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sOERBQThEO1lBQzlELElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzRCwrRUFBK0U7WUFDL0UsOEVBQThFO1lBQzlFLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBRVgsMEJBQTBCO2dCQUMxQixJQUFJLE1BQU0sQ0FBQyxRQUFRLEtBQUssWUFBWSxDQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLFVBQVUsS0FBSyxJQUFJLEVBQUUsQ0FBQztvQkFDbEYsV0FBVyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7Z0JBQ25DLENBQUM7cUJBQU0sQ0FBQztvQkFDTixPQUFPLFdBQVcsQ0FBQyxhQUFhLENBQUM7Z0JBQ25DLENBQUM7Z0JBRUQsV0FBVyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLG9CQUFvQixDQUN6RCxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQzdDLFdBQVcsQ0FBQyxJQUFJLENBQ2pCLENBQUM7WUFDSixDQUFDO2lCQUFNLElBQUksV0FBVyxDQUFDLEtBQUssS0FBSyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDL0QsV0FBVyxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUM7Z0JBQzlCLE9BQU8sV0FBVyxDQUFDLGFBQWEsQ0FBQztZQUNuQyxDQUFDO1FBQ0gsQ0FBQztRQUNELG1CQUFtQjtRQUNuQixNQUFNLEtBQUssR0FBUSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDekQsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxvQkFBb0IsQ0FBQyxRQUFRLElBQUksV0FBVyxDQUFDLEtBQUssS0FBSyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUNySixDQUFDLENBQUMsQ0FBQztRQUNILG1FQUFtRTtRQUNuRSxXQUFXLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFFL0IscURBQXFEO1FBQ3JELG1EQUFtRDtRQUNuRCwwQ0FBMEM7UUFDMUMsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsb0JBQW9CLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFRCxtQkFBbUI7UUFDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFDLE9BQU8sRUFBRSxFQUFDLEtBQUssRUFBRSxRQUFRLEVBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsb0JBQW9CLENBQUMsR0FBRztRQUN0QixNQUFNLFFBQVEsR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sYUFBYSxHQUFxQixFQUFDLFdBQVcsRUFBRSxFQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUMsRUFBQyxDQUFDO1FBQzNFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLENBQUMsVUFBVSxHQUFHO1lBQ2hCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBQztZQUMzRCxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsZ0NBQWdDLENBQUM7WUFDaEUsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLDRCQUE0QixDQUFDO1lBQzNELE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBaUMsQ0FBQztTQUNuRSxDQUFBO0lBQ0gsQ0FBQztJQUdELFFBQVE7UUFDTixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU07YUFDbEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUMxQixTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDYixJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQztRQUNMLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQUssRUFBRSxJQUFJO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQUssRUFBRSxJQUFJO1FBQ3RCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsV0FBVyxDQUFDLE9BQU87UUFDakIsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNwRSxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMscUJBQXFCLENBQUMsV0FBVyxDQUFDO1FBQzlELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFOUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN6QyxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQyxlQUFlLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQztJQUNsRCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssa0JBQWtCO1FBQ3hCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUN2QyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQzlELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs4R0F6bUJVLDJCQUEyQjtrR0FBM0IsMkJBQTJCLHNQQ3pDeEMsdXpQQXlLQTs7QURoSWEsMkJBQTJCO0lBTnZDLFlBQVksRUFBRTtHQU1GLDJCQUEyQixDQTJtQnZDOzsyRkEzbUJZLDJCQUEyQjtrQkFMdkMsU0FBUzsrQkFDRSx5QkFBeUI7MlpBWUwsZUFBZTtzQkFBNUMsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBdUJ4QixLQUFLO3NCQURSLEtBQUs7Z0JBS0ksVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7VW50eXBlZEZvcm1Db250cm9sLCBWYWxpZGF0b3JzfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge05hdmlnYXRpb25FeHRyYXMsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7XG4gIEVuYWlvRXZlbnQsXG4gIEV2ZW50U2VydmljZSxcbiAgSVN0b3JlZFF1ZXJ5UGFyYW0sXG4gIE9yZ1JvbGUsXG4gIFF1ZXJ5U2NvcGUsXG4gIFNlYXJjaEZpbHRlcixcbiAgU2VhcmNoUXVlcnksXG4gIFNlYXJjaFNlcnZpY2UsXG4gIFN0b3JlZFF1ZXJpZXNTZXJ2aWNlLFxuICBTdG9yZWRRdWVyeSxcbiAgU3lzdGVtU2VydmljZSxcbiAgVHJhbnNsYXRlU2VydmljZSxcbiAgVXNlclNlcnZpY2UsXG4gIFV0aWxzXG59IGZyb20gJ0Blby1zZGsvY29yZSc7XG5pbXBvcnQge1VudGlsRGVzdHJveSwgdW50aWxEZXN0cm95ZWR9IGZyb20gJ0BuZ25lYXQvdW50aWwtZGVzdHJveSc7XG5pbXBvcnQge09ic2VydmFibGUsIGZvcmtKb2luLCBvZn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge3RhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtQZW5kaW5nQ2hhbmdlc1NlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2VvLWZyYW1ld29yay1jb3JlL3BlbmRpbmctY2hhbmdlcy9wZW5kaW5nLWNoYW5nZXMuc2VydmljZSc7XG5pbXBvcnQge0xvY2FsZURhdGVQaXBlfSBmcm9tICcuLi8uLi8uLi9lby1mcmFtZXdvcmstY29yZS9waXBlcy9sb2NhbGUtZGF0ZS5waXBlJztcbmltcG9ydCB7U2VsZWN0aW9uU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vZW8tZnJhbWV3b3JrLWNvcmUvc2VsZWN0aW9uL3NlbGVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7T2JqZWN0Rm9ybUhlbHBlclNlcnZpY2V9IGZyb20gJy4uLy4uL29iamVjdC1mb3JtL29iamVjdC1mb3JtLWhlbHBlci5zZXJ2aWNlJztcbmltcG9ydCB7T2JqZWN0Rm9ybUNvbnRyb2x9IGZyb20gJy4uLy4uL29iamVjdC1mb3JtL29iamVjdC1mb3JtL29iamVjdC1mb3JtLWNvbnRyb2wnO1xuaW1wb3J0IHtPYmplY3RGb3JtQ29udHJvbFdyYXBwZXJ9IGZyb20gJy4uLy4uL29iamVjdC1mb3JtL29iamVjdC1mb3JtL29iamVjdC1mb3JtLWNvbnRyb2wtd3JhcHBlcic7XG5pbXBvcnQge09iamVjdEZvcm1Hcm91cH0gZnJvbSAnLi4vLi4vb2JqZWN0LWZvcm0vb2JqZWN0LWZvcm0vb2JqZWN0LWZvcm0tZ3JvdXAubW9kZWwnO1xuaW1wb3J0IHtVdGlsaXRpZXNTZXJ2aWNlfSBmcm9tICcuLi8uLi91dGlsL3NlcnZpY2VzL3V0aWxpdGllcy5zZXJ2aWNlJztcbmltcG9ydCB7RWRpdEZvcm0sIE5vdGlmeUxpc3QsIFJlc3RyaWN0aW9ufSBmcm9tICcuLi9zdG9yZWQtcXVlcnkuaW50ZXJmYWNlJztcbmltcG9ydCB7U3RvcmVkUXVlcnlDb21wb25lbnR9IGZyb20gJy4uL3N0b3JlZC1xdWVyeS9zdG9yZWQtcXVlcnkuY29tcG9uZW50JztcbmltcG9ydCB7V2lkZ2V0R3JpZFdvcmtzcGFjZX0gZnJvbSAnQHl1dXZpcy93aWRnZXQtZ3JpZCc7XG5pbXBvcnQge0FwcFNlYXJjaFNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2VvLWZyYW1ld29yay1jb3JlJztcblxuQFVudGlsRGVzdHJveSgpXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdlby1zdG9yZWQtcXVlcnktZGV0YWlscycsXG4gIHRlbXBsYXRlVXJsOiAnLi9zdG9yZWQtcXVlcnktZGV0YWlscy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3N0b3JlZC1xdWVyeS1kZXRhaWxzLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgU3RvcmVkUXVlcnlEZXRhaWxzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBwcml2YXRlIEZPUk1fSU5QVVRfVElUTEUgPSAnc3RvcmVkUXVlcnlUaXRsZSc7XG4gIHByaXZhdGUgRk9STV9JTlBVVF9GVUxMVEVYVCA9ICdzdG9yZWRRdWVyeUZ1bGx0ZXh0JztcbiAgcHJpdmF0ZSBCQVNFX1BBUkFNU19GSUVMRFMgPSBPYmplY3Qua2V5cyhTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUykubWFwKGsgPT4gU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVNba10pO1xuICBwcml2YXRlIGRhdGVQaXBlOiBMb2NhbGVEYXRlUGlwZTtcbiAgcHJpdmF0ZSBwZW5kaW5nVGFza0lkOiBzdHJpbmc7XG5cbiAgQFZpZXdDaGlsZCgnc3RvcmVkUXVlcnlGb3JtJykgc3RvcmVkUXVlcnlGb3JtOiBTdG9yZWRRdWVyeUNvbXBvbmVudDtcblxuICBpY29uVGl0bGVzOiBhbnk7XG4gIHN0b3JlZFF1ZXJ5OiBTdG9yZWRRdWVyeTtcbiAgcXVlcnlTY29wZTogUXVlcnlTY29wZTtcbiAgZWRpdEZvcm06IEVkaXRGb3JtO1xuICByZXN0cmljdGlvbnM6IFJlc3RyaWN0aW9uW107XG4gIGVkaXRpbmdTaGFyZTogYm9vbGVhbjtcbiAgaXNOZXdRdWVyeTogYm9vbGVhbjtcbiAgaXNPd25RdWVyeTogYm9vbGVhbjtcbiAgZW5hYmxlU2hhcmluZzogYm9vbGVhbjtcbiAgc3lzdGVtUm9sZXM6IE9yZ1JvbGVbXTtcbiAgd29ya3NwYWNlczogV2lkZ2V0R3JpZFdvcmtzcGFjZVtdO1xuICByb2xlc1BpY2tlciA9IHtcbiAgICB0aXRsZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8uc3RvcmVkcXVlcnkucm9sZXMnKSxcbiAgICBjb2Rlc3lzdGVtOiBudWxsLFxuICAgIHZhbHVlOiBudWxsXG4gIH07XG4gIHNob3dEZWxldGVEaWFsb2cgPSBmYWxzZTtcbiAgaW5mbyA9ICcnO1xuICBpc1RhYmxlRGF0YU1hcDogTWFwPGFueSwgYm9vbGVhbj4gPSBuZXcgTWFwKCk7XG5cbiAgQElucHV0KClcbiAgc2V0IHF1ZXJ5KHE6IFN0b3JlZFF1ZXJ5KSB7XG4gICAgdGhpcy5zZXRRdWVyeShxKTtcbiAgfVxuXG4gIEBPdXRwdXQoKSBub3RpZnlMaXN0OiBFdmVudEVtaXR0ZXI8Tm90aWZ5TGlzdD4gPSBuZXcgRXZlbnRFbWl0dGVyPE5vdGlmeUxpc3Q+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHNlYXJjaFNlcnZpY2U6IFNlYXJjaFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzeXN0ZW1TZXJ2aWNlOiBTeXN0ZW1TZXJ2aWNlLFxuICAgIHByaXZhdGUgc2VsZWN0aW9uOiBTZWxlY3Rpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcGVuZGluZ0NoYW5nZXM6IFBlbmRpbmdDaGFuZ2VzU2VydmljZSxcbiAgICBwcml2YXRlIHN0b3JlZFF1ZXJpZXNTZXJ2aWNlOiBTdG9yZWRRdWVyaWVzU2VydmljZSxcbiAgICBwcml2YXRlIGZvcm1IZWxwZXJTZXJ2aWNlOiBPYmplY3RGb3JtSGVscGVyU2VydmljZSxcbiAgICBwcml2YXRlIGVsZW1SZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBldmVudFNlcnZpY2U6IEV2ZW50U2VydmljZSxcbiAgICBwcml2YXRlIGFwcFNlYXJjaFNlcnZpY2U6IEFwcFNlYXJjaFNlcnZpY2VcbiAgKSB7XG5cbiAgICB0aGlzLmRhdGVQaXBlID0gbmV3IExvY2FsZURhdGVQaXBlKHRyYW5zbGF0ZSk7XG4gICAgdGhpcy5mZXRjaFJvbGVzKCk7XG4gICAgdGhpcy53b3Jrc3BhY2VzID0gdGhpcy51c2VyU2VydmljZT8uZ2V0Q3VycmVudFVzZXIoKT8udXNlclNldHRpbmdzPy53b3Jrc3BhY2VPcHRpb25zPy53b3Jrc3BhY2VzO1xuICB9XG5cbiAgcHVibGljIHNldFF1ZXJ5U2NvcGUoc2NvcGU6IFF1ZXJ5U2NvcGUpIHtcbiAgICB0aGlzLnN0b3JlZFF1ZXJ5LnNjb3BlID0gc2NvcGU7XG4gICAgdGhpcy5xdWVyeVNjb3BlID0gc2NvcGU7XG4gIH1cblxuICBzZXRRdWVyeShxOiBTdG9yZWRRdWVyeSkge1xuICAgIHRoaXMuZWRpdGluZ1NoYXJlID0gZmFsc2U7XG4gICAgdGhpcy5yZXNldEVkaXRGb3JtKCk7XG4gICAgLy8gZ3JhYiBtZXRhIGluZm9ybWF0aW9uIGFib3V0IHRoZSBxdWVyeVxuICAgIHRoaXMuc3RvcmVkUXVlcnkgPSBxO1xuICAgIGlmIChxIGluc3RhbmNlb2YgU3RvcmVkUXVlcnkpIHtcbiAgICAgIHRoaXMucXVlcnlTY29wZSA9IHEuc2NvcGU7XG4gICAgICBjb25zdCB1c2VyID0gdGhpcy51c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpO1xuICAgICAgdGhpcy5pc05ld1F1ZXJ5ID0gcS5pc05ldygpO1xuICAgICAgdGhpcy5pc093blF1ZXJ5ID0gdGhpcy5pc05ld1F1ZXJ5IHx8IHEudXNlci50b0xvd2VyQ2FzZSgpID09PSB1c2VyLm5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgIHRoaXMucmVzdHJpY3Rpb25zID0gdGhpcy5nZXRSZXN0cmljdGlvbnMoKTtcbiAgICAgIHRoaXMucm9sZXNQaWNrZXIudmFsdWUgPSBxLnJvbGVzO1xuICAgICAgdGhpcy5lbmFibGVTaGFyaW5nID0gdXNlci5oYXNQcml2aWxlZ2UoJ1NIQVJFX1NUT1JFRF9RVUVSSUVTJykgJiYgdGhpcy5pc093blF1ZXJ5ICYmICF0aGlzLmlzTmV3UXVlcnk7XG5cbiAgICAgIGlmIChxLmlzTmV3KCkpIHtcbiAgICAgICAgdGhpcy5zdG9yZWRRdWVyeS5uYW1lID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8uc2VhcmNoLnN0b3JlZHF1ZXJpZXMubmV3LnRpdGxlJyk7XG4gICAgICAgIHRoaXMuZWRpdCgpO1xuICAgICAgICB0aGlzLnN0YXJ0UGVuZGluZygpO1xuICAgICAgICB0aGlzLm5vdGlmeUxpc3QuZW1pdCh7dW5zZWxlY3Q6IHRydWUsIHVwZGF0ZTogZmFsc2V9KTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5lbGVtUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignW25hbWU9XCJzdG9yZWRRdWVyeVRpdGxlXCJdJykuZm9jdXMoKVxuICAgICAgICB9LCA1MDApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRQZW5kaW5nKCkge1xuICAgIGlmICghdGhpcy5wZW5kaW5nQ2hhbmdlcy5oYXNQZW5kaW5nVGFzayh0aGlzLnBlbmRpbmdUYXNrSWQgfHwgJyAnKSkge1xuICAgICAgdGhpcy5wZW5kaW5nVGFza0lkID0gdGhpcy5wZW5kaW5nQ2hhbmdlcy5zdGFydFRhc2soKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpbmlzaFBlbmRpbmcoKSB7XG4gICAgdGhpcy5wZW5kaW5nQ2hhbmdlcy5maW5pc2hUYXNrKHRoaXMucGVuZGluZ1Rhc2tJZCk7XG4gIH1cblxuICBlZGl0KCkge1xuICAgIGlmICghdGhpcy5lZGl0Rm9ybS5mb3JtKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5jcmVhdGVFZGl0Rm9ybSgpO1xuICAgICAgICB0aGlzLm5vdGlmeUxpc3QuZW1pdCh7dW5zZWxlY3Q6IGZhbHNlLCB1cGRhdGU6IHRydWV9KTtcbiAgICAgIH0sIDApO1xuICAgIH1cbiAgfVxuXG4gIG9uRm9ybVN0YXR1c0NoYW5nZWQoZm9ybVN0YXRlKSB7XG4gICAgZm9ybVN0YXRlLmRpcnR5ID8gdGhpcy5zdGFydFBlbmRpbmcoKSA6IHRoaXMuZmluaXNoUGVuZGluZygpO1xuICB9XG5cbiAgdG9nZ2xlU2hhcmVFZGl0KCkge1xuICAgIHRoaXMuZWRpdGluZ1NoYXJlID0gIXRoaXMuZWRpdGluZ1NoYXJlO1xuICB9XG5cbiAgc2hhcmUoKSB7XG4gICAgdGhpcy5zdG9yZWRRdWVyeS5yb2xlcyA9IHRoaXMucm9sZXNQaWNrZXIudmFsdWU7XG4gICAgdGhpcy5zdG9yZWRRdWVyeS5zaGFyZWQgPSB0aGlzLnN0b3JlZFF1ZXJ5LnJvbGVzPy5sZW5ndGggPiAwO1xuICAgIHRoaXMuc3RvcmVkUXVlcmllc1NlcnZpY2Uuc2F2ZVN0b3JlZFF1ZXJ5KHRoaXMuc3RvcmVkUXVlcnkpLnN1YnNjcmliZShcbiAgICAgIF8gPT4ge1xuICAgICAgICB0aGlzLmV2ZW50U2VydmljZS50cmlnZ2VyKEVuYWlvRXZlbnQuU1RPUkVEX09CSkVDVF9TSEFSRUQpO1xuICAgICAgfSwgVXRpbHMudGhyb3cobnVsbCwgdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8uc2VhcmNoLnN0b3JlZHF1ZXJ5LnNhdmUuZXJyb3InKSlcbiAgICApO1xuICAgIHRoaXMuZWRpdGluZ1NoYXJlID0gZmFsc2U7XG4gIH1cblxuICBjYW5jZWxTaGFyZSgpIHtcbiAgICB0aGlzLnJvbGVzUGlja2VyLnZhbHVlID0gdGhpcy5zdG9yZWRRdWVyeS5yb2xlcztcbiAgICB0aGlzLmVkaXRpbmdTaGFyZSA9IGZhbHNlO1xuICAgIHRoaXMuZXZlbnRTZXJ2aWNlLnRyaWdnZXIoRW5haW9FdmVudC5TVE9SRURfT0JKRUNUX1NIQVJFRCk7XG4gIH1cblxuICBpc1N0b3JlZFF1ZXJ5VXNlZCgpOiBib29sZWFuIHtcbiAgICB0aGlzLmluZm8gPSAnJztcbiAgICBsZXQgaXNVc2VkO1xuICAgIHRoaXMud29ya3NwYWNlcy5maWx0ZXIod29ya3NwYWNlID0+IHdvcmtzcGFjZS5ncmlkLnNvbWUoZ3JpZEl0ZW0gPT4ge1xuICAgICAgaWYgKGdyaWRJdGVtLndpZGdldENvbmZpZz8uc3RvcmVkUXVlcnkgPT09IHRoaXMuc3RvcmVkUXVlcnkuaWQpIHtcbiAgICAgICAgdGhpcy5pbmZvICs9ICh0aGlzLmluZm8gPyAnLCAnIDogJycpICsgYCcke3dvcmtzcGFjZS5sYWJlbH0nYDtcbiAgICAgICAgaXNVc2VkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSkpO1xuICAgIHJldHVybiBpc1VzZWQ7XG4gIH1cblxuICBkZWxldGUoKSB7XG4gICAgdGhpcy5zdG9yZWRRdWVyaWVzU2VydmljZVxuICAgICAgLnJlbW92ZVN0b3JlZFF1ZXJ5KHRoaXMuc3RvcmVkUXVlcnkuaWQpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5xdWVyeSA9IG51bGw7XG4gICAgICAgIHRoaXMubm90aWZ5TGlzdC5lbWl0KHt1bnNlbGVjdDogZmFsc2UsIHVwZGF0ZTogZmFsc2V9KTtcbiAgICAgIH0sIFV0aWxzLnRocm93KG51bGwsIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLnNlYXJjaC5zdG9yZWRxdWVyeS5kZWxldGUuZXJyb3InKSkpO1xuICB9XG5cbiAgdG9nZ2xlRmF2b3JpdGVTdGF0ZSgpIHtcbiAgICB0aGlzLnN0b3JlZFF1ZXJ5LmZhdm9yaXRlID0gIXRoaXMuc3RvcmVkUXVlcnkuZmF2b3JpdGU7XG4gICAgdGhpcy5zdG9yZWRRdWVyaWVzU2VydmljZVxuICAgICAgLnNhdmVTdG9yZWRRdWVyeSh0aGlzLnN0b3JlZFF1ZXJ5KVxuICAgICAgLnN1YnNjcmliZShfID0+IHtcbiAgICAgICAgdGhpcy5ldmVudFNlcnZpY2UudHJpZ2dlcihFbmFpb0V2ZW50LlNUT1JFRF9PQkpFQ1RfRkFWT1JJU0VEKTtcbiAgICAgIH0sIFV0aWxzLnRocm93KG51bGwsIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLnNlYXJjaC5zdG9yZWRxdWVyeS5zYXZlLmVycm9yJykpKTtcbiAgfVxuXG4gIGNhbmNlbEVkaXQoKSB7XG4gICAgdGhpcy5yZXNldEVkaXRGb3JtKCk7XG4gICAgdGhpcy5maW5pc2hQZW5kaW5nKCk7XG4gICAgaWYgKHRoaXMuc3RvcmVkUXVlcnkuaXNOZXcoKSkge1xuICAgICAgdGhpcy5xdWVyeSA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMubm90aWZ5TGlzdC5lbWl0KHt1bnNlbGVjdDogZmFsc2UsIHVwZGF0ZTogZmFsc2UsIHBheWxvYWQ6IHRoaXMuc3RvcmVkUXVlcnl9KTtcbiAgfVxuXG4gIHNldFF1ZXJ5VG9BcHBTZWFyY2goKSB7XG4gICAgdGhpcy5zdG9yZWRRdWVyeUZvcm0ubG9hZCgpO1xuICB9XG5cbiAgZXhlY3V0ZVF1ZXJ5KCkge1xuICAgIHRoaXMuc3RvcmVkUXVlcnlGb3JtLmV4ZWN1dGUoKTtcbiAgfVxuXG4gIC8vIFNhdmUgdGhlIGN1cnJlbnQgc3RvcmVkIHF1ZXJ5XG4gIHVwZGF0ZVN0b3JlZFF1ZXJ5KCkge1xuXG4gICAgY29uc3QgZm9ybURhdGEgPSB0aGlzLmdldEZvcm1EYXRhKCk7XG4gICAgdGhpcy5zdG9yZWRRdWVyeS5maWx0ZXJzID0gdGhpcy5zdG9yZWRRdWVyeS5maWx0ZXJzLmZpbHRlcihmID0+IH50aGlzLkJBU0VfUEFSQU1TX0ZJRUxEUy5pbmRleE9mKGYucHJvcGVydHkpKTtcbiAgICBPYmplY3Qua2V5cyhmb3JtRGF0YSlcbiAgICAgIC5mb3JFYWNoKGsgPT4ge1xuICAgICAgICBpZiAoayA9PT0gdGhpcy5GT1JNX0lOUFVUX1RJVExFKSB7XG4gICAgICAgICAgdGhpcy5zdG9yZWRRdWVyeS5uYW1lID0gZm9ybURhdGFba107XG4gICAgICAgIH0gZWxzZSBpZiAoayA9PT0gdGhpcy5GT1JNX0lOUFVUX0ZVTExURVhUKSB7XG4gICAgICAgICAgdGhpcy5zdG9yZWRRdWVyeS50ZXJtID0gZm9ybURhdGFba107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGV0IGZpbHRlcnM6IFNlYXJjaEZpbHRlcltdID0gdGhpcy5zZWFyY2hTZXJ2aWNlLmdldFNlYXJjaEZpbHRlcih0aGlzLnN0b3JlZFF1ZXJ5LnR5cGVzLCBrLCBmb3JtRGF0YVtrXSk7XG4gICAgICAgICAgZmlsdGVycy5mb3JFYWNoKGYgPT4gdGhpcy5zdG9yZWRRdWVyeS5hZGRGaWx0ZXIoZikpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIGNvbnN0IHNlYXJjaEZpbHRlcnMgPSB0aGlzLmFwcFNlYXJjaFNlcnZpY2UuZ2V0SW5kZXhTZWFyY2hRdWVyeUZpbHRlcnMoKTtcblxuICAgIC8vIFVwZGF0ZSBzdG9yZWRRdWVyeS5maWx0ZXJzIGJhc2VkIG9uIHNlYXJjaEZpbHRlcnNcbiAgICB0aGlzLnN0b3JlZFF1ZXJ5LmZpbHRlcnMuZm9yRWFjaCgoc3RvcmVkRmlsdGVyLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgbWF0Y2hpbmdTZWFyY2hGaWx0ZXIgPSBzZWFyY2hGaWx0ZXJzLmZpbmQoc2VhcmNoRmlsdGVyID0+IHNlYXJjaEZpbHRlci5wcm9wZXJ0eSA9PT0gc3RvcmVkRmlsdGVyLnByb3BlcnR5KTtcbiAgICAgIGlmIChtYXRjaGluZ1NlYXJjaEZpbHRlcikge1xuICAgICAgICB0aGlzLnN0b3JlZFF1ZXJ5LmZpbHRlcnNbaW5kZXhdLmFjdHVhbE9wZXJhdG9yID0gbWF0Y2hpbmdTZWFyY2hGaWx0ZXIuYWN0dWFsT3BlcmF0b3I7XG4gICAgICAgIHRoaXMuc3RvcmVkUXVlcnkuZmlsdGVyc1tpbmRleF0ub3BlcmF0b3IgPSBtYXRjaGluZ1NlYXJjaEZpbHRlci5vcGVyYXRvcjtcbiAgICAgICAgdGhpcy5zdG9yZWRRdWVyeS5maWx0ZXJzW2luZGV4XS5maXJzdFZhbHVlID0gbWF0Y2hpbmdTZWFyY2hGaWx0ZXIuZmlyc3RWYWx1ZTtcbiAgICAgICAgdGhpcy5zdG9yZWRRdWVyeS5maWx0ZXJzW2luZGV4XS5zZWNvbmRWYWx1ZSA9IG1hdGNoaW5nU2VhcmNoRmlsdGVyLnNlY29uZFZhbHVlO1xuICAgICAgICB0aGlzLnN0b3JlZFF1ZXJ5LmZpbHRlcnNbaW5kZXhdLnVzZU5vdCA9IG1hdGNoaW5nU2VhcmNoRmlsdGVyLnVzZU5vdDtcbiAgICAgICAgdGhpcy5zdG9yZWRRdWVyeS5maWx0ZXJzW2luZGV4XS50cmFuc2Zvcm1EYXRlID0gbWF0Y2hpbmdTZWFyY2hGaWx0ZXIudHJhbnNmb3JtRGF0ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuc3RvcmVkUXVlcmllc1NlcnZpY2VcbiAgICAgIC5zYXZlU3RvcmVkUXVlcnkodGhpcy5zdG9yZWRRdWVyeSlcbiAgICAgIC5zdWJzY3JpYmUodXBkYXRlZFN0b3JlZFF1ZXJ5ID0+IHtcbiAgICAgICAgdGhpcy5xdWVyeSA9IHVwZGF0ZWRTdG9yZWRRdWVyeTtcbiAgICAgICAgdGhpcy5yZXNldEVkaXRGb3JtKCk7XG4gICAgICAgIHRoaXMuZmluaXNoUGVuZGluZygpO1xuICAgICAgICB0aGlzLm5vdGlmeUxpc3QuZW1pdCh7dW5zZWxlY3Q6IGZhbHNlLCB1cGRhdGU6IGZhbHNlLCBwYXlsb2FkOiB1cGRhdGVkU3RvcmVkUXVlcnl9KTtcbiAgICAgIH0sIFV0aWxzLnRocm93KG51bGwsIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLnNlYXJjaC5zdG9yZWRxdWVyeS5zYXZlLmVycm9yJykpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGUgZm9ybSBlbGVtZW50cyB0byBiZSBhIGR5bmFtaWMgcGFyYW1ldGVyIG9yIG5vdFxuICAgKiBAcGFyYW0gZXZlbnRcbiAgICovXG4gIHBhcmFtZXRlckNoYW5nZWQoZXZlbnQ6IHtjb250cm9sOiBzdHJpbmcsIHZhbHVlOiBib29sZWFufSkge1xuXG4gICAgbGV0IG0gPSB0aGlzLnN0b3JlZFF1ZXJ5LnBhcmFtZXRlci5maW5kKHAgPT4gcC5xbmFtZSA9PT0gZXZlbnQuY29udHJvbCk7XG4gICAgaWYgKG0gJiYgIWV2ZW50LnZhbHVlKSB7XG4gICAgICAvLyByZW1vdmUgZXhpc3RpbmcgcGFyYW1ldGVyXG4gICAgICB0aGlzLnN0b3JlZFF1ZXJ5LnBhcmFtZXRlciA9IHRoaXMuc3RvcmVkUXVlcnkucGFyYW1ldGVyLmZpbHRlcihwID0+IHAucW5hbWUgIT09IGV2ZW50LmNvbnRyb2wpO1xuICAgIH0gZWxzZSBpZiAoIW0gJiYgZXZlbnQudmFsdWUpIHtcbiAgICAgIC8vIGFkZCBwYXJhbWV0ZXIgZWxlbWVudFxuICAgICAgbGV0IHBhcmFtID0gdGhpcy5mb3JtRmllbGRUb1BhcmFtZXRlcihldmVudC5jb250cm9sKTtcbiAgICAgIGlmIChwYXJhbSkge1xuICAgICAgICB0aGlzLnN0b3JlZFF1ZXJ5LnBhcmFtZXRlci5wdXNoKHBhcmFtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEZvcm1EYXRhKCkge1xuXG4gICAgY29uc3QgcHJvcGVydGllcyA9IE9iamVjdC5rZXlzKHRoaXMuZWRpdEZvcm0uZm9ybS52YWx1ZSk7XG4gICAgbGV0IGRhdGEgPSB7fTtcblxuXG4gICAgcHJvcGVydGllcy5mb3JFYWNoKHByb3BlcnR5ID0+IHtcblxuICAgICAgY29uc3QgZmM6IE9iamVjdEZvcm1Db250cm9sV3JhcHBlciA9IHRoaXMuZWRpdEZvcm0uZm9ybS5jb250cm9sc1twcm9wZXJ0eV0gYXMgT2JqZWN0Rm9ybUNvbnRyb2xXcmFwcGVyO1xuICAgICAgbGV0IGZvcm1FbGVtZW50O1xuICAgICAgaWYgKGZjLmNvbnRyb2xzICYmIGZjLmNvbnRyb2xzW3Byb3BlcnR5XSkge1xuICAgICAgICBjb25zdCBmZTogT2JqZWN0Rm9ybUNvbnRyb2wgPSBmYy5jb250cm9sc1twcm9wZXJ0eV0gYXMgT2JqZWN0Rm9ybUNvbnRyb2w7XG4gICAgICAgIGZvcm1FbGVtZW50ID0gZmUuX2VvRm9ybUVsZW1lbnQ7XG4gICAgICB9XG4gICAgICBpZiAoZm9ybUVsZW1lbnQgJiYgZm9ybUVsZW1lbnQuaXNOb3RTZXRWYWx1ZSkge1xuICAgICAgICBkYXRhW3Byb3BlcnR5XSA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIHN3aXRjaCAocHJvcGVydHkpIHtcbiAgICAgICAgICBjYXNlIHRoaXMuRk9STV9JTlBVVF9USVRMRToge1xuICAgICAgICAgICAgZGF0YVtwcm9wZXJ0eV0gPSB0aGlzLmVkaXRGb3JtLmZvcm0udmFsdWVbcHJvcGVydHldIHx8ICcnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgdGhpcy5GT1JNX0lOUFVUX0ZVTExURVhUOiB7XG4gICAgICAgICAgICBkYXRhW3Byb3BlcnR5XSA9IHRoaXMuZWRpdEZvcm0uZm9ybS52YWx1ZVtwcm9wZXJ0eV1bU3RvcmVkUXVlcmllc1NlcnZpY2UuRlVMTFRFWFRdIHx8ICcnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGNvbnN0IHYgPSB0aGlzLmVkaXRGb3JtLmZvcm0udmFsdWVbcHJvcGVydHldW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIGlmICghVXRpbGl0aWVzU2VydmljZS5pc0VtcHR5KHYpKSB7XG4gICAgICAgICAgICAgIGRhdGFbcHJvcGVydHldID0gdjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBkeW5hbWljIHN0b3JlZCBxdWVyeSBwYXJhbWV0ZXIgZm9yIGEgZm9ybSBlbGVtZW50XG4gICAqIEBwYXJhbSBxbmFtZSBUaGUgZm9ybSBlbGVtZW50cyBxbmFtZVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHJpdmF0ZSBmb3JtRmllbGRUb1BhcmFtZXRlcihxbmFtZTogc3RyaW5nKTogSVN0b3JlZFF1ZXJ5UGFyYW0ge1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCBwYXJhbTogSVN0b3JlZFF1ZXJ5UGFyYW07XG4gICAgICAvLyBzcGVjaWFsIGhhbmRsaW5nIGZvciBmdWxsdGV4dCBmaWVsZHNcbiAgICAgIGlmIChxbmFtZSA9PT0gU3RvcmVkUXVlcmllc1NlcnZpY2UuRlVMTFRFWFQpIHtcbiAgICAgICAgcGFyYW0gPSB7XG4gICAgICAgICAgcW5hbWU6IHFuYW1lLFxuICAgICAgICAgIHR5cGU6IHFuYW1lLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZmMgPSAoKHRoaXMuZWRpdEZvcm0uZm9ybS5jb250cm9sc1txbmFtZV0gYXMgT2JqZWN0Rm9ybUNvbnRyb2xXcmFwcGVyKS5jb250cm9sc1txbmFtZV0gYXMgT2JqZWN0Rm9ybUNvbnRyb2wpO1xuICAgICAgICBjb25zdCBmZSA9IGZjLl9lb0Zvcm1FbGVtZW50O1xuICAgICAgICBwYXJhbSA9IHtcbiAgICAgICAgICBxbmFtZTogZmUucW5hbWUsXG4gICAgICAgICAgdHlwZTogZmUudHlwZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBhcmFtO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRFZGl0Rm9ybSgpIHtcbiAgICB0aGlzLmVkaXRGb3JtID0ge1xuICAgICAgZm9ybTogbnVsbCxcbiAgICAgIGZ1bGx0ZXh0Rm9ybUNvbnRyb2w6IG51bGwsXG4gICAgICBjb250cm9sczogW10sXG4gICAgICBjb250ZXh0Q29udHJvbHM6IFtdXG4gICAgfTtcbiAgfVxuXG4gIG9uRm9ybUNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5lZGl0Rm9ybVxuICAgICAgLmZvcm1cbiAgICAgIC52YWx1ZUNoYW5nZXNcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vbkZvcm1TdGF0dXNDaGFuZ2VkKHRoaXMuZWRpdEZvcm0uZm9ybSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVFZGl0Rm9ybSgpIHtcblxuICAgIHRoaXMucmVzZXRFZGl0Rm9ybSgpO1xuICAgIHRoaXMuc2V0dXBGb3JtQ29udHJvbHMoKS5zdWJzY3JpYmUoXyA9PiB7XG5cbiAgICAgIGxldCBmb3JtID0gbmV3IE9iamVjdEZvcm1Hcm91cCh7fSk7XG4gICAgICBsZXQgZmNUaXRsZSA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICAgICAgZmNUaXRsZS5zZXRWYWx1ZSh0aGlzLnN0b3JlZFF1ZXJ5Lm5hbWUpO1xuXG4gICAgICBsZXQgZmNGdWxsdGV4dCA9IHRoaXMudG9Gb3JtQ29udHJvbCh0aGlzLnN0b3JlZFF1ZXJpZXNTZXJ2aWNlLmdldEZ1bGx0ZXh0Rm9ybUVsZW1lbnQoXG4gICAgICAgIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLnN0b3JlZHF1ZXJ5LnNlYXJjaC50ZXJtJyksXG4gICAgICAgIHRoaXMuc3RvcmVkUXVlcnkudGVybVxuICAgICAgKSk7XG4gICAgICB0aGlzLmVkaXRGb3JtLmZ1bGx0ZXh0Rm9ybUNvbnRyb2wgPSBmY0Z1bGx0ZXh0O1xuXG4gICAgICAvLyBhZGQgdGl0bGUgYW5kIGZ1bGx0ZXh0IGZpZWxkXG4gICAgICBmb3JtLmFkZENvbnRyb2wodGhpcy5GT1JNX0lOUFVUX1RJVExFLCBmY1RpdGxlKTtcbiAgICAgIGZvcm0uYWRkQ29udHJvbCh0aGlzLkZPUk1fSU5QVVRfRlVMTFRFWFQsIGZjRnVsbHRleHQpO1xuXG4gICAgICBpZiAodGhpcy5lZGl0Rm9ybS5jb250cm9scy5sZW5ndGggfHwgdGhpcy5lZGl0Rm9ybS5jb250ZXh0Q29udHJvbHMubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuZWRpdEZvcm0uY29udHJvbHNcbiAgICAgICAgICAuZm9yRWFjaCgoYykgPT4gZm9ybS5hZGRDb250cm9sKGMuX2VvRm9ybUNvbnRyb2xXcmFwcGVyLmNvbnRyb2xOYW1lLCBjKSk7XG4gICAgICAgIHRoaXMuZWRpdEZvcm0uY29udGV4dENvbnRyb2xzXG4gICAgICAgICAgLmZvckVhY2goKGMpID0+IGZvcm0uYWRkQ29udHJvbChjLl9lb0Zvcm1Db250cm9sV3JhcHBlci5jb250cm9sTmFtZSwgYykpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmVkaXRGb3JtLmZvcm0gPSBmb3JtO1xuICAgICAgdGhpcy5jb21wdXRlSXNUYWJsZURhdGEoKTtcbiAgICAgIHRoaXMub25Gb3JtQ2hhbmdlcygpO1xuICAgIH0pXG4gIH1cblxuICBwcml2YXRlIHNldHVwRm9ybUNvbnRyb2xzKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgdGFza3MgPSBbXTtcbiAgICAvLyBzZXR0aW5nIHVwIG9iamVjdCB0eXBlIGZvcm0gb25seSBtYWtlcyBzZW5zZSB3aXRoIG9uZSB0YXJnZXQgdHlwZVxuICAgIGlmICh0aGlzLnN0b3JlZFF1ZXJ5LnR5cGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdGFza3MucHVzaCh0aGlzLnN5c3RlbVNlcnZpY2UuZ2V0Rm9ybUVsZW1lbnRzRnJvbUZvcm1Nb2RlbCh0aGlzLnN0b3JlZFF1ZXJ5LnR5cGVzWzBdLnFuYW1lLCAnU0VBUkNIJykucGlwZShcbiAgICAgICAgdGFwKChlbGVtZW50czogYW55W10pID0+IHtcbiAgICAgICAgICBlbGVtZW50cy5mb3JFYWNoKGUgPT4ge1xuICAgICAgICAgICAgLy8gcHJldmVudCB0YWJsZXMgYW5kIGJpbmFyeSB0eXBlcyBmcm9tIGJlaW5nIHJlbmRlcmVkIGluIHRoZSBzdG9yZWQgcXVlcnkgZm9ybVxuICAgICAgICAgICAgaWYgKGUudHlwZSAhPT0gJ0JJTkFSWScpIHtcbiAgICAgICAgICAgICAgaWYgKGUucmVxdWlyZWQpIHtcbiAgICAgICAgICAgICAgICBlLnJlcXVpcmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGUucmVhZG9ubHkpIHtcbiAgICAgICAgICAgICAgICBlLnJlYWRvbmx5ID0gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgZmMgPSB0aGlzLnRvRm9ybUNvbnRyb2woZSk7XG4gICAgICAgICAgICAgIGlmIChmYykge1xuICAgICAgICAgICAgICAgIHRoaXMuZWRpdEZvcm0uY29udHJvbHMucHVzaChmYyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgKSlcbiAgICB9XG4gICAgLy8gYWRkIGNvbnRleHQgZm9ybSBjb250cm9scyBhcyB3ZWxsXG4gICAgaWYgKHRoaXMuc3RvcmVkUXVlcnkuY29udGV4dEZvbGRlclR5cGVzLmxlbmd0aCkge1xuICAgICAgdGFza3MucHVzaCh0aGlzLnN5c3RlbVNlcnZpY2UuZ2V0Rm9ybUVsZW1lbnRzRnJvbUZvcm1Nb2RlbCh0aGlzLnN0b3JlZFF1ZXJ5LmNvbnRleHRGb2xkZXJUeXBlc1swXS5xbmFtZSwgJ1NFQVJDSCcsIHRydWUpLnBpcGUoXG4gICAgICAgIHRhcCgoZWxlbWVudHM6IGFueVtdKSA9PiB7XG4gICAgICAgICAgZWxlbWVudHMuZm9yRWFjaChlID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZjID0gdGhpcy50b0Zvcm1Db250cm9sKGUpO1xuICAgICAgICAgICAgaWYgKGZjKSB7XG4gICAgICAgICAgICAgIHRoaXMuZWRpdEZvcm0uY29udGV4dENvbnRyb2xzLnB1c2goZmMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgICApKVxuICAgIH1cblxuICAgIHJldHVybiB0YXNrcy5sZW5ndGggPyBmb3JrSm9pbih0YXNrcykgOiBvZih0YXNrcyk7XG4gIH1cblxuICBwcml2YXRlIGZldGNoUm9sZXMoKSB7XG4gICAgaWYgKCF0aGlzLnN5c3RlbVJvbGVzIHx8IHRoaXMuc3lzdGVtUm9sZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLnN5c3RlbVNlcnZpY2VcbiAgICAgICAgLmdldFJvbGVzKClcbiAgICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgIHRoaXMuc3lzdGVtUm9sZXMgPSByZXM7XG4gICAgICAgICAgdGhpcy5yb2xlc1BpY2tlci5jb2Rlc3lzdGVtID0ge1xuICAgICAgICAgICAgZW50cmllczogdGhpcy5zeXN0ZW1Sb2xlcy5tYXAocm9sZSA9PiAoe1xuICAgICAgICAgICAgICBpZDogcm9sZS5pZCxcbiAgICAgICAgICAgICAgbGFiZWw6IHJvbGUubmFtZSxcbiAgICAgICAgICAgICAgZGVmYXVsdHJlcHJlc2VudGF0aW9uOiByb2xlLm5hbWUsXG4gICAgICAgICAgICAgIGRhdGE6IHJvbGUubmFtZVxuICAgICAgICAgICAgfSkpLnNvcnQoVXRpbHMuc29ydFZhbHVlcygnbGFiZWwnKSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIGdldFJlc3RyaWN0aW9ucygpOiBSZXN0cmljdGlvbltdIHtcbiAgICBsZXQgcmVzdHJpY3Rpb25zOiBSZXN0cmljdGlvbltdID0gW107XG5cbiAgICAvLyB0eXBlIHJlc3RyaWN0aW9uXG4gICAgaWYgKHRoaXMuc3RvcmVkUXVlcnkudHlwZXMgJiYgdGhpcy5zdG9yZWRRdWVyeS50eXBlcy5sZW5ndGgpIHtcbiAgICAgIHJlc3RyaWN0aW9ucy5wdXNoKHtcbiAgICAgICAgZmllbGQ6IFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TLlRZUEUsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5zdG9yZWRxdWVyeS5yZXN0cmljdGlvbi50eXBlJyksXG4gICAgICAgIGl0ZW1zOiB0aGlzLnN0b3JlZFF1ZXJ5LnR5cGVzLm1hcCh0ID0+IHQubGFiZWwpXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBhZGQgYmFzZSBwYXJhbXMgcmVzdHJpY3Rpb25zXG4gICAgKHRoaXMuc3RvcmVkUXVlcnkuZmlsdGVycyB8fCBbXSkuZm9yRWFjaChmaWx0ZXIgPT4ge1xuICAgICAgaWYgKGZpbHRlciAmJiB+dGhpcy5CQVNFX1BBUkFNU19GSUVMRFMuaW5kZXhPZihmaWx0ZXIucHJvcGVydHkpKSB7XG5cbiAgICAgICAgY29uc3QgZmllbGQgPSBmaWx0ZXIucHJvcGVydHk7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8uc3RvcmVkcXVlcnkucmVzdHJpY3Rpb24uJyArIGZpZWxkKTtcblxuICAgICAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgICAgICAgY2FzZSBTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5NSU1FVFlQRUdST1VQOlxuICAgICAgICAgICAgcmVzdHJpY3Rpb25zLnB1c2goe1xuICAgICAgICAgICAgICBmaWVsZCwgbGFiZWwsIGl0ZW1zOiBBcnJheS5pc0FycmF5KGZpbHRlci5maXJzdFZhbHVlKSA/IGZpbHRlci5maXJzdFZhbHVlIDogW2ZpbHRlci5maXJzdFZhbHVlXVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TLkZJTEVOQU1FOlxuICAgICAgICAgICAgcmVzdHJpY3Rpb25zLnB1c2goe1xuICAgICAgICAgICAgICBmaWVsZCwgbGFiZWwsIGl0ZW1zOiBbZmlsdGVyLmZpcnN0VmFsdWVdXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuRklMRVNJWkU6XG4gICAgICAgICAgICByZXN0cmljdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgIGZpZWxkLCBsYWJlbCwgaXRlbXM6IFt0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5zZWFyY2guYWdnLmZpbGVzaXplLicgKyBmaWx0ZXIuZmlyc3RWYWx1ZSldXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuQ1JFQVRFRDpcbiAgICAgICAgICBjYXNlIFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TLk1PRElGSUVEOlxuICAgICAgICAgICAgcmVzdHJpY3Rpb25zLnB1c2goe1xuICAgICAgICAgICAgICBmaWVsZCwgbGFiZWwsIGl0ZW1zOiBbdGhpcy5jcmVhdGVEYXRlUmVzdHJpY3Rpb24oZmlsdGVyKV1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5DUkVBVE9SOlxuICAgICAgICAgIGNhc2UgU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuTU9ESUZJRVI6XG4gICAgICAgICAgICB0aGlzLnN5c3RlbVNlcnZpY2UuZ2V0T3JnYW5pemF0aW9uT2JqZWN0cyhmaWx0ZXIuZmlyc3RWYWx1ZSlcbiAgICAgICAgICAgICAgLnN1YnNjcmliZShvcmdVc2VycyA9PiByZXN0cmljdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgZmllbGQsIGxhYmVsLCBpdGVtczogb3JnVXNlcnMubWFwKHUgPT4gdS50aXRsZSlcbiAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3RyaWN0aW9ucztcbiAgfVxuXG4gIGNyZWF0ZURhdGVSZXN0cmljdGlvbihmaWx0ZXI6IFNlYXJjaEZpbHRlcikge1xuICAgIHN3aXRjaCAoZmlsdGVyLm9wZXJhdG9yKSB7XG4gICAgICBjYXNlIFNlYXJjaEZpbHRlci5PUEVSQVRPUi5SQU5HRTpcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoYGVvLnNlYXJjaC5hZ2cudGltZS4ke2ZpbHRlci5maXJzdFZhbHVlfWApO1xuICAgICAgY2FzZSBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuRVFVQUw6XG4gICAgICAgIHJldHVybiBgPSAke3RoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGZpbHRlci5maXJzdFZhbHVlLCAnZW9TaG9ydERhdGUnKX1gO1xuICAgICAgY2FzZSBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuSU5URVJWQUxfSU5DTFVERV9CT1RIOlxuICAgICAgICByZXR1cm4gYCR7dGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZmlsdGVyLmZpcnN0VmFsdWUsICdlb1Nob3J0RGF0ZScpfSAtICR7dGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZmlsdGVyLnNlY29uZFZhbHVlLCAnZW9TaG9ydERhdGUnKX1gO1xuICAgICAgY2FzZSBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuR1JFQVRFUl9PUl9FUVVBTDpcbiAgICAgICAgcmV0dXJuIGAke3RoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLnNlYXJjaC5hZ2cudGltZS5zcGFuLnNpbmNlJyl9ICR7dGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZmlsdGVyLmZpcnN0VmFsdWUsICdlb1Nob3J0RGF0ZScpfWA7XG4gICAgICBjYXNlIFNlYXJjaEZpbHRlci5PUEVSQVRPUi5MRVNTX09SX0VRVUFMOlxuICAgICAgICByZXR1cm4gYCR7dGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8uc2VhcmNoLmFnZy50aW1lLnNwYW4udW50aWwnKX0gJHt0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShmaWx0ZXIuZmlyc3RWYWx1ZSwgJ2VvU2hvcnREYXRlJyl9YDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBgKCR7ZmlsdGVyLm9wZXJhdG9yfSkgJHt0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShmaWx0ZXIuZmlyc3RWYWx1ZSwgJ2VvU2hvcnREYXRlJyl9YDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGZvcm0gY29udHJvbCBmcm9tIGEgZ2l2ZW4gZm9ybSBlbGVtZW50XG4gICAqIEBwYXJhbSBmb3JtRWxlbWVudFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHJpdmF0ZSB0b0Zvcm1Db250cm9sKGZvcm1FbGVtZW50KTogT2JqZWN0Rm9ybUNvbnRyb2xXcmFwcGVyIHtcblxuICAgIC8vIHRoZSBgbmFtZWAgcHJvcGVydHkgb2Ygc3RvcmVkIHF1ZXJ5IGZvcm0gZWxlbWVudCBoYXMgdG8gYmUgYHFuYW1lYCBvZiBmb3JtIGVsZW1lbnQsXG4gICAgLy8gYmVjYXVzZSB3ZSBtYXkgY29tYmluZSBtdWx0aXBsZSBmb3JtcyAoY29udGV4dCBmb3JtKSBhbmQgaW4gdGhpcyBjYXNlIHRoZXJlIG1heVxuICAgIC8vIGJlIGNvbmZsaWN0cyBpbiBuYW1pbmdzXG4gICAgZm9ybUVsZW1lbnQubmFtZSA9IGZvcm1FbGVtZW50LnFuYW1lO1xuXG4gICAgaWYgKGZvcm1FbGVtZW50LnR5cGUgPT09ICdUQUJMRScpIHtcbiAgICAgIGxldCBmaWx0ZXJzID0gdGhpcy5zdG9yZWRRdWVyeS5nZXRUYWJsZUZpbHRlcnMoZm9ybUVsZW1lbnQucW5hbWUpO1xuICAgICAgaWYgKGZpbHRlcnMgJiYgZmlsdGVycy5sZW5ndGgpIHtcbiAgICAgICAgZm9ybUVsZW1lbnQudmFsdWUgPSB0aGlzLnNlYXJjaFNlcnZpY2UudGFibGVGaWx0ZXJzVG9FbGVtZW50VmFsdWUoZmlsdGVycywgZm9ybUVsZW1lbnQuZWxlbWVudHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9ybUVsZW1lbnQudmFsdWUgPSBbe31dO1xuICAgICAgICBkZWxldGUgZm9ybUVsZW1lbnQuaXNOb3RTZXRWYWx1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZ3JhYiB2YWx1ZSBmb3IgdGhlIGNvbnRyb2wgZnJvbSBjb3JyZXNwb25kaW5nIHF1ZXJ5IGZpbHRlcnNcbiAgICAgIGxldCBmaWx0ZXIgPSB0aGlzLnN0b3JlZFF1ZXJ5LmdldEZpbHRlcihmb3JtRWxlbWVudC5xbmFtZSk7XG4gICAgICAvLyB3ZSBtYXkgaGF2ZSBwYXJhbXMgdGhhdCBhcmUgbm90IHBhcnQgb2YgdGhlIHF1ZXJpZXMgZmlsdGVycy4gVGhpcyBtYXkgYmUgdGhlXG4gICAgICAvLyBjYXNlIHdoZW4gd2UgbWFyayBmb3JtIGVsZW1lbnRzIGFzIGR5bmFtaWMgZmllbGRzIHdpdGhvdXQgcHJvdmlkaW5nIGEgdmFsdWVcbiAgICAgIGlmIChmaWx0ZXIpIHtcblxuICAgICAgICAvLyBmaWx0ZXIgdG8gaGF2ZSBubyB2YWx1ZVxuICAgICAgICBpZiAoZmlsdGVyLm9wZXJhdG9yID09PSBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuRVFVQUwgJiYgZmlsdGVyLmZpcnN0VmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICBmb3JtRWxlbWVudC5pc05vdFNldFZhbHVlID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWxldGUgZm9ybUVsZW1lbnQuaXNOb3RTZXRWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvcm1FbGVtZW50LnZhbHVlID0gdGhpcy5zZWFyY2hTZXJ2aWNlLmZpbHRlclRvRWxlbWVudFZhbHVlKFxuICAgICAgICAgIHRoaXMuc3RvcmVkUXVlcnkuZ2V0RmlsdGVyKGZvcm1FbGVtZW50LnFuYW1lKSxcbiAgICAgICAgICBmb3JtRWxlbWVudC50eXBlXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKGZvcm1FbGVtZW50LnFuYW1lICE9PSBTdG9yZWRRdWVyaWVzU2VydmljZS5GVUxMVEVYVCkge1xuICAgICAgICBmb3JtRWxlbWVudC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgZGVsZXRlIGZvcm1FbGVtZW50LmlzTm90U2V0VmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIHN5bmMgd2l0aCBwYXJhbXNcbiAgICBjb25zdCBtYXRjaDogYW55ID0gdGhpcy5zdG9yZWRRdWVyeS5wYXJhbWV0ZXIuZmluZChwYXJhbSA9PiB7XG4gICAgICByZXR1cm4gKHBhcmFtLnFuYW1lID09PSBmb3JtRWxlbWVudC5xbmFtZSkgfHwgKHBhcmFtLnR5cGUgPT09IFN0b3JlZFF1ZXJpZXNTZXJ2aWNlLkZVTExURVhUICYmIGZvcm1FbGVtZW50LnFuYW1lID09PSBTdG9yZWRRdWVyaWVzU2VydmljZS5GVUxMVEVYVClcbiAgICB9KTtcbiAgICAvLyBldmVyeSBmaWVsZCB0aGF0IGlzIHBhcnQgb2YgdGhlIHBhcmFtcyBpcyBzdXBwb3NlZCB0byBiZSBkeW5hbWljXG4gICAgZm9ybUVsZW1lbnQuX2R5bmFtaWMgPSAhIW1hdGNoO1xuXG4gICAgLy8gY3JlYXRlIGFjdHVhbCBmb3JtIGNvbnRyb2wgdGhhdCBjb3VsZCBiZSB1c2VkIHdpdGhcbiAgICAvLyBGb3JtRWxlbWVudENvbXBvbmVudCB0byB0aGVuIHJlbmRlciBmb3IgZWxlbWVudHNcbiAgICAvLyB3cmFwcGVyIG1heSBiZSBudWxsIGluIGNhc2Ugb2YgYW4gZXJyb3JcbiAgICByZXR1cm4gdGhpcy5mb3JtSGVscGVyU2VydmljZS5lbGVtZW50VG9Gb3JtQ29udHJvbChmb3JtRWxlbWVudCwgJ1NFQVJDSCcpO1xuICB9XG5cbiAgb25TdG9yZWRRdWVyeUxvYWRlZCgpIHtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbe291dGxldHM6IHttb2RhbDogJ3NlYXJjaCd9fV0pO1xuICB9XG5cbiAgb25TdG9yZWRRdWVyeUV4ZWN1dGUoZXZ0KSB7XG4gICAgY29uc3QgdXJpUGFyYW0gPSBlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoZXZ0LnF1ZXJ5SnNvbikpO1xuICAgIGNvbnN0IHVyaVBhcmFtUXVlcnk6IE5hdmlnYXRpb25FeHRyYXMgPSB7cXVlcnlQYXJhbXM6IHsncXVlcnknOiB1cmlQYXJhbX19O1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL3Jlc3VsdCddLCB1cmlQYXJhbVF1ZXJ5KTtcbiAgfVxuXG4gIHNldEljb25UaXRsZXMoKSB7XG4gICAgdGhpcy5pY29uVGl0bGVzID0ge1xuICAgICAgc2hhcmU6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLnN0b3JlZHF1ZXJ5LnNoYXJlLnRpdGxlJyksXG4gICAgICBzaGFyZWQ6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLnN0b3JlZHF1ZXJ5LnNoYXJlZGZvci50aXRsZScpLFxuICAgICAgZmF2b3I6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLnN0b3JlZHF1ZXJ5LmZhdm9yLnRpdGxlJyksXG4gICAgICBmYXZvcmVkOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5zdG9yZWRxdWVyeS5mYXZvcmVkZm9yLnRpdGxlJylcbiAgICB9XG4gIH1cblxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuc2VsZWN0aW9uLmZvY3VzJFxuICAgICAgLnBpcGUodW50aWxEZXN0cm95ZWQodGhpcykpXG4gICAgICAuc3Vic2NyaWJlKHEgPT4ge1xuICAgICAgICB0aGlzLnF1ZXJ5ID0gcTtcbiAgICAgIH0pO1xuICAgIHRoaXMuc2V0SWNvblRpdGxlcygpO1xuICB9XG5cbiAgdHJhY2tCeVFOYW1lKGluZGV4LCBpdGVtKSB7XG4gICAgcmV0dXJuIGl0ZW0ucW5hbWU7XG4gIH1cblxuICB0cmFja0J5SW5kZXgoaW5kZXgsIGl0ZW0pIHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiB0aGUgZ2l2ZW4gZWxlbWVudCBpcyBub3Qgb2YgdHlwZSAnVEFCTEUnLlxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB0aGUgdHlwZSBvZiB0aGUgX19lb0Zvcm1FbGVtZW50IHByb3BlcnR5IG9mIHRoZSBjb250cm9sXG4gICAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gZWxlbWVudC4gSWYgdGhlIHR5cGUgaXMgbm90ICdUQUJMRScsIGl0IHJldHVybnMgdHJ1ZS5cbiAgICpcbiAgICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0byBjaGVjay5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gVHJ1ZSBpZiB0aGUgZWxlbWVudCBpcyBub3Qgb2YgdHlwZSAnVEFCTEUnLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBpc1RhYmxlRGF0YShlbGVtZW50KTogYm9vbGVhbiB7XG4gICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50Ll9lb0Zvcm1Db250cm9sV3JhcHBlciB8fCAhZWxlbWVudC5jb250cm9scykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRyb2xOYW1lID0gZWxlbWVudC5fZW9Gb3JtQ29udHJvbFdyYXBwZXIuY29udHJvbE5hbWU7XG4gICAgY29uc3QgY29udHJvbCA9IGVsZW1lbnQuY29udHJvbHNbY29udHJvbE5hbWVdO1xuXG4gICAgaWYgKCFjb250cm9sIHx8ICFjb250cm9sLl9fZW9Gb3JtRWxlbWVudCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBjb250cm9sLl9fZW9Gb3JtRWxlbWVudC50eXBlICE9PSAnVEFCTEUnO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZWNvbXB1dGVzIHRoZSBpc1RhYmxlRGF0YSByZXN1bHRzIGZvciBlYWNoIGNvbnRyb2wgaW4gdGhlIGVkaXRGb3JtLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBpdGVyYXRlcyBvdmVyIHRoZSBjb250cm9scyBpbiB0aGUgZWRpdEZvcm0gYW5kIGNhbGxzIHRoZSBpc1RhYmxlRGF0YSBmdW5jdGlvblxuICAgKiBmb3IgZWFjaCBjb250cm9sLiBUaGUgcmVzdWx0cyBhcmUgc3RvcmVkIGluIHRoZSBpc1RhYmxlRGF0YU1hcCwgd2hlcmUgdGhlIGtleSBpcyB0aGUgY29udHJvbFxuICAgKiBhbmQgdGhlIHZhbHVlIGlzIHRoZSByZXN1bHQgb2YgdGhlIGlzVGFibGVEYXRhIGZ1bmN0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSBjb21wdXRlSXNUYWJsZURhdGEoKTogdm9pZCB7XG4gICAgdGhpcy5lZGl0Rm9ybS5jb250cm9scy5mb3JFYWNoKGNvbnRyb2wgPT4ge1xuICAgICAgdGhpcy5pc1RhYmxlRGF0YU1hcC5zZXQoY29udHJvbCwgdGhpcy5pc1RhYmxlRGF0YShjb250cm9sKSk7XG4gICAgfSk7XG4gIH1cblxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0b3JlZFF1ZXJ5XCI+XG4gIDxkaXYgY2xhc3M9XCJlby1oZWFkXCI+XG4gICAgPGhlYWRlciBjbGFzcz1cImVvLWhlYWRlclwiPlxuICAgICAgPGVvLWljb24gY2xhc3M9XCJlby1oZWFkZXItaWNvblwiXG4gICAgICAgICAgICAgICBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19zYXZlZF9zZWFyY2guc3ZnJ1wiXG4gICAgICAgICAgICAgICBbaWNvblRpdGxlXT1cIignZW8udmlldy5uYXZpZ2F0aW9uLnN0b3JlZHF1ZXJpZXMnIHwgdHJhbnNsYXRlKVwiPlxuICAgICAgPC9lby1pY29uPlxuICAgICAgPGRpdiBjbGFzcz1cImVvLWhlYWRlci1pbmZvXCI+XG4gICAgICAgIDxoMiBjbGFzcz1cImVvLWhlYWRlci10aXRsZVwiPnt7IHN0b3JlZFF1ZXJ5Lm5hbWUgfX08L2gyPlxuICAgICAgICA8aDMgY2xhc3M9XCJlby1oZWFkZXItc3VidGl0bGVcIiB0cmFuc2xhdGU+ZW8uc2VhcmNoLnRpdGxlLnN0b3JlZHF1ZXJpZXM8L2gzPlxuICAgICAgPC9kaXY+XG4gICAgPC9oZWFkZXI+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJlby1ib2R5XCI+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZm9ybVwiPlxuXG4gICAgICA8bmctdGVtcGxhdGUgI3F1ZXJ5Rm9ybT5cbiAgICAgICAgPGVvLXN0b3JlZC1xdWVyeSBbcXVlcnldPVwic3RvcmVkUXVlcnlcIiBbZm9ybU9ubHldPVwidHJ1ZVwiICNzdG9yZWRRdWVyeUZvcm1cbiAgICAgICAgICAgICAgICAgICAgICAgICAob25RdWVyeUxvYWRlZCk9XCJvblN0b3JlZFF1ZXJ5TG9hZGVkKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIChvblF1ZXJ5RXhlY3V0ZSk9XCJvblN0b3JlZFF1ZXJ5RXhlY3V0ZSgkZXZlbnQpXCI+PC9lby1zdG9yZWQtcXVlcnk+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICA8Zm9ybSBjbGFzcz1cImVkaXQtZm9ybVwiIFtmb3JtR3JvdXBdPVwiZWRpdEZvcm0uZm9ybVwiICpuZ0lmPVwiZWRpdEZvcm0uZm9ybTsgZWxzZSBxdWVyeUZvcm1cIj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGV4dCBkYXJrXCI+XG5cbiAgICAgICAgICA8IS0tIHRpdGxlIGFuZCBmdWxsdGV4dCB0ZXJtIGZpZWxkcyAtLT5cbiAgICAgICAgICA8ZW8tZm9ybS1pbnB1dCBjbGFzcz1cInRpdGxlXCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwic3RvcmVkUXVlcnlUaXRsZVwiIG1heGxlbmd0aD1cIjY0XCIgb25mb2N1cz1cInRoaXMuc2VsZWN0KClcIlxuICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiJ3N0b3JlZFF1ZXJ5VGl0bGUnXCIvPlxuICAgICAgICAgIDwvZW8tZm9ybS1pbnB1dD5cblxuICAgICAgICAgIDxlby1xdWVyeS1zY29wZS1zZWxlY3QgW3NlbGVjdGlvbl09XCJxdWVyeVNjb3BlXCIgKHNlbGVjdCk9XCJzZXRRdWVyeVNjb3BlKCRldmVudClcIj48L2VvLXF1ZXJ5LXNjb3BlLXNlbGVjdD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZFwiPlxuICAgICAgICAgICAgPGVvLWZvcm0tZWxlbWVudCBbc2tpcFRvZ2dsZV09XCJ0cnVlXCIgW2VsZW1lbnRdPVwiZWRpdEZvcm0uZnVsbHRleHRGb3JtQ29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaXR1YXRpb25dPVwiJ1NFQVJDSCdcIj48L2VvLWZvcm0tZWxlbWVudD5cbiAgICAgICAgICAgIDxlby1keW5hbWljLXByb3BlcnR5LXN3aXRjaCBbcGFyZW50Rm9ybUNvbnRyb2xdPVwiZWRpdEZvcm0uZnVsbHRleHRGb3JtQ29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uUHJvcGVydHlDaGFuZ2VkKT1cInBhcmFtZXRlckNoYW5nZWQoJGV2ZW50KVwiPjwvZW8tZHluYW1pYy1wcm9wZXJ0eS1zd2l0Y2g+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIGNvbnRleHQgdHlwZSBmb3JtIGNvbnRyb2xzIC0tPlxuICAgICAgICAgIDxoMz57eyBzdG9yZWRRdWVyeS5jb250ZXh0Rm9sZGVyVHlwZXNbMF0/LmxhYmVsIH19PC9oMz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZFwiICpuZ0Zvcj1cImxldCBjdHhFbGVtZW50IG9mIGVkaXRGb3JtLmNvbnRleHRDb250cm9sczsgdHJhY2tCeTogdHJhY2tCeVFOYW1lXCI+XG4gICAgICAgICAgICA8ZW8tZm9ybS1lbGVtZW50IFtlbGVtZW50XT1cImN0eEVsZW1lbnRcIiBbc2l0dWF0aW9uXT1cIidTRUFSQ0gnXCI+PC9lby1mb3JtLWVsZW1lbnQ+XG4gICAgICAgICAgICA8ZW8tZHluYW1pYy1wcm9wZXJ0eS1zd2l0Y2ggW3BhcmVudEZvcm1Db250cm9sXT1cImN0eEVsZW1lbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvblByb3BlcnR5Q2hhbmdlZCk9XCJwYXJhbWV0ZXJDaGFuZ2VkKCRldmVudClcIj48L2VvLWR5bmFtaWMtcHJvcGVydHktc3dpdGNoPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIG9iamVjdCB0eXBlIGZvcm0gY29udHJvbHMgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkc1wiIFtuZ0NsYXNzXT1cIntlbXB0eTogIWVkaXRGb3JtLmNvbnRyb2xzPy5sZW5ndGh9XCI+XG4gICAgICAgICAgQGZvcihlbGVtZW50IG9mIGVkaXRGb3JtLmNvbnRyb2xzO3RyYWNrIHRyYWNrQnlRTmFtZSkge1xuICAgICAgICAgICAgQGlmIChpc1RhYmxlRGF0YU1hcC5nZXQoZWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGRcIj5cbiAgICAgICAgICAgICAgICA8ZW8tZm9ybS1lbGVtZW50IFtlbGVtZW50XT1cImVsZW1lbnRcIiBbc2l0dWF0aW9uXT1cIidTRUFSQ0gnXCI+PC9lby1mb3JtLWVsZW1lbnQ+XG4gICAgICAgICAgICAgICAgPGVvLWR5bmFtaWMtcHJvcGVydHktc3dpdGNoIFtwYXJlbnRGb3JtQ29udHJvbF09XCJlbGVtZW50XCJcbiAgICAgICAgICAgICAgICAgIChvblByb3BlcnR5Q2hhbmdlZCk9XCJwYXJhbWV0ZXJDaGFuZ2VkKCRldmVudClcIj48L2VvLWR5bmFtaWMtcHJvcGVydHktc3dpdGNoPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9mb3JtPlxuICAgIDwvZGl2PlxuXG4gICAgPGFzaWRlIGNsYXNzPVwiYXNpZGVcIj5cblxuICAgICAgPCEtLSBmYXZvcml0ZSBhbmQgc2hhcmUgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwibWV0YS1hY3Rpb25zXCIgKm5nSWY9XCIhaXNOZXdRdWVyeVwiPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc093blF1ZXJ5OyBlbHNlIHNoYXJlZFdpdGhNZVwiPlxuICAgICAgICAgIDxlby1pY29uIGNsYXNzPVwiYnV0dG9uIGJ0bi1zaGFyZVwiIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX3NoYXJlLnN2ZydcIiAqbmdJZj1cImVuYWJsZVNoYXJpbmdcIlxuICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInthY3RpdmU6IHN0b3JlZFF1ZXJ5LnNoYXJlZCB8fCBzdG9yZWRRdWVyeS5yb2xlcy5sZW5ndGgsIGVkaXRpbmc6IGVkaXRpbmdTaGFyZX1cIlxuICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTaGFyZUVkaXQoKVwiXG4gICAgICAgICAgICAgICAgICAgW2ljb25UaXRsZV09XCJpY29uVGl0bGVzLnNoYXJlXCI+PC9lby1pY29uPlxuXG4gICAgICAgICAgPGVvLWljb24gY2xhc3M9XCJidXR0b24gYnRuLWZhdlwiIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2Zhdm9yaXRlLnN2ZydcIlxuICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInthY3RpdmU6IHN0b3JlZFF1ZXJ5LmZhdm9yaXRlfVwiXG4gICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUZhdm9yaXRlU3RhdGUoKVwiXG4gICAgICAgICAgICAgICAgICAgW2ljb25UaXRsZV09XCJpY29uVGl0bGVzLmZhdm9yXCI+PC9lby1pY29uPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctdGVtcGxhdGUgI3NoYXJlZFdpdGhNZT5cbiAgICAgICAgICA8ZW8taWNvbiBjbGFzcz1cInNoYXJlZFdpdGhNZVwiIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX3NoYXJlLnN2ZydcIlxuICAgICAgICAgICAgICAgICAgIFtpY29uVGl0bGVdPVwiaWNvblRpdGxlcy5zaGFyZWRcIj48L2VvLWljb24+XG4gICAgICAgICAgPGVvLWljb24gY2xhc3M9XCJzaGFyZWRXaXRoTWVcIiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19mYXZvcml0ZS5zdmcnXCJcbiAgICAgICAgICAgICAgICAgICBbaWNvblRpdGxlXT1cImljb25UaXRsZXMuZmF2b3JlZFwiPjwvZW8taWNvbj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gcm9sZXMgdGhhdCBzaGFyZSB0aGlzIHF1ZXJ5IC0tPlxuICAgICAgPGRpdiBjbGFzcz1cIm1ldGEtcm9sZXNcIiAqbmdJZj1cIiFpc05ld1F1ZXJ5XCIgW25nQ2xhc3NdPVwie2Rhcms6IGVkaXRpbmdTaGFyZSwgZW1wdHk6ICFzdG9yZWRRdWVyeS5yb2xlcz8ubGVuZ3RofVwiPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiIHRyYW5zbGF0ZT5lby5zdG9yZWRxdWVyeS5zaGFyZS5zaGFyZWR3aXRoPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkXCIgKm5nSWY9XCJyb2xlc1BpY2tlcj8uY29kZXN5c3RlbT8uZW50cmllc1wiPlxuICAgICAgICAgIDxlby1jb2Rlc3lzdGVtIFtwaWNrZXJUaXRsZV09XCJyb2xlc1BpY2tlci50aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2NvZGVzeXN0ZW1dPVwicm9sZXNQaWNrZXIuY29kZXN5c3RlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgW211bHRpc2VsZWN0XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhZWRpdGluZ1NoYXJlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRTdHlsZUNsYXNzXT1cIidzdG9yZWQtcXVlcnlfX3NoYXJlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb2xlc1BpY2tlci52YWx1ZVwiIGNsYXNzPVwiaGlkZS1jaGlwLWNsb3NlLWJ1dHRvblwiPjwvZW8tY29kZXN5c3RlbT5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNoYXJlLWFjdGlvbnNcIiAqbmdJZj1cImVkaXRpbmdTaGFyZVwiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJzZWNvbmRhcnlcIiAoY2xpY2spPVwiY2FuY2VsU2hhcmUoKVwiIHRyYW5zbGF0ZT5lby5jdGEuYnV0dG9uLmNhbmNlbDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJwcmltYXJ5XCIgKGNsaWNrKT1cInNoYXJlKClcIiB0cmFuc2xhdGU+ZW8uc3RvcmVkcXVlcnkuc2hhcmUub2s8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBxdWVyaWVzIG1ldGEgaW5mbyBsaWtlIGJhc2VwYXJhbSBzZXR0aW5ncyAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJtZXRhLWRhdGFcIiAqbmdJZj1cInJlc3RyaWN0aW9ucz8ubGVuZ3RoXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZXN0cmljdGlvblwiICpuZ0Zvcj1cImxldCByZXN0cmljdGlvbiBvZiByZXN0cmljdGlvbnM7IHRyYWNrQnk6IHRyYWNrQnlJbmRleFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPnt7IHJlc3RyaWN0aW9uLmxhYmVsIH19PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1zXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIHJlc3RyaWN0aW9uLml0ZW1zOyB0cmFja0J5OiB0cmFja0J5SW5kZXhcIj57eyBpdGVtIH19PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICA8L2FzaWRlPlxuXG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJhY3Rpb25zXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFlZGl0Rm9ybS5mb3JtOyBlbHNlIGFjdGlvbkVkaXRcIj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJzZWNvbmRhcnkgYnRuLWRlbGV0ZVwiIChjbGljayk9XCJpc1N0b3JlZFF1ZXJ5VXNlZCgpID8gc2hvd0RlbGV0ZURpYWxvZyA9IHRydWUgOiBkZWxldGUoKVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXNPd25RdWVyeVwiIHRyYW5zbGF0ZT5lby5jdGEuYnV0dG9uLmRlbGV0ZVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwic2Vjb25kYXJ5IGJ0bi1vcGVuXCIgKGNsaWNrKT1cInNldFF1ZXJ5VG9BcHBTZWFyY2goKVwiIHRyYW5zbGF0ZT5lby5zdG9yZWRxdWVyeS5sb2FkPC9idXR0b24+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwicHJpbWFyeSBncmV5IGJ0bi1lZGl0XCIgKGNsaWNrKT1cImVkaXQoKVwiIFtkaXNhYmxlZF09XCIhaXNPd25RdWVyeVwiIHRyYW5zbGF0ZT5cbiAgICAgICAgZW8uc3RvcmVkcXVlcnkuYWN0aW9uLmVkaXRcbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cInByaW1hcnkgYnRuLXNlYXJjaFwiIFtkaXNhYmxlZF09XCJzdG9yZWRRdWVyeS5zdGF0ZT8uaXNFbXB0eVwiIChjbGljayk9XCJleGVjdXRlUXVlcnkoKVwiIHRyYW5zbGF0ZT5cbiAgICAgICAgZW8uc3RvcmVkcXVlcnkucnVuXG4gICAgICA8L2J1dHRvbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxlby1kaWFsb2cgW3RpdGxlXT1cIidlby5zdG9yZWRxdWVyeS5kZWxldGUuZGlhbG9nLnRpdGxlJyB8IHRyYW5zbGF0ZVwiIFsodmlzaWJsZSldPVwic2hvd0RlbGV0ZURpYWxvZ1wiXG4gICAgICAgICAgICAgICBbZm9jdXNPblNob3ddPVwiZmFsc2VcIiBbbWluV2lkdGhdPVwiNDAwXCIgW3N0eWxlQ2xhc3NdPVwiJ3N0b3JlZFF1ZXJ5LWRlbGV0ZV9fZGlhbG9nJ1wiPlxuICAgICAgPGRpdj5cbiAgICAgICAgPHNwYW4+e3snZW8uc3RvcmVkcXVlcnkuZGVsZXRlLmRpYWxvZy5tZXNzYWdlJyB8IHRyYW5zbGF0ZToge1xuICAgICAgICAgICAgICAgICAgc3RvcmVkcXVlcnk6IHRoaXMuc3RvcmVkUXVlcnkubmFtZSxcbiAgICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMuaW5mb1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLWJ1dHRvbnMgZmxleC1yb3dcIj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidXR0b24gY2FuY2VsXCIgKGNsaWNrKT1cInNob3dEZWxldGVEaWFsb2cgPSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgdHJhbnNsYXRlPmVvLmN0YS5idXR0b24uY2FuY2VsXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAjY29uZmlybURlbGV0ZSAoY2xpY2spPVwiZGVsZXRlKCk7IHNob3dEZWxldGVEaWFsb2cgPSBmYWxzZVwiIGNsYXNzPVwiYnV0dG9uIHByaW1hcnlcIlxuICAgICAgICAgICAgICAgIHRyYW5zbGF0ZT5lby5jdGEuYnV0dG9uLmRlbGV0ZVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZW8tZGlhbG9nPlxuXG4gICAgPG5nLXRlbXBsYXRlICNhY3Rpb25FZGl0PlxuICAgICAgPCEtLSBhY3Rpb24gd2hpbGUgZWRpdGluZyB0aGUgcXVlcnkgZm9ybSAtLT5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJzZWNvbmRhcnkgYnRuLWNhbmNlbFwiIChjbGljayk9XCJjYW5jZWxFZGl0KClcIiB0cmFuc2xhdGU+ZW8uY3RhLmJ1dHRvbi5jYW5jZWw8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJwcmltYXJ5IGJ0bi1zYXZlXCIgKGNsaWNrKT1cInVwZGF0ZVN0b3JlZFF1ZXJ5KClcIiBbZGlzYWJsZWRdPVwiZWRpdEZvcm0uZm9ybS5pbnZhbGlkXCIgdHJhbnNsYXRlPlxuICAgICAgICBlby5zdG9yZWRxdWVyeS5hY3Rpb24uc2F2ZVxuICAgICAgPC9idXR0b24+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG5cbjwvbmctY29udGFpbmVyPlxuIl19
|
|
575
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmVkLXF1ZXJ5LWRldGFpbHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvc3RvcmVkLXF1ZXJ5L3N0b3JlZC1xdWVyeS1kZXRhaWxzL3N0b3JlZC1xdWVyeS1kZXRhaWxzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZW8tZnJhbWV3b3JrL3N0b3JlZC1xdWVyeS9zdG9yZWQtcXVlcnktZGV0YWlscy9zdG9yZWQtcXVlcnktZGV0YWlscy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDcEcsT0FBTyxFQUFDLGtCQUFrQixFQUFFLFVBQVUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTlELE9BQU8sRUFDTCxVQUFVLEVBS1YsWUFBWSxFQUNaLFdBQVcsRUFFWCxvQkFBb0IsRUFDcEIsV0FBVyxFQUlYLEtBQUssRUFDTixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUMsWUFBWSxFQUFFLGNBQWMsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ25FLE9BQU8sRUFBYSxRQUFRLEVBQUUsRUFBRSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuQyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbURBQW1ELENBQUM7QUFLakYsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHVEQUF1RCxDQUFDO0FBQ3RGLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHVDQUF1QyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBWWhFLElBQU0sMkJBQTJCLEdBQWpDLE1BQU0sMkJBQTJCO0lBOEJ0QyxJQUNJLEtBQUssQ0FBQyxDQUFjO1FBQ3RCLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkIsQ0FBQztJQUlELFlBQW9CLE1BQWMsRUFDeEIsYUFBNEIsRUFDNUIsV0FBd0IsRUFDeEIsYUFBNEIsRUFDNUIsU0FBMkIsRUFDM0IsY0FBcUMsRUFDckMsb0JBQTBDLEVBQzFDLGlCQUEwQyxFQUMxQyxPQUFtQixFQUNuQixTQUEyQixFQUMzQixZQUEwQixFQUMxQixnQkFBa0M7UUFYeEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUN4QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixtQkFBYyxHQUFkLGNBQWMsQ0FBdUI7UUFDckMseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQUMxQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQXlCO1FBQzFDLFlBQU8sR0FBUCxPQUFPLENBQVk7UUFDbkIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQTlDcEMscUJBQWdCLEdBQUcsa0JBQWtCLENBQUM7UUFDdEMsd0JBQW1CLEdBQUcscUJBQXFCLENBQUM7UUFDNUMsdUJBQWtCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBaUJ2RyxnQkFBVyxHQUFHO1lBQ1osS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDO1lBQ3JELFVBQVUsRUFBRSxJQUFJO1lBQ2hCLEtBQUssRUFBRSxJQUFJO1NBQ1osQ0FBQztRQUNGLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUN6QixTQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ1YsbUJBQWMsR0FBc0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQU9wQyxlQUFVLEdBQTZCLElBQUksWUFBWSxFQUFjLENBQUM7UUFnQjlFLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxjQUFjLEVBQUUsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxDQUFDO0lBQ25HLENBQUM7SUFFTSxhQUFhLENBQUMsS0FBaUI7UUFDcEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQy9CLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQzFCLENBQUM7SUFFRCxRQUFRLENBQUMsQ0FBYztRQUNyQixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsd0NBQXdDO1FBQ3hDLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxZQUFZLFdBQVcsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUMxQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQy9DLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdEYsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDM0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUNqQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsc0JBQXNCLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUV0RyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO2dCQUNkLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7Z0JBQ3BGLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDWixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztnQkFDdEQsVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFDZCxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtnQkFDL0UsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ1YsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRU8sWUFBWTtRQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ25FLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN2RCxDQUFDO0lBQ0gsQ0FBQztJQUVPLGFBQWE7UUFDbkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxJQUFJO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDeEIsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztZQUN4RCxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDO0lBQ0gsQ0FBQztJQUVELG1CQUFtQixDQUFDLFNBQVM7UUFDM0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDL0QsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztJQUN6QyxDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1FBQ2hELElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsU0FBUyxDQUNuRSxDQUFDLENBQUMsRUFBRTtZQUNGLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQzdELENBQUMsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDLENBQ2pGLENBQUM7UUFDRixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztJQUM1QixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1FBQ2hELElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxpQkFBaUI7UUFDZixJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNmLElBQUksTUFBTSxDQUFDO1FBQ1gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNqRSxJQUFJLFFBQVEsQ0FBQyxZQUFZLEVBQUUsV0FBVyxLQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQy9ELElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksU0FBUyxDQUFDLEtBQUssR0FBRyxDQUFDO2dCQUM5RCxNQUFNLEdBQUcsSUFBSSxDQUFDO2dCQUNkLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDSixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksQ0FBQyxvQkFBb0I7YUFDdEIsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7YUFDdEMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztRQUN6RCxDQUFDLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsb0NBQW9DLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEYsQ0FBQztJQUVELG1CQUFtQjtRQUNqQixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDO1FBQ3ZELElBQUksQ0FBQyxvQkFBb0I7YUFDdEIsZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7YUFDakMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2IsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDaEUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGtDQUFrQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNwQixDQUFDO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUMsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7SUFFRCxtQkFBbUI7UUFDakIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELGdDQUFnQztJQUNoQyxpQkFBaUI7UUFFZixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQzlHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO2FBQ2xCLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNYLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsQ0FBQztpQkFBTSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLE9BQU8sR0FBbUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6RyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0RCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFTCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUV6RSxvREFBb0Q7UUFDcEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ3ZELE1BQU0sb0JBQW9CLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxRQUFRLEtBQUssWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2pILElBQUksb0JBQW9CLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsY0FBYyxHQUFHLG9CQUFvQixDQUFDLGNBQWMsQ0FBQztnQkFDckYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxHQUFHLG9CQUFvQixDQUFDLFFBQVEsQ0FBQztnQkFDekUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsVUFBVSxHQUFHLG9CQUFvQixDQUFDLFVBQVUsQ0FBQztnQkFDN0UsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxHQUFHLG9CQUFvQixDQUFDLFdBQVcsQ0FBQztnQkFDL0UsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLG9CQUFvQixDQUFDLE1BQU0sQ0FBQztnQkFDckUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsYUFBYSxHQUFHLG9CQUFvQixDQUFDLGFBQWEsQ0FBQztZQUNyRixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsb0JBQW9CO2FBQ3RCLGVBQWUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO2FBQ2pDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO1lBQzlCLElBQUksQ0FBQyxLQUFLLEdBQUcsa0JBQWtCLENBQUM7WUFDaEMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUMsQ0FBQyxDQUFDO1FBQ3RGLENBQUMsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsZ0JBQWdCLENBQUMsS0FBd0M7UUFFdkQsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdEIsNEJBQTRCO1lBQzVCLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pHLENBQUM7YUFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM3Qix3QkFBd0I7WUFDeEIsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNyRCxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNWLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN6QyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFTyxXQUFXO1FBRWpCLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekQsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBR2QsVUFBVSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUU1QixNQUFNLEVBQUUsR0FBNkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBNkIsQ0FBQztZQUN2RyxJQUFJLFdBQVcsQ0FBQztZQUNoQixJQUFJLEVBQUUsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUN6QyxNQUFNLEVBQUUsR0FBc0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQXNCLENBQUM7Z0JBQ3pFLFdBQVcsR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDO1lBQ2xDLENBQUM7WUFDRCxJQUFJLFdBQVcsSUFBSSxXQUFXLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQzdDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDeEIsQ0FBQztpQkFBTSxDQUFDO2dCQUVOLFFBQVEsUUFBUSxFQUFFLENBQUM7b0JBQ2pCLEtBQUssSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQzt3QkFDM0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7d0JBQzFELE1BQU07b0JBQ1IsQ0FBQztvQkFDRCxLQUFLLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7d0JBQzlCLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO3dCQUN6RixNQUFNO29CQUNSLENBQUM7b0JBQ0QsT0FBTyxDQUFDLENBQUMsQ0FBQzt3QkFDUixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7d0JBQ3ZELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzs0QkFDakMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDckIsQ0FBQztvQkFDSCxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssb0JBQW9CLENBQUMsS0FBYTtRQUV4QyxJQUFJLENBQUM7WUFDSCxJQUFJLEtBQXdCLENBQUM7WUFDN0IsdUNBQXVDO1lBQ3ZDLElBQUksS0FBSyxLQUFLLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUM1QyxLQUFLLEdBQUc7b0JBQ04sS0FBSyxFQUFFLEtBQUs7b0JBQ1osSUFBSSxFQUFFLEtBQUs7aUJBQ1osQ0FBQztZQUNKLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLEVBQUUsR0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUE4QixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQXVCLENBQUM7Z0JBQ25ILE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUM7Z0JBQzdCLEtBQUssR0FBRztvQkFDTixLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUs7b0JBQ2YsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJO2lCQUNkLENBQUM7WUFDSixDQUFDO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFTyxhQUFhO1FBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUc7WUFDZCxJQUFJLEVBQUUsSUFBSTtZQUNWLG1CQUFtQixFQUFFLElBQUk7WUFDekIsUUFBUSxFQUFFLEVBQUU7WUFDWixlQUFlLEVBQUUsRUFBRTtTQUNwQixDQUFDO0lBQ0osQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLENBQUMsUUFBUTthQUNWLElBQUk7YUFDSixZQUFZO2FBQ1osU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVPLGNBQWM7UUFFcEIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUVyQyxJQUFJLElBQUksR0FBRyxJQUFJLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNuQyxJQUFJLE9BQU8sR0FBRyxJQUFJLGtCQUFrQixDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDOUQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRXhDLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLHNCQUFzQixDQUNsRixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBQyxFQUNwRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FDdEIsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsR0FBRyxVQUFVLENBQUM7WUFFL0MsK0JBQStCO1lBQy9CLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2hELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBRXRELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUMxRSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVE7cUJBQ25CLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzNFLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZTtxQkFDMUIsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3RSxDQUFDO1lBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQzFCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLG9FQUFvRTtRQUNwRSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN4QyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsNEJBQTRCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FDeEcsR0FBRyxDQUFDLENBQUMsUUFBZSxFQUFFLEVBQUU7Z0JBQ3RCLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQ25CLCtFQUErRTtvQkFDL0UsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO3dCQUN4QixJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQzs0QkFDZixDQUFDLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQzt3QkFDckIsQ0FBQzt3QkFDRCxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQzs0QkFDZixDQUFDLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQzt3QkFDckIsQ0FBQzt3QkFDRCxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNqQyxJQUFJLEVBQUUsRUFBRSxDQUFDOzRCQUNQLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDbEMsQ0FBQztvQkFDSCxDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFBO1lBQ0osQ0FBQyxDQUFDLENBQ0gsQ0FBQyxDQUFBO1FBQ0osQ0FBQztRQUNELG9DQUFvQztRQUNwQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDL0MsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQzNILEdBQUcsQ0FBQyxDQUFDLFFBQWUsRUFBRSxFQUFFO2dCQUN0QixRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUNuQixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNqQyxJQUFJLEVBQUUsRUFBRSxDQUFDO3dCQUNQLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDekMsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQTtZQUNKLENBQUMsQ0FBQyxDQUNILENBQUMsQ0FBQTtRQUNKLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFTyxVQUFVO1FBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3ZELElBQUksQ0FBQyxhQUFhO2lCQUNmLFFBQVEsRUFBRTtpQkFDVixTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ2YsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxHQUFHO29CQUM1QixPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO3dCQUNyQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7d0JBQ1gsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJO3dCQUNoQixxQkFBcUIsRUFBRSxJQUFJLENBQUMsSUFBSTt3QkFDaEMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO3FCQUNoQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDcEMsQ0FBQTtZQUNILENBQUMsQ0FDQSxDQUFBO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxZQUFZLEdBQWtCLEVBQUUsQ0FBQztRQUVyQyxtQkFBbUI7UUFDbkIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM1RCxZQUFZLENBQUMsSUFBSSxDQUFDO2dCQUNoQixLQUFLLEVBQUUsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJO2dCQUNuQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQWlDLENBQUM7Z0JBQ2hFLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO2FBQ2hELENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCwrQkFBK0I7UUFDL0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDaEQsSUFBSSxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUVoRSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO2dCQUM5QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsR0FBRyxLQUFLLENBQUMsQ0FBQztnQkFFNUUsUUFBUSxLQUFLLEVBQUUsQ0FBQztvQkFDZCxLQUFLLFdBQVcsQ0FBQyxXQUFXLENBQUMsYUFBYTt3QkFDeEMsWUFBWSxDQUFDLElBQUksQ0FBQzs0QkFDaEIsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQzt5QkFDaEcsQ0FBQyxDQUFDO3dCQUNILE1BQU07b0JBQ1IsS0FBSyxXQUFXLENBQUMsV0FBVyxDQUFDLFFBQVE7d0JBQ25DLFlBQVksQ0FBQyxJQUFJLENBQUM7NEJBQ2hCLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQzt5QkFDekMsQ0FBQyxDQUFDO3dCQUNILE1BQU07b0JBQ1IsS0FBSyxXQUFXLENBQUMsV0FBVyxDQUFDLFFBQVE7d0JBQ25DLFlBQVksQ0FBQyxJQUFJLENBQUM7NEJBQ2hCLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMseUJBQXlCLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO3lCQUM3RixDQUFDLENBQUM7d0JBQ0gsTUFBTTtvQkFDUixLQUFLLFdBQVcsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDO29CQUNyQyxLQUFLLFdBQVcsQ0FBQyxXQUFXLENBQUMsUUFBUTt3QkFDbkMsWUFBWSxDQUFDLElBQUksQ0FBQzs0QkFDaEIsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7eUJBQzFELENBQUMsQ0FBQzt3QkFDSCxNQUFNO29CQUNSLEtBQUssV0FBVyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUM7b0JBQ3JDLEtBQUssV0FBVyxDQUFDLFdBQVcsQ0FBQyxRQUFRO3dCQUNuQyxJQUFJLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7NkJBQ3pELFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7NEJBQ3ZDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQ0FDdEMsT0FBTyxDQUFDLENBQUMsRUFBRSxLQUFLLGVBQWU7b0NBQzdCLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyw0Q0FBNEMsQ0FBQztvQ0FDdEUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUE7NEJBQ2IsQ0FBQyxDQUFDO3lCQUNILENBQUMsQ0FBQyxDQUFDO3dCQUNOLE1BQU07Z0JBQ1YsQ0FBQztZQUNILENBQUM7UUFFSCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxNQUFvQjtRQUN4QyxRQUFRLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN4QixLQUFLLFlBQVksQ0FBQyxRQUFRLENBQUMsS0FBSztnQkFDOUIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7WUFDM0UsS0FBSyxZQUFZLENBQUMsUUFBUSxDQUFDLEtBQUs7Z0JBQzlCLE9BQU8sS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxFQUFFLENBQUM7WUFDMUUsS0FBSyxZQUFZLENBQUMsUUFBUSxDQUFDLHFCQUFxQjtnQkFDOUMsT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQ3hJLEtBQUssWUFBWSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0I7Z0JBQ3pDLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQywrQkFBK0IsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLEVBQUUsQ0FBQztZQUNuSSxLQUFLLFlBQVksQ0FBQyxRQUFRLENBQUMsYUFBYTtnQkFDdEMsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLCtCQUErQixDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQ25JO2dCQUNFLE9BQU8sSUFBSSxNQUFNLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLEVBQUUsQ0FBQztRQUMvRixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxhQUFhLENBQUMsV0FBVztRQUUvQixzRkFBc0Y7UUFDdEYsa0ZBQWtGO1FBQ2xGLDBCQUEwQjtRQUMxQixXQUFXLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUM7UUFFckMsSUFBSSxXQUFXLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQ2pDLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNsRSxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQzlCLFdBQVcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQywwQkFBMEIsQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ25HLENBQUM7aUJBQU0sQ0FBQztnQkFDTixXQUFXLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3pCLE9BQU8sV0FBVyxDQUFDLGFBQWEsQ0FBQztZQUNuQyxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTiw4REFBOEQ7WUFDOUQsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNELCtFQUErRTtZQUMvRSw4RUFBOEU7WUFDOUUsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFFWCwwQkFBMEI7Z0JBQzFCLElBQUksTUFBTSxDQUFDLFFBQVEsS0FBSyxZQUFZLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsVUFBVSxLQUFLLElBQUksRUFBRSxDQUFDO29CQUNsRixXQUFXLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztnQkFDbkMsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE9BQU8sV0FBVyxDQUFDLGFBQWEsQ0FBQztnQkFDbkMsQ0FBQztnQkFFRCxXQUFXLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsb0JBQW9CLENBQ3pELElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFDN0MsV0FBVyxDQUFDLElBQUksQ0FDakIsQ0FBQztZQUNKLENBQUM7aUJBQU0sSUFBSSxXQUFXLENBQUMsS0FBSyxLQUFLLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUMvRCxXQUFXLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQztnQkFDOUIsT0FBTyxXQUFXLENBQUMsYUFBYSxDQUFDO1lBQ25DLENBQUM7UUFDSCxDQUFDO1FBQ0QsbUJBQW1CO1FBQ25CLE1BQU0sS0FBSyxHQUFRLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN6RCxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLG9CQUFvQixDQUFDLFFBQVEsSUFBSSxXQUFXLENBQUMsS0FBSyxLQUFLLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ3JKLENBQUMsQ0FBQyxDQUFDO1FBQ0gsbUVBQW1FO1FBQ25FLFdBQVcsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUUvQixxREFBcUQ7UUFDckQsbURBQW1EO1FBQ25ELDBDQUEwQztRQUMxQyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVELG1CQUFtQjtRQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUMsT0FBTyxFQUFFLEVBQUMsS0FBSyxFQUFFLFFBQVEsRUFBQyxFQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxHQUFHO1FBQ3RCLE1BQU0sUUFBUSxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDbkUsTUFBTSxhQUFhLEdBQXFCLEVBQUMsV0FBVyxFQUFFLEVBQUMsT0FBTyxFQUFFLFFBQVEsRUFBQyxFQUFDLENBQUM7UUFDM0UsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxVQUFVLEdBQUc7WUFDaEIsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLDRCQUE0QixDQUFDO1lBQzNELE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxnQ0FBZ0MsQ0FBQztZQUNoRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsNEJBQTRCLENBQUM7WUFDM0QsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGlDQUFpQyxDQUFDO1NBQ25FLENBQUE7SUFDSCxDQUFDO0lBR0QsUUFBUTtRQUNOLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTTthQUNsQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzFCLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNiLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBSyxFQUFFLElBQUk7UUFDdEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBSyxFQUFFLElBQUk7UUFDdEIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxXQUFXLENBQUMsT0FBTztRQUNqQixJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3BFLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLENBQUM7UUFDOUQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUU5QyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3pDLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELE9BQU8sT0FBTyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDO0lBQ2xELENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSyxrQkFBa0I7UUFDeEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDOUQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzhHQTdtQlUsMkJBQTJCO2tHQUEzQiwyQkFBMkIsc1BDekN4Qyw0L1BBK0tBOztBRHRJYSwyQkFBMkI7SUFOdkMsWUFBWSxFQUFFO0dBTUYsMkJBQTJCLENBK21CdkM7OzJGQS9tQlksMkJBQTJCO2tCQUx2QyxTQUFTOytCQUNFLHlCQUF5QjsyWkFZTCxlQUFlO3NCQUE1QyxTQUFTO3VCQUFDLGlCQUFpQjtnQkF1QnhCLEtBQUs7c0JBRFIsS0FBSztnQkFLSSxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtVbnR5cGVkRm9ybUNvbnRyb2wsIFZhbGlkYXRvcnN9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7TmF2aWdhdGlvbkV4dHJhcywgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtcbiAgRW5haW9FdmVudCxcbiAgRXZlbnRTZXJ2aWNlLFxuICBJU3RvcmVkUXVlcnlQYXJhbSxcbiAgT3JnUm9sZSxcbiAgUXVlcnlTY29wZSxcbiAgU2VhcmNoRmlsdGVyLFxuICBTZWFyY2hRdWVyeSxcbiAgU2VhcmNoU2VydmljZSxcbiAgU3RvcmVkUXVlcmllc1NlcnZpY2UsXG4gIFN0b3JlZFF1ZXJ5LFxuICBTeXN0ZW1TZXJ2aWNlLFxuICBUcmFuc2xhdGVTZXJ2aWNlLFxuICBVc2VyU2VydmljZSxcbiAgVXRpbHNcbn0gZnJvbSAnQGVvLXNkay9jb3JlJztcbmltcG9ydCB7VW50aWxEZXN0cm95LCB1bnRpbERlc3Ryb3llZH0gZnJvbSAnQG5nbmVhdC91bnRpbC1kZXN0cm95JztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgZm9ya0pvaW4sIG9mfSBmcm9tICdyeGpzJztcbmltcG9ydCB7dGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1BlbmRpbmdDaGFuZ2VzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vZW8tZnJhbWV3b3JrLWNvcmUvcGVuZGluZy1jaGFuZ2VzL3BlbmRpbmctY2hhbmdlcy5zZXJ2aWNlJztcbmltcG9ydCB7TG9jYWxlRGF0ZVBpcGV9IGZyb20gJy4uLy4uLy4uL2VvLWZyYW1ld29yay1jb3JlL3BpcGVzL2xvY2FsZS1kYXRlLnBpcGUnO1xuaW1wb3J0IHtTZWxlY3Rpb25TZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9lby1mcmFtZXdvcmstY29yZS9zZWxlY3Rpb24vc2VsZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtPYmplY3RGb3JtSGVscGVyU2VydmljZX0gZnJvbSAnLi4vLi4vb2JqZWN0LWZvcm0vb2JqZWN0LWZvcm0taGVscGVyLnNlcnZpY2UnO1xuaW1wb3J0IHtPYmplY3RGb3JtQ29udHJvbH0gZnJvbSAnLi4vLi4vb2JqZWN0LWZvcm0vb2JqZWN0LWZvcm0vb2JqZWN0LWZvcm0tY29udHJvbCc7XG5pbXBvcnQge09iamVjdEZvcm1Db250cm9sV3JhcHBlcn0gZnJvbSAnLi4vLi4vb2JqZWN0LWZvcm0vb2JqZWN0LWZvcm0vb2JqZWN0LWZvcm0tY29udHJvbC13cmFwcGVyJztcbmltcG9ydCB7T2JqZWN0Rm9ybUdyb3VwfSBmcm9tICcuLi8uLi9vYmplY3QtZm9ybS9vYmplY3QtZm9ybS9vYmplY3QtZm9ybS1ncm91cC5tb2RlbCc7XG5pbXBvcnQge1V0aWxpdGllc1NlcnZpY2V9IGZyb20gJy4uLy4uL3V0aWwvc2VydmljZXMvdXRpbGl0aWVzLnNlcnZpY2UnO1xuaW1wb3J0IHtFZGl0Rm9ybSwgTm90aWZ5TGlzdCwgUmVzdHJpY3Rpb259IGZyb20gJy4uL3N0b3JlZC1xdWVyeS5pbnRlcmZhY2UnO1xuaW1wb3J0IHtTdG9yZWRRdWVyeUNvbXBvbmVudH0gZnJvbSAnLi4vc3RvcmVkLXF1ZXJ5L3N0b3JlZC1xdWVyeS5jb21wb25lbnQnO1xuaW1wb3J0IHtXaWRnZXRHcmlkV29ya3NwYWNlfSBmcm9tICdAeXV1dmlzL3dpZGdldC1ncmlkJztcbmltcG9ydCB7QXBwU2VhcmNoU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vZW8tZnJhbWV3b3JrLWNvcmUnO1xuXG5AVW50aWxEZXN0cm95KClcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2VvLXN0b3JlZC1xdWVyeS1kZXRhaWxzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3N0b3JlZC1xdWVyeS1kZXRhaWxzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc3RvcmVkLXF1ZXJ5LWRldGFpbHMuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBTdG9yZWRRdWVyeURldGFpbHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIHByaXZhdGUgRk9STV9JTlBVVF9USVRMRSA9ICdzdG9yZWRRdWVyeVRpdGxlJztcbiAgcHJpdmF0ZSBGT1JNX0lOUFVUX0ZVTExURVhUID0gJ3N0b3JlZFF1ZXJ5RnVsbHRleHQnO1xuICBwcml2YXRlIEJBU0VfUEFSQU1TX0ZJRUxEUyA9IE9iamVjdC5rZXlzKFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TKS5tYXAoayA9PiBTZWFyY2hRdWVyeS5CQVNFX1BBUkFNU1trXSk7XG4gIHByaXZhdGUgZGF0ZVBpcGU6IExvY2FsZURhdGVQaXBlO1xuICBwcml2YXRlIHBlbmRpbmdUYXNrSWQ6IHN0cmluZztcblxuICBAVmlld0NoaWxkKCdzdG9yZWRRdWVyeUZvcm0nKSBzdG9yZWRRdWVyeUZvcm06IFN0b3JlZFF1ZXJ5Q29tcG9uZW50O1xuXG4gIGljb25UaXRsZXM6IGFueTtcbiAgc3RvcmVkUXVlcnk6IFN0b3JlZFF1ZXJ5O1xuICBxdWVyeVNjb3BlOiBRdWVyeVNjb3BlO1xuICBlZGl0Rm9ybTogRWRpdEZvcm07XG4gIHJlc3RyaWN0aW9uczogUmVzdHJpY3Rpb25bXTtcbiAgZWRpdGluZ1NoYXJlOiBib29sZWFuO1xuICBpc05ld1F1ZXJ5OiBib29sZWFuO1xuICBpc093blF1ZXJ5OiBib29sZWFuO1xuICBlbmFibGVTaGFyaW5nOiBib29sZWFuO1xuICBzeXN0ZW1Sb2xlczogT3JnUm9sZVtdO1xuICB3b3Jrc3BhY2VzOiBXaWRnZXRHcmlkV29ya3NwYWNlW107XG4gIHJvbGVzUGlja2VyID0ge1xuICAgIHRpdGxlOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5zdG9yZWRxdWVyeS5yb2xlcycpLFxuICAgIGNvZGVzeXN0ZW06IG51bGwsXG4gICAgdmFsdWU6IG51bGxcbiAgfTtcbiAgc2hvd0RlbGV0ZURpYWxvZyA9IGZhbHNlO1xuICBpbmZvID0gJyc7XG4gIGlzVGFibGVEYXRhTWFwOiBNYXA8YW55LCBib29sZWFuPiA9IG5ldyBNYXAoKTtcblxuICBASW5wdXQoKVxuICBzZXQgcXVlcnkocTogU3RvcmVkUXVlcnkpIHtcbiAgICB0aGlzLnNldFF1ZXJ5KHEpO1xuICB9XG5cbiAgQE91dHB1dCgpIG5vdGlmeUxpc3Q6IEV2ZW50RW1pdHRlcjxOb3RpZnlMaXN0PiA9IG5ldyBFdmVudEVtaXR0ZXI8Tm90aWZ5TGlzdD4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgc2VhcmNoU2VydmljZTogU2VhcmNoU2VydmljZSxcbiAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcbiAgICBwcml2YXRlIHN5c3RlbVNlcnZpY2U6IFN5c3RlbVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzZWxlY3Rpb246IFNlbGVjdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwZW5kaW5nQ2hhbmdlczogUGVuZGluZ0NoYW5nZXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3RvcmVkUXVlcmllc1NlcnZpY2U6IFN0b3JlZFF1ZXJpZXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgZm9ybUhlbHBlclNlcnZpY2U6IE9iamVjdEZvcm1IZWxwZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgZWxlbVJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGV2ZW50U2VydmljZTogRXZlbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXBwU2VhcmNoU2VydmljZTogQXBwU2VhcmNoU2VydmljZVxuICApIHtcblxuICAgIHRoaXMuZGF0ZVBpcGUgPSBuZXcgTG9jYWxlRGF0ZVBpcGUodHJhbnNsYXRlKTtcbiAgICB0aGlzLmZldGNoUm9sZXMoKTtcbiAgICB0aGlzLndvcmtzcGFjZXMgPSB0aGlzLnVzZXJTZXJ2aWNlPy5nZXRDdXJyZW50VXNlcigpPy51c2VyU2V0dGluZ3M/LndvcmtzcGFjZU9wdGlvbnM/LndvcmtzcGFjZXM7XG4gIH1cblxuICBwdWJsaWMgc2V0UXVlcnlTY29wZShzY29wZTogUXVlcnlTY29wZSkge1xuICAgIHRoaXMuc3RvcmVkUXVlcnkuc2NvcGUgPSBzY29wZTtcbiAgICB0aGlzLnF1ZXJ5U2NvcGUgPSBzY29wZTtcbiAgfVxuXG4gIHNldFF1ZXJ5KHE6IFN0b3JlZFF1ZXJ5KSB7XG4gICAgdGhpcy5lZGl0aW5nU2hhcmUgPSBmYWxzZTtcbiAgICB0aGlzLnJlc2V0RWRpdEZvcm0oKTtcbiAgICAvLyBncmFiIG1ldGEgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHF1ZXJ5XG4gICAgdGhpcy5zdG9yZWRRdWVyeSA9IHE7XG4gICAgaWYgKHEgaW5zdGFuY2VvZiBTdG9yZWRRdWVyeSkge1xuICAgICAgdGhpcy5xdWVyeVNjb3BlID0gcS5zY29wZTtcbiAgICAgIGNvbnN0IHVzZXIgPSB0aGlzLnVzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCk7XG4gICAgICB0aGlzLmlzTmV3UXVlcnkgPSBxLmlzTmV3KCk7XG4gICAgICB0aGlzLmlzT3duUXVlcnkgPSB0aGlzLmlzTmV3UXVlcnkgfHwgcS51c2VyLnRvTG93ZXJDYXNlKCkgPT09IHVzZXIubmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgdGhpcy5yZXN0cmljdGlvbnMgPSB0aGlzLmdldFJlc3RyaWN0aW9ucygpO1xuICAgICAgdGhpcy5yb2xlc1BpY2tlci52YWx1ZSA9IHEucm9sZXM7XG4gICAgICB0aGlzLmVuYWJsZVNoYXJpbmcgPSB1c2VyLmhhc1ByaXZpbGVnZSgnU0hBUkVfU1RPUkVEX1FVRVJJRVMnKSAmJiB0aGlzLmlzT3duUXVlcnkgJiYgIXRoaXMuaXNOZXdRdWVyeTtcblxuICAgICAgaWYgKHEuaXNOZXcoKSkge1xuICAgICAgICB0aGlzLnN0b3JlZFF1ZXJ5Lm5hbWUgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5zZWFyY2guc3RvcmVkcXVlcmllcy5uZXcudGl0bGUnKTtcbiAgICAgICAgdGhpcy5lZGl0KCk7XG4gICAgICAgIHRoaXMuc3RhcnRQZW5kaW5nKCk7XG4gICAgICAgIHRoaXMubm90aWZ5TGlzdC5lbWl0KHt1bnNlbGVjdDogdHJ1ZSwgdXBkYXRlOiBmYWxzZX0pO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLmVsZW1SZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdbbmFtZT1cInN0b3JlZFF1ZXJ5VGl0bGVcIl0nKS5mb2N1cygpXG4gICAgICAgIH0sIDUwMCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGFydFBlbmRpbmcoKSB7XG4gICAgaWYgKCF0aGlzLnBlbmRpbmdDaGFuZ2VzLmhhc1BlbmRpbmdUYXNrKHRoaXMucGVuZGluZ1Rhc2tJZCB8fCAnICcpKSB7XG4gICAgICB0aGlzLnBlbmRpbmdUYXNrSWQgPSB0aGlzLnBlbmRpbmdDaGFuZ2VzLnN0YXJ0VGFzaygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmluaXNoUGVuZGluZygpIHtcbiAgICB0aGlzLnBlbmRpbmdDaGFuZ2VzLmZpbmlzaFRhc2sodGhpcy5wZW5kaW5nVGFza0lkKTtcbiAgfVxuXG4gIGVkaXQoKSB7XG4gICAgaWYgKCF0aGlzLmVkaXRGb3JtLmZvcm0pIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmNyZWF0ZUVkaXRGb3JtKCk7XG4gICAgICAgIHRoaXMubm90aWZ5TGlzdC5lbWl0KHt1bnNlbGVjdDogZmFsc2UsIHVwZGF0ZTogdHJ1ZX0pO1xuICAgICAgfSwgMCk7XG4gICAgfVxuICB9XG5cbiAgb25Gb3JtU3RhdHVzQ2hhbmdlZChmb3JtU3RhdGUpIHtcbiAgICBmb3JtU3RhdGUuZGlydHkgPyB0aGlzLnN0YXJ0UGVuZGluZygpIDogdGhpcy5maW5pc2hQZW5kaW5nKCk7XG4gIH1cblxuICB0b2dnbGVTaGFyZUVkaXQoKSB7XG4gICAgdGhpcy5lZGl0aW5nU2hhcmUgPSAhdGhpcy5lZGl0aW5nU2hhcmU7XG4gIH1cblxuICBzaGFyZSgpIHtcbiAgICB0aGlzLnN0b3JlZFF1ZXJ5LnJvbGVzID0gdGhpcy5yb2xlc1BpY2tlci52YWx1ZTtcbiAgICB0aGlzLnN0b3JlZFF1ZXJ5LnNoYXJlZCA9IHRoaXMuc3RvcmVkUXVlcnkucm9sZXM/Lmxlbmd0aCA+IDA7XG4gICAgdGhpcy5zdG9yZWRRdWVyaWVzU2VydmljZS5zYXZlU3RvcmVkUXVlcnkodGhpcy5zdG9yZWRRdWVyeSkuc3Vic2NyaWJlKFxuICAgICAgXyA9PiB7XG4gICAgICAgIHRoaXMuZXZlbnRTZXJ2aWNlLnRyaWdnZXIoRW5haW9FdmVudC5TVE9SRURfT0JKRUNUX1NIQVJFRCk7XG4gICAgICB9LCBVdGlscy50aHJvdyhudWxsLCB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5zZWFyY2guc3RvcmVkcXVlcnkuc2F2ZS5lcnJvcicpKVxuICAgICk7XG4gICAgdGhpcy5lZGl0aW5nU2hhcmUgPSBmYWxzZTtcbiAgfVxuXG4gIGNhbmNlbFNoYXJlKCkge1xuICAgIHRoaXMucm9sZXNQaWNrZXIudmFsdWUgPSB0aGlzLnN0b3JlZFF1ZXJ5LnJvbGVzO1xuICAgIHRoaXMuZWRpdGluZ1NoYXJlID0gZmFsc2U7XG4gICAgdGhpcy5ldmVudFNlcnZpY2UudHJpZ2dlcihFbmFpb0V2ZW50LlNUT1JFRF9PQkpFQ1RfU0hBUkVEKTtcbiAgfVxuXG4gIGlzU3RvcmVkUXVlcnlVc2VkKCk6IGJvb2xlYW4ge1xuICAgIHRoaXMuaW5mbyA9ICcnO1xuICAgIGxldCBpc1VzZWQ7XG4gICAgdGhpcy53b3Jrc3BhY2VzLmZpbHRlcih3b3Jrc3BhY2UgPT4gd29ya3NwYWNlLmdyaWQuc29tZShncmlkSXRlbSA9PiB7XG4gICAgICBpZiAoZ3JpZEl0ZW0ud2lkZ2V0Q29uZmlnPy5zdG9yZWRRdWVyeSA9PT0gdGhpcy5zdG9yZWRRdWVyeS5pZCkge1xuICAgICAgICB0aGlzLmluZm8gKz0gKHRoaXMuaW5mbyA/ICcsICcgOiAnJykgKyBgJyR7d29ya3NwYWNlLmxhYmVsfSdgO1xuICAgICAgICBpc1VzZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KSk7XG4gICAgcmV0dXJuIGlzVXNlZDtcbiAgfVxuXG4gIGRlbGV0ZSgpIHtcbiAgICB0aGlzLnN0b3JlZFF1ZXJpZXNTZXJ2aWNlXG4gICAgICAucmVtb3ZlU3RvcmVkUXVlcnkodGhpcy5zdG9yZWRRdWVyeS5pZClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnF1ZXJ5ID0gbnVsbDtcbiAgICAgICAgdGhpcy5ub3RpZnlMaXN0LmVtaXQoe3Vuc2VsZWN0OiBmYWxzZSwgdXBkYXRlOiBmYWxzZX0pO1xuICAgICAgfSwgVXRpbHMudGhyb3cobnVsbCwgdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8uc2VhcmNoLnN0b3JlZHF1ZXJ5LmRlbGV0ZS5lcnJvcicpKSk7XG4gIH1cblxuICB0b2dnbGVGYXZvcml0ZVN0YXRlKCkge1xuICAgIHRoaXMuc3RvcmVkUXVlcnkuZmF2b3JpdGUgPSAhdGhpcy5zdG9yZWRRdWVyeS5mYXZvcml0ZTtcbiAgICB0aGlzLnN0b3JlZFF1ZXJpZXNTZXJ2aWNlXG4gICAgICAuc2F2ZVN0b3JlZFF1ZXJ5KHRoaXMuc3RvcmVkUXVlcnkpXG4gICAgICAuc3Vic2NyaWJlKF8gPT4ge1xuICAgICAgICB0aGlzLmV2ZW50U2VydmljZS50cmlnZ2VyKEVuYWlvRXZlbnQuU1RPUkVEX09CSkVDVF9GQVZPUklTRUQpO1xuICAgICAgfSwgVXRpbHMudGhyb3cobnVsbCwgdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8uc2VhcmNoLnN0b3JlZHF1ZXJ5LnNhdmUuZXJyb3InKSkpO1xuICB9XG5cbiAgY2FuY2VsRWRpdCgpIHtcbiAgICB0aGlzLnJlc2V0RWRpdEZvcm0oKTtcbiAgICB0aGlzLmZpbmlzaFBlbmRpbmcoKTtcbiAgICBpZiAodGhpcy5zdG9yZWRRdWVyeS5pc05ldygpKSB7XG4gICAgICB0aGlzLnF1ZXJ5ID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5ub3RpZnlMaXN0LmVtaXQoe3Vuc2VsZWN0OiBmYWxzZSwgdXBkYXRlOiBmYWxzZSwgcGF5bG9hZDogdGhpcy5zdG9yZWRRdWVyeX0pO1xuICB9XG5cbiAgc2V0UXVlcnlUb0FwcFNlYXJjaCgpIHtcbiAgICB0aGlzLnN0b3JlZFF1ZXJ5Rm9ybS5sb2FkKCk7XG4gIH1cblxuICBleGVjdXRlUXVlcnkoKSB7XG4gICAgdGhpcy5zdG9yZWRRdWVyeUZvcm0uZXhlY3V0ZSgpO1xuICB9XG5cbiAgLy8gU2F2ZSB0aGUgY3VycmVudCBzdG9yZWQgcXVlcnlcbiAgdXBkYXRlU3RvcmVkUXVlcnkoKSB7XG5cbiAgICBjb25zdCBmb3JtRGF0YSA9IHRoaXMuZ2V0Rm9ybURhdGEoKTtcbiAgICB0aGlzLnN0b3JlZFF1ZXJ5LmZpbHRlcnMgPSB0aGlzLnN0b3JlZFF1ZXJ5LmZpbHRlcnMuZmlsdGVyKGYgPT4gfnRoaXMuQkFTRV9QQVJBTVNfRklFTERTLmluZGV4T2YoZi5wcm9wZXJ0eSkpO1xuICAgIE9iamVjdC5rZXlzKGZvcm1EYXRhKVxuICAgICAgLmZvckVhY2goayA9PiB7XG4gICAgICAgIGlmIChrID09PSB0aGlzLkZPUk1fSU5QVVRfVElUTEUpIHtcbiAgICAgICAgICB0aGlzLnN0b3JlZFF1ZXJ5Lm5hbWUgPSBmb3JtRGF0YVtrXTtcbiAgICAgICAgfSBlbHNlIGlmIChrID09PSB0aGlzLkZPUk1fSU5QVVRfRlVMTFRFWFQpIHtcbiAgICAgICAgICB0aGlzLnN0b3JlZFF1ZXJ5LnRlcm0gPSBmb3JtRGF0YVtrXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZXQgZmlsdGVyczogU2VhcmNoRmlsdGVyW10gPSB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0U2VhcmNoRmlsdGVyKHRoaXMuc3RvcmVkUXVlcnkudHlwZXMsIGssIGZvcm1EYXRhW2tdKTtcbiAgICAgICAgICBmaWx0ZXJzLmZvckVhY2goZiA9PiB0aGlzLnN0b3JlZFF1ZXJ5LmFkZEZpbHRlcihmKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgY29uc3Qgc2VhcmNoRmlsdGVycyA9IHRoaXMuYXBwU2VhcmNoU2VydmljZS5nZXRJbmRleFNlYXJjaFF1ZXJ5RmlsdGVycygpO1xuXG4gICAgLy8gVXBkYXRlIHN0b3JlZFF1ZXJ5LmZpbHRlcnMgYmFzZWQgb24gc2VhcmNoRmlsdGVyc1xuICAgIHRoaXMuc3RvcmVkUXVlcnkuZmlsdGVycy5mb3JFYWNoKChzdG9yZWRGaWx0ZXIsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBtYXRjaGluZ1NlYXJjaEZpbHRlciA9IHNlYXJjaEZpbHRlcnMuZmluZChzZWFyY2hGaWx0ZXIgPT4gc2VhcmNoRmlsdGVyLnByb3BlcnR5ID09PSBzdG9yZWRGaWx0ZXIucHJvcGVydHkpO1xuICAgICAgaWYgKG1hdGNoaW5nU2VhcmNoRmlsdGVyKSB7XG4gICAgICAgIHRoaXMuc3RvcmVkUXVlcnkuZmlsdGVyc1tpbmRleF0uYWN0dWFsT3BlcmF0b3IgPSBtYXRjaGluZ1NlYXJjaEZpbHRlci5hY3R1YWxPcGVyYXRvcjtcbiAgICAgICAgdGhpcy5zdG9yZWRRdWVyeS5maWx0ZXJzW2luZGV4XS5vcGVyYXRvciA9IG1hdGNoaW5nU2VhcmNoRmlsdGVyLm9wZXJhdG9yO1xuICAgICAgICB0aGlzLnN0b3JlZFF1ZXJ5LmZpbHRlcnNbaW5kZXhdLmZpcnN0VmFsdWUgPSBtYXRjaGluZ1NlYXJjaEZpbHRlci5maXJzdFZhbHVlO1xuICAgICAgICB0aGlzLnN0b3JlZFF1ZXJ5LmZpbHRlcnNbaW5kZXhdLnNlY29uZFZhbHVlID0gbWF0Y2hpbmdTZWFyY2hGaWx0ZXIuc2Vjb25kVmFsdWU7XG4gICAgICAgIHRoaXMuc3RvcmVkUXVlcnkuZmlsdGVyc1tpbmRleF0udXNlTm90ID0gbWF0Y2hpbmdTZWFyY2hGaWx0ZXIudXNlTm90O1xuICAgICAgICB0aGlzLnN0b3JlZFF1ZXJ5LmZpbHRlcnNbaW5kZXhdLnRyYW5zZm9ybURhdGUgPSBtYXRjaGluZ1NlYXJjaEZpbHRlci50cmFuc2Zvcm1EYXRlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5zdG9yZWRRdWVyaWVzU2VydmljZVxuICAgICAgLnNhdmVTdG9yZWRRdWVyeSh0aGlzLnN0b3JlZFF1ZXJ5KVxuICAgICAgLnN1YnNjcmliZSh1cGRhdGVkU3RvcmVkUXVlcnkgPT4ge1xuICAgICAgICB0aGlzLnF1ZXJ5ID0gdXBkYXRlZFN0b3JlZFF1ZXJ5O1xuICAgICAgICB0aGlzLnJlc2V0RWRpdEZvcm0oKTtcbiAgICAgICAgdGhpcy5maW5pc2hQZW5kaW5nKCk7XG4gICAgICAgIHRoaXMubm90aWZ5TGlzdC5lbWl0KHt1bnNlbGVjdDogZmFsc2UsIHVwZGF0ZTogZmFsc2UsIHBheWxvYWQ6IHVwZGF0ZWRTdG9yZWRRdWVyeX0pO1xuICAgICAgfSwgVXRpbHMudGhyb3cobnVsbCwgdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8uc2VhcmNoLnN0b3JlZHF1ZXJ5LnNhdmUuZXJyb3InKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSBmb3JtIGVsZW1lbnRzIHRvIGJlIGEgZHluYW1pYyBwYXJhbWV0ZXIgb3Igbm90XG4gICAqIEBwYXJhbSBldmVudFxuICAgKi9cbiAgcGFyYW1ldGVyQ2hhbmdlZChldmVudDoge2NvbnRyb2w6IHN0cmluZywgdmFsdWU6IGJvb2xlYW59KSB7XG5cbiAgICBsZXQgbSA9IHRoaXMuc3RvcmVkUXVlcnkucGFyYW1ldGVyLmZpbmQocCA9PiBwLnFuYW1lID09PSBldmVudC5jb250cm9sKTtcbiAgICBpZiAobSAmJiAhZXZlbnQudmFsdWUpIHtcbiAgICAgIC8vIHJlbW92ZSBleGlzdGluZyBwYXJhbWV0ZXJcbiAgICAgIHRoaXMuc3RvcmVkUXVlcnkucGFyYW1ldGVyID0gdGhpcy5zdG9yZWRRdWVyeS5wYXJhbWV0ZXIuZmlsdGVyKHAgPT4gcC5xbmFtZSAhPT0gZXZlbnQuY29udHJvbCk7XG4gICAgfSBlbHNlIGlmICghbSAmJiBldmVudC52YWx1ZSkge1xuICAgICAgLy8gYWRkIHBhcmFtZXRlciBlbGVtZW50XG4gICAgICBsZXQgcGFyYW0gPSB0aGlzLmZvcm1GaWVsZFRvUGFyYW1ldGVyKGV2ZW50LmNvbnRyb2wpO1xuICAgICAgaWYgKHBhcmFtKSB7XG4gICAgICAgIHRoaXMuc3RvcmVkUXVlcnkucGFyYW1ldGVyLnB1c2gocGFyYW0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0Rm9ybURhdGEoKSB7XG5cbiAgICBjb25zdCBwcm9wZXJ0aWVzID0gT2JqZWN0LmtleXModGhpcy5lZGl0Rm9ybS5mb3JtLnZhbHVlKTtcbiAgICBsZXQgZGF0YSA9IHt9O1xuXG5cbiAgICBwcm9wZXJ0aWVzLmZvckVhY2gocHJvcGVydHkgPT4ge1xuXG4gICAgICBjb25zdCBmYzogT2JqZWN0Rm9ybUNvbnRyb2xXcmFwcGVyID0gdGhpcy5lZGl0Rm9ybS5mb3JtLmNvbnRyb2xzW3Byb3BlcnR5XSBhcyBPYmplY3RGb3JtQ29udHJvbFdyYXBwZXI7XG4gICAgICBsZXQgZm9ybUVsZW1lbnQ7XG4gICAgICBpZiAoZmMuY29udHJvbHMgJiYgZmMuY29udHJvbHNbcHJvcGVydHldKSB7XG4gICAgICAgIGNvbnN0IGZlOiBPYmplY3RGb3JtQ29udHJvbCA9IGZjLmNvbnRyb2xzW3Byb3BlcnR5XSBhcyBPYmplY3RGb3JtQ29udHJvbDtcbiAgICAgICAgZm9ybUVsZW1lbnQgPSBmZS5fZW9Gb3JtRWxlbWVudDtcbiAgICAgIH1cbiAgICAgIGlmIChmb3JtRWxlbWVudCAmJiBmb3JtRWxlbWVudC5pc05vdFNldFZhbHVlKSB7XG4gICAgICAgIGRhdGFbcHJvcGVydHldID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgc3dpdGNoIChwcm9wZXJ0eSkge1xuICAgICAgICAgIGNhc2UgdGhpcy5GT1JNX0lOUFVUX1RJVExFOiB7XG4gICAgICAgICAgICBkYXRhW3Byb3BlcnR5XSA9IHRoaXMuZWRpdEZvcm0uZm9ybS52YWx1ZVtwcm9wZXJ0eV0gfHwgJyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSB0aGlzLkZPUk1fSU5QVVRfRlVMTFRFWFQ6IHtcbiAgICAgICAgICAgIGRhdGFbcHJvcGVydHldID0gdGhpcy5lZGl0Rm9ybS5mb3JtLnZhbHVlW3Byb3BlcnR5XVtTdG9yZWRRdWVyaWVzU2VydmljZS5GVUxMVEVYVF0gfHwgJyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgY29uc3QgdiA9IHRoaXMuZWRpdEZvcm0uZm9ybS52YWx1ZVtwcm9wZXJ0eV1bcHJvcGVydHldO1xuICAgICAgICAgICAgaWYgKCFVdGlsaXRpZXNTZXJ2aWNlLmlzRW1wdHkodikpIHtcbiAgICAgICAgICAgICAgZGF0YVtwcm9wZXJ0eV0gPSB2O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGR5bmFtaWMgc3RvcmVkIHF1ZXJ5IHBhcmFtZXRlciBmb3IgYSBmb3JtIGVsZW1lbnRcbiAgICogQHBhcmFtIHFuYW1lIFRoZSBmb3JtIGVsZW1lbnRzIHFuYW1lXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBwcml2YXRlIGZvcm1GaWVsZFRvUGFyYW1ldGVyKHFuYW1lOiBzdHJpbmcpOiBJU3RvcmVkUXVlcnlQYXJhbSB7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHBhcmFtOiBJU3RvcmVkUXVlcnlQYXJhbTtcbiAgICAgIC8vIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGZ1bGx0ZXh0IGZpZWxkc1xuICAgICAgaWYgKHFuYW1lID09PSBTdG9yZWRRdWVyaWVzU2VydmljZS5GVUxMVEVYVCkge1xuICAgICAgICBwYXJhbSA9IHtcbiAgICAgICAgICBxbmFtZTogcW5hbWUsXG4gICAgICAgICAgdHlwZTogcW5hbWUsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBmYyA9ICgodGhpcy5lZGl0Rm9ybS5mb3JtLmNvbnRyb2xzW3FuYW1lXSBhcyBPYmplY3RGb3JtQ29udHJvbFdyYXBwZXIpLmNvbnRyb2xzW3FuYW1lXSBhcyBPYmplY3RGb3JtQ29udHJvbCk7XG4gICAgICAgIGNvbnN0IGZlID0gZmMuX2VvRm9ybUVsZW1lbnQ7XG4gICAgICAgIHBhcmFtID0ge1xuICAgICAgICAgIHFuYW1lOiBmZS5xbmFtZSxcbiAgICAgICAgICB0eXBlOiBmZS50eXBlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gcGFyYW07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXNldEVkaXRGb3JtKCkge1xuICAgIHRoaXMuZWRpdEZvcm0gPSB7XG4gICAgICBmb3JtOiBudWxsLFxuICAgICAgZnVsbHRleHRGb3JtQ29udHJvbDogbnVsbCxcbiAgICAgIGNvbnRyb2xzOiBbXSxcbiAgICAgIGNvbnRleHRDb250cm9sczogW11cbiAgICB9O1xuICB9XG5cbiAgb25Gb3JtQ2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRGb3JtXG4gICAgICAuZm9ybVxuICAgICAgLnZhbHVlQ2hhbmdlc1xuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uRm9ybVN0YXR1c0NoYW5nZWQodGhpcy5lZGl0Rm9ybS5mb3JtKSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUVkaXRGb3JtKCkge1xuXG4gICAgdGhpcy5yZXNldEVkaXRGb3JtKCk7XG4gICAgdGhpcy5zZXR1cEZvcm1Db250cm9scygpLnN1YnNjcmliZShfID0+IHtcblxuICAgICAgbGV0IGZvcm0gPSBuZXcgT2JqZWN0Rm9ybUdyb3VwKHt9KTtcbiAgICAgIGxldCBmY1RpdGxlID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gICAgICBmY1RpdGxlLnNldFZhbHVlKHRoaXMuc3RvcmVkUXVlcnkubmFtZSk7XG5cbiAgICAgIGxldCBmY0Z1bGx0ZXh0ID0gdGhpcy50b0Zvcm1Db250cm9sKHRoaXMuc3RvcmVkUXVlcmllc1NlcnZpY2UuZ2V0RnVsbHRleHRGb3JtRWxlbWVudChcbiAgICAgICAgdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8uc3RvcmVkcXVlcnkuc2VhcmNoLnRlcm0nKSxcbiAgICAgICAgdGhpcy5zdG9yZWRRdWVyeS50ZXJtXG4gICAgICApKTtcbiAgICAgIHRoaXMuZWRpdEZvcm0uZnVsbHRleHRGb3JtQ29udHJvbCA9IGZjRnVsbHRleHQ7XG5cbiAgICAgIC8vIGFkZCB0aXRsZSBhbmQgZnVsbHRleHQgZmllbGRcbiAgICAgIGZvcm0uYWRkQ29udHJvbCh0aGlzLkZPUk1fSU5QVVRfVElUTEUsIGZjVGl0bGUpO1xuICAgICAgZm9ybS5hZGRDb250cm9sKHRoaXMuRk9STV9JTlBVVF9GVUxMVEVYVCwgZmNGdWxsdGV4dCk7XG5cbiAgICAgIGlmICh0aGlzLmVkaXRGb3JtLmNvbnRyb2xzLmxlbmd0aCB8fCB0aGlzLmVkaXRGb3JtLmNvbnRleHRDb250cm9scy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5lZGl0Rm9ybS5jb250cm9sc1xuICAgICAgICAgIC5mb3JFYWNoKChjKSA9PiBmb3JtLmFkZENvbnRyb2woYy5fZW9Gb3JtQ29udHJvbFdyYXBwZXIuY29udHJvbE5hbWUsIGMpKTtcbiAgICAgICAgdGhpcy5lZGl0Rm9ybS5jb250ZXh0Q29udHJvbHNcbiAgICAgICAgICAuZm9yRWFjaCgoYykgPT4gZm9ybS5hZGRDb250cm9sKGMuX2VvRm9ybUNvbnRyb2xXcmFwcGVyLmNvbnRyb2xOYW1lLCBjKSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZWRpdEZvcm0uZm9ybSA9IGZvcm07XG4gICAgICB0aGlzLmNvbXB1dGVJc1RhYmxlRGF0YSgpO1xuICAgICAgdGhpcy5vbkZvcm1DaGFuZ2VzKCk7XG4gICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBGb3JtQ29udHJvbHMoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCB0YXNrcyA9IFtdO1xuICAgIC8vIHNldHRpbmcgdXAgb2JqZWN0IHR5cGUgZm9ybSBvbmx5IG1ha2VzIHNlbnNlIHdpdGggb25lIHRhcmdldCB0eXBlXG4gICAgaWYgKHRoaXMuc3RvcmVkUXVlcnkudHlwZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICB0YXNrcy5wdXNoKHRoaXMuc3lzdGVtU2VydmljZS5nZXRGb3JtRWxlbWVudHNGcm9tRm9ybU1vZGVsKHRoaXMuc3RvcmVkUXVlcnkudHlwZXNbMF0ucW5hbWUsICdTRUFSQ0gnKS5waXBlKFxuICAgICAgICB0YXAoKGVsZW1lbnRzOiBhbnlbXSkgPT4ge1xuICAgICAgICAgIGVsZW1lbnRzLmZvckVhY2goZSA9PiB7XG4gICAgICAgICAgICAvLyBwcmV2ZW50IHRhYmxlcyBhbmQgYmluYXJ5IHR5cGVzIGZyb20gYmVpbmcgcmVuZGVyZWQgaW4gdGhlIHN0b3JlZCBxdWVyeSBmb3JtXG4gICAgICAgICAgICBpZiAoZS50eXBlICE9PSAnQklOQVJZJykge1xuICAgICAgICAgICAgICBpZiAoZS5yZXF1aXJlZCkge1xuICAgICAgICAgICAgICAgIGUucmVxdWlyZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoZS5yZWFkb25seSkge1xuICAgICAgICAgICAgICAgIGUucmVhZG9ubHkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBmYyA9IHRoaXMudG9Gb3JtQ29udHJvbChlKTtcbiAgICAgICAgICAgICAgaWYgKGZjKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0Rm9ybS5jb250cm9scy5wdXNoKGZjKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgICApKVxuICAgIH1cbiAgICAvLyBhZGQgY29udGV4dCBmb3JtIGNvbnRyb2xzIGFzIHdlbGxcbiAgICBpZiAodGhpcy5zdG9yZWRRdWVyeS5jb250ZXh0Rm9sZGVyVHlwZXMubGVuZ3RoKSB7XG4gICAgICB0YXNrcy5wdXNoKHRoaXMuc3lzdGVtU2VydmljZS5nZXRGb3JtRWxlbWVudHNGcm9tRm9ybU1vZGVsKHRoaXMuc3RvcmVkUXVlcnkuY29udGV4dEZvbGRlclR5cGVzWzBdLnFuYW1lLCAnU0VBUkNIJywgdHJ1ZSkucGlwZShcbiAgICAgICAgdGFwKChlbGVtZW50czogYW55W10pID0+IHtcbiAgICAgICAgICBlbGVtZW50cy5mb3JFYWNoKGUgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmMgPSB0aGlzLnRvRm9ybUNvbnRyb2woZSk7XG4gICAgICAgICAgICBpZiAoZmMpIHtcbiAgICAgICAgICAgICAgdGhpcy5lZGl0Rm9ybS5jb250ZXh0Q29udHJvbHMucHVzaChmYyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICAgICkpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRhc2tzLmxlbmd0aCA/IGZvcmtKb2luKHRhc2tzKSA6IG9mKHRhc2tzKTtcbiAgfVxuXG4gIHByaXZhdGUgZmV0Y2hSb2xlcygpIHtcbiAgICBpZiAoIXRoaXMuc3lzdGVtUm9sZXMgfHwgdGhpcy5zeXN0ZW1Sb2xlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuc3lzdGVtU2VydmljZVxuICAgICAgICAuZ2V0Um9sZXMoKVxuICAgICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgICAgdGhpcy5zeXN0ZW1Sb2xlcyA9IHJlcztcbiAgICAgICAgICB0aGlzLnJvbGVzUGlja2VyLmNvZGVzeXN0ZW0gPSB7XG4gICAgICAgICAgICBlbnRyaWVzOiB0aGlzLnN5c3RlbVJvbGVzLm1hcChyb2xlID0+ICh7XG4gICAgICAgICAgICAgIGlkOiByb2xlLmlkLFxuICAgICAgICAgICAgICBsYWJlbDogcm9sZS5uYW1lLFxuICAgICAgICAgICAgICBkZWZhdWx0cmVwcmVzZW50YXRpb246IHJvbGUubmFtZSxcbiAgICAgICAgICAgICAgZGF0YTogcm9sZS5uYW1lXG4gICAgICAgICAgICB9KSkuc29ydChVdGlscy5zb3J0VmFsdWVzKCdsYWJlbCcpKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICApXG4gICAgfVxuICB9XG5cbiAgZ2V0UmVzdHJpY3Rpb25zKCk6IFJlc3RyaWN0aW9uW10ge1xuICAgIGxldCByZXN0cmljdGlvbnM6IFJlc3RyaWN0aW9uW10gPSBbXTtcblxuICAgIC8vIHR5cGUgcmVzdHJpY3Rpb25cbiAgICBpZiAodGhpcy5zdG9yZWRRdWVyeS50eXBlcyAmJiB0aGlzLnN0b3JlZFF1ZXJ5LnR5cGVzLmxlbmd0aCkge1xuICAgICAgcmVzdHJpY3Rpb25zLnB1c2goe1xuICAgICAgICBmaWVsZDogU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuVFlQRSxcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLnN0b3JlZHF1ZXJ5LnJlc3RyaWN0aW9uLnR5cGUnKSxcbiAgICAgICAgaXRlbXM6IHRoaXMuc3RvcmVkUXVlcnkudHlwZXMubWFwKHQgPT4gdC5sYWJlbClcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIGFkZCBiYXNlIHBhcmFtcyByZXN0cmljdGlvbnNcbiAgICAodGhpcy5zdG9yZWRRdWVyeS5maWx0ZXJzIHx8IFtdKS5mb3JFYWNoKGZpbHRlciA9PiB7XG4gICAgICBpZiAoZmlsdGVyICYmIH50aGlzLkJBU0VfUEFSQU1TX0ZJRUxEUy5pbmRleE9mKGZpbHRlci5wcm9wZXJ0eSkpIHtcblxuICAgICAgICBjb25zdCBmaWVsZCA9IGZpbHRlci5wcm9wZXJ0eTtcbiAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5zdG9yZWRxdWVyeS5yZXN0cmljdGlvbi4nICsgZmllbGQpO1xuXG4gICAgICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICAgICAgICBjYXNlIFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TLk1JTUVUWVBFR1JPVVA6XG4gICAgICAgICAgICByZXN0cmljdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgIGZpZWxkLCBsYWJlbCwgaXRlbXM6IEFycmF5LmlzQXJyYXkoZmlsdGVyLmZpcnN0VmFsdWUpID8gZmlsdGVyLmZpcnN0VmFsdWUgOiBbZmlsdGVyLmZpcnN0VmFsdWVdXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuRklMRU5BTUU6XG4gICAgICAgICAgICByZXN0cmljdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgIGZpZWxkLCBsYWJlbCwgaXRlbXM6IFtmaWx0ZXIuZmlyc3RWYWx1ZV1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5GSUxFU0laRTpcbiAgICAgICAgICAgIHJlc3RyaWN0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgZmllbGQsIGxhYmVsLCBpdGVtczogW3RoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLnNlYXJjaC5hZ2cuZmlsZXNpemUuJyArIGZpbHRlci5maXJzdFZhbHVlKV1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5DUkVBVEVEOlxuICAgICAgICAgIGNhc2UgU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuTU9ESUZJRUQ6XG4gICAgICAgICAgICByZXN0cmljdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgIGZpZWxkLCBsYWJlbCwgaXRlbXM6IFt0aGlzLmNyZWF0ZURhdGVSZXN0cmljdGlvbihmaWx0ZXIpXVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TLkNSRUFUT1I6XG4gICAgICAgICAgY2FzZSBTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5NT0RJRklFUjpcbiAgICAgICAgICAgIHRoaXMuc3lzdGVtU2VydmljZS5nZXRPcmdhbml6YXRpb25PYmplY3RzKGZpbHRlci5maXJzdFZhbHVlKVxuICAgICAgICAgICAgICAuc3Vic2NyaWJlKG9yZ1VzZXJzID0+IHJlc3RyaWN0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBmaWVsZCwgbGFiZWwsIGl0ZW1zOiBvcmdVc2Vycy5tYXAoKHUpID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB1LmlkID09PSBcIiNjdXJyZW50dXNlciNcIlxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLmZvcm0ucHJvcGVydHkub3JnYW5pemF0aW9uLmN1cnJlbnQudXNlcicpXG4gICAgICAgICAgICAgICAgICAgIDogdS50aXRsZVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICB9KTtcblxuICAgIHJldHVybiByZXN0cmljdGlvbnM7XG4gIH1cblxuICBjcmVhdGVEYXRlUmVzdHJpY3Rpb24oZmlsdGVyOiBTZWFyY2hGaWx0ZXIpIHtcbiAgICBzd2l0Y2ggKGZpbHRlci5vcGVyYXRvcikge1xuICAgICAgY2FzZSBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuUkFOR0U6XG4gICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGBlby5zZWFyY2guYWdnLnRpbWUuJHtmaWx0ZXIuZmlyc3RWYWx1ZX1gKTtcbiAgICAgIGNhc2UgU2VhcmNoRmlsdGVyLk9QRVJBVE9SLkVRVUFMOlxuICAgICAgICByZXR1cm4gYD0gJHt0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShmaWx0ZXIuZmlyc3RWYWx1ZSwgJ2VvU2hvcnREYXRlJyl9YDtcbiAgICAgIGNhc2UgU2VhcmNoRmlsdGVyLk9QRVJBVE9SLklOVEVSVkFMX0lOQ0xVREVfQk9USDpcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGZpbHRlci5maXJzdFZhbHVlLCAnZW9TaG9ydERhdGUnKX0gLSAke3RoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGZpbHRlci5zZWNvbmRWYWx1ZSwgJ2VvU2hvcnREYXRlJyl9YDtcbiAgICAgIGNhc2UgU2VhcmNoRmlsdGVyLk9QRVJBVE9SLkdSRUFURVJfT1JfRVFVQUw6XG4gICAgICAgIHJldHVybiBgJHt0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5zZWFyY2guYWdnLnRpbWUuc3Bhbi5zaW5jZScpfSAke3RoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGZpbHRlci5maXJzdFZhbHVlLCAnZW9TaG9ydERhdGUnKX1gO1xuICAgICAgY2FzZSBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuTEVTU19PUl9FUVVBTDpcbiAgICAgICAgcmV0dXJuIGAke3RoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLnNlYXJjaC5hZ2cudGltZS5zcGFuLnVudGlsJyl9ICR7dGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZmlsdGVyLmZpcnN0VmFsdWUsICdlb1Nob3J0RGF0ZScpfWA7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gYCgke2ZpbHRlci5vcGVyYXRvcn0pICR7dGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZmlsdGVyLmZpcnN0VmFsdWUsICdlb1Nob3J0RGF0ZScpfWA7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBmb3JtIGNvbnRyb2wgZnJvbSBhIGdpdmVuIGZvcm0gZWxlbWVudFxuICAgKiBAcGFyYW0gZm9ybUVsZW1lbnRcbiAgICogQHJldHVybnNcbiAgICovXG4gIHByaXZhdGUgdG9Gb3JtQ29udHJvbChmb3JtRWxlbWVudCk6IE9iamVjdEZvcm1Db250cm9sV3JhcHBlciB7XG5cbiAgICAvLyB0aGUgYG5hbWVgIHByb3BlcnR5IG9mIHN0b3JlZCBxdWVyeSBmb3JtIGVsZW1lbnQgaGFzIHRvIGJlIGBxbmFtZWAgb2YgZm9ybSBlbGVtZW50LFxuICAgIC8vIGJlY2F1c2Ugd2UgbWF5IGNvbWJpbmUgbXVsdGlwbGUgZm9ybXMgKGNvbnRleHQgZm9ybSkgYW5kIGluIHRoaXMgY2FzZSB0aGVyZSBtYXlcbiAgICAvLyBiZSBjb25mbGljdHMgaW4gbmFtaW5nc1xuICAgIGZvcm1FbGVtZW50Lm5hbWUgPSBmb3JtRWxlbWVudC5xbmFtZTtcblxuICAgIGlmIChmb3JtRWxlbWVudC50eXBlID09PSAnVEFCTEUnKSB7XG4gICAgICBsZXQgZmlsdGVycyA9IHRoaXMuc3RvcmVkUXVlcnkuZ2V0VGFibGVGaWx0ZXJzKGZvcm1FbGVtZW50LnFuYW1lKTtcbiAgICAgIGlmIChmaWx0ZXJzICYmIGZpbHRlcnMubGVuZ3RoKSB7XG4gICAgICAgIGZvcm1FbGVtZW50LnZhbHVlID0gdGhpcy5zZWFyY2hTZXJ2aWNlLnRhYmxlRmlsdGVyc1RvRWxlbWVudFZhbHVlKGZpbHRlcnMsIGZvcm1FbGVtZW50LmVsZW1lbnRzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvcm1FbGVtZW50LnZhbHVlID0gW3t9XTtcbiAgICAgICAgZGVsZXRlIGZvcm1FbGVtZW50LmlzTm90U2V0VmFsdWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGdyYWIgdmFsdWUgZm9yIHRoZSBjb250cm9sIGZyb20gY29ycmVzcG9uZGluZyBxdWVyeSBmaWx0ZXJzXG4gICAgICBsZXQgZmlsdGVyID0gdGhpcy5zdG9yZWRRdWVyeS5nZXRGaWx0ZXIoZm9ybUVsZW1lbnQucW5hbWUpO1xuICAgICAgLy8gd2UgbWF5IGhhdmUgcGFyYW1zIHRoYXQgYXJlIG5vdCBwYXJ0IG9mIHRoZSBxdWVyaWVzIGZpbHRlcnMuIFRoaXMgbWF5IGJlIHRoZVxuICAgICAgLy8gY2FzZSB3aGVuIHdlIG1hcmsgZm9ybSBlbGVtZW50cyBhcyBkeW5hbWljIGZpZWxkcyB3aXRob3V0IHByb3ZpZGluZyBhIHZhbHVlXG4gICAgICBpZiAoZmlsdGVyKSB7XG5cbiAgICAgICAgLy8gZmlsdGVyIHRvIGhhdmUgbm8gdmFsdWVcbiAgICAgICAgaWYgKGZpbHRlci5vcGVyYXRvciA9PT0gU2VhcmNoRmlsdGVyLk9QRVJBVE9SLkVRVUFMICYmIGZpbHRlci5maXJzdFZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgZm9ybUVsZW1lbnQuaXNOb3RTZXRWYWx1ZSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVsZXRlIGZvcm1FbGVtZW50LmlzTm90U2V0VmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtRWxlbWVudC52YWx1ZSA9IHRoaXMuc2VhcmNoU2VydmljZS5maWx0ZXJUb0VsZW1lbnRWYWx1ZShcbiAgICAgICAgICB0aGlzLnN0b3JlZFF1ZXJ5LmdldEZpbHRlcihmb3JtRWxlbWVudC5xbmFtZSksXG4gICAgICAgICAgZm9ybUVsZW1lbnQudHlwZVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChmb3JtRWxlbWVudC5xbmFtZSAhPT0gU3RvcmVkUXVlcmllc1NlcnZpY2UuRlVMTFRFWFQpIHtcbiAgICAgICAgZm9ybUVsZW1lbnQudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgIGRlbGV0ZSBmb3JtRWxlbWVudC5pc05vdFNldFZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBzeW5jIHdpdGggcGFyYW1zXG4gICAgY29uc3QgbWF0Y2g6IGFueSA9IHRoaXMuc3RvcmVkUXVlcnkucGFyYW1ldGVyLmZpbmQocGFyYW0gPT4ge1xuICAgICAgcmV0dXJuIChwYXJhbS5xbmFtZSA9PT0gZm9ybUVsZW1lbnQucW5hbWUpIHx8IChwYXJhbS50eXBlID09PSBTdG9yZWRRdWVyaWVzU2VydmljZS5GVUxMVEVYVCAmJiBmb3JtRWxlbWVudC5xbmFtZSA9PT0gU3RvcmVkUXVlcmllc1NlcnZpY2UuRlVMTFRFWFQpXG4gICAgfSk7XG4gICAgLy8gZXZlcnkgZmllbGQgdGhhdCBpcyBwYXJ0IG9mIHRoZSBwYXJhbXMgaXMgc3VwcG9zZWQgdG8gYmUgZHluYW1pY1xuICAgIGZvcm1FbGVtZW50Ll9keW5hbWljID0gISFtYXRjaDtcblxuICAgIC8vIGNyZWF0ZSBhY3R1YWwgZm9ybSBjb250cm9sIHRoYXQgY291bGQgYmUgdXNlZCB3aXRoXG4gICAgLy8gRm9ybUVsZW1lbnRDb21wb25lbnQgdG8gdGhlbiByZW5kZXIgZm9yIGVsZW1lbnRzXG4gICAgLy8gd3JhcHBlciBtYXkgYmUgbnVsbCBpbiBjYXNlIG9mIGFuIGVycm9yXG4gICAgcmV0dXJuIHRoaXMuZm9ybUhlbHBlclNlcnZpY2UuZWxlbWVudFRvRm9ybUNvbnRyb2woZm9ybUVsZW1lbnQsICdTRUFSQ0gnKTtcbiAgfVxuXG4gIG9uU3RvcmVkUXVlcnlMb2FkZWQoKSB7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3tvdXRsZXRzOiB7bW9kYWw6ICdzZWFyY2gnfX1dKTtcbiAgfVxuXG4gIG9uU3RvcmVkUXVlcnlFeGVjdXRlKGV2dCkge1xuICAgIGNvbnN0IHVyaVBhcmFtID0gZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KGV2dC5xdWVyeUpzb24pKTtcbiAgICBjb25zdCB1cmlQYXJhbVF1ZXJ5OiBOYXZpZ2F0aW9uRXh0cmFzID0ge3F1ZXJ5UGFyYW1zOiB7J3F1ZXJ5JzogdXJpUGFyYW19fTtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9yZXN1bHQnXSwgdXJpUGFyYW1RdWVyeSk7XG4gIH1cblxuICBzZXRJY29uVGl0bGVzKCkge1xuICAgIHRoaXMuaWNvblRpdGxlcyA9IHtcbiAgICAgIHNoYXJlOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5zdG9yZWRxdWVyeS5zaGFyZS50aXRsZScpLFxuICAgICAgc2hhcmVkOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5zdG9yZWRxdWVyeS5zaGFyZWRmb3IudGl0bGUnKSxcbiAgICAgIGZhdm9yOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5zdG9yZWRxdWVyeS5mYXZvci50aXRsZScpLFxuICAgICAgZmF2b3JlZDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8uc3RvcmVkcXVlcnkuZmF2b3JlZGZvci50aXRsZScpXG4gICAgfVxuICB9XG5cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnNlbGVjdGlvbi5mb2N1cyRcbiAgICAgIC5waXBlKHVudGlsRGVzdHJveWVkKHRoaXMpKVxuICAgICAgLnN1YnNjcmliZShxID0+IHtcbiAgICAgICAgdGhpcy5xdWVyeSA9IHE7XG4gICAgICB9KTtcbiAgICB0aGlzLnNldEljb25UaXRsZXMoKTtcbiAgfVxuXG4gIHRyYWNrQnlRTmFtZShpbmRleCwgaXRlbSkge1xuICAgIHJldHVybiBpdGVtLnFuYW1lO1xuICB9XG5cbiAgdHJhY2tCeUluZGV4KGluZGV4LCBpdGVtKSB7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIGVsZW1lbnQgaXMgbm90IG9mIHR5cGUgJ1RBQkxFJy5cbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiBjaGVja3MgdGhlIHR5cGUgb2YgdGhlIF9fZW9Gb3JtRWxlbWVudCBwcm9wZXJ0eSBvZiB0aGUgY29udHJvbFxuICAgKiBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGVsZW1lbnQuIElmIHRoZSB0eXBlIGlzIG5vdCAnVEFCTEUnLCBpdCByZXR1cm5zIHRydWUuXG4gICAqXG4gICAqIEBwYXJhbSBlbGVtZW50IC0gVGhlIGVsZW1lbnQgdG8gY2hlY2suXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFRydWUgaWYgdGhlIGVsZW1lbnQgaXMgbm90IG9mIHR5cGUgJ1RBQkxFJywgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKi9cbiAgaXNUYWJsZURhdGEoZWxlbWVudCk6IGJvb2xlYW4ge1xuICAgIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC5fZW9Gb3JtQ29udHJvbFdyYXBwZXIgfHwgIWVsZW1lbnQuY29udHJvbHMpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBjb250cm9sTmFtZSA9IGVsZW1lbnQuX2VvRm9ybUNvbnRyb2xXcmFwcGVyLmNvbnRyb2xOYW1lO1xuICAgIGNvbnN0IGNvbnRyb2wgPSBlbGVtZW50LmNvbnRyb2xzW2NvbnRyb2xOYW1lXTtcblxuICAgIGlmICghY29udHJvbCB8fCAhY29udHJvbC5fX2VvRm9ybUVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udHJvbC5fX2VvRm9ybUVsZW1lbnQudHlwZSAhPT0gJ1RBQkxFJztcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVjb21wdXRlcyB0aGUgaXNUYWJsZURhdGEgcmVzdWx0cyBmb3IgZWFjaCBjb250cm9sIGluIHRoZSBlZGl0Rm9ybS5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgaXRlcmF0ZXMgb3ZlciB0aGUgY29udHJvbHMgaW4gdGhlIGVkaXRGb3JtIGFuZCBjYWxscyB0aGUgaXNUYWJsZURhdGEgZnVuY3Rpb25cbiAgICogZm9yIGVhY2ggY29udHJvbC4gVGhlIHJlc3VsdHMgYXJlIHN0b3JlZCBpbiB0aGUgaXNUYWJsZURhdGFNYXAsIHdoZXJlIHRoZSBrZXkgaXMgdGhlIGNvbnRyb2xcbiAgICogYW5kIHRoZSB2YWx1ZSBpcyB0aGUgcmVzdWx0IG9mIHRoZSBpc1RhYmxlRGF0YSBmdW5jdGlvbi5cbiAgICovXG4gIHByaXZhdGUgY29tcHV0ZUlzVGFibGVEYXRhKCk6IHZvaWQge1xuICAgIHRoaXMuZWRpdEZvcm0uY29udHJvbHMuZm9yRWFjaChjb250cm9sID0+IHtcbiAgICAgIHRoaXMuaXNUYWJsZURhdGFNYXAuc2V0KGNvbnRyb2wsIHRoaXMuaXNUYWJsZURhdGEoY29udHJvbCkpO1xuICAgIH0pO1xuICB9XG5cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJzdG9yZWRRdWVyeVwiPlxuICA8ZGl2IGNsYXNzPVwiZW8taGVhZFwiPlxuICAgIDxoZWFkZXIgY2xhc3M9XCJlby1oZWFkZXJcIj5cbiAgICAgIDxlby1pY29uIGNsYXNzPVwiZW8taGVhZGVyLWljb25cIlxuICAgICAgICAgICAgICAgW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfc2F2ZWRfc2VhcmNoLnN2ZydcIlxuICAgICAgICAgICAgICAgW2ljb25UaXRsZV09XCIoJ2VvLnZpZXcubmF2aWdhdGlvbi5zdG9yZWRxdWVyaWVzJyB8IHRyYW5zbGF0ZSlcIj5cbiAgICAgIDwvZW8taWNvbj5cbiAgICAgIDxkaXYgY2xhc3M9XCJlby1oZWFkZXItaW5mb1wiPlxuICAgICAgICA8aDIgY2xhc3M9XCJlby1oZWFkZXItdGl0bGVcIj57eyBzdG9yZWRRdWVyeS5uYW1lIH19PC9oMj5cbiAgICAgICAgPGgzIGNsYXNzPVwiZW8taGVhZGVyLXN1YnRpdGxlXCIgdHJhbnNsYXRlPmVvLnNlYXJjaC50aXRsZS5zdG9yZWRxdWVyaWVzPC9oMz5cbiAgICAgIDwvZGl2PlxuICAgIDwvaGVhZGVyPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiZW8tYm9keVwiPlxuXG4gICAgPGRpdiBjbGFzcz1cImZvcm1cIj5cblxuICAgICAgPG5nLXRlbXBsYXRlICNxdWVyeUZvcm0+XG4gICAgICAgIDxlby1zdG9yZWQtcXVlcnkgW3F1ZXJ5XT1cInN0b3JlZFF1ZXJ5XCIgW2Zvcm1Pbmx5XT1cInRydWVcIiAjc3RvcmVkUXVlcnlGb3JtXG4gICAgICAgICAgICAgICAgICAgICAgICAgKG9uUXVlcnlMb2FkZWQpPVwib25TdG9yZWRRdWVyeUxvYWRlZCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAob25RdWVyeUV4ZWN1dGUpPVwib25TdG9yZWRRdWVyeUV4ZWN1dGUoJGV2ZW50KVwiPjwvZW8tc3RvcmVkLXF1ZXJ5PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgPGZvcm0gY2xhc3M9XCJlZGl0LWZvcm1cIiBbZm9ybUdyb3VwXT1cImVkaXRGb3JtLmZvcm1cIiAqbmdJZj1cImVkaXRGb3JtLmZvcm07IGVsc2UgcXVlcnlGb3JtXCI+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRleHQgZGFya1wiPlxuXG4gICAgICAgICAgPCEtLSB0aXRsZSBhbmQgZnVsbHRleHQgdGVybSBmaWVsZHMgLS0+XG4gICAgICAgICAgPGVvLWZvcm0taW5wdXQgY2xhc3M9XCJ0aXRsZVwiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInN0b3JlZFF1ZXJ5VGl0bGVcIiBtYXhsZW5ndGg9XCI2NFwiIG9uZm9jdXM9XCJ0aGlzLnNlbGVjdCgpXCJcbiAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIidzdG9yZWRRdWVyeVRpdGxlJ1wiLz5cbiAgICAgICAgICA8L2VvLWZvcm0taW5wdXQ+XG5cbiAgICAgICAgICA8ZW8tcXVlcnktc2NvcGUtc2VsZWN0IFtzZWxlY3Rpb25dPVwicXVlcnlTY29wZVwiIChzZWxlY3QpPVwic2V0UXVlcnlTY29wZSgkZXZlbnQpXCI+PC9lby1xdWVyeS1zY29wZS1zZWxlY3Q+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGRcIj5cbiAgICAgICAgICAgIDxlby1mb3JtLWVsZW1lbnQgW3NraXBUb2dnbGVdPVwidHJ1ZVwiIFtlbGVtZW50XT1cImVkaXRGb3JtLmZ1bGx0ZXh0Rm9ybUNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2l0dWF0aW9uXT1cIidTRUFSQ0gnXCI+PC9lby1mb3JtLWVsZW1lbnQ+XG4gICAgICAgICAgICA8ZW8tZHluYW1pYy1wcm9wZXJ0eS1zd2l0Y2ggW3BhcmVudEZvcm1Db250cm9sXT1cImVkaXRGb3JtLmZ1bGx0ZXh0Rm9ybUNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvblByb3BlcnR5Q2hhbmdlZCk9XCJwYXJhbWV0ZXJDaGFuZ2VkKCRldmVudClcIj48L2VvLWR5bmFtaWMtcHJvcGVydHktc3dpdGNoPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBjb250ZXh0IHR5cGUgZm9ybSBjb250cm9scyAtLT5cbiAgICAgICAgICA8aDM+e3sgc3RvcmVkUXVlcnkuY29udGV4dEZvbGRlclR5cGVzWzBdPy5sYWJlbCB9fTwvaDM+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGRcIiAqbmdGb3I9XCJsZXQgY3R4RWxlbWVudCBvZiBlZGl0Rm9ybS5jb250ZXh0Q29udHJvbHM7IHRyYWNrQnk6IHRyYWNrQnlRTmFtZVwiPlxuICAgICAgICAgICAgPGVvLWZvcm0tZWxlbWVudCBbZWxlbWVudF09XCJjdHhFbGVtZW50XCIgW3NpdHVhdGlvbl09XCInU0VBUkNIJ1wiPjwvZW8tZm9ybS1lbGVtZW50PlxuICAgICAgICAgICAgPGVvLWR5bmFtaWMtcHJvcGVydHktc3dpdGNoIFtwYXJlbnRGb3JtQ29udHJvbF09XCJjdHhFbGVtZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25Qcm9wZXJ0eUNoYW5nZWQpPVwicGFyYW1ldGVyQ2hhbmdlZCgkZXZlbnQpXCI+PC9lby1keW5hbWljLXByb3BlcnR5LXN3aXRjaD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBvYmplY3QgdHlwZSBmb3JtIGNvbnRyb2xzIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZHNcIiBbbmdDbGFzc109XCJ7ZW1wdHk6ICFlZGl0Rm9ybS5jb250cm9scz8ubGVuZ3RofVwiPlxuICAgICAgICAgIEBmb3IoZWxlbWVudCBvZiBlZGl0Rm9ybS5jb250cm9sczt0cmFjayB0cmFja0J5UU5hbWUpIHtcbiAgICAgICAgICAgIEBpZiAoaXNUYWJsZURhdGFNYXAuZ2V0KGVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgPGVvLWZvcm0tZWxlbWVudCBbZWxlbWVudF09XCJlbGVtZW50XCIgW3NpdHVhdGlvbl09XCInU0VBUkNIJ1wiPjwvZW8tZm9ybS1lbGVtZW50PlxuICAgICAgICAgICAgICAgIDxlby1keW5hbWljLXByb3BlcnR5LXN3aXRjaCBbcGFyZW50Rm9ybUNvbnRyb2xdPVwiZWxlbWVudFwiXG4gICAgICAgICAgICAgICAgICAob25Qcm9wZXJ0eUNoYW5nZWQpPVwicGFyYW1ldGVyQ2hhbmdlZCgkZXZlbnQpXCI+PC9lby1keW5hbWljLXByb3BlcnR5LXN3aXRjaD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZm9ybT5cbiAgICA8L2Rpdj5cblxuICAgIDxhc2lkZSBjbGFzcz1cImFzaWRlXCI+XG5cbiAgICAgIDwhLS0gZmF2b3JpdGUgYW5kIHNoYXJlIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cIm1ldGEtYWN0aW9uc1wiICpuZ0lmPVwiIWlzTmV3UXVlcnlcIj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNPd25RdWVyeTsgZWxzZSBzaGFyZWRXaXRoTWVcIj5cbiAgICAgICAgICA8ZW8taWNvbiBjbGFzcz1cImJ1dHRvbiBidG4tc2hhcmVcIiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19zaGFyZS5zdmcnXCIgKm5nSWY9XCJlbmFibGVTaGFyaW5nXCJcbiAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7YWN0aXZlOiBzdG9yZWRRdWVyeS5zaGFyZWQgfHwgc3RvcmVkUXVlcnkucm9sZXMubGVuZ3RoLCBlZGl0aW5nOiBlZGl0aW5nU2hhcmV9XCJcbiAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU2hhcmVFZGl0KClcIlxuICAgICAgICAgICAgICAgICAgIFtpY29uVGl0bGVdPVwiaWNvblRpdGxlcy5zaGFyZVwiPjwvZW8taWNvbj5cblxuICAgICAgICAgIDxlby1pY29uIGNsYXNzPVwiYnV0dG9uIGJ0bi1mYXZcIiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19mYXZvcml0ZS5zdmcnXCJcbiAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7YWN0aXZlOiBzdG9yZWRRdWVyeS5mYXZvcml0ZX1cIlxuICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVGYXZvcml0ZVN0YXRlKClcIlxuICAgICAgICAgICAgICAgICAgIFtpY29uVGl0bGVdPVwiaWNvblRpdGxlcy5mYXZvclwiPjwvZW8taWNvbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNzaGFyZWRXaXRoTWU+XG4gICAgICAgICAgPGVvLWljb24gY2xhc3M9XCJzaGFyZWRXaXRoTWVcIiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19zaGFyZS5zdmcnXCJcbiAgICAgICAgICAgICAgICAgICBbaWNvblRpdGxlXT1cImljb25UaXRsZXMuc2hhcmVkXCI+PC9lby1pY29uPlxuICAgICAgICAgIDxlby1pY29uIGNsYXNzPVwic2hhcmVkV2l0aE1lXCIgW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfZmF2b3JpdGUuc3ZnJ1wiXG4gICAgICAgICAgICAgICAgICAgW2ljb25UaXRsZV09XCJpY29uVGl0bGVzLmZhdm9yZWRcIj48L2VvLWljb24+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIHJvbGVzIHRoYXQgc2hhcmUgdGhpcyBxdWVyeSAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJtZXRhLXJvbGVzXCIgKm5nSWY9XCIhaXNOZXdRdWVyeVwiIFtuZ0NsYXNzXT1cIntkYXJrOiBlZGl0aW5nU2hhcmUsIGVtcHR5OiAhc3RvcmVkUXVlcnkucm9sZXM/Lmxlbmd0aH1cIj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWxcIiB0cmFuc2xhdGU+ZW8uc3RvcmVkcXVlcnkuc2hhcmUuc2hhcmVkd2l0aDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZFwiICpuZ0lmPVwicm9sZXNQaWNrZXI/LmNvZGVzeXN0ZW0/LmVudHJpZXNcIj5cbiAgICAgICAgICA8ZW8tY29kZXN5c3RlbSBbcGlja2VyVGl0bGVdPVwicm9sZXNQaWNrZXIudGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2Rlc3lzdGVtXT1cInJvbGVzUGlja2VyLmNvZGVzeXN0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFttdWx0aXNlbGVjdF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiIWVkaXRpbmdTaGFyZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0U3R5bGVDbGFzc109XCInc3RvcmVkLXF1ZXJ5X19zaGFyZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm9sZXNQaWNrZXIudmFsdWVcIiBjbGFzcz1cImhpZGUtY2hpcC1jbG9zZS1idXR0b25cIj48L2VvLWNvZGVzeXN0ZW0+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaGFyZS1hY3Rpb25zXCIgKm5nSWY9XCJlZGl0aW5nU2hhcmVcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwic2Vjb25kYXJ5XCIgKGNsaWNrKT1cImNhbmNlbFNoYXJlKClcIiB0cmFuc2xhdGU+ZW8uY3RhLmJ1dHRvbi5jYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicHJpbWFyeVwiIChjbGljayk9XCJzaGFyZSgpXCIgdHJhbnNsYXRlPmVvLnN0b3JlZHF1ZXJ5LnNoYXJlLm9rPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gcXVlcmllcyBtZXRhIGluZm8gbGlrZSBiYXNlcGFyYW0gc2V0dGluZ3MgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwibWV0YS1kYXRhXCIgKm5nSWY9XCJyZXN0cmljdGlvbnM/Lmxlbmd0aFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicmVzdHJpY3Rpb25cIiAqbmdGb3I9XCJsZXQgcmVzdHJpY3Rpb24gb2YgcmVzdHJpY3Rpb25zOyB0cmFja0J5OiB0cmFja0J5SW5kZXhcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWxcIj57eyByZXN0cmljdGlvbi5sYWJlbCB9fTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtc1wiPlxuICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiByZXN0cmljdGlvbi5pdGVtczsgdHJhY2tCeTogdHJhY2tCeUluZGV4XCI+e3sgaXRlbSB9fTwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgPC9hc2lkZT5cblxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiYWN0aW9uc1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZWRpdEZvcm0uZm9ybTsgZWxzZSBhY3Rpb25FZGl0XCI+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwic2Vjb25kYXJ5IGJ0bi1kZWxldGVcIiAoY2xpY2spPVwic2hvd0RlbGV0ZURpYWxvZyA9IHRydWVcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWlzT3duUXVlcnlcIiB0cmFuc2xhdGU+ZW8uY3RhLmJ1dHRvbi5kZWxldGVcbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cInNlY29uZGFyeSBidG4tb3BlblwiIChjbGljayk9XCJzZXRRdWVyeVRvQXBwU2VhcmNoKClcIiB0cmFuc2xhdGU+ZW8uc3RvcmVkcXVlcnkubG9hZDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cInByaW1hcnkgZ3JleSBidG4tZWRpdFwiIChjbGljayk9XCJlZGl0KClcIiBbZGlzYWJsZWRdPVwiIWlzT3duUXVlcnlcIiB0cmFuc2xhdGU+XG4gICAgICAgIGVvLnN0b3JlZHF1ZXJ5LmFjdGlvbi5lZGl0XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJwcmltYXJ5IGJ0bi1zZWFyY2hcIiBbZGlzYWJsZWRdPVwic3RvcmVkUXVlcnkuc3RhdGU/LmlzRW1wdHlcIiAoY2xpY2spPVwiZXhlY3V0ZVF1ZXJ5KClcIiB0cmFuc2xhdGU+XG4gICAgICAgIGVvLnN0b3JlZHF1ZXJ5LnJ1blxuICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8ZW8tZGlhbG9nIFt0aXRsZV09XCInZW8uc3RvcmVkcXVlcnkuZGVsZXRlLmRpYWxvZy50aXRsZScgfCB0cmFuc2xhdGVcIiBbKHZpc2libGUpXT1cInNob3dEZWxldGVEaWFsb2dcIlxuICAgICAgICAgICAgICAgW2ZvY3VzT25TaG93XT1cImZhbHNlXCIgW21pbldpZHRoXT1cIjQwMFwiIFtzdHlsZUNsYXNzXT1cIidzdG9yZWRRdWVyeS1kZWxldGVfX2RpYWxvZydcIj5cbiAgICAgIDxkaXY+XG4gICAgICAgICAgQGlmKGlzU3RvcmVkUXVlcnlVc2VkKCkpe1xuICAgICAgICAgICAgPHNwYW4+e3snZW8uc3RvcmVkcXVlcnkuZGVsZXRlLmRpYWxvZy5tZXNzYWdlJyB8IHRyYW5zbGF0ZToge1xuICAgICAgICAgICAgICAgIHN0b3JlZHF1ZXJ5OiB0aGlzLnN0b3JlZFF1ZXJ5Lm5hbWUsXG4gICAgICAgICAgICAgICAgbmFtZTogdGhpcy5pbmZvfVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxzcGFuPnt7J2VvLnN0b3JlZHF1ZXJ5LmRlbGV0ZS5kaWFsb2cubWVzc2FnZS5kZWZhdWx0JyB8IHRyYW5zbGF0ZToge1xuICAgICAgICAgICAgICAgIHN0b3JlZHF1ZXJ5OiB0aGlzLnN0b3JlZFF1ZXJ5Lm5hbWV9XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLWJ1dHRvbnMgZmxleC1yb3dcIj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidXR0b24gY2FuY2VsXCIgKGNsaWNrKT1cInNob3dEZWxldGVEaWFsb2cgPSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgdHJhbnNsYXRlPmVvLmN0YS5idXR0b24uY2FuY2VsXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAjY29uZmlybURlbGV0ZSAoY2xpY2spPVwiZGVsZXRlKCk7IHNob3dEZWxldGVEaWFsb2cgPSBmYWxzZVwiIGNsYXNzPVwiYnV0dG9uIHByaW1hcnlcIlxuICAgICAgICAgICAgICAgIHRyYW5zbGF0ZT5lby5jdGEuYnV0dG9uLmRlbGV0ZVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZW8tZGlhbG9nPlxuXG4gICAgPG5nLXRlbXBsYXRlICNhY3Rpb25FZGl0PlxuICAgICAgPCEtLSBhY3Rpb24gd2hpbGUgZWRpdGluZyB0aGUgcXVlcnkgZm9ybSAtLT5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJzZWNvbmRhcnkgYnRuLWNhbmNlbFwiIChjbGljayk9XCJjYW5jZWxFZGl0KClcIiB0cmFuc2xhdGU+ZW8uY3RhLmJ1dHRvbi5jYW5jZWw8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJwcmltYXJ5IGJ0bi1zYXZlXCIgKGNsaWNrKT1cInVwZGF0ZVN0b3JlZFF1ZXJ5KClcIiBbZGlzYWJsZWRdPVwiZWRpdEZvcm0uZm9ybS5pbnZhbGlkXCIgdHJhbnNsYXRlPlxuICAgICAgICBlby5zdG9yZWRxdWVyeS5hY3Rpb24uc2F2ZVxuICAgICAgPC9idXR0b24+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG5cbjwvbmctY29udGFpbmVyPlxuIl19
|