@smarterplan/ngx-smarterplan-locations 0.2.43 → 0.2.45

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.
Files changed (25) hide show
  1. package/esm2020/lib/components/detail-location/detail-location.component.mjs +3 -3
  2. package/esm2020/lib/components/form-location/form-location.component.mjs +3 -3
  3. package/esm2020/lib/components/images/images.component.mjs +1 -1
  4. package/esm2020/lib/components/locations/locations.component.mjs +3 -3
  5. package/esm2020/lib/components/plan-legend/plan-legend.component.mjs +3 -3
  6. package/esm2020/lib/components/plans/calibration/calibration.component.mjs +3 -3
  7. package/esm2020/lib/components/plans/edit-plan/edit-plan.component.mjs +3 -3
  8. package/esm2020/lib/components/plans/plans.component.mjs +1 -1
  9. package/esm2020/lib/components/tab-navigation/tab-navigation.component.mjs +1 -1
  10. package/esm2020/lib/components/visits/visits.component.mjs +3 -3
  11. package/esm2020/lib/components/zones/add-audio-zone/add-audio-zone.component.mjs +3 -3
  12. package/esm2020/lib/components/zones/add-zone/add-zone.component.mjs +3 -3
  13. package/esm2020/lib/components/zones/add-zone/sweep-plan-selection/sweep-plan-selection.component.mjs +3 -3
  14. package/esm2020/lib/components/zones/zones.component.mjs +16 -13
  15. package/esm2020/lib/helper.service.mjs +1 -1
  16. package/esm2020/lib/ngx-smarterplan-location-routing.module.mjs +1 -1
  17. package/esm2020/lib/ngx-smarterplan-locations.module.mjs +1 -1
  18. package/esm2020/lib/pipes/count-audio-sweeps.pipe.mjs +1 -1
  19. package/esm2020/lib/radio-button/radio-button.component.mjs +3 -3
  20. package/fesm2015/smarterplan-ngx-smarterplan-locations.mjs +37 -34
  21. package/fesm2015/smarterplan-ngx-smarterplan-locations.mjs.map +1 -1
  22. package/fesm2020/smarterplan-ngx-smarterplan-locations.mjs +37 -34
  23. package/fesm2020/smarterplan-ngx-smarterplan-locations.mjs.map +1 -1
  24. package/lib/components/zones/zones.component.d.ts +2 -1
  25. package/package.json +2 -2
@@ -160,9 +160,9 @@ export class DetailLocationComponent {
160
160
  }
161
161
  }
162
162
  DetailLocationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: DetailLocationComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.SpaceService }, { token: i1.Router }, { token: i2.BaseUserService }, { token: i3.TranslateService }, { token: i2.NavigatorService }], target: i0.ɵɵFactoryTarget.Component });
163
- DetailLocationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: DetailLocationComponent, selector: "lib-detail-location", ngImport: i0, template: "<div class=\"container-fluid\">\r\n <div class=\"m-3\">\r\n <lib-tab-navigation [menuItems]='menuItems' (onGoBack)=\"reset()\"></lib-tab-navigation>\r\n </div>\r\n <button class=\"btn btn-outline-primary rounded-pill me-3\" (click)=\"onReturn()\">{{'Back to locations' |\r\n translate}}</button>\r\n <div class=\"row\" *ngIf=\"!isEditing && space\">\r\n <div class=\"col-md-5\">\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item bg-transparent\">{{'Name' | translate}}: {{space.name}} </li>\r\n <li class=\"list-group-item bg-transparent\">{{'Address' | translate}}: {{space.addresses}} </li>\r\n <li class=\"list-group-item bg-transparent\">{{'Construction year' | translate}}:\r\n {{space.constructionYear ?\r\n space.constructionYear : \"No data\" | translate}} </li>\r\n <li class=\"list-group-item bg-transparent\">{{'Latitude' | translate}}:\r\n {{space.latitude ?\r\n space.latitude : \"No data\" | translate}}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'Longitude' | translate}}: {{space.longitude ?\r\n space.longitude : \"No data\" | translate}} </li>\r\n <li class=\"list-group-item bg-transparent\">{{'Access level' | translate}}: {{space.level | translate\r\n }} </li>\r\n <li class=\"list-group-item bg-transparent\">{{'Energy Class' | translate}}:\r\n {{space.classEnergyConsumption ?\r\n space.classEnergyConsumption : \"No data\" | translate}}\r\n <button *ngIf=\"space.status !== 'DPE_TO_VALIDATE'\"\r\n class=\"btn btn-outline-primary rounded-pill no-lowercase ms-5\" (click)=\"onGetDpeData()\">\r\n {{'Get data from API DPE' | translate}}</button>\r\n <a class=\"bg-transparent ms-5\" *ngIf=\"space.status === 'DPE_TO_VALIDATE'\"\r\n (click)=\"onDpeValidate()\" style=\"cursor: pointer;\">\r\n <span class=\"iconify\" data-icon=\"mdi:alert-circle-check\" style=\"color: #f19c80;\" data-width=\"25\"\r\n data-height=\"25\"></span>\r\n {{'DPE data found. Click to validate' | translate}}\r\n </a>\r\n </li>\r\n <li class=\"list-group-item bg-transparent\">{{'Greenhouse gas emission Class' | translate}}:\r\n {{space.classGes ? space.classGes : \"No data\" | translate}} </li>\r\n <li class=\"list-group-item bg-transparent\">{{'Shareable Guest Link' | translate}}:\r\n <div style=\"display: inline;\" *ngIf=\"guestLink\">\r\n <a id=\"linkHref\" target=\"_blank\">{{'Try the link' | translate }}</a>\r\n <div ngxClipboard [cbContent]=\"guestLink\" [style.cursor]=\"'pointer'\"\r\n style=\"margin-left: 5px; max-width: 20px; display: inline;\" ngbTooltip=\"Copied!\"\r\n triggers=\"click:blur\">\r\n <span class=\"iconify\" data-icon=\"mdi:content-copy\" data-inline=\"false\" data-width=\"20\"\r\n data-height=\"20\"></span>\r\n </div>\r\n </div>\r\n <p *ngIf=\"!guestLink\" style=\"display: inline;\">{{'No link' | translate }}</p>\r\n <p *ngIf=\"!guestLink\"><small>({{'Generate link from a VISITOR mission'|translate}})</small>\r\n </p>\r\n </li>\r\n\r\n </ul>\r\n <div class=\"d-flex justify-content-center\" *ngIf=\"gettingData\">\r\n <div class=\"spinner-border\" role=\"status\">\r\n <span class=\"visually-hidden\">Loading...</span>\r\n </div>\r\n </div>\r\n <hr>\r\n <div class=\"d-flex\">\r\n <button class=\"btn btn-outline-primary rounded-pill me-3\" (click)=\"onEdit()\" data-testid=\"location-edit-btn\">{{'Edit' |\r\n translate}}</button>\r\n <div class=\"tooltip-wrapper\" ngbTooltip=\"{{!canArchive ? ('Contact SmarterPlan' | translate) : ('Archive location and related data' | translate)}}\">\r\n <button class=\"btn btn-outline-primary rounded-pill\" (click)=\"onArchive()\" [disabled]=\"!canArchive\">\r\n {{'Archive' | translate}}</button>\r\n </div>\r\n </div>\r\n\r\n\r\n </div>\r\n <div class=\"col-md-7\" *ngIf=\"isValidatingDpe\">\r\n <h6>{{'Most relevant results for' | translate}} : \r\n <b>diagnostics de performance \u00E9nerg\u00E9tique (DPE) des b\u00E2timents tertiaires</b></h6>\r\n <table class=\"table table-striped\">\r\n <thead>\r\n <tr>\r\n <th scope=\"col\">#</th>\r\n <th scope=\"col\">{{'Apply to location' | translate}}</th>\r\n <th scope=\"col\">{{'Address' | translate}}</th>\r\n <th scope=\"col\">{{'Activity sector' | translate}}</th>\r\n <th scope=\"col\">{{'Construction year' | translate}}</th>\r\n <th scope=\"col\">{{'Energy Class' | translate}}</th>\r\n <th scope=\"col\">{{'Greenhouse gas emission Class' | translate}}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let result of parsedMetadata; index as i\">\r\n <th scope=\"row\">{{ i + 1 }}</th>\r\n <td><input class=\"checkbox-apply\" type=\"checkbox\" [(ngModel)]=\"result.selected\"\r\n (change)=\"onSelectChange(result)\"></td>\r\n <td>{{result.geo_adresse}}</td>\r\n <td>{{result.secteur_activite}}</td>\r\n <td>{{ result.annee_construction }}</td>\r\n <td>{{ result.classe_consommation_energie }}</td>\r\n <td>{{ result.classe_estimation_ges }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onSaveResult()\"\r\n [disabled]=\"!selectedDpeResult\">{{'Save selected' |\r\n translate}}</button>\r\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onErase()\">\r\n {{'No match (erase data)' | translate}}</button>\r\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onCancel()\">\r\n {{'Cancel' | translate}}</button>\r\n </div>\r\n </div>\r\n <lib-form-location *ngIf=\"isEditing\" [location]=\"space\" (onChange)=\"onFormChange($event)\"></lib-form-location>\r\n</div>\r\n", styles: [""], components: [{ type: i4.TabNavigationComponent, selector: "lib-tab-navigation", inputs: ["menuItems"], outputs: ["onGoBack"] }, { type: i5.FormLocationComponent, selector: "lib-form-location", inputs: ["location"], outputs: ["onChange"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.ClipboardDirective, selector: "[ngxClipboard]", inputs: ["ngxClipboard", "container", "cbContent", "cbSuccessMsg"], outputs: ["cbOnSuccess", "cbOnError"] }, { type: i8.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i9.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "translate": i3.TranslatePipe } });
163
+ DetailLocationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: DetailLocationComponent, selector: "lib-detail-location", ngImport: i0, template: "<div class=\"container-fluid\">\n <div class=\"m-3\">\n <lib-tab-navigation [menuItems]='menuItems' (onGoBack)=\"reset()\"></lib-tab-navigation>\n </div>\n <button class=\"btn btn-outline-primary rounded-pill me-3\" (click)=\"onReturn()\">{{'Back to locations' |\n translate}}</button>\n <div class=\"row\" *ngIf=\"!isEditing && space\">\n <div class=\"col-md-5\">\n <ul class=\"list-group list-group-flush\">\n <li class=\"list-group-item bg-transparent\">{{'Name' | translate}}: {{space.name}} </li>\n <li class=\"list-group-item bg-transparent\">{{'Address' | translate}}: {{space.addresses}} </li>\n <li class=\"list-group-item bg-transparent\">{{'Construction year' | translate}}:\n {{space.constructionYear ?\n space.constructionYear : \"No data\" | translate}} </li>\n <li class=\"list-group-item bg-transparent\">{{'Latitude' | translate}}:\n {{space.latitude ?\n space.latitude : \"No data\" | translate}}</li>\n <li class=\"list-group-item bg-transparent\">{{'Longitude' | translate}}: {{space.longitude ?\n space.longitude : \"No data\" | translate}} </li>\n <li class=\"list-group-item bg-transparent\">{{'Access level' | translate}}: {{space.level | translate\n }} </li>\n <li class=\"list-group-item bg-transparent\">{{'Energy Class' | translate}}:\n {{space.classEnergyConsumption ?\n space.classEnergyConsumption : \"No data\" | translate}}\n <button *ngIf=\"space.status !== 'DPE_TO_VALIDATE'\"\n class=\"btn btn-outline-primary rounded-pill no-lowercase ms-5\" (click)=\"onGetDpeData()\">\n {{'Get data from API DPE' | translate}}</button>\n <a class=\"bg-transparent ms-5\" *ngIf=\"space.status === 'DPE_TO_VALIDATE'\"\n (click)=\"onDpeValidate()\" style=\"cursor: pointer;\">\n <span class=\"iconify\" data-icon=\"mdi:alert-circle-check\" style=\"color: #f19c80;\" data-width=\"25\"\n data-height=\"25\"></span>\n {{'DPE data found. Click to validate' | translate}}\n </a>\n </li>\n <li class=\"list-group-item bg-transparent\">{{'Greenhouse gas emission Class' | translate}}:\n {{space.classGes ? space.classGes : \"No data\" | translate}} </li>\n <li class=\"list-group-item bg-transparent\">{{'Shareable Guest Link' | translate}}:\n <div style=\"display: inline;\" *ngIf=\"guestLink\">\n <a id=\"linkHref\" target=\"_blank\">{{'Try the link' | translate }}</a>\n <div ngxClipboard [cbContent]=\"guestLink\" [style.cursor]=\"'pointer'\"\n style=\"margin-left: 5px; max-width: 20px; display: inline;\" ngbTooltip=\"Copied!\"\n triggers=\"click:blur\">\n <span class=\"iconify\" data-icon=\"mdi:content-copy\" data-inline=\"false\" data-width=\"20\"\n data-height=\"20\"></span>\n </div>\n </div>\n <p *ngIf=\"!guestLink\" style=\"display: inline;\">{{'No link' | translate }}</p>\n <p *ngIf=\"!guestLink\"><small>({{'Generate link from a VISITOR mission'|translate}})</small>\n </p>\n </li>\n\n </ul>\n <div class=\"d-flex justify-content-center\" *ngIf=\"gettingData\">\n <div class=\"spinner-border\" role=\"status\">\n <span class=\"visually-hidden\">Loading...</span>\n </div>\n </div>\n <hr>\n <div class=\"d-flex\">\n <button class=\"btn btn-outline-primary rounded-pill me-3\" (click)=\"onEdit()\" data-testid=\"location-edit-btn\">{{'Edit' |\n translate}}</button>\n <div class=\"tooltip-wrapper\" ngbTooltip=\"{{!canArchive ? ('Contact SmarterPlan' | translate) : ('Archive location and related data' | translate)}}\">\n <button class=\"btn btn-outline-primary rounded-pill\" (click)=\"onArchive()\" [disabled]=\"!canArchive\">\n {{'Archive' | translate}}</button>\n </div>\n </div>\n\n\n </div>\n <div class=\"col-md-7\" *ngIf=\"isValidatingDpe\">\n <h6>{{'Most relevant results for' | translate}} : \n <b>diagnostics de performance \u00E9nerg\u00E9tique (DPE) des b\u00E2timents tertiaires</b></h6>\n <table class=\"table table-striped\">\n <thead>\n <tr>\n <th scope=\"col\">#</th>\n <th scope=\"col\">{{'Apply to location' | translate}}</th>\n <th scope=\"col\">{{'Address' | translate}}</th>\n <th scope=\"col\">{{'Activity sector' | translate}}</th>\n <th scope=\"col\">{{'Construction year' | translate}}</th>\n <th scope=\"col\">{{'Energy Class' | translate}}</th>\n <th scope=\"col\">{{'Greenhouse gas emission Class' | translate}}</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let result of parsedMetadata; index as i\">\n <th scope=\"row\">{{ i + 1 }}</th>\n <td><input class=\"checkbox-apply\" type=\"checkbox\" [(ngModel)]=\"result.selected\"\n (change)=\"onSelectChange(result)\"></td>\n <td>{{result.geo_adresse}}</td>\n <td>{{result.secteur_activite}}</td>\n <td>{{ result.annee_construction }}</td>\n <td>{{ result.classe_consommation_energie }}</td>\n <td>{{ result.classe_estimation_ges }}</td>\n </tr>\n </tbody>\n </table>\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onSaveResult()\"\n [disabled]=\"!selectedDpeResult\">{{'Save selected' |\n translate}}</button>\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onErase()\">\n {{'No match (erase data)' | translate}}</button>\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onCancel()\">\n {{'Cancel' | translate}}</button>\n </div>\n </div>\n <lib-form-location *ngIf=\"isEditing\" [location]=\"space\" (onChange)=\"onFormChange($event)\"></lib-form-location>\n</div>\n", styles: [""], components: [{ type: i4.TabNavigationComponent, selector: "lib-tab-navigation", inputs: ["menuItems"], outputs: ["onGoBack"] }, { type: i5.FormLocationComponent, selector: "lib-form-location", inputs: ["location"], outputs: ["onChange"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.ClipboardDirective, selector: "[ngxClipboard]", inputs: ["ngxClipboard", "container", "cbContent", "cbSuccessMsg"], outputs: ["cbOnSuccess", "cbOnError"] }, { type: i8.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i9.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "translate": i3.TranslatePipe } });
164
164
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: DetailLocationComponent, decorators: [{
165
165
  type: Component,
166
- args: [{ selector: 'lib-detail-location', template: "<div class=\"container-fluid\">\r\n <div class=\"m-3\">\r\n <lib-tab-navigation [menuItems]='menuItems' (onGoBack)=\"reset()\"></lib-tab-navigation>\r\n </div>\r\n <button class=\"btn btn-outline-primary rounded-pill me-3\" (click)=\"onReturn()\">{{'Back to locations' |\r\n translate}}</button>\r\n <div class=\"row\" *ngIf=\"!isEditing && space\">\r\n <div class=\"col-md-5\">\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item bg-transparent\">{{'Name' | translate}}: {{space.name}} </li>\r\n <li class=\"list-group-item bg-transparent\">{{'Address' | translate}}: {{space.addresses}} </li>\r\n <li class=\"list-group-item bg-transparent\">{{'Construction year' | translate}}:\r\n {{space.constructionYear ?\r\n space.constructionYear : \"No data\" | translate}} </li>\r\n <li class=\"list-group-item bg-transparent\">{{'Latitude' | translate}}:\r\n {{space.latitude ?\r\n space.latitude : \"No data\" | translate}}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'Longitude' | translate}}: {{space.longitude ?\r\n space.longitude : \"No data\" | translate}} </li>\r\n <li class=\"list-group-item bg-transparent\">{{'Access level' | translate}}: {{space.level | translate\r\n }} </li>\r\n <li class=\"list-group-item bg-transparent\">{{'Energy Class' | translate}}:\r\n {{space.classEnergyConsumption ?\r\n space.classEnergyConsumption : \"No data\" | translate}}\r\n <button *ngIf=\"space.status !== 'DPE_TO_VALIDATE'\"\r\n class=\"btn btn-outline-primary rounded-pill no-lowercase ms-5\" (click)=\"onGetDpeData()\">\r\n {{'Get data from API DPE' | translate}}</button>\r\n <a class=\"bg-transparent ms-5\" *ngIf=\"space.status === 'DPE_TO_VALIDATE'\"\r\n (click)=\"onDpeValidate()\" style=\"cursor: pointer;\">\r\n <span class=\"iconify\" data-icon=\"mdi:alert-circle-check\" style=\"color: #f19c80;\" data-width=\"25\"\r\n data-height=\"25\"></span>\r\n {{'DPE data found. Click to validate' | translate}}\r\n </a>\r\n </li>\r\n <li class=\"list-group-item bg-transparent\">{{'Greenhouse gas emission Class' | translate}}:\r\n {{space.classGes ? space.classGes : \"No data\" | translate}} </li>\r\n <li class=\"list-group-item bg-transparent\">{{'Shareable Guest Link' | translate}}:\r\n <div style=\"display: inline;\" *ngIf=\"guestLink\">\r\n <a id=\"linkHref\" target=\"_blank\">{{'Try the link' | translate }}</a>\r\n <div ngxClipboard [cbContent]=\"guestLink\" [style.cursor]=\"'pointer'\"\r\n style=\"margin-left: 5px; max-width: 20px; display: inline;\" ngbTooltip=\"Copied!\"\r\n triggers=\"click:blur\">\r\n <span class=\"iconify\" data-icon=\"mdi:content-copy\" data-inline=\"false\" data-width=\"20\"\r\n data-height=\"20\"></span>\r\n </div>\r\n </div>\r\n <p *ngIf=\"!guestLink\" style=\"display: inline;\">{{'No link' | translate }}</p>\r\n <p *ngIf=\"!guestLink\"><small>({{'Generate link from a VISITOR mission'|translate}})</small>\r\n </p>\r\n </li>\r\n\r\n </ul>\r\n <div class=\"d-flex justify-content-center\" *ngIf=\"gettingData\">\r\n <div class=\"spinner-border\" role=\"status\">\r\n <span class=\"visually-hidden\">Loading...</span>\r\n </div>\r\n </div>\r\n <hr>\r\n <div class=\"d-flex\">\r\n <button class=\"btn btn-outline-primary rounded-pill me-3\" (click)=\"onEdit()\" data-testid=\"location-edit-btn\">{{'Edit' |\r\n translate}}</button>\r\n <div class=\"tooltip-wrapper\" ngbTooltip=\"{{!canArchive ? ('Contact SmarterPlan' | translate) : ('Archive location and related data' | translate)}}\">\r\n <button class=\"btn btn-outline-primary rounded-pill\" (click)=\"onArchive()\" [disabled]=\"!canArchive\">\r\n {{'Archive' | translate}}</button>\r\n </div>\r\n </div>\r\n\r\n\r\n </div>\r\n <div class=\"col-md-7\" *ngIf=\"isValidatingDpe\">\r\n <h6>{{'Most relevant results for' | translate}} : \r\n <b>diagnostics de performance \u00E9nerg\u00E9tique (DPE) des b\u00E2timents tertiaires</b></h6>\r\n <table class=\"table table-striped\">\r\n <thead>\r\n <tr>\r\n <th scope=\"col\">#</th>\r\n <th scope=\"col\">{{'Apply to location' | translate}}</th>\r\n <th scope=\"col\">{{'Address' | translate}}</th>\r\n <th scope=\"col\">{{'Activity sector' | translate}}</th>\r\n <th scope=\"col\">{{'Construction year' | translate}}</th>\r\n <th scope=\"col\">{{'Energy Class' | translate}}</th>\r\n <th scope=\"col\">{{'Greenhouse gas emission Class' | translate}}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let result of parsedMetadata; index as i\">\r\n <th scope=\"row\">{{ i + 1 }}</th>\r\n <td><input class=\"checkbox-apply\" type=\"checkbox\" [(ngModel)]=\"result.selected\"\r\n (change)=\"onSelectChange(result)\"></td>\r\n <td>{{result.geo_adresse}}</td>\r\n <td>{{result.secteur_activite}}</td>\r\n <td>{{ result.annee_construction }}</td>\r\n <td>{{ result.classe_consommation_energie }}</td>\r\n <td>{{ result.classe_estimation_ges }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onSaveResult()\"\r\n [disabled]=\"!selectedDpeResult\">{{'Save selected' |\r\n translate}}</button>\r\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onErase()\">\r\n {{'No match (erase data)' | translate}}</button>\r\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onCancel()\">\r\n {{'Cancel' | translate}}</button>\r\n </div>\r\n </div>\r\n <lib-form-location *ngIf=\"isEditing\" [location]=\"space\" (onChange)=\"onFormChange($event)\"></lib-form-location>\r\n</div>\r\n", styles: [""] }]
166
+ args: [{ selector: 'lib-detail-location', template: "<div class=\"container-fluid\">\n <div class=\"m-3\">\n <lib-tab-navigation [menuItems]='menuItems' (onGoBack)=\"reset()\"></lib-tab-navigation>\n </div>\n <button class=\"btn btn-outline-primary rounded-pill me-3\" (click)=\"onReturn()\">{{'Back to locations' |\n translate}}</button>\n <div class=\"row\" *ngIf=\"!isEditing && space\">\n <div class=\"col-md-5\">\n <ul class=\"list-group list-group-flush\">\n <li class=\"list-group-item bg-transparent\">{{'Name' | translate}}: {{space.name}} </li>\n <li class=\"list-group-item bg-transparent\">{{'Address' | translate}}: {{space.addresses}} </li>\n <li class=\"list-group-item bg-transparent\">{{'Construction year' | translate}}:\n {{space.constructionYear ?\n space.constructionYear : \"No data\" | translate}} </li>\n <li class=\"list-group-item bg-transparent\">{{'Latitude' | translate}}:\n {{space.latitude ?\n space.latitude : \"No data\" | translate}}</li>\n <li class=\"list-group-item bg-transparent\">{{'Longitude' | translate}}: {{space.longitude ?\n space.longitude : \"No data\" | translate}} </li>\n <li class=\"list-group-item bg-transparent\">{{'Access level' | translate}}: {{space.level | translate\n }} </li>\n <li class=\"list-group-item bg-transparent\">{{'Energy Class' | translate}}:\n {{space.classEnergyConsumption ?\n space.classEnergyConsumption : \"No data\" | translate}}\n <button *ngIf=\"space.status !== 'DPE_TO_VALIDATE'\"\n class=\"btn btn-outline-primary rounded-pill no-lowercase ms-5\" (click)=\"onGetDpeData()\">\n {{'Get data from API DPE' | translate}}</button>\n <a class=\"bg-transparent ms-5\" *ngIf=\"space.status === 'DPE_TO_VALIDATE'\"\n (click)=\"onDpeValidate()\" style=\"cursor: pointer;\">\n <span class=\"iconify\" data-icon=\"mdi:alert-circle-check\" style=\"color: #f19c80;\" data-width=\"25\"\n data-height=\"25\"></span>\n {{'DPE data found. Click to validate' | translate}}\n </a>\n </li>\n <li class=\"list-group-item bg-transparent\">{{'Greenhouse gas emission Class' | translate}}:\n {{space.classGes ? space.classGes : \"No data\" | translate}} </li>\n <li class=\"list-group-item bg-transparent\">{{'Shareable Guest Link' | translate}}:\n <div style=\"display: inline;\" *ngIf=\"guestLink\">\n <a id=\"linkHref\" target=\"_blank\">{{'Try the link' | translate }}</a>\n <div ngxClipboard [cbContent]=\"guestLink\" [style.cursor]=\"'pointer'\"\n style=\"margin-left: 5px; max-width: 20px; display: inline;\" ngbTooltip=\"Copied!\"\n triggers=\"click:blur\">\n <span class=\"iconify\" data-icon=\"mdi:content-copy\" data-inline=\"false\" data-width=\"20\"\n data-height=\"20\"></span>\n </div>\n </div>\n <p *ngIf=\"!guestLink\" style=\"display: inline;\">{{'No link' | translate }}</p>\n <p *ngIf=\"!guestLink\"><small>({{'Generate link from a VISITOR mission'|translate}})</small>\n </p>\n </li>\n\n </ul>\n <div class=\"d-flex justify-content-center\" *ngIf=\"gettingData\">\n <div class=\"spinner-border\" role=\"status\">\n <span class=\"visually-hidden\">Loading...</span>\n </div>\n </div>\n <hr>\n <div class=\"d-flex\">\n <button class=\"btn btn-outline-primary rounded-pill me-3\" (click)=\"onEdit()\" data-testid=\"location-edit-btn\">{{'Edit' |\n translate}}</button>\n <div class=\"tooltip-wrapper\" ngbTooltip=\"{{!canArchive ? ('Contact SmarterPlan' | translate) : ('Archive location and related data' | translate)}}\">\n <button class=\"btn btn-outline-primary rounded-pill\" (click)=\"onArchive()\" [disabled]=\"!canArchive\">\n {{'Archive' | translate}}</button>\n </div>\n </div>\n\n\n </div>\n <div class=\"col-md-7\" *ngIf=\"isValidatingDpe\">\n <h6>{{'Most relevant results for' | translate}} : \n <b>diagnostics de performance \u00E9nerg\u00E9tique (DPE) des b\u00E2timents tertiaires</b></h6>\n <table class=\"table table-striped\">\n <thead>\n <tr>\n <th scope=\"col\">#</th>\n <th scope=\"col\">{{'Apply to location' | translate}}</th>\n <th scope=\"col\">{{'Address' | translate}}</th>\n <th scope=\"col\">{{'Activity sector' | translate}}</th>\n <th scope=\"col\">{{'Construction year' | translate}}</th>\n <th scope=\"col\">{{'Energy Class' | translate}}</th>\n <th scope=\"col\">{{'Greenhouse gas emission Class' | translate}}</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let result of parsedMetadata; index as i\">\n <th scope=\"row\">{{ i + 1 }}</th>\n <td><input class=\"checkbox-apply\" type=\"checkbox\" [(ngModel)]=\"result.selected\"\n (change)=\"onSelectChange(result)\"></td>\n <td>{{result.geo_adresse}}</td>\n <td>{{result.secteur_activite}}</td>\n <td>{{ result.annee_construction }}</td>\n <td>{{ result.classe_consommation_energie }}</td>\n <td>{{ result.classe_estimation_ges }}</td>\n </tr>\n </tbody>\n </table>\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onSaveResult()\"\n [disabled]=\"!selectedDpeResult\">{{'Save selected' |\n translate}}</button>\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onErase()\">\n {{'No match (erase data)' | translate}}</button>\n <button class=\"btn btn-outline-primary rounded-pill me-2\" (click)=\"onCancel()\">\n {{'Cancel' | translate}}</button>\n </div>\n </div>\n <lib-form-location *ngIf=\"isEditing\" [location]=\"space\" (onChange)=\"onFormChange($event)\"></lib-form-location>\n</div>\n", styles: [""] }]
167
167
  }], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i2.SpaceService }, { type: i1.Router }, { type: i2.BaseUserService }, { type: i3.TranslateService }, { type: i2.NavigatorService }]; } });
