@mediusinc/mng-commons 3.4.1 → 3.5.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/esm2022/lib/components/action/action.component.mjs +33 -6
  2. package/esm2022/lib/components/action/editor/action-editor.component.mjs +22 -2
  3. package/esm2022/lib/components/action/models/action-execution.model.mjs +11 -9
  4. package/esm2022/lib/components/form/dropdown/dropdown.component.mjs +2 -2
  5. package/esm2022/lib/components/form/formly/fields/formly-field-action/formly-field-action.component.mjs +2 -2
  6. package/esm2022/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.mjs +8 -3
  7. package/esm2022/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +3 -3
  8. package/esm2022/lib/components/layout/topbar.component.mjs +2 -2
  9. package/esm2022/lib/components/pages/error/{error-page.component.mjs → error.page.component.mjs} +1 -1
  10. package/esm2022/lib/components/pages/index.mjs +3 -3
  11. package/esm2022/lib/components/pages/not-found/{not-found-page.component.mjs → not-found.page.component.mjs} +1 -1
  12. package/esm2022/lib/components/tableview/table/column-value/column-value.component.mjs +2 -2
  13. package/esm2022/lib/components/tableview/table/table.component.mjs +2 -2
  14. package/esm2022/lib/services/action-executor.service.mjs +14 -13
  15. package/fesm2022/mediusinc-mng-commons.mjs +87 -33
  16. package/fesm2022/mediusinc-mng-commons.mjs.map +1 -1
  17. package/lib/components/action/models/action-execution.model.d.ts +10 -8
  18. package/lib/components/pages/index.d.ts +2 -2
  19. package/lib/mng-commons.module.d.ts +2 -2
  20. package/lib/services/action-executor.service.d.ts +6 -10
  21. package/package.json +2 -2
  22. package/scss/mng-overrides/_theme_autocomplete.scss +25 -10
  23. package/scss/mng-overrides/_theme_datepicker.scss +14 -0
  24. package/scss/mng-overrides/_theme_input.scss +25 -2
  25. package/scss/mng-overrides/_theme_styles.scss +1 -4
  26. package/scss/mng-overrides/_theme_tabview.scss +11 -0
  27. /package/lib/components/pages/error/{error-page.component.d.ts → error.page.component.d.ts} +0 -0
  28. /package/lib/components/pages/not-found/{not-found-page.component.d.ts → not-found.page.component.d.ts} +0 -0
@@ -10,7 +10,7 @@ import { ZIndexUtils } from 'primeng/utils';
10
10
  import { ReplaySubject, Subject, of } from 'rxjs';
11
11
  import { take } from 'rxjs/operators';
12
12
  import { ActionEditorDescriptor, ActionEditorSubmitDescriptor } from '../../../descriptors/action';
13
- import { ActionActivationTriggerEnum, ActionEditorSubmitTypeEnum, ActionPositionEnum } from '../../../descriptors/types';
13
+ import { ActionActivationTriggerEnum, ActionEditorSubmitTypeEnum, ActionPositionEnum, ActionTypeEnum } from '../../../descriptors/types';
14
14
  import { MngTemplateDirective } from '../../../directives';
15
15
  import { MngInternalError } from '../../../models';
16
16
  import { MngActionExecutorService, MngCommonsService, MngLoggerService } from '../../../services';
@@ -329,6 +329,26 @@ export class MngActionEditorComponent {
329
329
  this.setEditorEnabled(true);
330
330
  this.submitLoadingSubject.next(false);
331
331
  break;
332
+ case ActionInstanceStateEnum.NextActionStart:
333
+ if (this.instance?.nextActionInstance?.action.type === ActionTypeEnum.Direct) {
334
+ this.submitLoadingSubject.next(true);
335
+ }
336
+ break;
337
+ case ActionInstanceStateEnum.NextActionEnd:
338
+ if (this.instance?.nextActionInstance?.action.type === ActionTypeEnum.Direct) {
339
+ this.submitLoadingSubject.next(false);
340
+ }
341
+ break;
342
+ case ActionInstanceStateEnum.ErrorActionStart:
343
+ if (this.instance?.errorActionInstance?.action.type === ActionTypeEnum.Direct) {
344
+ this.submitLoadingSubject.next(true);
345
+ }
346
+ break;
347
+ case ActionInstanceStateEnum.ErrorActionEnd:
348
+ if (this.instance?.errorActionInstance?.action.type === ActionTypeEnum.Direct) {
349
+ this.submitLoadingSubject.next(false);
350
+ }
351
+ break;
332
352
  case ActionInstanceStateEnum.FinishErrorFinal:
333
353
  this.setEditorEnabled(false);
334
354
  break;
@@ -448,4 +468,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImpor
448
468
  type: HostListener,
449
469
  args: ['window:keydown.Escape']
450
470
  }] } });
