ms-data-grid 0.0.131 → 0.0.132

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.
@@ -10,7 +10,7 @@ export class CellRenderInitDirective {
10
10
  if (!this.componentType)
11
11
  return;
12
12
  // ✅ Dynamically create the component
13
- const componentRef = this.vcr.createComponent(this.componentType, {
13
+ this.componentRef = this.vcr.createComponent(this.componentType, {
14
14
  injector: Injector.create({
15
15
  providers: [
16
16
  { provide: 'rowData', useValue: this.rowData },
@@ -20,16 +20,20 @@ export class CellRenderInitDirective {
20
20
  parent: this.injector
21
21
  })
22
22
  });
23
+ if (this.colData) {
24
+ this.colData.cellComponentRef = this.componentRef;
25
+ }
23
26
  // ✅ Automatically call custom lifecycle hook if present
24
- if (typeof componentRef.instance.gridInit === 'function') {
25
- componentRef.instance.gridInit({
27
+ if (typeof this.componentRef.instance.gridInit === 'function') {
28
+ this.componentRef.instance.gridInit({
26
29
  row: this.rowData,
27
30
  col: this.colData,
28
- value: this.cellValue
31
+ value: this.cellValue,
32
+ context: this.context
29
33
  });
30
34
  }
31
- for (const key of Object.keys(componentRef.instance)) {
32
- const property = componentRef.instance[key];
35
+ for (const key of Object.keys(this.componentRef.instance)) {
36
+ const property = this.componentRef.instance[key];
33
37
  if (property instanceof EventEmitter) {
34
38
  property.subscribe((value) => {
35
39
  this.cellEvent.emit({
@@ -44,8 +48,22 @@ export class CellRenderInitDirective {
44
48
  }
45
49
  }
46
50
  }
51
+ ngOnChanges(changes) {
52
+ if (this.componentRef &&
53
+ typeof this.componentRef.instance.gridRefresh === 'function') {
54
+ this.componentRef.instance.gridRefresh({
55
+ row: this.rowData,
56
+ col: this.colData,
57
+ value: this.cellValue,
58
+ context: this.context
59
+ });
60
+ }
61
+ }
62
+ ngOnDestroy() {
63
+ this.componentRef?.destroy();
64
+ }
47
65
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CellRenderInitDirective, deps: [{ token: i0.ViewContainerRef }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Directive }); }
48
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: CellRenderInitDirective, selector: "[cellRenderInit]", inputs: { componentType: ["cellRenderInit", "componentType"], rowData: "rowData", colData: "colData", cellValue: "cellValue" }, outputs: { cellEvent: "cellEvent" }, ngImport: i0 }); }
66
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: CellRenderInitDirective, selector: "[cellRenderInit]", inputs: { componentType: ["cellRenderInit", "componentType"], rowData: "rowData", colData: "colData", cellValue: "cellValue", context: "context" }, outputs: { cellEvent: "cellEvent" }, usesOnChanges: true, ngImport: i0 }); }
49
67
  }
50
68
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CellRenderInitDirective, decorators: [{
51
69
  type: Directive,
@@ -61,7 +79,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
61
79
  type: Input
62
80
  }], cellValue: [{
63
81
  type: Input
82
+ }], context: [{
83
+ type: Input
64
84
  }], cellEvent: [{
65
85
  type: Output
66
86
  }] } });
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1yZW5kZXItaW5pdC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhLWdyaWQvc3JjL2xpYi9kaXJlY3RpdmVzL2NlbGwtcmVuZGVyLWluaXQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUdMLFFBQVEsRUFHUixZQUFZLEVBQ1osTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDOztBQUt2QixNQUFNLE9BQU8sdUJBQXVCO0lBUWxDLFlBQW9CLEdBQXFCLEVBQVUsUUFBa0I7UUFBakQsUUFBRyxHQUFILEdBQUcsQ0FBa0I7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBRjNELGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBb0MsQ0FBQztJQUVGLENBQUM7SUFFMUUsUUFBUTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYTtZQUFFLE9BQU87UUFFaEMscUNBQXFDO1FBQ3JDLE1BQU0sWUFBWSxHQUFzQixJQUFJLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ25GLFFBQVEsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDO2dCQUN4QixTQUFTLEVBQUU7b0JBQ1QsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFO29CQUM5QyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUU7b0JBQzlDLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRTtpQkFDbkQ7Z0JBQ0QsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRO2FBQ3RCLENBQUM7U0FDSCxDQUFDLENBQUM7UUFFSCx3REFBd0Q7UUFDeEQsSUFBSSxPQUFPLFlBQVksQ0FBQyxRQUFRLENBQUMsUUFBUSxLQUFLLFVBQVUsRUFBRTtZQUN4RCxZQUFZLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztnQkFDN0IsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPO2dCQUNqQixHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU87Z0JBQ2pCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUzthQUN0QixDQUFDLENBQUM7U0FDSjtRQUNELEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDcEQsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM1QyxJQUFJLFFBQVEsWUFBWSxZQUFZLEVBQUU7Z0JBQ3BDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTtvQkFDaEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7d0JBQ2xCLFNBQVMsRUFBRSxHQUFHO3dCQUNkLElBQUksRUFBRTs0QkFDSixHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU87NEJBQ2pCLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTzs0QkFDakIsS0FBSzt5QkFDTjtxQkFDRixDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7YUFDSjtTQUNGO0lBQ0gsQ0FBQzsrR0FoRFUsdUJBQXVCO21HQUF2Qix1QkFBdUI7OzRGQUF2Qix1QkFBdUI7a0JBSG5DLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGtCQUFrQjtpQkFDN0I7OEhBRTBCLGFBQWE7c0JBQXJDLEtBQUs7dUJBQUMsZ0JBQWdCO2dCQUNkLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFFSSxTQUFTO3NCQUFsQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBWaWV3Q29udGFpbmVyUmVmLFxuICBJbmplY3RvcixcbiAgQ29tcG9uZW50UmVmLFxuICBUeXBlLFxuICBFdmVudEVtaXR0ZXIsXG4gIE91dHB1dFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2NlbGxSZW5kZXJJbml0XSdcbn0pXG5leHBvcnQgY2xhc3MgQ2VsbFJlbmRlckluaXREaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoJ2NlbGxSZW5kZXJJbml0JykgY29tcG9uZW50VHlwZSE6IFR5cGU8YW55PjtcbiAgQElucHV0KCkgcm93RGF0YTogYW55O1xuICBASW5wdXQoKSBjb2xEYXRhOiBhbnk7XG4gIEBJbnB1dCgpIGNlbGxWYWx1ZTogYW55O1xuXG4gIEBPdXRwdXQoKSBjZWxsRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgZXZlbnROYW1lOiBzdHJpbmc7IGRhdGE6IGFueSB9PigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdmNyOiBWaWV3Q29udGFpbmVyUmVmLCBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcikgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNvbXBvbmVudFR5cGUpIHJldHVybjtcblxuICAgIC8vIOKchSBEeW5hbWljYWxseSBjcmVhdGUgdGhlIGNvbXBvbmVudFxuICAgIGNvbnN0IGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPGFueT4gPSB0aGlzLnZjci5jcmVhdGVDb21wb25lbnQodGhpcy5jb21wb25lbnRUeXBlLCB7XG4gICAgICBpbmplY3RvcjogSW5qZWN0b3IuY3JlYXRlKHtcbiAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgeyBwcm92aWRlOiAncm93RGF0YScsIHVzZVZhbHVlOiB0aGlzLnJvd0RhdGEgfSxcbiAgICAgICAgICB7IHByb3ZpZGU6ICdjb2xEYXRhJywgdXNlVmFsdWU6IHRoaXMuY29sRGF0YSB9LFxuICAgICAgICAgIHsgcHJvdmlkZTogJ2NlbGxWYWx1ZScsIHVzZVZhbHVlOiB0aGlzLmNlbGxWYWx1ZSB9XG4gICAgICAgIF0sXG4gICAgICAgIHBhcmVudDogdGhpcy5pbmplY3RvclxuICAgICAgfSlcbiAgICB9KTtcblxuICAgIC8vIOKchSBBdXRvbWF0aWNhbGx5IGNhbGwgY3VzdG9tIGxpZmVjeWNsZSBob29rIGlmIHByZXNlbnRcbiAgICBpZiAodHlwZW9mIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5ncmlkSW5pdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmdyaWRJbml0KHtcbiAgICAgICAgcm93OiB0aGlzLnJvd0RhdGEsXG4gICAgICAgIGNvbDogdGhpcy5jb2xEYXRhLFxuICAgICAgICB2YWx1ZTogdGhpcy5jZWxsVmFsdWVcbiAgICAgIH0pO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhjb21wb25lbnRSZWYuaW5zdGFuY2UpKSB7XG4gICAgICBjb25zdCBwcm9wZXJ0eSA9IGNvbXBvbmVudFJlZi5pbnN0YW5jZVtrZXldO1xuICAgICAgaWYgKHByb3BlcnR5IGluc3RhbmNlb2YgRXZlbnRFbWl0dGVyKSB7XG4gICAgICAgIHByb3BlcnR5LnN1YnNjcmliZSgodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuY2VsbEV2ZW50LmVtaXQoe1xuICAgICAgICAgICAgZXZlbnROYW1lOiBrZXksXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgIHJvdzogdGhpcy5yb3dEYXRhLFxuICAgICAgICAgICAgICBjb2w6IHRoaXMuY29sRGF0YSxcbiAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1yZW5kZXItaW5pdC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhLWdyaWQvc3JjL2xpYi9kaXJlY3RpdmVzL2NlbGwtcmVuZGVyLWluaXQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUdMLFFBQVEsRUFHUixZQUFZLEVBQ1osTUFBTSxFQUlQLE1BQU0sZUFBZSxDQUFDOztBQUt2QixNQUFNLE9BQU8sdUJBQXVCO0lBVWxDLFlBQW9CLEdBQXFCLEVBQVUsUUFBa0I7UUFBakQsUUFBRyxHQUFILEdBQUcsQ0FBa0I7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBRjNELGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBb0MsQ0FBQztJQUVGLENBQUM7SUFHMUUsUUFBUTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYTtZQUFFLE9BQU87UUFFaEMscUNBQXFDO1FBQ3BDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNoRSxRQUFRLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQztnQkFDeEIsU0FBUyxFQUFFO29CQUNULEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRTtvQkFDOUMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFO29CQUM5QyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUU7aUJBQ25EO2dCQUNELE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUTthQUN0QixDQUFDO1NBQ0gsQ0FBQyxDQUFDO1FBRUgsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztTQUNuRDtRQUVELHdEQUF3RDtRQUN4RCxJQUFJLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsUUFBUSxLQUFLLFVBQVUsRUFBRTtZQUM3RCxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7Z0JBQ2xDLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTztnQkFDakIsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPO2dCQUNqQixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVM7Z0JBQ3JCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTzthQUN0QixDQUFDLENBQUM7U0FDSjtRQUdELEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3pELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2pELElBQUksUUFBUSxZQUFZLFlBQVksRUFBRTtnQkFDcEMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO29CQUNoQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQzt3QkFDbEIsU0FBUyxFQUFFLEdBQUc7d0JBQ2QsSUFBSSxFQUFFOzRCQUNKLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTzs0QkFDakIsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPOzRCQUNqQixLQUFLO3lCQUNOO3FCQUNGLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQzthQUNKO1NBQ0Y7SUFDSCxDQUFDO0lBR0QsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQ0UsSUFBSSxDQUFDLFlBQVk7WUFDakIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEtBQUssVUFBVSxFQUM1RDtZQUNBLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQztnQkFDckMsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPO2dCQUNqQixHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU87Z0JBQ2pCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUztnQkFDckIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO2FBQ3RCLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUdELFdBQVc7UUFDVCxJQUFJLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQy9CLENBQUM7K0dBOUVVLHVCQUF1QjttR0FBdkIsdUJBQXVCOzs0RkFBdkIsdUJBQXVCO2tCQUhuQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxrQkFBa0I7aUJBQzdCOzhIQUUwQixhQUFhO3NCQUFyQyxLQUFLO3VCQUFDLGdCQUFnQjtnQkFDZCxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUdJLFNBQVM7c0JBQWxCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIFZpZXdDb250YWluZXJSZWYsXG4gIEluamVjdG9yLFxuICBDb21wb25lbnRSZWYsXG4gIFR5cGUsXG4gIEV2ZW50RW1pdHRlcixcbiAgT3V0cHV0LFxuICBPbkRlc3Ryb3ksXG4gIFNpbXBsZUNoYW5nZXMsXG4gIE9uQ2hhbmdlc1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2NlbGxSZW5kZXJJbml0XSdcbn0pXG5leHBvcnQgY2xhc3MgQ2VsbFJlbmRlckluaXREaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgQElucHV0KCdjZWxsUmVuZGVySW5pdCcpIGNvbXBvbmVudFR5cGUhOiBUeXBlPGFueT47XG4gIEBJbnB1dCgpIHJvd0RhdGE6IGFueTtcbiAgQElucHV0KCkgY29sRGF0YTogYW55O1xuICBASW5wdXQoKSBjZWxsVmFsdWU6IGFueTtcbiAgQElucHV0KCkgY29udGV4dDogYW55O1xuXG5cbiAgQE91dHB1dCgpIGNlbGxFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBldmVudE5hbWU6IHN0cmluZzsgZGF0YTogYW55IH0+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSB2Y3I6IFZpZXdDb250YWluZXJSZWYsIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yKSB7IH1cbiAgY29tcG9uZW50UmVmITogQ29tcG9uZW50UmVmPGFueT5cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29tcG9uZW50VHlwZSkgcmV0dXJuO1xuXG4gICAgLy8g4pyFIER5bmFtaWNhbGx5IGNyZWF0ZSB0aGUgY29tcG9uZW50XG4gICAgIHRoaXMuY29tcG9uZW50UmVmID0gdGhpcy52Y3IuY3JlYXRlQ29tcG9uZW50KHRoaXMuY29tcG9uZW50VHlwZSwge1xuICAgICAgaW5qZWN0b3I6IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgIHsgcHJvdmlkZTogJ3Jvd0RhdGEnLCB1c2VWYWx1ZTogdGhpcy5yb3dEYXRhIH0sXG4gICAgICAgICAgeyBwcm92aWRlOiAnY29sRGF0YScsIHVzZVZhbHVlOiB0aGlzLmNvbERhdGEgfSxcbiAgICAgICAgICB7IHByb3ZpZGU6ICdjZWxsVmFsdWUnLCB1c2VWYWx1ZTogdGhpcy5jZWxsVmFsdWUgfVxuICAgICAgICBdLFxuICAgICAgICBwYXJlbnQ6IHRoaXMuaW5qZWN0b3JcbiAgICAgIH0pXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5jb2xEYXRhKSB7XG4gICAgICB0aGlzLmNvbERhdGEuY2VsbENvbXBvbmVudFJlZiA9IHRoaXMuY29tcG9uZW50UmVmO1xuICAgIH1cblxuICAgIC8vIOKchSBBdXRvbWF0aWNhbGx5IGNhbGwgY3VzdG9tIGxpZmVjeWNsZSBob29rIGlmIHByZXNlbnRcbiAgICBpZiAodHlwZW9mIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLmdyaWRJbml0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5ncmlkSW5pdCh7XG4gICAgICAgIHJvdzogdGhpcy5yb3dEYXRhLFxuICAgICAgICBjb2w6IHRoaXMuY29sRGF0YSxcbiAgICAgICAgdmFsdWU6IHRoaXMuY2VsbFZhbHVlLFxuICAgICAgICBjb250ZXh0OiB0aGlzLmNvbnRleHRcbiAgICAgIH0pO1xuICAgIH1cblxuXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UpKSB7XG4gICAgICBjb25zdCBwcm9wZXJ0eSA9IHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlW2tleV07XG4gICAgICBpZiAocHJvcGVydHkgaW5zdGFuY2VvZiBFdmVudEVtaXR0ZXIpIHtcbiAgICAgICAgcHJvcGVydHkuc3Vic2NyaWJlKCh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5jZWxsRXZlbnQuZW1pdCh7XG4gICAgICAgICAgICBldmVudE5hbWU6IGtleSxcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgcm93OiB0aGlzLnJvd0RhdGEsXG4gICAgICAgICAgICAgIGNvbDogdGhpcy5jb2xEYXRhLFxuICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5jb21wb25lbnRSZWYgJiZcbiAgICAgIHR5cGVvZiB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5ncmlkUmVmcmVzaCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICkge1xuICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UuZ3JpZFJlZnJlc2goe1xuICAgICAgICByb3c6IHRoaXMucm93RGF0YSxcbiAgICAgICAgY29sOiB0aGlzLmNvbERhdGEsXG4gICAgICAgIHZhbHVlOiB0aGlzLmNlbGxWYWx1ZSxcbiAgICAgICAgY29udGV4dDogdGhpcy5jb250ZXh0XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuY29tcG9uZW50UmVmPy5kZXN0cm95KCk7XG4gIH1cbn1cbiJdfQ==
@@ -1,5 +1,6 @@
1
1
  import { DatePipe } from '@angular/common';
2
2
  import { inject, Injectable } from '@angular/core';
3
+ import { STATUSES_BADGE_MAP } from '../data-grid/statuses';
3
4
  import * as i0 from "@angular/core";
4
5
  export class CommonService {
5
6
  constructor() {
@@ -318,6 +319,70 @@ export class CommonService {
318
319
  ? date
319
320
  : null;
320
321
  }
322
+ getCellClasses(column, value) {
323
+ if (!value || !column?.field || column?.cellRenderer)
324
+ return '';
325
+ let val = typeof value === 'object' ? value?.value ?? value : value;
326
+ const field = column.field.toLowerCase();
327
+ if (field === 'due_date') {
328
+ const dueDate = new Date(val);
329
+ const today = new Date();
330
+ const todayUTC = Date.UTC(today.getFullYear(), today.getMonth(), today.getDate());
331
+ const dueUTC = Date.UTC(dueDate.getFullYear(), dueDate.getMonth(), dueDate.getDate());
332
+ if (dueUTC < todayUTC) {
333
+ return 'text-danger';
334
+ }
335
+ // else if(dueUTC === todayUTC){
336
+ // return 'text-warning';
337
+ // }
338
+ return '';
339
+ }
340
+ const status = val?.toString().toLowerCase();
341
+ if (field === 'status' ||
342
+ field === 'account_status' ||
343
+ field === 'availstatus' ||
344
+ field === 'is_custom_grade') {
345
+ return STATUSES_BADGE_MAP[status] || 'badge badge-secondary';
346
+ }
347
+ return '';
348
+ }
349
+ replaceColumnQuery(columns, targetCol, newQuery) {
350
+ for (const col of columns) {
351
+ if (col.field === targetCol.field) {
352
+ col.query = { ...newQuery };
353
+ return true;
354
+ }
355
+ if (col.children?.length) {
356
+ const found = this.replaceColumnQuery(col.children, targetCol, newQuery);
357
+ if (found)
358
+ return true;
359
+ }
360
+ }
361
+ return false;
362
+ }
363
+ capitalizeStatus(value) {
364
+ if (!value)
365
+ return '';
366
+ let str = String(value).trim();
367
+ str = str.replace(/[_-]/g, ' ');
368
+ if (str.includes(' ')) {
369
+ return str
370
+ .toLowerCase()
371
+ .split(' ')
372
+ .filter(word => word.length > 0)
373
+ .map(word => word.charAt(0).toUpperCase() + word.slice(1))
374
+ .join(' ');
375
+ }
376
+ str = str
377
+ .replace(/([a-z])([A-Z])/g, '$1 $2')
378
+ .replace(/([A-Z])([A-Z][a-z])/g, '$1 $2');
379
+ return str
380
+ .toLowerCase()
381
+ .split(' ')
382
+ .filter(word => word.length > 0)
383
+ .map(word => word.charAt(0).toUpperCase() + word.slice(1))
384
+ .join(' ');
385
+ }
321
386
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CommonService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
322
387
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CommonService, providedIn: 'root' }); }
323
388
  }
