ngx-histaff-alpha 2.2.0 → 2.2.1

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 (55) hide show
  1. package/esm2022/lib/app/enum/EnumFormBaseContolType.mjs +4 -1
  2. package/esm2022/lib/app/interfaces/IQueryListRequest.mjs +1 -1
  3. package/esm2022/lib/app/libraries/contractinfor/contractinfor.component.mjs +2 -2
  4. package/esm2022/lib/app/libraries/core-contract-seeker/core-contract-seeker/core-contract-seeker.component.mjs +9 -4
  5. package/esm2022/lib/app/libraries/core-control/core-control/core-control.component.mjs +3 -3
  6. package/esm2022/lib/app/libraries/core-control-no-grid-buffer/core-control-no-grid-buffer/core-control-no-grid-buffer.component.mjs +2 -2
  7. package/esm2022/lib/app/libraries/core-employee-seeker/core-employee-seeker/core-employee-seeker.component.mjs +8 -5
  8. package/esm2022/lib/app/libraries/core-form/core-form/enum-interfaces.mjs +1 -1
  9. package/esm2022/lib/app/libraries/core-form-control-seeker/core-form-control-seeker/core-form-control-seeker.component.mjs +13 -4
  10. package/esm2022/lib/app/libraries/core-job-seeker/core-job-seeker.component.mjs +9 -4
  11. package/esm2022/lib/app/libraries/core-loading-surface/core-loading-surface/core-loading-surface.component.mjs +3 -3
  12. package/esm2022/lib/app/libraries/core-mcc/core-mcc/core-mcc.component.mjs +2 -2
  13. package/esm2022/lib/app/libraries/core-org-tree/core-org-tree/core-org-tree.component.mjs +5 -2
  14. package/esm2022/lib/app/libraries/core-org-unit-seeker/core-org-unit-seeker/core-org-unit-seeker.component.mjs +9 -5
  15. package/esm2022/lib/app/libraries/core-page-list/core-page-list.component.mjs +11 -2
  16. package/esm2022/lib/app/libraries/core-permission/core-permission/core-permission.component.mjs +2 -2
  17. package/esm2022/lib/app/libraries/core-permission-actions/core-permission-actions/core-permission-actions.component.mjs +2 -2
  18. package/esm2022/lib/app/libraries/core-position-concurrent-seeker/core-position-concurrent-seeker/core-position-concurrent-seeker.component.mjs +9 -4
  19. package/esm2022/lib/app/libraries/core-position-seeker/core-position-seeker/core-position-seeker.component.mjs +6 -3
  20. package/esm2022/lib/app/libraries/core-table/core-table.component.mjs +4 -4
  21. package/esm2022/lib/app/libraries/core-tree-grid/core-tree-grid/core-tree-grid.component.mjs +3 -3
  22. package/esm2022/lib/app/libraries/core-wage-seeker/core-wage-seeker/core-wage-seeker.component.mjs +9 -4
  23. package/esm2022/lib/app/libraries/core-working-seeker/core-working-seeker/core-working-seeker.component.mjs +9 -4
  24. package/esm2022/lib/app/libraries/decision/decision.component.mjs +2 -2
  25. package/esm2022/lib/app/libraries/huconcurrently/huconcurrently.component.mjs +2 -2
  26. package/esm2022/lib/app/libraries/job/job.component.mjs +2 -5
  27. package/esm2022/lib/app/libraries/position/position.component.mjs +2 -2
  28. package/esm2022/lib/app/libraries/staffprofile/staffprofile.component.mjs +2 -2
  29. package/esm2022/lib/app/libraries/wage/wage.component.mjs +2 -2
  30. package/esm2022/lib/app/root/function/function.component.mjs +2 -2
  31. package/esm2022/lib/app/root/function-ignore/function-ignore/function-ignore.component.mjs +1 -1
  32. package/esm2022/lib/app/root/groupfunction/groupfunction.component.mjs +1 -1
  33. package/esm2022/lib/app/root/language/language/language.component.mjs +1 -1
  34. package/esm2022/lib/app/root/mutation-log/mutation-log/mutation-log.component.mjs +1 -1
  35. package/esm2022/lib/app/root/portal-route/portal-route.component.mjs +1 -1
  36. package/esm2022/lib/app/root/sys-action/sys-action/sys-action.component.mjs +1 -1
  37. package/esm2022/lib/app/root/sys-function-action/sys-function-action/sys-function-action.component.mjs +1 -1
  38. package/esm2022/lib/app/root/sys-module/sys-module/sys-module.component.mjs +2 -2
  39. package/fesm2022/ngx-histaff-alpha.mjs +108 -59
  40. package/fesm2022/ngx-histaff-alpha.mjs.map +1 -1
  41. package/lib/app/interfaces/IQueryListRequest.d.ts +1 -0
  42. package/lib/app/libraries/core-contract-seeker/core-contract-seeker/core-contract-seeker.component.d.ts +2 -1
  43. package/lib/app/libraries/core-employee-seeker/core-employee-seeker/core-employee-seeker.component.d.ts +2 -1
  44. package/lib/app/libraries/core-form/core-form/enum-interfaces.d.ts +15 -15
  45. package/lib/app/libraries/core-form-control-seeker/core-form-control-seeker/core-form-control-seeker.component.d.ts +3 -1
  46. package/lib/app/libraries/core-job-seeker/core-job-seeker.component.d.ts +2 -1
  47. package/lib/app/libraries/core-org-tree/core-org-tree/core-org-tree.component.d.ts +3 -2
  48. package/lib/app/libraries/core-org-unit-seeker/core-org-unit-seeker/core-org-unit-seeker.component.d.ts +3 -1
  49. package/lib/app/libraries/core-page-list/core-page-list.component.d.ts +2 -1
  50. package/lib/app/libraries/core-position-concurrent-seeker/core-position-concurrent-seeker/core-position-concurrent-seeker.component.d.ts +2 -1
  51. package/lib/app/libraries/core-position-seeker/core-position-seeker/core-position-seeker.component.d.ts +2 -1
  52. package/lib/app/libraries/core-wage-seeker/core-wage-seeker/core-wage-seeker.component.d.ts +2 -1
  53. package/lib/app/libraries/core-working-seeker/core-working-seeker/core-working-seeker.component.d.ts +2 -1
  54. package/lib/app/libraries/job/job.component.d.ts +1 -2
  55. package/package.json +1 -1
@@ -1,4 +1,5 @@
1
1
  import { Component, Input, isDevMode, ViewChild, Output, EventEmitter } from '@angular/core';
2
+ import { BehaviorSubject } from 'rxjs';
2
3
  import { CoreFormControlBaseComponent } from '../../core-form-control-base/core-form-control-base.component';
3
4
  import { EnumCoreFormControlSeekerSourceType } from '../EnumCoreFormControlSeekerSourceType';
4
5
  import { FormsModule, NG_VALUE_ACCESSOR, NgControl } from '@angular/forms';
@@ -57,6 +58,7 @@ export class CoreFormControlSeekerComponent extends CoreFormControlBaseComponent
57
58
  caption: EnumTranslateKey.UI_CORE_CONTROL_TABLE_TOOL_DELETE
58
59
  }];
59
60
  this.hideFooter = false;
61
+ this.excludedIds$ = new BehaviorSubject([]);
60
62
  this.defaultAvatar = ras.get();
61
63
  }
62
64
  asignMultiModeColumns() {
@@ -154,6 +156,11 @@ export class CoreFormControlSeekerComponent extends CoreFormControlBaseComponent
154
156
  this.alertService.error(`All _SEEKER controls require input:
155
157
  shownFrom: string; (for '${this.ngControl.name}')`, noneAutoClosedAlertOptions);
156
158
  }
159
+ if (!!this.indirectBinding) {
160
+ if (!this.bindGridIdTo) {
161
+ this.alertService.error(`CoreFormControlSeekerComponent Error: Nếu indirectBinding = true, bắt buộc phải có thêm thuộc tính bindGridIdTo (trường '${this.ngControl.name}')`);
162
+ }
163
+ }
157
164
  }
158
165
  }
159
166
  /* END: CHECK INPUTS */
@@ -371,7 +378,7 @@ export class CoreFormControlSeekerComponent extends CoreFormControlBaseComponent
371
378
  this.editBufferForm = e;
372
379
  }