451
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWVkaXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvYWN0aW9uL2VkaXRvci9hY3Rpb24tZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9hY3Rpb24vZWRpdG9yL2FjdGlvbi1lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFJTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFFVCxTQUFTLEVBQ1QsTUFBTSxFQUNULE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUNoRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsYUFBYSxFQUFzQixNQUFNLHVCQUF1QixDQUFDO0FBQ3pFLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBYSxhQUFhLEVBQUUsT0FBTyxFQUFnQixFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDMUUsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBR3BDLE9BQU8s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LEVBQUUsSUFBSSxFQUFDO2dCQUdDLFVBQVU7c0JBQWpDLEtBQUs7dUJBQUMsUUFBUTtnQkFDTyxRQUFRO3NCQUE3QixLQUFLO3VCQUFDLE1BQU07Z0JBQ0csVUFBVTtzQkFBekIsS0FBSztnQkFDVSxZQUFZO3NCQUEzQixLQUFLO2dCQUN5QixpQkFBaUI7c0JBQS9DLEtBQUs7dUJBQUMsZUFBZTtnQkFFUyxxQkFBcUI7c0JBQW5ELE1BQU07dUJBQUMsY0FBYztnQkFDUyx3QkFBd0I7c0JBQXRELE1BQU07dUJBQUMsY0FBYztnQkFHd0IsU0FBUztzQkFBdEQsZUFBZTt1QkFBQyxvQkFBb0I7Z0JBQ0gsc0JBQXNCO3NCQUF2RCxTQUFTO3VCQUFDLGNBQWM7Z0JBQ2lCLGVBQWU7c0JBQXhELFNBQVM7dUJBQUMsc0JBQXNCO2dCQW9YekIsa0JBQWtCO3NCQUR6QixZQUFZO3VCQUFDLHFCQUFxQjtnQkFTM0IsZUFBZTtzQkFEdEIsWUFBWTt1QkFBQyx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FzeW5jUGlwZSwgTmdGb3JPZiwgTmdJZn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFZpZXdDaGlsZCxcbiAgICBpbmplY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtDb25maXJtYXRpb25TZXJ2aWNlfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQge0NvbmZpcm1EaWFsb2dNb2R1bGV9IGZyb20gJ3ByaW1lbmcvY29uZmlybWRpYWxvZyc7XG5pbXBvcnQge0RpYWxvZ1NlcnZpY2UsIER5bmFtaWNEaWFsb2dDb25maWd9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XG5pbXBvcnQge1Byb2dyZXNzU3Bpbm5lck1vZHVsZX0gZnJvbSAncHJpbWVuZy9wcm9ncmVzc3NwaW5uZXInO1xuaW1wb3J0IHtUb29sYmFyTW9kdWxlfSBmcm9tICdwcmltZW5nL3Rvb2xiYXInO1xuaW1wb3J0IHtaSW5kZXhVdGlsc30gZnJvbSAncHJpbWVuZy91dGlscyc7XG5pbXBvcnQge09ic2VydmFibGUsIFJlcGxheVN1YmplY3QsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgb2Z9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHt0YWtlfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7SUVkaXRvckRhdGFQcm92aWRlcn0gZnJvbSAnLi4vLi4vLi4vZGF0YS1wcm92aWRlcnMnO1xuaW1wb3J0IHtBY3Rpb25EZXNjcmlwdG9yLCBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yLCBBY3Rpb25FZGl0b3JTdWJtaXREZXNjcmlwdG9yfSBmcm9tICcuLi8uLi8uLi9kZXNjcmlwdG9ycy9hY3Rpb24nO1xuaW1wb3J0IHtBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW0sIEFjdGlvbkVkaXRvclN1Ym1pdFR5cGVFbnVtLCBBY3Rpb25Qb3NpdGlvbkVudW19IGZyb20gJy4uLy4uLy4uL2Rlc2NyaXB0b3JzL3R5cGVzJztcbmltcG9ydCB7TW5nVGVtcGxhdGVEaXJlY3RpdmV9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZXMnO1xuaW1wb3J0IHtJQWN0aW9uRWRpdG9yQ29tcG9uZW50LCBJVmlld0NvbnRhaW5lciwgSVZpZXdDb250YWluZXJFZGl0b3IsIE1uZ0ludGVybmFsRXJyb3J9IGZyb20gJy4uLy4uLy4uL21vZGVscyc7XG5pbXBvcnQge01uZ0FjdGlvbkV4ZWN1dG9yU2VydmljZSwgTW5nQ29tbW9uc1NlcnZpY2UsIE1uZ0xvZ2dlclNlcnZpY2UsIE1uZ1ZpZXdDb250YWluZXJDb21wb25lbnRTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQge0lkVHlwZX0gZnJvbSAnLi4vLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHtJMThuVXRpbHN9IGZyb20gJy4uLy4uLy4uL3V0aWxzJztcbmltcG9ydCB7TW5nRm9ybUVkaXRvckNvbXBvbmVudH0gZnJvbSAnLi4vLi4vZm9ybSc7XG5pbXBvcnQge01uZ0Zvcm1FZGl0b3JTdWJtaXRFdmVudH0gZnJvbSAnLi4vLi4vZm9ybS9tb2RlbHMnO1xuaW1wb3J0IHtNbmdBY3Rpb25Db21wb25lbnR9IGZyb20gJy4uL2FjdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHtBY3Rpb25EYXRhLCBBY3Rpb25JbnN0YW5jZSwgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0sIEFjdGlvblBhcmFtZXRlcnN9IGZyb20gJy4uL21vZGVscyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdtbmctYWN0aW9uLWVkaXRvcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2FjdGlvbi1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWydhY3Rpb24tZWRpdG9yLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgaW1wb3J0czogW05nSWYsIFRvb2xiYXJNb2R1bGUsIE1uZ0FjdGlvbkNvbXBvbmVudCwgTmdGb3JPZiwgQXN5bmNQaXBlLCBQcm9ncmVzc1NwaW5uZXJNb2R1bGUsIE1uZ0Zvcm1FZGl0b3JDb21wb25lbnQsIENvbmZpcm1EaWFsb2dNb2R1bGVdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIE1uZ0FjdGlvbkVkaXRvckNvbXBvbmVudDxULCBTPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIElBY3Rpb25FZGl0b3JDb21wb25lbnQge1xuICAgIHByb3RlY3RlZCByZWFkb25seSBBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW0gPSBBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW07XG4gICAgcHVibGljIHJlYWRvbmx5IGNtcElkID0gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIpO1xuICAgIHB1YmxpYyByZWFkb25seSBjb25maXJtRGlhbG9nS2V5ID0gYCRhY3Rpb25FZGl0b3JfY29uZmlybV8ke3RoaXMuY21wSWR9YDtcbiAgICBwdWJsaWMgcmVhZG9ubHkgYWN0aW9uRWRpdG9yU3VibWl0VHlwZVN1Ym1pdCA9IEFjdGlvbkVkaXRvclN1Ym1pdFR5cGVFbnVtLlN1Ym1pdDtcbiAgICBwdWJsaWMgcmVhZG9ubHkgYWN0aW9uRGVmYXVsdExvYWRpbmdJbnB1dCA9IG9mKGZhbHNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlciA9IGluamVjdChNbmdMb2dnZXJTZXJ2aWNlKS5jcmVhdGUoJ01uZ0FjdGlvbkVkaXRvckNvbXBvbmVudCcpO1xuXG4gICAgLy8gbWV0YWRhdGEgYW5kIGVkaXRvciBtb2RlIGlucHV0XG4gICAgQElucHV0KHtyZXF1aXJlZDogdHJ1ZX0pIHB1YmxpYyBhY3Rpb24hOiBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yPFQ+O1xuXG4gICAgLy8gZGF0YSBzb3VyY2UgaW5wdXRzXG4gICAgQElucHV0KCdpdGVtSWQnKSBwdWJsaWMgaXRlbUlkSW5pdD86IElkVHlwZTtcbiAgICBASW5wdXQoJ2l0ZW0nKSBwdWJsaWMgaXRlbUluaXQ/OiBUO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBhY3Rpb25EYXRhPzogQWN0aW9uRGF0YTtcbiAgICBASW5wdXQoKSBwdWJsaWMgZGF0YVByb3ZpZGVyPzogSUVkaXRvckRhdGFQcm92aWRlcjxULCBTPjtcbiAgICBASW5wdXQoJ3ZpZXdDb250YWluZXInKSBwdWJsaWMgdmlld0NvbnRhaW5lckluaXQ/OiBJVmlld0NvbnRhaW5lcjxULCBTPjtcblxuICAgIEBPdXRwdXQoJ2FjdGlvblN1Ym1pdCcpIHB1YmxpYyBhY3Rpb25SdW5FdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPFQgfCBudWxsIHwgdW5kZWZpbmVkPigpO1xuICAgIEBPdXRwdXQoJ2FjdGlvbkNhbmNlbCcpIHB1YmxpYyBhY3Rpb25DYW5jZWxFdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPFQgfCBudWxsIHwgdW5kZWZpbmVkPigpO1xuXG4gICAgLy8gY29udGVudCBhbmQgdmlldyBxdWVyaWVzXG4gICAgQENvbnRlbnRDaGlsZHJlbihNbmdUZW1wbGF0ZURpcmVjdGl2ZSkgcHVibGljIHRlbXBsYXRlcyE6IFF1ZXJ5TGlzdDxNbmdUZW1wbGF0ZURpcmVjdGl2ZT47XG4gICAgQFZpZXdDaGlsZCgnc3VibWl0QnV0dG9uJykgcHVibGljIHN1Ym1pdEJ1dHRvbkVsZW1lbnRSZWYhOiBFbGVtZW50UmVmO1xuICAgIEBWaWV3Q2hpbGQoTW5nRm9ybUVkaXRvckNvbXBvbmVudCkgcHVibGljIGVkaXRvckNvbXBvbmVudCE6IE1uZ0Zvcm1FZGl0b3JDb21wb25lbnQ8VD47XG5cbiAgICBwdWJsaWMgdGl0bGU/OiBzdHJpbmc7XG4gICAgcHVibGljIGlzRGlhbG9nID0gdHJ1ZTtcbiAgICBwdWJsaWMgaXNGb3JtRGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIC8vIGFjdGlvbnNcbiAgICBwdWJsaWMgaXRlbUlkPzogSWRUeXBlO1xuICAgIHB1YmxpYyBpdGVtPzogVDtcbiAgICBwcml2YXRlIGluc3RhbmNlPzogQWN0aW9uSW5zdGFuY2U8VCwgUz47XG4gICAgcHJpdmF0ZSBpbnN0YW5jZVN0YXRlU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgaW5zdGFuY2VSZWFjdGl2YXRpb25TdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBpbnN0YW5jZVN1Ym1pdEZvcm1JdGVtPzogVCB8IG51bGw7XG4gICAgcHJpdmF0ZSBpbnN0YW5jZVN1Ym1pdFJlc3VsdD86IFQgfCBudWxsO1xuICAgIHByaXZhdGUgcHJldmlvdXNBY3Rpb25JbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPHVua25vd24sIHVua25vd24+O1xuICAgIHB1YmxpYyB0b29sYmFyTGVmdEFjdGlvbnM6IEFjdGlvbkRlc2NyaXB0b3I8VD5bXSA9IFtdO1xuICAgIHB1YmxpYyB0b29sYmFyUmlnaHRBY3Rpb25zOiBBY3Rpb25EZXNjcmlwdG9yPFQ+W10gPSBbXTtcbiAgICBwdWJsaWMgZm9vdGVyTGVmdEFjdGlvbnM6IEFjdGlvbkRlc2NyaXB0b3I8VD5bXSA9IFtdO1xuICAgIHB1YmxpYyBmb290ZXJSaWdodEFjdGlvbnM6IEFjdGlvbkRlc2NyaXB0b3I8VD5bXSA9IFtdO1xuXG4gICAgcHJpdmF0ZSBsb2FkaW5nU3ViamVjdCA9IG5ldyBSZXBsYXlTdWJqZWN0PGJvb2xlYW4+KDEpO1xuICAgIHB1YmxpYyBsb2FkaW5nJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMubG9hZGluZ1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgcHJpdmF0ZSBmZXRjaEV4ZWN1dGlvblN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIHN1Ym1pdEFjdGlvbklkU3ViamVjdCA9IG5ldyBSZXBsYXlTdWJqZWN0PGJvb2xlYW4+KDEpO1xuICAgIHByaXZhdGUgc3VibWl0TG9hZGluZ1N1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdDxib29sZWFuPigxKTtcbiAgICBwdWJsaWMgc3VibWl0TG9hZGluZyQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLnN1Ym1pdExvYWRpbmdTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHByaXZhdGUgc3VibWl0RXhlY3V0aW9uU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gICAgcHVibGljIHZpZXdDb250YWluZXI/OiBJVmlld0NvbnRhaW5lcjxULCBTPjtcbiAgICBwdWJsaWMgZGlhbG9nUm91dGU/OiBBY3RpdmF0ZWRSb3V0ZTtcbiAgICBwcml2YXRlIHNvdXJjZUNvbXBvbmVudDogYW55ID0gdGhpcztcblxuICAgIHByaXZhdGUgc3Vic2NyaXB0aW9uczogQXJyYXk8U3Vic2NyaXB0aW9uPiA9IFtdO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGFjdGlvbkV4ZWN1dG9yOiBNbmdBY3Rpb25FeGVjdXRvclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbW5nQ29tbW9uc1NlcnZpY2U6IE1uZ0NvbW1vbnNTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNvbmZpcm1hdGlvblNlcnZpY2U6IENvbmZpcm1hdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBkaWFsb2dDb25maWc6IER5bmFtaWNEaWFsb2dDb25maWcgfCBudWxsLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHZpZXdDb250YWluZXJTZXJ2aWNlOiBNbmdWaWV3Q29udGFpbmVyQ29tcG9uZW50U2VydmljZTxULCBTPiB8IG51bGxcbiAgICApIHt9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplQXNEaWFsb2coKTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplQXNTdGFuZGFsb25lKCk7XG5cbiAgICAgICAgLy8gYXJyYW5nZSB0aGUgc3ViLWFjdGlvbnNcbiAgICAgICAgdGhpcy5pbml0aWFsaXplU3ViQWN0aW9ucygpO1xuXG4gICAgICAgIC8vIG5vdGlmeSBleGVjdXRvciB0byBmb3IgYWN0aXZhdGlvbiB0byBlbmRcbiAgICAgICAgdGhpcy5wcm9jZXNzQWN0aW9uSW5zdGFuY2UodGhpcy5hY3Rpb25FeGVjdXRvci5vbkFjdGlvbkVkaXRvckluaXQodGhpcy5hY3Rpb24sIHRoaXMuaW5zdGFuY2UsIHRoaXMpKTtcblxuICAgICAgICAvLyBzZXQgdGl0bGVcbiAgICAgICAgdGhpcy51cGRhdGVUaXRsZSgpO1xuXG4gICAgICAgIC8vIHN1YnNjcmliZSB0byBldmVudHMgdGhhdCBjb3VsZCBiZSB0cmlnZ2VyZWQgZnJvbSBvdXRzaWRlIGZyb20gYW55IHJlYXNvblxuICAgICAgICBpZiAodHlwZW9mICh0aGlzLnZpZXdDb250YWluZXIgYXMgSVZpZXdDb250YWluZXJFZGl0b3I8VCwgUz4pPy5nZXRFZGl0b3JSZXNldCQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXdDb250YWluZXJFZGl0b3IgPSB0aGlzLnZpZXdDb250YWluZXIgYXMgSVZpZXdDb250YWluZXJFZGl0b3I8VCwgUz47XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgICB2aWV3Q29udGFpbmVyRWRpdG9yLmdldEVkaXRvclJlc2V0JCgpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgICAgIG5leHQ6IGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuZmV0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZldGNoSXRlbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlLml0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVkaXRvckNvbXBvbmVudD8ucmVzZXRGb3JtTW9kZWwoZS5pdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZS5maWVsZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBlLmZpZWxkcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVkaXRvckNvbXBvbmVudD8ucmVzZXRGb3JtRmllbGRWYWx1ZShrZXksIGUuZmllbGRzW2tleV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiAodGhpcy52aWV3Q29udGFpbmVyIGFzIElWaWV3Q29udGFpbmVyRWRpdG9yPFQsIFM+KT8uZ2V0RWRpdG9yQ2xvc2UkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjb25zdCB2aWV3Q29udGFpbmVyRWRpdG9yID0gdGhpcy52aWV3Q29udGFpbmVyIGFzIElWaWV3Q29udGFpbmVyRWRpdG9yPFQsIFM+O1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgdmlld0NvbnRhaW5lckVkaXRvci5nZXRFZGl0b3JDbG9zZSQoKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbmNlbCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIGlmIChjaGFuZ2VzWyd2aWV3Q29udGFpbmVySW5pdCddICYmICFjaGFuZ2VzWyd2aWV3Q29udGFpbmVySW5pdCddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemVWaWV3Q29udGFpbmVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZXNbJ2l0ZW1JZEluaXQnXSAmJiAhY2hhbmdlc1snaXRlbUlkSW5pdCddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLml0ZW1JZCA9IHRoaXMuaXRlbUlkSW5pdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlc1snaXRlbUluaXQnXSAmJiAhY2hhbmdlc1snaXRlbUluaXQnXS5maXJzdENoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5pdGVtID0gdGhpcy5pdGVtSW5pdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5mZXRjaEV4ZWN1dGlvblN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5zdWJtaXRFeGVjdXRpb25TdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5pbnN0YW5jZTtcbiAgICAgICAgdGhpcy51bnNldEluc3RhbmNlKCk7XG4gICAgICAgIHRoaXMuYWN0aW9uRXhlY3V0b3Iub25BY3Rpb25FZGl0b3JEZXN0cm95KGluc3RhbmNlKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2gocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblN1Ym1pdChldmVudDogTW5nRm9ybUVkaXRvclN1Ym1pdEV2ZW50PFQ+KSB7XG4gICAgICAgIGlmICghdGhpcy5pbnN0YW5jZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE1uZ0ludGVybmFsRXJyb3IoYEFjdGlvbiBpcyBub3QgaW5zdGFudGlhdGVkIGluIGFjdGlvbiBlZGl0b3IgZm9yIGFjdGlvbiAke3RoaXMuYWN0aW9uLmFjdGlvbk5hbWV9LmApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5zdWNjZXNzKSB7XG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlU3VibWl0Rm9ybUl0ZW0gPSBldmVudC5mb3JtSXRlbTtcblxuICAgICAgICAgICAgLy8gcHJlcGFyZSBwYXJhbWV0ZXJzXG4gICAgICAgICAgICBjb25zdCBhY3Rpb25QYXJhbWV0ZXJzID0gbmV3IEFjdGlvblBhcmFtZXRlcnModGhpcy5pdGVtSWQsIGV2ZW50LmZvcm1JdGVtKVxuICAgICAgICAgICAgICAgIC53aXRoQWN0aW9uRGF0YSh0aGlzLmFjdGlvbkRhdGEpXG4gICAgICAgICAgICAgICAgLndpdGhWaWV3Q29udGFpbmVyKHRoaXMudmlld0NvbnRhaW5lcilcbiAgICAgICAgICAgICAgICAud2l0aFNvdXJjZUNvbXBvbmVudCh0aGlzLnNvdXJjZUNvbXBvbmVudCk7XG4gICAgICAgICAgICBpZiAodGhpcy5hY3Rpb24uZWRpdG9yRGVzY3JpcHRvci5pc0xvY2FsaXplZCkge1xuICAgICAgICAgICAgICAgIGFjdGlvblBhcmFtZXRlcnMud2l0aExvY2FsZSh0aGlzLm1uZ0NvbW1vbnNTZXJ2aWNlLmFwcERhdGFMYW5ndWFnZURlZmF1bHQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5hY3Rpb25FeGVjdXRvci5wcmVwYXJlQ29udGV4dEZvckVkaXRvclN1Ym1pdCh0aGlzLmFjdGlvbiwgYWN0aW9uUGFyYW1ldGVycywgdGhpcy5kYXRhUHJvdmlkZXIsIHRoaXMuaW5zdGFuY2UsIHRoaXMucHJldmlvdXNBY3Rpb25JbnN0YW5jZSk7XG5cbiAgICAgICAgICAgIHRoaXMuc3VibWl0RXhlY3V0aW9uU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5zdWJtaXRFeGVjdXRpb25TdWJzY3JpcHRpb24gPSBjb250ZXh0LmV4ZWN1dGlvbiQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6IHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXMgJiYgdHlwZW9mIHJlcyA9PT0gJ29iamVjdCcgJiYgIXRoaXMuaXRlbUlkICYmIHRoaXMuYWN0aW9uLm1vZGVsPy5pZFByb3BlcnR5TmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gY292ZXIgY3JlYXRpb24hXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1JZCA9IHJlc1t0aGlzLmFjdGlvbi5tb2RlbC5pZFByb3BlcnR5TmFtZSBhcyBrZXlvZiBvYmplY3RdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9uUnVuRXZlbnRFbWl0dGVyLm5leHQocmVzKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnN0YW5jZVN1Ym1pdFJlc3VsdCA9IHJlcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5hY3Rpb25FeGVjdXRvci5ydW4oY29udGV4dCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY2FuY2VsKCkge1xuICAgICAgICBpZiAoIXRoaXMuaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oYEFjdGlvbiBlZGl0b3IgY2Fubm90IGJlIGNhbmNlbGVkIGZvciAke3RoaXMuYWN0aW9uLmFjdGlvbk5hbWV9LCBiZWNhdXNlIG5vIGFjdGlvbiBpbnN0YW5jZSBpcyBwcmVzZW50YCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hY3Rpb25DYW5jZWxFdmVudEVtaXR0ZXIubmV4dCh1bmRlZmluZWQpO1xuICAgICAgICB0aGlzLmFjdGlvbkV4ZWN1dG9yLmZpbmlzaEFjdGlvbih0aGlzLmluc3RhbmNlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdHJpZ2dlclN1Ym1pdCgpIHtcbiAgICAgICAgdGhpcy5lZGl0b3JDb21wb25lbnQuc3VibWl0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplQXNEaWFsb2coKSB7XG4gICAgICAgIGlmICghdGhpcy5kaWFsb2dDb25maWc/LmRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuaXNEaWFsb2cgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXNEaWFsb2cgPSB0cnVlO1xuXG4gICAgICAgIC8vIGluaXRpYWxpemUgYWN0aW9uIGZyb20gZGlhbG9nIGRhdGFcbiAgICAgICAgaWYgKHRoaXMuZGlhbG9nQ29uZmlnLmRhdGEuYWN0aW9uSW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc0FjdGlvbkluc3RhbmNlKHRoaXMuZGlhbG9nQ29uZmlnLmRhdGEuYWN0aW9uSW5zdGFuY2UpO1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlhbG9nQ29uZmlnLmRhdGEucHJldmlvdXNBY3Rpb25JbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgIHRoaXMucHJldmlvdXNBY3Rpb25JbnN0YW5jZSA9IHRoaXMuZGlhbG9nQ29uZmlnLmRhdGEucHJldmlvdXNBY3Rpb25JbnN0YW5jZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pbnN0YW5jZSkge1xuICAgICAgICAgICAgdGhpcy5hY3Rpb24gPSB0aGlzLmluc3RhbmNlLmFjdGlvbiBhcyBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yPFQ+O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXRlbUlkID0gdGhpcy5pbnN0YW5jZT8uYWN0aXZhdGlvblBhcmFtZXRlcnM/Lml0ZW1JZDtcbiAgICAgICAgdGhpcy5pdGVtID0gdGhpcy5pbnN0YW5jZT8uYWN0aXZhdGlvblBhcmFtZXRlcnM/Lml0ZW07XG4gICAgICAgIHRoaXMuYWN0aW9uRGF0YSA9IHRoaXMuaW5zdGFuY2U/LmFjdGl2YXRpb25QYXJhbWV0ZXJzPy5hY3Rpb25EYXRhO1xuICAgICAgICB0aGlzLnZpZXdDb250YWluZXIgPSB0aGlzLmluc3RhbmNlPy5hY3RpdmF0aW9uUGFyYW1ldGVycz8udmlld0NvbnRhaW5lciBhcyBJVmlld0NvbnRhaW5lcjxULCBTPjtcbiAgICAgICAgdGhpcy5zb3VyY2VDb21wb25lbnQgPSB0aGlzLmluc3RhbmNlPy5hY3RpdmF0aW9uUGFyYW1ldGVycz8uc291cmNlQ29tcG9uZW50O1xuICAgICAgICB0aGlzLmRpYWxvZ1JvdXRlID0gdGhpcy5pbnN0YW5jZT8uYWN0aXZhdGlvblBhcmFtZXRlcnM/LnJvdXRlO1xuICAgICAgICBpZiAoIXRoaXMuZGF0YVByb3ZpZGVyICYmIHRoaXMudmlld0NvbnRhaW5lcikge1xuICAgICAgICAgICAgY29uc3QgZGF0YVByb3ZpZGVyID0gdGhpcy52aWV3Q29udGFpbmVyLmdldERhdGFQcm92aWRlcigpO1xuICAgICAgICAgICAgaWYgKGRhdGFQcm92aWRlciAmJiB0eXBlb2YgZGF0YVByb3ZpZGVyWydmZXRjaCcgYXMga2V5b2Ygb2JqZWN0XSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVByb3ZpZGVyID0gZGF0YVByb3ZpZGVyIGFzIElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgUz47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRpYWxpemVBc1N0YW5kYWxvbmUoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzRGlhbG9nKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLml0ZW1JZCA9IHRoaXMuaXRlbUlkSW5pdDtcbiAgICAgICAgdGhpcy5pdGVtID0gdGhpcy5pdGVtSW5pdDtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplVmlld0NvbnRhaW5lcigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZVN1YkFjdGlvbnMoKSB7XG4gICAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIHRoaXMuYWN0aW9uLmVkaXRvckFjdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChhY3Rpb24gaW5zdGFuY2VvZiBBY3Rpb25FZGl0b3JTdWJtaXREZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb24uYnV0dG9uLmljb24gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbi5idXR0b24ud2l0aEljb24oYWN0aW9uLnN1Ym1pdFR5cGUgPT09IEFjdGlvbkVkaXRvclN1Ym1pdFR5cGVFbnVtLlN1Ym1pdCA/ICdwaSBwaS1jaGVjaycgOiAncGkgcGktdGltZXMnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb24uYnV0dG9uLmxhYmVsID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb24uYnV0dG9uLndpdGhMYWJlbChhY3Rpb24uc3VibWl0VHlwZSA9PT0gQWN0aW9uRWRpdG9yU3VibWl0VHlwZUVudW0uU3VibWl0ID8gJ2dlbmVyYWwuc2F2ZScgOiB0aGlzLmlzRGlhbG9nID8gJ2dlbmVyYWwuY2xvc2UnIDogJ2dlbmVyYWwuY2FuY2VsJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gYXNzaWduIHJ1biBvcGVyYXRpb25zXG4gICAgICAgICAgICAgICAgYWN0aW9uLndpdGhSdW5Ob3RpZmljYXRpb25TdWNjZXNzKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgaWYgKGFjdGlvbi5zdWJtaXRUeXBlID09PSBBY3Rpb25FZGl0b3JTdWJtaXRUeXBlRW51bS5TdWJtaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uLndpdGhSdW5GdW5jdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXJTdWJtaXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uLndpdGhSdW5GdW5jdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlV2l0aFVuc2F2ZWRDaGFuZ2VzQ29uZmlybWF0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucGxhY2VBY3Rpb25zT25Qb3NpdGlvbnMoYWN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIHRoaXMudmlld0NvbnRhaW5lcj8uZ2V0QWN0aW9ucygpLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZS5wb3NpdGlvblRhYmxldmlld0NhdGVnb3JpZXM/LmluY2x1ZGVzKHRoaXMuYWN0aW9uLnRhYmxldmlld0NhdGVnb3J5ISkpID8/IFtdKSB7XG4gICAgICAgICAgICB0aGlzLnBsYWNlQWN0aW9uc09uUG9zaXRpb25zKGFjdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRvb2xiYXJSaWdodEFjdGlvbnMgPSB0aGlzLnRvb2xiYXJSaWdodEFjdGlvbnMucmV2ZXJzZSgpO1xuICAgICAgICB0aGlzLmZvb3RlclJpZ2h0QWN0aW9ucyA9IHRoaXMuZm9vdGVyUmlnaHRBY3Rpb25zLnJldmVyc2UoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZldGNoSXRlbSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmluc3RhbmNlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgTW5nSW50ZXJuYWxFcnJvcihgQWN0aW9uIGlzIG5vdCBpbnN0YW50aWF0ZWQgaW4gYWN0aW9uIGVkaXRvciBmb3IgYWN0aW9uICR7dGhpcy5hY3Rpb24uYWN0aW9uTmFtZX0uYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhY3Rpb25QYXJhbWV0ZXJzID0gbmV3IEFjdGlvblBhcmFtZXRlcnModGhpcy5pdGVtSWQsIHRoaXMuaXRlbSlcbiAgICAgICAgICAgIC53aXRoQWN0aW9uRGF0YSh0aGlzLmFjdGlvbkRhdGEpXG4gICAgICAgICAgICAud2l0aFZpZXdDb250YWluZXIodGhpcy52aWV3Q29udGFpbmVyKVxuICAgICAgICAgICAgLndpdGhTb3VyY2VDb21wb25lbnQodGhpcy5zb3VyY2VDb21wb25lbnQpO1xuICAgICAgICBpZiAodGhpcy5hY3Rpb24uZWRpdG9yRGVzY3JpcHRvci5pc0xvY2FsaXplZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuYWN0aW9uLmVkaXRvckRlc2NyaXB0b3IuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb25QYXJhbWV0ZXJzLndpdGhMb2NhbGUodGhpcy5tbmdDb21tb25zU2VydmljZS5hcHBEYXRhTGFuZ3VhZ2UhKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uUGFyYW1ldGVycy53aXRoTG9jYWxlKHRoaXMubW5nQ29tbW9uc1NlcnZpY2UuYXBwRGF0YUxhbmd1YWdlRGVmYXVsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2U/LnByZXZpb3VzSW5zdGFuY2U/LmNvbnRleHQ/LnBhcmFtZXRlcnMuaXRlbSkge1xuICAgICAgICAgICAgYWN0aW9uUGFyYW1ldGVycy53aXRoRm9ybUl0ZW0odGhpcy5pbnN0YW5jZT8ucHJldmlvdXNJbnN0YW5jZT8uY29udGV4dD8ucGFyYW1ldGVycy5pdGVtKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW5zdGFuY2U/LnByZXZpb3VzSW5zdGFuY2U/LnJlc3VsdCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGFjdGlvblBhcmFtZXRlcnMud2l0aFN1Ym1pdFJlc3VsdCh0aGlzLmluc3RhbmNlPy5wcmV2aW91c0luc3RhbmNlPy5yZXN1bHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuYWN0aW9uRXhlY3V0b3IucHJlcGFyZUNvbnRleHRGb3JFZGl0b3JGZXRjaCh0aGlzLmFjdGlvbiwgYWN0aW9uUGFyYW1ldGVycywgdGhpcy5kYXRhUHJvdmlkZXIsIHRoaXMuaW5zdGFuY2UsIHRoaXMucHJldmlvdXNBY3Rpb25JbnN0YW5jZSk7XG4gICAgICAgIHRoaXMuZmV0Y2hFeGVjdXRpb25TdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuZmV0Y2hFeGVjdXRpb25TdWJzY3JpcHRpb24gPSBjb250ZXh0LmV4ZWN1dGlvbiQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXRlbSA9IHJlcyA/PyB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlVGl0bGUoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5hY3Rpb25FeGVjdXRvci5ydW4oY29udGV4dCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVUaXRsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuYWN0aW9uLmVkaXRvclRpdGxlID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnRpdGxlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlhbG9nQ29uZmlnKSB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dDb25maWchLmhlYWRlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBJMThuVXRpbHMuQWN0aW9uLmdldEVkaXRvclRpdGxlQXN5bmModGhpcy50cmFuc2xhdGUsIHRoaXMuYWN0aW9uLCB0aGlzLml0ZW0pLnN1YnNjcmliZSh0ID0+IHtcbiAgICAgICAgICAgIHRoaXMudGl0bGUgPSB0ID8/IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpYWxvZ0NvbmZpZykge1xuICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nQ29uZmlnIS5oZWFkZXIgPSB0ID8/IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYWN0aW9uLmFjdGl2YXRpb25UcmlnZ2VyID09PSBBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW0uT25Sb3V0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tbmdDb21tb25zU2VydmljZS5zZXRQYWdlVGl0bGUodCA/PyB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChzdWJzY3JpcHRpb24pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGxhY2VBY3Rpb25zT25Qb3NpdGlvbnMoYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9yPGFueT4pIHtcbiAgICAgICAgc3dpdGNoIChhY3Rpb24ucG9zaXRpb24pIHtcbiAgICAgICAgICAgIGNhc2UgQWN0aW9uUG9zaXRpb25FbnVtLlRvb2xiYXJMZWZ0OlxuICAgICAgICAgICAgICAgIHRoaXMudG9vbGJhckxlZnRBY3Rpb25zLnB1c2goYWN0aW9uKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQWN0aW9uUG9zaXRpb25FbnVtLlRvb2xiYXJSaWdodDpcbiAgICAgICAgICAgICAgICB0aGlzLnRvb2xiYXJSaWdodEFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBBY3Rpb25Qb3NpdGlvbkVudW0uRm9vdGVyTGVmdDpcbiAgICAgICAgICAgICAgICB0aGlzLmZvb3RlckxlZnRBY3Rpb25zLnB1c2goYWN0aW9uKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQWN0aW9uUG9zaXRpb25FbnVtLkZvb3RlclJpZ2h0OlxuICAgICAgICAgICAgICAgIHRoaXMuZm9vdGVyUmlnaHRBY3Rpb25zLnB1c2goYWN0aW9uKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZVZpZXdDb250YWluZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzRGlhbG9nKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyID0gdGhpcy52aWV3Q29udGFpbmVySW5pdCA/PyB0aGlzLnZpZXdDb250YWluZXJTZXJ2aWNlID8/IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEVkaXRvckVuYWJsZWQoaXNFbmFibGVkID0gdHJ1ZSkge1xuICAgICAgICB0aGlzLmlzRm9ybURpc2FibGVkID0gIWlzRW5hYmxlZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHByb2Nlc3NBY3Rpb25JbnN0YW5jZShpbnN0YW5jZTogQWN0aW9uSW5zdGFuY2U8VCwgUz4pIHtcbiAgICAgICAgaWYgKCF0aGlzLmluc3RhbmNlIHx8IHRoaXMuaW5zdGFuY2UuaW5zdGFuY2VMb25nTmFtZSAhPT0gaW5zdGFuY2UuaW5zdGFuY2VMb25nTmFtZSkge1xuICAgICAgICAgICAgdGhpcy51bnNldEluc3RhbmNlKCk7XG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlID0gaW5zdGFuY2U7XG5cbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2VTdGF0ZVN1YnNjcmlwdGlvbiA9IHRoaXMuaW5zdGFuY2Uuc3RhdGUkLnN1YnNjcmliZShzID0+IHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHMpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5BY3RpdmF0aW9uRW5kOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mZXRjaEl0ZW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZldGNoU3RhcnQ6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEVkaXRvckVuYWJsZWQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmV0Y2hFcnJvcjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GZXRjaEVuZDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RWRpdG9yRW5hYmxlZCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5SdW5TdGFydDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RWRpdG9yRW5hYmxlZChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Ym1pdExvYWRpbmdTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5SdW5FbmQ6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uUnVuRXJyb3I6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEVkaXRvckVuYWJsZWQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Ym1pdExvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoRXJyb3JGaW5hbDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RWRpdG9yRW5hYmxlZChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hTdWNjZXNzRmluYWw6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoRGlzbWlzc2VkRmluYWw6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEVkaXRvckVuYWJsZWQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51bnNldEluc3RhbmNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hTdWNjZXNzUmVhY3RpdmF0ZUZpbmFsOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRFZGl0b3JFbmFibGVkKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNob3VsZCBhbHNvIHVuc2V0SW5zdGFuY2UsIGJ1dCBsZXQgdGhpcyBmb3IgcmVhY3RpdmF0aW9uSW5zdGFuY2UkIGxpc3RlbmVyIHRvIG5vdCBpbnRlcmZlcmVcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlUmVhY3RpdmF0aW9uU3Vic2NyaXB0aW9uID0gdGhpcy5pbnN0YW5jZS5yZWFjdGl2YXRpb25JbnN0YW5jZSQuc3Vic2NyaWJlKG5ld0luc3RhbmNlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NBY3Rpb25JbnN0YW5jZShuZXdJbnN0YW5jZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpiZWZvcmV1bmxvYWQnKVxuICAgIHByaXZhdGUgYmVmb3JlV2luZG93VW5sb2FkKCkge1xuICAgICAgICBpZiAodGhpcy5pc0RpYWxvZyAmJiAhdGhpcy5lZGl0b3JDb21wb25lbnQuZm9ybS5wcmlzdGluZSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbmZpcm0odGhpcy50cmFuc2xhdGUuaW5zdGFudCgnbW5nRWRpdG9yLnVuc2F2ZWRDaGFuZ2VzQ29uZmlybWF0aW9uLm1lc3NhZ2UnKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignd2luZG93OmtleWRvd24uRXNjYXBlJylcbiAgICBwcml2YXRlIG9uRXNjYXBlUHJlc3NlZCgpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pc0RpYWxvZyAmJlxuICAgICAgICAgICAgdGhpcy5hY3Rpb24uYWN0aXZhdGlvblRyaWdnZXIgPT09IEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bS5PblJvdXRlICYmXG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlPy5hY3RpdmF0aW9uRGlhbG9nUmVmICYmXG4gICAgICAgICAgICBwYXJzZUludCh0aGlzLmRpYWxvZ1NlcnZpY2UuZGlhbG9nQ29tcG9uZW50UmVmTWFwLmdldCh0aGlzLmluc3RhbmNlPy5hY3RpdmF0aW9uRGlhbG9nUmVmKT8uaW5zdGFuY2UuY29udGFpbmVyPy5zdHlsZS56SW5kZXggPz8gJycpID09PSBaSW5kZXhVdGlscy5nZXRDdXJyZW50KClcbiAgICAgICAgKVxuICAgICAgICAgICAgdGhpcy5jbG9zZVdpdGhVbnNhdmVkQ2hhbmdlc0NvbmZpcm1hdGlvbigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2hvd1Vuc2F2ZWRDaGFuZ2VzQ29uZmlybWF0aW9uRGlhbG9nKGNhbGxGcm9tR3VhcmQ6IGJvb2xlYW4pOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgY29uc3Qgc3ViamVjdCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gICAgICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcbiAgICAgICAgICAgIGhlYWRlcjogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnbW5nRWRpdG9yLnVuc2F2ZWRDaGFuZ2VzQ29uZmlybWF0aW9uLmhlYWRlcicpLFxuICAgICAgICAgICAgbWVzc2FnZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnbW5nRWRpdG9yLnVuc2F2ZWRDaGFuZ2VzQ29uZmlybWF0aW9uLm1lc3NhZ2UnKSxcbiAgICAgICAgICAgIGFjY2VwdExhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdnZW5lcmFsLnllcycpLFxuICAgICAgICAgICAgcmVqZWN0TGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2dlbmVyYWwubm8nKSxcbiAgICAgICAgICAgIGljb246ICdwaSBwaS1leGNsYW1hdGlvbi10cmlhbmdsZScsXG4gICAgICAgICAgICBhY2NlcHQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWNhbGxGcm9tR3VhcmQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYW5jZWwoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3ViamVjdC5uZXh0KHRydWUpO1xuICAgICAgICAgICAgICAgIHN1YmplY3QuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZWplY3Q6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBzdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgICAgIHN1YmplY3QuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBrZXk6IHRoaXMuY29uZmlybURpYWxvZ0tleVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsb3NlV2l0aFVuc2F2ZWRDaGFuZ2VzQ29uZmlybWF0aW9uKGNhbGxGcm9tR3VhcmQgPSBmYWxzZSk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICBpZiAoIXRoaXMuZWRpdG9yQ29tcG9uZW50LmZvcm0ucHJpc3RpbmUgJiYgdGhpcy5hY3Rpb24udW5zYXZlZENoYW5nZXNDb25maXJtYXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNob3dVbnNhdmVkQ2hhbmdlc0NvbmZpcm1hdGlvbkRpYWxvZyhjYWxsRnJvbUd1YXJkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghY2FsbEZyb21HdWFyZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FuY2VsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb2YodHJ1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1bnNldEluc3RhbmNlKCkge1xuICAgICAgICB0aGlzLmluc3RhbmNlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmluc3RhbmNlU3RhdGVTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuaW5zdGFuY2VSZWFjdGl2YXRpb25TdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgfVxufVxuIiwiPGg1ICpuZ0lmPVwiIWlzRGlhbG9nICYmIHRpdGxlXCI+e3sgdGl0bGUgfX08L2g1PlxuPHNwYW4gKm5nSWY9XCJpc0RpYWxvZyAmJiBhY3Rpb24uYWN0aXZhdGlvblRyaWdnZXIgPT09IEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bS5PblJvdXRlXCIgY2xhc3M9XCJwLWRpYWxvZy1oZWFkZXIgZGlhbG9nLWNsb3NlLWJ1dHRvbi13cmFwcGVyXCI+XG4gICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cInAtZGlhbG9nLWhlYWRlci1pY29uIHAtZGlhbG9nLWhlYWRlci1tYXhpbWl6ZSBwLWxpbmtcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgKGNsaWNrKT1cImNsb3NlV2l0aFVuc2F2ZWRDaGFuZ2VzQ29uZmlybWF0aW9uKClcIlxuICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJjbG9zZVdpdGhVbnNhdmVkQ2hhbmdlc0NvbmZpcm1hdGlvbigpXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwicC1kaWFsb2ctaGVhZGVyLWNsb3NlLWljb24gcGkgcGktdGltZXNcIj48L3NwYW4+XG4gICAgPC9idXR0b24+XG48L3NwYW4+XG48ZGl2IGNsYXNzPVwiaC1mdWxsIGZsZXggZmxleC1jb2x1bW5cIj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93LTEgbW5nLWFjdGlvbi1lZGl0b3ItdG9vbGJhci1jb250YWluZXJcIiAqbmdJZj1cInRvb2xiYXJMZWZ0QWN0aW9ucy5sZW5ndGggPiAwIHx8IHRvb2xiYXJSaWdodEFjdGlvbnMubGVuZ3RoID4gMFwiPlxuICAgICAgICA8cC10b29sYmFyIHN0eWxlQ2xhc3M9XCJtbmctYWN0aW9uLWVkaXRvci10b29sYmFyXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwibGVmdFwiPlxuICAgICAgICAgICAgICAgIDxtbmctYWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgdG9vbGJhckxlZnRBY3Rpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgW2FjdGlvbl09XCJhY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic3VibWl0TG9hZGluZyRcIlxuICAgICAgICAgICAgICAgICAgICBbbG9hZGluZ109XCIkYW55KGFjdGlvbikuc3VibWl0VHlwZSA9PT0gYWN0aW9uRWRpdG9yU3VibWl0VHlwZVN1Ym1pdCA/IHN1Ym1pdExvYWRpbmckIDogYWN0aW9uRGVmYXVsdExvYWRpbmdJbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgIFt2aWV3Q29udGFpbmVyXT1cInZpZXdDb250YWluZXJcIlxuICAgICAgICAgICAgICAgICAgICBbaG9zdENvbXBvbmVudF09XCJ0aGlzXCJcbiAgICAgICAgICAgICAgICAgICAgW3JvdXRlXT1cImRpYWxvZ1JvdXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW2l0ZW1dPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtSWRdPVwiaXRlbUlkXCI+PC9tbmctYWN0aW9uPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJyaWdodFwiPlxuICAgICAgICAgICAgICAgIDxtbmctYWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgdG9vbGJhclJpZ2h0QWN0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgIFthY3Rpb25dPVwiYWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInN1Ym1pdExvYWRpbmckXCJcbiAgICAgICAgICAgICAgICAgICAgW2xvYWRpbmddPVwiJGFueShhY3Rpb24pLnN1Ym1pdFR5cGUgPT09IGFjdGlvbkVkaXRvclN1Ym1pdFR5cGVTdWJtaXQgPyBzdWJtaXRMb2FkaW5nJCA6IGFjdGlvbkRlZmF1bHRMb2FkaW5nSW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICBbdmlld0NvbnRhaW5lcl09XCJ2aWV3Q29udGFpbmVyXCJcbiAgICAgICAgICAgICAgICAgICAgW2hvc3RDb21wb25lbnRdPVwidGhpc1wiXG4gICAgICAgICAgICAgICAgICAgIFtyb3V0ZV09XCJkaWFsb2dSb3V0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtXT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgICAgICBbaXRlbUlkXT1cIml0ZW1JZFwiPjwvbW5nLWFjdGlvbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvcC10b29sYmFyPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xIG1uZy1hY3Rpb24tZWRpdG9yLWZvcm0tY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiICpuZ0lmPVwibG9hZGluZyQgfCBhc3luY1wiPlxuICAgICAgICAgICAgPHAtcHJvZ3Jlc3NTcGlubmVyIFtzdHlsZV09XCJ7d2lkdGg6ICczcmVtJywgaGVpZ2h0OiAnM3JlbSd9XCIgc3Ryb2tlV2lkdGg9XCIzXCI+PC9wLXByb2dyZXNzU3Bpbm5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxtbmctZm9ybS1lZGl0b3JcbiAgICAgICAgICAgICpuZ0lmPVwiYWN0aW9uLmVkaXRvckRlc2NyaXB0b3IgJiYgKGxvYWRpbmckIHwgYXN5bmMpID09PSBmYWxzZVwiXG4gICAgICAgICAgICBbZGVzY3JpcHRvcl09XCJhY3Rpb24uZWRpdG9yRGVzY3JpcHRvclwiXG4gICAgICAgICAgICBbaXRlbV09XCJpdGVtXCJcbiAgICAgICAgICAgIFt2aWV3Q29udGFpbmVyXT1cInZpZXdDb250YWluZXJcIlxuICAgICAgICAgICAgW2lzRm9ybURpc2FibGVkXT1cImlzRm9ybURpc2FibGVkXCJcbiAgICAgICAgICAgIChmb3JtU3VibWl0KT1cIm9uU3VibWl0KCRldmVudClcIj5cbiAgICAgICAgPC9tbmctZm9ybS1lZGl0b3I+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtbmctYWN0aW9uLWVkaXRvci1mb290ZXItY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8bW5nLWFjdGlvblxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgZm9vdGVyTGVmdEFjdGlvbnNcIlxuICAgICAgICAgICAgICAgIFthY3Rpb25dPVwiYWN0aW9uXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic3VibWl0TG9hZGluZyRcIlxuICAgICAgICAgICAgICAgIFtsb2FkaW5nXT1cIiRhbnkoYWN0aW9uKS5zdWJtaXRUeXBlID09PSBhY3Rpb25FZGl0b3JTdWJtaXRUeXBlU3VibWl0ID8gc3VibWl0TG9hZGluZyQgOiBhY3Rpb25EZWZhdWx0TG9hZGluZ0lucHV0XCJcbiAgICAgICAgICAgICAgICBbdmlld0NvbnRhaW5lcl09XCJ2aWV3Q29udGFpbmVyXCJcbiAgICAgICAgICAgICAgICBbaG9zdENvbXBvbmVudF09XCJ0aGlzXCJcbiAgICAgICAgICAgICAgICBbcm91dGVdPVwiZGlhbG9nUm91dGVcIlxuICAgICAgICAgICAgICAgIFtpdGVtXT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgIFtpdGVtSWRdPVwiaXRlbUlkXCI+PC9tbmctYWN0aW9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxtbmctYWN0aW9uXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBmb290ZXJSaWdodEFjdGlvbnNcIlxuICAgICAgICAgICAgICAgIFthY3Rpb25dPVwiYWN0aW9uXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic3VibWl0TG9hZGluZyRcIlxuICAgICAgICAgICAgICAgIFtsb2FkaW5nXT1cIiRhbnkoYWN0aW9uKS5zdWJtaXRUeXBlID09PSBhY3Rpb25FZGl0b3JTdWJtaXRUeXBlU3VibWl0ID8gc3VibWl0TG9hZGluZyQgOiBhY3Rpb25EZWZhdWx0TG9hZGluZ0lucHV0XCJcbiAgICAgICAgICAgICAgICBbdmlld0NvbnRhaW5lcl09XCJ2aWV3Q29udGFpbmVyXCJcbiAgICAgICAgICAgICAgICBbaG9zdENvbXBvbmVudF09XCJ0aGlzXCJcbiAgICAgICAgICAgICAgICBbcm91dGVdPVwiZGlhbG9nUm91dGVcIlxuICAgICAgICAgICAgICAgIFtpdGVtXT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgIFtpdGVtSWRdPVwiaXRlbUlkXCI+PC9tbmctYWN0aW9uPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuPHAtY29uZmlybURpYWxvZyBba2V5XT1cImNvbmZpcm1EaWFsb2dLZXlcIiBbYmFzZVpJbmRleF09XCI1MFwiIGFwcGVuZFRvPVwiYm9keVwiPjwvcC1jb25maXJtRGlhbG9nPlxuIl19
471
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWVkaXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvYWN0aW9uL2VkaXRvci9hY3Rpb24tZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9hY3Rpb24vZWRpdG9yL2FjdGlvbi1lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFJTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFFVCxTQUFTLEVBQ1QsTUFBTSxFQUNULE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUNoRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsYUFBYSxFQUFzQixNQUFNLHVCQUF1QixDQUFDO0FBQ3pFLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBYSxhQUFhLEVBQUUsT0FBTyxFQUFnQixFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDMUUsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBR3BDLE9BQU8s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QUFLO3VCQUFDLGVBQWU7Z0JBRVMscUJBQXFCO3NCQUFuRCxNQUFNO3VCQUFDLGNBQWM7Z0JBQ1Msd0JBQXdCO3NCQUF0RCxNQUFNO3VCQUFDLGNBQWM7Z0JBR3dCLFNBQVM7c0JBQXRELGVBQWU7dUJBQUMsb0JBQW9CO2dCQUNILHNCQUFzQjtzQkFBdkQsU0FBUzt1QkFBQyxjQUFjO2dCQUNpQixlQUFlO3NCQUF4RCxTQUFTO3VCQUFDLHNCQUFzQjtnQkF3WXpCLGtCQUFrQjtzQkFEekIsWUFBWTt1QkFBQyxxQkFBcUI7Z0JBUzNCLGVBQWU7c0JBRHRCLFlBQVk7dUJBQUMsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBc3luY1BpcGUsIE5nRm9yT2YsIE5nSWZ9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBWaWV3Q2hpbGQsXG4gICAgaW5qZWN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7Q29uZmlybWF0aW9uU2VydmljZX0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHtDb25maXJtRGlhbG9nTW9kdWxlfSBmcm9tICdwcmltZW5nL2NvbmZpcm1kaWFsb2cnO1xuaW1wb3J0IHtEaWFsb2dTZXJ2aWNlLCBEeW5hbWljRGlhbG9nQ29uZmlnfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xuaW1wb3J0IHtQcm9ncmVzc1NwaW5uZXJNb2R1bGV9IGZyb20gJ3ByaW1lbmcvcHJvZ3Jlc3NzcGlubmVyJztcbmltcG9ydCB7VG9vbGJhck1vZHVsZX0gZnJvbSAncHJpbWVuZy90b29sYmFyJztcbmltcG9ydCB7WkluZGV4VXRpbHN9IGZyb20gJ3ByaW1lbmcvdXRpbHMnO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBSZXBsYXlTdWJqZWN0LCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIG9mfSBmcm9tICdyeGpzJztcbmltcG9ydCB7dGFrZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge0lFZGl0b3JEYXRhUHJvdmlkZXJ9IGZyb20gJy4uLy4uLy4uL2RhdGEtcHJvdmlkZXJzJztcbmltcG9ydCB7QWN0aW9uRGVzY3JpcHRvciwgQWN0aW9uRWRpdG9yRGVzY3JpcHRvciwgQWN0aW9uRWRpdG9yU3VibWl0RGVzY3JpcHRvcn0gZnJvbSAnLi4vLi4vLi4vZGVzY3JpcHRvcnMvYWN0aW9uJztcbmltcG9ydCB7QWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLCBBY3Rpb25FZGl0b3JTdWJtaXRUeXBlRW51bSwgQWN0aW9uUG9zaXRpb25FbnVtLCBBY3Rpb25UeXBlRW51bX0gZnJvbSAnLi4vLi4vLi4vZGVzY3JpcHRvcnMvdHlwZXMnO1xuaW1wb3J0IHtNbmdUZW1wbGF0ZURpcmVjdGl2ZX0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlcyc7XG5pbXBvcnQge0lBY3Rpb25FZGl0b3JDb21wb25lbnQsIElWaWV3Q29udGFpbmVyLCBJVmlld0NvbnRhaW5lckVkaXRvciwgTW5nSW50ZXJuYWxFcnJvcn0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7TW5nQWN0aW9uRXhlY3V0b3JTZXJ2aWNlLCBNbmdDb21tb25zU2VydmljZSwgTW5nTG9nZ2VyU2VydmljZSwgTW5nVmlld0NvbnRhaW5lckNvbXBvbmVudFNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7SWRUeXBlfSBmcm9tICcuLi8uLi8uLi90eXBlcyc7XG5pbXBvcnQge0kxOG5VdGlsc30gZnJvbSAnLi4vLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHtNbmdGb3JtRWRpdG9yQ29tcG9uZW50fSBmcm9tICcuLi8uLi9mb3JtJztcbmltcG9ydCB7TW5nRm9ybUVkaXRvclN1Ym1pdEV2ZW50fSBmcm9tICcuLi8uLi9mb3JtL21vZGVscyc7XG5pbXBvcnQge01uZ0FjdGlvbkNvbXBvbmVudH0gZnJvbSAnLi4vYWN0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQge0FjdGlvbkRhdGEsIEFjdGlvbkluc3RhbmNlLCBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bSwgQWN0aW9uUGFyYW1ldGVyc30gZnJvbSAnLi4vbW9kZWxzJztcblxuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ21uZy1hY3Rpb24tZWRpdG9yJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYWN0aW9uLWVkaXRvci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJ2FjdGlvbi1lZGl0b3IuY29tcG9uZW50LnNjc3MnXSxcbiAgICBpbXBvcnRzOiBbTmdJZiwgVG9vbGJhck1vZHVsZSwgTW5nQWN0aW9uQ29tcG9uZW50LCBOZ0Zvck9mLCBBc3luY1BpcGUsIFByb2dyZXNzU3Bpbm5lck1vZHVsZSwgTW5nRm9ybUVkaXRvckNvbXBvbmVudCwgQ29uZmlybURpYWxvZ01vZHVsZV0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgTW5nQWN0aW9uRWRpdG9yQ29tcG9uZW50PFQsIFM+IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgSUFjdGlvbkVkaXRvckNvbXBvbmVudCB7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bSA9IEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgY21wSWQgPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMik7XG4gICAgcHVibGljIHJlYWRvbmx5IGNvbmZpcm1EaWFsb2dLZXkgPSBgJGFjdGlvbkVkaXRvcl9jb25maXJtXyR7dGhpcy5jbXBJZH1gO1xuICAgIHB1YmxpYyByZWFkb25seSBhY3Rpb25FZGl0b3JTdWJtaXRUeXBlU3VibWl0ID0gQWN0aW9uRWRpdG9yU3VibWl0VHlwZUVudW0uU3VibWl0O1xuICAgIHB1YmxpYyByZWFkb25seSBhY3Rpb25EZWZhdWx0TG9hZGluZ0lucHV0ID0gb2YoZmFsc2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyID0gaW5qZWN0KE1uZ0xvZ2dlclNlcnZpY2UpLmNyZWF0ZSgnTW5nQWN0aW9uRWRpdG9yQ29tcG9uZW50Jyk7XG5cbiAgICAvLyBtZXRhZGF0YSBhbmQgZWRpdG9yIG1vZGUgaW5wdXRcbiAgICBASW5wdXQoe3JlcXVpcmVkOiB0cnVlfSkgcHVibGljIGFjdGlvbiE6IEFjdGlvbkVkaXRvckRlc2NyaXB0b3I8VD47XG5cbiAgICAvLyBkYXRhIHNvdXJjZSBpbnB1dHNcbiAgICBASW5wdXQoJ2l0ZW1JZCcpIHB1YmxpYyBpdGVtSWRJbml0PzogSWRUeXBlO1xuICAgIEBJbnB1dCgnaXRlbScpIHB1YmxpYyBpdGVtSW5pdD86IFQ7XG4gICAgQElucHV0KCkgcHVibGljIGFjdGlvbkRhdGE/OiBBY3Rpb25EYXRhO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBkYXRhUHJvdmlkZXI/OiBJRWRpdG9yRGF0YVByb3ZpZGVyPFQsIFM+O1xuICAgIEBJbnB1dCgndmlld0NvbnRhaW5lcicpIHB1YmxpYyB2aWV3Q29udGFpbmVySW5pdD86IElWaWV3Q29udGFpbmVyPFQsIFM+O1xuXG4gICAgQE91dHB1dCgnYWN0aW9uU3VibWl0JykgcHVibGljIGFjdGlvblJ1bkV2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8VCB8IG51bGwgfCB1bmRlZmluZWQ+KCk7XG4gICAgQE91dHB1dCgnYWN0aW9uQ2FuY2VsJykgcHVibGljIGFjdGlvbkNhbmNlbEV2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8VCB8IG51bGwgfCB1bmRlZmluZWQ+KCk7XG5cbiAgICAvLyBjb250ZW50IGFuZCB2aWV3IHF1ZXJpZXNcbiAgICBAQ29udGVudENoaWxkcmVuKE1uZ1RlbXBsYXRlRGlyZWN0aXZlKSBwdWJsaWMgdGVtcGxhdGVzITogUXVlcnlMaXN0PE1uZ1RlbXBsYXRlRGlyZWN0aXZlPjtcbiAgICBAVmlld0NoaWxkKCdzdWJtaXRCdXR0b24nKSBwdWJsaWMgc3VibWl0QnV0dG9uRWxlbWVudFJlZiE6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZChNbmdGb3JtRWRpdG9yQ29tcG9uZW50KSBwdWJsaWMgZWRpdG9yQ29tcG9uZW50ITogTW5nRm9ybUVkaXRvckNvbXBvbmVudDxUPjtcblxuICAgIHB1YmxpYyB0aXRsZT86IHN0cmluZztcbiAgICBwdWJsaWMgaXNEaWFsb2cgPSB0cnVlO1xuICAgIHB1YmxpYyBpc0Zvcm1EaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgLy8gYWN0aW9uc1xuICAgIHB1YmxpYyBpdGVtSWQ/OiBJZFR5cGU7XG4gICAgcHVibGljIGl0ZW0/OiBUO1xuICAgIHByaXZhdGUgaW5zdGFuY2U/OiBBY3Rpb25JbnN0YW5jZTxULCBTPjtcbiAgICBwcml2YXRlIGluc3RhbmNlU3RhdGVTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBpbnN0YW5jZVJlYWN0aXZhdGlvblN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIGluc3RhbmNlU3VibWl0Rm9ybUl0ZW0/OiBUIHwgbnVsbDtcbiAgICBwcml2YXRlIGluc3RhbmNlU3VibWl0UmVzdWx0PzogVCB8IG51bGw7XG4gICAgcHJpdmF0ZSBwcmV2aW91c0FjdGlvbkluc3RhbmNlPzogQWN0aW9uSW5zdGFuY2U8dW5rbm93biwgdW5rbm93bj47XG4gICAgcHVibGljIHRvb2xiYXJMZWZ0QWN0aW9uczogQWN0aW9uRGVzY3JpcHRvcjxUPltdID0gW107XG4gICAgcHVibGljIHRvb2xiYXJSaWdodEFjdGlvbnM6IEFjdGlvbkRlc2NyaXB0b3I8VD5bXSA9IFtdO1xuICAgIHB1YmxpYyBmb290ZXJMZWZ0QWN0aW9uczogQWN0aW9uRGVzY3JpcHRvcjxUPltdID0gW107XG4gICAgcHVibGljIGZvb3RlclJpZ2h0QWN0aW9uczogQWN0aW9uRGVzY3JpcHRvcjxUPltdID0gW107XG5cbiAgICBwcml2YXRlIGxvYWRpbmdTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8Ym9vbGVhbj4oMSk7XG4gICAgcHVibGljIGxvYWRpbmckOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5sb2FkaW5nU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICBwcml2YXRlIGZldGNoRXhlY3V0aW9uU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgc3VibWl0QWN0aW9uSWRTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8Ym9vbGVhbj4oMSk7XG4gICAgcHJpdmF0ZSBzdWJtaXRMb2FkaW5nU3ViamVjdCA9IG5ldyBSZXBsYXlTdWJqZWN0PGJvb2xlYW4+KDEpO1xuICAgIHB1YmxpYyBzdWJtaXRMb2FkaW5nJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuc3VibWl0TG9hZGluZ1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgcHJpdmF0ZSBzdWJtaXRFeGVjdXRpb25TdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgICBwdWJsaWMgdmlld0NvbnRhaW5lcj86IElWaWV3Q29udGFpbmVyPFQsIFM+O1xuICAgIHB1YmxpYyBkaWFsb2dSb3V0ZT86IEFjdGl2YXRlZFJvdXRlO1xuICAgIHByaXZhdGUgc291cmNlQ29tcG9uZW50OiBhbnkgPSB0aGlzO1xuXG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBBcnJheTxTdWJzY3JpcHRpb24+ID0gW107XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgYWN0aW9uRXhlY3V0b3I6IE1uZ0FjdGlvbkV4ZWN1dG9yU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBtbmdDb21tb25zU2VydmljZTogTW5nQ29tbW9uc1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgY29uZmlybWF0aW9uU2VydmljZTogQ29uZmlybWF0aW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGRpYWxvZ0NvbmZpZzogRHluYW1pY0RpYWxvZ0NvbmZpZyB8IG51bGwsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgdmlld0NvbnRhaW5lclNlcnZpY2U6IE1uZ1ZpZXdDb250YWluZXJDb21wb25lbnRTZXJ2aWNlPFQsIFM+IHwgbnVsbFxuICAgICkge31cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmluaXRpYWxpemVBc0RpYWxvZygpO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVBc1N0YW5kYWxvbmUoKTtcblxuICAgICAgICAvLyBhcnJhbmdlIHRoZSBzdWItYWN0aW9uc1xuICAgICAgICB0aGlzLmluaXRpYWxpemVTdWJBY3Rpb25zKCk7XG5cbiAgICAgICAgLy8gbm90aWZ5IGV4ZWN1dG9yIHRvIGZvciBhY3RpdmF0aW9uIHRvIGVuZFxuICAgICAgICB0aGlzLnByb2Nlc3NBY3Rpb25JbnN0YW5jZSh0aGlzLmFjdGlvbkV4ZWN1dG9yLm9uQWN0aW9uRWRpdG9ySW5pdCh0aGlzLmFjdGlvbiwgdGhpcy5pbnN0YW5jZSwgdGhpcykpO1xuXG4gICAgICAgIC8vIHNldCB0aXRsZVxuICAgICAgICB0aGlzLnVwZGF0ZVRpdGxlKCk7XG5cbiAgICAgICAgLy8gc3Vic2NyaWJlIHRvIGV2ZW50cyB0aGF0IGNvdWxkIGJlIHRyaWdnZXJlZCBmcm9tIG91dHNpZGUgZnJvbSBhbnkgcmVhc29uXG4gICAgICAgIGlmICh0eXBlb2YgKHRoaXMudmlld0NvbnRhaW5lciBhcyBJVmlld0NvbnRhaW5lckVkaXRvcjxULCBTPik/LmdldEVkaXRvclJlc2V0JCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY29uc3Qgdmlld0NvbnRhaW5lckVkaXRvciA9IHRoaXMudmlld0NvbnRhaW5lciBhcyBJVmlld0NvbnRhaW5lckVkaXRvcjxULCBTPjtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAgIHZpZXdDb250YWluZXJFZGl0b3IuZ2V0RWRpdG9yUmVzZXQkKCkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5mZXRjaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2hJdGVtKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGUuaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yQ29tcG9uZW50Py5yZXNldEZvcm1Nb2RlbChlLml0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlLmZpZWxkcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIGUuZmllbGRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yQ29tcG9uZW50Py5yZXNldEZvcm1GaWVsZFZhbHVlKGtleSwgZS5maWVsZHNba2V5XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mICh0aGlzLnZpZXdDb250YWluZXIgYXMgSVZpZXdDb250YWluZXJFZGl0b3I8VCwgUz4pPy5nZXRFZGl0b3JDbG9zZSQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXdDb250YWluZXJFZGl0b3IgPSB0aGlzLnZpZXdDb250YWluZXIgYXMgSVZpZXdDb250YWluZXJFZGl0b3I8VCwgUz47XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgICB2aWV3Q29udGFpbmVyRWRpdG9yLmdldEVkaXRvckNsb3NlJCgpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FuY2VsKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgaWYgKGNoYW5nZXNbJ3ZpZXdDb250YWluZXJJbml0J10gJiYgIWNoYW5nZXNbJ3ZpZXdDb250YWluZXJJbml0J10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZVZpZXdDb250YWluZXIoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlc1snaXRlbUlkSW5pdCddICYmICFjaGFuZ2VzWydpdGVtSWRJbml0J10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbUlkID0gdGhpcy5pdGVtSWRJbml0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VzWydpdGVtSW5pdCddICYmICFjaGFuZ2VzWydpdGVtSW5pdCddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLml0ZW0gPSB0aGlzLml0ZW1Jbml0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmZldGNoRXhlY3V0aW9uU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLnN1Ym1pdEV4ZWN1dGlvblN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmluc3RhbmNlO1xuICAgICAgICB0aGlzLnVuc2V0SW5zdGFuY2UoKTtcbiAgICAgICAgdGhpcy5hY3Rpb25FeGVjdXRvci5vbkFjdGlvbkVkaXRvckRlc3Ryb3koaW5zdGFuY2UpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uU3VibWl0KGV2ZW50OiBNbmdGb3JtRWRpdG9yU3VibWl0RXZlbnQ8VD4pIHtcbiAgICAgICAgaWYgKCF0aGlzLmluc3RhbmNlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgTW5nSW50ZXJuYWxFcnJvcihgQWN0aW9uIGlzIG5vdCBpbnN0YW50aWF0ZWQgaW4gYWN0aW9uIGVkaXRvciBmb3IgYWN0aW9uICR7dGhpcy5hY3Rpb24uYWN0aW9uTmFtZX0uYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2VTdWJtaXRGb3JtSXRlbSA9IGV2ZW50LmZvcm1JdGVtO1xuXG4gICAgICAgICAgICAvLyBwcmVwYXJlIHBhcmFtZXRlcnNcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvblBhcmFtZXRlcnMgPSBuZXcgQWN0aW9uUGFyYW1ldGVycyh0aGlzLml0ZW1JZCwgZXZlbnQuZm9ybUl0ZW0pXG4gICAgICAgICAgICAgICAgLndpdGhBY3Rpb25EYXRhKHRoaXMuYWN0aW9uRGF0YSlcbiAgICAgICAgICAgICAgICAud2l0aFZpZXdDb250YWluZXIodGhpcy52aWV3Q29udGFpbmVyKVxuICAgICAgICAgICAgICAgIC53aXRoU291cmNlQ29tcG9uZW50KHRoaXMuc291cmNlQ29tcG9uZW50KTtcbiAgICAgICAgICAgIGlmICh0aGlzLmFjdGlvbi5lZGl0b3JEZXNjcmlwdG9yLmlzTG9jYWxpemVkKSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uUGFyYW1ldGVycy53aXRoTG9jYWxlKHRoaXMubW5nQ29tbW9uc1NlcnZpY2UuYXBwRGF0YUxhbmd1YWdlRGVmYXVsdCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmFjdGlvbkV4ZWN1dG9yLnByZXBhcmVDb250ZXh0Rm9yRWRpdG9yU3VibWl0KHRoaXMuYWN0aW9uLCBhY3Rpb25QYXJhbWV0ZXJzLCB0aGlzLmRhdGFQcm92aWRlciwgdGhpcy5pbnN0YW5jZSwgdGhpcy5wcmV2aW91c0FjdGlvbkluc3RhbmNlKTtcblxuICAgICAgICAgICAgdGhpcy5zdWJtaXRFeGVjdXRpb25TdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLnN1Ym1pdEV4ZWN1dGlvblN1YnNjcmlwdGlvbiA9IGNvbnRleHQuZXhlY3V0aW9uJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dDogcmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcyAmJiB0eXBlb2YgcmVzID09PSAnb2JqZWN0JyAmJiAhdGhpcy5pdGVtSWQgJiYgdGhpcy5hY3Rpb24ubW9kZWw/LmlkUHJvcGVydHlOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0byBjb3ZlciBjcmVhdGlvbiFcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbUlkID0gcmVzW3RoaXMuYWN0aW9uLm1vZGVsLmlkUHJvcGVydHlOYW1lIGFzIGtleW9mIG9iamVjdF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3Rpb25SdW5FdmVudEVtaXR0ZXIubmV4dChyZXMpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlU3VibWl0UmVzdWx0ID0gcmVzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLmFjdGlvbkV4ZWN1dG9yLnJ1bihjb250ZXh0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjYW5jZWwoKSB7XG4gICAgICAgIGlmICghdGhpcy5pbnN0YW5jZSkge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybihgQWN0aW9uIGVkaXRvciBjYW5ub3QgYmUgY2FuY2VsZWQgZm9yICR7dGhpcy5hY3Rpb24uYWN0aW9uTmFtZX0sIGJlY2F1c2Ugbm8gYWN0aW9uIGluc3RhbmNlIGlzIHByZXNlbnRgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFjdGlvbkNhbmNlbEV2ZW50RW1pdHRlci5uZXh0KHVuZGVmaW5lZCk7XG4gICAgICAgIHRoaXMuYWN0aW9uRXhlY3V0b3IuZmluaXNoQWN0aW9uKHRoaXMuaW5zdGFuY2UpO1xuICAgIH1cblxuICAgIHB1YmxpYyB0cmlnZ2VyU3VibWl0KCkge1xuICAgICAgICB0aGlzLmVkaXRvckNvbXBvbmVudC5zdWJtaXQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRpYWxpemVBc0RpYWxvZygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmRpYWxvZ0NvbmZpZz8uZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5pc0RpYWxvZyA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pc0RpYWxvZyA9IHRydWU7XG5cbiAgICAgICAgLy8gaW5pdGlhbGl6ZSBhY3Rpb24gZnJvbSBkaWFsb2cgZGF0YVxuICAgICAgICBpZiAodGhpcy5kaWFsb2dDb25maWcuZGF0YS5hY3Rpb25JbnN0YW5jZSkge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzQWN0aW9uSW5zdGFuY2UodGhpcy5kaWFsb2dDb25maWcuZGF0YS5hY3Rpb25JbnN0YW5jZSk7XG4gICAgICAgICAgICBpZiAodGhpcy5kaWFsb2dDb25maWcuZGF0YS5wcmV2aW91c0FjdGlvbkluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2aW91c0FjdGlvbkluc3RhbmNlID0gdGhpcy5kaWFsb2dDb25maWcuZGF0YS5wcmV2aW91c0FjdGlvbkluc3RhbmNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmluc3RhbmNlKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGlvbiA9IHRoaXMuaW5zdGFuY2UuYWN0aW9uIGFzIEFjdGlvbkVkaXRvckRlc2NyaXB0b3I8VD47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pdGVtSWQgPSB0aGlzLmluc3RhbmNlPy5hY3RpdmF0aW9uUGFyYW1ldGVycz8uaXRlbUlkO1xuICAgICAgICB0aGlzLml0ZW0gPSB0aGlzLmluc3RhbmNlPy5hY3RpdmF0aW9uUGFyYW1ldGVycz8uaXRlbTtcbiAgICAgICAgdGhpcy5hY3Rpb25EYXRhID0gdGhpcy5pbnN0YW5jZT8uYWN0aXZhdGlvblBhcmFtZXRlcnM/LmFjdGlvbkRhdGE7XG4gICAgICAgIHRoaXMudmlld0NvbnRhaW5lciA9IHRoaXMuaW5zdGFuY2U/LmFjdGl2YXRpb25QYXJhbWV0ZXJzPy52aWV3Q29udGFpbmVyIGFzIElWaWV3Q29udGFpbmVyPFQsIFM+O1xuICAgICAgICB0aGlzLnNvdXJjZUNvbXBvbmVudCA9IHRoaXMuaW5zdGFuY2U/LmFjdGl2YXRpb25QYXJhbWV0ZXJzPy5zb3VyY2VDb21wb25lbnQ7XG4gICAgICAgIHRoaXMuZGlhbG9nUm91dGUgPSB0aGlzLmluc3RhbmNlPy5hY3RpdmF0aW9uUGFyYW1ldGVycz8ucm91dGU7XG4gICAgICAgIGlmICghdGhpcy5kYXRhUHJvdmlkZXIgJiYgdGhpcy52aWV3Q29udGFpbmVyKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhUHJvdmlkZXIgPSB0aGlzLnZpZXdDb250YWluZXIuZ2V0RGF0YVByb3ZpZGVyKCk7XG4gICAgICAgICAgICBpZiAoZGF0YVByb3ZpZGVyICYmIHR5cGVvZiBkYXRhUHJvdmlkZXJbJ2ZldGNoJyBhcyBrZXlvZiBvYmplY3RdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhUHJvdmlkZXIgPSBkYXRhUHJvdmlkZXIgYXMgSUVkaXRvckRhdGFQcm92aWRlcjxULCBTPjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZUFzU3RhbmRhbG9uZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNEaWFsb2cpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXRlbUlkID0gdGhpcy5pdGVtSWRJbml0O1xuICAgICAgICB0aGlzLml0ZW0gPSB0aGlzLml0ZW1Jbml0O1xuICAgICAgICB0aGlzLmluaXRpYWxpemVWaWV3Q29udGFpbmVyKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplU3ViQWN0aW9ucygpIHtcbiAgICAgICAgZm9yIChjb25zdCBhY3Rpb24gb2YgdGhpcy5hY3Rpb24uZWRpdG9yQWN0aW9ucykge1xuICAgICAgICAgICAgaWYgKGFjdGlvbiBpbnN0YW5jZW9mIEFjdGlvbkVkaXRvclN1Ym1pdERlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFjdGlvbi5idXR0b24uaWNvbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uLmJ1dHRvbi53aXRoSWNvbihhY3Rpb24uc3VibWl0VHlwZSA9PT0gQWN0aW9uRWRpdG9yU3VibWl0VHlwZUVudW0uU3VibWl0ID8gJ3BpIHBpLWNoZWNrJyA6ICdwaSBwaS10aW1lcycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFjdGlvbi5idXR0b24ubGFiZWwgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbi5idXR0b24ud2l0aExhYmVsKGFjdGlvbi5zdWJtaXRUeXBlID09PSBBY3Rpb25FZGl0b3JTdWJtaXRUeXBlRW51bS5TdWJtaXQgPyAnZ2VuZXJhbC5zYXZlJyA6IHRoaXMuaXNEaWFsb2cgPyAnZ2VuZXJhbC5jbG9zZScgOiAnZ2VuZXJhbC5jYW5jZWwnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBhc3NpZ24gcnVuIG9wZXJhdGlvbnNcbiAgICAgICAgICAgICAgICBhY3Rpb24ud2l0aFJ1bk5vdGlmaWNhdGlvblN1Y2Nlc3ModW5kZWZpbmVkLCB1bmRlZmluZWQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uLnN1Ym1pdFR5cGUgPT09IEFjdGlvbkVkaXRvclN1Ym1pdFR5cGVFbnVtLlN1Ym1pdCkge1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb24ud2l0aFJ1bkZ1bmN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlclN1Ym1pdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb24ud2l0aFJ1bkZ1bmN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VXaXRoVW5zYXZlZENoYW5nZXNDb25maXJtYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wbGFjZUFjdGlvbnNPblBvc2l0aW9ucyhhY3Rpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBhY3Rpb24gb2YgdGhpcy52aWV3Q29udGFpbmVyPy5nZXRBY3Rpb25zKCkuZmlsdGVyKHZhbHVlID0+IHZhbHVlLnBvc2l0aW9uVGFibGV2aWV3Q2F0ZWdvcmllcz8uaW5jbHVkZXModGhpcy5hY3Rpb24udGFibGV2aWV3Q2F0ZWdvcnkhKSkgPz8gW10pIHtcbiAgICAgICAgICAgIHRoaXMucGxhY2VBY3Rpb25zT25Qb3NpdGlvbnMoYWN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudG9vbGJhclJpZ2h0QWN0aW9ucyA9IHRoaXMudG9vbGJhclJpZ2h0QWN0aW9ucy5yZXZlcnNlKCk7XG4gICAgICAgIHRoaXMuZm9vdGVyUmlnaHRBY3Rpb25zID0gdGhpcy5mb290ZXJSaWdodEFjdGlvbnMucmV2ZXJzZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmV0Y2hJdGVtKCkge1xuICAgICAgICBpZiAoIXRoaXMuaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBNbmdJbnRlcm5hbEVycm9yKGBBY3Rpb24gaXMgbm90IGluc3RhbnRpYXRlZCBpbiBhY3Rpb24gZWRpdG9yIGZvciBhY3Rpb24gJHt0aGlzLmFjdGlvbi5hY3Rpb25OYW1lfS5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFjdGlvblBhcmFtZXRlcnMgPSBuZXcgQWN0aW9uUGFyYW1ldGVycyh0aGlzLml0ZW1JZCwgdGhpcy5pdGVtKVxuICAgICAgICAgICAgLndpdGhBY3Rpb25EYXRhKHRoaXMuYWN0aW9uRGF0YSlcbiAgICAgICAgICAgIC53aXRoVmlld0NvbnRhaW5lcih0aGlzLnZpZXdDb250YWluZXIpXG4gICAgICAgICAgICAud2l0aFNvdXJjZUNvbXBvbmVudCh0aGlzLnNvdXJjZUNvbXBvbmVudCk7XG4gICAgICAgIGlmICh0aGlzLmFjdGlvbi5lZGl0b3JEZXNjcmlwdG9yLmlzTG9jYWxpemVkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hY3Rpb24uZWRpdG9yRGVzY3JpcHRvci5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIGFjdGlvblBhcmFtZXRlcnMud2l0aExvY2FsZSh0aGlzLm1uZ0NvbW1vbnNTZXJ2aWNlLmFwcERhdGFMYW5ndWFnZSEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhY3Rpb25QYXJhbWV0ZXJzLndpdGhMb2NhbGUodGhpcy5tbmdDb21tb25zU2VydmljZS5hcHBEYXRhTGFuZ3VhZ2VEZWZhdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pbnN0YW5jZT8ucHJldmlvdXNJbnN0YW5jZT8uY29udGV4dD8ucGFyYW1ldGVycy5pdGVtKSB7XG4gICAgICAgICAgICBhY3Rpb25QYXJhbWV0ZXJzLndpdGhGb3JtSXRlbSh0aGlzLmluc3RhbmNlPy5wcmV2aW91c0luc3RhbmNlPy5jb250ZXh0Py5wYXJhbWV0ZXJzLml0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbnN0YW5jZT8ucHJldmlvdXNJbnN0YW5jZT8ucmVzdWx0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgYWN0aW9uUGFyYW1ldGVycy53aXRoU3VibWl0UmVzdWx0KHRoaXMuaW5zdGFuY2U/LnByZXZpb3VzSW5zdGFuY2U/LnJlc3VsdCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5hY3Rpb25FeGVjdXRvci5wcmVwYXJlQ29udGV4dEZvckVkaXRvckZldGNoKHRoaXMuYWN0aW9uLCBhY3Rpb25QYXJhbWV0ZXJzLCB0aGlzLmRhdGFQcm92aWRlciwgdGhpcy5pbnN0YW5jZSwgdGhpcy5wcmV2aW91c0FjdGlvbkluc3RhbmNlKTtcbiAgICAgICAgdGhpcy5mZXRjaEV4ZWN1dGlvblN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5mZXRjaEV4ZWN1dGlvblN1YnNjcmlwdGlvbiA9IGNvbnRleHQuZXhlY3V0aW9uJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgICAgdGhpcy5pdGVtID0gcmVzID8/IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgdGhpcy51cGRhdGVUaXRsZSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmFjdGlvbkV4ZWN1dG9yLnJ1bihjb250ZXh0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVRpdGxlKCkge1xuICAgICAgICBpZiAodGhpcy5hY3Rpb24uZWRpdG9yVGl0bGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMudGl0bGUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAodGhpcy5kaWFsb2dDb25maWcpIHtcbiAgICAgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ0NvbmZpZyEuaGVhZGVyID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IEkxOG5VdGlscy5BY3Rpb24uZ2V0RWRpdG9yVGl0bGVBc3luYyh0aGlzLnRyYW5zbGF0ZSwgdGhpcy5hY3Rpb24sIHRoaXMuaXRlbSkuc3Vic2NyaWJlKHQgPT4ge1xuICAgICAgICAgICAgdGhpcy50aXRsZSA9IHQgPz8gdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlhbG9nQ29uZmlnKSB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dDb25maWchLmhlYWRlciA9IHQgPz8gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5hY3Rpb24uYWN0aXZhdGlvblRyaWdnZXIgPT09IEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bS5PblJvdXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1uZ0NvbW1vbnNTZXJ2aWNlLnNldFBhZ2VUaXRsZSh0ID8/IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHN1YnNjcmlwdGlvbik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwbGFjZUFjdGlvbnNPblBvc2l0aW9ucyhhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3I8YW55Pikge1xuICAgICAgICBzd2l0Y2ggKGFjdGlvbi5wb3NpdGlvbikge1xuICAgICAgICAgICAgY2FzZSBBY3Rpb25Qb3NpdGlvbkVudW0uVG9vbGJhckxlZnQ6XG4gICAgICAgICAgICAgICAgdGhpcy50b29sYmFyTGVmdEFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBBY3Rpb25Qb3NpdGlvbkVudW0uVG9vbGJhclJpZ2h0OlxuICAgICAgICAgICAgICAgIHRoaXMudG9vbGJhclJpZ2h0QWN0aW9ucy5wdXNoKGFjdGlvbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEFjdGlvblBvc2l0aW9uRW51bS5Gb290ZXJMZWZ0OlxuICAgICAgICAgICAgICAgIHRoaXMuZm9vdGVyTGVmdEFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBBY3Rpb25Qb3NpdGlvbkVudW0uRm9vdGVyUmlnaHQ6XG4gICAgICAgICAgICAgICAgdGhpcy5mb290ZXJSaWdodEFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplVmlld0NvbnRhaW5lcigpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNEaWFsb2cpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZpZXdDb250YWluZXIgPSB0aGlzLnZpZXdDb250YWluZXJJbml0ID8/IHRoaXMudmlld0NvbnRhaW5lclNlcnZpY2UgPz8gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0RWRpdG9yRW5hYmxlZChpc0VuYWJsZWQgPSB0cnVlKSB7XG4gICAgICAgIHRoaXMuaXNGb3JtRGlzYWJsZWQgPSAhaXNFbmFibGVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJvY2Vzc0FjdGlvbkluc3RhbmNlKGluc3RhbmNlOiBBY3Rpb25JbnN0YW5jZTxULCBTPikge1xuICAgICAgICBpZiAoIXRoaXMuaW5zdGFuY2UgfHwgdGhpcy5pbnN0YW5jZS5pbnN0YW5jZUxvbmdOYW1lICE9PSBpbnN0YW5jZS5pbnN0YW5jZUxvbmdOYW1lKSB7XG4gICAgICAgICAgICB0aGlzLnVuc2V0SW5zdGFuY2UoKTtcbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UgPSBpbnN0YW5jZTtcblxuICAgICAgICAgICAgdGhpcy5pbnN0YW5jZVN0YXRlU3Vic2NyaXB0aW9uID0gdGhpcy5pbnN0YW5jZS5zdGF0ZSQuc3Vic2NyaWJlKHMgPT4ge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAocykge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkFjdGl2YXRpb25FbmQ6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZldGNoSXRlbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmV0Y2hTdGFydDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RWRpdG9yRW5hYmxlZChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GZXRjaEVycm9yOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZldGNoRW5kOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRFZGl0b3JFbmFibGVkKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLlJ1blN0YXJ0OlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRFZGl0b3JFbmFibGVkKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VibWl0TG9hZGluZ1N1YmplY3QubmV4dCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLlJ1bkVuZDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5SdW5FcnJvcjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RWRpdG9yRW5hYmxlZCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VibWl0TG9hZGluZ1N1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5OZXh0QWN0aW9uU3RhcnQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnN0YW5jZT8ubmV4dEFjdGlvbkluc3RhbmNlPy5hY3Rpb24udHlwZSA9PT0gQWN0aW9uVHlwZUVudW0uRGlyZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJtaXRMb2FkaW5nU3ViamVjdC5uZXh0KHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uTmV4dEFjdGlvbkVuZDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmluc3RhbmNlPy5uZXh0QWN0aW9uSW5zdGFuY2U/LmFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlRW51bS5EaXJlY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Ym1pdExvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRXJyb3JBY3Rpb25TdGFydDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmluc3RhbmNlPy5lcnJvckFjdGlvbkluc3RhbmNlPy5hY3Rpb24udHlwZSA9PT0gQWN0aW9uVHlwZUVudW0uRGlyZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJtaXRMb2FkaW5nU3ViamVjdC5uZXh0KHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRXJyb3JBY3Rpb25FbmQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnN0YW5jZT8uZXJyb3JBY3Rpb25JbnN0YW5jZT8uYWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGVFbnVtLkRpcmVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VibWl0TG9hZGluZ1N1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hFcnJvckZpbmFsOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRFZGl0b3JFbmFibGVkKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaFN1Y2Nlc3NGaW5hbDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hEaXNtaXNzZWRGaW5hbDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RWRpdG9yRW5hYmxlZChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVuc2V0SW5zdGFuY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaFN1Y2Nlc3NSZWFjdGl2YXRlRmluYWw6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEVkaXRvckVuYWJsZWQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2hvdWxkIGFsc28gdW5zZXRJbnN0YW5jZSwgYnV0IGxldCB0aGlzIGZvciByZWFjdGl2YXRpb25JbnN0YW5jZSQgbGlzdGVuZXIgdG8gbm90IGludGVyZmVyZVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2VSZWFjdGl2YXRpb25TdWJzY3JpcHRpb24gPSB0aGlzLmluc3RhbmNlLnJlYWN0aXZhdGlvbkluc3RhbmNlJC5zdWJzY3JpYmUobmV3SW5zdGFuY2UgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc0FjdGlvbkluc3RhbmNlKG5ld0luc3RhbmNlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignd2luZG93OmJlZm9yZXVubG9hZCcpXG4gICAgcHJpdmF0ZSBiZWZvcmVXaW5kb3dVbmxvYWQoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzRGlhbG9nICYmICF0aGlzLmVkaXRvckNvbXBvbmVudC5mb3JtLnByaXN0aW5lKSB7XG4gICAgICAgICAgICByZXR1cm4gY29uZmlybSh0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdtbmdFZGl0b3IudW5zYXZlZENoYW5nZXNDb25maXJtYXRpb24ubWVzc2FnZScpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6a2V5ZG93bi5Fc2NhcGUnKVxuICAgIHByaXZhdGUgb25Fc2NhcGVQcmVzc2VkKCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmlzRGlhbG9nICYmXG4gICAgICAgICAgICB0aGlzLmFjdGlvbi5hY3RpdmF0aW9uVHJpZ2dlciA9PT0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLk9uUm91dGUgJiZcbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2U/LmFjdGl2YXRpb25EaWFsb2dSZWYgJiZcbiAgICAgICAgICAgIHBhcnNlSW50KHRoaXMuZGlhbG9nU2VydmljZS5kaWFsb2dDb21wb25lbnRSZWZNYXAuZ2V0KHRoaXMuaW5zdGFuY2U/LmFjdGl2YXRpb25EaWFsb2dSZWYpPy5pbnN0YW5jZS5jb250YWluZXI/LnN0eWxlLnpJbmRleCA/PyAnJykgPT09IFpJbmRleFV0aWxzLmdldEN1cnJlbnQoKVxuICAgICAgICApXG4gICAgICAgICAgICB0aGlzLmNsb3NlV2l0aFVuc2F2ZWRDaGFuZ2VzQ29uZmlybWF0aW9uKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzaG93VW5zYXZlZENoYW5nZXNDb25maXJtYXRpb25EaWFsb2coY2FsbEZyb21HdWFyZDogYm9vbGVhbik6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICBjb25zdCBzdWJqZWN0ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oe1xuICAgICAgICAgICAgaGVhZGVyOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdtbmdFZGl0b3IudW5zYXZlZENoYW5nZXNDb25maXJtYXRpb24uaGVhZGVyJyksXG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdtbmdFZGl0b3IudW5zYXZlZENoYW5nZXNDb25maXJtYXRpb24ubWVzc2FnZScpLFxuICAgICAgICAgICAgYWNjZXB0TGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2dlbmVyYWwueWVzJyksXG4gICAgICAgICAgICByZWplY3RMYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZ2VuZXJhbC5ubycpLFxuICAgICAgICAgICAgaWNvbjogJ3BpIHBpLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlJyxcbiAgICAgICAgICAgIGFjY2VwdDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghY2FsbEZyb21HdWFyZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbmNlbCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgc3ViamVjdC5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlamVjdDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAgICAgc3ViamVjdC5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGtleTogdGhpcy5jb25maXJtRGlhbG9nS2V5XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gc3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xvc2VXaXRoVW5zYXZlZENoYW5nZXNDb25maXJtYXRpb24oY2FsbEZyb21HdWFyZCA9IGZhbHNlKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIGlmICghdGhpcy5lZGl0b3JDb21wb25lbnQuZm9ybS5wcmlzdGluZSAmJiB0aGlzLmFjdGlvbi51bnNhdmVkQ2hhbmdlc0NvbmZpcm1hdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2hvd1Vuc2F2ZWRDaGFuZ2VzQ29uZmlybWF0aW9uRGlhbG9nKGNhbGxGcm9tR3VhcmQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFjYWxsRnJvbUd1YXJkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYW5jZWwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvZih0cnVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVuc2V0SW5zdGFuY2UoKSB7XG4gICAgICAgIHRoaXMuaW5zdGFuY2UgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuaW5zdGFuY2VTdGF0ZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5pbnN0YW5jZVJlYWN0aXZhdGlvblN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB9XG59XG4iLCI8aDUgKm5nSWY9XCIhaXNEaWFsb2cgJiYgdGl0bGVcIj57eyB0aXRsZSB9fTwvaDU+XG48c3BhbiAqbmdJZj1cImlzRGlhbG9nICYmIGFjdGlvbi5hY3RpdmF0aW9uVHJpZ2dlciA9PT0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLk9uUm91dGVcIiBjbGFzcz1cInAtZGlhbG9nLWhlYWRlciBkaWFsb2ctY2xvc2UtYnV0dG9uLXdyYXBwZXJcIj5cbiAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwicC1kaWFsb2ctaGVhZGVyLWljb24gcC1kaWFsb2ctaGVhZGVyLW1heGltaXplIHAtbGlua1wiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAoY2xpY2spPVwiY2xvc2VXaXRoVW5zYXZlZENoYW5nZXNDb25maXJtYXRpb24oKVwiXG4gICAgICAgIChrZXlkb3duLmVudGVyKT1cImNsb3NlV2l0aFVuc2F2ZWRDaGFuZ2VzQ29uZmlybWF0aW9uKClcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJwLWRpYWxvZy1oZWFkZXItY2xvc2UtaWNvbiBwaSBwaS10aW1lc1wiPjwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbjwvc3Bhbj5cbjxkaXYgY2xhc3M9XCJoLWZ1bGwgZmxleCBmbGV4LWNvbHVtblwiPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMSBtbmctYWN0aW9uLWVkaXRvci10b29sYmFyLWNvbnRhaW5lclwiICpuZ0lmPVwidG9vbGJhckxlZnRBY3Rpb25zLmxlbmd0aCA+IDAgfHwgdG9vbGJhclJpZ2h0QWN0aW9ucy5sZW5ndGggPiAwXCI+XG4gICAgICAgIDxwLXRvb2xiYXIgc3R5bGVDbGFzcz1cIm1uZy1hY3Rpb24tZWRpdG9yLXRvb2xiYXJcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJsZWZ0XCI+XG4gICAgICAgICAgICAgICAgPG1uZy1hY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiB0b29sYmFyTGVmdEFjdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICBbYWN0aW9uXT1cImFjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzdWJtaXRMb2FkaW5nJFwiXG4gICAgICAgICAgICAgICAgICAgIFtsb2FkaW5nXT1cIiRhbnkoYWN0aW9uKS5zdWJtaXRUeXBlID09PSBhY3Rpb25FZGl0b3JTdWJtaXRUeXBlU3VibWl0ID8gc3VibWl0TG9hZGluZyQgOiBhY3Rpb25EZWZhdWx0TG9hZGluZ0lucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgW3ZpZXdDb250YWluZXJdPVwidmlld0NvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgIFtob3N0Q29tcG9uZW50XT1cInRoaXNcIlxuICAgICAgICAgICAgICAgICAgICBbcm91dGVdPVwiZGlhbG9nUm91dGVcIlxuICAgICAgICAgICAgICAgICAgICBbaXRlbV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgW2l0ZW1JZF09XCJpdGVtSWRcIj48L21uZy1hY3Rpb24+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cInJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgPG1uZy1hY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiB0b29sYmFyUmlnaHRBY3Rpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgW2FjdGlvbl09XCJhY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic3VibWl0TG9hZGluZyRcIlxuICAgICAgICAgICAgICAgICAgICBbbG9hZGluZ109XCIkYW55KGFjdGlvbikuc3VibWl0VHlwZSA9PT0gYWN0aW9uRWRpdG9yU3VibWl0VHlwZVN1Ym1pdCA/IHN1Ym1pdExvYWRpbmckIDogYWN0aW9uRGVmYXVsdExvYWRpbmdJbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgIFt2aWV3Q29udGFpbmVyXT1cInZpZXdDb250YWluZXJcIlxuICAgICAgICAgICAgICAgICAgICBbaG9zdENvbXBvbmVudF09XCJ0aGlzXCJcbiAgICAgICAgICAgICAgICAgICAgW3JvdXRlXT1cImRpYWxvZ1JvdXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW2l0ZW1dPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtSWRdPVwiaXRlbUlkXCI+PC9tbmctYWN0aW9uPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9wLXRvb2xiYXI+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93LTEgbW5nLWFjdGlvbi1lZGl0b3ItZm9ybS1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyXCIgKm5nSWY9XCJsb2FkaW5nJCB8IGFzeW5jXCI+XG4gICAgICAgICAgICA8cC1wcm9ncmVzc1NwaW5uZXIgW3N0eWxlXT1cInt3aWR0aDogJzNyZW0nLCBoZWlnaHQ6ICczcmVtJ31cIiBzdHJva2VXaWR0aD1cIjNcIj48L3AtcHJvZ3Jlc3NTcGlubmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG1uZy1mb3JtLWVkaXRvclxuICAgICAgICAgICAgKm5nSWY9XCJhY3Rpb24uZWRpdG9yRGVzY3JpcHRvciAmJiAobG9hZGluZyQgfCBhc3luYykgPT09IGZhbHNlXCJcbiAgICAgICAgICAgIFtkZXNjcmlwdG9yXT1cImFjdGlvbi5lZGl0b3JEZXNjcmlwdG9yXCJcbiAgICAgICAgICAgIFtpdGVtXT1cIml0ZW1cIlxuICAgICAgICAgICAgW3ZpZXdDb250YWluZXJdPVwidmlld0NvbnRhaW5lclwiXG4gICAgICAgICAgICBbaXNGb3JtRGlzYWJsZWRdPVwiaXNGb3JtRGlzYWJsZWRcIlxuICAgICAgICAgICAgKGZvcm1TdWJtaXQpPVwib25TdWJtaXQoJGV2ZW50KVwiPlxuICAgICAgICA8L21uZy1mb3JtLWVkaXRvcj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIG1uZy1hY3Rpb24tZWRpdG9yLWZvb3Rlci1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxtbmctYWN0aW9uXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBmb290ZXJMZWZ0QWN0aW9uc1wiXG4gICAgICAgICAgICAgICAgW2FjdGlvbl09XCJhY3Rpb25cIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzdWJtaXRMb2FkaW5nJFwiXG4gICAgICAgICAgICAgICAgW2xvYWRpbmddPVwiJGFueShhY3Rpb24pLnN1Ym1pdFR5cGUgPT09IGFjdGlvbkVkaXRvclN1Ym1pdFR5cGVTdWJtaXQgPyBzdWJtaXRMb2FkaW5nJCA6IGFjdGlvbkRlZmF1bHRMb2FkaW5nSW5wdXRcIlxuICAgICAgICAgICAgICAgIFt2aWV3Q29udGFpbmVyXT1cInZpZXdDb250YWluZXJcIlxuICAgICAgICAgICAgICAgIFtob3N0Q29tcG9uZW50XT1cInRoaXNcIlxuICAgICAgICAgICAgICAgIFtyb3V0ZV09XCJkaWFsb2dSb3V0ZVwiXG4gICAgICAgICAgICAgICAgW2l0ZW1dPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgW2l0ZW1JZF09XCJpdGVtSWRcIj48L21uZy1hY3Rpb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPG1uZy1hY3Rpb25cbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGZvb3RlclJpZ2h0QWN0aW9uc1wiXG4gICAgICAgICAgICAgICAgW2FjdGlvbl09XCJhY3Rpb25cIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzdWJtaXRMb2FkaW5nJFwiXG4gICAgICAgICAgICAgICAgW2xvYWRpbmddPVwiJGFueShhY3Rpb24pLnN1Ym1pdFR5cGUgPT09IGFjdGlvbkVkaXRvclN1Ym1pdFR5cGVTdWJtaXQgPyBzdWJtaXRMb2FkaW5nJCA6IGFjdGlvbkRlZmF1bHRMb2FkaW5nSW5wdXRcIlxuICAgICAgICAgICAgICAgIFt2aWV3Q29udGFpbmVyXT1cInZpZXdDb250YWluZXJcIlxuICAgICAgICAgICAgICAgIFtob3N0Q29tcG9uZW50XT1cInRoaXNcIlxuICAgICAgICAgICAgICAgIFtyb3V0ZV09XCJkaWFsb2dSb3V0ZVwiXG4gICAgICAgICAgICAgICAgW2l0ZW1dPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgW2l0ZW1JZF09XCJpdGVtSWRcIj48L21uZy1hY3Rpb24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG48cC1jb25maXJtRGlhbG9nIFtrZXldPVwiY29uZmlybURpYWxvZ0tleVwiIFtiYXNlWkluZGV4XT1cIjUwXCIgYXBwZW5kVG89XCJib2R5XCI+PC9wLWNvbmZpcm1EaWFsb2c+XG4iXX0=
@@ -311,13 +311,15 @@ export var ActionInstanceStateEnum;
311
311
  ActionInstanceStateEnum[ActionInstanceStateEnum["RunError"] = 12] = "RunError";
