tnx-shared 5.2.20 → 5.2.21

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 (71) hide show
  1. package/app-context/component-context.service.d.ts.map +1 -1
  2. package/classes/base/component-base.d.ts +1 -1
  3. package/classes/public-function.d.ts +3 -2
  4. package/classes/public-function.d.ts.map +1 -1
  5. package/components/chat/chat-box/chat-box.component.d.ts +1 -1
  6. package/components/dropdown/services/dropdown.service.d.ts.map +1 -1
  7. package/components/file-explorer/services/file-explorer-new.service.d.ts.map +1 -1
  8. package/components/file-explorer/services/file-explorer.service.d.ts.map +1 -1
  9. package/components/file-explorer/services/file-version.service.d.ts.map +1 -1
  10. package/components/file-explorer/services/folder.service.d.ts.map +1 -1
  11. package/components/file-explorer/services/ky-so-sim-signPDF.service.d.ts.map +1 -1
  12. package/components/file-explorer/services/my-drive.service.d.ts.map +1 -1
  13. package/components/tn-app-help/services/path-name.service.d.ts.map +1 -1
  14. package/congviec/congviec/services/congviec-dinhkem.service.d.ts.map +1 -1
  15. package/esm2020/app-context/component-context.service.mjs +4 -5
  16. package/esm2020/classes/base/component-base.mjs +2 -2
  17. package/esm2020/components/common-app-component/common-app-component.mjs +2 -2
  18. package/esm2020/components/crud/crud-form/crud-form.component.mjs +1 -1
  19. package/esm2020/components/dropdown/services/dropdown.service.mjs +5 -5
  20. package/esm2020/components/file-explorer/file-ky-so-sim/file-ky-so-sim.component.mjs +1 -1
  21. package/esm2020/components/file-explorer/file-manager/file-manager.component.mjs +2 -2
  22. package/esm2020/components/file-explorer/file-viewer/file-viewer.component.mjs +3 -3
  23. package/esm2020/components/file-explorer/services/file-explorer-new.service.mjs +39 -40
  24. package/esm2020/components/file-explorer/services/file-explorer.service.mjs +48 -51
  25. package/esm2020/components/file-explorer/services/file-version.service.mjs +5 -4
  26. package/esm2020/components/file-explorer/services/folder.service.mjs +3 -3
  27. package/esm2020/components/file-explorer/services/ky-so-sim-signPDF.service.mjs +3 -2
  28. package/esm2020/components/file-explorer/services/my-drive.service.mjs +34 -34
  29. package/esm2020/components/mask/mask.component.mjs +1 -1
  30. package/esm2020/components/number-picker-range/number-picker-range.component.mjs +1 -1
  31. package/esm2020/components/tn-app-help/services/path-name.service.mjs +4 -3
  32. package/esm2020/components/tn-tinymce/tn-tinymce.component.mjs +2 -2
  33. package/esm2020/components/user-picker/user-picker-box/user-picker-box.component.mjs +1 -1
  34. package/esm2020/components/workflow/workflow-history-new/workflow-history-new.component.mjs +1 -1
  35. package/esm2020/congviec/cauhinh-workflow/cauhinh-workflow.component.mjs +1 -1
  36. package/esm2020/congviec/congviec/services/congviec-dinhkem.service.mjs +5 -4
  37. package/esm2020/services/article.service.mjs +10 -13
  38. package/esm2020/services/base.service.mjs +36 -41
  39. package/esm2020/services/custom-router.service.mjs +4 -5
  40. package/esm2020/services/entity-picker.service.mjs +4 -3
  41. package/esm2020/services/file-object-v4.service.mjs +5 -7
  42. package/esm2020/services/high-performance.service.mjs +4 -3
  43. package/esm2020/services/master-data.service.mjs +23 -30
  44. package/esm2020/services/organization.service.mjs +18 -23
  45. package/esm2020/services/template-v4.service.mjs +3 -2
  46. package/esm2020/services/template.service.mjs +19 -27
  47. package/esm2020/services/templateinstance.service.mjs +22 -31
  48. package/esm2020/services/tn-client.service.mjs +3 -3
  49. package/esm2020/services/unique-number.service.mjs +4 -3
  50. package/esm2020/services/user-v5.service.mjs +31 -39
  51. package/esm2020/services/user.service.mjs +32 -40
  52. package/fesm2015/tnx-shared.mjs +334 -409
  53. package/fesm2015/tnx-shared.mjs.map +1 -1
  54. package/fesm2020/tnx-shared.mjs +334 -409
  55. package/fesm2020/tnx-shared.mjs.map +1 -1
  56. package/package.json +2 -2
  57. package/services/article.service.d.ts.map +1 -1
  58. package/services/base.service.d.ts.map +1 -1
  59. package/services/common.service.d.ts +2 -2
  60. package/services/custom-router.service.d.ts.map +1 -1
  61. package/services/entity-picker.service.d.ts.map +1 -1
  62. package/services/file-object-v4.service.d.ts.map +1 -1
  63. package/services/high-performance.service.d.ts.map +1 -1
  64. package/services/master-data.service.d.ts.map +1 -1
  65. package/services/organization.service.d.ts.map +1 -1
  66. package/services/template-v4.service.d.ts.map +1 -1
  67. package/services/template.service.d.ts.map +1 -1
  68. package/services/templateinstance.service.d.ts.map +1 -1
  69. package/services/unique-number.service.d.ts.map +1 -1
  70. package/services/user-v5.service.d.ts.map +1 -1
  71. package/services/user.service.d.ts.map +1 -1
@@ -558,7 +558,7 @@ export class FileManagerComponent extends DataListBase {
558
558
  this.setDatasource(this.model.dataSource);
559
559
  }
560
560
  ngOnDestroy() {
561
- this._unsubcribleAll.next();
561
+ this._unsubcribleAll.next(1);
562
562
  this._unsubcribleAll.complete();
563
563
  if (this.fileDataService) {
564
564
  this.fileDataService.unregister(this);
@@ -1293,4 +1293,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImpor
1293
1293
  }], onSelected: [{
1294
1294
  type: Output
1295
1295
  }] } });
