@smarterplan/ngx-smarterplan-core 1.4.14 → 1.4.16

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 (105) hide show
  1. package/README.md +24 -24
  2. package/esm2022/lib/components/csv-export/csv-export.component.mjs +3 -3
  3. package/esm2022/lib/components/loader/loader.component.mjs +3 -3
  4. package/esm2022/lib/components/menu-bar/avatar/avatar.component.mjs +1 -1
  5. package/esm2022/lib/components/menu-bar/menu-bar.component.mjs +3 -3
  6. package/esm2022/lib/components/menu-bar/navigation-bar/navigation-bar.component.mjs +3 -3
  7. package/esm2022/lib/components/modal-switch-visit/modal-switch-visit.component.mjs +3 -3
  8. package/esm2022/lib/components/search-bar/search-bar.component.mjs +3 -3
  9. package/esm2022/lib/components/support-modal/support-modal.component.mjs +3 -3
  10. package/esm2022/lib/config.mjs +1 -1
  11. package/esm2022/lib/helpers.service.mjs +46 -1
  12. package/esm2022/lib/matterport-extensions/nest-thermostat/CanvasImage.mjs +1 -1
  13. package/esm2022/lib/matterport-extensions/nest-thermostat/CanvasRenderer.mjs +1 -1
  14. package/esm2022/lib/matterport-extensions/nest-thermostat/NestThermostat.mjs +1 -1
  15. package/esm2022/lib/matterport-extensions/nest-thermostat/PlaneRenderer.mjs +1 -1
  16. package/esm2022/lib/matterport-extensions/scene-component/SceneComponent.mjs +1 -1
  17. package/esm2022/lib/matterport-extensions/security-camera/SecurityCamera.mjs +22 -22
  18. package/esm2022/lib/matterport-extensions/tv-player/TvPlayer.mjs +1 -1
  19. package/esm2022/lib/matterport-extensions/view-frustum-mesh/ViewFrustumMesh.mjs +22 -22
  20. package/esm2022/lib/mattertagData.mjs +1 -1
  21. package/esm2022/lib/ngx-smarterplan-core.module.mjs +1 -1
  22. package/esm2022/lib/ngx-smarterplan-core.service.mjs +1 -1
  23. package/esm2022/lib/pipes/duration-to-string.pipe.mjs +1 -1
  24. package/esm2022/lib/pipes/format-date-number-to-digits.pipe.mjs +1 -1
  25. package/esm2022/lib/pipes/safe-url.pipe.mjs +1 -1
  26. package/esm2022/lib/pipes/time-date-to-local-string.pipe.mjs +1 -1
  27. package/esm2022/lib/pipes/username-from-id.pipe.mjs +1 -1
  28. package/esm2022/lib/services/amplify-cache.service.mjs +1 -1
  29. package/esm2022/lib/services/base-tab.service.mjs +1 -1
  30. package/esm2022/lib/services/baseVisibility.service.mjs +1 -1
  31. package/esm2022/lib/services/content.service.mjs +1 -1
  32. package/esm2022/lib/services/filter.service.mjs +1 -1
  33. package/esm2022/lib/services/intervention.service.mjs +1 -1
  34. package/esm2022/lib/services/locale.service.mjs +1 -1
  35. package/esm2022/lib/services/matterport-import.service.mjs +1 -1
  36. package/esm2022/lib/services/matterport-measurement.service.mjs +1 -1
  37. package/esm2022/lib/services/matterport-navigation.service.mjs +1 -1
  38. package/esm2022/lib/services/matterport-object3d.service.mjs +1 -1
  39. package/esm2022/lib/services/matterport-pointer.service.mjs +6 -6
  40. package/esm2022/lib/services/matterport-tag-copy.service.mjs +448 -62
  41. package/esm2022/lib/services/matterport-tag.service.mjs +1 -1
  42. package/esm2022/lib/services/matterport.service.mjs +17 -17
  43. package/esm2022/lib/services/models/affectation.service.mjs +1 -1
  44. package/esm2022/lib/services/models/base-object.service.mjs +1 -1
  45. package/esm2022/lib/services/models/capture.service.mjs +1 -1
  46. package/esm2022/lib/services/models/comment.service.mjs +1 -1
  47. package/esm2022/lib/services/models/domain.service.mjs +20 -1
  48. package/esm2022/lib/services/models/equipment.service.mjs +4 -2
  49. package/esm2022/lib/services/models/event.service.mjs +1 -1
  50. package/esm2022/lib/services/models/feature.service.mjs +1 -7
  51. package/esm2022/lib/services/models/hashtag.service.mjs +1 -1
  52. package/esm2022/lib/services/models/layer.service.mjs +1 -1
  53. package/esm2022/lib/services/models/measurement.service.mjs +1 -1
  54. package/esm2022/lib/services/models/mission.service.mjs +17 -1
  55. package/esm2022/lib/services/models/navigation.service.mjs +1 -1
  56. package/esm2022/lib/services/models/node.service.mjs +1 -1
  57. package/esm2022/lib/services/models/object3D.service.mjs +1 -1
  58. package/esm2022/lib/services/models/operation.service.mjs +1 -1
  59. package/esm2022/lib/services/models/organisation.service.mjs +1 -1
  60. package/esm2022/lib/services/models/plan.service.mjs +1 -1
  61. package/esm2022/lib/services/models/poi.service.mjs +27 -27
  62. package/esm2022/lib/services/models/profile.service.mjs +1 -1
  63. package/esm2022/lib/services/models/property.service.mjs +1 -1
  64. package/esm2022/lib/services/models/space.service.mjs +25 -6
  65. package/esm2022/lib/services/models/template.service.mjs +1 -1
  66. package/esm2022/lib/services/models/ticket.service.mjs +1 -1
  67. package/esm2022/lib/services/models/visit.service.mjs +17 -5
  68. package/esm2022/lib/services/models/zone.service.mjs +1 -1
  69. package/esm2022/lib/services/navigator.service.mjs +1 -1
  70. package/esm2022/lib/services/s3.service.mjs +18 -1
  71. package/esm2022/lib/services/search.service.mjs +1 -1
  72. package/esm2022/lib/services/support.service.mjs +1 -1
  73. package/esm2022/lib/services/tag.service.mjs +16 -16
  74. package/esm2022/lib/services/threejs-import.service.mjs +151 -0
  75. package/esm2022/lib/services/threejs.service.mjs +1306 -0
  76. package/esm2022/lib/services/user.service.mjs +1 -1
  77. package/esm2022/lib/services/utils/matterport-transform.util.mjs +1 -1
  78. package/esm2022/lib/services/validators.service.mjs +1 -1
  79. package/esm2022/lib/services/viewer.service.mjs +263 -5
  80. package/esm2022/lib/services/zone-drawer.service.mjs +1 -1
  81. package/esm2022/lib/services/zoneChange.service.mjs +1 -1
  82. package/esm2022/lib/tokens/matterport-sdk-key.token.mjs +1 -1
  83. package/esm2022/lib/types.service.mjs +2 -1
  84. package/esm2022/lib/validators/email.directive.mjs +1 -1
  85. package/esm2022/lib/validators/no-empty.directive.mjs +1 -1
  86. package/esm2022/lib/validators/number.directive.mjs +1 -1
  87. package/esm2022/lib/validators/text.directive.mjs +1 -1
  88. package/esm2022/public-api.mjs +3 -1
  89. package/fesm2022/smarterplan-ngx-smarterplan-core.mjs +2759 -551
  90. package/fesm2022/smarterplan-ngx-smarterplan-core.mjs.map +1 -1
  91. package/lib/helpers.service.d.ts +43 -0
  92. package/lib/services/matterport-tag-copy.service.d.ts +137 -17
  93. package/lib/services/models/domain.service.d.ts +8 -0
  94. package/lib/services/models/feature.service.d.ts +0 -6
  95. package/lib/services/models/mission.service.d.ts +5 -0
  96. package/lib/services/models/space.service.d.ts +15 -1
  97. package/lib/services/models/visit.service.d.ts +9 -1
  98. package/lib/services/s3.service.d.ts +8 -0
  99. package/lib/services/threejs-import.service.d.ts +31 -0
  100. package/lib/services/threejs.service.d.ts +423 -0
  101. package/lib/services/viewer.service.d.ts +114 -1
  102. package/lib/types.service.d.ts +7 -1
  103. package/package.json +1 -1
  104. package/public-api.d.ts +2 -0
  105. package/src/assets/vs-app.json +67 -67
@@ -235,4 +235,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
235
235
  providedIn: "root",
236
236
  }]
237
237
  }], ctorParameters: () => [{ type: i1.EventService }, { type: i2.MissionService }] });
