@wizishop/img-manager 15.2.62 → 15.2.63

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 (44) hide show
  1. package/assets/i18n/en.json +1 -1
  2. package/assets/i18n/es.json +1 -1
  3. package/assets/i18n/fr.json +1 -1
  4. package/assets/i18n/it.json +1 -1
  5. package/esm2020/lib/components/images-view/images-actions-handler.mjs +5 -1
  6. package/esm2020/lib/components/images-view/images-view.component.mjs +12 -9
  7. package/esm2020/lib/components/images-view/mosaic-view/img-card/img-card.component.mjs +3 -3
  8. package/esm2020/lib/components/images-view/table-view/table-view.component.mjs +3 -3
  9. package/esm2020/lib/components/img-editor/img-editor.component.mjs +44 -7
  10. package/esm2020/lib/components/img-editor/info-video/info-video.component.mjs +62 -0
  11. package/esm2020/lib/components/img-editor/show-iframe/show-iframe.component.mjs +105 -0
  12. package/esm2020/lib/components/img-selection/img-selection.component.mjs +3 -3
  13. package/esm2020/lib/components/img-tabs/img-tabs.component.mjs +12 -3
  14. package/esm2020/lib/components/shared/table/table.component.mjs +2 -1
  15. package/esm2020/lib/dto/img-manager.dto.mjs +1 -1
  16. package/esm2020/lib/services/api.service.mjs +1 -1
  17. package/esm2020/lib/services/img-event.service.mjs +8 -1
  18. package/esm2020/lib/services/img-manager.service.mjs +4 -3
  19. package/esm2020/lib/services/rename-picture.service.mjs +4 -1
  20. package/esm2020/lib/services/table/filters-table.service.mjs +2 -1
  21. package/esm2020/lib/services/video-info.service.mjs +87 -0
  22. package/esm2020/lib/wz-img-manager.module.mjs +7 -1
  23. package/fesm2015/wizishop-img-manager.mjs +321 -16
  24. package/fesm2015/wizishop-img-manager.mjs.map +1 -1
  25. package/fesm2020/wizishop-img-manager.mjs +319 -15
  26. package/fesm2020/wizishop-img-manager.mjs.map +1 -1
  27. package/lib/components/images-view/images-actions-handler.d.ts +1 -0
  28. package/lib/components/images-view/images-view.component.d.ts +3 -2
  29. package/lib/components/img-editor/img-editor.component.d.ts +8 -1
  30. package/lib/components/img-editor/info-video/info-video.component.d.ts +20 -0
  31. package/lib/components/img-editor/show-iframe/show-iframe.component.d.ts +16 -0
  32. package/lib/components/img-tabs/img-tabs.component.d.ts +1 -0
  33. package/lib/dto/img-manager.dto.d.ts +9 -0
  34. package/lib/services/api.service.d.ts +1 -0
  35. package/lib/services/img-event.service.d.ts +3 -0
  36. package/lib/services/img-manager.service.d.ts +8 -14
  37. package/lib/services/rename-picture.service.d.ts +1 -0
  38. package/lib/services/table/filters-table.service.d.ts +1 -0
  39. package/lib/services/video-info.service.d.ts +23 -0
  40. package/lib/wz-img-manager.module.d.ts +46 -44
  41. package/package.json +1 -1
  42. package/wizishop-img-manager-15.2.63.tgz +0 -0
  43. package/wz-img-manager.scss +302 -11
  44. package/wizishop-img-manager-15.2.62.tgz +0 -0
@@ -17,12 +17,13 @@ import * as i4 from "../../services/alert.service";
17
17
  import * as i5 from "../../services/user-settings.service";
18
18
  import * as i6 from "../../services/rename-picture.service";
19
19
  import * as i7 from "@angular/common";