@@ -327,4 +392,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
327
392
  providedIn: 'root',
328
393
  }]
329
394
  }], ctorParameters: function () { return []; } });
330
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhLWdyaWQvc3JjL2xpYi9zZXJ2aWNlcy9jb21tb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBS25ELE1BQU0sT0FBTyxhQUFhO0lBR3hCO1FBRFEsYUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUc3QixzQkFBaUIsR0FBRyxDQUFDLENBQUM7UUE2TTdCLDBCQUFxQixHQUFVLEVBQUUsQ0FBQztJQS9NbEIsQ0FBQztJQUlqQixvQkFBb0IsQ0FBQyxPQUFjO1FBQ2pDLE1BQU0sWUFBWSxHQUFHLENBQUMsT0FBYyxFQUFXLEVBQUU7WUFDL0MsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQzFCLElBQUksR0FBRyxFQUFFLFVBQVU7b0JBQUUsT0FBTyxJQUFJLENBQUM7Z0JBQ2pDLElBQUksR0FBRyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUU7b0JBQ3pCLE9BQU8sWUFBWSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDbkM7Z0JBQ0QsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQztRQUNGLE9BQU8sWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxPQUFjO1FBQ25DLE1BQU0sWUFBWSxHQUFHLENBQUMsT0FBYyxFQUFXLEVBQUU7WUFDL0MsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxHQUFHLEVBQUUsVUFBVTtv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QUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLEtBQUssR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUIsTUFBTSxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFdkIsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUV4QyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLElBQUk7WUFDakMsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLEtBQUs7WUFDekIsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLEdBQUcsQ0FBQztZQUN2QixDQUFDLENBQUMsSUFBSTtZQUNOLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDWCxDQUFDOytHQTlYVSxhQUFhO21IQUFiLGFBQWEsY0FGWixNQUFNOzs0RkFFUCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQ29tbW9uU2VydmljZSB7XG5cbiAgcHJpdmF0ZSBkYXRlUGlwZSA9IGluamVjdChEYXRlUGlwZSk7IFxuICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gIHB1YmxpYyBtYWluQ29udGFpbmVyTGVmdCA9IDA7XG5cbiAgZ2V0aGFzVmlzaWJsZUNvbHVtbnMoY29sdW1uczogYW55W10pOiBib29sZWFuIHtcbiAgICBjb25zdCBjaGVja1Zpc2libGUgPSAoY29sdW1uczogYW55W10pOiBib29sZWFuID0+IHtcbiAgICAgIHJldHVybiBjb2x1bW5zLnNvbWUoKGNvbCkgPT4ge1xuICAgICAgICBpZiAoY29sPy5pc192aXNpYmxlKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKGNvbD8uY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiBjaGVja1Zpc2libGUoY29sLmNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHJldHVybiBjaGVja1Zpc2libGUoY29sdW1ucyk7XG4gIH1cblxuICBnZXRoYXNJblZpc2libGVDb2x1bW5zKGNvbHVtbnM6IGFueVtdKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY2hlY2tWaXNpYmxlID0gKGNvbHVtbnM6IGFueVtdKTogYm9vbGVhbiA9PiB7XG4gICAgICByZXR1cm4gY29sdW1ucy5zb21lKChjb2wpID0+IHtcbiAgICAgICAgaWYgKCFjb2w/LmlzX3Zpc2libGUpIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAoY29sPy5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIGNoZWNrVmlzaWJsZShjb2wuY2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgcmV0dXJuIGNoZWNrVmlzaWJsZShjb2x1bW5zKTtcbiAgfVxuXG5cbiAgZ2V0VG90YWxDb2x1bW5zTGVuZ3RoKGNvbHVtbnM6IGFueVtdKTogbnVtYmVyIHtcbiAgICBsZXQgY291bnQgPSAwO1xuXG4gICAgY29sdW1ucy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICBpZiAoY29sLmNoaWxkcmVuICYmIEFycmF5LmlzQXJyYXkoY29sLmNoaWxkcmVuKSAmJiBjb2wuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgIGNvdW50ICs9IGNvbC5jaGlsZHJlbi5sZW5ndGg7IC8vIGNvdW50IGNoaWxkcmVuIGluc3RlYWQgb2YgcGFyZW50XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb3VudCArPSAxOyAvLyBjb3VudCBwYXJlbnQgZGlyZWN0bHlcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBjb3VudDtcbiAgfVxuXG4gIGdldGhhc1JpZ2h0UGlubmVkQ29sdW1ucyhjb2x1bW5zOiBhbnlbXSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNoZWNrUGlubmVkUmlnaHQgPSAoY29sdW1uczogYW55W10pOiBib29sZWFuID0+IHtcbiAgICAgIHJldHVybiBjb2x1bW5zLnNvbWUoKGNvbCkgPT4ge1xuICAgICAgICBpZiAoY29sPy5waW5uZWQgPT09ICdyaWdodCcgJiYgY29sPy5pc192aXNpYmxlKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKGNvbD8uY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiBjaGVja1Bpbm5lZFJpZ2h0KGNvbC5jaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICByZXR1cm4gY2hlY2tQaW5uZWRSaWdodChjb2x1bW5zKTtcbiAgfVxuXG4gIGdldGhhc0xlZnRQaW5uZWRDb2x1bW5zKGNvbHVtbnM6IGFueVtdKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY2hlY2tQaW5uZWRSaWdodCA9IChjb2x1bW5zOiBhbnlbXSk6IGJvb2xlYW4gPT4ge1xuICAgICAgcmV0dXJuIGNvbHVtbnMuc29tZSgoY29sKSA9PiB7XG4gICAgICAgIGlmIChjb2w/LnBpbm5lZCA9PT0gJ2xlZnQnICYmIGNvbD8uaXNfdmlzaWJsZSkgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmIChjb2w/LmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gY2hlY2tQaW5uZWRSaWdodChjb2wuY2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgcmV0dXJuIGNoZWNrUGlubmVkUmlnaHQoY29sdW1ucyk7XG4gIH1cblxuXG4gIGdldEV4cGFuZGVkUm93Q291bnQoZGF0YTogYW55W10pOiBudW1iZXIge1xuICAgIGxldCBncm91cENvdW50ID0gMDtcbiAgICBsZXQgcm93Q291bnQgPSAwO1xuXG4gICAgZGF0YS5mb3JFYWNoKGdyb3VwID0+IHtcbiAgICAgIGlmIChncm91cD8uaXNHcm91cCkge1xuICAgICAgICBncm91cENvdW50Kys7XG5cbiAgICAgICAgaWYgKGdyb3VwPy5pc0V4cGFuZCAmJiBBcnJheS5pc0FycmF5KGdyb3VwPy5jaGlsZHJlbikpIHtcbiAgICAgICAgICBncm91cC5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZDogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoY2hpbGQuaXNHcm91cCkge1xuICAgICAgICAgICAgICBpZiAoY2hpbGQuaXNFeHBhbmQgJiYgQXJyYXkuaXNBcnJheShjaGlsZC5jaGlsZHJlbikpIHtcbiAgICAgICAgICAgICAgICByb3dDb3VudCArPSBjaGlsZC5jaGlsZHJlbi5sZW5ndGg7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJvd0NvdW50Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChncm91cENvdW50ID09PSAwKSB7XG4gICAgICByZXR1cm4gZGF0YS5sZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdyb3VwQ291bnQgKyByb3dDb3VudDtcbiAgfVxuXG5cbiAgZ2V0RmlsdGVyc0Zyb21Db2x1bW5zKGNvbHVtbnM6IGFueVtdLCBmaWx0ZXJzQ29uZmlnOiBhbnlbXSk6IGFueVtdIHtcbiAgICBjb25zdCByZXN1bHQ6IGFueVtdID0gW107XG5cbiAgICBjb25zdCBjaGVja0NvbHVtbiA9IChjb2w6IGFueSkgPT4ge1xuICAgICAgaWYgKGNvbC5xdWVyeT8uY29uZGl0aW9uID09PSAnbm9uZScpIHtcbiAgICAgICAgY29sLnF1ZXJ5LnNlY29uZF92YWx1ZSA9IG51bGw7XG4gICAgICAgIGNvbC5xdWVyeS5zZWNvbmRfY29uZGl0aW9uID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGhhc0ZpcnN0VmFsdWUgPSBjb2wucXVlcnk/LmZpcnN0X3ZhbHVlICE9IG51bGwgJiYgY29sLnF1ZXJ5Py5maXJzdF92YWx1ZSAhPT0gXCJcIiAmJiBmaWx0ZXJzQ29uZmlnLnNvbWUoKGVsZSkgPT4gZWxlLmZpZWxkID09IGNvbC5maWVsZCk7XG4gICAgICBjb25zdCBoYXNJZHMgPSBBcnJheS5pc0FycmF5KGNvbC5xdWVyeT8uX2lkcykgJiYgY29sLnF1ZXJ5Ll9pZHMubGVuZ3RoID4gMCAmJiBmaWx0ZXJzQ29uZmlnLnNvbWUoKGVsZSkgPT4gZWxlLmZpZWxkID09IGNvbC5maWVsZCk7XG4gICAgICBpZiAoaGFzRmlyc3RWYWx1ZSB8fCBoYXNJZHMpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgIHNlYXJjaDogY29sLnNlYXJjaCA/PyBcIlwiLFxuICAgICAgICAgIGZpZWxkOiBjb2wuZmllbGQsXG4gICAgICAgICAgdHlwZTogY29sLnR5cGUsXG4gICAgICAgICAgX2lkczogKGNvbC50eXBlID09ICdkcm9wZG93bicgfHwgY29sLnR5cGUgPT0gJ2FycmF5JykgPyBjb2wucXVlcnk/Ll9pZHMgOiBbXSxcbiAgICAgICAgICBxdWVyeTogKGNvbC50eXBlID09ICdkcm9wZG93bicgfHwgY29sLnR5cGUgPT0gJ2FycmF5JykgPyBudWxsIDogKGNvbD8ucXVlcnk/LmZpcnN0X3ZhbHVlID8gY29sPy5xdWVyeSA6IG51bGwpXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShjb2wuY2hpbGRyZW4pICYmIGNvbC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbC5jaGlsZHJlbi5mb3JFYWNoKGNoZWNrQ29sdW1uKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbHVtbnMuZm9yRWFjaChjaGVja0NvbHVtbik7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgYXN5bmMgYXBwbHlGaWx0ZXJzVG9Db2x1bW5zKGNvbHVtbnM6IGFueVtdLCBmaWx0ZXJzOiBhbnlbXSk6IFByb21pc2U8YW55W10+IHtcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2x1bW5zKSB7XG4gICAgICBpZiAoIWNvbC5xdWVyeSkge1xuICAgICAgICBjb2wucXVlcnkgPSB7XG4gICAgICAgICAgZmlyc3RfdmFsdWU6IG51bGwsXG4gICAgICAgICAgc2Vjb25kX3ZhbHVlOiBudWxsLFxuICAgICAgICAgIGZpcnN0X2NvbmRpdGlvbjogY29sLnR5cGUgIT09ICdkYXRlJyAmJiBjb2wudHlwZSAhPT0gJ251bWJlcicgJiYgIGNvbC50eXBlICE9PSAndGltZSc/ICdjb250YWluJyA6ICdlcXVhbCcsXG4gICAgICAgICAgc2Vjb25kX2NvbmRpdGlvbjogbnVsbCxcbiAgICAgICAgICBjb25kaXRpb246ICdub25lJyxcbiAgICAgICAgICBfaWRzOiBbXVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmaWx0ZXIgPSBmaWx0ZXJzLmZpbmQoZiA9PiBmLmZpZWxkID09PSBjb2wuZmllbGQpO1xuXG4gICAgICBpZiAoZmlsdGVyKSB7XG4gICAgICAgIGlmIChjb2wudHlwZSA9PT0gJ2Ryb3Bkb3duJyB8fCBjb2wudHlwZSA9PSAnYXJyYXknKSB7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWRJZHMgPSBmaWx0ZXIuX2lkcyA/PyBbXTtcbiAgICAgICAgICBjb25zdCBkcm9wZG93blZhbHVlcyA9IGNvbC5jb2x1bW5fZHJvcGRvd25fdmFsdWUgPz8gW107XG5cbiAgICAgICAgICAvLyDinIUgTWFwIGRlcGVuZGluZyBvbiBkcm9wZG93biB2YWx1ZSBzdHJ1Y3R1cmVcbiAgICAgICAgICBsZXQgc2VsZWN0ZWRMYWJlbHM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkcm9wZG93blZhbHVlcykgJiYgZHJvcGRvd25WYWx1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBkcm9wZG93blZhbHVlc1swXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgLy8gb2JqZWN0LWJhc2VkIGRyb3Bkb3duczogeyBpZCwgbmFtZS9sYWJlbC92YWx1ZS90ZXh0IH1cbiAgICAgICAgICAgICAgc2VsZWN0ZWRMYWJlbHMgPSBkcm9wZG93blZhbHVlc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIob3B0ID0+IHNlbGVjdGVkSWRzLmluY2x1ZGVzKG9wdC5pZCkpXG4gICAgICAgICAgICAgICAgLm1hcChvcHQgPT4gb3B0Lm5hbWUgPz8gb3B0LmxhYmVsID8/IG9wdC52YWx1ZSA/PyBvcHQudGV4dCA/PyAnJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBzdHJpbmctYmFzZWQgZHJvcGRvd25zXG4gICAgICAgICAgICAgIHNlbGVjdGVkTGFiZWxzID0gZHJvcGRvd25WYWx1ZXMuZmlsdGVyKG9wdCA9PiBzZWxlY3RlZElkcy5pbmNsdWRlcyhvcHQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyDinIUgU3RvcmUgcmVhZGFibGUgdGV4dCBpbiBmaWx0ZXJWYWx1ZSAoY29tbWEtc2VwYXJhdGVkKVxuICAgICAgICAgIGNvbC5maWx0ZXJWYWx1ZSA9IHNlbGVjdGVkTGFiZWxzLmpvaW4oJywgJyk7XG5cbiAgICAgICAgICAvLyBtYWludGFpbiBxdWVyeSBzdGF0ZVxuICAgICAgICAgIGNvbC5xdWVyeS5faWRzID0gc2VsZWN0ZWRJZHM7XG4gICAgICAgICAgY29sLnNlYXJjaCA9IGZpbHRlci5zZWFyY2ggPz8gJyc7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyDinIUgTm9uLWRyb3Bkb3duIGZpbHRlcnMgKHRleHQvZGF0ZS9udW1iZXIpXG4gICAgICAgICAgY29sLmZpbHRlclZhbHVlID0gZmlsdGVyLnNlYXJjaCB8fCBmaWx0ZXIucXVlcnk/LmZpcnN0X3ZhbHVlIHx8ICcnO1xuICAgICAgICAgIGNvbC5zZWFyY2ggPSBmaWx0ZXIuc2VhcmNoID8/ICcnO1xuICAgICAgICAgIGNvbC5xdWVyeS5maXJzdF92YWx1ZSA9IGZpbHRlci5xdWVyeT8uZmlyc3RfdmFsdWUgPz8gbnVsbDtcbiAgICAgICAgICBjb2wucXVlcnkuc2Vjb25kX3ZhbHVlID0gZmlsdGVyLnF1ZXJ5Py5zZWNvbmRfdmFsdWUgPz8gbnVsbDtcbiAgICAgICAgICBjb2wucXVlcnkuZmlyc3RfY29uZGl0aW9uID1cbiAgICAgICAgICAgIGZpbHRlci5xdWVyeT8uZmlyc3RfY29uZGl0aW9uID8/XG4gICAgICAgICAgICAoY29sLnR5cGUgIT09ICdkYXRlJyAmJiBjb2wudHlwZSAhPSAnbnVtYmVyJyA/ICdjb250YWluJyA6ICdlcXVhbCcpO1xuICAgICAgICAgIGNvbC5xdWVyeS5zZWNvbmRfY29uZGl0aW9uID0gZmlsdGVyLnF1ZXJ5Py5zZWNvbmRfY29uZGl0aW9uID8/IG51bGw7XG4gICAgICAgICAgY29sLnF1ZXJ5LmNvbmRpdGlvbiA9IGZpbHRlci5xdWVyeT8uY29uZGl0aW9uID8/ICdub25lJztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQ2xlYXIgZmlsdGVyIGlmIG5vdCBwcmVzZW50XG4gICAgICAgIGNvbC5maWx0ZXJWYWx1ZSA9IG51bGw7XG4gICAgICAgIGNvbC5zZWFyY2ggPSAnJztcbiAgICAgICAgY29sLnF1ZXJ5Ll9pZHMgPSBbXTtcbiAgICAgICAgY29sLnF1ZXJ5LmZpcnN0X3ZhbHVlID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8g4pyFIFJlY3Vyc2l2ZWx5IGFwcGx5IGZvciBjaGlsZHJlblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29sLmNoaWxkcmVuKSAmJiBjb2wuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICBjb2wuY2hpbGRyZW4gPSBhd2FpdCB0aGlzLmFwcGx5RmlsdGVyc1RvQ29sdW1ucyhjb2wuY2hpbGRyZW4sIGZpbHRlcnMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjb2x1bW5zO1xuICB9XG5cblxuXG5cblxuXG4gIGFjdGl2ZUZpbHRlcmVkQ29sdW1uczogYW55W10gPSBbXTtcbiAgdXBkYXRlQWN0aXZlRmlsdGVyZWRDb2x1bW5zKGNvbHVtbnM6IGFueVtdKTogYW55W10ge1xuICAgIGNvbnN0IGNvbGxlY3RGaWx0ZXJlZCA9IChjb2xzOiBhbnlbXSk6IGFueVtdID0+IHtcbiAgICAgIGxldCByZXN1bHQ6IGFueVtdID0gW107XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29scy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjb2wgPSBjb2xzW2ldO1xuICAgICAgICBpZiAoY29sLmNoaWxkcmVuICYmIGNvbC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChjb2xsZWN0RmlsdGVyZWQoY29sLmNoaWxkcmVuKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29sLnF1ZXJ5KSB7XG4gICAgICAgICAgY29uc3QgaGFzRHJvcGRvd25GaWx0ZXIgPVxuICAgICAgICAgICAgQXJyYXkuaXNBcnJheShjb2wucXVlcnkuX2lkcykgJiYgY29sLnF1ZXJ5Ll9pZHMubGVuZ3RoID4gMDtcblxuICAgICAgICAgIGNvbnN0IGhhc1ZhbHVlRmlsdGVyID1cbiAgICAgICAgICAgIChjb2wucXVlcnkuZmlyc3RfdmFsdWUgJiYgY29sLnF1ZXJ5LmZpcnN0X3ZhbHVlICE9PSAnJykgfHxcbiAgICAgICAgICAgIChjb2wucXVlcnkuc2Vjb25kX3ZhbHVlICYmIGNvbC5xdWVyeS5zZWNvbmRfdmFsdWUgIT09ICcnKTtcblxuICAgICAgICAgIGlmIChoYXNEcm9wZG93bkZpbHRlciB8fCBoYXNWYWx1ZUZpbHRlcikge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goY29sKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICB0aGlzLmFjdGl2ZUZpbHRlcmVkQ29sdW1ucyA9IFsuLi5jb2xsZWN0RmlsdGVyZWQoY29sdW1ucyldO1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZUZpbHRlcmVkQ29sdW1ucztcbiAgfVxuXG5cblxuICBoYXNGaWVsZENoYW5nZWQoY3VycmVudDogYW55LCBvcmlnaW5hbDogYW55LCB0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgIHJldHVybiBOdW1iZXIoY3VycmVudCkgIT09IE51bWJlcihvcmlnaW5hbCk7XG5cbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIHJldHVybiBTdHJpbmcoY3VycmVudCB8fCAnJykgIT09IFN0cmluZyhvcmlnaW5hbCB8fCAnJyk7XG5cbiAgICAgIGNhc2UgJ2Ryb3Bkb3duJzpcbiAgICAgICAgaWYgKHR5cGVvZiBjdXJyZW50ID09PSAnb2JqZWN0JyAmJiB0eXBlb2Ygb3JpZ2luYWwgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQ/LmlkICE9PSBvcmlnaW5hbD8uaWQgfHwgY3VycmVudD8udmFsdWUgIT09IG9yaWdpbmFsPy52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3VycmVudCAhPT0gb3JpZ2luYWw7XG5cbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICByZXR1cm4gQm9vbGVhbihjdXJyZW50KSAhPT0gQm9vbGVhbihvcmlnaW5hbCk7XG5cbiAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICBjb25zdCBjdXJyZW50RGF0ZSA9IG5ldyBEYXRlKGN1cnJlbnQpLmdldFRpbWUoKTtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxEYXRlID0gbmV3IERhdGUob3JpZ2luYWwpLmdldFRpbWUoKTtcbiAgICAgICAgcmV0dXJuIGlzTmFOKGN1cnJlbnREYXRlKSB8fCBpc05hTihvcmlnaW5hbERhdGUpXG4gICAgICAgICAgPyBjdXJyZW50ICE9PSBvcmlnaW5hbFxuICAgICAgICAgIDogY3VycmVudERhdGUgIT09IG9yaWdpbmFsRGF0ZTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGN1cnJlbnQpICE9PSBKU09OLnN0cmluZ2lmeShvcmlnaW5hbCk7XG4gICAgfVxuICB9XG5cblxuICAvLyBDb3B5IGNvbHVtbiBkYXRhIHRvIGNvbHVtbiBkcm9wZG93biB2YWx1ZXMgaW4gY2FzZSBvZiBhYnNlbmNlXG4gIGFzeW5jIGNvcHlEcm9wZG93bkRhdGFSZWN1cnNpdmVseShjb2x1bW5zOiBhbnlbXSk6IFByb21pc2U8YW55W10+IHtcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2x1bW5zKSB7XG4gICAgICBpZiAoY29sLnR5cGUgPT09ICdkcm9wZG93bicgfHwgY29sLnR5cGUgPT0gJ2FycmF5Jykge1xuICAgICAgICBjb25zdCBkcm9wZG93blZhbHVlcyA9IGNvbC5jb2x1bW5fZHJvcGRvd25fdmFsdWU7XG4gICAgICAgIGNvbnN0IGRhdGFWYWx1ZXMgPSBjb2wuY29sdW1uX2RhdGE7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICghQXJyYXkuaXNBcnJheShkcm9wZG93blZhbHVlcykgfHwgZHJvcGRvd25WYWx1ZXMubGVuZ3RoID09PSAwKSAmJlxuICAgICAgICAgIEFycmF5LmlzQXJyYXkoZGF0YVZhbHVlcykgJiZcbiAgICAgICAgICBkYXRhVmFsdWVzLmxlbmd0aCA+IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29sLmNvbHVtbl9kcm9wZG93bl92YWx1ZSA9IGRhdGFWYWx1ZXMubWFwKGl0ZW0gPT5cbiAgICAgICAgICAgIHR5cGVvZiBpdGVtID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICA/IGl0ZW1cbiAgICAgICAgICAgICAgOiB7IGlkOiBpdGVtLCBuYW1lOiBpdGVtLCB2YWx1ZTogaXRlbSB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShjb2wuY2hpbGRyZW4pICYmIGNvbC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbC5jaGlsZHJlbiA9IGF3YWl0IHRoaXMuY29weURyb3Bkb3duRGF0YVJlY3Vyc2l2ZWx5KGNvbC5jaGlsZHJlbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbHVtbnM7XG4gIH1cblxuXG4gIGZvcm1hdERhdGVWYWx1ZSh2YWx1ZTogYW55LCBtb21lbnRGb3JtYXQ/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHRyeUZvcm1hdCA9IChkYXRlOiBEYXRlKSA9PiB7XG4gICAgICBjb25zdCBhbmd1bGFyRm9ybWF0ID0gbW9tZW50Rm9ybWF0XG4gICAgICAgID8gdGhpcy5jb252ZXJ0TW9tZW50VG9Bbmd1bGFyRGF0ZUZvcm1hdChtb21lbnRGb3JtYXQpXG4gICAgICAgIDogJ2RkL01NL3l5eXknO1xuICAgICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGUsIGFuZ3VsYXJGb3JtYXQpID8/ICctJztcbiAgICB9O1xuXG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4odmFsdWUuZ2V0VGltZSgpKSkge1xuICAgICAgcmV0dXJuIHRyeUZvcm1hdCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGxldCBjbGVhbmVkVmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9eREQvLCAnMDEnKTtcblxuICAgICAgY29uc3QgcGFyc2VkRERNTSA9IHRoaXMucGFyc2VERE1NWVlZWShjbGVhbmVkVmFsdWUpO1xuICAgICAgaWYgKHBhcnNlZERETU0pIHJldHVybiB0cnlGb3JtYXQocGFyc2VkRERNTSk7XG5cbiAgICAgIGlmICghaXNOYU4oRGF0ZS5wYXJzZShjbGVhbmVkVmFsdWUpKSkge1xuICAgICAgICByZXR1cm4gdHJ5Rm9ybWF0KG5ldyBEYXRlKGNsZWFuZWRWYWx1ZSkpO1xuICAgICAgfVxuICAgIH1cblxuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgIWlzTmFOKERhdGUucGFyc2UodmFsdWUpKSkge1xuICAgICAgcmV0dXJuIHRyeUZvcm1hdChuZXcgRGF0ZSh2YWx1ZSkpO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZT8ubmFtZSB8fCB2YWx1ZT8udmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZS52YWx1ZSA/PyB2YWx1ZS5uYW1lID8/ICctJztcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgIT0gbnVsbCkgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG5cbiAgICByZXR1cm4gJy0nO1xuICB9XG5cblxuXG5cbiAgcHJpdmF0ZSBjb252ZXJ0TW9tZW50VG9Bbmd1bGFyRGF0ZUZvcm1hdChtb21lbnRGb3JtYXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFtb21lbnRGb3JtYXQpIHJldHVybiAnbWVkaXVtRGF0ZSc7XG5cbiAgICByZXR1cm4gbW9tZW50Rm9ybWF0XG4gICAgICAucmVwbGFjZSgvREQvZywgJ2RkJylcbiAgICAgIC5yZXBsYWNlKC9EL2csICdkJylcbiAgICAgIC5yZXBsYWNlKC9ZWVlZL2csICd5eXl5JylcbiAgICAgIC5yZXBsYWNlKC9ZWS9nLCAneXknKVxuICAgICAgLnJlcGxhY2UoL01NTU0vZywgJ01NTU0nKVxuICAgICAgLnJlcGxhY2UoL01NTS9nLCAnTU1NJylcbiAgICAgIC5yZXBsYWNlKC9NTS9nLCAnTU0nKVxuICAgICAgLnJlcGxhY2UoL00vZywgJ00nKVxuICAgICAgLnJlcGxhY2UoL2RkZGQvZywgJ0VFRUUnKVxuICAgICAgLnJlcGxhY2UoL2RkZC9nLCAnRUVFJylcbiAgICAgIC5yZXBsYWNlKC9ISC9nLCAnSEgnKVxuICAgICAgLnJlcGxhY2UoL0gvZywgJ0gnKVxuICAgICAgLnJlcGxhY2UoL2hoL2csICdoaCcpXG4gICAgICAucmVwbGFjZSgvaC9nLCAnaCcpXG4gICAgICAucmVwbGFjZSgvbW0vZywgJ21tJylcbiAgICAgIC5yZXBsYWNlKC9tL2csICdtJylcbiAgICAgIC5yZXBsYWNlKC9zcy9nLCAnc3MnKVxuICAgICAgLnJlcGxhY2UoL3MvZywgJ3MnKVxuICAgICAgLnJlcGxhY2UoL0EvZywgJ2EnKVxuICAgICAgLnJlcGxhY2UoL2EvZywgJ2EnKTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VERE1NWVlZWSh2YWx1ZTogc3RyaW5nKTogRGF0ZSB8IG51bGwge1xuICAgIGNvbnN0IG1hdGNoID0gdmFsdWUubWF0Y2goL14oXFxkezJ9KVxcLyhcXGR7Mn0pXFwvKFxcZHs0fSkkLyk7XG4gICAgaWYgKCFtYXRjaCkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBkYXkgPSArbWF0Y2hbMV07XG4gICAgY29uc3QgbW9udGggPSArbWF0Y2hbMl0gLSAxO1xuICAgIGNvbnN0IHllYXIgPSArbWF0Y2hbM107XG5cbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGgsIGRheSk7XG5cbiAgICByZXR1cm4gKGRhdGUuZ2V0RnVsbFllYXIoKSA9PT0geWVhciAmJlxuICAgICAgZGF0ZS5nZXRNb250aCgpID09PSBtb250aCAmJlxuICAgICAgZGF0ZS5nZXREYXRlKCkgPT09IGRheSlcbiAgICAgID8gZGF0ZVxuICAgICAgOiBudWxsO1xuICB9XG5cbn1cblxuXG5cblxuIl19
395
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhLWdyaWQvc3JjL2xpYi9zZXJ2aWNlcy9jb21tb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7O0FBSzNELE1BQU0sT0FBTyxhQUFhO0lBR3hCO1FBRFEsYUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUc3QixzQkFBaUIsR0FBRyxDQUFDLENBQUM7UUE2TTdCLDBCQUFxQixHQUFVLEVBQUUsQ0FBQztJQS9NbEIsQ0FBQztJQUlqQixvQkFBb0IsQ0FBQyxPQUFjO1FBQ2pDLE1BQU0sWUFBWSxHQUFHLENBQUMsT0FBYyxFQUFXLEVBQUU7WUFDL0MsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQzFCLElBQUksR0FBRyxFQUFFLFVBQVU7b0JBQUUsT0FBTyxJQUFJLENBQUM7Z0JBQ2pDLElBQUksR0FBRyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUU7b0JBQ3pCLE9BQU8sWUFBWSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDbkM7Z0JBQ0QsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQztRQUNGLE9BQU8sWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxPQUFjO1FBQ25DLE1BQU0sWUFBWSxHQUFHLENBQUMsT0FBYyxFQUFXLEVBQUU7WUFDL0MsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsR0FB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QUN6RCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDZixDQUFDOytHQWhkWSxhQUFhO21IQUFiLGFBQWEsY0FGWixNQUFNOzs0RkFFUCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU1RBVFVTRVNfQkFER0VfTUFQIH0gZnJvbSAnLi4vZGF0YS1ncmlkL3N0YXR1c2VzJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIENvbW1vblNlcnZpY2Uge1xuXG4gIHByaXZhdGUgZGF0ZVBpcGUgPSBpbmplY3QoRGF0ZVBpcGUpOyBcbiAgY29uc3RydWN0b3IoKSB7IH1cblxuICBwdWJsaWMgbWFpbkNvbnRhaW5lckxlZnQgPSAwO1xuXG4gIGdldGhhc1Zpc2libGVDb2x1bW5zKGNvbHVtbnM6IGFueVtdKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY2hlY2tWaXNpYmxlID0gKGNvbHVtbnM6IGFueVtdKTogYm9vbGVhbiA9PiB7XG4gICAgICByZXR1cm4gY29sdW1ucy5zb21lKChjb2wpID0+IHtcbiAgICAgICAgaWYgKGNvbD8uaXNfdmlzaWJsZSkgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmIChjb2w/LmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gY2hlY2tWaXNpYmxlKGNvbC5jaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICByZXR1cm4gY2hlY2tWaXNpYmxlKGNvbHVtbnMpO1xuICB9XG5cbiAgZ2V0aGFzSW5WaXNpYmxlQ29sdW1ucyhjb2x1bW5zOiBhbnlbXSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNoZWNrVmlzaWJsZSA9IChjb2x1bW5zOiBhbnlbXSk6IGJvb2xlYW4gPT4ge1xuICAgICAgcmV0dXJuIGNvbHVtbnMuc29tZSgoY29sKSA9PiB7XG4gICAgICAgIGlmICghY29sPy5pc192aXNpYmxlKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKGNvbD8uY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiBjaGVja1Zpc2libGUoY29sLmNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHJldHVybiBjaGVja1Zpc2libGUoY29sdW1ucyk7XG4gIH1cblxuXG4gIGdldFRvdGFsQ29sdW1uc0xlbmd0aChjb2x1bW5zOiBhbnlbXSk6IG51bWJlciB7XG4gICAgbGV0IGNvdW50ID0gMDtcblxuICAgIGNvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgaWYgKGNvbC5jaGlsZHJlbiAmJiBBcnJheS5pc0FycmF5KGNvbC5jaGlsZHJlbikgJiYgY29sLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICBjb3VudCArPSBjb2wuY2hpbGRyZW4ubGVuZ3RoOyAvLyBjb3VudCBjaGlsZHJlbiBpbnN0ZWFkIG9mIHBhcmVudFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY291bnQgKz0gMTsgLy8gY291bnQgcGFyZW50IGRpcmVjdGx5XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY291bnQ7XG4gIH1cblxuICBnZXRoYXNSaWdodFBpbm5lZENvbHVtbnMoY29sdW1uczogYW55W10pOiBib29sZWFuIHtcbiAgICBjb25zdCBjaGVja1Bpbm5lZFJpZ2h0ID0gKGNvbHVtbnM6IGFueVtdKTogYm9vbGVhbiA9PiB7XG4gICAgICByZXR1cm4gY29sdW1ucy5zb21lKChjb2wpID0+IHtcbiAgICAgICAgaWYgKGNvbD8ucGlubmVkID09PSAncmlnaHQnICYmIGNvbD8uaXNfdmlzaWJsZSkgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmIChjb2w/LmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gY2hlY2tQaW5uZWRSaWdodChjb2wuY2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgcmV0dXJuIGNoZWNrUGlubmVkUmlnaHQoY29sdW1ucyk7XG4gIH1cblxuICBnZXRoYXNMZWZ0UGlubmVkQ29sdW1ucyhjb2x1bW5zOiBhbnlbXSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNoZWNrUGlubmVkUmlnaHQgPSAoY29sdW1uczogYW55W10pOiBib29sZWFuID0+IHtcbiAgICAgIHJldHVybiBjb2x1bW5zLnNvbWUoKGNvbCkgPT4ge1xuICAgICAgICBpZiAoY29sPy5waW5uZWQgPT09ICdsZWZ0JyAmJiBjb2w/LmlzX3Zpc2libGUpIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAoY29sPy5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIGNoZWNrUGlubmVkUmlnaHQoY29sLmNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHJldHVybiBjaGVja1Bpbm5lZFJpZ2h0KGNvbHVtbnMpO1xuICB9XG5cblxuICBnZXRFeHBhbmRlZFJvd0NvdW50KGRhdGE6IGFueVtdKTogbnVtYmVyIHtcbiAgICBsZXQgZ3JvdXBDb3VudCA9IDA7XG4gICAgbGV0IHJvd0NvdW50ID0gMDtcblxuICAgIGRhdGEuZm9yRWFjaChncm91cCA9PiB7XG4gICAgICBpZiAoZ3JvdXA/LmlzR3JvdXApIHtcbiAgICAgICAgZ3JvdXBDb3VudCsrO1xuXG4gICAgICAgIGlmIChncm91cD8uaXNFeHBhbmQgJiYgQXJyYXkuaXNBcnJheShncm91cD8uY2hpbGRyZW4pKSB7XG4gICAgICAgICAgZ3JvdXAuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKGNoaWxkLmlzR3JvdXApIHtcbiAgICAgICAgICAgICAgaWYgKGNoaWxkLmlzRXhwYW5kICYmIEFycmF5LmlzQXJyYXkoY2hpbGQuY2hpbGRyZW4pKSB7XG4gICAgICAgICAgICAgICAgcm93Q291bnQgKz0gY2hpbGQuY2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByb3dDb3VudCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoZ3JvdXBDb3VudCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGRhdGEubGVuZ3RoO1xuICAgIH1cblxuICAgIHJldHVybiBncm91cENvdW50ICsgcm93Q291bnQ7XG4gIH1cblxuXG4gIGdldEZpbHRlcnNGcm9tQ29sdW1ucyhjb2x1bW5zOiBhbnlbXSwgZmlsdGVyc0NvbmZpZzogYW55W10pOiBhbnlbXSB7XG4gICAgY29uc3QgcmVzdWx0OiBhbnlbXSA9IFtdO1xuXG4gICAgY29uc3QgY2hlY2tDb2x1bW4gPSAoY29sOiBhbnkpID0+IHtcbiAgICAgIGlmIChjb2wucXVlcnk/LmNvbmRpdGlvbiA9PT0gJ25vbmUnKSB7XG4gICAgICAgIGNvbC5xdWVyeS5zZWNvbmRfdmFsdWUgPSBudWxsO1xuICAgICAgICBjb2wucXVlcnkuc2Vjb25kX2NvbmRpdGlvbiA9IG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCBoYXNGaXJzdFZhbHVlID0gY29sLnF1ZXJ5Py5maXJzdF92YWx1ZSAhPSBudWxsICYmIGNvbC5xdWVyeT8uZmlyc3RfdmFsdWUgIT09IFwiXCIgJiYgZmlsdGVyc0NvbmZpZy5zb21lKChlbGUpID0+IGVsZS5maWVsZCA9PSBjb2wuZmllbGQpO1xuICAgICAgY29uc3QgaGFzSWRzID0gQXJyYXkuaXNBcnJheShjb2wucXVlcnk/Ll9pZHMpICYmIGNvbC5xdWVyeS5faWRzLmxlbmd0aCA+IDAgJiYgZmlsdGVyc0NvbmZpZy5zb21lKChlbGUpID0+IGVsZS5maWVsZCA9PSBjb2wuZmllbGQpO1xuICAgICAgaWYgKGhhc0ZpcnN0VmFsdWUgfHwgaGFzSWRzKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICBzZWFyY2g6IGNvbC5zZWFyY2ggPz8gXCJcIixcbiAgICAgICAgICBmaWVsZDogY29sLmZpZWxkLFxuICAgICAgICAgIHR5cGU6IGNvbC50eXBlLFxuICAgICAgICAgIF9pZHM6IChjb2wudHlwZSA9PSAnZHJvcGRvd24nIHx8IGNvbC50eXBlID09ICdhcnJheScpID8gY29sLnF1ZXJ5Py5faWRzIDogW10sXG4gICAgICAgICAgcXVlcnk6IChjb2wudHlwZSA9PSAnZHJvcGRvd24nIHx8IGNvbC50eXBlID09ICdhcnJheScpID8gbnVsbCA6IChjb2w/LnF1ZXJ5Py5maXJzdF92YWx1ZSA/IGNvbD8ucXVlcnkgOiBudWxsKVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29sLmNoaWxkcmVuKSAmJiBjb2wuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICBjb2wuY2hpbGRyZW4uZm9yRWFjaChjaGVja0NvbHVtbik7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb2x1bW5zLmZvckVhY2goY2hlY2tDb2x1bW4pO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGFzeW5jIGFwcGx5RmlsdGVyc1RvQ29sdW1ucyhjb2x1bW5zOiBhbnlbXSwgZmlsdGVyczogYW55W10pOiBQcm9taXNlPGFueVtdPiB7XG4gICAgZm9yIChjb25zdCBjb2wgb2YgY29sdW1ucykge1xuICAgICAgaWYgKCFjb2wucXVlcnkpIHtcbiAgICAgICAgY29sLnF1ZXJ5ID0ge1xuICAgICAgICAgIGZpcnN0X3ZhbHVlOiBudWxsLFxuICAgICAgICAgIHNlY29uZF92YWx1ZTogbnVsbCxcbiAgICAgICAgICBmaXJzdF9jb25kaXRpb246IGNvbC50eXBlICE9PSAnZGF0ZScgJiYgY29sLnR5cGUgIT09ICdudW1iZXInICYmICBjb2wudHlwZSAhPT0gJ3RpbWUnPyAnY29udGFpbicgOiAnZXF1YWwnLFxuICAgICAgICAgIHNlY29uZF9jb25kaXRpb246IG51bGwsXG4gICAgICAgICAgY29uZGl0aW9uOiAnbm9uZScsXG4gICAgICAgICAgX2lkczogW11cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmlsdGVyID0gZmlsdGVycy5maW5kKGYgPT4gZi5maWVsZCA9PT0gY29sLmZpZWxkKTtcblxuICAgICAgaWYgKGZpbHRlcikge1xuICAgICAgICBpZiAoY29sLnR5cGUgPT09ICdkcm9wZG93bicgfHwgY29sLnR5cGUgPT0gJ2FycmF5Jykge1xuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSWRzID0gZmlsdGVyLl9pZHMgPz8gW107XG4gICAgICAgICAgY29uc3QgZHJvcGRvd25WYWx1ZXMgPSBjb2wuY29sdW1uX2Ryb3Bkb3duX3ZhbHVlID8/IFtdO1xuXG4gICAgICAgICAgLy8g4pyFIE1hcCBkZXBlbmRpbmcgb24gZHJvcGRvd24gdmFsdWUgc3RydWN0dXJlXG4gICAgICAgICAgbGV0IHNlbGVjdGVkTGFiZWxzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZHJvcGRvd25WYWx1ZXMpICYmIGRyb3Bkb3duVmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZHJvcGRvd25WYWx1ZXNbMF0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgIC8vIG9iamVjdC1iYXNlZCBkcm9wZG93bnM6IHsgaWQsIG5hbWUvbGFiZWwvdmFsdWUvdGV4dCB9XG4gICAgICAgICAgICAgIHNlbGVjdGVkTGFiZWxzID0gZHJvcGRvd25WYWx1ZXNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKG9wdCA9PiBzZWxlY3RlZElkcy5pbmNsdWRlcyhvcHQuaWQpKVxuICAgICAgICAgICAgICAgIC5tYXAob3B0ID0+IG9wdC5uYW1lID8/IG9wdC5sYWJlbCA/PyBvcHQudmFsdWUgPz8gb3B0LnRleHQgPz8gJycpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gc3RyaW5nLWJhc2VkIGRyb3Bkb3duc1xuICAgICAgICAgICAgICBzZWxlY3RlZExhYmVscyA9IGRyb3Bkb3duVmFsdWVzLmZpbHRlcihvcHQgPT4gc2VsZWN0ZWRJZHMuaW5jbHVkZXMob3B0KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8g4pyFIFN0b3JlIHJlYWRhYmxlIHRleHQgaW4gZmlsdGVyVmFsdWUgKGNvbW1hLXNlcGFyYXRlZClcbiAgICAgICAgICBjb2wuZmlsdGVyVmFsdWUgPSBzZWxlY3RlZExhYmVscy5qb2luKCcsICcpO1xuXG4gICAgICAgICAgLy8gbWFpbnRhaW4gcXVlcnkgc3RhdGVcbiAgICAgICAgICBjb2wucXVlcnkuX2lkcyA9IHNlbGVjdGVkSWRzO1xuICAgICAgICAgIGNvbC5zZWFyY2ggPSBmaWx0ZXIuc2VhcmNoID8/ICcnO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8g4pyFIE5vbi1kcm9wZG93biBmaWx0ZXJzICh0ZXh0L2RhdGUvbnVtYmVyKVxuICAgICAgICAgIGNvbC5maWx0ZXJWYWx1ZSA9IGZpbHRlci5zZWFyY2ggfHwgZmlsdGVyLnF1ZXJ5Py5maXJzdF92YWx1ZSB8fCAnJztcbiAgICAgICAgICBjb2wuc2VhcmNoID0gZmlsdGVyLnNlYXJjaCA/PyAnJztcbiAgICAgICAgICBjb2wucXVlcnkuZmlyc3RfdmFsdWUgPSBmaWx0ZXIucXVlcnk/LmZpcnN0X3ZhbHVlID8/IG51bGw7XG4gICAgICAgICAgY29sLnF1ZXJ5LnNlY29uZF92YWx1ZSA9IGZpbHRlci5xdWVyeT8uc2Vjb25kX3ZhbHVlID8/IG51bGw7XG4gICAgICAgICAgY29sLnF1ZXJ5LmZpcnN0X2NvbmRpdGlvbiA9XG4gICAgICAgICAgICBmaWx0ZXIucXVlcnk/LmZpcnN0X2NvbmRpdGlvbiA/P1xuICAgICAgICAgICAgKGNvbC50eXBlICE9PSAnZGF0ZScgJiYgY29sLnR5cGUgIT0gJ251bWJlcicgPyAnY29udGFpbicgOiAnZXF1YWwnKTtcbiAgICAgICAgICBjb2wucXVlcnkuc2Vjb25kX2NvbmRpdGlvbiA9IGZpbHRlci5xdWVyeT8uc2Vjb25kX2NvbmRpdGlvbiA/PyBudWxsO1xuICAgICAgICAgIGNvbC5xdWVyeS5jb25kaXRpb24gPSBmaWx0ZXIucXVlcnk/LmNvbmRpdGlvbiA/PyAnbm9uZSc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENsZWFyIGZpbHRlciBpZiBub3QgcHJlc2VudFxuICAgICAgICBjb2wuZmlsdGVyVmFsdWUgPSBudWxsO1xuICAgICAgICBjb2wuc2VhcmNoID0gJyc7XG4gICAgICAgIGNvbC5xdWVyeS5faWRzID0gW107XG4gICAgICAgIGNvbC5xdWVyeS5maXJzdF92YWx1ZSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIOKchSBSZWN1cnNpdmVseSBhcHBseSBmb3IgY2hpbGRyZW5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvbC5jaGlsZHJlbikgJiYgY29sLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29sLmNoaWxkcmVuID0gYXdhaXQgdGhpcy5hcHBseUZpbHRlcnNUb0NvbHVtbnMoY29sLmNoaWxkcmVuLCBmaWx0ZXJzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY29sdW1ucztcbiAgfVxuXG5cblxuXG5cblxuICBhY3RpdmVGaWx0ZXJlZENvbHVtbnM6IGFueVtdID0gW107XG4gIHVwZGF0ZUFjdGl2ZUZpbHRlcmVkQ29sdW1ucyhjb2x1bW5zOiBhbnlbXSk6IGFueVtdIHtcbiAgICBjb25zdCBjb2xsZWN0RmlsdGVyZWQgPSAoY29sczogYW55W10pOiBhbnlbXSA9PiB7XG4gICAgICBsZXQgcmVzdWx0OiBhbnlbXSA9IFtdO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY29sID0gY29sc1tpXTtcbiAgICAgICAgaWYgKGNvbC5jaGlsZHJlbiAmJiBjb2wuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoY29sbGVjdEZpbHRlcmVkKGNvbC5jaGlsZHJlbikpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbC5xdWVyeSkge1xuICAgICAgICAgIGNvbnN0IGhhc0Ryb3Bkb3duRmlsdGVyID1cbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoY29sLnF1ZXJ5Ll9pZHMpICYmIGNvbC5xdWVyeS5faWRzLmxlbmd0aCA+IDA7XG5cbiAgICAgICAgICBjb25zdCBoYXNWYWx1ZUZpbHRlciA9XG4gICAgICAgICAgICAoY29sLnF1ZXJ5LmZpcnN0X3ZhbHVlICYmIGNvbC5xdWVyeS5maXJzdF92YWx1ZSAhPT0gJycpIHx8XG4gICAgICAgICAgICAoY29sLnF1ZXJ5LnNlY29uZF92YWx1ZSAmJiBjb2wucXVlcnkuc2Vjb25kX3ZhbHVlICE9PSAnJyk7XG5cbiAgICAgICAgICBpZiAoaGFzRHJvcGRvd25GaWx0ZXIgfHwgaGFzVmFsdWVGaWx0ZXIpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGNvbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gICAgdGhpcy5hY3RpdmVGaWx0ZXJlZENvbHVtbnMgPSBbLi4uY29sbGVjdEZpbHRlcmVkKGNvbHVtbnMpXTtcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVGaWx0ZXJlZENvbHVtbnM7XG4gIH1cblxuXG5cbiAgaGFzRmllbGRDaGFuZ2VkKGN1cnJlbnQ6IGFueSwgb3JpZ2luYWw6IGFueSwgdHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICByZXR1cm4gTnVtYmVyKGN1cnJlbnQpICE9PSBOdW1iZXIob3JpZ2luYWwpO1xuXG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICByZXR1cm4gU3RyaW5nKGN1cnJlbnQgfHwgJycpICE9PSBTdHJpbmcob3JpZ2luYWwgfHwgJycpO1xuXG4gICAgICBjYXNlICdkcm9wZG93bic6XG4gICAgICAgIGlmICh0eXBlb2YgY3VycmVudCA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG9yaWdpbmFsID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIHJldHVybiBjdXJyZW50Py5pZCAhPT0gb3JpZ2luYWw/LmlkIHx8IGN1cnJlbnQ/LnZhbHVlICE9PSBvcmlnaW5hbD8udmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQgIT09IG9yaWdpbmFsO1xuXG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4oY3VycmVudCkgIT09IEJvb2xlYW4ob3JpZ2luYWwpO1xuXG4gICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgY29uc3QgY3VycmVudERhdGUgPSBuZXcgRGF0ZShjdXJyZW50KS5nZXRUaW1lKCk7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsRGF0ZSA9IG5ldyBEYXRlKG9yaWdpbmFsKS5nZXRUaW1lKCk7XG4gICAgICAgIHJldHVybiBpc05hTihjdXJyZW50RGF0ZSkgfHwgaXNOYU4ob3JpZ2luYWxEYXRlKVxuICAgICAgICAgID8gY3VycmVudCAhPT0gb3JpZ2luYWxcbiAgICAgICAgICA6IGN1cnJlbnREYXRlICE9PSBvcmlnaW5hbERhdGU7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShjdXJyZW50KSAhPT0gSlNPTi5zdHJpbmdpZnkob3JpZ2luYWwpO1xuICAgIH1cbiAgfVxuXG5cbiAgLy8gQ29weSBjb2x1bW4gZGF0YSB0byBjb2x1bW4gZHJvcGRvd24gdmFsdWVzIGluIGNhc2Ugb2YgYWJzZW5jZVxuICBhc3luYyBjb3B5RHJvcGRvd25EYXRhUmVjdXJzaXZlbHkoY29sdW1uczogYW55W10pOiBQcm9taXNlPGFueVtdPiB7XG4gICAgZm9yIChjb25zdCBjb2wgb2YgY29sdW1ucykge1xuICAgICAgaWYgKGNvbC50eXBlID09PSAnZHJvcGRvd24nIHx8IGNvbC50eXBlID09ICdhcnJheScpIHtcbiAgICAgICAgY29uc3QgZHJvcGRvd25WYWx1ZXMgPSBjb2wuY29sdW1uX2Ryb3Bkb3duX3ZhbHVlO1xuICAgICAgICBjb25zdCBkYXRhVmFsdWVzID0gY29sLmNvbHVtbl9kYXRhO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAoIUFycmF5LmlzQXJyYXkoZHJvcGRvd25WYWx1ZXMpIHx8IGRyb3Bkb3duVmFsdWVzLmxlbmd0aCA9PT0gMCkgJiZcbiAgICAgICAgICBBcnJheS5pc0FycmF5KGRhdGFWYWx1ZXMpICYmXG4gICAgICAgICAgZGF0YVZhbHVlcy5sZW5ndGggPiAwXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbC5jb2x1bW5fZHJvcGRvd25fdmFsdWUgPSBkYXRhVmFsdWVzLm1hcChpdGVtID0+XG4gICAgICAgICAgICB0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgPyBpdGVtXG4gICAgICAgICAgICAgIDogeyBpZDogaXRlbSwgbmFtZTogaXRlbSwgdmFsdWU6IGl0ZW0gfVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29sLmNoaWxkcmVuKSAmJiBjb2wuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICBjb2wuY2hpbGRyZW4gPSBhd2FpdCB0aGlzLmNvcHlEcm9wZG93bkRhdGFSZWN1cnNpdmVseShjb2wuY2hpbGRyZW4pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjb2x1bW5zO1xuICB9XG5cblxuICBmb3JtYXREYXRlVmFsdWUodmFsdWU6IGFueSwgbW9tZW50Rm9ybWF0Pzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCB0cnlGb3JtYXQgPSAoZGF0ZTogRGF0ZSkgPT4ge1xuICAgICAgY29uc3QgYW5ndWxhckZvcm1hdCA9IG1vbWVudEZvcm1hdFxuICAgICAgICA/IHRoaXMuY29udmVydE1vbWVudFRvQW5ndWxhckRhdGVGb3JtYXQobW9tZW50Rm9ybWF0KVxuICAgICAgICA6ICdkZC9NTS95eXl5JztcbiAgICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShkYXRlLCBhbmd1bGFyRm9ybWF0KSA/PyAnLSc7XG4gICAgfTtcblxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKHZhbHVlLmdldFRpbWUoKSkpIHtcbiAgICAgIHJldHVybiB0cnlGb3JtYXQodmFsdWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBsZXQgY2xlYW5lZFZhbHVlID0gdmFsdWUucmVwbGFjZSgvXkRELywgJzAxJyk7XG5cbiAgICAgIGNvbnN0IHBhcnNlZERETU0gPSB0aGlzLnBhcnNlRERNTVlZWVkoY2xlYW5lZFZhbHVlKTtcbiAgICAgIGlmIChwYXJzZWRERE1NKSByZXR1cm4gdHJ5Rm9ybWF0KHBhcnNlZERETU0pO1xuXG4gICAgICBpZiAoIWlzTmFOKERhdGUucGFyc2UoY2xlYW5lZFZhbHVlKSkpIHtcbiAgICAgICAgcmV0dXJuIHRyeUZvcm1hdChuZXcgRGF0ZShjbGVhbmVkVmFsdWUpKTtcbiAgICAgIH1cbiAgICB9XG5cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmICFpc05hTihEYXRlLnBhcnNlKHZhbHVlKSkpIHtcbiAgICAgIHJldHVybiB0cnlGb3JtYXQobmV3IERhdGUodmFsdWUpKTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWU/Lm5hbWUgfHwgdmFsdWU/LnZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUudmFsdWUgPz8gdmFsdWUubmFtZSA/PyAnLSc7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlICE9IG51bGwpIHJldHVybiBTdHJpbmcodmFsdWUpO1xuXG4gICAgcmV0dXJuICctJztcbiAgfVxuXG5cblxuXG4gIHByaXZhdGUgY29udmVydE1vbWVudFRvQW5ndWxhckRhdGVGb3JtYXQobW9tZW50Rm9ybWF0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghbW9tZW50Rm9ybWF0KSByZXR1cm4gJ21lZGl1bURhdGUnO1xuXG4gICAgcmV0dXJuIG1vbWVudEZvcm1hdFxuICAgICAgLnJlcGxhY2UoL0REL2csICdkZCcpXG4gICAgICAucmVwbGFjZSgvRC9nLCAnZCcpXG4gICAgICAucmVwbGFjZSgvWVlZWS9nLCAneXl5eScpXG4gICAgICAucmVwbGFjZSgvWVkvZywgJ3l5JylcbiAgICAgIC5yZXBsYWNlKC9NTU1NL2csICdNTU1NJylcbiAgICAgIC5yZXBsYWNlKC9NTU0vZywgJ01NTScpXG4gICAgICAucmVwbGFjZSgvTU0vZywgJ01NJylcbiAgICAgIC5yZXBsYWNlKC9NL2csICdNJylcbiAgICAgIC5yZXBsYWNlKC9kZGRkL2csICdFRUVFJylcbiAgICAgIC5yZXBsYWNlKC9kZGQvZywgJ0VFRScpXG4gICAgICAucmVwbGFjZSgvSEgvZywgJ0hIJylcbiAgICAgIC5yZXBsYWNlKC9IL2csICdIJylcbiAgICAgIC5yZXBsYWNlKC9oaC9nLCAnaGgnKVxuICAgICAgLnJlcGxhY2UoL2gvZywgJ2gnKVxuICAgICAgLnJlcGxhY2UoL21tL2csICdtbScpXG4gICAgICAucmVwbGFjZSgvbS9nLCAnbScpXG4gICAgICAucmVwbGFjZSgvc3MvZywgJ3NzJylcbiAgICAgIC5yZXBsYWNlKC9zL2csICdzJylcbiAgICAgIC5yZXBsYWNlKC9BL2csICdhJylcbiAgICAgIC5yZXBsYWNlKC9hL2csICdhJyk7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlRERNTVlZWVkodmFsdWU6IHN0cmluZyk6IERhdGUgfCBudWxsIHtcbiAgICBjb25zdCBtYXRjaCA9IHZhbHVlLm1hdGNoKC9eKFxcZHsyfSlcXC8oXFxkezJ9KVxcLyhcXGR7NH0pJC8pO1xuICAgIGlmICghbWF0Y2gpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgZGF5ID0gK21hdGNoWzFdO1xuICAgIGNvbnN0IG1vbnRoID0gK21hdGNoWzJdIC0gMTtcbiAgICBjb25zdCB5ZWFyID0gK21hdGNoWzNdO1xuXG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCBkYXkpO1xuXG4gICAgcmV0dXJuIChkYXRlLmdldEZ1bGxZZWFyKCkgPT09IHllYXIgJiZcbiAgICAgIGRhdGUuZ2V0TW9udGgoKSA9PT0gbW9udGggJiZcbiAgICAgIGRhdGUuZ2V0RGF0ZSgpID09PSBkYXkpXG4gICAgICA/IGRhdGVcbiAgICAgIDogbnVsbDtcbiAgfVxuXG5cbiAgZ2V0Q2VsbENsYXNzZXMoY29sdW1uOiBhbnksIHZhbHVlOiBhbnkpOiBzdHJpbmcge1xuICAgICAgaWYgKCF2YWx1ZSB8fCAhY29sdW1uPy5maWVsZCB8fCBjb2x1bW4/LmNlbGxSZW5kZXJlcikgcmV0dXJuICcnO1xuICBcbiAgICAgIGxldCB2YWw6IGFueSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgPyB2YWx1ZT8udmFsdWUgPz8gdmFsdWUgOiB2YWx1ZTtcbiAgICAgIGNvbnN0IGZpZWxkID0gY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCk7XG4gIFxuICAgICAgaWYgKGZpZWxkID09PSAnZHVlX2RhdGUnKSB7XG4gICAgICAgIGNvbnN0IGR1ZURhdGUgPSBuZXcgRGF0ZSh2YWwpO1xuICAgICAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XG4gICAgICAgIGNvbnN0IHRvZGF5VVRDID0gRGF0ZS5VVEModG9kYXkuZ2V0RnVsbFllYXIoKSwgdG9kYXkuZ2V0TW9udGgoKSwgdG9kYXkuZ2V0RGF0ZSgpKTtcbiAgICAgICAgY29uc3QgZHVlVVRDID0gRGF0ZS5VVEMoZHVlRGF0ZS5nZXRGdWxsWWVhcigpLCBkdWVEYXRlLmdldE1vbnRoKCksIGR1ZURhdGUuZ2V0RGF0ZSgpKTtcbiAgXG4gICAgICAgIGlmIChkdWVVVEMgPCB0b2RheVVUQykge1xuICAgICAgICAgIHJldHVybiAndGV4dC1kYW5nZXInO1xuICAgICAgICB9XG4gICAgICAgIC8vIGVsc2UgaWYoZHVlVVRDID09PSB0b2RheVVUQyl7XG4gICAgICAgIC8vICAgcmV0dXJuICd0ZXh0LXdhcm5pbmcnO1xuICAgICAgICAvLyB9XG4gIFxuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gIFxuICBcbiAgICAgIGNvbnN0IHN0YXR1cyA9IHZhbD8udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKFxuICAgICAgICBmaWVsZCA9PT0gJ3N0YXR1cycgfHxcbiAgICAgICAgZmllbGQgPT09ICdhY2NvdW50X3N0YXR1cycgfHxcbiAgICAgICAgZmllbGQgPT09ICdhdmFpbHN0YXR1cycgfHxcbiAgICAgICAgZmllbGQgPT09ICdpc19jdXN0b21fZ3JhZGUnXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIFNUQVRVU0VTX0JBREdFX01BUFtzdGF0dXNdIHx8ICdiYWRnZSBiYWRnZS1zZWNvbmRhcnknO1xuICAgICAgfVxuICBcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cblxuIHJlcGxhY2VDb2x1bW5RdWVyeShcbiAgICBjb2x1bW5zOiBhbnlbXSxcbiAgICB0YXJnZXRDb2w6IGFueSxcbiAgICBuZXdRdWVyeTogYW55XG4gICk6IGJvb2xlYW4ge1xuICAgIGZvciAoY29uc3QgY29sIG9mIGNvbHVtbnMpIHtcbiAgICAgIGlmIChjb2wuZmllbGQgPT09IHRhcmdldENvbC5maWVsZCkge1xuICAgICAgICBjb2wucXVlcnkgPSB7IC4uLm5ld1F1ZXJ5IH07XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGNvbC5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5yZXBsYWNlQ29sdW1uUXVlcnkoY29sLmNoaWxkcmVuLCB0YXJnZXRDb2wsIG5ld1F1ZXJ5KTtcbiAgICAgICAgaWYgKGZvdW5kKSByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiBjYXBpdGFsaXplU3RhdHVzKHZhbHVlOiBhbnkpOiBzdHJpbmcge1xuICBpZiAoIXZhbHVlKSByZXR1cm4gJyc7XG4gIGxldCBzdHIgPSBTdHJpbmcodmFsdWUpLnRyaW0oKTtcbiAgc3RyID0gc3RyLnJlcGxhY2UoL1tfLV0vZywgJyAnKTtcbiAgXG4gIGlmIChzdHIuaW5jbHVkZXMoJyAnKSkge1xuICAgIHJldHVybiBzdHJcbiAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAuc3BsaXQoJyAnKVxuICAgICAgLmZpbHRlcih3b3JkID0+IHdvcmQubGVuZ3RoID4gMClcbiAgICAgIC5tYXAod29yZCA9PiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKSlcbiAgICAgIC5qb2luKCcgJyk7XG4gIH1cbiAgXG4gIHN0ciA9IHN0clxuICAgIC5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCAnJDEgJDInKVxuICAgIC5yZXBsYWNlKC8oW0EtWl0pKFtBLVpdW2Etel0pL2csICckMSAkMicpO1xuICBcbiAgcmV0dXJuIHN0clxuICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgLnNwbGl0KCcgJylcbiAgICAuZmlsdGVyKHdvcmQgPT4gd29yZC5sZW5ndGggPiAwKVxuICAgIC5tYXAod29yZCA9PiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKSlcbiAgICAuam9pbignICcpO1xufVxuXG59XG5cblxuXG5cbiJdfQ==
@@ -0,0 +1,59 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/platform-browser";
4
+ export class HtmlContentSanitizerService {
5
+ constructor(sanitizer) {
6
+ this.sanitizer = sanitizer;
7
+ }
8
+ cleanEditorContent(content) {
9
+ if (!content) {
10
+ return '';
11
+ }
12
+ let decoded = this.decodeHtml(content);
13
+ decoded = this.stripUnwantedTags(decoded);
14
+ decoded = this.normalizeTableStructure(decoded);
15
+ decoded = this.applyInlineStyles(decoded);
16
+ decoded = this.styleImages(decoded);
17
+ return this.sanitizer.bypassSecurityTrustHtml(decoded);
18
+ }
19
+ // ------------------ helpers ------------------
20
+ decodeHtml(content) {
21
+ const textarea = document.createElement('textarea');
22
+ textarea.innerHTML = content;
23
+ return textarea.value.replace(/&nbsp;/g, ' ');
24
+ }
25
+ stripUnwantedTags(html) {
26
+ return html.replace(/<\/?(span|p|thead|tbody|tfoot)[^>]*>/gi, '');
27
+ }
28
+ normalizeTableStructure(html) {
29
+ return html
30
+ .replace(/<table[^>]*>/gi, '<table>')
31
+ .replace(/<tr[^>]*>/gi, '<tr>')
32
+ .replace(/<th[^>]*>/gi, '<th>')
33
+ .replace(/<td[^>]*>/gi, '<td>');
34
+ }
35
+ applyInlineStyles(html) {
36
+ return html
37
+ .replace(/<table([^>]*)>/gi, `<table style="width:100%;border-collapse:collapse;padding:20px;font-size:14px;background:#fff;"$1>`)
38
+ .replace(/<tr([^>]*)>/gi, `<tr style="border-bottom:1px solid #ccc;"$1>`)
39
+ .replace(/<th([^>]*)>/gi, `<th style="background:#f0f0f0;font-weight:600;font-size:16px;color:#2A1F73;border:1px solid #ccc;padding:12px 20px;text-align:left;"$1>`)
40
+ .replace(/<td([^>]*)>/gi, `<td style="min-width:120px;border:1px solid #ccc;padding:12px 20px;text-align:left;"$1>`);
41
+ }
42
+ styleImages(html) {
43
+ return html.replace(/<img([^>]*)>/gi, (match, attrs) => {
44
+ if (/style=/.test(attrs)) {
45
+ return match;
46
+ }
47
+ return `<img style="width:30%;height:30%;border-radius:16px;padding-top:15px;padding-bottom:10px;"${attrs}>`;
48
+ });
49
+ }
50
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HtmlContentSanitizerService, deps: [{ token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Injectable }); }
51
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HtmlContentSanitizerService, providedIn: 'root' }); }
52
+ }
53
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HtmlContentSanitizerService, decorators: [{
54
+ type: Injectable,
55
+ args: [{
56
+ providedIn: 'root'
57
+ }]
58
+ }], ctorParameters: function () { return [{ type: i1.DomSanitizer }]; } });
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRtbC1jb250ZW50LXNhbml0aXplci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS1ncmlkL3NyYy9saWIvc2VydmljZXMvaHRtbC1jb250ZW50LXNhbml0aXplci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQU0zQyxNQUFNLE9BQU8sMkJBQTJCO0lBRXRDLFlBQW9CLFNBQXVCO1FBQXZCLGNBQVMsR0FBVCxTQUFTLENBQWM7SUFBRyxDQUFDO0lBRS9DLGtCQUFrQixDQUFDLE9BQWtDO1FBQ25ELElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDWixPQUFPLEVBQUUsQ0FBQztTQUNYO1FBRUQsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2QyxPQUFPLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFDLE9BQU8sR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEQsT0FBTyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVwQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVELGdEQUFnRDtJQUV4QyxVQUFVLENBQUMsT0FBZTtRQUNoQyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3BELFFBQVEsQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDO1FBQzdCLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxJQUFZO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyx3Q0FBd0MsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRU8sdUJBQXVCLENBQUMsSUFBWTtRQUMxQyxPQUFPLElBQUk7YUFDUixPQUFPLENBQUMsZ0JBQWdCLEVBQUUsU0FBUyxDQUFDO2FBQ3BDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDO2FBQzlCLE9BQU8sQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDO2FBQzlCLE9BQU8sQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVPLGlCQUFpQixDQUFDLElBQVk7UUFDcEMsT0FBTyxJQUFJO2FBQ1IsT0FBTyxDQUNOLGtCQUFrQixFQUNsQixvR0FBb0csQ0FDckc7YUFDQSxPQUFPLENBQ04sZUFBZSxFQUNmLDhDQUE4QyxDQUMvQzthQUNBLE9BQU8sQ0FDTixlQUFlLEVBQ2YseUlBQXlJLENBQzFJO2FBQ0EsT0FBTyxDQUNOLGVBQWUsRUFDZix5RkFBeUYsQ0FDMUYsQ0FBQztJQUNOLENBQUM7SUFFTyxXQUFXLENBQUMsSUFBWTtRQUM5QixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDckQsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUN4QixPQUFPLEtBQUssQ0FBQzthQUNkO1lBQ0QsT0FBTyw2RkFBNkYsS0FBSyxHQUFHLENBQUM7UUFDL0csQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOytHQWpFVSwyQkFBMkI7bUhBQTNCLDJCQUEyQixjQUYxQixNQUFNOzs0RkFFUCwyQkFBMkI7a0JBSHZDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlSHRtbCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBIdG1sQ29udGVudFNhbml0aXplclNlcnZpY2Uge1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIpIHt9XG5cbiAgY2xlYW5FZGl0b3JDb250ZW50KGNvbnRlbnQ6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBTYWZlSHRtbCB7XG4gICAgaWYgKCFjb250ZW50KSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgbGV0IGRlY29kZWQgPSB0aGlzLmRlY29kZUh0bWwoY29udGVudCk7XG4gICAgZGVjb2RlZCA9IHRoaXMuc3RyaXBVbndhbnRlZFRhZ3MoZGVjb2RlZCk7XG4gICAgZGVjb2RlZCA9IHRoaXMubm9ybWFsaXplVGFibGVTdHJ1Y3R1cmUoZGVjb2RlZCk7XG4gICAgZGVjb2RlZCA9IHRoaXMuYXBwbHlJbmxpbmVTdHlsZXMoZGVjb2RlZCk7XG4gICAgZGVjb2RlZCA9IHRoaXMuc3R5bGVJbWFnZXMoZGVjb2RlZCk7XG5cbiAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoZGVjb2RlZCk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0gaGVscGVycyAtLS0tLS0tLS0tLS0tLS0tLS1cblxuICBwcml2YXRlIGRlY29kZUh0bWwoY29udGVudDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCB0ZXh0YXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7XG4gICAgdGV4dGFyZWEuaW5uZXJIVE1MID0gY29udGVudDtcbiAgICByZXR1cm4gdGV4dGFyZWEudmFsdWUucmVwbGFjZSgvJm5ic3A7L2csICcgJyk7XG4gIH1cblxuICBwcml2YXRlIHN0cmlwVW53YW50ZWRUYWdzKGh0bWw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGh0bWwucmVwbGFjZSgvPFxcLz8oc3BhbnxwfHRoZWFkfHRib2R5fHRmb290KVtePl0qPi9naSwgJycpO1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVUYWJsZVN0cnVjdHVyZShodG1sOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBodG1sXG4gICAgICAucmVwbGFjZSgvPHRhYmxlW14+XSo+L2dpLCAnPHRhYmxlPicpXG4gICAgICAucmVwbGFjZSgvPHRyW14+XSo+L2dpLCAnPHRyPicpXG4gICAgICAucmVwbGFjZSgvPHRoW14+XSo+L2dpLCAnPHRoPicpXG4gICAgICAucmVwbGFjZSgvPHRkW14+XSo+L2dpLCAnPHRkPicpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUlubGluZVN0eWxlcyhodG1sOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBodG1sXG4gICAgICAucmVwbGFjZShcbiAgICAgICAgLzx0YWJsZShbXj5dKik+L2dpLFxuICAgICAgICBgPHRhYmxlIHN0eWxlPVwid2lkdGg6MTAwJTtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7cGFkZGluZzoyMHB4O2ZvbnQtc2l6ZToxNHB4O2JhY2tncm91bmQ6I2ZmZjtcIiQxPmBcbiAgICAgIClcbiAgICAgIC5yZXBsYWNlKFxuICAgICAgICAvPHRyKFtePl0qKT4vZ2ksXG4gICAgICAgIGA8dHIgc3R5bGU9XCJib3JkZXItYm90dG9tOjFweCBzb2xpZCAjY2NjO1wiJDE+YFxuICAgICAgKVxuICAgICAgLnJlcGxhY2UoXG4gICAgICAgIC88dGgoW14+XSopPi9naSxcbiAgICAgICAgYDx0aCBzdHlsZT1cImJhY2tncm91bmQ6I2YwZjBmMDtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjE2cHg7Y29sb3I6IzJBMUY3Mztib3JkZXI6MXB4IHNvbGlkICNjY2M7cGFkZGluZzoxMnB4IDIwcHg7dGV4dC1hbGlnbjpsZWZ0O1wiJDE+YFxuICAgICAgKVxuICAgICAgLnJlcGxhY2UoXG4gICAgICAgIC88dGQoW14+XSopPi9naSxcbiAgICAgICAgYDx0ZCBzdHlsZT1cIm1pbi13aWR0aDoxMjBweDtib3JkZXI6MXB4IHNvbGlkICNjY2M7cGFkZGluZzoxMnB4IDIwcHg7dGV4dC1hbGlnbjpsZWZ0O1wiJDE+YFxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc3R5bGVJbWFnZXMoaHRtbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gaHRtbC5yZXBsYWNlKC88aW1nKFtePl0qKT4vZ2ksIChtYXRjaCwgYXR0cnMpID0+IHtcbiAgICAgIGlmICgvc3R5bGU9Ly50ZXN0KGF0dHJzKSkge1xuICAgICAgICByZXR1cm4gbWF0Y2g7XG4gICAgICB9XG4gICAgICByZXR1cm4gYDxpbWcgc3R5bGU9XCJ3aWR0aDozMCU7aGVpZ2h0OjMwJTtib3JkZXItcmFkaXVzOjE2cHg7cGFkZGluZy10b3A6MTVweDtwYWRkaW5nLWJvdHRvbToxMHB4O1wiJHthdHRyc30+YDtcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -0,0 +1,145 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class RowActionService {
4
+ constructor() {
5
+ this.STATUS_SETS = {
6
+ EDIT_BLOCKED: [
7
+ 'expired', 'closed', 'Assigning Stop', 'Evaluation Start',
8
+ 'Evaluation Stop', 'Completed', 'approved', 'rejected',
9
+ 'partially', 'accepted'
10
+ ],
11
+ ARCHIVE_BLOCKED: [
12
+ 'approved', 'partially', 'Assigning Start',
13
+ 'Completed', 'Evaluation Start'
14
+ ],
15
+ DISPOSED: ['scrap', 'trashed', 'disposed'],
16
+ SEPARATED: ['termination', 'resignation', 'retirement', 'separated'],
17
+ UNAVAILABLE: ['unavailable', 'unAvailable']
18
+ };
19
+ this.ACTION_ALIASES = {
20
+ accept: 'view',
21
+ achive: 'unactive'
22
+ };
23
+ this.rules = {
24
+ assigningstart: (r) => r.status === 'To be start Assigning' && !r.isDeleted,
25
+ assigningstop: (r) => r.status === 'Assigning Start' && !r.isDeleted,
26
+ evaluationstart: (r) => r.status === 'Assigning Stop' && !r.isDeleted,
27
+ completed: (r) => r.status === 'Evaluation Start' && !r.isDeleted,
28
+ archive: (r) => this.canArchiveOrDelete(r),
29
+ unactive: (r) => this.canArchiveOrDelete(r),
30
+ delete: (r) => this.canArchiveOrDelete(r),
31
+ unarchive: (r) => r.isDeleted && r.availStatus !== 'disposed',
32
+ active: (r) => r.isDeleted && r.availStatus !== 'disposed',
33
+ link: (r) => !this.STATUS_SETS.UNAVAILABLE.includes(r.status) &&
34
+ !r.isDeleted &&
35
+ r.availStatus !== 'disposed' &&
36
+ r.status !== 'linked',
37
+ unlink: (r, ctx) => ctx.showUnLink === true && r.status === 'linked',
38
+ rejoin: (r) => this.STATUS_SETS.SEPARATED.includes(r.accountStatus),
39
+ settlementinfo: (r) => this.STATUS_SETS.SEPARATED.includes(r.accountStatus),
40
+ assign: (r) => r.status !== 'assigned',
41
+ edit: (r, ctx) => this.canEdit(r, ctx),
42
+ trash: (r) => !this.STATUS_SETS.DISPOSED.includes(r.availStatus),
43
+ scrap: (r) => !this.STATUS_SETS.DISPOSED.includes(r.availStatus),
44
+ retain: (r) => !this.STATUS_SETS.DISPOSED.includes(r.availStatus),
45
+ defaultgrade: (r) => r.isCustomGrade !== 'Active',
46
+ subscribe: (r, ctx) => !r.assignedToIds.includes(ctx.currentUserId),
47
+ unsubscribe: (r, ctx) => r.assignedToIds.includes(ctx.currentUserId),
48
+ changestatus: (r) => !r.isDeleted,
49
+ download: (r) => r.offerLetter !== null,
50
+ view: (r) => r.offerLetter !== null
51
+ };
52
+ }
53
+ normalizeRow(element) {
54
+ return {
55
+ isDeleted: element.is_deleted === true || element.is_deleted === 'true',
56
+ status: element.status || '',
57
+ availStatus: element.availStatus || '',
58
+ accountStatus: (element.account_status || '').toLowerCase(),
59
+ assigneeCount: element.assignee?.length ?? 0,
60
+ assignedToIds: element.assigned_to?.map((x) => x.id) ?? [],
61
+ settlementCompleted: element.settlement_completed === true,
62
+ finalSettlementCompleted: element.final_settlement_completed === true,
63
+ storeEdit: element.store_edit !== false,
64
+ isOwner: element.is_owner ?? true,
65
+ isCustomGrade: element.is_custom_grade || '',
66
+ parent: element.parent,
67
+ offerLetter: element.offer_letter,
68
+ typename: element.__typename || ''
69
+ };
70
+ }
71
+ normalizeAction(action, ctx) {
72
+ let normalized = this.ACTION_ALIASES[action] || action;
73
+ if (ctx.packageData) {
74
+ if (action === 'unarchive')
75
+ return 'active';
76
+ if (action === 'archive')
77
+ return 'unactive';
78
+ }
79
+ return normalized.toLowerCase();
80
+ }
81
+ canArchiveOrDelete(r) {
82
+ return (!r.isDeleted &&
83
+ !r.settlementCompleted &&
84
+ !r.finalSettlementCompleted &&
85
+ r.availStatus !== 'reserved' &&
86
+ r.assigneeCount === 0 &&
87
+ r.availStatus !== 'disposed' &&
88
+ r.availStatus !== 'maintenance' &&
89
+ r.availStatus !== 'assigned' &&
90
+ !this.STATUS_SETS.ARCHIVE_BLOCKED.includes(r.status) &&
91
+ r.parent !== null);
92
+ }
93
+ canEdit(r, ctx) {
94
+ const isBlocked = this.STATUS_SETS.EDIT_BLOCKED.includes(r.status) ||
95
+ r.isDeleted ||
96
+ !r.storeEdit ||
97
+ r.availStatus === 'disposed' ||
98
+ r.settlementCompleted ||
99
+ r.finalSettlementCompleted;
100
+ if (isBlocked)
101
+ return false;
102
+ if (ctx.tableType === 'BusinessExpenseListing') {
103
+ return true;
104
+ }
105
+ return r.status !== 'accepted' && r.isOwner;
106
+ }
107
+ isActionValid(action, element, ctx = {}) {
108
+ const row = this.normalizeRow(element);
109
+ const normalizedAction = this.normalizeAction(action, ctx);
110
+ const rule = this.rules[normalizedAction];
111
+ if (rule) {
112
+ return rule(row, ctx);
113
+ }
114
+ return row.availStatus !== 'disposed' || row.typename === 'Alert';
115
+ }
116
+ getValidActions(actions, element, ctx = {}) {
117
+ if (!actions?.length)
118
+ return [];
119
+ let validActions = actions.filter(action => this.isActionValid(action, element, ctx));
120
+ if (ctx.tableType === 'recruitmentListing') {
121
+ validActions = this.applyRecruitmentFilters(validActions, element);
122
+ }
123
+ return validActions;
124
+ }
125
+ applyRecruitmentFilters(actions, element) {
126
+ let filtered = [...actions];
127
+ if (element?.status === 'hired' && !element?.is_deleted) {
128
+ filtered = filtered.filter(action => !['changestatus', 'unarchive', 'archive', 'edit'].includes(action));
129
+ }
130
+ if (element?.is_deleted) {
131
+ filtered = filtered.filter(action => action !== 'changestatus');
132
+ }
133
+ if (element?.offer_letter === null) {
134
+ filtered = filtered.filter(action => !['download', 'view'].includes(action));
135
+ }
136
+ return filtered;
137
+ }
138
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RowActionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
139
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RowActionService, providedIn: 'root' }); }
140
+ }
141
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RowActionService, decorators: [{
142
+ type: Injectable,
143
+ args: [{ providedIn: 'root' }]
144
+ }] });
145
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm93LWFjdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS1ncmlkL3NyYy9saWIvc2VydmljZXMvcm93LWFjdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBNkIzQyxNQUFNLE9BQU8sZ0JBQWdCO0lBRDdCO1FBR21CLGdCQUFXLEdBQUc7WUFDN0IsWUFBWSxFQUFFO2dCQUNaLFNBQVMsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCO2dCQUN6RCxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFVBQVU7Z0JBQ3RELFdBQVcsRUFBRSxVQUFVO2FBQ3hCO1lBQ0QsZUFBZSxFQUFFO2dCQUNmLFVBQVUsRUFBRSxXQUFXLEVBQUUsaUJBQWlCO2dCQUMxQyxXQUFXLEVBQUUsa0JBQWtCO2FBQ2hDO1lBQ0QsUUFBUSxFQUFFLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUM7WUFDMUMsU0FBUyxFQUFFLENBQUMsYUFBYSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsV0FBVyxDQUFDO1lBQ3BFLFdBQVcsRUFBRSxDQUFDLGFBQWEsRUFBRSxhQUFhLENBQUM7U0FDbkMsQ0FBQztRQUVNLG1CQUFjLEdBQTJCO1lBQ3hELE1BQU0sRUFBRSxNQUFNO1lBQ2QsTUFBTSxFQUFFLFVBQVU7U0FDbkIsQ0FBQztRQUVlLFVBQUssR0FBK0I7WUFDbkQsY0FBYyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLHVCQUF1QixJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDM0UsYUFBYSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLGlCQUFpQixJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDcEUsZUFBZSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDckUsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLGtCQUFrQixJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFFakUsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO1lBQzFDLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQztZQUMzQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7WUFFekMsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxXQUFXLEtBQUssVUFBVTtZQUM3RCxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDLFdBQVcsS0FBSyxVQUFVO1lBRTFELElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ1YsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUUsQ0FBQyxDQUFDLE1BQWMsQ0FBQztnQkFDekQsQ0FBQyxDQUFDLENBQUMsU0FBUztnQkFDWixDQUFDLENBQUMsV0FBVyxLQUFLLFVBQVU7Z0JBQzVCLENBQUMsQ0FBQyxNQUFNLEtBQUssUUFBUTtZQUN2QixNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLFFBQVE7WUFFcEUsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUUsQ0FBQyxDQUFDLGFBQXFCLENBQUM7WUFDNUUsY0FBYyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUUsQ0FBQyxDQUFDLGFBQXFCLENBQUM7WUFFcEYsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLFVBQVU7WUFDdEMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDO1lBRXRDLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUUsQ0FBQyxDQUFDLFdBQW1CLENBQUM7WUFDekUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBRSxDQUFDLENBQUMsV0FBbUIsQ0FBQztZQUN6RSxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFFLENBQUMsQ0FBQyxXQUFtQixDQUFDO1lBRTFFLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsS0FBSyxRQUFRO1lBRWpELFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUUsR0FBRyxDQUFDLGFBQXFCLENBQUM7WUFDNUUsV0FBVyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUUsR0FBRyxDQUFDLGFBQXFCLENBQUM7WUFFN0UsWUFBWSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO1lBRWpDLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsS0FBSyxJQUFJO1lBQ3ZDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsS0FBSyxJQUFJO1NBQ3BDLENBQUM7S0FnSEg7SUE5R1MsWUFBWSxDQUFDLE9BQVk7UUFDL0IsT0FBTztZQUNMLFNBQVMsRUFBRSxPQUFPLENBQUMsVUFBVSxLQUFLLElBQUksSUFBSSxPQUFPLENBQUMsVUFBVSxLQUFLLE1BQU07WUFDdkUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLElBQUksRUFBRTtZQUM1QixXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVcsSUFBSSxFQUFFO1lBQ3RDLGFBQWEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxjQUFjLElBQUksRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFO1lBQzNELGFBQWEsRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFLE1BQU0sSUFBSSxDQUFDO1lBQzVDLGFBQWEsRUFBRSxPQUFPLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUU7WUFDL0QsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLG9CQUFvQixLQUFLLElBQUk7WUFDMUQsd0JBQXdCLEVBQUUsT0FBTyxDQUFDLDBCQUEwQixLQUFLLElBQUk7WUFDckUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxVQUFVLEtBQUssS0FBSztZQUN2QyxPQUFPLEVBQUUsT0FBTyxDQUFDLFFBQVEsSUFBSSxJQUFJO1lBQ2pDLGFBQWEsRUFBRSxPQUFPLENBQUMsZUFBZSxJQUFJLEVBQUU7WUFDNUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1lBQ3RCLFdBQVcsRUFBRSxPQUFPLENBQUMsWUFBWTtZQUNqQyxRQUFRLEVBQUUsT0FBTyxDQUFDLFVBQVUsSUFBSSxFQUFFO1NBQ25DLENBQUM7SUFDSixDQUFDO0lBRU8sZUFBZSxDQUFDLE1BQWMsRUFBRSxHQUFrQjtRQUN4RCxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQztRQUV2RCxJQUFJLEdBQUcsQ0FBQyxXQUFXLEVBQUU7WUFDbkIsSUFBSSxNQUFNLEtBQUssV0FBVztnQkFBRSxPQUFPLFFBQVEsQ0FBQztZQUM1QyxJQUFJLE1BQU0sS0FBSyxTQUFTO2dCQUFFLE9BQU8sVUFBVSxDQUFDO1NBQzdDO1FBRUQsT0FBTyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVPLGtCQUFrQixDQUFDLENBQWdCO1FBQ3pDLE9BQU8sQ0FDTCxDQUFDLENBQUMsQ0FBQyxTQUFTO1lBQ1osQ0FBQyxDQUFDLENBQUMsbUJBQW1CO1lBQ3RCLENBQUMsQ0FBQyxDQUFDLHdCQUF3QjtZQUMzQixDQUFDLENBQUMsV0FBVyxLQUFLLFVBQVU7WUFDNUIsQ0FBQyxDQUFDLGFBQWEsS0FBSyxDQUFDO1lBQ3JCLENBQUMsQ0FBQyxXQUFXLEtBQUssVUFBVTtZQUM1QixDQUFDLENBQUMsV0FBVyxLQUFLLGFBQWE7WUFDL0IsQ0FBQyxDQUFDLFdBQVcsS0FBSyxVQUFVO1lBQzVCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFFLENBQUMsQ0FBQyxNQUFjLENBQUM7WUFDN0QsQ0FBQyxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQ2xCLENBQUM7SUFDSixDQUFDO0lBRU8sT0FBTyxDQUFDLENBQWdCLEVBQUUsR0FBa0I7UUFDbEQsTUFBTSxTQUFTLEdBQ2IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFFLENBQUMsQ0FBQyxNQUFjLENBQUM7WUFDekQsQ0FBQyxDQUFDLFNBQVM7WUFDWCxDQUFDLENBQUMsQ0FBQyxTQUFTO1lBQ1osQ0FBQyxDQUFDLFdBQVcsS0FBSyxVQUFVO1lBQzVCLENBQUMsQ0FBQyxtQkFBbUI7WUFDckIsQ0FBQyxDQUFDLHdCQUF3QixDQUFDO1FBRTdCLElBQUksU0FBUztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRTVCLElBQUksR0FBRyxDQUFDLFNBQVMsS0FBSyx3QkFBd0IsRUFBRTtZQUM5QyxPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsT0FBTyxDQUFDLENBQUMsTUFBTSxLQUFLLFVBQVUsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQzlDLENBQUM7SUFFRCxhQUFhLENBQUMsTUFBYyxFQUFFLE9BQVksRUFBRSxNQUFxQixFQUFFO1FBQ2pFLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMzRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFMUMsSUFBSSxJQUFJLEVBQUU7WUFDUixPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDdkI7UUFFRCxPQUFPLEdBQUcsQ0FBQyxXQUFXLEtBQUssVUFBVSxJQUFJLEdBQUcsQ0FBQyxRQUFRLEtBQUssT0FBTyxDQUFDO0lBQ3BFLENBQUM7SUFFRCxlQUFlLENBQUMsT0FBaUIsRUFBRSxPQUFZLEVBQUUsTUFBcUIsRUFBRTtRQUN0RSxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU07WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUVoQyxJQUFJLFlBQVksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQ3pDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FDekMsQ0FBQztRQUVGLElBQUksR0FBRyxDQUFDLFNBQVMsS0FBSyxvQkFBb0IsRUFBRTtZQUMxQyxZQUFZLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztTQUNwRTtRQUVELE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFFTyx1QkFBdUIsQ0FBQyxPQUFpQixFQUFFLE9BQVk7UUFDN0QsSUFBSSxRQUFRLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO1FBRTVCLElBQUksT0FBTyxFQUFFLE1BQU0sS0FBSyxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFO1lBQ3ZELFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQ2xDLENBQUMsQ0FBQyxjQUFjLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQ25FLENBQUM7U0FDSDtRQUVELElBQUksT0FBTyxFQUFFLFVBQVUsRUFBRTtZQUN2QixRQUFRLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sS0FBSyxjQUFjLENBQUMsQ0FBQztTQUNqRTtRQUVELElBQUksT0FBTyxFQUFFLFlBQVksS0FBSyxJQUFJLEVBQUU7WUFDbEMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FDbEMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQ3ZDLENBQUM7U0FDSDtRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7K0dBNUtVLGdCQUFnQjttSEFBaEIsZ0JBQWdCLGNBREgsTUFBTTs7NEZBQ25CLGdCQUFnQjtrQkFENUIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uQ29udGV4dCB7XG4gIHRhYmxlVHlwZT86IHN0cmluZztcbiAgcGFja2FnZURhdGE/OiBib29sZWFuO1xuICBzaG93VW5MaW5rPzogYm9vbGVhbjtcbiAgY3VycmVudFVzZXJJZD86IHN0cmluZyB8IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIE5vcm1hbGl6ZWRSb3cge1xuICBpc0RlbGV0ZWQ6IGJvb2xlYW47XG4gIHN0YXR1czogc3RyaW5nO1xuICBhdmFpbFN0YXR1czogc3RyaW5nO1xuICBhY2NvdW50U3RhdHVzOiBzdHJpbmc7XG4gIGFzc2lnbmVlQ291bnQ6IG51bWJlcjtcbiAgYXNzaWduZWRUb0lkczogKHN0cmluZyB8IG51bWJlcilbXTtcbiAgc2V0dGxlbWVudENvbXBsZXRlZDogYm9vbGVhbjtcbiAgZmluYWxTZXR0bGVtZW50Q29tcGxldGVkOiBib29sZWFuO1xuICBzdG9yZUVkaXQ6IGJvb2xlYW47XG4gIGlzT3duZXI6IGJvb2xlYW47XG4gIGlzQ3VzdG9tR3JhZGU6IHN0cmluZztcbiAgcGFyZW50OiBhbnk7XG4gIG9mZmVyTGV0dGVyOiBhbnk7XG4gIHR5cGVuYW1lOiBzdHJpbmc7XG59XG5cbnR5cGUgQWN0aW9uUnVsZSA9IChyb3c6IE5vcm1hbGl6ZWRSb3csIGN0eDogQWN0aW9uQ29udGV4dCkgPT4gYm9vbGVhbjtcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBSb3dBY3Rpb25TZXJ2aWNlIHtcblxuICBwcml2YXRlIHJlYWRvbmx5IFNUQVRVU19TRVRTID0ge1xuICAgIEVESVRfQkxPQ0tFRDogW1xuICAgICAgJ2V4cGlyZWQnLCAnY2xvc2VkJywgJ0Fzc2lnbmluZyBTdG9wJywgJ0V2YWx1YXRpb24gU3RhcnQnLFxuICAgICAgJ0V2YWx1YXRpb24gU3RvcCcsICdDb21wbGV0ZWQnLCAnYXBwcm92ZWQnLCAncmVqZWN0ZWQnLFxuICAgICAgJ3BhcnRpYWxseScsICdhY2NlcHRlZCdcbiAgICBdLFxuICAgIEFSQ0hJVkVfQkxPQ0tFRDogW1xuICAgICAgJ2FwcHJvdmVkJywgJ3BhcnRpYWxseScsICdBc3NpZ25pbmcgU3RhcnQnLFxuICAgICAgJ0NvbXBsZXRlZCcsICdFdmFsdWF0aW9uIFN0YXJ0J1xuICAgIF0sXG4gICAgRElTUE9TRUQ6IFsnc2NyYXAnLCAndHJhc2hlZCcsICdkaXNwb3NlZCddLFxuICAgIFNFUEFSQVRFRDogWyd0ZXJtaW5hdGlvbicsICdyZXNpZ25hdGlvbicsICdyZXRpcmVtZW50JywgJ3NlcGFyYXRlZCddLFxuICAgIFVOQVZBSUxBQkxFOiBbJ3VuYXZhaWxhYmxlJywgJ3VuQXZhaWxhYmxlJ11cbiAgfSBhcyBjb25zdDtcblxuICBwcml2YXRlIHJlYWRvbmx5IEFDVElPTl9BTElBU0VTOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgIGFjY2VwdDogJ3ZpZXcnLFxuICAgIGFjaGl2ZTogJ3VuYWN0aXZlJ1xuICB9O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcnVsZXM6IFJlY29yZDxzdHJpbmcsIEFjdGlvblJ1bGU+ID0ge1xuICAgIGFzc2lnbmluZ3N0YXJ0OiAocikgPT4gci5zdGF0dXMgPT09ICdUbyBiZSBzdGFydCBBc3NpZ25pbmcnICYmICFyLmlzRGVsZXRlZCxcbiAgICBhc3NpZ25pbmdzdG9wOiAocikgPT4gci5zdGF0dXMgPT09ICdBc3NpZ25pbmcgU3RhcnQnICYmICFyLmlzRGVsZXRlZCxcbiAgICBldmFsdWF0aW9uc3RhcnQ6IChyKSA9PiByLnN0YXR1cyA9PT0gJ0Fzc2lnbmluZyBTdG9wJyAmJiAhci5pc0RlbGV0ZWQsXG4gICAgY29tcGxldGVkOiAocikgPT4gci5zdGF0dXMgPT09ICdFdmFsdWF0aW9uIFN0YXJ0JyAmJiAhci5pc0RlbGV0ZWQsXG5cbiAgICBhcmNoaXZlOiAocikgPT4gdGhpcy5jYW5BcmNoaXZlT3JEZWxldGUociksXG4gICAgdW5hY3RpdmU6IChyKSA9PiB0aGlzLmNhbkFyY2hpdmVPckRlbGV0ZShyKSxcbiAgICBkZWxldGU6IChyKSA9PiB0aGlzLmNhbkFyY2hpdmVPckRlbGV0ZShyKSxcblxuICAgIHVuYXJjaGl2ZTogKHIpID0+IHIuaXNEZWxldGVkICYmIHIuYXZhaWxTdGF0dXMgIT09ICdkaXNwb3NlZCcsXG4gICAgYWN0aXZlOiAocikgPT4gci5pc0RlbGV0ZWQgJiYgci5hdmFpbFN0YXR1cyAhPT0gJ2Rpc3Bvc2VkJyxcblxuICAgIGxpbms6IChyKSA9PiBcbiAgICAgICF0aGlzLlNUQVRVU19TRVRTLlVOQVZBSUxBQkxFLmluY2x1ZGVzKChyLnN0YXR1cyBhcyBhbnkpKSAmJlxuICAgICAgIXIuaXNEZWxldGVkICYmXG4gICAgICByLmF2YWlsU3RhdHVzICE9PSAnZGlzcG9zZWQnICYmXG4gICAgICByLnN0YXR1cyAhPT0gJ2xpbmtlZCcsXG4gICAgdW5saW5rOiAociwgY3R4KSA9PiBjdHguc2hvd1VuTGluayA9PT0gdHJ1ZSAmJiByLnN0YXR1cyA9PT0gJ2xpbmtlZCcsXG5cbiAgICByZWpvaW46IChyKSA9PiB0aGlzLlNUQVRVU19TRVRTLlNFUEFSQVRFRC5pbmNsdWRlcygoci5hY2NvdW50U3RhdHVzIGFzIGFueSkpLFxuICAgIHNldHRsZW1lbnRpbmZvOiAocikgPT4gdGhpcy5TVEFUVVNfU0VUUy5TRVBBUkFURUQuaW5jbHVkZXMoKHIuYWNjb3VudFN0YXR1cyBhcyBhbnkpKSxcblxuICAgIGFzc2lnbjogKHIpID0+IHIuc3RhdHVzICE9PSAnYXNzaWduZWQnLFxuICAgIGVkaXQ6IChyLCBjdHgpID0+IHRoaXMuY2FuRWRpdChyLCBjdHgpLFxuXG4gICAgdHJhc2g6IChyKSA9PiAhdGhpcy5TVEFUVVNfU0VUUy5ESVNQT1NFRC5pbmNsdWRlcygoci5hdmFpbFN0YXR1cyBhcyBhbnkpKSxcbiAgICBzY3JhcDogKHIpID0+ICF0aGlzLlNUQVRVU19TRVRTLkRJU1BPU0VELmluY2x1ZGVzKChyLmF2YWlsU3RhdHVzIGFzIGFueSkpLFxuICAgIHJldGFpbjogKHIpID0+ICF0aGlzLlNUQVRVU19TRVRTLkRJU1BPU0VELmluY2x1ZGVzKChyLmF2YWlsU3RhdHVzIGFzIGFueSkpLFxuXG4gICAgZGVmYXVsdGdyYWRlOiAocikgPT4gci5pc0N1c3RvbUdyYWRlICE9PSAnQWN0aXZlJyxcblxuICAgIHN1YnNjcmliZTogKHIsIGN0eCkgPT4gIXIuYXNzaWduZWRUb0lkcy5pbmNsdWRlcygoY3R4LmN1cnJlbnRVc2VySWQgYXMgYW55KSksXG4gICAgdW5zdWJzY3JpYmU6IChyLCBjdHgpID0+IHIuYXNzaWduZWRUb0lkcy5pbmNsdWRlcygoY3R4LmN1cnJlbnRVc2VySWQgYXMgYW55KSksXG5cbiAgICBjaGFuZ2VzdGF0dXM6IChyKSA9PiAhci5pc0RlbGV0ZWQsXG5cbiAgICBkb3dubG9hZDogKHIpID0+IHIub2ZmZXJMZXR0ZXIgIT09IG51bGwsXG4gICAgdmlldzogKHIpID0+IHIub2ZmZXJMZXR0ZXIgIT09IG51bGxcbiAgfTtcblxuICBwcml2YXRlIG5vcm1hbGl6ZVJvdyhlbGVtZW50OiBhbnkpOiBOb3JtYWxpemVkUm93IHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNEZWxldGVkOiBlbGVtZW50LmlzX2RlbGV0ZWQgPT09IHRydWUgfHwgZWxlbWVudC5pc19kZWxldGVkID09PSAndHJ1ZScsXG4gICAgICBzdGF0dXM6IGVsZW1lbnQuc3RhdHVzIHx8ICcnLFxuICAgICAgYXZhaWxTdGF0dXM6IGVsZW1lbnQuYXZhaWxTdGF0dXMgfHwgJycsXG4gICAgICBhY2NvdW50U3RhdHVzOiAoZWxlbWVudC5hY2NvdW50X3N0YXR1cyB8fCAnJykudG9Mb3dlckNhc2UoKSxcbiAgICAgIGFzc2lnbmVlQ291bnQ6IGVsZW1lbnQuYXNzaWduZWU/Lmxlbmd0aCA/PyAwLFxuICAgICAgYXNzaWduZWRUb0lkczogZWxlbWVudC5hc3NpZ25lZF90bz8ubWFwKCh4OiBhbnkpID0+IHguaWQpID8/IFtdLFxuICAgICAgc2V0dGxlbWVudENvbXBsZXRlZDogZWxlbWVudC5zZXR0bGVtZW50X2NvbXBsZXRlZCA9PT0gdHJ1ZSxcbiAgICAgIGZpbmFsU2V0dGxlbWVudENvbXBsZXRlZDogZWxlbWVudC5maW5hbF9zZXR0bGVtZW50X2NvbXBsZXRlZCA9PT0gdHJ1ZSxcbiAgICAgIHN0b3JlRWRpdDogZWxlbWVudC5zdG9yZV9lZGl0ICE9PSBmYWxzZSxcbiAgICAgIGlzT3duZXI6IGVsZW1lbnQuaXNfb3duZXIgPz8gdHJ1ZSxcbiAgICAgIGlzQ3VzdG9tR3JhZGU6IGVsZW1lbnQuaXNfY3VzdG9tX2dyYWRlIHx8ICcnLFxuICAgICAgcGFyZW50OiBlbGVtZW50LnBhcmVudCxcbiAgICAgIG9mZmVyTGV0dGVyOiBlbGVtZW50Lm9mZmVyX2xldHRlcixcbiAgICAgIHR5cGVuYW1lOiBlbGVtZW50Ll9fdHlwZW5hbWUgfHwgJydcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVBY3Rpb24oYWN0aW9uOiBzdHJpbmcsIGN0eDogQWN0aW9uQ29udGV4dCk6IHN0cmluZyB7XG4gICAgbGV0IG5vcm1hbGl6ZWQgPSB0aGlzLkFDVElPTl9BTElBU0VTW2FjdGlvbl0gfHwgYWN0aW9uO1xuXG4gICAgaWYgKGN0eC5wYWNrYWdlRGF0YSkge1xuICAgICAgaWYgKGFjdGlvbiA9PT0gJ3VuYXJjaGl2ZScpIHJldHVybiAnYWN0aXZlJztcbiAgICAgIGlmIChhY3Rpb24gPT09ICdhcmNoaXZlJykgcmV0dXJuICd1bmFjdGl2ZSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vcm1hbGl6ZWQudG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2FuQXJjaGl2ZU9yRGVsZXRlKHI6IE5vcm1hbGl6ZWRSb3cpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgIXIuaXNEZWxldGVkICYmXG4gICAgICAhci5zZXR0bGVtZW50Q29tcGxldGVkICYmXG4gICAgICAhci5maW5hbFNldHRsZW1lbnRDb21wbGV0ZWQgJiZcbiAgICAgIHIuYXZhaWxTdGF0dXMgIT09ICdyZXNlcnZlZCcgJiZcbiAgICAgIHIuYXNzaWduZWVDb3VudCA9PT0gMCAmJlxuICAgICAgci5hdmFpbFN0YXR1cyAhPT0gJ2Rpc3Bvc2VkJyAmJlxuICAgICAgci5hdmFpbFN0YXR1cyAhPT0gJ21haW50ZW5hbmNlJyAmJlxuICAgICAgci5hdmFpbFN0YXR1cyAhPT0gJ2Fzc2lnbmVkJyAmJlxuICAgICAgIXRoaXMuU1RBVFVTX1NFVFMuQVJDSElWRV9CTE9DS0VELmluY2x1ZGVzKChyLnN0YXR1cyBhcyBhbnkpKSAmJlxuICAgICAgci5wYXJlbnQgIT09IG51bGxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjYW5FZGl0KHI6IE5vcm1hbGl6ZWRSb3csIGN0eDogQWN0aW9uQ29udGV4dCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGlzQmxvY2tlZCA9IFxuICAgICAgdGhpcy5TVEFUVVNfU0VUUy5FRElUX0JMT0NLRUQuaW5jbHVkZXMoKHIuc3RhdHVzIGFzIGFueSkpIHx8XG4gICAgICByLmlzRGVsZXRlZCB8fFxuICAgICAgIXIuc3RvcmVFZGl0IHx8XG4gICAgICByLmF2YWlsU3RhdHVzID09PSAnZGlzcG9zZWQnIHx8XG4gICAgICByLnNldHRsZW1lbnRDb21wbGV0ZWQgfHxcbiAgICAgIHIuZmluYWxTZXR0bGVtZW50Q29tcGxldGVkO1xuXG4gICAgaWYgKGlzQmxvY2tlZCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgaWYgKGN0eC50YWJsZVR5cGUgPT09ICdCdXNpbmVzc0V4cGVuc2VMaXN0aW5nJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHIuc3RhdHVzICE9PSAnYWNjZXB0ZWQnICYmIHIuaXNPd25lcjtcbiAgfVxuXG4gIGlzQWN0aW9uVmFsaWQoYWN0aW9uOiBzdHJpbmcsIGVsZW1lbnQ6IGFueSwgY3R4OiBBY3Rpb25Db250ZXh0ID0ge30pOiBib29sZWFuIHtcbiAgICBjb25zdCByb3cgPSB0aGlzLm5vcm1hbGl6ZVJvdyhlbGVtZW50KTtcbiAgICBjb25zdCBub3JtYWxpemVkQWN0aW9uID0gdGhpcy5ub3JtYWxpemVBY3Rpb24oYWN0aW9uLCBjdHgpO1xuICAgIGNvbnN0IHJ1bGUgPSB0aGlzLnJ1bGVzW25vcm1hbGl6ZWRBY3Rpb25dO1xuXG4gICAgaWYgKHJ1bGUpIHtcbiAgICAgIHJldHVybiBydWxlKHJvdywgY3R4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcm93LmF2YWlsU3RhdHVzICE9PSAnZGlzcG9zZWQnIHx8IHJvdy50eXBlbmFtZSA9PT0gJ0FsZXJ0JztcbiAgfVxuXG4gIGdldFZhbGlkQWN0aW9ucyhhY3Rpb25zOiBzdHJpbmdbXSwgZWxlbWVudDogYW55LCBjdHg6IEFjdGlvbkNvbnRleHQgPSB7fSk6IHN0cmluZ1tdIHtcbiAgICBpZiAoIWFjdGlvbnM/Lmxlbmd0aCkgcmV0dXJuIFtdO1xuICAgIFxuICAgIGxldCB2YWxpZEFjdGlvbnMgPSBhY3Rpb25zLmZpbHRlcihhY3Rpb24gPT4gXG4gICAgICB0aGlzLmlzQWN0aW9uVmFsaWQoYWN0aW9uLCBlbGVtZW50LCBjdHgpXG4gICAgKTtcblxuICAgIGlmIChjdHgudGFibGVUeXBlID09PSAncmVjcnVpdG1lbnRMaXN0aW5nJykge1xuICAgICAgdmFsaWRBY3Rpb25zID0gdGhpcy5hcHBseVJlY3J1aXRtZW50RmlsdGVycyh2YWxpZEFjdGlvbnMsIGVsZW1lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZEFjdGlvbnM7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5UmVjcnVpdG1lbnRGaWx0ZXJzKGFjdGlvbnM6IHN0cmluZ1tdLCBlbGVtZW50OiBhbnkpOiBzdHJpbmdbXSB7XG4gICAgbGV0IGZpbHRlcmVkID0gWy4uLmFjdGlvbnNdO1xuXG4gICAgaWYgKGVsZW1lbnQ/LnN0YXR1cyA9PT0gJ2hpcmVkJyAmJiAhZWxlbWVudD8uaXNfZGVsZXRlZCkge1xuICAgICAgZmlsdGVyZWQgPSBmaWx0ZXJlZC5maWx0ZXIoYWN0aW9uID0+IFxuICAgICAgICAhWydjaGFuZ2VzdGF0dXMnLCAndW5hcmNoaXZlJywgJ2FyY2hpdmUnLCAnZWRpdCddLmluY2x1ZGVzKGFjdGlvbilcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGVsZW1lbnQ/LmlzX2RlbGV0ZWQpIHtcbiAgICAgIGZpbHRlcmVkID0gZmlsdGVyZWQuZmlsdGVyKGFjdGlvbiA9PiBhY3Rpb24gIT09ICdjaGFuZ2VzdGF0dXMnKTtcbiAgICB9XG5cbiAgICBpZiAoZWxlbWVudD8ub2ZmZXJfbGV0dGVyID09PSBudWxsKSB7XG4gICAgICBmaWx0ZXJlZCA9IGZpbHRlcmVkLmZpbHRlcihhY3Rpb24gPT4gXG4gICAgICAgICFbJ2Rvd25sb2FkJywgJ3ZpZXcnXS5pbmNsdWRlcyhhY3Rpb24pXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBmaWx0ZXJlZDtcbiAgfVxufSJdfQ==