238
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJ2ZW50aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL3NlcnZpY2VzL2ludGVydmVudGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJDQUEyQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBUyxXQUFXLEVBQUUsU0FBUyxFQUFlLGFBQWEsRUFBK0IsTUFBTSxrQkFBa0IsQ0FBQzs7OztBQU8xSCxNQUFNLE9BQU8sbUJBQW1CO0lBU2hCO0lBQ0E7SUFUWixzQkFBc0IsR0FBRztRQUNyQixTQUFTLENBQUMsNEJBQTRCO1FBQ3RDLFNBQVMsQ0FBQyx3QkFBd0I7UUFDbEMsU0FBUyxDQUFDLFNBQVM7UUFDbkIsU0FBUyxDQUFDLHdCQUF3QjtLQUNyQyxDQUFDO0lBRUYsWUFDWSxZQUEwQixFQUMxQixjQUE4QjtRQUQ5QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7SUFDdkMsQ0FBQztJQUVKLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FDbEMsTUFBYztRQUVkLE1BQU0sTUFBTSxHQUNSLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxtQ0FBbUMsQ0FDdkQsTUFBTSxDQUFDLEVBQUUsQ0FDWixDQUFDO1FBQ04sTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQzNDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUNwRCxDQUFDO1FBQ0YsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FDcEMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLHdCQUF3QixDQUNqRSxDQUFDO1FBQ0YsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVsQyxNQUFNLGVBQWUsR0FDakIsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRWhELElBQUksZUFBZSxDQUFDLE1BQU0sS0FBSyxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ25ELE9BQU8sZUFBZSxDQUFDO1lBQzNCLENBQUM7WUFFRCxJQUFJLDBCQUEwQixHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQ2pELENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLGVBQWUsQ0FBQyxFQUFFLENBQ2hELENBQUM7WUFDRixJQUFJLFlBQVksQ0FBQztZQUNqQixJQUFJLDBCQUEwQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDMUMscUJBQXFCO2dCQUNyQiwwQkFBMEIsR0FBRyxhQUFhLENBQUM7Z0JBQzNDLG1CQUFtQjtnQkFDbkIsWUFBWSxHQUFHLElBQUksQ0FBQyw2QkFBNkIsQ0FDN0MsYUFBYSxFQUNiLElBQUksQ0FDUCxDQUFDO2dCQUNGLGVBQWU7Z0JBQ2YsZUFBZSxDQUFDLFlBQVk7b0JBQ3hCLElBQUksQ0FBQyxxQkFBcUIsQ0FDdEIsYUFBYSxFQUNiLElBQUksQ0FDUCxDQUFDO1lBQ1YsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLFlBQVksR0FBRyxJQUFJLENBQUMsNkJBQTZCLENBQzdDLDBCQUEwQixFQUMxQixlQUFlLENBQUMsRUFBRSxDQUNyQixDQUFDO2dCQUNGLGVBQWUsQ0FBQyxZQUFZO29CQUN4QixJQUFJLENBQUMscUJBQXFCLENBQ3RCLDBCQUEwQixFQUMxQixlQUFlLENBQUMsRUFBRSxDQUNyQixDQUFDO1lBQ1YsQ0FBQztZQUVELElBQUksQ0FBQyxlQUFlLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDckMsZUFBZSxDQUFDLGlCQUFpQjtvQkFDN0IsSUFBSSxDQUFDLDhCQUE4QixDQUMvQiwwQkFBMEIsQ0FDN0IsQ0FBQztZQUNWLENBQUM7WUFDRCxlQUFlLENBQUMsYUFBYTtnQkFDekIsSUFBSSxDQUFDLGtDQUFrQyxDQUNuQyxhQUFhLEVBQ2IsZUFBZSxDQUFDLEVBQUUsQ0FDckIsQ0FBQztZQUNOLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ25DLGVBQWUsQ0FBQyxlQUFlO29CQUMzQixJQUFJLENBQUMsNEJBQTRCLENBQzdCLDBCQUEwQixDQUM3QixDQUFDO1lBQ1YsQ0FBQztZQUNELGVBQWUsQ0FBQyxXQUFXO2dCQUN2QixJQUFJLENBQUMsOEJBQThCLENBQy9CLGFBQWEsRUFDYixlQUFlLENBQUMsRUFBRSxDQUNyQixDQUFDO1lBRU4sZUFBZSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7WUFDNUMsT0FBTyxlQUFlLENBQUM7UUFDM0IsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCw2QkFBNkIsQ0FDekIsYUFBc0IsRUFDdEIsU0FBaUI7UUFFakIsTUFBTSxhQUFhLEdBQUcsU0FBUztZQUMzQixDQUFDLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FDaEIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUNQLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsNEJBQTRCO2dCQUNuRCxNQUFNLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyx3QkFBd0IsQ0FBQztnQkFDdkQsTUFBTSxDQUFDLEtBQUssS0FBSyxTQUFTLENBQ2pDO1lBQ0gsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQ2hCLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FDUCxNQUFNLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyw0QkFBNEI7Z0JBQ3RELE1BQU0sQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLHdCQUF3QixDQUN6RCxDQUFDO1FBRVIsSUFBSSxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzNCLE1BQU0sZ0JBQWdCLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFDLE9BQU8sZ0JBQWdCLENBQUM7UUFDNUIsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxLQUFLLENBQUMsdUJBQXVCLENBQUMsTUFBYztRQUN4QyxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNwQyxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FDbEQsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDTCxhQUFhO1lBQ2IsNkNBQTZDO1lBQzdDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQ3BELENBQUM7WUFDRixNQUFNLGVBQWUsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDeEQsTUFBTSxhQUFhLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FDdEQsZUFBZSxDQUNsQixDQUFDO1lBQ0YsTUFBTSxlQUFlLEdBQUcsSUFBSSxhQUFhLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzlELE1BQU0sV0FBVyxHQUFHO2dCQUNoQixZQUFZLEVBQUUsYUFBYSxDQUFDLFlBQVk7Z0JBQ3hDLE9BQU8sRUFBRSxhQUFhO2dCQUN0QixPQUFPLEVBQUUsZUFBZTtnQkFDeEIsSUFBSSxFQUFFLGVBQWUsQ0FBQyxXQUFXO2FBQ3BDLENBQUM7WUFDRixPQUFPLFdBQVcsQ0FBQztRQUN2QixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELGtDQUFrQyxDQUM5QixNQUFlLEVBQ2YsU0FBaUI7UUFFakIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQy9CLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FDUCxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLHdCQUF3QjtZQUMvQyxNQUFNLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyw0QkFBNEIsQ0FBQztZQUMzRCxNQUFNLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FDakMsQ0FBQztRQUNGLE1BQU0sbUJBQW1CLEdBQ3JCLElBQUksQ0FBQyxZQUFZLENBQUMsNEJBQTRCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDbEUsSUFBSSxtQkFBbUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDakMsS0FBSyxNQUFNLEtBQUssSUFBSSxtQkFBbUIsRUFBRSxDQUFDO2dCQUN0QyxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDdEIsSUFBSSxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUM7b0JBQzNCLE1BQU07Z0JBQ1YsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELDhCQUE4QixDQUMxQixNQUFlLEVBQ2YsU0FBaUI7UUFFakIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQy9CLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FDUCxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLHdCQUF3QjtZQUMvQyxNQUFNLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyw0QkFBNEIsQ0FBQztZQUMzRCxNQUFNLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FDakMsQ0FBQztRQUNGLE1BQU0sbUJBQW1CLEdBQ3JCLElBQUksQ0FBQyxZQUFZLENBQUMsNkJBQTZCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDbkUsSUFBSSxtQkFBbUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDakMsS0FBSyxNQUFNLEtBQUssSUFBSSxtQkFBbUIsRUFBRSxDQUFDO2dCQUN0QyxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDcEIsSUFBSSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7b0JBQ3pCLE1BQU07Z0JBQ1YsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELHFCQUFxQixDQUFDLE1BQWUsRUFBRSxTQUFpQjtRQUNwRCxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxpQkFBaUI7UUFDbkMsTUFBTSxhQUFhLEdBQUcsU0FBUztZQUMzQixDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FDVCxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQ1AsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyx3QkFBd0I7Z0JBQy9DLE1BQU0sQ0FBQyxJQUFJO29CQUNQLFNBQVMsQ0FBQyw0QkFBNEIsQ0FBQztnQkFDL0MsTUFBTSxDQUFDLEtBQUssS0FBSyxTQUFTLENBQ2pDO1lBQ0gsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQ1QsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUNQLE1BQU0sQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLHdCQUF3QjtnQkFDbEQsTUFBTSxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsNEJBQTRCLENBQzdELENBQUM7UUFDUixLQUFLLE1BQU0sS0FBSyxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2hDLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNsQixRQUFRLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQztZQUNoQyxDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxlQUFlLENBQUMsTUFBTTtRQUNsQixNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUMvQixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQ1AsTUFBTSxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsNEJBQTRCO1lBQ3RELE1BQU0sQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLHdCQUF3QixDQUN6RCxDQUFDO1FBQ0YsSUFBSSxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzNCLE1BQU0sZ0JBQWdCLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFDLE9BQU8sZ0JBQWdCLENBQUM7UUFDNUIsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCwwQkFBMEIsQ0FBQyxLQUFZO1FBQ25DLE1BQU0sT0FBTyxHQUFHO1lBQ1osRUFBRSxFQUFFLEtBQUssQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSztZQUN0RCxXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7WUFDOUIsYUFBYSxFQUFFLEtBQUssQ0FBQyxhQUFhO1lBQ2xDLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxpQkFBaUI7WUFDMUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxlQUFlO1lBQ3RDLFlBQVksRUFBRSxLQUFLLENBQUMsU0FBUztZQUM3QixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7WUFDaEIsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNO1lBQ3BCLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztZQUMxQixTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7WUFDMUIsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO1NBQ0osQ0FBQztRQUN6QixPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDO0lBRUQsc0JBQXNCLENBQUMsTUFBZTtRQUNsQyxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDckIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9ELEtBQUssTUFBTSxNQUFNLElBQUksWUFBWSxFQUFFLENBQUM7WUFDaEMsSUFBSSxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ25CLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDO2dCQUM3QixNQUFNO1lBQ1YsQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDO0lBRUQsNEJBQTRCLENBQUMsTUFBZTtRQUN4QyxNQUFNLFdBQVcsR0FBWSxFQUFFLENBQUM7UUFDaEMsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0QsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyw2QkFBNkIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3RSxJQUFJLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLG1CQUFtQixFQUFFLENBQUM7WUFDakQsS0FBSyxNQUFNLE1BQU0sSUFBSSxZQUFZLEVBQUUsQ0FBQztnQkFDaEMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDekIsSUFBSSxNQUFNLENBQUMsRUFBRSxLQUFLLG1CQUFtQixDQUFDLEVBQUUsRUFBRSxDQUFDO29CQUN2QyxNQUFNO2dCQUNWLENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sV0FBVyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxNQUFlO1FBQ2pDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsNkJBQTZCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0UsSUFBSSxtQkFBbUIsQ0FBQztRQUN4QixLQUFLLE1BQU0sTUFBTSxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2hDLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3hDLG1CQUFtQixHQUFHLE1BQU0sQ0FBQztZQUNqQyxDQUFDO1lBQ0QsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLFdBQVcsQ0FBQyxPQUFPLElBQUksbUJBQW1CLEVBQUUsQ0FBQztnQkFDL0QsTUFBTTtZQUNWLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxtQkFBbUIsQ0FBQztJQUMvQixDQUFDO0lBRUQsOEJBQThCLENBQUMsTUFBZTtRQUMxQyxJQUFJLGlCQUFpQixHQUFHLElBQUksQ0FBQztRQUM3QixrRUFBa0U7UUFDbEUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyw2QkFBNkIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3RSxLQUFLLE1BQU0sTUFBTSxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2hDLElBQUksTUFBTSxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQzNCLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztnQkFDN0MsTUFBTTtZQUNWLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxpQkFBaUIsQ0FBQztJQUM3QixDQUFDO0lBRUQsNEJBQTRCLENBQUMsTUFBZTtRQUN4QyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7UUFDaEIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyw2QkFBNkIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3RSxLQUFLLE1BQU0sTUFBTSxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2hDLElBQUksTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN6QixJQUFJLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQztnQkFDOUIsTUFBTTtZQUNWLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQzt3R0FwVFEsbUJBQW1COzRHQUFuQixtQkFBbUIsY0FGaEIsTUFBTTs7NEZBRVQsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXMgKi9cclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEV2ZW50LCBFdmVudFN0YXR1cywgRXZlbnRUeXBlLCBQcmVzdGF0YWlyZSwgUHJvZmlsZUVudGl0eSwgUmVxdWVzdEludGVydmVudGlvbiwgVGlja2V0IH0gZnJvbSBcIi4uL3R5cGVzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRXZlbnRTZXJ2aWNlIH0gZnJvbSBcIi4vbW9kZWxzL2V2ZW50LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTWlzc2lvblNlcnZpY2UgfSBmcm9tIFwiLi9tb2RlbHMvbWlzc2lvbi5zZXJ2aWNlXCI7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiBcInJvb3RcIixcclxufSlcclxuZXhwb3J0IGNsYXNzIEludGVydmVudGlvblNlcnZpY2Uge1xyXG4gICAgaW50ZXJ2ZW50aW9uRXZlbnRUeXBlcyA9IFtcclxuICAgICAgICBFdmVudFR5cGUuTk9OX0NPTlRSQUNUVUFMX0lOVEVSVkVOVElPTixcclxuICAgICAgICBFdmVudFR5cGUuQ09OVFJBQ1RVQUxfSU5URVJWRU5USU9OLFxyXG4gICAgICAgIEV2ZW50VHlwZS5SRVBPUlRJTkcsXHJcbiAgICAgICAgRXZlbnRUeXBlLlJFUVVFU1RfRk9SX0lOVEVSVkVOVElPTixcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBldmVudFNlcnZpY2U6IEV2ZW50U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIG1pc3Npb25TZXJ2aWNlOiBNaXNzaW9uU2VydmljZSxcclxuICAgICkge31cclxuXHJcbiAgICBhc3luYyBnZXRSZXF1ZXN0SW50ZXJ2ZW50aW9uRnJvbVRpY2tldChcclxuICAgICAgICB0aWNrZXQ6IFRpY2tldCxcclxuICAgICk6IFByb21pc2U8UmVxdWVzdEludGVydmVudGlvbj4ge1xyXG4gICAgICAgIGNvbnN0IGV2ZW50cyA9XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZXZlbnRTZXJ2aWNlLmdldEV2ZW50c0J5VGlja2V0SURTb3J0ZWRCeURhdGVEZXNjKFxyXG4gICAgICAgICAgICAgICAgdGlja2V0LmlkLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IHJlbGF0ZWRFdmVudHMgPSBldmVudHMuZmlsdGVyKChldmVudF8pID0+XHJcbiAgICAgICAgICAgIHRoaXMuaW50ZXJ2ZW50aW9uRXZlbnRUeXBlcy5pbmNsdWRlcyhldmVudF8udHlwZSksXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBhbGxSZXF1ZXN0cyA9IHJlbGF0ZWRFdmVudHMuZmlsdGVyKFxyXG4gICAgICAgICAgICAoZXZlbnRfKSA9PiBldmVudF8udHlwZSA9PT0gRXZlbnRUeXBlLlJFUVVFU1RfRk9SX0lOVEVSVkVOVElPTixcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChhbGxSZXF1ZXN0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1vc3RSZWNlbnQgPSBhbGxSZXF1ZXN0c1swXTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvc2VkUmVxdWVzdCA9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmV2ZW50VG9SZXF1ZXN0SW50ZXJ2ZW50aW9uKG1vc3RSZWNlbnQpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNvbXBvc2VkUmVxdWVzdC5zdGF0dXMgPT09IEV2ZW50U3RhdHVzLkNBTkNFTExFRCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2VkUmVxdWVzdDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGV2ZW50c0Zvck1vc3RSZWNlbnRSZXF1ZXN0ID0gcmVsYXRlZEV2ZW50cy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAoZXZlbnQpID0+IGV2ZW50Lmdyb3VwID09PSBjb21wb3NlZFJlcXVlc3QuaWQsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGxldCBpbnRlcnZlbnRpb247XHJcbiAgICAgICAgICAgIGlmIChldmVudHNGb3JNb3N0UmVjZW50UmVxdWVzdC5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIC8vIGJhY2sgY29tcGF0aWJpbGl0eVxyXG4gICAgICAgICAgICAgICAgZXZlbnRzRm9yTW9zdFJlY2VudFJlcXVlc3QgPSByZWxhdGVkRXZlbnRzO1xyXG4gICAgICAgICAgICAgICAgLy8gZ2V0IGludGVydmVudGlvblxyXG4gICAgICAgICAgICAgICAgaW50ZXJ2ZW50aW9uID0gdGhpcy5jb21wb3NlSW50ZXJ2ZW50aW9uRm9yUmVxdWVzdChcclxuICAgICAgICAgICAgICAgICAgICByZWxhdGVkRXZlbnRzLFxyXG4gICAgICAgICAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgLy8gc2V0IGR1cmF0aW9uXHJcbiAgICAgICAgICAgICAgICBjb21wb3NlZFJlcXVlc3QucmVhbER1cmF0aW9uID1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldER1cmF0aW9uRm9yUmVxdWVzdChcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRlZEV2ZW50cyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaW50ZXJ2ZW50aW9uID0gdGhpcy5jb21wb3NlSW50ZXJ2ZW50aW9uRm9yUmVxdWVzdChcclxuICAgICAgICAgICAgICAgICAgICBldmVudHNGb3JNb3N0UmVjZW50UmVxdWVzdCxcclxuICAgICAgICAgICAgICAgICAgICBjb21wb3NlZFJlcXVlc3QuaWQsXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgY29tcG9zZWRSZXF1ZXN0LnJlYWxEdXJhdGlvbiA9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXREdXJhdGlvbkZvclJlcXVlc3QoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50c0Zvck1vc3RSZWNlbnRSZXF1ZXN0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wb3NlZFJlcXVlc3QuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFjb21wb3NlZFJlcXVlc3QuZXN0aW1hdGVTdGFydERhdGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbXBvc2VkUmVxdWVzdC5lc3RpbWF0ZVN0YXJ0RGF0ZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRNb3N0UmVjZW50RXN0aW1hdGVTdGFydERhdGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50c0Zvck1vc3RSZWNlbnRSZXF1ZXN0LFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29tcG9zZWRSZXF1ZXN0LnJlYWxTdGFydERhdGUgPVxyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRFYXJsaWVzdFJlYWxTdGFydERhdGVGb3JSZXF1ZXN0KFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbGF0ZWRFdmVudHMsXHJcbiAgICAgICAgICAgICAgICAgICAgY29tcG9zZWRSZXF1ZXN0LmlkLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKCFjb21wb3NlZFJlcXVlc3QuZXN0aW1hdGVFbmREYXRlKSB7XHJcbiAgICAgICAgICAgICAgICBjb21wb3NlZFJlcXVlc3QuZXN0aW1hdGVFbmREYXRlID1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldE1vc3RSZWNlbnRFc3RpbWF0ZUVuZERhdGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50c0Zvck1vc3RSZWNlbnRSZXF1ZXN0LFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29tcG9zZWRSZXF1ZXN0LnJlYWxFbmREYXRlID1cclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0TGF0ZXN0UmVhbEVuZERhdGVGb3JSZXF1ZXN0KFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbGF0ZWRFdmVudHMsXHJcbiAgICAgICAgICAgICAgICAgICAgY29tcG9zZWRSZXF1ZXN0LmlkLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGNvbXBvc2VkUmVxdWVzdC5pbnRlcnZlbnRpb24gPSBpbnRlcnZlbnRpb247XHJcbiAgICAgICAgICAgIHJldHVybiBjb21wb3NlZFJlcXVlc3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvc2VJbnRlcnZlbnRpb25Gb3JSZXF1ZXN0KFxyXG4gICAgICAgIHJlbGF0ZWRFdmVudHM6IEV2ZW50W10sXHJcbiAgICAgICAgcmVxdWVzdElEOiBzdHJpbmcsXHJcbiAgICApOiBFdmVudCB7XHJcbiAgICAgICAgY29uc3QgaW50ZXJ2ZW50aW9ucyA9IHJlcXVlc3RJRFxyXG4gICAgICAgICAgICA/IHJlbGF0ZWRFdmVudHMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAoZXZlbnRfKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgKGV2ZW50Xy50eXBlID09PSBFdmVudFR5cGUuTk9OX0NPTlRSQUNUVUFMX0lOVEVSVkVOVElPTiB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Xy50eXBlID09PSBFdmVudFR5cGUuQ09OVFJBQ1RVQUxfSU5URVJWRU5USU9OKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgZXZlbnRfLmdyb3VwID09PSByZXF1ZXN0SUQsXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICA6IHJlbGF0ZWRFdmVudHMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAoZXZlbnRfKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgZXZlbnRfLnR5cGUgPT09IEV2ZW50VHlwZS5OT05fQ09OVFJBQ1RVQUxfSU5URVJWRU5USU9OIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICBldmVudF8udHlwZSA9PT0gRXZlbnRUeXBlLkNPTlRSQUNUVUFMX0lOVEVSVkVOVElPTixcclxuICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICBpZiAoaW50ZXJ2ZW50aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxhc3RJbnRlcnZlbnRpb24gPSBpbnRlcnZlbnRpb25zWzBdO1xyXG4gICAgICAgICAgICByZXR1cm4gbGFzdEludGVydmVudGlvbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0UHJlc3RhdGFpcmVGb3JUaWNrZXQodGlja2V0OiBUaWNrZXQpOiBQcm9taXNlPFByZXN0YXRhaXJlPiB7XHJcbiAgICAgICAgaWYgKHRpY2tldC5hc3NpZ25lZXMuaXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBzb3J0ZWRBZmZlY3RhdGlvbnMgPSB0aWNrZXQuYXNzaWduZWVzLml0ZW1zLnNvcnQoXHJcbiAgICAgICAgICAgICAgICAoYSwgYikgPT5cclxuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZXR0aWVyL3ByZXR0aWVyXHJcbiAgICAgICAgICAgICAgICAgICAgbmV3IERhdGUoYi5jcmVhdGVkQXQpIC0gbmV3IERhdGUoYS5jcmVhdGVkQXQpLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjb25zdCBtaXNzaW9uSURwcmVzdGEgPSBzb3J0ZWRBZmZlY3RhdGlvbnNbMF0ubWlzc2lvbklEO1xyXG4gICAgICAgICAgICBjb25zdCBwcmVzdGFNaXNzaW9uID0gYXdhaXQgdGhpcy5taXNzaW9uU2VydmljZS5nZXRNaXNzaW9uKFxyXG4gICAgICAgICAgICAgICAgbWlzc2lvbklEcHJlc3RhLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjb25zdCB1c2VyUHJlc3RhdGFpcmUgPSBuZXcgUHJvZmlsZUVudGl0eShwcmVzdGFNaXNzaW9uLnVzZXIpO1xyXG4gICAgICAgICAgICBjb25zdCBwcmVzdGF0YWlyZSA9IHtcclxuICAgICAgICAgICAgICAgIG9yZ2FuaXNhdGlvbjogcHJlc3RhTWlzc2lvbi5vcmdhbmlzYXRpb24sXHJcbiAgICAgICAgICAgICAgICBtaXNzaW9uOiBwcmVzdGFNaXNzaW9uLFxyXG4gICAgICAgICAgICAgICAgcHJvZmlsZTogdXNlclByZXN0YXRhaXJlLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogdXNlclByZXN0YXRhaXJlLmRpc3BsYXlOYW1lLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXR1cm4gcHJlc3RhdGFpcmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEVhcmxpZXN0UmVhbFN0YXJ0RGF0ZUZvclJlcXVlc3QoXHJcbiAgICAgICAgZXZlbnRzOiBFdmVudFtdLFxyXG4gICAgICAgIHJlcXVlc3RJRDogc3RyaW5nLFxyXG4gICAgKTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICAgICAgbGV0IGRhdGUgPSBudWxsO1xyXG4gICAgICAgIGNvbnN0IGludGVydmVudGlvbnMgPSBldmVudHMuZmlsdGVyKFxyXG4gICAgICAgICAgICAoZXZlbnRfKSA9PlxyXG4gICAgICAgICAgICAgICAgKGV2ZW50Xy50eXBlID09PSBFdmVudFR5cGUuQ09OVFJBQ1RVQUxfSU5URVJWRU5USU9OIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRfLnR5cGUgPT09IEV2ZW50VHlwZS5OT05fQ09OVFJBQ1RVQUxfSU5URVJWRU5USU9OKSAmJlxyXG4gICAgICAgICAgICAgICAgZXZlbnRfLmdyb3VwID09PSByZXF1ZXN0SUQsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBzb3J0ZWRJbnRlcnZlbnRpb25zID1cclxuICAgICAgICAgICAgdGhpcy5ldmVudFNlcnZpY2Uuc29ydEV2ZW50c0J5Q3JlYXRlZEF0RGF0ZUFzYyhpbnRlcnZlbnRpb25zKTtcclxuICAgICAgICBpZiAoc29ydGVkSW50ZXJ2ZW50aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgZXZlbnQgb2Ygc29ydGVkSW50ZXJ2ZW50aW9ucykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LnJlYWxTdGFydERhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBkYXRlID0gZXZlbnQucmVhbFN0YXJ0RGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRMYXRlc3RSZWFsRW5kRGF0ZUZvclJlcXVlc3QoXHJcbiAgICAgICAgZXZlbnRzOiBFdmVudFtdLFxyXG4gICAgICAgIHJlcXVlc3RJRDogc3RyaW5nLFxyXG4gICAgKTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICAgICAgbGV0IGRhdGUgPSBudWxsO1xyXG4gICAgICAgIGNvbnN0IGludGVydmVudGlvbnMgPSBldmVudHMuZmlsdGVyKFxyXG4gICAgICAgICAgICAoZXZlbnRfKSA9PlxyXG4gICAgICAgICAgICAgICAgKGV2ZW50Xy50eXBlID09PSBFdmVudFR5cGUuQ09OVFJBQ1RVQUxfSU5URVJWRU5USU9OIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRfLnR5cGUgPT09IEV2ZW50VHlwZS5OT05fQ09OVFJBQ1RVQUxfSU5URVJWRU5USU9OKSAmJlxyXG4gICAgICAgICAgICAgICAgZXZlbnRfLmdyb3VwID09PSByZXF1ZXN0SUQsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBzb3J0ZWRJbnRlcnZlbnRpb25zID1cclxuICAgICAgICAgICAgdGhpcy5ldmVudFNlcnZpY2Uuc29ydEV2ZW50c0J5Q3JlYXRlZEF0RGF0ZURlc2MoaW50ZXJ2ZW50aW9ucyk7XHJcbiAgICAgICAgaWYgKHNvcnRlZEludGVydmVudGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIHNvcnRlZEludGVydmVudGlvbnMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChldmVudC5yZWFsRW5kRGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGUgPSBldmVudC5yZWFsRW5kRGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREdXJhdGlvbkZvclJlcXVlc3QoZXZlbnRzOiBFdmVudFtdLCByZXF1ZXN0SUQ6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICAgICAgbGV0IGR1cmF0aW9uID0gMDsgLy8gaW4gbWlsaXNlY29uZHNcclxuICAgICAgICBjb25zdCBpbnRlcnZlbnRpb25zID0gcmVxdWVzdElEXHJcbiAgICAgICAgICAgID8gZXZlbnRzLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgKGV2ZW50XykgPT5cclxuICAgICAgICAgICAgICAgICAgICAgIChldmVudF8udHlwZSA9PT0gRXZlbnRUeXBlLkNPTlRSQUNUVUFMX0lOVEVSVkVOVElPTiB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Xy50eXBlID09PVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFdmVudFR5cGUuTk9OX0NPTlRSQUNUVUFMX0lOVEVSVkVOVElPTikgJiZcclxuICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Xy5ncm91cCA9PT0gcmVxdWVzdElELFxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgOiBldmVudHMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAoZXZlbnRfKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgZXZlbnRfLnR5cGUgPT09IEV2ZW50VHlwZS5DT05UUkFDVFVBTF9JTlRFUlZFTlRJT04gfHxcclxuICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Xy50eXBlID09PSBFdmVudFR5cGUuTk9OX0NPTlRSQUNUVUFMX0lOVEVSVkVOVElPTixcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgIGZvciAoY29uc3QgZXZlbnQgb2YgaW50ZXJ2ZW50aW9ucykge1xyXG4gICAgICAgICAgICBpZiAoZXZlbnQudGltZVNwZW50KSB7XHJcbiAgICAgICAgICAgICAgICBkdXJhdGlvbiArPSBldmVudC50aW1lU3BlbnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGR1cmF0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEludGVydmVudGlvbihldmVudHMpOiBFdmVudCB8IG51bGwge1xyXG4gICAgICAgIGNvbnN0IGludGVydmVudGlvbnMgPSBldmVudHMuZmlsdGVyKFxyXG4gICAgICAgICAgICAoZXZlbnRfKSA9PlxyXG4gICAgICAgICAgICAgICAgZXZlbnRfLnR5cGUgPT09IEV2ZW50VHlwZS5OT05fQ09OVFJBQ1RVQUxfSU5URVJWRU5USU9OIHx8XHJcbiAgICAgICAgICAgICAgICBldmVudF8udHlwZSA9PT0gRXZlbnRUeXBlLkNPTlRSQUNUVUFMX0lOVEVSVkVOVElPTixcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChpbnRlcnZlbnRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgbGFzdEludGVydmVudGlvbiA9IGludGVydmVudGlvbnNbMF07XHJcbiAgICAgICAgICAgIHJldHVybiBsYXN0SW50ZXJ2ZW50aW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBldmVudFRvUmVxdWVzdEludGVydmVudGlvbihldmVudDogRXZlbnQpOiBSZXF1ZXN0SW50ZXJ2ZW50aW9uIHtcclxuICAgICAgICBjb25zdCByZXF1ZXN0ID0ge1xyXG4gICAgICAgICAgICBpZDogZXZlbnQuZ3JvdXAgPT09IFwiZGVmYXVsdFwiID8gZXZlbnQuaWQgOiBldmVudC5ncm91cCxcclxuICAgICAgICAgICAgcmVhbEVuZERhdGU6IGV2ZW50LnJlYWxFbmREYXRlLFxyXG4gICAgICAgICAgICByZWFsU3RhcnREYXRlOiBldmVudC5yZWFsU3RhcnREYXRlLFxyXG4gICAgICAgICAgICBlc3RpbWF0ZVN0YXJ0RGF0ZTogZXZlbnQuZXN0aW1hdGVTdGFydERhdGUsXHJcbiAgICAgICAgICAgIGVzdGltYXRlRW5kRGF0ZTogZXZlbnQuZXN0aW1hdGVFbmREYXRlLFxyXG4gICAgICAgICAgICByZWFsRHVyYXRpb246IGV2ZW50LnRpbWVTcGVudCxcclxuICAgICAgICAgICAgdHlwZTogZXZlbnQudHlwZSxcclxuICAgICAgICAgICAgc3RhdHVzOiBldmVudC5zdGF0dXMsXHJcbiAgICAgICAgICAgIGNyZWF0ZWRBdDogZXZlbnQuY3JlYXRlZEF0LFxyXG4gICAgICAgICAgICB1cGRhdGVkQXQ6IGV2ZW50LnVwZGF0ZWRBdCxcclxuICAgICAgICAgICAgdGlja2V0SUQ6IGV2ZW50LnRpY2tldElELFxyXG4gICAgICAgIH0gYXMgUmVxdWVzdEludGVydmVudGlvbjtcclxuICAgICAgICByZXR1cm4gcmVxdWVzdDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRNb3N0UmVjZW50VGltZVNwZW50KGV2ZW50czogRXZlbnRbXSk6IG51bWJlciB8IG51bGwge1xyXG4gICAgICAgIGxldCB0aW1lU3BlbnQgPSBudWxsO1xyXG4gICAgICAgIGNvbnN0IHNvcnRlZEV2ZW50cyA9IHRoaXMuZ2V0QWxsRXZlbnRzQWZ0ZXJMYXN0Q3JlYXRlZChldmVudHMpO1xyXG4gICAgICAgIGZvciAoY29uc3QgZXZlbnRfIG9mIHNvcnRlZEV2ZW50cykge1xyXG4gICAgICAgICAgICBpZiAoZXZlbnRfLnRpbWVTcGVudCkge1xyXG4gICAgICAgICAgICAgICAgdGltZVNwZW50ID0gZXZlbnRfLnRpbWVTcGVudDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aW1lU3BlbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QWxsRXZlbnRzQWZ0ZXJMYXN0Q3JlYXRlZChldmVudHM6IEV2ZW50W10pOiBFdmVudFtdIHtcclxuICAgICAgICBjb25zdCBldmVudHNBZnRlcjogRXZlbnRbXSA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRJbnRlcnZlbnRpb24gPSB0aGlzLmdldEN1cnJlbnRJbnRldmVudGlvbihldmVudHMpO1xyXG4gICAgICAgIGNvbnN0IHNvcnRlZEV2ZW50cyA9IHRoaXMuZXZlbnRTZXJ2aWNlLnNvcnRFdmVudHNCeUNyZWF0ZWRBdERhdGVEZXNjKGV2ZW50cyk7XHJcbiAgICAgICAgaWYgKHNvcnRlZEV2ZW50cy5sZW5ndGggPiAwICYmIGN1cnJlbnRJbnRlcnZlbnRpb24pIHtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBldmVudF8gb2Ygc29ydGVkRXZlbnRzKSB7XHJcbiAgICAgICAgICAgICAgICBldmVudHNBZnRlci5wdXNoKGV2ZW50Xyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnRfLmlkID09PSBjdXJyZW50SW50ZXJ2ZW50aW9uLmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGV2ZW50c0FmdGVyO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEN1cnJlbnRJbnRldmVudGlvbihldmVudHM6IEV2ZW50W10pOiBFdmVudCB7XHJcbiAgICAgICAgY29uc3Qgc29ydGVkRXZlbnRzID0gdGhpcy5ldmVudFNlcnZpY2Uuc29ydEV2ZW50c0J5Q3JlYXRlZEF0RGF0ZURlc2MoZXZlbnRzKTtcclxuICAgICAgICBsZXQgY3VycmVudEludGVydmVudGlvbjtcclxuICAgICAgICBmb3IgKGNvbnN0IGV2ZW50XyBvZiBzb3J0ZWRFdmVudHMpIHtcclxuICAgICAgICAgICAgaWYgKGV2ZW50Xy5zdGF0dXMgPT09IEV2ZW50U3RhdHVzLkNSRUFURUQpIHtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRJbnRlcnZlbnRpb24gPSBldmVudF87XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGV2ZW50Xy5zdGF0dXMgIT09IEV2ZW50U3RhdHVzLkNSRUFURUQgJiYgY3VycmVudEludGVydmVudGlvbikge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRJbnRlcnZlbnRpb247XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TW9zdFJlY2VudEVzdGltYXRlU3RhcnREYXRlKGV2ZW50czogRXZlbnRbXSk6IG51bWJlciB8IG51bGwge1xyXG4gICAgICAgIGxldCBlc3RpbWF0ZVN0YXJ0RGF0ZSA9IG51bGw7XHJcbiAgICAgICAgLy8gY29uc3Qgc29ydGVkRXZlbnRzID0gdGhpcy5nZXRBbGxFdmVudHNBZnRlckxhc3RDcmVhdGVkKGV2ZW50cyk7XHJcbiAgICAgICAgY29uc3Qgc29ydGVkRXZlbnRzID0gdGhpcy5ldmVudFNlcnZpY2Uuc29ydEV2ZW50c0J5Q3JlYXRlZEF0RGF0ZURlc2MoZXZlbnRzKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGV2ZW50XyBvZiBzb3J0ZWRFdmVudHMpIHtcclxuICAgICAgICAgICAgaWYgKGV2ZW50Xy5lc3RpbWF0ZVN0YXJ0RGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgZXN0aW1hdGVTdGFydERhdGUgPSBldmVudF8uZXN0aW1hdGVTdGFydERhdGU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZXN0aW1hdGVTdGFydERhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TW9zdFJlY2VudEVzdGltYXRlRW5kRGF0ZShldmVudHM6IEV2ZW50W10pOiBudW1iZXIgfCBudWxsIHtcclxuICAgICAgICBsZXQgZGF0ZSA9IG51bGw7XHJcbiAgICAgICAgY29uc3Qgc29ydGVkRXZlbnRzID0gdGhpcy5ldmVudFNlcnZpY2Uuc29ydEV2ZW50c0J5Q3JlYXRlZEF0RGF0ZURlc2MoZXZlbnRzKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGV2ZW50XyBvZiBzb3J0ZWRFdmVudHMpIHtcclxuICAgICAgICAgICAgaWYgKGV2ZW50Xy5lc3RpbWF0ZUVuZERhdGUpIHtcclxuICAgICAgICAgICAgICAgIGRhdGUgPSBldmVudF8uZXN0aW1hdGVFbmREYXRlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZ2V0TW9zdFJlY2VudFJlYWxTdGFydERhdGUoZXZlbnRzOiBFdmVudFtdKTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICAvLyAgICAgbGV0IGRhdGUgPSBudWxsO1xyXG4gICAgLy8gICAgIC8vIGNvbnN0IHNvcnRlZEV2ZW50cyA9IHRoaXMuc29ydEV2ZW50c0J5Q3JlYXRlZEF0RGF0ZURlc2MoZXZlbnRzKTtcclxuICAgIC8vICAgICBjb25zdCBzb3J0ZWRFdmVudHMgPSB0aGlzLmdldEFsbEV2ZW50c0FmdGVyTGFzdENyZWF0ZWQoZXZlbnRzKTtcclxuICAgIC8vICAgICBmb3IgKGNvbnN0IGV2ZW50XyBvZiBzb3J0ZWRFdmVudHMpIHtcclxuICAgIC8vICAgICAgICAgaWYgKGV2ZW50Xy5yZWFsU3RhcnREYXRlKSB7XHJcbiAgICAvLyAgICAgICAgICAgICBkYXRlID0gZXZlbnRfLnJlYWxTdGFydERhdGU7XHJcbiAgICAvLyAgICAgICAgICAgICBicmVhaztcclxuICAgIC8vICAgICAgICAgfVxyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgICByZXR1cm4gZGF0ZTtcclxuICAgIC8vIH1cclxuXHJcbiAgICAvLyBnZXRNb3N0UmVjZW50UmVhbFN0YXJ0RGF0ZUdsb2JhbChldmVudHM6IEV2ZW50W10pOiBudW1iZXIgfCBudWxsIHtcclxuICAgIC8vICAgICBsZXQgZGF0ZSA9IG51bGw7XHJcbiAgICAvLyAgICAgLy8gY29uc3Qgc29ydGVkRXZlbnRzID0gdGhpcy5zb3J0RXZlbnRzQnlDcmVhdGVkQXREYXRlRGVzYyhldmVudHMpO1xyXG4gICAgLy8gICAgIGNvbnN0IHNvcnRlZEV2ZW50cyA9IHRoaXMuZ2V0QWxsRXZlbnRzQWZ0ZXJMYXN0Q3JlYXRlZChldmVudHMpO1xyXG4gICAgLy8gICAgIGlmIChzb3J0ZWRFdmVudHMubGVuZ3RoID4gMCkge1xyXG4gICAgLy8gICAgICAgICBmb3IgKGNvbnN0IGV2ZW50XyBvZiBzb3J0ZWRFdmVudHMpIHtcclxuICAgIC8vICAgICAgICAgICAgIGlmIChldmVudF8ucmVhbFN0YXJ0RGF0ZSkge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGRhdGUgPSBldmVudF8ucmVhbFN0YXJ0RGF0ZTtcclxuICAgIC8vICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgIC8vICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgfVxyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgICByZXR1cm4gZGF0ZTtcclxuICAgIC8vIH1cclxufVxyXG4iXX0=
238
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJ2ZW50aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL3NlcnZpY2VzL2ludGVydmVudGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJDQUEyQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBUyxXQUFXLEVBQUUsU0FBUyxFQUFlLGFBQWEsRUFBK0IsTUFBTSxrQkFBa0IsQ0FBQzs7OztBQU8xSCxNQUFNLE9BQU8sbUJBQW1CO0lBU2hCO0lBQ0E7SUFUWixzQkFBc0IsR0FBRztRQUNyQixTQUFTLENBQUMsNEJBQTRCO1FBQ3RDLFNBQVMsQ0FBQyx3QkFBd0I7UUFDbEMsU0FBUyxDQUFDLFNBQVM7UUFDbkIsU0FBUyxDQUFDLHdCQUF3QjtLQUNyQyxDQUFDO0lBRUYsWUFDWSxZQUEwQixFQUMxQixjQUE4QjtRQUQ5QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7SUFDdkMsQ0FBQztJQUVKLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FDbEMsTUFBYztRQUVkLE1BQU0sTUFBTSxHQUNSLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxtQ0FBbUMsQ0FDdkQsTUFBTSxDQUFDLEVBQUUsQ0FDWixDQUFDO1FBQ04sTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQzNDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUNwRCxDQUFDO1FBQ0YsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FDcEMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLHdCQUF3QixD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Q0QsT0FBTyxtQkFBbUIsQ0FBQztJQUMvQixDQUFDO0lBRUQsOEJBQThCLENBQUMsTUFBZTtRQUMxQyxJQUFJLGlCQUFpQixHQUFHLElBQUksQ0FBQztRQUM3QixrRUFBa0U7UUFDbEUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyw2QkFBNkIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3RSxLQUFLLE1BQU0sTUFBTSxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2hDLElBQUksTUFBTSxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQzNCLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztnQkFDN0MsTUFBTTtZQUNWLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxpQkFBaUIsQ0FBQztJQUM3QixDQUFDO0lBRUQsNEJBQTRCLENBQUMsTUFBZTtRQUN4QyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7UUFDaEIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyw2QkFBNkIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3RSxLQUFLLE1BQU0sTUFBTSxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2hDLElBQUksTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN6QixJQUFJLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQztnQkFDOUIsTUFBTTtZQUNWLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQzt3R0FwVFEsbUJBQW1COzRHQUFuQixtQkFBbUIsY0FGaEIsTUFBTTs7NEZBRVQsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXMgKi9cbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRXZlbnQsIEV2ZW50U3RhdHVzLCBFdmVudFR5cGUsIFByZXN0YXRhaXJlLCBQcm9maWxlRW50aXR5LCBSZXF1ZXN0SW50ZXJ2ZW50aW9uLCBUaWNrZXQgfSBmcm9tIFwiLi4vdHlwZXMuc2VydmljZVwiO1xuaW1wb3J0IHsgRXZlbnRTZXJ2aWNlIH0gZnJvbSBcIi4vbW9kZWxzL2V2ZW50LnNlcnZpY2VcIjtcbmltcG9ydCB7IE1pc3Npb25TZXJ2aWNlIH0gZnJvbSBcIi4vbW9kZWxzL21pc3Npb24uc2VydmljZVwiO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogXCJyb290XCIsXG59KVxuZXhwb3J0IGNsYXNzIEludGVydmVudGlvblNlcnZpY2Uge1xuICAgIGludGVydmVudGlvbkV2ZW50VHlwZXMgPSBbXG4gICAgICAgIEV2ZW50VHlwZS5OT05fQ09OVFJBQ1RVQUxfSU5URVJWRU5USU9OLFxuICAgICAgICBFdmVudFR5cGUuQ09OVFJBQ1RVQUxfSU5URVJWRU5USU9OLFxuICAgICAgICBFdmVudFR5cGUuUkVQT1JUSU5HLFxuICAgICAgICBFdmVudFR5cGUuUkVRVUVTVF9GT1JfSU5URVJWRU5USU9OLFxuICAgIF07XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBldmVudFNlcnZpY2U6IEV2ZW50U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBtaXNzaW9uU2VydmljZTogTWlzc2lvblNlcnZpY2UsXG4gICAgKSB7fVxuXG4gICAgYXN5bmMgZ2V0UmVxdWVzdEludGVydmVudGlvbkZyb21UaWNrZXQoXG4gICAgICAgIHRpY2tldDogVGlja2V0LFxuICAgICk6IFByb21pc2U8UmVxdWVzdEludGVydmVudGlvbj4ge1xuICAgICAgICBjb25zdCBldmVudHMgPVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5ldmVudFNlcnZpY2UuZ2V0RXZlbnRzQnlUaWNrZXRJRFNvcnRlZEJ5RGF0ZURlc2MoXG4gICAgICAgICAgICAgICAgdGlja2V0LmlkLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgY29uc3QgcmVsYXRlZEV2ZW50cyA9IGV2ZW50cy5maWx0ZXIoKGV2ZW50XykgPT5cbiAgICAgICAgICAgIHRoaXMuaW50ZXJ2ZW50aW9uRXZlbnRUeXBlcy5pbmNsdWRlcyhldmVudF8udHlwZSksXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGFsbFJlcXVlc3RzID0gcmVsYXRlZEV2ZW50cy5maWx0ZXIoXG4gICAgICAgICAgICAoZXZlbnRfKSA9PiBldmVudF8udHlwZSA9PT0gRXZlbnRUeXBlLlJFUVVFU1RfRk9SX0lOVEVSVkVOVElPTixcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGFsbFJlcXVlc3RzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IG1vc3RSZWNlbnQgPSBhbGxSZXF1ZXN0c1swXTtcblxuICAgICAgICAgICAgY29uc3QgY29tcG9zZWRSZXF1ZXN0ID1cbiAgICAgICAgICAgICAgICB0aGlzLmV2ZW50VG9SZXF1ZXN0SW50ZXJ2ZW50aW9uKG1vc3RSZWNlbnQpO1xuXG4gICAgICAgICAgICBpZiAoY29tcG9zZWRSZXF1ZXN0LnN0YXR1cyA9PT0gRXZlbnRTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2VkUmVxdWVzdDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGV2ZW50c0Zvck1vc3RSZWNlbnRSZXF1ZXN0ID0gcmVsYXRlZEV2ZW50cy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKGV2ZW50KSA9PiBldmVudC5ncm91cCA9PT0gY29tcG9zZWRSZXF1ZXN0LmlkLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGxldCBpbnRlcnZlbnRpb247XG4gICAgICAgICAgICBpZiAoZXZlbnRzRm9yTW9zdFJlY2VudFJlcXVlc3QubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgLy8gYmFjayBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgICAgICAgZXZlbnRzRm9yTW9zdFJlY2VudFJlcXVlc3QgPSByZWxhdGVkRXZlbnRzO1xuICAgICAgICAgICAgICAgIC8vIGdldCBpbnRlcnZlbnRpb25cbiAgICAgICAgICAgICAgICBpbnRlcnZlbnRpb24gPSB0aGlzLmNvbXBvc2VJbnRlcnZlbnRpb25Gb3JSZXF1ZXN0KFxuICAgICAgICAgICAgICAgICAgICByZWxhdGVkRXZlbnRzLFxuICAgICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgLy8gc2V0IGR1cmF0aW9uXG4gICAgICAgICAgICAgICAgY29tcG9zZWRSZXF1ZXN0LnJlYWxEdXJhdGlvbiA9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0RHVyYXRpb25Gb3JSZXF1ZXN0KFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRlZEV2ZW50cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGludGVydmVudGlvbiA9IHRoaXMuY29tcG9zZUludGVydmVudGlvbkZvclJlcXVlc3QoXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50c0Zvck1vc3RSZWNlbnRSZXF1ZXN0LFxuICAgICAgICAgICAgICAgICAgICBjb21wb3NlZFJlcXVlc3QuaWQsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBjb21wb3NlZFJlcXVlc3QucmVhbER1cmF0aW9uID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXREdXJhdGlvbkZvclJlcXVlc3QoXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudHNGb3JNb3N0UmVjZW50UmVxdWVzdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvc2VkUmVxdWVzdC5pZCxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFjb21wb3NlZFJlcXVlc3QuZXN0aW1hdGVTdGFydERhdGUpIHtcbiAgICAgICAgICAgICAgICBjb21wb3NlZFJlcXVlc3QuZXN0aW1hdGVTdGFydERhdGUgPVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldE1vc3RSZWNlbnRFc3RpbWF0ZVN0YXJ0RGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50c0Zvck1vc3RSZWNlbnRSZXF1ZXN0LFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29tcG9zZWRSZXF1ZXN0LnJlYWxTdGFydERhdGUgPVxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0RWFybGllc3RSZWFsU3RhcnREYXRlRm9yUmVxdWVzdChcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRlZEV2ZW50cyxcbiAgICAgICAgICAgICAgICAgICAgY29tcG9zZWRSZXF1ZXN0LmlkLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoIWNvbXBvc2VkUmVxdWVzdC5lc3RpbWF0ZUVuZERhdGUpIHtcbiAgICAgICAgICAgICAgICBjb21wb3NlZFJlcXVlc3QuZXN0aW1hdGVFbmREYXRlID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRNb3N0UmVjZW50RXN0aW1hdGVFbmREYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRzRm9yTW9zdFJlY2VudFJlcXVlc3QsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb21wb3NlZFJlcXVlc3QucmVhbEVuZERhdGUgPVxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0TGF0ZXN0UmVhbEVuZERhdGVGb3JSZXF1ZXN0KFxuICAgICAgICAgICAgICAgICAgICByZWxhdGVkRXZlbnRzLFxuICAgICAgICAgICAgICAgICAgICBjb21wb3NlZFJlcXVlc3QuaWQsXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29tcG9zZWRSZXF1ZXN0LmludGVydmVudGlvbiA9IGludGVydmVudGlvbjtcbiAgICAgICAgICAgIHJldHVybiBjb21wb3NlZFJlcXVlc3Q7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29tcG9zZUludGVydmVudGlvbkZvclJlcXVlc3QoXG4gICAgICAgIHJlbGF0ZWRFdmVudHM6IEV2ZW50W10sXG4gICAgICAgIHJlcXVlc3RJRDogc3RyaW5nLFxuICAgICk6IEV2ZW50IHtcbiAgICAgICAgY29uc3QgaW50ZXJ2ZW50aW9ucyA9IHJlcXVlc3RJRFxuICAgICAgICAgICAgPyByZWxhdGVkRXZlbnRzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgIChldmVudF8pID0+XG4gICAgICAgICAgICAgICAgICAgICAgKGV2ZW50Xy50eXBlID09PSBFdmVudFR5cGUuTk9OX0NPTlRSQUNUVUFMX0lOVEVSVkVOVElPTiB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudF8udHlwZSA9PT0gRXZlbnRUeXBlLkNPTlRSQUNUVUFMX0lOVEVSVkVOVElPTikgJiZcbiAgICAgICAgICAgICAgICAgICAgICBldmVudF8uZ3JvdXAgPT09IHJlcXVlc3RJRCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiByZWxhdGVkRXZlbnRzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgIChldmVudF8pID0+XG4gICAgICAgICAgICAgICAgICAgICAgZXZlbnRfLnR5cGUgPT09IEV2ZW50VHlwZS5OT05fQ09OVFJBQ1RVQUxfSU5URVJWRU5USU9OIHx8XG4gICAgICAgICAgICAgICAgICAgICAgZXZlbnRfLnR5cGUgPT09IEV2ZW50VHlwZS5DT05UUkFDVFVBTF9JTlRFUlZFTlRJT04sXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgaWYgKGludGVydmVudGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgbGFzdEludGVydmVudGlvbiA9IGludGVydmVudGlvbnNbMF07XG4gICAgICAgICAgICByZXR1cm4gbGFzdEludGVydmVudGlvbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRQcmVzdGF0YWlyZUZvclRpY2tldCh0aWNrZXQ6IFRpY2tldCk6IFByb21pc2U8UHJlc3RhdGFpcmU+IHtcbiAgICAgICAgaWYgKHRpY2tldC5hc3NpZ25lZXMuaXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3Qgc29ydGVkQWZmZWN0YXRpb25zID0gdGlja2V0LmFzc2lnbmVlcy5pdGVtcy5zb3J0KFxuICAgICAgICAgICAgICAgIChhLCBiKSA9PlxuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmV0dGllci9wcmV0dGllclxuICAgICAgICAgICAgICAgICAgICBuZXcgRGF0ZShiLmNyZWF0ZWRBdCkgLSBuZXcgRGF0ZShhLmNyZWF0ZWRBdCksXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgbWlzc2lvbklEcHJlc3RhID0gc29ydGVkQWZmZWN0YXRpb25zWzBdLm1pc3Npb25JRDtcbiAgICAgICAgICAgIGNvbnN0IHByZXN0YU1pc3Npb24gPSBhd2FpdCB0aGlzLm1pc3Npb25TZXJ2aWNlLmdldE1pc3Npb24oXG4gICAgICAgICAgICAgICAgbWlzc2lvbklEcHJlc3RhLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IHVzZXJQcmVzdGF0YWlyZSA9IG5ldyBQcm9maWxlRW50aXR5KHByZXN0YU1pc3Npb24udXNlcik7XG4gICAgICAgICAgICBjb25zdCBwcmVzdGF0YWlyZSA9IHtcbiAgICAgICAgICAgICAgICBvcmdhbmlzYXRpb246IHByZXN0YU1pc3Npb24ub3JnYW5pc2F0aW9uLFxuICAgICAgICAgICAgICAgIG1pc3Npb246IHByZXN0YU1pc3Npb24sXG4gICAgICAgICAgICAgICAgcHJvZmlsZTogdXNlclByZXN0YXRhaXJlLFxuICAgICAgICAgICAgICAgIG5hbWU6IHVzZXJQcmVzdGF0YWlyZS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gcHJlc3RhdGFpcmU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZ2V0RWFybGllc3RSZWFsU3RhcnREYXRlRm9yUmVxdWVzdChcbiAgICAgICAgZXZlbnRzOiBFdmVudFtdLFxuICAgICAgICByZXF1ZXN0SUQ6IHN0cmluZyxcbiAgICApOiBudW1iZXIgfCBudWxsIHtcbiAgICAgICAgbGV0IGRhdGUgPSBudWxsO1xuICAgICAgICBjb25zdCBpbnRlcnZlbnRpb25zID0gZXZlbnRzLmZpbHRlcihcbiAgICAgICAgICAgIChldmVudF8pID0+XG4gICAgICAgICAgICAgICAgKGV2ZW50Xy50eXBlID09PSBFdmVudFR5cGUuQ09OVFJBQ1RVQUxfSU5URVJWRU5USU9OIHx8XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50Xy50eXBlID09PSBFdmVudFR5cGUuTk9OX0NPTlRSQUNUVUFMX0lOVEVSVkVOVElPTikgJiZcbiAgICAgICAgICAgICAgICBldmVudF8uZ3JvdXAgPT09IHJlcXVlc3RJRCxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgc29ydGVkSW50ZXJ2ZW50aW9ucyA9XG4gICAgICAgICAgICB0aGlzLmV2ZW50U2VydmljZS5zb3J0RXZlbnRzQnlDcmVhdGVkQXREYXRlQXNjKGludGVydmVudGlvbnMpO1xuICAgICAgICBpZiAoc29ydGVkSW50ZXJ2ZW50aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIHNvcnRlZEludGVydmVudGlvbnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQucmVhbFN0YXJ0RGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRlID0gZXZlbnQucmVhbFN0YXJ0RGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgIH1cblxuICAgIGdldExhdGVzdFJlYWxFbmREYXRlRm9yUmVxdWVzdChcbiAgICAgICAgZXZlbnRzOiBFdmVudFtdLFxuICAgICAgICByZXF1ZXN0SUQ6IHN0cmluZyxcbiAgICApOiBudW1iZXIgfCBudWxsIHtcbiAgICAgICAgbGV0IGRhdGUgPSBudWxsO1xuICAgICAgICBjb25zdCBpbnRlcnZlbnRpb25zID0gZXZlbnRzLmZpbHRlcihcbiAgICAgICAgICAgIChldmVudF8pID0+XG4gICAgICAgICAgICAgICAgKGV2ZW50Xy50eXBlID09PSBFdmVudFR5cGUuQ09OVFJBQ1RVQUxfSU5URVJWRU5USU9OIHx8XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50Xy50eXBlID09PSBFdmVudFR5cGUuTk9OX0NPTlRSQUNUVUFMX0lOVEVSVkVOVElPTikgJiZcbiAgICAgICAgICAgICAgICBldmVudF8uZ3JvdXAgPT09IHJlcXVlc3RJRCxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgc29ydGVkSW50ZXJ2ZW50aW9ucyA9XG4gICAgICAgICAgICB0aGlzLmV2ZW50U2VydmljZS5zb3J0RXZlbnRzQnlDcmVhdGVkQXREYXRlRGVzYyhpbnRlcnZlbnRpb25zKTtcbiAgICAgICAgaWYgKHNvcnRlZEludGVydmVudGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBldmVudCBvZiBzb3J0ZWRJbnRlcnZlbnRpb25zKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LnJlYWxFbmREYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGUgPSBldmVudC5yZWFsRW5kRGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgIH1cblxuICAgIGdldER1cmF0aW9uRm9yUmVxdWVzdChldmVudHM6IEV2ZW50W10sIHJlcXVlc3RJRDogc3RyaW5nKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IGR1cmF0aW9uID0gMDsgLy8gaW4gbWlsaXNlY29uZHNcbiAgICAgICAgY29uc3QgaW50ZXJ2ZW50aW9ucyA9IHJlcXVlc3RJRFxuICAgICAgICAgICAgPyBldmVudHMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgKGV2ZW50XykgPT5cbiAgICAgICAgICAgICAgICAgICAgICAoZXZlbnRfLnR5cGUgPT09IEV2ZW50VHlwZS5DT05UUkFDVFVBTF9JTlRFUlZFTlRJT04gfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRfLnR5cGUgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFdmVudFR5cGUuTk9OX0NPTlRSQUNUVUFMX0lOVEVSVkVOVElPTikgJiZcbiAgICAgICAgICAgICAgICAgICAgICBldmVudF8uZ3JvdXAgPT09IHJlcXVlc3RJRCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBldmVudHMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgKGV2ZW50XykgPT5cbiAgICAgICAgICAgICAgICAgICAgICBldmVudF8udHlwZSA9PT0gRXZlbnRUeXBlLkNPTlRSQUNUVUFMX0lOVEVSVkVOVElPTiB8fFxuICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Xy50eXBlID09PSBFdmVudFR5cGUuTk9OX0NPTlRSQUNUVUFMX0lOVEVSVkVOVElPTixcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgZm9yIChjb25zdCBldmVudCBvZiBpbnRlcnZlbnRpb25zKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQudGltZVNwZW50KSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb24gKz0gZXZlbnQudGltZVNwZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkdXJhdGlvbjtcbiAgICB9XG5cbiAgICBnZXRJbnRlcnZlbnRpb24oZXZlbnRzKTogRXZlbnQgfCBudWxsIHtcbiAgICAgICAgY29uc3QgaW50ZXJ2ZW50aW9ucyA9IGV2ZW50cy5maWx0ZXIoXG4gICAgICAgICAgICAoZXZlbnRfKSA9PlxuICAgICAgICAgICAgICAgIGV2ZW50Xy50eXBlID09PSBFdmVudFR5cGUuTk9OX0NPTlRSQUNUVUFMX0lOVEVSVkVOVElPTiB8fFxuICAgICAgICAgICAgICAgIGV2ZW50Xy50eXBlID09PSBFdmVudFR5cGUuQ09OVFJBQ1RVQUxfSU5URVJWRU5USU9OLFxuICAgICAgICApO1xuICAgICAgICBpZiAoaW50ZXJ2ZW50aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBsYXN0SW50ZXJ2ZW50aW9uID0gaW50ZXJ2ZW50aW9uc1swXTtcbiAgICAgICAgICAgIHJldHVybiBsYXN0SW50ZXJ2ZW50aW9uO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGV2ZW50VG9SZXF1ZXN0SW50ZXJ2ZW50aW9uKGV2ZW50OiBFdmVudCk6IFJlcXVlc3RJbnRlcnZlbnRpb24ge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0ge1xuICAgICAgICAgICAgaWQ6IGV2ZW50Lmdyb3VwID09PSBcImRlZmF1bHRcIiA/IGV2ZW50LmlkIDogZXZlbnQuZ3JvdXAsXG4gICAgICAgICAgICByZWFsRW5kRGF0ZTogZXZlbnQucmVhbEVuZERhdGUsXG4gICAgICAgICAgICByZWFsU3RhcnREYXRlOiBldmVudC5yZWFsU3RhcnREYXRlLFxuICAgICAgICAgICAgZXN0aW1hdGVTdGFydERhdGU6IGV2ZW50LmVzdGltYXRlU3RhcnREYXRlLFxuICAgICAgICAgICAgZXN0aW1hdGVFbmREYXRlOiBldmVudC5lc3RpbWF0ZUVuZERhdGUsXG4gICAgICAgICAgICByZWFsRHVyYXRpb246IGV2ZW50LnRpbWVTcGVudCxcbiAgICAgICAgICAgIHR5cGU6IGV2ZW50LnR5cGUsXG4gICAgICAgICAgICBzdGF0dXM6IGV2ZW50LnN0YXR1cyxcbiAgICAgICAgICAgIGNyZWF0ZWRBdDogZXZlbnQuY3JlYXRlZEF0LFxuICAgICAgICAgICAgdXBkYXRlZEF0OiBldmVudC51cGRhdGVkQXQsXG4gICAgICAgICAgICB0aWNrZXRJRDogZXZlbnQudGlja2V0SUQsXG4gICAgICAgIH0gYXMgUmVxdWVzdEludGVydmVudGlvbjtcbiAgICAgICAgcmV0dXJuIHJlcXVlc3Q7XG4gICAgfVxuXG4gICAgZ2V0TW9zdFJlY2VudFRpbWVTcGVudChldmVudHM6IEV2ZW50W10pOiBudW1iZXIgfCBudWxsIHtcbiAgICAgICAgbGV0IHRpbWVTcGVudCA9IG51bGw7XG4gICAgICAgIGNvbnN0IHNvcnRlZEV2ZW50cyA9IHRoaXMuZ2V0QWxsRXZlbnRzQWZ0ZXJMYXN0Q3JlYXRlZChldmVudHMpO1xuICAgICAgICBmb3IgKGNvbnN0IGV2ZW50XyBvZiBzb3J0ZWRFdmVudHMpIHtcbiAgICAgICAgICAgIGlmIChldmVudF8udGltZVNwZW50KSB7XG4gICAgICAgICAgICAgICAgdGltZVNwZW50ID0gZXZlbnRfLnRpbWVTcGVudDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGltZVNwZW50O1xuICAgIH1cblxuICAgIGdldEFsbEV2ZW50c0FmdGVyTGFzdENyZWF0ZWQoZXZlbnRzOiBFdmVudFtdKTogRXZlbnRbXSB7XG4gICAgICAgIGNvbnN0IGV2ZW50c0FmdGVyOiBFdmVudFtdID0gW107XG4gICAgICAgIGNvbnN0IGN1cnJlbnRJbnRlcnZlbnRpb24gPSB0aGlzLmdldEN1cnJlbnRJbnRldmVudGlvbihldmVudHMpO1xuICAgICAgICBjb25zdCBzb3J0ZWRFdmVudHMgPSB0aGlzLmV2ZW50U2VydmljZS5zb3J0RXZlbnRzQnlDcmVhdGVkQXREYXRlRGVzYyhldmVudHMpO1xuICAgICAgICBpZiAoc29ydGVkRXZlbnRzLmxlbmd0aCA+IDAgJiYgY3VycmVudEludGVydmVudGlvbikge1xuICAgICAgICAgICAgZm9yIChjb25zdCBldmVudF8gb2Ygc29ydGVkRXZlbnRzKSB7XG4gICAgICAgICAgICAgICAgZXZlbnRzQWZ0ZXIucHVzaChldmVudF8pO1xuICAgICAgICAgICAgICAgIGlmIChldmVudF8uaWQgPT09IGN1cnJlbnRJbnRlcnZlbnRpb24uaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBldmVudHNBZnRlcjtcbiAgICB9XG5cbiAgICBnZXRDdXJyZW50SW50ZXZlbnRpb24oZXZlbnRzOiBFdmVudFtdKTogRXZlbnQge1xuICAgICAgICBjb25zdCBzb3J0ZWRFdmVudHMgPSB0aGlzLmV2ZW50U2VydmljZS5zb3J0RXZlbnRzQnlDcmVhdGVkQXREYXRlRGVzYyhldmVudHMpO1xuICAgICAgICBsZXQgY3VycmVudEludGVydmVudGlvbjtcbiAgICAgICAgZm9yIChjb25zdCBldmVudF8gb2Ygc29ydGVkRXZlbnRzKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnRfLnN0YXR1cyA9PT0gRXZlbnRTdGF0dXMuQ1JFQVRFRCkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRJbnRlcnZlbnRpb24gPSBldmVudF87XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXZlbnRfLnN0YXR1cyAhPT0gRXZlbnRTdGF0dXMuQ1JFQVRFRCAmJiBjdXJyZW50SW50ZXJ2ZW50aW9uKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGN1cnJlbnRJbnRlcnZlbnRpb247XG4gICAgfVxuXG4gICAgZ2V0TW9zdFJlY2VudEVzdGltYXRlU3RhcnREYXRlKGV2ZW50czogRXZlbnRbXSk6IG51bWJlciB8IG51bGwge1xuICAgICAgICBsZXQgZXN0aW1hdGVTdGFydERhdGUgPSBudWxsO1xuICAgICAgICAvLyBjb25zdCBzb3J0ZWRFdmVudHMgPSB0aGlzLmdldEFsbEV2ZW50c0FmdGVyTGFzdENyZWF0ZWQoZXZlbnRzKTtcbiAgICAgICAgY29uc3Qgc29ydGVkRXZlbnRzID0gdGhpcy5ldmVudFNlcnZpY2Uuc29ydEV2ZW50c0J5Q3JlYXRlZEF0RGF0ZURlc2MoZXZlbnRzKTtcbiAgICAgICAgZm9yIChjb25zdCBldmVudF8gb2Ygc29ydGVkRXZlbnRzKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnRfLmVzdGltYXRlU3RhcnREYXRlKSB7XG4gICAgICAgICAgICAgICAgZXN0aW1hdGVTdGFydERhdGUgPSBldmVudF8uZXN0aW1hdGVTdGFydERhdGU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVzdGltYXRlU3RhcnREYXRlO1xuICAgIH1cblxuICAgIGdldE1vc3RSZWNlbnRFc3RpbWF0ZUVuZERhdGUoZXZlbnRzOiBFdmVudFtdKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgICAgIGxldCBkYXRlID0gbnVsbDtcbiAgICAgICAgY29uc3Qgc29ydGVkRXZlbnRzID0gdGhpcy5ldmVudFNlcnZpY2Uuc29ydEV2ZW50c0J5Q3JlYXRlZEF0RGF0ZURlc2MoZXZlbnRzKTtcbiAgICAgICAgZm9yIChjb25zdCBldmVudF8gb2Ygc29ydGVkRXZlbnRzKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnRfLmVzdGltYXRlRW5kRGF0ZSkge1xuICAgICAgICAgICAgICAgIGRhdGUgPSBldmVudF8uZXN0aW1hdGVFbmREYXRlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgIH1cblxuICAgIC8vIGdldE1vc3RSZWNlbnRSZWFsU3RhcnREYXRlKGV2ZW50czogRXZlbnRbXSk6IG51bWJlciB8IG51bGwge1xuICAgIC8vICAgICBsZXQgZGF0ZSA9IG51bGw7XG4gICAgLy8gICAgIC8vIGNvbnN0IHNvcnRlZEV2ZW50cyA9IHRoaXMuc29ydEV2ZW50c0J5Q3JlYXRlZEF0RGF0ZURlc2MoZXZlbnRzKTtcbiAgICAvLyAgICAgY29uc3Qgc29ydGVkRXZlbnRzID0gdGhpcy5nZXRBbGxFdmVudHNBZnRlckxhc3RDcmVhdGVkKGV2ZW50cyk7XG4gICAgLy8gICAgIGZvciAoY29uc3QgZXZlbnRfIG9mIHNvcnRlZEV2ZW50cykge1xuICAgIC8vICAgICAgICAgaWYgKGV2ZW50Xy5yZWFsU3RhcnREYXRlKSB7XG4gICAgLy8gICAgICAgICAgICAgZGF0ZSA9IGV2ZW50Xy5yZWFsU3RhcnREYXRlO1xuICAgIC8vICAgICAgICAgICAgIGJyZWFrO1xuICAgIC8vICAgICAgICAgfVxuICAgIC8vICAgICB9XG4gICAgLy8gICAgIHJldHVybiBkYXRlO1xuICAgIC8vIH1cblxuICAgIC8vIGdldE1vc3RSZWNlbnRSZWFsU3RhcnREYXRlR2xvYmFsKGV2ZW50czogRXZlbnRbXSk6IG51bWJlciB8IG51bGwge1xuICAgIC8vICAgICBsZXQgZGF0ZSA9IG51bGw7XG4gICAgLy8gICAgIC8vIGNvbnN0IHNvcnRlZEV2ZW50cyA9IHRoaXMuc29ydEV2ZW50c0J5Q3JlYXRlZEF0RGF0ZURlc2MoZXZlbnRzKTtcbiAgICAvLyAgICAgY29uc3Qgc29ydGVkRXZlbnRzID0gdGhpcy5nZXRBbGxFdmVudHNBZnRlckxhc3RDcmVhdGVkKGV2ZW50cyk7XG4gICAgLy8gICAgIGlmIChzb3J0ZWRFdmVudHMubGVuZ3RoID4gMCkge1xuICAgIC8vICAgICAgICAgZm9yIChjb25zdCBldmVudF8gb2Ygc29ydGVkRXZlbnRzKSB7XG4gICAgLy8gICAgICAgICAgICAgaWYgKGV2ZW50Xy5yZWFsU3RhcnREYXRlKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgIGRhdGUgPSBldmVudF8ucmVhbFN0YXJ0RGF0ZTtcbiAgICAvLyAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgLy8gICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgfVxuICAgIC8vICAgICB9XG4gICAgLy8gICAgIHJldHVybiBkYXRlO1xuICAgIC8vIH1cbn1cbiJdfQ==
@@ -41,4 +41,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
41
41
  providedIn: "root",