373
380
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CoreFormControlSeekerComponent, deps: [{ token: i1.AlertService }, { token: i0.Injector }, { token: i2.MultiLanguageService }, { token: i3.CoreJobSeekerComponent }, { token: i4.CoreEmployeeSeekerComponent }, { token: i5.CoreContractSeekerComponent }, { token: i6.CoreWorkingSeekerComponent }, { token: i7.CoreWageSeekerComponent }, { token: i8.CorePositionSeekerComponent }, { token: i9.RandomAvatarService }], target: i0.ɵɵFactoryTarget.Component }); }
374
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.3", type: CoreFormControlSeekerComponent, isStandalone: true, selector: "core-form-control-seeker", inputs: { title: "title", showPageHeader: "showPageHeader", preDefinedOuterParam$: "preDefinedOuterParam$", click$: "click$", getByIdObject$: "getByIdObject$", paramMode: "paramMode", multiMode: "multiMode", objectList$: "objectList$", shownSeekerColumns: "shownSeekerColumns", indirectBinding: "indirectBinding", bindGridIdTo: "bindGridIdTo", multiModeExtendedColumns: "multiModeExtendedColumns", multiModeExtendedSections: "multiModeExtendedSections", editBufferData$: "editBufferData$", seekerSourceType: "seekerSourceType", boundFrom: "boundFrom", shownFrom: "shownFrom", alsoBindTo: "alsoBindTo", seekerVerifyIgnore: "seekerVerifyIgnore" }, outputs: { onDoubleClick: "onDoubleClick" }, providers: [
381
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.3", type: CoreFormControlSeekerComponent, isStandalone: true, selector: "core-form-control-seeker", inputs: { title: "title", showPageHeader: "showPageHeader", preDefinedOuterParam$: "preDefinedOuterParam$", click$: "click$", getByIdObject$: "getByIdObject$", paramMode: "paramMode", multiMode: "multiMode", objectList$: "objectList$", shownSeekerColumns: "shownSeekerColumns", excludeExistingList: "excludeExistingList", indirectBinding: "indirectBinding", bindGridIdTo: "bindGridIdTo", multiModeExtendedColumns: "multiModeExtendedColumns", multiModeExtendedSections: "multiModeExtendedSections", editBufferData$: "editBufferData$", seekerSourceType: "seekerSourceType", boundFrom: "boundFrom", shownFrom: "shownFrom", alsoBindTo: "alsoBindTo", seekerVerifyIgnore: "seekerVerifyIgnore" }, outputs: { onDoubleClick: "onDoubleClick" }, providers: [
375
382
  {
376
383
  provide: NG_VALUE_ACCESSOR,
377
384
  multi: true,
@@ -383,7 +390,7 @@ export class CoreFormControlSeekerComponent extends CoreFormControlBaseComponent
383
390
  CoreWorkingSeekerComponent,
384
391
  CoreWageSeekerComponent,
385
392
  CorePositionSeekerComponent,
386
- ], viewQueries: [{ propertyName: "avatar", first: true, predicate: ["avatar"], descendants: true }, { propertyName: "sticker", first: true, predicate: ["sticker"], descendants: true }, { propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div #container class=\"core-form-control-seeker-container\">\r\n <div class=\"input-wrapper\" [class.d-none]=\"!!multiMode\">\r\n <label #shownText type=\"text\" class=\"text form-control\" [class.form-control-disabled]=\"disabled\">\r\n <span [appTooltip]=\"valueToShow\">{{ valueToShow }}</span>\r\n </label>\r\n @if (!multiMode) {\r\n <div class=\"clear-icon-wrapper\" [class.d-none]=\"!!disabled || !!!value\" (click)=\"onClickClear()\">\r\n <div class=\"flex-wrapper\" [appTooltip]=\"'UI.CORE_CONTOL_COMMON_CLEAR' | translate: lang\">\r\n <i class=\"feather-x\"></i>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"seeker-icon-wrapper\" [class.form-control-disabled]=\"disabled\" [class.multi-mode]=\"!!multiMode\"\r\n (click)=\"onClickSeek()\">\r\n <div class=\"flex-wrapper\" [class.form-control-disabled]=\"disabled\">\r\n <i class=\"feather-search\"></i>\r\n </div>\r\n </div>\r\n @if (!!multiMode) {\r\n <div class=\"core-tabbe-wrapper\">\r\n <core-table [columns]=\"multiModeColumns\" [data]=\"selectedData\" [showTools]=\"!!!disabled\" [tools]=\"tools\"\r\n [searchSwitchDisabled]=\"true\" (onToolClick)=\"onToolClick($event)\"\r\n (onRowDoubleClick)=\"onSelectedDataRowDoubleClick($event)\"></core-table>\r\n </div>\r\n }\r\n\r\n @if (!!sourceOpen) {\r\n <div class=\"modal-container\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header-panel\">\r\n <core-page-header [title]=\"title\" [hideButtonGroup]=\"true\" *ngIf=\"showPageHeader\"></core-page-header>\r\n </div>\r\n <div class=\"source-container\">\r\n <i class=\"feather-x\" (click)=\"onCancel()\"\r\n [class.d-block]=\"seekerSourceType==='ORGANIZATION_UNIT_SEEK'\"></i>\r\n\r\n\r\n @switch (seekerSourceType) {\r\n @case ('JOB_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"jobSeek\">\r\n </ng-container>\r\n }\r\n @case ('EMPLOYEE_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"employeeSeek\">\r\n </ng-container>\r\n }\r\n @case ('CONTRACT_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"contractSeek\">\r\n </ng-container>\r\n }\r\n @case ('WORKING_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"workingSeek\">\r\n </ng-container>\r\n }\r\n @case ('WAGE_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"wageSeek\">\r\n </ng-container>\r\n }\r\n @case ('ORGANIZATION_UNIT_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"organizationUnitSeek\">\r\n </ng-container>\r\n }\r\n @case ('POSITION_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"positionSeek\">\r\n </ng-container>\r\n }\r\n @case ('POSITION_CONCURRENT_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"positionConcurrentSeek\">\r\n </ng-container>\r\n }\r\n }\r\n\r\n </div>\r\n\r\n @if (!hideFooter) {\r\n <div class=\"footer\">\r\n <div class=\"d-flex-end\">\r\n <button class=\"btn btn-primary\" type=\"button\" (click)=\"onSelect()\">{{\r\n 'UI_CORE_CONFIRM_DIALOG_BUTTON_SELECT' | translate: lang }}</button>\r\n <button class=\"btn btn-secondary\" type=\"button\" (click)=\"onCancel()\">{{\r\n 'UI_CORE_CONFIRM_DIALOG_BUTTON_CANCEL' | translate: lang }}</button>\r\n </div>\r\n </div>\r\n }\r\n\r\n </div>\r\n </div>\r\n }\r\n\r\n</div>\r\n\r\n<ng-template #jobSeek>\r\n <core-job-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-job-seeker>\r\n</ng-template>\r\n\r\n<ng-template #employeeSeek>\r\n <core-employee-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-employee-seeker>\r\n</ng-template>\r\n\r\n<ng-template #contractSeek>\r\n <core-contract-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-contract-seeker>\r\n</ng-template>\r\n\r\n<ng-template #workingSeek>\r\n <core-working-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-working-seeker>\r\n</ng-template>\r\n\r\n<ng-template #wageSeek>\r\n <core-wage-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-wage-seeker>\r\n</ng-template>\r\n\r\n<ng-template #positionSeek>\r\n <core-position-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\"\r\n [seekerVerifyIgnore]=\"seekerVerifyIgnore\" (rowDoubleClick)=\"onRowDoubleClick($event)\"\r\n (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-position-seeker>\r\n</ng-template>\r\n\r\n<ng-template #positionConcurrentSeek>\r\n <core-position-concurrent-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-position-concurrent-seeker>\r\n</ng-template>\r\n\r\n<ng-template #organizationUnitSeek>\r\n <core-org-unit-seeker (itemDoubleClick)=\"onItemDoubleClick($event)\"></core-org-unit-seeker>\r\n</ng-template>\r\n\r\n<ng-template #avatar let-avatar=\"context.avatar\">\r\n <img *ngIf=\"avatar != null\" [src]=\"avatar | mapAvatarToServer\" class=\"in-table-avatar\" appImageErrorResolver>\r\n <img *ngIf=\"avatar == null\" [src]=\"defaultAvatar\" class=\"in-table-avatar\" appImageErrorResolver>\r\n</ng-template>\r\n<ng-template #sticker let-code=\"context.actflg\">\r\n <core-status-sticker [code]=\"code\" [isTrueCode]=\"true\"></core-status-sticker>\r\n</ng-template>\r\n\r\n<div [class.d-none]=\"!showEditBuffer\">\r\n <core-page-edit-lite [sections]=\"multiModeExtendedSections\" (onFormCreated)=\"onEditBufferFormCreated($event)\"\r\n (submitLogic)=\"onEditBufferSubmit($event)\" (cancelLogic)=\"onEditBufferCancel($event)\"></core-page-edit-lite>\r\n</div>", styles: [".core-form-control-seeker-container{display:block;position:relative;background-color:#fff}.core-form-control-seeker-container>.seeker-icon-wrapper{display:block;position:absolute;background-color:#e9e9e9;right:3px;top:3px;width:29px;height:29px;border-radius:.275rem;cursor:pointer}.core-form-control-seeker-container>.seeker-icon-wrapper>.flex-wrapper{width:29px;height:29px;display:flex;align-items:center;justify-content:center}.core-form-control-seeker-container>.seeker-icon-wrapper>.flex-wrapper>i{color:#848484;font-size:20px}.core-form-control-seeker-container .input-wrapper{height:var(--size-form-control-height)}.core-form-control-seeker-container .input-wrapper label.text span{display:block;height:calc(var(--size-form-control-height) - 12px);line-height:calc(var(--size-form-control-height) - 12px);width:calc(100% - var(--size-form-control-height));overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:inherit}.core-form-control-seeker-container .input-wrapper .clear-icon-wrapper{display:none;position:absolute;background-color:transparent;right:28px;top:3px;width:29px;height:29px;border-radius:.275rem;cursor:pointer}.core-form-control-seeker-container .input-wrapper .clear-icon-wrapper>.flex-wrapper{width:29px;height:29px;display:flex;align-items:center;justify-content:center}.core-form-control-seeker-container .input-wrapper .clear-icon-wrapper>.flex-wrapper>i{color:#848484;font-size:20px}.core-form-control-seeker-container .input-wrapper:hover>.clear-icon-wrapper{display:block}.core-form-control-seeker-container>.seeker-icon-wrapper.multi-mode{position:relative;width:35px;height:35px}.core-form-control-seeker-container>.seeker-icon-wrapper.multi-mode>.flex-wrapper{width:35px;height:35px}.core-form-control-seeker-container .source-container{display:block;background-color:#fff;padding:var(--size-layout-block-cell-spacing);max-width:1200px;max-height:800px;overflow:hidden;border-radius:10px}.core-form-control-seeker-container .source-container i{font-size:20px;cursor:pointer;float:right}.core-form-control-seeker-container .source-container.d-none{display:none}.core-form-control-seeker-container .source-container>caption{display:block;width:100%}.core-form-control-seeker-container .source-container:has(~.footer){border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.core-form-control-seeker-container .footer{background-color:var(--color-bg-main);border-bottom-left-radius:10px;border-bottom-right-radius:10px;padding:var(--size-layout-block-cell-spacing)}.core-form-control-seeker-container .footer button:first-child{margin-right:var(--size-layout-block-cell-spacing)}.core-form-control-seeker-container .core-tabbe-wrapper{margin-top:5px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i10.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: MapAvatarToServerPipe, name: "mapAvatarToServer" }, { kind: "component", type: CoreJobSeekerComponent, selector: "core-job-seeker", inputs: ["multiMode", "preDefinedOuterParam$"], outputs: ["rowDoubleClick", "selectedIdsChange", "selectedDataChange", "columnsInit"] }, { kind: "component", type: CorePageEditLiteComponent, selector: "core-page-edit-lite", inputs: ["width", "captionCode", "sections", "submitText", "checkError$"], outputs: ["onFormCreated", "submitLogic", "cancelLogic"] }, { kind: "component", type: CoreTableComponent, selector: "core-table", inputs: ["id", "width", "height", "showCheckbox", "checkboxSize", "outerButtons", "showTools", "tools", "checkingResetFlag", "headerWrap", "headerFirstRowHeight", "headerSecondRowHeight", "wrap", "allowCellScrollY", "loading", "rowHeight", "frozen", "footer", "columns", "data", "selectedIds", "corePageListInstanceNumber", "disableHighlightOnClick", "freeMode", "searchSwitchDisabled", "inlineToolItems", "columnSearchDefaultOpen", "lazyLoading", "noPaddingCell"], outputs: ["onSearching", "onToolClick", "onRowClick", "onRowDoubleClick", "onSelectedIdsChange", "onSelectedDataChange", "onColumnCaptionClick"] }, { kind: "component", type: CoreStatusStickerComponent, selector: "core-status-sticker", inputs: ["code", "isTrueCode"] }, { kind: "component", type: CoreEmployeeSeekerComponent, selector: "core-employee-seeker", inputs: ["multiMode", "preDefinedOuterParam$"], outputs: ["rowDoubleClick", "selectedIdsChange", "selectedDataChange", "columnsInit"] }, { kind: "component", type: CoreContractSeekerComponent, selector: "core-contract-seeker", inputs: ["multiMode", "preDefinedOuterParam$"], outputs: ["rowDoubleClick", "selectedIdsChange", "selectedDataChange", "columnsInit"] }, { kind: "component", type: CoreWorkingSeekerComponent, selector: "core-working-seeker", inputs: ["multiMode", "preDefinedOuterParam$"], outputs: ["rowDoubleClick", "selectedIdsChange", "selectedDataChange", "columnsInit"] }, { kind: "component", type: CoreWageSeekerComponent, selector: "core-wage-seeker", inputs: ["multiMode", "preDefinedOuterParam$", "employeeId"], outputs: ["rowDoubleClick", "selectedIdsChange", "selectedDataChange", "columnsInit"] }, { kind: "component", type: CoreOrgUnitSeekerComponent, selector: "core-org-unit-seeker", outputs: ["itemDoubleClick"] }, { kind: "component", type: CorePositionSeekerComponent, selector: "core-position-seeker", inputs: ["multiMode", "preDefinedOuterParam$", "seekerVerifyIgnore"], outputs: ["rowDoubleClick", "selectedIdsChange", "selectedDataChange", "columnsInit"] }, { kind: "component", type: CorePositionConcurrentSeekerComponent, selector: "core-position-concurrent-seeker", inputs: ["multiMode", "preDefinedOuterParam$"], outputs: ["rowDoubleClick", "selectedIdsChange", "selectedDataChange", "columnsInit"] }, { kind: "component", type: CorePageHeaderComponent, selector: "core-page-header", inputs: ["instanceNumber", "shownItems", "title", "hideButtonGroup"], outputs: ["buttonClick"] }, { kind: "directive", type: TooltipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "showAnyway", "position"] }] }); }
393
+ ], viewQueries: [{ propertyName: "avatar", first: true, predicate: ["avatar"], descendants: true }, { propertyName: "sticker", first: true, predicate: ["sticker"], descendants: true }, { propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div #container class=\"core-form-control-seeker-container\">\r\n <div class=\"input-wrapper\" [class.d-none]=\"!!multiMode\">\r\n <label #shownText type=\"text\" class=\"text form-control\" [class.form-control-disabled]=\"disabled\">\r\n <span [appTooltip]=\"valueToShow\">{{ valueToShow }}</span>\r\n </label>\r\n @if (!multiMode) {\r\n <div class=\"clear-icon-wrapper\" [class.d-none]=\"!!disabled || !!!value\" (click)=\"onClickClear()\">\r\n <div class=\"flex-wrapper\" [appTooltip]=\"'UI.CORE_CONTOL_COMMON_CLEAR' | translate: lang\">\r\n <i class=\"feather-x\"></i>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"seeker-icon-wrapper\" [class.form-control-disabled]=\"disabled\" [class.multi-mode]=\"!!multiMode\"\r\n (click)=\"onClickSeek()\">\r\n <div class=\"flex-wrapper\" [class.form-control-disabled]=\"disabled\">\r\n <i class=\"feather-search\"></i>\r\n </div>\r\n </div>\r\n @if (!!multiMode) {\r\n <div class=\"core-tabbe-wrapper\">\r\n <core-table [columns]=\"multiModeColumns\" [data]=\"selectedData\" [showTools]=\"!!!disabled\" [tools]=\"tools\"\r\n [searchSwitchDisabled]=\"true\" (onToolClick)=\"onToolClick($event)\"\r\n (onRowDoubleClick)=\"onSelectedDataRowDoubleClick($event)\"></core-table>\r\n </div>\r\n }\r\n\r\n @if (!!sourceOpen) {\r\n <div class=\"modal-container\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header-panel\">\r\n <core-page-header [title]=\"title\" [hideButtonGroup]=\"true\" *ngIf=\"showPageHeader\"></core-page-header>\r\n </div>\r\n <div class=\"source-container\">\r\n <i class=\"feather-x\" (click)=\"onCancel()\"\r\n [class.d-block]=\"seekerSourceType==='ORGANIZATION_UNIT_SEEK'\"></i>\r\n\r\n\r\n @switch (seekerSourceType) {\r\n @case ('JOB_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"jobSeek\">\r\n </ng-container>\r\n }\r\n @case ('EMPLOYEE_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"employeeSeek\">\r\n </ng-container>\r\n }\r\n @case ('CONTRACT_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"contractSeek\">\r\n </ng-container>\r\n }\r\n @case ('WORKING_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"workingSeek\">\r\n </ng-container>\r\n }\r\n @case ('WAGE_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"wageSeek\">\r\n </ng-container>\r\n }\r\n @case ('ORGANIZATION_UNIT_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"organizationUnitSeek\">\r\n </ng-container>\r\n }\r\n @case ('POSITION_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"positionSeek\">\r\n </ng-container>\r\n }\r\n @case ('POSITION_CONCURRENT_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"positionConcurrentSeek\">\r\n </ng-container>\r\n }\r\n }\r\n\r\n </div>\r\n\r\n @if (!hideFooter) {\r\n <div class=\"footer\">\r\n <div class=\"d-flex-end\">\r\n @if (!!pendingSelectedData?.length) {\r\n <button class=\"btn btn-primary\" type=\"button\" (click)=\"onSelect()\">{{\r\n 'UI_CORE_CONFIRM_DIALOG_BUTTON_SELECT' | translate: lang }}</button>\r\n }\r\n <button class=\"btn btn-secondary\" type=\"button\" (click)=\"onCancel()\">{{\r\n 'UI_CORE_CONFIRM_DIALOG_BUTTON_CANCEL' | translate: lang }}</button>\r\n </div>\r\n </div>\r\n }\r\n\r\n </div>\r\n </div>\r\n }\r\n\r\n</div>\r\n\r\n<ng-template #jobSeek>\r\n <core-job-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-job-seeker>\r\n</ng-template>\r\n\r\n<ng-template #employeeSeek>\r\n <core-employee-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-employee-seeker>\r\n</ng-template>\r\n\r\n<ng-template #contractSeek>\r\n <core-contract-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-contract-seeker>\r\n</ng-template>\r\n\r\n<ng-template #workingSeek>\r\n <core-working-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-working-seeker>\r\n</ng-template>\r\n\r\n<ng-template #wageSeek>\r\n <core-wage-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-wage-seeker>\r\n</ng-template>\r\n\r\n<ng-template #positionSeek>\r\n <core-position-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\"\r\n [seekerVerifyIgnore]=\"seekerVerifyIgnore\" (rowDoubleClick)=\"onRowDoubleClick($event)\"\r\n (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-position-seeker>\r\n</ng-template>\r\n\r\n<ng-template #positionConcurrentSeek>\r\n <core-position-concurrent-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-position-concurrent-seeker>\r\n</ng-template>\r\n\r\n<ng-template #organizationUnitSeek>\r\n <core-org-unit-seeker [excludedIds$]=\"excludedIds$\" (itemDoubleClick)=\"onItemDoubleClick($event)\"></core-org-unit-seeker>\r\n</ng-template>\r\n\r\n<ng-template #avatar let-avatar=\"context.avatar\">\r\n <img *ngIf=\"avatar != null\" [src]=\"avatar | mapAvatarToServer\" class=\"in-table-avatar\" appImageErrorResolver>\r\n <img *ngIf=\"avatar == null\" [src]=\"defaultAvatar\" class=\"in-table-avatar\" appImageErrorResolver>\r\n</ng-template>\r\n<ng-template #sticker let-code=\"context.actflg\">\r\n <core-status-sticker [code]=\"code\" [isTrueCode]=\"true\"></core-status-sticker>\r\n</ng-template>\r\n\r\n<div [class.d-none]=\"!showEditBuffer\">\r\n <core-page-edit-lite [sections]=\"multiModeExtendedSections\" (onFormCreated)=\"onEditBufferFormCreated($event)\"\r\n (submitLogic)=\"onEditBufferSubmit($event)\" (cancelLogic)=\"onEditBufferCancel($event)\"></core-page-edit-lite>\r\n</div>", styles: [".core-form-control-seeker-container{display:block;position:relative;background-color:#fff}.core-form-control-seeker-container>.seeker-icon-wrapper{display:block;position:absolute;background-color:#e9e9e9;right:3px;top:3px;width:29px;height:29px;border-radius:.275rem;cursor:pointer}.core-form-control-seeker-container>.seeker-icon-wrapper>.flex-wrapper{width:29px;height:29px;display:flex;align-items:center;justify-content:center}.core-form-control-seeker-container>.seeker-icon-wrapper>.flex-wrapper>i{color:#848484;font-size:20px}.core-form-control-seeker-container .input-wrapper{height:var(--size-form-control-height)}.core-form-control-seeker-container .input-wrapper label.text span{display:block;height:calc(var(--size-form-control-height) - 12px);line-height:calc(var(--size-form-control-height) - 12px);width:calc(100% - var(--size-form-control-height));overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:inherit}.core-form-control-seeker-container .input-wrapper .clear-icon-wrapper{display:none;position:absolute;background-color:transparent;right:28px;top:3px;width:29px;height:29px;border-radius:.275rem;cursor:pointer}.core-form-control-seeker-container .input-wrapper .clear-icon-wrapper>.flex-wrapper{width:29px;height:29px;display:flex;align-items:center;justify-content:center}.core-form-control-seeker-container .input-wrapper .clear-icon-wrapper>.flex-wrapper>i{color:#848484;font-size:20px}.core-form-control-seeker-container .input-wrapper:hover>.clear-icon-wrapper{display:block}.core-form-control-seeker-container>.seeker-icon-wrapper.multi-mode{position:relative;width:35px;height:35px}.core-form-control-seeker-container>.seeker-icon-wrapper.multi-mode>.flex-wrapper{width:35px;height:35px}.core-form-control-seeker-container .source-container{display:block;background-color:#fff;padding:var(--size-layout-block-cell-spacing);max-width:1200px;max-height:800px;overflow:hidden;border-radius:10px}.core-form-control-seeker-container .source-container i{font-size:20px;cursor:pointer;float:right}.core-form-control-seeker-container .source-container.d-none{display:none}.core-form-control-seeker-container .source-container>caption{display:block;width:100%}.core-form-control-seeker-container .source-container:has(~.footer){border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.core-form-control-seeker-container .footer{background-color:var(--color-bg-main);border-bottom-left-radius:10px;border-bottom-right-radius:10px;padding:var(--size-layout-block-cell-spacing)}.core-form-control-seeker-container .footer button:first-child{margin-right:var(--size-layout-block-cell-spacing)}.core-form-control-seeker-container .core-tabbe-wrapper{margin-top:5px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i10.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: MapAvatarToServerPipe, name: "mapAvatarToServer" }, { kind: "component", type: CoreJobSeekerComponent, selector: "core-job-seeker", inputs: ["multiMode", "preDefinedOuterParam$", "excludedIds$"], outputs: ["rowDoubleClick", "selectedIdsChange", "selectedDataChange", "columnsInit"] }, { kind: "component", type: CorePageEditLiteComponent, selector: "core-page-edit-lite", inputs: ["width", "captionCode", "sections", "submitText", "checkError$"], outputs: ["onFormCreated", "submitLogic", "cancelLogic"] }, { kind: "component", type: CoreTableComponent, selector: "core-table", inputs: ["id", "width", "height", "showCheckbox", "checkboxSize", "outerButtons", "showTools", "tools", "checkingResetFlag", "headerWrap", "headerFirstRowHeight", "headerSecondRowHeight", "wrap", "allowCellScrollY", "loading", "rowHeight", "frozen", "footer", "columns", "data", "selectedIds", "corePageListInstanceNumber", "disableHighlightOnClick", "freeMode", "searchSwitchDisabled", "inlineToolItems", "columnSearchDefaultOpen", "lazyLoading", "noPaddingCell"], outputs: ["onSearching", "onToolClick", "onRowClick", "onRowDoubleClick", "onSelectedIdsChange", "onSelectedDataChange", "onColumnCaptionClick"] }, { kind: "component", type: CoreStatusStickerComponent, selector: "core-status-sticker", inputs: ["code", "isTrueCode"] }, { kind: "component", type: CoreEmployeeSeekerComponent, selector: "core-employee-seeker", inputs: ["multiMode", "preDefinedOuterParam$", "excludedIds$"], outputs: ["rowDoubleClick", "selectedIdsChange", "selectedDataChange", "columnsInit"] }, { kind: "component", type: CoreContractSeekerComponent, selector: "core-contract-seeker", inputs: ["multiMode", "preDefinedOuterParam$", "excludedIds$"], outputs: ["rowDoubleClick", "selectedIdsChange", "selectedDataChange", "columnsInit"] }, { kind: "component", type: CoreWorkingSeekerComponent, selector: "core-working-seeker", inputs: ["multiMode", "preDefinedOuterParam$", "excludedIds$"], outputs: ["rowDoubleClick", "selectedIdsChange", "selectedDataChange", "columnsInit"] }, { kind: "component", type: CoreWageSeekerComponent, selector: "core-wage-seeker", inputs: ["multiMode", "preDefinedOuterParam$", "excludedIds$", "employeeId"], outputs: ["rowDoubleClick", "selectedIdsChange", "selectedDataChange", "columnsInit"] }, { kind: "component", type: CoreOrgUnitSeekerComponent, selector: "core-org-unit-seeker", inputs: ["excludedIds$"], outputs: ["itemDoubleClick"] }, { kind: "component", type: CorePositionSeekerComponent, selector: "core-position-seeker", inputs: ["multiMode", "preDefinedOuterParam$", "excludedIds$", "seekerVerifyIgnore"], outputs: ["rowDoubleClick", "selectedIdsChange", "selectedDataChange", "columnsInit"] }, { kind: "component", type: CorePositionConcurrentSeekerComponent, selector: "core-position-concurrent-seeker", inputs: ["multiMode", "preDefinedOuterParam$", "excludedIds$"], outputs: ["rowDoubleClick", "selectedIdsChange", "selectedDataChange", "columnsInit"] }, { kind: "component", type: CorePageHeaderComponent, selector: "core-page-header", inputs: ["instanceNumber", "shownItems", "title", "hideButtonGroup"], outputs: ["buttonClick"] }, { kind: "directive", type: TooltipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "showAnyway", "position"] }] }); }
387
394
  }
388
395
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CoreFormControlSeekerComponent, decorators: [{
389
396
  type: Component,
@@ -417,7 +424,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
417
424
  CoreWorkingSeekerComponent,
418
425
  CoreWageSeekerComponent,
419
426
  CorePositionSeekerComponent,
420
- ], template: "<div #container class=\"core-form-control-seeker-container\">\r\n <div class=\"input-wrapper\" [class.d-none]=\"!!multiMode\">\r\n <label #shownText type=\"text\" class=\"text form-control\" [class.form-control-disabled]=\"disabled\">\r\n <span [appTooltip]=\"valueToShow\">{{ valueToShow }}</span>\r\n </label>\r\n @if (!multiMode) {\r\n <div class=\"clear-icon-wrapper\" [class.d-none]=\"!!disabled || !!!value\" (click)=\"onClickClear()\">\r\n <div class=\"flex-wrapper\" [appTooltip]=\"'UI.CORE_CONTOL_COMMON_CLEAR' | translate: lang\">\r\n <i class=\"feather-x\"></i>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"seeker-icon-wrapper\" [class.form-control-disabled]=\"disabled\" [class.multi-mode]=\"!!multiMode\"\r\n (click)=\"onClickSeek()\">\r\n <div class=\"flex-wrapper\" [class.form-control-disabled]=\"disabled\">\r\n <i class=\"feather-search\"></i>\r\n </div>\r\n </div>\r\n @if (!!multiMode) {\r\n <div class=\"core-tabbe-wrapper\">\r\n <core-table [columns]=\"multiModeColumns\" [data]=\"selectedData\" [showTools]=\"!!!disabled\" [tools]=\"tools\"\r\n [searchSwitchDisabled]=\"true\" (onToolClick)=\"onToolClick($event)\"\r\n (onRowDoubleClick)=\"onSelectedDataRowDoubleClick($event)\"></core-table>\r\n </div>\r\n }\r\n\r\n @if (!!sourceOpen) {\r\n <div class=\"modal-container\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header-panel\">\r\n <core-page-header [title]=\"title\" [hideButtonGroup]=\"true\" *ngIf=\"showPageHeader\"></core-page-header>\r\n </div>\r\n <div class=\"source-container\">\r\n <i class=\"feather-x\" (click)=\"onCancel()\"\r\n [class.d-block]=\"seekerSourceType==='ORGANIZATION_UNIT_SEEK'\"></i>\r\n\r\n\r\n @switch (seekerSourceType) {\r\n @case ('JOB_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"jobSeek\">\r\n </ng-container>\r\n }\r\n @case ('EMPLOYEE_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"employeeSeek\">\r\n </ng-container>\r\n }\r\n @case ('CONTRACT_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"contractSeek\">\r\n </ng-container>\r\n }\r\n @case ('WORKING_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"workingSeek\">\r\n </ng-container>\r\n }\r\n @case ('WAGE_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"wageSeek\">\r\n </ng-container>\r\n }\r\n @case ('ORGANIZATION_UNIT_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"organizationUnitSeek\">\r\n </ng-container>\r\n }\r\n @case ('POSITION_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"positionSeek\">\r\n </ng-container>\r\n }\r\n @case ('POSITION_CONCURRENT_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"positionConcurrentSeek\">\r\n </ng-container>\r\n }\r\n }\r\n\r\n </div>\r\n\r\n @if (!hideFooter) {\r\n <div class=\"footer\">\r\n <div class=\"d-flex-end\">\r\n <button class=\"btn btn-primary\" type=\"button\" (click)=\"onSelect()\">{{\r\n 'UI_CORE_CONFIRM_DIALOG_BUTTON_SELECT' | translate: lang }}</button>\r\n <button class=\"btn btn-secondary\" type=\"button\" (click)=\"onCancel()\">{{\r\n 'UI_CORE_CONFIRM_DIALOG_BUTTON_CANCEL' | translate: lang }}</button>\r\n </div>\r\n </div>\r\n }\r\n\r\n </div>\r\n </div>\r\n }\r\n\r\n</div>\r\n\r\n<ng-template #jobSeek>\r\n <core-job-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-job-seeker>\r\n</ng-template>\r\n\r\n<ng-template #employeeSeek>\r\n <core-employee-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-employee-seeker>\r\n</ng-template>\r\n\r\n<ng-template #contractSeek>\r\n <core-contract-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-contract-seeker>\r\n</ng-template>\r\n\r\n<ng-template #workingSeek>\r\n <core-working-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-working-seeker>\r\n</ng-template>\r\n\r\n<ng-template #wageSeek>\r\n <core-wage-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-wage-seeker>\r\n</ng-template>\r\n\r\n<ng-template #positionSeek>\r\n <core-position-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\"\r\n [seekerVerifyIgnore]=\"seekerVerifyIgnore\" (rowDoubleClick)=\"onRowDoubleClick($event)\"\r\n (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-position-seeker>\r\n</ng-template>\r\n\r\n<ng-template #positionConcurrentSeek>\r\n <core-position-concurrent-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-position-concurrent-seeker>\r\n</ng-template>\r\n\r\n<ng-template #organizationUnitSeek>\r\n <core-org-unit-seeker (itemDoubleClick)=\"onItemDoubleClick($event)\"></core-org-unit-seeker>\r\n</ng-template>\r\n\r\n<ng-template #avatar let-avatar=\"context.avatar\">\r\n <img *ngIf=\"avatar != null\" [src]=\"avatar | mapAvatarToServer\" class=\"in-table-avatar\" appImageErrorResolver>\r\n <img *ngIf=\"avatar == null\" [src]=\"defaultAvatar\" class=\"in-table-avatar\" appImageErrorResolver>\r\n</ng-template>\r\n<ng-template #sticker let-code=\"context.actflg\">\r\n <core-status-sticker [code]=\"code\" [isTrueCode]=\"true\"></core-status-sticker>\r\n</ng-template>\r\n\r\n<div [class.d-none]=\"!showEditBuffer\">\r\n <core-page-edit-lite [sections]=\"multiModeExtendedSections\" (onFormCreated)=\"onEditBufferFormCreated($event)\"\r\n (submitLogic)=\"onEditBufferSubmit($event)\" (cancelLogic)=\"onEditBufferCancel($event)\"></core-page-edit-lite>\r\n</div>", styles: [".core-form-control-seeker-container{display:block;position:relative;background-color:#fff}.core-form-control-seeker-container>.seeker-icon-wrapper{display:block;position:absolute;background-color:#e9e9e9;right:3px;top:3px;width:29px;height:29px;border-radius:.275rem;cursor:pointer}.core-form-control-seeker-container>.seeker-icon-wrapper>.flex-wrapper{width:29px;height:29px;display:flex;align-items:center;justify-content:center}.core-form-control-seeker-container>.seeker-icon-wrapper>.flex-wrapper>i{color:#848484;font-size:20px}.core-form-control-seeker-container .input-wrapper{height:var(--size-form-control-height)}.core-form-control-seeker-container .input-wrapper label.text span{display:block;height:calc(var(--size-form-control-height) - 12px);line-height:calc(var(--size-form-control-height) - 12px);width:calc(100% - var(--size-form-control-height));overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:inherit}.core-form-control-seeker-container .input-wrapper .clear-icon-wrapper{display:none;position:absolute;background-color:transparent;right:28px;top:3px;width:29px;height:29px;border-radius:.275rem;cursor:pointer}.core-form-control-seeker-container .input-wrapper .clear-icon-wrapper>.flex-wrapper{width:29px;height:29px;display:flex;align-items:center;justify-content:center}.core-form-control-seeker-container .input-wrapper .clear-icon-wrapper>.flex-wrapper>i{color:#848484;font-size:20px}.core-form-control-seeker-container .input-wrapper:hover>.clear-icon-wrapper{display:block}.core-form-control-seeker-container>.seeker-icon-wrapper.multi-mode{position:relative;width:35px;height:35px}.core-form-control-seeker-container>.seeker-icon-wrapper.multi-mode>.flex-wrapper{width:35px;height:35px}.core-form-control-seeker-container .source-container{display:block;background-color:#fff;padding:var(--size-layout-block-cell-spacing);max-width:1200px;max-height:800px;overflow:hidden;border-radius:10px}.core-form-control-seeker-container .source-container i{font-size:20px;cursor:pointer;float:right}.core-form-control-seeker-container .source-container.d-none{display:none}.core-form-control-seeker-container .source-container>caption{display:block;width:100%}.core-form-control-seeker-container .source-container:has(~.footer){border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.core-form-control-seeker-container .footer{background-color:var(--color-bg-main);border-bottom-left-radius:10px;border-bottom-right-radius:10px;padding:var(--size-layout-block-cell-spacing)}.core-form-control-seeker-container .footer button:first-child{margin-right:var(--size-layout-block-cell-spacing)}.core-form-control-seeker-container .core-tabbe-wrapper{margin-top:5px}\n"] }]
427
+ ], template: "<div #container class=\"core-form-control-seeker-container\">\r\n <div class=\"input-wrapper\" [class.d-none]=\"!!multiMode\">\r\n <label #shownText type=\"text\" class=\"text form-control\" [class.form-control-disabled]=\"disabled\">\r\n <span [appTooltip]=\"valueToShow\">{{ valueToShow }}</span>\r\n </label>\r\n @if (!multiMode) {\r\n <div class=\"clear-icon-wrapper\" [class.d-none]=\"!!disabled || !!!value\" (click)=\"onClickClear()\">\r\n <div class=\"flex-wrapper\" [appTooltip]=\"'UI.CORE_CONTOL_COMMON_CLEAR' | translate: lang\">\r\n <i class=\"feather-x\"></i>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"seeker-icon-wrapper\" [class.form-control-disabled]=\"disabled\" [class.multi-mode]=\"!!multiMode\"\r\n (click)=\"onClickSeek()\">\r\n <div class=\"flex-wrapper\" [class.form-control-disabled]=\"disabled\">\r\n <i class=\"feather-search\"></i>\r\n </div>\r\n </div>\r\n @if (!!multiMode) {\r\n <div class=\"core-tabbe-wrapper\">\r\n <core-table [columns]=\"multiModeColumns\" [data]=\"selectedData\" [showTools]=\"!!!disabled\" [tools]=\"tools\"\r\n [searchSwitchDisabled]=\"true\" (onToolClick)=\"onToolClick($event)\"\r\n (onRowDoubleClick)=\"onSelectedDataRowDoubleClick($event)\"></core-table>\r\n </div>\r\n }\r\n\r\n @if (!!sourceOpen) {\r\n <div class=\"modal-container\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header-panel\">\r\n <core-page-header [title]=\"title\" [hideButtonGroup]=\"true\" *ngIf=\"showPageHeader\"></core-page-header>\r\n </div>\r\n <div class=\"source-container\">\r\n <i class=\"feather-x\" (click)=\"onCancel()\"\r\n [class.d-block]=\"seekerSourceType==='ORGANIZATION_UNIT_SEEK'\"></i>\r\n\r\n\r\n @switch (seekerSourceType) {\r\n @case ('JOB_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"jobSeek\">\r\n </ng-container>\r\n }\r\n @case ('EMPLOYEE_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"employeeSeek\">\r\n </ng-container>\r\n }\r\n @case ('CONTRACT_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"contractSeek\">\r\n </ng-container>\r\n }\r\n @case ('WORKING_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"workingSeek\">\r\n </ng-container>\r\n }\r\n @case ('WAGE_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"wageSeek\">\r\n </ng-container>\r\n }\r\n @case ('ORGANIZATION_UNIT_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"organizationUnitSeek\">\r\n </ng-container>\r\n }\r\n @case ('POSITION_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"positionSeek\">\r\n </ng-container>\r\n }\r\n @case ('POSITION_CONCURRENT_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"positionConcurrentSeek\">\r\n </ng-container>\r\n }\r\n }\r\n\r\n </div>\r\n\r\n @if (!hideFooter) {\r\n <div class=\"footer\">\r\n <div class=\"d-flex-end\">\r\n @if (!!pendingSelectedData?.length) {\r\n <button class=\"btn btn-primary\" type=\"button\" (click)=\"onSelect()\">{{\r\n 'UI_CORE_CONFIRM_DIALOG_BUTTON_SELECT' | translate: lang }}</button>\r\n }\r\n <button class=\"btn btn-secondary\" type=\"button\" (click)=\"onCancel()\">{{\r\n 'UI_CORE_CONFIRM_DIALOG_BUTTON_CANCEL' | translate: lang }}</button>\r\n </div>\r\n </div>\r\n }\r\n\r\n </div>\r\n </div>\r\n }\r\n\r\n</div>\r\n\r\n<ng-template #jobSeek>\r\n <core-job-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-job-seeker>\r\n</ng-template>\r\n\r\n<ng-template #employeeSeek>\r\n <core-employee-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-employee-seeker>\r\n</ng-template>\r\n\r\n<ng-template #contractSeek>\r\n <core-contract-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-contract-seeker>\r\n</ng-template>\r\n\r\n<ng-template #workingSeek>\r\n <core-working-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-working-seeker>\r\n</ng-template>\r\n\r\n<ng-template #wageSeek>\r\n <core-wage-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-wage-seeker>\r\n</ng-template>\r\n\r\n<ng-template #positionSeek>\r\n <core-position-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\"\r\n [seekerVerifyIgnore]=\"seekerVerifyIgnore\" (rowDoubleClick)=\"onRowDoubleClick($event)\"\r\n (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-position-seeker>\r\n</ng-template>\r\n\r\n<ng-template #positionConcurrentSeek>\r\n <core-position-concurrent-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-position-concurrent-seeker>\r\n</ng-template>\r\n\r\n<ng-template #organizationUnitSeek>\r\n <core-org-unit-seeker [excludedIds$]=\"excludedIds$\" (itemDoubleClick)=\"onItemDoubleClick($event)\"></core-org-unit-seeker>\r\n</ng-template>\r\n\r\n<ng-template #avatar let-avatar=\"context.avatar\">\r\n <img *ngIf=\"avatar != null\" [src]=\"avatar | mapAvatarToServer\" class=\"in-table-avatar\" appImageErrorResolver>\r\n <img *ngIf=\"avatar == null\" [src]=\"defaultAvatar\" class=\"in-table-avatar\" appImageErrorResolver>\r\n</ng-template>\r\n<ng-template #sticker let-code=\"context.actflg\">\r\n <core-status-sticker [code]=\"code\" [isTrueCode]=\"true\"></core-status-sticker>\r\n</ng-template>\r\n\r\n<div [class.d-none]=\"!showEditBuffer\">\r\n <core-page-edit-lite [sections]=\"multiModeExtendedSections\" (onFormCreated)=\"onEditBufferFormCreated($event)\"\r\n (submitLogic)=\"onEditBufferSubmit($event)\" (cancelLogic)=\"onEditBufferCancel($event)\"></core-page-edit-lite>\r\n</div>", styles: [".core-form-control-seeker-container{display:block;position:relative;background-color:#fff}.core-form-control-seeker-container>.seeker-icon-wrapper{display:block;position:absolute;background-color:#e9e9e9;right:3px;top:3px;width:29px;height:29px;border-radius:.275rem;cursor:pointer}.core-form-control-seeker-container>.seeker-icon-wrapper>.flex-wrapper{width:29px;height:29px;display:flex;align-items:center;justify-content:center}.core-form-control-seeker-container>.seeker-icon-wrapper>.flex-wrapper>i{color:#848484;font-size:20px}.core-form-control-seeker-container .input-wrapper{height:var(--size-form-control-height)}.core-form-control-seeker-container .input-wrapper label.text span{display:block;height:calc(var(--size-form-control-height) - 12px);line-height:calc(var(--size-form-control-height) - 12px);width:calc(100% - var(--size-form-control-height));overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:inherit}.core-form-control-seeker-container .input-wrapper .clear-icon-wrapper{display:none;position:absolute;background-color:transparent;right:28px;top:3px;width:29px;height:29px;border-radius:.275rem;cursor:pointer}.core-form-control-seeker-container .input-wrapper .clear-icon-wrapper>.flex-wrapper{width:29px;height:29px;display:flex;align-items:center;justify-content:center}.core-form-control-seeker-container .input-wrapper .clear-icon-wrapper>.flex-wrapper>i{color:#848484;font-size:20px}.core-form-control-seeker-container .input-wrapper:hover>.clear-icon-wrapper{display:block}.core-form-control-seeker-container>.seeker-icon-wrapper.multi-mode{position:relative;width:35px;height:35px}.core-form-control-seeker-container>.seeker-icon-wrapper.multi-mode>.flex-wrapper{width:35px;height:35px}.core-form-control-seeker-container .source-container{display:block;background-color:#fff;padding:var(--size-layout-block-cell-spacing);max-width:1200px;max-height:800px;overflow:hidden;border-radius:10px}.core-form-control-seeker-container .source-container i{font-size:20px;cursor:pointer;float:right}.core-form-control-seeker-container .source-container.d-none{display:none}.core-form-control-seeker-container .source-container>caption{display:block;width:100%}.core-form-control-seeker-container .source-container:has(~.footer){border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.core-form-control-seeker-container .footer{background-color:var(--color-bg-main);border-bottom-left-radius:10px;border-bottom-right-radius:10px;padding:var(--size-layout-block-cell-spacing)}.core-form-control-seeker-container .footer button:first-child{margin-right:var(--size-layout-block-cell-spacing)}.core-form-control-seeker-container .core-tabbe-wrapper{margin-top:5px}\n"] }]
421
428
  }], ctorParameters: () => [{ type: i1.AlertService }, { type: i0.Injector }, { type: i2.MultiLanguageService }, { type: i3.CoreJobSeekerComponent }, { type: i4.CoreEmployeeSeekerComponent }, { type: i5.CoreContractSeekerComponent }, { type: i6.CoreWorkingSeekerComponent }, { type: i7.CoreWageSeekerComponent }, { type: i8.CorePositionSeekerComponent }, { type: i9.RandomAvatarService }], propDecorators: { avatar: [{
422
429
  type: ViewChild,
423
430
  args: ['avatar']
@@ -442,6 +449,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
442
449
  type: Input
443
450
  }], shownSeekerColumns: [{
444
451
  type: Input
452
+ }], excludeExistingList: [{
453
+ type: Input
445
454
  }], indirectBinding: [{
446
455
  type: Input
447
456
  }], bindGridIdTo: [{
@@ -469,4 +478,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
469
478
  type: ViewChild,
470
479
  args: ['container']
471
480
  }] } });
