@smarterplan/ngx-smarterplan-core 1.4.20 → 1.4.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) 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 +1 -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 +49 -28
  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/hashtag-from-id.pipe.mjs +1 -1
  26. package/esm2022/lib/pipes/safe-url.pipe.mjs +1 -1
  27. package/esm2022/lib/pipes/time-date-to-local-string.pipe.mjs +1 -1
  28. package/esm2022/lib/pipes/username-from-id.pipe.mjs +1 -1
  29. package/esm2022/lib/services/amplify-cache.service.mjs +1 -1
  30. package/esm2022/lib/services/base-tab.service.mjs +1 -1
  31. package/esm2022/lib/services/baseVisibility.service.mjs +1 -1
  32. package/esm2022/lib/services/content.service.mjs +1 -1
  33. package/esm2022/lib/services/filter.service.mjs +1 -1
  34. package/esm2022/lib/services/intervention.service.mjs +1 -1
  35. package/esm2022/lib/services/locale.service.mjs +1 -1
  36. package/esm2022/lib/services/matterport-import.service.mjs +1 -1
  37. package/esm2022/lib/services/matterport-measurement.service.mjs +1 -1
  38. package/esm2022/lib/services/matterport-navigation.service.mjs +1 -1
  39. package/esm2022/lib/services/matterport-object3d.service.mjs +657 -133
  40. package/esm2022/lib/services/matterport-pointer.service.mjs +6 -6
  41. package/esm2022/lib/services/matterport-tag-copy.service.mjs +1 -1
  42. package/esm2022/lib/services/matterport-tag.service.mjs +1 -1
  43. package/esm2022/lib/services/matterport.service.mjs +346 -25
  44. package/esm2022/lib/services/models/affectation.service.mjs +1 -1
  45. package/esm2022/lib/services/models/base-object.service.mjs +1 -1
  46. package/esm2022/lib/services/models/capture.service.mjs +1 -1
  47. package/esm2022/lib/services/models/comment.service.mjs +1 -1
  48. package/esm2022/lib/services/models/domain.service.mjs +1 -1
  49. package/esm2022/lib/services/models/equipment.service.mjs +1 -1
  50. package/esm2022/lib/services/models/event.service.mjs +1 -1
  51. package/esm2022/lib/services/models/feature.service.mjs +1 -1
  52. package/esm2022/lib/services/models/hashtag.service.mjs +1 -1
  53. package/esm2022/lib/services/models/layer.service.mjs +1 -1
  54. package/esm2022/lib/services/models/measurement.service.mjs +1 -1
  55. package/esm2022/lib/services/models/mission.service.mjs +1 -1
  56. package/esm2022/lib/services/models/navigation.service.mjs +1 -1
  57. package/esm2022/lib/services/models/node.service.mjs +1 -1
  58. package/esm2022/lib/services/models/object3D.service.mjs +1 -1
  59. package/esm2022/lib/services/models/operation.service.mjs +1 -1
  60. package/esm2022/lib/services/models/organisation.service.mjs +1 -1
  61. package/esm2022/lib/services/models/plan.service.mjs +1 -1
  62. package/esm2022/lib/services/models/poi.service.mjs +27 -27
  63. package/esm2022/lib/services/models/profile.service.mjs +1 -1
  64. package/esm2022/lib/services/models/property.service.mjs +1 -1
  65. package/esm2022/lib/services/models/space.service.mjs +1 -1
  66. package/esm2022/lib/services/models/template.service.mjs +1 -1
  67. package/esm2022/lib/services/models/ticket.service.mjs +1 -1
  68. package/esm2022/lib/services/models/visit.service.mjs +1 -1
  69. package/esm2022/lib/services/models/zone.service.mjs +1 -1
  70. package/esm2022/lib/services/navigator.service.mjs +1 -1
  71. package/esm2022/lib/services/s3.service.mjs +1 -1
  72. package/esm2022/lib/services/search.service.mjs +1 -1
  73. package/esm2022/lib/services/support.service.mjs +1 -1
  74. package/esm2022/lib/services/sweep-locator.service.mjs +1 -1
  75. package/esm2022/lib/services/tag.service.mjs +16 -16
  76. package/esm2022/lib/services/threejs-import.service.mjs +1 -1
  77. package/esm2022/lib/services/threejs.service.mjs +1 -1
  78. package/esm2022/lib/services/user.service.mjs +1 -1
  79. package/esm2022/lib/services/utils/matterport-framing.util.mjs +63 -0
  80. package/esm2022/lib/services/utils/matterport-transform.util.mjs +1 -1
  81. package/esm2022/lib/services/validators.service.mjs +1 -1
  82. package/esm2022/lib/services/viewer.service.mjs +1 -1
  83. package/esm2022/lib/services/zone-drawer.service.mjs +1 -1
  84. package/esm2022/lib/services/zoneChange.service.mjs +1 -1
  85. package/esm2022/lib/tokens/matterport-sdk-key.token.mjs +1 -1
  86. package/esm2022/lib/types.service.mjs +3 -1
  87. package/esm2022/lib/validators/email.directive.mjs +1 -1
  88. package/esm2022/lib/validators/no-empty.directive.mjs +1 -1
  89. package/esm2022/lib/validators/number.directive.mjs +1 -1
  90. package/esm2022/lib/validators/text.directive.mjs +1 -1
  91. package/esm2022/public-api.mjs +1 -1
  92. package/fesm2022/smarterplan-ngx-smarterplan-core.mjs +1192 -263
  93. package/fesm2022/smarterplan-ngx-smarterplan-core.mjs.map +1 -1
  94. package/lib/services/matterport-object3d.service.d.ts +125 -5
  95. package/lib/services/matterport.service.d.ts +106 -7
  96. package/lib/services/utils/matterport-framing.util.d.ts +40 -0
  97. package/lib/types.service.d.ts +42 -1
  98. package/package.json +1 -1
  99. package/src/assets/vs-app.json +67 -67
@@ -680,4 +680,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
680
680
  providedIn: 'root',
681
681
  }]
682
682
  }], ctorParameters: () => [{ type: i1.MatterportNavigationService }] });
683
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0dGVycG9ydC10YWcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1jb3JlL3NyYy9saWIvc2VydmljZXMvbWF0dGVycG9ydC10YWcuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQWtELFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUV6RyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7OztBQU0xQyxNQUFNLE9BQU8sb0JBQW9CO0lBdUNyQjtJQXRDVixvRUFBb0U7SUFDNUQsTUFBTSxDQUFVLHFCQUFxQixHQUFHLHlCQUF5QixDQUFDO0lBRW5FLGVBQWUsR0FBK0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUN4RCxXQUFXLEdBQWlCLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM5QyxpQkFBaUIsR0FBa0IsSUFBSSxDQUFDO0lBQ3hDLFNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBVSxDQUFDO0lBQ2xDLFlBQVksR0FBa0IsRUFBRSxDQUFDO0lBQ2pDLGVBQWUsR0FBVyxFQUFFLENBQUM7SUFDN0IsY0FBYyxHQUFZLEtBQUssQ0FBQztJQUNoQyxVQUFVLEdBQTBCLElBQUksQ0FBQztJQUN4QyxrQkFBa0IsR0FBd0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNwRCxrQkFBa0IsR0FBeUIsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUM3RCwrRUFBK0U7SUFDdkUsZUFBZSxHQUF3QixJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ3pELHlHQUF5RztJQUNq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b0JBQW9CLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1FBQzlCLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLDJFQUEyRTtRQUMzRSxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUMzQixJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO0lBQ3BDLENBQUM7d0dBdnRCVSxvQkFBb0I7NEdBQXBCLG9CQUFvQixjQUZuQixNQUFNOzs0RkFFUCxvQkFBb0I7a0JBSGhDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNEZXZNb2RlLCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBNYXR0ZXJ0YWdEYXRhIH0gZnJvbSAnLi4vbWF0dGVydGFnRGF0YSc7XG5pbXBvcnQgeyBQb2lUeXBlLCBEYk9iamVjdFR5cGUsIFBPSSwgVmlld2VySW50ZXJhY3Rpb25zLCBUYWdBY3Rpb24sIENhbWVyYU1vZGUgfSBmcm9tICcuLi90eXBlcy5zZXJ2aWNlJztcbmltcG9ydCB7IE1hdHRlcnBvcnROYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gJy4vbWF0dGVycG9ydC1uYXZpZ2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgd2FpdCB9IGZyb20gJy4uL2hlbHBlcnMuc2VydmljZSc7XG5pbXBvcnQgeyBCYXNlVGFnU2VydmljZSB9IGZyb20gJy4vdGFnLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTWF0dGVycG9ydFRhZ1NlcnZpY2Uge1xuICAvKiogTmFtZSBvZiB0aGUgY29tbW9uIGxheWVyIGV2ZXJ5IFNtYXJ0ZXJwbGFuIHRhZyBpcyBjcmVhdGVkIGluLiAqL1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBTSEFSRURfVEFHX0xBWUVSX05BTUUgPSAnc21hcnRlcnBsYW4tc2hhcmVkLXRhZ3MnO1xuXG4gIHB1YmxpYyBkaWN0aW9ubmFyeVRhZ3M6IE1hcDxzdHJpbmcsIE1hdHRlcnRhZ0RhdGE+ID0gbmV3IE1hcCgpO1xuICBwdWJsaWMgdGFnQWRkUXVldWU6IFByb21pc2U8YW55PiA9IFByb21pc2UucmVzb2x2ZSgpO1xuICBwdWJsaWMgbWF0dGVydGFnVG9Gb2xsb3c6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgb25Hb1RvVGFnID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuICBwdWJsaWMgbWF0dGVydGFnSURzOiBBcnJheTxzdHJpbmc+ID0gW107XG4gIHB1YmxpYyB0YWdzQXR0YWNobWVudHM6IE9iamVjdCA9IHt9O1xuICBwdWJsaWMgdGFnTWVzc2VuZ2VyT246IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHRhZ1NlcnZpY2U6IEJhc2VUYWdTZXJ2aWNlIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgdGFnc0N1cnJlbnRPcGFjaXR5OiBNYXA8c3RyaW5nLCBudW1iZXI+ID0gbmV3IE1hcCgpO1xuICBwcml2YXRlIHRhZ3NDdXJyZW50RW5hYmxlZDogTWFwPHN0cmluZywgYm9vbGVhbj4gPSBuZXcgTWFwKCk7XG4gIC8qKiB0YWdJZCAtPiBpY29uIG5hbWUgbGFzdCBhcHBsaWVkLCBzbyBhbiB1bmNoYW5nZWQgaWNvbiBpcyBub3QgcmUtYXBwbGllZC4gKi9cbiAgcHJpdmF0ZSB0YWdzQ3VycmVudEljb246IE1hcDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTWFwKCk7XG4gIC8qKiBJZHMgb2YgdGhlIGdsb2JhbCBTREsgVGFnIGNvbGxlY3Rpb24sIGFuZCB0aGUgdGFncyB3YWl0aW5nIHRvIGFwcGVhciBpbiBpdCwgc2VlIHdhaXRGb3JUYWdJblNkaygpLiAqL1xuICBwcml2YXRlIHNka1RhZ0lkczogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XG4gIHByaXZhdGUgc2RrVGFnV2FpdGVyczogTWFwPHN0cmluZywgQXJyYXk8KCkgPT4gdm9pZD4+ID0gbmV3IE1hcCgpO1xuICBwcml2YXRlIHNka1RhZ1N1YnNjcmlwdGlvbjogYW55ID0gbnVsbDtcbiAgcHJpdmF0ZSBzZGtUYWdTdWJzY3JpcHRpb25TZGs6IGFueSA9IG51bGw7XG4gIC8qKlxuICAgKiBTaW5nbGUgbGF5ZXIgaG9sZGluZyBldmVyeSBTbWFydGVycGxhbiB0YWcsIGFkZGVkIHRvIGV2ZXJ5IHZpZXcgb2YgdGhlIHNwYWNlIHNvIGFcbiAgICogdGFnIHN0YXlzIGluIHBsYWNlIOKAlCBzYW1lIHNpZCwgc2FtZSBjb250ZW50IOKAlCB3aGVuIHRoZSB1c2VyIHN3aXRjaGVzIGJldHdlZW4gdGhlXG4gICAqIGZ1cm5pc2hlZCBhbmQgdGhlIERlZnVybmlzaGVkIHZpZXcuIFRhZ3MgYWRkZWQgdG8gdGhlIGdsb2JhbCBzZGsuVGFnIChvciB0byBhXG4gICAqIHZpZXcncyBvd24gbGF5ZXIpIGJlbG9uZyB0byB0aGF0IHZpZXcgb25seSwgd2hpY2ggaXMgd2hhdCBtYWRlIHRoZW0gcG9wIGluIGFuZCBvdXRcbiAgICogb24gZXZlcnkgdmlldyBjaGFuZ2UuXG4gICAqXG4gICAqIERlbGliZXJhdGVseSBOT1QgY3JlYXRlZCB3aXRoIGB7IGNvbW1vbjogdHJ1ZSB9YDogaW4gU0RLIDI2LjcuNSBhIGNvbW1vbiBsYXllciBpc1xuICAgKiBwdXNoZWQgaW50byBgZ2V0T3JkZXJlZE1vZGVsVmlld3MoKWAgYXQgY3JlYXRpb24gdGltZSwgYW5kIHRoYXQgY2FsbCBkZWZhdWx0cyB0b1xuICAgKiBgaW5jbHVkZURlZnVybmlzaDogZmFsc2VgLCBzbyB0aGUgRGVmdXJuaXNoZWQgdmlldyBuZXZlciByZWNlaXZlcyBpdCDigJQgd2hpbGVcbiAgICogYFZpZXcuYWRkTGF5ZXIoKWAgcmVmdXNlcyB0byByZXBhaXIgaXQgKFwiTGF5ZXIgaXMgY29tbW9uLiBObyBuZWVkIHRvIGFkZC5cIikuIEFcbiAgICogcGxhaW4gbGF5ZXIgd2UgYXR0YWNoIHRvIGVhY2ggdmlldyBvdXJzZWx2ZXMgcmVhY2hlcyBldmVyeSB2aWV3LCBEZWZ1cm5pc2hlZFxuICAgKiBpbmNsdWRlZC4gU2VlIGF0dGFjaFNoYXJlZFRhZ0xheWVyVG9WaWV3cygpLlxuICAgKi9cbiAgcHJpdmF0ZSBzaGFyZWRUYWdMYXllcjogYW55ID0gbnVsbDtcbiAgcHJpdmF0ZSBzaGFyZWRUYWdMYXllclByb21pc2U6IFByb21pc2U8YW55PiB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbmF2aWdhdGlvblNlcnZpY2U6IE1hdHRlcnBvcnROYXZpZ2F0aW9uU2VydmljZVxuICApIHsgfVxuXG4gIHNldFRhZ1NlcnZpY2Uoc2VydmljZTogQmFzZVRhZ1NlcnZpY2UpOiB2b2lkIHtcbiAgICB0aGlzLnRhZ1NlcnZpY2UgPSBzZXJ2aWNlO1xuICB9XG5cbiAgLyoqIE9wZW5zIGEgc3BlY2lmaWMgdGFnIGluIHRoZSBNYXR0ZXJwb3J0IHZpZXdlciBieSBpdHMgSUQuICovXG4gIGFzeW5jIGdvVG9UYWcoc2RrOiBhbnksIHNpZDogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICBpZiAoIXNkaykgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLm9uR29Ub1RhZy5uZXh0KHNpZCk7XG4gICAgICAvLyBgb3BlbmAgb25seSBleGlzdHMgb24gdGhlIGdsb2JhbCBUYWcgbW9kdWxlLCBuZXZlciBvbiBhIGxheWVyLXNjb3BlZCBvbmUuXG4gICAgICBhd2FpdCBzZGsuVGFnLm9wZW4oc2lkKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIGNvbnNvbGUud2FybignQ2Fubm90IG9wZW4gdGFnJywgc2lkLCBlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgU0RLIFRhZyBtb2R1bGUgdG8gdXNlIGZvciBhbiBvcGVyYXRpb24gYWRkcmVzc2luZyBhbiBleGlzdGluZyB0YWcgYnkgSURcbiAgICogKGljb24sIG9wYWNpdHksIHBvc2l0aW9uLCBhdHRhY2htZW50cywgcmVtb3ZhbC4uLik6IGFsd2F5cyB0aGUgZ2xvYmFsIHNkay5UYWcuXG4gICAqXG4gICAqIEEgbGF5ZXItc2NvcGVkIFRhZyBtb2R1bGUgb25seSBleHBvc2VzIHRoZSAqcmVwbGF5YWJsZSogbXV0YXRpb25zLCBtZWFudCB0byBidWlsZFxuICAgKiB0aGUgbGF5ZXIncyBvd24gY29udGVudDsgYXBwbHlpbmcgdGhlbSB0byBhbiBhbHJlYWR5LWNyZWF0ZWQgdGFnIHNpbGVudGx5IGRvZXNcbiAgICogbm90aGluZyDigJQgd2hpY2ggaXMgd2hhdCBsZWZ0IGV2ZXJ5IHBpbiB3aGl0ZSBpbnN0ZWFkIG9mIGNhcnJ5aW5nIGl0cyBpY29uLiBPbmx5XG4gICAqIGBhZGRgIGhhcyB0byBnbyB0aHJvdWdoIHRoZSBsYXllciwgc2VlIGdldFRhZ0NyZWF0aW9uTW9kdWxlKCkuIFRoZSBnbG9iYWwgbW9kdWxlXG4gICAqIG9ubHkga25vd3MgYSBsYXllci1jcmVhdGVkIHBpbiBvbmNlIGl0IGlzIHJlbmRlcmVkOiBzZWUgd2FpdEZvclRhZ0luU2RrKCkuXG4gICAqL1xuICBnZXRUYWdNb2R1bGUoc2RrOiBhbnksIHRhZ0lkOiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiBzZGs/LlRhZztcbiAgfVxuXG4gIC8qKiBJY29uIG5hbWUgbGFzdCBhcHBsaWVkIHRvIGEgdGFnLCBpZiBhbnkuICovXG4gIGdldENhY2hlZFRhZ0ljb24odGFnSWQ6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMudGFnc0N1cnJlbnRJY29uLmdldCh0YWdJZCk7XG4gIH1cblxuICAvKiogQXBwbGllcyBhbiBpY29uIHRvIGEgdGFnIHRocm91Z2ggaXRzIG93biBtb2R1bGUgYW5kIHJlbWVtYmVycyBpdCBvbiBzdWNjZXNzLiAqL1xuICBhc3luYyBlZGl0VGFnSWNvbihzZGs6IGFueSwgdGFnSWQ6IHN0cmluZywgaWNvbk5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuZ2V0VGFnTW9kdWxlKHNkaywgdGFnSWQpLmVkaXRJY29uKHRhZ0lkLCBpY29uTmFtZSk7XG4gICAgdGhpcy50YWdzQ3VycmVudEljb24uc2V0KHRhZ0lkLCBpY29uTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgb25jZSB0aGUgZ2xvYmFsIFNESyBUYWcgY29sbGVjdGlvbiDigJQgdGhlIG9uZSBlZGl0cyBnbyB0aHJvdWdoIOKAlCBjb250YWlucyB0aGVcbiAgICogdGFnLCBzbyBlZGl0cyBkbyBub3QgaGl0IGEgcGluIHRoYXQgaXMgbm90IHJlbmRlcmVkIHlldCAoXCJzZXRQaW5SZW5kZXJPdmVycmlkZXMgb24gYSBwaW5cbiAgICogdGhhdCBkb2Vzbid0IGV4aXN0XCIpLiBHaXZlcyB1cCBhZnRlciBgdGltZW91dE1zYCBhbmQgcmVzb2x2ZXMgYW55d2F5OyBmYWxscyBiYWNrIHRvIGFcbiAgICogc2hvcnQgd2FpdCB3aGVuIHRoZSBjb2xsZWN0aW9uIGNhbm5vdCBiZSBvYnNlcnZlZC4gT25lIHN1YnNjcmlwdGlvbiBpcyBzaGFyZWQgYnkgZXZlcnlcbiAgICogd2FpdGluZyB0YWc6IGEgc3BhY2UgbG9hZHMgaHVuZHJlZHMgb2YgdGhlbS5cbiAgICovXG4gIHByaXZhdGUgd2FpdEZvclRhZ0luU2RrKHNkazogYW55LCB0YWdJZDogc3RyaW5nLCB0aW1lb3V0TXMgPSAxNTAwKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0YWdJZCB8fCAhdGhpcy5vYnNlcnZlU2RrVGFncyhzZGspKSByZXR1cm4gd2FpdCgxMDApO1xuICAgIGlmICh0aGlzLnNka1RhZ0lkcy5oYXModGFnSWQpKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgIGNvbnN0IHdhaXRlcnMgPSB0aGlzLnNka1RhZ1dhaXRlcnMuZ2V0KHRhZ0lkKSB8fCBbXTtcbiAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlbWFpbmluZyA9ICh0aGlzLnNka1RhZ1dhaXRlcnMuZ2V0KHRhZ0lkKSB8fCBbXSkuZmlsdGVyKHdhaXRlciA9PiB3YWl0ZXIgIT09IGRvbmUpO1xuICAgICAgICBpZiAocmVtYWluaW5nLmxlbmd0aCkgdGhpcy5zZGtUYWdXYWl0ZXJzLnNldCh0YWdJZCwgcmVtYWluaW5nKTtcbiAgICAgICAgZWxzZSB0aGlzLnNka1RhZ1dhaXRlcnMuZGVsZXRlKHRhZ0lkKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSwgdGltZW91dE1zKTtcbiAgICAgIGNvbnN0IGRvbmUgPSAoKSA9PiB7IGNsZWFyVGltZW91dCh0aW1lcik7IHJlc29sdmUoKTsgfTtcbiAgICAgIHdhaXRlcnMucHVzaChkb25lKTtcbiAgICAgIHRoaXMuc2RrVGFnV2FpdGVycy5zZXQodGFnSWQsIHdhaXRlcnMpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIEtlZXBzIHNka1RhZ0lkcyBpbiBzeW5jIHdpdGggdGhlIGdsb2JhbCBTREsgVGFnIGNvbGxlY3Rpb247IGZhbHNlIHdoZW4gaXQgY2Fubm90IGJlIG9ic2VydmVkLiAqL1xuICBwcml2YXRlIG9ic2VydmVTZGtUYWdzKHNkazogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuc2RrVGFnU3Vic2NyaXB0aW9uICYmIHRoaXMuc2RrVGFnU3Vic2NyaXB0aW9uU2RrID09PSBzZGspIHJldHVybiB0cnVlO1xuICAgIGNvbnN0IGRhdGEgPSBzZGs/LlRhZz8uZGF0YTtcbiAgICBpZiAodHlwZW9mIGRhdGE/LnN1YnNjcmliZSAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGZhbHNlO1xuXG4gICAgdGhpcy5zdG9wT2JzZXJ2aW5nU2RrVGFncygpO1xuICAgIGNvbnN0IG1hcmtQcmVzZW50ID0gKGlkOiBzdHJpbmcpID0+IHtcbiAgICAgIHRoaXMuc2RrVGFnSWRzLmFkZChpZCk7XG4gICAgICBjb25zdCB3YWl0ZXJzID0gdGhpcy5zZGtUYWdXYWl0ZXJzLmdldChpZCk7XG4gICAgICBpZiAod2FpdGVycykge1xuICAgICAgICB0aGlzLnNka1RhZ1dhaXRlcnMuZGVsZXRlKGlkKTtcbiAgICAgICAgd2FpdGVycy5mb3JFYWNoKHdhaXRlciA9PiB3YWl0ZXIoKSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0cnkge1xuICAgICAgdGhpcy5zZGtUYWdTdWJzY3JpcHRpb25TZGsgPSBzZGs7XG4gICAgICB0aGlzLnNka1RhZ1N1YnNjcmlwdGlvbiA9IGRhdGEuc3Vic2NyaWJlKHtcbiAgICAgICAgb25BZGRlZDogKGlkOiBzdHJpbmcpID0+IG1hcmtQcmVzZW50KGlkKSxcbiAgICAgICAgb25SZW1vdmVkOiAoaWQ6IHN0cmluZykgPT4gdGhpcy5zZGtUYWdJZHMuZGVsZXRlKGlkKSxcbiAgICAgICAgb25Db2xsZWN0aW9uVXBkYXRlZDogKGNvbGxlY3Rpb246IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlkczogc3RyaW5nW10gPSB0eXBlb2YgY29sbGVjdGlvbj8ua2V5cyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgPyBBcnJheS5mcm9tKGNvbGxlY3Rpb24ua2V5cygpKSA6IE9iamVjdC5rZXlzKGNvbGxlY3Rpb24gfHwge30pO1xuICAgICAgICAgIHRoaXMuc2RrVGFnSWRzID0gbmV3IFNldChpZHMpO1xuICAgICAgICAgIGlkcy5mb3JFYWNoKGlkID0+IHRoaXMuc2RrVGFnV2FpdGVycy5oYXMoaWQpICYmIG1hcmtQcmVzZW50KGlkKSk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhpcy5zZGtUYWdTdWJzY3JpcHRpb25TZGsgPSBudWxsO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RvcE9ic2VydmluZ1Nka1RhZ3MoKTogdm9pZCB7XG4gICAgdHJ5IHsgdGhpcy5zZGtUYWdTdWJzY3JpcHRpb24/LmNhbmNlbD8uKCk7IH0gY2F0Y2ggeyB9XG4gICAgdGhpcy5zZGtUYWdTdWJzY3JpcHRpb24gPSBudWxsO1xuICAgIHRoaXMuc2RrVGFnU3Vic2NyaXB0aW9uU2RrID0gbnVsbDtcbiAgICB0aGlzLnNka1RhZ0lkcy5jbGVhcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIFRhZyBtb2R1bGUgZXZlcnkgbmV3IHRhZyBtdXN0IGJlIGNyZWF0ZWQgdGhyb3VnaDogdGhlIHNoYXJlZCBsYXllclxuICAgKiB3aGVuIHRoZSBWaWV3IEFQSSBpcyBhdmFpbGFibGUsIHRoZSBnbG9iYWwgc2RrLlRhZyBvdGhlcndpc2UuXG4gICAqL1xuICBhc3luYyBnZXRUYWdDcmVhdGlvbk1vZHVsZShzZGs6IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgbGF5ZXIgPSBhd2FpdCB0aGlzLmVuc3VyZVNoYXJlZFRhZ0xheWVyKHNkayk7XG4gICAgcmV0dXJuIGxheWVyPy5UYWcgfHwgc2RrPy5UYWc7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyAob25jZSBwZXIgU0RLIHNlc3Npb24pIGFuZCByZXR1cm5zIHRoZSBzaGFyZWQgdGFnIGxheWVyLlxuICAgKiBSZXNvbHZlcyB0byBudWxsIHdoZW4gdGhlIFZpZXcgQVBJIGlzIHVuYXZhaWxhYmxlLCBzbyBjYWxsZXJzIHRyYW5zcGFyZW50bHkgZmFsbFxuICAgKiBiYWNrIHRvIHRoZSBnbG9iYWwgc2RrLlRhZy5cbiAgICovXG4gIGFzeW5jIGVuc3VyZVNoYXJlZFRhZ0xheWVyKHNkazogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICBpZiAodGhpcy5zaGFyZWRUYWdMYXllcikgcmV0dXJuIHRoaXMuc2hhcmVkVGFnTGF5ZXI7XG4gICAgaWYgKCFzZGs/LlZpZXc/LmNyZWF0ZUxheWVyKSByZXR1cm4gbnVsbDtcblxuICAgIGlmICghdGhpcy5zaGFyZWRUYWdMYXllclByb21pc2UpIHtcbiAgICAgIHRoaXMuc2hhcmVkVGFnTGF5ZXJQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICBzZGsuVmlldy5jcmVhdGVMYXllcihNYXR0ZXJwb3J0VGFnU2VydmljZS5TSEFSRURfVEFHX0xBWUVSX05BTUUpXG4gICAgICApXG4gICAgICAgIC50aGVuKGFzeW5jIChsYXllcjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5zaGFyZWRUYWdMYXllciA9IGxheWVyO1xuICAgICAgICAgIC8vIEEgZnJlc2hseSBjcmVhdGVkIGxheWVyIGNhbiBjb21lIGJhY2sgdG9nZ2xlZCBvZmYsIHdoaWNoIGhpZGVzIGl0cyB0YWdzLlxuICAgICAgICAgIGlmIChsYXllciAmJiBsYXllci50b2dnbGVkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgYXdhaXQgbGF5ZXIudG9nZ2xlKHRydWUpLmNhdGNoKCgpID0+IHsgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBsYXllcjtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlOiBhbnkpID0+IHtcbiAgICAgICAgICAvLyBBbGxvdyBhIGxhdGVyIHJldHJ5IChlLmcuIHRoZSBTREsgd2FzIG5vdCBmdWxseSByZWFkeSB5ZXQpLlxuICAgICAgICAgIHRoaXMuc2hhcmVkVGFnTGF5ZXJQcm9taXNlID0gbnVsbDtcbiAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIGNvbnNvbGUud2FybignW01hdHRlcnBvcnRUYWdTZXJ2aWNlXSBDb3VsZCBub3QgY3JlYXRlIHRoZSBzaGFyZWQgdGFnIGxheWVyJywgZSk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnNoYXJlZFRhZ0xheWVyUHJvbWlzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlcyBzdXJlIHRoZSBzaGFyZWQgbGF5ZXIgaXMgcGFydCBvZiBldmVyeSB2aWV3IG9mIHRoZSBzcGFjZSwgRGVmdXJuaXNoZWRcbiAgICogaW5jbHVkZWQuIFRoaXMgaXMgd2hhdCBhY3R1YWxseSBzaGFyZXMgdGhlIHRhZ3MgYWNyb3NzIHZpZXdzLCBhbmQgdGhlIHJlYXNvbiB0aGVcbiAgICogbGF5ZXIgbXVzdCBub3QgYmUgYSBjb21tb24gb25lOiB0aGUgU0RLIG9ubHkgcGVyZm9ybXMgdGhlIGF0dGFjaG1lbnQgZm9yXG4gICAqIG5vbi1jb21tb24gbGF5ZXJzLiBJZGVtcG90ZW50LCBzbyBpdCBjYW4gcnVuIG9uIGV2ZXJ5IHZpZXcgY29sbGVjdGlvbiB1cGRhdGUuXG4gICAqL1xuICBhc3luYyBhdHRhY2hTaGFyZWRUYWdMYXllclRvVmlld3Moc2RrOiBhbnksIHZpZXdzOiBJdGVyYWJsZTxhbnk+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbGF5ZXIgPSBhd2FpdCB0aGlzLmVuc3VyZVNoYXJlZFRhZ0xheWVyKHNkayk7XG4gICAgaWYgKCFsYXllcikgcmV0dXJuO1xuXG4gICAgZm9yIChjb25zdCB2aWV3IG9mIHZpZXdzKSB7XG4gICAgICBpZiAoIXZpZXc/LmFkZExheWVyIHx8IHZpZXcuaGFzTGF5ZXI/LihsYXllcikpIGNvbnRpbnVlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdmlldy5hZGRMYXllcihsYXllcik7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSkgY29uc29sZS53YXJuKCdbTWF0dGVycG9ydFRhZ1NlcnZpY2VdIENhbm5vdCBhZGQgdGhlIHNoYXJlZCB0YWcgbGF5ZXIgdG8gdmlldycsIHZpZXc/LmlkLCBlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHRhZyB0aHJvdWdoIHRoZSBzaGFyZWQgbGF5ZXIgc28gaXQgZXhpc3RzIGluIGV2ZXJ5IHZpZXcuIEZhbGxzIGJhY2tcbiAgICogdG8gdGhlIGdsb2JhbCBzZGsuVGFnIHdoZW4gdGhlIFZpZXcgQVBJIGlzIHVuYXZhaWxhYmxlOyB0aGF0IGNhbGwgaXMgcmFjZWQgYWdhaW5zdFxuICAgKiBhIHRpbWVvdXQgYXMgYSBzYWZldHkgbmV0LCBzaW5jZSBpdCBuZXZlciByZXNvbHZlcyB3aGlsZSBhIERlZnVybmlzaGVkIHZpZXcgaXNcbiAgICogYWN0aXZlLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBhZGRUYWdUb1NkayhzZGs6IGFueSwgZGVzY3JpcHRvcjogUmVjb3JkPHN0cmluZywgYW55Pik6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xuICAgIGNvbnN0IHNoYXJlZFRhZ01vZHVsZSA9IGF3YWl0IHRoaXMuZ2V0VGFnQ3JlYXRpb25Nb2R1bGUoc2RrKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBzaWRMaXN0ID0gKGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIHNoYXJlZFRhZ01vZHVsZS5hZGQoZGVzY3JpcHRvciksXG4gICAgICAgIG5ldyBQcm9taXNlPG5ldmVyPigoXywgcmVqZWN0KSA9PlxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcignVGFnLmFkZCB0aW1lZCBvdXQnKSksIDQwMDApXG4gICAgICAgICksXG4gICAgICBdKSkgYXMgc3RyaW5nW107XG4gICAgICBpZiAoc2lkTGlzdD8ubGVuZ3RoKSByZXR1cm4gc2lkTGlzdFswXTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBpZiAoZXJyb3I/Lm1lc3NhZ2U/LmluY2x1ZGVzKCdhbHJlYWR5IGluIHVzZScpKSB0aHJvdyBlcnJvcjtcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkgY29uc29sZS53YXJuKCdbTWF0dGVycG9ydFRhZ1NlcnZpY2VdIFRhZy5hZGQgZmFpbGVkL3RpbWVkIG91dCcsIGVycm9yPy5tZXNzYWdlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKiBPcGVucyB0aGUgbW9zdCByZWNlbnRseSBjcmVhdGVkIHRhZyBpbiB0aGUgdmlld2VyLiAqL1xuICBhc3luYyBnb1RvTGFzdFRhZyhzZGs6IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgaWYgKCFzZGsgfHwgdGhpcy5tYXR0ZXJ0YWdJRHMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgbGFzdFNpZCA9IHRoaXMubWF0dGVydGFnSURzW3RoaXMubWF0dGVydGFnSURzLmxlbmd0aCAtIDFdO1xuICAgIHJldHVybiB0aGlzLmdvVG9UYWcoc2RrLCBsYXN0U2lkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgTWF0dGVydGFnIHRvIHRoZSB2aWV3ZXIsIHNlcmlhbGl6aW5nIGNhbGxzIHRvIHByZXZlbnQgU0RLIHJhY2UgY29uZGl0aW9ucy5cbiAgICogUmV1c2VzIGV4aXN0aW5nIElEcyBpZiB0aGUgdGFnIGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgc2Vzc2lvbi5cbiAgICovXG4gIGFzeW5jIGFkZE1hdHRlcnRhZ1RvVmlld2VyKHNkazogYW55LCBtYXR0ZXJ0YWdEYXRhOiBNYXR0ZXJ0YWdEYXRhKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgaWYgKCFzZGspIHJldHVybiBudWxsO1xuXG4gICAgdGhpcy50YWdBZGRRdWV1ZSA9IHRoaXMudGFnQWRkUXVldWVcbiAgICAgIC50aGVuKGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IG1hdHRlcnRhZ0RhdGEuZ2V0TWF0dGVydGFnRGVzY3JpcHRvcigpWzBdO1xuICAgICAgICBjb25zdCBleGlzdGluZ0lkID0gZGVzY3JpcHRvcj8uaWQgfHwgbnVsbDtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHNpZCA9IGF3YWl0IHRoaXMuYWRkVGFnVG9TZGsoc2RrLCBkZXNjcmlwdG9yKTtcbiAgICAgICAgICBpZiAoc2lkKSB7XG4gICAgICAgICAgICBtYXR0ZXJ0YWdEYXRhLnNldE1hdHRlcnBvcnRTaWQoc2lkKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5tYXR0ZXJ0YWdJRHMuaW5jbHVkZXMoc2lkKSkge1xuICAgICAgICAgICAgICB0aGlzLm1hdHRlcnRhZ0lEcy5wdXNoKHNpZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRpY3Rpb25uYXJ5VGFncy5zZXQoc2lkLCBtYXR0ZXJ0YWdEYXRhKTtcbiAgICAgICAgICAgIHJldHVybiBzaWQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkgY29uc29sZS53YXJuKCdbTWF0dGVycG9ydFRhZ1NlcnZpY2VdIFRhZy5hZGQgcmV0dXJuZWQgbm8gc2lkJywgZGVzY3JpcHRvcik7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICBpZiAoZXJyb3I/Lm1lc3NhZ2U/LmluY2x1ZGVzKCdhbHJlYWR5IGluIHVzZScpICYmIGV4aXN0aW5nSWQpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5kaWN0aW9ubmFyeVRhZ3MuaGFzKGV4aXN0aW5nSWQpKSB7XG4gICAgICAgICAgICAgIHRoaXMubWF0dGVydGFnSURzLnB1c2goZXhpc3RpbmdJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRpY3Rpb25uYXJ5VGFncy5zZXQoZXhpc3RpbmdJZCwgbWF0dGVydGFnRGF0YSk7XG4gICAgICAgICAgICByZXR1cm4gZXhpc3RpbmdJZDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSBjb25zb2xlLndhcm4oJ1tNYXR0ZXJwb3J0VGFnU2VydmljZV0gYWRkTWF0dGVydGFnVG9WaWV3ZXIgZmFpbGVkJywgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIGNvbnNvbGUud2FybignW01hdHRlcnBvcnRUYWdTZXJ2aWNlXSB0YWdBZGRRdWV1ZSByZWplY3RlZCcsIGUpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMudGFnQWRkUXVldWU7XG4gIH1cblxuICAvKipcbiAgICogSW50ZXJuYWwgbWV0aG9kIHRvIGFkZCBhbmQgY29uZmlndXJlIGEgTWF0dGVydGFnIHdpdGggaWNvbiwgb3BhY2l0eSwgYW5kIEhUTUwgY29udGVudC5cbiAgICogSGFuZGxlcyBleGlzdGluZyB0YWdzIGdyYWNlZnVsbHkgYW5kIHF1ZXVlcyBvcGVyYXRpb25zIHRvIGF2b2lkIFNESyBjb25mbGljdHMuXG4gICAqL1xuICBhc3luYyBfZG9BZGRNYXR0ZXJ0YWcoXG4gICAgc2RrOiBhbnksXG4gICAgbWF0dGVydGFnRGF0YTogTWF0dGVydGFnRGF0YSxcbiAgICBzZXRUYWdJY29uQW5kT3BhY2l0eTogKHNpZDogc3RyaW5nLCBtdDogTWF0dGVydGFnRGF0YSkgPT4gUHJvbWlzZTx2b2lkPixcbiAgICBpbmplY3RIdG1sSW5UYWc6ICh0eXBlOiBQb2lUeXBlLCBvYmo6IERiT2JqZWN0VHlwZSwgc2lkOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBkZXNjcmlwdG9yID0gbWF0dGVydGFnRGF0YS5nZXRNYXR0ZXJ0YWdEZXNjcmlwdG9yKCk7XG4gICAgLy9jb25zb2xlLmxvZygnZGVzY3JpcHRvcicsIGRlc2NyaXB0b3IpO1xuICAgIGNvbnN0IHNpZCA9IGRlc2NyaXB0b3JbMF1bJ2lkJ107XG5cbiAgICBpZiAoc2lkICYmIHRoaXMuZGljdGlvbm5hcnlUYWdzLmhhcyhzaWQpKSB7XG4gICAgICBhd2FpdCBzZXRUYWdJY29uQW5kT3BhY2l0eShzaWQsIG1hdHRlcnRhZ0RhdGEpO1xuICAgICAgYXdhaXQgaW5qZWN0SHRtbEluVGFnKG1hdHRlcnRhZ0RhdGEuZ2V0VHlwZSgpLCBtYXR0ZXJ0YWdEYXRhLmdldE9iamVjdCgpLCBzaWQpO1xuICAgICAgcmV0dXJuIHNpZDtcbiAgICB9XG5cbiAgICB0aGlzLnRhZ0FkZFF1ZXVlID0gdGhpcy50YWdBZGRRdWV1ZS50aGVuKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHRhZ01vZHVsZSA9IGF3YWl0IHRoaXMuZ2V0VGFnQ3JlYXRpb25Nb2R1bGUoc2RrKTtcbiAgICAgICAgY29uc3QgW2NyZWF0ZWRTaWRdID0gYXdhaXQgdGFnTW9kdWxlLmFkZCguLi5kZXNjcmlwdG9yKTtcblxuICAgICAgICB0aGlzLm1hdHRlcnRhZ0lEcy5wdXNoKGNyZWF0ZWRTaWQpO1xuICAgICAgICB0aGlzLmRpY3Rpb25uYXJ5VGFncy5zZXQoY3JlYXRlZFNpZCwgbWF0dGVydGFnRGF0YSk7XG5cbiAgICAgICAgYXdhaXQgdGhpcy53YWl0Rm9yVGFnSW5TZGsoc2RrLCBjcmVhdGVkU2lkKTtcbiAgICAgICAgYXdhaXQgc2V0VGFnSWNvbkFuZE9wYWNpdHkoY3JlYXRlZFNpZCwgbWF0dGVydGFnRGF0YSk7XG5cbiAgICAgICAgaW5qZWN0SHRtbEluVGFnKG1hdHRlcnRhZ0RhdGEuZ2V0VHlwZSgpLCBtYXR0ZXJ0YWdEYXRhLmdldE9iamVjdCgpLCBjcmVhdGVkU2lkKS5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkgY29uc29sZS53YXJuKCdIVE1MIGluamVjdGlvbiBmYWlsZWQgZm9yJywgY3JlYXRlZFNpZCwgZXJyKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGNyZWF0ZWRTaWQ7XG4gICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgaWYgKGU/Lm1lc3NhZ2U/LmluY2x1ZGVzKCdhbHJlYWR5IGluIHVzZScpICYmIHNpZCkge1xuICAgICAgICAgIGlmICghdGhpcy5kaWN0aW9ubmFyeVRhZ3MuaGFzKHNpZCkpIHtcbiAgICAgICAgICAgIHRoaXMubWF0dGVydGFnSURzLnB1c2goc2lkKTtcbiAgICAgICAgICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLnNldChzaWQsIG1hdHRlcnRhZ0RhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhd2FpdCBzZXRUYWdJY29uQW5kT3BhY2l0eShzaWQsIG1hdHRlcnRhZ0RhdGEpO1xuICAgICAgICAgIGF3YWl0IGluamVjdEh0bWxJblRhZyhtYXR0ZXJ0YWdEYXRhLmdldFR5cGUoKSwgbWF0dGVydGFnRGF0YS5nZXRPYmplY3QoKSwgc2lkKTtcbiAgICAgICAgICByZXR1cm4gc2lkO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy50YWdBZGRRdWV1ZTtcbiAgfVxuXG4gIGdldERpc3RhbmNlKHAxOiBhbnksIHAyOiBhbnkpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLnNxcnQoTWF0aC5wb3cocDIueCAtIHAxLngsIDIpICsgTWF0aC5wb3cocDIueSAtIHAxLnksIDIpICsgTWF0aC5wb3cocDIueiAtIHAxLnosIDIpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSB0YWcgaXMgd2l0aGluIHRoZSBib3VuZGluZyBib3ggb2YgYW55IGFjdGl2ZSByb29tIChhZGRpbmcgYSBzbGlnaHQgbWFyZ2luIHRvIGFjY291bnQgZm9yIHdhbGwtbW91bnRlZCB0YWdzKS5cbiAgICogSWYgdGhlcmUgYXJlIG5vIGFjdGl2ZSByb29tcyAoZS5nLiwgaGFsbHdheSksIGZhbGxzIGJhY2sgdG8gcmV0dXJuaW5nIHRydWUuXG4gICAqL1xuICBpc1RhZ0luUm9vbXMobWF0dGVydGFnRGF0YTogTWF0dGVydGFnRGF0YSwgcm9vbXM6IGFueVtdKTogYm9vbGVhbiB7XG4gICAgaWYgKCFyb29tcyB8fCByb29tcy5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcblxuICAgIGNvbnN0IHRhZ1BvcyA9IG1hdHRlcnRhZ0RhdGEuZ2V0UG9zaXRpb24oKTtcbiAgICBjb25zdCBtYXJnaW4gPSAxLjU7XG5cbiAgICByZXR1cm4gcm9vbXMuc29tZSgocm9vbSkgPT4ge1xuICAgICAgaWYgKCFyb29tLmJvdW5kcykgcmV0dXJuIGZhbHNlO1xuICAgICAgY29uc3QgeyBtaW4sIG1heCB9ID0gcm9vbS5ib3VuZHM7XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRhZ1Bvcy54ID49IG1pbi54IC0gbWFyZ2luICYmIHRhZ1Bvcy54IDw9IG1heC54ICsgbWFyZ2luICYmXG4gICAgICAgIHRhZ1Bvcy55ID49IG1pbi55IC0gbWFyZ2luICYmIHRhZ1Bvcy55IDw9IG1heC55ICsgbWFyZ2luICYmXG4gICAgICAgIHRhZ1Bvcy56ID49IG1pbi56IC0gbWFyZ2luICYmIHRhZ1Bvcy56IDw9IG1heC56ICsgbWFyZ2luXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIFJldHVybnMgdGhlIElEIG9mIHRoZSBtb3N0IHJlY2VudGx5IGFkZGVkIHRhZy4gKi9cbiAgZ2V0TGFzdFRhZygpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAodGhpcy5tYXR0ZXJ0YWdJRHMubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy5tYXR0ZXJ0YWdJRHNbdGhpcy5tYXR0ZXJ0YWdJRHMubGVuZ3RoIC0gMV07XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgdmlzaWJpbGl0eSAob3BhY2l0eSkgb2YgYWxsIHRhZ3MgYmFzZWQgb24gdGhlIGN1cnJlbnQgY2FtZXJhIG1vZGUsXG4gICAqIGZsb29yIGFuZCByb29tIGNvbnRleHQuIE11c3QgYmUgY2FsbGVkIGFmdGVyIGVhY2ggc3dlZXAsIGZsb29yIG9yIG1vZGUgY2hhbmdlLlxuICAgKlxuICAgKiBSdWxlczpcbiAgICogIC0gRE9MTEhPVVNFIC8gRkxPT1JQTEFOIOKGkiBhbGwgdGFncyBoaWRkZW4gKG9wYWNpdHkgMCkuXG4gICAqICAtIElOU0lERSDihpIgb25seSB0YWdzIHdob3NlIHN3ZWVwIGJlbG9uZ3MgdG8gdGhlIGN1cnJlbnQgZmxvb3IgYXJlIHNob3duO1xuICAgKiAgICBwcm94aW1pdHktYmFzZWQgb3BhY2l0eSBpcyBhcHBsaWVkIHZpYSBjb21wdXRlVGFnT3BhY2l0eSgpLlxuICAgKiAgICBUYWdzIG9uIG90aGVyIGZsb29ycyBhcmUgaGlkZGVuIChvcGFjaXR5IDApLlxuICAgKiAgLSBUUkFOU0lUSU9OSU5HIOKGkiBubyBjaGFuZ2UgKHNraXAgdXBkYXRlIHRvIGF2b2lkIGZsaWNrZXJpbmcpLlxuICAgKlxuICAgKiBAcGFyYW0gc2RrICAgICAgICAgIE1hdHRlcnBvcnQgU0RLIGluc3RhbmNlLlxuICAgKiBAcGFyYW0gcG9zZUNhbWVyYSAgIEN1cnJlbnQgY2FtZXJhIHBvc2UuXG4gICAqIEBwYXJhbSBzd2VlcENvbGxlY3Rpb24gIEZ1bGwgY29sbGVjdGlvbiBvZiBzd2VlcHMuXG4gICAqIEBwYXJhbSBjdXJyZW50Q2FtZXJhTW9kZSAgQ3VycmVudCBjYW1lcmEgbW9kZS5cbiAgICogQHBhcmFtIG1hdHRlcnRhZ1RvRm9sbG93ICBJRCBvZiB0aGUgY3Vyc29yIHRhZyAobmV2ZXIgdG91Y2hlZCkuXG4gICAqL1xuICBhc3luYyB1cGRhdGVUYWdzVmlzaWJpbGl0eUZvckNvbnRleHQoXG4gICAgc2RrOiBhbnksXG4gICAgc3dlZXBDb2xsZWN0aW9uOiBhbnksXG4gICAgY3VycmVudENhbWVyYU1vZGU6IENhbWVyYU1vZGUsXG4gICAgbWF0dGVydGFnVG9Gb2xsb3c6IHN0cmluZyB8IG51bGwsXG4gICAgY3VycmVudEZsb29yU2VxdWVuY2U6IG51bWJlciB8IG51bGwgPSBudWxsLFxuICAgIGN1cnJlbnRSb29tczogYW55W10gPSBbXVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXNkayB8fCB0aGlzLmRpY3Rpb25uYXJ5VGFncy5zaXplID09PSAwKSByZXR1cm47XG5cbiAgICBjb25zdCBpc0ludGVyaW9yTW9kZSA9IGN1cnJlbnRDYW1lcmFNb2RlID09PSBDYW1lcmFNb2RlLklOU0lERTtcbiAgICBjb25zdCBjdXJyZW50Rmxvb3JJZCA9IGN1cnJlbnRGbG9vclNlcXVlbmNlICE9PSBudWxsID8gY3VycmVudEZsb29yU2VxdWVuY2UudG9TdHJpbmcoKSA6IG51bGw7XG4gICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcblxuICAgIGZvciAoY29uc3QgW3RhZ0lkLCBtYXR0ZXJ0YWdEYXRhXSBvZiB0aGlzLmRpY3Rpb25uYXJ5VGFncykge1xuICAgICAgaWYgKHRhZ0lkID09PSBtYXR0ZXJ0YWdUb0ZvbGxvdykgY29udGludWU7XG5cbiAgICAgIGNvbnN0IHRhZ0Zsb29ySWQgPSB0aGlzLmdldEZsb29ySWRGb3JUYWcobWF0dGVydGFnRGF0YSwgc3dlZXBDb2xsZWN0aW9uKTtcbiAgICAgIGNvbnN0IGlzT25DdXJyZW50Rmxvb3IgPSAhdGFnRmxvb3JJZCB8fCAhY3VycmVudEZsb29ySWQgfHwgdGFnRmxvb3JJZCA9PT0gY3VycmVudEZsb29ySWQ7XG5cbiAgICAgIGxldCB0YXJnZXRPcGFjaXR5ID0gMDtcbiAgICAgIGxldCBzaG91bGRCZUVuYWJsZWQgPSBmYWxzZTtcblxuICAgICAgLy8gQ2FsY3VsYXRpb24gb2Ygb3BhY2l0eSBhbmQgZW5hYmxlIHN0YXR1c1xuICAgICAgaWYgKGlzT25DdXJyZW50Rmxvb3IpIHtcbiAgICAgICAgaWYgKCFpc0ludGVyaW9yTW9kZSkge1xuICAgICAgICAgIHRhcmdldE9wYWNpdHkgPSAxO1xuICAgICAgICAgIHNob3VsZEJlRW5hYmxlZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFyZ2V0T3BhY2l0eSA9IDAuOTtcbiAgICAgICAgICBzaG91bGRCZUVuYWJsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBBcHBseSBjaGFuZ2VzXG5cbiAgICAgIC8vIFRvb2x0aXAgYW5kIGNsaWNrIG1hbmFnZW1lbnRcbiAgICAgIGNvbnN0IHRhZ01vZHVsZSA9IHRoaXMuZ2V0VGFnTW9kdWxlKHNkaywgdGFnSWQpO1xuICAgICAgY29uc3QgbGFzdEVuYWJsZWQgPSB0aGlzLnRhZ3NDdXJyZW50RW5hYmxlZC5nZXQodGFnSWQpO1xuICAgICAgaWYgKGxhc3RFbmFibGVkICE9PSBzaG91bGRCZUVuYWJsZWQpIHtcbiAgICAgICAgdGhpcy50YWdzQ3VycmVudEVuYWJsZWQuc2V0KHRhZ0lkLCBzaG91bGRCZUVuYWJsZWQpO1xuICAgICAgICBwcm9taXNlcy5wdXNoKHRhZ01vZHVsZS5hbGxvd0FjdGlvbih0YWdJZCwge1xuICAgICAgICAgIG9wZW5pbmc6IHNob3VsZEJlRW5hYmxlZCxcbiAgICAgICAgICBuYXZpZ2F0aW5nOiBzaG91bGRCZUVuYWJsZWQsXG4gICAgICAgICAgZG9ja2luZzogZmFsc2VcbiAgICAgICAgfSkuY2F0Y2goKCkgPT4geyB9KSk7XG4gICAgICB9XG4gICAgICAvLyBPcGFjaXR5IG1hbmFnZW1lbnRcbiAgICAgIGNvbnN0IGxhc3RPcGFjaXR5ID0gdGhpcy50YWdzQ3VycmVudE9wYWNpdHkuZ2V0KHRhZ0lkKSA/PyAtMTtcbiAgICAgIGlmIChNYXRoLmFicyhsYXN0T3BhY2l0eSAtIHRhcmdldE9wYWNpdHkpID4gMC4wNSkge1xuICAgICAgICB0aGlzLnRhZ3NDdXJyZW50T3BhY2l0eS5zZXQodGFnSWQsIHRhcmdldE9wYWNpdHkpO1xuICAgICAgICBwcm9taXNlcy5wdXNoKHRhZ01vZHVsZS5lZGl0T3BhY2l0eSh0YWdJZCwgdGFyZ2V0T3BhY2l0eSkuY2F0Y2goKCkgPT4geyB9KSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIERyb3BzIHRoZSBtZW1vaXplZCBvcGFjaXR5L2VuYWJsZWQgc3RhdGUgc28gdGhlIG5leHQgdmlzaWJpbGl0eSBwYXNzIHJlLWFwcGxpZXMgaXRcbiAgICogdG8gZXZlcnkgdGFnLiBOZWVkZWQgYWZ0ZXIgYSB2aWV3IHN3aXRjaCAoZnVybmlzaGVkIDwtPiBkZWZ1cm5pc2hlZCk6IHRoZSBTREtcbiAgICogcmUtcmVuZGVycyB0aGUgc2hhcmVkIGxheWVyJ3MgdGFncyBhbmQgdGhlIGNhY2hlZCB2YWx1ZXMgd291bGQgb3RoZXJ3aXNlIG1ha2VcbiAgICogdXBkYXRlVGFnc1Zpc2liaWxpdHlGb3JDb250ZXh0KCkgc2tpcCB0aGVtLCBsZWF2aW5nIHRhZ3Mgc3R1Y2sgaW52aXNpYmxlLlxuICAgKi9cbiAgcmVzZXRWaXNpYmlsaXR5Q2FjaGUoKTogdm9pZCB7XG4gICAgdGhpcy50YWdzQ3VycmVudE9wYWNpdHkuY2xlYXIoKTtcbiAgICB0aGlzLnRhZ3NDdXJyZW50RW5hYmxlZC5jbGVhcigpO1xuICAgIHRoaXMudGFnc0N1cnJlbnRJY29uLmNsZWFyKCk7XG4gIH1cblxuICAvKiogUmVtb3ZlcyBhIHNwZWNpZmljIHRhZyBmcm9tIHRoZSB2aWV3ZXIgYW5kIGxvY2FsIGRpY3Rpb25hcmllcy4gKi9cbiAgYXN5bmMgZGVsZXRlTWF0dGVydGFnRnJvbUlkKHNkazogYW55LCBtYXR0ZXJ0YWdJRDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChzZGspIGF3YWl0IHRoaXMuZ2V0VGFnTW9kdWxlKHNkaywgbWF0dGVydGFnSUQpLnJlbW92ZShtYXR0ZXJ0YWdJRCk7XG4gICAgICB0aGlzLmRpY3Rpb25uYXJ5VGFncy5kZWxldGUobWF0dGVydGFnSUQpO1xuICAgICAgdGhpcy50YWdzQ3VycmVudEljb24uZGVsZXRlKG1hdHRlcnRhZ0lEKTtcbiAgICAgIHRoaXMudGFnc0N1cnJlbnRPcGFjaXR5LmRlbGV0ZShtYXR0ZXJ0YWdJRCk7XG4gICAgICB0aGlzLnRhZ3NDdXJyZW50RW5hYmxlZC5kZWxldGUobWF0dGVydGFnSUQpO1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLm1hdHRlcnRhZ0lEcy5pbmRleE9mKG1hdHRlcnRhZ0lEKTtcbiAgICAgIGlmIChpbmRleCA+IC0xKSB0aGlzLm1hdHRlcnRhZ0lEcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgaWYgKGlzRGV2TW9kZSgpKSBjb25zb2xlLndhcm4oJ0Nhbm5vdCBkZWxldGUgdGFnJywgbWF0dGVydGFnSUQsIGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBSZW1vdmVzIHRoZSBsYXN0IGFkZGVkIHRhZyBmcm9tIHRoZSB2aWV3ZXIuICovXG4gIGFzeW5jIGRlbGV0ZUxhc3RNYXR0ZXJ0YWcoc2RrOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBsYXN0U2lkID0gdGhpcy5nZXRMYXN0VGFnKCk7XG4gICAgaWYgKGxhc3RTaWQpIGF3YWl0IHRoaXMuZGVsZXRlTWF0dGVydGFnRnJvbUlkKHNkaywgbGFzdFNpZCk7XG4gIH1cblxuICAvKiogQ2xlYXJzIGFsbCB0YWdzIGZyb20gdGhlIHZpZXdlciBhbmQgcmVzZXRzIGxvY2FsIHN0YXRlLiAqL1xuICBhc3luYyBhY3Rpb25fZGVsZXRlX2FsbF9tYXR0ZXJ0YWdzKHNkazogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHNkaykge1xuICAgICAgY29uc3Qgc2lkc1RvUmVtb3ZlID0gWy4uLnRoaXMubWF0dGVydGFnSURzXTtcbiAgICAgIGZvciAoY29uc3Qgc2lkIG9mIHNpZHNUb1JlbW92ZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0VGFnTW9kdWxlKHNkaywgc2lkKS5yZW1vdmUoc2lkKTtcbiAgICAgICAgfSBjYXRjaCAoZSkgeyB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuZCBjb25maWd1cmVzIGEgTWF0dGVydGFnIGZyb20gYSBQT0ksIGhhbmRsaW5nIGNvb3JkaW5hdGVzLCBub3JtYWxzLCBhbmQgc3dlZXAgSUQuXG4gICAqIFNraXBzIGNyZWF0aW9uIGlmIGEgdGFnIGZvciB0aGUgb2JqZWN0IGFscmVhZHkgZXhpc3RzLlxuICAgKi9cbiAgYXN5bmMgY3JlYXRlTWF0dGVydGFnRnJvbVBPSShcbiAgICBzZGs6IGFueSxcbiAgICB0YWdUeXBlOiBQb2lUeXBlLFxuICAgIG9iamVjdDogRGJPYmplY3RUeXBlLFxuICAgIHBvaTogUE9JLFxuICAgIGdldFRhZ0Zyb21FbGVtZW50SWQ6IChpZDogc3RyaW5nKSA9PiB7IHRhZzogc3RyaW5nOyBzd2VlcDogc3RyaW5nIH0sXG4gICAgc2V0VGFnSWNvbkFuZE9wYWNpdHk6IChzaWQ6IHN0cmluZywgbXQ6IE1hdHRlcnRhZ0RhdGEpID0+IFByb21pc2U8dm9pZD4sXG4gICAgaW5qZWN0SHRtbEluVGFnOiAodHlwZTogUG9pVHlwZSwgb2JqOiBEYk9iamVjdFR5cGUsIHNpZDogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgeyB0YWcgfSA9IGdldFRhZ0Zyb21FbGVtZW50SWQob2JqZWN0LmlkKTtcbiAgICBpZiAodGFnKSByZXR1cm47XG5cbiAgICBjb25zdCBtYXR0ZXJ0YWdEYXRhOiBNYXR0ZXJ0YWdEYXRhID0gbmV3IE1hdHRlcnRhZ0RhdGEodGFnVHlwZSk7XG4gICAgbWF0dGVydGFnRGF0YS5zZXRPYmplY3Qob2JqZWN0LCB0YWdUeXBlKTtcblxuICAgIGlmIChwb2kuY29vcmRpbmF0ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbWF0dGVydGFnRGF0YS5zZXRQb3NpdGlvbihKU09OLnBhcnNlKHBvaS5jb29yZGluYXRlKSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSkgY29uc29sZS53YXJuKCdFcnJvciBwYXJzaW5nIFBPSSBjb29yZGluYXRlcycsIHBvaS5jb29yZGluYXRlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocG9pLm1ldGFkYXRhKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB0YWdNZXRhZGF0YSA9IEpTT04ucGFyc2UocG9pLm1ldGFkYXRhKTtcbiAgICAgICAgbWF0dGVydGFnRGF0YS5zZXROb3JtYWwodGFnTWV0YWRhdGEubm9ybWFsIHx8IHsgeDogMCwgeTogLTAuMTUsIHo6IDAgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIG1hdHRlcnRhZ0RhdGEuc2V0Tm9ybWFsKHsgeDogMCwgeTogLTAuMTUsIHo6IDAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBvaS5tYXR0ZXJwb3J0U3dlZXBJRCkge1xuICAgICAgbWF0dGVydGFnRGF0YS5zZXRTd2VlcElEKHBvaS5tYXR0ZXJwb3J0U3dlZXBJRCk7XG4gICAgfVxuICAgIG1hdHRlcnRhZ0RhdGEuc2V0UG9pKHBvaSk7XG5cbiAgICBjb25zdCBjcmVhdGVkVGFnSUQgPSBhd2FpdCB0aGlzLmFkZE1hdHRlcnRhZ1RvVmlld2VyKHNkaywgbWF0dGVydGFnRGF0YSk7XG5cbiAgICBpZiAoY3JlYXRlZFRhZ0lEICYmIHNkaykge1xuICAgICAgYXdhaXQgdGhpcy53YWl0Rm9yVGFnSW5TZGsoc2RrLCBjcmVhdGVkVGFnSUQpO1xuICAgICAgYXdhaXQgc2V0VGFnSWNvbkFuZE9wYWNpdHkoY3JlYXRlZFRhZ0lELCBtYXR0ZXJ0YWdEYXRhKTtcbiAgICAgIGluamVjdEh0bWxJblRhZyh0YWdUeXBlLCBvYmplY3QsIGNyZWF0ZWRUYWdJRCkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSBjb25zb2xlLndhcm4oJ0hUTUwgaW5qZWN0aW9uIGZhaWxlZCBmb3InLCBjcmVhdGVkVGFnSUQsIGVycik7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY3JlYXRlZFRhZ0lEO1xuICB9XG5cbiAgLyoqIFVwZGF0ZXMgdGhlIGljb24sIG9wYWNpdHksIGFuZCBIVE1MIGNvbnRlbnQgb2YgYW4gZXhpc3RpbmcgdGFnLiAqL1xuICBhc3luYyB1cGRhdGVNYXR0ZXJUYWdDb250ZW50Rm9yVGFnSUQoXG4gICAgc2RrOiBhbnksXG4gICAgbWF0dGVydGFnSUQ6IHN0cmluZyxcbiAgICBvYmplY3Q6IERiT2JqZWN0VHlwZSxcbiAgICBwb2lUeXBlOiBQb2lUeXBlLFxuICAgIHNldFRhZ0ljb25BbmRPcGFjaXR5OiAoc2lkOiBzdHJpbmcsIG10OiBNYXR0ZXJ0YWdEYXRhKSA9PiBQcm9taXNlPHZvaWQ+LFxuICAgIGluamVjdEh0bWxJblRhZzogKHR5cGU6IFBvaVR5cGUsIG9iajogRGJPYmplY3RUeXBlLCBzaWQ6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICApOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IG1hdHRlcnRhZ0RhdGEgPSB0aGlzLmRpY3Rpb25uYXJ5VGFncy5nZXQobWF0dGVydGFnSUQpO1xuICAgIGlmICghbWF0dGVydGFnRGF0YSkgcmV0dXJuO1xuXG4gICAgaWYgKG9iamVjdCkge1xuICAgICAgbWF0dGVydGFnRGF0YS5zZXRPYmplY3Qob2JqZWN0LCBwb2lUeXBlKTtcbiAgICB9XG5cbiAgICBhd2FpdCBzZXRUYWdJY29uQW5kT3BhY2l0eShtYXR0ZXJ0YWdJRCwgbWF0dGVydGFnRGF0YSk7XG4gICAgYXdhaXQgaW5qZWN0SHRtbEluVGFnKHBvaVR5cGUsIG9iamVjdCwgbWF0dGVydGFnSUQpO1xuICB9XG5cbiAgLyoqIFJlZ2lzdGVycyBhIGN1c3RvbSB0ZXh0dXJlIGFuZCBhcHBsaWVzIGl0IHRvIGEgdGFnLCBvcHRpb25hbGx5IGFkanVzdGluZyBvcGFjaXR5LiAqL1xuICBhc3luYyBhZGROZXdJY29uQW5kU2V0Rm9yVGFnKFxuICAgIHNkazogYW55LFxuICAgIG1hdHRlcnRhZ0lEOiBzdHJpbmcsXG4gICAgaWNvblBhdGg6IHN0cmluZyxcbiAgICBhcHBseU9wYWNpdHk6IGJvb2xlYW4sXG4gICAgb3BhY2l0eTogbnVtYmVyXG4gICkge1xuICAgIGlmICghc2RrKSByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGljb25OYW1lID0gYGN1c3RvbS1pY29uLSR7bWF0dGVydGFnSUR9YDtcbiAgICAgIGNvbnN0IHRhZ01vZHVsZSA9IHRoaXMuZ2V0VGFnTW9kdWxlKHNkaywgbWF0dGVydGFnSUQpO1xuICAgICAgYXdhaXQgc2RrLkFzc2V0LnJlZ2lzdGVyVGV4dHVyZShpY29uTmFtZSwgaWNvblBhdGgpO1xuICAgICAgYXdhaXQgdGFnTW9kdWxlLmVkaXRJY29uKG1hdHRlcnRhZ0lELCBpY29uTmFtZSk7XG4gICAgICB0aGlzLnRhZ3NDdXJyZW50SWNvbi5zZXQobWF0dGVydGFnSUQsIGljb25OYW1lKTtcblxuICAgICAgaWYgKGFwcGx5T3BhY2l0eSkge1xuICAgICAgICBhd2FpdCB0YWdNb2R1bGUuZWRpdE9wYWNpdHkobWF0dGVydGFnSUQsIG9wYWNpdHkpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIGNvbnNvbGUud2FybignRXJyb3Igc2V0dGluZyBjdXN0b20gaWNvbiBvciBvcGFjaXR5JywgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBGaW5kcyB0aGUgdGFnIElEIGFuZCBzd2VlcCBJRCBhc3NvY2lhdGVkIHdpdGggYSBzcGVjaWZpYyBlbGVtZW50IElELiAqL1xuICBnZXRUYWdGcm9tRWxlbWVudElkKGVsZW1lbnRJRDogc3RyaW5nLCBzd2VlcHM6IHN0cmluZ1tdIHwgbnVsbCk6IHsgdGFnOiBzdHJpbmcgfCBudWxsOyBzd2VlcDogc3RyaW5nIHwgbnVsbCB9IHtcbiAgICBsZXQgdGFnSUQgPSBudWxsO1xuICAgIGxldCBzd2VlcElEID0gbnVsbDtcbiAgICBmb3IgKGxldCBbbWF0dGVydGFnSUQsIG1hdHRlcnRhZ0RhdGFdIG9mIHRoaXMuZGljdGlvbm5hcnlUYWdzKSB7XG4gICAgICBpZiAobWF0dGVydGFnRGF0YS5lbGVtZW50SUQgPT09IGVsZW1lbnRJRCkge1xuICAgICAgICB0YWdJRCA9IG1hdHRlcnRhZ0lEO1xuICAgICAgICBjb25zdCBzd2VlcCA9IG1hdHRlcnRhZ0RhdGEuZ2V0U3dlZXBJRCgpO1xuICAgICAgICBpZiAoc3dlZXAgJiYgc3dlZXBzKSB7XG4gICAgICAgICAgLy8gc3dlZXAgaXMgYSB1dWlkOyBzd2VlcHMgYXJyYXkgY29udGFpbnMgc2lkcyDigJMgY2hlY2sgYm90aCBmb3JtYXRzXG4gICAgICAgICAgY29uc3QgcmVzb2x2ZWRTaWQgPSB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLnJlc29sdmVTd2VlcFNpZChzd2VlcCk7XG4gICAgICAgICAgaWYgKHN3ZWVwcy5pbmNsdWRlcyhzd2VlcCkgfHwgc3dlZXBzLmluY2x1ZGVzKHJlc29sdmVkU2lkKSkge1xuICAgICAgICAgICAgc3dlZXBJRCA9IHN3ZWVwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyB0YWc6IHRhZ0lELCBzd2VlcDogc3dlZXBJRCB9O1xuICB9XG5cbiAgLyoqIFJldHJpZXZlcyB0aGUgZmxvb3IgaWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggYSB0YWcgYmFzZWQgb24gaXRzIHN3ZWVwIGRhdGEuXG4gICAqICBIYW5kbGVzIGJvdGggdGhlIG9iamVjdCBmb3JtICh7IGZsb29ySW5mbzogeyBpZCwgc2VxdWVuY2UgfSwgZmxvb3I6IHsgaWQgfSB9KVxuICAgKiAgYW5kIHRoZSBwcmltaXRpdmUgZm9ybSAoZmxvb3I6IG51bWJlcikgdXNlZCBieSBNYXR0ZXJwb3J0IFNESyB2My5cbiAgICovXG4gIGdldEZsb29ySWRGb3JUYWcobWF0dGVydGFnRGF0YTogTWF0dGVydGFnRGF0YSwgc3dlZXBDb2xsZWN0aW9uOiBhbnkpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBzd2VlcElkID0gbWF0dGVydGFnRGF0YS5nZXRTd2VlcElEKCk7XG4gICAgaWYgKCFzd2VlcElkIHx8ICFzd2VlcENvbGxlY3Rpb24pIHJldHVybiBudWxsO1xuXG4gICAgY29uc3Qgc3dlZXBEYXRhID0gc3dlZXBDb2xsZWN0aW9uW3N3ZWVwSWRdO1xuICAgIGlmICghc3dlZXBEYXRhKSByZXR1cm4gbnVsbDtcblxuICAgIC8vIFNESyB2Mzogc3dlZXAuZmxvb3IgaXMgYSBwcmltaXRpdmUgbnVtYmVyICh0aGUgc2VxdWVuY2UgaW5kZXgpXG4gICAgaWYgKHR5cGVvZiBzd2VlcERhdGEuZmxvb3IgPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gc3dlZXBEYXRhLmZsb29yLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgLy8gT2xkZXIgLyBleHRlbmRlZCBmb3JtYXRzXG4gICAgcmV0dXJuIHN3ZWVwRGF0YT8uZmxvb3JJbmZvPy5pZFxuICAgICAgPz8gc3dlZXBEYXRhPy5mbG9vckluZm8/LnNlcXVlbmNlPy50b1N0cmluZygpXG4gICAgICA/PyBzd2VlcERhdGE/LmZsb29ySWRcbiAgICAgID8/IHN3ZWVwRGF0YT8uZmxvb3I/LmlkXG4gICAgICA/PyBzd2VlcERhdGE/LmZsb29yPy5zZXF1ZW5jZT8udG9TdHJpbmcoKVxuICAgICAgPz8gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmplY3RzIGN1c3RvbSBIVE1MIG9yIGZhbGxiYWNrIGJpbGxib2FyZCBtZWRpYSBpbnRvIGEgTWF0dGVydGFnIHNhbmRib3guXG4gICAqIEF0dGFjaGVzIGV2ZW50IGxpc3RlbmVycyBmb3IgaW50ZXJhY3RpdmUgZWxlbWVudHMgd2l0aGluIHRoZSB0YWcuXG4gICAqL1xuICBhc3luYyBpbmplY3RIdG1sSW5UYWcoc2RrOiBhbnksIHRhZ1R5cGU6IFBvaVR5cGUsIG9iamVjdDogRGJPYmplY3RUeXBlLCB0YWdJRDogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLnRhZ1NlcnZpY2UpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tNYXR0ZXJwb3J0VGFnU2VydmljZV0gdGFnU2VydmljZSBpcyBub3QgaW5pdGlhbGl6ZWQuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBsZXQgaHRtbCA9IGF3YWl0IHRoaXMudGFnU2VydmljZS5nZXRIdG1sVG9JbmplY3QodGFnVHlwZSwgb2JqZWN0KTtcblxuICAgICAgaWYgKGh0bWwgJiYgaHRtbC50cmltKCkubGVuZ3RoID4gMCAmJiBzZGspIHtcbiAgICAgICAgY29uc3Qgc2NyaXB0VGFnID0gdGhpcy50YWdTZXJ2aWNlLmdldFNjcmlwdEZvclRhZyhvYmplY3QsIHRhZ1R5cGUpO1xuICAgICAgICBodG1sICs9IGAke3NjcmlwdFRhZ31gO1xuXG4gICAgICAgIGNvbnN0IHRhZ01vZHVsZSA9IHRoaXMuZ2V0VGFnTW9kdWxlKHNkaywgdGFnSUQpO1xuICAgICAgICBjb25zdCBbc2FuZGJveElkLCBtZXNzZW5nZXJdID0gYXdhaXQgc2RrLlRhZy5yZWdpc3RlclNhbmRib3goaHRtbCk7XG5cbiAgICAgICAgY29uc3QgYXR0YWNobWVudElEID0gdGhpcy50YWdzQXR0YWNobWVudHNbdGFnSURdO1xuICAgICAgICBpZiAoYXR0YWNobWVudElEKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHRhZ01vZHVsZS5kZXRhY2godGFnSUQsIGF0dGFjaG1lbnRJRCk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkgeyB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRhZ3NBdHRhY2htZW50c1t0YWdJRF0gPSBzYW5kYm94SWQ7XG4gICAgICAgIGF3YWl0IHRhZ01vZHVsZS5hdHRhY2godGFnSUQsIHNhbmRib3hJZCk7XG5cbiAgICAgICAgLy8gQXR0YWNoIHRoZSBcIlZpZXcgaW5mb3JtYXRpb25zXCIgaGFuZGxlciBpbiB0b29sdGlwXG4gICAgICAgIG1lc3Nlbmdlci5vbihUYWdBY3Rpb24uREVUQUlMX0NMSUNLLCB0aGlzLnRhZ1NlcnZpY2Uub25BY3Rpb25EZXRhaWxDbGljay5iaW5kKHRoaXMudGFnU2VydmljZSkpO1xuICAgICAgICBtZXNzZW5nZXIub24oVGFnQWN0aW9uLlRJQ0tFVF9DTElDSywgdGhpcy50YWdTZXJ2aWNlLm9uQWN0aW9uRGV0YWlsQ2xpY2suYmluZCh0aGlzLnRhZ1NlcnZpY2UpKTtcbiAgICAgICAgbWVzc2VuZ2VyLm9uKFRhZ0FjdGlvbi5BVURJT19DTElDSywgKGF1ZGlvQ29tbWVudElEOiBzdHJpbmcpID0+IHRoaXMudGFnU2VydmljZS5vbkFjdGlvbkF1ZGlvQ2xpY2soYXVkaW9Db21tZW50SUQpKTtcbiAgICAgICAgbWVzc2VuZ2VyLm9uKFRhZ0FjdGlvbi5WSURFT19DTElDSywgKHZpZGVvVXJsOiBzdHJpbmcpID0+IHRoaXMudGFnU2VydmljZS5vbkFjdGlvblZpZGVvQ2xpY2sodmlkZW9VcmwpKTtcbiAgICAgICAgbWVzc2VuZ2VyLm9uKFRhZ0FjdGlvbi5JTUFHRV9DTElDSywgKGltYWdlQ29tbWVudElEOiBzdHJpbmcpID0+IHRoaXMudGFnU2VydmljZS5vbkFjdGlvbkltYWdlQ2xpY2soaW1hZ2VDb21tZW50SUQpKTtcbiAgICAgICAgbWVzc2VuZ2VyLm9uKFRhZ0FjdGlvbi5ET0NfQ0xJQ0ssIChkb2NVcmw6IHN0cmluZykgPT4gdGhpcy50YWdTZXJ2aWNlLm9uQWN0aW9uRG9jQ2xpY2soZG9jVXJsKSk7XG4gICAgICAgIG1lc3Nlbmdlci5vbihUYWdBY3Rpb24uWU9VVFVCRV9DTElDSywgKHlvdXR1YmVVcmw6IHN0cmluZykgPT4gdGhpcy50YWdTZXJ2aWNlLm9uQWN0aW9uWW91dHViZUNsaWNrKHlvdXR1YmVVcmwpKTtcbiAgICAgIH0gZWxzZSBpZiAoc2RrKSB7XG4gICAgICAgIGNvbnN0IHsgY29tbWVudCwgdGFnRGVzY3JpcHRpb24gfSA9IHRoaXMudGFnU2VydmljZS5nZXRCaWxsYm9hcmRNZWRpYVRvRW1iZWQob2JqZWN0KTtcblxuICAgICAgICBpZiAoY29tbWVudCkge1xuICAgICAgICAgIGNvbnN0IHRhZ01vZHVsZSA9IHRoaXMuZ2V0VGFnTW9kdWxlKHNkaywgdGFnSUQpO1xuICAgICAgICAgIC8vIDEpIFJlZ2lzdGVyIHRoZSBtZWRpYSBhdHRhY2htZW50IGJ5IHBhc3NpbmcgdGhlIFVSTCBzdHJpbmcocykuXG4gICAgICAgICAgLy8gICAgcmVnaXN0ZXJBdHRhY2htZW50IHJldHVybnMgYW4gYXJyYXkgb2YgYXR0YWNobWVudCBJRHMuXG4gICAgICAgICAgY29uc3QgW2F0dGFjaG1lbnRJRF0gPSBhd2FpdCBzZGsuVGFnLnJlZ2lzdGVyQXR0YWNobWVudChjb21tZW50LmV4dGVybmFsTGluayk7XG5cbiAgICAgICAgICAvLyAyKSBBdHRhY2ggdGhlIHJlZ2lzdGVyZWQgbWVkaWEgdG8gdGhlIHRhZy5cbiAgICAgICAgICBhd2FpdCB0YWdNb2R1bGUuYXR0YWNoKHRhZ0lELCBhdHRhY2htZW50SUQpO1xuXG4gICAgICAgICAgLy8gMykgRGV0ZXJtaW5lIG1lZGlhIHR5cGUgZm9yIHRoZSBiaWxsYm9hcmQgKFBIT1RPIG9yIFZJREVPKS5cbiAgICAgICAgICAvLyAgICBVc2UgYSBzaW1wbGUgaGV1cmlzdGljOiBZb3VUdWJlL1ZpbWVvIC0+IFZJREVPLCBvdGhlcndpc2UgUEhPVE8uXG4gICAgICAgICAgLy8gICAgVGhlIFNESyBleHBvc2VzIE1lZGlhVHlwZSBvbiB0aGUgVGFnIG5hbWVzcGFjZS5cbiAgICAgICAgICBjb25zdCBpc1ZpZGVvID0gL3lvdXR1YmVcXC5jb218eW91dHVcXC5iZXx2aW1lb1xcLmNvbS9pLnRlc3QoY29tbWVudC5leHRlcm5hbExpbmspO1xuICAgICAgICAgIGNvbnN0IG1lZGlhVHlwZSA9IGlzVmlkZW8gPyBzZGsuTWF0dGVydGFnLk1lZGlhVHlwZS5WSURFTyA6IHNkay5NYXR0ZXJ0YWcuTWVkaWFUeXBlLlBIT1RPO1xuXG4gICAgICAgICAgLy8gNCkgVXBkYXRlIHRoZSBiaWxsYm9hcmQgdGV4dCBhbmQgbWVkaWEgdXNpbmcgZWRpdEJpbGxib2FyZC5cbiAgICAgICAgICAvLyAgICBlZGl0QmlsbGJvYXJkIGFjY2VwdHMgUGFydGlhbDxUYWcuRWRpdGFibGVQcm9wZXJ0aWVzPiBzdWNoIGFzIGxhYmVsLCBkZXNjcmlwdGlvbiwgbWVkaWEuXG4gICAgICAgICAgYXdhaXQgdGFnTW9kdWxlLmVkaXRCaWxsYm9hcmQodGFnSUQsIHtcbiAgICAgICAgICAgIGxhYmVsOiBvYmplY3QudGl0bGUgfHwgJ01lZGlhJyxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB0YWdEZXNjcmlwdGlvbiB8fCAnJyxcbiAgICAgICAgICAgIG1lZGlhOiB7XG4gICAgICAgICAgICAgIHR5cGU6IG1lZGlhVHlwZSxcbiAgICAgICAgICAgICAgc3JjOiBjb21tZW50LmV4dGVybmFsTGluayxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyA1KSBLZWVwIGEgbG9jYWwgcmVmZXJlbmNlXG4gICAgICAgICAgdGhpcy50YWdzQXR0YWNobWVudHNbdGFnSURdID0ge1xuICAgICAgICAgICAgYXR0YWNobWVudElELFxuICAgICAgICAgICAgdGl0bGU6IG9iamVjdC50aXRsZSB8fCAnTWVkaWEnLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHRhZ0Rlc2NyaXB0aW9uIHx8ICcnLFxuICAgICAgICAgICAgbWVkaWFTcmM6IGNvbW1lbnQuZXh0ZXJuYWxMaW5rLFxuICAgICAgICAgICAgbWVkaWFUeXBlLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignW01hdHRlcnBvcnRUYWdTZXJ2aWNlXSBFcnJvciBpbiBpbmplY3RIdG1sSW5UYWc6JywgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBDbGVhcnMgYWxsIGxvY2FsIHRhZyBkYXRhIGFuZCByZXNldHMgdGhlIGFkZGl0aW9uIHF1ZXVlLiAqL1xuICBjbGVhcigpIHtcbiAgICB0aGlzLmRpY3Rpb25uYXJ5VGFncy5jbGVhcigpO1xuICAgIHRoaXMudGFnc0N1cnJlbnRPcGFjaXR5LmNsZWFyKCk7XG4gICAgdGhpcy50YWdzQ3VycmVudEVuYWJsZWQuY2xlYXIoKTtcbiAgICB0aGlzLnRhZ3NDdXJyZW50SWNvbi5jbGVhcigpO1xuICAgIHRoaXMuc3RvcE9ic2VydmluZ1Nka1RhZ3MoKTtcbiAgICB0aGlzLnRhZ0FkZFF1ZXVlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgdGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvdyA9IG51bGw7XG4gICAgdGhpcy5tYXR0ZXJ0YWdJRHMgPSBbXTtcbiAgICAvLyBBIG5ldyBzcGFjZSBtZWFucyBhIG5ldyBTREsgc2Vzc2lvbiwgaGVuY2UgYSBuZXcgc2hhcmVkIGxheWVyIHRvIGNyZWF0ZS5cbiAgICB0aGlzLnNoYXJlZFRhZ0xheWVyID0gbnVsbDtcbiAgICB0aGlzLnNoYXJlZFRhZ0xheWVyUHJvbWlzZSA9IG51bGw7XG4gIH1cbn1cbiJdfQ==
683
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0dGVycG9ydC10YWcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1jb3JlL3NyYy9saWIvc2VydmljZXMvbWF0dGVycG9ydC10YWcuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQWtELFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUV6RyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7OztBQU0xQyxNQUFNLE9BQU8sb0JBQW9CO0lBdUNyQjtJQXRDVixvRUFBb0U7SUFDNUQsTUFBTSxDQUFVLHFCQUFxQixHQUFHLHlCQUF5QixDQUFDO0lBRW5FLGVBQWUsR0FBK0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUN4RCxXQUFXLEdBQWlCLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM5QyxpQkFBaUIsR0FBa0IsSUFBSSxDQUFDO0lBQ3hDLFNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBVSxDQUFDO0lBQ2xDLFlBQVksR0FBa0IsRUFBRSxDQUFDO0lBQ2pDLGVBQWUsR0FBVyxFQUFFLENBQUM7SUFDN0IsY0FBYyxHQUFZLEtBQUssQ0FBQztJQUNoQyxVQUFVLEdBQTBCLElBQUksQ0FBQztJQUN4QyxrQkFBa0IsR0FBd0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNwRCxrQkFBa0IsR0FBeUIsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUM3RCwrRUFBK0U7SUFDdkUsZUFBZSxHQUF3QixJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ3pELHlHQUF5RztJQUNq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b0JBQW9CLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1FBQzlCLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLDJFQUEyRTtRQUMzRSxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUMzQixJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO0lBQ3BDLENBQUM7d0dBdnRCVSxvQkFBb0I7NEdBQXBCLG9CQUFvQixjQUZuQixNQUFNOzs0RkFFUCxvQkFBb0I7a0JBSGhDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNEZXZNb2RlLCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgTWF0dGVydGFnRGF0YSB9IGZyb20gJy4uL21hdHRlcnRhZ0RhdGEnO1xyXG5pbXBvcnQgeyBQb2lUeXBlLCBEYk9iamVjdFR5cGUsIFBPSSwgVmlld2VySW50ZXJhY3Rpb25zLCBUYWdBY3Rpb24sIENhbWVyYU1vZGUgfSBmcm9tICcuLi90eXBlcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWF0dGVycG9ydE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9tYXR0ZXJwb3J0LW5hdmlnYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IHdhaXQgfSBmcm9tICcuLi9oZWxwZXJzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYXNlVGFnU2VydmljZSB9IGZyb20gJy4vdGFnLnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIE1hdHRlcnBvcnRUYWdTZXJ2aWNlIHtcclxuICAvKiogTmFtZSBvZiB0aGUgY29tbW9uIGxheWVyIGV2ZXJ5IFNtYXJ0ZXJwbGFuIHRhZyBpcyBjcmVhdGVkIGluLiAqL1xyXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFNIQVJFRF9UQUdfTEFZRVJfTkFNRSA9ICdzbWFydGVycGxhbi1zaGFyZWQtdGFncyc7XHJcblxyXG4gIHB1YmxpYyBkaWN0aW9ubmFyeVRhZ3M6IE1hcDxzdHJpbmcsIE1hdHRlcnRhZ0RhdGE+ID0gbmV3IE1hcCgpO1xyXG4gIHB1YmxpYyB0YWdBZGRRdWV1ZTogUHJvbWlzZTxhbnk+ID0gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgcHVibGljIG1hdHRlcnRhZ1RvRm9sbG93OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICBwdWJsaWMgb25Hb1RvVGFnID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xyXG4gIHB1YmxpYyBtYXR0ZXJ0YWdJRHM6IEFycmF5PHN0cmluZz4gPSBbXTtcclxuICBwdWJsaWMgdGFnc0F0dGFjaG1lbnRzOiBPYmplY3QgPSB7fTtcclxuICBwdWJsaWMgdGFnTWVzc2VuZ2VyT246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgdGFnU2VydmljZTogQmFzZVRhZ1NlcnZpY2UgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIHRhZ3NDdXJyZW50T3BhY2l0eTogTWFwPHN0cmluZywgbnVtYmVyPiA9IG5ldyBNYXAoKTtcclxuICBwcml2YXRlIHRhZ3NDdXJyZW50RW5hYmxlZDogTWFwPHN0cmluZywgYm9vbGVhbj4gPSBuZXcgTWFwKCk7XHJcbiAgLyoqIHRhZ0lkIC0+IGljb24gbmFtZSBsYXN0IGFwcGxpZWQsIHNvIGFuIHVuY2hhbmdlZCBpY29uIGlzIG5vdCByZS1hcHBsaWVkLiAqL1xyXG4gIHByaXZhdGUgdGFnc0N1cnJlbnRJY29uOiBNYXA8c3RyaW5nLCBzdHJpbmc+ID0gbmV3IE1hcCgpO1xyXG4gIC8qKiBJZHMgb2YgdGhlIGdsb2JhbCBTREsgVGFnIGNvbGxlY3Rpb24sIGFuZCB0aGUgdGFncyB3YWl0aW5nIHRvIGFwcGVhciBpbiBpdCwgc2VlIHdhaXRGb3JUYWdJblNkaygpLiAqL1xyXG4gIHByaXZhdGUgc2RrVGFnSWRzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcclxuICBwcml2YXRlIHNka1RhZ1dhaXRlcnM6IE1hcDxzdHJpbmcsIEFycmF5PCgpID0+IHZvaWQ+PiA9IG5ldyBNYXAoKTtcclxuICBwcml2YXRlIHNka1RhZ1N1YnNjcmlwdGlvbjogYW55ID0gbnVsbDtcclxuICBwcml2YXRlIHNka1RhZ1N1YnNjcmlwdGlvblNkazogYW55ID0gbnVsbDtcclxuICAvKipcclxuICAgKiBTaW5nbGUgbGF5ZXIgaG9sZGluZyBldmVyeSBTbWFydGVycGxhbiB0YWcsIGFkZGVkIHRvIGV2ZXJ5IHZpZXcgb2YgdGhlIHNwYWNlIHNvIGFcclxuICAgKiB0YWcgc3RheXMgaW4gcGxhY2Ug4oCUIHNhbWUgc2lkLCBzYW1lIGNvbnRlbnQg4oCUIHdoZW4gdGhlIHVzZXIgc3dpdGNoZXMgYmV0d2VlbiB0aGVcclxuICAgKiBmdXJuaXNoZWQgYW5kIHRoZSBEZWZ1cm5pc2hlZCB2aWV3LiBUYWdzIGFkZGVkIHRvIHRoZSBnbG9iYWwgc2RrLlRhZyAob3IgdG8gYVxyXG4gICAqIHZpZXcncyBvd24gbGF5ZXIpIGJlbG9uZyB0byB0aGF0IHZpZXcgb25seSwgd2hpY2ggaXMgd2hhdCBtYWRlIHRoZW0gcG9wIGluIGFuZCBvdXRcclxuICAgKiBvbiBldmVyeSB2aWV3IGNoYW5nZS5cclxuICAgKlxyXG4gICAqIERlbGliZXJhdGVseSBOT1QgY3JlYXRlZCB3aXRoIGB7IGNvbW1vbjogdHJ1ZSB9YDogaW4gU0RLIDI2LjcuNSBhIGNvbW1vbiBsYXllciBpc1xyXG4gICAqIHB1c2hlZCBpbnRvIGBnZXRPcmRlcmVkTW9kZWxWaWV3cygpYCBhdCBjcmVhdGlvbiB0aW1lLCBhbmQgdGhhdCBjYWxsIGRlZmF1bHRzIHRvXHJcbiAgICogYGluY2x1ZGVEZWZ1cm5pc2g6IGZhbHNlYCwgc28gdGhlIERlZnVybmlzaGVkIHZpZXcgbmV2ZXIgcmVjZWl2ZXMgaXQg4oCUIHdoaWxlXHJcbiAgICogYFZpZXcuYWRkTGF5ZXIoKWAgcmVmdXNlcyB0byByZXBhaXIgaXQgKFwiTGF5ZXIgaXMgY29tbW9uLiBObyBuZWVkIHRvIGFkZC5cIikuIEFcclxuICAgKiBwbGFpbiBsYXllciB3ZSBhdHRhY2ggdG8gZWFjaCB2aWV3IG91cnNlbHZlcyByZWFjaGVzIGV2ZXJ5IHZpZXcsIERlZnVybmlzaGVkXHJcbiAgICogaW5jbHVkZWQuIFNlZSBhdHRhY2hTaGFyZWRUYWdMYXllclRvVmlld3MoKS5cclxuICAgKi9cclxuICBwcml2YXRlIHNoYXJlZFRhZ0xheWVyOiBhbnkgPSBudWxsO1xyXG4gIHByaXZhdGUgc2hhcmVkVGFnTGF5ZXJQcm9taXNlOiBQcm9taXNlPGFueT4gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIG5hdmlnYXRpb25TZXJ2aWNlOiBNYXR0ZXJwb3J0TmF2aWdhdGlvblNlcnZpY2VcclxuICApIHsgfVxyXG5cclxuICBzZXRUYWdTZXJ2aWNlKHNlcnZpY2U6IEJhc2VUYWdTZXJ2aWNlKTogdm9pZCB7XHJcbiAgICB0aGlzLnRhZ1NlcnZpY2UgPSBzZXJ2aWNlO1xyXG4gIH1cclxuXHJcbiAgLyoqIE9wZW5zIGEgc3BlY2lmaWMgdGFnIGluIHRoZSBNYXR0ZXJwb3J0IHZpZXdlciBieSBpdHMgSUQuICovXHJcbiAgYXN5bmMgZ29Ub1RhZyhzZGs6IGFueSwgc2lkOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgaWYgKCFzZGspIHJldHVybjtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMub25Hb1RvVGFnLm5leHQoc2lkKTtcclxuICAgICAgLy8gYG9wZW5gIG9ubHkgZXhpc3RzIG9uIHRoZSBnbG9iYWwgVGFnIG1vZHVsZSwgbmV2ZXIgb24gYSBsYXllci1zY29wZWQgb25lLlxyXG4gICAgICBhd2FpdCBzZGsuVGFnLm9wZW4oc2lkKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgaWYgKGlzRGV2TW9kZSgpKSBjb25zb2xlLndhcm4oJ0Nhbm5vdCBvcGVuIHRhZycsIHNpZCwgZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBTREsgVGFnIG1vZHVsZSB0byB1c2UgZm9yIGFuIG9wZXJhdGlvbiBhZGRyZXNzaW5nIGFuIGV4aXN0aW5nIHRhZyBieSBJRFxyXG4gICAqIChpY29uLCBvcGFjaXR5LCBwb3NpdGlvbiwgYXR0YWNobWVudHMsIHJlbW92YWwuLi4pOiBhbHdheXMgdGhlIGdsb2JhbCBzZGsuVGFnLlxyXG4gICAqXHJcbiAgICogQSBsYXllci1zY29wZWQgVGFnIG1vZHVsZSBvbmx5IGV4cG9zZXMgdGhlICpyZXBsYXlhYmxlKiBtdXRhdGlvbnMsIG1lYW50IHRvIGJ1aWxkXHJcbiAgICogdGhlIGxheWVyJ3Mgb3duIGNvbnRlbnQ7IGFwcGx5aW5nIHRoZW0gdG8gYW4gYWxyZWFkeS1jcmVhdGVkIHRhZyBzaWxlbnRseSBkb2VzXHJcbiAgICogbm90aGluZyDigJQgd2hpY2ggaXMgd2hhdCBsZWZ0IGV2ZXJ5IHBpbiB3aGl0ZSBpbnN0ZWFkIG9mIGNhcnJ5aW5nIGl0cyBpY29uLiBPbmx5XHJcbiAgICogYGFkZGAgaGFzIHRvIGdvIHRocm91Z2ggdGhlIGxheWVyLCBzZWUgZ2V0VGFnQ3JlYXRpb25Nb2R1bGUoKS4gVGhlIGdsb2JhbCBtb2R1bGVcclxuICAgKiBvbmx5IGtub3dzIGEgbGF5ZXItY3JlYXRlZCBwaW4gb25jZSBpdCBpcyByZW5kZXJlZDogc2VlIHdhaXRGb3JUYWdJblNkaygpLlxyXG4gICAqL1xyXG4gIGdldFRhZ01vZHVsZShzZGs6IGFueSwgdGFnSWQ6IHN0cmluZyk6IGFueSB7XHJcbiAgICByZXR1cm4gc2RrPy5UYWc7XHJcbiAgfVxyXG5cclxuICAvKiogSWNvbiBuYW1lIGxhc3QgYXBwbGllZCB0byBhIHRhZywgaWYgYW55LiAqL1xyXG4gIGdldENhY2hlZFRhZ0ljb24odGFnSWQ6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy50YWdzQ3VycmVudEljb24uZ2V0KHRhZ0lkKTtcclxuICB9XHJcblxyXG4gIC8qKiBBcHBsaWVzIGFuIGljb24gdG8gYSB0YWcgdGhyb3VnaCBpdHMgb3duIG1vZHVsZSBhbmQgcmVtZW1iZXJzIGl0IG9uIHN1Y2Nlc3MuICovXHJcbiAgYXN5bmMgZWRpdFRhZ0ljb24oc2RrOiBhbnksIHRhZ0lkOiBzdHJpbmcsIGljb25OYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGF3YWl0IHRoaXMuZ2V0VGFnTW9kdWxlKHNkaywgdGFnSWQpLmVkaXRJY29uKHRhZ0lkLCBpY29uTmFtZSk7XHJcbiAgICB0aGlzLnRhZ3NDdXJyZW50SWNvbi5zZXQodGFnSWQsIGljb25OYW1lKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc29sdmVzIG9uY2UgdGhlIGdsb2JhbCBTREsgVGFnIGNvbGxlY3Rpb24g4oCUIHRoZSBvbmUgZWRpdHMgZ28gdGhyb3VnaCDigJQgY29udGFpbnMgdGhlXHJcbiAgICogdGFnLCBzbyBlZGl0cyBkbyBub3QgaGl0IGEgcGluIHRoYXQgaXMgbm90IHJlbmRlcmVkIHlldCAoXCJzZXRQaW5SZW5kZXJPdmVycmlkZXMgb24gYSBwaW5cclxuICAgKiB0aGF0IGRvZXNuJ3QgZXhpc3RcIikuIEdpdmVzIHVwIGFmdGVyIGB0aW1lb3V0TXNgIGFuZCByZXNvbHZlcyBhbnl3YXk7IGZhbGxzIGJhY2sgdG8gYVxyXG4gICAqIHNob3J0IHdhaXQgd2hlbiB0aGUgY29sbGVjdGlvbiBjYW5ub3QgYmUgb2JzZXJ2ZWQuIE9uZSBzdWJzY3JpcHRpb24gaXMgc2hhcmVkIGJ5IGV2ZXJ5XHJcbiAgICogd2FpdGluZyB0YWc6IGEgc3BhY2UgbG9hZHMgaHVuZHJlZHMgb2YgdGhlbS5cclxuICAgKi9cclxuICBwcml2YXRlIHdhaXRGb3JUYWdJblNkayhzZGs6IGFueSwgdGFnSWQ6IHN0cmluZywgdGltZW91dE1zID0gMTUwMCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKCF0YWdJZCB8fCAhdGhpcy5vYnNlcnZlU2RrVGFncyhzZGspKSByZXR1cm4gd2FpdCgxMDApO1xyXG4gICAgaWYgKHRoaXMuc2RrVGFnSWRzLmhhcyh0YWdJZCkpIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuXHJcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcclxuICAgICAgY29uc3Qgd2FpdGVycyA9IHRoaXMuc2RrVGFnV2FpdGVycy5nZXQodGFnSWQpIHx8IFtdO1xyXG4gICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHJlbWFpbmluZyA9ICh0aGlzLnNka1RhZ1dhaXRlcnMuZ2V0KHRhZ0lkKSB8fCBbXSkuZmlsdGVyKHdhaXRlciA9PiB3YWl0ZXIgIT09IGRvbmUpO1xyXG4gICAgICAgIGlmIChyZW1haW5pbmcubGVuZ3RoKSB0aGlzLnNka1RhZ1dhaXRlcnMuc2V0KHRhZ0lkLCByZW1haW5pbmcpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5zZGtUYWdXYWl0ZXJzLmRlbGV0ZSh0YWdJZCk7XHJcbiAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICB9LCB0aW1lb3V0TXMpO1xyXG4gICAgICBjb25zdCBkb25lID0gKCkgPT4geyBjbGVhclRpbWVvdXQodGltZXIpOyByZXNvbHZlKCk7IH07XHJcbiAgICAgIHdhaXRlcnMucHVzaChkb25lKTtcclxuICAgICAgdGhpcy5zZGtUYWdXYWl0ZXJzLnNldCh0YWdJZCwgd2FpdGVycyk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKiBLZWVwcyBzZGtUYWdJZHMgaW4gc3luYyB3aXRoIHRoZSBnbG9iYWwgU0RLIFRhZyBjb2xsZWN0aW9uOyBmYWxzZSB3aGVuIGl0IGNhbm5vdCBiZSBvYnNlcnZlZC4gKi9cclxuICBwcml2YXRlIG9ic2VydmVTZGtUYWdzKHNkazogYW55KTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5zZGtUYWdTdWJzY3JpcHRpb24gJiYgdGhpcy5zZGtUYWdTdWJzY3JpcHRpb25TZGsgPT09IHNkaykgcmV0dXJuIHRydWU7XHJcbiAgICBjb25zdCBkYXRhID0gc2RrPy5UYWc/LmRhdGE7XHJcbiAgICBpZiAodHlwZW9mIGRhdGE/LnN1YnNjcmliZSAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIHRoaXMuc3RvcE9ic2VydmluZ1Nka1RhZ3MoKTtcclxuICAgIGNvbnN0IG1hcmtQcmVzZW50ID0gKGlkOiBzdHJpbmcpID0+IHtcclxuICAgICAgdGhpcy5zZGtUYWdJZHMuYWRkKGlkKTtcclxuICAgICAgY29uc3Qgd2FpdGVycyA9IHRoaXMuc2RrVGFnV2FpdGVycy5nZXQoaWQpO1xyXG4gICAgICBpZiAod2FpdGVycykge1xyXG4gICAgICAgIHRoaXMuc2RrVGFnV2FpdGVycy5kZWxldGUoaWQpO1xyXG4gICAgICAgIHdhaXRlcnMuZm9yRWFjaCh3YWl0ZXIgPT4gd2FpdGVyKCkpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5zZGtUYWdTdWJzY3JpcHRpb25TZGsgPSBzZGs7XHJcbiAgICAgIHRoaXMuc2RrVGFnU3Vic2NyaXB0aW9uID0gZGF0YS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG9uQWRkZWQ6IChpZDogc3RyaW5nKSA9PiBtYXJrUHJlc2VudChpZCksXHJcbiAgICAgICAgb25SZW1vdmVkOiAoaWQ6IHN0cmluZykgPT4gdGhpcy5zZGtUYWdJZHMuZGVsZXRlKGlkKSxcclxuICAgICAgICBvbkNvbGxlY3Rpb25VcGRhdGVkOiAoY29sbGVjdGlvbjogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBpZHM6IHN0cmluZ1tdID0gdHlwZW9mIGNvbGxlY3Rpb24/LmtleXMgPT09ICdmdW5jdGlvbidcclxuICAgICAgICAgICAgPyBBcnJheS5mcm9tKGNvbGxlY3Rpb24ua2V5cygpKSA6IE9iamVjdC5rZXlzKGNvbGxlY3Rpb24gfHwge30pO1xyXG4gICAgICAgICAgdGhpcy5zZGtUYWdJZHMgPSBuZXcgU2V0KGlkcyk7XHJcbiAgICAgICAgICBpZHMuZm9yRWFjaChpZCA9PiB0aGlzLnNka1RhZ1dhaXRlcnMuaGFzKGlkKSAmJiBtYXJrUHJlc2VudChpZCkpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICB0aGlzLnNka1RhZ1N1YnNjcmlwdGlvblNkayA9IG51bGw7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RvcE9ic2VydmluZ1Nka1RhZ3MoKTogdm9pZCB7XHJcbiAgICB0cnkgeyB0aGlzLnNka1RhZ1N1YnNjcmlwdGlvbj8uY2FuY2VsPy4oKTsgfSBjYXRjaCB7IH1cclxuICAgIHRoaXMuc2RrVGFnU3Vic2NyaXB0aW9uID0gbnVsbDtcclxuICAgIHRoaXMuc2RrVGFnU3Vic2NyaXB0aW9uU2RrID0gbnVsbDtcclxuICAgIHRoaXMuc2RrVGFnSWRzLmNsZWFyKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBUYWcgbW9kdWxlIGV2ZXJ5IG5ldyB0YWcgbXVzdCBiZSBjcmVhdGVkIHRocm91Z2g6IHRoZSBzaGFyZWQgbGF5ZXJcclxuICAgKiB3aGVuIHRoZSBWaWV3IEFQSSBpcyBhdmFpbGFibGUsIHRoZSBnbG9iYWwgc2RrLlRhZyBvdGhlcndpc2UuXHJcbiAgICovXHJcbiAgYXN5bmMgZ2V0VGFnQ3JlYXRpb25Nb2R1bGUoc2RrOiBhbnkpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgY29uc3QgbGF5ZXIgPSBhd2FpdCB0aGlzLmVuc3VyZVNoYXJlZFRhZ0xheWVyKHNkayk7XHJcbiAgICByZXR1cm4gbGF5ZXI/LlRhZyB8fCBzZGs/LlRhZztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgKG9uY2UgcGVyIFNESyBzZXNzaW9uKSBhbmQgcmV0dXJucyB0aGUgc2hhcmVkIHRhZyBsYXllci5cclxuICAgKiBSZXNvbHZlcyB0byBudWxsIHdoZW4gdGhlIFZpZXcgQVBJIGlzIHVuYXZhaWxhYmxlLCBzbyBjYWxsZXJzIHRyYW5zcGFyZW50bHkgZmFsbFxyXG4gICAqIGJhY2sgdG8gdGhlIGdsb2JhbCBzZGsuVGFnLlxyXG4gICAqL1xyXG4gIGFzeW5jIGVuc3VyZVNoYXJlZFRhZ0xheWVyKHNkazogYW55KTogUHJvbWlzZTxhbnk+IHtcclxuICAgIGlmICh0aGlzLnNoYXJlZFRhZ0xheWVyKSByZXR1cm4gdGhpcy5zaGFyZWRUYWdMYXllcjtcclxuICAgIGlmICghc2RrPy5WaWV3Py5jcmVhdGVMYXllcikgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgaWYgKCF0aGlzLnNoYXJlZFRhZ0xheWVyUHJvbWlzZSkge1xyXG4gICAgICB0aGlzLnNoYXJlZFRhZ0xheWVyUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShcclxuICAgICAgICBzZGsuVmlldy5jcmVhdGVMYXllcihNYXR0ZXJwb3J0VGFnU2VydmljZS5TSEFSRURfVEFHX0xBWUVSX05BTUUpXHJcbiAgICAgIClcclxuICAgICAgICAudGhlbihhc3luYyAobGF5ZXI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zaGFyZWRUYWdMYXllciA9IGxheWVyO1xyXG4gICAgICAgICAgLy8gQSBmcmVzaGx5IGNyZWF0ZWQgbGF5ZXIgY2FuIGNvbWUgYmFjayB0b2dnbGVkIG9mZiwgd2hpY2ggaGlkZXMgaXRzIHRhZ3MuXHJcbiAgICAgICAgICBpZiAobGF5ZXIgJiYgbGF5ZXIudG9nZ2xlZCA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgYXdhaXQgbGF5ZXIudG9nZ2xlKHRydWUpLmNhdGNoKCgpID0+IHsgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gbGF5ZXI7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuY2F0Y2goKGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgLy8gQWxsb3cgYSBsYXRlciByZXRyeSAoZS5nLiB0aGUgU0RLIHdhcyBub3QgZnVsbHkgcmVhZHkgeWV0KS5cclxuICAgICAgICAgIHRoaXMuc2hhcmVkVGFnTGF5ZXJQcm9taXNlID0gbnVsbDtcclxuICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkgY29uc29sZS53YXJuKCdbTWF0dGVycG9ydFRhZ1NlcnZpY2VdIENvdWxkIG5vdCBjcmVhdGUgdGhlIHNoYXJlZCB0YWcgbGF5ZXInLCBlKTtcclxuICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLnNoYXJlZFRhZ0xheWVyUHJvbWlzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ha2VzIHN1cmUgdGhlIHNoYXJlZCBsYXllciBpcyBwYXJ0IG9mIGV2ZXJ5IHZpZXcgb2YgdGhlIHNwYWNlLCBEZWZ1cm5pc2hlZFxyXG4gICAqIGluY2x1ZGVkLiBUaGlzIGlzIHdoYXQgYWN0dWFsbHkgc2hhcmVzIHRoZSB0YWdzIGFjcm9zcyB2aWV3cywgYW5kIHRoZSByZWFzb24gdGhlXHJcbiAgICogbGF5ZXIgbXVzdCBub3QgYmUgYSBjb21tb24gb25lOiB0aGUgU0RLIG9ubHkgcGVyZm9ybXMgdGhlIGF0dGFjaG1lbnQgZm9yXHJcbiAgICogbm9uLWNvbW1vbiBsYXllcnMuIElkZW1wb3RlbnQsIHNvIGl0IGNhbiBydW4gb24gZXZlcnkgdmlldyBjb2xsZWN0aW9uIHVwZGF0ZS5cclxuICAgKi9cclxuICBhc3luYyBhdHRhY2hTaGFyZWRUYWdMYXllclRvVmlld3Moc2RrOiBhbnksIHZpZXdzOiBJdGVyYWJsZTxhbnk+KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBsYXllciA9IGF3YWl0IHRoaXMuZW5zdXJlU2hhcmVkVGFnTGF5ZXIoc2RrKTtcclxuICAgIGlmICghbGF5ZXIpIHJldHVybjtcclxuXHJcbiAgICBmb3IgKGNvbnN0IHZpZXcgb2Ygdmlld3MpIHtcclxuICAgICAgaWYgKCF2aWV3Py5hZGRMYXllciB8fCB2aWV3Lmhhc0xheWVyPy4obGF5ZXIpKSBjb250aW51ZTtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBhd2FpdCB2aWV3LmFkZExheWVyKGxheWVyKTtcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSkgY29uc29sZS53YXJuKCdbTWF0dGVycG9ydFRhZ1NlcnZpY2VdIENhbm5vdCBhZGQgdGhlIHNoYXJlZCB0YWcgbGF5ZXIgdG8gdmlldycsIHZpZXc/LmlkLCBlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkcyBhIHRhZyB0aHJvdWdoIHRoZSBzaGFyZWQgbGF5ZXIgc28gaXQgZXhpc3RzIGluIGV2ZXJ5IHZpZXcuIEZhbGxzIGJhY2tcclxuICAgKiB0byB0aGUgZ2xvYmFsIHNkay5UYWcgd2hlbiB0aGUgVmlldyBBUEkgaXMgdW5hdmFpbGFibGU7IHRoYXQgY2FsbCBpcyByYWNlZCBhZ2FpbnN0XHJcbiAgICogYSB0aW1lb3V0IGFzIGEgc2FmZXR5IG5ldCwgc2luY2UgaXQgbmV2ZXIgcmVzb2x2ZXMgd2hpbGUgYSBEZWZ1cm5pc2hlZCB2aWV3IGlzXHJcbiAgICogYWN0aXZlLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgYWRkVGFnVG9TZGsoc2RrOiBhbnksIGRlc2NyaXB0b3I6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcclxuICAgIGNvbnN0IHNoYXJlZFRhZ01vZHVsZSA9IGF3YWl0IHRoaXMuZ2V0VGFnQ3JlYXRpb25Nb2R1bGUoc2RrKTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBzaWRMaXN0ID0gKGF3YWl0IFByb21pc2UucmFjZShbXHJcbiAgICAgICAgc2hhcmVkVGFnTW9kdWxlLmFkZChkZXNjcmlwdG9yKSxcclxuICAgICAgICBuZXcgUHJvbWlzZTxuZXZlcj4oKF8sIHJlamVjdCkgPT5cclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcignVGFnLmFkZCB0aW1lZCBvdXQnKSksIDQwMDApXHJcbiAgICAgICAgKSxcclxuICAgICAgXSkpIGFzIHN0cmluZ1tdO1xyXG4gICAgICBpZiAoc2lkTGlzdD8ubGVuZ3RoKSByZXR1cm4gc2lkTGlzdFswXTtcclxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcclxuICAgICAgaWYgKGVycm9yPy5tZXNzYWdlPy5pbmNsdWRlcygnYWxyZWFkeSBpbiB1c2UnKSkgdGhyb3cgZXJyb3I7XHJcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkgY29uc29sZS53YXJuKCdbTWF0dGVycG9ydFRhZ1NlcnZpY2VdIFRhZy5hZGQgZmFpbGVkL3RpbWVkIG91dCcsIGVycm9yPy5tZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKiBPcGVucyB0aGUgbW9zdCByZWNlbnRseSBjcmVhdGVkIHRhZyBpbiB0aGUgdmlld2VyLiAqL1xyXG4gIGFzeW5jIGdvVG9MYXN0VGFnKHNkazogYW55KTogUHJvbWlzZTxhbnk+IHtcclxuICAgIGlmICghc2RrIHx8IHRoaXMubWF0dGVydGFnSURzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG4gICAgY29uc3QgbGFzdFNpZCA9IHRoaXMubWF0dGVydGFnSURzW3RoaXMubWF0dGVydGFnSURzLmxlbmd0aCAtIDFdO1xyXG4gICAgcmV0dXJuIHRoaXMuZ29Ub1RhZyhzZGssIGxhc3RTaWQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkcyBhIE1hdHRlcnRhZyB0byB0aGUgdmlld2VyLCBzZXJpYWxpemluZyBjYWxscyB0byBwcmV2ZW50IFNESyByYWNlIGNvbmRpdGlvbnMuXHJcbiAgICogUmV1c2VzIGV4aXN0aW5nIElEcyBpZiB0aGUgdGFnIGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgc2Vzc2lvbi5cclxuICAgKi9cclxuICBhc3luYyBhZGRNYXR0ZXJ0YWdUb1ZpZXdlcihzZGs6IGFueSwgbWF0dGVydGFnRGF0YTogTWF0dGVydGFnRGF0YSk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xyXG4gICAgaWYgKCFzZGspIHJldHVybiBudWxsO1xyXG5cclxuICAgIHRoaXMudGFnQWRkUXVldWUgPSB0aGlzLnRhZ0FkZFF1ZXVlXHJcbiAgICAgIC50aGVuKGFzeW5jICgpID0+IHtcclxuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gbWF0dGVydGFnRGF0YS5nZXRNYXR0ZXJ0YWdEZXNjcmlwdG9yKClbMF07XHJcbiAgICAgICAgY29uc3QgZXhpc3RpbmdJZCA9IGRlc2NyaXB0b3I/LmlkIHx8IG51bGw7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjb25zdCBzaWQgPSBhd2FpdCB0aGlzLmFkZFRhZ1RvU2RrKHNkaywgZGVzY3JpcHRvcik7XHJcbiAgICAgICAgICBpZiAoc2lkKSB7XHJcbiAgICAgICAgICAgIG1hdHRlcnRhZ0RhdGEuc2V0TWF0dGVycG9ydFNpZChzaWQpO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMubWF0dGVydGFnSURzLmluY2x1ZGVzKHNpZCkpIHtcclxuICAgICAgICAgICAgICB0aGlzLm1hdHRlcnRhZ0lEcy5wdXNoKHNpZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3Muc2V0KHNpZCwgbWF0dGVydGFnRGF0YSk7XHJcbiAgICAgICAgICAgIHJldHVybiBzaWQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIGNvbnNvbGUud2FybignW01hdHRlcnBvcnRUYWdTZXJ2aWNlXSBUYWcuYWRkIHJldHVybmVkIG5vIHNpZCcsIGRlc2NyaXB0b3IpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcclxuICAgICAgICAgIGlmIChlcnJvcj8ubWVzc2FnZT8uaW5jbHVkZXMoJ2FscmVhZHkgaW4gdXNlJykgJiYgZXhpc3RpbmdJZCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuZGljdGlvbm5hcnlUYWdzLmhhcyhleGlzdGluZ0lkKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMubWF0dGVydGFnSURzLnB1c2goZXhpc3RpbmdJZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3Muc2V0KGV4aXN0aW5nSWQsIG1hdHRlcnRhZ0RhdGEpO1xyXG4gICAgICAgICAgICByZXR1cm4gZXhpc3RpbmdJZDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkgY29uc29sZS53YXJuKCdbTWF0dGVycG9ydFRhZ1NlcnZpY2VdIGFkZE1hdHRlcnRhZ1RvVmlld2VyIGZhaWxlZCcsIGVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCgoZSkgPT4ge1xyXG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSkgY29uc29sZS53YXJuKCdbTWF0dGVycG9ydFRhZ1NlcnZpY2VdIHRhZ0FkZFF1ZXVlIHJlamVjdGVkJywgZSk7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB0aGlzLnRhZ0FkZFF1ZXVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW50ZXJuYWwgbWV0aG9kIHRvIGFkZCBhbmQgY29uZmlndXJlIGEgTWF0dGVydGFnIHdpdGggaWNvbiwgb3BhY2l0eSwgYW5kIEhUTUwgY29udGVudC5cclxuICAgKiBIYW5kbGVzIGV4aXN0aW5nIHRhZ3MgZ3JhY2VmdWxseSBhbmQgcXVldWVzIG9wZXJhdGlvbnMgdG8gYXZvaWQgU0RLIGNvbmZsaWN0cy5cclxuICAgKi9cclxuICBhc3luYyBfZG9BZGRNYXR0ZXJ0YWcoXHJcbiAgICBzZGs6IGFueSxcclxuICAgIG1hdHRlcnRhZ0RhdGE6IE1hdHRlcnRhZ0RhdGEsXHJcbiAgICBzZXRUYWdJY29uQW5kT3BhY2l0eTogKHNpZDogc3RyaW5nLCBtdDogTWF0dGVydGFnRGF0YSkgPT4gUHJvbWlzZTx2b2lkPixcclxuICAgIGluamVjdEh0bWxJblRhZzogKHR5cGU6IFBvaVR5cGUsIG9iajogRGJPYmplY3RUeXBlLCBzaWQ6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxyXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICBjb25zdCBkZXNjcmlwdG9yID0gbWF0dGVydGFnRGF0YS5nZXRNYXR0ZXJ0YWdEZXNjcmlwdG9yKCk7XHJcbiAgICAvL2NvbnNvbGUubG9nKCdkZXNjcmlwdG9yJywgZGVzY3JpcHRvcik7XHJcbiAgICBjb25zdCBzaWQgPSBkZXNjcmlwdG9yWzBdWydpZCddO1xyXG5cclxuICAgIGlmIChzaWQgJiYgdGhpcy5kaWN0aW9ubmFyeVRhZ3MuaGFzKHNpZCkpIHtcclxuICAgICAgYXdhaXQgc2V0VGFnSWNvbkFuZE9wYWNpdHkoc2lkLCBtYXR0ZXJ0YWdEYXRhKTtcclxuICAgICAgYXdhaXQgaW5qZWN0SHRtbEluVGFnKG1hdHRlcnRhZ0RhdGEuZ2V0VHlwZSgpLCBtYXR0ZXJ0YWdEYXRhLmdldE9iamVjdCgpLCBzaWQpO1xyXG4gICAgICByZXR1cm4gc2lkO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudGFnQWRkUXVldWUgPSB0aGlzLnRhZ0FkZFF1ZXVlLnRoZW4oYXN5bmMgKCkgPT4ge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHRhZ01vZHVsZSA9IGF3YWl0IHRoaXMuZ2V0VGFnQ3JlYXRpb25Nb2R1bGUoc2RrKTtcclxuICAgICAgICBjb25zdCBbY3JlYXRlZFNpZF0gPSBhd2FpdCB0YWdNb2R1bGUuYWRkKC4uLmRlc2NyaXB0b3IpO1xyXG5cclxuICAgICAgICB0aGlzLm1hdHRlcnRhZ0lEcy5wdXNoKGNyZWF0ZWRTaWQpO1xyXG4gICAgICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLnNldChjcmVhdGVkU2lkLCBtYXR0ZXJ0YWdEYXRhKTtcclxuXHJcbiAgICAgICAgYXdhaXQgdGhpcy53YWl0Rm9yVGFnSW5TZGsoc2RrLCBjcmVhdGVkU2lkKTtcclxuICAgICAgICBhd2FpdCBzZXRUYWdJY29uQW5kT3BhY2l0eShjcmVhdGVkU2lkLCBtYXR0ZXJ0YWdEYXRhKTtcclxuXHJcbiAgICAgICAgaW5qZWN0SHRtbEluVGFnKG1hdHRlcnRhZ0RhdGEuZ2V0VHlwZSgpLCBtYXR0ZXJ0YWdEYXRhLmdldE9iamVjdCgpLCBjcmVhdGVkU2lkKS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSBjb25zb2xlLndhcm4oJ0hUTUwgaW5qZWN0aW9uIGZhaWxlZCBmb3InLCBjcmVhdGVkU2lkLCBlcnIpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gY3JlYXRlZFNpZDtcclxuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgaWYgKGU/Lm1lc3NhZ2U/LmluY2x1ZGVzKCdhbHJlYWR5IGluIHVzZScpICYmIHNpZCkge1xyXG4gICAgICAgICAgaWYgKCF0aGlzLmRpY3Rpb25uYXJ5VGFncy5oYXMoc2lkKSkge1xyXG4gICAgICAgICAgICB0aGlzLm1hdHRlcnRhZ0lEcy5wdXNoKHNpZCk7XHJcbiAgICAgICAgICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLnNldChzaWQsIG1hdHRlcnRhZ0RhdGEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYXdhaXQgc2V0VGFnSWNvbkFuZE9wYWNpdHkoc2lkLCBtYXR0ZXJ0YWdEYXRhKTtcclxuICAgICAgICAgIGF3YWl0IGluamVjdEh0bWxJblRhZyhtYXR0ZXJ0YWdEYXRhLmdldFR5cGUoKSwgbWF0dGVydGFnRGF0YS5nZXRPYmplY3QoKSwgc2lkKTtcclxuICAgICAgICAgIHJldHVybiBzaWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRocm93IGU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB0aGlzLnRhZ0FkZFF1ZXVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0RGlzdGFuY2UocDE6IGFueSwgcDI6IGFueSk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHAyLnggLSBwMS54LCAyKSArIE1hdGgucG93KHAyLnkgLSBwMS55LCAyKSArIE1hdGgucG93KHAyLnogLSBwMS56LCAyKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVja3MgaWYgYSB0YWcgaXMgd2l0aGluIHRoZSBib3VuZGluZyBib3ggb2YgYW55IGFjdGl2ZSByb29tIChhZGRpbmcgYSBzbGlnaHQgbWFyZ2luIHRvIGFjY291bnQgZm9yIHdhbGwtbW91bnRlZCB0YWdzKS5cclxuICAgKiBJZiB0aGVyZSBhcmUgbm8gYWN0aXZlIHJvb21zIChlLmcuLCBoYWxsd2F5KSwgZmFsbHMgYmFjayB0byByZXR1cm5pbmcgdHJ1ZS5cclxuICAgKi9cclxuICBpc1RhZ0luUm9vbXMobWF0dGVydGFnRGF0YTogTWF0dGVydGFnRGF0YSwgcm9vbXM6IGFueVtdKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXJvb21zIHx8IHJvb21zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGNvbnN0IHRhZ1BvcyA9IG1hdHRlcnRhZ0RhdGEuZ2V0UG9zaXRpb24oKTtcclxuICAgIGNvbnN0IG1hcmdpbiA9IDEuNTtcclxuXHJcbiAgICByZXR1cm4gcm9vbXMuc29tZSgocm9vbSkgPT4ge1xyXG4gICAgICBpZiAoIXJvb20uYm91bmRzKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgIGNvbnN0IHsgbWluLCBtYXggfSA9IHJvb20uYm91bmRzO1xyXG5cclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICB0YWdQb3MueCA+PSBtaW4ueCAtIG1hcmdpbiAmJiB0YWdQb3MueCA8PSBtYXgueCArIG1hcmdpbiAmJlxyXG4gICAgICAgIHRhZ1Bvcy55ID49IG1pbi55IC0gbWFyZ2luICYmIHRhZ1Bvcy55IDw9IG1heC55ICsgbWFyZ2luICYmXHJcbiAgICAgICAgdGFnUG9zLnogPj0gbWluLnogLSBtYXJnaW4gJiYgdGFnUG9zLnogPD0gbWF4LnogKyBtYXJnaW5cclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqIFJldHVybnMgdGhlIElEIG9mIHRoZSBtb3N0IHJlY2VudGx5IGFkZGVkIHRhZy4gKi9cclxuICBnZXRMYXN0VGFnKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgaWYgKHRoaXMubWF0dGVydGFnSURzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XHJcbiAgICByZXR1cm4gdGhpcy5tYXR0ZXJ0YWdJRHNbdGhpcy5tYXR0ZXJ0YWdJRHMubGVuZ3RoIC0gMV07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGVzIHRoZSB2aXNpYmlsaXR5IChvcGFjaXR5KSBvZiBhbGwgdGFncyBiYXNlZCBvbiB0aGUgY3VycmVudCBjYW1lcmEgbW9kZSxcclxuICAgKiBmbG9vciBhbmQgcm9vbSBjb250ZXh0LiBNdXN0IGJlIGNhbGxlZCBhZnRlciBlYWNoIHN3ZWVwLCBmbG9vciBvciBtb2RlIGNoYW5nZS5cclxuICAgKlxyXG4gICAqIFJ1bGVzOlxyXG4gICAqICAtIERPTExIT1VTRSAvIEZMT09SUExBTiDihpIgYWxsIHRhZ3MgaGlkZGVuIChvcGFjaXR5IDApLlxyXG4gICAqICAtIElOU0lERSDihpIgb25seSB0YWdzIHdob3NlIHN3ZWVwIGJlbG9uZ3MgdG8gdGhlIGN1cnJlbnQgZmxvb3IgYXJlIHNob3duO1xyXG4gICAqICAgIHByb3hpbWl0eS1iYXNlZCBvcGFjaXR5IGlzIGFwcGxpZWQgdmlhIGNvbXB1dGVUYWdPcGFjaXR5KCkuXHJcbiAgICogICAgVGFncyBvbiBvdGhlciBmbG9vcnMgYXJlIGhpZGRlbiAob3BhY2l0eSAwKS5cclxuICAgKiAgLSBUUkFOU0lUSU9OSU5HIOKGkiBubyBjaGFuZ2UgKHNraXAgdXBkYXRlIHRvIGF2b2lkIGZsaWNrZXJpbmcpLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHNkayAgICAgICAgICBNYXR0ZXJwb3J0IFNESyBpbnN0YW5jZS5cclxuICAgKiBAcGFyYW0gcG9zZUNhbWVyYSAgIEN1cnJlbnQgY2FtZXJhIHBvc2UuXHJcbiAgICogQHBhcmFtIHN3ZWVwQ29sbGVjdGlvbiAgRnVsbCBjb2xsZWN0aW9uIG9mIHN3ZWVwcy5cclxuICAgKiBAcGFyYW0gY3VycmVudENhbWVyYU1vZGUgIEN1cnJlbnQgY2FtZXJhIG1vZGUuXHJcbiAgICogQHBhcmFtIG1hdHRlcnRhZ1RvRm9sbG93ICBJRCBvZiB0aGUgY3Vyc29yIHRhZyAobmV2ZXIgdG91Y2hlZCkuXHJcbiAgICovXHJcbiAgYXN5bmMgdXBkYXRlVGFnc1Zpc2liaWxpdHlGb3JDb250ZXh0KFxyXG4gICAgc2RrOiBhbnksXHJcbiAgICBzd2VlcENvbGxlY3Rpb246IGFueSxcclxuICAgIGN1cnJlbnRDYW1lcmFNb2RlOiBDYW1lcmFNb2RlLFxyXG4gICAgbWF0dGVydGFnVG9Gb2xsb3c6IHN0cmluZyB8IG51bGwsXHJcbiAgICBjdXJyZW50Rmxvb3JTZXF1ZW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGwsXHJcbiAgICBjdXJyZW50Um9vbXM6IGFueVtdID0gW11cclxuICApOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICghc2RrIHx8IHRoaXMuZGljdGlvbm5hcnlUYWdzLnNpemUgPT09IDApIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBpc0ludGVyaW9yTW9kZSA9IGN1cnJlbnRDYW1lcmFNb2RlID09PSBDYW1lcmFNb2RlLklOU0lERTtcclxuICAgIGNvbnN0IGN1cnJlbnRGbG9vcklkID0gY3VycmVudEZsb29yU2VxdWVuY2UgIT09IG51bGwgPyBjdXJyZW50Rmxvb3JTZXF1ZW5jZS50b1N0cmluZygpIDogbnVsbDtcclxuICAgIGNvbnN0IHByb21pc2VzID0gW107XHJcblxyXG4gICAgZm9yIChjb25zdCBbdGFnSWQsIG1hdHRlcnRhZ0RhdGFdIG9mIHRoaXMuZGljdGlvbm5hcnlUYWdzKSB7XHJcbiAgICAgIGlmICh0YWdJZCA9PT0gbWF0dGVydGFnVG9Gb2xsb3cpIGNvbnRpbnVlO1xyXG5cclxuICAgICAgY29uc3QgdGFnRmxvb3JJZCA9IHRoaXMuZ2V0Rmxvb3JJZEZvclRhZyhtYXR0ZXJ0YWdEYXRhLCBzd2VlcENvbGxlY3Rpb24pO1xyXG4gICAgICBjb25zdCBpc09uQ3VycmVudEZsb29yID0gIXRhZ0Zsb29ySWQgfHwgIWN1cnJlbnRGbG9vcklkIHx8IHRhZ0Zsb29ySWQgPT09IGN1cnJlbnRGbG9vcklkO1xyXG5cclxuICAgICAgbGV0IHRhcmdldE9wYWNpdHkgPSAwO1xyXG4gICAgICBsZXQgc2hvdWxkQmVFbmFibGVkID0gZmFsc2U7XHJcblxyXG4gICAgICAvLyBDYWxjdWxhdGlvbiBvZiBvcGFjaXR5IGFuZCBlbmFibGUgc3RhdHVzXHJcbiAgICAgIGlmIChpc09uQ3VycmVudEZsb29yKSB7XHJcbiAgICAgICAgaWYgKCFpc0ludGVyaW9yTW9kZSkge1xyXG4gICAgICAgICAgdGFyZ2V0T3BhY2l0eSA9IDE7XHJcbiAgICAgICAgICBzaG91bGRCZUVuYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0YXJnZXRPcGFjaXR5ID0gMC45O1xyXG4gICAgICAgICAgc2hvdWxkQmVFbmFibGVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8gQXBwbHkgY2hhbmdlc1xyXG5cclxuICAgICAgLy8gVG9vbHRpcCBhbmQgY2xpY2sgbWFuYWdlbWVudFxyXG4gICAgICBjb25zdCB0YWdNb2R1bGUgPSB0aGlzLmdldFRhZ01vZHVsZShzZGssIHRhZ0lkKTtcclxuICAgICAgY29uc3QgbGFzdEVuYWJsZWQgPSB0aGlzLnRhZ3NDdXJyZW50RW5hYmxlZC5nZXQodGFnSWQpO1xyXG4gICAgICBpZiAobGFzdEVuYWJsZWQgIT09IHNob3VsZEJlRW5hYmxlZCkge1xyXG4gICAgICAgIHRoaXMudGFnc0N1cnJlbnRFbmFibGVkLnNldCh0YWdJZCwgc2hvdWxkQmVFbmFibGVkKTtcclxuICAgICAgICBwcm9taXNlcy5wdXNoKHRhZ01vZHVsZS5hbGxvd0FjdGlvbih0YWdJZCwge1xyXG4gICAgICAgICAgb3BlbmluZzogc2hvdWxkQmVFbmFibGVkLFxyXG4gICAgICAgICAgbmF2aWdhdGluZzogc2hvdWxkQmVFbmFibGVkLFxyXG4gICAgICAgICAgZG9ja2luZzogZmFsc2VcclxuICAgICAgICB9KS5jYXRjaCgoKSA9PiB7IH0pKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBPcGFjaXR5IG1hbmFnZW1lbnRcclxuICAgICAgY29uc3QgbGFzdE9wYWNpdHkgPSB0aGlzLnRhZ3NDdXJyZW50T3BhY2l0eS5nZXQodGFnSWQpID8/IC0xO1xyXG4gICAgICBpZiAoTWF0aC5hYnMobGFzdE9wYWNpdHkgLSB0YXJnZXRPcGFjaXR5KSA+IDAuMDUpIHtcclxuICAgICAgICB0aGlzLnRhZ3NDdXJyZW50T3BhY2l0eS5zZXQodGFnSWQsIHRhcmdldE9wYWNpdHkpO1xyXG4gICAgICAgIHByb21pc2VzLnB1c2godGFnTW9kdWxlLmVkaXRPcGFjaXR5KHRhZ0lkLCB0YXJnZXRPcGFjaXR5KS5jYXRjaCgoKSA9PiB7IH0pKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERyb3BzIHRoZSBtZW1vaXplZCBvcGFjaXR5L2VuYWJsZWQgc3RhdGUgc28gdGhlIG5leHQgdmlzaWJpbGl0eSBwYXNzIHJlLWFwcGxpZXMgaXRcclxuICAgKiB0byBldmVyeSB0YWcuIE5lZWRlZCBhZnRlciBhIHZpZXcgc3dpdGNoIChmdXJuaXNoZWQgPC0+IGRlZnVybmlzaGVkKTogdGhlIFNES1xyXG4gICAqIHJlLXJlbmRlcnMgdGhlIHNoYXJlZCBsYXllcidzIHRhZ3MgYW5kIHRoZSBjYWNoZWQgdmFsdWVzIHdvdWxkIG90aGVyd2lzZSBtYWtlXHJcbiAgICogdXBkYXRlVGFnc1Zpc2liaWxpdHlGb3JDb250ZXh0KCkgc2tpcCB0aGVtLCBsZWF2aW5nIHRhZ3Mgc3R1Y2sgaW52aXNpYmxlLlxyXG4gICAqL1xyXG4gIHJlc2V0VmlzaWJpbGl0eUNhY2hlKCk6IHZvaWQge1xyXG4gICAgdGhpcy50YWdzQ3VycmVudE9wYWNpdHkuY2xlYXIoKTtcclxuICAgIHRoaXMudGFnc0N1cnJlbnRFbmFibGVkLmNsZWFyKCk7XHJcbiAgICB0aGlzLnRhZ3NDdXJyZW50SWNvbi5jbGVhcigpO1xyXG4gIH1cclxuXHJcbiAgLyoqIFJlbW92ZXMgYSBzcGVjaWZpYyB0YWcgZnJvbSB0aGUgdmlld2VyIGFuZCBsb2NhbCBkaWN0aW9uYXJpZXMuICovXHJcbiAgYXN5bmMgZGVsZXRlTWF0dGVydGFnRnJvbUlkKHNkazogYW55LCBtYXR0ZXJ0YWdJRDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoc2RrKSBhd2FpdCB0aGlzLmdldFRhZ01vZHVsZShzZGssIG1hdHRlcnRhZ0lEKS5yZW1vdmUobWF0dGVydGFnSUQpO1xyXG4gICAgICB0aGlzLmRpY3Rpb25uYXJ5VGFncy5kZWxldGUobWF0dGVydGFnSUQpO1xyXG4gICAgICB0aGlzLnRhZ3NDdXJyZW50SWNvbi5kZWxldGUobWF0dGVydGFnSUQpO1xyXG4gICAgICB0aGlzLnRhZ3NDdXJyZW50T3BhY2l0eS5kZWxldGUobWF0dGVydGFnSUQpO1xyXG4gICAgICB0aGlzLnRhZ3NDdXJyZW50RW5hYmxlZC5kZWxldGUobWF0dGVydGFnSUQpO1xyXG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMubWF0dGVydGFnSURzLmluZGV4T2YobWF0dGVydGFnSUQpO1xyXG4gICAgICBpZiAoaW5kZXggPiAtMSkgdGhpcy5tYXR0ZXJ0YWdJRHMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIGNvbnNvbGUud2FybignQ2Fubm90IGRlbGV0ZSB0YWcnLCBtYXR0ZXJ0YWdJRCwgZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogUmVtb3ZlcyB0aGUgbGFzdCBhZGRlZCB0YWcgZnJvbSB0aGUgdmlld2VyLiAqL1xyXG4gIGFzeW5jIGRlbGV0ZUxhc3RNYXR0ZXJ0YWcoc2RrOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IGxhc3RTaWQgPSB0aGlzLmdldExhc3RUYWcoKTtcclxuICAgIGlmIChsYXN0U2lkKSBhd2FpdCB0aGlzLmRlbGV0ZU1hdHRlcnRhZ0Zyb21JZChzZGssIGxhc3RTaWQpO1xyXG4gIH1cclxuXHJcbiAgLyoqIENsZWFycyBhbGwgdGFncyBmcm9tIHRoZSB2aWV3ZXIgYW5kIHJlc2V0cyBsb2NhbCBzdGF0ZS4gKi9cclxuICBhc3luYyBhY3Rpb25fZGVsZXRlX2FsbF9tYXR0ZXJ0YWdzKHNkazogYW55KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoc2RrKSB7XHJcbiAgICAgIGNvbnN0IHNpZHNUb1JlbW92ZSA9IFsuLi50aGlzLm1hdHRlcnRhZ0lEc107XHJcbiAgICAgIGZvciAoY29uc3Qgc2lkIG9mIHNpZHNUb1JlbW92ZSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLmdldFRhZ01vZHVsZShzZGssIHNpZCkucmVtb3ZlKHNpZCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuY2xlYXIoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYW5kIGNvbmZpZ3VyZXMgYSBNYXR0ZXJ0YWcgZnJvbSBhIFBPSSwgaGFuZGxpbmcgY29vcmRpbmF0ZXMsIG5vcm1hbHMsIGFuZCBzd2VlcCBJRC5cclxuICAgKiBTa2lwcyBjcmVhdGlvbiBpZiBhIHRhZyBmb3IgdGhlIG9iamVjdCBhbHJlYWR5IGV4aXN0cy5cclxuICAgKi9cclxuICBhc3luYyBjcmVhdGVNYXR0ZXJ0YWdGcm9tUE9JKFxyXG4gICAgc2RrOiBhbnksXHJcbiAgICB0YWdUeXBlOiBQb2lUeXBlLFxyXG4gICAgb2JqZWN0OiBEYk9iamVjdFR5cGUsXHJcbiAgICBwb2k6IFBPSSxcclxuICAgIGdldFRhZ0Zyb21FbGVtZW50SWQ6IChpZDogc3RyaW5nKSA9PiB7IHRhZzogc3RyaW5nOyBzd2VlcDogc3RyaW5nIH0sXHJcbiAgICBzZXRUYWdJY29uQW5kT3BhY2l0eTogKHNpZDogc3RyaW5nLCBtdDogTWF0dGVydGFnRGF0YSkgPT4gUHJvbWlzZTx2b2lkPixcclxuICAgIGluamVjdEh0bWxJblRhZzogKHR5cGU6IFBvaVR5cGUsIG9iajogRGJPYmplY3RUeXBlLCBzaWQ6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxyXG4gICk6IFByb21pc2U8YW55PiB7XHJcbiAgICBjb25zdCB7IHRhZyB9ID0gZ2V0VGFnRnJvbUVsZW1lbnRJZChvYmplY3QuaWQpO1xyXG4gICAgaWYgKHRhZykgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IG1hdHRlcnRhZ0RhdGE6IE1hdHRlcnRhZ0RhdGEgPSBuZXcgTWF0dGVydGFnRGF0YSh0YWdUeXBlKTtcclxuICAgIG1hdHRlcnRhZ0RhdGEuc2V0T2JqZWN0KG9iamVjdCwgdGFnVHlwZSk7XHJcblxyXG4gICAgaWYgKHBvaS5jb29yZGluYXRlKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgbWF0dGVydGFnRGF0YS5zZXRQb3NpdGlvbihKU09OLnBhcnNlKHBvaS5jb29yZGluYXRlKSk7XHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIGNvbnNvbGUud2FybignRXJyb3IgcGFyc2luZyBQT0kgY29vcmRpbmF0ZXMnLCBwb2kuY29vcmRpbmF0ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAocG9pLm1ldGFkYXRhKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgdGFnTWV0YWRhdGEgPSBKU09OLnBhcnNlKHBvaS5tZXRhZGF0YSk7XHJcbiAgICAgICAgbWF0dGVydGFnRGF0YS5zZXROb3JtYWwodGFnTWV0YWRhdGEubm9ybWFsIHx8IHsgeDogMCwgeTogLTAuMTUsIHo6IDAgfSk7XHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICBtYXR0ZXJ0YWdEYXRhLnNldE5vcm1hbCh7IHg6IDAsIHk6IC0wLjE1LCB6OiAwIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHBvaS5tYXR0ZXJwb3J0U3dlZXBJRCkge1xyXG4gICAgICBtYXR0ZXJ0YWdEYXRhLnNldFN3ZWVwSUQocG9pLm1hdHRlcnBvcnRTd2VlcElEKTtcclxuICAgIH1cclxuICAgIG1hdHRlcnRhZ0RhdGEuc2V0UG9pKHBvaSk7XHJcblxyXG4gICAgY29uc3QgY3JlYXRlZFRhZ0lEID0gYXdhaXQgdGhpcy5hZGRNYXR0ZXJ0YWdUb1ZpZXdlcihzZGssIG1hdHRlcnRhZ0RhdGEpO1xyXG5cclxuICAgIGlmIChjcmVhdGVkVGFnSUQgJiYgc2RrKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMud2FpdEZvclRhZ0luU2RrKHNkaywgY3JlYXRlZFRhZ0lEKTtcclxuICAgICAgYXdhaXQgc2V0VGFnSWNvbkFuZE9wYWNpdHkoY3JlYXRlZFRhZ0lELCBtYXR0ZXJ0YWdEYXRhKTtcclxuICAgICAgaW5qZWN0SHRtbEluVGFnKHRhZ1R5cGUsIG9iamVjdCwgY3JlYXRlZFRhZ0lEKS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSkgY29uc29sZS53YXJuKCdIVE1MIGluamVjdGlvbiBmYWlsZWQgZm9yJywgY3JlYXRlZFRhZ0lELCBlcnIpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY3JlYXRlZFRhZ0lEO1xyXG4gIH1cclxuXHJcbiAgLyoqIFVwZGF0ZXMgdGhlIGljb24sIG9wYWNpdHksIGFuZCBIVE1MIGNvbnRlbnQgb2YgYW4gZXhpc3RpbmcgdGFnLiAqL1xyXG4gIGFzeW5jIHVwZGF0ZU1hdHRlclRhZ0NvbnRlbnRGb3JUYWdJRChcclxuICAgIHNkazogYW55LFxyXG4gICAgbWF0dGVydGFnSUQ6IHN0cmluZyxcclxuICAgIG9iamVjdDogRGJPYmplY3RUeXBlLFxyXG4gICAgcG9pVHlwZTogUG9pVHlwZSxcclxuICAgIHNldFRhZ0ljb25BbmRPcGFjaXR5OiAoc2lkOiBzdHJpbmcsIG10OiBNYXR0ZXJ0YWdEYXRhKSA9PiBQcm9taXNlPHZvaWQ+LFxyXG4gICAgaW5qZWN0SHRtbEluVGFnOiAodHlwZTogUG9pVHlwZSwgb2JqOiBEYk9iamVjdFR5cGUsIHNpZDogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XHJcbiAgKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIGNvbnN0IG1hdHRlcnRhZ0RhdGEgPSB0aGlzLmRpY3Rpb25uYXJ5VGFncy5nZXQobWF0dGVydGFnSUQpO1xyXG4gICAgaWYgKCFtYXR0ZXJ0YWdEYXRhKSByZXR1cm47XHJcblxyXG4gICAgaWYgKG9iamVjdCkge1xyXG4gICAgICBtYXR0ZXJ0YWdEYXRhLnNldE9iamVjdChvYmplY3QsIHBvaVR5cGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGF3YWl0IHNldFRhZ0ljb25BbmRPcGFjaXR5KG1hdHRlcnRhZ0lELCBtYXR0ZXJ0YWdEYXRhKTtcclxuICAgIGF3YWl0IGluamVjdEh0bWxJblRhZyhwb2lUeXBlLCBvYmplY3QsIG1hdHRlcnRhZ0lEKTtcclxuICB9XHJcblxyXG4gIC8qKiBSZWdpc3RlcnMgYSBjdXN0b20gdGV4dHVyZSBhbmQgYXBwbGllcyBpdCB0byBhIHRhZywgb3B0aW9uYWxseSBhZGp1c3Rpbmcgb3BhY2l0eS4gKi9cclxuICBhc3luYyBhZGROZXdJY29uQW5kU2V0Rm9yVGFnKFxyXG4gICAgc2RrOiBhbnksXHJcbiAgICBtYXR0ZXJ0YWdJRDogc3RyaW5nLFxyXG4gICAgaWNvblBhdGg6IHN0cmluZyxcclxuICAgIGFwcGx5T3BhY2l0eTogYm9vbGVhbixcclxuICAgIG9wYWNpdHk6IG51bWJlclxyXG4gICkge1xyXG4gICAgaWYgKCFzZGspIHJldHVybjtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IGljb25OYW1lID0gYGN1c3RvbS1pY29uLSR7bWF0dGVydGFnSUR9YDtcclxuICAgICAgY29uc3QgdGFnTW9kdWxlID0gdGhpcy5nZXRUYWdNb2R1bGUoc2RrLCBtYXR0ZXJ0YWdJRCk7XHJcbiAgICAgIGF3YWl0IHNkay5Bc3NldC5yZWdpc3RlclRleHR1cmUoaWNvbk5hbWUsIGljb25QYXRoKTtcclxuICAgICAgYXdhaXQgdGFnTW9kdWxlLmVkaXRJY29uKG1hdHRlcnRhZ0lELCBpY29uTmFtZSk7XHJcbiAgICAgIHRoaXMudGFnc0N1cnJlbnRJY29uLnNldChtYXR0ZXJ0YWdJRCwgaWNvbk5hbWUpO1xyXG5cclxuICAgICAgaWYgKGFwcGx5T3BhY2l0eSkge1xyXG4gICAgICAgIGF3YWl0IHRhZ01vZHVsZS5lZGl0T3BhY2l0eShtYXR0ZXJ0YWdJRCwgb3BhY2l0eSk7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkgY29uc29sZS53YXJuKCdFcnJvciBzZXR0aW5nIGN1c3RvbSBpY29uIG9yIG9wYWNpdHknLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogRmluZHMgdGhlIHRhZyBJRCBhbmQgc3dlZXAgSUQgYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWMgZWxlbWVudCBJRC4gKi9cclxuICBnZXRUYWdGcm9tRWxlbWVudElkKGVsZW1lbnRJRDogc3RyaW5nLCBzd2VlcHM6IHN0cmluZ1tdIHwgbnVsbCk6IHsgdGFnOiBzdHJpbmcgfCBudWxsOyBzd2VlcDogc3RyaW5nIHwgbnVsbCB9IHtcclxuICAgIGxldCB0YWdJRCA9IG51bGw7XHJcbiAgICBsZXQgc3dlZXBJRCA9IG51bGw7XHJcbiAgICBmb3IgKGxldCBbbWF0dGVydGFnSUQsIG1hdHRlcnRhZ0RhdGFdIG9mIHRoaXMuZGljdGlvbm5hcnlUYWdzKSB7XHJcbiAgICAgIGlmIChtYXR0ZXJ0YWdEYXRhLmVsZW1lbnRJRCA9PT0gZWxlbWVudElEKSB7XHJcbiAgICAgICAgdGFnSUQgPSBtYXR0ZXJ0YWdJRDtcclxuICAgICAgICBjb25zdCBzd2VlcCA9IG1hdHRlcnRhZ0RhdGEuZ2V0U3dlZXBJRCgpO1xyXG4gICAgICAgIGlmIChzd2VlcCAmJiBzd2VlcHMpIHtcclxuICAgICAgICAgIC8vIHN3ZWVwIGlzIGEgdXVpZDsgc3dlZXBzIGFycmF5IGNvbnRhaW5zIHNpZHMg4oCTIGNoZWNrIGJvdGggZm9ybWF0c1xyXG4gICAgICAgICAgY29uc3QgcmVzb2x2ZWRTaWQgPSB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLnJlc29sdmVTd2VlcFNpZChzd2VlcCk7XHJcbiAgICAgICAgICBpZiAoc3dlZXBzLmluY2x1ZGVzKHN3ZWVwKSB8fCBzd2VlcHMuaW5jbHVkZXMocmVzb2x2ZWRTaWQpKSB7XHJcbiAgICAgICAgICAgIHN3ZWVwSUQgPSBzd2VlcDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7IHRhZzogdGFnSUQsIHN3ZWVwOiBzd2VlcElEIH07XHJcbiAgfVxyXG5cclxuICAvKiogUmV0cmlldmVzIHRoZSBmbG9vciBpZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCBhIHRhZyBiYXNlZCBvbiBpdHMgc3dlZXAgZGF0YS5cclxuICAgKiAgSGFuZGxlcyBib3RoIHRoZSBvYmplY3QgZm9ybSAoeyBmbG9vckluZm86IHsgaWQsIHNlcXVlbmNlIH0sIGZsb29yOiB7IGlkIH0gfSlcclxuICAgKiAgYW5kIHRoZSBwcmltaXRpdmUgZm9ybSAoZmxvb3I6IG51bWJlcikgdXNlZCBieSBNYXR0ZXJwb3J0IFNESyB2My5cclxuICAgKi9cclxuICBnZXRGbG9vcklkRm9yVGFnKG1hdHRlcnRhZ0RhdGE6IE1hdHRlcnRhZ0RhdGEsIHN3ZWVwQ29sbGVjdGlvbjogYW55KTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICBjb25zdCBzd2VlcElkID0gbWF0dGVydGFnRGF0YS5nZXRTd2VlcElEKCk7XHJcbiAgICBpZiAoIXN3ZWVwSWQgfHwgIXN3ZWVwQ29sbGVjdGlvbikgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgY29uc3Qgc3dlZXBEYXRhID0gc3dlZXBDb2xsZWN0aW9uW3N3ZWVwSWRdO1xyXG4gICAgaWYgKCFzd2VlcERhdGEpIHJldHVybiBudWxsO1xyXG5cclxuICAgIC8vIFNESyB2Mzogc3dlZXAuZmxvb3IgaXMgYSBwcmltaXRpdmUgbnVtYmVyICh0aGUgc2VxdWVuY2UgaW5kZXgpXHJcbiAgICBpZiAodHlwZW9mIHN3ZWVwRGF0YS5mbG9vciA9PT0gJ251bWJlcicpIHtcclxuICAgICAgcmV0dXJuIHN3ZWVwRGF0YS5mbG9vci50b1N0cmluZygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE9sZGVyIC8gZXh0ZW5kZWQgZm9ybWF0c1xyXG4gICAgcmV0dXJuIHN3ZWVwRGF0YT8uZmxvb3JJbmZvPy5pZFxyXG4gICAgICA/PyBzd2VlcERhdGE/LmZsb29ySW5mbz8uc2VxdWVuY2U/LnRvU3RyaW5nKClcclxuICAgICAgPz8gc3dlZXBEYXRhPy5mbG9vcklkXHJcbiAgICAgID8/IHN3ZWVwRGF0YT8uZmxvb3I/LmlkXHJcbiAgICAgID8/IHN3ZWVwRGF0YT8uZmxvb3I/LnNlcXVlbmNlPy50b1N0cmluZygpXHJcbiAgICAgID8/IG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbmplY3RzIGN1c3RvbSBIVE1MIG9yIGZhbGxiYWNrIGJpbGxib2FyZCBtZWRpYSBpbnRvIGEgTWF0dGVydGFnIHNhbmRib3guXHJcbiAgICogQXR0YWNoZXMgZXZlbnQgbGlzdGVuZXJzIGZvciBpbnRlcmFjdGl2ZSBlbGVtZW50cyB3aXRoaW4gdGhlIHRhZy5cclxuICAgKi9cclxuICBhc3luYyBpbmplY3RIdG1sSW5UYWcoc2RrOiBhbnksIHRhZ1R5cGU6IFBvaVR5cGUsIG9iamVjdDogRGJPYmplY3RUeXBlLCB0YWdJRDogc3RyaW5nKSB7XHJcbiAgICBpZiAoIXRoaXMudGFnU2VydmljZSkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdbTWF0dGVycG9ydFRhZ1NlcnZpY2VdIHRhZ1NlcnZpY2UgaXMgbm90IGluaXRpYWxpemVkLicpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0cnkge1xyXG4gICAgICBsZXQgaHRtbCA9IGF3YWl0IHRoaXMudGFnU2VydmljZS5nZXRIdG1sVG9JbmplY3QodGFnVHlwZSwgb2JqZWN0KTtcclxuXHJcbiAgICAgIGlmIChodG1sICYmIGh0bWwudHJpbSgpLmxlbmd0aCA+IDAgJiYgc2RrKSB7XHJcbiAgICAgICAgY29uc3Qgc2NyaXB0VGFnID0gdGhpcy50YWdTZXJ2aWNlLmdldFNjcmlwdEZvclRhZyhvYmplY3QsIHRhZ1R5cGUpO1xyXG4gICAgICAgIGh0bWwgKz0gYCR7c2NyaXB0VGFnfWA7XHJcblxyXG4gICAgICAgIGNvbnN0IHRhZ01vZHVsZSA9IHRoaXMuZ2V0VGFnTW9kdWxlKHNkaywgdGFnSUQpO1xyXG4gICAgICAgIGNvbnN0IFtzYW5kYm94SWQsIG1lc3Nlbmdlcl0gPSBhd2FpdCBzZGsuVGFnLnJlZ2lzdGVyU2FuZGJveChodG1sKTtcclxuXHJcbiAgICAgICAgY29uc3QgYXR0YWNobWVudElEID0gdGhpcy50YWdzQXR0YWNobWVudHNbdGFnSURdO1xyXG4gICAgICAgIGlmIChhdHRhY2htZW50SUQpIHtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRhZ01vZHVsZS5kZXRhY2godGFnSUQsIGF0dGFjaG1lbnRJRCk7XHJcbiAgICAgICAgICB9IGNhdGNoIChlKSB7IH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudGFnc0F0dGFjaG1lbnRzW3RhZ0lEXSA9IHNhbmRib3hJZDtcclxuICAgICAgICBhd2FpdCB0YWdNb2R1bGUuYXR0YWNoKHRhZ0lELCBzYW5kYm94SWQpO1xyXG5cclxuICAgICAgICAvLyBBdHRhY2ggdGhlIFwiVmlldyBpbmZvcm1hdGlvbnNcIiBoYW5kbGVyIGluIHRvb2x0aXBcclxuICAgICAgICBtZXNzZW5nZXIub24oVGFnQWN0aW9uLkRFVEFJTF9DTElDSywgdGhpcy50YWdTZXJ2aWNlLm9uQWN0aW9uRGV0YWlsQ2xpY2suYmluZCh0aGlzLnRhZ1NlcnZpY2UpKTtcclxuICAgICAgICBtZXNzZW5nZXIub24oVGFnQWN0aW9uLlRJQ0tFVF9DTElDSywgdGhpcy50YWdTZXJ2aWNlLm9uQWN0aW9uRGV0YWlsQ2xpY2suYmluZCh0aGlzLnRhZ1NlcnZpY2UpKTtcclxuICAgICAgICBtZXNzZW5nZXIub24oVGFnQWN0aW9uLkFVRElPX0NMSUNLLCAoYXVkaW9Db21tZW50SUQ6IHN0cmluZykgPT4gdGhpcy50YWdTZXJ2aWNlLm9uQWN0aW9uQXVkaW9DbGljayhhdWRpb0NvbW1lbnRJRCkpO1xyXG4gICAgICAgIG1lc3Nlbmdlci5vbihUYWdBY3Rpb24uVklERU9fQ0xJQ0ssICh2aWRlb1VybDogc3RyaW5nKSA9PiB0aGlzLnRhZ1NlcnZpY2Uub25BY3Rpb25WaWRlb0NsaWNrKHZpZGVvVXJsKSk7XHJcbiAgICAgICAgbWVzc2VuZ2VyLm9uKFRhZ0FjdGlvbi5JTUFHRV9DTElDSywgKGltYWdlQ29tbWVudElEOiBzdHJpbmcpID0+IHRoaXMudGFnU2VydmljZS5vbkFjdGlvbkltYWdlQ2xpY2soaW1hZ2VDb21tZW50SUQpKTtcclxuICAgICAgICBtZXNzZW5nZXIub24oVGFnQWN0aW9uLkRPQ19DTElDSywgKGRvY1VybDogc3RyaW5nKSA9PiB0aGlzLnRhZ1NlcnZpY2Uub25BY3Rpb25Eb2NDbGljayhkb2NVcmwpKTtcclxuICAgICAgICBtZXNzZW5nZXIub24oVGFnQWN0aW9uLllPVVRVQkVfQ0xJQ0ssICh5b3V0dWJlVXJsOiBzdHJpbmcpID0+IHRoaXMudGFnU2VydmljZS5vbkFjdGlvbllvdXR1YmVDbGljayh5b3V0dWJlVXJsKSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoc2RrKSB7XHJcbiAgICAgICAgY29uc3QgeyBjb21tZW50LCB0YWdEZXNjcmlwdGlvbiB9ID0gdGhpcy50YWdTZXJ2aWNlLmdldEJpbGxib2FyZE1lZGlhVG9FbWJlZChvYmplY3QpO1xyXG5cclxuICAgICAgICBpZiAoY29tbWVudCkge1xyXG4gICAgICAgICAgY29uc3QgdGFnTW9kdWxlID0gdGhpcy5nZXRUYWdNb2R1bGUoc2RrLCB0YWdJRCk7XHJcbiAgICAgICAgICAvLyAxKSBSZWdpc3RlciB0aGUgbWVkaWEgYXR0YWNobWVudCBieSBwYXNzaW5nIHRoZSBVUkwgc3RyaW5nKHMpLlxyXG4gICAgICAgICAgLy8gICAgcmVnaXN0ZXJBdHRhY2htZW50IHJldHVybnMgYW4gYXJyYXkgb2YgYXR0YWNobWVudCBJRHMuXHJcbiAgICAgICAgICBjb25zdCBbYXR0YWNobWVudElEXSA9IGF3YWl0IHNkay5UYWcucmVnaXN0ZXJBdHRhY2htZW50KGNvbW1lbnQuZXh0ZXJuYWxMaW5rKTtcclxuXHJcbiAgICAgICAgICAvLyAyKSBBdHRhY2ggdGhlIHJlZ2lzdGVyZWQgbWVkaWEgdG8gdGhlIHRhZy5cclxuICAgICAgICAgIGF3YWl0IHRhZ01vZHVsZS5hdHRhY2godGFnSUQsIGF0dGFjaG1lbnRJRCk7XHJcblxyXG4gICAgICAgICAgLy8gMykgRGV0ZXJtaW5lIG1lZGlhIHR5cGUgZm9yIHRoZSBiaWxsYm9hcmQgKFBIT1RPIG9yIFZJREVPKS5cclxuICAgICAgICAgIC8vICAgIFVzZSBhIHNpbXBsZSBoZXVyaXN0aWM6IFlvdVR1YmUvVmltZW8gLT4gVklERU8sIG90aGVyd2lzZSBQSE9UTy5cclxuICAgICAgICAgIC8vICAgIFRoZSBTREsgZXhwb3NlcyBNZWRpYVR5cGUgb24gdGhlIFRhZyBuYW1lc3BhY2UuXHJcbiAgICAgICAgICBjb25zdCBpc1ZpZGVvID0gL3lvdXR1YmVcXC5jb218eW91dHVcXC5iZXx2aW1lb1xcLmNvbS9pLnRlc3QoY29tbWVudC5leHRlcm5hbExpbmspO1xyXG4gICAgICAgICAgY29uc3QgbWVkaWFUeXBlID0gaXNWaWRlbyA/IHNkay5NYXR0ZXJ0YWcuTWVkaWFUeXBlLlZJREVPIDogc2RrLk1hdHRlcnRhZy5NZWRpYVR5cGUuUEhPVE87XHJcblxyXG4gICAgICAgICAgLy8gNCkgVXBkYXRlIHRoZSBiaWxsYm9hcmQgdGV4dCBhbmQgbWVkaWEgdXNpbmcgZWRpdEJpbGxib2FyZC5cclxuICAgICAgICAgIC8vICAgIGVkaXRCaWxsYm9hcmQgYWNjZXB0cyBQYXJ0aWFsPFRhZy5FZGl0YWJsZVByb3BlcnRpZXM+IHN1Y2ggYXMgbGFiZWwsIGRlc2NyaXB0aW9uLCBtZWRpYS5cclxuICAgICAgICAgIGF3YWl0IHRhZ01vZHVsZS5lZGl0QmlsbGJvYXJkKHRhZ0lELCB7XHJcbiAgICAgICAgICAgIGxhYmVsOiBvYmplY3QudGl0bGUgfHwgJ01lZGlhJyxcclxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHRhZ0Rlc2NyaXB0aW9uIHx8ICcnLFxyXG4gICAgICAgICAgICBtZWRpYToge1xyXG4gICAgICAgICAgICAgIHR5cGU6IG1lZGlhVHlwZSxcclxuICAgICAgICAgICAgICBzcmM6IGNvbW1lbnQuZXh0ZXJuYWxMaW5rLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgLy8gNSkgS2VlcCBhIGxvY2FsIHJlZmVyZW5jZVxyXG4gICAgICAgICAgdGhpcy50YWdzQXR0YWNobWVudHNbdGFnSURdID0ge1xyXG4gICAgICAgICAgICBhdHRhY2htZW50SUQsXHJcbiAgICAgICAgICAgIHRpdGxlOiBvYmplY3QudGl0bGUgfHwgJ01lZGlhJyxcclxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHRhZ0Rlc2NyaXB0aW9uIHx8ICcnLFxyXG4gICAgICAgICAgICBtZWRpYVNyYzogY29tbWVudC5leHRlcm5hbExpbmssXHJcbiAgICAgICAgICAgIG1lZGlhVHlwZSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdbTWF0dGVycG9ydFRhZ1NlcnZpY2VdIEVycm9yIGluIGluamVjdEh0bWxJblRhZzonLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogQ2xlYXJzIGFsbCBsb2NhbCB0YWcgZGF0YSBhbmQgcmVzZXRzIHRoZSBhZGRpdGlvbiBxdWV1ZS4gKi9cclxuICBjbGVhcigpIHtcclxuICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLmNsZWFyKCk7XHJcbiAgICB0aGlzLnRhZ3NDdXJyZW50T3BhY2l0eS5jbGVhcigpO1xyXG4gICAgdGhpcy50YWdzQ3VycmVudEVuYWJsZWQuY2xlYXIoKTtcclxuICAgIHRoaXMudGFnc0N1cnJlbnRJY29uLmNsZWFyKCk7XHJcbiAgICB0aGlzLnN0b3BPYnNlcnZpbmdTZGtUYWdzKCk7XHJcbiAgICB0aGlzLnRhZ0FkZFF1ZXVlID0gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICB0aGlzLm1hdHRlcnRhZ1RvRm9sbG93ID0gbnVsbDtcclxuICAgIHRoaXMubWF0dGVydGFnSURzID0gW107XHJcbiAgICAvLyBBIG5ldyBzcGFjZSBtZWFucyBhIG5ldyBTREsgc2Vzc2lvbiwgaGVuY2UgYSBuZXcgc2hhcmVkIGxheWVyIHRvIGNyZWF0ZS5cclxuICAgIHRoaXMuc2hhcmVkVGFnTGF5ZXIgPSBudWxsO1xyXG4gICAgdGhpcy5zaGFyZWRUYWdMYXllclByb21pc2UgPSBudWxsO1xyXG4gIH1cclxufVxyXG4iXX0=