42
42
  }]
43
43
  }], ctorParameters: () => [{ type: i1.TranslateService }] });
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL3NlcnZpY2VzL2xvY2FsZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7O0FBSy9CLE1BQU0sT0FBTyxhQUFhO0lBUUg7SUFQbkIsYUFBYSxHQUFHLElBQUksQ0FBQztJQUVyQiw0QkFBNEI7SUFDcEIsZUFBZSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7SUFFeEMsVUFBVSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFakQsWUFBbUIsU0FBMkI7UUFBM0IsY0FBUyxHQUFULFNBQVMsQ0FBa0I7SUFBSSxDQUFDO0lBRW5ELEtBQUs7UUFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxNQUFNLENBQUMsSUFBWTtRQUNmLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLCtCQUErQjtJQUNuRSxDQUFDO0lBRUQsU0FBUztRQUNMLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLEVBQUUsSUFBSSxJQUFJLENBQUM7UUFDaEcsT0FBTyxXQUFXLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzdELENBQUM7d0dBaENRLGFBQWE7NEdBQWIsYUFBYSxjQUZWLE1BQU07OzRGQUVULGFBQWE7a0JBSHpCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46IFwicm9vdFwiLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTG9jYWxlU2VydmljZSB7XHJcbiAgICBjdXJyZW50TG9jYWxlID0gXCJlblwiO1xyXG5cclxuICAgIC8vIE9ic2VydmFibGUgc3RyaW5nIHNvdXJjZXNcclxuICAgIHByaXZhdGUgc2hvd01vZGFsU291cmNlID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgICBzaG93TW9kYWwkID0gdGhpcy5zaG93TW9kYWxTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHVibGljIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSkgeyB9XHJcblxyXG4gICAgbW9kYWwoKSB7XHJcbiAgICAgICAgdGhpcy5zaG93TW9kYWxTb3VyY2UubmV4dCh0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbG9hZCB0aGUgYXBwIHRvIGFub3RoZXIgbGFuZ3VhZ2UuXHJcbiAgICAgKlxyXG4gICAgICogTmF2aWdhdGlvbiBpcyByZXF1aXJlZCBiZWNhdXNlIG9mIHRoZSB3YXkgYW5ndWxhciBsb2NhbGl6ZXM6IGxvY2FsZXMgYXJlXHJcbiAgICAgKiBjb21wbGV0ZWx5IGRpZmZlcmVudCBjb21waWxhdGlvbiBidW5kbGVzLCBpbiBzZXBhcmF0ZSBkaXJlY3RvcmllcywgaGVuY2VcclxuICAgICAqIHlvdSBuZWVkIHRvIHJlbG9hZC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gbGFuZ1xyXG4gICAgICovXHJcbiAgICBjaGFuZ2UobGFuZzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJTd2l0Y2hpbmcgdG9cIiwgbGFuZyk7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50TG9jYWxlID0gbGFuZztcclxuICAgICAgICB0aGlzLnRyYW5zbGF0ZS51c2UoYF8ke2xhbmd9YCk7IC8vIGJlY2F1c2UgZmlsZXMgYXJlIFwiX2VuLmpzb25cIlxyXG4gICAgfVxyXG5cclxuICAgIGdldExvY2FsZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRMYW5nID0gdGhpcy50cmFuc2xhdGUuZ2V0Q3VycmVudExhbmcoKSB8fCB0aGlzLnRyYW5zbGF0ZS5nZXRGYWxsYmFja0xhbmcoKSB8fCBcImZyXCI7XHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRMYW5nLnJlcGxhY2UoL15bXy1dKy8sICcnKS5zdWJzdHJpbmcoMCwgMik7XHJcbiAgICB9XHJcbn1cclxuIl19
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL3NlcnZpY2VzL2xvY2FsZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7O0FBSy9CLE1BQU0sT0FBTyxhQUFhO0lBUUg7SUFQbkIsYUFBYSxHQUFHLElBQUksQ0FBQztJQUVyQiw0QkFBNEI7SUFDcEIsZUFBZSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7SUFFeEMsVUFBVSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFakQsWUFBbUIsU0FBMkI7UUFBM0IsY0FBUyxHQUFULFNBQVMsQ0FBa0I7SUFBSSxDQUFDO0lBRW5ELEtBQUs7UUFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxNQUFNLENBQUMsSUFBWTtRQUNmLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLCtCQUErQjtJQUNuRSxDQUFDO0lBRUQsU0FBUztRQUNMLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLEVBQUUsSUFBSSxJQUFJLENBQUM7UUFDaEcsT0FBTyxXQUFXLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzdELENBQUM7d0dBaENRLGFBQWE7NEdBQWIsYUFBYSxjQUZWLE1BQU07OzRGQUVULGFBQWE7a0JBSHpCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSBcIkBuZ3gtdHJhbnNsYXRlL2NvcmVcIjtcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogXCJyb290XCIsXG59KVxuZXhwb3J0IGNsYXNzIExvY2FsZVNlcnZpY2Uge1xuICAgIGN1cnJlbnRMb2NhbGUgPSBcImVuXCI7XG5cbiAgICAvLyBPYnNlcnZhYmxlIHN0cmluZyBzb3VyY2VzXG4gICAgcHJpdmF0ZSBzaG93TW9kYWxTb3VyY2UgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgc2hvd01vZGFsJCA9IHRoaXMuc2hvd01vZGFsU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSkgeyB9XG5cbiAgICBtb2RhbCgpIHtcbiAgICAgICAgdGhpcy5zaG93TW9kYWxTb3VyY2UubmV4dCh0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWxvYWQgdGhlIGFwcCB0byBhbm90aGVyIGxhbmd1YWdlLlxuICAgICAqXG4gICAgICogTmF2aWdhdGlvbiBpcyByZXF1aXJlZCBiZWNhdXNlIG9mIHRoZSB3YXkgYW5ndWxhciBsb2NhbGl6ZXM6IGxvY2FsZXMgYXJlXG4gICAgICogY29tcGxldGVseSBkaWZmZXJlbnQgY29tcGlsYXRpb24gYnVuZGxlcywgaW4gc2VwYXJhdGUgZGlyZWN0b3JpZXMsIGhlbmNlXG4gICAgICogeW91IG5lZWQgdG8gcmVsb2FkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGxhbmdcbiAgICAgKi9cbiAgICBjaGFuZ2UobGFuZzogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiU3dpdGNoaW5nIHRvXCIsIGxhbmcpO1xuICAgICAgICB0aGlzLmN1cnJlbnRMb2NhbGUgPSBsYW5nO1xuICAgICAgICB0aGlzLnRyYW5zbGF0ZS51c2UoYF8ke2xhbmd9YCk7IC8vIGJlY2F1c2UgZmlsZXMgYXJlIFwiX2VuLmpzb25cIlxuICAgIH1cblxuICAgIGdldExvY2FsZSgpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBjdXJyZW50TGFuZyA9IHRoaXMudHJhbnNsYXRlLmdldEN1cnJlbnRMYW5nKCkgfHwgdGhpcy50cmFuc2xhdGUuZ2V0RmFsbGJhY2tMYW5nKCkgfHwgXCJmclwiO1xuICAgICAgICByZXR1cm4gY3VycmVudExhbmcucmVwbGFjZSgvXltfLV0rLywgJycpLnN1YnN0cmluZygwLCAyKTtcbiAgICB9XG59XG4iXX0=
@@ -467,4 +467,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
467
467
  type: Inject,
468
468
  args: [MATTERPORT_SDK_KEY]
469
469
  }] }, { type: i1.NavigationService }, { type: i2.ZoneService }, { type: i3.ViewerService }, { type: i4.LayerService }, { type: i5.BaseUserService }, { type: i6.PlanService }] });
