angular-three 2.0.0-beta.21 → 2.0.0-beta.223

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 (109) hide show
  1. package/esm2022/index.mjs +4 -11
  2. package/esm2022/lib/canvas.mjs +81 -156
  3. package/esm2022/lib/directives/args.mjs +6 -6
  4. package/esm2022/lib/directives/common.mjs +15 -14
  5. package/esm2022/lib/directives/parent.mjs +6 -6
  6. package/esm2022/lib/dom/events.mjs +2 -2
  7. package/esm2022/lib/events.mjs +28 -25
  8. package/esm2022/lib/instance.mjs +39 -34
  9. package/esm2022/lib/loader.mjs +12 -14
  10. package/esm2022/lib/loop.mjs +9 -10
  11. package/esm2022/lib/portal.mjs +122 -135
  12. package/esm2022/lib/ref.mjs +18 -20
  13. package/esm2022/lib/renderer/catalogue.mjs +2 -2
  14. package/esm2022/lib/renderer/constants.mjs +2 -2
  15. package/esm2022/lib/renderer/index.mjs +58 -62
  16. package/esm2022/lib/renderer/store.mjs +129 -120
  17. package/esm2022/lib/renderer/utils.mjs +35 -42
  18. package/esm2022/lib/roots.mjs +41 -38
  19. package/esm2022/lib/routed-scene.mjs +6 -7
  20. package/esm2022/lib/store.mjs +163 -189
  21. package/esm2022/lib/utils/apply-props.mjs +12 -17
  22. package/esm2022/lib/utils/attach.mjs +6 -6
  23. package/esm2022/lib/utils/before-render.mjs +12 -0
  24. package/esm2022/lib/utils/cd-aware-signal.mjs +24 -0
  25. package/esm2022/lib/utils/create-api-token.mjs +13 -0
  26. package/esm2022/lib/utils/is.mjs +6 -5
  27. package/esm2022/lib/utils/make.mjs +15 -12
  28. package/esm2022/lib/utils/signal-store.mjs +67 -57
  29. package/esm2022/lib/utils/update.mjs +3 -2
  30. package/fesm2022/angular-three.mjs +1621 -1795
  31. package/fesm2022/angular-three.mjs.map +1 -1
  32. package/index.d.ts +6 -10
  33. package/lib/canvas.d.ts +24 -37
  34. package/lib/directives/common.d.ts +12 -1
  35. package/lib/events.d.ts +2 -2
  36. package/lib/instance.d.ts +19 -10
  37. package/lib/loader.d.ts +13 -4
  38. package/lib/loop.d.ts +6 -29
  39. package/lib/portal.d.ts +18 -26
  40. package/lib/ref.d.ts +0 -1
  41. package/lib/renderer/catalogue.d.ts +5 -1
  42. package/lib/renderer/constants.d.ts +1 -1
  43. package/lib/renderer/index.d.ts +55 -4
  44. package/lib/renderer/store.d.ts +18 -21
  45. package/lib/renderer/utils.d.ts +2 -3
  46. package/lib/roots.d.ts +4 -3
  47. package/lib/store.d.ts +9 -11
  48. package/lib/utils/apply-props.d.ts +0 -1
  49. package/lib/{before-render.d.ts → utils/before-render.d.ts} +1 -1
  50. package/lib/utils/cd-aware-signal.d.ts +4 -0
  51. package/lib/utils/create-api-token.d.ts +23 -0
  52. package/lib/utils/is.d.ts +11 -12
  53. package/lib/utils/make.d.ts +3 -2
  54. package/lib/utils/signal-store.d.ts +16 -3
  55. package/metadata.json +1 -1
  56. package/package.json +30 -11
  57. package/plugin/generators.json +0 -32
  58. package/plugin/src/generators/init/compat.d.ts +1 -3
  59. package/plugin/src/generators/init/files/experience/{experience.component.ts.__tmpl__ → experience.component.ts__tmpl__} +1 -0
  60. package/plugin/src/generators/init/generator.d.ts +2 -5
  61. package/plugin/src/generators/init/generator.js +94 -95
  62. package/plugin/src/generators/init/generator.js.map +1 -1
  63. package/plugin/src/generators/init/schema.json +1 -12
  64. package/plugin/src/generators/utils.js.map +1 -1
  65. package/plugin/src/generators/{versions.d.ts → version.d.ts} +5 -3
  66. package/plugin/src/generators/version.js +18 -0
  67. package/plugin/src/generators/version.js.map +1 -0
  68. package/plugin/src/index.d.ts +0 -3
  69. package/plugin/src/index.js +0 -9
  70. package/plugin/src/index.js.map +1 -1
  71. package/web-types.json +1 -1
  72. package/esm2022/lib/before-render.mjs +0 -13
  73. package/esm2022/lib/directives/key.mjs +0 -29
  74. package/esm2022/lib/directives/repeat.mjs +0 -17
  75. package/esm2022/lib/three-types.mjs +0 -2
  76. package/esm2022/lib/utils/assert-injection-context.mjs +0 -14
  77. package/esm2022/lib/utils/create-injection-token.mjs +0 -47
  78. package/esm2022/lib/utils/safe-detect-changes.mjs +0 -17
  79. package/lib/directives/key.d.ts +0 -10
  80. package/lib/directives/repeat.d.ts +0 -7
  81. package/lib/three-types.d.ts +0 -306
  82. package/lib/utils/assert-injection-context.d.ts +0 -2
  83. package/lib/utils/create-injection-token.d.ts +0 -27
  84. package/lib/utils/safe-detect-changes.d.ts +0 -2
  85. package/plugin/package.json +0 -6
  86. package/plugin/src/generators/init-cannon/compat.d.ts +0 -2
  87. package/plugin/src/generators/init-cannon/compat.js +0 -6
  88. package/plugin/src/generators/init-cannon/compat.js.map +0 -1
  89. package/plugin/src/generators/init-cannon/generator.d.ts +0 -2
  90. package/plugin/src/generators/init-cannon/generator.js +0 -22
  91. package/plugin/src/generators/init-cannon/generator.js.map +0 -1
  92. package/plugin/src/generators/init-cannon/schema.json +0 -6
  93. package/plugin/src/generators/init-postprocessing/compat.d.ts +0 -2
  94. package/plugin/src/generators/init-postprocessing/compat.js +0 -6
  95. package/plugin/src/generators/init-postprocessing/compat.js.map +0 -1
  96. package/plugin/src/generators/init-postprocessing/generator.d.ts +0 -2
  97. package/plugin/src/generators/init-postprocessing/generator.js +0 -20
  98. package/plugin/src/generators/init-postprocessing/generator.js.map +0 -1
  99. package/plugin/src/generators/init-postprocessing/schema.json +0 -6
  100. package/plugin/src/generators/init-soba/compat.d.ts +0 -2
  101. package/plugin/src/generators/init-soba/compat.js +0 -6
  102. package/plugin/src/generators/init-soba/compat.js.map +0 -1
  103. package/plugin/src/generators/init-soba/generator.d.ts +0 -2
  104. package/plugin/src/generators/init-soba/generator.js +0 -26
  105. package/plugin/src/generators/init-soba/generator.js.map +0 -1
  106. package/plugin/src/generators/init-soba/schema.json +0 -6
  107. package/plugin/src/generators/versions.js +0 -16
  108. package/plugin/src/generators/versions.js.map +0 -1
  109. /package/plugin/src/generators/init/files/experience/{experience.component.html.__tmpl__ → experience.component.html__tmpl__} +0 -0
@@ -3,7 +3,7 @@ const DOM_EVENTS = {
3
3
  click: false,
4
4
  contextmenu: false,
5
5
  dblclick: false,
6
- wheel: false,
6
+ wheel: false, // passive wheel errors with OrbitControls
7
7
  pointerdown: true,
8
8
  pointerup: true,
9
9
  pointerleave: true,
@@ -70,4 +70,4 @@ export function createPointerEvents(store) {
70
70
  },
71
71
  };
72
72
  }
73
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZG9tL2V2ZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUEwRCxNQUFNLFdBQVcsQ0FBQztBQUtqRyxNQUFNLFVBQVUsR0FBRztJQUNsQixLQUFLLEVBQUUsS0FBSztJQUNaLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFFBQVEsRUFBRSxLQUFLO0lBQ2YsS0FBSyxFQUFFLEtBQUs7SUFDWixXQUFXLEVBQUUsSUFBSTtJQUNqQixTQUFTLEVBQUUsSUFBSTtJQUNmLFlBQVksRUFBRSxJQUFJO0lBQ2xCLFdBQVcsRUFBRSxJQUFJO0lBQ2pCLGFBQWEsRUFBRSxJQUFJO0lBQ25CLGtCQUFrQixFQUFFLElBQUk7Q0FDZixDQUFDO0FBRVgsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHO0lBQzlCLE9BQU87SUFDUCxhQUFhO0lBQ2IsVUFBVTtJQUNWLFdBQVc7SUFDWCxhQUFhO0lBQ2IsYUFBYTtJQUNiLFlBQVk7SUFDWixjQUFjO0lBQ2QsY0FBYztJQUNkLGFBQWE7SUFDYixlQUFlO0lBQ2YsZUFBZTtJQUNmLE9BQU87Q0FDRSxDQUFDO0FBRVgsTUFBTSxVQUFVLG1CQUFtQixDQUFDLEtBQStCO0lBQ2xFLE1BQU0sRUFBRSxhQUFhLEVBQUUsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFOUMsT0FBTztRQUNOLFFBQVEsRUFBRSxDQUFDO1FBQ1gsT0FBTyxFQUFFLElBQUk7UUFDYixPQUFPLEVBQUUsQ0FBQyxLQUFrQixFQUFFLElBQThCLEVBQUUsRUFBRTtZQUMvRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDekIsdURBQXVEO1lBQ3ZELDRGQUE0RjtZQUM1RixLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzVHLEtBQUssQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVELENBQUM7UUFDRCxTQUFTLEVBQUUsU0FBUztRQUNwQixRQUFRLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFzQixFQUFFLGtCQUFrQixFQUFFLEVBQUU7WUFDdkYsUUFBUSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsYUFBYSxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDakUsT0FBTyxRQUFRLENBQUM7UUFDakIsQ0FBQyxFQUFFLEVBQUUsQ0FBYztRQUNuQixNQUFNLEVBQUUsR0FBRyxFQUFFO1lBQ1osTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDekMsSUFBSSxRQUFRLENBQUMsU0FBUyxFQUFFLGFBQWEsSUFBSSxNQUFNLENBQUMsUUFBUTtnQkFDdkQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNoRSxDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUMsTUFBbUIsRUFBRSxFQUFFO1lBQ2hDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUMxQixLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7WUFFNUIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBRXZDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUNsRCxDQUFDLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBMEIsRUFBRSxFQUFFO2dCQUN0RCxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsU0FBb0MsQ0FBQyxDQUFDO2dCQUNqRSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDL0QsQ0FBQyxDQUNELENBQUM7UUFDSCxDQUFDO1FBQ0QsVUFBVSxFQUFFLEdBQUcsRUFBRTtZQUNoQixNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUMxQyxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUU7Z0JBQ3JCLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQTBCLEVBQUUsRUFBRTtvQkFDcEcsSUFBSSxNQUFNLENBQUMsU0FBUyxZQUFZLFdBQVcsRUFBRTt3QkFDNUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUM7cUJBQzlEO2dCQUNGLENBQUMsQ0FBQyxDQUFDO2dCQUVILFNBQVMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO2FBQ3BDO1FBQ0YsQ0FBQztLQUNELENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlRXZlbnRzLCB0eXBlIE5ndERvbUV2ZW50LCB0eXBlIE5ndEV2ZW50TWFuYWdlciwgdHlwZSBOZ3RFdmVudHMgfSBmcm9tICcuLi9ldmVudHMnO1xuaW1wb3J0IHR5cGUgeyBOZ3RTdGF0ZSB9IGZyb20gJy4uL3N0b3JlJztcbmltcG9ydCB0eXBlIHsgTmd0QW55UmVjb3JkIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBOZ3RTaWduYWxTdG9yZSB9IGZyb20gJy4uL3V0aWxzL3NpZ25hbC1zdG9yZSc7XG5cbmNvbnN0IERPTV9FVkVOVFMgPSB7XG5cdGNsaWNrOiBmYWxzZSxcblx0Y29udGV4dG1lbnU6IGZhbHNlLFxuXHRkYmxjbGljazogZmFsc2UsXG5cdHdoZWVsOiBmYWxzZSwgLy8gcGFzc2l2ZSB3aGVlbCBlcnJvcnMgd2l0aCBPcmJpdENvbnRyb2xzXG5cdHBvaW50ZXJkb3duOiB0cnVlLFxuXHRwb2ludGVydXA6IHRydWUsXG5cdHBvaW50ZXJsZWF2ZTogdHJ1ZSxcblx0cG9pbnRlcm1vdmU6IHRydWUsXG5cdHBvaW50ZXJjYW5jZWw6IHRydWUsXG5cdGxvc3Rwb2ludGVyY2FwdHVyZTogdHJ1ZSxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBzdXBwb3J0ZWRFdmVudHMgPSBbXG5cdCdjbGljaycsXG5cdCdjb250ZXh0bWVudScsXG5cdCdkYmxjbGljaycsXG5cdCdwb2ludGVydXAnLFxuXHQncG9pbnRlcmRvd24nLFxuXHQncG9pbnRlcm92ZXInLFxuXHQncG9pbnRlcm91dCcsXG5cdCdwb2ludGVyZW50ZXInLFxuXHQncG9pbnRlcmxlYXZlJyxcblx0J3BvaW50ZXJtb3ZlJyxcblx0J3BvaW50ZXJtaXNzZWQnLFxuXHQncG9pbnRlcmNhbmNlbCcsXG5cdCd3aGVlbCcsXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUG9pbnRlckV2ZW50cyhzdG9yZTogTmd0U2lnbmFsU3RvcmU8Tmd0U3RhdGU+KTogTmd0RXZlbnRNYW5hZ2VyPEhUTUxFbGVtZW50PiB7XG5cdGNvbnN0IHsgaGFuZGxlUG9pbnRlciB9ID0gY3JlYXRlRXZlbnRzKHN0b3JlKTtcblxuXHRyZXR1cm4ge1xuXHRcdHByaW9yaXR5OiAxLFxuXHRcdGVuYWJsZWQ6IHRydWUsXG5cdFx0Y29tcHV0ZTogKGV2ZW50OiBOZ3REb21FdmVudCwgcm9vdDogTmd0U2lnbmFsU3RvcmU8Tmd0U3RhdGU+KSA9PiB7XG5cdFx0XHRjb25zdCBzdGF0ZSA9IHJvb3QuZ2V0KCk7XG5cdFx0XHQvLyBodHRwczovL2dpdGh1Yi5jb20vcG1uZHJzL3JlYWN0LXRocmVlLWZpYmVyL3B1bGwvNzgyXG5cdFx0XHQvLyBFdmVudHMgdHJpZ2dlciBvdXRzaWRlIG9mIGNhbnZhcyB3aGVuIG1vdmVkLCB1c2Ugb2Zmc2V0WC9ZIGJ5IGRlZmF1bHQgYW5kIGFsbG93IG92ZXJyaWRlc1xuXHRcdFx0c3RhdGUucG9pbnRlci5zZXQoKGV2ZW50Lm9mZnNldFggLyBzdGF0ZS5zaXplLndpZHRoKSAqIDIgLSAxLCAtKGV2ZW50Lm9mZnNldFkgLyBzdGF0ZS5zaXplLmhlaWdodCkgKiAyICsgMSk7XG5cdFx0XHRzdGF0ZS5yYXljYXN0ZXIuc2V0RnJvbUNhbWVyYShzdGF0ZS5wb2ludGVyLCBzdGF0ZS5jYW1lcmEpO1xuXHRcdH0sXG5cdFx0Y29ubmVjdGVkOiB1bmRlZmluZWQsXG5cdFx0aGFuZGxlcnM6IE9iamVjdC5rZXlzKERPTV9FVkVOVFMpLnJlZHVjZSgoaGFuZGxlcnM6IE5ndEFueVJlY29yZCwgc3VwcG9ydGVkRXZlbnROYW1lKSA9PiB7XG5cdFx0XHRoYW5kbGVyc1tzdXBwb3J0ZWRFdmVudE5hbWVdID0gaGFuZGxlUG9pbnRlcihzdXBwb3J0ZWRFdmVudE5hbWUpO1xuXHRcdFx0cmV0dXJuIGhhbmRsZXJzO1xuXHRcdH0sIHt9KSBhcyBOZ3RFdmVudHMsXG5cdFx0dXBkYXRlOiAoKSA9PiB7XG5cdFx0XHRjb25zdCB7IGV2ZW50cywgaW50ZXJuYWwgfSA9IHN0b3JlLmdldCgpO1xuXHRcdFx0aWYgKGludGVybmFsLmxhc3RFdmVudD8ubmF0aXZlRWxlbWVudCAmJiBldmVudHMuaGFuZGxlcnMpXG5cdFx0XHRcdGV2ZW50cy5oYW5kbGVycy5wb2ludGVybW92ZShpbnRlcm5hbC5sYXN0RXZlbnQubmF0aXZlRWxlbWVudCk7XG5cdFx0fSxcblx0XHRjb25uZWN0OiAodGFyZ2V0OiBIVE1MRWxlbWVudCkgPT4ge1xuXHRcdFx0Y29uc3Qgc3RhdGUgPSBzdG9yZS5nZXQoKTtcblx0XHRcdHN0YXRlLmV2ZW50cy5kaXNjb25uZWN0Py4oKTtcblxuXHRcdFx0c3RhdGUuc2V0RXZlbnRzKHsgY29ubmVjdGVkOiB0YXJnZXQgfSk7XG5cblx0XHRcdE9iamVjdC5lbnRyaWVzKHN0YXRlLmV2ZW50cy5oYW5kbGVycyA/PyB7fSkuZm9yRWFjaChcblx0XHRcdFx0KFtldmVudE5hbWUsIGV2ZW50SGFuZGxlcl06IFtzdHJpbmcsIEV2ZW50TGlzdGVuZXJdKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgcGFzc2l2ZSA9IERPTV9FVkVOVFNbZXZlbnROYW1lIGFzIGtleW9mIHR5cGVvZiBET01fRVZFTlRTXTtcblx0XHRcdFx0XHR0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGV2ZW50SGFuZGxlciwgeyBwYXNzaXZlIH0pO1xuXHRcdFx0XHR9LFxuXHRcdFx0KTtcblx0XHR9LFxuXHRcdGRpc2Nvbm5lY3Q6ICgpID0+IHtcblx0XHRcdGNvbnN0IHsgZXZlbnRzLCBzZXRFdmVudHMgfSA9IHN0b3JlLmdldCgpO1xuXHRcdFx0aWYgKGV2ZW50cy5jb25uZWN0ZWQpIHtcblx0XHRcdFx0T2JqZWN0LmVudHJpZXMoZXZlbnRzLmhhbmRsZXJzID8/IHt9KS5mb3JFYWNoKChbZXZlbnROYW1lLCBldmVudEhhbmRsZXJdOiBbc3RyaW5nLCBFdmVudExpc3RlbmVyXSkgPT4ge1xuXHRcdFx0XHRcdGlmIChldmVudHMuY29ubmVjdGVkIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdFx0XHRcdGV2ZW50cy5jb25uZWN0ZWQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGV2ZW50SGFuZGxlcik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRzZXRFdmVudHMoeyBjb25uZWN0ZWQ6IHVuZGVmaW5lZCB9KTtcblx0XHRcdH1cblx0XHR9LFxuXHR9O1xufVxuIl19
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZG9tL2V2ZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUEwRCxNQUFNLFdBQVcsQ0FBQztBQUtqRyxNQUFNLFVBQVUsR0FBRztJQUNsQixLQUFLLEVBQUUsS0FBSztJQUNaLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFFBQVEsRUFBRSxLQUFLO0lBQ2YsS0FBSyxFQUFFLEtBQUssRUFBRSwwQ0FBMEM7SUFDeEQsV0FBVyxFQUFFLElBQUk7SUFDakIsU0FBUyxFQUFFLElBQUk7SUFDZixZQUFZLEVBQUUsSUFBSTtJQUNsQixXQUFXLEVBQUUsSUFBSTtJQUNqQixhQUFhLEVBQUUsSUFBSTtJQUNuQixrQkFBa0IsRUFBRSxJQUFJO0NBQ2YsQ0FBQztBQUVYLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRztJQUM5QixPQUFPO0lBQ1AsYUFBYTtJQUNiLFVBQVU7SUFDVixXQUFXO0lBQ1gsYUFBYTtJQUNiLGFBQWE7SUFDYixZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxhQUFhO0lBQ2IsZUFBZTtJQUNmLGVBQWU7SUFDZixPQUFPO0NBQ0UsQ0FBQztBQUVYLE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxLQUErQjtJQUNsRSxNQUFNLEVBQUUsYUFBYSxFQUFFLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTlDLE9BQU87UUFDTixRQUFRLEVBQUUsQ0FBQztRQUNYLE9BQU8sRUFBRSxJQUFJO1FBQ2IsT0FBTyxFQUFFLENBQUMsS0FBa0IsRUFBRSxJQUE4QixFQUFFLEVBQUU7WUFDL0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3pCLHVEQUF1RDtZQUN2RCw0RkFBNEY7WUFDNUYsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUM1RyxLQUFLLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1RCxDQUFDO1FBQ0QsU0FBUyxFQUFFLFNBQVM7UUFDcEIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBc0IsRUFBRSxrQkFBa0IsRUFBRSxFQUFFO1lBQ3ZGLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ2pFLE9BQU8sUUFBUSxDQUFDO1FBQ2pCLENBQUMsRUFBRSxFQUFFLENBQWM7UUFDbkIsTUFBTSxFQUFFLEdBQUcsRUFBRTtZQUNaLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3pDLElBQUksUUFBUSxDQUFDLFNBQVMsRUFBRSxhQUFhLElBQUksTUFBTSxDQUFDLFFBQVE7Z0JBQ3ZELE1BQU0sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDaEUsQ0FBQztRQUNELE9BQU8sRUFBRSxDQUFDLE1BQW1CLEVBQUUsRUFBRTtZQUNoQyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDMUIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO1lBRTVCLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUV2QyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBMEIsRUFBRSxFQUFFO2dCQUMxRyxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsU0FBb0MsQ0FBQyxDQUFDO2dCQUNqRSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDL0QsQ0FBQyxDQUFDLENBQUM7UUFDSixDQUFDO1FBQ0QsVUFBVSxFQUFFLEdBQUcsRUFBRTtZQUNoQixNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUMxQyxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDdEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBMEIsRUFBRSxFQUFFO29CQUNwRyxJQUFJLE1BQU0sQ0FBQyxTQUFTLFlBQVksV0FBVyxFQUFFLENBQUM7d0JBQzdDLE1BQU0sQ0FBQyxTQUFTLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDO29CQUMvRCxDQUFDO2dCQUNGLENBQUMsQ0FBQyxDQUFDO2dCQUVILFNBQVMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1lBQ3JDLENBQUM7UUFDRixDQUFDO0tBQ0QsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVFdmVudHMsIHR5cGUgTmd0RG9tRXZlbnQsIHR5cGUgTmd0RXZlbnRNYW5hZ2VyLCB0eXBlIE5ndEV2ZW50cyB9IGZyb20gJy4uL2V2ZW50cyc7XG5pbXBvcnQgdHlwZSB7IE5ndFN0YXRlIH0gZnJvbSAnLi4vc3RvcmUnO1xuaW1wb3J0IHR5cGUgeyBOZ3RBbnlSZWNvcmQgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IE5ndFNpZ25hbFN0b3JlIH0gZnJvbSAnLi4vdXRpbHMvc2lnbmFsLXN0b3JlJztcblxuY29uc3QgRE9NX0VWRU5UUyA9IHtcblx0Y2xpY2s6IGZhbHNlLFxuXHRjb250ZXh0bWVudTogZmFsc2UsXG5cdGRibGNsaWNrOiBmYWxzZSxcblx0d2hlZWw6IGZhbHNlLCAvLyBwYXNzaXZlIHdoZWVsIGVycm9ycyB3aXRoIE9yYml0Q29udHJvbHNcblx0cG9pbnRlcmRvd246IHRydWUsXG5cdHBvaW50ZXJ1cDogdHJ1ZSxcblx0cG9pbnRlcmxlYXZlOiB0cnVlLFxuXHRwb2ludGVybW92ZTogdHJ1ZSxcblx0cG9pbnRlcmNhbmNlbDogdHJ1ZSxcblx0bG9zdHBvaW50ZXJjYXB0dXJlOiB0cnVlLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IHN1cHBvcnRlZEV2ZW50cyA9IFtcblx0J2NsaWNrJyxcblx0J2NvbnRleHRtZW51Jyxcblx0J2RibGNsaWNrJyxcblx0J3BvaW50ZXJ1cCcsXG5cdCdwb2ludGVyZG93bicsXG5cdCdwb2ludGVyb3ZlcicsXG5cdCdwb2ludGVyb3V0Jyxcblx0J3BvaW50ZXJlbnRlcicsXG5cdCdwb2ludGVybGVhdmUnLFxuXHQncG9pbnRlcm1vdmUnLFxuXHQncG9pbnRlcm1pc3NlZCcsXG5cdCdwb2ludGVyY2FuY2VsJyxcblx0J3doZWVsJyxcbl0gYXMgY29uc3Q7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQb2ludGVyRXZlbnRzKHN0b3JlOiBOZ3RTaWduYWxTdG9yZTxOZ3RTdGF0ZT4pOiBOZ3RFdmVudE1hbmFnZXI8SFRNTEVsZW1lbnQ+IHtcblx0Y29uc3QgeyBoYW5kbGVQb2ludGVyIH0gPSBjcmVhdGVFdmVudHMoc3RvcmUpO1xuXG5cdHJldHVybiB7XG5cdFx0cHJpb3JpdHk6IDEsXG5cdFx0ZW5hYmxlZDogdHJ1ZSxcblx0XHRjb21wdXRlOiAoZXZlbnQ6IE5ndERvbUV2ZW50LCByb290OiBOZ3RTaWduYWxTdG9yZTxOZ3RTdGF0ZT4pID0+IHtcblx0XHRcdGNvbnN0IHN0YXRlID0gcm9vdC5nZXQoKTtcblx0XHRcdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wbW5kcnMvcmVhY3QtdGhyZWUtZmliZXIvcHVsbC83ODJcblx0XHRcdC8vIEV2ZW50cyB0cmlnZ2VyIG91dHNpZGUgb2YgY2FudmFzIHdoZW4gbW92ZWQsIHVzZSBvZmZzZXRYL1kgYnkgZGVmYXVsdCBhbmQgYWxsb3cgb3ZlcnJpZGVzXG5cdFx0XHRzdGF0ZS5wb2ludGVyLnNldCgoZXZlbnQub2Zmc2V0WCAvIHN0YXRlLnNpemUud2lkdGgpICogMiAtIDEsIC0oZXZlbnQub2Zmc2V0WSAvIHN0YXRlLnNpemUuaGVpZ2h0KSAqIDIgKyAxKTtcblx0XHRcdHN0YXRlLnJheWNhc3Rlci5zZXRGcm9tQ2FtZXJhKHN0YXRlLnBvaW50ZXIsIHN0YXRlLmNhbWVyYSk7XG5cdFx0fSxcblx0XHRjb25uZWN0ZWQ6IHVuZGVmaW5lZCxcblx0XHRoYW5kbGVyczogT2JqZWN0LmtleXMoRE9NX0VWRU5UUykucmVkdWNlKChoYW5kbGVyczogTmd0QW55UmVjb3JkLCBzdXBwb3J0ZWRFdmVudE5hbWUpID0+IHtcblx0XHRcdGhhbmRsZXJzW3N1cHBvcnRlZEV2ZW50TmFtZV0gPSBoYW5kbGVQb2ludGVyKHN1cHBvcnRlZEV2ZW50TmFtZSk7XG5cdFx0XHRyZXR1cm4gaGFuZGxlcnM7XG5cdFx0fSwge30pIGFzIE5ndEV2ZW50cyxcblx0XHR1cGRhdGU6ICgpID0+IHtcblx0XHRcdGNvbnN0IHsgZXZlbnRzLCBpbnRlcm5hbCB9ID0gc3RvcmUuZ2V0KCk7XG5cdFx0XHRpZiAoaW50ZXJuYWwubGFzdEV2ZW50Py5uYXRpdmVFbGVtZW50ICYmIGV2ZW50cy5oYW5kbGVycylcblx0XHRcdFx0ZXZlbnRzLmhhbmRsZXJzLnBvaW50ZXJtb3ZlKGludGVybmFsLmxhc3RFdmVudC5uYXRpdmVFbGVtZW50KTtcblx0XHR9LFxuXHRcdGNvbm5lY3Q6ICh0YXJnZXQ6IEhUTUxFbGVtZW50KSA9PiB7XG5cdFx0XHRjb25zdCBzdGF0ZSA9IHN0b3JlLmdldCgpO1xuXHRcdFx0c3RhdGUuZXZlbnRzLmRpc2Nvbm5lY3Q/LigpO1xuXG5cdFx0XHRzdGF0ZS5zZXRFdmVudHMoeyBjb25uZWN0ZWQ6IHRhcmdldCB9KTtcblxuXHRcdFx0T2JqZWN0LmVudHJpZXMoc3RhdGUuZXZlbnRzLmhhbmRsZXJzID8/IHt9KS5mb3JFYWNoKChbZXZlbnROYW1lLCBldmVudEhhbmRsZXJdOiBbc3RyaW5nLCBFdmVudExpc3RlbmVyXSkgPT4ge1xuXHRcdFx0XHRjb25zdCBwYXNzaXZlID0gRE9NX0VWRU5UU1tldmVudE5hbWUgYXMga2V5b2YgdHlwZW9mIERPTV9FVkVOVFNdO1xuXHRcdFx0XHR0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGV2ZW50SGFuZGxlciwgeyBwYXNzaXZlIH0pO1xuXHRcdFx0fSk7XG5cdFx0fSxcblx0XHRkaXNjb25uZWN0OiAoKSA9PiB7XG5cdFx0XHRjb25zdCB7IGV2ZW50cywgc2V0RXZlbnRzIH0gPSBzdG9yZS5nZXQoKTtcblx0XHRcdGlmIChldmVudHMuY29ubmVjdGVkKSB7XG5cdFx0XHRcdE9iamVjdC5lbnRyaWVzKGV2ZW50cy5oYW5kbGVycyA/PyB7fSkuZm9yRWFjaCgoW2V2ZW50TmFtZSwgZXZlbnRIYW5kbGVyXTogW3N0cmluZywgRXZlbnRMaXN0ZW5lcl0pID0+IHtcblx0XHRcdFx0XHRpZiAoZXZlbnRzLmNvbm5lY3RlZCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRcdFx0XHRldmVudHMuY29ubmVjdGVkLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBldmVudEhhbmRsZXIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0c2V0RXZlbnRzKHsgY29ubmVjdGVkOiB1bmRlZmluZWQgfSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0fTtcbn1cbiJdfQ==
@@ -17,7 +17,7 @@ function releaseInternalPointerCapture(capturedMap, obj, captures, pointerId) {
17
17
  }
18
18
  }
19
19
  export function removeInteractivity(store, object) {
20
- const { internal } = store.get();
20
+ const { internal } = store.snapshot;
21
21
  // Removes every trace of an object from the data store
22
22
  internal.interaction = internal.interaction.filter((o) => o !== object);
23
23
  internal.initialHits = internal.initialHits.filter((o) => o !== object);
@@ -43,7 +43,7 @@ export function createEvents(store) {
43
43
  function filterPointerEvents(objects) {
44
44
  return objects.filter((obj) => ['move', 'over', 'enter', 'out', 'leave'].some((name) => {
45
45
  const eventName = `pointer${name}`;
46
- return getLocalState(obj).handlers?.[eventName];
46
+ return getLocalState(obj)?.handlers?.[eventName];
47
47
  }));
48
48
  }
49
49
  function intersect(event, filter) {
@@ -54,7 +54,7 @@ export function createEvents(store) {
54
54
  const eventsObjects = filter ? filter(state.internal.interaction) : state.internal.interaction;
55
55
  // Reset all raycaster cameras to undefined
56
56
  for (let i = 0; i < eventsObjects.length; i++) {
57
- const state = getLocalState(eventsObjects[i]).store.get();
57
+ const state = getLocalState(eventsObjects[i])?.store.snapshot;
58
58
  if (state) {
59
59
  state.raycaster.camera = undefined;
60
60
  }
@@ -65,8 +65,8 @@ export function createEvents(store) {
65
65
  }
66
66
  function handleRaycast(obj) {
67
67
  const objLocalState = getLocalState(obj);
68
- const objStore = objLocalState.store;
69
- const objState = objStore?.get();
68
+ const objStore = objLocalState?.store;
69
+ const objState = objStore?.snapshot;
70
70
  // Skip event handling when noEvents is set, or when the raycasters camera is null
71
71
  if (!objState || !objState.events.enabled || objState.raycaster.camera === null)
72
72
  return [];
@@ -86,8 +86,8 @@ export function createEvents(store) {
86
86
  .flatMap(handleRaycast)
87
87
  // Sort by event priority and distance
88
88
  .sort((a, b) => {
89
- const aState = getLocalState(a.object).store.get();
90
- const bState = getLocalState(b.object).store.get();
89
+ const aState = getLocalState(a.object)?.store?.snapshot;
90
+ const bState = getLocalState(b.object)?.store?.snapshot;
91
91
  if (!aState || !bState)
92
92
  return a.distance - b.distance;
93
93
  return bState.events.priority - aState.events.priority || a.distance - b.distance;
@@ -109,7 +109,7 @@ export function createEvents(store) {
109
109
  let eventObject = hit.object;
110
110
  // bubble event up
111
111
  while (eventObject) {
112
- if (getLocalState(eventObject).eventCount) {
112
+ if (getLocalState(eventObject)?.eventCount) {
113
113
  intersections.push({ ...hit, eventObject });
114
114
  }
115
115
  eventObject = eventObject.parent;
@@ -117,7 +117,7 @@ export function createEvents(store) {
117
117
  }
118
118
  // If the interaction is captured, make all capturing targets part of the intersect.
119
119
  if ('pointerId' in event && state.internal.capturedMap.has(event.pointerId)) {
120
- for (let captureData of state.internal.capturedMap.get(event.pointerId).values()) {
120
+ for (const captureData of state.internal.capturedMap.get(event.pointerId).values()) {
121
121
  if (!duplicates.has(makeId(captureData.intersection)))
122
122
  intersections.push(captureData.intersection);
123
123
  }
@@ -126,13 +126,12 @@ export function createEvents(store) {
126
126
  }
127
127
  /** Handles intersections by forwarding them to handlers */
128
128
  function handleIntersects(intersections, event, delta, callback) {
129
- const rootState = store.get();
129
+ const rootState = store.snapshot;
130
130
  // If anything has been found, forward it to the event listeners
131
131
  if (intersections.length) {
132
132
  const localState = { stopped: false };
133
133
  for (const hit of intersections) {
134
- const state = getLocalState(hit.object).store?.get() || rootState;
135
- const { raycaster, pointer, camera, internal } = state;
134
+ const { raycaster, pointer, camera, internal } = getLocalState(hit.object)?.store?.snapshot || rootState;
136
135
  const unprojectedPoint = new THREE.Vector3(pointer.x, pointer.y, 0).unproject(camera);
137
136
  const hasPointerCapture = (id) => internal.capturedMap.get(id)?.has(hit.eventObject) ?? false;
138
137
  const setPointerCapture = (id) => {
@@ -160,8 +159,8 @@ export function createEvents(store) {
160
159
  // Add native event props
161
160
  const extractEventProps = {};
162
161
  // This iterates over the event's properties including the inherited ones. Native PointerEvents have most of their props as getters which are inherited, but polyfilled PointerEvents have them all as their own properties (i.e. not inherited). We can't use Object.keys() or Object.entries() as they only return "own" properties; nor Object.getPrototypeOf(event) as that *doesn't* return "own" properties, only inherited ones.
163
- for (let prop in event) {
164
- let property = event[prop];
162
+ for (const prop in event) {
163
+ const property = event[prop];
165
164
  // Only copy over atomics, leave functions alone as these should be
166
165
  // called as event.nativeEvent.fn()
167
166
  if (typeof property !== 'function')
@@ -207,7 +206,7 @@ export function createEvents(store) {
207
206
  // Call subscribers
208
207
  callback(raycastEvent);
209
208
  // Event bubbling may be interrupted by stopPropagation
210
- if (localState.stopped === true)
209
+ if (localState.stopped)
211
210
  break;
212
211
  }
213
212
  }
@@ -249,12 +248,19 @@ export function createEvents(store) {
249
248
  return () => cancelPointer([]);
250
249
  case 'lostpointercapture':
251
250
  return (event) => {
252
- const { internal } = store.get();
251
+ const { internal } = store.snapshot;
253
252
  if ('pointerId' in event && internal.capturedMap.has(event.pointerId)) {
254
- // If the object event interface had onLostPointerCapture, we'd call it here on every
255
- // object that's getting removed.
256
- internal.capturedMap.delete(event.pointerId);
257
- cancelPointer([]);
253
+ // If the object event interface had lostpointercapture, we'd call it here on every
254
+ // object that's getting removed. We call it on the next frame because lostpointercapture
255
+ // fires before pointerup. Otherwise pointerUp would never be called if the event didn't
256
+ // happen in the object it originated from, leaving components in a in-between state.
257
+ requestAnimationFrame(() => {
258
+ // Only release if pointer-up didn't do it already
259
+ if (internal.capturedMap.has(event.pointerId)) {
260
+ internal.capturedMap.delete(event.pointerId);
261
+ cancelPointer([]);
262
+ }
263
+ });
258
264
  }
259
265
  };
260
266
  }
@@ -309,10 +315,7 @@ export function createEvents(store) {
309
315
  }*/
310
316
  if (isPointerMove) {
311
317
  // Move event ...
312
- if (handlers?.pointerover ||
313
- handlers?.pointerenter ||
314
- handlers?.pointerout ||
315
- handlers?.pointerleave) {
318
+ if (handlers?.pointerover || handlers?.pointerenter || handlers?.pointerout || handlers?.pointerleave) {
316
319
  // When enter or out is present take care of hover-state
317
320
  const id = makeId(data);
318
321
  const hoveredItem = internal.hovered.get(id);
@@ -356,4 +359,4 @@ export function createEvents(store) {
356
359
  }
357
360
  return { handlePointer };
358
361
  }
359
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZXZlbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQy9CLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFHM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQTBGdEM7OztHQUdHO0FBQ0gsU0FBUyw2QkFBNkIsQ0FDckMsV0FBc0UsRUFDdEUsR0FBbUIsRUFDbkIsUUFBc0QsRUFDdEQsU0FBaUI7SUFFakIsTUFBTSxXQUFXLEdBQXdDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0UsSUFBSSxXQUFXLEVBQUU7UUFDaEIsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQix5REFBeUQ7UUFDekQsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtZQUN4QixXQUFXLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzlCLFdBQVcsQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDcEQ7S0FDRDtBQUNGLENBQUM7QUFFRCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsS0FBK0IsRUFBRSxNQUFzQjtJQUMxRixNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ2pDLHVEQUF1RDtJQUN2RCxRQUFRLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUM7SUFDeEUsUUFBUSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFB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LENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FDL0UsQ0FBQzs0QkFDRix1QkFBdUI7NEJBQ3ZCLE9BQU8sQ0FBQyxJQUFtQyxDQUFDLENBQUM7eUJBQzdDO3FCQUNEO3lCQUFNO3dCQUNOLDZHQUE2Rzt3QkFDN0csSUFBSSxZQUFZLElBQUksUUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUU7NEJBQy9ELGFBQWEsQ0FDWixLQUFLLEVBQ0wsUUFBUSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FDL0UsQ0FBQzt5QkFDRjtxQkFDRDtpQkFDRDtZQUNGLENBQUM7WUFFRCxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNuRCxDQUFDLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxDQUFDO0FBQzFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBnZXRMb2NhbFN0YXRlIH0gZnJvbSAnLi9pbnN0YW5jZSc7XG5pbXBvcnQgdHlwZSB7IE5ndFN0YXRlIH0gZnJvbSAnLi9zdG9yZSc7XG5pbXBvcnQgdHlwZSB7IE5ndEFueVJlY29yZCwgTmd0UHJvcGVydGllcyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgbWFrZUlkIH0gZnJvbSAnLi91dGlscy9tYWtlJztcbmltcG9ydCB0eXBlIHsgTmd0U2lnbmFsU3RvcmUgfSBmcm9tICcuL3V0aWxzL3NpZ25hbC1zdG9yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0SW50ZXJzZWN0aW9uIGV4dGVuZHMgVEhSRUUuSW50ZXJzZWN0aW9uIHtcblx0LyoqIFRoZSBldmVudCBzb3VyY2UgKHRoZSBvYmplY3Qgd2hpY2ggcmVnaXN0ZXJlZCB0aGUgaGFuZGxlcikgKi9cblx0ZXZlbnRPYmplY3Q6IFRIUkVFLk9iamVjdDNEO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ndEludGVyc2VjdGlvbkV2ZW50PFRTb3VyY2VFdmVudD4gZXh0ZW5kcyBOZ3RJbnRlcnNlY3Rpb24ge1xuXHQvKiogVGhlIGV2ZW50IHNvdXJjZSAodGhlIG9iamVjdCB3aGljaCByZWdpc3RlcmVkIHRoZSBoYW5kbGVyKSAqL1xuXHRldmVudE9iamVjdDogVEhSRUUuT2JqZWN0M0Q7XG5cdC8qKiBBbiBhcnJheSBvZiBpbnRlcnNlY3Rpb25zICovXG5cdGludGVyc2VjdGlvbnM6IE5ndEludGVyc2VjdGlvbltdO1xuXHQvKiogdmVjMy5zZXQocG9pbnRlci54LCBwb2ludGVyLnksIDApLnVucHJvamVjdChjYW1lcmEpICovXG5cdHVucHJvamVjdGVkUG9pbnQ6IFRIUkVFLlZlY3RvcjM7XG5cdC8qKiBOb3JtYWxpemVkIGV2ZW50IGNvb3JkaW5hdGVzICovXG5cdHBvaW50ZXI6IFRIUkVFLlZlY3RvcjI7XG5cdC8qKiBEZWx0YSBiZXR3ZWVuIGZpcnN0IGNsaWNrIGFuZCB0aGlzIGV2ZW50ICovXG5cdGRlbHRhOiBudW1iZXI7XG5cdC8qKiBUaGUgcmF5IHRoYXQgcGllcmNlZCBpdCAqL1xuXHRyYXk6IFRIUkVFLlJheTtcblx0LyoqIFRoZSBjYW1lcmEgdGhhdCB3YXMgdXNlZCBieSB0aGUgcmF5Y2FzdGVyICovXG5cdGNhbWVyYTogTmd0Q2FtZXJhO1xuXHQvKiogc3RvcFByb3BhZ2F0aW9uIHdpbGwgc3RvcCB1bmRlcmx5aW5nIGhhbmRsZXJzIGZyb20gZmlyaW5nICovXG5cdHN0b3BQcm9wYWdhdGlvbjogKCkgPT4gdm9pZDtcblx0LyoqIFRoZSBvcmlnaW5hbCBob3N0IGV2ZW50ICovXG5cdG5hdGl2ZUV2ZW50OiBUU291cmNlRXZlbnQ7XG5cdC8qKiBJZiB0aGUgZXZlbnQgd2FzIHN0b3BwZWQgYnkgY2FsbGluZyBzdG9wUHJvcGFnYXRpb24gKi9cblx0c3RvcHBlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgTmd0Q2FtZXJhID0gVEhSRUUuT3J0aG9ncmFwaGljQ2FtZXJhIHwgVEhSRUUuUGVyc3BlY3RpdmVDYW1lcmE7XG5leHBvcnQgdHlwZSBOZ3RUaHJlZUV2ZW50PFRFdmVudD4gPSBOZ3RJbnRlcnNlY3Rpb25FdmVudDxURXZlbnQ+ICYgTmd0UHJvcGVydGllczxURXZlbnQ+O1xuZXhwb3J0IHR5cGUgTmd0RG9tRXZlbnQgPSBQb2ludGVyRXZlbnQgfCBNb3VzZUV2ZW50IHwgV2hlZWxFdmVudDtcblxuZXhwb3J0IHR5cGUgTmd0RXZlbnRIYW5kbGVycyA9IHtcblx0Y2xpY2s/OiAoZXZlbnQ6IE5ndFRocmVlRXZlbnQ8TW91c2VFdmVudD4pID0+IHZvaWQ7XG5cdGNvbnRleHRtZW51PzogKGV2ZW50OiBOZ3RUaHJlZUV2ZW50PE1vdXNlRXZlbnQ+KSA9PiB2b2lkO1xuXHRkYmxjbGljaz86IChldmVudDogTmd0VGhyZWVFdmVudDxNb3VzZUV2ZW50PikgPT4gdm9pZDtcblx0cG9pbnRlcnVwPzogKGV2ZW50OiBOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4pID0+IHZvaWQ7XG5cdHBvaW50ZXJkb3duPzogKGV2ZW50OiBOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4pID0+IHZvaWQ7XG5cdHBvaW50ZXJvdmVyPzogKGV2ZW50OiBOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4pID0+IHZvaWQ7XG5cdHBvaW50ZXJvdXQ/OiAoZXZlbnQ6IE5ndFRocmVlRXZlbnQ8UG9pbnRlckV2ZW50PikgPT4gdm9pZDtcblx0cG9pbnRlcmVudGVyPzogKGV2ZW50OiBOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4pID0+IHZvaWQ7XG5cdHBvaW50ZXJsZWF2ZT86IChldmVudDogTmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+KSA9PiB2b2lkO1xuXHRwb2ludGVybW92ZT86IChldmVudDogTmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+KSA9PiB2b2lkO1xuXHRwb2ludGVybWlzc2VkPzogKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB2b2lkO1xuXHRwb2ludGVyY2FuY2VsPzogKGV2ZW50OiBOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4pID0+IHZvaWQ7XG5cdHdoZWVsPzogKGV2ZW50OiBOZ3RUaHJlZUV2ZW50PFdoZWVsRXZlbnQ+KSA9PiB2b2lkO1xufTtcblxuZXhwb3J0IHR5cGUgTmd0RXZlbnRzID0ge1xuXHRbVEV2ZW50IGluIGtleW9mIE5ndEV2ZW50SGFuZGxlcnNdLT86IEV2ZW50TGlzdGVuZXI7XG59O1xuXG5leHBvcnQgdHlwZSBOZ3RGaWx0ZXJGdW5jdGlvbiA9IChpdGVtczogVEhSRUUuSW50ZXJzZWN0aW9uW10sIHN0b3JlOiBOZ3RTaWduYWxTdG9yZTxOZ3RTdGF0ZT4pID0+IFRIUkVFLkludGVyc2VjdGlvbltdO1xuZXhwb3J0IHR5cGUgTmd0Q29tcHV0ZUZ1bmN0aW9uID0gKFxuXHRldmVudDogTmd0RG9tRXZlbnQsXG5cdHJvb3Q6IE5ndFNpZ25hbFN0b3JlPE5ndFN0YXRlPixcblx0cHJldmlvdXM6IE5ndFNpZ25hbFN0b3JlPE5ndFN0YXRlPiB8IG51bGwsXG4pID0+IHZvaWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0RXZlbnRNYW5hZ2VyPFRUYXJnZXQ+IHtcblx0LyoqIERldGVybWluZXMgaWYgdGhlIGV2ZW50IGxheWVyIGlzIGFjdGl2ZSAqL1xuXHRlbmFibGVkOiBib29sZWFuO1xuXHQvKiogRXZlbnQgbGF5ZXIgcHJpb3JpdHksIGhpZ2hlciBwcmlvcml0aXplZCBsYXllcnMgY29tZSBmaXJzdCBhbmQgbWF5IHN0b3AoLXByb3BhZ2F0ZSkgbG93ZXIgbGF5ZXIgICovXG5cdHByaW9yaXR5OiBudW1iZXI7XG5cdC8qKiBUaGUgY29tcHV0ZSBmdW5jdGlvbiBuZWVkcyB0byBzZXQgdXAgdGhlIHJheWNhc3RlciBhbmQgYW4geHktIHBvaW50ZXIgICovXG5cdGNvbXB1dGU/OiBOZ3RDb21wdXRlRnVuY3Rpb247XG5cdC8qKiBUaGUgZmlsdGVyIGNhbiByZS1vcmRlciBvciByZS1zdHJ1Y3R1cmUgdGhlIGludGVyc2VjdGlvbnMgICovXG5cdGZpbHRlcj86IE5ndEZpbHRlckZ1bmN0aW9uO1xuXHQvKiogVGhlIHRhcmdldCBub2RlIHRoZSBldmVudCBsYXllciBpcyB0aWVkIHRvICovXG5cdGNvbm5lY3RlZD86IFRUYXJnZXQ7XG5cdC8qKiBBbGwgdGhlIHBvaW50ZXIgZXZlbnQgaGFuZGxlcnMgdGhyb3VnaCB3aGljaCB0aGUgaG9zdCBmb3J3YXJkcyBuYXRpdmUgZXZlbnRzICovXG5cdGhhbmRsZXJzPzogTmd0RXZlbnRzO1xuXHQvKiogQWxsb3dzIHJlLWNvbm5lY3RpbmcgdG8gYW5vdGhlciB0YXJnZXQgKi9cblx0Y29ubmVjdD86ICh0YXJnZXQ6IFRUYXJnZXQpID0+IHZvaWQ7XG5cdC8qKiBSZW1vdmVzIGFsbCBleGlzdGluZyBldmVudHMgaGFuZGxlcnMgZnJvbSB0aGUgdGFyZ2V0ICovXG5cdGRpc2Nvbm5lY3Q/OiAoKSA9PiB2b2lkO1xuXHQvKiogVHJpZ2dlcnMgYSBvblBvaW50ZXJNb3ZlIHdpdGggdGhlIGxhc3Qga25vd24gZXZlbnQuIFRoaXMgY2FuIGJlIHVzZWZ1bCB0byBlbmFibGUgcmF5Y2FzdGluZyB3aXRob3V0XG5cdCAqICBleHBsaWNpdCB1c2VyIGludGVyYWN0aW9uLCBmb3IgaW5zdGFuY2Ugd2hlbiB0aGUgY2FtZXJhIG1vdmVzIGEgaG92ZXJhYmxlIG9iamVjdCB1bmRlcm5lYXRoIHRoZSBjdXJzb3IuXG5cdCAqL1xuXHR1cGRhdGU/OiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ndFBvaW50ZXJDYXB0dXJlVGFyZ2V0IHtcblx0aW50ZXJzZWN0aW9uOiBOZ3RJbnRlcnNlY3Rpb247XG5cdHRhcmdldDogRWxlbWVudDtcbn1cblxuLyoqXG4gKiBSZWxlYXNlIHBvaW50ZXIgY2FwdHVyZXMuXG4gKiBUaGlzIGlzIGNhbGxlZCBieSByZWxlYXNlUG9pbnRlckNhcHR1cmUgaW4gdGhlIEFQSSwgYW5kIHdoZW4gYW4gb2JqZWN0IGlzIHJlbW92ZWQuXG4gKi9cbmZ1bmN0aW9uIHJlbGVhc2VJbnRlcm5hbFBvaW50ZXJDYXB0dXJlKFxuXHRjYXB0dXJlZE1hcDogTWFwPG51bWJlciwgTWFwPFRIUkVFLk9iamVjdDNELCBOZ3RQb2ludGVyQ2FwdHVyZVRhcmdldD4+LFxuXHRvYmo6IFRIUkVFLk9iamVjdDNELFxuXHRjYXB0dXJlczogTWFwPFRIUkVFLk9iamVjdDNELCBOZ3RQb2ludGVyQ2FwdHVyZVRhcmdldD4sXG5cdHBvaW50ZXJJZDogbnVtYmVyLFxuKTogdm9pZCB7XG5cdGNvbnN0IGNhcHR1cmVEYXRhOiBOZ3RQb2ludGVyQ2FwdHVyZVRhcmdldCB8IHVuZGVmaW5lZCA9IGNhcHR1cmVzLmdldChvYmopO1xuXHRpZiAoY2FwdHVyZURhdGEpIHtcblx0XHRjYXB0dXJlcy5kZWxldGUob2JqKTtcblx0XHQvLyBJZiB0aGlzIHdhcyB0aGUgbGFzdCBjYXB0dXJpbmcgb2JqZWN0IGZvciB0aGlzIHBvaW50ZXJcblx0XHRpZiAoY2FwdHVyZXMuc2l6ZSA9PT0gMCkge1xuXHRcdFx0Y2FwdHVyZWRNYXAuZGVsZXRlKHBvaW50ZXJJZCk7XG5cdFx0XHRjYXB0dXJlRGF0YS50YXJnZXQucmVsZWFzZVBvaW50ZXJDYXB0dXJlKHBvaW50ZXJJZCk7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVJbnRlcmFjdGl2aXR5KHN0b3JlOiBOZ3RTaWduYWxTdG9yZTxOZ3RTdGF0ZT4sIG9iamVjdDogVEhSRUUuT2JqZWN0M0QpIHtcblx0Y29uc3QgeyBpbnRlcm5hbCB9ID0gc3RvcmUuZ2V0KCk7XG5cdC8vIFJlbW92ZXMgZXZlcnkgdHJhY2Ugb2YgYW4gb2JqZWN0IGZyb20gdGhlIGRhdGEgc3RvcmVcblx0aW50ZXJuYWwuaW50ZXJhY3Rpb24gPSBpbnRlcm5hbC5pbnRlcmFjdGlvbi5maWx0ZXIoKG8pID0+IG8gIT09IG9iamVjdCk7XG5cdGludGVybmFsLmluaXRpYWxIaXRzID0gaW50ZXJuYWwuaW5pdGlhbEhpdHMuZmlsdGVyKChvKSA9PiBvICE9PSBvYmplY3QpO1xuXHRpbnRlcm5hbC5ob3ZlcmVkLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcblx0XHRpZiAodmFsdWUuZXZlbnRPYmplY3QgPT09IG9iamVjdCB8fCB2YWx1ZS5vYmplY3QgPT09IG9iamVjdCkge1xuXHRcdFx0Ly8gQ2xlYXIgb3V0IGludGVyc2VjdHMsIHRoZXkgYXJlIG91dGRhdGVkIGJ5IG5vd1xuXHRcdFx0aW50ZXJuYWwuaG92ZXJlZC5kZWxldGUoa2V5KTtcblx0XHR9XG5cdH0pO1xuXHRpbnRlcm5hbC5jYXB0dXJlZE1hcC5mb3JFYWNoKChjYXB0dXJlcywgcG9pbnRlcklkKSA9PiB7XG5cdFx0cmVsZWFzZUludGVybmFsUG9pbnRlckNhcHR1cmUoaW50ZXJuYWwuY2FwdHVyZWRNYXAsIG9iamVjdCwgY2FwdHVyZXMsIHBvaW50ZXJJZCk7XG5cdH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRXZlbnRzKHN0b3JlOiBOZ3RTaWduYWxTdG9yZTxOZ3RTdGF0ZT4pIHtcblx0LyoqIENhbGN1bGF0ZXMgZGVsdGEgKi9cblx0ZnVuY3Rpb24gY2FsY3VsYXRlRGlzdGFuY2UoZXZlbnQ6IE5ndERvbUV2ZW50KSB7XG5cdFx0Y29uc3QgaW50ZXJuYWwgPSBzdG9yZS5nZXQoJ2ludGVybmFsJyk7XG5cdFx0Y29uc3QgZHggPSBldmVudC5vZmZzZXRYIC0gaW50ZXJuYWwuaW5pdGlhbENsaWNrWzBdO1xuXHRcdGNvbnN0IGR5ID0gZXZlbnQub2Zmc2V0WSAtIGludGVybmFsLmluaXRpYWxDbGlja1sxXTtcblx0XHRyZXR1cm4gTWF0aC5yb3VuZChNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpKTtcblx0fVxuXG5cdC8qKiBSZXR1cm5zIHRydWUgaWYgYW4gaW5zdGFuY2UgaGFzIGEgdmFsaWQgcG9pbnRlci1ldmVudCByZWdpc3RlcmVkLCB0aGlzIGV4Y2x1ZGVzIHNjcm9sbCwgY2xpY2tzIGV0YyAqL1xuXHRmdW5jdGlvbiBmaWx0ZXJQb2ludGVyRXZlbnRzKG9iamVjdHM6IFRIUkVFLk9iamVjdDNEW10pIHtcblx0XHRyZXR1cm4gb2JqZWN0cy5maWx0ZXIoKG9iaikgPT5cblx0XHRcdFsnbW92ZScsICdvdmVyJywgJ2VudGVyJywgJ291dCcsICdsZWF2ZSddLnNvbWUoKG5hbWUpID0+IHtcblx0XHRcdFx0Y29uc3QgZXZlbnROYW1lID0gYHBvaW50ZXIke25hbWV9YCBhcyBrZXlvZiBOZ3RFdmVudEhhbmRsZXJzO1xuXHRcdFx0XHRyZXR1cm4gZ2V0TG9jYWxTdGF0ZShvYmopLmhhbmRsZXJzPy5bZXZlbnROYW1lXTtcblx0XHRcdH0pLFxuXHRcdCk7XG5cdH1cblxuXHRmdW5jdGlvbiBpbnRlcnNlY3QoZXZlbnQ6IE5ndERvbUV2ZW50LCBmaWx0ZXI/OiAob2JqZWN0czogVEhSRUUuT2JqZWN0M0RbXSkgPT4gVEhSRUUuT2JqZWN0M0RbXSkge1xuXHRcdGNvbnN0IHN0YXRlID0gc3RvcmUuZ2V0KCk7XG5cdFx0Y29uc3QgZHVwbGljYXRlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXHRcdGNvbnN0IGludGVyc2VjdGlvbnM6IE5ndEludGVyc2VjdGlvbltdID0gW107XG5cdFx0Ly8gQWxsb3cgY2FsbGVycyB0byBlbGltaW5hdGUgZXZlbnQgb2JqZWN0c1xuXHRcdGNvbnN0IGV2ZW50c09iamVjdHMgPSBmaWx0ZXIgPyBmaWx0ZXIoc3RhdGUuaW50ZXJuYWwuaW50ZXJhY3Rpb24pIDogc3RhdGUuaW50ZXJuYWwuaW50ZXJhY3Rpb247XG5cdFx0Ly8gUmVzZXQgYWxsIHJheWNhc3RlciBjYW1lcmFzIHRvIHVuZGVmaW5lZFxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZXZlbnRzT2JqZWN0cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3Qgc3RhdGUgPSBnZXRMb2NhbFN0YXRlKGV2ZW50c09iamVjdHNbaV0pLnN0b3JlLmdldCgpO1xuXHRcdFx0aWYgKHN0YXRlKSB7XG5cdFx0XHRcdHN0YXRlLnJheWNhc3Rlci5jYW1lcmEgPSB1bmRlZmluZWQhO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICghc3RhdGUucHJldmlvdXNSb290KSB7XG5cdFx0XHQvLyBNYWtlIHN1cmUgcm9vdC1sZXZlbCBwb2ludGVyIGFuZCByYXkgYXJlIHNldCB1cFxuXHRcdFx0c3RhdGUuZXZlbnRzLmNvbXB1dGU/LihldmVudCwgc3RvcmUsIG51bGwpO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGhhbmRsZVJheWNhc3Qob2JqOiBUSFJFRS5PYmplY3QzRDxUSFJFRS5FdmVudD4pIHtcblx0XHRcdGNvbnN0IG9iakxvY2FsU3RhdGUgPSBnZXRMb2NhbFN0YXRlKG9iaik7XG5cdFx0XHRjb25zdCBvYmpTdG9yZSA9IG9iakxvY2FsU3RhdGUuc3RvcmU7XG5cdFx0XHRjb25zdCBvYmpTdGF0ZSA9IG9ialN0b3JlPy5nZXQoKTtcblx0XHRcdC8vIFNraXAgZXZlbnQgaGFuZGxpbmcgd2hlbiBub0V2ZW50cyBpcyBzZXQsIG9yIHdoZW4gdGhlIHJheWNhc3RlcnMgY2FtZXJhIGlzIG51bGxcblx0XHRcdGlmICghb2JqU3RhdGUgfHwgIW9ialN0YXRlLmV2ZW50cy5lbmFibGVkIHx8IG9ialN0YXRlLnJheWNhc3Rlci5jYW1lcmEgPT09IG51bGwpIHJldHVybiBbXTtcblxuXHRcdFx0Ly8gV2hlbiB0aGUgY2FtZXJhIGlzIHVuZGVmaW5lZCB3ZSBoYXZlIHRvIGNhbGwgdGhlIGV2ZW50IGxheWVycyB1cGRhdGUgZnVuY3Rpb25cblx0XHRcdGlmIChvYmpTdGF0ZS5yYXljYXN0ZXIuY2FtZXJhID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0b2JqU3RhdGUuZXZlbnRzLmNvbXB1dGU/LihldmVudCwgb2JqU3RvcmUsIG9ialN0YXRlLnByZXZpb3VzUm9vdCk7XG5cdFx0XHRcdC8vIElmIHRoZSBjYW1lcmEgaXMgc3RpbGwgdW5kZWZpbmVkIHdlIGhhdmUgdG8gc2tpcCB0aGlzIGxheWVyIGVudGlyZWx5XG5cdFx0XHRcdGlmIChvYmpTdGF0ZS5yYXljYXN0ZXIuY2FtZXJhID09PSB1bmRlZmluZWQpIG9ialN0YXRlLnJheWNhc3Rlci5jYW1lcmEgPSBudWxsITtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSW50ZXJzZWN0IG9iamVjdCBieSBvYmplY3Rcblx0XHRcdHJldHVybiBvYmpTdGF0ZS5yYXljYXN0ZXIuY2FtZXJhID8gb2JqU3RhdGUucmF5Y2FzdGVyLmludGVyc2VjdE9iamVjdChvYmosIHRydWUpIDogW107XG5cdFx0fVxuXG5cdFx0Ly8gQ29sbGVjdCBldmVudHNcblx0XHRsZXQgaGl0czogVEhSRUUuSW50ZXJzZWN0aW9uPFRIUkVFLk9iamVjdDNEPFRIUkVFLkV2ZW50Pj5bXSA9IGV2ZW50c09iamVjdHNcblx0XHRcdC8vIEludGVyc2VjdCBvYmplY3RzXG5cdFx0XHQuZmxhdE1hcChoYW5kbGVSYXljYXN0KVxuXHRcdFx0Ly8gU29ydCBieSBldmVudCBwcmlvcml0eSBhbmQgZGlzdGFuY2Vcblx0XHRcdC5zb3J0KChhLCBiKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGFTdGF0ZSA9IGdldExvY2FsU3RhdGUoYS5vYmplY3QpLnN0b3JlLmdldCgpO1xuXHRcdFx0XHRjb25zdCBiU3RhdGUgPSBnZXRMb2NhbFN0YXRlKGIub2JqZWN0KS5zdG9yZS5nZXQoKTtcblx0XHRcdFx0aWYgKCFhU3RhdGUgfHwgIWJTdGF0ZSkgcmV0dXJuIGEuZGlzdGFuY2UgLSBiLmRpc3RhbmNlO1xuXHRcdFx0XHRyZXR1cm4gYlN0YXRlLmV2ZW50cy5wcmlvcml0eSAtIGFTdGF0ZS5ldmVudHMucHJpb3JpdHkgfHwgYS5kaXN0YW5jZSAtIGIuZGlzdGFuY2U7XG5cdFx0XHR9KVxuXHRcdFx0Ly8gRmlsdGVyIG91dCBkdXBsaWNhdGVzXG5cdFx0XHQuZmlsdGVyKChpdGVtKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGlkID0gbWFrZUlkKGl0ZW0gYXMgTmd0SW50ZXJzZWN0aW9uKTtcblx0XHRcdFx0aWYgKGR1cGxpY2F0ZXMuaGFzKGlkKSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRkdXBsaWNhdGVzLmFkZChpZCk7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fSk7XG5cblx0XHQvLyBodHRwczovL2dpdGh1Yi5jb20vbXJkb29iL3RocmVlLmpzL2lzc3Vlcy8xNjAzMVxuXHRcdC8vIEFsbG93IGN1c3RvbSB1c2VybGFuZCBpbnRlcnNlY3Qgc29ydCBvcmRlciwgdGhpcyBsaWtlbHkgb25seSBtYWtlcyBzZW5zZSBvbiB0aGUgcm9vdCBmaWx0ZXJcblx0XHRpZiAoc3RhdGUuZXZlbnRzLmZpbHRlcikgaGl0cyA9IHN0YXRlLmV2ZW50cy5maWx0ZXIoaGl0cywgc3RvcmUpO1xuXG5cdFx0Ly8gQnViYmxlIHVwIHRoZSBldmVudHMsIGZpbmQgdGhlIGV2ZW50IHNvdXJjZSAoZXZlbnRPYmplY3QpXG5cdFx0Zm9yIChjb25zdCBoaXQgb2YgaGl0cykge1xuXHRcdFx0bGV0IGV2ZW50T2JqZWN0OiBUSFJFRS5PYmplY3QzRCB8IG51bGwgPSBoaXQub2JqZWN0O1xuXHRcdFx0Ly8gYnViYmxlIGV2ZW50IHVwXG5cdFx0XHR3aGlsZSAoZXZlbnRPYmplY3QpIHtcblx0XHRcdFx0aWYgKGdldExvY2FsU3RhdGUoZXZlbnRPYmplY3QpLmV2ZW50Q291bnQpIHtcblx0XHRcdFx0XHRpbnRlcnNlY3Rpb25zLnB1c2goeyAuLi5oaXQsIGV2ZW50T2JqZWN0IH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGV2ZW50T2JqZWN0ID0gZXZlbnRPYmplY3QucGFyZW50O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIElmIHRoZSBpbnRlcmFjdGlvbiBpcyBjYXB0dXJlZCwgbWFrZSBhbGwgY2FwdHVyaW5nIHRhcmdldHMgcGFydCBvZiB0aGUgaW50ZXJzZWN0LlxuXHRcdGlmICgncG9pbnRlcklkJyBpbiBldmVudCAmJiBzdGF0ZS5pbnRlcm5hbC5jYXB0dXJlZE1hcC5oYXMoZXZlbnQucG9pbnRlcklkKSkge1xuXHRcdFx0Zm9yIChsZXQgY2FwdHVyZURhdGEgb2Ygc3RhdGUuaW50ZXJuYWwuY2FwdHVyZWRNYXAuZ2V0KGV2ZW50LnBvaW50ZXJJZCkhLnZhbHVlcygpKSB7XG5cdFx0XHRcdGlmICghZHVwbGljYXRlcy5oYXMobWFrZUlkKGNhcHR1cmVEYXRhLmludGVyc2VjdGlvbikpKSBpbnRlcnNlY3Rpb25zLnB1c2goY2FwdHVyZURhdGEuaW50ZXJzZWN0aW9uKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGludGVyc2VjdGlvbnM7XG5cdH1cblxuXHQvKiogIEhhbmRsZXMgaW50ZXJzZWN0aW9ucyBieSBmb3J3YXJkaW5nIHRoZW0gdG8gaGFuZGxlcnMgKi9cblx0ZnVuY3Rpb24gaGFuZGxlSW50ZXJzZWN0cyhcblx0XHRpbnRlcnNlY3Rpb25zOiBOZ3RJbnRlcnNlY3Rpb25bXSxcblx0XHRldmVudDogTmd0RG9tRXZlbnQsXG5cdFx0ZGVsdGE6IG51bWJlcixcblx0XHRjYWxsYmFjazogKGV2ZW50OiBOZ3RUaHJlZUV2ZW50PE5ndERvbUV2ZW50PikgPT4gdm9pZCxcblx0KSB7XG5cdFx0Y29uc3Qgcm9vdFN0YXRlID0gc3RvcmUuZ2V0KCk7XG5cblx0XHQvLyBJZiBhbnl0aGluZyBoYXMgYmVlbiBmb3VuZCwgZm9yd2FyZCBpdCB0byB0aGUgZXZlbnQgbGlzdGVuZXJzXG5cdFx0aWYgKGludGVyc2VjdGlvbnMubGVuZ3RoKSB7XG5cdFx0XHRjb25zdCBsb2NhbFN0YXRlID0geyBzdG9wcGVkOiBmYWxzZSB9O1xuXHRcdFx0Zm9yIChjb25zdCBoaXQgb2YgaW50ZXJzZWN0aW9ucykge1xuXHRcdFx0XHRjb25zdCBzdGF0ZSA9IGdldExvY2FsU3RhdGUoaGl0Lm9iamVjdCkuc3RvcmU/LmdldCgpIHx8IHJvb3RTdGF0ZTtcblx0XHRcdFx0Y29uc3QgeyByYXljYXN0ZXIsIHBvaW50ZXIsIGNhbWVyYSwgaW50ZXJuYWwgfSA9IHN0YXRlO1xuXHRcdFx0XHRjb25zdCB1bnByb2plY3RlZFBvaW50ID0gbmV3IFRIUkVFLlZlY3RvcjMocG9pbnRlci54LCBwb2ludGVyLnksIDApLnVucHJvamVjdChjYW1lcmEpO1xuXHRcdFx0XHRjb25zdCBoYXNQb2ludGVyQ2FwdHVyZSA9IChpZDogbnVtYmVyKSA9PiBpbnRlcm5hbC5jYXB0dXJlZE1hcC5nZXQoaWQpPy5oYXMoaGl0LmV2ZW50T2JqZWN0KSA/PyBmYWxzZTtcblxuXHRcdFx0XHRjb25zdCBzZXRQb2ludGVyQ2FwdHVyZSA9IChpZDogbnVtYmVyKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgY2FwdHVyZURhdGEgPSB7IGludGVyc2VjdGlvbjogaGl0LCB0YXJnZXQ6IGV2ZW50LnRhcmdldCBhcyBFbGVtZW50IH07XG5cdFx0XHRcdFx0aWYgKGludGVybmFsLmNhcHR1cmVkTWFwLmhhcyhpZCkpIHtcblx0XHRcdFx0XHRcdC8vIGlmIHRoZSBwb2ludGVySWQgd2FzIHByZXZpb3VzbHkgY2FwdHVyZWQsIHdlIGFkZCB0aGUgaGl0IHRvIHRoZVxuXHRcdFx0XHRcdFx0Ly8gZXZlbnQgY2FwdHVyZWRNYXAuXG5cdFx0XHRcdFx0XHRpbnRlcm5hbC5jYXB0dXJlZE1hcC5nZXQoaWQpIS5zZXQoaGl0LmV2ZW50T2JqZWN0LCBjYXB0dXJlRGF0YSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIGlmIHRoZSBwb2ludGVySWQgd2FzIG5vdCBwcmV2aW91c2x5IGNhcHR1cmVkLCB3ZSBjcmVhdGUgYSBtYXBcblx0XHRcdFx0XHRcdC8vIGNvbnRhaW5pbmcgdGhlIGhpdE9iamVjdCwgYW5kIHRoZSBoaXQuIGhpdE9iamVjdCBpcyB1c2VkIGZvclxuXHRcdFx0XHRcdFx0Ly8gZmFzdGVyIGFjY2Vzcy5cblx0XHRcdFx0XHRcdGludGVybmFsLmNhcHR1cmVkTWFwLnNldChpZCwgbmV3IE1hcChbW2hpdC5ldmVudE9iamVjdCwgY2FwdHVyZURhdGFdXSkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBDYWxsIHRoZSBvcmlnaW5hbCBldmVudCBub3dcblx0XHRcdFx0XHQoZXZlbnQudGFyZ2V0IGFzIEVsZW1lbnQpLnNldFBvaW50ZXJDYXB0dXJlKGlkKTtcblx0XHRcdFx0fTtcblxuXHRcdFx0XHRjb25zdCByZWxlYXNlUG9pbnRlckNhcHR1cmUgPSAoaWQ6IG51bWJlcikgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGNhcHR1cmVzID0gaW50ZXJuYWwuY2FwdHVyZWRNYXAuZ2V0KGlkKTtcblx0XHRcdFx0XHRpZiAoY2FwdHVyZXMpIHtcblx0XHRcdFx0XHRcdHJlbGVhc2VJbnRlcm5hbFBvaW50ZXJDYXB0dXJlKGludGVybmFsLmNhcHR1cmVkTWFwLCBoaXQuZXZlbnRPYmplY3QsIGNhcHR1cmVzLCBpZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdC8vIEFkZCBuYXRpdmUgZXZlbnQgcHJvcHNcblx0XHRcdFx0Y29uc3QgZXh0cmFjdEV2ZW50UHJvcHM6IGFueSA9IHt9O1xuXHRcdFx0XHQvLyBUaGlzIGl0ZXJhdGVzIG92ZXIgdGhlIGV2ZW50J3MgcHJvcGVydGllcyBpbmNsdWRpbmcgdGhlIGluaGVyaXRlZCBvbmVzLiBOYXRpdmUgUG9pbnRlckV2ZW50cyBoYXZlIG1vc3Qgb2YgdGhlaXIgcHJvcHMgYXMgZ2V0dGVycyB3aGljaCBhcmUgaW5oZXJpdGVkLCBidXQgcG9seWZpbGxlZCBQb2ludGVyRXZlbnRzIGhhdmUgdGhlbSBhbGwgYXMgdGhlaXIgb3duIHByb3BlcnRpZXMgKGkuZS4gbm90IGluaGVyaXRlZCkuIFdlIGNhbid0IHVzZSBPYmplY3Qua2V5cygpIG9yIE9iamVjdC5lbnRyaWVzKCkgYXMgdGhleSBvbmx5IHJldHVybiBcIm93blwiIHByb3BlcnRpZXM7IG5vciBPYmplY3QuZ2V0UHJvdG90eXBlT2YoZXZlbnQpIGFzIHRoYXQgKmRvZXNuJ3QqIHJldHVybiBcIm93blwiIHByb3BlcnRpZXMsIG9ubHkgaW5oZXJpdGVkIG9uZXMuXG5cdFx0XHRcdGZvciAobGV0IHByb3AgaW4gZXZlbnQpIHtcblx0XHRcdFx0XHRsZXQgcHJvcGVydHkgPSBldmVudFtwcm9wIGFzIGtleW9mIE5ndERvbUV2ZW50XTtcblx0XHRcdFx0XHQvLyBPbmx5IGNvcHkgb3ZlciBhdG9taWNzLCBsZWF2ZSBmdW5jdGlvbnMgYWxvbmUgYXMgdGhlc2Ugc2hvdWxkIGJlXG5cdFx0XHRcdFx0Ly8gY2FsbGVkIGFzIGV2ZW50Lm5hdGl2ZUV2ZW50LmZuKClcblx0XHRcdFx0XHRpZiAodHlwZW9mIHByb3BlcnR5ICE9PSAnZnVuY3Rpb24nKSBleHRyYWN0RXZlbnRQcm9wc1twcm9wXSA9IHByb3BlcnR5O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgcmF5Y2FzdEV2ZW50OiBOZ3RUaHJlZUV2ZW50PE5ndERvbUV2ZW50PiA9IHtcblx0XHRcdFx0XHQuLi5oaXQsXG5cdFx0XHRcdFx0Li4uZXh0cmFjdEV2ZW50UHJvcHMsXG5cdFx0XHRcdFx0cG9pbnRlcixcblx0XHRcdFx0XHRpbnRlcnNlY3Rpb25zLFxuXHRcdFx0XHRcdHN0b3BwZWQ6IGxvY2FsU3RhdGUuc3RvcHBlZCxcblx0XHRcdFx0XHRkZWx0YSxcblx0XHRcdFx0XHR1bnByb2plY3RlZFBvaW50LFxuXHRcdFx0XHRcdHJheTogcmF5Y2FzdGVyLnJheSxcblx0XHRcdFx0XHRjYW1lcmEsXG5cdFx0XHRcdFx0Ly8gSGlqYWNrIHN0b3BQcm9wYWdhdGlvbiwgd2hpY2gganVzdCBzZXRzIGEgZmxhZ1xuXHRcdFx0XHRcdHN0b3BQcm9wYWdhdGlvbigpIHtcblx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wbW5kcnMvcmVhY3QtdGhyZWUtZmliZXIvaXNzdWVzLzU5NlxuXHRcdFx0XHRcdFx0Ly8gRXZlbnRzIGFyZSBub3QgYWxsb3dlZCB0byBzdG9wIHByb3BhZ2F0aW9uIGlmIHRoZSBwb2ludGVyIGhhcyBiZWVuIGNhcHR1cmVkXG5cdFx0XHRcdFx0XHRjb25zdCBjYXB0dXJlc0ZvclBvaW50ZXIgPSAncG9pbnRlcklkJyBpbiBldmVudCAmJiBpbnRlcm5hbC5jYXB0dXJlZE1hcC5nZXQoZXZlbnQucG9pbnRlcklkKTtcblxuXHRcdFx0XHRcdFx0Ly8gV2Ugb25seSBhdXRob3JpemUgc3RvcFByb3BhZ2F0aW9uLi4uXG5cdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdC8vIC4uLmlmIHRoaXMgcG9pbnRlciBoYXNuJ3QgYmVlbiBjYXB0dXJlZFxuXHRcdFx0XHRcdFx0XHQhY2FwdHVyZXNGb3JQb2ludGVyIHx8XG5cdFx0XHRcdFx0XHRcdC8vIC4uLiBvciBpZiB0aGUgaGl0IG9iamVjdCBpcyBjYXB0dXJpbmcgdGhlIHBvaW50ZXJcblx0XHRcdFx0XHRcdFx0Y2FwdHVyZXNGb3JQb2ludGVyLmhhcyhoaXQuZXZlbnRPYmplY3QpXG5cdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0cmF5Y2FzdEV2ZW50LnN0b3BwZWQgPSBsb2NhbFN0YXRlLnN0b3BwZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHQvLyBQcm9wYWdhdGlvbiBpcyBzdG9wcGVkLCByZW1vdmUgYWxsIG90aGVyIGhvdmVyIHJlY29yZHNcblx0XHRcdFx0XHRcdFx0Ly8gQW4gZXZlbnQgaGFuZGxlciBpcyBvbmx5IGFsbG93ZWQgdG8gZmx1c2ggb3RoZXIgaGFuZGxlcnMgaWYgaXQgaXMgaG92ZXJlZCBpdHNlbGZcblx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdGludGVybmFsLmhvdmVyZWQuc2l6ZSAmJlxuXHRcdFx0XHRcdFx0XHRcdEFycmF5LmZyb20oaW50ZXJuYWwuaG92ZXJlZC52YWx1ZXMoKSkuZmluZCgoaSkgPT4gaS5ldmVudE9iamVjdCA9PT0gaGl0LmV2ZW50T2JqZWN0KVxuXHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBPYmplY3RzIGNhbm5vdCBmbHVzaCBvdXQgaGlnaGVyIHVwIG9iamVjdHMgdGhhdCBoYXZlIGFscmVhZHkgY2F1Z2h0IHRoZSBldmVudFxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGhpZ2hlciA9IGludGVyc2VjdGlvbnMuc2xpY2UoMCwgaW50ZXJzZWN0aW9ucy5pbmRleE9mKGhpdCkpO1xuXHRcdFx0XHRcdFx0XHRcdGNhbmNlbFBvaW50ZXIoWy4uLmhpZ2hlciwgaGl0XSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdC8vIHRoZXJlIHNob3VsZCBiZSBhIGRpc3RpbmN0aW9uIGJldHdlZW4gdGFyZ2V0IGFuZCBjdXJyZW50VGFyZ2V0XG5cdFx0XHRcdFx0dGFyZ2V0OiB7IGhhc1BvaW50ZXJDYXB0dXJlLCBzZXRQb2ludGVyQ2FwdHVyZSwgcmVsZWFzZVBvaW50ZXJDYXB0dXJlIH0sXG5cdFx0XHRcdFx0Y3VycmVudFRhcmdldDogeyBoYXNQb2ludGVyQ2FwdHVyZSwgc2V0UG9pbnRlckNhcHR1cmUsIHJlbGVhc2VQb2ludGVyQ2FwdHVyZSB9LFxuXHRcdFx0XHRcdG5hdGl2ZUV2ZW50OiBldmVudCxcblx0XHRcdFx0fTtcblxuXHRcdFx0XHQvLyBDYWxsIHN1YnNjcmliZXJzXG5cdFx0XHRcdGNhbGxiYWNrKHJheWNhc3RFdmVudCk7XG5cdFx0XHRcdC8vIEV2ZW50IGJ1YmJsaW5nIG1heSBiZSBpbnRlcnJ1cHRlZCBieSBzdG9wUHJvcGFnYXRpb25cblx0XHRcdFx0aWYgKGxvY2FsU3RhdGUuc3RvcHBlZCA9PT0gdHJ1ZSkgYnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBpbnRlcnNlY3Rpb25zO1xuXHR9XG5cblx0ZnVuY3Rpb24gY2FuY2VsUG9pbnRlcihpbnRlcnNlY3Rpb25zOiBOZ3RJbnRlcnNlY3Rpb25bXSkge1xuXHRcdGNvbnN0IGludGVybmFsID0gc3RvcmUuZ2V0KCdpbnRlcm5hbCcpO1xuXHRcdGZvciAoY29uc3QgaG92ZXJlZE9iaiBvZiBpbnRlcm5hbC5ob3ZlcmVkLnZhbHVlcygpKSB7XG5cdFx0XHQvLyBXaGVuIG5vIG9iamVjdHMgd2VyZSBoaXQgb3IgdGhlIHRoZSBob3ZlcmVkIG9iamVjdCB3YXNuJ3QgZm91bmQgdW5kZXJuZWF0aCB0aGUgY3Vyc29yXG5cdFx0XHQvLyB3ZSBjYWxsIG9uUG9pbnRlck91dCBhbmQgZGVsZXRlIHRoZSBvYmplY3QgZnJvbSB0aGUgaG92ZXJlZC1lbGVtZW50cyBtYXBcblx0XHRcdGlmIChcblx0XHRcdFx0IWludGVyc2VjdGlvbnMubGVuZ3RoIHx8XG5cdFx0XHRcdCFpbnRlcnNlY3Rpb25zLmZpbmQoXG5cdFx0XHRcdFx0KGhpdCkgPT5cblx0XHRcdFx0XHRcdGhpdC5vYmplY3QgPT09IGhvdmVyZWRPYmoub2JqZWN0ICYmXG5cdFx0XHRcdFx0XHRoaXQuaW5kZXggPT09IGhvdmVyZWRPYmouaW5kZXggJiZcblx0XHRcdFx0XHRcdGhpdC5pbnN0YW5jZUlkID09PSBob3ZlcmVkT2JqLmluc3RhbmNlSWQsXG5cdFx0XHRcdClcblx0XHRcdCkge1xuXHRcdFx0XHRjb25zdCBldmVudE9iamVjdCA9IGhvdmVyZWRPYmouZXZlbnRPYmplY3Q7XG5cdFx0XHRcdGNvbnN0IGluc3RhbmNlID0gZ2V0TG9jYWxTdGF0ZShldmVudE9iamVjdCk7XG5cdFx0XHRcdGNvbnN0IGhhbmRsZXJzID0gaW5zdGFuY2U/LmhhbmRsZXJzO1xuXHRcdFx0XHRpbnRlcm5hbC5ob3ZlcmVkLmRlbGV0ZShtYWtlSWQoaG92ZXJlZE9iaikpO1xuXHRcdFx0XHRpZiAoaW5zdGFuY2U/LmV2ZW50Q291bnQpIHtcblx0XHRcdFx0XHQvLyBDbGVhciBvdXQgaW50ZXJzZWN0cywgdGhleSBhcmUgb3V0ZGF0ZWQgYnkgbm93XG5cdFx0XHRcdFx0Y29uc3QgZGF0YSA9IHsgLi4uaG92ZXJlZE9iaiwgaW50ZXJzZWN0aW9ucyB9O1xuXHRcdFx0XHRcdGhhbmRsZXJzPy5wb2ludGVyb3V0Py4oZGF0YSBhcyBOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4pO1xuXHRcdFx0XHRcdGhhbmRsZXJzPy5wb2ludGVybGVhdmU/LihkYXRhIGFzIE5ndFRocmVlRXZlbnQ8UG9pbnRlckV2ZW50Pik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBwb2ludGVyTWlzc2VkKGV2ZW50OiBNb3VzZUV2ZW50LCBvYmplY3RzOiBUSFJFRS5PYmplY3QzRFtdKSB7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBvYmplY3RzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCBpbnN0YW5jZSA9IGdldExvY2FsU3RhdGUob2JqZWN0c1tpXSk7XG5cdFx0XHRpbnN0YW5jZT8uaGFuZGxlcnMucG9pbnRlcm1pc3NlZD8uKGV2ZW50KTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBoYW5kbGVQb2ludGVyKG5hbWU6IHN0cmluZykge1xuXHRcdC8vIERlYWwgd2l0aCBjYW5jZWxhdGlvblxuXHRcdHN3aXRjaCAobmFtZSkge1xuXHRcdFx0Y2FzZSAncG9pbnRlcmxlYXZlJzpcblx0XHRcdGNhc2UgJ3BvaW50ZXJjYW5jZWwnOlxuXHRcdFx0XHRyZXR1cm4gKCkgPT4gY2FuY2VsUG9pbnRlcihbXSk7XG5cdFx0XHRjYXNlICdsb3N0cG9pbnRlcmNhcHR1cmUnOlxuXHRcdFx0XHRyZXR1cm4gKGV2ZW50OiBOZ3REb21FdmVudCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHsgaW50ZXJuYWwgfSA9IHN0b3JlLmdldCgpO1xuXHRcdFx0XHRcdGlmICgncG9pbnRlcklkJyBpbiBldmVudCAmJiBpbnRlcm5hbC5jYXB0dXJlZE1hcC5oYXMoZXZlbnQucG9pbnRlcklkKSkge1xuXHRcdFx0XHRcdFx0Ly8gSWYgdGhlIG9iamVjdCBldmVudCBpbnRlcmZhY2UgaGFkIG9uTG9zdFBvaW50ZXJDYXB0dXJlLCB3ZSdkIGNhbGwgaXQgaGVyZSBvbiBldmVyeVxuXHRcdFx0XHRcdFx0Ly8gb2JqZWN0IHRoYXQncyBnZXR0aW5nIHJlbW92ZWQuXG5cdFx0XHRcdFx0XHRpbnRlcm5hbC5jYXB0dXJlZE1hcC5kZWxldGUoZXZlbnQucG9pbnRlcklkKTtcblx0XHRcdFx0XHRcdGNhbmNlbFBvaW50ZXIoW10pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHR9XG5cblx0XHQvLyBBbnkgb3RoZXIgcG9pbnRlciBnb2VzIGhlcmUgLi4uXG5cdFx0cmV0dXJuIGZ1bmN0aW9uIGhhbmRsZUV2ZW50KGV2ZW50OiBOZ3REb21FdmVudCkge1xuXHRcdFx0Y29uc3QgcG9pbnRlck1pc3NlZCQgPSAoc3RvcmUgYXMgTmd0QW55UmVjb3JkKVsncG9pbnRlck1pc3NlZCQnXTtcblx0XHRcdGNvbnN0IGludGVybmFsID0gc3RvcmUuZ2V0KCdpbnRlcm5hbCcpO1xuXG5cdFx0XHQvLyBwcmVwYXJlUmF5KGV2ZW50KVxuXHRcdFx0aW50ZXJuYWwubGFzdEV2ZW50Lm5hdGl2ZUVsZW1lbnQgPSBldmVudDtcblxuXHRcdFx0Ly8gR2V0IGZyZXNoIGludGVyc2VjdHNcblx0XHRcdGNvbnN0IGlzUG9pbnRlck1vdmUgPSBuYW1lID09PSAncG9pbnRlcm1vdmUnO1xuXHRcdFx0Y29uc3QgaXNDbGlja0V2ZW50ID0gbmFtZSA9PT0gJ2NsaWNrJyB8fCBuYW1lID09PSAnY29udGV4dG1lbnUnIHx8IG5hbWUgPT09ICdkYmxjbGljayc7XG5cdFx0XHRjb25zdCBmaWx0ZXIgPSBpc1BvaW50ZXJNb3ZlID8gZmlsdGVyUG9pbnRlckV2ZW50cyA6IHVuZGVmaW5lZDtcblx0XHRcdGNvbnN0IGhpdHMgPSBpbnRlcnNlY3QoZXZlbnQsIGZpbHRlcik7XG5cdFx0XHRjb25zdCBkZWx0YSA9IGlzQ2xpY2tFdmVudCA/IGNhbGN1bGF0ZURpc3RhbmNlKGV2ZW50KSA6IDA7XG5cblx0XHRcdC8vIFNhdmUgaW5pdGlhbCBjb29yZGluYXRlcyBvbiBwb2ludGVyLWRvd25cblx0XHRcdGlmIChuYW1lID09PSAncG9pbnRlcmRvd24nKSB7XG5cdFx0XHRcdGludGVybmFsLmluaXRpYWxDbGljayA9IFtldmVudC5vZmZzZXRYLCBldmVudC5vZmZzZXRZXTtcblx0XHRcdFx0aW50ZXJuYWwuaW5pdGlhbEhpdHMgPSBoaXRzLm1hcCgoaGl0KSA9PiBoaXQuZXZlbnRPYmplY3QpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBhIGNsaWNrIHlpZWxkcyBubyByZXN1bHRzLCBwYXNzIGl0IGJhY2sgdG8gdGhlIHVzZXIgYXMgYSBtaXNzXG5cdFx0XHQvLyBNaXNzZWQgZXZlbnRzIGhhdmUgdG8gY29tZSBmaXJzdCBpbiBvcmRlciB0byBlc3RhYmxpc2ggdXNlci1sYW5kIHNpZGUtZWZmZWN0IGNsZWFuIHVwXG5cdFx0XHRpZiAoaXNDbGlja0V2ZW50ICYmICFoaXRzLmxlbmd0aCkge1xuXHRcdFx0XHRpZiAoZGVsdGEgPD0gMikge1xuXHRcdFx0XHRcdHBvaW50ZXJNaXNzZWQoZXZlbnQsIGludGVybmFsLmludGVyYWN0aW9uKTtcblx0XHRcdFx0XHRwb2ludGVyTWlzc2VkJC5uZXh0KGV2ZW50KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBUYWtlIGNhcmUgb2YgdW5ob3ZlclxuXHRcdFx0aWYgKGlzUG9pbnRlck1vdmUpIGNhbmNlbFBvaW50ZXIoaGl0cyk7XG5cblx0XHRcdGZ1bmN0aW9uIG9uSW50ZXJzZWN0KGRhdGE6IE5ndFRocmVlRXZlbnQ8Tmd0RG9tRXZlbnQ+KSB7XG5cdFx0XHRcdGNvbnN0IGV2ZW50T2JqZWN0ID0gZGF0YS5ldmVudE9iamVjdDtcblx0XHRcdFx0Y29uc3QgaW5zdGFuY2UgPSBnZXRMb2NhbFN0YXRlKGV2ZW50T2JqZWN0KTtcblx0XHRcdFx0Y29uc3QgaGFuZGxlcnMgPSBpbnN0YW5jZT8uaGFuZGxlcnM7XG5cblx0XHRcdFx0Ly8gQ2hlY2sgcHJlc2VuY2Ugb2YgaGFuZGxlcnNcblx0XHRcdFx0aWYgKCFpbnN0YW5jZT8uZXZlbnRDb3VudCkgcmV0dXJuO1xuXG5cdFx0XHRcdC8qXG4gICAgICAgIE1BWUJFIFRPRE8sIERFTEVURSBJRiBOT1Q6XG4gICAgICAgICAgQ2hlY2sgaWYgdGhlIG9iamVjdCBpcyBjYXB0dXJlZCwgY2FwdHVyZWQgZXZlbnRzIHNob3VsZCBub3QgaGF2ZSBpbnRlcnNlY3RzIHJ1bm5pbmcgaW4gcGFyYWxsZWxcbiAgICAgICAgICBCdXQgd291bGRuJ3QgaXQgYmUgYmV0dGVyIHRvIGp1c3QgcmVwbGFjZSBjYXB0dXJlZE1hcCB3aXRoIGEgc2luZ2xlIGVudHJ5P1xuICAgICAgICAgIEFsc28sIGFyZSB3ZSBPSyB3aXRoIHN0cmFpZ2h0IHVwIG1ha2luZyBwaWNraW5nIHVwIG11bHRpcGxlIG9iamVjdHMgaW1wb3NzaWJsZT9cblxuICAgICAgICBjb25zdCBwb2ludGVySWQgPSAoZGF0YSBhcyBUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4pLnBvaW50ZXJJZFxuICAgICAgICBpZiAocG9pbnRlcklkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb25zdCBjYXB0dXJlZE1lc2hTZXQgPSBpbnRlcm5hbC5jYXB0dXJlZE1hcC5nZXQocG9pbnRlcklkKVxuICAgICAgICAgIGlmIChjYXB0dXJlZE1lc2hTZXQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhcHR1cmVkID0gY2FwdHVyZWRNZXNoU2V0LmdldChldmVudE9iamVjdClcbiAgICAgICAgICAgIGlmIChjYXB0dXJlZCAmJiBjYXB0dXJlZC5sb2NhbFN0YXRlLnN0b3BwZWQpIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgfSovXG5cblx0XHRcdFx0aWYgKGlzUG9pbnRlck1vdmUpIHtcblx0XHRcdFx0XHQvLyBNb3ZlIGV2ZW50IC4uLlxuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdGhhbmRsZXJzPy5wb2ludGVyb3ZlciB8fFxuXHRcdFx0XHRcdFx0aGFuZGxlcnM/LnBvaW50ZXJlbnRlciB8fFxuXHRcdFx0XHRcdFx0aGFuZGxlcnM/LnBvaW50ZXJvdXQgfHxcblx0XHRcdFx0XHRcdGhhbmRsZXJzPy5wb2ludGVybGVhdmVcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdC8vIFdoZW4gZW50ZXIgb3Igb3V0IGlzIHByZXNlbnQgdGFrZSBjYXJlIG9mIGhvdmVyLXN0YXRlXG5cdFx0XHRcdFx0XHRjb25zdCBpZCA9IG1ha2VJZChkYXRhKTtcblx0XHRcdFx0XHRcdGNvbnN0IGhvdmVyZWRJdGVtID0gaW50ZXJuYWwuaG92ZXJlZC5nZXQoaWQpO1xuXHRcdFx0XHRcdFx0aWYgKCFob3ZlcmVkSXRlbSkge1xuXHRcdFx0XHRcdFx0XHQvLyBJZiB0aGUgb2JqZWN0IHdhc24ndCBwcmV2aW91c2x5IGhvdmVyZWQsIGJvb2sgaXQgYW5kIGNhbGwgaXRzIGhhbmRsZXJcblx0XHRcdFx0XHRcdFx0aW50ZXJuYWwuaG92ZXJlZC5zZXQoaWQsIGRhdGEpO1xuXHRcdFx0XHRcdFx0XHRoYW5kbGVycy5wb2ludGVyb3Zlcj8uKGRhdGEgYXMgTmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+KTtcblx0XHRcdFx0XHRcdFx0aGFuZGxlcnMucG9pbnRlcmVudGVyPy4oZGF0YSBhcyBOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4pO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChob3ZlcmVkSXRlbS5zdG9wcGVkKSB7XG5cdFx0XHRcdFx0XHRcdC8vIElmIHRoZSBvYmplY3Qgd2FzIHByZXZpb3VzbHkgaG92ZXJlZCBhbmQgc3RvcHBlZCwgd2Ugc2hvdWxkbid0IGFsbG93IG90aGVyIGl0ZW1zIHRvIHByb2NlZWRcblx0XHRcdFx0XHRcdFx0ZGF0YS5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gQ2FsbCBtb3VzZSBtb3ZlXG5cdFx0XHRcdFx0aGFuZGxlcnM/LnBvaW50ZXJtb3ZlPy4oZGF0YSBhcyBOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIEFsbCBvdGhlciBldmVudHMgLi4uXG5cdFx0XHRcdFx0Y29uc3QgaGFuZGxlciA9IGhhbmRsZXJzPy5bbmFtZSBhcyBrZXlvZiBOZ3RFdmVudEhhbmRsZXJzXSBhcyAoXG5cdFx0XHRcdFx0XHRldmVudDogTmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+LFxuXHRcdFx0XHRcdCkgPT4gdm9pZDtcblx0XHRcdFx0XHRpZiAoaGFuZGxlcikge1xuXHRcdFx0XHRcdFx0Ly8gRm9yd2FyZCBhbGwgZXZlbnRzIGJhY2sgdG8gdGhlaXIgcmVzcGVjdGl2ZSBoYW5kbGVycyB3aXRoIHRoZSBleGNlcHRpb24gb2YgY2xpY2sgZXZlbnRzLFxuXHRcdFx0XHRcdFx0Ly8gd2hpY2ggbXVzdCB1c2UgdGhlIGluaXRpYWwgdGFyZ2V0XG5cdFx0XHRcdFx0XHRpZiAoIWlzQ2xpY2tFdmVudCB8fCBpbnRlcm5hbC5pbml0aWFsSGl0cy5pbmNsdWRlcyhldmVudE9iamVjdCkpIHtcblx0XHRcdFx0XHRcdFx0Ly8gTWlzc2VkIGV2ZW50cyBoYXZlIHRvIGNvbWUgZmlyc3Rcblx0XHRcdFx0XHRcdFx0cG9pbnRlck1pc3NlZChcblx0XHRcdFx0XHRcdFx0XHRldmVudCxcblx0XHRcdFx0XHRcdFx0XHRpbnRlcm5hbC5pbnRlcmFjdGlvbi5maWx0ZXIoKG9iamVjdCkgPT4gIWludGVybmFsLmluaXRpYWxIaXRzLmluY2x1ZGVzKG9iamVjdCkpLFxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHQvLyBOb3cgY2FsbCB0aGUgaGFuZGxlclxuXHRcdFx0XHRcdFx0XHRoYW5kbGVyKGRhdGEgYXMgTmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Ly8gVHJpZ2dlciBvblBvaW50ZXJNaXNzZWQgb24gYWxsIGVsZW1lbnRzIHRoYXQgaGF2ZSBwb2ludGVyIG92ZXIvb3V0IGhhbmRsZXJzLCBidXQgbm90IGNsaWNrIGFuZCB3ZXJlbid0IGhpdFxuXHRcdFx0XHRcdFx0aWYgKGlzQ2xpY2tFdmVudCAmJiBpbnRlcm5hbC5pbml0aWFsSGl0cy5pbmNsdWRlcyhldmVudE9iamVjdCkpIHtcblx0XHRcdFx0XHRcdFx0cG9pbnRlck1pc3NlZChcblx0XHRcdFx0XHRcdFx0XHRldmVudCxcblx0XHRcdFx0XHRcdFx0XHRpbnRlcm5hbC5pbnRlcmFjdGlvbi5maWx0ZXIoKG9iamVjdCkgPT4gIWludGVybmFsLmluaXRpYWxIaXRzLmluY2x1ZGVzKG9iamVjdCkpLFxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRoYW5kbGVJbnRlcnNlY3RzKGhpdHMsIGV2ZW50LCBkZWx0YSwgb25JbnRlcnNlY3QpO1xuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4geyBoYW5kbGVQb2ludGVyIH07XG59XG4iXX0=
362
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZXZlbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQy9CLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFHM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQTBGdEM7OztHQUdHO0FBQ0gsU0FBUyw2QkFBNkIsQ0FDckMsV0FBc0UsRUFDdEUsR0FBbUIsRUFDbkIsUUFBc0QsRUFDdEQsU0FBaUI7SUFFakIsTUFBTSxXQUFXLEdBQXdDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0UsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNqQixRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLHlEQUF5RDtRQUN6RCxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDekIsV0FBVyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM5QixXQUFXLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3JELENBQUM7SUFDRixDQUFDO0FBQ0YsQ0FBQztBQUVELE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxLQUErQixFQUFFLE1BQXNCO0lBQzFGLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO0lBQ3BDLHVEQUF1RDtJQUN2RCxRQUFRLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUM7SUFDeEUsUUFBUSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FB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RUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ25ELENBQUMsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLEVBQUUsYUFBYSxFQUFFLENBQUM7QUFDMUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgZ2V0TG9jYWxTdGF0ZSB9IGZyb20gJy4vaW5zdGFuY2UnO1xuaW1wb3J0IHR5cGUgeyBOZ3RTdGF0ZSB9IGZyb20gJy4vc3RvcmUnO1xuaW1wb3J0IHR5cGUgeyBOZ3RBbnlSZWNvcmQsIE5ndFByb3BlcnRpZXMgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IG1ha2VJZCB9IGZyb20gJy4vdXRpbHMvbWFrZSc7XG5pbXBvcnQgdHlwZSB7IE5ndFNpZ25hbFN0b3JlIH0gZnJvbSAnLi91dGlscy9zaWduYWwtc3RvcmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndEludGVyc2VjdGlvbiBleHRlbmRzIFRIUkVFLkludGVyc2VjdGlvbiB7XG5cdC8qKiBUaGUgZXZlbnQgc291cmNlICh0aGUgb2JqZWN0IHdoaWNoIHJlZ2lzdGVyZWQgdGhlIGhhbmRsZXIpICovXG5cdGV2ZW50T2JqZWN0OiBUSFJFRS5PYmplY3QzRDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZ3RJbnRlcnNlY3Rpb25FdmVudDxUU291cmNlRXZlbnQ+IGV4dGVuZHMgTmd0SW50ZXJzZWN0aW9uIHtcblx0LyoqIFRoZSBldmVudCBzb3VyY2UgKHRoZSBvYmplY3Qgd2hpY2ggcmVnaXN0ZXJlZCB0aGUgaGFuZGxlcikgKi9cblx0ZXZlbnRPYmplY3Q6IFRIUkVFLk9iamVjdDNEO1xuXHQvKiogQW4gYXJyYXkgb2YgaW50ZXJzZWN0aW9ucyAqL1xuXHRpbnRlcnNlY3Rpb25zOiBOZ3RJbnRlcnNlY3Rpb25bXTtcblx0LyoqIHZlYzMuc2V0KHBvaW50ZXIueCwgcG9pbnRlci55LCAwKS51bnByb2plY3QoY2FtZXJhKSAqL1xuXHR1bnByb2plY3RlZFBvaW50OiBUSFJFRS5WZWN0b3IzO1xuXHQvKiogTm9ybWFsaXplZCBldmVudCBjb29yZGluYXRlcyAqL1xuXHRwb2ludGVyOiBUSFJFRS5WZWN0b3IyO1xuXHQvKiogRGVsdGEgYmV0d2VlbiBmaXJzdCBjbGljayBhbmQgdGhpcyBldmVudCAqL1xuXHRkZWx0YTogbnVtYmVyO1xuXHQvKiogVGhlIHJheSB0aGF0IHBpZXJjZWQgaXQgKi9cblx0cmF5OiBUSFJFRS5SYXk7XG5cdC8qKiBUaGUgY2FtZXJhIHRoYXQgd2FzIHVzZWQgYnkgdGhlIHJheWNhc3RlciAqL1xuXHRjYW1lcmE6IE5ndENhbWVyYTtcblx0LyoqIHN0b3BQcm9wYWdhdGlvbiB3aWxsIHN0b3AgdW5kZXJseWluZyBoYW5kbGVycyBmcm9tIGZpcmluZyAqL1xuXHRzdG9wUHJvcGFnYXRpb246ICgpID0+IHZvaWQ7XG5cdC8qKiBUaGUgb3JpZ2luYWwgaG9zdCBldmVudCAqL1xuXHRuYXRpdmVFdmVudDogVFNvdXJjZUV2ZW50O1xuXHQvKiogSWYgdGhlIGV2ZW50IHdhcyBzdG9wcGVkIGJ5IGNhbGxpbmcgc3RvcFByb3BhZ2F0aW9uICovXG5cdHN0b3BwZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIE5ndENhbWVyYSA9IFRIUkVFLk9ydGhvZ3JhcGhpY0NhbWVyYSB8IFRIUkVFLlBlcnNwZWN0aXZlQ2FtZXJhO1xuZXhwb3J0IHR5cGUgTmd0VGhyZWVFdmVudDxURXZlbnQ+ID0gTmd0SW50ZXJzZWN0aW9uRXZlbnQ8VEV2ZW50PiAmIE5ndFByb3BlcnRpZXM8VEV2ZW50PjtcbmV4cG9ydCB0eXBlIE5ndERvbUV2ZW50ID0gUG9pbnRlckV2ZW50IHwgTW91c2VFdmVudCB8IFdoZWVsRXZlbnQ7XG5cbmV4cG9ydCB0eXBlIE5ndEV2ZW50SGFuZGxlcnMgPSB7XG5cdGNsaWNrPzogKGV2ZW50OiBOZ3RUaHJlZUV2ZW50PE1vdXNlRXZlbnQ+KSA9PiB2b2lkO1xuXHRjb250ZXh0bWVudT86IChldmVudDogTmd0VGhyZWVFdmVudDxNb3VzZUV2ZW50PikgPT4gdm9pZDtcblx0ZGJsY2xpY2s/OiAoZXZlbnQ6IE5ndFRocmVlRXZlbnQ8TW91c2VFdmVudD4pID0+IHZvaWQ7XG5cdHBvaW50ZXJ1cD86IChldmVudDogTmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+KSA9PiB2b2lkO1xuXHRwb2ludGVyZG93bj86IChldmVudDogTmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+KSA9PiB2b2lkO1xuXHRwb2ludGVyb3Zlcj86IChldmVudDogTmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+KSA9PiB2b2lkO1xuXHRwb2ludGVyb3V0PzogKGV2ZW50OiBOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4pID0+IHZvaWQ7XG5cdHBvaW50ZXJlbnRlcj86IChldmVudDogTmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+KSA9PiB2b2lkO1xuXHRwb2ludGVybGVhdmU/OiAoZXZlbnQ6IE5ndFRocmVlRXZlbnQ8UG9pbnRlckV2ZW50PikgPT4gdm9pZDtcblx0cG9pbnRlcm1vdmU/OiAoZXZlbnQ6IE5ndFRocmVlRXZlbnQ8UG9pbnRlckV2ZW50PikgPT4gdm9pZDtcblx0cG9pbnRlcm1pc3NlZD86IChldmVudDogTW91c2VFdmVudCkgPT4gdm9pZDtcblx0cG9pbnRlcmNhbmNlbD86IChldmVudDogTmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+KSA9PiB2b2lkO1xuXHR3aGVlbD86IChldmVudDogTmd0VGhyZWVFdmVudDxXaGVlbEV2ZW50PikgPT4gdm9pZDtcbn07XG5cbmV4cG9ydCB0eXBlIE5ndEV2ZW50cyA9IHtcblx0W1RFdmVudCBpbiBrZXlvZiBOZ3RFdmVudEhhbmRsZXJzXS0/OiBFdmVudExpc3RlbmVyO1xufTtcblxuZXhwb3J0IHR5cGUgTmd0RmlsdGVyRnVuY3Rpb24gPSAoaXRlbXM6IFRIUkVFLkludGVyc2VjdGlvbltdLCBzdG9yZTogTmd0U2lnbmFsU3RvcmU8Tmd0U3RhdGU+KSA9PiBUSFJFRS5JbnRlcnNlY3Rpb25bXTtcbmV4cG9ydCB0eXBlIE5ndENvbXB1dGVGdW5jdGlvbiA9IChcblx0ZXZlbnQ6IE5ndERvbUV2ZW50LFxuXHRyb290OiBOZ3RTaWduYWxTdG9yZTxOZ3RTdGF0ZT4sXG5cdHByZXZpb3VzOiBOZ3RTaWduYWxTdG9yZTxOZ3RTdGF0ZT4gfCBudWxsLFxuKSA9PiB2b2lkO1xuXG5leHBvcnQgdHlwZSBOZ3RFdmVudE1hbmFnZXI8VFRhcmdldD4gPSB7XG5cdC8qKiBEZXRlcm1pbmVzIGlmIHRoZSBldmVudCBsYXllciBpcyBhY3RpdmUgKi9cblx0ZW5hYmxlZDogYm9vbGVhbjtcblx0LyoqIEV2ZW50IGxheWVyIHByaW9yaXR5LCBoaWdoZXIgcHJpb3JpdGl6ZWQgbGF5ZXJzIGNvbWUgZmlyc3QgYW5kIG1heSBzdG9wKC1wcm9wYWdhdGUpIGxvd2VyIGxheWVyICAqL1xuXHRwcmlvcml0eTogbnVtYmVyO1xuXHQvKiogVGhlIGNvbXB1dGUgZnVuY3Rpb24gbmVlZHMgdG8gc2V0IHVwIHRoZSByYXljYXN0ZXIgYW5kIGFuIHh5LSBwb2ludGVyICAqL1xuXHRjb21wdXRlPzogTmd0Q29tcHV0ZUZ1bmN0aW9uO1xuXHQvKiogVGhlIGZpbHRlciBjYW4gcmUtb3JkZXIgb3IgcmUtc3RydWN0dXJlIHRoZSBpbnRlcnNlY3Rpb25zICAqL1xuXHRmaWx0ZXI/OiBOZ3RGaWx0ZXJGdW5jdGlvbjtcblx0LyoqIFRoZSB0YXJnZXQgbm9kZSB0aGUgZXZlbnQgbGF5ZXIgaXMgdGllZCB0byAqL1xuXHRjb25uZWN0ZWQ/OiBUVGFyZ2V0O1xuXHQvKiogQWxsIHRoZSBwb2ludGVyIGV2ZW50IGhhbmRsZXJzIHRocm91Z2ggd2hpY2ggdGhlIGhvc3QgZm9yd2FyZHMgbmF0aXZlIGV2ZW50cyAqL1xuXHRoYW5kbGVycz86IE5ndEV2ZW50cztcblx0LyoqIEFsbG93cyByZS1jb25uZWN0aW5nIHRvIGFub3RoZXIgdGFyZ2V0ICovXG5cdGNvbm5lY3Q/OiAodGFyZ2V0OiBUVGFyZ2V0KSA9PiB2b2lkO1xuXHQvKiogUmVtb3ZlcyBhbGwgZXhpc3RpbmcgZXZlbnRzIGhhbmRsZXJzIGZyb20gdGhlIHRhcmdldCAqL1xuXHRkaXNjb25uZWN0PzogKCkgPT4gdm9pZDtcblx0LyoqIFRyaWdnZXJzIGEgb25Qb2ludGVyTW92ZSB3aXRoIHRoZSBsYXN0IGtub3duIGV2ZW50LiBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gZW5hYmxlIHJheWNhc3Rpbmcgd2l0aG91dFxuXHQgKiAgZXhwbGljaXQgdXNlciBpbnRlcmFjdGlvbiwgZm9yIGluc3RhbmNlIHdoZW4gdGhlIGNhbWVyYSBtb3ZlcyBhIGhvdmVyYWJsZSBvYmplY3QgdW5kZXJuZWF0aCB0aGUgY3Vyc29yLlxuXHQgKi9cblx0dXBkYXRlPzogKCkgPT4gdm9pZDtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0UG9pbnRlckNhcHR1cmVUYXJnZXQge1xuXHRpbnRlcnNlY3Rpb246IE5ndEludGVyc2VjdGlvbjtcblx0dGFyZ2V0OiBFbGVtZW50O1xufVxuXG4vKipcbiAqIFJlbGVhc2UgcG9pbnRlciBjYXB0dXJlcy5cbiAqIFRoaXMgaXMgY2FsbGVkIGJ5IHJlbGVhc2VQb2ludGVyQ2FwdHVyZSBpbiB0aGUgQVBJLCBhbmQgd2hlbiBhbiBvYmplY3QgaXMgcmVtb3ZlZC5cbiAqL1xuZnVuY3Rpb24gcmVsZWFzZUludGVybmFsUG9pbnRlckNhcHR1cmUoXG5cdGNhcHR1cmVkTWFwOiBNYXA8bnVtYmVyLCBNYXA8VEhSRUUuT2JqZWN0M0QsIE5ndFBvaW50ZXJDYXB0dXJlVGFyZ2V0Pj4sXG5cdG9iajogVEhSRUUuT2JqZWN0M0QsXG5cdGNhcHR1cmVzOiBNYXA8VEhSRUUuT2JqZWN0M0QsIE5ndFBvaW50ZXJDYXB0dXJlVGFyZ2V0Pixcblx0cG9pbnRlcklkOiBudW1iZXIsXG4pOiB2b2lkIHtcblx0Y29uc3QgY2FwdHVyZURhdGE6IE5ndFBvaW50ZXJDYXB0dXJlVGFyZ2V0IHwgdW5kZWZpbmVkID0gY2FwdHVyZXMuZ2V0KG9iaik7XG5cdGlmIChjYXB0dXJlRGF0YSkge1xuXHRcdGNhcHR1cmVzLmRlbGV0ZShvYmopO1xuXHRcdC8vIElmIHRoaXMgd2FzIHRoZSBsYXN0IGNhcHR1cmluZyBvYmplY3QgZm9yIHRoaXMgcG9pbnRlclxuXHRcdGlmIChjYXB0dXJlcy5zaXplID09PSAwKSB7XG5cdFx0XHRjYXB0dXJlZE1hcC5kZWxldGUocG9pbnRlcklkKTtcblx0XHRcdGNhcHR1cmVEYXRhLnRhcmdldC5yZWxlYXNlUG9pbnRlckNhcHR1cmUocG9pbnRlcklkKTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUludGVyYWN0aXZpdHkoc3RvcmU6IE5ndFNpZ25hbFN0b3JlPE5ndFN0YXRlPiwgb2JqZWN0OiBUSFJFRS5PYmplY3QzRCkge1xuXHRjb25zdCB7IGludGVybmFsIH0gPSBzdG9yZS5zbmFwc2hvdDtcblx0Ly8gUmVtb3ZlcyBldmVyeSB0cmFjZSBvZiBhbiBvYmplY3QgZnJvbSB0aGUgZGF0YSBzdG9yZVxuXHRpbnRlcm5hbC5pbnRlcmFjdGlvbiA9IGludGVybmFsLmludGVyYWN0aW9uLmZpbHRlcigobykgPT4gbyAhPT0gb2JqZWN0KTtcblx0aW50ZXJuYWwuaW5pdGlhbEhpdHMgPSBpbnRlcm5hbC5pbml0aWFsSGl0cy5maWx0ZXIoKG8pID0+IG8gIT09IG9iamVjdCk7XG5cdGludGVybmFsLmhvdmVyZWQuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuXHRcdGlmICh2YWx1ZS5ldmVudE9iamVjdCA9PT0gb2JqZWN0IHx8IHZhbHVlLm9iamVjdCA9PT0gb2JqZWN0KSB7XG5cdFx0XHQvLyBDbGVhciBvdXQgaW50ZXJzZWN0cywgdGhleSBhcmUgb3V0ZGF0ZWQgYnkgbm93XG5cdFx0XHRpbnRlcm5hbC5ob3ZlcmVkLmRlbGV0ZShrZXkpO1xuXHRcdH1cblx0fSk7XG5cdGludGVybmFsLmNhcHR1cmVkTWFwLmZvckVhY2goKGNhcHR1cmVzLCBwb2ludGVySWQpID0+IHtcblx0XHRyZWxlYXNlSW50ZXJuYWxQb2ludGVyQ2FwdHVyZShpbnRlcm5hbC5jYXB0dXJlZE1hcCwgb2JqZWN0LCBjYXB0dXJlcywgcG9pbnRlcklkKTtcblx0fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFdmVudHMoc3RvcmU6IE5ndFNpZ25hbFN0b3JlPE5ndFN0YXRlPikge1xuXHQvKiogQ2FsY3VsYXRlcyBkZWx0YSAqL1xuXHRmdW5jdGlvbiBjYWxjdWxhdGVEaXN0YW5jZShldmVudDogTmd0RG9tRXZlbnQpIHtcblx0XHRjb25zdCBpbnRlcm5hbCA9IHN0b3JlLmdldCgnaW50ZXJuYWwnKTtcblx0XHRjb25zdCBkeCA9IGV2ZW50Lm9mZnNldFggLSBpbnRlcm5hbC5pbml0aWFsQ2xpY2tbMF07XG5cdFx0Y29uc3QgZHkgPSBldmVudC5vZmZzZXRZIC0gaW50ZXJuYWwuaW5pdGlhbENsaWNrWzFdO1xuXHRcdHJldHVybiBNYXRoLnJvdW5kKE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSkpO1xuXHR9XG5cblx0LyoqIFJldHVybnMgdHJ1ZSBpZiBhbiBpbnN0YW5jZSBoYXMgYSB2YWxpZCBwb2ludGVyLWV2ZW50IHJlZ2lzdGVyZWQsIHRoaXMgZXhjbHVkZXMgc2Nyb2xsLCBjbGlja3MgZXRjICovXG5cdGZ1bmN0aW9uIGZpbHRlclBvaW50ZXJFdmVudHMob2JqZWN0czogVEhSRUUuT2JqZWN0M0RbXSkge1xuXHRcdHJldHVybiBvYmplY3RzLmZpbHRlcigob2JqKSA9PlxuXHRcdFx0Wydtb3ZlJywgJ292ZXInLCAnZW50ZXInLCAnb3V0JywgJ2xlYXZlJ10uc29tZSgobmFtZSkgPT4ge1xuXHRcdFx0XHRjb25zdCBldmVudE5hbWUgPSBgcG9pbnRlciR7bmFtZX1gIGFzIGtleW9mIE5ndEV2ZW50SGFuZGxlcnM7XG5cdFx0XHRcdHJldHVybiBnZXRMb2NhbFN0YXRlKG9iaik/LmhhbmRsZXJzPy5bZXZlbnROYW1lXTtcblx0XHRcdH0pLFxuXHRcdCk7XG5cdH1cblxuXHRmdW5jdGlvbiBpbnRlcnNlY3QoZXZlbnQ6IE5ndERvbUV2ZW50LCBmaWx0ZXI/OiAob2JqZWN0czogVEhSRUUuT2JqZWN0M0RbXSkgPT4gVEhSRUUuT2JqZWN0M0RbXSkge1xuXHRcdGNvbnN0IHN0YXRlID0gc3RvcmUuZ2V0KCk7XG5cdFx0Y29uc3QgZHVwbGljYXRlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXHRcdGNvbnN0IGludGVyc2VjdGlvbnM6IE5ndEludGVyc2VjdGlvbltdID0gW107XG5cdFx0Ly8gQWxsb3cgY2FsbGVycyB0byBlbGltaW5hdGUgZXZlbnQgb2JqZWN0c1xuXHRcdGNvbnN0IGV2ZW50c09iamVjdHMgPSBmaWx0ZXIgPyBmaWx0ZXIoc3RhdGUuaW50ZXJuYWwuaW50ZXJhY3Rpb24pIDogc3RhdGUuaW50ZXJuYWwuaW50ZXJhY3Rpb247XG5cdFx0Ly8gUmVzZXQgYWxsIHJheWNhc3RlciBjYW1lcmFzIHRvIHVuZGVmaW5lZFxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZXZlbnRzT2JqZWN0cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3Qgc3RhdGUgPSBnZXRMb2NhbFN0YXRlKGV2ZW50c09iamVjdHNbaV0pPy5zdG9yZS5zbmFwc2hvdDtcblx0XHRcdGlmIChzdGF0ZSkge1xuXHRcdFx0XHRzdGF0ZS5yYXljYXN0ZXIuY2FtZXJhID0gdW5kZWZpbmVkITtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIXN0YXRlLnByZXZpb3VzUm9vdCkge1xuXHRcdFx0Ly8gTWFrZSBzdXJlIHJvb3QtbGV2ZWwgcG9pbnRlciBhbmQgcmF5IGFyZSBzZXQgdXBcblx0XHRcdHN0YXRlLmV2ZW50cy5jb21wdXRlPy4oZXZlbnQsIHN0b3JlLCBudWxsKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBoYW5kbGVSYXljYXN0KG9iajogVEhSRUUuT2JqZWN0M0QpIHtcblx0XHRcdGNvbnN0IG9iakxvY2FsU3RhdGUgPSBnZXRMb2NhbFN0YXRlKG9iaik7XG5cdFx0XHRjb25zdCBvYmpTdG9yZSA9IG9iakxvY2FsU3RhdGU/LnN0b3JlO1xuXHRcdFx0Y29uc3Qgb2JqU3RhdGUgPSBvYmpTdG9yZT8uc25hcHNob3Q7XG5cdFx0XHQvLyBTa2lwIGV2ZW50IGhhbmRsaW5nIHdoZW4gbm9FdmVudHMgaXMgc2V0LCBvciB3aGVuIHRoZSByYXljYXN0ZXJzIGNhbWVyYSBpcyBudWxsXG5cdFx0XHRpZiAoIW9ialN0YXRlIHx8ICFvYmpTdGF0ZS5ldmVudHMuZW5hYmxlZCB8fCBvYmpTdGF0ZS5yYXljYXN0ZXIuY2FtZXJhID09PSBudWxsKSByZXR1cm4gW107XG5cblx0XHRcdC8vIFdoZW4gdGhlIGNhbWVyYSBpcyB1bmRlZmluZWQgd2UgaGF2ZSB0byBjYWxsIHRoZSBldmVudCBsYXllcnMgdXBkYXRlIGZ1bmN0aW9uXG5cdFx0XHRpZiAob2JqU3RhdGUucmF5Y2FzdGVyLmNhbWVyYSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdG9ialN0YXRlLmV2ZW50cy5jb21wdXRlPy4oZXZlbnQsIG9ialN0b3JlLCBvYmpTdGF0ZS5wcmV2aW91c1Jvb3QpO1xuXHRcdFx0XHQvLyBJZiB0aGUgY2FtZXJhIGlzIHN0aWxsIHVuZGVmaW5lZCB3ZSBoYXZlIHRvIHNraXAgdGhpcyBsYXllciBlbnRpcmVseVxuXHRcdFx0XHRpZiAob2JqU3RhdGUucmF5Y2FzdGVyLmNhbWVyYSA9PT0gdW5kZWZpbmVkKSBvYmpTdGF0ZS5yYXljYXN0ZXIuY2FtZXJhID0gbnVsbCE7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEludGVyc2VjdCBvYmplY3QgYnkgb2JqZWN0XG5cdFx0XHRyZXR1cm4gb2JqU3RhdGUucmF5Y2FzdGVyLmNhbWVyYSA/IG9ialN0YXRlLnJheWNhc3Rlci5pbnRlcnNlY3RPYmplY3Qob2JqLCB0cnVlKSA6IFtdO1xuXHRcdH1cblxuXHRcdC8vIENvbGxlY3QgZXZlbnRzXG5cdFx0bGV0IGhpdHM6IFRIUkVFLkludGVyc2VjdGlvbjxUSFJFRS5PYmplY3QzRD5bXSA9IGV2ZW50c09iamVjdHNcblx0XHRcdC8vIEludGVyc2VjdCBvYmplY3RzXG5cdFx0XHQuZmxhdE1hcChoYW5kbGVSYXljYXN0KVxuXHRcdFx0Ly8gU29ydCBieSBldmVudCBwcmlvcml0eSBhbmQgZGlzdGFuY2Vcblx0XHRcdC5zb3J0KChhLCBiKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGFTdGF0ZSA9IGdldExvY2FsU3RhdGUoYS5vYmplY3QpPy5zdG9yZT8uc25hcHNob3Q7XG5cdFx0XHRcdGNvbnN0IGJTdGF0ZSA9IGdldExvY2FsU3RhdGUoYi5vYmplY3QpPy5zdG9yZT8uc25hcHNob3Q7XG5cdFx0XHRcdGlmICghYVN0YXRlIHx8ICFiU3RhdGUpIHJldHVybiBhLmRpc3RhbmNlIC0gYi5kaXN0YW5jZTtcblx0XHRcdFx0cmV0dXJuIGJTdGF0ZS5ldmVudHMucHJpb3JpdHkgLSBhU3RhdGUuZXZlbnRzLnByaW9yaXR5IHx8IGEuZGlzdGFuY2UgLSBiLmRpc3RhbmNlO1xuXHRcdFx0fSlcblx0XHRcdC8vIEZpbHRlciBvdXQgZHVwbGljYXRlc1xuXHRcdFx0LmZpbHRlcigoaXRlbSkgPT4ge1xuXHRcdFx0XHRjb25zdCBpZCA9IG1ha2VJZChpdGVtIGFzIE5ndEludGVyc2VjdGlvbik7XG5cdFx0XHRcdGlmIChkdXBsaWNhdGVzLmhhcyhpZCkpIHJldHVybiBmYWxzZTtcblx0XHRcdFx0ZHVwbGljYXRlcy5hZGQoaWQpO1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0pO1xuXG5cdFx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL21yZG9vYi90aHJlZS5qcy9pc3N1ZXMvMTYwMzFcblx0XHQvLyBBbGxvdyBjdXN0b20gdXNlcmxhbmQgaW50ZXJzZWN0IHNvcnQgb3JkZXIsIHRoaXMgbGlrZWx5IG9ubHkgbWFrZXMgc2Vuc2Ugb24gdGhlIHJvb3QgZmlsdGVyXG5cdFx0aWYgKHN0YXRlLmV2ZW50cy5maWx0ZXIpIGhpdHMgPSBzdGF0ZS5ldmVudHMuZmlsdGVyKGhpdHMsIHN0b3JlKTtcblxuXHRcdC8vIEJ1YmJsZSB1cCB0aGUgZXZlbnRzLCBmaW5kIHRoZSBldmVudCBzb3VyY2UgKGV2ZW50T2JqZWN0KVxuXHRcdGZvciAoY29uc3QgaGl0IG9mIGhpdHMpIHtcblx0XHRcdGxldCBldmVudE9iamVjdDogVEhSRUUuT2JqZWN0M0QgfCBudWxsID0gaGl0Lm9iamVjdDtcblx0XHRcdC8vIGJ1YmJsZSBldmVudCB1cFxuXHRcdFx0d2hpbGUgKGV2ZW50T2JqZWN0KSB7XG5cdFx0XHRcdGlmIChnZXRMb2NhbFN0YXRlKGV2ZW50T2JqZWN0KT8uZXZlbnRDb3VudCkge1xuXHRcdFx0XHRcdGludGVyc2VjdGlvbnMucHVzaCh7IC4uLmhpdCwgZXZlbnRPYmplY3QgfSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZXZlbnRPYmplY3QgPSBldmVudE9iamVjdC5wYXJlbnQ7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gSWYgdGhlIGludGVyYWN0aW9uIGlzIGNhcHR1cmVkLCBtYWtlIGFsbCBjYXB0dXJpbmcgdGFyZ2V0cyBwYXJ0IG9mIHRoZSBpbnRlcnNlY3QuXG5cdFx0aWYgKCdwb2ludGVySWQnIGluIGV2ZW50ICYmIHN0YXRlLmludGVybmFsLmNhcHR1cmVkTWFwLmhhcyhldmVudC5wb2ludGVySWQpKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGNhcHR1cmVEYXRhIG9mIHN0YXRlLmludGVybmFsLmNhcHR1cmVkTWFwLmdldChldmVudC5wb2ludGVySWQpIS52YWx1ZXMoKSkge1xuXHRcdFx0XHRpZiAoIWR1cGxpY2F0ZXMuaGFzKG1ha2VJZChjYXB0dXJlRGF0YS5pbnRlcnNlY3Rpb24pKSkgaW50ZXJzZWN0aW9ucy5wdXNoKGNhcHR1cmVEYXRhLmludGVyc2VjdGlvbik7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBpbnRlcnNlY3Rpb25zO1xuXHR9XG5cblx0LyoqICBIYW5kbGVzIGludGVyc2VjdGlvbnMgYnkgZm9yd2FyZGluZyB0aGVtIHRvIGhhbmRsZXJzICovXG5cdGZ1bmN0aW9uIGhhbmRsZUludGVyc2VjdHMoXG5cdFx0aW50ZXJzZWN0aW9uczogTmd0SW50ZXJzZWN0aW9uW10sXG5cdFx0ZXZlbnQ6IE5ndERvbUV2ZW50LFxuXHRcdGRlbHRhOiBudW1iZXIsXG5cdFx0Y2FsbGJhY2s6IChldmVudDogTmd0VGhyZWVFdmVudDxOZ3REb21FdmVudD4pID0+IHZvaWQsXG5cdCkge1xuXHRcdGNvbnN0IHJvb3RTdGF0ZSA9IHN0b3JlLnNuYXBzaG90O1xuXG5cdFx0Ly8gSWYgYW55dGhpbmcgaGFzIGJlZW4gZm91bmQsIGZvcndhcmQgaXQgdG8gdGhlIGV2ZW50IGxpc3RlbmVyc1xuXHRcdGlmIChpbnRlcnNlY3Rpb25zLmxlbmd0aCkge1xuXHRcdFx0Y29uc3QgbG9jYWxTdGF0ZSA9IHsgc3RvcHBlZDogZmFsc2UgfTtcblx0XHRcdGZvciAoY29uc3QgaGl0IG9mIGludGVyc2VjdGlvbnMpIHtcblx0XHRcdFx0Y29uc3QgeyByYXljYXN0ZXIsIHBvaW50ZXIsIGNhbWVyYSwgaW50ZXJuYWwgfSA9IGdldExvY2FsU3RhdGUoaGl0Lm9iamVjdCk/LnN0b3JlPy5zbmFwc2hvdCB8fCByb290U3RhdGU7XG5cdFx0XHRcdGNvbnN0IHVucHJvamVjdGVkUG9pbnQgPSBuZXcgVEhSRUUuVmVjdG9yMyhwb2ludGVyLngsIHBvaW50ZXIueSwgMCkudW5wcm9qZWN0KGNhbWVyYSk7XG5cdFx0XHRcdGNvbnN0IGhhc1BvaW50ZXJDYXB0dXJlID0gKGlkOiBudW1iZXIpID0+IGludGVybmFsLmNhcHR1cmVkTWFwLmdldChpZCk/LmhhcyhoaXQuZXZlbnRPYmplY3QpID8/IGZhbHNlO1xuXG5cdFx0XHRcdGNvbnN0IHNldFBvaW50ZXJDYXB0dXJlID0gKGlkOiBudW1iZXIpID0+IHtcblx0XHRcdFx0XHRjb25zdCBjYXB0dXJlRGF0YSA9IHsgaW50ZXJzZWN0aW9uOiBoaXQsIHRhcmdldDogZXZlbnQudGFyZ2V0IGFzIEVsZW1lbnQgfTtcblx0XHRcdFx0XHRpZiAoaW50ZXJuYWwuY2FwdHVyZWRNYXAuaGFzKGlkKSkge1xuXHRcdFx0XHRcdFx0Ly8gaWYgdGhlIHBvaW50ZXJJZCB3YXMgcHJldmlvdXNseSBjYXB0dXJlZCwgd2UgYWRkIHRoZSBoaXQgdG8gdGhlXG5cdFx0XHRcdFx0XHQvLyBldmVudCBjYXB0dXJlZE1hcC5cblx0XHRcdFx0XHRcdGludGVybmFsLmNhcHR1cmVkTWFwLmdldChpZCkhLnNldChoaXQuZXZlbnRPYmplY3QsIGNhcHR1cmVEYXRhKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Ly8gaWYgdGhlIHBvaW50ZXJJZCB3YXMgbm90IHByZXZpb3VzbHkgY2FwdHVyZWQsIHdlIGNyZWF0ZSBhIG1hcFxuXHRcdFx0XHRcdFx0Ly8gY29udGFpbmluZyB0aGUgaGl0T2JqZWN0LCBhbmQgdGhlIGhpdC4gaGl0T2JqZWN0IGlzIHVzZWQgZm9yXG5cdFx0XHRcdFx0XHQvLyBmYXN0ZXIgYWNjZXNzLlxuXHRcdFx0XHRcdFx0aW50ZXJuYWwuY2FwdHVyZWRNYXAuc2V0KGlkLCBuZXcgTWFwKFtbaGl0LmV2ZW50T2JqZWN0LCBjYXB0dXJlRGF0YV1dKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIENhbGwgdGhlIG9yaWdpbmFsIGV2ZW50IG5vd1xuXHRcdFx0XHRcdChldmVudC50YXJnZXQgYXMgRWxlbWVudCkuc2V0UG9pbnRlckNhcHR1cmUoaWQpO1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdGNvbnN0IHJlbGVhc2VQb2ludGVyQ2FwdHVyZSA9IChpZDogbnVtYmVyKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgY2FwdHVyZXMgPSBpbnRlcm5hbC5jYXB0dXJlZE1hcC5nZXQoaWQpO1xuXHRcdFx0XHRcdGlmIChjYXB0dXJlcykge1xuXHRcdFx0XHRcdFx0cmVsZWFzZUludGVybmFsUG9pbnRlckNhcHR1cmUoaW50ZXJuYWwuY2FwdHVyZWRNYXAsIGhpdC5ldmVudE9iamVjdCwgY2FwdHVyZXMsIGlkKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Ly8gQWRkIG5hdGl2ZSBldmVudCBwcm9wc1xuXHRcdFx0XHRjb25zdCBleHRyYWN0RXZlbnRQcm9wczogYW55ID0ge307XG5cdFx0XHRcdC8vIFRoaXMgaXRlcmF0ZXMgb3ZlciB0aGUgZXZlbnQncyBwcm9wZXJ0aWVzIGluY2x1ZGluZyB0aGUgaW5oZXJpdGVkIG9uZXMuIE5hdGl2ZSBQb2ludGVyRXZlbnRzIGhhdmUgbW9zdCBvZiB0aGVpciBwcm9wcyBhcyBnZXR0ZXJzIHdoaWNoIGFyZSBpbmhlcml0ZWQsIGJ1dCBwb2x5ZmlsbGVkIFBvaW50ZXJFdmVudHMgaGF2ZSB0aGVtIGFsbCBhcyB0aGVpciBvd24gcHJvcGVydGllcyAoaS5lLiBub3QgaW5oZXJpdGVkKS4gV2UgY2FuJ3QgdXNlIE9iamVjdC5rZXlzKCkgb3IgT2JqZWN0LmVudHJpZXMoKSBhcyB0aGV5IG9ubHkgcmV0dXJuIFwib3duXCIgcHJvcGVydGllczsgbm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZihldmVudCkgYXMgdGhhdCAqZG9lc24ndCogcmV0dXJuIFwib3duXCIgcHJvcGVydGllcywgb25seSBpbmhlcml0ZWQgb25lcy5cblx0XHRcdFx0Zm9yIChjb25zdCBwcm9wIGluIGV2ZW50KSB7XG5cdFx0XHRcdFx0Y29uc3QgcHJvcGVydHkgPSBldmVudFtwcm9wIGFzIGtleW9mIE5ndERvbUV2ZW50XTtcblx0XHRcdFx0XHQvLyBPbmx5IGNvcHkgb3ZlciBhdG9taWNzLCBsZWF2ZSBmdW5jdGlvbnMgYWxvbmUgYXMgdGhlc2Ugc2hvdWxkIGJlXG5cdFx0XHRcdFx0Ly8gY2FsbGVkIGFzIGV2ZW50Lm5hdGl2ZUV2ZW50LmZuKClcblx0XHRcdFx0XHRpZiAodHlwZW9mIHByb3BlcnR5ICE9PSAnZnVuY3Rpb24nKSBleHRyYWN0RXZlbnRQcm9wc1twcm9wXSA9IHByb3BlcnR5O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgcmF5Y2FzdEV2ZW50OiBOZ3RUaHJlZUV2ZW50PE5ndERvbUV2ZW50PiA9IHtcblx0XHRcdFx0XHQuLi5oaXQsXG5cdFx0XHRcdFx0Li4uZXh0cmFjdEV2ZW50UHJvcHMsXG5cdFx0XHRcdFx0cG9pbnRlcixcblx0XHRcdFx0XHRpbnRlcnNlY3Rpb25zLFxuXHRcdFx0XHRcdHN0b3BwZWQ6IGxvY2FsU3RhdGUuc3RvcHBlZCxcblx0XHRcdFx0XHRkZWx0YSxcblx0XHRcdFx0XHR1bnByb2plY3RlZFBvaW50LFxuXHRcdFx0XHRcdHJheTogcmF5Y2FzdGVyLnJheSxcblx0XHRcdFx0XHRjYW1lcmEsXG5cdFx0XHRcdFx0Ly8gSGlqYWNrIHN0b3BQcm9wYWdhdGlvbiwgd2hpY2gganVzdCBzZXRzIGEgZmxhZ1xuXHRcdFx0XHRcdHN0b3BQcm9wYWdhdGlvbigpIHtcblx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wbW5kcnMvcmVhY3QtdGhyZWUtZmliZXIvaXNzdWVzLzU5NlxuXHRcdFx0XHRcdFx0Ly8gRXZlbnRzIGFyZSBub3QgYWxsb3dlZCB0byBzdG9wIHByb3BhZ2F0aW9uIGlmIHRoZSBwb2ludGVyIGhhcyBiZWVuIGNhcHR1cmVkXG5cdFx0XHRcdFx0XHRjb25zdCBjYXB0dXJlc0ZvclBvaW50ZXIgPSAncG9pbnRlcklkJyBpbiBldmVudCAmJiBpbnRlcm5hbC5jYXB0dXJlZE1hcC5nZXQoZXZlbnQucG9pbnRlcklkKTtcblxuXHRcdFx0XHRcdFx0Ly8gV2Ugb25seSBhdXRob3JpemUgc3RvcFByb3BhZ2F0aW9uLi4uXG5cdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdC8vIC4uLmlmIHRoaXMgcG9pbnRlciBoYXNuJ3QgYmVlbiBjYXB0dXJlZFxuXHRcdFx0XHRcdFx0XHQhY2FwdHVyZXNGb3JQb2ludGVyIHx8XG5cdFx0XHRcdFx0XHRcdC8vIC4uLiBvciBpZiB0aGUgaGl0IG9iamVjdCBpcyBjYXB0dXJpbmcgdGhlIHBvaW50ZXJcblx0XHRcdFx0XHRcdFx0Y2FwdHVyZXNGb3JQb2ludGVyLmhhcyhoaXQuZXZlbnRPYmplY3QpXG5cdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0cmF5Y2FzdEV2ZW50LnN0b3BwZWQgPSBsb2NhbFN0YXRlLnN0b3BwZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHQvLyBQcm9wYWdhdGlvbiBpcyBzdG9wcGVkLCByZW1vdmUgYWxsIG90aGVyIGhvdmVyIHJlY29yZHNcblx0XHRcdFx0XHRcdFx0Ly8gQW4gZXZlbnQgaGFuZGxlciBpcyBvbmx5IGFsbG93ZWQgdG8gZmx1c2ggb3RoZXIgaGFuZGxlcnMgaWYgaXQgaXMgaG92ZXJlZCBpdHNlbGZcblx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdGludGVybmFsLmhvdmVyZWQuc2l6ZSAmJlxuXHRcdFx0XHRcdFx0XHRcdEFycmF5LmZyb20oaW50ZXJuYWwuaG92ZXJlZC52YWx1ZXMoKSkuZmluZCgoaSkgPT4gaS5ldmVudE9iamVjdCA9PT0gaGl0LmV2ZW50T2JqZWN0KVxuXHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBPYmplY3RzIGNhbm5vdCBmbHVzaCBvdXQgaGlnaGVyIHVwIG9iamVjdHMgdGhhdCBoYXZlIGFscmVhZHkgY2F1Z2h0IHRoZSBldmVudFxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGhpZ2hlciA9IGludGVyc2VjdGlvbnMuc2xpY2UoMCwgaW50ZXJzZWN0aW9ucy5pbmRleE9mKGhpdCkpO1xuXHRcdFx0XHRcdFx0XHRcdGNhbmNlbFBvaW50ZXIoWy4uLmhpZ2hlciwgaGl0XSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdC8vIHRoZXJlIHNob3VsZCBiZSBhIGRpc3RpbmN0aW9uIGJldHdlZW4gdGFyZ2V0IGFuZCBjdXJyZW50VGFyZ2V0XG5cdFx0XHRcdFx0dGFyZ2V0OiB7IGhhc1BvaW50ZXJDYXB0dXJlLCBzZXRQb2ludGVyQ2FwdHVyZSwgcmVsZWFzZVBvaW50ZXJDYXB0dXJlIH0sXG5cdFx0XHRcdFx0Y3VycmVudFRhcmdldDogeyBoYXNQb2ludGVyQ2FwdHVyZSwgc2V0UG9pbnRlckNhcHR1cmUsIHJlbGVhc2VQb2ludGVyQ2FwdHVyZSB9LFxuXHRcdFx0XHRcdG5hdGl2ZUV2ZW50OiBldmVudCxcblx0XHRcdFx0fTtcblxuXHRcdFx0XHQvLyBDYWxsIHN1YnNjcmliZXJzXG5cdFx0XHRcdGNhbGxiYWNrKHJheWNhc3RFdmVudCk7XG5cdFx0XHRcdC8vIEV2ZW50IGJ1YmJsaW5nIG1heSBiZSBpbnRlcnJ1cHRlZCBieSBzdG9wUHJvcGFnYXRpb25cblx0XHRcdFx0aWYgKGxvY2FsU3RhdGUuc3RvcHBlZCkgYnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBpbnRlcnNlY3Rpb25zO1xuXHR9XG5cblx0ZnVuY3Rpb24gY2FuY2VsUG9pbnRlcihpbnRlcnNlY3Rpb25zOiBOZ3RJbnRlcnNlY3Rpb25bXSkge1xuXHRcdGNvbnN0IGludGVybmFsID0gc3RvcmUuZ2V0KCdpbnRlcm5hbCcpO1xuXHRcdGZvciAoY29uc3QgaG92ZXJlZE9iaiBvZiBpbnRlcm5hbC5ob3ZlcmVkLnZhbHVlcygpKSB7XG5cdFx0XHQvLyBXaGVuIG5vIG9iamVjdHMgd2VyZSBoaXQgb3IgdGhlIHRoZSBob3ZlcmVkIG9iamVjdCB3YXNuJ3QgZm91bmQgdW5kZXJuZWF0aCB0aGUgY3Vyc29yXG5cdFx0XHQvLyB3ZSBjYWxsIG9uUG9pbnRlck91dCBhbmQgZGVsZXRlIHRoZSBvYmplY3QgZnJvbSB0aGUgaG92ZXJlZC1lbGVtZW50cyBtYXBcblx0XHRcdGlmIChcblx0XHRcdFx0IWludGVyc2VjdGlvbnMubGVuZ3RoIHx8XG5cdFx0XHRcdCFpbnRlcnNlY3Rpb25zLmZpbmQoXG5cdFx0XHRcdFx0KGhpdCkgPT5cblx0XHRcdFx0XHRcdGhpdC5vYmplY3QgPT09IGhvdmVyZWRPYmoub2JqZWN0ICYmXG5cdFx0XHRcdFx0XHRoaXQuaW5kZXggPT09IGhvdmVyZWRPYmouaW5kZXggJiZcblx0XHRcdFx0XHRcdGhpdC5pbnN0YW5jZUlkID09PSBob3ZlcmVkT2JqLmluc3RhbmNlSWQsXG5cdFx0XHRcdClcblx0XHRcdCkge1xuXHRcdFx0XHRjb25zdCBldmVudE9iamVjdCA9IGhvdmVyZWRPYmouZXZlbnRPYmplY3Q7XG5cdFx0XHRcdGNvbnN0IGluc3RhbmNlID0gZ2V0TG9jYWxTdGF0ZShldmVudE9iamVjdCk7XG5cdFx0XHRcdGNvbnN0IGhhbmRsZXJzID0gaW5zdGFuY2U/LmhhbmRsZXJzO1xuXHRcdFx0XHRpbnRlcm5hbC5ob3ZlcmVkLmRlbGV0ZShtYWtlSWQoaG92ZXJlZE9iaikpO1xuXHRcdFx0XHRpZiAoaW5zdGFuY2U/LmV2ZW50Q291bnQpIHtcblx0XHRcdFx0XHQvLyBDbGVhciBvdXQgaW50ZXJzZWN0cywgdGhleSBhcmUgb3V0ZGF0ZWQgYnkgbm93XG5cdFx0XHRcdFx0Y29uc3QgZGF0YSA9IHsgLi4uaG92ZXJlZE9iaiwgaW50ZXJzZWN0aW9ucyB9O1xuXHRcdFx0XHRcdGhhbmRsZXJzPy5wb2ludGVyb3V0Py4oZGF0YSBhcyBOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4pO1xuXHRcdFx0XHRcdGhhbmRsZXJzPy5wb2ludGVybGVhdmU/LihkYXRhIGFzIE5ndFRocmVlRXZlbnQ8UG9pbnRlckV2ZW50Pik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBwb2ludGVyTWlzc2VkKGV2ZW50OiBNb3VzZUV2ZW50LCBvYmplY3RzOiBUSFJFRS5PYmplY3QzRFtdKSB7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBvYmplY3RzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCBpbnN0YW5jZSA9IGdldExvY2FsU3RhdGUob2JqZWN0c1tpXSk7XG5cdFx0XHRpbnN0YW5jZT8uaGFuZGxlcnMucG9pbnRlcm1pc3NlZD8uKGV2ZW50KTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBoYW5kbGVQb2ludGVyKG5hbWU6IHN0cmluZykge1xuXHRcdC8vIERlYWwgd2l0aCBjYW5jZWxhdGlvblxuXHRcdHN3aXRjaCAobmFtZSkge1xuXHRcdFx0Y2FzZSAncG9pbnRlcmxlYXZlJzpcblx0XHRcdGNhc2UgJ3BvaW50ZXJjYW5jZWwnOlxuXHRcdFx0XHRyZXR1cm4gKCkgPT4gY2FuY2VsUG9pbnRlcihbXSk7XG5cdFx0XHRjYXNlICdsb3N0cG9pbnRlcmNhcHR1cmUnOlxuXHRcdFx0XHRyZXR1cm4gKGV2ZW50OiBOZ3REb21FdmVudCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHsgaW50ZXJuYWwgfSA9IHN0b3JlLnNuYXBzaG90O1xuXHRcdFx0XHRcdGlmICgncG9pbnRlcklkJyBpbiBldmVudCAmJiBpbnRlcm5hbC5jYXB0dXJlZE1hcC5oYXMoZXZlbnQucG9pbnRlcklkKSkge1xuXHRcdFx0XHRcdFx0Ly8gSWYgdGhlIG9iamVjdCBldmVudCBpbnRlcmZhY2UgaGFkIGxvc3Rwb2ludGVyY2FwdHVyZSwgd2UnZCBjYWxsIGl0IGhlcmUgb24gZXZlcnlcblx0XHRcdFx0XHRcdC8vIG9iamVjdCB0aGF0J3MgZ2V0dGluZyByZW1vdmVkLiBXZSBjYWxsIGl0IG9uIHRoZSBuZXh0IGZyYW1lIGJlY2F1c2UgbG9zdHBvaW50ZXJjYXB0dXJlXG5cdFx0XHRcdFx0XHQvLyBmaXJlcyBiZWZvcmUgcG9pbnRlcnVwLiBPdGhlcndpc2UgcG9pbnRlclVwIHdvdWxkIG5ldmVyIGJlIGNhbGxlZCBpZiB0aGUgZXZlbnQgZGlkbid0XG5cdFx0XHRcdFx0XHQvLyBoYXBwZW4gaW4gdGhlIG9iamVjdCBpdCBvcmlnaW5hdGVkIGZyb20sIGxlYXZpbmcgY29tcG9uZW50cyBpbiBhIGluLWJldHdlZW4gc3RhdGUuXG5cdFx0XHRcdFx0XHRyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHQvLyBPbmx5IHJlbGVhc2UgaWYgcG9pbnRlci11cCBkaWRuJ3QgZG8gaXQgYWxyZWFkeVxuXHRcdFx0XHRcdFx0XHRpZiAoaW50ZXJuYWwuY2FwdHVyZWRNYXAuaGFzKGV2ZW50LnBvaW50ZXJJZCkpIHtcblx0XHRcdFx0XHRcdFx0XHRpbnRlcm5hbC5jYXB0dXJlZE1hcC5kZWxldGUoZXZlbnQucG9pbnRlcklkKTtcblx0XHRcdFx0XHRcdFx0XHRjYW5jZWxQb2ludGVyKFtdKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdH1cblxuXHRcdC8vIEFueSBvdGhlciBwb2ludGVyIGdvZXMgaGVyZSAuLi5cblx0XHRyZXR1cm4gZnVuY3Rpb24gaGFuZGxlRXZlbnQoZXZlbnQ6IE5ndERvbUV2ZW50KSB7XG5cdFx0XHRjb25zdCBwb2ludGVyTWlzc2VkJDogU3ViamVjdDxNb3VzZUV2ZW50PiA9IChzdG9yZSBhcyBOZ3RBbnlSZWNvcmQpWydwb2ludGVyTWlzc2VkJCddO1xuXHRcdFx0Y29uc3QgaW50ZXJuYWwgPSBzdG9yZS5nZXQoJ2ludGVybmFsJyk7XG5cblx0XHRcdC8vIHByZXBhcmVSYXkoZXZlbnQpXG5cdFx0XHRpbnRlcm5hbC5sYXN0RXZlbnQubmF0aXZlRWxlbWVudCA9IGV2ZW50O1xuXG5cdFx0XHQvLyBHZXQgZnJlc2ggaW50ZXJzZWN0c1xuXHRcdFx0Y29uc3QgaXNQb2ludGVyTW92ZSA9IG5hbWUgPT09ICdwb2ludGVybW92ZSc7XG5cdFx0XHRjb25zdCBpc0NsaWNrRXZlbnQgPSBuYW1lID09PSAnY2xpY2snIHx8IG5hbWUgPT09ICdjb250ZXh0bWVudScgfHwgbmFtZSA9PT0gJ2RibGNsaWNrJztcblx0XHRcdGNvbnN0IGZpbHRlciA9IGlzUG9pbnRlck1vdmUgPyBmaWx0ZXJQb2ludGVyRXZlbnRzIDogdW5kZWZpbmVkO1xuXG5cdFx0XHRjb25zdCBoaXRzID0gaW50ZXJzZWN0KGV2ZW50LCBmaWx0ZXIpO1xuXHRcdFx0Y29uc3QgZGVsdGEgPSBpc0NsaWNrRXZlbnQgPyBjYWxjdWxhdGVEaXN0YW5jZShldmVudCkgOiAwO1xuXG5cdFx0XHQvLyBTYXZlIGluaXRpYWwgY29vcmRpbmF0ZXMgb24gcG9pbnRlci1kb3duXG5cdFx0XHRpZiAobmFtZSA9PT0gJ3BvaW50ZXJkb3duJykge1xuXHRcdFx0XHRpbnRlcm5hbC5pbml0aWFsQ2xpY2sgPSBbZXZlbnQub2Zmc2V0WCwgZXZlbnQub2Zmc2V0WV07XG5cdFx0XHRcdGludGVybmFsLmluaXRpYWxIaXRzID0gaGl0cy5tYXAoKGhpdCkgPT4gaGl0LmV2ZW50T2JqZWN0KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgYSBjbGljayB5aWVsZHMgbm8gcmVzdWx0cywgcGFzcyBpdCBiYWNrIHRvIHRoZSB1c2VyIGFzIGEgbWlzc1xuXHRcdFx0Ly8gTWlzc2VkIGV2ZW50cyBoYXZlIHRvIGNvbWUgZmlyc3QgaW4gb3JkZXIgdG8gZXN0YWJsaXNoIHVzZXItbGFuZCBzaWRlLWVmZmVjdCBjbGVhbiB1cFxuXHRcdFx0aWYgKGlzQ2xpY2tFdmVudCAmJiAhaGl0cy5sZW5ndGgpIHtcblx0XHRcdFx0aWYgKGRlbHRhIDw9IDIpIHtcblx0XHRcdFx0XHRwb2ludGVyTWlzc2VkKGV2ZW50LCBpbnRlcm5hbC5pbnRlcmFjdGlvbik7XG5cdFx0XHRcdFx0cG9pbnRlck1pc3NlZCQubmV4dChldmVudCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gVGFrZSBjYXJlIG9mIHVuaG92ZXJcblx0XHRcdGlmIChpc1BvaW50ZXJNb3ZlKSBjYW5jZWxQb2ludGVyKGhpdHMpO1xuXG5cdFx0XHRmdW5jdGlvbiBvbkludGVyc2VjdChkYXRhOiBOZ3RUaHJlZUV2ZW50PE5ndERvbUV2ZW50Pikge1xuXHRcdFx0XHRjb25zdCBldmVudE9iamVjdCA9IGRhdGEuZXZlbnRPYmplY3Q7XG5cdFx0XHRcdGNvbnN0IGluc3RhbmNlID0gZ2V0TG9jYWxTdGF0ZShldmVudE9iamVjdCk7XG5cdFx0XHRcdGNvbnN0IGhhbmRsZXJzID0gaW5zdGFuY2U/LmhhbmRsZXJzO1xuXG5cdFx0XHRcdC8vIENoZWNrIHByZXNlbmNlIG9mIGhhbmRsZXJzXG5cdFx0XHRcdGlmICghaW5zdGFuY2U/LmV2ZW50Q291bnQpIHJldHVybjtcblxuXHRcdFx0XHQvKlxuICAgICAgICBNQVlCRSBUT0RPLCBERUxFVEUgSUYgTk9UOlxuICAgICAgICAgIENoZWNrIGlmIHRoZSBvYmplY3QgaXMgY2FwdHVyZWQsIGNhcHR1cmVkIGV2ZW50cyBzaG91bGQgbm90IGhhdmUgaW50ZXJzZWN0cyBydW5uaW5nIGluIHBhcmFsbGVsXG4gICAgICAgICAgQnV0IHdvdWxkbid0IGl0IGJlIGJldHRlciB0byBqdXN0IHJlcGxhY2UgY2FwdHVyZWRNYXAgd2l0aCBhIHNpbmdsZSBlbnRyeT9cbiAgICAgICAgICBBbHNvLCBhcmUgd2UgT0sgd2l0aCBzdHJhaWdodCB1cCBtYWtpbmcgcGlja2luZyB1cCBtdWx0aXBsZSBvYmplY3RzIGltcG9zc2libGU/XG5cbiAgICAgICAgY29uc3QgcG9pbnRlcklkID0gKGRhdGEgYXMgVGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+KS5wb2ludGVySWRcbiAgICAgICAgaWYgKHBvaW50ZXJJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3QgY2FwdHVyZWRNZXNoU2V0ID0gaW50ZXJuYWwuY2FwdHVyZWRNYXAuZ2V0KHBvaW50ZXJJZClcbiAgICAgICAgICBpZiAoY2FwdHVyZWRNZXNoU2V0KSB7XG4gICAgICAgICAgICBjb25zdCBjYXB0dXJlZCA9IGNhcHR1cmVkTWVzaFNldC5nZXQoZXZlbnRPYmplY3QpXG4gICAgICAgICAgICBpZiAoY2FwdHVyZWQgJiYgY2FwdHVyZWQubG9jYWxTdGF0ZS5zdG9wcGVkKSByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgIH0qL1xuXG5cdFx0XHRcdGlmIChpc1BvaW50ZXJNb3ZlKSB7XG5cdFx0XHRcdFx0Ly8gTW92ZSBldmVudCAuLi5cblx0XHRcdFx0XHRpZiAoaGFuZGxlcnM/LnBvaW50ZXJvdmVyIHx8IGhhbmRsZXJzPy5wb2ludGVyZW50ZXIgfHwgaGFuZGxlcnM/LnBvaW50ZXJvdXQgfHwgaGFuZGxlcnM/LnBvaW50ZXJsZWF2ZSkge1xuXHRcdFx0XHRcdFx0Ly8gV2hlbiBlbnRlciBvciBvdXQgaXMgcHJlc2VudCB0YWtlIGNhcmUgb2YgaG92ZXItc3RhdGVcblx0XHRcdFx0XHRcdGNvbnN0IGlkID0gbWFrZUlkKGRhdGEpO1xuXHRcdFx0XHRcdFx0Y29uc3QgaG92ZXJlZEl0ZW0gPSBpbnRlcm5hbC5ob3ZlcmVkLmdldChpZCk7XG5cdFx0XHRcdFx0XHRpZiAoIWhvdmVyZWRJdGVtKSB7XG5cdFx0XHRcdFx0XHRcdC8vIElmIHRoZSBvYmplY3Qgd2Fzbid0IHByZXZpb3VzbHkgaG92ZXJlZCwgYm9vayBpdCBhbmQgY2FsbCBpdHMgaGFuZGxlclxuXHRcdFx0XHRcdFx0XHRpbnRlcm5hbC5ob3ZlcmVkLnNldChpZCwgZGF0YSk7XG5cdFx0XHRcdFx0XHRcdGhhbmRsZXJzLnBvaW50ZXJvdmVyPy4oZGF0YSBhcyBOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4pO1xuXHRcdFx0XHRcdFx0XHRoYW5kbGVycy5wb2ludGVyZW50ZXI/LihkYXRhIGFzIE5ndFRocmVlRXZlbnQ8UG9pbnRlckV2ZW50Pik7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGhvdmVyZWRJdGVtLnN0b3BwZWQpIHtcblx0XHRcdFx0XHRcdFx0Ly8gSWYgdGhlIG9iamVjdCB3YXMgcHJldmlvdXNseSBob3ZlcmVkIGFuZCBzdG9wcGVkLCB3ZSBzaG91bGRuJ3QgYWxsb3cgb3RoZXIgaXRlbXMgdG8gcHJvY2VlZFxuXHRcdFx0XHRcdFx0XHRkYXRhLnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBDYWxsIG1vdXNlIG1vdmVcblx0XHRcdFx0XHRoYW5kbGVycz8ucG9pbnRlcm1vdmU/LihkYXRhIGFzIE5ndFRocmVlRXZlbnQ8UG9pbnRlckV2ZW50Pik7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gQWxsIG90aGVyIGV2ZW50cyAuLi5cblx0XHRcdFx0XHRjb25zdCBoYW5kbGVyID0gaGFuZGxlcnM/LltuYW1lIGFzIGtleW9mIE5ndEV2ZW50SGFuZGxlcnNdIGFzIChldmVudDogTmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+KSA9PiB2b2lkO1xuXHRcdFx0XHRcdGlmIChoYW5kbGVyKSB7XG5cdFx0XHRcdFx0XHQvLyBGb3J3YXJkIGFsbCBldmVudHMgYmFjayB0byB0aGVpciByZXNwZWN0aXZlIGhhbmRsZXJzIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiBjbGljayBldmVudHMsXG5cdFx0XHRcdFx0XHQvLyB3aGljaCBtdXN0IHVzZSB0aGUgaW5pdGlhbCB0YXJnZXRcblx0XHRcdFx0XHRcdGlmICghaXNDbGlja0V2ZW50IHx8IGludGVybmFsLmluaXRpYWxIaXRzLmluY2x1ZGVzKGV2ZW50T2JqZWN0KSkge1xuXHRcdFx0XHRcdFx0XHQvLyBNaXNzZWQgZXZlbnRzIGhhdmUgdG8gY29tZSBmaXJzdFxuXHRcdFx0XHRcdFx0XHRwb2ludGVyTWlzc2VkKFxuXHRcdFx0XHRcdFx0XHRcdGV2ZW50LFxuXHRcdFx0XHRcdFx0XHRcdGludGVybmFsLmludGVyYWN0aW9uLmZpbHRlcigob2JqZWN0KSA9PiAhaW50ZXJuYWwuaW5pdGlhbEhpdHMuaW5jbHVkZXMob2JqZWN0KSksXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdC8vIE5vdyBjYWxsIHRoZSBoYW5kbGVyXG5cdFx0XHRcdFx0XHRcdGhhbmRsZXIoZGF0YSBhcyBOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQvLyBUcmlnZ2VyIG9uUG9pbnRlck1pc3NlZCBvbiBhbGwgZWxlbWVudHMgdGhhdCBoYXZlIHBvaW50ZXIgb3Zlci9vdXQgaGFuZGxlcnMsIGJ1dCBub3QgY2xpY2sgYW5kIHdlcmVuJ3QgaGl0XG5cdFx0XHRcdFx0XHRpZiAoaXNDbGlja0V2ZW50ICYmIGludGVybmFsLmluaXRpYWxIaXRzLmluY2x1ZGVzKGV2ZW50T2JqZWN0KSkge1xuXHRcdFx0XHRcdFx0XHRwb2ludGVyTWlzc2VkKFxuXHRcdFx0XHRcdFx0XHRcdGV2ZW50LFxuXHRcdFx0XHRcdFx0XHRcdGludGVybmFsLmludGVyYWN0aW9uLmZpbHRlcigob2JqZWN0KSA9PiAhaW50ZXJuYWwuaW5pdGlhbEhpdHMuaW5jbHVkZXMob2JqZWN0KSksXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGhhbmRsZUludGVyc2VjdHMoaGl0cywgZXZlbnQsIGRlbHRhLCBvbkludGVyc2VjdCk7XG5cdFx0fTtcblx0fVxuXG5cdHJldHVybiB7IGhhbmRsZVBvaW50ZXIgfTtcbn1cbiJdfQ==
@@ -1,13 +1,12 @@
1
- import { EventEmitter, signal, untracked } from '@angular/core';
2
1
  import { signalStore } from './utils/signal-store';
3
2
  import { checkUpdate } from './utils/update';
4
3
  export function getLocalState(obj) {
5
4
  if (!obj)
6
- return {};
7
- return obj['__ngt__'] || {};
5
+ return undefined;
6
+ return obj['__ngt__'];
8
7
  }
9
8
  export function invalidateInstance(instance) {
10
- const state = getLocalState(instance).store?.get();
9
+ const state = getLocalState(instance)?.store.snapshot;
11
10
  if (state && state.internal.frames === 0)
12
11
  state.invalidate();
13
12
  checkUpdate(instance);
@@ -15,37 +14,44 @@ export function invalidateInstance(instance) {
15
14
  export function prepare(object, localState) {
16
15
  const instance = object;
17
16
  if (localState?.primitive || !instance.__ngt__) {
18
- const { objects = signal([]), nonObjects = signal([]), ...rest } = localState || {};
17
+ const { instanceStore = signalStore({
18
+ nativeProps: {},
19
+ parent: null,
20
+ objects: [],
21
+ nonObjects: [],
22
+ }), ...rest } = localState || {};
19
23
  instance.__ngt__ = {
20
24
  previousAttach: null,
21
25
  store: null,
22
- parent: signal(null),
23
26
  memoized: {},
24
27
  eventCount: 0,
25
28
  handlers: {},
26
- objects,
27
- nonObjects,
28
- nativeProps: signalStore(),
29
- add: (object, type) => {
30
- untracked(() => {
31
- const current = instance.__ngt__[type]();
32
- const foundIndex = current.indexOf((obj) => obj === object);
33
- if (foundIndex > -1) {
34
- // if we add an object with the same reference, then we switch it out
35
- current.splice(foundIndex, 1, object);
36
- instance.__ngt__[type].set(current);
37
- }
38
- else {
39
- instance.__ngt__[type].update((prev) => [...prev, object]);
40
- }
41
- notifyAncestors(instance.__ngt__.parent());
42
- });
29
+ instanceStore,
30
+ parent: instanceStore.select('parent'),
31
+ objects: instanceStore.select('objects'),
32
+ nonObjects: instanceStore.select('nonObjects'),
33
+ nativeProps: instanceStore.select('nativeProps'),
34
+ add(object, type) {
35
+ const current = instance.__ngt__.instanceStore.get(type);
36
+ const foundIndex = current.indexOf((node) => object === node);
37
+ if (foundIndex > -1) {
38
+ current.splice(foundIndex, 1, object);
39
+ instance.__ngt__.instanceStore.update({ [type]: current });
40
+ }
41
+ else {
42
+ instance.__ngt__.instanceStore.update((prev) => ({ [type]: [...prev[type], object] }));
43
+ }
44
+ notifyAncestors(instance.__ngt__.instanceStore.get('parent'));
43
45
  },
44
- remove: (object, type) => {
45
- untracked(() => {
46
- instance.__ngt__[type].update((prev) => prev.filter((o) => o !== object));
47
- notifyAncestors(instance.__ngt__.parent());
48
- });
46
+ remove(object, type) {
47
+ instance.__ngt__.instanceStore.update((prev) => ({ [type]: prev[type].filter((node) => node !== object) }));
48
+ notifyAncestors(instance.__ngt__.instanceStore.get('parent'));
49
+ },
50
+ setNativeProps(key, value) {
51
+ instance.__ngt__.instanceStore.update((prev) => ({ nativeProps: { ...prev.nativeProps, [key]: value } }));
52
+ },
53
+ setParent(parent) {
54
+ instance.__ngt__.instanceStore.update({ parent });
49
55
  },
50
56
  ...rest,
51
57
  };
@@ -56,10 +62,9 @@ function notifyAncestors(instance) {
56
62
  if (!instance)
57
63
  return;
58
64
  const localState = getLocalState(instance);
59
- if (localState.objects)
60
- localState.objects.update((prev) => prev);
61
- if (localState.nonObjects)
62
- localState.nonObjects.update((prev) => prev);
63
- notifyAncestors(localState.parent());
65
+ if (!localState)
66
+ return;
67
+ localState.instanceStore.update((prev) => ({ objects: prev.objects, nonObjects: prev.nonObjects }));
68
+ notifyAncestors(localState.instanceStore.get('parent'));
64
69
  }
65
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9pbnN0YW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQXVCLE1BQU0sZUFBZSxDQUFDO0FBSXJGLE9BQU8sRUFBRSxXQUFXLEVBQXVCLE1BQU0sc0JBQXNCLENBQUM7QUFDeEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBc0Q3QyxNQUFNLFVBQVUsYUFBYSxDQUM1QixHQUEwQjtJQUUxQixJQUFJLENBQUMsR0FBRztRQUFFLE9BQU8sRUFBc0MsQ0FBQztJQUN4RCxPQUFRLEdBQW9CLENBQUMsU0FBUyxDQUFDLElBQUssRUFBNEIsQ0FBQztBQUMxRSxDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUEyQixRQUFtQjtJQUMvRSxNQUFNLEtBQUssR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ25ELElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUM7UUFBRSxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDN0QsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3ZCLENBQUM7QUFFRCxNQUFNLFVBQVUsT0FBTyxDQUN0QixNQUFpQixFQUNqQixVQUEyQztJQUUzQyxNQUFNLFFBQVEsR0FBRyxNQUErQyxDQUFDO0lBRWpFLElBQUksVUFBVSxFQUFFLFNBQVMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUU7UUFDL0MsTUFBTSxFQUNMLE9BQU8sR0FBRyxNQUFNLENBQW9CLEVBQUUsQ0FBQyxFQUN2QyxVQUFVLEdBQUcsTUFBTSxDQUFvQixFQUFFLENBQUMsRUFDMUMsR0FBRyxJQUFJLEVBQ1AsR0FBRyxVQUFVLElBQUksRUFBRSxDQUFDO1FBRXJCLFFBQVEsQ0FBQyxPQUFPLEdBQUc7WUFDbEIsY0FBYyxFQUFFLElBQUk7WUFDcEIsS0FBSyxFQUFFLElBQUk7WUFDWCxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNwQixRQUFRLEVBQUUsRUFBRTtZQUNaLFVBQVUsRUFBRSxDQUFDO1lBQ2IsUUFBUSxFQUFFLEVBQUU7WUFDWixPQUFPO1lBQ1AsVUFBVTtZQUNWLFdBQVcsRUFBRSxXQUFXLEVBQWdCO1lBQ3hDLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRTtnQkFDckIsU0FBUyxDQUFDLEdBQUcsRUFBRTtvQkFDZCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQ3pDLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFvQixFQUFFLEVBQUUsQ0FBQyxHQUFHLEtBQUssTUFBTSxDQUFDLENBQUM7b0JBQzdFLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQyxFQUFFO3dCQUNwQixxRUFBcUU7d0JBQ3JFLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQzt3QkFDdEMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7cUJBQ3BDO3lCQUFNO3dCQUNOLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7cUJBQzNEO29CQUNELGVBQWUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7Z0JBQzVDLENBQUMsQ0FBQyxDQUFDO1lBQ0osQ0FBQztZQUNELE1BQU0sRUFBRSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRTtnQkFDeEIsU0FBUyxDQUFDLEdBQUcsRUFBRTtvQkFDZCxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUM7b0JBQzFFLGVBQWUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7Z0JBQzVDLENBQUMsQ0FBQyxDQUFDO1lBQ0osQ0FBQztZQUNELEdBQUcsSUFBSTtTQUNrQixDQUFDO0tBQzNCO0lBRUQsT0FBTyxRQUFRLENBQUM7QUFDakIsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLFFBQWdDO0lBQ3hELElBQUksQ0FBQyxRQUFRO1FBQUUsT0FBTztJQUN0QixNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDM0MsSUFBSSxVQUFVLENBQUMsT0FBTztRQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsRSxJQUFJLFVBQVUsQ0FBQyxVQUFVO1FBQUUsVUFBVSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hFLGVBQWUsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUN0QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBzaWduYWwsIHVudHJhY2tlZCwgdHlwZSBXcml0YWJsZVNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHR5cGUgeyBOZ3RFdmVudEhhbmRsZXJzIH0gZnJvbSAnLi9ldmVudHMnO1xuaW1wb3J0IHR5cGUgeyBOZ3RTdGF0ZSB9IGZyb20gJy4vc3RvcmUnO1xuaW1wb3J0IHR5cGUgeyBOZ3RBbnlSZWNvcmQgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IHNpZ25hbFN0b3JlLCB0eXBlIE5ndFNpZ25hbFN0b3JlIH0gZnJvbSAnLi91dGlscy9zaWduYWwtc3RvcmUnO1xuaW1wb3J0IHsgY2hlY2tVcGRhdGUgfSBmcm9tICcuL3V0aWxzL3VwZGF0ZSc7XG5cbmV4cG9ydCB0eXBlIE5ndEF0dGFjaEZ1bmN0aW9uPFRDaGlsZCA9IGFueSwgVFBhcmVudCA9IGFueT4gPSAoXG5cdHBhcmVudDogVFBhcmVudCxcblx0Y2hpbGQ6IFRDaGlsZCxcblx0c3RvcmU6IE5ndFNpZ25hbFN0b3JlPE5ndFN0YXRlPixcbikgPT4gdm9pZCB8ICgoKSA9PiB2b2lkKTtcblxuZXhwb3J0IHR5cGUgTmd0QWZ0ZXJBdHRhY2g8XG5cdFRDaGlsZCBleHRlbmRzIE5ndEluc3RhbmNlTm9kZSA9IE5ndEluc3RhbmNlTm9kZSxcblx0VFBhcmVudCBleHRlbmRzIE5ndEluc3RhbmNlTm9kZSA9IE5ndEluc3RhbmNlTm9kZSxcbj4gPSB7IHBhcmVudDogVFBhcmVudDsgbm9kZTogVENoaWxkIH07XG5cbmV4cG9ydCB0eXBlIE5ndEluc3RhbmNlTG9jYWxTdGF0ZSA9IHtcblx0LyoqIHRoZSBzdGF0ZSBnZXR0ZXIgb2YgdGhlIGNhbnZhcyB0aGF0IHRoZSBpbnN0YW5jZSBpcyBiZWluZyByZW5kZXJlZCB0byAqL1xuXHRzdG9yZTogTmd0U2lnbmFsU3RvcmU8Tmd0U3RhdGU+O1xuXHQvLyBvYmplY3RzIGFuZCBwYXJlbnQgYXJlIHVzZWQgd2hlbiBjaGlsZHJlbiBhcmUgYWRkZWQgd2l0aCBgYXR0YWNoYCBpbnN0ZWFkIG9mIGJlaW5nIGFkZGVkIHRvIHRoZSBPYmplY3QzRCBzY2VuZSBncmFwaFxuXHRub25PYmplY3RzOiBXcml0YWJsZVNpZ25hbDxOZ3RJbnN0YW5jZU5vZGVbXT47XG5cdC8vIG9iamVjdHMgdGhhdCBhcmUgT2JqZWN0M0Rcblx0b2JqZWN0czogV3JpdGFibGVTaWduYWw8Tmd0SW5zdGFuY2VOb2RlW10+O1xuXHQvLyBzaG9ydGN1dCB0byBhZGQvcmVtb3ZlIG9iamVjdCB0byBsaXN0XG5cdGFkZDogKGluc3RhbmNlOiBOZ3RJbnN0YW5jZU5vZGUsIHR5cGU6ICdvYmplY3RzJyB8ICdub25PYmplY3RzJykgPT4gdm9pZDtcblx0cmVtb3ZlOiAoaW5zdGFuY2U6IE5ndEluc3RhbmNlTm9kZSwgdHlwZTogJ29iamVjdHMnIHwgJ25vbk9iamVjdHMnKSA9PiB2b2lkO1xuXHQvLyBuYXRpdmUgcHJvcHMgc2lnbmFsXG5cdG5hdGl2ZVByb3BzOiBOZ3RTaWduYWxTdG9yZTxOZ3RBbnlSZWNvcmQ+O1xuXHQvLyBwYXJlbnQgYmFzZWQgb24gYXR0YWNoIHRocmVlIGluc3RhbmNlXG5cdHBhcmVudDogV3JpdGFibGVTaWduYWw8Tmd0SW5zdGFuY2VOb2RlIHwgbnVsbD47XG5cdC8vIGlmIHRoaXMgVEhSRUUgaW5zdGFuY2UgaXMgYSBuZ3QtcHJpbWl0aXZlXG5cdHByaW1pdGl2ZT86IGJvb2xlYW47XG5cdC8vIGlmIHRoaXMgVEhSRUUgb2JqZWN0IGhhcyBhbnkgZXZlbnRzIGJvdW5kIHRvIGl0XG5cdGV2ZW50Q291bnQ6IG51bWJlcjtcblx0Ly8gbGlzdCBvZiBoYW5kbGVycyB0byBoYW5kbGUgdGhlIGV2ZW50c1xuXHRoYW5kbGVyczogUGFydGlhbDxOZ3RFdmVudEhhbmRsZXJzPjtcblx0Ly8gcHJldmlvdXMgYXJnc1xuXHRhcmdzPzogdW5rbm93bltdO1xuXHQvLyBhdHRhY2ggaW5mb3JtYXRpb24gc28gdGhhdCB3ZSBjYW4gZGV0YWNoIGFzIHdlbGwgYXMgcmVzZXRcblx0YXR0YWNoPzogc3RyaW5nW10gfCBOZ3RBdHRhY2hGdW5jdGlvbjtcblx0Ly8gcHJldmlvdXNseSBhdHRhY2ggaW5mb3JtYXRpb24gc28gd2UgY2FuIHJlc2V0IGFzIHdlbGwgYXMgY2xlYW4gdXBcblx0cHJldmlvdXNBdHRhY2g/OiB1bmtub3duIHwgKCgpID0+IHZvaWQpO1xuXHQvLyBpcyByYXcgdmFsdWVcblx0aXNSYXc/OiBib29sZWFuO1xuXHQvLyBwcmlvcml0eSBmb3IgYmVmb3JlIHJlbmRlclxuXHRwcmlvcml0eT86IG51bWJlcjtcblx0Ly8gZW1pdHRlciBhZnRlciBwcm9wcyB1cGRhdGVcblx0YWZ0ZXJVcGRhdGU/OiBFdmVudEVtaXR0ZXI8Tmd0SW5zdGFuY2VOb2RlPjtcblx0Ly8gZW1pdHRlciBhZnRlciBhdHRhY2hpbmcgdG8gcGFyZW50XG5cdGFmdGVyQXR0YWNoPzogRXZlbnRFbWl0dGVyPE5ndEFmdGVyQXR0YWNoPjtcbn07XG5cbmV4cG9ydCB0eXBlIE5ndEluc3RhbmNlTm9kZTxUTm9kZSA9IGFueT4gPSB7XG5cdF9fbmd0X186IE5ndEluc3RhbmNlTG9jYWxTdGF0ZTtcbn0gJiBOZ3RBbnlSZWNvcmQgJlxuXHRUTm9kZTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldExvY2FsU3RhdGU8VEluc3RhbmNlIGV4dGVuZHMgb2JqZWN0ID0gTmd0QW55UmVjb3JkPihcblx0b2JqOiBUSW5zdGFuY2UgfCB1bmRlZmluZWQsXG4pOiBOZ3RJbnN0YW5jZUxvY2FsU3RhdGUge1xuXHRpZiAoIW9iaikgcmV0dXJuIHt9IGFzIHVua25vd24gYXMgTmd0SW5zdGFuY2VMb2NhbFN0YXRlO1xuXHRyZXR1cm4gKG9iaiBhcyBOZ3RBbnlSZWNvcmQpWydfX25ndF9fJ10gfHwgKHt9IGFzIE5ndEluc3RhbmNlTG9jYWxTdGF0ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZhbGlkYXRlSW5zdGFuY2U8VEluc3RhbmNlIGV4dGVuZHMgb2JqZWN0PihpbnN0YW5jZTogVEluc3RhbmNlKSB7XG5cdGNvbnN0IHN0YXRlID0gZ2V0TG9jYWxTdGF0ZShpbnN0YW5jZSkuc3RvcmU/LmdldCgpO1xuXHRpZiAoc3RhdGUgJiYgc3RhdGUuaW50ZXJuYWwuZnJhbWVzID09PSAwKSBzdGF0ZS5pbnZhbGlkYXRlKCk7XG5cdGNoZWNrVXBkYXRlKGluc3RhbmNlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmU8VEluc3RhbmNlIGV4dGVuZHMgb2JqZWN0ID0gTmd0QW55UmVjb3JkPihcblx0b2JqZWN0OiBUSW5zdGFuY2UsXG5cdGxvY2FsU3RhdGU/OiBQYXJ0aWFsPE5ndEluc3RhbmNlTG9jYWxTdGF0ZT4sXG4pOiBOZ3RJbnN0YW5jZU5vZGU8VEluc3RhbmNlPiB7XG5cdGNvbnN0IGluc3RhbmNlID0gb2JqZWN0IGFzIHVua25vd24gYXMgTmd0SW5zdGFuY2VOb2RlPFRJbnN0YW5jZT47XG5cblx0aWYgKGxvY2FsU3RhdGU/LnByaW1pdGl2ZSB8fCAhaW5zdGFuY2UuX19uZ3RfXykge1xuXHRcdGNvbnN0IHtcblx0XHRcdG9iamVjdHMgPSBzaWduYWw8Tmd0SW5zdGFuY2VOb2RlW10+KFtdKSxcblx0XHRcdG5vbk9iamVjdHMgPSBzaWduYWw8Tmd0SW5zdGFuY2VOb2RlW10+KFtdKSxcblx0XHRcdC4uLnJlc3Rcblx0XHR9ID0gbG9jYWxTdGF0ZSB8fCB7fTtcblxuXHRcdGluc3RhbmNlLl9fbmd0X18gPSB7XG5cdFx0XHRwcmV2aW91c0F0dGFjaDogbnVsbCxcblx0XHRcdHN0b3JlOiBudWxsLFxuXHRcdFx0cGFyZW50OiBzaWduYWwobnVsbCksXG5cdFx0XHRtZW1vaXplZDoge30sXG5cdFx0XHRldmVudENvdW50OiAwLFxuXHRcdFx0aGFuZGxlcnM6IHt9LFxuXHRcdFx0b2JqZWN0cyxcblx0XHRcdG5vbk9iamVjdHMsXG5cdFx0XHRuYXRpdmVQcm9wczogc2lnbmFsU3RvcmU8Tmd0QW55UmVjb3JkPigpLFxuXHRcdFx0YWRkOiAob2JqZWN0LCB0eXBlKSA9PiB7XG5cdFx0XHRcdHVudHJhY2tlZCgoKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgY3VycmVudCA9IGluc3RhbmNlLl9fbmd0X19bdHlwZV0oKTtcblx0XHRcdFx0XHRjb25zdCBmb3VuZEluZGV4ID0gY3VycmVudC5pbmRleE9mKChvYmo6IE5ndEluc3RhbmNlTm9kZSkgPT4gb2JqID09PSBvYmplY3QpO1xuXHRcdFx0XHRcdGlmIChmb3VuZEluZGV4ID4gLTEpIHtcblx0XHRcdFx0XHRcdC8vIGlmIHdlIGFkZCBhbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSByZWZlcmVuY2UsIHRoZW4gd2Ugc3dpdGNoIGl0IG91dFxuXHRcdFx0XHRcdFx0Y3VycmVudC5zcGxpY2UoZm91bmRJbmRleCwgMSwgb2JqZWN0KTtcblx0XHRcdFx0XHRcdGluc3RhbmNlLl9fbmd0X19bdHlwZV0uc2V0KGN1cnJlbnQpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpbnN0YW5jZS5fX25ndF9fW3R5cGVdLnVwZGF0ZSgocHJldikgPT4gWy4uLnByZXYsIG9iamVjdF0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRub3RpZnlBbmNlc3RvcnMoaW5zdGFuY2UuX19uZ3RfXy5wYXJlbnQoKSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSxcblx0XHRcdHJlbW92ZTogKG9iamVjdCwgdHlwZSkgPT4ge1xuXHRcdFx0XHR1bnRyYWNrZWQoKCkgPT4ge1xuXHRcdFx0XHRcdGluc3RhbmNlLl9fbmd0X19bdHlwZV0udXBkYXRlKChwcmV2KSA9PiBwcmV2LmZpbHRlcigobykgPT4gbyAhPT0gb2JqZWN0KSk7XG5cdFx0XHRcdFx0bm90aWZ5QW5jZXN0b3JzKGluc3RhbmNlLl9fbmd0X18ucGFyZW50KCkpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0sXG5cdFx0XHQuLi5yZXN0LFxuXHRcdH0gYXMgTmd0SW5zdGFuY2VMb2NhbFN0YXRlO1xuXHR9XG5cblx0cmV0dXJuIGluc3RhbmNlO1xufVxuXG5mdW5jdGlvbiBub3RpZnlBbmNlc3RvcnMoaW5zdGFuY2U6IE5ndEluc3RhbmNlTm9kZSB8IG51bGwpIHtcblx0aWYgKCFpbnN0YW5jZSkgcmV0dXJuO1xuXHRjb25zdCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShpbnN0YW5jZSk7XG5cdGlmIChsb2NhbFN0YXRlLm9iamVjdHMpIGxvY2FsU3RhdGUub2JqZWN0cy51cGRhdGUoKHByZXYpID0+IHByZXYpO1xuXHRpZiAobG9jYWxTdGF0ZS5ub25PYmplY3RzKSBsb2NhbFN0YXRlLm5vbk9iamVjdHMudXBkYXRlKChwcmV2KSA9PiBwcmV2KTtcblx0bm90aWZ5QW5jZXN0b3JzKGxvY2FsU3RhdGUucGFyZW50KCkpO1xufVxuIl19
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9pbnN0YW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUUsV0FBVyxFQUF1QixNQUFNLHNCQUFzQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQTJEN0MsTUFBTSxVQUFVLGFBQWEsQ0FBMkIsR0FBMEI7SUFDakYsSUFBSSxDQUFDLEdBQUc7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUMzQixPQUFRLEdBQW9CLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDekMsQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FBMkIsUUFBbUI7SUFDL0UsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUM7SUFDdEQsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUFFLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUM3RCxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDdkIsQ0FBQztBQUVELE1BQU0sVUFBVSxPQUFPLENBQ3RCLE1BQWlCLEVBQ2pCLFVBQW1DO0lBRW5DLE1BQU0sUUFBUSxHQUFHLE1BQStDLENBQUM7SUFFakUsSUFBSSxVQUFVLEVBQUUsU0FBUyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2hELE1BQU0sRUFDTCxhQUFhLEdBQUcsV0FBVyxDQUF3QjtZQUNsRCxXQUFXLEVBQUUsRUFBRTtZQUNmLE1BQU0sRUFBRSxJQUFJO1lBQ1osT0FBTyxFQUFFLEVBQUU7WUFDWCxVQUFVLEVBQUUsRUFBRTtTQUNkLENBQUMsRUFDRixHQUFHLElBQUksRUFDUCxHQUFHLFVBQVUsSUFBSSxFQUFFLENBQUM7UUFFckIsUUFBUSxDQUFDLE9BQU8s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Q0FBQyxVQUFVO1FBQUUsT0FBTztJQUN4QixVQUFVLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3BHLGVBQWUsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQ3pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEV2ZW50RW1pdHRlciwgU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgdHlwZSB7IE5ndEV2ZW50SGFuZGxlcnMgfSBmcm9tICcuL2V2ZW50cyc7XG5pbXBvcnQgdHlwZSB7IE5ndFN0YXRlIH0gZnJvbSAnLi9zdG9yZSc7XG5pbXBvcnQgdHlwZSB7IE5ndEFueVJlY29yZCB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgc2lnbmFsU3RvcmUsIHR5cGUgTmd0U2lnbmFsU3RvcmUgfSBmcm9tICcuL3V0aWxzL3NpZ25hbC1zdG9yZSc7XG5pbXBvcnQgeyBjaGVja1VwZGF0ZSB9IGZyb20gJy4vdXRpbHMvdXBkYXRlJztcblxuZXhwb3J0IHR5cGUgTmd0QXR0YWNoRnVuY3Rpb248VENoaWxkID0gYW55LCBUUGFyZW50ID0gYW55PiA9IChcblx0cGFyZW50OiBUUGFyZW50LFxuXHRjaGlsZDogVENoaWxkLFxuXHRzdG9yZTogTmd0U2lnbmFsU3RvcmU8Tmd0U3RhdGU+LFxuKSA9PiB2b2lkIHwgKCgpID0+IHZvaWQpO1xuXG5leHBvcnQgdHlwZSBOZ3RBZnRlckF0dGFjaDxcblx0VENoaWxkIGV4dGVuZHMgTmd0SW5zdGFuY2VOb2RlID0gTmd0SW5zdGFuY2VOb2RlLFxuXHRUUGFyZW50IGV4dGVuZHMgTmd0SW5zdGFuY2VOb2RlID0gTmd0SW5zdGFuY2VOb2RlLFxuPiA9IHsgcGFyZW50OiBUUGFyZW50OyBub2RlOiBUQ2hpbGQgfTtcblxuZXhwb3J0IHR5cGUgTmd0TG9jYWxJbnN0YW5jZVN0YXRlID0ge1xuXHRvYmplY3RzOiBOZ3RJbnN0YW5jZU5vZGVbXTtcblx0bm9uT2JqZWN0czogTmd0SW5zdGFuY2VOb2RlW107XG5cdHBhcmVudDogTmd0SW5zdGFuY2VOb2RlIHwgbnVsbDtcblx0bmF0aXZlUHJvcHM6IE5ndEFueVJlY29yZDtcbn07XG5cbmV4cG9ydCB0eXBlIE5ndExvY2FsU3RhdGUgPSB7XG5cdC8qKiB0aGUgc3RvcmUgb2YgdGhlIGNhbnZhcyB0aGF0IHRoZSBpbnN0YW5jZSBpcyBiZWluZyByZW5kZXJlZCB0byAqL1xuXHRzdG9yZTogTmd0U2lnbmFsU3RvcmU8Tmd0U3RhdGU+O1xuXHQvLyBvYmplY3RzIHJlbGF0ZWQgdG8gdGhpcyBpbnN0YW5jZVxuXHRpbnN0YW5jZVN0b3JlOiBOZ3RTaWduYWxTdG9yZTxOZ3RMb2NhbEluc3RhbmNlU3RhdGU+O1xuXHQvLyBzaG9ydGN1dCB0byBzaWduYWxzXG5cdHBhcmVudDogU2lnbmFsPE5ndExvY2FsSW5zdGFuY2VTdGF0ZVsncGFyZW50J10+O1xuXHRvYmplY3RzOiBTaWduYWw8Tmd0TG9jYWxJbnN0YW5jZVN0YXRlWydvYmplY3RzJ10+O1xuXHRub25PYmplY3RzOiBTaWduYWw8Tmd0TG9jYWxJbnN0YW5jZVN0YXRlWydub25PYmplY3RzJ10+O1xuXHRuYXRpdmVQcm9wczogU2lnbmFsPE5ndExvY2FsSW5zdGFuY2VTdGF0ZVsnbmF0aXZlUHJvcHMnXT47XG5cdC8vIHNob3J0Y3V0IHRvIGFkZC9yZW1vdmUgb2JqZWN0IHRvIGxpc3Rcblx0YWRkOiAoaW5zdGFuY2U6IE5ndEluc3RhbmNlTm9kZSwgdHlwZTogJ29iamVjdHMnIHwgJ25vbk9iamVjdHMnKSA9PiB2b2lkO1xuXHRyZW1vdmU6IChpbnN0YW5jZTogTmd0SW5zdGFuY2VOb2RlLCB0eXBlOiAnb2JqZWN0cycgfCAnbm9uT2JqZWN0cycpID0+IHZvaWQ7XG5cdHNldE5hdGl2ZVByb3BzOiAoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IHZvaWQ7XG5cdHNldFBhcmVudDogKHBhcmVudDogTmd0SW5zdGFuY2VOb2RlIHwgbnVsbCkgPT4gdm9pZDtcblx0Ly8gaWYgdGhpcyBUSFJFRSBpbnN0YW5jZSBpcyBhIG5ndC1wcmltaXRpdmVcblx0cHJpbWl0aXZlPzogYm9vbGVhbjtcblx0Ly8gaWYgdGhpcyBUSFJFRSBvYmplY3QgaGFzIGFueSBldmVudHMgYm91bmQgdG8gaXRcblx0ZXZlbnRDb3VudDogbnVtYmVyO1xuXHQvLyBsaXN0IG9mIGhhbmRsZXJzIHRvIGhhbmRsZSB0aGUgZXZlbnRzXG5cdGhhbmRsZXJzOiBQYXJ0aWFsPE5ndEV2ZW50SGFuZGxlcnM+O1xuXHQvLyBwcmV2aW91cyBhcmdzXG5cdGFyZ3M/OiB1bmtub3duW107XG5cdC8vIGF0dGFjaCBpbmZvcm1hdGlvbiBzbyB0aGF0IHdlIGNhbiBkZXRhY2ggYXMgd2VsbCBhcyByZXNldFxuXHRhdHRhY2g/OiBzdHJpbmdbXSB8IE5ndEF0dGFjaEZ1bmN0aW9uO1xuXHQvLyBwcmV2aW91c2x5IGF0dGFjaCBpbmZvcm1hdGlvbiBzbyB3ZSBjYW4gcmVzZXQgYXMgd2VsbCBhcyBjbGVhbiB1cFxuXHRwcmV2aW91c0F0dGFjaD86IHVua25vd24gfCAoKCkgPT4gdm9pZCk7XG5cdC8vIGlzIHJhdyB2YWx1ZVxuXHRpc1Jhdz86IGJvb2xlYW47XG5cdC8vIHByaW9yaXR5IGZvciBiZWZvcmUgcmVuZGVyXG5cdHByaW9yaXR5PzogbnVtYmVyO1xuXHQvLyBlbWl0dGVyIGFmdGVyIHByb3BzIHVwZGF0ZVxuXHRhZnRlclVwZGF0ZT86IEV2ZW50RW1pdHRlcjxOZ3RJbnN0YW5jZU5vZGU+O1xuXHQvLyBlbWl0dGVyIGFmdGVyIGF0dGFjaGluZyB0byBwYXJlbnRcblx0YWZ0ZXJBdHRhY2g/OiBFdmVudEVtaXR0ZXI8Tmd0QWZ0ZXJBdHRhY2g+O1xufTtcblxuZXhwb3J0IHR5cGUgTmd0SW5zdGFuY2VOb2RlPFROb2RlID0gYW55PiA9IHsgX19uZ3RfXzogTmd0TG9jYWxTdGF0ZSB9ICYgTmd0QW55UmVjb3JkICYgVE5vZGU7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMb2NhbFN0YXRlPFRJbnN0YW5jZSBleHRlbmRzIG9iamVjdD4ob2JqOiBUSW5zdGFuY2UgfCB1bmRlZmluZWQpOiBOZ3RMb2NhbFN0YXRlIHwgdW5kZWZpbmVkIHtcblx0aWYgKCFvYmopIHJldHVybiB1bmRlZmluZWQ7XG5cdHJldHVybiAob2JqIGFzIE5ndEFueVJlY29yZClbJ19fbmd0X18nXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGludmFsaWRhdGVJbnN0YW5jZTxUSW5zdGFuY2UgZXh0ZW5kcyBvYmplY3Q+KGluc3RhbmNlOiBUSW5zdGFuY2UpIHtcblx0Y29uc3Qgc3RhdGUgPSBnZXRMb2NhbFN0YXRlKGluc3RhbmNlKT8uc3RvcmUuc25hcHNob3Q7XG5cdGlmIChzdGF0ZSAmJiBzdGF0ZS5pbnRlcm5hbC5mcmFtZXMgPT09IDApIHN0YXRlLmludmFsaWRhdGUoKTtcblx0Y2hlY2tVcGRhdGUoaW5zdGFuY2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZTxUSW5zdGFuY2UgZXh0ZW5kcyBvYmplY3QgPSBOZ3RBbnlSZWNvcmQ+KFxuXHRvYmplY3Q6IFRJbnN0YW5jZSxcblx0bG9jYWxTdGF0ZT86IFBhcnRpYWw8Tmd0TG9jYWxTdGF0ZT4sXG4pIHtcblx0Y29uc3QgaW5zdGFuY2UgPSBvYmplY3QgYXMgdW5rbm93biBhcyBOZ3RJbnN0YW5jZU5vZGU8VEluc3RhbmNlPjtcblxuXHRpZiAobG9jYWxTdGF0ZT8ucHJpbWl0aXZlIHx8ICFpbnN0YW5jZS5fX25ndF9fKSB7XG5cdFx0Y29uc3Qge1xuXHRcdFx0aW5zdGFuY2VTdG9yZSA9IHNpZ25hbFN0b3JlPE5ndExvY2FsSW5zdGFuY2VTdGF0ZT4oe1xuXHRcdFx0XHRuYXRpdmVQcm9wczoge30sXG5cdFx0XHRcdHBhcmVudDogbnVsbCxcblx0XHRcdFx0b2JqZWN0czogW10sXG5cdFx0XHRcdG5vbk9iamVjdHM6IFtdLFxuXHRcdFx0fSksXG5cdFx0XHQuLi5yZXN0XG5cdFx0fSA9IGxvY2FsU3RhdGUgfHwge307XG5cblx0XHRpbnN0YW5jZS5fX25ndF9fID0ge1xuXHRcdFx0cHJldmlvdXNBdHRhY2g6IG51bGwsXG5cdFx0XHRzdG9yZTogbnVsbCxcblx0XHRcdG1lbW9pemVkOiB7fSxcblx0XHRcdGV2ZW50Q291bnQ6IDAsXG5cdFx0XHRoYW5kbGVyczoge30sXG5cdFx0XHRpbnN0YW5jZVN0b3JlLFxuXHRcdFx0cGFyZW50OiBpbnN0YW5jZVN0b3JlLnNlbGVjdCgncGFyZW50JyksXG5cdFx0XHRvYmplY3RzOiBpbnN0YW5jZVN0b3JlLnNlbGVjdCgnb2JqZWN0cycpLFxuXHRcdFx0bm9uT2JqZWN0czogaW5zdGFuY2VTdG9yZS5zZWxlY3QoJ25vbk9iamVjdHMnKSxcblx0XHRcdG5hdGl2ZVByb3BzOiBpbnN0YW5jZVN0b3JlLnNlbGVjdCgnbmF0aXZlUHJvcHMnKSxcblx0XHRcdGFkZChvYmplY3QsIHR5cGUpIHtcblx0XHRcdFx0Y29uc3QgY3VycmVudCA9IGluc3RhbmNlLl9fbmd0X18uaW5zdGFuY2VTdG9yZS5nZXQodHlwZSk7XG5cdFx0XHRcdGNvbnN0IGZvdW5kSW5kZXggPSBjdXJyZW50LmluZGV4T2YoKG5vZGU6IE5ndEluc3RhbmNlTm9kZSkgPT4gb2JqZWN0ID09PSBub2RlKTtcblx0XHRcdFx0aWYgKGZvdW5kSW5kZXggPiAtMSkge1xuXHRcdFx0XHRcdGN1cnJlbnQuc3BsaWNlKGZvdW5kSW5kZXgsIDEsIG9iamVjdCk7XG5cdFx0XHRcdFx0aW5zdGFuY2UuX19uZ3RfXy5pbnN0YW5jZVN0b3JlLnVwZGF0ZSh7IFt0eXBlXTogY3VycmVudCB9KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpbnN0YW5jZS5fX25ndF9fLmluc3RhbmNlU3RvcmUudXBkYXRlKChwcmV2KSA9PiAoeyBbdHlwZV06IFsuLi5wcmV2W3R5cGVdLCBvYmplY3RdIH0pKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRub3RpZnlBbmNlc3RvcnMoaW5zdGFuY2UuX19uZ3RfXy5pbnN0YW5jZVN0b3JlLmdldCgncGFyZW50JykpO1xuXHRcdFx0fSxcblx0XHRcdHJlbW92ZShvYmplY3QsIHR5cGUpIHtcblx0XHRcdFx0aW5zdGFuY2UuX19uZ3RfXy5pbnN0YW5jZVN0b3JlLnVwZGF0ZSgocHJldikgPT4gKHsgW3R5cGVdOiBwcmV2W3R5cGVdLmZpbHRlcigobm9kZSkgPT4gbm9kZSAhPT0gb2JqZWN0KSB9KSk7XG5cdFx0XHRcdG5vdGlmeUFuY2VzdG9ycyhpbnN0YW5jZS5fX25ndF9fLmluc3RhbmNlU3RvcmUuZ2V0KCdwYXJlbnQnKSk7XG5cdFx0XHR9LFxuXHRcdFx0c2V0TmF0aXZlUHJvcHMoa2V5LCB2YWx1ZSkge1xuXHRcdFx0XHRpbnN0YW5jZS5fX25ndF9fLmluc3RhbmNlU3RvcmUudXBkYXRlKChwcmV2KSA9PiAoeyBuYXRpdmVQcm9wczogeyAuLi5wcmV2Lm5hdGl2ZVByb3BzLCBba2V5XTogdmFsdWUgfSB9KSk7XG5cdFx0XHR9LFxuXHRcdFx0c2V0UGFyZW50KHBhcmVudCkge1xuXHRcdFx0XHRpbnN0YW5jZS5fX25ndF9fLmluc3RhbmNlU3RvcmUudXBkYXRlKHsgcGFyZW50IH0pO1xuXHRcdFx0fSxcblx0XHRcdC4uLnJlc3QsXG5cdFx0fSBhcyBOZ3RMb2NhbFN0YXRlO1xuXHR9XG5cblx0cmV0dXJuIGluc3RhbmNlO1xufVxuXG5mdW5jdGlvbiBub3RpZnlBbmNlc3RvcnMoaW5zdGFuY2U6IE5ndEluc3RhbmNlTm9kZSB8IG51bGwpIHtcblx0aWYgKCFpbnN0YW5jZSkgcmV0dXJuO1xuXHRjb25zdCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShpbnN0YW5jZSk7XG5cdGlmICghbG9jYWxTdGF0ZSkgcmV0dXJuO1xuXHRsb2NhbFN0YXRlLmluc3RhbmNlU3RvcmUudXBkYXRlKChwcmV2KSA9PiAoeyBvYmplY3RzOiBwcmV2Lm9iamVjdHMsIG5vbk9iamVjdHM6IHByZXYubm9uT2JqZWN0cyB9KSk7XG5cdG5vdGlmeUFuY2VzdG9ycyhsb2NhbFN0YXRlLmluc3RhbmNlU3RvcmUuZ2V0KCdwYXJlbnQnKSk7XG59XG4iXX0=