ms-data-grid 0.0.46 → 0.0.48
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.
- package/esm2022/lib/data-grid/data-grid.component.mjs +1451 -410
- package/esm2022/lib/data-grid/statuses.mjs +3 -2
- package/esm2022/lib/data-grid.module.mjs +9 -7
- package/esm2022/lib/directives/cell-render-init.directive.mjs +49 -0
- package/esm2022/lib/directives/cellHost.directive.mjs +16 -0
- package/esm2022/lib/pipes/filter.pipe.mjs +1 -1
- package/esm2022/lib/services/common.service.mjs +41 -12
- package/esm2022/lib/services/copy-service.service.mjs +3 -3
- package/esm2022/lib/services/export.service.mjs +149 -0
- package/esm2022/public-api.mjs +1 -3
- package/fesm2022/ms-data-grid.mjs +1703 -697
- package/fesm2022/ms-data-grid.mjs.map +1 -1
- package/lib/data-grid/data-grid.component.d.ts +107 -36
- package/lib/data-grid.module.d.ts +8 -7
- package/lib/directives/cell-render-init.directive.d.ts +14 -0
- package/lib/directives/cellHost.directive.d.ts +8 -0
- package/lib/services/export.service.d.ts +24 -0
- package/package.json +8 -2
- package/public-api.d.ts +0 -2
- package/esm2022/lib/data-grid.service.mjs +0 -14
- package/esm2022/lib/directives/draggable-header.directive.mjs +0 -145
- package/esm2022/lib/services/swap-columns.service.mjs +0 -118
- package/lib/data-grid.service.d.ts +0 -6
- package/lib/directives/draggable-header.directive.d.ts +0 -31
- package/lib/services/swap-columns.service.d.ts +0 -19
|
@@ -39,6 +39,7 @@ export const STATUSES_BADGE_MAP = {
|
|
|
39
39
|
// Dark – Neutral/Other
|
|
40
40
|
'expired': 'badge badge-dark',
|
|
41
41
|
'draft': 'badge badge-dark',
|
|
42
|
-
'present': 'badge badge-success'
|
|
42
|
+
'present': 'badge badge-success',
|
|
43
|
+
'todo': 'badge badge-secondary',
|
|
43
44
|
};
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHVzZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhLWdyaWQvc3JjL2xpYi9kYXRhLWdyaWQvc3RhdHVzZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQThCO0lBQzNELG1CQUFtQjtJQUNuQixRQUFRLEVBQUUscUJBQXFCO0lBQy9CLFVBQVUsRUFBRSxxQkFBcUI7SUFDakMsVUFBVSxFQUFFLHFCQUFxQjtJQUNqQyxXQUFXLEVBQUUscUJBQXFCO0lBQ2xDLFdBQVcsRUFBRSxxQkFBcUI7SUFDbEMsVUFBVSxFQUFFLHFCQUFxQjtJQUNqQyxPQUFPLEVBQUUscUJBQXFCO0lBQzlCLGdCQUFnQixFQUFFLHFCQUFxQjtJQUN2QyxlQUFlLEVBQUUscUJBQXFCO0lBRXRDLHlCQUF5QjtJQUN6QixVQUFVLEVBQUUscUJBQXFCO0lBQ2pDLFVBQVUsRUFBRSxxQkFBcUI7SUFDakMsV0FBVyxFQUFFLHFCQUFxQjtJQUNsQyxRQUFRLEVBQUUscUJBQXFCO0lBQy9CLFVBQVUsRUFBRSxxQkFBcUI7SUFDakMsYUFBYSxFQUFFLHFCQUFxQjtJQUNwQyxpQkFBaUIsRUFBRSxxQkFBcUI7SUFDeEMsa0JBQWtCLEVBQUUscUJBQXFCO0lBQ3pDLHVCQUF1QixFQUFFLHFCQUFxQjtJQUM5QyxTQUFTLEVBQUUscUJBQXFCO0lBQ2hDLE9BQU8sRUFBRSxxQkFBcUI7SUFFOUIsZ0JBQWdCO0lBQ2hCLFVBQVUsRUFBRSxvQkFBb0I7SUFDaEMsVUFBVSxFQUFFLG9CQUFvQjtJQUNoQyxZQUFZLEVBQUUsb0JBQW9CO0lBQ2xDLFNBQVMsRUFBRSxvQkFBb0I7SUFDL0IsUUFBUSxFQUFFLG9CQUFvQjtJQUM5QixnQkFBZ0IsRUFBRSxvQkFBb0I7SUFDdEMsaUJBQWlCLEVBQUUsb0JBQW9CO0lBQ3ZDLGFBQWEsRUFBRSxvQkFBb0I7SUFDbkMsWUFBWSxFQUFFLG9CQUFvQjtJQUNsQyxRQUFRLEVBQUUsb0JBQW9CO0lBQzlCLFFBQVEsRUFBRSxvQkFBb0I7SUFFOUIsZUFBZTtJQUNmLFdBQVcsRUFBRSxrQkFBa0I7SUFDL0IsU0FBUyxFQUFFLGtCQUFrQjtJQUU3Qix3QkFBd0I7SUFDeEIsU0FBUyxFQUFFLGtCQUFrQjtJQUM3QixPQUFPLEVBQUUsa0JBQWtCO0lBQzNCLFNBQVMsRUFBRSxxQkFBcUI7SUFFaEMsTUFBTSxFQUFFLHVCQUF1QjtDQUNoQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFNUQVRVU0VTX0JBREdFX01BUDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcclxuICAvLyAgU3VjY2VzcyDigJMgR3JlZW5cclxuICAnYWN0aXZlJzogJ2JhZGdlIGJhZGdlLXN1Y2Nlc3MnLFxyXG4gICdhcHByb3ZlZCc6ICdiYWRnZSBiYWRnZS1zdWNjZXNzJyxcclxuICAnYWNjZXB0ZWQnOiAnYmFkZ2UgYmFkZ2Utc3VjY2VzcycsXHJcbiAgJ2NvbXBsZXRlZCc6ICdiYWRnZSBiYWRnZS1zdWNjZXNzJyxcclxuICAnZXZhbHVhdGVkJzogJ2JhZGdlIGJhZGdlLXN1Y2Nlc3MnLFxyXG4gICdhc3NpZ25lZCc6ICdiYWRnZSBiYWRnZS1zdWNjZXNzJyxcclxuICAnc2NyYXAnOiAnYmFkZ2UgYmFkZ2Utc3VjY2VzcycsXHJcbiAgJ21vdmUtYXZhaWxhYmxlJzogJ2JhZGdlIGJhZGdlLXN1Y2Nlc3MnLFxyXG4gICdtb3ZlLWFzc2lnbmVkJzogJ2JhZGdlIGJhZGdlLXN1Y2Nlc3MnLFxyXG5cclxuICAvLyBXYXJuaW5nIOKAkyBZZWxsb3cvQW1iZXJcclxuICAnY29udHJhY3QnOiAnYmFkZ2UgYmFkZ2Utd2FybmluZycsXHJcbiAgJ3dhcnJhbnR5JzogJ2JhZGdlIGJhZGdlLXdhcm5pbmcnLFxyXG4gICdzY2hlZHVsZWQnOiAnYmFkZ2UgYmFkZ2Utd2FybmluZycsXHJcbiAgJ2xlYXNlZCc6ICdiYWRnZSBiYWRnZS13YXJuaW5nJyxcclxuICAnZGlzcG9zZWQnOiAnYmFkZ2UgYmFkZ2Utd2FybmluZycsXHJcbiAgJ21haW50ZW5hbmNlJzogJ2JhZGdlIGJhZGdlLXdhcm5pbmcnLFxyXG4gICdhc3NpZ25pbmcgc3RhcnQnOiAnYmFkZ2UgYmFkZ2Utd2FybmluZycsXHJcbiAgJ2V2YWx1YXRpb24gc3RhcnQnOiAnYmFkZ2UgYmFkZ2Utd2FybmluZycsXHJcbiAgJ3RvIGJlIHN0YXJ0IGFzc2lnbmluZyc6ICdiYWRnZSBiYWRnZS13YXJuaW5nJyxcclxuICAncGVuZGluZyc6ICdiYWRnZSBiYWRnZS13YXJuaW5nJyxcclxuICAnbGVhdmUnOiAnYmFkZ2UgYmFkZ2Utd2FybmluZycsXHJcblxyXG4gIC8vICBEYW5nZXIg4oCTIFJlZFxyXG4gICdpbmFjdGl2ZSc6ICdiYWRnZSBiYWRnZS1kYW5nZXInLFxyXG4gICdyZWplY3RlZCc6ICdiYWRnZSBiYWRnZS1kYW5nZXInLFxyXG4gICd1bmFzc2lnbmVkJzogJ2JhZGdlIGJhZGdlLWRhbmdlcicsXHJcbiAgJ3RyYXNoZWQnOiAnYmFkZ2UgYmFkZ2UtZGFuZ2VyJyxcclxuICAnb25ob2xkJzogJ2JhZGdlIGJhZGdlLWRhbmdlcicsXHJcbiAgJ2Fzc2lnbmluZyBzdG9wJzogJ2JhZGdlIGJhZGdlLWRhbmdlcicsXHJcbiAgJ2V2YWx1YXRpb24gc3RvcCc6ICdiYWRnZSBiYWRnZS1kYW5nZXInLFxyXG4gICd1bmF2YWlsYWJsZSc6ICdiYWRnZSBiYWRnZS1kYW5nZXInLFxyXG4gICdtb3ZlLWVycm9yJzogJ2JhZGdlIGJhZGdlLWRhbmdlcicsXHJcbiAgJ2ZhaWxlZCc6ICdiYWRnZSBiYWRnZS1kYW5nZXInLFxyXG4gICdhYnNlbnQnOiAnYmFkZ2UgYmFkZ2UtZGFuZ2VyJyxcclxuXHJcbiAgLy8gIEluZm8g4oCTIEJsdWVcclxuICAnaW5zdXJhbmNlJzogJ2JhZGdlIGJhZGdlLWluZm8nLFxyXG4gICdwYXN0ZHVlJzogJ2JhZGdlIGJhZGdlLWluZm8nLFxyXG5cclxuICAvLyAgRGFyayDigJMgTmV1dHJhbC9PdGhlclxyXG4gICdleHBpcmVkJzogJ2JhZGdlIGJhZGdlLWRhcmsnLFxyXG4gICdkcmFmdCc6ICdiYWRnZSBiYWRnZS1kYXJrJyxcclxuICAncHJlc2VudCc6ICdiYWRnZSBiYWRnZS1zdWNjZXNzJyxcclxuXHJcbiAgJ3RvZG8nOiAnYmFkZ2UgYmFkZ2Utc2Vjb25kYXJ5JyxcclxufTtcclxuIl19
|
|
@@ -3,23 +3,25 @@ import { DataGridComponent } from './data-grid/data-grid.component';
|
|
|
3
3
|
import { CommonModule } from '@angular/common';
|
|
4
4
|
import { FormsModule } from '@angular/forms';
|
|
5
5
|
import { FilterPipe } from './pipes/filter.pipe';
|
|
6
|
-
import { DraggableHeaderDirective } from './directives/draggable-header.directive';
|
|
7
6
|
import { DragDropModule } from '@angular/cdk/drag-drop';
|
|
8
7
|
import { InlineSVGModule } from 'ng-inline-svg';
|
|
9
8
|
import { ScrollingModule } from '@angular/cdk/scrolling';
|
|
9
|
+
import { CellHostDirective } from './directives/cellHost.directive';
|
|
10
|
+
import { CellRenderInitDirective } from './directives/cell-render-init.directive';
|
|
10
11
|
import * as i0 from "@angular/core";
|
|
12
|
+
import * as i1 from "ng-inline-svg";
|
|
11
13
|
export class DataGridModule {
|
|
12
14
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataGridModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
13
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: DataGridModule, declarations: [DataGridComponent, FilterPipe,
|
|
14
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataGridModule, imports: [CommonModule, FormsModule, DragDropModule, InlineSVGModule, ScrollingModule
|
|
15
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: DataGridModule, declarations: [DataGridComponent, FilterPipe, CellHostDirective, CellRenderInitDirective], imports: [CommonModule, FormsModule, DragDropModule, i1.InlineSVGModule, ScrollingModule], exports: [DataGridComponent] }); }
|
|
16
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataGridModule, imports: [CommonModule, FormsModule, DragDropModule, InlineSVGModule.forRoot(), ScrollingModule] }); }
|
|
15
17
|
}
|
|
16
18
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataGridModule, decorators: [{
|
|
17
19
|
type: NgModule,
|
|
18
20
|
args: [{
|
|
19
|
-
declarations: [DataGridComponent, FilterPipe,
|
|
20
|
-
imports: [CommonModule, FormsModule, DragDropModule, InlineSVGModule, ScrollingModule],
|
|
21
|
-
exports: [DataGridComponent
|
|
21
|
+
declarations: [DataGridComponent, FilterPipe, CellHostDirective, CellRenderInitDirective],
|
|
22
|
+
imports: [CommonModule, FormsModule, DragDropModule, InlineSVGModule.forRoot(), ScrollingModule],
|
|
23
|
+
exports: [DataGridComponent],
|
|
22
24
|
providers: [],
|
|
23
25
|
}]
|
|
24
26
|
}] });
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1ncmlkLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGEtZ3JpZC9zcmMvbGliL2RhdGEtZ3JpZC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVoRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDcEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0seUNBQXlDLENBQUM7OztBQVVsRixNQUFNLE9BQU8sY0FBYzsrR0FBZCxjQUFjO2dIQUFkLGNBQWMsaUJBTFYsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLHVCQUF1QixhQUM5RSxZQUFZLEVBQUUsV0FBVyxFQUFFLGNBQWMsc0JBQTZCLGVBQWUsYUFDckYsaUJBQWlCO2dIQUdoQixjQUFjLFlBSmYsWUFBWSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsZUFBZSxDQUFDLE9BQU8sRUFBRSxFQUFFLGVBQWU7OzRGQUlwRixjQUFjO2tCQU4xQixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSx1QkFBdUIsQ0FBRztvQkFDM0YsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsZUFBZSxDQUFDLE9BQU8sRUFBRSxFQUFFLGVBQWUsQ0FBQztvQkFDaEcsT0FBTyxFQUFFLENBQUMsaUJBQWlCLENBQUM7b0JBQzVCLFNBQVMsRUFBRSxFQUFFO2lCQUNkIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRGF0YUdyaWRDb21wb25lbnQgfSBmcm9tICcuL2RhdGEtZ3JpZC9kYXRhLWdyaWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEZpbHRlclBpcGUgfSBmcm9tICcuL3BpcGVzL2ZpbHRlci5waXBlJztcclxuaW1wb3J0IHsgRHJhZ0Ryb3BNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcclxuaW1wb3J0IHsgSW5saW5lU1ZHTW9kdWxlIH0gZnJvbSAnbmctaW5saW5lLXN2Zyc7XHJcbmltcG9ydCB7IEJyb3dzZXJBbmltYXRpb25zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlci9hbmltYXRpb25zJztcclxuaW1wb3J0IHsgU2Nyb2xsaW5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7IFxyXG5pbXBvcnQgeyBDZWxsSG9zdERpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9jZWxsSG9zdC5kaXJlY3RpdmUnOyBcclxuaW1wb3J0IHsgQ2VsbFJlbmRlckluaXREaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvY2VsbC1yZW5kZXItaW5pdC5kaXJlY3RpdmUnOyBcclxuXHJcblxyXG5cclxuQE5nTW9kdWxlKHtcclxuICBkZWNsYXJhdGlvbnM6IFtEYXRhR3JpZENvbXBvbmVudCwgRmlsdGVyUGlwZSwgQ2VsbEhvc3REaXJlY3RpdmUsIENlbGxSZW5kZXJJbml0RGlyZWN0aXZlICBdLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlLCBEcmFnRHJvcE1vZHVsZSwgSW5saW5lU1ZHTW9kdWxlLmZvclJvb3QoKSwgU2Nyb2xsaW5nTW9kdWxlXSxcclxuICBleHBvcnRzOiBbRGF0YUdyaWRDb21wb25lbnRdLFxyXG4gIHByb3ZpZGVyczogW10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEYXRhR3JpZE1vZHVsZSB7fVxyXG4iXX0=
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Directive, Input, Injector } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class CellRenderInitDirective {
|
|
4
|
+
constructor(vcr, injector) {
|
|
5
|
+
this.vcr = vcr;
|
|
6
|
+
this.injector = injector;
|
|
7
|
+
}
|
|
8
|
+
ngOnInit() {
|
|
9
|
+
if (!this.componentType)
|
|
10
|
+
return;
|
|
11
|
+
// ✅ Dynamically create the component
|
|
12
|
+
const componentRef = this.vcr.createComponent(this.componentType, {
|
|
13
|
+
injector: Injector.create({
|
|
14
|
+
providers: [
|
|
15
|
+
{ provide: 'rowData', useValue: this.rowData },
|
|
16
|
+
{ provide: 'colData', useValue: this.colData },
|
|
17
|
+
{ provide: 'cellValue', useValue: this.cellValue }
|
|
18
|
+
],
|
|
19
|
+
parent: this.injector
|
|
20
|
+
})
|
|
21
|
+
});
|
|
22
|
+
// ✅ Automatically call custom lifecycle hook if present
|
|
23
|
+
if (typeof componentRef.instance.gridInit === 'function') {
|
|
24
|
+
componentRef.instance.gridInit({
|
|
25
|
+
row: this.rowData,
|
|
26
|
+
col: this.colData,
|
|
27
|
+
value: this.cellValue
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
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 }); }
|
|
32
|
+
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" }, ngImport: i0 }); }
|
|
33
|
+
}
|
|
34
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CellRenderInitDirective, decorators: [{
|
|
35
|
+
type: Directive,
|
|
36
|
+
args: [{
|
|
37
|
+
selector: '[cellRenderInit]'
|
|
38
|
+
}]
|
|
39
|
+
}], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.Injector }]; }, propDecorators: { componentType: [{
|
|
40
|
+
type: Input,
|
|
41
|
+
args: ['cellRenderInit']
|
|
42
|
+
}], rowData: [{
|
|
43
|
+
type: Input
|
|
44
|
+
}], colData: [{
|
|
45
|
+
type: Input
|
|
46
|
+
}], cellValue: [{
|
|
47
|
+
type: Input
|
|
48
|
+
}] } });
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1yZW5kZXItaW5pdC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhLWdyaWQvc3JjL2xpYi9kaXJlY3RpdmVzL2NlbGwtcmVuZGVyLWluaXQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUdMLFFBQVEsRUFHVCxNQUFNLGVBQWUsQ0FBQzs7QUFLdkIsTUFBTSxPQUFPLHVCQUF1QjtJQU1sQyxZQUFvQixHQUFxQixFQUFVLFFBQWtCO1FBQWpELFFBQUcsR0FBSCxHQUFHLENBQWtCO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBVTtJQUFHLENBQUM7SUFFekUsUUFBUTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYTtZQUFFLE9BQU87UUFFaEMscUNBQXFDO1FBQ3JDLE1BQU0sWUFBWSxHQUFzQixJQUFJLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ25GLFFBQVEsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDO2dCQUN4QixTQUFTLEVBQUU7b0JBQ1QsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFO29CQUM5QyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUU7b0JBQzlDLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRTtpQkFDbkQ7Z0JBQ0QsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRO2FBQ3RCLENBQUM7U0FDSCxDQUFDLENBQUM7UUFFSCx3REFBd0Q7UUFDeEQsSUFBSSxPQUFPLFlBQVksQ0FBQyxRQUFRLENBQUMsUUFBUSxLQUFLLFVBQVUsRUFBRTtZQUN4RCxZQUFZLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztnQkFDN0IsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPO2dCQUNqQixHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU87Z0JBQ2pCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUzthQUN0QixDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7K0dBL0JVLHVCQUF1QjttR0FBdkIsdUJBQXVCOzs0RkFBdkIsdUJBQXVCO2tCQUhuQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxrQkFBa0I7aUJBQzdCOzhIQUUwQixhQUFhO3NCQUFyQyxLQUFLO3VCQUFDLGdCQUFnQjtnQkFDZCxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIERpcmVjdGl2ZSxcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgVmlld0NvbnRhaW5lclJlZixcclxuICBJbmplY3RvcixcclxuICBDb21wb25lbnRSZWYsXHJcbiAgVHlwZVxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbY2VsbFJlbmRlckluaXRdJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2VsbFJlbmRlckluaXREaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgnY2VsbFJlbmRlckluaXQnKSBjb21wb25lbnRUeXBlITogVHlwZTxhbnk+O1xyXG4gIEBJbnB1dCgpIHJvd0RhdGE6IGFueTtcclxuICBASW5wdXQoKSBjb2xEYXRhOiBhbnk7XHJcbiAgQElucHV0KCkgY2VsbFZhbHVlOiBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdmNyOiBWaWV3Q29udGFpbmVyUmVmLCBwcml2YXRlIGluamVjdG9yOiBJbmplY3Rvcikge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuY29tcG9uZW50VHlwZSkgcmV0dXJuO1xyXG5cclxuICAgIC8vIOKchSBEeW5hbWljYWxseSBjcmVhdGUgdGhlIGNvbXBvbmVudFxyXG4gICAgY29uc3QgY29tcG9uZW50UmVmOiBDb21wb25lbnRSZWY8YW55PiA9IHRoaXMudmNyLmNyZWF0ZUNvbXBvbmVudCh0aGlzLmNvbXBvbmVudFR5cGUsIHtcclxuICAgICAgaW5qZWN0b3I6IEluamVjdG9yLmNyZWF0ZSh7XHJcbiAgICAgICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAgICB7IHByb3ZpZGU6ICdyb3dEYXRhJywgdXNlVmFsdWU6IHRoaXMucm93RGF0YSB9LFxyXG4gICAgICAgICAgeyBwcm92aWRlOiAnY29sRGF0YScsIHVzZVZhbHVlOiB0aGlzLmNvbERhdGEgfSxcclxuICAgICAgICAgIHsgcHJvdmlkZTogJ2NlbGxWYWx1ZScsIHVzZVZhbHVlOiB0aGlzLmNlbGxWYWx1ZSB9XHJcbiAgICAgICAgXSxcclxuICAgICAgICBwYXJlbnQ6IHRoaXMuaW5qZWN0b3JcclxuICAgICAgfSlcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIOKchSBBdXRvbWF0aWNhbGx5IGNhbGwgY3VzdG9tIGxpZmVjeWNsZSBob29rIGlmIHByZXNlbnRcclxuICAgIGlmICh0eXBlb2YgY29tcG9uZW50UmVmLmluc3RhbmNlLmdyaWRJbml0ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5ncmlkSW5pdCh7XHJcbiAgICAgICAgcm93OiB0aGlzLnJvd0RhdGEsXHJcbiAgICAgICAgY29sOiB0aGlzLmNvbERhdGEsXHJcbiAgICAgICAgdmFsdWU6IHRoaXMuY2VsbFZhbHVlXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Directive } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class CellHostDirective {
|
|
4
|
+
constructor(viewContainerRef) {
|
|
5
|
+
this.viewContainerRef = viewContainerRef;
|
|
6
|
+
}
|
|
7
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CellHostDirective, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
8
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: CellHostDirective, selector: "[cellHost]", ngImport: i0 }); }
|
|
9
|
+
}
|
|
10
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CellHostDirective, decorators: [{
|
|
11
|
+
type: Directive,
|
|
12
|
+
args: [{
|
|
13
|
+
selector: '[cellHost]'
|
|
14
|
+
}]
|
|
15
|
+
}], ctorParameters: function () { return [{ type: i0.ViewContainerRef }]; } });
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbEhvc3QuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS1ncmlkL3NyYy9saWIvZGlyZWN0aXZlcy9jZWxsSG9zdC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBb0IsTUFBTSxlQUFlLENBQUM7O0FBSzVELE1BQU0sT0FBTyxpQkFBaUI7SUFFNUIsWUFBbUIsZ0JBQWtDO1FBQWxDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7SUFBRyxDQUFDOytHQUY5QyxpQkFBaUI7bUdBQWpCLGlCQUFpQjs7NEZBQWpCLGlCQUFpQjtrQkFIN0IsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsWUFBWTtpQkFDdkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW2NlbGxIb3N0XSdcclxufSlcclxuZXhwb3J0IGNsYXNzIENlbGxIb3N0RGlyZWN0aXZlICB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmKSB7fVxyXG5cclxufVxyXG4iXX0=
|
|
@@ -25,4 +25,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
25
25
|
name: 'filter',
|
|
26
26
|
}]
|
|
27
27
|
}] });
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhLWdyaWQvc3JjL2xpYi9waXBlcy9maWx0ZXIucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQzs7QUFLcEQsTUFBTSxPQUFPLFVBQVU7SUFDdkIsU0FBUyxDQUFDLEtBQVksRUFBRSxVQUFrQixFQUFFLEdBQVk7UUFDdEQsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLFVBQVU7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUV4QyxNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFN0MsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3pCLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUU7Z0JBQzNDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDeEIsT0FBTyxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQzlEO1lBQ0QsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFO2dCQUN4RCxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDNUQ7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzsrR0FoQlksVUFBVTs2R0FBVixVQUFVOzs0RkFBVixVQUFVO2tCQUh0QixJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSxRQUFRO2lCQUNmIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQFBpcGUoe1xyXG4gIG5hbWU6ICdmaWx0ZXInLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRmlsdGVyUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xyXG50cmFuc2Zvcm0oaXRlbXM6IGFueVtdLCBzZWFyY2hUZXh0OiBzdHJpbmcsIGtleT86IHN0cmluZyk6IGFueVtdIHtcclxuICBpZiAoIWl0ZW1zIHx8ICFzZWFyY2hUZXh0KSByZXR1cm4gaXRlbXM7XHJcbiBcclxuICBjb25zdCBsb3dlclNlYXJjaCA9IHNlYXJjaFRleHQudG9Mb3dlckNhc2UoKTtcclxuIFxyXG4gIHJldHVybiBpdGVtcy5maWx0ZXIoaXRlbSA9PiB7XHJcbiAgICBpZiAoa2V5ICYmIGl0ZW0gJiYgdHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnKSB7XHJcbiAgICAgIGNvbnN0IHZhbHVlID0gaXRlbVtrZXldO1xyXG4gICAgICByZXR1cm4gdmFsdWU/LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhsb3dlclNlYXJjaCk7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBpdGVtID09PSAnbnVtYmVyJykge1xyXG4gICAgICByZXR1cm4gaXRlbS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobG93ZXJTZWFyY2gpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH0pO1xyXG59fVxyXG4iXX0=
|
|
@@ -6,7 +6,7 @@ export class CommonService {
|
|
|
6
6
|
}
|
|
7
7
|
gethasVisibleColumns(columns) {
|
|
8
8
|
const checkVisible = (columns) => {
|
|
9
|
-
return columns
|
|
9
|
+
return columns.some((col) => {
|
|
10
10
|
if (col?.is_visible)
|
|
11
11
|
return true;
|
|
12
12
|
if (col?.children?.length) {
|
|
@@ -19,7 +19,7 @@ export class CommonService {
|
|
|
19
19
|
}
|
|
20
20
|
gethasInVisibleColumns(columns) {
|
|
21
21
|
const checkVisible = (columns) => {
|
|
22
|
-
return columns
|
|
22
|
+
return columns.some((col) => {
|
|
23
23
|
if (!col?.is_visible)
|
|
24
24
|
return true;
|
|
25
25
|
if (col?.children?.length) {
|
|
@@ -44,7 +44,7 @@ export class CommonService {
|
|
|
44
44
|
}
|
|
45
45
|
gethasRightPinnedColumns(columns) {
|
|
46
46
|
const checkPinnedRight = (columns) => {
|
|
47
|
-
return columns
|
|
47
|
+
return columns.some((col) => {
|
|
48
48
|
if (col?.pinned === 'right' && col?.is_visible)
|
|
49
49
|
return true;
|
|
50
50
|
if (col?.children?.length) {
|
|
@@ -57,7 +57,7 @@ export class CommonService {
|
|
|
57
57
|
}
|
|
58
58
|
gethasLeftPinnedColumns(columns) {
|
|
59
59
|
const checkPinnedRight = (columns) => {
|
|
60
|
-
return columns
|
|
60
|
+
return columns.some((col) => {
|
|
61
61
|
if (col?.pinned === 'left' && col?.is_visible)
|
|
62
62
|
return true;
|
|
63
63
|
if (col?.children?.length) {
|
|
@@ -96,7 +96,7 @@ export class CommonService {
|
|
|
96
96
|
getFiltersFromColumns(columns, filtersConfig) {
|
|
97
97
|
const result = [];
|
|
98
98
|
const checkColumn = (col) => {
|
|
99
|
-
if (col
|
|
99
|
+
if (col.query?.condition === 'none') {
|
|
100
100
|
col.query.second_value = null;
|
|
101
101
|
col.query.second_condition = null;
|
|
102
102
|
}
|
|
@@ -125,7 +125,7 @@ export class CommonService {
|
|
|
125
125
|
first_value: null,
|
|
126
126
|
second_value: null,
|
|
127
127
|
first_condition: col.type !== 'date' ? 'contain' : 'equal',
|
|
128
|
-
second_condition:
|
|
128
|
+
second_condition: null,
|
|
129
129
|
condition: 'none',
|
|
130
130
|
_ids: []
|
|
131
131
|
};
|
|
@@ -133,20 +133,49 @@ export class CommonService {
|
|
|
133
133
|
const filter = filters.find(f => f.field === col.field);
|
|
134
134
|
if (filter) {
|
|
135
135
|
if (col.type === 'dropdown') {
|
|
136
|
-
|
|
136
|
+
const selectedIds = filter._ids ?? [];
|
|
137
|
+
const dropdownValues = col.column_dropdown_value ?? [];
|
|
138
|
+
// ✅ Map depending on dropdown value structure
|
|
139
|
+
let selectedLabels = [];
|
|
140
|
+
if (Array.isArray(dropdownValues) && dropdownValues.length > 0) {
|
|
141
|
+
if (typeof dropdownValues[0] === 'object') {
|
|
142
|
+
// object-based dropdowns: { id, name/label/value/text }
|
|
143
|
+
selectedLabels = dropdownValues
|
|
144
|
+
.filter(opt => selectedIds.includes(opt.id))
|
|
145
|
+
.map(opt => opt.name ?? opt.label ?? opt.value ?? opt.text ?? '');
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
// string-based dropdowns
|
|
149
|
+
selectedLabels = dropdownValues.filter(opt => selectedIds.includes(opt));
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
// ✅ Store readable text in filterValue (comma-separated)
|
|
153
|
+
col.filterValue = selectedLabels.join(', ');
|
|
154
|
+
// maintain query state
|
|
155
|
+
col.query._ids = selectedIds;
|
|
137
156
|
col.search = filter.search ?? '';
|
|
138
|
-
col.query._ids = filter._ids ?? [];
|
|
139
157
|
}
|
|
140
158
|
else {
|
|
141
|
-
|
|
159
|
+
// ✅ Non-dropdown filters (text/date/number)
|
|
160
|
+
col.filterValue = filter.search || filter.query?.first_value || '';
|
|
142
161
|
col.search = filter.search ?? '';
|
|
143
162
|
col.query.first_value = filter.query?.first_value ?? null;
|
|
144
163
|
col.query.second_value = filter.query?.second_value ?? null;
|
|
145
|
-
col.query.first_condition =
|
|
146
|
-
|
|
164
|
+
col.query.first_condition =
|
|
165
|
+
filter.query?.first_condition ??
|
|
166
|
+
(col.type !== 'date' ? 'contain' : 'equal');
|
|
167
|
+
col.query.second_condition = filter.query?.second_condition ?? null;
|
|
147
168
|
col.query.condition = filter.query?.condition ?? 'none';
|
|
148
169
|
}
|
|
149
170
|
}
|
|
171
|
+
else {
|
|
172
|
+
// Clear filter if not present
|
|
173
|
+
col.filterValue = null;
|
|
174
|
+
col.search = '';
|
|
175
|
+
col.query._ids = [];
|
|
176
|
+
col.query.first_value = null;
|
|
177
|
+
}
|
|
178
|
+
// ✅ Recursively apply for children
|
|
150
179
|
if (Array.isArray(col.children) && col.children.length > 0) {
|
|
151
180
|
col.children = await this.applyFiltersToColumns(col.children, filters);
|
|
152
181
|
}
|
|
@@ -207,4 +236,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
207
236
|
providedIn: 'root'
|
|
208
237
|
}]
|
|
209
238
|
}], ctorParameters: function () { return []; } });
|
|
210
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhLWdyaWQvc3JjL2xpYi9zZXJ2aWNlcy9jb21tb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUszQyxNQUFNLE9BQU8sYUFBYTtJQUV4QjtRQXlLRiwwQkFBcUIsR0FBVSxFQUFFLENBQUM7SUF6S2hCLENBQUM7SUFDakIsb0JBQW9CLENBQUMsT0FBYztRQUNqQyxNQUFNLFlBQVksR0FBRyxDQUFDLE9BQWMsRUFBVyxFQUFFO1lBQy9DLE9BQU8sT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUMzQixJQUFJLEdBQUcsRUFBRSxVQUFVO29CQUFFLE9BQU8sSUFBSSxDQUFDO2dCQUNqQyxJQUFJLEdBQUcsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFO29CQUN6QixPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQ25DO2dCQUNELE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUM7UUFDRixPQUFPLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsc0JBQXNCLENBQUMsT0FBYztRQUNuQyxNQUFNLFlBQVksR0FBRyxDQUFDLE9BQWMsRUFBVyxFQUFFO1lBQy9DLE9BQU8sT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUMzQixJQUFJLENBQUMsR0FBRyxFQUFFLFVBQVU7b0JBQUUsT0FBTyxJQUFJLENBQUM7Z0JBQ2xDLElBQUksR0FBRyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUU7b0JBQ3pCLE9BQU8sWUFBWSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDbkM7Z0JBQ0Qs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QUFFLEtBQUssQ0FBQztpQkFDM0U7Z0JBQ0QsT0FBTyxPQUFPLEtBQUssUUFBUSxDQUFDO1lBRTlCLEtBQUssU0FBUztnQkFDWixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFaEQsS0FBSyxNQUFNO2dCQUNULE1BQU0sV0FBVyxHQUFHLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNoRCxNQUFNLFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDbEQsT0FBTyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQztvQkFDOUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxRQUFRO29CQUN0QixDQUFDLENBQUMsV0FBVyxLQUFLLFlBQVksQ0FBQztZQUVuQztnQkFDRSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUMvRDtJQUNILENBQUM7K0dBdE9VLGFBQWE7bUhBQWIsYUFBYSxjQUZaLE1BQU07OzRGQUVQLGFBQWE7a0JBSHpCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29tbW9uU2VydmljZSB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcbiAgZ2V0aGFzVmlzaWJsZUNvbHVtbnMoY29sdW1uczogYW55W10pOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGNoZWNrVmlzaWJsZSA9IChjb2x1bW5zOiBhbnlbXSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICByZXR1cm4gY29sdW1ucz8uc29tZSgoY29sKSA9PiB7XHJcbiAgICAgICAgaWYgKGNvbD8uaXNfdmlzaWJsZSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgaWYgKGNvbD8uY2hpbGRyZW4/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgcmV0dXJuIGNoZWNrVmlzaWJsZShjb2wuY2hpbGRyZW4pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBjaGVja1Zpc2libGUoY29sdW1ucyk7XHJcbiAgfVxyXG5cclxuICBnZXRoYXNJblZpc2libGVDb2x1bW5zKGNvbHVtbnM6IGFueVtdKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBjaGVja1Zpc2libGUgPSAoY29sdW1uczogYW55W10pOiBib29sZWFuID0+IHtcclxuICAgICAgcmV0dXJuIGNvbHVtbnM/LnNvbWUoKGNvbCkgPT4ge1xyXG4gICAgICAgIGlmICghY29sPy5pc192aXNpYmxlKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBpZiAoY29sPy5jaGlsZHJlbj8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICByZXR1cm4gY2hlY2tWaXNpYmxlKGNvbC5jaGlsZHJlbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGNoZWNrVmlzaWJsZShjb2x1bW5zKTtcclxuICB9XHJcblxyXG5cclxuICBnZXRUb3RhbENvbHVtbnNMZW5ndGgoY29sdW1uczogYW55W10pOiBudW1iZXIge1xyXG4gICAgbGV0IGNvdW50ID0gMDtcclxuXHJcbiAgICBjb2x1bW5zLmZvckVhY2goY29sID0+IHtcclxuICAgICAgaWYgKGNvbC5jaGlsZHJlbiAmJiBBcnJheS5pc0FycmF5KGNvbC5jaGlsZHJlbikgJiYgY29sLmNoaWxkcmVuLmxlbmd0aCkge1xyXG4gICAgICAgIGNvdW50ICs9IGNvbC5jaGlsZHJlbi5sZW5ndGg7IC8vIGNvdW50IGNoaWxkcmVuIGluc3RlYWQgb2YgcGFyZW50XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY291bnQgKz0gMTsgLy8gY291bnQgcGFyZW50IGRpcmVjdGx5XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBjb3VudDtcclxuICB9XHJcblxyXG4gIGdldGhhc1JpZ2h0UGlubmVkQ29sdW1ucyhjb2x1bW5zOiBhbnlbXSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgY2hlY2tQaW5uZWRSaWdodCA9IChjb2x1bW5zOiBhbnlbXSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICByZXR1cm4gY29sdW1ucz8uc29tZSgoY29sKSA9PiB7XHJcbiAgICAgICAgaWYgKGNvbD8ucGlubmVkID09PSAncmlnaHQnICYmIGNvbD8uaXNfdmlzaWJsZSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgaWYgKGNvbD8uY2hpbGRyZW4/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgcmV0dXJuIGNoZWNrUGlubmVkUmlnaHQoY29sLmNoaWxkcmVuKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9KTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gY2hlY2tQaW5uZWRSaWdodChjb2x1bW5zKTtcclxuICB9XHJcblxyXG4gIGdldGhhc0xlZnRQaW5uZWRDb2x1bW5zKGNvbHVtbnM6IGFueVtdKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBjaGVja1Bpbm5lZFJpZ2h0ID0gKGNvbHVtbnM6IGFueVtdKTogYm9vbGVhbiA9PiB7XHJcbiAgICAgIHJldHVybiBjb2x1bW5zPy5zb21lKChjb2wpID0+IHtcclxuICAgICAgICBpZiAoY29sPy5waW5uZWQgPT09ICdsZWZ0JyAmJiBjb2w/LmlzX3Zpc2libGUpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIGlmIChjb2w/LmNoaWxkcmVuPy5sZW5ndGgpIHtcclxuICAgICAgICAgIHJldHVybiBjaGVja1Bpbm5lZFJpZ2h0KGNvbC5jaGlsZHJlbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGNoZWNrUGlubmVkUmlnaHQoY29sdW1ucyk7XHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0RXhwYW5kZWRSb3dDb3VudChkYXRhOiBhbnlbXSk6IG51bWJlciB7XHJcbiAgICBsZXQgZ3JvdXBDb3VudCA9IDA7XHJcbiAgICBsZXQgcm93Q291bnQgPSAwO1xyXG5cclxuICAgIGRhdGEuZm9yRWFjaChncm91cCA9PiB7XHJcbiAgICAgIGlmIChncm91cD8uaXNHcm91cCkge1xyXG4gICAgICAgIGdyb3VwQ291bnQrKztcclxuXHJcbiAgICAgICAgaWYgKGdyb3VwPy5pc0V4cGFuZCAmJiBBcnJheS5pc0FycmF5KGdyb3VwPy5jaGlsZHJlbikpIHtcclxuICAgICAgICAgIGdyb3VwLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKGNoaWxkLmlzR3JvdXApIHtcclxuICAgICAgICAgICAgICBpZiAoY2hpbGQuaXNFeHBhbmQgJiYgQXJyYXkuaXNBcnJheShjaGlsZC5jaGlsZHJlbikpIHtcclxuICAgICAgICAgICAgICAgIHJvd0NvdW50ICs9IGNoaWxkLmNoaWxkcmVuLmxlbmd0aDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcm93Q291bnQrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoZ3JvdXBDb3VudCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gZGF0YS5sZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGdyb3VwQ291bnQgKyByb3dDb3VudDtcclxuICB9XHJcblxyXG5cclxuZ2V0RmlsdGVyc0Zyb21Db2x1bW5zKGNvbHVtbnM6IGFueVtdLCBmaWx0ZXJzQ29uZmlnOmFueSBbXSk6IGFueVtdIHtcclxuICBjb25zdCByZXN1bHQ6IGFueVtdID0gW107XHJcbiBcclxuICBjb25zdCBjaGVja0NvbHVtbiA9IChjb2w6IGFueSkgPT4ge1xyXG4gICAgaWYoY29sPy5xdWVyeT8uY29uZGl0aW9uID09IFwibm9uZVwiKXtcclxuICAgICAgY29sLnF1ZXJ5LnNlY29uZF92YWx1ZSA9IG51bGw7XHJcbiAgICAgIGNvbC5xdWVyeS5zZWNvbmRfY29uZGl0aW9uID0gbnVsbDtcclxuICAgIH1cclxuICAgIGNvbnN0IGhhc0ZpcnN0VmFsdWUgPSBjb2wucXVlcnk/LmZpcnN0X3ZhbHVlICE9IG51bGwgJiYgY29sLnF1ZXJ5Py5maXJzdF92YWx1ZSAhPT0gXCJcIiAmJiBmaWx0ZXJzQ29uZmlnLnNvbWUoKGVsZSk9PiBlbGUuZmllbGQgPT0gY29sLmZpZWxkKTtcclxuICAgIGNvbnN0IGhhc0lkcyA9IEFycmF5LmlzQXJyYXkoY29sLnF1ZXJ5Py5faWRzKSAmJiBjb2wucXVlcnkuX2lkcy5sZW5ndGggPiAwICYmIGZpbHRlcnNDb25maWcuc29tZSgoZWxlKT0+IGVsZS5maWVsZCA9PSBjb2wuZmllbGQpO1xyXG4gICAgaWYgKGhhc0ZpcnN0VmFsdWUgfHwgaGFzSWRzKSB7XHJcbiAgICAgIHJlc3VsdC5wdXNoKHtcclxuICAgICAgICBzZWFyY2g6IGNvbC5zZWFyY2ggPz8gXCJcIixcclxuICAgICAgICBmaWVsZDogY29sLmZpZWxkLFxyXG4gICAgICAgIHR5cGU6IGNvbC50eXBlLFxyXG4gICAgICAgIF9pZHM6IGNvbC50eXBlID09ICdkcm9wZG93bic/IGNvbC5xdWVyeT8uX2lkczogW10sXHJcbiAgICAgICAgcXVlcnk6IGNvbC50eXBlID09ICdkcm9wZG93bic/IG51bGwgOiAoY29sPy5xdWVyeT8uZmlyc3RfdmFsdWUgPyBjb2w/LnF1ZXJ5IDogbnVsbClcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiBcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGNvbC5jaGlsZHJlbikgJiYgY29sLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29sLmNoaWxkcmVuLmZvckVhY2goY2hlY2tDb2x1bW4pO1xyXG4gICAgfVxyXG4gIH07XHJcbiAgY29sdW1ucy5mb3JFYWNoKGNoZWNrQ29sdW1uKTtcclxuIFxyXG4gIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmFzeW5jIGFwcGx5RmlsdGVyc1RvQ29sdW1ucyhjb2x1bW5zOiBhbnlbXSwgZmlsdGVyczogYW55W10pOiBQcm9taXNlPGFueVtdPiB7XHJcbiAgZm9yIChjb25zdCBjb2wgb2YgY29sdW1ucykge1xyXG4gICAgaWYgKCFjb2wucXVlcnkpIHtcclxuICAgICAgY29sLnF1ZXJ5ID0ge1xyXG4gICAgICAgIGZpcnN0X3ZhbHVlOiBudWxsLFxyXG4gICAgICAgIHNlY29uZF92YWx1ZTogbnVsbCxcclxuICAgICAgICBmaXJzdF9jb25kaXRpb246IGNvbC50eXBlICE9PSAnZGF0ZSc/ICdjb250YWluJzogJ2VxdWFsJyxcclxuICAgICAgICBzZWNvbmRfY29uZGl0aW9uOiBjb2wudHlwZSAhPT0gJ2RhdGUnPyAnY29udGFpbic6ICdlcXVhbCcsXHJcbiAgICAgICAgY29uZGl0aW9uOiAnbm9uZScsXHJcbiAgICAgICAgX2lkczogW11cclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBmaWx0ZXIgPSBmaWx0ZXJzLmZpbmQoZiA9PiBmLmZpZWxkID09PSBjb2wuZmllbGQpO1xyXG5cclxuICAgIGlmIChmaWx0ZXIpIHtcclxuICAgICAgaWYgKGNvbC50eXBlID09PSAnZHJvcGRvd24nKSB7XHJcbiAgICAgICAgY29sLmZpbHRlclZhbHVlID0gZmlsdGVyLl9pZHMgPz8gW107XHJcbiAgICAgICAgY29sLnNlYXJjaCA9IGZpbHRlci5zZWFyY2ggPz8gJyc7XHJcbiAgICAgICAgY29sLnF1ZXJ5Ll9pZHMgPSBmaWx0ZXIuX2lkcyA/PyBbXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb2wuZmlsdGVyVmFsdWUgPSBmaWx0ZXIuc2VhcmNoID8/IG51bGw7XHJcbiAgICAgICAgY29sLnNlYXJjaCA9IGZpbHRlci5zZWFyY2ggPz8gJyc7XHJcbiAgICAgICAgY29sLnF1ZXJ5LmZpcnN0X3ZhbHVlID0gZmlsdGVyLnF1ZXJ5Py5maXJzdF92YWx1ZSA/PyBudWxsO1xyXG4gICAgICAgIGNvbC5xdWVyeS5zZWNvbmRfdmFsdWUgPSBmaWx0ZXIucXVlcnk/LnNlY29uZF92YWx1ZSA/PyBudWxsO1xyXG4gICAgICAgIGNvbC5xdWVyeS5maXJzdF9jb25kaXRpb24gPSAoZmlsdGVyLnF1ZXJ5Py5maXJzdF9jb25kaXRpb24pIHx8IChmaWx0ZXIudHlwZSAhPT0gJ2RhdGUnPyAnY29udGFpbic6ICdlcXVhbCcpO1xyXG4gICAgICAgIGNvbC5xdWVyeS5zZWNvbmRfY29uZGl0aW9uID0gKGZpbHRlci5xdWVyeT8uc2Vjb25kX2NvbmRpdGlvbikgfHwgKGZpbHRlci50eXBlICE9PSAnZGF0ZSc/ICdjb250YWluJzogJ2VxdWFsJyk7XHJcbiAgICAgICAgY29sLnF1ZXJ5LmNvbmRpdGlvbiA9IGZpbHRlci5xdWVyeT8uY29uZGl0aW9uID8/ICdub25lJztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY29sLmNoaWxkcmVuKSAmJiBjb2wuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb2wuY2hpbGRyZW4gPSBhd2FpdCB0aGlzLmFwcGx5RmlsdGVyc1RvQ29sdW1ucyhjb2wuY2hpbGRyZW4sIGZpbHRlcnMpO1xyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gY29sdW1ucztcclxufVxyXG5cclxuXHJcblxyXG5cclxuXHJcbmFjdGl2ZUZpbHRlcmVkQ29sdW1uczogYW55W10gPSBbXTtcclxudXBkYXRlQWN0aXZlRmlsdGVyZWRDb2x1bW5zKGNvbHVtbnM6IGFueVtdKTogYW55W10ge1xyXG4gIGNvbnN0IGNvbGxlY3RGaWx0ZXJlZCA9IChjb2xzOiBhbnlbXSk6IGFueVtdID0+IHtcclxuICAgIGxldCByZXN1bHQ6IGFueVtdID0gW107XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2xzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGNvbCA9IGNvbHNbaV07XHJcbiAgICAgIGlmIChjb2wuY2hpbGRyZW4gJiYgY29sLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KGNvbGxlY3RGaWx0ZXJlZChjb2wuY2hpbGRyZW4pKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGNvbC5xdWVyeSkge1xyXG4gICAgICAgIGNvbnN0IGhhc0Ryb3Bkb3duRmlsdGVyID1cclxuICAgICAgICAgIEFycmF5LmlzQXJyYXkoY29sLnF1ZXJ5Ll9pZHMpICYmIGNvbC5xdWVyeS5faWRzLmxlbmd0aCA+IDA7XHJcblxyXG4gICAgICAgIGNvbnN0IGhhc1ZhbHVlRmlsdGVyID1cclxuICAgICAgICAgIChjb2wucXVlcnkuZmlyc3RfdmFsdWUgJiYgY29sLnF1ZXJ5LmZpcnN0X3ZhbHVlICE9PSAnJykgfHxcclxuICAgICAgICAgIChjb2wucXVlcnkuc2Vjb25kX3ZhbHVlICYmIGNvbC5xdWVyeS5zZWNvbmRfdmFsdWUgIT09ICcnKTtcclxuXHJcbiAgICAgICAgaWYgKGhhc0Ryb3Bkb3duRmlsdGVyIHx8IGhhc1ZhbHVlRmlsdGVyKSB7XHJcbiAgICAgICAgICByZXN1bHQucHVzaChjb2wpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9O1xyXG4gIHRoaXMuYWN0aXZlRmlsdGVyZWRDb2x1bW5zID0gWy4uLmNvbGxlY3RGaWx0ZXJlZChjb2x1bW5zKV07XHJcbiAgcmV0dXJuIHRoaXMuYWN0aXZlRmlsdGVyZWRDb2x1bW5zO1xyXG59XHJcblxyXG5cclxuXHJcbmhhc0ZpZWxkQ2hhbmdlZChjdXJyZW50OiBhbnksIG9yaWdpbmFsOiBhbnksIHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgJ251bWJlcic6XHJcbiAgICAgICAgcmV0dXJuIE51bWJlcihjdXJyZW50KSAhPT0gTnVtYmVyKG9yaWdpbmFsKTtcclxuXHJcbiAgICAgIGNhc2UgJ3N0cmluZyc6XHJcbiAgICAgICAgcmV0dXJuIFN0cmluZyhjdXJyZW50IHx8ICcnKSAhPT0gU3RyaW5nKG9yaWdpbmFsIHx8ICcnKTtcclxuXHJcbiAgICAgIGNhc2UgJ2Ryb3Bkb3duJzpcclxuICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnQgPT09ICdvYmplY3QnICYmIHR5cGVvZiBvcmlnaW5hbCA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgIHJldHVybiBjdXJyZW50Py5pZCAhPT0gb3JpZ2luYWw/LmlkIHx8IGN1cnJlbnQ/LnZhbHVlICE9PSBvcmlnaW5hbD8udmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjdXJyZW50ICE9PSBvcmlnaW5hbDtcclxuXHJcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxyXG4gICAgICAgIHJldHVybiBCb29sZWFuKGN1cnJlbnQpICE9PSBCb29sZWFuKG9yaWdpbmFsKTtcclxuXHJcbiAgICAgIGNhc2UgJ2RhdGUnOlxyXG4gICAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gbmV3IERhdGUoY3VycmVudCkuZ2V0VGltZSgpO1xyXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsRGF0ZSA9IG5ldyBEYXRlKG9yaWdpbmFsKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgcmV0dXJuIGlzTmFOKGN1cnJlbnREYXRlKSB8fCBpc05hTihvcmlnaW5hbERhdGUpXHJcbiAgICAgICAgICA/IGN1cnJlbnQgIT09IG9yaWdpbmFsXHJcbiAgICAgICAgICA6IGN1cnJlbnREYXRlICE9PSBvcmlnaW5hbERhdGU7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShjdXJyZW50KSAhPT0gSlNPTi5zdHJpbmdpZnkob3JpZ2luYWwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG59XHJcblxyXG5cclxuXHJcblxyXG4iXX0=
|
|
239
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhLWdyaWQvc3JjL2xpYi9zZXJ2aWNlcy9jb21tb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUszQyxNQUFNLE9BQU8sYUFBYTtJQUV4QjtRQTRNRiwwQkFBcUIsR0FBVSxFQUFFLENBQUM7SUE1TWhCLENBQUM7SUFDakIsb0JBQW9CLENBQUMsT0FBYztRQUNqQyxNQUFNLFlBQVksR0FBRyxDQUFDLE9BQWMsRUFBVyxFQUFFO1lBQy9DLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUMxQixJQUFJLEdBQUcsRUFBRSxVQUFVO29CQUFFLE9BQU8sSUFBSSxDQUFDO2dCQUNqQyxJQUFJLEdBQUcsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFO29CQUN6QixPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQ25DO2dCQUNELE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUM7UUFDRixPQUFPLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsc0JBQXNCLENBQUMsT0FBYztRQUNuQyxNQUFNLFlBQVksR0FBRyxDQUFDLE9BQWMsRUFBVyxFQUFFO1lBQy9DLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUMxQixJQUFJLENBQUMsR0FBRyxFQUFFLFVBQVU7b0JBQUUsT0FBTyxJQUFJLENBQUM7Z0JBQ2xDLElBQUksR0FBRyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUU7b0JBQ3pCLE9BQU8sWUFBWSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDbkM7Z0JBQ0Qs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USxDQUFDLENBQUM7WUFFaEQsS0FBSyxNQUFNO2dCQUNULE1BQU0sV0FBVyxHQUFHLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNoRCxNQUFNLFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDbEQsT0FBTyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQztvQkFDOUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxRQUFRO29CQUN0QixDQUFDLENBQUMsV0FBVyxLQUFLLFlBQVksQ0FBQztZQUVuQztnQkFDRSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUMvRDtJQUNILENBQUM7K0dBelFVLGFBQWE7bUhBQWIsYUFBYSxjQUZaLE1BQU07OzRGQUVQLGFBQWE7a0JBSHpCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29tbW9uU2VydmljZSB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcbiAgZ2V0aGFzVmlzaWJsZUNvbHVtbnMoY29sdW1uczogYW55W10pOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGNoZWNrVmlzaWJsZSA9IChjb2x1bW5zOiBhbnlbXSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICByZXR1cm4gY29sdW1ucy5zb21lKChjb2wpID0+IHtcclxuICAgICAgICBpZiAoY29sPy5pc192aXNpYmxlKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBpZiAoY29sPy5jaGlsZHJlbj8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICByZXR1cm4gY2hlY2tWaXNpYmxlKGNvbC5jaGlsZHJlbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGNoZWNrVmlzaWJsZShjb2x1bW5zKTtcclxuICB9XHJcblxyXG4gIGdldGhhc0luVmlzaWJsZUNvbHVtbnMoY29sdW1uczogYW55W10pOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGNoZWNrVmlzaWJsZSA9IChjb2x1bW5zOiBhbnlbXSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICByZXR1cm4gY29sdW1ucy5zb21lKChjb2wpID0+IHtcclxuICAgICAgICBpZiAoIWNvbD8uaXNfdmlzaWJsZSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgaWYgKGNvbD8uY2hpbGRyZW4/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgcmV0dXJuIGNoZWNrVmlzaWJsZShjb2wuY2hpbGRyZW4pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBjaGVja1Zpc2libGUoY29sdW1ucyk7XHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0VG90YWxDb2x1bW5zTGVuZ3RoKGNvbHVtbnM6IGFueVtdKTogbnVtYmVyIHtcclxuICAgIGxldCBjb3VudCA9IDA7XHJcblxyXG4gICAgY29sdW1ucy5mb3JFYWNoKGNvbCA9PiB7XHJcbiAgICAgIGlmIChjb2wuY2hpbGRyZW4gJiYgQXJyYXkuaXNBcnJheShjb2wuY2hpbGRyZW4pICYmIGNvbC5jaGlsZHJlbi5sZW5ndGgpIHtcclxuICAgICAgICBjb3VudCArPSBjb2wuY2hpbGRyZW4ubGVuZ3RoOyAvLyBjb3VudCBjaGlsZHJlbiBpbnN0ZWFkIG9mIHBhcmVudFxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvdW50ICs9IDE7IC8vIGNvdW50IHBhcmVudCBkaXJlY3RseVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gY291bnQ7XHJcbiAgfVxyXG5cclxuICBnZXRoYXNSaWdodFBpbm5lZENvbHVtbnMoY29sdW1uczogYW55W10pOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGNoZWNrUGlubmVkUmlnaHQgPSAoY29sdW1uczogYW55W10pOiBib29sZWFuID0+IHtcclxuICAgICAgcmV0dXJuIGNvbHVtbnMuc29tZSgoY29sKSA9PiB7XHJcbiAgICAgICAgaWYgKGNvbD8ucGlubmVkID09PSAncmlnaHQnICYmIGNvbD8uaXNfdmlzaWJsZSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgaWYgKGNvbD8uY2hpbGRyZW4/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgcmV0dXJuIGNoZWNrUGlubmVkUmlnaHQoY29sLmNoaWxkcmVuKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9KTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gY2hlY2tQaW5uZWRSaWdodChjb2x1bW5zKTtcclxuICB9XHJcblxyXG4gIGdldGhhc0xlZnRQaW5uZWRDb2x1bW5zKGNvbHVtbnM6IGFueVtdKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBjaGVja1Bpbm5lZFJpZ2h0ID0gKGNvbHVtbnM6IGFueVtdKTogYm9vbGVhbiA9PiB7XHJcbiAgICAgIHJldHVybiBjb2x1bW5zLnNvbWUoKGNvbCkgPT4ge1xyXG4gICAgICAgIGlmIChjb2w/LnBpbm5lZCA9PT0gJ2xlZnQnICYmIGNvbD8uaXNfdmlzaWJsZSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgaWYgKGNvbD8uY2hpbGRyZW4/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgcmV0dXJuIGNoZWNrUGlubmVkUmlnaHQoY29sLmNoaWxkcmVuKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9KTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gY2hlY2tQaW5uZWRSaWdodChjb2x1bW5zKTtcclxuICB9XHJcblxyXG5cclxuICBnZXRFeHBhbmRlZFJvd0NvdW50KGRhdGE6IGFueVtdKTogbnVtYmVyIHtcclxuICAgIGxldCBncm91cENvdW50ID0gMDtcclxuICAgIGxldCByb3dDb3VudCA9IDA7XHJcblxyXG4gICAgZGF0YS5mb3JFYWNoKGdyb3VwID0+IHtcclxuICAgICAgaWYgKGdyb3VwPy5pc0dyb3VwKSB7XHJcbiAgICAgICAgZ3JvdXBDb3VudCsrO1xyXG5cclxuICAgICAgICBpZiAoZ3JvdXA/LmlzRXhwYW5kICYmIEFycmF5LmlzQXJyYXkoZ3JvdXA/LmNoaWxkcmVuKSkge1xyXG4gICAgICAgICAgZ3JvdXAuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoY2hpbGQuaXNHcm91cCkge1xyXG4gICAgICAgICAgICAgIGlmIChjaGlsZC5pc0V4cGFuZCAmJiBBcnJheS5pc0FycmF5KGNoaWxkLmNoaWxkcmVuKSkge1xyXG4gICAgICAgICAgICAgICAgcm93Q291bnQgKz0gY2hpbGQuY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByb3dDb3VudCsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChncm91cENvdW50ID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBkYXRhLmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZ3JvdXBDb3VudCArIHJvd0NvdW50O1xyXG4gIH1cclxuXHJcblxyXG5nZXRGaWx0ZXJzRnJvbUNvbHVtbnMoY29sdW1uczogYW55W10sIGZpbHRlcnNDb25maWc6YW55IFtdKTogYW55W10ge1xyXG4gIGNvbnN0IHJlc3VsdDogYW55W10gPSBbXTtcclxuICBcclxuICBjb25zdCBjaGVja0NvbHVtbiA9IChjb2w6IGFueSkgPT4ge1xyXG4gICAgIGlmIChjb2wucXVlcnk/LmNvbmRpdGlvbiA9PT0gJ25vbmUnKSB7XHJcbiAgICAgIGNvbC5xdWVyeS5zZWNvbmRfdmFsdWUgPSBudWxsO1xyXG4gICAgICBjb2wucXVlcnkuc2Vjb25kX2NvbmRpdGlvbiA9IG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCBoYXNGaXJzdFZhbHVlID0gY29sLnF1ZXJ5Py5maXJzdF92YWx1ZSAhPSBudWxsICYmIGNvbC5xdWVyeT8uZmlyc3RfdmFsdWUgIT09IFwiXCIgJiYgZmlsdGVyc0NvbmZpZy5zb21lKChlbGUpPT4gZWxlLmZpZWxkID09IGNvbC5maWVsZCk7XHJcbiAgICBjb25zdCBoYXNJZHMgPSBBcnJheS5pc0FycmF5KGNvbC5xdWVyeT8uX2lkcykgJiYgY29sLnF1ZXJ5Ll9pZHMubGVuZ3RoID4gMCAmJiBmaWx0ZXJzQ29uZmlnLnNvbWUoKGVsZSk9PiBlbGUuZmllbGQgPT0gY29sLmZpZWxkKTtcclxuICAgIGlmIChoYXNGaXJzdFZhbHVlIHx8IGhhc0lkcykge1xyXG4gICAgICByZXN1bHQucHVzaCh7XHJcbiAgICAgICAgc2VhcmNoOiBjb2wuc2VhcmNoID8/IFwiXCIsXHJcbiAgICAgICAgZmllbGQ6IGNvbC5maWVsZCxcclxuICAgICAgICB0eXBlOiBjb2wudHlwZSxcclxuICAgICAgICBfaWRzOiBjb2wudHlwZSA9PSAnZHJvcGRvd24nPyBjb2wucXVlcnk/Ll9pZHM6IFtdLFxyXG4gICAgICAgIHF1ZXJ5OiBjb2wudHlwZSA9PSAnZHJvcGRvd24nPyBudWxsIDogKGNvbD8ucXVlcnk/LmZpcnN0X3ZhbHVlID8gY29sPy5xdWVyeSA6IG51bGwpXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjb2wuY2hpbGRyZW4pICYmIGNvbC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbC5jaGlsZHJlbi5mb3JFYWNoKGNoZWNrQ29sdW1uKTtcclxuICAgIH1cclxuICB9O1xyXG4gIGNvbHVtbnMuZm9yRWFjaChjaGVja0NvbHVtbik7XHJcbiBcclxuICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5hc3luYyBhcHBseUZpbHRlcnNUb0NvbHVtbnMoY29sdW1uczogYW55W10sIGZpbHRlcnM6IGFueVtdKTogUHJvbWlzZTxhbnlbXT4ge1xyXG4gIGZvciAoY29uc3QgY29sIG9mIGNvbHVtbnMpIHtcclxuICAgIGlmICghY29sLnF1ZXJ5KSB7XHJcbiAgICAgIGNvbC5xdWVyeSA9IHtcclxuICAgICAgICBmaXJzdF92YWx1ZTogbnVsbCxcclxuICAgICAgICBzZWNvbmRfdmFsdWU6IG51bGwsXHJcbiAgICAgICAgZmlyc3RfY29uZGl0aW9uOiBjb2wudHlwZSAhPT0gJ2RhdGUnID8gJ2NvbnRhaW4nIDogJ2VxdWFsJyxcclxuICAgICAgICBzZWNvbmRfY29uZGl0aW9uOiBudWxsLFxyXG4gICAgICAgIGNvbmRpdGlvbjogJ25vbmUnLFxyXG4gICAgICAgIF9pZHM6IFtdXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZmlsdGVyID0gZmlsdGVycy5maW5kKGYgPT4gZi5maWVsZCA9PT0gY29sLmZpZWxkKTtcclxuXHJcbiAgICBpZiAoZmlsdGVyKSB7XHJcbiAgICAgIGlmIChjb2wudHlwZSA9PT0gJ2Ryb3Bkb3duJykge1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkSWRzID0gZmlsdGVyLl9pZHMgPz8gW107XHJcbiAgICAgICAgY29uc3QgZHJvcGRvd25WYWx1ZXMgPSBjb2wuY29sdW1uX2Ryb3Bkb3duX3ZhbHVlID8/IFtdO1xyXG5cclxuICAgICAgICAvLyDinIUgTWFwIGRlcGVuZGluZyBvbiBkcm9wZG93biB2YWx1ZSBzdHJ1Y3R1cmVcclxuICAgICAgICBsZXQgc2VsZWN0ZWRMYWJlbHM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRyb3Bkb3duVmFsdWVzKSAmJiBkcm9wZG93blZhbHVlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBpZiAodHlwZW9mIGRyb3Bkb3duVmFsdWVzWzBdID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICAvLyBvYmplY3QtYmFzZWQgZHJvcGRvd25zOiB7IGlkLCBuYW1lL2xhYmVsL3ZhbHVlL3RleHQgfVxyXG4gICAgICAgICAgICBzZWxlY3RlZExhYmVscyA9IGRyb3Bkb3duVmFsdWVzXHJcbiAgICAgICAgICAgICAgLmZpbHRlcihvcHQgPT4gc2VsZWN0ZWRJZHMuaW5jbHVkZXMob3B0LmlkKSlcclxuICAgICAgICAgICAgICAubWFwKG9wdCA9PiBvcHQubmFtZSA/PyBvcHQubGFiZWwgPz8gb3B0LnZhbHVlID8/IG9wdC50ZXh0ID8/ICcnKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIHN0cmluZy1iYXNlZCBkcm9wZG93bnNcclxuICAgICAgICAgICAgc2VsZWN0ZWRMYWJlbHMgPSBkcm9wZG93blZhbHVlcy5maWx0ZXIob3B0ID0+IHNlbGVjdGVkSWRzLmluY2x1ZGVzKG9wdCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8g4pyFIFN0b3JlIHJlYWRhYmxlIHRleHQgaW4gZmlsdGVyVmFsdWUgKGNvbW1hLXNlcGFyYXRlZClcclxuICAgICAgICBjb2wuZmlsdGVyVmFsdWUgPSBzZWxlY3RlZExhYmVscy5qb2luKCcsICcpO1xyXG5cclxuICAgICAgICAvLyBtYWludGFpbiBxdWVyeSBzdGF0ZVxyXG4gICAgICAgIGNvbC5xdWVyeS5faWRzID0gc2VsZWN0ZWRJZHM7XHJcbiAgICAgICAgY29sLnNlYXJjaCA9IGZpbHRlci5zZWFyY2ggPz8gJyc7XHJcblxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIOKchSBOb24tZHJvcGRvd24gZmlsdGVycyAodGV4dC9kYXRlL251bWJlcilcclxuICAgICAgICBjb2wuZmlsdGVyVmFsdWUgPSBmaWx0ZXIuc2VhcmNoIHx8IGZpbHRlci5xdWVyeT8uZmlyc3RfdmFsdWUgfHwgJyc7XHJcbiAgICAgICAgY29sLnNlYXJjaCA9IGZpbHRlci5zZWFyY2ggPz8gJyc7XHJcbiAgICAgICAgY29sLnF1ZXJ5LmZpcnN0X3ZhbHVlID0gZmlsdGVyLnF1ZXJ5Py5maXJzdF92YWx1ZSA/PyBudWxsO1xyXG4gICAgICAgIGNvbC5xdWVyeS5zZWNvbmRfdmFsdWUgPSBmaWx0ZXIucXVlcnk/LnNlY29uZF92YWx1ZSA/PyBudWxsO1xyXG4gICAgICAgIGNvbC5xdWVyeS5maXJzdF9jb25kaXRpb24gPVxyXG4gICAgICAgICAgZmlsdGVyLnF1ZXJ5Py5maXJzdF9jb25kaXRpb24gPz9cclxuICAgICAgICAgIChjb2wudHlwZSAhPT0gJ2RhdGUnID8gJ2NvbnRhaW4nIDogJ2VxdWFsJyk7XHJcbiAgICAgICAgY29sLnF1ZXJ5LnNlY29uZF9jb25kaXRpb24gPSBmaWx0ZXIucXVlcnk/LnNlY29uZF9jb25kaXRpb24gPz8gbnVsbDtcclxuICAgICAgICBjb2wucXVlcnkuY29uZGl0aW9uID0gZmlsdGVyLnF1ZXJ5Py5jb25kaXRpb24gPz8gJ25vbmUnO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBDbGVhciBmaWx0ZXIgaWYgbm90IHByZXNlbnRcclxuICAgICAgY29sLmZpbHRlclZhbHVlID0gbnVsbDtcclxuICAgICAgY29sLnNlYXJjaCA9ICcnO1xyXG4gICAgICBjb2wucXVlcnkuX2lkcyA9IFtdO1xyXG4gICAgICBjb2wucXVlcnkuZmlyc3RfdmFsdWUgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOKchSBSZWN1cnNpdmVseSBhcHBseSBmb3IgY2hpbGRyZW5cclxuICAgIGlmIChBcnJheS5pc0FycmF5KGNvbC5jaGlsZHJlbikgJiYgY29sLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29sLmNoaWxkcmVuID0gYXdhaXQgdGhpcy5hcHBseUZpbHRlcnNUb0NvbHVtbnMoY29sLmNoaWxkcmVuLCBmaWx0ZXJzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiBjb2x1bW5zO1xyXG59XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbmFjdGl2ZUZpbHRlcmVkQ29sdW1uczogYW55W10gPSBbXTtcclxudXBkYXRlQWN0aXZlRmlsdGVyZWRDb2x1bW5zKGNvbHVtbnM6IGFueVtdKTogYW55W10ge1xyXG4gIGNvbnN0IGNvbGxlY3RGaWx0ZXJlZCA9IChjb2xzOiBhbnlbXSk6IGFueVtdID0+IHtcclxuICAgIGxldCByZXN1bHQ6IGFueVtdID0gW107XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2xzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGNvbCA9IGNvbHNbaV07XHJcbiAgICAgIGlmIChjb2wuY2hpbGRyZW4gJiYgY29sLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KGNvbGxlY3RGaWx0ZXJlZChjb2wuY2hpbGRyZW4pKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGNvbC5xdWVyeSkge1xyXG4gICAgICAgIGNvbnN0IGhhc0Ryb3Bkb3duRmlsdGVyID1cclxuICAgICAgICAgIEFycmF5LmlzQXJyYXkoY29sLnF1ZXJ5Ll9pZHMpICYmIGNvbC5xdWVyeS5faWRzLmxlbmd0aCA+IDA7XHJcblxyXG4gICAgICAgIGNvbnN0IGhhc1ZhbHVlRmlsdGVyID1cclxuICAgICAgICAgIChjb2wucXVlcnkuZmlyc3RfdmFsdWUgJiYgY29sLnF1ZXJ5LmZpcnN0X3ZhbHVlICE9PSAnJykgfHxcclxuICAgICAgICAgIChjb2wucXVlcnkuc2Vjb25kX3ZhbHVlICYmIGNvbC5xdWVyeS5zZWNvbmRfdmFsdWUgIT09ICcnKTtcclxuXHJcbiAgICAgICAgaWYgKGhhc0Ryb3Bkb3duRmlsdGVyIHx8IGhhc1ZhbHVlRmlsdGVyKSB7XHJcbiAgICAgICAgICByZXN1bHQucHVzaChjb2wpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9O1xyXG4gIHRoaXMuYWN0aXZlRmlsdGVyZWRDb2x1bW5zID0gWy4uLmNvbGxlY3RGaWx0ZXJlZChjb2x1bW5zKV07XHJcbiAgcmV0dXJuIHRoaXMuYWN0aXZlRmlsdGVyZWRDb2x1bW5zO1xyXG59XHJcblxyXG5cclxuXHJcbmhhc0ZpZWxkQ2hhbmdlZChjdXJyZW50OiBhbnksIG9yaWdpbmFsOiBhbnksIHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgJ251bWJlcic6XHJcbiAgICAgICAgcmV0dXJuIE51bWJlcihjdXJyZW50KSAhPT0gTnVtYmVyKG9yaWdpbmFsKTtcclxuXHJcbiAgICAgIGNhc2UgJ3N0cmluZyc6XHJcbiAgICAgICAgcmV0dXJuIFN0cmluZyhjdXJyZW50IHx8ICcnKSAhPT0gU3RyaW5nKG9yaWdpbmFsIHx8ICcnKTtcclxuXHJcbiAgICAgIGNhc2UgJ2Ryb3Bkb3duJzpcclxuICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnQgPT09ICdvYmplY3QnICYmIHR5cGVvZiBvcmlnaW5hbCA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgIHJldHVybiBjdXJyZW50Py5pZCAhPT0gb3JpZ2luYWw/LmlkIHx8IGN1cnJlbnQ/LnZhbHVlICE9PSBvcmlnaW5hbD8udmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjdXJyZW50ICE9PSBvcmlnaW5hbDtcclxuXHJcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxyXG4gICAgICAgIHJldHVybiBCb29sZWFuKGN1cnJlbnQpICE9PSBCb29sZWFuKG9yaWdpbmFsKTtcclxuXHJcbiAgICAgIGNhc2UgJ2RhdGUnOlxyXG4gICAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gbmV3IERhdGUoY3VycmVudCkuZ2V0VGltZSgpO1xyXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsRGF0ZSA9IG5ldyBEYXRlKG9yaWdpbmFsKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgcmV0dXJuIGlzTmFOKGN1cnJlbnREYXRlKSB8fCBpc05hTihvcmlnaW5hbERhdGUpXHJcbiAgICAgICAgICA/IGN1cnJlbnQgIT09IG9yaWdpbmFsXHJcbiAgICAgICAgICA6IGN1cnJlbnREYXRlICE9PSBvcmlnaW5hbERhdGU7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShjdXJyZW50KSAhPT0gSlNPTi5zdHJpbmdpZnkob3JpZ2luYWwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG59XHJcblxyXG5cclxuXHJcblxyXG4iXX0=
|
|
@@ -6,8 +6,8 @@ export class CopyServiceService {
|
|
|
6
6
|
this.currentColums = [];
|
|
7
7
|
}
|
|
8
8
|
getSelectedDataForCopy(dataSet, columns, rowSelectedIndexes, selectedCells, getNestedValue) {
|
|
9
|
-
const copiedRows = [];
|
|
10
9
|
columns = columns.filter(col => col.is_visible);
|
|
10
|
+
const copiedRows = [];
|
|
11
11
|
const findRowByVirtualIndex = (vIndex) => dataSet.find((r) => r.__virtualIndex === vIndex);
|
|
12
12
|
if (rowSelectedIndexes && rowSelectedIndexes.size > 0) {
|
|
13
13
|
const sortedIndexes = [...rowSelectedIndexes].sort((a, b) => a - b);
|
|
@@ -55,7 +55,7 @@ export class CopyServiceService {
|
|
|
55
55
|
if (Array.isArray(value)) {
|
|
56
56
|
value = value
|
|
57
57
|
.map(v => typeof v === 'object'
|
|
58
|
-
? v.departmentName ?? v.roleName ?? ''
|
|
58
|
+
? v.departmentName ?? v.roleName ?? v.full_name ?? ''
|
|
59
59
|
: v?.toString() ?? '')
|
|
60
60
|
.join(', ');
|
|
61
61
|
}
|
|
@@ -219,4 +219,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
219
219
|
providedIn: 'root'
|
|
220
220
|
}]
|
|
221
221
|
}], ctorParameters: function () { return []; } });
|
|
222
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29weS1zZXJ2aWNlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhLWdyaWQvc3JjL2xpYi9zZXJ2aWNlcy9jb3B5LXNlcnZpY2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUszQyxNQUFNLE9BQU8sa0JBQWtCO0lBRTdCO1FBMkdGLGVBQVUsR0FBVSxFQUFFLENBQUM7UUFDckIsa0JBQWEsR0FBUyxFQUFFLENBQUE7SUE1R1IsQ0FBQztJQUNqQixzQkFBc0IsQ0FDcEIsT0FBYyxFQUNkLE9BQWMsRUFDZCxrQkFBK0IsRUFDL0IsYUFBb0IsRUFDcEIsY0FBK0M7UUFFL0MsTUFBTSxVQUFVLEdBQVksRUFBRSxDQUFDO1FBQy9CLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2hELE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxNQUFjLEVBQUUsRUFBRSxDQUMvQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsY0FBYyxLQUFLLE1BQU0sQ0FBQyxDQUFDO1FBQ3hELElBQUksa0JBQWtCLElBQUksa0JBQWtCLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRTtZQUNyRCxNQUFNLGFBQWEsR0FBRyxDQUFDLEdBQUcsa0JBQWtCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDcEUsS0FBSyxNQUFNLE1BQU0sSUFBSSxhQUFhLEVBQUU7Z0JBQ2xDLE1BQU0sR0FBRyxHQUFHLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUMxQyxJQUFJLENBQUMsR0FBRztv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QUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFM0UsMEJBQTBCO1FBQzFCLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4RCxXQUFXLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztRQUM1RCxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsV0FBVyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFDakUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ1gsQ0FBQzsrR0FuUFUsa0JBQWtCO21IQUFsQixrQkFBa0IsY0FGakIsTUFBTTs7NEZBRVAsa0JBQWtCO2tCQUg5QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIENvcHlTZXJ2aWNlU2VydmljZSB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcbiAgZ2V0U2VsZWN0ZWREYXRhRm9yQ29weShcclxuICAgIGRhdGFTZXQ6IGFueVtdLFxyXG4gICAgY29sdW1uczogYW55W10sXHJcbiAgICByb3dTZWxlY3RlZEluZGV4ZXM6IFNldDxudW1iZXI+LFxyXG4gICAgc2VsZWN0ZWRDZWxsczogYW55W10sXHJcbiAgICBnZXROZXN0ZWRWYWx1ZTogKG9iajogYW55LCBwYXRoOiBzdHJpbmcpID0+IGFueVxyXG4gICk6IGFueVtdW10ge1xyXG4gICAgY29uc3QgY29waWVkUm93czogYW55W11bXSA9IFtdO1xyXG4gICAgY29sdW1ucyA9IGNvbHVtbnMuZmlsdGVyKGNvbCA9PiBjb2wuaXNfdmlzaWJsZSk7XHJcbiAgICBjb25zdCBmaW5kUm93QnlWaXJ0dWFsSW5kZXggPSAodkluZGV4OiBudW1iZXIpID0+XHJcbiAgICAgIGRhdGFTZXQuZmluZCgocjogYW55KSA9PiByLl9fdmlydHVhbEluZGV4ID09PSB2SW5kZXgpO1xyXG4gICAgaWYgKHJvd1NlbGVjdGVkSW5kZXhlcyAmJiByb3dTZWxlY3RlZEluZGV4ZXMuc2l6ZSA+IDApIHtcclxuICAgICAgY29uc3Qgc29ydGVkSW5kZXhlcyA9IFsuLi5yb3dTZWxlY3RlZEluZGV4ZXNdLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcclxuICAgICAgZm9yIChjb25zdCB2SW5kZXggb2Ygc29ydGVkSW5kZXhlcykge1xyXG4gICAgICAgIGNvbnN0IHJvdyA9IGZpbmRSb3dCeVZpcnR1YWxJbmRleCh2SW5kZXgpO1xyXG4gICAgICAgIGlmICghcm93KSBjb250aW51ZTtcclxuICAgICAgICBjb25zdCBleHRyYWN0VmFsdWUgPSAoZmllbGQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XHJcbiAgICAgICAgICBjb25zdCBuZXN0ZWQgPSBnZXROZXN0ZWRWYWx1ZShyb3csIGZpZWxkKTtcclxuICAgICAgICAgIGNvbnN0IHZhbHVlID1cclxuICAgICAgICAgICAgbmVzdGVkPy52YWx1ZSA/P1xyXG4gICAgICAgICAgICBuZXN0ZWQ/Lm5hbWUgPz9cclxuICAgICAgICAgICAgbmVzdGVkID8/XHJcbiAgICAgICAgICAgICctJztcclxuXHJcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlXHJcbiAgICAgICAgICAgICAgLm1hcCh2ID0+XHJcbiAgICAgICAgICAgICAgICB0eXBlb2YgdiA9PT0gJ29iamVjdCdcclxuICAgICAgICAgICAgICAgICAgPyAodi5kZXBhcnRtZW50TmFtZSA/PyB2LnJvbGVOYW1lID8/ICcnKVxyXG4gICAgICAgICAgICAgICAgICA6ICh2Py50b1N0cmluZygpID8/ICcnKVxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAuam9pbignLCAnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiB2YWx1ZSA/PyAnJztcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IG1hcHBlZCA9IGNvbHVtbnMubWFwKGNvbCA9PiB7XHJcbiAgICAgICAgICBpZiAoY29sLmNoaWxkcmVuICYmIEFycmF5LmlzQXJyYXkoY29sLmNoaWxkcmVuKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gY29sLmNoaWxkcmVuLm1hcCgoYzogeyBmaWVsZDogc3RyaW5nIH0pID0+IGV4dHJhY3RWYWx1ZShjLmZpZWxkKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gW2V4dHJhY3RWYWx1ZShjb2wuZmllbGQpXTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCByb3dWYWx1ZXMgPSBtYXBwZWQucmVkdWNlPHN0cmluZ1tdPigoYWNjLCBjdXJyKSA9PiBhY2MuY29uY2F0KGN1cnIpLCBbXSk7XHJcbiAgICAgICAgY29waWVkUm93cy5wdXNoKHJvd1ZhbHVlcyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChzZWxlY3RlZENlbGxzICYmIHNlbGVjdGVkQ2VsbHMubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCByb3dzTWFwID0gbmV3IE1hcDxudW1iZXIsIGFueVtdPigpO1xyXG4gICAgICBmb3IgKGNvbnN0IGNlbGwgb2Ygc2VsZWN0ZWRDZWxscykge1xyXG4gICAgICAgIGNvbnN0IHJvdyA9IGZpbmRSb3dCeVZpcnR1YWxJbmRleChjZWxsLnJvd0luZGV4KTtcclxuICAgICAgICBpZiAoIXJvdykgY29udGludWU7XHJcbiAgICAgICAgY29uc3QgY29sID0gY29sdW1uc1tjZWxsLmNvbEluZGV4XTtcclxuICAgICAgICBsZXQgZmllbGROYW1lID0gY29sPy5maWVsZDtcclxuICAgICAgICBpZiAoY29sPy5jaGlsZHJlbiAmJiBjb2wuY2hpbGRyZW5bY2VsbC5zdWJDb2xJbmRleF0pIHtcclxuICAgICAgICAgIGZpZWxkTmFtZSA9IGNvbC5jaGlsZHJlbltjZWxsLnN1YkNvbEluZGV4XS5maWVsZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHZhbHVlID0gZ2V0TmVzdGVkVmFsdWUocm93LCBmaWVsZE5hbWUpIHx8IGdldE5lc3RlZFZhbHVlKHJvdywgZmllbGROYW1lKT8ubmFtZSB8fCBnZXROZXN0ZWRWYWx1ZShyb3csIGZpZWxkTmFtZSkgfHwgJy0nO1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZVxyXG4gICAgICAgICAgICAubWFwKHYgPT5cclxuICAgICAgICAgICAgICB0eXBlb2YgdiA9PT0gJ29iamVjdCdcclxuICAgICAgICAgICAgICAgID8gdi5kZXBhcnRtZW50TmFtZSA/PyB2LnJvbGVOYW1lID8/ICcnXHJcbiAgICAgICAgICAgICAgICA6IHY/LnRvU3RyaW5nKCkgPz8gJydcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuam9pbignLCAnKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZSA/PyAnJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFyb3dzTWFwLmhhcyhjZWxsLnJvd0luZGV4KSkgcm93c01hcC5zZXQoY2VsbC5yb3dJbmRleCwgW10pO1xyXG4gICAgICAgIHJvd3NNYXAuZ2V0KGNlbGwucm93SW5kZXgpIS5wdXNoKHZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBzb3J0ZWRDZWxscyA9IFsuLi5yb3dzTWFwLmVudHJpZXMoKV1cclxuICAgICAgICAuc29ydCgoW2FdLCBbYl0pID0+IGEgLSBiKVxyXG4gICAgICAgIC5tYXAoKFtfLCB2XSkgPT4gdik7XHJcbiAgICAgIGNvcGllZFJvd3MucHVzaCguLi5zb3J0ZWRDZWxscyk7XHJcbiAgICB9XHJcbiAgICBpZiAoY29waWVkUm93cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgY29uc3QgYWN0aXZlQ2VsbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5hY3RpdmUtY2VsbCcpO1xyXG4gICAgICBpZiAoYWN0aXZlQ2VsbCkgcmV0dXJuIFtbYWN0aXZlQ2VsbC50ZXh0Q29udGVudD8udHJpbSgpIHx8ICcnXV07XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbWF4Q29scyA9IGNvcGllZFJvd3MucmVkdWNlKChtYXgsIHJvdykgPT4gTWF0aC5tYXgobWF4LCByb3cubGVuZ3RoKSwgMCk7XHJcbiAgICByZXR1cm4gY29waWVkUm93cy5tYXAocm93ID0+IHtcclxuICAgICAgY29uc3QgbmV3Um93ID0gWy4uLnJvd107XHJcbiAgICAgIHdoaWxlIChuZXdSb3cubGVuZ3RoIDwgbWF4Q29scykgbmV3Um93LnB1c2goJycpO1xyXG4gICAgICByZXR1cm4gbmV3Um93O1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgY29weVRvQ2xpcGJvYXJkKFxyXG4gICAgc2VsZWN0ZWREYXRhOiBhbnlbXVtdLFxyXG4gICAgc2VsZWN0b3IgPSAnLnNlbGVjdGVkLWNlbGwsIC5hY3RpdmUtY2VsbCwgLnJvdy1zZWxlY3RlZCdcclxuICApOiB2b2lkIHtcclxuICAgIGlmICghc2VsZWN0ZWREYXRhIHx8IHNlbGVjdGVkRGF0YS5sZW5ndGggPT09IDApIHJldHVybjtcclxuICAgIGNvbnN0IHRleHRUb0NvcHkgPSBzZWxlY3RlZERhdGFcclxuICAgICAgLm1hcChyb3cgPT4gcm93Lm1hcChjZWxsID0+IChjZWxsID8/ICcnKS50b1N0cmluZygpKS5qb2luKCdcXHQnKSlcclxuICAgICAgLmpvaW4oJ1xcbicpO1xyXG4gICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGV4dFRvQ29weSkuY2F0Y2goZXJyID0+IGNvbnNvbGUuZXJyb3IoZXJyKSk7XHJcbiAgICBjb25zdCBzZWxlY3RlZEVscyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xyXG4gICAgc2VsZWN0ZWRFbHMuZm9yRWFjaChlbCA9PiBlbC5jbGFzc0xpc3QuYWRkKCdmbGFzaC1iZycpKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBzZWxlY3RlZEVscy5mb3JFYWNoKGVsID0+IGVsLmNsYXNzTGlzdC5yZW1vdmUoJ2ZsYXNoLWJnJykpO1xyXG4gICAgfSwgMTAwMCk7XHJcbiAgfVxyXG5cclxuXHJcbnVwZGF0ZVJvd3M6IGFueVtdID0gW107XHJcbiAgY3VycmVudENvbHVtcyA6IGFueSA9IFtdXHJcbiAgYXN5bmMgcGFzdGVGcm9tQ2xpcGJvYXJkVGV4dChcclxuICAgIHRleHQ6IHN0cmluZyxcclxuICAgIGRhdGFTZXQ6IGFueVtdLFxyXG4gICAgY29sdW1uczogYW55W10sXHJcbiAgICBzdGFydFJvd0luZGV4OiBudW1iZXIsXHJcbiAgICBzdGFydENvbEluZGV4OiBudW1iZXIsXHJcbiAgICBzdGFydFN1YkNvbEluZGV4OiBudW1iZXIgPSAwXHJcbiAgKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIGlmICghdGV4dCkgcmV0dXJuIFtdO1xyXG4gICAgdGhpcy51cGRhdGVSb3dzID0gW107XHJcbiAgICBjb25zdCByb3dzID0gdGV4dC5zcGxpdCgvXFxyP1xcbi8pLm1hcChyID0+IHIuc3BsaXQoJ1xcdCcpKTtcclxuICAgIGNvbnN0IGZsYXR0ZW5lZENvbHVtbnM6IGFueVtdID0gW107XHJcbiAgICBjb2x1bW5zLmZvckVhY2goY29sID0+IHtcclxuICAgICAgaWYgKGNvbC5jaGlsZHJlbj8ubGVuZ3RoKSB7XHJcbiAgICAgICAgY29sLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkOiBhbnkpID0+IGZsYXR0ZW5lZENvbHVtbnMucHVzaCh7IHBhcmVudDogY29sLCAuLi5jaGlsZCB9KSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZmxhdHRlbmVkQ29sdW1ucy5wdXNoKGNvbCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgbGV0IHN0YXJ0RmxhdHRlbmVkSW5kZXggPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdGFydENvbEluZGV4OyBpKyspIHtcclxuICAgICAgY29uc3QgY29sID0gY29sdW1uc1tpXTtcclxuICAgICAgc3RhcnRGbGF0dGVuZWRJbmRleCArPSBjb2wuY2hpbGRyZW4/Lmxlbmd0aCB8fCAxO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgc3RhcnRDb2wgPSBjb2x1bW5zW3N0YXJ0Q29sSW5kZXhdO1xyXG4gICAgaWYgKHN0YXJ0Q29sPy5jaGlsZHJlbj8ubGVuZ3RoKSB7XHJcbiAgICAgIHN0YXJ0RmxhdHRlbmVkSW5kZXggKz0gTWF0aC5taW4oc3RhcnRTdWJDb2xJbmRleCwgc3RhcnRDb2wuY2hpbGRyZW4ubGVuZ3RoIC0gMSk7XHJcbiAgICB9XHJcbiBcclxuICAgIHJvd3MuZm9yRWFjaCgocm93VmFsdWVzLCByT2Zmc2V0KSA9PiB7XHJcbiAgICAgIGNvbnN0IHRhcmdldFJvd0luZGV4ID0gc3RhcnRSb3dJbmRleCArIHJPZmZzZXQ7XHJcbiAgICAgIGNvbnN0IHJvdyA9IGRhdGFTZXQuZmluZChyID0+IHI/Ll9fdmlydHVhbEluZGV4ID09PSB0YXJnZXRSb3dJbmRleCk7XHJcbiAgICAgIGlmICghcm93KSByZXR1cm47XHJcbiBcclxuICAgICAgcm93VmFsdWVzLmZvckVhY2goKHZhbHVlLCBjT2Zmc2V0KSA9PiB7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0SW5kZXggPSBzdGFydEZsYXR0ZW5lZEluZGV4ICsgY09mZnNldDtcclxuICAgICAgICBpZiAodGFyZ2V0SW5kZXggPCAwIHx8IHRhcmdldEluZGV4ID49IGZsYXR0ZW5lZENvbHVtbnMubGVuZ3RoKSByZXR1cm47XHJcbiBcclxuICAgICAgICBjb25zdCB0YXJnZXRDb2x1bW4gPSBmbGF0dGVuZWRDb2x1bW5zW3RhcmdldEluZGV4XTtcclxuICAgICAgICBpZighdGFyZ2V0Q29sdW1uIHx8ICF0YXJnZXRDb2x1bW4uaXNfZWRpdGFibGUpIHJldHVybjtcclxuICAgICAgICAgaWYgKHRhcmdldENvbHVtbj8udHlwZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgIHRoaXMuY3VycmVudENvbHVtcy5wdXNoKHRhcmdldENvbHVtbik7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0TmVzdGVkVmFsdWUocm93LCB0YXJnZXRDb2x1bW4sIHZhbHVlKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0Q29sdW1uLnR5cGUgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG51bSA9IE51bWJlcih2YWx1ZSk7XHJcbiAgICAgICAgICAgIGlmICghaXNOYU4obnVtKSAmJiB2YWx1ZSAhPT0gJycpIHtcclxuICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRDb2x1bXMucHVzaCh0YXJnZXRDb2x1bW4pO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2V0TmVzdGVkVmFsdWUocm93LCB0YXJnZXRDb2x1bW4sIG51bSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuIFxyXG4gICAgcmV0dXJuIHt1cGRhdGVSb3dzIDogdGhpcy51cGRhdGVSb3dzLCBjdXJyZW50Q29sdW1zIDogdGhpcy5jdXJyZW50Q29sdW1zfTtcclxuICB9XHJcblxyXG5cclxuICBzZXROZXN0ZWRWYWx1ZShvYmo6IGFueSwgY29sdW1uOiBhbnksIG9wdGlvbjogYW55LCBjYWxsZWRGcm9tSW5wdXQgPSBmYWxzZSk6IHZvaWQge1xyXG4gICAgaWYgKGNvbHVtbi50eXBlID09PSAnZGF0ZScgfHwgY29sdW1uLnR5cGUgPT09ICdpbWFnZScpIHJldHVybjtcclxuICAgIGNvbnN0IHBhdGggPSBjb2x1bW4uZmllbGQ7XHJcbiAgICBpZiAoIXBhdGgpIHJldHVybjtcclxuICAgIGNvbnN0IGtleXMgPSBwYXRoLnNwbGl0KCcuJyk7XHJcbiAgICBjb25zdCBsYXN0S2V5ID0ga2V5cy5wb3AoKTtcclxuICAgIGNvbnN0IHBhcmVudCA9IGtleXMucmVkdWNlKChhY2M6IGFueSwga2V5OiBzdHJpbmcpID0+IChhY2Nba2V5XSA/Pz0ge30pLCBvYmopO1xyXG4gICAgaWYgKHBhcmVudCAmJiBsYXN0S2V5KSB7XHJcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9uID09PSAnb2JqZWN0JyAmJiBvcHRpb24gIT09IG51bGwpIHtcclxuICAgICAgICBwYXJlbnRbbGFzdEtleV0gPSB7XHJcbiAgICAgICAgICBpZDogb3B0aW9uLmlkID8/IDEsXHJcbiAgICAgICAgICB2YWx1ZTogb3B0aW9uLnZhbHVlID8/IG9wdGlvbixcclxuICAgICAgICB9O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHBhcmVudFtsYXN0S2V5XSA9IG9wdGlvbjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3Qgc2VuZE9iaiA9IHtcclxuICAgICAgZGF0YTogeyAuLi5vYmogfSxcclxuICAgICAgZXZlbnRUeXBlOiAnb25DZWxsRWRpdCcsXHJcbiAgICB9O1xyXG4gICAgdGhpcy51cGRhdGVSb3dzLnB1c2gob2JqKTtcclxuICB9XHJcblxyXG5cclxuICBjdXRTZWxlY3RlZFNlbGVjdGVkRGF0YShcclxuICAgIGRhdGFTZXQ6IGFueVtdLFxyXG4gICAgcm93U2VsZWN0ZWRJbmRleGVzOiBTZXQ8bnVtYmVyPixcclxuICAgIHNlbGVjdGVkQ2VsbHM6IGFueVtdLFxyXG4gICAgY29sdW1uczogYW55W10sXHJcbiAgICBzZXROZXN0ZWRWYWx1ZTogKG9iajogYW55LCBjb2x1bW46IGFueSwgdmFsdWU6IGFueSkgPT4gdm9pZFxyXG4gICk6IGFueSB7XHJcbiAgICBsZXQgdXBkYXRlZERhdGEgPSBbLi4uZGF0YVNldF07XHJcbiAgICBpZiAocm93U2VsZWN0ZWRJbmRleGVzPy5zaXplKSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ZXMgPSBbLi4ucm93U2VsZWN0ZWRJbmRleGVzXTtcclxuICAgICAgdXBkYXRlZERhdGEgPSB1cGRhdGVkRGF0YS5maWx0ZXIoXHJcbiAgICAgICAgKHJvdzogYW55KSA9PiAhaW5kZXhlcy5pbmNsdWRlcyhyb3cuX192aXJ0dWFsSW5kZXgpXHJcbiAgICAgICk7XHJcbiAgICAgIC8vIHJvd1NlbGVjdGVkSW5kZXhlcy5jbGVhcigpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoc2VsZWN0ZWRDZWxscz8ubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlUm93cyA9IFtdO1xyXG4gICAgICBmb3IgKGNvbnN0IGNlbGwgb2Ygc2VsZWN0ZWRDZWxscykge1xyXG4gICAgICAgIGNvbnN0IHJvdyA9IHVwZGF0ZWREYXRhLmZpbmQociA9PiByLl9fdmlydHVhbEluZGV4ID09PSBjZWxsLnJvd0luZGV4KTtcclxuICAgICAgICBpZiAoIXJvdykgY29udGludWU7XHJcbiAgICAgICAgbGV0IGNvbCA9IGNvbHVtbnNbY2VsbC5jb2xJbmRleF07XHJcbiAgICAgICAgaWYgKGNvbD8uY2hpbGRyZW4gJiYgY29sLmNoaWxkcmVuW2NlbGwuc3ViQ29sSW5kZXhdKSB7XHJcbiAgICAgICAgICBjb2wgPSBjb2wuY2hpbGRyZW5bY2VsbC5zdWJDb2xJbmRleF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0TmVzdGVkVmFsdWUocm93LCBjb2wsICcnKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBzZWxlY3RlZENlbGxzLmxlbmd0aCA9IDA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge3VwZGF0ZWREYXRhOiB1cGRhdGVkRGF0YSwgdXBkYXRlZFJvd3M6IHRoaXMudXBkYXRlUm93c307XHJcbiAgfVxyXG5cclxuXHJcbiAgY3V0V2l0aEFuaW1hdGlvbihcclxuICAgIHNlbGVjdGVkRGF0YTogYW55W11bXSxcclxuICAgIHNlbGVjdG9yID0gJy5zZWxlY3RlZC1jZWxsLCAuYWN0aXZlLWNlbGwsIC5yb3ctc2VsZWN0ZWQnXHJcbiAgKTogdm9pZCB7XHJcbiAgICBpZiAoIXNlbGVjdGVkRGF0YSB8fCBzZWxlY3RlZERhdGEubGVuZ3RoID09PSAwKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgdGV4dFRvQ29weSA9IHNlbGVjdGVkRGF0YVxyXG4gICAgICAubWFwKHJvdyA9PiByb3cubWFwKGNlbGwgPT4gKGNlbGwgPz8gJycpLnRvU3RyaW5nKCkpLmpvaW4oJ1xcdCcpKVxyXG4gICAgICAuam9pbignXFxuJyk7XHJcblxyXG4gICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGV4dFRvQ29weSkuY2F0Y2goZXJyID0+IGNvbnNvbGUuZXJyb3IoZXJyKSk7XHJcblxyXG4gICAgLy8gQXBwbHkgcmVkIGN1dCBhbmltYXRpb25cclxuICAgIGNvbnN0IHNlbGVjdGVkRWxzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XHJcbiAgICBzZWxlY3RlZEVscy5mb3JFYWNoKGVsID0+IGVsLmNsYXNzTGlzdC5hZGQoJ2N1dC1mbGFzaC1iZycpKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBzZWxlY3RlZEVscy5mb3JFYWNoKGVsID0+IGVsLmNsYXNzTGlzdC5yZW1vdmUoJ2N1dC1mbGFzaC1iZycpKTtcclxuICAgIH0sIDEwMDApO1xyXG4gIH1cclxuXHJcblxyXG59XHJcbiJdfQ==
|
|
222
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29weS1zZXJ2aWNlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhLWdyaWQvc3JjL2xpYi9zZXJ2aWNlcy9jb3B5LXNlcnZpY2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUszQyxNQUFNLE9BQU8sa0JBQWtCO0lBRTdCO1FBMkdGLGVBQVUsR0FBVSxFQUFFLENBQUM7UUFDckIsa0JBQWEsR0FBUyxFQUFFLENBQUE7SUE1R1IsQ0FBQztJQUNqQixzQkFBc0IsQ0FDcEIsT0FBYyxFQUNkLE9BQWMsRUFDZCxrQkFBK0IsRUFDL0IsYUFBb0IsRUFDcEIsY0FBK0M7UUFFL0MsT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDaEQsTUFBTSxVQUFVLEdBQVksRUFBRSxDQUFDO1FBQy9CLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxNQUFjLEVBQUUsRUFBRSxDQUMvQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsY0FBYyxLQUFLLE1BQU0sQ0FBQyxDQUFDO1FBQ3hELElBQUksa0JBQWtCLElBQUksa0JBQWtCLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRTtZQUNyRCxNQUFNLGFBQWEsR0FBRyxDQUFDLEdBQUcsa0JBQWtCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDcEUsS0FBSyxNQUFNLE1BQU0sSUFBSSxhQUFhLEVBQUU7Z0JBQ2xDLE1BQU0sR0FBRyxHQUFHLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUMxQyxJQUFJLENBQUMsR0FBRztv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QUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUUzRSwwQkFBMEI7UUFDMUIsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3hELFdBQVcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBQzVELFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxXQUFXLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztRQUNqRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDWCxDQUFDOytHQW5QVSxrQkFBa0I7bUhBQWxCLGtCQUFrQixjQUZqQixNQUFNOzs0RkFFUCxrQkFBa0I7a0JBSDlCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29weVNlcnZpY2VTZXJ2aWNlIHtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxuICBnZXRTZWxlY3RlZERhdGFGb3JDb3B5KFxyXG4gICAgZGF0YVNldDogYW55W10sXHJcbiAgICBjb2x1bW5zOiBhbnlbXSxcclxuICAgIHJvd1NlbGVjdGVkSW5kZXhlczogU2V0PG51bWJlcj4sXHJcbiAgICBzZWxlY3RlZENlbGxzOiBhbnlbXSxcclxuICAgIGdldE5lc3RlZFZhbHVlOiAob2JqOiBhbnksIHBhdGg6IHN0cmluZykgPT4gYW55XHJcbiAgKTogYW55W11bXSB7XHJcbiAgICBjb2x1bW5zID0gY29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC5pc192aXNpYmxlKTtcclxuICAgIGNvbnN0IGNvcGllZFJvd3M6IGFueVtdW10gPSBbXTtcclxuICAgIGNvbnN0IGZpbmRSb3dCeVZpcnR1YWxJbmRleCA9ICh2SW5kZXg6IG51bWJlcikgPT5cclxuICAgICAgZGF0YVNldC5maW5kKChyOiBhbnkpID0+IHIuX192aXJ0dWFsSW5kZXggPT09IHZJbmRleCk7XHJcbiAgICBpZiAocm93U2VsZWN0ZWRJbmRleGVzICYmIHJvd1NlbGVjdGVkSW5kZXhlcy5zaXplID4gMCkge1xyXG4gICAgICBjb25zdCBzb3J0ZWRJbmRleGVzID0gWy4uLnJvd1NlbGVjdGVkSW5kZXhlc10uc29ydCgoYSwgYikgPT4gYSAtIGIpO1xyXG4gICAgICBmb3IgKGNvbnN0IHZJbmRleCBvZiBzb3J0ZWRJbmRleGVzKSB7XHJcbiAgICAgICAgY29uc3Qgcm93ID0gZmluZFJvd0J5VmlydHVhbEluZGV4KHZJbmRleCk7XHJcbiAgICAgICAgaWYgKCFyb3cpIGNvbnRpbnVlO1xyXG4gICAgICAgIGNvbnN0IGV4dHJhY3RWYWx1ZSA9IChmaWVsZDogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuICAgICAgICAgIGNvbnN0IG5lc3RlZCA9IGdldE5lc3RlZFZhbHVlKHJvdywgZmllbGQpO1xyXG4gICAgICAgICAgY29uc3QgdmFsdWUgPVxyXG4gICAgICAgICAgICBuZXN0ZWQ/LnZhbHVlID8/XHJcbiAgICAgICAgICAgIG5lc3RlZD8ubmFtZSA/P1xyXG4gICAgICAgICAgICBuZXN0ZWQgPz9cclxuICAgICAgICAgICAgJy0nO1xyXG5cclxuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWVcclxuICAgICAgICAgICAgICAubWFwKHYgPT5cclxuICAgICAgICAgICAgICAgIHR5cGVvZiB2ID09PSAnb2JqZWN0J1xyXG4gICAgICAgICAgICAgICAgICA/ICh2LmRlcGFydG1lbnROYW1lID8/IHYucm9sZU5hbWUgPz8gJycpXHJcbiAgICAgICAgICAgICAgICAgIDogKHY/LnRvU3RyaW5nKCkgPz8gJycpXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgIC5qb2luKCcsICcpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHZhbHVlID8/ICcnO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgbWFwcGVkID0gY29sdW1ucy5tYXAoY29sID0+IHtcclxuICAgICAgICAgIGlmIChjb2wuY2hpbGRyZW4gJiYgQXJyYXkuaXNBcnJheShjb2wuY2hpbGRyZW4pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb2wuY2hpbGRyZW4ubWFwKChjOiB7IGZpZWxkOiBzdHJpbmcgfSkgPT4gZXh0cmFjdFZhbHVlKGMuZmllbGQpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBbZXh0cmFjdFZhbHVlKGNvbC5maWVsZCldO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IHJvd1ZhbHVlcyA9IG1hcHBlZC5yZWR1Y2U8c3RyaW5nW10+KChhY2MsIGN1cnIpID0+IGFjYy5jb25jYXQoY3VyciksIFtdKTtcclxuICAgICAgICBjb3BpZWRSb3dzLnB1c2gocm93VmFsdWVzKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHNlbGVjdGVkQ2VsbHMgJiYgc2VsZWN0ZWRDZWxscy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IHJvd3NNYXAgPSBuZXcgTWFwPG51bWJlciwgYW55W10+KCk7XHJcbiAgICAgIGZvciAoY29uc3QgY2VsbCBvZiBzZWxlY3RlZENlbGxzKSB7XHJcbiAgICAgICAgY29uc3Qgcm93ID0gZmluZFJvd0J5VmlydHVhbEluZGV4KGNlbGwucm93SW5kZXgpO1xyXG4gICAgICAgIGlmICghcm93KSBjb250aW51ZTtcclxuICAgICAgICBjb25zdCBjb2wgPSBjb2x1bW5zW2NlbGwuY29sSW5kZXhdO1xyXG4gICAgICAgIGxldCBmaWVsZE5hbWUgPSBjb2w/LmZpZWxkO1xyXG4gICAgICAgIGlmIChjb2w/LmNoaWxkcmVuICYmIGNvbC5jaGlsZHJlbltjZWxsLnN1YkNvbEluZGV4XSkge1xyXG4gICAgICAgICAgZmllbGROYW1lID0gY29sLmNoaWxkcmVuW2NlbGwuc3ViQ29sSW5kZXhdLmZpZWxkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgdmFsdWUgPSBnZXROZXN0ZWRWYWx1ZShyb3csIGZpZWxkTmFtZSkgfHwgZ2V0TmVzdGVkVmFsdWUocm93LCBmaWVsZE5hbWUpPy5uYW1lIHx8IGdldE5lc3RlZFZhbHVlKHJvdywgZmllbGROYW1lKSB8fCAnLSc7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlXHJcbiAgICAgICAgICAgIC5tYXAodiA9PlxyXG4gICAgICAgICAgICAgIHR5cGVvZiB2ID09PSAnb2JqZWN0J1xyXG4gICAgICAgICAgICAgICAgPyB2LmRlcGFydG1lbnROYW1lID8/IHYucm9sZU5hbWUgPz8gdi5mdWxsX25hbWUgPz8gJydcclxuICAgICAgICAgICAgICAgIDogdj8udG9TdHJpbmcoKSA/PyAnJ1xyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5qb2luKCcsICcpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlID8/ICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXJvd3NNYXAuaGFzKGNlbGwucm93SW5kZXgpKSByb3dzTWFwLnNldChjZWxsLnJvd0luZGV4LCBbXSk7XHJcbiAgICAgICAgcm93c01hcC5nZXQoY2VsbC5yb3dJbmRleCkhLnB1c2godmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHNvcnRlZENlbGxzID0gWy4uLnJvd3NNYXAuZW50cmllcygpXVxyXG4gICAgICAgIC5zb3J0KChbYV0sIFtiXSkgPT4gYSAtIGIpXHJcbiAgICAgICAgLm1hcCgoW18sIHZdKSA9PiB2KTtcclxuICAgICAgY29waWVkUm93cy5wdXNoKC4uLnNvcnRlZENlbGxzKTtcclxuICAgIH1cclxuICAgIGlmIChjb3BpZWRSb3dzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBjb25zdCBhY3RpdmVDZWxsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmFjdGl2ZS1jZWxsJyk7XHJcbiAgICAgIGlmIChhY3RpdmVDZWxsKSByZXR1cm4gW1thY3RpdmVDZWxsLnRleHRDb250ZW50Py50cmltKCkgfHwgJyddXTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBtYXhDb2xzID0gY29waWVkUm93cy5yZWR1Y2UoKG1heCwgcm93KSA9PiBNYXRoLm1heChtYXgsIHJvdy5sZW5ndGgpLCAwKTtcclxuICAgIHJldHVybiBjb3BpZWRSb3dzLm1hcChyb3cgPT4ge1xyXG4gICAgICBjb25zdCBuZXdSb3cgPSBbLi4ucm93XTtcclxuICAgICAgd2hpbGUgKG5ld1Jvdy5sZW5ndGggPCBtYXhDb2xzKSBuZXdSb3cucHVzaCgnJyk7XHJcbiAgICAgIHJldHVybiBuZXdSb3c7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICBjb3B5VG9DbGlwYm9hcmQoXHJcbiAgICBzZWxlY3RlZERhdGE6IGFueVtdW10sXHJcbiAgICBzZWxlY3RvciA9ICcuc2VsZWN0ZWQtY2VsbCwgLmFjdGl2ZS1jZWxsLCAucm93LXNlbGVjdGVkJ1xyXG4gICk6IHZvaWQge1xyXG4gICAgaWYgKCFzZWxlY3RlZERhdGEgfHwgc2VsZWN0ZWREYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG4gICAgY29uc3QgdGV4dFRvQ29weSA9IHNlbGVjdGVkRGF0YVxyXG4gICAgICAubWFwKHJvdyA9PiByb3cubWFwKGNlbGwgPT4gKGNlbGwgPz8gJycpLnRvU3RyaW5nKCkpLmpvaW4oJ1xcdCcpKVxyXG4gICAgICAuam9pbignXFxuJyk7XHJcbiAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0ZXh0VG9Db3B5KS5jYXRjaChlcnIgPT4gY29uc29sZS5lcnJvcihlcnIpKTtcclxuICAgIGNvbnN0IHNlbGVjdGVkRWxzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XHJcbiAgICBzZWxlY3RlZEVscy5mb3JFYWNoKGVsID0+IGVsLmNsYXNzTGlzdC5hZGQoJ2ZsYXNoLWJnJykpO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHNlbGVjdGVkRWxzLmZvckVhY2goZWwgPT4gZWwuY2xhc3NMaXN0LnJlbW92ZSgnZmxhc2gtYmcnKSk7XHJcbiAgICB9LCAxMDAwKTtcclxuICB9XHJcblxyXG5cclxudXBkYXRlUm93czogYW55W10gPSBbXTtcclxuICBjdXJyZW50Q29sdW1zIDogYW55ID0gW11cclxuICBhc3luYyBwYXN0ZUZyb21DbGlwYm9hcmRUZXh0KFxyXG4gICAgdGV4dDogc3RyaW5nLFxyXG4gICAgZGF0YVNldDogYW55W10sXHJcbiAgICBjb2x1bW5zOiBhbnlbXSxcclxuICAgIHN0YXJ0Um93SW5kZXg6IG51bWJlcixcclxuICAgIHN0YXJ0Q29sSW5kZXg6IG51bWJlcixcclxuICAgIHN0YXJ0U3ViQ29sSW5kZXg6IG51bWJlciA9IDBcclxuICApOiBQcm9taXNlPGFueT4ge1xyXG4gICAgaWYgKCF0ZXh0KSByZXR1cm4gW107XHJcbiAgICB0aGlzLnVwZGF0ZVJvd3MgPSBbXTtcclxuICAgIGNvbnN0IHJvd3MgPSB0ZXh0LnNwbGl0KC9cXHI/XFxuLykubWFwKHIgPT4gci5zcGxpdCgnXFx0JykpO1xyXG4gICAgY29uc3QgZmxhdHRlbmVkQ29sdW1uczogYW55W10gPSBbXTtcclxuICAgIGNvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICBpZiAoY29sLmNoaWxkcmVuPy5sZW5ndGgpIHtcclxuICAgICAgICBjb2wuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQ6IGFueSkgPT4gZmxhdHRlbmVkQ29sdW1ucy5wdXNoKHsgcGFyZW50OiBjb2wsIC4uLmNoaWxkIH0pKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBmbGF0dGVuZWRDb2x1bW5zLnB1c2goY29sKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBsZXQgc3RhcnRGbGF0dGVuZWRJbmRleCA9IDA7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0YXJ0Q29sSW5kZXg7IGkrKykge1xyXG4gICAgICBjb25zdCBjb2wgPSBjb2x1bW5zW2ldO1xyXG4gICAgICBzdGFydEZsYXR0ZW5lZEluZGV4ICs9IGNvbC5jaGlsZHJlbj8ubGVuZ3RoIHx8IDE7XHJcbiAgICB9XHJcbiAgICBjb25zdCBzdGFydENvbCA9IGNvbHVtbnNbc3RhcnRDb2xJbmRleF07XHJcbiAgICBpZiAoc3RhcnRDb2w/LmNoaWxkcmVuPy5sZW5ndGgpIHtcclxuICAgICAgc3RhcnRGbGF0dGVuZWRJbmRleCArPSBNYXRoLm1pbihzdGFydFN1YkNvbEluZGV4LCBzdGFydENvbC5jaGlsZHJlbi5sZW5ndGggLSAxKTtcclxuICAgIH1cclxuIFxyXG4gICAgcm93cy5mb3JFYWNoKChyb3dWYWx1ZXMsIHJPZmZzZXQpID0+IHtcclxuICAgICAgY29uc3QgdGFyZ2V0Um93SW5kZXggPSBzdGFydFJvd0luZGV4ICsgck9mZnNldDtcclxuICAgICAgY29uc3Qgcm93ID0gZGF0YVNldC5maW5kKHIgPT4gcj8uX192aXJ0dWFsSW5kZXggPT09IHRhcmdldFJvd0luZGV4KTtcclxuICAgICAgaWYgKCFyb3cpIHJldHVybjtcclxuIFxyXG4gICAgICByb3dWYWx1ZXMuZm9yRWFjaCgodmFsdWUsIGNPZmZzZXQpID0+IHtcclxuICAgICAgICBjb25zdCB0YXJnZXRJbmRleCA9IHN0YXJ0RmxhdHRlbmVkSW5kZXggKyBjT2Zmc2V0O1xyXG4gICAgICAgIGlmICh0YXJnZXRJbmRleCA8IDAgfHwgdGFyZ2V0SW5kZXggPj0gZmxhdHRlbmVkQ29sdW1ucy5sZW5ndGgpIHJldHVybjtcclxuIFxyXG4gICAgICAgIGNvbnN0IHRhcmdldENvbHVtbiA9IGZsYXR0ZW5lZENvbHVtbnNbdGFyZ2V0SW5kZXhdO1xyXG4gICAgICAgIGlmKCF0YXJnZXRDb2x1bW4gfHwgIXRhcmdldENvbHVtbi5pc19lZGl0YWJsZSkgcmV0dXJuO1xyXG4gICAgICAgICBpZiAodGFyZ2V0Q29sdW1uPy50eXBlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50Q29sdW1zLnB1c2godGFyZ2V0Q29sdW1uKTtcclxuICAgICAgICAgICAgdGhpcy5zZXROZXN0ZWRWYWx1ZShyb3csIHRhcmdldENvbHVtbiwgdmFsdWUpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmICh0YXJnZXRDb2x1bW4udHlwZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAgICAgY29uc3QgbnVtID0gTnVtYmVyKHZhbHVlKTtcclxuICAgICAgICAgICAgaWYgKCFpc05hTihudW0pICYmIHZhbHVlICE9PSAnJykge1xyXG4gICAgICAgICAgICAgIHRoaXMuY3VycmVudENvbHVtcy5wdXNoKHRhcmdldENvbHVtbik7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXROZXN0ZWRWYWx1ZShyb3csIHRhcmdldENvbHVtbiwgbnVtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gXHJcbiAgICByZXR1cm4ge3VwZGF0ZVJvd3MgOiB0aGlzLnVwZGF0ZVJvd3MsIGN1cnJlbnRDb2x1bXMgOiB0aGlzLmN1cnJlbnRDb2x1bXN9O1xyXG4gIH1cclxuXHJcblxyXG4gIHNldE5lc3RlZFZhbHVlKG9iajogYW55LCBjb2x1bW46IGFueSwgb3B0aW9uOiBhbnksIGNhbGxlZEZyb21JbnB1dCA9IGZhbHNlKTogdm9pZCB7XHJcbiAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdkYXRlJyB8fCBjb2x1bW4udHlwZSA9PT0gJ2ltYWdlJykgcmV0dXJuO1xyXG4gICAgY29uc3QgcGF0aCA9IGNvbHVtbi5maWVsZDtcclxuICAgIGlmICghcGF0aCkgcmV0dXJuO1xyXG4gICAgY29uc3Qga2V5cyA9IHBhdGguc3BsaXQoJy4nKTtcclxuICAgIGNvbnN0IGxhc3RLZXkgPSBrZXlzLnBvcCgpO1xyXG4gICAgY29uc3QgcGFyZW50ID0ga2V5cy5yZWR1Y2UoKGFjYzogYW55LCBrZXk6IHN0cmluZykgPT4gKGFjY1trZXldID8/PSB7fSksIG9iaik7XHJcbiAgICBpZiAocGFyZW50ICYmIGxhc3RLZXkpIHtcclxuICAgICAgaWYgKHR5cGVvZiBvcHRpb24gPT09ICdvYmplY3QnICYmIG9wdGlvbiAhPT0gbnVsbCkge1xyXG4gICAgICAgIHBhcmVudFtsYXN0S2V5XSA9IHtcclxuICAgICAgICAgIGlkOiBvcHRpb24uaWQgPz8gMSxcclxuICAgICAgICAgIHZhbHVlOiBvcHRpb24udmFsdWUgPz8gb3B0aW9uLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcGFyZW50W2xhc3RLZXldID0gb3B0aW9uO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCBzZW5kT2JqID0ge1xyXG4gICAgICBkYXRhOiB7IC4uLm9iaiB9LFxyXG4gICAgICBldmVudFR5cGU6ICdvbkNlbGxFZGl0JyxcclxuICAgIH07XHJcbiAgICB0aGlzLnVwZGF0ZVJvd3MucHVzaChvYmopO1xyXG4gIH1cclxuXHJcblxyXG4gIGN1dFNlbGVjdGVkU2VsZWN0ZWREYXRhKFxyXG4gICAgZGF0YVNldDogYW55W10sXHJcbiAgICByb3dTZWxlY3RlZEluZGV4ZXM6IFNldDxudW1iZXI+LFxyXG4gICAgc2VsZWN0ZWRDZWxsczogYW55W10sXHJcbiAgICBjb2x1bW5zOiBhbnlbXSxcclxuICAgIHNldE5lc3RlZFZhbHVlOiAob2JqOiBhbnksIGNvbHVtbjogYW55LCB2YWx1ZTogYW55KSA9PiB2b2lkXHJcbiAgKTogYW55IHtcclxuICAgIGxldCB1cGRhdGVkRGF0YSA9IFsuLi5kYXRhU2V0XTtcclxuICAgIGlmIChyb3dTZWxlY3RlZEluZGV4ZXM/LnNpemUpIHtcclxuICAgICAgY29uc3QgaW5kZXhlcyA9IFsuLi5yb3dTZWxlY3RlZEluZGV4ZXNdO1xyXG4gICAgICB1cGRhdGVkRGF0YSA9IHVwZGF0ZWREYXRhLmZpbHRlcihcclxuICAgICAgICAocm93OiBhbnkpID0+ICFpbmRleGVzLmluY2x1ZGVzKHJvdy5fX3ZpcnR1YWxJbmRleClcclxuICAgICAgKTtcclxuICAgICAgLy8gcm93U2VsZWN0ZWRJbmRleGVzLmNsZWFyKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChzZWxlY3RlZENlbGxzPy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy51cGRhdGVSb3dzID0gW107XHJcbiAgICAgIGZvciAoY29uc3QgY2VsbCBvZiBzZWxlY3RlZENlbGxzKSB7XHJcbiAgICAgICAgY29uc3Qgcm93ID0gdXBkYXRlZERhdGEuZmluZChyID0+IHIuX192aXJ0dWFsSW5kZXggPT09IGNlbGwucm93SW5kZXgpO1xyXG4gICAgICAgIGlmICghcm93KSBjb250aW51ZTtcclxuICAgICAgICBsZXQgY29sID0gY29sdW1uc1tjZWxsLmNvbEluZGV4XTtcclxuICAgICAgICBpZiAoY29sPy5jaGlsZHJlbiAmJiBjb2wuY2hpbGRyZW5bY2VsbC5zdWJDb2xJbmRleF0pIHtcclxuICAgICAgICAgIGNvbCA9IGNvbC5jaGlsZHJlbltjZWxsLnN1YkNvbEluZGV4XTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXROZXN0ZWRWYWx1ZShyb3csIGNvbCwgJycpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIHNlbGVjdGVkQ2VsbHMubGVuZ3RoID0gMDtcclxuICAgIH1cclxuICAgIHJldHVybiB7dXBkYXRlZERhdGE6IHVwZGF0ZWREYXRhLCB1cGRhdGVkUm93czogdGhpcy51cGRhdGVSb3dzfTtcclxuICB9XHJcblxyXG5cclxuICBjdXRXaXRoQW5pbWF0aW9uKFxyXG4gICAgc2VsZWN0ZWREYXRhOiBhbnlbXVtdLFxyXG4gICAgc2VsZWN0b3IgPSAnLnNlbGVjdGVkLWNlbGwsIC5hY3RpdmUtY2VsbCwgLnJvdy1zZWxlY3RlZCdcclxuICApOiB2b2lkIHtcclxuICAgIGlmICghc2VsZWN0ZWREYXRhIHx8IHNlbGVjdGVkRGF0YS5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHJcbiAgICBjb25zdCB0ZXh0VG9Db3B5ID0gc2VsZWN0ZWREYXRhXHJcbiAgICAgIC5tYXAocm93ID0+IHJvdy5tYXAoY2VsbCA9PiAoY2VsbCA/PyAnJykudG9TdHJpbmcoKSkuam9pbignXFx0JykpXHJcbiAgICAgIC5qb2luKCdcXG4nKTtcclxuXHJcbiAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0ZXh0VG9Db3B5KS5jYXRjaChlcnIgPT4gY29uc29sZS5lcnJvcihlcnIpKTtcclxuXHJcbiAgICAvLyBBcHBseSByZWQgY3V0IGFuaW1hdGlvblxyXG4gICAgY29uc3Qgc2VsZWN0ZWRFbHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcclxuICAgIHNlbGVjdGVkRWxzLmZvckVhY2goZWwgPT4gZWwuY2xhc3NMaXN0LmFkZCgnY3V0LWZsYXNoLWJnJykpO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHNlbGVjdGVkRWxzLmZvckVhY2goZWwgPT4gZWwuY2xhc3NMaXN0LnJlbW92ZSgnY3V0LWZsYXNoLWJnJykpO1xyXG4gICAgfSwgMTAwMCk7XHJcbiAgfVxyXG5cclxuXHJcbn1cclxuIl19
|