1296
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1tYW5hZ2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NoYXJlZC9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1leHBsb3Jlci9maWxlLW1hbmFnZXIvZmlsZS1tYW5hZ2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NoYXJlZC9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1leHBsb3Jlci9maWxlLW1hbmFnZXIvZmlsZS1tYW5hZ2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBWSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0gsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUkvQixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUN6RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDcEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBT2pGLE9BQU8sRUFBb0Isb0JBQW9CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQVd0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QkFDRSxXQUFXO3NCQUFwQyxTQUFTO3VCQUFDLGFBQWE7Z0JBRWYsT0FBTztzQkFBZixLQUFLO2dCQUdPLGVBQWU7c0JBQTNCLEtBQUs7Z0JBUUcsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLDZCQUE2QjtzQkFBckMsS0FBSztnQkFDRyw0QkFBNEI7c0JBQXBDLEtBQUs7Z0JBQ0csNkJBQTZCO3NCQUFyQyxLQUFLO2dCQUNHLDRCQUE0QjtzQkFBcEMsS0FBSztnQkFDRyw4QkFBOEI7c0JBQXRDLEtBQUs7Z0JBQ0csNkJBQTZCO3NCQUFyQyxLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBR0csY0FBYztzQkFBdEIsS0FBSztnQkFHRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFJTyxTQUFTO3NCQUFyQixLQUFLO2dCQWNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBR0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRU8sS0FBSztzQkFBakIsS0FBSztnQkFNRyx5QkFBeUI7c0JBQWpDLEtBQUs7Z0JBRUksT0FBTztzQkFBaEIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgZm9yd2FyZFJlZiwgSW5qZWN0b3IsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlIH0gZnJvbSAnbmd4LWRldmljZS1kZXRlY3Rvcic7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgTWVudUl0ZW0sIE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgQ29udGV4dE1lbnUgfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy9jb250ZXh0bWVudSc7XHJcbmltcG9ydCB7IEZpbGVVcGxvYWQgfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy9maWxldXBsb2FkJztcclxuaW1wb3J0IHsgQ29tcG9uZW50Q29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9hcHAtY29udGV4dC9jb21wb25lbnQtY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGF0YUxpc3RCYXNlIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9iYXNlL2RhdGEtbGlzdC1iYXNlJztcclxuaW1wb3J0IHsgQ29tbW9uRXJyb3JDb2RlIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9jb21tb24tZXJyb3ItY29kZSc7XHJcbmltcG9ydCB7IEZvcm1TdGF0ZSB9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvY29uc3RhbnRzJztcclxuaW1wb3J0IHsgUGVybWlzc2lvbkJhc2UgfSBmcm9tICcuLi8uLi8uLi9lbnVtcy9jb21tb24nO1xyXG5pbXBvcnQgeyBJRmlsZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMvaS1maWxlLWNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEVkaXRGaWxlQ29tbWFuZCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9lZGl0LWZpbGUtY29tbWFuZCc7XHJcbmltcG9ydCB7IEZpbGVUeXBlIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2ZpbGUtdHlwZSc7XHJcbmltcG9ydCB7IENvbW1hbmRUeXBlLCBUbkNsaWVudENvbW1hbmQgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvdG4tY2xpZW50LWNvbW1hbmQnO1xyXG5pbXBvcnQgeyBBdXRoZW5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXV0aGVuLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGaWxlTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9maWxlLW1hbmFnZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IE5vdGlmaWVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL25vdGlmaWVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTaWduYWxSU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3NpZ25hbHIuc2VydmljZSc7XHJcbmltcG9ydCB7IFRuQ2xpZW50U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3RuLWNsaWVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRmlsZUt5U29TaW1Db21wb25lbnQgfSBmcm9tICcuLi9maWxlLWt5LXNvLXNpbS9maWxlLWt5LXNvLXNpbS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBGaWxlRXhwbG9yZXJJdGVtLCBGaWxlRXhwbG9yZXJJdGVtVHlwZSB9IGZyb20gJy4uL21vZGVscy9maWxlLWV4cGxvcmVyLWl0ZW0nO1xyXG5pbXBvcnQgeyBGaWxlVmVyc2lvbkRUTyB9IGZyb20gJy4uL21vZGVscy9maWxlLXZlcnNpb24tZHRvJztcclxuaW1wb3J0IHsgR2VuZXJhdGVMaW5rRG93bmxvYWREVE8gfSBmcm9tICcuLi9tb2RlbHMvZ2VuZXJhdGUtbGluay1kb3dubG9hZC1kdG8nO1xyXG5pbXBvcnQgeyBTZXJ2aWNlUmVxdWVzdE1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL3NlcnZpY2UtcmVxdWVzdC1tb2RlbCc7XHJcbmltcG9ydCB7IERvd25sb2FkTGlua1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9kb3dubG9hZC1saW5rLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGaWxlRGF0YVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9maWxlLWRhdGEuc2VydmljZSc7XHJcbmltcG9ydCB7IEZpbGVFeHBsb3Jlck5ld1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9maWxlLWV4cGxvcmVyLW5ldy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRmlsZU9iamVjdFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9maWxlLW9iamVjdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRmlsZVZlcnNpb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZmlsZS12ZXJzaW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGb2xkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZm9sZGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNeURyaXZlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL215LWRyaXZlLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gICAgQ29sdW1uU2NoZW1hQmFzZSxcclxuICAgIENydWRGb3JtRGF0YSxcclxuICAgIEVudW1GaWxlTGF5b3V0LFxyXG4gICAgRmlsZU1hbmFnZXJDb250cm9sU2NoZW1hLFxyXG4gICAgSGVpZ2h0VHlwZSxcclxuICAgIE1vZGVsU2NoZW1hLFxyXG4gICAgT3BlcmF0b3IsXHJcbiAgICBQb3B1cFNpemVcclxufSBmcm9tICcuLy4uLy4uLy4uL2NsYXNzZXMvZm9ybS1zY2hlbWEnO1xyXG5pbXBvcnQgeyBHcmlkSW5mbyB9IGZyb20gJy4vLi4vLi4vLi4vbW9kZWxzL2dyaWQtaW5mbyc7XHJcbmltcG9ydCB7IEZpbGVFeHBsb3JlclNlcnZpY2UgfSBmcm9tICcuLy4uL3NlcnZpY2VzL2ZpbGUtZXhwbG9yZXIuc2VydmljZSc7XHJcbmRlY2xhcmUgbGV0IHZnY2Ffc2lnbl9hcHByb3ZlZDogYW55O1xyXG5kZWNsYXJlIGxldCB2Z2NhX3NpZ25faXNzdWVkOiBhbnk7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogY29tcG9uZW50LXNlbGVjdG9yXHJcbiAgICBzZWxlY3RvcjogJ2ZpbGUtbWFuYWdlcicsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vZmlsZS1tYW5hZ2VyLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2ZpbGUtbWFuYWdlci5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRmlsZU1hbmFnZXJDb21wb25lbnQpLFxyXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIENvbXBvbmVudENvbnRleHRTZXJ2aWNlLFxyXG4gICAgXSxcclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBGaWxlTWFuYWdlckNvbXBvbmVudCBleHRlbmRzIERhdGFMaXN0QmFzZSBpbXBsZW1lbnRzIElGaWxlQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnZmlsZUNvbnRyb2wnKSBmaWxlQ29udHJvbDogRmlsZVVwbG9hZDtcclxuICAgIEBWaWV3Q2hpbGQoJ2NvbnRleHRNZW51JykgY29udGV4dE1lbnU6IENvbnRleHRNZW51O1xyXG4gICAgQFZpZXdDaGlsZCgnZmlsZUt5U29TaW0nKSBmaWxlS3lTb1NpbTogRmlsZUt5U29TaW1Db21wb25lbnQ7XHJcblxyXG4gICAgQElucHV0KCkgY29udHJvbDogRmlsZU1hbmFnZXJDb250cm9sU2NoZW1hO1xyXG4gICAgX2ZpbGVEYXRhU2VydmljZTogRmlsZURhdGFTZXJ2aWNlO1xyXG5cclxuICAgIEBJbnB1dCgpIHNldCBmaWxlRGF0YVNlcnZpY2UodmFsdWU6IEZpbGVEYXRhU2VydmljZSkge1xyXG4gICAgICAgIHRoaXMuX2ZpbGVEYXRhU2VydmljZSA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBmaWxlRGF0YVNlcnZpY2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbGVEYXRhU2VydmljZTtcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKSBsYXlvdXQ6IEVudW1GaWxlTGF5b3V0ID0gRW51bUZpbGVMYXlvdXQuTElTVDtcclxuICAgIEBJbnB1dCgpIGhpZGRlbkNyZWF0ZUZvbGRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgbWF4RmlsZVNpemU6IG51bWJlciA9IDEwMDAwMDAwMDsgLy8gU2l6ZSBpbiBieXRlXHJcbiAgICBASW5wdXQoKSBpbnZhbGlkRmlsZVNpemVNZXNzYWdlU3VtbWFyeT86IHN0cmluZyA9ICd7MH06IFF1w6EgZHVuZyBsxrDhu6NuZyBmaWxlIGNobyBwaMOpcCwgJztcclxuICAgIEBJbnB1dCgpIGludmFsaWRGaWxlU2l6ZU1lc3NhZ2VEZXRhaWw/OiBzdHJpbmcgPSAnZHVuZyBsxrDhu6NuZyB04buRaSDEkWEgbMOgIHswfS4nO1xyXG4gICAgQElucHV0KCkgaW52YWxpZEZpbGVUeXBlTWVzc2FnZVN1bW1hcnk/OiBzdHJpbmcgPSAnezB9OiBLaMO0bmcgxJHDum5nIMSR4buLbmggZOG6oW5nIGZpbGUsICc7XHJcbiAgICBASW5wdXQoKSBpbnZhbGlkRmlsZVR5cGVNZXNzYWdlRGV0YWlsPzogc3RyaW5nID0gJ8SR4buLbmggZOG6oW5nIGZpbGUgY2hvIHBow6lwOiB7MH0uJztcclxuICAgIEBJbnB1dCgpIGludmFsaWRGaWxlTGltaXRNZXNzYWdlU3VtbWFyeT86IHN0cmluZyA9ICdRdcOhIHPhu5EgbMaw4bujbmcgZmlsZSBjaG8gcGjDqXAsICc7XHJcbiAgICBASW5wdXQoKSBpbnZhbGlkRmlsZUxpbWl0TWVzc2FnZURldGFpbD86IHN0cmluZyA9ICd04buRaSDEkWEgezB9IGZpbGUuJztcclxuICAgIEBJbnB1dCgpIGRhdGFUeXBlOiBhbnk7XHJcblxyXG4gICAgLy8gVMOqbiB0aMawIG3hu6VjIGfhu5FjLlxyXG4gICAgQElucHV0KCkgcm9vdEZvbGRlck5hbWU6IHN0cmluZztcclxuXHJcbiAgICAvLyBC4buZIGtleSDEkeG7gyB04bqhbyB0aMawIG3hu6VjIGfhu5FjLlxyXG4gICAgQElucHV0KCkgc2VydmljZUNvZGU6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIGVudGl0eTogc3RyaW5nO1xyXG4gICAgX2VudGl0eUtleTogc3RyaW5nO1xyXG4gICAgX2hhc0xvYWRlZFNvdXJjZSA9IGZhbHNlO1xyXG5cclxuICAgIEBJbnB1dCgpIHNldCBlbnRpdHlLZXkodmFsOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLl9lbnRpdHlLZXkgPSB2YWw7XHJcblxyXG4gICAgICAgIGlmICh2YWwpIHtcclxuICAgICAgICAgICAgdGhpcy5faGFzTG9hZGVkU291cmNlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMucm9vdEZvbGRlcklkID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5lbnRpdHlLZXlDaGFuZ2UuZW1pdCh0aGlzLl9lbnRpdHlLZXkpO1xyXG4gICAgICAgICAgICB0aGlzLmNoZWNrQW5kTG9hZFJvb3RGb2xkZXJDb250ZW50KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnJlc2V0RGF0YSgpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgQElucHV0KCkgcmVhZG9ubHkgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBEw7luZyBjaG8gY29tcG9uZW50IHTDoGkgbGnhu4d1XHJcbiAgICBASW5wdXQoKSBpblRhaUxpZXUgPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIGluVGFpTGlldUNodW5nID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBjb3B5VG9Gb2xkZXJJZCA9IHRoaXMuX2NvbW1vblNlcnZpY2UuZ3VpZEVtcHR5KCk7XHJcblxyXG4gICAgQElucHV0KCkgc2V0IHZhbHVlKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICBpZiAodGhpcy5fdmFsdWUgIT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCkgbXVsdGlwbGVDaGVja1doZW5DbGlja1JvdzogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgQE91dHB1dCgpIG9uUmVhZHkgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBlbnRpdHlLZXlDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBjbG9zZVBvcHVwID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBvbkNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBvblNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gICAgcHJpdmF0ZSBfdW5zdWJjcmlibGVBbGwgPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcblxyXG4gICAgX29sZFZhbHVlOiBhbnk7XHJcbiAgICBfdmFsdWU6IGFueTtcclxuICAgIF9kYXRhU291cmNlOiBhbnlbXSA9IFtdO1xyXG4gICAgX2xheW91dCA9IEVudW1GaWxlTGF5b3V0O1xyXG5cclxuICAgIC8vIEluc3RhbmNlSWQgdGjGsCBt4bulYyBn4buRYy5cclxuICAgIHJvb3RGb2xkZXJJZDogc3RyaW5nID0gbnVsbDtcclxuICAgIHByb2dyZXNzVmFsdWUgPSAwO1xyXG4gICAgYXBpVXBsb2FkVXJsID0gJyc7XHJcbiAgICBjaG9vc2VMYWJlbCA9ICdDaOG7jW4nO1xyXG4gICAgdXNlcklkOiBhbnk7XHJcblxyXG4gICAgZm9ybUlkcyA9IHtcclxuICAgICAgICBjcmVhdGVGb2xkZXI6ICdjcmVhdGVGb2xkZXInLFxyXG4gICAgICAgIHJlbmFtZUZpbGU6ICdyZW5hbWVGaWxlJyxcclxuICAgICAgICBzaGFyZUZpbGU6ICdzaGFyZUZpbGUnLFxyXG4gICAgICAgIHNoYXJlRm9sZGVyOiAnc2hhcmVGb2xkZXInLFxyXG4gICAgICAgIGZpbGVWaWV3ZXI6ICdmaWxlVmlld2VyJyxcclxuICAgICAgICBmaWxlVmVyc2lvbkxpc3Q6ICdmaWxlVmVyc2lvbkxpc3QnLFxyXG4gICAgICAgIHNpZ25hdHVyZURldGFpbDogJ3NpZ25hdHVyZURldGFpbCcsXHJcbiAgICAgICAga3lTb1NpbTogJ2t5U29TaW0nLFxyXG4gICAgfTtcclxuICAgIGZvcm1zOiBhbnkgPSB7fTtcclxuICAgIGRhdGE6IGFueSA9IHtcclxuICAgICAgICByb290Rm9sZGVySWQ6IG51bGwsXHJcbiAgICAgICAgY3VycmVudEZvbGRlcklkOiBudWxsLFxyXG5cclxuICAgICAgICBtb3Zpbmc6IHtcclxuICAgICAgICAgICAgaXNTZWxlY3Rpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW1zOiBudWxsLFxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGJyZWFkY3J1bWJzOiA8TWVudUl0ZW1bXT5bXSxcclxuICAgIH07XHJcbiAgICBzaG93QXR0YWNoTGlua0JveCA9IGZhbHNlO1xyXG4gICAgdHlwZWRMaW5rOiBzdHJpbmcgPSAnJztcclxuICAgIHNob3dUYWlMaWV1RHVuZ0NodW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsYXlvdXRTaW1wbGVBbGwgPSBmYWxzZTtcclxuICAgIGJhc2VQZXJtaXNzaW9uOiBudW1iZXI7XHJcbiAgICBpbml0ZWQgPSBmYWxzZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcm90ZWN0ZWQgX215RHJpdmVTZXJ2aWNlOiBNeURyaXZlU2VydmljZSxcclxuICAgICAgICBwcm90ZWN0ZWQgX2luamVjdG9yOiBJbmplY3RvcixcclxuICAgICAgICBwcml2YXRlIF9tZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2F1dGhlblNlcnZpY2U6IEF1dGhlblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfdG5DbGllbnRTZXJ2aWNlOiBUbkNsaWVudFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfZmlsZVZlcnNpb25TZXJ2aWNlOiBGaWxlVmVyc2lvblNlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkIF9ub3RpZmllclNlcnZpY2U6IE5vdGlmaWVyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9zaWduYWxyU2VydmljZTogU2lnbmFsUlNlcnZpY2UsXHJcbiAgICAgICAgcHVibGljIF9maWxlRXhwbG9yZXJTZXJ2aWNlOiBGaWxlRXhwbG9yZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2ZpbGVFeHBsb3Jlck5ld1NlcnZpY2U6IEZpbGVFeHBsb3Jlck5ld1NlcnZpY2UsXHJcbiAgICAgICAgcHVibGljIF9kZXZpY2VEZXRlY3RvclNlcnZpY2U6IERldmljZURldGVjdG9yU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9mb2xkZXJTZXJ2aWNlOiBGb2xkZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2ZpbGVPYmplY3RTZXJ2aWNlOiBGaWxlT2JqZWN0U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9kb3dubG9hZExpbmtTZXJ2aWNlOiBEb3dubG9hZExpbmtTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2ZpbGVNYW5hZ2VyU2VydmljZTogRmlsZU1hbmFnZXJTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihfaW5qZWN0b3IpO1xyXG4gICAgICAgIHRoaXMuYXBpVXBsb2FkVXJsID0gdGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuZ2V0VXBsb2FkVXJsKCk7XHJcbiAgICAgICAgdGhpcy51c2VySWQgPSB0aGlzLl91c2VyU2VydmljZS5nZXRVc2VySWRDb21iaW5lKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbCkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wuX2NvbXBvbmVudCA9IHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaW5pdGVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmxheW91dFNpbXBsZUFsbCA9ICh0aGlzLmxheW91dCA9PT0gRW51bUZpbGVMYXlvdXQuU0lNUExFIHx8IHRoaXMubGF5b3V0ID09PSBFbnVtRmlsZUxheW91dC5TSU1QTEVfRk9SX0xJU1QpO1xyXG4gICAgICAgIHRoaXMubG9hZERldGFpbEZyb21RdWVyeVBhcmFtID0gZmFsc2U7XHJcbiAgICAgICAgLy8gTOG6r25nIGtoaSBrw70gc2ltIHPhu5EgdGjDoG5oIGPDtG5nIHRow6wgbG9hZCBs4bqhaSBmaWxlXHJcbiAgICAgICAgdGhpcy5yb290Q29udGV4dC5zdWJzY3JpYmUoJ0t5U29TaW1UaGFuaENvbmcnLCB4ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fdHJpZ2dlclByb2Nlc3NEYXRhKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybXMua3lTb1NpbS5zaG93ID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5oYXNDcnVkTGlzdCA9IHRoaXMubGF5b3V0ID09IEVudW1GaWxlTGF5b3V0LkxJU1Q7XHJcbiAgICAgICAgdGhpcy5wbHVzVXJsID0gJ0J5Rm9sZGVySWQnO1xyXG4gICAgICAgIHRoaXMuaW5pdEdyaWQoKTtcclxuICAgICAgICB0aGlzLmluaXRGb3JtcygpO1xyXG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICAgICAgdGhpcy5tb2RlbC5yZWFkeSA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLmZpbGVEYXRhU2VydmljZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZpbGVEYXRhU2VydmljZS5yZWdpc3Rlcih0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5yZWxvYWREYXRhKCk7XHJcbiAgICAgICAgdGhpcy5jaGVja0FuZExvYWRSb290Rm9sZGVyQ29udGVudCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNoZWNrQW5kTG9hZFJvb3RGb2xkZXJDb250ZW50KCkge1xyXG4gICAgICAgIGlmICghdGhpcy5pbml0ZWQgfHwgdGhpcy5maWxlRGF0YVNlcnZpY2UpIHJldHVybjtcclxuICAgICAgICB0aGlzLmdldFJvb3RGb2xkZXJDb250ZW50KCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Um9vdEZvbGRlckNvbnRlbnQoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnJvb3RGb2xkZXJJZCkge1xyXG4gICAgICAgICAgICBjb25zdCBoYXNLZXkgPSB0aGlzLnNlcnZpY2VDb2RlXHJcbiAgICAgICAgICAgICAgICAmJiB0aGlzLmVudGl0eVxyXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5fZW50aXR5S2V5O1xyXG5cclxuICAgICAgICAgICAgaWYgKCFoYXNLZXkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzZXREYXRhKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuX21hcmtMb2FkaW5nKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZvbGRlclNlcnZpY2UuZ2V0U2VydmljZUZvbGRlcklkKHtcclxuICAgICAgICAgICAgICAgIHNlcnZpY2VDb2RlOiB0aGlzLnNlcnZpY2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgZW50aXR5OiB0aGlzLmVudGl0eSxcclxuICAgICAgICAgICAgICAgIGVudGl0eUtleTogdGhpcy5fZW50aXR5S2V5LFxyXG4gICAgICAgICAgICB9IGFzIFNlcnZpY2VSZXF1ZXN0TW9kZWwpXHJcbiAgICAgICAgICAgICAgICAudGhlbihycyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW5tYXJrTG9hZGluZygpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChycy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm9vdEZvbGRlcklkID0gcnMuZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5yZWFkeSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0Rm9sZGVyQ29udGVudCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNldERhdGEoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3J1ZFNlcnZpY2UucHJvY2Vzc0Vycm9yUmVzcG9uc2UocnMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0PDsyBs4buXaSB44bqjeSByYSBraGkgbOG6pXkgdGjGsCBt4bulYyBn4buRYyEnKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5tb2RlbC5yZWFkeSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Rm9sZGVyQ29udGVudCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXNldERhdGEoKSB7XHJcbiAgICAgICAgdGhpcy5yb290Rm9sZGVySWQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZGF0YS5icmVhZGNydW1icyA9IFtdO1xyXG4gICAgICAgIHRoaXMuX2RhdGFTb3VyY2UgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICBzZXREYXRhRnJvbUZpbGVEYXRhU2VydmljZShkYXRhKSB7XHJcbiAgICAgICAgdGhpcy5zZXRSb290Rm9sZGVySWQoZGF0YS5mb2xkZXJJZCk7XHJcbiAgICAgICAgdGhpcy5zZXREYXRhc291cmNlKGRhdGEubHN0RmlsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0Um9vdEZvbGRlcklkKHJvb3RGb2xkZXJJZDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5yb290Rm9sZGVySWQgPSByb290Rm9sZGVySWQ7XHJcbiAgICAgICAgdGhpcy5kYXRhLmN1cnJlbnRGb2xkZXJJZCA9IHRoaXMucm9vdEZvbGRlcklkO1xyXG4gICAgfVxyXG5cclxuICAgIHNldERhdGFzb3VyY2UoZGF0YVNvdXJjZTogYW55W10gPSBbXSkge1xyXG4gICAgICAgIHRoaXMuX2RhdGFTb3VyY2UgPSBkYXRhU291cmNlO1xyXG4gICAgICAgIHRoaXMuX29sZFZhbHVlID0gdGhpcy5fdmFsdWU7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSBbXTtcclxuICAgICAgICBkYXRhU291cmNlLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgIHZhbHVlLnB1c2goaXRlbS5pZCk7XHJcbiAgICAgICAgICAgIGlmIChpdGVtLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgIGl0ZW0ubmFtZVdpdGhvdXRFeHRlbnNpb24gPSBpdGVtLm5hbWU7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGl0ZW0ubmFtZS5sYXN0SW5kZXhPZignLicpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtLm5hbWVXaXRob3V0RXh0ZW5zaW9uID0gaXRlbS5uYW1lLnN1YnN0cmluZygwLCBpbmRleCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5leHRlbnNpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtLmV4dGVuc2lvbiA9IGl0ZW0uZXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpdGVtLmlzRmlsZSA9IGl0ZW0uZmlsZUV4cGxvcmVySXRlbVR5cGUgPT0gRmlsZUV4cGxvcmVySXRlbVR5cGUuRmlsZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgaWYgKHRoaXMuX29sZFZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KHRoaXMuX29sZFZhbHVlKSAhPSBKU09OLnN0cmluZ2lmeSh0aGlzLl92YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmlyZUV2ZW50Q2hhbmdlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl92YWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmVFdmVudENoYW5nZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubW9kZWwucmVhZHkgPSB0cnVlO1xyXG4gICAgICAgIGlmICghdGhpcy5faGFzTG9hZGVkU291cmNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2hhc0xvYWRlZFNvdXJjZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMub25SZWFkeS5lbWl0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZpcmVFdmVudENoYW5nZSgpIHtcclxuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy5fdmFsdWUpO1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2VkLmVtaXQodGhpcy5fdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGluaXRHcmlkKCkge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5tdWx0aXBsZUNoZWNrV2hlbkNsaWNrUm93ID0gdGhpcy5tdWx0aXBsZUNoZWNrV2hlbkNsaWNrUm93O1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5tb2RlbFNjaGVtYXMgPSBbXHJcbiAgICAgICAgICAgIG5ldyBNb2RlbFNjaGVtYSh7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogJ25hbWUnLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogJ1TDqm4gdMOgaSBsaeG7h3UnLFxyXG4gICAgICAgICAgICAgICAgZnVsbE5hbWU6ICdUw6puIHTDoGkgbGnhu4d1JyxcclxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVMOqbiB0w6BpIGxp4buHdScsXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBuZXcgTW9kZWxTY2hlbWEoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdmaWxlU2l6ZScsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiAnS8OtY2ggdGjGsOG7m2MnLFxyXG4gICAgICAgICAgICAgICAgZnVsbE5hbWU6ICdLw61jaCB0aMaw4bubYycsXHJcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0vDrWNoIHRoxrDhu5tjJyxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG5ldyBNb2RlbFNjaGVtYSh7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2NyZWF0ZWQnLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogJ05nw6B5IHThuqFvJyxcclxuICAgICAgICAgICAgICAgIGZ1bGxOYW1lOiAnTmfDoHkgdOG6oW8nLFxyXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdOZ8OgeSB04bqhbycsXHJcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2RhdGV0aW1lJyxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG5ldyBNb2RlbFNjaGVtYSh7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2N1cnJlbnRGaWxlVmVyc2lvbicsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiAnUGhpw6puIGLhuqNuJyxcclxuICAgICAgICAgICAgICAgIGZ1bGxOYW1lOiAnUGhpw6puIGLhuqNuJyxcclxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnUGhpw6puIGLhuqNuJyxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG5ldyBNb2RlbFNjaGVtYSh7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2Z1bmN0aW9uJyxcclxuICAgICAgICAgICAgICAgIG5hbWU6ICdDaOG7qWMgbsSDbmcnLFxyXG4gICAgICAgICAgICAgICAgZnVsbE5hbWU6ICdDaOG7qWMgbsSDbmcnLFxyXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdDaOG7qWMgbsSDbmcnLFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICB0aGlzLnNldHRpbmcuY29scyA9IFtcclxuICAgICAgICAgICAgbmV3IENvbHVtblNjaGVtYUJhc2Uoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICduYW1lJyxcclxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnZXhwbG9yZXJJdGVtJyxcclxuICAgICAgICAgICAgICAgIHNvcnQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogJ2F1dG8nLFxyXG4gICAgICAgICAgICAgICAgZnVsbFRleHRTZWFyY2g6IHRydWUsXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2ZpbGVTaXplJyxcclxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnZmlsZVNpemUnLFxyXG4gICAgICAgICAgICAgICAgc29ydDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHdpZHRoOiAnOWVtJyxcclxuICAgICAgICAgICAgICAgIHRleHRBbGlnbjogMSxcclxuICAgICAgICAgICAgICAgIGFsbG93RmlsdGVyOiBmYWxzZSxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkOiAnY3JlYXRlZCcsXHJcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2RhdGV0aW1lJyxcclxuICAgICAgICAgICAgICAgIHNvcnQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogJzEwZW0nXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2N1cnJlbnRGaWxlVmVyc2lvbicsXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogJzhlbScsXHJcbiAgICAgICAgICAgICAgICB0ZXh0QWxpZ246IDEsXHJcbiAgICAgICAgICAgICAgICBhbGxvd0ZpbHRlcjogZmFsc2VcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0U2V0dGluZygpO1xyXG4gICAgfVxyXG5cclxuICAgIGluaXRTZXR0aW5nKCkge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5oZWlnaHRUeXBlID0gSGVpZ2h0VHlwZS5keW5hbWljO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5oaWRkZW5GaWx0ZXJSb3cgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSA9IHRoaXMuX2ZvbGRlclNlcnZpY2U7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmhpZGRlblNldHRpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5oaWRkZW5TZXR0aW5nV29ya2Zsb3cgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5oaWRkZW5TZXR0aW5nUGVybWlzc2lvbiA9IHRydWU7XHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSkge1xyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UudXNlV29ya2Zsb3cgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRm9ybXMuXHJcbiAgICBpbml0Rm9ybXMoKSB7XHJcbiAgICAgICAgdGhpcy5mb3Jtc1t0aGlzLmZvcm1JZHMuY3JlYXRlRm9sZGVyXSA9IHtcclxuICAgICAgICAgICAgaGVhZGVyOiAnVOG6oW8gbeG7m2kgdGjGsCBt4bulYycsXHJcbiAgICAgICAgICAgIHNob3c6IGZhbHNlLFxyXG4gICAgICAgICAgICBmb3JtRGF0YTogbmV3IENydWRGb3JtRGF0YSgpLFxyXG4gICAgICAgICAgICBwb3B1cFNpemU6IG5ldyBQb3B1cFNpemUoe1xyXG4gICAgICAgICAgICAgICAgd2lkdGg6IDQwMCxcclxuICAgICAgICAgICAgICAgIGhlaWdodDogMjAwLFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmZvcm1zW3RoaXMuZm9ybUlkcy5yZW5hbWVGaWxlXSA9IHtcclxuICAgICAgICAgICAgaGVhZGVyOiAnxJDhu5VpIHTDqm4gdOG7h3AnLFxyXG4gICAgICAgICAgICBzaG93OiBmYWxzZSxcclxuICAgICAgICAgICAgZm9ybURhdGE6IG5ldyBDcnVkRm9ybURhdGEoKSxcclxuICAgICAgICAgICAgcG9wdXBTaXplOiBuZXcgUG9wdXBTaXplKHtcclxuICAgICAgICAgICAgICAgIHdpZHRoOiA0MDAsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDIwMCxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5mb3Jtc1t0aGlzLmZvcm1JZHMuZmlsZVZpZXdlcl0gPSB7XHJcbiAgICAgICAgICAgIHNob3c6IGZhbHNlLFxyXG4gICAgICAgICAgICBmb3JtRGF0YToge30sXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5mb3Jtc1t0aGlzLmZvcm1JZHMuZmlsZVZlcnNpb25MaXN0XSA9IHtcclxuICAgICAgICAgICAgaGVhZGVyOiAnRGFuaCBzw6FjaCBwaGnDqm4gYuG6o24nLFxyXG4gICAgICAgICAgICBzaG93OiBmYWxzZSxcclxuICAgICAgICAgICAgZmlsZUlkOiBudWxsLFxyXG4gICAgICAgICAgICBwb3B1cFNpemU6IG5ldyBQb3B1cFNpemUoe1xyXG4gICAgICAgICAgICAgICAgbWF4aW1pemU6IHRydWUsXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuZm9ybXNbdGhpcy5mb3JtSWRzLnNpZ25hdHVyZURldGFpbF0gPSB7XHJcbiAgICAgICAgICAgIGhlYWRlcjogJ1Row7RuZyB0aW4gY2jhu68ga8O9IHPhu5EnLFxyXG4gICAgICAgICAgICBzaG93OiBmYWxzZSxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmZvcm1zW3RoaXMuZm9ybUlkcy5reVNvU2ltXSA9IHtcclxuICAgICAgICAgICAgaGVhZGVyOiAnS8O9IHPhu5Egc2ltJyxcclxuICAgICAgICAgICAgc2hvdzogZmFsc2UsXHJcbiAgICAgICAgICAgIHBvcHVwU2l6ZTogbmV3IFBvcHVwU2l6ZSh7XHJcbiAgICAgICAgICAgICAgICBtYXhpbWl6ZTogdHJ1ZSxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBvblNhdmVkRm9ybShmb3JtSWQpIHtcclxuICAgICAgICB0aGlzLmZvcm1zW2Zvcm1JZF0uc2hvdyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX3RyaWdnZXJQcm9jZXNzRGF0YSgpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2FuY2VsRm9ybShmb3JtSWQpIHtcclxuICAgICAgICB0aGlzLmZvcm1zW2Zvcm1JZF0uc2hvdyA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dDb250ZXh0TWVudShldnQsIGl0ZW0pIHtcclxuICAgICAgICBpZiAoaXRlbS5pc0ZpbGUpIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhLml0ZW1zTWVudUZpbGUgPSBbXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdYZW0gdHLhu7FjIHR1eeG6v24nLCBpY29uOiAnZmFzIGZhLWV5ZScsIGNvbW1hbmQ6IChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5PYmplY3QoaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiAodGhpcy5fZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLmlzRGVza3RvcCgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICYmICEodGhpcy5sYXlvdXRTaW1wbGVBbGwgJiYgdGhpcy5yZWFkb25seSkpLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0vDvSBz4buRIGPDoSBuaMOibiAoU0lNKScsXHJcbiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2ZhcyBmYS1zaW0tY2FyZCcsXHJcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZDogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNpZ25LeVNpbUZpbGUoaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiAodGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuaXNUeXBlRmlsZUt5U28oaXRlbS5uYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLmxheW91dCAhPT0gRW51bUZpbGVMYXlvdXQuU0lNUExFX0ZPUl9MSVNUKSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdLw70gc+G7kSBjw6EgbmjDom4gKFVTQiknLCBpY29uOiAnZmFzIGZhLXNpZ25hdHVyZScsXHJcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZDogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNpZ25GaWxlKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogKHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmlzVHlwZUZpbGVLeVNvKGl0ZW0ubmFtZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy5fZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLmlzRGVza3RvcCgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIHRoaXMubGF5b3V0ICE9PSBFbnVtRmlsZUxheW91dC5TSU1QTEVfRk9SX0xJU1QpLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0vDvSBz4buRIMSRxqFuIHbhu4sgKFVTQiknLCBpY29uOiAnZmFzIGZhLXNpZ25hdHVyZScsXHJcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZDogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNpZ25GaWxlRG9uVmkoaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiAodGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuaXNUeXBlRmlsZUt5U28oaXRlbS5uYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLl9kZXZpY2VEZXRlY3RvclNlcnZpY2UuaXNEZXNrdG9wKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy5sYXlvdXQgIT09IEVudW1GaWxlTGF5b3V0LlNJTVBMRV9GT1JfTElTVCksXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnVOG6o2kgduG7gScsIGljb246ICdmYXMgZmEtZG93bmxvYWQnLCBjb21tYW5kOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG93bmxvYWQoaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiAhKHRoaXMubGF5b3V0ID09PSBFbnVtRmlsZUxheW91dC5TSU1QTEUgJiYgdGhpcy5yZWFkb25seSksXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnU2FvIGNow6lwIMSRxrDhu51uZyBk4bqrbicsIGljb246ICdmYXMgZmEtbGluaycsIGNvbW1hbmQ6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb3B5RG93bmxvYWRMaW5rKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogISh0aGlzLmxheW91dFNpbXBsZUFsbCAmJiB0aGlzLnJlYWRvbmx5KSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICfEkOG7lWkgdMOqbicsIGljb246ICdmYXMgZmEtZXJhc2VyJywgY29tbWFuZDogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmFtZUZpbGUoaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiAhdGhpcy5jaGVja0lzUmVhZE9ubHkoKVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ1hlbSBjw6FjIHBoacOqbiBi4bqjbiBraMOhYycsIGljb246ICdmYXMgZmEtaGlzdG9yeScsIGNvbW1hbmQ6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuRmlsZVZlcnNpb25zKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogIXRoaXMuY2hlY2tJc1JlYWRPbmx5KClcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdYw7NhIHThu4dwIHRpbicsIGljb246ICdmYXIgZmEtdHJhc2gtYWx0JywgY29tbWFuZDogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZUZpbGUoaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiAhdGhpcy5jaGVja0lzUmVhZE9ubHkoKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhLml0ZW1zTWVudUZpbGUgPSBbe1xyXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdU4bqjaSB24buBJywgaWNvbjogJ2ZhcyBmYS1kb3dubG9hZCcsIGNvbW1hbmQ6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRvd25sb2FkKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdYw7NhIHRoxrAgbeG7pWMnLCBpY29uOiAnZmFyIGZhLXRyYXNoLWFsdCcsIGNvbW1hbmQ6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZUZvbGRlcihpdGVtKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB2aXNpYmxlOiAhdGhpcy5jaGVja0lzUmVhZE9ubHkoKVxyXG4gICAgICAgICAgICB9XTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gc2V0IHRpbWUgb3V0IMSR4buDIGZpeCBidWcgcmVuZGVyIGNvbnRleHQgbWVudSByYSB0csOgbiByYSBuZ2/DoGkgbcOgbiBow6xuaFxyXG4gICAgICAgIC8vIEPDsyBs4bq9IHbDrCB0aOG7nWkgxJFp4buDbSBwcmltZW5nIHTDrW5oIHbhu4sgdHLDrSBj4bunYSBjb250ZXh0IG1lbnUgbMOgIHRyxrDhu5tjIGtoaSByZW5kZXIgaOG6v3QgY8OhYyByb3cgdHJvbmcgY29udGV4dCBtZW51XHJcbiAgICAgICAgc2V0VGltZW91dChmID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jb250ZXh0TWVudS5zaG93KGV2dCk7XHJcbiAgICAgICAgfSwgMTAwKTtcclxuICAgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY2hlY2tJc1JlYWRPbmx5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRvbmx5IHx8IHRoaXMuYmFzZVBlcm1pc3Npb24gPT0gUGVybWlzc2lvbkJhc2UuUkVBRDtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVDbGlja0ZpbGVOYW1lKGl0ZW0pIHtcclxuICAgICAgICBpZiAoIWl0ZW0uY2FuVmlld09ubGluZSkge1xyXG4gICAgICAgICAgICB0aGlzLmRvd25sb2FkKGl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5vcGVuT2JqZWN0KGl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBtb2RpZnlHcmlkSW5mbyhncmlkSW5mbzogR3JpZEluZm8pIHtcclxuICAgICAgICBncmlkSW5mby5maWx0ZXJzLnNwbGljZSgwLCAwLCB0aGlzLm5ld0ZpbHRlcigncGFyZW50Rm9sZGVySWQnLCBPcGVyYXRvci5lcXVhbCwgdGhpcy5kYXRhLmN1cnJlbnRGb2xkZXJJZCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGFmdGVyR2V0RGF0YSgpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5tb2RlbC5kYXRhU291cmNlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9maWxlRXhwbG9yZXJTZXJ2aWNlLnN1cHBvcnREaWdpdGFsU2lnbmF0dXJlKGl0ZW0ubmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2ZpbGVFeHBsb3JlclNlcnZpY2UuZ2V0U2lnbmF0dXJlSW5mb0J5RmlsZUlkKGl0ZW0uaWQpLnRoZW4ocnMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChycy5zdWNjZXNzICYmIHJzLmRhdGE/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnNpZ25hdHVyZXMgPSBycy5kYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmxhc3RTaWduYXR1cmUgPSBycy5kYXRhW3JzLmRhdGEubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChpdGVtLmZpbGVFeHBsb3Jlckl0ZW1UeXBlID09PSBGaWxlRXhwbG9yZXJJdGVtVHlwZS5Gb2xkZXIpIHtcclxuICAgICAgICAgICAgICAgIGl0ZW0uY2xhc3MgPSAnJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaXRlbS5leHRlbnNpb24pIHtcclxuICAgICAgICAgICAgICAgIGl0ZW0uaW1hZ2VJY29uID0gYC9hc3NldHMvaW1hZ2VzL2ZpbGUtZXh0L2ljb24ke2l0ZW0uZXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCl9LnBuZ2A7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGl0ZW0uY2FuVmlld09ubGluZSA9IHRoaXMuX2ZpbGVFeHBsb3Jlck5ld1NlcnZpY2UuaXNTdXBwb3J0ZWRWaWV3T25saW5lKGl0ZW0ubmFtZSk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGFUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWl0ZW0uZXh0ZW5zaW9uIHx8IGl0ZW0uZXh0ZW5zaW9uLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0ubmFtZS5sYXN0SW5kZXhPZignLicpICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmV4dGVuc2lvbiA9IGl0ZW0ubmFtZS5zdWJzdHJpbmcoaXRlbS5uYW1lLmxhc3RJbmRleE9mKCcuJykpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sID0gbmV3IEZpbGVNYW5hZ2VyQ29udHJvbFNjaGVtYSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZGF0YVR5cGUpIHtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHRoaXMubW9kZWwuZGF0YVNvdXJjZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFlbGVtZW50LmV4dGVuc2lvbiB8fCBlbGVtZW50LmV4dGVuc2lvbi5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50Lm5hbWUubGFzdEluZGV4T2YoJy4nKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5leHRlbnNpb24gPSBlbGVtZW50Lm5hbWUuc3Vic3RyaW5nKGVsZW1lbnQubmFtZS5sYXN0SW5kZXhPZignLicpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN3aXRjaCAodGhpcy5kYXRhVHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIEZpbGVUeXBlLlZJREVPOiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wuYWNjZXB0ID0gJy5NUDQsLk1PViwuQVZJLC5GTFYsLldNVic7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmRhdGFTb3VyY2UgPSB0aGlzLm1vZGVsLmRhdGFTb3VyY2UuZmlsdGVyKHggPT4gKHguZXh0ZW5zaW9uID09IG51bGwgfHwgeC5leHRlbnNpb24udG9VcHBlckNhc2UoKSA9PSAnLk1QNCcgfHwgeC5leHRlbnNpb24udG9VcHBlckNhc2UoKSA9PSAnLk1PVicgfHwgeC5leHRlbnNpb24udG9VcHBlckNhc2UoKSA9PSAnLkFWSScgfHwgeC5leHRlbnNpb24udG9VcHBlckNhc2UoKSA9PSAnLkZMVicgfHwgeC5leHRlbnNpb24udG9VcHBlckNhc2UoKSA9PSAnLldNVicpKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgRmlsZVR5cGUuSU1BR0U6IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC5hY2NlcHQgPSAnLkpQRywuSlBFRywuUE5HJztcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZGF0YVNvdXJjZSA9IHRoaXMubW9kZWwuZGF0YVNvdXJjZS5maWx0ZXIoeCA9PiAoeC5leHRlbnNpb24gPT0gbnVsbCB8fCB4LmV4dGVuc2lvbi50b1VwcGVyQ2FzZSgpID09ICcuSlBHJyB8fCB4LmV4dGVuc2lvbi50b1VwcGVyQ2FzZSgpID09ICcuSlBFRycgfHwgeC5leHRlbnNpb24udG9VcHBlckNhc2UoKSA9PSAnLlBORycpKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgRmlsZVR5cGUuRE9DOiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wuYWNjZXB0ID0gJy5ET0MsLkRPQ1gsLlBERiwuWExTLC5YTFNYJztcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZGF0YVNvdXJjZSA9IHRoaXMubW9kZWwuZGF0YVNvdXJjZS5maWx0ZXIoeCA9PiAoeC5leHRlbnNpb24gPT0gbnVsbCB8fCB4LmV4dGVuc2lvbi50b1VwcGVyQ2FzZSgpID09ICcuRE9DJyB8fCB4LmV4dGVuc2lvbi50b1VwcGVyQ2FzZSgpID09ICcuRE9DWCcgfHwgeC5leHRlbnNpb24udG9VcHBlckNhc2UoKSA9PSAnLlBERicgfHwgeC5leHRlbnNpb24udG9VcHBlckNhc2UoKSA9PSAnLlhMUycgfHwgeC5leHRlbnNpb24udG9VcHBlckNhc2UoKSA9PSAnLlhMU1gnKSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIEZpbGVUeXBlLkFVRElPOiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wuYWNjZXB0ID0gJy5NUDMsLldBViwuTTRBJztcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZGF0YVNvdXJjZSA9IHRoaXMubW9kZWwuZGF0YVNvdXJjZS5maWx0ZXIoeCA9PiAoeC5leHRlbnNpb24gPT0gbnVsbCB8fCB4LmV4dGVuc2lvbi50b1VwcGVyQ2FzZSgpID09ICcuTVAzJyB8fCB4LmV4dGVuc2lvbi50b1VwcGVyQ2FzZSgpID09ICcuV0FWJyB8fCB4LmV4dGVuc2lvbi50b1VwcGVyQ2FzZSgpID09ICcuTTRBJykpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0RGF0YXNvdXJjZSh0aGlzLm1vZGVsLmRhdGFTb3VyY2UpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMuX3Vuc3ViY3JpYmxlQWxsLm5leHQoKTtcclxuICAgICAgICB0aGlzLl91bnN1YmNyaWJsZUFsbC5jb21wbGV0ZSgpO1xyXG4gICAgICAgIGlmICh0aGlzLmZpbGVEYXRhU2VydmljZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZpbGVEYXRhU2VydmljZS51bnJlZ2lzdGVyKHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJvb3RDb250ZXh0LnVuU3Vic2NyaWJlKCdLeVNvU2ltVGhhbmhDb25nJyk7XHJcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyA+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+IEZVTkNUSU9OIENPTFVNTiBNQU5VTEFUSU9OLlxyXG4gICAgZ2V0QnV0dG9uSWNvbihleHBsb3Jlckl0ZW0pIHtcclxuICAgICAgICBpZiAoZXhwbG9yZXJJdGVtLmlzRmlsZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLmlzRGVza3RvcCgpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3BpIHBpLXBlbmNpbCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3BpIHBpLWV5ZSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiAncGkgcGktcGVuY2lsJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QnV0dG9uVG9vbHRpcChleHBsb3Jlckl0ZW0pIHtcclxuICAgICAgICBpZiAoZXhwbG9yZXJJdGVtLmlzRmlsZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLmlzRGVza3RvcCgpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0No4buJbmggc+G7rWEnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdYZW0gdHLhu7FjIHR1eeG6v24nO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gJ8SQ4buVaSB0w6puJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25CdXR0b25DbGljayhleHBsb3Jlckl0ZW0pIHtcclxuICAgICAgICBpZiAoZXhwbG9yZXJJdGVtLmlzRmlsZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLmlzRGVza3RvcCgpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVkaXRGaWxlKGV4cGxvcmVySXRlbSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5PYmplY3QoZXhwbG9yZXJJdGVtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5yZW5hbWVGb2xkZXIoZXhwbG9yZXJJdGVtLmlkKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TWVudUl0ZW1zKGV4cGxvcmRlckl0ZW0pIHtcclxuICAgICAgICByZXR1cm4gZXhwbG9yZGVySXRlbS5pc0ZpbGUgPyB0aGlzLmRhdGEuaXRlbXNNZW51RmlsZSA6IHRoaXMuZGF0YS5pdGVtc01lbnVGb2xkZXI7XHJcbiAgICB9XHJcblxyXG4gICAgb25Ecm9wZG93bkNsaWNrKGV4cGxvcmVySXRlbSkge1xyXG4gICAgICAgIGlmIChleHBsb3Jlckl0ZW0uaXNGaWxlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGt5U29JdGVtID0gdGhpcy5kYXRhLml0ZW1zTWVudUZpbGUuZmluZCh4ID0+IHgubGFiZWwudG9Mb3dlckNhc2UoKSA9PSAnS8O9IHPhu5EnKTtcclxuICAgICAgICAgICAgaWYgKGt5U29JdGVtKSB7XHJcbiAgICAgICAgICAgICAgICBreVNvSXRlbS52aXNpYmxlID0gdGhpcy5fZmlsZUV4cGxvcmVyU2VydmljZS5zdXBwb3J0RGlnaXRhbFNpZ25hdHVyZShleHBsb3Jlckl0ZW0ubmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZGF0YS5zZWxlY3RlZEV4cGxvcmVySXRlbSA9IGV4cGxvcmVySXRlbTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gPj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+PiBGSUxFIE1BTlVMQVRJT04uXHJcbiAgICAvLyBU4bqjaSBsw6puIGZpbGUuXHJcbiAgICBvblNlbGVjdEZpbGUoKSB7XHJcbiAgICAgICAgdGhpcy5maWxlQ29udHJvbC51cGxvYWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkJlZm9yZVVwbG9hZChldnQpIHtcclxuICAgICAgICB0aGlzLl9tYXJrTG9hZGluZygpO1xyXG4gICAgICAgIGV2dC5mb3JtRGF0YS5hcHBlbmQoJ3NlcnZpY2VDb2RlJywgdGhpcy5zZXJ2aWNlQ29kZSk7XHJcbiAgICAgICAgZXZ0LmZvcm1EYXRhLmFwcGVuZCgnZW50aXR5JywgdGhpcy5lbnRpdHkpO1xyXG4gICAgICAgIGV2dC5mb3JtRGF0YS5hcHBlbmQoJ2VudGl0eUtleScsIHRoaXMuX2VudGl0eUtleSk7XHJcbiAgICAgICAgZXZ0LmZvcm1EYXRhLmFwcGVuZCgnZm9sZGVySWQnLCB0aGlzLmRhdGEuY3VycmVudEZvbGRlcklkKTtcclxuICAgIH1cclxuXHJcbiAgICBvblVwbG9hZFByb2dyZXNzKGV2dCkge1xyXG4gICAgICAgIHRoaXMucHJvZ3Jlc3NWYWx1ZSA9IGV2dC5wcm9ncmVzcztcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVTZWxlY3RGaWxlKGV2dCkge1xyXG4gICAgICAgIGlmIChldnQuZXJyb3JNZXNzYWdlcyAmJiBldnQuZXJyb3JNZXNzYWdlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZyhcclxuICAgICAgICAgICAgICAgIGV2dC5lcnJvck1lc3NhZ2VzLm1hcChpdGVtID0+IGAke2l0ZW0uc3VtbWFyeX0ke2l0ZW0uZGV0YWlsfWApLmpvaW4oJzsgJyksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uVXBsb2FkZWQoZXZ0KSB7XHJcbiAgICAgICAgdGhpcy5fdHJpZ2dlclByb2Nlc3NEYXRhKCk7XHJcbiAgICAgICAgdGhpcy5fbWFya0xvYWRpbmcoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyDEkOG7lWkgdMOqbiBmaWxlLlxyXG4gICAgcmVuYW1lRmlsZShpdGVtKSB7XHJcbiAgICAgICAgdGhpcy5mb3Jtcy5yZW5hbWVGaWxlLmhlYWRlciA9ICfEkOG7lWkgdMOqbiB0aMawIG3hu6VjJztcclxuICAgICAgICB0aGlzLmZvcm1zLnJlbmFtZUZpbGUuZm9ybURhdGEgPSB7XHJcbiAgICAgICAgICAgIGZvcm1TdGF0ZTogRm9ybVN0YXRlLkVESVQsXHJcbiAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgIHNlcnZpY2VDb2RlOiB0aGlzLnNlcnZpY2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgZW50aXR5OiB0aGlzLmVudGl0eSxcclxuICAgICAgICAgICAgICAgIGVudGl0eUtleTogdGhpcy5fZW50aXR5S2V5LFxyXG4gICAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmZvcm1zLnJlbmFtZUZpbGUuc2hvdyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gWMOzYSBmaWxlLlxyXG4gICAgZGVsZXRlRmlsZShleHBsb3Jlckl0ZW06IEZpbGVFeHBsb3Jlckl0ZW0pIHtcclxuICAgICAgICB0aGlzLmRlbGV0ZU11dGlwbGUoW2V4cGxvcmVySXRlbV0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyA+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+IEZPTERFUiBNQU5VTEFUSU9OLlxyXG4gICAgLy8gVOG6oW8gdGjGsCBt4bulYy5cclxuICAgIGNyZWF0ZUZvbGRlcigpIHtcclxuICAgICAgICB0aGlzLmZvcm1zLmNyZWF0ZUZvbGRlci5mb3JtRGF0YSA9IHtcclxuICAgICAgICAgICAgZm9ybVN0YXRlOiBGb3JtU3RhdGUuQURELFxyXG4gICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICBzZXJ2aWNlQ29kZTogdGhpcy5zZXJ2aWNlQ29kZSxcclxuICAgICAgICAgICAgICAgIGVudGl0eTogdGhpcy5lbnRpdHksXHJcbiAgICAgICAgICAgICAgICBlbnRpdHlLZXk6IHRoaXMuX2VudGl0eUtleSxcclxuICAgICAgICAgICAgICAgIHBhcmVudEZvbGRlcklkOiB0aGlzLmRhdGEuY3VycmVudEZvbGRlcklkLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5mb3Jtcy5jcmVhdGVGb2xkZXIuc2hvdyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTeG7nyB0aMawIG3hu6VjLyBjbGljayB0aMawIG3hu6VjLlxyXG4gICAgZ2V0Rm9sZGVyQ29udGVudChjdXJyZW50Rm9sZGVySWQ/OiBzdHJpbmcsIGdvSW5zaWRlID0gZmFsc2UpIHtcclxuICAgICAgICBjdXJyZW50Rm9sZGVySWQgPSBjdXJyZW50Rm9sZGVySWQgfHwgdGhpcy5yb290Rm9sZGVySWQ7XHJcbiAgICAgICAgdGhpcy5kYXRhLmN1cnJlbnRGb2xkZXJJZCA9IGN1cnJlbnRGb2xkZXJJZDtcclxuICAgICAgICB0aGlzLl90cmlnZ2VyUHJvY2Vzc0RhdGEoKTtcclxuICAgICAgICB0aGlzLnNldEJyZWFkY3J1bWJzKCk7XHJcbiAgICAgICAgdGhpcy5zZXRWYWxpZGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbGlkYXRlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmRhdGEuY3VycmVudEZvbGRlcklkICE9IHRoaXMucm9vdEZvbGRlcklkKSB7XHJcbiAgICAgICAgICAgIC8vIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLmRhdGEuY3VycmVudEZvbGRlcklkKTtcclxuICAgICAgICAgICAgLy8gdGhpcy5vbkNoYW5nZWQuZW1pdCh0aGlzLmRhdGEuY3VycmVudEZvbGRlcklkKTtcclxuICAgICAgICAgICAgLy8gdGhpcy5maXJlRXZlbnRDaGFuZ2UoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gxJDhu5VpIHTDqm4gdGjGsCBt4bulYy5cclxuICAgIHJlbmFtZUZvbGRlcihmb2xkZXJJZDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5mb3Jtcy5jcmVhdGVGb2xkZXIuaGVhZGVyID0gJ8SQ4buVaSB0w6puIHRoxrAgbeG7pWMnO1xyXG4gICAgICAgIHRoaXMuZm9ybXNbdGhpcy5mb3JtSWRzLmNyZWF0ZUZvbGRlcl0uZm9ybURhdGEgPSB7XHJcbiAgICAgICAgICAgIGZvcm1TdGF0ZTogRm9ybVN0YXRlLkVESVQsXHJcbiAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgIHNlcnZpY2VDb2RlOiB0aGlzLnNlcnZpY2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgZW50aXR5OiB0aGlzLmVudGl0eSxcclxuICAgICAgICAgICAgICAgIGVudGl0eUtleTogdGhpcy5fZW50aXR5S2V5LFxyXG4gICAgICAgICAgICAgICAgaWQ6IGZvbGRlcklkLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5mb3Jtcy5jcmVhdGVGb2xkZXIuc2hvdyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gWMOzYSB0aMawIG3hu6VjLlxyXG4gICAgZGVsZXRlRm9sZGVyKGV4cGxvcmVySXRlbTogRmlsZUV4cGxvcmVySXRlbSkge1xyXG4gICAgICAgIHRoaXMuZGVsZXRlTXV0aXBsZShbZXhwbG9yZXJJdGVtXSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vID4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4gQ09NTU9OIEZPTERFUiAmIEZJTEUgTUFOVUxBVElPTi5cclxuICAgIC8vIE3hu58gdGjGsCBt4bulYy8gdOG7h3AuXHJcbiAgICBhc3luYyBvcGVuT2JqZWN0KGV4cGxvcmVySXRlbTogRmlsZUV4cGxvcmVySXRlbSkge1xyXG4gICAgICAgIGlmIChleHBsb3Jlckl0ZW0uaXNGaWxlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhblZpZXdPbmxpbmUgPSB0aGlzLl9maWxlT2JqZWN0U2VydmljZS5pc1N1cHBvcnRlZFZpZXdPbmxpbmUoZXhwbG9yZXJJdGVtLm5hbWUpO1xyXG4gICAgICAgICAgICBpZiAoY2FuVmlld09ubGluZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuRmlsZVZpZXdlcihleHBsb3Jlckl0ZW0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kb3dubG9hZChleHBsb3Jlckl0ZW0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmdldEZvbGRlckNvbnRlbnQoZXhwbG9yZXJJdGVtLmlkLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gWMOzYSBuaGnhu4F1IHRoxrAgbeG7pWMvIHThu4dwLlxyXG4gICAgZGVsZXRlTXV0aXBsZShpdGVtczogRmlsZUV4cGxvcmVySXRlbVtdKSB7XHJcbiAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dEZWxldGVDb25maXJtKClcclxuICAgICAgICAgICAgLnRoZW4ocnMgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFycykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbGRlclNlcnZpY2UuZGVsZXRlTXVsdGlwbGUoaXRlbXMpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRGb2xkZXJDb250ZW50KHRoaXMuZGF0YS5jdXJyZW50Rm9sZGVySWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dEZWxldGVEYXRhU3VjY2VzcygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nQnlSZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVOG6o2kgdGjGsCBt4bulYy8gdOG7h3AuXHJcbiAgICBhc3luYyBkb3dubG9hZChleHBsb3Jlckl0ZW06IEZpbGVFeHBsb3Jlckl0ZW0pIHtcclxuICAgICAgICBjb25zdCBtb2RlbCA9IHRoaXMuX2Rvd25sb2FkTGlua1NlcnZpY2UuZ2V0R2VuZXJhdGVEb3dubG9hZExpbmtNb2RlbChleHBsb3Jlckl0ZW0pO1xyXG4gICAgICAgIHRoaXMuX2Rvd25sb2FkTGlua1NlcnZpY2UuZG93bmxvYWRMaW5rKG1vZGVsKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjb3B5RG93bmxvYWRMaW5rKGV4cGxvcmVySXRlbTogRmlsZUV4cGxvcmVySXRlbSkge1xyXG4gICAgICAgIGNvbnN0IG1vZGVsID0gdGhpcy5fZG93bmxvYWRMaW5rU2VydmljZS5nZXRHZW5lcmF0ZURvd25sb2FkTGlua01vZGVsKGV4cGxvcmVySXRlbSk7XHJcbiAgICAgICAgdGhpcy5fZG93bmxvYWRMaW5rU2VydmljZS5nZW5lcmF0ZURvd25sb2FkTGluayhtb2RlbClcclxuICAgICAgICAgICAgLnRoZW4ocnMgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb21tb25TZXJ2aWNlLmNvcHlNZXNzYWdlKHRoaXMuX2Rvd25sb2FkTGlua1NlcnZpY2UuZ2V0QW5vbnltb3VzRG93bmxvYWRVcmwocnMuZGF0YSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93U3VjY2VzcygnxJDDoyBzYW8gY2jDqXAgdsOgbyBi4buZIG5o4bubIHThuqFtLiDEkMaw4budbmcgZOG6q24gbsOgeSBz4bq9IGjhur90IGjhuqFuIHNhdSA2MCBnacOieSEnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnS2jDtG5nIHRo4buDIHNhbyBjaMOpcCBsacOqbiBr4bq/dCB04bqjaSB04buHcCB0aW4hJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdLaMO0bmcgdGjhu4Mgc2FvIGNow6lwIGxpw6puIGvhur90IHThuqNpIHThu4dwIHRpbiEnKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVOG6o2kgbmhp4buBdSB0aMawIG3hu6VjLyB04buHcC5cclxuICAgIGFzeW5jIGRvd25sb2FkTXVsdGlwbGUoKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtcyA9IHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcztcclxuICAgICAgICBjb25zdCBoYXNJdGVtcyA9IHNlbGVjdGVkSXRlbXMgJiYgc2VsZWN0ZWRJdGVtcy5sZW5ndGg7XHJcbiAgICAgICAgaWYgKGhhc0l0ZW1zKSB7XHJcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZEl0ZW1zLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRvd25sb2FkKHNlbGVjdGVkSXRlbXNbMF0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYXJyTW9kZWwgPSBzZWxlY3RlZEl0ZW1zLm1hcChleHBsb3Jlckl0ZW0gPT4gdGhpcy5fZG93bmxvYWRMaW5rU2VydmljZS5nZXRHZW5lcmF0ZURvd25sb2FkTGlua01vZGVsKGV4cGxvcmVySXRlbSkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZG93bmxvYWRMaW5rU2VydmljZS5kb3dubG9hZE11bHRpcGxlKGFyck1vZGVsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZW5lcmF0ZVppcExpbmtBbmRDb3B5KCkge1xyXG4gICAgICAgIGNvbnN0IGFyck1vZGVsID0gdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zLm1hcCh4ID0+IHRoaXMuX2Rvd25sb2FkTGlua1NlcnZpY2UuZ2V0R2VuZXJhdGVEb3dubG9hZExpbmtNb2RlbCh4KSk7XHJcbiAgICAgICAgdGhpcy5fZG93bmxvYWRMaW5rU2VydmljZS5nZW5lcmF0ZURvd25sb2FkTGlua011bHRpcGxlKGFyck1vZGVsKS50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuc3VjY2VzcyAmJiByZXMuZGF0YSAmJiByZXMuZGF0YSAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY29tbW9uU2VydmljZS5jb3B5TWVzc2FnZSh0aGlzLl9kb3dubG9hZExpbmtTZXJ2aWNlLmdldEFub255bW91c0Rvd25sb2FkVXJsKHJlcy5kYXRhKSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1N1Y2Nlc3MoJ8SQw6Mgc2FvIGNow6lwIHbDoG8gYuG7mSBuaOG7myB04bqhbS4gxJDGsOG7nW5nIGThuqtuIG7DoHkgc+G6vSBo4bq/dCBo4bqhbiBzYXUgNjAgZ2nDonkhJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0tow7RuZyB0aOG7gyBzYW8gY2jDqXAgbGnDqm4ga+G6v3QgdOG6o2kgdOG7h3AgdGluIScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkuY2F0Y2goZXggPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhleCk7XHJcbiAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnQ8OzIHbhuqVuIMSR4buBIHRyb25nIGzDumMgdOG6oW8gbGluayBjaG8gZmlsZXMnKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgb3BlbkZpbGVWaWV3ZXIoZXhwbG9yZXJJdGVtOiBGaWxlRXhwbG9yZXJJdGVtKSB7XHJcbiAgICAgICAgdGhpcy5mb3Jtcy5maWxlVmlld2VyLmZvcm1EYXRhLmRhdGEgPSB7XHJcbiAgICAgICAgICAgIGZpbGVJZDogZXhwbG9yZXJJdGVtLmlkLFxyXG4gICAgICAgICAgICBpc0ZpbGVWZXJzaW9uOiBmYWxzZSxcclxuICAgICAgICAgICAgZmlsZU5hbWU6IGV4cGxvcmVySXRlbS5uYW1lLFxyXG4gICAgICAgICAgICBzZXJ2aWNlOiBleHBsb3Jlckl0ZW0uc2VydmljZUNvZGUsXHJcbiAgICAgICAgICAgIGVudGl0eTogZXhwbG9yZXJJdGVtLmVudGl0eSxcclxuICAgICAgICAgICAgZW50aXR5S2V5OiBleHBsb3Jlckl0ZW0uZW50aXR5S2V5LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5mb3Jtcy5maWxlVmlld2VyLnNob3cgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlRmlsZVZpZXdlcigpIHtcclxuICAgICAgICB0aGlzLmZvcm1zLmZpbGVWaWV3ZXIuc2hvdyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZ2V0Rm9sZGVyQ29udGVudCh0aGlzLmRhdGEuY3VycmVudEZvbGRlcklkKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gPj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pk1PVkUgRklMRVMgJiBGT0xERVJTLlxyXG4gICAgaGFzU2VsZWN0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXNcclxuICAgICAgICAgICAgJiYgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zLmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDaOG7jW4gdGjGsCBt4bulYy8gZmlsZSBkaSBjaHV54buDbi5cclxuICAgIGNhblNlbGVjdCgpIHtcclxuICAgICAgICByZXR1cm4gIXRoaXMuZGF0YS5tb3ZpbmcuaXNTZWxlY3RpbmdcclxuICAgICAgICAgICAgJiYgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zXHJcbiAgICAgICAgICAgICYmIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcy5sZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAgY2FuU2V0TW92ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLm1vdmluZy5pc1NlbGVjdGluZ1xyXG4gICAgICAgICAgICAmJiB0aGlzLmRhdGEubW92aW5nLnNlbGVjdGVkSXRlbXNcclxuICAgICAgICAgICAgJiYgdGhpcy5kYXRhLm1vdmluZy5zZWxlY3RlZEl0ZW1zLmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICBtb3ZlRXhwbG9yZXJJdGVtcygpIHtcclxuICAgICAgICBjb25zdCBjYW5Nb3ZlID0gIXRoaXMuZGF0YS5tb3ZpbmcuaXNTZWxlY3RpbmdcclxuICAgICAgICAgICAgJiYgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zXHJcbiAgICAgICAgICAgICYmIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcy5sZW5ndGhcclxuICAgICAgICAgICAgJiYgdGhpcy5tb2RlbC5kYXRhU291cmNlXHJcbiAgICAgICAgICAgICYmIHRoaXMubW9kZWwuZGF0YVNvdXJjZS5sZW5ndGg7XHJcblxyXG4gICAgICAgIGlmICghY2FuTW92ZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmRhdGEubW92aW5nID0ge1xyXG4gICAgICAgICAgICBpc1NlbGVjdGluZzogdHJ1ZSxcclxuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtczogdGhpcy5fY29tbW9uU2VydmljZS5jbG9uZU9iamVjdCh0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMpLFxyXG4gICAgICAgICAgICBzb3VyY2VGb2xkZXJJZDogdGhpcy5kYXRhLmN1cnJlbnRGb2xkZXJJZCxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFRo4bqjIHRoxrAgbeG7pWMvIGZpbGUuXHJcbiAgICBzZXRNb3ZlRXhwbG9yZXJJdGVtcygpIHtcclxuICAgICAgICBpZiAoIXRoaXMuZGF0YS5tb3ZpbmcuaXNTZWxlY3RpbmcpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbW9kZWwgPSB7XHJcbiAgICAgICAgICAgIHNvdXJjZUZvbGRlcklkOiB0aGlzLmRhdGEubW92aW5nLnNvdXJjZUZvbGRlcklkLFxyXG4gICAgICAgICAgICB0YXJnZXRGb2xkZXJJZDogdGhpcy5kYXRhLmN1cnJlbnRGb2xkZXJJZCxcclxuICAgICAgICAgICAgbHN0RmlsZUV4cGxvcmVySXRlbXM6IHRoaXMuZGF0YS5tb3Zpbmcuc2VsZWN0ZWRJdGVtcyxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLl9mb2xkZXJTZXJ2aWNlLm1vdmVFeHBsb3Jlckl0ZW1zKG1vZGVsKVxyXG4gICAgICAgICAgICAudGhlbihyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0Rm9sZGVyQ29udGVudCh0aGlzLmRhdGEuY3VycmVudEZvbGRlcklkKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmRhdGEuY3VycmVudEZvbGRlcklkKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1N1Y2Nlc3MoJ0RpIGNodXnhu4NuIHRow6BuaCBjw7RuZycpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5tb3ZpbmcgPSB7fTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZ0J5UmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBC4buPIGRpIGNodXnhu4NuLlxyXG4gICAgY2FuY2VsTW92ZSgpIHtcclxuICAgICAgICB0aGlzLmRhdGEubW92aW5nID0ge307XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vID4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj5WRVJTSU9OLlxyXG4gICAgb3BlbkZpbGVWZXJzaW9ucyhmaWxlOiBGaWxlRXhwbG9yZXJJdGVtKSB7XHJcbiAgICAgICAgdGhpcy5mb3Jtcy5maWxlVmVyc2lvbkxpc3QuZmlsZUlkID0gZmlsZS5pZDtcclxuXHJcbiAgICAgICAgdGhpcy5mb3Jtcy5maWxlVmVyc2lvbkxpc3Quc2hvdyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gPj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+PlZJRVcgT05MSU5FLlxyXG4gICAgZWRpdEZpbGUoZmlsZTogRmlsZUV4cGxvcmVySXRlbSkge1xyXG4gICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93U3VjY2VzcygnxJBhbmcga+G6v3QgbuG7kWkgbeG7nyDhu6luZyBk4bulbmcnKTtcclxuICAgICAgICB0aGlzLl9maWxlVmVyc2lvblNlcnZpY2UuY3JlYXRlTmV3TWlub3JWZXJzaW9uKGZpbGUuaWQsICcnLCBmYWxzZSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZVZlcnNpb24gPSA8RmlsZVZlcnNpb25EVE8+cmVzcG9uc2UuZGF0YTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVVcmwgPSB0aGlzLl9maWxlVmVyc2lvblNlcnZpY2UuZ2V0RmlsZVZlcnNpb25Eb3dubG9hZFVybChmaWxlVmVyc2lvbi5pZCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb21tYW5kID0gbmV3IFRuQ2xpZW50Q29tbWFuZCgpO1xyXG4gICAgICAgICAgICAgICAgY29tbWFuZC5jb21tYW5kVHlwZSA9IENvbW1hbmRUeXBlLkVkaXRGaWxlO1xyXG4gICAgICAgICAgICAgICAgY29tbWFuZC5rZXkgPSB0aGlzLl9lbnZpcm9ubWVudFNlcnZpY2UuZ2V0U2lnbmFscl9DbGllbnRLZXkoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVkaXRGaWxlQ29tbWFuZCA9IG5ldyBFZGl0RmlsZUNvbW1hbmQoKTtcclxuICAgICAgICAgICAgICAgIGVkaXRGaWxlQ29tbWFuZC5maWxlU2VydmljZUVuZHBvaW50ID0gdGhpcy5fZW52aXJvbm1lbnRTZXJ2aWNlLmdldEh0dHBTZXJ2aWNlRW5kcG9pbnQoJ2ZpbGUnKTtcclxuICAgICAgICAgICAgICAgIGVkaXRGaWxlQ29tbWFuZC51cGxvYWRGaWxlQXBpID0gdGhpcy5fZmlsZVZlcnNpb25TZXJ2aWNlLmdldFVwbG9hZEZpbGVWZXJzaW9uQXBpVXJsKCk7XHJcbiAgICAgICAgICAgICAgICBlZGl0RmlsZUNvbW1hbmQucmVtb3ZlRmlsZUFwaSA9IHRoaXMuX2ZpbGVWZXJzaW9uU2VydmljZS5nZXRSZW1vdmVGaWxlVmVyc2lvbkFwaVVybCgpO1xyXG4gICAgICAgICAgICAgICAgZWRpdEZpbGVDb21tYW5kLmZpbGVVcmwgPSBmaWxlVXJsO1xyXG4gICAgICAgICAgICAgICAgZWRpdEZpbGVDb21tYW5kLmlzRHJhZnQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgZWRpdEZpbGVDb21tYW5kLmdyb3VwRmlsZU5hbWUgPSBmaWxlLm5hbWU7XHJcbiAgICAgICAgICAgICAgICBlZGl0RmlsZUNvbW1hbmQuZmlsZU5hbWUgPSBmaWxlLm5hbWU7XHJcbiAgICAgICAgICAgICAgICBlZGl0RmlsZUNvbW1hbmQudmVyc2lvbiA9IGZpbGVWZXJzaW9uLnZlcnNpb25OYW1lO1xyXG4gICAgICAgICAgICAgICAgZWRpdEZpbGVDb21tYW5kLmZpbGVWZXJzaW9uSWQgPSBmaWxlVmVyc2lvbi5pZDtcclxuICAgICAgICAgICAgICAgIGVkaXRGaWxlQ29tbWFuZC5hY2Nlc3NUb2tlbiA9IHRoaXMuX2F1dGhlblNlcnZpY2UuZ2V0QWNjZXNzVG9rZW4oKTtcclxuICAgICAgICAgICAgICAgIGNvbW1hbmQuZGF0YSA9IGVkaXRGaWxlQ29tbWFuZDtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl90bkNsaWVudFNlcnZpY2Uuc2VuZENvbW1hbmQoY29tbWFuZCk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2lnbmFsclNlcnZpY2UudW5TdWJzY3JpYmVWaWV3Q29kZShudWxsLCAnRklMRS5WRVJTSU9OLlVQREFURUQnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NpZ25hbHJTZXJ2aWNlLnN0YXJ0KG51bGwsICdGSUxFLlZFUlNJT04uVVBEQVRFRCcsIGRhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvYmo6IGFueTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBPYmplY3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iaiA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvYmoubWVzc2FnZS5jb250ZW50O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqID0gSlNPTi5wYXJzZShkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9iai5NZXNzYWdlLkNvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmopIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuZ2V0TGlzdEZpbGVzKHRoaXMuZGF0YS5jdXJyZW50Rm9sZGVySWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoQ29tbW9uRXJyb3JDb2RlLkVSUk9SX1NFUlZJQ0VfTk9UX1JVTiA9PT0gZXJyb3Iuc3RhdHVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dSZXNwb25zZUVycm9yKDAsIG51bGwsICdGaWxlJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5hZGQoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXZlcml0eTogJ2Vycm9yJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VtbWFyeTogdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdGSUxFX0VYUExPUkVSLk1FU1NBR0VfRVJST1JfSEVBREVSJyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbDogdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdGSUxFX0VYUExPUkVSLk1FU1NBR0VfRVJST1JfREVUQUlMJyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpZmU6IDUwMDAsXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vID4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4gQlJFQURDUlVNQlMuXHJcbiAgICBhc3luYyBzZXRCcmVhZGNydW1icygpIHtcclxuICAgICAgICBpZiAodGhpcy5kYXRhLmN1cnJlbnRGb2xkZXJJZCkge1xyXG4gICAgICAgICAgICBjb25zdCByc0ZvbGRlciA9IGF3YWl0IHRoaXMuX2ZvbGRlclNlcnZpY2UuZ2V0RGV0YWlsV2l0aFBlcm1pc3Npb24odGhpcy5kYXRhLmN1cnJlbnRGb2xkZXJJZCk7XHJcbiAgICAgICAgICAgIGlmIChyc0ZvbGRlci5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJhc2VQZXJtaXNzaW9uID0gcnNGb2xkZXIuZGF0YS5iYXNlUGVybWlzc2lvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBycyA9IGF3YWl0IHRoaXMuX2ZvbGRlclNlcnZpY2UuZ2V0RnVsbEZvbGRlclBhdGgodGhpcy5kYXRhLmN1cnJlbnRGb2xkZXJJZCk7XHJcbiAgICAgICAgICAgIGlmIChycy5zdWNjZXNzICYmIHJzLmRhdGEpIHtcclxuICAgICAgICAgICAgICAgIGlmIChycy5kYXRhLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYnJlYWRjcnVtYnMgPSBycy5kYXRhLm1hcChmb2xkZXIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBicmVhZGNydW1iID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGluZGV4ID09IDAgPyB0aGlzLmdldFJvb3RGb2xkZXJOYW1lKGZvbGRlci5uYW1lKSA6IGZvbGRlci5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGZvbGRlci5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlQ2xhc3M6IGZvbGRlci5pZCAhPSB0aGlzLmRhdGEuY3VycmVudEZvbGRlcklkID8gJ2ZtLWNsaWNrYWJsZScgOiAnZm0tY3VycmVudC1mb2xkZXInLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZDogKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRGb2xkZXJDb250ZW50KGZvbGRlci5pZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleCsrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnJlYWRjcnVtYjtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYnJlYWRjcnVtYnMubGVuZ3RoID09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJyZWFkY3J1bWJzWzBdLmxhYmVsID09ICdUaMawIG3hu6VjIMSRw61uaCBrw6htJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWRjcnVtYnMuc3BsaWNlKDAsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5icmVhZGNydW1icyA9IGJyZWFkY3J1bWJzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhLmJyZWFkY3J1bWJzID0gW107XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEuYnJlYWRjcnVtYnMgPSBbXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2NydWRTZXJ2aWNlLnByb2Nlc3NFcnJvclJlc3BvbnNlKHJzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhLmJyZWFkY3J1bWJzID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldFJvb3RGb2xkZXJOYW1lKGZvbGRlck5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IGZvbGRlck5hbWVQcmVmaXggPSAnVGjGsCBt4bulYyAnO1xyXG4gICAgICAgIGxldCB0eXBlT2ZGb2xkZXIgPSAnJztcclxuICAgICAgICBpZiAoZm9sZGVyTmFtZS5pbmNsdWRlcygndXNlci5NeV9Eb2N1bWVudC4nKSkge1xyXG4gICAgICAgICAgICB0eXBlT2ZGb2xkZXIgPSAnY+G7p2EgdMO0aSc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGZvbGRlck5hbWUuaW5jbHVkZXMoJ2Nvbmd2aWVjJykpIHtcclxuICAgICAgICAgICAgdHlwZU9mRm9sZGVyID0gJ2PDtG5nIHZp4buHYyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGZvbGRlck5hbWUuaW5jbHVkZXMoJ3ZhbmJhbicpKSB7XHJcbiAgICAgICAgICAgIHR5cGVPZkZvbGRlciA9ICd2xINuIGLhuqNuJztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHR5cGVPZkZvbGRlciA9ICfEkcOtbmgga8OobSc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBgJHtmb2xkZXJOYW1lUHJlZml4fSR7dHlwZU9mRm9sZGVyfWA7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gPj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+PiBTSUdOLlxyXG4gICAgLy8gVE9ETzogTMawdSDDvSB44butIGzDvSB0csaw4budbmcgZG91YmxlIGNsaWNrIHbDoG8gbsO6dFxyXG4gICAgc2lnbkZpbGUoZmlsZTogRmlsZUV4cGxvcmVySXRlbSkge1xyXG4gICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93Q29uZmlybSgnQuG6oW4gY8OzIGNo4bqvYyBjaOG6r24gbXXhu5FuIGvDvSBz4buRIHbEg24gYuG6o24gbsOgeT8nKS50aGVuKGFzeW5jIHJzID0+IHtcclxuICAgICAgICAgICAgaWYgKHJzKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgc291cmNlRmlsZUlkID0gZmlsZS5pZDtcclxuICAgICAgICAgICAgICAgIGxldCBzb3VyY2VGaWxlID0gZmlsZTtcclxuICAgICAgICAgICAgICAgIC8vIEvDvSBz4buRIGZpbGUgd29yZCAtIGPhuqduIGNvbnZlcnQgc2FuZyBwZGYgdHLGsOG7m2NcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9maWxlRXhwbG9yZXJTZXJ2aWNlLm5lZWRDb252ZXJ0QmVmb3JlU2lnbihmaWxlLm5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29udmVydCBmaWxlIGJlZm9yZSBzaWduXHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcnNDb252ZXJ0ID0gYXdhaXQgdGhpcy5fZmlsZUV4cGxvcmVyU2VydmljZS5jb252ZXJ0RG9jdW1lbnRUb1BkZkFuZFNhdmUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VJZDogc291cmNlRmlsZUlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogdGhpcy5fZmlsZUV4cGxvcmVyU2VydmljZS5jaGFuZ2VGaWxlRXh0ZW5zaW9uKGZpbGUubmFtZSwgJ3BkZicpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sZGVySW5zdGFuY2VJZDogZmlsZS5wYXJlbnRGb2xkZXJJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyVHlwZTogdGhpcy5fdXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKS51c2VySWQudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcnNDb252ZXJ0IHx8ICFyc0NvbnZlcnQuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKGBDw7MgbOG7l2kgeOG6o3kgcmEga2hpIGNodXnhu4NuIMSR4buVaSB0w6BpIGxp4buHdSAke2ZpbGUubmFtZX0gdGjDoG5oIHBkZiDEkeG7gyBrw70uIFZ1aSBsw7JuZyB0aOG7rSBs4bqhaSBzYXVgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93U3VjY2VzcyhgQ2h1eeG7g24gxJHhu5VpIHTDoGkgbGnhu4d1ICR7ZmlsZS5uYW1lfSB0aMOgbmggcGRmIHRow6BuaCBjw7RuZ2ApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlRmlsZUlkID0gcnNDb252ZXJ0LmRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VGaWxlID0geyBpZDogc291cmNlRmlsZUlkIH0gYXMgRmlsZUV4cGxvcmVySXRlbTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyaWdnZXJQcm9jZXNzRGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZyhgQ8OzIGzhu5dpIHjhuqN5IHJhIGtoaSBjaHV54buDbiDEkeG7lWkgdMOgaSBsaeG7h3UgJHtmaWxlLm5hbWV9IHRow6BuaCBwZGYgxJHhu4Mga8O9LiBWdWkgbMOybmcgdGjhu60gbOG6oWkgc2F1YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5fZmlsZUV4cGxvcmVyU2VydmljZS5nZW5lcmF0ZUxpbmtEb3dubG9hZCh7XHJcbiAgICAgICAgICAgICAgICAgICAgZmlsZUlkOiBzb3VyY2VGaWxlSWQsXHJcbiAgICAgICAgICAgICAgICB9IGFzIEdlbmVyYXRlTGlua0Rvd25sb2FkRFRPKS50aGVuKHJzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSB0aGlzLl9kb3dubG9hZExpbmtTZXJ2aWNlLmdldERvd25sb2FkRm9yU2lnblVybChycy5kYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm1zID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgcHJtc1snRmlsZVVwbG9hZEhhbmRsZXInXSA9IGAke3RoaXMuX2Vudmlyb25tZW50U2VydmljZS5nZXRIdHRwU2VydmljZUVuZHBvaW50V2l0aFZlcnNpb24oJ2ZpbGUnKX0vS3lTb0ZpbGUvU2F2ZVBoeXNpY2FsU2lnbmVkRmlsZWA7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJtc1snU2Vzc2lvbklkJ10gPSAnJztcclxuICAgICAgICAgICAgICAgICAgICBwcm1zWydGaWxlTmFtZSddID0gdXJsO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IHZhcmlhYmxlLW5hbWVcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBqc29uX3BybXMgPSBKU09OLnN0cmluZ2lmeShwcm1zKTtcclxuICAgICAgICAgICAgICAgICAgICB2Z2NhX3NpZ25fYXBwcm92ZWQoanNvbl9wcm1zLCAocmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0T2JqID0gSlNPTi5wYXJzZShyZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0T2JqLkZpbGVTZXJ2ZXIgIT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZpbGVFeHBsb3JlclNlcnZpY2Uuc2F2ZVNpZ25lZEZpbGUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUZpbGU6IHNvdXJjZUZpbGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcEZpbGVJZDogcmVzdWx0T2JqLkZpbGVTZXJ2ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKHJzcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJpZ2dlclByb2Nlc3NEYXRhKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dTdWNjZXNzKCdLw70gc+G7kSB0aMOgbmggY8O0bmcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNpZ25GaWxlRG9uVmkoZmlsZTogRmlsZUV4cGxvcmVySXRlbSkge1xyXG4gICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZVxyXG4gICAgICAgICAgICAuc2hvd0NvbmZpcm0oJ0LhuqFuIGPDsyBjaOG6r2MgY2jhuq9uIG114buRbiBrw70gc+G7kSDEkcahbiB24buLIHbEg24gYuG6o24gbsOgeT8nKVxyXG4gICAgICAgICAgICAudGhlbihhc3luYyAocnMpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChycykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBzb3VyY2VGaWxlSWQgPSBmaWxlLmlkO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBzb3VyY2VGaWxlID0gZmlsZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fZmlsZUV4cGxvcmVyU2VydmljZS5uZWVkQ29udmVydEJlZm9yZVNpZ24oZmlsZS5uYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb252ZXJ0IGZpbGUgYmVmb3JlIHNpZ25cclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJzQ29udmVydCA9IGF3YWl0IHRoaXMuX2ZpbGVFeHBsb3JlclNlcnZpY2UuY29udmVydERvY3VtZW50VG9QZGZBbmRTYXZlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZUlkOiBzb3VyY2VGaWxlSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogdGhpcy5fZmlsZUV4cGxvcmVyU2VydmljZS5jaGFuZ2VGaWxlRXh0ZW5zaW9uKGZpbGUubmFtZSwgJ3BkZicpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGRlckluc3RhbmNlSWQ6IGZpbGUucGFyZW50Rm9sZGVySWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duZXJUeXBlOiB0aGlzLl91c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpLnVzZXJJZC50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJzQ29udmVydCB8fCAhcnNDb252ZXJ0LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoYEPDsyBs4buXaSB44bqjeSByYSBraGkgY2h1eeG7g24gxJHhu5VpIHTDoGkgbGnhu4d1ICR7ZmlsZS5uYW1lfSB0aMOgbmggcGRmIMSR4buDIGvDvS4gVnVpIGzDsm5nIHRo4butIGzhuqFpIHNhdWApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93U3VjY2VzcyhgQ2h1eeG7g24gxJHhu5VpIHTDoGkgbGnhu4d1ICR7ZmlsZS5uYW1lfSB0aMOgbmggcGRmIHRow6BuaCBjw7RuZ2ApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyaWdnZXJQcm9jZXNzRGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUZpbGVJZCA9IHJzQ29udmVydC5kYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUZpbGUgPSB7IGlkOiBzb3VyY2VGaWxlSWQgfSBhcyBGaWxlRXhwbG9yZXJJdGVtO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoYEPDsyBs4buXaSB44bqjeSByYSBraGkgY2h1eeG7g24gxJHhu5VpIHTDoGkgbGnhu4d1ICR7ZmlsZS5uYW1lfSB0aMOgbmggcGRmIMSR4buDIGvDvS4gVnVpIGzDsm5nIHRo4butIGzhuqFpIHNhdWApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZpbGVFeHBsb3JlclNlcnZpY2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmdlbmVyYXRlTGlua0Rvd25sb2FkKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRmlsZVZlcnNpb246IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZUlkOiBzb3VyY2VGaWxlSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gYXMgR2VuZXJhdGVMaW5rRG93bmxvYWREVE8pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKChycykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsID0gdGhpcy5fZG93bmxvYWRMaW5rU2VydmljZS5nZXREb3dubG9hZEZvclNpZ25VcmwoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnMuZGF0YSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJtcyA9IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJtc1snRmlsZVVwbG9hZEhhbmRsZXInXSA9IGAke3RoaXMuX2Vudmlyb25tZW50U2VydmljZS5nZXRIdHRwU2VydmljZUVuZHBvaW50V2l0aFZlcnNpb24oJ2ZpbGUnKX0vS3lTb0ZpbGUvU2F2ZVBoeXNpY2FsU2lnbmVkRmlsZWA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm1zWydTZXNzaW9uSWQnXSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJtc1snRmlsZU5hbWUnXSA9IHVybDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRydXnhu4FuIHPhu5EsIG5nw6B5IGvDvSBz4buRIHBow7JuZyBiYW4gbuG6v3UgY+G6p25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRoYXQgPSB0aGlzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoYXQuY29udHJvbCAmJiB0aGF0LmNvbnRyb2wuZGF0YUt5U29Eb25WaSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFLeVNvRG9uVmkgPSAoPEZ1bmN0aW9uPnRoYXQuY29udHJvbC5kYXRhS3lTb0RvblZpKSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhS3lTb0RvblZpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGzhuqV5IHPhu5EgRG9jTnVtYmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhS3lTb0RvblZpLmRvY051bWJlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJtc1snRG9jTnVtYmVyJ10gPSBkYXRhS3lTb0RvblZpLmRvY051bWJlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBs4bqleSBuZ8OgeSBiYW4gaMOgbmggdmIgxJFpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhS3lTb0RvblZpLmlzc3VlZERhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBybXNbJ0lzc3VlZERhdGUnXSA9IGRhdGFLeVNvRG9uVmkuaXNzdWVkRGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IHZhcmlhYmxlLW5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGpzb25fcHJtcyA9IEpTT04uc3RyaW5naWZ5KHBybXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmdjYV9zaWduX2lzc3VlZChqc29uX3BybXMsIChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdE9iaiA9IEpTT04ucGFyc2UocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0T2JqLkZpbGVTZXJ2ZXIgIT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmlsZUV4cGxvcmVyU2VydmljZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNhdmVTaWduZWRGaWxlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VGaWxlOiBzb3VyY2VGaWxlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBGaWxlSWQ6IHJlc3VsdE9iai5GaWxlU2VydmVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKChyc3MpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmlnZ2VyUHJvY2Vzc0RhdGEoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1N1Y2Nlc3MoJ0vDvSBz4buRIHRow6BuaCBjw7RuZycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzaWduS3lTaW1GaWxlKGZpbGU6IEZpbGVFeHBsb3Jlckl0ZW0pIHtcclxuICAgICAgICB0aGlzLmZvcm1zLmt5U29TaW0uc2hvdyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5tb2RlbC5hZHZhbmNlRGF0YSA9IGZpbGU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2hhcmVGb2xkZXIoZmlsZTogRmlsZUV4cGxvcmVySXRlbSkge1xyXG4gICAgICAgIHRoaXMuZm9ybXMuc2hhcmVGb2xkZXIuZGF0YSA9IGZpbGU7XHJcbiAgICAgICAgdGhpcy5mb3Jtcy5zaGFyZUZvbGRlci5zaG93ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzaGFyZUZpbGUoZmlsZTogRmlsZUV4cGxvcmVySXRlbSkge1xyXG4gICAgICAgIHRoaXMuZm9ybXMuc2hhcmVGaWxlLmRhdGEgPSBmaWxlO1xyXG4gICAgICAgIHRoaXMuZm9ybXMuc2hhcmVGaWxlLnNob3cgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdEZpbGUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZmlsZUNvbnRyb2wuYmFzaWNGaWxlSW5wdXQpIHtcclxuICAgICAgICAgICAgdGhpcy5maWxlQ29udHJvbC5iYXNpY0ZpbGVJbnB1dC5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHZpZXdMaXN0U2lnbihlOiBFdmVudCwgc2lnbmF0dXJlczogYW55KSB7XHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICB0aGlzLmZvcm1zLnNpZ25hdHVyZURldGFpbC5zaG93ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm1vZGVsLmFkdmFuY2VEYXRhID0gc2lnbmF0dXJlcztcclxuICAgIH1cclxuXHJcbiAgICBvblJvd1NlbGVjdChldnQpIHtcclxuICAgICAgICB0aGlzLm9uU2VsZWN0ZWQuZW1pdCh0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbG9hZERhdGEoKSB7XHJcbiAgICAgICAgdGhpcy5fZmlsZU1hbmFnZXJTZXJ2aWNlLnN1YnNWYXIgPSB0aGlzLl9maWxlTWFuYWdlclNlcnZpY2UuXHJcbiAgICAgICAgICAgIGludm9rZVJlbG9hZEZ1bmN0aW9uLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl90cmlnZ2VyUHJvY2Vzc0RhdGEoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBhc3luYyBhZGRBdHRhY2hMaW5rKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnR5cGVkTGluayAmJiB0aGlzLnR5cGVkTGluay5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9iaiA9IHRoaXMucGFyc2VBdHRhY2hMaW5rKHRoaXMudHlwZWRMaW5rKTtcclxuICAgICAgICAgICAgaWYgKG9iaikge1xyXG4gICAgICAgICAgICAgICAgLy8gZG8gbG9naWMgY29weSBmaWxlIGJ5IGhhc2hcclxuICAgICAgICAgICAgICAgIHRoaXMudHlwZWRMaW5rID0gJyc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dBdHRhY2hMaW5rQm94ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLl9maWxlT2JqZWN0U2VydmljZS5jb3B5RmlsZUJ5SGFzaChvYmosIHRoaXMuZGF0YS5jdXJyZW50Rm9sZGVySWQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFyZXMuc3VjY2VzcyB8fCAhcmVzLmRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ2PDsyBs4buXaSB0cm9uZyBsw7pjIGzhuqV5IGZpbGUgdOG7qyBsaW5rIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHsgZmlsZW9iajogcmVzIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRGb2xkZXJDb250ZW50KHRoaXMuZGF0YS5jdXJyZW50Rm9sZGVySWQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dTdWNjZXNzKCdU4bqjaSB0aMOgbmggY8O0bmchJyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0tow7RuZyBo4buXIHRy4bujIGxpw6puIGvhur90IHThu6sgaOG7hyB0aOG7kW5nIGtow6FjIGhv4bq3YyBsacOqbiBr4bq/dCBraMO0bmcgxJHDum5nIScpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHBhcnNlQXR0YWNoTGluayhsaW5rKSB7XHJcbiAgICAgICAgaWYgKGxpbmspIHtcclxuICAgICAgICAgICAgLy8gVG9kbzogc+G7rWEgdOG6oW0gxJHhu4MgY2jhuqF5IHRyw6puIGxvY2FsLCBzYXUga2hpIG9rIHRow6wgcGjhuqNpIHRow6ptICcvZmlsZSdcclxuICAgICAgICAgICAgY29uc3QgcGFydHMgPSBsaW5rLnNwbGl0KCdmaWxlL3Y1L0Rvd25sb2FkTGluay9Eb3dubG9hZC8nKTtcclxuICAgICAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PSAyKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFydHNbMV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNvcHlGaWxlRnJvbVNoYXJlZChzZWxlY3RlZEZpbGVzOiBhbnlbXSwgaWREZXNGb2xkZXI6IHN0cmluZykge1xyXG4gICAgICAgIGlmIChzZWxlY3RlZEZpbGVzPy5sZW5ndGggfHwgaWREZXNGb2xkZXIgIT0gbnVsbCB8fCBpZERlc0ZvbGRlciAhPSAnJykge1xyXG4gICAgICAgICAgICBjb25zdCBpZHNGaWxlOiBzdHJpbmdbXSA9IHNlbGVjdGVkRmlsZXMubWFwKHggPT4geC5pZCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmNvcHlNdWx0aXBsZUZpbGUoaWRzRmlsZSwgaWREZXNGb2xkZXIpO1xyXG4gICAgICAgICAgICBpZiAoIXJlcy5zdWNjZXNzIHx8ICFyZXMuZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdM4buXaSBjb3B5IGZpbGUgdOG7qyB0aMawIG3hu6VjIGTDuW5nIGNodW5nJyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dTdWNjZXNzKCdDb3B5IGZpbGUgdOG7qyB0aMawIG3hu6VjIGTDuW5nIGNodW5nIHRow6BuaCBjw7RuZycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnQ8OzIGzhu5dpIGNvcHkgdOG7qyB0aHUgbeG7pWMgZMO5bmcgY2h1bmcnKTtcclxuICAgIH1cclxuXHJcbiAgICBmb2N1c0lucHV0KGlucHV0OiBhbnkpIHtcclxuICAgICAgICBpbnB1dC5mb2N1cygpO1xyXG4gICAgfVxyXG5cclxuICAgIGNob25DaHVLeSgpIHtcclxuICAgICAgICB0aGlzLmZpbGVLeVNvU2ltLmNob25DaHVLeSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGt5U28oKSB7XHJcbiAgICAgICAgdGhpcy5maWxlS3lTb1NpbS5reVNvKCk7XHJcbiAgICB9XHJcbn1cclxuIiwiPGRpdiAqbmdJZj1cImxheW91dCA9PSBfbGF5b3V0LkxJU1RcIiBjbGFzcz1cImZ1bGwtbGF5b3V0XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZm0tZ3JpZFwiPlxyXG4gICAgICAgIDxjcnVkLWxpc3Qtc2ltcGxlICNjcnVkTGlzdCBbbW9kZWxdPVwibW9kZWxcIiBbc2V0dGluZ109XCJzZXR0aW5nXCIgW2RhdGFTb3VyY2VdPVwiX2RhdGFTb3VyY2VcIlxyXG4gICAgICAgICAgICBbc2hvd1Njcm9sbEJhcl09XCJmYWxzZVwiIGNsYXNzPVwiLS1hdXRvLWhlaWdodC1jb250ZW50IC0tbm8td3JhcHBlci1wYWRkaW5nXCIgW3dpZHRoRnVuY3Rpb25Db2x1bW5dPVwiJzguMnJlbSdcIlxyXG4gICAgICAgICAgICAob25SZWxvYWQpPVwiX3RyaWdnZXJQcm9jZXNzRGF0YSgkZXZlbnQpXCIgKG9uUm93U2VsZWN0KT1cIm9uUm93U2VsZWN0KCRldmVudClcIj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjdXN0b21UaXRsZT5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJicmVhZENydW1iXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI3Rvb2xiYXI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiIWhpZGRlbkNyZWF0ZUZvbGRlciAmJiAhcmVhZG9ubHlcIiBwQnV0dG9uIHBSaXBwbGUgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgcFRvb2x0aXA9XCJU4bqhbyB0aMawIG3hu6VjIG3hu5tpXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCIgaWNvbj1cInBpIHBpLWZvbGRlclwiIGNsYXNzPVwicC1idXR0b24tdGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJU4bqhbyB0aMawIG3hu6VjXCIgaWNvblBvcz1cImxlZnRcIiAoY2xpY2spPVwiY3JlYXRlRm9sZGVyKClcIj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCIhcmVhZG9ubHlcIiBwQnV0dG9uIGljb249XCJwaSBwaS1jbG91ZC11cGxvYWRcIiBwVG9vbHRpcD1cIlThuqNpIHThu4dwIHRpbiB04burIG3DoXkgdMOtbmggY+G7p2EgYuG6oW5cIlxyXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInAtYnV0dG9uLXRleHQgcC1idXR0b24tcHJpbWFyeVwiIGxhYmVsPVwiVOG6o2kgbMOqblwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdEZpbGUoKVwiPjwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCIhcmVhZG9ubHlcIiBwQnV0dG9uIGljb249XCJwaSBwaS1saW5rXCIgcFRvb2x0aXA9XCJU4bqjaSB04burIGxpw6puIGvhur90IHRyb25nIGjhu4cgdGjhu5FuZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwicC1idXR0b24tdGV4dCBwLWJ1dHRvbi1wcmltYXJ5XCIgbGFiZWw9XCJU4bqjaSBsacOqbiBr4bq/dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dBdHRhY2hMaW5rQm94ID0gdHJ1ZVwiPjwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCIhaW5UYWlMaWV1ICYmICFpblRhaUxpZXVDaHVuZyAmJiAhcmVhZG9ubHlcIiBwQnV0dG9uIGljb249XCJwaSBwaS1ib29rXCJcclxuICAgICAgICAgICAgICAgICAgICBwVG9vbHRpcD1cIlNhbyBjaMOpcCB04burIHTDoGkgbGnhu4d1IGTDuW5nIGNodW5nIGhv4bq3YyBjw6EgbmjDom5cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtYnV0dG9uLXRleHRcIiBsYWJlbD1cIlTDoGkgbGnhu4d1XCIgKGNsaWNrKT1cInNob3dUYWlMaWV1RHVuZ0NodW5nID0gdHJ1ZTtcIj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJjYW5TZWxlY3QoKVwiIGNsYXNzPVwicC1idXR0b24tdGV4dCBwLWJ1dHRvbi1zdWNjZXNzXCIgcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICBwVG9vbHRpcD1cIkRpIGNodXnhu4NuIHRoxrAgbeG7pWMvdOG7h3AgdGluIMSRw6MgY2jhu41uXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCIgaWNvbj1cImZhcyBmYS1hcnJvd3MtYWx0XCJcclxuICAgICAgICAgICAgICAgICAgICBpY29uUG9zPVwibGVmdFwiIGxhYmVsPVwiRGkgY2h1eeG7g25cIiAoY2xpY2spPVwibW92ZUV4cGxvcmVySXRlbXMoKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImNhblNldE1vdmUoKVwiIGNsYXNzPVwicC1idXR0b24tdGV4dCBwLWJ1dHRvbi1zdWNjZXNzXCIgcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICBwVG9vbHRpcD1cIkRpIGNodXnhu4NuIHRoxrAgbeG7pWMvdOG7h3AgdGluIMSRw6MgY2jhu41uIHThu5tpIMSRw6J5XCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCIgaWNvbj1cImZhciBmYS1oYW5kLXBhcGVyXCJcclxuICAgICAgICAgICAgICAgICAgICBpY29uUG9zPVwibGVmdFwiIGxhYmVsPVwixJDhurd0IHThuqFpIMSRw6J5XCIgKGNsaWNrKT1cInNldE1vdmVFeHBsb3Jlckl0ZW1zKClcIj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJjYW5TZXRNb3ZlKClcIiBpY29uPVwicGkgcGktdW5kb1wiIHBCdXR0b24gY2xhc3M9XCJwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXNlY29uZGFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiIHBUb29sdGlwPVwiQuG7jyBkaSBjaHV54buDbiB0aMawIG3hu6VjL3Thu4dwIHRpbiDEkcOjIGNo4buNblwiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiIGxhYmVsPVwiQuG7jyBxdWFcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjYW5jZWxNb3ZlKClcIj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJoYXNTZWxlY3QoKSAmJiAhcmVhZG9ubHlcIiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgIHBUb29sdGlwPVwie3sgJ1jDs2EgdGjGsCBt4bulYy904buHcCB0aW4gxJHDoyBjaOG7jW4nIHwgdHJhbnNsYXRlIH19XCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCIgaWNvbj1cInBpIHBpLXRyYXNoXCJcclxuICAgICAgICAgICAgICAgICAgICBpY29uUG9zPVwibGVmdFwiIGNsYXNzPVwicC1idXR0b24tdGV4dCBwLWJ1dHRvbi1kYW5nZXJcIiBsYWJlbD1cIljDs2FcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVNdXRpcGxlKG1vZGVsLnNlbGVjdGVkSXRlbXMpXCI+PC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImhhc1NlbGVjdCgpXCIgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXNlY29uZGFyeVwiIHBCdXR0b24gdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgcFRvb2x0aXA9XCJOw6luICYgdOG6o2kgduG7gVwiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiIGljb249XCJmYXMgZmEtZmlsZS1hcmNoaXZlXCIgaWNvblBvcz1cImxlZnRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiVOG6o2kgduG7gVwiIChjbGljayk9XCJkb3dubG9hZE11bHRpcGxlKClcIj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNleHBsb3Jlckl0ZW0gbGV0LXJvd0RhdGE9J3Jvd0RhdGEnIGxldC1jb2w9J2NvbCc+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwib3Blbk9iamVjdChyb3dEYXRhKVwiIGNsYXNzPVwicHVsbC1sZWZ0IGZpbGUtZXgtaWNvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJyb3dEYXRhLm5hbWUgfCBmaWxlSWNvbiA6ICFyb3dEYXRhLmlzRmlsZVwiPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgIDxzcGFuIChjbGljayk9XCJvcGVuT2JqZWN0KHJvd0RhdGEpXCIgY2xhc3M9XCJ7e3Jvd0RhdGEuY2xhc3N9fSBmaWxlLWV4LW5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICB7e3Jvd0RhdGEubmFtZX19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInJvd0RhdGEuc2lnbmF0dXJlc1wiIGNsYXNzPVwicHVsbC1yaWdodCBzaWduYXR1cmVcIiBwVG9vbHRpcD1cIlhlbSBjaGkgdGnhur90IGvDvSBz4buRXCJcclxuICAgICAgICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJ0b3BcIiAoY2xpY2spPVwidmlld0xpc3RTaWduKCRldmVudCwgcm93RGF0YS5zaWduYXR1cmVzKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXNpZ25hdHVyZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZmlsZVNpemUgbGV0LXJvd0RhdGE9J3Jvd0RhdGEnPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInJvd0RhdGEuaXNGaWxlXCI+e3tyb3dEYXRhLmZpbGVTaXplIHwgZmlsZVNpemV9fTwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNmdW5jdGlvbiBsZXQtcm93RGF0YT1cInJvd0RhdGFcIiBsZXQtY3J1ZExpc3Q9XCJjcnVkTGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZ1bmN0aW9uLWxpc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXJlYWRvbmx5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHQgbGluay1vci1hY3Rpb25cIiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCIgcFRvb2x0aXA9XCJ7e2dldEJ1dHRvblRvb2x0aXAocm93RGF0YSl9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uPVwie3tnZXRCdXR0b25JY29uKHJvd0RhdGEpfX1cIiAoY2xpY2spPVwib25CdXR0b25DbGljayhyb3dEYXRhKVwiPjwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInAtYnV0dG9uLWRhbmdlciBwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHQgbGluay1vci1hY3Rpb25cIiBwQnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgcFRvb2x0aXA9XCJYw7NhXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCIgaWNvbj1cInBpIHBpLXRyYXNoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVGaWxlKHJvd0RhdGEpXCI+PC9idXR0b24+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgcEJ1dHRvbiBpY29uPVwicGkgcGktZWxsaXBzaXMtdlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImxpbmstb3ItYWN0aW9uIHAtYnV0dG9uLXRleHQgcC1idXR0b24tcm91bmRlZFwiIHBUb29sdGlwPVwiVGjDqm1cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dDb250ZXh0TWVudSgkZXZlbnQsIHJvd0RhdGEpXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInJlYWRvbmx5XCIgY2xhc3M9XCJwLWJ1dHRvbi1zZWNvbmRhcnkgcC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi10ZXh0IGxpbmstb3ItYWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgcFRvb2x0aXA9XCJU4bqjaSB24buBXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCIgaWNvbj1cInBpIHBpLWNsb3VkLWRvd25sb2FkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRvd25sb2FkKHJvd0RhdGEpXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInJlYWRvbmx5XCIgY2xhc3M9XCJwLWJ1dHRvbi1zZWNvbmRhcnkgcC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi10ZXh0IGxpbmstb3ItYWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgcFRvb2x0aXA9XCJTYW8gY2jDqXAgxJHGsOG7nW5nIGThuqtuXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCIgaWNvbj1cInBpIHBpLWxpbmtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY29weURvd25sb2FkTGluayhyb3dEYXRhKVwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9jcnVkLWxpc3Qtc2ltcGxlPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiAqbmdJZj1cImxheW91dCA9PSBfbGF5b3V0LlNJTVBMRVwiIGNsYXNzPVwibm90LWZ1bGwtbGF5b3V0XCIgW2NsYXNzLnJlYWRvbmx5XT1cInJlYWRvbmx5XCI+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiIXJlYWRvbmx5IHx8IGRhdGEuYnJlYWRjcnVtYnMubGVuZ3RoID4gMFwiIGNsYXNzPVwiZm0tdG9vbGJhclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbS10b29sYmFyLWJ1dHRvbnNcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFyZWFkb25seVwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFoaWRkZW5DcmVhdGVGb2xkZXJcIiAoY2xpY2spPVwiY3JlYXRlRm9sZGVyKClcIiBwQnV0dG9uIHBSaXBwbGUgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgcFRvb2x0aXA9XCJU4bqhbyB0aMawIG3hu6VjIG3hu5tpXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCIgaWNvbj1cInBpIHBpLWZvbGRlclwiIGNsYXNzPVwicC1idXR0b24tdGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJU4bqhbyB0aMawIG3hu6VjXCIgaWNvblBvcz1cImxlZnRcIj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgcEJ1dHRvbiBjbGFzcz1cInAtYnV0dG9uLXRleHQgcC1idXR0b24taW5mbyBsaW5rLW9yLWFjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLWNsb3VkLXVwbG9hZFwiIChjbGljayk9XCJzZWxlY3RGaWxlKClcIiBsYWJlbD1cIlThuqNpIGzDqm5cIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBpY29uPVwicGkgcGktbGlua1wiIHBUb29sdGlwPVwiVOG6o2kgdOG7qyBsacOqbiBr4bq/dCB0cm9uZyBo4buHIHRo4buRbmdcIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIlxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInAtYnV0dG9uLXRleHQgcC1idXR0b24tcHJpbWFyeVwiIGxhYmVsPVwiVOG6o2kgbGnDqm4ga+G6v3RcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93QXR0YWNoTGlua0JveCA9IHRydWVcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCIhaW5UYWlMaWV1XCIgcEJ1dHRvbiBpY29uPVwicGkgcGktYm9va1wiIHBUb29sdGlwPVwiVMOgaSBsaeG7h3UgZMO5bmcgY2h1bmdcIlxyXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInAtYnV0dG9uLXRleHRcIiBsYWJlbD1cIlTDoGkgbGnhu4d1XCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd1RhaUxpZXVEdW5nQ2h1bmcgPSB0cnVlO1wiPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJicmVhZENydW1iXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwibmZsLWdyaWRcIj5cclxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCByb3dEYXRhIG9mIF9kYXRhU291cmNlOyBpbmRleCBhcyBpXCIgY2xhc3M9XCJuZmwtaXRlbVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmZsLW5vXCI+XHJcbiAgICAgICAgICAgICAgICB7e2kgKyAxfX0uXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5mbC1uYW1lXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInB1bGwtbGVmdCBmaWxlLWV4LWljb25cIiBbaW5uZXJIVE1MXT1cInJvd0RhdGEubmFtZSB8IGZpbGVJY29uIDogIXJvd0RhdGEuaXNGaWxlXCI+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8YSAoY2xpY2spPVwib3Blbk9iamVjdChyb3dEYXRhKVwiIGNsYXNzPVwie3tyb3dEYXRhLmNsYXNzfX0gZmlsZS1leC1uYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7cm93RGF0YS5uYW1lfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInJvd0RhdGEuc2lnbmF0dXJlc1wiIGNsYXNzPVwibmZsLXNpZ25hdHVyZSBzaWduYXR1cmVcIiBwVG9vbHRpcD1cIlhlbSBjaGkgdGnhur90IGvDvSBz4buRXCJcclxuICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiIChjbGljayk9XCJ2aWV3TGlzdFNpZ24oJGV2ZW50LCByb3dEYXRhLnNpZ25hdHVyZXMpXCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1zaWduYXR1cmVcIj48L2k+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicm93RGF0YS5pc0ZpbGVcIiBjbGFzcz1cIm5mbC12ZXJzaW9uXCI+XHJcbiAgICAgICAgICAgICAgICB2e3tyb3dEYXRhLmN1cnJlbnRGaWxlVmVyc2lvbn19XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5mbC1mdW5jdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFyZWFkb25seVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHQgbGluay1vci1hY3Rpb25cIiAoY2xpY2spPVwib25CdXR0b25DbGljayhyb3dEYXRhKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBCdXR0b24gdHlwZT1cImJ1dHRvblwiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiIHBUb29sdGlwPVwie3tnZXRCdXR0b25Ub29sdGlwKHJvd0RhdGEpfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uPVwie3tnZXRCdXR0b25JY29uKHJvd0RhdGEpfX1cIj48L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInAtYnV0dG9uLWRhbmdlciBwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHQgbGluay1vci1hY3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlRmlsZShyb3dEYXRhKVwiIHBCdXR0b24gdHlwZT1cImJ1dHRvblwiIHBUb29sdGlwPVwiWMOzYVwiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS10cmFzaFwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInJlYWRvbmx5XCIgY2xhc3M9XCJwLWJ1dHRvbi1zZWNvbmRhcnkgcC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi10ZXh0IGxpbmstb3ItYWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZG93bmxvYWQocm93RGF0YSlcIiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIiBwVG9vbHRpcD1cIlThuqNpIHbhu4FcIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIlxyXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS1jbG91ZC1kb3dubG9hZFwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInJlYWRvbmx5XCIgY2xhc3M9XCJwLWJ1dHRvbi1zZWNvbmRhcnkgcC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi10ZXh0IGxpbmstb3ItYWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICBwQnV0dG9uIHR5cGU9XCJidXR0b25cIiBwVG9vbHRpcD1cIlNhbyBjaMOpcCDEkcaw4budbmcgZOG6q25cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIiBpY29uPVwicGkgcGktbGlua1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvcHlEb3dubG9hZExpbmsocm93RGF0YSlcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHBCdXR0b24gaWNvbj1cInBpIHBpLWVsbGlwc2lzLXZcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibGluay1vci1hY3Rpb24gcC1idXR0b24tdGV4dCBwLWJ1dHRvbi1yb3VuZGVkXCIgcFRvb2x0aXA9XCJUaMOqbVwiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dDb250ZXh0TWVudSgkZXZlbnQsIHJvd0RhdGEpXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCIhX2RhdGFTb3VyY2UgfHwgIV9kYXRhU291cmNlLmxlbmd0aFwiIGNsYXNzPVwibmZsLW5vLWl0ZW1cIj5cclxuICAgICAgICAgICAgQ2jGsGEgY8OzIHTDoGkgbGnhu4d1IMSRxrDhu6NjIHThuqNpIGzDqm5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgKm5nSWY9XCJsYXlvdXQgPT0gX2xheW91dC5TSU1QTEVfRk9SX0xJU1RcIiBjbGFzcz1cIm5vdC1mdWxsLWxheW91dFwiIFtjbGFzcy5yZWFkb25seV09XCJyZWFkb25seVwiPlxyXG4gICAgPGRpdiAqbmdJZj1cIiFyZWFkb25seSB8fCBkYXRhLmJyZWFkY3J1bWJzLmxlbmd0aCA+IDBcIiBjbGFzcz1cImZtLXRvb2xiYXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm0tdG9vbGJhci1idXR0b25zXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhcmVhZG9ubHlcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCIhaGlkZGVuQ3JlYXRlRm9sZGVyXCIgKGNsaWNrKT1cImNyZWF0ZUZvbGRlcigpXCIgcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgIHBUb29sdGlwPVwiVOG6oW8gdGjGsCBt4bulYyBt4bubaVwiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiIGljb249XCJwaSBwaS1mb2xkZXJcIiBjbGFzcz1cInAtYnV0dG9uLXRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiVOG6oW8gdGjGsCBt4bulY1wiIGljb25Qb3M9XCJsZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHBCdXR0b24gY2xhc3M9XCJwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLWluZm8gbGluay1vci1hY3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS1jbG91ZC11cGxvYWRcIiAoY2xpY2spPVwic2VsZWN0RmlsZSgpXCIgbGFiZWw9XCJU4bqjaSBsw6puXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gaWNvbj1cInBpIHBpLWxpbmtcIiBwVG9vbHRpcD1cIlThuqNpIHThu6sgbGnDqm4ga+G6v3QgdHJvbmcgaOG7hyB0aOG7kW5nXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCJcclxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXByaW1hcnlcIiBsYWJlbD1cIlThuqNpIGxpw6puIGvhur90XCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd0F0dGFjaExpbmtCb3ggPSB0cnVlXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiIWluVGFpTGlldVwiIHBCdXR0b24gaWNvbj1cInBpIHBpLWJvb2tcIiBwVG9vbHRpcD1cIlTDoGkgbGnhu4d1IGTDuW5nIGNodW5nXCJcclxuICAgICAgICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJ0b3BcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0XCIgbGFiZWw9XCJUw6BpIGxp4buHdVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dUYWlMaWV1RHVuZ0NodW5nID0gdHJ1ZTtcIj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnJlYWRDcnVtYlwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cIm5mbC1ncmlkXCI+XHJcbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcm93RGF0YSBvZiBfZGF0YVNvdXJjZTsgaW5kZXggYXMgaVwiIGNsYXNzPVwibmZsLWl0ZW1cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5mbC1ub1wiPlxyXG4gICAgICAgICAgICAgICAge3tpICsgMX19LlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuZmwtbmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwdWxsLWxlZnQgZmlsZS1leC1pY29uXCIgW2lubmVySFRNTF09XCJyb3dEYXRhLm5hbWUgfCBmaWxlSWNvbiA6ICFyb3dEYXRhLmlzRmlsZVwiPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgIDxhIChjbGljayk9XCJvcGVuT2JqZWN0KHJvd0RhdGEpXCIgY2xhc3M9XCJ7e3Jvd0RhdGEuY2xhc3N9fSBmaWxlLWV4LW5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tyb3dEYXRhLm5hbWV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwicm93RGF0YS5zaWduYXR1cmVzXCIgY2xhc3M9XCJzaWduYXR1cmVcIiBwVG9vbHRpcD1cIlhlbSBjaGkgdGnhur90IGvDvSBz4buRXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiIChjbGljayk9XCJ2aWV3TGlzdFNpZ24oJGV2ZW50LCByb3dEYXRhLnNpZ25hdHVyZXMpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1zaWduYXR1cmVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8c3BhbiBjbGFzcz1cImZpbGUtZXgtZXh0ZW5zaW9uXCI+e3tyb3dEYXRhLmV4dGVuc2lvbn19PC9zcGFuPiAtLT5cclxuICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmZsLWZ1bmN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXJlYWRvbmx5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tdGV4dCBsaW5rLW9yLWFjdGlvblwiIChjbGljayk9XCJvbkJ1dHRvbkNsaWNrKHJvd0RhdGEpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCIgcFRvb2x0aXA9XCJ7e2dldEJ1dHRvblRvb2x0aXAocm93RGF0YSl9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJ7e2dldEJ1dHRvbkljb24ocm93RGF0YSl9fVwiPjwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicC1idXR0b24tZGFuZ2VyIHAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tdGV4dCBsaW5rLW9yLWFjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVGaWxlKHJvd0RhdGEpXCIgcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgcFRvb2x0aXA9XCJYw7NhXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLXRyYXNoXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwhLS1cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJyZWFkb25seVwiIGNsYXNzPVwicC1idXR0b24tc2Vjb25kYXJ5IHAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tdGV4dCBsaW5rLW9yLWFjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkb3dubG9hZChyb3dEYXRhKVwiIHBCdXR0b24gdHlwZT1cImJ1dHRvblwiIHBUb29sdGlwPVwiVOG6o2kgduG7gVwiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS1jbG91ZC1kb3dubG9hZFwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInJlYWRvbmx5XCIgY2xhc3M9XCJwLWJ1dHRvbi1zZWNvbmRhcnkgcC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi10ZXh0IGxpbmstb3ItYWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgcFRvb2x0aXA9XCJTYW8gY2jDqXAgxJHGsOG7nW5nIGThuqtuXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCIgaWNvbj1cInBpIHBpLWxpbmtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY29weURvd25sb2FkTGluayhyb3dEYXRhKVwiPjwvYnV0dG9uPiAtLT5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHBCdXR0b24gaWNvbj1cInBpIHBpLWVsbGlwc2lzLXZcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibGluay1vci1hY3Rpb24gcC1idXR0b24tdGV4dCBwLWJ1dHRvbi1yb3VuZGVkXCIgcFRvb2x0aXA9XCJUaMOqbVwiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dDb250ZXh0TWVudSgkZXZlbnQsIHJvd0RhdGEpXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCIhX2RhdGFTb3VyY2UgfHwgIV9kYXRhU291cmNlLmxlbmd0aFwiIGNsYXNzPVwibmZsLW5vLWl0ZW1cIj5cclxuICAgICAgICAgICAgQ2jGsGEgY8OzIHTDoGkgbGnhu4d1IMSRxrDhu6NjIHThuqNpIGzDqm5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgKm5nSWY9XCJsYXlvdXQgPT0gX2xheW91dC5JTkxJTkVcIiBjbGFzcz1cIm5vdC1mdWxsLWxheW91dFwiIFtjbGFzcy5yZWFkb25seV09XCJyZWFkb25seVwiPlxyXG4gICAgPCEtLSA8ZGl2ICpuZ0lmPVwiIXJlYWRvbmx5IHx8IGRhdGEuYnJlYWRjcnVtYnMubGVuZ3RoID4gMFwiIGNsYXNzPVwiZm0tdG9vbGJhclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbS10b29sYmFyLWJ1dHRvbnNcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFyZWFkb25seVwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFoaWRkZW5DcmVhdGVGb2xkZXJcIiAoY2xpY2spPVwiY3JlYXRlRm9sZGVyKClcIiBwQnV0dG9uIHBSaXBwbGUgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgcFRvb2x0aXA9XCJU4bqhbyB0aMawIG3hu6VjIG3hu5tpXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCIgaWNvbj1cInBpIHBpLWZvbGRlclwiIGNsYXNzPVwicC1idXR0b24tdGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJU4bqhbyB0aMawIG3hu6VjXCIgaWNvblBvcz1cImxlZnRcIj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgcEJ1dHRvbiBjbGFzcz1cInAtYnV0dG9uLXRleHQgcC1idXR0b24taW5mbyBsaW5rLW9yLWFjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLWNsb3VkLXVwbG9hZFwiIChjbGljayk9XCJzZWxlY3RGaWxlKClcIiBsYWJlbD1cIlThuqNpIGzDqm5cIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBpY29uPVwicGkgcGktbGlua1wiIHBUb29sdGlwPVwiVOG6o2kgdOG7qyBsacOqbiBr4bq/dCB0cm9uZyBo4buHIHRo4buRbmdcIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIlxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInAtYnV0dG9uLXRleHQgcC1idXR0b24tcHJpbWFyeVwiIGxhYmVsPVwiVOG6o2kgbGnDqm4ga+G6v3RcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93QXR0YWNoTGlua0JveCA9IHRydWVcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCIhaW5UYWlMaWV1XCIgcEJ1dHRvbiBpY29uPVwicGkgcGktYm9va1wiIHBUb29sdGlwPVwiVMOgaSBsaeG7h3UgZMO5bmcgY2h1bmdcIlxyXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInAtYnV0dG9uLXRleHRcIiBsYWJlbD1cIlTDoGkgbGnhu4d1XCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd1RhaUxpZXVEdW5nQ2h1bmcgPSB0cnVlO1wiPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJicmVhZENydW1iXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj4gLS0+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cIm5mbC1ncmlkXCI+XHJcbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcm93RGF0YSBvZiBfZGF0YVNvdXJjZTsgaW5kZXggYXMgaVwiIGNsYXNzPVwibmZsLWl0ZW1cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5mbC1ub1wiPlxyXG4gICAgICAgICAgICAgICAge3tpICsgMX19LlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuZmwtbmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwdWxsLWxlZnQgZmlsZS1leC1pY29uXCIgW2lubmVySFRNTF09XCJyb3dEYXRhLm5hbWUgfCBmaWxlSWNvbiA6ICFyb3dEYXRhLmlzRmlsZVwiPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgIDxhIChjbGljayk9XCJvcGVuT2JqZWN0KHJvd0RhdGEpXCIgY2xhc3M9XCJ7e3Jvd0RhdGEuY2xhc3N9fSBmaWxlLWV4LW5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tyb3dEYXRhLm5hbWV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwicm93RGF0YS5zaWduYXR1cmVzXCIgY2xhc3M9XCJzaWduYXR1cmVcIiBwVG9vbHRpcD1cIlhlbSBjaGkgdGnhur90IGvDvSBz4buRXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiIChjbGljayk9XCJ2aWV3TGlzdFNpZ24oJGV2ZW50LCByb3dEYXRhLnNpZ25hdHVyZXMpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1zaWduYXR1cmVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8c3BhbiBjbGFzcz1cImZpbGUtZXgtZXh0ZW5zaW9uXCI+e3tyb3dEYXRhLmV4dGVuc2lvbn19PC9zcGFuPiAtLT5cclxuICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmZsLWZ1bmN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXJlYWRvbmx5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tdGV4dCBsaW5rLW9yLWFjdGlvblwiIChjbGljayk9XCJvbkJ1dHRvbkNsaWNrKHJvd0RhdGEpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCIgcFRvb2x0aXA9XCJ7e2dldEJ1dHRvblRvb2x0aXAocm93RGF0YSl9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJ7e2dldEJ1dHRvbkljb24ocm93RGF0YSl9fVwiPjwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicC1idXR0b24tZGFuZ2VyIHAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tdGV4dCBsaW5rLW9yLWFjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVGaWxlKHJvd0RhdGEpXCIgcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgcFRvb2x0aXA9XCJYw7NhXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLXRyYXNoXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwhLS1cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJyZWFkb25seVwiIGNsYXNzPVwicC1idXR0b24tc2Vjb25kYXJ5IHAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tdGV4dCBsaW5rLW9yLWFjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkb3dubG9hZChyb3dEYXRhKVwiIHBCdXR0b24gdHlwZT1cImJ1dHRvblwiIHBUb29sdGlwPVwiVOG6o2kgduG7gVwiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS1jbG91ZC1kb3dubG9hZFwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInJlYWRvbmx5XCIgY2xhc3M9XCJwLWJ1dHRvbi1zZWNvbmRhcnkgcC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi10ZXh0IGxpbmstb3ItYWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgcFRvb2x0aXA9XCJTYW8gY2jDqXAgxJHGsOG7nW5nIGThuqtuXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCIgaWNvbj1cInBpIHBpLWxpbmtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY29weURvd25sb2FkTGluayhyb3dEYXRhKVwiPjwvYnV0dG9uPiAtLT5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHBCdXR0b24gaWNvbj1cInBpIHBpLWVsbGlwc2lzLXZcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibGluay1vci1hY3Rpb24gcC1idXR0b24tdGV4dCBwLWJ1dHRvbi1yb3VuZGVkXCIgcFRvb2x0aXA9XCJUaMOqbVwiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dDb250ZXh0TWVudSgkZXZlbnQsIHJvd0RhdGEpXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCIhX2RhdGFTb3VyY2UgfHwgIV9kYXRhU291cmNlLmxlbmd0aFwiIGNsYXNzPVwibmZsLW5vLWl0ZW1cIj5cclxuICAgICAgICAgICAgQ2jGsGEgY8OzIHTDoGkgbGnhu4d1IMSRxrDhu6NjIHThuqNpIGzDqm5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjYnJlYWRDcnVtYj5cclxuICAgIDxkaXYgKm5nSWY9XCJkYXRhLmJyZWFkY3J1bWJzLmxlbmd0aCA+IDFcIiBjbGFzcz1cImZtLXRvb2xiYXItcGF0aFwiPlxyXG4gICAgICAgIDxwLWJyZWFkY3J1bWIgY2xhc3M9XCJjdXN0b21CcmVhZENydW1iXCIgW21vZGVsXT1cImRhdGEuYnJlYWRjcnVtYnNcIj48L3AtYnJlYWRjcnVtYj5cclxuICAgIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPHAtZmlsZVVwbG9hZCAjZmlsZUNvbnRyb2wgW25nU3R5bGVdPVwieydkaXNwbGF5JzogJ25vbmUnfVwiIG1vZGU9XCJiYXNpY1wiIFtjaG9vc2VMYWJlbF09XCJjaG9vc2VMYWJlbFwiIG5hbWU9XCJmaWxlXCJcclxuICAgIFt1cmxdPVwiYXBpVXBsb2FkVXJsXCIgW21heEZpbGVTaXplXT1cIm1heEZpbGVTaXplXCIgYXV0bz1cInRydWVcIlxyXG4gICAgW2ludmFsaWRGaWxlU2l6ZU1lc3NhZ2VTdW1tYXJ5XT1cImludmFsaWRGaWxlU2l6ZU1lc3NhZ2VTdW1tYXJ5XCJcclxuICAgIFtpbnZhbGlkRmlsZVNpemVNZXNzYWdlRGV0YWlsXT1cImludmFsaWRGaWxlU2l6ZU1lc3NhZ2VEZXRhaWxcIlxyXG4gICAgW2ludmFsaWRGaWxlVHlwZU1lc3NhZ2VTdW1tYXJ5XT1cImludmFsaWRGaWxlVHlwZU1lc3NhZ2VTdW1tYXJ5XCJcclxuICAgIFtpbnZhbGlkRmlsZVR5cGVNZXNzYWdlRGV0YWlsXT1cImludmFsaWRGaWxlVHlwZU1lc3NhZ2VEZXRhaWxcIlxyXG4gICAgW2ludmFsaWRGaWxlTGltaXRNZXNzYWdlU3VtbWFyeV09XCJpbnZhbGlkRmlsZUxpbWl0TWVzc2FnZVN1bW1hcnlcIlxyXG4gICAgW2ludmFsaWRGaWxlTGltaXRNZXNzYWdlRGV0YWlsXT1cImludmFsaWRGaWxlTGltaXRNZXNzYWdlRGV0YWlsXCIgKG9uUHJvZ3Jlc3MpPVwib25VcGxvYWRQcm9ncmVzcygkZXZlbnQpXCJcclxuICAgIChvbkJlZm9yZVVwbG9hZCk9XCJvbkJlZm9yZVVwbG9hZCgkZXZlbnQpXCIgKG9uU2VsZWN0KT1cImhhbmRsZVNlbGVjdEZpbGUoJGV2ZW50KVwiIChvblVwbG9hZCk9XCJvblVwbG9hZGVkKCRldmVudClcIlxyXG4gICAgW2FjY2VwdF09XCJjb250cm9sID8gY29udHJvbC5hY2NlcHQ6IG51bGxcIj5cclxuPC9wLWZpbGVVcGxvYWQ+XHJcbjxwLWNvbnRleHRNZW51ICNjb250ZXh0TWVudSBbYXBwZW5kVG9dPVwiJ2JvZHknXCIgW21vZGVsXT1cImRhdGEuaXRlbXNNZW51RmlsZVwiIHN0eWxlQ2xhc3M9XCJmbS1jb250ZXh0TWVudS1wYW5lbFwiPlxyXG48L3AtY29udGV4dE1lbnU+XHJcblxyXG48IS0tIFThuqFvIG3hu5tpLyDEkeG7lWkgdMOqbiB0aMawIG3hu6VjIC0tPlxyXG48dG4tZGlhbG9nICpuZ0lmPVwiZm9ybXMuY3JlYXRlRm9sZGVyLnNob3dcIiAjZGlhbG9nIFtzdHlsZUNsYXNzXT1cIidhZGRyZXNzLWZvcm0nXCJcclxuICAgIFtoZWFkZXJdPVwiZm9ybXMuY3JlYXRlRm9sZGVyLmhlYWRlciB8IHRyYW5zbGF0ZVwiIFtwb3B1cFNpemVdPVwiZm9ybXNbZm9ybUlkcy5jcmVhdGVGb2xkZXJdLnBvcHVwU2l6ZVwiXHJcbiAgICAob25IaWRlKT1cIm9uQ2FuY2VsRm9ybShmb3JtSWRzLmNyZWF0ZUZvbGRlcilcIj5cclxuICAgIDxmb2xkZXItZm9ybSAjZm9ybUJhc2UgW3BhcmVudE1vZGVsXT1cIm1vZGVsXCIgW3BhcmVudENvbnRleHRdPVwiY29udGV4dFwiXHJcbiAgICAgICAgW21vZGVsXT1cImZvcm1zW2Zvcm1JZHMuY3JlYXRlRm9sZGVyXS5mb3JtRGF0YVwiIChvblNhdmVkKT1cIm9uU2F2ZWRGb3JtKGZvcm1JZHMuY3JlYXRlRm9sZGVyKVwiXHJcbiAgICAgICAgKG9uQ2FuY2VsKT1cIm9uQ2FuY2VsRm9ybShmb3JtSWRzLmNyZWF0ZUZvbGRlcilcIj5cclxuICAgIDwvZm9sZGVyLWZvcm0+XHJcbjwvdG4tZGlhbG9nPlxyXG5cclxuPCEtLSDEkOG7lWkgdMOqbiBmaWxlIC0tPlxyXG48dG4tZGlhbG9nICpuZ0lmPVwiZm9ybXMucmVuYW1lRmlsZS5zaG93XCIgI2RpYWxvZyBbc3R5bGVDbGFzc109XCInYWRkcmVzcy1mb3JtJ1wiXHJcbiAgICBbaGVhZGVyXT1cImZvcm1zLnJlbmFtZUZpbGUuaGVhZGVyIHwgdHJhbnNsYXRlXCIgW3BvcHVwU2l6ZV09XCJmb3Jtc1tmb3JtSWRzLnJlbmFtZUZpbGVdLnBvcHVwU2l6ZVwiXHJcbiAgICAob25IaWRlKT1cIm9uQ2FuY2VsRm9ybShmb3JtSWRzLnJlbmFtZUZpbGUpXCI+XHJcbiAgICA8ZmlsZS1mb3JtICNmb3JtQmFzZSBbcGFyZW50TW9kZWxdPVwibW9kZWxcIiBbcGFyZW50Q29udGV4dF09XCJjb250ZXh0XCIgW21vZGVsXT1cImZvcm1zW2Zvcm1JZHMucmVuYW1lRmlsZV0uZm9ybURhdGFcIlxyXG4gICAgICAgIChvblNhdmVkKT1cIm9uU2F2ZWRGb3JtKGZvcm1JZHMucmVuYW1lRmlsZSlcIiAob25DYW5jZWwpPVwib25DYW5jZWxGb3JtKGZvcm1JZHMucmVuYW1lRmlsZSlcIj5cclxuICAgIDwvZmlsZS1mb3JtPlxyXG48L3RuLWRpYWxvZz5cclxuXHJcbjwhLS0gWGVtIGZpbGUgdHLhu7FjIHR1eeG6v24gLS0+XHJcbjxmaWxlLXZpZXdlciAqbmdJZj1cImZvcm1zLmZpbGVWaWV3ZXIuc2hvd1wiIFtwYXJlbnRNb2RlbF09XCJtb2RlbFwiIFtwYXJlbnRDb250ZXh0XT1cImNvbnRleHRcIiBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxyXG4gICAgW21vZGVsXT1cImZvcm1zLmZpbGVWaWV3ZXIuZm9ybURhdGFcIiAob25DbG9zZSk9XCJjbG9zZUZpbGVWaWV3ZXIoKVwiPlxyXG48L2ZpbGUtdmlld2VyPlxyXG5cclxuPCEtLSBYZW0gcGhpw6puIGLhuqNuIC0tPlxyXG48dG4tZGlhbG9nICpuZ0lmPVwiZm9ybXMuZmlsZVZlcnNpb25MaXN0LnNob3dcIiAjZGlhbG9nIFtzdHlsZUNsYXNzXT1cIidhZGRyZXNzLWZvcm0nXCJcclxuICAgIFtoZWFkZXJdPVwiZm9ybXMuZmlsZVZlcnNpb25MaXN0LmhlYWRlciB8IHRyYW5zbGF0ZVwiIFtwb3B1cFNpemVdPVwiZm9ybXNbZm9ybUlkcy5maWxlVmVyc2lvbkxpc3RdLnBvcHVwU2l6ZVwiXHJcbiAgICAob25IaWRlKT1cIm9uQ2FuY2VsRm9ybShmb3JtSWRzLmZpbGVWZXJzaW9uTGlzdClcIj5cclxuICAgIDxmaWxlLXZlcnNpb24tbGlzdCAqbmdJZj1cImZvcm1zLmZpbGVWZXJzaW9uTGlzdC5zaG93XCIgW3BhcmVudE1vZGVsXT1cIm1vZGVsXCIgW3BhcmVudENvbnRleHRdPVwiY29udGV4dFwiXHJcbiAgICAgICAgW2ZpbGVJZF09XCJmb3Jtc1tmb3JtSWRzLmZpbGVWZXJzaW9uTGlzdF0uZmlsZUlkXCIgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCI+XHJcbiAgICA8L2ZpbGUtdmVyc2lvbi1saXN0PlxyXG48L3RuLWRpYWxvZz5cclxuXHJcbjx0bi1kaWFsb2cgKm5nSWY9XCJzaG93QXR0YWNoTGlua0JveFwiICNkaWFsb2cyIFttYXhpbWl6YWJsZV09XCJmYWxzZVwiIFtoZWFkZXJdPVwiJ05o4bqtcCBsacOqbiBr4bq/dCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgW3BvcHVwU2l6ZV09XCJ7IHdpZHRoOiA2MDAsIGhlaWdodDogNTB9XCIgKG9uSGlkZSk9XCJzaG93QXR0YWNoTGlua0JveCA9IGZhbHNlOyB0eXBlZExpbms9JydcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJwLWNvbC0xMlwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwLWdyaWRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtbWQtMTBcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCAjaW5wdXQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIk5o4bqtcCBsacOqbiBr4bq/dCBzYW8gY2jDqXAgdOG7qyB04buHcCB0aW4ga2jDoWMuLi5cIlxyXG4gICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJhZGRBdHRhY2hMaW5rKClcIiBwSW5wdXRUZXh0IFsobmdNb2RlbCldPVwidHlwZWRMaW5rXCIgY2xhc3M9XCJwLWNvbC0xMlwiIC8+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC1tZC0yXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiYWRkQXR0YWNoTGluaygpXCIgW2Rpc2FibGVkXT1cInR5cGVkTGluayAhPSAnJz8gbnVsbCA6IHRydWVcIiBwQnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1wcmltYXJ5IHAtY29sLTEyXCIgbGFiZWw9XCJPa1wiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGFmdGVyLXZpZXctY2hlY2tlZCAobG9hZGVkKT1cImZvY3VzSW5wdXQoaW5wdXQpXCI+PC9hZnRlci12aWV3LWNoZWNrZWQ+XHJcbjwvdG4tZGlhbG9nPlxyXG5cclxuPHRuLWRpYWxvZyAjZGlhbG9nMyAqbmdJZj1cInNob3dUYWlMaWV1RHVuZ0NodW5nXCIgW2hlYWRlcl09XCInVMOgaSBsaeG7h3UnIHx0cmFuc2xhdGVcIlxyXG4gICAgW3BvcHVwU2l6ZV09XCJ7IHdpZHRoOjEwMjQsIGhlaWdodDogODAwIH1cIiAob25IaWRlKT1cInNob3dUYWlMaWV1RHVuZ0NodW5nID0gZmFsc2VcIj5cclxuICAgIDxmaWxlLXRhaS1saWV1ICNmb3JtQmFzZSBbb3JpZ2luYWxGb2xkZXJJZF09XCJkYXRhLmN1cnJlbnRGb2xkZXJJZFwiXHJcbiAgICAgICAgKG9uU2F2ZWQpPVwic2hvd1RhaUxpZXVEdW5nQ2h1bmcgPSBmYWxzZTsgdGhpcy5fdHJpZ2dlclByb2Nlc3NEYXRhKClcIiAob25DYW5jZWwpPVwic2hvd1RhaUxpZXVEdW5nQ2h1bmcgPSBmYWxzZVwiPlxyXG4gICAgPC9maWxlLXRhaS1saWV1PlxyXG48L3RuLWRpYWxvZz5cclxuXHJcbjwhLS1cclxuXHJcbjxzaGFyZS1maWxlICpuZ0lmPVwiZm9ybXMuc2hhcmVGaWxlLnNob3dcIiBbcGFyZW50RGF0YU1vZGVsXT1cIm1vZGVsXCIgW3BhcmVudERhdGFDb250ZXh0XT1cImNvbnRleHRcIlxyXG4gICAgW21vZGVsXT1cImZvcm1zLnNoYXJlRmlsZS5mb3JtRGF0YVwiPlxyXG48L3NoYXJlLWZpbGU+XHJcblxyXG48c2hhcmUtZm9sZGVyICpuZ0lmPVwiZm9ybXMuc2hhcmVGb2xkZXIuc2hvd1wiIFtwYXJlbnREYXRhTW9kZWxdPVwibW9kZWxcIiBbcGFyZW50RGF0YUNvbnRleHRdPVwiY29udGV4dFwiXHJcbiAgICBbbW9kZWxdPVwiZm9ybXMuc2hhcmVGb2xkZXIuZm9ybURhdGFcIj5cclxuPC9zaGFyZS1mb2xkZXI+XHJcbiAtLT5cclxuXHJcbjwhLS0gWGVtIGNo4buvIGvDvSBz4buRIC0tPlxyXG48dG4tZGlhbG9nICpuZ0lmPVwiZm9ybXMuc2lnbmF0dXJlRGV0YWlsLnNob3dcIiAjZGlhbG9nIFtzdHlsZUNsYXNzXT1cIidhZGRyZXNzLWZvcm0nXCJcclxuICAgIFtoZWFkZXJdPVwiZm9ybXMuc2lnbmF0dXJlRGV0YWlsLmhlYWRlciB8IHRyYW5zbGF0ZVwiIFtwb3B1cFNpemVdPVwiZm9ybXNbZm9ybUlkcy5zaWduYXR1cmVEZXRhaWxdLnBvcHVwU2l6ZVwiXHJcbiAgICAob25IaWRlKT1cIm9uQ2FuY2VsRm9ybShmb3JtSWRzLnNpZ25hdHVyZURldGFpbClcIj5cclxuICAgIDxzaWduYXR1cmUtZGV0YWlsIFtwYXJlbnRNb2RlbF09XCJtb2RlbFwiIFtwYXJlbnRDb250ZXh0XT1cImNvbnRleHRcIj5cclxuICAgIDwvc2lnbmF0dXJlLWRldGFpbD5cclxuPC90bi1kaWFsb2c+XHJcbjwhLS1Lw70gc+G7kSBzaW0tLT5cclxuPHRuLWRpYWxvZyAqbmdJZj1cImZvcm1zLmt5U29TaW0uc2hvd1wiICNkaWFsb2cgW3N0eWxlQ2xhc3NdPVwiJ2FkZHJlc3MtZm9ybSdcIiBbaGVhZGVyXT1cImZvcm1zLmt5U29TaW0uaGVhZGVyIHwgdHJhbnNsYXRlXCJcclxuICAgIFtwb3B1cFNpemVdPVwiZm9ybXMua3lTb1NpbS5wb3B1cFNpemVcIiBbc2hvd0Zvb3Rlcl09XCJ0cnVlXCIgKG9uSGlkZSk9XCJvbkNhbmNlbEZvcm0oZm9ybUlkcy5reVNvU2ltKVwiPlxyXG4gICAgPGFwcC1maWxlLWt5LXNvLXNpbSAjZmlsZUt5U29TaW0gW3BhcmVudE1vZGVsXT1cIm1vZGVsXCIgW3BhcmVudENvbnRleHRdPVwiY29udGV4dFwiPlxyXG4gICAgPC9hcHAtZmlsZS1reS1zby1zaW0+XHJcbiAgICA8bmctdGVtcGxhdGUgI2Zvb3Rlcj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBwQnV0dG9uIGljb249XCJmYXMgZmEtaW1hZ2VzXCIgW2Rpc2FibGVkXT1cIm1vZGVsLnN1Ym1pdHRpbmdcIiBjbGFzcz1cInAtYnV0dG9uLXRleHRcIlxyXG4gICAgICAgICAgICBbbGFiZWxdPVwiJ0No4buNbiBjaOG7ryBrw70nIHwgdHJhbnNsYXRlXCIgKGNsaWNrKT1cImNob25DaHVLeSgpXCI+PC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgcEJ1dHRvbiBpY29uPVwiZmFzIGZhLXNpZ25hdHVyZVwiIGNsYXNzPVwicC1idXR0b24tdGV4dCB1aS1idXR0b24tc3VjY2Vzc1wiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtb2RlbC5zdWJtaXR0aW5nXCIgW2xhYmVsXT1cIidUaOG7sWMgaGnhu4duIGvDvScgfCB0cmFuc2xhdGVcIiAoY2xpY2spPVwia3lTbygpXCI+PC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgcEJ1dHRvbiBpY29uPVwicGkgcGktcmVwbGF5XCIgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXNlY29uZGFyeVwiXHJcbiAgICAgICAgICAgIFtsYWJlbF09XCInRk9STS5DQU5DRUwnIHwgdHJhbnNsYXRlXCIgcHJldmVudFRhYiAoY2xpY2spPVwiZm9ybXMua3lTb1NpbS5zaG93PWZhbHNlXCI+PC9idXR0b24+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG48L3RuLWRpYWxvZz4iXX0=
1296
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1tYW5hZ2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NoYXJlZC9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1leHBsb3Jlci9maWxlLW1hbmFnZXIvZmlsZS1tYW5hZ2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NoYXJlZC9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1leHBsb3Jlci9maWxlLW1hbmFnZXIvZmlsZS1tYW5hZ2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBWSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0gsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUkvQixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUN6RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDcEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBT2pGLE9BQU8sRUFBb0Isb0JBQW9CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQVd0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QUFDLGFBQWE7Z0JBQ0UsV0FBVztzQkFBcEMsU0FBUzt1QkFBQyxhQUFhO2dCQUVmLE9BQU87c0JBQWYsS0FBSztnQkFHTyxlQUFlO3NCQUEzQixLQUFLO2dCQVFHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyw2QkFBNkI7c0JBQXJDLEtBQUs7Z0JBQ0csNEJBQTRCO3NCQUFwQyxLQUFLO2dCQUNHLDZCQUE2QjtzQkFBckMsS0FBSztnQkFDRyw0QkFBNEI7c0JBQXBDLEtBQUs7Z0JBQ0csOEJBQThCO3NCQUF0QyxLQUFLO2dCQUNHLDZCQUE2QjtzQkFBckMsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUdHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBR0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBSU8sU0FBUztzQkFBckIsS0FBSztnQkFjRyxRQUFRO3NCQUFoQixLQUFLO2dCQUdHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVPLEtBQUs7c0JBQWpCLEtBQUs7Z0JBTUcseUJBQXlCO3NCQUFqQyxLQUFLO2dCQUVJLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIGZvcndhcmRSZWYsIEluamVjdG9yLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IERldmljZURldGVjdG9yU2VydmljZSB9IGZyb20gJ25neC1kZXZpY2UtZGV0ZWN0b3InO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE1lbnVJdGVtLCBNZXNzYWdlU2VydmljZSB9IGZyb20gJ3RuLWN1c3RvbS1wcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IENvbnRleHRNZW51IH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvY29udGV4dG1lbnUnO1xyXG5pbXBvcnQgeyBGaWxlVXBsb2FkIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvZmlsZXVwbG9hZCc7XHJcbmltcG9ydCB7IENvbXBvbmVudENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vYXBwLWNvbnRleHQvY29tcG9uZW50LWNvbnRleHQuc2VydmljZSc7XHJcbmltcG9ydCB7IERhdGFMaXN0QmFzZSB9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvYmFzZS9kYXRhLWxpc3QtYmFzZSc7XHJcbmltcG9ydCB7IENvbW1vbkVycm9yQ29kZSB9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvY29tbW9uLWVycm9yLWNvZGUnO1xyXG5pbXBvcnQgeyBGb3JtU3RhdGUgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7IFBlcm1pc3Npb25CYXNlIH0gZnJvbSAnLi4vLi4vLi4vZW51bXMvY29tbW9uJztcclxuaW1wb3J0IHsgSUZpbGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzL2ktZmlsZS1jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBFZGl0RmlsZUNvbW1hbmQgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZWRpdC1maWxlLWNvbW1hbmQnO1xyXG5pbXBvcnQgeyBGaWxlVHlwZSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9maWxlLXR5cGUnO1xyXG5pbXBvcnQgeyBDb21tYW5kVHlwZSwgVG5DbGllbnRDb21tYW5kIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3RuLWNsaWVudC1jb21tYW5kJztcclxuaW1wb3J0IHsgQXV0aGVuU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dGhlbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRmlsZU1hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZmlsZS1tYW5hZ2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOb3RpZmllclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9ub3RpZmllci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2lnbmFsUlNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9zaWduYWxyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUbkNsaWVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy90bi1jbGllbnQuc2VydmljZSc7XHJcbmltcG9ydCB7IEZpbGVLeVNvU2ltQ29tcG9uZW50IH0gZnJvbSAnLi4vZmlsZS1reS1zby1zaW0vZmlsZS1reS1zby1zaW0uY29tcG9uZW50JztcclxuaW1wb3J0IHsgRmlsZUV4cGxvcmVySXRlbSwgRmlsZUV4cGxvcmVySXRlbVR5cGUgfSBmcm9tICcuLi9tb2RlbHMvZmlsZS1leHBsb3Jlci1pdGVtJztcclxuaW1wb3J0IHsgRmlsZVZlcnNpb25EVE8gfSBmcm9tICcuLi9tb2RlbHMvZmlsZS12ZXJzaW9uLWR0byc7XHJcbmltcG9ydCB7IEdlbmVyYXRlTGlua0Rvd25sb2FkRFRPIH0gZnJvbSAnLi4vbW9kZWxzL2dlbmVyYXRlLWxpbmstZG93bmxvYWQtZHRvJztcclxuaW1wb3J0IHsgU2VydmljZVJlcXVlc3RNb2RlbCB9IGZyb20gJy4uL21vZGVscy9zZXJ2aWNlLXJlcXVlc3QtbW9kZWwnO1xyXG5pbXBvcnQgeyBEb3dubG9hZExpbmtTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZG93bmxvYWQtbGluay5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRmlsZURhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZmlsZS1kYXRhLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGaWxlRXhwbG9yZXJOZXdTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZmlsZS1leHBsb3Jlci1uZXcuc2VydmljZSc7XHJcbmltcG9ydCB7IEZpbGVPYmplY3RTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZmlsZS1vYmplY3Quc2VydmljZSc7XHJcbmltcG9ydCB7IEZpbGVWZXJzaW9uU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2ZpbGUtdmVyc2lvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRm9sZGVyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2ZvbGRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTXlEcml2ZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9teS1kcml2ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICAgIENvbHVtblNjaGVtYUJhc2UsXHJcbiAgICBDcnVkRm9ybURhdGEsXHJcbiAgICBFbnVtRmlsZUxheW91dCxcclxuICAgIEZpbGVNYW5hZ2VyQ29udHJvbFNjaGVtYSxcclxuICAgIEhlaWdodFR5cGUsXHJcbiAgICBNb2RlbFNjaGVtYSxcclxuICAgIE9wZXJhdG9yLFxyXG4gICAgUG9wdXBTaXplXHJcbn0gZnJvbSAnLi8uLi8uLi8uLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcclxuaW1wb3J0IHsgR3JpZEluZm8gfSBmcm9tICcuLy4uLy4uLy4uL21vZGVscy9ncmlkLWluZm8nO1xyXG5pbXBvcnQgeyBGaWxlRXhwbG9yZXJTZXJ2aWNlIH0gZnJvbSAnLi8uLi9zZXJ2aWNlcy9maWxlLWV4cGxvcmVyLnNlcnZpY2UnO1xyXG5kZWNsYXJlIGxldCB2Z2NhX3NpZ25fYXBwcm92ZWQ6IGFueTtcclxuZGVjbGFyZSBsZXQgdmdjYV9zaWduX2lzc3VlZDogYW55O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGNvbXBvbmVudC1zZWxlY3RvclxyXG4gICAgc2VsZWN0b3I6ICdmaWxlLW1hbmFnZXInLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2ZpbGUtbWFuYWdlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9maWxlLW1hbmFnZXIuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEZpbGVNYW5hZ2VyQ29tcG9uZW50KSxcclxuICAgICAgICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBDb21wb25lbnRDb250ZXh0U2VydmljZSxcclxuICAgIF0sXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgRmlsZU1hbmFnZXJDb21wb25lbnQgZXh0ZW5kcyBEYXRhTGlzdEJhc2UgaW1wbGVtZW50cyBJRmlsZUNvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ2ZpbGVDb250cm9sJykgZmlsZUNvbnRyb2w6IEZpbGVVcGxvYWQ7XHJcbiAgICBAVmlld0NoaWxkKCdjb250ZXh0TWVudScpIGNvbnRleHRNZW51OiBDb250ZXh0TWVudTtcclxuICAgIEBWaWV3Q2hpbGQoJ2ZpbGVLeVNvU2ltJykgZmlsZUt5U29TaW06IEZpbGVLeVNvU2ltQ29tcG9uZW50O1xyXG5cclxuICAgIEBJbnB1dCgpIGNvbnRyb2w6IEZpbGVNYW5hZ2VyQ29udHJvbFNjaGVtYTtcclxuICAgIF9maWxlRGF0YVNlcnZpY2U6IEZpbGVEYXRhU2VydmljZTtcclxuXHJcbiAgICBASW5wdXQoKSBzZXQgZmlsZURhdGFTZXJ2aWNlKHZhbHVlOiBGaWxlRGF0YVNlcnZpY2UpIHtcclxuICAgICAgICB0aGlzLl9maWxlRGF0YVNlcnZpY2UgPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZmlsZURhdGFTZXJ2aWNlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9maWxlRGF0YVNlcnZpY2U7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCkgbGF5b3V0OiBFbnVtRmlsZUxheW91dCA9IEVudW1GaWxlTGF5b3V0LkxJU1Q7XHJcbiAgICBASW5wdXQoKSBoaWRkZW5DcmVhdGVGb2xkZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIG1heEZpbGVTaXplOiBudW1iZXIgPSAxMDAwMDAwMDA7IC8vIFNpemUgaW4gYnl0ZVxyXG4gICAgQElucHV0KCkgaW52YWxpZEZpbGVTaXplTWVzc2FnZVN1bW1hcnk/OiBzdHJpbmcgPSAnezB9OiBRdcOhIGR1bmcgbMaw4bujbmcgZmlsZSBjaG8gcGjDqXAsICc7XHJcbiAgICBASW5wdXQoKSBpbnZhbGlkRmlsZVNpemVNZXNzYWdlRGV0YWlsPzogc3RyaW5nID0gJ2R1bmcgbMaw4bujbmcgdOG7kWkgxJFhIGzDoCB7MH0uJztcclxuICAgIEBJbnB1dCgpIGludmFsaWRGaWxlVHlwZU1lc3NhZ2VTdW1tYXJ5Pzogc3RyaW5nID0gJ3swfTogS2jDtG5nIMSRw7puZyDEkeG7i25oIGThuqFuZyBmaWxlLCAnO1xyXG4gICAgQElucHV0KCkgaW52YWxpZEZpbGVUeXBlTWVzc2FnZURldGFpbD86IHN0cmluZyA9ICfEkeG7i25oIGThuqFuZyBmaWxlIGNobyBwaMOpcDogezB9Lic7XHJcbiAgICBASW5wdXQoKSBpbnZhbGlkRmlsZUxpbWl0TWVzc2FnZVN1bW1hcnk/OiBzdHJpbmcgPSAnUXXDoSBz4buRIGzGsOG7o25nIGZpbGUgY2hvIHBow6lwLCAnO1xyXG4gICAgQElucHV0KCkgaW52YWxpZEZpbGVMaW1pdE1lc3NhZ2VEZXRhaWw/OiBzdHJpbmcgPSAndOG7kWkgxJFhIHswfSBmaWxlLic7XHJcbiAgICBASW5wdXQoKSBkYXRhVHlwZTogYW55O1xyXG5cclxuICAgIC8vIFTDqm4gdGjGsCBt4bulYyBn4buRYy5cclxuICAgIEBJbnB1dCgpIHJvb3RGb2xkZXJOYW1lOiBzdHJpbmc7XHJcblxyXG4gICAgLy8gQuG7mSBrZXkgxJHhu4MgdOG6oW8gdGjGsCBt4bulYyBn4buRYy5cclxuICAgIEBJbnB1dCgpIHNlcnZpY2VDb2RlOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBlbnRpdHk6IHN0cmluZztcclxuICAgIF9lbnRpdHlLZXk6IHN0cmluZztcclxuICAgIF9oYXNMb2FkZWRTb3VyY2UgPSBmYWxzZTtcclxuXHJcbiAgICBASW5wdXQoKSBzZXQgZW50aXR5S2V5KHZhbDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fZW50aXR5S2V5ID0gdmFsO1xyXG5cclxuICAgICAgICBpZiAodmFsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2hhc0xvYWRlZFNvdXJjZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnJvb3RGb2xkZXJJZCA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuZW50aXR5S2V5Q2hhbmdlLmVtaXQodGhpcy5fZW50aXR5S2V5KTtcclxuICAgICAgICAgICAgdGhpcy5jaGVja0FuZExvYWRSb290Rm9sZGVyQ29udGVudCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5yZXNldERhdGEoKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIEBJbnB1dCgpIHJlYWRvbmx5ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gRMO5bmcgY2hvIGNvbXBvbmVudCB0w6BpIGxp4buHdVxyXG4gICAgQElucHV0KCkgaW5UYWlMaWV1ID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBpblRhaUxpZXVDaHVuZyA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgY29weVRvRm9sZGVySWQgPSB0aGlzLl9jb21tb25TZXJ2aWNlLmd1aWRFbXB0eSgpO1xyXG5cclxuICAgIEBJbnB1dCgpIHNldCB2YWx1ZSh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3ZhbHVlICE9IHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpIG11bHRpcGxlQ2hlY2tXaGVuQ2xpY2tSb3c6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIEBPdXRwdXQoKSBvblJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgZW50aXR5S2V5Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgY2xvc2VQb3B1cCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25DaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25TZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICAgIHByaXZhdGUgX3Vuc3ViY3JpYmxlQWxsID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG5cclxuICAgIF9vbGRWYWx1ZTogYW55O1xyXG4gICAgX3ZhbHVlOiBhbnk7XHJcbiAgICBfZGF0YVNvdXJjZTogYW55W10gPSBbXTtcclxuICAgIF9sYXlvdXQgPSBFbnVtRmlsZUxheW91dDtcclxuXHJcbiAgICAvLyBJbnN0YW5jZUlkIHRoxrAgbeG7pWMgZ+G7kWMuXHJcbiAgICByb290Rm9sZGVySWQ6IHN0cmluZyA9IG51bGw7XHJcbiAgICBwcm9ncmVzc1ZhbHVlID0gMDtcclxuICAgIGFwaVVwbG9hZFVybCA9ICcnO1xyXG4gICAgY2hvb3NlTGFiZWwgPSAnQ2jhu41uJztcclxuICAgIHVzZXJJZDogYW55O1xyXG5cclxuICAgIGZvcm1JZHMgPSB7XHJcbiAgICAgICAgY3JlYXRlRm9sZGVyOiAnY3JlYXRlRm9sZGVyJyxcclxuICAgICAgICByZW5hbWVGaWxlOiAncmVuYW1lRmlsZScsXHJcbiAgICAgICAgc2hhcmVGaWxlOiAnc2hhcmVGaWxlJyxcclxuICAgICAgICBzaGFyZUZvbGRlcjogJ3NoYXJlRm9sZGVyJyxcclxuICAgICAgICBmaWxlVmlld2VyOiAnZmlsZVZpZXdlcicsXHJcbiAgICAgICAgZmlsZVZlcnNpb25MaXN0OiAnZmlsZVZlcnNpb25MaXN0JyxcclxuICAgICAgICBzaWduYXR1cmVEZXRhaWw6ICdzaWduYXR1cmVEZXRhaWwnLFxyXG4gICAgICAgIGt5U29TaW06ICdreVNvU2ltJyxcclxuICAgIH07XHJcbiAgICBmb3JtczogYW55ID0ge307XHJcbiAgICBkYXRhOiBhbnkgPSB7XHJcbiAgICAgICAgcm9vdEZvbGRlcklkOiBudWxsLFxyXG4gICAgICAgIGN1cnJlbnRGb2xkZXJJZDogbnVsbCxcclxuXHJcbiAgICAgICAgbW92aW5nOiB7XHJcbiAgICAgICAgICAgIGlzU2VsZWN0aW5nOiBmYWxzZSxcclxuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtczogbnVsbCxcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBicmVhZGNydW1iczogPE1lbnVJdGVtW10+W10sXHJcbiAgICB9O1xyXG4gICAgc2hvd0F0dGFjaExpbmtCb3ggPSBmYWxzZTtcclxuICAgIHR5cGVkTGluazogc3RyaW5nID0gJyc7XHJcbiAgICBzaG93VGFpTGlldUR1bmdDaHVuZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGF5b3V0U2ltcGxlQWxsID0gZmFsc2U7XHJcbiAgICBiYXNlUGVybWlzc2lvbjogbnVtYmVyO1xyXG4gICAgaW5pdGVkID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJvdGVjdGVkIF9teURyaXZlU2VydmljZTogTXlEcml2ZVNlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkIF9pbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICAgICAgcHJpdmF0ZSBfbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHByb3RlY3RlZCBfdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9hdXRoZW5TZXJ2aWNlOiBBdXRoZW5TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX3RuQ2xpZW50U2VydmljZTogVG5DbGllbnRTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2ZpbGVWZXJzaW9uU2VydmljZTogRmlsZVZlcnNpb25TZXJ2aWNlLFxyXG4gICAgICAgIHByb3RlY3RlZCBfbm90aWZpZXJTZXJ2aWNlOiBOb3RpZmllclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfc2lnbmFsclNlcnZpY2U6IFNpZ25hbFJTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBfZmlsZUV4cGxvcmVyU2VydmljZTogRmlsZUV4cGxvcmVyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9maWxlRXhwbG9yZXJOZXdTZXJ2aWNlOiBGaWxlRXhwbG9yZXJOZXdTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBfZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlOiBEZXZpY2VEZXRlY3RvclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfZm9sZGVyU2VydmljZTogRm9sZGVyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9maWxlT2JqZWN0U2VydmljZTogRmlsZU9iamVjdFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfZG93bmxvYWRMaW5rU2VydmljZTogRG93bmxvYWRMaW5rU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9maWxlTWFuYWdlclNlcnZpY2U6IEZpbGVNYW5hZ2VyU2VydmljZVxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoX2luamVjdG9yKTtcclxuICAgICAgICB0aGlzLmFwaVVwbG9hZFVybCA9IHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmdldFVwbG9hZFVybCgpO1xyXG4gICAgICAgIHRoaXMudXNlcklkID0gdGhpcy5fdXNlclNlcnZpY2UuZ2V0VXNlcklkQ29tYmluZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sLl9jb21wb25lbnQgPSB0aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmluaXRlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5sYXlvdXRTaW1wbGVBbGwgPSAodGhpcy5sYXlvdXQgPT09IEVudW1GaWxlTGF5b3V0LlNJTVBMRSB8fCB0aGlzLmxheW91dCA9PT0gRW51bUZpbGVMYXlvdXQuU0lNUExFX0ZPUl9MSVNUKTtcclxuICAgICAgICB0aGlzLmxvYWREZXRhaWxGcm9tUXVlcnlQYXJhbSA9IGZhbHNlO1xyXG4gICAgICAgIC8vIEzhuq9uZyBraGkga8O9IHNpbSBz4buRIHRow6BuaCBjw7RuZyB0aMOsIGxvYWQgbOG6oWkgZmlsZVxyXG4gICAgICAgIHRoaXMucm9vdENvbnRleHQuc3Vic2NyaWJlKCdLeVNvU2ltVGhhbmhDb25nJywgeCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RyaWdnZXJQcm9jZXNzRGF0YSgpO1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1zLmt5U29TaW0uc2hvdyA9IGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuaGFzQ3J1ZExpc3QgPSB0aGlzLmxheW91dCA9PSBFbnVtRmlsZUxheW91dC5MSVNUO1xyXG4gICAgICAgIHRoaXMucGx1c1VybCA9ICdCeUZvbGRlcklkJztcclxuICAgICAgICB0aGlzLmluaXRHcmlkKCk7XHJcbiAgICAgICAgdGhpcy5pbml0Rm9ybXMoKTtcclxuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG4gICAgICAgIHRoaXMubW9kZWwucmVhZHkgPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5maWxlRGF0YVNlcnZpY2UpIHtcclxuICAgICAgICAgICAgdGhpcy5maWxlRGF0YVNlcnZpY2UucmVnaXN0ZXIodGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVsb2FkRGF0YSgpO1xyXG4gICAgICAgIHRoaXMuY2hlY2tBbmRMb2FkUm9vdEZvbGRlckNvbnRlbnQoKTtcclxuICAgIH1cclxuXHJcbiAgICBjaGVja0FuZExvYWRSb290Rm9sZGVyQ29udGVudCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaW5pdGVkIHx8IHRoaXMuZmlsZURhdGFTZXJ2aWNlKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5nZXRSb290Rm9sZGVyQ29udGVudCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFJvb3RGb2xkZXJDb250ZW50KCkge1xyXG4gICAgICAgIGlmICghdGhpcy5yb290Rm9sZGVySWQpIHtcclxuICAgICAgICAgICAgY29uc3QgaGFzS2V5ID0gdGhpcy5zZXJ2aWNlQ29kZVxyXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5lbnRpdHlcclxuICAgICAgICAgICAgICAgICYmIHRoaXMuX2VudGl0eUtleTtcclxuXHJcbiAgICAgICAgICAgIGlmICghaGFzS2V5KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0RGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9tYXJrTG9hZGluZygpO1xyXG4gICAgICAgICAgICB0aGlzLl9mb2xkZXJTZXJ2aWNlLmdldFNlcnZpY2VGb2xkZXJJZCh7XHJcbiAgICAgICAgICAgICAgICBzZXJ2aWNlQ29kZTogdGhpcy5zZXJ2aWNlQ29kZSxcclxuICAgICAgICAgICAgICAgIGVudGl0eTogdGhpcy5lbnRpdHksXHJcbiAgICAgICAgICAgICAgICBlbnRpdHlLZXk6IHRoaXMuX2VudGl0eUtleSxcclxuICAgICAgICAgICAgfSBhcyBTZXJ2aWNlUmVxdWVzdE1vZGVsKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4ocnMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3VubWFya0xvYWRpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocnMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJvb3RGb2xkZXJJZCA9IHJzLmRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwucmVhZHkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEZvbGRlckNvbnRlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzZXREYXRhKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NydWRTZXJ2aWNlLnByb2Nlc3NFcnJvclJlc3BvbnNlKHJzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdDw7MgbOG7l2kgeOG6o3kgcmEga2hpIGzhuqV5IHRoxrAgbeG7pWMgZ+G7kWMhJyk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwucmVhZHkgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmdldEZvbGRlckNvbnRlbnQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXREYXRhKCkge1xyXG4gICAgICAgIHRoaXMucm9vdEZvbGRlcklkID0gbnVsbDtcclxuICAgICAgICB0aGlzLmRhdGEuYnJlYWRjcnVtYnMgPSBbXTtcclxuICAgICAgICB0aGlzLl9kYXRhU291cmNlID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgc2V0RGF0YUZyb21GaWxlRGF0YVNlcnZpY2UoZGF0YSkge1xyXG4gICAgICAgIHRoaXMuc2V0Um9vdEZvbGRlcklkKGRhdGEuZm9sZGVySWQpO1xyXG4gICAgICAgIHRoaXMuc2V0RGF0YXNvdXJjZShkYXRhLmxzdEZpbGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFJvb3RGb2xkZXJJZChyb290Rm9sZGVySWQ6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMucm9vdEZvbGRlcklkID0gcm9vdEZvbGRlcklkO1xyXG4gICAgICAgIHRoaXMuZGF0YS5jdXJyZW50Rm9sZGVySWQgPSB0aGlzLnJvb3RGb2xkZXJJZDtcclxuICAgIH1cclxuXHJcbiAgICBzZXREYXRhc291cmNlKGRhdGFTb3VyY2U6IGFueVtdID0gW10pIHtcclxuICAgICAgICB0aGlzLl9kYXRhU291cmNlID0gZGF0YVNvdXJjZTtcclxuICAgICAgICB0aGlzLl9vbGRWYWx1ZSA9IHRoaXMuX3ZhbHVlO1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gW107XHJcbiAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICB2YWx1ZS5wdXNoKGl0ZW0uaWQpO1xyXG4gICAgICAgICAgICBpZiAoaXRlbS5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtLm5hbWVXaXRob3V0RXh0ZW5zaW9uID0gaXRlbS5uYW1lO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBpdGVtLm5hbWUubGFzdEluZGV4T2YoJy4nKTtcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5uYW1lV2l0aG91dEV4dGVuc2lvbiA9IGl0ZW0ubmFtZS5zdWJzdHJpbmcoMCwgaW5kZXgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uZXh0ZW5zaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5leHRlbnNpb24gPSBpdGVtLmV4dGVuc2lvbi50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaXRlbS5pc0ZpbGUgPSBpdGVtLmZpbGVFeHBsb3Jlckl0ZW1UeXBlID09IEZpbGVFeHBsb3Jlckl0ZW1UeXBlLkZpbGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIGlmICh0aGlzLl9vbGRWYWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmIChKU09OLnN0cmluZ2lmeSh0aGlzLl9vbGRWYWx1ZSkgIT0gSlNPTi5zdHJpbmdpZnkodGhpcy5fdmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmVFdmVudENoYW5nZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fdmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5maXJlRXZlbnRDaGFuZ2UoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm1vZGVsLnJlYWR5ID0gdHJ1ZTtcclxuICAgICAgICBpZiAoIXRoaXMuX2hhc0xvYWRlZFNvdXJjZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9oYXNMb2FkZWRTb3VyY2UgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm9uUmVhZHkuZW1pdCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmaXJlRXZlbnRDaGFuZ2UoKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMuX3ZhbHVlKTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlZC5lbWl0KHRoaXMuX3ZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBpbml0R3JpZCgpIHtcclxuICAgICAgICB0aGlzLnNldHRpbmcubXVsdGlwbGVDaGVja1doZW5DbGlja1JvdyA9IHRoaXMubXVsdGlwbGVDaGVja1doZW5DbGlja1JvdztcclxuICAgICAgICB0aGlzLnNldHRpbmcubW9kZWxTY2hlbWFzID0gW1xyXG4gICAgICAgICAgICBuZXcgTW9kZWxTY2hlbWEoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICduYW1lJyxcclxuICAgICAgICAgICAgICAgIG5hbWU6ICdUw6puIHTDoGkgbGnhu4d1JyxcclxuICAgICAgICAgICAgICAgIGZ1bGxOYW1lOiAnVMOqbiB0w6BpIGxp4buHdScsXHJcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1TDqm4gdMOgaSBsaeG7h3UnLFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgbmV3IE1vZGVsU2NoZW1hKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkOiAnZmlsZVNpemUnLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogJ0vDrWNoIHRoxrDhu5tjJyxcclxuICAgICAgICAgICAgICAgIGZ1bGxOYW1lOiAnS8OtY2ggdGjGsOG7m2MnLFxyXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdLw61jaCB0aMaw4bubYycsXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBuZXcgTW9kZWxTY2hlbWEoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdjcmVhdGVkJyxcclxuICAgICAgICAgICAgICAgIG5hbWU6ICdOZ8OgeSB04bqhbycsXHJcbiAgICAgICAgICAgICAgICBmdWxsTmFtZTogJ05nw6B5IHThuqFvJyxcclxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnTmfDoHkgdOG6oW8nLFxyXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdkYXRldGltZScsXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBuZXcgTW9kZWxTY2hlbWEoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdjdXJyZW50RmlsZVZlcnNpb24nLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogJ1BoacOqbiBi4bqjbicsXHJcbiAgICAgICAgICAgICAgICBmdWxsTmFtZTogJ1BoacOqbiBi4bqjbicsXHJcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1BoacOqbiBi4bqjbicsXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBuZXcgTW9kZWxTY2hlbWEoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdmdW5jdGlvbicsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiAnQ2jhu6ljIG7Eg25nJyxcclxuICAgICAgICAgICAgICAgIGZ1bGxOYW1lOiAnQ2jhu6ljIG7Eg25nJyxcclxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQ2jhu6ljIG7Eg25nJyxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHMgPSBbXHJcbiAgICAgICAgICAgIG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkOiAnbmFtZScsXHJcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2V4cGxvcmVySXRlbScsXHJcbiAgICAgICAgICAgICAgICBzb3J0OiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6ICdhdXRvJyxcclxuICAgICAgICAgICAgICAgIGZ1bGxUZXh0U2VhcmNoOiB0cnVlLFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgbmV3IENvbHVtblNjaGVtYUJhc2Uoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdmaWxlU2l6ZScsXHJcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2ZpbGVTaXplJyxcclxuICAgICAgICAgICAgICAgIHNvcnQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogJzllbScsXHJcbiAgICAgICAgICAgICAgICB0ZXh0QWxpZ246IDEsXHJcbiAgICAgICAgICAgICAgICBhbGxvd0ZpbHRlcjogZmFsc2UsXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2NyZWF0ZWQnLFxyXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdkYXRldGltZScsXHJcbiAgICAgICAgICAgICAgICBzb3J0OiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcxMGVtJ1xyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgbmV3IENvbHVtblNjaGVtYUJhc2Uoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdjdXJyZW50RmlsZVZlcnNpb24nLFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6ICc4ZW0nLFxyXG4gICAgICAgICAgICAgICAgdGV4dEFsaWduOiAxLFxyXG4gICAgICAgICAgICAgICAgYWxsb3dGaWx0ZXI6IGZhbHNlXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdFNldHRpbmcoKTtcclxuICAgIH1cclxuXHJcbiAgICBpbml0U2V0dGluZygpIHtcclxuICAgICAgICB0aGlzLnNldHRpbmcuaGVpZ2h0VHlwZSA9IEhlaWdodFR5cGUuZHluYW1pYztcclxuICAgICAgICB0aGlzLnNldHRpbmcuaGlkZGVuRmlsdGVyUm93ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UgPSB0aGlzLl9mb2xkZXJTZXJ2aWNlO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5oaWRkZW5TZXR0aW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNldHRpbmcuaGlkZGVuU2V0dGluZ1dvcmtmbG93ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNldHRpbmcuaGlkZGVuU2V0dGluZ1Blcm1pc3Npb24gPSB0cnVlO1xyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnVzZVdvcmtmbG93ID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIEZvcm1zLlxyXG4gICAgaW5pdEZvcm1zKCkge1xyXG4gICAgICAgIHRoaXMuZm9ybXNbdGhpcy5mb3JtSWRzLmNyZWF0ZUZvbGRlcl0gPSB7XHJcbiAgICAgICAgICAgIGhlYWRlcjogJ1ThuqFvIG3hu5tpIHRoxrAgbeG7pWMnLFxyXG4gICAgICAgICAgICBzaG93OiBmYWxzZSxcclxuICAgICAgICAgICAgZm9ybURhdGE6IG5ldyBDcnVkRm9ybURhdGEoKSxcclxuICAgICAgICAgICAgcG9wdXBTaXplOiBuZXcgUG9wdXBTaXplKHtcclxuICAgICAgICAgICAgICAgIHdpZHRoOiA0MDAsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDIwMCxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5mb3Jtc1t0aGlzLmZvcm1JZHMucmVuYW1lRmlsZV0gPSB7XHJcbiAgICAgICAgICAgIGhlYWRlcjogJ8SQ4buVaSB0w6puIHThu4dwJyxcclxuICAgICAgICAgICAgc2hvdzogZmFsc2UsXHJcbiAgICAgICAgICAgIGZvcm1EYXRhOiBuZXcgQ3J1ZEZvcm1EYXRhKCksXHJcbiAgICAgICAgICAgIHBvcHVwU2l6ZTogbmV3IFBvcHVwU2l6ZSh7XHJcbiAgICAgICAgICAgICAgICB3aWR0aDogNDAwLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAyMDAsXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuZm9ybXNbdGhpcy5mb3JtSWRzLmZpbGVWaWV3ZXJdID0ge1xyXG4gICAgICAgICAgICBzaG93OiBmYWxzZSxcclxuICAgICAgICAgICAgZm9ybURhdGE6IHt9LFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuZm9ybXNbdGhpcy5mb3JtSWRzLmZpbGVWZXJzaW9uTGlzdF0gPSB7XHJcbiAgICAgICAgICAgIGhlYWRlcjogJ0Rhbmggc8OhY2ggcGhpw6puIGLhuqNuJyxcclxuICAgICAgICAgICAgc2hvdzogZmFsc2UsXHJcbiAgICAgICAgICAgIGZpbGVJZDogbnVsbCxcclxuICAgICAgICAgICAgcG9wdXBTaXplOiBuZXcgUG9wdXBTaXplKHtcclxuICAgICAgICAgICAgICAgIG1heGltaXplOiB0cnVlLFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmZvcm1zW3RoaXMuZm9ybUlkcy5zaWduYXR1cmVEZXRhaWxdID0ge1xyXG4gICAgICAgICAgICBoZWFkZXI6ICdUaMO0bmcgdGluIGNo4buvIGvDvSBz4buRJyxcclxuICAgICAgICAgICAgc2hvdzogZmFsc2UsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5mb3Jtc1t0aGlzLmZvcm1JZHMua3lTb1NpbV0gPSB7XHJcbiAgICAgICAgICAgIGhlYWRlcjogJ0vDvSBz4buRIHNpbScsXHJcbiAgICAgICAgICAgIHNob3c6IGZhbHNlLFxyXG4gICAgICAgICAgICBwb3B1cFNpemU6IG5ldyBQb3B1cFNpemUoe1xyXG4gICAgICAgICAgICAgICAgbWF4aW1pemU6IHRydWUsXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgb25TYXZlZEZvcm0oZm9ybUlkKSB7XHJcbiAgICAgICAgdGhpcy5mb3Jtc1tmb3JtSWRdLnNob3cgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl90cmlnZ2VyUHJvY2Vzc0RhdGEoKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNhbmNlbEZvcm0oZm9ybUlkKSB7XHJcbiAgICAgICAgdGhpcy5mb3Jtc1tmb3JtSWRdLnNob3cgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93Q29udGV4dE1lbnUoZXZ0LCBpdGVtKSB7XHJcbiAgICAgICAgaWYgKGl0ZW0uaXNGaWxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YS5pdGVtc01lbnVGaWxlID0gW1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnWGVtIHRy4buxYyB0dXnhur9uJywgaWNvbjogJ2ZhcyBmYS1leWUnLCBjb21tYW5kOiAoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuT2JqZWN0KGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogKHRoaXMuX2RldmljZURldGVjdG9yU2VydmljZS5pc0Rlc2t0b3AoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiAhKHRoaXMubGF5b3V0U2ltcGxlQWxsICYmIHRoaXMucmVhZG9ubHkpKSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdLw70gc+G7kSBjw6EgbmjDom4gKFNJTSknLFxyXG4gICAgICAgICAgICAgICAgICAgIGljb246ICdmYXMgZmEtc2ltLWNhcmQnLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaWduS3lTaW1GaWxlKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogKHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmlzVHlwZUZpbGVLeVNvKGl0ZW0ubmFtZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy5sYXlvdXQgIT09IEVudW1GaWxlTGF5b3V0LlNJTVBMRV9GT1JfTElTVCksXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnS8O9IHPhu5EgY8OhIG5ow6JuIChVU0IpJywgaWNvbjogJ2ZhcyBmYS1zaWduYXR1cmUnLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaWduRmlsZShpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHZpc2libGU6ICh0aGlzLl9maWxlT2JqZWN0U2VydmljZS5pc1R5cGVGaWxlS3lTbyhpdGVtLm5hbWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIHRoaXMuX2RldmljZURldGVjdG9yU2VydmljZS5pc0Rlc2t0b3AoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLmxheW91dCAhPT0gRW51bUZpbGVMYXlvdXQuU0lNUExFX0ZPUl9MSVNUKSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdLw70gc+G7kSDEkcahbiB24buLIChVU0IpJywgaWNvbjogJ2ZhcyBmYS1zaWduYXR1cmUnLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaWduRmlsZURvblZpKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogKHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmlzVHlwZUZpbGVLeVNvKGl0ZW0ubmFtZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy5fZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLmlzRGVza3RvcCgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIHRoaXMubGF5b3V0ICE9PSBFbnVtRmlsZUxheW91dC5TSU1QTEVfRk9SX0xJU1QpLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ1ThuqNpIHbhu4EnLCBpY29uOiAnZmFzIGZhLWRvd25sb2FkJywgY29tbWFuZDogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRvd25sb2FkKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogISh0aGlzLmxheW91dCA9PT0gRW51bUZpbGVMYXlvdXQuU0lNUExFICYmIHRoaXMucmVhZG9ubHkpLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ1NhbyBjaMOpcCDEkcaw4budbmcgZOG6q24nLCBpY29uOiAnZmFzIGZhLWxpbmsnLCBjb21tYW5kOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29weURvd25sb2FkTGluayhpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHZpc2libGU6ICEodGhpcy5sYXlvdXRTaW1wbGVBbGwgJiYgdGhpcy5yZWFkb25seSksXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnxJDhu5VpIHTDqm4nLCBpY29uOiAnZmFzIGZhLWVyYXNlcicsIGNvbW1hbmQ6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5hbWVGaWxlKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogIXRoaXMuY2hlY2tJc1JlYWRPbmx5KClcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdYZW0gY8OhYyBwaGnDqm4gYuG6o24ga2jDoWMnLCBpY29uOiAnZmFzIGZhLWhpc3RvcnknLCBjb21tYW5kOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3BlbkZpbGVWZXJzaW9ucyhpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHZpc2libGU6ICF0aGlzLmNoZWNrSXNSZWFkT25seSgpXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnWMOzYSB04buHcCB0aW4nLCBpY29uOiAnZmFyIGZhLXRyYXNoLWFsdCcsIGNvbW1hbmQ6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWxldGVGaWxlKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogIXRoaXMuY2hlY2tJc1JlYWRPbmx5KClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YS5pdGVtc01lbnVGaWxlID0gW3tcclxuICAgICAgICAgICAgICAgIGxhYmVsOiAnVOG6o2kgduG7gScsIGljb246ICdmYXMgZmEtZG93bmxvYWQnLCBjb21tYW5kOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kb3dubG9hZChpdGVtKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGxhYmVsOiAnWMOzYSB0aMawIG3hu6VjJywgaWNvbjogJ2ZhciBmYS10cmFzaC1hbHQnLCBjb21tYW5kOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWxldGVGb2xkZXIoaXRlbSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgdmlzaWJsZTogIXRoaXMuY2hlY2tJc1JlYWRPbmx5KClcclxuICAgICAgICAgICAgfV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHNldCB0aW1lIG91dCDEkeG7gyBmaXggYnVnIHJlbmRlciBjb250ZXh0IG1lbnUgcmEgdHLDoG4gcmEgbmdvw6BpIG3DoG4gaMOsbmhcclxuICAgICAgICAvLyBDw7MgbOG6vSB2w6wgdGjhu51pIMSRaeG7g20gcHJpbWVuZyB0w61uaCB24buLIHRyw60gY+G7p2EgY29udGV4dCBtZW51IGzDoCB0csaw4bubYyBraGkgcmVuZGVyIGjhur90IGPDoWMgcm93IHRyb25nIGNvbnRleHQgbWVudVxyXG4gICAgICAgIHNldFRpbWVvdXQoZiA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGV4dE1lbnUuc2hvdyhldnQpO1xyXG4gICAgICAgIH0sIDEwMCk7XHJcbiAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGNoZWNrSXNSZWFkT25seSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZWFkb25seSB8fCB0aGlzLmJhc2VQZXJtaXNzaW9uID09IFBlcm1pc3Npb25CYXNlLlJFQUQ7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlQ2xpY2tGaWxlTmFtZShpdGVtKSB7XHJcbiAgICAgICAgaWYgKCFpdGVtLmNhblZpZXdPbmxpbmUpIHtcclxuICAgICAgICAgICAgdGhpcy5kb3dubG9hZChpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMub3Blbk9iamVjdChpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbW9kaWZ5R3JpZEluZm8oZ3JpZEluZm86IEdyaWRJbmZvKSB7XHJcbiAgICAgICAgZ3JpZEluZm8uZmlsdGVycy5zcGxpY2UoMCwgMCwgdGhpcy5uZXdGaWx0ZXIoJ3BhcmVudEZvbGRlcklkJywgT3BlcmF0b3IuZXF1YWwsIHRoaXMuZGF0YS5jdXJyZW50Rm9sZGVySWQpKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBhZnRlckdldERhdGEoKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMubW9kZWwuZGF0YVNvdXJjZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fZmlsZUV4cGxvcmVyU2VydmljZS5zdXBwb3J0RGlnaXRhbFNpZ25hdHVyZShpdGVtLm5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9maWxlRXhwbG9yZXJTZXJ2aWNlLmdldFNpZ25hdHVyZUluZm9CeUZpbGVJZChpdGVtLmlkKS50aGVuKHJzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocnMuc3VjY2VzcyAmJiBycy5kYXRhPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5zaWduYXR1cmVzID0gcnMuZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5sYXN0U2lnbmF0dXJlID0gcnMuZGF0YVtycy5kYXRhLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoaXRlbS5maWxlRXhwbG9yZXJJdGVtVHlwZSA9PT0gRmlsZUV4cGxvcmVySXRlbVR5cGUuRm9sZGVyKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtLmNsYXNzID0gJyc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGl0ZW0uZXh0ZW5zaW9uKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtLmltYWdlSWNvbiA9IGAvYXNzZXRzL2ltYWdlcy9maWxlLWV4dC9pY29uJHtpdGVtLmV4dGVuc2lvbi50b0xvd2VyQ2FzZSgpfS5wbmdgO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpdGVtLmNhblZpZXdPbmxpbmUgPSB0aGlzLl9maWxlRXhwbG9yZXJOZXdTZXJ2aWNlLmlzU3VwcG9ydGVkVmlld09ubGluZShpdGVtLm5hbWUpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFpdGVtLmV4dGVuc2lvbiB8fCBpdGVtLmV4dGVuc2lvbi5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLm5hbWUubGFzdEluZGV4T2YoJy4nKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5leHRlbnNpb24gPSBpdGVtLm5hbWUuc3Vic3RyaW5nKGl0ZW0ubmFtZS5sYXN0SW5kZXhPZignLicpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5jb250cm9sKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbCA9IG5ldyBGaWxlTWFuYWdlckNvbnRyb2xTY2hlbWEoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmRhdGFUeXBlKSB7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB0aGlzLm1vZGVsLmRhdGFTb3VyY2UpIHtcclxuICAgICAgICAgICAgICAgIGlmICghZWxlbWVudC5leHRlbnNpb24gfHwgZWxlbWVudC5leHRlbnNpb24ubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5uYW1lLmxhc3RJbmRleE9mKCcuJykgIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZXh0ZW5zaW9uID0gZWxlbWVudC5uYW1lLnN1YnN0cmluZyhlbGVtZW50Lm5hbWUubGFzdEluZGV4T2YoJy4nKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzd2l0Y2ggKHRoaXMuZGF0YVR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBGaWxlVHlwZS5WSURFTzoge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLmFjY2VwdCA9ICcuTVA0LC5NT1YsLkFWSSwuRkxWLC5XTVYnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5kYXRhU291cmNlID0gdGhpcy5tb2RlbC5kYXRhU291cmNlLmZpbHRlcih4ID0+ICh4LmV4dGVuc2lvbiA9PSBudWxsIHx8IHguZXh0ZW5zaW9uLnRvVXBwZXJDYXNlKCkgPT0gJy5NUDQnIHx8IHguZXh0ZW5zaW9uLnRvVXBwZXJDYXNlKCkgPT0gJy5NT1YnIHx8IHguZXh0ZW5zaW9uLnRvVXBwZXJDYXNlKCkgPT0gJy5BVkknIHx8IHguZXh0ZW5zaW9uLnRvVXBwZXJDYXNlKCkgPT0gJy5GTFYnIHx8IHguZXh0ZW5zaW9uLnRvVXBwZXJDYXNlKCkgPT0gJy5XTVYnKSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIEZpbGVUeXBlLklNQUdFOiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wuYWNjZXB0ID0gJy5KUEcsLkpQRUcsLlBORyc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmRhdGFTb3VyY2UgPSB0aGlzLm1vZGVsLmRhdGFTb3VyY2UuZmlsdGVyKHggPT4gKHguZXh0ZW5zaW9uID09IG51bGwgfHwgeC5leHRlbnNpb24udG9VcHBlckNhc2UoKSA9PSAnLkpQRycgfHwgeC5leHRlbnNpb24udG9VcHBlckNhc2UoKSA9PSAnLkpQRUcnIHx8IHguZXh0ZW5zaW9uLnRvVXBwZXJDYXNlKCkgPT0gJy5QTkcnKSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIEZpbGVUeXBlLkRPQzoge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLmFjY2VwdCA9ICcuRE9DLC5ET0NYLC5QREYsLlhMUywuWExTWCc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmRhdGFTb3VyY2UgPSB0aGlzLm1vZGVsLmRhdGFTb3VyY2UuZmlsdGVyKHggPT4gKHguZXh0ZW5zaW9uID09IG51bGwgfHwgeC5leHRlbnNpb24udG9VcHBlckNhc2UoKSA9PSAnLkRPQycgfHwgeC5leHRlbnNpb24udG9VcHBlckNhc2UoKSA9PSAnLkRPQ1gnIHx8IHguZXh0ZW5zaW9uLnRvVXBwZXJDYXNlKCkgPT0gJy5QREYnIHx8IHguZXh0ZW5zaW9uLnRvVXBwZXJDYXNlKCkgPT0gJy5YTFMnIHx8IHguZXh0ZW5zaW9uLnRvVXBwZXJDYXNlKCkgPT0gJy5YTFNYJykpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBGaWxlVHlwZS5BVURJTzoge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLmFjY2VwdCA9ICcuTVAzLC5XQVYsLk00QSc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmRhdGFTb3VyY2UgPSB0aGlzLm1vZGVsLmRhdGFTb3VyY2UuZmlsdGVyKHggPT4gKHguZXh0ZW5zaW9uID09IG51bGwgfHwgeC5leHRlbnNpb24udG9VcHBlckNhc2UoKSA9PSAnLk1QMycgfHwgeC5leHRlbnNpb24udG9VcHBlckNhc2UoKSA9PSAnLldBVicgfHwgeC5leHRlbnNpb24udG9VcHBlckNhc2UoKSA9PSAnLk00QScpKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldERhdGFzb3VyY2UodGhpcy5tb2RlbC5kYXRhU291cmNlKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLl91bnN1YmNyaWJsZUFsbC5uZXh0KDEpO1xyXG4gICAgICAgIHRoaXMuX3Vuc3ViY3JpYmxlQWxsLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuZmlsZURhdGFTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsZURhdGFTZXJ2aWNlLnVucmVnaXN0ZXIodGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucm9vdENvbnRleHQudW5TdWJzY3JpYmUoJ0t5U29TaW1UaGFuaENvbmcnKTtcclxuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vID4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4gRlVOQ1RJT04gQ09MVU1OIE1BTlVMQVRJT04uXHJcbiAgICBnZXRCdXR0b25JY29uKGV4cGxvcmVySXRlbSkge1xyXG4gICAgICAgIGlmIChleHBsb3Jlckl0ZW0uaXNGaWxlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9kZXZpY2VEZXRlY3RvclNlcnZpY2UuaXNEZXNrdG9wKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAncGkgcGktcGVuY2lsJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAncGkgcGktZXllJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuICdwaSBwaS1wZW5jaWwnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRCdXR0b25Ub29sdGlwKGV4cGxvcmVySXRlbSkge1xyXG4gICAgICAgIGlmIChleHBsb3Jlckl0ZW0uaXNGaWxlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9kZXZpY2VEZXRlY3RvclNlcnZpY2UuaXNEZXNrdG9wKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnQ2jhu4luaCBz4butYSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1hlbSB0cuG7sWMgdHV54bq/bic7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnxJDhu5VpIHTDqm4nO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkJ1dHRvbkNsaWNrKGV4cGxvcmVySXRlbSkge1xyXG4gICAgICAgIGlmIChleHBsb3Jlckl0ZW0uaXNGaWxlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9kZXZpY2VEZXRlY3RvclNlcnZpY2UuaXNEZXNrdG9wKCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZWRpdEZpbGUoZXhwbG9yZXJJdGVtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub3Blbk9iamVjdChleHBsb3Jlckl0ZW0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnJlbmFtZUZvbGRlcihleHBsb3Jlckl0ZW0uaWQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRNZW51SXRlbXMoZXhwbG9yZGVySXRlbSkge1xyXG4gICAgICAgIHJldHVybiBleHBsb3JkZXJJdGVtLmlzRmlsZSA/IHRoaXMuZGF0YS5pdGVtc01lbnVGaWxlIDogdGhpcy5kYXRhLml0ZW1zTWVudUZvbGRlcjtcclxuICAgIH1cclxuXHJcbiAgICBvbkRyb3Bkb3duQ2xpY2soZXhwbG9yZXJJdGVtKSB7XHJcbiAgICAgICAgaWYgKGV4cGxvcmVySXRlbS5pc0ZpbGUpIHtcclxuICAgICAgICAgICAgY29uc3Qga3lTb0l0ZW0gPSB0aGlzLmRhdGEuaXRlbXNNZW51RmlsZS5maW5kKHggPT4geC5sYWJlbC50b0xvd2VyQ2FzZSgpID09ICdLw70gc+G7kScpO1xyXG4gICAgICAgICAgICBpZiAoa3lTb0l0ZW0pIHtcclxuICAgICAgICAgICAgICAgIGt5U29JdGVtLnZpc2libGUgPSB0aGlzLl9maWxlRXhwbG9yZXJTZXJ2aWNlLnN1cHBvcnREaWdpdGFsU2lnbmF0dXJlKGV4cGxvcmVySXRlbS5uYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5kYXRhLnNlbGVjdGVkRXhwbG9yZXJJdGVtID0gZXhwbG9yZXJJdGVtO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyA+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+IEZJTEUgTUFOVUxBVElPTi5cclxuICAgIC8vIFThuqNpIGzDqm4gZmlsZS5cclxuICAgIG9uU2VsZWN0RmlsZSgpIHtcclxuICAgICAgICB0aGlzLmZpbGVDb250cm9sLnVwbG9hZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQmVmb3JlVXBsb2FkKGV2dCkge1xyXG4gICAgICAgIHRoaXMuX21hcmtMb2FkaW5nKCk7XHJcbiAgICAgICAgZXZ0LmZvcm1EYXRhLmFwcGVuZCgnc2VydmljZUNvZGUnLCB0aGlzLnNlcnZpY2VDb2RlKTtcclxuICAgICAgICBldnQuZm9ybURhdGEuYXBwZW5kKCdlbnRpdHknLCB0aGlzLmVudGl0eSk7XHJcbiAgICAgICAgZXZ0LmZvcm1EYXRhLmFwcGVuZCgnZW50aXR5S2V5JywgdGhpcy5fZW50aXR5S2V5KTtcclxuICAgICAgICBldnQuZm9ybURhdGEuYXBwZW5kKCdmb2xkZXJJZCcsIHRoaXMuZGF0YS5jdXJyZW50Rm9sZGVySWQpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uVXBsb2FkUHJvZ3Jlc3MoZXZ0KSB7XHJcbiAgICAgICAgdGhpcy5wcm9ncmVzc1ZhbHVlID0gZXZ0LnByb2dyZXNzO1xyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZVNlbGVjdEZpbGUoZXZ0KSB7XHJcbiAgICAgICAgaWYgKGV2dC5lcnJvck1lc3NhZ2VzICYmIGV2dC5lcnJvck1lc3NhZ2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKFxyXG4gICAgICAgICAgICAgICAgZXZ0LmVycm9yTWVzc2FnZXMubWFwKGl0ZW0gPT4gYCR7aXRlbS5zdW1tYXJ5fSR7aXRlbS5kZXRhaWx9YCkuam9pbignOyAnKSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25VcGxvYWRlZChldnQpIHtcclxuICAgICAgICB0aGlzLl90cmlnZ2VyUHJvY2Vzc0RhdGEoKTtcclxuICAgICAgICB0aGlzLl9tYXJrTG9hZGluZygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIMSQ4buVaSB0w6puIGZpbGUuXHJcbiAgICByZW5hbWVGaWxlKGl0ZW0pIHtcclxuICAgICAgICB0aGlzLmZvcm1zLnJlbmFtZUZpbGUuaGVhZGVyID0gJ8SQ4buVaSB0w6puIHRoxrAgbeG7pWMnO1xyXG4gICAgICAgIHRoaXMuZm9ybXMucmVuYW1lRmlsZS5mb3JtRGF0YSA9IHtcclxuICAgICAgICAgICAgZm9ybVN0YXRlOiBGb3JtU3RhdGUuRURJVCxcclxuICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgc2VydmljZUNvZGU6IHRoaXMuc2VydmljZUNvZGUsXHJcbiAgICAgICAgICAgICAgICBlbnRpdHk6IHRoaXMuZW50aXR5LFxyXG4gICAgICAgICAgICAgICAgZW50aXR5S2V5OiB0aGlzLl9lbnRpdHlLZXksXHJcbiAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuZm9ybXMucmVuYW1lRmlsZS5zaG93ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBYw7NhIGZpbGUuXHJcbiAgICBkZWxldGVGaWxlKGV4cGxvcmVySXRlbTogRmlsZUV4cGxvcmVySXRlbSkge1xyXG4gICAgICAgIHRoaXMuZGVsZXRlTXV0aXBsZShbZXhwbG9yZXJJdGVtXSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vID4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4gRk9MREVSIE1BTlVMQVRJT04uXHJcbiAgICAvLyBU4bqhbyB0aMawIG3hu6VjLlxyXG4gICAgY3JlYXRlRm9sZGVyKCkge1xyXG4gICAgICAgIHRoaXMuZm9ybXMuY3JlYXRlRm9sZGVyLmZvcm1EYXRhID0ge1xyXG4gICAgICAgICAgICBmb3JtU3RhdGU6IEZvcm1TdGF0ZS5BREQsXHJcbiAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgIHNlcnZpY2VDb2RlOiB0aGlzLnNlcnZpY2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgZW50aXR5OiB0aGlzLmVudGl0eSxcclxuICAgICAgICAgICAgICAgIGVudGl0eUtleTogdGhpcy5fZW50aXR5S2V5LFxyXG4gICAgICAgICAgICAgICAgcGFyZW50Rm9sZGVySWQ6IHRoaXMuZGF0YS5jdXJyZW50Rm9sZGVySWQsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmZvcm1zLmNyZWF0ZUZvbGRlci5zaG93ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBN4bufIHRoxrAgbeG7pWMvIGNsaWNrIHRoxrAgbeG7pWMuXHJcbiAgICBnZXRGb2xkZXJDb250ZW50KGN1cnJlbnRGb2xkZXJJZD86IHN0cmluZywgZ29JbnNpZGUgPSBmYWxzZSkge1xyXG4gICAgICAgIGN1cnJlbnRGb2xkZXJJZCA9IGN1cnJlbnRGb2xkZXJJZCB8fCB0aGlzLnJvb3RGb2xkZXJJZDtcclxuICAgICAgICB0aGlzLmRhdGEuY3VycmVudEZvbGRlcklkID0gY3VycmVudEZvbGRlcklkO1xyXG4gICAgICAgIHRoaXMuX3RyaWdnZXJQcm9jZXNzRGF0YSgpO1xyXG4gICAgICAgIHRoaXMuc2V0QnJlYWRjcnVtYnMoKTtcclxuICAgICAgICB0aGlzLnNldFZhbGlkYXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsaWRhdGUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGF0YS5jdXJyZW50Rm9sZGVySWQgIT0gdGhpcy5yb290Rm9sZGVySWQpIHtcclxuICAgICAgICAgICAgLy8gdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMuZGF0YS5jdXJyZW50Rm9sZGVySWQpO1xyXG4gICAgICAgICAgICAvLyB0aGlzLm9uQ2hhbmdlZC5lbWl0KHRoaXMuZGF0YS5jdXJyZW50Rm9sZGVySWQpO1xyXG4gICAgICAgICAgICAvLyB0aGlzLmZpcmVFdmVudENoYW5nZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyDEkOG7lWkgdMOqbiB0aMawIG3hu6VjLlxyXG4gICAgcmVuYW1lRm9sZGVyKGZvbGRlcklkOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmZvcm1zLmNyZWF0ZUZvbGRlci5oZWFkZXIgPSAnxJDhu5VpIHTDqm4gdGjGsCBt4bulYyc7XHJcbiAgICAgICAgdGhpcy5mb3Jtc1t0aGlzLmZvcm1JZHMuY3JlYXRlRm9sZGVyXS5mb3JtRGF0YSA9IHtcclxuICAgICAgICAgICAgZm9ybVN0YXRlOiBGb3JtU3RhdGUuRURJVCxcclxuICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgc2VydmljZUNvZGU6IHRoaXMuc2VydmljZUNvZGUsXHJcbiAgICAgICAgICAgICAgICBlbnRpdHk6IHRoaXMuZW50aXR5LFxyXG4gICAgICAgICAgICAgICAgZW50aXR5S2V5OiB0aGlzLl9lbnRpdHlLZXksXHJcbiAgICAgICAgICAgICAgICBpZDogZm9sZGVySWQsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmZvcm1zLmNyZWF0ZUZvbGRlci5zaG93ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBYw7NhIHRoxrAgbeG7pWMuXHJcbiAgICBkZWxldGVGb2xkZXIoZXhwbG9yZXJJdGVtOiBGaWxlRXhwbG9yZXJJdGVtKSB7XHJcbiAgICAgICAgdGhpcy5kZWxldGVNdXRpcGxlKFtleHBsb3Jlckl0ZW1dKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gPj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+PiBDT01NT04gRk9MREVSICYgRklMRSBNQU5VTEFUSU9OLlxyXG4gICAgLy8gTeG7nyB0aMawIG3hu6VjLyB04buHcC5cclxuICAgIGFzeW5jIG9wZW5PYmplY3QoZXhwbG9yZXJJdGVtOiBGaWxlRXhwbG9yZXJJdGVtKSB7XHJcbiAgICAgICAgaWYgKGV4cGxvcmVySXRlbS5pc0ZpbGUpIHtcclxuICAgICAgICAgICAgY29uc3QgY2FuVmlld09ubGluZSA9IHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmlzU3VwcG9ydGVkVmlld09ubGluZShleHBsb3Jlckl0ZW0ubmFtZSk7XHJcbiAgICAgICAgICAgIGlmIChjYW5WaWV3T25saW5lKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5GaWxlVmlld2VyKGV4cGxvcmVySXRlbSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRvd25sb2FkKGV4cGxvcmVySXRlbSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Rm9sZGVyQ29udGVudChleHBsb3Jlckl0ZW0uaWQsIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBYw7NhIG5oaeG7gXUgdGjGsCBt4bulYy8gdOG7h3AuXHJcbiAgICBkZWxldGVNdXRpcGxlKGl0ZW1zOiBGaWxlRXhwbG9yZXJJdGVtW10pIHtcclxuICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0RlbGV0ZUNvbmZpcm0oKVxyXG4gICAgICAgICAgICAudGhlbihycyA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXJzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fZm9sZGVyU2VydmljZS5kZWxldGVNdWx0aXBsZShpdGVtcylcclxuICAgICAgICAgICAgICAgICAgICAudGhlbihyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEZvbGRlckNvbnRlbnQodGhpcy5kYXRhLmN1cnJlbnRGb2xkZXJJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0RlbGV0ZURhdGFTdWNjZXNzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmdCeVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBU4bqjaSB0aMawIG3hu6VjLyB04buHcC5cclxuICAgIGFzeW5jIGRvd25sb2FkKGV4cGxvcmVySXRlbTogRmlsZUV4cGxvcmVySXRlbSkge1xyXG4gICAgICAgIGNvbnN0IG1vZGVsID0gdGhpcy5fZG93bmxvYWRMaW5rU2VydmljZS5nZXRHZW5lcmF0ZURvd25sb2FkTGlua01vZGVsKGV4cGxvcmVySXRlbSk7XHJcbiAgICAgICAgdGhpcy5fZG93bmxvYWRMaW5rU2VydmljZS5kb3dubG9hZExpbmsobW9kZWwpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNvcHlEb3dubG9hZExpbmsoZXhwbG9yZXJJdGVtOiBGaWxlRXhwbG9yZXJJdGVtKSB7XHJcbiAgICAgICAgY29uc3QgbW9kZWwgPSB0aGlzLl9kb3dubG9hZExpbmtTZXJ2aWNlLmdldEdlbmVyYXRlRG93bmxvYWRMaW5rTW9kZWwoZXhwbG9yZXJJdGVtKTtcclxuICAgICAgICB0aGlzLl9kb3dubG9hZExpbmtTZXJ2aWNlLmdlbmVyYXRlRG93bmxvYWRMaW5rKG1vZGVsKVxyXG4gICAgICAgICAgICAudGhlbihycyA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocnMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbW1vblNlcnZpY2UuY29weU1lc3NhZ2UodGhpcy5fZG93bmxvYWRMaW5rU2VydmljZS5nZXRBbm9ueW1vdXNEb3dubG9hZFVybChycy5kYXRhKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dTdWNjZXNzKCfEkMOjIHNhbyBjaMOpcCB2w6BvIGLhu5kgbmjhu5sgdOG6oW0uIMSQxrDhu51uZyBk4bqrbiBuw6B5IHPhur0gaOG6v3QgaOG6oW4gc2F1IDYwIGdpw6J5IScpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdLaMO0bmcgdGjhu4Mgc2FvIGNow6lwIGxpw6puIGvhur90IHThuqNpIHThu4dwIHRpbiEnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0tow7RuZyB0aOG7gyBzYW8gY2jDqXAgbGnDqm4ga+G6v3QgdOG6o2kgdOG7h3AgdGluIScpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBU4bqjaSBuaGnhu4F1IHRoxrAgbeG7pWMvIHThu4dwLlxyXG4gICAgYXN5bmMgZG93bmxvYWRNdWx0aXBsZSgpIHtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW1zID0gdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zO1xyXG4gICAgICAgIGNvbnN0IGhhc0l0ZW1zID0gc2VsZWN0ZWRJdGVtcyAmJiBzZWxlY3RlZEl0ZW1zLmxlbmd0aDtcclxuICAgICAgICBpZiAoaGFzSXRlbXMpIHtcclxuICAgICAgICAgICAgaWYgKHNlbGVjdGVkSXRlbXMubGVuZ3RoID09IDEpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZG93bmxvYWQoc2VsZWN0ZWRJdGVtc1swXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhcnJNb2RlbCA9IHNlbGVjdGVkSXRlbXMubWFwKGV4cGxvcmVySXRlbSA9PiB0aGlzLl9kb3dubG9hZExpbmtTZXJ2aWNlLmdldEdlbmVyYXRlRG93bmxvYWRMaW5rTW9kZWwoZXhwbG9yZXJJdGVtKSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9kb3dubG9hZExpbmtTZXJ2aWNlLmRvd25sb2FkTXVsdGlwbGUoYXJyTW9kZWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdlbmVyYXRlWmlwTGlua0FuZENvcHkoKSB7XHJcbiAgICAgICAgY29uc3QgYXJyTW9kZWwgPSB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMubWFwKHggPT4gdGhpcy5fZG93bmxvYWRMaW5rU2VydmljZS5nZXRHZW5lcmF0ZURvd25sb2FkTGlua01vZGVsKHgpKTtcclxuICAgICAgICB0aGlzLl9kb3dubG9hZExpbmtTZXJ2aWNlLmdlbmVyYXRlRG93bmxvYWRMaW5rTXVsdGlwbGUoYXJyTW9kZWwpLnRoZW4ocmVzID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcy5zdWNjZXNzICYmIHJlcy5kYXRhICYmIHJlcy5kYXRhICE9ICcnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jb21tb25TZXJ2aWNlLmNvcHlNZXNzYWdlKHRoaXMuX2Rvd25sb2FkTGlua1NlcnZpY2UuZ2V0QW5vbnltb3VzRG93bmxvYWRVcmwocmVzLmRhdGEpKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93U3VjY2VzcygnxJDDoyBzYW8gY2jDqXAgdsOgbyBi4buZIG5o4bubIHThuqFtLiDEkMaw4budbmcgZOG6q24gbsOgeSBz4bq9IGjhur90IGjhuqFuIHNhdSA2MCBnacOieSEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnS2jDtG5nIHRo4buDIHNhbyBjaMOpcCBsacOqbiBr4bq/dCB04bqjaSB04buHcCB0aW4hJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KS5jYXRjaChleCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGV4KTtcclxuICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdDw7MgduG6pW4gxJHhu4EgdHJvbmcgbMO6YyB04bqhbyBsaW5rIGNobyBmaWxlcycpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBvcGVuRmlsZVZpZXdlcihleHBsb3Jlckl0ZW06IEZpbGVFeHBsb3Jlckl0ZW0pIHtcclxuICAgICAgICB0aGlzLmZvcm1zLmZpbGVWaWV3ZXIuZm9ybURhdGEuZGF0YSA9IHtcclxuICAgICAgICAgICAgZmlsZUlkOiBleHBsb3Jlckl0ZW0uaWQsXHJcbiAgICAgICAgICAgIGlzRmlsZVZlcnNpb246IGZhbHNlLFxyXG4gICAgICAgICAgICBmaWxlTmFtZTogZXhwbG9yZXJJdGVtLm5hbWUsXHJcbiAgICAgICAgICAgIHNlcnZpY2U6IGV4cGxvcmVySXRlbS5zZXJ2aWNlQ29kZSxcclxuICAgICAgICAgICAgZW50aXR5OiBleHBsb3Jlckl0ZW0uZW50aXR5LFxyXG4gICAgICAgICAgICBlbnRpdHlLZXk6IGV4cGxvcmVySXRlbS5lbnRpdHlLZXksXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmZvcm1zLmZpbGVWaWV3ZXIuc2hvdyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2VGaWxlVmlld2VyKCkge1xyXG4gICAgICAgIHRoaXMuZm9ybXMuZmlsZVZpZXdlci5zaG93ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5nZXRGb2xkZXJDb250ZW50KHRoaXMuZGF0YS5jdXJyZW50Rm9sZGVySWQpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyA+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+TU9WRSBGSUxFUyAmIEZPTERFUlMuXHJcbiAgICBoYXNTZWxlY3QoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtc1xyXG4gICAgICAgICAgICAmJiB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMubGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENo4buNbiB0aMawIG3hu6VjLyBmaWxlIGRpIGNodXnhu4NuLlxyXG4gICAgY2FuU2VsZWN0KCkge1xyXG4gICAgICAgIHJldHVybiAhdGhpcy5kYXRhLm1vdmluZy5pc1NlbGVjdGluZ1xyXG4gICAgICAgICAgICAmJiB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXNcclxuICAgICAgICAgICAgJiYgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zLmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICBjYW5TZXRNb3ZlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEubW92aW5nLmlzU2VsZWN0aW5nXHJcbiAgICAgICAgICAgICYmIHRoaXMuZGF0YS5tb3Zpbmcuc2VsZWN0ZWRJdGVtc1xyXG4gICAgICAgICAgICAmJiB0aGlzLmRhdGEubW92aW5nLnNlbGVjdGVkSXRlbXMubGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgIG1vdmVFeHBsb3Jlckl0ZW1zKCkge1xyXG4gICAgICAgIGNvbnN0IGNhbk1vdmUgPSAhdGhpcy5kYXRhLm1vdmluZy5pc1NlbGVjdGluZ1xyXG4gICAgICAgICAgICAmJiB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXNcclxuICAgICAgICAgICAgJiYgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zLmxlbmd0aFxyXG4gICAgICAgICAgICAmJiB0aGlzLm1vZGVsLmRhdGFTb3VyY2VcclxuICAgICAgICAgICAgJiYgdGhpcy5tb2RlbC5kYXRhU291cmNlLmxlbmd0aDtcclxuXHJcbiAgICAgICAgaWYgKCFjYW5Nb3ZlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZGF0YS5tb3ZpbmcgPSB7XHJcbiAgICAgICAgICAgIGlzU2VsZWN0aW5nOiB0cnVlLFxyXG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW1zOiB0aGlzLl9jb21tb25TZXJ2aWNlLmNsb25lT2JqZWN0KHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcyksXHJcbiAgICAgICAgICAgIHNvdXJjZUZvbGRlcklkOiB0aGlzLmRhdGEuY3VycmVudEZvbGRlcklkLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVGjhuqMgdGjGsCBt4bulYy8gZmlsZS5cclxuICAgIHNldE1vdmVFeHBsb3Jlckl0ZW1zKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5kYXRhLm1vdmluZy5pc1NlbGVjdGluZykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBtb2RlbCA9IHtcclxuICAgICAgICAgICAgc291cmNlRm9sZGVySWQ6IHRoaXMuZGF0YS5tb3Zpbmcuc291cmNlRm9sZGVySWQsXHJcbiAgICAgICAgICAgIHRhcmdldEZvbGRlcklkOiB0aGlzLmRhdGEuY3VycmVudEZvbGRlcklkLFxyXG4gICAgICAgICAgICBsc3RGaWxlRXhwbG9yZXJJdGVtczogdGhpcy5kYXRhLm1vdmluZy5zZWxlY3RlZEl0ZW1zLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuX2ZvbGRlclNlcnZpY2UubW92ZUV4cGxvcmVySXRlbXMobW9kZWwpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRGb2xkZXJDb250ZW50KHRoaXMuZGF0YS5jdXJyZW50Rm9sZGVySWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuZGF0YS5jdXJyZW50Rm9sZGVySWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93U3VjY2VzcygnRGkgY2h1eeG7g24gdGjDoG5oIGPDtG5nJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhLm1vdmluZyA9IHt9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nQnlSZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIELhu48gZGkgY2h1eeG7g24uXHJcbiAgICBjYW5jZWxNb3ZlKCkge1xyXG4gICAgICAgIHRoaXMuZGF0YS5tb3ZpbmcgPSB7fTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gPj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+PlZFUlNJT04uXHJcbiAgICBvcGVuRmlsZVZlcnNpb25zKGZpbGU6IEZpbGVFeHBsb3Jlckl0ZW0pIHtcclxuICAgICAgICB0aGlzLmZvcm1zLmZpbGVWZXJzaW9uTGlzdC5maWxlSWQgPSBmaWxlLmlkO1xyXG5cclxuICAgICAgICB0aGlzLmZvcm1zLmZpbGVWZXJzaW9uTGlzdC5zaG93ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyA+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+VklFVyBPTkxJTkUuXHJcbiAgICBlZGl0RmlsZShmaWxlOiBGaWxlRXhwbG9yZXJJdGVtKSB7XHJcbiAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dTdWNjZXNzKCfEkGFuZyBr4bq/dCBu4buRaSBt4bufIOG7qW5nIGThu6VuZycpO1xyXG4gICAgICAgIHRoaXMuX2ZpbGVWZXJzaW9uU2VydmljZS5jcmVhdGVOZXdNaW5vclZlcnNpb24oZmlsZS5pZCwgJycsIGZhbHNlKVxyXG4gICAgICAgICAgICAudGhlbihyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlVmVyc2lvbiA9IDxGaWxlVmVyc2lvbkRUTz5yZXNwb25zZS5kYXRhO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZVVybCA9IHRoaXMuX2ZpbGVWZXJzaW9uU2VydmljZS5nZXRGaWxlVmVyc2lvbkRvd25sb2FkVXJsKGZpbGVWZXJzaW9uLmlkKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1hbmQgPSBuZXcgVG5DbGllbnRDb21tYW5kKCk7XHJcbiAgICAgICAgICAgICAgICBjb21tYW5kLmNvbW1hbmRUeXBlID0gQ29tbWFuZFR5cGUuRWRpdEZpbGU7XHJcbiAgICAgICAgICAgICAgICBjb21tYW5kLmtleSA9IHRoaXMuX2Vudmlyb25tZW50U2VydmljZS5nZXRTaWduYWxyX0NsaWVudEtleSgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZWRpdEZpbGVDb21tYW5kID0gbmV3IEVkaXRGaWxlQ29tbWFuZCgpO1xyXG4gICAgICAgICAgICAgICAgZWRpdEZpbGVDb21tYW5kLmZpbGVTZXJ2aWNlRW5kcG9pbnQgPSB0aGlzLl9lbnZpcm9ubWVudFNlcnZpY2UuZ2V0SHR0cFNlcnZpY2VFbmRwb2ludCgnZmlsZScpO1xyXG4gICAgICAgICAgICAgICAgZWRpdEZpbGVDb21tYW5kLnVwbG9hZEZpbGVBcGkgPSB0aGlzLl9maWxlVmVyc2lvblNlcnZpY2UuZ2V0VXBsb2FkRmlsZVZlcnNpb25BcGlVcmwoKTtcclxuICAgICAgICAgICAgICAgIGVkaXRGaWxlQ29tbWFuZC5yZW1vdmVGaWxlQXBpID0gdGhpcy5fZmlsZVZlcnNpb25TZXJ2aWNlLmdldFJlbW92ZUZpbGVWZXJzaW9uQXBpVXJsKCk7XHJcbiAgICAgICAgICAgICAgICBlZGl0RmlsZUNvbW1hbmQuZmlsZVVybCA9IGZpbGVVcmw7XHJcbiAgICAgICAgICAgICAgICBlZGl0RmlsZUNvbW1hbmQuaXNEcmFmdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBlZGl0RmlsZUNvbW1hbmQuZ3JvdXBGaWxlTmFtZSA9IGZpbGUubmFtZTtcclxuICAgICAgICAgICAgICAgIGVkaXRGaWxlQ29tbWFuZC5maWxlTmFtZSA9IGZpbGUubmFtZTtcclxuICAgICAgICAgICAgICAgIGVkaXRGaWxlQ29tbWFuZC52ZXJzaW9uID0gZmlsZVZlcnNpb24udmVyc2lvbk5hbWU7XHJcbiAgICAgICAgICAgICAgICBlZGl0RmlsZUNvbW1hbmQuZmlsZVZlcnNpb25JZCA9IGZpbGVWZXJzaW9uLmlkO1xyXG4gICAgICAgICAgICAgICAgZWRpdEZpbGVDb21tYW5kLmFjY2Vzc1Rva2VuID0gdGhpcy5fYXV0aGVuU2VydmljZS5nZXRBY2Nlc3NUb2tlbigpO1xyXG4gICAgICAgICAgICAgICAgY29tbWFuZC5kYXRhID0gZWRpdEZpbGVDb21tYW5kO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuX3RuQ2xpZW50U2VydmljZS5zZW5kQ29tbWFuZChjb21tYW5kKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zaWduYWxyU2VydmljZS51blN1YnNjcmliZVZpZXdDb2RlKG51bGwsICdGSUxFLlZFUlNJT04uVVBEQVRFRCcpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2lnbmFsclNlcnZpY2Uuc3RhcnQobnVsbCwgJ0ZJTEUuVkVSU0lPTi5VUERBVEVEJywgZGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG9iajogYW55O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIE9iamVjdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqID0gZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9iai5tZXNzYWdlLmNvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmogPSBKU09OLnBhcnNlKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2JqLk1lc3NhZ2UuQ29udGVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iaikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5nZXRMaXN0RmlsZXModGhpcy5kYXRhLmN1cnJlbnRGb2xkZXJJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChDb21tb25FcnJvckNvZGUuRVJST1JfU0VSVklDRV9OT1RfUlVOID09PSBlcnJvci5zdGF0dXMpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1Jlc3BvbnNlRXJyb3IoMCwgbnVsbCwgJ0ZpbGUnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmFkZCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldmVyaXR5OiAnZXJyb3InLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5OiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0ZJTEVfRVhQTE9SRVIuTUVTU0FHRV9FUlJPUl9IRUFERVInKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsOiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0ZJTEVfRVhQTE9SRVIuTUVTU0FHRV9FUlJPUl9ERVRBSUwnKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGlmZTogNTAwMCxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gPj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+PiBCUkVBRENSVU1CUy5cclxuICAgIGFzeW5jIHNldEJyZWFkY3J1bWJzKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmRhdGEuY3VycmVudEZvbGRlcklkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJzRm9sZGVyID0gYXdhaXQgdGhpcy5fZm9sZGVyU2VydmljZS5nZXREZXRhaWxXaXRoUGVybWlzc2lvbih0aGlzLmRhdGEuY3VycmVudEZvbGRlcklkKTtcclxuICAgICAgICAgICAgaWYgKHJzRm9sZGVyLmRhdGEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmFzZVBlcm1pc3Npb24gPSByc0ZvbGRlci5kYXRhLmJhc2VQZXJtaXNzaW9uO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHJzID0gYXdhaXQgdGhpcy5fZm9sZGVyU2VydmljZS5nZXRGdWxsRm9sZGVyUGF0aCh0aGlzLmRhdGEuY3VycmVudEZvbGRlcklkKTtcclxuICAgICAgICAgICAgaWYgKHJzLnN1Y2Nlc3MgJiYgcnMuZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJzLmRhdGEubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBicmVhZGNydW1icyA9IHJzLmRhdGEubWFwKGZvbGRlciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJyZWFkY3J1bWIgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogaW5kZXggPT0gMCA/IHRoaXMuZ2V0Um9vdEZvbGRlck5hbWUoZm9sZGVyLm5hbWUpIDogZm9sZGVyLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogZm9sZGVyLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVDbGFzczogZm9sZGVyLmlkICE9IHRoaXMuZGF0YS5jdXJyZW50Rm9sZGVySWQgPyAnZm0tY2xpY2thYmxlJyA6ICdmbS1jdXJyZW50LWZvbGRlcicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kOiAoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEZvbGRlckNvbnRlbnQoZm9sZGVyLmlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4Kys7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBicmVhZGNydW1iO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChicmVhZGNydW1icy5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnJlYWRjcnVtYnNbMF0ubGFiZWwgPT0gJ1RoxrAgbeG7pWMgxJHDrW5oIGvDqG0nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhZGNydW1icy5zcGxpY2UoMCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhLmJyZWFkY3J1bWJzID0gYnJlYWRjcnVtYnM7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEuYnJlYWRjcnVtYnMgPSBbXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5icmVhZGNydW1icyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY3J1ZFNlcnZpY2UucHJvY2Vzc0Vycm9yUmVzcG9uc2UocnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGEuYnJlYWRjcnVtYnMgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Um9vdEZvbGRlck5hbWUoZm9sZGVyTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgZm9sZGVyTmFtZVByZWZpeCA9ICdUaMawIG3hu6VjICc7XHJcbiAgICAgICAgbGV0IHR5cGVPZkZvbGRlciA9ICcnO1xyXG4gICAgICAgIGlmIChmb2xkZXJOYW1lLmluY2x1ZGVzKCd1c2VyLk15X0RvY3VtZW50LicpKSB7XHJcbiAgICAgICAgICAgIHR5cGVPZkZvbGRlciA9ICdj4bunYSB0w7RpJztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZm9sZGVyTmFtZS5pbmNsdWRlcygnY29uZ3ZpZWMnKSkge1xyXG4gICAgICAgICAgICB0eXBlT2ZGb2xkZXIgPSAnY8O0bmcgdmnhu4djJztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZm9sZGVyTmFtZS5pbmNsdWRlcygndmFuYmFuJykpIHtcclxuICAgICAgICAgICAgdHlwZU9mRm9sZGVyID0gJ3bEg24gYuG6o24nO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdHlwZU9mRm9sZGVyID0gJ8SRw61uaCBrw6htJztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGAke2ZvbGRlck5hbWVQcmVmaXh9JHt0eXBlT2ZGb2xkZXJ9YDtcclxuICAgIH1cclxuXHJcbiAgICAvLyA+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+IFNJR04uXHJcbiAgICAvLyBUT0RPOiBMxrB1IMO9IHjhu60gbMO9IHRyxrDhu51uZyBkb3VibGUgY2xpY2sgdsOgbyBuw7p0XHJcbiAgICBzaWduRmlsZShmaWxlOiBGaWxlRXhwbG9yZXJJdGVtKSB7XHJcbiAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dDb25maXJtKCdC4bqhbiBjw7MgY2jhuq9jIGNo4bqvbiBtdeG7kW4ga8O9IHPhu5EgdsSDbiBi4bqjbiBuw6B5PycpLnRoZW4oYXN5bmMgcnMgPT4ge1xyXG4gICAgICAgICAgICBpZiAocnMpIHtcclxuICAgICAgICAgICAgICAgIGxldCBzb3VyY2VGaWxlSWQgPSBmaWxlLmlkO1xyXG4gICAgICAgICAgICAgICAgbGV0IHNvdXJjZUZpbGUgPSBmaWxlO1xyXG4gICAgICAgICAgICAgICAgLy8gS8O9IHPhu5EgZmlsZSB3b3JkIC0gY+G6p24gY29udmVydCBzYW5nIHBkZiB0csaw4bubY1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2ZpbGVFeHBsb3JlclNlcnZpY2UubmVlZENvbnZlcnRCZWZvcmVTaWduKGZpbGUubmFtZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBjb252ZXJ0IGZpbGUgYmVmb3JlIHNpZ25cclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByc0NvbnZlcnQgPSBhd2FpdCB0aGlzLl9maWxlRXhwbG9yZXJTZXJ2aWNlLmNvbnZlcnREb2N1bWVudFRvUGRmQW5kU2F2ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZUlkOiBzb3VyY2VGaWxlSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLl9maWxlRXhwbG9yZXJTZXJ2aWNlLmNoYW5nZUZpbGVFeHRlbnNpb24oZmlsZS5uYW1lLCAncGRmJyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xkZXJJbnN0YW5jZUlkOiBmaWxlLnBhcmVudEZvbGRlcklkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duZXJUeXBlOiB0aGlzLl91c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpLnVzZXJJZC50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyc0NvbnZlcnQgfHwgIXJzQ29udmVydC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoYEPDsyBs4buXaSB44bqjeSByYSBraGkgY2h1eeG7g24gxJHhu5VpIHTDoGkgbGnhu4d1ICR7ZmlsZS5uYW1lfSB0aMOgbmggcGRmIMSR4buDIGvDvS4gVnVpIGzDsm5nIHRo4butIGzhuqFpIHNhdWApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dTdWNjZXNzKGBDaHV54buDbiDEkeG7lWkgdMOgaSBsaeG7h3UgJHtmaWxlLm5hbWV9IHRow6BuaCBwZGYgdGjDoG5oIGPDtG5nYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VGaWxlSWQgPSByc0NvbnZlcnQuZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUZpbGUgPSB7IGlkOiBzb3VyY2VGaWxlSWQgfSBhcyBGaWxlRXhwbG9yZXJJdGVtO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJpZ2dlclByb2Nlc3NEYXRhKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKGBDw7MgbOG7l2kgeOG6o3kgcmEga2hpIGNodXnhu4NuIMSR4buVaSB0w6BpIGxp4buHdSAke2ZpbGUubmFtZX0gdGjDoG5oIHBkZiDEkeG7gyBrw70uIFZ1aSBsw7JuZyB0aOG7rSBs4bqhaSBzYXVgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9maWxlRXhwbG9yZXJTZXJ2aWNlLmdlbmVyYXRlTGlua0Rvd25sb2FkKHtcclxuICAgICAgICAgICAgICAgICAgICBmaWxlSWQ6IHNvdXJjZUZpbGVJZCxcclxuICAgICAgICAgICAgICAgIH0gYXMgR2VuZXJhdGVMaW5rRG93bmxvYWREVE8pLnRoZW4ocnMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IHRoaXMuX2Rvd25sb2FkTGlua1NlcnZpY2UuZ2V0RG93bmxvYWRGb3JTaWduVXJsKHJzLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBybXMgPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICBwcm1zWydGaWxlVXBsb2FkSGFuZGxlciddID0gYCR7dGhpcy5fZW52aXJvbm1lbnRTZXJ2aWNlLmdldEh0dHBTZXJ2aWNlRW5kcG9pbnRXaXRoVmVyc2lvbignZmlsZScpfS9LeVNvRmlsZS9TYXZlUGh5c2ljYWxTaWduZWRGaWxlYDtcclxuICAgICAgICAgICAgICAgICAgICBwcm1zWydTZXNzaW9uSWQnXSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIHBybXNbJ0ZpbGVOYW1lJ10gPSB1cmw7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogdmFyaWFibGUtbmFtZVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGpzb25fcHJtcyA9IEpTT04uc3RyaW5naWZ5KHBybXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZnY2Ffc2lnbl9hcHByb3ZlZChqc29uX3BybXMsIChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHRPYmogPSBKU09OLnBhcnNlKHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRPYmouRmlsZVNlcnZlciAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmlsZUV4cGxvcmVyU2VydmljZS5zYXZlU2lnbmVkRmlsZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlRmlsZTogc291cmNlRmlsZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wRmlsZUlkOiByZXN1bHRPYmouRmlsZVNlcnZlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRoZW4ocnNzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmlnZ2VyUHJvY2Vzc0RhdGEoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1N1Y2Nlc3MoJ0vDvSBz4buRIHRow6BuaCBjw7RuZycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2lnbkZpbGVEb25WaShmaWxlOiBGaWxlRXhwbG9yZXJJdGVtKSB7XHJcbiAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5zaG93Q29uZmlybSgnQuG6oW4gY8OzIGNo4bqvYyBjaOG6r24gbXXhu5FuIGvDvSBz4buRIMSRxqFuIHbhu4sgdsSDbiBi4bqjbiBuw6B5PycpXHJcbiAgICAgICAgICAgIC50aGVuKGFzeW5jIChycykgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHNvdXJjZUZpbGVJZCA9IGZpbGUuaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHNvdXJjZUZpbGUgPSBmaWxlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9maWxlRXhwbG9yZXJTZXJ2aWNlLm5lZWRDb252ZXJ0QmVmb3JlU2lnbihmaWxlLm5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgZmlsZSBiZWZvcmUgc2lnblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcnNDb252ZXJ0ID0gYXdhaXQgdGhpcy5fZmlsZUV4cGxvcmVyU2VydmljZS5jb252ZXJ0RG9jdW1lbnRUb1BkZkFuZFNhdmUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlSWQ6IHNvdXJjZUZpbGVJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLl9maWxlRXhwbG9yZXJTZXJ2aWNlLmNoYW5nZUZpbGVFeHRlbnNpb24oZmlsZS5uYW1lLCAncGRmJyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sZGVySW5zdGFuY2VJZDogZmlsZS5wYXJlbnRGb2xkZXJJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lclR5cGU6IHRoaXMuX3VzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkudXNlcklkLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcnNDb252ZXJ0IHx8ICFyc0NvbnZlcnQuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZyhgQ8OzIGzhu5dpIHjhuqN5IHJhIGtoaSBjaHV54buDbiDEkeG7lWkgdMOgaSBsaeG7h3UgJHtmaWxlLm5hbWV9IHRow6BuaCBwZGYgxJHhu4Mga8O9LiBWdWkgbMOybmcgdGjhu60gbOG6oWkgc2F1YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dTdWNjZXNzKGBDaHV54buDbiDEkeG7lWkgdMOgaSBsaeG7h3UgJHtmaWxlLm5hbWV9IHRow6BuaCBwZGYgdGjDoG5oIGPDtG5nYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJpZ2dlclByb2Nlc3NEYXRhKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlRmlsZUlkID0gcnNDb252ZXJ0LmRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlRmlsZSA9IHsgaWQ6IHNvdXJjZUZpbGVJZCB9IGFzIEZpbGVFeHBsb3Jlckl0ZW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZyhgQ8OzIGzhu5dpIHjhuqN5IHJhIGtoaSBjaHV54buDbiDEkeG7lWkgdMOgaSBsaeG7h3UgJHtmaWxlLm5hbWV9IHRow6BuaCBwZGYgxJHhu4Mga8O9LiBWdWkgbMOybmcgdGjhu60gbOG6oWkgc2F1YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmlsZUV4cGxvcmVyU2VydmljZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuZ2VuZXJhdGVMaW5rRG93bmxvYWQoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNGaWxlVmVyc2lvbjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlSWQ6IHNvdXJjZUZpbGVJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBhcyBHZW5lcmF0ZUxpbmtEb3dubG9hZERUTylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKHJzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSB0aGlzLl9kb3dubG9hZExpbmtTZXJ2aWNlLmdldERvd25sb2FkRm9yU2lnblVybChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBycy5kYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm1zID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm1zWydGaWxlVXBsb2FkSGFuZGxlciddID0gYCR7dGhpcy5fZW52aXJvbm1lbnRTZXJ2aWNlLmdldEh0dHBTZXJ2aWNlRW5kcG9pbnRXaXRoVmVyc2lvbignZmlsZScpfS9LeVNvRmlsZS9TYXZlUGh5c2ljYWxTaWduZWRGaWxlYDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBybXNbJ1Nlc3Npb25JZCddID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm1zWydGaWxlTmFtZSddID0gdXJsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJ1eeG7gW4gc+G7kSwgbmfDoHkga8O9IHPhu5EgcGjDsm5nIGJhbiBu4bq/dSBj4bqnblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGhhdCA9IHRoaXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhhdC5jb250cm9sICYmIHRoYXQuY29udHJvbC5kYXRhS3lTb0RvblZpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YUt5U29Eb25WaSA9ICg8RnVuY3Rpb24+dGhhdC5jb250cm9sLmRhdGFLeVNvRG9uVmkpKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFLeVNvRG9uVmkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbOG6pXkgc+G7kSBEb2NOdW1iZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFLeVNvRG9uVmkuZG9jTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm1zWydEb2NOdW1iZXInXSA9IGRhdGFLeVNvRG9uVmkuZG9jTnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGzhuqV5IG5nw6B5IGJhbiBow6BuaCB2YiDEkWlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFLeVNvRG9uVmkuaXNzdWVkRGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJtc1snSXNzdWVkRGF0ZSddID0gZGF0YUt5U29Eb25WaS5pc3N1ZWREYXRlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogdmFyaWFibGUtbmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QganNvbl9wcm1zID0gSlNPTi5zdHJpbmdpZnkocHJtcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2Z2NhX3NpZ25faXNzdWVkKGpzb25fcHJtcywgKHJlc3VsdDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0T2JqID0gSlNPTi5wYXJzZShyZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRPYmouRmlsZVNlcnZlciAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9maWxlRXhwbG9yZXJTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2F2ZVNpZ25lZEZpbGUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUZpbGU6IHNvdXJjZUZpbGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcEZpbGVJZDogcmVzdWx0T2JqLkZpbGVTZXJ2ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKHJzcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyaWdnZXJQcm9jZXNzRGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93U3VjY2VzcygnS8O9IHPhu5EgdGjDoG5oIGPDtG5nJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNpZ25LeVNpbUZpbGUoZmlsZTogRmlsZUV4cGxvcmVySXRlbSkge1xyXG4gICAgICAgIHRoaXMuZm9ybXMua3lTb1NpbS5zaG93ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm1vZGVsLmFkdmFuY2VEYXRhID0gZmlsZTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzaGFyZUZvbGRlcihmaWxlOiBGaWxlRXhwbG9yZXJJdGVtKSB7XHJcbiAgICAgICAgdGhpcy5mb3Jtcy5zaGFyZUZvbGRlci5kYXRhID0gZmlsZTtcclxuICAgICAgICB0aGlzLmZvcm1zLnNoYXJlRm9sZGVyLnNob3cgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNoYXJlRmlsZShmaWxlOiBGaWxlRXhwbG9yZXJJdGVtKSB7XHJcbiAgICAgICAgdGhpcy5mb3Jtcy5zaGFyZUZpbGUuZGF0YSA9IGZpbGU7XHJcbiAgICAgICAgdGhpcy5mb3Jtcy5zaGFyZUZpbGUuc2hvdyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0RmlsZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5maWxlQ29udHJvbC5iYXNpY0ZpbGVJbnB1dCkge1xyXG4gICAgICAgICAgICB0aGlzLmZpbGVDb250cm9sLmJhc2ljRmlsZUlucHV0Lm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdmlld0xpc3RTaWduKGU6IEV2ZW50LCBzaWduYXR1cmVzOiBhbnkpIHtcclxuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIHRoaXMuZm9ybXMuc2lnbmF0dXJlRGV0YWlsLnNob3cgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubW9kZWwuYWR2YW5jZURhdGEgPSBzaWduYXR1cmVzO1xyXG4gICAgfVxyXG5cclxuICAgIG9uUm93U2VsZWN0KGV2dCkge1xyXG4gICAgICAgIHRoaXMub25TZWxlY3RlZC5lbWl0KHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVsb2FkRGF0YSgpIHtcclxuICAgICAgICB0aGlzLl9maWxlTWFuYWdlclNlcnZpY2Uuc3Vic1ZhciA9IHRoaXMuX2ZpbGVNYW5hZ2VyU2VydmljZS5cclxuICAgICAgICAgICAgaW52b2tlUmVsb2FkRnVuY3Rpb24uc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3RyaWdnZXJQcm9jZXNzRGF0YSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGFzeW5jIGFkZEF0dGFjaExpbmsoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudHlwZWRMaW5rICYmIHRoaXMudHlwZWRMaW5rLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3Qgb2JqID0gdGhpcy5wYXJzZUF0dGFjaExpbmsodGhpcy50eXBlZExpbmspO1xyXG4gICAgICAgICAgICBpZiAob2JqKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBkbyBsb2dpYyBjb3B5IGZpbGUgYnkgaGFzaFxyXG4gICAgICAgICAgICAgICAgdGhpcy50eXBlZExpbmsgPSAnJztcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0F0dGFjaExpbmtCb3ggPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmNvcHlGaWxlQnlIYXNoKG9iaiwgdGhpcy5kYXRhLmN1cnJlbnRGb2xkZXJJZCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXJlcy5zdWNjZXNzIHx8ICFyZXMuZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnY8OzIGzhu5dpIHRyb25nIGzDumMgbOG6pXkgZmlsZSB04burIGxpbmshJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coeyBmaWxlb2JqOiByZXMgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldEZvbGRlckNvbnRlbnQodGhpcy5kYXRhLmN1cnJlbnRGb2xkZXJJZCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1N1Y2Nlc3MoJ1ThuqNpIHRow6BuaCBjw7RuZyEnKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnS2jDtG5nIGjhu5cgdHLhu6MgbGnDqm4ga+G6v3QgdOG7qyBo4buHIHRo4buRbmcga2jDoWMgaG/hurdjIGxpw6puIGvhur90IGtow7RuZyDEkcO6bmchJyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcGFyc2VBdHRhY2hMaW5rKGxpbmspIHtcclxuICAgICAgICBpZiAobGluaykge1xyXG4gICAgICAgICAgICAvLyBUb2RvOiBz4butYSB04bqhbSDEkeG7gyBjaOG6oXkgdHLDqm4gbG9jYWwsIHNhdSBraGkgb2sgdGjDrCBwaOG6o2kgdGjDqm0gJy9maWxlJ1xyXG4gICAgICAgICAgICBjb25zdCBwYXJ0cyA9IGxpbmsuc3BsaXQoJ2ZpbGUvdjUvRG93bmxvYWRMaW5rL0Rvd25sb2FkLycpO1xyXG4gICAgICAgICAgICBpZiAocGFydHMubGVuZ3RoID09IDIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJ0c1sxXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY29weUZpbGVGcm9tU2hhcmVkKHNlbGVjdGVkRmlsZXM6IGFueVtdLCBpZERlc0ZvbGRlcjogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHNlbGVjdGVkRmlsZXM/Lmxlbmd0aCB8fCBpZERlc0ZvbGRlciAhPSBudWxsIHx8IGlkRGVzRm9sZGVyICE9ICcnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlkc0ZpbGU6IHN0cmluZ1tdID0gc2VsZWN0ZWRGaWxlcy5tYXAoeCA9PiB4LmlkKTtcclxuICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuY29weU11bHRpcGxlRmlsZShpZHNGaWxlLCBpZERlc0ZvbGRlcik7XHJcbiAgICAgICAgICAgIGlmICghcmVzLnN1Y2Nlc3MgfHwgIXJlcy5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0zhu5dpIGNvcHkgZmlsZSB04burIHRoxrAgbeG7pWMgZMO5bmcgY2h1bmcnKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1N1Y2Nlc3MoJ0NvcHkgZmlsZSB04burIHRoxrAgbeG7pWMgZMO5bmcgY2h1bmcgdGjDoG5oIGPDtG5nJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdDw7MgbOG7l2kgY29weSB04burIHRodSBt4bulYyBkw7luZyBjaHVuZycpO1xyXG4gICAgfVxyXG5cclxuICAgIGZvY3VzSW5wdXQoaW5wdXQ6IGFueSkge1xyXG4gICAgICAgIGlucHV0LmZvY3VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY2hvbkNodUt5KCkge1xyXG4gICAgICAgIHRoaXMuZmlsZUt5U29TaW0uY2hvbkNodUt5KCk7XHJcbiAgICB9XHJcblxyXG4gICAga3lTbygpIHtcclxuICAgICAgICB0aGlzLmZpbGVLeVNvU2ltLmt5U28oKTtcclxuICAgIH1cclxufVxyXG4iLCI8ZGl2ICpuZ0lmPVwibGF5b3V0ID09IF9sYXlvdXQuTElTVFwiIGNsYXNzPVwiZnVsbC1sYXlvdXRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJmbS1ncmlkXCI+XHJcbiAgICAgICAgPGNydWQtbGlzdC1zaW1wbGUgI2NydWRMaXN0IFttb2RlbF09XCJtb2RlbFwiIFtzZXR0aW5nXT1cInNldHRpbmdcIiBbZGF0YVNvdXJjZV09XCJfZGF0YVNvdXJjZVwiXHJcbiAgICAgICAgICAgIFtzaG93U2Nyb2xsQmFyXT1cImZhbHNlXCIgY2xhc3M9XCItLWF1dG8taGVpZ2h0LWNvbnRlbnQgLS1uby13cmFwcGVyLXBhZGRpbmdcIiBbd2lkdGhGdW5jdGlvbkNvbHVtbl09XCInOC4ycmVtJ1wiXHJcbiAgICAgICAgICAgIChvblJlbG9hZCk9XCJfdHJpZ2dlclByb2Nlc3NEYXRhKCRldmVudClcIiAob25Sb3dTZWxlY3QpPVwib25Sb3dTZWxlY3QoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2N1c3RvbVRpdGxlPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJyZWFkQ3J1bWJcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdG9vbGJhcj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCIhaGlkZGVuQ3JlYXRlRm9sZGVyICYmICFyZWFkb25seVwiIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICBwVG9vbHRpcD1cIlThuqFvIHRoxrAgbeG7pWMgbeG7m2lcIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIiBpY29uPVwicGkgcGktZm9sZGVyXCIgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIlThuqFvIHRoxrAgbeG7pWNcIiBpY29uUG9zPVwibGVmdFwiIChjbGljayk9XCJjcmVhdGVGb2xkZXIoKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFyZWFkb25seVwiIHBCdXR0b24gaWNvbj1cInBpIHBpLWNsb3VkLXVwbG9hZFwiIHBUb29sdGlwPVwiVOG6o2kgdOG7h3AgdGluIHThu6sgbcOheSB0w61uaCBj4bunYSBi4bqhblwiXHJcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwicC1idXR0b24tdGV4dCBwLWJ1dHRvbi1wcmltYXJ5XCIgbGFiZWw9XCJU4bqjaSBsw6puXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0RmlsZSgpXCI+PC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFyZWFkb25seVwiIHBCdXR0b24gaWNvbj1cInBpIHBpLWxpbmtcIiBwVG9vbHRpcD1cIlThuqNpIHThu6sgbGnDqm4ga+G6v3QgdHJvbmcgaOG7hyB0aOG7kW5nXCJcclxuICAgICAgICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJ0b3BcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXByaW1hcnlcIiBsYWJlbD1cIlThuqNpIGxpw6puIGvhur90XCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd0F0dGFjaExpbmtCb3ggPSB0cnVlXCI+PC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFpblRhaUxpZXUgJiYgIWluVGFpTGlldUNodW5nICYmICFyZWFkb25seVwiIHBCdXR0b24gaWNvbj1cInBpIHBpLWJvb2tcIlxyXG4gICAgICAgICAgICAgICAgICAgIHBUb29sdGlwPVwiU2FvIGNow6lwIHThu6sgdMOgaSBsaeG7h3UgZMO5bmcgY2h1bmcgaG/hurdjIGPDoSBuaMOiblwiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC1idXR0b24tdGV4dFwiIGxhYmVsPVwiVMOgaSBsaeG7h3VcIiAoY2xpY2spPVwic2hvd1RhaUxpZXVEdW5nQ2h1bmcgPSB0cnVlO1wiPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImNhblNlbGVjdCgpXCIgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXN1Y2Nlc3NcIiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgIHBUb29sdGlwPVwiRGkgY2h1eeG7g24gdGjGsCBt4bulYy904buHcCB0aW4gxJHDoyBjaOG7jW5cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIiBpY29uPVwiZmFzIGZhLWFycm93cy1hbHRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGljb25Qb3M9XCJsZWZ0XCIgbGFiZWw9XCJEaSBjaHV54buDblwiIChjbGljayk9XCJtb3ZlRXhwbG9yZXJJdGVtcygpXCI+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiY2FuU2V0TW92ZSgpXCIgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXN1Y2Nlc3NcIiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgIHBUb29sdGlwPVwiRGkgY2h1eeG7g24gdGjGsCBt4bulYy904buHcCB0aW4gxJHDoyBjaOG7jW4gdOG7m2kgxJHDonlcIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIiBpY29uPVwiZmFyIGZhLWhhbmQtcGFwZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgIGljb25Qb3M9XCJsZWZ0XCIgbGFiZWw9XCLEkOG6t3QgdOG6oWkgxJHDonlcIiAoY2xpY2spPVwic2V0TW92ZUV4cGxvcmVySXRlbXMoKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImNhblNldE1vdmUoKVwiIGljb249XCJwaSBwaS11bmRvXCIgcEJ1dHRvbiBjbGFzcz1cInAtYnV0dG9uLXRleHQgcC1idXR0b24tc2Vjb25kYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgcFRvb2x0aXA9XCJC4buPIGRpIGNodXnhu4NuIHRoxrAgbeG7pWMvdOG7h3AgdGluIMSRw6MgY2jhu41uXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCIgbGFiZWw9XCJC4buPIHF1YVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbmNlbE1vdmUoKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImhhc1NlbGVjdCgpICYmICFyZWFkb25seVwiIHBCdXR0b24gdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgcFRvb2x0aXA9XCJ7eyAnWMOzYSB0aMawIG3hu6VjL3Thu4dwIHRpbiDEkcOjIGNo4buNbicgfCB0cmFuc2xhdGUgfX1cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIiBpY29uPVwicGkgcGktdHJhc2hcIlxyXG4gICAgICAgICAgICAgICAgICAgIGljb25Qb3M9XCJsZWZ0XCIgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLWRhbmdlclwiIGxhYmVsPVwiWMOzYVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZU11dGlwbGUobW9kZWwuc2VsZWN0ZWRJdGVtcylcIj48L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaGFzU2VsZWN0KClcIiBjbGFzcz1cInAtYnV0dG9uLXRleHQgcC1idXR0b24tc2Vjb25kYXJ5XCIgcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICBwVG9vbHRpcD1cIk7DqW4gJiB04bqjaSB24buBXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCIgaWNvbj1cImZhcyBmYS1maWxlLWFyY2hpdmVcIiBpY29uUG9zPVwibGVmdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJU4bqjaSB24buBXCIgKGNsaWNrKT1cImRvd25sb2FkTXVsdGlwbGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2V4cGxvcmVySXRlbSBsZXQtcm93RGF0YT0ncm93RGF0YScgbGV0LWNvbD0nY29sJz5cclxuICAgICAgICAgICAgICAgIDxzcGFuIChjbGljayk9XCJvcGVuT2JqZWN0KHJvd0RhdGEpXCIgY2xhc3M9XCJwdWxsLWxlZnQgZmlsZS1leC1pY29uXCJcclxuICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cInJvd0RhdGEubmFtZSB8IGZpbGVJY29uIDogIXJvd0RhdGEuaXNGaWxlXCI+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cIm9wZW5PYmplY3Qocm93RGF0YSlcIiBjbGFzcz1cInt7cm93RGF0YS5jbGFzc319IGZpbGUtZXgtbmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7cm93RGF0YS5uYW1lfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicm93RGF0YS5zaWduYXR1cmVzXCIgY2xhc3M9XCJwdWxsLXJpZ2h0IHNpZ25hdHVyZVwiIHBUb29sdGlwPVwiWGVtIGNoaSB0aeG6v3Qga8O9IHPhu5FcIlxyXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiIChjbGljayk9XCJ2aWV3TGlzdFNpZ24oJGV2ZW50LCByb3dEYXRhLnNpZ25hdHVyZXMpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtc2lnbmF0dXJlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNmaWxlU2l6ZSBsZXQtcm93RGF0YT0ncm93RGF0YSc+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicm93RGF0YS5pc0ZpbGVcIj57e3Jvd0RhdGEuZmlsZVNpemUgfCBmaWxlU2l6ZX19PC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Z1bmN0aW9uIGxldC1yb3dEYXRhPVwicm93RGF0YVwiIGxldC1jcnVkTGlzdD1cImNydWRMaXN0XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnVuY3Rpb24tbGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhcmVhZG9ubHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tdGV4dCBsaW5rLW9yLWFjdGlvblwiIHBCdXR0b24gdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJ0b3BcIiBwVG9vbHRpcD1cInt7Z2V0QnV0dG9uVG9vbHRpcChyb3dEYXRhKX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJ7e2dldEJ1dHRvbkljb24ocm93RGF0YSl9fVwiIChjbGljayk9XCJvbkJ1dHRvbkNsaWNrKHJvd0RhdGEpXCI+PC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicC1idXR0b24tZGFuZ2VyIHAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tdGV4dCBsaW5rLW9yLWFjdGlvblwiIHBCdXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBwVG9vbHRpcD1cIljDs2FcIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIiBpY29uPVwicGkgcGktdHJhc2hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZUZpbGUocm93RGF0YSlcIj48L2J1dHRvbj5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBwQnV0dG9uIGljb249XCJwaSBwaS1lbGxpcHNpcy12XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibGluay1vci1hY3Rpb24gcC1idXR0b24tdGV4dCBwLWJ1dHRvbi1yb3VuZGVkXCIgcFRvb2x0aXA9XCJUaMOqbVwiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd0NvbnRleHRNZW51KCRldmVudCwgcm93RGF0YSlcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwicmVhZG9ubHlcIiBjbGFzcz1cInAtYnV0dG9uLXNlY29uZGFyeSBwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHQgbGluay1vci1hY3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwQnV0dG9uIHR5cGU9XCJidXR0b25cIiBwVG9vbHRpcD1cIlThuqNpIHbhu4FcIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIiBpY29uPVwicGkgcGktY2xvdWQtZG93bmxvYWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZG93bmxvYWQocm93RGF0YSlcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwicmVhZG9ubHlcIiBjbGFzcz1cInAtYnV0dG9uLXNlY29uZGFyeSBwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHQgbGluay1vci1hY3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwQnV0dG9uIHR5cGU9XCJidXR0b25cIiBwVG9vbHRpcD1cIlNhbyBjaMOpcCDEkcaw4budbmcgZOG6q25cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIiBpY29uPVwicGkgcGktbGlua1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjb3B5RG93bmxvYWRMaW5rKHJvd0RhdGEpXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L2NydWQtbGlzdC1zaW1wbGU+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48ZGl2ICpuZ0lmPVwibGF5b3V0ID09IF9sYXlvdXQuU0lNUExFXCIgY2xhc3M9XCJub3QtZnVsbC1sYXlvdXRcIiBbY2xhc3MucmVhZG9ubHldPVwicmVhZG9ubHlcIj5cclxuICAgIDxkaXYgKm5nSWY9XCIhcmVhZG9ubHkgfHwgZGF0YS5icmVhZGNydW1icy5sZW5ndGggPiAwXCIgY2xhc3M9XCJmbS10b29sYmFyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZtLXRvb2xiYXItYnV0dG9uc1wiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXJlYWRvbmx5XCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiIWhpZGRlbkNyZWF0ZUZvbGRlclwiIChjbGljayk9XCJjcmVhdGVGb2xkZXIoKVwiIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICBwVG9vbHRpcD1cIlThuqFvIHRoxrAgbeG7pWMgbeG7m2lcIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIiBpY29uPVwicGkgcGktZm9sZGVyXCIgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIlThuqFvIHRoxrAgbeG7pWNcIiBpY29uUG9zPVwibGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBwQnV0dG9uIGNsYXNzPVwicC1idXR0b24tdGV4dCBwLWJ1dHRvbi1pbmZvIGxpbmstb3ItYWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICBpY29uPVwicGkgcGktY2xvdWQtdXBsb2FkXCIgKGNsaWNrKT1cInNlbGVjdEZpbGUoKVwiIGxhYmVsPVwiVOG6o2kgbMOqblwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIGljb249XCJwaSBwaS1saW5rXCIgcFRvb2x0aXA9XCJU4bqjaSB04burIGxpw6puIGvhur90IHRyb25nIGjhu4cgdGjhu5FuZ1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwicC1idXR0b24tdGV4dCBwLWJ1dHRvbi1wcmltYXJ5XCIgbGFiZWw9XCJU4bqjaSBsacOqbiBr4bq/dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dBdHRhY2hMaW5rQm94ID0gdHJ1ZVwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFpblRhaUxpZXVcIiBwQnV0dG9uIGljb249XCJwaSBwaS1ib29rXCIgcFRvb2x0aXA9XCJUw6BpIGxp4buHdSBkw7luZyBjaHVuZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwicC1idXR0b24tdGV4dFwiIGxhYmVsPVwiVMOgaSBsaeG7h3VcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93VGFpTGlldUR1bmdDaHVuZyA9IHRydWU7XCI+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJyZWFkQ3J1bWJcIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJuZmwtZ3JpZFwiPlxyXG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHJvd0RhdGEgb2YgX2RhdGFTb3VyY2U7IGluZGV4IGFzIGlcIiBjbGFzcz1cIm5mbC1pdGVtXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuZmwtbm9cIj5cclxuICAgICAgICAgICAgICAgIHt7aSArIDF9fS5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmZsLW5hbWVcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicHVsbC1sZWZ0IGZpbGUtZXgtaWNvblwiIFtpbm5lckhUTUxdPVwicm93RGF0YS5uYW1lIHwgZmlsZUljb24gOiAhcm93RGF0YS5pc0ZpbGVcIj5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxhIChjbGljayk9XCJvcGVuT2JqZWN0KHJvd0RhdGEpXCIgY2xhc3M9XCJ7e3Jvd0RhdGEuY2xhc3N9fSBmaWxlLWV4LW5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tyb3dEYXRhLm5hbWV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicm93RGF0YS5zaWduYXR1cmVzXCIgY2xhc3M9XCJuZmwtc2lnbmF0dXJlIHNpZ25hdHVyZVwiIHBUb29sdGlwPVwiWGVtIGNoaSB0aeG6v3Qga8O9IHPhu5FcIlxyXG4gICAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCIgKGNsaWNrKT1cInZpZXdMaXN0U2lnbigkZXZlbnQsIHJvd0RhdGEuc2lnbmF0dXJlcylcIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXNpZ25hdHVyZVwiPjwvaT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJyb3dEYXRhLmlzRmlsZVwiIGNsYXNzPVwibmZsLXZlcnNpb25cIj5cclxuICAgICAgICAgICAgICAgIHZ7e3Jvd0RhdGEuY3VycmVudEZpbGVWZXJzaW9ufX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmZsLWZ1bmN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXJlYWRvbmx5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tdGV4dCBsaW5rLW9yLWFjdGlvblwiIChjbGljayk9XCJvbkJ1dHRvbkNsaWNrKHJvd0RhdGEpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCIgcFRvb2x0aXA9XCJ7e2dldEJ1dHRvblRvb2x0aXAocm93RGF0YSl9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJ7e2dldEJ1dHRvbkljb24ocm93RGF0YSl9fVwiPjwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicC1idXR0b24tZGFuZ2VyIHAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tdGV4dCBsaW5rLW9yLWFjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVGaWxlKHJvd0RhdGEpXCIgcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgcFRvb2x0aXA9XCJYw7NhXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLXRyYXNoXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwicmVhZG9ubHlcIiBjbGFzcz1cInAtYnV0dG9uLXNlY29uZGFyeSBwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHQgbGluay1vci1hY3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkb3dubG9hZChyb3dEYXRhKVwiIHBCdXR0b24gdHlwZT1cImJ1dHRvblwiIHBUb29sdGlwPVwiVOG6o2kgduG7gVwiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLWNsb3VkLWRvd25sb2FkXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwicmVhZG9ubHlcIiBjbGFzcz1cInAtYnV0dG9uLXNlY29uZGFyeSBwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHQgbGluay1vci1hY3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgIHBCdXR0b24gdHlwZT1cImJ1dHRvblwiIHBUb29sdGlwPVwiU2FvIGNow6lwIMSRxrDhu51uZyBk4bqrblwiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiIGljb249XCJwaSBwaS1saW5rXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY29weURvd25sb2FkTGluayhyb3dEYXRhKVwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgcEJ1dHRvbiBpY29uPVwicGkgcGktZWxsaXBzaXMtdlwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsaW5rLW9yLWFjdGlvbiBwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXJvdW5kZWRcIiBwVG9vbHRpcD1cIlRow6ptXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd0NvbnRleHRNZW51KCRldmVudCwgcm93RGF0YSlcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIiFfZGF0YVNvdXJjZSB8fCAhX2RhdGFTb3VyY2UubGVuZ3RoXCIgY2xhc3M9XCJuZmwtbm8taXRlbVwiPlxyXG4gICAgICAgICAgICBDaMawYSBjw7MgdMOgaSBsaeG7h3UgxJHGsOG7o2MgdOG6o2kgbMOqblxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiAqbmdJZj1cImxheW91dCA9PSBfbGF5b3V0LlNJTVBMRV9GT1JfTElTVFwiIGNsYXNzPVwibm90LWZ1bGwtbGF5b3V0XCIgW2NsYXNzLnJlYWRvbmx5XT1cInJlYWRvbmx5XCI+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiIXJlYWRvbmx5IHx8IGRhdGEuYnJlYWRjcnVtYnMubGVuZ3RoID4gMFwiIGNsYXNzPVwiZm0tdG9vbGJhclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbS10b29sYmFyLWJ1dHRvbnNcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFyZWFkb25seVwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFoaWRkZW5DcmVhdGVGb2xkZXJcIiAoY2xpY2spPVwiY3JlYXRlRm9sZGVyKClcIiBwQnV0dG9uIHBSaXBwbGUgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgcFRvb2x0aXA9XCJU4bqhbyB0aMawIG3hu6VjIG3hu5tpXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCIgaWNvbj1cInBpIHBpLWZvbGRlclwiIGNsYXNzPVwicC1idXR0b24tdGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJU4bqhbyB0aMawIG3hu6VjXCIgaWNvblBvcz1cImxlZnRcIj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgcEJ1dHRvbiBjbGFzcz1cInAtYnV0dG9uLXRleHQgcC1idXR0b24taW5mbyBsaW5rLW9yLWFjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLWNsb3VkLXVwbG9hZFwiIChjbGljayk9XCJzZWxlY3RGaWxlKClcIiBsYWJlbD1cIlThuqNpIGzDqm5cIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBpY29uPVwicGkgcGktbGlua1wiIHBUb29sdGlwPVwiVOG6o2kgdOG7qyBsacOqbiBr4bq/dCB0cm9uZyBo4buHIHRo4buRbmdcIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIlxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInAtYnV0dG9uLXRleHQgcC1idXR0b24tcHJpbWFyeVwiIGxhYmVsPVwiVOG6o2kgbGnDqm4ga+G6v3RcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93QXR0YWNoTGlua0JveCA9IHRydWVcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCIhaW5UYWlMaWV1XCIgcEJ1dHRvbiBpY29uPVwicGkgcGktYm9va1wiIHBUb29sdGlwPVwiVMOgaSBsaeG7h3UgZMO5bmcgY2h1bmdcIlxyXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInAtYnV0dG9uLXRleHRcIiBsYWJlbD1cIlTDoGkgbGnhu4d1XCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd1RhaUxpZXVEdW5nQ2h1bmcgPSB0cnVlO1wiPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJicmVhZENydW1iXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwibmZsLWdyaWRcIj5cclxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCByb3dEYXRhIG9mIF9kYXRhU291cmNlOyBpbmRleCBhcyBpXCIgY2xhc3M9XCJuZmwtaXRlbVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmZsLW5vXCI+XHJcbiAgICAgICAgICAgICAgICB7e2kgKyAxfX0uXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5mbC1uYW1lXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInB1bGwtbGVmdCBmaWxlLWV4LWljb25cIiBbaW5uZXJIVE1MXT1cInJvd0RhdGEubmFtZSB8IGZpbGVJY29uIDogIXJvd0RhdGEuaXNGaWxlXCI+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgPGEgKGNsaWNrKT1cIm9wZW5PYmplY3Qocm93RGF0YSlcIiBjbGFzcz1cInt7cm93RGF0YS5jbGFzc319IGZpbGUtZXgtbmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e3Jvd0RhdGEubmFtZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgKm5nSWY9XCJyb3dEYXRhLnNpZ25hdHVyZXNcIiBjbGFzcz1cInNpZ25hdHVyZVwiIHBUb29sdGlwPVwiWGVtIGNoaSB0aeG6v3Qga8O9IHPhu5FcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCIgKGNsaWNrKT1cInZpZXdMaXN0U2lnbigkZXZlbnQsIHJvd0RhdGEuc2lnbmF0dXJlcylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXNpZ25hdHVyZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxzcGFuIGNsYXNzPVwiZmlsZS1leC1leHRlbnNpb25cIj57e3Jvd0RhdGEuZXh0ZW5zaW9ufX08L3NwYW4+IC0tPlxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuZmwtZnVuY3Rpb25cIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhcmVhZG9ubHlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi10ZXh0IGxpbmstb3ItYWN0aW9uXCIgKGNsaWNrKT1cIm9uQnV0dG9uQ2xpY2socm93RGF0YSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwQnV0dG9uIHR5cGU9XCJidXR0b25cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIiBwVG9vbHRpcD1cInt7Z2V0QnV0dG9uVG9vbHRpcChyb3dEYXRhKX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cInt7Z2V0QnV0dG9uSWNvbihyb3dEYXRhKX19XCI+PC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJwLWJ1dHRvbi1kYW5nZXIgcC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi10ZXh0IGxpbmstb3ItYWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZUZpbGUocm93RGF0YSlcIiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIiBwVG9vbHRpcD1cIljDs2FcIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uPVwicGkgcGktdHJhc2hcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPCEtLVxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInJlYWRvbmx5XCIgY2xhc3M9XCJwLWJ1dHRvbi1zZWNvbmRhcnkgcC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi10ZXh0IGxpbmstb3ItYWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRvd25sb2FkKHJvd0RhdGEpXCIgcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgcFRvb2x0aXA9XCJU4bqjaSB24buBXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLWNsb3VkLWRvd25sb2FkXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwicmVhZG9ubHlcIiBjbGFzcz1cInAtYnV0dG9uLXNlY29uZGFyeSBwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHQgbGluay1vci1hY3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwQnV0dG9uIHR5cGU9XCJidXR0b25cIiBwVG9vbHRpcD1cIlNhbyBjaMOpcCDEkcaw4budbmcgZOG6q25cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIiBpY29uPVwicGkgcGktbGlua1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjb3B5RG93bmxvYWRMaW5rKHJvd0RhdGEpXCI+PC9idXR0b24+IC0tPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgcEJ1dHRvbiBpY29uPVwicGkgcGktZWxsaXBzaXMtdlwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsaW5rLW9yLWFjdGlvbiBwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXJvdW5kZWRcIiBwVG9vbHRpcD1cIlRow6ptXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd0NvbnRleHRNZW51KCRldmVudCwgcm93RGF0YSlcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIiFfZGF0YVNvdXJjZSB8fCAhX2RhdGFTb3VyY2UubGVuZ3RoXCIgY2xhc3M9XCJuZmwtbm8taXRlbVwiPlxyXG4gICAgICAgICAgICBDaMawYSBjw7MgdMOgaSBsaeG7h3UgxJHGsOG7o2MgdOG6o2kgbMOqblxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiAqbmdJZj1cImxheW91dCA9PSBfbGF5b3V0LklOTElORVwiIGNsYXNzPVwibm90LWZ1bGwtbGF5b3V0XCIgW2NsYXNzLnJlYWRvbmx5XT1cInJlYWRvbmx5XCI+XHJcbiAgICA8IS0tIDxkaXYgKm5nSWY9XCIhcmVhZG9ubHkgfHwgZGF0YS5icmVhZGNydW1icy5sZW5ndGggPiAwXCIgY2xhc3M9XCJmbS10b29sYmFyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZtLXRvb2xiYXItYnV0dG9uc1wiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXJlYWRvbmx5XCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiIWhpZGRlbkNyZWF0ZUZvbGRlclwiIChjbGljayk9XCJjcmVhdGVGb2xkZXIoKVwiIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICBwVG9vbHRpcD1cIlThuqFvIHRoxrAgbeG7pWMgbeG7m2lcIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIiBpY29uPVwicGkgcGktZm9sZGVyXCIgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIlThuqFvIHRoxrAgbeG7pWNcIiBpY29uUG9zPVwibGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBwQnV0dG9uIGNsYXNzPVwicC1idXR0b24tdGV4dCBwLWJ1dHRvbi1pbmZvIGxpbmstb3ItYWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICBpY29uPVwicGkgcGktY2xvdWQtdXBsb2FkXCIgKGNsaWNrKT1cInNlbGVjdEZpbGUoKVwiIGxhYmVsPVwiVOG6o2kgbMOqblwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIGljb249XCJwaSBwaS1saW5rXCIgcFRvb2x0aXA9XCJU4bqjaSB04burIGxpw6puIGvhur90IHRyb25nIGjhu4cgdGjhu5FuZ1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwicC1idXR0b24tdGV4dCBwLWJ1dHRvbi1wcmltYXJ5XCIgbGFiZWw9XCJU4bqjaSBsacOqbiBr4bq/dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dBdHRhY2hMaW5rQm94ID0gdHJ1ZVwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFpblRhaUxpZXVcIiBwQnV0dG9uIGljb249XCJwaSBwaS1ib29rXCIgcFRvb2x0aXA9XCJUw6BpIGxp4buHdSBkw7luZyBjaHVuZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwicC1idXR0b24tdGV4dFwiIGxhYmVsPVwiVMOgaSBsaeG7h3VcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93VGFpTGlldUR1bmdDaHVuZyA9IHRydWU7XCI+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJyZWFkQ3J1bWJcIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PiAtLT5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwibmZsLWdyaWRcIj5cclxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCByb3dEYXRhIG9mIF9kYXRhU291cmNlOyBpbmRleCBhcyBpXCIgY2xhc3M9XCJuZmwtaXRlbVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmZsLW5vXCI+XHJcbiAgICAgICAgICAgICAgICB7e2kgKyAxfX0uXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5mbC1uYW1lXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInB1bGwtbGVmdCBmaWxlLWV4LWljb25cIiBbaW5uZXJIVE1MXT1cInJvd0RhdGEubmFtZSB8IGZpbGVJY29uIDogIXJvd0RhdGEuaXNGaWxlXCI+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgPGEgKGNsaWNrKT1cIm9wZW5PYmplY3Qocm93RGF0YSlcIiBjbGFzcz1cInt7cm93RGF0YS5jbGFzc319IGZpbGUtZXgtbmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e3Jvd0RhdGEubmFtZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgKm5nSWY9XCJyb3dEYXRhLnNpZ25hdHVyZXNcIiBjbGFzcz1cInNpZ25hdHVyZVwiIHBUb29sdGlwPVwiWGVtIGNoaSB0aeG6v3Qga8O9IHPhu5FcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCIgKGNsaWNrKT1cInZpZXdMaXN0U2lnbigkZXZlbnQsIHJvd0RhdGEuc2lnbmF0dXJlcylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXNpZ25hdHVyZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxzcGFuIGNsYXNzPVwiZmlsZS1leC1leHRlbnNpb25cIj57e3Jvd0RhdGEuZXh0ZW5zaW9ufX08L3NwYW4+IC0tPlxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuZmwtZnVuY3Rpb25cIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhcmVhZG9ubHlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi10ZXh0IGxpbmstb3ItYWN0aW9uXCIgKGNsaWNrKT1cIm9uQnV0dG9uQ2xpY2socm93RGF0YSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwQnV0dG9uIHR5cGU9XCJidXR0b25cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIiBwVG9vbHRpcD1cInt7Z2V0QnV0dG9uVG9vbHRpcChyb3dEYXRhKX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cInt7Z2V0QnV0dG9uSWNvbihyb3dEYXRhKX19XCI+PC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJwLWJ1dHRvbi1kYW5nZXIgcC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi10ZXh0IGxpbmstb3ItYWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZUZpbGUocm93RGF0YSlcIiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIiBwVG9vbHRpcD1cIljDs2FcIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uPVwicGkgcGktdHJhc2hcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPCEtLVxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInJlYWRvbmx5XCIgY2xhc3M9XCJwLWJ1dHRvbi1zZWNvbmRhcnkgcC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi10ZXh0IGxpbmstb3ItYWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRvd25sb2FkKHJvd0RhdGEpXCIgcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgcFRvb2x0aXA9XCJU4bqjaSB24buBXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLWNsb3VkLWRvd25sb2FkXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwicmVhZG9ubHlcIiBjbGFzcz1cInAtYnV0dG9uLXNlY29uZGFyeSBwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHQgbGluay1vci1hY3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwQnV0dG9uIHR5cGU9XCJidXR0b25cIiBwVG9vbHRpcD1cIlNhbyBjaMOpcCDEkcaw4budbmcgZOG6q25cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIiBpY29uPVwicGkgcGktbGlua1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjb3B5RG93bmxvYWRMaW5rKHJvd0RhdGEpXCI+PC9idXR0b24+IC0tPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgcEJ1dHRvbiBpY29uPVwicGkgcGktZWxsaXBzaXMtdlwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsaW5rLW9yLWFjdGlvbiBwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXJvdW5kZWRcIiBwVG9vbHRpcD1cIlRow6ptXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd0NvbnRleHRNZW51KCRldmVudCwgcm93RGF0YSlcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIiFfZGF0YVNvdXJjZSB8fCAhX2RhdGFTb3VyY2UubGVuZ3RoXCIgY2xhc3M9XCJuZmwtbm8taXRlbVwiPlxyXG4gICAgICAgICAgICBDaMawYSBjw7MgdMOgaSBsaeG7h3UgxJHGsOG7o2MgdOG6o2kgbMOqblxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPG5nLXRlbXBsYXRlICNicmVhZENydW1iPlxyXG4gICAgPGRpdiAqbmdJZj1cImRhdGEuYnJlYWRjcnVtYnMubGVuZ3RoID4gMVwiIGNsYXNzPVwiZm0tdG9vbGJhci1wYXRoXCI+XHJcbiAgICAgICAgPHAtYnJlYWRjcnVtYiBjbGFzcz1cImN1c3RvbUJyZWFkQ3J1bWJcIiBbbW9kZWxdPVwiZGF0YS5icmVhZGNydW1ic1wiPjwvcC1icmVhZGNydW1iPlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48cC1maWxlVXBsb2FkICNmaWxlQ29udHJvbCBbbmdTdHlsZV09XCJ7J2Rpc3BsYXknOiAnbm9uZSd9XCIgbW9kZT1cImJhc2ljXCIgW2Nob29zZUxhYmVsXT1cImNob29zZUxhYmVsXCIgbmFtZT1cImZpbGVcIlxyXG4gICAgW3VybF09XCJhcGlVcGxvYWRVcmxcIiBbbWF4RmlsZVNpemVdPVwibWF4RmlsZVNpemVcIiBhdXRvPVwidHJ1ZVwiXHJcbiAgICBbaW52YWxpZEZpbGVTaXplTWVzc2FnZVN1bW1hcnldPVwiaW52YWxpZEZpbGVTaXplTWVzc2FnZVN1bW1hcnlcIlxyXG4gICAgW2ludmFsaWRGaWxlU2l6ZU1lc3NhZ2VEZXRhaWxdPVwiaW52YWxpZEZpbGVTaXplTWVzc2FnZURldGFpbFwiXHJcbiAgICBbaW52YWxpZEZpbGVUeXBlTWVzc2FnZVN1bW1hcnldPVwiaW52YWxpZEZpbGVUeXBlTWVzc2FnZVN1bW1hcnlcIlxyXG4gICAgW2ludmFsaWRGaWxlVHlwZU1lc3NhZ2VEZXRhaWxdPVwiaW52YWxpZEZpbGVUeXBlTWVzc2FnZURldGFpbFwiXHJcbiAgICBbaW52YWxpZEZpbGVMaW1pdE1lc3NhZ2VTdW1tYXJ5XT1cImludmFsaWRGaWxlTGltaXRNZXNzYWdlU3VtbWFyeVwiXHJcbiAgICBbaW52YWxpZEZpbGVMaW1pdE1lc3NhZ2VEZXRhaWxdPVwiaW52YWxpZEZpbGVMaW1pdE1lc3NhZ2VEZXRhaWxcIiAob25Qcm9ncmVzcyk9XCJvblVwbG9hZFByb2dyZXNzKCRldmVudClcIlxyXG4gICAgKG9uQmVmb3JlVXBsb2FkKT1cIm9uQmVmb3JlVXBsb2FkKCRldmVudClcIiAob25TZWxlY3QpPVwiaGFuZGxlU2VsZWN0RmlsZSgkZXZlbnQpXCIgKG9uVXBsb2FkKT1cIm9uVXBsb2FkZWQoJGV2ZW50KVwiXHJcbiAgICBbYWNjZXB0XT1cImNvbnRyb2wgPyBjb250cm9sLmFjY2VwdDogbnVsbFwiPlxyXG48L3AtZmlsZVVwbG9hZD5cclxuPHAtY29udGV4dE1lbnUgI2NvbnRleHRNZW51IFthcHBlbmRUb109XCInYm9keSdcIiBbbW9kZWxdPVwiZGF0YS5pdGVtc01lbnVGaWxlXCIgc3R5bGVDbGFzcz1cImZtLWNvbnRleHRNZW51LXBhbmVsXCI+XHJcbjwvcC1jb250ZXh0TWVudT5cclxuXHJcbjwhLS0gVOG6oW8gbeG7m2kvIMSR4buVaSB0w6puIHRoxrAgbeG7pWMgLS0+XHJcbjx0bi1kaWFsb2cgKm5nSWY9XCJmb3Jtcy5jcmVhdGVGb2xkZXIuc2hvd1wiICNkaWFsb2cgW3N0eWxlQ2xhc3NdPVwiJ2FkZHJlc3MtZm9ybSdcIlxyXG4gICAgW2hlYWRlcl09XCJmb3Jtcy5jcmVhdGVGb2xkZXIuaGVhZGVyIHwgdHJhbnNsYXRlXCIgW3BvcHVwU2l6ZV09XCJmb3Jtc1tmb3JtSWRzLmNyZWF0ZUZvbGRlcl0ucG9wdXBTaXplXCJcclxuICAgIChvbkhpZGUpPVwib25DYW5jZWxGb3JtKGZvcm1JZHMuY3JlYXRlRm9sZGVyKVwiPlxyXG4gICAgPGZvbGRlci1mb3JtICNmb3JtQmFzZSBbcGFyZW50TW9kZWxdPVwibW9kZWxcIiBbcGFyZW50Q29udGV4dF09XCJjb250ZXh0XCJcclxuICAgICAgICBbbW9kZWxdPVwiZm9ybXNbZm9ybUlkcy5jcmVhdGVGb2xkZXJdLmZvcm1EYXRhXCIgKG9uU2F2ZWQpPVwib25TYXZlZEZvcm0oZm9ybUlkcy5jcmVhdGVGb2xkZXIpXCJcclxuICAgICAgICAob25DYW5jZWwpPVwib25DYW5jZWxGb3JtKGZvcm1JZHMuY3JlYXRlRm9sZGVyKVwiPlxyXG4gICAgPC9mb2xkZXItZm9ybT5cclxuPC90bi1kaWFsb2c+XHJcblxyXG48IS0tIMSQ4buVaSB0w6puIGZpbGUgLS0+XHJcbjx0bi1kaWFsb2cgKm5nSWY9XCJmb3Jtcy5yZW5hbWVGaWxlLnNob3dcIiAjZGlhbG9nIFtzdHlsZUNsYXNzXT1cIidhZGRyZXNzLWZvcm0nXCJcclxuICAgIFtoZWFkZXJdPVwiZm9ybXMucmVuYW1lRmlsZS5oZWFkZXIgfCB0cmFuc2xhdGVcIiBbcG9wdXBTaXplXT1cImZvcm1zW2Zvcm1JZHMucmVuYW1lRmlsZV0ucG9wdXBTaXplXCJcclxuICAgIChvbkhpZGUpPVwib25DYW5jZWxGb3JtKGZvcm1JZHMucmVuYW1lRmlsZSlcIj5cclxuICAgIDxmaWxlLWZvcm0gI2Zvcm1CYXNlIFtwYXJlbnRNb2RlbF09XCJtb2RlbFwiIFtwYXJlbnRDb250ZXh0XT1cImNvbnRleHRcIiBbbW9kZWxdPVwiZm9ybXNbZm9ybUlkcy5yZW5hbWVGaWxlXS5mb3JtRGF0YVwiXHJcbiAgICAgICAgKG9uU2F2ZWQpPVwib25TYXZlZEZvcm0oZm9ybUlkcy5yZW5hbWVGaWxlKVwiIChvbkNhbmNlbCk9XCJvbkNhbmNlbEZvcm0oZm9ybUlkcy5yZW5hbWVGaWxlKVwiPlxyXG4gICAgPC9maWxlLWZvcm0+XHJcbjwvdG4tZGlhbG9nPlxyXG5cclxuPCEtLSBYZW0gZmlsZSB0cuG7sWMgdHV54bq/biAtLT5cclxuPGZpbGUtdmlld2VyICpuZ0lmPVwiZm9ybXMuZmlsZVZpZXdlci5zaG93XCIgW3BhcmVudE1vZGVsXT1cIm1vZGVsXCIgW3BhcmVudENvbnRleHRdPVwiY29udGV4dFwiIFtyZWFkb25seV09XCJyZWFkb25seVwiXHJcbiAgICBbbW9kZWxdPVwiZm9ybXMuZmlsZVZpZXdlci5mb3JtRGF0YVwiIChvbkNsb3NlKT1cImNsb3NlRmlsZVZpZXdlcigpXCI+XHJcbjwvZmlsZS12aWV3ZXI+XHJcblxyXG48IS0tIFhlbSBwaGnDqm4gYuG6o24gLS0+XHJcbjx0bi1kaWFsb2cgKm5nSWY9XCJmb3Jtcy5maWxlVmVyc2lvbkxpc3Quc2hvd1wiICNkaWFsb2cgW3N0eWxlQ2xhc3NdPVwiJ2FkZHJlc3MtZm9ybSdcIlxyXG4gICAgW2hlYWRlcl09XCJmb3Jtcy5maWxlVmVyc2lvbkxpc3QuaGVhZGVyIHwgdHJhbnNsYXRlXCIgW3BvcHVwU2l6ZV09XCJmb3Jtc1tmb3JtSWRzLmZpbGVWZXJzaW9uTGlzdF0ucG9wdXBTaXplXCJcclxuICAgIChvbkhpZGUpPVwib25DYW5jZWxGb3JtKGZvcm1JZHMuZmlsZVZlcnNpb25MaXN0KVwiPlxyXG4gICAgPGZpbGUtdmVyc2lvbi1saXN0ICpuZ0lmPVwiZm9ybXMuZmlsZVZlcnNpb25MaXN0LnNob3dcIiBbcGFyZW50TW9kZWxdPVwibW9kZWxcIiBbcGFyZW50Q29udGV4dF09XCJjb250ZXh0XCJcclxuICAgICAgICBbZmlsZUlkXT1cImZvcm1zW2Zvcm1JZHMuZmlsZVZlcnNpb25MaXN0XS5maWxlSWRcIiBbcmVhZG9ubHldPVwicmVhZG9ubHlcIj5cclxuICAgIDwvZmlsZS12ZXJzaW9uLWxpc3Q+XHJcbjwvdG4tZGlhbG9nPlxyXG5cclxuPHRuLWRpYWxvZyAqbmdJZj1cInNob3dBdHRhY2hMaW5rQm94XCIgI2RpYWxvZzIgW21heGltaXphYmxlXT1cImZhbHNlXCIgW2hlYWRlcl09XCInTmjhuq1wIGxpw6puIGvhur90JyB8IHRyYW5zbGF0ZVwiXHJcbiAgICBbcG9wdXBTaXplXT1cInsgd2lkdGg6IDYwMCwgaGVpZ2h0OiA1MH1cIiAob25IaWRlKT1cInNob3dBdHRhY2hMaW5rQm94ID0gZmFsc2U7IHR5cGVkTGluaz0nJ1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cInAtY29sLTEyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInAtZ3JpZFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC1tZC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0ICNpbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiTmjhuq1wIGxpw6puIGvhur90IHNhbyBjaMOpcCB04burIHThu4dwIHRpbiBraMOhYy4uLlwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImFkZEF0dGFjaExpbmsoKVwiIHBJbnB1dFRleHQgWyhuZ01vZGVsKV09XCJ0eXBlZExpbmtcIiBjbGFzcz1cInAtY29sLTEyXCIgLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLW1kLTJcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJhZGRBdHRhY2hMaW5rKClcIiBbZGlzYWJsZWRdPVwidHlwZWRMaW5rICE9ICcnPyBudWxsIDogdHJ1ZVwiIHBCdXR0b25cclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtYnV0dG9uLXByaW1hcnkgcC1jb2wtMTJcIiBsYWJlbD1cIk9rXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8YWZ0ZXItdmlldy1jaGVja2VkIChsb2FkZWQpPVwiZm9jdXNJbnB1dChpbnB1dClcIj48L2FmdGVyLXZpZXctY2hlY2tlZD5cclxuPC90bi1kaWFsb2c+XHJcblxyXG48dG4tZGlhbG9nICNkaWFsb2czICpuZ0lmPVwic2hvd1RhaUxpZXVEdW5nQ2h1bmdcIiBbaGVhZGVyXT1cIidUw6BpIGxp4buHdScgfHRyYW5zbGF0ZVwiXHJcbiAgICBbcG9wdXBTaXplXT1cInsgd2lkdGg6MTAyNCwgaGVpZ2h0OiA4MDAgfVwiIChvbkhpZGUpPVwic2hvd1RhaUxpZXVEdW5nQ2h1bmcgPSBmYWxzZVwiPlxyXG4gICAgPGZpbGUtdGFpLWxpZXUgI2Zvcm1CYXNlIFtvcmlnaW5hbEZvbGRlcklkXT1cImRhdGEuY3VycmVudEZvbGRlcklkXCJcclxuICAgICAgICAob25TYXZlZCk9XCJzaG93VGFpTGlldUR1bmdDaHVuZyA9IGZhbHNlOyB0aGlzLl90cmlnZ2VyUHJvY2Vzc0RhdGEoKVwiIChvbkNhbmNlbCk9XCJzaG93VGFpTGlldUR1bmdDaHVuZyA9IGZhbHNlXCI+XHJcbiAgICA8L2ZpbGUtdGFpLWxpZXU+XHJcbjwvdG4tZGlhbG9nPlxyXG5cclxuPCEtLVxyXG5cclxuPHNoYXJlLWZpbGUgKm5nSWY9XCJmb3Jtcy5zaGFyZUZpbGUuc2hvd1wiIFtwYXJlbnREYXRhTW9kZWxdPVwibW9kZWxcIiBbcGFyZW50RGF0YUNvbnRleHRdPVwiY29udGV4dFwiXHJcbiAgICBbbW9kZWxdPVwiZm9ybXMuc2hhcmVGaWxlLmZvcm1EYXRhXCI+XHJcbjwvc2hhcmUtZmlsZT5cclxuXHJcbjxzaGFyZS1mb2xkZXIgKm5nSWY9XCJmb3Jtcy5zaGFyZUZvbGRlci5zaG93XCIgW3BhcmVudERhdGFNb2RlbF09XCJtb2RlbFwiIFtwYXJlbnREYXRhQ29udGV4dF09XCJjb250ZXh0XCJcclxuICAgIFttb2RlbF09XCJmb3Jtcy5zaGFyZUZvbGRlci5mb3JtRGF0YVwiPlxyXG48L3NoYXJlLWZvbGRlcj5cclxuIC0tPlxyXG5cclxuPCEtLSBYZW0gY2jhu68ga8O9IHPhu5EgLS0+XHJcbjx0bi1kaWFsb2cgKm5nSWY9XCJmb3Jtcy5zaWduYXR1cmVEZXRhaWwuc2hvd1wiICNkaWFsb2cgW3N0eWxlQ2xhc3NdPVwiJ2FkZHJlc3MtZm9ybSdcIlxyXG4gICAgW2hlYWRlcl09XCJmb3Jtcy5zaWduYXR1cmVEZXRhaWwuaGVhZGVyIHwgdHJhbnNsYXRlXCIgW3BvcHVwU2l6ZV09XCJmb3Jtc1tmb3JtSWRzLnNpZ25hdHVyZURldGFpbF0ucG9wdXBTaXplXCJcclxuICAgIChvbkhpZGUpPVwib25DYW5jZWxGb3JtKGZvcm1JZHMuc2lnbmF0dXJlRGV0YWlsKVwiPlxyXG4gICAgPHNpZ25hdHVyZS1kZXRhaWwgW3BhcmVudE1vZGVsXT1cIm1vZGVsXCIgW3BhcmVudENvbnRleHRdPVwiY29udGV4dFwiPlxyXG4gICAgPC9zaWduYXR1cmUtZGV0YWlsPlxyXG48L3RuLWRpYWxvZz5cclxuPCEtLUvDvSBz4buRIHNpbS0tPlxyXG48dG4tZGlhbG9nICpuZ0lmPVwiZm9ybXMua3lTb1NpbS5zaG93XCIgI2RpYWxvZyBbc3R5bGVDbGFzc109XCInYWRkcmVzcy1mb3JtJ1wiIFtoZWFkZXJdPVwiZm9ybXMua3lTb1NpbS5oZWFkZXIgfCB0cmFuc2xhdGVcIlxyXG4gICAgW3BvcHVwU2l6ZV09XCJmb3Jtcy5reVNvU2ltLnBvcHVwU2l6ZVwiIFtzaG93Rm9vdGVyXT1cInRydWVcIiAob25IaWRlKT1cIm9uQ2FuY2VsRm9ybShmb3JtSWRzLmt5U29TaW0pXCI+XHJcbiAgICA8YXBwLWZpbGUta3ktc28tc2ltICNmaWxlS3lTb1NpbSBbcGFyZW50TW9kZWxdPVwibW9kZWxcIiBbcGFyZW50Q29udGV4dF09XCJjb250ZXh0XCI+XHJcbiAgICA8L2FwcC1maWxlLWt5LXNvLXNpbT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjZm9vdGVyPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHBCdXR0b24gaWNvbj1cImZhcyBmYS1pbWFnZXNcIiBbZGlzYWJsZWRdPVwibW9kZWwuc3VibWl0dGluZ1wiIGNsYXNzPVwicC1idXR0b24tdGV4dFwiXHJcbiAgICAgICAgICAgIFtsYWJlbF09XCInQ2jhu41uIGNo4buvIGvDvScgfCB0cmFuc2xhdGVcIiAoY2xpY2spPVwiY2hvbkNodUt5KClcIj48L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBwQnV0dG9uIGljb249XCJmYXMgZmEtc2lnbmF0dXJlXCIgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0IHVpLWJ1dHRvbi1zdWNjZXNzXCJcclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm1vZGVsLnN1Ym1pdHRpbmdcIiBbbGFiZWxdPVwiJ1Ro4buxYyBoaeG7h24ga8O9JyB8IHRyYW5zbGF0ZVwiIChjbGljayk9XCJreVNvKClcIj48L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBwQnV0dG9uIGljb249XCJwaSBwaS1yZXBsYXlcIiBjbGFzcz1cInAtYnV0dG9uLXRleHQgcC1idXR0b24tc2Vjb25kYXJ5XCJcclxuICAgICAgICAgICAgW2xhYmVsXT1cIidGT1JNLkNBTkNFTCcgfCB0cmFuc2xhdGVcIiBwcmV2ZW50VGFiIChjbGljayk9XCJmb3Jtcy5reVNvU2ltLnNob3c9ZmFsc2VcIj48L2J1dHRvbj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbjwvdG4tZGlhbG9nPiJdfQ==