470
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0dGVycG9ydC1pbXBvcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1jb3JlL3NyYy9saWIvc2VydmljZXMvbWF0dGVycG9ydC1pbXBvcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0UsT0FBTyxFQUNMLFdBQVcsR0FNWixNQUFNLGtCQUFrQixDQUFDO0FBSzFCLE9BQU8sRUFDTCxjQUFjLEVBQ2QsaUJBQWlCLEVBQ2pCLDBCQUEwQixFQUMxQixpQkFBaUIsR0FDbEIsTUFBTSxjQUFjLENBQUM7Ozs7Ozs7O0FBYXRCLE1BQU0sT0FBTyx1QkFBdUI7SUF3Q2E7SUFDckM7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBN0NGLFlBQVksQ0FBQztJQUVkLEdBQUcsQ0FBTTtJQUVSLE1BQU0sQ0FBUztJQUVoQixNQUFNLENBQVM7SUFFZCxZQUFZLENBQUM7SUFFYixRQUFRLENBQVM7SUFFakIsUUFBUSxDQUFTO0lBRXpCLElBQVcsT0FBTztRQUNoQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQVcsT0FBTyxDQUFDLEtBQWE7UUFDOUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQVcsT0FBTztRQUNoQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQVcsT0FBTyxDQUFD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TUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN0QixPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuQixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLDBCQUEwQixDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQztJQUMxRSxDQUFDO3dHQXBqQlUsdUJBQXVCLGtCQXdDeEIsa0JBQWtCOzRHQXhDakIsdUJBQXVCLGNBRnRCLE1BQU07OzRGQUVQLHVCQUF1QjtrQkFIbkMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQXlDSSxNQUFNOzJCQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNQVRURVJQT1JUX1NES19LRVkgfSBmcm9tICcuLi90b2tlbnMvbWF0dGVycG9ydC1zZGsta2V5LnRva2VuJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyByZW1vdmVOdWxsS2V5c0Zyb21PYmplY3QsIHdhaXQsIHdhaXRVbnRpbCB9IGZyb20gJy4uL2hlbHBlcnMuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgTGV2ZWxTdGF0dXMsXHJcbiAgTGF5ZXIsXHJcbiAgTm9kZSxcclxuICBab25lLFxyXG4gIE5hdmlnYXRpb24sXHJcbiAgUGxhbixcclxufSBmcm9tICcuLi90eXBlcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTGF5ZXJTZXJ2aWNlIH0gZnJvbSAnLi9tb2RlbHMvbGF5ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9tb2RlbHMvbmF2aWdhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUGxhblNlcnZpY2UgfSBmcm9tICcuL21vZGVscy9wbGFuLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBab25lU2VydmljZSB9IGZyb20gJy4vbW9kZWxzL3pvbmUuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgdXBsb2FkSnNvblRvUzMsXHJcbiAgdXBsb2FkQmFzZTY0SW1hZ2UsXHJcbiAgdXBsb2FkQmFzZTY0SW1hZ2VXaXRoUmV0cnksXHJcbiAgbGlzdEZpbGVzSW5Gb2xkZXIsXHJcbn0gZnJvbSAnLi9zMy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmFzZVVzZXJTZXJ2aWNlIH0gZnJvbSAnLi91c2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBWaWV3ZXJTZXJ2aWNlIH0gZnJvbSAnLi92aWV3ZXIuc2VydmljZSc7XHJcblxyXG5kZWNsYXJlIGdsb2JhbCB7XHJcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XHJcbiAgICBNUF9TREs6IHsgY29ubmVjdDogRnVuY3Rpb24gfTtcclxuICB9XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNYXR0ZXJwb3J0SW1wb3J0U2VydmljZSB7XHJcbiAgcHJpdmF0ZSBjdXJyZW50RnJhbWU7XHJcblxyXG4gIHB1YmxpYyBzZGs6IGFueTtcclxuXHJcbiAgcHJpdmF0ZSBzd2VlcHM6IE9iamVjdDtcclxuXHJcbiAgcHVibGljIGZsb29yczogT2JqZWN0O1xyXG5cclxuICBwcml2YXRlIGN1cnJlbnRGbG9vcjtcclxuXHJcbiAgcHJpdmF0ZSBfbW9kZWxJRDogc3RyaW5nO1xyXG5cclxuICBwcml2YXRlIF9zcGFjZUlEOiBzdHJpbmc7XHJcblxyXG4gIHB1YmxpYyBnZXQgc3BhY2VJRCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NwYWNlSUQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHNwYWNlSUQodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fc3BhY2VJRCA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBtb2RlbElEKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fbW9kZWxJRDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgbW9kZWxJRCh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9tb2RlbElEID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RvcCA9IGZhbHNlO1xyXG5cclxuICBwdWJsaWMgaW1wb3J0aW5nSW1hZ2VzOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuXHJcbiAgcHVibGljIHN3ZWVwUHJvY2Vzc2VkQ291bnQ6IFN1YmplY3Q8bnVtYmVyPiA9IG5ldyBTdWJqZWN0PG51bWJlcj4oKTtcclxuXHJcbiAgcHVibGljIHRvdGFsU3dlZXBzQ291bnQ6IFN1YmplY3Q8bnVtYmVyPiA9IG5ldyBTdWJqZWN0PG51bWJlcj4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KE1BVFRFUlBPUlRfU0RLX0tFWSkgcHJpdmF0ZSByZWFkb25seSBzZGtLZXk6IHN0cmluZyxcclxuICAgIHByaXZhdGUgbmF2aWdhdGlvblNlcnZpY2U6IE5hdmlnYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB6b25lU2VydmljZTogWm9uZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHZpZXdlclNlcnZpY2U6IFZpZXdlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGxheWVyU2VydmljZTogTGF5ZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogQmFzZVVzZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwbGFuU2VydmljZTogUGxhblNlcnZpY2VcclxuICApIHtcclxuICB9XHJcblxyXG4gIGFzeW5jIGluaXRTZGtGb3JNb2RlbChtb2RlbElEOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHRoaXMuc3RvcCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIExvYWQgU0RLXHJcbiAgICBjb25zb2xlLmxvZygnTG9hZGluZyBNYXR0ZXJwb3J0IFNESycpO1xyXG4gICAgdGhpcy5tb2RlbElEID0gbW9kZWxJRDtcclxuICAgIGNvbnN0IGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xyXG4gICAgaWYgKCFpZnJhbWUpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY3JlYXRlIGlmcmFtZScpO1xyXG4gICAgfVxyXG4gICAgdGhpcy52aWV3ZXJTZXJ2aWNlLnNldFRvdXJVcmwoeyBtb2RlbDNkOiBtb2RlbElEIH0pO1xyXG4gICAgY29uc3QgdXJsID0gdGhpcy52aWV3ZXJTZXJ2aWNlLmdldFRvdXJVcmwoKTtcclxuICAgIGlmcmFtZS5zZXRBdHRyaWJ1dGUoJ3NyYycsIHVybCk7XHJcbiAgICBpZnJhbWUuYWxsb3cgPSAneHItc3BhdGlhbC10cmFja2luZyc7XHJcbiAgICBpZnJhbWUuaGVpZ2h0ID0gJzEwMCUnO1xyXG4gICAgaWZyYW1lLndpZHRoID0gJzEwMCUnO1xyXG4gICAgaWZyYW1lLmlkID0gJ3ZpZXdlci1tb2R1bGUnO1xyXG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyN2aWV3ZXItZnJhbWUnKTtcclxuICAgIGVsZW1lbnQuYXBwZW5kKGlmcmFtZSk7XHJcbiAgICB0aGlzLmN1cnJlbnRGcmFtZSA9IGlmcmFtZTtcclxuICAgIGNvbnN0IHNob3djYXNlV2luZG93ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3c7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlcywgcmVqKSA9PiB7XHJcbiAgICAgIGlmcmFtZS5hZGRFdmVudExpc3RlbmVyKFxyXG4gICAgICAgICdsb2FkJyxcclxuICAgICAgICBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB0aGlzLnNkayA9IGF3YWl0IHNob3djYXNlV2luZG93Lk1QX1NESy5jb25uZWN0KFxyXG4gICAgICAgICAgICAgIGlmcmFtZSxcclxuICAgICAgICAgICAgICB0aGlzLnNka0tleSxcclxuICAgICAgICAgICAgICAnJ1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLnNkay5GbG9vci5kYXRhLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgb25Db2xsZWN0aW9uVXBkYXRlZDogZnVuY3Rpb24gdXBkKGNvbGxlY3Rpb246IGFueSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mbG9vcnMgPSBjb2xsZWN0aW9uO1xyXG4gICAgICAgICAgICAgIH0uYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2RrLkZsb29yLmN1cnJlbnQuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgIGZ1bmN0aW9uIHVwZChjdXJyZW50Rmxvb3IpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEZsb29yID0gY3VycmVudEZsb29yO1xyXG4gICAgICAgICAgICAgIH0uYmluZCh0aGlzKVxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZGsuU3dlZXAuZGF0YS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgIG9uQ29sbGVjdGlvblVwZGF0ZWQ6IGZ1bmN0aW9uIHVwZChjb2xsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygndGhlIGVudGlyZSB1cC10by1kYXRlIGNvbGxlY3Rpb24nLCBjb2xsZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3dlZXBzID0gY29sbGVjdGlvbjtcclxuICAgICAgICAgICAgICB9LmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNkay5TZXR0aW5ncy51cGRhdGUoJ2xhYmVscycsIGZhbHNlKTtcclxuICAgICAgICAgICAgbGV0IHRpbWVvdXRFeHBpcmVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gKHRpbWVvdXRFeHBpcmVkID0gdHJ1ZSksIDcwMDApO1xyXG4gICAgICAgICAgICBhd2FpdCB3YWl0VW50aWwoXHJcbiAgICAgICAgICAgICAgKCkgPT5cclxuICAgICAgICAgICAgICAgICh0aGlzLnN3ZWVwcyAhPT0gdW5kZWZpbmVkICYmIHRoaXMuZmxvb3JzICE9PSB1bmRlZmluZWQpIHx8XHJcbiAgICAgICAgICAgICAgICB0aW1lb3V0RXhwaXJlZCA9PT0gdHJ1ZVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAodGltZW91dEV4cGlyZWQpIHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZygndGltZW91dCBpbnRpdGlhbGlzaW5nIE1hdHRlcnBvcnQnKTtcclxuICAgICAgICAgICAgICByZXR1cm4gcmVqKG5ldyBFcnJvcignZXJyb3IgaW5pdCBNYXR0ZXJwb3J0JykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdpbml0IGRvbmUnKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlcyh0cnVlKTtcclxuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcclxuICAgICAgICAgICAgcmVqKG5ldyBFcnJvcignZXJyb3IgaW5pdCBNYXR0ZXJwb3J0JykpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBpbXBvcnREYXRhKFxyXG4gICAgc3BhY2VJRDogc3RyaW5nLFxyXG4gICAgc3VyZmFjZTogbnVtYmVyLFxyXG4gICAgcmVsb2FkaW5nOiBib29sZWFuID0gZmFsc2UsXHJcbiAgICBub2RlOiBOb2RlID0gbnVsbCxcclxuICAgIG92ZXJyaWRlRXhpc3RpbmcgPSB0cnVlXHJcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBpZiAoIXRoaXMuc3dlZXBzKSB7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ25vIHN3ZWVwcyBpbml0aWFsaXplZCcpKTtcclxuICAgIH1cclxuICAgIGxldCBhcHBJc0xvYWRlZCA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuc2RrLkFwcC5zdGF0ZS5zdWJzY3JpYmUoZnVuY3Rpb24gKGFwcFN0YXRlKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdUaGUgY3VycmVudCBwaGFzZTogJywgYXBwU3RhdGUucGhhc2UpO1xyXG4gICAgICBpZiAoYXBwU3RhdGUucGhhc2UgPT09ICdhcHBwaGFzZS5wbGF5aW5nJykge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdUaGUgYXBwIGlzIHBsYXlpbmcnKTtcclxuICAgICAgICBhcHBJc0xvYWRlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGF3YWl0IHdhaXRVbnRpbCgoKSA9PiBhcHBJc0xvYWRlZCA9PT0gdHJ1ZSk7XHJcblxyXG4gICAgaWYgKHJlbG9hZGluZykge1xyXG4gICAgICBhd2FpdCB0aGlzLmltcG9ydDM2MGltYWdlcyhvdmVycmlkZUV4aXN0aW5nKTtcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNwYWNlSUQgPSBzcGFjZUlEO1xyXG4gICAgbGV0IGZsb29yWm9uZXM6IFpvbmVbXSA9IFtdO1xyXG4gICAgY29uc3Qgem9uZXMgPSBhd2FpdCB0aGlzLnpvbmVTZXJ2aWNlLmdldFpvbmVzQnlTcGFjZShzcGFjZUlEKTtcclxuICAgIGNvbnN0IG1haW5ab25lID0gem9uZXMuZmluZCgoeikgPT4gIXoucGFyZW50SUQpO1xyXG4gICAgaWYgKCFtYWluWm9uZSkge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdtaXNzaW5nIGRhdGEgKG5vIG1haW4gQnVpbGRpbmcgWm9uZSknKSk7XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZygnaW1wb3J0aW5nIGRhdGEgZnJvbSBtYXR0ZXJwb3J0Jyk7XHJcbiAgICBjb25zdCBqc29uID0gSlNPTi5zdHJpbmdpZnkoT2JqZWN0LnZhbHVlcyh0aGlzLnN3ZWVwcykpO1xyXG4gICAgYXdhaXQgdXBsb2FkSnNvblRvUzMoXHJcbiAgICAgIGB2aXNpdHMvJHt0aGlzLm1vZGVsSUR9L2ludmVudG9yeS9gLFxyXG4gICAgICBqc29uLFxyXG4gICAgICAnZGF0YS5qc29uJ1xyXG4gICAgKTtcclxuICAgIGNvbnN0IGxheWVyQnVpbGRpbmcgPSBhd2FpdCB0aGlzLmdldExheWVyQnlOYW1lKCdCVUlMRElORycpO1xyXG4gICAgY29uc3QgY3JlYXRlZERlZmF1bHRab25lID0gYXdhaXQgdGhpcy5jcmVhdGVab25lKFxyXG4gICAgICBub2RlLm1ldGFkYXRhLFxyXG4gICAgICBsYXllckJ1aWxkaW5nLmlkLFxyXG4gICAgICBzdXJmYWNlLFxyXG4gICAgICBtYWluWm9uZS5pZCxcclxuICAgICAgT2JqZWN0LmtleXModGhpcy5zd2VlcHMpLFxyXG4gICAgICBub2RlXHJcbiAgICApO1xyXG4gICAgaWYgKCFjcmVhdGVkRGVmYXVsdFpvbmUpIHtcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5mbG9vcnMpIHtcclxuICAgICAgZmxvb3Jab25lcyA9IGF3YWl0IHRoaXMuaW1wb3J0Rmxvb3JEYXRhKGNyZWF0ZWREZWZhdWx0Wm9uZS5pZCwgbm9kZSk7XHJcbiAgICB9XHJcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgT2JqZWN0LmtleXModGhpcy5zd2VlcHMpLm1hcChhc3luYyAoa2V5KSA9PiB7XHJcbiAgICAgICAgY29uc3Qgc3dlZXBJbmZvID0gdGhpcy5zd2VlcHNba2V5XTtcclxuICAgICAgICBjb25zdCBuYXZpZ2F0aW9uSW5wdXQgPSB7XHJcbiAgICAgICAgICBtYXR0ZXJwb3J0U3dlZXBJRDogc3dlZXBJbmZvLnV1aWQsXHJcbiAgICAgICAgICBwb3NpdGlvbjogSlNPTi5zdHJpbmdpZnkoc3dlZXBJbmZvLnBvc2l0aW9uKSxcclxuICAgICAgICAgIHJvdGF0aW9uOiBKU09OLnN0cmluZ2lmeShzd2VlcEluZm8ucm90YXRpb24pLFxyXG4gICAgICAgICAgbGV2ZWw6IExldmVsU3RhdHVzLkxPVyxcclxuICAgICAgICAgIG5vZGVJRDogbm9kZS5pZCxcclxuICAgICAgICAgIHNwYWNlSUQsXHJcbiAgICAgICAgfSBhcyBOYXZpZ2F0aW9uO1xyXG4gICAgICAgIGNvbnN0IG5hdiA9IGF3YWl0IHRoaXMubmF2aWdhdGlvblNlcnZpY2UuY3JlYXRlTmF2aWdhdGlvbihcclxuICAgICAgICAgIG5hdmlnYXRpb25JbnB1dFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKCFuYXYpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdjb3VsZCBjcmVhdGUgbmF2aWdhdGlvbicsIG5hdmlnYXRpb25JbnB1dC5pZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICAgIGF3YWl0IHRoaXMuaW1wb3J0MzYwaW1hZ2VzKG92ZXJyaWRlRXhpc3RpbmcpO1xyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGNyZWF0ZVpvbmUoXHJcbiAgICBuYW1lOiBzdHJpbmcsXHJcbiAgICBsYXllcklEOiBzdHJpbmcsXHJcbiAgICBzdXJmYWNlOiBudW1iZXIgPSBudWxsLFxyXG4gICAgcGFyZW50SUQ6IHN0cmluZyA9IG51bGwsXHJcbiAgICBzd2VlcHM6IHN0cmluZ1tdID0gW10sXHJcbiAgICBub2RlOiBOb2RlID0gbnVsbCxcclxuICAgIG1ldGFkYXRhOiBzdHJpbmcgPSBudWxsXHJcbiAgKTogUHJvbWlzZTxab25lPiB7XHJcbiAgICBjb25zdCB6b25lSW5wdXQgPSB7XHJcbiAgICAgIG5hbWUsXHJcbiAgICAgIHNwYWNlSUQ6IHRoaXMuc3BhY2VJRCxcclxuICAgICAgbGF5ZXJJRCxcclxuICAgICAgc3dlZXBJRHM6IHN3ZWVwcyxcclxuICAgICAgbm9kZUlEczogbm9kZSA/IFtub2RlLmlkXSA6IG51bGwsXHJcbiAgICB9IGFzIFpvbmU7XHJcbiAgICByZW1vdmVOdWxsS2V5c0Zyb21PYmplY3Qoem9uZUlucHV0KTtcclxuICAgIGlmIChzdXJmYWNlKSB7XHJcbiAgICAgIHpvbmVJbnB1dC5zdXJmYWNlID0gc3VyZmFjZTtcclxuICAgIH1cclxuICAgIGlmIChwYXJlbnRJRCkge1xyXG4gICAgICB6b25lSW5wdXQucGFyZW50SUQgPSBwYXJlbnRJRDtcclxuICAgIH1cclxuICAgIGlmIChtZXRhZGF0YSkge1xyXG4gICAgICB6b25lSW5wdXQubWV0YWRhdGEgPSBtZXRhZGF0YTtcclxuICAgIH1cclxuICAgIGNvbnN0IG5ld0xvY2FsID0gYXdhaXQgdGhpcy56b25lU2VydmljZS5jcmVhdGUoem9uZUlucHV0KTtcclxuICAgIHJldHVybiBuZXdMb2NhbDtcclxuICB9XHJcblxyXG4gIGFzeW5jIGltcG9ydDM2MGltYWdlcyhvdmVycmlkZUV4aXN0aW5nID0gdHJ1ZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc29sZS5sb2coJ0ltcG9ydGluZyAzNjAgaW1hZ2VzJyk7XHJcbiAgICB0aGlzLmltcG9ydGluZ0ltYWdlcy5uZXh0KHRydWUpO1xyXG5cclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSkgPT4ge1xyXG4gICAgICBjb25zdCBzY2FucyA9IE9iamVjdC52YWx1ZXModGhpcy5zd2VlcHMpO1xyXG4gICAgICBjb25zdCBubWJTY2FucyA9IHNjYW5zLmxlbmd0aDtcclxuXHJcbiAgICAgIHRoaXMudG90YWxTd2VlcHNDb3VudC5uZXh0KG5tYlNjYW5zKTtcclxuXHJcbiAgICAgIGNvbnN0IHN0YXJ0ID0gb3ZlcnJpZGVFeGlzdGluZyA/IDAgOiBhd2FpdCB0aGlzLmdldFVwbG9hZGVkSW1hZ2VDb3VudCh0aGlzLm1vZGVsSUQpO1xyXG5cclxuICAgICAgZm9yIChsZXQgaW5kZXggPSBzdGFydDsgaW5kZXggPCBubWJTY2FuczsgaW5kZXggKz0gMSkge1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zdG9wKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnQWJhbmRvbmluZyBpbXBvcnQgYmVjYXVzZSBpdCB3YXMgY2FuY2VsbGVkJyk7XHJcbiAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcclxuICAgICAgICAgIHRoaXMucmVtb3ZlRnJhbWUoKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgc3dlZXAgPSBzY2Fuc1tpbmRleF07XHJcbiAgICAgICAgY29uc29sZS5sb2coJ01vdmluZyB0byBzd2VlcDonLCBzd2VlcCk7XHJcblxyXG4gICAgICAgIGNvbnN0IG1vdmVJZCA9IHN3ZWVwLmlkIHx8IHN3ZWVwLnV1aWQgfHwgc3dlZXAuc2lkO1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5zZGsuU3dlZXAubW92ZVRvKG1vdmVJZCwge1xyXG4gICAgICAgICAgICByb3RhdGlvbjogeyB4OiAwLCB5OiAwIH0sXHJcbiAgICAgICAgICAgIHRyYW5zaXRpb246IHRoaXMuc2RrLkNhbWVyYSAmJiB0aGlzLnNkay5DYW1lcmEuVHJhbnNpdGlvblR5cGVcclxuICAgICAgICAgICAgICA/IHRoaXMuc2RrLkNhbWVyYS5UcmFuc2l0aW9uVHlwZS5JTlNUQU5UXHJcbiAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIHRyYW5zaXRpb25UaW1lOiAwLFxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgY29uc3QgaW1nID0gYXdhaXQgdGhpcy5jYXB0dXJlRXF1aXJlY3Rhbmd1bGFyV2l0aFJldHJ5KFxyXG4gICAgICAgICAgICB7IHdpZHRoOiAyMDQ4LCBoZWlnaHQ6IDEwMjQgfSxcclxuICAgICAgICAgICAgeyBtYXR0ZXJ0YWdzOiBmYWxzZSwgc3dlZXBzOiB0cnVlIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBtYXhBdHRlbXB0czogMyxcclxuICAgICAgICAgICAgICBpbml0aWFsQmFja29mZk1zOiA1MDAsXHJcbiAgICAgICAgICAgICAgcGVyQXR0ZW1wdFRpbWVvdXRNczogODAwMCxcclxuICAgICAgICAgICAgICBzd2VlcElkRm9yUmVhZHlDaGVjazogbW92ZUlkLFxyXG4gICAgICAgICAgICAgIHdhaXRGb3JTd2VlcFRpbWVvdXRNczogMTIwMDBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICB1cGxvYWRCYXNlNjRJbWFnZVdpdGhSZXRyeShcclxuICAgICAgICAgICAgaW1nLFxyXG4gICAgICAgICAgICBzd2VlcC51dWlkIHx8IG1vdmVJZCxcclxuICAgICAgICAgICAgYHZpc2l0cy8ke3RoaXMubW9kZWxJRH0vc3dlZXBzL2AsXHJcbiAgICAgICAgICAgICdzd2VlcCcsXHJcbiAgICAgICAgICAgIDVcclxuICAgICAgICAgICkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc3dlZXBQcm9jZXNzZWRDb3VudC5uZXh0KGluZGV4KTtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID09PSBubWJTY2FucyAtIDEpIHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnSW1wb3J0IDM2MCBkb25lJyk7XHJcbiAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICAgICAgICB0aGlzLnJlbW92ZUZyYW1lKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zdG9wID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJFcnJvciB1cGxvYWRpbmcgc2NhbiA6IFwiLCBlKTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBjYXB0dXJlIHN3ZWVwICR7bW92ZUlkfSBhZnRlciByZXRyaWVzOmAsIGVycik7XHJcbiAgICAgICAgICB0aGlzLnN3ZWVwUHJvY2Vzc2VkQ291bnQubmV4dChpbmRleCk7XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgIHRoaXMucmVtb3ZlRnJhbWUoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgY2FwdHVyZUVxdWlyZWN0YW5ndWxhcldpdGhSZXRyeShvcHRpb25zLCByZW5kZXJPcHRpb25zLCB7XHJcbiAgICBtYXhBdHRlbXB0cyA9IDMsXHJcbiAgICBpbml0aWFsQmFja29mZk1zID0gNTAwLFxyXG4gICAgcGVyQXR0ZW1wdFRpbWVvdXRNcyA9IDgwMDAsXHJcbiAgICBzd2VlcElkRm9yUmVhZHlDaGVjayA9IG51bGwsXHJcbiAgICB3YWl0Rm9yU3dlZXBUaW1lb3V0TXMgPSAxMjAwMFxyXG4gIH0gPSB7fSkge1xyXG4gICAgbGV0IGF0dGVtcHQgPSAwO1xyXG4gICAgbGV0IGxhc3RFcnJvciA9IG51bGw7XHJcblxyXG4gICAgd2hpbGUgKGF0dGVtcHQgPCBtYXhBdHRlbXB0cykge1xyXG4gICAgICBhdHRlbXB0ICs9IDE7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgaWYgKHN3ZWVwSWRGb3JSZWFkeUNoZWNrKSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLndhaXRGb3JTd2VlcFJlYWR5KHN3ZWVwSWRGb3JSZWFkeUNoZWNrLCB3YWl0Rm9yU3dlZXBUaW1lb3V0TXMpO1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5zbGVlcCgxMjApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgaW1nID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcclxuICAgICAgICAgIHRoaXMuc2RrLlJlbmRlcmVyLnRha2VFcXVpcmVjdGFuZ3VsYXIob3B0aW9ucywgcmVuZGVyT3B0aW9ucyksXHJcbiAgICAgICAgICB0aGlzLnRpbWVvdXRQcm9taXNlKHBlckF0dGVtcHRUaW1lb3V0TXMsIGB0YWtlRXF1aXJlY3Rhbmd1bGFyIHRpbWVkIG91dCBhZnRlciAke3BlckF0dGVtcHRUaW1lb3V0TXN9bXNgKVxyXG4gICAgICAgIF0pO1xyXG5cclxuICAgICAgICByZXR1cm4gaW1nO1xyXG4gICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICBsYXN0RXJyb3IgPSBlcnI7XHJcbiAgICAgICAgY29uc29sZS53YXJuKGB0YWtlRXF1aXJlY3Rhbmd1bGFyIGF0dGVtcHQgJHthdHRlbXB0fSBmYWlsZWQ6YCwgZXJyKTtcclxuXHJcbiAgICAgICAgaWYgKGF0dGVtcHQgPj0gbWF4QXR0ZW1wdHMpIHtcclxuICAgICAgICAgIHRocm93IGxhc3RFcnJvcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGJhY2tvZmYgPSBpbml0aWFsQmFja29mZk1zICogTWF0aC5wb3coMiwgYXR0ZW1wdCAtIDEpO1xyXG4gICAgICAgIGNvbnN0IGppdHRlciA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMCk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5zbGVlcChiYWNrb2ZmICsgaml0dGVyKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRocm93IGxhc3RFcnJvciB8fCBuZXcgRXJyb3IoJ2NhcHR1cmVFcXVpcmVjdGFuZ3VsYXJXaXRoUmV0cnkgZmFpbGVkIHdpdGhvdXQgZXJyb3InKTtcclxuICB9XHJcblxyXG4gIHdhaXRGb3JTd2VlcFJlYWR5KHRhcmdldElkOiBzdHJpbmcsIHRpbWVvdXRNcyA9IDEwMDAwKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBzZGsgPSB0aGlzLnNkaztcclxuXHJcbiAgICBjb25zdCBtYXRjaGVzVGFyZ2V0ID0gKGRhdGEpID0+IHtcclxuICAgICAgaWYgKCFkYXRhKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgIGNvbnN0IGZpZWxkcyA9IFtkYXRhLmlkLCBkYXRhLnV1aWQsIGRhdGEuc2lkLCBkYXRhLnVpZF07XHJcbiAgICAgIHJldHVybiBmaWVsZHMuc29tZShmID0+ICEhZiAmJiBTdHJpbmcoZikgPT09IFN0cmluZyh0YXJnZXRJZCkpO1xyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoc2RrLlN3ZWVwICYmIHNkay5Td2VlcC5jdXJyZW50ICYmIHR5cGVvZiBzZGsuU3dlZXAuY3VycmVudC53YWl0VW50aWwgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgcmV0dXJuIFByb21pc2UucmFjZShbXHJcbiAgICAgICAgc2RrLlN3ZWVwLmN1cnJlbnQud2FpdFVudGlsKChkYXRhKSA9PiBtYXRjaGVzVGFyZ2V0KGRhdGEpKSxcclxuICAgICAgICB0aGlzLnRpbWVvdXRQcm9taXNlKHRpbWVvdXRNcywgYFRpbWVvdXQgd2FpdGluZyBmb3Igc3dlZXAgJHt0YXJnZXRJZH1gKVxyXG4gICAgICBdKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2RrLlN3ZWVwICYmIHNkay5Td2VlcC5jdXJyZW50ICYmIHR5cGVvZiBzZGsuU3dlZXAuY3VycmVudC5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKG9mZikgb2ZmKCk7XHJcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBUaW1lb3V0IHdhaXRpbmcgZm9yIHN3ZWVwICR7dGFyZ2V0SWR9YCkpO1xyXG4gICAgICAgIH0sIHRpbWVvdXRNcyk7XHJcblxyXG4gICAgICAgIGxldCBvZmYgPSBudWxsO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjb25zdCBzdWJSZXN1bHQgPSBzZGsuU3dlZXAuY3VycmVudC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgaWYgKG1hdGNoZXNUYXJnZXQoZGF0YSkpIHtcclxuICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xyXG4gICAgICAgICAgICAgIHRyeSB7IGlmICh0eXBlb2Ygc3ViUmVzdWx0ID09PSAnZnVuY3Rpb24nKSBzdWJSZXN1bHQoKTsgZWxzZSBpZiAoc3ViUmVzdWx0ICYmIHR5cGVvZiBzdWJSZXN1bHQudW5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIHN1YlJlc3VsdC51bnN1YnNjcmliZSgpOyB9IGNhdGNoIChlKSB7LyppZ25vcmUqLyB9XHJcbiAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGlmICh0eXBlb2Ygc3ViUmVzdWx0ID09PSAnZnVuY3Rpb24nKSBvZmYgPSBzdWJSZXN1bHQ7XHJcbiAgICAgICAgICBlbHNlIGlmIChzdWJSZXN1bHQgJiYgdHlwZW9mIHN1YlJlc3VsdC51bnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykgb2ZmID0gKCkgPT4gc3ViUmVzdWx0LnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcclxuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ3Nkay5Td2VlcC5jdXJyZW50LnN1YnNjcmliZSBub3QgdXNhYmxlJykpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgY29uc3QgcG9sbEludGVydmFsID0gMjAwO1xyXG4gICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xyXG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoYFRpbWVvdXQgd2FpdGluZyBmb3Igc3dlZXAgJHt0YXJnZXRJZH1gKSk7XHJcbiAgICAgIH0sIHRpbWVvdXRNcyk7XHJcblxyXG4gICAgICBjb25zdCBjaGVja05vdyA9IGFzeW5jICgpID0+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgbGV0IGN1cnJlbnQgPSBudWxsO1xyXG4gICAgICAgICAgaWYgKHNkay5Td2VlcCAmJiB0eXBlb2Ygc2RrLlN3ZWVwLmdldEN1cnJlbnQgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgY3VycmVudCA9IGF3YWl0IHNkay5Td2VlcC5nZXRDdXJyZW50KCk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHNkay5Td2VlcCAmJiB0eXBlb2Ygc2RrLlN3ZWVwLmN1cnJlbnQgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgY3VycmVudCA9IGF3YWl0IHNkay5Td2VlcC5jdXJyZW50KCk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHNkay5Td2VlcCAmJiBzZGsuU3dlZXAuY3VycmVudCAmJiBzZGsuU3dlZXAuY3VycmVudC52YWx1ZSkge1xyXG4gICAgICAgICAgICBjdXJyZW50ID0gc2RrLlN3ZWVwLmN1cnJlbnQudmFsdWU7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKG1hdGNoZXNUYXJnZXQoY3VycmVudCkpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcclxuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XHJcbiAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAvLyBpZ25vcmUgYW5kIHJldHJ5IHVudGlsIHRpbWVvdXRcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcblxyXG4gICAgICBhd2FpdCBjaGVja05vdygpO1xyXG4gICAgICBjb25zdCBpbnRlcnZhbCA9IHNldEludGVydmFsKGNoZWNrTm93LCBwb2xsSW50ZXJ2YWwpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzbGVlcChtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzID0+IHNldFRpbWVvdXQocmVzLCBtcykpO1xyXG4gIH1cclxuXHJcbiAgdGltZW91dFByb21pc2UobXM6IG51bWJlciwgbWVzc2FnZTogc3RyaW5nKTogUHJvbWlzZTxuZXZlcj4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+IHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihtZXNzYWdlKSksIG1zKSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRVcGxvYWRlZEltYWdlQ291bnQobW9kZWxJRCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgaW1hZ2VzID0gYXdhaXQgbGlzdEZpbGVzSW5Gb2xkZXIoYHZpc2l0cy8ke21vZGVsSUR9L3N3ZWVwcy9gKTtcclxuICAgICAgcmV0dXJuIGltYWdlcy5sZW5ndGg7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgbW92ZVRvRmxvb3IoZmxvb3JOYW1lOiBzdHJpbmcsIG1hdHRlcnBvcnRGbG9vclNlcXVlbmNlOiBudW1iZXIgPSBudWxsKSB7XHJcbiAgICBpZiAoIXRoaXMuZmxvb3JzKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdGbG9vciBhcmUgbm90IGxvYWRlZCB5ZXQnKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IGZsb29yTWF0dGVycG9ydCA9IE9iamVjdC52YWx1ZXModGhpcy5mbG9vcnMpLmZpbmQoXHJcbiAgICAgIChmbG9vcikgPT4gZmxvb3Iuc2VxdWVuY2UgPT09IG1hdHRlcnBvcnRGbG9vclNlcXVlbmNlXHJcbiAgICApO1xyXG4gICAgaWYgKCFmbG9vck1hdHRlcnBvcnQpIHtcclxuICAgICAgZmxvb3JNYXR0ZXJwb3J0ID0gT2JqZWN0LnZhbHVlcyh0aGlzLmZsb29ycykuZmluZChcclxuICAgICAgICAoZmxvb3IpID0+IGZsb29yTmFtZS5pbmNsdWRlcyhmbG9vci5uYW1lKSAmJiBmbG9vci5uYW1lICE9ICcnXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAoIWZsb29yTWF0dGVycG9ydCkge1xyXG4gICAgICBmbG9vck1hdHRlcnBvcnQgPSBPYmplY3QudmFsdWVzKHRoaXMuZmxvb3JzKS5maW5kKChmbG9vcikgPT5cclxuICAgICAgICBmbG9vck5hbWUuaW5jbHVkZXMoZmxvb3IuaWQpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAoZmxvb3JNYXR0ZXJwb3J0KSB7XHJcbiAgICAgIGxldCByZXRyeSA9IHRydWU7XHJcbiAgICAgIHdoaWxlIChyZXRyeSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjb25zdCBmbG9vckluZGV4ID0gYXdhaXQgdGhpcy5zZGsuRmxvb3IubW92ZVRvKFxyXG4gICAgICAgICAgICBmbG9vck1hdHRlcnBvcnQuc2VxdWVuY2VcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICByZXRyeSA9IGZhbHNlO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnQ2Fubm90IG1vdmUgdG8gRmxvb3InLCBlcnJvcik7XHJcbiAgICAgICAgICBhd2FpdCB3YWl0KDEwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ05vIG1hdHRlcnBvcnQgZmxvb3IgZm91bmQgdG8gbW92ZSB0bycpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGltcG9ydEZsb29yRGF0YShcclxuICAgIGRlZmF1dFpvbmVJRDogc3RyaW5nLFxyXG4gICAgbm9kZTogTm9kZVxyXG4gICk6IFByb21pc2U8Wm9uZVtdPiB7XHJcbiAgICBjb25zdCB6b25lcyA9IFtdO1xyXG4gICAgYXdhaXQgdGhpcy5zZGsuTW9kZS5tb3ZlVG8odGhpcy5zZGsuTW9kZS5Nb2RlLkZMT09SUExBTik7XHJcbiAgICBjb25zdCBubWJGbG9vcnMgPSBPYmplY3Qua2V5cyh0aGlzLmZsb29ycykubGVuZ3RoO1xyXG4gICAgY29uc29sZS5sb2coJ1RvdGFsIG51bWJlciBvZiBmbG9vcnMnLCBubWJGbG9vcnMpO1xyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IG5tYkZsb29yczsgaW5kZXggKz0gMSkge1xyXG4gICAgICBjb25zb2xlLmxvZygnSW1wb3J0aW5nIGZsb29yJywgaW5kZXgpO1xyXG4gICAgICBhd2FpdCB0aGlzLnNkay5GbG9vci5tb3ZlVG8oaW5kZXgpLnRoZW4oYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgIGF3YWl0IHdhaXQoNzAwKTtcclxuICAgICAgICBjb25zdCB6b25lID0gYXdhaXQgdGhpcy5zYXZlRmxvb3IoZGVmYXV0Wm9uZUlELCBub2RlKTtcclxuICAgICAgICB6b25lcy5wdXNoKHpvbmUpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoem9uZXMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBzYXZlRmxvb3IoZGVmYXV0Wm9uZUlEOiBzdHJpbmcsIG5vZGU6IE5vZGUpOiBQcm9taXNlPFpvbmU+IHtcclxuICAgIGxldCBuYW1lID0gdGhpcy5jdXJyZW50Rmxvb3IuaWQ7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50Rmxvb3IubmFtZSAhPT0gJycpIHtcclxuICAgICAgbmFtZSA9IHRoaXMuY3VycmVudEZsb29yLm5hbWU7XHJcbiAgICB9XHJcbiAgICBjb25zdCBsYXllckZsb29yID0gYXdhaXQgdGhpcy5nZXRMYXllckJ5TmFtZSgnRkxPT1InKTtcclxuICAgIGNvbnN0IHN3ZWVwc0luZm8gPSBPYmplY3QudmFsdWVzKHRoaXMuc3dlZXBzKTtcclxuICAgIGNvbnN0IHN3ZWVwc0ZvckZsb29yID0gc3dlZXBzSW5mby5maWx0ZXIoXHJcbiAgICAgIChzd2VlcEluZm8pID0+IHN3ZWVwSW5mby5mbG9vckluZm8uaWQgPT09IHRoaXMuY3VycmVudEZsb29yLmlkXHJcbiAgICApO1xyXG4gICAgY29uc29sZS5sb2coJ2N1cnJlbnQgZmxvb3InLCB0aGlzLmN1cnJlbnRGbG9vcik7XHJcbiAgICBjb25zb2xlLmxvZygnc3dlZXBzIGZvciBmbG9vcicsIHN3ZWVwc0ZvckZsb29yLmxlbmd0aCk7XHJcbiAgICBjb25zdCBzd2VlcElEczogc3RyaW5nW10gPSBzd2VlcHNGb3JGbG9vci5tYXAoKHN3ZWVwKSA9PiBzd2VlcC51dWlkKTtcclxuICAgIGNvbnN0IHpvbmUgPSBhd2FpdCB0aGlzLmNyZWF0ZVpvbmUoXHJcbiAgICAgIGDDiXRhZ2UgJHtuYW1lfSAtICR7bm9kZS5tZXRhZGF0YX1gLFxyXG4gICAgICBsYXllckZsb29yLmlkLFxyXG4gICAgICBudWxsLFxyXG4gICAgICBkZWZhdXRab25lSUQsXHJcbiAgICAgIHN3ZWVwSURzLFxyXG4gICAgICBub2RlLFxyXG4gICAgICBKU09OLnN0cmluZ2lmeSh7IG1hdHRlcnBvcnRGbG9vclNlcXVlbmNlOiB0aGlzLmN1cnJlbnRGbG9vci5zZXF1ZW5jZSB9KVxyXG4gICAgKTtcclxuICAgIGNvbnN0IGJhc2U2NCA9IGF3YWl0IHRoaXMuc2RrLlJlbmRlcmVyLnRha2VTY3JlZW5TaG90KHtcclxuICAgICAgd2lkdGg6IDQwOTYsXHJcbiAgICAgIGhlaWdodDogMjA0OCxcclxuICAgIH0pO1xyXG4gICAgY29uc3Qgc3BhY2VJRHNob3J0ID0gdGhpcy5zcGFjZUlELnNsaWNlKDAsIDgpO1xyXG4gICAgYXdhaXQgdXBsb2FkQmFzZTY0SW1hZ2UoXHJcbiAgICAgIGJhc2U2NCxcclxuICAgICAgbnVsbCxcclxuICAgICAgYHZpc2l0cy8ke3RoaXMubW9kZWxJRH0vcGxhbnMvYCxcclxuICAgICAgYHBsYW5fZmxvb3JfJHt0aGlzLmN1cnJlbnRGbG9vci5pZH1fJHtzcGFjZUlEc2hvcnR9YFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHBsYW4gPSB7XHJcbiAgICAgIG5hbWU6IGBwbGFuX2Zsb29yXyR7dGhpcy5jdXJyZW50Rmxvb3IuaWR9YCxcclxuICAgICAgYW5uZXhlOiBgdmlzaXRzLyR7dGhpcy5tb2RlbElEfS9wbGFucy9wbGFuX2Zsb29yXyR7dGhpcy5jdXJyZW50Rmxvb3IuaWR9XyR7c3BhY2VJRHNob3J0fS5qcGVnYCxcclxuICAgICAgem9uZUlEOiB6b25lLmlkLFxyXG4gICAgICBzcGFjZUlEOiB0aGlzLnNwYWNlSUQsXHJcbiAgICAgIGlzQ3VycmVudEZvclpvbmU6IHRydWUsXHJcbiAgICAgIGlzTW9kaWZpZWQ6IGZhbHNlLFxyXG4gICAgICBpc0ltcG9ydGVkTWF0dGVycG9ydDogdHJ1ZSxcclxuICAgIH0gYXMgUGxhbjtcclxuICAgIGF3YWl0IHRoaXMucGxhblNlcnZpY2UuY3JlYXRlUGxhbihwbGFuKTtcclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoem9uZSk7XHJcbiAgfVxyXG5cclxuICBhYmFuZG9uKCkge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdhYmFuZG9ubmluZyBpbXBvcnQnKTtcclxuICAgICAgdGhpcy5zdG9wID0gdHJ1ZTtcclxuICAgICAgdGhpcy5yZW1vdmVGcmFtZSgpO1xyXG4gICAgfSwgNTAwKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZUZyYW1lKCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudEZyYW1lKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudEZyYW1lLnJlbW92ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0TGF5ZXJCeU5hbWUobmFtZTogc3RyaW5nKTogUHJvbWlzZTxMYXllcj4ge1xyXG4gICAgY29uc3QgbWlzc2lvbiA9IHRoaXMudXNlclNlcnZpY2UuY3VycmVudE1pc3Npb24odGhpcy5zcGFjZUlEKTtcclxuICAgIGNvbnN0IGN1cnJlbnRPcmdJZCA9IG1pc3Npb24ub3JnYW5pc2F0aW9uSUQ7XHJcbiAgICBjb25zdCBsYXllcnMgPSBhd2FpdCB0aGlzLmxheWVyU2VydmljZS5nZXRMYXllckJ5TmFtZUZvck9yZ2FuaXNhdGlvbihcclxuICAgICAgbmFtZSxcclxuICAgICAgY3VycmVudE9yZ0lkXHJcbiAgICApO1xyXG4gICAgaWYgKGxheWVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHJldHVybiBsYXllcnNbMF07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5sYXllclNlcnZpY2UuY3JlYXRlTGF5ZXJGb3JPcmdhbmlzYXRpb24obmFtZSwgY3VycmVudE9yZ0lkKTtcclxuICB9XHJcbn0iXX0=
470
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0dGVycG9ydC1pbXBvcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1jb3JlL3NyYy9saWIvc2VydmljZXMvbWF0dGVycG9ydC1pbXBvcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0UsT0FBTyxFQUNMLFdBQVcsR0FNWixNQUFNLGtCQUFrQixDQUFDO0FBSzFCLE9BQU8sRUFDTCxjQUFjLEVBQ2QsaUJBQWlCLEVBQ2pCLDBCQUEwQixFQUMxQixpQkFBaUIsR0FDbEIsTUFBTSxjQUFjLENBQUM7Ozs7Ozs7O0FBYXRCLE1BQU0sT0FBTyx1QkFBdUI7SUF3Q2E7SUFDckM7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBN0NGLFlBQVksQ0FBQztJQUVkLEdBQUcsQ0FBTTtJQUVSLE1BQU0sQ0FBUztJQUVoQixNQUFNLENBQVM7SUFFZCxZQUFZLENBQUM7SUFFYixRQUFRLENBQVM7SUFFakIsUUFBUSxDQUFTO0lBRXpCLElBQVcsT0FBTztRQUNoQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQVcsT0FBTyxDQUFDLEtBQWE7UUFDOUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQVcsT0FBTztRQUNoQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQVcsT0FBTyxDQUFD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TUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN0QixPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuQixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLDBCQUEwQixDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQztJQUMxRSxDQUFDO3dHQXBqQlUsdUJBQXVCLGtCQXdDeEIsa0JBQWtCOzRHQXhDakIsdUJBQXVCLGNBRnRCLE1BQU07OzRGQUVQLHVCQUF1QjtrQkFIbkMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQXlDSSxNQUFNOzJCQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTUFUVEVSUE9SVF9TREtfS0VZIH0gZnJvbSAnLi4vdG9rZW5zL21hdHRlcnBvcnQtc2RrLWtleS50b2tlbic7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyByZW1vdmVOdWxsS2V5c0Zyb21PYmplY3QsIHdhaXQsIHdhaXRVbnRpbCB9IGZyb20gJy4uL2hlbHBlcnMuc2VydmljZSc7XG5pbXBvcnQge1xuICBMZXZlbFN0YXR1cyxcbiAgTGF5ZXIsXG4gIE5vZGUsXG4gIFpvbmUsXG4gIE5hdmlnYXRpb24sXG4gIFBsYW4sXG59IGZyb20gJy4uL3R5cGVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgTGF5ZXJTZXJ2aWNlIH0gZnJvbSAnLi9tb2RlbHMvbGF5ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gJy4vbW9kZWxzL25hdmlnYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBQbGFuU2VydmljZSB9IGZyb20gJy4vbW9kZWxzL3BsYW4uc2VydmljZSc7XG5pbXBvcnQgeyBab25lU2VydmljZSB9IGZyb20gJy4vbW9kZWxzL3pvbmUuc2VydmljZSc7XG5pbXBvcnQge1xuICB1cGxvYWRKc29uVG9TMyxcbiAgdXBsb2FkQmFzZTY0SW1hZ2UsXG4gIHVwbG9hZEJhc2U2NEltYWdlV2l0aFJldHJ5LFxuICBsaXN0RmlsZXNJbkZvbGRlcixcbn0gZnJvbSAnLi9zMy5zZXJ2aWNlJztcbmltcG9ydCB7IEJhc2VVc2VyU2VydmljZSB9IGZyb20gJy4vdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7IFZpZXdlclNlcnZpY2UgfSBmcm9tICcuL3ZpZXdlci5zZXJ2aWNlJztcblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICBNUF9TREs6IHsgY29ubmVjdDogRnVuY3Rpb24gfTtcbiAgfVxufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTWF0dGVycG9ydEltcG9ydFNlcnZpY2Uge1xuICBwcml2YXRlIGN1cnJlbnRGcmFtZTtcblxuICBwdWJsaWMgc2RrOiBhbnk7XG5cbiAgcHJpdmF0ZSBzd2VlcHM6IE9iamVjdDtcblxuICBwdWJsaWMgZmxvb3JzOiBPYmplY3Q7XG5cbiAgcHJpdmF0ZSBjdXJyZW50Rmxvb3I7XG5cbiAgcHJpdmF0ZSBfbW9kZWxJRDogc3RyaW5nO1xuXG4gIHByaXZhdGUgX3NwYWNlSUQ6IHN0cmluZztcblxuICBwdWJsaWMgZ2V0IHNwYWNlSUQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc3BhY2VJRDtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgc3BhY2VJRCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fc3BhY2VJRCA9IHZhbHVlO1xuICB9XG5cbiAgcHVibGljIGdldCBtb2RlbElEKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX21vZGVsSUQ7XG4gIH1cblxuICBwdWJsaWMgc2V0IG1vZGVsSUQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX21vZGVsSUQgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBzdG9wID0gZmFsc2U7XG5cbiAgcHVibGljIGltcG9ydGluZ0ltYWdlczogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cbiAgcHVibGljIHN3ZWVwUHJvY2Vzc2VkQ291bnQ6IFN1YmplY3Q8bnVtYmVyPiA9IG5ldyBTdWJqZWN0PG51bWJlcj4oKTtcblxuICBwdWJsaWMgdG90YWxTd2VlcHNDb3VudDogU3ViamVjdDxudW1iZXI+ID0gbmV3IFN1YmplY3Q8bnVtYmVyPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoTUFUVEVSUE9SVF9TREtfS0VZKSBwcml2YXRlIHJlYWRvbmx5IHNka0tleTogc3RyaW5nLFxuICAgIHByaXZhdGUgbmF2aWdhdGlvblNlcnZpY2U6IE5hdmlnYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgem9uZVNlcnZpY2U6IFpvbmVTZXJ2aWNlLFxuICAgIHByaXZhdGUgdmlld2VyU2VydmljZTogVmlld2VyU2VydmljZSxcbiAgICBwcml2YXRlIGxheWVyU2VydmljZTogTGF5ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IEJhc2VVc2VyU2VydmljZSxcbiAgICBwcml2YXRlIHBsYW5TZXJ2aWNlOiBQbGFuU2VydmljZSxcbiAgKSB7XG4gIH1cblxuICBhc3luYyBpbml0U2RrRm9yTW9kZWwobW9kZWxJRDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdGhpcy5zdG9wID0gZmFsc2U7XG5cbiAgICAvLyBMb2FkIFNES1xuICAgIGNvbnNvbGUubG9nKCdMb2FkaW5nIE1hdHRlcnBvcnQgU0RLJyk7XG4gICAgdGhpcy5tb2RlbElEID0gbW9kZWxJRDtcbiAgICBjb25zdCBpZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtcbiAgICBpZiAoIWlmcmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY3JlYXRlIGlmcmFtZScpO1xuICAgIH1cbiAgICB0aGlzLnZpZXdlclNlcnZpY2Uuc2V0VG91clVybCh7IG1vZGVsM2Q6IG1vZGVsSUQgfSk7XG4gICAgY29uc3QgdXJsID0gdGhpcy52aWV3ZXJTZXJ2aWNlLmdldFRvdXJVcmwoKTtcbiAgICBpZnJhbWUuc2V0QXR0cmlidXRlKCdzcmMnLCB1cmwpO1xuICAgIGlmcmFtZS5hbGxvdyA9ICd4ci1zcGF0aWFsLXRyYWNraW5nJztcbiAgICBpZnJhbWUuaGVpZ2h0ID0gJzEwMCUnO1xuICAgIGlmcmFtZS53aWR0aCA9ICcxMDAlJztcbiAgICBpZnJhbWUuaWQgPSAndmlld2VyLW1vZHVsZSc7XG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyN2aWV3ZXItZnJhbWUnKTtcbiAgICBlbGVtZW50LmFwcGVuZChpZnJhbWUpO1xuICAgIHRoaXMuY3VycmVudEZyYW1lID0gaWZyYW1lO1xuICAgIGNvbnN0IHNob3djYXNlV2luZG93ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3c7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXMsIHJlaikgPT4ge1xuICAgICAgaWZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICdsb2FkJyxcbiAgICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLnNkayA9IGF3YWl0IHNob3djYXNlV2luZG93Lk1QX1NESy5jb25uZWN0KFxuICAgICAgICAgICAgICBpZnJhbWUsXG4gICAgICAgICAgICAgIHRoaXMuc2RrS2V5LFxuICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuc2RrLkZsb29yLmRhdGEuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgb25Db2xsZWN0aW9uVXBkYXRlZDogZnVuY3Rpb24gdXBkKGNvbGxlY3Rpb246IGFueSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmxvb3JzID0gY29sbGVjdGlvbjtcbiAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnNkay5GbG9vci5jdXJyZW50LnN1YnNjcmliZShcbiAgICAgICAgICAgICAgZnVuY3Rpb24gdXBkKGN1cnJlbnRGbG9vcikge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEZsb29yID0gY3VycmVudEZsb29yO1xuICAgICAgICAgICAgICB9LmJpbmQodGhpcylcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMuc2RrLlN3ZWVwLmRhdGEuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgb25Db2xsZWN0aW9uVXBkYXRlZDogZnVuY3Rpb24gdXBkKGNvbGxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygndGhlIGVudGlyZSB1cC10by1kYXRlIGNvbGxlY3Rpb24nLCBjb2xsZWN0aW9uKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN3ZWVwcyA9IGNvbGxlY3Rpb247XG4gICAgICAgICAgICAgIH0uYmluZCh0aGlzKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5zZGsuU2V0dGluZ3MudXBkYXRlKCdsYWJlbHMnLCBmYWxzZSk7XG4gICAgICAgICAgICBsZXQgdGltZW91dEV4cGlyZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gKHRpbWVvdXRFeHBpcmVkID0gdHJ1ZSksIDcwMDApO1xuICAgICAgICAgICAgYXdhaXQgd2FpdFVudGlsKFxuICAgICAgICAgICAgICAoKSA9PlxuICAgICAgICAgICAgICAgICh0aGlzLnN3ZWVwcyAhPT0gdW5kZWZpbmVkICYmIHRoaXMuZmxvb3JzICE9PSB1bmRlZmluZWQpIHx8XG4gICAgICAgICAgICAgICAgdGltZW91dEV4cGlyZWQgPT09IHRydWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAodGltZW91dEV4cGlyZWQpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3RpbWVvdXQgaW50aXRpYWxpc2luZyBNYXR0ZXJwb3J0Jyk7XG4gICAgICAgICAgICAgIHJldHVybiByZWoobmV3IEVycm9yKCdlcnJvciBpbml0IE1hdHRlcnBvcnQnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnaW5pdCBkb25lJyk7XG4gICAgICAgICAgICByZXR1cm4gcmVzKHRydWUpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICByZWoobmV3IEVycm9yKCdlcnJvciBpbml0IE1hdHRlcnBvcnQnKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGltcG9ydERhdGEoXG4gICAgc3BhY2VJRDogc3RyaW5nLFxuICAgIHN1cmZhY2U6IG51bWJlcixcbiAgICByZWxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBub2RlOiBOb2RlID0gbnVsbCxcbiAgICBvdmVycmlkZUV4aXN0aW5nID0gdHJ1ZVxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoIXRoaXMuc3dlZXBzKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdubyBzd2VlcHMgaW5pdGlhbGl6ZWQnKSk7XG4gICAgfVxuICAgIGxldCBhcHBJc0xvYWRlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5zZGsuQXBwLnN0YXRlLnN1YnNjcmliZShmdW5jdGlvbiAoYXBwU3RhdGUpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdUaGUgY3VycmVudCBwaGFzZTogJywgYXBwU3RhdGUucGhhc2UpO1xuICAgICAgaWYgKGFwcFN0YXRlLnBoYXNlID09PSAnYXBwcGhhc2UucGxheWluZycpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1RoZSBhcHAgaXMgcGxheWluZycpO1xuICAgICAgICBhcHBJc0xvYWRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBhd2FpdCB3YWl0VW50aWwoKCkgPT4gYXBwSXNMb2FkZWQgPT09IHRydWUpO1xuXG4gICAgaWYgKHJlbG9hZGluZykge1xuICAgICAgYXdhaXQgdGhpcy5pbXBvcnQzNjBpbWFnZXMob3ZlcnJpZGVFeGlzdGluZyk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuICAgIH1cblxuICAgIHRoaXMuc3BhY2VJRCA9IHNwYWNlSUQ7XG4gICAgbGV0IGZsb29yWm9uZXM6IFpvbmVbXSA9IFtdO1xuICAgIGNvbnN0IHpvbmVzID0gYXdhaXQgdGhpcy56b25lU2VydmljZS5nZXRab25lc0J5U3BhY2Uoc3BhY2VJRCk7XG4gICAgY29uc3QgbWFpblpvbmUgPSB6b25lcy5maW5kKCh6KSA9PiAhei5wYXJlbnRJRCk7XG4gICAgaWYgKCFtYWluWm9uZSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignbWlzc2luZyBkYXRhIChubyBtYWluIEJ1aWxkaW5nIFpvbmUpJykpO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZygnaW1wb3J0aW5nIGRhdGEgZnJvbSBtYXR0ZXJwb3J0Jyk7XG4gICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KE9iamVjdC52YWx1ZXModGhpcy5zd2VlcHMpKTtcbiAgICBhd2FpdCB1cGxvYWRKc29uVG9TMyhcbiAgICAgIGB2aXNpdHMvJHt0aGlzLm1vZGVsSUR9L2ludmVudG9yeS9gLFxuICAgICAganNvbixcbiAgICAgICdkYXRhLmpzb24nXG4gICAgKTtcbiAgICBjb25zdCBsYXllckJ1aWxkaW5nID0gYXdhaXQgdGhpcy5nZXRMYXllckJ5TmFtZSgnQlVJTERJTkcnKTtcbiAgICBjb25zdCBjcmVhdGVkRGVmYXVsdFpvbmUgPSBhd2FpdCB0aGlzLmNyZWF0ZVpvbmUoXG4gICAgICBub2RlLm1ldGFkYXRhLFxuICAgICAgbGF5ZXJCdWlsZGluZy5pZCxcbiAgICAgIHN1cmZhY2UsXG4gICAgICBtYWluWm9uZS5pZCxcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMuc3dlZXBzKSxcbiAgICAgIG5vZGVcbiAgICApO1xuICAgIGlmICghY3JlYXRlZERlZmF1bHRab25lKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZmxvb3JzKSB7XG4gICAgICBmbG9vclpvbmVzID0gYXdhaXQgdGhpcy5pbXBvcnRGbG9vckRhdGEoY3JlYXRlZERlZmF1bHRab25lLmlkLCBub2RlKTtcbiAgICB9XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnN3ZWVwcykubWFwKGFzeW5jIChrZXkpID0+IHtcbiAgICAgICAgY29uc3Qgc3dlZXBJbmZvID0gdGhpcy5zd2VlcHNba2V5XTtcbiAgICAgICAgY29uc3QgbmF2aWdhdGlvbklucHV0ID0ge1xuICAgICAgICAgIG1hdHRlcnBvcnRTd2VlcElEOiBzd2VlcEluZm8udXVpZCxcbiAgICAgICAgICBwb3NpdGlvbjogSlNPTi5zdHJpbmdpZnkoc3dlZXBJbmZvLnBvc2l0aW9uKSxcbiAgICAgICAgICByb3RhdGlvbjogSlNPTi5zdHJpbmdpZnkoc3dlZXBJbmZvLnJvdGF0aW9uKSxcbiAgICAgICAgICBsZXZlbDogTGV2ZWxTdGF0dXMuTE9XLFxuICAgICAgICAgIG5vZGVJRDogbm9kZS5pZCxcbiAgICAgICAgICBzcGFjZUlELFxuICAgICAgICB9IGFzIE5hdmlnYXRpb247XG4gICAgICAgIGNvbnN0IG5hdiA9IGF3YWl0IHRoaXMubmF2aWdhdGlvblNlcnZpY2UuY3JlYXRlTmF2aWdhdGlvbihcbiAgICAgICAgICBuYXZpZ2F0aW9uSW5wdXRcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFuYXYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnY291bGQgY3JlYXRlIG5hdmlnYXRpb24nLCBuYXZpZ2F0aW9uSW5wdXQuaWQpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gICAgYXdhaXQgdGhpcy5pbXBvcnQzNjBpbWFnZXMob3ZlcnJpZGVFeGlzdGluZyk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVpvbmUoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGxheWVySUQ6IHN0cmluZyxcbiAgICBzdXJmYWNlOiBudW1iZXIgPSBudWxsLFxuICAgIHBhcmVudElEOiBzdHJpbmcgPSBudWxsLFxuICAgIHN3ZWVwczogc3RyaW5nW10gPSBbXSxcbiAgICBub2RlOiBOb2RlID0gbnVsbCxcbiAgICBtZXRhZGF0YTogc3RyaW5nID0gbnVsbFxuICApOiBQcm9taXNlPFpvbmU+IHtcbiAgICBjb25zdCB6b25lSW5wdXQgPSB7XG4gICAgICBuYW1lLFxuICAgICAgc3BhY2VJRDogdGhpcy5zcGFjZUlELFxuICAgICAgbGF5ZXJJRCxcbiAgICAgIHN3ZWVwSURzOiBzd2VlcHMsXG4gICAgICBub2RlSURzOiBub2RlID8gW25vZGUuaWRdIDogbnVsbCxcbiAgICB9IGFzIFpvbmU7XG4gICAgcmVtb3ZlTnVsbEtleXNGcm9tT2JqZWN0KHpvbmVJbnB1dCk7XG4gICAgaWYgKHN1cmZhY2UpIHtcbiAgICAgIHpvbmVJbnB1dC5zdXJmYWNlID0gc3VyZmFjZTtcbiAgICB9XG4gICAgaWYgKHBhcmVudElEKSB7XG4gICAgICB6b25lSW5wdXQucGFyZW50SUQgPSBwYXJlbnRJRDtcbiAgICB9XG4gICAgaWYgKG1ldGFkYXRhKSB7XG4gICAgICB6b25lSW5wdXQubWV0YWRhdGEgPSBtZXRhZGF0YTtcbiAgICB9XG4gICAgY29uc3QgbmV3TG9jYWwgPSBhd2FpdCB0aGlzLnpvbmVTZXJ2aWNlLmNyZWF0ZSh6b25lSW5wdXQpO1xuICAgIHJldHVybiBuZXdMb2NhbDtcbiAgfVxuXG4gIGFzeW5jIGltcG9ydDM2MGltYWdlcyhvdmVycmlkZUV4aXN0aW5nID0gdHJ1ZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnNvbGUubG9nKCdJbXBvcnRpbmcgMzYwIGltYWdlcycpO1xuICAgIHRoaXMuaW1wb3J0aW5nSW1hZ2VzLm5leHQodHJ1ZSk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUpID0+IHtcbiAgICAgIGNvbnN0IHNjYW5zID0gT2JqZWN0LnZhbHVlcyh0aGlzLnN3ZWVwcyk7XG4gICAgICBjb25zdCBubWJTY2FucyA9IHNjYW5zLmxlbmd0aDtcblxuICAgICAgdGhpcy50b3RhbFN3ZWVwc0NvdW50Lm5leHQobm1iU2NhbnMpO1xuXG4gICAgICBjb25zdCBzdGFydCA9IG92ZXJyaWRlRXhpc3RpbmcgPyAwIDogYXdhaXQgdGhpcy5nZXRVcGxvYWRlZEltYWdlQ291bnQodGhpcy5tb2RlbElEKTtcblxuICAgICAgZm9yIChsZXQgaW5kZXggPSBzdGFydDsgaW5kZXggPCBubWJTY2FuczsgaW5kZXggKz0gMSkge1xuXG4gICAgICAgIGlmICh0aGlzLnN0b3ApIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnQWJhbmRvbmluZyBpbXBvcnQgYmVjYXVzZSBpdCB3YXMgY2FuY2VsbGVkJyk7XG4gICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgdGhpcy5yZW1vdmVGcmFtZSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3dlZXAgPSBzY2Fuc1tpbmRleF07XG4gICAgICAgIGNvbnNvbGUubG9nKCdNb3ZpbmcgdG8gc3dlZXA6Jywgc3dlZXApO1xuXG4gICAgICAgIGNvbnN0IG1vdmVJZCA9IHN3ZWVwLmlkIHx8IHN3ZWVwLnV1aWQgfHwgc3dlZXAuc2lkO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5zZGsuU3dlZXAubW92ZVRvKG1vdmVJZCwge1xuICAgICAgICAgICAgcm90YXRpb246IHsgeDogMCwgeTogMCB9LFxuICAgICAgICAgICAgdHJhbnNpdGlvbjogdGhpcy5zZGsuQ2FtZXJhICYmIHRoaXMuc2RrLkNhbWVyYS5UcmFuc2l0aW9uVHlwZVxuICAgICAgICAgICAgICA/IHRoaXMuc2RrLkNhbWVyYS5UcmFuc2l0aW9uVHlwZS5JTlNUQU5UXG4gICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgdHJhbnNpdGlvblRpbWU6IDAsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zdCBpbWcgPSBhd2FpdCB0aGlzLmNhcHR1cmVFcXVpcmVjdGFuZ3VsYXJXaXRoUmV0cnkoXG4gICAgICAgICAgICB7IHdpZHRoOiAyMDQ4LCBoZWlnaHQ6IDEwMjQgfSxcbiAgICAgICAgICAgIHsgbWF0dGVydGFnczogZmFsc2UsIHN3ZWVwczogdHJ1ZSB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBtYXhBdHRlbXB0czogMyxcbiAgICAgICAgICAgICAgaW5pdGlhbEJhY2tvZmZNczogNTAwLFxuICAgICAgICAgICAgICBwZXJBdHRlbXB0VGltZW91dE1zOiA4MDAwLFxuICAgICAgICAgICAgICBzd2VlcElkRm9yUmVhZHlDaGVjazogbW92ZUlkLFxuICAgICAgICAgICAgICB3YWl0Rm9yU3dlZXBUaW1lb3V0TXM6IDEyMDAwXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHVwbG9hZEJhc2U2NEltYWdlV2l0aFJldHJ5KFxuICAgICAgICAgICAgaW1nLFxuICAgICAgICAgICAgc3dlZXAudXVpZCB8fCBtb3ZlSWQsXG4gICAgICAgICAgICBgdmlzaXRzLyR7dGhpcy5tb2RlbElEfS9zd2VlcHMvYCxcbiAgICAgICAgICAgICdzd2VlcCcsXG4gICAgICAgICAgICA1XG4gICAgICAgICAgKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3dlZXBQcm9jZXNzZWRDb3VudC5uZXh0KGluZGV4KTtcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gbm1iU2NhbnMgLSAxKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdJbXBvcnQgMzYwIGRvbmUnKTtcbiAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgdGhpcy5yZW1vdmVGcmFtZSgpO1xuICAgICAgICAgICAgICB0aGlzLnN0b3AgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkVycm9yIHVwbG9hZGluZyBzY2FuIDogXCIsIGUpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBjYXB0dXJlIHN3ZWVwICR7bW92ZUlkfSBhZnRlciByZXRyaWVzOmAsIGVycik7XG4gICAgICAgICAgdGhpcy5zd2VlcFByb2Nlc3NlZENvdW50Lm5leHQoaW5kZXgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICB0aGlzLnJlbW92ZUZyYW1lKCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBjYXB0dXJlRXF1aXJlY3Rhbmd1bGFyV2l0aFJldHJ5KG9wdGlvbnMsIHJlbmRlck9wdGlvbnMsIHtcbiAgICBtYXhBdHRlbXB0cyA9IDMsXG4gICAgaW5pdGlhbEJhY2tvZmZNcyA9IDUwMCxcbiAgICBwZXJBdHRlbXB0VGltZW91dE1zID0gODAwMCxcbiAgICBzd2VlcElkRm9yUmVhZHlDaGVjayA9IG51bGwsXG4gICAgd2FpdEZvclN3ZWVwVGltZW91dE1zID0gMTIwMDBcbiAgfSA9IHt9KSB7XG4gICAgbGV0IGF0dGVtcHQgPSAwO1xuICAgIGxldCBsYXN0RXJyb3IgPSBudWxsO1xuXG4gICAgd2hpbGUgKGF0dGVtcHQgPCBtYXhBdHRlbXB0cykge1xuICAgICAgYXR0ZW1wdCArPSAxO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHN3ZWVwSWRGb3JSZWFkeUNoZWNrKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy53YWl0Rm9yU3dlZXBSZWFkeShzd2VlcElkRm9yUmVhZHlDaGVjaywgd2FpdEZvclN3ZWVwVGltZW91dE1zKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLnNsZWVwKDEyMCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbWcgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICAgIHRoaXMuc2RrLlJlbmRlcmVyLnRha2VFcXVpcmVjdGFuZ3VsYXIob3B0aW9ucywgcmVuZGVyT3B0aW9ucyksXG4gICAgICAgICAgdGhpcy50aW1lb3V0UHJvbWlzZShwZXJBdHRlbXB0VGltZW91dE1zLCBgdGFrZUVxdWlyZWN0YW5ndWxhciB0aW1lZCBvdXQgYWZ0ZXIgJHtwZXJBdHRlbXB0VGltZW91dE1zfW1zYClcbiAgICAgICAgXSk7XG5cbiAgICAgICAgcmV0dXJuIGltZztcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBsYXN0RXJyb3IgPSBlcnI7XG4gICAgICAgIGNvbnNvbGUud2FybihgdGFrZUVxdWlyZWN0YW5ndWxhciBhdHRlbXB0ICR7YXR0ZW1wdH0gZmFpbGVkOmAsIGVycik7XG5cbiAgICAgICAgaWYgKGF0dGVtcHQgPj0gbWF4QXR0ZW1wdHMpIHtcbiAgICAgICAgICB0aHJvdyBsYXN0RXJyb3I7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBiYWNrb2ZmID0gaW5pdGlhbEJhY2tvZmZNcyAqIE1hdGgucG93KDIsIGF0dGVtcHQgLSAxKTtcbiAgICAgICAgY29uc3Qgaml0dGVyID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwKTtcbiAgICAgICAgYXdhaXQgdGhpcy5zbGVlcChiYWNrb2ZmICsgaml0dGVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBsYXN0RXJyb3IgfHwgbmV3IEVycm9yKCdjYXB0dXJlRXF1aXJlY3Rhbmd1bGFyV2l0aFJldHJ5IGZhaWxlZCB3aXRob3V0IGVycm9yJyk7XG4gIH1cblxuICB3YWl0Rm9yU3dlZXBSZWFkeSh0YXJnZXRJZDogc3RyaW5nLCB0aW1lb3V0TXMgPSAxMDAwMCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHNkayA9IHRoaXMuc2RrO1xuXG4gICAgY29uc3QgbWF0Y2hlc1RhcmdldCA9IChkYXRhKSA9PiB7XG4gICAgICBpZiAoIWRhdGEpIHJldHVybiBmYWxzZTtcbiAgICAgIGNvbnN0IGZpZWxkcyA9IFtkYXRhLmlkLCBkYXRhLnV1aWQsIGRhdGEuc2lkLCBkYXRhLnVpZF07XG4gICAgICByZXR1cm4gZmllbGRzLnNvbWUoZiA9PiAhIWYgJiYgU3RyaW5nKGYpID09PSBTdHJpbmcodGFyZ2V0SWQpKTtcbiAgICB9O1xuXG4gICAgaWYgKHNkay5Td2VlcCAmJiBzZGsuU3dlZXAuY3VycmVudCAmJiB0eXBlb2Ygc2RrLlN3ZWVwLmN1cnJlbnQud2FpdFVudGlsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgc2RrLlN3ZWVwLmN1cnJlbnQud2FpdFVudGlsKChkYXRhKSA9PiBtYXRjaGVzVGFyZ2V0KGRhdGEpKSxcbiAgICAgICAgdGhpcy50aW1lb3V0UHJvbWlzZSh0aW1lb3V0TXMsIGBUaW1lb3V0IHdhaXRpbmcgZm9yIHN3ZWVwICR7dGFyZ2V0SWR9YClcbiAgICAgIF0pO1xuICAgIH1cblxuICAgIGlmIChzZGsuU3dlZXAgJiYgc2RrLlN3ZWVwLmN1cnJlbnQgJiYgdHlwZW9mIHNkay5Td2VlcC5jdXJyZW50LnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBpZiAob2ZmKSBvZmYoKTtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBUaW1lb3V0IHdhaXRpbmcgZm9yIHN3ZWVwICR7dGFyZ2V0SWR9YCkpO1xuICAgICAgICB9LCB0aW1lb3V0TXMpO1xuXG4gICAgICAgIGxldCBvZmYgPSBudWxsO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHN1YlJlc3VsdCA9IHNkay5Td2VlcC5jdXJyZW50LnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgICAgICAgaWYgKG1hdGNoZXNUYXJnZXQoZGF0YSkpIHtcbiAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgICAgICAgdHJ5IHsgaWYgKHR5cGVvZiBzdWJSZXN1bHQgPT09ICdmdW5jdGlvbicpIHN1YlJlc3VsdCgpOyBlbHNlIGlmIChzdWJSZXN1bHQgJiYgdHlwZW9mIHN1YlJlc3VsdC51bnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykgc3ViUmVzdWx0LnVuc3Vic2NyaWJlKCk7IH0gY2F0Y2ggKGUpIHsvKmlnbm9yZSovIH1cbiAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmICh0eXBlb2Ygc3ViUmVzdWx0ID09PSAnZnVuY3Rpb24nKSBvZmYgPSBzdWJSZXN1bHQ7XG4gICAgICAgICAgZWxzZSBpZiAoc3ViUmVzdWx0ICYmIHR5cGVvZiBzdWJSZXN1bHQudW5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIG9mZiA9ICgpID0+IHN1YlJlc3VsdC51bnN1YnNjcmliZSgpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdzZGsuU3dlZXAuY3VycmVudC5zdWJzY3JpYmUgbm90IHVzYWJsZScpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHBvbGxJbnRlcnZhbCA9IDIwMDtcbiAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBUaW1lb3V0IHdhaXRpbmcgZm9yIHN3ZWVwICR7dGFyZ2V0SWR9YCkpO1xuICAgICAgfSwgdGltZW91dE1zKTtcblxuICAgICAgY29uc3QgY2hlY2tOb3cgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbGV0IGN1cnJlbnQgPSBudWxsO1xuICAgICAgICAgIGlmIChzZGsuU3dlZXAgJiYgdHlwZW9mIHNkay5Td2VlcC5nZXRDdXJyZW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjdXJyZW50ID0gYXdhaXQgc2RrLlN3ZWVwLmdldEN1cnJlbnQoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHNkay5Td2VlcCAmJiB0eXBlb2Ygc2RrLlN3ZWVwLmN1cnJlbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGN1cnJlbnQgPSBhd2FpdCBzZGsuU3dlZXAuY3VycmVudCgpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc2RrLlN3ZWVwICYmIHNkay5Td2VlcC5jdXJyZW50ICYmIHNkay5Td2VlcC5jdXJyZW50LnZhbHVlKSB7XG4gICAgICAgICAgICBjdXJyZW50ID0gc2RrLlN3ZWVwLmN1cnJlbnQudmFsdWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG1hdGNoZXNUYXJnZXQoY3VycmVudCkpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAvLyBpZ25vcmUgYW5kIHJldHJ5IHVudGlsIHRpbWVvdXRcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgYXdhaXQgY2hlY2tOb3coKTtcbiAgICAgIGNvbnN0IGludGVydmFsID0gc2V0SW50ZXJ2YWwoY2hlY2tOb3csIHBvbGxJbnRlcnZhbCk7XG4gICAgfSk7XG4gIH1cblxuICBzbGVlcChtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlcyA9PiBzZXRUaW1lb3V0KHJlcywgbXMpKTtcbiAgfVxuXG4gIHRpbWVvdXRQcm9taXNlKG1zOiBudW1iZXIsIG1lc3NhZ2U6IHN0cmluZyk6IFByb21pc2U8bmV2ZXI+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT4gc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IEVycm9yKG1lc3NhZ2UpKSwgbXMpKTtcbiAgfVxuXG4gIGFzeW5jIGdldFVwbG9hZGVkSW1hZ2VDb3VudChtb2RlbElEKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGltYWdlcyA9IGF3YWl0IGxpc3RGaWxlc0luRm9sZGVyKGB2aXNpdHMvJHttb2RlbElEfS9zd2VlcHMvYCk7XG4gICAgICByZXR1cm4gaW1hZ2VzLmxlbmd0aDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gIH1cblxuICBhc3luYyBtb3ZlVG9GbG9vcihmbG9vck5hbWU6IHN0cmluZywgbWF0dGVycG9ydEZsb29yU2VxdWVuY2U6IG51bWJlciA9IG51bGwpIHtcbiAgICBpZiAoIXRoaXMuZmxvb3JzKSB7XG4gICAgICBjb25zb2xlLmxvZygnRmxvb3IgYXJlIG5vdCBsb2FkZWQgeWV0Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBmbG9vck1hdHRlcnBvcnQgPSBPYmplY3QudmFsdWVzKHRoaXMuZmxvb3JzKS5maW5kKFxuICAgICAgKGZsb29yKSA9PiBmbG9vci5zZXF1ZW5jZSA9PT0gbWF0dGVycG9ydEZsb29yU2VxdWVuY2VcbiAgICApO1xuICAgIGlmICghZmxvb3JNYXR0ZXJwb3J0KSB7XG4gICAgICBmbG9vck1hdHRlcnBvcnQgPSBPYmplY3QudmFsdWVzKHRoaXMuZmxvb3JzKS5maW5kKFxuICAgICAgICAoZmxvb3IpID0+IGZsb29yTmFtZS5pbmNsdWRlcyhmbG9vci5uYW1lKSAmJiBmbG9vci5uYW1lICE9ICcnXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIWZsb29yTWF0dGVycG9ydCkge1xuICAgICAgZmxvb3JNYXR0ZXJwb3J0ID0gT2JqZWN0LnZhbHVlcyh0aGlzLmZsb29ycykuZmluZCgoZmxvb3IpID0+XG4gICAgICAgIGZsb29yTmFtZS5pbmNsdWRlcyhmbG9vci5pZClcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChmbG9vck1hdHRlcnBvcnQpIHtcbiAgICAgIGxldCByZXRyeSA9IHRydWU7XG4gICAgICB3aGlsZSAocmV0cnkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBmbG9vckluZGV4ID0gYXdhaXQgdGhpcy5zZGsuRmxvb3IubW92ZVRvKFxuICAgICAgICAgICAgZmxvb3JNYXR0ZXJwb3J0LnNlcXVlbmNlXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXRyeSA9IGZhbHNlO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdDYW5ub3QgbW92ZSB0byBGbG9vcicsIGVycm9yKTtcbiAgICAgICAgICBhd2FpdCB3YWl0KDEwMCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKCdObyBtYXR0ZXJwb3J0IGZsb29yIGZvdW5kIHRvIG1vdmUgdG8nKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgaW1wb3J0Rmxvb3JEYXRhKFxuICAgIGRlZmF1dFpvbmVJRDogc3RyaW5nLFxuICAgIG5vZGU6IE5vZGVcbiAgKTogUHJvbWlzZTxab25lW10+IHtcbiAgICBjb25zdCB6b25lcyA9IFtdO1xuICAgIGF3YWl0IHRoaXMuc2RrLk1vZGUubW92ZVRvKHRoaXMuc2RrLk1vZGUuTW9kZS5GTE9PUlBMQU4pO1xuICAgIGNvbnN0IG5tYkZsb29ycyA9IE9iamVjdC5rZXlzKHRoaXMuZmxvb3JzKS5sZW5ndGg7XG4gICAgY29uc29sZS5sb2coJ1RvdGFsIG51bWJlciBvZiBmbG9vcnMnLCBubWJGbG9vcnMpO1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBubWJGbG9vcnM7IGluZGV4ICs9IDEpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdJbXBvcnRpbmcgZmxvb3InLCBpbmRleCk7XG4gICAgICBhd2FpdCB0aGlzLnNkay5GbG9vci5tb3ZlVG8oaW5kZXgpLnRoZW4oYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCB3YWl0KDcwMCk7XG4gICAgICAgIGNvbnN0IHpvbmUgPSBhd2FpdCB0aGlzLnNhdmVGbG9vcihkZWZhdXRab25lSUQsIG5vZGUpO1xuICAgICAgICB6b25lcy5wdXNoKHpvbmUpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoem9uZXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzYXZlRmxvb3IoZGVmYXV0Wm9uZUlEOiBzdHJpbmcsIG5vZGU6IE5vZGUpOiBQcm9taXNlPFpvbmU+IHtcbiAgICBsZXQgbmFtZSA9IHRoaXMuY3VycmVudEZsb29yLmlkO1xuICAgIGlmICh0aGlzLmN1cnJlbnRGbG9vci5uYW1lICE9PSAnJykge1xuICAgICAgbmFtZSA9IHRoaXMuY3VycmVudEZsb29yLm5hbWU7XG4gICAgfVxuICAgIGNvbnN0IGxheWVyRmxvb3IgPSBhd2FpdCB0aGlzLmdldExheWVyQnlOYW1lKCdGTE9PUicpO1xuICAgIGNvbnN0IHN3ZWVwc0luZm8gPSBPYmplY3QudmFsdWVzKHRoaXMuc3dlZXBzKTtcbiAgICBjb25zdCBzd2VlcHNGb3JGbG9vciA9IHN3ZWVwc0luZm8uZmlsdGVyKFxuICAgICAgKHN3ZWVwSW5mbykgPT4gc3dlZXBJbmZvLmZsb29ySW5mby5pZCA9PT0gdGhpcy5jdXJyZW50Rmxvb3IuaWRcbiAgICApO1xuICAgIGNvbnNvbGUubG9nKCdjdXJyZW50IGZsb29yJywgdGhpcy5jdXJyZW50Rmxvb3IpO1xuICAgIGNvbnNvbGUubG9nKCdzd2VlcHMgZm9yIGZsb29yJywgc3dlZXBzRm9yRmxvb3IubGVuZ3RoKTtcbiAgICBjb25zdCBzd2VlcElEczogc3RyaW5nW10gPSBzd2VlcHNGb3JGbG9vci5tYXAoKHN3ZWVwKSA9PiBzd2VlcC51dWlkKTtcbiAgICBjb25zdCB6b25lID0gYXdhaXQgdGhpcy5jcmVhdGVab25lKFxuICAgICAgYMOJdGFnZSAke25hbWV9IC0gJHtub2RlLm1ldGFkYXRhfWAsXG4gICAgICBsYXllckZsb29yLmlkLFxuICAgICAgbnVsbCxcbiAgICAgIGRlZmF1dFpvbmVJRCxcbiAgICAgIHN3ZWVwSURzLFxuICAgICAgbm9kZSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHsgbWF0dGVycG9ydEZsb29yU2VxdWVuY2U6IHRoaXMuY3VycmVudEZsb29yLnNlcXVlbmNlIH0pXG4gICAgKTtcbiAgICBjb25zdCBiYXNlNjQgPSBhd2FpdCB0aGlzLnNkay5SZW5kZXJlci50YWtlU2NyZWVuU2hvdCh7XG4gICAgICB3aWR0aDogNDA5NixcbiAgICAgIGhlaWdodDogMjA0OCxcbiAgICB9KTtcbiAgICBjb25zdCBzcGFjZUlEc2hvcnQgPSB0aGlzLnNwYWNlSUQuc2xpY2UoMCwgOCk7XG4gICAgYXdhaXQgdXBsb2FkQmFzZTY0SW1hZ2UoXG4gICAgICBiYXNlNjQsXG4gICAgICBudWxsLFxuICAgICAgYHZpc2l0cy8ke3RoaXMubW9kZWxJRH0vcGxhbnMvYCxcbiAgICAgIGBwbGFuX2Zsb29yXyR7dGhpcy5jdXJyZW50Rmxvb3IuaWR9XyR7c3BhY2VJRHNob3J0fWBcbiAgICApO1xuICAgIGNvbnN0IHBsYW4gPSB7XG4gICAgICBuYW1lOiBgcGxhbl9mbG9vcl8ke3RoaXMuY3VycmVudEZsb29yLmlkfWAsXG4gICAgICBhbm5leGU6IGB2aXNpdHMvJHt0aGlzLm1vZGVsSUR9L3BsYW5zL3BsYW5fZmxvb3JfJHt0aGlzLmN1cnJlbnRGbG9vci5pZH1fJHtzcGFjZUlEc2hvcnR9LmpwZWdgLFxuICAgICAgem9uZUlEOiB6b25lLmlkLFxuICAgICAgc3BhY2VJRDogdGhpcy5zcGFjZUlELFxuICAgICAgaXNDdXJyZW50Rm9yWm9uZTogdHJ1ZSxcbiAgICAgIGlzTW9kaWZpZWQ6IGZhbHNlLFxuICAgICAgaXNJbXBvcnRlZE1hdHRlcnBvcnQ6IHRydWUsXG4gICAgfSBhcyBQbGFuO1xuICAgIGF3YWl0IHRoaXMucGxhblNlcnZpY2UuY3JlYXRlUGxhbihwbGFuKTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHpvbmUpO1xuICB9XG5cbiAgYWJhbmRvbigpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCdhYmFuZG9ubmluZyBpbXBvcnQnKTtcbiAgICAgIHRoaXMuc3RvcCA9IHRydWU7XG4gICAgICB0aGlzLnJlbW92ZUZyYW1lKCk7XG4gICAgfSwgNTAwKTtcbiAgfVxuXG4gIHJlbW92ZUZyYW1lKCkge1xuICAgIGlmICh0aGlzLmN1cnJlbnRGcmFtZSkge1xuICAgICAgdGhpcy5jdXJyZW50RnJhbWUucmVtb3ZlKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0TGF5ZXJCeU5hbWUobmFtZTogc3RyaW5nKTogUHJvbWlzZTxMYXllcj4ge1xuICAgIGNvbnN0IG1pc3Npb24gPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9uKHRoaXMuc3BhY2VJRCk7XG4gICAgY29uc3QgY3VycmVudE9yZ0lkID0gbWlzc2lvbi5vcmdhbmlzYXRpb25JRDtcbiAgICBjb25zdCBsYXllcnMgPSBhd2FpdCB0aGlzLmxheWVyU2VydmljZS5nZXRMYXllckJ5TmFtZUZvck9yZ2FuaXNhdGlvbihcbiAgICAgIG5hbWUsXG4gICAgICBjdXJyZW50T3JnSWRcbiAgICApO1xuICAgIGlmIChsYXllcnMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGxheWVyc1swXTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubGF5ZXJTZXJ2aWNlLmNyZWF0ZUxheWVyRm9yT3JnYW5pc2F0aW9uKG5hbWUsIGN1cnJlbnRPcmdJZCk7XG4gIH1cbn0iXX0=
@@ -75,4 +75,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
75
75
  providedIn: 'root',