472
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1mb3JtLWNvbnRyb2wtc2Vla2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLWZvcm0tY29udHJvbC1zZWVrZXIvY29yZS1mb3JtLWNvbnRyb2wtc2Vla2VyL2NvcmUtZm9ybS1jb250cm9sLXNlZWtlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaGlzdGFmZi1hbHBoYS9zcmMvbGliL2FwcC9saWJyYXJpZXMvY29yZS1mb3JtLWNvbnRyb2wtc2Vla2VyL2NvcmUtZm9ybS1jb250cm9sLXNlZWtlci9jb3JlLWZvcm0tY29udHJvbC1zZWVrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQWMsS0FBSyxFQUFxQixTQUFTLEVBQUUsU0FBUyxFQUF5QixNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWxLLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLCtEQUErRCxDQUFDO0FBQzdHLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRTdGLE9BQU8sRUFBYSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHdEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLG1CQUFtQixFQUFFLGtCQUFrQixFQUEyRCxNQUFNLHVDQUF1QyxDQUFDO0FBRTdLLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGdGQUFnRixDQUFDO0FBQzdILE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGdGQUFnRixDQUFDO0FBQzdILE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDZFQUE2RSxDQUFDO0FBQ3pILE9B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QUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFDaEIsU0FBUztzQkFBakIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUdHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUVJLGFBQWE7c0JBQXRCLE1BQU07Z0JBRWlCLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBpc0Rldk1vZGUsIFZpZXdDaGlsZCwgSW5qZWN0b3IsIFRlbXBsYXRlUmVmLCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDb3JlRm9ybUNvbnRyb2xCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZS1mb3JtLWNvbnRyb2wtYmFzZS9jb3JlLWZvcm0tY29udHJvbC1iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEVudW1Db3JlRm9ybUNvbnRyb2xTZWVrZXJTb3VyY2VUeXBlIH0gZnJvbSAnLi4vRW51bUNvcmVGb3JtQ29udHJvbFNlZWtlclNvdXJjZVR5cGUnO1xyXG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9hbGVydC9hbGVydC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3Jtc01vZHVsZSwgTkdfVkFMVUVfQUNDRVNTT1IsIE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgSUNvcmVGb3JtQ29udHJvbFNlZWtlckV4dHJhQmluZGluZ01vZGVsLCBJQ29yZUZvcm1TZWN0aW9uIH0gZnJvbSAnLi4vLi4vY29yZS1mb3JtL2NvcmUtZm9ybS9lbnVtLWludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBJT3JnVHJlZUl0ZW0gfSBmcm9tICcuLi8uLi9jb3JlLW9yZy10cmVlL2NvcmUtb3JnLXRyZWUvSU9yZ1RyZWVJdGVtJztcclxuaW1wb3J0IHsgQ29yZVRhYmxlQ29tcG9uZW50LCBFQ29yZVRhYmxlVG9vbENsYXNzLCBFQ29yZVRhYmxlVG9vbENvZGUsIElDb3JlVGFibGVUb29sQ2xpY2tFdmVudEVtaXR0ZXJEYXRhLCBJQ29yZVRhYmxlVG9vbEl0ZW0gfSBmcm9tICcuLi8uLi9jb3JlLXRhYmxlL2NvcmUtdGFibGUuY29tcG9uZW50JztcclxuXHJcbmltcG9ydCB7IENvcmVFbXBsb3llZVNlZWtlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtZW1wbG95ZWUtc2Vla2VyL2NvcmUtZW1wbG95ZWUtc2Vla2VyL2NvcmUtZW1wbG95ZWUtc2Vla2VyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvcmVDb250cmFjdFNlZWtlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtY29udHJhY3Qtc2Vla2VyL2NvcmUtY29udHJhY3Qtc2Vla2VyL2NvcmUtY29udHJhY3Qtc2Vla2VyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvcmVXb3JraW5nU2Vla2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZS13b3JraW5nLXNlZWtlci9jb3JlLXdvcmtpbmctc2Vla2VyL2NvcmUtd29ya2luZy1zZWVrZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29yZVdhZ2VTZWVrZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlLXdhZ2Utc2Vla2VyL2NvcmUtd2FnZS1zZWVrZXIvY29yZS13YWdlLXNlZWtlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb3JlUG9zaXRpb25TZWVrZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlLXBvc2l0aW9uLXNlZWtlci9jb3JlLXBvc2l0aW9uLXNlZWtlci9jb3JlLXBvc2l0aW9uLXNlZWtlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBFbnVtVHJhbnNsYXRlS2V5IH0gZnJvbSBcImFscGhhLWdsb2JhbC1jb25zdGFudHNcIjtcclxuaW1wb3J0IHsgTXVsdGlMYW5ndWFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tdWx0aS1sYW5ndWFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmFuZG9tQXZhdGFyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3JhbmRvbS1hdmF0YXIuc2VydmljZSc7XHJcbmltcG9ydCB7IG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL2FsZXJ0T3B0aW9ucyc7XHJcbmltcG9ydCB7IElDb3JlVGFibGVDb2x1bW5JdGVtIH0gZnJvbSAnLi4vLi4vY29yZS10YWJsZS9JQ29yZVRhYmxlQ29sdW1uSXRlbSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICcuLi8uLi8uLi9hcHAtcGlwZXMvdHJhbnNsYXRlLnBpcGUnO1xyXG5pbXBvcnQgeyBDb3JlUG9zaXRpb25Db25jdXJyZW50U2Vla2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZS1wb3NpdGlvbi1jb25jdXJyZW50LXNlZWtlci9jb3JlLXBvc2l0aW9uLWNvbmN1cnJlbnQtc2Vla2VyL2NvcmUtcG9zaXRpb24tY29uY3VycmVudC1zZWVrZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29yZVBhZ2VIZWFkZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlLXBhZ2UtaGVhZGVyL2NvcmUtcGFnZS1oZWFkZXIvY29yZS1wYWdlLWhlYWRlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vdG9vbHRpcC90b29sdGlwLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IENvcmVPcmdVbml0U2Vla2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZS1vcmctdW5pdC1zZWVrZXIvY29yZS1vcmctdW5pdC1zZWVrZXIvY29yZS1vcmctdW5pdC1zZWVrZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTWFwQXZhdGFyVG9TZXJ2ZXJQaXBlIH0gZnJvbSAnLi4vLi4vLi4vYXBwLXBpcGVzL21hcC1hdmF0YXItdG8tc2VydmVyLnBpcGUnO1xyXG5pbXBvcnQgeyBDb3JlUGFnZUVkaXRMaXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZS1wYWdlLWVkaXQtbGl0ZS9jb3JlLXBhZ2UtZWRpdC1saXRlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvcmVKb2JTZWVrZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlLWpvYi1zZWVrZXIvY29yZS1qb2Itc2Vla2VyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvcmVTdGF0dXNTdGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZS1zdGF0dXMtc3RpY2tlci9jb3JlLXN0YXR1cy1zdGlja2VyL2NvcmUtc3RhdHVzLXN0aWNrZXIuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY29yZS1mb3JtLWNvbnRyb2wtc2Vla2VyJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgVHJhbnNsYXRlUGlwZSxcclxuICAgIE1hcEF2YXRhclRvU2VydmVyUGlwZSxcclxuICAgIENvcmVKb2JTZWVrZXJDb21wb25lbnQsXHJcbiAgICBDb3JlUGFnZUVkaXRMaXRlQ29tcG9uZW50LFxyXG4gICAgQ29yZVRhYmxlQ29tcG9uZW50LFxyXG4gICAgQ29yZVN0YXR1c1N0aWNrZXJDb21wb25lbnQsXHJcbiAgICBDb3JlRW1wbG95ZWVTZWVrZXJDb21wb25lbnQsXHJcbiAgICBDb3JlQ29udHJhY3RTZWVrZXJDb21wb25lbnQsXHJcbiAgICBDb3JlV29ya2luZ1NlZWtlckNvbXBvbmVudCxcclxuICAgIENvcmVXYWdlU2Vla2VyQ29tcG9uZW50LFxyXG4gICAgQ29yZU9yZ1VuaXRTZWVrZXJDb21wb25lbnQsXHJcbiAgICBDb3JlUG9zaXRpb25TZWVrZXJDb21wb25lbnQsXHJcbiAgICBDb3JlUG9zaXRpb25Db25jdXJyZW50U2Vla2VyQ29tcG9uZW50LFxyXG4gICAgQ29yZVBhZ2VIZWFkZXJDb21wb25lbnQsXHJcbiAgICBUb29sdGlwRGlyZWN0aXZlXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vY29yZS1mb3JtLWNvbnRyb2wtc2Vla2VyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jb3JlLWZvcm0tY29udHJvbC1zZWVrZXIuY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgICB1c2VFeGlzdGluZzogQ29yZUZvcm1Db250cm9sU2Vla2VyQ29tcG9uZW50XHJcbiAgICB9LFxyXG4gICAgQ29yZUpvYlNlZWtlckNvbXBvbmVudCxcclxuICAgIENvcmVFbXBsb3llZVNlZWtlckNvbXBvbmVudCxcclxuICAgIENvcmVDb250cmFjdFNlZWtlckNvbXBvbmVudCxcclxuICAgIENvcmVXb3JraW5nU2Vla2VyQ29tcG9uZW50LFxyXG4gICAgQ29yZVdhZ2VTZWVrZXJDb21wb25lbnQsXHJcbiAgICBDb3JlUG9zaXRpb25TZWVrZXJDb21wb25lbnQsXHJcbiAgXVxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIENvcmVGb3JtQ29udHJvbFNlZWtlckNvbXBvbmVudCBleHRlbmRzIENvcmVGb3JtQ29udHJvbEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcblxyXG5cclxuICBAVmlld0NoaWxkKCdhdmF0YXInKSBhdmF0YXIhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ3N0aWNrZXInKSBzdGlja2VyITogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgbmdDb250cm9sITogTmdDb250cm9sO1xyXG5cclxuICBpc0Rldk1vZGUgPSBpc0Rldk1vZGUoKTtcclxuXHJcbiAgbGFuZyE6IHN0cmluZztcclxuXHJcbiAgQElucHV0KCkgdGl0bGUhOiBFbnVtVHJhbnNsYXRlS2V5O1xyXG4gIEBJbnB1dCgpIHNob3dQYWdlSGVhZGVyITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBwcmVEZWZpbmVkT3V0ZXJQYXJhbSQhOiBCZWhhdmlvclN1YmplY3Q8YW55PjtcclxuICBASW5wdXQoKSBjbGljayQhOiBCZWhhdmlvclN1YmplY3Q8YW55PiB8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBnZXRCeUlkT2JqZWN0JCE6IEJlaGF2aW9yU3ViamVjdDxhbnk+O1xyXG4gIEBJbnB1dCgpIHBhcmFtTW9kZSE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgbXVsdGlNb2RlITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBvYmplY3RMaXN0JCE6IEJlaGF2aW9yU3ViamVjdDxhbnlbXT47XHJcbiAgQElucHV0KCkgc2hvd25TZWVrZXJDb2x1bW5zITogc3RyaW5nW107IC8vIFJlZHVjZSB2aXNpYmxlIGNvbHVtbnMgZnJvbSBiYXNlIGNvbXBvbmVudC5cclxuXHJcbiAgLyogV2hlbiBvYmplY3RzIGdpdmVuIGJ5IHRoZSBzZWVrZXIgZG91YmxlLWNsaWNrL2NoZWNrIGFyZSBpbmRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIGNvbnRyb2wgKi9cclxuICBASW5wdXQoKSBpbmRpcmVjdEJpbmRpbmchOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGJpbmRHcmlkSWRUbyE6IHN0cmluZztcclxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHJcblxyXG4gIC8qIEV4dGVuZGVkIHNpbmNlIDIwMjQtMDMtMjQgKi9cclxuICBASW5wdXQoKSBtdWx0aU1vZGVFeHRlbmRlZENvbHVtbnMhOiBJQ29yZVRhYmxlQ29sdW1uSXRlbVtdO1xyXG4gIEBJbnB1dCgpIG11bHRpTW9kZUV4dGVuZGVkU2VjdGlvbnMhOiBJQ29yZUZvcm1TZWN0aW9uW107XHJcbiAgQElucHV0KCkgZWRpdEJ1ZmZlckRhdGEkITogQmVoYXZpb3JTdWJqZWN0PGFueT47XHJcbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuICAvKiBTVEFSVDogUkVRVUlSRUQgKi9cclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBzZWVrZXJTb3VyY2VUeXBlITogRW51bUNvcmVGb3JtQ29udHJvbFNlZWtlclNvdXJjZVR5cGU7XHJcbiAgQElucHV0KCkgYm91bmRGcm9tITogc3RyaW5nOyAvLyB0YWtlIHRoaXMgZmllbGQgZnJvbSBHZXRCeUlkIHJlc3BvbnNlIGlubmVyQm9keSB0byBiaW5kIHRvIHRoZSB2YWx1ZVxyXG4gIEBJbnB1dCgpIHNob3duRnJvbSE6IHN0cmluZzsgLy8gdGFrZSB0aGlzIGZpZWxkIGZyb20gR2V0QnlJZCByZXNwb25zZSBpbm5lckJvZHkgdG8gYmluZCB0byB0aGUgdGV4dFxyXG4gIC8qIEVORDogUkVRVUlSRUQgd2hlbiBFTVBMT1lFRV9TRUVLRVIgKi9cclxuXHJcbiAgQElucHV0KCkgYWxzb0JpbmRUbyE6IElDb3JlRm9ybUNvbnRyb2xTZWVrZXJFeHRyYUJpbmRpbmdNb2RlbFtdO1xyXG4gIEBJbnB1dCgpIHNlZWtlclZlcmlmeUlnbm9yZSE6IGJvb2xlYW47XHJcblxyXG4gIEBPdXRwdXQoKSBvbkRvdWJsZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicpIGNvbnRhaW5lciE6IEVsZW1lbnRSZWY7XHJcblxyXG4gIHNvdXJjZU9wZW4hOiBib29sZWFuO1xyXG5cclxuICB2YWx1ZVRvU2hvdyE6IHN0cmluZztcclxuICBwbGFjZWhvbGRlciE6IHN0cmluZztcclxuXHJcbiAgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuXHJcbiAgLyogZm9yIG11bHRpTW9kZSAqL1xyXG4gIHBlbmRpbmdTZWxlY3RlZERhdGE6IGFueVtdID0gW107XHJcbiAgc2VsZWN0ZWREYXRhOiBhbnlbXSA9IFtdO1xyXG4gIG11bHRpTW9kZUNvbHVtbnM6IElDb3JlVGFibGVDb2x1bW5JdGVtW10gPSBbXTtcclxuICBzaG93RWRpdEJ1ZmZlciE6IGJvb2xlYW47XHJcbiAgZWRpdEJ1ZmZlckZvcm0hOiBGb3JtR3JvdXA7XHJcbiAgZWRpdGluZ0lkITogbnVtYmVyO1xyXG4gIHRvb2xzOiBJQ29yZVRhYmxlVG9vbEl0ZW1bXSA9IFt7XHJcbiAgICBjb2RlOiBFQ29yZVRhYmxlVG9vbENvZGUuZGVsZXRlLFxyXG4gICAgY2xhc3M6IEVDb3JlVGFibGVUb29sQ2xhc3MuZGVsZXRlLFxyXG4gICAgY2FwdGlvbjogRW51bVRyYW5zbGF0ZUtleS5VSV9DT1JFX0NPTlRST0xfVEFCTEVfVE9PTF9ERUxFVEVcclxuICB9XTtcclxuXHJcbiAgc2hvd0NsZWFySWNvbiE6IGJvb2xlYW47XHJcbiAgZGVmYXVsdEF2YXRhciE6IHN0cmluZztcclxuICBoaWRlRm9vdGVyOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcclxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgcHJpdmF0ZSBtbHM6IE11bHRpTGFuZ3VhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb3JlSm9iU2Vla2VyQ29tcG9uZW50OiBDb3JlSm9iU2Vla2VyQ29tcG9uZW50LFxyXG4gICAgcHJpdmF0ZSBjb3JlRW1wbG95ZWVTZWVrZXJDb21wb25lbnQ6IENvcmVFbXBsb3llZVNlZWtlckNvbXBvbmVudCxcclxuICAgIHByaXZhdGUgY29yZUNvbnRyYWN0U2Vla2VyQ29tcG9uZW50OiBDb3JlQ29udHJhY3RTZWVrZXJDb21wb25lbnQsXHJcbiAgICBwcml2YXRlIGNvcmVXb3JraW5nU2Vla2VyQ29tcG9uZW50OiBDb3JlV29ya2luZ1NlZWtlckNvbXBvbmVudCxcclxuICAgIHByaXZhdGUgY29yZVdhZ2VTZWVrZXJDb21wb25lbnQ6IENvcmVXYWdlU2Vla2VyQ29tcG9uZW50LFxyXG4gICAgcHJpdmF0ZSBjb3JlUG9zaXRpb25TZWVrZXJDb21wb25lbnQ6IENvcmVQb3NpdGlvblNlZWtlckNvbXBvbmVudCxcclxuICAgIHByaXZhdGUgcmFzOiBSYW5kb21BdmF0YXJTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy5kZWZhdWx0QXZhdGFyID0gcmFzLmdldCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc2lnbk11bHRpTW9kZUNvbHVtbnMoKTogdm9pZCB7XHJcbiAgICBzd2l0Y2ggKHRoaXMuc2Vla2VyU291cmNlVHlwZSkge1xyXG4gICAgICBjYXNlIEVudW1Db3JlRm9ybUNvbnRyb2xTZWVrZXJTb3VyY2VUeXBlLkpPQl9TRUVLOlxyXG4gICAgICAgIGlmICghIXRoaXMubXVsdGlNb2RlRXh0ZW5kZWRDb2x1bW5zKSB7XHJcbiAgICAgICAgICB0aGlzLm11bHRpTW9kZUNvbHVtbnMgPSBbLi4udGhpcy5jb3JlSm9iU2Vla2VyQ29tcG9uZW50LmNvbHVtbnMsIC4uLnRoaXMubXVsdGlNb2RlRXh0ZW5kZWRDb2x1bW5zXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5tdWx0aU1vZGVDb2x1bW5zID0gdGhpcy5jb3JlSm9iU2Vla2VyQ29tcG9uZW50LmNvbHVtbnM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoISEhdGhpcy5tdWx0aU1vZGUpIHtcclxuICAgICAgICAgIHRoaXMuaGlkZUZvb3RlciA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1Db3JlRm9ybUNvbnRyb2xTZWVrZXJTb3VyY2VUeXBlLkVNUExPWUVFX1NFRUs6XHJcbiAgICAgICAgaWYgKCEhdGhpcy5tdWx0aU1vZGVFeHRlbmRlZENvbHVtbnMpIHtcclxuICAgICAgICAgIHRoaXMubXVsdGlNb2RlQ29sdW1ucyA9IFsuLi50aGlzLmNvcmVFbXBsb3llZVNlZWtlckNvbXBvbmVudC5jb2x1bW5zLCAuLi50aGlzLm11bHRpTW9kZUV4dGVuZGVkQ29sdW1uc107XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMubXVsdGlNb2RlQ29sdW1ucyA9IHRoaXMuY29yZUVtcGxveWVlU2Vla2VyQ29tcG9uZW50LmNvbHVtbnM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoISEhdGhpcy5tdWx0aU1vZGUpIHtcclxuICAgICAgICAgIHRoaXMuaGlkZUZvb3RlciA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1Db3JlRm9ybUNvbnRyb2xTZWVrZXJTb3VyY2VUeXBlLkNPTlRSQUNUX1NFRUs6XHJcbiAgICAgICAgdGhpcy5tdWx0aU1vZGVDb2x1bW5zID0gdGhpcy5jb3JlQ29udHJhY3RTZWVrZXJDb21wb25lbnQuY29sdW1ucztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZUZvcm1Db250cm9sU2Vla2VyU291cmNlVHlwZS5XT1JLSU5HX1NFRUs6XHJcbiAgICAgICAgdGhpcy5tdWx0aU1vZGVDb2x1bW5zID0gdGhpcy5jb3JlV29ya2luZ1NlZWtlckNvbXBvbmVudC5jb2x1bW5zO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1Db3JlRm9ybUNvbnRyb2xTZWVrZXJTb3VyY2VUeXBlLldBR0VfU0VFSzpcclxuICAgICAgICB0aGlzLm11bHRpTW9kZUNvbHVtbnMgPSB0aGlzLmNvcmVXYWdlU2Vla2VyQ29tcG9uZW50LmNvbHVtbnM7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVGb3JtQ29udHJvbFNlZWtlclNvdXJjZVR5cGUuUE9TSVRJT05fU0VFSzpcclxuICAgICAgICB0aGlzLm11bHRpTW9kZUNvbHVtbnMgPSB0aGlzLmNvcmVQb3NpdGlvblNlZWtlckNvbXBvbmVudC5jb2x1bW5zO1xyXG4gICAgICAgIGlmICghISF0aGlzLm11bHRpTW9kZSkge1xyXG4gICAgICAgICAgdGhpcy5oaWRlRm9vdGVyID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVGb3JtQ29udHJvbFNlZWtlclNvdXJjZVR5cGUuT1JHQU5JWkFUSU9OX1VOSVRfU0VFSzpcclxuICAgICAgICB0aGlzLm11bHRpTW9kZUNvbHVtbnMgPSBbXTtcclxuICAgICAgICBpZiAoISEhdGhpcy5tdWx0aU1vZGUpIHtcclxuICAgICAgICAgIHRoaXMuaGlkZUZvb3RlciA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG5cclxuICAgIC8qXHJcbiAgICBJZiB3ZSB0cnkgdG8gaW5qZWN0IE5nQ29udHJvbCBkaXJlY3RseSB3aXRoaW4gdGhlIGNvbnN0cnVjdG9yLCB3ZSB3aWxsIGdldCBhbiBlcnJvcjog4oCcRXJyb3I6IE5HMDIwMDogQ2lyY3VsYXIgZGVwZW5kZW5jeSBpbiBESSBkZXRlY3RlZOKApuKAnS5cclxuICAgIFRodXMsIHdlIGluamVjdCBOZ0NvbnRyb2wgaW4gdGhlIE9uSW5pdCBsaWZlY3ljbGUgaG9vayB2aWEgSW5qZWN0b3Igd2l0aG91dCBhbnkgZXJyb3IuXHJcbiAgICAqL1xyXG4gICAgdGhpcy5uZ0NvbnRyb2wgPSB0aGlzLmluamVjdG9yLmdldChOZ0NvbnRyb2wpO1xyXG4gICAgdGhpcy5hc2lnbk11bHRpTW9kZUNvbHVtbnMoKTtcclxuXHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcblxyXG4gICAgICB0aGlzLm11bHRpTW9kZUNvbHVtbnM/Lm1hcChjID0+IHtcclxuICAgICAgICBpZiAoYy5maWVsZCA9PT0gJ2F2YXRhcicgJiYgISEhYy50ZW1wbGF0ZVJlZikgYy50ZW1wbGF0ZVJlZiA9IHRoaXMuYXZhdGFyXHJcbiAgICAgICAgaWYgKGMuZmllbGQgPT09ICdhY3RmbGcnICYmICEhIWMudGVtcGxhdGVSZWYpIGMudGVtcGxhdGVSZWYgPSB0aGlzLnN0aWNrZXJcclxuICAgICAgfSlcclxuXHJcbiAgICAgIGNvbnN0IGVsID0gdGhpcy5jb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgIGNvbnN0IGhlaWdodCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcclxuICAgICAgZWwuc3R5bGUuc2V0UHJvcGVydHkoJy0taGVpZ2h0JywgKGhlaWdodCB8fCA1MCkgKyAncHgnKTtcclxuXHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIHRoaXMubWxzLmxhbmckLnN1YnNjcmliZSh4ID0+IHRoaXMubGFuZyA9IHgpXHJcbiAgICAgIClcclxuXHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIHRoaXMubmdDb250cm9sLmNvbnRyb2w/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgICBpZiAoISEheCkgdGhpcy52YWx1ZVRvU2hvdyA9IFwiXCJcclxuICAgICAgICB9KSFcclxuICAgICAgKVxyXG5cclxuXHJcbiAgICAgIC8qIFNUQVJUOiBDSEVDSyBJTlBVVFMgKi9cclxuXHJcblxyXG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICBpZiAoISEhdGhpcy5zZWVrZXJTb3VyY2VUeXBlKSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgYENvcmVGb3JtQ29udHJvbFNlZWtlckNvbXBvbmVudCBFcnJvcjogUmVxdWlyZWQgaW5wdXRzOlxyXG4gICAgICAgICAgICAgICAgc2Vla2VyU291cmNlVHlwZTogRW51bUNvcmVGb3JtQ29udHJvbFNlZWtlclNvdXJjZVR5cGUgKGZvciAnJHt0aGlzLm5nQ29udHJvbC5uYW1lfScpYFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuXHJcbiAgICAgICAgICBpZiAoISEhdGhpcy5wYXJhbU1vZGUpIHtcclxuXHJcbiAgICAgICAgICAgIC8vZ2V0QnlJZE9iamVjdCRcclxuICAgICAgICAgICAgaWYgKCEhIXRoaXMuZ2V0QnlJZE9iamVjdCQpIHtcclxuICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgICAgIGBDb3JlRm9ybUNvbnRyb2xTZWVrZXJDb21wb25lbnQgRXJyb3I6IFJlcXVpcmVkIGlucHV0czpcclxuICAgICAgICAgICAgICAgICAgZ2V0QnlJZE9iamVjdCQ6IEJlaGF2aW9yU3ViamVjdCZsdDthbnkmZ3Q7IChmb3IgJyR7dGhpcy5uZ0NvbnRyb2wubmFtZX0nKWBcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKCEhIXRoaXMuYm91bmRGcm9tKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICAgICAgIGBBbGwgX1NFRUtFUiBjb250cm9scyByZXF1aXJlIGlucHV0OlxyXG4gICAgICAgICAgICAgICAgICAgIGJvdW5kRnJvbTogc3RyaW5nOyAoZm9yICcke3RoaXMubmdDb250cm9sLm5hbWV9JylgLFxyXG4gICAgICAgICAgICAgIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoISEhdGhpcy5zaG93bkZyb20pIHtcclxuICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgICAgICAgYEFsbCBfU0VFS0VSIGNvbnRyb2xzIHJlcXVpcmUgaW5wdXQ6XHJcbiAgICAgICAgICAgICAgICAgICAgc2hvd25Gcm9tOiBzdHJpbmc7IChmb3IgJyR7dGhpcy5uZ0NvbnRyb2wubmFtZX0nKWAsXHJcbiAgICAgICAgICAgICAgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnNcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG5cclxuICAgICAgLyogRU5EOiBDSEVDSyBJTlBVVFMgKi9cclxuXHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIHRoaXMuZ2V0QnlJZE9iamVjdCQ/LnN1YnNjcmliZSh4ID0+IHtcclxuXHJcbiAgICAgICAgICBpZiAoISF4KSB7XHJcbiAgICAgICAgICAgIGlmICghISF0aGlzLm11bHRpTW9kZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMudmFsdWVUb1Nob3cgPSB4W3RoaXMuc2hvd25Gcm9tXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKCEhIXRoaXMubXVsdGlNb2RlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy52YWx1ZVRvU2hvdyA9IFwiXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICApXHJcblxyXG4gICAgICBpZiAoISF0aGlzLm9iamVjdExpc3QkKSB7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICB0aGlzLm9iamVjdExpc3QkLnN1YnNjcmliZSh4ID0+IHRoaXMuc2VsZWN0ZWREYXRhID0geClcclxuICAgICAgICApXHJcbiAgICAgIH1cclxuXHJcbiAgICB9KVxyXG5cclxuXHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5tYXAoeCA9PiB4Py51bnN1YnNjcmliZSgpKVxyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgd3JpdGVWYWx1ZShvYmo6IGFueSk6IHZvaWQge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnZhbHVlID0gb2JqKTtcclxuICAgIGlmICghIXRoaXMubXVsdGlNb2RlKSB7XHJcbiAgICAgIGNvbnNvbGUuZ3JvdXAoJ1dyaXRlIHZhbHVlIGZvciAnICsgdGhpcy5uZ0NvbnRyb2wubmFtZSk7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwidGhpcy5tdWx0aU1vZGVDb2x1bW5zXCIsIHRoaXMubXVsdGlNb2RlQ29sdW1ucylcclxuICAgICAgY29uc29sZS5sb2coJ1RvIGRvOiBBc3NpZ24gYXBpIHJlcyB0byB0aGUgc2VsZWN0ZWREYXRhJylcclxuICAgICAgY29uc29sZS5ncm91cEVuZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DbGlja1NlZWsoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNsaWNrJD8ubmV4dCh0cnVlKTtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpIHJldHVybjtcclxuICAgIHRoaXMuc291cmNlT3BlbiA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdCgpOiB2b2lkIHtcclxuICAgIGlmICghIXRoaXMubXVsdGlNb2RlKSB7XHJcblxyXG4gICAgICBpZiAoIXRoaXMuaW5kaXJlY3RCaW5kaW5nKSB7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5wZW5kaW5nU2VsZWN0ZWREYXRhLmZpbHRlcih4ID0+IHRoaXMuc2VsZWN0ZWREYXRhLmZpbHRlcih5ID0+IHkuaWQgPT09IHguSWQpLmxlbmd0aCA9PT0gMClcclxuICAgICAgICBjb25zdCBuZXdTZWxlY3RlZERhdGEgPSBbLi4udGhpcy5zZWxlY3RlZERhdGEsIC4uLmZpbHRlcl07XHJcbiAgICAgICAgY29uc3QgbmV3U2VsZWN0ZWRJZHM6IGFueVtdID0gW107XHJcbiAgICAgICAgbmV3U2VsZWN0ZWREYXRhLm1hcCh4ID0+IG5ld1NlbGVjdGVkSWRzLnB1c2goeC5pZCkpXHJcbiAgICAgICAgdGhpcy5vYmplY3RMaXN0JC5uZXh0KG5ld1NlbGVjdGVkRGF0YSk7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ld1NlbGVjdGVkSWRzO1xyXG4gICAgICAgIHRoaXMubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UobmV3U2VsZWN0ZWRJZHMpXHJcbiAgICAgICAgdGhpcy5wZW5kaW5nU2VsZWN0ZWREYXRhID0gW107XHJcbiAgICAgICAgdGhpcy5zb3VyY2VPcGVuID0gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5wZW5kaW5nU2VsZWN0ZWREYXRhLm1hcCgoeCwgaW5kZXgpID0+IHtcclxuICAgICAgICAgIC8vIGfDoW4gaWQgY+G7p2EgbMaw4bubaSBuZ3Xhu5NuIHbDoG8gY+G7mXQgY+G6p24gdGhp4bq/dFxyXG4gICAgICAgICAgeFt0aGlzLmJpbmRHcmlkSWRUb10gPSB4LmlkXHJcbiAgICAgICAgICAvLyBzYXUgxJHDsyBob8OhbiBpZCBuw6B5IHNhbmcgZ2nDoSB0cuG7iyDhuqNvLCBlYWNoIFwieFwiIGl0ZW0gbXVzdCBoYXZlIGFuIHVuaXF1ZSBpZFxyXG4gICAgICAgICAgeC5pZCA9IChuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIGluZGV4KSAqICgtMSkgLy8gKiAoLTEpOiB0byBieXBhc3MgKGxvb3Npbmcgb2YvY29uZnVzaW5nIHdpdGgpIGV4aXN0aW5nIGluZm9ybWF0aW9uXHJcbiAgICAgICAgfSlcclxuICAgICAgICBjb25zdCBuZXdTZWxlY3RlZERhdGEgPSBbLi4udGhpcy5zZWxlY3RlZERhdGEsIC4uLnRoaXMucGVuZGluZ1NlbGVjdGVkRGF0YV07XHJcbiAgICAgICAgY29uc3QgbmV3U2VsZWN0ZWRJZHM6IGFueVtdID0gW107XHJcbiAgICAgICAgbmV3U2VsZWN0ZWREYXRhLm1hcCh4ID0+IG5ld1NlbGVjdGVkSWRzLnB1c2goeC5pZCkpXHJcbiAgICAgICAgdGhpcy5vYmplY3RMaXN0JC5uZXh0KG5ld1NlbGVjdGVkRGF0YSk7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ld1NlbGVjdGVkSWRzO1xyXG4gICAgICAgIHRoaXMubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UobmV3U2VsZWN0ZWREYXRhKVxyXG4gICAgICAgIHRoaXMucGVuZGluZ1NlbGVjdGVkRGF0YSA9IFtdO1xyXG4gICAgICAgIHRoaXMuc291cmNlT3BlbiA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNhbmNlbCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc291cmNlT3BlbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgb25Sb3dEb3VibGVDbGljayhlOiBhbnkpIHtcclxuICAgIHRoaXMud3JpdGVWYWx1ZShlW3RoaXMuYm91bmRGcm9tXSk7XHJcbiAgICB0aGlzLm9uQ2hhbmdlKGVbdGhpcy5ib3VuZEZyb21dKTtcclxuICAgIHRoaXMudmFsdWVUb1Nob3cgPSBlW3RoaXMuc2hvd25Gcm9tXTtcclxuICAgIHRoaXMuc291cmNlT3BlbiA9IGZhbHNlO1xyXG5cclxuICAgIGlmICghIXRoaXMuYWxzb0JpbmRUbykge1xyXG4gICAgICBjb25zdCBmb3JtID0gdGhpcy5uZ0NvbnRyb2wuY29udHJvbD8ucGFyZW50O1xyXG4gICAgICBpZiAoZm9ybSkge1xyXG4gICAgICAgIHRoaXMuYWxzb0JpbmRUby5tYXAoKHgsIGluZGV4KSA9PiB7XHJcblxyXG4gICAgICAgICAgLypcclxuICAgICAgICAgIHN0YXJ0OiBWYWxpZGF0ZSBEZXZlbG9wZXIgaW5wdXRcclxuICAgICAgICAgICovXHJcbiAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkgJiYgaW5kZXggPT09IDApIHtcclxuICAgICAgICAgICAgaWYgKCEhIXgudGFrZUZyb20pIHtcclxuICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcInRha2VGcm9tIHdhcyB1bmRlZmluZWRcIiwgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaWYgKCEhIWVbeC50YWtlRnJvbV0pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKGBZb3UgZXhwZWN0IGEgdmFsdWUgZnJvbSAnJHt4LnRha2VGcm9tfScsIGJ1dCB0aGUgc2Vla2VyIGdyaWQgZG9lcyBub3QgaGF2ZSB0aGlzIGNvbHVtbmAsIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoISEheC5iaW5kVG8pIHtcclxuICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcImJpbmRUbyB3YXMgdW5kZWZpbmVkXCIsIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmICghISFmb3JtLmdldCh4LmJpbmRUbykpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKGBZb3UgZXhwZWN0IHRvIGJpbmQgdmFsdWUgdG8gJyR7eC5iaW5kVG99JywgYnV0IHRoZSBmb3JtIGdyb3VwIGRvZXMgbm90IGhhdmUgdGhpcyBjb250cm9sYCwgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLypcclxuICAgICAgICAgIGVuZDogVmFsaWRhdGUgRGV2ZWxvcGVyIGlucHV0XHJcbiAgICAgICAgICAqL1xyXG5cclxuICAgICAgICAgIGZvcm0uZ2V0KHguYmluZFRvKT8uc2V0VmFsdWUoZVt4LnRha2VGcm9tXSk7XHJcbiAgICAgICAgICBmb3JtLmdldCh4LmJpbmRUbyk/Lm1hcmtBc1RvdWNoZWQ7XHJcbiAgICAgICAgICBmb3JtLmdldCh4LmJpbmRUbyk/Lm1hcmtBc0RpcnR5KCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25JdGVtRG91YmxlQ2xpY2soZTogSU9yZ1RyZWVJdGVtKSB7XHJcbiAgICB0aGlzLndyaXRlVmFsdWUoZS5pZCk7XHJcbiAgICB0aGlzLnZhbHVlVG9TaG93ID0gZS50cmVlJFRpdGxlO1xyXG4gICAgdGhpcy5vbkNoYW5nZShlLmlkKTtcclxuICAgIHRoaXMubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgdGhpcy5zb3VyY2VPcGVuID0gZmFsc2U7XHJcbiAgICB0aGlzLm9uRG91YmxlQ2xpY2suZW1pdChlKTtcclxuICB9XHJcblxyXG4gIG9uQ29sdW1uc0luaXQoZTogYW55KTogdm9pZCB7XHJcbiAgICBpZiAoISF0aGlzLm11bHRpTW9kZUV4dGVuZGVkQ29sdW1ucykge1xyXG4gICAgICB0aGlzLm11bHRpTW9kZUNvbHVtbnMgPSBbLi4uZSwgLi4udGhpcy5tdWx0aU1vZGVFeHRlbmRlZENvbHVtbnNdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5tdWx0aU1vZGVDb2x1bW5zID0gZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uU2VsZWN0ZWREYXRhQ2hhbmdlKGU6IGFueSkge1xyXG4gICAgaWYgKCEhdGhpcy5tdWx0aU1vZGVFeHRlbmRlZENvbHVtbnMpIHtcclxuICAgICAgdGhpcy5tdWx0aU1vZGVDb2x1bW5zID0gWy4uLmUuY29sdW1ucywgLi4udGhpcy5tdWx0aU1vZGVFeHRlbmRlZENvbHVtbnNdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5tdWx0aU1vZGVDb2x1bW5zID0gZS5jb2x1bW5zO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucGVuZGluZ1NlbGVjdGVkRGF0YSA9IGUuZGF0YTtcclxuICB9XHJcblxyXG4gIG9uVG9vbENsaWNrKGU6IElDb3JlVGFibGVUb29sQ2xpY2tFdmVudEVtaXR0ZXJEYXRhKSB7XHJcbiAgICBpZiAoZS5jb2RlID09PSBFQ29yZVRhYmxlVG9vbENvZGUuZGVsZXRlKSB7XHJcbiAgICAgIGNvbnN0IG5ld09iamVjdExpc3QgPSB0aGlzLm9iamVjdExpc3QkLnZhbHVlLmZpbHRlcih4ID0+IHguaWQgIT09IGUuaWQpXHJcbiAgICAgIGNvbnN0IG5ld0lkcyA9IHRoaXMudmFsdWUuZmlsdGVyKCh4OiBhbnkpID0+IHggIT09IGUuaWQpXHJcblxyXG4gICAgICB0aGlzLnZhbHVlID0gbmV3SWRzO1xyXG4gICAgICB0aGlzLm9iamVjdExpc3QkLm5leHQobmV3T2JqZWN0TGlzdCk7XHJcblxyXG4gICAgICB0aGlzLm9uQ2hhbmdlKG5ld0lkcyk7XHJcbiAgICAgIHRoaXMubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DbGlja0NsZWFyKCkge1xyXG5cclxuICAgIHRoaXMud3JpdGVWYWx1ZShudWxsKTtcclxuICAgIHRoaXMub25DaGFuZ2UobnVsbCk7XHJcbiAgICB0aGlzLnZhbHVlVG9TaG93ID0gXCJcIjtcclxuXHJcbiAgfVxyXG5cclxuICBvblNlbGVjdGVkRGF0YVJvd0RvdWJsZUNsaWNrKGU6IGFueSkge1xyXG4gICAgY29uc29sZS5sb2coXCJHaXZlbiByb3cgZGF0YTogXCIsIGUpXHJcbiAgICBpZiAoIWUuaWQpIHtcclxuICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXCJObyAnaWQnIGNvbHVtbnMgZm91bmQgb3IgY3VycmVudCBpZCB3YXMgbnVsbFwiLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLmVkaXRCdWZmZXJGb3JtPy5nZXQoJ2lkJyk/LnBhdGNoVmFsdWUoZS5pZClcclxuICAgIH0gY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoZXgubWVzc2FnZSwgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoISF0aGlzLm11bHRpTW9kZUV4dGVuZGVkQ29sdW1ucy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5tdWx0aU1vZGVFeHRlbmRlZENvbHVtbnMubWFwKHggPT4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICB0aGlzLmVkaXRCdWZmZXJGb3JtPy5nZXQoeC5maWVsZCk/LnBhdGNoVmFsdWUoZVt4LmZpZWxkXSlcclxuICAgICAgICB9IGNhdGNoIChleGNlcHRpb246IGFueSkge1xyXG4gICAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKGV4Y2VwdGlvbi5tZXNzYWdlLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRoaXMuZWRpdGluZ0lkID0gZS5pZDtcclxuICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uOiBhbnkpIHtcclxuICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKGV4Y2VwdGlvbi5tZXNzYWdlLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnNob3dFZGl0QnVmZmVyID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uRWRpdEJ1ZmZlclN1Ym1pdChlOiBhbnkpIHtcclxuICAgIHZhciBmb3JtRGF0YSA9IHRoaXMuZWRpdEJ1ZmZlckZvcm0uZ2V0UmF3VmFsdWUoKTtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuc2VsZWN0ZWREYXRhPy5maWx0ZXIoeCA9PiB4LmlkID09PSB0aGlzLmVkaXRpbmdJZCk7XHJcbiAgICAgIGlmIChmaWx0ZXI/Lmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgIHRoaXMubXVsdGlNb2RlRXh0ZW5kZWRDb2x1bW5zPy5tYXAoYyA9PiB7XHJcbiAgICAgICAgICBmaWx0ZXJbMF1bYy5maWVsZF0gPSBmb3JtRGF0YVtjLmZpZWxkXTtcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZWRpdEJ1ZmZlckRhdGEkLm5leHQoZm9ybURhdGEpO1xyXG4gICAgICB0aGlzLnNob3dFZGl0QnVmZmVyID0gZmFsc2U7XHJcbiAgICB9IGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGV4KTtcclxuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihleC5tZXNzYWdlIHx8ICdBbiBlcnJvciBvY2N1cmVkIHdoaWxlIHRyeWluZyB0byB1cGRhdGUgc2VsZWN0ZWREYXRhJywgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uRWRpdEJ1ZmZlckNhbmNlbChlOiBhbnkpIHtcclxuICAgIHRoaXMuc2hvd0VkaXRCdWZmZXIgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG9uRWRpdEJ1ZmZlckZvcm1DcmVhdGVkKGU6IEZvcm1Hcm91cCkge1xyXG4gICAgdGhpcy5lZGl0QnVmZmVyRm9ybSA9IGU7XHJcbiAgfVxyXG5cclxufSIsIjxkaXYgI2NvbnRhaW5lciBjbGFzcz1cImNvcmUtZm9ybS1jb250cm9sLXNlZWtlci1jb250YWluZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJpbnB1dC13cmFwcGVyXCIgW2NsYXNzLmQtbm9uZV09XCIhIW11bHRpTW9kZVwiPlxyXG4gICAgICAgIDxsYWJlbCAjc2hvd25UZXh0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJ0ZXh0IGZvcm0tY29udHJvbFwiIFtjbGFzcy5mb3JtLWNvbnRyb2wtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cclxuICAgICAgICAgICAgPHNwYW4gW2FwcFRvb2x0aXBdPVwidmFsdWVUb1Nob3dcIj57eyB2YWx1ZVRvU2hvdyB9fTwvc3Bhbj5cclxuICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgIEBpZiAoIW11bHRpTW9kZSkge1xyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjbGVhci1pY29uLXdyYXBwZXJcIiBbY2xhc3MuZC1ub25lXT1cIiEhZGlzYWJsZWQgfHwgISEhdmFsdWVcIiAoY2xpY2spPVwib25DbGlja0NsZWFyKClcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtd3JhcHBlclwiIFthcHBUb29sdGlwXT1cIidVSS5DT1JFX0NPTlRPTF9DT01NT05fQ0xFQVInIHwgdHJhbnNsYXRlOiBsYW5nXCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZlYXRoZXIteFwiPjwvaT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgfVxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwic2Vla2VyLWljb24td3JhcHBlclwiIFtjbGFzcy5mb3JtLWNvbnRyb2wtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbY2xhc3MubXVsdGktbW9kZV09XCIhIW11bHRpTW9kZVwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tTZWVrKClcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC13cmFwcGVyXCIgW2NsYXNzLmZvcm0tY29udHJvbC1kaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZlYXRoZXItc2VhcmNoXCI+PC9pPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICBAaWYgKCEhbXVsdGlNb2RlKSB7XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29yZS10YWJiZS13cmFwcGVyXCI+XHJcbiAgICAgICAgPGNvcmUtdGFibGUgW2NvbHVtbnNdPVwibXVsdGlNb2RlQ29sdW1uc1wiIFtkYXRhXT1cInNlbGVjdGVkRGF0YVwiIFtzaG93VG9vbHNdPVwiISEhZGlzYWJsZWRcIiBbdG9vbHNdPVwidG9vbHNcIlxyXG4gICAgICAgICAgICBbc2VhcmNoU3dpdGNoRGlzYWJsZWRdPVwidHJ1ZVwiIChvblRvb2xDbGljayk9XCJvblRvb2xDbGljaygkZXZlbnQpXCJcclxuICAgICAgICAgICAgKG9uUm93RG91YmxlQ2xpY2spPVwib25TZWxlY3RlZERhdGFSb3dEb3VibGVDbGljaygkZXZlbnQpXCI+PC9jb3JlLXRhYmxlPlxyXG4gICAgPC9kaXY+XHJcbiAgICB9XHJcblxyXG4gICAgQGlmICghIXNvdXJjZU9wZW4pIHtcclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250YWluZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyLXBhbmVsXCI+XHJcbiAgICAgICAgICAgICAgICA8Y29yZS1wYWdlLWhlYWRlciBbdGl0bGVdPVwidGl0bGVcIiBbaGlkZUJ1dHRvbkdyb3VwXT1cInRydWVcIiAqbmdJZj1cInNob3dQYWdlSGVhZGVyXCI+PC9jb3JlLXBhZ2UtaGVhZGVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNvdXJjZS1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmVhdGhlci14XCIgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5kLWJsb2NrXT1cInNlZWtlclNvdXJjZVR5cGU9PT0nT1JHQU5JWkFUSU9OX1VOSVRfU0VFSydcIj48L2k+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgIEBzd2l0Y2ggKHNlZWtlclNvdXJjZVR5cGUpIHtcclxuICAgICAgICAgICAgICAgIEBjYXNlICgnSk9CX1NFRUsnKSB7XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiam9iU2Vla1wiPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBAY2FzZSAoJ0VNUExPWUVFX1NFRUsnKSB7XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZW1wbG95ZWVTZWVrXCI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIEBjYXNlICgnQ09OVFJBQ1RfU0VFSycpIHtcclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250cmFjdFNlZWtcIj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgQGNhc2UgKCdXT1JLSU5HX1NFRUsnKSB7XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwid29ya2luZ1NlZWtcIj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgQGNhc2UgKCdXQUdFX1NFRUsnKSB7XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwid2FnZVNlZWtcIj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgQGNhc2UgKCdPUkdBTklaQVRJT05fVU5JVF9TRUVLJykge1xyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm9yZ2FuaXphdGlvblVuaXRTZWVrXCI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIEBjYXNlICgnUE9TSVRJT05fU0VFSycpIHtcclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwb3NpdGlvblNlZWtcIj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgQGNhc2UgKCdQT1NJVElPTl9DT05DVVJSRU5UX1NFRUsnKSB7XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicG9zaXRpb25Db25jdXJyZW50U2Vla1wiPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIEBpZiAoIWhpZGVGb290ZXIpIHtcclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvb3RlclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleC1lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvblNlbGVjdCgpXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ1VJX0NPUkVfQ09ORklSTV9ESUFMT0dfQlVUVE9OX1NFTEVDVCcgfCB0cmFuc2xhdGU6IGxhbmcgfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnVUlfQ09SRV9DT05GSVJNX0RJQUxPR19CVVRUT05fQ0FOQ0VMJyB8IHRyYW5zbGF0ZTogbGFuZyB9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICB9XHJcblxyXG48L2Rpdj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjam9iU2Vlaz5cclxuICAgIDxjb3JlLWpvYi1zZWVrZXIgW3ByZURlZmluZWRPdXRlclBhcmFtJF09XCJwcmVEZWZpbmVkT3V0ZXJQYXJhbSRcIiBbbXVsdGlNb2RlXT1cIm11bHRpTW9kZVwiXHJcbiAgICAgICAgKHJvd0RvdWJsZUNsaWNrKT1cIm9uUm93RG91YmxlQ2xpY2soJGV2ZW50KVwiIChjb2x1bW5zSW5pdCk9XCJvbkNvbHVtbnNJbml0KCRldmVudClcIlxyXG4gICAgICAgIChzZWxlY3RlZERhdGFDaGFuZ2UpPVwib25TZWxlY3RlZERhdGFDaGFuZ2UoJGV2ZW50KVwiPjwvY29yZS1qb2Itc2Vla2VyPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNlbXBsb3llZVNlZWs+XHJcbiAgICA8Y29yZS1lbXBsb3llZS1zZWVrZXIgW3ByZURlZmluZWRPdXRlclBhcmFtJF09XCJwcmVEZWZpbmVkT3V0ZXJQYXJhbSRcIiBbbXVsdGlNb2RlXT1cIm11bHRpTW9kZVwiXHJcbiAgICAgICAgKHJvd0RvdWJsZUNsaWNrKT1cIm9uUm93RG91YmxlQ2xpY2soJGV2ZW50KVwiIChjb2x1bW5zSW5pdCk9XCJvbkNvbHVtbnNJbml0KCRldmVudClcIlxyXG4gICAgICAgIChzZWxlY3RlZERhdGFDaGFuZ2UpPVwib25TZWxlY3RlZERhdGFDaGFuZ2UoJGV2ZW50KVwiPjwvY29yZS1lbXBsb3llZS1zZWVrZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2NvbnRyYWN0U2Vlaz5cclxuICAgIDxjb3JlLWNvbnRyYWN0LXNlZWtlciBbcHJlRGVmaW5lZE91dGVyUGFyYW0kXT1cInByZURlZmluZWRPdXRlclBhcmFtJFwiIFttdWx0aU1vZGVdPVwibXVsdGlNb2RlXCJcclxuICAgICAgICAocm93RG91YmxlQ2xpY2spPVwib25Sb3dEb3VibGVDbGljaygkZXZlbnQpXCIgKGNvbHVtbnNJbml0KT1cIm9uQ29sdW1uc0luaXQoJGV2ZW50KVwiXHJcbiAgICAgICAgKHNlbGVjdGVkRGF0YUNoYW5nZSk9XCJvblNlbGVjdGVkRGF0YUNoYW5nZSgkZXZlbnQpXCI+PC9jb3JlLWNvbnRyYWN0LXNlZWtlcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjd29ya2luZ1NlZWs+XHJcbiAgICA8Y29yZS13b3JraW5nLXNlZWtlciBbcHJlRGVmaW5lZE91dGVyUGFyYW0kXT1cInByZURlZmluZWRPdXRlclBhcmFtJFwiIFttdWx0aU1vZGVdPVwibXVsdGlNb2RlXCJcclxuICAgICAgICAocm93RG91YmxlQ2xpY2spPVwib25Sb3dEb3VibGVDbGljaygkZXZlbnQpXCIgKGNvbHVtbnNJbml0KT1cIm9uQ29sdW1uc0luaXQoJGV2ZW50KVwiXHJcbiAgICAgICAgKHNlbGVjdGVkRGF0YUNoYW5nZSk9XCJvblNlbGVjdGVkRGF0YUNoYW5nZSgkZXZlbnQpXCI+PC9jb3JlLXdvcmtpbmctc2Vla2VyPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICN3YWdlU2Vlaz5cclxuICAgIDxjb3JlLXdhZ2Utc2Vla2VyIFtwcmVEZWZpbmVkT3V0ZXJQYXJhbSRdPVwicHJlRGVmaW5lZE91dGVyUGFyYW0kXCIgW211bHRpTW9kZV09XCJtdWx0aU1vZGVcIlxyXG4gICAgICAgIChyb3dEb3VibGVDbGljayk9XCJvblJvd0RvdWJsZUNsaWNrKCRldmVudClcIiAoY29sdW1uc0luaXQpPVwib25Db2x1bW5zSW5pdCgkZXZlbnQpXCJcclxuICAgICAgICAoc2VsZWN0ZWREYXRhQ2hhbmdlKT1cIm9uU2VsZWN0ZWREYXRhQ2hhbmdlKCRldmVudClcIj48L2NvcmUtd2FnZS1zZWVrZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3Bvc2l0aW9uU2Vlaz5cclxuICAgIDxjb3JlLXBvc2l0aW9uLXNlZWtlciBbcHJlRGVmaW5lZE91dGVyUGFyYW0kXT1cInByZURlZmluZWRPdXRlclBhcmFtJFwiIFttdWx0aU1vZGVdPVwibXVsdGlNb2RlXCJcclxuICAgICAgICBbc2Vla2VyVmVyaWZ5SWdub3JlXT1cInNlZWtlclZlcmlmeUlnbm9yZVwiIChyb3dEb3VibGVDbGljayk9XCJvblJvd0RvdWJsZUNsaWNrKCRldmVudClcIlxyXG4gICAgICAgIChjb2x1bW5zSW5pdCk9XCJvbkNvbHVtbnNJbml0KCRldmVudClcIlxyXG4gICAgICAgIChzZWxlY3RlZERhdGFDaGFuZ2UpPVwib25TZWxlY3RlZERhdGFDaGFuZ2UoJGV2ZW50KVwiPjwvY29yZS1wb3NpdGlvbi1zZWVrZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3Bvc2l0aW9uQ29uY3VycmVudFNlZWs+XHJcbiAgICA8Y29yZS1wb3NpdGlvbi1jb25jdXJyZW50LXNlZWtlciBbcHJlRGVmaW5lZE91dGVyUGFyYW0kXT1cInByZURlZmluZWRPdXRlclBhcmFtJFwiIFttdWx0aU1vZGVdPVwibXVsdGlNb2RlXCJcclxuICAgICAgICAocm93RG91YmxlQ2xpY2spPVwib25Sb3dEb3VibGVDbGljaygkZXZlbnQpXCIgKGNvbHVtbnNJbml0KT1cIm9uQ29sdW1uc0luaXQoJGV2ZW50KVwiXHJcbiAgICAgICAgKHNlbGVjdGVkRGF0YUNoYW5nZSk9XCJvblNlbGVjdGVkRGF0YUNoYW5nZSgkZXZlbnQpXCI+PC9jb3JlLXBvc2l0aW9uLWNvbmN1cnJlbnQtc2Vla2VyPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNvcmdhbml6YXRpb25Vbml0U2Vlaz5cclxuICAgIDxjb3JlLW9yZy11bml0LXNlZWtlciAoaXRlbURvdWJsZUNsaWNrKT1cIm9uSXRlbURvdWJsZUNsaWNrKCRldmVudClcIj48L2NvcmUtb3JnLXVuaXQtc2Vla2VyPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNhdmF0YXIgbGV0LWF2YXRhcj1cImNvbnRleHQuYXZhdGFyXCI+XHJcbiAgICA8aW1nICpuZ0lmPVwiYXZhdGFyICE9IG51bGxcIiBbc3JjXT1cImF2YXRhciB8IG1hcEF2YXRhclRvU2VydmVyXCIgY2xhc3M9XCJpbi10YWJsZS1hdmF0YXJcIiBhcHBJbWFnZUVycm9yUmVzb2x2ZXI+XHJcbiAgICA8aW1nICpuZ0lmPVwiYXZhdGFyID09IG51bGxcIiBbc3JjXT1cImRlZmF1bHRBdmF0YXJcIiBjbGFzcz1cImluLXRhYmxlLWF2YXRhclwiIGFwcEltYWdlRXJyb3JSZXNvbHZlcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlICNzdGlja2VyIGxldC1jb2RlPVwiY29udGV4dC5hY3RmbGdcIj5cclxuICAgIDxjb3JlLXN0YXR1cy1zdGlja2VyIFtjb2RlXT1cImNvZGVcIiBbaXNUcnVlQ29kZV09XCJ0cnVlXCI+PC9jb3JlLXN0YXR1cy1zdGlja2VyPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPGRpdiBbY2xhc3MuZC1ub25lXT1cIiFzaG93RWRpdEJ1ZmZlclwiPlxyXG4gICAgPGNvcmUtcGFnZS1lZGl0LWxpdGUgW3NlY3Rpb25zXT1cIm11bHRpTW9kZUV4dGVuZGVkU2VjdGlvbnNcIiAob25Gb3JtQ3JlYXRlZCk9XCJvbkVkaXRCdWZmZXJGb3JtQ3JlYXRlZCgkZXZlbnQpXCJcclxuICAgICAgICAoc3VibWl0TG9naWMpPVwib25FZGl0QnVmZmVyU3VibWl0KCRldmVudClcIiAoY2FuY2VsTG9naWMpPVwib25FZGl0QnVmZmVyQ2FuY2VsKCRldmVudClcIj48L2NvcmUtcGFnZS1lZGl0LWxpdGU+XHJcbjwvZGl2PiJdfQ==
481
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1mb3JtLWNvbnRyb2wtc2Vla2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLWZvcm0tY29udHJvbC1zZWVrZXIvY29yZS1mb3JtLWNvbnRyb2wtc2Vla2VyL2NvcmUtZm9ybS1jb250cm9sLXNlZWtlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaGlzdGFmZi1hbHBoYS9zcmMvbGliL2FwcC9saWJyYXJpZXMvY29yZS1mb3JtLWNvbnRyb2wtc2Vla2VyL2NvcmUtZm9ybS1jb250cm9sLXNlZWtlci9jb3JlLWZvcm0tY29udHJvbC1zZWVrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQWMsS0FBSyxFQUFxQixTQUFTLEVBQUUsU0FBUyxFQUF5QixNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xLLE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQ3JELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLCtEQUErRCxDQUFDO0FBQzdHLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRTdGLE9BQU8sRUFBYSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHdEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLG1CQUFtQixFQUFFLGtCQUFrQixFQUEyRCxNQUFNLHVDQUF1QyxDQUFDO0FBRTdLLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGdGQUFnRixDQUFDO0FBQzdILE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGdGQUFnRixDQUFDO0FBQzdILE9BQU8s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LGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFHRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBTUcsd0JBQXdCO3NCQUFoQyxLQUFLO2dCQUNHLHlCQUF5QjtzQkFBakMsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUlxQixnQkFBZ0I7c0JBQTFDLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUNoQixTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBR0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBRUksYUFBYTtzQkFBdEIsTUFBTTtnQkFFaUIsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIGlzRGV2TW9kZSwgVmlld0NoaWxkLCBJbmplY3RvciwgVGVtcGxhdGVSZWYsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENvcmVGb3JtQ29udHJvbEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlLWZvcm0tY29udHJvbC1iYXNlL2NvcmUtZm9ybS1jb250cm9sLWJhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRW51bUNvcmVGb3JtQ29udHJvbFNlZWtlclNvdXJjZVR5cGUgfSBmcm9tICcuLi9FbnVtQ29yZUZvcm1Db250cm9sU2Vla2VyU291cmNlVHlwZSc7XHJcbmltcG9ydCB7IEFsZXJ0U2VydmljZSB9IGZyb20gJy4uLy4uL2FsZXJ0L2FsZXJ0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1zTW9kdWxlLCBOR19WQUxVRV9BQ0NFU1NPUiwgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBJQ29yZUZvcm1Db250cm9sU2Vla2VyRXh0cmFCaW5kaW5nTW9kZWwsIElDb3JlRm9ybVNlY3Rpb24gfSBmcm9tICcuLi8uLi9jb3JlLWZvcm0vY29yZS1mb3JtL2VudW0taW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IElPcmdUcmVlSXRlbSB9IGZyb20gJy4uLy4uL2NvcmUtb3JnLXRyZWUvY29yZS1vcmctdHJlZS9JT3JnVHJlZUl0ZW0nO1xyXG5pbXBvcnQgeyBDb3JlVGFibGVDb21wb25lbnQsIEVDb3JlVGFibGVUb29sQ2xhc3MsIEVDb3JlVGFibGVUb29sQ29kZSwgSUNvcmVUYWJsZVRvb2xDbGlja0V2ZW50RW1pdHRlckRhdGEsIElDb3JlVGFibGVUb29sSXRlbSB9IGZyb20gJy4uLy4uL2NvcmUtdGFibGUvY29yZS10YWJsZS5jb21wb25lbnQnO1xyXG5cclxuaW1wb3J0IHsgQ29yZUVtcGxveWVlU2Vla2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZS1lbXBsb3llZS1zZWVrZXIvY29yZS1lbXBsb3llZS1zZWVrZXIvY29yZS1lbXBsb3llZS1zZWVrZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29yZUNvbnRyYWN0U2Vla2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZS1jb250cmFjdC1zZWVrZXIvY29yZS1jb250cmFjdC1zZWVrZXIvY29yZS1jb250cmFjdC1zZWVrZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29yZVdvcmtpbmdTZWVrZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlLXdvcmtpbmctc2Vla2VyL2NvcmUtd29ya2luZy1zZWVrZXIvY29yZS13b3JraW5nLXNlZWtlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb3JlV2FnZVNlZWtlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtd2FnZS1zZWVrZXIvY29yZS13YWdlLXNlZWtlci9jb3JlLXdhZ2Utc2Vla2VyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvcmVQb3NpdGlvblNlZWtlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtcG9zaXRpb24tc2Vla2VyL2NvcmUtcG9zaXRpb24tc2Vla2VyL2NvcmUtcG9zaXRpb24tc2Vla2VyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEVudW1UcmFuc2xhdGVLZXkgfSBmcm9tIFwiYWxwaGEtZ2xvYmFsLWNvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBNdWx0aUxhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL211bHRpLWxhbmd1YWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSYW5kb21BdmF0YXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcmFuZG9tLWF2YXRhci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvYWxlcnRPcHRpb25zJztcclxuaW1wb3J0IHsgSUNvcmVUYWJsZUNvbHVtbkl0ZW0gfSBmcm9tICcuLi8uLi9jb3JlLXRhYmxlL0lDb3JlVGFibGVDb2x1bW5JdGVtJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlUGlwZSB9IGZyb20gJy4uLy4uLy4uL2FwcC1waXBlcy90cmFuc2xhdGUucGlwZSc7XHJcbmltcG9ydCB7IENvcmVQb3NpdGlvbkNvbmN1cnJlbnRTZWVrZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlLXBvc2l0aW9uLWNvbmN1cnJlbnQtc2Vla2VyL2NvcmUtcG9zaXRpb24tY29uY3VycmVudC1zZWVrZXIvY29yZS1wb3NpdGlvbi1jb25jdXJyZW50LXNlZWtlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb3JlUGFnZUhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtcGFnZS1oZWFkZXIvY29yZS1wYWdlLWhlYWRlci9jb3JlLXBhZ2UtaGVhZGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRvb2x0aXBEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi90b29sdGlwL3Rvb2x0aXAuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQ29yZU9yZ1VuaXRTZWVrZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlLW9yZy11bml0LXNlZWtlci9jb3JlLW9yZy11bml0LXNlZWtlci9jb3JlLW9yZy11bml0LXNlZWtlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNYXBBdmF0YXJUb1NlcnZlclBpcGUgfSBmcm9tICcuLi8uLi8uLi9hcHAtcGlwZXMvbWFwLWF2YXRhci10by1zZXJ2ZXIucGlwZSc7XHJcbmltcG9ydCB7IENvcmVQYWdlRWRpdExpdGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlLXBhZ2UtZWRpdC1saXRlL2NvcmUtcGFnZS1lZGl0LWxpdGUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29yZUpvYlNlZWtlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtam9iLXNlZWtlci9jb3JlLWpvYi1zZWVrZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29yZVN0YXR1c1N0aWNrZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlLXN0YXR1cy1zdGlja2VyL2NvcmUtc3RhdHVzLXN0aWNrZXIvY29yZS1zdGF0dXMtc3RpY2tlci5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjb3JlLWZvcm0tY29udHJvbC1zZWVrZXInLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBUcmFuc2xhdGVQaXBlLFxyXG4gICAgTWFwQXZhdGFyVG9TZXJ2ZXJQaXBlLFxyXG4gICAgQ29yZUpvYlNlZWtlckNvbXBvbmVudCxcclxuICAgIENvcmVQYWdlRWRpdExpdGVDb21wb25lbnQsXHJcbiAgICBDb3JlVGFibGVDb21wb25lbnQsXHJcbiAgICBDb3JlU3RhdHVzU3RpY2tlckNvbXBvbmVudCxcclxuICAgIENvcmVFbXBsb3llZVNlZWtlckNvbXBvbmVudCxcclxuICAgIENvcmVDb250cmFjdFNlZWtlckNvbXBvbmVudCxcclxuICAgIENvcmVXb3JraW5nU2Vla2VyQ29tcG9uZW50LFxyXG4gICAgQ29yZVdhZ2VTZWVrZXJDb21wb25lbnQsXHJcbiAgICBDb3JlT3JnVW5pdFNlZWtlckNvbXBvbmVudCxcclxuICAgIENvcmVQb3NpdGlvblNlZWtlckNvbXBvbmVudCxcclxuICAgIENvcmVQb3NpdGlvbkNvbmN1cnJlbnRTZWVrZXJDb21wb25lbnQsXHJcbiAgICBDb3JlUGFnZUhlYWRlckNvbXBvbmVudCxcclxuICAgIFRvb2x0aXBEaXJlY3RpdmVcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jb3JlLWZvcm0tY29udHJvbC1zZWVrZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NvcmUtZm9ybS1jb250cm9sLXNlZWtlci5jb21wb25lbnQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBDb3JlRm9ybUNvbnRyb2xTZWVrZXJDb21wb25lbnRcclxuICAgIH0sXHJcbiAgICBDb3JlSm9iU2Vla2VyQ29tcG9uZW50LFxyXG4gICAgQ29yZUVtcGxveWVlU2Vla2VyQ29tcG9uZW50LFxyXG4gICAgQ29yZUNvbnRyYWN0U2Vla2VyQ29tcG9uZW50LFxyXG4gICAgQ29yZVdvcmtpbmdTZWVrZXJDb21wb25lbnQsXHJcbiAgICBDb3JlV2FnZVNlZWtlckNvbXBvbmVudCxcclxuICAgIENvcmVQb3NpdGlvblNlZWtlckNvbXBvbmVudCxcclxuICBdXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgQ29yZUZvcm1Db250cm9sU2Vla2VyQ29tcG9uZW50IGV4dGVuZHMgQ29yZUZvcm1Db250cm9sQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuXHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2F2YXRhcicpIGF2YXRhciE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnc3RpY2tlcicpIHN0aWNrZXIhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICBuZ0NvbnRyb2whOiBOZ0NvbnRyb2w7XHJcblxyXG4gIGlzRGV2TW9kZSA9IGlzRGV2TW9kZSgpO1xyXG5cclxuICBsYW5nITogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoKSB0aXRsZSE6IEVudW1UcmFuc2xhdGVLZXk7XHJcbiAgQElucHV0KCkgc2hvd1BhZ2VIZWFkZXIhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHByZURlZmluZWRPdXRlclBhcmFtJCE6IEJlaGF2aW9yU3ViamVjdDxhbnk+O1xyXG4gIEBJbnB1dCgpIGNsaWNrJCE6IEJlaGF2aW9yU3ViamVjdDxhbnk+IHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIGdldEJ5SWRPYmplY3QkITogQmVoYXZpb3JTdWJqZWN0PGFueT47XHJcbiAgQElucHV0KCkgcGFyYW1Nb2RlITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBtdWx0aU1vZGUhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIG9iamVjdExpc3QkITogQmVoYXZpb3JTdWJqZWN0PGFueVtdPjtcclxuICBASW5wdXQoKSBzaG93blNlZWtlckNvbHVtbnMhOiBzdHJpbmdbXTsgLy8gUmVkdWNlIHZpc2libGUgY29sdW1ucyBmcm9tIGJhc2UgY29tcG9uZW50LlxyXG4gIEBJbnB1dCgpIGV4Y2x1ZGVFeGlzdGluZ0xpc3QhOiBib29sZWFuOyAvLyBmcm9tIDIwMjQtMDUtMTBcclxuXHJcbiAgLyogV2hlbiBvYmplY3RzIGdpdmVuIGJ5IHRoZSBzZWVrZXIgZG91YmxlLWNsaWNrL2NoZWNrIGFyZSBpbmRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIGNvbnRyb2wgKi9cclxuICBASW5wdXQoKSBpbmRpcmVjdEJpbmRpbmchOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGJpbmRHcmlkSWRUbyE6IHN0cmluZztcclxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHJcblxyXG4gIC8qIEV4dGVuZGVkIHNpbmNlIDIwMjQtMDMtMjQgKi9cclxuICBASW5wdXQoKSBtdWx0aU1vZGVFeHRlbmRlZENvbHVtbnMhOiBJQ29yZVRhYmxlQ29sdW1uSXRlbVtdO1xyXG4gIEBJbnB1dCgpIG11bHRpTW9kZUV4dGVuZGVkU2VjdGlvbnMhOiBJQ29yZUZvcm1TZWN0aW9uW107XHJcbiAgQElucHV0KCkgZWRpdEJ1ZmZlckRhdGEkITogQmVoYXZpb3JTdWJqZWN0PGFueT47XHJcbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuICAvKiBTVEFSVDogUkVRVUlSRUQgKi9cclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBzZWVrZXJTb3VyY2VUeXBlITogRW51bUNvcmVGb3JtQ29udHJvbFNlZWtlclNvdXJjZVR5cGU7XHJcbiAgQElucHV0KCkgYm91bmRGcm9tITogc3RyaW5nOyAvLyB0YWtlIHRoaXMgZmllbGQgZnJvbSBHZXRCeUlkIHJlc3BvbnNlIGlubmVyQm9keSB0byBiaW5kIHRvIHRoZSB2YWx1ZVxyXG4gIEBJbnB1dCgpIHNob3duRnJvbSE6IHN0cmluZzsgLy8gdGFrZSB0aGlzIGZpZWxkIGZyb20gR2V0QnlJZCByZXNwb25zZSBpbm5lckJvZHkgdG8gYmluZCB0byB0aGUgdGV4dFxyXG4gIC8qIEVORDogUkVRVUlSRUQgd2hlbiBFTVBMT1lFRV9TRUVLRVIgKi9cclxuXHJcbiAgQElucHV0KCkgYWxzb0JpbmRUbyE6IElDb3JlRm9ybUNvbnRyb2xTZWVrZXJFeHRyYUJpbmRpbmdNb2RlbFtdO1xyXG4gIEBJbnB1dCgpIHNlZWtlclZlcmlmeUlnbm9yZSE6IGJvb2xlYW47XHJcblxyXG4gIEBPdXRwdXQoKSBvbkRvdWJsZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicpIGNvbnRhaW5lciE6IEVsZW1lbnRSZWY7XHJcblxyXG4gIHNvdXJjZU9wZW4hOiBib29sZWFuO1xyXG5cclxuICB2YWx1ZVRvU2hvdyE6IHN0cmluZztcclxuICBwbGFjZWhvbGRlciE6IHN0cmluZztcclxuXHJcbiAgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuXHJcbiAgLyogZm9yIG11bHRpTW9kZSAqL1xyXG4gIHBlbmRpbmdTZWxlY3RlZERhdGE6IGFueVtdID0gW107XHJcbiAgc2VsZWN0ZWREYXRhOiBhbnlbXSA9IFtdO1xyXG4gIG11bHRpTW9kZUNvbHVtbnM6IElDb3JlVGFibGVDb2x1bW5JdGVtW10gPSBbXTtcclxuICBzaG93RWRpdEJ1ZmZlciE6IGJvb2xlYW47XHJcbiAgZWRpdEJ1ZmZlckZvcm0hOiBGb3JtR3JvdXA7XHJcbiAgZWRpdGluZ0lkITogbnVtYmVyO1xyXG4gIHRvb2xzOiBJQ29yZVRhYmxlVG9vbEl0ZW1bXSA9IFt7XHJcbiAgICBjb2RlOiBFQ29yZVRhYmxlVG9vbENvZGUuZGVsZXRlLFxyXG4gICAgY2xhc3M6IEVDb3JlVGFibGVUb29sQ2xhc3MuZGVsZXRlLFxyXG4gICAgY2FwdGlvbjogRW51bVRyYW5zbGF0ZUtleS5VSV9DT1JFX0NPTlRST0xfVEFCTEVfVE9PTF9ERUxFVEVcclxuICB9XTtcclxuXHJcbiAgc2hvd0NsZWFySWNvbiE6IGJvb2xlYW47XHJcbiAgZGVmYXVsdEF2YXRhciE6IHN0cmluZztcclxuICBoaWRlRm9vdGVyOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGV4Y2x1ZGVkSWRzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyW10+KFtdKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICBwcml2YXRlIG1sczogTXVsdGlMYW5ndWFnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvcmVKb2JTZWVrZXJDb21wb25lbnQ6IENvcmVKb2JTZWVrZXJDb21wb25lbnQsXHJcbiAgICBwcml2YXRlIGNvcmVFbXBsb3llZVNlZWtlckNvbXBvbmVudDogQ29yZUVtcGxveWVlU2Vla2VyQ29tcG9uZW50LFxyXG4gICAgcHJpdmF0ZSBjb3JlQ29udHJhY3RTZWVrZXJDb21wb25lbnQ6IENvcmVDb250cmFjdFNlZWtlckNvbXBvbmVudCxcclxuICAgIHByaXZhdGUgY29yZVdvcmtpbmdTZWVrZXJDb21wb25lbnQ6IENvcmVXb3JraW5nU2Vla2VyQ29tcG9uZW50LFxyXG4gICAgcHJpdmF0ZSBjb3JlV2FnZVNlZWtlckNvbXBvbmVudDogQ29yZVdhZ2VTZWVrZXJDb21wb25lbnQsXHJcbiAgICBwcml2YXRlIGNvcmVQb3NpdGlvblNlZWtlckNvbXBvbmVudDogQ29yZVBvc2l0aW9uU2Vla2VyQ29tcG9uZW50LFxyXG4gICAgcHJpdmF0ZSByYXM6IFJhbmRvbUF2YXRhclNlcnZpY2VcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLmRlZmF1bHRBdmF0YXIgPSByYXMuZ2V0KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzaWduTXVsdGlNb2RlQ29sdW1ucygpOiB2b2lkIHtcclxuICAgIHN3aXRjaCAodGhpcy5zZWVrZXJTb3VyY2VUeXBlKSB7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVGb3JtQ29udHJvbFNlZWtlclNvdXJjZVR5cGUuSk9CX1NFRUs6XHJcbiAgICAgICAgaWYgKCEhdGhpcy5tdWx0aU1vZGVFeHRlbmRlZENvbHVtbnMpIHtcclxuICAgICAgICAgIHRoaXMubXVsdGlNb2RlQ29sdW1ucyA9IFsuLi50aGlzLmNvcmVKb2JTZWVrZXJDb21wb25lbnQuY29sdW1ucywgLi4udGhpcy5tdWx0aU1vZGVFeHRlbmRlZENvbHVtbnNdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLm11bHRpTW9kZUNvbHVtbnMgPSB0aGlzLmNvcmVKb2JTZWVrZXJDb21wb25lbnQuY29sdW1ucztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghISF0aGlzLm11bHRpTW9kZSkge1xyXG4gICAgICAgICAgdGhpcy5oaWRlRm9vdGVyID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVGb3JtQ29udHJvbFNlZWtlclNvdXJjZVR5cGUuRU1QTE9ZRUVfU0VFSzpcclxuICAgICAgICBpZiAoISF0aGlzLm11bHRpTW9kZUV4dGVuZGVkQ29sdW1ucykge1xyXG4gICAgICAgICAgdGhpcy5tdWx0aU1vZGVDb2x1bW5zID0gWy4uLnRoaXMuY29yZUVtcGxveWVlU2Vla2VyQ29tcG9uZW50LmNvbHVtbnMsIC4uLnRoaXMubXVsdGlNb2RlRXh0ZW5kZWRDb2x1bW5zXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5tdWx0aU1vZGVDb2x1bW5zID0gdGhpcy5jb3JlRW1wbG95ZWVTZWVrZXJDb21wb25lbnQuY29sdW1ucztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghISF0aGlzLm11bHRpTW9kZSkge1xyXG4gICAgICAgICAgdGhpcy5oaWRlRm9vdGVyID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVGb3JtQ29udHJvbFNlZWtlclNvdXJjZVR5cGUuQ09OVFJBQ1RfU0VFSzpcclxuICAgICAgICB0aGlzLm11bHRpTW9kZUNvbHVtbnMgPSB0aGlzLmNvcmVDb250cmFjdFNlZWtlckNvbXBvbmVudC5jb2x1bW5zO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1Db3JlRm9ybUNvbnRyb2xTZWVrZXJTb3VyY2VUeXBlLldPUktJTkdfU0VFSzpcclxuICAgICAgICB0aGlzLm11bHRpTW9kZUNvbHVtbnMgPSB0aGlzLmNvcmVXb3JraW5nU2Vla2VyQ29tcG9uZW50LmNvbHVtbnM7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVGb3JtQ29udHJvbFNlZWtlclNvdXJjZVR5cGUuV0FHRV9TRUVLOlxyXG4gICAgICAgIHRoaXMubXVsdGlNb2RlQ29sdW1ucyA9IHRoaXMuY29yZVdhZ2VTZWVrZXJDb21wb25lbnQuY29sdW1ucztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZUZvcm1Db250cm9sU2Vla2VyU291cmNlVHlwZS5QT1NJVElPTl9TRUVLOlxyXG4gICAgICAgIHRoaXMubXVsdGlNb2RlQ29sdW1ucyA9IHRoaXMuY29yZVBvc2l0aW9uU2Vla2VyQ29tcG9uZW50LmNvbHVtbnM7XHJcbiAgICAgICAgaWYgKCEhIXRoaXMubXVsdGlNb2RlKSB7XHJcbiAgICAgICAgICB0aGlzLmhpZGVGb290ZXIgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZUZvcm1Db250cm9sU2Vla2VyU291cmNlVHlwZS5PUkdBTklaQVRJT05fVU5JVF9TRUVLOlxyXG4gICAgICAgIHRoaXMubXVsdGlNb2RlQ29sdW1ucyA9IFtdO1xyXG4gICAgICAgIGlmICghISF0aGlzLm11bHRpTW9kZSkge1xyXG4gICAgICAgICAgdGhpcy5oaWRlRm9vdGVyID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcblxyXG4gICAgLypcclxuICAgIElmIHdlIHRyeSB0byBpbmplY3QgTmdDb250cm9sIGRpcmVjdGx5IHdpdGhpbiB0aGUgY29uc3RydWN0b3IsIHdlIHdpbGwgZ2V0IGFuIGVycm9yOiDigJxFcnJvcjogTkcwMjAwOiBDaXJjdWxhciBkZXBlbmRlbmN5IGluIERJIGRldGVjdGVk4oCm4oCdLlxyXG4gICAgVGh1cywgd2UgaW5qZWN0IE5nQ29udHJvbCBpbiB0aGUgT25Jbml0IGxpZmVjeWNsZSBob29rIHZpYSBJbmplY3RvciB3aXRob3V0IGFueSBlcnJvci5cclxuICAgICovXHJcbiAgICB0aGlzLm5nQ29udHJvbCA9IHRoaXMuaW5qZWN0b3IuZ2V0KE5nQ29udHJvbCk7XHJcbiAgICB0aGlzLmFzaWduTXVsdGlNb2RlQ29sdW1ucygpO1xyXG5cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuXHJcbiAgICAgIHRoaXMubXVsdGlNb2RlQ29sdW1ucz8ubWFwKGMgPT4ge1xyXG4gICAgICAgIGlmIChjLmZpZWxkID09PSAnYXZhdGFyJyAmJiAhISFjLnRlbXBsYXRlUmVmKSBjLnRlbXBsYXRlUmVmID0gdGhpcy5hdmF0YXJcclxuICAgICAgICBpZiAoYy5maWVsZCA9PT0gJ2FjdGZsZycgJiYgISEhYy50ZW1wbGF0ZVJlZikgYy50ZW1wbGF0ZVJlZiA9IHRoaXMuc3RpY2tlclxyXG4gICAgICB9KVxyXG5cclxuICAgICAgY29uc3QgZWwgPSB0aGlzLmNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudDtcclxuICAgICAgY29uc3QgaGVpZ2h0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xyXG4gICAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1oZWlnaHQnLCAoaGVpZ2h0IHx8IDUwKSArICdweCcpO1xyXG5cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgdGhpcy5tbHMubGFuZyQuc3Vic2NyaWJlKHggPT4gdGhpcy5sYW5nID0geClcclxuICAgICAgKVxyXG5cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgdGhpcy5uZ0NvbnRyb2wuY29udHJvbD8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgIGlmICghISF4KSB0aGlzLnZhbHVlVG9TaG93ID0gXCJcIlxyXG4gICAgICAgIH0pIVxyXG4gICAgICApXHJcblxyXG5cclxuICAgICAgLyogU1RBUlQ6IENIRUNLIElOUFVUUyAqL1xyXG5cclxuXHJcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgIGlmICghISF0aGlzLnNlZWtlclNvdXJjZVR5cGUpIHtcclxuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICAgICBgQ29yZUZvcm1Db250cm9sU2Vla2VyQ29tcG9uZW50IEVycm9yOiBSZXF1aXJlZCBpbnB1dHM6XHJcbiAgICAgICAgICAgICAgICBzZWVrZXJTb3VyY2VUeXBlOiBFbnVtQ29yZUZvcm1Db250cm9sU2Vla2VyU291cmNlVHlwZSAoZm9yICcke3RoaXMubmdDb250cm9sLm5hbWV9JylgXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG5cclxuICAgICAgICAgIGlmICghISF0aGlzLnBhcmFtTW9kZSkge1xyXG5cclxuICAgICAgICAgICAgLy9nZXRCeUlkT2JqZWN0JFxyXG4gICAgICAgICAgICBpZiAoISEhdGhpcy5nZXRCeUlkT2JqZWN0JCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICAgICAgICAgYENvcmVGb3JtQ29udHJvbFNlZWtlckNvbXBvbmVudCBFcnJvcjogUmVxdWlyZWQgaW5wdXRzOlxyXG4gICAgICAgICAgICAgICAgICBnZXRCeUlkT2JqZWN0JDogQmVoYXZpb3JTdWJqZWN0Jmx0O2FueSZndDsgKGZvciAnJHt0aGlzLm5nQ29udHJvbC5uYW1lfScpYFxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoISEhdGhpcy5ib3VuZEZyb20pIHtcclxuICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgICAgICAgYEFsbCBfU0VFS0VSIGNvbnRyb2xzIHJlcXVpcmUgaW5wdXQ6XHJcbiAgICAgICAgICAgICAgICAgICAgYm91bmRGcm9tOiBzdHJpbmc7IChmb3IgJyR7dGhpcy5uZ0NvbnRyb2wubmFtZX0nKWAsXHJcbiAgICAgICAgICAgICAgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnNcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICghISF0aGlzLnNob3duRnJvbSkge1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgICBgQWxsIF9TRUVLRVIgY29udHJvbHMgcmVxdWlyZSBpbnB1dDpcclxuICAgICAgICAgICAgICAgICAgICBzaG93bkZyb206IHN0cmluZzsgKGZvciAnJHt0aGlzLm5nQ29udHJvbC5uYW1lfScpYCxcclxuICAgICAgICAgICAgICBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9uc1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmICghIXRoaXMuaW5kaXJlY3RCaW5kaW5nKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5iaW5kR3JpZElkVG8pIHtcclxuICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgICAgIGBDb3JlRm9ybUNvbnRyb2xTZWVrZXJDb21wb25lbnQgRXJyb3I6IE7hur91IGluZGlyZWN0QmluZGluZyA9IHRydWUsIGLhuq90IGJ14buZYyBwaOG6o2kgY8OzIHRow6ptIHRodeG7mWMgdMOtbmggYmluZEdyaWRJZFRvICh0csaw4budbmcgJyR7dGhpcy5uZ0NvbnRyb2wubmFtZX0nKWBcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuXHJcbiAgICAgIC8qIEVORDogQ0hFQ0sgSU5QVVRTICovXHJcblxyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLmdldEJ5SWRPYmplY3QkPy5zdWJzY3JpYmUoeCA9PiB7XHJcblxyXG4gICAgICAgICAgaWYgKCEheCkge1xyXG4gICAgICAgICAgICBpZiAoISEhdGhpcy5tdWx0aU1vZGUpIHtcclxuICAgICAgICAgICAgICB0aGlzLnZhbHVlVG9TaG93ID0geFt0aGlzLnNob3duRnJvbV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICghISF0aGlzLm11bHRpTW9kZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMudmFsdWVUb1Nob3cgPSBcIlwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG5cclxuICAgICAgaWYgKCEhdGhpcy5vYmplY3RMaXN0JCkge1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgdGhpcy5vYmplY3RMaXN0JC5zdWJzY3JpYmUoeCA9PiB0aGlzLnNlbGVjdGVkRGF0YSA9IHgpXHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcblxyXG4gICAgfSlcclxuXHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMubWFwKHggPT4geD8udW5zdWJzY3JpYmUoKSlcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIHdyaXRlVmFsdWUob2JqOiBhbnkpOiB2b2lkIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy52YWx1ZSA9IG9iaik7XHJcbiAgICBpZiAoISF0aGlzLm11bHRpTW9kZSkge1xyXG4gICAgICBjb25zb2xlLmdyb3VwKCdXcml0ZSB2YWx1ZSBmb3IgJyArIHRoaXMubmdDb250cm9sLm5hbWUpO1xyXG4gICAgICBjb25zb2xlLmxvZyhcInRoaXMubXVsdGlNb2RlQ29sdW1uc1wiLCB0aGlzLm11bHRpTW9kZUNvbHVtbnMpXHJcbiAgICAgIGNvbnNvbGUubG9nKCdUbyBkbzogQXNzaWduIGFwaSByZXMgdG8gdGhlIHNlbGVjdGVkRGF0YScpXHJcbiAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2xpY2tTZWVrKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jbGljayQ/Lm5leHQodHJ1ZSk7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSByZXR1cm47XHJcbiAgICB0aGlzLnNvdXJjZU9wZW4gPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgb25TZWxlY3QoKTogdm9pZCB7XHJcbiAgICBpZiAoISF0aGlzLm11bHRpTW9kZSkge1xyXG5cclxuICAgICAgaWYgKCF0aGlzLmluZGlyZWN0QmluZGluZykge1xyXG4gICAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMucGVuZGluZ1NlbGVjdGVkRGF0YS5maWx0ZXIoeCA9PiB0aGlzLnNlbGVjdGVkRGF0YS5maWx0ZXIoeSA9PiB5LmlkID09PSB4LklkKS5sZW5ndGggPT09IDApXHJcbiAgICAgICAgY29uc3QgbmV3U2VsZWN0ZWREYXRhID0gWy4uLnRoaXMuc2VsZWN0ZWREYXRhLCAuLi5maWx0ZXJdO1xyXG4gICAgICAgIGNvbnN0IG5ld1NlbGVjdGVkSWRzOiBhbnlbXSA9IFtdO1xyXG4gICAgICAgIG5ld1NlbGVjdGVkRGF0YS5tYXAoeCA9PiBuZXdTZWxlY3RlZElkcy5wdXNoKHguaWQpKVxyXG4gICAgICAgIHRoaXMub2JqZWN0TGlzdCQubmV4dChuZXdTZWxlY3RlZERhdGEpO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSBuZXdTZWxlY3RlZElkcztcclxuICAgICAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlKG5ld1NlbGVjdGVkSWRzKVxyXG4gICAgICAgIHRoaXMucGVuZGluZ1NlbGVjdGVkRGF0YSA9IFtdO1xyXG4gICAgICAgIHRoaXMuc291cmNlT3BlbiA9IGZhbHNlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucGVuZGluZ1NlbGVjdGVkRGF0YS5tYXAoKHgsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAvLyBnw6FuIGlkIGPhu6dhIGzGsOG7m2kgbmd14buTbiB2w6BvIGPhu5l0IGPhuqduIHRoaeG6v3RcclxuICAgICAgICAgIHhbdGhpcy5iaW5kR3JpZElkVG9dID0geC5pZFxyXG4gICAgICAgICAgLy8gc2F1IMSRw7MgaG/DoW4gaWQgbsOgeSBzYW5nIGdpw6EgdHLhu4sg4bqjbywgZWFjaCBcInhcIiBpdGVtIG11c3QgaGF2ZSBhbiB1bmlxdWUgaWRcclxuICAgICAgICAgIHguaWQgPSAobmV3IERhdGUoKS5nZXRUaW1lKCkgLSBpbmRleCkgKiAoLTEpIC8vICogKC0xKTogdG8gYnlwYXNzIChsb29zaW5nIG9mL2NvbmZ1c2luZyB3aXRoKSBleGlzdGluZyBpbmZvcm1hdGlvblxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgY29uc3QgbmV3U2VsZWN0ZWREYXRhID0gWy4uLnRoaXMuc2VsZWN0ZWREYXRhLCAuLi50aGlzLnBlbmRpbmdTZWxlY3RlZERhdGFdO1xyXG4gICAgICAgIGNvbnN0IG5ld1NlbGVjdGVkSWRzOiBhbnlbXSA9IFtdO1xyXG4gICAgICAgIG5ld1NlbGVjdGVkRGF0YS5tYXAoeCA9PiBuZXdTZWxlY3RlZElkcy5wdXNoKHguaWQpKVxyXG4gICAgICAgIHRoaXMub2JqZWN0TGlzdCQubmV4dChuZXdTZWxlY3RlZERhdGEpO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSBuZXdTZWxlY3RlZElkcztcclxuICAgICAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlKG5ld1NlbGVjdGVkRGF0YSlcclxuICAgICAgICB0aGlzLnBlbmRpbmdTZWxlY3RlZERhdGEgPSBbXTtcclxuICAgICAgICB0aGlzLnNvdXJjZU9wZW4gPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DYW5jZWwoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNvdXJjZU9wZW4gPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG9uUm93RG91YmxlQ2xpY2soZTogYW55KSB7XHJcbiAgICB0aGlzLndyaXRlVmFsdWUoZVt0aGlzLmJvdW5kRnJvbV0pO1xyXG4gICAgdGhpcy5vbkNoYW5nZShlW3RoaXMuYm91bmRGcm9tXSk7XHJcbiAgICB0aGlzLnZhbHVlVG9TaG93ID0gZVt0aGlzLnNob3duRnJvbV07XHJcbiAgICB0aGlzLnNvdXJjZU9wZW4gPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoISF0aGlzLmFsc29CaW5kVG8pIHtcclxuICAgICAgY29uc3QgZm9ybSA9IHRoaXMubmdDb250cm9sLmNvbnRyb2w/LnBhcmVudDtcclxuICAgICAgaWYgKGZvcm0pIHtcclxuICAgICAgICB0aGlzLmFsc29CaW5kVG8ubWFwKCh4LCBpbmRleCkgPT4ge1xyXG5cclxuICAgICAgICAgIC8qXHJcbiAgICAgICAgICBzdGFydDogVmFsaWRhdGUgRGV2ZWxvcGVyIGlucHV0XHJcbiAgICAgICAgICAqL1xyXG4gICAgICAgICAgaWYgKGlzRGV2TW9kZSgpICYmIGluZGV4ID09PSAwKSB7XHJcbiAgICAgICAgICAgIGlmICghISF4LnRha2VGcm9tKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXCJ0YWtlRnJvbSB3YXMgdW5kZWZpbmVkXCIsIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmICghISFlW3gudGFrZUZyb21dKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihgWW91IGV4cGVjdCBhIHZhbHVlIGZyb20gJyR7eC50YWtlRnJvbX0nLCBidXQgdGhlIHNlZWtlciBncmlkIGRvZXMgbm90IGhhdmUgdGhpcyBjb2x1bW5gLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucylcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCEhIXguYmluZFRvKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXCJiaW5kVG8gd2FzIHVuZGVmaW5lZFwiLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucylcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBpZiAoISEhZm9ybS5nZXQoeC5iaW5kVG8pKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihgWW91IGV4cGVjdCB0byBiaW5kIHZhbHVlIHRvICcke3guYmluZFRvfScsIGJ1dCB0aGUgZm9ybSBncm91cCBkb2VzIG5vdCBoYXZlIHRoaXMgY29udHJvbGAsIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8qXHJcbiAgICAgICAgICBlbmQ6IFZhbGlkYXRlIERldmVsb3BlciBpbnB1dFxyXG4gICAgICAgICAgKi9cclxuXHJcbiAgICAgICAgICBmb3JtLmdldCh4LmJpbmRUbyk/LnNldFZhbHVlKGVbeC50YWtlRnJvbV0pO1xyXG4gICAgICAgICAgZm9ybS5nZXQoeC5iaW5kVG8pPy5tYXJrQXNUb3VjaGVkO1xyXG4gICAgICAgICAgZm9ybS5nZXQoeC5iaW5kVG8pPy5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uSXRlbURvdWJsZUNsaWNrKGU6IElPcmdUcmVlSXRlbSkge1xyXG4gICAgdGhpcy53cml0ZVZhbHVlKGUuaWQpO1xyXG4gICAgdGhpcy52YWx1ZVRvU2hvdyA9IGUudHJlZSRUaXRsZTtcclxuICAgIHRoaXMub25DaGFuZ2UoZS5pZCk7XHJcbiAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgIHRoaXMuc291cmNlT3BlbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5vbkRvdWJsZUNsaWNrLmVtaXQoZSk7XHJcbiAgfVxyXG5cclxuICBvbkNvbHVtbnNJbml0KGU6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKCEhdGhpcy5tdWx0aU1vZGVFeHRlbmRlZENvbHVtbnMpIHtcclxuICAgICAgdGhpcy5tdWx0aU1vZGVDb2x1bW5zID0gWy4uLmUsIC4uLnRoaXMubXVsdGlNb2RlRXh0ZW5kZWRDb2x1bW5zXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubXVsdGlNb2RlQ29sdW1ucyA9IGU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdGVkRGF0YUNoYW5nZShlOiBhbnkpIHtcclxuICAgIGlmICghIXRoaXMubXVsdGlNb2RlRXh0ZW5kZWRDb2x1bW5zKSB7XHJcbiAgICAgIHRoaXMubXVsdGlNb2RlQ29sdW1ucyA9IFsuLi5lLmNvbHVtbnMsIC4uLnRoaXMubXVsdGlNb2RlRXh0ZW5kZWRDb2x1bW5zXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubXVsdGlNb2RlQ29sdW1ucyA9IGUuY29sdW1ucztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnBlbmRpbmdTZWxlY3RlZERhdGEgPSBlLmRhdGE7XHJcbiAgfVxyXG5cclxuICBvblRvb2xDbGljayhlOiBJQ29yZVRhYmxlVG9vbENsaWNrRXZlbnRFbWl0dGVyRGF0YSkge1xyXG4gICAgaWYgKGUuY29kZSA9PT0gRUNvcmVUYWJsZVRvb2xDb2RlLmRlbGV0ZSkge1xyXG4gICAgICBjb25zdCBuZXdPYmplY3RMaXN0ID0gdGhpcy5vYmplY3RMaXN0JC52YWx1ZS5maWx0ZXIoeCA9PiB4LmlkICE9PSBlLmlkKVxyXG4gICAgICBjb25zdCBuZXdJZHMgPSB0aGlzLnZhbHVlLmZpbHRlcigoeDogYW55KSA9PiB4ICE9PSBlLmlkKVxyXG5cclxuICAgICAgdGhpcy52YWx1ZSA9IG5ld0lkcztcclxuICAgICAgdGhpcy5vYmplY3RMaXN0JC5uZXh0KG5ld09iamVjdExpc3QpO1xyXG5cclxuICAgICAgdGhpcy5vbkNoYW5nZShuZXdJZHMpO1xyXG4gICAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2xpY2tDbGVhcigpIHtcclxuXHJcbiAgICB0aGlzLndyaXRlVmFsdWUobnVsbCk7XHJcbiAgICB0aGlzLm9uQ2hhbmdlKG51bGwpO1xyXG4gICAgdGhpcy52YWx1ZVRvU2hvdyA9IFwiXCI7XHJcblxyXG4gIH1cclxuXHJcbiAgb25TZWxlY3RlZERhdGFSb3dEb3VibGVDbGljayhlOiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKFwiR2l2ZW4gcm93IGRhdGE6IFwiLCBlKVxyXG4gICAgaWYgKCFlLmlkKSB7XHJcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFwiTm8gJ2lkJyBjb2x1bW5zIGZvdW5kIG9yIGN1cnJlbnQgaWQgd2FzIG51bGxcIiwgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5lZGl0QnVmZmVyRm9ybT8uZ2V0KCdpZCcpPy5wYXRjaFZhbHVlKGUuaWQpXHJcbiAgICB9IGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKGV4Lm1lc3NhZ2UsIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCEhdGhpcy5tdWx0aU1vZGVFeHRlbmRlZENvbHVtbnMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMubXVsdGlNb2RlRXh0ZW5kZWRDb2x1bW5zLm1hcCh4ID0+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgdGhpcy5lZGl0QnVmZmVyRm9ybT8uZ2V0KHguZmllbGQpPy5wYXRjaFZhbHVlKGVbeC5maWVsZF0pXHJcbiAgICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uOiBhbnkpIHtcclxuICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihleGNlcHRpb24ubWVzc2FnZSwgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgdHJ5IHtcclxuICAgICAgICB0aGlzLmVkaXRpbmdJZCA9IGUuaWQ7XHJcbiAgICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbjogYW55KSB7XHJcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihleGNlcHRpb24ubWVzc2FnZSwgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zaG93RWRpdEJ1ZmZlciA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkVkaXRCdWZmZXJTdWJtaXQoZTogYW55KSB7XHJcbiAgICB2YXIgZm9ybURhdGEgPSB0aGlzLmVkaXRCdWZmZXJGb3JtLmdldFJhd1ZhbHVlKCk7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLnNlbGVjdGVkRGF0YT8uZmlsdGVyKHggPT4geC5pZCA9PT0gdGhpcy5lZGl0aW5nSWQpO1xyXG4gICAgICBpZiAoZmlsdGVyPy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICB0aGlzLm11bHRpTW9kZUV4dGVuZGVkQ29sdW1ucz8ubWFwKGMgPT4ge1xyXG4gICAgICAgICAgZmlsdGVyWzBdW2MuZmllbGRdID0gZm9ybURhdGFbYy5maWVsZF07XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmVkaXRCdWZmZXJEYXRhJC5uZXh0KGZvcm1EYXRhKTtcclxuICAgICAgdGhpcy5zaG93RWRpdEJ1ZmZlciA9IGZhbHNlO1xyXG4gICAgfSBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhleCk7XHJcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoZXgubWVzc2FnZSB8fCAnQW4gZXJyb3Igb2NjdXJlZCB3aGlsZSB0cnlpbmcgdG8gdXBkYXRlIHNlbGVjdGVkRGF0YScsIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkVkaXRCdWZmZXJDYW5jZWwoZTogYW55KSB7XHJcbiAgICB0aGlzLnNob3dFZGl0QnVmZmVyID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBvbkVkaXRCdWZmZXJGb3JtQ3JlYXRlZChlOiBGb3JtR3JvdXApIHtcclxuICAgIHRoaXMuZWRpdEJ1ZmZlckZvcm0gPSBlO1xyXG4gIH1cclxuXHJcbn0iLCI8ZGl2ICNjb250YWluZXIgY2xhc3M9XCJjb3JlLWZvcm0tY29udHJvbC1zZWVrZXItY29udGFpbmVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtd3JhcHBlclwiIFtjbGFzcy5kLW5vbmVdPVwiISFtdWx0aU1vZGVcIj5cclxuICAgICAgICA8bGFiZWwgI3Nob3duVGV4dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwidGV4dCBmb3JtLWNvbnRyb2xcIiBbY2xhc3MuZm9ybS1jb250cm9sLWRpc2FibGVkXT1cImRpc2FibGVkXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIFthcHBUb29sdGlwXT1cInZhbHVlVG9TaG93XCI+e3sgdmFsdWVUb1Nob3cgfX08L3NwYW4+XHJcbiAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICBAaWYgKCFtdWx0aU1vZGUpIHtcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2xlYXItaWNvbi13cmFwcGVyXCIgW2NsYXNzLmQtbm9uZV09XCIhIWRpc2FibGVkIHx8ICEhIXZhbHVlXCIgKGNsaWNrKT1cIm9uQ2xpY2tDbGVhcigpXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LXdyYXBwZXJcIiBbYXBwVG9vbHRpcF09XCInVUkuQ09SRV9DT05UT0xfQ09NTU9OX0NMRUFSJyB8IHRyYW5zbGF0ZTogbGFuZ1wiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmZWF0aGVyLXhcIj48L2k+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH1cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInNlZWtlci1pY29uLXdyYXBwZXJcIiBbY2xhc3MuZm9ybS1jb250cm9sLWRpc2FibGVkXT1cImRpc2FibGVkXCIgW2NsYXNzLm11bHRpLW1vZGVdPVwiISFtdWx0aU1vZGVcIlxyXG4gICAgICAgIChjbGljayk9XCJvbkNsaWNrU2VlaygpXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtd3JhcHBlclwiIFtjbGFzcy5mb3JtLWNvbnRyb2wtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmZWF0aGVyLXNlYXJjaFwiPjwvaT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgQGlmICghIW11bHRpTW9kZSkge1xyXG4gICAgPGRpdiBjbGFzcz1cImNvcmUtdGFiYmUtd3JhcHBlclwiPlxyXG4gICAgICAgIDxjb3JlLXRhYmxlIFtjb2x1bW5zXT1cIm11bHRpTW9kZUNvbHVtbnNcIiBbZGF0YV09XCJzZWxlY3RlZERhdGFcIiBbc2hvd1Rvb2xzXT1cIiEhIWRpc2FibGVkXCIgW3Rvb2xzXT1cInRvb2xzXCJcclxuICAgICAgICAgICAgW3NlYXJjaFN3aXRjaERpc2FibGVkXT1cInRydWVcIiAob25Ub29sQ2xpY2spPVwib25Ub29sQ2xpY2soJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIChvblJvd0RvdWJsZUNsaWNrKT1cIm9uU2VsZWN0ZWREYXRhUm93RG91YmxlQ2xpY2soJGV2ZW50KVwiPjwvY29yZS10YWJsZT5cclxuICAgIDwvZGl2PlxyXG4gICAgfVxyXG5cclxuICAgIEBpZiAoISFzb3VyY2VPcGVuKSB7XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlci1wYW5lbFwiPlxyXG4gICAgICAgICAgICAgICAgPGNvcmUtcGFnZS1oZWFkZXIgW3RpdGxlXT1cInRpdGxlXCIgW2hpZGVCdXR0b25Hcm91cF09XCJ0cnVlXCIgKm5nSWY9XCJzaG93UGFnZUhlYWRlclwiPjwvY29yZS1wYWdlLWhlYWRlcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzb3VyY2UtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZlYXRoZXIteFwiIChjbGljayk9XCJvbkNhbmNlbCgpXCJcclxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZC1ibG9ja109XCJzZWVrZXJTb3VyY2VUeXBlPT09J09SR0FOSVpBVElPTl9VTklUX1NFRUsnXCI+PC9pPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICBAc3dpdGNoIChzZWVrZXJTb3VyY2VUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICBAY2FzZSAoJ0pPQl9TRUVLJykge1xyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImpvYlNlZWtcIj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgQGNhc2UgKCdFTVBMT1lFRV9TRUVLJykge1xyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImVtcGxveWVlU2Vla1wiPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBAY2FzZSAoJ0NPTlRSQUNUX1NFRUsnKSB7XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udHJhY3RTZWVrXCI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIEBjYXNlICgnV09SS0lOR19TRUVLJykge1xyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIndvcmtpbmdTZWVrXCI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIEBjYXNlICgnV0FHRV9TRUVLJykge1xyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIndhZ2VTZWVrXCI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIEBjYXNlICgnT1JHQU5JWkFUSU9OX1VOSVRfU0VFSycpIHtcclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJvcmdhbml6YXRpb25Vbml0U2Vla1wiPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBAY2FzZSAoJ1BPU0lUSU9OX1NFRUsnKSB7XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicG9zaXRpb25TZWVrXCI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIEBjYXNlICgnUE9TSVRJT05fQ09OQ1VSUkVOVF9TRUVLJykge1xyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInBvc2l0aW9uQ29uY3VycmVudFNlZWtcIj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICBAaWYgKCFoaWRlRm9vdGVyKSB7XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgtZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgQGlmICghIXBlbmRpbmdTZWxlY3RlZERhdGE/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uU2VsZWN0KClcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnVUlfQ09SRV9DT05GSVJNX0RJQUxPR19CVVRUT05fU0VMRUNUJyB8IHRyYW5zbGF0ZTogbGFuZyB9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnVUlfQ09SRV9DT05GSVJNX0RJQUxPR19CVVRUT05fQ0FOQ0VMJyB8IHRyYW5zbGF0ZTogbGFuZyB9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICB9XHJcblxyXG48L2Rpdj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjam9iU2Vlaz5cclxuICAgIDxjb3JlLWpvYi1zZWVrZXIgW3ByZURlZmluZWRPdXRlclBhcmFtJF09XCJwcmVEZWZpbmVkT3V0ZXJQYXJhbSRcIiBbbXVsdGlNb2RlXT1cIm11bHRpTW9kZVwiIFtleGNsdWRlZElkcyRdPVwiZXhjbHVkZWRJZHMkXCJcclxuICAgICAgICAocm93RG91YmxlQ2xpY2spPVwib25Sb3dEb3VibGVDbGljaygkZXZlbnQpXCIgKGNvbHVtbnNJbml0KT1cIm9uQ29sdW1uc0luaXQoJGV2ZW50KVwiXHJcbiAgICAgICAgKHNlbGVjdGVkRGF0YUNoYW5nZSk9XCJvblNlbGVjdGVkRGF0YUNoYW5nZSgkZXZlbnQpXCI+PC9jb3JlLWpvYi1zZWVrZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2VtcGxveWVlU2Vlaz5cclxuICAgIDxjb3JlLWVtcGxveWVlLXNlZWtlciBbcHJlRGVmaW5lZE91dGVyUGFyYW0kXT1cInByZURlZmluZWRPdXRlclBhcmFtJFwiIFttdWx0aU1vZGVdPVwibXVsdGlNb2RlXCIgW2V4Y2x1ZGVkSWRzJF09XCJleGNsdWRlZElkcyRcIlxyXG4gICAgICAgIChyb3dEb3VibGVDbGljayk9XCJvblJvd0RvdWJsZUNsaWNrKCRldmVudClcIiAoY29sdW1uc0luaXQpPVwib25Db2x1bW5zSW5pdCgkZXZlbnQpXCJcclxuICAgICAgICAoc2VsZWN0ZWREYXRhQ2hhbmdlKT1cIm9uU2VsZWN0ZWREYXRhQ2hhbmdlKCRldmVudClcIj48L2NvcmUtZW1wbG95ZWUtc2Vla2VyPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNjb250cmFjdFNlZWs+XHJcbiAgICA8Y29yZS1jb250cmFjdC1zZWVrZXIgW3ByZURlZmluZWRPdXRlclBhcmFtJF09XCJwcmVEZWZpbmVkT3V0ZXJQYXJhbSRcIiBbbXVsdGlNb2RlXT1cIm11bHRpTW9kZVwiIFtleGNsdWRlZElkcyRdPVwiZXhjbHVkZWRJZHMkXCJcclxuICAgICAgICAocm93RG91YmxlQ2xpY2spPVwib25Sb3dEb3VibGVDbGljaygkZXZlbnQpXCIgKGNvbHVtbnNJbml0KT1cIm9uQ29sdW1uc0luaXQoJGV2ZW50KVwiXHJcbiAgICAgICAgKHNlbGVjdGVkRGF0YUNoYW5nZSk9XCJvblNlbGVjdGVkRGF0YUNoYW5nZSgkZXZlbnQpXCI+PC9jb3JlLWNvbnRyYWN0LXNlZWtlcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjd29ya2luZ1NlZWs+XHJcbiAgICA8Y29yZS13b3JraW5nLXNlZWtlciBbcHJlRGVmaW5lZE91dGVyUGFyYW0kXT1cInByZURlZmluZWRPdXRlclBhcmFtJFwiIFttdWx0aU1vZGVdPVwibXVsdGlNb2RlXCIgW2V4Y2x1ZGVkSWRzJF09XCJleGNsdWRlZElkcyRcIlxyXG4gICAgICAgIChyb3dEb3VibGVDbGljayk9XCJvblJvd0RvdWJsZUNsaWNrKCRldmVudClcIiAoY29sdW1uc0luaXQpPVwib25Db2x1bW5zSW5pdCgkZXZlbnQpXCJcclxuICAgICAgICAoc2VsZWN0ZWREYXRhQ2hhbmdlKT1cIm9uU2VsZWN0ZWREYXRhQ2hhbmdlKCRldmVudClcIj48L2NvcmUtd29ya2luZy1zZWVrZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3dhZ2VTZWVrPlxyXG4gICAgPGNvcmUtd2FnZS1zZWVrZXIgW3ByZURlZmluZWRPdXRlclBhcmFtJF09XCJwcmVEZWZpbmVkT3V0ZXJQYXJhbSRcIiBbbXVsdGlNb2RlXT1cIm11bHRpTW9kZVwiIFtleGNsdWRlZElkcyRdPVwiZXhjbHVkZWRJZHMkXCJcclxuICAgICAgICAocm93RG91YmxlQ2xpY2spPVwib25Sb3dEb3VibGVDbGljaygkZXZlbnQpXCIgKGNvbHVtbnNJbml0KT1cIm9uQ29sdW1uc0luaXQoJGV2ZW50KVwiXHJcbiAgICAgICAgKHNlbGVjdGVkRGF0YUNoYW5nZSk9XCJvblNlbGVjdGVkRGF0YUNoYW5nZSgkZXZlbnQpXCI+PC9jb3JlLXdhZ2Utc2Vla2VyPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNwb3NpdGlvblNlZWs+XHJcbiAgICA8Y29yZS1wb3NpdGlvbi1zZWVrZXIgW3ByZURlZmluZWRPdXRlclBhcmFtJF09XCJwcmVEZWZpbmVkT3V0ZXJQYXJhbSRcIiBbbXVsdGlNb2RlXT1cIm11bHRpTW9kZVwiIFtleGNsdWRlZElkcyRdPVwiZXhjbHVkZWRJZHMkXCJcclxuICAgICAgICBbc2Vla2VyVmVyaWZ5SWdub3JlXT1cInNlZWtlclZlcmlmeUlnbm9yZVwiIChyb3dEb3VibGVDbGljayk9XCJvblJvd0RvdWJsZUNsaWNrKCRldmVudClcIlxyXG4gICAgICAgIChjb2x1bW5zSW5pdCk9XCJvbkNvbHVtbnNJbml0KCRldmVudClcIlxyXG4gICAgICAgIChzZWxlY3RlZERhdGFDaGFuZ2UpPVwib25TZWxlY3RlZERhdGFDaGFuZ2UoJGV2ZW50KVwiPjwvY29yZS1wb3NpdGlvbi1zZWVrZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3Bvc2l0aW9uQ29uY3VycmVudFNlZWs+XHJcbiAgICA8Y29yZS1wb3NpdGlvbi1jb25jdXJyZW50LXNlZWtlciBbcHJlRGVmaW5lZE91dGVyUGFyYW0kXT1cInByZURlZmluZWRPdXRlclBhcmFtJFwiIFttdWx0aU1vZGVdPVwibXVsdGlNb2RlXCIgW2V4Y2x1ZGVkSWRzJF09XCJleGNsdWRlZElkcyRcIlxyXG4gICAgICAgIChyb3dEb3VibGVDbGljayk9XCJvblJvd0RvdWJsZUNsaWNrKCRldmVudClcIiAoY29sdW1uc0luaXQpPVwib25Db2x1bW5zSW5pdCgkZXZlbnQpXCJcclxuICAgICAgICAoc2VsZWN0ZWREYXRhQ2hhbmdlKT1cIm9uU2VsZWN0ZWREYXRhQ2hhbmdlKCRldmVudClcIj48L2NvcmUtcG9zaXRpb24tY29uY3VycmVudC1zZWVrZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI29yZ2FuaXphdGlvblVuaXRTZWVrPlxyXG4gICAgPGNvcmUtb3JnLXVuaXQtc2Vla2VyIFtleGNsdWRlZElkcyRdPVwiZXhjbHVkZWRJZHMkXCIgKGl0ZW1Eb3VibGVDbGljayk9XCJvbkl0ZW1Eb3VibGVDbGljaygkZXZlbnQpXCI+PC9jb3JlLW9yZy11bml0LXNlZWtlcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjYXZhdGFyIGxldC1hdmF0YXI9XCJjb250ZXh0LmF2YXRhclwiPlxyXG4gICAgPGltZyAqbmdJZj1cImF2YXRhciAhPSBudWxsXCIgW3NyY109XCJhdmF0YXIgfCBtYXBBdmF0YXJUb1NlcnZlclwiIGNsYXNzPVwiaW4tdGFibGUtYXZhdGFyXCIgYXBwSW1hZ2VFcnJvclJlc29sdmVyPlxyXG4gICAgPGltZyAqbmdJZj1cImF2YXRhciA9PSBudWxsXCIgW3NyY109XCJkZWZhdWx0QXZhdGFyXCIgY2xhc3M9XCJpbi10YWJsZS1hdmF0YXJcIiBhcHBJbWFnZUVycm9yUmVzb2x2ZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjxuZy10ZW1wbGF0ZSAjc3RpY2tlciBsZXQtY29kZT1cImNvbnRleHQuYWN0ZmxnXCI+XHJcbiAgICA8Y29yZS1zdGF0dXMtc3RpY2tlciBbY29kZV09XCJjb2RlXCIgW2lzVHJ1ZUNvZGVdPVwidHJ1ZVwiPjwvY29yZS1zdGF0dXMtc3RpY2tlcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxkaXYgW2NsYXNzLmQtbm9uZV09XCIhc2hvd0VkaXRCdWZmZXJcIj5cclxuICAgIDxjb3JlLXBhZ2UtZWRpdC1saXRlIFtzZWN0aW9uc109XCJtdWx0aU1vZGVFeHRlbmRlZFNlY3Rpb25zXCIgKG9uRm9ybUNyZWF0ZWQpPVwib25FZGl0QnVmZmVyRm9ybUNyZWF0ZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgKHN1Ym1pdExvZ2ljKT1cIm9uRWRpdEJ1ZmZlclN1Ym1pdCgkZXZlbnQpXCIgKGNhbmNlbExvZ2ljKT1cIm9uRWRpdEJ1ZmZlckNhbmNlbCgkZXZlbnQpXCI+PC9jb3JlLXBhZ2UtZWRpdC1saXRlPlxyXG48L2Rpdj4iXX0=
@@ -1,5 +1,6 @@
1
1
  import { Component, EventEmitter, Input, Output, isDevMode } from '@angular/core';