168
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWlsLWxvY2F0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1sb2NhdGlvbnMvc3JjL2xpYi9jb21wb25lbnRzL2RldGFpbC1sb2NhdGlvbi9kZXRhaWwtbG9jYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWxvY2F0aW9ucy9zcmMvbGliL2NvbXBvbmVudHMvZGV0YWlsLWxvY2F0aW9uL2RldGFpbC1sb2NhdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBSWxELE9BQU8sRUFBNkQsV0FBVyxFQUFTLE1BQU0sbUNBQW1DLENBQUM7QUFDbEksT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7O0FBTzFDLE1BQU0sT0FBTyx1QkFBdUI7SUFtQ2hDLFlBQ1ksS0FBcUIsRUFDckIsWUFBMEIsRUFDMUIsTUFBYyxFQUNkLFdBQTRCLEVBQzVCLFNBQTJCLEVBQzNCLGdCQUFrQztRQUxsQyxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsZ0JBQVcsR0FBWCxXQUFXLENBQWlCO1FBQzVCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFuQzlDLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFNbEIsY0FBUyxHQUFlLEVBQUUsQ0FBQztRQUUzQixvQkFBZSxHQUFHLEtBQUssQ0FBQztRQUl4QixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQWVwQixhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQVVy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WUFDckQsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDWixNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUNwQyxXQUFXLENBQ0ssQ0FBQztnQkFDckIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQztnQkFDN0QsU0FBUyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxLQUFLLElBQUksRUFBRTtvQkFDM0MsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO3dCQUN6QixNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO3dCQUN0QyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsMkJBQTJCLEVBQUUsQ0FBQzt3QkFDckQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO3FCQUNsQztnQkFDTCxDQUFDLENBQUMsQ0FBQztZQUNQLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNUO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxhQUFhO1FBQ2YsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRTtZQUMxQyxDQUFDLENBQUMsSUFBSTtZQUNOLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMzRCxDQUFDOztvSEF4TVEsdUJBQXVCO3dHQUF2Qix1QkFBdUIsMkRDWnBDLDRpT0E0R0E7MkZEaEdhLHVCQUF1QjtrQkFMbkMsU0FBUzsrQkFDSSxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IE1lbnVJdGVtLCBTcGFjZVNlcnZpY2UsIEJhc2VVc2VyU2VydmljZSwgTmF2aWdhdG9yU2VydmljZSwgU3BhY2VTdGF0dXMsIFNwYWNlIH0gZnJvbSAnQHNtYXJ0ZXJwbGFuL25neC1zbWFydGVycGxhbi1jb3JlJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnbGliLWRldGFpbC1sb2NhdGlvbicsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vZGV0YWlsLWxvY2F0aW9uLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2RldGFpbC1sb2NhdGlvbi5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEZXRhaWxMb2NhdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gICAgc3BhY2U6IFNwYWNlO1xyXG5cclxuICAgIGVkaXRGb3JtOiBGb3JtR3JvdXA7XHJcblxyXG4gICAgaXNFZGl0aW5nID0gZmFsc2U7XHJcblxyXG4gICAgaW1hZ2VUb1VwbG9hZDogRmlsZTtcclxuXHJcbiAgICBpZDogc3RyaW5nO1xyXG5cclxuICAgIG1lbnVJdGVtczogTWVudUl0ZW1bXSA9IFtdO1xyXG5cclxuICAgIGlzVmFsaWRhdGluZ0RwZSA9IGZhbHNlO1xyXG5cclxuICAgIHNlbGVjdGVkRHBlUmVzdWx0OiBhbnk7XHJcblxyXG4gICAgZ2V0dGluZ0RhdGEgPSBmYWxzZTtcclxuXHJcbiAgICBwYXJzZWRNZXRhZGF0YToge1xyXG4gICAgICAgIGdlb19hZHJlc3NlOiBzdHJpbmc7XHJcbiAgICAgICAgc2VjdGV1cl9hY3Rpdml0ZTogc3RyaW5nO1xyXG4gICAgICAgIGFubmVlX2NvbnN0cnVjdGlvbjogc3RyaW5nO1xyXG4gICAgICAgIGNsYXNzZV9jb25zb21tYXRpb25fZW5lcmdpZTogc3RyaW5nO1xyXG4gICAgICAgIGNsYXNzZV9lc3RpbWF0aW9uX2dlczogc3RyaW5nO1xyXG4gICAgICAgIHNlbGVjdGVkOiBib29sZWFuO1xyXG4gICAgfVtdO1xyXG5cclxuICAgIGd1ZXN0TGluazogc3RyaW5nO1xyXG5cclxuICAgIGNhbkFyY2hpdmU6IGJvb2xlYW47XHJcblxyXG4gICAgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgIHByaXZhdGUgc3BhY2VTZXJ2aWNlOiBTcGFjZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBCYXNlVXNlclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBuYXZpZ2F0b3JTZXJ2aWNlOiBOYXZpZ2F0b3JTZXJ2aWNlLFxyXG4gICAgKSB7XHJcbiAgICAgICAgdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLmxvY2F0aW9uSURDaGFuZ2VcclxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChzcGFjZUlEKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCJkYXNoYm9hcmQvbG9jYWxpc2F0aW9uXCIsIHNwYWNlSURdKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMucm91dGUucGFyYW1zLnN1YnNjcmliZSgocGFyYW1zKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaWQgPSBwYXJhbXMuaWQ7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dXAoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHsgfVxyXG5cclxuICAgIGFzeW5jIHNldHVwKCkge1xyXG4gICAgICAgIHRoaXMuc3BhY2UgPSBhd2FpdCB0aGlzLnNwYWNlU2VydmljZS5nZXRTcGFjZSh0aGlzLmlkKTtcclxuICAgICAgICB0aGlzLnNldHVwTWVudUl0ZW1zKCk7XHJcbiAgICAgICAgdGhpcy5zZXRHdWVzdExpbmsoKTtcclxuICAgICAgICB0aGlzLnNldENhbkFyY2hpdmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldHVwTWVudUl0ZW1zKCkge1xyXG4gICAgICAgIHRoaXMubWVudUl0ZW1zID0gW1xyXG4gICAgICAgICAgICB7IGxhYmVsOiBcIkxvY2F0aW9uc1wiLCB1cmw6IFwiL2xvY2FsaXNhdGlvblwiIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnNwYWNlLm5hbWUsXHJcbiAgICAgICAgICAgICAgICB1cmw6IGAvbG9jYWxpc2F0aW9uLyR7dGhpcy5zcGFjZS5pZH1gLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzRWRpdGluZykge1xyXG4gICAgICAgICAgICB0aGlzLm1lbnVJdGVtcy5wdXNoKHsgbGFiZWw6IFwiRWRpdFwiIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubWVudUl0ZW1zLnB1c2goeyBsYWJlbDogXCJJbmZvcm1hdGlvblwiIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkVkaXQoKSB7XHJcbiAgICAgICAgdGhpcy5pc0VkaXRpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2V0dXBNZW51SXRlbXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBvblJldHVybigpIHtcclxuICAgICAgICAvLyB0aGlzLmxvY2F0aW9uU2VydmljZS5iYWNrKClcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCJkYXNoYm9hcmQvbG9jYWxpc2F0aW9uXCJdKTtcclxuICAgIH1cclxuXHJcbiAgICByZXNldCgpIHtcclxuICAgICAgICB0aGlzLmlzRWRpdGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2V0dXBNZW51SXRlbXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvbkFyY2hpdmUoKSB7XHJcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJjb25maXJtLmFyY2hpdmVTcGFjZVwiKTtcclxuICAgICAgICBpZiAod2luZG93LmNvbmZpcm0obWVzc2FnZSkpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5zcGFjZVNlcnZpY2Uuc29mdERlbGV0ZVNwYWNlKHRoaXMuaWQpO1xyXG4gICAgICAgICAgICB0aGlzLm9uUmV0dXJuKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uRm9ybUNoYW5nZShldmVudDogU3BhY2UpIHtcclxuICAgICAgICB0aGlzLmlzRWRpdGluZyA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChldmVudCkge1xyXG4gICAgICAgICAgICB0aGlzLnNwYWNlID0gZXZlbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0dXBNZW51SXRlbXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkRwZVZhbGlkYXRlKCkge1xyXG4gICAgICAgIHRoaXMuaXNWYWxpZGF0aW5nRHBlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnBhcnNlZE1ldGFkYXRhID0gSlNPTi5wYXJzZSh0aGlzLnNwYWNlLm1ldGFkYXRhKTtcclxuICAgICAgICB0aGlzLnBhcnNlZE1ldGFkYXRhID0gdGhpcy5wYXJzZWRNZXRhZGF0YS5maWx0ZXIoXHJcbiAgICAgICAgICAgIChyZXN1bHQpID0+IHJlc3VsdC5nZW9fYWRyZXNzZSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIG9uU2VsZWN0Q2hhbmdlKHNlbGVjdGVkUmVzdWx0OiBhbnkpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiB0aGlzLnBhcnNlZE1ldGFkYXRhKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IHNlbGVjdGVkUmVzdWx0ICYmIHJlc3VsdC5zZWxlY3RlZCkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZERwZVJlc3VsdCA9IHNlbGVjdGVkUmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uU2F2ZVJlc3VsdCgpIHtcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZERwZVJlc3VsdCkge1xyXG4gICAgICAgICAgICBjb25zdCBpbnB1dCA9IHtcclxuICAgICAgICAgICAgICAgIGlkOiB0aGlzLnNwYWNlLmlkLFxyXG4gICAgICAgICAgICAgICAgY29uc3RydWN0aW9uWWVhcjogdGhpcy5zZWxlY3RlZERwZVJlc3VsdC5hbm5lZV9jb25zdHJ1Y3Rpb24sXHJcbiAgICAgICAgICAgICAgICBjbGFzc0VuZXJneUNvbnN1bXB0aW9uOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREcGVSZXN1bHQuY2xhc3NlX2NvbnNvbW1hdGlvbl9lbmVyZ2llLFxyXG4gICAgICAgICAgICAgICAgY2xhc3NHZXM6IHRoaXMuc2VsZWN0ZWREcGVSZXN1bHQuY2xhc3NlX2VzdGltYXRpb25fZ2VzLFxyXG4gICAgICAgICAgICAgICAgc3RhdHVzOiBTcGFjZVN0YXR1cy5EUEVfVkFMSURBVEVELFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjb25zdCB1cGRhdGVkTG9jID0gYXdhaXQgdGhpcy5zcGFjZVNlcnZpY2UudXBkYXRlU3BhY2UoaW5wdXQpO1xyXG4gICAgICAgICAgICB0aGlzLnNwYWNlID0gdXBkYXRlZExvYztcclxuICAgICAgICAgICAgdGhpcy5pc1ZhbGlkYXRpbmdEcGUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25DYW5jZWwoKSB7XHJcbiAgICAgICAgdGhpcy5pc1ZhbGlkYXRpbmdEcGUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvbkVyYXNlKCkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuc3BhY2VTZXJ2aWNlLnVwZGF0ZVNwYWNlKHtcclxuICAgICAgICAgICAgaWQ6IHRoaXMuc3BhY2UuaWQsXHJcbiAgICAgICAgICAgIHN0YXR1czogU3BhY2VTdGF0dXMuRFBFX1ZBTElEQVRFRCxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnNwYWNlLnN0YXR1cyA9IFNwYWNlU3RhdHVzLkRQRV9WQUxJREFURUQ7XHJcbiAgICAgICAgdGhpcy5pc1ZhbGlkYXRpbmdEcGUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvbkdldERwZURhdGEoKSB7XHJcbiAgICAgICAgdGhpcy5nZXR0aW5nRGF0YSA9IHRydWU7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5zcGFjZVNlcnZpY2UudXBkYXRlU3BhY2Uoe1xyXG4gICAgICAgICAgICBpZDogdGhpcy5zcGFjZS5pZCxcclxuICAgICAgICAgICAgc3RhdHVzOiBTcGFjZVN0YXR1cy5EUEVfRkVUQ0gsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIGZvcmNlIHVwZGF0ZSBvZiBsb2NhdGlvblxyXG4gICAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNwYWNlID0gYXdhaXQgdGhpcy5zcGFjZVNlcnZpY2UuZ2V0U3BhY2UodGhpcy5zcGFjZS5pZCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0dGluZ0RhdGEgPSBmYWxzZTtcclxuICAgICAgICB9LCAxNTAwKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRHdWVzdExpbmsoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3BhY2UuZ3Vlc3RMaW5rKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgb3JpZ2luIH0gPSBkb2N1bWVudC5sb2NhdGlvbjtcclxuICAgICAgICAgICAgdGhpcy5ndWVzdExpbmsgPSBgJHtvcmlnaW59LyR7dGhpcy5zcGFjZS5ndWVzdExpbmt9YDtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBoeXBlcmxpbmsgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAgICAgICAgICAgICAgIFwiI2xpbmtIcmVmXCIsXHJcbiAgICAgICAgICAgICAgICApIGFzIEhUTUxMaW5rRWxlbWVudDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiY29uZmlybS5mb2xsb3dMaW5rXCIpO1xyXG4gICAgICAgICAgICAgICAgaHlwZXJsaW5rLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5jb25maXJtKG1lc3NhZ2UpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdGhpcy5ndWVzdExpbms7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudXNlclNlcnZpY2UubG9nb3V0Q3VycmVudEFuZFNpZ25PdXRBdXRoKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcImF1dGhcIl0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9LCAwKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2V0Q2FuQXJjaGl2ZSgpIHtcclxuICAgICAgICB0aGlzLmNhbkFyY2hpdmUgPSB0aGlzLnVzZXJTZXJ2aWNlLmlzU1BBZG1pbigpXHJcbiAgICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgICA6IGF3YWl0IHRoaXMuc3BhY2VTZXJ2aWNlLmNhbkFyY2hpdmVTcGFjZSh0aGlzLmlkKTtcclxuICAgIH1cclxuXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm0tM1wiPlxyXG4gICAgICAgIDxsaWItdGFiLW5hdmlnYXRpb24gW21lbnVJdGVtc109J21lbnVJdGVtcycgKG9uR29CYWNrKT1cInJlc2V0KClcIj48L2xpYi10YWItbmF2aWdhdGlvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbCBtZS0zXCIgKGNsaWNrKT1cIm9uUmV0dXJuKClcIj57eydCYWNrIHRvIGxvY2F0aW9ucycgfFxyXG4gICAgICAgIHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nSWY9XCIhaXNFZGl0aW5nICYmIHNwYWNlXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC01XCI+XHJcbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtZ3JvdXAgbGlzdC1ncm91cC1mbHVzaFwiPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCI+e3snTmFtZScgfCB0cmFuc2xhdGV9fToge3tzcGFjZS5uYW1lfX0gPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiPnt7J0FkZHJlc3MnIHwgdHJhbnNsYXRlfX06IHt7c3BhY2UuYWRkcmVzc2VzfX0gPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiPnt7J0NvbnN0cnVjdGlvbiB5ZWFyJyB8IHRyYW5zbGF0ZX19OlxyXG4gICAgICAgICAgICAgICAgICAgIHt7c3BhY2UuY29uc3RydWN0aW9uWWVhciA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlLmNvbnN0cnVjdGlvblllYXIgOiBcIk5vIGRhdGFcIiB8IHRyYW5zbGF0ZX19IDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIj57eydMYXRpdHVkZScgfCB0cmFuc2xhdGV9fTpcclxuICAgICAgICAgICAgICAgICAgICB7e3NwYWNlLmxhdGl0dWRlID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2UubGF0aXR1ZGUgOiBcIk5vIGRhdGFcIiB8IHRyYW5zbGF0ZX19PC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiPnt7J0xvbmdpdHVkZScgfCB0cmFuc2xhdGV9fToge3tzcGFjZS5sb25naXR1ZGUgP1xyXG4gICAgICAgICAgICAgICAgICAgIHNwYWNlLmxvbmdpdHVkZSA6IFwiTm8gZGF0YVwiIHwgdHJhbnNsYXRlfX0gPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiPnt7J0FjY2VzcyBsZXZlbCcgfCB0cmFuc2xhdGV9fToge3tzcGFjZS5sZXZlbCB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgIH19IDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIj57eydFbmVyZ3kgQ2xhc3MnIHwgdHJhbnNsYXRlfX06XHJcbiAgICAgICAgICAgICAgICAgICAge3tzcGFjZS5jbGFzc0VuZXJneUNvbnN1bXB0aW9uID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2UuY2xhc3NFbmVyZ3lDb25zdW1wdGlvbiA6IFwiTm8gZGF0YVwiIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwic3BhY2Uuc3RhdHVzICE9PSAnRFBFX1RPX1ZBTElEQVRFJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgcm91bmRlZC1waWxsIG5vLWxvd2VyY2FzZSBtcy01XCIgKGNsaWNrKT1cIm9uR2V0RHBlRGF0YSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7J0dldCBkYXRhIGZyb20gQVBJIERQRScgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiYmctdHJhbnNwYXJlbnQgbXMtNVwiICpuZ0lmPVwic3BhY2Uuc3RhdHVzID09PSAnRFBFX1RPX1ZBTElEQVRFJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkRwZVZhbGlkYXRlKClcIiBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uaWZ5XCIgZGF0YS1pY29uPVwibWRpOmFsZXJ0LWNpcmNsZS1jaGVja1wiIHN0eWxlPVwiY29sb3I6ICNmMTljODA7XCIgZGF0YS13aWR0aD1cIjI1XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtaGVpZ2h0PVwiMjVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7J0RQRSBkYXRhIGZvdW5kLiBDbGljayB0byB2YWxpZGF0ZScgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIj57eydHcmVlbmhvdXNlIGdhcyBlbWlzc2lvbiBDbGFzcycgfCB0cmFuc2xhdGV9fTpcclxuICAgICAgICAgICAgICAgICAgICB7e3NwYWNlLmNsYXNzR2VzID8gc3BhY2UuY2xhc3NHZXMgOiBcIk5vIGRhdGFcIiB8IHRyYW5zbGF0ZX19IDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIj57eydTaGFyZWFibGUgR3Vlc3QgTGluaycgfCB0cmFuc2xhdGV9fTpcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogaW5saW5lO1wiICpuZ0lmPVwiZ3Vlc3RMaW5rXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGlkPVwibGlua0hyZWZcIiB0YXJnZXQ9XCJfYmxhbmtcIj57eydUcnkgdGhlIGxpbmsnIHwgdHJhbnNsYXRlIH19PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG5neENsaXBib2FyZCBbY2JDb250ZW50XT1cImd1ZXN0TGlua1wiIFtzdHlsZS5jdXJzb3JdPVwiJ3BvaW50ZXInXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDVweDsgbWF4LXdpZHRoOiAyMHB4OyBkaXNwbGF5OiBpbmxpbmU7XCIgbmdiVG9vbHRpcD1cIkNvcGllZCFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcnM9XCJjbGljazpibHVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb25pZnlcIiBkYXRhLWljb249XCJtZGk6Y29udGVudC1jb3B5XCIgZGF0YS1pbmxpbmU9XCJmYWxzZVwiIGRhdGEtd2lkdGg9XCIyMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1oZWlnaHQ9XCIyMFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAgKm5nSWY9XCIhZ3Vlc3RMaW5rXCIgc3R5bGU9XCJkaXNwbGF5OiBpbmxpbmU7XCI+e3snTm8gbGluaycgfCB0cmFuc2xhdGUgfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAgKm5nSWY9XCIhZ3Vlc3RMaW5rXCI+PHNtYWxsPih7eydHZW5lcmF0ZSBsaW5rIGZyb20gYSBWSVNJVE9SIG1pc3Npb24nfHRyYW5zbGF0ZX19KTwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuXHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiICpuZ0lmPVwiZ2V0dGluZ0RhdGFcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcGlubmVyLWJvcmRlclwiIHJvbGU9XCJzdGF0dXNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZpc3VhbGx5LWhpZGRlblwiPkxvYWRpbmcuLi48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxocj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbCBtZS0zXCIgKGNsaWNrKT1cIm9uRWRpdCgpXCIgZGF0YS10ZXN0aWQ9XCJsb2NhdGlvbi1lZGl0LWJ0blwiPnt7J0VkaXQnIHxcclxuICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvb2x0aXAtd3JhcHBlclwiIG5nYlRvb2x0aXA9XCJ7eyFjYW5BcmNoaXZlID8gKCdDb250YWN0IFNtYXJ0ZXJQbGFuJyB8IHRyYW5zbGF0ZSkgOiAoJ0FyY2hpdmUgbG9jYXRpb24gYW5kIHJlbGF0ZWQgZGF0YScgfCB0cmFuc2xhdGUpfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgcm91bmRlZC1waWxsXCIgKGNsaWNrKT1cIm9uQXJjaGl2ZSgpXCIgW2Rpc2FibGVkXT1cIiFjYW5BcmNoaXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7J0FyY2hpdmUnIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtN1wiICpuZ0lmPVwiaXNWYWxpZGF0aW5nRHBlXCI+XHJcbiAgICAgICAgICAgIDxoNj57eydNb3N0IHJlbGV2YW50IHJlc3VsdHMgZm9yJyB8IHRyYW5zbGF0ZX19IDogXHJcbiAgICAgICAgICAgICAgICA8Yj5kaWFnbm9zdGljcyBkZSBwZXJmb3JtYW5jZSDDqW5lcmfDqXRpcXVlIChEUEUpIGRlcyBiw6J0aW1lbnRzIHRlcnRpYWlyZXM8L2I+PC9oNj5cclxuICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtc3RyaXBlZFwiPlxyXG4gICAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+IzwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiPnt7J0FwcGx5IHRvIGxvY2F0aW9uJyB8IHRyYW5zbGF0ZX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+e3snQWRkcmVzcycgfCB0cmFuc2xhdGV9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiPnt7J0FjdGl2aXR5IHNlY3RvcicgfCB0cmFuc2xhdGV9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiPnt7J0NvbnN0cnVjdGlvbiB5ZWFyJyB8IHRyYW5zbGF0ZX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+e3snRW5lcmd5IENsYXNzJyB8IHRyYW5zbGF0ZX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+e3snR3JlZW5ob3VzZSBnYXMgZW1pc3Npb24gQ2xhc3MnIHwgdHJhbnNsYXRlfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgcmVzdWx0IG9mIHBhcnNlZE1ldGFkYXRhOyBpbmRleCBhcyBpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cInJvd1wiPnt7IGkgKyAxIH19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxpbnB1dCBjbGFzcz1cImNoZWNrYm94LWFwcGx5XCIgdHlwZT1cImNoZWNrYm94XCIgWyhuZ01vZGVsKV09XCJyZXN1bHQuc2VsZWN0ZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25TZWxlY3RDaGFuZ2UocmVzdWx0KVwiPjwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e3Jlc3VsdC5nZW9fYWRyZXNzZX19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7cmVzdWx0LnNlY3RldXJfYWN0aXZpdGV9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyByZXN1bHQuYW5uZWVfY29uc3RydWN0aW9uIH19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7IHJlc3VsdC5jbGFzc2VfY29uc29tbWF0aW9uX2VuZXJnaWUgfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3sgcmVzdWx0LmNsYXNzZV9lc3RpbWF0aW9uX2dlcyB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGwgbWUtMlwiIChjbGljayk9XCJvblNhdmVSZXN1bHQoKVwiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXNlbGVjdGVkRHBlUmVzdWx0XCI+e3snU2F2ZSBzZWxlY3RlZCcgfFxyXG4gICAgICAgICAgICAgICAgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbCBtZS0yXCIgKGNsaWNrKT1cIm9uRXJhc2UoKVwiPlxyXG4gICAgICAgICAgICAgICAge3snTm8gbWF0Y2ggKGVyYXNlIGRhdGEpJyB8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGwgbWUtMlwiIChjbGljayk9XCJvbkNhbmNlbCgpXCI+XHJcbiAgICAgICAgICAgICAgICB7eydDYW5jZWwnIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGxpYi1mb3JtLWxvY2F0aW9uICpuZ0lmPVwiaXNFZGl0aW5nXCIgW2xvY2F0aW9uXT1cInNwYWNlXCIgKG9uQ2hhbmdlKT1cIm9uRm9ybUNoYW5nZSgkZXZlbnQpXCI+PC9saWItZm9ybS1sb2NhdGlvbj5cclxuPC9kaXY+XHJcbiJdfQ==
168
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWlsLWxvY2F0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1sb2NhdGlvbnMvc3JjL2xpYi9jb21wb25lbnRzL2RldGFpbC1sb2NhdGlvbi9kZXRhaWwtbG9jYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWxvY2F0aW9ucy9zcmMvbGliL2NvbXBvbmVudHMvZGV0YWlsLWxvY2F0aW9uL2RldGFpbC1sb2NhdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBSWxELE9BQU8sRUFBNkQsV0FBVyxFQUFTLE1BQU0sbUNBQW1DLENBQUM7QUFDbEksT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7O0FBTzFDLE1BQU0sT0FBTyx1QkFBdUI7SUFtQ2hDLFlBQ1ksS0FBcUIsRUFDckIsWUFBMEIsRUFDMUIsTUFBYyxFQUNkLFdBQTRCLEVBQzVCLFNBQTJCLEVBQzNCLGdCQUFrQztRQUxsQyxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsZ0JBQVcsR0FBWCxXQUFXLENBQWlCO1FBQzVCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFuQzlDLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFNbEIsY0FBUyxHQUFlLEVBQUUsQ0FBQztRQUUzQixvQkFBZSxHQUFHLEtBQUssQ0FBQztRQUl4QixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQWVwQixhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQVVy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WUFDckQsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDWixNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUNwQyxXQUFXLENBQ0ssQ0FBQztnQkFDckIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQztnQkFDN0QsU0FBUyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxLQUFLLElBQUksRUFBRTtvQkFDM0MsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO3dCQUN6QixNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO3dCQUN0QyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsMkJBQTJCLEVBQUUsQ0FBQzt3QkFDckQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO3FCQUNsQztnQkFDTCxDQUFDLENBQUMsQ0FBQztZQUNQLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNUO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxhQUFhO1FBQ2YsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRTtZQUMxQyxDQUFDLENBQUMsSUFBSTtZQUNOLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMzRCxDQUFDOztvSEF4TVEsdUJBQXVCO3dHQUF2Qix1QkFBdUIsMkRDWnBDLG8xTkE0R0E7MkZEaEdhLHVCQUF1QjtrQkFMbkMsU0FBUzsrQkFDSSxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBNZW51SXRlbSwgU3BhY2VTZXJ2aWNlLCBCYXNlVXNlclNlcnZpY2UsIE5hdmlnYXRvclNlcnZpY2UsIFNwYWNlU3RhdHVzLCBTcGFjZSB9IGZyb20gJ0BzbWFydGVycGxhbi9uZ3gtc21hcnRlcnBsYW4tY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdsaWItZGV0YWlsLWxvY2F0aW9uJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZGV0YWlsLWxvY2F0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9kZXRhaWwtbG9jYXRpb24uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBEZXRhaWxMb2NhdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgICBzcGFjZTogU3BhY2U7XG5cbiAgICBlZGl0Rm9ybTogRm9ybUdyb3VwO1xuXG4gICAgaXNFZGl0aW5nID0gZmFsc2U7XG5cbiAgICBpbWFnZVRvVXBsb2FkOiBGaWxlO1xuXG4gICAgaWQ6IHN0cmluZztcblxuICAgIG1lbnVJdGVtczogTWVudUl0ZW1bXSA9IFtdO1xuXG4gICAgaXNWYWxpZGF0aW5nRHBlID0gZmFsc2U7XG5cbiAgICBzZWxlY3RlZERwZVJlc3VsdDogYW55O1xuXG4gICAgZ2V0dGluZ0RhdGEgPSBmYWxzZTtcblxuICAgIHBhcnNlZE1ldGFkYXRhOiB7XG4gICAgICAgIGdlb19hZHJlc3NlOiBzdHJpbmc7XG4gICAgICAgIHNlY3RldXJfYWN0aXZpdGU6IHN0cmluZztcbiAgICAgICAgYW5uZWVfY29uc3RydWN0aW9uOiBzdHJpbmc7XG4gICAgICAgIGNsYXNzZV9jb25zb21tYXRpb25fZW5lcmdpZTogc3RyaW5nO1xuICAgICAgICBjbGFzc2VfZXN0aW1hdGlvbl9nZXM6IHN0cmluZztcbiAgICAgICAgc2VsZWN0ZWQ6IGJvb2xlYW47XG4gICAgfVtdO1xuXG4gICAgZ3Vlc3RMaW5rOiBzdHJpbmc7XG5cbiAgICBjYW5BcmNoaXZlOiBib29sZWFuO1xuXG4gICAgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICBwcml2YXRlIHNwYWNlU2VydmljZTogU3BhY2VTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBCYXNlVXNlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG5hdmlnYXRvclNlcnZpY2U6IE5hdmlnYXRvclNlcnZpY2UsXG4gICAgKSB7XG4gICAgICAgIHRoaXMubmF2aWdhdG9yU2VydmljZS5sb2NhdGlvbklEQ2hhbmdlXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChzcGFjZUlEKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1wiZGFzaGJvYXJkL2xvY2FsaXNhdGlvblwiLCBzcGFjZUlEXSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnJvdXRlLnBhcmFtcy5zdWJzY3JpYmUoKHBhcmFtcykgPT4ge1xuICAgICAgICAgICAgdGhpcy5pZCA9IHBhcmFtcy5pZDtcbiAgICAgICAgICAgIHRoaXMuc2V0dXAoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7IH1cblxuICAgIGFzeW5jIHNldHVwKCkge1xuICAgICAgICB0aGlzLnNwYWNlID0gYXdhaXQgdGhpcy5zcGFjZVNlcnZpY2UuZ2V0U3BhY2UodGhpcy5pZCk7XG4gICAgICAgIHRoaXMuc2V0dXBNZW51SXRlbXMoKTtcbiAgICAgICAgdGhpcy5zZXRHdWVzdExpbmsoKTtcbiAgICAgICAgdGhpcy5zZXRDYW5BcmNoaXZlKCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIHNldHVwTWVudUl0ZW1zKCkge1xuICAgICAgICB0aGlzLm1lbnVJdGVtcyA9IFtcbiAgICAgICAgICAgIHsgbGFiZWw6IFwiTG9jYXRpb25zXCIsIHVybDogXCIvbG9jYWxpc2F0aW9uXCIgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5zcGFjZS5uYW1lLFxuICAgICAgICAgICAgICAgIHVybDogYC9sb2NhbGlzYXRpb24vJHt0aGlzLnNwYWNlLmlkfWAsXG4gICAgICAgICAgICB9LFxuICAgICAgICBdO1xuXG4gICAgICAgIGlmICh0aGlzLmlzRWRpdGluZykge1xuICAgICAgICAgICAgdGhpcy5tZW51SXRlbXMucHVzaCh7IGxhYmVsOiBcIkVkaXRcIiB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubWVudUl0ZW1zLnB1c2goeyBsYWJlbDogXCJJbmZvcm1hdGlvblwiIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25FZGl0KCkge1xuICAgICAgICB0aGlzLmlzRWRpdGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuc2V0dXBNZW51SXRlbXMoKTtcbiAgICB9XG5cbiAgICBvblJldHVybigpIHtcbiAgICAgICAgLy8gdGhpcy5sb2NhdGlvblNlcnZpY2UuYmFjaygpXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcImRhc2hib2FyZC9sb2NhbGlzYXRpb25cIl0pO1xuICAgIH1cblxuICAgIHJlc2V0KCkge1xuICAgICAgICB0aGlzLmlzRWRpdGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNldHVwTWVudUl0ZW1zKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgb25BcmNoaXZlKCkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImNvbmZpcm0uYXJjaGl2ZVNwYWNlXCIpO1xuICAgICAgICBpZiAod2luZG93LmNvbmZpcm0obWVzc2FnZSkpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc3BhY2VTZXJ2aWNlLnNvZnREZWxldGVTcGFjZSh0aGlzLmlkKTtcbiAgICAgICAgICAgIHRoaXMub25SZXR1cm4oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uRm9ybUNoYW5nZShldmVudDogU3BhY2UpIHtcbiAgICAgICAgdGhpcy5pc0VkaXRpbmcgPSBmYWxzZTtcbiAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgICB0aGlzLnNwYWNlID0gZXZlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXR1cE1lbnVJdGVtcygpO1xuICAgIH1cblxuICAgIG9uRHBlVmFsaWRhdGUoKSB7XG4gICAgICAgIHRoaXMuaXNWYWxpZGF0aW5nRHBlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5wYXJzZWRNZXRhZGF0YSA9IEpTT04ucGFyc2UodGhpcy5zcGFjZS5tZXRhZGF0YSk7XG4gICAgICAgIHRoaXMucGFyc2VkTWV0YWRhdGEgPSB0aGlzLnBhcnNlZE1ldGFkYXRhLmZpbHRlcihcbiAgICAgICAgICAgIChyZXN1bHQpID0+IHJlc3VsdC5nZW9fYWRyZXNzZSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBvblNlbGVjdENoYW5nZShzZWxlY3RlZFJlc3VsdDogYW55KSB7XG4gICAgICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHRoaXMucGFyc2VkTWV0YWRhdGEpIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IHNlbGVjdGVkUmVzdWx0ICYmIHJlc3VsdC5zZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0ZWREcGVSZXN1bHQgPSBzZWxlY3RlZFJlc3VsdDtcbiAgICB9XG5cbiAgICBhc3luYyBvblNhdmVSZXN1bHQoKSB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRHBlUmVzdWx0KSB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dCA9IHtcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5zcGFjZS5pZCxcbiAgICAgICAgICAgICAgICBjb25zdHJ1Y3Rpb25ZZWFyOiB0aGlzLnNlbGVjdGVkRHBlUmVzdWx0LmFubmVlX2NvbnN0cnVjdGlvbixcbiAgICAgICAgICAgICAgICBjbGFzc0VuZXJneUNvbnN1bXB0aW9uOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRHBlUmVzdWx0LmNsYXNzZV9jb25zb21tYXRpb25fZW5lcmdpZSxcbiAgICAgICAgICAgICAgICBjbGFzc0dlczogdGhpcy5zZWxlY3RlZERwZVJlc3VsdC5jbGFzc2VfZXN0aW1hdGlvbl9nZXMsXG4gICAgICAgICAgICAgICAgc3RhdHVzOiBTcGFjZVN0YXR1cy5EUEVfVkFMSURBVEVELFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRMb2MgPSBhd2FpdCB0aGlzLnNwYWNlU2VydmljZS51cGRhdGVTcGFjZShpbnB1dCk7XG4gICAgICAgICAgICB0aGlzLnNwYWNlID0gdXBkYXRlZExvYztcbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZGF0aW5nRHBlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkNhbmNlbCgpIHtcbiAgICAgICAgdGhpcy5pc1ZhbGlkYXRpbmdEcGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBhc3luYyBvbkVyYXNlKCkge1xuICAgICAgICBhd2FpdCB0aGlzLnNwYWNlU2VydmljZS51cGRhdGVTcGFjZSh7XG4gICAgICAgICAgICBpZDogdGhpcy5zcGFjZS5pZCxcbiAgICAgICAgICAgIHN0YXR1czogU3BhY2VTdGF0dXMuRFBFX1ZBTElEQVRFRCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc3BhY2Uuc3RhdHVzID0gU3BhY2VTdGF0dXMuRFBFX1ZBTElEQVRFRDtcbiAgICAgICAgdGhpcy5pc1ZhbGlkYXRpbmdEcGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBhc3luYyBvbkdldERwZURhdGEoKSB7XG4gICAgICAgIHRoaXMuZ2V0dGluZ0RhdGEgPSB0cnVlO1xuICAgICAgICBhd2FpdCB0aGlzLnNwYWNlU2VydmljZS51cGRhdGVTcGFjZSh7XG4gICAgICAgICAgICBpZDogdGhpcy5zcGFjZS5pZCxcbiAgICAgICAgICAgIHN0YXR1czogU3BhY2VTdGF0dXMuRFBFX0ZFVENILFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBmb3JjZSB1cGRhdGUgb2YgbG9jYXRpb25cbiAgICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNwYWNlID0gYXdhaXQgdGhpcy5zcGFjZVNlcnZpY2UuZ2V0U3BhY2UodGhpcy5zcGFjZS5pZCk7XG4gICAgICAgICAgICB0aGlzLmdldHRpbmdEYXRhID0gZmFsc2U7XG4gICAgICAgIH0sIDE1MDApO1xuICAgIH1cblxuICAgIHNldEd1ZXN0TGluaygpIHtcbiAgICAgICAgaWYgKHRoaXMuc3BhY2UuZ3Vlc3RMaW5rKSB7XG4gICAgICAgICAgICBjb25zdCB7IG9yaWdpbiB9ID0gZG9jdW1lbnQubG9jYXRpb247XG4gICAgICAgICAgICB0aGlzLmd1ZXN0TGluayA9IGAke29yaWdpbn0vJHt0aGlzLnNwYWNlLmd1ZXN0TGlua31gO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaHlwZXJsaW5rID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgICAgICAgICAgXCIjbGlua0hyZWZcIixcbiAgICAgICAgICAgICAgICApIGFzIEhUTUxMaW5rRWxlbWVudDtcbiAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImNvbmZpcm0uZm9sbG93TGlua1wiKTtcbiAgICAgICAgICAgICAgICBoeXBlcmxpbmsuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5jb25maXJtKG1lc3NhZ2UpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHRoaXMuZ3Vlc3RMaW5rO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy51c2VyU2VydmljZS5sb2dvdXRDdXJyZW50QW5kU2lnbk91dEF1dGgoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcImF1dGhcIl0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIHNldENhbkFyY2hpdmUoKSB7XG4gICAgICAgIHRoaXMuY2FuQXJjaGl2ZSA9IHRoaXMudXNlclNlcnZpY2UuaXNTUEFkbWluKClcbiAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgOiBhd2FpdCB0aGlzLnNwYWNlU2VydmljZS5jYW5BcmNoaXZlU3BhY2UodGhpcy5pZCk7XG4gICAgfVxuXG59XG4iLCI8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XG4gICAgPGRpdiBjbGFzcz1cIm0tM1wiPlxuICAgICAgICA8bGliLXRhYi1uYXZpZ2F0aW9uIFttZW51SXRlbXNdPSdtZW51SXRlbXMnIChvbkdvQmFjayk9XCJyZXNldCgpXCI+PC9saWItdGFiLW5hdmlnYXRpb24+XG4gICAgPC9kaXY+XG4gICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbCBtZS0zXCIgKGNsaWNrKT1cIm9uUmV0dXJuKClcIj57eydCYWNrIHRvIGxvY2F0aW9ucycgfFxuICAgICAgICB0cmFuc2xhdGV9fTwvYnV0dG9uPlxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cIiFpc0VkaXRpbmcgJiYgc3BhY2VcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC01XCI+XG4gICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LWdyb3VwIGxpc3QtZ3JvdXAtZmx1c2hcIj5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIj57eydOYW1lJyB8IHRyYW5zbGF0ZX19OiB7e3NwYWNlLm5hbWV9fSA8L2xpPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiPnt7J0FkZHJlc3MnIHwgdHJhbnNsYXRlfX06IHt7c3BhY2UuYWRkcmVzc2VzfX0gPC9saT5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIj57eydDb25zdHJ1Y3Rpb24geWVhcicgfCB0cmFuc2xhdGV9fTpcbiAgICAgICAgICAgICAgICAgICAge3tzcGFjZS5jb25zdHJ1Y3Rpb25ZZWFyID9cbiAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlLmNvbnN0cnVjdGlvblllYXIgOiBcIk5vIGRhdGFcIiB8IHRyYW5zbGF0ZX19IDwvbGk+XG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCI+e3snTGF0aXR1ZGUnIHwgdHJhbnNsYXRlfX06XG4gICAgICAgICAgICAgICAgICAgIHt7c3BhY2UubGF0aXR1ZGUgP1xuICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2UubGF0aXR1ZGUgOiBcIk5vIGRhdGFcIiB8IHRyYW5zbGF0ZX19PC9saT5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIj57eydMb25naXR1ZGUnIHwgdHJhbnNsYXRlfX06IHt7c3BhY2UubG9uZ2l0dWRlID9cbiAgICAgICAgICAgICAgICAgICAgc3BhY2UubG9uZ2l0dWRlIDogXCJObyBkYXRhXCIgfCB0cmFuc2xhdGV9fSA8L2xpPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiPnt7J0FjY2VzcyBsZXZlbCcgfCB0cmFuc2xhdGV9fToge3tzcGFjZS5sZXZlbCB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgICB9fSA8L2xpPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiPnt7J0VuZXJneSBDbGFzcycgfCB0cmFuc2xhdGV9fTpcbiAgICAgICAgICAgICAgICAgICAge3tzcGFjZS5jbGFzc0VuZXJneUNvbnN1bXB0aW9uID9cbiAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlLmNsYXNzRW5lcmd5Q29uc3VtcHRpb24gOiBcIk5vIGRhdGFcIiB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJzcGFjZS5zdGF0dXMgIT09ICdEUEVfVE9fVkFMSURBVEUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgcm91bmRlZC1waWxsIG5vLWxvd2VyY2FzZSBtcy01XCIgKGNsaWNrKT1cIm9uR2V0RHBlRGF0YSgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eydHZXQgZGF0YSBmcm9tIEFQSSBEUEUnIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJiZy10cmFuc3BhcmVudCBtcy01XCIgKm5nSWY9XCJzcGFjZS5zdGF0dXMgPT09ICdEUEVfVE9fVkFMSURBVEUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkRwZVZhbGlkYXRlKClcIiBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbmlmeVwiIGRhdGEtaWNvbj1cIm1kaTphbGVydC1jaXJjbGUtY2hlY2tcIiBzdHlsZT1cImNvbG9yOiAjZjE5YzgwO1wiIGRhdGEtd2lkdGg9XCIyNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1oZWlnaHQ9XCIyNVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7J0RQRSBkYXRhIGZvdW5kLiBDbGljayB0byB2YWxpZGF0ZScgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIj57eydHcmVlbmhvdXNlIGdhcyBlbWlzc2lvbiBDbGFzcycgfCB0cmFuc2xhdGV9fTpcbiAgICAgICAgICAgICAgICAgICAge3tzcGFjZS5jbGFzc0dlcyA/IHNwYWNlLmNsYXNzR2VzIDogXCJObyBkYXRhXCIgfCB0cmFuc2xhdGV9fSA8L2xpPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiPnt7J1NoYXJlYWJsZSBHdWVzdCBMaW5rJyB8IHRyYW5zbGF0ZX19OlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogaW5saW5lO1wiICpuZ0lmPVwiZ3Vlc3RMaW5rXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBpZD1cImxpbmtIcmVmXCIgdGFyZ2V0PVwiX2JsYW5rXCI+e3snVHJ5IHRoZSBsaW5rJyB8IHRyYW5zbGF0ZSB9fTwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbmd4Q2xpcGJvYXJkIFtjYkNvbnRlbnRdPVwiZ3Vlc3RMaW5rXCIgW3N0eWxlLmN1cnNvcl09XCIncG9pbnRlcidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDVweDsgbWF4LXdpZHRoOiAyMHB4OyBkaXNwbGF5OiBpbmxpbmU7XCIgbmdiVG9vbHRpcD1cIkNvcGllZCFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJzPVwiY2xpY2s6Ymx1clwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbmlmeVwiIGRhdGEtaWNvbj1cIm1kaTpjb250ZW50LWNvcHlcIiBkYXRhLWlubGluZT1cImZhbHNlXCIgZGF0YS13aWR0aD1cIjIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1oZWlnaHQ9XCIyMFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPHAgKm5nSWY9XCIhZ3Vlc3RMaW5rXCIgc3R5bGU9XCJkaXNwbGF5OiBpbmxpbmU7XCI+e3snTm8gbGluaycgfCB0cmFuc2xhdGUgfX08L3A+XG4gICAgICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwiIWd1ZXN0TGlua1wiPjxzbWFsbD4oe3snR2VuZXJhdGUgbGluayBmcm9tIGEgVklTSVRPUiBtaXNzaW9uJ3x0cmFuc2xhdGV9fSk8L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgPC9saT5cblxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiICpuZ0lmPVwiZ2V0dGluZ0RhdGFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Bpbm5lci1ib3JkZXJcIiByb2xlPVwic3RhdHVzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCI+TG9hZGluZy4uLjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGhyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGwgbWUtM1wiIChjbGljayk9XCJvbkVkaXQoKVwiIGRhdGEtdGVzdGlkPVwibG9jYXRpb24tZWRpdC1idG5cIj57eydFZGl0JyB8XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZX19PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvb2x0aXAtd3JhcHBlclwiIG5nYlRvb2x0aXA9XCJ7eyFjYW5BcmNoaXZlID8gKCdDb250YWN0IFNtYXJ0ZXJQbGFuJyB8IHRyYW5zbGF0ZSkgOiAoJ0FyY2hpdmUgbG9jYXRpb24gYW5kIHJlbGF0ZWQgZGF0YScgfCB0cmFuc2xhdGUpfX1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbFwiIChjbGljayk9XCJvbkFyY2hpdmUoKVwiIFtkaXNhYmxlZF09XCIhY2FuQXJjaGl2ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3snQXJjaGl2ZScgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC03XCIgKm5nSWY9XCJpc1ZhbGlkYXRpbmdEcGVcIj5cbiAgICAgICAgICAgIDxoNj57eydNb3N0IHJlbGV2YW50IHJlc3VsdHMgZm9yJyB8IHRyYW5zbGF0ZX19IDogXG4gICAgICAgICAgICAgICAgPGI+ZGlhZ25vc3RpY3MgZGUgcGVyZm9ybWFuY2Ugw6luZXJnw6l0aXF1ZSAoRFBFKSBkZXMgYsOidGltZW50cyB0ZXJ0aWFpcmVzPC9iPjwvaDY+XG4gICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1zdHJpcGVkXCI+XG4gICAgICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIj4jPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiPnt7J0FwcGx5IHRvIGxvY2F0aW9uJyB8IHRyYW5zbGF0ZX19PC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiPnt7J0FkZHJlc3MnIHwgdHJhbnNsYXRlfX08L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+e3snQWN0aXZpdHkgc2VjdG9yJyB8IHRyYW5zbGF0ZX19PC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiPnt7J0NvbnN0cnVjdGlvbiB5ZWFyJyB8IHRyYW5zbGF0ZX19PC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiPnt7J0VuZXJneSBDbGFzcycgfCB0cmFuc2xhdGV9fTwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIj57eydHcmVlbmhvdXNlIGdhcyBlbWlzc2lvbiBDbGFzcycgfCB0cmFuc2xhdGV9fTwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgcmVzdWx0IG9mIHBhcnNlZE1ldGFkYXRhOyBpbmRleCBhcyBpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJyb3dcIj57eyBpICsgMSB9fTwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGlucHV0IGNsYXNzPVwiY2hlY2tib3gtYXBwbHlcIiB0eXBlPVwiY2hlY2tib3hcIiBbKG5nTW9kZWwpXT1cInJlc3VsdC5zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25TZWxlY3RDaGFuZ2UocmVzdWx0KVwiPjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tyZXN1bHQuZ2VvX2FkcmVzc2V9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tyZXN1bHQuc2VjdGV1cl9hY3Rpdml0ZX19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyByZXN1bHQuYW5uZWVfY29uc3RydWN0aW9uIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyByZXN1bHQuY2xhc3NlX2NvbnNvbW1hdGlvbl9lbmVyZ2llIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyByZXN1bHQuY2xhc3NlX2VzdGltYXRpb25fZ2VzIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGwgbWUtMlwiIChjbGljayk9XCJvblNhdmVSZXN1bHQoKVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFzZWxlY3RlZERwZVJlc3VsdFwiPnt7J1NhdmUgc2VsZWN0ZWQnIHxcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGV9fTwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbCBtZS0yXCIgKGNsaWNrKT1cIm9uRXJhc2UoKVwiPlxuICAgICAgICAgICAgICAgIHt7J05vIG1hdGNoIChlcmFzZSBkYXRhKScgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbCBtZS0yXCIgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIj5cbiAgICAgICAgICAgICAgICB7eydDYW5jZWwnIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGxpYi1mb3JtLWxvY2F0aW9uICpuZ0lmPVwiaXNFZGl0aW5nXCIgW2xvY2F0aW9uXT1cInNwYWNlXCIgKG9uQ2hhbmdlKT1cIm9uRm9ybUNoYW5nZSgkZXZlbnQpXCI+PC9saWItZm9ybS1sb2NhdGlvbj5cbjwvZGl2PlxuIl19
@@ -216,10 +216,10 @@ export class FormLocationComponent {
216
216
  }