76
76
  }]
77
77
  }], ctorParameters: () => [{ type: i1.Router }] });
78
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0dGVycG9ydC1tZWFzdXJlbWVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9tYXR0ZXJwb3J0LW1lYXN1cmVtZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7O0FBS2pFLE1BQU0sT0FBTyw0QkFBNEI7SUFlbkI7SUFkWixXQUFXLEdBQVUsRUFBRSxDQUFDO0lBQ3hCLG9CQUFvQixHQUFhLEVBQUUsQ0FBQztJQUNwQyxpQkFBaUIsQ0FBTTtJQUV2QixVQUFVLEdBQUc7UUFDbkIsS0FBSyxFQUFFLEdBQUc7UUFDVixNQUFNLEVBQUUsR0FBRztLQUNaLENBQUM7SUFFTSxVQUFVLEdBQUc7UUFDbkIsVUFBVSxFQUFFLEtBQUs7UUFDakIsTUFBTSxFQUFFLElBQUk7S0FDYixDQUFDO0lBRUYsWUFBb0IsTUFBYztRQUFkLFdBQU0sR0FBTixNQUFNLENBQVE7SUFBRyxDQUFDO0lBRXRDOztPQUVHO0lBQ0gsNkJBQTZCLENBQUMsR0FBUSxFQUFFLGNBQXNCO1FBQzVELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDaEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7WUFDN0MsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztZQUMvQixLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsWUFBWSxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDckQsTUFBTSxRQUFRLEdBQUcsMkJBQTJCLENBQzFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUMzQixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUN4QixDQUFDO2dCQUNGLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDM0MsQ0FBQztZQUNELElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtnQkFDakMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLGNBQWMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGNBQWMsQ0FBQyxHQUFRO1FBQ3JCLE9BQU8sR0FBRyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQ2hDLElBQUksQ0FBQyxVQUFVLEVBQ2YsSUFBSSxDQUFDLFVBQVUsQ0FDaEIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxhQUFrQixFQUFFLEVBQUU7WUFDNUIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGFBQWEsQ0FBQztZQUN2QyxPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUNoQyxDQUFDO0lBRUQsa0JBQWtCLENBQUMsVUFBZTtRQUNoQyxPQUFPO1lBQ0wsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQ3pCLEtBQUssRUFBRSxVQUFVLENBQUMsS0FBSztTQUN4QixDQUFDO0lBQ0osQ0FBQztJQUVELGNBQWMsQ0FBQyxNQUFhO1FBQzFCLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO0lBQzVCLENBQUM7SUFFRCxhQUFhO1FBQ1gsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxhQUFhO1FBQ1gsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7d0dBN0VVLDRCQUE0Qjs0R0FBNUIsNEJBQTRCLGNBRjNCLE1BQU07OzRGQUVQLDRCQUE0QjtrQkFIeEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IGdldERpc3RhbmNlQmV0d2VlblR3b1BvaW50cyB9IGZyb20gJy4uL2hlbHBlcnMuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWF0dGVycG9ydE1lYXN1cmVtZW50U2VydmljZSB7XHJcbiAgcHJpdmF0ZSBsYXN0TWVhc3VyZTogYW55W10gPSBbXTtcclxuICBwcml2YXRlIGRpc3RhbmNlc0xhc3RNZWFzdXJlOiBudW1iZXJbXSA9IFtdO1xyXG4gIHByaXZhdGUgbGFzdFNjcmVlbnNob3RVcmk6IGFueTtcclxuXHJcbiAgcHJpdmF0ZSByZXNvbHV0aW9uID0ge1xyXG4gICAgd2lkdGg6IDUwMCxcclxuICAgIGhlaWdodDogNjAwLFxyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgdmlzaWJpbGl0eSA9IHtcclxuICAgIG1hdHRlcnRhZ3M6IGZhbHNlLFxyXG4gICAgc3dlZXBzOiB0cnVlLFxyXG4gIH07XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcm91dGVyOiBSb3V0ZXIpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGxiYWNrIGFmdGVyIG1lYXN1cmVtZW50IGlzIHBlcmZvcm1lZFxyXG4gICAqL1xyXG4gIGdldERpc3RhbmNlRm9yTGFzdE1lYXN1cmVtZW50KHNkazogYW55LCBjdXJyZW50U3BhY2VJRDogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy5sYXN0TWVhc3VyZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IG51bWJlclBvaW50cyA9IHRoaXMubGFzdE1lYXN1cmUubGVuZ3RoO1xyXG4gICAgICB0aGlzLmRpc3RhbmNlc0xhc3RNZWFzdXJlID0gW107XHJcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCBudW1iZXJQb2ludHM7IGluZGV4ICs9IDEpIHtcclxuICAgICAgICBjb25zdCBkaXN0YW5jZSA9IGdldERpc3RhbmNlQmV0d2VlblR3b1BvaW50cyhcclxuICAgICAgICAgIHRoaXMubGFzdE1lYXN1cmVbaW5kZXggLSAxXSxcclxuICAgICAgICAgIHRoaXMubGFzdE1lYXN1cmVbaW5kZXhdXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmRpc3RhbmNlc0xhc3RNZWFzdXJlLnB1c2goZGlzdGFuY2UpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudGFrZVNjcmVlblNob3Qoc2RrKS50aGVuKCgpID0+IHtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYHZpc2l0LyR7Y3VycmVudFNwYWNlSUR9L2FkZF9tZWFzdXJlbWVudGBdKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRMYXN0RGlzdGFuY2VzKCk6IG51bWJlcltdIHtcclxuICAgIHJldHVybiB0aGlzLmRpc3RhbmNlc0xhc3RNZWFzdXJlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGFrZXMgc2NyZWVuc2hvdCBhbmQgc2F2ZXMgYmFzZTY0IGluIGxhc3RTY3JlZW5zaG90VXJpXHJcbiAgICogQHBhcmFtIHNkayBNYXR0ZXJwb3J0IFNES1xyXG4gICAqIEByZXR1cm5zIFByb21pc2VcclxuICAgKi9cclxuICB0YWtlU2NyZWVuU2hvdChzZGs6IGFueSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIHNkay5SZW5kZXJlci50YWtlU2NyZWVuU2hvdChcclxuICAgICAgdGhpcy5yZXNvbHV0aW9uLFxyXG4gICAgICB0aGlzLnZpc2liaWxpdHlcclxuICAgICkudGhlbigoc2NyZWVuU2hvdFVyaTogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMubGFzdFNjcmVlbnNob3RVcmkgPSBzY3JlZW5TaG90VXJpO1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldFNjcmVlblNob3RVcmkoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLmxhc3RTY3JlZW5zaG90VXJpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TGFzdE1lYXN1cmVtZW50KHBvc2VDYW1lcmE6IGFueSk6IGFueSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBtZWFzdXJlOiB0aGlzLmxhc3RNZWFzdXJlLFxyXG4gICAgICBzd2VlcDogcG9zZUNhbWVyYS5zd2VlcCxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBzZXRMYXN0TWVhc3VyZShwb2ludHM6IGFueVtdKSB7XHJcbiAgICB0aGlzLmxhc3RNZWFzdXJlID0gcG9pbnRzO1xyXG4gIH1cclxuXHJcbiAgZ2V0UmVzb2x1dGlvbigpIHtcclxuICAgIHJldHVybiB0aGlzLnJlc29sdXRpb247XHJcbiAgfVxyXG5cclxuICBnZXRWaXNpYmlsaXR5KCkge1xyXG4gICAgcmV0dXJuIHRoaXMudmlzaWJpbGl0eTtcclxuICB9XHJcbn1cclxuIl19
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0dGVycG9ydC1tZWFzdXJlbWVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9tYXR0ZXJwb3J0LW1lYXN1cmVtZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7O0FBS2pFLE1BQU0sT0FBTyw0QkFBNEI7SUFlbkI7SUFkWixXQUFXLEdBQVUsRUFBRSxDQUFDO0lBQ3hCLG9CQUFvQixHQUFhLEVBQUUsQ0FBQztJQUNwQyxpQkFBaUIsQ0FBTTtJQUV2QixVQUFVLEdBQUc7UUFDbkIsS0FBSyxFQUFFLEdBQUc7UUFDVixNQUFNLEVBQUUsR0FBRztLQUNaLENBQUM7SUFFTSxVQUFVLEdBQUc7UUFDbkIsVUFBVSxFQUFFLEtBQUs7UUFDakIsTUFBTSxFQUFFLElBQUk7S0FDYixDQUFDO0lBRUYsWUFBb0IsTUFBYztRQUFkLFdBQU0sR0FBTixNQUFNLENBQVE7SUFBRyxDQUFDO0lBRXRDOztPQUVHO0lBQ0gsNkJBQTZCLENBQUMsR0FBUSxFQUFFLGNBQXNCO1FBQzVELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDaEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7WUFDN0MsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztZQUMvQixLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsWUFBWSxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDckQsTUFBTSxRQUFRLEdBQUcsMkJBQTJCLENBQzFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUMzQixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUN4QixDQUFDO2dCQUNGLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDM0MsQ0FBQztZQUNELElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtnQkFDakMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLGNBQWMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGNBQWMsQ0FBQyxHQUFRO1FBQ3JCLE9BQU8sR0FBRyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQ2hDLElBQUksQ0FBQyxVQUFVLEVBQ2YsSUFBSSxDQUFDLFVBQVUsQ0FDaEIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxhQUFrQixFQUFFLEVBQUU7WUFDNUIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGFBQWEsQ0FBQztZQUN2QyxPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUNoQyxDQUFDO0lBRUQsa0JBQWtCLENBQUMsVUFBZTtRQUNoQyxPQUFPO1lBQ0wsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQ3pCLEtBQUssRUFBRSxVQUFVLENBQUMsS0FBSztTQUN4QixDQUFDO0lBQ0osQ0FBQztJQUVELGNBQWMsQ0FBQyxNQUFhO1FBQzFCLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO0lBQzVCLENBQUM7SUFFRCxhQUFhO1FBQ1gsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxhQUFhO1FBQ1gsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7d0dBN0VVLDRCQUE0Qjs0R0FBNUIsNEJBQTRCLGNBRjNCLE1BQU07OzRGQUVQLDRCQUE0QjtrQkFIeEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgZ2V0RGlzdGFuY2VCZXR3ZWVuVHdvUG9pbnRzIH0gZnJvbSAnLi4vaGVscGVycy5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIE1hdHRlcnBvcnRNZWFzdXJlbWVudFNlcnZpY2Uge1xuICBwcml2YXRlIGxhc3RNZWFzdXJlOiBhbnlbXSA9IFtdO1xuICBwcml2YXRlIGRpc3RhbmNlc0xhc3RNZWFzdXJlOiBudW1iZXJbXSA9IFtdO1xuICBwcml2YXRlIGxhc3RTY3JlZW5zaG90VXJpOiBhbnk7XG5cbiAgcHJpdmF0ZSByZXNvbHV0aW9uID0ge1xuICAgIHdpZHRoOiA1MDAsXG4gICAgaGVpZ2h0OiA2MDAsXG4gIH07XG5cbiAgcHJpdmF0ZSB2aXNpYmlsaXR5ID0ge1xuICAgIG1hdHRlcnRhZ3M6IGZhbHNlLFxuICAgIHN3ZWVwczogdHJ1ZSxcbiAgfTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJvdXRlcjogUm91dGVyKSB7fVxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBhZnRlciBtZWFzdXJlbWVudCBpcyBwZXJmb3JtZWRcbiAgICovXG4gIGdldERpc3RhbmNlRm9yTGFzdE1lYXN1cmVtZW50KHNkazogYW55LCBjdXJyZW50U3BhY2VJRDogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMubGFzdE1lYXN1cmUubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgbnVtYmVyUG9pbnRzID0gdGhpcy5sYXN0TWVhc3VyZS5sZW5ndGg7XG4gICAgICB0aGlzLmRpc3RhbmNlc0xhc3RNZWFzdXJlID0gW107XG4gICAgICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDwgbnVtYmVyUG9pbnRzOyBpbmRleCArPSAxKSB7XG4gICAgICAgIGNvbnN0IGRpc3RhbmNlID0gZ2V0RGlzdGFuY2VCZXR3ZWVuVHdvUG9pbnRzKFxuICAgICAgICAgIHRoaXMubGFzdE1lYXN1cmVbaW5kZXggLSAxXSxcbiAgICAgICAgICB0aGlzLmxhc3RNZWFzdXJlW2luZGV4XVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmRpc3RhbmNlc0xhc3RNZWFzdXJlLnB1c2goZGlzdGFuY2UpO1xuICAgICAgfVxuICAgICAgdGhpcy50YWtlU2NyZWVuU2hvdChzZGspLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYHZpc2l0LyR7Y3VycmVudFNwYWNlSUR9L2FkZF9tZWFzdXJlbWVudGBdKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldExhc3REaXN0YW5jZXMoKTogbnVtYmVyW10ge1xuICAgIHJldHVybiB0aGlzLmRpc3RhbmNlc0xhc3RNZWFzdXJlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRha2VzIHNjcmVlbnNob3QgYW5kIHNhdmVzIGJhc2U2NCBpbiBsYXN0U2NyZWVuc2hvdFVyaVxuICAgKiBAcGFyYW0gc2RrIE1hdHRlcnBvcnQgU0RLXG4gICAqIEByZXR1cm5zIFByb21pc2VcbiAgICovXG4gIHRha2VTY3JlZW5TaG90KHNkazogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHNkay5SZW5kZXJlci50YWtlU2NyZWVuU2hvdChcbiAgICAgIHRoaXMucmVzb2x1dGlvbixcbiAgICAgIHRoaXMudmlzaWJpbGl0eVxuICAgICkudGhlbigoc2NyZWVuU2hvdFVyaTogYW55KSA9PiB7XG4gICAgICB0aGlzLmxhc3RTY3JlZW5zaG90VXJpID0gc2NyZWVuU2hvdFVyaTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFNjcmVlblNob3RVcmkoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5sYXN0U2NyZWVuc2hvdFVyaTtcbiAgfVxuXG4gIGdldExhc3RNZWFzdXJlbWVudChwb3NlQ2FtZXJhOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICBtZWFzdXJlOiB0aGlzLmxhc3RNZWFzdXJlLFxuICAgICAgc3dlZXA6IHBvc2VDYW1lcmEuc3dlZXAsXG4gICAgfTtcbiAgfVxuXG4gIHNldExhc3RNZWFzdXJlKHBvaW50czogYW55W10pIHtcbiAgICB0aGlzLmxhc3RNZWFzdXJlID0gcG9pbnRzO1xuICB9XG5cbiAgZ2V0UmVzb2x1dGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHV0aW9uO1xuICB9XG5cbiAgZ2V0VmlzaWJpbGl0eSgpIHtcbiAgICByZXR1cm4gdGhpcy52aXNpYmlsaXR5O1xuICB9XG59XG4iXX0=
@@ -363,4 +363,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
363
363
  providedIn: 'root',