2
2
  import { JobComponent } from '../job/job.component';
3
+ import { BehaviorSubject } from 'rxjs';
3
4
  import { EnumTranslateKey } from 'alpha-global-constants';
4
5
  import { CorePageListComponent } from '../core-page-list/core-page-list.component';
5
6
  import { CoreStatusStickerComponent } from '../core-status-sticker/core-status-sticker/core-status-sticker.component';
@@ -7,6 +8,7 @@ import * as i0 from "@angular/core";
7
8
  export class CoreJobSeekerComponent extends JobComponent {
8
9
  constructor() {
9
10
  super(...arguments);
11
+ this.excludedIds$ = new BehaviorSubject([]);
10
12
  this.rowDoubleClick = new EventEmitter();
11
13
  this.selectedIdsChange = new EventEmitter();
12
14
  this.selectedDataChange = new EventEmitter();
@@ -44,7 +46,8 @@ export class CoreJobSeekerComponent extends JobComponent {
44
46
  });
45
47
  }
46
48
  onRowDoubleClick(e) {
47
- this.rowDoubleClick.emit(e);
49
+ if (!this.multiMode)
50
+ this.rowDoubleClick.emit(e);
48
51
  }
49
52
  onSelectedIdsChange(e) {
50
53
  this.selectedIdsChange.emit(e);
@@ -56,18 +59,20 @@ export class CoreJobSeekerComponent extends JobComponent {
56
59
  });