217
217
  }
218
218
  FormLocationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: FormLocationComponent, deps: [{ token: i1.SpaceService }, { token: i1.PropertyService }, { token: i1.BaseUserService }, { token: i2.FormBuilder }, { token: i1.MissionService }, { token: i1.LayerService }, { token: i1.ValidatorsService }], target: i0.ɵɵFactoryTarget.Component });
219
- FormLocationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: FormLocationComponent, selector: "lib-form-location", inputs: { location: "location" }, outputs: { onChange: "onChange" }, viewQueries: [{ propertyName: "imageInputContainer", first: true, predicate: ["imageInputContainer"], descendants: true }, { propertyName: "imageInput", first: true, predicate: ["imageInput"], descendants: true }, { propertyName: "imageBasePreview", first: true, predicate: ["imageBasePreview"], descendants: true }], ngImport: i0, template: "<div class=\"col-md-6 form-new-loc\" *ngIf=\"form\">\r\n <form (ngSubmit)=\"onSubmit()\" [formGroup]=\"form\">\r\n\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Name' | translate}} *</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" data-testid=\"new-location-name\" (ngModelChange)=\"onFormChange()\"\r\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['name'])|| isFormError(form.controls['name'])}\"\r\n required formControlName=\"name\">\r\n\r\n <div class=\"invalid-feedback\">\r\n <ngb-alert data-testid=\"new-location-name-invalid\" [dismissible]=\"false\" type=\"danger\" *ngIf=\"validatorsService.isControlError(form.controls['name']) \r\n || isFormError(form.controls['name'])\">\r\n {{validatorsService.getError(form.controls['name']) | translate}}\r\n </ngb-alert>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Address' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"addresses\" data-testid=\"new-location-address\" (ngModelChange)=\"onFormChange()\"\r\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['addresses']) || isFormError(form.controls['addresses'])}\">\r\n <div class=\"invalid-feedback\">\r\n <span data-testid=\"\" [translate]=\"validatorsService.getError(form.controls['addresses'])\"\r\n *ngIf=\" validatorsService.isControlError(form.controls['addresses'])\"></span>\r\n\r\n <ngb-alert data-testid=\"new-location-address-invalid\" [dismissible]=\"false\" type=\"danger\"\r\n *ngIf=\"validatorsService.isControlError(form.controls['addresses']) \">\r\n\r\n {{validatorsService.getError(form.controls['addresses']) | translate}}\r\n </ngb-alert>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Construction year' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"constructionYear\"\r\n data-testid=\"new-location-constructionYear\" (ngModelChange)=\"onFormChange()\"\r\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['constructionYear']) || isFormError(form.controls['constructionYear'])}\">\r\n <div class=\"invalid-feedback\">\r\n <ngb-alert data-testid=\"new-location-constructionYear-invalid\" [dismissible]=\"false\" type=\"danger\"\r\n *ngIf=\"validatorsService.isControlError(form.controls['constructionYear']) || isFormError(form.controls['constructionYear'])\">\r\n {{validatorsService.getError(form.controls['constructionYear']) | translate}}\r\n </ngb-alert>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Latitude' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"latitude\" data-testid=\"new-location-latitude\" (ngModelChange)=\"onFormChange()\"\r\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['latitude'])|| isFormError(form.controls['latitude'])}\">\r\n <div class=\"invalid-feedback\">\r\n <ngb-alert data-testid=\"new-location-latitude-invalid\" [dismissible]=\"false\" type=\"danger\"\r\n *ngIf=\"validatorsService.isControlError(form.controls['latitude']) || isFormError(form.controls['latitude'])\">\r\n {{validatorsService.getError(form.controls['latitude']) | translate}}\r\n </ngb-alert>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Longitude' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"longitude\" data-testid=\"new-location-longitude\" (ngModelChange)=\"onFormChange()\"\r\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['longitude'])|| isFormError(form.controls['longitude'])}\">\r\n <div class=\"invalid-feedback\">\r\n <ngb-alert data-testid=\"new-location-longitude-invalid\" [dismissible]=\"false\" type=\"danger\"\r\n *ngIf=\"validatorsService.isControlError(form.controls['longitude']) || isFormError(form.controls['longitude'])\">\r\n {{validatorsService.getError(form.controls['longitude']) | translate}}\r\n </ngb-alert>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Access level' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <select class=\"d-inline-block custom-select rounded-pill\" formControlName=\"level\">\r\n <option *ngFor=\"let level of levels\" [value]=\"level\">{{level | translate}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Energy Class' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"classEnergyConsumption\"\r\n data-testid=\"new-location-classEnergyConsumption\" (ngModelChange)=\"onFormChange()\"\r\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['classEnergyConsumption']) || isFormError(form.controls['classEnergyConsumption'])}\">\r\n <div class=\"invalid-feedback\">\r\n <ngb-alert data-testid=\"new-location-classEnergyConsumption-invalid\" [dismissible]=\"false\" type=\"danger\"\r\n *ngIf=\"validatorsService.isControlError(form.controls['classEnergyConsumption']) || isFormError(form.controls['classEnergyConsumption'])\">\r\n {{validatorsService.getError(form.controls['classEnergyConsumption']) | translate}}\r\n </ngb-alert>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Greenhouse gas emission Class' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"classGes\" data-testid=\"new-location-classGes\" (ngModelChange)=\"onFormChange()\"\r\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['classGes'])|| isFormError(form.controls['classGes'])}\">\r\n <div class=\"invalid-feedback\">\r\n <ngb-alert data-testid=\"new-location-classGes-invalid\" [dismissible]=\"false\" type=\"danger\"\r\n *ngIf=\"validatorsService.isControlError(form.controls['classGes']) || isFormError(form.controls['classGes'])\">\r\n {{validatorsService.getError(form.controls['classGes']) | translate}}\r\n </ngb-alert>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Cover picture' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <img #imageBasePreview *ngIf=\"currentImage\" class=\"image-preview\" [src]=\"currentImage\">\r\n <label #imageInputContainer for=\"image\"\r\n class=\"btn btn-label-file btn-outline-primary rounded-pill imageInputContainer\">\r\n <input #imageInput type=\"file\" id=\"image\" (change)=\"handleImageInput($event.target)\" />\r\n {{ imageInputText | translate}}</label>\r\n <button *ngIf=\"currentImage && !imageToUpload\" class=\"btn btn-outline-primary rounded-pill\"\r\n (click)=\"imageToBeDeleted=true;clearImageFile()\">{{'Delete picture' | translate }}</button>\r\n <div class=\"image-name\" *ngIf=\"imageToUpload\">\r\n <p>{{ imageToUpload.name}}</p>\r\n <div (click)=\"clearImageFile()\" [style.cursor]=\"'pointer'\">\r\n <span class=\"iconify\" data-icon=\"mdi:trash-can-outline\"></span>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n <div class=\"mb-3 row\" *ngIf=\"!location\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Create mission for this space' | translate}}</label>\r\n <div class=\"col-sm-3\">\r\n <input type=\"checkbox\" [(ngModel)]=\"addMissionForNewSpace\" [ngModelOptions]=\"{standalone: true}\">\r\n </div>\r\n </div>\r\n\r\n <button data-testid=\"new-location-submit-btn\" [ngClass]=\"{'is-invalid' : errorForm }\" type=\"submit\"\r\n class=\"btn btn-outline-primary rounded-pill me-3\">{{'Save' | translate}}</button>\r\n\r\n <button data-testid=\"new-location-close-btn\" type=\"button\" (click)=\"onCancel()\"\r\n class=\"btn btn-outline-primary rounded-pill\">{{'Cancel' |\r\n translate}}</button>\r\n\r\n <div class=\"invalid-feedback\" *ngIf=\"errorForm\">\r\n <ngb-alert data-testid=\"new-location-form-invalid\" [dismissible]=\"false\" type=\"danger\">\r\n {{'errorForm.infoBtn' |translate}}\r\n\r\n </ngb-alert>\r\n </div>\r\n </form>\r\n</div>", styles: ["input[type=file]{display:none}.custom-select{border-color:var(--smarterplan-primary);width:auto}.form-new-loc{background-color:#d3d3d3;padding-top:10px;padding-bottom:10px;margin-bottom:15px}.btn-outline-primary{background-color:#fff}h4{color:var(--smarterplan-primary)}.image-preview{object-fit:cover;max-height:400px;max-width:400px;display:flex;margin-bottom:15px}.imageInputContainer{width:-moz-fit-content;width:fit-content;height:-moz-fit-content;height:fit-content}.image-name{display:flex}.col-form-label{margin-bottom:1rem;width:230px}.form-new-loc{background-color:#d3d3d3;margin-bottom:15px;padding:10px;width:80%;border-radius:10px}.col-sm-9 select{width:100%;height:31.25px;padding-left:10px}.btn-outline-primary{width:200px;margin-bottom:1rem;margin-right:1rem}.is-invalid,.btn-outline-primary.is-invalid{border-color:red!important}\n"], components: [{ type: i3.NgbAlert, selector: "ngb-alert", inputs: ["animation", "dismissible", "type"], outputs: ["closed"], exportAs: ["ngbAlert"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { 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]" }, { type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i5.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "translate": i5.TranslatePipe } });
219
+ FormLocationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: FormLocationComponent, selector: "lib-form-location", inputs: { location: "location" }, outputs: { onChange: "onChange" }, viewQueries: [{ propertyName: "imageInputContainer", first: true, predicate: ["imageInputContainer"], descendants: true }, { propertyName: "imageInput", first: true, predicate: ["imageInput"], descendants: true }, { propertyName: "imageBasePreview", first: true, predicate: ["imageBasePreview"], descendants: true }], ngImport: i0, template: "<div class=\"col-md-6 form-new-loc\" *ngIf=\"form\">\n <form (ngSubmit)=\"onSubmit()\" [formGroup]=\"form\">\n\n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Name' | translate}} *</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" data-testid=\"new-location-name\" (ngModelChange)=\"onFormChange()\"\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['name'])|| isFormError(form.controls['name'])}\"\n required formControlName=\"name\">\n\n <div class=\"invalid-feedback\">\n <ngb-alert data-testid=\"new-location-name-invalid\" [dismissible]=\"false\" type=\"danger\" *ngIf=\"validatorsService.isControlError(form.controls['name']) \n || isFormError(form.controls['name'])\">\n {{validatorsService.getError(form.controls['name']) | translate}}\n </ngb-alert>\n\n </div>\n </div>\n </div>\n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Address' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"addresses\" data-testid=\"new-location-address\" (ngModelChange)=\"onFormChange()\"\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['addresses']) || isFormError(form.controls['addresses'])}\">\n <div class=\"invalid-feedback\">\n <span data-testid=\"\" [translate]=\"validatorsService.getError(form.controls['addresses'])\"\n *ngIf=\" validatorsService.isControlError(form.controls['addresses'])\"></span>\n\n <ngb-alert data-testid=\"new-location-address-invalid\" [dismissible]=\"false\" type=\"danger\"\n *ngIf=\"validatorsService.isControlError(form.controls['addresses']) \">\n\n {{validatorsService.getError(form.controls['addresses']) | translate}}\n </ngb-alert>\n\n </div>\n </div>\n </div>\n\n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Construction year' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"constructionYear\"\n data-testid=\"new-location-constructionYear\" (ngModelChange)=\"onFormChange()\"\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['constructionYear']) || isFormError(form.controls['constructionYear'])}\">\n <div class=\"invalid-feedback\">\n <ngb-alert data-testid=\"new-location-constructionYear-invalid\" [dismissible]=\"false\" type=\"danger\"\n *ngIf=\"validatorsService.isControlError(form.controls['constructionYear']) || isFormError(form.controls['constructionYear'])\">\n {{validatorsService.getError(form.controls['constructionYear']) | translate}}\n </ngb-alert>\n </div>\n </div>\n </div>\n\n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Latitude' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"latitude\" data-testid=\"new-location-latitude\" (ngModelChange)=\"onFormChange()\"\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['latitude'])|| isFormError(form.controls['latitude'])}\">\n <div class=\"invalid-feedback\">\n <ngb-alert data-testid=\"new-location-latitude-invalid\" [dismissible]=\"false\" type=\"danger\"\n *ngIf=\"validatorsService.isControlError(form.controls['latitude']) || isFormError(form.controls['latitude'])\">\n {{validatorsService.getError(form.controls['latitude']) | translate}}\n </ngb-alert>\n </div>\n </div>\n </div>\n\n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Longitude' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"longitude\" data-testid=\"new-location-longitude\" (ngModelChange)=\"onFormChange()\"\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['longitude'])|| isFormError(form.controls['longitude'])}\">\n <div class=\"invalid-feedback\">\n <ngb-alert data-testid=\"new-location-longitude-invalid\" [dismissible]=\"false\" type=\"danger\"\n *ngIf=\"validatorsService.isControlError(form.controls['longitude']) || isFormError(form.controls['longitude'])\">\n {{validatorsService.getError(form.controls['longitude']) | translate}}\n </ngb-alert>\n </div>\n </div>\n </div>\n\n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Access level' | translate}}</label>\n <div class=\"col-sm-9\">\n <select class=\"d-inline-block custom-select rounded-pill\" formControlName=\"level\">\n <option *ngFor=\"let level of levels\" [value]=\"level\">{{level | translate}}</option>\n </select>\n </div>\n </div>\n\n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Energy Class' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"classEnergyConsumption\"\n data-testid=\"new-location-classEnergyConsumption\" (ngModelChange)=\"onFormChange()\"\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['classEnergyConsumption']) || isFormError(form.controls['classEnergyConsumption'])}\">\n <div class=\"invalid-feedback\">\n <ngb-alert data-testid=\"new-location-classEnergyConsumption-invalid\" [dismissible]=\"false\" type=\"danger\"\n *ngIf=\"validatorsService.isControlError(form.controls['classEnergyConsumption']) || isFormError(form.controls['classEnergyConsumption'])\">\n {{validatorsService.getError(form.controls['classEnergyConsumption']) | translate}}\n </ngb-alert>\n </div>\n </div>\n </div>\n\n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Greenhouse gas emission Class' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"classGes\" data-testid=\"new-location-classGes\" (ngModelChange)=\"onFormChange()\"\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['classGes'])|| isFormError(form.controls['classGes'])}\">\n <div class=\"invalid-feedback\">\n <ngb-alert data-testid=\"new-location-classGes-invalid\" [dismissible]=\"false\" type=\"danger\"\n *ngIf=\"validatorsService.isControlError(form.controls['classGes']) || isFormError(form.controls['classGes'])\">\n {{validatorsService.getError(form.controls['classGes']) | translate}}\n </ngb-alert>\n </div>\n </div>\n </div>\n\n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Cover picture' | translate}}</label>\n <div class=\"col-sm-9\">\n <img #imageBasePreview *ngIf=\"currentImage\" class=\"image-preview\" [src]=\"currentImage\">\n <label #imageInputContainer for=\"image\"\n class=\"btn btn-label-file btn-outline-primary rounded-pill imageInputContainer\">\n <input #imageInput type=\"file\" id=\"image\" (change)=\"handleImageInput($event.target)\" />\n {{ imageInputText | translate}}</label>\n <button *ngIf=\"currentImage && !imageToUpload\" class=\"btn btn-outline-primary rounded-pill\"\n (click)=\"imageToBeDeleted=true;clearImageFile()\">{{'Delete picture' | translate }}</button>\n <div class=\"image-name\" *ngIf=\"imageToUpload\">\n <p>{{ imageToUpload.name}}</p>\n <div (click)=\"clearImageFile()\" [style.cursor]=\"'pointer'\">\n <span class=\"iconify\" data-icon=\"mdi:trash-can-outline\"></span>\n </div>\n </div>\n\n </div>\n </div>\n <div class=\"mb-3 row\" *ngIf=\"!location\">\n <label class=\"col-sm-3 col-form-label\">{{'Create mission for this space' | translate}}</label>\n <div class=\"col-sm-3\">\n <input type=\"checkbox\" [(ngModel)]=\"addMissionForNewSpace\" [ngModelOptions]=\"{standalone: true}\">\n </div>\n </div>\n\n <button data-testid=\"new-location-submit-btn\" [ngClass]=\"{'is-invalid' : errorForm }\" type=\"submit\"\n class=\"btn btn-outline-primary rounded-pill me-3\">{{'Save' | translate}}</button>\n\n <button data-testid=\"new-location-close-btn\" type=\"button\" (click)=\"onCancel()\"\n class=\"btn btn-outline-primary rounded-pill\">{{'Cancel' |\n translate}}</button>\n\n <div class=\"invalid-feedback\" *ngIf=\"errorForm\">\n <ngb-alert data-testid=\"new-location-form-invalid\" [dismissible]=\"false\" type=\"danger\">\n {{'errorForm.infoBtn' |translate}}\n\n </ngb-alert>\n </div>\n </form>\n</div>", styles: ["input[type=file]{display:none}.custom-select{border-color:var(--smarterplan-primary);width:auto}.form-new-loc{background-color:#d3d3d3;padding-top:10px;padding-bottom:10px;margin-bottom:15px}.btn-outline-primary{background-color:#fff}h4{color:var(--smarterplan-primary)}.image-preview{object-fit:cover;max-height:400px;max-width:400px;display:flex;margin-bottom:15px}.imageInputContainer{width:-moz-fit-content;width:fit-content;height:-moz-fit-content;height:fit-content}.image-name{display:flex}.col-form-label{margin-bottom:1rem;width:230px}.form-new-loc{background-color:#d3d3d3;margin-bottom:15px;padding:10px;width:80%;border-radius:10px}.col-sm-9 select{width:100%;height:31.25px;padding-left:10px}.btn-outline-primary{width:200px;margin-bottom:1rem;margin-right:1rem}.is-invalid,.btn-outline-primary.is-invalid{border-color:red!important}\n"], components: [{ type: i3.NgbAlert, selector: "ngb-alert", inputs: ["animation", "dismissible", "type"], outputs: ["closed"], exportAs: ["ngbAlert"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { 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]" }, { type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i5.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "translate": i5.TranslatePipe } });
220
220
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: FormLocationComponent, decorators: [{
221
221
  type: Component,
222
- args: [{ selector: 'lib-form-location', template: "<div class=\"col-md-6 form-new-loc\" *ngIf=\"form\">\r\n <form (ngSubmit)=\"onSubmit()\" [formGroup]=\"form\">\r\n\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Name' | translate}} *</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" data-testid=\"new-location-name\" (ngModelChange)=\"onFormChange()\"\r\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['name'])|| isFormError(form.controls['name'])}\"\r\n required formControlName=\"name\">\r\n\r\n <div class=\"invalid-feedback\">\r\n <ngb-alert data-testid=\"new-location-name-invalid\" [dismissible]=\"false\" type=\"danger\" *ngIf=\"validatorsService.isControlError(form.controls['name']) \r\n || isFormError(form.controls['name'])\">\r\n {{validatorsService.getError(form.controls['name']) | translate}}\r\n </ngb-alert>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Address' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"addresses\" data-testid=\"new-location-address\" (ngModelChange)=\"onFormChange()\"\r\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['addresses']) || isFormError(form.controls['addresses'])}\">\r\n <div class=\"invalid-feedback\">\r\n <span data-testid=\"\" [translate]=\"validatorsService.getError(form.controls['addresses'])\"\r\n *ngIf=\" validatorsService.isControlError(form.controls['addresses'])\"></span>\r\n\r\n <ngb-alert data-testid=\"new-location-address-invalid\" [dismissible]=\"false\" type=\"danger\"\r\n *ngIf=\"validatorsService.isControlError(form.controls['addresses']) \">\r\n\r\n {{validatorsService.getError(form.controls['addresses']) | translate}}\r\n </ngb-alert>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Construction year' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"constructionYear\"\r\n data-testid=\"new-location-constructionYear\" (ngModelChange)=\"onFormChange()\"\r\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['constructionYear']) || isFormError(form.controls['constructionYear'])}\">\r\n <div class=\"invalid-feedback\">\r\n <ngb-alert data-testid=\"new-location-constructionYear-invalid\" [dismissible]=\"false\" type=\"danger\"\r\n *ngIf=\"validatorsService.isControlError(form.controls['constructionYear']) || isFormError(form.controls['constructionYear'])\">\r\n {{validatorsService.getError(form.controls['constructionYear']) | translate}}\r\n </ngb-alert>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Latitude' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"latitude\" data-testid=\"new-location-latitude\" (ngModelChange)=\"onFormChange()\"\r\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['latitude'])|| isFormError(form.controls['latitude'])}\">\r\n <div class=\"invalid-feedback\">\r\n <ngb-alert data-testid=\"new-location-latitude-invalid\" [dismissible]=\"false\" type=\"danger\"\r\n *ngIf=\"validatorsService.isControlError(form.controls['latitude']) || isFormError(form.controls['latitude'])\">\r\n {{validatorsService.getError(form.controls['latitude']) | translate}}\r\n </ngb-alert>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Longitude' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"longitude\" data-testid=\"new-location-longitude\" (ngModelChange)=\"onFormChange()\"\r\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['longitude'])|| isFormError(form.controls['longitude'])}\">\r\n <div class=\"invalid-feedback\">\r\n <ngb-alert data-testid=\"new-location-longitude-invalid\" [dismissible]=\"false\" type=\"danger\"\r\n *ngIf=\"validatorsService.isControlError(form.controls['longitude']) || isFormError(form.controls['longitude'])\">\r\n {{validatorsService.getError(form.controls['longitude']) | translate}}\r\n </ngb-alert>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Access level' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <select class=\"d-inline-block custom-select rounded-pill\" formControlName=\"level\">\r\n <option *ngFor=\"let level of levels\" [value]=\"level\">{{level | translate}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Energy Class' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"classEnergyConsumption\"\r\n data-testid=\"new-location-classEnergyConsumption\" (ngModelChange)=\"onFormChange()\"\r\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['classEnergyConsumption']) || isFormError(form.controls['classEnergyConsumption'])}\">\r\n <div class=\"invalid-feedback\">\r\n <ngb-alert data-testid=\"new-location-classEnergyConsumption-invalid\" [dismissible]=\"false\" type=\"danger\"\r\n *ngIf=\"validatorsService.isControlError(form.controls['classEnergyConsumption']) || isFormError(form.controls['classEnergyConsumption'])\">\r\n {{validatorsService.getError(form.controls['classEnergyConsumption']) | translate}}\r\n </ngb-alert>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Greenhouse gas emission Class' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"classGes\" data-testid=\"new-location-classGes\" (ngModelChange)=\"onFormChange()\"\r\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['classGes'])|| isFormError(form.controls['classGes'])}\">\r\n <div class=\"invalid-feedback\">\r\n <ngb-alert data-testid=\"new-location-classGes-invalid\" [dismissible]=\"false\" type=\"danger\"\r\n *ngIf=\"validatorsService.isControlError(form.controls['classGes']) || isFormError(form.controls['classGes'])\">\r\n {{validatorsService.getError(form.controls['classGes']) | translate}}\r\n </ngb-alert>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-3 row\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Cover picture' | translate}}</label>\r\n <div class=\"col-sm-9\">\r\n <img #imageBasePreview *ngIf=\"currentImage\" class=\"image-preview\" [src]=\"currentImage\">\r\n <label #imageInputContainer for=\"image\"\r\n class=\"btn btn-label-file btn-outline-primary rounded-pill imageInputContainer\">\r\n <input #imageInput type=\"file\" id=\"image\" (change)=\"handleImageInput($event.target)\" />\r\n {{ imageInputText | translate}}</label>\r\n <button *ngIf=\"currentImage && !imageToUpload\" class=\"btn btn-outline-primary rounded-pill\"\r\n (click)=\"imageToBeDeleted=true;clearImageFile()\">{{'Delete picture' | translate }}</button>\r\n <div class=\"image-name\" *ngIf=\"imageToUpload\">\r\n <p>{{ imageToUpload.name}}</p>\r\n <div (click)=\"clearImageFile()\" [style.cursor]=\"'pointer'\">\r\n <span class=\"iconify\" data-icon=\"mdi:trash-can-outline\"></span>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n <div class=\"mb-3 row\" *ngIf=\"!location\">\r\n <label class=\"col-sm-3 col-form-label\">{{'Create mission for this space' | translate}}</label>\r\n <div class=\"col-sm-3\">\r\n <input type=\"checkbox\" [(ngModel)]=\"addMissionForNewSpace\" [ngModelOptions]=\"{standalone: true}\">\r\n </div>\r\n </div>\r\n\r\n <button data-testid=\"new-location-submit-btn\" [ngClass]=\"{'is-invalid' : errorForm }\" type=\"submit\"\r\n class=\"btn btn-outline-primary rounded-pill me-3\">{{'Save' | translate}}</button>\r\n\r\n <button data-testid=\"new-location-close-btn\" type=\"button\" (click)=\"onCancel()\"\r\n class=\"btn btn-outline-primary rounded-pill\">{{'Cancel' |\r\n translate}}</button>\r\n\r\n <div class=\"invalid-feedback\" *ngIf=\"errorForm\">\r\n <ngb-alert data-testid=\"new-location-form-invalid\" [dismissible]=\"false\" type=\"danger\">\r\n {{'errorForm.infoBtn' |translate}}\r\n\r\n </ngb-alert>\r\n </div>\r\n </form>\r\n</div>", styles: ["input[type=file]{display:none}.custom-select{border-color:var(--smarterplan-primary);width:auto}.form-new-loc{background-color:#d3d3d3;padding-top:10px;padding-bottom:10px;margin-bottom:15px}.btn-outline-primary{background-color:#fff}h4{color:var(--smarterplan-primary)}.image-preview{object-fit:cover;max-height:400px;max-width:400px;display:flex;margin-bottom:15px}.imageInputContainer{width:-moz-fit-content;width:fit-content;height:-moz-fit-content;height:fit-content}.image-name{display:flex}.col-form-label{margin-bottom:1rem;width:230px}.form-new-loc{background-color:#d3d3d3;margin-bottom:15px;padding:10px;width:80%;border-radius:10px}.col-sm-9 select{width:100%;height:31.25px;padding-left:10px}.btn-outline-primary{width:200px;margin-bottom:1rem;margin-right:1rem}.is-invalid,.btn-outline-primary.is-invalid{border-color:red!important}\n"] }]
222
+ args: [{ selector: 'lib-form-location', template: "<div class=\"col-md-6 form-new-loc\" *ngIf=\"form\">\n <form (ngSubmit)=\"onSubmit()\" [formGroup]=\"form\">\n\n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Name' | translate}} *</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" data-testid=\"new-location-name\" (ngModelChange)=\"onFormChange()\"\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['name'])|| isFormError(form.controls['name'])}\"\n required formControlName=\"name\">\n\n <div class=\"invalid-feedback\">\n <ngb-alert data-testid=\"new-location-name-invalid\" [dismissible]=\"false\" type=\"danger\" *ngIf=\"validatorsService.isControlError(form.controls['name']) \n || isFormError(form.controls['name'])\">\n {{validatorsService.getError(form.controls['name']) | translate}}\n </ngb-alert>\n\n </div>\n </div>\n </div>\n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Address' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"addresses\" data-testid=\"new-location-address\" (ngModelChange)=\"onFormChange()\"\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['addresses']) || isFormError(form.controls['addresses'])}\">\n <div class=\"invalid-feedback\">\n <span data-testid=\"\" [translate]=\"validatorsService.getError(form.controls['addresses'])\"\n *ngIf=\" validatorsService.isControlError(form.controls['addresses'])\"></span>\n\n <ngb-alert data-testid=\"new-location-address-invalid\" [dismissible]=\"false\" type=\"danger\"\n *ngIf=\"validatorsService.isControlError(form.controls['addresses']) \">\n\n {{validatorsService.getError(form.controls['addresses']) | translate}}\n </ngb-alert>\n\n </div>\n </div>\n </div>\n\n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Construction year' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"constructionYear\"\n data-testid=\"new-location-constructionYear\" (ngModelChange)=\"onFormChange()\"\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['constructionYear']) || isFormError(form.controls['constructionYear'])}\">\n <div class=\"invalid-feedback\">\n <ngb-alert data-testid=\"new-location-constructionYear-invalid\" [dismissible]=\"false\" type=\"danger\"\n *ngIf=\"validatorsService.isControlError(form.controls['constructionYear']) || isFormError(form.controls['constructionYear'])\">\n {{validatorsService.getError(form.controls['constructionYear']) | translate}}\n </ngb-alert>\n </div>\n </div>\n </div>\n\n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Latitude' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"latitude\" data-testid=\"new-location-latitude\" (ngModelChange)=\"onFormChange()\"\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['latitude'])|| isFormError(form.controls['latitude'])}\">\n <div class=\"invalid-feedback\">\n <ngb-alert data-testid=\"new-location-latitude-invalid\" [dismissible]=\"false\" type=\"danger\"\n *ngIf=\"validatorsService.isControlError(form.controls['latitude']) || isFormError(form.controls['latitude'])\">\n {{validatorsService.getError(form.controls['latitude']) | translate}}\n </ngb-alert>\n </div>\n </div>\n </div>\n\n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Longitude' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"longitude\" data-testid=\"new-location-longitude\" (ngModelChange)=\"onFormChange()\"\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['longitude'])|| isFormError(form.controls['longitude'])}\">\n <div class=\"invalid-feedback\">\n <ngb-alert data-testid=\"new-location-longitude-invalid\" [dismissible]=\"false\" type=\"danger\"\n *ngIf=\"validatorsService.isControlError(form.controls['longitude']) || isFormError(form.controls['longitude'])\">\n {{validatorsService.getError(form.controls['longitude']) | translate}}\n </ngb-alert>\n </div>\n </div>\n </div>\n\n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Access level' | translate}}</label>\n <div class=\"col-sm-9\">\n <select class=\"d-inline-block custom-select rounded-pill\" formControlName=\"level\">\n <option *ngFor=\"let level of levels\" [value]=\"level\">{{level | translate}}</option>\n </select>\n </div>\n </div>\n\n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Energy Class' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"classEnergyConsumption\"\n data-testid=\"new-location-classEnergyConsumption\" (ngModelChange)=\"onFormChange()\"\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['classEnergyConsumption']) || isFormError(form.controls['classEnergyConsumption'])}\">\n <div class=\"invalid-feedback\">\n <ngb-alert data-testid=\"new-location-classEnergyConsumption-invalid\" [dismissible]=\"false\" type=\"danger\"\n *ngIf=\"validatorsService.isControlError(form.controls['classEnergyConsumption']) || isFormError(form.controls['classEnergyConsumption'])\">\n {{validatorsService.getError(form.controls['classEnergyConsumption']) | translate}}\n </ngb-alert>\n </div>\n </div>\n </div>\n\n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Greenhouse gas emission Class' | translate}}</label>\n <div class=\"col-sm-9\">\n <input type=\"text\" class=\"form-control\" formControlName=\"classGes\" data-testid=\"new-location-classGes\" (ngModelChange)=\"onFormChange()\"\n [ngClass]=\"{'is-invalid' : validatorsService.isControlError(form.controls['classGes'])|| isFormError(form.controls['classGes'])}\">\n <div class=\"invalid-feedback\">\n <ngb-alert data-testid=\"new-location-classGes-invalid\" [dismissible]=\"false\" type=\"danger\"\n *ngIf=\"validatorsService.isControlError(form.controls['classGes']) || isFormError(form.controls['classGes'])\">\n {{validatorsService.getError(form.controls['classGes']) | translate}}\n </ngb-alert>\n </div>\n </div>\n </div>\n\n <div class=\"mb-3 row\">\n <label class=\"col-sm-3 col-form-label\">{{'Cover picture' | translate}}</label>\n <div class=\"col-sm-9\">\n <img #imageBasePreview *ngIf=\"currentImage\" class=\"image-preview\" [src]=\"currentImage\">\n <label #imageInputContainer for=\"image\"\n class=\"btn btn-label-file btn-outline-primary rounded-pill imageInputContainer\">\n <input #imageInput type=\"file\" id=\"image\" (change)=\"handleImageInput($event.target)\" />\n {{ imageInputText | translate}}</label>\n <button *ngIf=\"currentImage && !imageToUpload\" class=\"btn btn-outline-primary rounded-pill\"\n (click)=\"imageToBeDeleted=true;clearImageFile()\">{{'Delete picture' | translate }}</button>\n <div class=\"image-name\" *ngIf=\"imageToUpload\">\n <p>{{ imageToUpload.name}}</p>\n <div (click)=\"clearImageFile()\" [style.cursor]=\"'pointer'\">\n <span class=\"iconify\" data-icon=\"mdi:trash-can-outline\"></span>\n </div>\n </div>\n\n </div>\n </div>\n <div class=\"mb-3 row\" *ngIf=\"!location\">\n <label class=\"col-sm-3 col-form-label\">{{'Create mission for this space' | translate}}</label>\n <div class=\"col-sm-3\">\n <input type=\"checkbox\" [(ngModel)]=\"addMissionForNewSpace\" [ngModelOptions]=\"{standalone: true}\">\n </div>\n </div>\n\n <button data-testid=\"new-location-submit-btn\" [ngClass]=\"{'is-invalid' : errorForm }\" type=\"submit\"\n class=\"btn btn-outline-primary rounded-pill me-3\">{{'Save' | translate}}</button>\n\n <button data-testid=\"new-location-close-btn\" type=\"button\" (click)=\"onCancel()\"\n class=\"btn btn-outline-primary rounded-pill\">{{'Cancel' |\n translate}}</button>\n\n <div class=\"invalid-feedback\" *ngIf=\"errorForm\">\n <ngb-alert data-testid=\"new-location-form-invalid\" [dismissible]=\"false\" type=\"danger\">\n {{'errorForm.infoBtn' |translate}}\n\n </ngb-alert>\n </div>\n </form>\n</div>", styles: ["input[type=file]{display:none}.custom-select{border-color:var(--smarterplan-primary);width:auto}.form-new-loc{background-color:#d3d3d3;padding-top:10px;padding-bottom:10px;margin-bottom:15px}.btn-outline-primary{background-color:#fff}h4{color:var(--smarterplan-primary)}.image-preview{object-fit:cover;max-height:400px;max-width:400px;display:flex;margin-bottom:15px}.imageInputContainer{width:-moz-fit-content;width:fit-content;height:-moz-fit-content;height:fit-content}.image-name{display:flex}.col-form-label{margin-bottom:1rem;width:230px}.form-new-loc{background-color:#d3d3d3;margin-bottom:15px;padding:10px;width:80%;border-radius:10px}.col-sm-9 select{width:100%;height:31.25px;padding-left:10px}.btn-outline-primary{width:200px;margin-bottom:1rem;margin-right:1rem}.is-invalid,.btn-outline-primary.is-invalid{border-color:red!important}\n"] }]
223
223
  }], ctorParameters: function () { return [{ type: i1.SpaceService }, { type: i1.PropertyService }, { type: i1.BaseUserService }, { type: i2.FormBuilder }, { type: i1.MissionService }, { type: i1.LayerService }, { type: i1.ValidatorsService }]; }, propDecorators: { imageInputContainer: [{
224
224
  type: ViewChild,
225
225
  args: ["imageInputContainer"]
@@ -234,4 +234,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
234
234
  }], onChange: [{
235
235
  type: Output
236
236
  }] } });
237
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1sb2NhdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tbG9jYXRpb25zL3NyYy9saWIvY29tcG9uZW50cy9mb3JtLWxvY2F0aW9uL2Zvcm0tbG9jYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWxvY2F0aW9ucy9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS1sb2NhdGlvbi9mb3JtLWxvY2F0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RHLE9BQU8sRUFBMEIsVUFBVSxFQUFtQixNQUFNLGdCQUFnQixDQUFDO0FBQ3JGLE9BQU8sRUFBUyxXQUFXLEVBQWtFLFdBQVcsRUFBRSxjQUFjLEVBQVMsWUFBWSxFQUFFLHlCQUF5QixFQUFnQixZQUFZLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNoUCxPQUFPLEVBQXFCLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7Ozs7OztBQU92SCxNQUFNLE9BQU8scUJBQXFCO0lBa0M5QixZQUNZLFlBQTBCLEVBQzFCLGVBQWdDLEVBQ2hDLFdBQTRCLEVBQzVCLEVBQWUsRUFDZixjQUE4QixFQUM5QixZQUEwQixFQUMzQixpQkFBb0M7UUFObkMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLGdCQUFXLEdBQVgsV0FBVyxDQUFpQjtRQUM1QixPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQ2YsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGlCQUFZLEdBQVosWUFBWSxDQUFj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QUFyQixxQkFBcUIsNGJDVmxDLDBxU0ErSk07MkZEckpPLHFCQUFxQjtrQkFMakMsU0FBUzsrQkFDSSxtQkFBbUI7aVJBUzdCLG1CQUFtQjtzQkFEbEIsU0FBUzt1QkFBQyxxQkFBcUI7Z0JBSWhDLFVBQVU7c0JBRFQsU0FBUzt1QkFBQyxZQUFZO2dCQUl2QixnQkFBZ0I7c0JBRGYsU0FBUzt1QkFBQyxrQkFBa0I7Z0JBSTdCLFFBQVE7c0JBRFAsS0FBSztnQkFtQkksUUFBUTtzQkFBakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1CdWlsZGVyLCBWYWxpZGF0b3JzLCBBYnN0cmFjdENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFNwYWNlLCBMZXZlbFN0YXR1cywgU3BhY2VTZXJ2aWNlLCBQcm9wZXJ0eVNlcnZpY2UsIEJhc2VVc2VyU2VydmljZSwgTWlzc2lvblNlcnZpY2UsIGVudW1Ub0FycmF5LCB1cGxvYWRGaWxlVG9TMywgTGF5ZXIsIFByb3BlcnR5VHlwZSwgZ2V0U2lnbmVkSW1hZ2VVcmxGb3JTcGFjZSwgTGF5ZXJTZXJ2aWNlLCBkZWxldGVGcm9tUzMgfSBmcm9tICdAc21hcnRlcnBsYW4vbmd4LXNtYXJ0ZXJwbGFuLWNvcmUnO1xyXG5pbXBvcnQgeyBWYWxpZGF0b3JzU2VydmljZSwgdGV4dFZhbGlkYXRvciwgbm9FbXB0eVZhbGlkYXRvciwgZmxvYXRWYWxpZGF0b3IgfSBmcm9tIFwiQHNtYXJ0ZXJwbGFuL25neC1zbWFydGVycGxhbi1jb3JlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnbGliLWZvcm0tbG9jYXRpb24nLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Zvcm0tbG9jYXRpb24uY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vZm9ybS1sb2NhdGlvbi5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGb3JtTG9jYXRpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICAgIGZvcm06IEZvcm1Hcm91cDtcclxuXHJcbiAgICBAVmlld0NoaWxkKFwiaW1hZ2VJbnB1dENvbnRhaW5lclwiKVxyXG4gICAgaW1hZ2VJbnB1dENvbnRhaW5lcjogRWxlbWVudFJlZjtcclxuXHJcbiAgICBAVmlld0NoaWxkKFwiaW1hZ2VJbnB1dFwiKVxyXG4gICAgaW1hZ2VJbnB1dDogRWxlbWVudFJlZjtcclxuXHJcbiAgICBAVmlld0NoaWxkKFwiaW1hZ2VCYXNlUHJldmlld1wiKVxyXG4gICAgaW1hZ2VCYXNlUHJldmlldzogRWxlbWVudFJlZjtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgbG9jYXRpb246IFNwYWNlO1xyXG5cclxuICAgIGltYWdlVG9VcGxvYWQ6IGFueTtcclxuXHJcbiAgICBpc1N1Ym1pdHRlZCA9IGZhbHNlO1xyXG5cclxuICAgIGxldmVsczogQXJyYXk8TGV2ZWxTdGF0dXM+O1xyXG5cclxuICAgIGFkZE1pc3Npb25Gb3JOZXdTcGFjZSA9IHRydWU7XHJcblxyXG4gICAgaW1hZ2VJbnB1dFRleHQ6IHN0cmluZztcclxuXHJcbiAgICBjdXJyZW50SW1hZ2U6IHN0cmluZztcclxuXHJcbiAgICBpbWFnZVRvQmVEZWxldGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgZXJyb3JGb3JtOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgQE91dHB1dCgpIG9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxTcGFjZSB8IG51bGw+KCk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBzcGFjZVNlcnZpY2U6IFNwYWNlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHByb3BlcnR5U2VydmljZTogUHJvcGVydHlTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IEJhc2VVc2VyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcclxuICAgICAgICBwcml2YXRlIG1pc3Npb25TZXJ2aWNlOiBNaXNzaW9uU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGxheWVyU2VydmljZTogTGF5ZXJTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyB2YWxpZGF0b3JzU2VydmljZTogVmFsaWRhdG9yc1NlcnZpY2VcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMubGV2ZWxzID0gZW51bVRvQXJyYXkoTGV2ZWxTdGF0dXMpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmxvY2F0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdEVkaXRGb3JtKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pbml0Rm9ybSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmhhbmRsZUlucHV0SW1hZ2VUZXh0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdEZvcm0oKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgICAgICAgIG5hbWU6IFtcIlwiLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMjU1KSwgdGV4dFZhbGlkYXRvcigpLCBub0VtcHR5VmFsaWRhdG9yKCldXSxcclxuICAgICAgICAgICAgYWRkcmVzc2VzOiBbXCJcIiwgW1ZhbGlkYXRvcnMubWF4TGVuZ3RoKDI1NSksIHRleHRWYWxpZGF0b3IoKSwgbm9FbXB0eVZhbGlkYXRvcigpXV0sXHJcbiAgICAgICAgICAgIGxhdGl0dWRlOiBbbnVsbCwgW1ZhbGlkYXRvcnMubWF4TGVuZ3RoKDI1NSksIG5vRW1wdHlWYWxpZGF0b3IoKSwgZmxvYXRWYWxpZGF0b3IoKV1dLFxyXG4gICAgICAgICAgICBsb25naXR1ZGU6IFtudWxsLCBbVmFsaWRhdG9ycy5tYXhMZW5ndGgoMjU1KSwgbm9FbXB0eVZhbGlkYXRvcigpLCBmbG9hdFZhbGlkYXRvcigpXV0sXHJcbiAgICAgICAgICAgIGxldmVsOiBMZXZlbFN0YXR1cy5MT1csXHJcbiAgICAgICAgICAgIGNsYXNzR2VzOiBbXCJcIiwgW1ZhbGlkYXRvcnMubWF4TGVuZ3RoKDI1NSksIHRleHRWYWxpZGF0b3IoKSwgbm9FbXB0eVZhbGlkYXRvcigpXV0sXHJcbiAgICAgICAgICAgIGNsYXNzRW5lcmd5Q29uc3VtcHRpb246IFtcIlwiLCBbVmFsaWRhdG9ycy5tYXhMZW5ndGgoMjU1KSwgdGV4dFZhbGlkYXRvcigpLCBub0VtcHR5VmFsaWRhdG9yKCldXSxcclxuICAgICAgICAgICAgY29uc3RydWN0aW9uWWVhcjogW1wiXCIsIFtWYWxpZGF0b3JzLm1heExlbmd0aCgyNTUpLCB0ZXh0VmFsaWRhdG9yKCksIG5vRW1wdHlWYWxpZGF0b3IoKV1dLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGluaXRFZGl0Rm9ybSgpIHtcclxuICAgICAgICB0aGlzLmZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgICAgICAgaWQ6IHRoaXMubG9jYXRpb24uaWQsXHJcbiAgICAgICAgICAgIG5hbWU6IFt0aGlzLmxvY2F0aW9uLm5hbWUsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1heExlbmd0aCgyNTUpLCB0ZXh0VmFsaWRhdG9yKCksIG5vRW1wdHlWYWxpZGF0b3IoKV1dLFxyXG4gICAgICAgICAgICBhZGRyZXNzZXM6IFt0aGlzLmxvY2F0aW9uLmFkZHJlc3NlcywgW1ZhbGlkYXRvcnMubWF4TGVuZ3RoKDI1NSksIHRleHRWYWxpZGF0b3IoKSwgbm9FbXB0eVZhbGlkYXRvcigpXV0sXHJcbiAgICAgICAgICAgIGxhdGl0dWRlOiBbdGhpcy5sb2NhdGlvbi5sYXRpdHVkZSwgW1ZhbGlkYXRvcnMubWF4TGVuZ3RoKDI1NSksIGZsb2F0VmFsaWRhdG9yKCldXSxcclxuICAgICAgICAgICAgbG9uZ2l0dWRlOiBbdGhpcy5sb2NhdGlvbi5sb25naXR1ZGUsIFtWYWxpZGF0b3JzLm1heExlbmd0aCgyNTUpLCBmbG9hdFZhbGlkYXRvcigpXV0sXHJcbiAgICAgICAgICAgIGxldmVsOiB0aGlzLmxvY2F0aW9uLmxldmVsLFxyXG4gICAgICAgICAgICBjbGFzc0dlczogW3RoaXMubG9jYXRpb24uY2xhc3NHZXMsIFtWYWxpZGF0b3JzLm1heExlbmd0aCgyNTUpLCB0ZXh0VmFsaWRhdG9yKCksIG5vRW1wdHlWYWxpZGF0b3IoKV1dLFxyXG4gICAgICAgICAgICBjbGFzc0VuZXJneUNvbnN1bXB0aW9uOiBbdGhpcy5sb2NhdGlvbi5jbGFzc0VuZXJneUNvbnN1bXB0aW9uLCBbVmFsaWRhdG9ycy5tYXhMZW5ndGgoMjU1KSwgdGV4dFZhbGlkYXRvcigpLCBub0VtcHR5VmFsaWRhdG9yKCldXSxcclxuICAgICAgICAgICAgY29uc3RydWN0aW9uWWVhcjogW3RoaXMubG9jYXRpb24uY29uc3RydWN0aW9uWWVhciwgW1ZhbGlkYXRvcnMubWF4TGVuZ3RoKDI1NSksIHRleHRWYWxpZGF0b3IoKSwgbm9FbXB0eVZhbGlkYXRvcigpXV0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlSW1hZ2VJbnB1dCh0YXJnZXQ6IEV2ZW50VGFyZ2V0KSB7XHJcbiAgICAgICAgdGhpcy5pbWFnZVRvVXBsb2FkID0gKHRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5maWxlc1swXTtcclxuICAgICAgICBpZiAodGhpcy5pbWFnZVRvVXBsb2FkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VJbnB1dENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcclxuICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgICAgICAgcmVhZGVyLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEltYWdlID0gcmVhZGVyLnJlc3VsdCBhcyBzdHJpbmc7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTCh0aGlzLmltYWdlVG9VcGxvYWQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB1cGxvYWRJbWFnZShzcGFjZUlEOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodGhpcy5pbWFnZVRvVXBsb2FkKSB7XHJcbiAgICAgICAgICAgIHVwbG9hZEZpbGVUb1MzKFwibG9jYXRpb25zL1wiLCB0aGlzLmltYWdlVG9VcGxvYWQsIHNwYWNlSUQpLnRoZW4oXHJcbiAgICAgICAgICAgICAgICBhc3luYyAodXJsKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVybCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNwYWNlU2VydmljZS51cGRhdGVTcGFjZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogc3BhY2VJRCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubmV4ZXM6IHVybCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaW1hZ2VUb0JlRGVsZXRlZCkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNwYWNlU2VydmljZS51cGRhdGVTcGFjZSh7XHJcbiAgICAgICAgICAgICAgICBpZDogc3BhY2VJRCxcclxuICAgICAgICAgICAgICAgIGFubmV4ZXM6IG51bGwsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBhd2FpdCBkZWxldGVGcm9tUzModGhpcy5sb2NhdGlvbi5hbm5leGVzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJJbWFnZUZpbGUoKSB7XHJcbiAgICAgICAgdGhpcy5pbWFnZVRvVXBsb2FkID0gbnVsbDtcclxuICAgICAgICB0aGlzLmN1cnJlbnRJbWFnZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5pbWFnZUlucHV0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IFwiZmxleFwiO1xyXG4gICAgICAgIHRoaXMuaW1hZ2VJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gXCJcIjtcclxuICAgICAgICB0aGlzLmltYWdlSW5wdXRUZXh0ID0gXCJBZGQgcGljdHVyZVwiO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldExheWVyQnlOYW1lKG5hbWU6IHN0cmluZyk6IFByb21pc2U8TGF5ZXI+IHtcclxuICAgICAgICBjb25zdCBjdXJyZW50T3JnSWQgPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRPcmdhbmlzYXRpb24oKS5pZDtcclxuICAgICAgICBjb25zdCBsYXllcnMgPSBhd2FpdCB0aGlzLmxheWVyU2VydmljZS5nZXRMYXllckJ5TmFtZUZvck9yZ2FuaXNhdGlvbihcclxuICAgICAgICAgICAgbmFtZSxcclxuICAgICAgICAgICAgY3VycmVudE9yZ0lkLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGxheWVycykge1xyXG4gICAgICAgICAgICByZXR1cm4gbGF5ZXJzWzBdO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjcmVhdGUgdGhlblxyXG4gICAgICAgIHJldHVybiB0aGlzLmxheWVyU2VydmljZS5jcmVhdGVMYXllckZvck9yZ2FuaXNhdGlvbihuYW1lLCBjdXJyZW50T3JnSWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uU3VibWl0KCkge1xyXG4gICAgICAgIHRoaXMuaXNTdWJtaXR0ZWQgPSB0cnVlO1xyXG4gICAgICAgIGlmICghdGhpcy5mb3JtLnZhbGlkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3JGb3JtID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cnkgeyBcclxuICAgICAgICAgICAgdGhpcy5lcnJvckZvcm0gPSBmYWxzZTtcclxuICAgICAgICAgICAgbGV0IHNwYWNlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5sb2NhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VDb21tYVRvRG90KCk7XHJcbiAgICAgICAgICAgICAgICBzcGFjZSA9IGF3YWl0IHRoaXMuc3BhY2VTZXJ2aWNlLnVwZGF0ZVNwYWNlKHRoaXMuZm9ybS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3BhY2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnVwbG9hZEltYWdlKHNwYWNlLmlkKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvY2F0aW9uID0gc3BhY2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZS5lbWl0KHNwYWNlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlQ29tbWFUb0RvdCgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3BhY2VJbnB1dCA9IHRoaXMuZm9ybS52YWx1ZSBhcyBTcGFjZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRPcmdJRCA9IHRoaXMudXNlclNlcnZpY2UuY3VycmVudE9yZ2FuaXNhdGlvbigpLmlkO1xyXG4gICAgICAgICAgICAgICAgc3BhY2VJbnB1dC5vcmdhbmlzYXRpb25JRCA9IGN1cnJlbnRPcmdJRDtcclxuICAgICAgICAgICAgICAgIGxldCBsYXllciA9IGF3YWl0IHRoaXMuZ2V0TGF5ZXJCeU5hbWUoXCJCVUlMRElOR1wiKTtcclxuICAgICAgICAgICAgICAgIGlmICghbGF5ZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBsYXllciA9IGF3YWl0IHRoaXMubGF5ZXJTZXJ2aWNlLmNyZWF0ZUxheWVyRm9yT3JnYW5pc2F0aW9uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkJVSUxESU5HXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRPcmdJRCxcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgc3BhY2UgPSBhd2FpdCB0aGlzLnNwYWNlU2VydmljZS5jcmVhdGVTcGFjZShcclxuICAgICAgICAgICAgICAgICAgICBzcGFjZUlucHV0LFxyXG4gICAgICAgICAgICAgICAgICAgIGxheWVyLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBtaXNzaW9ucyA9IHRoaXMudXNlclNlcnZpY2UuZ2V0TWFuYWdlck1pc3Npb25zKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3BhY2UgJiYgbWlzc2lvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4YW1wbGVNaXNzaW9uID0gbWlzc2lvbnNbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy51cGxvYWRJbWFnZShzcGFjZS5pZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wcm9wZXJ0eVNlcnZpY2UuY3JlYXRlUHJvcGVydHkoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogUHJvcGVydHlUeXBlLlBST1BFUlRZLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2VJRDogc3BhY2UuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmdhbmlzYXRpb25JRDogY3VycmVudE9yZ0lELFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQVBJIFNlcnZpY2UgZG9lcyBub3QgaGF2ZSBQcm9wZXJ0eSByZXF1ZXN0c1wiKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGFkZCBkaXJlY3RseSBhIG1pc3Npb24gZm9yIHRoaXMgc3BhY2VcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5hZGRNaXNzaW9uRm9yTmV3U3BhY2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5taXNzaW9uU2VydmljZS5jcmVhdGUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2VJRDogc3BhY2UuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VySUQ6IGV4YW1wbGVNaXNzaW9uLnVzZXJJRCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU6IGV4YW1wbGVNaXNzaW9uLnJvbGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbDogZXhhbXBsZU1pc3Npb24ubGV2ZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmdhbmlzYXRpb25JRDogZXhhbXBsZU1pc3Npb24ub3JnYW5pc2F0aW9uSUQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcmVkT3JnYW5pc2F0aW9uSUQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhhbXBsZU1pc3Npb24ub3JnYW5pc2F0aW9uSUQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQoc3BhY2UpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQobnVsbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZS5lbWl0KG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkNhbmNlbCgpIHtcclxuICAgICAgICB0aGlzLmZvcm0ucmVzZXQoKTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQobnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG5hbWUoKTogQWJzdHJhY3RDb250cm9sIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLmdldChcIm5hbWVcIik7XHJcbiAgICB9XHJcblxyXG4gICAgY2hhbmdlQ29tbWFUb0RvdCgpIHtcclxuICAgICAgICBjb25zdCB1cGRhdGVkU3BhY2UgPSB0aGlzLmZvcm0udmFsdWU7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB1cGRhdGVkU3BhY2UubGF0aXR1ZGUgJiZcclxuICAgICAgICAgICAgdXBkYXRlZFNwYWNlLmxhdGl0dWRlLnRvU3RyaW5nKCkuaW5jbHVkZXMoXCIsXCIpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHVwZGF0ZWRTcGFjZS5sYXRpdHVkZSA9IHVwZGF0ZWRTcGFjZS5sYXRpdHVkZVxyXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKFwiLFwiLCBcIi5cIik7XHJcbiAgICAgICAgICAgIE51bWJlci5wYXJzZUZsb2F0KHVwZGF0ZWRTcGFjZS5sYXRpdHVkZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgdXBkYXRlZFNwYWNlLmxvbmdpdHVkZSAmJlxyXG4gICAgICAgICAgICB1cGRhdGVkU3BhY2UubG9uZ2l0dWRlLnRvU3RyaW5nKCkuaW5jbHVkZXMoXCIsXCIpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHVwZGF0ZWRTcGFjZS5sb25naXR1ZGUgPSB1cGRhdGVkU3BhY2UubG9uZ2l0dWRlXHJcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoXCIsXCIsIFwiLlwiKTtcclxuICAgICAgICAgICAgTnVtYmVyLnBhcnNlRmxvYXQodXBkYXRlZFNwYWNlLmxvbmdpdHVkZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZUlucHV0SW1hZ2VUZXh0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmxvY2F0aW9uICYmIHRoaXMubG9jYXRpb24uYW5uZXhlcykge1xyXG4gICAgICAgICAgICB0aGlzLmltYWdlSW5wdXRUZXh0ID0gXCJDaGFuZ2UgcGljdHVyZVwiO1xyXG4gICAgICAgICAgICBnZXRTaWduZWRJbWFnZVVybEZvclNwYWNlKHRoaXMubG9jYXRpb24pLnRoZW4oKHVybCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHVybCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEltYWdlID0gdXJsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmltYWdlSW5wdXRUZXh0ID0gXCJBZGQgcGljdHVyZVwiO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBcclxuICAgIGlzRm9ybUVycm9yKGNvbnRyb2wpIHtcclxuICAgICAgICByZXR1cm4gY29udHJvbCAmJiBjb250cm9sLmludmFsaWQgJiYgdGhpcy5lcnJvckZvcm07XHJcbiAgICB9XHJcblxyXG4gICAgXHJcbiAgICBvbkZvcm1DaGFuZ2UoKXtcclxuICAgICAgICBpZiAodGhpcy5lcnJvckZvcm0gJiYgdGhpcy5mb3JtLnZhbGlkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3JGb3JtID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiY29sLW1kLTYgZm9ybS1uZXctbG9jXCIgKm5nSWY9XCJmb3JtXCI+XHJcbiAgPGZvcm0gKG5nU3VibWl0KT1cIm9uU3VibWl0KClcIiBbZm9ybUdyb3VwXT1cImZvcm1cIj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwibWItMyByb3dcIj5cclxuICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTMgY29sLWZvcm0tbGFiZWxcIj57eydOYW1lJyB8IHRyYW5zbGF0ZX19ICo8L2xhYmVsPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cclxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGRhdGEtdGVzdGlkPVwibmV3LWxvY2F0aW9uLW5hbWVcIiAobmdNb2RlbENoYW5nZSk9XCJvbkZvcm1DaGFuZ2UoKVwiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7J2lzLWludmFsaWQnIDogdmFsaWRhdG9yc1NlcnZpY2UuaXNDb250cm9sRXJyb3IoZm9ybS5jb250cm9sc1snbmFtZSddKXx8ICBpc0Zvcm1FcnJvcihmb3JtLmNvbnRyb2xzWyduYW1lJ10pfVwiXHJcbiAgICAgICAgICByZXF1aXJlZCBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCI+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCI+XHJcbiAgICAgICAgICA8bmdiLWFsZXJ0IGRhdGEtdGVzdGlkPVwibmV3LWxvY2F0aW9uLW5hbWUtaW52YWxpZFwiIFtkaXNtaXNzaWJsZV09XCJmYWxzZVwiIHR5cGU9XCJkYW5nZXJcIiAqbmdJZj1cInZhbGlkYXRvcnNTZXJ2aWNlLmlzQ29udHJvbEVycm9yKGZvcm0uY29udHJvbHNbJ25hbWUnXSkgXHJcbiAgICAgICAgICB8fCAgaXNGb3JtRXJyb3IoZm9ybS5jb250cm9sc1snbmFtZSddKVwiPlxyXG4gICAgICAgICAgICB7e3ZhbGlkYXRvcnNTZXJ2aWNlLmdldEVycm9yKGZvcm0uY29udHJvbHNbJ25hbWUnXSkgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgPC9uZ2ItYWxlcnQ+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm1iLTMgcm93XCI+XHJcbiAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+e3snQWRkcmVzcycgfCB0cmFuc2xhdGV9fTwvbGFiZWw+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOVwiPlxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiYWRkcmVzc2VzXCIgZGF0YS10ZXN0aWQ9XCJuZXctbG9jYXRpb24tYWRkcmVzc1wiIChuZ01vZGVsQ2hhbmdlKT1cIm9uRm9ybUNoYW5nZSgpXCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaXMtaW52YWxpZCcgOiB2YWxpZGF0b3JzU2VydmljZS5pc0NvbnRyb2xFcnJvcihmb3JtLmNvbnRyb2xzWydhZGRyZXNzZXMnXSkgfHwgIGlzRm9ybUVycm9yKGZvcm0uY29udHJvbHNbJ2FkZHJlc3NlcyddKX1cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiPlxyXG4gICAgICAgICAgPHNwYW4gZGF0YS10ZXN0aWQ9XCJcIiBbdHJhbnNsYXRlXT1cInZhbGlkYXRvcnNTZXJ2aWNlLmdldEVycm9yKGZvcm0uY29udHJvbHNbJ2FkZHJlc3NlcyddKVwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwiIHZhbGlkYXRvcnNTZXJ2aWNlLmlzQ29udHJvbEVycm9yKGZvcm0uY29udHJvbHNbJ2FkZHJlc3NlcyddKVwiPjwvc3Bhbj5cclxuXHJcbiAgICAgICAgICA8bmdiLWFsZXJ0IGRhdGEtdGVzdGlkPVwibmV3LWxvY2F0aW9uLWFkZHJlc3MtaW52YWxpZFwiIFtkaXNtaXNzaWJsZV09XCJmYWxzZVwiIHR5cGU9XCJkYW5nZXJcIlxyXG4gICAgICAgICAgICAqbmdJZj1cInZhbGlkYXRvcnNTZXJ2aWNlLmlzQ29udHJvbEVycm9yKGZvcm0uY29udHJvbHNbJ2FkZHJlc3NlcyddKSBcIj5cclxuXHJcbiAgICAgICAgICAgIHt7dmFsaWRhdG9yc1NlcnZpY2UuZ2V0RXJyb3IoZm9ybS5jb250cm9sc1snYWRkcmVzc2VzJ10pIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgIDwvbmdiLWFsZXJ0PlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwibWItMyByb3dcIj5cclxuICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTMgY29sLWZvcm0tbGFiZWxcIj57eydDb25zdHJ1Y3Rpb24geWVhcicgfCB0cmFuc2xhdGV9fTwvbGFiZWw+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOVwiPlxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiY29uc3RydWN0aW9uWWVhclwiXHJcbiAgICAgICAgICBkYXRhLXRlc3RpZD1cIm5ldy1sb2NhdGlvbi1jb25zdHJ1Y3Rpb25ZZWFyXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25Gb3JtQ2hhbmdlKClcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwieydpcy1pbnZhbGlkJyA6IHZhbGlkYXRvcnNTZXJ2aWNlLmlzQ29udHJvbEVycm9yKGZvcm0uY29udHJvbHNbJ2NvbnN0cnVjdGlvblllYXInXSkgfHwgaXNGb3JtRXJyb3IoZm9ybS5jb250cm9sc1snY29uc3RydWN0aW9uWWVhciddKX1cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiPlxyXG4gICAgICAgICAgPG5nYi1hbGVydCBkYXRhLXRlc3RpZD1cIm5ldy1sb2NhdGlvbi1jb25zdHJ1Y3Rpb25ZZWFyLWludmFsaWRcIiBbZGlzbWlzc2libGVdPVwiZmFsc2VcIiB0eXBlPVwiZGFuZ2VyXCJcclxuICAgICAgICAgICAgKm5nSWY9XCJ2YWxpZGF0b3JzU2VydmljZS5pc0NvbnRyb2xFcnJvcihmb3JtLmNvbnRyb2xzWydjb25zdHJ1Y3Rpb25ZZWFyJ10pIHx8ICBpc0Zvcm1FcnJvcihmb3JtLmNvbnRyb2xzWydjb25zdHJ1Y3Rpb25ZZWFyJ10pXCI+XHJcbiAgICAgICAgICAgIHt7dmFsaWRhdG9yc1NlcnZpY2UuZ2V0RXJyb3IoZm9ybS5jb250cm9sc1snY29uc3RydWN0aW9uWWVhciddKSB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICA8L25nYi1hbGVydD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwibWItMyByb3dcIj5cclxuICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTMgY29sLWZvcm0tbGFiZWxcIj57eydMYXRpdHVkZScgfCB0cmFuc2xhdGV9fTwvbGFiZWw+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOVwiPlxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwibGF0aXR1ZGVcIiBkYXRhLXRlc3RpZD1cIm5ldy1sb2NhdGlvbi1sYXRpdHVkZVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uRm9ybUNoYW5nZSgpXCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaXMtaW52YWxpZCcgOiB2YWxpZGF0b3JzU2VydmljZS5pc0NvbnRyb2xFcnJvcihmb3JtLmNvbnRyb2xzWydsYXRpdHVkZSddKXx8ICBpc0Zvcm1FcnJvcihmb3JtLmNvbnRyb2xzWydsYXRpdHVkZSddKX1cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiPlxyXG4gICAgICAgICAgPG5nYi1hbGVydCBkYXRhLXRlc3RpZD1cIm5ldy1sb2NhdGlvbi1sYXRpdHVkZS1pbnZhbGlkXCIgW2Rpc21pc3NpYmxlXT1cImZhbHNlXCIgdHlwZT1cImRhbmdlclwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwidmFsaWRhdG9yc1NlcnZpY2UuaXNDb250cm9sRXJyb3IoZm9ybS5jb250cm9sc1snbGF0aXR1ZGUnXSkgfHwgIGlzRm9ybUVycm9yKGZvcm0uY29udHJvbHNbJ2xhdGl0dWRlJ10pXCI+XHJcbiAgICAgICAgICAgIHt7dmFsaWRhdG9yc1NlcnZpY2UuZ2V0RXJyb3IoZm9ybS5jb250cm9sc1snbGF0aXR1ZGUnXSkgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgPC9uZ2ItYWxlcnQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cIm1iLTMgcm93XCI+XHJcbiAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+e3snTG9uZ2l0dWRlJyB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS05XCI+XHJcbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJsb25naXR1ZGVcIiBkYXRhLXRlc3RpZD1cIm5ldy1sb2NhdGlvbi1sb25naXR1ZGVcIiAobmdNb2RlbENoYW5nZSk9XCJvbkZvcm1DaGFuZ2UoKVwiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7J2lzLWludmFsaWQnIDogdmFsaWRhdG9yc1NlcnZpY2UuaXNDb250cm9sRXJyb3IoZm9ybS5jb250cm9sc1snbG9uZ2l0dWRlJ10pfHwgIGlzRm9ybUVycm9yKGZvcm0uY29udHJvbHNbJ2xvbmdpdHVkZSddKX1cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiPlxyXG4gICAgICAgICAgPG5nYi1hbGVydCBkYXRhLXRlc3RpZD1cIm5ldy1sb2NhdGlvbi1sb25naXR1ZGUtaW52YWxpZFwiIFtkaXNtaXNzaWJsZV09XCJmYWxzZVwiIHR5cGU9XCJkYW5nZXJcIlxyXG4gICAgICAgICAgICAqbmdJZj1cInZhbGlkYXRvcnNTZXJ2aWNlLmlzQ29udHJvbEVycm9yKGZvcm0uY29udHJvbHNbJ2xvbmdpdHVkZSddKSB8fCAgaXNGb3JtRXJyb3IoZm9ybS5jb250cm9sc1snbG9uZ2l0dWRlJ10pXCI+XHJcbiAgICAgICAgICAgIHt7dmFsaWRhdG9yc1NlcnZpY2UuZ2V0RXJyb3IoZm9ybS5jb250cm9sc1snbG9uZ2l0dWRlJ10pIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgIDwvbmdiLWFsZXJ0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJtYi0zIHJvd1wiPlxyXG4gICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPnt7J0FjY2VzcyBsZXZlbCcgfCB0cmFuc2xhdGV9fTwvbGFiZWw+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOVwiPlxyXG4gICAgICAgIDxzZWxlY3QgY2xhc3M9XCJkLWlubGluZS1ibG9jayBjdXN0b20tc2VsZWN0IHJvdW5kZWQtcGlsbFwiIGZvcm1Db250cm9sTmFtZT1cImxldmVsXCI+XHJcbiAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBsZXZlbCBvZiBsZXZlbHNcIiBbdmFsdWVdPVwibGV2ZWxcIj57e2xldmVsIHwgdHJhbnNsYXRlfX08L29wdGlvbj5cclxuICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwibWItMyByb3dcIj5cclxuICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTMgY29sLWZvcm0tbGFiZWxcIj57eydFbmVyZ3kgQ2xhc3MnIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cclxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cImNsYXNzRW5lcmd5Q29uc3VtcHRpb25cIlxyXG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJuZXctbG9jYXRpb24tY2xhc3NFbmVyZ3lDb25zdW1wdGlvblwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uRm9ybUNoYW5nZSgpXCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaXMtaW52YWxpZCcgOiB2YWxpZGF0b3JzU2VydmljZS5pc0NvbnRyb2xFcnJvcihmb3JtLmNvbnRyb2xzWydjbGFzc0VuZXJneUNvbnN1bXB0aW9uJ10pIHx8ICBpc0Zvcm1FcnJvcihmb3JtLmNvbnRyb2xzWydjbGFzc0VuZXJneUNvbnN1bXB0aW9uJ10pfVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCI+XHJcbiAgICAgICAgICA8bmdiLWFsZXJ0IGRhdGEtdGVzdGlkPVwibmV3LWxvY2F0aW9uLWNsYXNzRW5lcmd5Q29uc3VtcHRpb24taW52YWxpZFwiIFtkaXNtaXNzaWJsZV09XCJmYWxzZVwiIHR5cGU9XCJkYW5nZXJcIlxyXG4gICAgICAgICAgICAqbmdJZj1cInZhbGlkYXRvcnNTZXJ2aWNlLmlzQ29udHJvbEVycm9yKGZvcm0uY29udHJvbHNbJ2NsYXNzRW5lcmd5Q29uc3VtcHRpb24nXSkgfHwgIGlzRm9ybUVycm9yKGZvcm0uY29udHJvbHNbJ2NsYXNzRW5lcmd5Q29uc3VtcHRpb24nXSlcIj5cclxuICAgICAgICAgICAge3t2YWxpZGF0b3JzU2VydmljZS5nZXRFcnJvcihmb3JtLmNvbnRyb2xzWydjbGFzc0VuZXJneUNvbnN1bXB0aW9uJ10pIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgIDwvbmdiLWFsZXJ0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJtYi0zIHJvd1wiPlxyXG4gICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPnt7J0dyZWVuaG91c2UgZ2FzIGVtaXNzaW9uIENsYXNzJyB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS05XCI+XHJcbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJjbGFzc0dlc1wiIGRhdGEtdGVzdGlkPVwibmV3LWxvY2F0aW9uLWNsYXNzR2VzXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25Gb3JtQ2hhbmdlKClcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwieydpcy1pbnZhbGlkJyA6IHZhbGlkYXRvcnNTZXJ2aWNlLmlzQ29udHJvbEVycm9yKGZvcm0uY29udHJvbHNbJ2NsYXNzR2VzJ10pfHwgIGlzRm9ybUVycm9yKGZvcm0uY29udHJvbHNbJ2NsYXNzR2VzJ10pfVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCI+XHJcbiAgICAgICAgICA8bmdiLWFsZXJ0IGRhdGEtdGVzdGlkPVwibmV3LWxvY2F0aW9uLWNsYXNzR2VzLWludmFsaWRcIiBbZGlzbWlzc2libGVdPVwiZmFsc2VcIiB0eXBlPVwiZGFuZ2VyXCJcclxuICAgICAgICAgICAgKm5nSWY9XCJ2YWxpZGF0b3JzU2VydmljZS5pc0NvbnRyb2xFcnJvcihmb3JtLmNvbnRyb2xzWydjbGFzc0dlcyddKSB8fCAgaXNGb3JtRXJyb3IoZm9ybS5jb250cm9sc1snY2xhc3NHZXMnXSlcIj5cclxuICAgICAgICAgICAge3t2YWxpZGF0b3JzU2VydmljZS5nZXRFcnJvcihmb3JtLmNvbnRyb2xzWydjbGFzc0dlcyddKSB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICA8L25nYi1hbGVydD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwibWItMyByb3dcIj5cclxuICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTMgY29sLWZvcm0tbGFiZWxcIj57eydDb3ZlciBwaWN0dXJlJyB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS05XCI+XHJcbiAgICAgICAgPGltZyAjaW1hZ2VCYXNlUHJldmlldyAqbmdJZj1cImN1cnJlbnRJbWFnZVwiIGNsYXNzPVwiaW1hZ2UtcHJldmlld1wiIFtzcmNdPVwiY3VycmVudEltYWdlXCI+XHJcbiAgICAgICAgPGxhYmVsICNpbWFnZUlucHV0Q29udGFpbmVyIGZvcj1cImltYWdlXCJcclxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1sYWJlbC1maWxlIGJ0bi1vdXRsaW5lLXByaW1hcnkgcm91bmRlZC1waWxsIGltYWdlSW5wdXRDb250YWluZXJcIj5cclxuICAgICAgICAgIDxpbnB1dCAjaW1hZ2VJbnB1dCB0eXBlPVwiZmlsZVwiIGlkPVwiaW1hZ2VcIiAoY2hhbmdlKT1cImhhbmRsZUltYWdlSW5wdXQoJGV2ZW50LnRhcmdldClcIiAvPlxyXG4gICAgICAgICAge3sgaW1hZ2VJbnB1dFRleHQgfCB0cmFuc2xhdGV9fTwvbGFiZWw+XHJcbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImN1cnJlbnRJbWFnZSAmJiAhaW1hZ2VUb1VwbG9hZFwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgcm91bmRlZC1waWxsXCJcclxuICAgICAgICAgIChjbGljayk9XCJpbWFnZVRvQmVEZWxldGVkPXRydWU7Y2xlYXJJbWFnZUZpbGUoKVwiPnt7J0RlbGV0ZSBwaWN0dXJlJyB8IHRyYW5zbGF0ZSB9fTwvYnV0dG9uPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbWFnZS1uYW1lXCIgKm5nSWY9XCJpbWFnZVRvVXBsb2FkXCI+XHJcbiAgICAgICAgICA8cD57eyBpbWFnZVRvVXBsb2FkLm5hbWV9fTwvcD5cclxuICAgICAgICAgIDxkaXYgKGNsaWNrKT1cImNsZWFySW1hZ2VGaWxlKClcIiBbc3R5bGUuY3Vyc29yXT1cIidwb2ludGVyJ1wiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb25pZnlcIiBkYXRhLWljb249XCJtZGk6dHJhc2gtY2FuLW91dGxpbmVcIj48L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWItMyByb3dcIiAqbmdJZj1cIiFsb2NhdGlvblwiPlxyXG4gICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPnt7J0NyZWF0ZSBtaXNzaW9uIGZvciB0aGlzIHNwYWNlJyB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0zXCI+XHJcbiAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFsobmdNb2RlbCldPVwiYWRkTWlzc2lvbkZvck5ld1NwYWNlXCIgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxidXR0b24gZGF0YS10ZXN0aWQ9XCJuZXctbG9jYXRpb24tc3VibWl0LWJ0blwiIFtuZ0NsYXNzXT1cInsnaXMtaW52YWxpZCcgOiBlcnJvckZvcm0gfVwiIHR5cGU9XCJzdWJtaXRcIlxyXG4gICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbCBtZS0zXCI+e3snU2F2ZScgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG5cclxuICAgIDxidXR0b24gZGF0YS10ZXN0aWQ9XCJuZXctbG9jYXRpb24tY2xvc2UtYnRuXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvbkNhbmNlbCgpXCJcclxuICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGxcIj57eydDYW5jZWwnIHxcclxuICAgICAgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiICpuZ0lmPVwiZXJyb3JGb3JtXCI+XHJcbiAgICAgIDxuZ2ItYWxlcnQgZGF0YS10ZXN0aWQ9XCJuZXctbG9jYXRpb24tZm9ybS1pbnZhbGlkXCIgW2Rpc21pc3NpYmxlXT1cImZhbHNlXCIgdHlwZT1cImRhbmdlclwiPlxyXG4gICAgICAgIHt7J2Vycm9yRm9ybS5pbmZvQnRuJyB8dHJhbnNsYXRlfX1cclxuXHJcbiAgICAgIDwvbmdiLWFsZXJ0PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9mb3JtPlxyXG48L2Rpdj4iXX0=
237
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1sb2NhdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tbG9jYXRpb25zL3NyYy9saWIvY29tcG9uZW50cy9mb3JtLWxvY2F0aW9uL2Zvcm0tbG9jYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWxvY2F0aW9ucy9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS1sb2NhdGlvbi9mb3JtLWxvY2F0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RHLE9BQU8sRUFBMEIsVUFBVSxFQUFtQixNQUFNLGdCQUFnQixDQUFDO0FBQ3JGLE9BQU8sRUFBUyxXQUFXLEVBQWtFLFdBQVcsRUFBRSxjQUFjLEVBQVMsWUFBWSxFQUFFLHlCQUF5QixFQUFnQixZQUFZLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNoUCxPQUFPLEVBQXFCLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7Ozs7OztBQU92SCxNQUFNLE9BQU8scUJBQXFCO0lBa0M5QixZQUNZLFlBQTBCLEVBQzFCLGVBQWdDLEVBQ2hDLFdBQTRCLEVBQzVCLEVBQWUsRUFDZixjQUE4QixFQUM5QixZQUEwQixFQUMzQixpQkFBb0M7UUFObkMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLGdCQUFXLEdBQVgsV0FBVyxDQUFpQjtRQUM1QixPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQ2YsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGlCQUFZLEdBQVosWUFBWSxDQUFj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QUFyQixxQkFBcUIsNGJDVmxDLDQyUkErSk07MkZEckpPLHFCQUFxQjtrQkFMakMsU0FBUzsrQkFDSSxtQkFBbUI7aVJBUzdCLG1CQUFtQjtzQkFEbEIsU0FBUzt1QkFBQyxxQkFBcUI7Z0JBSWhDLFVBQVU7c0JBRFQsU0FBUzt1QkFBQyxZQUFZO2dCQUl2QixnQkFBZ0I7c0JBRGYsU0FBUzt1QkFBQyxrQkFBa0I7Z0JBSTdCLFFBQVE7c0JBRFAsS0FBSztnQkFtQkksUUFBUTtzQkFBakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3JtQnVpbGRlciwgVmFsaWRhdG9ycywgQWJzdHJhY3RDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3BhY2UsIExldmVsU3RhdHVzLCBTcGFjZVNlcnZpY2UsIFByb3BlcnR5U2VydmljZSwgQmFzZVVzZXJTZXJ2aWNlLCBNaXNzaW9uU2VydmljZSwgZW51bVRvQXJyYXksIHVwbG9hZEZpbGVUb1MzLCBMYXllciwgUHJvcGVydHlUeXBlLCBnZXRTaWduZWRJbWFnZVVybEZvclNwYWNlLCBMYXllclNlcnZpY2UsIGRlbGV0ZUZyb21TMyB9IGZyb20gJ0BzbWFydGVycGxhbi9uZ3gtc21hcnRlcnBsYW4tY29yZSc7XG5pbXBvcnQgeyBWYWxpZGF0b3JzU2VydmljZSwgdGV4dFZhbGlkYXRvciwgbm9FbXB0eVZhbGlkYXRvciwgZmxvYXRWYWxpZGF0b3IgfSBmcm9tIFwiQHNtYXJ0ZXJwbGFuL25neC1zbWFydGVycGxhbi1jb3JlXCI7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbGliLWZvcm0tbG9jYXRpb24nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9mb3JtLWxvY2F0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9mb3JtLWxvY2F0aW9uLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgRm9ybUxvY2F0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICAgIGZvcm06IEZvcm1Hcm91cDtcblxuICAgIEBWaWV3Q2hpbGQoXCJpbWFnZUlucHV0Q29udGFpbmVyXCIpXG4gICAgaW1hZ2VJbnB1dENvbnRhaW5lcjogRWxlbWVudFJlZjtcblxuICAgIEBWaWV3Q2hpbGQoXCJpbWFnZUlucHV0XCIpXG4gICAgaW1hZ2VJbnB1dDogRWxlbWVudFJlZjtcblxuICAgIEBWaWV3Q2hpbGQoXCJpbWFnZUJhc2VQcmV2aWV3XCIpXG4gICAgaW1hZ2VCYXNlUHJldmlldzogRWxlbWVudFJlZjtcblxuICAgIEBJbnB1dCgpXG4gICAgbG9jYXRpb246IFNwYWNlO1xuXG4gICAgaW1hZ2VUb1VwbG9hZDogYW55O1xuXG4gICAgaXNTdWJtaXR0ZWQgPSBmYWxzZTtcblxuICAgIGxldmVsczogQXJyYXk8TGV2ZWxTdGF0dXM+O1xuXG4gICAgYWRkTWlzc2lvbkZvck5ld1NwYWNlID0gdHJ1ZTtcblxuICAgIGltYWdlSW5wdXRUZXh0OiBzdHJpbmc7XG5cbiAgICBjdXJyZW50SW1hZ2U6IHN0cmluZztcblxuICAgIGltYWdlVG9CZURlbGV0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGVycm9yRm9ybTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQE91dHB1dCgpIG9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxTcGFjZSB8IG51bGw+KCk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBzcGFjZVNlcnZpY2U6IFNwYWNlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBwcm9wZXJ0eVNlcnZpY2U6IFByb3BlcnR5U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB1c2VyU2VydmljZTogQmFzZVVzZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcbiAgICAgICAgcHJpdmF0ZSBtaXNzaW9uU2VydmljZTogTWlzc2lvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbGF5ZXJTZXJ2aWNlOiBMYXllclNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyB2YWxpZGF0b3JzU2VydmljZTogVmFsaWRhdG9yc1NlcnZpY2VcbiAgICApIHtcbiAgICAgICAgdGhpcy5sZXZlbHMgPSBlbnVtVG9BcnJheShMZXZlbFN0YXR1cyk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmxvY2F0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmluaXRFZGl0Rm9ybSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pbml0Rm9ybSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaGFuZGxlSW5wdXRJbWFnZVRleHQoKTtcbiAgICB9XG5cbiAgICBpbml0Rm9ybSgpIHtcbiAgICAgICAgdGhpcy5mb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAgICAgICBuYW1lOiBbXCJcIiwgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDI1NSksIHRleHRWYWxpZGF0b3IoKSwgbm9FbXB0eVZhbGlkYXRvcigpXV0sXG4gICAgICAgICAgICBhZGRyZXNzZXM6IFtcIlwiLCBbVmFsaWRhdG9ycy5tYXhMZW5ndGgoMjU1KSwgdGV4dFZhbGlkYXRvcigpLCBub0VtcHR5VmFsaWRhdG9yKCldXSxcbiAgICAgICAgICAgIGxhdGl0dWRlOiBbbnVsbCwgW1ZhbGlkYXRvcnMubWF4TGVuZ3RoKDI1NSksIG5vRW1wdHlWYWxpZGF0b3IoKSwgZmxvYXRWYWxpZGF0b3IoKV1dLFxuICAgICAgICAgICAgbG9uZ2l0dWRlOiBbbnVsbCwgW1ZhbGlkYXRvcnMubWF4TGVuZ3RoKDI1NSksIG5vRW1wdHlWYWxpZGF0b3IoKSwgZmxvYXRWYWxpZGF0b3IoKV1dLFxuICAgICAgICAgICAgbGV2ZWw6IExldmVsU3RhdHVzLkxPVyxcbiAgICAgICAgICAgIGNsYXNzR2VzOiBbXCJcIiwgW1ZhbGlkYXRvcnMubWF4TGVuZ3RoKDI1NSksIHRleHRWYWxpZGF0b3IoKSwgbm9FbXB0eVZhbGlkYXRvcigpXV0sXG4gICAgICAgICAgICBjbGFzc0VuZXJneUNvbnN1bXB0aW9uOiBbXCJcIiwgW1ZhbGlkYXRvcnMubWF4TGVuZ3RoKDI1NSksIHRleHRWYWxpZGF0b3IoKSwgbm9FbXB0eVZhbGlkYXRvcigpXV0sXG4gICAgICAgICAgICBjb25zdHJ1Y3Rpb25ZZWFyOiBbXCJcIiwgW1ZhbGlkYXRvcnMubWF4TGVuZ3RoKDI1NSksIHRleHRWYWxpZGF0b3IoKSwgbm9FbXB0eVZhbGlkYXRvcigpXV0sXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGluaXRFZGl0Rm9ybSgpIHtcbiAgICAgICAgdGhpcy5mb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAgICAgICBpZDogdGhpcy5sb2NhdGlvbi5pZCxcbiAgICAgICAgICAgIG5hbWU6IFt0aGlzLmxvY2F0aW9uLm5hbWUsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1heExlbmd0aCgyNTUpLCB0ZXh0VmFsaWRhdG9yKCksIG5vRW1wdHlWYWxpZGF0b3IoKV1dLFxuICAgICAgICAgICAgYWRkcmVzc2VzOiBbdGhpcy5sb2NhdGlvbi5hZGRyZXNzZXMsIFtWYWxpZGF0b3JzLm1heExlbmd0aCgyNTUpLCB0ZXh0VmFsaWRhdG9yKCksIG5vRW1wdHlWYWxpZGF0b3IoKV1dLFxuICAgICAgICAgICAgbGF0aXR1ZGU6IFt0aGlzLmxvY2F0aW9uLmxhdGl0dWRlLCBbVmFsaWRhdG9ycy5tYXhMZW5ndGgoMjU1KSwgZmxvYXRWYWxpZGF0b3IoKV1dLFxuICAgICAgICAgICAgbG9uZ2l0dWRlOiBbdGhpcy5sb2NhdGlvbi5sb25naXR1ZGUsIFtWYWxpZGF0b3JzLm1heExlbmd0aCgyNTUpLCBmbG9hdFZhbGlkYXRvcigpXV0sXG4gICAgICAgICAgICBsZXZlbDogdGhpcy5sb2NhdGlvbi5sZXZlbCxcbiAgICAgICAgICAgIGNsYXNzR2VzOiBbdGhpcy5sb2NhdGlvbi5jbGFzc0dlcywgW1ZhbGlkYXRvcnMubWF4TGVuZ3RoKDI1NSksIHRleHRWYWxpZGF0b3IoKSwgbm9FbXB0eVZhbGlkYXRvcigpXV0sXG4gICAgICAgICAgICBjbGFzc0VuZXJneUNvbnN1bXB0aW9uOiBbdGhpcy5sb2NhdGlvbi5jbGFzc0VuZXJneUNvbnN1bXB0aW9uLCBbVmFsaWRhdG9ycy5tYXhMZW5ndGgoMjU1KSwgdGV4dFZhbGlkYXRvcigpLCBub0VtcHR5VmFsaWRhdG9yKCldXSxcbiAgICAgICAgICAgIGNvbnN0cnVjdGlvblllYXI6IFt0aGlzLmxvY2F0aW9uLmNvbnN0cnVjdGlvblllYXIsIFtWYWxpZGF0b3JzLm1heExlbmd0aCgyNTUpLCB0ZXh0VmFsaWRhdG9yKCksIG5vRW1wdHlWYWxpZGF0b3IoKV1dLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBoYW5kbGVJbWFnZUlucHV0KHRhcmdldDogRXZlbnRUYXJnZXQpIHtcbiAgICAgICAgdGhpcy5pbWFnZVRvVXBsb2FkID0gKHRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5maWxlc1swXTtcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VUb1VwbG9hZCkge1xuICAgICAgICAgICAgdGhpcy5pbWFnZUlucHV0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgICAgIHJlYWRlci5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50SW1hZ2UgPSByZWFkZXIucmVzdWx0IGFzIHN0cmluZztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwodGhpcy5pbWFnZVRvVXBsb2FkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIHVwbG9hZEltYWdlKHNwYWNlSUQ6IHN0cmluZykge1xuICAgICAgICBpZiAodGhpcy5pbWFnZVRvVXBsb2FkKSB7XG4gICAgICAgICAgICB1cGxvYWRGaWxlVG9TMyhcImxvY2F0aW9ucy9cIiwgdGhpcy5pbWFnZVRvVXBsb2FkLCBzcGFjZUlEKS50aGVuKFxuICAgICAgICAgICAgICAgIGFzeW5jICh1cmwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVybCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zcGFjZVNlcnZpY2UudXBkYXRlU3BhY2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBzcGFjZUlELFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubmV4ZXM6IHVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pbWFnZVRvQmVEZWxldGVkKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNwYWNlU2VydmljZS51cGRhdGVTcGFjZSh7XG4gICAgICAgICAgICAgICAgaWQ6IHNwYWNlSUQsXG4gICAgICAgICAgICAgICAgYW5uZXhlczogbnVsbCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXdhaXQgZGVsZXRlRnJvbVMzKHRoaXMubG9jYXRpb24uYW5uZXhlcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGVhckltYWdlRmlsZSgpIHtcbiAgICAgICAgdGhpcy5pbWFnZVRvVXBsb2FkID0gbnVsbDtcbiAgICAgICAgdGhpcy5jdXJyZW50SW1hZ2UgPSBudWxsO1xuICAgICAgICB0aGlzLmltYWdlSW5wdXRDb250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gXCJmbGV4XCI7XG4gICAgICAgIHRoaXMuaW1hZ2VJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gXCJcIjtcbiAgICAgICAgdGhpcy5pbWFnZUlucHV0VGV4dCA9IFwiQWRkIHBpY3R1cmVcIjtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRMYXllckJ5TmFtZShuYW1lOiBzdHJpbmcpOiBQcm9taXNlPExheWVyPiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRPcmdJZCA9IHRoaXMudXNlclNlcnZpY2UuY3VycmVudE9yZ2FuaXNhdGlvbigpLmlkO1xuICAgICAgICBjb25zdCBsYXllcnMgPSBhd2FpdCB0aGlzLmxheWVyU2VydmljZS5nZXRMYXllckJ5TmFtZUZvck9yZ2FuaXNhdGlvbihcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBjdXJyZW50T3JnSWQsXG4gICAgICAgICk7XG4gICAgICAgIGlmIChsYXllcnMpIHtcbiAgICAgICAgICAgIHJldHVybiBsYXllcnNbMF07XG4gICAgICAgIH1cbiAgICAgICAgLy8gY3JlYXRlIHRoZW5cbiAgICAgICAgcmV0dXJuIHRoaXMubGF5ZXJTZXJ2aWNlLmNyZWF0ZUxheWVyRm9yT3JnYW5pc2F0aW9uKG5hbWUsIGN1cnJlbnRPcmdJZCk7XG4gICAgfVxuXG4gICAgYXN5bmMgb25TdWJtaXQoKSB7XG4gICAgICAgIHRoaXMuaXNTdWJtaXR0ZWQgPSB0cnVlO1xuICAgICAgICBpZiAoIXRoaXMuZm9ybS52YWxpZCkge1xuICAgICAgICAgICAgdGhpcy5lcnJvckZvcm0gPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7IFxuICAgICAgICAgICAgdGhpcy5lcnJvckZvcm0gPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBzcGFjZTtcbiAgICAgICAgICAgIGlmICh0aGlzLmxvY2F0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VDb21tYVRvRG90KCk7XG4gICAgICAgICAgICAgICAgc3BhY2UgPSBhd2FpdCB0aGlzLnNwYWNlU2VydmljZS51cGRhdGVTcGFjZSh0aGlzLmZvcm0udmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChzcGFjZSkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnVwbG9hZEltYWdlKHNwYWNlLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2NhdGlvbiA9IHNwYWNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQoc3BhY2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VDb21tYVRvRG90KCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3BhY2VJbnB1dCA9IHRoaXMuZm9ybS52YWx1ZSBhcyBTcGFjZTtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50T3JnSUQgPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRPcmdhbmlzYXRpb24oKS5pZDtcbiAgICAgICAgICAgICAgICBzcGFjZUlucHV0Lm9yZ2FuaXNhdGlvbklEID0gY3VycmVudE9yZ0lEO1xuICAgICAgICAgICAgICAgIGxldCBsYXllciA9IGF3YWl0IHRoaXMuZ2V0TGF5ZXJCeU5hbWUoXCJCVUlMRElOR1wiKTtcbiAgICAgICAgICAgICAgICBpZiAoIWxheWVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGxheWVyID0gYXdhaXQgdGhpcy5sYXllclNlcnZpY2UuY3JlYXRlTGF5ZXJGb3JPcmdhbmlzYXRpb24oXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkJVSUxESU5HXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50T3JnSUQsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNwYWNlID0gYXdhaXQgdGhpcy5zcGFjZVNlcnZpY2UuY3JlYXRlU3BhY2UoXG4gICAgICAgICAgICAgICAgICAgIHNwYWNlSW5wdXQsXG4gICAgICAgICAgICAgICAgICAgIGxheWVyLFxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBtaXNzaW9ucyA9IHRoaXMudXNlclNlcnZpY2UuZ2V0TWFuYWdlck1pc3Npb25zKCk7XG4gICAgICAgICAgICAgICAgaWYgKHNwYWNlICYmIG1pc3Npb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhhbXBsZU1pc3Npb24gPSBtaXNzaW9uc1swXTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy51cGxvYWRJbWFnZShzcGFjZS5pZCk7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnByb3BlcnR5U2VydmljZS5jcmVhdGVQcm9wZXJ0eSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogUHJvcGVydHlUeXBlLlBST1BFUlRZLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlSUQ6IHNwYWNlLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZ2FuaXNhdGlvbklEOiBjdXJyZW50T3JnSUQsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJBUEkgU2VydmljZSBkb2VzIG5vdCBoYXZlIFByb3BlcnR5IHJlcXVlc3RzXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gYWRkIGRpcmVjdGx5IGEgbWlzc2lvbiBmb3IgdGhpcyBzcGFjZVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5hZGRNaXNzaW9uRm9yTmV3U3BhY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubWlzc2lvblNlcnZpY2UuY3JlYXRlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFjZUlEOiBzcGFjZS5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VySUQ6IGV4YW1wbGVNaXNzaW9uLnVzZXJJRCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlOiBleGFtcGxlTWlzc2lvbi5yb2xlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsOiBleGFtcGxlTWlzc2lvbi5sZXZlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmdhbmlzYXRpb25JRDogZXhhbXBsZU1pc3Npb24ub3JnYW5pc2F0aW9uSUQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXJlZE9yZ2FuaXNhdGlvbklEOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGFtcGxlTWlzc2lvbi5vcmdhbmlzYXRpb25JRCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2UuZW1pdChzcGFjZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZS5lbWl0KG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZS5lbWl0KG51bGwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25DYW5jZWwoKSB7XG4gICAgICAgIHRoaXMuZm9ybS5yZXNldCgpO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQobnVsbCk7XG4gICAgfVxuXG4gICAgZ2V0IG5hbWUoKTogQWJzdHJhY3RDb250cm9sIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoXCJuYW1lXCIpO1xuICAgIH1cblxuICAgIGNoYW5nZUNvbW1hVG9Eb3QoKSB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRTcGFjZSA9IHRoaXMuZm9ybS52YWx1ZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdXBkYXRlZFNwYWNlLmxhdGl0dWRlICYmXG4gICAgICAgICAgICB1cGRhdGVkU3BhY2UubGF0aXR1ZGUudG9TdHJpbmcoKS5pbmNsdWRlcyhcIixcIilcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB1cGRhdGVkU3BhY2UubGF0aXR1ZGUgPSB1cGRhdGVkU3BhY2UubGF0aXR1ZGVcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKFwiLFwiLCBcIi5cIik7XG4gICAgICAgICAgICBOdW1iZXIucGFyc2VGbG9hdCh1cGRhdGVkU3BhY2UubGF0aXR1ZGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHVwZGF0ZWRTcGFjZS5sb25naXR1ZGUgJiZcbiAgICAgICAgICAgIHVwZGF0ZWRTcGFjZS5sb25naXR1ZGUudG9TdHJpbmcoKS5pbmNsdWRlcyhcIixcIilcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB1cGRhdGVkU3BhY2UubG9uZ2l0dWRlID0gdXBkYXRlZFNwYWNlLmxvbmdpdHVkZVxuICAgICAgICAgICAgICAgIC50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoXCIsXCIsIFwiLlwiKTtcbiAgICAgICAgICAgIE51bWJlci5wYXJzZUZsb2F0KHVwZGF0ZWRTcGFjZS5sb25naXR1ZGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlSW5wdXRJbWFnZVRleHQoKSB7XG4gICAgICAgIGlmICh0aGlzLmxvY2F0aW9uICYmIHRoaXMubG9jYXRpb24uYW5uZXhlcykge1xuICAgICAgICAgICAgdGhpcy5pbWFnZUlucHV0VGV4dCA9IFwiQ2hhbmdlIHBpY3R1cmVcIjtcbiAgICAgICAgICAgIGdldFNpZ25lZEltYWdlVXJsRm9yU3BhY2UodGhpcy5sb2NhdGlvbikudGhlbigodXJsKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHVybCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRJbWFnZSA9IHVybDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VJbnB1dFRleHQgPSBcIkFkZCBwaWN0dXJlXCI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBcbiAgICBpc0Zvcm1FcnJvcihjb250cm9sKSB7XG4gICAgICAgIHJldHVybiBjb250cm9sICYmIGNvbnRyb2wuaW52YWxpZCAmJiB0aGlzLmVycm9yRm9ybTtcbiAgICB9XG5cbiAgICBcbiAgICBvbkZvcm1DaGFuZ2UoKXtcbiAgICAgICAgaWYgKHRoaXMuZXJyb3JGb3JtICYmIHRoaXMuZm9ybS52YWxpZCkge1xuICAgICAgICAgICAgdGhpcy5lcnJvckZvcm0gPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNvbC1tZC02IGZvcm0tbmV3LWxvY1wiICpuZ0lmPVwiZm9ybVwiPlxuICA8Zm9ybSAobmdTdWJtaXQpPVwib25TdWJtaXQoKVwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxuXG4gICAgPGRpdiBjbGFzcz1cIm1iLTMgcm93XCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPnt7J05hbWUnIHwgdHJhbnNsYXRlfX0gKjwvbGFiZWw+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBkYXRhLXRlc3RpZD1cIm5ldy1sb2NhdGlvbi1uYW1lXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25Gb3JtQ2hhbmdlKClcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaXMtaW52YWxpZCcgOiB2YWxpZGF0b3JzU2VydmljZS5pc0NvbnRyb2xFcnJvcihmb3JtLmNvbnRyb2xzWyduYW1lJ10pfHwgIGlzRm9ybUVycm9yKGZvcm0uY29udHJvbHNbJ25hbWUnXSl9XCJcbiAgICAgICAgICByZXF1aXJlZCBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCI+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIj5cbiAgICAgICAgICA8bmdiLWFsZXJ0IGRhdGEtdGVzdGlkPVwibmV3LWxvY2F0aW9uLW5hbWUtaW52YWxpZFwiIFtkaXNtaXNzaWJsZV09XCJmYWxzZVwiIHR5cGU9XCJkYW5nZXJcIiAqbmdJZj1cInZhbGlkYXRvcnNTZXJ2aWNlLmlzQ29udHJvbEVycm9yKGZvcm0uY29udHJvbHNbJ25hbWUnXSkgXG4gICAgICAgICAgfHwgIGlzRm9ybUVycm9yKGZvcm0uY29udHJvbHNbJ25hbWUnXSlcIj5cbiAgICAgICAgICAgIHt7dmFsaWRhdG9yc1NlcnZpY2UuZ2V0RXJyb3IoZm9ybS5jb250cm9sc1snbmFtZSddKSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgPC9uZ2ItYWxlcnQ+XG5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibWItMyByb3dcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+e3snQWRkcmVzcycgfCB0cmFuc2xhdGV9fTwvbGFiZWw+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJhZGRyZXNzZXNcIiBkYXRhLXRlc3RpZD1cIm5ldy1sb2NhdGlvbi1hZGRyZXNzXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25Gb3JtQ2hhbmdlKClcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaXMtaW52YWxpZCcgOiB2YWxpZGF0b3JzU2VydmljZS5pc0NvbnRyb2xFcnJvcihmb3JtLmNvbnRyb2xzWydhZGRyZXNzZXMnXSkgfHwgIGlzRm9ybUVycm9yKGZvcm0uY29udHJvbHNbJ2FkZHJlc3NlcyddKX1cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIj5cbiAgICAgICAgICA8c3BhbiBkYXRhLXRlc3RpZD1cIlwiIFt0cmFuc2xhdGVdPVwidmFsaWRhdG9yc1NlcnZpY2UuZ2V0RXJyb3IoZm9ybS5jb250cm9sc1snYWRkcmVzc2VzJ10pXCJcbiAgICAgICAgICAgICpuZ0lmPVwiIHZhbGlkYXRvcnNTZXJ2aWNlLmlzQ29udHJvbEVycm9yKGZvcm0uY29udHJvbHNbJ2FkZHJlc3NlcyddKVwiPjwvc3Bhbj5cblxuICAgICAgICAgIDxuZ2ItYWxlcnQgZGF0YS10ZXN0aWQ9XCJuZXctbG9jYXRpb24tYWRkcmVzcy1pbnZhbGlkXCIgW2Rpc21pc3NpYmxlXT1cImZhbHNlXCIgdHlwZT1cImRhbmdlclwiXG4gICAgICAgICAgICAqbmdJZj1cInZhbGlkYXRvcnNTZXJ2aWNlLmlzQ29udHJvbEVycm9yKGZvcm0uY29udHJvbHNbJ2FkZHJlc3NlcyddKSBcIj5cblxuICAgICAgICAgICAge3t2YWxpZGF0b3JzU2VydmljZS5nZXRFcnJvcihmb3JtLmNvbnRyb2xzWydhZGRyZXNzZXMnXSkgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgIDwvbmdiLWFsZXJ0PlxuXG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwibWItMyByb3dcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+e3snQ29uc3RydWN0aW9uIHllYXInIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS05XCI+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiY29uc3RydWN0aW9uWWVhclwiXG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJuZXctbG9jYXRpb24tY29uc3RydWN0aW9uWWVhclwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uRm9ybUNoYW5nZSgpXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7J2lzLWludmFsaWQnIDogdmFsaWRhdG9yc1NlcnZpY2UuaXNDb250cm9sRXJyb3IoZm9ybS5jb250cm9sc1snY29uc3RydWN0aW9uWWVhciddKSB8fCBpc0Zvcm1FcnJvcihmb3JtLmNvbnRyb2xzWydjb25zdHJ1Y3Rpb25ZZWFyJ10pfVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiPlxuICAgICAgICAgIDxuZ2ItYWxlcnQgZGF0YS10ZXN0aWQ9XCJuZXctbG9jYXRpb24tY29uc3RydWN0aW9uWWVhci1pbnZhbGlkXCIgW2Rpc21pc3NpYmxlXT1cImZhbHNlXCIgdHlwZT1cImRhbmdlclwiXG4gICAgICAgICAgICAqbmdJZj1cInZhbGlkYXRvcnNTZXJ2aWNlLmlzQ29udHJvbEVycm9yKGZvcm0uY29udHJvbHNbJ2NvbnN0cnVjdGlvblllYXInXSkgfHwgIGlzRm9ybUVycm9yKGZvcm0uY29udHJvbHNbJ2NvbnN0cnVjdGlvblllYXInXSlcIj5cbiAgICAgICAgICAgIHt7dmFsaWRhdG9yc1NlcnZpY2UuZ2V0RXJyb3IoZm9ybS5jb250cm9sc1snY29uc3RydWN0aW9uWWVhciddKSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgPC9uZ2ItYWxlcnQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwibWItMyByb3dcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+e3snTGF0aXR1ZGUnIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS05XCI+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwibGF0aXR1ZGVcIiBkYXRhLXRlc3RpZD1cIm5ldy1sb2NhdGlvbi1sYXRpdHVkZVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uRm9ybUNoYW5nZSgpXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7J2lzLWludmFsaWQnIDogdmFsaWRhdG9yc1NlcnZpY2UuaXNDb250cm9sRXJyb3IoZm9ybS5jb250cm9sc1snbGF0aXR1ZGUnXSl8fCAgaXNGb3JtRXJyb3IoZm9ybS5jb250cm9sc1snbGF0aXR1ZGUnXSl9XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCI+XG4gICAgICAgICAgPG5nYi1hbGVydCBkYXRhLXRlc3RpZD1cIm5ldy1sb2NhdGlvbi1sYXRpdHVkZS1pbnZhbGlkXCIgW2Rpc21pc3NpYmxlXT1cImZhbHNlXCIgdHlwZT1cImRhbmdlclwiXG4gICAgICAgICAgICAqbmdJZj1cInZhbGlkYXRvcnNTZXJ2aWNlLmlzQ29udHJvbEVycm9yKGZvcm0uY29udHJvbHNbJ2xhdGl0dWRlJ10pIHx8ICBpc0Zvcm1FcnJvcihmb3JtLmNvbnRyb2xzWydsYXRpdHVkZSddKVwiPlxuICAgICAgICAgICAge3t2YWxpZGF0b3JzU2VydmljZS5nZXRFcnJvcihmb3JtLmNvbnRyb2xzWydsYXRpdHVkZSddKSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgPC9uZ2ItYWxlcnQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwibWItMyByb3dcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+e3snTG9uZ2l0dWRlJyB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOVwiPlxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cImxvbmdpdHVkZVwiIGRhdGEtdGVzdGlkPVwibmV3LWxvY2F0aW9uLWxvbmdpdHVkZVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uRm9ybUNoYW5nZSgpXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7J2lzLWludmFsaWQnIDogdmFsaWRhdG9yc1NlcnZpY2UuaXNDb250cm9sRXJyb3IoZm9ybS5jb250cm9sc1snbG9uZ2l0dWRlJ10pfHwgIGlzRm9ybUVycm9yKGZvcm0uY29udHJvbHNbJ2xvbmdpdHVkZSddKX1cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIj5cbiAgICAgICAgICA8bmdiLWFsZXJ0IGRhdGEtdGVzdGlkPVwibmV3LWxvY2F0aW9uLWxvbmdpdHVkZS1pbnZhbGlkXCIgW2Rpc21pc3NpYmxlXT1cImZhbHNlXCIgdHlwZT1cImRhbmdlclwiXG4gICAgICAgICAgICAqbmdJZj1cInZhbGlkYXRvcnNTZXJ2aWNlLmlzQ29udHJvbEVycm9yKGZvcm0uY29udHJvbHNbJ2xvbmdpdHVkZSddKSB8fCAgaXNGb3JtRXJyb3IoZm9ybS5jb250cm9sc1snbG9uZ2l0dWRlJ10pXCI+XG4gICAgICAgICAgICB7e3ZhbGlkYXRvcnNTZXJ2aWNlLmdldEVycm9yKGZvcm0uY29udHJvbHNbJ2xvbmdpdHVkZSddKSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgPC9uZ2ItYWxlcnQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwibWItMyByb3dcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+e3snQWNjZXNzIGxldmVsJyB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOVwiPlxuICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZC1pbmxpbmUtYmxvY2sgY3VzdG9tLXNlbGVjdCByb3VuZGVkLXBpbGxcIiBmb3JtQ29udHJvbE5hbWU9XCJsZXZlbFwiPlxuICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGxldmVsIG9mIGxldmVsc1wiIFt2YWx1ZV09XCJsZXZlbFwiPnt7bGV2ZWwgfCB0cmFuc2xhdGV9fTwvb3B0aW9uPlxuICAgICAgICA8L3NlbGVjdD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cIm1iLTMgcm93XCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPnt7J0VuZXJneSBDbGFzcycgfCB0cmFuc2xhdGV9fTwvbGFiZWw+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJjbGFzc0VuZXJneUNvbnN1bXB0aW9uXCJcbiAgICAgICAgICBkYXRhLXRlc3RpZD1cIm5ldy1sb2NhdGlvbi1jbGFzc0VuZXJneUNvbnN1bXB0aW9uXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25Gb3JtQ2hhbmdlKClcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaXMtaW52YWxpZCcgOiB2YWxpZGF0b3JzU2VydmljZS5pc0NvbnRyb2xFcnJvcihmb3JtLmNvbnRyb2xzWydjbGFzc0VuZXJneUNvbnN1bXB0aW9uJ10pIHx8ICBpc0Zvcm1FcnJvcihmb3JtLmNvbnRyb2xzWydjbGFzc0VuZXJneUNvbnN1bXB0aW9uJ10pfVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiPlxuICAgICAgICAgIDxuZ2ItYWxlcnQgZGF0YS10ZXN0aWQ9XCJuZXctbG9jYXRpb24tY2xhc3NFbmVyZ3lDb25zdW1wdGlvbi1pbnZhbGlkXCIgW2Rpc21pc3NpYmxlXT1cImZhbHNlXCIgdHlwZT1cImRhbmdlclwiXG4gICAgICAgICAgICAqbmdJZj1cInZhbGlkYXRvcnNTZXJ2aWNlLmlzQ29udHJvbEVycm9yKGZvcm0uY29udHJvbHNbJ2NsYXNzRW5lcmd5Q29uc3VtcHRpb24nXSkgfHwgIGlzRm9ybUVycm9yKGZvcm0uY29udHJvbHNbJ2NsYXNzRW5lcmd5Q29uc3VtcHRpb24nXSlcIj5cbiAgICAgICAgICAgIHt7dmFsaWRhdG9yc1NlcnZpY2UuZ2V0RXJyb3IoZm9ybS5jb250cm9sc1snY2xhc3NFbmVyZ3lDb25zdW1wdGlvbiddKSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgPC9uZ2ItYWxlcnQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwibWItMyByb3dcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+e3snR3JlZW5ob3VzZSBnYXMgZW1pc3Npb24gQ2xhc3MnIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS05XCI+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiY2xhc3NHZXNcIiBkYXRhLXRlc3RpZD1cIm5ldy1sb2NhdGlvbi1jbGFzc0dlc1wiIChuZ01vZGVsQ2hhbmdlKT1cIm9uRm9ybUNoYW5nZSgpXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7J2lzLWludmFsaWQnIDogdmFsaWRhdG9yc1NlcnZpY2UuaXNDb250cm9sRXJyb3IoZm9ybS5jb250cm9sc1snY2xhc3NHZXMnXSl8fCAgaXNGb3JtRXJyb3IoZm9ybS5jb250cm9sc1snY2xhc3NHZXMnXSl9XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCI+XG4gICAgICAgICAgPG5nYi1hbGVydCBkYXRhLXRlc3RpZD1cIm5ldy1sb2NhdGlvbi1jbGFzc0dlcy1pbnZhbGlkXCIgW2Rpc21pc3NpYmxlXT1cImZhbHNlXCIgdHlwZT1cImRhbmdlclwiXG4gICAgICAgICAgICAqbmdJZj1cInZhbGlkYXRvcnNTZXJ2aWNlLmlzQ29udHJvbEVycm9yKGZvcm0uY29udHJvbHNbJ2NsYXNzR2VzJ10pIHx8ICBpc0Zvcm1FcnJvcihmb3JtLmNvbnRyb2xzWydjbGFzc0dlcyddKVwiPlxuICAgICAgICAgICAge3t2YWxpZGF0b3JzU2VydmljZS5nZXRFcnJvcihmb3JtLmNvbnRyb2xzWydjbGFzc0dlcyddKSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgPC9uZ2ItYWxlcnQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwibWItMyByb3dcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+e3snQ292ZXIgcGljdHVyZScgfCB0cmFuc2xhdGV9fTwvbGFiZWw+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cbiAgICAgICAgPGltZyAjaW1hZ2VCYXNlUHJldmlldyAqbmdJZj1cImN1cnJlbnRJbWFnZVwiIGNsYXNzPVwiaW1hZ2UtcHJldmlld1wiIFtzcmNdPVwiY3VycmVudEltYWdlXCI+XG4gICAgICAgIDxsYWJlbCAjaW1hZ2VJbnB1dENvbnRhaW5lciBmb3I9XCJpbWFnZVwiXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWxhYmVsLWZpbGUgYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGwgaW1hZ2VJbnB1dENvbnRhaW5lclwiPlxuICAgICAgICAgIDxpbnB1dCAjaW1hZ2VJbnB1dCB0eXBlPVwiZmlsZVwiIGlkPVwiaW1hZ2VcIiAoY2hhbmdlKT1cImhhbmRsZUltYWdlSW5wdXQoJGV2ZW50LnRhcmdldClcIiAvPlxuICAgICAgICAgIHt7IGltYWdlSW5wdXRUZXh0IHwgdHJhbnNsYXRlfX08L2xhYmVsPlxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiY3VycmVudEltYWdlICYmICFpbWFnZVRvVXBsb2FkXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGxcIlxuICAgICAgICAgIChjbGljayk9XCJpbWFnZVRvQmVEZWxldGVkPXRydWU7Y2xlYXJJbWFnZUZpbGUoKVwiPnt7J0RlbGV0ZSBwaWN0dXJlJyB8IHRyYW5zbGF0ZSB9fTwvYnV0dG9uPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW1hZ2UtbmFtZVwiICpuZ0lmPVwiaW1hZ2VUb1VwbG9hZFwiPlxuICAgICAgICAgIDxwPnt7IGltYWdlVG9VcGxvYWQubmFtZX19PC9wPlxuICAgICAgICAgIDxkaXYgKGNsaWNrKT1cImNsZWFySW1hZ2VGaWxlKClcIiBbc3R5bGUuY3Vyc29yXT1cIidwb2ludGVyJ1wiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uaWZ5XCIgZGF0YS1pY29uPVwibWRpOnRyYXNoLWNhbi1vdXRsaW5lXCI+PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm1iLTMgcm93XCIgKm5nSWY9XCIhbG9jYXRpb25cIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+e3snQ3JlYXRlIG1pc3Npb24gZm9yIHRoaXMgc3BhY2UnIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0zXCI+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbKG5nTW9kZWwpXT1cImFkZE1pc3Npb25Gb3JOZXdTcGFjZVwiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGJ1dHRvbiBkYXRhLXRlc3RpZD1cIm5ldy1sb2NhdGlvbi1zdWJtaXQtYnRuXCIgW25nQ2xhc3NdPVwieydpcy1pbnZhbGlkJyA6IGVycm9yRm9ybSB9XCIgdHlwZT1cInN1Ym1pdFwiXG4gICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IHJvdW5kZWQtcGlsbCBtZS0zXCI+e3snU2F2ZScgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxuXG4gICAgPGJ1dHRvbiBkYXRhLXRlc3RpZD1cIm5ldy1sb2NhdGlvbi1jbG9zZS1idG5cIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIlxuICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGxcIj57eydDYW5jZWwnIHxcbiAgICAgIHRyYW5zbGF0ZX19PC9idXR0b24+XG5cbiAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiICpuZ0lmPVwiZXJyb3JGb3JtXCI+XG4gICAgICA8bmdiLWFsZXJ0IGRhdGEtdGVzdGlkPVwibmV3LWxvY2F0aW9uLWZvcm0taW52YWxpZFwiIFtkaXNtaXNzaWJsZV09XCJmYWxzZVwiIHR5cGU9XCJkYW5nZXJcIj5cbiAgICAgICAge3snZXJyb3JGb3JtLmluZm9CdG4nIHx0cmFuc2xhdGV9fVxuXG4gICAgICA8L25nYi1hbGVydD5cbiAgICA8L2Rpdj5cbiAgPC9mb3JtPlxuPC9kaXY+Il19