364
364
  }]
365
365
  }], ctorParameters: () => [] });
366
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0dGVycG9ydC1uYXZpZ2F0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL3NlcnZpY2VzL21hdHRlcnBvcnQtbmF2aWdhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUFLMUMsTUFBTSxPQUFPLDJCQUEyQjtJQUMvQixlQUFlLEdBQVEsSUFBSSxDQUFDO0lBQzVCLE1BQU0sR0FBeUIsSUFBSSxDQUFDO0lBQ3BDLE1BQU0sR0FBaUUsSUFBSSxDQUFDO0lBQzVFLGVBQWUsR0FBYSxFQUFFLENBQUM7SUFFL0IsWUFBWSxHQUFvQixJQUFJLE9BQU8sRUFBRSxDQUFDO0lBQzlDLG1CQUFtQixHQUFHLElBQUksT0FBTyxFQUFjLENBQUM7SUFDdkQsMEVBQTBFO0lBQ25FLGFBQWEsR0FBRyxJQUFJLE9BQU8sRUFBUyxDQUFDO0lBRXJDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztJQUN6QixpQkFBaUIsR0FBRyxLQUFLLENBQUM7SUFDMUIsaUJBQWlCLEdBQWUsVUFBVSxDQUFDLE9BQU8sQ0FBQztJQUNuRCxZQUFZLEdBQVUsRUFBRSxDQUFDO0lBQ2hDLDRHQUE0RztJQUNyRyxvQkFBb0IsR0FBa0IsSUFBSSxDQUFDO0lBRWxELDZDQUE2QztJQUM3QyxxR0FBcUc7SUFDckcsMkdBQTJHO0lBQ25HLFNBQVMsR0FBd0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUMzQyxTQUFTLEdBQXdCLElBQUksR0FBRyxF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LENBQUMsTUFBTSxDQUFDO2dCQUMzQyxNQUFNO1lBQ1IsS0FBSyxvQkFBb0I7Z0JBQ3ZCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDO2dCQUNsRCxNQUFNO1lBQ1I7Z0JBQ0UsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUM7UUFDaEQsQ0FBQztRQUNELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDeEQsQ0FBQzt3R0FuWFUsMkJBQTJCOzRHQUEzQiwyQkFBMkIsY0FGMUIsTUFBTTs7NEZBRVAsMkJBQTJCO2tCQUh2QyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGlzRGV2TW9kZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENhbWVyYU1vZGUgfSBmcm9tICcuLi90eXBlcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgd2FpdCB9IGZyb20gJy4uL2hlbHBlcnMuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWF0dGVycG9ydE5hdmlnYXRpb25TZXJ2aWNlIHtcclxuICBwdWJsaWMgc3dlZXBDb2xsZWN0aW9uOiBhbnkgPSBudWxsO1xyXG4gIHB1YmxpYyBzd2VlcHM6IEFycmF5PHN0cmluZz4gfCBudWxsID0gbnVsbDtcclxuICBwdWJsaWMgZmxvb3JzOiBBcnJheTx7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZzsgc2VxdWVuY2U6IG51bWJlciB9PiB8IG51bGwgPSBudWxsO1xyXG4gIHB1YmxpYyBmb3JiaWRkZW5Td2VlcHM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gIHB1YmxpYyBjdXJyZW50U3dlZXA6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgcHVibGljIG9uQ2FtZXJhTW9kZUNoYW5nZWQgPSBuZXcgU3ViamVjdDxDYW1lcmFNb2RlPigpO1xyXG4gIC8qKiBFbWl0cyB3aGVuZXZlciB0aGUgc2V0IG9mIGN1cnJlbnQgcm9vbXMgY2hhbmdlcyAoc2RrLlJvb20uY3VycmVudCkuICovXHJcbiAgcHVibGljIG9uUm9vbUNoYW5nZWQgPSBuZXcgU3ViamVjdDxhbnlbXT4oKTtcclxuXHJcbiAgcHVibGljIGluVHJhbnNpdGlvbk1vZGUgPSBmYWxzZTtcclxuICBwdWJsaWMgaW5UcmFuc2l0aW9uU3dlZXAgPSBmYWxzZTtcclxuICBwdWJsaWMgY3VycmVudENhbWVyYU1vZGU6IENhbWVyYU1vZGUgPSBDYW1lcmFNb2RlLk9VVFNJREU7XHJcbiAgcHVibGljIGN1cnJlbnRSb29tczogYW55W10gPSBbXTtcclxuICAvKiogU2VxdWVuY2UgbnVtYmVyIG9mIHRoZSBmbG9vciBjdXJyZW50bHkgdmlzaWJsZSBpbiBzZGsuRmxvb3IuY3VycmVudCAobnVsbCA9IHNpbmdsZS1mbG9vciBvciB1bmtub3duKS4gKi9cclxuICBwdWJsaWMgY3VycmVudEZsb29yU2VxdWVuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuICAvLyDilIDilIAgQmlkaXJlY3Rpb25hbCBzaWQg4oaUIHV1aWQgbG9va3VwIG1hcHMg4pSA4pSAXHJcbiAgLy8gc2lkICA9IHNob3J0IHJ1bnRpbWUga2V5IHVzZWQgYnkgTWF0dGVycG9ydCBTREsgKGNvbGxlY3Rpb24ga2V5cywgU3dlZXAubW92ZVRvLCBDYW1lcmEucG9zZS5zd2VlcClcclxuICAvLyB1dWlkID0gcGVyc2lzdGVudCBpZGVudGlmaWVyIHN0b3JlZCBpbiB0aGUgZGF0YWJhc2UgKHpvbmUuc3dlZXBJRHMsIHBvaS5tYXR0ZXJwb3J0U3dlZXBJRCwgc3RhcnRTd2VlcElEKVxyXG4gIHByaXZhdGUgc2lkVG9VdWlkOiBNYXA8c3RyaW5nLCBzdHJpbmc+ID0gbmV3IE1hcCgpO1xyXG4gIHByaXZhdGUgdXVpZFRvU2lkOiBNYXA8c3RyaW5nLCBzdHJpbmc+ID0gbmV3IE1hcCgpO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuICAvLyDilIDilIAgU3dlZXAgSUQgdHJhbnNsYXRpb24gaGVscGVycyDilIDilIBcclxuXHJcbiAgLyoqXHJcbiAgICogQnVpbGRzIHRoZSBiaWRpcmVjdGlvbmFsIHNpZCDihpQgdXVpZCBtYXBzIGZyb20gdGhlIHN3ZWVwIGNvbGxlY3Rpb24uXHJcbiAgICogTXVzdCBiZSBjYWxsZWQgZXZlcnkgdGltZSB0aGUgc3dlZXAgY29sbGVjdGlvbiBpcyB1cGRhdGVkLlxyXG4gICAqL1xyXG4gIGJ1aWxkU3dlZXBJZE1hcHMoY29sbGVjdGlvbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnNpZFRvVXVpZC5jbGVhcigpO1xyXG4gICAgdGhpcy51dWlkVG9TaWQuY2xlYXIoKTtcclxuICAgIGlmICghY29sbGVjdGlvbikgcmV0dXJuO1xyXG4gICAgZm9yIChjb25zdCBzaWQgb2YgT2JqZWN0LmtleXMoY29sbGVjdGlvbikpIHtcclxuICAgICAgY29uc3Qgc3dlZXBEYXRhID0gY29sbGVjdGlvbltzaWRdO1xyXG4gICAgICBjb25zdCB1dWlkID0gc3dlZXBEYXRhPy51dWlkO1xyXG4gICAgICBpZiAodXVpZCAmJiB1dWlkICE9PSBzaWQpIHtcclxuICAgICAgICB0aGlzLnNpZFRvVXVpZC5zZXQoc2lkLCB1dWlkKTtcclxuICAgICAgICB0aGlzLnV1aWRUb1NpZC5zZXQodXVpZCwgc2lkKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBBbHNvIG1hcCBzaWTihpJzaWQgYW5kIHV1aWTihpJ1dWlkIGZvciBwYXNzLXRocm91Z2ggY2FzZXNcclxuICAgICAgdGhpcy5zaWRUb1V1aWQuc2V0KHNpZCwgdXVpZCB8fCBzaWQpO1xyXG4gICAgICBpZiAodXVpZCkge1xyXG4gICAgICAgIHRoaXMudXVpZFRvU2lkLnNldCh1dWlkLCBzaWQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhgW01hdHRlcnBvcnROYXZpZ2F0aW9uXSBCdWlsdCBzd2VlcCBJRCBtYXBzOiAke3RoaXMuc2lkVG9VdWlkLnNpemV9IHNpZHMsICR7dGhpcy51dWlkVG9TaWQuc2l6ZX0gdXVpZHNgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc29sdmVzIGFueSBzd2VlcCBpZGVudGlmaWVyIChzaWQgb3IgdXVpZCkgdG8gdGhlIFNESyBydW50aW1lICoqc2lkKiouXHJcbiAgICogVGhpcyBpcyB3aGF0IHNkay5Td2VlcC5tb3ZlVG8oKSBhbmQgc2RrLlN3ZWVwLmRpc2FibGUoKSBleHBlY3QuXHJcbiAgICogRmFsbHMgYmFjayB0byB0aGUgaW5wdXQgaWYgbm8gbWFwcGluZyBleGlzdHMuXHJcbiAgICovXHJcbiAgcmVzb2x2ZVN3ZWVwU2lkKGlkT3JVdWlkOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKCFpZE9yVXVpZCkgcmV0dXJuIGlkT3JVdWlkO1xyXG4gICAgLy8gSWYgaXQncyBhbHJlYWR5IGEga25vd24gc2lkIChleGlzdHMgYXMgYSBrZXkgaW4gc3dlZXBDb2xsZWN0aW9uKSwgcmV0dXJuIGl0XHJcbiAgICBpZiAodGhpcy5zaWRUb1V1aWQuaGFzKGlkT3JVdWlkKSkgcmV0dXJuIGlkT3JVdWlkO1xyXG4gICAgLy8gT3RoZXJ3aXNlIHRyeSB0byBtYXAgZnJvbSB1dWlkIOKGkiBzaWRcclxuICAgIHJldHVybiB0aGlzLnV1aWRUb1NpZC5nZXQoaWRPclV1aWQpID8/IGlkT3JVdWlkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzb2x2ZXMgYW55IHN3ZWVwIGlkZW50aWZpZXIgKHNpZCBvciB1dWlkKSB0byB0aGUgcGVyc2lzdGVudCAqKnV1aWQqKi5cclxuICAgKiBUaGlzIGlzIHdoYXQgdGhlIGRhdGFiYXNlIHN0b3JlcyAoem9uZS5zd2VlcElEcywgcG9pLm1hdHRlcnBvcnRTd2VlcElEKS5cclxuICAgKiBGYWxscyBiYWNrIHRvIHRoZSBpbnB1dCBpZiBubyBtYXBwaW5nIGV4aXN0cy5cclxuICAgKi9cclxuICByZXNvbHZlU3dlZXBVdWlkKHNpZE9yVXVpZDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmICghc2lkT3JVdWlkKSByZXR1cm4gc2lkT3JVdWlkO1xyXG4gICAgLy8gSWYgaXQncyBhbHJlYWR5IGEga25vd24gdXVpZCwgcmV0dXJuIGl0XHJcbiAgICBpZiAodGhpcy51dWlkVG9TaWQuaGFzKHNpZE9yVXVpZCkpIHJldHVybiBzaWRPclV1aWQ7XHJcbiAgICAvLyBPdGhlcndpc2UgdHJ5IHRvIG1hcCBmcm9tIHNpZCDihpIgdXVpZFxyXG4gICAgcmV0dXJuIHRoaXMuc2lkVG9VdWlkLmdldChzaWRPclV1aWQpID8/IHNpZE9yVXVpZDtcclxuICB9XHJcblxyXG4gIGFzeW5jIGFjdGlvbl90b29sYm94X2Zsb29ycGxhbihzZGs6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuaW5UcmFuc2l0aW9uTW9kZSB8fCB0aGlzLmluVHJhbnNpdGlvblN3ZWVwKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCd2aWV3ZXIgaXMgaW4gdHJhbnNpdGlvbiwgY2Fubm90IGdvIGZsb29ycGxhbicpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0cnkge1xyXG4gICAgICBhd2FpdCBzZGsuTW9kZS5tb3ZlVG8oJ21vZGUuZmxvb3JwbGFuJyk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdjYW5ub3QgZ28gdG8gZmxvb3JwbGFuJywgZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhY3Rpb25fdG9vbGJveF9pbnNpZGVfdmlldyhzZGs6IGFueSkge1xyXG4gICAgc2RrLk1vZGUubW92ZVRvKCdtb2RlLmluc2lkZScpO1xyXG4gIH1cclxuXHJcbiAgYWN0aW9uU2hvd0FsbEZsb29ycyhzZGs6IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgc2RrLkZsb29yLnNob3dBbGwoKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5sb2coJ2Nhbm5vdCBzaG93IGFsbCBmbG9vcnMnLCBlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGFjdGlvbl90b29sYm94X2RvbGxob3VzZShzZGs6IGFueSkge1xyXG4gICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmluVHJhbnNpdGlvbk1vZGUgfHwgdGhpcy5pblRyYW5zaXRpb25Td2VlcCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCd2aWV3ZXIgaXMgaW4gdHJhbnNpdGlvbiwgY2Fubm90IGdvIGRvbGxob3VzZScpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGF3YWl0IHNkay5Nb2RlLm1vdmVUbygnbW9kZS5kb2xsaG91c2UnKTtcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdjYW5ub3QgZ28gdG8gZG9sbGhvdXNlJywgZSk7XHJcbiAgICAgIH1cclxuICAgIH0sIDEyMDApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWN0aW9uX2dvX3RvX2Zsb29yKHNkazogYW55LCBmbG9vck5hbWU6IHN0cmluZywgbWF0dGVycG9ydEZsb29yU2VxdWVuY2U6IG51bWJlciA9IG51bGwpIHtcclxuICAgIGlmICghdGhpcy5mbG9vcnMpIHtcclxuICAgICAgY29uc29sZS5sb2coJ0Zsb29yIGFyZSBub3QgbG9hZGVkIHlldCcpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgZmxvb3JNYXR0ZXJwb3J0ID0gdGhpcy5mbG9vcnMuZmluZChcclxuICAgICAgKGZsb29yKSA9PiBmbG9vci5zZXF1ZW5jZSA9PT0gbWF0dGVycG9ydEZsb29yU2VxdWVuY2VcclxuICAgICk7XHJcbiAgICBpZiAoIWZsb29yTWF0dGVycG9ydCkge1xyXG4gICAgICBmbG9vck1hdHRlcnBvcnQgPSB0aGlzLmZsb29ycy5maW5kKFxyXG4gICAgICAgIChmbG9vcikgPT4gZmxvb3JOYW1lLmluY2x1ZGVzKGZsb29yLm5hbWUpICYmIGZsb29yLm5hbWUgIT0gJydcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmICghZmxvb3JNYXR0ZXJwb3J0KSB7XHJcbiAgICAgIGZsb29yTWF0dGVycG9ydCA9IHRoaXMuZmxvb3JzLmZpbmQoKGZsb29yKSA9PlxyXG4gICAgICAgIGZsb29yTmFtZS5pbmNsdWRlcyhmbG9vci5pZClcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmIChmbG9vck1hdHRlcnBvcnQpIHtcclxuICAgICAgbGV0IHJldHJ5ID0gdHJ1ZTtcclxuICAgICAgd2hpbGUgKHJldHJ5KSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGNvbnN0IGZsb29ySW5kZXggPSBhd2FpdCBzZGsuRmxvb3IubW92ZVRvKGZsb29yTWF0dGVycG9ydC5zZXF1ZW5jZSk7XHJcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKFwibW92ZWQgdG8gZmxvb3JJbmRleFwiLCBmbG9vckluZGV4KTtcclxuICAgICAgICAgIHJldHJ5ID0gZmFsc2U7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdDYW5ub3QgbW92ZSB0byBGbG9vcicsIGVycm9yKTtcclxuICAgICAgICAgIGF3YWl0IHdhaXQoMTAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUud2FybignTm8gbWF0dGVycG9ydCBmbG9vciBmb3VuZCB0byBtb3ZlIHRvJyk7XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZyhcImFjdGlvbl9nb190b19mbG9vci5mbG9vck1hdHRlcnBvcnRcIiwgZmxvb3JNYXR0ZXJwb3J0KTtcclxuICAgIGNvbnNvbGUubG9nKFwiYWN0aW9uX2dvX3RvX2Zsb29yLmZsb29yTmFtZVwiLCBmbG9vck5hbWUpO1xyXG4gICAgY29uc29sZS5sb2coXCJhY3Rpb25fZ29fdG9fZmxvb3IubWF0dGVycG9ydEZsb29yU2VxdWVuY2VcIiwgbWF0dGVycG9ydEZsb29yU2VxdWVuY2UpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTmF2aWdhdGUgdG8gYSBzd2VlcC4gVGhlIGNhbGxlciBjYW4gcGFzcyBlaXRoZXIgYSBzaWQgb3IgYSB1dWlkO1xyXG4gICAqIHRoaXMgbWV0aG9kIHJlc29sdmVzIGl0IHRvIHRoZSBTREsgc2lkIGJlZm9yZSBjYWxsaW5nIFN3ZWVwLm1vdmVUbygpLlxyXG4gICAqL1xyXG4gIGFzeW5jIGFjdGlvbl9nb190b19zd2VlcChzZGs6IGFueSwgc3dlZXA6IHN0cmluZywgcm90YXRpb24/OiB7IHg6IG51bWJlciwgeTogbnVtYmVyIH0gfCBudWxsKSB7XHJcbiAgICBjb25zdCByZXNvbHZlZFNpZCA9IHRoaXMucmVzb2x2ZVN3ZWVwU2lkKHN3ZWVwKTtcclxuICAgIGlmICh0aGlzLmZvcmJpZGRlblN3ZWVwcy5pbmNsdWRlcyhzd2VlcCkgfHwgdGhpcy5mb3JiaWRkZW5Td2VlcHMuaW5jbHVkZXMocmVzb2x2ZWRTaWQpKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCd1c2VyIGlzIG5vdCBhbGxvd2VkIHRvIGdvIHRvIHRoaXMgc3dlZXAnKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKGlzRGV2TW9kZSgpICYmIHJlc29sdmVkU2lkICE9PSBzd2VlcCkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKGBbYWN0aW9uX2dvX3RvX3N3ZWVwXSBSZXNvbHZlZCB1dWlkIFwiJHtzd2VlcH1cIiDihpIgc2lkIFwiJHtyZXNvbHZlZFNpZH1cImApO1xyXG4gICAgfVxyXG4gICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgdGhpcy5pblRyYW5zaXRpb25Td2VlcCA9IHRydWU7XHJcbiAgICAgICAgYXdhaXQgc2RrLlN3ZWVwLm1vdmVUbyhyZXNvbHZlZFNpZCwge1xyXG4gICAgICAgICAgdHJhbnNpdGlvbjogc2RrLkNhbWVyYS5UcmFuc2l0aW9uVHlwZS5JTlNUQU5ULFxyXG4gICAgICAgICAgdHJhbnNpdGlvblRpbWU6IDE1MDBcclxuICAgICAgICB9KTtcclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICB0aGlzLmluVHJhbnNpdGlvblN3ZWVwID0gZmFsc2U7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0Nhbm5vdCBtb3ZlIHRvIHN3ZWVwJywgZXJyb3IpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChyb3RhdGlvbikge1xyXG4gICAgICAgIGF3YWl0IHNkay5DYW1lcmEuc2V0Um90YXRpb24ocm90YXRpb24sIHsgc3BlZWQ6IDEwMCB9KTtcclxuICAgICAgfVxyXG4gICAgfSwgMTAwMCk7XHJcbiAgICBjb25zb2xlLmxvZyhcImFjdGlvbl9nb190b19zd2VlcC5zd2VlcFwiLCBzd2VlcCk7XHJcbiAgICBjb25zb2xlLmxvZyhcImFjdGlvbl9nb190b19zd2VlcC5yb3RhdGlvblwiLCByb3RhdGlvbik7XHJcbiAgICBjb25zb2xlLmxvZyhcImFjdGlvbl9nb190b19zd2VlcC5yZXNvbHZlZFNpZFwiLCByZXNvbHZlZFNpZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEaXNhYmxlIGZvcmJpZGRlbiBzd2VlcHMuIFJlc29sdmVzIGVhY2ggc3dlZXAgSUQgdG8gc2lkIGJlZm9yZSBjYWxsaW5nIFNESy5cclxuICAgKi9cclxuICBhc3luYyByZW1vdmVGb3JiaWRkZW5Td2VlcHMoc2RrOiBhbnksIGZvcmJpZGRlblN3ZWVwczogc3RyaW5nW10pIHtcclxuICAgIHRoaXMuZm9yYmlkZGVuU3dlZXBzID0gWy4uLmZvcmJpZGRlblN3ZWVwc107XHJcbiAgICBsZXQgcmVtb3ZlZCA9IDA7XHJcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgZm9yYmlkZGVuU3dlZXBzLm1hcChhc3luYyAoc3dlZXApID0+IHtcclxuICAgICAgICBjb25zdCByZXNvbHZlZFNpZCA9IHRoaXMucmVzb2x2ZVN3ZWVwU2lkKHN3ZWVwKTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgYXdhaXQgc2RrLlN3ZWVwLmRpc2FibGUocmVzb2x2ZWRTaWQpO1xyXG4gICAgICAgICAgcmVtb3ZlZCArPSAxO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICAgIGNvbnNvbGUubG9nKCdyZW1vdmVkIHN3ZWVwczonLCByZW1vdmVkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1vdmUgdG8gYSBwb3NpdGlvblxyXG4gICAqIEBwYXJhbSBzZGsgXHJcbiAgICogQHBhcmFtIHBvc2l0aW9uIFxyXG4gICAqIEBwYXJhbSByb3RhdGlvbiBcclxuICAgKiBAcGFyYW0gb3B0aW9ucyBcclxuICAgKi9cclxuICBwdWJsaWMgYXN5bmMgbW92ZV90b19wb3NpdGlvbihcclxuICAgIHNkazogYW55LFxyXG4gICAgcG9zaXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHo6IG51bWJlciB9LFxyXG4gICAgcm90YXRpb246IHsgeWF3OiBudW1iZXI7IHBpdGNoPzogbnVtYmVyOyByb2xsPzogbnVtYmVyIH0gfCBudWxsLFxyXG4gICAgb3B0aW9ucz86IHtcclxuICAgICAgdHJhbnNpdGlvbj86ICdGTFknIHwgJ0lOU1RBTlQnIHwgJ0lNTUVESUFURSc7XHJcbiAgICAgIGR1cmF0aW9uTXM/OiBudW1iZXI7XHJcbiAgICAgIGFuZ2xlc0luRGVncmVlcz86IGJvb2xlYW47XHJcbiAgICAgIG9mZnNldD86IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHo6IG51bWJlciB9O1xyXG4gICAgfVxyXG4gICk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgLy8gVmFsaWRhdGUgU0RLXHJcbiAgICBpZiAoIXNkaykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01hdHRlcnBvcnQgU0RLIGluc3RhbmNlIGlzIHJlcXVpcmVkJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTWVyZ2Ugb3B0aW9ucyB3aXRoIGRlZmF1bHRzXHJcbiAgICBjb25zdCB7XHJcbiAgICAgIHRyYW5zaXRpb24gPSAnRkxZJyxcclxuICAgICAgZHVyYXRpb25NcyA9IDgwMCxcclxuICAgICAgYW5nbGVzSW5EZWdyZWVzID0gdHJ1ZSxcclxuICAgICAgb2Zmc2V0ID0geyB4OiAwLCB5OiAwLCB6OiAwIH1cclxuICAgIH0gPSBvcHRpb25zIHx8IHt9O1xyXG5cclxuICAgIGNvbnN0IGRlZ1RvUmFkID0gKGQ6IG51bWJlcikgPT4gZCAqIE1hdGguUEkgLyAxODA7XHJcblxyXG4gICAgLy8gUHJlcGFyZSByb3RhdGlvbiB2YWx1ZXMgKGRlZmF1bHQgdG8gMCB3aGVuIG5vdCBwcm92aWRlZClcclxuICAgIGNvbnN0IHlhdyA9IHJvdGF0aW9uPy55YXcgPz8gMDtcclxuICAgIGNvbnN0IHBpdGNoID0gcm90YXRpb24/LnBpdGNoID8/IDA7XHJcbiAgICBjb25zdCByb2xsID0gcm90YXRpb24/LnJvbGwgPz8gMDtcclxuXHJcbiAgICAvLyBDb252ZXJ0IHRvIHJhZGlhbnMgaWYgYW5nbGVzIGFyZSBwcm92aWRlZCBpbiBkZWdyZWVzXHJcbiAgICBjb25zdCByb3RZYXcgPSBhbmdsZXNJbkRlZ3JlZXMgPyBkZWdUb1JhZCh5YXcpIDogeWF3O1xyXG4gICAgY29uc3Qgcm90UGl0Y2ggPSBhbmdsZXNJbkRlZ3JlZXMgPyBkZWdUb1JhZChwaXRjaCkgOiBwaXRjaDtcclxuICAgIGNvbnN0IHJvdFJvbGwgPSBhbmdsZXNJbkRlZ3JlZXMgPyBkZWdUb1JhZChyb2xsKSA6IHJvbGw7XHJcblxyXG4gICAgLy8gUHJlc2VydmUgcHJldmlvdXMgdHJhbnNpdGlvbiBmbGFnIGFuZCBtYXJrIGFzIGluLXRyYW5zaXRpb25cclxuICAgIGNvbnN0IHByZXZJblRyYW5zaXRpb24gPSB0aGlzLmluVHJhbnNpdGlvbk1vZGU7XHJcbiAgICB0aGlzLmluVHJhbnNpdGlvbk1vZGUgPSB0cnVlO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIC8vIEF0dGVtcHQgdG8gdXNlIENhbWVyYS5sb29rQXQgd2hlbiBhdmFpbGFibGVcclxuICAgICAgaWYgKHNkaz8uQ2FtZXJhPy5sb29rQXQpIHtcclxuICAgICAgICBjb25zdCBsb29rQXRPcHRzOiBhbnkgPSB7fTtcclxuICAgICAgICAvLyBQcmVmZXIgU0RLIGNvbnN0YW50cyB3aGVuIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHVzZSBmYWxsYmFjayBzdHJpbmdcclxuICAgICAgICBpZiAoc2RrLkNhbWVyYS5UcmFuc2l0aW9uVHlwZSAmJiBzZGsuQ2FtZXJhLlRyYW5zaXRpb25UeXBlW3RyYW5zaXRpb25dKSB7XHJcbiAgICAgICAgICBsb29rQXRPcHRzLnRyYW5zaXRpb24gPSBzZGsuQ2FtZXJhLlRyYW5zaXRpb25UeXBlW3RyYW5zaXRpb25dO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsb29rQXRPcHRzLnRyYW5zaXRpb24gPSB0cmFuc2l0aW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsb29rQXRPcHRzLmR1cmF0aW9uID0gZHVyYXRpb25NcztcclxuICAgICAgICBpZiAob2Zmc2V0KSBsb29rQXRPcHRzLm9mZnNldCA9IG9mZnNldDtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGF3YWl0IHNkay5DYW1lcmEubG9va0F0KHBvc2l0aW9uLCBsb29rQXRPcHRzKTtcclxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgIC8vIElmIGxvb2tBdCBmYWlscywgY29udGludWUgdG8gZmFsbGJhY2tzIGJlbG93XHJcbiAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIGNvbnNvbGUuZGVidWcoJ0NhbWVyYS5sb29rQXQgZmFpbGVkLCBmYWxsaW5nIGJhY2sgdG8gc2V0U3RhdGUnLCBlcnIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gSWYgbG9va0F0IGlzIG5vdCBwcmVzZW50IG9yIGZhaWxlZCwgdHJ5IHNldFN0YXRlIGZvciBwb3NpdGlvblxyXG4gICAgICBpZiAoIXNkaz8uQ2FtZXJhPy5sb29rQXQgJiYgc2RrPy5DYW1lcmE/LnNldFN0YXRlKSB7XHJcbiAgICAgICAgY29uc3Qgc3RhdGVQb3M6IGFueSA9IHtcclxuICAgICAgICAgIHBvc2l0aW9uOiB7IHg6IHBvc2l0aW9uLngsIHk6IHBvc2l0aW9uLnksIHo6IHBvc2l0aW9uLnogfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGF3YWl0IHNkay5DYW1lcmEuc2V0U3RhdGUoc3RhdGVQb3MpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSBjb25zb2xlLmRlYnVnKCdDYW1lcmEuc2V0U3RhdGUocG9zaXRpb24pIGZhaWxlZCcsIGVycik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBBcHBseSByb3RhdGlvbiBpZiBwcm92aWRlZFxyXG4gICAgICBpZiAocm90YXRpb24pIHtcclxuICAgICAgICAvLyBQcmVmZXIgc2V0Um90YXRpb24gd2hlbiBhdmFpbGFibGVcclxuICAgICAgICBpZiAoc2RrPy5DYW1lcmE/LnNldFJvdGF0aW9uKSB7XHJcbiAgICAgICAgICAvLyBUcnkgVmVjdG9yMiBzaWduYXR1cmUgeyB4OiB5YXcsIHk6IHBpdGNoIH0gZmlyc3RcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHNkay5DYW1lcmEuc2V0Um90YXRpb24oeyB4OiByb3RZYXcsIHk6IHJvdFBpdGNoIH0sIHsgc3BlZWQ6IE1hdGgubWF4KDEwLCBNYXRoLmZsb29yKGR1cmF0aW9uTXMgLyAxMCkpIH0pO1xyXG4gICAgICAgICAgfSBjYXRjaCAoZXJyMSkge1xyXG4gICAgICAgICAgICAvLyBJZiB0aGF0IGZhaWxzLCB0cnkgVmVjdG9yMyBzaWduYXR1cmUgeyB4OiBwaXRjaCwgeTogeWF3LCB6OiByb2xsIH1cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICBhd2FpdCBzZGsuQ2FtZXJhLnNldFJvdGF0aW9uKHsgeDogcm90UGl0Y2gsIHk6IHJvdFlhdywgejogcm90Um9sbCB9LCB7IHNwZWVkOiBNYXRoLm1heCgxMCwgTWF0aC5mbG9vcihkdXJhdGlvbk1zIC8gMTApKSB9KTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyMikge1xyXG4gICAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkgY29uc29sZS5kZWJ1ZygnQ2FtZXJhLnNldFJvdGF0aW9uIGZhaWxlZCB3aXRoIG11bHRpcGxlIHNpZ25hdHVyZXMnLCBlcnIxLCBlcnIyKTtcclxuICAgICAgICAgICAgICAvLyBGYWxsYmFjayB0byBzZXRTdGF0ZSB3aXRoIHJvdGF0aW9uIGlmIGF2YWlsYWJsZVxyXG4gICAgICAgICAgICAgIGlmIChzZGs/LkNhbWVyYT8uc2V0U3RhdGUpIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgIGF3YWl0IHNkay5DYW1lcmEuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgICAgIHJvdGF0aW9uOiB7IHg6IHJvdFBpdGNoLCB5OiByb3RZYXcsIHo6IHJvdFJvbGwgfSxcclxuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogeyB4OiBwb3NpdGlvbi54LCB5OiBwb3NpdGlvbi55LCB6OiBwb3NpdGlvbi56IH1cclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIzKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkgY29uc29sZS5kZWJ1ZygnRmFsbGJhY2sgQ2FtZXJhLnNldFN0YXRlKHJvdGF0aW9uKSBmYWlsZWQnLCBlcnIzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHNkaz8uQ2FtZXJhPy5zZXRTdGF0ZSkge1xyXG4gICAgICAgICAgLy8gSWYgc2V0Um90YXRpb24gaXMgbm90IGF2YWlsYWJsZSwgdXNlIHNldFN0YXRlIHRvIGFwcGx5IHJvdGF0aW9uXHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBhd2FpdCBzZGsuQ2FtZXJhLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICByb3RhdGlvbjogeyB4OiByb3RQaXRjaCwgeTogcm90WWF3LCB6OiByb3RSb2xsIH0sXHJcbiAgICAgICAgICAgICAgcG9zaXRpb246IHsgeDogcG9zaXRpb24ueCwgeTogcG9zaXRpb24ueSwgejogcG9zaXRpb24ueiB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkgY29uc29sZS5kZWJ1ZygnQ2FtZXJhLnNldFN0YXRlKHJvdGF0aW9uKSBmYWlsZWQnLCBlcnIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIGNvbnNvbGUud2FybignTm8gbWV0aG9kIGF2YWlsYWJsZSB0byBhcHBseSByb3RhdGlvbiAoc2V0Um90YXRpb24vc2V0U3RhdGUgbm90IGZvdW5kKScpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gV2FpdCBhIGJpdCB0byBhbGxvdyB0cmFuc2l0aW9uIGFuaW1hdGlvbnMgdG8gY29tcGxldGVcclxuICAgICAgYXdhaXQgd2FpdChkdXJhdGlvbk1zICsgMTIwKTtcclxuICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAvLyBSZS10aHJvdyBhZnRlciBlbnN1cmluZyBmbGFncyBhcmUgcmVzdG9yZWQgaW4gZmluYWxseVxyXG4gICAgICB0aHJvdyBlcnI7XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICAvLyBSZXN0b3JlIHByZXZpb3VzIHRyYW5zaXRpb24gZmxhZ1xyXG4gICAgICB0aGlzLmluVHJhbnNpdGlvbk1vZGUgPSBwcmV2SW5UcmFuc2l0aW9uO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgc3dlZXAgYXMgYSAqKnV1aWQqKiAoZm9yIGRhdGFiYXNlIG1hdGNoaW5nKS5cclxuICAgKiBUaGUgU0RLJ3MgcG9zZUNhbWVyYS5zd2VlcCBpcyBhIHNpZDsgd2UgdHJhbnNsYXRlIGl0LlxyXG4gICAqL1xyXG4gIGdldEN1cnJlbnRTd2VlcChwb3NlQ2FtZXJhOiBhbnkpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGNvbnN0IHNpZCA9IHBvc2VDYW1lcmE/LnN3ZWVwIHx8IG51bGw7XHJcbiAgICBpZiAoIXNpZCkgcmV0dXJuIG51bGw7XHJcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlU3dlZXBVdWlkKHNpZCk7XHJcbiAgfVxyXG5cclxuICBzZXRDYW1lcmFNb2RlKG1vZGU6IHN0cmluZykge1xyXG4gICAgdGhpcy5pblRyYW5zaXRpb25Td2VlcCA9IGZhbHNlO1xyXG4gICAgc3dpdGNoIChtb2RlKSB7XHJcbiAgICAgIGNhc2UgJ21vZGUuZG9sbGhvdXNlJzpcclxuICAgICAgICB0aGlzLmN1cnJlbnRDYW1lcmFNb2RlID0gQ2FtZXJhTW9kZS5ET0xMSE9VU0U7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ21vZGUuZmxvb3JwbGFuJzpcclxuICAgICAgICB0aGlzLmN1cnJlbnRDYW1lcmFNb2RlID0gQ2FtZXJhTW9kZS5GTE9PUlBMQU47XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ21vZGUuaW5zaWRlJzpcclxuICAgICAgICB0aGlzLmN1cnJlbnRDYW1lcmFNb2RlID0gQ2FtZXJhTW9kZS5JTlNJREU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ21vZGUudHJhbnNpdGlvbmluZyc6XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Q2FtZXJhTW9kZSA9IENhbWVyYU1vZGUuVFJBTlNJVElPTklORztcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aGlzLmN1cnJlbnRDYW1lcmFNb2RlID0gQ2FtZXJhTW9kZS5PVVRTSURFO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vbkNhbWVyYU1vZGVDaGFuZ2VkLm5leHQodGhpcy5jdXJyZW50Q2FtZXJhTW9kZSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
366
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0dGVycG9ydC1uYXZpZ2F0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL3NlcnZpY2VzL21hdHRlcnBvcnQtbmF2aWdhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUFLMUMsTUFBTSxPQUFPLDJCQUEyQjtJQUMvQixlQUFlLEdBQVEsSUFBSSxDQUFDO0lBQzVCLE1BQU0sR0FBeUIsSUFBSSxDQUFDO0lBQ3BDLE1BQU0sR0FBaUUsSUFBSSxDQUFDO0lBQzVFLGVBQWUsR0FBYSxFQUFFLENBQUM7SUFFL0IsWUFBWSxHQUFvQixJQUFJLE9BQU8sRUFBRSxDQUFDO0lBQzlDLG1CQUFtQixHQUFHLElBQUksT0FBTyxFQUFjLENBQUM7SUFDdkQsMEVBQTBFO0lBQ25FLGFBQWEsR0FBRyxJQUFJLE9BQU8sRUFBUyxDQUFDO0lBRXJDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztJQUN6QixpQkFBaUIsR0FBRyxLQUFLLENBQUM7SUFDMUIsaUJBQWlCLEdBQWUsVUFBVSxDQUFDLE9BQU8sQ0FBQztJQUNuRCxZQUFZLEdBQVUsRUFBRSxDQUFDO0lBQ2hDLDRHQUE0RztJQUNyRyxvQkFBb0IsR0FBa0IsSUFBSSxDQUFDO0lBRWxELDZDQUE2QztJQUM3QyxxR0FBcUc7SUFDckcsMkdBQTJHO0lBQ25HLFNBQVMsR0FBd0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUMzQyxTQUFTLEdBQXdCLElBQUksR0FBRyxF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LENBQUMsTUFBTSxDQUFDO2dCQUMzQyxNQUFNO1lBQ1IsS0FBSyxvQkFBb0I7Z0JBQ3ZCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDO2dCQUNsRCxNQUFNO1lBQ1I7Z0JBQ0UsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUM7UUFDaEQsQ0FBQztRQUNELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDeEQsQ0FBQzt3R0FuWFUsMkJBQTJCOzRHQUEzQiwyQkFBMkIsY0FGMUIsTUFBTTs7NEZBRVAsMkJBQTJCO2tCQUh2QyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGlzRGV2TW9kZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ2FtZXJhTW9kZSB9IGZyb20gJy4uL3R5cGVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgd2FpdCB9IGZyb20gJy4uL2hlbHBlcnMuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBNYXR0ZXJwb3J0TmF2aWdhdGlvblNlcnZpY2Uge1xuICBwdWJsaWMgc3dlZXBDb2xsZWN0aW9uOiBhbnkgPSBudWxsO1xuICBwdWJsaWMgc3dlZXBzOiBBcnJheTxzdHJpbmc+IHwgbnVsbCA9IG51bGw7XG4gIHB1YmxpYyBmbG9vcnM6IEFycmF5PHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nOyBzZXF1ZW5jZTogbnVtYmVyIH0+IHwgbnVsbCA9IG51bGw7XG4gIHB1YmxpYyBmb3JiaWRkZW5Td2VlcHM6IHN0cmluZ1tdID0gW107XG5cbiAgcHVibGljIGN1cnJlbnRTd2VlcDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3QoKTtcbiAgcHVibGljIG9uQ2FtZXJhTW9kZUNoYW5nZWQgPSBuZXcgU3ViamVjdDxDYW1lcmFNb2RlPigpO1xuICAvKiogRW1pdHMgd2hlbmV2ZXIgdGhlIHNldCBvZiBjdXJyZW50IHJvb21zIGNoYW5nZXMgKHNkay5Sb29tLmN1cnJlbnQpLiAqL1xuICBwdWJsaWMgb25Sb29tQ2hhbmdlZCA9IG5ldyBTdWJqZWN0PGFueVtdPigpO1xuXG4gIHB1YmxpYyBpblRyYW5zaXRpb25Nb2RlID0gZmFsc2U7XG4gIHB1YmxpYyBpblRyYW5zaXRpb25Td2VlcCA9IGZhbHNlO1xuICBwdWJsaWMgY3VycmVudENhbWVyYU1vZGU6IENhbWVyYU1vZGUgPSBDYW1lcmFNb2RlLk9VVFNJREU7XG4gIHB1YmxpYyBjdXJyZW50Um9vbXM6IGFueVtdID0gW107XG4gIC8qKiBTZXF1ZW5jZSBudW1iZXIgb2YgdGhlIGZsb29yIGN1cnJlbnRseSB2aXNpYmxlIGluIHNkay5GbG9vci5jdXJyZW50IChudWxsID0gc2luZ2xlLWZsb29yIG9yIHVua25vd24pLiAqL1xuICBwdWJsaWMgY3VycmVudEZsb29yU2VxdWVuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gIC8vIOKUgOKUgCBCaWRpcmVjdGlvbmFsIHNpZCDihpQgdXVpZCBsb29rdXAgbWFwcyDilIDilIBcbiAgLy8gc2lkICA9IHNob3J0IHJ1bnRpbWUga2V5IHVzZWQgYnkgTWF0dGVycG9ydCBTREsgKGNvbGxlY3Rpb24ga2V5cywgU3dlZXAubW92ZVRvLCBDYW1lcmEucG9zZS5zd2VlcClcbiAgLy8gdXVpZCA9IHBlcnNpc3RlbnQgaWRlbnRpZmllciBzdG9yZWQgaW4gdGhlIGRhdGFiYXNlICh6b25lLnN3ZWVwSURzLCBwb2kubWF0dGVycG9ydFN3ZWVwSUQsIHN0YXJ0U3dlZXBJRClcbiAgcHJpdmF0ZSBzaWRUb1V1aWQ6IE1hcDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgdXVpZFRvU2lkOiBNYXA8c3RyaW5nLCBzdHJpbmc+ID0gbmV3IE1hcCgpO1xuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgLy8g4pSA4pSAIFN3ZWVwIElEIHRyYW5zbGF0aW9uIGhlbHBlcnMg4pSA4pSAXG5cbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgYmlkaXJlY3Rpb25hbCBzaWQg4oaUIHV1aWQgbWFwcyBmcm9tIHRoZSBzd2VlcCBjb2xsZWN0aW9uLlxuICAgKiBNdXN0IGJlIGNhbGxlZCBldmVyeSB0aW1lIHRoZSBzd2VlcCBjb2xsZWN0aW9uIGlzIHVwZGF0ZWQuXG4gICAqL1xuICBidWlsZFN3ZWVwSWRNYXBzKGNvbGxlY3Rpb246IGFueSk6IHZvaWQge1xuICAgIHRoaXMuc2lkVG9VdWlkLmNsZWFyKCk7XG4gICAgdGhpcy51dWlkVG9TaWQuY2xlYXIoKTtcbiAgICBpZiAoIWNvbGxlY3Rpb24pIHJldHVybjtcbiAgICBmb3IgKGNvbnN0IHNpZCBvZiBPYmplY3Qua2V5cyhjb2xsZWN0aW9uKSkge1xuICAgICAgY29uc3Qgc3dlZXBEYXRhID0gY29sbGVjdGlvbltzaWRdO1xuICAgICAgY29uc3QgdXVpZCA9IHN3ZWVwRGF0YT8udXVpZDtcbiAgICAgIGlmICh1dWlkICYmIHV1aWQgIT09IHNpZCkge1xuICAgICAgICB0aGlzLnNpZFRvVXVpZC5zZXQoc2lkLCB1dWlkKTtcbiAgICAgICAgdGhpcy51dWlkVG9TaWQuc2V0KHV1aWQsIHNpZCk7XG4gICAgICB9XG4gICAgICAvLyBBbHNvIG1hcCBzaWTihpJzaWQgYW5kIHV1aWTihpJ1dWlkIGZvciBwYXNzLXRocm91Z2ggY2FzZXNcbiAgICAgIHRoaXMuc2lkVG9VdWlkLnNldChzaWQsIHV1aWQgfHwgc2lkKTtcbiAgICAgIGlmICh1dWlkKSB7XG4gICAgICAgIHRoaXMudXVpZFRvU2lkLnNldCh1dWlkLCBzaWQpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoYFtNYXR0ZXJwb3J0TmF2aWdhdGlvbl0gQnVpbHQgc3dlZXAgSUQgbWFwczogJHt0aGlzLnNpZFRvVXVpZC5zaXplfSBzaWRzLCAke3RoaXMudXVpZFRvU2lkLnNpemV9IHV1aWRzYCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIGFueSBzd2VlcCBpZGVudGlmaWVyIChzaWQgb3IgdXVpZCkgdG8gdGhlIFNESyBydW50aW1lICoqc2lkKiouXG4gICAqIFRoaXMgaXMgd2hhdCBzZGsuU3dlZXAubW92ZVRvKCkgYW5kIHNkay5Td2VlcC5kaXNhYmxlKCkgZXhwZWN0LlxuICAgKiBGYWxscyBiYWNrIHRvIHRoZSBpbnB1dCBpZiBubyBtYXBwaW5nIGV4aXN0cy5cbiAgICovXG4gIHJlc29sdmVTd2VlcFNpZChpZE9yVXVpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIWlkT3JVdWlkKSByZXR1cm4gaWRPclV1aWQ7XG4gICAgLy8gSWYgaXQncyBhbHJlYWR5IGEga25vd24gc2lkIChleGlzdHMgYXMgYSBrZXkgaW4gc3dlZXBDb2xsZWN0aW9uKSwgcmV0dXJuIGl0XG4gICAgaWYgKHRoaXMuc2lkVG9VdWlkLmhhcyhpZE9yVXVpZCkpIHJldHVybiBpZE9yVXVpZDtcbiAgICAvLyBPdGhlcndpc2UgdHJ5IHRvIG1hcCBmcm9tIHV1aWQg4oaSIHNpZFxuICAgIHJldHVybiB0aGlzLnV1aWRUb1NpZC5nZXQoaWRPclV1aWQpID8/IGlkT3JVdWlkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIGFueSBzd2VlcCBpZGVudGlmaWVyIChzaWQgb3IgdXVpZCkgdG8gdGhlIHBlcnNpc3RlbnQgKip1dWlkKiouXG4gICAqIFRoaXMgaXMgd2hhdCB0aGUgZGF0YWJhc2Ugc3RvcmVzICh6b25lLnN3ZWVwSURzLCBwb2kubWF0dGVycG9ydFN3ZWVwSUQpLlxuICAgKiBGYWxscyBiYWNrIHRvIHRoZSBpbnB1dCBpZiBubyBtYXBwaW5nIGV4aXN0cy5cbiAgICovXG4gIHJlc29sdmVTd2VlcFV1aWQoc2lkT3JVdWlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghc2lkT3JVdWlkKSByZXR1cm4gc2lkT3JVdWlkO1xuICAgIC8vIElmIGl0J3MgYWxyZWFkeSBhIGtub3duIHV1aWQsIHJldHVybiBpdFxuICAgIGlmICh0aGlzLnV1aWRUb1NpZC5oYXMoc2lkT3JVdWlkKSkgcmV0dXJuIHNpZE9yVXVpZDtcbiAgICAvLyBPdGhlcndpc2UgdHJ5IHRvIG1hcCBmcm9tIHNpZCDihpIgdXVpZFxuICAgIHJldHVybiB0aGlzLnNpZFRvVXVpZC5nZXQoc2lkT3JVdWlkKSA/PyBzaWRPclV1aWQ7XG4gIH1cblxuICBhc3luYyBhY3Rpb25fdG9vbGJveF9mbG9vcnBsYW4oc2RrOiBhbnkpIHtcbiAgICBpZiAodGhpcy5pblRyYW5zaXRpb25Nb2RlIHx8IHRoaXMuaW5UcmFuc2l0aW9uU3dlZXApIHtcbiAgICAgIGNvbnNvbGUubG9nKCd2aWV3ZXIgaXMgaW4gdHJhbnNpdGlvbiwgY2Fubm90IGdvIGZsb29ycGxhbicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgYXdhaXQgc2RrLk1vZGUubW92ZVRvKCdtb2RlLmZsb29ycGxhbicpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdjYW5ub3QgZ28gdG8gZmxvb3JwbGFuJywgZSk7XG4gICAgfVxuICB9XG5cbiAgYWN0aW9uX3Rvb2xib3hfaW5zaWRlX3ZpZXcoc2RrOiBhbnkpIHtcbiAgICBzZGsuTW9kZS5tb3ZlVG8oJ21vZGUuaW5zaWRlJyk7XG4gIH1cblxuICBhY3Rpb25TaG93QWxsRmxvb3JzKHNkazogYW55KSB7XG4gICAgdHJ5IHtcbiAgICAgIHNkay5GbG9vci5zaG93QWxsKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5sb2coJ2Nhbm5vdCBzaG93IGFsbCBmbG9vcnMnLCBlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBhY3Rpb25fdG9vbGJveF9kb2xsaG91c2Uoc2RrOiBhbnkpIHtcbiAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICAgIGlmICh0aGlzLmluVHJhbnNpdGlvbk1vZGUgfHwgdGhpcy5pblRyYW5zaXRpb25Td2VlcCkge1xuICAgICAgICBjb25zb2xlLmxvZygndmlld2VyIGlzIGluIHRyYW5zaXRpb24sIGNhbm5vdCBnbyBkb2xsaG91c2UnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgc2RrLk1vZGUubW92ZVRvKCdtb2RlLmRvbGxob3VzZScpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmxvZygnY2Fubm90IGdvIHRvIGRvbGxob3VzZScsIGUpO1xuICAgICAgfVxuICAgIH0sIDEyMDApO1xuICB9XG5cbiAgYXN5bmMgYWN0aW9uX2dvX3RvX2Zsb29yKHNkazogYW55LCBmbG9vck5hbWU6IHN0cmluZywgbWF0dGVycG9ydEZsb29yU2VxdWVuY2U6IG51bWJlciA9IG51bGwpIHtcbiAgICBpZiAoIXRoaXMuZmxvb3JzKSB7XG4gICAgICBjb25zb2xlLmxvZygnRmxvb3IgYXJlIG5vdCBsb2FkZWQgeWV0Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBmbG9vck1hdHRlcnBvcnQgPSB0aGlzLmZsb29ycy5maW5kKFxuICAgICAgKGZsb29yKSA9PiBmbG9vci5zZXF1ZW5jZSA9PT0gbWF0dGVycG9ydEZsb29yU2VxdWVuY2VcbiAgICApO1xuICAgIGlmICghZmxvb3JNYXR0ZXJwb3J0KSB7XG4gICAgICBmbG9vck1hdHRlcnBvcnQgPSB0aGlzLmZsb29ycy5maW5kKFxuICAgICAgICAoZmxvb3IpID0+IGZsb29yTmFtZS5pbmNsdWRlcyhmbG9vci5uYW1lKSAmJiBmbG9vci5uYW1lICE9ICcnXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIWZsb29yTWF0dGVycG9ydCkge1xuICAgICAgZmxvb3JNYXR0ZXJwb3J0ID0gdGhpcy5mbG9vcnMuZmluZCgoZmxvb3IpID0+XG4gICAgICAgIGZsb29yTmFtZS5pbmNsdWRlcyhmbG9vci5pZClcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChmbG9vck1hdHRlcnBvcnQpIHtcbiAgICAgIGxldCByZXRyeSA9IHRydWU7XG4gICAgICB3aGlsZSAocmV0cnkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBmbG9vckluZGV4ID0gYXdhaXQgc2RrLkZsb29yLm1vdmVUbyhmbG9vck1hdHRlcnBvcnQuc2VxdWVuY2UpO1xuICAgICAgICAgIGNvbnNvbGUuZGVidWcoXCJtb3ZlZCB0byBmbG9vckluZGV4XCIsIGZsb29ySW5kZXgpO1xuICAgICAgICAgIHJldHJ5ID0gZmFsc2U7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ0Nhbm5vdCBtb3ZlIHRvIEZsb29yJywgZXJyb3IpO1xuICAgICAgICAgIGF3YWl0IHdhaXQoMTAwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oJ05vIG1hdHRlcnBvcnQgZmxvb3IgZm91bmQgdG8gbW92ZSB0bycpO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZyhcImFjdGlvbl9nb190b19mbG9vci5mbG9vck1hdHRlcnBvcnRcIiwgZmxvb3JNYXR0ZXJwb3J0KTtcbiAgICBjb25zb2xlLmxvZyhcImFjdGlvbl9nb190b19mbG9vci5mbG9vck5hbWVcIiwgZmxvb3JOYW1lKTtcbiAgICBjb25zb2xlLmxvZyhcImFjdGlvbl9nb190b19mbG9vci5tYXR0ZXJwb3J0Rmxvb3JTZXF1ZW5jZVwiLCBtYXR0ZXJwb3J0Rmxvb3JTZXF1ZW5jZSk7XG4gIH1cblxuICAvKipcbiAgICogTmF2aWdhdGUgdG8gYSBzd2VlcC4gVGhlIGNhbGxlciBjYW4gcGFzcyBlaXRoZXIgYSBzaWQgb3IgYSB1dWlkO1xuICAgKiB0aGlzIG1ldGhvZCByZXNvbHZlcyBpdCB0byB0aGUgU0RLIHNpZCBiZWZvcmUgY2FsbGluZyBTd2VlcC5tb3ZlVG8oKS5cbiAgICovXG4gIGFzeW5jIGFjdGlvbl9nb190b19zd2VlcChzZGs6IGFueSwgc3dlZXA6IHN0cmluZywgcm90YXRpb24/OiB7IHg6IG51bWJlciwgeTogbnVtYmVyIH0gfCBudWxsKSB7XG4gICAgY29uc3QgcmVzb2x2ZWRTaWQgPSB0aGlzLnJlc29sdmVTd2VlcFNpZChzd2VlcCk7XG4gICAgaWYgKHRoaXMuZm9yYmlkZGVuU3dlZXBzLmluY2x1ZGVzKHN3ZWVwKSB8fCB0aGlzLmZvcmJpZGRlblN3ZWVwcy5pbmNsdWRlcyhyZXNvbHZlZFNpZCkpIHtcbiAgICAgIGNvbnNvbGUubG9nKCd1c2VyIGlzIG5vdCBhbGxvd2VkIHRvIGdvIHRvIHRoaXMgc3dlZXAnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGlzRGV2TW9kZSgpICYmIHJlc29sdmVkU2lkICE9PSBzd2VlcCkge1xuICAgICAgY29uc29sZS5kZWJ1ZyhgW2FjdGlvbl9nb190b19zd2VlcF0gUmVzb2x2ZWQgdXVpZCBcIiR7c3dlZXB9XCIg4oaSIHNpZCBcIiR7cmVzb2x2ZWRTaWR9XCJgKTtcbiAgICB9XG4gICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLmluVHJhbnNpdGlvblN3ZWVwID0gdHJ1ZTtcbiAgICAgICAgYXdhaXQgc2RrLlN3ZWVwLm1vdmVUbyhyZXNvbHZlZFNpZCwge1xuICAgICAgICAgIHRyYW5zaXRpb246IHNkay5DYW1lcmEuVHJhbnNpdGlvblR5cGUuSU5TVEFOVCxcbiAgICAgICAgICB0cmFuc2l0aW9uVGltZTogMTUwMFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMuaW5UcmFuc2l0aW9uU3dlZXAgPSBmYWxzZTtcbiAgICAgICAgY29uc29sZS5sb2coJ0Nhbm5vdCBtb3ZlIHRvIHN3ZWVwJywgZXJyb3IpO1xuICAgICAgfVxuICAgICAgaWYgKHJvdGF0aW9uKSB7XG4gICAgICAgIGF3YWl0IHNkay5DYW1lcmEuc2V0Um90YXRpb24ocm90YXRpb24sIHsgc3BlZWQ6IDEwMCB9KTtcbiAgICAgIH1cbiAgICB9LCAxMDAwKTtcbiAgICBjb25zb2xlLmxvZyhcImFjdGlvbl9nb190b19zd2VlcC5zd2VlcFwiLCBzd2VlcCk7XG4gICAgY29uc29sZS5sb2coXCJhY3Rpb25fZ29fdG9fc3dlZXAucm90YXRpb25cIiwgcm90YXRpb24pO1xuICAgIGNvbnNvbGUubG9nKFwiYWN0aW9uX2dvX3RvX3N3ZWVwLnJlc29sdmVkU2lkXCIsIHJlc29sdmVkU2lkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNhYmxlIGZvcmJpZGRlbiBzd2VlcHMuIFJlc29sdmVzIGVhY2ggc3dlZXAgSUQgdG8gc2lkIGJlZm9yZSBjYWxsaW5nIFNESy5cbiAgICovXG4gIGFzeW5jIHJlbW92ZUZvcmJpZGRlblN3ZWVwcyhzZGs6IGFueSwgZm9yYmlkZGVuU3dlZXBzOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuZm9yYmlkZGVuU3dlZXBzID0gWy4uLmZvcmJpZGRlblN3ZWVwc107XG4gICAgbGV0IHJlbW92ZWQgPSAwO1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgZm9yYmlkZGVuU3dlZXBzLm1hcChhc3luYyAoc3dlZXApID0+IHtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWRTaWQgPSB0aGlzLnJlc29sdmVTd2VlcFNpZChzd2VlcCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgc2RrLlN3ZWVwLmRpc2FibGUocmVzb2x2ZWRTaWQpO1xuICAgICAgICAgIHJlbW92ZWQgKz0gMTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgICBjb25zb2xlLmxvZygncmVtb3ZlZCBzd2VlcHM6JywgcmVtb3ZlZCk7XG4gIH1cblxuICAvKipcbiAgICogTW92ZSB0byBhIHBvc2l0aW9uXG4gICAqIEBwYXJhbSBzZGsgXG4gICAqIEBwYXJhbSBwb3NpdGlvbiBcbiAgICogQHBhcmFtIHJvdGF0aW9uIFxuICAgKiBAcGFyYW0gb3B0aW9ucyBcbiAgICovXG4gIHB1YmxpYyBhc3luYyBtb3ZlX3RvX3Bvc2l0aW9uKFxuICAgIHNkazogYW55LFxuICAgIHBvc2l0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB6OiBudW1iZXIgfSxcbiAgICByb3RhdGlvbjogeyB5YXc6IG51bWJlcjsgcGl0Y2g/OiBudW1iZXI7IHJvbGw/OiBudW1iZXIgfSB8IG51bGwsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIHRyYW5zaXRpb24/OiAnRkxZJyB8ICdJTlNUQU5UJyB8ICdJTU1FRElBVEUnO1xuICAgICAgZHVyYXRpb25Ncz86IG51bWJlcjtcbiAgICAgIGFuZ2xlc0luRGVncmVlcz86IGJvb2xlYW47XG4gICAgICBvZmZzZXQ/OiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB6OiBudW1iZXIgfTtcbiAgICB9XG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFZhbGlkYXRlIFNES1xuICAgIGlmICghc2RrKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01hdHRlcnBvcnQgU0RLIGluc3RhbmNlIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgLy8gTWVyZ2Ugb3B0aW9ucyB3aXRoIGRlZmF1bHRzXG4gICAgY29uc3Qge1xuICAgICAgdHJhbnNpdGlvbiA9ICdGTFknLFxuICAgICAgZHVyYXRpb25NcyA9IDgwMCxcbiAgICAgIGFuZ2xlc0luRGVncmVlcyA9IHRydWUsXG4gICAgICBvZmZzZXQgPSB7IHg6IDAsIHk6IDAsIHo6IDAgfVxuICAgIH0gPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgY29uc3QgZGVnVG9SYWQgPSAoZDogbnVtYmVyKSA9PiBkICogTWF0aC5QSSAvIDE4MDtcblxuICAgIC8vIFByZXBhcmUgcm90YXRpb24gdmFsdWVzIChkZWZhdWx0IHRvIDAgd2hlbiBub3QgcHJvdmlkZWQpXG4gICAgY29uc3QgeWF3ID0gcm90YXRpb24/LnlhdyA/PyAwO1xuICAgIGNvbnN0IHBpdGNoID0gcm90YXRpb24/LnBpdGNoID8/IDA7XG4gICAgY29uc3Qgcm9sbCA9IHJvdGF0aW9uPy5yb2xsID8/IDA7XG5cbiAgICAvLyBDb252ZXJ0IHRvIHJhZGlhbnMgaWYgYW5nbGVzIGFyZSBwcm92aWRlZCBpbiBkZWdyZWVzXG4gICAgY29uc3Qgcm90WWF3ID0gYW5nbGVzSW5EZWdyZWVzID8gZGVnVG9SYWQoeWF3KSA6IHlhdztcbiAgICBjb25zdCByb3RQaXRjaCA9IGFuZ2xlc0luRGVncmVlcyA/IGRlZ1RvUmFkKHBpdGNoKSA6IHBpdGNoO1xuICAgIGNvbnN0IHJvdFJvbGwgPSBhbmdsZXNJbkRlZ3JlZXMgPyBkZWdUb1JhZChyb2xsKSA6IHJvbGw7XG5cbiAgICAvLyBQcmVzZXJ2ZSBwcmV2aW91cyB0cmFuc2l0aW9uIGZsYWcgYW5kIG1hcmsgYXMgaW4tdHJhbnNpdGlvblxuICAgIGNvbnN0IHByZXZJblRyYW5zaXRpb24gPSB0aGlzLmluVHJhbnNpdGlvbk1vZGU7XG4gICAgdGhpcy5pblRyYW5zaXRpb25Nb2RlID0gdHJ1ZTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBBdHRlbXB0IHRvIHVzZSBDYW1lcmEubG9va0F0IHdoZW4gYXZhaWxhYmxlXG4gICAgICBpZiAoc2RrPy5DYW1lcmE/Lmxvb2tBdCkge1xuICAgICAgICBjb25zdCBsb29rQXRPcHRzOiBhbnkgPSB7fTtcbiAgICAgICAgLy8gUHJlZmVyIFNESyBjb25zdGFudHMgd2hlbiBhdmFpbGFibGUsIG90aGVyd2lzZSB1c2UgZmFsbGJhY2sgc3RyaW5nXG4gICAgICAgIGlmIChzZGsuQ2FtZXJhLlRyYW5zaXRpb25UeXBlICYmIHNkay5DYW1lcmEuVHJhbnNpdGlvblR5cGVbdHJhbnNpdGlvbl0pIHtcbiAgICAgICAgICBsb29rQXRPcHRzLnRyYW5zaXRpb24gPSBzZGsuQ2FtZXJhLlRyYW5zaXRpb25UeXBlW3RyYW5zaXRpb25dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvb2tBdE9wdHMudHJhbnNpdGlvbiA9IHRyYW5zaXRpb247XG4gICAgICAgIH1cbiAgICAgICAgbG9va0F0T3B0cy5kdXJhdGlvbiA9IGR1cmF0aW9uTXM7XG4gICAgICAgIGlmIChvZmZzZXQpIGxvb2tBdE9wdHMub2Zmc2V0ID0gb2Zmc2V0O1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgc2RrLkNhbWVyYS5sb29rQXQocG9zaXRpb24sIGxvb2tBdE9wdHMpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAvLyBJZiBsb29rQXQgZmFpbHMsIGNvbnRpbnVlIHRvIGZhbGxiYWNrcyBiZWxvd1xuICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkgY29uc29sZS5kZWJ1ZygnQ2FtZXJhLmxvb2tBdCBmYWlsZWQsIGZhbGxpbmcgYmFjayB0byBzZXRTdGF0ZScsIGVycik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSWYgbG9va0F0IGlzIG5vdCBwcmVzZW50IG9yIGZhaWxlZCwgdHJ5IHNldFN0YXRlIGZvciBwb3NpdGlvblxuICAgICAgaWYgKCFzZGs/LkNhbWVyYT8ubG9va0F0ICYmIHNkaz8uQ2FtZXJhPy5zZXRTdGF0ZSkge1xuICAgICAgICBjb25zdCBzdGF0ZVBvczogYW55ID0ge1xuICAgICAgICAgIHBvc2l0aW9uOiB7IHg6IHBvc2l0aW9uLngsIHk6IHBvc2l0aW9uLnksIHo6IHBvc2l0aW9uLnogfVxuICAgICAgICB9O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHNkay5DYW1lcmEuc2V0U3RhdGUoc3RhdGVQb3MpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIGNvbnNvbGUuZGVidWcoJ0NhbWVyYS5zZXRTdGF0ZShwb3NpdGlvbikgZmFpbGVkJywgZXJyKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBBcHBseSByb3RhdGlvbiBpZiBwcm92aWRlZFxuICAgICAgaWYgKHJvdGF0aW9uKSB7XG4gICAgICAgIC8vIFByZWZlciBzZXRSb3RhdGlvbiB3aGVuIGF2YWlsYWJsZVxuICAgICAgICBpZiAoc2RrPy5DYW1lcmE/LnNldFJvdGF0aW9uKSB7XG4gICAgICAgICAgLy8gVHJ5IFZlY3RvcjIgc2lnbmF0dXJlIHsgeDogeWF3LCB5OiBwaXRjaCB9IGZpcnN0XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHNkay5DYW1lcmEuc2V0Um90YXRpb24oeyB4OiByb3RZYXcsIHk6IHJvdFBpdGNoIH0sIHsgc3BlZWQ6IE1hdGgubWF4KDEwLCBNYXRoLmZsb29yKGR1cmF0aW9uTXMgLyAxMCkpIH0pO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycjEpIHtcbiAgICAgICAgICAgIC8vIElmIHRoYXQgZmFpbHMsIHRyeSBWZWN0b3IzIHNpZ25hdHVyZSB7IHg6IHBpdGNoLCB5OiB5YXcsIHo6IHJvbGwgfVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgYXdhaXQgc2RrLkNhbWVyYS5zZXRSb3RhdGlvbih7IHg6IHJvdFBpdGNoLCB5OiByb3RZYXcsIHo6IHJvdFJvbGwgfSwgeyBzcGVlZDogTWF0aC5tYXgoMTAsIE1hdGguZmxvb3IoZHVyYXRpb25NcyAvIDEwKSkgfSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIyKSB7XG4gICAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkgY29uc29sZS5kZWJ1ZygnQ2FtZXJhLnNldFJvdGF0aW9uIGZhaWxlZCB3aXRoIG11bHRpcGxlIHNpZ25hdHVyZXMnLCBlcnIxLCBlcnIyKTtcbiAgICAgICAgICAgICAgLy8gRmFsbGJhY2sgdG8gc2V0U3RhdGUgd2l0aCByb3RhdGlvbiBpZiBhdmFpbGFibGVcbiAgICAgICAgICAgICAgaWYgKHNkaz8uQ2FtZXJhPy5zZXRTdGF0ZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBhd2FpdCBzZGsuQ2FtZXJhLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICAgICAgcm90YXRpb246IHsgeDogcm90UGl0Y2gsIHk6IHJvdFlhdywgejogcm90Um9sbCB9LFxuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogeyB4OiBwb3NpdGlvbi54LCB5OiBwb3NpdGlvbi55LCB6OiBwb3NpdGlvbi56IH1cbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycjMpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkgY29uc29sZS5kZWJ1ZygnRmFsbGJhY2sgQ2FtZXJhLnNldFN0YXRlKHJvdGF0aW9uKSBmYWlsZWQnLCBlcnIzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoc2RrPy5DYW1lcmE/LnNldFN0YXRlKSB7XG4gICAgICAgICAgLy8gSWYgc2V0Um90YXRpb24gaXMgbm90IGF2YWlsYWJsZSwgdXNlIHNldFN0YXRlIHRvIGFwcGx5IHJvdGF0aW9uXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHNkay5DYW1lcmEuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICByb3RhdGlvbjogeyB4OiByb3RQaXRjaCwgeTogcm90WWF3LCB6OiByb3RSb2xsIH0sXG4gICAgICAgICAgICAgIHBvc2l0aW9uOiB7IHg6IHBvc2l0aW9uLngsIHk6IHBvc2l0aW9uLnksIHo6IHBvc2l0aW9uLnogfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIGNvbnNvbGUuZGVidWcoJ0NhbWVyYS5zZXRTdGF0ZShyb3RhdGlvbikgZmFpbGVkJywgZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSBjb25zb2xlLndhcm4oJ05vIG1ldGhvZCBhdmFpbGFibGUgdG8gYXBwbHkgcm90YXRpb24gKHNldFJvdGF0aW9uL3NldFN0YXRlIG5vdCBmb3VuZCknKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBXYWl0IGEgYml0IHRvIGFsbG93IHRyYW5zaXRpb24gYW5pbWF0aW9ucyB0byBjb21wbGV0ZVxuICAgICAgYXdhaXQgd2FpdChkdXJhdGlvbk1zICsgMTIwKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIFJlLXRocm93IGFmdGVyIGVuc3VyaW5nIGZsYWdzIGFyZSByZXN0b3JlZCBpbiBmaW5hbGx5XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIFJlc3RvcmUgcHJldmlvdXMgdHJhbnNpdGlvbiBmbGFnXG4gICAgICB0aGlzLmluVHJhbnNpdGlvbk1vZGUgPSBwcmV2SW5UcmFuc2l0aW9uO1xuICAgIH1cbiAgfVxuXG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgc3dlZXAgYXMgYSAqKnV1aWQqKiAoZm9yIGRhdGFiYXNlIG1hdGNoaW5nKS5cbiAgICogVGhlIFNESydzIHBvc2VDYW1lcmEuc3dlZXAgaXMgYSBzaWQ7IHdlIHRyYW5zbGF0ZSBpdC5cbiAgICovXG4gIGdldEN1cnJlbnRTd2VlcChwb3NlQ2FtZXJhOiBhbnkpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBzaWQgPSBwb3NlQ2FtZXJhPy5zd2VlcCB8fCBudWxsO1xuICAgIGlmICghc2lkKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlU3dlZXBVdWlkKHNpZCk7XG4gIH1cblxuICBzZXRDYW1lcmFNb2RlKG1vZGU6IHN0cmluZykge1xuICAgIHRoaXMuaW5UcmFuc2l0aW9uU3dlZXAgPSBmYWxzZTtcbiAgICBzd2l0Y2ggKG1vZGUpIHtcbiAgICAgIGNhc2UgJ21vZGUuZG9sbGhvdXNlJzpcbiAgICAgICAgdGhpcy5jdXJyZW50Q2FtZXJhTW9kZSA9IENhbWVyYU1vZGUuRE9MTEhPVVNFO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ21vZGUuZmxvb3JwbGFuJzpcbiAgICAgICAgdGhpcy5jdXJyZW50Q2FtZXJhTW9kZSA9IENhbWVyYU1vZGUuRkxPT1JQTEFOO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ21vZGUuaW5zaWRlJzpcbiAgICAgICAgdGhpcy5jdXJyZW50Q2FtZXJhTW9kZSA9IENhbWVyYU1vZGUuSU5TSURFO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ21vZGUudHJhbnNpdGlvbmluZyc6XG4gICAgICAgIHRoaXMuY3VycmVudENhbWVyYU1vZGUgPSBDYW1lcmFNb2RlLlRSQU5TSVRJT05JTkc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5jdXJyZW50Q2FtZXJhTW9kZSA9IENhbWVyYU1vZGUuT1VUU0lERTtcbiAgICB9XG4gICAgdGhpcy5vbkNhbWVyYU1vZGVDaGFuZ2VkLm5leHQodGhpcy5jdXJyZW50Q2FtZXJhTW9kZSk7XG4gIH1cbn1cbiJdfQ==