57
60
  }
58
61
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CoreJobSeekerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
59
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.3", type: CoreJobSeekerComponent, isStandalone: true, selector: "core-job-seeker", inputs: { multiMode: "multiMode", preDefinedOuterParam$: "preDefinedOuterParam$" }, outputs: { rowDoubleClick: "rowDoubleClick", selectedIdsChange: "selectedIdsChange", selectedDataChange: "selectedDataChange", columnsInit: "columnsInit" }, usesInheritance: true, ngImport: i0, template: "<div class=\"core-job-seeker-container\">\r\n @if (!!sticker) {\r\n <core-page-list [hideCheck]=\"!!!multiMode\" [height]=\"corePageListHeight\" [apiDefinition]=\"apiDefinition\"\r\n [columns]=\"columns\" [editRoute]=\"editRoute\" [crud]=\"crud\" [title]=\"title\"\r\n [outerParam$]=\"outerParam$\"\r\n [seekerMode]=\"true\" (rowDoubleClick)=\"onRowDoubleClick($event)\"\r\n (selectedIdsChange)=\"onSelectedIdsChange($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-page-list>\r\n }\r\n\r\n <ng-template #sticker let-code=\"context.actflg\">\r\n <core-status-sticker [code]=\"code\" [isTrueCode]=\"true\"></core-status-sticker>\r\n </ng-template>\r\n\r\n</div>", styles: [""], dependencies: [{ kind: "component", type: CorePageListComponent, selector: "core-page-list", inputs: ["normalMode", "hideHeader", "hideButtonGroup", "seekerMode", "mccMode", "height", "headerWrap", "headerFirstRowHeight", "enableTimeZoneConverterForDateTimePeriodParameters", "showParamKit", "datePeriodComparisonFor", "datePeriodComparisonForLabelKey", "statusInclusionFor", "statusInclusionForLabelKey", "statusOptionsApi", "hideDatePeriodComparison", "hideStatusInclusion", "title", "hasIdOfStringType", "hideCheck", "apiDefinition", "columns", "frozen", "inlineTools", "inlineToolItems", "editRoute", "crud", "showListInlineTools", "top", "left", "hideLeft", "outerParam$", "outerSort", "outerFilterOperators", "outerInOperators", "autoResizeWithWindow", "extraManualOffset", "wrap", "rowHeight", "selfResolveCorePageHeaderButtonClick", "clearData$", "deleteValidateFn", "generateTemplateRequest", "importPreviewPath", "columnSearchDefaultOpen", "fixedPageSize", "disableDoubleClick", "noPaddingCell", "disableHighlightOnClick", "loading$"], outputs: ["corePageHeaderButtonClick", "rowClick", "rowDoubleClick", "selectedIdsChange", "selectedDataChange", "onInstanceCreated", "onInputFileBase64DataReady"] }, { kind: "component", type: CoreStatusStickerComponent, selector: "core-status-sticker", inputs: ["code", "isTrueCode"] }] }); }
62
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.3", type: CoreJobSeekerComponent, isStandalone: true, selector: "core-job-seeker", inputs: { multiMode: "multiMode", preDefinedOuterParam$: "preDefinedOuterParam$", excludedIds$: "excludedIds$" }, outputs: { rowDoubleClick: "rowDoubleClick", selectedIdsChange: "selectedIdsChange", selectedDataChange: "selectedDataChange", columnsInit: "columnsInit" }, usesInheritance: true, ngImport: i0, template: "<div class=\"core-job-seeker-container\">\r\n @if (!!sticker) {\r\n <core-page-list [hideCheck]=\"!!!multiMode\" [height]=\"corePageListHeight\" [apiDefinition]=\"apiDefinition\"\r\n [columns]=\"columns\" [editRoute]=\"editRoute\" [crud]=\"crud\" [title]=\"title\"\r\n [outerParam$]=\"outerParam$\"\r\n [excludedIds$]=\"excludedIds$\"\r\n [seekerMode]=\"true\" (rowDoubleClick)=\"onRowDoubleClick($event)\"\r\n (selectedIdsChange)=\"onSelectedIdsChange($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-page-list>\r\n }\r\n\r\n <ng-template #sticker let-code=\"context.actflg\">\r\n <core-status-sticker [code]=\"code\" [isTrueCode]=\"true\"></core-status-sticker>\r\n </ng-template>\r\n\r\n</div>", styles: [""], dependencies: [{ kind: "component", type: CorePageListComponent, selector: "core-page-list", inputs: ["normalMode", "hideHeader", "hideButtonGroup", "seekerMode", "mccMode", "height", "headerWrap", "headerFirstRowHeight", "enableTimeZoneConverterForDateTimePeriodParameters", "showParamKit", "datePeriodComparisonFor", "datePeriodComparisonForLabelKey", "statusInclusionFor", "statusInclusionForLabelKey", "statusOptionsApi", "hideDatePeriodComparison", "hideStatusInclusion", "title", "hasIdOfStringType", "hideCheck", "apiDefinition", "columns", "frozen", "inlineTools", "inlineToolItems", "editRoute", "crud", "showListInlineTools", "top", "left", "hideLeft", "outerParam$", "outerSort", "outerFilterOperators", "outerInOperators", "autoResizeWithWindow", "extraManualOffset", "wrap", "rowHeight", "selfResolveCorePageHeaderButtonClick", "clearData$", "deleteValidateFn", "generateTemplateRequest", "importPreviewPath", "columnSearchDefaultOpen", "fixedPageSize", "disableDoubleClick", "noPaddingCell", "disableHighlightOnClick", "loading$", "excludedIds$"], outputs: ["corePageHeaderButtonClick", "rowClick", "rowDoubleClick", "selectedIdsChange", "selectedDataChange", "onInstanceCreated", "onInputFileBase64DataReady"] }, { kind: "component", type: CoreStatusStickerComponent, selector: "core-status-sticker", inputs: ["code", "isTrueCode"] }] }); }
60
63
  }