312
312
  ActionInstanceStateEnum[ActionInstanceStateEnum["NextActionStart"] = 13] = "NextActionStart";
313
313
  ActionInstanceStateEnum[ActionInstanceStateEnum["NextActionEnd"] = 14] = "NextActionEnd";
314
- ActionInstanceStateEnum[ActionInstanceStateEnum["FinishSuccessFinal"] = 15] = "FinishSuccessFinal";
315
- ActionInstanceStateEnum[ActionInstanceStateEnum["FinishErrorFinal"] = 16] = "FinishErrorFinal";
316
- ActionInstanceStateEnum[ActionInstanceStateEnum["FinishDismissedFinal"] = 17] = "FinishDismissedFinal";
317
- ActionInstanceStateEnum[ActionInstanceStateEnum["FinishSuccessReactivateFinal"] = 18] = "FinishSuccessReactivateFinal";
318
- ActionInstanceStateEnum[ActionInstanceStateEnum["FinishComponentDestroyFinal"] = 19] = "FinishComponentDestroyFinal";
319
- ActionInstanceStateEnum[ActionInstanceStateEnum["FinishRouteUntriggerStart"] = 20] = "FinishRouteUntriggerStart";
320
- ActionInstanceStateEnum[ActionInstanceStateEnum["FinishRouteUntriggerEndFinal"] = 21] = "FinishRouteUntriggerEndFinal";
321
- ActionInstanceStateEnum[ActionInstanceStateEnum["FinishRouteUntriggerTimeoutFinal"] = 22] = "FinishRouteUntriggerTimeoutFinal";
314
+ ActionInstanceStateEnum[ActionInstanceStateEnum["ErrorActionStart"] = 15] = "ErrorActionStart";
315
+ ActionInstanceStateEnum[ActionInstanceStateEnum["ErrorActionEnd"] = 16] = "ErrorActionEnd";
316
+ ActionInstanceStateEnum[ActionInstanceStateEnum["FinishSuccessFinal"] = 17] = "FinishSuccessFinal";
317
+ ActionInstanceStateEnum[ActionInstanceStateEnum["FinishErrorFinal"] = 18] = "FinishErrorFinal";
318
+ ActionInstanceStateEnum[ActionInstanceStateEnum["FinishDismissedFinal"] = 19] = "FinishDismissedFinal";
319
+ ActionInstanceStateEnum[ActionInstanceStateEnum["FinishSuccessReactivateFinal"] = 20] = "FinishSuccessReactivateFinal";
320
+ ActionInstanceStateEnum[ActionInstanceStateEnum["FinishComponentDestroyFinal"] = 21] = "FinishComponentDestroyFinal";
321
+ ActionInstanceStateEnum[ActionInstanceStateEnum["FinishRouteUntriggerStart"] = 22] = "FinishRouteUntriggerStart";
322
+ ActionInstanceStateEnum[ActionInstanceStateEnum["FinishRouteUntriggerEndFinal"] = 23] = "FinishRouteUntriggerEndFinal";
323
+ ActionInstanceStateEnum[ActionInstanceStateEnum["FinishRouteUntriggerTimeoutFinal"] = 24] = "FinishRouteUntriggerTimeoutFinal";
322
324
  })(ActionInstanceStateEnum || (ActionInstanceStateEnum = {}));