20
- import * as i8 from "ngx-scrollbar";
21
- import * as i9 from "../pexels-lib/pexels-lib.component";
22
- import * as i10 from "./mosaic-view/mosaic-view.component";
23
- import * as i11 from "./table-view/table-view.component";
24
- import * as i12 from "../../directives/loading.directive";
25
- import * as i13 from "@ngx-translate/core";
20
+ import * as i8 from "@angular/forms";
21
+ import * as i9 from "ngx-scrollbar";
22
+ import * as i10 from "../pexels-lib/pexels-lib.component";
23
+ import * as i11 from "./mosaic-view/mosaic-view.component";
24
+ import * as i12 from "./table-view/table-view.component";
25
+ import * as i13 from "../../directives/loading.directive";
26
+ import * as i14 from "@ngx-translate/core";
26
27
  export class ImagesViewComponent {
27
28
  constructor(imgManager, imgEventService, imgSelectionService, alertService, userSettingsService, renamePictureService, changeDetectorRef) {
28
29
  this.imgManager = imgManager;
@@ -147,6 +148,7 @@ export class ImagesViewComponent {
147
148
  return {
148
149
  sort: undefined,
149
150
  order: undefined,
151
+ type: searchImagesParameters.type,
150
152
  searchValue: searchImagesParameters.search,
151
153
  totalItems: imageTotal,
152
154
  itemsPerPage: parseInt(searchImagesParameters.limit),
@@ -286,6 +288,7 @@ export class ImagesViewComponent {
286
288
  return {
287
289
  limit: tableFilters.itemsPerPage.toString(),
288
290
  page: tableFilters.currentPage.toString(),
291
+ type: tableFilters.type,
289
292
  ...(tableFilters.searchValue && { search: tableFilters.searchValue.toString() }),
290
293
  };
291
294
  }
@@ -338,7 +341,7 @@ export class ImagesViewComponent {
338
341
  }
339
342
  }
340
343
  ImagesViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ImagesViewComponent, deps: [{ token: i1.ImgManagerService }, { token: i2.ImgEventService }, { token: i3.ImgSelectionService }, { token: i4.AlertService }, { token: i5.UserSettingsService }, { token: i6.RenamePictureService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
341
- ImagesViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: ImagesViewComponent, selector: "images-view", inputs: { stateDisplayed: "stateDisplayed", tabDisplayed: "tabDisplayed", fullSize: "fullSize", nbRowToShow: "nbRowToShow", listDisplayed: "listDisplayed", multipleImgMode: "multipleImgMode" }, outputs: { switchDisplayWindow: "switchDisplayWindow" }, viewQueries: [{ propertyName: "imgLibContainer", first: true, predicate: ["imgLibContainer"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"vm$ | async as vm\">\r\n\r\n <div class=\"images-view\" [ngClass]=\"{'fullSize': fullSize, 'small': stateDisplayed === 'small'}\" [@easeInOut]=\"'in'\">\r\n <!-- Subheader : Img number and actions btn (sup img list, switch forma display) -->\r\n <div\r\n *ngIf=\"(stateDisplayed !== 'small' || tabDisplayed === 'img-upload')\"\r\n class=\"images-view__container\"\r\n [ngClass]=\"{'images-view__container--uploadTab': tabDisplayed === 'img-upload', 'images-view__container--window': stateDisplayed === 'window'}\"\r\n >\r\n\r\n <div *ngIf=\"tabDisplayed !== 'img-upload'\">\r\n <p class=\"mainColor\" [ngClass]=\"{'images-view__container__total--hide': vm.displayPexelsResults}\">{{ 'ImgManager.ImgLib.nbImg' | translate }} : {{vm.imageTotal}}</p>\r\n </div>\r\n <div *ngIf=\"tabDisplayed === 'img-upload'\">\r\n <p class=\"mainColor\">{{ 'ImgManager.ImgLib.lastImgs' | translate }}</p>\r\n </div>\r\n\r\n <div class=\"field has-addons subHeaderActions\" *ngIf=\"tabDisplayed !== 'img-upload'\">\r\n\r\n <!-- For listforma : Display btn del multiple img & Confirm action -->\r\n <div class=\"images-view__container__boxAction\">\r\n\r\n\r\n <!-- Select -->\r\n <button\r\n class=\"button success images-view__container__boxAction__import\"\r\n @insertRemoveAnnim\r\n *ngIf=\"listDisplayed && nbImgToDelSelected && !confirmImgSup && !delListImgLoader && multipleImgMode\"\r\n (click)=\"selectImgChosen(vm.picturesList)\"\r\n type=\"button\"\r\n >\r\n <i class=\"fal fa-check\"></i>\r\n {{ 'ImgManager.ImgLib.select' | translate }} ({{nbImgToDelSelected}})\r\n </button>\r\n\r\n <!-- Display btn del multiple img -->\r\n <button\r\n *ngIf=\"listDisplayed && nbImgToDelSelected && !confirmImgSup\"\r\n (click)=\"displayConfirmImgSup()\"\r\n class=\"button images-view__container__boxAction__delBtn danger\"\r\n @insertRemoveAnnim\r\n type=\"button\"\r\n >\r\n <i class=\"fal fa-times\"></i>{{ 'ImgManager.ImgLib.delMlt' | translate }} ({{nbImgToDelSelected}})\r\n <span btnLoadingAnim *ngIf=\"delListImgLoader\" class=\"btnLoadingAnnimation\"></span>\r\n </button>\r\n\r\n <!-- Confirm action -->\r\n <div\r\n class=\"images-view__container__boxAction__confirmSup\"\r\n [ngClass]=\"{'images-view__container__boxAction__confirmSup--visible': confirmImgSup}\">\r\n <p *ngIf=\"nbImgToDelSelected > 1\" class=\"images-view__container__boxAction__confirmSup__text\">{{ 'ImgManager.ImgLib.confirmSupQuestions' | translate:{nbImage: nbImgToDelSelected} }}</p>\r\n <p *ngIf=\"nbImgToDelSelected === 1\" class=\"images-view__container__boxAction__confirmSup__text\">{{ 'ImgManager.ImgLib.confirmSupQuestion' | translate:{nbImage: nbImgToDelSelected} }}</p>\r\n <div>\r\n <button\r\n class=\"button images-view__container__boxAction__confirmSup__cancel\"\r\n (click)=\"cancelSup()\"\r\n type=\"button\"\r\n >\r\n {{ 'ImgManager.ImgLib.cancel' | translate }}\r\n </button>\r\n <button\r\n (click)=\"removeListImg(vm.picturesList)\"\r\n class=\"button images-view__container__delBtn danger\"\r\n type=\"button\"\r\n >\r\n {{ 'ImgManager.ImgLib.confirm' | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n <!-- Swith mosaic/list forma -->\r\n <div class=\"field has-addons images-view__container__buttonBox\">\r\n <div class=\"control\">\r\n <div\r\n class=\"button is-lighted images-view__container__buttonBox__btn\"\r\n [ngClass]=\"{'actifDisplayed': !listDisplayed}\"\r\n (click)=\"onSwitchFormatDisplayed(false)\"\r\n >\r\n <span class=\"icon is-small\">\r\n <i class=\"fa-solid fa-th\"></i>\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"control\">\r\n <div class=\"button is-lighted images-view__container__buttonBox__btn\"\r\n [ngClass]=\"{'actifDisplayed': listDisplayed}\"\r\n (click)=\"onSwitchFormatDisplayed(true)\"\r\n >\r\n <span class=\"icon is-small\">\r\n <i class=\"fa-solid fa-bars\"></i>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <!-- Images section -->\r\n <ng-scrollbar\r\n class=\"images-view__scroll\"\r\n [ngClass]=\"{\r\n 'images-view__scroll--hide--mosaic': vm.displayPexelsResults && !listDisplayed,\r\n 'images-view__scroll--hide--table': vm.displayPexelsResults && listDisplayed,\r\n 'images-view__scroll--full': stateDisplayed === 'full',\r\n 'images-view__scroll--smallDisplay' : stateDisplayed === 'small' && tabDisplayed !== 'img-upload',\r\n 'images-view__scroll--smallUploadDisplay' : stateDisplayed === 'small' && tabDisplayed === 'img-upload',\r\n 'images-view__scroll--window': stateDisplayed === 'window'\r\n }\"\r\n >\r\n <div #imgLibContainer class=\"images-view__wrapper\">\r\n\r\n <div *ngIf=\"!listDisplayed || stateDisplayed === 'small'\" [@easeInOut]=\"'in'\">\r\n <mosaic-view\r\n [picturesList]=\"vm.picturesList\"\r\n (picturesListChange)=\"onPicturesListChange(vm.picturesList)\"\r\n [tableFilters]=\"vm.tableFilters\"\r\n (filtersChange)=\"searchImagesParameters$.next(getParams(vm.tableFilters));\"\r\n [(disable)]=\"disable\"\r\n (pictureNameChange)=\"onRenamePicture($event)\"\r\n (switchDisplayWindow)=\"switchDisplayWindowMosaic()\"\r\n [nbFakeImg]=\"nbFakeImg\"\r\n [stateDisplayed]=\"stateDisplayed\"\r\n [tabDisplayed]=\"tabDisplayed\"\r\n [displayPexelsResults]=\"vm.displayPexelsResults\"\r\n [isLoading]=\"vm.isLoading\"\r\n [fullSize]=\"fullSize\"\r\n >\r\n </mosaic-view>\r\n </div>\r\n\r\n <div *ngIf=\"listDisplayed && stateDisplayed !== 'small'\" [@easeInOut]=\"'in'\">\r\n <table-view\r\n [picturesList]=\"vm.picturesList\"\r\n (picturesListChange)=\"onPicturesListChange(vm.picturesList)\"\r\n [tableFilters]=\"vm.tableFilters\"\r\n (filtersChange)=\"searchImagesParameters$.next(getParams(vm.tableFilters));\"\r\n [(disable)]=\"disable\"\r\n (pictureNameChange)=\"onRenamePicture($event)\"\r\n [displayPexelsResults]=\"vm.displayPexelsResults\"\r\n [stateDisplayed]=\"stateDisplayed\"\r\n [isLoading]=\"vm.isLoading\"\r\n >\r\n </table-view>\r\n </div>\r\n </div>\r\n </ng-scrollbar>\r\n\r\n <!-- Pexels Section - When no img found -->\r\n <div\r\n *ngIf=\"vm.displayPexelsResults\"\r\n class=\"images-view--pexels\"\r\n [@easeInOut]=\"'in'\">\r\n <pexels-lib\r\n [searchValue]=\"vm.tableFilters.searchValue\"\r\n [disableSearch]=\"true\"\r\n >\r\n </pexels-lib>\r\n </div>\r\n</ng-container>\r\n", dependencies: [{ kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i8.NgScrollbar, selector: "ng-scrollbar", inputs: ["disabled", "sensorDisabled", "pointerEventsDisabled", "viewportPropagateMouseMove", "autoHeightDisabled", "autoWidthDisabled", "viewClass", "trackClass", "thumbClass", "minThumbSize", "trackClickScrollDuration", "pointerEventsMethod", "track", "visibility", "appearance", "position", "sensorDebounce", "scrollAuditTime"], outputs: ["updated"], exportAs: ["ngScrollbar"] }, { kind: "component", type: i9.PexelLibComponent, selector: "pexels-lib", inputs: ["stateDisplayed", "searchValue", "disableSearch"] }, { kind: "component", type: i10.MosaicViewComponent, selector: "mosaic-view", inputs: ["tabDisplayed", "fullSize", "nbFakeImg"], outputs: ["switchDisplayWindow"] }, { kind: "component", type: i11.TableViewComponent, selector: "table-view" }, { kind: "directive", type: i12.LoadingDirective, selector: "[btnLoadingAnim]" }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }, { kind: "pipe", type: i13.TranslatePipe, name: "translate" }], animations: [
344
+ ImagesViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: ImagesViewComponent, selector: "images-view", inputs: { stateDisplayed: "stateDisplayed", tabDisplayed: "tabDisplayed", fullSize: "fullSize", nbRowToShow: "nbRowToShow", listDisplayed: "listDisplayed", multipleImgMode: "multipleImgMode" }, outputs: { switchDisplayWindow: "switchDisplayWindow" }, viewQueries: [{ propertyName: "imgLibContainer", first: true, predicate: ["imgLibContainer"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"vm$ | async as vm\">\r\n\r\n <div class=\"images-view\" [ngClass]=\"{'fullSize': fullSize, 'small': stateDisplayed === 'small'}\" [@easeInOut]=\"'in'\">\r\n <!-- Subheader : Img number and actions btn (sup img list, switch forma display) -->\r\n <div\r\n *ngIf=\"(stateDisplayed !== 'small' || tabDisplayed === 'img-upload')\"\r\n class=\"images-view__container\"\r\n [ngClass]=\"{'images-view__container--uploadTab': tabDisplayed === 'img-upload', 'images-view__container--window': stateDisplayed === 'window'}\"\r\n >\r\n\r\n <div *ngIf=\"tabDisplayed !== 'img-upload'\">\r\n <p class=\"mainColor\" [ngClass]=\"{'images-view__container__total--hide': vm.displayPexelsResults}\">{{ 'ImgManager.ImgLib.nbImg' | translate }} : {{vm.imageTotal}}</p>\r\n </div>\r\n <div *ngIf=\"tabDisplayed === 'img-upload'\">\r\n <p class=\"mainColor\">{{ 'ImgManager.ImgLib.lastImgs' | translate }}</p>\r\n </div>\r\n\r\n <div class=\"field has-addons subHeaderActions\" *ngIf=\"tabDisplayed !== 'img-upload'\">\r\n\r\n <!-- For listforma : Display btn del multiple img & Confirm action -->\r\n <div class=\"images-view__container__boxAction\">\r\n\r\n\r\n <!-- Select -->\r\n <button\r\n class=\"button success images-view__container__boxAction__import\"\r\n @insertRemoveAnnim\r\n *ngIf=\"listDisplayed && nbImgToDelSelected && !confirmImgSup && !delListImgLoader && multipleImgMode\"\r\n (click)=\"selectImgChosen(vm.picturesList)\"\r\n type=\"button\"\r\n >\r\n <i class=\"fal fa-check\"></i>\r\n {{ 'ImgManager.ImgLib.select' | translate }} ({{nbImgToDelSelected}})\r\n </button>\r\n\r\n <!-- Display btn del multiple img -->\r\n <button\r\n *ngIf=\"listDisplayed && nbImgToDelSelected && !confirmImgSup\"\r\n (click)=\"displayConfirmImgSup()\"\r\n class=\"button images-view__container__boxAction__delBtn danger\"\r\n @insertRemoveAnnim\r\n type=\"button\"\r\n >\r\n <i class=\"fal fa-times\"></i>{{ 'ImgManager.ImgLib.delMlt' | translate }} ({{nbImgToDelSelected}})\r\n <span btnLoadingAnim *ngIf=\"delListImgLoader\" class=\"btnLoadingAnnimation\"></span>\r\n </button>\r\n\r\n <!-- Confirm action -->\r\n <div\r\n class=\"images-view__container__boxAction__confirmSup\"\r\n [ngClass]=\"{'images-view__container__boxAction__confirmSup--visible': confirmImgSup}\">\r\n <p *ngIf=\"nbImgToDelSelected > 1\" class=\"images-view__container__boxAction__confirmSup__text\">{{ 'ImgManager.ImgLib.confirmSupQuestions' | translate:{nbImage: nbImgToDelSelected} }}</p>\r\n <p *ngIf=\"nbImgToDelSelected === 1\" class=\"images-view__container__boxAction__confirmSup__text\">{{ 'ImgManager.ImgLib.confirmSupQuestion' | translate:{nbImage: nbImgToDelSelected} }}</p>\r\n <div>\r\n <button\r\n class=\"button images-view__container__boxAction__confirmSup__cancel\"\r\n (click)=\"cancelSup()\"\r\n type=\"button\"\r\n >\r\n {{ 'ImgManager.ImgLib.cancel' | translate }}\r\n </button>\r\n <button\r\n (click)=\"removeListImg(vm.picturesList)\"\r\n class=\"button images-view__container__delBtn danger\"\r\n type=\"button\"\r\n >\r\n {{ 'ImgManager.ImgLib.confirm' | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n <!-- Swith mosaic/list forma -->\r\n <div class=\"field has-addons images-view__container__buttonBox\">\r\n <div class=\"control\">\r\n <div\r\n class=\"button is-lighted images-view__container__buttonBox__btn\"\r\n [ngClass]=\"{'actifDisplayed': !listDisplayed}\"\r\n (click)=\"onSwitchFormatDisplayed(false)\"\r\n >\r\n <span class=\"icon is-small\">\r\n <i class=\"fa-solid fa-th\"></i>\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"control\">\r\n <div class=\"button is-lighted images-view__container__buttonBox__btn\"\r\n [ngClass]=\"{'actifDisplayed': listDisplayed}\"\r\n (click)=\"onSwitchFormatDisplayed(true)\"\r\n >\r\n <span class=\"icon is-small\">\r\n <i class=\"fa-solid fa-bars\"></i>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <!-- Images section -->\r\n <ng-scrollbar\r\n class=\"images-view__scroll\"\r\n [ngClass]=\"{\r\n 'images-view__scroll--hide--mosaic': vm.displayPexelsResults && !listDisplayed,\r\n 'images-view__scroll--hide--table': vm.displayPexelsResults && listDisplayed,\r\n 'images-view__scroll--full': stateDisplayed === 'full',\r\n 'images-view__scroll--smallDisplay' : stateDisplayed === 'small' && tabDisplayed !== 'img-upload',\r\n 'images-view__scroll--smallUploadDisplay' : stateDisplayed === 'small' && tabDisplayed === 'img-upload',\r\n 'images-view__scroll--window': stateDisplayed === 'window'\r\n }\"\r\n >\r\n\r\n <div class=\"filter-video\" *ngIf=\"tabDisplayed !== 'img-upload'\">\r\n <label class=\"checkbox images-view__container__filterVideo\">\r\n <span>{{ 'ImgManager.ImgLib.filterVideo' | translate }}</span>\r\n <select [(ngModel)]=\"vm.tableFilters.type\" (ngModelChange)=\"searchImagesParameters$.next(getParams(vm.tableFilters));\">\r\n <option selected value=\"\">\r\n {{ 'ImgManager.ImgLib.allFiles' | translate }}\r\n </option>\r\n <option value=\"image\">\r\n {{ 'ImgManager.ImgLib.onlyImages' | translate }}\r\n </option>\r\n <option value=\"video\">\r\n {{ 'ImgManager.ImgLib.onlyVideos' | translate }}\r\n </option>\r\n </select>\r\n </label>\r\n </div>\r\n\r\n <div #imgLibContainer class=\"images-view__wrapper\">\r\n\r\n <div *ngIf=\"!listDisplayed || stateDisplayed === 'small'\" [@easeInOut]=\"'in'\">\r\n <mosaic-view\r\n [picturesList]=\"vm.picturesList\"\r\n (picturesListChange)=\"onPicturesListChange(vm.picturesList)\"\r\n [tableFilters]=\"vm.tableFilters\"\r\n (filtersChange)=\"searchImagesParameters$.next(getParams(vm.tableFilters));\"\r\n [(disable)]=\"disable\"\r\n (pictureNameChange)=\"onRenamePicture($event)\"\r\n (switchDisplayWindow)=\"switchDisplayWindowMosaic()\"\r\n [nbFakeImg]=\"nbFakeImg\"\r\n [stateDisplayed]=\"stateDisplayed\"\r\n [tabDisplayed]=\"tabDisplayed\"\r\n [displayPexelsResults]=\"vm.displayPexelsResults\"\r\n [isLoading]=\"vm.isLoading\"\r\n [fullSize]=\"fullSize\"\r\n >\r\n </mosaic-view>\r\n </div>\r\n\r\n <div *ngIf=\"listDisplayed && stateDisplayed !== 'small'\" [@easeInOut]=\"'in'\">\r\n <table-view\r\n [picturesList]=\"vm.picturesList\"\r\n (picturesListChange)=\"onPicturesListChange(vm.picturesList)\"\r\n [tableFilters]=\"vm.tableFilters\"\r\n (filtersChange)=\"searchImagesParameters$.next(getParams(vm.tableFilters));\"\r\n [(disable)]=\"disable\"\r\n (pictureNameChange)=\"onRenamePicture($event)\"\r\n [displayPexelsResults]=\"vm.displayPexelsResults\"\r\n [stateDisplayed]=\"stateDisplayed\"\r\n [isLoading]=\"vm.isLoading\"\r\n >\r\n </table-view>\r\n </div>\r\n </div>\r\n </ng-scrollbar>\r\n\r\n <!-- Pexels Section - When no img found -->\r\n <div\r\n *ngIf=\"vm.displayPexelsResults\"\r\n class=\"images-view--pexels\"\r\n [@easeInOut]=\"'in'\">\r\n <pexels-lib\r\n [searchValue]=\"vm.tableFilters.searchValue\"\r\n [disableSearch]=\"true\"\r\n >\r\n </pexels-lib>\r\n </div>\r\n</ng-container>\r\n", dependencies: [{ kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i8.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i8.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i9.NgScrollbar, selector: "ng-scrollbar", inputs: ["disabled", "sensorDisabled", "pointerEventsDisabled", "viewportPropagateMouseMove", "autoHeightDisabled", "autoWidthDisabled", "viewClass", "trackClass", "thumbClass", "minThumbSize", "trackClickScrollDuration", "pointerEventsMethod", "track", "visibility", "appearance", "position", "sensorDebounce", "scrollAuditTime"], outputs: ["updated"], exportAs: ["ngScrollbar"] }, { kind: "component", type: i10.PexelLibComponent, selector: "pexels-lib", inputs: ["stateDisplayed", "searchValue", "disableSearch"] }, { kind: "component", type: i11.MosaicViewComponent, selector: "mosaic-view", inputs: ["tabDisplayed", "fullSize", "nbFakeImg"], outputs: ["switchDisplayWindow"] }, { kind: "component", type: i12.TableViewComponent, selector: "table-view" }, { kind: "directive", type: i13.LoadingDirective, selector: "[btnLoadingAnim]" }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }, { kind: "pipe", type: i14.TranslatePipe, name: "translate" }], animations: [
342
345
  easeInOut,
343
346
  insertRemove
344
347
  ] });
@@ -347,7 +350,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
347
350
  args: [{ selector: 'images-view', animations: [
348
351
  easeInOut,
349
352
  insertRemove
350
- ], template: "<ng-container *ngIf=\"vm$ | async as vm\">\r\n\r\n <div class=\"images-view\" [ngClass]=\"{'fullSize': fullSize, 'small': stateDisplayed === 'small'}\" [@easeInOut]=\"'in'\">\r\n <!-- Subheader : Img number and actions btn (sup img list, switch forma display) -->\r\n <div\r\n *ngIf=\"(stateDisplayed !== 'small' || tabDisplayed === 'img-upload')\"\r\n class=\"images-view__container\"\r\n [ngClass]=\"{'images-view__container--uploadTab': tabDisplayed === 'img-upload', 'images-view__container--window': stateDisplayed === 'window'}\"\r\n >\r\n\r\n <div *ngIf=\"tabDisplayed !== 'img-upload'\">\r\n <p class=\"mainColor\" [ngClass]=\"{'images-view__container__total--hide': vm.displayPexelsResults}\">{{ 'ImgManager.ImgLib.nbImg' | translate }} : {{vm.imageTotal}}</p>\r\n </div>\r\n <div *ngIf=\"tabDisplayed === 'img-upload'\">\r\n <p class=\"mainColor\">{{ 'ImgManager.ImgLib.lastImgs' | translate }}</p>\r\n </div>\r\n\r\n <div class=\"field has-addons subHeaderActions\" *ngIf=\"tabDisplayed !== 'img-upload'\">\r\n\r\n <!-- For listforma : Display btn del multiple img & Confirm action -->\r\n <div class=\"images-view__container__boxAction\">\r\n\r\n\r\n <!-- Select -->\r\n <button\r\n class=\"button success images-view__container__boxAction__import\"\r\n @insertRemoveAnnim\r\n *ngIf=\"listDisplayed && nbImgToDelSelected && !confirmImgSup && !delListImgLoader && multipleImgMode\"\r\n (click)=\"selectImgChosen(vm.picturesList)\"\r\n type=\"button\"\r\n >\r\n <i class=\"fal fa-check\"></i>\r\n {{ 'ImgManager.ImgLib.select' | translate }} ({{nbImgToDelSelected}})\r\n </button>\r\n\r\n <!-- Display btn del multiple img -->\r\n <button\r\n *ngIf=\"listDisplayed && nbImgToDelSelected && !confirmImgSup\"\r\n (click)=\"displayConfirmImgSup()\"\r\n class=\"button images-view__container__boxAction__delBtn danger\"\r\n @insertRemoveAnnim\r\n type=\"button\"\r\n >\r\n <i class=\"fal fa-times\"></i>{{ 'ImgManager.ImgLib.delMlt' | translate }} ({{nbImgToDelSelected}})\r\n <span btnLoadingAnim *ngIf=\"delListImgLoader\" class=\"btnLoadingAnnimation\"></span>\r\n </button>\r\n\r\n <!-- Confirm action -->\r\n <div\r\n class=\"images-view__container__boxAction__confirmSup\"\r\n [ngClass]=\"{'images-view__container__boxAction__confirmSup--visible': confirmImgSup}\">\r\n <p *ngIf=\"nbImgToDelSelected > 1\" class=\"images-view__container__boxAction__confirmSup__text\">{{ 'ImgManager.ImgLib.confirmSupQuestions' | translate:{nbImage: nbImgToDelSelected} }}</p>\r\n <p *ngIf=\"nbImgToDelSelected === 1\" class=\"images-view__container__boxAction__confirmSup__text\">{{ 'ImgManager.ImgLib.confirmSupQuestion' | translate:{nbImage: nbImgToDelSelected} }}</p>\r\n <div>\r\n <button\r\n class=\"button images-view__container__boxAction__confirmSup__cancel\"\r\n (click)=\"cancelSup()\"\r\n type=\"button\"\r\n >\r\n {{ 'ImgManager.ImgLib.cancel' | translate }}\r\n </button>\r\n <button\r\n (click)=\"removeListImg(vm.picturesList)\"\r\n class=\"button images-view__container__delBtn danger\"\r\n type=\"button\"\r\n >\r\n {{ 'ImgManager.ImgLib.confirm' | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n <!-- Swith mosaic/list forma -->\r\n <div class=\"field has-addons images-view__container__buttonBox\">\r\n <div class=\"control\">\r\n <div\r\n class=\"button is-lighted images-view__container__buttonBox__btn\"\r\n [ngClass]=\"{'actifDisplayed': !listDisplayed}\"\r\n (click)=\"onSwitchFormatDisplayed(false)\"\r\n >\r\n <span class=\"icon is-small\">\r\n <i class=\"fa-solid fa-th\"></i>\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"control\">\r\n <div class=\"button is-lighted images-view__container__buttonBox__btn\"\r\n [ngClass]=\"{'actifDisplayed': listDisplayed}\"\r\n (click)=\"onSwitchFormatDisplayed(true)\"\r\n >\r\n <span class=\"icon is-small\">\r\n <i class=\"fa-solid fa-bars\"></i>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <!-- Images section -->\r\n <ng-scrollbar\r\n class=\"images-view__scroll\"\r\n [ngClass]=\"{\r\n 'images-view__scroll--hide--mosaic': vm.displayPexelsResults && !listDisplayed,\r\n 'images-view__scroll--hide--table': vm.displayPexelsResults && listDisplayed,\r\n 'images-view__scroll--full': stateDisplayed === 'full',\r\n 'images-view__scroll--smallDisplay' : stateDisplayed === 'small' && tabDisplayed !== 'img-upload',\r\n 'images-view__scroll--smallUploadDisplay' : stateDisplayed === 'small' && tabDisplayed === 'img-upload',\r\n 'images-view__scroll--window': stateDisplayed === 'window'\r\n }\"\r\n >\r\n <div #imgLibContainer class=\"images-view__wrapper\">\r\n\r\n <div *ngIf=\"!listDisplayed || stateDisplayed === 'small'\" [@easeInOut]=\"'in'\">\r\n <mosaic-view\r\n [picturesList]=\"vm.picturesList\"\r\n (picturesListChange)=\"onPicturesListChange(vm.picturesList)\"\r\n [tableFilters]=\"vm.tableFilters\"\r\n (filtersChange)=\"searchImagesParameters$.next(getParams(vm.tableFilters));\"\r\n [(disable)]=\"disable\"\r\n (pictureNameChange)=\"onRenamePicture($event)\"\r\n (switchDisplayWindow)=\"switchDisplayWindowMosaic()\"\r\n [nbFakeImg]=\"nbFakeImg\"\r\n [stateDisplayed]=\"stateDisplayed\"\r\n [tabDisplayed]=\"tabDisplayed\"\r\n [displayPexelsResults]=\"vm.displayPexelsResults\"\r\n [isLoading]=\"vm.isLoading\"\r\n [fullSize]=\"fullSize\"\r\n >\r\n </mosaic-view>\r\n </div>\r\n\r\n <div *ngIf=\"listDisplayed && stateDisplayed !== 'small'\" [@easeInOut]=\"'in'\">\r\n <table-view\r\n [picturesList]=\"vm.picturesList\"\r\n (picturesListChange)=\"onPicturesListChange(vm.picturesList)\"\r\n [tableFilters]=\"vm.tableFilters\"\r\n (filtersChange)=\"searchImagesParameters$.next(getParams(vm.tableFilters));\"\r\n [(disable)]=\"disable\"\r\n (pictureNameChange)=\"onRenamePicture($event)\"\r\n [displayPexelsResults]=\"vm.displayPexelsResults\"\r\n [stateDisplayed]=\"stateDisplayed\"\r\n [isLoading]=\"vm.isLoading\"\r\n >\r\n </table-view>\r\n </div>\r\n </div>\r\n </ng-scrollbar>\r\n\r\n <!-- Pexels Section - When no img found -->\r\n <div\r\n *ngIf=\"vm.displayPexelsResults\"\r\n class=\"images-view--pexels\"\r\n [@easeInOut]=\"'in'\">\r\n <pexels-lib\r\n [searchValue]=\"vm.tableFilters.searchValue\"\r\n [disableSearch]=\"true\"\r\n >\r\n </pexels-lib>\r\n </div>\r\n</ng-container>\r\n" }]
353
+ ], template: "<ng-container *ngIf=\"vm$ | async as vm\">\r\n\r\n <div class=\"images-view\" [ngClass]=\"{'fullSize': fullSize, 'small': stateDisplayed === 'small'}\" [@easeInOut]=\"'in'\">\r\n <!-- Subheader : Img number and actions btn (sup img list, switch forma display) -->\r\n <div\r\n *ngIf=\"(stateDisplayed !== 'small' || tabDisplayed === 'img-upload')\"\r\n class=\"images-view__container\"\r\n [ngClass]=\"{'images-view__container--uploadTab': tabDisplayed === 'img-upload', 'images-view__container--window': stateDisplayed === 'window'}\"\r\n >\r\n\r\n <div *ngIf=\"tabDisplayed !== 'img-upload'\">\r\n <p class=\"mainColor\" [ngClass]=\"{'images-view__container__total--hide': vm.displayPexelsResults}\">{{ 'ImgManager.ImgLib.nbImg' | translate }} : {{vm.imageTotal}}</p>\r\n </div>\r\n <div *ngIf=\"tabDisplayed === 'img-upload'\">\r\n <p class=\"mainColor\">{{ 'ImgManager.ImgLib.lastImgs' | translate }}</p>\r\n </div>\r\n\r\n <div class=\"field has-addons subHeaderActions\" *ngIf=\"tabDisplayed !== 'img-upload'\">\r\n\r\n <!-- For listforma : Display btn del multiple img & Confirm action -->\r\n <div class=\"images-view__container__boxAction\">\r\n\r\n\r\n <!-- Select -->\r\n <button\r\n class=\"button success images-view__container__boxAction__import\"\r\n @insertRemoveAnnim\r\n *ngIf=\"listDisplayed && nbImgToDelSelected && !confirmImgSup && !delListImgLoader && multipleImgMode\"\r\n (click)=\"selectImgChosen(vm.picturesList)\"\r\n type=\"button\"\r\n >\r\n <i class=\"fal fa-check\"></i>\r\n {{ 'ImgManager.ImgLib.select' | translate }} ({{nbImgToDelSelected}})\r\n </button>\r\n\r\n <!-- Display btn del multiple img -->\r\n <button\r\n *ngIf=\"listDisplayed && nbImgToDelSelected && !confirmImgSup\"\r\n (click)=\"displayConfirmImgSup()\"\r\n class=\"button images-view__container__boxAction__delBtn danger\"\r\n @insertRemoveAnnim\r\n type=\"button\"\r\n >\r\n <i class=\"fal fa-times\"></i>{{ 'ImgManager.ImgLib.delMlt' | translate }} ({{nbImgToDelSelected}})\r\n <span btnLoadingAnim *ngIf=\"delListImgLoader\" class=\"btnLoadingAnnimation\"></span>\r\n </button>\r\n\r\n <!-- Confirm action -->\r\n <div\r\n class=\"images-view__container__boxAction__confirmSup\"\r\n [ngClass]=\"{'images-view__container__boxAction__confirmSup--visible': confirmImgSup}\">\r\n <p *ngIf=\"nbImgToDelSelected > 1\" class=\"images-view__container__boxAction__confirmSup__text\">{{ 'ImgManager.ImgLib.confirmSupQuestions' | translate:{nbImage: nbImgToDelSelected} }}</p>\r\n <p *ngIf=\"nbImgToDelSelected === 1\" class=\"images-view__container__boxAction__confirmSup__text\">{{ 'ImgManager.ImgLib.confirmSupQuestion' | translate:{nbImage: nbImgToDelSelected} }}</p>\r\n <div>\r\n <button\r\n class=\"button images-view__container__boxAction__confirmSup__cancel\"\r\n (click)=\"cancelSup()\"\r\n type=\"button\"\r\n >\r\n {{ 'ImgManager.ImgLib.cancel' | translate }}\r\n </button>\r\n <button\r\n (click)=\"removeListImg(vm.picturesList)\"\r\n class=\"button images-view__container__delBtn danger\"\r\n type=\"button\"\r\n >\r\n {{ 'ImgManager.ImgLib.confirm' | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n <!-- Swith mosaic/list forma -->\r\n <div class=\"field has-addons images-view__container__buttonBox\">\r\n <div class=\"control\">\r\n <div\r\n class=\"button is-lighted images-view__container__buttonBox__btn\"\r\n [ngClass]=\"{'actifDisplayed': !listDisplayed}\"\r\n (click)=\"onSwitchFormatDisplayed(false)\"\r\n >\r\n <span class=\"icon is-small\">\r\n <i class=\"fa-solid fa-th\"></i>\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"control\">\r\n <div class=\"button is-lighted images-view__container__buttonBox__btn\"\r\n [ngClass]=\"{'actifDisplayed': listDisplayed}\"\r\n (click)=\"onSwitchFormatDisplayed(true)\"\r\n >\r\n <span class=\"icon is-small\">\r\n <i class=\"fa-solid fa-bars\"></i>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <!-- Images section -->\r\n <ng-scrollbar\r\n class=\"images-view__scroll\"\r\n [ngClass]=\"{\r\n 'images-view__scroll--hide--mosaic': vm.displayPexelsResults && !listDisplayed,\r\n 'images-view__scroll--hide--table': vm.displayPexelsResults && listDisplayed,\r\n 'images-view__scroll--full': stateDisplayed === 'full',\r\n 'images-view__scroll--smallDisplay' : stateDisplayed === 'small' && tabDisplayed !== 'img-upload',\r\n 'images-view__scroll--smallUploadDisplay' : stateDisplayed === 'small' && tabDisplayed === 'img-upload',\r\n 'images-view__scroll--window': stateDisplayed === 'window'\r\n }\"\r\n >\r\n\r\n <div class=\"filter-video\" *ngIf=\"tabDisplayed !== 'img-upload'\">\r\n <label class=\"checkbox images-view__container__filterVideo\">\r\n <span>{{ 'ImgManager.ImgLib.filterVideo' | translate }}</span>\r\n <select [(ngModel)]=\"vm.tableFilters.type\" (ngModelChange)=\"searchImagesParameters$.next(getParams(vm.tableFilters));\">\r\n <option selected value=\"\">\r\n {{ 'ImgManager.ImgLib.allFiles' | translate }}\r\n </option>\r\n <option value=\"image\">\r\n {{ 'ImgManager.ImgLib.onlyImages' | translate }}\r\n </option>\r\n <option value=\"video\">\r\n {{ 'ImgManager.ImgLib.onlyVideos' | translate }}\r\n </option>\r\n </select>\r\n </label>\r\n </div>\r\n\r\n <div #imgLibContainer class=\"images-view__wrapper\">\r\n\r\n <div *ngIf=\"!listDisplayed || stateDisplayed === 'small'\" [@easeInOut]=\"'in'\">\r\n <mosaic-view\r\n [picturesList]=\"vm.picturesList\"\r\n (picturesListChange)=\"onPicturesListChange(vm.picturesList)\"\r\n [tableFilters]=\"vm.tableFilters\"\r\n (filtersChange)=\"searchImagesParameters$.next(getParams(vm.tableFilters));\"\r\n [(disable)]=\"disable\"\r\n (pictureNameChange)=\"onRenamePicture($event)\"\r\n (switchDisplayWindow)=\"switchDisplayWindowMosaic()\"\r\n [nbFakeImg]=\"nbFakeImg\"\r\n [stateDisplayed]=\"stateDisplayed\"\r\n [tabDisplayed]=\"tabDisplayed\"\r\n [displayPexelsResults]=\"vm.displayPexelsResults\"\r\n [isLoading]=\"vm.isLoading\"\r\n [fullSize]=\"fullSize\"\r\n >\r\n </mosaic-view>\r\n </div>\r\n\r\n <div *ngIf=\"listDisplayed && stateDisplayed !== 'small'\" [@easeInOut]=\"'in'\">\r\n <table-view\r\n [picturesList]=\"vm.picturesList\"\r\n (picturesListChange)=\"onPicturesListChange(vm.picturesList)\"\r\n [tableFilters]=\"vm.tableFilters\"\r\n (filtersChange)=\"searchImagesParameters$.next(getParams(vm.tableFilters));\"\r\n [(disable)]=\"disable\"\r\n (pictureNameChange)=\"onRenamePicture($event)\"\r\n [displayPexelsResults]=\"vm.displayPexelsResults\"\r\n [stateDisplayed]=\"stateDisplayed\"\r\n [isLoading]=\"vm.isLoading\"\r\n >\r\n </table-view>\r\n </div>\r\n </div>\r\n </ng-scrollbar>\r\n\r\n <!-- Pexels Section - When no img found -->\r\n <div\r\n *ngIf=\"vm.displayPexelsResults\"\r\n class=\"images-view--pexels\"\r\n [@easeInOut]=\"'in'\">\r\n <pexels-lib\r\n [searchValue]=\"vm.tableFilters.searchValue\"\r\n [disableSearch]=\"true\"\r\n >\r\n </pexels-lib>\r\n </div>\r\n</ng-container>\r\n" }]
351
354
  }], ctorParameters: function () { return [{ type: i1.ImgManagerService }, { type: i2.ImgEventService }, { type: i3.ImgSelectionService }, { type: i4.AlertService }, { type: i5.UserSettingsService }, { type: i6.RenamePictureService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { stateDisplayed: [{
352
355
  type: Input
353
356
  }], tabDisplayed: [{
@@ -366,4 +369,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
366
369
  type: ViewChild,
367
370
  args: ['imgLibContainer']
368
371
  }] } });
369
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2VzLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd3otaW1nLW1hbmFnZXIvc3JjL2xpYi9jb21wb25lbnRzL2ltYWdlcy12aWV3L2ltYWdlcy12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3d6LWltZy1tYW5hZ2VyL3NyYy9saWIvY29tcG9uZW50cy9pbWFnZXMtdmlldy9pbWFnZXMtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFpQixNQUFNLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRTlILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBTyxNQUFNLGdCQUFnQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUczRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDN0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBRXJGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FBVTVELE1BQU0s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QUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDOztnSEF2WFUsbUJBQW1CO29HQUFuQixtQkFBbUIsa2FDeEJoQyxzd1BBc0tBLGd1Q0RuSmM7UUFDVixTQUFTO1FBQ1QsWUFBWTtLQUNiOzJGQUVVLG1CQUFtQjtrQkFSL0IsU0FBUzsrQkFDRSxhQUFhLGNBRVg7d0JBQ1YsU0FBUzt3QkFDVCxZQUFZO3FCQUNiO3dTQUlRLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUVOLG1CQUFtQjtzQkFEbEIsTUFBTTtnQkFHdUIsZUFBZTtzQkFBNUMsU0FBUzt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgSW5wdXQsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgQWZ0ZXJWaWV3SW5pdCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIENoYW5nZURldGVjdG9yUmVmfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSW1nUGljdHVyZURUTywgUGFyYW1zSW1nTWFuYWdlckRUTyB9IGZyb20gJy4uLy4uL2R0by9pbWctbWFuYWdlci5kdG8nO1xyXG5pbXBvcnQgeyBJbWdNYW5hZ2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ltZy1tYW5hZ2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBjb21iaW5lTGF0ZXN0fSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZmlsdGVyLCBtYXAsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgSW1nRXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaW1nLWV2ZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJbWdTZWxlY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaW1nLXNlbGVjdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXNlclNldHRpbmdzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3VzZXItc2V0dGluZ3Muc2VydmljZSc7XHJcbmltcG9ydCB7IFRhYmxlRmlsdGVycyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RhYmxlL2ZpbHRlcnMtdGFibGUuc2VydmljZSc7XHJcbmltcG9ydCB7IFBpY3R1cmVOYW1lVXBkYXRlIH0gZnJvbSAnLi4vLi4vZHRvL3BpY3R1cmUtbmFtZS11cGRhdGUuZHRvJztcclxuaW1wb3J0IHsgZWFzZUluT3V0IH0gZnJvbSAnLi4vLi4vYW5pbWF0aW9ucy9lYXNlSW5PdXQvZWFzZS1pbi1vdXQuYW5pbWF0aW9uJztcclxuaW1wb3J0IHsgaW5zZXJ0UmVtb3ZlIH0gZnJvbSAnLi4vLi4vYW5pbWF0aW9ucy9pbnNlcnRSZW1vdmUvaW5zZXJ0LXJlbW92ZS5hbmltYXRpb24nO1xyXG5pbXBvcnQgeyBzdGF0ZURpc3BsYXllZCwgdGFiRGlzcGxheWVkIH0gZnJvbSAnLi4vLi4vZHRvL2V4cG9ydC1kdG9zLmFwaSc7XHJcbmltcG9ydCB7IFJlbmFtZVBpY3R1cmVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVuYW1lLXBpY3R1cmUuc2VydmljZSc7XHJcbmltcG9ydCB7IEFsZXJ0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FsZXJ0LnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpbWFnZXMtdmlldycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2ltYWdlcy12aWV3LmNvbXBvbmVudC5odG1sJyxcclxuICBhbmltYXRpb25zOiBbXHJcbiAgICBlYXNlSW5PdXQsXHJcbiAgICBpbnNlcnRSZW1vdmVcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJbWFnZXNWaWV3Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XHJcblxyXG4gIEBJbnB1dCgpIHN0YXRlRGlzcGxheWVkOiBzdGF0ZURpc3BsYXllZDtcclxuICBASW5wdXQoKSB0YWJEaXNwbGF5ZWQ6IHRhYkRpc3BsYXllZDtcclxuICBASW5wdXQoKSBmdWxsU2l6ZTogYm9vbGVhbjtcclxuICBASW5wdXQoKSBuYlJvd1RvU2hvdzogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIGxpc3REaXNwbGF5ZWQgPSBmYWxzZTsgLy8gRGlzcGxheSBmb3JtYXQgbGlzdCBvciBtb3NhaWNcclxuICBASW5wdXQoKSBtdWx0aXBsZUltZ01vZGUgPSBmYWxzZTtcclxuICBAT3V0cHV0KClcclxuICBzd2l0Y2hEaXNwbGF5V2luZG93OiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2ltZ0xpYkNvbnRhaW5lcicpIGltZ0xpYkNvbnRhaW5lcjogRWxlbWVudFJlZjtcclxuICB3aWR0aExhcmdlQ2FyZDogbnVtYmVyID0gMjE5OyAvLyBEZWZhdWx0IHZhbHVlIG9mIGEgY2FyZCB3aWR0aCAxOTkgKyBtYXJnaW4gMjBcclxuICB3aWR0aFNtYWxsQ2FyZDogbnVtYmVyID0gMTYwOyAvLyBEZWZhdWx0IHZhbHVlIG9mIGEgY2FyZCB3aWR0aCAxNDAgKyBtYXJnaW4gMjBcclxuICBuYk1pbkltZ1BlckxpbmU6IG51bWJlcjtcclxuICBuYk1heEltZ1BlckxpbmU6IG51bWJlcjtcclxuICBuYkZha2VJbWc6IG51bWJlciA9IDA7XHJcblxyXG4gIGltZ0Z1bGxXaWR0aENvbmZpZzphbnkgPSBbXHJcbiAgICB7XHJcbiAgICAgIG1heDogNDE5LFxyXG4gICAgICBsYXJnZUltZ1dpZHRoRmFjdG9yIDogMSxcclxuICAgICAgc21hbGxJbWdXaWR0aEZhY3RvciA6IDAuNVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbWF4OiA0OTksXHJcbiAgICAgIGxhcmdlSW1nV2lkdGhGYWN0b3IgOiAxLFxyXG4gICAgICBzbWFsbEltZ1dpZHRoRmFjdG9yIDogMC41XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBtYXg6IDcxOSwgLy8gdGFibGV0XHJcbiAgICAgIGxhcmdlSW1nV2lkdGhGYWN0b3IgOiAwLjUsXHJcbiAgICAgIHNtYWxsSW1nV2lkdGhGYWN0b3IgOiAwLjMzMzNcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG1heDogMTAyMywgLy8gZGVza29wXHJcbiAgICAgIGxhcmdlSW1nV2lkdGhGYWN0b3IgOiAwLjMzMzMsXHJcbiAgICAgIHNtYWxsSW1nV2lkdGhGYWN0b3IgOiAwLjJcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG1heDogMTM5OSxcclxuICAgICAgbGFyZ2VJbWdXaWR0aEZhY3RvciA6IDAuMjUsXHJcbiAgICAgIHNtYWxsSW1nV2lkdGhGYWN0b3IgOiAwLjEyNVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbWF4OiAxNTk5LFxyXG4gICAgICBsYXJnZUltZ1dpZHRoRmFjdG9yIDogMC4yLFxyXG4gICAgICBzbWFsbEltZ1dpZHRoRmFjdG9yIDogMC4xMTExXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBsYXJnZUltZ1dpZHRoRmFjdG9yIDogMC4xNjY2LFxyXG4gICAgICBzbWFsbEltZ1dpZHRoRmFjdG9yIDogMC4xXHJcbiAgICB9XHJcbiAgXTtcclxuXHJcbiAgaW1nV2lkdGhDb25maWc6YW55ID0gW1xyXG4gICAge1xyXG4gICAgICBtYXg6IDEwMjQsXHJcbiAgICAgIGxhcmdlSW1nV2lkdGhGYWN0b3IgOiAwLjI1LFxyXG4gICAgICBzbWFsbEltZ1dpZHRoRmFjdG9yIDogMC4xMjVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG1heDogMTE5OSxcclxuICAgICAgbGFyZ2VJbWdXaWR0aEZhY3RvciA6IDAuMzMzMyxcclxuICAgICAgc21hbGxJbWdXaWR0aEZhY3RvciA6IDAuMlxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbWF4OiAxMjk5LFxyXG4gICAgICBsYXJnZUltZ1dpZHRoRmFjdG9yIDogMC4zMzMzLFxyXG4gICAgICBzbWFsbEltZ1dpZHRoRmFjdG9yIDogMC4xNjY2XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBtYXg6IDEzOTksXHJcbiAgICAgIGxhcmdlSW1nV2lkdGhGYWN0b3IgOiAwLjI1LFxyXG4gICAgICBzbWFsbEltZ1dpZHRoRmFjdG9yIDogMC4xNjY2XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBtYXg6IDE1OTksXHJcbiAgICAgIGxhcmdlSW1nV2lkdGhGYWN0b3IgOiAwLjI1LFxyXG4gICAgICBzbWFsbEltZ1dpZHRoRmFjdG9yIDogMC4xNFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbGFyZ2VJbWdXaWR0aEZhY3RvciA6IDAuMjUsXHJcbiAgICAgIHNtYWxsSW1nV2lkdGhGYWN0b3IgOiAwLjEyNVxyXG4gICAgfVxyXG4gIF07XHJcblxyXG4gIG5iSW1nVG9EZWxTZWxlY3RlZDogbnVtYmVyID0gMDtcclxuICBkaXNhYmxlOiBib29sZWFuID0gZmFsc2U7IC8vIFVzZSB0byBkaXNhYmxlIGFjdGlvbiBkdXJpbmcgc2VydmVyIHJlcXVlc3RcclxuICBkZWxMaXN0SW1nTG9hZGVyID0gZmFsc2U7XHJcbiAgaW5pdENvbXBvbmVudDogYm9vbGVhbiA9IHRydWU7XHJcbiAgZmFpbExvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGNvbmZpcm1JbWdTdXA6Ym9vbGVhbiA9IGZhbHNlO1xyXG4gIHByZXZpb3VzU2VhcmNoVmFsdWU6IHN0cmluZztcclxuXHJcbiAgZ2V0IHNlYXJjaEltYWdlc1BhcmFtZXRlcnMkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaW1nTWFuYWdlci5zZWFyY2hJbWFnZXNQYXJhbWV0ZXJzJDtcclxuICB9XHJcblxyXG4gIC8vIEFwaSBJbWcgbWFuYWdlciBQYXJhbXNcclxuICBwYXJhbXM6UGFyYW1zSW1nTWFuYWdlckRUTztcclxuXHJcbiAgcHJpdmF0ZSBlcnJvckdldEFsbEltZyA9ICdJbWdNYW5hZ2VyLkltZ0xpYi5lcnJvckdldEFsbEltZyc7XHJcbiAgcHJpdmF0ZSBlcnJvckdldFRvdGFsSW1nID0gJ0ltZ01hbmFnZXIuSW1nTGliLmVycm9yR2V0VG90YWxJbWcnO1xyXG4gIHByaXZhdGUgZXJyb3JHZXRJbWcgPSAnSW1nTWFuYWdlci5JbWdMaWIuZXJyb3JHZXRDYW52YUltZyc7XHJcbiAgcHJpdmF0ZSBlcnJvclJlbW92ZUltZyA9ICdJbWdNYW5hZ2VyLkltZ0xpc3QuZXJyb3JSZW1vdmVJbWcnO1xyXG5cclxuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgdm0kID0gY29tYmluZUxhdGVzdCh7XHJcbiAgICBpbWFnZVNlbGVjdGlvbjogdGhpcy5pbWdTZWxlY3Rpb25TZXJ2aWNlLmltZ1NlbGVjdGlvbiQsXHJcbiAgICBpbWFnZUxpc3REYXRhOiB0aGlzLmltZ01hbmFnZXIuaW1hZ2VMaXN0JCxcclxuICAgIGlzTG9hZGluZzogdGhpcy5pbWdNYW5hZ2VyLmlzTG9hZGluZyQsXHJcbiAgICBzZWFyY2hJbWFnZXNQYXJhbWV0ZXJzOiB0aGlzLmltZ01hbmFnZXIuc2VhcmNoSW1hZ2VzUGFyYW1ldGVycyQsXHJcbiAgfSkucGlwZShcclxuICAgIG1hcCgoe2ltYWdlU2VsZWN0aW9uLCBpbWFnZUxpc3REYXRhOiB7aW1hZ2VMaXN0LCBpbWFnZVRvdGFsfSwgaXNMb2FkaW5nLCBzZWFyY2hJbWFnZXNQYXJhbWV0ZXJzfSkgPT4ge1xyXG4gICAgICB0aGlzLmluaXRWYXJpYWJsZXModHJ1ZSk7XHJcbiAgICAgIHRoaXMuY2FsY3VsYXRlTmJJbWdGYWtlKGltYWdlTGlzdC5kYXRhLmxlbmd0aCk7XHJcbiAgICAgIGNvbnN0IHBpY3R1cmVzTGlzdCA9IHRoaXMuc2V0U2VsZWN0ZWRQcm9wZXJ0eShpbWFnZVNlbGVjdGlvbiwgaW1hZ2VMaXN0LmRhdGEpO1xyXG4gICAgICB0aGlzLnJlbmFtZVBpY3R1cmVTZXJ2aWNlLnNldFBpY3R1cmVzTGlzdChwaWN0dXJlc0xpc3QpO1xyXG5cclxuICAgICAgY29uc3QgdGFibGVGaWx0ZXJzIDogVGFibGVGaWx0ZXJzID0gdGhpcy5nZXRUYWJsZUZpbHRlcnMoc2VhcmNoSW1hZ2VzUGFyYW1ldGVycywgaW1hZ2VUb3RhbCk7XHJcbiAgICAgIGNvbnN0IGtlZXBJbWFnZXNEaXNwbGF5ZWQgPSAodGhpcy50YWJEaXNwbGF5ZWQgPT09ICdpbWctdXBsb2FkJyAmJiBzZWFyY2hJbWFnZXNQYXJhbWV0ZXJzLnBhZ2UgPT09ICcxJykgfHwgKHRoaXMudGFiRGlzcGxheWVkID09PSAnaW1hZ2VzLXZpZXcnICYmIGltYWdlTGlzdC5kYXRhLmxlbmd0aCAmJiBzZWFyY2hJbWFnZXNQYXJhbWV0ZXJzLnBhZ2UgPT09ICcxJyk7XHJcblxyXG4gICAgICBjb25zdCBza2lwU2V0SW1hZ2VzVG9EaXNwbGF5ID0gISFwaWN0dXJlc0xpc3Q/Lmxlbmd0aCAmJiB0aGlzLnRhYkRpc3BsYXllZCA9PT0gJ2ltZy11cGxvYWQnICYmIHNlYXJjaEltYWdlc1BhcmFtZXRlcnMucGFnZSA9PT0gJzEnO1xyXG4gICAgICBjb25zdCBoaWRlVW50aWxGZXRjaGVkRmlyc3RQYWdlSW1hZ2VzRm9yVGFiVXBsb2FkID0gdGhpcy50YWJEaXNwbGF5ZWQgPT09ICdpbWctdXBsb2FkJyAmJiAoc2VhcmNoSW1hZ2VzUGFyYW1ldGVycy5wYWdlICE9PSAnMScgfHwgaW1hZ2VMaXN0Py5wYWdlICE9PSAxKTtcclxuXHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgaXNMb2FkaW5nOiBoaWRlVW50aWxGZXRjaGVkRmlyc3RQYWdlSW1hZ2VzRm9yVGFiVXBsb2FkIHx8ICFrZWVwSW1hZ2VzRGlzcGxheWVkICYmIGlzTG9hZGluZyxcclxuICAgICAgICBkaXNwbGF5UGV4ZWxzUmVzdWx0czogIWlzTG9hZGluZyAmJiBpbWFnZVRvdGFsID09PSAwLFxyXG4gICAgICAgIHBpY3R1cmVzTGlzdCxcclxuICAgICAgICBpbWFnZVRvdGFsLFxyXG4gICAgICAgIHRhYmxlRmlsdGVycyxcclxuICAgICAgICBza2lwU2V0SW1hZ2VzVG9EaXNwbGF5XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGltZ01hbmFnZXI6IEltZ01hbmFnZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBpbWdFdmVudFNlcnZpY2U6IEltZ0V2ZW50U2VydmljZSxcclxuICAgIHByaXZhdGUgaW1nU2VsZWN0aW9uU2VydmljZTogSW1nU2VsZWN0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHVzZXJTZXR0aW5nc1NlcnZpY2U6IFVzZXJTZXR0aW5nc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlbmFtZVBpY3R1cmVTZXJ2aWNlOiBSZW5hbWVQaWN0dXJlU2VydmljZSxcclxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7IH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRUYWJsZUZpbHRlcnMoc2VhcmNoSW1hZ2VzUGFyYW1ldGVyczogYW55LCBpbWFnZVRvdGFsOiBhbnkpOiBUYWJsZUZpbHRlcnMge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgc29ydDogdW5kZWZpbmVkLFxyXG4gICAgICBvcmRlcjogdW5kZWZpbmVkLFxyXG4gICAgICBzZWFyY2hWYWx1ZTogc2VhcmNoSW1hZ2VzUGFyYW1ldGVycy5zZWFyY2gsXHJcbiAgICAgIHRvdGFsSXRlbXM6IGltYWdlVG90YWwsXHJcbiAgICAgIGl0ZW1zUGVyUGFnZTogcGFyc2VJbnQoc2VhcmNoSW1hZ2VzUGFyYW1ldGVycy5saW1pdCksXHJcbiAgICAgIGN1cnJlbnRQYWdlOiBwYXJzZUludChzZWFyY2hJbWFnZXNQYXJhbWV0ZXJzLnBhZ2UpXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy52bSQucGlwZShcclxuICAgICAgdGFrZSgxKSxcclxuICAgICAgZmlsdGVyKCh7c2tpcFNldEltYWdlc1RvRGlzcGxheX0pID0+ICFza2lwU2V0SW1hZ2VzVG9EaXNwbGF5KVxyXG4gICAgICApLnN1YnNjcmliZSgoe3RhYmxlRmlsdGVyc30pID0+e1xyXG4gICAgICAgICB0aGlzLnNldE5iSW1nVG9EaXNwbGF5KHRhYmxlRmlsdGVycylcclxuICAgICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHRydWUgOiBnbyB0byBsaXN0IGRpc3BsYXlcclxuICAgKiBmYWxzZSA6IGdvIHRvIG1vc2FpYyBkaXNwbGF5XHJcbiAgICogQHBhcmFtIGFjdGl2YXRlXHJcbiAgICovXHJcbiAgb25Td2l0Y2hGb3JtYXREaXNwbGF5ZWQoYWN0aXZhdGU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMubGlzdERpc3BsYXllZCA9IGFjdGl2YXRlO1xyXG4gICAgdGhpcy51c2VyU2V0dGluZ3NTZXJ2aWNlLnNldFVzZXJEaXNwbGF5UHJlZmVyZW5jZShhY3RpdmF0ZSk7XHJcbiAgICB0aGlzLmltZ0V2ZW50U2VydmljZS5lbWl0bGlzdERpc3BsYXllZENoYW5nZShhY3RpdmF0ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDYWxjdWwgdGhlIG51bWJlciBvZiBpbWcgc2VsZWN0ZWQgZm9yIG1hc3NlIGRlbGV0aW9uXHJcbiAgICovXHJcbiAgb25JbWdTZWxlY3RlZChwaWN0dXJlc0xpc3Q6IEltZ1BpY3R1cmVEVE9bXSkge1xyXG4gICAgdGhpcy5zZXROYkltZ1RvRGVsU2VsZWN0ZWQocGljdHVyZXNMaXN0KTtcclxuICB9XHJcblxyXG4gIG9uUmVuYW1lUGljdHVyZShwaWN0dXJlUmVuYW1lZDogUGljdHVyZU5hbWVVcGRhdGUpIHtcclxuICAgIHRoaXMucmVuYW1lUGljdHVyZVNlcnZpY2UucmVuYW1lUGljdHVyZShwaWN0dXJlUmVuYW1lZCk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVMaXN0SW1nKHBpY3R1cmVzTGlzdDogSW1nUGljdHVyZURUT1tdKSB7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuZGlzYWJsZSA9IHRydWU7XHJcbiAgICB0aGlzLmRlbExpc3RJbWdMb2FkZXIgPSB0cnVlO1xyXG4gICAgdGhpcy5jb25maXJtSW1nU3VwID0gZmFsc2U7XHJcblxyXG4gICAgLy8gR2V0IHRoZSBpZCBvZiB0aGUgaW1nIHRvIHJlbW92ZVxyXG4gICAgLy8gQW5kIGFkZCBkZWxldGVkIHByb3BlcnR5XHJcbiAgICBjb25zdCBpZEltZ1RvUmVtb3ZlOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgcGljdHVyZXNMaXN0LmZvckVhY2goIGltZyA9PiB7XHJcbiAgICAgIGlmIChpbWcuZGVsU2VsZWN0ZWQpIHtcclxuICAgICAgICBpbWcuZGVsZXRlZCA9IHRydWU7XHJcbiAgICAgICAgaWRJbWdUb1JlbW92ZS5wdXNoKGltZy5pZF9maWxlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5pbWdNYW5hZ2VyLnJlbW92ZU11bHRpcGxlSW1nKGlkSW1nVG9SZW1vdmUpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICB0aGlzLmltZ1NlbGVjdGlvblNlcnZpY2UucmVtb3ZlSW1nU2VsZWN0aW9uQnlJZHMoaWRJbWdUb1JlbW92ZSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiBlcnJvciA9PiB7XHJcbiAgICAgICAgdGhpcy5pbWdNYW5hZ2VyLnJlZnJlc2hJbWFnZUxpc3QkLm5leHQoKTtcclxuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5vcGVuQWxlcnQodGhpcy5lcnJvclJlbW92ZUltZyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0SW1nQ2hvc2VuKHBpY3R1cmVzTGlzdDogSW1nUGljdHVyZURUT1tdKSB7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHBpY3R1cmVzTGlzdFNlbGVjdGVkOiBJbWdQaWN0dXJlRFRPW10gPSBbXTtcclxuICAgIHBpY3R1cmVzTGlzdC5tYXAoaW1nID0+IHtcclxuICAgICAgaWYoaW1nLmRlbFNlbGVjdGVkKSB7XHJcbiAgICAgICAgaW1nLmRlbFNlbGVjdGVkID1mYWxzZTtcclxuICAgICAgICBpbWcuc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChpbWcuc2VsZWN0ZWQpIHtcclxuICAgICAgICBwaWN0dXJlc0xpc3RTZWxlY3RlZC5wdXNoKGltZyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5zZXROYkltZ1RvRGVsU2VsZWN0ZWQocGljdHVyZXNMaXN0KTtcclxuICAgIHRoaXMuaW1nU2VsZWN0aW9uU2VydmljZS5zZXRJbWdTZWxlY3Rpb24ocGljdHVyZXNMaXN0U2VsZWN0ZWQpO1xyXG4gIH1cclxuXHJcbiAgZGlzcGxheUNvbmZpcm1JbWdTdXAoKXtcclxuICAgIGlmICh0aGlzLmRpc2FibGUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jb25maXJtSW1nU3VwID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGNhbmNlbFN1cCgpIHtcclxuICAgIHRoaXMuY29uZmlybUltZ1N1cCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXZlbnQgZW1pdCB3aGVuIGEgaW1nIHNlbGVjdGVkIGluIG9yZGVyIHRvIGRlbGV0ZVxyXG4gICAqL1xyXG4gIG9uUGljdHVyZXNMaXN0Q2hhbmdlKHBpY3R1cmVzTGlzdDogSW1nUGljdHVyZURUT1tdKSB7XHJcbiAgICB0aGlzLnNldE5iSW1nVG9EZWxTZWxlY3RlZChwaWN0dXJlc0xpc3QpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IGRlZmF1bHQgbnVtYmVyIG9mIGltZyBwZXIgcGFnZSB0byBkaXNwbGF5IGF0IHRoZSBpbml0aWFsaXNhdGlvblxyXG4gICAqIFRoaXMgbnVtYmVyIGlzIGJldHdlZW4gMzAgYW5kIDUwXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXROYkltZ1RvRGlzcGxheSh0YWJsZUZpbHRlcnM6IFRhYmxlRmlsdGVycykge1xyXG4gICAgY29uc3QgY29udGFpbmVyV2lkdGggPSB0aGlzLmltZ0xpYkNvbnRhaW5lci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoICsgMzA7IC8vICsgMzBweCAtPiBsZWZ0ICsgcmlnaHQgbWFyZ2luXHJcbiAgICBjb25zdCBzY3JvbGxXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoIC0gZG9jdW1lbnQuYm9keS5vZmZzZXRXaWR0aDtcclxuXHJcbiAgICBjb25zdCBbbWF4SW1nV2lkdGhGYWN0b3IsIG1pbkltZ1dpZHRoRmFjdG9yXSA9IHRoaXMuZ2V0SW1nV2lkdGhGYWN0b3JzKCk7XHJcblxyXG4gICAgY29uc3QgbWluSW1nV2lkdGggPSBNYXRoLmZsb29yKGNvbnRhaW5lcldpZHRoICogbWluSW1nV2lkdGhGYWN0b3IpO1xyXG4gICAgY29uc3QgbWF4SW1nV2lkdGggPSBNYXRoLmNlaWwoKGNvbnRhaW5lcldpZHRoICsgc2Nyb2xsV2lkdGggKSAqIG1heEltZ1dpZHRoRmFjdG9yKTtcclxuXHJcbiAgICB0aGlzLm5iTWF4SW1nUGVyTGluZSA9IE1hdGguZmxvb3IoY29udGFpbmVyV2lkdGggLyBtaW5JbWdXaWR0aCk7XHJcbiAgICB0aGlzLm5iTWluSW1nUGVyTGluZSA9IE1hdGguZmxvb3IoIChjb250YWluZXJXaWR0aCArIHNjcm9sbFdpZHRoICkgLyBtYXhJbWdXaWR0aCk7XHJcblxyXG4gICAgdGhpcy5zZWFyY2hJbWFnZXNQYXJhbWV0ZXJzJC5uZXh0KHRoaXMuZ2V0UGFyYW1zKHtcclxuICAgICAgLi4udGFibGVGaWx0ZXJzLFxyXG4gICAgICBpdGVtc1BlclBhZ2U6IHRoaXMuZ2V0VG90YWxJbWdQZXJQYWdlKCksXHJcbiAgICAgIGN1cnJlbnRQYWdlOiAxXHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEltZ1dpZHRoRmFjdG9ycygpOiBudW1iZXJbXSB7XHJcbiAgICBjb25zdCBzY3JlZW5XaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xyXG4gICAgbGV0IG1pbldpZHRoOm51bWJlciA9IDA7XHJcbiAgICBsZXQgaW1nU2l6ZXNDb25maWc6IG51bWJlcltdID0gW107XHJcblxyXG4gICAgY29uc3QgY3VycmVudEltZ1dpZHRoQ29uZmlnID0gdGhpcy5mdWxsU2l6ZSA/IHRoaXMuaW1nRnVsbFdpZHRoQ29uZmlnIDogdGhpcy5pbWdXaWR0aENvbmZpZztcclxuXHJcbiAgICBmb3IgKGNvbnN0IHdpZHRoQ29uZmlnIG9mIGN1cnJlbnRJbWdXaWR0aENvbmZpZykge1xyXG4gICAgICAgIGlmICghd2lkdGhDb25maWcubWF4KSB7XHJcbiAgICAgICAgICBpbWdTaXplc0NvbmZpZyA9IFt3aWR0aENvbmZpZy5sYXJnZUltZ1dpZHRoRmFjdG9yLCB3aWR0aENvbmZpZy5zbWFsbEltZ1dpZHRoRmFjdG9yXTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWluV2lkdGggPCBzY3JlZW5XaWR0aCAmJiBzY3JlZW5XaWR0aCA8PSB3aWR0aENvbmZpZy5tYXgpIHtcclxuICAgICAgICAgIGltZ1NpemVzQ29uZmlnID0gW3dpZHRoQ29uZmlnLmxhcmdlSW1nV2lkdGhGYWN0b3IsIHdpZHRoQ29uZmlnLnNtYWxsSW1nV2lkdGhGYWN0b3JdO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG1pbldpZHRoID0gd2lkdGhDb25maWcubWF4O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGltZ1NpemVzQ29uZmlnO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRUb3RhbEltZ1BlclBhZ2UoKTogbnVtYmVyIHtcclxuICAgIGlmICh0aGlzLm5iUm93VG9TaG93KSB7XHJcbiAgICAgIGNvbnN0IG5iSW1nUGVyTGluZSA9IHRoaXMuc3RhdGVEaXNwbGF5ZWQgPT09ICdmdWxsJyA/IHRoaXMubmJNaW5JbWdQZXJMaW5lIDogdGhpcy5uYk1heEltZ1BlckxpbmU7XHJcbiAgICAgIHJldHVybiBuYkltZ1BlckxpbmUgKiB0aGlzLm5iUm93VG9TaG93O1xyXG4gICAgfVxyXG5cclxuICAgIGxldCB0b3RhbCA9IHRoaXMubmJNaW5JbWdQZXJMaW5lO1xyXG5cclxuICAgIHdoaWxlICh0b3RhbCA8IDMwIHx8IHRvdGFsICUgdGhpcy5uYk1heEltZ1BlckxpbmUgIT09IDAgfHwgIHRvdGFsICUgdGhpcy5uYk1pbkltZ1BlckxpbmUgIT09IDApIHtcclxuICAgICAgdG90YWwgKz0gdGhpcy5uYk1pbkltZ1BlckxpbmU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRvdGFsO1xyXG4gIH1cclxuXHJcbiAgZ2V0UGFyYW1zKHRhYmxlRmlsdGVyczogVGFibGVGaWx0ZXJzKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBsaW1pdDogdGFibGVGaWx0ZXJzLml0ZW1zUGVyUGFnZS50b1N0cmluZygpLFxyXG4gICAgICBwYWdlOiB0YWJsZUZpbHRlcnMuY3VycmVudFBhZ2UudG9TdHJpbmcoKSxcclxuICAgICAgIC4uLih0YWJsZUZpbHRlcnMuc2VhcmNoVmFsdWUgJiYgeyBzZWFyY2g6IHRhYmxlRmlsdGVycy5zZWFyY2hWYWx1ZS50b1N0cmluZygpIH0pLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdFZhcmlhYmxlcyhsb2FkaW5nU3VjY2VzczogYm9vbGVhbikge1xyXG4gICAgdGhpcy5uYkltZ1RvRGVsU2VsZWN0ZWQgPSAwO1xyXG4gICAgdGhpcy5kaXNhYmxlID0gZmFsc2U7XHJcbiAgICB0aGlzLmRlbExpc3RJbWdMb2FkZXIgPSBmYWxzZTtcclxuICAgIHRoaXMuaW5pdENvbXBvbmVudCA9IGZhbHNlO1xyXG4gICAgdGhpcy5mYWlsTG9hZGVkID0gIWxvYWRpbmdTdWNjZXNzO1xyXG4gICAgdGhpcy5uYkZha2VJbWcgPSAwO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRTZWxlY3RlZFByb3BlcnR5KGltZ1NlbGVjdGVkTGlzdDogSW1nUGljdHVyZURUT1tdLCBwaWN0dXJlc0xpc3Q6IEltZ1BpY3R1cmVEVE9bXSkge1xyXG4gICAgY29uc3QgcGljdHVyZXNMaXN0U2VsZWN0ZWQ6IEltZ1BpY3R1cmVEVE9bXSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocGljdHVyZXNMaXN0KSk7XHJcbiAgICBpbWdTZWxlY3RlZExpc3QuZm9yRWFjaChpbWcgPT4ge1xyXG4gICAgICBjb25zdCBzZWxlY3RlZEltZyA9IHBpY3R1cmVzTGlzdFNlbGVjdGVkLmZpbmQocGljdHVyZSA9PiBwaWN0dXJlLmlkX2ZpbGUgPT09IGltZy5pZF9maWxlKTtcclxuICAgICAgaWYgKHNlbGVjdGVkSW1nKSB7XHJcbiAgICAgICAgc2VsZWN0ZWRJbWcuc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBwaWN0dXJlc0xpc3RTZWxlY3RlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCBhIGltZyBsaXN0IGluIG9yZGVyIHRvIGZpbGwgcHJvcGVybHkgYWxsIHRoZSBsaW5lIG9mIGltYWdlcyBkaXNwbGF5ZWQgaW4gbW9zYWljLlxyXG4gICAqIE90aGVyd2lzZSwgdGhlIHNwYWNlLWJldHdlZW4gY3NzIHdpbGwgZG8gYSBiYWQgZGlzcGxheVxyXG4gICAqL1xyXG4gIHByaXZhdGUgY2FsY3VsYXRlTmJJbWdGYWtlKG5iSW1nRGlzcGxheWVkOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IG5iSW1nUGVyTGluZSA9IHRoaXMuc3RhdGVEaXNwbGF5ZWQgPT09ICdzbWFsbCcgfHwgdGhpcy50YWJEaXNwbGF5ZWQgPT09ICdpbWctdXBsb2FkJyA/IHRoaXMubmJNYXhJbWdQZXJMaW5lIDogdGhpcy5uYk1pbkltZ1BlckxpbmU7XHJcblxyXG4gICAgaWYgKGlzTmFOKG5iSW1nRGlzcGxheWVkICUgbmJJbWdQZXJMaW5lKSkge1xyXG4gICAgICB0aGlzLm5iRmFrZUltZyA9IDA7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobmJJbWdEaXNwbGF5ZWQgJSBuYkltZ1BlckxpbmUgIT09IDApIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5uYkZha2VJbWcgPSBuYkltZ1BlckxpbmUgLSBuYkltZ0Rpc3BsYXllZCAlIG5iSW1nUGVyTGluZTtcclxuICAgICAgfSwgMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldE5iSW1nVG9EZWxTZWxlY3RlZCAocGljdHVyZXNMaXN0OiBJbWdQaWN0dXJlRFRPW10pIHtcclxuICAgIHRoaXMubmJJbWdUb0RlbFNlbGVjdGVkID0gcGljdHVyZXNMaXN0LmZpbHRlcihpbWcgPT4gaW1nLmRlbFNlbGVjdGVkKS5sZW5ndGg7XHJcblxyXG4gICAgaWYgKCF0aGlzLm5iSW1nVG9EZWxTZWxlY3RlZCkge1xyXG4gICAgICB0aGlzLmNvbmZpcm1JbWdTdXAgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN3aXRjaERpc3BsYXlXaW5kb3dNb3NhaWMoKSB7XHJcbiAgICB0aGlzLnN3aXRjaERpc3BsYXlXaW5kb3cuZW1pdCh0cnVlKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJ2bSQgfCBhc3luYyBhcyB2bVwiPlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiaW1hZ2VzLXZpZXdcIiBbbmdDbGFzc109XCJ7J2Z1bGxTaXplJzogZnVsbFNpemUsICdzbWFsbCc6IHN0YXRlRGlzcGxheWVkID09PSAnc21hbGwnfVwiIFtAZWFzZUluT3V0XT1cIidpbidcIj5cclxuICAgIDwhLS0gU3ViaGVhZGVyIDogSW1nIG51bWJlciBhbmQgYWN0aW9ucyBidG4gKHN1cCBpbWcgbGlzdCwgc3dpdGNoIGZvcm1hIGRpc3BsYXkpIC0tPlxyXG4gICAgPGRpdlxyXG4gICAgKm5nSWY9XCIoc3RhdGVEaXNwbGF5ZWQgIT09ICdzbWFsbCcgfHwgdGFiRGlzcGxheWVkID09PSAnaW1nLXVwbG9hZCcpXCJcclxuICAgIGNsYXNzPVwiaW1hZ2VzLXZpZXdfX2NvbnRhaW5lclwiXHJcbiAgICBbbmdDbGFzc109XCJ7J2ltYWdlcy12aWV3X19jb250YWluZXItLXVwbG9hZFRhYic6IHRhYkRpc3BsYXllZCA9PT0gJ2ltZy11cGxvYWQnLCAnaW1hZ2VzLXZpZXdfX2NvbnRhaW5lci0td2luZG93Jzogc3RhdGVEaXNwbGF5ZWQgPT09ICd3aW5kb3cnfVwiXHJcbiAgICA+XHJcblxyXG4gICAgICA8ZGl2ICpuZ0lmPVwidGFiRGlzcGxheWVkICE9PSAnaW1nLXVwbG9hZCdcIj5cclxuICAgICAgICAgIDxwIGNsYXNzPVwibWFpbkNvbG9yXCIgW25nQ2xhc3NdPVwieydpbWFnZXMtdmlld19fY29udGFpbmVyX190b3RhbC0taGlkZSc6IHZtLmRpc3BsYXlQZXhlbHNSZXN1bHRzfVwiPnt7ICdJbWdNYW5hZ2VyLkltZ0xpYi5uYkltZycgfCB0cmFuc2xhdGUgfX0gOiB7e3ZtLmltYWdlVG90YWx9fTwvcD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJ0YWJEaXNwbGF5ZWQgPT09ICdpbWctdXBsb2FkJ1wiPlxyXG4gICAgICAgICAgPHAgY2xhc3M9XCJtYWluQ29sb3JcIj57eyAnSW1nTWFuYWdlci5JbWdMaWIubGFzdEltZ3MnIHwgdHJhbnNsYXRlIH19PC9wPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBoYXMtYWRkb25zIHN1YkhlYWRlckFjdGlvbnNcIiAqbmdJZj1cInRhYkRpc3BsYXllZCAhPT0gJ2ltZy11cGxvYWQnXCI+XHJcblxyXG4gICAgICAgICAgPCEtLSBGb3IgbGlzdGZvcm1hIDogRGlzcGxheSBidG4gZGVsIG11bHRpcGxlIGltZyAmIENvbmZpcm0gYWN0aW9uIC0tPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImltYWdlcy12aWV3X19jb250YWluZXJfX2JveEFjdGlvblwiPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBTZWxlY3QgLS0+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidXR0b24gc3VjY2VzcyBpbWFnZXMtdmlld19fY29udGFpbmVyX19ib3hBY3Rpb25fX2ltcG9ydFwiXHJcbiAgICAgICAgICAgICAgICBAaW5zZXJ0UmVtb3ZlQW5uaW1cclxuICAgICAgICAgICAgICAgICpuZ0lmPVwibGlzdERpc3BsYXllZCAmJiBuYkltZ1RvRGVsU2VsZWN0ZWQgJiYgIWNvbmZpcm1JbWdTdXAgJiYgIWRlbExpc3RJbWdMb2FkZXIgJiYgbXVsdGlwbGVJbWdNb2RlXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RJbWdDaG9zZW4odm0ucGljdHVyZXNMaXN0KVwiXHJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYWwgZmEtY2hlY2tcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgIHt7ICdJbWdNYW5hZ2VyLkltZ0xpYi5zZWxlY3QnIHwgdHJhbnNsYXRlIH19ICh7e25iSW1nVG9EZWxTZWxlY3RlZH19KVxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIERpc3BsYXkgYnRuIGRlbCBtdWx0aXBsZSBpbWcgLS0+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJsaXN0RGlzcGxheWVkICYmIG5iSW1nVG9EZWxTZWxlY3RlZCAmJiAhY29uZmlybUltZ1N1cFwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGlzcGxheUNvbmZpcm1JbWdTdXAoKVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ1dHRvbiBpbWFnZXMtdmlld19fY29udGFpbmVyX19ib3hBY3Rpb25fX2RlbEJ0biBkYW5nZXJcIlxyXG4gICAgICAgICAgICAgICAgQGluc2VydFJlbW92ZUFubmltXHJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFsIGZhLXRpbWVzXCI+PC9pPnt7ICdJbWdNYW5hZ2VyLkltZ0xpYi5kZWxNbHQnIHwgdHJhbnNsYXRlIH19ICh7e25iSW1nVG9EZWxTZWxlY3RlZH19KVxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBidG5Mb2FkaW5nQW5pbSAqbmdJZj1cImRlbExpc3RJbWdMb2FkZXJcIiBjbGFzcz1cImJ0bkxvYWRpbmdBbm5pbWF0aW9uXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIENvbmZpcm0gYWN0aW9uIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaW1hZ2VzLXZpZXdfX2NvbnRhaW5lcl9fYm94QWN0aW9uX19jb25maXJtU3VwXCJcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaW1hZ2VzLXZpZXdfX2NvbnRhaW5lcl9fYm94QWN0aW9uX19jb25maXJtU3VwLS12aXNpYmxlJzogY29uZmlybUltZ1N1cH1cIj5cclxuICAgICAgICAgICAgICAgICAgPHAgKm5nSWY9XCJuYkltZ1RvRGVsU2VsZWN0ZWQgPiAxXCIgY2xhc3M9XCJpbWFnZXMtdmlld19fY29udGFpbmVyX19ib3hBY3Rpb25fX2NvbmZpcm1TdXBfX3RleHRcIj57eyAnSW1nTWFuYWdlci5JbWdMaWIuY29uZmlybVN1cFF1ZXN0aW9ucycgfCB0cmFuc2xhdGU6e25iSW1hZ2U6IG5iSW1nVG9EZWxTZWxlY3RlZH0gfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwibmJJbWdUb0RlbFNlbGVjdGVkID09PSAxXCIgY2xhc3M9XCJpbWFnZXMtdmlld19fY29udGFpbmVyX19ib3hBY3Rpb25fX2NvbmZpcm1TdXBfX3RleHRcIj57eyAnSW1nTWFuYWdlci5JbWdMaWIuY29uZmlybVN1cFF1ZXN0aW9uJyB8IHRyYW5zbGF0ZTp7bmJJbWFnZTogbmJJbWdUb0RlbFNlbGVjdGVkfSB9fTwvcD5cclxuICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidXR0b24gaW1hZ2VzLXZpZXdfX2NvbnRhaW5lcl9fYm94QWN0aW9uX19jb25maXJtU3VwX19jYW5jZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2FuY2VsU3VwKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ0ltZ01hbmFnZXIuSW1nTGliLmNhbmNlbCcgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlTGlzdEltZyh2bS5waWN0dXJlc0xpc3QpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidXR0b24gaW1hZ2VzLXZpZXdfX2NvbnRhaW5lcl9fZGVsQnRuIGRhbmdlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAnSW1nTWFuYWdlci5JbWdMaWIuY29uZmlybScgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICAgIDwhLS0gU3dpdGggbW9zYWljL2xpc3QgZm9ybWEgLS0+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQgaGFzLWFkZG9ucyBpbWFnZXMtdmlld19fY29udGFpbmVyX19idXR0b25Cb3hcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidXR0b24gaXMtbGlnaHRlZCBpbWFnZXMtdmlld19fY29udGFpbmVyX19idXR0b25Cb3hfX2J0blwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydhY3RpZkRpc3BsYXllZCc6ICFsaXN0RGlzcGxheWVkfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uU3dpdGNoRm9ybWF0RGlzcGxheWVkKGZhbHNlKVwiXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbiBpcy1zbWFsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLXNvbGlkIGZhLXRoXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbiBpcy1saWdodGVkIGltYWdlcy12aWV3X19jb250YWluZXJfX2J1dHRvbkJveF9fYnRuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2FjdGlmRGlzcGxheWVkJzogbGlzdERpc3BsYXllZH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblN3aXRjaEZvcm1hdERpc3BsYXllZCh0cnVlKVwiXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24gaXMtc21hbGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1iYXJzXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG5cclxuICAgIDwhLS0gSW1hZ2VzIHNlY3Rpb24gLS0+XHJcbiAgPG5nLXNjcm9sbGJhclxyXG4gICAgY2xhc3M9XCJpbWFnZXMtdmlld19fc2Nyb2xsXCJcclxuICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgJ2ltYWdlcy12aWV3X19zY3JvbGwtLWhpZGUtLW1vc2FpYyc6IHZtLmRpc3BsYXlQZXhlbHNSZXN1bHRzICYmICFsaXN0RGlzcGxheWVkLFxyXG4gICAgICAnaW1hZ2VzLXZpZXdfX3Njcm9sbC0taGlkZS0tdGFibGUnOiB2bS5kaXNwbGF5UGV4ZWxzUmVzdWx0cyAmJiBsaXN0RGlzcGxheWVkLFxyXG4gICAgICAnaW1hZ2VzLXZpZXdfX3Njcm9sbC0tZnVsbCc6IHN0YXRlRGlzcGxheWVkID09PSAnZnVsbCcsXHJcbiAgICAgICdpbWFnZXMtdmlld19fc2Nyb2xsLS1zbWFsbERpc3BsYXknIDogc3RhdGVEaXNwbGF5ZWQgPT09ICdzbWFsbCcgJiYgdGFiRGlzcGxheWVkICE9PSAnaW1nLXVwbG9hZCcsXHJcbiAgICAgICdpbWFnZXMtdmlld19fc2Nyb2xsLS1zbWFsbFVwbG9hZERpc3BsYXknIDogc3RhdGVEaXNwbGF5ZWQgPT09ICdzbWFsbCcgJiYgdGFiRGlzcGxheWVkID09PSAnaW1nLXVwbG9hZCcsXHJcbiAgICAgICdpbWFnZXMtdmlld19fc2Nyb2xsLS13aW5kb3cnOiBzdGF0ZURpc3BsYXllZCA9PT0gJ3dpbmRvdydcclxuICB9XCJcclxuICA+XHJcbiAgICA8ZGl2ICNpbWdMaWJDb250YWluZXIgY2xhc3M9XCJpbWFnZXMtdmlld19fd3JhcHBlclwiPlxyXG5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIWxpc3REaXNwbGF5ZWQgfHwgc3RhdGVEaXNwbGF5ZWQgPT09ICdzbWFsbCdcIiBbQGVhc2VJbk91dF09XCInaW4nXCI+XHJcbiAgICAgICAgICA8bW9zYWljLXZpZXdcclxuICAgICAgICAgICAgW3BpY3R1cmVzTGlzdF09XCJ2bS5waWN0dXJlc0xpc3RcIlxyXG4gICAgICAgICAgICAocGljdHVyZXNMaXN0Q2hhbmdlKT1cIm9uUGljdHVyZXNMaXN0Q2hhbmdlKHZtLnBpY3R1cmVzTGlzdClcIlxyXG4gICAgICAgICAgICBbdGFibGVGaWx0ZXJzXT1cInZtLnRhYmxlRmlsdGVyc1wiXHJcbiAgICAgICAgICAgIChmaWx0ZXJzQ2hhbmdlKT1cInNlYXJjaEltYWdlc1BhcmFtZXRlcnMkLm5leHQoZ2V0UGFyYW1zKHZtLnRhYmxlRmlsdGVycykpO1wiXHJcbiAgICAgICAgICAgIFsoZGlzYWJsZSldPVwiZGlzYWJsZVwiXHJcbiAgICAgICAgICAgIChwaWN0dXJlTmFtZUNoYW5nZSk9XCJvblJlbmFtZVBpY3R1cmUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIChzd2l0Y2hEaXNwbGF5V2luZG93KT1cInN3aXRjaERpc3BsYXlXaW5kb3dNb3NhaWMoKVwiXHJcbiAgICAgICAgICAgIFtuYkZha2VJbWddPVwibmJGYWtlSW1nXCJcclxuICAgICAgICAgICAgW3N0YXRlRGlzcGxheWVkXT1cInN0YXRlRGlzcGxheWVkXCJcclxuICAgICAgICAgICAgW3RhYkRpc3BsYXllZF09XCJ0YWJEaXNwbGF5ZWRcIlxyXG4gICAgICAgICAgICBbZGlzcGxheVBleGVsc1Jlc3VsdHNdPVwidm0uZGlzcGxheVBleGVsc1Jlc3VsdHNcIlxyXG4gICAgICAgICAgICBbaXNMb2FkaW5nXT1cInZtLmlzTG9hZGluZ1wiXHJcbiAgICAgICAgICAgIFtmdWxsU2l6ZV09XCJmdWxsU2l6ZVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICA8L21vc2FpYy12aWV3PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwibGlzdERpc3BsYXllZCAmJiBzdGF0ZURpc3BsYXllZCAhPT0gJ3NtYWxsJ1wiIFtAZWFzZUluT3V0XT1cIidpbidcIj5cclxuICAgICAgICAgIDx0YWJsZS12aWV3XHJcbiAgICAgICAgICAgIFtwaWN0dXJlc0xpc3RdPVwidm0ucGljdHVyZXNMaXN0XCJcclxuICAgICAgICAgICAgKHBpY3R1cmVzTGlzdENoYW5nZSk9XCJvblBpY3R1cmVzTGlzdENoYW5nZSh2bS5waWN0dXJlc0xpc3QpXCJcclxuICAgICAgICAgICAgW3RhYmxlRmlsdGVyc109XCJ2bS50YWJsZUZpbHRlcnNcIlxyXG4gICAgICAgICAgICAoZmlsdGVyc0NoYW5nZSk9XCJzZWFyY2hJbWFnZXNQYXJhbWV0ZXJzJC5uZXh0KGdldFBhcmFtcyh2bS50YWJsZUZpbHRlcnMpKTtcIlxyXG4gICAgICAgICAgICBbKGRpc2FibGUpXT1cImRpc2FibGVcIlxyXG4gICAgICAgICAgICAocGljdHVyZU5hbWVDaGFuZ2UpPVwib25SZW5hbWVQaWN0dXJlKCRldmVudClcIlxyXG4gICAgICAgICAgICBbZGlzcGxheVBleGVsc1Jlc3VsdHNdPVwidm0uZGlzcGxheVBleGVsc1Jlc3VsdHNcIlxyXG4gICAgICAgICAgICBbc3RhdGVEaXNwbGF5ZWRdPVwic3RhdGVEaXNwbGF5ZWRcIlxyXG4gICAgICAgICAgICBbaXNMb2FkaW5nXT1cInZtLmlzTG9hZGluZ1wiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgIDwvdGFibGUtdmlldz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctc2Nyb2xsYmFyPlxyXG5cclxuICA8IS0tIFBleGVscyBTZWN0aW9uIC0gV2hlbiBubyBpbWcgZm91bmQgLS0+XHJcbiAgPGRpdlxyXG4gICAgKm5nSWY9XCJ2bS5kaXNwbGF5UGV4ZWxzUmVzdWx0c1wiXHJcbiAgICBjbGFzcz1cImltYWdlcy12aWV3LS1wZXhlbHNcIlxyXG4gICAgW0BlYXNlSW5PdXRdPVwiJ2luJ1wiPlxyXG4gICAgPHBleGVscy1saWJcclxuICAgICAgW3NlYXJjaFZhbHVlXT1cInZtLnRhYmxlRmlsdGVycy5zZWFyY2hWYWx1ZVwiXHJcbiAgICAgIFtkaXNhYmxlU2VhcmNoXT1cInRydWVcIlxyXG4gICAgPlxyXG4gICAgPC9wZXhlbHMtbGliPlxyXG4gIDwvZGl2PlxyXG48L25nLWNvbnRhaW5lcj5cclxuIl19
372
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2VzLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd3otaW1nLW1hbmFnZXIvc3JjL2xpYi9jb21wb25lbnRzL2ltYWdlcy12aWV3L2ltYWdlcy12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3d6LWltZy1tYW5hZ2VyL3NyYy9saWIvY29tcG9uZW50cy9pbWFnZXMtdmlldy9pbWFnZXMtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFpQixNQUFNLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRTlILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBQyxPQUFPLEVBQUUsYUFBYSxFQUFrQixNQUFNLE1BQU0sQ0FBQztBQUM3RCxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQU8sTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFHM0UsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQzdFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUVyRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFVNUQsTUFB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QUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDOztnSEExWFUsbUJBQW1CO29HQUFuQixtQkFBbUIsa2FDeEJoQyxpaVJBd0xBLDQ3RERyS2M7UUFDVixTQUFTO1FBQ1QsWUFBWTtLQUNiOzJGQUVVLG1CQUFtQjtrQkFSL0IsU0FBUzsrQkFDRSxhQUFhLGNBRVg7d0JBQ1YsU0FBUzt3QkFDVCxZQUFZO3FCQUNiO3dTQUlRLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUVOLG1CQUFtQjtzQkFEbEIsTUFBTTtnQkFHdUIsZUFBZTtzQkFBNUMsU0FBUzt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgSW5wdXQsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgQWZ0ZXJWaWV3SW5pdCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIENoYW5nZURldGVjdG9yUmVmfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSW1nUGljdHVyZURUTywgUGFyYW1zSW1nTWFuYWdlckRUTyB9IGZyb20gJy4uLy4uL2R0by9pbWctbWFuYWdlci5kdG8nO1xyXG5pbXBvcnQgeyBJbWdNYW5hZ2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ltZy1tYW5hZ2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQge1N1YmplY3QsIGNvbWJpbmVMYXRlc3QsIEJlaGF2aW9yU3ViamVjdH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGZpbHRlciwgbWFwLCB0YWtlLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEltZ0V2ZW50U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ltZy1ldmVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSW1nU2VsZWN0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ltZy1zZWxlY3Rpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFVzZXJTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy91c2VyLXNldHRpbmdzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUYWJsZUZpbHRlcnMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90YWJsZS9maWx0ZXJzLXRhYmxlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQaWN0dXJlTmFtZVVwZGF0ZSB9IGZyb20gJy4uLy4uL2R0by9waWN0dXJlLW5hbWUtdXBkYXRlLmR0byc7XHJcbmltcG9ydCB7IGVhc2VJbk91dCB9IGZyb20gJy4uLy4uL2FuaW1hdGlvbnMvZWFzZUluT3V0L2Vhc2UtaW4tb3V0LmFuaW1hdGlvbic7XHJcbmltcG9ydCB7IGluc2VydFJlbW92ZSB9IGZyb20gJy4uLy4uL2FuaW1hdGlvbnMvaW5zZXJ0UmVtb3ZlL2luc2VydC1yZW1vdmUuYW5pbWF0aW9uJztcclxuaW1wb3J0IHsgc3RhdGVEaXNwbGF5ZWQsIHRhYkRpc3BsYXllZCB9IGZyb20gJy4uLy4uL2R0by9leHBvcnQtZHRvcy5hcGknO1xyXG5pbXBvcnQgeyBSZW5hbWVQaWN0dXJlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlbmFtZS1waWN0dXJlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hbGVydC5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaW1hZ2VzLXZpZXcnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9pbWFnZXMtdmlldy5jb21wb25lbnQuaHRtbCcsXHJcbiAgYW5pbWF0aW9uczogW1xyXG4gICAgZWFzZUluT3V0LFxyXG4gICAgaW5zZXJ0UmVtb3ZlXHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW1hZ2VzVmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xyXG5cclxuICBASW5wdXQoKSBzdGF0ZURpc3BsYXllZDogc3RhdGVEaXNwbGF5ZWQ7XHJcbiAgQElucHV0KCkgdGFiRGlzcGxheWVkOiB0YWJEaXNwbGF5ZWQ7XHJcbiAgQElucHV0KCkgZnVsbFNpemU6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgbmJSb3dUb1Nob3c6IG51bWJlcjtcclxuICBASW5wdXQoKSBsaXN0RGlzcGxheWVkID0gZmFsc2U7IC8vIERpc3BsYXkgZm9ybWF0IGxpc3Qgb3IgbW9zYWljXHJcbiAgQElucHV0KCkgbXVsdGlwbGVJbWdNb2RlID0gZmFsc2U7XHJcbiAgQE91dHB1dCgpXHJcbiAgc3dpdGNoRGlzcGxheVdpbmRvdzogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBAVmlld0NoaWxkKCdpbWdMaWJDb250YWluZXInKSBpbWdMaWJDb250YWluZXI6IEVsZW1lbnRSZWY7XHJcbiAgd2lkdGhMYXJnZUNhcmQ6IG51bWJlciA9IDIxOTsgLy8gRGVmYXVsdCB2YWx1ZSBvZiBhIGNhcmQgd2lkdGggMTk5ICsgbWFyZ2luIDIwXHJcbiAgd2lkdGhTbWFsbENhcmQ6IG51bWJlciA9IDE2MDsgLy8gRGVmYXVsdCB2YWx1ZSBvZiBhIGNhcmQgd2lkdGggMTQwICsgbWFyZ2luIDIwXHJcbiAgbmJNaW5JbWdQZXJMaW5lOiBudW1iZXI7XHJcbiAgbmJNYXhJbWdQZXJMaW5lOiBudW1iZXI7XHJcbiAgbmJGYWtlSW1nOiBudW1iZXIgPSAwO1xyXG5cclxuICBpbWdGdWxsV2lkdGhDb25maWc6YW55ID0gW1xyXG4gICAge1xyXG4gICAgICBtYXg6IDQxOSxcclxuICAgICAgbGFyZ2VJbWdXaWR0aEZhY3RvciA6IDEsXHJcbiAgICAgIHNtYWxsSW1nV2lkdGhGYWN0b3IgOiAwLjVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG1heDogNDk5LFxyXG4gICAgICBsYXJnZUltZ1dpZHRoRmFjdG9yIDogMSxcclxuICAgICAgc21hbGxJbWdXaWR0aEZhY3RvciA6IDAuNVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbWF4OiA3MTksIC8vIHRhYmxldFxyXG4gICAgICBsYXJnZUltZ1dpZHRoRmFjdG9yIDogMC41LFxyXG4gICAgICBzbWFsbEltZ1dpZHRoRmFjdG9yIDogMC4zMzMzXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBtYXg6IDEwMjMsIC8vIGRlc2tvcFxyXG4gICAgICBsYXJnZUltZ1dpZHRoRmFjdG9yIDogMC4zMzMzLFxyXG4gICAgICBzbWFsbEltZ1dpZHRoRmFjdG9yIDogMC4yXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBtYXg6IDEzOTksXHJcbiAgICAgIGxhcmdlSW1nV2lkdGhGYWN0b3IgOiAwLjI1LFxyXG4gICAgICBzbWFsbEltZ1dpZHRoRmFjdG9yIDogMC4xMjVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG1heDogMTU5OSxcclxuICAgICAgbGFyZ2VJbWdXaWR0aEZhY3RvciA6IDAuMixcclxuICAgICAgc21hbGxJbWdXaWR0aEZhY3RvciA6IDAuMTExMVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbGFyZ2VJbWdXaWR0aEZhY3RvciA6IDAuMTY2NixcclxuICAgICAgc21hbGxJbWdXaWR0aEZhY3RvciA6IDAuMVxyXG4gICAgfVxyXG4gIF07XHJcblxyXG4gIGltZ1dpZHRoQ29uZmlnOmFueSA9IFtcclxuICAgIHtcclxuICAgICAgbWF4OiAxMDI0LFxyXG4gICAgICBsYXJnZUltZ1dpZHRoRmFjdG9yIDogMC4yNSxcclxuICAgICAgc21hbGxJbWdXaWR0aEZhY3RvciA6IDAuMTI1XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBtYXg6IDExOTksXHJcbiAgICAgIGxhcmdlSW1nV2lkdGhGYWN0b3IgOiAwLjMzMzMsXHJcbiAgICAgIHNtYWxsSW1nV2lkdGhGYWN0b3IgOiAwLjJcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG1heDogMTI5OSxcclxuICAgICAgbGFyZ2VJbWdXaWR0aEZhY3RvciA6IDAuMzMzMyxcclxuICAgICAgc21hbGxJbWdXaWR0aEZhY3RvciA6IDAuMTY2NlxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbWF4OiAxMzk5LFxyXG4gICAgICBsYXJnZUltZ1dpZHRoRmFjdG9yIDogMC4yNSxcclxuICAgICAgc21hbGxJbWdXaWR0aEZhY3RvciA6IDAuMTY2NlxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbWF4OiAxNTk5LFxyXG4gICAgICBsYXJnZUltZ1dpZHRoRmFjdG9yIDogMC4yNSxcclxuICAgICAgc21hbGxJbWdXaWR0aEZhY3RvciA6IDAuMTRcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGxhcmdlSW1nV2lkdGhGYWN0b3IgOiAwLjI1LFxyXG4gICAgICBzbWFsbEltZ1dpZHRoRmFjdG9yIDogMC4xMjVcclxuICAgIH1cclxuICBdO1xyXG5cclxuICBuYkltZ1RvRGVsU2VsZWN0ZWQ6IG51bWJlciA9IDA7XHJcbiAgZGlzYWJsZTogYm9vbGVhbiA9IGZhbHNlOyAvLyBVc2UgdG8gZGlzYWJsZSBhY3Rpb24gZHVyaW5nIHNlcnZlciByZXF1ZXN0XHJcbiAgZGVsTGlzdEltZ0xvYWRlciA9IGZhbHNlO1xyXG4gIGluaXRDb21wb25lbnQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGZhaWxMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBjb25maXJtSW1nU3VwOmJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgZ2V0IHNlYXJjaEltYWdlc1BhcmFtZXRlcnMkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaW1nTWFuYWdlci5zZWFyY2hJbWFnZXNQYXJhbWV0ZXJzJDtcclxuICB9XHJcblxyXG4gIC8vIEFwaSBJbWcgbWFuYWdlciBQYXJhbXNcclxuICBwYXJhbXM6UGFyYW1zSW1nTWFuYWdlckRUTztcclxuXHJcbiAgcHJpdmF0ZSBlcnJvckdldEFsbEltZyA9ICdJbWdNYW5hZ2VyLkltZ0xpYi5lcnJvckdldEFsbEltZyc7XHJcbiAgcHJpdmF0ZSBlcnJvckdldFRvdGFsSW1nID0gJ0ltZ01hbmFnZXIuSW1nTGliLmVycm9yR2V0VG90YWxJbWcnO1xyXG4gIHByaXZhdGUgZXJyb3JHZXRJbWcgPSAnSW1nTWFuYWdlci5JbWdMaWIuZXJyb3JHZXRDYW52YUltZyc7XHJcbiAgcHJpdmF0ZSBlcnJvclJlbW92ZUltZyA9ICdJbWdNYW5hZ2VyLkltZ0xpc3QuZXJyb3JSZW1vdmVJbWcnO1xyXG5cclxuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgdm0kID0gY29tYmluZUxhdGVzdCh7XHJcbiAgICBpbWFnZVNlbGVjdGlvbjogdGhpcy5pbWdTZWxlY3Rpb25TZXJ2aWNlLmltZ1NlbGVjdGlvbiQsXHJcbiAgICBpbWFnZUxpc3REYXRhOiB0aGlzLmltZ01hbmFnZXIuaW1hZ2VMaXN0JCxcclxuICAgIGlzTG9hZGluZzogdGhpcy5pbWdNYW5hZ2VyLmlzTG9hZGluZyQsXHJcbiAgICBzZWFyY2hJbWFnZXNQYXJhbWV0ZXJzOiB0aGlzLmltZ01hbmFnZXIuc2VhcmNoSW1hZ2VzUGFyYW1ldGVycyQsXHJcbiAgfSkucGlwZShcclxuICAgIG1hcCgoe2ltYWdlU2VsZWN0aW9uLCBpbWFnZUxpc3REYXRhOiB7aW1hZ2VMaXN0LCBpbWFnZVRvdGFsfSwgaXNMb2FkaW5nLCBzZWFyY2hJbWFnZXNQYXJhbWV0ZXJzfSkgPT4ge1xyXG4gICAgICB0aGlzLmluaXRWYXJpYWJsZXModHJ1ZSk7XHJcbiAgICAgIHRoaXMuY2FsY3VsYXRlTmJJbWdGYWtlKGltYWdlTGlzdC5kYXRhLmxlbmd0aCk7XHJcblxyXG4gICAgICBjb25zdCBwaWN0dXJlc0xpc3QgPSB0aGlzLnNldFNlbGVjdGVkUHJvcGVydHkoaW1hZ2VTZWxlY3Rpb24sIGltYWdlTGlzdC5kYXRhKTtcclxuXHJcbiAgICAgIHRoaXMucmVuYW1lUGljdHVyZVNlcnZpY2Uuc2V0UGljdHVyZXNMaXN0KHBpY3R1cmVzTGlzdCk7XHJcblxyXG4gICAgICBjb25zdCB0YWJsZUZpbHRlcnMgOiBUYWJsZUZpbHRlcnMgPSB0aGlzLmdldFRhYmxlRmlsdGVycyhzZWFyY2hJbWFnZXNQYXJhbWV0ZXJzLCBpbWFnZVRvdGFsKTtcclxuICAgICAgY29uc3Qga2VlcEltYWdlc0Rpc3BsYXllZCA9ICh0aGlzLnRhYkRpc3BsYXllZCA9PT0gJ2ltZy11cGxvYWQnICYmIHNlYXJjaEltYWdlc1BhcmFtZXRlcnMucGFnZSA9PT0gJzEnKSB8fCAodGhpcy50YWJEaXNwbGF5ZWQgPT09ICdpbWFnZXMtdmlldycgJiYgaW1hZ2VMaXN0LmRhdGEubGVuZ3RoICYmIHNlYXJjaEltYWdlc1BhcmFtZXRlcnMucGFnZSA9PT0gJzEnKTtcclxuXHJcbiAgICAgIGNvbnN0IHNraXBTZXRJbWFnZXNUb0Rpc3BsYXkgPSAhIXBpY3R1cmVzTGlzdD8ubGVuZ3RoICYmIHRoaXMudGFiRGlzcGxheWVkID09PSAnaW1nLXVwbG9hZCcgJiYgc2VhcmNoSW1hZ2VzUGFyYW1ldGVycy5wYWdlID09PSAnMSc7XHJcbiAgICAgIGNvbnN0IGhpZGVVbnRpbEZldGNoZWRGaXJzdFBhZ2VJbWFnZXNGb3JUYWJVcGxvYWQgPSB0aGlzLnRhYkRpc3BsYXllZCA9PT0gJ2ltZy11cGxvYWQnICYmIChzZWFyY2hJbWFnZXNQYXJhbWV0ZXJzLnBhZ2UgIT09ICcxJyB8fCBpbWFnZUxpc3Q/LnBhZ2UgIT09IDEpO1xyXG5cclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBpc0xvYWRpbmc6IGhpZGVVbnRpbEZldGNoZWRGaXJzdFBhZ2VJbWFnZXNGb3JUYWJVcGxvYWQgfHwgIWtlZXBJbWFnZXNEaXNwbGF5ZWQgJiYgaXNMb2FkaW5nLFxyXG4gICAgICAgIGRpc3BsYXlQZXhlbHNSZXN1bHRzOiAhaXNMb2FkaW5nICYmIGltYWdlVG90YWwgPT09IDAsXHJcbiAgICAgICAgcGljdHVyZXNMaXN0LFxyXG4gICAgICAgIGltYWdlVG90YWwsXHJcbiAgICAgICAgdGFibGVGaWx0ZXJzLFxyXG4gICAgICAgIHNraXBTZXRJbWFnZXNUb0Rpc3BsYXlcclxuICAgICAgfVxyXG4gICAgfSlcclxuICApO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgaW1nTWFuYWdlcjogSW1nTWFuYWdlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGltZ0V2ZW50U2VydmljZTogSW1nRXZlbnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBpbWdTZWxlY3Rpb25TZXJ2aWNlOiBJbWdTZWxlY3Rpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcclxuICAgIHByaXZhdGUgdXNlclNldHRpbmdzU2VydmljZTogVXNlclNldHRpbmdzU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVuYW1lUGljdHVyZVNlcnZpY2U6IFJlbmFtZVBpY3R1cmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHsgfVxyXG5cclxuICBwcml2YXRlIGdldFRhYmxlRmlsdGVycyhzZWFyY2hJbWFnZXNQYXJhbWV0ZXJzOiBhbnksIGltYWdlVG90YWw6IGFueSk6IFRhYmxlRmlsdGVycyB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBzb3J0OiB1bmRlZmluZWQsXHJcbiAgICAgIG9yZGVyOiB1bmRlZmluZWQsXHJcbiAgICAgIHR5cGU6IHNlYXJjaEltYWdlc1BhcmFtZXRlcnMudHlwZSxcclxuICAgICAgc2VhcmNoVmFsdWU6IHNlYXJjaEltYWdlc1BhcmFtZXRlcnMuc2VhcmNoLFxyXG4gICAgICB0b3RhbEl0ZW1zOiBpbWFnZVRvdGFsLFxyXG4gICAgICBpdGVtc1BlclBhZ2U6IHBhcnNlSW50KHNlYXJjaEltYWdlc1BhcmFtZXRlcnMubGltaXQpLFxyXG4gICAgICBjdXJyZW50UGFnZTogcGFyc2VJbnQoc2VhcmNoSW1hZ2VzUGFyYW1ldGVycy5wYWdlKVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMudm0kLnBpcGUoXHJcbiAgICAgIHRha2UoMSksXHJcbiAgICAgIGZpbHRlcigoe3NraXBTZXRJbWFnZXNUb0Rpc3BsYXl9KSA9PiAhc2tpcFNldEltYWdlc1RvRGlzcGxheSlcclxuICAgICAgKS5zdWJzY3JpYmUoKHt0YWJsZUZpbHRlcnN9KSA9PntcclxuICAgICAgICAgdGhpcy5zZXROYkltZ1RvRGlzcGxheSh0YWJsZUZpbHRlcnMpXHJcbiAgICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiB0cnVlIDogZ28gdG8gbGlzdCBkaXNwbGF5XHJcbiAgICogZmFsc2UgOiBnbyB0byBtb3NhaWMgZGlzcGxheVxyXG4gICAqIEBwYXJhbSBhY3RpdmF0ZVxyXG4gICAqL1xyXG4gIG9uU3dpdGNoRm9ybWF0RGlzcGxheWVkKGFjdGl2YXRlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmxpc3REaXNwbGF5ZWQgPSBhY3RpdmF0ZTtcclxuICAgIHRoaXMudXNlclNldHRpbmdzU2VydmljZS5zZXRVc2VyRGlzcGxheVByZWZlcmVuY2UoYWN0aXZhdGUpO1xyXG4gICAgdGhpcy5pbWdFdmVudFNlcnZpY2UuZW1pdGxpc3REaXNwbGF5ZWRDaGFuZ2UoYWN0aXZhdGUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FsY3VsIHRoZSBudW1iZXIgb2YgaW1nIHNlbGVjdGVkIGZvciBtYXNzZSBkZWxldGlvblxyXG4gICAqL1xyXG4gIG9uSW1nU2VsZWN0ZWQocGljdHVyZXNMaXN0OiBJbWdQaWN0dXJlRFRPW10pIHtcclxuICAgIHRoaXMuc2V0TmJJbWdUb0RlbFNlbGVjdGVkKHBpY3R1cmVzTGlzdCk7XHJcbiAgfVxyXG5cclxuICBvblJlbmFtZVBpY3R1cmUocGljdHVyZVJlbmFtZWQ6IFBpY3R1cmVOYW1lVXBkYXRlKSB7XHJcbiAgICB0aGlzLnJlbmFtZVBpY3R1cmVTZXJ2aWNlLnJlbmFtZVBpY3R1cmUocGljdHVyZVJlbmFtZWQpO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlTGlzdEltZyhwaWN0dXJlc0xpc3Q6IEltZ1BpY3R1cmVEVE9bXSkge1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmRpc2FibGUgPSB0cnVlO1xyXG4gICAgdGhpcy5kZWxMaXN0SW1nTG9hZGVyID0gdHJ1ZTtcclxuICAgIHRoaXMuY29uZmlybUltZ1N1cCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIEdldCB0aGUgaWQgb2YgdGhlIGltZyB0byByZW1vdmVcclxuICAgIC8vIEFuZCBhZGQgZGVsZXRlZCBwcm9wZXJ0eVxyXG4gICAgY29uc3QgaWRJbWdUb1JlbW92ZTogc3RyaW5nW10gPSBbXTtcclxuICAgIHBpY3R1cmVzTGlzdC5mb3JFYWNoKCBpbWcgPT4ge1xyXG4gICAgICBpZiAoaW1nLmRlbFNlbGVjdGVkKSB7XHJcbiAgICAgICAgaW1nLmRlbGV0ZWQgPSB0cnVlO1xyXG4gICAgICAgIGlkSW1nVG9SZW1vdmUucHVzaChpbWcuaWRfZmlsZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuaW1nTWFuYWdlci5yZW1vdmVNdWx0aXBsZUltZyhpZEltZ1RvUmVtb3ZlKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pbWdTZWxlY3Rpb25TZXJ2aWNlLnJlbW92ZUltZ1NlbGVjdGlvbkJ5SWRzKGlkSW1nVG9SZW1vdmUpO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogZXJyb3IgPT4ge1xyXG4gICAgICAgIHRoaXMuaW1nTWFuYWdlci5yZWZyZXNoSW1hZ2VMaXN0JC5uZXh0KCk7XHJcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2Uub3BlbkFsZXJ0KHRoaXMuZXJyb3JSZW1vdmVJbWcpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNlbGVjdEltZ0Nob3NlbihwaWN0dXJlc0xpc3Q6IEltZ1BpY3R1cmVEVE9bXSkge1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBwaWN0dXJlc0xpc3RTZWxlY3RlZDogSW1nUGljdHVyZURUT1tdID0gW107XHJcbiAgICBwaWN0dXJlc0xpc3QubWFwKGltZyA9PiB7XHJcbiAgICAgIGlmKGltZy5kZWxTZWxlY3RlZCkge1xyXG4gICAgICAgIGltZy5kZWxTZWxlY3RlZCA9ZmFsc2U7XHJcbiAgICAgICAgaW1nLnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaW1nLnNlbGVjdGVkKSB7XHJcbiAgICAgICAgcGljdHVyZXNMaXN0U2VsZWN0ZWQucHVzaChpbWcpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuc2V0TmJJbWdUb0RlbFNlbGVjdGVkKHBpY3R1cmVzTGlzdCk7XHJcbiAgICB0aGlzLmltZ1NlbGVjdGlvblNlcnZpY2Uuc2V0SW1nU2VsZWN0aW9uKHBpY3R1cmVzTGlzdFNlbGVjdGVkKTtcclxuICB9XHJcblxyXG4gIGRpc3BsYXlDb25maXJtSW1nU3VwKCl7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuY29uZmlybUltZ1N1cCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBjYW5jZWxTdXAoKSB7XHJcbiAgICB0aGlzLmNvbmZpcm1JbWdTdXAgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEV2ZW50IGVtaXQgd2hlbiBhIGltZyBzZWxlY3RlZCBpbiBvcmRlciB0byBkZWxldGVcclxuICAgKi9cclxuICBvblBpY3R1cmVzTGlzdENoYW5nZShwaWN0dXJlc0xpc3Q6IEltZ1BpY3R1cmVEVE9bXSkge1xyXG4gICAgdGhpcy5zZXROYkltZ1RvRGVsU2VsZWN0ZWQocGljdHVyZXNMaXN0KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCBkZWZhdWx0IG51bWJlciBvZiBpbWcgcGVyIHBhZ2UgdG8gZGlzcGxheSBhdCB0aGUgaW5pdGlhbGlzYXRpb25cclxuICAgKiBUaGlzIG51bWJlciBpcyBiZXR3ZWVuIDMwIGFuZCA1MFxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0TmJJbWdUb0Rpc3BsYXkodGFibGVGaWx0ZXJzOiBUYWJsZUZpbHRlcnMpIHtcclxuICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gdGhpcy5pbWdMaWJDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCArIDMwOyAvLyArIDMwcHggLT4gbGVmdCArIHJpZ2h0IG1hcmdpblxyXG4gICAgY29uc3Qgc2Nyb2xsV2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aCAtIGRvY3VtZW50LmJvZHkub2Zmc2V0V2lkdGg7XHJcblxyXG4gICAgY29uc3QgW21heEltZ1dpZHRoRmFjdG9yLCBtaW5JbWdXaWR0aEZhY3Rvcl0gPSB0aGlzLmdldEltZ1dpZHRoRmFjdG9ycygpO1xyXG5cclxuICAgIGNvbnN0IG1pbkltZ1dpZHRoID0gTWF0aC5mbG9vcihjb250YWluZXJXaWR0aCAqIG1pbkltZ1dpZHRoRmFjdG9yKTtcclxuICAgIGNvbnN0IG1heEltZ1dpZHRoID0gTWF0aC5jZWlsKChjb250YWluZXJXaWR0aCArIHNjcm9sbFdpZHRoICkgKiBtYXhJbWdXaWR0aEZhY3Rvcik7XHJcblxyXG4gICAgdGhpcy5uYk1heEltZ1BlckxpbmUgPSBNYXRoLmZsb29yKGNvbnRhaW5lcldpZHRoIC8gbWluSW1nV2lkdGgpO1xyXG4gICAgdGhpcy5uYk1pbkltZ1BlckxpbmUgPSBNYXRoLmZsb29yKCAoY29udGFpbmVyV2lkdGggKyBzY3JvbGxXaWR0aCApIC8gbWF4SW1nV2lkdGgpO1xyXG5cclxuICAgIHRoaXMuc2VhcmNoSW1hZ2VzUGFyYW1ldGVycyQubmV4dCh0aGlzLmdldFBhcmFtcyh7XHJcbiAgICAgIC4uLnRhYmxlRmlsdGVycyxcclxuICAgICAgaXRlbXNQZXJQYWdlOiB0aGlzLmdldFRvdGFsSW1nUGVyUGFnZSgpLFxyXG4gICAgICBjdXJyZW50UGFnZTogMVxyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRJbWdXaWR0aEZhY3RvcnMoKTogbnVtYmVyW10ge1xyXG4gICAgY29uc3Qgc2NyZWVuV2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcclxuICAgIGxldCBtaW5XaWR0aDpudW1iZXIgPSAwO1xyXG4gICAgbGV0IGltZ1NpemVzQ29uZmlnOiBudW1iZXJbXSA9IFtdO1xyXG5cclxuICAgIGNvbnN0IGN1cnJlbnRJbWdXaWR0aENvbmZpZyA9IHRoaXMuZnVsbFNpemUgPyB0aGlzLmltZ0Z1bGxXaWR0aENvbmZpZyA6IHRoaXMuaW1nV2lkdGhDb25maWc7XHJcblxyXG4gICAgZm9yIChjb25zdCB3aWR0aENvbmZpZyBvZiBjdXJyZW50SW1nV2lkdGhDb25maWcpIHtcclxuICAgICAgICBpZiAoIXdpZHRoQ29uZmlnLm1heCkge1xyXG4gICAgICAgICAgaW1nU2l6ZXNDb25maWcgPSBbd2lkdGhDb25maWcubGFyZ2VJbWdXaWR0aEZhY3Rvciwgd2lkdGhDb25maWcuc21hbGxJbWdXaWR0aEZhY3Rvcl07XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1pbldpZHRoIDwgc2NyZWVuV2lkdGggJiYgc2NyZWVuV2lkdGggPD0gd2lkdGhDb25maWcubWF4KSB7XHJcbiAgICAgICAgICBpbWdTaXplc0NvbmZpZyA9IFt3aWR0aENvbmZpZy5sYXJnZUltZ1dpZHRoRmFjdG9yLCB3aWR0aENvbmZpZy5zbWFsbEltZ1dpZHRoRmFjdG9yXTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBtaW5XaWR0aCA9IHdpZHRoQ29uZmlnLm1heDtcclxuICAgIH1cclxuICAgIHJldHVybiBpbWdTaXplc0NvbmZpZztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0VG90YWxJbWdQZXJQYWdlKCk6IG51bWJlciB7XHJcbiAgICBpZiAodGhpcy5uYlJvd1RvU2hvdykge1xyXG4gICAgICBjb25zdCBuYkltZ1BlckxpbmUgPSB0aGlzLnN0YXRlRGlzcGxheWVkID09PSAnZnVsbCcgPyB0aGlzLm5iTWluSW1nUGVyTGluZSA6IHRoaXMubmJNYXhJbWdQZXJMaW5lO1xyXG4gICAgICByZXR1cm4gbmJJbWdQZXJMaW5lICogdGhpcy5uYlJvd1RvU2hvdztcclxuICAgIH1cclxuXHJcbiAgICBsZXQgdG90YWwgPSB0aGlzLm5iTWluSW1nUGVyTGluZTtcclxuXHJcbiAgICB3aGlsZSAodG90YWwgPCAzMCB8fCB0b3RhbCAlIHRoaXMubmJNYXhJbWdQZXJMaW5lICE9PSAwIHx8ICB0b3RhbCAlIHRoaXMubmJNaW5JbWdQZXJMaW5lICE9PSAwKSB7XHJcbiAgICAgIHRvdGFsICs9IHRoaXMubmJNaW5JbWdQZXJMaW5lO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0b3RhbDtcclxuICB9XHJcblxyXG4gIGdldFBhcmFtcyh0YWJsZUZpbHRlcnM6IFRhYmxlRmlsdGVycykge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbGltaXQ6IHRhYmxlRmlsdGVycy5pdGVtc1BlclBhZ2UudG9TdHJpbmcoKSxcclxuICAgICAgcGFnZTogdGFibGVGaWx0ZXJzLmN1cnJlbnRQYWdlLnRvU3RyaW5nKCksXHJcbiAgICAgIHR5cGU6ICB0YWJsZUZpbHRlcnMudHlwZSxcclxuICAgICAgIC4uLih0YWJsZUZpbHRlcnMuc2VhcmNoVmFsdWUgJiYgeyBzZWFyY2g6IHRhYmxlRmlsdGVycy5zZWFyY2hWYWx1ZS50b1N0cmluZygpIH0pLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdFZhcmlhYmxlcyhsb2FkaW5nU3VjY2VzczogYm9vbGVhbikge1xyXG4gICAgdGhpcy5uYkltZ1RvRGVsU2VsZWN0ZWQgPSAwO1xyXG4gICAgdGhpcy5kaXNhYmxlID0gZmFsc2U7XHJcbiAgICB0aGlzLmRlbExpc3RJbWdMb2FkZXIgPSBmYWxzZTtcclxuICAgIHRoaXMuaW5pdENvbXBvbmVudCA9IGZhbHNlO1xyXG4gICAgdGhpcy5mYWlsTG9hZGVkID0gIWxvYWRpbmdTdWNjZXNzO1xyXG4gICAgdGhpcy5uYkZha2VJbWcgPSAwO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRTZWxlY3RlZFByb3BlcnR5KGltZ1NlbGVjdGVkTGlzdDogSW1nUGljdHVyZURUT1tdLCBwaWN0dXJlc0xpc3Q6IEltZ1BpY3R1cmVEVE9bXSkge1xyXG4gICAgY29uc3QgcGljdHVyZXNMaXN0U2VsZWN0ZWQ6IEltZ1BpY3R1cmVEVE9bXSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocGljdHVyZXNMaXN0KSk7XHJcbiAgICBpbWdTZWxlY3RlZExpc3QuZm9yRWFjaChpbWcgPT4ge1xyXG4gICAgICBjb25zdCBzZWxlY3RlZEltZyA9IHBpY3R1cmVzTGlzdFNlbGVjdGVkLmZpbmQocGljdHVyZSA9PiBwaWN0dXJlLmlkX2ZpbGUgPT09IGltZy5pZF9maWxlKTtcclxuICAgICAgaWYgKHNlbGVjdGVkSW1nKSB7XHJcbiAgICAgICAgc2VsZWN0ZWRJbWcuc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBwaWN0dXJlc0xpc3RTZWxlY3RlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCBhIGltZyBsaXN0IGluIG9yZGVyIHRvIGZpbGwgcHJvcGVybHkgYWxsIHRoZSBsaW5lIG9mIGltYWdlcyBkaXNwbGF5ZWQgaW4gbW9zYWljLlxyXG4gICAqIE90aGVyd2lzZSwgdGhlIHNwYWNlLWJldHdlZW4gY3NzIHdpbGwgZG8gYSBiYWQgZGlzcGxheVxyXG4gICAqL1xyXG4gIHByaXZhdGUgY2FsY3VsYXRlTmJJbWdGYWtlKG5iSW1nRGlzcGxheWVkOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IG5iSW1nUGVyTGluZSA9IHRoaXMuc3RhdGVEaXNwbGF5ZWQgPT09ICdzbWFsbCcgfHwgdGhpcy50YWJEaXNwbGF5ZWQgPT09ICdpbWctdXBsb2FkJyA/IHRoaXMubmJNYXhJbWdQZXJMaW5lIDogdGhpcy5uYk1pbkltZ1BlckxpbmU7XHJcblxyXG4gICAgaWYgKGlzTmFOKG5iSW1nRGlzcGxheWVkICUgbmJJbWdQZXJMaW5lKSkge1xyXG4gICAgICB0aGlzLm5iRmFrZUltZyA9IDA7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobmJJbWdEaXNwbGF5ZWQgJSBuYkltZ1BlckxpbmUgIT09IDApIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5uYkZha2VJbWcgPSBuYkltZ1BlckxpbmUgLSBuYkltZ0Rpc3BsYXllZCAlIG5iSW1nUGVyTGluZTtcclxuICAgICAgfSwgMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldE5iSW1nVG9EZWxTZWxlY3RlZCAocGljdHVyZXNMaXN0OiBJbWdQaWN0dXJlRFRPW10pIHtcclxuICAgIHRoaXMubmJJbWdUb0RlbFNlbGVjdGVkID0gcGljdHVyZXNMaXN0LmZpbHRlcihpbWcgPT4gaW1nLmRlbFNlbGVjdGVkKS5sZW5ndGg7XHJcblxyXG4gICAgaWYgKCF0aGlzLm5iSW1nVG9EZWxTZWxlY3RlZCkge1xyXG4gICAgICB0aGlzLmNvbmZpcm1JbWdTdXAgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN3aXRjaERpc3BsYXlXaW5kb3dNb3NhaWMoKSB7XHJcbiAgICB0aGlzLnN3aXRjaERpc3BsYXlXaW5kb3cuZW1pdCh0cnVlKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJ2bSQgfCBhc3luYyBhcyB2bVwiPlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiaW1hZ2VzLXZpZXdcIiBbbmdDbGFzc109XCJ7J2Z1bGxTaXplJzogZnVsbFNpemUsICdzbWFsbCc6IHN0YXRlRGlzcGxheWVkID09PSAnc21hbGwnfVwiIFtAZWFzZUluT3V0XT1cIidpbidcIj5cclxuICAgIDwhLS0gU3ViaGVhZGVyIDogSW1nIG51bWJlciBhbmQgYWN0aW9ucyBidG4gKHN1cCBpbWcgbGlzdCwgc3dpdGNoIGZvcm1hIGRpc3BsYXkpIC0tPlxyXG4gICAgPGRpdlxyXG4gICAgKm5nSWY9XCIoc3RhdGVEaXNwbGF5ZWQgIT09ICdzbWFsbCcgfHwgdGFiRGlzcGxheWVkID09PSAnaW1nLXVwbG9hZCcpXCJcclxuICAgIGNsYXNzPVwiaW1hZ2VzLXZpZXdfX2NvbnRhaW5lclwiXHJcbiAgICBbbmdDbGFzc109XCJ7J2ltYWdlcy12aWV3X19jb250YWluZXItLXVwbG9hZFRhYic6IHRhYkRpc3BsYXllZCA9PT0gJ2ltZy11cGxvYWQnLCAnaW1hZ2VzLXZpZXdfX2NvbnRhaW5lci0td2luZG93Jzogc3RhdGVEaXNwbGF5ZWQgPT09ICd3aW5kb3cnfVwiXHJcbiAgICA+XHJcblxyXG4gICAgICA8ZGl2ICpuZ0lmPVwidGFiRGlzcGxheWVkICE9PSAnaW1nLXVwbG9hZCdcIj5cclxuICAgICAgICAgIDxwIGNsYXNzPVwibWFpbkNvbG9yXCIgW25nQ2xhc3NdPVwieydpbWFnZXMtdmlld19fY29udGFpbmVyX190b3RhbC0taGlkZSc6IHZtLmRpc3BsYXlQZXhlbHNSZXN1bHRzfVwiPnt7ICdJbWdNYW5hZ2VyLkltZ0xpYi5uYkltZycgfCB0cmFuc2xhdGUgfX0gOiB7e3ZtLmltYWdlVG90YWx9fTwvcD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJ0YWJEaXNwbGF5ZWQgPT09ICdpbWctdXBsb2FkJ1wiPlxyXG4gICAgICAgICAgPHAgY2xhc3M9XCJtYWluQ29sb3JcIj57eyAnSW1nTWFuYWdlci5JbWdMaWIubGFzdEltZ3MnIHwgdHJhbnNsYXRlIH19PC9wPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBoYXMtYWRkb25zIHN1YkhlYWRlckFjdGlvbnNcIiAqbmdJZj1cInRhYkRpc3BsYXllZCAhPT0gJ2ltZy11cGxvYWQnXCI+XHJcblxyXG4gICAgICAgICAgPCEtLSBGb3IgbGlzdGZvcm1hIDogRGlzcGxheSBidG4gZGVsIG11bHRpcGxlIGltZyAmIENvbmZpcm0gYWN0aW9uIC0tPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImltYWdlcy12aWV3X19jb250YWluZXJfX2JveEFjdGlvblwiPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBTZWxlY3QgLS0+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidXR0b24gc3VjY2VzcyBpbWFnZXMtdmlld19fY29udGFpbmVyX19ib3hBY3Rpb25fX2ltcG9ydFwiXHJcbiAgICAgICAgICAgICAgICBAaW5zZXJ0UmVtb3ZlQW5uaW1cclxuICAgICAgICAgICAgICAgICpuZ0lmPVwibGlzdERpc3BsYXllZCAmJiBuYkltZ1RvRGVsU2VsZWN0ZWQgJiYgIWNvbmZpcm1JbWdTdXAgJiYgIWRlbExpc3RJbWdMb2FkZXIgJiYgbXVsdGlwbGVJbWdNb2RlXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RJbWdDaG9zZW4odm0ucGljdHVyZXNMaXN0KVwiXHJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYWwgZmEtY2hlY2tcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgIHt7ICdJbWdNYW5hZ2VyLkltZ0xpYi5zZWxlY3QnIHwgdHJhbnNsYXRlIH19ICh7e25iSW1nVG9EZWxTZWxlY3RlZH19KVxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIERpc3BsYXkgYnRuIGRlbCBtdWx0aXBsZSBpbWcgLS0+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJsaXN0RGlzcGxheWVkICYmIG5iSW1nVG9EZWxTZWxlY3RlZCAmJiAhY29uZmlybUltZ1N1cFwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGlzcGxheUNvbmZpcm1JbWdTdXAoKVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ1dHRvbiBpbWFnZXMtdmlld19fY29udGFpbmVyX19ib3hBY3Rpb25fX2RlbEJ0biBkYW5nZXJcIlxyXG4gICAgICAgICAgICAgICAgQGluc2VydFJlbW92ZUFubmltXHJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFsIGZhLXRpbWVzXCI+PC9pPnt7ICdJbWdNYW5hZ2VyLkltZ0xpYi5kZWxNbHQnIHwgdHJhbnNsYXRlIH19ICh7e25iSW1nVG9EZWxTZWxlY3RlZH19KVxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBidG5Mb2FkaW5nQW5pbSAqbmdJZj1cImRlbExpc3RJbWdMb2FkZXJcIiBjbGFzcz1cImJ0bkxvYWRpbmdBbm5pbWF0aW9uXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIENvbmZpcm0gYWN0aW9uIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaW1hZ2VzLXZpZXdfX2NvbnRhaW5lcl9fYm94QWN0aW9uX19jb25maXJtU3VwXCJcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaW1hZ2VzLXZpZXdfX2NvbnRhaW5lcl9fYm94QWN0aW9uX19jb25maXJtU3VwLS12aXNpYmxlJzogY29uZmlybUltZ1N1cH1cIj5cclxuICAgICAgICAgICAgICAgICAgPHAgKm5nSWY9XCJuYkltZ1RvRGVsU2VsZWN0ZWQgPiAxXCIgY2xhc3M9XCJpbWFnZXMtdmlld19fY29udGFpbmVyX19ib3hBY3Rpb25fX2NvbmZpcm1TdXBfX3RleHRcIj57eyAnSW1nTWFuYWdlci5JbWdMaWIuY29uZmlybVN1cFF1ZXN0aW9ucycgfCB0cmFuc2xhdGU6e25iSW1hZ2U6IG5iSW1nVG9EZWxTZWxlY3RlZH0gfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwibmJJbWdUb0RlbFNlbGVjdGVkID09PSAxXCIgY2xhc3M9XCJpbWFnZXMtdmlld19fY29udGFpbmVyX19ib3hBY3Rpb25fX2NvbmZpcm1TdXBfX3RleHRcIj57eyAnSW1nTWFuYWdlci5JbWdMaWIuY29uZmlybVN1cFF1ZXN0aW9uJyB8IHRyYW5zbGF0ZTp7bmJJbWFnZTogbmJJbWdUb0RlbFNlbGVjdGVkfSB9fTwvcD5cclxuICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidXR0b24gaW1hZ2VzLXZpZXdfX2NvbnRhaW5lcl9fYm94QWN0aW9uX19jb25maXJtU3VwX19jYW5jZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2FuY2VsU3VwKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ0ltZ01hbmFnZXIuSW1nTGliLmNhbmNlbCcgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlTGlzdEltZyh2bS5waWN0dXJlc0xpc3QpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidXR0b24gaW1hZ2VzLXZpZXdfX2NvbnRhaW5lcl9fZGVsQnRuIGRhbmdlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAnSW1nTWFuYWdlci5JbWdMaWIuY29uZmlybScgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICAgIDwhLS0gU3dpdGggbW9zYWljL2xpc3QgZm9ybWEgLS0+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQgaGFzLWFkZG9ucyBpbWFnZXMtdmlld19fY29udGFpbmVyX19idXR0b25Cb3hcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidXR0b24gaXMtbGlnaHRlZCBpbWFnZXMtdmlld19fY29udGFpbmVyX19idXR0b25Cb3hfX2J0blwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydhY3RpZkRpc3BsYXllZCc6ICFsaXN0RGlzcGxheWVkfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uU3dpdGNoRm9ybWF0RGlzcGxheWVkKGZhbHNlKVwiXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbiBpcy1zbWFsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLXNvbGlkIGZhLXRoXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbiBpcy1saWdodGVkIGltYWdlcy12aWV3X19jb250YWluZXJfX2J1dHRvbkJveF9fYnRuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2FjdGlmRGlzcGxheWVkJzogbGlzdERpc3BsYXllZH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblN3aXRjaEZvcm1hdERpc3BsYXllZCh0cnVlKVwiXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24gaXMtc21hbGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1iYXJzXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG5cclxuICAgIDwhLS0gSW1hZ2VzIHNlY3Rpb24gLS0+XHJcbiAgPG5nLXNjcm9sbGJhclxyXG4gICAgY2xhc3M9XCJpbWFnZXMtdmlld19fc2Nyb2xsXCJcclxuICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgJ2ltYWdlcy12aWV3X19zY3JvbGwtLWhpZGUtLW1vc2FpYyc6IHZtLmRpc3BsYXlQZXhlbHNSZXN1bHRzICYmICFsaXN0RGlzcGxheWVkLFxyXG4gICAgICAnaW1hZ2VzLXZpZXdfX3Njcm9sbC0taGlkZS0tdGFibGUnOiB2bS5kaXNwbGF5UGV4ZWxzUmVzdWx0cyAmJiBsaXN0RGlzcGxheWVkLFxyXG4gICAgICAnaW1hZ2VzLXZpZXdfX3Njcm9sbC0tZnVsbCc6IHN0YXRlRGlzcGxheWVkID09PSAnZnVsbCcsXHJcbiAgICAgICdpbWFnZXMtdmlld19fc2Nyb2xsLS1zbWFsbERpc3BsYXknIDogc3RhdGVEaXNwbGF5ZWQgPT09ICdzbWFsbCcgJiYgdGFiRGlzcGxheWVkICE9PSAnaW1nLXVwbG9hZCcsXHJcbiAgICAgICdpbWFnZXMtdmlld19fc2Nyb2xsLS1zbWFsbFVwbG9hZERpc3BsYXknIDogc3RhdGVEaXNwbGF5ZWQgPT09ICdzbWFsbCcgJiYgdGFiRGlzcGxheWVkID09PSAnaW1nLXVwbG9hZCcsXHJcbiAgICAgICdpbWFnZXMtdmlld19fc2Nyb2xsLS13aW5kb3cnOiBzdGF0ZURpc3BsYXllZCA9PT0gJ3dpbmRvdydcclxuICB9XCJcclxuICA+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImZpbHRlci12aWRlb1wiICpuZ0lmPVwidGFiRGlzcGxheWVkICE9PSAnaW1nLXVwbG9hZCdcIj5cclxuICAgICAgPGxhYmVsIGNsYXNzPVwiY2hlY2tib3ggaW1hZ2VzLXZpZXdfX2NvbnRhaW5lcl9fZmlsdGVyVmlkZW9cIj5cclxuICAgICAgICA8c3Bhbj57eyAnSW1nTWFuYWdlci5JbWdMaWIuZmlsdGVyVmlkZW8nIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxyXG4gICAgICAgIDxzZWxlY3QgWyhuZ01vZGVsKV09XCJ2bS50YWJsZUZpbHRlcnMudHlwZVwiIChuZ01vZGVsQ2hhbmdlKT1cInNlYXJjaEltYWdlc1BhcmFtZXRlcnMkLm5leHQoZ2V0UGFyYW1zKHZtLnRhYmxlRmlsdGVycykpO1wiPlxyXG4gICAgICAgICAgPG9wdGlvbiBzZWxlY3RlZCB2YWx1ZT1cIlwiPlxyXG4gICAgICAgICAgICB7eyAnSW1nTWFuYWdlci5JbWdMaWIuYWxsRmlsZXMnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJpbWFnZVwiPlxyXG4gICAgICAgICAgICB7eyAnSW1nTWFuYWdlci5JbWdMaWIub25seUltYWdlcycgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInZpZGVvXCI+XHJcbiAgICAgICAgICAgIHt7ICdJbWdNYW5hZ2VyLkltZ0xpYi5vbmx5VmlkZW9zJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgIDwvbGFiZWw+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2ICNpbWdMaWJDb250YWluZXIgY2xhc3M9XCJpbWFnZXMtdmlld19fd3JhcHBlclwiPlxyXG5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIWxpc3REaXNwbGF5ZWQgfHwgc3RhdGVEaXNwbGF5ZWQgPT09ICdzbWFsbCdcIiBbQGVhc2VJbk91dF09XCInaW4nXCI+XHJcbiAgICAgICAgICA8bW9zYWljLXZpZXdcclxuICAgICAgICAgICAgW3BpY3R1cmVzTGlzdF09XCJ2bS5waWN0dXJlc0xpc3RcIlxyXG4gICAgICAgICAgICAocGljdHVyZXNMaXN0Q2hhbmdlKT1cIm9uUGljdHVyZXNMaXN0Q2hhbmdlKHZtLnBpY3R1cmVzTGlzdClcIlxyXG4gICAgICAgICAgICBbdGFibGVGaWx0ZXJzXT1cInZtLnRhYmxlRmlsdGVyc1wiXHJcbiAgICAgICAgICAgIChmaWx0ZXJzQ2hhbmdlKT1cInNlYXJjaEltYWdlc1BhcmFtZXRlcnMkLm5leHQoZ2V0UGFyYW1zKHZtLnRhYmxlRmlsdGVycykpO1wiXHJcbiAgICAgICAgICAgIFsoZGlzYWJsZSldPVwiZGlzYWJsZVwiXHJcbiAgICAgICAgICAgIChwaWN0dXJlTmFtZUNoYW5nZSk9XCJvblJlbmFtZVBpY3R1cmUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIChzd2l0Y2hEaXNwbGF5V2luZG93KT1cInN3aXRjaERpc3BsYXlXaW5kb3dNb3NhaWMoKVwiXHJcbiAgICAgICAgICAgIFtuYkZha2VJbWddPVwibmJGYWtlSW1nXCJcclxuICAgICAgICAgICAgW3N0YXRlRGlzcGxheWVkXT1cInN0YXRlRGlzcGxheWVkXCJcclxuICAgICAgICAgICAgW3RhYkRpc3BsYXllZF09XCJ0YWJEaXNwbGF5ZWRcIlxyXG4gICAgICAgICAgICBbZGlzcGxheVBleGVsc1Jlc3VsdHNdPVwidm0uZGlzcGxheVBleGVsc1Jlc3VsdHNcIlxyXG4gICAgICAgICAgICBbaXNMb2FkaW5nXT1cInZtLmlzTG9hZGluZ1wiXHJcbiAgICAgICAgICAgIFtmdWxsU2l6ZV09XCJmdWxsU2l6ZVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICA8L21vc2FpYy12aWV3PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwibGlzdERpc3BsYXllZCAmJiBzdGF0ZURpc3BsYXllZCAhPT0gJ3NtYWxsJ1wiIFtAZWFzZUluT3V0XT1cIidpbidcIj5cclxuICAgICAgICAgIDx0YWJsZS12aWV3XHJcbiAgICAgICAgICAgIFtwaWN0dXJlc0xpc3RdPVwidm0ucGljdHVyZXNMaXN0XCJcclxuICAgICAgICAgICAgKHBpY3R1cmVzTGlzdENoYW5nZSk9XCJvblBpY3R1cmVzTGlzdENoYW5nZSh2bS5waWN0dXJlc0xpc3QpXCJcclxuICAgICAgICAgICAgW3RhYmxlRmlsdGVyc109XCJ2bS50YWJsZUZpbHRlcnNcIlxyXG4gICAgICAgICAgICAoZmlsdGVyc0NoYW5nZSk9XCJzZWFyY2hJbWFnZXNQYXJhbWV0ZXJzJC5uZXh0KGdldFBhcmFtcyh2bS50YWJsZUZpbHRlcnMpKTtcIlxyXG4gICAgICAgICAgICBbKGRpc2FibGUpXT1cImRpc2FibGVcIlxyXG4gICAgICAgICAgICAocGljdHVyZU5hbWVDaGFuZ2UpPVwib25SZW5hbWVQaWN0dXJlKCRldmVudClcIlxyXG4gICAgICAgICAgICBbZGlzcGxheVBleGVsc1Jlc3VsdHNdPVwidm0uZGlzcGxheVBleGVsc1Jlc3VsdHNcIlxyXG4gICAgICAgICAgICBbc3RhdGVEaXNwbGF5ZWRdPVwic3RhdGVEaXNwbGF5ZWRcIlxyXG4gICAgICAgICAgICBbaXNMb2FkaW5nXT1cInZtLmlzTG9hZGluZ1wiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgIDwvdGFibGUtdmlldz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctc2Nyb2xsYmFyPlxyXG5cclxuICA8IS0tIFBleGVscyBTZWN0aW9uIC0gV2hlbiBubyBpbWcgZm91bmQgLS0+XHJcbiAgPGRpdlxyXG4gICAgKm5nSWY9XCJ2bS5kaXNwbGF5UGV4ZWxzUmVzdWx0c1wiXHJcbiAgICBjbGFzcz1cImltYWdlcy12aWV3LS1wZXhlbHNcIlxyXG4gICAgW0BlYXNlSW5PdXRdPVwiJ2luJ1wiPlxyXG4gICAgPHBleGVscy1saWJcclxuICAgICAgW3NlYXJjaFZhbHVlXT1cInZtLnRhYmxlRmlsdGVycy5zZWFyY2hWYWx1ZVwiXHJcbiAgICAgIFtkaXNhYmxlU2VhcmNoXT1cInRydWVcIlxyXG4gICAgPlxyXG4gICAgPC9wZXhlbHMtbGliPlxyXG4gIDwvZGl2PlxyXG48L25nLWNvbnRhaW5lcj5cclxuIl19
@@ -42,14 +42,14 @@ export class ImgCardComponent extends ImagesActionHandler {
42
42
  }
43
43
  }
44
44
  ImgCardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ImgCardComponent, deps: [{ token: i1.ImgManagerService }, { token: i2.ImgSelectionService }, { token: i3.HttpClient }, { token: i4.ImgCDNService }, { token: i5.ImgEventService }, { token: i6.AlertService }, { token: i7.TranslateService }, { token: i8.ApiService }], target: i0.ɵɵFactoryTarget.Component });
45
- ImgCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: ImgCardComponent, selector: "img-card", inputs: { tabDisplayed: "tabDisplayed", fullSize: "fullSize", picture: "picture", index: "index" }, outputs: { toggleImgSelected: "toggleImgSelected", switchDisplayWindow: "switchDisplayWindow" }, usesInheritance: true, ngImport: i0, template: "<div class=\"addCssPriority\" [@easeInOut]=\"'in'\" [ngClass]=\"{ 'fullSize': fullSize }\">\r\n <div class=\"img-card\">\r\n <div class=\"img-card__container\"\r\n [ngClass]=\"{\r\n 'smallDisplay': stateDisplayed === 'small' || isUploadSection,\r\n 'imgSelected': picture.selected,\r\n 'deletion': picture.deleted}\">\r\n <img\r\n class=\"img-card__container__img\"\r\n [src]=\"picture.file_name | imgSrc : '400'\"\r\n [alt]=\"picture.display_name\"\r\n (click)=\"onToggleImgSelected()\"\r\n (error)=\"picture.imgNotLoaded=true;onPictureNotLoading($event);\"\r\n />\r\n <div\r\n class=\"img-card__container__config\"\r\n *ngIf=\"!picture.deleted && stateDisplayed !== 'small'\"\r\n >\r\n <button type=\"button\" class=\"size\"><i class=\"fal fa-image-polaroid\"></i><span>{{picture.raw_height}}x{{picture.raw_width}}</span></button>\r\n <button type=\"button\" class=\"dl\" (click)=\"onDownloadImg(picture.display_name, picture.file_name)\"><i class=\"fal fa-download\"></i><span>{{ 'ImgManager.ImgCard.download' | translate }}</span></button>\r\n <button type=\"button\" class=\"edit\" (click)=\"onEdit(picture)\"><i class=\"far fa-crop-alt\"></i><span>{{ 'ImgManager.ImgCard.edit' | translate }}</span></button>\r\n <button type=\"button\" class=\"copy\" (click)=\"copyLink(picture.file_name)\"><i class=\"fal fa-copy\"></i><span>{{ 'ImgManager.ImgCard.copyLink' | translate }}</span></button>\r\n <button type=\"button\" class=\"deleted\" (click)=\"activeConfirmDelete = true;\"><i class=\"fal fa-times\"></i><span>{{ 'ImgManager.ImgCard.del' | translate }}</span></button>\r\n <button type=\"button\" class=\"selected\" (click)=\"onToggleImgSelected()\" *ngIf=\"stateDisplayed !== 'window'\">\r\n <i *ngIf=\"!picture.selected\" class=\"fal fa-square\"></i>\r\n <i *ngIf=\"picture.selected\" class=\"fa-solid fa-check-square checked\"></i>\r\n <span>{{ 'ImgManager.ImgCard.select' | translate }}</span>\r\n </button>\r\n </div>\r\n <div\r\n class=\"img-card__container__config img-card__container__config--small\"\r\n *ngIf=\"!picture.deleted && stateDisplayed === 'small'\"\r\n >\r\n <button class=\"show-edit\" (click)=\"displayLargeWindow()\"><i class=\"fa-solid fa-edit\"></i></button>\r\n </div>\r\n <div class=\"img-card__container__delete\" [ngClass]=\"{ 'show' : activeConfirmDelete}\">\r\n <span>{{ 'ImgManager.ImgCard.confirmDeleteImg' | translate }}</span>\r\n <div>\r\n <button (click)=\"activeConfirmDelete = false;\">{{ 'no' | translate }}</button>\r\n <button (click)=\"onRemoveImg(picture);activeConfirmDelete = false;\">{{ 'yes' | translate }}</button>\r\n </div>\r\n </div>\r\n <div class=\"img-card__container__valid\" *ngIf=\"stateDisplayed === 'small' && tabDisplayed == 'img-upload'\">\r\n <i class=\"far fa-check\"></i>\r\n <span>{{ 'ImgManager.ImgCard.validImgSmall' | translate }}</span>\r\n </div>\r\n <div\r\n *ngIf=\"picture.imgNotLoaded\"\r\n class=\"img-card__container__overlay\"\r\n [ngClass]=\"{'img-card__container__overlay--smallDisplay': stateDisplayed === 'small' || isUploadSection}\">\r\n <i (click)=\"onToggleImgSelected()\" class=\"fad fa-folder-times\"></i>\r\n </div>\r\n <span btnLoadingAnim class=\"btnLoadingAnnimation\" *ngIf=\"picture.deleted\"></span>\r\n\r\n </div>\r\n <div\r\n class=\"img-card__nameContainer\"\r\n [ngClass]=\"{'smallNameDisplay': stateDisplayed === 'small' || isUploadSection, 'focus': focusInput}\">\r\n <input\r\n type=\"text\"\r\n class=\"wzImgMngInput img-card__nameContainer__name\"\r\n [(ngModel)]=\"picture.display_name\"\r\n (ngModelChange)=\"onNameChange(picture.id_file)\"\r\n [ngModelOptions]=\"{standalone: true, updateOn: 'blur'}\"\r\n (focus)=\"previousName=picture.display_name;focusInput = true;\"\r\n (blur)=\"focusInput = false;\"\r\n >\r\n <span>{{picture.display_name}}</span>\r\n </div>\r\n\r\n </div>\r\n</div>\r\n", dependencies: [{ kind: "directive", type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i10.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i10.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i11.LoadingDirective, selector: "[btnLoadingAnim]" }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }, { kind: "pipe", type: i12.ImageSrcPipe, name: "imgSrc" }], animations: [
45
+ ImgCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: ImgCardComponent, selector: "img-card", inputs: { tabDisplayed: "tabDisplayed", fullSize: "fullSize", picture: "picture", index: "index" }, outputs: { toggleImgSelected: "toggleImgSelected", switchDisplayWindow: "switchDisplayWindow" }, usesInheritance: true, ngImport: i0, template: "<div class=\"addCssPriority\" [@easeInOut]=\"'in'\" [ngClass]=\"{ 'fullSize': fullSize }\">\r\n <div class=\"img-card\">\r\n <div class=\"img-card__container\"\r\n [ngClass]=\"{\r\n 'smallDisplay': stateDisplayed === 'small' || isUploadSection,\r\n 'imgSelected': picture.selected,\r\n 'deletion': picture.deleted}\">\r\n <img\r\n class=\"img-card__container__img\"\r\n [src]=\"picture.file_name | imgSrc : '400'\"\r\n [alt]=\"picture.display_name\"\r\n (click)=\"onToggleImgSelected()\"\r\n (error)=\"picture.imgNotLoaded=true;onPictureNotLoading($event);\"\r\n />\r\n <div class=\"hover-img-size\">\r\n <span>{{picture.raw_height}}x{{picture.raw_width}}</span>\r\n </div>\r\n <div\r\n class=\"img-card__container__config\"\r\n *ngIf=\"!picture.deleted && stateDisplayed !== 'small'\"\r\n >\r\n <ng-container *ngIf=\"!picture.video_link\">\r\n <button type=\"button\" class=\"size\" (click)=\"redirectToVideo(picture)\"><i class=\"fa-solid fa-play\"></i><span>{{ 'ImgManager.ImgEditor.AddVideo' | translate }}</span></button>\r\n </ng-container>\r\n <ng-container *ngIf=\"picture.video_link\">\r\n <button type=\"button\" class=\"size\" (click)=\"redirectToVideo(picture)\"><i class=\"fa-solid fa-play\"></i><span>{{ 'ImgManager.ImgEditor.EditVideo' | translate }}</span></button>\r\n </ng-container>\r\n <button type=\"button\" class=\"dl\" (click)=\"onDownloadImg(picture.display_name, picture.file_name)\"><i class=\"fal fa-download\"></i><span>{{ 'ImgManager.ImgCard.download' | translate }}</span></button>\r\n <button type=\"button\" class=\"edit\" (click)=\"onEdit(picture)\"><i class=\"far fa-crop-alt\"></i><span>{{ 'ImgManager.ImgCard.edit' | translate }}</span></button>\r\n <button type=\"button\" class=\"copy\" (click)=\"copyLink(picture.file_name)\"><i class=\"fal fa-copy\"></i><span>{{ 'ImgManager.ImgCard.copyLink' | translate }}</span></button>\r\n <button type=\"button\" class=\"deleted\" (click)=\"activeConfirmDelete = true;\"><i class=\"fal fa-times\"></i><span>{{ 'ImgManager.ImgCard.del' | translate }}</span></button>\r\n <button type=\"button\" class=\"selected\" (click)=\"onToggleImgSelected()\" *ngIf=\"stateDisplayed !== 'window'\">\r\n <i *ngIf=\"!picture.selected\" class=\"fal fa-square\"></i>\r\n <i *ngIf=\"picture.selected\" class=\"fa-solid fa-check-square checked\"></i>\r\n <span>{{ 'ImgManager.ImgCard.select' | translate }}</span>\r\n </button>\r\n </div>\r\n <div\r\n class=\"img-card__container__config img-card__container__config--small\"\r\n *ngIf=\"!picture.deleted && stateDisplayed === 'small'\"\r\n >\r\n <button class=\"show-edit\" (click)=\"displayLargeWindow()\"><i class=\"fa-solid fa-edit\"></i></button>\r\n </div>\r\n <div class=\"img-card__container__delete\" [ngClass]=\"{ 'show' : activeConfirmDelete}\">\r\n <span>{{ 'ImgManager.ImgCard.confirmDeleteImg' | translate }}</span>\r\n <div>\r\n <button (click)=\"activeConfirmDelete = false;\">{{ 'no' | translate }}</button>\r\n <button (click)=\"onRemoveImg(picture);activeConfirmDelete = false;\">{{ 'yes' | translate }}</button>\r\n </div>\r\n </div>\r\n <div class=\"img-card__container__valid\" *ngIf=\"stateDisplayed === 'small' && tabDisplayed == 'img-upload'\">\r\n <i class=\"far fa-check\"></i>\r\n <span>{{ 'ImgManager.ImgCard.validImgSmall' | translate }}</span>\r\n </div>\r\n <div\r\n *ngIf=\"picture.imgNotLoaded\"\r\n class=\"img-card__container__overlay\"\r\n [ngClass]=\"{'img-card__container__overlay--smallDisplay': stateDisplayed === 'small' || isUploadSection}\">\r\n <i (click)=\"onToggleImgSelected()\" class=\"fad fa-folder-times\"></i>\r\n </div>\r\n <span btnLoadingAnim class=\"btnLoadingAnnimation\" *ngIf=\"picture.deleted\"></span>\r\n <div *ngIf=\"picture.video_link\" class=\"img-card__container__video\">\r\n <i class=\"fa-solid fa-play\"></i>\r\n <span>{{ 'ImgManager.ImgEditor.Video' | translate }}</span>\r\n </div>\r\n </div>\r\n <div\r\n class=\"img-card__nameContainer\"\r\n [ngClass]=\"{'smallNameDisplay': stateDisplayed === 'small' || isUploadSection, 'focus': focusInput}\">\r\n <input\r\n type=\"text\"\r\n class=\"wzImgMngInput img-card__nameContainer__name\"\r\n [(ngModel)]=\"picture.display_name\"\r\n (ngModelChange)=\"onNameChange(picture.id_file)\"\r\n [ngModelOptions]=\"{standalone: true, updateOn: 'blur'}\"\r\n (focus)=\"previousName=picture.display_name;focusInput = true;\"\r\n (blur)=\"focusInput = false;\"\r\n >\r\n <span>{{picture.display_name}}</span>\r\n </div>\r\n\r\n </div>\r\n</div>\r\n", dependencies: [{ kind: "directive", type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i10.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i10.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i11.LoadingDirective, selector: "[btnLoadingAnim]" }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }, { kind: "pipe", type: i12.ImageSrcPipe, name: "imgSrc" }], animations: [
46
46
  easeInOut
47
47
  ] });
48
48
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ImgCardComponent, decorators: [{
49
49
  type: Component,
50
50
  args: [{ selector: 'img-card', animations: [
51
51
  easeInOut
52
- ], template: "<div class=\"addCssPriority\" [@easeInOut]=\"'in'\" [ngClass]=\"{ 'fullSize': fullSize }\">\r\n <div class=\"img-card\">\r\n <div class=\"img-card__container\"\r\n [ngClass]=\"{\r\n 'smallDisplay': stateDisplayed === 'small' || isUploadSection,\r\n 'imgSelected': picture.selected,\r\n 'deletion': picture.deleted}\">\r\n <img\r\n class=\"img-card__container__img\"\r\n [src]=\"picture.file_name | imgSrc : '400'\"\r\n [alt]=\"picture.display_name\"\r\n (click)=\"onToggleImgSelected()\"\r\n (error)=\"picture.imgNotLoaded=true;onPictureNotLoading($event);\"\r\n />\r\n <div\r\n class=\"img-card__container__config\"\r\n *ngIf=\"!picture.deleted && stateDisplayed !== 'small'\"\r\n >\r\n <button type=\"button\" class=\"size\"><i class=\"fal fa-image-polaroid\"></i><span>{{picture.raw_height}}x{{picture.raw_width}}</span></button>\r\n <button type=\"button\" class=\"dl\" (click)=\"onDownloadImg(picture.display_name, picture.file_name)\"><i class=\"fal fa-download\"></i><span>{{ 'ImgManager.ImgCard.download' | translate }}</span></button>\r\n <button type=\"button\" class=\"edit\" (click)=\"onEdit(picture)\"><i class=\"far fa-crop-alt\"></i><span>{{ 'ImgManager.ImgCard.edit' | translate }}</span></button>\r\n <button type=\"button\" class=\"copy\" (click)=\"copyLink(picture.file_name)\"><i class=\"fal fa-copy\"></i><span>{{ 'ImgManager.ImgCard.copyLink' | translate }}</span></button>\r\n <button type=\"button\" class=\"deleted\" (click)=\"activeConfirmDelete = true;\"><i class=\"fal fa-times\"></i><span>{{ 'ImgManager.ImgCard.del' | translate }}</span></button>\r\n <button type=\"button\" class=\"selected\" (click)=\"onToggleImgSelected()\" *ngIf=\"stateDisplayed !== 'window'\">\r\n <i *ngIf=\"!picture.selected\" class=\"fal fa-square\"></i>\r\n <i *ngIf=\"picture.selected\" class=\"fa-solid fa-check-square checked\"></i>\r\n <span>{{ 'ImgManager.ImgCard.select' | translate }}</span>\r\n </button>\r\n </div>\r\n <div\r\n class=\"img-card__container__config img-card__container__config--small\"\r\n *ngIf=\"!picture.deleted && stateDisplayed === 'small'\"\r\n >\r\n <button class=\"show-edit\" (click)=\"displayLargeWindow()\"><i class=\"fa-solid fa-edit\"></i></button>\r\n </div>\r\n <div class=\"img-card__container__delete\" [ngClass]=\"{ 'show' : activeConfirmDelete}\">\r\n <span>{{ 'ImgManager.ImgCard.confirmDeleteImg' | translate }}</span>\r\n <div>\r\n <button (click)=\"activeConfirmDelete = false;\">{{ 'no' | translate }}</button>\r\n <button (click)=\"onRemoveImg(picture);activeConfirmDelete = false;\">{{ 'yes' | translate }}</button>\r\n </div>\r\n </div>\r\n <div class=\"img-card__container__valid\" *ngIf=\"stateDisplayed === 'small' && tabDisplayed == 'img-upload'\">\r\n <i class=\"far fa-check\"></i>\r\n <span>{{ 'ImgManager.ImgCard.validImgSmall' | translate }}</span>\r\n </div>\r\n <div\r\n *ngIf=\"picture.imgNotLoaded\"\r\n class=\"img-card__container__overlay\"\r\n [ngClass]=\"{'img-card__container__overlay--smallDisplay': stateDisplayed === 'small' || isUploadSection}\">\r\n <i (click)=\"onToggleImgSelected()\" class=\"fad fa-folder-times\"></i>\r\n </div>\r\n <span btnLoadingAnim class=\"btnLoadingAnnimation\" *ngIf=\"picture.deleted\"></span>\r\n\r\n </div>\r\n <div\r\n class=\"img-card__nameContainer\"\r\n [ngClass]=\"{'smallNameDisplay': stateDisplayed === 'small' || isUploadSection, 'focus': focusInput}\">\r\n <input\r\n type=\"text\"\r\n class=\"wzImgMngInput img-card__nameContainer__name\"\r\n [(ngModel)]=\"picture.display_name\"\r\n (ngModelChange)=\"onNameChange(picture.id_file)\"\r\n [ngModelOptions]=\"{standalone: true, updateOn: 'blur'}\"\r\n (focus)=\"previousName=picture.display_name;focusInput = true;\"\r\n (blur)=\"focusInput = false;\"\r\n >\r\n <span>{{picture.display_name}}</span>\r\n </div>\r\n\r\n </div>\r\n</div>\r\n" }]
52
+ ], template: "<div class=\"addCssPriority\" [@easeInOut]=\"'in'\" [ngClass]=\"{ 'fullSize': fullSize }\">\r\n <div class=\"img-card\">\r\n <div class=\"img-card__container\"\r\n [ngClass]=\"{\r\n 'smallDisplay': stateDisplayed === 'small' || isUploadSection,\r\n 'imgSelected': picture.selected,\r\n 'deletion': picture.deleted}\">\r\n <img\r\n class=\"img-card__container__img\"\r\n [src]=\"picture.file_name | imgSrc : '400'\"\r\n [alt]=\"picture.display_name\"\r\n (click)=\"onToggleImgSelected()\"\r\n (error)=\"picture.imgNotLoaded=true;onPictureNotLoading($event);\"\r\n />\r\n <div class=\"hover-img-size\">\r\n <span>{{picture.raw_height}}x{{picture.raw_width}}</span>\r\n </div>\r\n <div\r\n class=\"img-card__container__config\"\r\n *ngIf=\"!picture.deleted && stateDisplayed !== 'small'\"\r\n >\r\n <ng-container *ngIf=\"!picture.video_link\">\r\n <button type=\"button\" class=\"size\" (click)=\"redirectToVideo(picture)\"><i class=\"fa-solid fa-play\"></i><span>{{ 'ImgManager.ImgEditor.AddVideo' | translate }}</span></button>\r\n </ng-container>\r\n <ng-container *ngIf=\"picture.video_link\">\r\n <button type=\"button\" class=\"size\" (click)=\"redirectToVideo(picture)\"><i class=\"fa-solid fa-play\"></i><span>{{ 'ImgManager.ImgEditor.EditVideo' | translate }}</span></button>\r\n </ng-container>\r\n <button type=\"button\" class=\"dl\" (click)=\"onDownloadImg(picture.display_name, picture.file_name)\"><i class=\"fal fa-download\"></i><span>{{ 'ImgManager.ImgCard.download' | translate }}</span></button>\r\n <button type=\"button\" class=\"edit\" (click)=\"onEdit(picture)\"><i class=\"far fa-crop-alt\"></i><span>{{ 'ImgManager.ImgCard.edit' | translate }}</span></button>\r\n <button type=\"button\" class=\"copy\" (click)=\"copyLink(picture.file_name)\"><i class=\"fal fa-copy\"></i><span>{{ 'ImgManager.ImgCard.copyLink' | translate }}</span></button>\r\n <button type=\"button\" class=\"deleted\" (click)=\"activeConfirmDelete = true;\"><i class=\"fal fa-times\"></i><span>{{ 'ImgManager.ImgCard.del' | translate }}</span></button>\r\n <button type=\"button\" class=\"selected\" (click)=\"onToggleImgSelected()\" *ngIf=\"stateDisplayed !== 'window'\">\r\n <i *ngIf=\"!picture.selected\" class=\"fal fa-square\"></i>\r\n <i *ngIf=\"picture.selected\" class=\"fa-solid fa-check-square checked\"></i>\r\n <span>{{ 'ImgManager.ImgCard.select' | translate }}</span>\r\n </button>\r\n </div>\r\n <div\r\n class=\"img-card__container__config img-card__container__config--small\"\r\n *ngIf=\"!picture.deleted && stateDisplayed === 'small'\"\r\n >\r\n <button class=\"show-edit\" (click)=\"displayLargeWindow()\"><i class=\"fa-solid fa-edit\"></i></button>\r\n </div>\r\n <div class=\"img-card__container__delete\" [ngClass]=\"{ 'show' : activeConfirmDelete}\">\r\n <span>{{ 'ImgManager.ImgCard.confirmDeleteImg' | translate }}</span>\r\n <div>\r\n <button (click)=\"activeConfirmDelete = false;\">{{ 'no' | translate }}</button>\r\n <button (click)=\"onRemoveImg(picture);activeConfirmDelete = false;\">{{ 'yes' | translate }}</button>\r\n </div>\r\n </div>\r\n <div class=\"img-card__container__valid\" *ngIf=\"stateDisplayed === 'small' && tabDisplayed == 'img-upload'\">\r\n <i class=\"far fa-check\"></i>\r\n <span>{{ 'ImgManager.ImgCard.validImgSmall' | translate }}</span>\r\n </div>\r\n <div\r\n *ngIf=\"picture.imgNotLoaded\"\r\n class=\"img-card__container__overlay\"\r\n [ngClass]=\"{'img-card__container__overlay--smallDisplay': stateDisplayed === 'small' || isUploadSection}\">\r\n <i (click)=\"onToggleImgSelected()\" class=\"fad fa-folder-times\"></i>\r\n </div>\r\n <span btnLoadingAnim class=\"btnLoadingAnnimation\" *ngIf=\"picture.deleted\"></span>\r\n <div *ngIf=\"picture.video_link\" class=\"img-card__container__video\">\r\n <i class=\"fa-solid fa-play\"></i>\r\n <span>{{ 'ImgManager.ImgEditor.Video' | translate }}</span>\r\n </div>\r\n </div>\r\n <div\r\n class=\"img-card__nameContainer\"\r\n [ngClass]=\"{'smallNameDisplay': stateDisplayed === 'small' || isUploadSection, 'focus': focusInput}\">\r\n <input\r\n type=\"text\"\r\n class=\"wzImgMngInput img-card__nameContainer__name\"\r\n [(ngModel)]=\"picture.display_name\"\r\n (ngModelChange)=\"onNameChange(picture.id_file)\"\r\n [ngModelOptions]=\"{standalone: true, updateOn: 'blur'}\"\r\n (focus)=\"previousName=picture.display_name;focusInput = true;\"\r\n (blur)=\"focusInput = false;\"\r\n >\r\n <span>{{picture.display_name}}</span>\r\n </div>\r\n\r\n </div>\r\n</div>\r\n" }]
53
53
  }], ctorParameters: function () { return [{ type: i1.ImgManagerService }, { type: i2.ImgSelectionService }, { type: i3.HttpClient }, { type: i4.ImgCDNService }, { type: i5.ImgEventService }, { type: i6.AlertService }, { type: i7.TranslateService }, { type: i8.ApiService }]; }, propDecorators: { tabDisplayed: [{
54
54
  type: Input
55
55
  }], fullSize: [{
@@ -63,4 +63,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
63
63
  }], switchDisplayWindow: [{
64
64
  type: Output
65
65
  }] } });
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1nLWNhcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd3otaW1nLW1hbmFnZXIvc3JjL2xpYi9jb21wb25lbnRzL2ltYWdlcy12aWV3L21vc2FpYy12aWV3L2ltZy1jYXJkL2ltZy1jYXJkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3d6LWltZy1tYW5hZ2VyL3NyYy9saWIvY29tcG9uZW50cy9pbWFnZXMtdmlldy9tb3NhaWMtdmlldy9pbWctY2FyZC9pbWctY2FyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUV6RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDN0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDakYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx3REFBd0QsQ0FBQTtBQUVsRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7Ozs7Ozs7Ozs7OztBQVM5RCxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsbUJBQW1CO0lBcUJ2RCxZQUNFLFVBQTZCLEVBQzdCLG1CQUF3QyxFQUN4QyxJQUFnQixFQUNoQixhQUE0QixFQUM1QixtQkFBb0MsRUFDcEMsWUFBMEIsRUFDMUIsZ0JBQWtDLEVBQ2xDLFVBQXNCO1FBRXRCLEtBQUssQ0FDSCxVQUFVLEVBQ1YsbUJBQW1CLEVBQ25CLElBQUksRUFDSixhQUFhLEVBQ2IsbUJBQW1CLEVBQ25CLFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsVUFBVSxDQUNYLENBQUM7UUE5QkosZUFBVSxHQUFHLEtBQUssQ0FBQztRQUduQixzQkFBaUIsR0FBdUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUczRCx3QkFBbUIsR0FBMEIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVoRSxvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUNqQyx3QkFBbUIsR0FBRyxLQUFLLENBQUM7SUFzQjVCLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsWUFBWSxLQUFLLFlBQVksQ0FBQztJQUM1RCxDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELG1CQUFtQjtRQUNqQixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEMsQ0FBQzs7NkdBckRVLGdCQUFnQjtpR0FBaEIsZ0JBQWdCLDRRQ3JCN0IsazRJQXdFQSwyL0JEdkRjO1FBQ1YsU0FBUztLQUNWOzJGQUVVLGdCQUFnQjtrQkFQNUIsU0FBUzsrQkFDRSxVQUFVLGNBRVI7d0JBQ1YsU0FBUztxQkFDVjtnVEFLRCxZQUFZO3NCQURYLEtBQUs7Z0JBR04sUUFBUTtzQkFEUCxLQUFLO2dCQUdOLE9BQU87c0JBRE4sS0FBSztnQkFHTixLQUFLO3NCQURKLEtBQUs7Z0JBS04saUJBQWlCO3NCQURoQixNQUFNO2dCQUlQLG1CQUFtQjtzQkFEbEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSW1nRXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvaW1nLWV2ZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJbWdQaWN0dXJlRFRPIH0gZnJvbSAnLi4vLi4vLi4vLi4vZHRvL2ltZy1tYW5hZ2VyLmR0byc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEltZ01hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvaW1nLW1hbmFnZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEltZ1NlbGVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9pbWctc2VsZWN0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJbWdDRE5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvY29uZmlnL2ltZy1jZG4uc2VydmljZSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgSW1hZ2VzQWN0aW9uSGFuZGxlciB9IGZyb20gJy4uLy4uL2ltYWdlcy1hY3Rpb25zLWhhbmRsZXInO1xyXG5pbXBvcnQgeyBlYXNlSW5PdXQgfSBmcm9tICcuLi8uLi8uLi8uLi9hbmltYXRpb25zL2Vhc2VJbk91dC9lYXNlLWluLW91dC5hbmltYXRpb24nXHJcbmltcG9ydCB7IHRhYkRpc3BsYXllZCB9IGZyb20gJy4uLy4uLy4uLy4uL2R0by9leHBvcnQtZHRvcy5hcGknO1xyXG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9hbGVydC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXBpU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL2FwaS5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaW1nLWNhcmQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9pbWctY2FyZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgYW5pbWF0aW9uczogW1xyXG4gICAgZWFzZUluT3V0XHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW1nQ2FyZENvbXBvbmVudCBleHRlbmRzIEltYWdlc0FjdGlvbkhhbmRsZXIgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHRhYkRpc3BsYXllZDogdGFiRGlzcGxheWVkO1xyXG4gIEBJbnB1dCgpXHJcbiAgZnVsbFNpemU6IGJvb2xlYW47XHJcbiAgQElucHV0KClcclxuICBwaWN0dXJlOiBJbWdQaWN0dXJlRFRPO1xyXG4gIEBJbnB1dCgpXHJcbiAgaW5kZXg6IG51bWJlcjtcclxuICBmb2N1c0lucHV0ID0gZmFsc2U7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHRvZ2dsZUltZ1NlbGVjdGVkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHN3aXRjaERpc3BsYXlXaW5kb3c6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgaXNVcGxvYWRTZWN0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgYWN0aXZlQ29uZmlybURlbGV0ZSA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIGltZ01hbmFnZXI6IEltZ01hbmFnZXJTZXJ2aWNlLFxyXG4gICAgaW1nU2VsZWN0aW9uU2VydmljZTogSW1nU2VsZWN0aW9uU2VydmljZSxcclxuICAgIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBpbWdDRE5TZXJ2aWNlOiBJbWdDRE5TZXJ2aWNlLFxyXG4gICAgaW1nRXZlbnRDYXJkU2VydmljZTogSW1nRXZlbnRTZXJ2aWNlLFxyXG4gICAgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXHJcbiAgICB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgYXBpU2VydmljZTogQXBpU2VydmljZVxyXG4gICkge1xyXG4gICAgc3VwZXIoXHJcbiAgICAgIGltZ01hbmFnZXIsXHJcbiAgICAgIGltZ1NlbGVjdGlvblNlcnZpY2UsXHJcbiAgICAgIGh0dHAsXHJcbiAgICAgIGltZ0NETlNlcnZpY2UsXHJcbiAgICAgIGltZ0V2ZW50Q2FyZFNlcnZpY2UsXHJcbiAgICAgIGFsZXJ0U2VydmljZSxcclxuICAgICAgdHJhbnNsYXRlU2VydmljZSxcclxuICAgICAgYXBpU2VydmljZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5pc1VwbG9hZFNlY3Rpb24gPSB0aGlzLnRhYkRpc3BsYXllZCA9PT0gJ2ltZy11cGxvYWQnO1xyXG4gIH1cclxuXHJcbiAgZGlzcGxheUxhcmdlV2luZG93KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zd2l0Y2hEaXNwbGF5V2luZG93LmVtaXQodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBvblRvZ2dsZUltZ1NlbGVjdGVkKCkge1xyXG4gICAgdGhpcy50b2dnbGVJbWdTZWxlY3RlZC5uZXh0KCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJhZGRDc3NQcmlvcml0eVwiIFtAZWFzZUluT3V0XT1cIidpbidcIiBbbmdDbGFzc109XCJ7ICdmdWxsU2l6ZSc6IGZ1bGxTaXplIH1cIj5cclxuICA8ZGl2IGNsYXNzPVwiaW1nLWNhcmRcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImltZy1jYXJkX19jb250YWluZXJcIlxyXG4gICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAnc21hbGxEaXNwbGF5Jzogc3RhdGVEaXNwbGF5ZWQgPT09ICdzbWFsbCcgfHwgaXNVcGxvYWRTZWN0aW9uLFxyXG4gICAgICAgICAgJ2ltZ1NlbGVjdGVkJzogcGljdHVyZS5zZWxlY3RlZCxcclxuICAgICAgICAgICdkZWxldGlvbic6IHBpY3R1cmUuZGVsZXRlZH1cIj5cclxuICAgICAgICAgIDxpbWdcclxuICAgICAgICAgICAgY2xhc3M9XCJpbWctY2FyZF9fY29udGFpbmVyX19pbWdcIlxyXG4gICAgICAgICAgICBbc3JjXT1cInBpY3R1cmUuZmlsZV9uYW1lIHwgaW1nU3JjIDogJzQwMCdcIlxyXG4gICAgICAgICAgICBbYWx0XT1cInBpY3R1cmUuZGlzcGxheV9uYW1lXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uVG9nZ2xlSW1nU2VsZWN0ZWQoKVwiXHJcbiAgICAgICAgICAgIChlcnJvcik9XCJwaWN0dXJlLmltZ05vdExvYWRlZD10cnVlO29uUGljdHVyZU5vdExvYWRpbmcoJGV2ZW50KTtcIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgY2xhc3M9XCJpbWctY2FyZF9fY29udGFpbmVyX19jb25maWdcIlxyXG4gICAgICAgICAgICAqbmdJZj1cIiFwaWN0dXJlLmRlbGV0ZWQgJiYgc3RhdGVEaXNwbGF5ZWQgIT09ICdzbWFsbCdcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJzaXplXCI+PGkgY2xhc3M9XCJmYWwgZmEtaW1hZ2UtcG9sYXJvaWRcIj48L2k+PHNwYW4+e3twaWN0dXJlLnJhd19oZWlnaHR9fXh7e3BpY3R1cmUucmF3X3dpZHRofX08L3NwYW4+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJkbFwiIChjbGljayk9XCJvbkRvd25sb2FkSW1nKHBpY3R1cmUuZGlzcGxheV9uYW1lLCBwaWN0dXJlLmZpbGVfbmFtZSlcIj48aSBjbGFzcz1cImZhbCBmYS1kb3dubG9hZFwiPjwvaT48c3Bhbj57eyAnSW1nTWFuYWdlci5JbWdDYXJkLmRvd25sb2FkJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImVkaXRcIiAoY2xpY2spPVwib25FZGl0KHBpY3R1cmUpXCI+PGkgY2xhc3M9XCJmYXIgZmEtY3JvcC1hbHRcIj48L2k+PHNwYW4+e3sgJ0ltZ01hbmFnZXIuSW1nQ2FyZC5lZGl0JyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNvcHlcIiAoY2xpY2spPVwiY29weUxpbmsocGljdHVyZS5maWxlX25hbWUpXCI+PGkgY2xhc3M9XCJmYWwgZmEtY29weVwiPjwvaT48c3Bhbj57eyAnSW1nTWFuYWdlci5JbWdDYXJkLmNvcHlMaW5rJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImRlbGV0ZWRcIiAoY2xpY2spPVwiYWN0aXZlQ29uZmlybURlbGV0ZSA9IHRydWU7XCI+PGkgY2xhc3M9XCJmYWwgZmEtdGltZXNcIj48L2k+PHNwYW4+e3sgJ0ltZ01hbmFnZXIuSW1nQ2FyZC5kZWwnIHwgdHJhbnNsYXRlIH19PC9zcGFuPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic2VsZWN0ZWRcIiAoY2xpY2spPVwib25Ub2dnbGVJbWdTZWxlY3RlZCgpXCIgKm5nSWY9XCJzdGF0ZURpc3BsYXllZCAhPT0gJ3dpbmRvdydcIj5cclxuICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCIhcGljdHVyZS5zZWxlY3RlZFwiIGNsYXNzPVwiZmFsIGZhLXNxdWFyZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJwaWN0dXJlLnNlbGVjdGVkXCIgY2xhc3M9XCJmYS1zb2xpZCBmYS1jaGVjay1zcXVhcmUgY2hlY2tlZFwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgJ0ltZ01hbmFnZXIuSW1nQ2FyZC5zZWxlY3QnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwiaW1nLWNhcmRfX2NvbnRhaW5lcl9fY29uZmlnIGltZy1jYXJkX19jb250YWluZXJfX2NvbmZpZy0tc21hbGxcIlxyXG4gICAgICAgICAgICAqbmdJZj1cIiFwaWN0dXJlLmRlbGV0ZWQgJiYgc3RhdGVEaXNwbGF5ZWQgPT09ICdzbWFsbCdcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwic2hvdy1lZGl0XCIgKGNsaWNrKT1cImRpc3BsYXlMYXJnZVdpbmRvdygpXCI+PGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1lZGl0XCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1nLWNhcmRfX2NvbnRhaW5lcl9fZGVsZXRlXCIgW25nQ2xhc3NdPVwieyAnc2hvdycgOiAgYWN0aXZlQ29uZmlybURlbGV0ZX1cIj5cclxuICAgICAgICAgICAgPHNwYW4+e3sgJ0ltZ01hbmFnZXIuSW1nQ2FyZC5jb25maXJtRGVsZXRlSW1nJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJhY3RpdmVDb25maXJtRGVsZXRlID0gZmFsc2U7XCI+e3sgJ25vJyB8IHRyYW5zbGF0ZSB9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cIm9uUmVtb3ZlSW1nKHBpY3R1cmUpO2FjdGl2ZUNvbmZpcm1EZWxldGUgPSBmYWxzZTtcIj57eyAneWVzJyB8IHRyYW5zbGF0ZSB9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImltZy1jYXJkX19jb250YWluZXJfX3ZhbGlkXCIgKm5nSWY9XCJzdGF0ZURpc3BsYXllZCA9PT0gJ3NtYWxsJyAmJiB0YWJEaXNwbGF5ZWQgPT0gJ2ltZy11cGxvYWQnXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFyIGZhLWNoZWNrXCI+PC9pPlxyXG4gICAgICAgICAgICA8c3Bhbj57eyAnSW1nTWFuYWdlci5JbWdDYXJkLnZhbGlkSW1nU21hbGwnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICpuZ0lmPVwicGljdHVyZS5pbWdOb3RMb2FkZWRcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImltZy1jYXJkX19jb250YWluZXJfX292ZXJsYXlcIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7J2ltZy1jYXJkX19jb250YWluZXJfX292ZXJsYXktLXNtYWxsRGlzcGxheSc6IHN0YXRlRGlzcGxheWVkID09PSAnc21hbGwnIHx8IGlzVXBsb2FkU2VjdGlvbn1cIj5cclxuICAgICAgICAgICAgICAgIDxpIChjbGljayk9XCJvblRvZ2dsZUltZ1NlbGVjdGVkKClcIiBjbGFzcz1cImZhZCBmYS1mb2xkZXItdGltZXNcIj48L2k+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxzcGFuIGJ0bkxvYWRpbmdBbmltIGNsYXNzPVwiYnRuTG9hZGluZ0FubmltYXRpb25cIiAqbmdJZj1cInBpY3R1cmUuZGVsZXRlZFwiPjwvc3Bhbj5cclxuXHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJpbWctY2FyZF9fbmFtZUNvbnRhaW5lclwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwieydzbWFsbE5hbWVEaXNwbGF5Jzogc3RhdGVEaXNwbGF5ZWQgPT09ICdzbWFsbCcgfHwgaXNVcGxvYWRTZWN0aW9uLCAnZm9jdXMnOiBmb2N1c0lucHV0fVwiPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgY2xhc3M9XCJ3ekltZ01uZ0lucHV0IGltZy1jYXJkX19uYW1lQ29udGFpbmVyX19uYW1lXCJcclxuICAgICAgICAgIFsobmdNb2RlbCldPVwicGljdHVyZS5kaXNwbGF5X25hbWVcIlxyXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25OYW1lQ2hhbmdlKHBpY3R1cmUuaWRfZmlsZSlcIlxyXG4gICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlLCB1cGRhdGVPbjogJ2JsdXInfVwiXHJcbiAgICAgICAgICAoZm9jdXMpPVwicHJldmlvdXNOYW1lPXBpY3R1cmUuZGlzcGxheV9uYW1lO2ZvY3VzSW5wdXQgPSB0cnVlO1wiXHJcbiAgICAgICAgICAoYmx1cik9XCJmb2N1c0lucHV0ID0gZmFsc2U7XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgPHNwYW4+e3twaWN0dXJlLmRpc3BsYXlfbmFtZX19PC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1nLWNhcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd3otaW1nLW1hbmFnZXIvc3JjL2xpYi9jb21wb25lbnRzL2ltYWdlcy12aWV3L21vc2FpYy12aWV3L2ltZy1jYXJkL2ltZy1jYXJkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3d6LWltZy1tYW5hZ2VyL3NyYy9saWIvY29tcG9uZW50cy9pbWFnZXMtdmlldy9tb3NhaWMtdmlldy9pbWctY2FyZC9pbWctY2FyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUV6RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDN0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDakYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx3REFBd0QsQ0FBQTtBQUVsRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7Ozs7Ozs7Ozs7OztBQVM5RCxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsbUJBQW1CO0lBcUJ2RCxZQUNFLFVBQTZCLEVBQzdCLG1CQUF3QyxFQUN4QyxJQUFnQixFQUNoQixhQUE0QixFQUM1QixtQkFBb0MsRUFDcEMsWUFBMEIsRUFDMUIsZ0JBQWtDLEVBQ2xDLFVBQXNCO1FBRXRCLEtBQUssQ0FDSCxVQUFVLEVBQ1YsbUJBQW1CLEVBQ25CLElBQUksRUFDSixhQUFhLEVBQ2IsbUJBQW1CLEVBQ25CLFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsVUFBVSxDQUNYLENBQUM7UUE5QkosZUFBVSxHQUFHLEtBQUssQ0FBQztRQUduQixzQkFBaUIsR0FBdUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUczRCx3QkFBbUIsR0FBMEIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVoRSxvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUNqQyx3QkFBbUIsR0FBRyxLQUFLLENBQUM7SUFzQjVCLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsWUFBWSxLQUFLLFlBQVksQ0FBQztJQUM1RCxDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELG1CQUFtQjtRQUNqQixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEMsQ0FBQzs7NkdBckRVLGdCQUFnQjtpR0FBaEIsZ0JBQWdCLDRRQ3JCN0IseW9LQW1GQSwyL0JEbEVjO1FBQ1YsU0FBUztLQUNWOzJGQUVVLGdCQUFnQjtrQkFQNUIsU0FBUzsrQkFDRSxVQUFVLGNBRVI7d0JBQ1YsU0FBUztxQkFDVjtnVEFLRCxZQUFZO3NCQURYLEtBQUs7Z0JBR04sUUFBUTtzQkFEUCxLQUFLO2dCQUdOLE9BQU87c0JBRE4sS0FBSztnQkFHTixLQUFLO3NCQURKLEtBQUs7Z0JBS04saUJBQWlCO3NCQURoQixNQUFNO2dCQUlQLG1CQUFtQjtzQkFEbEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSW1nRXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvaW1nLWV2ZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJbWdQaWN0dXJlRFRPIH0gZnJvbSAnLi4vLi4vLi4vLi4vZHRvL2ltZy1tYW5hZ2VyLmR0byc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEltZ01hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvaW1nLW1hbmFnZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEltZ1NlbGVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9pbWctc2VsZWN0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJbWdDRE5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvY29uZmlnL2ltZy1jZG4uc2VydmljZSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgSW1hZ2VzQWN0aW9uSGFuZGxlciB9IGZyb20gJy4uLy4uL2ltYWdlcy1hY3Rpb25zLWhhbmRsZXInO1xyXG5pbXBvcnQgeyBlYXNlSW5PdXQgfSBmcm9tICcuLi8uLi8uLi8uLi9hbmltYXRpb25zL2Vhc2VJbk91dC9lYXNlLWluLW91dC5hbmltYXRpb24nXHJcbmltcG9ydCB7IHRhYkRpc3BsYXllZCB9IGZyb20gJy4uLy4uLy4uLy4uL2R0by9leHBvcnQtZHRvcy5hcGknO1xyXG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9hbGVydC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXBpU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL2FwaS5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaW1nLWNhcmQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9pbWctY2FyZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgYW5pbWF0aW9uczogW1xyXG4gICAgZWFzZUluT3V0XHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW1nQ2FyZENvbXBvbmVudCBleHRlbmRzIEltYWdlc0FjdGlvbkhhbmRsZXIgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHRhYkRpc3BsYXllZDogdGFiRGlzcGxheWVkO1xyXG4gIEBJbnB1dCgpXHJcbiAgZnVsbFNpemU6IGJvb2xlYW47XHJcbiAgQElucHV0KClcclxuICBwaWN0dXJlOiBJbWdQaWN0dXJlRFRPO1xyXG4gIEBJbnB1dCgpXHJcbiAgaW5kZXg6IG51bWJlcjtcclxuICBmb2N1c0lucHV0ID0gZmFsc2U7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHRvZ2dsZUltZ1NlbGVjdGVkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHN3aXRjaERpc3BsYXlXaW5kb3c6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgaXNVcGxvYWRTZWN0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgYWN0aXZlQ29uZmlybURlbGV0ZSA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIGltZ01hbmFnZXI6IEltZ01hbmFnZXJTZXJ2aWNlLFxyXG4gICAgaW1nU2VsZWN0aW9uU2VydmljZTogSW1nU2VsZWN0aW9uU2VydmljZSxcclxuICAgIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBpbWdDRE5TZXJ2aWNlOiBJbWdDRE5TZXJ2aWNlLFxyXG4gICAgaW1nRXZlbnRDYXJkU2VydmljZTogSW1nRXZlbnRTZXJ2aWNlLFxyXG4gICAgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXHJcbiAgICB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgYXBpU2VydmljZTogQXBpU2VydmljZVxyXG4gICkge1xyXG4gICAgc3VwZXIoXHJcbiAgICAgIGltZ01hbmFnZXIsXHJcbiAgICAgIGltZ1NlbGVjdGlvblNlcnZpY2UsXHJcbiAgICAgIGh0dHAsXHJcbiAgICAgIGltZ0NETlNlcnZpY2UsXHJcbiAgICAgIGltZ0V2ZW50Q2FyZFNlcnZpY2UsXHJcbiAgICAgIGFsZXJ0U2VydmljZSxcclxuICAgICAgdHJhbnNsYXRlU2VydmljZSxcclxuICAgICAgYXBpU2VydmljZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5pc1VwbG9hZFNlY3Rpb24gPSB0aGlzLnRhYkRpc3BsYXllZCA9PT0gJ2ltZy11cGxvYWQnO1xyXG4gIH1cclxuXHJcbiAgZGlzcGxheUxhcmdlV2luZG93KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zd2l0Y2hEaXNwbGF5V2luZG93LmVtaXQodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBvblRvZ2dsZUltZ1NlbGVjdGVkKCkge1xyXG4gICAgdGhpcy50b2dnbGVJbWdTZWxlY3RlZC5uZXh0KCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJhZGRDc3NQcmlvcml0eVwiIFtAZWFzZUluT3V0XT1cIidpbidcIiBbbmdDbGFzc109XCJ7ICdmdWxsU2l6ZSc6IGZ1bGxTaXplIH1cIj5cclxuICA8ZGl2IGNsYXNzPVwiaW1nLWNhcmRcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImltZy1jYXJkX19jb250YWluZXJcIlxyXG4gICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAnc21hbGxEaXNwbGF5Jzogc3RhdGVEaXNwbGF5ZWQgPT09ICdzbWFsbCcgfHwgaXNVcGxvYWRTZWN0aW9uLFxyXG4gICAgICAgICAgJ2ltZ1NlbGVjdGVkJzogcGljdHVyZS5zZWxlY3RlZCxcclxuICAgICAgICAgICdkZWxldGlvbic6IHBpY3R1cmUuZGVsZXRlZH1cIj5cclxuICAgICAgICAgIDxpbWdcclxuICAgICAgICAgICAgY2xhc3M9XCJpbWctY2FyZF9fY29udGFpbmVyX19pbWdcIlxyXG4gICAgICAgICAgICBbc3JjXT1cInBpY3R1cmUuZmlsZV9uYW1lIHwgaW1nU3JjIDogJzQwMCdcIlxyXG4gICAgICAgICAgICBbYWx0XT1cInBpY3R1cmUuZGlzcGxheV9uYW1lXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uVG9nZ2xlSW1nU2VsZWN0ZWQoKVwiXHJcbiAgICAgICAgICAgIChlcnJvcik9XCJwaWN0dXJlLmltZ05vdExvYWRlZD10cnVlO29uUGljdHVyZU5vdExvYWRpbmcoJGV2ZW50KTtcIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaG92ZXItaW1nLXNpemVcIj5cclxuICAgICAgICAgIDxzcGFuPnt7cGljdHVyZS5yYXdfaGVpZ2h0fX14e3twaWN0dXJlLnJhd193aWR0aH19PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cImltZy1jYXJkX19jb250YWluZXJfX2NvbmZpZ1wiXHJcbiAgICAgICAgICAgICpuZ0lmPVwiIXBpY3R1cmUuZGVsZXRlZCAmJiBzdGF0ZURpc3BsYXllZCAhPT0gJ3NtYWxsJ1wiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFwaWN0dXJlLnZpZGVvX2xpbmtcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInNpemVcIiAoY2xpY2spPVwicmVkaXJlY3RUb1ZpZGVvKHBpY3R1cmUpXCI+PGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1wbGF5XCI+PC9pPjxzcGFuPnt7ICdJbWdNYW5hZ2VyLkltZ0VkaXRvci5BZGRWaWRlbycgfCB0cmFuc2xhdGUgfX08L3NwYW4+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGljdHVyZS52aWRlb19saW5rXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJzaXplXCIgKGNsaWNrKT1cInJlZGlyZWN0VG9WaWRlbyhwaWN0dXJlKVwiPjxpIGNsYXNzPVwiZmEtc29saWQgZmEtcGxheVwiPjwvaT48c3Bhbj57eyAnSW1nTWFuYWdlci5JbWdFZGl0b3IuRWRpdFZpZGVvJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj48L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJkbFwiIChjbGljayk9XCJvbkRvd25sb2FkSW1nKHBpY3R1cmUuZGlzcGxheV9uYW1lLCBwaWN0dXJlLmZpbGVfbmFtZSlcIj48aSBjbGFzcz1cImZhbCBmYS1kb3dubG9hZFwiPjwvaT48c3Bhbj57eyAnSW1nTWFuYWdlci5JbWdDYXJkLmRvd25sb2FkJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImVkaXRcIiAoY2xpY2spPVwib25FZGl0KHBpY3R1cmUpXCI+PGkgY2xhc3M9XCJmYXIgZmEtY3JvcC1hbHRcIj48L2k+PHNwYW4+e3sgJ0ltZ01hbmFnZXIuSW1nQ2FyZC5lZGl0JyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNvcHlcIiAoY2xpY2spPVwiY29weUxpbmsocGljdHVyZS5maWxlX25hbWUpXCI+PGkgY2xhc3M9XCJmYWwgZmEtY29weVwiPjwvaT48c3Bhbj57eyAnSW1nTWFuYWdlci5JbWdDYXJkLmNvcHlMaW5rJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImRlbGV0ZWRcIiAoY2xpY2spPVwiYWN0aXZlQ29uZmlybURlbGV0ZSA9IHRydWU7XCI+PGkgY2xhc3M9XCJmYWwgZmEtdGltZXNcIj48L2k+PHNwYW4+e3sgJ0ltZ01hbmFnZXIuSW1nQ2FyZC5kZWwnIHwgdHJhbnNsYXRlIH19PC9zcGFuPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic2VsZWN0ZWRcIiAoY2xpY2spPVwib25Ub2dnbGVJbWdTZWxlY3RlZCgpXCIgKm5nSWY9XCJzdGF0ZURpc3BsYXllZCAhPT0gJ3dpbmRvdydcIj5cclxuICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCIhcGljdHVyZS5zZWxlY3RlZFwiIGNsYXNzPVwiZmFsIGZhLXNxdWFyZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJwaWN0dXJlLnNlbGVjdGVkXCIgY2xhc3M9XCJmYS1zb2xpZCBmYS1jaGVjay1zcXVhcmUgY2hlY2tlZFwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgJ0ltZ01hbmFnZXIuSW1nQ2FyZC5zZWxlY3QnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwiaW1nLWNhcmRfX2NvbnRhaW5lcl9fY29uZmlnIGltZy1jYXJkX19jb250YWluZXJfX2NvbmZpZy0tc21hbGxcIlxyXG4gICAgICAgICAgICAqbmdJZj1cIiFwaWN0dXJlLmRlbGV0ZWQgJiYgc3RhdGVEaXNwbGF5ZWQgPT09ICdzbWFsbCdcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwic2hvdy1lZGl0XCIgKGNsaWNrKT1cImRpc3BsYXlMYXJnZVdpbmRvdygpXCI+PGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1lZGl0XCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1nLWNhcmRfX2NvbnRhaW5lcl9fZGVsZXRlXCIgW25nQ2xhc3NdPVwieyAnc2hvdycgOiAgYWN0aXZlQ29uZmlybURlbGV0ZX1cIj5cclxuICAgICAgICAgICAgPHNwYW4+e3sgJ0ltZ01hbmFnZXIuSW1nQ2FyZC5jb25maXJtRGVsZXRlSW1nJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJhY3RpdmVDb25maXJtRGVsZXRlID0gZmFsc2U7XCI+e3sgJ25vJyB8IHRyYW5zbGF0ZSB9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cIm9uUmVtb3ZlSW1nKHBpY3R1cmUpO2FjdGl2ZUNvbmZpcm1EZWxldGUgPSBmYWxzZTtcIj57eyAneWVzJyB8IHRyYW5zbGF0ZSB9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImltZy1jYXJkX19jb250YWluZXJfX3ZhbGlkXCIgKm5nSWY9XCJzdGF0ZURpc3BsYXllZCA9PT0gJ3NtYWxsJyAmJiB0YWJEaXNwbGF5ZWQgPT0gJ2ltZy11cGxvYWQnXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFyIGZhLWNoZWNrXCI+PC9pPlxyXG4gICAgICAgICAgICA8c3Bhbj57eyAnSW1nTWFuYWdlci5JbWdDYXJkLnZhbGlkSW1nU21hbGwnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICpuZ0lmPVwicGljdHVyZS5pbWdOb3RMb2FkZWRcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImltZy1jYXJkX19jb250YWluZXJfX292ZXJsYXlcIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7J2ltZy1jYXJkX19jb250YWluZXJfX292ZXJsYXktLXNtYWxsRGlzcGxheSc6IHN0YXRlRGlzcGxheWVkID09PSAnc21hbGwnIHx8IGlzVXBsb2FkU2VjdGlvbn1cIj5cclxuICAgICAgICAgICAgICAgIDxpIChjbGljayk9XCJvblRvZ2dsZUltZ1NlbGVjdGVkKClcIiBjbGFzcz1cImZhZCBmYS1mb2xkZXItdGltZXNcIj48L2k+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxzcGFuIGJ0bkxvYWRpbmdBbmltIGNsYXNzPVwiYnRuTG9hZGluZ0FubmltYXRpb25cIiAqbmdJZj1cInBpY3R1cmUuZGVsZXRlZFwiPjwvc3Bhbj5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJwaWN0dXJlLnZpZGVvX2xpbmtcIiBjbGFzcz1cImltZy1jYXJkX19jb250YWluZXJfX3ZpZGVvXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWQgZmEtcGxheVwiPjwvaT5cclxuICAgICAgICAgICAgPHNwYW4+e3sgJ0ltZ01hbmFnZXIuSW1nRWRpdG9yLlZpZGVvJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwiaW1nLWNhcmRfX25hbWVDb250YWluZXJcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cInsnc21hbGxOYW1lRGlzcGxheSc6IHN0YXRlRGlzcGxheWVkID09PSAnc21hbGwnIHx8IGlzVXBsb2FkU2VjdGlvbiwgJ2ZvY3VzJzogZm9jdXNJbnB1dH1cIj5cclxuICAgICAgICA8aW5wdXRcclxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgIGNsYXNzPVwid3pJbWdNbmdJbnB1dCBpbWctY2FyZF9fbmFtZUNvbnRhaW5lcl9fbmFtZVwiXHJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cInBpY3R1cmUuZGlzcGxheV9uYW1lXCJcclxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uTmFtZUNoYW5nZShwaWN0dXJlLmlkX2ZpbGUpXCJcclxuICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZSwgdXBkYXRlT246ICdibHVyJ31cIlxyXG4gICAgICAgICAgKGZvY3VzKT1cInByZXZpb3VzTmFtZT1waWN0dXJlLmRpc3BsYXlfbmFtZTtmb2N1c0lucHV0ID0gdHJ1ZTtcIlxyXG4gICAgICAgICAgKGJsdXIpPVwiZm9jdXNJbnB1dCA9IGZhbHNlO1wiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDxzcGFuPnt7cGljdHVyZS5kaXNwbGF5X25hbWV9fTwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19