61
64
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CoreJobSeekerComponent, decorators: [{
62
65
  type: Component,
63
66
  args: [{ selector: 'core-job-seeker', standalone: true, imports: [
64
67
  CorePageListComponent,
65
68
  CoreStatusStickerComponent
66
- ], template: "<div class=\"core-job-seeker-container\">\r\n @if (!!sticker) {\r\n <core-page-list [hideCheck]=\"!!!multiMode\" [height]=\"corePageListHeight\" [apiDefinition]=\"apiDefinition\"\r\n [columns]=\"columns\" [editRoute]=\"editRoute\" [crud]=\"crud\" [title]=\"title\"\r\n [outerParam$]=\"outerParam$\"\r\n [seekerMode]=\"true\" (rowDoubleClick)=\"onRowDoubleClick($event)\"\r\n (selectedIdsChange)=\"onSelectedIdsChange($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-page-list>\r\n }\r\n\r\n <ng-template #sticker let-code=\"context.actflg\">\r\n <core-status-sticker [code]=\"code\" [isTrueCode]=\"true\"></core-status-sticker>\r\n </ng-template>\r\n\r\n</div>" }]
69
+ ], template: "<div class=\"core-job-seeker-container\">\r\n @if (!!sticker) {\r\n <core-page-list [hideCheck]=\"!!!multiMode\" [height]=\"corePageListHeight\" [apiDefinition]=\"apiDefinition\"\r\n [columns]=\"columns\" [editRoute]=\"editRoute\" [crud]=\"crud\" [title]=\"title\"\r\n [outerParam$]=\"outerParam$\"\r\n [excludedIds$]=\"excludedIds$\"\r\n [seekerMode]=\"true\" (rowDoubleClick)=\"onRowDoubleClick($event)\"\r\n (selectedIdsChange)=\"onSelectedIdsChange($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-page-list>\r\n }\r\n\r\n <ng-template #sticker let-code=\"context.actflg\">\r\n <core-status-sticker [code]=\"code\" [isTrueCode]=\"true\"></core-status-sticker>\r\n </ng-template>\r\n\r\n</div>" }]
67
70
  }], propDecorators: { multiMode: [{
68
71
  type: Input
69
72
  }], preDefinedOuterParam$: [{
70
73
  type: Input
74
+ }], excludedIds$: [{
75
+ type: Input
71
76
  }], rowDoubleClick: [{
72
77
  type: Output
73
78
  }], selectedIdsChange: [{
@@ -77,4 +82,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
77
82
  }], columnsInit: [{
78
83
  type: Output
79
84
  }] } });
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1qb2Itc2Vla2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLWpvYi1zZWVrZXIvY29yZS1qb2Itc2Vla2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLWpvYi1zZWVrZXIvY29yZS1qb2Itc2Vla2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUEwQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckksT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXBELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDBFQUEwRSxDQUFDOztBQVl0SCxNQUFNLE9BQU8sc0JBQXVCLFNBQVEsWUFBWTtJQVZ4RDs7UUFlWSxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDcEMsc0JBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUN2Qyx1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3hDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUUzQyxjQUFTLEdBQUcsU0FBUyxFQUFFLENBQUM7UUFFZixVQUFLLEdBQUcsZ0JBQWdCLENBQUMsNkJBQTZCLENBQUM7UUFDdkQsV0FBTSxHQUFXLEdBQUcsQ0FBQztRQUU5Qix1QkFBa0IsR0FBVyxHQUFHLENBQUM7S0FnRGxDO0lBOUNVLFFBQVE7UUFDZixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDckIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FDN0MsQ0FBQTtRQUNELElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFO1lBQzlCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUNyQixJQUFJLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUN2QyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRTtvQkFDbkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQzFCO3FCQUFNO29CQUNMLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO3dCQUNwQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSzt3QkFDekIsR0FBRyxDQUFDO3FCQUNMLENBQUMsQ0FBQztpQkFDSjtZQUNILENBQUMsQ0FBQyxDQUNILENBQUE7U0FDRjtRQUNELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRVEsZUFBZTtRQUN0QixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxNQUFNLENBQUMsV0FBVyxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUU7Z0JBQ2xDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxNQUFNLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQTthQUNuRDtZQUNELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQztZQUNyRSxJQUFJLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTTtnQkFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDMUUsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsQ0FBTTtRQUNyQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUM3QixDQUFDO0lBRUQsbUJBQW1CLENBQUMsQ0FBTTtRQUN4QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2hDLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxDQUFRO1FBQzNCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUM7WUFDM0IsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLElBQUksRUFBRSxDQUFDO1NBQ1IsQ0FBQyxDQUFBO0lBQ0osQ0FBQzs4R0E3RFUsc0JBQXNCO2tHQUF0QixzQkFBc0IsbVZDakJuQyw2dUJBY00sMERESEYscUJBQXFCLHdwQ0FDckIsMEJBQTBCOzsyRkFLakIsc0JBQXNCO2tCQVZsQyxTQUFTOytCQUNFLGlCQUFpQixjQUNmLElBQUksV0FDUDt3QkFDUCxxQkFBcUI7d0JBQ3JCLDBCQUEwQjtxQkFDM0I7OEJBTVEsU0FBUztzQkFBakIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBRUksY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCwgaXNEZXZNb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEpvYkNvbXBvbmVudCB9IGZyb20gJy4uL2pvYi9qb2IuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEVudW1UcmFuc2xhdGVLZXkgfSBmcm9tICdhbHBoYS1nbG9iYWwtY29uc3RhbnRzJztcclxuaW1wb3J0IHsgQ29yZVBhZ2VMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi4vY29yZS1wYWdlLWxpc3QvY29yZS1wYWdlLWxpc3QuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29yZVN0YXR1c1N0aWNrZXJDb21wb25lbnQgfSBmcm9tICcuLi9jb3JlLXN0YXR1cy1zdGlja2VyL2NvcmUtc3RhdHVzLXN0aWNrZXIvY29yZS1zdGF0dXMtc3RpY2tlci5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjb3JlLWpvYi1zZWVrZXInLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29yZVBhZ2VMaXN0Q29tcG9uZW50LFxyXG4gICAgQ29yZVN0YXR1c1N0aWNrZXJDb21wb25lbnRcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jb3JlLWpvYi1zZWVrZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9jb3JlLWpvYi1zZWVrZXIuY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb3JlSm9iU2Vla2VyQ29tcG9uZW50IGV4dGVuZHMgSm9iQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XHJcblxyXG4gIEBJbnB1dCgpIG11bHRpTW9kZSE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgcHJlRGVmaW5lZE91dGVyUGFyYW0kITogQmVoYXZpb3JTdWJqZWN0PGFueT47XHJcblxyXG4gIEBPdXRwdXQoKSByb3dEb3VibGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgc2VsZWN0ZWRJZHNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHNlbGVjdGVkRGF0YUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgY29sdW1uc0luaXQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIGlzRGV2TW9kZSA9IGlzRGV2TW9kZSgpO1xyXG5cclxuICBvdmVycmlkZSB0aXRsZSA9IEVudW1UcmFuc2xhdGVLZXkuVUlfQ09NUE9ORU5UX1RJVExFX0pPQl9TRUVLRVI7XHJcbiAgb3ZlcnJpZGUgaGVpZ2h0OiBudW1iZXIgPSA2MjA7XHJcblxyXG4gIGNvcmVQYWdlTGlzdEhlaWdodDogbnVtYmVyID0gODAwO1xyXG5cclxuICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLm1scy5sYW5nJC5zdWJzY3JpYmUoeCA9PiB0aGlzLmxhbmcgPSB4KVxyXG4gICAgKVxyXG4gICAgaWYgKHRoaXMucHJlRGVmaW5lZE91dGVyUGFyYW0kKSB7XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIHRoaXMucHJlRGVmaW5lZE91dGVyUGFyYW0kLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLm91dGVyUGFyYW0kLnZhbHVlID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMub3V0ZXJQYXJhbSQubmV4dCh4KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMub3V0ZXJQYXJhbSQubmV4dCh7XHJcbiAgICAgICAgICAgICAgLi4udGhpcy5vdXRlclBhcmFtJC52YWx1ZSxcclxuICAgICAgICAgICAgICAuLi54XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuICAgIH1cclxuICAgIHRoaXMuY29sdW1uc0luaXQuZW1pdCh0aGlzLmNvbHVtbnMpO1xyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGlmICh3aW5kb3cuaW5uZXJIZWlnaHQgLSAxMDAgPCA4MDApIHtcclxuICAgICAgICB0aGlzLmNvcmVQYWdlTGlzdEhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodCAtIDEwMFxyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHN0aWNrZXJGaWx0ZXIgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKGMgPT4gYy5maWVsZCA9PT0gJ2FjdGZsZycpO1xyXG4gICAgICBpZiAoISFzdGlja2VyRmlsdGVyLmxlbmd0aCkgc3RpY2tlckZpbHRlclswXS50ZW1wbGF0ZVJlZiA9IHRoaXMuc3RpY2tlcjtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBvblJvd0RvdWJsZUNsaWNrKGU6IGFueSkge1xyXG4gICAgdGhpcy5yb3dEb3VibGVDbGljay5lbWl0KGUpXHJcbiAgfVxyXG5cclxuICBvblNlbGVjdGVkSWRzQ2hhbmdlKGU6IGFueSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZElkc0NoYW5nZS5lbWl0KGUpXHJcbiAgfVxyXG5cclxuICBvblNlbGVjdGVkRGF0YUNoYW5nZShlOiBhbnlbXSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZERhdGFDaGFuZ2UuZW1pdCh7XHJcbiAgICAgIGNvbHVtbnM6IHRoaXMuY29sdW1ucyxcclxuICAgICAgZGF0YTogZVxyXG4gICAgfSlcclxuICB9XHJcblxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJjb3JlLWpvYi1zZWVrZXItY29udGFpbmVyXCI+XHJcbiAgICBAaWYgKCEhc3RpY2tlcikge1xyXG4gICAgICAgIDxjb3JlLXBhZ2UtbGlzdCBbaGlkZUNoZWNrXT1cIiEhIW11bHRpTW9kZVwiIFtoZWlnaHRdPVwiY29yZVBhZ2VMaXN0SGVpZ2h0XCIgW2FwaURlZmluaXRpb25dPVwiYXBpRGVmaW5pdGlvblwiXHJcbiAgICAgICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiIFtlZGl0Um91dGVdPVwiZWRpdFJvdXRlXCIgW2NydWRdPVwiY3J1ZFwiIFt0aXRsZV09XCJ0aXRsZVwiXHJcbiAgICAgICAgW291dGVyUGFyYW0kXT1cIm91dGVyUGFyYW0kXCJcclxuICAgICAgICBbc2Vla2VyTW9kZV09XCJ0cnVlXCIgKHJvd0RvdWJsZUNsaWNrKT1cIm9uUm93RG91YmxlQ2xpY2soJGV2ZW50KVwiXHJcbiAgICAgICAgKHNlbGVjdGVkSWRzQ2hhbmdlKT1cIm9uU2VsZWN0ZWRJZHNDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgKHNlbGVjdGVkRGF0YUNoYW5nZSk9XCJvblNlbGVjdGVkRGF0YUNoYW5nZSgkZXZlbnQpXCI+PC9jb3JlLXBhZ2UtbGlzdD5cclxuICAgIH1cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgI3N0aWNrZXIgbGV0LWNvZGU9XCJjb250ZXh0LmFjdGZsZ1wiPlxyXG4gICAgICAgIDxjb3JlLXN0YXR1cy1zdGlja2VyIFtjb2RlXT1cImNvZGVcIiBbaXNUcnVlQ29kZV09XCJ0cnVlXCI+PC9jb3JlLXN0YXR1cy1zdGlja2VyPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwvZGl2PiJdfQ==
85
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1qb2Itc2Vla2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLWpvYi1zZWVrZXIvY29yZS1qb2Itc2Vla2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLWpvYi1zZWVrZXIvY29yZS1qb2Itc2Vla2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUEwQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckksT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDbkYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMEVBQTBFLENBQUM7O0FBWXRILE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxZQUFZO0lBVnhEOztRQWNXLGlCQUFZLEdBQUcsSUFBSSxlQUFlLENBQVcsRUFBRSxDQUFDLENBQUM7UUFFaEQsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3BDLHNCQUFpQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDdkMsdUJBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUN4QyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFM0MsY0FBUyxHQUFHLFNBQVMsRUFB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bnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCwgaXNEZXZNb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEpvYkNvbXBvbmVudCB9IGZyb20gJy4uL2pvYi9qb2IuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEVudW1UcmFuc2xhdGVLZXkgfSBmcm9tICdhbHBoYS1nbG9iYWwtY29uc3RhbnRzJztcclxuaW1wb3J0IHsgQ29yZVBhZ2VMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi4vY29yZS1wYWdlLWxpc3QvY29yZS1wYWdlLWxpc3QuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29yZVN0YXR1c1N0aWNrZXJDb21wb25lbnQgfSBmcm9tICcuLi9jb3JlLXN0YXR1cy1zdGlja2VyL2NvcmUtc3RhdHVzLXN0aWNrZXIvY29yZS1zdGF0dXMtc3RpY2tlci5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjb3JlLWpvYi1zZWVrZXInLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29yZVBhZ2VMaXN0Q29tcG9uZW50LFxyXG4gICAgQ29yZVN0YXR1c1N0aWNrZXJDb21wb25lbnRcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jb3JlLWpvYi1zZWVrZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9jb3JlLWpvYi1zZWVrZXIuY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb3JlSm9iU2Vla2VyQ29tcG9uZW50IGV4dGVuZHMgSm9iQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XHJcblxyXG4gIEBJbnB1dCgpIG11bHRpTW9kZSE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgcHJlRGVmaW5lZE91dGVyUGFyYW0kITogQmVoYXZpb3JTdWJqZWN0PGFueT47XHJcbiAgQElucHV0KCkgZXhjbHVkZWRJZHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXJbXT4oW10pO1xyXG5cclxuICBAT3V0cHV0KCkgcm93RG91YmxlQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHNlbGVjdGVkSWRzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBzZWxlY3RlZERhdGFDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGNvbHVtbnNJbml0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBpc0Rldk1vZGUgPSBpc0Rldk1vZGUoKTtcclxuXHJcbiAgb3ZlcnJpZGUgdGl0bGUgPSBFbnVtVHJhbnNsYXRlS2V5LlVJX0NPTVBPTkVOVF9USVRMRV9KT0JfU0VFS0VSO1xyXG4gIG92ZXJyaWRlIGhlaWdodDogbnVtYmVyID0gNjIwO1xyXG5cclxuICBjb3JlUGFnZUxpc3RIZWlnaHQ6IG51bWJlciA9IDgwMDtcclxuXHJcbiAgb3ZlcnJpZGUgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5tbHMubGFuZyQuc3Vic2NyaWJlKHggPT4gdGhpcy5sYW5nID0geClcclxuICAgIClcclxuICAgIGlmICh0aGlzLnByZURlZmluZWRPdXRlclBhcmFtJCkge1xyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLnByZURlZmluZWRPdXRlclBhcmFtJC5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy5vdXRlclBhcmFtJC52YWx1ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLm91dGVyUGFyYW0kLm5leHQoeCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm91dGVyUGFyYW0kLm5leHQoe1xyXG4gICAgICAgICAgICAgIC4uLnRoaXMub3V0ZXJQYXJhbSQudmFsdWUsXHJcbiAgICAgICAgICAgICAgLi4ueFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICB9XHJcbiAgICB0aGlzLmNvbHVtbnNJbml0LmVtaXQodGhpcy5jb2x1bW5zKTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBpZiAod2luZG93LmlubmVySGVpZ2h0IC0gMTAwIDwgODAwKSB7XHJcbiAgICAgICAgdGhpcy5jb3JlUGFnZUxpc3RIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQgLSAxMDBcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBzdGlja2VyRmlsdGVyID0gdGhpcy5jb2x1bW5zLmZpbHRlcihjID0+IGMuZmllbGQgPT09ICdhY3RmbGcnKTtcclxuICAgICAgaWYgKCEhc3RpY2tlckZpbHRlci5sZW5ndGgpIHN0aWNrZXJGaWx0ZXJbMF0udGVtcGxhdGVSZWYgPSB0aGlzLnN0aWNrZXI7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgb25Sb3dEb3VibGVDbGljayhlOiBhbnkpIHtcclxuICAgIGlmICghdGhpcy5tdWx0aU1vZGUpIHRoaXMucm93RG91YmxlQ2xpY2suZW1pdChlKVxyXG4gIH1cclxuXHJcbiAgb25TZWxlY3RlZElkc0NoYW5nZShlOiBhbnkpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRJZHNDaGFuZ2UuZW1pdChlKVxyXG4gIH1cclxuXHJcbiAgb25TZWxlY3RlZERhdGFDaGFuZ2UoZTogYW55W10pIHtcclxuICAgIHRoaXMuc2VsZWN0ZWREYXRhQ2hhbmdlLmVtaXQoe1xyXG4gICAgICBjb2x1bW5zOiB0aGlzLmNvbHVtbnMsXHJcbiAgICAgIGRhdGE6IGVcclxuICAgIH0pXHJcbiAgfVxyXG5cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiY29yZS1qb2Itc2Vla2VyLWNvbnRhaW5lclwiPlxyXG4gICAgQGlmICghIXN0aWNrZXIpIHtcclxuICAgICAgICA8Y29yZS1wYWdlLWxpc3QgW2hpZGVDaGVja109XCIhISFtdWx0aU1vZGVcIiBbaGVpZ2h0XT1cImNvcmVQYWdlTGlzdEhlaWdodFwiIFthcGlEZWZpbml0aW9uXT1cImFwaURlZmluaXRpb25cIlxyXG4gICAgICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIiBbZWRpdFJvdXRlXT1cImVkaXRSb3V0ZVwiIFtjcnVkXT1cImNydWRcIiBbdGl0bGVdPVwidGl0bGVcIlxyXG4gICAgICAgIFtvdXRlclBhcmFtJF09XCJvdXRlclBhcmFtJFwiXHJcbiAgICAgICAgW2V4Y2x1ZGVkSWRzJF09XCJleGNsdWRlZElkcyRcIlxyXG4gICAgICAgIFtzZWVrZXJNb2RlXT1cInRydWVcIiAocm93RG91YmxlQ2xpY2spPVwib25Sb3dEb3VibGVDbGljaygkZXZlbnQpXCJcclxuICAgICAgICAoc2VsZWN0ZWRJZHNDaGFuZ2UpPVwib25TZWxlY3RlZElkc0NoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAoc2VsZWN0ZWREYXRhQ2hhbmdlKT1cIm9uU2VsZWN0ZWREYXRhQ2hhbmdlKCRldmVudClcIj48L2NvcmUtcGFnZS1saXN0PlxyXG4gICAgfVxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSAjc3RpY2tlciBsZXQtY29kZT1cImNvbnRleHQuYWN0ZmxnXCI+XHJcbiAgICAgICAgPGNvcmUtc3RhdHVzLXN0aWNrZXIgW2NvZGVdPVwiY29kZVwiIFtpc1RydWVDb2RlXT1cInRydWVcIj48L2NvcmUtc3RhdHVzLXN0aWNrZXI+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuPC9kaXY+Il19