323
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWV4ZWN1dGlvbi5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9hY3Rpb24vbW9kZWxzL2FjdGlvbi1leGVjdXRpb24ubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFDLGVBQWUsRUFBYyxhQUFhLEVBQUUsT0FBTyxFQUFnQixvQkFBb0IsRUFBRSxJQUFJLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDbkgsT0FBTyxFQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUszQyxPQUFPLEVBQUMsMkJBQTJCLEVBQUUsY0FBYyxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFFdkYsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFHbkQsTUFBTSxPQUFPLFdBQVc7SUFDcEIsWUFDb0IsS0FBVSxFQUFFLGdCQUFnQjtJQUM1QixZQUFxQixLQUFLLENBQUMsVUFBVTs7UUFEckMsVUFBSyxHQUFMLEtBQUssQ0FBSztRQUNWLGNBQVMsR0FBVCxTQUFTLENBQWlCO0lBQzNDLENBQUM7Q0FDUDtBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGNBQWM7SUFvQ3ZCLFlBQVksTUFBMkIsRUFBRSxLQUFLLEdBQUcsdUJBQXVCLENBQUMsWUFBWTtRQWhDckUsZ0JBQVcsR0FBUyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQzlCLFdBQU0sR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUUxRSxxQkFBcUI7UUFDTCx3QkFBbUIsR0FBRyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUtoRCxhQUFRLEdBQStCLEVBQUUsQ0FBQztRQUMxQyxxQkFBZ0IsR0FBRyxJQUFJLE9BQU8sRUFBd0IsQ0FBQztRQUN2RCw4QkFBeUIsR0FBRyxJQUFJLGVB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LHVCQUF1QixLQUF2Qix1QkFBdUIsUUF3QmxDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHtDb25maXJtYXRpb24sIE1lc3NhZ2V9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7RHluYW1pY0RpYWxvZ1JlZn0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBSZXBsYXlTdWJqZWN0LCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCB0YWtlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZmlsdGVyLCBtYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtNZWRpdXNRdWVyeVBhcmFtfSBmcm9tICcuLi8uLi8uLi9hcGkvbW9kZWxzJztcbmltcG9ydCB7SURhdGFQcm92aWRlcn0gZnJvbSAnLi4vLi4vLi4vZGF0YS1wcm92aWRlcnMnO1xuaW1wb3J0IHtBY3Rpb25EZXNjcmlwdG9yfSBmcm9tICcuLi8uLi8uLi9kZXNjcmlwdG9ycy9hY3Rpb24nO1xuaW1wb3J0IHtBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW0sIEFjdGlvblR5cGVFbnVtfSBmcm9tICcuLi8uLi8uLi9kZXNjcmlwdG9ycy90eXBlcyc7XG5pbXBvcnQge0lBY3Rpb25FZGl0b3JDb21wb25lbnQsIElNbmdFcnJvciwgSVZpZXdDb250YWluZXJ9IGZyb20gJy4uLy4uLy4uL21vZGVscyc7XG5pbXBvcnQge01uZ0xvZ2dlclNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7SWRUeXBlfSBmcm9tICcuLi8uLi8uLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBBY3Rpb25FcnJvciB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBlcnJvcjogYW55LCAvLyBlcnJvciBkZXRhaWxzXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBkaXNtaXNzZWQ6IGJvb2xlYW4gPSBmYWxzZSAvLyBieSB1c2VyXG4gICAgKSB7fVxufVxuXG4vKipcbiAqIEFjdGlvbiBleGVjdXRpb24gaW5zdGFuY2UgY29udGFpbmluZyBkYXRhIGFib3V0IGV4ZWN1dGlvbiBzdGF0ZSBvZiBhY3Rpb25cbiAqL1xuZXhwb3J0IGNsYXNzIEFjdGlvbkluc3RhbmNlPFQsIFM+IHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgaW5zdGFuY2VJZDogc3RyaW5nO1xuICAgIHB1YmxpYyByZWFkb25seSBpbnN0YW5jZUxvbmdOYW1lOiBzdHJpbmc7XG4gICAgcHVibGljIHJlYWRvbmx5IGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxUPjtcbiAgICBwdWJsaWMgcmVhZG9ubHkgY3JlYXRlZERhdGU6IERhdGUgPSBuZXcgRGF0ZSgpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyID0gTW5nTG9nZ2VyU2VydmljZS5nZXQoKS5jcmVhdGUoJ0FjdGlvbkluc3RhbmNlJyk7XG5cbiAgICAvLyBmdW5jdGlvbiBleGVjdXRpb25cbiAgICBwdWJsaWMgcmVhZG9ubHkgaXNSdW5Mb2FkaW5nU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG4gICAgLy8gcGFyYW1ldGVycywgY29udGV4dHMsIHN0YXRlc1xuICAgIHB1YmxpYyB0cmlnZ2VyUGFyYW1ldGVycz86IEFjdGlvblBhcmFtZXRlcnM8VD47XG4gICAgcHVibGljIGFjdGl2YXRpb25QYXJhbWV0ZXJzPzogQWN0aW9uUGFyYW1ldGVyczxUPjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbnRleHRzOiBBcnJheTxBY3Rpb25Db250ZXh0PFQsIFM+PiA9IFtdO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZXhlY3V0aW9uU3ViamVjdCA9IG5ldyBTdWJqZWN0PFQgfCBudWxsIHwgdW5kZWZpbmVkPigpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZXhlY3V0aW9uSXNSdW5uaW5nU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RhdGVTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBY3Rpb25JbnN0YW5jZVN0YXRlRW51bT4oMSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSByZXN1bHRTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8VCB8IG51bGw+KDEpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZXJyb3JTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8QWN0aW9uRXJyb3I+KDEpO1xuXG4gICAgcHJpdmF0ZSBjb250ZXh0RXhlY3V0aW9uU3Vic2NyaXB0aW9uczogQXJyYXk8U3Vic2NyaXB0aW9uPiA9IFtdO1xuXG4gICAgLy8gcmVzdWx0IG9yIGVycm9yXG4gICAgcHJpdmF0ZSBfcmVzdWx0PzogVCB8IG51bGw7XG4gICAgcHJpdmF0ZSBfZXJyb3I/OiBBY3Rpb25FcnJvcjtcblxuICAgIC8vIGFkZGl0aW9uYWwgZGF0YSBmcm9tIHRyaWdnZXIvYWN0aXZhdGlvblxuICAgIHB1YmxpYyBhY3RpdmF0aW9uRGlhbG9nUmVmPzogRHluYW1pY0RpYWxvZ1JlZjtcbiAgICBwdWJsaWMgYWN0aXZhdGlvbkVkaXRvckNvbXBvbmVudFJlZj86IElBY3Rpb25FZGl0b3JDb21wb25lbnQ7XG5cbiAgICAvLyBsaW5rZWQgYWN0aW9uc1xuICAgIHByaXZhdGUgX3JlYWN0aXZhdGlvbkluc3RhbmNlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QWN0aW9uSW5zdGFuY2U8VCwgUz4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7IC8vIGVkaXRvciBhY3Rpb24gd2l0aCByZXN1Ym1pdCBlbmFibGVkXG4gICAgcHVibGljIHByZXZpb3VzSW5zdGFuY2U/OiBBY3Rpb25JbnN0YW5jZTxULCBTPjtcbiAgICBwdWJsaWMgbmV4dEFjdGlvbkluc3RhbmNlPzogQWN0aW9uSW5zdGFuY2U8dW5rbm93biwgdW5rbm93bj47IC8vIGFzIGRlZmluZWQgaW4gYWN0aW9uIGRlc2NyaXB0b3JcbiAgICBwdWJsaWMgZXJyb3JBY3Rpb25JbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPFQsIFM+OyAvLyBlcnJvciBhY3Rpb24gbXVzdCByZWx5IG9uIHNhbWUgdHlwZSwgYXMgZGVmaW5lZCBpbiBhY3Rpb24gZGVzY3JpcHRvclxuXG4gICAgY29uc3RydWN0b3IoYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9yPFQ+LCBzdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLlRyaWdnZXJTdGFydCkge1xuICAgICAgICB0aGlzLmluc3RhbmNlSWQgPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMik7XG4gICAgICAgIHRoaXMuaW5zdGFuY2VMb25nTmFtZSA9IGAke2FjdGlvbi5hY3Rpb25OYW1lTG9uZ31fJHt0aGlzLmluc3RhbmNlSWR9YDtcbiAgICAgICAgdGhpcy5hY3Rpb24gPSBhY3Rpb247XG4gICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzUnVuTG9hZGluZyQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzUnVuTG9hZGluZ1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjb250ZXh0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0cy5sZW5ndGggPT09IDAgPyB1bmRlZmluZWQgOiB0aGlzLmNvbnRleHRzW3RoaXMuY29udGV4dHMubGVuZ3RoIC0gMV07XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBleGVjdXRpb24kKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5leGVjdXRpb25TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZXhlY3V0aW9uSXNSdW5uaW5nJCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhlY3V0aW9uSXNSdW5uaW5nU3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc3RhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlU3ViamVjdC52YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHN0YXRlKHN0YXRlOiBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bSkge1xuICAgICAgICBpZiAoc3RhdGUgPiB0aGlzLnN0YXRlU3ViamVjdC52YWx1ZSB8fCAodGhpcy5zdGF0ZVN1YmplY3QudmFsdWUgPT09IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLlJ1bkVycm9yICYmIHN0YXRlID09PSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5SdW5TdGFydCkpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKGBJbnN0YW5jZSAke3RoaXMuaW5zdGFuY2VMb25nTmFtZX0gLSBzdGF0ZSAjJHtzdGF0ZX06ICR7QWN0aW9uSW5zdGFuY2VTdGF0ZUVudW1bc3RhdGVdfWApO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZVN1YmplY3QubmV4dChzdGF0ZSk7XG4gICAgICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hTdWNjZXNzRmluYWw6XG4gICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hFcnJvckZpbmFsOlxuICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoRGlzbWlzc2VkRmluYWw6XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmFjdGlvbi5hY3RpdmF0aW9uVHJpZ2dlciA9PT0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLk9uQ2xpY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hTdWNjZXNzUmVhY3RpdmF0ZUZpbmFsOlxuICAgICAgICAgICAgICAgICAgICAvLyBwYXJ0aWFsbHkgZmluaXNoIHJlYWN0aXZhdGlvbiBiZWNhdXNlIG5ldyBpbnN0YW5jZSBldmVudCBtdXN0IHN0aWxsIGJlIGVtaXR0ZWRcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGVFbnVtLkVkaXRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maW5pc2godHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hDb21wb25lbnREZXN0cm95RmluYWw6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoUm91dGVVbnRyaWdnZXJFbmRGaW5hbDpcbiAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaFJvdXRlVW50cmlnZ2VyVGltZW91dEZpbmFsOlxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5hY3Rpb24uYWN0aXZhdGlvblRyaWdnZXIgPT09IEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bS5PblJvdXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzdGF0ZSQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlU3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcmVzdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzdWx0O1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgcmVzdWx0KHJlc3VsdDogVCB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShgSW5zdGFuY2UgJHt0aGlzLmluc3RhbmNlTG9uZ05hbWV9IC0gcmVzdWx0YCwgcmVzdWx0KTtcblxuICAgICAgICB0aGlzLl9yZXN1bHQgPSByZXN1bHQ7XG4gICAgICAgIHRoaXMucmVzdWx0U3ViamVjdC5uZXh0KHJlc3VsdCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByZXN1bHQkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXN1bHRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZXJyb3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lcnJvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IGVycm9yKGVycm9yOiBBY3Rpb25FcnJvciB8IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGVycm9yID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoYEluc3RhbmNlICR7dGhpcy5pbnN0YW5jZUxvbmdOYW1lfSAtIGVycm9yYCwgZXJyb3IpO1xuXG4gICAgICAgIHRoaXMuX2Vycm9yID0gZXJyb3I7XG4gICAgICAgIHRoaXMuZXJyb3JTdWJqZWN0Lm5leHQoZXJyb3IpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZXJyb3IkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lcnJvclN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCByZWFjdGl2YXRpb25JbnN0YW5jZShpbnN0YW5jZTogQWN0aW9uSW5zdGFuY2U8VCwgUz4gfCB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gdGhpcyBpcyBhbGxvd2VkIHRvIG9ubHkgYmUgZXhlY3V0ZWQgb25jZSBmb3Igc3ViamVjdCBhbmQgbXVzdCBiZSBpbiBjb3JyZWN0IHN0YXR1cyFcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgIT09IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaFN1Y2Nlc3NSZWFjdGl2YXRlRmluYWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9yZWFjdGl2YXRpb25JbnN0YW5jZVN1YmplY3QubmV4dChpbnN0YW5jZSk7XG4gICAgICAgIHRoaXMuX3JlYWN0aXZhdGlvbkluc3RhbmNlU3ViamVjdC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcmVhY3RpdmF0aW9uSW5zdGFuY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWFjdGl2YXRpb25JbnN0YW5jZVN1YmplY3QudmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByZWFjdGl2YXRpb25JbnN0YW5jZSQoKTogT2JzZXJ2YWJsZTxBY3Rpb25JbnN0YW5jZTxULCBTPj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVhY3RpdmF0aW9uSW5zdGFuY2VTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIoaSA9PiAhIWkpLCAvLyBpZ25vcmUgdW5kZWZpbmVkIGV2ZW50cyAodXN1YWxseSBpbml0aWFsKVxuICAgICAgICAgICAgbWFwKGkgPT4gaSEpLFxuICAgICAgICAgICAgdGFrZSgxKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb250ZXh0QXQoaWR4OiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIGlkeCA8IHRoaXMuY29udGV4dHMubGVuZ3RoID8gdGhpcy5jb250ZXh0c1tpZHhdIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBwdWJsaWMgbmV3Q29udGV4dChjb250ZXh0OiBBY3Rpb25Db250ZXh0PFQsIFM+LCBmaW5pc2hQcmV2aW91cyA9IHRydWUpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoYEluc3RhbmNlICR7dGhpcy5pbnN0YW5jZUxvbmdOYW1lfSAtIG5ldyBjb250ZXh0ICR7Y29udGV4dC5jb250ZXh0TG9uZ05hbWV9YCk7XG5cbiAgICAgICAgY29uc3QgY3VycmVudENvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG4gICAgICAgIGlmIChjdXJyZW50Q29udGV4dCkge1xuICAgICAgICAgICAgY3VycmVudENvbnRleHQuZXhlY3V0aW9uQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbnRleHRFeGVjdXRpb25TdWJzY3JpcHRpb25zLmZvckVhY2gocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICAgICAgICB0aGlzLmNvbnRleHRFeGVjdXRpb25TdWJzY3JpcHRpb25zID0gW107XG4gICAgICAgIHRoaXMuY29udGV4dEV4ZWN1dGlvblN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgIGNvbnRleHQuZXhlY3V0aW9uJC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6IG5leHQgPT4gdGhpcy5leGVjdXRpb25TdWJqZWN0Lm5leHQobmV4dCksXG4gICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yID0+IHRoaXMuZXhlY3V0aW9uU3ViamVjdC5lcnJvcihlcnJvcilcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY29udGV4dEV4ZWN1dGlvblN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgIGNvbnRleHQuZXhlY3V0aW9uSXNSdW5uaW5nJC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6IG5leHQgPT4gdGhpcy5leGVjdXRpb25Jc1J1bm5pbmdTdWJqZWN0Lm5leHQobmV4dClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY29udGV4dHMucHVzaChjb250ZXh0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZm9yY2VGaW5pc2goKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLndhcm4oYEZvcmNlIGZpbmlzaGluZyBpbnN0YW5jZSAnJHt0aGlzLmluc3RhbmNlTG9uZ05hbWV9Jy4gVHJ5IGNvbXBsZXRpbmcgaW5zdGFuY2Ugd2l0aCBzdGF0ZXMgaW5zdGVhZC5gKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaERpc21pc3NlZEZpbmFsO1xuICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmluaXNoKHJlYWN0aXZhdGUgPSBmYWxzZSkge1xuICAgICAgICAvLyBjb21wbGV0ZSBhbGwgc3ViamVjdHNcbiAgICAgICAgdGhpcy5jb250ZXh0cy5mb3JFYWNoKGMgPT4gYy5maW5pc2goKSk7XG4gICAgICAgIHRoaXMuZXhlY3V0aW9uU3ViamVjdC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLmV4ZWN1dGlvbklzUnVubmluZ1N1YmplY3QuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5zdGF0ZVN1YmplY3QuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5yZXN1bHRTdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuZXJyb3JTdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICAgIGlmICghcmVhY3RpdmF0ZSkge1xuICAgICAgICAgICAgLy8gYWxsb3cgcmVhY3RpdmF0aW9uIGluc3RhbmNlIHRvIGJlIGVtaXR0ZWQgc2VwYXJhdGVseVxuICAgICAgICAgICAgdGhpcy5fcmVhY3RpdmF0aW9uSW5zdGFuY2VTdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgaXNDbG9zZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLmV4ZWN1dGlvblN1YmplY3QuaXNTdG9wcGVkICYmXG4gICAgICAgICAgICB0aGlzLmV4ZWN1dGlvbklzUnVubmluZ1N1YmplY3QuaXNTdG9wcGVkICYmXG4gICAgICAgICAgICB0aGlzLnN0YXRlU3ViamVjdC5pc1N0b3BwZWQgJiZcbiAgICAgICAgICAgIHRoaXMucmVzdWx0U3ViamVjdC5pc1N0b3BwZWQgJiZcbiAgICAgICAgICAgIHRoaXMuZXJyb3JTdWJqZWN0LmlzU3RvcHBlZCAmJlxuICAgICAgICAgICAgdGhpcy5fcmVhY3RpdmF0aW9uSW5zdGFuY2VTdWJqZWN0LmlzU3RvcHBlZCAmJlxuICAgICAgICAgICAgdGhpcy5jb250ZXh0RXhlY3V0aW9uU3Vic2NyaXB0aW9ucy5ldmVyeShzID0+IHMuY2xvc2VkKSAmJlxuICAgICAgICAgICAgdGhpcy5jb250ZXh0cy5ldmVyeShjID0+IGMuaXNDbG9zZWQoKSlcbiAgICAgICAgKTtcbiAgICB9XG59XG5cbi8qKlxuICogQ2xhc3MgY29udGFpbmluZyBhbGwgbWFpbiBkYXRhIGZvciBhY3Rpb24gdG8gYmUgZXhlY3V0ZWQgaW4gcnVuL2ZldGNoL3N1Ym1pdCBzdGF0ZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBBY3Rpb25Db250ZXh0PFQsIFM+IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlciA9IE1uZ0xvZ2dlclNlcnZpY2UuZ2V0KCkuY3JlYXRlKCdBY3Rpb25Db250ZXh0Jyk7XG4gICAgcHVibGljIHJlYWRvbmx5IGNvbnRleHRMb25nTmFtZTogc3RyaW5nO1xuICAgIHB1YmxpYyBwcmV2aW91c0FjdGlvbkluc3RhbmNlPzogQWN0aW9uSW5zdGFuY2U8dW5rbm93biwgdW5rbm93bj47XG4gICAgcHVibGljIGNvbmZpcm1hdGlvbj86IENvbmZpcm1hdGlvbjtcbiAgICBwdWJsaWMgbm90aWZpY2F0aW9uPzogTWVzc2FnZTtcbiAgICBwdWJsaWMgcnVuU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBpbnN0YW5jZTogQWN0aW9uSW5zdGFuY2U8VCwgUz4sXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBwYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJzPFQ+LFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgZnVuY3Rpb25OYW1lOiAncnVuJyB8ICdmZXRjaCcgfCAnc3VibWl0JyxcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IGRhdGFQcm92aWRlcj86IElEYXRhUHJvdmlkZXI8VCwgUz4sXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBzZXJ2aWNlSW5zdGFuY2U/OiBTLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGV4ZWN1dGlvblN1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdDxUIHwgbnVsbCB8IHVuZGVmaW5lZD4oMSksXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZXhlY3V0aW9uSXNSdW5uaW5nU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpXG4gICAgKSB7XG4gICAgICAgIHRoaXMuY29udGV4dExvbmdOYW1lID0gYCR7dGhpcy5pbnN0YW5jZS5pbnN0YW5jZUxvbmdOYW1lfV8ke2Z1bmN0aW9uTmFtZX1gO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZXhlY3V0aW9uJCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhlY3V0aW9uU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGV4ZWN1dGlvbklzUnVubmluZyQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmV4ZWN1dGlvbklzUnVubmluZ1N1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZXhlY3V0aW9uU3RhcnQoKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKGBDb250ZXh0ICR7dGhpcy5jb250ZXh0TG9uZ05hbWV9IC0gZXhlY3V0aW9uIHN0YXJ0YCk7XG4gICAgICAgIHRoaXMuZXhlY3V0aW9uSXNSdW5uaW5nU3ViamVjdC5uZXh0KHRydWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBleGVjdXRpb25OZXh0KG5leHQ6IFQgfCBudWxsIHwgdW5kZWZpbmVkLCBmaW5pc2ggPSB0cnVlKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKGBDb250ZXh0ICR7dGhpcy5jb250ZXh0TG9uZ05hbWV9IC0gZXhlY3V0aW9uIG5leHQgZXZlbnRgLCBuZXh0LCBmaW5pc2gpO1xuXG4gICAgICAgIHRoaXMuZXhlY3V0aW9uU3ViamVjdC5uZXh0KG5leHQpO1xuICAgICAgICBpZiAoZmluaXNoKSB7XG4gICAgICAgICAgICB0aGlzLmV4ZWN1dGlvbkNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZXhlY3V0aW9uQ29tcGxldGUoKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKGBDb250ZXh0ICR7dGhpcy5jb250ZXh0TG9uZ05hbWV9IC0gZXhlY3V0aW9uIGNvbXBsZXRlYCk7XG5cbiAgICAgICAgdGhpcy5leGVjdXRpb25TdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuZXhlY3V0aW9uSXNSdW5uaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZXhlY3V0aW9uRXJyb3IoZXJyOiBJTW5nRXJyb3IpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoYENvbnRleHQgJHt0aGlzLmNvbnRleHRMb25nTmFtZX0gLSBleGVjdXRpb24gZXJyb3JgLCBlcnIpO1xuICAgICAgICB0aGlzLmV4ZWN1dGlvblN1YmplY3QuZXJyb3IoZXJyKTtcbiAgICAgICAgdGhpcy5leGVjdXRpb25Jc1J1bm5pbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgIH1cblxuICAgIHB1YmxpYyBmaW5pc2goKSB7XG4gICAgICAgIHRoaXMucnVuU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmV4ZWN1dGlvblN1YmplY3QuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5leGVjdXRpb25Jc1J1bm5pbmdTdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzQ2xvc2VkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5leGVjdXRpb25TdWJqZWN0LmlzU3RvcHBlZCAmJiB0aGlzLmV4ZWN1dGlvbklzUnVubmluZ1N1YmplY3QuaXNTdG9wcGVkICYmICh0aGlzLnJ1blN1YnNjcmlwdGlvbj8uY2xvc2VkID8/IHRydWUpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBDbGFzcyBjb250YWluaW5nIGFsbCBtYWluIGRhdGEgZm9yIGFjdGlvbiB2YWxpZGF0aW9ucyAoZW5hYmxlZC92aXNpYmxlKSB0byBiZSBleGVjdXRlZCBpbiB2YWxpZGF0aW9uIHN0YXRlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIEFjdGlvbkNvbnRleHRWYWxpZGF0aW9uPFQsIFM+IHtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IGRlc2NyaXB0b3I6IEFjdGlvbkRlc2NyaXB0b3I8VD4sXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBwYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJzPFQ+LFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgZGF0YVByb3ZpZGVyPzogSURhdGFQcm92aWRlcjxULCBTPixcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IHNlcnZpY2VJbnN0YW5jZT86IFNcbiAgICApIHt9XG59XG5cbmV4cG9ydCBjbGFzcyBBY3Rpb25QYXJhbWV0ZXJzPFQ+IHtcbiAgICBwdWJsaWMgYWN0aW9uRGF0YT86IEFjdGlvbkRhdGE7XG4gICAgcHVibGljIHF1ZXJ5UGFyYW0/OiBNZWRpdXNRdWVyeVBhcmFtO1xuICAgIHB1YmxpYyB2aWV3Q29udGFpbmVyPzogSVZpZXdDb250YWluZXI8VCwgdW5rbm93bj47XG4gICAgcHVibGljIHNvdXJjZUNvbXBvbmVudD86IGFueTtcbiAgICBwdWJsaWMgaG9zdENvbXBvbmVudD86IHVua25vd247XG4gICAgcHVibGljIHJvdXRlPzogQWN0aXZhdGVkUm91dGU7XG4gICAgcHVibGljIHNlbGVjdGVkSXRlbXM6IFRbXSA9IFtdO1xuICAgIHB1YmxpYyBsb2NhbGU/OiBzdHJpbmc7XG5cbiAgICBwdWJsaWMgZm9ybUl0ZW0/OiBUIHwgbnVsbDtcbiAgICBwdWJsaWMgc3VibWl0UmVzdWx0PzogVCB8IG51bGw7XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgaXRlbUlkPzogSWRUeXBlLCBwdWJsaWMgaXRlbT86IFQpIHt9XG5cbiAgICBwdWJsaWMgd2l0aEFjdGlvbkRhdGEoYWN0aW9uRGF0YT86IEFjdGlvbkRhdGEpIHtcbiAgICAgICAgdGhpcy5hY3Rpb25EYXRhID0gYWN0aW9uRGF0YTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhRdWVyeVBhcmFtKHF1ZXJ5UGFyYW0/OiBNZWRpdXNRdWVyeVBhcmFtKSB7XG4gICAgICAgIHRoaXMucXVlcnlQYXJhbSA9IHF1ZXJ5UGFyYW07XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoVmlld0NvbnRhaW5lcih2aWV3Q29udGFpbmVyPzogSVZpZXdDb250YWluZXI8VCwgdW5rbm93bj4pIHtcbiAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyID0gdmlld0NvbnRhaW5lcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhTb3VyY2VDb21wb25lbnQoc291cmNlQ29tcG9uZW50PzogYW55KSB7XG4gICAgICAgIHRoaXMuc291cmNlQ29tcG9uZW50ID0gc291cmNlQ29tcG9uZW50O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEhvc3RDb21wb25lbnQoaG9zdENvbXBvbmVudD86IHVua25vd24pIHtcbiAgICAgICAgdGhpcy5ob3N0Q29tcG9uZW50ID0gaG9zdENvbXBvbmVudDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhSb3V0ZShyb3V0ZT86IEFjdGl2YXRlZFJvdXRlKSB7XG4gICAgICAgIHRoaXMucm91dGUgPSByb3V0ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhTZWxlY3RlZEl0ZW1zKHNlbGVjdGVkSXRlbXM6IFRbXSk6IHRoaXMge1xuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBzZWxlY3RlZEl0ZW1zO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aExvY2FsZShsb2NhbGU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLmxvY2FsZSA9IGxvY2FsZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXNlZCBmb3IgYWN0aW9uIGVkaXRvciByZS1mZXRjaC5cbiAgICAgKiBAcGFyYW0gaXRlbSBGb3JtIGl0ZW0uXG4gICAgICovXG4gICAgcHVibGljIHdpdGhGb3JtSXRlbShpdGVtOiBUIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgICAgICB0aGlzLmZvcm1JdGVtID0gaXRlbTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXNlZCBmb3IgYWN0aW9uIGVkaXRvciByZS1mZXRjaC5cbiAgICAgKiBAcGFyYW0gaXRlbSBTdWJtaXQgcmVzdWx0LlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoU3VibWl0UmVzdWx0KGl0ZW06IFQgfCBudWxsIHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgICAgIHRoaXMuc3VibWl0UmVzdWx0ID0gaXRlbTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuXG4vKipcbiAqIFN0YXRlcyBvZiBhY3Rpb24uIEVudW1zIGVuZGluZyB3aXRoIGAqRmluYWxgIGFyZSBzdXBwb3NlZCB0byBiZSBmaW5hbC5cbiAqL1xuZXhwb3J0IGVudW0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0ge1xuICAgIFRyaWdnZXJTdGFydCwgLy8gYWN0aW9uIHdhcyB0cmlnZ2VyZWQgKGNsaWNrIG9yIGRpcmVjdClcbiAgICBUcmlnZ2VyRW5kLFxuICAgIEFjdGl2YXRpb25TdGFydCwgLy8gYWN0aW9uIGFjdGl2YXRpb24gc3RhcnRlZCAoZGlyZWN0LCBldmVudCBvciBlZGl0b3IpXG4gICAgQWN0aXZhdGlvbkVuZCwgLy8gYWN0aW9uIGFjdGl2YXRpb24gZW5kZWRcbiAgICBGZXRjaFN0YXJ0LCAvLyBmZXRjaCBzdGFydGVkXG4gICAgRmV0Y2hFbmQsIC8vIGZldGNoIGVuZGVkXG4gICAgRmV0Y2hFcnJvciwgLy8gZmV0Y2ggZXJyb3JcbiAgICBSdW5Db25maXJtYXRpb25TdGFydCwgLy8gY29uZmlybWF0aW9uIGZvciBydW4gaXMgc3RhcnRlZFxuICAgIFJ1bkNvbmZpcm1hdGlvbkVuZEFjY2VwdCwgLy8gY29uZmlybWF0aW9uIGFjY2VwdGVkXG4gICAgUnVuQ29uZmlybWF0aW9uRW5kUmVqZWN0LCAvLyBjb25maXJtYXRpb24gcmVqZWN0ZWRcbiAgICBSdW5TdGFydCwgLy8gYWN0aW9uIHdhcyBydW4gYnkgY2FsbGluZyBtYWluIGZ1bmN0aW9uXG4gICAgUnVuRW5kLCAvLyBhY3Rpb24gcnVuIGZ1bmN0aW9uIGV4ZWN1dGVkXG4gICAgUnVuRXJyb3IsIC8vIGFjdGlvbiBydW4gZnVuY3Rpb24gZXhlY3V0ZWQgd2l0aCBlcnJvclxuICAgIE5leHRBY3Rpb25TdGFydCwgLy8gbmV4dCBhY3Rpb24gc3RhcnRlZFxuICAgIE5leHRBY3Rpb25FbmQsIC8vIG5leHQgYWN0aW9uIGZpbmlzaGVkXG4gICAgRmluaXNoU3VjY2Vzc0ZpbmFsLCAvLyBhY3Rpb24gZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5XG4gICAgRmluaXNoRXJyb3JGaW5hbCwgLy8gYWN0aW9uIGV4ZWN1dGVkIHdpdGggZXJyb3JcbiAgICBGaW5pc2hEaXNtaXNzZWRGaW5hbCwgLy8gYWN0aW9uIHdhcyBkaXNtaXNzZWQgYnkgdXNlclxuICAgIEZpbmlzaFN1Y2Nlc3NSZWFjdGl2YXRlRmluYWwsIC8vIGFjdGlvbiBleGVjdXRlZCBzdWNjZXNzZnVsbHksIGFub3RoZXIgaW5zdGFuY2Ugd2lsbCBkaXJlY3RseSBzdGFydCBmcm9tIHByZXZpb3VzXG4gICAgRmluaXNoQ29tcG9uZW50RGVzdHJveUZpbmFsLCAvLyBhY3Rpb24gd2FzIGRpc21pc3NlZCBieSBkZXN0cm95aW5nIGNvbXBvbmVudCB0aGF0IHdhcyBleGVjdXRpbmcgaXRcbiAgICBGaW5pc2hSb3V0ZVVudHJpZ2dlclN0YXJ0LFxuICAgIEZpbmlzaFJvdXRlVW50cmlnZ2VyRW5kRmluYWwsXG4gICAgRmluaXNoUm91dGVVbnRyaWdnZXJUaW1lb3V0RmluYWxcbn1cblxuZXhwb3J0IHR5cGUgQWN0aW9uRGF0YSA9IHtcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG59O1xuIl19
325
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWV4ZWN1dGlvbi5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9hY3Rpb24vbW9kZWxzL2FjdGlvbi1leGVjdXRpb24ubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFDLGVBQWUsRUFBYyxhQUFhLEVBQUUsT0FBTyxFQUFnQixvQkFBb0IsRUFBRSxJQUFJLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDbkgsT0FBTyxFQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUszQyxPQUFPLEVBQUMsMkJBQTJCLEVBQUUsY0FBYyxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFFdkYsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFHbkQsTUFBTSxPQUFPLFdBQVc7SUFDcEIsWUFDb0IsS0FBVSxFQUFFLGdCQUFnQjtJQUM1QixZQUFxQixLQUFLLENBQUMsVUFBVTs7UUFEckMsVUFBSyxHQUFMLEtBQUssQ0FBSztRQUNWLGNBQVMsR0FBVCxTQUFTLENBQWlCO0lBQzNDLENBQUM7Q0FDUDtBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGNBQWM7SUFvQ3ZCLFlBQVksTUFBMkIsRUFBRSxLQUFLLEdBQUcsdUJBQXVCLENBQUMsWUFBWTtRQWhDckUsZ0JBQVcsR0FBUyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQzlCLFdBQU0sR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUUxRSxxQkFBcUI7UUFDTCx3QkFBbUIsR0FBRyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUtoRCxhQUFRLEdBQStCLEVBQUUsQ0FBQztRQUMxQyxxQkFBZ0IsR0FBRyxJQUFJLE9BQU8sRUFBd0IsQ0FBQztRQUN2RCw4QkFBeUIsR0FBRyxJQUFJLGVB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SUFDNUIsOEhBQWdDLENBQUE7QUFDcEMsQ0FBQyxFQTFCVyx1QkFBdUIsS0FBdkIsdUJBQXVCLFFBMEJsQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWN0aXZhdGVkUm91dGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7Q29uZmlybWF0aW9uLCBNZXNzYWdlfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQge0R5bmFtaWNEaWFsb2dSZWZ9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgUmVwbGF5U3ViamVjdCwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgdGFrZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2ZpbHRlciwgbWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7TWVkaXVzUXVlcnlQYXJhbX0gZnJvbSAnLi4vLi4vLi4vYXBpL21vZGVscyc7XG5pbXBvcnQge0lEYXRhUHJvdmlkZXJ9IGZyb20gJy4uLy4uLy4uL2RhdGEtcHJvdmlkZXJzJztcbmltcG9ydCB7QWN0aW9uRGVzY3JpcHRvcn0gZnJvbSAnLi4vLi4vLi4vZGVzY3JpcHRvcnMvYWN0aW9uJztcbmltcG9ydCB7QWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLCBBY3Rpb25UeXBlRW51bX0gZnJvbSAnLi4vLi4vLi4vZGVzY3JpcHRvcnMvdHlwZXMnO1xuaW1wb3J0IHtJQWN0aW9uRWRpdG9yQ29tcG9uZW50LCBJTW5nRXJyb3IsIElWaWV3Q29udGFpbmVyfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHtNbmdMb2dnZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQge0lkVHlwZX0gZnJvbSAnLi4vLi4vLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgQWN0aW9uRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgZXJyb3I6IGFueSwgLy8gZXJyb3IgZGV0YWlsc1xuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgZGlzbWlzc2VkOiBib29sZWFuID0gZmFsc2UgLy8gYnkgdXNlclxuICAgICkge31cbn1cblxuLyoqXG4gKiBBY3Rpb24gZXhlY3V0aW9uIGluc3RhbmNlIGNvbnRhaW5pbmcgZGF0YSBhYm91dCBleGVjdXRpb24gc3RhdGUgb2YgYWN0aW9uXG4gKi9cbmV4cG9ydCBjbGFzcyBBY3Rpb25JbnN0YW5jZTxULCBTPiB7XG4gICAgcHVibGljIHJlYWRvbmx5IGluc3RhbmNlSWQ6IHN0cmluZztcbiAgICBwdWJsaWMgcmVhZG9ubHkgaW5zdGFuY2VMb25nTmFtZTogc3RyaW5nO1xuICAgIHB1YmxpYyByZWFkb25seSBhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3I8VD47XG4gICAgcHVibGljIHJlYWRvbmx5IGNyZWF0ZWREYXRlOiBEYXRlID0gbmV3IERhdGUoKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlciA9IE1uZ0xvZ2dlclNlcnZpY2UuZ2V0KCkuY3JlYXRlKCdBY3Rpb25JbnN0YW5jZScpO1xuXG4gICAgLy8gZnVuY3Rpb24gZXhlY3V0aW9uXG4gICAgcHVibGljIHJlYWRvbmx5IGlzUnVuTG9hZGluZ1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICAgIC8vIHBhcmFtZXRlcnMsIGNvbnRleHRzLCBzdGF0ZXNcbiAgICBwdWJsaWMgdHJpZ2dlclBhcmFtZXRlcnM/OiBBY3Rpb25QYXJhbWV0ZXJzPFQ+O1xuICAgIHB1YmxpYyBhY3RpdmF0aW9uUGFyYW1ldGVycz86IEFjdGlvblBhcmFtZXRlcnM8VD47XG4gICAgcHJpdmF0ZSByZWFkb25seSBjb250ZXh0czogQXJyYXk8QWN0aW9uQ29udGV4dDxULCBTPj4gPSBbXTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGV4ZWN1dGlvblN1YmplY3QgPSBuZXcgU3ViamVjdDxUIHwgbnVsbCB8IHVuZGVmaW5lZD4oKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGV4ZWN1dGlvbklzUnVubmluZ1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0YXRlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0+KDEpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVzdWx0U3ViamVjdCA9IG5ldyBSZXBsYXlTdWJqZWN0PFQgfCBudWxsPigxKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVycm9yU3ViamVjdCA9IG5ldyBSZXBsYXlTdWJqZWN0PEFjdGlvbkVycm9yPigxKTtcblxuICAgIHByaXZhdGUgY29udGV4dEV4ZWN1dGlvblN1YnNjcmlwdGlvbnM6IEFycmF5PFN1YnNjcmlwdGlvbj4gPSBbXTtcblxuICAgIC8vIHJlc3VsdCBvciBlcnJvclxuICAgIHByaXZhdGUgX3Jlc3VsdD86IFQgfCBudWxsO1xuICAgIHByaXZhdGUgX2Vycm9yPzogQWN0aW9uRXJyb3I7XG5cbiAgICAvLyBhZGRpdGlvbmFsIGRhdGEgZnJvbSB0cmlnZ2VyL2FjdGl2YXRpb25cbiAgICBwdWJsaWMgYWN0aXZhdGlvbkRpYWxvZ1JlZj86IER5bmFtaWNEaWFsb2dSZWY7XG4gICAgcHVibGljIGFjdGl2YXRpb25FZGl0b3JDb21wb25lbnRSZWY/OiBJQWN0aW9uRWRpdG9yQ29tcG9uZW50O1xuXG4gICAgLy8gbGlua2VkIGFjdGlvbnNcbiAgICBwcml2YXRlIF9yZWFjdGl2YXRpb25JbnN0YW5jZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFjdGlvbkluc3RhbmNlPFQsIFM+IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpOyAvLyBlZGl0b3IgYWN0aW9uIHdpdGggcmVzdWJtaXQgZW5hYmxlZFxuICAgIHB1YmxpYyBwcmV2aW91c0luc3RhbmNlPzogQWN0aW9uSW5zdGFuY2U8VCwgUz47XG4gICAgcHVibGljIG5leHRBY3Rpb25JbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPHVua25vd24sIHVua25vd24+OyAvLyBhcyBkZWZpbmVkIGluIGFjdGlvbiBkZXNjcmlwdG9yXG4gICAgcHVibGljIGVycm9yQWN0aW9uSW5zdGFuY2U/OiBBY3Rpb25JbnN0YW5jZTxULCBTPjsgLy8gZXJyb3IgYWN0aW9uIG11c3QgcmVseSBvbiBzYW1lIHR5cGUsIGFzIGRlZmluZWQgaW4gYWN0aW9uIGRlc2NyaXB0b3JcblxuICAgIGNvbnN0cnVjdG9yKGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxUPiwgc3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5UcmlnZ2VyU3RhcnQpIHtcbiAgICAgICAgdGhpcy5pbnN0YW5jZUlkID0gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIpO1xuICAgICAgICB0aGlzLmluc3RhbmNlTG9uZ05hbWUgPSBgJHthY3Rpb24uYWN0aW9uTmFtZUxvbmd9XyR7dGhpcy5pbnN0YW5jZUlkfWA7XG4gICAgICAgIHRoaXMuYWN0aW9uID0gYWN0aW9uO1xuICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpc1J1bkxvYWRpbmckKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1J1bkxvYWRpbmdTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY29udGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dHMubGVuZ3RoID09PSAwID8gdW5kZWZpbmVkIDogdGhpcy5jb250ZXh0c1t0aGlzLmNvbnRleHRzLmxlbmd0aCAtIDFdO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZXhlY3V0aW9uJCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhlY3V0aW9uU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGV4ZWN1dGlvbklzUnVubmluZyQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmV4ZWN1dGlvbklzUnVubmluZ1N1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHN0YXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZVN1YmplY3QudmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBzdGF0ZShzdGF0ZTogQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0pIHtcbiAgICAgICAgaWYgKHN0YXRlID4gdGhpcy5zdGF0ZVN1YmplY3QudmFsdWUgfHwgKHRoaXMuc3RhdGVTdWJqZWN0LnZhbHVlID09PSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5SdW5FcnJvciAmJiBzdGF0ZSA9PT0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uUnVuU3RhcnQpKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShgSW5zdGFuY2UgJHt0aGlzLmluc3RhbmNlTG9uZ05hbWV9IC0gc3RhdGUgIyR7c3RhdGV9OiAke0FjdGlvbkluc3RhbmNlU3RhdGVFbnVtW3N0YXRlXX1gKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVTdWJqZWN0Lm5leHQoc3RhdGUpO1xuICAgICAgICAgICAgc3dpdGNoIChzdGF0ZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoU3VjY2Vzc0ZpbmFsOlxuICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoRXJyb3JGaW5hbDpcbiAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaERpc21pc3NlZEZpbmFsOlxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5hY3Rpb24uYWN0aXZhdGlvblRyaWdnZXIgPT09IEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bS5PbkNsaWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoU3VjY2Vzc1JlYWN0aXZhdGVGaW5hbDpcbiAgICAgICAgICAgICAgICAgICAgLy8gcGFydGlhbGx5IGZpbmlzaCByZWFjdGl2YXRpb24gYmVjYXVzZSBuZXcgaW5zdGFuY2UgZXZlbnQgbXVzdCBzdGlsbCBiZSBlbWl0dGVkXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlRW51bS5FZGl0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmluaXNoKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoQ29tcG9uZW50RGVzdHJveUZpbmFsOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaFJvdXRlVW50cmlnZ2VyRW5kRmluYWw6XG4gICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hSb3V0ZVVudHJpZ2dlclRpbWVvdXRGaW5hbDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYWN0aW9uLmFjdGl2YXRpb25UcmlnZ2VyID09PSBBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW0uT25Sb3V0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maW5pc2goKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc3RhdGUkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZVN1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJlc3VsdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHJlc3VsdChyZXN1bHQ6IFQgfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoYEluc3RhbmNlICR7dGhpcy5pbnN0YW5jZUxvbmdOYW1lfSAtIHJlc3VsdGAsIHJlc3VsdCk7XG5cbiAgICAgICAgdGhpcy5fcmVzdWx0ID0gcmVzdWx0O1xuICAgICAgICB0aGlzLnJlc3VsdFN1YmplY3QubmV4dChyZXN1bHQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcmVzdWx0JCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzdWx0U3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGVycm9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXJyb3I7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBlcnJvcihlcnJvcjogQWN0aW9uRXJyb3IgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlcnJvciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKGBJbnN0YW5jZSAke3RoaXMuaW5zdGFuY2VMb25nTmFtZX0gLSBlcnJvcmAsIGVycm9yKTtcblxuICAgICAgICB0aGlzLl9lcnJvciA9IGVycm9yO1xuICAgICAgICB0aGlzLmVycm9yU3ViamVjdC5uZXh0KGVycm9yKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGVycm9yJCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3JTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgcmVhY3RpdmF0aW9uSW5zdGFuY2UoaW5zdGFuY2U6IEFjdGlvbkluc3RhbmNlPFQsIFM+IHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIHRoaXMgaXMgYWxsb3dlZCB0byBvbmx5IGJlIGV4ZWN1dGVkIG9uY2UgZm9yIHN1YmplY3QgYW5kIG11c3QgYmUgaW4gY29ycmVjdCBzdGF0dXMhXG4gICAgICAgIGlmICh0aGlzLnN0YXRlICE9PSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hTdWNjZXNzUmVhY3RpdmF0ZUZpbmFsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcmVhY3RpdmF0aW9uSW5zdGFuY2VTdWJqZWN0Lm5leHQoaW5zdGFuY2UpO1xuICAgICAgICB0aGlzLl9yZWFjdGl2YXRpb25JbnN0YW5jZVN1YmplY3QuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJlYWN0aXZhdGlvbkluc3RhbmNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVhY3RpdmF0aW9uSW5zdGFuY2VTdWJqZWN0LnZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcmVhY3RpdmF0aW9uSW5zdGFuY2UkKCk6IE9ic2VydmFibGU8QWN0aW9uSW5zdGFuY2U8VCwgUz4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlYWN0aXZhdGlvbkluc3RhbmNlU3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKFxuICAgICAgICAgICAgZmlsdGVyKGkgPT4gISFpKSwgLy8gaWdub3JlIHVuZGVmaW5lZCBldmVudHMgKHVzdWFsbHkgaW5pdGlhbClcbiAgICAgICAgICAgIG1hcChpID0+IGkhKSxcbiAgICAgICAgICAgIHRha2UoMSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY29udGV4dEF0KGlkeDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBpZHggPCB0aGlzLmNvbnRleHRzLmxlbmd0aCA/IHRoaXMuY29udGV4dHNbaWR4XSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgcHVibGljIG5ld0NvbnRleHQoY29udGV4dDogQWN0aW9uQ29udGV4dDxULCBTPiwgZmluaXNoUHJldmlvdXMgPSB0cnVlKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKGBJbnN0YW5jZSAke3RoaXMuaW5zdGFuY2VMb25nTmFtZX0gLSBuZXcgY29udGV4dCAke2NvbnRleHQuY29udGV4dExvbmdOYW1lfWApO1xuXG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb250ZXh0ID0gdGhpcy5jb250ZXh0O1xuICAgICAgICBpZiAoY3VycmVudENvbnRleHQpIHtcbiAgICAgICAgICAgIGN1cnJlbnRDb250ZXh0LmV4ZWN1dGlvbkNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb250ZXh0RXhlY3V0aW9uU3Vic2NyaXB0aW9ucy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgICAgICAgdGhpcy5jb250ZXh0RXhlY3V0aW9uU3Vic2NyaXB0aW9ucyA9IFtdO1xuICAgICAgICB0aGlzLmNvbnRleHRFeGVjdXRpb25TdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICBjb250ZXh0LmV4ZWN1dGlvbiQuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiBuZXh0ID0+IHRoaXMuZXhlY3V0aW9uU3ViamVjdC5uZXh0KG5leHQpLFxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvciA9PiB0aGlzLmV4ZWN1dGlvblN1YmplY3QuZXJyb3IoZXJyb3IpXG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNvbnRleHRFeGVjdXRpb25TdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICBjb250ZXh0LmV4ZWN1dGlvbklzUnVubmluZyQuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiBuZXh0ID0+IHRoaXMuZXhlY3V0aW9uSXNSdW5uaW5nU3ViamVjdC5uZXh0KG5leHQpXG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNvbnRleHRzLnB1c2goY29udGV4dCk7XG4gICAgfVxuXG4gICAgcHVibGljIGZvcmNlRmluaXNoKCkge1xuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKGBGb3JjZSBmaW5pc2hpbmcgaW5zdGFuY2UgJyR7dGhpcy5pbnN0YW5jZUxvbmdOYW1lfScuIFRyeSBjb21wbGV0aW5nIGluc3RhbmNlIHdpdGggc3RhdGVzIGluc3RlYWQuYCk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hEaXNtaXNzZWRGaW5hbDtcbiAgICAgICAgdGhpcy5maW5pc2goKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbmlzaChyZWFjdGl2YXRlID0gZmFsc2UpIHtcbiAgICAgICAgLy8gY29tcGxldGUgYWxsIHN1YmplY3RzXG4gICAgICAgIHRoaXMuY29udGV4dHMuZm9yRWFjaChjID0+IGMuZmluaXNoKCkpO1xuICAgICAgICB0aGlzLmV4ZWN1dGlvblN1YmplY3QuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5leGVjdXRpb25Jc1J1bm5pbmdTdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuc3RhdGVTdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMucmVzdWx0U3ViamVjdC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLmVycm9yU3ViamVjdC5jb21wbGV0ZSgpO1xuICAgICAgICBpZiAoIXJlYWN0aXZhdGUpIHtcbiAgICAgICAgICAgIC8vIGFsbG93IHJlYWN0aXZhdGlvbiBpbnN0YW5jZSB0byBiZSBlbWl0dGVkIHNlcGFyYXRlbHlcbiAgICAgICAgICAgIHRoaXMuX3JlYWN0aXZhdGlvbkluc3RhbmNlU3ViamVjdC5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGlzQ2xvc2VkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5leGVjdXRpb25TdWJqZWN0LmlzU3RvcHBlZCAmJlxuICAgICAgICAgICAgdGhpcy5leGVjdXRpb25Jc1J1bm5pbmdTdWJqZWN0LmlzU3RvcHBlZCAmJlxuICAgICAgICAgICAgdGhpcy5zdGF0ZVN1YmplY3QuaXNTdG9wcGVkICYmXG4gICAgICAgICAgICB0aGlzLnJlc3VsdFN1YmplY3QuaXNTdG9wcGVkICYmXG4gICAgICAgICAgICB0aGlzLmVycm9yU3ViamVjdC5pc1N0b3BwZWQgJiZcbiAgICAgICAgICAgIHRoaXMuX3JlYWN0aXZhdGlvbkluc3RhbmNlU3ViamVjdC5pc1N0b3BwZWQgJiZcbiAgICAgICAgICAgIHRoaXMuY29udGV4dEV4ZWN1dGlvblN1YnNjcmlwdGlvbnMuZXZlcnkocyA9PiBzLmNsb3NlZCkgJiZcbiAgICAgICAgICAgIHRoaXMuY29udGV4dHMuZXZlcnkoYyA9PiBjLmlzQ2xvc2VkKCkpXG4gICAgICAgICk7XG4gICAgfVxufVxuXG4vKipcbiAqIENsYXNzIGNvbnRhaW5pbmcgYWxsIG1haW4gZGF0YSBmb3IgYWN0aW9uIHRvIGJlIGV4ZWN1dGVkIGluIHJ1bi9mZXRjaC9zdWJtaXQgc3RhdGVzLlxuICovXG5leHBvcnQgY2xhc3MgQWN0aW9uQ29udGV4dDxULCBTPiB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXIgPSBNbmdMb2dnZXJTZXJ2aWNlLmdldCgpLmNyZWF0ZSgnQWN0aW9uQ29udGV4dCcpO1xuICAgIHB1YmxpYyByZWFkb25seSBjb250ZXh0TG9uZ05hbWU6IHN0cmluZztcbiAgICBwdWJsaWMgcHJldmlvdXNBY3Rpb25JbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPHVua25vd24sIHVua25vd24+O1xuICAgIHB1YmxpYyBjb25maXJtYXRpb24/OiBDb25maXJtYXRpb247XG4gICAgcHVibGljIG5vdGlmaWNhdGlvbj86IE1lc3NhZ2U7XG4gICAgcHVibGljIHJ1blN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgaW5zdGFuY2U6IEFjdGlvbkluc3RhbmNlPFQsIFM+LFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgcGFyYW1ldGVyczogQWN0aW9uUGFyYW1ldGVyczxUPixcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IGZ1bmN0aW9uTmFtZTogJ3J1bicgfCAnZmV0Y2gnIHwgJ3N1Ym1pdCcsXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBkYXRhUHJvdmlkZXI/OiBJRGF0YVByb3ZpZGVyPFQsIFM+LFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgc2VydmljZUluc3RhbmNlPzogUyxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBleGVjdXRpb25TdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8VCB8IG51bGwgfCB1bmRlZmluZWQ+KDEpLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGV4ZWN1dGlvbklzUnVubmluZ1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKVxuICAgICkge1xuICAgICAgICB0aGlzLmNvbnRleHRMb25nTmFtZSA9IGAke3RoaXMuaW5zdGFuY2UuaW5zdGFuY2VMb25nTmFtZX1fJHtmdW5jdGlvbk5hbWV9YDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGV4ZWN1dGlvbiQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmV4ZWN1dGlvblN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBleGVjdXRpb25Jc1J1bm5pbmckKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5leGVjdXRpb25Jc1J1bm5pbmdTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGV4ZWN1dGlvblN0YXJ0KCkge1xuICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShgQ29udGV4dCAke3RoaXMuY29udGV4dExvbmdOYW1lfSAtIGV4ZWN1dGlvbiBzdGFydGApO1xuICAgICAgICB0aGlzLmV4ZWN1dGlvbklzUnVubmluZ1N1YmplY3QubmV4dCh0cnVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZXhlY3V0aW9uTmV4dChuZXh0OiBUIHwgbnVsbCB8IHVuZGVmaW5lZCwgZmluaXNoID0gdHJ1ZSkge1xuICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShgQ29udGV4dCAke3RoaXMuY29udGV4dExvbmdOYW1lfSAtIGV4ZWN1dGlvbiBuZXh0IGV2ZW50YCwgbmV4dCwgZmluaXNoKTtcblxuICAgICAgICB0aGlzLmV4ZWN1dGlvblN1YmplY3QubmV4dChuZXh0KTtcbiAgICAgICAgaWYgKGZpbmlzaCkge1xuICAgICAgICAgICAgdGhpcy5leGVjdXRpb25Db21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGV4ZWN1dGlvbkNvbXBsZXRlKCkge1xuICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShgQ29udGV4dCAke3RoaXMuY29udGV4dExvbmdOYW1lfSAtIGV4ZWN1dGlvbiBjb21wbGV0ZWApO1xuXG4gICAgICAgIHRoaXMuZXhlY3V0aW9uU3ViamVjdC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLmV4ZWN1dGlvbklzUnVubmluZ1N1YmplY3QubmV4dChmYWxzZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGV4ZWN1dGlvbkVycm9yKGVycjogSU1uZ0Vycm9yKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKGBDb250ZXh0ICR7dGhpcy5jb250ZXh0TG9uZ05hbWV9IC0gZXhlY3V0aW9uIGVycm9yYCwgZXJyKTtcbiAgICAgICAgdGhpcy5leGVjdXRpb25TdWJqZWN0LmVycm9yKGVycik7XG4gICAgICAgIHRoaXMuZXhlY3V0aW9uSXNSdW5uaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZmluaXNoKCkge1xuICAgICAgICB0aGlzLnJ1blN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5leGVjdXRpb25TdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuZXhlY3V0aW9uSXNSdW5uaW5nU3ViamVjdC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0Nsb3NlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhlY3V0aW9uU3ViamVjdC5pc1N0b3BwZWQgJiYgdGhpcy5leGVjdXRpb25Jc1J1bm5pbmdTdWJqZWN0LmlzU3RvcHBlZCAmJiAodGhpcy5ydW5TdWJzY3JpcHRpb24/LmNsb3NlZCA/PyB0cnVlKTtcbiAgICB9XG59XG5cbi8qKlxuICogQ2xhc3MgY29udGFpbmluZyBhbGwgbWFpbiBkYXRhIGZvciBhY3Rpb24gdmFsaWRhdGlvbnMgKGVuYWJsZWQvdmlzaWJsZSkgdG8gYmUgZXhlY3V0ZWQgaW4gdmFsaWRhdGlvbiBzdGF0ZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBBY3Rpb25Db250ZXh0VmFsaWRhdGlvbjxULCBTPiB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBkZXNjcmlwdG9yOiBBY3Rpb25EZXNjcmlwdG9yPFQ+LFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgcGFyYW1ldGVyczogQWN0aW9uUGFyYW1ldGVyczxUPixcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IGRhdGFQcm92aWRlcj86IElEYXRhUHJvdmlkZXI8VCwgUz4sXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBzZXJ2aWNlSW5zdGFuY2U/OiBTXG4gICAgKSB7fVxufVxuXG5leHBvcnQgY2xhc3MgQWN0aW9uUGFyYW1ldGVyczxUPiB7XG4gICAgcHVibGljIGFjdGlvbkRhdGE/OiBBY3Rpb25EYXRhO1xuICAgIHB1YmxpYyBxdWVyeVBhcmFtPzogTWVkaXVzUXVlcnlQYXJhbTtcbiAgICBwdWJsaWMgdmlld0NvbnRhaW5lcj86IElWaWV3Q29udGFpbmVyPFQsIHVua25vd24+O1xuICAgIHB1YmxpYyBzb3VyY2VDb21wb25lbnQ/OiBhbnk7XG4gICAgcHVibGljIGhvc3RDb21wb25lbnQ/OiB1bmtub3duO1xuICAgIHB1YmxpYyByb3V0ZT86IEFjdGl2YXRlZFJvdXRlO1xuICAgIHB1YmxpYyBzZWxlY3RlZEl0ZW1zOiBUW10gPSBbXTtcbiAgICBwdWJsaWMgbG9jYWxlPzogc3RyaW5nO1xuXG4gICAgcHVibGljIGZvcm1JdGVtPzogVCB8IG51bGw7XG4gICAgcHVibGljIHN1Ym1pdFJlc3VsdD86IFQgfCBudWxsO1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIGl0ZW1JZD86IElkVHlwZSwgcHVibGljIGl0ZW0/OiBUKSB7fVxuXG4gICAgcHVibGljIHdpdGhBY3Rpb25EYXRhKGFjdGlvbkRhdGE/OiBBY3Rpb25EYXRhKSB7XG4gICAgICAgIHRoaXMuYWN0aW9uRGF0YSA9IGFjdGlvbkRhdGE7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUXVlcnlQYXJhbShxdWVyeVBhcmFtPzogTWVkaXVzUXVlcnlQYXJhbSkge1xuICAgICAgICB0aGlzLnF1ZXJ5UGFyYW0gPSBxdWVyeVBhcmFtO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFZpZXdDb250YWluZXIodmlld0NvbnRhaW5lcj86IElWaWV3Q29udGFpbmVyPFQsIHVua25vd24+KSB7XG4gICAgICAgIHRoaXMudmlld0NvbnRhaW5lciA9IHZpZXdDb250YWluZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoU291cmNlQ29tcG9uZW50KHNvdXJjZUNvbXBvbmVudD86IGFueSkge1xuICAgICAgICB0aGlzLnNvdXJjZUNvbXBvbmVudCA9IHNvdXJjZUNvbXBvbmVudDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhIb3N0Q29tcG9uZW50KGhvc3RDb21wb25lbnQ/OiB1bmtub3duKSB7XG4gICAgICAgIHRoaXMuaG9zdENvbXBvbmVudCA9IGhvc3RDb21wb25lbnQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUm91dGUocm91dGU/OiBBY3RpdmF0ZWRSb3V0ZSkge1xuICAgICAgICB0aGlzLnJvdXRlID0gcm91dGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoU2VsZWN0ZWRJdGVtcyhzZWxlY3RlZEl0ZW1zOiBUW10pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gc2VsZWN0ZWRJdGVtcztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhMb2NhbGUobG9jYWxlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5sb2NhbGUgPSBsb2NhbGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVzZWQgZm9yIGFjdGlvbiBlZGl0b3IgcmUtZmV0Y2guXG4gICAgICogQHBhcmFtIGl0ZW0gRm9ybSBpdGVtLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoRm9ybUl0ZW0oaXRlbTogVCB8IG51bGwgfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5mb3JtSXRlbSA9IGl0ZW07XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVzZWQgZm9yIGFjdGlvbiBlZGl0b3IgcmUtZmV0Y2guXG4gICAgICogQHBhcmFtIGl0ZW0gU3VibWl0IHJlc3VsdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aFN1Ym1pdFJlc3VsdChpdGVtOiBUIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgICAgICB0aGlzLnN1Ym1pdFJlc3VsdCA9IGl0ZW07XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cblxuLyoqXG4gKiBTdGF0ZXMgb2YgYWN0aW9uLiBFbnVtcyBlbmRpbmcgd2l0aCBgKkZpbmFsYCBhcmUgc3VwcG9zZWQgdG8gYmUgZmluYWwuXG4gKi9cbmV4cG9ydCBlbnVtIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtIHtcbiAgICBUcmlnZ2VyU3RhcnQsIC8vIGFjdGlvbiB3YXMgdHJpZ2dlcmVkIChjbGljayBvciBkaXJlY3QpXG4gICAgVHJpZ2dlckVuZCxcbiAgICBBY3RpdmF0aW9uU3RhcnQsIC8vIGFjdGlvbiBhY3RpdmF0aW9uIHN0YXJ0ZWQgKGRpcmVjdCwgZXZlbnQgb3IgZWRpdG9yKVxuICAgIEFjdGl2YXRpb25FbmQsIC8vIGFjdGlvbiBhY3RpdmF0aW9uIGVuZGVkXG4gICAgRmV0Y2hTdGFydCwgLy8gZmV0Y2ggc3RhcnRlZFxuICAgIEZldGNoRW5kLCAvLyBmZXRjaCBlbmRlZFxuICAgIEZldGNoRXJyb3IsIC8vIGZldGNoIGVycm9yXG4gICAgUnVuQ29uZmlybWF0aW9uU3RhcnQsIC8vIGNvbmZpcm1hdGlvbiBmb3IgcnVuIGlzIHN0YXJ0ZWRcbiAgICBSdW5Db25maXJtYXRpb25FbmRBY2NlcHQsIC8vIGNvbmZpcm1hdGlvbiBhY2NlcHRlZFxuICAgIFJ1bkNvbmZpcm1hdGlvbkVuZFJlamVjdCwgLy8gY29uZmlybWF0aW9uIHJlamVjdGVkXG4gICAgUnVuU3RhcnQsIC8vIGFjdGlvbiB3YXMgcnVuIGJ5IGNhbGxpbmcgbWFpbiBmdW5jdGlvblxuICAgIFJ1bkVuZCwgLy8gYWN0aW9uIHJ1biBmdW5jdGlvbiBleGVjdXRlZFxuICAgIFJ1bkVycm9yLCAvLyBhY3Rpb24gcnVuIGZ1bmN0aW9uIGV4ZWN1dGVkIHdpdGggZXJyb3JcbiAgICBOZXh0QWN0aW9uU3RhcnQsIC8vIG5leHQgYWN0aW9uIHN0YXJ0ZWRcbiAgICBOZXh0QWN0aW9uRW5kLCAvLyBuZXh0IGFjdGlvbiBmaW5pc2hlZFxuICAgIEVycm9yQWN0aW9uU3RhcnQsIC8vIGVycm9yIGFjdGlvbiBzdGFydGVkXG4gICAgRXJyb3JBY3Rpb25FbmQsIC8vIGVycm9yIGFjdGlvbiBmaW5pc2hlZFxuICAgIEZpbmlzaFN1Y2Nlc3NGaW5hbCwgLy8gYWN0aW9uIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseVxuICAgIEZpbmlzaEVycm9yRmluYWwsIC8vIGFjdGlvbiBleGVjdXRlZCB3aXRoIGVycm9yXG4gICAgRmluaXNoRGlzbWlzc2VkRmluYWwsIC8vIGFjdGlvbiB3YXMgZGlzbWlzc2VkIGJ5IHVzZXJcbiAgICBGaW5pc2hTdWNjZXNzUmVhY3RpdmF0ZUZpbmFsLCAvLyBhY3Rpb24gZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5LCBhbm90aGVyIGluc3RhbmNlIHdpbGwgZGlyZWN0bHkgc3RhcnQgZnJvbSBwcmV2aW91c1xuICAgIEZpbmlzaENvbXBvbmVudERlc3Ryb3lGaW5hbCwgLy8gYWN0aW9uIHdhcyBkaXNtaXNzZWQgYnkgZGVzdHJveWluZyBjb21wb25lbnQgdGhhdCB3YXMgZXhlY3V0aW5nIGl0XG4gICAgRmluaXNoUm91dGVVbnRyaWdnZXJTdGFydCxcbiAgICBGaW5pc2hSb3V0ZVVudHJpZ2dlckVuZEZpbmFsLFxuICAgIEZpbmlzaFJvdXRlVW50cmlnZ2VyVGltZW91dEZpbmFsXG59XG5cbmV4cG9ydCB0eXBlIEFjdGlvbkRhdGEgPSB7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xufTtcbiJdfQ==