@igo2/geo 17.0.0-next.9 → 17.0.0

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.
@@ -4,7 +4,7 @@ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewCh
4
4
  import { FormsModule, ReactiveFormsModule, UntypedFormBuilder, UntypedFormControl } from '@angular/forms';
5
5
  import { MatBadgeModule } from '@angular/material/badge';
6
6
  import { MatButtonModule } from '@angular/material/button';
7
- import { MatButtonToggleModule } from '@angular/material/button-toggle';
7
+ import { MAT_BUTTON_TOGGLE_DEFAULT_OPTIONS, MatButtonToggleModule } from '@angular/material/button-toggle';
8
8
  import { MatOptionModule } from '@angular/material/core';
9
9
  import { MatDialog } from '@angular/material/dialog';
10
10
  import { MatDividerModule } from '@angular/material/divider';
@@ -1056,7 +1056,14 @@ export class DrawComponent {
1056
1056
  return Number(length / (2 * Math.PI));
1057
1057
  }
1058
1058
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: DrawComponent, deps: [{ token: i1.LanguageService }, { token: i2.UntypedFormBuilder }, { token: i3.DrawStyleService }, { token: i4.MatDialog }, { token: i5.DrawIconService }], target: i0.ɵɵFactoryTarget.Component });
1059
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.9", type: DrawComponent, isStandalone: true, selector: "igo-draw", inputs: { map: "map", stores: "stores", drawControls: "drawControls", activeDrawingLayer: "activeDrawingLayer" }, outputs: { activeLayerChange: "activeLayerChange", drawControlsEvent: "drawControlsEvent", layersIDEvent: "layersIDEvent", fillColor: "fillColor", strokeColor: "strokeColor", strokeWidth: "strokeWidth", fontSize: "fontSize", fontStyle: "fontStyle" }, viewQueries: [{ propertyName: "select", first: true, predicate: ["selectedLayer"], descendants: true }], ngImport: i0, template: "<div>\n <div class=\"geometry-type-toggle mat-typography\">\n <mat-button-toggle-group\n (change)=\"onGeometryTypeChange($event.value)\"\n [value]=\"geometryType.Point\"\n >\n <mat-button-toggle [value]=\"geometryType.Point\">\n {{ 'igo.geo.draw.' + geometryType.Point | translate }}\n </mat-button-toggle>\n\n <mat-button-toggle [value]=\"geometryType.LineString\">\n {{ 'igo.geo.draw.' + geometryType.LineString | translate }}\n </mat-button-toggle>\n\n <mat-button-toggle [value]=\"geometryType.Polygon\">\n {{ 'igo.geo.draw.' + geometryType.Polygon | translate }}\n </mat-button-toggle>\n\n <mat-button-toggle [value]=\"geometryType.Circle\">\n {{ 'igo.geo.draw.' + geometryType.Circle | translate }}\n </mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n\n <div class=\"draw-options mat-typography\">\n <mat-slide-toggle\n [disabled]=\"drawControlIsDisabled\"\n [checked]=\"drawControlIsActive\"\n [labelPosition]=\"'before'\"\n (change)=\"onToggleDrawControl($event.checked)\"\n >\n {{ 'igo.geo.draw.drawControl' | translate }}\n </mat-slide-toggle>\n\n <mat-slide-toggle\n [checked]=\"labelsAreShown\"\n [labelPosition]=\"'before'\"\n (change)=\"onToggleLabels()\"\n >\n {{ 'igo.geo.draw.toggleMapTooltips' | translate }}\n </mat-slide-toggle>\n\n <mat-slide-toggle\n *ngIf=\"!isPoint()\"\n [checked]=\"freehandMode\"\n [labelPosition]=\"'before'\"\n (change)=\"onToggleFreehandMode($event)\"\n >\n {{ 'igo.geo.draw.freehandMode' | translate }}\n </mat-slide-toggle>\n\n <div class=\"radius-unit\" *ngIf=\"isCircle()\">\n <mat-form-field class=\"radius\">\n <input\n matInput\n type=\"number\"\n min=\"0\"\n placeholder=\"{{ 'igo.geo.spatialFilter.radius' | translate }}\"\n [formControl]=\"radiusFormControl\"\n [readonly]=\"this.freehandMode\"\n />\n </mat-form-field>\n\n <mat-form-field class=\"unit-field\">\n <mat-select\n [value]=\"measureUnit\"\n (selectionChange)=\"onMeasureUnitChange($event.value)\"\n >\n <mat-option\n *ngFor=\"let measureUnit of measureUnits\"\n [value]=\"measureUnit\"\n >\n {{ 'igo.geo.measure.' + measureUnit | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n\n <mat-divider></mat-divider>\n\n <div class=\"layer-select-container\">\n <mat-form-field class=\"layer-select\" subscriptSizing=\"dynamic\">\n <mat-label>{{ 'igo.geo.draw.layer.title' | translate }}</mat-label>\n <mat-select\n #selectedLayer\n (selectionChange)=\"onLayerChange(selectedLayer.value)\"\n [value]=\"updateActiveLayer()\"\n >\n <mat-option *ngFor=\"let layer of allLayers\" [value]=\"layer\">\n {{ layer.title }}\n </mat-option>\n <mat-option id=\"createNewLayer\">\n {{ 'igo.geo.draw.layer.createNewLayer' | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <button\n *ngIf=\"activeDrawingLayer\"\n mat-icon-button\n [color]=\"activeDrawingLayer.visible ? 'primary' : 'default'\"\n collapsibleButton\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n activeDrawingLayer.visible\n ? ('igo.geo.layer.hideLayer' | translate)\n : ('igo.geo.layer.showLayer' | translate)\n \"\n (click)=\"activeDrawingLayer.visible = !activeDrawingLayer.visible\"\n >\n <mat-icon>\n {{ activeDrawingLayer.visible ? 'visibility' : 'visibility_off' }}\n </mat-icon>\n </button>\n </div>\n <mat-divider></mat-divider>\n <div>\n <button\n *ngIf=\"activeStore.count$.getValue() > 0\"\n class=\"deleteBtn\"\n mat-icon-button\n color=\"warn\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.draw.delete' | translate\"\n [disabled]=\"(selectedFeatures$ | async).length === 0\"\n (click)=\"deleteDrawings()\"\n >\n <mat-icon>delete</mat-icon>\n </button>\n\n <div>\n <igo-entity-table\n #table\n class=\"table-compact\"\n [store]=\"activeStore\"\n [template]=\"tableTemplate\"\n >\n </igo-entity-table>\n </div>\n </div>\n\n <div class=\"icon-options\">\n <mat-form-field *ngIf=\"icons.length >= 1\">\n <mat-label>{{ 'igo.geo.draw.icon' | translate }}</mat-label>\n <mat-select>\n <mat-select-trigger>\n <div *ngIf=\"icon\" class=\"box\">\n <img src=\"{{ icon }}\" />\n </div>\n </mat-select-trigger>\n <mat-option value=\"\" (click)=\"onIconChange()\">{{\n 'igo.geo.draw.noIcon' | translate\n }}</mat-option>\n <mat-option\n *ngFor=\"let icon_html of icons\"\n [value]=\"icon_html\"\n (click)=\"onIconChange(icon_html)\"\n >\n <div class=\"box\">\n <img src=\"{{ icon_html }}\" />\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div class=\"actions-container\">\n <button\n mat-icon-button\n color=\"accent\"\n disableRipple=\"true\"\n (click)=\"openShorcutsDialog()\"\n >\n <mat-icon\n class=\"shortcuts-icon\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.draw.shortcuts' | translate\"\n >keyboard\n </mat-icon>\n </button>\n\n <button\n *ngIf=\"selectedFeatures$.value.length\"\n mat-raised-button\n color=\"primary\"\n (click)=\"openStyleModalDialog()\"\n [matTooltip]=\"'igo.geo.style.styleModalTooltipSelected' | translate\"\n >\n {{ 'igo.geo.style.styleModal' | translate }}\n <mat-icon\n aria-hidden=\"false\"\n iconPositionEnd\n class=\"style-icon\"\n [matBadge]=\"selectedFeatures$.value.length\"\n matBadgeColor=\"warn\"\n matBadgeSize=\"medium\"\n >palette\n </mat-icon>\n </button>\n </div>\n</div>\n", styles: [":host .geometry-type-toggle{padding:10px;text-align:center}:host .geometry-type-toggle mat-button-toggle-group{width:100%}:host .geometry-type-toggle mat-button-toggle-group mat-button-toggle{width:25%}:host .draw-options mat-slide-toggle{width:100%;padding:10px}:host .draw-options mat-slide-toggle ::ng-deep .mdc-form-field{width:100%}:host .draw-options mat-slide-toggle ::ng-deep .mdc-label{margin-left:0;width:calc(100% - 60px)}:host .icon-options{margin:5px 5px 0}:host .deleteBtn{margin-left:16px}:host .edition-drawing{padding:10px 0}:host img{width:100%;height:100%}:host .deleteBtn{margin-left:12px}:host .storeTable{height:auto!important}:host .layer-select{flex:1;margin-right:8px}:host .input-button-container{padding:10px}:host .input-button-container mat-form-field{width:25%}:host .input-button-container button{left:8px;bottom:10px}:host .radius{flex:2}:host .unit-field{flex:1;margin-left:8px}:host .radius-unit{display:flex;width:100%;padding:4px 8px}:host ::ng-deep igo-entity-table td:last-child{text-align:right!important}:host ::ng-deep igo-entity-table td:last-child button{margin:0%!important}:host .layer-select-container{margin:16px 8px}:host .actions-container,:host .layer-select-container{display:flex;align-items:center}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonToggleModule }, { kind: "directive", type: i6.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i6.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i7.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i8.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i9.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i10.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "directive", type: i10.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "component", type: i11.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i12.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i13.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i13.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i14.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i15.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: EntityTableComponent, selector: "igo-entity-table", inputs: ["store", "paginator", "template", "scrollBehavior", "sortNullsFirst", "withPaginator", "paginatorOptions"], outputs: ["entityClick", "entitySelectChange", "entitySortChange"] }, { kind: "ngmodule", type: MatBadgeModule }, { kind: "directive", type: i16.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: IgoLanguageModule }, { kind: "pipe", type: i17.TranslatePipe, name: "translate" }], animations: [
1059
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.9", type: DrawComponent, isStandalone: true, selector: "igo-draw", inputs: { map: "map", stores: "stores", drawControls: "drawControls", activeDrawingLayer: "activeDrawingLayer" }, outputs: { activeLayerChange: "activeLayerChange", drawControlsEvent: "drawControlsEvent", layersIDEvent: "layersIDEvent", fillColor: "fillColor", strokeColor: "strokeColor", strokeWidth: "strokeWidth", fontSize: "fontSize", fontStyle: "fontStyle" }, providers: [
1060
+ {
1061
+ provide: MAT_BUTTON_TOGGLE_DEFAULT_OPTIONS,
1062
+ useValue: {
1063
+ hideSingleSelectionIndicator: true
1064
+ }
1065
+ }
1066
+ ], viewQueries: [{ propertyName: "select", first: true, predicate: ["selectedLayer"], descendants: true }], ngImport: i0, template: "<div>\n <div class=\"geometry-type-toggle mat-typography\">\n <mat-button-toggle-group\n (change)=\"onGeometryTypeChange($event.value)\"\n [value]=\"geometryType.Point\"\n >\n <mat-button-toggle [value]=\"geometryType.Point\">\n {{ 'igo.geo.draw.' + geometryType.Point | translate }}\n </mat-button-toggle>\n\n <mat-button-toggle [value]=\"geometryType.LineString\">\n {{ 'igo.geo.draw.' + geometryType.LineString | translate }}\n </mat-button-toggle>\n\n <mat-button-toggle [value]=\"geometryType.Polygon\">\n {{ 'igo.geo.draw.' + geometryType.Polygon | translate }}\n </mat-button-toggle>\n\n <mat-button-toggle [value]=\"geometryType.Circle\">\n {{ 'igo.geo.draw.' + geometryType.Circle | translate }}\n </mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n\n <div class=\"draw-options mat-typography\">\n <mat-slide-toggle\n [disabled]=\"drawControlIsDisabled\"\n [checked]=\"drawControlIsActive\"\n [labelPosition]=\"'before'\"\n (change)=\"onToggleDrawControl($event.checked)\"\n >\n {{ 'igo.geo.draw.drawControl' | translate }}\n </mat-slide-toggle>\n\n <mat-slide-toggle\n [checked]=\"labelsAreShown\"\n [labelPosition]=\"'before'\"\n (change)=\"onToggleLabels()\"\n >\n {{ 'igo.geo.draw.toggleMapTooltips' | translate }}\n </mat-slide-toggle>\n\n <mat-slide-toggle\n *ngIf=\"!isPoint()\"\n [checked]=\"freehandMode\"\n [labelPosition]=\"'before'\"\n (change)=\"onToggleFreehandMode($event)\"\n >\n {{ 'igo.geo.draw.freehandMode' | translate }}\n </mat-slide-toggle>\n\n <div class=\"radius-unit\" *ngIf=\"isCircle()\">\n <mat-form-field class=\"radius\">\n <input\n matInput\n type=\"number\"\n min=\"0\"\n placeholder=\"{{ 'igo.geo.spatialFilter.radius' | translate }}\"\n [formControl]=\"radiusFormControl\"\n [readonly]=\"this.freehandMode\"\n />\n </mat-form-field>\n\n <mat-form-field class=\"unit-field\">\n <mat-select\n [value]=\"measureUnit\"\n (selectionChange)=\"onMeasureUnitChange($event.value)\"\n >\n <mat-option\n *ngFor=\"let measureUnit of measureUnits\"\n [value]=\"measureUnit\"\n >\n {{ 'igo.geo.measure.' + measureUnit | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n\n <mat-divider></mat-divider>\n\n <div class=\"layer-select-container\">\n <mat-form-field class=\"layer-select\" subscriptSizing=\"dynamic\">\n <mat-label>{{ 'igo.geo.draw.layer.title' | translate }}</mat-label>\n <mat-select\n #selectedLayer\n (selectionChange)=\"onLayerChange(selectedLayer.value)\"\n [value]=\"updateActiveLayer()\"\n >\n <mat-option *ngFor=\"let layer of allLayers\" [value]=\"layer\">\n {{ layer.title }}\n </mat-option>\n <mat-option id=\"createNewLayer\">\n {{ 'igo.geo.draw.layer.createNewLayer' | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <button\n *ngIf=\"activeDrawingLayer\"\n mat-icon-button\n [color]=\"activeDrawingLayer.visible ? 'primary' : 'default'\"\n collapsibleButton\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n activeDrawingLayer.visible\n ? ('igo.geo.layer.hideLayer' | translate)\n : ('igo.geo.layer.showLayer' | translate)\n \"\n (click)=\"activeDrawingLayer.visible = !activeDrawingLayer.visible\"\n >\n <mat-icon>\n {{ activeDrawingLayer.visible ? 'visibility' : 'visibility_off' }}\n </mat-icon>\n </button>\n </div>\n <mat-divider></mat-divider>\n <div>\n <button\n *ngIf=\"activeStore.count$.getValue() > 0\"\n class=\"deleteBtn\"\n mat-icon-button\n color=\"warn\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.draw.delete' | translate\"\n [disabled]=\"(selectedFeatures$ | async).length === 0\"\n (click)=\"deleteDrawings()\"\n >\n <mat-icon>delete</mat-icon>\n </button>\n\n <div>\n <igo-entity-table\n #table\n class=\"table-compact\"\n [store]=\"activeStore\"\n [template]=\"tableTemplate\"\n >\n </igo-entity-table>\n </div>\n </div>\n\n <div class=\"icon-options\">\n <mat-form-field *ngIf=\"icons.length >= 1\">\n <mat-label>{{ 'igo.geo.draw.icon' | translate }}</mat-label>\n <mat-select>\n <mat-select-trigger>\n <div *ngIf=\"icon\" class=\"box\">\n <img src=\"{{ icon }}\" />\n </div>\n </mat-select-trigger>\n <mat-option value=\"\" (click)=\"onIconChange()\">{{\n 'igo.geo.draw.noIcon' | translate\n }}</mat-option>\n <mat-option\n *ngFor=\"let icon_html of icons\"\n [value]=\"icon_html\"\n (click)=\"onIconChange(icon_html)\"\n >\n <div class=\"box\">\n <img src=\"{{ icon_html }}\" />\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div class=\"actions-container\">\n <button\n mat-icon-button\n color=\"accent\"\n disableRipple=\"true\"\n (click)=\"openShorcutsDialog()\"\n >\n <mat-icon\n class=\"shortcuts-icon\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.draw.shortcuts' | translate\"\n >keyboard\n </mat-icon>\n </button>\n\n <button\n *ngIf=\"selectedFeatures$.value.length\"\n mat-raised-button\n color=\"primary\"\n (click)=\"openStyleModalDialog()\"\n [matTooltip]=\"'igo.geo.style.styleModalTooltipSelected' | translate\"\n >\n {{ 'igo.geo.style.styleModal' | translate }}\n <mat-icon\n aria-hidden=\"false\"\n iconPositionEnd\n class=\"style-icon\"\n [matBadge]=\"selectedFeatures$.value.length\"\n matBadgeColor=\"warn\"\n matBadgeSize=\"medium\"\n >palette\n </mat-icon>\n </button>\n </div>\n</div>\n", styles: [":host .geometry-type-toggle{padding:10px;text-align:center}:host .geometry-type-toggle mat-button-toggle-group{width:100%}:host .geometry-type-toggle mat-button-toggle-group mat-button-toggle{width:25%}:host .draw-options mat-slide-toggle{width:100%;padding:10px}:host .draw-options mat-slide-toggle ::ng-deep .mdc-form-field{width:100%}:host .draw-options mat-slide-toggle ::ng-deep .mdc-label{margin-left:0;width:calc(100% - 60px)}:host .icon-options{margin:5px 5px 0}:host .deleteBtn{margin-left:16px}:host .edition-drawing{padding:10px 0}:host img{width:100%;height:100%}:host .deleteBtn{margin-left:12px}:host .storeTable{height:auto!important}:host .layer-select{flex:1;margin-right:8px}:host .input-button-container{padding:10px}:host .input-button-container mat-form-field{width:25%}:host .input-button-container button{left:8px;bottom:10px}:host .radius{flex:2}:host .unit-field{flex:1;margin-left:8px}:host .radius-unit{display:flex;width:100%;padding:4px 8px}:host ::ng-deep igo-entity-table td:last-child{text-align:right!important}:host ::ng-deep igo-entity-table td:last-child button{margin:0%!important}:host .layer-select-container{margin:16px 8px}:host .actions-container,:host .layer-select-container{display:flex;align-items:center}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonToggleModule }, { kind: "directive", type: i6.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i6.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i7.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i8.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i9.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i10.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "directive", type: i10.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "component", type: i11.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i12.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i13.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i13.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i14.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i15.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: EntityTableComponent, selector: "igo-entity-table", inputs: ["store", "paginator", "template", "scrollBehavior", "sortNullsFirst", "withPaginator", "paginatorOptions"], outputs: ["entityClick", "entitySelectChange", "entitySortChange"] }, { kind: "ngmodule", type: MatBadgeModule }, { kind: "directive", type: i16.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: IgoLanguageModule }, { kind: "pipe", type: i17.TranslatePipe, name: "translate" }], animations: [
1060
1067
  trigger('openClose', [
1061
1068
  state('open', style({
1062
1069
  opacity: 1
@@ -1101,6 +1108,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImpor
1101
1108
  MatBadgeModule,
1102
1109
  AsyncPipe,
1103
1110
  IgoLanguageModule
1111
+ ], providers: [
1112
+ {
1113
+ provide: MAT_BUTTON_TOGGLE_DEFAULT_OPTIONS,
1114
+ useValue: {
1115
+ hideSingleSelectionIndicator: true
1116
+ }
1117
+ }
1104
1118
  ], template: "<div>\n <div class=\"geometry-type-toggle mat-typography\">\n <mat-button-toggle-group\n (change)=\"onGeometryTypeChange($event.value)\"\n [value]=\"geometryType.Point\"\n >\n <mat-button-toggle [value]=\"geometryType.Point\">\n {{ 'igo.geo.draw.' + geometryType.Point | translate }}\n </mat-button-toggle>\n\n <mat-button-toggle [value]=\"geometryType.LineString\">\n {{ 'igo.geo.draw.' + geometryType.LineString | translate }}\n </mat-button-toggle>\n\n <mat-button-toggle [value]=\"geometryType.Polygon\">\n {{ 'igo.geo.draw.' + geometryType.Polygon | translate }}\n </mat-button-toggle>\n\n <mat-button-toggle [value]=\"geometryType.Circle\">\n {{ 'igo.geo.draw.' + geometryType.Circle | translate }}\n </mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n\n <div class=\"draw-options mat-typography\">\n <mat-slide-toggle\n [disabled]=\"drawControlIsDisabled\"\n [checked]=\"drawControlIsActive\"\n [labelPosition]=\"'before'\"\n (change)=\"onToggleDrawControl($event.checked)\"\n >\n {{ 'igo.geo.draw.drawControl' | translate }}\n </mat-slide-toggle>\n\n <mat-slide-toggle\n [checked]=\"labelsAreShown\"\n [labelPosition]=\"'before'\"\n (change)=\"onToggleLabels()\"\n >\n {{ 'igo.geo.draw.toggleMapTooltips' | translate }}\n </mat-slide-toggle>\n\n <mat-slide-toggle\n *ngIf=\"!isPoint()\"\n [checked]=\"freehandMode\"\n [labelPosition]=\"'before'\"\n (change)=\"onToggleFreehandMode($event)\"\n >\n {{ 'igo.geo.draw.freehandMode' | translate }}\n </mat-slide-toggle>\n\n <div class=\"radius-unit\" *ngIf=\"isCircle()\">\n <mat-form-field class=\"radius\">\n <input\n matInput\n type=\"number\"\n min=\"0\"\n placeholder=\"{{ 'igo.geo.spatialFilter.radius' | translate }}\"\n [formControl]=\"radiusFormControl\"\n [readonly]=\"this.freehandMode\"\n />\n </mat-form-field>\n\n <mat-form-field class=\"unit-field\">\n <mat-select\n [value]=\"measureUnit\"\n (selectionChange)=\"onMeasureUnitChange($event.value)\"\n >\n <mat-option\n *ngFor=\"let measureUnit of measureUnits\"\n [value]=\"measureUnit\"\n >\n {{ 'igo.geo.measure.' + measureUnit | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n\n <mat-divider></mat-divider>\n\n <div class=\"layer-select-container\">\n <mat-form-field class=\"layer-select\" subscriptSizing=\"dynamic\">\n <mat-label>{{ 'igo.geo.draw.layer.title' | translate }}</mat-label>\n <mat-select\n #selectedLayer\n (selectionChange)=\"onLayerChange(selectedLayer.value)\"\n [value]=\"updateActiveLayer()\"\n >\n <mat-option *ngFor=\"let layer of allLayers\" [value]=\"layer\">\n {{ layer.title }}\n </mat-option>\n <mat-option id=\"createNewLayer\">\n {{ 'igo.geo.draw.layer.createNewLayer' | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <button\n *ngIf=\"activeDrawingLayer\"\n mat-icon-button\n [color]=\"activeDrawingLayer.visible ? 'primary' : 'default'\"\n collapsibleButton\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n activeDrawingLayer.visible\n ? ('igo.geo.layer.hideLayer' | translate)\n : ('igo.geo.layer.showLayer' | translate)\n \"\n (click)=\"activeDrawingLayer.visible = !activeDrawingLayer.visible\"\n >\n <mat-icon>\n {{ activeDrawingLayer.visible ? 'visibility' : 'visibility_off' }}\n </mat-icon>\n </button>\n </div>\n <mat-divider></mat-divider>\n <div>\n <button\n *ngIf=\"activeStore.count$.getValue() > 0\"\n class=\"deleteBtn\"\n mat-icon-button\n color=\"warn\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.draw.delete' | translate\"\n [disabled]=\"(selectedFeatures$ | async).length === 0\"\n (click)=\"deleteDrawings()\"\n >\n <mat-icon>delete</mat-icon>\n </button>\n\n <div>\n <igo-entity-table\n #table\n class=\"table-compact\"\n [store]=\"activeStore\"\n [template]=\"tableTemplate\"\n >\n </igo-entity-table>\n </div>\n </div>\n\n <div class=\"icon-options\">\n <mat-form-field *ngIf=\"icons.length >= 1\">\n <mat-label>{{ 'igo.geo.draw.icon' | translate }}</mat-label>\n <mat-select>\n <mat-select-trigger>\n <div *ngIf=\"icon\" class=\"box\">\n <img src=\"{{ icon }}\" />\n </div>\n </mat-select-trigger>\n <mat-option value=\"\" (click)=\"onIconChange()\">{{\n 'igo.geo.draw.noIcon' | translate\n }}</mat-option>\n <mat-option\n *ngFor=\"let icon_html of icons\"\n [value]=\"icon_html\"\n (click)=\"onIconChange(icon_html)\"\n >\n <div class=\"box\">\n <img src=\"{{ icon_html }}\" />\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div class=\"actions-container\">\n <button\n mat-icon-button\n color=\"accent\"\n disableRipple=\"true\"\n (click)=\"openShorcutsDialog()\"\n >\n <mat-icon\n class=\"shortcuts-icon\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.draw.shortcuts' | translate\"\n >keyboard\n </mat-icon>\n </button>\n\n <button\n *ngIf=\"selectedFeatures$.value.length\"\n mat-raised-button\n color=\"primary\"\n (click)=\"openStyleModalDialog()\"\n [matTooltip]=\"'igo.geo.style.styleModalTooltipSelected' | translate\"\n >\n {{ 'igo.geo.style.styleModal' | translate }}\n <mat-icon\n aria-hidden=\"false\"\n iconPositionEnd\n class=\"style-icon\"\n [matBadge]=\"selectedFeatures$.value.length\"\n matBadgeColor=\"warn\"\n matBadgeSize=\"medium\"\n >palette\n </mat-icon>\n </button>\n </div>\n</div>\n", styles: [":host .geometry-type-toggle{padding:10px;text-align:center}:host .geometry-type-toggle mat-button-toggle-group{width:100%}:host .geometry-type-toggle mat-button-toggle-group mat-button-toggle{width:25%}:host .draw-options mat-slide-toggle{width:100%;padding:10px}:host .draw-options mat-slide-toggle ::ng-deep .mdc-form-field{width:100%}:host .draw-options mat-slide-toggle ::ng-deep .mdc-label{margin-left:0;width:calc(100% - 60px)}:host .icon-options{margin:5px 5px 0}:host .deleteBtn{margin-left:16px}:host .edition-drawing{padding:10px 0}:host img{width:100%;height:100%}:host .deleteBtn{margin-left:12px}:host .storeTable{height:auto!important}:host .layer-select{flex:1;margin-right:8px}:host .input-button-container{padding:10px}:host .input-button-container mat-form-field{width:25%}:host .input-button-container button{left:8px;bottom:10px}:host .radius{flex:2}:host .unit-field{flex:1;margin-left:8px}:host .radius-unit{display:flex;width:100%;padding:4px 8px}:host ::ng-deep igo-entity-table td:last-child{text-align:right!important}:host ::ng-deep igo-entity-table td:last-child button{margin:0%!important}:host .layer-select-container{margin:16px 8px}:host .actions-container,:host .layer-select-container{display:flex;align-items:center}\n"] }]
1105
1119
  }], ctorParameters: () => [{ type: i1.LanguageService }, { type: i2.UntypedFormBuilder }, { type: i3.DrawStyleService }, { type: i4.MatDialog }, { type: i5.DrawIconService }], propDecorators: { map: [{
1106
1120
  type: Input
@@ -1130,4 +1144,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImpor
1130
1144
  type: ViewChild,
1131
1145
  args: ['selectedLayer']
1132
1146
  }] } });
1133
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhdy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9kcmF3L2RyYXcvZHJhdy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9kcmF3L2RyYXcvZHJhdy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsT0FBTyxFQUNQLEtBQUssRUFDTCxLQUFLLEVBQ0wsVUFBVSxFQUNWLE9BQU8sRUFDUixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsV0FBVyxFQUNYLG1CQUFtQixFQUNuQixrQkFBa0IsRUFDbEIsa0JBQWtCLEVBRW5CLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTdELE9BQU8sRUFHTCx5QkFBeUIsRUFDekIsb0JBQW9CLEVBRXJCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXhELE9BQU8sU0FBUyxNQUFNLFlBQVksQ0FBQztBQUVuQyxPQUFPLFNBQVMsTUFBTSxtQkFBbUIsQ0FBQztBQUMxQyxPQUFPLFFBQVEsTUFBTSxnQkFBZ0IsQ0FBQztBQUd0QyxPQUFPLE9BQU8sTUFBTSxlQUFlLENBQUM7QUFDcEMsT0FBTyxPQUFPLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0RCxPQUFPLEtBQUssTUFBTSxNQUFNLFNBQVMsQ0FBQztBQUNsQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRXBDLE9BQU8sY0FBYyxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ25ELE9BQU8sS0FBSyxPQUFPLE1BQU0sVUFBVSxDQUFDO0FBRXBDLE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDM0YsT0FBTyxFQUNMLE9BQU8sRUFDUCxhQUFhLEVBQ2IsWUFBWSxFQUNaLDJCQUEyQixFQUMzQiw2QkFBNkIsRUFDN0IsV0FBVyxFQUNYLHFCQUFxQixFQUNyQix1QkFBdUIsRUFDeEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDN0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDOUMsT0FBTyxFQUVMLDJCQUEyQixFQUMzQixpQkFBaUIsRUFDakIsNkJBQTZCLEVBQzlCLE1BQU0sbUNBQW1DLENBQUM7QUFDM0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDN0UsT0FBTyxFQUNMLHFCQUFxQixFQUNyQix1QkFBdUIsRUFDdkIsWUFBWSxFQUNaLGtCQUFrQixFQUNuQixNQUFNLG9DQUFvQyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQUUzRyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNoRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDOUQsT0FBTyxFQUFtQixZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFL0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBK0NsRSxNQUFNLE9BQU8sYUFBYTtJQThGZDtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBakdWOzs7T0FHRztJQUNJLGFBQWEsQ0FBc0I7SUFFbkMsWUFBWSxHQUFHLFlBQVksQ0FBQyxDQUFDLHFDQUFxQztJQUNoRSxHQUFHLENBQVMsQ0FBQyxpQkFBaUI7SUFFdkMsSUFDSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFDRCxJQUFJLE1BQU0sQ0FBQyxLQUFzQztRQUMvQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUN2QixDQUFDO0lBQ08sT0FBTyxHQUFvQyxFQUFFLENBQUM7SUFFdEQsSUFDSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFDRCxJQUFJLFlBQVksQ0FBQyxLQUE4QjtRQUM3QyxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUM3QixDQUFDO0lBQ08sYUFBYSxHQUFHLEVBQUUsQ0FBQztJQUUzQixJQUNJLGtCQUFrQjtRQUNwQixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztJQUNsQyxDQUFDO0lBQ0QsSUFBSSxrQkFBa0IsQ0FBQyxLQUFrQjtRQUN2QyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO0lBQ25DLENBQUM7SUFDTyxtQkFBbUIsQ0FBYztJQUUvQixpQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBZSxDQUFDO0lBQ3BELGlCQUFpQixHQUFHLElBQUksWUFBWSxFQUEyQixDQUFDO0lBQ2hFLGFBQWEsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO0lBRTNDLFNBQVMsQ0FBUztJQUNsQixXQUFXLENBQVM7SUFDcEIsV0FBVyxDQUFTO0lBRXBCLFFBQVEsQ0FBUztJQUNqQixTQUFTLENBQVM7SUFFckIsV0FBVyxDQUFnQztJQUMxQyxjQUFjLEdBQVcsQ0FBQyxDQUFDO0lBQzVCLEtBQUssR0FBMEIsSUFBSSxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxxQkFBcUI7SUFDNUUsd0JBQXdCLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztJQUNoRCxpQkFBaUIsQ0FBYztJQUMvQixTQUFTLENBQWU7SUFDeEIsWUFBWSxDQUFlO0lBQzVCLGlCQUFpQixHQUN0QixJQUFJLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNuQixRQUFRLENBQVM7SUFDakIsVUFBVSxDQUFTO0lBQ25CLHFCQUFxQixHQUFZLElBQUksQ0FBQztJQUN0QyxtQkFBbUIsR0FBWSxLQUFLLENBQUM7SUFDckMsY0FBYyxDQUFVO0lBQ3hCLFlBQVksR0FBRyxLQUFLLENBQUM7SUFDcEIsZUFBZSxHQUFtQixFQUFFLENBQUM7SUFFdEMsUUFBUSxHQUFXLFFBQVEsQ0FBQztJQUM1QixJQUFJLENBQW1CO0lBQ3ZCLEtBQUssQ0FBZ0I7SUFDckIsSUFBSSxDQUFTO0lBRWIsaUJBQWlCLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqRCxXQUFXLEdBQXNCLGlCQUFpQixDQUFDLE1BQU0sQ0FBQztJQUMxRCx5QkFBeUIsR0FBaUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUM3RCxpQkFBaUIsR0FBNEIsSUFBSSxlQUFlLENBQ3JFLFNBQVMsQ0FDVixDQUFDO0lBQ0ssY0FBYyxHQUE0QixJQUFJLGVBQWUsQ0FDbEUsU0FBUyxDQUNWLENBQUM7SUFFRjs7O09BR0c7SUFDSCxJQUFJLFlBQVk7UUFDZCxPQUFPLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFDTyxnQkFBZ0IsQ0FBUztJQUMxQixrQkFBa0IsR0FBWSxLQUFLLENBQUM7SUFDbkMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFZLENBQUM7SUFFOUIsTUFBTSxDQUFDO0lBRW5DLFlBQ1UsZUFBZ0MsRUFDaEMsV0FBK0IsRUFDL0IsZ0JBQWtDLEVBQ2xDLE1BQWlCLEVBQ2pCLGVBQWdDO1FBSmhDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUFDL0IscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ2pCLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUV4QyxJQUFJLENBQUMsYUFBYSxHQUFHO1lBQ25CLFNBQVMsRUFBRSxJQUFJO1lBQ2YsVUFBVSxFQUFFLElBQUk7WUFDaEIsaUJBQWlCLEVBQUUsSUFBSTtZQUN2QixJQUFJLEVBQUUsSUFBSTtZQUNWLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLFdBQVcsRUFBRSxNQUFNO1lBQ25CLE9BQU8sRUFBRTtnQkFDUDtvQkFDRSxJQUFJLEVBQUUsU0FBUztvQkFDZixLQUFLLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDO29CQUNwRSxhQUFhLEVBQUUsQ0FBQyxPQUF3QixFQUFFLEVBQUU7d0JBQzFDLE9BQU8sT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7b0JBQ2pDLENBQUM7aUJBQ0Y7Z0JBQ0Q7b0JBQ0UsSUFBSSxFQUFFLFNBQVM7b0JBQ2YsS0FBSyxFQUFFLEVBQUU7b0JBQ1QsSUFBSSxFQUFFLEtBQUs7b0JBQ1gsYUFBYSxFQUFFLENBQUMsT0FBd0IsRUFBRSxFQUFFO3dCQUMxQyxPQUFPOzRCQUNMO2dDQUNFLFFBQVEsRUFBRSxLQUFLO2dDQUNmLElBQUksRUFBRSxNQUFNO2dDQUNaLEtBQUssRUFBRSxTQUFTO2dDQUNoQixLQUFLLEVBQUUsR0FBRyxFQUFFO29DQUNWLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQ0FDakMsQ0FBQztnQ0FDRCxLQUFLLEVBQUUsaUJBQWlCOzZCQUN6Qjt5QkFDcUIsQ0FBQztvQkFDM0IsQ0FBQztvQkFDRCxRQUFRLEVBQUUseUJBQXlCLENBQUMsV0FBVztpQkFDaEQ7YUFDRjtTQUNGLENBQUM7UUFDRixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDMUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDMUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUNoRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDN0MsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFNUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDeEQsQ0FBQztJQUVELGtGQUFrRjtJQUNsRixRQUFRO1FBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLFlBQVksQ0FBa0IsRUFBRSxFQUFFO2dCQUN2RCxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7YUFDZCxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FDN0MsSUFBSSxDQUFDLFNBQVMsRUFDZCxJQUFJLENBQUMsV0FBVyxFQUNoQixJQUFJLENBQUMsV0FBVyxDQUNqQixDQUFDO1lBQ0YsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQVksQ0FBQyxDQUFDO1lBQ3ZFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNuQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztnQkFDckIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxpQkFBaUI7YUFDdkIsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDL0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3BELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDOUMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNqQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FDekQsQ0FBQztZQUNGLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDN0MsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUM3QyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ0wsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDL0IsSUFBSSxLQUFLLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQztvQkFDNUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7Z0JBQ3BCLENBQUM7Z0JBQ0QsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFFN0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQ3ZCLEtBQUssQ0FBQyxTQUFTO3FCQUNaLE9BQU8sQ0FBQyxDQUFDLE1BQXFDLEVBQUUsRUFBRTtvQkFDakQsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUM7Z0JBQ3hDLENBQUMsQ0FBQztxQkFDRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7cUJBQ2IsU0FBUyxDQUFDLENBQUMsT0FBd0MsRUFBRSxFQUFFO29CQUN0RCxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7d0JBQ3pCLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztvQkFDaEMsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQ0wsQ0FBQztnQkFFRixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FDdkIsS0FBSyxDQUFDLFNBQVM7cUJBQ1osT0FBTyxDQUFDLENBQUMsTUFBcUMsRUFBRSxFQUFFO29CQUNqRCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQztnQkFDeEMsQ0FBQyxDQUFDO3FCQUNELElBQUksQ0FDSCxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsd0JBQXdCO2lCQUNqQztxQkFDQSxTQUFTLENBQUMsQ0FBQyxPQUF3QyxFQUFFLEVBQUU7b0JBQ3RELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQ3pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FDdkMsQ0FBQztnQkFDSixDQUFDLENBQUMsQ0FDTCxDQUFDO2dCQUVGLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUN2QixLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO29CQUM3QixHQUFHLElBQUksQ0FBQzt3QkFDTixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQzt3QkFDekQsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUMsQ0FBQztnQkFDL0QsQ0FBQyxDQUFDLENBQ0gsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUM5QyxDQUFDO1FBRUQsSUFBSSxDQUFDLHlCQUF5QjtZQUM1QixJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUN0RCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO29CQUMxRCxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMzQixDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsV0FBVztRQUNULElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQy9DLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxpQkFBaUIsQ0FDZixTQUFrQixFQUNsQixXQUFvQixFQUNwQixXQUFvQjtRQUVwQixNQUFNLGlCQUFpQixHQUFHLElBQUksV0FBVyxDQUFDO1lBQ3hDLFlBQVksRUFBRSxTQUFTO1lBQ3ZCLGtCQUFrQixFQUFFLElBQUksQ0FBQyx3QkFBd0I7WUFDakQsaUJBQWlCLEVBQUUsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN4QyxnQkFBZ0IsRUFBRSxzQkFBc0IsQ0FDdEMsU0FBUyxFQUNULFdBQVcsRUFDWCxXQUFXLENBQ1o7U0FDRixDQUFDLENBQUM7UUFDSCxPQUFPLGlCQUFpQixDQUFDO0lBQzNCLENBQUM7SUFFRDs7T0FFRztJQUVLLFNBQVMsQ0FBQyxRQUFpQixFQUFFLFVBQW9CO1FBQ3ZELElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUN2QixJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVM7YUFDdkIsT0FBTyxDQUFDLENBQUMsTUFBcUMsRUFBRSxFQUFFO1lBQ2pELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDO1FBQ3hDLENBQUMsQ0FBQzthQUNELElBQUksQ0FDSCxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsd0JBQXdCO1NBQ2pDO2FBQ0EsU0FBUyxDQUFDLENBQUMsT0FBd0MsRUFBRSxFQUFFO1lBQ3RELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDdEUsQ0FBQyxDQUFDLENBQ0wsQ0FBQztRQUVGLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUN2QixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUN4QyxHQUFHLElBQUksQ0FBQztnQkFDTixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztnQkFDekQsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUMsQ0FBQztRQUMvRCxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsb0JBQW9CO1FBQ2xCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCw2Q0FBNkM7WUFDN0MsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsMEJBQTBCLEVBQUU7Z0JBQzdELFlBQVksRUFBRSxLQUFLO2dCQUNuQixJQUFJLEVBQUU7b0JBQ0osUUFBUSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUU7b0JBQzNDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztvQkFDakIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2lCQUNoQjtnQkFDRCxTQUFTLEVBQUUsS0FBSzthQUNqQixDQUFDLENBQUM7WUFFSCw4REFBOEQ7WUFDOUQsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQW9CLEVBQUUsRUFBRTtnQkFDekQsZ0NBQWdDO2dCQUNoQyxJQUFJLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDNUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUN0RSxJQUFJLENBQUMsYUFBYSxDQUNoQixJQUFJLENBQUMsY0FBYyxFQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFDeEIsSUFBSSxDQUFDLFNBQVMsRUFDZCxJQUFJLENBQUMsV0FBVyxDQUNqQixDQUFDO29CQUNGLElBQUksQ0FBQyxtQkFBbUIsQ0FDdEIsSUFBSSxDQUFDLGNBQWMsRUFDbkIsSUFBSSxDQUFDLE9BQU8sRUFDWixJQUFJLENBQUMsT0FBTyxDQUNiLENBQUM7Z0JBQ0osQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxjQUFjLENBQUMsVUFBVSxFQUFFLFNBQWtCO1FBQ25ELFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCwwQ0FBMEM7WUFDMUMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUU7Z0JBQ3JELFlBQVksRUFBRSxLQUFLO2dCQUNuQixJQUFJLEVBQUUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO2FBQ2hELENBQUMsQ0FBQztZQUVILDhEQUE4RDtZQUM5RCxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQzNDLGdDQUFnQztnQkFDaEMsSUFBSSxTQUFTLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQzVDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUN2RCxJQUFJLENBQUMsZUFBZSxDQUNsQixVQUFVLEVBQ1YsU0FBUyxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FDdEMsQ0FBQztvQkFDRixJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztvQkFFdkQsSUFBSSxDQUFDLENBQUMsVUFBVSxZQUFZLFNBQVMsQ0FBQyxFQUFFLENBQUM7d0JBQ3ZDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDOUQsSUFBSSxDQUFDLHdCQUF3QixDQUMzQixVQUFVLEVBQ1YsdUJBQXVCLEVBQ3ZCLGlCQUFpQixDQUNsQixDQUFDO3dCQUNGLElBQUksQ0FBQyxZQUFZLENBQ2YsVUFBVSxFQUNWLENBQUMsRUFDRCxVQUFVLFlBQVksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUN4QyxDQUFDO29CQUNKLENBQUM7b0JBRUQsU0FBUzt3QkFDUCxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUM7d0JBQzVCLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFOzRCQUMxQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsU0FBUzs0QkFDckMsTUFBTSxDQUFDLFdBQVc7eUJBQ25CLENBQUMsQ0FBQztvQkFDUCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDM0IsQ0FBQztnQkFDRCxzQkFBc0I7cUJBQ2pCLENBQUM7b0JBQ0osSUFBSSxDQUFDLHdCQUF3Qjt5QkFDMUIsV0FBVyxFQUFFO3lCQUNiLE9BQU8sQ0FBQyxDQUFDLG1CQUFtQixFQUFFLEVBQUU7d0JBQy9CLE1BQU0sUUFBUSxHQUFHLG1CQUFtQixDQUFDLFdBQVcsRUFBUyxDQUFDO3dCQUMxRCxJQUFJLFVBQVUsS0FBSyxRQUFRLEVBQUUsQ0FBQzs0QkFDNUIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGFBQWEsQ0FDekMsbUJBQW1CLENBQ3BCLENBQUM7d0JBQ0osQ0FBQztvQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFDUCxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssU0FBUyxDQUFDLFVBQXNCLEVBQUUsTUFBZTtRQUN2RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbEQsQ0FBQztJQUVPLFlBQVksQ0FBQyxVQUFVO1FBQzdCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUM7UUFFeEMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQzFCLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7WUFFdkMsSUFBSSxRQUFRLEtBQUssWUFBWSxFQUFFLENBQUM7Z0JBQzlCLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEtBQUssU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUMxRCxJQUFJLE9BQU8sR0FBRyxPQUFPLENBQ25CLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFDekQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxXQUE4QixDQUNqRCxDQUFDO29CQUNGLElBQUksQ0FBQyx1QkFBdUIsQ0FDMUIsVUFBVSxFQUNWLEdBQUcsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQzNDLENBQUM7Z0JBQ0osQ0FBQztxQkFBTSxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDNUQsSUFBSSxVQUFVLFlBQVksUUFBUSxFQUFFLENBQUM7d0JBQ25DLElBQUksZUFBZSxHQUFHLFVBQVUsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7d0JBQ3BELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FDekIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsRUFDL0IsTUFBTSxDQUFDLFVBQVUsQ0FBQyxXQUFnQyxDQUNuRCxDQUFDO3dCQUNGLE1BQU0sSUFBSSxHQUNSLDZCQUE2QixDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7d0JBQy9ELE1BQU0sV0FBVyxHQUNmLEtBQUssR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7d0JBQ3BELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUM7b0JBQ3hELENBQUM7eUJBQU0sQ0FBQzt3QkFDTixJQUFJLGdCQUFnQixHQUFHLHVCQUF1QixDQUM1QyxVQUFVLEVBQ1YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQ2hELENBQUM7d0JBQ0YsSUFBSSxXQUFnQixDQUFDO3dCQUNyQixNQUFNLElBQUksR0FBc0IsTUFBTSxDQUFDLFVBQVU7NkJBQzlDLFdBQWdDLENBQUM7d0JBQ3BDLFdBQVc7NEJBQ1QsNkJBQTZCLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQzt3QkFDL0QsZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDO3dCQUN4RCxJQUFJLFdBQVcsR0FDYixVQUFVLFlBQVksT0FBTzs0QkFDM0IsQ0FBQyxDQUFDLEtBQUs7Z0NBQ0wsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtnQ0FDdEMsR0FBRztnQ0FDSCxXQUFXOzRCQUNiLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEdBQUcsR0FBRyxHQUFHLFdBQVcsQ0FBQzt3QkFDakUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztvQkFDeEQsQ0FBQztnQkFDSCxDQUFDO3FCQUFNLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEtBQUssU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO29CQUMxRCxJQUFJLFVBQVUsWUFBWSxRQUFRLEVBQUUsQ0FBQzt3QkFDbkMsSUFBSSxlQUFlLEdBQUcsVUFBVSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQzt3QkFDcEQsSUFBSSxVQUFVLEdBQUcscUJBQXFCLENBQ3BDLGVBQWUsRUFDZixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FDaEQsQ0FBQzt3QkFDRixNQUFNLElBQUksR0FDUiwyQkFBMkIsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO3dCQUM3RCxNQUFNLElBQUksR0FBb0IsTUFBTSxDQUFDLFVBQVU7NkJBQzVDLFdBQThCLENBQUM7d0JBQ2xDLFVBQVUsR0FBRyxrQkFBa0IsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7d0JBQ2xELE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQzt3QkFDaEUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztvQkFDdEQsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLElBQUksY0FBYyxHQUFHLHFCQUFxQixDQUN4QyxVQUFVLEVBQ1YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQ2hELENBQUM7d0JBQ0YsSUFBSSxXQUFnQixDQUFDO3dCQUNyQixNQUFNLElBQUksR0FBb0IsTUFBTSxDQUFDLFVBQVU7NkJBQzVDLFdBQThCLENBQUM7d0JBQ2xDLFdBQVc7NEJBQ1QsMkJBQTJCLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQzt3QkFDN0QsY0FBYyxHQUFHLGtCQUFrQixDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQzt3QkFDMUQsTUFBTSxXQUFXLEdBQ2YsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxHQUFHLEdBQUcsV0FBVyxDQUFDO3dCQUMzRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO29CQUN4RCxDQUFDO2dCQUNILENBQUM7cUJBQU0sQ0FBQztvQkFDTixJQUFJLENBQUMsdUJBQXVCLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ25FLENBQUM7Z0JBRUQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDOUQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUNsRSxJQUFJLENBQUMsc0JBQXNCLENBQ3pCLFVBQVUsRUFDVixNQUFNLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsRUFDM0QsTUFBTSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUNuQyxNQUFNLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUM3QyxDQUNGLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLHdCQUF3QixDQUMzQixVQUFVLEVBQ1YsTUFBTSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUNuQyxNQUFNLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQ3RDLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLFlBQVksQ0FDZixVQUFVLEVBQ1YsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQ3pCLE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUMxQixDQUFDO2dCQUNGLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDakQsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLFlBQVksQ0FDbEIsU0FBZ0MsRUFDaEMsS0FBYSxFQUNiLGdCQUFpQjtRQUVqQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRXhDLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxXQUFXLEVBQVMsQ0FBQztRQUNsRCxVQUFVLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFeEMsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUMxQyxVQUFVLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQy9CLENBQUM7UUFFRixRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDMUIsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekUsSUFBSSxxQkFBcUIsS0FBSyxpQkFBaUIsRUFBRSxDQUFDO2dCQUNoRCxNQUFNLFFBQVEsR0FBRyxTQUFTO3FCQUN2QixHQUFHLENBQUMsV0FBVyxDQUFDO3FCQUNoQixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUNiLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3JCLE1BQU0sU0FBUyxHQUFHLFNBQVM7cUJBQ3hCLEdBQUcsQ0FBQyxXQUFXLENBQUM7cUJBQ2hCLFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFFMUQsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ3JELE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsTUFBTSxDQUFDO2dCQUV6RCxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUN6QyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUV6QyxNQUFNLEdBQUcsR0FBVyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUc7b0JBQ3ZDLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUc7b0JBQ3ZCLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQ2QsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDaEQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQzdELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO2dCQUNsRSxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDeEQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDdEQsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxpQkFBaUIsQ0FDdkIsVUFBVSxFQUNWLE1BQWUsRUFDZixPQUF5QjtRQUV6QixJQUFJLEdBQVcsQ0FBQztRQUNoQixJQUFJLFVBQXlCLENBQUM7UUFDOUIsSUFBSSxTQUF3QixDQUFDO1FBQzdCLElBQUksT0FBZSxDQUFDO1FBQ3BCLElBQUksT0FBZSxDQUFDO1FBRXBCLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7UUFDdEUsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFekQsTUFBTSxRQUFRLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLEVBQUU7WUFDL0QsaUJBQWlCLEVBQUUsVUFBVTtZQUM3QixjQUFjLEVBQUUsVUFBVTtTQUMzQixDQUFRLENBQUM7UUFFVixJQUFJLFVBQVUsWUFBWSxRQUFRLElBQUksTUFBTSxFQUFFLENBQUM7WUFDN0MsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDWCxHQUFHLEdBQUcsTUFBTSxDQUFDO1lBQ2YsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLFFBQVEsQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDO2dCQUN4QixRQUFRLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDOUMsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUMxQjtvQkFDRSxVQUFVLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ2xDLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDbkMsRUFDRCxVQUFVLEVBQ1YsV0FBVyxDQUNaLENBQUM7Z0JBQ0YsVUFBVSxHQUFHLFNBQVMsQ0FDcEI7b0JBQ0UsVUFBVSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUNsQyxVQUFVLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQ25DLEVBQ0QsVUFBVSxFQUNWLFdBQVcsQ0FDWixDQUFDO2dCQUNGLE9BQU8sR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hCLE9BQU8sR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hCLEdBQUcsR0FBRyxXQUFXLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO2dCQUMxQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNuRCxDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO1lBQ3JELEdBQUcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3pELENBQUM7UUFFRCxJQUFJLFVBQVUsWUFBWSxPQUFPLEVBQUUsQ0FBQztZQUNsQyxTQUFTLEdBQUcsU0FBUyxDQUNuQixVQUFVLENBQUMsa0JBQWtCLEVBQUUsRUFDL0IsVUFBVSxFQUNWLFdBQVcsQ0FDWixDQUFDO1lBQ0YsT0FBTyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2QixPQUFPLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pCLENBQUM7UUFFRCxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQztZQUN0QixJQUFJLEVBQUUsT0FBTztZQUNiLFFBQVE7WUFDUixVQUFVLEVBQUUsVUFBVSxDQUFDLE9BQU8sRUFBRTtZQUNoQyxVQUFVLEVBQUU7Z0JBQ1YsRUFBRSxFQUFFLFNBQVM7Z0JBQ2IsSUFBSSxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO2dCQUM5QixTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUk7Z0JBQ25DLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSTtnQkFDbEMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJO2dCQUNyQixTQUFTLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUM7Z0JBQ3ZDLFlBQVksRUFBRTtvQkFDWixJQUFJLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUM7b0JBQ2xDLE1BQU0sRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQztpQkFDdkM7Z0JBQ0QsT0FBTyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDO2dCQUNuQyxPQUFPLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUM7Z0JBQ25DLFNBQVMsRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQztnQkFDdkMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDO2FBQzVDO1lBQ0QsSUFBSSxFQUFFO2dCQUNKLEVBQUUsRUFBRSxTQUFTO2FBQ2Q7U0FDRixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVPLFNBQVM7UUFDZixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQ2pDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNWLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztTQUNiLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxVQUFVLENBQUMsVUFBb0I7UUFDcEMsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFO2dCQUMxRCxZQUFZLEVBQUUsS0FBSzthQUNwQixDQUFDLENBQUM7WUFDSCxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBYSxFQUFFLEVBQUU7Z0JBQ2xELElBQUksU0FBUyxDQUFDLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUM1QyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztvQkFDdEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLFlBQVksQ0FBa0IsRUFBRSxFQUFFO3dCQUN2RCxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7cUJBQ2QsQ0FBQyxDQUFDO29CQUNILElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO29CQUNyRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztvQkFDcEMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7b0JBQzdCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO29CQUNsQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUM3QyxJQUFJLENBQUMsU0FBUyxFQUNkLElBQUksQ0FBQyxXQUFXLEVBQ2hCLElBQUksQ0FBQyxXQUFXLENBQ2pCLENBQUM7b0JBQ0YsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztvQkFDOUQsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7b0JBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztvQkFDbkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7d0JBQ3JCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO3dCQUMxQixJQUFJLENBQUMsaUJBQWlCO3FCQUN2QixDQUFDLENBQUM7b0JBQ0gsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7b0JBQy9DLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDcEQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztvQkFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQzt3QkFDekIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUN4QixDQUFDO29CQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7Z0JBQ3ZELENBQUM7cUJBQU0sQ0FBQztvQkFDTixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7b0JBQzVDLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztnQkFDNUQsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUVELHlCQUF5QjtJQUV6Qjs7T0FFRztJQUNILGdCQUFnQixDQUFDLE9BQU87UUFDdEIsTUFBTSxpQkFBaUIsR0FBRyxXQUFXLENBQ25DLE9BQU8sRUFDUCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FDaEQsQ0FBQztRQUNGLElBQUksQ0FBQyxjQUFjLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsZUFBZSxFQUFFLEVBQUU7WUFDdkQsSUFBSSxDQUFDLHdCQUF3QjtpQkFDMUIsV0FBVyxFQUFFO2lCQUNiLE9BQU8sQ0FBQyxDQUFDLG1CQUFtQixFQUFFLEVBQUU7Z0JBQy9CLE1BQU0sUUFBUSxHQUFHLG1CQUFtQixDQUFDLFdBQVcsRUFBUyxDQUFDO2dCQUMxRCxJQUFJLGVBQWUsQ0FBQyxVQUFVLENBQUMsRUFBRSxLQUFLLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDdEQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2dCQUNuRSxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsY0FBYztRQUNaLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzdDLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQzNDLElBQUksQ0FBQyxJQUFJO1lBQ1AsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUM7WUFDOUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsbUJBQW1CLENBQUMsZUFBd0I7UUFDMUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDNUUsQ0FBQztJQUVELG9CQUFvQixDQUFDLEtBQVU7UUFDN0IsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0RCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsRCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FDMUMsc0JBQXNCLENBQ3BCLElBQUksQ0FBQyxTQUFTLEVBQ2QsSUFBSSxDQUFDLFdBQVcsRUFDaEIsSUFBSSxDQUFDLFdBQVcsQ0FDakIsQ0FDRixDQUFDO1lBQ0YsSUFBSSxDQUFDLGlCQUFpQixDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsK0NBQStDO0lBRS9DOztPQUVHO0lBRUksYUFBYSxDQUFDLFNBQXVCO1FBQzFDLElBQUksU0FBUyxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUN0RCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxTQUFTLENBQUM7WUFDcEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3hCLENBQUM7WUFDRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNqQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FDekQsQ0FBQztZQUNGLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDN0MsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUM3QyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ0wsSUFBSSxDQUFDLHdCQUF3QjtnQkFDM0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLG9CQUFvQixDQUFDO1lBQzlDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDOUQsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDM0IsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hCLENBQUM7UUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFTSxXQUFXLENBQUMsUUFBUyxFQUFFLFVBQVc7UUFDdkMsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkMsSUFBSSxRQUFRLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDOUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDaEUsQ0FBQztRQUNELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLFdBQVcsQ0FBQztZQUN4QyxrQkFBa0IsRUFBRSxJQUFJO1lBQ3hCLEVBQUUsRUFBRSxnQkFBZ0IsR0FBRyxFQUFFLElBQUksQ0FBQyxjQUFjO1lBQzVDLEtBQUssRUFBRSxVQUFVO2dCQUNmLENBQUMsQ0FBQyxRQUFRO2dCQUNWLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUM7WUFDbEUsTUFBTSxFQUFFLEdBQUc7WUFDWCxNQUFNLEVBQUUsSUFBSSxpQkFBaUIsRUFBRTtZQUMvQixLQUFLLEVBQUUsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLEVBQUU7Z0JBQzdCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLDRCQUE0QixDQUN2RCxPQUFPLEVBQ1AsVUFBVSxFQUNWLElBQUksQ0FBQyxjQUFjLEVBQ25CLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQ3hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxFQUNoQyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLE1BQU0sRUFDbEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFDdEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFDdEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQ25CLElBQUksQ0FBQyxJQUFJLENBQ1YsQ0FBQztZQUNKLENBQUM7WUFDRCxlQUFlLEVBQUUsSUFBSTtZQUNyQixVQUFVLEVBQUUsSUFBSTtZQUNoQixTQUFTLEVBQUUsS0FBSztZQUNoQixTQUFTLEVBQUU7Z0JBQ1QsT0FBTyxFQUFFLEtBQUs7YUFDZjtTQUNGLENBQUMsQ0FBQztRQUVILGlCQUFpQixDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFFN0QscUJBQXFCLENBQ25CLElBQUksQ0FBQyxXQUFXLEVBQ2hCLElBQUksMkJBQTJCLENBQUM7WUFDOUIsTUFBTSxFQUFFLGFBQWEsQ0FBQyxJQUFJO1NBQzNCLENBQUMsQ0FDSCxDQUFDO1FBRUYsdUJBQXVCLENBQ3JCLElBQUksQ0FBQyxXQUFXLEVBQ2hCLElBQUksNkJBQTZCLENBQUM7WUFDaEMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHO1lBQ2IsTUFBTSxFQUFFLGFBQWEsQ0FBQyxJQUFJO1lBQzFCLElBQUksRUFBRSxJQUFJO1NBQ1gsQ0FBQyxDQUNILENBQUM7UUFDRixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQzNCLGVBQWUsRUFDZixDQUFDLEtBQTBCLEVBQUUsRUFBRTtZQUM3QixNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQy9DLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMzQyxDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxhQUFhLENBQ1gsY0FBdUIsRUFDdkIsUUFBaUIsRUFDakIsU0FBaUIsRUFDakIsV0FBbUI7UUFFbkIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN6RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUMvQyxJQUFJLFNBQVMsR0FBRyxXQUFXLENBQ3pCLE9BQU8sRUFDUCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FDaEQsQ0FBQztnQkFDRixJQUFJLENBQUMsd0JBQXdCLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztnQkFFakUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVc7cUJBQzVCLEdBQUcsRUFBRTtxQkFDTCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUNoRCxNQUFNLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDbEUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQ3RFLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2xDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUVILFlBQVksQ0FBQyxjQUF1QixFQUFFLElBQVksRUFBRSxLQUFlO1FBQ2pFLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDL0MsSUFBSSxTQUFTLEdBQUcsV0FBVyxDQUN6QixPQUFPLEVBQ1AsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQ2hELENBQUM7Z0JBQ0YsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3BELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXO3FCQUM1QixHQUFHLEVBQUU7cUJBQ0wsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztnQkFDaEQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDMUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ2hDLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFO3FCQUNsQyxTQUFTLEVBQUU7cUJBQ1gsV0FBVyxFQUFFO3FCQUNiLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzdDLFNBQVMsQ0FBQyxhQUFhLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO2dCQUNwRSxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDdEIsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUNyQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUV2QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFMUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNwQyxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBRUgsbUJBQW1CLENBQ2pCLGNBQXVCLEVBQ3ZCLE9BQWUsRUFDZixPQUFlO1FBRWYsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM1QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUMvQyxJQUFJLFNBQVMsR0FBRyxXQUFXLENBQ3pCLE9BQU8sRUFDUCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FDaEQsQ0FBQztnQkFDRixJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQy9DLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXO3FCQUM1QixHQUFHLEVBQUU7cUJBQ0wsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztnQkFDaEQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDdEQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDdEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ2hDLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFO3FCQUNsQyxTQUFTLEVBQUU7cUJBQ1gsV0FBVyxFQUFFO3FCQUNiLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzdDLFNBQVMsQ0FBQyxhQUFhLENBQUM7b0JBQ3RCLE9BQU8sRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLE9BQU87b0JBQ2xDLE9BQU8sRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLE9BQU87aUJBQ25DLENBQUMsQ0FBQztnQkFDSCxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDdEIsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3BDLENBQUM7SUFDSCxDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQU07UUFDakIsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7UUFDbEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxvQkFBb0IsQ0FBQyxZQUFrQjtRQUNyQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsWUFBWSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLFlBQVk7WUFDZixDQUFDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO1lBQzlDLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsK0NBQStDO0lBRS9DOzs7O09BSUc7SUFDSyx1QkFBdUIsQ0FBQyxTQUFTLEVBQUUsS0FBYTtRQUN0RCxTQUFTLENBQUMsYUFBYSxDQUNyQjtZQUNFLE1BQU0sRUFBRSxLQUFLO1NBQ2QsRUFDRCxJQUFJLENBQ0wsQ0FBQztJQUNKLENBQUM7SUFFTyxzQkFBc0IsQ0FDNUIsU0FBZ0MsRUFDaEMsUUFBZ0IsRUFDaEIsU0FBaUI7UUFFakIsU0FBUyxDQUFDLGFBQWEsQ0FDckI7WUFDRSxVQUFVLEVBQUUsR0FBRyxRQUFRLE1BQU0sU0FBUyxFQUFFO1NBQ3pDLEVBQ0QsSUFBSSxDQUNMLENBQUM7SUFDSixDQUFDO0lBRU8sd0JBQXdCLENBQzlCLFNBQWdDLEVBQ2hDLFNBQWlCLEVBQ2pCLFdBQW1CO1FBRW5CLFNBQVMsQ0FBQyxhQUFhLENBQ3JCO1lBQ0UsVUFBVSxFQUFFLFNBQVM7WUFDckIsWUFBWSxFQUFFLFdBQVc7U0FDMUIsRUFDRCxJQUFJLENBQ0wsQ0FBQztJQUNKLENBQUM7SUFFTyxZQUFZLENBQ2xCLFNBQWdDLEVBQ2hDLE9BQWUsRUFDZixPQUFlO1FBRWYsU0FBUyxDQUFDLGFBQWEsQ0FDckI7WUFDRSxRQUFRLEVBQUUsT0FBTztZQUNqQixRQUFRLEVBQUUsT0FBTztTQUNsQixFQUNELElBQUksQ0FDTCxDQUFDO0lBQ0osQ0FBQztJQUVPLGVBQWUsQ0FDckIsU0FBZ0MsRUFDaEMsV0FBK0M7UUFFL0MsU0FBUyxDQUFDLGFBQWEsQ0FDckI7WUFDRSxVQUFVLEVBQUUsV0FBVztTQUN4QixFQUNELElBQUksQ0FDTCxDQUFDO0lBQ0osQ0FBQztJQUVPLGlCQUFpQixDQUN2QixTQUFnQyxFQUNoQyxXQUF1RTtRQUV2RSxTQUFTLENBQUMsYUFBYSxDQUNyQjtZQUNFLFlBQVksRUFBRSxXQUFXO1NBQzFCLEVBQ0QsSUFBSSxDQUNMLENBQUM7SUFDSixDQUFDO0lBRUQsMERBQTBEO0lBRTFELGtCQUFrQjtRQUNoQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDNUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVM7aUJBQ2pELEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ2IsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7WUFDdEIsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNYLENBQUM7SUFFRCxtQkFBbUI7UUFDakIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQzVDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUM1RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FDdEU7WUFDSCxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztJQUNyQixDQUFDO0lBRUQsbUJBQW1CO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUM1QyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLElBQUk7WUFDOUQsQ0FBQyxDQUFDLHVCQUF1QixDQUFDO0lBQzlCLENBQUM7SUFFRCxxQkFBcUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQzVDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsTUFBTTtZQUNoRSxDQUFDLENBQUMsaUJBQWlCLENBQUM7SUFDeEIsQ0FBQztJQUVELGlCQUFpQjtRQUNmLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUM1QyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTztZQUNwRCxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxpQkFBaUI7UUFDZixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDNUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU87WUFDcEQsQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUNWLENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDZixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDdEMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FDNUMsQ0FBQztJQUNKLENBQUM7SUFFRCxpQkFBaUI7UUFDZixxREFBcUQ7UUFDckQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzNELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFO1lBQ3hCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztZQUMzQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQ2pDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQ3pELENBQUM7UUFDRixPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxpQkFBaUI7SUFFakI7O09BRUc7SUFDSyxpQkFBaUI7UUFDdkIsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7T0FHRztJQUNLLHVCQUF1QixDQUFDLFVBQVU7UUFDeEMsdUJBQXVCLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxDQUN6QyxDQUFDLFNBQWdDLEVBQUUsRUFBRTtZQUNuQyxJQUFJLFNBQVMsSUFBSSxTQUFTLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztnQkFDcEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3ZDLENBQUM7UUFDSCxDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFDRDs7OztPQUlHO0lBQ0sscUJBQXFCLENBQzNCLE1BQU0sRUFDTixVQUFzQixFQUN0QixNQUFlO1FBRWYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOztPQUVHO0lBQ0sscUJBQXFCO1FBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUM1QixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDL0IsQ0FBQztRQUVELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQztJQUNuQyxDQUFDO0lBRUQ7O09BRUc7SUFDSyxtQkFBbUI7UUFDekIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQztRQUNuQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQ3BELENBQUMsVUFBc0IsRUFBRSxFQUFFO1lBQ3pCLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FDRixDQUFDO1FBRUYsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxVQUFzQixFQUFFLEVBQUU7WUFDbEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNoQyxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FDMUQsQ0FBQyxTQUFnQyxFQUFFLEVBQUU7Z0JBQ25DLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3hDLENBQUMsQ0FDRixDQUFDO1FBQ0osQ0FBQztRQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVEOzs7T0FHRztJQUVILE9BQU87UUFDTCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLEVBQUUsS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztJQUM5RSxDQUFDO0lBRUQsWUFBWTtRQUNWLE9BQU8sQ0FDTCxJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxFQUFFLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQzFFLENBQUM7SUFDSixDQUFDO0lBRUQsU0FBUztRQUNQLE9BQU8sQ0FDTCxJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxFQUFFLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQ3ZFLENBQUM7SUFDSixDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8sQ0FDTCxJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxFQUFFLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQ3RFLENBQUM7SUFDSixDQUFDO0lBRUQ7OztPQUdHO0lBRUgsWUFBWSxDQUFDLE1BQWM7UUFDekIsSUFBSSxZQUFvQixDQUFDO1FBRXpCLElBQUksTUFBTSxFQUFFLENBQUM7WUFDWCxJQUFJLENBQUMsV0FBVyxLQUFLLGlCQUFpQixDQUFDLE1BQU07Z0JBQzNDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUM7Z0JBQ3pCLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDckMsQ0FBQzthQUFNLENBQUM7WUFDTixZQUFZLEdBQUcsU0FBUyxDQUFDO1FBQzNCLENBQUM7UUFFRCxNQUFNLFVBQVUsR0FBRyxDQUFDLE9BQThCLEVBQUUsVUFBa0IsRUFBRSxFQUFFO1lBQ3hFLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQWEsQ0FBQztZQUM5QyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUNsQyxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQ3JCLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUNuQixXQUFXLENBQ1osQ0FBQztZQUVGLE1BQU0sTUFBTSxHQUNWLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUM7WUFDekUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUM1RCxPQUFPLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQztnQkFDdkIsS0FBSyxFQUFFLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQztvQkFDeEIsTUFBTSxFQUFFLE1BQU07b0JBQ2QsTUFBTSxFQUFFLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQzt3QkFDekIsS0FBSyxFQUFFLENBQUM7d0JBQ1IsS0FBSyxFQUFFLGlCQUFpQjtxQkFDekIsQ0FBQztvQkFDRixJQUFJLEVBQUUsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDO3dCQUNyQixLQUFLLEVBQUUsdUJBQXVCO3FCQUMvQixDQUFDO2lCQUNILENBQUM7YUFDSCxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELG1CQUFtQixDQUFDLG1CQUFzQztRQUN4RCxJQUFJLG1CQUFtQixLQUFLLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUM3QyxPQUFPO1FBQ1QsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsV0FBVyxHQUFHLG1CQUFtQixDQUFDO1lBQ3ZDLElBQUksQ0FBQyxXQUFXLEtBQUssaUJBQWlCLENBQUMsTUFBTTtnQkFDM0MsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7Z0JBQ3RFLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDM0UsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLFlBQVksQ0FBQyxjQUF1QixFQUFFLFFBQVM7UUFDckQsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLEVBQUU7Z0JBQ3pELE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLDRCQUE0QixDQUN2RCxPQUFPLEVBQ1AsVUFBVSxFQUNWLGNBQWMsRUFDZCxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUN4QixPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksRUFDaEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxNQUFNLEVBQ2xDLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQ3RCLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQ3RCLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUNuQixJQUFJLENBQUMsSUFBSSxDQUNWLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsRUFBRTtnQkFDekQsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsNEJBQTRCLENBQ3ZELE9BQU8sRUFDUCxVQUFVLEVBQ1YsY0FBYyxFQUNkLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQ3hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxFQUNoQyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLE1BQU0sRUFDbEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFDdEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFDdEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQ3BCLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRU8sU0FBUyxDQUFDLFVBQVU7UUFDMUIsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3JDLE9BQU8sTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4QyxDQUFDO3VHQW4wQ1UsYUFBYTsyRkFBYixhQUFhLDBoQkN2SjFCLDZxTUE0TUEsOHhDRHpFSSxxQkFBcUIsd2xCQUNyQixvQkFBb0IsbVdBQ3BCLElBQUksNEZBQ0osa0JBQWtCLDBTQUNsQixjQUFjLDBXQUNkLFdBQVcsbXZCQUNYLG1CQUFtQixpTkFDbkIsZUFBZSx5d0JBQ2YsS0FBSyxrSEFDTCxlQUFlLDhCQUNmLGdCQUFnQixtSUFDaEIsZUFBZSwwVUFDZixnQkFBZ0IsNlRBQ2hCLGFBQWEscUxBQ2Isb0JBQW9CLHFQQUNwQixjQUFjLHdQQUNkLFNBQVMsNkNBQ1QsaUJBQWlCLCtFQXhDUDtZQUNWLE9BQU8sQ0FBQyxXQUFXLEVBQUU7Z0JBQ25CLEtBQUssQ0FDSCxNQUFNLEVBQ04sS0FBSyxDQUFDO29CQUNKLE9BQU8sRUFBRSxDQUFDO2lCQUNYLENBQUMsQ0FDSDtnQkFDRCxLQUFLLENBQ0gsUUFBUSxFQUNSLEtBQUssQ0FBQztvQkFDSixPQUFPLEVBQUUsQ0FBQztpQkFDWCxDQUFDLENBQ0g7Z0JBQ0QsVUFBVSxDQUFDLGdCQUFnQixFQUFFLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7Z0JBQ3JELFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO2FBQ3RELENBQUM7U0FDSDs7MkZBMEJVLGFBQWE7a0JBN0N6QixTQUFTOytCQUNFLFVBQVUsY0FDUjt3QkFDVixPQUFPLENBQUMsV0FBVyxFQUFFOzRCQUNuQixLQUFLLENBQ0gsTUFBTSxFQUNOLEtBQUssQ0FBQztnQ0FDSixPQUFPLEVBQUUsQ0FBQzs2QkFDWCxDQUFDLENBQ0g7NEJBQ0QsS0FBSyxDQUNILFFBQVEsRUFDUixLQUFLLENBQUM7Z0NBQ0osT0FBTyxFQUFFLENBQUM7NkJBQ1gsQ0FBQyxDQUNIOzRCQUNELFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDOzRCQUNyRCxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQzt5QkFDdEQsQ0FBQztxQkFDSCxtQkFHZ0IsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1A7d0JBQ1AscUJBQXFCO3dCQUNyQixvQkFBb0I7d0JBQ3BCLElBQUk7d0JBQ0osa0JBQWtCO3dCQUNsQixjQUFjO3dCQUNkLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixlQUFlO3dCQUNmLEtBQUs7d0JBQ0wsZUFBZTt3QkFDZixnQkFBZ0I7d0JBQ2hCLGVBQWU7d0JBQ2YsZ0JBQWdCO3dCQUNoQixhQUFhO3dCQUNiLG9CQUFvQjt3QkFDcEIsY0FBYzt3QkFDZCxTQUFTO3dCQUNULGlCQUFpQjtxQkFDbEI7ME1BVVEsR0FBRztzQkFBWCxLQUFLO2dCQUdGLE1BQU07c0JBRFQsS0FBSztnQkFVRixZQUFZO3NCQURmLEtBQUs7Z0JBVUYsa0JBQWtCO3NCQURyQixLQUFLO2dCQVNJLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFFRyxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFFRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBNkNxQixNQUFNO3NCQUFqQyxTQUFTO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBhbmltYXRlLFxuICBzdGF0ZSxcbiAgc3R5bGUsXG4gIHRyYW5zaXRpb24sXG4gIHRyaWdnZXJcbn0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBBc3luY1BpcGUsIE5nRm9yLCBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEZvcm1zTW9kdWxlLFxuICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICBVbnR5cGVkRm9ybUJ1aWxkZXIsXG4gIFVudHlwZWRGb3JtQ29udHJvbCxcbiAgVW50eXBlZEZvcm1Hcm91cFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRCYWRnZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2JhZGdlJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRCdXR0b25Ub2dnbGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24tdG9nZ2xlJztcbmltcG9ydCB7IE1hdE9wdGlvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IE1hdERpdmlkZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaXZpZGVyJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xuaW1wb3J0IHsgTWF0U2xpZGVUb2dnbGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbGlkZS10b2dnbGUnO1xuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xuXG5pbXBvcnQge1xuICBFbnRpdHlSZWNvcmQsXG4gIEVudGl0eVRhYmxlQnV0dG9uLFxuICBFbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyLFxuICBFbnRpdHlUYWJsZUNvbXBvbmVudCxcbiAgRW50aXR5VGFibGVUZW1wbGF0ZVxufSBmcm9tICdAaWdvMi9jb21tb24vZW50aXR5JztcbmltcG9ydCB7IExhbmd1YWdlU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUvbGFuZ3VhZ2UnO1xuaW1wb3J0IHsgSWdvTGFuZ3VhZ2VNb2R1bGUgfSBmcm9tICdAaWdvMi9jb3JlL2xhbmd1YWdlJztcblxuaW1wb3J0IE9sRmVhdHVyZSBmcm9tICdvbC9GZWF0dXJlJztcbmltcG9ydCBPbE92ZXJsYXkgZnJvbSAnb2wvT3ZlcmxheSc7XG5pbXBvcnQgT2xHZW9KU09OIGZyb20gJ29sL2Zvcm1hdC9HZW9KU09OJztcbmltcG9ydCBPbENpcmNsZSBmcm9tICdvbC9nZW9tL0NpcmNsZSc7XG5pbXBvcnQgdHlwZSB7IFR5cGUgfSBmcm9tICdvbC9nZW9tL0dlb21ldHJ5JztcbmltcG9ydCB7IGRlZmF1bHQgYXMgT2xHZW9tZXRyeSB9IGZyb20gJ29sL2dlb20vR2VvbWV0cnknO1xuaW1wb3J0IE9sUG9pbnQgZnJvbSAnb2wvZ2VvbS9Qb2ludCc7XG5pbXBvcnQgUG9seWdvbiwgeyBmcm9tQ2lyY2xlIH0gZnJvbSAnb2wvZ2VvbS9Qb2x5Z29uJztcbmltcG9ydCAqIGFzIG9scHJvaiBmcm9tICdvbC9wcm9qJztcbmltcG9ydCB7IHRyYW5zZm9ybSB9IGZyb20gJ29sL3Byb2onO1xuaW1wb3J0IHsgVmVjdG9yU291cmNlRXZlbnQgYXMgT2xWZWN0b3JTb3VyY2VFdmVudCB9IGZyb20gJ29sL3NvdXJjZS9WZWN0b3InO1xuaW1wb3J0IE9sVmVjdG9yU291cmNlIGZyb20gJ29sL3NvdXJjZS9WZWN0b3InO1xuaW1wb3J0IHsgZ2V0RGlzdGFuY2UsIGdldExlbmd0aCB9IGZyb20gJ29sL3NwaGVyZSc7XG5pbXBvcnQgKiBhcyBPbFN0eWxlIGZyb20gJ29sL3N0eWxlJztcblxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpcnN0LCBza2lwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBGZWF0dXJlRGF0YVNvdXJjZSB9IGZyb20gJy4uLy4uL2RhdGFzb3VyY2Uvc2hhcmVkL2RhdGFzb3VyY2VzL2ZlYXR1cmUtZGF0YXNvdXJjZSc7XG5pbXBvcnQge1xuICBGRUFUVVJFLFxuICBGZWF0dXJlTW90aW9uLFxuICBGZWF0dXJlU3RvcmUsXG4gIEZlYXR1cmVTdG9yZUxvYWRpbmdTdHJhdGVneSxcbiAgRmVhdHVyZVN0b3JlU2VsZWN0aW9uU3RyYXRlZ3ksXG4gIGZlYXR1cmVUb09sLFxuICB0cnlBZGRMb2FkaW5nU3RyYXRlZ3ksXG4gIHRyeUFkZFNlbGVjdGlvblN0cmF0ZWd5XG59IGZyb20gJy4uLy4uL2ZlYXR1cmUnO1xuaW1wb3J0IHsgdHJ5QmluZFN0b3JlTGF5ZXIgfSBmcm9tICcuLi8uLi9mZWF0dXJlL3NoYXJlZC9mZWF0dXJlLXN0b3JlLnV0aWxzJztcbmltcG9ydCB7IERyYXdDb250cm9sIH0gZnJvbSAnLi4vLi4vZ2VvbWV0cnkvc2hhcmVkL2NvbnRyb2xzL2RyYXcnO1xuaW1wb3J0IHsgVmVjdG9yTGF5ZXIgfSBmcm9tICcuLi8uLi9sYXllci9zaGFyZWQvbGF5ZXJzL3ZlY3Rvci1sYXllcic7XG5pbXBvcnQgeyBJZ29NYXAgfSBmcm9tICcuLi8uLi9tYXAvc2hhcmVkL21hcCc7XG5pbXBvcnQge1xuICBNZWFzdXJlQXJlYVVuaXQsXG4gIE1lYXN1cmVBcmVhVW5pdEFiYnJldmlhdGlvbixcbiAgTWVhc3VyZUxlbmd0aFVuaXQsXG4gIE1lYXN1cmVMZW5ndGhVbml0QWJicmV2aWF0aW9uXG59IGZyb20gJy4uLy4uL21lYXN1cmUvc2hhcmVkL21lYXN1cmUuZW51bSc7XG5pbXBvcnQgeyBnZXRUb29sdGlwc09mT2xHZW9tZXRyeSB9IGZyb20gJy4uLy4uL21lYXN1cmUvc2hhcmVkL21lYXN1cmUudXRpbHMnO1xuaW1wb3J0IHtcbiAgbWVhc3VyZU9sR2VvbWV0cnlBcmVhLFxuICBtZWFzdXJlT2xHZW9tZXRyeUxlbmd0aCxcbiAgbWV0ZXJzVG9Vbml0LFxuICBzcXVhcmVNZXRlcnNUb1VuaXRcbn0gZnJvbSAnLi4vLi4vbWVhc3VyZS9zaGFyZWQvbWVhc3VyZS51dGlscyc7XG5pbXBvcnQgeyBGb250VHlwZSB9IGZyb20gJy4uLy4uL3N0eWxlL3NoYXJlZC9mb250LmVudW0nO1xuaW1wb3J0IHsgU3R5bGVNb2RhbERyYXdpbmdDb21wb25lbnQgfSBmcm9tICcuLi8uLi9zdHlsZS9zdHlsZS1tb2RhbC9kcmF3aW5nL3N0eWxlLW1vZGFsLWRyYXdpbmcuY29tcG9uZW50JztcbmltcG9ydCB7IFN0eWxlTW9kYWxEYXRhIH0gZnJvbSAnLi4vLi4vc3R5bGUvc3R5bGUtbW9kYWwvc2hhcmVkL3N0eWxlLW1vZGFsLmludGVyZmFjZSc7XG5pbXBvcnQgeyBEcmF3U3R5bGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc3R5bGUvc3R5bGUtc2VydmljZS9kcmF3LXN0eWxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgRHJhd0ljb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkL2RyYXctaWNvbi5zZXJ2aWNlJztcbmltcG9ydCB7IENvb3JkaW5hdGVzVW5pdCwgR2VvbWV0cnlUeXBlLCBMYWJlbFR5cGUgfSBmcm9tICcuLi9zaGFyZWQvZHJhdy5lbnVtJztcbmltcG9ydCB7IERyYXcsIEZlYXR1cmVXaXRoRHJhdyB9IGZyb20gJy4uL3NoYXJlZC9kcmF3LmludGVyZmFjZSc7XG5pbXBvcnQgeyBERHRvRE1TLCBjcmVhdGVJbnRlcmFjdGlvblN0eWxlIH0gZnJvbSAnLi4vc2hhcmVkL2RyYXcudXRpbHMnO1xuaW1wb3J0IHsgRHJhd0xheWVyUG9wdXBDb21wb25lbnQgfSBmcm9tICcuL2RyYXctbGF5ZXItcG9wdXAuY29tcG9uZW50JztcbmltcG9ydCB7IERyYXdQb3B1cENvbXBvbmVudCB9IGZyb20gJy4vZHJhdy1wb3B1cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRHJhd1Nob3JjdXRzQ29tcG9uZW50IH0gZnJvbSAnLi9kcmF3LXNob3JjdXRzLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2lnby1kcmF3JyxcbiAgYW5pbWF0aW9uczogW1xuICAgIHRyaWdnZXIoJ29wZW5DbG9zZScsIFtcbiAgICAgIHN0YXRlKFxuICAgICAgICAnb3BlbicsXG4gICAgICAgIHN0eWxlKHtcbiAgICAgICAgICBvcGFjaXR5OiAxXG4gICAgICAgIH0pXG4gICAgICApLFxuICAgICAgc3RhdGUoXG4gICAgICAgICdjbG9zZWQnLFxuICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgb3BhY2l0eTogMFxuICAgICAgICB9KVxuICAgICAgKSxcbiAgICAgIHRyYW5zaXRpb24oJ29wZW4gPT4gY2xvc2VkJywgW2FuaW1hdGUoJzYwMG1zIGVhc2UnKV0pLFxuICAgICAgdHJhbnNpdGlvbignY2xvc2VkID0+IG9wZW4nLCBbYW5pbWF0ZSgnODAwbXMgZWFzZScpXSlcbiAgICBdKVxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vZHJhdy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RyYXcuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBNYXRCdXR0b25Ub2dnbGVNb2R1bGUsXG4gICAgTWF0U2xpZGVUb2dnbGVNb2R1bGUsXG4gICAgTmdJZixcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBNYXRTZWxlY3RNb2R1bGUsXG4gICAgTmdGb3IsXG4gICAgTWF0T3B0aW9uTW9kdWxlLFxuICAgIE1hdERpdmlkZXJNb2R1bGUsXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXG4gICAgTWF0SWNvbk1vZHVsZSxcbiAgICBFbnRpdHlUYWJsZUNvbXBvbmVudCxcbiAgICBNYXRCYWRnZU1vZHVsZSxcbiAgICBBc3luY1BpcGUsXG4gICAgSWdvTGFuZ3VhZ2VNb2R1bGVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBEcmF3Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvKipcbiAgICogVGFibGUgdGVtcGxhdGVcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgdGFibGVUZW1wbGF0ZTogRW50aXR5VGFibGVUZW1wbGF0ZTtcblxuICBwdWJsaWMgZ2VvbWV0cnlUeXBlID0gR2VvbWV0cnlUeXBlOyAvLyBSZWZlcmVuY2UgdG8gdGhlIEdlb21ldHJ5VHlwZSBlbnVtXG4gIEBJbnB1dCgpIG1hcDogSWdvTWFwOyAvLyBNYXAgdG8gZHJhdyBvblxuXG4gIEBJbnB1dCgpXG4gIGdldCBzdG9yZXMoKTogRmVhdHVyZVN0b3JlPEZlYXR1cmVXaXRoRHJhdz5bXSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0b3JlcztcbiAgfVxuICBzZXQgc3RvcmVzKHZhbHVlOiBGZWF0dXJlU3RvcmU8RmVhdHVyZVdpdGhEcmF3PltdKSB7XG4gICAgdGhpcy5fc3RvcmVzID0gdmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBfc3RvcmVzOiBGZWF0dXJlU3RvcmU8RmVhdHVyZVdpdGhEcmF3PltdID0gW107XG5cbiAgQElucHV0KClcbiAgZ2V0IGRyYXdDb250cm9scygpOiBbc3RyaW5nLCBEcmF3Q29udHJvbF1bXSB7XG4gICAgcmV0dXJuIHRoaXMuX2RyYXdDb250cm9scztcbiAgfVxuICBzZXQgZHJhd0NvbnRyb2xzKHZhbHVlOiBbc3RyaW5nLCBEcmF3Q29udHJvbF1bXSkge1xuICAgIHRoaXMuX2RyYXdDb250cm9scyA9IHZhbHVlO1xuICB9XG4gIHByaXZhdGUgX2RyYXdDb250cm9scyA9IFtdO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBhY3RpdmVEcmF3aW5nTGF5ZXIoKTogVmVjdG9yTGF5ZXIge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmVEcmF3aW5nTGF5ZXI7XG4gIH1cbiAgc2V0IGFjdGl2ZURyYXdpbmdMYXllcih2YWx1ZTogVmVjdG9yTGF5ZXIpIHtcbiAgICB0aGlzLl9hY3RpdmVEcmF3aW5nTGF5ZXIgPSB2YWx1ZTtcbiAgfVxuICBwcml2YXRlIF9hY3RpdmVEcmF3aW5nTGF5ZXI6IFZlY3RvckxheWVyO1xuXG4gIEBPdXRwdXQoKSBhY3RpdmVMYXllckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VmVjdG9yTGF5ZXI+KCk7XG4gIEBPdXRwdXQoKSBkcmF3Q29udHJvbHNFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8W3N0cmluZywgRHJhd0NvbnRyb2xdW10+KCk7XG4gIEBPdXRwdXQoKSBsYXllcnNJREV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgQE91dHB1dCgpIGZpbGxDb2xvcjogc3RyaW5nO1xuICBAT3V0cHV0KCkgc3Ryb2tlQ29sb3I6IHN0cmluZztcbiAgQE91dHB1dCgpIHN0cm9rZVdpZHRoOiBudW1iZXI7XG5cbiAgQE91dHB1dCgpIGZvbnRTaXplOiBzdHJpbmc7XG4gIEBPdXRwdXQoKSBmb250U3R5bGU6IHN0cmluZztcblxuICBwdWJsaWMgYWN0aXZlU3RvcmU6IEZlYXR1cmVTdG9yZTxGZWF0dXJlV2l0aERyYXc+O1xuICBwcml2YXRlIGxheWVyQ291bnRlcklEOiBudW1iZXIgPSAwO1xuICBwdWJsaWMgZHJhdyQ6IEJlaGF2aW9yU3ViamVjdDxEcmF3PiA9IG5ldyBCZWhhdmlvclN1YmplY3Qoe30pOyAvLyBPYnNlcnZhYmxlIG9mIGRyYXdcbiAgcHJpdmF0ZSBhY3RpdmVEcmF3aW5nTGF5ZXJTb3VyY2UgPSBuZXcgT2xWZWN0b3JTb3VyY2UoKTtcbiAgcHJpdmF0ZSBhY3RpdmVEcmF3Q29udHJvbDogRHJhd0NvbnRyb2w7XG4gIHByaXZhdGUgZHJhd0VuZCQkOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgZHJhd1NlbGVjdCQkOiBTdWJzY3JpcHRpb247XG4gIHB1YmxpYyBzZWxlY3RlZEZlYXR1cmVzJDogQmVoYXZpb3JTdWJqZWN0PEZlYXR1cmVXaXRoRHJhd1tdPiA9XG4gICAgbmV3IEJlaGF2aW9yU3ViamVjdChbXSk7XG4gIHB1YmxpYyBmaWxsRm9ybTogc3RyaW5nO1xuICBwdWJsaWMgc3Ryb2tlRm9ybTogc3RyaW5nO1xuICBwdWJsaWMgZHJhd0NvbnRyb2xJc0Rpc2FibGVkOiBib29sZWFuID0gdHJ1ZTtcbiAgcHVibGljIGRyYXdDb250cm9sSXNBY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGxhYmVsc0FyZVNob3duOiBib29sZWFuO1xuICBwdWJsaWMgZnJlZWhhbmRNb2RlID0gZmFsc2U7XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9ucyQkOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gIHB1YmxpYyBwb3NpdGlvbjogc3RyaW5nID0gJ2JvdHRvbSc7XG4gIHB1YmxpYyBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xuICBwdWJsaWMgaWNvbnM6IEFycmF5PHN0cmluZz47XG4gIHB1YmxpYyBpY29uOiBzdHJpbmc7XG5cbiAgcHVibGljIHJhZGl1c0Zvcm1Db250cm9sID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgxMDAwKTtcbiAgcHVibGljIG1lYXN1cmVVbml0OiBNZWFzdXJlTGVuZ3RoVW5pdCA9IE1lYXN1cmVMZW5ndGhVbml0Lk1ldGVycztcbiAgcHVibGljIHJhZGl1c0Zvcm1Db250cm9sQ2hhbmdlJCQ6IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHVibGljIHByZWRlZmluZWRSYWRpdXMkOiBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoXG4gICAgdW5kZWZpbmVkXG4gICk7XG4gIHB1YmxpYyByYWRpdXNEcmF3RW5kJDogQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFxuICAgIHVuZGVmaW5lZFxuICApO1xuXG4gIC8qKlxuICAgKiBBdmFpbGFibGUgbWVhc3VyZSB1bml0cyBmb3IgdGhlIG1lYXN1cmUgdHlwZSBnaXZlblxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldCBtZWFzdXJlVW5pdHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbTWVhc3VyZUxlbmd0aFVuaXQuTWV0ZXJzLCBNZWFzdXJlTGVuZ3RoVW5pdC5LaWxvbWV0ZXJzXTtcbiAgfVxuICBwcml2YXRlIG51bWJlck9mRHJhd2luZ3M6IG51bWJlcjtcbiAgcHVibGljIGlzQ3JlYXRpbmdOZXdMYXllcjogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGN1cnJHZW9tZXRyeVR5cGUgPSB0aGlzLmdlb21ldHJ5VHlwZS5Qb2ludCBhcyBhbnk7XG5cbiAgQFZpZXdDaGlsZCgnc2VsZWN0ZWRMYXllcicpIHNlbGVjdDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGxhbmd1YWdlU2VydmljZTogTGFuZ3VhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIGRyYXdTdHlsZVNlcnZpY2U6IERyYXdTdHlsZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICBwcml2YXRlIGRyYXdJY29uU2VydmljZTogRHJhd0ljb25TZXJ2aWNlXG4gICkge1xuICAgIHRoaXMudGFibGVUZW1wbGF0ZSA9IHtcbiAgICAgIHNlbGVjdGlvbjogdHJ1ZSxcbiAgICAgIHNlbGVjdE1hbnk6IHRydWUsXG4gICAgICBzZWxlY3Rpb25DaGVja2JveDogdHJ1ZSxcbiAgICAgIHNvcnQ6IHRydWUsXG4gICAgICBmaXhlZEhlYWRlcjogdHJ1ZSxcbiAgICAgIHRhYmxlSGVpZ2h0OiAnYXV0bycsXG4gICAgICBjb2x1bW5zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnRHJhd2luZycsXG4gICAgICAgICAgdGl0bGU6IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmRyYXcubGFiZWxzJyksXG4gICAgICAgICAgdmFsdWVBY2Nlc3NvcjogKGZlYXR1cmU6IEZlYXR1cmVXaXRoRHJhdykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGZlYXR1cmUucHJvcGVydGllcy5kcmF3O1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdFZGl0aW9uJyxcbiAgICAgICAgICB0aXRsZTogJycsXG4gICAgICAgICAgc29ydDogZmFsc2UsXG4gICAgICAgICAgdmFsdWVBY2Nlc3NvcjogKGZlYXR1cmU6IEZlYXR1cmVXaXRoRHJhdykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVkaXRNb2RlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBpY29uOiAnZWRpdCcsXG4gICAgICAgICAgICAgICAgY29sb3I6ICdwcmltYXJ5JyxcbiAgICAgICAgICAgICAgICBjbGljazogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5lZGl0TGFiZWxEcmF3aW5nKGZlYXR1cmUpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc3R5bGU6ICdtYXQtaWNvbi1idXR0b24nXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0gYXMgRW50aXR5VGFibGVCdXR0b25bXTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlbmRlcmVyOiBFbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyLkJ1dHRvbkdyb3VwXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9O1xuICAgIHRoaXMuYnVpbGRGb3JtKCk7XG4gICAgdGhpcy5maWxsQ29sb3IgPSB0aGlzLmRyYXdTdHlsZVNlcnZpY2UuZ2V0RmlsbENvbG9yKCk7XG4gICAgdGhpcy5zdHJva2VDb2xvciA9IHRoaXMuZHJhd1N0eWxlU2VydmljZS5nZXRTdHJva2VDb2xvcigpO1xuICAgIHRoaXMuc3Ryb2tlV2lkdGggPSB0aGlzLmRyYXdTdHlsZVNlcnZpY2UuZ2V0U3Ryb2tlV2lkdGgoKTtcbiAgICB0aGlzLmxhYmVsc0FyZVNob3duID0gdGhpcy5kcmF3U3R5bGVTZXJ2aWNlLmdldExhYmVsc0FyZVNob3duKCk7XG4gICAgdGhpcy5pY29ucyA9IHRoaXMuZHJhd0ljb25TZXJ2aWNlLmdldEljb25zKCk7XG4gICAgdGhpcy5pY29uID0gdGhpcy5kcmF3U3R5bGVTZXJ2aWNlLmdldEljb24oKTtcblxuICAgIHRoaXMuZm9udFNpemUgPSB0aGlzLmRyYXdTdHlsZVNlcnZpY2UuZ2V0Rm9udFNpemUoKTtcbiAgICB0aGlzLmZvbnRTdHlsZSA9IHRoaXMuZHJhd1N0eWxlU2VydmljZS5nZXRGb250U3R5bGUoKTtcbiAgfVxuXG4gIC8vIEluaXRpYWxpemUgdGhlIHN0b3JlIHRoYXQgd2lsbCBjb250YWluIHRoZSBlbnRpdGllcyBhbmQgY3JlYXRlIHRoZSBEcmF3IGNvbnRyb2xcbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKCF0aGlzLnN0b3Jlcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuYWN0aXZlU3RvcmUgPSBuZXcgRmVhdHVyZVN0b3JlPEZlYXR1cmVXaXRoRHJhdz4oW10sIHtcbiAgICAgICAgbWFwOiB0aGlzLm1hcFxuICAgICAgfSk7XG4gICAgICB0aGlzLmluaXRTdG9yZSgpO1xuICAgICAgdGhpcy5hY3RpdmVEcmF3Q29udHJvbCA9IHRoaXMuY3JlYXRlRHJhd0NvbnRyb2woXG4gICAgICAgIHRoaXMuZmlsbENvbG9yLFxuICAgICAgICB0aGlzLnN0cm9rZUNvbG9yLFxuICAgICAgICB0aGlzLnN0cm9rZVdpZHRoXG4gICAgICApO1xuICAgICAgdGhpcy5hY3RpdmVEcmF3Q29udHJvbC5zZXRHZW9tZXRyeVR5cGUodGhpcy5nZW9tZXRyeVR5cGUuUG9pbnQgYXMgYW55KTtcbiAgICAgIHRoaXMudG9nZ2xlRHJhd0NvbnRyb2woKTtcbiAgICAgIHRoaXMuc3RvcmVzLnB1c2godGhpcy5hY3RpdmVTdG9yZSk7XG4gICAgICB0aGlzLmRyYXdDb250cm9scy5wdXNoKFtcbiAgICAgICAgdGhpcy5hY3RpdmVEcmF3aW5nTGF5ZXIuaWQsXG4gICAgICAgIHRoaXMuYWN0aXZlRHJhd0NvbnRyb2xcbiAgICAgIF0pO1xuICAgICAgdGhpcy5kcmF3Q29udHJvbHNFdmVudC5lbWl0KHRoaXMuZHJhd0NvbnRyb2xzKTtcbiAgICAgIHRoaXMubGF5ZXJzSURFdmVudC5lbWl0KHRoaXMuYWN0aXZlRHJhd2luZ0xheWVyLmlkKTtcbiAgICAgIHRoaXMub25MYXllckNoYW5nZSh0aGlzLmFjdGl2ZURyYXdpbmdMYXllcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWN0aXZlU3RvcmUgPSB0aGlzLnN0b3Jlcy5maW5kKFxuICAgICAgICAoc3RvcmUpID0+IHN0b3JlLmxheWVyLmlkID09PSB0aGlzLmFjdGl2ZURyYXdpbmdMYXllci5pZFxuICAgICAgKTtcbiAgICAgIHRoaXMuYWN0aXZlRHJhd0NvbnRyb2wgPSB0aGlzLmRyYXdDb250cm9scy5maW5kKFxuICAgICAgICAoZGMpID0+IGRjWzBdID09PSB0aGlzLmFjdGl2ZURyYXdpbmdMYXllci5pZFxuICAgICAgKVsxXTtcbiAgICAgIHRoaXMuZGVhY3RpdmF0ZURyYXdDb250cm9sKCk7XG4gICAgICB0aGlzLmFsbExheWVycy5mb3JFYWNoKChsYXllcikgPT4ge1xuICAgICAgICBpZiAobGF5ZXIuaWQgIT09IHRoaXMuYWN0aXZlRHJhd2luZ0xheWVyLmlkKSB7XG4gICAgICAgICAgbGF5ZXIub3BhY2l0eSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHN0b3JlID0gdGhpcy5zdG9yZXMuZmluZCgocykgPT4gcy5sYXllci5pZCA9PT0gbGF5ZXIuaWQpO1xuXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucyQkLnB1c2goXG4gICAgICAgICAgc3RvcmUuc3RhdGVWaWV3XG4gICAgICAgICAgICAubWFueUJ5JCgocmVjb3JkOiBFbnRpdHlSZWNvcmQ8RmVhdHVyZVdpdGhEcmF3PikgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gcmVjb3JkLnN0YXRlLnNlbGVjdGVkID09PSB0cnVlO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5waXBlKGZpcnN0KCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZWNvcmRzOiBFbnRpdHlSZWNvcmQ8RmVhdHVyZVdpdGhEcmF3PltdKSA9PiB7XG4gICAgICAgICAgICAgIHJlY29yZHMuZm9yRWFjaCgocmVjb3JkKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVjb3JkLnN0YXRlLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMkJC5wdXNoKFxuICAgICAgICAgIHN0b3JlLnN0YXRlVmlld1xuICAgICAgICAgICAgLm1hbnlCeSQoKHJlY29yZDogRW50aXR5UmVjb3JkPEZlYXR1cmVXaXRoRHJhdz4pID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlY29yZC5zdGF0ZS5zZWxlY3RlZCA9PT0gdHJ1ZTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgc2tpcCgxKSAvLyBTa2lwIGluaXRpYWwgZW1pc3Npb25cbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlY29yZHM6IEVudGl0eVJlY29yZDxGZWF0dXJlV2l0aERyYXc+W10pID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZlYXR1cmVzJC5uZXh0KFxuICAgICAgICAgICAgICAgIHJlY29yZHMubWFwKChyZWNvcmQpID0+IHJlY29yZC5lbnRpdHkpXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucyQkLnB1c2goXG4gICAgICAgICAgc3RvcmUuY291bnQkLnN1YnNjcmliZSgoY250KSA9PiB7XG4gICAgICAgICAgICBjbnQgPj0gMVxuICAgICAgICAgICAgICA/ICh0aGlzLmFjdGl2ZVN0b3JlLmxheWVyLm9wdGlvbnMuc2hvd0luTGF5ZXJMaXN0ID0gdHJ1ZSlcbiAgICAgICAgICAgICAgOiAodGhpcy5hY3RpdmVTdG9yZS5sYXllci5vcHRpb25zLnNob3dJbkxheWVyTGlzdCA9IGZhbHNlKTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICB0aGlzLm9uTGF5ZXJDaGFuZ2UodGhpcy5hY3RpdmVEcmF3aW5nTGF5ZXIpO1xuICAgIH1cblxuICAgIHRoaXMucmFkaXVzRm9ybUNvbnRyb2xDaGFuZ2UkJCA9XG4gICAgICB0aGlzLnJhZGl1c0Zvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZURyYXdDb250cm9sLmlzcHJlZGVmaW5lZFJhZGl1cyQuZ2V0VmFsdWUoKSkge1xuICAgICAgICAgIHRoaXMuY2hhbmdlUmFkaXVzKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHRoZSBkcmF3aW5nIGxheWVyIGFuZCB0aGUgaW50ZXJhY3Rpb25zXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5hbGxMYXllcnMuZm9yRWFjaCgobGF5ZXIpID0+IChsYXllci5vcGFjaXR5ID0gMSkpO1xuICAgIHRoaXMuYWN0aXZlU3RvcmUuc3RhdGUudXBkYXRlQWxsKHsgc2VsZWN0ZWQ6IGZhbHNlIH0pO1xuICAgIHRoaXMuZGVhY3RpdmF0ZURyYXdDb250cm9sKCk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zJCQubWFwKChzKSA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICAgIHRoaXMucmFkaXVzRm9ybUNvbnRyb2xDaGFuZ2UkJC51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIERyYXcgQ29udHJvbFxuICAgKiBAcGFyYW0gZmlsbENvbG9yIHRoZSBmaWxsIGNvbG9yXG4gICAqIEBwYXJhbSBzdHJva2VDb2xvciB0aGUgc3Ryb2tlIGNvbG9yXG4gICAqIEBwYXJhbSBzdHJva2VXaWR0aCB0aGUgc3Ryb2tlIHdpZHRoXG4gICAqIEByZXR1cm5zIGEgRHJhdyBDb250cm9sXG4gICAqL1xuICBjcmVhdGVEcmF3Q29udHJvbChcbiAgICBmaWxsQ29sb3I/OiBzdHJpbmcsXG4gICAgc3Ryb2tlQ29sb3I/OiBzdHJpbmcsXG4gICAgc3Ryb2tlV2lkdGg/OiBudW1iZXJcbiAgKSB7XG4gICAgY29uc3QgYWN0aXZlRHJhd0NvbnRyb2wgPSBuZXcgRHJhd0NvbnRyb2woe1xuICAgICAgZ2VvbWV0cnlUeXBlOiB1bmRlZmluZWQsXG4gICAgICBkcmF3aW5nTGF5ZXJTb3VyY2U6IHRoaXMuYWN0aXZlRHJhd2luZ0xheWVyU291cmNlLFxuICAgICAgZHJhd2luZ0xheWVyU3R5bGU6IG5ldyBPbFN0eWxlLlN0eWxlKHt9KSxcbiAgICAgIGludGVyYWN0aW9uU3R5bGU6IGNyZWF0ZUludGVyYWN0aW9uU3R5bGUoXG4gICAgICAgIGZpbGxDb2xvcixcbiAgICAgICAgc3Ryb2tlQ29sb3IsXG4gICAgICAgIHN0cm9rZVdpZHRoXG4gICAgICApXG4gICAgfSk7XG4gICAgcmV0dXJuIGFjdGl2ZURyYXdDb250cm9sO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3JlIGluaXRpYWxpemF0aW9uLCBpbmNsdWRpbmcgZHJhd2luZyBsYXllciBjcmVhdGlvblxuICAgKi9cblxuICBwcml2YXRlIGluaXRTdG9yZShuZXdUaXRsZT86IHN0cmluZywgaXNOZXdMYXllcj86IGJvb2xlYW4pIHtcbiAgICB0aGlzLmNyZWF0ZUxheWVyKG5ld1RpdGxlLCBpc05ld0xheWVyKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMkJC5wdXNoKFxuICAgICAgdGhpcy5hY3RpdmVTdG9yZS5zdGF0ZVZpZXdcbiAgICAgICAgLm1hbnlCeSQoKHJlY29yZDogRW50aXR5UmVjb3JkPEZlYXR1cmVXaXRoRHJhdz4pID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVjb3JkLnN0YXRlLnNlbGVjdGVkID09PSB0cnVlO1xuICAgICAgICB9KVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBza2lwKDEpIC8vIFNraXAgaW5pdGlhbCBlbWlzc2lvblxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlY29yZHM6IEVudGl0eVJlY29yZDxGZWF0dXJlV2l0aERyYXc+W10pID0+IHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLm5leHQocmVjb3Jkcy5tYXAoKHJlY29yZCkgPT4gcmVjb3JkLmVudGl0eSkpO1xuICAgICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMkJC5wdXNoKFxuICAgICAgdGhpcy5hY3RpdmVTdG9yZS5jb3VudCQuc3Vic2NyaWJlKChjbnQpID0+IHtcbiAgICAgICAgY250ID49IDFcbiAgICAgICAgICA/ICh0aGlzLmFjdGl2ZVN0b3JlLmxheWVyLm9wdGlvbnMuc2hvd0luTGF5ZXJMaXN0ID0gdHJ1ZSlcbiAgICAgICAgICA6ICh0aGlzLmFjdGl2ZVN0b3JlLmxheWVyLm9wdGlvbnMuc2hvd0luTGF5ZXJMaXN0ID0gZmFsc2UpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW4gdGhlIHN0eWxlIG1vZGFsIGRpYWxvZyBib3hcbiAgICovXG4gIG9wZW5TdHlsZU1vZGFsRGlhbG9nKCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gb3BlbiB0aGUgZGlhbG9nIGJveCB1c2VkIHRvIHN0eWxlIGZlYXR1cmVzXG4gICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFN0eWxlTW9kYWxEcmF3aW5nQ29tcG9uZW50LCB7XG4gICAgICAgIGRpc2FibGVDbG9zZTogZmFsc2UsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBmZWF0dXJlczogdGhpcy5zZWxlY3RlZEZlYXR1cmVzJC5nZXRWYWx1ZSgpLFxuICAgICAgICAgIGljb25zOiB0aGlzLmljb25zLFxuICAgICAgICAgIGljb246IHRoaXMuaWNvblxuICAgICAgICB9LFxuICAgICAgICBhdXRvRm9jdXM6IGZhbHNlXG4gICAgICB9KTtcblxuICAgICAgLy8gd2hlbiBkaWFsb2cgYm94IGlzIGNsb3NlZCwgZ2V0IGxhYmVsIGFuZCBzZXQgaXQgdG8gZ2VvbWV0cnlcbiAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgoZGF0YTogU3R5bGVNb2RhbERhdGEpID0+IHtcbiAgICAgICAgLy8gY2hlY2tzIGlmIHRoZSB1c2VyIGNsaWNrZWQgb2tcbiAgICAgICAgaWYgKGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5jb25maXJtRmxhZykge1xuICAgICAgICAgIHRoaXMub25Gb250Q2hhbmdlKHRoaXMubGFiZWxzQXJlU2hvd24sIGRhdGEuZm9udFNpemUsIGRhdGEuZm9udFN0eWxlKTtcbiAgICAgICAgICB0aGlzLm9uQ29sb3JDaGFuZ2UoXG4gICAgICAgICAgICB0aGlzLmxhYmVsc0FyZVNob3duLFxuICAgICAgICAgICAgdGhpcy5pY29uID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICAgICAgZGF0YS5maWxsQ29sb3IsXG4gICAgICAgICAgICBkYXRhLnN0cm9rZUNvbG9yXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLm9uT2Zmc2V0TGFiZWxDaGFuZ2UoXG4gICAgICAgICAgICB0aGlzLmxhYmVsc0FyZVNob3duLFxuICAgICAgICAgICAgZGF0YS5vZmZzZXRYLFxuICAgICAgICAgICAgZGF0YS5vZmZzZXRZXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSwgMjUwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVuIGEgZGlhbG9nIGJveCB0byBlbnRlciBsYWJlbCBhbmQgZG8gc29tZXRoaW5nXG4gICAqIEBwYXJhbSBvbEdlb21ldHJ5IGdlb21ldHJ5IGF0IGRyYXcgZW5kIG9yIHNlbGVjdGVkIGdlb21ldHJ5XG4gICAqIEBwYXJhbSBkcmF3RW5kIGV2ZW50IGZpcmVkIGF0IGRyYXdFbmQ/XG4gICAqL1xuICBwcml2YXRlIG9wZW5EcmF3RGlhbG9nKG9sR2VvbWV0cnksIGlzRHJhd0VuZDogYm9vbGVhbikge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gb3BlbiB0aGUgZGlhbG9nIGJveCB1c2VkIHRvIGVudGVyIGxhYmVsXG4gICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKERyYXdQb3B1cENvbXBvbmVudCwge1xuICAgICAgICBkaXNhYmxlQ2xvc2U6IGZhbHNlLFxuICAgICAgICBkYXRhOiB7IG9sR2VvbWV0cnk6IG9sR2VvbWV0cnksIG1hcDogdGhpcy5tYXAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIHdoZW4gZGlhbG9nIGJveCBpcyBjbG9zZWQsIGdldCBsYWJlbCBhbmQgc2V0IGl0IHRvIGdlb21ldHJ5XG4gICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAvLyBjaGVja3MgaWYgdGhlIHVzZXIgY2xpY2tlZCBva1xuICAgICAgICBpZiAoZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlLmNvbmZpcm1GbGFnKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVMYWJlbE9mT2xHZW9tZXRyeShvbEdlb21ldHJ5LCByZXN1bHQubGFiZWwpO1xuICAgICAgICAgIHRoaXMudXBkYXRlTGFiZWxUeXBlKFxuICAgICAgICAgICAgb2xHZW9tZXRyeSxcbiAgICAgICAgICAgIGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5sYWJlbEZsYWdcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMudXBkYXRlTWVhc3VyZVVuaXQob2xHZW9tZXRyeSwgcmVzdWx0Lm1lYXN1cmVVbml0KTtcblxuICAgICAgICAgIGlmICghKG9sR2VvbWV0cnkgaW5zdGFuY2VvZiBPbEZlYXR1cmUpKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUZvbnRTaXplQW5kU3R5bGUob2xHZW9tZXRyeSwgJzE1JywgRm9udFR5cGUuQXJpYWwpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVGaWxsQW5kU3Ryb2tlQ29sb3IoXG4gICAgICAgICAgICAgIG9sR2VvbWV0cnksXG4gICAgICAgICAgICAgICdyZ2JhKDI1NSwyNTUsMjU1LDAuNCknLFxuICAgICAgICAgICAgICAncmdiYSgxNDMsNyw3LDEpJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlT2Zmc2V0KFxuICAgICAgICAgICAgICBvbEdlb21ldHJ5LFxuICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICBvbEdlb21ldHJ5IGluc3RhbmNlb2YgT2xQb2ludCA/IC0xNSA6IDBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaXNEcmF3RW5kXG4gICAgICAgICAgICA/IHRoaXMub25EcmF3RW5kKG9sR2VvbWV0cnkpXG4gICAgICAgICAgICA6IHRoaXMub25TZWxlY3REcmF3KG9sR2VvbWV0cnksIHJlc3VsdC5sYWJlbCwgW1xuICAgICAgICAgICAgICAgIGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5sYWJlbEZsYWcsXG4gICAgICAgICAgICAgICAgcmVzdWx0Lm1lYXN1cmVVbml0XG4gICAgICAgICAgICAgIF0pO1xuICAgICAgICAgIHRoaXMudXBkYXRlSGVpZ2h0VGFibGUoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBkZWxldGVzIHRoZSBmZWF0dXJlXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHRoaXMuYWN0aXZlRHJhd2luZ0xheWVyU291cmNlXG4gICAgICAgICAgICAuZ2V0RmVhdHVyZXMoKVxuICAgICAgICAgICAgLmZvckVhY2goKGRyYXdpbmdMYXllckZlYXR1cmUpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZ2VvbWV0cnkgPSBkcmF3aW5nTGF5ZXJGZWF0dXJlLmdldEdlb21ldHJ5KCkgYXMgYW55O1xuICAgICAgICAgICAgICBpZiAob2xHZW9tZXRyeSA9PT0gZ2VvbWV0cnkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZURyYXdpbmdMYXllclNvdXJjZS5yZW1vdmVGZWF0dXJlKFxuICAgICAgICAgICAgICAgICAgZHJhd2luZ0xheWVyRmVhdHVyZVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCAyNTApO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIHRoZSBkcmF3IHNvdXJjZSBhbmQgdHJhY2sgdGhlIGdlb21ldHJ5IGJlaW5nIGRyYXdcbiAgICogQHBhcmFtIG9sR2VvbWV0cnkgT2wgbGluZXN0cmluZyBvciBwb2x5Z29uXG4gICAqL1xuICBwcml2YXRlIG9uRHJhd0VuZChvbEdlb21ldHJ5OiBPbEdlb21ldHJ5LCByYWRpdXM/OiBudW1iZXIpIHtcbiAgICB0aGlzLmFkZEZlYXR1cmVUb1N0b3JlKG9sR2VvbWV0cnksIHJhZGl1cyk7XG4gICAgdGhpcy5jbGVhckxhYmVsc09mT2xHZW9tZXRyeShvbEdlb21ldHJ5KTtcbiAgICB0aGlzLmFjdGl2ZVN0b3JlLmxheWVyLm9sLmdldFNvdXJjZSgpLnJlZnJlc2goKTtcbiAgfVxuXG4gIHByaXZhdGUgb25Nb2RpZnlEcmF3KG9sR2VvbWV0cnkpIHtcbiAgICBjb25zdCBlbnRpdGllcyA9IHRoaXMuYWN0aXZlU3RvcmUuYWxsKCk7XG5cbiAgICBlbnRpdGllcy5mb3JFYWNoKChlbnRpdHkpID0+IHtcbiAgICAgIGNvbnN0IGVudGl0eUlkID0gZW50aXR5LnByb3BlcnRpZXMuaWQ7XG4gICAgICBjb25zdCBvbEdlb21ldHJ5SWQgPSBvbEdlb21ldHJ5Lm9sX3VpZDtcblxuICAgICAgaWYgKGVudGl0eUlkID09PSBvbEdlb21ldHJ5SWQpIHtcbiAgICAgICAgaWYgKGVudGl0eS5wcm9wZXJ0aWVzLmxhYmVsVHlwZSA9PT0gTGFiZWxUeXBlLkNvb3JkaW5hdGVzKSB7XG4gICAgICAgICAgbGV0IGxvbmdMYXQgPSBERHRvRE1TKFxuICAgICAgICAgICAgW2VudGl0eS5wcm9wZXJ0aWVzLmxvbmdpdHVkZSwgZW50aXR5LnByb3BlcnRpZXMubGF0aXR1ZGVdLFxuICAgICAgICAgICAgZW50aXR5LnByb3BlcnRpZXMubWVhc3VyZVVuaXQgYXMgQ29vcmRpbmF0ZXNVbml0XG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUxhYmVsT2ZPbEdlb21ldHJ5KFxuICAgICAgICAgICAgb2xHZW9tZXRyeSxcbiAgICAgICAgICAgICcoJyArIGxvbmdMYXRbMV0gKyAnLCAnICsgbG9uZ0xhdFswXSArICcpJ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoZW50aXR5LnByb3BlcnRpZXMubGFiZWxUeXBlID09PSBMYWJlbFR5cGUuTGVuZ3RoKSB7XG4gICAgICAgICAgaWYgKG9sR2VvbWV0cnkgaW5zdGFuY2VvZiBPbENpcmNsZSkge1xuICAgICAgICAgICAgbGV0IGNpcmN1bGFyUG9seWdvbiA9IGZyb21DaXJjbGUob2xHZW9tZXRyeSwgMTAwMDApO1xuICAgICAgICAgICAgY29uc3QgcmFkaXVzID0gbWV0ZXJzVG9Vbml0KFxuICAgICAgICAgICAgICB0aGlzLmdldFJhZGl1cyhjaXJjdWxhclBvbHlnb24pLFxuICAgICAgICAgICAgICBlbnRpdHkucHJvcGVydGllcy5tZWFzdXJlVW5pdCBhcyBNZWFzdXJlTGVuZ3RoVW5pdFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IHVuaXQgPVxuICAgICAgICAgICAgICBNZWFzdXJlTGVuZ3RoVW5pdEFiYnJldmlhdGlvbltlbnRpdHkucHJvcGVydGllcy5tZWFzdXJlVW5pdF07XG4gICAgICAgICAgICBjb25zdCByYWRpdXNMYWJlbCA9XG4gICAgICAgICAgICAgICdSOiAnICsgcmFkaXVzLnRvRml4ZWQoMikudG9TdHJpbmcoKSArICcgJyArIHVuaXQ7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUxhYmVsT2ZPbEdlb21ldHJ5KG9sR2VvbWV0cnksIHJhZGl1c0xhYmVsKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG9sR2VvbWV0cnlMZW5ndGggPSBtZWFzdXJlT2xHZW9tZXRyeUxlbmd0aChcbiAgICAgICAgICAgICAgb2xHZW9tZXRyeSxcbiAgICAgICAgICAgICAgdGhpcy5tYXAub2wuZ2V0VmlldygpLmdldFByb2plY3Rpb24oKS5nZXRDb2RlKClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBsZXQgbWVhc3VyZVVuaXQ6IGFueTtcbiAgICAgICAgICAgIGNvbnN0IHRlbXA6IE1lYXN1cmVMZW5ndGhVbml0ID0gZW50aXR5LnByb3BlcnRpZXNcbiAgICAgICAgICAgICAgLm1lYXN1cmVVbml0IGFzIE1lYXN1cmVMZW5ndGhVbml0O1xuICAgICAgICAgICAgbWVhc3VyZVVuaXQgPVxuICAgICAgICAgICAgICBNZWFzdXJlTGVuZ3RoVW5pdEFiYnJldmlhdGlvbltlbnRpdHkucHJvcGVydGllcy5tZWFzdXJlVW5pdF07XG4gICAgICAgICAgICBvbEdlb21ldHJ5TGVuZ3RoID0gbWV0ZXJzVG9Vbml0KG9sR2VvbWV0cnlMZW5ndGgsIHRlbXApO1xuICAgICAgICAgICAgbGV0IGxlbmd0aExhYmVsID1cbiAgICAgICAgICAgICAgb2xHZW9tZXRyeSBpbnN0YW5jZW9mIFBvbHlnb25cbiAgICAgICAgICAgICAgICA/ICdQOiAnICtcbiAgICAgICAgICAgICAgICAgIG9sR2VvbWV0cnlMZW5ndGgudG9GaXhlZCgyKS50b1N0cmluZygpICtcbiAgICAgICAgICAgICAgICAgICcgJyArXG4gICAgICAgICAgICAgICAgICBtZWFzdXJlVW5pdFxuICAgICAgICAgICAgICAgIDogb2xHZW9tZXRyeUxlbmd0aC50b0ZpeGVkKDIpLnRvU3RyaW5nKCkgKyAnICcgKyBtZWFzdXJlVW5pdDtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTGFiZWxPZk9sR2VvbWV0cnkob2xHZW9tZXRyeSwgbGVuZ3RoTGFiZWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChlbnRpdHkucHJvcGVydGllcy5sYWJlbFR5cGUgPT09IExhYmVsVHlwZS5BcmVhKSB7XG4gICAgICAgICAgaWYgKG9sR2VvbWV0cnkgaW5zdGFuY2VvZiBPbENpcmNsZSkge1xuICAgICAgICAgICAgbGV0IGNpcmN1bGFyUG9seWdvbiA9IGZyb21DaXJjbGUob2xHZW9tZXRyeSwgMTAwMDApO1xuICAgICAgICAgICAgbGV0IGNpcmNsZUFyZWEgPSBtZWFzdXJlT2xHZW9tZXRyeUFyZWEoXG4gICAgICAgICAgICAgIGNpcmN1bGFyUG9seWdvbixcbiAgICAgICAgICAgICAgdGhpcy5tYXAub2wuZ2V0VmlldygpLmdldFByb2plY3Rpb24oKS5nZXRDb2RlKClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCB1bml0ID1cbiAgICAgICAgICAgICAgTWVhc3VyZUFyZWFVbml0QWJicmV2aWF0aW9uW2VudGl0eS5wcm9wZXJ0aWVzLm1lYXN1cmVVbml0XTtcbiAgICAgICAgICAgIGNvbnN0IHRlbXA6IE1lYXN1cmVBcmVhVW5pdCA9IGVudGl0eS5wcm9wZXJ0aWVzXG4gICAgICAgICAgICAgIC5tZWFzdXJlVW5pdCBhcyBNZWFzdXJlQXJlYVVuaXQ7XG4gICAgICAgICAgICBjaXJjbGVBcmVhID0gc3F1YXJlTWV0ZXJzVG9Vbml0KGNpcmNsZUFyZWEsIHRlbXApO1xuICAgICAgICAgICAgY29uc3QgYXJlYUxhYmVsID0gY2lyY2xlQXJlYS50b0ZpeGVkKDIpLnRvU3RyaW5nKCkgKyAnICcgKyB1bml0O1xuICAgICAgICAgICAgdGhpcy51cGRhdGVMYWJlbE9mT2xHZW9tZXRyeShvbEdlb21ldHJ5LCBhcmVhTGFiZWwpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgb2xHZW9tZXRyeUFyZWEgPSBtZWFzdXJlT2xHZW9tZXRyeUFyZWEoXG4gICAgICAgICAgICAgIG9sR2VvbWV0cnksXG4gICAgICAgICAgICAgIHRoaXMubWFwLm9sLmdldFZpZXcoKS5nZXRQcm9qZWN0aW9uKCkuZ2V0Q29kZSgpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbGV0IG1lYXN1cmVVbml0OiBhbnk7XG4gICAgICAgICAgICBjb25zdCB0ZW1wOiBNZWFzdXJlQXJlYVVuaXQgPSBlbnRpdHkucHJvcGVydGllc1xuICAgICAgICAgICAgICAubWVhc3VyZVVuaXQgYXMgTWVhc3VyZUFyZWFVbml0O1xuICAgICAgICAgICAgbWVhc3VyZVVuaXQgPVxuICAgICAgICAgICAgICBNZWFzdXJlQXJlYVVuaXRBYmJyZXZpYXRpb25bZW50aXR5LnByb3BlcnRpZXMubWVhc3VyZVVuaXRdO1xuICAgICAgICAgICAgb2xHZW9tZXRyeUFyZWEgPSBzcXVhcmVNZXRlcnNUb1VuaXQob2xHZW9tZXRyeUFyZWEsIHRlbXApO1xuICAgICAgICAgICAgY29uc3QgbGVuZ3RoTGFiZWwgPVxuICAgICAgICAgICAgICBvbEdlb21ldHJ5QXJlYS50b0ZpeGVkKDIpLnRvU3RyaW5nKCkgKyAnICcgKyBtZWFzdXJlVW5pdDtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTGFiZWxPZk9sR2VvbWV0cnkob2xHZW9tZXRyeSwgbGVuZ3RoTGFiZWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUxhYmVsT2ZPbEdlb21ldHJ5KG9sR2VvbWV0cnksIGVudGl0eS5wcm9wZXJ0aWVzLmRyYXcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51cGRhdGVMYWJlbFR5cGUob2xHZW9tZXRyeSwgZW50aXR5LnByb3BlcnRpZXMubGFiZWxUeXBlKTtcbiAgICAgICAgdGhpcy51cGRhdGVNZWFzdXJlVW5pdChvbEdlb21ldHJ5LCBlbnRpdHkucHJvcGVydGllcy5tZWFzdXJlVW5pdCk7XG4gICAgICAgIHRoaXMudXBkYXRlRm9udFNpemVBbmRTdHlsZShcbiAgICAgICAgICBvbEdlb21ldHJ5LFxuICAgICAgICAgIGVudGl0eS5wcm9wZXJ0aWVzLmZvbnRTdHlsZS5zcGxpdCgnICcpWzBdLnJlcGxhY2UoJ3B4JywgJycpLFxuICAgICAgICAgIGVudGl0eS5wcm9wZXJ0aWVzLmZvbnRTdHlsZS5zdWJzdHJpbmcoXG4gICAgICAgICAgICBlbnRpdHkucHJvcGVydGllcy5mb250U3R5bGUuaW5kZXhPZignICcpICsgMVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy51cGRhdGVGaWxsQW5kU3Ryb2tlQ29sb3IoXG4gICAgICAgICAgb2xHZW9tZXRyeSxcbiAgICAgICAgICBlbnRpdHkucHJvcGVydGllcy5kcmF3aW5nU3R5bGUuZmlsbCxcbiAgICAgICAgICBlbnRpdHkucHJvcGVydGllcy5kcmF3aW5nU3R5bGUuc3Ryb2tlXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMudXBkYXRlT2Zmc2V0KFxuICAgICAgICAgIG9sR2VvbWV0cnksXG4gICAgICAgICAgZW50aXR5LnByb3BlcnRpZXMub2Zmc2V0WCxcbiAgICAgICAgICBlbnRpdHkucHJvcGVydGllcy5vZmZzZXRZXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucmVwbGFjZUZlYXR1cmVJblN0b3JlKGVudGl0eSwgb2xHZW9tZXRyeSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG9uU2VsZWN0RHJhdyhcbiAgICBvbEZlYXR1cmU6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PixcbiAgICBsYWJlbDogc3RyaW5nLFxuICAgIGxhYmVsVHlwZUFuZFVuaXQ/XG4gICkge1xuICAgIGNvbnN0IGVudGl0aWVzID0gdGhpcy5hY3RpdmVTdG9yZS5hbGwoKTtcblxuICAgIGNvbnN0IG9sR2VvbWV0cnkgPSBvbEZlYXR1cmUuZ2V0R2VvbWV0cnkoKSBhcyBhbnk7XG4gICAgb2xHZW9tZXRyeS5vbF91aWQgPSBvbEZlYXR1cmUuZ2V0KCdpZCcpO1xuXG4gICAgY29uc3Qgb2xHZW9tZXRyeUNvb3JkaW5hdGVzID0gSlNPTi5zdHJpbmdpZnkoXG4gICAgICBvbEdlb21ldHJ5LmdldENvb3JkaW5hdGVzKClbMF1cbiAgICApO1xuXG4gICAgZW50aXRpZXMuZm9yRWFjaCgoZW50aXR5KSA9PiB7XG4gICAgICBjb25zdCBlbnRpdHlDb29yZGluYXRlcyA9IEpTT04uc3RyaW5naWZ5KGVudGl0eS5nZW9tZXRyeS5jb29yZGluYXRlc1swXSk7XG4gICAgICBpZiAob2xHZW9tZXRyeUNvb3JkaW5hdGVzID09PSBlbnRpdHlDb29yZGluYXRlcykge1xuICAgICAgICBjb25zdCBmb250U2l6ZSA9IG9sRmVhdHVyZVxuICAgICAgICAgIC5nZXQoJ2ZvbnRTdHlsZScpXG4gICAgICAgICAgLnNwbGl0KCcgJylbMF1cbiAgICAgICAgICAucmVwbGFjZSgncHgnLCAnJyk7XG4gICAgICAgIGNvbnN0IGZvbnRTdHlsZSA9IG9sRmVhdHVyZVxuICAgICAgICAgIC5nZXQoJ2ZvbnRTdHlsZScpXG4gICAgICAgICAgLnN1YnN0cmluZyhvbEZlYXR1cmUuZ2V0KCdmb250U3R5bGUnKS5pbmRleE9mKCcgJykgKyAxKTtcblxuICAgICAgICBjb25zdCBmaWxsQ29sb3IgPSBvbEZlYXR1cmUuZ2V0KCdkcmF3aW5nU3R5bGUnKS5maWxsO1xuICAgICAgICBjb25zdCBzdHJva2VDb2xvciA9IG9sRmVhdHVyZS5nZXQoJ2RyYXdpbmdTdHlsZScpLnN0cm9rZTtcblxuICAgICAgICBjb25zdCBvZmZzZXRYID0gb2xGZWF0dXJlLmdldCgnb2Zmc2V0WCcpO1xuICAgICAgICBjb25zdCBvZmZzZXRZID0gb2xGZWF0dXJlLmdldCgnb2Zmc2V0WScpO1xuXG4gICAgICAgIGNvbnN0IHJhZDogbnVtYmVyID0gZW50aXR5LnByb3BlcnRpZXMucmFkXG4gICAgICAgICAgPyBlbnRpdHkucHJvcGVydGllcy5yYWRcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy51cGRhdGVMYWJlbE9mT2xHZW9tZXRyeShvbEdlb21ldHJ5LCBsYWJlbCk7XG4gICAgICAgIHRoaXMudXBkYXRlRm9udFNpemVBbmRTdHlsZShvbEdlb21ldHJ5LCBmb250U2l6ZSwgZm9udFN0eWxlKTtcbiAgICAgICAgdGhpcy51cGRhdGVGaWxsQW5kU3Ryb2tlQ29sb3Iob2xHZW9tZXRyeSwgZmlsbENvbG9yLCBzdHJva2VDb2xvcik7XG4gICAgICAgIHRoaXMudXBkYXRlT2Zmc2V0KG9sR2VvbWV0cnksIG9mZnNldFgsIG9mZnNldFkpO1xuICAgICAgICB0aGlzLnVwZGF0ZUxhYmVsVHlwZShvbEdlb21ldHJ5LCBsYWJlbFR5cGVBbmRVbml0WzBdKTtcbiAgICAgICAgdGhpcy51cGRhdGVNZWFzdXJlVW5pdChvbEdlb21ldHJ5LCBsYWJlbFR5cGVBbmRVbml0WzFdKTtcbiAgICAgICAgdGhpcy5yZXBsYWNlRmVhdHVyZUluU3RvcmUoZW50aXR5LCBvbEdlb21ldHJ5LCByYWQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIGZlYXR1cmUgd2l0aCBkcmF3IGxhYmVsIHRvIHRoZSBzdG9yZS4gVGhlIGxvYWRpbmcgc3RyYWdlZ3kgb2YgdGhlIHN0b3JlXG4gICAqIHdpbGwgdHJpZ2dlciBhbmQgYWRkIHRoZSBmZWF0dXJlIHRvIHRoZSBtYXAuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSBhZGRGZWF0dXJlVG9TdG9yZShcbiAgICBvbEdlb21ldHJ5LFxuICAgIHJhZGl1cz86IG51bWJlcixcbiAgICBmZWF0dXJlPzogRmVhdHVyZVdpdGhEcmF3XG4gICkge1xuICAgIGxldCByYWQ6IG51bWJlcjtcbiAgICBsZXQgY2VudGVyNDMyNjogQXJyYXk8bnVtYmVyPjtcbiAgICBsZXQgcG9pbnQ0MzI2OiBBcnJheTxudW1iZXI+O1xuICAgIGxldCBsb240MzI2OiBudW1iZXI7XG4gICAgbGV0IGxhdDQzMjY6IG51bWJlcjtcblxuICAgIGNvbnN0IGZlYXR1cmVJZCA9IGZlYXR1cmUgPyBmZWF0dXJlLnByb3BlcnRpZXMuaWQgOiBvbEdlb21ldHJ5Lm9sX3VpZDtcbiAgICBjb25zdCBwcm9qZWN0aW9uID0gdGhpcy5tYXAub2wuZ2V0VmlldygpLmdldFByb2plY3Rpb24oKTtcblxuICAgIGNvbnN0IGdlb21ldHJ5ID0gbmV3IE9sR2VvSlNPTigpLndyaXRlR2VvbWV0cnlPYmplY3Qob2xHZW9tZXRyeSwge1xuICAgICAgZmVhdHVyZVByb2plY3Rpb246IHByb2plY3Rpb24sXG4gICAgICBkYXRhUHJvamVjdGlvbjogcHJvamVjdGlvblxuICAgIH0pIGFzIGFueTtcblxuICAgIGlmIChvbEdlb21ldHJ5IGluc3RhbmNlb2YgT2xDaXJjbGUgfHwgcmFkaXVzKSB7XG4gICAgICBpZiAocmFkaXVzKSB7XG4gICAgICAgIHJhZCA9IHJhZGl1cztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGdlb21ldHJ5LnR5cGUgPSAnUG9pbnQnO1xuICAgICAgICBnZW9tZXRyeS5jb29yZGluYXRlcyA9IG9sR2VvbWV0cnkuZ2V0Q2VudGVyKCk7XG4gICAgICAgIGNvbnN0IGV4dGVudDQzMjYgPSB0cmFuc2Zvcm0oXG4gICAgICAgICAgW1xuICAgICAgICAgICAgb2xHZW9tZXRyeS5nZXRGbGF0Q29vcmRpbmF0ZXMoKVsyXSxcbiAgICAgICAgICAgIG9sR2VvbWV0cnkuZ2V0RmxhdENvb3JkaW5hdGVzKClbM11cbiAgICAgICAgICBdLFxuICAgICAgICAgIHByb2plY3Rpb24sXG4gICAgICAgICAgJ0VQU0c6NDMyNidcbiAgICAgICAgKTtcbiAgICAgICAgY2VudGVyNDMyNiA9IHRyYW5zZm9ybShcbiAgICAgICAgICBbXG4gICAgICAgICAgICBvbEdlb21ldHJ5LmdldEZsYXRDb29yZGluYXRlcygpWzBdLFxuICAgICAgICAgICAgb2xHZW9tZXRyeS5nZXRGbGF0Q29vcmRpbmF0ZXMoKVsxXVxuICAgICAgICAgIF0sXG4gICAgICAgICAgcHJvamVjdGlvbixcbiAgICAgICAgICAnRVBTRzo0MzI2J1xuICAgICAgICApO1xuICAgICAgICBsb240MzI2ID0gY2VudGVyNDMyNlswXTtcbiAgICAgICAgbGF0NDMyNiA9IGNlbnRlcjQzMjZbMV07XG4gICAgICAgIHJhZCA9IGdldERpc3RhbmNlKGNlbnRlcjQzMjYsIGV4dGVudDQzMjYpO1xuICAgICAgICB0aGlzLnJhZGl1c0Zvcm1Db250cm9sLnNldFZhbHVlKE1hdGgucm91bmQocmFkKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLmFjdGl2ZURyYXdDb250cm9sLnJhZGl1c0RyYXdFbmQkLmdldFZhbHVlKCkpIHtcbiAgICAgIHJhZCA9IHRoaXMuYWN0aXZlRHJhd0NvbnRyb2wucmFkaXVzRHJhd0VuZCQuZ2V0VmFsdWUoKTtcbiAgICB9XG5cbiAgICBpZiAob2xHZW9tZXRyeSBpbnN0YW5jZW9mIE9sUG9pbnQpIHtcbiAgICAgIHBvaW50NDMyNiA9IHRyYW5zZm9ybShcbiAgICAgICAgb2xHZW9tZXRyeS5nZXRGbGF0Q29vcmRpbmF0ZXMoKSxcbiAgICAgICAgcHJvamVjdGlvbixcbiAgICAgICAgJ0VQU0c6NDMyNidcbiAgICAgICk7XG4gICAgICBsb240MzI2ID0gcG9pbnQ0MzI2WzBdO1xuICAgICAgbGF0NDMyNiA9IHBvaW50NDMyNlsxXTtcbiAgICB9XG5cbiAgICB0aGlzLmFjdGl2ZVN0b3JlLnVwZGF0ZSh7XG4gICAgICB0eXBlOiBGRUFUVVJFLFxuICAgICAgZ2VvbWV0cnksXG4gICAgICBwcm9qZWN0aW9uOiBwcm9qZWN0aW9uLmdldENvZGUoKSxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgaWQ6IGZlYXR1cmVJZCxcbiAgICAgICAgZHJhdzogb2xHZW9tZXRyeS5nZXQoJ19sYWJlbCcpLFxuICAgICAgICBsb25naXR1ZGU6IGxvbjQzMjYgPyBsb240MzI2IDogbnVsbCxcbiAgICAgICAgbGF0aXR1ZGU6IGxhdDQzMjYgPyBsYXQ0MzI2IDogbnVsbCxcbiAgICAgICAgcmFkOiByYWQgPyByYWQgOiBudWxsLFxuICAgICAgICBmb250U3R5bGU6IG9sR2VvbWV0cnkuZ2V0KCdmb250U3R5bGVfJyksXG4gICAgICAgIGRyYXdpbmdTdHlsZToge1xuICAgICAgICAgIGZpbGw6IG9sR2VvbWV0cnkuZ2V0KCdmaWxsQ29sb3JfJyksXG4gICAgICAgICAgc3Ryb2tlOiBvbEdlb21ldHJ5LmdldCgnc3Ryb2tlQ29sb3JfJylcbiAgICAgICAgfSxcbiAgICAgICAgb2Zmc2V0WDogb2xHZW9tZXRyeS5nZXQoJ29mZnNldFhfJyksXG4gICAgICAgIG9mZnNldFk6IG9sR2VvbWV0cnkuZ2V0KCdvZmZzZXRZXycpLFxuICAgICAgICBsYWJlbFR5cGU6IG9sR2VvbWV0cnkuZ2V0KCdsYWJlbFR5cGVfJyksXG4gICAgICAgIG1lYXN1cmVVbml0OiBvbEdlb21ldHJ5LmdldCgnbWVhc3VyZVVuaXRfJylcbiAgICAgIH0sXG4gICAgICBtZXRhOiB7XG4gICAgICAgIGlkOiBmZWF0dXJlSWRcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmFjdGl2ZVN0b3JlLnNldExheWVyRXh0ZW50KCk7XG4gICAgdGhpcy5hY3RpdmVEcmF3Q29udHJvbC5wcmVkZWZpbmVkUmFkaXVzJC5uZXh0KHVuZGVmaW5lZCk7XG4gICAgdGhpcy5hY3RpdmVEcmF3Q29udHJvbC5yYWRpdXNEcmF3RW5kJC5uZXh0KHVuZGVmaW5lZCk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRm9ybSgpIHtcbiAgICB0aGlzLmZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIGZpbGw6IFsnJ10sXG4gICAgICBzdHJva2U6IFsnJ11cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzZXR1cExheWVyKGlzTmV3TGF5ZXI/OiBib29sZWFuKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKERyYXdMYXllclBvcHVwQ29tcG9uZW50LCB7XG4gICAgICAgIGRpc2FibGVDbG9zZTogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChsYWJlbDogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmIChkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2UuY29uZmlybUZsYWcpIHtcbiAgICAgICAgICB0aGlzLmFjdGl2ZVN0b3JlLnN0YXRlLnVwZGF0ZUFsbCh7IHNlbGVjdGVkOiBmYWxzZSB9KTtcbiAgICAgICAgICB0aGlzLmFjdGl2ZVN0b3JlID0gbmV3IEZlYXR1cmVTdG9yZTxGZWF0dXJlV2l0aERyYXc+KFtdLCB7XG4gICAgICAgICAgICBtYXA6IHRoaXMubWFwXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5hY3RpdmVEcmF3aW5nTGF5ZXJTb3VyY2UgPSBuZXcgT2xWZWN0b3JTb3VyY2UoKTtcbiAgICAgICAgICB0aGlzLmFjdGl2ZURyYXdpbmdMYXllci5vcGFjaXR5ID0gMDtcbiAgICAgICAgICB0aGlzLmRlYWN0aXZhdGVEcmF3Q29udHJvbCgpO1xuICAgICAgICAgIHRoaXMuaW5pdFN0b3JlKGxhYmVsLCBpc05ld0xheWVyKTtcbiAgICAgICAgICB0aGlzLmFjdGl2ZURyYXdDb250cm9sID0gdGhpcy5jcmVhdGVEcmF3Q29udHJvbChcbiAgICAgICAgICAgIHRoaXMuZmlsbENvbG9yLFxuICAgICAgICAgICAgdGhpcy5zdHJva2VDb2xvcixcbiAgICAgICAgICAgIHRoaXMuc3Ryb2tlV2lkdGhcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuYWN0aXZlRHJhd0NvbnRyb2wuc2V0R2VvbWV0cnlUeXBlKHRoaXMuY3Vyckdlb21ldHJ5VHlwZSk7XG4gICAgICAgICAgdGhpcy50b2dnbGVEcmF3Q29udHJvbCgpO1xuICAgICAgICAgIHRoaXMuc3RvcmVzLnB1c2godGhpcy5hY3RpdmVTdG9yZSk7XG4gICAgICAgICAgdGhpcy5kcmF3Q29udHJvbHMucHVzaChbXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZURyYXdpbmdMYXllci5pZCxcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlRHJhd0NvbnRyb2xcbiAgICAgICAgICBdKTtcbiAgICAgICAgICB0aGlzLmRyYXdDb250cm9sc0V2ZW50LmVtaXQodGhpcy5kcmF3Q29udHJvbHMpO1xuICAgICAgICAgIHRoaXMubGF5ZXJzSURFdmVudC5lbWl0KHRoaXMuYWN0aXZlRHJhd2luZ0xheWVyLmlkKTtcbiAgICAgICAgICB0aGlzLmlzQ3JlYXRpbmdOZXdMYXllciA9IGZhbHNlO1xuICAgICAgICAgIGlmICghdGhpcy5sYWJlbHNBcmVTaG93bikge1xuICAgICAgICAgICAgdGhpcy5vblRvZ2dsZUxhYmVscygpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmFjdGl2ZUxheWVyQ2hhbmdlLmVtaXQodGhpcy5hY3RpdmVEcmF3aW5nTGF5ZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2VsZWN0LnZhbHVlID0gdGhpcy5hY3RpdmVEcmF3aW5nTGF5ZXI7XG4gICAgICAgICAgdGhpcy5zZWxlY3Quc2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy5hY3RpdmVEcmF3aW5nTGF5ZXIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCAyNTApO1xuICB9XG5cbiAgLy8gSFRNTCB1c2VyIGludGVyYWN0aW9uc1xuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgdXNlciBkb3VibGUtY2xpY2tzIHRoZSBzZWxlY3RlZCBkcmF3aW5nXG4gICAqL1xuICBlZGl0TGFiZWxEcmF3aW5nKGZlYXR1cmUpIHtcbiAgICBjb25zdCBvbEdlb21ldHJ5RmVhdHVyZSA9IGZlYXR1cmVUb09sKFxuICAgICAgZmVhdHVyZSxcbiAgICAgIHRoaXMubWFwLm9sLmdldFZpZXcoKS5nZXRQcm9qZWN0aW9uKCkuZ2V0Q29kZSgpXG4gICAgKTtcbiAgICB0aGlzLm9wZW5EcmF3RGlhbG9nKG9sR2VvbWV0cnlGZWF0dXJlLCBmYWxzZSk7XG4gIH1cblxuICBvcGVuU2hvcmN1dHNEaWFsb2coKSB7XG4gICAgdGhpcy5kaWFsb2cub3BlbihEcmF3U2hvcmN1dHNDb21wb25lbnQpO1xuICB9XG5cbiAgZGVsZXRlRHJhd2luZ3MoKSB7XG4gICAgdGhpcy5hY3RpdmVTdG9yZS5kZWxldGVNYW55KHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQudmFsdWUpO1xuICAgIHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQudmFsdWUuZm9yRWFjaCgoc2VsZWN0ZWRGZWF0dXJlKSA9PiB7XG4gICAgICB0aGlzLmFjdGl2ZURyYXdpbmdMYXllclNvdXJjZVxuICAgICAgICAuZ2V0RmVhdHVyZXMoKVxuICAgICAgICAuZm9yRWFjaCgoZHJhd2luZ0xheWVyRmVhdHVyZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGdlb21ldHJ5ID0gZHJhd2luZ0xheWVyRmVhdHVyZS5nZXRHZW9tZXRyeSgpIGFzIGFueTtcbiAgICAgICAgICBpZiAoc2VsZWN0ZWRGZWF0dXJlLnByb3BlcnRpZXMuaWQgPT09IGdlb21ldHJ5Lm9sX3VpZCkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVEcmF3aW5nTGF5ZXJTb3VyY2UucmVtb3ZlRmVhdHVyZShkcmF3aW5nTGF5ZXJGZWF0dXJlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlSGVpZ2h0VGFibGUoKTtcbiAgICB0aGlzLmFjdGl2ZVN0b3JlLnNldExheWVyRXh0ZW50KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIHVzZXIgdG9nZ2xlcyB0aGUgbGFiZWxzIHRvZ2dsZVxuICAgKi9cbiAgb25Ub2dnbGVMYWJlbHMoKSB7XG4gICAgdGhpcy5kcmF3U3R5bGVTZXJ2aWNlLnRvZ2dsZUxhYmVsc0FyZVNob3duKCk7XG4gICAgdGhpcy5sYWJlbHNBcmVTaG93biA9ICF0aGlzLmxhYmVsc0FyZVNob3duO1xuICAgIHRoaXMuaWNvblxuICAgICAgPyB0aGlzLmVsZW1lbnRTdHlsZSh0aGlzLmxhYmVsc0FyZVNob3duLCB0cnVlKVxuICAgICAgOiB0aGlzLmVsZW1lbnRTdHlsZSh0aGlzLmxhYmVsc0FyZVNob3duLCBmYWxzZSk7XG4gICAgdGhpcy5jcmVhdGVEcmF3Q29udHJvbCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSB1c2VyIHRvZ2dsZXMgdGhlIERyYXcgY29udHJvbCBpcyB0b2dnbGVkXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgb25Ub2dnbGVEcmF3Q29udHJvbCh0b2dnbGVJc0NoZWNrZWQ6IGJvb2xlYW4pIHtcbiAgICB0b2dnbGVJc0NoZWNrZWQgPyB0aGlzLnRvZ2dsZURyYXdDb250cm9sKCkgOiB0aGlzLmRlYWN0aXZhdGVEcmF3Q29udHJvbCgpO1xuICB9XG5cbiAgb25Ub2dnbGVGcmVlaGFuZE1vZGUoZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLmlzQ2lyY2xlKCkgJiYgIWV2ZW50LmNoZWNrZWQpIHtcbiAgICAgIHRoaXMuYWN0aXZlRHJhd0NvbnRyb2wuaXNwcmVkZWZpbmVkUmFkaXVzJC5uZXh0KHRydWUpO1xuICAgICAgdGhpcy5jaGFuZ2VSYWRpdXModGhpcy5yYWRpdXNGb3JtQ29udHJvbC52YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWN0aXZlRHJhd0NvbnRyb2wuc2V0T2xJbnRlcmFjdGlvblN0eWxlKFxuICAgICAgICBjcmVhdGVJbnRlcmFjdGlvblN0eWxlKFxuICAgICAgICAgIHRoaXMuZmlsbENvbG9yLFxuICAgICAgICAgIHRoaXMuc3Ryb2tlQ29sb3IsXG4gICAgICAgICAgdGhpcy5zdHJva2VXaWR0aFxuICAgICAgICApXG4gICAgICApO1xuICAgICAgdGhpcy5hY3RpdmVEcmF3Q29udHJvbC5pc3ByZWRlZmluZWRSYWRpdXMkLm5leHQoZmFsc2UpO1xuICAgIH1cbiAgICB0aGlzLmZyZWVoYW5kTW9kZSA9IGV2ZW50LmNoZWNrZWQ7XG4gICAgdGhpcy5hY3RpdmVEcmF3Q29udHJvbC5mcmVlaGFuZCQubmV4dChldmVudC5jaGVja2VkKTtcbiAgICB0aGlzLnRvZ2dsZURyYXdDb250cm9sKCk7XG4gIH1cblxuICAvLyBVc2VyIGNoYW5nZXMgcHJvcGVydGllcyBvZiBhIGRyYXdpbmcgZWxlbWVudFxuXG4gIC8qKlxuICAgKiBEaXNwbGF5IHRoZSBjdXJyZW50IGxheWVyIHdpdGggdGhlIGN1cnJlbnQgc3RvcmUgYW5kIHRoZSBjdXJyZW50IGxheWVyU291cmNlXG4gICAqL1xuXG4gIHB1YmxpYyBvbkxheWVyQ2hhbmdlKGN1cnJMYXllcj86IFZlY3RvckxheWVyKSB7XG4gICAgaWYgKGN1cnJMYXllcikge1xuICAgICAgdGhpcy5hY3RpdmVTdG9yZS5zdGF0ZS51cGRhdGVBbGwoeyBzZWxlY3RlZDogZmFsc2UgfSk7XG4gICAgICB0aGlzLmlzQ3JlYXRpbmdOZXdMYXllciA9IGZhbHNlO1xuICAgICAgdGhpcy5hY3RpdmVEcmF3aW5nTGF5ZXIub3BhY2l0eSA9IDA7XG4gICAgICB0aGlzLmFjdGl2ZURyYXdpbmdMYXllciA9IGN1cnJMYXllcjtcbiAgICAgIHRoaXMuYWN0aXZlRHJhd2luZ0xheWVyLm9wYWNpdHkgPSAxO1xuICAgICAgdGhpcy5kZWFjdGl2YXRlRHJhd0NvbnRyb2woKTtcbiAgICAgIGlmICghdGhpcy5sYWJlbHNBcmVTaG93bikge1xuICAgICAgICB0aGlzLm9uVG9nZ2xlTGFiZWxzKCk7XG4gICAgICB9XG4gICAgICB0aGlzLmFjdGl2ZVN0b3JlID0gdGhpcy5zdG9yZXMuZmluZChcbiAgICAgICAgKHN0b3JlKSA9PiBzdG9yZS5sYXllci5pZCA9PT0gdGhpcy5hY3RpdmVEcmF3aW5nTGF5ZXIuaWRcbiAgICAgICk7XG4gICAgICB0aGlzLmFjdGl2ZURyYXdDb250cm9sID0gdGhpcy5kcmF3Q29udHJvbHMuZmluZChcbiAgICAgICAgKGRjKSA9PiBkY1swXSA9PT0gdGhpcy5hY3RpdmVEcmF3aW5nTGF5ZXIuaWRcbiAgICAgIClbMV07XG4gICAgICB0aGlzLmFjdGl2ZURyYXdpbmdMYXllclNvdXJjZSA9XG4gICAgICAgIHRoaXMuYWN0aXZlRHJhd0NvbnRyb2wub2xEcmF3aW5nTGF5ZXJTb3VyY2U7XG4gICAgICB0aGlzLmFjdGl2ZURyYXdDb250cm9sLnNldEdlb21ldHJ5VHlwZSh0aGlzLmN1cnJHZW9tZXRyeVR5cGUpO1xuICAgICAgdGhpcy50b2dnbGVEcmF3Q29udHJvbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldHVwTGF5ZXIodHJ1ZSk7XG4gICAgfVxuICAgIHRoaXMuYWN0aXZlTGF5ZXJDaGFuZ2UuZW1pdCh0aGlzLmFjdGl2ZURyYXdpbmdMYXllcik7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlTGF5ZXIobmV3VGl0bGU/LCBpc05ld0xheWVyPykge1xuICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgdGhpcy5hbGxMYXllcnMpIHtcbiAgICAgIGxldCBudW1iZXJJZCA9IE51bWJlcihsYXllci5pZC5yZXBsYWNlKCdpZ28tZHJhdy1sYXllcicsICcnKSk7XG4gICAgICB0aGlzLmxheWVyQ291bnRlcklEID0gTWF0aC5tYXgobnVtYmVySWQsIHRoaXMubGF5ZXJDb3VudGVySUQpO1xuICAgIH1cbiAgICB0aGlzLmFjdGl2ZURyYXdpbmdMYXllciA9IG5ldyBWZWN0b3JMYXllcih7XG4gICAgICBpc0lnb0ludGVybmFsTGF5ZXI6IHRydWUsXG4gICAgICBpZDogJ2lnby1kcmF3LWxheWVyJyArICsrdGhpcy5sYXllckNvdW50ZXJJRCxcbiAgICAgIHRpdGxlOiBpc05ld0xheWVyXG4gICAgICAgID8gbmV3VGl0bGVcbiAgICAgICAgOiB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5kcmF3LmRyYXdpbmcnKSxcbiAgICAgIHpJbmRleDogMjAwLFxuICAgICAgc291cmNlOiBuZXcgRmVhdHVyZURhdGFTb3VyY2UoKSxcbiAgICAgIHN0eWxlOiAoZmVhdHVyZSwgcmVzb2x1dGlvbikgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kcmF3U3R5bGVTZXJ2aWNlLmNyZWF0ZUluZGl2aWR1YWxFbGVtZW50U3R5bGUoXG4gICAgICAgICAgZmVhdHVyZSxcbiAgICAgICAgICByZXNvbHV0aW9uLFxuICAgICAgICAgIHRoaXMubGFiZWxzQXJlU2hvd24sXG4gICAgICAgICAgZmVhdHVyZS5nZXQoJ2ZvbnRTdHlsZScpLFxuICAgICAgICAgIGZlYXR1cmUuZ2V0KCdkcmF3aW5nU3R5bGUnKS5maWxsLFxuICAgICAgICAgIGZlYXR1cmUuZ2V0KCdkcmF3aW5nU3R5bGUnKS5zdHJva2UsXG4gICAgICAgICAgZmVhdHVyZS5nZXQoJ29mZnNldFgnKSxcbiAgICAgICAgICBmZWF0dXJlLmdldCgnb2Zmc2V0WScpLFxuICAgICAgICAgIHRoaXMubWFwLnByb2plY3Rpb24sXG4gICAgICAgICAgdGhpcy5pY29uXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgc2hvd0luTGF5ZXJMaXN0OiB0cnVlLFxuICAgICAgZXhwb3J0YWJsZTogdHJ1ZSxcbiAgICAgIGJyb3dzYWJsZTogZmFsc2UsXG4gICAgICB3b3Jrc3BhY2U6IHtcbiAgICAgICAgZW5hYmxlZDogZmFsc2VcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRyeUJpbmRTdG9yZUxheWVyKHRoaXMuYWN0aXZlU3RvcmUsIHRoaXMuYWN0aXZlRHJhd2luZ0xheWVyKTtcblxuICAgIHRyeUFkZExvYWRpbmdTdHJhdGVneShcbiAgICAgIHRoaXMuYWN0aXZlU3RvcmUsXG4gICAgICBuZXcgRmVhdHVyZVN0b3JlTG9hZGluZ1N0cmF0ZWd5KHtcbiAgICAgICAgbW90aW9uOiBGZWF0dXJlTW90aW9uLk5vbmVcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRyeUFkZFNlbGVjdGlvblN0cmF0ZWd5KFxuICAgICAgdGhpcy5hY3RpdmVTdG9yZSxcbiAgICAgIG5ldyBGZWF0dXJlU3RvcmVTZWxlY3Rpb25TdHJhdGVneSh7XG4gICAgICAgIG1hcDogdGhpcy5tYXAsXG4gICAgICAgIG1vdGlvbjogRmVhdHVyZU1vdGlvbi5Ob25lLFxuICAgICAgICBtYW55OiB0cnVlXG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy5hY3RpdmVTdG9yZS5sYXllci52aXNpYmxlID0gdHJ1ZTtcbiAgICB0aGlzLmFjdGl2ZVN0b3JlLnNvdXJjZS5vbC5vbihcbiAgICAgICdyZW1vdmVmZWF0dXJlJyxcbiAgICAgIChldmVudDogT2xWZWN0b3JTb3VyY2VFdmVudCkgPT4ge1xuICAgICAgICBjb25zdCBvbEdlb21ldHJ5ID0gZXZlbnQuZmVhdHVyZS5nZXRHZW9tZXRyeSgpO1xuICAgICAgICB0aGlzLmNsZWFyTGFiZWxzT2ZPbEdlb21ldHJ5KG9sR2VvbWV0cnkpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIHVzZXIgY2hhbmdlcyB0aGUgY29sb3IgaW4gYSBjb2xvciBwaWNrZXJcbiAgICogQHBhcmFtIGxhYmVsc0FyZVNob3duIHdoZXRlciB0aGUgbGFiZWxzIGFyZSBzaG93biBvciBub3RcbiAgICogQHBhcmFtIGlzQW5JY29uIHdoZXRlciB0aGUgZmVhdHVyZSBpcyBhbiBpY29uIG9yIG5vdFxuICAgKiBAcGFyYW0gZmlsbENvbG9yIHdoaWNoIGlzIHRoZSBmaWxsaW5nIGNvbG9yXG4gICAqIEBwYXJhbSBzdHJva2VDb2xvciB3aGljaCBpcyB0aGUgc3Ryb2tlIGNvbG9yXG4gICAqL1xuICBvbkNvbG9yQ2hhbmdlKFxuICAgIGxhYmVsc0FyZVNob3duOiBib29sZWFuLFxuICAgIGlzQW5JY29uOiBib29sZWFuLFxuICAgIGZpbGxDb2xvcjogc3RyaW5nLFxuICAgIHN0cm9rZUNvbG9yOiBzdHJpbmdcbiAgKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQudmFsdWUubGVuZ3RoID4gMCAmJiAhaXNBbkljb24pIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQudmFsdWUuZm9yRWFjaCgoZmVhdHVyZSkgPT4ge1xuICAgICAgICBsZXQgb2xGZWF0dXJlID0gZmVhdHVyZVRvT2woXG4gICAgICAgICAgZmVhdHVyZSxcbiAgICAgICAgICB0aGlzLm1hcC5vbC5nZXRWaWV3KCkuZ2V0UHJvamVjdGlvbigpLmdldENvZGUoKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnVwZGF0ZUZpbGxBbmRTdHJva2VDb2xvcihvbEZlYXR1cmUsIGZpbGxDb2xvciwgc3Ryb2tlQ29sb3IpO1xuXG4gICAgICAgIGNvbnN0IGVudGl0eSA9IHRoaXMuYWN0aXZlU3RvcmVcbiAgICAgICAgICAuYWxsKClcbiAgICAgICAgICAuZmluZCgoZSkgPT4gZS5tZXRhLmlkID09PSBvbEZlYXR1cmUuZ2V0SWQoKSk7XG4gICAgICAgIGVudGl0eS5wcm9wZXJ0aWVzLmRyYXdpbmdTdHlsZS5maWxsID0gb2xGZWF0dXJlLmdldCgnZmlsbENvbG9yXycpO1xuICAgICAgICBlbnRpdHkucHJvcGVydGllcy5kcmF3aW5nU3R5bGUuc3Ryb2tlID0gb2xGZWF0dXJlLmdldCgnc3Ryb2tlQ29sb3JfJyk7XG4gICAgICAgIHRoaXMuYWN0aXZlU3RvcmUudXBkYXRlKGVudGl0eSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmVsZW1lbnRTdHlsZShsYWJlbHNBcmVTaG93biwgaXNBbkljb24pO1xuICAgIHRoaXMuY3JlYXRlRHJhd0NvbnRyb2woKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgdXNlciBjaGFuZ2VzIHRoZSBmb250IHNpemUgb3IvYW5kIHN0eWxlXG4gICAqIEBwYXJhbSBsYWJlbHNBcmVTaG93biB3aGV0ZXIgdGhlIGxhYmVscyBhcmUgc2hvd24gb3Igbm90XG4gICAqIEBwYXJhbSBzaXplIHRoZSBzaXplIG9mIHRoZSBmb250XG4gICAqIEBwYXJhbSBzdHlsZSB0aGUgc3R5bGUgb2YgdGhlIGZvbnRcbiAgICovXG5cbiAgb25Gb250Q2hhbmdlKGxhYmVsc0FyZVNob3duOiBib29sZWFuLCBzaXplOiBzdHJpbmcsIHN0eWxlOiBGb250VHlwZSkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLnZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQudmFsdWUuZm9yRWFjaCgoZmVhdHVyZSkgPT4ge1xuICAgICAgICBsZXQgb2xGZWF0dXJlID0gZmVhdHVyZVRvT2woXG4gICAgICAgICAgZmVhdHVyZSxcbiAgICAgICAgICB0aGlzLm1hcC5vbC5nZXRWaWV3KCkuZ2V0UHJvamVjdGlvbigpLmdldENvZGUoKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnVwZGF0ZUZvbnRTaXplQW5kU3R5bGUob2xGZWF0dXJlLCBzaXplLCBzdHlsZSk7XG4gICAgICAgIGNvbnN0IGVudGl0eSA9IHRoaXMuYWN0aXZlU3RvcmVcbiAgICAgICAgICAuYWxsKClcbiAgICAgICAgICAuZmluZCgoZSkgPT4gZS5tZXRhLmlkID09PSBvbEZlYXR1cmUuZ2V0SWQoKSk7XG4gICAgICAgIGVudGl0eS5wcm9wZXJ0aWVzLmZvbnRTdHlsZSA9IG9sRmVhdHVyZS5nZXQoJ2ZvbnRTdHlsZV8nKTtcbiAgICAgICAgdGhpcy5hY3RpdmVTdG9yZS51cGRhdGUoZW50aXR5KTtcbiAgICAgICAgb2xGZWF0dXJlID0gdGhpcy5hY3RpdmVTdG9yZS5sYXllci5vbFxuICAgICAgICAgIC5nZXRTb3VyY2UoKVxuICAgICAgICAgIC5nZXRGZWF0dXJlcygpXG4gICAgICAgICAgLmZpbmQoKGYpID0+IGYuZ2V0SWQoKSA9PT0gZW50aXR5Lm1ldGEuaWQpO1xuICAgICAgICBvbEZlYXR1cmUuc2V0UHJvcGVydGllcyh7IGZvbnRTdHlsZTogZW50aXR5LnByb3BlcnRpZXMuZm9udFN0eWxlIH0pO1xuICAgICAgICBvbEZlYXR1cmUuY2hhbmdlZCgpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuZm9udFNpemUgPSBzaXplO1xuICAgICAgdGhpcy5mb250U3R5bGUgPSBzdHlsZTtcblxuICAgICAgdGhpcy5kcmF3U3R5bGVTZXJ2aWNlLnNldEZvbnRTaXplKHNpemUpO1xuICAgICAgdGhpcy5kcmF3U3R5bGVTZXJ2aWNlLnNldEZvbnRTdHlsZShzdHlsZSk7XG5cbiAgICAgIHRoaXMuZWxlbWVudFN0eWxlKGxhYmVsc0FyZVNob3duKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIHVzZXIgY2hhbmdlcyB0aGUgdmFsdWUgb2YgdGhlIGhvcml6b250YWwvdmVydGljYWwgb2Zmc2V0XG4gICAqIEBwYXJhbSBsYWJlbHNBcmVTaG93biB3aGV0ZXIgdGhlIGxhYmVscyBhcmUgc2hvd24gb3Igbm90XG4gICAqIEBwYXJhbSBvZmZzZXRYIGhvcml6b250YWwgb2Zmc2V0IG9mIHRoZSBsYWJlbFxuICAgKiBAcGFyYW0gb2Zmc2V0WSB2ZXJ0aWNhbCBvZmZzZXQgb2YgdGhlIGxhYmVsXG4gICAqL1xuXG4gIG9uT2Zmc2V0TGFiZWxDaGFuZ2UoXG4gICAgbGFiZWxzQXJlU2hvd246IGJvb2xlYW4sXG4gICAgb2Zmc2V0WDogbnVtYmVyLFxuICAgIG9mZnNldFk6IG51bWJlclxuICApIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZEZlYXR1cmVzJC52YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLnZhbHVlLmZvckVhY2goKGZlYXR1cmUpID0+IHtcbiAgICAgICAgbGV0IG9sRmVhdHVyZSA9IGZlYXR1cmVUb09sKFxuICAgICAgICAgIGZlYXR1cmUsXG4gICAgICAgICAgdGhpcy5tYXAub2wuZ2V0VmlldygpLmdldFByb2plY3Rpb24oKS5nZXRDb2RlKClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy51cGRhdGVPZmZzZXQob2xGZWF0dXJlLCBvZmZzZXRYLCBvZmZzZXRZKTtcbiAgICAgICAgY29uc3QgZW50aXR5ID0gdGhpcy5hY3RpdmVTdG9yZVxuICAgICAgICAgIC5hbGwoKVxuICAgICAgICAgIC5maW5kKChlKSA9PiBlLm1ldGEuaWQgPT09IG9sRmVhdHVyZS5nZXRJZCgpKTtcbiAgICAgICAgZW50aXR5LnByb3BlcnRpZXMub2Zmc2V0WCA9IG9sRmVhdHVyZS5nZXQoJ29mZnNldFhfJyk7XG4gICAgICAgIGVudGl0eS5wcm9wZXJ0aWVzLm9mZnNldFkgPSBvbEZlYXR1cmUuZ2V0KCdvZmZzZXRZXycpO1xuICAgICAgICB0aGlzLmFjdGl2ZVN0b3JlLnVwZGF0ZShlbnRpdHkpO1xuICAgICAgICBvbEZlYXR1cmUgPSB0aGlzLmFjdGl2ZVN0b3JlLmxheWVyLm9sXG4gICAgICAgICAgLmdldFNvdXJjZSgpXG4gICAgICAgICAgLmdldEZlYXR1cmVzKClcbiAgICAgICAgICAuZmluZCgoZikgPT4gZi5nZXRJZCgpID09PSBlbnRpdHkubWV0YS5pZCk7XG4gICAgICAgIG9sRmVhdHVyZS5zZXRQcm9wZXJ0aWVzKHtcbiAgICAgICAgICBvZmZzZXRYOiBlbnRpdHkucHJvcGVydGllcy5vZmZzZXRYLFxuICAgICAgICAgIG9mZnNldFk6IGVudGl0eS5wcm9wZXJ0aWVzLm9mZnNldFlcbiAgICAgICAgfSk7XG4gICAgICAgIG9sRmVhdHVyZS5jaGFuZ2VkKCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZWxlbWVudFN0eWxlKGxhYmVsc0FyZVNob3duKTtcbiAgICB9XG4gIH1cblxuICBvbkljb25DaGFuZ2UoZXZlbnQ/KSB7XG4gICAgdGhpcy5pY29uID0gZXZlbnQ7XG4gICAgdGhpcy5kcmF3U3R5bGVTZXJ2aWNlLnNldEljb24odGhpcy5pY29uKTtcbiAgICB0aGlzLmVsZW1lbnRTdHlsZSh0cnVlLCB0aGlzLmljb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSB1c2VyIHNlbGVjdHMgYSBuZXcgZ2VvbWV0cnkgdHlwZVxuICAgKiBAcGFyYW0gZ2VvbWV0cnlUeXBlIHRoZSBnZW9tZXRyeSB0eXBlIHNlbGVjdGVkIGJ5IHRoZSB1c2VyXG4gICAqL1xuICBvbkdlb21ldHJ5VHlwZUNoYW5nZShnZW9tZXRyeVR5cGU6IFR5cGUpIHtcbiAgICB0aGlzLmN1cnJHZW9tZXRyeVR5cGUgPSBnZW9tZXRyeVR5cGU7XG4gICAgdGhpcy5hY3RpdmVEcmF3Q29udHJvbC5zZXRHZW9tZXRyeVR5cGUoZ2VvbWV0cnlUeXBlKTtcbiAgICB0aGlzLmZyZWVoYW5kTW9kZVxuICAgICAgPyB0aGlzLm9uVG9nZ2xlRnJlZWhhbmRNb2RlKHsgY2hlY2tlZDogdHJ1ZSB9KVxuICAgICAgOiB0aGlzLm9uVG9nZ2xlRnJlZWhhbmRNb2RlKHsgY2hlY2tlZDogZmFsc2UgfSk7XG4gICAgdGhpcy50b2dnbGVEcmF3Q29udHJvbCgpO1xuICB9XG5cbiAgLy8gVXBkYXRlcyB0aGUgcHJvcGVydGllcyBvZiBvbEZlYXR1cmUgaW5wdXR0ZWRcblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBsYWJlbCBvZiBhIGdlb21ldHJ5IHdoZW4gYSBsYWJlbCBpcyBlbnRlcmVkIGluIGEgZGlhbG9nIGJveFxuICAgKiBAcGFyYW0gT2xGZWF0dXJlIHRoZSBmZWF0dXJlXG4gICAqIEBwYXJhbSBsYWJlbCB0aGUgbGFiZWxcbiAgICovXG4gIHByaXZhdGUgdXBkYXRlTGFiZWxPZk9sR2VvbWV0cnkoT2xGZWF0dXJlLCBsYWJlbDogc3RyaW5nKSB7XG4gICAgT2xGZWF0dXJlLnNldFByb3BlcnRpZXMoXG4gICAgICB7XG4gICAgICAgIF9sYWJlbDogbGFiZWxcbiAgICAgIH0sXG4gICAgICB0cnVlXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRm9udFNpemVBbmRTdHlsZShcbiAgICBvbEZlYXR1cmU6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PixcbiAgICBmb250U2l6ZTogc3RyaW5nLFxuICAgIGZvbnRTdHlsZTogc3RyaW5nXG4gICkge1xuICAgIG9sRmVhdHVyZS5zZXRQcm9wZXJ0aWVzKFxuICAgICAge1xuICAgICAgICBmb250U3R5bGVfOiBgJHtmb250U2l6ZX1weCAke2ZvbnRTdHlsZX1gXG4gICAgICB9LFxuICAgICAgdHJ1ZVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUZpbGxBbmRTdHJva2VDb2xvcihcbiAgICBvbEZlYXR1cmU6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PixcbiAgICBmaWxsQ29sb3I6IHN0cmluZyxcbiAgICBzdHJva2VDb2xvcjogc3RyaW5nXG4gICkge1xuICAgIG9sRmVhdHVyZS5zZXRQcm9wZXJ0aWVzKFxuICAgICAge1xuICAgICAgICBmaWxsQ29sb3JfOiBmaWxsQ29sb3IsXG4gICAgICAgIHN0cm9rZUNvbG9yXzogc3Ryb2tlQ29sb3JcbiAgICAgIH0sXG4gICAgICB0cnVlXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlT2Zmc2V0KFxuICAgIG9sRmVhdHVyZTogT2xGZWF0dXJlPE9sR2VvbWV0cnk+LFxuICAgIG9mZnNldFg6IG51bWJlcixcbiAgICBvZmZzZXRZOiBudW1iZXJcbiAgKSB7XG4gICAgb2xGZWF0dXJlLnNldFByb3BlcnRpZXMoXG4gICAgICB7XG4gICAgICAgIG9mZnNldFhfOiBvZmZzZXRYLFxuICAgICAgICBvZmZzZXRZXzogb2Zmc2V0WVxuICAgICAgfSxcbiAgICAgIHRydWVcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVMYWJlbFR5cGUoXG4gICAgb2xGZWF0dXJlOiBPbEZlYXR1cmU8T2xHZW9tZXRyeT4sXG4gICAgdHlwZU9mTGFiZWw6IExhYmVsVHlwZSB8IFtMYWJlbFR5cGUsIExhYmVsVHlwZV1cbiAgKSB7XG4gICAgb2xGZWF0dXJlLnNldFByb3BlcnRpZXMoXG4gICAgICB7XG4gICAgICAgIGxhYmVsVHlwZV86IHR5cGVPZkxhYmVsXG4gICAgICB9LFxuICAgICAgdHJ1ZVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU1lYXN1cmVVbml0KFxuICAgIG9sRmVhdHVyZTogT2xGZWF0dXJlPE9sR2VvbWV0cnk+LFxuICAgIG1lYXN1cmVVbml0OiBNZWFzdXJlTGVuZ3RoVW5pdCB8IE1lYXN1cmVBcmVhVW5pdCB8IENvb3JkaW5hdGVzVW5pdCB8IFtdXG4gICkge1xuICAgIG9sRmVhdHVyZS5zZXRQcm9wZXJ0aWVzKFxuICAgICAge1xuICAgICAgICBtZWFzdXJlVW5pdF86IG1lYXN1cmVVbml0XG4gICAgICB9LFxuICAgICAgdHJ1ZVxuICAgICk7XG4gIH1cblxuICAvLyBVcGRhdGVzIHZhbHVlcyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudCBvbiB0aGUgSFRNTCB2aWV3XG5cbiAgZ2V0RmVhdHVyZUZvbnRTaXplKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQudmFsdWUubGVuZ3RoID4gMFxuICAgICAgPyB0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLnZhbHVlWzBdLnByb3BlcnRpZXMuZm9udFN0eWxlXG4gICAgICAgICAgLnNwbGl0KCcgJylbMF1cbiAgICAgICAgICAucmVwbGFjZSgncHgnLCAnJylcbiAgICAgIDogJzE1JztcbiAgfVxuXG4gIGdldEZlYXR1cmVGb250U3R5bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQudmFsdWUubGVuZ3RoID4gMFxuICAgICAgPyB0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLnZhbHVlWzBdLnByb3BlcnRpZXMuZm9udFN0eWxlLnN1YnN0cmluZyhcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLnZhbHVlWzBdLnByb3BlcnRpZXMuZm9udFN0eWxlLmluZGV4T2YoJyAnKSArIDFcbiAgICAgICAgKVxuICAgICAgOiBGb250VHlwZS5BcmlhbDtcbiAgfVxuXG4gIGdldEZlYXR1cmVGaWxsQ29sb3IoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQudmFsdWUubGVuZ3RoID4gMFxuICAgICAgPyB0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLnZhbHVlWzBdLnByb3BlcnRpZXMuZHJhd2luZ1N0eWxlLmZpbGxcbiAgICAgIDogJ3JnYmEoMjU1LDI1NSwyNTUsMC40KSc7XG4gIH1cblxuICBnZXRGZWF0dXJlU3Ryb2tlQ29sb3IoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQudmFsdWUubGVuZ3RoID4gMFxuICAgICAgPyB0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLnZhbHVlWzBdLnByb3BlcnRpZXMuZHJhd2luZ1N0eWxlLnN0cm9rZVxuICAgICAgOiAncmdiYSgxNDMsNyw3LDEpJztcbiAgfVxuXG4gIGdldEZlYXR1cmVPZmZzZXRYKCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLnZhbHVlLmxlbmd0aCA+IDBcbiAgICAgID8gdGhpcy5zZWxlY3RlZEZlYXR1cmVzJC52YWx1ZVswXS5wcm9wZXJ0aWVzLm9mZnNldFhcbiAgICAgIDogdGhpcy5kcmF3U3R5bGVTZXJ2aWNlLmdldE9mZnNldFgoKTtcbiAgfVxuXG4gIGdldEZlYXR1cmVPZmZzZXRZKCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLnZhbHVlLmxlbmd0aCA+IDBcbiAgICAgID8gdGhpcy5zZWxlY3RlZEZlYXR1cmVzJC52YWx1ZVswXS5wcm9wZXJ0aWVzLm9mZnNldFlcbiAgICAgIDogJzAnO1xuICB9XG5cbiAgZ2V0IGFsbEZvbnRTdHlsZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKEZvbnRUeXBlKTtcbiAgfVxuXG4gIGdldCBhbGxMYXllcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwLmxheWVycy5maWx0ZXIoKGxheWVyKSA9PlxuICAgICAgU3RyaW5nKGxheWVyLmlkKS5pbmNsdWRlcygnaWdvLWRyYXctbGF5ZXInKVxuICAgICk7XG4gIH1cblxuICB1cGRhdGVIZWlnaHRUYWJsZSgpIHtcbiAgICAvLyBDaGVjayB0aGUgYW1vdW50IG9mIHJvd3MgYXMgYSBwb3NzaWJsZSBhbHRlcm5hdGl2ZVxuICAgIHRoaXMubnVtYmVyT2ZEcmF3aW5ncyA9IHRoaXMuYWN0aXZlU3RvcmUuY291bnQkLmdldFZhbHVlKCk7XG4gICAgdGhpcy5udW1iZXJPZkRyYXdpbmdzID4gMTBcbiAgICAgID8gKHRoaXMudGFibGVUZW1wbGF0ZS50YWJsZUhlaWdodCA9ICczNXZoJylcbiAgICAgIDogKHRoaXMudGFibGVUZW1wbGF0ZS50YWJsZUhlaWdodCA9ICdhdXRvJyk7XG4gIH1cblxuICB1cGRhdGVBY3RpdmVMYXllcigpIHtcbiAgICBsZXQgY3VyckxheWVyID0gdGhpcy5hbGxMYXllcnMuZmluZChcbiAgICAgIChsYXllcikgPT4gbGF5ZXIudGl0bGUgPT09IHRoaXMuYWN0aXZlRHJhd2luZ0xheWVyLnRpdGxlXG4gICAgKTtcbiAgICByZXR1cm4gY3VyckxheWVyID8gY3VyckxheWVyIDogdGhpcy5hbGxMYXllcnNbMF07XG4gIH1cblxuICAvLyBIZWxwZXIgbWV0aG9kc1xuXG4gIC8qKlxuICAgKiBBY3RpdmF0ZSB0aGUgY29ycmVjdCBjb250cm9sXG4gICAqL1xuICBwcml2YXRlIHRvZ2dsZURyYXdDb250cm9sKCkge1xuICAgIHRoaXMuZGVhY3RpdmF0ZURyYXdDb250cm9sKCk7XG4gICAgdGhpcy5hY3RpdmF0ZURyYXdDb250cm9sKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgdGhlIHRvb2x0aXBzIG9mIGFuIE9MIGdlb21ldHJ5XG4gICAqIEBwYXJhbSBvbEdlb21ldHJ5IE9MIGdlb21ldHJ5IHdpdGggdG9vbHRpcHNcbiAgICovXG4gIHByaXZhdGUgY2xlYXJMYWJlbHNPZk9sR2VvbWV0cnkob2xHZW9tZXRyeSkge1xuICAgIGdldFRvb2x0aXBzT2ZPbEdlb21ldHJ5KG9sR2VvbWV0cnkpLmZvckVhY2goXG4gICAgICAob2xUb29sdGlwOiBPbE92ZXJsYXkgfCB1bmRlZmluZWQpID0+IHtcbiAgICAgICAgaWYgKG9sVG9vbHRpcCAmJiBvbFRvb2x0aXAuZ2V0TWFwKCkpIHtcbiAgICAgICAgICB0aGlzLm1hcC5vbC5yZW1vdmVPdmVybGF5KG9sVG9vbHRpcCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBSZXBsYWNlIHRoZSBmZWF0dXJlIGluIHRoZSBzdG9yZVxuICAgKiBAcGFyYW0gZW50aXR5IHRoZSBlbnRpdHkgdG8gcmVwbGFjZVxuICAgKiBAcGFyYW0gb2xHZW9tZXRyeSB0aGUgbmV3IGdlb21ldHJ5IHRvIGluc2VydCBpbiB0aGUgc3RvcmVcbiAgICovXG4gIHByaXZhdGUgcmVwbGFjZUZlYXR1cmVJblN0b3JlKFxuICAgIGVudGl0eSxcbiAgICBvbEdlb21ldHJ5OiBPbEdlb21ldHJ5LFxuICAgIHJhZGl1cz86IG51bWJlclxuICApIHtcbiAgICB0aGlzLmFjdGl2ZVN0b3JlLmRlbGV0ZShlbnRpdHkpO1xuICAgIHRoaXMub25EcmF3RW5kKG9sR2VvbWV0cnksIHJhZGl1cyk7XG4gIH1cblxuICAvKipcbiAgICogRGVhY3RpdmF0ZSB0aGUgYWN0aXZlIGRyYXcgY29udHJvbFxuICAgKi9cbiAgcHJpdmF0ZSBkZWFjdGl2YXRlRHJhd0NvbnRyb2woKSB7XG4gICAgaWYgKCF0aGlzLmFjdGl2ZURyYXdDb250cm9sKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZHJhd0VuZCQkKSB7XG4gICAgICB0aGlzLmRyYXdFbmQkJC51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHRoaXMuYWN0aXZlRHJhd0NvbnRyb2wuc2V0T2xNYXAodW5kZWZpbmVkKTtcbiAgICB0aGlzLmRyYXdDb250cm9sSXNBY3RpdmUgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY3RpdmF0ZSBhIGdpdmVuIGNvbnRyb2xcbiAgICovXG4gIHByaXZhdGUgYWN0aXZhdGVEcmF3Q29udHJvbCgpIHtcbiAgICB0aGlzLmRyYXdDb250cm9sSXNEaXNhYmxlZCA9IGZhbHNlO1xuICAgIHRoaXMuZHJhd0NvbnRyb2xJc0FjdGl2ZSA9IHRydWU7XG4gICAgdGhpcy5kcmF3RW5kJCQgPSB0aGlzLmFjdGl2ZURyYXdDb250cm9sLmVuZCQuc3Vic2NyaWJlKFxuICAgICAgKG9sR2VvbWV0cnk6IE9sR2VvbWV0cnkpID0+IHtcbiAgICAgICAgdGhpcy5vcGVuRHJhd0RpYWxvZyhvbEdlb21ldHJ5LCB0cnVlKTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5hY3RpdmVEcmF3Q29udHJvbC5tb2RpZnkkLnN1YnNjcmliZSgob2xHZW9tZXRyeTogT2xHZW9tZXRyeSkgPT4ge1xuICAgICAgdGhpcy5vbk1vZGlmeURyYXcob2xHZW9tZXRyeSk7XG4gICAgfSk7XG5cbiAgICBpZiAoIXRoaXMuZHJhd1NlbGVjdCQkKSB7XG4gICAgICB0aGlzLmRyYXdTZWxlY3QkJCA9IHRoaXMuYWN0aXZlRHJhd0NvbnRyb2wuc2VsZWN0JC5zdWJzY3JpYmUoXG4gICAgICAgIChvbEZlYXR1cmU6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PikgPT4ge1xuICAgICAgICAgIHRoaXMub3BlbkRyYXdEaWFsb2cob2xGZWF0dXJlLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuYWN0aXZlRHJhd0NvbnRyb2wuc2V0T2xNYXAodGhpcy5tYXAub2wsIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIGdldCB0aGUgZ2VvbWV0cnkgb2YgZGVzaWduXG4gICAqXG4gICAqL1xuXG4gIGlzUG9pbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlRHJhd0NvbnRyb2wuZ2V0R2VvbWV0cnlUeXBlKCkgPT09IHRoaXMuZ2VvbWV0cnlUeXBlLlBvaW50O1xuICB9XG5cbiAgaXNMaW5lU3RyaW5nKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmFjdGl2ZURyYXdDb250cm9sLmdldEdlb21ldHJ5VHlwZSgpID09PSB0aGlzLmdlb21ldHJ5VHlwZS5MaW5lU3RyaW5nXG4gICAgKTtcbiAgfVxuXG4gIGlzUG9seWdvbigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5hY3RpdmVEcmF3Q29udHJvbC5nZXRHZW9tZXRyeVR5cGUoKSA9PT0gdGhpcy5nZW9tZXRyeVR5cGUuUG9seWdvblxuICAgICk7XG4gIH1cblxuICBpc0NpcmNsZSgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5hY3RpdmVEcmF3Q29udHJvbC5nZXRHZW9tZXRyeVR5cGUoKSA9PT0gdGhpcy5nZW9tZXRyeVR5cGUuQ2lyY2xlXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZm9uY3Rpb24gdG8gcHJlZGVmaW5lIHRoZSByYWRpdXMgb2YgdGhlIHVzZXJcbiAgICpcbiAgICovXG5cbiAgY2hhbmdlUmFkaXVzKHJhZGl1czogbnVtYmVyKSB7XG4gICAgbGV0IHJhZGl1c01ldGVyczogbnVtYmVyO1xuXG4gICAgaWYgKHJhZGl1cykge1xuICAgICAgdGhpcy5tZWFzdXJlVW5pdCA9PT0gTWVhc3VyZUxlbmd0aFVuaXQuTWV0ZXJzXG4gICAgICAgID8gKHJhZGl1c01ldGVycyA9IHJhZGl1cylcbiAgICAgICAgOiAocmFkaXVzTWV0ZXJzID0gcmFkaXVzICogMTAwMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJhZGl1c01ldGVycyA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBwb2ludFN0eWxlID0gKGZlYXR1cmU6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PiwgcmVzb2x1dGlvbjogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCBnZW9tID0gZmVhdHVyZS5nZXRHZW9tZXRyeSgpIGFzIE9sUG9pbnQ7XG4gICAgICBjb25zdCBjb29yZGluYXRlcyA9IG9scHJvai50cmFuc2Zvcm0oXG4gICAgICAgIGdlb20uZ2V0Q29vcmRpbmF0ZXMoKSxcbiAgICAgICAgdGhpcy5tYXAucHJvamVjdGlvbixcbiAgICAgICAgJ0VQU0c6NDMyNidcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHJhZGl1cyA9XG4gICAgICAgIHJhZGl1c01ldGVycyAvIE1hdGguY29zKChNYXRoLlBJIC8gMTgwKSAqIGNvb3JkaW5hdGVzWzFdKSAvIHJlc29sdXRpb247XG4gICAgICB0aGlzLmFjdGl2ZURyYXdDb250cm9sLnByZWRlZmluZWRSYWRpdXMkLm5leHQocmFkaXVzTWV0ZXJzKTtcbiAgICAgIHJldHVybiBuZXcgT2xTdHlsZS5TdHlsZSh7XG4gICAgICAgIGltYWdlOiBuZXcgT2xTdHlsZS5DaXJjbGUoe1xuICAgICAgICAgIHJhZGl1czogcmFkaXVzLFxuICAgICAgICAgIHN0cm9rZTogbmV3IE9sU3R5bGUuU3Ryb2tlKHtcbiAgICAgICAgICAgIHdpZHRoOiAxLFxuICAgICAgICAgICAgY29sb3I6ICdyZ2JhKDE0Myw3LDcsMSknXG4gICAgICAgICAgfSksXG4gICAgICAgICAgZmlsbDogbmV3IE9sU3R5bGUuRmlsbCh7XG4gICAgICAgICAgICBjb2xvcjogJ3JnYmEoMjU1LDI1NSwyNTUsMC40KSdcbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHRoaXMuYWN0aXZlRHJhd0NvbnRyb2wuc2V0T2xJbnRlcmFjdGlvblN0eWxlKHBvaW50U3R5bGUpO1xuICAgIHRoaXMudG9nZ2xlRHJhd0NvbnRyb2woKTtcbiAgfVxuXG4gIG9uTWVhc3VyZVVuaXRDaGFuZ2Uoc2VsZWN0ZWRNZWFzdXJlVW5pdDogTWVhc3VyZUxlbmd0aFVuaXQpIHtcbiAgICBpZiAoc2VsZWN0ZWRNZWFzdXJlVW5pdCA9PT0gdGhpcy5tZWFzdXJlVW5pdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1lYXN1cmVVbml0ID0gc2VsZWN0ZWRNZWFzdXJlVW5pdDtcbiAgICAgIHRoaXMubWVhc3VyZVVuaXQgPT09IE1lYXN1cmVMZW5ndGhVbml0Lk1ldGVyc1xuICAgICAgICA/IHRoaXMucmFkaXVzRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5yYWRpdXNGb3JtQ29udHJvbC52YWx1ZSAqIDEwMDApXG4gICAgICAgIDogdGhpcy5yYWRpdXNGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLnJhZGl1c0Zvcm1Db250cm9sLnZhbHVlIC8gMTAwMCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlY3JlYXRlcyB0aGUgc3R5bGUgb2YgdGhlIGZlYXR1cmUgc3RvcmVkXG4gICAqL1xuICBwcml2YXRlIGVsZW1lbnRTdHlsZShsYWJlbHNBcmVTaG93bjogYm9vbGVhbiwgaXNBbkljb24/KSB7XG4gICAgaWYgKGlzQW5JY29uKSB7XG4gICAgICB0aGlzLmFjdGl2ZVN0b3JlLmxheWVyLm9sLnNldFN0eWxlKChmZWF0dXJlLCByZXNvbHV0aW9uKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRyYXdTdHlsZVNlcnZpY2UuY3JlYXRlSW5kaXZpZHVhbEVsZW1lbnRTdHlsZShcbiAgICAgICAgICBmZWF0dXJlLFxuICAgICAgICAgIHJlc29sdXRpb24sXG4gICAgICAgICAgbGFiZWxzQXJlU2hvd24sXG4gICAgICAgICAgZmVhdHVyZS5nZXQoJ2ZvbnRTdHlsZScpLFxuICAgICAgICAgIGZlYXR1cmUuZ2V0KCdkcmF3aW5nU3R5bGUnKS5maWxsLFxuICAgICAgICAgIGZlYXR1cmUuZ2V0KCdkcmF3aW5nU3R5bGUnKS5zdHJva2UsXG4gICAgICAgICAgZmVhdHVyZS5nZXQoJ29mZnNldFgnKSxcbiAgICAgICAgICBmZWF0dXJlLmdldCgnb2Zmc2V0WScpLFxuICAgICAgICAgIHRoaXMubWFwLnByb2plY3Rpb24sXG4gICAgICAgICAgdGhpcy5pY29uXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hY3RpdmVTdG9yZS5sYXllci5vbC5zZXRTdHlsZSgoZmVhdHVyZSwgcmVzb2x1dGlvbikgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kcmF3U3R5bGVTZXJ2aWNlLmNyZWF0ZUluZGl2aWR1YWxFbGVtZW50U3R5bGUoXG4gICAgICAgICAgZmVhdHVyZSxcbiAgICAgICAgICByZXNvbHV0aW9uLFxuICAgICAgICAgIGxhYmVsc0FyZVNob3duLFxuICAgICAgICAgIGZlYXR1cmUuZ2V0KCdmb250U3R5bGUnKSxcbiAgICAgICAgICBmZWF0dXJlLmdldCgnZHJhd2luZ1N0eWxlJykuZmlsbCxcbiAgICAgICAgICBmZWF0dXJlLmdldCgnZHJhd2luZ1N0eWxlJykuc3Ryb2tlLFxuICAgICAgICAgIGZlYXR1cmUuZ2V0KCdvZmZzZXRYJyksXG4gICAgICAgICAgZmVhdHVyZS5nZXQoJ29mZnNldFknKSxcbiAgICAgICAgICB0aGlzLm1hcC5wcm9qZWN0aW9uXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFJhZGl1cyhvbEdlb21ldHJ5KTogbnVtYmVyIHtcbiAgICBjb25zdCBsZW5ndGggPSBnZXRMZW5ndGgob2xHZW9tZXRyeSk7XG4gICAgcmV0dXJuIE51bWJlcihsZW5ndGggLyAoMiAqIE1hdGguUEkpKTtcbiAgfVxufVxuIiwiPGRpdj5cbiAgPGRpdiBjbGFzcz1cImdlb21ldHJ5LXR5cGUtdG9nZ2xlIG1hdC10eXBvZ3JhcGh5XCI+XG4gICAgPG1hdC1idXR0b24tdG9nZ2xlLWdyb3VwXG4gICAgICAoY2hhbmdlKT1cIm9uR2VvbWV0cnlUeXBlQ2hhbmdlKCRldmVudC52YWx1ZSlcIlxuICAgICAgW3ZhbHVlXT1cImdlb21ldHJ5VHlwZS5Qb2ludFwiXG4gICAgPlxuICAgICAgPG1hdC1idXR0b24tdG9nZ2xlIFt2YWx1ZV09XCJnZW9tZXRyeVR5cGUuUG9pbnRcIj5cbiAgICAgICAge3sgJ2lnby5nZW8uZHJhdy4nICsgZ2VvbWV0cnlUeXBlLlBvaW50IHwgdHJhbnNsYXRlIH19XG4gICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxuXG4gICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgW3ZhbHVlXT1cImdlb21ldHJ5VHlwZS5MaW5lU3RyaW5nXCI+XG4gICAgICAgIHt7ICdpZ28uZ2VvLmRyYXcuJyArIGdlb21ldHJ5VHlwZS5MaW5lU3RyaW5nIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxuXG4gICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgW3ZhbHVlXT1cImdlb21ldHJ5VHlwZS5Qb2x5Z29uXCI+XG4gICAgICAgIHt7ICdpZ28uZ2VvLmRyYXcuJyArIGdlb21ldHJ5VHlwZS5Qb2x5Z29uIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxuXG4gICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgW3ZhbHVlXT1cImdlb21ldHJ5VHlwZS5DaXJjbGVcIj5cbiAgICAgICAge3sgJ2lnby5nZW8uZHJhdy4nICsgZ2VvbWV0cnlUeXBlLkNpcmNsZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICA8L21hdC1idXR0b24tdG9nZ2xlLWdyb3VwPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiZHJhdy1vcHRpb25zIG1hdC10eXBvZ3JhcGh5XCI+XG4gICAgPG1hdC1zbGlkZS10b2dnbGVcbiAgICAgIFtkaXNhYmxlZF09XCJkcmF3Q29udHJvbElzRGlzYWJsZWRcIlxuICAgICAgW2NoZWNrZWRdPVwiZHJhd0NvbnRyb2xJc0FjdGl2ZVwiXG4gICAgICBbbGFiZWxQb3NpdGlvbl09XCInYmVmb3JlJ1wiXG4gICAgICAoY2hhbmdlKT1cIm9uVG9nZ2xlRHJhd0NvbnRyb2woJGV2ZW50LmNoZWNrZWQpXCJcbiAgICA+XG4gICAgICB7eyAnaWdvLmdlby5kcmF3LmRyYXdDb250cm9sJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cblxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlXG4gICAgICBbY2hlY2tlZF09XCJsYWJlbHNBcmVTaG93blwiXG4gICAgICBbbGFiZWxQb3NpdGlvbl09XCInYmVmb3JlJ1wiXG4gICAgICAoY2hhbmdlKT1cIm9uVG9nZ2xlTGFiZWxzKClcIlxuICAgID5cbiAgICAgIHt7ICdpZ28uZ2VvLmRyYXcudG9nZ2xlTWFwVG9vbHRpcHMnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuXG4gICAgPG1hdC1zbGlkZS10b2dnbGVcbiAgICAgICpuZ0lmPVwiIWlzUG9pbnQoKVwiXG4gICAgICBbY2hlY2tlZF09XCJmcmVlaGFuZE1vZGVcIlxuICAgICAgW2xhYmVsUG9zaXRpb25dPVwiJ2JlZm9yZSdcIlxuICAgICAgKGNoYW5nZSk9XCJvblRvZ2dsZUZyZWVoYW5kTW9kZSgkZXZlbnQpXCJcbiAgICA+XG4gICAgICB7eyAnaWdvLmdlby5kcmF3LmZyZWVoYW5kTW9kZScgfCB0cmFuc2xhdGUgfX1cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG5cbiAgICA8ZGl2IGNsYXNzPVwicmFkaXVzLXVuaXRcIiAqbmdJZj1cImlzQ2lyY2xlKClcIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInJhZGl1c1wiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgIG1pbj1cIjBcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ2lnby5nZW8uc3BhdGlhbEZpbHRlci5yYWRpdXMnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwicmFkaXVzRm9ybUNvbnRyb2xcIlxuICAgICAgICAgIFtyZWFkb25seV09XCJ0aGlzLmZyZWVoYW5kTW9kZVwiXG4gICAgICAgIC8+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ1bml0LWZpZWxkXCI+XG4gICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgW3ZhbHVlXT1cIm1lYXN1cmVVbml0XCJcbiAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uTWVhc3VyZVVuaXRDaGFuZ2UoJGV2ZW50LnZhbHVlKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8bWF0LW9wdGlvblxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IG1lYXN1cmVVbml0IG9mIG1lYXN1cmVVbml0c1wiXG4gICAgICAgICAgICBbdmFsdWVdPVwibWVhc3VyZVVuaXRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7ICdpZ28uZ2VvLm1lYXN1cmUuJyArIG1lYXN1cmVVbml0IHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cblxuICA8ZGl2IGNsYXNzPVwibGF5ZXItc2VsZWN0LWNvbnRhaW5lclwiPlxuICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImxheWVyLXNlbGVjdFwiIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIj5cbiAgICAgIDxtYXQtbGFiZWw+e3sgJ2lnby5nZW8uZHJhdy5sYXllci50aXRsZScgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICNzZWxlY3RlZExheWVyXG4gICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25MYXllckNoYW5nZShzZWxlY3RlZExheWVyLnZhbHVlKVwiXG4gICAgICAgIFt2YWx1ZV09XCJ1cGRhdGVBY3RpdmVMYXllcigpXCJcbiAgICAgID5cbiAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGxheWVyIG9mIGFsbExheWVyc1wiIFt2YWx1ZV09XCJsYXllclwiPlxuICAgICAgICAgIHt7IGxheWVyLnRpdGxlIH19XG4gICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgPG1hdC1vcHRpb24gaWQ9XCJjcmVhdGVOZXdMYXllclwiPlxuICAgICAgICAgIHt7ICdpZ28uZ2VvLmRyYXcubGF5ZXIuY3JlYXRlTmV3TGF5ZXInIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDxidXR0b25cbiAgICAgICpuZ0lmPVwiYWN0aXZlRHJhd2luZ0xheWVyXCJcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgW2NvbG9yXT1cImFjdGl2ZURyYXdpbmdMYXllci52aXNpYmxlID8gJ3ByaW1hcnknIDogJ2RlZmF1bHQnXCJcbiAgICAgIGNvbGxhcHNpYmxlQnV0dG9uXG4gICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxuICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICBbbWF0VG9vbHRpcF09XCJcbiAgICAgICAgYWN0aXZlRHJhd2luZ0xheWVyLnZpc2libGVcbiAgICAgICAgICA/ICgnaWdvLmdlby5sYXllci5oaWRlTGF5ZXInIHwgdHJhbnNsYXRlKVxuICAgICAgICAgIDogKCdpZ28uZ2VvLmxheWVyLnNob3dMYXllcicgfCB0cmFuc2xhdGUpXG4gICAgICBcIlxuICAgICAgKGNsaWNrKT1cImFjdGl2ZURyYXdpbmdMYXllci52aXNpYmxlID0gIWFjdGl2ZURyYXdpbmdMYXllci52aXNpYmxlXCJcbiAgICA+XG4gICAgICA8bWF0LWljb24+XG4gICAgICAgIHt7IGFjdGl2ZURyYXdpbmdMYXllci52aXNpYmxlID8gJ3Zpc2liaWxpdHknIDogJ3Zpc2liaWxpdHlfb2ZmJyB9fVxuICAgICAgPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG4gIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICA8ZGl2PlxuICAgIDxidXR0b25cbiAgICAgICpuZ0lmPVwiYWN0aXZlU3RvcmUuY291bnQkLmdldFZhbHVlKCkgPiAwXCJcbiAgICAgIGNsYXNzPVwiZGVsZXRlQnRuXCJcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgY29sb3I9XCJ3YXJuXCJcbiAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXG4gICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmRyYXcuZGVsZXRlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICBbZGlzYWJsZWRdPVwiKHNlbGVjdGVkRmVhdHVyZXMkIHwgYXN5bmMpLmxlbmd0aCA9PT0gMFwiXG4gICAgICAoY2xpY2spPVwiZGVsZXRlRHJhd2luZ3MoKVwiXG4gICAgPlxuICAgICAgPG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG5cbiAgICA8ZGl2PlxuICAgICAgPGlnby1lbnRpdHktdGFibGVcbiAgICAgICAgI3RhYmxlXG4gICAgICAgIGNsYXNzPVwidGFibGUtY29tcGFjdFwiXG4gICAgICAgIFtzdG9yZV09XCJhY3RpdmVTdG9yZVwiXG4gICAgICAgIFt0ZW1wbGF0ZV09XCJ0YWJsZVRlbXBsYXRlXCJcbiAgICAgID5cbiAgICAgIDwvaWdvLWVudGl0eS10YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImljb24tb3B0aW9uc1wiPlxuICAgIDxtYXQtZm9ybS1maWVsZCAqbmdJZj1cImljb25zLmxlbmd0aCA+PSAxXCI+XG4gICAgICA8bWF0LWxhYmVsPnt7ICdpZ28uZ2VvLmRyYXcuaWNvbicgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgIDxtYXQtc2VsZWN0PlxuICAgICAgICA8bWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJpY29uXCIgY2xhc3M9XCJib3hcIj5cbiAgICAgICAgICAgIDxpbWcgc3JjPVwie3sgaWNvbiB9fVwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlwiIChjbGljayk9XCJvbkljb25DaGFuZ2UoKVwiPnt7XG4gICAgICAgICAgJ2lnby5nZW8uZHJhdy5ub0ljb24nIHwgdHJhbnNsYXRlXG4gICAgICAgIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICA8bWF0LW9wdGlvblxuICAgICAgICAgICpuZ0Zvcj1cImxldCBpY29uX2h0bWwgb2YgaWNvbnNcIlxuICAgICAgICAgIFt2YWx1ZV09XCJpY29uX2h0bWxcIlxuICAgICAgICAgIChjbGljayk9XCJvbkljb25DaGFuZ2UoaWNvbl9odG1sKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm94XCI+XG4gICAgICAgICAgICA8aW1nIHNyYz1cInt7IGljb25faHRtbCB9fVwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiYWN0aW9ucy1jb250YWluZXJcIj5cbiAgICA8YnV0dG9uXG4gICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgIGNvbG9yPVwiYWNjZW50XCJcbiAgICAgIGRpc2FibGVSaXBwbGU9XCJ0cnVlXCJcbiAgICAgIChjbGljayk9XCJvcGVuU2hvcmN1dHNEaWFsb2coKVwiXG4gICAgPlxuICAgICAgPG1hdC1pY29uXG4gICAgICAgIGNsYXNzPVwic2hvcnRjdXRzLWljb25cIlxuICAgICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxuICAgICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8uZHJhdy5zaG9ydGN1dHMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgPmtleWJvYXJkXG4gICAgICA8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuXG4gICAgPGJ1dHRvblxuICAgICAgKm5nSWY9XCJzZWxlY3RlZEZlYXR1cmVzJC52YWx1ZS5sZW5ndGhcIlxuICAgICAgbWF0LXJhaXNlZC1idXR0b25cbiAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAoY2xpY2spPVwib3BlblN0eWxlTW9kYWxEaWFsb2coKVwiXG4gICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5zdHlsZS5zdHlsZU1vZGFsVG9vbHRpcFNlbGVjdGVkJyB8IHRyYW5zbGF0ZVwiXG4gICAgPlxuICAgICAge3sgJ2lnby5nZW8uc3R5bGUuc3R5bGVNb2RhbCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDxtYXQtaWNvblxuICAgICAgICBhcmlhLWhpZGRlbj1cImZhbHNlXCJcbiAgICAgICAgaWNvblBvc2l0aW9uRW5kXG4gICAgICAgIGNsYXNzPVwic3R5bGUtaWNvblwiXG4gICAgICAgIFttYXRCYWRnZV09XCJzZWxlY3RlZEZlYXR1cmVzJC52YWx1ZS5sZW5ndGhcIlxuICAgICAgICBtYXRCYWRnZUNvbG9yPVwid2FyblwiXG4gICAgICAgIG1hdEJhZGdlU2l6ZT1cIm1lZGl1bVwiXG4gICAgICAgID5wYWxldHRlXG4gICAgICA8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
1147
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhdy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9kcmF3L2RyYXcvZHJhdy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9kcmF3L2RyYXcvZHJhdy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsT0FBTyxFQUNQLEtBQUssRUFDTCxLQUFLLEVBQ0wsVUFBVSxFQUNWLE9BQU8sRUFDUixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsV0FBVyxFQUNYLG1CQUFtQixFQUNuQixrQkFBa0IsRUFDbEIsa0JBQWtCLEVBRW5CLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQ0wsaUNBQWlDLEVBRWpDLHFCQUFxQixFQUN0QixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxN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Q2QsU0FBUzt3QkFDVCxpQkFBaUI7cUJBQ2xCLGFBQ1U7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlDQUFpQzs0QkFDMUMsUUFBUSxFQUFFO2dDQUNSLDRCQUE0QixFQUFFLElBQUk7NkJBQ0s7eUJBQzFDO3FCQUNGOzBNQVVRLEdBQUc7c0JBQVgsS0FBSztnQkFHRixNQUFNO3NCQURULEtBQUs7Z0JBVUYsWUFBWTtzQkFEZixLQUFLO2dCQVVGLGtCQUFrQjtzQkFEckIsS0FBSztnQkFTSSxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBRUcsU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBRUcsUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQTZDcUIsTUFBTTtzQkFBakMsU0FBUzt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYW5pbWF0ZSxcbiAgc3RhdGUsXG4gIHN0eWxlLFxuICB0cmFuc2l0aW9uLFxuICB0cmlnZ2VyXG59IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgQXN5bmNQaXBlLCBOZ0ZvciwgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBGb3Jtc01vZHVsZSxcbiAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgVW50eXBlZEZvcm1CdWlsZGVyLFxuICBVbnR5cGVkRm9ybUNvbnRyb2wsXG4gIFVudHlwZWRGb3JtR3JvdXBcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0QmFkZ2VNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9iYWRnZSc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHtcbiAgTUFUX0JVVFRPTl9UT0dHTEVfREVGQVVMVF9PUFRJT05TLFxuICBNYXRCdXR0b25Ub2dnbGVEZWZhdWx0T3B0aW9ucyxcbiAgTWF0QnV0dG9uVG9nZ2xlTW9kdWxlXG59IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbi10b2dnbGUnO1xuaW1wb3J0IHsgTWF0T3B0aW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgTWF0RGl2aWRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpdmlkZXInO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IE1hdFNlbGVjdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5pbXBvcnQgeyBNYXRTbGlkZVRvZ2dsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NsaWRlLXRvZ2dsZSc7XG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5cbmltcG9ydCB7XG4gIEVudGl0eVJlY29yZCxcbiAgRW50aXR5VGFibGVCdXR0b24sXG4gIEVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIsXG4gIEVudGl0eVRhYmxlQ29tcG9uZW50LFxuICBFbnRpdHlUYWJsZVRlbXBsYXRlXG59IGZyb20gJ0BpZ28yL2NvbW1vbi9lbnRpdHknO1xuaW1wb3J0IHsgTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZS9sYW5ndWFnZSc7XG5pbXBvcnQgeyBJZ29MYW5ndWFnZU1vZHVsZSB9IGZyb20gJ0BpZ28yL2NvcmUvbGFuZ3VhZ2UnO1xuXG5pbXBvcnQgT2xGZWF0dXJlIGZyb20gJ29sL0ZlYXR1cmUnO1xuaW1wb3J0IE9sT3ZlcmxheSBmcm9tICdvbC9PdmVybGF5JztcbmltcG9ydCBPbEdlb0pTT04gZnJvbSAnb2wvZm9ybWF0L0dlb0pTT04nO1xuaW1wb3J0IE9sQ2lyY2xlIGZyb20gJ29sL2dlb20vQ2lyY2xlJztcbmltcG9ydCB0eXBlIHsgVHlwZSB9IGZyb20gJ29sL2dlb20vR2VvbWV0cnknO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBPbEdlb21ldHJ5IH0gZnJvbSAnb2wvZ2VvbS9HZW9tZXRyeSc7XG5pbXBvcnQgT2xQb2ludCBmcm9tICdvbC9nZW9tL1BvaW50JztcbmltcG9ydCBQb2x5Z29uLCB7IGZyb21DaXJjbGUgfSBmcm9tICdvbC9nZW9tL1BvbHlnb24nO1xuaW1wb3J0ICogYXMgb2xwcm9qIGZyb20gJ29sL3Byb2onO1xuaW1wb3J0IHsgdHJhbnNmb3JtIH0gZnJvbSAnb2wvcHJvaic7XG5pbXBvcnQgeyBWZWN0b3JTb3VyY2VFdmVudCBhcyBPbFZlY3RvclNvdXJjZUV2ZW50IH0gZnJvbSAnb2wvc291cmNlL1ZlY3Rvcic7XG5pbXBvcnQgT2xWZWN0b3JTb3VyY2UgZnJvbSAnb2wvc291cmNlL1ZlY3Rvcic7XG5pbXBvcnQgeyBnZXREaXN0YW5jZSwgZ2V0TGVuZ3RoIH0gZnJvbSAnb2wvc3BoZXJlJztcbmltcG9ydCAqIGFzIE9sU3R5bGUgZnJvbSAnb2wvc3R5bGUnO1xuXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlyc3QsIHNraXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEZlYXR1cmVEYXRhU291cmNlIH0gZnJvbSAnLi4vLi4vZGF0YXNvdXJjZS9zaGFyZWQvZGF0YXNvdXJjZXMvZmVhdHVyZS1kYXRhc291cmNlJztcbmltcG9ydCB7XG4gIEZFQVRVUkUsXG4gIEZlYXR1cmVNb3Rpb24sXG4gIEZlYXR1cmVTdG9yZSxcbiAgRmVhdHVyZVN0b3JlTG9hZGluZ1N0cmF0ZWd5LFxuICBGZWF0dXJlU3RvcmVTZWxlY3Rpb25TdHJhdGVneSxcbiAgZmVhdHVyZVRvT2wsXG4gIHRyeUFkZExvYWRpbmdTdHJhdGVneSxcbiAgdHJ5QWRkU2VsZWN0aW9uU3RyYXRlZ3lcbn0gZnJvbSAnLi4vLi4vZmVhdHVyZSc7XG5pbXBvcnQgeyB0cnlCaW5kU3RvcmVMYXllciB9IGZyb20gJy4uLy4uL2ZlYXR1cmUvc2hhcmVkL2ZlYXR1cmUtc3RvcmUudXRpbHMnO1xuaW1wb3J0IHsgRHJhd0NvbnRyb2wgfSBmcm9tICcuLi8uLi9nZW9tZXRyeS9zaGFyZWQvY29udHJvbHMvZHJhdyc7XG5pbXBvcnQgeyBWZWN0b3JMYXllciB9IGZyb20gJy4uLy4uL2xheWVyL3NoYXJlZC9sYXllcnMvdmVjdG9yLWxheWVyJztcbmltcG9ydCB7IElnb01hcCB9IGZyb20gJy4uLy4uL21hcC9zaGFyZWQvbWFwJztcbmltcG9ydCB7XG4gIE1lYXN1cmVBcmVhVW5pdCxcbiAgTWVhc3VyZUFyZWFVbml0QWJicmV2aWF0aW9uLFxuICBNZWFzdXJlTGVuZ3RoVW5pdCxcbiAgTWVhc3VyZUxlbmd0aFVuaXRBYmJyZXZpYXRpb25cbn0gZnJvbSAnLi4vLi4vbWVhc3VyZS9zaGFyZWQvbWVhc3VyZS5lbnVtJztcbmltcG9ydCB7IGdldFRvb2x0aXBzT2ZPbEdlb21ldHJ5IH0gZnJvbSAnLi4vLi4vbWVhc3VyZS9zaGFyZWQvbWVhc3VyZS51dGlscyc7XG5pbXBvcnQge1xuICBtZWFzdXJlT2xHZW9tZXRyeUFyZWEsXG4gIG1lYXN1cmVPbEdlb21ldHJ5TGVuZ3RoLFxuICBtZXRlcnNUb1VuaXQsXG4gIHNxdWFyZU1ldGVyc1RvVW5pdFxufSBmcm9tICcuLi8uLi9tZWFzdXJlL3NoYXJlZC9tZWFzdXJlLnV0aWxzJztcbmltcG9ydCB7IEZvbnRUeXBlIH0gZnJvbSAnLi4vLi4vc3R5bGUvc2hhcmVkL2ZvbnQuZW51bSc7XG5pbXBvcnQgeyBTdHlsZU1vZGFsRHJhd2luZ0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL3N0eWxlL3N0eWxlLW1vZGFsL2RyYXdpbmcvc3R5bGUtbW9kYWwtZHJhd2luZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3R5bGVNb2RhbERhdGEgfSBmcm9tICcuLi8uLi9zdHlsZS9zdHlsZS1tb2RhbC9zaGFyZWQvc3R5bGUtbW9kYWwuaW50ZXJmYWNlJztcbmltcG9ydCB7IERyYXdTdHlsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zdHlsZS9zdHlsZS1zZXJ2aWNlL2RyYXctc3R5bGUuc2VydmljZSc7XG5pbXBvcnQgeyBEcmF3SWNvblNlcnZpY2UgfSBmcm9tICcuLi9zaGFyZWQvZHJhdy1pY29uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29vcmRpbmF0ZXNVbml0LCBHZW9tZXRyeVR5cGUsIExhYmVsVHlwZSB9IGZyb20gJy4uL3NoYXJlZC9kcmF3LmVudW0nO1xuaW1wb3J0IHsgRHJhdywgRmVhdHVyZVdpdGhEcmF3IH0gZnJvbSAnLi4vc2hhcmVkL2RyYXcuaW50ZXJmYWNlJztcbmltcG9ydCB7IEREdG9ETVMsIGNyZWF0ZUludGVyYWN0aW9uU3R5bGUgfSBmcm9tICcuLi9zaGFyZWQvZHJhdy51dGlscyc7XG5pbXBvcnQgeyBEcmF3TGF5ZXJQb3B1cENvbXBvbmVudCB9IGZyb20gJy4vZHJhdy1sYXllci1wb3B1cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRHJhd1BvcHVwQ29tcG9uZW50IH0gZnJvbSAnLi9kcmF3LXBvcHVwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEcmF3U2hvcmN1dHNDb21wb25lbnQgfSBmcm9tICcuL2RyYXctc2hvcmN1dHMuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaWdvLWRyYXcnLFxuICBhbmltYXRpb25zOiBbXG4gICAgdHJpZ2dlcignb3BlbkNsb3NlJywgW1xuICAgICAgc3RhdGUoXG4gICAgICAgICdvcGVuJyxcbiAgICAgICAgc3R5bGUoe1xuICAgICAgICAgIG9wYWNpdHk6IDFcbiAgICAgICAgfSlcbiAgICAgICksXG4gICAgICBzdGF0ZShcbiAgICAgICAgJ2Nsb3NlZCcsXG4gICAgICAgIHN0eWxlKHtcbiAgICAgICAgICBvcGFjaXR5OiAwXG4gICAgICAgIH0pXG4gICAgICApLFxuICAgICAgdHJhbnNpdGlvbignb3BlbiA9PiBjbG9zZWQnLCBbYW5pbWF0ZSgnNjAwbXMgZWFzZScpXSksXG4gICAgICB0cmFuc2l0aW9uKCdjbG9zZWQgPT4gb3BlbicsIFthbmltYXRlKCc4MDBtcyBlYXNlJyldKVxuICAgIF0pXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9kcmF3LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZHJhdy5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIE1hdEJ1dHRvblRvZ2dsZU1vZHVsZSxcbiAgICBNYXRTbGlkZVRvZ2dsZU1vZHVsZSxcbiAgICBOZ0lmLFxuICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcbiAgICBNYXRJbnB1dE1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIE1hdFNlbGVjdE1vZHVsZSxcbiAgICBOZ0ZvcixcbiAgICBNYXRPcHRpb25Nb2R1bGUsXG4gICAgTWF0RGl2aWRlck1vZHVsZSxcbiAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIEVudGl0eVRhYmxlQ29tcG9uZW50LFxuICAgIE1hdEJhZGdlTW9kdWxlLFxuICAgIEFzeW5jUGlwZSxcbiAgICBJZ29MYW5ndWFnZU1vZHVsZVxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBNQVRfQlVUVE9OX1RPR0dMRV9ERUZBVUxUX09QVElPTlMsXG4gICAgICB1c2VWYWx1ZToge1xuICAgICAgICBoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yOiB0cnVlXG4gICAgICB9IHNhdGlzZmllcyBNYXRCdXR0b25Ub2dnbGVEZWZhdWx0T3B0aW9uc1xuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBEcmF3Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvKipcbiAgICogVGFibGUgdGVtcGxhdGVcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgdGFibGVUZW1wbGF0ZTogRW50aXR5VGFibGVUZW1wbGF0ZTtcblxuICBwdWJsaWMgZ2VvbWV0cnlUeXBlID0gR2VvbWV0cnlUeXBlOyAvLyBSZWZlcmVuY2UgdG8gdGhlIEdlb21ldHJ5VHlwZSBlbnVtXG4gIEBJbnB1dCgpIG1hcDogSWdvTWFwOyAvLyBNYXAgdG8gZHJhdyBvblxuXG4gIEBJbnB1dCgpXG4gIGdldCBzdG9yZXMoKTogRmVhdHVyZVN0b3JlPEZlYXR1cmVXaXRoRHJhdz5bXSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0b3JlcztcbiAgfVxuICBzZXQgc3RvcmVzKHZhbHVlOiBGZWF0dXJlU3RvcmU8RmVhdHVyZVdpdGhEcmF3PltdKSB7XG4gICAgdGhpcy5fc3RvcmVzID0gdmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBfc3RvcmVzOiBGZWF0dXJlU3RvcmU8RmVhdHVyZVdpdGhEcmF3PltdID0gW107XG5cbiAgQElucHV0KClcbiAgZ2V0IGRyYXdDb250cm9scygpOiBbc3RyaW5nLCBEcmF3Q29udHJvbF1bXSB7XG4gICAgcmV0dXJuIHRoaXMuX2RyYXdDb250cm9scztcbiAgfVxuICBzZXQgZHJhd0NvbnRyb2xzKHZhbHVlOiBbc3RyaW5nLCBEcmF3Q29udHJvbF1bXSkge1xuICAgIHRoaXMuX2RyYXdDb250cm9scyA9IHZhbHVlO1xuICB9XG4gIHByaXZhdGUgX2RyYXdDb250cm9scyA9IFtdO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBhY3RpdmVEcmF3aW5nTGF5ZXIoKTogVmVjdG9yTGF5ZXIge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmVEcmF3aW5nTGF5ZXI7XG4gIH1cbiAgc2V0IGFjdGl2ZURyYXdpbmdMYXllcih2YWx1ZTogVmVjdG9yTGF5ZXIpIHtcbiAgICB0aGlzLl9hY3RpdmVEcmF3aW5nTGF5ZXIgPSB2YWx1ZTtcbiAgfVxuICBwcml2YXRlIF9hY3RpdmVEcmF3aW5nTGF5ZXI6IFZlY3RvckxheWVyO1xuXG4gIEBPdXRwdXQoKSBhY3RpdmVMYXllckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VmVjdG9yTGF5ZXI+KCk7XG4gIEBPdXRwdXQoKSBkcmF3Q29udHJvbHNFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8W3N0cmluZywgRHJhd0NvbnRyb2xdW10+KCk7XG4gIEBPdXRwdXQoKSBsYXllcnNJREV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgQE91dHB1dCgpIGZpbGxDb2xvcjogc3RyaW5nO1xuICBAT3V0cHV0KCkgc3Ryb2tlQ29sb3I6IHN0cmluZztcbiAgQE91dHB1dCgpIHN0cm9rZVdpZHRoOiBudW1iZXI7XG5cbiAgQE91dHB1dCgpIGZvbnRTaXplOiBzdHJpbmc7XG4gIEBPdXRwdXQoKSBmb250U3R5bGU6IHN0cmluZztcblxuICBwdWJsaWMgYWN0aXZlU3RvcmU6IEZlYXR1cmVTdG9yZTxGZWF0dXJlV2l0aERyYXc+O1xuICBwcml2YXRlIGxheWVyQ291bnRlcklEOiBudW1iZXIgPSAwO1xuICBwdWJsaWMgZHJhdyQ6IEJlaGF2aW9yU3ViamVjdDxEcmF3PiA9IG5ldyBCZWhhdmlvclN1YmplY3Qoe30pOyAvLyBPYnNlcnZhYmxlIG9mIGRyYXdcbiAgcHJpdmF0ZSBhY3RpdmVEcmF3aW5nTGF5ZXJTb3VyY2UgPSBuZXcgT2xWZWN0b3JTb3VyY2UoKTtcbiAgcHJpdmF0ZSBhY3RpdmVEcmF3Q29udHJvbDogRHJhd0NvbnRyb2w7XG4gIHByaXZhdGUgZHJhd0VuZCQkOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgZHJhd1NlbGVjdCQkOiBTdWJzY3JpcHRpb247XG4gIHB1YmxpYyBzZWxlY3RlZEZlYXR1cmVzJDogQmVoYXZpb3JTdWJqZWN0PEZlYXR1cmVXaXRoRHJhd1tdPiA9XG4gICAgbmV3IEJlaGF2aW9yU3ViamVjdChbXSk7XG4gIHB1YmxpYyBmaWxsRm9ybTogc3RyaW5nO1xuICBwdWJsaWMgc3Ryb2tlRm9ybTogc3RyaW5nO1xuICBwdWJsaWMgZHJhd0NvbnRyb2xJc0Rpc2FibGVkOiBib29sZWFuID0gdHJ1ZTtcbiAgcHVibGljIGRyYXdDb250cm9sSXNBY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGxhYmVsc0FyZVNob3duOiBib29sZWFuO1xuICBwdWJsaWMgZnJlZWhhbmRNb2RlID0gZmFsc2U7XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9ucyQkOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gIHB1YmxpYyBwb3NpdGlvbjogc3RyaW5nID0gJ2JvdHRvbSc7XG4gIHB1YmxpYyBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xuICBwdWJsaWMgaWNvbnM6IEFycmF5PHN0cmluZz47XG4gIHB1YmxpYyBpY29uOiBzdHJpbmc7XG5cbiAgcHVibGljIHJhZGl1c0Zvcm1Db250cm9sID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgxMDAwKTtcbiAgcHVibGljIG1lYXN1cmVVbml0OiBNZWFzdXJlTGVuZ3RoVW5pdCA9IE1lYXN1cmVMZW5ndGhVbml0Lk1ldGVycztcbiAgcHVibGljIHJhZGl1c0Zvcm1Db250cm9sQ2hhbmdlJCQ6IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHVibGljIHByZWRlZmluZWRSYWRpdXMkOiBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoXG4gICAgdW5kZWZpbmVkXG4gICk7XG4gIHB1YmxpYyByYWRpdXNEcmF3RW5kJDogQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFxuICAgIHVuZGVmaW5lZFxuICApO1xuXG4gIC8qKlxuICAgKiBBdmFpbGFibGUgbWVhc3VyZSB1bml0cyBmb3IgdGhlIG1lYXN1cmUgdHlwZSBnaXZlblxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldCBtZWFzdXJlVW5pdHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbTWVhc3VyZUxlbmd0aFVuaXQuTWV0ZXJzLCBNZWFzdXJlTGVuZ3RoVW5pdC5LaWxvbWV0ZXJzXTtcbiAgfVxuICBwcml2YXRlIG51bWJlck9mRHJhd2luZ3M6IG51bWJlcjtcbiAgcHVibGljIGlzQ3JlYXRpbmdOZXdMYXllcjogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGN1cnJHZW9tZXRyeVR5cGUgPSB0aGlzLmdlb21ldHJ5VHlwZS5Qb2ludCBhcyBhbnk7XG5cbiAgQFZpZXdDaGlsZCgnc2VsZWN0ZWRMYXllcicpIHNlbGVjdDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGxhbmd1YWdlU2VydmljZTogTGFuZ3VhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIGRyYXdTdHlsZVNlcnZpY2U6IERyYXdTdHlsZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICBwcml2YXRlIGRyYXdJY29uU2VydmljZTogRHJhd0ljb25TZXJ2aWNlXG4gICkge1xuICAgIHRoaXMudGFibGVUZW1wbGF0ZSA9IHtcbiAgICAgIHNlbGVjdGlvbjogdHJ1ZSxcbiAgICAgIHNlbGVjdE1hbnk6IHRydWUsXG4gICAgICBzZWxlY3Rpb25DaGVja2JveDogdHJ1ZSxcbiAgICAgIHNvcnQ6IHRydWUsXG4gICAgICBmaXhlZEhlYWRlcjogdHJ1ZSxcbiAgICAgIHRhYmxlSGVpZ2h0OiAnYXV0bycsXG4gICAgICBjb2x1bW5zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnRHJhd2luZycsXG4gICAgICAgICAgdGl0bGU6IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmRyYXcubGFiZWxzJyksXG4gICAgICAgICAgdmFsdWVBY2Nlc3NvcjogKGZlYXR1cmU6IEZlYXR1cmVXaXRoRHJhdykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGZlYXR1cmUucHJvcGVydGllcy5kcmF3O1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdFZGl0aW9uJyxcbiAgICAgICAgICB0aXRsZTogJycsXG4gICAgICAgICAgc29ydDogZmFsc2UsXG4gICAgICAgICAgdmFsdWVBY2Nlc3NvcjogKGZlYXR1cmU6IEZlYXR1cmVXaXRoRHJhdykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVkaXRNb2RlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBpY29uOiAnZWRpdCcsXG4gICAgICAgICAgICAgICAgY29sb3I6ICdwcmltYXJ5JyxcbiAgICAgICAgICAgICAgICBjbGljazogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5lZGl0TGFiZWxEcmF3aW5nKGZlYXR1cmUpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc3R5bGU6ICdtYXQtaWNvbi1idXR0b24nXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0gYXMgRW50aXR5VGFibGVCdXR0b25bXTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlbmRlcmVyOiBFbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyLkJ1dHRvbkdyb3VwXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9O1xuICAgIHRoaXMuYnVpbGRGb3JtKCk7XG4gICAgdGhpcy5maWxsQ29sb3IgPSB0aGlzLmRyYXdTdHlsZVNlcnZpY2UuZ2V0RmlsbENvbG9yKCk7XG4gICAgdGhpcy5zdHJva2VDb2xvciA9IHRoaXMuZHJhd1N0eWxlU2VydmljZS5nZXRTdHJva2VDb2xvcigpO1xuICAgIHRoaXMuc3Ryb2tlV2lkdGggPSB0aGlzLmRyYXdTdHlsZVNlcnZpY2UuZ2V0U3Ryb2tlV2lkdGgoKTtcbiAgICB0aGlzLmxhYmVsc0FyZVNob3duID0gdGhpcy5kcmF3U3R5bGVTZXJ2aWNlLmdldExhYmVsc0FyZVNob3duKCk7XG4gICAgdGhpcy5pY29ucyA9IHRoaXMuZHJhd0ljb25TZXJ2aWNlLmdldEljb25zKCk7XG4gICAgdGhpcy5pY29uID0gdGhpcy5kcmF3U3R5bGVTZXJ2aWNlLmdldEljb24oKTtcblxuICAgIHRoaXMuZm9udFNpemUgPSB0aGlzLmRyYXdTdHlsZVNlcnZpY2UuZ2V0Rm9udFNpemUoKTtcbiAgICB0aGlzLmZvbnRTdHlsZSA9IHRoaXMuZHJhd1N0eWxlU2VydmljZS5nZXRGb250U3R5bGUoKTtcbiAgfVxuXG4gIC8vIEluaXRpYWxpemUgdGhlIHN0b3JlIHRoYXQgd2lsbCBjb250YWluIHRoZSBlbnRpdGllcyBhbmQgY3JlYXRlIHRoZSBEcmF3IGNvbnRyb2xcbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKCF0aGlzLnN0b3Jlcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuYWN0aXZlU3RvcmUgPSBuZXcgRmVhdHVyZVN0b3JlPEZlYXR1cmVXaXRoRHJhdz4oW10sIHtcbiAgICAgICAgbWFwOiB0aGlzLm1hcFxuICAgICAgfSk7XG4gICAgICB0aGlzLmluaXRTdG9yZSgpO1xuICAgICAgdGhpcy5hY3RpdmVEcmF3Q29udHJvbCA9IHRoaXMuY3JlYXRlRHJhd0NvbnRyb2woXG4gICAgICAgIHRoaXMuZmlsbENvbG9yLFxuICAgICAgICB0aGlzLnN0cm9rZUNvbG9yLFxuICAgICAgICB0aGlzLnN0cm9rZVdpZHRoXG4gICAgICApO1xuICAgICAgdGhpcy5hY3RpdmVEcmF3Q29udHJvbC5zZXRHZW9tZXRyeVR5cGUodGhpcy5nZW9tZXRyeVR5cGUuUG9pbnQgYXMgYW55KTtcbiAgICAgIHRoaXMudG9nZ2xlRHJhd0NvbnRyb2woKTtcbiAgICAgIHRoaXMuc3RvcmVzLnB1c2godGhpcy5hY3RpdmVTdG9yZSk7XG4gICAgICB0aGlzLmRyYXdDb250cm9scy5wdXNoKFtcbiAgICAgICAgdGhpcy5hY3RpdmVEcmF3aW5nTGF5ZXIuaWQsXG4gICAgICAgIHRoaXMuYWN0aXZlRHJhd0NvbnRyb2xcbiAgICAgIF0pO1xuICAgICAgdGhpcy5kcmF3Q29udHJvbHNFdmVudC5lbWl0KHRoaXMuZHJhd0NvbnRyb2xzKTtcbiAgICAgIHRoaXMubGF5ZXJzSURFdmVudC5lbWl0KHRoaXMuYWN0aXZlRHJhd2luZ0xheWVyLmlkKTtcbiAgICAgIHRoaXMub25MYXllckNoYW5nZSh0aGlzLmFjdGl2ZURyYXdpbmdMYXllcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWN0aXZlU3RvcmUgPSB0aGlzLnN0b3Jlcy5maW5kKFxuICAgICAgICAoc3RvcmUpID0+IHN0b3JlLmxheWVyLmlkID09PSB0aGlzLmFjdGl2ZURyYXdpbmdMYXllci5pZFxuICAgICAgKTtcbiAgICAgIHRoaXMuYWN0aXZlRHJhd0NvbnRyb2wgPSB0aGlzLmRyYXdDb250cm9scy5maW5kKFxuICAgICAgICAoZGMpID0+IGRjWzBdID09PSB0aGlzLmFjdGl2ZURyYXdpbmdMYXllci5pZFxuICAgICAgKVsxXTtcbiAgICAgIHRoaXMuZGVhY3RpdmF0ZURyYXdDb250cm9sKCk7XG4gICAgICB0aGlzLmFsbExheWVycy5mb3JFYWNoKChsYXllcikgPT4ge1xuICAgICAgICBpZiAobGF5ZXIuaWQgIT09IHRoaXMuYWN0aXZlRHJhd2luZ0xheWVyLmlkKSB7XG4gICAgICAgICAgbGF5ZXIub3BhY2l0eSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHN0b3JlID0gdGhpcy5zdG9yZXMuZmluZCgocykgPT4gcy5sYXllci5pZCA9PT0gbGF5ZXIuaWQpO1xuXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucyQkLnB1c2goXG4gICAgICAgICAgc3RvcmUuc3RhdGVWaWV3XG4gICAgICAgICAgICAubWFueUJ5JCgocmVjb3JkOiBFbnRpdHlSZWNvcmQ8RmVhdHVyZVdpdGhEcmF3PikgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gcmVjb3JkLnN0YXRlLnNlbGVjdGVkID09PSB0cnVlO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5waXBlKGZpcnN0KCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZWNvcmRzOiBFbnRpdHlSZWNvcmQ8RmVhdHVyZVdpdGhEcmF3PltdKSA9PiB7XG4gICAgICAgICAgICAgIHJlY29yZHMuZm9yRWFjaCgocmVjb3JkKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVjb3JkLnN0YXRlLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMkJC5wdXNoKFxuICAgICAgICAgIHN0b3JlLnN0YXRlVmlld1xuICAgICAgICAgICAgLm1hbnlCeSQoKHJlY29yZDogRW50aXR5UmVjb3JkPEZlYXR1cmVXaXRoRHJhdz4pID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlY29yZC5zdGF0ZS5zZWxlY3RlZCA9PT0gdHJ1ZTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgc2tpcCgxKSAvLyBTa2lwIGluaXRpYWwgZW1pc3Npb25cbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlY29yZHM6IEVudGl0eVJlY29yZDxGZWF0dXJlV2l0aERyYXc+W10pID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZlYXR1cmVzJC5uZXh0KFxuICAgICAgICAgICAgICAgIHJlY29yZHMubWFwKChyZWNvcmQpID0+IHJlY29yZC5lbnRpdHkpXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucyQkLnB1c2goXG4gICAgICAgICAgc3RvcmUuY291bnQkLnN1YnNjcmliZSgoY250KSA9PiB7XG4gICAgICAgICAgICBjbnQgPj0gMVxuICAgICAgICAgICAgICA/ICh0aGlzLmFjdGl2ZVN0b3JlLmxheWVyLm9wdGlvbnMuc2hvd0luTGF5ZXJMaXN0ID0gdHJ1ZSlcbiAgICAgICAgICAgICAgOiAodGhpcy5hY3RpdmVTdG9yZS5sYXllci5vcHRpb25zLnNob3dJbkxheWVyTGlzdCA9IGZhbHNlKTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICB0aGlzLm9uTGF5ZXJDaGFuZ2UodGhpcy5hY3RpdmVEcmF3aW5nTGF5ZXIpO1xuICAgIH1cblxuICAgIHRoaXMucmFkaXVzRm9ybUNvbnRyb2xDaGFuZ2UkJCA9XG4gICAgICB0aGlzLnJhZGl1c0Zvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZURyYXdDb250cm9sLmlzcHJlZGVmaW5lZFJhZGl1cyQuZ2V0VmFsdWUoKSkge1xuICAgICAgICAgIHRoaXMuY2hhbmdlUmFkaXVzKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHRoZSBkcmF3aW5nIGxheWVyIGFuZCB0aGUgaW50ZXJhY3Rpb25zXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5hbGxMYXllcnMuZm9yRWFjaCgobGF5ZXIpID0+IChsYXllci5vcGFjaXR5ID0gMSkpO1xuICAgIHRoaXMuYWN0aXZlU3RvcmUuc3RhdGUudXBkYXRlQWxsKHsgc2VsZWN0ZWQ6IGZhbHNlIH0pO1xuICAgIHRoaXMuZGVhY3RpdmF0ZURyYXdDb250cm9sKCk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zJCQubWFwKChzKSA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICAgIHRoaXMucmFkaXVzRm9ybUNvbnRyb2xDaGFuZ2UkJC51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIERyYXcgQ29udHJvbFxuICAgKiBAcGFyYW0gZmlsbENvbG9yIHRoZSBmaWxsIGNvbG9yXG4gICAqIEBwYXJhbSBzdHJva2VDb2xvciB0aGUgc3Ryb2tlIGNvbG9yXG4gICAqIEBwYXJhbSBzdHJva2VXaWR0aCB0aGUgc3Ryb2tlIHdpZHRoXG4gICAqIEByZXR1cm5zIGEgRHJhdyBDb250cm9sXG4gICAqL1xuICBjcmVhdGVEcmF3Q29udHJvbChcbiAgICBmaWxsQ29sb3I/OiBzdHJpbmcsXG4gICAgc3Ryb2tlQ29sb3I/OiBzdHJpbmcsXG4gICAgc3Ryb2tlV2lkdGg/OiBudW1iZXJcbiAgKSB7XG4gICAgY29uc3QgYWN0aXZlRHJhd0NvbnRyb2wgPSBuZXcgRHJhd0NvbnRyb2woe1xuICAgICAgZ2VvbWV0cnlUeXBlOiB1bmRlZmluZWQsXG4gICAgICBkcmF3aW5nTGF5ZXJTb3VyY2U6IHRoaXMuYWN0aXZlRHJhd2luZ0xheWVyU291cmNlLFxuICAgICAgZHJhd2luZ0xheWVyU3R5bGU6IG5ldyBPbFN0eWxlLlN0eWxlKHt9KSxcbiAgICAgIGludGVyYWN0aW9uU3R5bGU6IGNyZWF0ZUludGVyYWN0aW9uU3R5bGUoXG4gICAgICAgIGZpbGxDb2xvcixcbiAgICAgICAgc3Ryb2tlQ29sb3IsXG4gICAgICAgIHN0cm9rZVdpZHRoXG4gICAgICApXG4gICAgfSk7XG4gICAgcmV0dXJuIGFjdGl2ZURyYXdDb250cm9sO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3JlIGluaXRpYWxpemF0aW9uLCBpbmNsdWRpbmcgZHJhd2luZyBsYXllciBjcmVhdGlvblxuICAgKi9cblxuICBwcml2YXRlIGluaXRTdG9yZShuZXdUaXRsZT86IHN0cmluZywgaXNOZXdMYXllcj86IGJvb2xlYW4pIHtcbiAgICB0aGlzLmNyZWF0ZUxheWVyKG5ld1RpdGxlLCBpc05ld0xheWVyKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMkJC5wdXNoKFxuICAgICAgdGhpcy5hY3RpdmVTdG9yZS5zdGF0ZVZpZXdcbiAgICAgICAgLm1hbnlCeSQoKHJlY29yZDogRW50aXR5UmVjb3JkPEZlYXR1cmVXaXRoRHJhdz4pID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVjb3JkLnN0YXRlLnNlbGVjdGVkID09PSB0cnVlO1xuICAgICAgICB9KVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBza2lwKDEpIC8vIFNraXAgaW5pdGlhbCBlbWlzc2lvblxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlY29yZHM6IEVudGl0eVJlY29yZDxGZWF0dXJlV2l0aERyYXc+W10pID0+IHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLm5leHQocmVjb3Jkcy5tYXAoKHJlY29yZCkgPT4gcmVjb3JkLmVudGl0eSkpO1xuICAgICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMkJC5wdXNoKFxuICAgICAgdGhpcy5hY3RpdmVTdG9yZS5jb3VudCQuc3Vic2NyaWJlKChjbnQpID0+IHtcbiAgICAgICAgY250ID49IDFcbiAgICAgICAgICA/ICh0aGlzLmFjdGl2ZVN0b3JlLmxheWVyLm9wdGlvbnMuc2hvd0luTGF5ZXJMaXN0ID0gdHJ1ZSlcbiAgICAgICAgICA6ICh0aGlzLmFjdGl2ZVN0b3JlLmxheWVyLm9wdGlvbnMuc2hvd0luTGF5ZXJMaXN0ID0gZmFsc2UpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW4gdGhlIHN0eWxlIG1vZGFsIGRpYWxvZyBib3hcbiAgICovXG4gIG9wZW5TdHlsZU1vZGFsRGlhbG9nKCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gb3BlbiB0aGUgZGlhbG9nIGJveCB1c2VkIHRvIHN0eWxlIGZlYXR1cmVzXG4gICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFN0eWxlTW9kYWxEcmF3aW5nQ29tcG9uZW50LCB7XG4gICAgICAgIGRpc2FibGVDbG9zZTogZmFsc2UsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBmZWF0dXJlczogdGhpcy5zZWxlY3RlZEZlYXR1cmVzJC5nZXRWYWx1ZSgpLFxuICAgICAgICAgIGljb25zOiB0aGlzLmljb25zLFxuICAgICAgICAgIGljb246IHRoaXMuaWNvblxuICAgICAgICB9LFxuICAgICAgICBhdXRvRm9jdXM6IGZhbHNlXG4gICAgICB9KTtcblxuICAgICAgLy8gd2hlbiBkaWFsb2cgYm94IGlzIGNsb3NlZCwgZ2V0IGxhYmVsIGFuZCBzZXQgaXQgdG8gZ2VvbWV0cnlcbiAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgoZGF0YTogU3R5bGVNb2RhbERhdGEpID0+IHtcbiAgICAgICAgLy8gY2hlY2tzIGlmIHRoZSB1c2VyIGNsaWNrZWQgb2tcbiAgICAgICAgaWYgKGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5jb25maXJtRmxhZykge1xuICAgICAgICAgIHRoaXMub25Gb250Q2hhbmdlKHRoaXMubGFiZWxzQXJlU2hvd24sIGRhdGEuZm9udFNpemUsIGRhdGEuZm9udFN0eWxlKTtcbiAgICAgICAgICB0aGlzLm9uQ29sb3JDaGFuZ2UoXG4gICAgICAgICAgICB0aGlzLmxhYmVsc0FyZVNob3duLFxuICAgICAgICAgICAgdGhpcy5pY29uID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICAgICAgZGF0YS5maWxsQ29sb3IsXG4gICAgICAgICAgICBkYXRhLnN0cm9rZUNvbG9yXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLm9uT2Zmc2V0TGFiZWxDaGFuZ2UoXG4gICAgICAgICAgICB0aGlzLmxhYmVsc0FyZVNob3duLFxuICAgICAgICAgICAgZGF0YS5vZmZzZXRYLFxuICAgICAgICAgICAgZGF0YS5vZmZzZXRZXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSwgMjUwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVuIGEgZGlhbG9nIGJveCB0byBlbnRlciBsYWJlbCBhbmQgZG8gc29tZXRoaW5nXG4gICAqIEBwYXJhbSBvbEdlb21ldHJ5IGdlb21ldHJ5IGF0IGRyYXcgZW5kIG9yIHNlbGVjdGVkIGdlb21ldHJ5XG4gICAqIEBwYXJhbSBkcmF3RW5kIGV2ZW50IGZpcmVkIGF0IGRyYXdFbmQ/XG4gICAqL1xuICBwcml2YXRlIG9wZW5EcmF3RGlhbG9nKG9sR2VvbWV0cnksIGlzRHJhd0VuZDogYm9vbGVhbikge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gb3BlbiB0aGUgZGlhbG9nIGJveCB1c2VkIHRvIGVudGVyIGxhYmVsXG4gICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKERyYXdQb3B1cENvbXBvbmVudCwge1xuICAgICAgICBkaXNhYmxlQ2xvc2U6IGZhbHNlLFxuICAgICAgICBkYXRhOiB7IG9sR2VvbWV0cnk6IG9sR2VvbWV0cnksIG1hcDogdGhpcy5tYXAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIHdoZW4gZGlhbG9nIGJveCBpcyBjbG9zZWQsIGdldCBsYWJlbCBhbmQgc2V0IGl0IHRvIGdlb21ldHJ5XG4gICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAvLyBjaGVja3MgaWYgdGhlIHVzZXIgY2xpY2tlZCBva1xuICAgICAgICBpZiAoZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlLmNvbmZpcm1GbGFnKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVMYWJlbE9mT2xHZW9tZXRyeShvbEdlb21ldHJ5LCByZXN1bHQubGFiZWwpO1xuICAgICAgICAgIHRoaXMudXBkYXRlTGFiZWxUeXBlKFxuICAgICAgICAgICAgb2xHZW9tZXRyeSxcbiAgICAgICAgICAgIGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5sYWJlbEZsYWdcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMudXBkYXRlTWVhc3VyZVVuaXQob2xHZW9tZXRyeSwgcmVzdWx0Lm1lYXN1cmVVbml0KTtcblxuICAgICAgICAgIGlmICghKG9sR2VvbWV0cnkgaW5zdGFuY2VvZiBPbEZlYXR1cmUpKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUZvbnRTaXplQW5kU3R5bGUob2xHZW9tZXRyeSwgJzE1JywgRm9udFR5cGUuQXJpYWwpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVGaWxsQW5kU3Ryb2tlQ29sb3IoXG4gICAgICAgICAgICAgIG9sR2VvbWV0cnksXG4gICAgICAgICAgICAgICdyZ2JhKDI1NSwyNTUsMjU1LDAuNCknLFxuICAgICAgICAgICAgICAncmdiYSgxNDMsNyw3LDEpJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlT2Zmc2V0KFxuICAgICAgICAgICAgICBvbEdlb21ldHJ5LFxuICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICBvbEdlb21ldHJ5IGluc3RhbmNlb2YgT2xQb2ludCA/IC0xNSA6IDBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaXNEcmF3RW5kXG4gICAgICAgICAgICA/IHRoaXMub25EcmF3RW5kKG9sR2VvbWV0cnkpXG4gICAgICAgICAgICA6IHRoaXMub25TZWxlY3REcmF3KG9sR2VvbWV0cnksIHJlc3VsdC5sYWJlbCwgW1xuICAgICAgICAgICAgICAgIGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5sYWJlbEZsYWcsXG4gICAgICAgICAgICAgICAgcmVzdWx0Lm1lYXN1cmVVbml0XG4gICAgICAgICAgICAgIF0pO1xuICAgICAgICAgIHRoaXMudXBkYXRlSGVpZ2h0VGFibGUoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBkZWxldGVzIHRoZSBmZWF0dXJlXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHRoaXMuYWN0aXZlRHJhd2luZ0xheWVyU291cmNlXG4gICAgICAgICAgICAuZ2V0RmVhdHVyZXMoKVxuICAgICAgICAgICAgLmZvckVhY2goKGRyYXdpbmdMYXllckZlYXR1cmUpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZ2VvbWV0cnkgPSBkcmF3aW5nTGF5ZXJGZWF0dXJlLmdldEdlb21ldHJ5KCkgYXMgYW55O1xuICAgICAgICAgICAgICBpZiAob2xHZW9tZXRyeSA9PT0gZ2VvbWV0cnkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZURyYXdpbmdMYXllclNvdXJjZS5yZW1vdmVGZWF0dXJlKFxuICAgICAgICAgICAgICAgICAgZHJhd2luZ0xheWVyRmVhdHVyZVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCAyNTApO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIHRoZSBkcmF3IHNvdXJjZSBhbmQgdHJhY2sgdGhlIGdlb21ldHJ5IGJlaW5nIGRyYXdcbiAgICogQHBhcmFtIG9sR2VvbWV0cnkgT2wgbGluZXN0cmluZyBvciBwb2x5Z29uXG4gICAqL1xuICBwcml2YXRlIG9uRHJhd0VuZChvbEdlb21ldHJ5OiBPbEdlb21ldHJ5LCByYWRpdXM/OiBudW1iZXIpIHtcbiAgICB0aGlzLmFkZEZlYXR1cmVUb1N0b3JlKG9sR2VvbWV0cnksIHJhZGl1cyk7XG4gICAgdGhpcy5jbGVhckxhYmVsc09mT2xHZW9tZXRyeShvbEdlb21ldHJ5KTtcbiAgICB0aGlzLmFjdGl2ZVN0b3JlLmxheWVyLm9sLmdldFNvdXJjZSgpLnJlZnJlc2goKTtcbiAgfVxuXG4gIHByaXZhdGUgb25Nb2RpZnlEcmF3KG9sR2VvbWV0cnkpIHtcbiAgICBjb25zdCBlbnRpdGllcyA9IHRoaXMuYWN0aXZlU3RvcmUuYWxsKCk7XG5cbiAgICBlbnRpdGllcy5mb3JFYWNoKChlbnRpdHkpID0+IHtcbiAgICAgIGNvbnN0IGVudGl0eUlkID0gZW50aXR5LnByb3BlcnRpZXMuaWQ7XG4gICAgICBjb25zdCBvbEdlb21ldHJ5SWQgPSBvbEdlb21ldHJ5Lm9sX3VpZDtcblxuICAgICAgaWYgKGVudGl0eUlkID09PSBvbEdlb21ldHJ5SWQpIHtcbiAgICAgICAgaWYgKGVudGl0eS5wcm9wZXJ0aWVzLmxhYmVsVHlwZSA9PT0gTGFiZWxUeXBlLkNvb3JkaW5hdGVzKSB7XG4gICAgICAgICAgbGV0IGxvbmdMYXQgPSBERHRvRE1TKFxuICAgICAgICAgICAgW2VudGl0eS5wcm9wZXJ0aWVzLmxvbmdpdHVkZSwgZW50aXR5LnByb3BlcnRpZXMubGF0aXR1ZGVdLFxuICAgICAgICAgICAgZW50aXR5LnByb3BlcnRpZXMubWVhc3VyZVVuaXQgYXMgQ29vcmRpbmF0ZXNVbml0XG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUxhYmVsT2ZPbEdlb21ldHJ5KFxuICAgICAgICAgICAgb2xHZW9tZXRyeSxcbiAgICAgICAgICAgICcoJyArIGxvbmdMYXRbMV0gKyAnLCAnICsgbG9uZ0xhdFswXSArICcpJ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoZW50aXR5LnByb3BlcnRpZXMubGFiZWxUeXBlID09PSBMYWJlbFR5cGUuTGVuZ3RoKSB7XG4gICAgICAgICAgaWYgKG9sR2VvbWV0cnkgaW5zdGFuY2VvZiBPbENpcmNsZSkge1xuICAgICAgICAgICAgbGV0IGNpcmN1bGFyUG9seWdvbiA9IGZyb21DaXJjbGUob2xHZW9tZXRyeSwgMTAwMDApO1xuICAgICAgICAgICAgY29uc3QgcmFkaXVzID0gbWV0ZXJzVG9Vbml0KFxuICAgICAgICAgICAgICB0aGlzLmdldFJhZGl1cyhjaXJjdWxhclBvbHlnb24pLFxuICAgICAgICAgICAgICBlbnRpdHkucHJvcGVydGllcy5tZWFzdXJlVW5pdCBhcyBNZWFzdXJlTGVuZ3RoVW5pdFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IHVuaXQgPVxuICAgICAgICAgICAgICBNZWFzdXJlTGVuZ3RoVW5pdEFiYnJldmlhdGlvbltlbnRpdHkucHJvcGVydGllcy5tZWFzdXJlVW5pdF07XG4gICAgICAgICAgICBjb25zdCByYWRpdXNMYWJlbCA9XG4gICAgICAgICAgICAgICdSOiAnICsgcmFkaXVzLnRvRml4ZWQoMikudG9TdHJpbmcoKSArICcgJyArIHVuaXQ7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUxhYmVsT2ZPbEdlb21ldHJ5KG9sR2VvbWV0cnksIHJhZGl1c0xhYmVsKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG9sR2VvbWV0cnlMZW5ndGggPSBtZWFzdXJlT2xHZW9tZXRyeUxlbmd0aChcbiAgICAgICAgICAgICAgb2xHZW9tZXRyeSxcbiAgICAgICAgICAgICAgdGhpcy5tYXAub2wuZ2V0VmlldygpLmdldFByb2plY3Rpb24oKS5nZXRDb2RlKClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBsZXQgbWVhc3VyZVVuaXQ6IGFueTtcbiAgICAgICAgICAgIGNvbnN0IHRlbXA6IE1lYXN1cmVMZW5ndGhVbml0ID0gZW50aXR5LnByb3BlcnRpZXNcbiAgICAgICAgICAgICAgLm1lYXN1cmVVbml0IGFzIE1lYXN1cmVMZW5ndGhVbml0O1xuICAgICAgICAgICAgbWVhc3VyZVVuaXQgPVxuICAgICAgICAgICAgICBNZWFzdXJlTGVuZ3RoVW5pdEFiYnJldmlhdGlvbltlbnRpdHkucHJvcGVydGllcy5tZWFzdXJlVW5pdF07XG4gICAgICAgICAgICBvbEdlb21ldHJ5TGVuZ3RoID0gbWV0ZXJzVG9Vbml0KG9sR2VvbWV0cnlMZW5ndGgsIHRlbXApO1xuICAgICAgICAgICAgbGV0IGxlbmd0aExhYmVsID1cbiAgICAgICAgICAgICAgb2xHZW9tZXRyeSBpbnN0YW5jZW9mIFBvbHlnb25cbiAgICAgICAgICAgICAgICA/ICdQOiAnICtcbiAgICAgICAgICAgICAgICAgIG9sR2VvbWV0cnlMZW5ndGgudG9GaXhlZCgyKS50b1N0cmluZygpICtcbiAgICAgICAgICAgICAgICAgICcgJyArXG4gICAgICAgICAgICAgICAgICBtZWFzdXJlVW5pdFxuICAgICAgICAgICAgICAgIDogb2xHZW9tZXRyeUxlbmd0aC50b0ZpeGVkKDIpLnRvU3RyaW5nKCkgKyAnICcgKyBtZWFzdXJlVW5pdDtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTGFiZWxPZk9sR2VvbWV0cnkob2xHZW9tZXRyeSwgbGVuZ3RoTGFiZWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChlbnRpdHkucHJvcGVydGllcy5sYWJlbFR5cGUgPT09IExhYmVsVHlwZS5BcmVhKSB7XG4gICAgICAgICAgaWYgKG9sR2VvbWV0cnkgaW5zdGFuY2VvZiBPbENpcmNsZSkge1xuICAgICAgICAgICAgbGV0IGNpcmN1bGFyUG9seWdvbiA9IGZyb21DaXJjbGUob2xHZW9tZXRyeSwgMTAwMDApO1xuICAgICAgICAgICAgbGV0IGNpcmNsZUFyZWEgPSBtZWFzdXJlT2xHZW9tZXRyeUFyZWEoXG4gICAgICAgICAgICAgIGNpcmN1bGFyUG9seWdvbixcbiAgICAgICAgICAgICAgdGhpcy5tYXAub2wuZ2V0VmlldygpLmdldFByb2plY3Rpb24oKS5nZXRDb2RlKClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCB1bml0ID1cbiAgICAgICAgICAgICAgTWVhc3VyZUFyZWFVbml0QWJicmV2aWF0aW9uW2VudGl0eS5wcm9wZXJ0aWVzLm1lYXN1cmVVbml0XTtcbiAgICAgICAgICAgIGNvbnN0IHRlbXA6IE1lYXN1cmVBcmVhVW5pdCA9IGVudGl0eS5wcm9wZXJ0aWVzXG4gICAgICAgICAgICAgIC5tZWFzdXJlVW5pdCBhcyBNZWFzdXJlQXJlYVVuaXQ7XG4gICAgICAgICAgICBjaXJjbGVBcmVhID0gc3F1YXJlTWV0ZXJzVG9Vbml0KGNpcmNsZUFyZWEsIHRlbXApO1xuICAgICAgICAgICAgY29uc3QgYXJlYUxhYmVsID0gY2lyY2xlQXJlYS50b0ZpeGVkKDIpLnRvU3RyaW5nKCkgKyAnICcgKyB1bml0O1xuICAgICAgICAgICAgdGhpcy51cGRhdGVMYWJlbE9mT2xHZW9tZXRyeShvbEdlb21ldHJ5LCBhcmVhTGFiZWwpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgb2xHZW9tZXRyeUFyZWEgPSBtZWFzdXJlT2xHZW9tZXRyeUFyZWEoXG4gICAgICAgICAgICAgIG9sR2VvbWV0cnksXG4gICAgICAgICAgICAgIHRoaXMubWFwLm9sLmdldFZpZXcoKS5nZXRQcm9qZWN0aW9uKCkuZ2V0Q29kZSgpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbGV0IG1lYXN1cmVVbml0OiBhbnk7XG4gICAgICAgICAgICBjb25zdCB0ZW1wOiBNZWFzdXJlQXJlYVVuaXQgPSBlbnRpdHkucHJvcGVydGllc1xuICAgICAgICAgICAgICAubWVhc3VyZVVuaXQgYXMgTWVhc3VyZUFyZWFVbml0O1xuICAgICAgICAgICAgbWVhc3VyZVVuaXQgPVxuICAgICAgICAgICAgICBNZWFzdXJlQXJlYVVuaXRBYmJyZXZpYXRpb25bZW50aXR5LnByb3BlcnRpZXMubWVhc3VyZVVuaXRdO1xuICAgICAgICAgICAgb2xHZW9tZXRyeUFyZWEgPSBzcXVhcmVNZXRlcnNUb1VuaXQob2xHZW9tZXRyeUFyZWEsIHRlbXApO1xuICAgICAgICAgICAgY29uc3QgbGVuZ3RoTGFiZWwgPVxuICAgICAgICAgICAgICBvbEdlb21ldHJ5QXJlYS50b0ZpeGVkKDIpLnRvU3RyaW5nKCkgKyAnICcgKyBtZWFzdXJlVW5pdDtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTGFiZWxPZk9sR2VvbWV0cnkob2xHZW9tZXRyeSwgbGVuZ3RoTGFiZWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUxhYmVsT2ZPbEdlb21ldHJ5KG9sR2VvbWV0cnksIGVudGl0eS5wcm9wZXJ0aWVzLmRyYXcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51cGRhdGVMYWJlbFR5cGUob2xHZW9tZXRyeSwgZW50aXR5LnByb3BlcnRpZXMubGFiZWxUeXBlKTtcbiAgICAgICAgdGhpcy51cGRhdGVNZWFzdXJlVW5pdChvbEdlb21ldHJ5LCBlbnRpdHkucHJvcGVydGllcy5tZWFzdXJlVW5pdCk7XG4gICAgICAgIHRoaXMudXBkYXRlRm9udFNpemVBbmRTdHlsZShcbiAgICAgICAgICBvbEdlb21ldHJ5LFxuICAgICAgICAgIGVudGl0eS5wcm9wZXJ0aWVzLmZvbnRTdHlsZS5zcGxpdCgnICcpWzBdLnJlcGxhY2UoJ3B4JywgJycpLFxuICAgICAgICAgIGVudGl0eS5wcm9wZXJ0aWVzLmZvbnRTdHlsZS5zdWJzdHJpbmcoXG4gICAgICAgICAgICBlbnRpdHkucHJvcGVydGllcy5mb250U3R5bGUuaW5kZXhPZignICcpICsgMVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy51cGRhdGVGaWxsQW5kU3Ryb2tlQ29sb3IoXG4gICAgICAgICAgb2xHZW9tZXRyeSxcbiAgICAgICAgICBlbnRpdHkucHJvcGVydGllcy5kcmF3aW5nU3R5bGUuZmlsbCxcbiAgICAgICAgICBlbnRpdHkucHJvcGVydGllcy5kcmF3aW5nU3R5bGUuc3Ryb2tlXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMudXBkYXRlT2Zmc2V0KFxuICAgICAgICAgIG9sR2VvbWV0cnksXG4gICAgICAgICAgZW50aXR5LnByb3BlcnRpZXMub2Zmc2V0WCxcbiAgICAgICAgICBlbnRpdHkucHJvcGVydGllcy5vZmZzZXRZXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucmVwbGFjZUZlYXR1cmVJblN0b3JlKGVudGl0eSwgb2xHZW9tZXRyeSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG9uU2VsZWN0RHJhdyhcbiAgICBvbEZlYXR1cmU6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PixcbiAgICBsYWJlbDogc3RyaW5nLFxuICAgIGxhYmVsVHlwZUFuZFVuaXQ/XG4gICkge1xuICAgIGNvbnN0IGVudGl0aWVzID0gdGhpcy5hY3RpdmVTdG9yZS5hbGwoKTtcblxuICAgIGNvbnN0IG9sR2VvbWV0cnkgPSBvbEZlYXR1cmUuZ2V0R2VvbWV0cnkoKSBhcyBhbnk7XG4gICAgb2xHZW9tZXRyeS5vbF91aWQgPSBvbEZlYXR1cmUuZ2V0KCdpZCcpO1xuXG4gICAgY29uc3Qgb2xHZW9tZXRyeUNvb3JkaW5hdGVzID0gSlNPTi5zdHJpbmdpZnkoXG4gICAgICBvbEdlb21ldHJ5LmdldENvb3JkaW5hdGVzKClbMF1cbiAgICApO1xuXG4gICAgZW50aXRpZXMuZm9yRWFjaCgoZW50aXR5KSA9PiB7XG4gICAgICBjb25zdCBlbnRpdHlDb29yZGluYXRlcyA9IEpTT04uc3RyaW5naWZ5KGVudGl0eS5nZW9tZXRyeS5jb29yZGluYXRlc1swXSk7XG4gICAgICBpZiAob2xHZW9tZXRyeUNvb3JkaW5hdGVzID09PSBlbnRpdHlDb29yZGluYXRlcykge1xuICAgICAgICBjb25zdCBmb250U2l6ZSA9IG9sRmVhdHVyZVxuICAgICAgICAgIC5nZXQoJ2ZvbnRTdHlsZScpXG4gICAgICAgICAgLnNwbGl0KCcgJylbMF1cbiAgICAgICAgICAucmVwbGFjZSgncHgnLCAnJyk7XG4gICAgICAgIGNvbnN0IGZvbnRTdHlsZSA9IG9sRmVhdHVyZVxuICAgICAgICAgIC5nZXQoJ2ZvbnRTdHlsZScpXG4gICAgICAgICAgLnN1YnN0cmluZyhvbEZlYXR1cmUuZ2V0KCdmb250U3R5bGUnKS5pbmRleE9mKCcgJykgKyAxKTtcblxuICAgICAgICBjb25zdCBmaWxsQ29sb3IgPSBvbEZlYXR1cmUuZ2V0KCdkcmF3aW5nU3R5bGUnKS5maWxsO1xuICAgICAgICBjb25zdCBzdHJva2VDb2xvciA9IG9sRmVhdHVyZS5nZXQoJ2RyYXdpbmdTdHlsZScpLnN0cm9rZTtcblxuICAgICAgICBjb25zdCBvZmZzZXRYID0gb2xGZWF0dXJlLmdldCgnb2Zmc2V0WCcpO1xuICAgICAgICBjb25zdCBvZmZzZXRZID0gb2xGZWF0dXJlLmdldCgnb2Zmc2V0WScpO1xuXG4gICAgICAgIGNvbnN0IHJhZDogbnVtYmVyID0gZW50aXR5LnByb3BlcnRpZXMucmFkXG4gICAgICAgICAgPyBlbnRpdHkucHJvcGVydGllcy5yYWRcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy51cGRhdGVMYWJlbE9mT2xHZW9tZXRyeShvbEdlb21ldHJ5LCBsYWJlbCk7XG4gICAgICAgIHRoaXMudXBkYXRlRm9udFNpemVBbmRTdHlsZShvbEdlb21ldHJ5LCBmb250U2l6ZSwgZm9udFN0eWxlKTtcbiAgICAgICAgdGhpcy51cGRhdGVGaWxsQW5kU3Ryb2tlQ29sb3Iob2xHZW9tZXRyeSwgZmlsbENvbG9yLCBzdHJva2VDb2xvcik7XG4gICAgICAgIHRoaXMudXBkYXRlT2Zmc2V0KG9sR2VvbWV0cnksIG9mZnNldFgsIG9mZnNldFkpO1xuICAgICAgICB0aGlzLnVwZGF0ZUxhYmVsVHlwZShvbEdlb21ldHJ5LCBsYWJlbFR5cGVBbmRVbml0WzBdKTtcbiAgICAgICAgdGhpcy51cGRhdGVNZWFzdXJlVW5pdChvbEdlb21ldHJ5LCBsYWJlbFR5cGVBbmRVbml0WzFdKTtcbiAgICAgICAgdGhpcy5yZXBsYWNlRmVhdHVyZUluU3RvcmUoZW50aXR5LCBvbEdlb21ldHJ5LCByYWQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIGZlYXR1cmUgd2l0aCBkcmF3IGxhYmVsIHRvIHRoZSBzdG9yZS4gVGhlIGxvYWRpbmcgc3RyYWdlZ3kgb2YgdGhlIHN0b3JlXG4gICAqIHdpbGwgdHJpZ2dlciBhbmQgYWRkIHRoZSBmZWF0dXJlIHRvIHRoZSBtYXAuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSBhZGRGZWF0dXJlVG9TdG9yZShcbiAgICBvbEdlb21ldHJ5LFxuICAgIHJhZGl1cz86IG51bWJlcixcbiAgICBmZWF0dXJlPzogRmVhdHVyZVdpdGhEcmF3XG4gICkge1xuICAgIGxldCByYWQ6IG51bWJlcjtcbiAgICBsZXQgY2VudGVyNDMyNjogQXJyYXk8bnVtYmVyPjtcbiAgICBsZXQgcG9pbnQ0MzI2OiBBcnJheTxudW1iZXI+O1xuICAgIGxldCBsb240MzI2OiBudW1iZXI7XG4gICAgbGV0IGxhdDQzMjY6IG51bWJlcjtcblxuICAgIGNvbnN0IGZlYXR1cmVJZCA9IGZlYXR1cmUgPyBmZWF0dXJlLnByb3BlcnRpZXMuaWQgOiBvbEdlb21ldHJ5Lm9sX3VpZDtcbiAgICBjb25zdCBwcm9qZWN0aW9uID0gdGhpcy5tYXAub2wuZ2V0VmlldygpLmdldFByb2plY3Rpb24oKTtcblxuICAgIGNvbnN0IGdlb21ldHJ5ID0gbmV3IE9sR2VvSlNPTigpLndyaXRlR2VvbWV0cnlPYmplY3Qob2xHZW9tZXRyeSwge1xuICAgICAgZmVhdHVyZVByb2plY3Rpb246IHByb2plY3Rpb24sXG4gICAgICBkYXRhUHJvamVjdGlvbjogcHJvamVjdGlvblxuICAgIH0pIGFzIGFueTtcblxuICAgIGlmIChvbEdlb21ldHJ5IGluc3RhbmNlb2YgT2xDaXJjbGUgfHwgcmFkaXVzKSB7XG4gICAgICBpZiAocmFkaXVzKSB7XG4gICAgICAgIHJhZCA9IHJhZGl1cztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGdlb21ldHJ5LnR5cGUgPSAnUG9pbnQnO1xuICAgICAgICBnZW9tZXRyeS5jb29yZGluYXRlcyA9IG9sR2VvbWV0cnkuZ2V0Q2VudGVyKCk7XG4gICAgICAgIGNvbnN0IGV4dGVudDQzMjYgPSB0cmFuc2Zvcm0oXG4gICAgICAgICAgW1xuICAgICAgICAgICAgb2xHZW9tZXRyeS5nZXRGbGF0Q29vcmRpbmF0ZXMoKVsyXSxcbiAgICAgICAgICAgIG9sR2VvbWV0cnkuZ2V0RmxhdENvb3JkaW5hdGVzKClbM11cbiAgICAgICAgICBdLFxuICAgICAgICAgIHByb2plY3Rpb24sXG4gICAgICAgICAgJ0VQU0c6NDMyNidcbiAgICAgICAgKTtcbiAgICAgICAgY2VudGVyNDMyNiA9IHRyYW5zZm9ybShcbiAgICAgICAgICBbXG4gICAgICAgICAgICBvbEdlb21ldHJ5LmdldEZsYXRDb29yZGluYXRlcygpWzBdLFxuICAgICAgICAgICAgb2xHZW9tZXRyeS5nZXRGbGF0Q29vcmRpbmF0ZXMoKVsxXVxuICAgICAgICAgIF0sXG4gICAgICAgICAgcHJvamVjdGlvbixcbiAgICAgICAgICAnRVBTRzo0MzI2J1xuICAgICAgICApO1xuICAgICAgICBsb240MzI2ID0gY2VudGVyNDMyNlswXTtcbiAgICAgICAgbGF0NDMyNiA9IGNlbnRlcjQzMjZbMV07XG4gICAgICAgIHJhZCA9IGdldERpc3RhbmNlKGNlbnRlcjQzMjYsIGV4dGVudDQzMjYpO1xuICAgICAgICB0aGlzLnJhZGl1c0Zvcm1Db250cm9sLnNldFZhbHVlKE1hdGgucm91bmQocmFkKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLmFjdGl2ZURyYXdDb250cm9sLnJhZGl1c0RyYXdFbmQkLmdldFZhbHVlKCkpIHtcbiAgICAgIHJhZCA9IHRoaXMuYWN0aXZlRHJhd0NvbnRyb2wucmFkaXVzRHJhd0VuZCQuZ2V0VmFsdWUoKTtcbiAgICB9XG5cbiAgICBpZiAob2xHZW9tZXRyeSBpbnN0YW5jZW9mIE9sUG9pbnQpIHtcbiAgICAgIHBvaW50NDMyNiA9IHRyYW5zZm9ybShcbiAgICAgICAgb2xHZW9tZXRyeS5nZXRGbGF0Q29vcmRpbmF0ZXMoKSxcbiAgICAgICAgcHJvamVjdGlvbixcbiAgICAgICAgJ0VQU0c6NDMyNidcbiAgICAgICk7XG4gICAgICBsb240MzI2ID0gcG9pbnQ0MzI2WzBdO1xuICAgICAgbGF0NDMyNiA9IHBvaW50NDMyNlsxXTtcbiAgICB9XG5cbiAgICB0aGlzLmFjdGl2ZVN0b3JlLnVwZGF0ZSh7XG4gICAgICB0eXBlOiBGRUFUVVJFLFxuICAgICAgZ2VvbWV0cnksXG4gICAgICBwcm9qZWN0aW9uOiBwcm9qZWN0aW9uLmdldENvZGUoKSxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgaWQ6IGZlYXR1cmVJZCxcbiAgICAgICAgZHJhdzogb2xHZW9tZXRyeS5nZXQoJ19sYWJlbCcpLFxuICAgICAgICBsb25naXR1ZGU6IGxvbjQzMjYgPyBsb240MzI2IDogbnVsbCxcbiAgICAgICAgbGF0aXR1ZGU6IGxhdDQzMjYgPyBsYXQ0MzI2IDogbnVsbCxcbiAgICAgICAgcmFkOiByYWQgPyByYWQgOiBudWxsLFxuICAgICAgICBmb250U3R5bGU6IG9sR2VvbWV0cnkuZ2V0KCdmb250U3R5bGVfJyksXG4gICAgICAgIGRyYXdpbmdTdHlsZToge1xuICAgICAgICAgIGZpbGw6IG9sR2VvbWV0cnkuZ2V0KCdmaWxsQ29sb3JfJyksXG4gICAgICAgICAgc3Ryb2tlOiBvbEdlb21ldHJ5LmdldCgnc3Ryb2tlQ29sb3JfJylcbiAgICAgICAgfSxcbiAgICAgICAgb2Zmc2V0WDogb2xHZW9tZXRyeS5nZXQoJ29mZnNldFhfJyksXG4gICAgICAgIG9mZnNldFk6IG9sR2VvbWV0cnkuZ2V0KCdvZmZzZXRZXycpLFxuICAgICAgICBsYWJlbFR5cGU6IG9sR2VvbWV0cnkuZ2V0KCdsYWJlbFR5cGVfJyksXG4gICAgICAgIG1lYXN1cmVVbml0OiBvbEdlb21ldHJ5LmdldCgnbWVhc3VyZVVuaXRfJylcbiAgICAgIH0sXG4gICAgICBtZXRhOiB7XG4gICAgICAgIGlkOiBmZWF0dXJlSWRcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmFjdGl2ZVN0b3JlLnNldExheWVyRXh0ZW50KCk7XG4gICAgdGhpcy5hY3RpdmVEcmF3Q29udHJvbC5wcmVkZWZpbmVkUmFkaXVzJC5uZXh0KHVuZGVmaW5lZCk7XG4gICAgdGhpcy5hY3RpdmVEcmF3Q29udHJvbC5yYWRpdXNEcmF3RW5kJC5uZXh0KHVuZGVmaW5lZCk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRm9ybSgpIHtcbiAgICB0aGlzLmZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIGZpbGw6IFsnJ10sXG4gICAgICBzdHJva2U6IFsnJ11cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzZXR1cExheWVyKGlzTmV3TGF5ZXI/OiBib29sZWFuKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKERyYXdMYXllclBvcHVwQ29tcG9uZW50LCB7XG4gICAgICAgIGRpc2FibGVDbG9zZTogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChsYWJlbDogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmIChkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2UuY29uZmlybUZsYWcpIHtcbiAgICAgICAgICB0aGlzLmFjdGl2ZVN0b3JlLnN0YXRlLnVwZGF0ZUFsbCh7IHNlbGVjdGVkOiBmYWxzZSB9KTtcbiAgICAgICAgICB0aGlzLmFjdGl2ZVN0b3JlID0gbmV3IEZlYXR1cmVTdG9yZTxGZWF0dXJlV2l0aERyYXc+KFtdLCB7XG4gICAgICAgICAgICBtYXA6IHRoaXMubWFwXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5hY3RpdmVEcmF3aW5nTGF5ZXJTb3VyY2UgPSBuZXcgT2xWZWN0b3JTb3VyY2UoKTtcbiAgICAgICAgICB0aGlzLmFjdGl2ZURyYXdpbmdMYXllci5vcGFjaXR5ID0gMDtcbiAgICAgICAgICB0aGlzLmRlYWN0aXZhdGVEcmF3Q29udHJvbCgpO1xuICAgICAgICAgIHRoaXMuaW5pdFN0b3JlKGxhYmVsLCBpc05ld0xheWVyKTtcbiAgICAgICAgICB0aGlzLmFjdGl2ZURyYXdDb250cm9sID0gdGhpcy5jcmVhdGVEcmF3Q29udHJvbChcbiAgICAgICAgICAgIHRoaXMuZmlsbENvbG9yLFxuICAgICAgICAgICAgdGhpcy5zdHJva2VDb2xvcixcbiAgICAgICAgICAgIHRoaXMuc3Ryb2tlV2lkdGhcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuYWN0aXZlRHJhd0NvbnRyb2wuc2V0R2VvbWV0cnlUeXBlKHRoaXMuY3Vyckdlb21ldHJ5VHlwZSk7XG4gICAgICAgICAgdGhpcy50b2dnbGVEcmF3Q29udHJvbCgpO1xuICAgICAgICAgIHRoaXMuc3RvcmVzLnB1c2godGhpcy5hY3RpdmVTdG9yZSk7XG4gICAgICAgICAgdGhpcy5kcmF3Q29udHJvbHMucHVzaChbXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZURyYXdpbmdMYXllci5pZCxcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlRHJhd0NvbnRyb2xcbiAgICAgICAgICBdKTtcbiAgICAgICAgICB0aGlzLmRyYXdDb250cm9sc0V2ZW50LmVtaXQodGhpcy5kcmF3Q29udHJvbHMpO1xuICAgICAgICAgIHRoaXMubGF5ZXJzSURFdmVudC5lbWl0KHRoaXMuYWN0aXZlRHJhd2luZ0xheWVyLmlkKTtcbiAgICAgICAgICB0aGlzLmlzQ3JlYXRpbmdOZXdMYXllciA9IGZhbHNlO1xuICAgICAgICAgIGlmICghdGhpcy5sYWJlbHNBcmVTaG93bikge1xuICAgICAgICAgICAgdGhpcy5vblRvZ2dsZUxhYmVscygpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmFjdGl2ZUxheWVyQ2hhbmdlLmVtaXQodGhpcy5hY3RpdmVEcmF3aW5nTGF5ZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2VsZWN0LnZhbHVlID0gdGhpcy5hY3RpdmVEcmF3aW5nTGF5ZXI7XG4gICAgICAgICAgdGhpcy5zZWxlY3Quc2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy5hY3RpdmVEcmF3aW5nTGF5ZXIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCAyNTApO1xuICB9XG5cbiAgLy8gSFRNTCB1c2VyIGludGVyYWN0aW9uc1xuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgdXNlciBkb3VibGUtY2xpY2tzIHRoZSBzZWxlY3RlZCBkcmF3aW5nXG4gICAqL1xuICBlZGl0TGFiZWxEcmF3aW5nKGZlYXR1cmUpIHtcbiAgICBjb25zdCBvbEdlb21ldHJ5RmVhdHVyZSA9IGZlYXR1cmVUb09sKFxuICAgICAgZmVhdHVyZSxcbiAgICAgIHRoaXMubWFwLm9sLmdldFZpZXcoKS5nZXRQcm9qZWN0aW9uKCkuZ2V0Q29kZSgpXG4gICAgKTtcbiAgICB0aGlzLm9wZW5EcmF3RGlhbG9nKG9sR2VvbWV0cnlGZWF0dXJlLCBmYWxzZSk7XG4gIH1cblxuICBvcGVuU2hvcmN1dHNEaWFsb2coKSB7XG4gICAgdGhpcy5kaWFsb2cub3BlbihEcmF3U2hvcmN1dHNDb21wb25lbnQpO1xuICB9XG5cbiAgZGVsZXRlRHJhd2luZ3MoKSB7XG4gICAgdGhpcy5hY3RpdmVTdG9yZS5kZWxldGVNYW55KHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQudmFsdWUpO1xuICAgIHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQudmFsdWUuZm9yRWFjaCgoc2VsZWN0ZWRGZWF0dXJlKSA9PiB7XG4gICAgICB0aGlzLmFjdGl2ZURyYXdpbmdMYXllclNvdXJjZVxuICAgICAgICAuZ2V0RmVhdHVyZXMoKVxuICAgICAgICAuZm9yRWFjaCgoZHJhd2luZ0xheWVyRmVhdHVyZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGdlb21ldHJ5ID0gZHJhd2luZ0xheWVyRmVhdHVyZS5nZXRHZW9tZXRyeSgpIGFzIGFueTtcbiAgICAgICAgICBpZiAoc2VsZWN0ZWRGZWF0dXJlLnByb3BlcnRpZXMuaWQgPT09IGdlb21ldHJ5Lm9sX3VpZCkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVEcmF3aW5nTGF5ZXJTb3VyY2UucmVtb3ZlRmVhdHVyZShkcmF3aW5nTGF5ZXJGZWF0dXJlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlSGVpZ2h0VGFibGUoKTtcbiAgICB0aGlzLmFjdGl2ZVN0b3JlLnNldExheWVyRXh0ZW50KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIHVzZXIgdG9nZ2xlcyB0aGUgbGFiZWxzIHRvZ2dsZVxuICAgKi9cbiAgb25Ub2dnbGVMYWJlbHMoKSB7XG4gICAgdGhpcy5kcmF3U3R5bGVTZXJ2aWNlLnRvZ2dsZUxhYmVsc0FyZVNob3duKCk7XG4gICAgdGhpcy5sYWJlbHNBcmVTaG93biA9ICF0aGlzLmxhYmVsc0FyZVNob3duO1xuICAgIHRoaXMuaWNvblxuICAgICAgPyB0aGlzLmVsZW1lbnRTdHlsZSh0aGlzLmxhYmVsc0FyZVNob3duLCB0cnVlKVxuICAgICAgOiB0aGlzLmVsZW1lbnRTdHlsZSh0aGlzLmxhYmVsc0FyZVNob3duLCBmYWxzZSk7XG4gICAgdGhpcy5jcmVhdGVEcmF3Q29udHJvbCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSB1c2VyIHRvZ2dsZXMgdGhlIERyYXcgY29udHJvbCBpcyB0b2dnbGVkXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgb25Ub2dnbGVEcmF3Q29udHJvbCh0b2dnbGVJc0NoZWNrZWQ6IGJvb2xlYW4pIHtcbiAgICB0b2dnbGVJc0NoZWNrZWQgPyB0aGlzLnRvZ2dsZURyYXdDb250cm9sKCkgOiB0aGlzLmRlYWN0aXZhdGVEcmF3Q29udHJvbCgpO1xuICB9XG5cbiAgb25Ub2dnbGVGcmVlaGFuZE1vZGUoZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLmlzQ2lyY2xlKCkgJiYgIWV2ZW50LmNoZWNrZWQpIHtcbiAgICAgIHRoaXMuYWN0aXZlRHJhd0NvbnRyb2wuaXNwcmVkZWZpbmVkUmFkaXVzJC5uZXh0KHRydWUpO1xuICAgICAgdGhpcy5jaGFuZ2VSYWRpdXModGhpcy5yYWRpdXNGb3JtQ29udHJvbC52YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWN0aXZlRHJhd0NvbnRyb2wuc2V0T2xJbnRlcmFjdGlvblN0eWxlKFxuICAgICAgICBjcmVhdGVJbnRlcmFjdGlvblN0eWxlKFxuICAgICAgICAgIHRoaXMuZmlsbENvbG9yLFxuICAgICAgICAgIHRoaXMuc3Ryb2tlQ29sb3IsXG4gICAgICAgICAgdGhpcy5zdHJva2VXaWR0aFxuICAgICAgICApXG4gICAgICApO1xuICAgICAgdGhpcy5hY3RpdmVEcmF3Q29udHJvbC5pc3ByZWRlZmluZWRSYWRpdXMkLm5leHQoZmFsc2UpO1xuICAgIH1cbiAgICB0aGlzLmZyZWVoYW5kTW9kZSA9IGV2ZW50LmNoZWNrZWQ7XG4gICAgdGhpcy5hY3RpdmVEcmF3Q29udHJvbC5mcmVlaGFuZCQubmV4dChldmVudC5jaGVja2VkKTtcbiAgICB0aGlzLnRvZ2dsZURyYXdDb250cm9sKCk7XG4gIH1cblxuICAvLyBVc2VyIGNoYW5nZXMgcHJvcGVydGllcyBvZiBhIGRyYXdpbmcgZWxlbWVudFxuXG4gIC8qKlxuICAgKiBEaXNwbGF5IHRoZSBjdXJyZW50IGxheWVyIHdpdGggdGhlIGN1cnJlbnQgc3RvcmUgYW5kIHRoZSBjdXJyZW50IGxheWVyU291cmNlXG4gICAqL1xuXG4gIHB1YmxpYyBvbkxheWVyQ2hhbmdlKGN1cnJMYXllcj86IFZlY3RvckxheWVyKSB7XG4gICAgaWYgKGN1cnJMYXllcikge1xuICAgICAgdGhpcy5hY3RpdmVTdG9yZS5zdGF0ZS51cGRhdGVBbGwoeyBzZWxlY3RlZDogZmFsc2UgfSk7XG4gICAgICB0aGlzLmlzQ3JlYXRpbmdOZXdMYXllciA9IGZhbHNlO1xuICAgICAgdGhpcy5hY3RpdmVEcmF3aW5nTGF5ZXIub3BhY2l0eSA9IDA7XG4gICAgICB0aGlzLmFjdGl2ZURyYXdpbmdMYXllciA9IGN1cnJMYXllcjtcbiAgICAgIHRoaXMuYWN0aXZlRHJhd2luZ0xheWVyLm9wYWNpdHkgPSAxO1xuICAgICAgdGhpcy5kZWFjdGl2YXRlRHJhd0NvbnRyb2woKTtcbiAgICAgIGlmICghdGhpcy5sYWJlbHNBcmVTaG93bikge1xuICAgICAgICB0aGlzLm9uVG9nZ2xlTGFiZWxzKCk7XG4gICAgICB9XG4gICAgICB0aGlzLmFjdGl2ZVN0b3JlID0gdGhpcy5zdG9yZXMuZmluZChcbiAgICAgICAgKHN0b3JlKSA9PiBzdG9yZS5sYXllci5pZCA9PT0gdGhpcy5hY3RpdmVEcmF3aW5nTGF5ZXIuaWRcbiAgICAgICk7XG4gICAgICB0aGlzLmFjdGl2ZURyYXdDb250cm9sID0gdGhpcy5kcmF3Q29udHJvbHMuZmluZChcbiAgICAgICAgKGRjKSA9PiBkY1swXSA9PT0gdGhpcy5hY3RpdmVEcmF3aW5nTGF5ZXIuaWRcbiAgICAgIClbMV07XG4gICAgICB0aGlzLmFjdGl2ZURyYXdpbmdMYXllclNvdXJjZSA9XG4gICAgICAgIHRoaXMuYWN0aXZlRHJhd0NvbnRyb2wub2xEcmF3aW5nTGF5ZXJTb3VyY2U7XG4gICAgICB0aGlzLmFjdGl2ZURyYXdDb250cm9sLnNldEdlb21ldHJ5VHlwZSh0aGlzLmN1cnJHZW9tZXRyeVR5cGUpO1xuICAgICAgdGhpcy50b2dnbGVEcmF3Q29udHJvbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldHVwTGF5ZXIodHJ1ZSk7XG4gICAgfVxuICAgIHRoaXMuYWN0aXZlTGF5ZXJDaGFuZ2UuZW1pdCh0aGlzLmFjdGl2ZURyYXdpbmdMYXllcik7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlTGF5ZXIobmV3VGl0bGU/LCBpc05ld0xheWVyPykge1xuICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgdGhpcy5hbGxMYXllcnMpIHtcbiAgICAgIGxldCBudW1iZXJJZCA9IE51bWJlcihsYXllci5pZC5yZXBsYWNlKCdpZ28tZHJhdy1sYXllcicsICcnKSk7XG4gICAgICB0aGlzLmxheWVyQ291bnRlcklEID0gTWF0aC5tYXgobnVtYmVySWQsIHRoaXMubGF5ZXJDb3VudGVySUQpO1xuICAgIH1cbiAgICB0aGlzLmFjdGl2ZURyYXdpbmdMYXllciA9IG5ldyBWZWN0b3JMYXllcih7XG4gICAgICBpc0lnb0ludGVybmFsTGF5ZXI6IHRydWUsXG4gICAgICBpZDogJ2lnby1kcmF3LWxheWVyJyArICsrdGhpcy5sYXllckNvdW50ZXJJRCxcbiAgICAgIHRpdGxlOiBpc05ld0xheWVyXG4gICAgICAgID8gbmV3VGl0bGVcbiAgICAgICAgOiB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5kcmF3LmRyYXdpbmcnKSxcbiAgICAgIHpJbmRleDogMjAwLFxuICAgICAgc291cmNlOiBuZXcgRmVhdHVyZURhdGFTb3VyY2UoKSxcbiAgICAgIHN0eWxlOiAoZmVhdHVyZSwgcmVzb2x1dGlvbikgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kcmF3U3R5bGVTZXJ2aWNlLmNyZWF0ZUluZGl2aWR1YWxFbGVtZW50U3R5bGUoXG4gICAgICAgICAgZmVhdHVyZSxcbiAgICAgICAgICByZXNvbHV0aW9uLFxuICAgICAgICAgIHRoaXMubGFiZWxzQXJlU2hvd24sXG4gICAgICAgICAgZmVhdHVyZS5nZXQoJ2ZvbnRTdHlsZScpLFxuICAgICAgICAgIGZlYXR1cmUuZ2V0KCdkcmF3aW5nU3R5bGUnKS5maWxsLFxuICAgICAgICAgIGZlYXR1cmUuZ2V0KCdkcmF3aW5nU3R5bGUnKS5zdHJva2UsXG4gICAgICAgICAgZmVhdHVyZS5nZXQoJ29mZnNldFgnKSxcbiAgICAgICAgICBmZWF0dXJlLmdldCgnb2Zmc2V0WScpLFxuICAgICAgICAgIHRoaXMubWFwLnByb2plY3Rpb24sXG4gICAgICAgICAgdGhpcy5pY29uXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgc2hvd0luTGF5ZXJMaXN0OiB0cnVlLFxuICAgICAgZXhwb3J0YWJsZTogdHJ1ZSxcbiAgICAgIGJyb3dzYWJsZTogZmFsc2UsXG4gICAgICB3b3Jrc3BhY2U6IHtcbiAgICAgICAgZW5hYmxlZDogZmFsc2VcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRyeUJpbmRTdG9yZUxheWVyKHRoaXMuYWN0aXZlU3RvcmUsIHRoaXMuYWN0aXZlRHJhd2luZ0xheWVyKTtcblxuICAgIHRyeUFkZExvYWRpbmdTdHJhdGVneShcbiAgICAgIHRoaXMuYWN0aXZlU3RvcmUsXG4gICAgICBuZXcgRmVhdHVyZVN0b3JlTG9hZGluZ1N0cmF0ZWd5KHtcbiAgICAgICAgbW90aW9uOiBGZWF0dXJlTW90aW9uLk5vbmVcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRyeUFkZFNlbGVjdGlvblN0cmF0ZWd5KFxuICAgICAgdGhpcy5hY3RpdmVTdG9yZSxcbiAgICAgIG5ldyBGZWF0dXJlU3RvcmVTZWxlY3Rpb25TdHJhdGVneSh7XG4gICAgICAgIG1hcDogdGhpcy5tYXAsXG4gICAgICAgIG1vdGlvbjogRmVhdHVyZU1vdGlvbi5Ob25lLFxuICAgICAgICBtYW55OiB0cnVlXG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy5hY3RpdmVTdG9yZS5sYXllci52aXNpYmxlID0gdHJ1ZTtcbiAgICB0aGlzLmFjdGl2ZVN0b3JlLnNvdXJjZS5vbC5vbihcbiAgICAgICdyZW1vdmVmZWF0dXJlJyxcbiAgICAgIChldmVudDogT2xWZWN0b3JTb3VyY2VFdmVudCkgPT4ge1xuICAgICAgICBjb25zdCBvbEdlb21ldHJ5ID0gZXZlbnQuZmVhdHVyZS5nZXRHZW9tZXRyeSgpO1xuICAgICAgICB0aGlzLmNsZWFyTGFiZWxzT2ZPbEdlb21ldHJ5KG9sR2VvbWV0cnkpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIHVzZXIgY2hhbmdlcyB0aGUgY29sb3IgaW4gYSBjb2xvciBwaWNrZXJcbiAgICogQHBhcmFtIGxhYmVsc0FyZVNob3duIHdoZXRlciB0aGUgbGFiZWxzIGFyZSBzaG93biBvciBub3RcbiAgICogQHBhcmFtIGlzQW5JY29uIHdoZXRlciB0aGUgZmVhdHVyZSBpcyBhbiBpY29uIG9yIG5vdFxuICAgKiBAcGFyYW0gZmlsbENvbG9yIHdoaWNoIGlzIHRoZSBmaWxsaW5nIGNvbG9yXG4gICAqIEBwYXJhbSBzdHJva2VDb2xvciB3aGljaCBpcyB0aGUgc3Ryb2tlIGNvbG9yXG4gICAqL1xuICBvbkNvbG9yQ2hhbmdlKFxuICAgIGxhYmVsc0FyZVNob3duOiBib29sZWFuLFxuICAgIGlzQW5JY29uOiBib29sZWFuLFxuICAgIGZpbGxDb2xvcjogc3RyaW5nLFxuICAgIHN0cm9rZUNvbG9yOiBzdHJpbmdcbiAgKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQudmFsdWUubGVuZ3RoID4gMCAmJiAhaXNBbkljb24pIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQudmFsdWUuZm9yRWFjaCgoZmVhdHVyZSkgPT4ge1xuICAgICAgICBsZXQgb2xGZWF0dXJlID0gZmVhdHVyZVRvT2woXG4gICAgICAgICAgZmVhdHVyZSxcbiAgICAgICAgICB0aGlzLm1hcC5vbC5nZXRWaWV3KCkuZ2V0UHJvamVjdGlvbigpLmdldENvZGUoKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnVwZGF0ZUZpbGxBbmRTdHJva2VDb2xvcihvbEZlYXR1cmUsIGZpbGxDb2xvciwgc3Ryb2tlQ29sb3IpO1xuXG4gICAgICAgIGNvbnN0IGVudGl0eSA9IHRoaXMuYWN0aXZlU3RvcmVcbiAgICAgICAgICAuYWxsKClcbiAgICAgICAgICAuZmluZCgoZSkgPT4gZS5tZXRhLmlkID09PSBvbEZlYXR1cmUuZ2V0SWQoKSk7XG4gICAgICAgIGVudGl0eS5wcm9wZXJ0aWVzLmRyYXdpbmdTdHlsZS5maWxsID0gb2xGZWF0dXJlLmdldCgnZmlsbENvbG9yXycpO1xuICAgICAgICBlbnRpdHkucHJvcGVydGllcy5kcmF3aW5nU3R5bGUuc3Ryb2tlID0gb2xGZWF0dXJlLmdldCgnc3Ryb2tlQ29sb3JfJyk7XG4gICAgICAgIHRoaXMuYWN0aXZlU3RvcmUudXBkYXRlKGVudGl0eSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmVsZW1lbnRTdHlsZShsYWJlbHNBcmVTaG93biwgaXNBbkljb24pO1xuICAgIHRoaXMuY3JlYXRlRHJhd0NvbnRyb2woKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgdXNlciBjaGFuZ2VzIHRoZSBmb250IHNpemUgb3IvYW5kIHN0eWxlXG4gICAqIEBwYXJhbSBsYWJlbHNBcmVTaG93biB3aGV0ZXIgdGhlIGxhYmVscyBhcmUgc2hvd24gb3Igbm90XG4gICAqIEBwYXJhbSBzaXplIHRoZSBzaXplIG9mIHRoZSBmb250XG4gICAqIEBwYXJhbSBzdHlsZSB0aGUgc3R5bGUgb2YgdGhlIGZvbnRcbiAgICovXG5cbiAgb25Gb250Q2hhbmdlKGxhYmVsc0FyZVNob3duOiBib29sZWFuLCBzaXplOiBzdHJpbmcsIHN0eWxlOiBGb250VHlwZSkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLnZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQudmFsdWUuZm9yRWFjaCgoZmVhdHVyZSkgPT4ge1xuICAgICAgICBsZXQgb2xGZWF0dXJlID0gZmVhdHVyZVRvT2woXG4gICAgICAgICAgZmVhdHVyZSxcbiAgICAgICAgICB0aGlzLm1hcC5vbC5nZXRWaWV3KCkuZ2V0UHJvamVjdGlvbigpLmdldENvZGUoKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnVwZGF0ZUZvbnRTaXplQW5kU3R5bGUob2xGZWF0dXJlLCBzaXplLCBzdHlsZSk7XG4gICAgICAgIGNvbnN0IGVudGl0eSA9IHRoaXMuYWN0aXZlU3RvcmVcbiAgICAgICAgICAuYWxsKClcbiAgICAgICAgICAuZmluZCgoZSkgPT4gZS5tZXRhLmlkID09PSBvbEZlYXR1cmUuZ2V0SWQoKSk7XG4gICAgICAgIGVudGl0eS5wcm9wZXJ0aWVzLmZvbnRTdHlsZSA9IG9sRmVhdHVyZS5nZXQoJ2ZvbnRTdHlsZV8nKTtcbiAgICAgICAgdGhpcy5hY3RpdmVTdG9yZS51cGRhdGUoZW50aXR5KTtcbiAgICAgICAgb2xGZWF0dXJlID0gdGhpcy5hY3RpdmVTdG9yZS5sYXllci5vbFxuICAgICAgICAgIC5nZXRTb3VyY2UoKVxuICAgICAgICAgIC5nZXRGZWF0dXJlcygpXG4gICAgICAgICAgLmZpbmQoKGYpID0+IGYuZ2V0SWQoKSA9PT0gZW50aXR5Lm1ldGEuaWQpO1xuICAgICAgICBvbEZlYXR1cmUuc2V0UHJvcGVydGllcyh7IGZvbnRTdHlsZTogZW50aXR5LnByb3BlcnRpZXMuZm9udFN0eWxlIH0pO1xuICAgICAgICBvbEZlYXR1cmUuY2hhbmdlZCgpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuZm9udFNpemUgPSBzaXplO1xuICAgICAgdGhpcy5mb250U3R5bGUgPSBzdHlsZTtcblxuICAgICAgdGhpcy5kcmF3U3R5bGVTZXJ2aWNlLnNldEZvbnRTaXplKHNpemUpO1xuICAgICAgdGhpcy5kcmF3U3R5bGVTZXJ2aWNlLnNldEZvbnRTdHlsZShzdHlsZSk7XG5cbiAgICAgIHRoaXMuZWxlbWVudFN0eWxlKGxhYmVsc0FyZVNob3duKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIHVzZXIgY2hhbmdlcyB0aGUgdmFsdWUgb2YgdGhlIGhvcml6b250YWwvdmVydGljYWwgb2Zmc2V0XG4gICAqIEBwYXJhbSBsYWJlbHNBcmVTaG93biB3aGV0ZXIgdGhlIGxhYmVscyBhcmUgc2hvd24gb3Igbm90XG4gICAqIEBwYXJhbSBvZmZzZXRYIGhvcml6b250YWwgb2Zmc2V0IG9mIHRoZSBsYWJlbFxuICAgKiBAcGFyYW0gb2Zmc2V0WSB2ZXJ0aWNhbCBvZmZzZXQgb2YgdGhlIGxhYmVsXG4gICAqL1xuXG4gIG9uT2Zmc2V0TGFiZWxDaGFuZ2UoXG4gICAgbGFiZWxzQXJlU2hvd246IGJvb2xlYW4sXG4gICAgb2Zmc2V0WDogbnVtYmVyLFxuICAgIG9mZnNldFk6IG51bWJlclxuICApIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZEZlYXR1cmVzJC52YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLnZhbHVlLmZvckVhY2goKGZlYXR1cmUpID0+IHtcbiAgICAgICAgbGV0IG9sRmVhdHVyZSA9IGZlYXR1cmVUb09sKFxuICAgICAgICAgIGZlYXR1cmUsXG4gICAgICAgICAgdGhpcy5tYXAub2wuZ2V0VmlldygpLmdldFByb2plY3Rpb24oKS5nZXRDb2RlKClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy51cGRhdGVPZmZzZXQob2xGZWF0dXJlLCBvZmZzZXRYLCBvZmZzZXRZKTtcbiAgICAgICAgY29uc3QgZW50aXR5ID0gdGhpcy5hY3RpdmVTdG9yZVxuICAgICAgICAgIC5hbGwoKVxuICAgICAgICAgIC5maW5kKChlKSA9PiBlLm1ldGEuaWQgPT09IG9sRmVhdHVyZS5nZXRJZCgpKTtcbiAgICAgICAgZW50aXR5LnByb3BlcnRpZXMub2Zmc2V0WCA9IG9sRmVhdHVyZS5nZXQoJ29mZnNldFhfJyk7XG4gICAgICAgIGVudGl0eS5wcm9wZXJ0aWVzLm9mZnNldFkgPSBvbEZlYXR1cmUuZ2V0KCdvZmZzZXRZXycpO1xuICAgICAgICB0aGlzLmFjdGl2ZVN0b3JlLnVwZGF0ZShlbnRpdHkpO1xuICAgICAgICBvbEZlYXR1cmUgPSB0aGlzLmFjdGl2ZVN0b3JlLmxheWVyLm9sXG4gICAgICAgICAgLmdldFNvdXJjZSgpXG4gICAgICAgICAgLmdldEZlYXR1cmVzKClcbiAgICAgICAgICAuZmluZCgoZikgPT4gZi5nZXRJZCgpID09PSBlbnRpdHkubWV0YS5pZCk7XG4gICAgICAgIG9sRmVhdHVyZS5zZXRQcm9wZXJ0aWVzKHtcbiAgICAgICAgICBvZmZzZXRYOiBlbnRpdHkucHJvcGVydGllcy5vZmZzZXRYLFxuICAgICAgICAgIG9mZnNldFk6IGVudGl0eS5wcm9wZXJ0aWVzLm9mZnNldFlcbiAgICAgICAgfSk7XG4gICAgICAgIG9sRmVhdHVyZS5jaGFuZ2VkKCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZWxlbWVudFN0eWxlKGxhYmVsc0FyZVNob3duKTtcbiAgICB9XG4gIH1cblxuICBvbkljb25DaGFuZ2UoZXZlbnQ/KSB7XG4gICAgdGhpcy5pY29uID0gZXZlbnQ7XG4gICAgdGhpcy5kcmF3U3R5bGVTZXJ2aWNlLnNldEljb24odGhpcy5pY29uKTtcbiAgICB0aGlzLmVsZW1lbnRTdHlsZSh0cnVlLCB0aGlzLmljb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSB1c2VyIHNlbGVjdHMgYSBuZXcgZ2VvbWV0cnkgdHlwZVxuICAgKiBAcGFyYW0gZ2VvbWV0cnlUeXBlIHRoZSBnZW9tZXRyeSB0eXBlIHNlbGVjdGVkIGJ5IHRoZSB1c2VyXG4gICAqL1xuICBvbkdlb21ldHJ5VHlwZUNoYW5nZShnZW9tZXRyeVR5cGU6IFR5cGUpIHtcbiAgICB0aGlzLmN1cnJHZW9tZXRyeVR5cGUgPSBnZW9tZXRyeVR5cGU7XG4gICAgdGhpcy5hY3RpdmVEcmF3Q29udHJvbC5zZXRHZW9tZXRyeVR5cGUoZ2VvbWV0cnlUeXBlKTtcbiAgICB0aGlzLmZyZWVoYW5kTW9kZVxuICAgICAgPyB0aGlzLm9uVG9nZ2xlRnJlZWhhbmRNb2RlKHsgY2hlY2tlZDogdHJ1ZSB9KVxuICAgICAgOiB0aGlzLm9uVG9nZ2xlRnJlZWhhbmRNb2RlKHsgY2hlY2tlZDogZmFsc2UgfSk7XG4gICAgdGhpcy50b2dnbGVEcmF3Q29udHJvbCgpO1xuICB9XG5cbiAgLy8gVXBkYXRlcyB0aGUgcHJvcGVydGllcyBvZiBvbEZlYXR1cmUgaW5wdXR0ZWRcblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBsYWJlbCBvZiBhIGdlb21ldHJ5IHdoZW4gYSBsYWJlbCBpcyBlbnRlcmVkIGluIGEgZGlhbG9nIGJveFxuICAgKiBAcGFyYW0gT2xGZWF0dXJlIHRoZSBmZWF0dXJlXG4gICAqIEBwYXJhbSBsYWJlbCB0aGUgbGFiZWxcbiAgICovXG4gIHByaXZhdGUgdXBkYXRlTGFiZWxPZk9sR2VvbWV0cnkoT2xGZWF0dXJlLCBsYWJlbDogc3RyaW5nKSB7XG4gICAgT2xGZWF0dXJlLnNldFByb3BlcnRpZXMoXG4gICAgICB7XG4gICAgICAgIF9sYWJlbDogbGFiZWxcbiAgICAgIH0sXG4gICAgICB0cnVlXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRm9udFNpemVBbmRTdHlsZShcbiAgICBvbEZlYXR1cmU6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PixcbiAgICBmb250U2l6ZTogc3RyaW5nLFxuICAgIGZvbnRTdHlsZTogc3RyaW5nXG4gICkge1xuICAgIG9sRmVhdHVyZS5zZXRQcm9wZXJ0aWVzKFxuICAgICAge1xuICAgICAgICBmb250U3R5bGVfOiBgJHtmb250U2l6ZX1weCAke2ZvbnRTdHlsZX1gXG4gICAgICB9LFxuICAgICAgdHJ1ZVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUZpbGxBbmRTdHJva2VDb2xvcihcbiAgICBvbEZlYXR1cmU6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PixcbiAgICBmaWxsQ29sb3I6IHN0cmluZyxcbiAgICBzdHJva2VDb2xvcjogc3RyaW5nXG4gICkge1xuICAgIG9sRmVhdHVyZS5zZXRQcm9wZXJ0aWVzKFxuICAgICAge1xuICAgICAgICBmaWxsQ29sb3JfOiBmaWxsQ29sb3IsXG4gICAgICAgIHN0cm9rZUNvbG9yXzogc3Ryb2tlQ29sb3JcbiAgICAgIH0sXG4gICAgICB0cnVlXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlT2Zmc2V0KFxuICAgIG9sRmVhdHVyZTogT2xGZWF0dXJlPE9sR2VvbWV0cnk+LFxuICAgIG9mZnNldFg6IG51bWJlcixcbiAgICBvZmZzZXRZOiBudW1iZXJcbiAgKSB7XG4gICAgb2xGZWF0dXJlLnNldFByb3BlcnRpZXMoXG4gICAgICB7XG4gICAgICAgIG9mZnNldFhfOiBvZmZzZXRYLFxuICAgICAgICBvZmZzZXRZXzogb2Zmc2V0WVxuICAgICAgfSxcbiAgICAgIHRydWVcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVMYWJlbFR5cGUoXG4gICAgb2xGZWF0dXJlOiBPbEZlYXR1cmU8T2xHZW9tZXRyeT4sXG4gICAgdHlwZU9mTGFiZWw6IExhYmVsVHlwZSB8IFtMYWJlbFR5cGUsIExhYmVsVHlwZV1cbiAgKSB7XG4gICAgb2xGZWF0dXJlLnNldFByb3BlcnRpZXMoXG4gICAgICB7XG4gICAgICAgIGxhYmVsVHlwZV86IHR5cGVPZkxhYmVsXG4gICAgICB9LFxuICAgICAgdHJ1ZVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU1lYXN1cmVVbml0KFxuICAgIG9sRmVhdHVyZTogT2xGZWF0dXJlPE9sR2VvbWV0cnk+LFxuICAgIG1lYXN1cmVVbml0OiBNZWFzdXJlTGVuZ3RoVW5pdCB8IE1lYXN1cmVBcmVhVW5pdCB8IENvb3JkaW5hdGVzVW5pdCB8IFtdXG4gICkge1xuICAgIG9sRmVhdHVyZS5zZXRQcm9wZXJ0aWVzKFxuICAgICAge1xuICAgICAgICBtZWFzdXJlVW5pdF86IG1lYXN1cmVVbml0XG4gICAgICB9LFxuICAgICAgdHJ1ZVxuICAgICk7XG4gIH1cblxuICAvLyBVcGRhdGVzIHZhbHVlcyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudCBvbiB0aGUgSFRNTCB2aWV3XG5cbiAgZ2V0RmVhdHVyZUZvbnRTaXplKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQudmFsdWUubGVuZ3RoID4gMFxuICAgICAgPyB0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLnZhbHVlWzBdLnByb3BlcnRpZXMuZm9udFN0eWxlXG4gICAgICAgICAgLnNwbGl0KCcgJylbMF1cbiAgICAgICAgICAucmVwbGFjZSgncHgnLCAnJylcbiAgICAgIDogJzE1JztcbiAgfVxuXG4gIGdldEZlYXR1cmVGb250U3R5bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQudmFsdWUubGVuZ3RoID4gMFxuICAgICAgPyB0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLnZhbHVlWzBdLnByb3BlcnRpZXMuZm9udFN0eWxlLnN1YnN0cmluZyhcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLnZhbHVlWzBdLnByb3BlcnRpZXMuZm9udFN0eWxlLmluZGV4T2YoJyAnKSArIDFcbiAgICAgICAgKVxuICAgICAgOiBGb250VHlwZS5BcmlhbDtcbiAgfVxuXG4gIGdldEZlYXR1cmVGaWxsQ29sb3IoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQudmFsdWUubGVuZ3RoID4gMFxuICAgICAgPyB0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLnZhbHVlWzBdLnByb3BlcnRpZXMuZHJhd2luZ1N0eWxlLmZpbGxcbiAgICAgIDogJ3JnYmEoMjU1LDI1NSwyNTUsMC40KSc7XG4gIH1cblxuICBnZXRGZWF0dXJlU3Ryb2tlQ29sb3IoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQudmFsdWUubGVuZ3RoID4gMFxuICAgICAgPyB0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLnZhbHVlWzBdLnByb3BlcnRpZXMuZHJhd2luZ1N0eWxlLnN0cm9rZVxuICAgICAgOiAncmdiYSgxNDMsNyw3LDEpJztcbiAgfVxuXG4gIGdldEZlYXR1cmVPZmZzZXRYKCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLnZhbHVlLmxlbmd0aCA+IDBcbiAgICAgID8gdGhpcy5zZWxlY3RlZEZlYXR1cmVzJC52YWx1ZVswXS5wcm9wZXJ0aWVzLm9mZnNldFhcbiAgICAgIDogdGhpcy5kcmF3U3R5bGVTZXJ2aWNlLmdldE9mZnNldFgoKTtcbiAgfVxuXG4gIGdldEZlYXR1cmVPZmZzZXRZKCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLnZhbHVlLmxlbmd0aCA+IDBcbiAgICAgID8gdGhpcy5zZWxlY3RlZEZlYXR1cmVzJC52YWx1ZVswXS5wcm9wZXJ0aWVzLm9mZnNldFlcbiAgICAgIDogJzAnO1xuICB9XG5cbiAgZ2V0IGFsbEZvbnRTdHlsZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKEZvbnRUeXBlKTtcbiAgfVxuXG4gIGdldCBhbGxMYXllcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwLmxheWVycy5maWx0ZXIoKGxheWVyKSA9PlxuICAgICAgU3RyaW5nKGxheWVyLmlkKS5pbmNsdWRlcygnaWdvLWRyYXctbGF5ZXInKVxuICAgICk7XG4gIH1cblxuICB1cGRhdGVIZWlnaHRUYWJsZSgpIHtcbiAgICAvLyBDaGVjayB0aGUgYW1vdW50IG9mIHJvd3MgYXMgYSBwb3NzaWJsZSBhbHRlcm5hdGl2ZVxuICAgIHRoaXMubnVtYmVyT2ZEcmF3aW5ncyA9IHRoaXMuYWN0aXZlU3RvcmUuY291bnQkLmdldFZhbHVlKCk7XG4gICAgdGhpcy5udW1iZXJPZkRyYXdpbmdzID4gMTBcbiAgICAgID8gKHRoaXMudGFibGVUZW1wbGF0ZS50YWJsZUhlaWdodCA9ICczNXZoJylcbiAgICAgIDogKHRoaXMudGFibGVUZW1wbGF0ZS50YWJsZUhlaWdodCA9ICdhdXRvJyk7XG4gIH1cblxuICB1cGRhdGVBY3RpdmVMYXllcigpIHtcbiAgICBsZXQgY3VyckxheWVyID0gdGhpcy5hbGxMYXllcnMuZmluZChcbiAgICAgIChsYXllcikgPT4gbGF5ZXIudGl0bGUgPT09IHRoaXMuYWN0aXZlRHJhd2luZ0xheWVyLnRpdGxlXG4gICAgKTtcbiAgICByZXR1cm4gY3VyckxheWVyID8gY3VyckxheWVyIDogdGhpcy5hbGxMYXllcnNbMF07XG4gIH1cblxuICAvLyBIZWxwZXIgbWV0aG9kc1xuXG4gIC8qKlxuICAgKiBBY3RpdmF0ZSB0aGUgY29ycmVjdCBjb250cm9sXG4gICAqL1xuICBwcml2YXRlIHRvZ2dsZURyYXdDb250cm9sKCkge1xuICAgIHRoaXMuZGVhY3RpdmF0ZURyYXdDb250cm9sKCk7XG4gICAgdGhpcy5hY3RpdmF0ZURyYXdDb250cm9sKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgdGhlIHRvb2x0aXBzIG9mIGFuIE9MIGdlb21ldHJ5XG4gICAqIEBwYXJhbSBvbEdlb21ldHJ5IE9MIGdlb21ldHJ5IHdpdGggdG9vbHRpcHNcbiAgICovXG4gIHByaXZhdGUgY2xlYXJMYWJlbHNPZk9sR2VvbWV0cnkob2xHZW9tZXRyeSkge1xuICAgIGdldFRvb2x0aXBzT2ZPbEdlb21ldHJ5KG9sR2VvbWV0cnkpLmZvckVhY2goXG4gICAgICAob2xUb29sdGlwOiBPbE92ZXJsYXkgfCB1bmRlZmluZWQpID0+IHtcbiAgICAgICAgaWYgKG9sVG9vbHRpcCAmJiBvbFRvb2x0aXAuZ2V0TWFwKCkpIHtcbiAgICAgICAgICB0aGlzLm1hcC5vbC5yZW1vdmVPdmVybGF5KG9sVG9vbHRpcCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBSZXBsYWNlIHRoZSBmZWF0dXJlIGluIHRoZSBzdG9yZVxuICAgKiBAcGFyYW0gZW50aXR5IHRoZSBlbnRpdHkgdG8gcmVwbGFjZVxuICAgKiBAcGFyYW0gb2xHZW9tZXRyeSB0aGUgbmV3IGdlb21ldHJ5IHRvIGluc2VydCBpbiB0aGUgc3RvcmVcbiAgICovXG4gIHByaXZhdGUgcmVwbGFjZUZlYXR1cmVJblN0b3JlKFxuICAgIGVudGl0eSxcbiAgICBvbEdlb21ldHJ5OiBPbEdlb21ldHJ5LFxuICAgIHJhZGl1cz86IG51bWJlclxuICApIHtcbiAgICB0aGlzLmFjdGl2ZVN0b3JlLmRlbGV0ZShlbnRpdHkpO1xuICAgIHRoaXMub25EcmF3RW5kKG9sR2VvbWV0cnksIHJhZGl1cyk7XG4gIH1cblxuICAvKipcbiAgICogRGVhY3RpdmF0ZSB0aGUgYWN0aXZlIGRyYXcgY29udHJvbFxuICAgKi9cbiAgcHJpdmF0ZSBkZWFjdGl2YXRlRHJhd0NvbnRyb2woKSB7XG4gICAgaWYgKCF0aGlzLmFjdGl2ZURyYXdDb250cm9sKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZHJhd0VuZCQkKSB7XG4gICAgICB0aGlzLmRyYXdFbmQkJC51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHRoaXMuYWN0aXZlRHJhd0NvbnRyb2wuc2V0T2xNYXAodW5kZWZpbmVkKTtcbiAgICB0aGlzLmRyYXdDb250cm9sSXNBY3RpdmUgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY3RpdmF0ZSBhIGdpdmVuIGNvbnRyb2xcbiAgICovXG4gIHByaXZhdGUgYWN0aXZhdGVEcmF3Q29udHJvbCgpIHtcbiAgICB0aGlzLmRyYXdDb250cm9sSXNEaXNhYmxlZCA9IGZhbHNlO1xuICAgIHRoaXMuZHJhd0NvbnRyb2xJc0FjdGl2ZSA9IHRydWU7XG4gICAgdGhpcy5kcmF3RW5kJCQgPSB0aGlzLmFjdGl2ZURyYXdDb250cm9sLmVuZCQuc3Vic2NyaWJlKFxuICAgICAgKG9sR2VvbWV0cnk6IE9sR2VvbWV0cnkpID0+IHtcbiAgICAgICAgdGhpcy5vcGVuRHJhd0RpYWxvZyhvbEdlb21ldHJ5LCB0cnVlKTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5hY3RpdmVEcmF3Q29udHJvbC5tb2RpZnkkLnN1YnNjcmliZSgob2xHZW9tZXRyeTogT2xHZW9tZXRyeSkgPT4ge1xuICAgICAgdGhpcy5vbk1vZGlmeURyYXcob2xHZW9tZXRyeSk7XG4gICAgfSk7XG5cbiAgICBpZiAoIXRoaXMuZHJhd1NlbGVjdCQkKSB7XG4gICAgICB0aGlzLmRyYXdTZWxlY3QkJCA9IHRoaXMuYWN0aXZlRHJhd0NvbnRyb2wuc2VsZWN0JC5zdWJzY3JpYmUoXG4gICAgICAgIChvbEZlYXR1cmU6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PikgPT4ge1xuICAgICAgICAgIHRoaXMub3BlbkRyYXdEaWFsb2cob2xGZWF0dXJlLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuYWN0aXZlRHJhd0NvbnRyb2wuc2V0T2xNYXAodGhpcy5tYXAub2wsIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIGdldCB0aGUgZ2VvbWV0cnkgb2YgZGVzaWduXG4gICAqXG4gICAqL1xuXG4gIGlzUG9pbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlRHJhd0NvbnRyb2wuZ2V0R2VvbWV0cnlUeXBlKCkgPT09IHRoaXMuZ2VvbWV0cnlUeXBlLlBvaW50O1xuICB9XG5cbiAgaXNMaW5lU3RyaW5nKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmFjdGl2ZURyYXdDb250cm9sLmdldEdlb21ldHJ5VHlwZSgpID09PSB0aGlzLmdlb21ldHJ5VHlwZS5MaW5lU3RyaW5nXG4gICAgKTtcbiAgfVxuXG4gIGlzUG9seWdvbigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5hY3RpdmVEcmF3Q29udHJvbC5nZXRHZW9tZXRyeVR5cGUoKSA9PT0gdGhpcy5nZW9tZXRyeVR5cGUuUG9seWdvblxuICAgICk7XG4gIH1cblxuICBpc0NpcmNsZSgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5hY3RpdmVEcmF3Q29udHJvbC5nZXRHZW9tZXRyeVR5cGUoKSA9PT0gdGhpcy5nZW9tZXRyeVR5cGUuQ2lyY2xlXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZm9uY3Rpb24gdG8gcHJlZGVmaW5lIHRoZSByYWRpdXMgb2YgdGhlIHVzZXJcbiAgICpcbiAgICovXG5cbiAgY2hhbmdlUmFkaXVzKHJhZGl1czogbnVtYmVyKSB7XG4gICAgbGV0IHJhZGl1c01ldGVyczogbnVtYmVyO1xuXG4gICAgaWYgKHJhZGl1cykge1xuICAgICAgdGhpcy5tZWFzdXJlVW5pdCA9PT0gTWVhc3VyZUxlbmd0aFVuaXQuTWV0ZXJzXG4gICAgICAgID8gKHJhZGl1c01ldGVycyA9IHJhZGl1cylcbiAgICAgICAgOiAocmFkaXVzTWV0ZXJzID0gcmFkaXVzICogMTAwMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJhZGl1c01ldGVycyA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBwb2ludFN0eWxlID0gKGZlYXR1cmU6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PiwgcmVzb2x1dGlvbjogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCBnZW9tID0gZmVhdHVyZS5nZXRHZW9tZXRyeSgpIGFzIE9sUG9pbnQ7XG4gICAgICBjb25zdCBjb29yZGluYXRlcyA9IG9scHJvai50cmFuc2Zvcm0oXG4gICAgICAgIGdlb20uZ2V0Q29vcmRpbmF0ZXMoKSxcbiAgICAgICAgdGhpcy5tYXAucHJvamVjdGlvbixcbiAgICAgICAgJ0VQU0c6NDMyNidcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHJhZGl1cyA9XG4gICAgICAgIHJhZGl1c01ldGVycyAvIE1hdGguY29zKChNYXRoLlBJIC8gMTgwKSAqIGNvb3JkaW5hdGVzWzFdKSAvIHJlc29sdXRpb247XG4gICAgICB0aGlzLmFjdGl2ZURyYXdDb250cm9sLnByZWRlZmluZWRSYWRpdXMkLm5leHQocmFkaXVzTWV0ZXJzKTtcbiAgICAgIHJldHVybiBuZXcgT2xTdHlsZS5TdHlsZSh7XG4gICAgICAgIGltYWdlOiBuZXcgT2xTdHlsZS5DaXJjbGUoe1xuICAgICAgICAgIHJhZGl1czogcmFkaXVzLFxuICAgICAgICAgIHN0cm9rZTogbmV3IE9sU3R5bGUuU3Ryb2tlKHtcbiAgICAgICAgICAgIHdpZHRoOiAxLFxuICAgICAgICAgICAgY29sb3I6ICdyZ2JhKDE0Myw3LDcsMSknXG4gICAgICAgICAgfSksXG4gICAgICAgICAgZmlsbDogbmV3IE9sU3R5bGUuRmlsbCh7XG4gICAgICAgICAgICBjb2xvcjogJ3JnYmEoMjU1LDI1NSwyNTUsMC40KSdcbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHRoaXMuYWN0aXZlRHJhd0NvbnRyb2wuc2V0T2xJbnRlcmFjdGlvblN0eWxlKHBvaW50U3R5bGUpO1xuICAgIHRoaXMudG9nZ2xlRHJhd0NvbnRyb2woKTtcbiAgfVxuXG4gIG9uTWVhc3VyZVVuaXRDaGFuZ2Uoc2VsZWN0ZWRNZWFzdXJlVW5pdDogTWVhc3VyZUxlbmd0aFVuaXQpIHtcbiAgICBpZiAoc2VsZWN0ZWRNZWFzdXJlVW5pdCA9PT0gdGhpcy5tZWFzdXJlVW5pdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1lYXN1cmVVbml0ID0gc2VsZWN0ZWRNZWFzdXJlVW5pdDtcbiAgICAgIHRoaXMubWVhc3VyZVVuaXQgPT09IE1lYXN1cmVMZW5ndGhVbml0Lk1ldGVyc1xuICAgICAgICA/IHRoaXMucmFkaXVzRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5yYWRpdXNGb3JtQ29udHJvbC52YWx1ZSAqIDEwMDApXG4gICAgICAgIDogdGhpcy5yYWRpdXNGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLnJhZGl1c0Zvcm1Db250cm9sLnZhbHVlIC8gMTAwMCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlY3JlYXRlcyB0aGUgc3R5bGUgb2YgdGhlIGZlYXR1cmUgc3RvcmVkXG4gICAqL1xuICBwcml2YXRlIGVsZW1lbnRTdHlsZShsYWJlbHNBcmVTaG93bjogYm9vbGVhbiwgaXNBbkljb24/KSB7XG4gICAgaWYgKGlzQW5JY29uKSB7XG4gICAgICB0aGlzLmFjdGl2ZVN0b3JlLmxheWVyLm9sLnNldFN0eWxlKChmZWF0dXJlLCByZXNvbHV0aW9uKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRyYXdTdHlsZVNlcnZpY2UuY3JlYXRlSW5kaXZpZHVhbEVsZW1lbnRTdHlsZShcbiAgICAgICAgICBmZWF0dXJlLFxuICAgICAgICAgIHJlc29sdXRpb24sXG4gICAgICAgICAgbGFiZWxzQXJlU2hvd24sXG4gICAgICAgICAgZmVhdHVyZS5nZXQoJ2ZvbnRTdHlsZScpLFxuICAgICAgICAgIGZlYXR1cmUuZ2V0KCdkcmF3aW5nU3R5bGUnKS5maWxsLFxuICAgICAgICAgIGZlYXR1cmUuZ2V0KCdkcmF3aW5nU3R5bGUnKS5zdHJva2UsXG4gICAgICAgICAgZmVhdHVyZS5nZXQoJ29mZnNldFgnKSxcbiAgICAgICAgICBmZWF0dXJlLmdldCgnb2Zmc2V0WScpLFxuICAgICAgICAgIHRoaXMubWFwLnByb2plY3Rpb24sXG4gICAgICAgICAgdGhpcy5pY29uXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hY3RpdmVTdG9yZS5sYXllci5vbC5zZXRTdHlsZSgoZmVhdHVyZSwgcmVzb2x1dGlvbikgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kcmF3U3R5bGVTZXJ2aWNlLmNyZWF0ZUluZGl2aWR1YWxFbGVtZW50U3R5bGUoXG4gICAgICAgICAgZmVhdHVyZSxcbiAgICAgICAgICByZXNvbHV0aW9uLFxuICAgICAgICAgIGxhYmVsc0FyZVNob3duLFxuICAgICAgICAgIGZlYXR1cmUuZ2V0KCdmb250U3R5bGUnKSxcbiAgICAgICAgICBmZWF0dXJlLmdldCgnZHJhd2luZ1N0eWxlJykuZmlsbCxcbiAgICAgICAgICBmZWF0dXJlLmdldCgnZHJhd2luZ1N0eWxlJykuc3Ryb2tlLFxuICAgICAgICAgIGZlYXR1cmUuZ2V0KCdvZmZzZXRYJyksXG4gICAgICAgICAgZmVhdHVyZS5nZXQoJ29mZnNldFknKSxcbiAgICAgICAgICB0aGlzLm1hcC5wcm9qZWN0aW9uXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFJhZGl1cyhvbEdlb21ldHJ5KTogbnVtYmVyIHtcbiAgICBjb25zdCBsZW5ndGggPSBnZXRMZW5ndGgob2xHZW9tZXRyeSk7XG4gICAgcmV0dXJuIE51bWJlcihsZW5ndGggLyAoMiAqIE1hdGguUEkpKTtcbiAgfVxufVxuIiwiPGRpdj5cbiAgPGRpdiBjbGFzcz1cImdlb21ldHJ5LXR5cGUtdG9nZ2xlIG1hdC10eXBvZ3JhcGh5XCI+XG4gICAgPG1hdC1idXR0b24tdG9nZ2xlLWdyb3VwXG4gICAgICAoY2hhbmdlKT1cIm9uR2VvbWV0cnlUeXBlQ2hhbmdlKCRldmVudC52YWx1ZSlcIlxuICAgICAgW3ZhbHVlXT1cImdlb21ldHJ5VHlwZS5Qb2ludFwiXG4gICAgPlxuICAgICAgPG1hdC1idXR0b24tdG9nZ2xlIFt2YWx1ZV09XCJnZW9tZXRyeVR5cGUuUG9pbnRcIj5cbiAgICAgICAge3sgJ2lnby5nZW8uZHJhdy4nICsgZ2VvbWV0cnlUeXBlLlBvaW50IHwgdHJhbnNsYXRlIH19XG4gICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxuXG4gICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgW3ZhbHVlXT1cImdlb21ldHJ5VHlwZS5MaW5lU3RyaW5nXCI+XG4gICAgICAgIHt7ICdpZ28uZ2VvLmRyYXcuJyArIGdlb21ldHJ5VHlwZS5MaW5lU3RyaW5nIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxuXG4gICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgW3ZhbHVlXT1cImdlb21ldHJ5VHlwZS5Qb2x5Z29uXCI+XG4gICAgICAgIHt7ICdpZ28uZ2VvLmRyYXcuJyArIGdlb21ldHJ5VHlwZS5Qb2x5Z29uIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxuXG4gICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgW3ZhbHVlXT1cImdlb21ldHJ5VHlwZS5DaXJjbGVcIj5cbiAgICAgICAge3sgJ2lnby5nZW8uZHJhdy4nICsgZ2VvbWV0cnlUeXBlLkNpcmNsZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICA8L21hdC1idXR0b24tdG9nZ2xlLWdyb3VwPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiZHJhdy1vcHRpb25zIG1hdC10eXBvZ3JhcGh5XCI+XG4gICAgPG1hdC1zbGlkZS10b2dnbGVcbiAgICAgIFtkaXNhYmxlZF09XCJkcmF3Q29udHJvbElzRGlzYWJsZWRcIlxuICAgICAgW2NoZWNrZWRdPVwiZHJhd0NvbnRyb2xJc0FjdGl2ZVwiXG4gICAgICBbbGFiZWxQb3NpdGlvbl09XCInYmVmb3JlJ1wiXG4gICAgICAoY2hhbmdlKT1cIm9uVG9nZ2xlRHJhd0NvbnRyb2woJGV2ZW50LmNoZWNrZWQpXCJcbiAgICA+XG4gICAgICB7eyAnaWdvLmdlby5kcmF3LmRyYXdDb250cm9sJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cblxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlXG4gICAgICBbY2hlY2tlZF09XCJsYWJlbHNBcmVTaG93blwiXG4gICAgICBbbGFiZWxQb3NpdGlvbl09XCInYmVmb3JlJ1wiXG4gICAgICAoY2hhbmdlKT1cIm9uVG9nZ2xlTGFiZWxzKClcIlxuICAgID5cbiAgICAgIHt7ICdpZ28uZ2VvLmRyYXcudG9nZ2xlTWFwVG9vbHRpcHMnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuXG4gICAgPG1hdC1zbGlkZS10b2dnbGVcbiAgICAgICpuZ0lmPVwiIWlzUG9pbnQoKVwiXG4gICAgICBbY2hlY2tlZF09XCJmcmVlaGFuZE1vZGVcIlxuICAgICAgW2xhYmVsUG9zaXRpb25dPVwiJ2JlZm9yZSdcIlxuICAgICAgKGNoYW5nZSk9XCJvblRvZ2dsZUZyZWVoYW5kTW9kZSgkZXZlbnQpXCJcbiAgICA+XG4gICAgICB7eyAnaWdvLmdlby5kcmF3LmZyZWVoYW5kTW9kZScgfCB0cmFuc2xhdGUgfX1cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG5cbiAgICA8ZGl2IGNsYXNzPVwicmFkaXVzLXVuaXRcIiAqbmdJZj1cImlzQ2lyY2xlKClcIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInJhZGl1c1wiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgIG1pbj1cIjBcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ2lnby5nZW8uc3BhdGlhbEZpbHRlci5yYWRpdXMnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwicmFkaXVzRm9ybUNvbnRyb2xcIlxuICAgICAgICAgIFtyZWFkb25seV09XCJ0aGlzLmZyZWVoYW5kTW9kZVwiXG4gICAgICAgIC8+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ1bml0LWZpZWxkXCI+XG4gICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgW3ZhbHVlXT1cIm1lYXN1cmVVbml0XCJcbiAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uTWVhc3VyZVVuaXRDaGFuZ2UoJGV2ZW50LnZhbHVlKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8bWF0LW9wdGlvblxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IG1lYXN1cmVVbml0IG9mIG1lYXN1cmVVbml0c1wiXG4gICAgICAgICAgICBbdmFsdWVdPVwibWVhc3VyZVVuaXRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7ICdpZ28uZ2VvLm1lYXN1cmUuJyArIG1lYXN1cmVVbml0IHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cblxuICA8ZGl2IGNsYXNzPVwibGF5ZXItc2VsZWN0LWNvbnRhaW5lclwiPlxuICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImxheWVyLXNlbGVjdFwiIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIj5cbiAgICAgIDxtYXQtbGFiZWw+e3sgJ2lnby5nZW8uZHJhdy5sYXllci50aXRsZScgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICNzZWxlY3RlZExheWVyXG4gICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25MYXllckNoYW5nZShzZWxlY3RlZExheWVyLnZhbHVlKVwiXG4gICAgICAgIFt2YWx1ZV09XCJ1cGRhdGVBY3RpdmVMYXllcigpXCJcbiAgICAgID5cbiAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGxheWVyIG9mIGFsbExheWVyc1wiIFt2YWx1ZV09XCJsYXllclwiPlxuICAgICAgICAgIHt7IGxheWVyLnRpdGxlIH19XG4gICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgPG1hdC1vcHRpb24gaWQ9XCJjcmVhdGVOZXdMYXllclwiPlxuICAgICAgICAgIHt7ICdpZ28uZ2VvLmRyYXcubGF5ZXIuY3JlYXRlTmV3TGF5ZXInIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDxidXR0b25cbiAgICAgICpuZ0lmPVwiYWN0aXZlRHJhd2luZ0xheWVyXCJcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgW2NvbG9yXT1cImFjdGl2ZURyYXdpbmdMYXllci52aXNpYmxlID8gJ3ByaW1hcnknIDogJ2RlZmF1bHQnXCJcbiAgICAgIGNvbGxhcHNpYmxlQnV0dG9uXG4gICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxuICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICBbbWF0VG9vbHRpcF09XCJcbiAgICAgICAgYWN0aXZlRHJhd2luZ0xheWVyLnZpc2libGVcbiAgICAgICAgICA/ICgnaWdvLmdlby5sYXllci5oaWRlTGF5ZXInIHwgdHJhbnNsYXRlKVxuICAgICAgICAgIDogKCdpZ28uZ2VvLmxheWVyLnNob3dMYXllcicgfCB0cmFuc2xhdGUpXG4gICAgICBcIlxuICAgICAgKGNsaWNrKT1cImFjdGl2ZURyYXdpbmdMYXllci52aXNpYmxlID0gIWFjdGl2ZURyYXdpbmdMYXllci52aXNpYmxlXCJcbiAgICA+XG4gICAgICA8bWF0LWljb24+XG4gICAgICAgIHt7IGFjdGl2ZURyYXdpbmdMYXllci52aXNpYmxlID8gJ3Zpc2liaWxpdHknIDogJ3Zpc2liaWxpdHlfb2ZmJyB9fVxuICAgICAgPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG4gIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICA8ZGl2PlxuICAgIDxidXR0b25cbiAgICAgICpuZ0lmPVwiYWN0aXZlU3RvcmUuY291bnQkLmdldFZhbHVlKCkgPiAwXCJcbiAgICAgIGNsYXNzPVwiZGVsZXRlQnRuXCJcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgY29sb3I9XCJ3YXJuXCJcbiAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXG4gICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmRyYXcuZGVsZXRlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICBbZGlzYWJsZWRdPVwiKHNlbGVjdGVkRmVhdHVyZXMkIHwgYXN5bmMpLmxlbmd0aCA9PT0gMFwiXG4gICAgICAoY2xpY2spPVwiZGVsZXRlRHJhd2luZ3MoKVwiXG4gICAgPlxuICAgICAgPG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG5cbiAgICA8ZGl2PlxuICAgICAgPGlnby1lbnRpdHktdGFibGVcbiAgICAgICAgI3RhYmxlXG4gICAgICAgIGNsYXNzPVwidGFibGUtY29tcGFjdFwiXG4gICAgICAgIFtzdG9yZV09XCJhY3RpdmVTdG9yZVwiXG4gICAgICAgIFt0ZW1wbGF0ZV09XCJ0YWJsZVRlbXBsYXRlXCJcbiAgICAgID5cbiAgICAgIDwvaWdvLWVudGl0eS10YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImljb24tb3B0aW9uc1wiPlxuICAgIDxtYXQtZm9ybS1maWVsZCAqbmdJZj1cImljb25zLmxlbmd0aCA+PSAxXCI+XG4gICAgICA8bWF0LWxhYmVsPnt7ICdpZ28uZ2VvLmRyYXcuaWNvbicgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgIDxtYXQtc2VsZWN0PlxuICAgICAgICA8bWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJpY29uXCIgY2xhc3M9XCJib3hcIj5cbiAgICAgICAgICAgIDxpbWcgc3JjPVwie3sgaWNvbiB9fVwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlwiIChjbGljayk9XCJvbkljb25DaGFuZ2UoKVwiPnt7XG4gICAgICAgICAgJ2lnby5nZW8uZHJhdy5ub0ljb24nIHwgdHJhbnNsYXRlXG4gICAgICAgIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICA8bWF0LW9wdGlvblxuICAgICAgICAgICpuZ0Zvcj1cImxldCBpY29uX2h0bWwgb2YgaWNvbnNcIlxuICAgICAgICAgIFt2YWx1ZV09XCJpY29uX2h0bWxcIlxuICAgICAgICAgIChjbGljayk9XCJvbkljb25DaGFuZ2UoaWNvbl9odG1sKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm94XCI+XG4gICAgICAgICAgICA8aW1nIHNyYz1cInt7IGljb25faHRtbCB9fVwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiYWN0aW9ucy1jb250YWluZXJcIj5cbiAgICA8YnV0dG9uXG4gICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgIGNvbG9yPVwiYWNjZW50XCJcbiAgICAgIGRpc2FibGVSaXBwbGU9XCJ0cnVlXCJcbiAgICAgIChjbGljayk9XCJvcGVuU2hvcmN1dHNEaWFsb2coKVwiXG4gICAgPlxuICAgICAgPG1hdC1pY29uXG4gICAgICAgIGNsYXNzPVwic2hvcnRjdXRzLWljb25cIlxuICAgICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxuICAgICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8uZHJhdy5zaG9ydGN1dHMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgPmtleWJvYXJkXG4gICAgICA8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuXG4gICAgPGJ1dHRvblxuICAgICAgKm5nSWY9XCJzZWxlY3RlZEZlYXR1cmVzJC52YWx1ZS5sZW5ndGhcIlxuICAgICAgbWF0LXJhaXNlZC1idXR0b25cbiAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAoY2xpY2spPVwib3BlblN0eWxlTW9kYWxEaWFsb2coKVwiXG4gICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5zdHlsZS5zdHlsZU1vZGFsVG9vbHRpcFNlbGVjdGVkJyB8IHRyYW5zbGF0ZVwiXG4gICAgPlxuICAgICAge3sgJ2lnby5nZW8uc3R5bGUuc3R5bGVNb2RhbCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDxtYXQtaWNvblxuICAgICAgICBhcmlhLWhpZGRlbj1cImZhbHNlXCJcbiAgICAgICAgaWNvblBvc2l0aW9uRW5kXG4gICAgICAgIGNsYXNzPVwic3R5bGUtaWNvblwiXG4gICAgICAgIFttYXRCYWRnZV09XCJzZWxlY3RlZEZlYXR1cmVzJC52YWx1ZS5sZW5ndGhcIlxuICAgICAgICBtYXRCYWRnZUNvbG9yPVwid2FyblwiXG4gICAgICAgIG1hdEJhZGdlU2l6ZT1cIm1lZGl1bVwiXG4gICAgICAgID5wYWxldHRlXG4gICAgICA8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19