raain-app 1.6.21 → 1.6.24

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.
@@ -17,6 +17,7 @@ import { RaainSpeedComponent } from './raain-speed/raain-speed.component';
17
17
  import { RaainCompareStackComponent } from './raain-compare-stack/raain-compare-stack.component';
18
18
  import { RaainGlobeComponent } from './raain-globe/raain-globe.component';
19
19
  import { RaainDetailsComponent } from './raain-details/raain-details.component';
20
+ import { CumulativeSelectorComponent } from './cumulative-selector/cumulative-selector.component';
20
21
  import * as i0 from "@angular/core";
21
22
  export class SharedModule {
22
23
  constructor(parentModule) {
@@ -36,7 +37,8 @@ SharedModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "
36
37
  RaainSpeedComponent,
37
38
  RaainGlobeComponent,
38
39
  ProfileIconDirective,
39
- RaainDetailsComponent], imports: [CommonModule, FormsModule, IonicModule, NgOptimizedImage, PipesModule], exports: [CommonModule,
40
+ RaainDetailsComponent,
41
+ CumulativeSelectorComponent], imports: [CommonModule, FormsModule, IonicModule, NgOptimizedImage, PipesModule], exports: [CommonModule,
40
42
  NgStyle,
41
43
  PipesModule,
42
44
  RaainMapComponent,
@@ -48,7 +50,8 @@ SharedModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "
48
50
  RaainSpeedComponent,
49
51
  RaainGlobeComponent,
50
52
  ProfileIconDirective,
51
- RaainDetailsComponent] });
53
+ RaainDetailsComponent,
54
+ CumulativeSelectorComponent] });
52
55
  SharedModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SharedModule, providers: [Storage, RadarService, ProfileService, Cache, IonRange], imports: [CommonModule, FormsModule, IonicModule, PipesModule, CommonModule,
53
56
  PipesModule] });
54
57
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SharedModule, decorators: [{
@@ -65,6 +68,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
65
68
  RaainGlobeComponent,
66
69
  ProfileIconDirective,
67
70
  RaainDetailsComponent,
71
+ CumulativeSelectorComponent,
68
72
  ],
69
73
  imports: [CommonModule, FormsModule, IonicModule, NgOptimizedImage, PipesModule],
70
74
  providers: [Storage, RadarService, ProfileService, Cache, IonRange],
@@ -82,6 +86,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
82
86
  RaainGlobeComponent,
83
87
  ProfileIconDirective,
84
88
  RaainDetailsComponent,
89
+ CumulativeSelectorComponent,
85
90
  ],
86
91
  }]
87
92
  }], ctorParameters: function () { return [{ type: SharedModule, decorators: [{
@@ -89,4 +94,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
89
94
  }, {
90
95
  type: SkipSelf
91
96
  }] }]; } });
92
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL3NoYXJlZC9zaGFyZWQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDeEUsT0FBTyxFQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzNELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDOUQsT0FBTyxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDbEUsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFDOUUsT0FBTyxFQUFDLDJCQUEyQixFQUFDLE1BQU0scURBQXFELENBQUM7QUFDaEcsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sK0NBQStDLENBQUM7QUFDdEYsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sbURBQW1ELENBQUM7QUFDNUYsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFDeEUsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0scURBQXFELENBQUM7QUFDL0YsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFDeEUsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0seUNBQXlDLENBQUM7O0FBa0M5RSxNQUFNLE9BQU8sWUFBWTtJQUNyQixZQUFvQyxZQUEyQjtRQUMzRCxJQUFJLFlBQVksRUFBRTtZQUNkLG1CQUFtQjtZQUNuQixPQUFPLENBQUMsSUFBSSxDQUFDLGlFQUFpRSxDQUFDLENBQUM7U0FDbkY7SUFDTCxDQUFDOzswR0FOUSxZQUFZOzJHQUFaLFlBQVksaUJBOUJqQixpQkFBaUI7UUFDakIscUJBQXFCO1FBQ3JCLDBCQUEwQjtRQUMxQix1QkFBdUI7UUFDdkIseUJBQXlCO1FBQ3pCLDJCQUEyQjtRQUMzQixtQkFBbUI7UUFDbkIsbUJBQW1CO1FBQ25CLG9CQUFvQjtRQUNwQixxQkFBcUIsYUFFZixZQUFZLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLGFBRzNFLFlBQVk7UUFDWixPQUFPO1FBQ1AsV0FBVztRQUVYLGlCQUFpQjtRQUNqQixxQkFBcUI7UUFDckIsMEJBQTBCO1FBQzFCLHVCQUF1QjtRQUN2Qix5QkFBeUI7UUFDekIsMkJBQTJCO1FBQzNCLG1CQUFtQjtRQUNuQixtQkFBbUI7UUFDbkIsb0JBQW9CO1FBQ3BCLHFCQUFxQjsyR0FHaEIsWUFBWSxhQWxCVixDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsWUFEekQsWUFBWSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQW9CLFdBQVcsRUFHM0UsWUFBWTtRQUVaLFdBQVc7NEZBY04sWUFBWTtrQkFoQ3hCLFFBQVE7bUJBQUM7b0JBQ04sWUFBWSxFQUFFO3dCQUNWLGlCQUFpQjt3QkFDakIscUJBQXFCO3dCQUNyQiwwQkFBMEI7d0JBQzFCLHVCQUF1Qjt3QkFDdkIseUJBQXlCO3dCQUN6QiwyQkFBMkI7d0JBQzNCLG1CQUFtQjt3QkFDbkIsbUJBQW1CO3dCQUNuQixvQkFBb0I7d0JBQ3BCLHFCQUFxQjtxQkFDeEI7b0JBQ0QsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxDQUFDO29CQUNoRixTQUFTLEVBQUUsQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDO29CQUNuRSxPQUFPLEVBQUU7d0JBQ0wsWUFBWTt3QkFDWixPQUFPO3dCQUNQLFdBQVc7d0JBRVgsaUJBQWlCO3dCQUNqQixxQkFBcUI7d0JBQ3JCLDBCQUEwQjt3QkFDMUIsdUJBQXVCO3dCQUN2Qix5QkFBeUI7d0JBQ3pCLDJCQUEyQjt3QkFDM0IsbUJBQW1CO3dCQUNuQixtQkFBbUI7d0JBQ25CLG9CQUFvQjt3QkFDcEIscUJBQXFCO3FCQUN4QjtpQkFDSjs7MEJBRWdCLFFBQVE7OzBCQUFJLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbW1vbk1vZHVsZSwgTmdPcHRpbWl6ZWRJbWFnZSwgTmdTdHlsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7TmdNb2R1bGUsIE9wdGlvbmFsLCBTa2lwU2VsZn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Zvcm1zTW9kdWxlfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7UHJvZmlsZVNlcnZpY2V9IGZyb20gJy4vcHJvZmlsZS5zZXJ2aWNlJztcbmltcG9ydCB7U3RvcmFnZX0gZnJvbSAnLi9zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHtSYWRhclNlcnZpY2V9IGZyb20gJy4vcmFkYXIuc2VydmljZSc7XG5pbXBvcnQge0NhY2hlfSBmcm9tICcuL2NhY2hlLnNlcnZpY2UnO1xuaW1wb3J0IHtQcm9maWxlSWNvbkRpcmVjdGl2ZX0gZnJvbSAnLi9wcm9maWxlLWljb24uZGlyZWN0aXZlJztcbmltcG9ydCB7SW9uaWNNb2R1bGUsIElvblJhbmdlfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQge1BpcGVzTW9kdWxlfSBmcm9tICcuL3BpcGVzLm1vZHVsZSc7XG5pbXBvcnQge1JhYWluTWFwQ29tcG9uZW50fSBmcm9tICcuL3JhYWluLW1hcC9yYWFpbi1tYXAuY29tcG9uZW50JztcbmltcG9ydCB7UmFhaW5Db21wYXJlQ29tcG9uZW50fSBmcm9tICcuL3JhYWluLWNvbXBhcmUvcmFhaW4tY29tcGFyZS5jb21wb25lbnQnO1xuaW1wb3J0IHtSYWFpbkNvbmZpZ3VyYXRpb25Db21wb25lbnR9IGZyb20gJy4vcmFhaW4tY29uZmlndXJhdGlvbi9yYWFpbi1jb25maWd1cmF0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQge1JhYWluRGF0ZUZvY3VzQ29tcG9uZW50fSBmcm9tICcuL3JhYWluLWRhdGUtZm9jdXMvcmFhaW4tZGF0ZS1mb2N1cy5jb21wb25lbnQnO1xuaW1wb3J0IHtSYWFpbkRhdGVEeW5hbWljQ29tcG9uZW50fSBmcm9tICcuL3JhYWluLWRhdGUtZHluYW1pYy9yYWFpbi1kYXRlLWR5bmFtaWMuY29tcG9uZW50JztcbmltcG9ydCB7UmFhaW5TcGVlZENvbXBvbmVudH0gZnJvbSAnLi9yYWFpbi1zcGVlZC9yYWFpbi1zcGVlZC5jb21wb25lbnQnO1xuaW1wb3J0IHtSYWFpbkNvbXBhcmVTdGFja0NvbXBvbmVudH0gZnJvbSAnLi9yYWFpbi1jb21wYXJlLXN0YWNrL3JhYWluLWNvbXBhcmUtc3RhY2suY29tcG9uZW50JztcbmltcG9ydCB7UmFhaW5HbG9iZUNvbXBvbmVudH0gZnJvbSAnLi9yYWFpbi1nbG9iZS9yYWFpbi1nbG9iZS5jb21wb25lbnQnO1xuaW1wb3J0IHtSYWFpbkRldGFpbHNDb21wb25lbnR9IGZyb20gJy4vcmFhaW4tZGV0YWlscy9yYWFpbi1kZXRhaWxzLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gICAgZGVjbGFyYXRpb25zOiBbXG4gICAgICAgIFJhYWluTWFwQ29tcG9uZW50LFxuICAgICAgICBSYWFpbkNvbXBhcmVDb21wb25lbnQsXG4gICAgICAgIFJhYWluQ29tcGFyZVN0YWNrQ29tcG9uZW50LFxuICAgICAgICBSYWFpbkRhdGVGb2N1c0NvbXBvbmVudCxcbiAgICAgICAgUmFhaW5EYXRlRHluYW1pY0NvbXBvbmVudCxcbiAgICAgICAgUmFhaW5Db25maWd1cmF0aW9uQ29tcG9uZW50LFxuICAgICAgICBSYWFpblNwZWVkQ29tcG9uZW50LFxuICAgICAgICBSYWFpbkdsb2JlQ29tcG9uZW50LFxuICAgICAgICBQcm9maWxlSWNvbkRpcmVjdGl2ZSxcbiAgICAgICAgUmFhaW5EZXRhaWxzQ29tcG9uZW50LFxuICAgIF0sXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIElvbmljTW9kdWxlLCBOZ09wdGltaXplZEltYWdlLCBQaXBlc01vZHVsZV0sXG4gICAgcHJvdmlkZXJzOiBbU3RvcmFnZSwgUmFkYXJTZXJ2aWNlLCBQcm9maWxlU2VydmljZSwgQ2FjaGUsIElvblJhbmdlXSxcbiAgICBleHBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgTmdTdHlsZSxcbiAgICAgICAgUGlwZXNNb2R1bGUsXG5cbiAgICAgICAgUmFhaW5NYXBDb21wb25lbnQsXG4gICAgICAgIFJhYWluQ29tcGFyZUNvbXBvbmVudCxcbiAgICAgICAgUmFhaW5Db21wYXJlU3RhY2tDb21wb25lbnQsXG4gICAgICAgIFJhYWluRGF0ZUZvY3VzQ29tcG9uZW50LFxuICAgICAgICBSYWFpbkRhdGVEeW5hbWljQ29tcG9uZW50LFxuICAgICAgICBSYWFpbkNvbmZpZ3VyYXRpb25Db21wb25lbnQsXG4gICAgICAgIFJhYWluU3BlZWRDb21wb25lbnQsXG4gICAgICAgIFJhYWluR2xvYmVDb21wb25lbnQsXG4gICAgICAgIFByb2ZpbGVJY29uRGlyZWN0aXZlLFxuICAgICAgICBSYWFpbkRldGFpbHNDb21wb25lbnQsXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgU2hhcmVkTW9kdWxlIHtcbiAgICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKSBwYXJlbnRNb2R1bGU/OiBTaGFyZWRNb2R1bGUpIHtcbiAgICAgICAgaWYgKHBhcmVudE1vZHVsZSkge1xuICAgICAgICAgICAgLy8gdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdTaGFyZWRNb2R1bGUgaXMgYWxyZWFkeSBsb2FkZWQuIEltcG9ydCBpdCBpbiB0aGUgQXBwTW9kdWxlIG9ubHknKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL3NoYXJlZC9zaGFyZWQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDeEUsT0FBTyxFQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzNELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDOUQsT0FBTyxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDbEUsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFDOUUsT0FBTyxFQUFDLDJCQUEyQixFQUFDLE1BQU0scURBQXFELENBQUM7QUFDaEcsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sK0NBQStDLENBQUM7QUFDdEYsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sbURBQW1ELENBQUM7QUFDNUYsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFDeEUsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0scURBQXFELENBQUM7QUFDL0YsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFDeEUsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFDOUUsT0FBTyxFQUFDLDJCQUEyQixFQUFDLE1BQU0scURBQXFELENBQUM7O0FBb0NoRyxNQUFNLE9BQU8sWUFBWTtJQUNyQixZQUFvQyxZQUEyQjtRQUMzRCxJQUFJLFlBQVksRUFBRTtZQUNkLG1CQUFtQjtZQUNuQixPQUFPLENBQUMsSUFBSSxDQUFDLGlFQUFpRSxDQUFDLENBQUM7U0FDbkY7SUFDTCxDQUFDOzswR0FOUSxZQUFZOzJHQUFaLFlBQVksaUJBaENqQixpQkFBaUI7UUFDakIscUJBQXFCO1FBQ3JCLDBCQUEwQjtRQUMxQix1QkFBdUI7UUFDdkIseUJBQXlCO1FBQ3pCLDJCQUEyQjtRQUMzQixtQkFBbUI7UUFDbkIsbUJBQW1CO1FBQ25CLG9CQUFvQjtRQUNwQixxQkFBcUI7UUFDckIsMkJBQTJCLGFBRXJCLFlBQVksRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsYUFHM0UsWUFBWTtRQUNaLE9BQU87UUFDUCxXQUFXO1FBRVgsaUJBQWlCO1FBQ2pCLHFCQUFxQjtRQUNyQiwwQkFBMEI7UUFDMUIsdUJBQXVCO1FBQ3ZCLHlCQUF5QjtRQUN6QiwyQkFBMkI7UUFDM0IsbUJBQW1CO1FBQ25CLG1CQUFtQjtRQUNuQixvQkFBb0I7UUFDcEIscUJBQXFCO1FBQ3JCLDJCQUEyQjsyR0FHdEIsWUFBWSxhQW5CVixDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsWUFEekQsWUFBWSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQW9CLFdBQVcsRUFHM0UsWUFBWTtRQUVaLFdBQVc7NEZBZU4sWUFBWTtrQkFsQ3hCLFFBQVE7bUJBQUM7b0JBQ04sWUFBWSxFQUFFO3dCQUNWLGlCQUFpQjt3QkFDakIscUJBQXFCO3dCQUNyQiwwQkFBMEI7d0JBQzFCLHVCQUF1Qjt3QkFDdkIseUJBQXlCO3dCQUN6QiwyQkFBMkI7d0JBQzNCLG1CQUFtQjt3QkFDbkIsbUJBQW1CO3dCQUNuQixvQkFBb0I7d0JBQ3BCLHFCQUFxQjt3QkFDckIsMkJBQTJCO3FCQUM5QjtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLENBQUM7b0JBQ2hGLFNBQVMsRUFBRSxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUM7b0JBQ25FLE9BQU8sRUFBRTt3QkFDTCxZQUFZO3dCQUNaLE9BQU87d0JBQ1AsV0FBVzt3QkFFWCxpQkFBaUI7d0JBQ2pCLHFCQUFxQjt3QkFDckIsMEJBQTBCO3dCQUMxQix1QkFBdUI7d0JBQ3ZCLHlCQUF5Qjt3QkFDekIsMkJBQTJCO3dCQUMzQixtQkFBbUI7d0JBQ25CLG1CQUFtQjt3QkFDbkIsb0JBQW9CO3dCQUNwQixxQkFBcUI7d0JBQ3JCLDJCQUEyQjtxQkFDOUI7aUJBQ0o7OzBCQUVnQixRQUFROzswQkFBSSxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21tb25Nb2R1bGUsIE5nT3B0aW1pemVkSW1hZ2UsIE5nU3R5bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge05nTW9kdWxlLCBPcHRpb25hbCwgU2tpcFNlbGZ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQge1Byb2ZpbGVTZXJ2aWNlfSBmcm9tICcuL3Byb2ZpbGUuc2VydmljZSc7XG5pbXBvcnQge1N0b3JhZ2V9IGZyb20gJy4vc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7UmFkYXJTZXJ2aWNlfSBmcm9tICcuL3JhZGFyLnNlcnZpY2UnO1xuaW1wb3J0IHtDYWNoZX0gZnJvbSAnLi9jYWNoZS5zZXJ2aWNlJztcbmltcG9ydCB7UHJvZmlsZUljb25EaXJlY3RpdmV9IGZyb20gJy4vcHJvZmlsZS1pY29uLmRpcmVjdGl2ZSc7XG5pbXBvcnQge0lvbmljTW9kdWxlLCBJb25SYW5nZX0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHtQaXBlc01vZHVsZX0gZnJvbSAnLi9waXBlcy5tb2R1bGUnO1xuaW1wb3J0IHtSYWFpbk1hcENvbXBvbmVudH0gZnJvbSAnLi9yYWFpbi1tYXAvcmFhaW4tbWFwLmNvbXBvbmVudCc7XG5pbXBvcnQge1JhYWluQ29tcGFyZUNvbXBvbmVudH0gZnJvbSAnLi9yYWFpbi1jb21wYXJlL3JhYWluLWNvbXBhcmUuY29tcG9uZW50JztcbmltcG9ydCB7UmFhaW5Db25maWd1cmF0aW9uQ29tcG9uZW50fSBmcm9tICcuL3JhYWluLWNvbmZpZ3VyYXRpb24vcmFhaW4tY29uZmlndXJhdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHtSYWFpbkRhdGVGb2N1c0NvbXBvbmVudH0gZnJvbSAnLi9yYWFpbi1kYXRlLWZvY3VzL3JhYWluLWRhdGUtZm9jdXMuY29tcG9uZW50JztcbmltcG9ydCB7UmFhaW5EYXRlRHluYW1pY0NvbXBvbmVudH0gZnJvbSAnLi9yYWFpbi1kYXRlLWR5bmFtaWMvcmFhaW4tZGF0ZS1keW5hbWljLmNvbXBvbmVudCc7XG5pbXBvcnQge1JhYWluU3BlZWRDb21wb25lbnR9IGZyb20gJy4vcmFhaW4tc3BlZWQvcmFhaW4tc3BlZWQuY29tcG9uZW50JztcbmltcG9ydCB7UmFhaW5Db21wYXJlU3RhY2tDb21wb25lbnR9IGZyb20gJy4vcmFhaW4tY29tcGFyZS1zdGFjay9yYWFpbi1jb21wYXJlLXN0YWNrLmNvbXBvbmVudCc7XG5pbXBvcnQge1JhYWluR2xvYmVDb21wb25lbnR9IGZyb20gJy4vcmFhaW4tZ2xvYmUvcmFhaW4tZ2xvYmUuY29tcG9uZW50JztcbmltcG9ydCB7UmFhaW5EZXRhaWxzQ29tcG9uZW50fSBmcm9tICcuL3JhYWluLWRldGFpbHMvcmFhaW4tZGV0YWlscy5jb21wb25lbnQnO1xuaW1wb3J0IHtDdW11bGF0aXZlU2VsZWN0b3JDb21wb25lbnR9IGZyb20gJy4vY3VtdWxhdGl2ZS1zZWxlY3Rvci9jdW11bGF0aXZlLXNlbGVjdG9yLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gICAgZGVjbGFyYXRpb25zOiBbXG4gICAgICAgIFJhYWluTWFwQ29tcG9uZW50LFxuICAgICAgICBSYWFpbkNvbXBhcmVDb21wb25lbnQsXG4gICAgICAgIFJhYWluQ29tcGFyZVN0YWNrQ29tcG9uZW50LFxuICAgICAgICBSYWFpbkRhdGVGb2N1c0NvbXBvbmVudCxcbiAgICAgICAgUmFhaW5EYXRlRHluYW1pY0NvbXBvbmVudCxcbiAgICAgICAgUmFhaW5Db25maWd1cmF0aW9uQ29tcG9uZW50LFxuICAgICAgICBSYWFpblNwZWVkQ29tcG9uZW50LFxuICAgICAgICBSYWFpbkdsb2JlQ29tcG9uZW50LFxuICAgICAgICBQcm9maWxlSWNvbkRpcmVjdGl2ZSxcbiAgICAgICAgUmFhaW5EZXRhaWxzQ29tcG9uZW50LFxuICAgICAgICBDdW11bGF0aXZlU2VsZWN0b3JDb21wb25lbnQsXG4gICAgXSxcbiAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgSW9uaWNNb2R1bGUsIE5nT3B0aW1pemVkSW1hZ2UsIFBpcGVzTW9kdWxlXSxcbiAgICBwcm92aWRlcnM6IFtTdG9yYWdlLCBSYWRhclNlcnZpY2UsIFByb2ZpbGVTZXJ2aWNlLCBDYWNoZSwgSW9uUmFuZ2VdLFxuICAgIGV4cG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBOZ1N0eWxlLFxuICAgICAgICBQaXBlc01vZHVsZSxcblxuICAgICAgICBSYWFpbk1hcENvbXBvbmVudCxcbiAgICAgICAgUmFhaW5Db21wYXJlQ29tcG9uZW50LFxuICAgICAgICBSYWFpbkNvbXBhcmVTdGFja0NvbXBvbmVudCxcbiAgICAgICAgUmFhaW5EYXRlRm9jdXNDb21wb25lbnQsXG4gICAgICAgIFJhYWluRGF0ZUR5bmFtaWNDb21wb25lbnQsXG4gICAgICAgIFJhYWluQ29uZmlndXJhdGlvbkNvbXBvbmVudCxcbiAgICAgICAgUmFhaW5TcGVlZENvbXBvbmVudCxcbiAgICAgICAgUmFhaW5HbG9iZUNvbXBvbmVudCxcbiAgICAgICAgUHJvZmlsZUljb25EaXJlY3RpdmUsXG4gICAgICAgIFJhYWluRGV0YWlsc0NvbXBvbmVudCxcbiAgICAgICAgQ3VtdWxhdGl2ZVNlbGVjdG9yQ29tcG9uZW50LFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIFNoYXJlZE1vZHVsZSB7XG4gICAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQFNraXBTZWxmKCkgcGFyZW50TW9kdWxlPzogU2hhcmVkTW9kdWxlKSB7XG4gICAgICAgIGlmIChwYXJlbnRNb2R1bGUpIHtcbiAgICAgICAgICAgIC8vIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignU2hhcmVkTW9kdWxlIGlzIGFscmVhZHkgbG9hZGVkLiBJbXBvcnQgaXQgaW4gdGhlIEFwcE1vZHVsZSBvbmx5Jyk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
@@ -66,10 +66,10 @@ export class CompareManager {
66
66
  this.uiCompares = uiCompares;
67
67
  this.onChanges();
68
68
  }
69
- async refreshGlobalCompareQuality(targetsOrdered, withCompareDuplicate, cumulativeHours = 0) {
69
+ async refreshGlobalCompareQuality(targetsOrdered, period, withCompareDuplicate, cumulativeHours = 0) {
70
70
  try {
71
71
  await this.fetchRainComputationQualities(targetsOrdered, cumulativeHours);
72
- await this.buildComparesTimeline(targetsOrdered, withCompareDuplicate);
72
+ await this.buildComparesTimeline(targetsOrdered, period, withCompareDuplicate);
73
73
  if (!this.buildCompares.compareCumulative) {
74
74
  // throw Error('needs cumulative compare');
75
75
  return;
@@ -84,6 +84,9 @@ export class CompareManager {
84
84
  }
85
85
  }
86
86
  async setGaugesInMap() {
87
+ // Get all gauge IDs linked to this rainNode
88
+ const rainNodeGaugeIds = this.rainNode.getLinks(GaugeNode.TYPE).map((l) => l.getId());
89
+ // Fetch gauges from API (may be filtered/limited)
87
90
  let gaugesToFilter = await this.profileService.getGauges(this.rainNode?.id, this.rainNode.getCenter());
88
91
  gaugesToFilter = gaugesToFilter
89
92
  .sort((a, b) => {
@@ -91,9 +94,29 @@ export class CompareManager {
91
94
  b.approxDistanceFrom(this.rainNode.getCenter()));
92
95
  })
93
96
  .filter((v, index) => index < 200);
94
- const rainNodeGaugeIds = this.rainNode.getLinks(GaugeNode.TYPE).map((l) => l.getId());
95
- const visibleGauges = gaugesToFilter.filter((g) => rainNodeGaugeIds.indexOf(g.id) > -1);
96
- console.log('visibleGauges:', visibleGauges);
97
+ // Build a map of gauges from API response
98
+ const gaugesFromApi = new Map();
99
+ for (const gauge of gaugesToFilter) {
100
+ gaugesFromApi.set(gauge.id, gauge);
101
+ }
102
+ // Fetch missing gauges individually (those linked but not in API response)
103
+ const missingGaugeIds = rainNodeGaugeIds.filter((id) => !gaugesFromApi.has(id));
104
+ for (const gaugeId of missingGaugeIds) {
105
+ try {
106
+ const gauge = await this.profileService.getGauge(gaugeId);
107
+ if (gauge) {
108
+ gaugesFromApi.set(gauge.id, gauge);
109
+ }
110
+ }
111
+ catch (e) {
112
+ console.warn(`Failed to fetch gauge ${gaugeId}:`, e);
113
+ }
114
+ }
115
+ // Filter to only gauges linked to this rainNode
116
+ const visibleGauges = rainNodeGaugeIds
117
+ .map((id) => gaugesFromApi.get(id))
118
+ .filter((g) => !!g);
119
+ console.log('visibleGauges:', visibleGauges.length, '/', rainNodeGaugeIds.length);
97
120
  const gaugesLatLng = [];
98
121
  for (const gauge of visibleGauges) {
99
122
  gaugesLatLng.push(new MapLatLng(gauge.latitude, gauge.longitude, undefined, gauge.id, gauge.name));
@@ -201,13 +224,13 @@ export class CompareManager {
201
224
  }
202
225
  return result.sort((a, b) => a.date.getTime() - b.date.getTime());
203
226
  }
204
- async buildComparesTimeline(targetsOrdered, withCompareDuplicate) {
227
+ async buildComparesTimeline(targetsOrdered, period, withCompareDuplicate) {
205
228
  const compareDates = targetsOrdered.map((t) => t.date);
206
229
  const qualities = compareDates
207
230
  .filter((d) => !!d)
208
231
  .map((d) => this.getRainComputationQuality(d))
209
232
  .filter((rcq) => !!rcq);
210
- this.compareDates = compareDates; // compareDates.slice(1, -1);
233
+ this.compareDates = compareDates?.length > 1 ? compareDates : [period.begin, period.end]; // compareDates.slice(1, -1);
211
234
  this.buildCompares = SpeedMatrixContainer.BuildCompares(qualities, !withCompareDuplicate);
212
235
  return this.buildCompares;
213
236
  }
@@ -311,4 +334,4 @@ export class CompareManager {
311
334
  this.selectGaugeInCompare();
312
335
  }
313
336
  }
314
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcGFyZU1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29yZS9zaGFyZWQvdG9vbHMvQ29tcGFyZU1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNuQyxPQUFPLEVBQ0gsU0FBUyxFQU9ULG9CQUFvQixHQUN2QixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBbUJqQyxNQUFNLE9BQU8sY0FBYztJQTRCdkIsWUFDYyxjQUE4QixFQUNqQyxZQUF3QixHQUFHLEVBQUUsR0FBRSxDQUFDO1FBRDdCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUNqQyxjQUFTLEdBQVQsU0FBUyxDQUF1QjtRQUV2QyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUlELElBQVcsUUFBUTtRQUNmLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBVyxRQUFRLENBQUMsUUFBa0I7UUFDbEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7UUFDMUIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFTSxRQUFRO1FBQ1gsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFFakIsSUFBSSxDQUFDLGFBQWEsR0FBRztZQUNqQixl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QUM7SUFFUyxtQkFBbUI7UUFDekIsNENBQTRDO1FBQzVDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7UUFDbEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDaEMsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtNYXBMYXRMbmd9IGZyb20gJ3JhYWluLXVpJztcbmltcG9ydCB7XG4gICAgR2F1Z2VOb2RlLFxuICAgIElDb21wYXJlUGVyRGF0ZSxcbiAgICBJQ29tcGFyZXMsXG4gICAgUG9zaXRpb25WYWx1ZSxcbiAgICBRdWFsaXR5UG9pbnQsXG4gICAgUmFpbkNvbXB1dGF0aW9uUXVhbGl0eSxcbiAgICBSYWluTm9kZSxcbiAgICBTcGVlZE1hdHJpeENvbnRhaW5lcixcbn0gZnJvbSAncmFhaW4tbW9kZWwnO1xuaW1wb3J0IHtYWVR5cGV9IGZyb20gJy4uL3h5dHlwZSc7XG5pbXBvcnQge1Byb2ZpbGVTZXJ2aWNlfSBmcm9tICcuLi9wcm9maWxlLnNlcnZpY2UnO1xuaW1wb3J0IHtGcmFtZVNldH0gZnJvbSAnLi9GcmFtZVNldCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbXBhcmVUYXJnZXQge1xuICAgIGRhdGU6IERhdGU7XG4gICAgcmFpbkNvbXB1dGF0aW9uSWQ/OiBzdHJpbmc7XG4gICAgcmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZUlkPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElVSUNvbXBhcmUge1xuICAgIGRhdGU6IERhdGU7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGNvbXBhcmVQb2ludHM6IFhZVHlwZVtdO1xuICAgIGNvbXBhcmVQb2ludHNNYXg6IFhZVHlwZTtcbiAgICBjb21wYXJlUG9pbnRzSGlzdG9yeTogUXVhbGl0eVBvaW50W107XG4gICAgcmVtYXJrczogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgQ29tcGFyZU1hbmFnZXIge1xuICAgIHB1YmxpYyBnYXVnZXNJbk1hcDogTWFwTGF0TG5nW107XG4gICAgcHVibGljIGdhdWdlc0luQ29tcGFyZTogTWFwTGF0TG5nW107XG4gICAgcHVibGljIHNlbGVjdGVkR2F1Z2VzOiBNYXBMYXRMbmdbXTtcbiAgICBwdWJsaWMgc2VsZWN0ZWRQaXhlbHM6IE1hcExhdExuZ1tdO1xuICAgIHB1YmxpYyBwaXhlbHNTb2x1dGlvbnM6IE1hcExhdExuZ1tdW107XG4gICAgcHVibGljIHNwZWVkczogTWFwTGF0TG5nW107XG5cbiAgICAvLyBmcm9tIGNvbXBhcmVzVGltZWxpbmVcbiAgICBwdWJsaWMgY29tcGFyZU5hbWVzOiBzdHJpbmdbXTtcbiAgICBwdWJsaWMgdWlDb21wYXJlczogSVVJQ29tcGFyZVtdO1xuICAgIHB1YmxpYyBjb21wYXJlU3BlZWRNYXRyaXg6IFBvc2l0aW9uVmFsdWVbXTtcbiAgICBwdWJsaWMgY29tcGFyZVZlcnNpb246IHN0cmluZztcbiAgICBwdWJsaWMgY29tcGFyZVRydXN0ZWRJbmRpY2F0b3I6IG51bWJlcjtcbiAgICBwdWJsaWMgY29tcGFyZURhdGVzOiBEYXRlW107XG5cbiAgICBwdWJsaWMgY3VycmVudFF1YWxpdHlEb25lRGF0ZTogRGF0ZTtcbiAgICBwdWJsaWMgY3VycmVudFF1YWxpdHlMYXVuY2hlZEJ5OiBzdHJpbmc7XG4gICAgcHVibGljIGN1cnJlbnRRdWFsaXR5VGltZVNwZW50SW5NczogbnVtYmVyO1xuICAgIHB1YmxpYyBnbG9iYWxDb21wYXJlUG9pbnRzOiBYWVR5cGVbXTtcbiAgICBwdWJsaWMgZ2xvYmFsQ29tcGFyZVBvaW50c01heDogWFlUeXBlO1xuICAgIHB1YmxpYyBjb21wYXJlU3BlZWQ6IHthbmdsZUluRGVncmVlczogbnVtYmVyOyBwaXhlbHNQZXJQZXJpb2Q6IG51bWJlcn07XG4gICAgcHJvdGVjdGVkIGJ1aWxkQ29tcGFyZXM6IElDb21wYXJlcztcbiAgICBwcm90ZWN0ZWQgc2VsZWN0ZWRHYXVnZTogUXVhbGl0eVBvaW50O1xuICAgIHByb3RlY3RlZCBzZWxlY3RlZEdhdWdlSW5Qb2ludHM6IFF1YWxpdHlQb2ludDtcbiAgICBwcm90ZWN0ZWQgc2VsZWN0ZWRHYXVnZUluUG9pbnRzRGV0YWlsOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIHJhaW5Db21wdXRhdGlvblF1YWxpdGllc1BlckRhdGU6IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgcHJvZmlsZVNlcnZpY2U6IFByb2ZpbGVTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgb25DaGFuZ2VzOiAoKSA9PiB2b2lkID0gKCkgPT4ge31cbiAgICApIHtcbiAgICAgICAgdGhpcy5jbGVhbkFsbCgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfcmFpbk5vZGU6IFJhaW5Ob2RlO1xuXG4gICAgcHVibGljIGdldCByYWluTm9kZSgpOiBSYWluTm9kZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yYWluTm9kZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHJhaW5Ob2RlKHJhaW5Ob2RlOiBSYWluTm9kZSkge1xuICAgICAgICB0aGlzLl9yYWluTm9kZSA9IHJhaW5Ob2RlO1xuICAgICAgICB0aGlzLmNsZWFuQWxsKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFuQWxsKCkge1xuICAgICAgICB0aGlzLmdhdWdlc0luTWFwID0gW107XG4gICAgICAgIHRoaXMuZ2F1Z2VzSW5Db21wYXJlID0gW107XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZXMgPSBbXTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFBpeGVscyA9IFtdO1xuICAgICAgICB0aGlzLnBpeGVsc1NvbHV0aW9ucyA9IFtdO1xuICAgICAgICB0aGlzLmNvbXBhcmVEYXRlcyA9IFtdO1xuICAgICAgICB0aGlzLnNwZWVkcyA9IFtdO1xuXG4gICAgICAgIHRoaXMuYnVpbGRDb21wYXJlcyA9IHtcbiAgICAgICAgICAgIGNvbXBhcmVzUGVyRGF0ZTogW10sXG4gICAgICAgICAgICBjb21wYXJlQ3VtdWxhdGl2ZTogbnVsbCxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5nbG9iYWxDb21wYXJlUG9pbnRzID0gW107XG4gICAgICAgIHRoaXMuZ2xvYmFsQ29tcGFyZVBvaW50c01heCA9IG5ldyBYWVR5cGUoMCwgMCk7XG4gICAgICAgIHRoaXMucmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzUGVyRGF0ZSA9IHt9O1xuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZSA9IG51bGw7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzID0gbnVsbDtcbiAgICAgICAgdGhpcy5jbGVhbkNvbXBhcmVRdWFsaXR5KCdubyBjb21wYXJlIHlldCcpO1xuICAgIH1cblxuICAgIGFzeW5jIHJlZnJlc2hDb21wYXJlUXVhbGl0eShmcmFtZVNldDogRnJhbWVTZXQsIG9ubHlPbmU6IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3QgY29tcGFyZVBlckRhdGUgPSB0aGlzLmdldENvbXBhcmVQZXJEYXRlKGZyYW1lU2V0LmRhdGUpO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICFjb21wYXJlUGVyRGF0ZSB8fFxuICAgICAgICAgICAgIWNvbXBhcmVQZXJEYXRlLnJhaW5Db21wdXRhdGlvblF1YWxpdHk/LnF1YWxpdHlTcGVlZE1hdHJpeENvbnRhaW5lclxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYW5Db21wYXJlUXVhbGl0eShcbiAgICAgICAgICAgICAgICAnbm8gY3VycmVudCBxdWFsaXR5ICcgKyBPYmplY3Qua2V5cyh0aGlzLnJhaW5Db21wdXRhdGlvblF1YWxpdGllc1BlckRhdGUpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZXMoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvbmx5T25lKSB7XG4gICAgICAgICAgICBjb21wYXJlUGVyRGF0ZS5jb21wYXJlVGltZWxpbmUgPSBjb21wYXJlUGVyRGF0ZS5jb21wYXJlVGltZWxpbmUuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChjKSA9PiBjLmRhdGUuZ2V0VGltZSgpID09PSBmcmFtZVNldC5kYXRlLmdldFRpbWUoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVpQ29tcGFyZXM6IElVSUNvbXBhcmVbXSA9IGNvbXBhcmVQZXJEYXRlLmNvbXBhcmVUaW1lbGluZVxuICAgICAgICAgICAgLm1hcCgoYykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGU6IGMuZGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogYy5uYW1lLFxuICAgICAgICAgICAgICAgICAgICBjb21wYXJlUG9pbnRzOiBjLnF1YWxpdHlQb2ludHMubWFwKFxuICAgICAgICAgICAgICAgICAgICAgICAgKHApID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFhZVHlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC5nZXRHYXVnZVZhbHVlKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAuZ2V0UmFpblZhbHVlKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAuZ2F1Z2VMYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC5nYXVnZUlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBjb21wYXJlUG9pbnRzTWF4OiBuZXcgWFlUeXBlKGMubWF4VmFsdWUgKiAxLjIsIGMubWF4VmFsdWUgKiAxLjIpLFxuICAgICAgICAgICAgICAgICAgICBjb21wYXJlUG9pbnRzSGlzdG9yeTogYy5xdWFsaXR5UG9pbnRzTGVnYWN5LFxuICAgICAgICAgICAgICAgICAgICByZW1hcmtzOiBjLnJlbWFya3MsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5kYXRlPy5nZXRUaW1lKCkgLSBiLmRhdGU/LmdldFRpbWUoKSk7XG5cbiAgICAgICAgdGhpcy5jdXJyZW50UXVhbGl0eURvbmVEYXRlID0gY29tcGFyZVBlckRhdGUucmFpbkNvbXB1dGF0aW9uUXVhbGl0eS5pc0RvbmVEYXRlO1xuICAgICAgICB0aGlzLmN1cnJlbnRRdWFsaXR5VGltZVNwZW50SW5NcyA9IGNvbXBhcmVQZXJEYXRlLnJhaW5Db21wdXRhdGlvblF1YWxpdHkudGltZVNwZW50SW5NcztcbiAgICAgICAgdGhpcy5jdXJyZW50UXVhbGl0eUxhdW5jaGVkQnkgPSBjb21wYXJlUGVyRGF0ZS5yYWluQ29tcHV0YXRpb25RdWFsaXR5LmxhdW5jaGVkQnk7XG4gICAgICAgIHRoaXMuY29tcGFyZVZlcnNpb24gPSBjb21wYXJlUGVyRGF0ZS5yYWluQ29tcHV0YXRpb25RdWFsaXR5LmdldFZlcnNpb24oKTtcblxuICAgICAgICB0aGlzLmNvbXBhcmVTcGVlZCA9XG4gICAgICAgICAgICBjb21wYXJlUGVyRGF0ZS5yYWluQ29tcHV0YXRpb25RdWFsaXR5LnF1YWxpdHlTcGVlZE1hdHJpeENvbnRhaW5lci5nZXRTcGVlZCgpO1xuICAgICAgICB0aGlzLmNvbXBhcmVOYW1lcyA9IHVpQ29tcGFyZXMubWFwKChjKSA9PiBjLm5hbWUpO1xuICAgICAgICB0aGlzLnVpQ29tcGFyZXMgPSB1aUNvbXBhcmVzO1xuXG4gICAgICAgIHRoaXMub25DaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgcmVmcmVzaEdsb2JhbENvbXBhcmVRdWFsaXR5KFxuICAgICAgICB0YXJnZXRzT3JkZXJlZDogSUNvbXBhcmVUYXJnZXRbXSxcbiAgICAgICAgd2l0aENvbXBhcmVEdXBsaWNhdGU6IGJvb2xlYW4sXG4gICAgICAgIGN1bXVsYXRpdmVIb3VyczogbnVtYmVyID0gMFxuICAgICkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5mZXRjaFJhaW5Db21wdXRhdGlvblF1YWxpdGllcyh0YXJnZXRzT3JkZXJlZCwgY3VtdWxhdGl2ZUhvdXJzKTtcblxuICAgICAgICAgICAgYXdhaXQgdGhpcy5idWlsZENvbXBhcmVzVGltZWxpbmUodGFyZ2V0c09yZGVyZWQsIHdpdGhDb21wYXJlRHVwbGljYXRlKTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLmJ1aWxkQ29tcGFyZXMuY29tcGFyZUN1bXVsYXRpdmUpIHtcbiAgICAgICAgICAgICAgICAvLyB0aHJvdyBFcnJvcignbmVlZHMgY3VtdWxhdGl2ZSBjb21wYXJlJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjb3VudEZvckF2ZXJhZ2UgPSB0YXJnZXRzT3JkZXJlZC5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCBtYXhWYWx1ZSA9IHRoaXMuYnVpbGRDb21wYXJlcy5jb21wYXJlQ3VtdWxhdGl2ZS5tYXhWYWx1ZSAqIDEuMjtcbiAgICAgICAgICAgIHRoaXMuZ2xvYmFsQ29tcGFyZVBvaW50cyA9IHRoaXMuYnVpbGRDb21wYXJlcy5jb21wYXJlQ3VtdWxhdGl2ZS5xdWFsaXR5UG9pbnRzLm1hcChcbiAgICAgICAgICAgICAgICAocXApID0+XG4gICAgICAgICAgICAgICAgICAgIG5ldyBYWVR5cGUocXAuZ2V0R2F1Z2VWYWx1ZSgpLCBxcC5nZXRSYWluVmFsdWUoKSwgMiwgcXAuZ2F1Z2VMYWJlbCwgcXAuZ2F1Z2VJZClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmdsb2JhbENvbXBhcmVQb2ludHNNYXggPSBuZXcgWFlUeXBlKG1heFZhbHVlLCBtYXhWYWx1ZSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIHNldEdhdWdlc0luTWFwKCkge1xuICAgICAgICBsZXQgZ2F1Z2VzVG9GaWx0ZXIgPSBhd2FpdCB0aGlzLnByb2ZpbGVTZXJ2aWNlLmdldEdhdWdlcyhcbiAgICAgICAgICAgIHRoaXMucmFpbk5vZGU/LmlkLFxuICAgICAgICAgICAgdGhpcy5yYWluTm9kZS5nZXRDZW50ZXIoKVxuICAgICAgICApO1xuICAgICAgICBnYXVnZXNUb0ZpbHRlciA9IGdhdWdlc1RvRmlsdGVyXG4gICAgICAgICAgICAuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIGEuYXBwcm94RGlzdGFuY2VGcm9tKHRoaXMucmFpbk5vZGUuZ2V0Q2VudGVyKCkpIC1cbiAgICAgICAgICAgICAgICAgICAgYi5hcHByb3hEaXN0YW5jZUZyb20odGhpcy5yYWluTm9kZS5nZXRDZW50ZXIoKSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5maWx0ZXIoKHYsIGluZGV4KSA9PiBpbmRleCA8IDIwMCk7XG5cbiAgICAgICAgY29uc3QgcmFpbk5vZGVHYXVnZUlkcyA9IHRoaXMucmFpbk5vZGUuZ2V0TGlua3MoR2F1Z2VOb2RlLlRZUEUpLm1hcCgobCkgPT4gbC5nZXRJZCgpKTtcblxuICAgICAgICBjb25zdCB2aXNpYmxlR2F1Z2VzID0gZ2F1Z2VzVG9GaWx0ZXIuZmlsdGVyKChnKSA9PiByYWluTm9kZUdhdWdlSWRzLmluZGV4T2YoZy5pZCkgPiAtMSk7XG4gICAgICAgIGNvbnNvbGUubG9nKCd2aXNpYmxlR2F1Z2VzOicsIHZpc2libGVHYXVnZXMpO1xuXG4gICAgICAgIGNvbnN0IGdhdWdlc0xhdExuZzogTWFwTGF0TG5nW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBnYXVnZSBvZiB2aXNpYmxlR2F1Z2VzKSB7XG4gICAgICAgICAgICBnYXVnZXNMYXRMbmcucHVzaChcbiAgICAgICAgICAgICAgICBuZXcgTWFwTGF0TG5nKGdhdWdlLmxhdGl0dWRlLCBnYXVnZS5sb25naXR1ZGUsIHVuZGVmaW5lZCwgZ2F1Z2UuaWQsIGdhdWdlLm5hbWUpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ2F1Z2VzSW5NYXAgPSBnYXVnZXNMYXRMbmc7XG4gICAgfVxuXG4gICAgYXN5bmMgc2V0R2F1Z2VzSW5Db21wYXJlKCkge1xuICAgICAgICBjb25zdCBxdWFsaXR5UG9pbnRzOiBRdWFsaXR5UG9pbnRbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGNvbXBhcmUgb2YgdGhpcy51aUNvbXBhcmVzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHF1YWxpdHlQb2ludCBvZiBjb21wYXJlLmNvbXBhcmVQb2ludHNIaXN0b3J5KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWxyZWFkeUFkZGVkID0gcXVhbGl0eVBvaW50cy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgIChwKSA9PiBwPy5nYXVnZUlkID09PSBxdWFsaXR5UG9pbnQuZ2F1Z2VJZFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKGFscmVhZHlBZGRlZC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcXVhbGl0eVBvaW50cy5wdXNoKHF1YWxpdHlQb2ludCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5nYXVnZXNJbkNvbXBhcmUgPSBxdWFsaXR5UG9pbnRzLm1hcCgocCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBNYXBMYXRMbmcoXG4gICAgICAgICAgICAgICAgcC5nYXVnZUNhcnRlc2lhblZhbHVlLmxhdCxcbiAgICAgICAgICAgICAgICBwLmdhdWdlQ2FydGVzaWFuVmFsdWUubG5nLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgcC5nYXVnZUlkLFxuICAgICAgICAgICAgICAgIHAuZ2F1Z2VMYWJlbCArICc+JyArIHAuZ2V0R2F1Z2VWYWx1ZSgpLFxuICAgICAgICAgICAgICAgIHAuZ2V0R2F1Z2VWYWx1ZSgpXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnJlc2V0U2VsZWN0ZWRHYXVnZXMoKTtcbiAgICB9XG5cbiAgICBhc3luYyBzZWxlY3RHYXVnZShnYXVnZUlkOiBzdHJpbmcsIGNvbXBhcmVJbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGlmIChnYXVnZUlkKSB7XG4gICAgICAgICAgICBjb25zdCB4eXMgPSB0aGlzLmdldEN1cnJlbnRRdWFsaXR5UG9pbnRzKGNvbXBhcmVJbmRleCkuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChwKSA9PiBwLmdhdWdlSWQgPT09IGdhdWdlSWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2UgPSB4eXMubGVuZ3RoID09PSAxID8geHlzWzBdIDogbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZSA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRHYXVnZSkge1xuICAgICAgICAgICAgdGhpcy5yZXNldFNlbGVjdGVkR2F1Z2VzKCk7XG4gICAgICAgICAgICBjb25zdCBnYXVnZXNGaWx0ZXJlZCA9IHRoaXMuZ2F1Z2VzSW5NYXAuZmlsdGVyKChnKSA9PiBnLmlkID09PSBnYXVnZUlkKTtcbiAgICAgICAgICAgIGlmIChnYXVnZXNGaWx0ZXJlZC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VzID0gW2dhdWdlc0ZpbHRlcmVkWzBdXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkR2F1Z2VJblBvaW50cyA9IHRoaXMuZ2V0Q3VycmVudFF1YWxpdHlQb2ludHMoY29tcGFyZUluZGV4KS5maWx0ZXIoXG4gICAgICAgICAgICAocCkgPT4gcC5nYXVnZUlkID09PSB0aGlzLnNlbGVjdGVkR2F1Z2UuZ2F1Z2VJZFxuICAgICAgICApO1xuICAgICAgICBsZXQgcGl4ZWxzU29sdXRpb25zOiBNYXBMYXRMbmdbXVtdID0gW107XG5cbiAgICAgICAgaWYgKHNlbGVjdGVkR2F1Z2VJblBvaW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbWFya3MgPSBKU09OLnBhcnNlKHNlbGVjdGVkR2F1Z2VJblBvaW50c1swXS5yZW1hcmspLnNvcnQoXG4gICAgICAgICAgICAgICAgKGEsIGIpID0+IGEuY3JpdGVyaWFBdHRlbXB0ZWRUb0JlTWluaW11bSAtIGIuY3JpdGVyaWFBdHRlbXB0ZWRUb0JlTWluaW11bVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlbWFya3MpO1xuICAgICAgICAgICAgcGl4ZWxzU29sdXRpb25zID0gcmVtYXJrcy5tYXAoKHJlbWFyaykgPT5cbiAgICAgICAgICAgICAgICByZW1hcmsuc29sdXRpb25Gb3JHYXVnZS5waXhlbHMubWFwKFxuICAgICAgICAgICAgICAgICAgICAocCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBNYXBMYXRMbmcoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcC55ICsgMC4wMDUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcC54ICsgMC4wMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnICsgIXJlbWFyay5ub3RQb3NzaWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJyArICFyZW1hcmsubm90UG9zc2libGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IHRpbWVEZWx0YUluTWludXRlcyA9IHNlbGVjdGVkR2F1Z2VJblBvaW50c1swXS5nZXRUaW1lRGVsdGFJbk1pbnV0ZXMoKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzRGV0YWlsID1cbiAgICAgICAgICAgICAgICAnJyArXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRHYXVnZUluUG9pbnRzWzBdLmdhdWdlTGFiZWwgK1xuICAgICAgICAgICAgICAgICcgPiAnICtcbiAgICAgICAgICAgICAgICBNYXRoLnJvdW5kKHNlbGVjdGVkR2F1Z2VJblBvaW50c1swXS5nZXRHYXVnZVZhbHVlKCkgKiAxMDApIC8gMTAwICtcbiAgICAgICAgICAgICAgICAnIC8gJyArXG4gICAgICAgICAgICAgICAgTWF0aC5yb3VuZChzZWxlY3RlZEdhdWdlSW5Qb2ludHNbMF0uZ2V0UmFpblZhbHVlKCkgKiAxMDApIC8gMTAwICtcbiAgICAgICAgICAgICAgICAnIGRUPScgK1xuICAgICAgICAgICAgICAgIHRpbWVEZWx0YUluTWludXRlcztcblxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMgPSBzZWxlY3RlZEdhdWdlSW5Qb2ludHNbMF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cyA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VzID0gW107XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUGl4ZWxzID0gW107XG4gICAgICAgICAgICB0aGlzLnBpeGVsc1NvbHV0aW9ucyA9IFtdO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlcyA9IFtcbiAgICAgICAgICAgIG5ldyBNYXBMYXRMbmcoXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMuZ2F1Z2VDYXJ0ZXNpYW5WYWx1ZS5sYXQsXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMuZ2F1Z2VDYXJ0ZXNpYW5WYWx1ZS5sbmcsXG4gICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzLmdhdWdlSWQsXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMuZ2F1Z2VMYWJlbCArXG4gICAgICAgICAgICAgICAgICAgICc+JyArXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzLmdhdWdlQ2FydGVzaWFuVmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMuZ2F1Z2VDYXJ0ZXNpYW5WYWx1ZS52YWx1ZVxuICAgICAgICAgICAgKSxcbiAgICAgICAgXTtcblxuICAgICAgICB0aGlzLnNlbGVjdEdhdWdlSW5Db21wYXJlKCk7XG5cbiAgICAgICAgY29uc3QgcGl4ZWxzOiBNYXBMYXRMbmdbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHJhaW5DYXJ0ZXNpYW5WYWx1ZSBvZiB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5yYWluQ2FydGVzaWFuVmFsdWVzKSB7XG4gICAgICAgICAgICBwaXhlbHMucHVzaChcbiAgICAgICAgICAgICAgICBuZXcgTWFwTGF0TG5nKHJhaW5DYXJ0ZXNpYW5WYWx1ZS5sYXQgKyAwLjAwNSwgcmFpbkNhcnRlc2lhblZhbHVlLmxuZyArIDAuMDEpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQaXhlbHMgPSBwaXhlbHM7XG5cbiAgICAgICAgdGhpcy5waXhlbHNTb2x1dGlvbnMgPSBwaXhlbHNTb2x1dGlvbnM7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJucyBhbGwgZ3JhbnVsYXIgcXVhbGl0eSBwb2ludHMgYWNyb3NzIGFsbCBkYXRlcyBpbiB0aGUgcGVyaW9kIChleGNsdWRlcyBjdW11bGF0aXZlIGVuZCBkYXRlKVxuICAgIGdldEFsbEdyYW51bGFyQ29tcGFyZVBvaW50cygpOiB7XG4gICAgICAgIGRhdGU6IERhdGU7XG4gICAgICAgIGdhdWdlTmFtZTogc3RyaW5nO1xuICAgICAgICBnYXVnZVZhbHVlOiBudW1iZXI7XG4gICAgICAgIHBpeGVsVmFsdWU6IG51bWJlcjtcbiAgICB9W10ge1xuICAgICAgICBjb25zdCByZXN1bHQ6IHtkYXRlOiBEYXRlOyBnYXVnZU5hbWU6IHN0cmluZzsgZ2F1Z2VWYWx1ZTogbnVtYmVyOyBwaXhlbFZhbHVlOiBudW1iZXJ9W10gPVxuICAgICAgICAgICAgW107XG5cbiAgICAgICAgaWYgKCF0aGlzLmJ1aWxkQ29tcGFyZXM/LmNvbXBhcmVzUGVyRGF0ZT8ubGVuZ3RoIHx8ICF0aGlzLmNvbXBhcmVEYXRlcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRmluZCB0aGUgbGFzdCBkYXRlIChjdW11bGF0aXZlIGVuZCBkYXRlKSB0byBleGNsdWRlIGl0XG4gICAgICAgIGNvbnN0IGxhc3REYXRlVGltZSA9IE1hdGgubWF4KC4uLnRoaXMuY29tcGFyZURhdGVzLm1hcCgoZCkgPT4gZC5nZXRUaW1lKCkpKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGNvbXBhcmVQZXJEYXRlIG9mIHRoaXMuYnVpbGRDb21wYXJlcy5jb21wYXJlc1BlckRhdGUpIHtcbiAgICAgICAgICAgIC8vIFNraXAgdGhlIGxhc3QgZGF0ZSB3aGljaCBjb250YWlucyBjdW11bGF0aXZlIHZhbHVlc1xuICAgICAgICAgICAgaWYgKGNvbXBhcmVQZXJEYXRlLmRhdGUuZ2V0VGltZSgpID49IGxhc3REYXRlVGltZSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFjb21wYXJlUGVyRGF0ZS5jb21wYXJlVGltZWxpbmU/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gR2V0IGZpcnN0IHRpbWVsaW5lIGVudHJ5IChjdXJyZW50IHN0ZXApIGZvciBlYWNoIGRhdGVcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDb21wYXJlID0gY29tcGFyZVBlckRhdGUuY29tcGFyZVRpbWVsaW5lWzBdO1xuICAgICAgICAgICAgaWYgKCFjdXJyZW50Q29tcGFyZT8ucXVhbGl0eVBvaW50cz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHFwIG9mIGN1cnJlbnRDb21wYXJlLnF1YWxpdHlQb2ludHMpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGRhdGU6IGNvbXBhcmVQZXJEYXRlLmRhdGUsXG4gICAgICAgICAgICAgICAgICAgIGdhdWdlTmFtZTogcXAuZ2F1Z2VMYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgZ2F1Z2VWYWx1ZTogcXAuZ2V0R2F1Z2VWYWx1ZSgpLFxuICAgICAgICAgICAgICAgICAgICBwaXhlbFZhbHVlOiBxcC5nZXRSYWluVmFsdWUoKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQuc29ydCgoYSwgYikgPT4gYS5kYXRlLmdldFRpbWUoKSAtIGIuZGF0ZS5nZXRUaW1lKCkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhc3luYyBidWlsZENvbXBhcmVzVGltZWxpbmUoXG4gICAgICAgIHRhcmdldHNPcmRlcmVkOiBJQ29tcGFyZVRhcmdldFtdLFxuICAgICAgICB3aXRoQ29tcGFyZUR1cGxpY2F0ZTogYm9vbGVhblxuICAgICk6IFByb21pc2U8SUNvbXBhcmVzPiB7XG4gICAgICAgIGNvbnN0IGNvbXBhcmVEYXRlcyA9IHRhcmdldHNPcmRlcmVkLm1hcCgodCkgPT4gdC5kYXRlKTtcblxuICAgICAgICBjb25zdCBxdWFsaXRpZXM6IFJhaW5Db21wdXRhdGlvblF1YWxpdHlbXSA9IGNvbXBhcmVEYXRlc1xuICAgICAgICAgICAgLmZpbHRlcigoZCkgPT4gISFkKVxuICAgICAgICAgICAgLm1hcCgoZCkgPT4gdGhpcy5nZXRSYWluQ29tcHV0YXRpb25RdWFsaXR5KGQpKVxuICAgICAgICAgICAgLmZpbHRlcigocmNxKSA9PiAhIXJjcSk7XG5cbiAgICAgICAgdGhpcy5jb21wYXJlRGF0ZXMgPSBjb21wYXJlRGF0ZXM7IC8vIGNvbXBhcmVEYXRlcy5zbGljZSgxLCAtMSk7XG5cbiAgICAgICAgdGhpcy5idWlsZENvbXBhcmVzID0gU3BlZWRNYXRyaXhDb250YWluZXIuQnVpbGRDb21wYXJlcyhxdWFsaXRpZXMsICF3aXRoQ29tcGFyZUR1cGxpY2F0ZSk7XG4gICAgICAgIHJldHVybiB0aGlzLmJ1aWxkQ29tcGFyZXM7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldENvbXBhcmVQZXJEYXRlKGRhdGU6IERhdGUpOiBJQ29tcGFyZVBlckRhdGUge1xuICAgICAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuYnVpbGRDb21wYXJlcy5jb21wYXJlc1BlckRhdGUuZmlsdGVyKFxuICAgICAgICAgICAgKGMpID0+IGMuZGF0ZS5nZXRUaW1lKCkgPT09IGRhdGUuZ2V0VGltZSgpXG4gICAgICAgICk7XG4gICAgICAgIGlmIChleGlzdGluZy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBleGlzdGluZ1swXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0Q3VycmVudFF1YWxpdHlQb2ludHMoY29tcGFyZUluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy51aUNvbXBhcmVzLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgICAgY29tcGFyZUluZGV4IDwgMCB8fFxuICAgICAgICAgICAgdGhpcy5jb21wYXJlTmFtZXMubGVuZ3RoIDwgY29tcGFyZUluZGV4XG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudWlDb21wYXJlc1tjb21wYXJlSW5kZXhdLmNvbXBhcmVQb2ludHNIaXN0b3J5O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBjbGVhbkNvbXBhcmVRdWFsaXR5KGRldGFpbHM/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5jb21wYXJlVmVyc2lvbiA9IGRldGFpbHM7XG4gICAgICAgIHRoaXMuY29tcGFyZU5hbWVzID0gW107XG4gICAgICAgIHRoaXMudWlDb21wYXJlcyA9IFtdO1xuICAgICAgICB0aGlzLmNvbXBhcmVTcGVlZE1hdHJpeCA9IFtdO1xuICAgICAgICB0aGlzLmNvbXBhcmVUcnVzdGVkSW5kaWNhdG9yID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIHRoaXMuY3VycmVudFF1YWxpdHlEb25lRGF0ZSA9IG5ldyBEYXRlKC0xKTtcbiAgICAgICAgdGhpcy5jdXJyZW50UXVhbGl0eUxhdW5jaGVkQnkgPSAnJztcbiAgICAgICAgdGhpcy5jdXJyZW50UXVhbGl0eVRpbWVTcGVudEluTXMgPSAtMTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXN5bmMgZmV0Y2hSYWluQ29tcHV0YXRpb25RdWFsaXRpZXMoXG4gICAgICAgIHRhcmdldHNPcmRlcmVkOiBJQ29tcGFyZVRhcmdldFtdLFxuICAgICAgICBjdW11bGF0aXZlSG91cnM6IG51bWJlciA9IDBcbiAgICApIHtcbiAgICAgICAgLy8gRm9yIE4taG91ciBjdW11bGF0aXZlLCBvbmx5IGZldGNoIG9uY2UgZm9yIHRoZSBsYXN0IHRhcmdldCAoZW5kIG9mIHBlcmlvZClcbiAgICAgICAgY29uc3QgdGFyZ2V0c1RvRmV0Y2ggPVxuICAgICAgICAgICAgY3VtdWxhdGl2ZUhvdXJzID4gMCA/IFt0YXJnZXRzT3JkZXJlZFt0YXJnZXRzT3JkZXJlZC5sZW5ndGggLSAxXV0gOiB0YXJnZXRzT3JkZXJlZDtcblxuICAgICAgICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzVG9GZXRjaCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnJhaW5Db21wdXRhdGlvblF1YWxpdGllc1BlckRhdGVbdGFyZ2V0LmRhdGUudG9JU09TdHJpbmcoKV0pIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmFpbkNvbXB1dGF0aW9uUXVhbGl0eTogUmFpbkNvbXB1dGF0aW9uUXVhbGl0eTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoY3VtdWxhdGl2ZUhvdXJzID4gMCAmJiB0YXJnZXQucmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZUlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBOLWhvdXIgY3VtdWxhdGl2ZTogZmV0Y2ggYWdncmVnYXRlZCBxdWFsaXR5IGZvciB0aGUgd2hvbGUgcGVyaW9kXG4gICAgICAgICAgICAgICAgICAgICAgICByYWluQ29tcHV0YXRpb25RdWFsaXR5ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnByb2ZpbGVTZXJ2aWNlLmdldFJhaW5DdW11bGF0aXZlQ3VtdWxhdGl2ZXNDb21wYXJlQnlEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJhaW5Ob2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQucmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQuZGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VtdWxhdGl2ZUhvdXJzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQucmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZUlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyA1LW1pbiBncmFudWxhcjogZmV0Y2ggaW5kaXZpZHVhbCBxdWFsaXR5XG4gICAgICAgICAgICAgICAgICAgICAgICByYWluQ29tcHV0YXRpb25RdWFsaXR5ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnByb2ZpbGVTZXJ2aWNlLmdldFJhaW5DdW11bGF0aXZlQ29tcGFyZUJ5RGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yYWluTm9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnJhaW5Db21wdXRhdGlvbkN1bXVsYXRpdmVJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmRhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJhaW5Db21wdXRhdGlvblF1YWxpdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpc0NvbnNpc3RlbnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0cmljZXMgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaW5Db21wdXRhdGlvblF1YWxpdHkucXVhbGl0eVNwZWVkTWF0cml4Q29udGFpbmVyLmdldE1hdHJpY2VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG1hdHJpeCBvZiBtYXRyaWNlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWF0cml4LmlzQ29uc2lzdGVudCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQ29uc2lzdGVudCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0NvbnNpc3RlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBPbmUgb2YgcmFpbkNvbXB1dGF0aW9uUXVhbGl0eSBtYXRyaWNlcyBpcyBub3QgY29uc2lzdGVudCBmb3IgJHt0YXJnZXQuZGF0ZS50b0lTT1N0cmluZygpfWBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJhaW5Db21wdXRhdGlvblF1YWxpdGllc1BlckRhdGVbdGFyZ2V0LmRhdGUudG9JU09TdHJpbmcoKV0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaW5Db21wdXRhdGlvblF1YWxpdHk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0UmFpbkNvbXB1dGF0aW9uUXVhbGl0eShkYXRlOiBEYXRlKTogUmFpbkNvbXB1dGF0aW9uUXVhbGl0eSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJhaW5Db21wdXRhdGlvblF1YWxpdGllc1BlckRhdGVbZGF0ZS50b0lTT1N0cmluZygpXTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgc2VsZWN0R2F1Z2VJbkNvbXBhcmUoKSB7XG4gICAgICAgIGNvbnN0IGdsb2JhbENvbXBhcmVQb2ludHMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZ2xvYmFsQ29tcGFyZVBvaW50cykpO1xuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgZ2xvYmFsQ29tcGFyZVBvaW50cykge1xuICAgICAgICAgICAgaWYgKHAuaWQgPT09IHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzPy5nYXVnZUlkKSB7XG4gICAgICAgICAgICAgICAgcC5yID0gMTA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHAuciA9IDI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5nbG9iYWxDb21wYXJlUG9pbnRzID0gZ2xvYmFsQ29tcGFyZVBvaW50cztcblxuICAgICAgICBmb3IgKGNvbnN0IGNvbXBhcmUgb2YgdGhpcy51aUNvbXBhcmVzKSB7XG4gICAgICAgICAgICBjb25zdCBjb21wYXJlUG9pbnRzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjb21wYXJlLmNvbXBhcmVQb2ludHMpKTtcbiAgICAgICAgICAgIGNvbXBhcmVQb2ludHMuZm9yRWFjaCgocCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChwLmlkID09PSB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cz8uZ2F1Z2VJZCkge1xuICAgICAgICAgICAgICAgICAgICBwLnIgPSAxMDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwLnIgPSAzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29tcGFyZS5jb21wYXJlUG9pbnRzID0gY29tcGFyZVBvaW50cztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCByZXNldFNlbGVjdGVkR2F1Z2VzKCkge1xuICAgICAgICAvLyBjb25zb2xlLmxvZygncmVzZXRTZWxlY3RlZEdhdWdlcyByZXNldCcpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2UgPSBudWxsO1xuICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cyA9IG51bGw7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZXMgPSBbXTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFBpeGVscyA9IFtdO1xuICAgICAgICB0aGlzLnBpeGVsc1NvbHV0aW9ucyA9IFtdO1xuICAgICAgICB0aGlzLnNlbGVjdEdhdWdlSW5Db21wYXJlKCk7XG4gICAgfVxufVxuIl19
337
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcGFyZU1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29yZS9zaGFyZWQvdG9vbHMvQ29tcGFyZU1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNuQyxPQUFPLEVBQ0gsU0FBUyxFQU9ULG9CQUFvQixHQUN2QixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBbUJqQyxNQUFNLE9BQU8sY0FBYztJQTRCdkIsWUFDYyxjQUE4QixFQUNqQyxZQUF3QixHQUFHLEVBQUUsR0FBRSxDQUFDO1FBRDdCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUNqQyxjQUFTLEdBQVQsU0FBUyxDQUF1QjtRQUV2QyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUlELElBQVcsUUFBUTtRQUNmLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBVyxRQUFRLENBQUMsUUFBa0I7UUFDbEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7UUFDMUIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFTSxRQUFRO1FBQ1gsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFFakIsSUFBSSxDQUFDLGFBQWEsR0FBRztZQUNqQixl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QUFDO1FBQzFCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7UUFDbEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDaEMsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtNYXBMYXRMbmd9IGZyb20gJ3JhYWluLXVpJztcbmltcG9ydCB7XG4gICAgR2F1Z2VOb2RlLFxuICAgIElDb21wYXJlUGVyRGF0ZSxcbiAgICBJQ29tcGFyZXMsXG4gICAgUG9zaXRpb25WYWx1ZSxcbiAgICBRdWFsaXR5UG9pbnQsXG4gICAgUmFpbkNvbXB1dGF0aW9uUXVhbGl0eSxcbiAgICBSYWluTm9kZSxcbiAgICBTcGVlZE1hdHJpeENvbnRhaW5lcixcbn0gZnJvbSAncmFhaW4tbW9kZWwnO1xuaW1wb3J0IHtYWVR5cGV9IGZyb20gJy4uL3h5dHlwZSc7XG5pbXBvcnQge1Byb2ZpbGVTZXJ2aWNlfSBmcm9tICcuLi9wcm9maWxlLnNlcnZpY2UnO1xuaW1wb3J0IHtGcmFtZVNldH0gZnJvbSAnLi9GcmFtZVNldCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbXBhcmVUYXJnZXQge1xuICAgIGRhdGU6IERhdGU7XG4gICAgcmFpbkNvbXB1dGF0aW9uSWQ/OiBzdHJpbmc7XG4gICAgcmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZUlkPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElVSUNvbXBhcmUge1xuICAgIGRhdGU6IERhdGU7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGNvbXBhcmVQb2ludHM6IFhZVHlwZVtdO1xuICAgIGNvbXBhcmVQb2ludHNNYXg6IFhZVHlwZTtcbiAgICBjb21wYXJlUG9pbnRzSGlzdG9yeTogUXVhbGl0eVBvaW50W107XG4gICAgcmVtYXJrczogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgQ29tcGFyZU1hbmFnZXIge1xuICAgIHB1YmxpYyBnYXVnZXNJbk1hcDogTWFwTGF0TG5nW107XG4gICAgcHVibGljIGdhdWdlc0luQ29tcGFyZTogTWFwTGF0TG5nW107XG4gICAgcHVibGljIHNlbGVjdGVkR2F1Z2VzOiBNYXBMYXRMbmdbXTtcbiAgICBwdWJsaWMgc2VsZWN0ZWRQaXhlbHM6IE1hcExhdExuZ1tdO1xuICAgIHB1YmxpYyBwaXhlbHNTb2x1dGlvbnM6IE1hcExhdExuZ1tdW107XG4gICAgcHVibGljIHNwZWVkczogTWFwTGF0TG5nW107XG5cbiAgICAvLyBmcm9tIGNvbXBhcmVzVGltZWxpbmVcbiAgICBwdWJsaWMgY29tcGFyZU5hbWVzOiBzdHJpbmdbXTtcbiAgICBwdWJsaWMgdWlDb21wYXJlczogSVVJQ29tcGFyZVtdO1xuICAgIHB1YmxpYyBjb21wYXJlU3BlZWRNYXRyaXg6IFBvc2l0aW9uVmFsdWVbXTtcbiAgICBwdWJsaWMgY29tcGFyZVZlcnNpb246IHN0cmluZztcbiAgICBwdWJsaWMgY29tcGFyZVRydXN0ZWRJbmRpY2F0b3I6IG51bWJlcjtcbiAgICBwdWJsaWMgY29tcGFyZURhdGVzOiBEYXRlW107XG5cbiAgICBwdWJsaWMgY3VycmVudFF1YWxpdHlEb25lRGF0ZTogRGF0ZTtcbiAgICBwdWJsaWMgY3VycmVudFF1YWxpdHlMYXVuY2hlZEJ5OiBzdHJpbmc7XG4gICAgcHVibGljIGN1cnJlbnRRdWFsaXR5VGltZVNwZW50SW5NczogbnVtYmVyO1xuICAgIHB1YmxpYyBnbG9iYWxDb21wYXJlUG9pbnRzOiBYWVR5cGVbXTtcbiAgICBwdWJsaWMgZ2xvYmFsQ29tcGFyZVBvaW50c01heDogWFlUeXBlO1xuICAgIHB1YmxpYyBjb21wYXJlU3BlZWQ6IHthbmdsZUluRGVncmVlczogbnVtYmVyOyBwaXhlbHNQZXJQZXJpb2Q6IG51bWJlcn07XG4gICAgcHJvdGVjdGVkIGJ1aWxkQ29tcGFyZXM6IElDb21wYXJlcztcbiAgICBwcm90ZWN0ZWQgc2VsZWN0ZWRHYXVnZTogUXVhbGl0eVBvaW50O1xuICAgIHByb3RlY3RlZCBzZWxlY3RlZEdhdWdlSW5Qb2ludHM6IFF1YWxpdHlQb2ludDtcbiAgICBwcm90ZWN0ZWQgc2VsZWN0ZWRHYXVnZUluUG9pbnRzRGV0YWlsOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIHJhaW5Db21wdXRhdGlvblF1YWxpdGllc1BlckRhdGU6IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgcHJvZmlsZVNlcnZpY2U6IFByb2ZpbGVTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgb25DaGFuZ2VzOiAoKSA9PiB2b2lkID0gKCkgPT4ge31cbiAgICApIHtcbiAgICAgICAgdGhpcy5jbGVhbkFsbCgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfcmFpbk5vZGU6IFJhaW5Ob2RlO1xuXG4gICAgcHVibGljIGdldCByYWluTm9kZSgpOiBSYWluTm9kZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yYWluTm9kZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHJhaW5Ob2RlKHJhaW5Ob2RlOiBSYWluTm9kZSkge1xuICAgICAgICB0aGlzLl9yYWluTm9kZSA9IHJhaW5Ob2RlO1xuICAgICAgICB0aGlzLmNsZWFuQWxsKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFuQWxsKCkge1xuICAgICAgICB0aGlzLmdhdWdlc0luTWFwID0gW107XG4gICAgICAgIHRoaXMuZ2F1Z2VzSW5Db21wYXJlID0gW107XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZXMgPSBbXTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFBpeGVscyA9IFtdO1xuICAgICAgICB0aGlzLnBpeGVsc1NvbHV0aW9ucyA9IFtdO1xuICAgICAgICB0aGlzLmNvbXBhcmVEYXRlcyA9IFtdO1xuICAgICAgICB0aGlzLnNwZWVkcyA9IFtdO1xuXG4gICAgICAgIHRoaXMuYnVpbGRDb21wYXJlcyA9IHtcbiAgICAgICAgICAgIGNvbXBhcmVzUGVyRGF0ZTogW10sXG4gICAgICAgICAgICBjb21wYXJlQ3VtdWxhdGl2ZTogbnVsbCxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5nbG9iYWxDb21wYXJlUG9pbnRzID0gW107XG4gICAgICAgIHRoaXMuZ2xvYmFsQ29tcGFyZVBvaW50c01heCA9IG5ldyBYWVR5cGUoMCwgMCk7XG4gICAgICAgIHRoaXMucmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzUGVyRGF0ZSA9IHt9O1xuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZSA9IG51bGw7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzID0gbnVsbDtcbiAgICAgICAgdGhpcy5jbGVhbkNvbXBhcmVRdWFsaXR5KCdubyBjb21wYXJlIHlldCcpO1xuICAgIH1cblxuICAgIGFzeW5jIHJlZnJlc2hDb21wYXJlUXVhbGl0eShmcmFtZVNldDogRnJhbWVTZXQsIG9ubHlPbmU6IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3QgY29tcGFyZVBlckRhdGUgPSB0aGlzLmdldENvbXBhcmVQZXJEYXRlKGZyYW1lU2V0LmRhdGUpO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICFjb21wYXJlUGVyRGF0ZSB8fFxuICAgICAgICAgICAgIWNvbXBhcmVQZXJEYXRlLnJhaW5Db21wdXRhdGlvblF1YWxpdHk/LnF1YWxpdHlTcGVlZE1hdHJpeENvbnRhaW5lclxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYW5Db21wYXJlUXVhbGl0eShcbiAgICAgICAgICAgICAgICAnbm8gY3VycmVudCBxdWFsaXR5ICcgKyBPYmplY3Qua2V5cyh0aGlzLnJhaW5Db21wdXRhdGlvblF1YWxpdGllc1BlckRhdGUpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZXMoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvbmx5T25lKSB7XG4gICAgICAgICAgICBjb21wYXJlUGVyRGF0ZS5jb21wYXJlVGltZWxpbmUgPSBjb21wYXJlUGVyRGF0ZS5jb21wYXJlVGltZWxpbmUuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChjKSA9PiBjLmRhdGUuZ2V0VGltZSgpID09PSBmcmFtZVNldC5kYXRlLmdldFRpbWUoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVpQ29tcGFyZXM6IElVSUNvbXBhcmVbXSA9IGNvbXBhcmVQZXJEYXRlLmNvbXBhcmVUaW1lbGluZVxuICAgICAgICAgICAgLm1hcCgoYykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGU6IGMuZGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogYy5uYW1lLFxuICAgICAgICAgICAgICAgICAgICBjb21wYXJlUG9pbnRzOiBjLnF1YWxpdHlQb2ludHMubWFwKFxuICAgICAgICAgICAgICAgICAgICAgICAgKHApID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFhZVHlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC5nZXRHYXVnZVZhbHVlKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAuZ2V0UmFpblZhbHVlKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAuZ2F1Z2VMYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC5nYXVnZUlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBjb21wYXJlUG9pbnRzTWF4OiBuZXcgWFlUeXBlKGMubWF4VmFsdWUgKiAxLjIsIGMubWF4VmFsdWUgKiAxLjIpLFxuICAgICAgICAgICAgICAgICAgICBjb21wYXJlUG9pbnRzSGlzdG9yeTogYy5xdWFsaXR5UG9pbnRzTGVnYWN5LFxuICAgICAgICAgICAgICAgICAgICByZW1hcmtzOiBjLnJlbWFya3MsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5kYXRlPy5nZXRUaW1lKCkgLSBiLmRhdGU/LmdldFRpbWUoKSk7XG5cbiAgICAgICAgdGhpcy5jdXJyZW50UXVhbGl0eURvbmVEYXRlID0gY29tcGFyZVBlckRhdGUucmFpbkNvbXB1dGF0aW9uUXVhbGl0eS5pc0RvbmVEYXRlO1xuICAgICAgICB0aGlzLmN1cnJlbnRRdWFsaXR5VGltZVNwZW50SW5NcyA9IGNvbXBhcmVQZXJEYXRlLnJhaW5Db21wdXRhdGlvblF1YWxpdHkudGltZVNwZW50SW5NcztcbiAgICAgICAgdGhpcy5jdXJyZW50UXVhbGl0eUxhdW5jaGVkQnkgPSBjb21wYXJlUGVyRGF0ZS5yYWluQ29tcHV0YXRpb25RdWFsaXR5LmxhdW5jaGVkQnk7XG4gICAgICAgIHRoaXMuY29tcGFyZVZlcnNpb24gPSBjb21wYXJlUGVyRGF0ZS5yYWluQ29tcHV0YXRpb25RdWFsaXR5LmdldFZlcnNpb24oKTtcblxuICAgICAgICB0aGlzLmNvbXBhcmVTcGVlZCA9XG4gICAgICAgICAgICBjb21wYXJlUGVyRGF0ZS5yYWluQ29tcHV0YXRpb25RdWFsaXR5LnF1YWxpdHlTcGVlZE1hdHJpeENvbnRhaW5lci5nZXRTcGVlZCgpO1xuICAgICAgICB0aGlzLmNvbXBhcmVOYW1lcyA9IHVpQ29tcGFyZXMubWFwKChjKSA9PiBjLm5hbWUpO1xuICAgICAgICB0aGlzLnVpQ29tcGFyZXMgPSB1aUNvbXBhcmVzO1xuXG4gICAgICAgIHRoaXMub25DaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgcmVmcmVzaEdsb2JhbENvbXBhcmVRdWFsaXR5KFxuICAgICAgICB0YXJnZXRzT3JkZXJlZDogSUNvbXBhcmVUYXJnZXRbXSxcbiAgICAgICAgcGVyaW9kOiB7YmVnaW46IERhdGU7IGVuZDogRGF0ZX0sXG4gICAgICAgIHdpdGhDb21wYXJlRHVwbGljYXRlOiBib29sZWFuLFxuICAgICAgICBjdW11bGF0aXZlSG91cnM6IG51bWJlciA9IDBcbiAgICApIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZmV0Y2hSYWluQ29tcHV0YXRpb25RdWFsaXRpZXModGFyZ2V0c09yZGVyZWQsIGN1bXVsYXRpdmVIb3Vycyk7XG5cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYnVpbGRDb21wYXJlc1RpbWVsaW5lKHRhcmdldHNPcmRlcmVkLCBwZXJpb2QsIHdpdGhDb21wYXJlRHVwbGljYXRlKTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLmJ1aWxkQ29tcGFyZXMuY29tcGFyZUN1bXVsYXRpdmUpIHtcbiAgICAgICAgICAgICAgICAvLyB0aHJvdyBFcnJvcignbmVlZHMgY3VtdWxhdGl2ZSBjb21wYXJlJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjb3VudEZvckF2ZXJhZ2UgPSB0YXJnZXRzT3JkZXJlZC5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCBtYXhWYWx1ZSA9IHRoaXMuYnVpbGRDb21wYXJlcy5jb21wYXJlQ3VtdWxhdGl2ZS5tYXhWYWx1ZSAqIDEuMjtcbiAgICAgICAgICAgIHRoaXMuZ2xvYmFsQ29tcGFyZVBvaW50cyA9IHRoaXMuYnVpbGRDb21wYXJlcy5jb21wYXJlQ3VtdWxhdGl2ZS5xdWFsaXR5UG9pbnRzLm1hcChcbiAgICAgICAgICAgICAgICAocXApID0+XG4gICAgICAgICAgICAgICAgICAgIG5ldyBYWVR5cGUocXAuZ2V0R2F1Z2VWYWx1ZSgpLCBxcC5nZXRSYWluVmFsdWUoKSwgMiwgcXAuZ2F1Z2VMYWJlbCwgcXAuZ2F1Z2VJZClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmdsb2JhbENvbXBhcmVQb2ludHNNYXggPSBuZXcgWFlUeXBlKG1heFZhbHVlLCBtYXhWYWx1ZSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIHNldEdhdWdlc0luTWFwKCkge1xuICAgICAgICAvLyBHZXQgYWxsIGdhdWdlIElEcyBsaW5rZWQgdG8gdGhpcyByYWluTm9kZVxuICAgICAgICBjb25zdCByYWluTm9kZUdhdWdlSWRzID0gdGhpcy5yYWluTm9kZS5nZXRMaW5rcyhHYXVnZU5vZGUuVFlQRSkubWFwKChsKSA9PiBsLmdldElkKCkpO1xuXG4gICAgICAgIC8vIEZldGNoIGdhdWdlcyBmcm9tIEFQSSAobWF5IGJlIGZpbHRlcmVkL2xpbWl0ZWQpXG4gICAgICAgIGxldCBnYXVnZXNUb0ZpbHRlciA9IGF3YWl0IHRoaXMucHJvZmlsZVNlcnZpY2UuZ2V0R2F1Z2VzKFxuICAgICAgICAgICAgdGhpcy5yYWluTm9kZT8uaWQsXG4gICAgICAgICAgICB0aGlzLnJhaW5Ob2RlLmdldENlbnRlcigpXG4gICAgICAgICk7XG4gICAgICAgIGdhdWdlc1RvRmlsdGVyID0gZ2F1Z2VzVG9GaWx0ZXJcbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgYS5hcHByb3hEaXN0YW5jZUZyb20odGhpcy5yYWluTm9kZS5nZXRDZW50ZXIoKSkgLVxuICAgICAgICAgICAgICAgICAgICBiLmFwcHJveERpc3RhbmNlRnJvbSh0aGlzLnJhaW5Ob2RlLmdldENlbnRlcigpKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmZpbHRlcigodiwgaW5kZXgpID0+IGluZGV4IDwgMjAwKTtcblxuICAgICAgICAvLyBCdWlsZCBhIG1hcCBvZiBnYXVnZXMgZnJvbSBBUEkgcmVzcG9uc2VcbiAgICAgICAgY29uc3QgZ2F1Z2VzRnJvbUFwaSA9IG5ldyBNYXA8XG4gICAgICAgICAgICBzdHJpbmcsXG4gICAgICAgICAgICB7aWQ6IHN0cmluZzsgbGF0aXR1ZGU6IG51bWJlcjsgbG9uZ2l0dWRlOiBudW1iZXI7IG5hbWU6IHN0cmluZ31cbiAgICAgICAgPigpO1xuICAgICAgICBmb3IgKGNvbnN0IGdhdWdlIG9mIGdhdWdlc1RvRmlsdGVyKSB7XG4gICAgICAgICAgICBnYXVnZXNGcm9tQXBpLnNldChnYXVnZS5pZCwgZ2F1Z2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRmV0Y2ggbWlzc2luZyBnYXVnZXMgaW5kaXZpZHVhbGx5ICh0aG9zZSBsaW5rZWQgYnV0IG5vdCBpbiBBUEkgcmVzcG9uc2UpXG4gICAgICAgIGNvbnN0IG1pc3NpbmdHYXVnZUlkcyA9IHJhaW5Ob2RlR2F1Z2VJZHMuZmlsdGVyKChpZCkgPT4gIWdhdWdlc0Zyb21BcGkuaGFzKGlkKSk7XG4gICAgICAgIGZvciAoY29uc3QgZ2F1Z2VJZCBvZiBtaXNzaW5nR2F1Z2VJZHMpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ2F1Z2UgPSBhd2FpdCB0aGlzLnByb2ZpbGVTZXJ2aWNlLmdldEdhdWdlKGdhdWdlSWQpO1xuICAgICAgICAgICAgICAgIGlmIChnYXVnZSkge1xuICAgICAgICAgICAgICAgICAgICBnYXVnZXNGcm9tQXBpLnNldChnYXVnZS5pZCwgZ2F1Z2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYEZhaWxlZCB0byBmZXRjaCBnYXVnZSAke2dhdWdlSWR9OmAsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRmlsdGVyIHRvIG9ubHkgZ2F1Z2VzIGxpbmtlZCB0byB0aGlzIHJhaW5Ob2RlXG4gICAgICAgIGNvbnN0IHZpc2libGVHYXVnZXMgPSByYWluTm9kZUdhdWdlSWRzXG4gICAgICAgICAgICAubWFwKChpZCkgPT4gZ2F1Z2VzRnJvbUFwaS5nZXQoaWQpKVxuICAgICAgICAgICAgLmZpbHRlcigoZykgPT4gISFnKTtcbiAgICAgICAgY29uc29sZS5sb2coJ3Zpc2libGVHYXVnZXM6JywgdmlzaWJsZUdhdWdlcy5sZW5ndGgsICcvJywgcmFpbk5vZGVHYXVnZUlkcy5sZW5ndGgpO1xuXG4gICAgICAgIGNvbnN0IGdhdWdlc0xhdExuZzogTWFwTGF0TG5nW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBnYXVnZSBvZiB2aXNpYmxlR2F1Z2VzKSB7XG4gICAgICAgICAgICBnYXVnZXNMYXRMbmcucHVzaChcbiAgICAgICAgICAgICAgICBuZXcgTWFwTGF0TG5nKGdhdWdlLmxhdGl0dWRlLCBnYXVnZS5sb25naXR1ZGUsIHVuZGVmaW5lZCwgZ2F1Z2UuaWQsIGdhdWdlLm5hbWUpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ2F1Z2VzSW5NYXAgPSBnYXVnZXNMYXRMbmc7XG4gICAgfVxuXG4gICAgYXN5bmMgc2V0R2F1Z2VzSW5Db21wYXJlKCkge1xuICAgICAgICBjb25zdCBxdWFsaXR5UG9pbnRzOiBRdWFsaXR5UG9pbnRbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGNvbXBhcmUgb2YgdGhpcy51aUNvbXBhcmVzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHF1YWxpdHlQb2ludCBvZiBjb21wYXJlLmNvbXBhcmVQb2ludHNIaXN0b3J5KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWxyZWFkeUFkZGVkID0gcXVhbGl0eVBvaW50cy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgIChwKSA9PiBwPy5nYXVnZUlkID09PSBxdWFsaXR5UG9pbnQuZ2F1Z2VJZFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKGFscmVhZHlBZGRlZC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcXVhbGl0eVBvaW50cy5wdXNoKHF1YWxpdHlQb2ludCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5nYXVnZXNJbkNvbXBhcmUgPSBxdWFsaXR5UG9pbnRzLm1hcCgocCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBNYXBMYXRMbmcoXG4gICAgICAgICAgICAgICAgcC5nYXVnZUNhcnRlc2lhblZhbHVlLmxhdCxcbiAgICAgICAgICAgICAgICBwLmdhdWdlQ2FydGVzaWFuVmFsdWUubG5nLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgcC5nYXVnZUlkLFxuICAgICAgICAgICAgICAgIHAuZ2F1Z2VMYWJlbCArICc+JyArIHAuZ2V0R2F1Z2VWYWx1ZSgpLFxuICAgICAgICAgICAgICAgIHAuZ2V0R2F1Z2VWYWx1ZSgpXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnJlc2V0U2VsZWN0ZWRHYXVnZXMoKTtcbiAgICB9XG5cbiAgICBhc3luYyBzZWxlY3RHYXVnZShnYXVnZUlkOiBzdHJpbmcsIGNvbXBhcmVJbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGlmIChnYXVnZUlkKSB7XG4gICAgICAgICAgICBjb25zdCB4eXMgPSB0aGlzLmdldEN1cnJlbnRRdWFsaXR5UG9pbnRzKGNvbXBhcmVJbmRleCkuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChwKSA9PiBwLmdhdWdlSWQgPT09IGdhdWdlSWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2UgPSB4eXMubGVuZ3RoID09PSAxID8geHlzWzBdIDogbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZSA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRHYXVnZSkge1xuICAgICAgICAgICAgdGhpcy5yZXNldFNlbGVjdGVkR2F1Z2VzKCk7XG4gICAgICAgICAgICBjb25zdCBnYXVnZXNGaWx0ZXJlZCA9IHRoaXMuZ2F1Z2VzSW5NYXAuZmlsdGVyKChnKSA9PiBnLmlkID09PSBnYXVnZUlkKTtcbiAgICAgICAgICAgIGlmIChnYXVnZXNGaWx0ZXJlZC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VzID0gW2dhdWdlc0ZpbHRlcmVkWzBdXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkR2F1Z2VJblBvaW50cyA9IHRoaXMuZ2V0Q3VycmVudFF1YWxpdHlQb2ludHMoY29tcGFyZUluZGV4KS5maWx0ZXIoXG4gICAgICAgICAgICAocCkgPT4gcC5nYXVnZUlkID09PSB0aGlzLnNlbGVjdGVkR2F1Z2UuZ2F1Z2VJZFxuICAgICAgICApO1xuICAgICAgICBsZXQgcGl4ZWxzU29sdXRpb25zOiBNYXBMYXRMbmdbXVtdID0gW107XG5cbiAgICAgICAgaWYgKHNlbGVjdGVkR2F1Z2VJblBvaW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbWFya3MgPSBKU09OLnBhcnNlKHNlbGVjdGVkR2F1Z2VJblBvaW50c1swXS5yZW1hcmspLnNvcnQoXG4gICAgICAgICAgICAgICAgKGEsIGIpID0+IGEuY3JpdGVyaWFBdHRlbXB0ZWRUb0JlTWluaW11bSAtIGIuY3JpdGVyaWFBdHRlbXB0ZWRUb0JlTWluaW11bVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlbWFya3MpO1xuICAgICAgICAgICAgcGl4ZWxzU29sdXRpb25zID0gcmVtYXJrcy5tYXAoKHJlbWFyaykgPT5cbiAgICAgICAgICAgICAgICByZW1hcmsuc29sdXRpb25Gb3JHYXVnZS5waXhlbHMubWFwKFxuICAgICAgICAgICAgICAgICAgICAocCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBNYXBMYXRMbmcoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcC55ICsgMC4wMDUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcC54ICsgMC4wMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnICsgIXJlbWFyay5ub3RQb3NzaWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJyArICFyZW1hcmsubm90UG9zc2libGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IHRpbWVEZWx0YUluTWludXRlcyA9IHNlbGVjdGVkR2F1Z2VJblBvaW50c1swXS5nZXRUaW1lRGVsdGFJbk1pbnV0ZXMoKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzRGV0YWlsID1cbiAgICAgICAgICAgICAgICAnJyArXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRHYXVnZUluUG9pbnRzWzBdLmdhdWdlTGFiZWwgK1xuICAgICAgICAgICAgICAgICcgPiAnICtcbiAgICAgICAgICAgICAgICBNYXRoLnJvdW5kKHNlbGVjdGVkR2F1Z2VJblBvaW50c1swXS5nZXRHYXVnZVZhbHVlKCkgKiAxMDApIC8gMTAwICtcbiAgICAgICAgICAgICAgICAnIC8gJyArXG4gICAgICAgICAgICAgICAgTWF0aC5yb3VuZChzZWxlY3RlZEdhdWdlSW5Qb2ludHNbMF0uZ2V0UmFpblZhbHVlKCkgKiAxMDApIC8gMTAwICtcbiAgICAgICAgICAgICAgICAnIGRUPScgK1xuICAgICAgICAgICAgICAgIHRpbWVEZWx0YUluTWludXRlcztcblxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMgPSBzZWxlY3RlZEdhdWdlSW5Qb2ludHNbMF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cyA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VzID0gW107XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUGl4ZWxzID0gW107XG4gICAgICAgICAgICB0aGlzLnBpeGVsc1NvbHV0aW9ucyA9IFtdO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlcyA9IFtcbiAgICAgICAgICAgIG5ldyBNYXBMYXRMbmcoXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMuZ2F1Z2VDYXJ0ZXNpYW5WYWx1ZS5sYXQsXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMuZ2F1Z2VDYXJ0ZXNpYW5WYWx1ZS5sbmcsXG4gICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzLmdhdWdlSWQsXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMuZ2F1Z2VMYWJlbCArXG4gICAgICAgICAgICAgICAgICAgICc+JyArXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzLmdhdWdlQ2FydGVzaWFuVmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMuZ2F1Z2VDYXJ0ZXNpYW5WYWx1ZS52YWx1ZVxuICAgICAgICAgICAgKSxcbiAgICAgICAgXTtcblxuICAgICAgICB0aGlzLnNlbGVjdEdhdWdlSW5Db21wYXJlKCk7XG5cbiAgICAgICAgY29uc3QgcGl4ZWxzOiBNYXBMYXRMbmdbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHJhaW5DYXJ0ZXNpYW5WYWx1ZSBvZiB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5yYWluQ2FydGVzaWFuVmFsdWVzKSB7XG4gICAgICAgICAgICBwaXhlbHMucHVzaChcbiAgICAgICAgICAgICAgICBuZXcgTWFwTGF0TG5nKHJhaW5DYXJ0ZXNpYW5WYWx1ZS5sYXQgKyAwLjAwNSwgcmFpbkNhcnRlc2lhblZhbHVlLmxuZyArIDAuMDEpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQaXhlbHMgPSBwaXhlbHM7XG5cbiAgICAgICAgdGhpcy5waXhlbHNTb2x1dGlvbnMgPSBwaXhlbHNTb2x1dGlvbnM7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJucyBhbGwgZ3JhbnVsYXIgcXVhbGl0eSBwb2ludHMgYWNyb3NzIGFsbCBkYXRlcyBpbiB0aGUgcGVyaW9kIChleGNsdWRlcyBjdW11bGF0aXZlIGVuZCBkYXRlKVxuICAgIGdldEFsbEdyYW51bGFyQ29tcGFyZVBvaW50cygpOiB7XG4gICAgICAgIGRhdGU6IERhdGU7XG4gICAgICAgIGdhdWdlTmFtZTogc3RyaW5nO1xuICAgICAgICBnYXVnZVZhbHVlOiBudW1iZXI7XG4gICAgICAgIHBpeGVsVmFsdWU6IG51bWJlcjtcbiAgICB9W10ge1xuICAgICAgICBjb25zdCByZXN1bHQ6IHtkYXRlOiBEYXRlOyBnYXVnZU5hbWU6IHN0cmluZzsgZ2F1Z2VWYWx1ZTogbnVtYmVyOyBwaXhlbFZhbHVlOiBudW1iZXJ9W10gPVxuICAgICAgICAgICAgW107XG5cbiAgICAgICAgaWYgKCF0aGlzLmJ1aWxkQ29tcGFyZXM/LmNvbXBhcmVzUGVyRGF0ZT8ubGVuZ3RoIHx8ICF0aGlzLmNvbXBhcmVEYXRlcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRmluZCB0aGUgbGFzdCBkYXRlIChjdW11bGF0aXZlIGVuZCBkYXRlKSB0byBleGNsdWRlIGl0XG4gICAgICAgIGNvbnN0IGxhc3REYXRlVGltZSA9IE1hdGgubWF4KC4uLnRoaXMuY29tcGFyZURhdGVzLm1hcCgoZCkgPT4gZC5nZXRUaW1lKCkpKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGNvbXBhcmVQZXJEYXRlIG9mIHRoaXMuYnVpbGRDb21wYXJlcy5jb21wYXJlc1BlckRhdGUpIHtcbiAgICAgICAgICAgIC8vIFNraXAgdGhlIGxhc3QgZGF0ZSB3aGljaCBjb250YWlucyBjdW11bGF0aXZlIHZhbHVlc1xuICAgICAgICAgICAgaWYgKGNvbXBhcmVQZXJEYXRlLmRhdGUuZ2V0VGltZSgpID49IGxhc3REYXRlVGltZSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFjb21wYXJlUGVyRGF0ZS5jb21wYXJlVGltZWxpbmU/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gR2V0IGZpcnN0IHRpbWVsaW5lIGVudHJ5IChjdXJyZW50IHN0ZXApIGZvciBlYWNoIGRhdGVcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDb21wYXJlID0gY29tcGFyZVBlckRhdGUuY29tcGFyZVRpbWVsaW5lWzBdO1xuICAgICAgICAgICAgaWYgKCFjdXJyZW50Q29tcGFyZT8ucXVhbGl0eVBvaW50cz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHFwIG9mIGN1cnJlbnRDb21wYXJlLnF1YWxpdHlQb2ludHMpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGRhdGU6IGNvbXBhcmVQZXJEYXRlLmRhdGUsXG4gICAgICAgICAgICAgICAgICAgIGdhdWdlTmFtZTogcXAuZ2F1Z2VMYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgZ2F1Z2VWYWx1ZTogcXAuZ2V0R2F1Z2VWYWx1ZSgpLFxuICAgICAgICAgICAgICAgICAgICBwaXhlbFZhbHVlOiBxcC5nZXRSYWluVmFsdWUoKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQuc29ydCgoYSwgYikgPT4gYS5kYXRlLmdldFRpbWUoKSAtIGIuZGF0ZS5nZXRUaW1lKCkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhc3luYyBidWlsZENvbXBhcmVzVGltZWxpbmUoXG4gICAgICAgIHRhcmdldHNPcmRlcmVkOiBJQ29tcGFyZVRhcmdldFtdLFxuICAgICAgICBwZXJpb2Q6IHtiZWdpbjogRGF0ZTsgZW5kOiBEYXRlfSxcbiAgICAgICAgd2l0aENvbXBhcmVEdXBsaWNhdGU6IGJvb2xlYW5cbiAgICApOiBQcm9taXNlPElDb21wYXJlcz4ge1xuICAgICAgICBjb25zdCBjb21wYXJlRGF0ZXMgPSB0YXJnZXRzT3JkZXJlZC5tYXAoKHQpID0+IHQuZGF0ZSk7XG5cbiAgICAgICAgY29uc3QgcXVhbGl0aWVzOiBSYWluQ29tcHV0YXRpb25RdWFsaXR5W10gPSBjb21wYXJlRGF0ZXNcbiAgICAgICAgICAgIC5maWx0ZXIoKGQpID0+ICEhZClcbiAgICAgICAgICAgIC5tYXAoKGQpID0+IHRoaXMuZ2V0UmFpbkNvbXB1dGF0aW9uUXVhbGl0eShkKSlcbiAgICAgICAgICAgIC5maWx0ZXIoKHJjcSkgPT4gISFyY3EpO1xuXG4gICAgICAgIHRoaXMuY29tcGFyZURhdGVzID0gY29tcGFyZURhdGVzPy5sZW5ndGggPiAxID8gY29tcGFyZURhdGVzIDogW3BlcmlvZC5iZWdpbiwgcGVyaW9kLmVuZF07IC8vIGNvbXBhcmVEYXRlcy5zbGljZSgxLCAtMSk7XG5cbiAgICAgICAgdGhpcy5idWlsZENvbXBhcmVzID0gU3BlZWRNYXRyaXhDb250YWluZXIuQnVpbGRDb21wYXJlcyhxdWFsaXRpZXMsICF3aXRoQ29tcGFyZUR1cGxpY2F0ZSk7XG4gICAgICAgIHJldHVybiB0aGlzLmJ1aWxkQ29tcGFyZXM7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldENvbXBhcmVQZXJEYXRlKGRhdGU6IERhdGUpOiBJQ29tcGFyZVBlckRhdGUge1xuICAgICAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuYnVpbGRDb21wYXJlcy5jb21wYXJlc1BlckRhdGUuZmlsdGVyKFxuICAgICAgICAgICAgKGMpID0+IGMuZGF0ZS5nZXRUaW1lKCkgPT09IGRhdGUuZ2V0VGltZSgpXG4gICAgICAgICk7XG4gICAgICAgIGlmIChleGlzdGluZy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBleGlzdGluZ1swXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0Q3VycmVudFF1YWxpdHlQb2ludHMoY29tcGFyZUluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy51aUNvbXBhcmVzLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgICAgY29tcGFyZUluZGV4IDwgMCB8fFxuICAgICAgICAgICAgdGhpcy5jb21wYXJlTmFtZXMubGVuZ3RoIDwgY29tcGFyZUluZGV4XG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudWlDb21wYXJlc1tjb21wYXJlSW5kZXhdLmNvbXBhcmVQb2ludHNIaXN0b3J5O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBjbGVhbkNvbXBhcmVRdWFsaXR5KGRldGFpbHM/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5jb21wYXJlVmVyc2lvbiA9IGRldGFpbHM7XG4gICAgICAgIHRoaXMuY29tcGFyZU5hbWVzID0gW107XG4gICAgICAgIHRoaXMudWlDb21wYXJlcyA9IFtdO1xuICAgICAgICB0aGlzLmNvbXBhcmVTcGVlZE1hdHJpeCA9IFtdO1xuICAgICAgICB0aGlzLmNvbXBhcmVUcnVzdGVkSW5kaWNhdG9yID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIHRoaXMuY3VycmVudFF1YWxpdHlEb25lRGF0ZSA9IG5ldyBEYXRlKC0xKTtcbiAgICAgICAgdGhpcy5jdXJyZW50UXVhbGl0eUxhdW5jaGVkQnkgPSAnJztcbiAgICAgICAgdGhpcy5jdXJyZW50UXVhbGl0eVRpbWVTcGVudEluTXMgPSAtMTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXN5bmMgZmV0Y2hSYWluQ29tcHV0YXRpb25RdWFsaXRpZXMoXG4gICAgICAgIHRhcmdldHNPcmRlcmVkOiBJQ29tcGFyZVRhcmdldFtdLFxuICAgICAgICBjdW11bGF0aXZlSG91cnM6IG51bWJlciA9IDBcbiAgICApIHtcbiAgICAgICAgLy8gRm9yIE4taG91ciBjdW11bGF0aXZlLCBvbmx5IGZldGNoIG9uY2UgZm9yIHRoZSBsYXN0IHRhcmdldCAoZW5kIG9mIHBlcmlvZClcbiAgICAgICAgY29uc3QgdGFyZ2V0c1RvRmV0Y2ggPVxuICAgICAgICAgICAgY3VtdWxhdGl2ZUhvdXJzID4gMCA/IFt0YXJnZXRzT3JkZXJlZFt0YXJnZXRzT3JkZXJlZC5sZW5ndGggLSAxXV0gOiB0YXJnZXRzT3JkZXJlZDtcblxuICAgICAgICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzVG9GZXRjaCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnJhaW5Db21wdXRhdGlvblF1YWxpdGllc1BlckRhdGVbdGFyZ2V0LmRhdGUudG9JU09TdHJpbmcoKV0pIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmFpbkNvbXB1dGF0aW9uUXVhbGl0eTogUmFpbkNvbXB1dGF0aW9uUXVhbGl0eTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoY3VtdWxhdGl2ZUhvdXJzID4gMCAmJiB0YXJnZXQucmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZUlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBOLWhvdXIgY3VtdWxhdGl2ZTogZmV0Y2ggYWdncmVnYXRlZCBxdWFsaXR5IGZvciB0aGUgd2hvbGUgcGVyaW9kXG4gICAgICAgICAgICAgICAgICAgICAgICByYWluQ29tcHV0YXRpb25RdWFsaXR5ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnByb2ZpbGVTZXJ2aWNlLmdldFJhaW5DdW11bGF0aXZlQ3VtdWxhdGl2ZXNDb21wYXJlQnlEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJhaW5Ob2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQucmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQuZGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VtdWxhdGl2ZUhvdXJzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQucmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZUlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyA1LW1pbiBncmFudWxhcjogZmV0Y2ggaW5kaXZpZHVhbCBxdWFsaXR5XG4gICAgICAgICAgICAgICAgICAgICAgICByYWluQ29tcHV0YXRpb25RdWFsaXR5ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnByb2ZpbGVTZXJ2aWNlLmdldFJhaW5DdW11bGF0aXZlQ29tcGFyZUJ5RGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yYWluTm9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnJhaW5Db21wdXRhdGlvbkN1bXVsYXRpdmVJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmRhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJhaW5Db21wdXRhdGlvblF1YWxpdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpc0NvbnNpc3RlbnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0cmljZXMgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaW5Db21wdXRhdGlvblF1YWxpdHkucXVhbGl0eVNwZWVkTWF0cml4Q29udGFpbmVyLmdldE1hdHJpY2VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG1hdHJpeCBvZiBtYXRyaWNlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWF0cml4LmlzQ29uc2lzdGVudCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQ29uc2lzdGVudCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0NvbnNpc3RlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBPbmUgb2YgcmFpbkNvbXB1dGF0aW9uUXVhbGl0eSBtYXRyaWNlcyBpcyBub3QgY29uc2lzdGVudCBmb3IgJHt0YXJnZXQuZGF0ZS50b0lTT1N0cmluZygpfWBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJhaW5Db21wdXRhdGlvblF1YWxpdGllc1BlckRhdGVbdGFyZ2V0LmRhdGUudG9JU09TdHJpbmcoKV0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaW5Db21wdXRhdGlvblF1YWxpdHk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0UmFpbkNvbXB1dGF0aW9uUXVhbGl0eShkYXRlOiBEYXRlKTogUmFpbkNvbXB1dGF0aW9uUXVhbGl0eSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJhaW5Db21wdXRhdGlvblF1YWxpdGllc1BlckRhdGVbZGF0ZS50b0lTT1N0cmluZygpXTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgc2VsZWN0R2F1Z2VJbkNvbXBhcmUoKSB7XG4gICAgICAgIGNvbnN0IGdsb2JhbENvbXBhcmVQb2ludHMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZ2xvYmFsQ29tcGFyZVBvaW50cykpO1xuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgZ2xvYmFsQ29tcGFyZVBvaW50cykge1xuICAgICAgICAgICAgaWYgKHAuaWQgPT09IHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzPy5nYXVnZUlkKSB7XG4gICAgICAgICAgICAgICAgcC5yID0gMTA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHAuciA9IDI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5nbG9iYWxDb21wYXJlUG9pbnRzID0gZ2xvYmFsQ29tcGFyZVBvaW50cztcblxuICAgICAgICBmb3IgKGNvbnN0IGNvbXBhcmUgb2YgdGhpcy51aUNvbXBhcmVzKSB7XG4gICAgICAgICAgICBjb25zdCBjb21wYXJlUG9pbnRzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjb21wYXJlLmNvbXBhcmVQb2ludHMpKTtcbiAgICAgICAgICAgIGNvbXBhcmVQb2ludHMuZm9yRWFjaCgocCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChwLmlkID09PSB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cz8uZ2F1Z2VJZCkge1xuICAgICAgICAgICAgICAgICAgICBwLnIgPSAxMDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwLnIgPSAzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29tcGFyZS5jb21wYXJlUG9pbnRzID0gY29tcGFyZVBvaW50cztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCByZXNldFNlbGVjdGVkR2F1Z2VzKCkge1xuICAgICAgICAvLyBjb25zb2xlLmxvZygncmVzZXRTZWxlY3RlZEdhdWdlcyByZXNldCcpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2UgPSBudWxsO1xuICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cyA9IG51bGw7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZXMgPSBbXTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFBpeGVscyA9IFtdO1xuICAgICAgICB0aGlzLnBpeGVsc1NvbHV0aW9ucyA9IFtdO1xuICAgICAgICB0aGlzLnNlbGVjdEdhdWdlSW5Db21wYXJlKCk7XG4gICAgfVxufVxuIl19
@@ -229,7 +229,7 @@ export class RefreshManager {
229
229
  const cumulativeHours = this.cumulative
230
230
  ? (this.period.end.getTime() - this.period.begin.getTime()) / (60 * 60 * 1000)
231
231
  : 0;
232
- await this.compareManager.refreshGlobalCompareQuality(targets, !this.removeDuplicate, cumulativeHours);
232
+ await this.compareManager.refreshGlobalCompareQuality(targets, this.period, !this.removeDuplicate, cumulativeHours);
233
233
  }
234
234
  catch (e) {
235
235
  console.error('refreshGlobalCompareReport', e);
@@ -311,4 +311,4 @@ export class RefreshManager {
311
311
  return values;
312
312
  }
313
313
  }
314
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVmcmVzaE1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29yZS9zaGFyZWQvdG9vbHMvUmVmcmVzaE1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDL0QsT0FBTyxFQUNILHFCQUFxQixFQUNyQixjQUFjLEVBRWQsU0FBUyxHQUdaLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBQyxpQkFBaUIsRUFBc0IsbUJBQW1CLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFNcEYsTUFBTSxLQUFLLEdBQUcsQ0FBQyxFQUFVLEVBQUUsRUFBRSxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFFaEYsTUFBTSxPQUFPLGNBQWM7SUEwQ3ZCLFlBQ2MsWUFBMEIsRUFDMUIsY0FBOEIsRUFDOUIsY0FBOEI7UUFGOUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQWhDckMsYUFBUSxHQUFXLE9BQU8sQ0FBQztRQUMzQixzQkFBaUIsR0FBVyxFQUFFLENBQUM7UUFDL0IsY0FBUyxHQUFXLEVBQUUsQ0FBQztRQUN2QixlQUFVLEdBQVksS0FBSyxDQUFDO1FBK0IvQixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUMsS0FBSyxFQUFFLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksSUFBSSxFQUFFLEVBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxPQUFPLEVBQVcsQ0FBQztRQUNoRCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksY0FB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QUMsSUFBSSxDQUNsQixxQkFBcUIsQ0FBQyxrQkFBa0IsRUFBRSxFQUMxQyxJQUFJLENBQUMsY0FBYyxDQUN0QixDQUNKLENBQUM7d0JBQ04sQ0FBQyxDQUFDLENBQUM7cUJBQ047Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7YUFDTjtTQUNKO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDUixNQUFNLE9BQU8sR0FBRywrQkFBK0IsTUFBTSxDQUFDLDJCQUEyQixJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqRyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxTQUFTLElBQUksT0FBTyxDQUFDO1NBQzdCO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtGcmFtZVNldH0gZnJvbSAnLi9GcmFtZVNldCc7XG5pbXBvcnQge2Zyb20sIG1lcmdlTWFwLCBTdWJqZWN0LCB0YWtlVW50aWwsIHRpbWVyfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gICAgQ2FydGVzaWFuTWVhc3VyZVZhbHVlLFxuICAgIENhcnRlc2lhblRvb2xzLFxuICAgIElDYXJ0ZXNpYW5NZWFzdXJlVmFsdWUsXG4gICAgUmFkYXJOb2RlLFxuICAgIFJhaW5Db21wdXRhdGlvbk1hcCxcbiAgICBSYWluTm9kZSxcbn0gZnJvbSAncmFhaW4tbW9kZWwnO1xuaW1wb3J0IHtDYXJ0ZXNpYW5NYXBWYWx1ZSwgVGltZWZyYW1lQ29udGFpbmVyLCBUaW1lZnJhbWVDb250YWluZXJzfSBmcm9tICdyYWFpbi11aSc7XG5pbXBvcnQge1JhZGFyU2VydmljZX0gZnJvbSAnLi4vcmFkYXIuc2VydmljZSc7XG5pbXBvcnQge1Byb2ZpbGVTZXJ2aWNlfSBmcm9tICcuLi9wcm9maWxlLnNlcnZpY2UnO1xuaW1wb3J0IHtDb21wYXJlTWFuYWdlciwgSUNvbXBhcmVUYXJnZXR9IGZyb20gJy4vQ29tcGFyZU1hbmFnZXInO1xuaW1wb3J0IHtYWVR5cGV9IGZyb20gJy4uL3h5dHlwZSc7XG5cbmNvbnN0IHNsZWVwID0gKG1zOiBudW1iZXIpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG5cbmV4cG9ydCBjbGFzcyBSZWZyZXNoTWFuYWdlciB7XG4gICAgcHVibGljIHJhaW5Db21wdXRhdGlvbk1hcFZlcnNpb246IHN0cmluZztcbiAgICBwdWJsaWMgcmFpbkNvbXB1dGF0aW9uTWFwRGF0ZTogRGF0ZTtcbiAgICBwdWJsaWMgcmFpbkNvbXB1dGF0aW9uTWFwRG9uZURhdGU6IERhdGU7XG4gICAgcHVibGljIHJhaW5Db21wdXRhdGlvbk1hcExhdW5jaGVkQnk6IHN0cmluZztcbiAgICBwdWJsaWMgcmFpbkNvbXB1dGF0aW9uTWFwVGltZVNwZW50SW5NczogbnVtYmVyO1xuXG4gICAgcHVibGljIHJhaW5Db21wdXRhdGlvbk1hcE9yaWdpbmFsTWluOiBudW1iZXI7XG4gICAgcHVibGljIHJhaW5Db21wdXRhdGlvbk1hcE9yaWdpbmFsTWF4OiBudW1iZXI7XG5cbiAgICBwdWJsaWMgc3VtRm46IChjYXJ0ZXNpYW5NYXBWYWx1ZXM6IENhcnRlc2lhbk1hcFZhbHVlW10pID0+IG51bWJlcjtcbiAgICBwdWJsaWMgc3VtVmFsdWVzOiBDYXJ0ZXNpYW5NYXBWYWx1ZVtdO1xuXG4gICAgcHVibGljIHByb3ZpZGVyOiBzdHJpbmcgPSAnUmFhaW4nO1xuICAgIHB1YmxpYyB0aW1lU3RlcEluTWludXRlczogbnVtYmVyID0gMTA7XG4gICAgcHVibGljIGxhc3RFcnJvcjogc3RyaW5nID0gJyc7XG4gICAgcHVibGljIGN1bXVsYXRpdmU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIHByb3RlY3RlZCBjbG9zZVJlZnJlc2hUaW1lcjogU3ViamVjdDx1bmtub3duPjtcbiAgICBwcm90ZWN0ZWQgY291bnRzUGVyaW9kOiB7XG4gICAgICAgIHBlcmNlbnRJbWFnZXM/OiBYWVR5cGVbXTtcbiAgICAgICAgcXVldWVSdW5uaW5nPzogbnVtYmVyO1xuICAgICAgICBwcm9ncmVzcz86IG51bWJlcjtcbiAgICB9O1xuICAgIHByb3RlY3RlZCB0aW1lZnJhbWVzRnJvbVJhZGFyczogRnJhbWVTZXRbXTtcbiAgICBwcm90ZWN0ZWQgdGltZWZyYW1lc0Zyb21SYWRhcnNFeHRlbmRlZDogRnJhbWVTZXRbXTtcbiAgICBwcm90ZWN0ZWQgdGltZWxpbmVTZWxlY3RlZEZyYW1lU2V0OiBGcmFtZVNldDtcbiAgICBwcm90ZWN0ZWQgdGltZWZyYW1lRGF0ZXM6IERhdGVbXTtcbiAgICBwcm90ZWN0ZWQgY2FydGVzaWFuVG9vbHM6IENhcnRlc2lhblRvb2xzO1xuICAgIHByb3RlY3RlZCByZW1vdmVEdXBsaWNhdGU6IGJvb2xlYW47XG4gICAgcHJvdGVjdGVkIGRhdGFJbnRlcm5hbDogYm9vbGVhbjtcbiAgICBwcm90ZWN0ZWQgb25SZWZyZXNoSW5Qcm9ncmVzczogKFxuICAgICAgICBjb3VudFBlcmlvZHM6IHtcbiAgICAgICAgICAgIHBlcmNlbnRJbWFnZXM/OiBYWVR5cGVbXTtcbiAgICAgICAgICAgIHF1ZXVlUnVubmluZz86IG51bWJlcjtcbiAgICAgICAgICAgIHByb2dyZXNzPzogbnVtYmVyO1xuICAgICAgICB9LFxuICAgICAgICB0aW1lZnJhbWVEYXRlczogRGF0ZVtdXG4gICAgKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAgIHByb3RlY3RlZCBvblJlZnJlc2hEb25lOiAodGltZWZyYW1lRGF0ZXM6IERhdGVbXSkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgICBwcm90ZWN0ZWQgb25GZXRjaERvbmU6ICh0aW1lZnJhbWVDb250YWluZXJzPzogVGltZWZyYW1lQ29udGFpbmVycykgPT4gUHJvbWlzZTx2b2lkPjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgcmFkYXJTZXJ2aWNlOiBSYWRhclNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBwcm9maWxlU2VydmljZTogUHJvZmlsZVNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBjb21wYXJlTWFuYWdlcjogQ29tcGFyZU1hbmFnZXJcbiAgICApIHtcbiAgICAgICAgdGhpcy5fcGVyaW9kID0ge2JlZ2luOiBuZXcgRGF0ZSgpLCBlbmQ6IG5ldyBEYXRlKCl9O1xuICAgICAgICB0aGlzLmNsb3NlUmVmcmVzaFRpbWVyID0gbmV3IFN1YmplY3Q8dW5rbm93bj4oKTtcbiAgICAgICAgdGhpcy5jYXJ0ZXNpYW5Ub29scyA9IG5ldyBDYXJ0ZXNpYW5Ub29scygpO1xuICAgICAgICB0aGlzLmNsZWFuQWxsKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9yYWluTm9kZTogUmFpbk5vZGU7XG5cbiAgICBwdWJsaWMgZ2V0IHJhaW5Ob2RlKCk6IFJhaW5Ob2RlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JhaW5Ob2RlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgcmFpbk5vZGUocmFpbk5vZGU6IFJhaW5Ob2RlKSB7XG4gICAgICAgIHRoaXMuX3JhaW5Ob2RlID0gcmFpbk5vZGU7XG4gICAgICAgIHRoaXMuY2xlYW5BbGwoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX3BlcmlvZDoge2JlZ2luOiBEYXRlOyBlbmQ6IERhdGV9O1xuXG4gICAgZ2V0IHBlcmlvZCgpOiB7YmVnaW46IERhdGU7IGVuZDogRGF0ZX0ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGVyaW9kO1xuICAgIH1cblxuICAgIHNldCBwZXJpb2QocGVyaW9kOiB7YmVnaW46IERhdGU7IGVuZDogRGF0ZX0pIHtcbiAgICAgICAgdGhpcy5fcGVyaW9kLmJlZ2luID0gbmV3IERhdGUocGVyaW9kLmJlZ2luKTtcbiAgICAgICAgdGhpcy5fcGVyaW9kLmVuZCA9IG5ldyBEYXRlKHBlcmlvZC5lbmQpO1xuICAgICAgICB0aGlzLnJlZnJlc2hDb3VudHMoKS50aGVuKChpZ25vcmVkKSA9PiB7fSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldE1ldGhvZHMoXG4gICAgICAgIG9uUmVmcmVzaEluUHJvZ3Jlc3M6IChcbiAgICAgICAgICAgIGNvdW50UGVyaW9kczoge1xuICAgICAgICAgICAgICAgIHBlcmNlbnRJbWFnZXM/OiBYWVR5cGVbXTtcbiAgICAgICAgICAgICAgICBxdWV1ZVJ1bm5pbmc/OiBudW1iZXI7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGltZWZyYW1lRGF0ZXM6IERhdGVbXVxuICAgICAgICApID0+IFByb21pc2U8dm9pZD4sXG4gICAgICAgIG9uUmVmcmVzaERvbmU6ICh0aW1lZnJhbWVEYXRlczogRGF0ZVtdKSA9PiBQcm9taXNlPHZvaWQ+LFxuICAgICAgICBvbkZldGNoRG9uZTogKHRpbWVmcmFtZUNvbnRhaW5lcnM/OiBUaW1lZnJhbWVDb250YWluZXJzKSA9PiBQcm9taXNlPHZvaWQ+XG4gICAgKSB7XG4gICAgICAgIHRoaXMub25SZWZyZXNoSW5Qcm9ncmVzcyA9IG9uUmVmcmVzaEluUHJvZ3Jlc3M7XG4gICAgICAgIHRoaXMub25SZWZyZXNoRG9uZSA9IG9uUmVmcmVzaERvbmU7XG4gICAgICAgIHRoaXMub25GZXRjaERvbmUgPSBvbkZldGNoRG9uZTtcbiAgICB9XG5cbiAgICBjbGVhbkFsbCgpIHtcbiAgICAgICAgdGhpcy5sYXN0RXJyb3IgPSAnJztcbiAgICAgICAgdGhpcy5jb3VudHNQZXJpb2QgPSB7cGVyY2VudEltYWdlczogW10sIHF1ZXVlUnVubmluZzogMCwgcHJvZ3Jlc3M6IDB9O1xuICAgICAgICB0aGlzLnRpbWVmcmFtZXNGcm9tUmFkYXJzID0gW107XG4gICAgICAgIHRoaXMudGltZWZyYW1lc0Zyb21SYWRhcnNFeHRlbmRlZCA9IFtdO1xuICAgICAgICB0aGlzLnRpbWVmcmFtZURhdGVzID0gW107XG4gICAgICAgIHRoaXMucmVtb3ZlRHVwbGljYXRlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jbG9zZVJlZnJlc2hUaW1lcj8ubmV4dChudWxsKTtcbiAgICB9XG5cbiAgICBhc3luYyBmZXRjaChcbiAgICAgICAgZGF0ZVNob3duOiBEYXRlLFxuICAgICAgICB3aXRoR2F1Z2VzTWVhc3VyZXM6IGJvb2xlYW4sXG4gICAgICAgIGN1bXVsYXRpdmVIb3VycyA9IDBcbiAgICApOiBQcm9taXNlPEZyYW1lU2V0PiB7XG4gICAgICAgIC8vIHNldCB0aGUgdGFyZ2V0XG4gICAgICAgIGNvbnN0IGN1cnJlbnRzID0gdGhpcy50aW1lZnJhbWVzRnJvbVJhZGFyc0V4dGVuZGVkLmZpbHRlcihcbiAgICAgICAgICAgICh0KSA9PiB0LmRhdGUuZ2V0VGltZSgpID09PSBkYXRlU2hvd24uZ2V0VGltZSgpXG4gICAgICAgICk7XG4gICAgICAgIGlmIChjdXJyZW50cy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGJ1aWxkIGN1cnJlbnQgRnJhbWVzZXRcbiAgICAgICAgY29uc3QgY3VycmVudDogRnJhbWVTZXQgPSBjdXJyZW50c1swXTtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0ge1xuICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgIHdpdGhHYXVnZTogd2l0aEdhdWdlc01lYXN1cmVzLFxuICAgICAgICAgICAgY3VtdWxhdGl2ZUhvdXJzOiBjdW11bGF0aXZlSG91cnMsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgdGltZWZyYW1lQ29udGFpbmVycyA9IGF3YWl0IHRoaXMucmVmcmVzaE1hcFRpbWVmcmFtZUNvbnRhaW5lcnModGFyZ2V0KTtcblxuICAgICAgICB0aGlzLm9uRmV0Y2hEb25lKHRpbWVmcmFtZUNvbnRhaW5lcnMpXG4gICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLnJlZnJlc2hDb21wYXJlUXVhbGl0eShjdXJyZW50KSlcbiAgICAgICAgICAgIC50aGVuKChpZ25vcmVkKSA9PiB7fSk7IC8vIE5PIFN5bmNcblxuICAgICAgICB0aGlzLnRpbWVsaW5lU2VsZWN0ZWRGcmFtZVNldCA9IGN1cnJlbnQ7XG4gICAgfVxuXG4gICAgZ2V0VGltZWxpbmVGcmFtZVNldCgpOiBGcmFtZVNldFtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGltZWZyYW1lc0Zyb21SYWRhcnM7XG4gICAgfVxuXG4gICAgZ2V0VGltZWxpbmVTZWxlY3RlZEZyYW1lU2V0KCk6IEZyYW1lU2V0IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGltZWxpbmVTZWxlY3RlZEZyYW1lU2V0O1xuICAgIH1cblxuICAgIGFzeW5jIHJlZnJlc2gobGF1bmNoUXVhbGl0eUFmdGVyOiBib29sZWFuLCBkYXRhSW50ZXJuYWw6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5sYXN0RXJyb3IgPSAnJztcblxuICAgICAgICB0aGlzLmNoZWNrUGVyaW9kKCk7XG5cbiAgICAgICAgdGhpcy5kYXRhSW50ZXJuYWwgPSBkYXRhSW50ZXJuYWw7XG5cbiAgICAgICAgY29uc3QgYXN5bmNEb25lID0gKGVycm9yPzogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiByZWZyZXNoJywgZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jbG9zZVJlZnJlc2hUaW1lci5uZXh0KG51bGwpO1xuICAgICAgICAgICAgdGhpcy5vblJlZnJlc2hEb25lKHRoaXMudGltZWZyYW1lRGF0ZXMpLnRoZW4oKF9pZ25vcmVkKSA9PiB7fSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgYXN5bmNSZWZyZXNoID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vblJlZnJlc2hJblByb2dyZXNzKGF3YWl0IHRoaXMucmVmcmVzaENvdW50cygpLCB0aGlzLnRpbWVmcmFtZURhdGVzKS50aGVuKFxuICAgICAgICAgICAgICAgIChfaWdub3JlZCkgPT4ge31cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCBkb25lID0gYXdhaXQgdGhpcy5yZWZyZXNoUGVyaW9kSW5zaWRlUG9sbGluZygpO1xuICAgICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgICAgICBhc3luY0RvbmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB0aW1lcigxMDAwLCAxMDAwMCkgLy8gV2FpdCAxcywgdGhlbiBldmVyeSAxMHNcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1lcmdlTWFwKCgpID0+IGZyb20oYXN5bmNSZWZyZXNoKCkpKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5jbG9zZVJlZnJlc2hUaW1lcilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IGFzeW5jRG9uZShKU09OLnN0cmluZ2lmeShlcnJvcikpLFxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2V0UmVtb3ZlRHVwbGljYXRlKGI6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5yZW1vdmVEdXBsaWNhdGUgPSBiO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZXRSZXBvcnRQZXJpb2QoZGF0ZTogRGF0ZSkge1xuICAgICAgICBsZXQgdmFsdWVzOiBDYXJ0ZXNpYW5NYXBWYWx1ZVtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgZnJhbWVTZXQgb2YgdGhpcy50aW1lZnJhbWVzRnJvbVJhZGFycykge1xuICAgICAgICAgICAgaWYgKGZyYW1lU2V0LmRhdGUuZ2V0VGltZSgpICE9PSBkYXRlLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFsdWVzID0gdmFsdWVzLmNvbmNhdChhd2FpdCB0aGlzLmdldFZhbHVlcyhmcmFtZVNldCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdW1GbiA9IChjYXJ0ZXNpYW5NYXBWYWx1ZXM6IENhcnRlc2lhbk1hcFZhbHVlW10pID0+IHtcbiAgICAgICAgICAgIHJldHVybiBjYXJ0ZXNpYW5NYXBWYWx1ZXMucmVkdWNlKChwLCB2KSA9PiBwICsgdi52YWx1ZSwgMCk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuc3VtVmFsdWVzID0gdmFsdWVzO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBjaGVja1BlcmlvZCgpIHtcbiAgICAgICAgaWYgKHRoaXMucGVyaW9kLmJlZ2luLmdldFRpbWUoKSA9PT0gdGhpcy5wZXJpb2QuZW5kLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9ICduZWVkIGEgcGVyaW9kJztcbiAgICAgICAgICAgIHRoaXMubGFzdEVycm9yICs9IG1lc3NhZ2U7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXN5bmMgcmVmcmVzaENvdW50cygpIHtcbiAgICAgICAgaWYgKCF0aGlzLnJhaW5Ob2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb3VudHNQZXJpb2Q7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb3VudHMgPSBhd2FpdCB0aGlzLnByb2ZpbGVTZXJ2aWNlLmdldENvdW50cyh0aGlzLnJhaW5Ob2RlLmlkLCB7XG4gICAgICAgICAgICByYW5nZTogJ2RheScsXG4gICAgICAgICAgICBwZXJpb2RCZWdpbjogdGhpcy5fcGVyaW9kLmJlZ2luLFxuICAgICAgICB9KTtcblxuICAgICAgICBsZXQgcHJvZ3Jlc3MgPSAwO1xuXG4gICAgICAgIC8vIFZlcmlmeSBwcm9ncmVzcyBvbmx5IGZvciBTaW1wbGVab25lXG4gICAgICAgIGlmICh0aGlzLnJhaW5Ob2RlLmdldExpbmtzKFJhZGFyTm9kZS5UWVBFKS5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgcHJvZ3Jlc3MgPSBhd2FpdCB0aGlzLnByb2ZpbGVTZXJ2aWNlLmdldFJhaW5Qcm9ncmVzcyh0aGlzLnJhaW5Ob2RlLmlkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY291bnRzUGVyaW9kID0ge1xuICAgICAgICAgICAgLi4uY291bnRzLFxuICAgICAgICAgICAgcHJvZ3Jlc3MsXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuY291bnRzUGVyaW9kO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRSYWluQ29tcHV0YXRpb25RdWFsaXR5VGFyZ2V0KGZyYW1lc2V0OiBGcmFtZVNldCk6IHN0cmluZyB7XG4gICAgICAgIGlmIChmcmFtZXNldC5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXMubGVuZ3RoIDw9IDApIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZyYW1lc2V0LnJhaW5Db21wdXRhdGlvblF1YWxpdGllc1swXS5pZDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXN5bmMgcmVmcmVzaFBlcmlvZEluc2lkZVBvbGxpbmcoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBkb25lID0gYXdhaXQgdGhpcy5yZWZyZXNoQ2hlY2tJZkRvbmUoKTtcblxuICAgICAgICAgICAgLy8gYmVoaW5kIHJlZnJlc2hcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucmVmcmVzaFRpbWVmcmFtZXNGcm9tUmFkYXJzKGRvbmUpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoR2xvYmFsQ29tcGFyZVJlcG9ydChkb25lKTtcblxuICAgICAgICAgICAgcmV0dXJuIGRvbmU7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihlKTtcbiAgICAgICAgICAgIHRoaXMubGFzdEVycm9yICs9IGUubWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIHJlZnJlc2hDaGVja0lmRG9uZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgYXdhaXQgc2xlZXAoMjAwMCk7XG4gICAgICAgIHJldHVybiB0aGlzLmNvdW50c1BlcmlvZC5wcm9ncmVzcyA9PT0gMDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXN5bmMgcmVmcmVzaFRpbWVmcmFtZXNGcm9tUmFkYXJzKGRvbmU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKCFkb25lIHx8ICF0aGlzLnJhaW5Ob2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgYmVnaW5FeHRlbmRlZCA9IG5ldyBEYXRlKHRoaXMucGVyaW9kLmJlZ2luKTtcbiAgICAgICAgICAgIGNvbnN0IGVuZEV4dGVuZGVkID0gbmV3IERhdGUodGhpcy5wZXJpb2QuZW5kKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5jdW11bGF0aXZlKSB7XG4gICAgICAgICAgICAgICAgLy8gT25seSBleHRlbmQgcGVyaW9kIGZvciBncmFudWxhciBtb2RlICh0byBnZXQgbmVpZ2hib3JpbmcgZnJhbWVzKVxuICAgICAgICAgICAgICAgIC8vIEZvciBjdW11bGF0aXZlIG1vZGUsIHVzZSBleGFjdCBwZXJpb2RcbiAgICAgICAgICAgICAgICBiZWdpbkV4dGVuZGVkLnNldE1pbnV0ZXMoYmVnaW5FeHRlbmRlZC5nZXRNaW51dGVzKCkgLSA3KTtcbiAgICAgICAgICAgICAgICBlbmRFeHRlbmRlZC5zZXRNaW51dGVzKGVuZEV4dGVuZGVkLmdldE1pbnV0ZXMoKSArIDcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDYWxjdWxhdGUgd2luZG93SW5NaW51dGVzIGZvciBjdW11bGF0aXZlIG1vZGVcbiAgICAgICAgICAgIGNvbnN0IHdpbmRvd0luTWludXRlcyA9IHRoaXMuY3VtdWxhdGl2ZVxuICAgICAgICAgICAgICAgID8gTWF0aC5yb3VuZChcbiAgICAgICAgICAgICAgICAgICAgICAodGhpcy5wZXJpb2QuZW5kLmdldFRpbWUoKSAtIHRoaXMucGVyaW9kLmJlZ2luLmdldFRpbWUoKSkgLyAoNjAgKiAxMDAwKVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogMDtcblxuICAgICAgICAgICAgdGhpcy5yYWluTm9kZSA9IGF3YWl0IHRoaXMucHJvZmlsZVNlcnZpY2UuZ2V0UmFpblRpbWVmcmFtZShcbiAgICAgICAgICAgICAgICB0aGlzLnJhaW5Ob2RlLmlkLFxuICAgICAgICAgICAgICAgIGJlZ2luRXh0ZW5kZWQsXG4gICAgICAgICAgICAgICAgZW5kRXh0ZW5kZWQsXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhSW50ZXJuYWwsXG4gICAgICAgICAgICAgICAgdGhpcy5wcm92aWRlcixcbiAgICAgICAgICAgICAgICB0aGlzLnRpbWVTdGVwSW5NaW51dGVzLFxuICAgICAgICAgICAgICAgIHdpbmRvd0luTWludXRlc1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgdGhpcy50aW1lZnJhbWVzRnJvbVJhZGFyc0V4dGVuZGVkID0gYXdhaXQgdGhpcy5yYWRhclNlcnZpY2UuZ2V0VGltZWxpbmUodGhpcy5yYWluTm9kZSk7XG4gICAgICAgICAgICB0aGlzLnRpbWVmcmFtZXNGcm9tUmFkYXJzID0gdGhpcy50aW1lZnJhbWVzRnJvbVJhZGFyc0V4dGVuZGVkXG4gICAgICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgKGZyYW1lU2V0KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJpb2QuYmVnaW4uZ2V0VGltZSgpIDw9IGZyYW1lU2V0LmRhdGUuZ2V0VGltZSgpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZVNldC5kYXRlLmdldFRpbWUoKSA8PSB0aGlzLnBlcmlvZC5lbmQuZ2V0VGltZSgpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmRhdGUuZ2V0VGltZSgpIC0gYi5kYXRlLmdldFRpbWUoKSk7XG5cbiAgICAgICAgICAgIHRoaXMudGltZWZyYW1lRGF0ZXMgPSB0aGlzLnRpbWVmcmFtZXNGcm9tUmFkYXJzLm1hcCgoZnJhbWVTZXQpID0+IGZyYW1lU2V0LmRhdGUpO1xuXG4gICAgICAgICAgICAvLyBDb21wdXRlIGFsbCBleHBlY3RlZCBkYXRlc1xuICAgICAgICAgICAgLy8gRm9yIGN1bXVsYXRpdmUgbW9kZTogb25seSAxIGV4cGVjdGVkIGRhdGUgKHRoZSBwZXJpb2QgZW5kKVxuICAgICAgICAgICAgLy8gRm9yIGdyYW51bGFyIG1vZGU6IGFsbCBkYXRlcyBmcm9tIHBlcmlvZC5iZWdpbiB0byBwZXJpb2QuZW5kIHdpdGggdGltZVN0ZXBJbk1pbnV0ZXNcbiAgICAgICAgICAgIGNvbnN0IGFsbEV4cGVjdGVkRGF0ZXM6IERhdGVbXSA9IFtdO1xuICAgICAgICAgICAgaWYgKHRoaXMuY3VtdWxhdGl2ZSkge1xuICAgICAgICAgICAgICAgIC8vIEluIGN1bXVsYXRpdmUgbW9kZSwgd2UgZXhwZWN0IG9ubHkgT05FIHRpbWVmcmFtZSAodGhlIGN1bXVsYXRpdmUpXG4gICAgICAgICAgICAgICAgYWxsRXhwZWN0ZWREYXRlcy5wdXNoKG5ldyBEYXRlKHRoaXMucGVyaW9kLmVuZCkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50RGF0ZSA9IG5ldyBEYXRlKHRoaXMucGVyaW9kLmJlZ2luKTtcbiAgICAgICAgICAgICAgICB3aGlsZSAoY3VycmVudERhdGUuZ2V0VGltZSgpIDw9IHRoaXMucGVyaW9kLmVuZC5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYWxsRXhwZWN0ZWREYXRlcy5wdXNoKG5ldyBEYXRlKGN1cnJlbnREYXRlKSk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnREYXRlLnNldE1pbnV0ZXMoY3VycmVudERhdGUuZ2V0TWludXRlcygpICsgdGhpcy50aW1lU3RlcEluTWludXRlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDaGVjayBpZiBhbGwgZXhwZWN0ZWQgZGF0ZXMgYXJlIHByZXNlbnQgaW4gdGltZWZyYW1lRGF0ZXNcbiAgICAgICAgICAgIGNvbnN0IHRpbWVmcmFtZURhdGVUaW1lcyA9IG5ldyBTZXQodGhpcy50aW1lZnJhbWVEYXRlcy5tYXAoKGQpID0+IGQuZ2V0VGltZSgpKSk7XG4gICAgICAgICAgICBjb25zdCBtaXNzaW5nRGF0ZXMgPSBhbGxFeHBlY3RlZERhdGVzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAoZXhwZWN0ZWREYXRlKSA9PiAhdGltZWZyYW1lRGF0ZVRpbWVzLmhhcyhleHBlY3RlZERhdGUuZ2V0VGltZSgpKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKG1pc3NpbmdEYXRlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9XG4gICAgICAgICAgICAgICAgICAgIGBNaXNzaW5nICR7bWlzc2luZ0RhdGVzLmxlbmd0aH0gdGltZWZyYW1lKHMpIG91dCBvZiAke2FsbEV4cGVjdGVkRGF0ZXMubGVuZ3RofSBleHBlY3RlZDogYCArXG4gICAgICAgICAgICAgICAgICAgIG1pc3NpbmdEYXRlcy5tYXAoKGQpID0+IGQudG9JU09TdHJpbmcoKSkuam9pbignLCAnKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4obWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0RXJyb3IgKz0gbWVzc2FnZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGltZWZyYW1lc0Zyb21SYWRhcnM7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ3JlZnJlc2hUaW1lZnJhbWVzRnJvbVJhZGFycycsIGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhc3luYyByZWZyZXNoR2xvYmFsQ29tcGFyZVJlcG9ydChkb25lOiBib29sZWFuKSB7XG4gICAgICAgIGlmICghZG9uZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldHM6IElDb21wYXJlVGFyZ2V0W10gPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZnJhbWVTZXQgb2YgdGhpcy50aW1lZnJhbWVzRnJvbVJhZGFyc0V4dGVuZGVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShmcmFtZVNldCkpO1xuICAgICAgICAgICAgICAgIHRhcmdldC5kYXRlID0gbmV3IERhdGUodGFyZ2V0LmRhdGUpO1xuICAgICAgICAgICAgICAgIHRhcmdldHMucHVzaCh0YXJnZXQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjdW11bGF0aXZlSG91cnMgPSB0aGlzLmN1bXVsYXRpdmVcbiAgICAgICAgICAgICAgICA/ICh0aGlzLnBlcmlvZC5lbmQuZ2V0VGltZSgpIC0gdGhpcy5wZXJpb2QuYmVnaW4uZ2V0VGltZSgpKSAvICg2MCAqIDYwICogMTAwMClcbiAgICAgICAgICAgICAgICA6IDA7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNvbXBhcmVNYW5hZ2VyLnJlZnJlc2hHbG9iYWxDb21wYXJlUXVhbGl0eShcbiAgICAgICAgICAgICAgICB0YXJnZXRzLFxuICAgICAgICAgICAgICAgICF0aGlzLnJlbW92ZUR1cGxpY2F0ZSxcbiAgICAgICAgICAgICAgICBjdW11bGF0aXZlSG91cnNcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ3JlZnJlc2hHbG9iYWxDb21wYXJlUmVwb3J0JywgZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXN5bmMgcmVmcmVzaE1hcFRpbWVmcmFtZUNvbnRhaW5lcnModGFyZ2V0OiB7XG4gICAgICAgIGRhdGU6IERhdGU7XG4gICAgICAgIHJhaW5Db21wdXRhdGlvbkN1bXVsYXRpdmVJZDogc3RyaW5nO1xuICAgICAgICB3aXRoR2F1Z2U6IGJvb2xlYW47XG4gICAgICAgIGN1bXVsYXRpdmVIb3VyczogbnVtYmVyO1xuICAgIH0pIHtcbiAgICAgICAgaWYgKCF0YXJnZXQ/LnJhaW5Db21wdXRhdGlvbkN1bXVsYXRpdmVJZCkge1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGBQYiB3aXRoIHJlZnJlc2hNYXBUaW1lZnJhbWVDb250YWluZXJzIGluc2lnaHRzICR7dGFyZ2V0Py5kYXRlLnRvSVNPU3RyaW5nKCl9YDtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihtZXNzYWdlKTtcbiAgICAgICAgICAgIHRoaXMubGFzdEVycm9yICs9IG1lc3NhZ2U7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJhaW5Ob2RlID0gdGhpcy5yYWluTm9kZTtcbiAgICAgICAgY29uc3QgY29udGFpbmVyczogVGltZWZyYW1lQ29udGFpbmVyW10gPSBbXTtcbiAgICAgICAgY29uc3QgbmV3Q3JlYXRlZFRpbWVmcmFtZUNvbnRhaW5lcnMgPSBuZXcgVGltZWZyYW1lQ29udGFpbmVycyhjb250YWluZXJzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCByYWluTm9kZUNhcnRlc2lhbk1hcDogUmFpbkNvbXB1dGF0aW9uTWFwO1xuXG4gICAgICAgICAgICBpZiAodGFyZ2V0LmN1bXVsYXRpdmVIb3VycyAmJiB0YXJnZXQucmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZUlkKSB7XG4gICAgICAgICAgICAgICAgLy8gRm9yIE4taG91ciBjdW11bGF0aXZlLCB1c2UgdGhlIGxhc3QgZnJhbWUncyBjdW11bGF0aXZlIChlbmQgb2YgcGVyaW9kKVxuICAgICAgICAgICAgICAgIC8vIFRoZSBjdW11bGF0aXZlIGlzIHByZS1jb21wdXRlZCBieSByYWFpbi1ncm91bmQgd2l0aCB3aW5kb3dJbk1pbnV0ZXM9NjBcbiAgICAgICAgICAgICAgICBjb25zdCBsYXN0RnJhbWUgPVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRpbWVmcmFtZXNGcm9tUmFkYXJzRXh0ZW5kZWRbdGhpcy50aW1lZnJhbWVzRnJvbVJhZGFyc0V4dGVuZGVkLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1bXVsYXRpdmVJZCA9XG4gICAgICAgICAgICAgICAgICAgIGxhc3RGcmFtZT8ucmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZUlkIHx8IHRhcmdldC5yYWluQ29tcHV0YXRpb25DdW11bGF0aXZlSWQ7XG5cbiAgICAgICAgICAgICAgICAvLyBVc2UgZGlyZWN0IGNhcnRlc2lhbi1tYXAgZW5kcG9pbnQgLSBjdW11bGF0aXZlIGRhdGEgZmV0Y2hlZCBmcm9tIFMzXG4gICAgICAgICAgICAgICAgcmFpbk5vZGVDYXJ0ZXNpYW5NYXAgPVxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnByb2ZpbGVTZXJ2aWNlLmdldFJhaW5Db21wdXRhdGlvbkN1bXVsYXRpdmVDYXJ0ZXNpYW5NYXBCeUlkKFxuICAgICAgICAgICAgICAgICAgICAgICAgcmFpbk5vZGUuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBjdW11bGF0aXZlSWRcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmFpbk5vZGVDYXJ0ZXNpYW5NYXAgPVxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnByb2ZpbGVTZXJ2aWNlLmdldFJhaW5Db21wdXRhdGlvbkN1bXVsYXRpdmVDYXJ0ZXNpYW5NYXBCeUlkKFxuICAgICAgICAgICAgICAgICAgICAgICAgcmFpbk5vZGUuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQucmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZUlkXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyYWluTm9kZUNhcnRlc2lhbk1hcCkge1xuICAgICAgICAgICAgICAgIG5ld0NyZWF0ZWRUaW1lZnJhbWVDb250YWluZXJzLmFkZEZyb21SYWluQ29tcHV0YXRpb25NYXAoXG4gICAgICAgICAgICAgICAgICAgIHJhaW5Ob2RlQ2FydGVzaWFuTWFwLFxuICAgICAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnJhaW5Db21wdXRhdGlvbk1hcFZlcnNpb24gPSByYWluTm9kZUNhcnRlc2lhbk1hcC52ZXJzaW9uO1xuICAgICAgICAgICAgICAgIHRoaXMucmFpbkNvbXB1dGF0aW9uTWFwRGF0ZSA9IG5ldyBEYXRlKHJhaW5Ob2RlQ2FydGVzaWFuTWFwLmRhdGUpO1xuICAgICAgICAgICAgICAgIHRoaXMucmFpbkNvbXB1dGF0aW9uTWFwRG9uZURhdGUgPSByYWluTm9kZUNhcnRlc2lhbk1hcC5pc0RvbmVEYXRlO1xuICAgICAgICAgICAgICAgIHRoaXMucmFpbkNvbXB1dGF0aW9uTWFwTGF1bmNoZWRCeSA9IHJhaW5Ob2RlQ2FydGVzaWFuTWFwLmxhdW5jaGVkQnk7XG4gICAgICAgICAgICAgICAgdGhpcy5yYWluQ29tcHV0YXRpb25NYXBUaW1lU3BlbnRJbk1zID0gcmFpbk5vZGVDYXJ0ZXNpYW5NYXAudGltZVNwZW50SW5NcztcblxuICAgICAgICAgICAgICAgIHRoaXMucmFpbkNvbXB1dGF0aW9uTWFwT3JpZ2luYWxNaW4gPSByYWluTm9kZUNhcnRlc2lhbk1hcC5vcmlnaW5hbERCWk1pbjtcbiAgICAgICAgICAgICAgICB0aGlzLnJhaW5Db21wdXRhdGlvbk1hcE9yaWdpbmFsTWF4ID0gcmFpbk5vZGVDYXJ0ZXNpYW5NYXAub3JpZ2luYWxEQlpNYXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgUGIgd2l0aCBjdW11bGF0aXZlcyBmb3IgaWQ6ICR7dGFyZ2V0LnJhaW5Db21wdXRhdGlvbkN1bXVsYXRpdmVJZH0gJHtlLm1lc3NhZ2V9YDtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihtZXNzYWdlKTtcbiAgICAgICAgICAgIHRoaXMubGFzdEVycm9yICs9IG1lc3NhZ2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3Q3JlYXRlZFRpbWVmcmFtZUNvbnRhaW5lcnM7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIHJlZnJlc2hDb21wYXJlUXVhbGl0eShmcmFtZVNldDogRnJhbWVTZXQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5jb21wYXJlTWFuYWdlci5yZWZyZXNoQ29tcGFyZVF1YWxpdHkoZnJhbWVTZXQsIHRydWUpO1xuICAgICAgICBhd2FpdCB0aGlzLmNvbXBhcmVNYW5hZ2VyLnNldEdhdWdlc0luQ29tcGFyZSgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhc3luYyBnZXRWYWx1ZXModGFyZ2V0OiBGcmFtZVNldCk6IFByb21pc2U8Q2FydGVzaWFuTWFwVmFsdWVbXT4ge1xuICAgICAgICBpZiAoIXRhcmdldD8ucmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZUlkKSB7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gYFBiIHdpdGggdGFyZ2V0IGluc2lnaHRzICR7dGFyZ2V0Py5kYXRlLnRvSVNPU3RyaW5nKCl9YDtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihtZXNzYWdlKTtcbiAgICAgICAgICAgIHRoaXMubGFzdEVycm9yICs9IG1lc3NhZ2U7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdmFsdWVzOiBDYXJ0ZXNpYW5NYXBWYWx1ZVtdID0gW107XG4gICAgICAgIGNvbnN0IHJhaW5Db21wdXRhdGlvbk1hcCA9XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnByb2ZpbGVTZXJ2aWNlLmdldFJhaW5Db21wdXRhdGlvbkN1bXVsYXRpdmVDYXJ0ZXNpYW5NYXBCeUlkKFxuICAgICAgICAgICAgICAgIHRoaXMucmFpbk5vZGUuaWQsXG4gICAgICAgICAgICAgICAgdGFyZ2V0LnJhaW5Db21wdXRhdGlvbkN1bXVsYXRpdmVJZFxuICAgICAgICAgICAgKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHJhaW5Db21wdXRhdGlvbk1hcCkge1xuICAgICAgICAgICAgICAgIHJhaW5Db21wdXRhdGlvbk1hcC5nZXRNYXBEYXRhKCkuZm9yRWFjaCgobSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAobS52YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIChtLnZhbHVlcyBhcyBJQ2FydGVzaWFuTWVhc3VyZVZhbHVlW10pLmZvckVhY2goKHYpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjYXJ0ZXNpYW5NZWFzdXJlVmFsdWUgPSBDYXJ0ZXNpYW5NZWFzdXJlVmFsdWUuRnJvbSh2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSB2YWx1ZXMuY29uY2F0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYXJ0ZXNpYW5NYXBWYWx1ZS5Gcm9tKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FydGVzaWFuTWVhc3VyZVZhbHVlLmdldENhcnRlc2lhblZhbHVlcygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYXJ0ZXNpYW5Ub29sc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgUGIgd2l0aCBjdW11bGF0aXZlcyBmb3IgaWQ6ICR7dGFyZ2V0LnJhaW5Db21wdXRhdGlvbkN1bXVsYXRpdmVJZH0gJHtlLm1lc3NhZ2V9YDtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihtZXNzYWdlKTtcbiAgICAgICAgICAgIHRoaXMubGFzdEVycm9yICs9IG1lc3NhZ2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgIH1cbn1cbiJdfQ==
314
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVmcmVzaE1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29yZS9zaGFyZWQvdG9vbHMvUmVmcmVzaE1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDL0QsT0FBTyxFQUNILHFCQUFxQixFQUNyQixjQUFjLEVBRWQsU0FBUyxHQUdaLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBQyxpQkFBaUIsRUFBc0IsbUJBQW1CLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFNcEYsTUFBTSxLQUFLLEdBQUcsQ0FBQyxFQUFVLEVBQUUsRUFBRSxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFFaEYsTUFBTSxPQUFPLGNBQWM7SUEwQ3ZCLFlBQ2MsWUFBMEIsRUFDMUIsY0FBOEIsRUFDOUIsY0FBOEI7UUFGOUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQWhDckMsYUFBUSxHQUFXLE9BQU8sQ0FBQztRQUMzQixzQkFBaUIsR0FBVyxFQUFFLENBQUM7UUFDL0IsY0FBUyxHQUFXLEVBQUUsQ0FBQztRQUN2QixlQUFVLEdBQVksS0FBSyxDQUFDO1FBK0IvQixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUMsS0FBSyxFQUFFLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksSUFBSSxFQUFFLEVBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxPQUFPLEVBQVcsQ0FBQztRQUNoRCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksY0FB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TUFBTSxDQUNsQixpQkFBaUIsQ0FBQyxJQUFJLENBQ2xCLHFCQUFxQixDQUFDLGtCQUFrQixFQUFFLEVBQzFDLElBQUksQ0FBQyxjQUFjLENBQ3RCLENBQ0osQ0FBQzt3QkFDTixDQUFDLENBQUMsQ0FBQztxQkFDTjtnQkFDTCxDQUFDLENBQUMsQ0FBQzthQUNOO1NBQ0o7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNSLE1BQU0sT0FBTyxHQUFHLCtCQUErQixNQUFNLENBQUMsMkJBQTJCLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pHLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdEIsSUFBSSxDQUFDLFNBQVMsSUFBSSxPQUFPLENBQUM7U0FDN0I7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0ZyYW1lU2V0fSBmcm9tICcuL0ZyYW1lU2V0JztcbmltcG9ydCB7ZnJvbSwgbWVyZ2VNYXAsIFN1YmplY3QsIHRha2VVbnRpbCwgdGltZXJ9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgICBDYXJ0ZXNpYW5NZWFzdXJlVmFsdWUsXG4gICAgQ2FydGVzaWFuVG9vbHMsXG4gICAgSUNhcnRlc2lhbk1lYXN1cmVWYWx1ZSxcbiAgICBSYWRhck5vZGUsXG4gICAgUmFpbkNvbXB1dGF0aW9uTWFwLFxuICAgIFJhaW5Ob2RlLFxufSBmcm9tICdyYWFpbi1tb2RlbCc7XG5pbXBvcnQge0NhcnRlc2lhbk1hcFZhbHVlLCBUaW1lZnJhbWVDb250YWluZXIsIFRpbWVmcmFtZUNvbnRhaW5lcnN9IGZyb20gJ3JhYWluLXVpJztcbmltcG9ydCB7UmFkYXJTZXJ2aWNlfSBmcm9tICcuLi9yYWRhci5zZXJ2aWNlJztcbmltcG9ydCB7UHJvZmlsZVNlcnZpY2V9IGZyb20gJy4uL3Byb2ZpbGUuc2VydmljZSc7XG5pbXBvcnQge0NvbXBhcmVNYW5hZ2VyLCBJQ29tcGFyZVRhcmdldH0gZnJvbSAnLi9Db21wYXJlTWFuYWdlcic7XG5pbXBvcnQge1hZVHlwZX0gZnJvbSAnLi4veHl0eXBlJztcblxuY29uc3Qgc2xlZXAgPSAobXM6IG51bWJlcikgPT4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcblxuZXhwb3J0IGNsYXNzIFJlZnJlc2hNYW5hZ2VyIHtcbiAgICBwdWJsaWMgcmFpbkNvbXB1dGF0aW9uTWFwVmVyc2lvbjogc3RyaW5nO1xuICAgIHB1YmxpYyByYWluQ29tcHV0YXRpb25NYXBEYXRlOiBEYXRlO1xuICAgIHB1YmxpYyByYWluQ29tcHV0YXRpb25NYXBEb25lRGF0ZTogRGF0ZTtcbiAgICBwdWJsaWMgcmFpbkNvbXB1dGF0aW9uTWFwTGF1bmNoZWRCeTogc3RyaW5nO1xuICAgIHB1YmxpYyByYWluQ29tcHV0YXRpb25NYXBUaW1lU3BlbnRJbk1zOiBudW1iZXI7XG5cbiAgICBwdWJsaWMgcmFpbkNvbXB1dGF0aW9uTWFwT3JpZ2luYWxNaW46IG51bWJlcjtcbiAgICBwdWJsaWMgcmFpbkNvbXB1dGF0aW9uTWFwT3JpZ2luYWxNYXg6IG51bWJlcjtcblxuICAgIHB1YmxpYyBzdW1GbjogKGNhcnRlc2lhbk1hcFZhbHVlczogQ2FydGVzaWFuTWFwVmFsdWVbXSkgPT4gbnVtYmVyO1xuICAgIHB1YmxpYyBzdW1WYWx1ZXM6IENhcnRlc2lhbk1hcFZhbHVlW107XG5cbiAgICBwdWJsaWMgcHJvdmlkZXI6IHN0cmluZyA9ICdSYWFpbic7XG4gICAgcHVibGljIHRpbWVTdGVwSW5NaW51dGVzOiBudW1iZXIgPSAxMDtcbiAgICBwdWJsaWMgbGFzdEVycm9yOiBzdHJpbmcgPSAnJztcbiAgICBwdWJsaWMgY3VtdWxhdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgcHJvdGVjdGVkIGNsb3NlUmVmcmVzaFRpbWVyOiBTdWJqZWN0PHVua25vd24+O1xuICAgIHByb3RlY3RlZCBjb3VudHNQZXJpb2Q6IHtcbiAgICAgICAgcGVyY2VudEltYWdlcz86IFhZVHlwZVtdO1xuICAgICAgICBxdWV1ZVJ1bm5pbmc/OiBudW1iZXI7XG4gICAgICAgIHByb2dyZXNzPzogbnVtYmVyO1xuICAgIH07XG4gICAgcHJvdGVjdGVkIHRpbWVmcmFtZXNGcm9tUmFkYXJzOiBGcmFtZVNldFtdO1xuICAgIHByb3RlY3RlZCB0aW1lZnJhbWVzRnJvbVJhZGFyc0V4dGVuZGVkOiBGcmFtZVNldFtdO1xuICAgIHByb3RlY3RlZCB0aW1lbGluZVNlbGVjdGVkRnJhbWVTZXQ6IEZyYW1lU2V0O1xuICAgIHByb3RlY3RlZCB0aW1lZnJhbWVEYXRlczogRGF0ZVtdO1xuICAgIHByb3RlY3RlZCBjYXJ0ZXNpYW5Ub29sczogQ2FydGVzaWFuVG9vbHM7XG4gICAgcHJvdGVjdGVkIHJlbW92ZUR1cGxpY2F0ZTogYm9vbGVhbjtcbiAgICBwcm90ZWN0ZWQgZGF0YUludGVybmFsOiBib29sZWFuO1xuICAgIHByb3RlY3RlZCBvblJlZnJlc2hJblByb2dyZXNzOiAoXG4gICAgICAgIGNvdW50UGVyaW9kczoge1xuICAgICAgICAgICAgcGVyY2VudEltYWdlcz86IFhZVHlwZVtdO1xuICAgICAgICAgICAgcXVldWVSdW5uaW5nPzogbnVtYmVyO1xuICAgICAgICAgICAgcHJvZ3Jlc3M/OiBudW1iZXI7XG4gICAgICAgIH0sXG4gICAgICAgIHRpbWVmcmFtZURhdGVzOiBEYXRlW11cbiAgICApID0+IFByb21pc2U8dm9pZD47XG4gICAgcHJvdGVjdGVkIG9uUmVmcmVzaERvbmU6ICh0aW1lZnJhbWVEYXRlczogRGF0ZVtdKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAgIHByb3RlY3RlZCBvbkZldGNoRG9uZTogKHRpbWVmcmFtZUNvbnRhaW5lcnM/OiBUaW1lZnJhbWVDb250YWluZXJzKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCByYWRhclNlcnZpY2U6IFJhZGFyU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIHByb2ZpbGVTZXJ2aWNlOiBQcm9maWxlU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIGNvbXBhcmVNYW5hZ2VyOiBDb21wYXJlTWFuYWdlclxuICAgICkge1xuICAgICAgICB0aGlzLl9wZXJpb2QgPSB7YmVnaW46IG5ldyBEYXRlKCksIGVuZDogbmV3IERhdGUoKX07XG4gICAgICAgIHRoaXMuY2xvc2VSZWZyZXNoVGltZXIgPSBuZXcgU3ViamVjdDx1bmtub3duPigpO1xuICAgICAgICB0aGlzLmNhcnRlc2lhblRvb2xzID0gbmV3IENhcnRlc2lhblRvb2xzKCk7XG4gICAgICAgIHRoaXMuY2xlYW5BbGwoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX3JhaW5Ob2RlOiBSYWluTm9kZTtcblxuICAgIHB1YmxpYyBnZXQgcmFpbk5vZGUoKTogUmFpbk5vZGUge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmFpbk5vZGU7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCByYWluTm9kZShyYWluTm9kZTogUmFpbk5vZGUpIHtcbiAgICAgICAgdGhpcy5fcmFpbk5vZGUgPSByYWluTm9kZTtcbiAgICAgICAgdGhpcy5jbGVhbkFsbCgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfcGVyaW9kOiB7YmVnaW46IERhdGU7IGVuZDogRGF0ZX07XG5cbiAgICBnZXQgcGVyaW9kKCk6IHtiZWdpbjogRGF0ZTsgZW5kOiBEYXRlfSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wZXJpb2Q7XG4gICAgfVxuXG4gICAgc2V0IHBlcmlvZChwZXJpb2Q6IHtiZWdpbjogRGF0ZTsgZW5kOiBEYXRlfSkge1xuICAgICAgICB0aGlzLl9wZXJpb2QuYmVnaW4gPSBuZXcgRGF0ZShwZXJpb2QuYmVnaW4pO1xuICAgICAgICB0aGlzLl9wZXJpb2QuZW5kID0gbmV3IERhdGUocGVyaW9kLmVuZCk7XG4gICAgICAgIHRoaXMucmVmcmVzaENvdW50cygpLnRoZW4oKGlnbm9yZWQpID0+IHt9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0TWV0aG9kcyhcbiAgICAgICAgb25SZWZyZXNoSW5Qcm9ncmVzczogKFxuICAgICAgICAgICAgY291bnRQZXJpb2RzOiB7XG4gICAgICAgICAgICAgICAgcGVyY2VudEltYWdlcz86IFhZVHlwZVtdO1xuICAgICAgICAgICAgICAgIHF1ZXVlUnVubmluZz86IG51bWJlcjtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aW1lZnJhbWVEYXRlczogRGF0ZVtdXG4gICAgICAgICkgPT4gUHJvbWlzZTx2b2lkPixcbiAgICAgICAgb25SZWZyZXNoRG9uZTogKHRpbWVmcmFtZURhdGVzOiBEYXRlW10pID0+IFByb21pc2U8dm9pZD4sXG4gICAgICAgIG9uRmV0Y2hEb25lOiAodGltZWZyYW1lQ29udGFpbmVycz86IFRpbWVmcmFtZUNvbnRhaW5lcnMpID0+IFByb21pc2U8dm9pZD5cbiAgICApIHtcbiAgICAgICAgdGhpcy5vblJlZnJlc2hJblByb2dyZXNzID0gb25SZWZyZXNoSW5Qcm9ncmVzcztcbiAgICAgICAgdGhpcy5vblJlZnJlc2hEb25lID0gb25SZWZyZXNoRG9uZTtcbiAgICAgICAgdGhpcy5vbkZldGNoRG9uZSA9IG9uRmV0Y2hEb25lO1xuICAgIH1cblxuICAgIGNsZWFuQWxsKCkge1xuICAgICAgICB0aGlzLmxhc3RFcnJvciA9ICcnO1xuICAgICAgICB0aGlzLmNvdW50c1BlcmlvZCA9IHtwZXJjZW50SW1hZ2VzOiBbXSwgcXVldWVSdW5uaW5nOiAwLCBwcm9ncmVzczogMH07XG4gICAgICAgIHRoaXMudGltZWZyYW1lc0Zyb21SYWRhcnMgPSBbXTtcbiAgICAgICAgdGhpcy50aW1lZnJhbWVzRnJvbVJhZGFyc0V4dGVuZGVkID0gW107XG4gICAgICAgIHRoaXMudGltZWZyYW1lRGF0ZXMgPSBbXTtcbiAgICAgICAgdGhpcy5yZW1vdmVEdXBsaWNhdGUgPSB0cnVlO1xuICAgICAgICB0aGlzLmNsb3NlUmVmcmVzaFRpbWVyPy5uZXh0KG51bGwpO1xuICAgIH1cblxuICAgIGFzeW5jIGZldGNoKFxuICAgICAgICBkYXRlU2hvd246IERhdGUsXG4gICAgICAgIHdpdGhHYXVnZXNNZWFzdXJlczogYm9vbGVhbixcbiAgICAgICAgY3VtdWxhdGl2ZUhvdXJzID0gMFxuICAgICk6IFByb21pc2U8RnJhbWVTZXQ+IHtcbiAgICAgICAgLy8gc2V0IHRoZSB0YXJnZXRcbiAgICAgICAgY29uc3QgY3VycmVudHMgPSB0aGlzLnRpbWVmcmFtZXNGcm9tUmFkYXJzRXh0ZW5kZWQuZmlsdGVyKFxuICAgICAgICAgICAgKHQpID0+IHQuZGF0ZS5nZXRUaW1lKCkgPT09IGRhdGVTaG93bi5nZXRUaW1lKClcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGN1cnJlbnRzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYnVpbGQgY3VycmVudCBGcmFtZXNldFxuICAgICAgICBjb25zdCBjdXJyZW50OiBGcmFtZVNldCA9IGN1cnJlbnRzWzBdO1xuICAgICAgICBjb25zdCB0YXJnZXQgPSB7XG4gICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgd2l0aEdhdWdlOiB3aXRoR2F1Z2VzTWVhc3VyZXMsXG4gICAgICAgICAgICBjdW11bGF0aXZlSG91cnM6IGN1bXVsYXRpdmVIb3VycyxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCB0aW1lZnJhbWVDb250YWluZXJzID0gYXdhaXQgdGhpcy5yZWZyZXNoTWFwVGltZWZyYW1lQ29udGFpbmVycyh0YXJnZXQpO1xuXG4gICAgICAgIHRoaXMub25GZXRjaERvbmUodGltZWZyYW1lQ29udGFpbmVycylcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMucmVmcmVzaENvbXBhcmVRdWFsaXR5KGN1cnJlbnQpKVxuICAgICAgICAgICAgLnRoZW4oKGlnbm9yZWQpID0+IHt9KTsgLy8gTk8gU3luY1xuXG4gICAgICAgIHRoaXMudGltZWxpbmVTZWxlY3RlZEZyYW1lU2V0ID0gY3VycmVudDtcbiAgICB9XG5cbiAgICBnZXRUaW1lbGluZUZyYW1lU2V0KCk6IEZyYW1lU2V0W10ge1xuICAgICAgICByZXR1cm4gdGhpcy50aW1lZnJhbWVzRnJvbVJhZGFycztcbiAgICB9XG5cbiAgICBnZXRUaW1lbGluZVNlbGVjdGVkRnJhbWVTZXQoKTogRnJhbWVTZXQge1xuICAgICAgICByZXR1cm4gdGhpcy50aW1lbGluZVNlbGVjdGVkRnJhbWVTZXQ7XG4gICAgfVxuXG4gICAgYXN5bmMgcmVmcmVzaChsYXVuY2hRdWFsaXR5QWZ0ZXI6IGJvb2xlYW4sIGRhdGFJbnRlcm5hbDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmxhc3RFcnJvciA9ICcnO1xuXG4gICAgICAgIHRoaXMuY2hlY2tQZXJpb2QoKTtcblxuICAgICAgICB0aGlzLmRhdGFJbnRlcm5hbCA9IGRhdGFJbnRlcm5hbDtcblxuICAgICAgICBjb25zdCBhc3luY0RvbmUgPSAoZXJyb3I/OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIHJlZnJlc2gnLCBlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNsb3NlUmVmcmVzaFRpbWVyLm5leHQobnVsbCk7XG4gICAgICAgICAgICB0aGlzLm9uUmVmcmVzaERvbmUodGhpcy50aW1lZnJhbWVEYXRlcykudGhlbigoX2lnbm9yZWQpID0+IHt9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBhc3luY1JlZnJlc2ggPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uUmVmcmVzaEluUHJvZ3Jlc3MoYXdhaXQgdGhpcy5yZWZyZXNoQ291bnRzKCksIHRoaXMudGltZWZyYW1lRGF0ZXMpLnRoZW4oXG4gICAgICAgICAgICAgICAgKF9pZ25vcmVkKSA9PiB7fVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IGRvbmUgPSBhd2FpdCB0aGlzLnJlZnJlc2hQZXJpb2RJbnNpZGVQb2xsaW5nKCk7XG4gICAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgICAgIGFzeW5jRG9uZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHRpbWVyKDEwMDAsIDEwMDAwKSAvLyBXYWl0IDFzLCB0aGVuIGV2ZXJ5IDEwc1xuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWVyZ2VNYXAoKCkgPT4gZnJvbShhc3luY1JlZnJlc2goKSkpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmNsb3NlUmVmcmVzaFRpbWVyKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4gYXN5bmNEb25lKEpTT04uc3RyaW5naWZ5KGVycm9yKSksXG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzZXRSZW1vdmVEdXBsaWNhdGUoYjogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnJlbW92ZUR1cGxpY2F0ZSA9IGI7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNldFJlcG9ydFBlcmlvZChkYXRlOiBEYXRlKSB7XG4gICAgICAgIGxldCB2YWx1ZXM6IENhcnRlc2lhbk1hcFZhbHVlW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBmcmFtZVNldCBvZiB0aGlzLnRpbWVmcmFtZXNGcm9tUmFkYXJzKSB7XG4gICAgICAgICAgICBpZiAoZnJhbWVTZXQuZGF0ZS5nZXRUaW1lKCkgIT09IGRhdGUuZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YWx1ZXMgPSB2YWx1ZXMuY29uY2F0KGF3YWl0IHRoaXMuZ2V0VmFsdWVzKGZyYW1lU2V0KSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN1bUZuID0gKGNhcnRlc2lhbk1hcFZhbHVlczogQ2FydGVzaWFuTWFwVmFsdWVbXSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGNhcnRlc2lhbk1hcFZhbHVlcy5yZWR1Y2UoKHAsIHYpID0+IHAgKyB2LnZhbHVlLCAwKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5zdW1WYWx1ZXMgPSB2YWx1ZXM7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNoZWNrUGVyaW9kKCkge1xuICAgICAgICBpZiAodGhpcy5wZXJpb2QuYmVnaW4uZ2V0VGltZSgpID09PSB0aGlzLnBlcmlvZC5lbmQuZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gJ25lZWQgYSBwZXJpb2QnO1xuICAgICAgICAgICAgdGhpcy5sYXN0RXJyb3IgKz0gbWVzc2FnZTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBhc3luYyByZWZyZXNoQ291bnRzKCkge1xuICAgICAgICBpZiAoIXRoaXMucmFpbk5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvdW50c1BlcmlvZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvdW50cyA9IGF3YWl0IHRoaXMucHJvZmlsZVNlcnZpY2UuZ2V0Q291bnRzKHRoaXMucmFpbk5vZGUuaWQsIHtcbiAgICAgICAgICAgIHJhbmdlOiAnZGF5JyxcbiAgICAgICAgICAgIHBlcmlvZEJlZ2luOiB0aGlzLl9wZXJpb2QuYmVnaW4sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGxldCBwcm9ncmVzcyA9IDA7XG5cbiAgICAgICAgLy8gVmVyaWZ5IHByb2dyZXNzIG9ubHkgZm9yIFNpbXBsZVpvbmVcbiAgICAgICAgaWYgKHRoaXMucmFpbk5vZGUuZ2V0TGlua3MoUmFkYXJOb2RlLlRZUEUpLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICBwcm9ncmVzcyA9IGF3YWl0IHRoaXMucHJvZmlsZVNlcnZpY2UuZ2V0UmFpblByb2dyZXNzKHRoaXMucmFpbk5vZGUuaWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb3VudHNQZXJpb2QgPSB7XG4gICAgICAgICAgICAuLi5jb3VudHMsXG4gICAgICAgICAgICBwcm9ncmVzcyxcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5jb3VudHNQZXJpb2Q7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldFJhaW5Db21wdXRhdGlvblF1YWxpdHlUYXJnZXQoZnJhbWVzZXQ6IEZyYW1lU2V0KTogc3RyaW5nIHtcbiAgICAgICAgaWYgKGZyYW1lc2V0LnJhaW5Db21wdXRhdGlvblF1YWxpdGllcy5sZW5ndGggPD0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnJhbWVzZXQucmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzWzBdLmlkO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhc3luYyByZWZyZXNoUGVyaW9kSW5zaWRlUG9sbGluZygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGRvbmUgPSBhd2FpdCB0aGlzLnJlZnJlc2hDaGVja0lmRG9uZSgpO1xuXG4gICAgICAgICAgICAvLyBiZWhpbmQgcmVmcmVzaFxuICAgICAgICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoVGltZWZyYW1lc0Zyb21SYWRhcnMoZG9uZSk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJlZnJlc2hHbG9iYWxDb21wYXJlUmVwb3J0KGRvbmUpO1xuXG4gICAgICAgICAgICByZXR1cm4gZG9uZTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGUpO1xuICAgICAgICAgICAgdGhpcy5sYXN0RXJyb3IgKz0gZS5tZXNzYWdlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXN5bmMgcmVmcmVzaENoZWNrSWZEb25lKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICBhd2FpdCBzbGVlcCgyMDAwKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY291bnRzUGVyaW9kLnByb2dyZXNzID09PSAwO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhc3luYyByZWZyZXNoVGltZWZyYW1lc0Zyb21SYWRhcnMoZG9uZTogYm9vbGVhbikge1xuICAgICAgICBpZiAoIWRvbmUgfHwgIXRoaXMucmFpbk5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBiZWdpbkV4dGVuZGVkID0gbmV3IERhdGUodGhpcy5wZXJpb2QuYmVnaW4pO1xuICAgICAgICAgICAgY29uc3QgZW5kRXh0ZW5kZWQgPSBuZXcgRGF0ZSh0aGlzLnBlcmlvZC5lbmQpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmN1bXVsYXRpdmUpIHtcbiAgICAgICAgICAgICAgICAvLyBPbmx5IGV4dGVuZCBwZXJpb2QgZm9yIGdyYW51bGFyIG1vZGUgKHRvIGdldCBuZWlnaGJvcmluZyBmcmFtZXMpXG4gICAgICAgICAgICAgICAgLy8gRm9yIGN1bXVsYXRpdmUgbW9kZSwgdXNlIGV4YWN0IHBlcmlvZFxuICAgICAgICAgICAgICAgIGJlZ2luRXh0ZW5kZWQuc2V0TWludXRlcyhiZWdpbkV4dGVuZGVkLmdldE1pbnV0ZXMoKSAtIDcpO1xuICAgICAgICAgICAgICAgIGVuZEV4dGVuZGVkLnNldE1pbnV0ZXMoZW5kRXh0ZW5kZWQuZ2V0TWludXRlcygpICsgNyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIENhbGN1bGF0ZSB3aW5kb3dJbk1pbnV0ZXMgZm9yIGN1bXVsYXRpdmUgbW9kZVxuICAgICAgICAgICAgY29uc3Qgd2luZG93SW5NaW51dGVzID0gdGhpcy5jdW11bGF0aXZlXG4gICAgICAgICAgICAgICAgPyBNYXRoLnJvdW5kKFxuICAgICAgICAgICAgICAgICAgICAgICh0aGlzLnBlcmlvZC5lbmQuZ2V0VGltZSgpIC0gdGhpcy5wZXJpb2QuYmVnaW4uZ2V0VGltZSgpKSAvICg2MCAqIDEwMDApXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiAwO1xuXG4gICAgICAgICAgICB0aGlzLnJhaW5Ob2RlID0gYXdhaXQgdGhpcy5wcm9maWxlU2VydmljZS5nZXRSYWluVGltZWZyYW1lKFxuICAgICAgICAgICAgICAgIHRoaXMucmFpbk5vZGUuaWQsXG4gICAgICAgICAgICAgICAgYmVnaW5FeHRlbmRlZCxcbiAgICAgICAgICAgICAgICBlbmRFeHRlbmRlZCxcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFJbnRlcm5hbCxcbiAgICAgICAgICAgICAgICB0aGlzLnByb3ZpZGVyLFxuICAgICAgICAgICAgICAgIHRoaXMudGltZVN0ZXBJbk1pbnV0ZXMsXG4gICAgICAgICAgICAgICAgd2luZG93SW5NaW51dGVzXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0aGlzLnRpbWVmcmFtZXNGcm9tUmFkYXJzRXh0ZW5kZWQgPSBhd2FpdCB0aGlzLnJhZGFyU2VydmljZS5nZXRUaW1lbGluZSh0aGlzLnJhaW5Ob2RlKTtcbiAgICAgICAgICAgIHRoaXMudGltZWZyYW1lc0Zyb21SYWRhcnMgPSB0aGlzLnRpbWVmcmFtZXNGcm9tUmFkYXJzRXh0ZW5kZWRcbiAgICAgICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAoZnJhbWVTZXQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcmlvZC5iZWdpbi5nZXRUaW1lKCkgPD0gZnJhbWVTZXQuZGF0ZS5nZXRUaW1lKCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lU2V0LmRhdGUuZ2V0VGltZSgpIDw9IHRoaXMucGVyaW9kLmVuZC5nZXRUaW1lKClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuZGF0ZS5nZXRUaW1lKCkgLSBiLmRhdGUuZ2V0VGltZSgpKTtcblxuICAgICAgICAgICAgdGhpcy50aW1lZnJhbWVEYXRlcyA9IHRoaXMudGltZWZyYW1lc0Zyb21SYWRhcnMubWFwKChmcmFtZVNldCkgPT4gZnJhbWVTZXQuZGF0ZSk7XG5cbiAgICAgICAgICAgIC8vIENvbXB1dGUgYWxsIGV4cGVjdGVkIGRhdGVzXG4gICAgICAgICAgICAvLyBGb3IgY3VtdWxhdGl2ZSBtb2RlOiBvbmx5IDEgZXhwZWN0ZWQgZGF0ZSAodGhlIHBlcmlvZCBlbmQpXG4gICAgICAgICAgICAvLyBGb3IgZ3JhbnVsYXIgbW9kZTogYWxsIGRhdGVzIGZyb20gcGVyaW9kLmJlZ2luIHRvIHBlcmlvZC5lbmQgd2l0aCB0aW1lU3RlcEluTWludXRlc1xuICAgICAgICAgICAgY29uc3QgYWxsRXhwZWN0ZWREYXRlczogRGF0ZVtdID0gW107XG4gICAgICAgICAgICBpZiAodGhpcy5jdW11bGF0aXZlKSB7XG4gICAgICAgICAgICAgICAgLy8gSW4gY3VtdWxhdGl2ZSBtb2RlLCB3ZSBleHBlY3Qgb25seSBPTkUgdGltZWZyYW1lICh0aGUgY3VtdWxhdGl2ZSlcbiAgICAgICAgICAgICAgICBhbGxFeHBlY3RlZERhdGVzLnB1c2gobmV3IERhdGUodGhpcy5wZXJpb2QuZW5kKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gbmV3IERhdGUodGhpcy5wZXJpb2QuYmVnaW4pO1xuICAgICAgICAgICAgICAgIHdoaWxlIChjdXJyZW50RGF0ZS5nZXRUaW1lKCkgPD0gdGhpcy5wZXJpb2QuZW5kLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgICAgICAgICBhbGxFeHBlY3RlZERhdGVzLnB1c2gobmV3IERhdGUoY3VycmVudERhdGUpKTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudERhdGUuc2V0TWludXRlcyhjdXJyZW50RGF0ZS5nZXRNaW51dGVzKCkgKyB0aGlzLnRpbWVTdGVwSW5NaW51dGVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIENoZWNrIGlmIGFsbCBleHBlY3RlZCBkYXRlcyBhcmUgcHJlc2VudCBpbiB0aW1lZnJhbWVEYXRlc1xuICAgICAgICAgICAgY29uc3QgdGltZWZyYW1lRGF0ZVRpbWVzID0gbmV3IFNldCh0aGlzLnRpbWVmcmFtZURhdGVzLm1hcCgoZCkgPT4gZC5nZXRUaW1lKCkpKTtcbiAgICAgICAgICAgIGNvbnN0IG1pc3NpbmdEYXRlcyA9IGFsbEV4cGVjdGVkRGF0ZXMuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChleHBlY3RlZERhdGUpID0+ICF0aW1lZnJhbWVEYXRlVGltZXMuaGFzKGV4cGVjdGVkRGF0ZS5nZXRUaW1lKCkpXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAobWlzc2luZ0RhdGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID1cbiAgICAgICAgICAgICAgICAgICAgYE1pc3NpbmcgJHttaXNzaW5nRGF0ZXMubGVuZ3RofSB0aW1lZnJhbWUocykgb3V0IG9mICR7YWxsRXhwZWN0ZWREYXRlcy5sZW5ndGh9IGV4cGVjdGVkOiBgICtcbiAgICAgICAgICAgICAgICAgICAgbWlzc2luZ0RhdGVzLm1hcCgoZCkgPT4gZC50b0lTT1N0cmluZygpKS5qb2luKCcsICcpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RFcnJvciArPSBtZXNzYWdlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy50aW1lZnJhbWVzRnJvbVJhZGFycztcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcigncmVmcmVzaFRpbWVmcmFtZXNGcm9tUmFkYXJzJywgZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIHJlZnJlc2hHbG9iYWxDb21wYXJlUmVwb3J0KGRvbmU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0czogSUNvbXBhcmVUYXJnZXRbXSA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBmcmFtZVNldCBvZiB0aGlzLnRpbWVmcmFtZXNGcm9tUmFkYXJzRXh0ZW5kZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGZyYW1lU2V0KSk7XG4gICAgICAgICAgICAgICAgdGFyZ2V0LmRhdGUgPSBuZXcgRGF0ZSh0YXJnZXQuZGF0ZSk7XG4gICAgICAgICAgICAgICAgdGFyZ2V0cy5wdXNoKHRhcmdldCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGN1bXVsYXRpdmVIb3VycyA9IHRoaXMuY3VtdWxhdGl2ZVxuICAgICAgICAgICAgICAgID8gKHRoaXMucGVyaW9kLmVuZC5nZXRUaW1lKCkgLSB0aGlzLnBlcmlvZC5iZWdpbi5nZXRUaW1lKCkpIC8gKDYwICogNjAgKiAxMDAwKVxuICAgICAgICAgICAgICAgIDogMDtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY29tcGFyZU1hbmFnZXIucmVmcmVzaEdsb2JhbENvbXBhcmVRdWFsaXR5KFxuICAgICAgICAgICAgICAgIHRhcmdldHMsXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJpb2QsXG4gICAgICAgICAgICAgICAgIXRoaXMucmVtb3ZlRHVwbGljYXRlLFxuICAgICAgICAgICAgICAgIGN1bXVsYXRpdmVIb3Vyc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcigncmVmcmVzaEdsb2JhbENvbXBhcmVSZXBvcnQnLCBlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBhc3luYyByZWZyZXNoTWFwVGltZWZyYW1lQ29udGFpbmVycyh0YXJnZXQ6IHtcbiAgICAgICAgZGF0ZTogRGF0ZTtcbiAgICAgICAgcmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZUlkOiBzdHJpbmc7XG4gICAgICAgIHdpdGhHYXVnZTogYm9vbGVhbjtcbiAgICAgICAgY3VtdWxhdGl2ZUhvdXJzOiBudW1iZXI7XG4gICAgfSkge1xuICAgICAgICBpZiAoIXRhcmdldD8ucmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZUlkKSB7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gYFBiIHdpdGggcmVmcmVzaE1hcFRpbWVmcmFtZUNvbnRhaW5lcnMgaW5zaWdodHMgJHt0YXJnZXQ/LmRhdGUudG9JU09TdHJpbmcoKX1gO1xuICAgICAgICAgICAgY29uc29sZS53YXJuKG1lc3NhZ2UpO1xuICAgICAgICAgICAgdGhpcy5sYXN0RXJyb3IgKz0gbWVzc2FnZTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmFpbk5vZGUgPSB0aGlzLnJhaW5Ob2RlO1xuICAgICAgICBjb25zdCBjb250YWluZXJzOiBUaW1lZnJhbWVDb250YWluZXJbXSA9IFtdO1xuICAgICAgICBjb25zdCBuZXdDcmVhdGVkVGltZWZyYW1lQ29udGFpbmVycyA9IG5ldyBUaW1lZnJhbWVDb250YWluZXJzKGNvbnRhaW5lcnMpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IHJhaW5Ob2RlQ2FydGVzaWFuTWFwOiBSYWluQ29tcHV0YXRpb25NYXA7XG5cbiAgICAgICAgICAgIGlmICh0YXJnZXQuY3VtdWxhdGl2ZUhvdXJzICYmIHRhcmdldC5yYWluQ29tcHV0YXRpb25DdW11bGF0aXZlSWQpIHtcbiAgICAgICAgICAgICAgICAvLyBGb3IgTi1ob3VyIGN1bXVsYXRpdmUsIHVzZSB0aGUgbGFzdCBmcmFtZSdzIGN1bXVsYXRpdmUgKGVuZCBvZiBwZXJpb2QpXG4gICAgICAgICAgICAgICAgLy8gVGhlIGN1bXVsYXRpdmUgaXMgcHJlLWNvbXB1dGVkIGJ5IHJhYWluLWdyb3VuZCB3aXRoIHdpbmRvd0luTWludXRlcz02MFxuICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RGcmFtZSA9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGltZWZyYW1lc0Zyb21SYWRhcnNFeHRlbmRlZFt0aGlzLnRpbWVmcmFtZXNGcm9tUmFkYXJzRXh0ZW5kZWQubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgY29uc3QgY3VtdWxhdGl2ZUlkID1cbiAgICAgICAgICAgICAgICAgICAgbGFzdEZyYW1lPy5yYWluQ29tcHV0YXRpb25DdW11bGF0aXZlSWQgfHwgdGFyZ2V0LnJhaW5Db21wdXRhdGlvbkN1bXVsYXRpdmVJZDtcblxuICAgICAgICAgICAgICAgIC8vIFVzZSBkaXJlY3QgY2FydGVzaWFuLW1hcCBlbmRwb2ludCAtIGN1bXVsYXRpdmUgZGF0YSBmZXRjaGVkIGZyb20gUzNcbiAgICAgICAgICAgICAgICByYWluTm9kZUNhcnRlc2lhbk1hcCA9XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucHJvZmlsZVNlcnZpY2UuZ2V0UmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZUNhcnRlc2lhbk1hcEJ5SWQoXG4gICAgICAgICAgICAgICAgICAgICAgICByYWluTm9kZS5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1bXVsYXRpdmVJZFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByYWluTm9kZUNhcnRlc2lhbk1hcCA9XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucHJvZmlsZVNlcnZpY2UuZ2V0UmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZUNhcnRlc2lhbk1hcEJ5SWQoXG4gICAgICAgICAgICAgICAgICAgICAgICByYWluTm9kZS5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5yYWluQ29tcHV0YXRpb25DdW11bGF0aXZlSWRcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJhaW5Ob2RlQ2FydGVzaWFuTWFwKSB7XG4gICAgICAgICAgICAgICAgbmV3Q3JlYXRlZFRpbWVmcmFtZUNvbnRhaW5lcnMuYWRkRnJvbVJhaW5Db21wdXRhdGlvbk1hcChcbiAgICAgICAgICAgICAgICAgICAgcmFpbk5vZGVDYXJ0ZXNpYW5NYXAsXG4gICAgICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIHRoaXMucmFpbkNvbXB1dGF0aW9uTWFwVmVyc2lvbiA9IHJhaW5Ob2RlQ2FydGVzaWFuTWFwLnZlcnNpb247XG4gICAgICAgICAgICAgICAgdGhpcy5yYWluQ29tcHV0YXRpb25NYXBEYXRlID0gbmV3IERhdGUocmFpbk5vZGVDYXJ0ZXNpYW5NYXAuZGF0ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5yYWluQ29tcHV0YXRpb25NYXBEb25lRGF0ZSA9IHJhaW5Ob2RlQ2FydGVzaWFuTWFwLmlzRG9uZURhdGU7XG4gICAgICAgICAgICAgICAgdGhpcy5yYWluQ29tcHV0YXRpb25NYXBMYXVuY2hlZEJ5ID0gcmFpbk5vZGVDYXJ0ZXNpYW5NYXAubGF1bmNoZWRCeTtcbiAgICAgICAgICAgICAgICB0aGlzLnJhaW5Db21wdXRhdGlvbk1hcFRpbWVTcGVudEluTXMgPSByYWluTm9kZUNhcnRlc2lhbk1hcC50aW1lU3BlbnRJbk1zO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5yYWluQ29tcHV0YXRpb25NYXBPcmlnaW5hbE1pbiA9IHJhaW5Ob2RlQ2FydGVzaWFuTWFwLm9yaWdpbmFsREJaTWluO1xuICAgICAgICAgICAgICAgIHRoaXMucmFpbkNvbXB1dGF0aW9uTWFwT3JpZ2luYWxNYXggPSByYWluTm9kZUNhcnRlc2lhbk1hcC5vcmlnaW5hbERCWk1heDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGBQYiB3aXRoIGN1bXVsYXRpdmVzIGZvciBpZDogJHt0YXJnZXQucmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZUlkfSAke2UubWVzc2FnZX1gO1xuICAgICAgICAgICAgY29uc29sZS53YXJuKG1lc3NhZ2UpO1xuICAgICAgICAgICAgdGhpcy5sYXN0RXJyb3IgKz0gbWVzc2FnZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXdDcmVhdGVkVGltZWZyYW1lQ29udGFpbmVycztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXN5bmMgcmVmcmVzaENvbXBhcmVRdWFsaXR5KGZyYW1lU2V0OiBGcmFtZVNldCkge1xuICAgICAgICBhd2FpdCB0aGlzLmNvbXBhcmVNYW5hZ2VyLnJlZnJlc2hDb21wYXJlUXVhbGl0eShmcmFtZVNldCwgdHJ1ZSk7XG4gICAgICAgIGF3YWl0IHRoaXMuY29tcGFyZU1hbmFnZXIuc2V0R2F1Z2VzSW5Db21wYXJlKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGdldFZhbHVlcyh0YXJnZXQ6IEZyYW1lU2V0KTogUHJvbWlzZTxDYXJ0ZXNpYW5NYXBWYWx1ZVtdPiB7XG4gICAgICAgIGlmICghdGFyZ2V0Py5yYWluQ29tcHV0YXRpb25DdW11bGF0aXZlSWQpIHtcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgUGIgd2l0aCB0YXJnZXQgaW5zaWdodHMgJHt0YXJnZXQ/LmRhdGUudG9JU09TdHJpbmcoKX1gO1xuICAgICAgICAgICAgY29uc29sZS53YXJuKG1lc3NhZ2UpO1xuICAgICAgICAgICAgdGhpcy5sYXN0RXJyb3IgKz0gbWVzc2FnZTtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB2YWx1ZXM6IENhcnRlc2lhbk1hcFZhbHVlW10gPSBbXTtcbiAgICAgICAgY29uc3QgcmFpbkNvbXB1dGF0aW9uTWFwID1cbiAgICAgICAgICAgIGF3YWl0IHRoaXMucHJvZmlsZVNlcnZpY2UuZ2V0UmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZUNhcnRlc2lhbk1hcEJ5SWQoXG4gICAgICAgICAgICAgICAgdGhpcy5yYWluTm9kZS5pZCxcbiAgICAgICAgICAgICAgICB0YXJnZXQucmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZUlkXG4gICAgICAgICAgICApO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAocmFpbkNvbXB1dGF0aW9uTWFwKSB7XG4gICAgICAgICAgICAgICAgcmFpbkNvbXB1dGF0aW9uTWFwLmdldE1hcERhdGEoKS5mb3JFYWNoKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtLnZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgKG0udmFsdWVzIGFzIElDYXJ0ZXNpYW5NZWFzdXJlVmFsdWVbXSkuZm9yRWFjaCgodikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhcnRlc2lhbk1lYXN1cmVWYWx1ZSA9IENhcnRlc2lhbk1lYXN1cmVWYWx1ZS5Gcm9tKHYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IHZhbHVlcy5jb25jYXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhcnRlc2lhbk1hcFZhbHVlLkZyb20oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJ0ZXNpYW5NZWFzdXJlVmFsdWUuZ2V0Q2FydGVzaWFuVmFsdWVzKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhcnRlc2lhblRvb2xzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGBQYiB3aXRoIGN1bXVsYXRpdmVzIGZvciBpZDogJHt0YXJnZXQucmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZUlkfSAke2UubWVzc2FnZX1gO1xuICAgICAgICAgICAgY29uc29sZS53YXJuKG1lc3NhZ2UpO1xuICAgICAgICAgICAgdGhpcy5sYXN0RXJyb3IgKz0gbWVzc2FnZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgfVxufVxuIl19