obsidian-integration-testing 13.0.0 → 14.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/dist/lib/cjs/app-config.cjs +1 -1
  2. package/dist/lib/cjs/app-config.d.cts +25 -25
  3. package/dist/lib/cjs/connect-to-cdp.cjs +1 -1
  4. package/dist/lib/cjs/connect-to-cdp.d.cts +4 -4
  5. package/dist/lib/cjs/demo-vault-bootstrap.cjs +1 -1
  6. package/dist/lib/cjs/demo-vault-bootstrap.d.cts +10 -2
  7. package/dist/lib/cjs/device-settings.cjs +1 -1
  8. package/dist/lib/cjs/device-settings.d.cts +1 -1
  9. package/dist/lib/cjs/emulator-reaper.cjs +1 -1
  10. package/dist/lib/cjs/emulator-reaper.d.cts +2 -2
  11. package/dist/lib/cjs/enable-plugin.cjs +1 -1
  12. package/dist/lib/cjs/eval-in-obsidian.cjs +1 -1
  13. package/dist/lib/cjs/eval-in-obsidian.d.cts +12 -12
  14. package/dist/lib/cjs/generate-function-call.cjs +1 -1
  15. package/dist/lib/cjs/generate-function-call.d.cts +2 -2
  16. package/dist/lib/cjs/index.cjs +1 -1
  17. package/dist/lib/cjs/index.d.cts +4 -4
  18. package/dist/lib/cjs/jest/global-setup.cjs +1 -1
  19. package/dist/lib/cjs/jest/global-setup.d.cts +3 -3
  20. package/dist/lib/cjs/leftover-cleanup.cjs +1 -1
  21. package/dist/lib/cjs/leftover-cleanup.d.cts +2 -2
  22. package/dist/lib/cjs/library.cjs +1 -1
  23. package/dist/lib/cjs/namespace-bootstrap.cjs +1 -1
  24. package/dist/lib/cjs/obsidian-instance.cjs +1 -1
  25. package/dist/lib/cjs/obsidian-instance.d.cts +3 -3
  26. package/dist/lib/cjs/open-obsidian-settings-tab.cjs +3 -3
  27. package/dist/lib/cjs/open-obsidian-settings-tab.d.cts +4 -4
  28. package/dist/lib/cjs/parent-liveness.cjs +1 -1
  29. package/dist/lib/cjs/parent-liveness.d.cts +1 -1
  30. package/dist/lib/cjs/poll-in-obsidian.cjs +1 -1
  31. package/dist/lib/cjs/poll-in-obsidian.d.cts +3 -3
  32. package/dist/lib/cjs/poll-until.cjs +1 -1
  33. package/dist/lib/cjs/poll-until.d.cts +4 -4
  34. package/dist/lib/cjs/process-capture.cjs +1 -1
  35. package/dist/lib/cjs/process-capture.d.cts +3 -3
  36. package/dist/lib/cjs/run-version-matrix.cjs +1 -1
  37. package/dist/lib/cjs/run-version-matrix.d.cts +1 -1
  38. package/dist/lib/cjs/setup-lock.cjs +1 -1
  39. package/dist/lib/cjs/setup-lock.d.cts +1 -1
  40. package/dist/lib/cjs/sharp-loader.cjs +1 -1
  41. package/dist/lib/cjs/sharp-loader.d.cts +6 -6
  42. package/dist/lib/cjs/temporary-vault.cjs +2 -3
  43. package/dist/lib/cjs/temporary-vault.d.cts +4 -4
  44. package/dist/lib/cjs/transport-appium.cjs +1 -1
  45. package/dist/lib/cjs/transport-factory.cjs +1 -1
  46. package/dist/lib/cjs/transport.cjs +1 -1
  47. package/dist/lib/cjs/transport.d.cts +10 -10
  48. package/dist/lib/cjs/version-matrix.cjs +1 -1
  49. package/dist/lib/cjs/version-matrix.d.cts +2 -2
  50. package/dist/lib/cjs/vitest/global-setup.cjs +1 -1
  51. package/dist/lib/cjs/vitest/global-setup.d.cts +3 -3
  52. package/dist/lib/esm/app-config.d.mts +25 -25
  53. package/dist/lib/esm/app-config.mjs +1 -1
  54. package/dist/lib/esm/connect-to-cdp.d.mts +4 -4
  55. package/dist/lib/esm/connect-to-cdp.mjs +1 -1
  56. package/dist/lib/esm/demo-vault-bootstrap.d.mts +10 -2
  57. package/dist/lib/esm/demo-vault-bootstrap.mjs +1 -1
  58. package/dist/lib/esm/device-settings.d.mts +1 -1
  59. package/dist/lib/esm/device-settings.mjs +1 -1
  60. package/dist/lib/esm/emulator-reaper.d.mts +2 -2
  61. package/dist/lib/esm/emulator-reaper.mjs +1 -1
  62. package/dist/lib/esm/enable-plugin.mjs +1 -1
  63. package/dist/lib/esm/eval-in-obsidian.d.mts +12 -12
  64. package/dist/lib/esm/eval-in-obsidian.mjs +1 -1
  65. package/dist/lib/esm/generate-function-call.d.mts +2 -2
  66. package/dist/lib/esm/generate-function-call.mjs +1 -1
  67. package/dist/lib/esm/index.d.mts +4 -4
  68. package/dist/lib/esm/index.mjs +1 -1
  69. package/dist/lib/esm/jest/global-setup.d.mts +3 -3
  70. package/dist/lib/esm/jest/global-setup.mjs +1 -1
  71. package/dist/lib/esm/leftover-cleanup.d.mts +2 -2
  72. package/dist/lib/esm/leftover-cleanup.mjs +1 -1
  73. package/dist/lib/esm/library.mjs +1 -1
  74. package/dist/lib/esm/namespace-bootstrap.mjs +1 -1
  75. package/dist/lib/esm/obsidian-instance.d.mts +3 -3
  76. package/dist/lib/esm/obsidian-instance.mjs +1 -1
  77. package/dist/lib/esm/open-obsidian-settings-tab.d.mts +4 -4
  78. package/dist/lib/esm/open-obsidian-settings-tab.mjs +3 -3
  79. package/dist/lib/esm/parent-liveness.d.mts +1 -1
  80. package/dist/lib/esm/parent-liveness.mjs +1 -1
  81. package/dist/lib/esm/poll-in-obsidian.d.mts +3 -3
  82. package/dist/lib/esm/poll-in-obsidian.mjs +1 -1
  83. package/dist/lib/esm/poll-until.d.mts +4 -4
  84. package/dist/lib/esm/poll-until.mjs +1 -1
  85. package/dist/lib/esm/process-capture.d.mts +3 -3
  86. package/dist/lib/esm/process-capture.mjs +1 -1
  87. package/dist/lib/esm/run-version-matrix.d.mts +1 -1
  88. package/dist/lib/esm/run-version-matrix.mjs +1 -1
  89. package/dist/lib/esm/setup-lock.d.mts +1 -1
  90. package/dist/lib/esm/setup-lock.mjs +1 -1
  91. package/dist/lib/esm/sharp-loader.d.mts +6 -6
  92. package/dist/lib/esm/sharp-loader.mjs +1 -1
  93. package/dist/lib/esm/temporary-vault.d.mts +4 -4
  94. package/dist/lib/esm/temporary-vault.mjs +2 -3
  95. package/dist/lib/esm/transport-appium.mjs +1 -1
  96. package/dist/lib/esm/transport-factory.mjs +1 -1
  97. package/dist/lib/esm/transport.d.mts +10 -10
  98. package/dist/lib/esm/version-matrix.d.mts +2 -2
  99. package/dist/lib/esm/version-matrix.mjs +1 -1
  100. package/dist/lib/esm/vitest/global-setup.d.mts +3 -3
  101. package/dist/lib/esm/vitest/global-setup.mjs +1 -1
  102. package/package.json +1 -1
@@ -134,4 +134,4 @@ async function withAppConfig(params) {
134
134
  setAppConfig,
135
135
  withAppConfig
136
136
  });
137
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2FwcC1jb25maWcudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBOb2RlLXNpZGUgcmVhZC93cml0ZS9yZXN0b3JlIHNlYW0gZm9yIG9uZSBvZiBPYnNpZGlhbidzICoqdmF1bHQgY29uZmlnKioga2V5cyxcbiAqIGZvciB0aGUgZmV3IHRlc3RzIHRoYXQgbmVlZCBhIGRpZmZlcmVudCB2YWx1ZSB0aGFuIHRoZSBoYXJuZXNzJ3MgaGVhZGxlc3NcbiAqIGRlZmF1bHQuXG4gKlxuICogYGVuc3VyZUhlYWRsZXNzVmF1bHRDb25maWdgIHdyaXRlcyBgYWx3YXlzVXBkYXRlTGlua3M6IHRydWVgIGFuZFxuICogYHNldHRpbmdzUG9wb3V0V2luZG93OiBmYWxzZWAgaW50byBldmVyeSB2YXVsdCB0aGUgaGFybmVzcyBwcm92aXNpb25zLCBiZWZvcmVcbiAqIHRoYXQgdmF1bHQgaXMgZXZlciBvcGVuZWQsIGFuZCBuZWl0aGVyIGlzIGEga25vYiBhIGNvbnN1bWVyIGNvbmZpZ3VyZXMgXHUyMDE0IHNlZVxuICogdGhlIHByb2plY3QgYEFHRU5UUy5tZGAgKCoqTDQ4KiopLiBUaGF0IGlzIHJpZ2h0IGZvciBhbG1vc3QgZXZlcnkgdGVzdCwgYW5kXG4gKiB3cm9uZyBmb3IgdGhlIGZldyB3aG9zZSAqKnN1YmplY3QgaXMqKiB0aGUgc2Vjb25kIEVsZWN0cm9uIHdpbmRvdyB0aGUgcG9wb3V0XG4gKiBjcmVhdGVzOiBhIHRlc3QgdGhhdCB3YWl0cyBvbiBgYWN0aXZlV2luZG93ICE9PSB3aW5kb3dgLCBvciByZWFkc1xuICogYGFwcC5zZXR0aW5nLnBvcG91dGAsIG5ldmVyIG9ic2VydmVzIHRoZSB0aGluZyBpdCBhc3NlcnRzIGFuZCBzaW1wbHkgdGltZXMgb3V0LlxuICpcbiAqIFRob3NlIHRlc3RzIG9wdCBiYWNrIGluIHRocm91Z2ggaGVyZSByYXRoZXIgdGhhbiBieSBoYW5kLCB3aGljaCBidXlzIHRocmVlXG4gKiB0aGluZ3Mgb3ZlciBhbiBpbmxpbmUgYHNldENvbmZpZ2AgaW5zaWRlIGFuIGBldmFsSW5PYnNpZGlhbmAgY2xvc3VyZTpcbiAqXG4gKiAtICoqVGhlIHZhbHVlIGlzIHJlc3RvcmVkKiosIGluY2x1ZGluZyBkZWxldGluZyBhIGtleSB0aGF0IGhhZCBuZXZlciBiZWVuXG4gKiAgIHdyaXR0ZW4uIEFuIGlubGluZSBzZXR0ZXIgd3JpdGVzIGludG8gYSB2YXVsdCBzaGFyZWQgd2l0aCB0aGUgcmVzdCBvZiB0aGVcbiAqICAgcnVuLCBzbyBldmVyeSBsYXRlciB0ZXN0IGluIHRoYXQgaW5zdGFuY2UgaW5oZXJpdHMgdGhlIGNoYW5nZSBcdTIwMTQgdGhlXG4gKiAgIGNyb3NzLXRlc3QgY29udGFtaW5hdGlvbiB0aGUgdW5jb25kaXRpb25hbCBkZWZhdWx0IGV4aXN0cyB0byBlbmQuXG4gKiAtICoqVGhlIGNhc3QgbGl2ZXMgaW4gb25lIHBsYWNlLioqIGBvYnNpZGlhbi10eXBpbmdzYCcgYENvbmZpZ0l0ZW1gIHVuaW9uIG9taXRzXG4gKiAgIGBzZXR0aW5nc1BvcG91dFdpbmRvd2AsIHNvIHRoZSBrZXkgY2Fubm90IGJlIHBhc3NlZCB0byBgZ2V0Q29uZmlnYCAvXG4gKiAgIGBzZXRDb25maWdgIHdpdGhvdXQgd2lkZW5pbmcgdGhlbTsgZXZlcnkgY29uc3VtZXIgdGhhdCB3cm90ZSB0aGUgc2V0dGVyXG4gKiAgIGlubGluZSByZXBlYXRlZCB0aGF0IGNhc3QuXG4gKiAtICoqUGVyLXRlc3QgZ3JhbnVsYXJpdHkuKiogQSBwYXJhbWV0ZXIgb24gdGhlIHByb3Zpc2lvbmluZyB3cml0ZSB3b3VsZCBiZVxuICogICBwZXItdmF1bHQsIGFuZCBhIHByb2plY3Qgd2hvc2UgdGVzdHMgc2hhcmUgb25lIHZhdWx0IFx1MjAxNCB0aGUgdXN1YWwgc2hhcGUgXHUyMDE0XG4gKiAgIGNhbm5vdCBoYXZlIGl0IGJvdGggd2F5cy5cbiAqXG4gKiBFdmVyeXRoaW5nIGhlcmUgcnVucyBvbiB0aGUgKipOb2RlKiogc2lkZS4gQW4gYGV2YWxJbk9ic2lkaWFuYCBjYWxsYmFjayBpc1xuICogc2VyaWFsaXplZCBpbnRvIHRoZSBkcml2ZW4gT2JzaWRpYW4gYW5kIGNhbiBpbXBvcnQgbm90aGluZywgc28gYSBoZWxwZXJcbiAqIGNhbGxhYmxlIGZyb20gaW5zaWRlIG9uZSBpcyBub3QgZXhwcmVzc2libGU7IGVhY2ggZnVuY3Rpb24gYmVsb3cgaXMgaXRzIG93blxuICogc2hvcnQgZXZhbCBpbnN0ZWFkLlxuICpcbiAqICMjIyBXaHkgcHJlc2VuY2UgaXMgcmVhZCBvZmYgYGFwcC52YXVsdC5jb25maWdgLCBub3QgZnJvbSBgZ2V0Q29uZmlnYFxuICpcbiAqIEJvdGggZmFjdHMgd2VyZSB2ZXJpZmllZCBpbiB0aGUgc2hpcHBlZCAxLjE0LjEgYnVuZGxlIHJhdGhlciB0aGFuIGFzc3VtZWQ6XG4gKlxuICogLSBgVmF1bHQuc2V0Q29uZmlnKGtleSwgdmFsdWUpYCAqKmRlbGV0ZXMqKiB0aGUga2V5IHdoZW4gYHZhbHVlYCBpc1xuICogICBgdW5kZWZpbmVkYCwgYW5kIGRvZXMgbm90aGluZyBhdCBhbGwgd2hlbiB0aGUgdmFsdWUgaXMgdW5jaGFuZ2VkIChubyBzYXZlLFxuICogICBubyBgY29uZmlnLWNoYW5nZWRgIGV2ZW50KS4gU28gYW4gZXhhY3QgcmVzdG9yZSBvZiBhIGtleSB0aGF0IHdhcyBuZXZlclxuICogICB3cml0dGVuIGlzIGV4cHJlc3NpYmxlLlxuICogLSBgVmF1bHQuZ2V0Q29uZmlnKGtleSlgIGZhbGxzIGJhY2sgdG8gT2JzaWRpYW4ncyBkZWZhdWx0cyB0YWJsZSB3aGVuIHRoZSBrZXlcbiAqICAgaXMgYWJzZW50LCBzbyBpdCBjYW5ub3QgdGVsbCAqdW5zZXQqIGZyb20gKnNldCB0byB0aGUgc2hpcHBlZCBkZWZhdWx0KiBcdTIwMTRcbiAqICAgcmVzdG9yaW5nIGZyb20gaXQgd291bGQgbGVhdmUgdGhlIGtleSB3cml0dGVuIHdoZXJlIGl0IGhhZCBub3QgYmVlbi5cbiAqICAgYGFwcC52YXVsdC5jb25maWdgIGhvbGRzIG9ubHkgdGhlIGtleXMgY2hhbmdlZCBmcm9tIHRoZWlyIGRlZmF1bHQsIHNvXG4gKiAgIGBPYmplY3QuaGFzT3duYCBvbiBpdCBpcyB0aGUgc2lnbmFsIGEgcmVzdG9yZSBuZWVkcy5cbiAqL1xuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gSW50ZWdyYXRpb24tdGltZSBjb2RlIChkcml2ZXMgYSBsaXZlIE9ic2lkaWFuIHZpYSBldmFsSW5PYnNpZGlhbikgY292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgRXZhbEluT2JzaWRpYW5QYXJhbXMsXG4gIEdlbmVyaWNPYmplY3Rcbn0gZnJvbSAnLi9ldmFsLWluLW9ic2lkaWFuLmNqcyc7XG5pbXBvcnQgdHlwZSB7IE9ic2lkaWFuVHJhbnNwb3J0IH0gZnJvbSAnLi90cmFuc3BvcnQuY2pzJztcblxuaW1wb3J0IHsgZXZhbEluT2JzaWRpYW4gfSBmcm9tICcuL2V2YWwtaW4tb2JzaWRpYW4uY2pzJztcbmltcG9ydCB7IG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllcyB9IGZyb20gJy4vbm9ybWFsaXplLW9wdGlvbmFsLXByb3BlcnRpZXMuY2pzJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZ2V0QXBwQ29uZmlnfSwgYW5kIHRoZSBzaGFyZWQgc2hhcGUgb2YgdGhlIHdyaXRlcnMgYmVsb3cuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBwQ29uZmlnUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSB2YXVsdCBjb25maWcga2V5LCBlLmcuIGBzZXR0aW5nc1BvcG91dFdpbmRvd2AuIE5vdCBuYXJyb3dlZCB0b1xuICAgKiBgb2JzaWRpYW4tdHlwaW5nc2AnIGBDb25maWdJdGVtYDogdGhhdCB1bmlvbiBvbWl0cyBrZXlzIE9ic2lkaWFuIHJlYWxseVxuICAgKiByZWFkcywgYHNldHRpbmdzUG9wb3V0V2luZG93YCBhbW9uZyB0aGVtLCB3aGljaCBpcyB0aGUgd2hvbGUgcmVhc29uIGFcbiAgICogY29uc3VtZXIgaGFkIHRvIHdpZGVuIHRoZSBzZXR0ZXIgYnkgaGFuZC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbmZpZ0tleTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGUgdHJhbnNwb3J0LiBXaGVuIG9taXR0ZWQsIHRoZSB0cmFuc3BvcnQgdGhlIGN1cnJlbnQgdGVzdFxuICAgKiBjb250ZXh0IGlzIGRyaXZpbmcgaXMgdXNlZC5cbiAgICovXG4gIHJlYWRvbmx5IHRyYW5zcG9ydD86IE9ic2lkaWFuVHJhbnNwb3J0O1xuXG4gIC8qKlxuICAgKiBUaGUgdmF1bHQgd2hvc2UgT2JzaWRpYW4gaW5zdGFuY2UgdG8gcmVhZCBvciB3cml0ZS4gV2hlbiBvbWl0dGVkLCB0aGVcbiAgICogY3VycmVudCB0ZXN0IGNvbnRleHQncyB2YXVsdCBpcyB1c2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgdmF1bHRQYXRoPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFdoYXQge0BsaW5rIHNldEFwcENvbmZpZ30gY2FwdHVyZWQgYmVmb3JlIGl0IHdyb3RlLCBhbmQgYWxsXG4gKiB7QGxpbmsgcmVzdG9yZUFwcENvbmZpZ30gbmVlZHMgdG8gcHV0IHRoZSBrZXkgYmFjayBleGFjdGx5IGFzIGl0IHdhcyBcdTIwMTRcbiAqIGluY2x1ZGluZyBwdXR0aW5nIGl0IGJhY2sgdG8gKmFic2VudCouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBwQ29uZmlnUmVzdG9yZSB7XG4gIC8qKlxuICAgKiBUaGUga2V5IHRoYXQgd2FzIHdyaXR0ZW4uXG4gICAqL1xuICByZWFkb25seSBjb25maWdLZXk6IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgdmF1bHQncyBjb25maWcgY2FycmllZCB0aGUga2V5IGF0IGFsbCBiZWZvcmUgdGhlIHdyaXRlLiBgZmFsc2VgXG4gICAqIG1lYW5zIHRoZSB2YXVsdCB3YXMgcnVubmluZyBvbiBPYnNpZGlhbidzIG93biBkZWZhdWx0LCBhbmQgcmVzdG9yaW5nIGlzIGFcbiAgICogZGVsZXRlIHJhdGhlciB0aGFuIGEgd3JpdGUuXG4gICAqL1xuICByZWFkb25seSBpc1ByZXNlbnQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSB0cmFuc3BvcnQgdGhlIGNhcHR1cmUgd2FzIG1hZGUgYWdhaW5zdCwgc28gdGhlIHJlc3RvcmUgbGFuZHMgaW4gdGhlXG4gICAqIHNhbWUgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSB0cmFuc3BvcnQ/OiBPYnNpZGlhblRyYW5zcG9ydDtcblxuICAvKipcbiAgICogVGhlIHZhbHVlIHRoZSBrZXkgaGVsZCwgb3IgYHVuZGVmaW5lZGAgd2hlbiB7QGxpbmsgaXNQcmVzZW50fSBpcyBgZmFsc2VgLlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU6IHVua25vd247XG5cbiAgLyoqXG4gICAqIFRoZSB2YXVsdCB0aGUgY2FwdHVyZSB3YXMgbWFkZSBhZ2FpbnN0LCBzbyB0aGUgcmVzdG9yZSBsYW5kcyBpbiB0aGUgc2FtZVxuICAgKiBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IHZhdWx0UGF0aD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgc2V0QXBwQ29uZmlnfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXRBcHBDb25maWdQYXJhbXMgZXh0ZW5kcyBBcHBDb25maWdQYXJhbXMge1xuICAvKipcbiAgICogVGhlIHZhbHVlIHRvIHdyaXRlLiBgdW5kZWZpbmVkYCBkZWxldGVzIHRoZSBrZXksIGxlYXZpbmcgT2JzaWRpYW4ncyBvd25cbiAgICogZGVmYXVsdCBpbiBmb3JjZS5cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlOiB1bmtub3duO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayB3aXRoQXBwQ29uZmlnfS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBXaGF0IHRoZSB3cmFwcGVkIHdvcmsgcmV0dXJucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXaXRoQXBwQ29uZmlnUGFyYW1zPFQ+IGV4dGVuZHMgU2V0QXBwQ29uZmlnUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSB3b3JrIHRvIHJ1biB3aGlsZSB0aGUga2V5IGhvbGRzIHtAbGluayBTZXRBcHBDb25maWdQYXJhbXMudmFsdWV9LlxuICAgKi9cbiAgY2FsbGJhY2sodGhpczogdm9pZCk6IFByb21pc2U8VD47XG59XG5cbi8qKlxuICogV2hhdCBhIHdyaXRlIGNhcHR1cmVkIGFib3V0IHRoZSBrZXkncyBzdGF0ZSBiZWZvcmUgaXQgd3JvdGUuXG4gKi9cbmludGVyZmFjZSBDYXB0dXJlZFZhbHVlIHtcbiAgaXNQcmVzZW50OiBib29sZWFuO1xuICB2YWx1ZTogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBUaGUgc2VyaWFsaXplZCBwYXlsb2FkIG9mIGEgcmVhZC5cbiAqL1xuaW50ZXJmYWNlIFJlYWRJbnB1dCBleHRlbmRzIEdlbmVyaWNPYmplY3Qge1xuICBjb25maWdLZXk6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgc2VyaWFsaXplZCBwYXlsb2FkIG9mIGEgcmVzdG9yZS5cbiAqL1xuaW50ZXJmYWNlIFJlc3RvcmVJbnB1dCBleHRlbmRzIEdlbmVyaWNPYmplY3Qge1xuICBjb25maWdLZXk6IHN0cmluZztcbiAgaXNQcmVzZW50OiBib29sZWFuO1xuICB2YWx1ZTogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBUaGUgc2VyaWFsaXplZCBwYXlsb2FkIG9mIGEgd3JpdGUuXG4gKi9cbmludGVyZmFjZSBXcml0ZUlucHV0IGV4dGVuZHMgR2VuZXJpY09iamVjdCB7XG4gIGNvbmZpZ0tleTogc3RyaW5nO1xuICB2YWx1ZTogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBSZWFkcyBhIHZhdWx0IGNvbmZpZyBrZXksIHJlc29sdmluZyB0aGUgdHJhbnNwb3J0IGFuZCB2YXVsdCBmcm9tIHRoZSBjdXJyZW50XG4gKiB0ZXN0IGNvbnRleHQuXG4gKlxuICogVGhpcyBpcyBPYnNpZGlhbidzIG93biBgVmF1bHQuZ2V0Q29uZmlnYCwgc28gYW4gYWJzZW50IGtleSByZWFkcyBiYWNrIGFzXG4gKiBPYnNpZGlhbidzICoqZGVmYXVsdCoqIGZvciBpdCByYXRoZXIgdGhhbiBhcyBgdW5kZWZpbmVkYCBcdTIwMTQgc2VlIHRoaXMgZmlsZSdzXG4gKiBoZWFkZXIuIFVzZSB7QGxpbmsgc2V0QXBwQ29uZmlnfSdzIHtAbGluayBBcHBDb25maWdSZXN0b3JlLmlzUHJlc2VudH0gd2hlbiB0aGVcbiAqIGRpZmZlcmVuY2UgbWF0dGVycy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGtleSB0byByZWFkLCBhbmQgdHJhbnNwb3J0IC8gdmF1bHQgb3ZlcnJpZGVzLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gcmVzb2x2aW5nIHRvIHRoZSBrZXkncyBlZmZlY3RpdmUgdmFsdWUuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBvYnNpZGlhbi1kZXYtdXRpbHMvcGFyYW1zLW9wdGlvbnMtbmFtZS1tYXRjaCAtLSBUZW1wb3Jhcnk6IGBBcHBDb25maWdQYXJhbXNgIGlzIHJlLWV4cG9ydGVkIGZyb20gYGluZGV4LnRzYCwgc28gcmVuYW1pbmcgaXQgdG8gYEdldEFwcENvbmZpZ1BhcmFtc2AgaXMgYSBicmVha2luZyBjaGFuZ2UgaGVsZCBmb3IgdGhlIG5leHQgbWFqb3IuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QXBwQ29uZmlnKHBhcmFtczogQXBwQ29uZmlnUGFyYW1zKTogUHJvbWlzZTx1bmtub3duPiB7XG4gIGNvbnN0IHtcbiAgICBjb25maWdLZXksXG4gICAgdHJhbnNwb3J0LFxuICAgIHZhdWx0UGF0aFxuICB9ID0gcGFyYW1zO1xuXG4gIHJldHVybiBhd2FpdCBldmFsSW5PYnNpZGlhbihub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8RXZhbEluT2JzaWRpYW5QYXJhbXM8UmVhZElucHV0LCB1bmtub3duPj4oe1xuICAgIGNhbGxiYWNrKHsgYXBwLCBjb25maWdLZXk6IGtleSB9KTogdW5rbm93biB7XG4gICAgICBjb25zdCBnZXRDb25maWcgPSBhcHAudmF1bHQuZ2V0Q29uZmlnLmJpbmQoYXBwLnZhdWx0KSBhcyAoY29uZmlnS2V5OiBzdHJpbmcpID0+IHVua25vd247XG4gICAgICByZXR1cm4gZ2V0Q29uZmlnKGtleSk7XG4gICAgfSxcbiAgICBpbnB1dDogeyBjb25maWdLZXkgfSxcbiAgICB0cmFuc3BvcnQsXG4gICAgdmF1bHRQYXRoXG4gIH0pKTtcbn1cblxuLyoqXG4gKiBQdXRzIGEga2V5IGJhY2sgZXhhY3RseSBhcyB7QGxpbmsgc2V0QXBwQ29uZmlnfSBmb3VuZCBpdCBcdTIwMTQgd3JpdGluZyB0aGUgY2FwdHVyZWRcbiAqIHZhbHVlIGJhY2ssIG9yICoqZGVsZXRpbmcqKiB0aGUga2V5IHdoZW4gdGhlIHZhdWx0IGhhZCBuZXZlciBjYXJyaWVkIGl0LlxuICpcbiAqIFRoZSBgYmVmb3JlQWxsYCAvIGBhZnRlckFsbGAgaGFsZiBvZiB0aGUgc2VhbS4gQSB0ZXN0IHRoYXQgc2NvcGVzIHRoZSBjaGFuZ2VcbiAqIHRvIG9uZSBjYWxsYmFjayB3YW50cyB7QGxpbmsgd2l0aEFwcENvbmZpZ30gaW5zdGVhZCwgd2hpY2ggY2Fubm90IGZvcmdldCB0aGVcbiAqIHJlc3RvcmUuXG4gKlxuICogQHBhcmFtIHJlc3RvcmUgLSBUaGUgdG9rZW4ge0BsaW5rIHNldEFwcENvbmZpZ30gcmV0dXJuZWQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIGtleSBpcyBiYWNrIGFzIGl0IHdhcy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc3RvcmVBcHBDb25maWcocmVzdG9yZTogQXBwQ29uZmlnUmVzdG9yZSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7XG4gICAgY29uZmlnS2V5LFxuICAgIGlzUHJlc2VudCxcbiAgICB0cmFuc3BvcnQsXG4gICAgdmFsdWUsXG4gICAgdmF1bHRQYXRoXG4gIH0gPSByZXN0b3JlO1xuXG4gIGF3YWl0IGV2YWxJbk9ic2lkaWFuKG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxFdmFsSW5PYnNpZGlhblBhcmFtczxSZXN0b3JlSW5wdXQsIHVuZGVmaW5lZD4+KHtcbiAgICBjYWxsYmFjayh7XG4gICAgICBhcHAsXG4gICAgICBjb25maWdLZXk6IGtleSxcbiAgICAgIGlzUHJlc2VudDogd2FzUHJlc2VudCxcbiAgICAgIHZhbHVlOiBwcmV2aW91c1ZhbHVlXG4gICAgfSk6IHVuZGVmaW5lZCB7XG4gICAgICBjb25zdCBzZXRDb25maWcgPSBhcHAudmF1bHQuc2V0Q29uZmlnLmJpbmQoYXBwLnZhdWx0KSBhcyAoY29uZmlnS2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKSA9PiB2b2lkO1xuXG4gICAgICAvLyBgdW5kZWZpbmVkYCBpcyBub3QgYSBuby1vcCBoZXJlOiBgc2V0Q29uZmlnYCBkZWxldGVzIHRoZSBrZXkgZm9yIGl0LFxuICAgICAgLy8gd2hpY2ggaXMgdGhlIG9ubHkgd2F5IHRvIHJlc3RvcmUgb25lIHRoZSB2YXVsdCBuZXZlciBjYXJyaWVkLlxuICAgICAgc2V0Q29uZmlnKGtleSwgd2FzUHJlc2VudCA/IHByZXZpb3VzVmFsdWUgOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgaW5wdXQ6IHtcbiAgICAgIGNvbmZpZ0tleSxcbiAgICAgIGlzUHJlc2VudCxcbiAgICAgIHZhbHVlXG4gICAgfSxcbiAgICB0cmFuc3BvcnQsXG4gICAgdmF1bHRQYXRoXG4gIH0pKTtcbn1cblxuLyoqXG4gKiBXcml0ZXMgYSB2YXVsdCBjb25maWcga2V5LCBjYXB0dXJpbmcgd2hhdCBpdCBoZWxkIGZpcnN0IHNvIHRoZSB3cml0ZSBjYW4gYmVcbiAqIHVuZG9uZSBleGFjdGx5LlxuICpcbiAqIE9ic2lkaWFuIHBlcnNpc3RzIHRoZSBjaGFuZ2UgKGByZXF1ZXN0U2F2ZUNvbmZpZ2ApIGFuZCBmaXJlcyBpdHNcbiAqIGBjb25maWctY2hhbmdlZGAgZXZlbnQsIGJvdGggb2Ygd2hpY2ggdGhlIGFwcCdzIG93biBzZXR0aW5ncyBVSSBkb2VzIHRvbyBcdTIwMTQgc29cbiAqIGFueXRoaW5nIGxpc3RlbmluZyByZWFjdHMgYXMgaXQgd291bGQgdG8gYSB1c2VyIGZsaXBwaW5nIHRoZSB0b2dnbGUuIEEgd3JpdGVcbiAqIG9mIHRoZSB2YWx1ZSB0aGUga2V5IGFscmVhZHkgaG9sZHMgaXMgYSBuby1vcCBpbiBPYnNpZGlhbiBpdHNlbGYsIGFuZCB0aGVcbiAqIHJldHVybmVkIHRva2VuIHN0aWxsIGRlc2NyaWJlcyB0aGUgc3RhdGUgdGhhdCBwcmVjZWRlZCBpdC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGtleSwgdGhlIHZhbHVlLCBhbmQgdHJhbnNwb3J0IC8gdmF1bHQgb3ZlcnJpZGVzLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gcmVzb2x2aW5nIHRvIHRoZSB7QGxpbmsgQXBwQ29uZmlnUmVzdG9yZX0gdG9rZW4gdG9cbiAqICAgaGFuZCB7QGxpbmsgcmVzdG9yZUFwcENvbmZpZ30uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZXRBcHBDb25maWcocGFyYW1zOiBTZXRBcHBDb25maWdQYXJhbXMpOiBQcm9taXNlPEFwcENvbmZpZ1Jlc3RvcmU+IHtcbiAgY29uc3Qge1xuICAgIGNvbmZpZ0tleSxcbiAgICB0cmFuc3BvcnQsXG4gICAgdmFsdWUsXG4gICAgdmF1bHRQYXRoXG4gIH0gPSBwYXJhbXM7XG5cbiAgY29uc3QgY2FwdHVyZWQgPSBhd2FpdCBldmFsSW5PYnNpZGlhbihub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8RXZhbEluT2JzaWRpYW5QYXJhbXM8V3JpdGVJbnB1dCwgQ2FwdHVyZWRWYWx1ZT4+KHtcbiAgICBjYWxsYmFjayh7XG4gICAgICBhcHAsXG4gICAgICBjb25maWdLZXk6IGtleSxcbiAgICAgIHZhbHVlOiBuZXdWYWx1ZVxuICAgIH0pOiBDYXB0dXJlZFZhbHVlIHtcbiAgICAgIC8vIGBjb25maWdgIGNhcnJpZXMgT05MWSB0aGUga2V5cyBjaGFuZ2VkIGZyb20gdGhlaXIgZGVmYXVsdCwgd2hpY2ggaXMgd2hhdFxuICAgICAgLy8gbWFrZXMgaXQgdGhlIHByZXNlbmNlIHNpZ25hbDsgYGdldENvbmZpZ2Agc3Vic3RpdHV0ZXMgdGhlIGRlZmF1bHQgYW5kIHNvXG4gICAgICAvLyBjYW5ub3QgdGVsbCBhbiB1bnNldCBrZXkgZnJvbSBvbmUgc2V0IHRvIHRoYXQgZGVmYXVsdC4gVGhlIHZhbHVlIGl0c2VsZlxuICAgICAgLy8gc3RpbGwgY29tZXMgZnJvbSBgZ2V0Q29uZmlnYCwgd2hpY2ggcmV0dXJucyB0aGUgc3RvcmVkIG9uZSB3aGVuZXZlclxuICAgICAgLy8gdGhlcmUgaXMgb25lIFx1MjAxNCBzbyB0aGUgcmVhZCBuZWVkcyBubyBjYXN0IG9mIHRoZSBjb25maWcgb2JqZWN0LlxuICAgICAgY29uc3QgaXNQcmVzZW50ID0gT2JqZWN0Lmhhc093bihhcHAudmF1bHQuY29uZmlnLCBrZXkpO1xuXG4gICAgICBjb25zdCBnZXRDb25maWcgPSBhcHAudmF1bHQuZ2V0Q29uZmlnLmJpbmQoYXBwLnZhdWx0KSBhcyAoY29uZmlnS2V5OiBzdHJpbmcpID0+IHVua25vd247XG4gICAgICBjb25zdCBwcmV2aW91c1ZhbHVlID0gaXNQcmVzZW50ID8gZ2V0Q29uZmlnKGtleSkgOiB1bmRlZmluZWQ7XG5cbiAgICAgIGNvbnN0IHNldENvbmZpZyA9IGFwcC52YXVsdC5zZXRDb25maWcuYmluZChhcHAudmF1bHQpIGFzIChjb25maWdLZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pID0+IHZvaWQ7XG4gICAgICBzZXRDb25maWcoa2V5LCBuZXdWYWx1ZSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzUHJlc2VudCxcbiAgICAgICAgdmFsdWU6IHByZXZpb3VzVmFsdWVcbiAgICAgIH07XG4gICAgfSxcbiAgICBpbnB1dDoge1xuICAgICAgY29uZmlnS2V5LFxuICAgICAgdmFsdWVcbiAgICB9LFxuICAgIHRyYW5zcG9ydCxcbiAgICB2YXVsdFBhdGhcbiAgfSkpO1xuXG4gIHJldHVybiBub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8QXBwQ29uZmlnUmVzdG9yZT4oe1xuICAgIGNvbmZpZ0tleSxcbiAgICBpc1ByZXNlbnQ6IGNhcHR1cmVkLmlzUHJlc2VudCxcbiAgICB0cmFuc3BvcnQsXG4gICAgdmFsdWU6IGNhcHR1cmVkLnZhbHVlLFxuICAgIHZhdWx0UGF0aFxuICB9KTtcbn1cblxuLyoqXG4gKiBSdW5zIHdvcmsgd2l0aCBhIHZhdWx0IGNvbmZpZyBrZXkgdGVtcG9yYXJpbHkgc2V0LCBhbmQgcHV0cyB0aGUga2V5IGJhY2tcbiAqIGFmdGVyd2FyZHMgXHUyMDE0IG9uIGEgdGhyb3cgYXMgbXVjaCBhcyBvbiBhIHJldHVybi5cbiAqXG4gKiBUaGUgc2hhcGUgYSBwb3BvdXQtc3ViamVjdCB0ZXN0IHdhbnRzOlxuICpcbiAqIGBgYHRzXG4gKiBhd2FpdCB3aXRoQXBwQ29uZmlnKHtcbiAqICAgYXN5bmMgY2FsbGJhY2soKSB7XG4gKiAgICAgYXdhaXQgZXZhbEluT2JzaWRpYW4oeyAuLi4gfSk7IC8vIHRoZSBzZXR0aW5ncyB3aW5kb3cgaXMgYSBwb3BvdXQgaW4gaGVyZVxuICogICB9LFxuICogICBjb25maWdLZXk6ICdzZXR0aW5nc1BvcG91dFdpbmRvdycsXG4gKiAgIHZhbHVlOiB0cnVlLFxuICogICB2YXVsdFBhdGhcbiAqIH0pO1xuICogYGBgXG4gKlxuICogVGhlIGNhbGxiYWNrIHJ1bnMgb24gdGhlICoqTm9kZSoqIHNpZGUsIHNvIGl0IGlzIGZyZWUgdG8gbWFrZSBzZXZlcmFsIGV2YWxzLFxuICogdGFrZSBhIHNjcmVlbnNob3QsIG9yIGFzc2VydCBiZXR3ZWVuIHRoZW0uXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gV2hhdCB0aGUgd3JhcHBlZCB3b3JrIHJldHVybnMuXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGtleSwgdGhlIHZhbHVlIHRvIGhvbGQgaXQgYXQsIHRoZSB3b3JrLCBhbmQgdHJhbnNwb3J0IC9cbiAqICAgdmF1bHQgb3ZlcnJpZGVzLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gcmVzb2x2aW5nIHRvIHdoYXRldmVyIHRoZSBjYWxsYmFjayByZXR1cm5lZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdpdGhBcHBDb25maWc8VD4ocGFyYW1zOiBXaXRoQXBwQ29uZmlnUGFyYW1zPFQ+KTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IHtcbiAgICBjYWxsYmFjayxcbiAgICBjb25maWdLZXksXG4gICAgdHJhbnNwb3J0LFxuICAgIHZhbHVlLFxuICAgIHZhdWx0UGF0aFxuICB9ID0gcGFyYW1zO1xuXG4gIGNvbnN0IHJlc3RvcmUgPSBhd2FpdCBzZXRBcHBDb25maWcobm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPFNldEFwcENvbmZpZ1BhcmFtcz4oe1xuICAgIGNvbmZpZ0tleSxcbiAgICB0cmFuc3BvcnQsXG4gICAgdmFsdWUsXG4gICAgdmF1bHRQYXRoXG4gIH0pKTtcblxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBjYWxsYmFjaygpO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IHJlc3RvcmVBcHBDb25maWcocmVzdG9yZSk7XG4gIH1cbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUEwREEsOEJBQStCO0FBQy9CLDJDQUE0QztBQW1JNUMsZUFBc0IsYUFBYSxRQUEyQztBQUM1RSxRQUFNO0FBQUEsSUFDSjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRixJQUFJO0FBRUosU0FBTyxVQUFNLDRDQUFlLGtFQUFzRTtBQUFBLElBQ2hHLFNBQVMsRUFBRSxLQUFLLFdBQVcsSUFBSSxHQUFZO0FBQ3pDLFlBQU0sWUFBWSxJQUFJLE1BQU0sVUFBVSxLQUFLLElBQUksS0FBSztBQUNwRCxhQUFPLFVBQVUsR0FBRztBQUFBLElBQ3RCO0FBQUEsSUFDQSxPQUFPLEVBQUUsVUFBVTtBQUFBLElBQ25CO0FBQUEsSUFDQTtBQUFBLEVBQ0YsQ0FBQyxDQUFDO0FBQ0o7QUFhQSxlQUFzQixpQkFBaUIsU0FBMEM7QUFDL0UsUUFBTTtBQUFBLElBQ0o7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRixJQUFJO0FBRUosWUFBTSw0Q0FBZSxrRUFBMkU7QUFBQSxJQUM5RixTQUFTO0FBQUEsTUFDUDtBQUFBLE1BQ0EsV0FBVztBQUFBLE1BQ1gsV0FBVztBQUFBLE1BQ1gsT0FBTztBQUFBLElBQ1QsR0FBYztBQUNaLFlBQU0sWUFBWSxJQUFJLE1BQU0sVUFBVSxLQUFLLElBQUksS0FBSztBQUlwRCxnQkFBVSxLQUFLLGFBQWEsZ0JBQWdCLE1BQVM7QUFBQSxJQUN2RDtBQUFBLElBQ0EsT0FBTztBQUFBLE1BQ0w7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0Y7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0YsQ0FBQyxDQUFDO0FBQ0o7QUFnQkEsZUFBc0IsYUFBYSxRQUF1RDtBQUN4RixRQUFNO0FBQUEsSUFDSjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0YsSUFBSTtBQUVKLFFBQU0sV0FBVyxVQUFNLDRDQUFlLGtFQUE2RTtBQUFBLElBQ2pILFNBQVM7QUFBQSxNQUNQO0FBQUEsTUFDQSxXQUFXO0FBQUEsTUFDWCxPQUFPO0FBQUEsSUFDVCxHQUFrQjtBQU1oQixZQUFNLFlBQVksT0FBTyxPQUFPLElBQUksTUFBTSxRQUFRLEdBQUc7QUFFckQsWUFBTSxZQUFZLElBQUksTUFBTSxVQUFVLEtBQUssSUFBSSxLQUFLO0FBQ3BELFlBQU0sZ0JBQWdCLFlBQVksVUFBVSxHQUFHLElBQUk7QUFFbkQsWUFBTSxZQUFZLElBQUksTUFBTSxVQUFVLEtBQUssSUFBSSxLQUFLO0FBQ3BELGdCQUFVLEtBQUssUUFBUTtBQUV2QixhQUFPO0FBQUEsUUFDTDtBQUFBLFFBQ0EsT0FBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBQUEsSUFDQSxPQUFPO0FBQUEsTUFDTDtBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGLENBQUMsQ0FBQztBQUVGLGFBQU8sa0VBQThDO0FBQUEsSUFDbkQ7QUFBQSxJQUNBLFdBQVcsU0FBUztBQUFBLElBQ3BCO0FBQUEsSUFDQSxPQUFPLFNBQVM7QUFBQSxJQUNoQjtBQUFBLEVBQ0YsQ0FBQztBQUNIO0FBMkJBLGVBQXNCLGNBQWlCLFFBQTRDO0FBQ2pGLFFBQU07QUFBQSxJQUNKO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0YsSUFBSTtBQUVKLFFBQU0sVUFBVSxNQUFNLGlCQUFhLGtFQUFnRDtBQUFBLElBQ2pGO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRixDQUFDLENBQUM7QUFFRixNQUFJO0FBQ0YsV0FBTyxNQUFNLFNBQVM7QUFBQSxFQUN4QixVQUFFO0FBQ0EsVUFBTSxpQkFBaUIsT0FBTztBQUFBLEVBQ2hDO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
137
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2FwcC1jb25maWcudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBOb2RlLXNpZGUgcmVhZC93cml0ZS9yZXN0b3JlIHNlYW0gZm9yIG9uZSBvZiBPYnNpZGlhbidzICoqdmF1bHQgY29uZmlnKioga2V5cyxcbiAqIGZvciB0aGUgZmV3IHRlc3RzIHRoYXQgbmVlZCBhIGRpZmZlcmVudCB2YWx1ZSB0aGFuIHRoZSBoYXJuZXNzJ3MgaGVhZGxlc3NcbiAqIGRlZmF1bHQuXG4gKlxuICogYGVuc3VyZUhlYWRsZXNzVmF1bHRDb25maWdgIHdyaXRlcyBgYWx3YXlzVXBkYXRlTGlua3M6IHRydWVgIGFuZFxuICogYHNldHRpbmdzUG9wb3V0V2luZG93OiBmYWxzZWAgaW50byBldmVyeSB2YXVsdCB0aGUgaGFybmVzcyBwcm92aXNpb25zLCBiZWZvcmVcbiAqIHRoYXQgdmF1bHQgaXMgZXZlciBvcGVuZWQsIGFuZCBuZWl0aGVyIGlzIGEga25vYiBhIGNvbnN1bWVyIGNvbmZpZ3VyZXMgXHUyMDE0IHNlZVxuICogdGhlIHByb2plY3QgYEFHRU5UUy5tZGAgKCoqTDQ4KiopLiBUaGF0IGlzIHJpZ2h0IGZvciBhbG1vc3QgZXZlcnkgdGVzdCwgYW5kXG4gKiB3cm9uZyBmb3IgdGhlIGZldyB3aG9zZSAqKnN1YmplY3QgaXMqKiB0aGUgc2Vjb25kIEVsZWN0cm9uIHdpbmRvdyB0aGUgcG9wb3V0XG4gKiBjcmVhdGVzOiBhIHRlc3QgdGhhdCB3YWl0cyBvbiBgYWN0aXZlV2luZG93ICE9PSB3aW5kb3dgLCBvciByZWFkc1xuICogYGFwcC5zZXR0aW5nLnBvcG91dGAsIG5ldmVyIG9ic2VydmVzIHRoZSB0aGluZyBpdCBhc3NlcnRzIGFuZCBzaW1wbHkgdGltZXMgb3V0LlxuICpcbiAqIFRob3NlIHRlc3RzIG9wdCBiYWNrIGluIHRocm91Z2ggaGVyZSByYXRoZXIgdGhhbiBieSBoYW5kLCB3aGljaCBidXlzIHRocmVlXG4gKiB0aGluZ3Mgb3ZlciBhbiBpbmxpbmUgYHNldENvbmZpZ2AgaW5zaWRlIGFuIGBldmFsSW5PYnNpZGlhbmAgY2xvc3VyZTpcbiAqXG4gKiAtICoqVGhlIHZhbHVlIGlzIHJlc3RvcmVkKiosIGluY2x1ZGluZyBkZWxldGluZyBhIGtleSB0aGF0IGhhZCBuZXZlciBiZWVuXG4gKiAgIHdyaXR0ZW4uIEFuIGlubGluZSBzZXR0ZXIgd3JpdGVzIGludG8gYSB2YXVsdCBzaGFyZWQgd2l0aCB0aGUgcmVzdCBvZiB0aGVcbiAqICAgcnVuLCBzbyBldmVyeSBsYXRlciB0ZXN0IGluIHRoYXQgaW5zdGFuY2UgaW5oZXJpdHMgdGhlIGNoYW5nZSBcdTIwMTQgdGhlXG4gKiAgIGNyb3NzLXRlc3QgY29udGFtaW5hdGlvbiB0aGUgdW5jb25kaXRpb25hbCBkZWZhdWx0IGV4aXN0cyB0byBlbmQuXG4gKiAtICoqVGhlIGNhc3QgbGl2ZXMgaW4gb25lIHBsYWNlLioqIGBvYnNpZGlhbi10eXBpbmdzYCcgYENvbmZpZ0l0ZW1gIHVuaW9uIG9taXRzXG4gKiAgIGBzZXR0aW5nc1BvcG91dFdpbmRvd2AsIHNvIHRoZSBrZXkgY2Fubm90IGJlIHBhc3NlZCB0byBgZ2V0Q29uZmlnYCAvXG4gKiAgIGBzZXRDb25maWdgIHdpdGhvdXQgd2lkZW5pbmcgdGhlbTsgZXZlcnkgY29uc3VtZXIgdGhhdCB3cm90ZSB0aGUgc2V0dGVyXG4gKiAgIGlubGluZSByZXBlYXRlZCB0aGF0IGNhc3QuXG4gKiAtICoqUGVyLXRlc3QgZ3JhbnVsYXJpdHkuKiogQSBwYXJhbWV0ZXIgb24gdGhlIHByb3Zpc2lvbmluZyB3cml0ZSB3b3VsZCBiZVxuICogICBwZXItdmF1bHQsIGFuZCBhIHByb2plY3Qgd2hvc2UgdGVzdHMgc2hhcmUgb25lIHZhdWx0IFx1MjAxNCB0aGUgdXN1YWwgc2hhcGUgXHUyMDE0XG4gKiAgIGNhbm5vdCBoYXZlIGl0IGJvdGggd2F5cy5cbiAqXG4gKiBFdmVyeXRoaW5nIGhlcmUgcnVucyBvbiB0aGUgKipOb2RlKiogc2lkZS4gQW4gYGV2YWxJbk9ic2lkaWFuYCBjYWxsYmFjayBpc1xuICogc2VyaWFsaXplZCBpbnRvIHRoZSBkcml2ZW4gT2JzaWRpYW4gYW5kIGNhbiBpbXBvcnQgbm90aGluZywgc28gYSBoZWxwZXJcbiAqIGNhbGxhYmxlIGZyb20gaW5zaWRlIG9uZSBpcyBub3QgZXhwcmVzc2libGU7IGVhY2ggZnVuY3Rpb24gYmVsb3cgaXMgaXRzIG93blxuICogc2hvcnQgZXZhbCBpbnN0ZWFkLlxuICpcbiAqICMjIyBXaHkgcHJlc2VuY2UgaXMgcmVhZCBvZmYgYGFwcC52YXVsdC5jb25maWdgLCBub3QgZnJvbSBgZ2V0Q29uZmlnYFxuICpcbiAqIEJvdGggZmFjdHMgd2VyZSB2ZXJpZmllZCBpbiB0aGUgc2hpcHBlZCAxLjE0LjEgYnVuZGxlIHJhdGhlciB0aGFuIGFzc3VtZWQ6XG4gKlxuICogLSBgVmF1bHQuc2V0Q29uZmlnKGtleSwgdmFsdWUpYCAqKmRlbGV0ZXMqKiB0aGUga2V5IHdoZW4gYHZhbHVlYCBpc1xuICogICBgdW5kZWZpbmVkYCwgYW5kIGRvZXMgbm90aGluZyBhdCBhbGwgd2hlbiB0aGUgdmFsdWUgaXMgdW5jaGFuZ2VkIChubyBzYXZlLFxuICogICBubyBgY29uZmlnLWNoYW5nZWRgIGV2ZW50KS4gU28gYW4gZXhhY3QgcmVzdG9yZSBvZiBhIGtleSB0aGF0IHdhcyBuZXZlclxuICogICB3cml0dGVuIGlzIGV4cHJlc3NpYmxlLlxuICogLSBgVmF1bHQuZ2V0Q29uZmlnKGtleSlgIGZhbGxzIGJhY2sgdG8gT2JzaWRpYW4ncyBkZWZhdWx0cyB0YWJsZSB3aGVuIHRoZSBrZXlcbiAqICAgaXMgYWJzZW50LCBzbyBpdCBjYW5ub3QgdGVsbCAqdW5zZXQqIGZyb20gKnNldCB0byB0aGUgc2hpcHBlZCBkZWZhdWx0KiBcdTIwMTRcbiAqICAgcmVzdG9yaW5nIGZyb20gaXQgd291bGQgbGVhdmUgdGhlIGtleSB3cml0dGVuIHdoZXJlIGl0IGhhZCBub3QgYmVlbi5cbiAqICAgYGFwcC52YXVsdC5jb25maWdgIGhvbGRzIG9ubHkgdGhlIGtleXMgY2hhbmdlZCBmcm9tIHRoZWlyIGRlZmF1bHQsIHNvXG4gKiAgIGBPYmplY3QuaGFzT3duYCBvbiBpdCBpcyB0aGUgc2lnbmFsIGEgcmVzdG9yZSBuZWVkcy5cbiAqL1xuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gSW50ZWdyYXRpb24tdGltZSBjb2RlIChkcml2ZXMgYSBsaXZlIE9ic2lkaWFuIHZpYSBldmFsSW5PYnNpZGlhbikgY292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgRXZhbEluT2JzaWRpYW5QYXJhbXMsXG4gIEdlbmVyaWNPYmplY3Rcbn0gZnJvbSAnLi9ldmFsLWluLW9ic2lkaWFuLmNqcyc7XG5pbXBvcnQgdHlwZSB7IE9ic2lkaWFuVHJhbnNwb3J0IH0gZnJvbSAnLi90cmFuc3BvcnQuY2pzJztcblxuaW1wb3J0IHsgZXZhbEluT2JzaWRpYW4gfSBmcm9tICcuL2V2YWwtaW4tb2JzaWRpYW4uY2pzJztcbmltcG9ydCB7IG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllcyB9IGZyb20gJy4vbm9ybWFsaXplLW9wdGlvbmFsLXByb3BlcnRpZXMuY2pzJztcblxuLyoqXG4gKiBXaGF0IHtAbGluayBzZXRBcHBDb25maWd9IGNhcHR1cmVkIGJlZm9yZSBpdCB3cm90ZSwgYW5kIGFsbFxuICoge0BsaW5rIHJlc3RvcmVBcHBDb25maWd9IG5lZWRzIHRvIHB1dCB0aGUga2V5IGJhY2sgZXhhY3RseSBhcyBpdCB3YXMgXHUyMDE0XG4gKiBpbmNsdWRpbmcgcHV0dGluZyBpdCBiYWNrIHRvICphYnNlbnQqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcENvbmZpZ1Jlc3RvcmUge1xuICAvKipcbiAgICogVGhlIGtleSB0aGF0IHdhcyB3cml0dGVuLlxuICAgKi9cbiAgcmVhZG9ubHkgY29uZmlnS2V5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHZhdWx0J3MgY29uZmlnIGNhcnJpZWQgdGhlIGtleSBhdCBhbGwgYmVmb3JlIHRoZSB3cml0ZS4gYGZhbHNlYFxuICAgKiBtZWFucyB0aGUgdmF1bHQgd2FzIHJ1bm5pbmcgb24gT2JzaWRpYW4ncyBvd24gZGVmYXVsdCwgYW5kIHJlc3RvcmluZyBpcyBhXG4gICAqIGRlbGV0ZSByYXRoZXIgdGhhbiBhIHdyaXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNQcmVzZW50OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgdHJhbnNwb3J0IHRoZSBjYXB0dXJlIHdhcyBtYWRlIGFnYWluc3QsIHNvIHRoZSByZXN0b3JlIGxhbmRzIGluIHRoZVxuICAgKiBzYW1lIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgdHJhbnNwb3J0PzogT2JzaWRpYW5UcmFuc3BvcnQ7XG5cbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSB0aGUga2V5IGhlbGQsIG9yIGB1bmRlZmluZWRgIHdoZW4ge0BsaW5rIGlzUHJlc2VudH0gaXMgYGZhbHNlYC5cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlOiB1bmtub3duO1xuXG4gIC8qKlxuICAgKiBUaGUgdmF1bHQgdGhlIGNhcHR1cmUgd2FzIG1hZGUgYWdhaW5zdCwgc28gdGhlIHJlc3RvcmUgbGFuZHMgaW4gdGhlIHNhbWVcbiAgICogaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSB2YXVsdFBhdGg/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGdldEFwcENvbmZpZ30sIGFuZCB0aGUgc2hhcmVkIHNoYXBlIG9mIHRoZSB3cml0ZXJzIGJlbG93LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEFwcENvbmZpZ1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgdmF1bHQgY29uZmlnIGtleSwgZS5nLiBgc2V0dGluZ3NQb3BvdXRXaW5kb3dgLiBOb3QgbmFycm93ZWQgdG9cbiAgICogYG9ic2lkaWFuLXR5cGluZ3NgJyBgQ29uZmlnSXRlbWA6IHRoYXQgdW5pb24gb21pdHMga2V5cyBPYnNpZGlhbiByZWFsbHlcbiAgICogcmVhZHMsIGBzZXR0aW5nc1BvcG91dFdpbmRvd2AgYW1vbmcgdGhlbSwgd2hpY2ggaXMgdGhlIHdob2xlIHJlYXNvbiBhXG4gICAqIGNvbnN1bWVyIGhhZCB0byB3aWRlbiB0aGUgc2V0dGVyIGJ5IGhhbmQuXG4gICAqL1xuICByZWFkb25seSBjb25maWdLZXk6IHN0cmluZztcblxuICAvKipcbiAgICogT3ZlcnJpZGUgdGhlIHRyYW5zcG9ydC4gV2hlbiBvbWl0dGVkLCB0aGUgdHJhbnNwb3J0IHRoZSBjdXJyZW50IHRlc3RcbiAgICogY29udGV4dCBpcyBkcml2aW5nIGlzIHVzZWQuXG4gICAqL1xuICByZWFkb25seSB0cmFuc3BvcnQ/OiBPYnNpZGlhblRyYW5zcG9ydDtcblxuICAvKipcbiAgICogVGhlIHZhdWx0IHdob3NlIE9ic2lkaWFuIGluc3RhbmNlIHRvIHJlYWQgb3Igd3JpdGUuIFdoZW4gb21pdHRlZCwgdGhlXG4gICAqIGN1cnJlbnQgdGVzdCBjb250ZXh0J3MgdmF1bHQgaXMgdXNlZC5cbiAgICovXG4gIHJlYWRvbmx5IHZhdWx0UGF0aD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgc2V0QXBwQ29uZmlnfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXRBcHBDb25maWdQYXJhbXMgZXh0ZW5kcyBHZXRBcHBDb25maWdQYXJhbXMge1xuICAvKipcbiAgICogVGhlIHZhbHVlIHRvIHdyaXRlLiBgdW5kZWZpbmVkYCBkZWxldGVzIHRoZSBrZXksIGxlYXZpbmcgT2JzaWRpYW4ncyBvd25cbiAgICogZGVmYXVsdCBpbiBmb3JjZS5cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlOiB1bmtub3duO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayB3aXRoQXBwQ29uZmlnfS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBXaGF0IHRoZSB3cmFwcGVkIHdvcmsgcmV0dXJucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXaXRoQXBwQ29uZmlnUGFyYW1zPFQ+IGV4dGVuZHMgU2V0QXBwQ29uZmlnUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSB3b3JrIHRvIHJ1biB3aGlsZSB0aGUga2V5IGhvbGRzIHtAbGluayBTZXRBcHBDb25maWdQYXJhbXMudmFsdWV9LlxuICAgKi9cbiAgcmVhZG9ubHkgY2FsbGJhY2s6ICh0aGlzOiB2b2lkKSA9PiBQcm9taXNlPFQ+O1xufVxuXG4vKipcbiAqIFdoYXQgYSB3cml0ZSBjYXB0dXJlZCBhYm91dCB0aGUga2V5J3Mgc3RhdGUgYmVmb3JlIGl0IHdyb3RlLlxuICovXG5pbnRlcmZhY2UgQ2FwdHVyZWRWYWx1ZSB7XG4gIGlzUHJlc2VudDogYm9vbGVhbjtcbiAgdmFsdWU6IHVua25vd247XG59XG5cbi8qKlxuICogVGhlIHNlcmlhbGl6ZWQgcGF5bG9hZCBvZiBhIHJlYWQuXG4gKi9cbmludGVyZmFjZSBSZWFkSW5wdXQgZXh0ZW5kcyBHZW5lcmljT2JqZWN0IHtcbiAgY29uZmlnS2V5OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHNlcmlhbGl6ZWQgcGF5bG9hZCBvZiBhIHJlc3RvcmUuXG4gKi9cbmludGVyZmFjZSBSZXN0b3JlSW5wdXQgZXh0ZW5kcyBHZW5lcmljT2JqZWN0IHtcbiAgY29uZmlnS2V5OiBzdHJpbmc7XG4gIGlzUHJlc2VudDogYm9vbGVhbjtcbiAgdmFsdWU6IHVua25vd247XG59XG5cbi8qKlxuICogVGhlIHNlcmlhbGl6ZWQgcGF5bG9hZCBvZiBhIHdyaXRlLlxuICovXG5pbnRlcmZhY2UgV3JpdGVJbnB1dCBleHRlbmRzIEdlbmVyaWNPYmplY3Qge1xuICBjb25maWdLZXk6IHN0cmluZztcbiAgdmFsdWU6IHVua25vd247XG59XG5cbi8qKlxuICogUmVhZHMgYSB2YXVsdCBjb25maWcga2V5LCByZXNvbHZpbmcgdGhlIHRyYW5zcG9ydCBhbmQgdmF1bHQgZnJvbSB0aGUgY3VycmVudFxuICogdGVzdCBjb250ZXh0LlxuICpcbiAqIFRoaXMgaXMgT2JzaWRpYW4ncyBvd24gYFZhdWx0LmdldENvbmZpZ2AsIHNvIGFuIGFic2VudCBrZXkgcmVhZHMgYmFjayBhc1xuICogT2JzaWRpYW4ncyAqKmRlZmF1bHQqKiBmb3IgaXQgcmF0aGVyIHRoYW4gYXMgYHVuZGVmaW5lZGAgXHUyMDE0IHNlZSB0aGlzIGZpbGUnc1xuICogaGVhZGVyLiBVc2Uge0BsaW5rIHNldEFwcENvbmZpZ30ncyB7QGxpbmsgQXBwQ29uZmlnUmVzdG9yZS5pc1ByZXNlbnR9IHdoZW4gdGhlXG4gKiBkaWZmZXJlbmNlIG1hdHRlcnMuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBrZXkgdG8gcmVhZCwgYW5kIHRyYW5zcG9ydCAvIHZhdWx0IG92ZXJyaWRlcy5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHJlc29sdmluZyB0byB0aGUga2V5J3MgZWZmZWN0aXZlIHZhbHVlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QXBwQ29uZmlnKHBhcmFtczogR2V0QXBwQ29uZmlnUGFyYW1zKTogUHJvbWlzZTx1bmtub3duPiB7XG4gIGNvbnN0IHtcbiAgICBjb25maWdLZXksXG4gICAgdHJhbnNwb3J0LFxuICAgIHZhdWx0UGF0aFxuICB9ID0gcGFyYW1zO1xuXG4gIHJldHVybiBhd2FpdCBldmFsSW5PYnNpZGlhbihub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8RXZhbEluT2JzaWRpYW5QYXJhbXM8UmVhZElucHV0LCB1bmtub3duPj4oe1xuICAgIGNhbGxiYWNrKHsgYXBwLCBjb25maWdLZXk6IGtleSB9KTogdW5rbm93biB7XG4gICAgICBjb25zdCBnZXRDb25maWcgPSBhcHAudmF1bHQuZ2V0Q29uZmlnLmJpbmQoYXBwLnZhdWx0KSBhcyAoY29uZmlnS2V5OiBzdHJpbmcpID0+IHVua25vd247XG4gICAgICByZXR1cm4gZ2V0Q29uZmlnKGtleSk7XG4gICAgfSxcbiAgICBpbnB1dDogeyBjb25maWdLZXkgfSxcbiAgICB0cmFuc3BvcnQsXG4gICAgdmF1bHRQYXRoXG4gIH0pKTtcbn1cblxuLyoqXG4gKiBQdXRzIGEga2V5IGJhY2sgZXhhY3RseSBhcyB7QGxpbmsgc2V0QXBwQ29uZmlnfSBmb3VuZCBpdCBcdTIwMTQgd3JpdGluZyB0aGUgY2FwdHVyZWRcbiAqIHZhbHVlIGJhY2ssIG9yICoqZGVsZXRpbmcqKiB0aGUga2V5IHdoZW4gdGhlIHZhdWx0IGhhZCBuZXZlciBjYXJyaWVkIGl0LlxuICpcbiAqIFRoZSBgYmVmb3JlQWxsYCAvIGBhZnRlckFsbGAgaGFsZiBvZiB0aGUgc2VhbS4gQSB0ZXN0IHRoYXQgc2NvcGVzIHRoZSBjaGFuZ2VcbiAqIHRvIG9uZSBjYWxsYmFjayB3YW50cyB7QGxpbmsgd2l0aEFwcENvbmZpZ30gaW5zdGVhZCwgd2hpY2ggY2Fubm90IGZvcmdldCB0aGVcbiAqIHJlc3RvcmUuXG4gKlxuICogQHBhcmFtIHJlc3RvcmUgLSBUaGUgdG9rZW4ge0BsaW5rIHNldEFwcENvbmZpZ30gcmV0dXJuZWQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIGtleSBpcyBiYWNrIGFzIGl0IHdhcy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc3RvcmVBcHBDb25maWcocmVzdG9yZTogQXBwQ29uZmlnUmVzdG9yZSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7XG4gICAgY29uZmlnS2V5LFxuICAgIGlzUHJlc2VudCxcbiAgICB0cmFuc3BvcnQsXG4gICAgdmFsdWUsXG4gICAgdmF1bHRQYXRoXG4gIH0gPSByZXN0b3JlO1xuXG4gIGF3YWl0IGV2YWxJbk9ic2lkaWFuKG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxFdmFsSW5PYnNpZGlhblBhcmFtczxSZXN0b3JlSW5wdXQsIHVuZGVmaW5lZD4+KHtcbiAgICBjYWxsYmFjayh7XG4gICAgICBhcHAsXG4gICAgICBjb25maWdLZXk6IGtleSxcbiAgICAgIGlzUHJlc2VudDogd2FzUHJlc2VudCxcbiAgICAgIHZhbHVlOiBwcmV2aW91c1ZhbHVlXG4gICAgfSk6IHVuZGVmaW5lZCB7XG4gICAgICBjb25zdCBzZXRDb25maWcgPSBhcHAudmF1bHQuc2V0Q29uZmlnLmJpbmQoYXBwLnZhdWx0KSBhcyAoY29uZmlnS2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKSA9PiB2b2lkO1xuXG4gICAgICAvLyBgdW5kZWZpbmVkYCBpcyBub3QgYSBuby1vcCBoZXJlOiBgc2V0Q29uZmlnYCBkZWxldGVzIHRoZSBrZXkgZm9yIGl0LFxuICAgICAgLy8gd2hpY2ggaXMgdGhlIG9ubHkgd2F5IHRvIHJlc3RvcmUgb25lIHRoZSB2YXVsdCBuZXZlciBjYXJyaWVkLlxuICAgICAgc2V0Q29uZmlnKGtleSwgd2FzUHJlc2VudCA/IHByZXZpb3VzVmFsdWUgOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgaW5wdXQ6IHtcbiAgICAgIGNvbmZpZ0tleSxcbiAgICAgIGlzUHJlc2VudCxcbiAgICAgIHZhbHVlXG4gICAgfSxcbiAgICB0cmFuc3BvcnQsXG4gICAgdmF1bHRQYXRoXG4gIH0pKTtcbn1cblxuLyoqXG4gKiBXcml0ZXMgYSB2YXVsdCBjb25maWcga2V5LCBjYXB0dXJpbmcgd2hhdCBpdCBoZWxkIGZpcnN0IHNvIHRoZSB3cml0ZSBjYW4gYmVcbiAqIHVuZG9uZSBleGFjdGx5LlxuICpcbiAqIE9ic2lkaWFuIHBlcnNpc3RzIHRoZSBjaGFuZ2UgKGByZXF1ZXN0U2F2ZUNvbmZpZ2ApIGFuZCBmaXJlcyBpdHNcbiAqIGBjb25maWctY2hhbmdlZGAgZXZlbnQsIGJvdGggb2Ygd2hpY2ggdGhlIGFwcCdzIG93biBzZXR0aW5ncyBVSSBkb2VzIHRvbyBcdTIwMTQgc29cbiAqIGFueXRoaW5nIGxpc3RlbmluZyByZWFjdHMgYXMgaXQgd291bGQgdG8gYSB1c2VyIGZsaXBwaW5nIHRoZSB0b2dnbGUuIEEgd3JpdGVcbiAqIG9mIHRoZSB2YWx1ZSB0aGUga2V5IGFscmVhZHkgaG9sZHMgaXMgYSBuby1vcCBpbiBPYnNpZGlhbiBpdHNlbGYsIGFuZCB0aGVcbiAqIHJldHVybmVkIHRva2VuIHN0aWxsIGRlc2NyaWJlcyB0aGUgc3RhdGUgdGhhdCBwcmVjZWRlZCBpdC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGtleSwgdGhlIHZhbHVlLCBhbmQgdHJhbnNwb3J0IC8gdmF1bHQgb3ZlcnJpZGVzLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gcmVzb2x2aW5nIHRvIHRoZSB7QGxpbmsgQXBwQ29uZmlnUmVzdG9yZX0gdG9rZW4gdG9cbiAqICAgaGFuZCB7QGxpbmsgcmVzdG9yZUFwcENvbmZpZ30uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZXRBcHBDb25maWcocGFyYW1zOiBTZXRBcHBDb25maWdQYXJhbXMpOiBQcm9taXNlPEFwcENvbmZpZ1Jlc3RvcmU+IHtcbiAgY29uc3Qge1xuICAgIGNvbmZpZ0tleSxcbiAgICB0cmFuc3BvcnQsXG4gICAgdmFsdWUsXG4gICAgdmF1bHRQYXRoXG4gIH0gPSBwYXJhbXM7XG5cbiAgY29uc3QgY2FwdHVyZWQgPSBhd2FpdCBldmFsSW5PYnNpZGlhbihub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8RXZhbEluT2JzaWRpYW5QYXJhbXM8V3JpdGVJbnB1dCwgQ2FwdHVyZWRWYWx1ZT4+KHtcbiAgICBjYWxsYmFjayh7XG4gICAgICBhcHAsXG4gICAgICBjb25maWdLZXk6IGtleSxcbiAgICAgIHZhbHVlOiBuZXdWYWx1ZVxuICAgIH0pOiBDYXB0dXJlZFZhbHVlIHtcbiAgICAgIC8vIGBjb25maWdgIGNhcnJpZXMgT05MWSB0aGUga2V5cyBjaGFuZ2VkIGZyb20gdGhlaXIgZGVmYXVsdCwgd2hpY2ggaXMgd2hhdFxuICAgICAgLy8gbWFrZXMgaXQgdGhlIHByZXNlbmNlIHNpZ25hbDsgYGdldENvbmZpZ2Agc3Vic3RpdHV0ZXMgdGhlIGRlZmF1bHQgYW5kIHNvXG4gICAgICAvLyBjYW5ub3QgdGVsbCBhbiB1bnNldCBrZXkgZnJvbSBvbmUgc2V0IHRvIHRoYXQgZGVmYXVsdC4gVGhlIHZhbHVlIGl0c2VsZlxuICAgICAgLy8gc3RpbGwgY29tZXMgZnJvbSBgZ2V0Q29uZmlnYCwgd2hpY2ggcmV0dXJucyB0aGUgc3RvcmVkIG9uZSB3aGVuZXZlclxuICAgICAgLy8gdGhlcmUgaXMgb25lIFx1MjAxNCBzbyB0aGUgcmVhZCBuZWVkcyBubyBjYXN0IG9mIHRoZSBjb25maWcgb2JqZWN0LlxuICAgICAgY29uc3QgaXNQcmVzZW50ID0gT2JqZWN0Lmhhc093bihhcHAudmF1bHQuY29uZmlnLCBrZXkpO1xuXG4gICAgICBjb25zdCBnZXRDb25maWcgPSBhcHAudmF1bHQuZ2V0Q29uZmlnLmJpbmQoYXBwLnZhdWx0KSBhcyAoY29uZmlnS2V5OiBzdHJpbmcpID0+IHVua25vd247XG4gICAgICBjb25zdCBwcmV2aW91c1ZhbHVlID0gaXNQcmVzZW50ID8gZ2V0Q29uZmlnKGtleSkgOiB1bmRlZmluZWQ7XG5cbiAgICAgIGNvbnN0IHNldENvbmZpZyA9IGFwcC52YXVsdC5zZXRDb25maWcuYmluZChhcHAudmF1bHQpIGFzIChjb25maWdLZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pID0+IHZvaWQ7XG4gICAgICBzZXRDb25maWcoa2V5LCBuZXdWYWx1ZSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzUHJlc2VudCxcbiAgICAgICAgdmFsdWU6IHByZXZpb3VzVmFsdWVcbiAgICAgIH07XG4gICAgfSxcbiAgICBpbnB1dDoge1xuICAgICAgY29uZmlnS2V5LFxuICAgICAgdmFsdWVcbiAgICB9LFxuICAgIHRyYW5zcG9ydCxcbiAgICB2YXVsdFBhdGhcbiAgfSkpO1xuXG4gIHJldHVybiBub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8QXBwQ29uZmlnUmVzdG9yZT4oe1xuICAgIGNvbmZpZ0tleSxcbiAgICBpc1ByZXNlbnQ6IGNhcHR1cmVkLmlzUHJlc2VudCxcbiAgICB0cmFuc3BvcnQsXG4gICAgdmFsdWU6IGNhcHR1cmVkLnZhbHVlLFxuICAgIHZhdWx0UGF0aFxuICB9KTtcbn1cblxuLyoqXG4gKiBSdW5zIHdvcmsgd2l0aCBhIHZhdWx0IGNvbmZpZyBrZXkgdGVtcG9yYXJpbHkgc2V0LCBhbmQgcHV0cyB0aGUga2V5IGJhY2tcbiAqIGFmdGVyd2FyZHMgXHUyMDE0IG9uIGEgdGhyb3cgYXMgbXVjaCBhcyBvbiBhIHJldHVybi5cbiAqXG4gKiBUaGUgc2hhcGUgYSBwb3BvdXQtc3ViamVjdCB0ZXN0IHdhbnRzOlxuICpcbiAqIGBgYHRzXG4gKiBhd2FpdCB3aXRoQXBwQ29uZmlnKHtcbiAqICAgYXN5bmMgY2FsbGJhY2soKSB7XG4gKiAgICAgYXdhaXQgZXZhbEluT2JzaWRpYW4oeyAuLi4gfSk7IC8vIHRoZSBzZXR0aW5ncyB3aW5kb3cgaXMgYSBwb3BvdXQgaW4gaGVyZVxuICogICB9LFxuICogICBjb25maWdLZXk6ICdzZXR0aW5nc1BvcG91dFdpbmRvdycsXG4gKiAgIHZhbHVlOiB0cnVlLFxuICogICB2YXVsdFBhdGhcbiAqIH0pO1xuICogYGBgXG4gKlxuICogVGhlIGNhbGxiYWNrIHJ1bnMgb24gdGhlICoqTm9kZSoqIHNpZGUsIHNvIGl0IGlzIGZyZWUgdG8gbWFrZSBzZXZlcmFsIGV2YWxzLFxuICogdGFrZSBhIHNjcmVlbnNob3QsIG9yIGFzc2VydCBiZXR3ZWVuIHRoZW0uXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gV2hhdCB0aGUgd3JhcHBlZCB3b3JrIHJldHVybnMuXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGtleSwgdGhlIHZhbHVlIHRvIGhvbGQgaXQgYXQsIHRoZSB3b3JrLCBhbmQgdHJhbnNwb3J0IC9cbiAqICAgdmF1bHQgb3ZlcnJpZGVzLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gcmVzb2x2aW5nIHRvIHdoYXRldmVyIHRoZSBjYWxsYmFjayByZXR1cm5lZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdpdGhBcHBDb25maWc8VD4ocGFyYW1zOiBXaXRoQXBwQ29uZmlnUGFyYW1zPFQ+KTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IHtcbiAgICBjYWxsYmFjayxcbiAgICBjb25maWdLZXksXG4gICAgdHJhbnNwb3J0LFxuICAgIHZhbHVlLFxuICAgIHZhdWx0UGF0aFxuICB9ID0gcGFyYW1zO1xuXG4gIGNvbnN0IHJlc3RvcmUgPSBhd2FpdCBzZXRBcHBDb25maWcobm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPFNldEFwcENvbmZpZ1BhcmFtcz4oe1xuICAgIGNvbmZpZ0tleSxcbiAgICB0cmFuc3BvcnQsXG4gICAgdmFsdWUsXG4gICAgdmF1bHRQYXRoXG4gIH0pKTtcblxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBjYWxsYmFjaygpO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IHJlc3RvcmVBcHBDb25maWcocmVzdG9yZSk7XG4gIH1cbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUEwREEsOEJBQStCO0FBQy9CLDJDQUE0QztBQWtJNUMsZUFBc0IsYUFBYSxRQUE4QztBQUMvRSxRQUFNO0FBQUEsSUFDSjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRixJQUFJO0FBRUosU0FBTyxVQUFNLDRDQUFlLGtFQUFzRTtBQUFBLElBQ2hHLFNBQVMsRUFBRSxLQUFLLFdBQVcsSUFBSSxHQUFZO0FBQ3pDLFlBQU0sWUFBWSxJQUFJLE1BQU0sVUFBVSxLQUFLLElBQUksS0FBSztBQUNwRCxhQUFPLFVBQVUsR0FBRztBQUFBLElBQ3RCO0FBQUEsSUFDQSxPQUFPLEVBQUUsVUFBVTtBQUFBLElBQ25CO0FBQUEsSUFDQTtBQUFBLEVBQ0YsQ0FBQyxDQUFDO0FBQ0o7QUFhQSxlQUFzQixpQkFBaUIsU0FBMEM7QUFDL0UsUUFBTTtBQUFBLElBQ0o7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRixJQUFJO0FBRUosWUFBTSw0Q0FBZSxrRUFBMkU7QUFBQSxJQUM5RixTQUFTO0FBQUEsTUFDUDtBQUFBLE1BQ0EsV0FBVztBQUFBLE1BQ1gsV0FBVztBQUFBLE1BQ1gsT0FBTztBQUFBLElBQ1QsR0FBYztBQUNaLFlBQU0sWUFBWSxJQUFJLE1BQU0sVUFBVSxLQUFLLElBQUksS0FBSztBQUlwRCxnQkFBVSxLQUFLLGFBQWEsZ0JBQWdCLE1BQVM7QUFBQSxJQUN2RDtBQUFBLElBQ0EsT0FBTztBQUFBLE1BQ0w7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0Y7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0YsQ0FBQyxDQUFDO0FBQ0o7QUFnQkEsZUFBc0IsYUFBYSxRQUF1RDtBQUN4RixRQUFNO0FBQUEsSUFDSjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0YsSUFBSTtBQUVKLFFBQU0sV0FBVyxVQUFNLDRDQUFlLGtFQUE2RTtBQUFBLElBQ2pILFNBQVM7QUFBQSxNQUNQO0FBQUEsTUFDQSxXQUFXO0FBQUEsTUFDWCxPQUFPO0FBQUEsSUFDVCxHQUFrQjtBQU1oQixZQUFNLFlBQVksT0FBTyxPQUFPLElBQUksTUFBTSxRQUFRLEdBQUc7QUFFckQsWUFBTSxZQUFZLElBQUksTUFBTSxVQUFVLEtBQUssSUFBSSxLQUFLO0FBQ3BELFlBQU0sZ0JBQWdCLFlBQVksVUFBVSxHQUFHLElBQUk7QUFFbkQsWUFBTSxZQUFZLElBQUksTUFBTSxVQUFVLEtBQUssSUFBSSxLQUFLO0FBQ3BELGdCQUFVLEtBQUssUUFBUTtBQUV2QixhQUFPO0FBQUEsUUFDTDtBQUFBLFFBQ0EsT0FBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBQUEsSUFDQSxPQUFPO0FBQUEsTUFDTDtBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGLENBQUMsQ0FBQztBQUVGLGFBQU8sa0VBQThDO0FBQUEsSUFDbkQ7QUFBQSxJQUNBLFdBQVcsU0FBUztBQUFBLElBQ3BCO0FBQUEsSUFDQSxPQUFPLFNBQVM7QUFBQSxJQUNoQjtBQUFBLEVBQ0YsQ0FBQztBQUNIO0FBMkJBLGVBQXNCLGNBQWlCLFFBQTRDO0FBQ2pGLFFBQU07QUFBQSxJQUNKO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0YsSUFBSTtBQUVKLFFBQU0sVUFBVSxNQUFNLGlCQUFhLGtFQUFnRDtBQUFBLElBQ2pGO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRixDQUFDLENBQUM7QUFFRixNQUFJO0FBQ0YsV0FBTyxNQUFNLFNBQVM7QUFBQSxFQUN4QixVQUFFO0FBQ0EsVUFBTSxpQkFBaUIsT0FBTztBQUFBLEVBQ2hDO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -48,28 +48,6 @@
48
48
  * `Object.hasOwn` on it is the signal a restore needs.
49
49
  */
50
50
  import type { ObsidianTransport } from './transport.cjs';
51
- /**
52
- * Parameters for {@link getAppConfig}, and the shared shape of the writers below.
53
- */
54
- export interface AppConfigParams {
55
- /**
56
- * The vault config key, e.g. `settingsPopoutWindow`. Not narrowed to
57
- * `obsidian-typings`' `ConfigItem`: that union omits keys Obsidian really
58
- * reads, `settingsPopoutWindow` among them, which is the whole reason a
59
- * consumer had to widen the setter by hand.
60
- */
61
- readonly configKey: string;
62
- /**
63
- * Override the transport. When omitted, the transport the current test
64
- * context is driving is used.
65
- */
66
- readonly transport?: ObsidianTransport;
67
- /**
68
- * The vault whose Obsidian instance to read or write. When omitted, the
69
- * current test context's vault is used.
70
- */
71
- readonly vaultPath?: string;
72
- }
73
51
  /**
74
52
  * What {@link setAppConfig} captured before it wrote, and all
75
53
  * {@link restoreAppConfig} needs to put the key back exactly as it was —
@@ -101,10 +79,32 @@ export interface AppConfigRestore {
101
79
  */
102
80
  readonly vaultPath?: string;
103
81
  }
82
+ /**
83
+ * Parameters for {@link getAppConfig}, and the shared shape of the writers below.
84
+ */
85
+ export interface GetAppConfigParams {
86
+ /**
87
+ * The vault config key, e.g. `settingsPopoutWindow`. Not narrowed to
88
+ * `obsidian-typings`' `ConfigItem`: that union omits keys Obsidian really
89
+ * reads, `settingsPopoutWindow` among them, which is the whole reason a
90
+ * consumer had to widen the setter by hand.
91
+ */
92
+ readonly configKey: string;
93
+ /**
94
+ * Override the transport. When omitted, the transport the current test
95
+ * context is driving is used.
96
+ */
97
+ readonly transport?: ObsidianTransport;
98
+ /**
99
+ * The vault whose Obsidian instance to read or write. When omitted, the
100
+ * current test context's vault is used.
101
+ */
102
+ readonly vaultPath?: string;
103
+ }
104
104
  /**
105
105
  * Parameters for {@link setAppConfig}.
106
106
  */
107
- export interface SetAppConfigParams extends AppConfigParams {
107
+ export interface SetAppConfigParams extends GetAppConfigParams {
108
108
  /**
109
109
  * The value to write. `undefined` deletes the key, leaving Obsidian's own
110
110
  * default in force.
@@ -120,7 +120,7 @@ export interface WithAppConfigParams<T> extends SetAppConfigParams {
120
120
  /**
121
121
  * The work to run while the key holds {@link SetAppConfigParams.value}.
122
122
  */
123
- callback(this: void): Promise<T>;
123
+ readonly callback: (this: void) => Promise<T>;
124
124
  }
125
125
  /**
126
126
  * Reads a vault config key, resolving the transport and vault from the current
@@ -134,7 +134,7 @@ export interface WithAppConfigParams<T> extends SetAppConfigParams {
134
134
  * @param params - The key to read, and transport / vault overrides.
135
135
  * @returns A {@link Promise} resolving to the key's effective value.
136
136
  */
137
- export declare function getAppConfig(params: AppConfigParams): Promise<unknown>;
137
+ export declare function getAppConfig(params: GetAppConfigParams): Promise<unknown>;
138
138
  /**
139
139
  * Puts a key back exactly as {@link setAppConfig} found it — writing the captured
140
140
  * value back, or **deleting** the key when the vault had never carried it.
@@ -132,4 +132,4 @@ async function sweepLeftovers(transportOptions) {
132
132
  0 && (module.exports = {
133
133
  connectToCdp
134
134
  });
135
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Nvbm5lY3QtdG8tY2RwLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogUHJvZ3JhbW1hdGljIGhlbHBlciB0byBsYXVuY2ggKG9yIGF0dGFjaCB0bykgYSBDRFAtZW5hYmxlZCBPYnNpZGlhbiBpbnN0YW5jZVxuICogd2l0aCB0aGUgcnVudGltZSBoZWxwZXIgbmFtZXNwYWNlIGJvb3RzdHJhcHBlZCwgZm9yIGFkLWhvYyByZWFsLWFwcCBkZWJ1Z2dpbmcuXG4gKlxuICogQSBzaW5nbGUge0BsaW5rIGNvbm5lY3RUb0NkcH0gY2FsbCByZXNvbHZlcyB0aGUgb3duZWQtaW5zdGFuY2UgY29uZmlnLCBvcGVucyBhXG4gKiB2YXVsdCwgYW5kIGJvb3RzdHJhcHMgYHdpbmRvdy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nYCAoc28gYGV2YWxXcmFwcGVyYCxcbiAqIHRoZSBiYXNlIGBsaWJgIGhlbHBlcnMsIGBlcnJvclRvU3RyaW5nYCwgYGdldE9ic2lkaWFuTW9kdWxlYCwgXHUyMDI2IGFyZSBhdmFpbGFibGUpLCB0aGVuXG4gKiBoYW5kcyBiYWNrIGEgZGlzcG9zYWJsZSB7QGxpbmsgQ2RwQ29ubmVjdGlvbn0gZXhwb3NpbmcgdGhlIGNob3NlbiBDRFAgcG9ydCwgYVxuICogcmF3IHtAbGluayBDZHBDb25uZWN0aW9uLmludm9rZX0gYW5kIHRoZSByaWNoIHtAbGluayBDZHBDb25uZWN0aW9uLmV2YWxJbk9ic2lkaWFufS5cbiAqL1xuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gSW50ZWdyYXRpb24tdGltZSBjb2RlIChsYXVuY2hlcyBPYnNpZGlhbiAvIENEUCkgY292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB0eXBlIHsgRXhjZXB0IH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHR5cGUgeyBBc2FyRmFsbGJhY2sgfSBmcm9tICcuL2FzYXItZmFsbGJhY2stZGV0ZWN0aW9uLmNqcyc7XG5pbXBvcnQgdHlwZSB7IENhcHR1cmVTY3JlZW5zaG90UGFyYW1zIH0gZnJvbSAnLi9jYXB0dXJlLXNjcmVlbnNob3QuY2pzJztcbmltcG9ydCB0eXBlIHsgQ29udGV4dElkIH0gZnJvbSAnLi9jb250ZXh0LWlkLmNqcyc7XG5pbXBvcnQgdHlwZSB7IEVsZWN0cm9uQ29tcGF0aWJpbGl0eSB9IGZyb20gJy4vZWxlY3Ryb24tY29tcGF0aWJpbGl0eS5janMnO1xuaW1wb3J0IHR5cGUge1xuICBFdmFsSW5PYnNpZGlhblBhcmFtcyxcbiAgR2VuZXJpY09iamVjdFxufSBmcm9tICcuL2V2YWwtaW4tb2JzaWRpYW4uY2pzJztcbmltcG9ydCB0eXBlIHsgSW5zdGFsbGVyQ29tcGF0aWJpbGl0eSB9IGZyb20gJy4vaW5zdGFsbGVyLWNvbXBhdGliaWxpdHkuY2pzJztcbmltcG9ydCB0eXBlIHsgT2JzaWRpYW5DZHBUcmFuc3BvcnRPcHRpb25zIH0gZnJvbSAnLi90cmFuc3BvcnQtb3B0aW9ucy5janMnO1xuXG5pbXBvcnQgeyBldmFsSW5PYnNpZGlhbiB9IGZyb20gJy4vZXZhbC1pbi1vYnNpZGlhbi5janMnO1xuaW1wb3J0IHsgZW5zdXJlSGVhZGxlc3NWYXVsdENvbmZpZyB9IGZyb20gJy4vaGVhZGxlc3MtdmF1bHQtY29uZmlnLmNqcyc7XG5pbXBvcnQge1xuICByZXNvbHZlTGVmdG92ZXJNYXhBZ2VJbk1pbGxpc2Vjb25kcyxcbiAgc3dlZXBIb3N0TGVmdG92ZXJzLFxuICB3aWxsU3dlZXBMZWZ0b3ZlcnNcbn0gZnJvbSAnLi9sZWZ0b3Zlci1jbGVhbnVwLmNqcyc7XG5pbXBvcnQgeyBsb2cgfSBmcm9tICcuL2xvZy5janMnO1xuaW1wb3J0IHsgbm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzIH0gZnJvbSAnLi9ub3JtYWxpemUtb3B0aW9uYWwtcHJvcGVydGllcy5janMnO1xuaW1wb3J0IHsgVGVtcG9yYXJ5VmF1bHQgfSBmcm9tICcuL3RlbXBvcmFyeS12YXVsdC5janMnO1xuaW1wb3J0IHsgRGVza3RvcENkcFRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LWRlc2t0b3AtY2RwLmNqcyc7XG5pbXBvcnQgeyBjcmVhdGVUcmFuc3BvcnRGcm9tT3B0aW9ucyB9IGZyb20gJy4vdHJhbnNwb3J0LWZhY3RvcnkuY2pzJztcbmltcG9ydCB7IHJlc29sdmVPd25lZENvbmZpZ0RpcmVjdG9yeSB9IGZyb20gJy4vdHJhbnNwb3J0LW9wdGlvbnMuY2pzJztcblxuY29uc3QgREVGQVVMVF9DRFBfSE9TVCA9ICdsb2NhbGhvc3QnO1xuXG4vKipcbiAqIEEgbGl2ZSBjb25uZWN0aW9uIHRvIGEgQ0RQLWVuYWJsZWQgT2JzaWRpYW4gaW5zdGFuY2Ugd2l0aCB0aGUgcnVudGltZSBoZWxwZXJcbiAqIG5hbWVzcGFjZSBib290c3RyYXBwZWQuXG4gKlxuICogSW1wbGVtZW50cyBgQXN5bmNEaXNwb3NhYmxlYCwgc28gYGF3YWl0IHVzaW5nIGNvbm4gPSBhd2FpdCBjb25uZWN0VG9DZHAoXHUyMDI2KWBcbiAqIGRpc3Bvc2VzIGl0IChraWxsaW5nIGFuIG93bmVkIGluc3RhbmNlIGFuZCBcdTIwMTQgZm9yIGEgdGhyb3ctYXdheSB0ZW1wIHZhdWx0IFx1MjAxNFxuICogcmVtb3ZpbmcgaXRzIGRpcmVjdG9yeSkgYXV0b21hdGljYWxseS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDZHBDb25uZWN0aW9uIGV4dGVuZHMgQXN5bmNEaXNwb3NhYmxlIHtcbiAgLyoqXG4gICAqIFRoZSBzaWxlbnQtYXNhci1mYWxsYmFjayB2ZXJkaWN0IGZvciBhbiBvd25lZCBpbnN0YW5jZSwgcmVhZCBsaXZlIGFmdGVyIGJvb3Q6XG4gICAqIHdoZXRoZXIgdGhlIGFwcCB2ZXJzaW9uIGl0IGlzIGFjdHVhbGx5IHJ1bm5pbmcgbWF0Y2hlcyB0aGUgc3dhcHBlZC1pbiBwaW4sIG9yXG4gICAqIHRoZSBpbnN0YWxsZXIgc2lsZW50bHkgcmV2ZXJ0ZWQgdG8gaXRzIG93biBidW5kbGVkIGFzYXIuIGB1bmRlZmluZWRgIGluIGF0dGFjaFxuICAgKiBtb2RlLCB3aGVuIG5vIGFzYXIgd2FzIHN3YXBwZWQsIG9yIHdoZW4gdGhlIHJ1bm5pbmcgdmVyc2lvbiB3YXMgdW5yZWFkYWJsZS4gQVxuICAgKiBgJ2ZhbGxiYWNrJ2AgdmVyZGljdCByZWFjaGVzIGhlcmUgb25seSB3aGVuIHRoZSB0aHJvdyBpcyBkaXNhYmxlZFxuICAgKiAoe0BsaW5rIENvbm5lY3RUb0NkcE9wdGlvbnMuc2hvdWxkVGhyb3dPblNpbGVudEFzYXJGYWxsYmFja30gYGZhbHNlYCk7XG4gICAqIG90aGVyd2lzZSBpdCB0aHJvd3MgYFNpbGVudEFzYXJGYWxsYmFja0Vycm9yYCBiZWZvcmUgdGhlIGNvbm5lY3Rpb24gaXMgY3JlYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGFzYXJGYWxsYmFjaz86IEFzYXJGYWxsYmFjayB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQ2FwdHVyZXMgYSBQTkcgc2NyZWVuc2hvdCBvZiB0aGlzIGNvbm5lY3Rpb24ncyBPYnNpZGlhbiB3aW5kb3csIHdpdGggdGhlXG4gICAqIHZhdWx0IHBhdGggcHJlLWJvdW5kLlxuICAgKlxuICAgKiBQYXNzIGB3aWR0aEluUGl4ZWxzYCArIGBoZWlnaHRJblBpeGVsc2AgdG8gcGluIHRoZSB2aWV3cG9ydCBmb3IgdGhlIGR1cmF0aW9uXG4gICAqIG9mIHRoZSBjYXB0dXJlLCBzbyB0aGUgZW1pdHRlZCBQTkcgaXMgZXhhY3RseSB0aGF0IHNpemUgd2hhdGV2ZXIgc2l6ZSB0aGVcbiAgICogd2luZG93IGhhcHBlbnMgdG8gYmUuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZXhhY3Qgc2l6ZSB0byBjYXB0dXJlIGF0LiBPbWl0IHRvIGNhcHR1cmUgdGhlIHdpbmRvdyBhdCBpdHMgbmF0dXJhbCBzaXplLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSByYXcgUE5HIGJ5dGVzLlxuICAgKi9cbiAgY2FwdHVyZVNjcmVlbnNob3QocGFyYW1zPzogRXhjZXB0PENhcHR1cmVTY3JlZW5zaG90UGFyYW1zLCAnY3dkJz4pOiBQcm9taXNlPFVpbnQ4QXJyYXk+O1xuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBDRFAgVVJMLCBlLmcuIGBodHRwOi8vbG9jYWxob3N0OjUxODg4YC5cbiAgICovXG4gIHJlYWRvbmx5IGNkcFVybDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVzb2x2ZWQgaW5zdGFsbGVyXHUyMTk0YXBwIGNvbXBhdGliaWxpdHkgdmVyZGljdCBmb3IgYW4gb3duZWQgaW5zdGFuY2UsIHdoZW5cbiAgICogaXQgY291bGQgYmUgZGV0ZXJtaW5lZC4gYHVuZGVmaW5lZGAgaW4gYXR0YWNoIG1vZGUsIG9yIHdoZW4gdGhlIHZlcmRpY3QgaXNcbiAgICogdW5rbm93biAodW5kZXRlY3RhYmxlIHNoZWxsIHZlcnNpb24sIG9yIHRoZSBhcHAgdmVyc2lvbiBpcyBhYnNlbnQgZnJvbSB0aGVcbiAgICogdGFibGUpLiBBbiBgJ3VucnVubmFibGUnYCB2ZXJkaWN0IHJlYWNoZXMgaGVyZSBvbmx5IHdoZW4gdGhlIHByb2FjdGl2ZSB0aHJvd1xuICAgKiBpcyBkaXNhYmxlZCAoe0BsaW5rIENvbm5lY3RUb0NkcE9wdGlvbnMuc2hvdWxkVGhyb3dPbkluY29tcGF0aWJsZUluc3RhbGxlcn1cbiAgICogYGZhbHNlYCk7IG90aGVyd2lzZSBpdCB0aHJvd3MgYEluY29tcGF0aWJsZUluc3RhbGxlclZlcnNpb25FcnJvcmAgYmVmb3JlIHRoZVxuICAgKiBjb25uZWN0aW9uIGlzIGNyZWF0ZWQuXG4gICAqL1xuICByZWFkb25seSBjb21wYXRpYmlsaXR5PzogSW5zdGFsbGVyQ29tcGF0aWJpbGl0eSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogRGlzcG9zZXMgdGhlIGNvbm5lY3Rpb246IGtpbGxzIGFuIG93bmVkIGluc3RhbmNlIGFuZCByZW1vdmVzIGl0cyBpc29sYXRlZFxuICAgKiB1c2VyLWRhdGEgZGlyLiBUaGUgdmF1bHQgZGlyZWN0b3J5IGlzIHJlbW92ZWQgb25seSB3aGVuIGl0IGlzIGEgdGhyb3ctYXdheVxuICAgKiB0ZW1wIHZhdWx0IChzZWUge0BsaW5rIENvbm5lY3RUb0NkcE9wdGlvbnMuc2hvdWxkUmVtb3ZlVmF1bHRPbkRpc3Bvc2V9KTsgYVxuICAgKiByZWFsIHZhdWx0IHBhc3NlZCB2aWEge0BsaW5rIENvbm5lY3RUb0NkcE9wdGlvbnMudmF1bHR9IGlzIG5ldmVyIGRlbGV0ZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSBkaXNwb3NhbCBjb21wbGV0ZXMuXG4gICAqL1xuICBkaXNwb3NlKCk6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIFRoZSBydW50aW1lIEVsZWN0cm9uIGNvbXBhdGliaWxpdHkgdmVyZGljdCBmb3IgYW4gb3duZWQgaW5zdGFuY2UsIHJlYWQgbGl2ZVxuICAgKiBhZnRlciBib290OiB3aGV0aGVyIHRoZSBFbGVjdHJvbiB2ZXJzaW9uIGl0IGlzIGFjdHVhbGx5IHJ1bm5pbmcgaXMgbmV3IGVub3VnaFxuICAgKiBmb3IgdGhlIHJ1bm5pbmcgYXBwIHZlcnNpb24uIGB1bmRlZmluZWRgIGluIGF0dGFjaCBtb2RlLCBvciB3aGVuIHRoZSB2ZXJkaWN0XG4gICAqIGlzIHVua25vd24gKHRoZSBsaXZlIHZlcnNpb24gd2FzIHVucmVhZGFibGUsIG9yIHRoZSBhcHAgdmVyc2lvbiBjYXJyaWVzIG5vXG4gICAqIHJlY29tbWVuZGVkIEVsZWN0cm9uIHZlcnNpb24pLiBBbiBvbGQgRWxlY3Ryb24gbmV2ZXIgYmxvY2tzIFx1MjAxNCBpdCBvbmx5IHdhcm5zIFx1MjAxNFxuICAgKiBzbyB1bmxpa2Uge0BsaW5rIGNvbXBhdGliaWxpdHl9IHRoZXJlIGlzIG5vIHRocm93aW5nIHRpZXIuXG4gICAqL1xuICByZWFkb25seSBlbGVjdHJvbkNvbXBhdGliaWxpdHk/OiBFbGVjdHJvbkNvbXBhdGliaWxpdHkgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEV2YWx1YXRlcyBhIHNlbGYtY29udGFpbmVkIGZ1bmN0aW9uIGluc2lkZSBPYnNpZGlhbiB2aWEgdGhlIHJpY2ggaGVscGVyXG4gICAqIHBhdGgsIHJlY2VpdmluZyBgeyBhcHAsIGxpYiwgb2JzaWRpYW5Nb2R1bGUsIGNvbnRleHQgfWAgcGx1cyBhbnkgYGlucHV0YFxuICAgKiAoc2hhcmVkIGhlbHBlcnMgbGlrZSBgdHlwZUludG9FZGl0b3JgIC8gYHdhaXRVbnRpbGAgbGl2ZSBvbiBgbGliYCkuIE1pcnJvcnNcbiAgICogdGhlIHRvcC1sZXZlbCBgZXZhbEluT2JzaWRpYW5gLCB3aXRoIHRoZSB0cmFuc3BvcnQgYW5kIHZhdWx0IHBhdGggcHJlLWJvdW5kXG4gICAqIHRvIHRoaXMgY29ubmVjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBldmFsdWF0aW9uIHBhcmFtZXRlcnMgKGBjYWxsYmFja2AsIG9wdGlvbmFsIGBpbnB1dGAvYGNvbnRleHRJZGApLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSByZXR1cm4gdmFsdWUgb2YgYGNhbGxiYWNrYC5cbiAgICovXG4gIGV2YWxJbk9ic2lkaWFuPElucHV0IGV4dGVuZHMgR2VuZXJpY09iamVjdCwgUmVzdWx0LCBUQ29udGV4dElkIGV4dGVuZHMgQ29udGV4dElkPHVua25vd24+IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkPihcbiAgICBwYXJhbXM6IEV4Y2VwdDxFdmFsSW5PYnNpZGlhblBhcmFtczxJbnB1dCwgUmVzdWx0LCBUQ29udGV4dElkPiwgJ3RyYW5zcG9ydCcgfCAndmF1bHRQYXRoJz5cbiAgKTogUHJvbWlzZTxSZXN1bHQ+O1xuXG4gIC8qKlxuICAgKiBFdmFsdWF0ZXMgYSByYXcgSmF2YVNjcmlwdCBleHByZXNzaW9uIGluc2lkZSBPYnNpZGlhbiBhbmQgcmV0dXJucyB0aGVcbiAgICogbm9ybWFsaXplZCBzdHJpbmcgcmVzdWx0IChlLmcuIGAnNSdgLCBhIEpTT04gc3RyaW5nLCBvciBgJyhubyBvdXRwdXQpJ2ApLlxuICAgKlxuICAgKiBAcGFyYW0gZXhwcmVzc2lvbiAtIEEgc2VsZi1jb250YWluZWQgSmF2YVNjcmlwdCBleHByZXNzaW9uLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSByYXcgcmVzdWx0IHN0cmluZy5cbiAgICovXG4gIGludm9rZShleHByZXNzaW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFRoZSBDRFAgcG9ydCB0aGUgaW5zdGFuY2UgaXMgcmVhY2hhYmxlIG9uICh0aGUgZnJlZSBwb3J0IGNob3NlbiBmb3IgYW5cbiAgICogb3duZWQgaW5zdGFuY2UsIG9yIHRoZSBhdHRhY2hlZCB7QGxpbmsgQ29ubmVjdFRvQ2RwT3B0aW9ucy5wb3J0fSkuXG4gICAqL1xuICByZWFkb25seSBwb3J0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBvcGVuZWQgdmF1bHQuIEV4cG9zZXMgYHBhdGhgIGFuZCBgcG9wdWxhdGUoLi4uKWAgZm9yIHNlZWRpbmcgZmlsZXMuXG4gICAqL1xuICByZWFkb25seSB2YXVsdDogVGVtcG9yYXJ5VmF1bHQ7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIGNvbm5lY3RUb0NkcH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdFRvQ2RwT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaW1lb3V0IGluIG1pbGxpc2Vjb25kcyBmb3IgaW5kaXZpZHVhbCBDRFAgY29tbWFuZHMuXG4gICAqXG4gICAqIEEgdGVzdCdzIGNsb3N1cmUgdHJhdmVscyBhcyBvbmUgYFJ1bnRpbWUuZXZhbHVhdGVgIGNvbW1hbmQsIHNvIHRoaXMgaXMgYWxzb1xuICAgKiB0aGUgZGVza3RvcCBwZXItZXZhbCBjYXAuIFRoZSBkZWZhdWx0IGlzIGBERUZBVUxUX0VWQUxfQ0FQX0lOX01JTExJU0VDT05EU2AsXG4gICAqIGV4cG9ydGVkIGZyb20gdGhlIHBhY2thZ2Ugcm9vdCBcdTIwMTQgaW1wb3J0IGl0IHJhdGhlciB0aGFuIHJlc3RhdGluZyB0aGUgbnVtYmVyLFxuICAgKiBzbyBhIGNsb3N1cmUgc2l6ZWQgYWdhaW5zdCB0aGUgY2FwIGZvbGxvd3MgaXQgaWYgaXQgZXZlciBtb3Zlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgYDMwMDAwYFxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWFuZFRpbWVvdXRJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHZhdWx0J3MgKipjb25maWcgZm9sZGVyKiogXHUyMDE0IE9ic2lkaWFuJ3MgcGVyLXZhdWx0ICpPdmVycmlkZSBjb25maWdcbiAgICogZm9sZGVyKiBzZXR0aW5nLCBlLmcuIGAnLm9ic2lkaWFuLWRlc2t0b3AnYC4gU2V0IGl0IHRvIG9wZW4gYSB2YXVsdCB0aGF0XG4gICAqIGtlZXBzIGl0cyBzZXR0aW5ncyBzb21ld2hlcmUgb3RoZXIgdGhhbiBgLm9ic2lkaWFuYDsgd2l0aG91dCBpdCBzdWNoIGEgdmF1bHRcbiAgICogb3BlbnMgYWdhaW5zdCBgLm9ic2lkaWFuYCwgd2hpY2ggZm9yIGEgdmF1bHQgdGhhdCBoYXMgYSBzdGFsZSBvbmUgYmVzaWRlIHRoZVxuICAgKiByZWFsIGZvbGRlciBtZWFucyBvcGVuaW5nIHN1Y2Nlc3NmdWxseSBhZ2FpbnN0IHRoZSB3cm9uZyBzZXR0aW5ncy5cbiAgICpcbiAgICogTXVzdCBzdGFydCB3aXRoIGEgZG90LCBtdXN0IG5vdCBiZSB0aGUgYmFyZSBkb3QsIGFuZCBtdXN0IG5vdCBjb250YWluIGEgcGF0aFxuICAgKiBzZXBhcmF0b3IgXHUyMDE0IGFueXRoaW5nIGVsc2UgdGhyb3dzIGJlZm9yZSBPYnNpZGlhbiBsYXVuY2hlcywgc2luY2UgT2JzaWRpYW5cbiAgICogd291bGQgc2lsZW50bHkgc3Vic3RpdHV0ZSBgLm9ic2lkaWFuYC4gQWZ0ZXIgdGhlIHZhdWx0IG9wZW5zLCBpdHMgYWN0dWFsXG4gICAqIGBhcHAudmF1bHQuY29uZmlnRGlyYCBpcyByZWFkIGJhY2sgYW5kIGEgbWlzbWF0Y2ggdGhyb3dzXG4gICAqIGBDb25maWdEaXJlY3RvcnlGYWxsYmFja0Vycm9yYC5cbiAgICpcbiAgICogSWdub3JlZCBpbiBhdHRhY2ggbW9kZSAoe0BsaW5rIENvbm5lY3RUb0NkcE9wdGlvbnMucG9ydH0gc2V0KSwgd2hlcmUgdGhlXG4gICAqIHZhdWx0IGlzIG9wZW5lZCBieSB0aGUgdXNlcidzIG93biBPYnNpZGlhbiB1bmRlciBpdHMgb3duIGNvbmZpZy5cbiAgICpcbiAgICogQGRlZmF1bHQgYHVuZGVmaW5lZGAgKE9ic2lkaWFuJ3Mgb3duIGRlZmF1bHQsIGAub2JzaWRpYW5gKVxuICAgKi9cbiAgcmVhZG9ubHkgY29uZmlnRGlyZWN0b3J5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHcmFjZSB3aW5kb3cgaW4gbWlsbGlzZWNvbmRzIGZvciBmYXN0LWZhaWxpbmcgYSBkZWFkIGJvb3Qgb2YgdGhlIG93bmVkXG4gICAqIGluc3RhbmNlIFx1MjAxNCB0aGUgcmVuZGVyZXIgbG9hZGVkIGJ1dCB0aGUgYXBwIG5ldmVyIGJvb3RzdHJhcHBlZCAoZW1wdHlcbiAgICogYDxib2R5PmAsIG5vIGB3aW5kb3cuYXBwYCksIHRoZSB0ZXJtaW5hbCBzdGF0ZSB3aGVuIHRoZSBhc2FyIGNhbm5vdCBydW4gb25cbiAgICogdGhlIGxhdW5jaGVkIEVsZWN0cm9uIHNoZWxsLiBPbmNlIGl0IGhhcyBoZWxkIHRoaXMgbG9uZyBhXG4gICAqIGBSZW5kZXJlckZhaWxlZFRvSW5pdGlhbGl6ZUVycm9yYCBpcyB0aHJvd24gaW5zdGVhZCBvZiB3YWl0aW5nIG91dCB0aGUgZnVsbFxuICAgKiByZWFkaW5lc3MgdGltZW91dC4gSWdub3JlZCBpbiBhdHRhY2ggbW9kZSAoe0BsaW5rIHBvcnR9IHNldCkuIFNldCBgMGAgdG9cbiAgICogZGlzYWJsZSBmYXN0LWZhaWwuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAxMDAwMGBcbiAgICovXG4gIHJlYWRvbmx5IGRlYWRCb290R3JhY2VJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogQ0RQIGhvc3QuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAnbG9jYWxob3N0J2BcbiAgICovXG4gIHJlYWRvbmx5IGhvc3Q/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIE9ic2lkaWFuIHdpbmRvdyBpcyBzaG93biBvbiBzY3JlZW4uIERlZmF1bHRzIHRvIGB0cnVlYDsgc2V0XG4gICAqIGBmYWxzZWAgdG8gbGF1bmNoIGl0IG9mZi1zY3JlZW4uXG4gICAqIElnbm9yZWQgaW4gYXR0YWNoIG1vZGUgKHtAbGluayBwb3J0fSBzZXQpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IGlzT2JzaWRpYW5BcHBWaXNpYmxlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUGlucyB0aGUgRWxlY3Ryb24gc2hlbGwgKGluc3RhbGxlciBidWlsZCkgdGhlIG93bmVkIGluc3RhbmNlIHJ1bnMuIEFjY2VwdHNcbiAgICogYCd4LnkueidgLCBgJ3B1YmxpYy1sYXRlc3QnYCwgb3IgYCdjYXRhbHlzdC1sYXRlc3QnYC4gSWdub3JlZCB3aGVuXG4gICAqIHtAbGluayBwb3J0fSAoYXR0YWNoIG1vZGUpIGlzIHNldC4gV2hlbiBvbWl0dGVkLCB0aGUgaW5zdGFsbGVkIHNoZWxsIGlzIHVzZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB1bmRlZmluZWRgXG4gICAqL1xuICByZWFkb25seSBvYnNpZGlhbkluc3RhbGxlclZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBpbnMgdGhlIE9ic2lkaWFuIGFwcCB2ZXJzaW9uIChhc2FyKSB0aGUgb3duZWQgaW5zdGFuY2UgcnVucy4gQWNjZXB0c1xuICAgKiBgJ3gueS56J2AsIGAncHVibGljLWxhdGVzdCdgLCBvciBgJ2NhdGFseXN0LWxhdGVzdCdgLiBJZ25vcmVkIHdoZW5cbiAgICoge0BsaW5rIHBvcnR9IChhdHRhY2ggbW9kZSkgaXMgc2V0LiBXaGVuIG9taXR0ZWQsIHRoZSBpbnN0YWxsZWQgdmVyc2lvbiBpcyB1c2VkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdW5kZWZpbmVkYFxuICAgKi9cbiAgcmVhZG9ubHkgb2JzaWRpYW5WZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDRFAgcG9ydCBvZiBhbiBhbHJlYWR5LXJ1bm5pbmcgT2JzaWRpYW4gdG8gKiphdHRhY2gqKiB0by4gV2hlbiBvbWl0dGVkLCBhblxuICAgKiBpc29sYXRlZCBpbnN0YW5jZSBpcyBsYXVuY2hlZCBvbiBhbiBhdXRvbWF0aWNhbGx5IGNob3NlbiBmcmVlIHBvcnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB1bmRlZmluZWRgXG4gICAqL1xuICByZWFkb25seSBwb3J0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGxhdW5jaCB0aGUgb3duZWQgaW5zdGFuY2Ugd2l0aCBDaHJvbWl1bSdzIHNhbmRib3ggZGlzYWJsZWRcbiAgICogKGAtLW5vLXNhbmRib3hgKS5cbiAgICpcbiAgICogTmVlZGVkIHRvIGJvb3Qgb24gTGludXggd2l0aG91dCBhIGNvcnJlY3RseS1jb25maWd1cmVkIHNldHVpZFxuICAgKiBgY2hyb21lLXNhbmRib3hgIGhlbHBlciAoZS5nLiBhbiBpbnN0YWxsZXItZXh0cmFjdGVkIHBvcnRhYmxlIHNoZWxsLCBvciBDSVxuICAgKiBydW5uaW5nIGFzIGEgbm9uLXJvb3QgdXNlcik7IGhhcm1sZXNzIG9uIFdpbmRvd3MvbWFjT1MuIElnbm9yZWQgaW4gYXR0YWNoXG4gICAqIG1vZGUgKHtAbGluayBwb3J0fSBzZXQpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGREaXNhYmxlU2FuZGJveD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmVtb3ZlIHRoZSB2YXVsdCBkaXJlY3Rvcnkgb24ge0BsaW5rIENkcENvbm5lY3Rpb24uZGlzcG9zZX0uXG4gICAqXG4gICAqIFdoZW4gb21pdHRlZCwgZGVmYXVsdHMgdG8gYHRydWVgIGZvciBhbiBpbXBsaWNpdCB0aHJvdy1hd2F5IHRlbXAgdmF1bHRcbiAgICogKHtAbGluayB2YXVsdH0gbm90IGdpdmVuKSBhbmQgYGZhbHNlYCB3aGVuIGEge0BsaW5rIHZhdWx0fSBwYXRoIGlzIGdpdmVuLCBzb1xuICAgKiBhIHJlYWwgdmF1bHQgaXMgbmV2ZXIgZGVsZXRlZC4gU2V0IGV4cGxpY2l0bHkgdG8gb3ZlcnJpZGUuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRSZW1vdmVWYXVsdE9uRGlzcG9zZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYW4gKip1bnJ1bm5hYmxlKiogaW5zdGFsbGVyXHUyMTk0YXBwIHZlcnNpb24gcGFpciBmYWlscyBmYXN0IGJlZm9yZSBsYXVuY2guXG4gICAqXG4gICAqIFdoZW4gYHRydWVgICh0aGUgZGVmYXVsdCksIGFuIGluc3RhbGxlciBiZWxvdyB0aGUgYXBwJ3MgcnVuIGZsb29yIHRocm93c1xuICAgKiBgSW5jb21wYXRpYmxlSW5zdGFsbGVyVmVyc2lvbkVycm9yYCBmcm9tIHZlcnNpb24gcmVzb2x1dGlvbiBiZWZvcmUgYW55dGhpbmcgaXNcbiAgICogZG93bmxvYWRlZCBvciBsYXVuY2hlZC4gU2V0IGBmYWxzZWAgdG8gbGV0IHRoZSBwaW4gcHJvY2VlZCB0byBsYXVuY2ggXHUyMDE0IHdoZXJlXG4gICAqIHRoZSByZWFjdGl2ZSBkZWFkLWJvb3QgZmFzdC1mYWlsIHN0aWxsIGNhdGNoZXMgdGhlIGJsYWNrLXNjcmVlbiBib290LCBhbmQgdGhlXG4gICAqIGAndW5ydW5uYWJsZSdgIHZlcmRpY3QgaXMgc3VyZmFjZWQgb24ge0BsaW5rIENkcENvbm5lY3Rpb24uY29tcGF0aWJpbGl0eX1cbiAgICogcmF0aGVyIHRoYW4gdGhyb3duLiBJZ25vcmVkIGluIGF0dGFjaCBtb2RlICh7QGxpbmsgcG9ydH0gc2V0KS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRUaHJvd09uSW5jb21wYXRpYmxlSW5zdGFsbGVyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciBhIHBvc3QtYm9vdCAqKnNpbGVudCBhc2FyIGZhbGxiYWNrKiogZmFpbHMgZmFzdC5cbiAgICpcbiAgICogV2hlbiBhbiBhc2FyIGlzIHN3YXBwZWQgb250byBhbiBpbnN0YWxsZXIgc2hlbGwgdG9vIG9sZCBmb3IgaXQsIHRoZSBpbnN0YW5jZVxuICAgKiBtYXkgc2lsZW50bHkgcmV2ZXJ0IHRvIHRoZSBpbnN0YWxsZXIncyBvd24gYnVuZGxlZCBhc2FyIGFuZCBydW4gdGhlICoqd3JvbmdcbiAgICogKG9sZGVyKSoqIHZlcnNpb24gYmVoaW5kIGEgaGVhbHRoeSBVSS4gV2hlbiBgdHJ1ZWAgKHRoZSBkZWZhdWx0KSwgdGhlIHJ1bm5pbmdcbiAgICogYXBwIHZlcnNpb24gaXMgdmVyaWZpZWQgYWdhaW5zdCB0aGUgcGluIHBvc3QtYm9vdCBhbmQgYSBtaXNtYXRjaCB0aHJvd3NcbiAgICogYFNpbGVudEFzYXJGYWxsYmFja0Vycm9yYC4gU2V0IGBmYWxzZWAgdG8gbGV0IHRoZSBib290IHByb2NlZWQgXHUyMDE0IHRoZSBtaXNtYXRjaFxuICAgKiBpcyB0aGVuIHN1cmZhY2VkIG9uIHtAbGluayBDZHBDb25uZWN0aW9uLmFzYXJGYWxsYmFja30gcmF0aGVyIHRoYW4gdGhyb3duLlxuICAgKiBJZ25vcmVkIGluIGF0dGFjaCBtb2RlICh7QGxpbmsgcG9ydH0gc2V0KSBhbmQgd2hlbiBubyBhc2FyIGlzIHN3YXBwZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkVGhyb3dPblNpbGVudEFzYXJGYWxsYmFjaz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIG93bmVkLWluc3RhbmNlIGNvbXBhdGliaWxpdHkgKipuYWcgd2FybmluZ3MqKiBhcmUgZW1pdHRlZC5cbiAgICpcbiAgICogQ292ZXJzIGJvdGggdGhlIG9mZmxpbmUgaW5zdGFsbGVyXHUyMTk0YXBwIHdhcm5pbmcgYW5kIHRoZSBwb3N0LWJvb3RcbiAgICogcnVudGltZS1FbGVjdHJvbiB3YXJuaW5nLiBXaGVuIGB0cnVlYCAodGhlIGRlZmF1bHQpIGVhY2ggZmlyZXMgdmlhIHRoZSBoYXJuZXNzXG4gICAqIGxvZzsgc2V0IGBmYWxzZWAgdG8gc2lsZW5jZSBib3RoIFx1MjAxNCB0aGUgdmVyZGljdHMgYXJlIHN0aWxsIHN1cmZhY2VkIG9uXG4gICAqIHtAbGluayBDZHBDb25uZWN0aW9uLmNvbXBhdGliaWxpdHl9IC8ge0BsaW5rIENkcENvbm5lY3Rpb24uZWxlY3Ryb25Db21wYXRpYmlsaXR5fSxcbiAgICogb25seSB0aGUgbG9nIGlzIHN1cHByZXNzZWQuIElnbm9yZWQgaW4gYXR0YWNoIG1vZGUgKHtAbGluayBwb3J0fSBzZXQpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFdhcm5PbkNvbXBhdGliaWxpdHlJc3N1ZXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBYnNvbHV0ZSBwYXRoIHRvIGFuIGV4aXN0aW5nIHZhdWx0IHRvIG9wZW4uIFdoZW4gb21pdHRlZCwgYW4gZW1wdHkgdGVtcG9yYXJ5XG4gICAqIHZhdWx0IGlzIGNyZWF0ZWQgKGFuZCByZW1vdmVkIG9uIGRpc3Bvc2UgdW5sZXNzXG4gICAqIHtAbGluayBzaG91bGRSZW1vdmVWYXVsdE9uRGlzcG9zZX0gc2F5cyBvdGhlcndpc2UpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdW5kZWZpbmVkYFxuICAgKi9cbiAgcmVhZG9ubHkgdmF1bHQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSByZXNvbHZlZCBDRFAgaG9zdC9wb3J0IHBhaXIuXG4gKi9cbmludGVyZmFjZSBSZXNvbHZlZEVuZHBvaW50IHtcbiAgaG9zdDogc3RyaW5nO1xuICBwb3J0OiBudW1iZXI7XG59XG5cbi8qKlxuICogTGF1bmNoZXMgKG9yIGF0dGFjaGVzIHRvKSBhIENEUC1lbmFibGVkIE9ic2lkaWFuIGluc3RhbmNlLCBvcGVucyBhIHZhdWx0LCBhbmRcbiAqIGJvb3RzdHJhcHMgdGhlIHJ1bnRpbWUgaGVscGVyIG5hbWVzcGFjZSwgcmV0dXJuaW5nIGEgZGlzcG9zYWJsZSBjb25uZWN0aW9uLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gQ29ubmVjdGlvbiBvcHRpb25zLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgbGl2ZSB7QGxpbmsgQ2RwQ29ubmVjdGlvbn0uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb25uZWN0VG9DZHAob3B0aW9ucz86IENvbm5lY3RUb0NkcE9wdGlvbnMpOiBQcm9taXNlPENkcENvbm5lY3Rpb24+IHtcbiAgY29uc3QgdHJhbnNwb3J0T3B0aW9ucyA9IGJ1aWxkQ2RwVHJhbnNwb3J0T3B0aW9ucyhvcHRpb25zKTtcbiAgYXdhaXQgc3dlZXBMZWZ0b3ZlcnModHJhbnNwb3J0T3B0aW9ucyk7XG4gIGNvbnN0IHRyYW5zcG9ydCA9IGF3YWl0IGNyZWF0ZVRyYW5zcG9ydEZyb21PcHRpb25zKHRyYW5zcG9ydE9wdGlvbnMpO1xuICBjb25zdCBzaG91bGRSZW1vdmVWYXVsdE9uRGlzcG9zZSA9IG9wdGlvbnM/LnNob3VsZFJlbW92ZVZhdWx0T25EaXNwb3NlID8/IChvcHRpb25zPy52YXVsdCA9PT0gdW5kZWZpbmVkKTtcbiAgY29uc3QgdmF1bHQgPSBuZXcgVGVtcG9yYXJ5VmF1bHQob3B0aW9ucz8udmF1bHQsIHsgc2hvdWxkUmVtb3ZlRGlyZWN0b3J5T25EaXNwb3NlOiBzaG91bGRSZW1vdmVWYXVsdE9uRGlzcG9zZSB9KTtcblxuICAvLyBUaGUgaGVhZGxlc3MgZGVmYXVsdHMgZ28gb25seSBpbnRvIGEgdmF1bHQgdGhlIGhhcm5lc3MgbWFkZSBcdTIwMTQgdGhlIHNhbWVcbiAgLy8gYG9wdGlvbnMudmF1bHQgPT09IHVuZGVmaW5lZGAgZGlzY3JpbWluYXRvciB0aGUgZGlzcG9zYWwgYWJvdmUgdHVybnMgb24uIEFcbiAgLy8gY2FsbGVyLXN1cHBsaWVkIHZhdWx0IGlzIGEgcmVhbCBvbmUgdGhlIHVzZXIga2VlcHMsIGFuZCBhIGRlYnVnZ2luZyBzZXNzaW9uXG4gIC8vIGhhcyBubyBidXNpbmVzcyByZXdyaXRpbmcgaXRzIHNldHRpbmdzLlxuICBpZiAob3B0aW9ucz8udmF1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgIGF3YWl0IGVuc3VyZUhlYWRsZXNzVmF1bHRDb25maWcoe1xuICAgICAgY29uZmlnRGlyZWN0b3J5OiByZXNvbHZlT3duZWRDb25maWdEaXJlY3RvcnkodHJhbnNwb3J0T3B0aW9ucyksXG4gICAgICBsYWJlbDogdHJhbnNwb3J0T3B0aW9ucy50eXBlLFxuICAgICAgdmF1bHRQYXRoOiB2YXVsdC5wYXRoXG4gICAgfSk7XG4gIH1cblxuICAvLyBSZWdpc3RlcmluZyB0aGUgdmF1bHQgaXMgd2hhdCBsYXVuY2hlcyB0aGUgb3duZWQgaW5zdGFuY2UgKHByb3Zpc2lvbnMgdGhlXG4gIC8vIGFzYXIsIG9wZW5zIHRoZSB2YXVsdCwgYW5kIGJvb3RzdHJhcHMgdGhlIGhlbHBlciBuYW1lc3BhY2UpLCBvciBvcGVucyB0aGVcbiAgLy8gdmF1bHQgaW4gdGhlIGF0dGFjaGVkIGluc3RhbmNlLlxuICBhd2FpdCB2YXVsdC5yZWdpc3Rlcih0cmFuc3BvcnQpO1xuXG4gIGNvbnN0IHsgaG9zdCwgcG9ydCB9ID0gcmVzb2x2ZUVuZHBvaW50KHRyYW5zcG9ydCwgb3B0aW9ucyk7XG4gIGNvbnN0IGNkcFVybCA9IGBodHRwOi8vJHtob3N0fToke1N0cmluZyhwb3J0KX1gO1xuICBjb25zdCBhc2FyRmFsbGJhY2sgPSB0cmFuc3BvcnQgaW5zdGFuY2VvZiBEZXNrdG9wQ2RwVHJhbnNwb3J0ID8gdHJhbnNwb3J0LmdldEFzYXJGYWxsYmFjaygpIDogdW5kZWZpbmVkO1xuICBjb25zdCBjb21wYXRpYmlsaXR5ID0gdHJhbnNwb3J0IGluc3RhbmNlb2YgRGVza3RvcENkcFRyYW5zcG9ydCA/IHRyYW5zcG9ydC5nZXRDb21wYXRpYmlsaXR5KCkgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGVsZWN0cm9uQ29tcGF0aWJpbGl0eSA9IHRyYW5zcG9ydCBpbnN0YW5jZW9mIERlc2t0b3BDZHBUcmFuc3BvcnQgPyB0cmFuc3BvcnQuZ2V0RWxlY3Ryb25Db21wYXRpYmlsaXR5KCkgOiB1bmRlZmluZWQ7XG5cbiAgY29uc3QgY29ubmVjdGlvbjogQ2RwQ29ubmVjdGlvbiA9IHtcbiAgICBjZHBVcmwsXG4gICAgLi4uKGFzYXJGYWxsYmFjayAmJiB7IGFzYXJGYWxsYmFjayB9KSxcbiAgICAuLi4oY29tcGF0aWJpbGl0eSAmJiB7IGNvbXBhdGliaWxpdHkgfSksXG4gICAgLi4uKGVsZWN0cm9uQ29tcGF0aWJpbGl0eSAmJiB7IGVsZWN0cm9uQ29tcGF0aWJpbGl0eSB9KSxcblxuICAgIGFzeW5jIGNhcHR1cmVTY3JlZW5zaG90KHBhcmFtcz86IEV4Y2VwdDxDYXB0dXJlU2NyZWVuc2hvdFBhcmFtcywgJ2N3ZCc+KTogUHJvbWlzZTxVaW50OEFycmF5PiB7XG4gICAgICAvLyBFdmVyeSB0cmFuc3BvcnQgYGNvbm5lY3RUb0NkcGAgYnVpbGRzIGlzIGEgRGVza3RvcENkcFRyYW5zcG9ydCwgd2hpY2hcbiAgICAgIC8vIGltcGxlbWVudHMgdGhlIG9wdGlvbmFsIG1ldGhvZCBcdTIwMTQgYnV0IHRoZSBpbnRlcmZhY2Ugc3RpbGwgdHlwZXMgaXRcbiAgICAgIC8vIG9wdGlvbmFsLCBzbyB0aGUgYWJzZW5jZSBpcyByZXBvcnRlZCByYXRoZXIgdGhhbiBzaWxlbnRseSB0aHJvd24gYXQuXG4gICAgICBpZiAoIXRyYW5zcG9ydC5jYXB0dXJlU2NyZWVuc2hvdCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nvbm5lY3RUb0NkcDogdGhpcyB0cmFuc3BvcnQgY2Fubm90IGNhcHR1cmUgc2NyZWVuc2hvdHMuJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cmFuc3BvcnQuY2FwdHVyZVNjcmVlbnNob3QoeyAuLi5wYXJhbXMsIGN3ZDogdmF1bHQucGF0aCB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZGlzcG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFRoZSB2YXVsdCBjYXJyaWVzIGBzaG91bGRSZW1vdmVWYXVsdE9uRGlzcG9zZWAgaXRzZWxmIChoYW5kZWQgdG8gaXRzIGNvbnN0cnVjdG9yIGFib3ZlKSwgc29cbiAgICAgICAgLy8gdGhpcyBpcyBvbmUgY2FsbCByYXRoZXIgdGhhbiBhIGJyYW5jaDogaXQgYWx3YXlzIHVucmVnaXN0ZXJzLCBhbmQgcmVtb3ZlcyB0aGUgZGlyZWN0b3J5IG9ubHlcbiAgICAgICAgLy8gd2hlbiB0aGF0IGZsYWcgc2F5cyB0by5cbiAgICAgICAgYXdhaXQgdmF1bHQuZGlzcG9zZSh0cmFuc3BvcnQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgYXdhaXQgdHJhbnNwb3J0LmRpc3Bvc2U/LigpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBldmFsSW5PYnNpZGlhbjxJbnB1dCBleHRlbmRzIEdlbmVyaWNPYmplY3QsIFJlc3VsdCwgVENvbnRleHRJZCBleHRlbmRzIENvbnRleHRJZDx1bmtub3duPiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZD4oXG4gICAgICBwYXJhbXM6IEV4Y2VwdDxFdmFsSW5PYnNpZGlhblBhcmFtczxJbnB1dCwgUmVzdWx0LCBUQ29udGV4dElkPiwgJ3RyYW5zcG9ydCcgfCAndmF1bHRQYXRoJz5cbiAgICApOiBQcm9taXNlPFJlc3VsdD4ge1xuICAgICAgcmV0dXJuIGV2YWxJbk9ic2lkaWFuPElucHV0LCBSZXN1bHQsIFRDb250ZXh0SWQ+KHsgLi4ucGFyYW1zLCB0cmFuc3BvcnQsIHZhdWx0UGF0aDogdmF1bHQucGF0aCB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgaW52b2tlKGV4cHJlc3Npb246IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICByZXR1cm4gdHJhbnNwb3J0LmV2YWx1YXRlKGV4cHJlc3Npb24sIHsgY3dkOiB2YXVsdC5wYXRoIH0pO1xuICAgIH0sXG5cbiAgICBwb3J0LFxuXG4gICAgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgYXdhaXQgY29ubmVjdGlvbi5kaXNwb3NlKCk7XG4gICAgfSxcblxuICAgIHZhdWx0XG4gIH07XG5cbiAgcmV0dXJuIGNvbm5lY3Rpb247XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSB7QGxpbmsgT2JzaWRpYW5DZHBUcmFuc3BvcnRPcHRpb25zfSBmb3IgYSBjb25uZWN0aW9uLCB0aHJlYWRpbmcgb25seVxuICogdGhlIHByb3ZpZGVkIHtAbGluayBDb25uZWN0VG9DZHBPcHRpb25zfSB0aHJvdWdoIChvd25lZC12aXNpYmxlIGRlZmF1bHRzIHRvXG4gKiBgdHJ1ZWAsIHVubGlrZSB0aGUgaGlkZGVuLWJ5LWRlZmF1bHQgdGVzdCB0cmFuc3BvcnRzKS4gVW5zZXQga25vYnMgcGFzcyB0aHJvdWdoXG4gKiBhcyBgdW5kZWZpbmVkYCBhbmQgYXJlIHJlYWQgd2l0aCBgPz8gZGVmYXVsdGAgLyBgIT09IHVuZGVmaW5lZGAgZ3VhcmRzXG4gKiBkb3duc3RyZWFtLCBzbyBhbiBleHBsaWNpdCBgdW5kZWZpbmVkYCBpcyBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIGFuIGFic2VudCBrZXkuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgY29ubmVjdGlvbiBvcHRpb25zLlxuICogQHJldHVybnMgVGhlIHRyYW5zcG9ydCBvcHRpb25zIHRvIGNyZWF0ZSB0aGUgY29ubmVjdGlvbidzIHRyYW5zcG9ydCBmcm9tLlxuICovXG5mdW5jdGlvbiBidWlsZENkcFRyYW5zcG9ydE9wdGlvbnMob3B0aW9ucz86IENvbm5lY3RUb0NkcE9wdGlvbnMpOiBPYnNpZGlhbkNkcFRyYW5zcG9ydE9wdGlvbnMge1xuICByZXR1cm4gbm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPE9ic2lkaWFuQ2RwVHJhbnNwb3J0T3B0aW9ucz4oe1xuICAgIGNvbW1hbmRUaW1lb3V0SW5NaWxsaXNlY29uZHM6IG9wdGlvbnM/LmNvbW1hbmRUaW1lb3V0SW5NaWxsaXNlY29uZHMsXG4gICAgY29uZmlnRGlyZWN0b3J5OiBvcHRpb25zPy5jb25maWdEaXJlY3RvcnksXG4gICAgZGVhZEJvb3RHcmFjZUluTWlsbGlzZWNvbmRzOiBvcHRpb25zPy5kZWFkQm9vdEdyYWNlSW5NaWxsaXNlY29uZHMsXG4gICAgaG9zdDogb3B0aW9ucz8uaG9zdCxcbiAgICBpc09ic2lkaWFuQXBwVmlzaWJsZTogb3B0aW9ucz8uaXNPYnNpZGlhbkFwcFZpc2libGUgPz8gdHJ1ZSxcbiAgICBvYnNpZGlhbkluc3RhbGxlclZlcnNpb246IG9wdGlvbnM/Lm9ic2lkaWFuSW5zdGFsbGVyVmVyc2lvbixcbiAgICBvYnNpZGlhblZlcnNpb246IG9wdGlvbnM/Lm9ic2lkaWFuVmVyc2lvbixcbiAgICBwb3J0OiBvcHRpb25zPy5wb3J0LFxuICAgIHNob3VsZERpc2FibGVTYW5kYm94OiBvcHRpb25zPy5zaG91bGREaXNhYmxlU2FuZGJveCxcbiAgICBzaG91bGRUaHJvd09uSW5jb21wYXRpYmxlSW5zdGFsbGVyOiBvcHRpb25zPy5zaG91bGRUaHJvd09uSW5jb21wYXRpYmxlSW5zdGFsbGVyLFxuICAgIHNob3VsZFRocm93T25TaWxlbnRBc2FyRmFsbGJhY2s6IG9wdGlvbnM/LnNob3VsZFRocm93T25TaWxlbnRBc2FyRmFsbGJhY2ssXG4gICAgc2hvdWxkV2Fybk9uQ29tcGF0aWJpbGl0eUlzc3Vlczogb3B0aW9ucz8uc2hvdWxkV2Fybk9uQ29tcGF0aWJpbGl0eUlzc3VlcyxcbiAgICB0eXBlOiAnb2JzaWRpYW4tY2RwJ1xuICB9KTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgQ0RQIGhvc3QvcG9ydCBmb3IgdGhlIGNvbm5lY3Rpb246IGZyb20gdGhlIG93bmVkIGluc3RhbmNlJ3NcbiAqIGxhdW5jaGVkIGVuZHBvaW50IHdoZW4gcHJlc2VudCwgb3RoZXJ3aXNlIGZyb20gdGhlIGF0dGFjaCBvcHRpb25zLlxuICpcbiAqIEBwYXJhbSB0cmFuc3BvcnQgLSBUaGUgdHJhbnNwb3J0IGNyZWF0ZWQgZm9yIHRoaXMgY29ubmVjdGlvbi5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIGNvbm5lY3Rpb24gb3B0aW9ucy5cbiAqIEByZXR1cm5zIFRoZSByZXNvbHZlZCBob3N0IGFuZCBwb3J0LlxuICogQHRocm93cyBFcnJvciBpZiB0aGUgcG9ydCBjYW5ub3QgYmUgZGV0ZXJtaW5lZC5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUVuZHBvaW50KHRyYW5zcG9ydDogdW5rbm93biwgb3B0aW9uczogQ29ubmVjdFRvQ2RwT3B0aW9ucyB8IHVuZGVmaW5lZCk6IFJlc29sdmVkRW5kcG9pbnQge1xuICBpZiAodHJhbnNwb3J0IGluc3RhbmNlb2YgRGVza3RvcENkcFRyYW5zcG9ydCkge1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdHJhbnNwb3J0LmdldE93bmVkSW5zdGFuY2VFbmRwb2ludCgpO1xuICAgIGlmIChlbmRwb2ludCkge1xuICAgICAgcmV0dXJuIHsgaG9zdDogZW5kcG9pbnQuaG9zdCwgcG9ydDogZW5kcG9pbnQucG9ydCB9O1xuICAgIH1cbiAgfVxuXG4gIGlmIChvcHRpb25zPy5wb3J0ICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4geyBob3N0OiBvcHRpb25zLmhvc3QgPz8gREVGQVVMVF9DRFBfSE9TVCwgcG9ydDogb3B0aW9ucy5wb3J0IH07XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoJ2Nvbm5lY3RUb0NkcDogY291bGQgbm90IGRldGVybWluZSB0aGUgQ0RQIHBvcnQuJyk7XG59XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgaG9zdC1zaWRlIHRlbXAgZGlyZWN0b3JpZXMgZWFybGllciBydW5zIGxlYWtlZCwgYmVmb3JlIHRoaXNcbiAqIGNvbm5lY3Rpb24gYWRkcyBpdHMgb3duLlxuICpcbiAqIGBjb25uZWN0VG9DZHBgIG1pbnRzIHRoZSBzYW1lIGB0ZW1wLXZhdWx0LSpgIC8gb3duZWQgYHVzZXJkYXRhLSpgIGRpcmVjdG9yaWVzXG4gKiB0aGUgdGVzdCBnbG9iYWwgc2V0dXAgZG9lcywgYW5kIGFuIGFkLWhvYyBkZWJ1Z2dpbmcgc2Vzc2lvbiBpcyBleGFjdGx5IHRoZVxuICoga2luZCB0aGF0IGdldHMga2lsbGVkIHdpdGggYSBsZWZ0b3ZlciBiZWhpbmQgXHUyMDE0IHNvIGl0IHN3ZWVwcyB0b28uIEFnZS1nYXRlZCBhbmRcbiAqIGJlc3QtZWZmb3J0OyBzZWUgdGhlIGNvcmUncyBgc3dlZXBMZWZ0b3ZlcnNgLlxuICpcbiAqIEBwYXJhbSB0cmFuc3BvcnRPcHRpb25zIC0gVGhlIHJlc29sdmVkIHRyYW5zcG9ydCBvcHRpb25zIChzb3VyY2Ugb2YgdGhlIHN3ZWVwIGtub2JzKS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc3dlZXBMZWZ0b3ZlcnModHJhbnNwb3J0T3B0aW9uczogT2JzaWRpYW5DZHBUcmFuc3BvcnRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICghd2lsbFN3ZWVwTGVmdG92ZXJzKHRyYW5zcG9ydE9wdGlvbnMpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzd2VlcEhvc3RMZWZ0b3ZlcnMoe1xuICAgICAgbWF4QWdlSW5NaWxsaXNlY29uZHM6IHJlc29sdmVMZWZ0b3Zlck1heEFnZUluTWlsbGlzZWNvbmRzKHRyYW5zcG9ydE9wdGlvbnMpXG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5yZW1vdmVkQ291bnQgPiAwIHx8IHJlc3VsdC5mYWlsZWRDb3VudCA+IDApIHtcbiAgICAgIGxvZyhcbiAgICAgICAgYFtjb25uZWN0LXRvLWNkcF0gU3dlcHQgJHtTdHJpbmcocmVzdWx0LnJlbW92ZWRDb3VudCl9IGxlZnRvdmVyIHRlbXAgZGlyZWN0b3IoaWVzKSBmcm9tIGVhcmxpZXIgcnVucyBgXG4gICAgICAgICAgKyBgKCR7U3RyaW5nKHJlc3VsdC5mYWlsZWRDb3VudCl9IHN0aWxsIGluIHVzZSkuYFxuICAgICAgKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgbG9nKGBbY29ubmVjdC10by1jZHBdIExlZnRvdmVyIHN3ZWVwIGVycm9yIChub24tZmF0YWwpOiAke1N0cmluZyhlcnJvcil9YCk7XG4gIH1cbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUE0QkEsOEJBQStCO0FBQy9CLG1DQUEwQztBQUMxQyw4QkFJTztBQUNQLGlCQUFvQjtBQUNwQiwyQ0FBNEM7QUFDNUMsNkJBQStCO0FBQy9CLG1DQUFvQztBQUNwQywrQkFBMkM7QUFDM0MsK0JBQTRDO0FBRTVDLE1BQU0sbUJBQW1CO0FBOFJ6QixlQUFzQixhQUFhLFNBQXVEO0FBQ3hGLFFBQU0sbUJBQW1CLHlCQUF5QixPQUFPO0FBQ3pELFFBQU0sZUFBZSxnQkFBZ0I7QUFDckMsUUFBTSxZQUFZLFVBQU0scURBQTJCLGdCQUFnQjtBQUNuRSxRQUFNLDZCQUE2QixTQUFTLDhCQUErQixTQUFTLFVBQVU7QUFDOUYsUUFBTSxRQUFRLElBQUksc0NBQWUsU0FBUyxPQUFPLEVBQUUsZ0NBQWdDLDJCQUEyQixDQUFDO0FBTS9HLE1BQUksU0FBUyxVQUFVLFFBQVc7QUFDaEMsY0FBTSx3REFBMEI7QUFBQSxNQUM5QixxQkFBaUIsc0RBQTRCLGdCQUFnQjtBQUFBLE1BQzdELE9BQU8saUJBQWlCO0FBQUEsTUFDeEIsV0FBVyxNQUFNO0FBQUEsSUFDbkIsQ0FBQztBQUFBLEVBQ0g7QUFLQSxRQUFNLE1BQU0sU0FBUyxTQUFTO0FBRTlCLFFBQU0sRUFBRSxNQUFNLEtBQUssSUFBSSxnQkFBZ0IsV0FBVyxPQUFPO0FBQ3pELFFBQU0sU0FBUyxVQUFVLElBQUksSUFBSSxPQUFPLElBQUksQ0FBQztBQUM3QyxRQUFNLGVBQWUscUJBQXFCLG1EQUFzQixVQUFVLGdCQUFnQixJQUFJO0FBQzlGLFFBQU0sZ0JBQWdCLHFCQUFxQixtREFBc0IsVUFBVSxpQkFBaUIsSUFBSTtBQUNoRyxRQUFNLHdCQUF3QixxQkFBcUIsbURBQXNCLFVBQVUseUJBQXlCLElBQUk7QUFFaEgsUUFBTSxhQUE0QjtBQUFBLElBQ2hDO0FBQUEsSUFDQSxHQUFJLGdCQUFnQixFQUFFLGFBQWE7QUFBQSxJQUNuQyxHQUFJLGlCQUFpQixFQUFFLGNBQWM7QUFBQSxJQUNyQyxHQUFJLHlCQUF5QixFQUFFLHNCQUFzQjtBQUFBLElBRXJELE1BQU0sa0JBQWtCLFFBQXNFO0FBSTVGLFVBQUksQ0FBQyxVQUFVLG1CQUFtQjtBQUNoQyxjQUFNLElBQUksTUFBTSwwREFBMEQ7QUFBQSxNQUM1RTtBQUVBLGFBQU8sVUFBVSxrQkFBa0IsRUFBRSxHQUFHLFFBQVEsS0FBSyxNQUFNLEtBQUssQ0FBQztBQUFBLElBQ25FO0FBQUEsSUFFQSxNQUFNLFVBQXlCO0FBQzdCLFVBQUk7QUFJRixjQUFNLE1BQU0sUUFBUSxTQUFTO0FBQUEsTUFDL0IsVUFBRTtBQUNBLGNBQU0sVUFBVSxVQUFVO0FBQUEsTUFDNUI7QUFBQSxJQUNGO0FBQUEsSUFFQSxNQUFNLGVBQ0osUUFDaUI7QUFDakIsaUJBQU8sd0NBQTBDLEVBQUUsR0FBRyxRQUFRLFdBQVcsV0FBVyxNQUFNLEtBQUssQ0FBQztBQUFBLElBQ2xHO0FBQUEsSUFFQSxNQUFNLE9BQU8sWUFBcUM7QUFDaEQsYUFBTyxVQUFVLFNBQVMsWUFBWSxFQUFFLEtBQUssTUFBTSxLQUFLLENBQUM7QUFBQSxJQUMzRDtBQUFBLElBRUE7QUFBQSxJQUVBLE9BQU8sT0FBTyxZQUFZLElBQW1CO0FBQzNDLFlBQU0sV0FBVyxRQUFRO0FBQUEsSUFDM0I7QUFBQSxJQUVBO0FBQUEsRUFDRjtBQUVBLFNBQU87QUFDVDtBQVlBLFNBQVMseUJBQXlCLFNBQTREO0FBQzVGLGFBQU8sa0VBQXlEO0FBQUEsSUFDOUQsOEJBQThCLFNBQVM7QUFBQSxJQUN2QyxpQkFBaUIsU0FBUztBQUFBLElBQzFCLDZCQUE2QixTQUFTO0FBQUEsSUFDdEMsTUFBTSxTQUFTO0FBQUEsSUFDZixzQkFBc0IsU0FBUyx3QkFBd0I7QUFBQSxJQUN2RCwwQkFBMEIsU0FBUztBQUFBLElBQ25DLGlCQUFpQixTQUFTO0FBQUEsSUFDMUIsTUFBTSxTQUFTO0FBQUEsSUFDZixzQkFBc0IsU0FBUztBQUFBLElBQy9CLG9DQUFvQyxTQUFTO0FBQUEsSUFDN0MsaUNBQWlDLFNBQVM7QUFBQSxJQUMxQyxpQ0FBaUMsU0FBUztBQUFBLElBQzFDLE1BQU07QUFBQSxFQUNSLENBQUM7QUFDSDtBQVdBLFNBQVMsZ0JBQWdCLFdBQW9CLFNBQTREO0FBQ3ZHLE1BQUkscUJBQXFCLGtEQUFxQjtBQUM1QyxVQUFNLFdBQVcsVUFBVSx5QkFBeUI7QUFDcEQsUUFBSSxVQUFVO0FBQ1osYUFBTyxFQUFFLE1BQU0sU0FBUyxNQUFNLE1BQU0sU0FBUyxLQUFLO0FBQUEsSUFDcEQ7QUFBQSxFQUNGO0FBRUEsTUFBSSxTQUFTLFNBQVMsUUFBVztBQUMvQixXQUFPLEVBQUUsTUFBTSxRQUFRLFFBQVEsa0JBQWtCLE1BQU0sUUFBUSxLQUFLO0FBQUEsRUFDdEU7QUFFQSxRQUFNLElBQUksTUFBTSxpREFBaUQ7QUFDbkU7QUFhQSxlQUFlLGVBQWUsa0JBQThEO0FBQzFGLE1BQUksS0FBQyw0Q0FBbUIsZ0JBQWdCLEdBQUc7QUFDekM7QUFBQSxFQUNGO0FBRUEsTUFBSTtBQUNGLFVBQU0sU0FBUyxVQUFNLDRDQUFtQjtBQUFBLE1BQ3RDLDBCQUFzQiw2REFBb0MsZ0JBQWdCO0FBQUEsSUFDNUUsQ0FBQztBQUNELFFBQUksT0FBTyxlQUFlLEtBQUssT0FBTyxjQUFjLEdBQUc7QUFDckQ7QUFBQSxRQUNFLDBCQUEwQixPQUFPLE9BQU8sWUFBWSxDQUFDLG1EQUM3QyxPQUFPLE9BQU8sV0FBVyxDQUFDO0FBQUEsTUFDcEM7QUFBQSxJQUNGO0FBQUEsRUFDRixTQUFTLE9BQWdCO0FBQ3ZCLHdCQUFJLHNEQUFzRCxPQUFPLEtBQUssQ0FBQyxFQUFFO0FBQUEsRUFDM0U7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
135
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Nvbm5lY3QtdG8tY2RwLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogUHJvZ3JhbW1hdGljIGhlbHBlciB0byBsYXVuY2ggKG9yIGF0dGFjaCB0bykgYSBDRFAtZW5hYmxlZCBPYnNpZGlhbiBpbnN0YW5jZVxuICogd2l0aCB0aGUgcnVudGltZSBoZWxwZXIgbmFtZXNwYWNlIGJvb3RzdHJhcHBlZCwgZm9yIGFkLWhvYyByZWFsLWFwcCBkZWJ1Z2dpbmcuXG4gKlxuICogQSBzaW5nbGUge0BsaW5rIGNvbm5lY3RUb0NkcH0gY2FsbCByZXNvbHZlcyB0aGUgb3duZWQtaW5zdGFuY2UgY29uZmlnLCBvcGVucyBhXG4gKiB2YXVsdCwgYW5kIGJvb3RzdHJhcHMgYHdpbmRvdy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nYCAoc28gYGV2YWxXcmFwcGVyYCxcbiAqIHRoZSBiYXNlIGBsaWJgIGhlbHBlcnMsIGBlcnJvclRvU3RyaW5nYCwgYGdldE9ic2lkaWFuTW9kdWxlYCwgXHUyMDI2IGFyZSBhdmFpbGFibGUpLCB0aGVuXG4gKiBoYW5kcyBiYWNrIGEgZGlzcG9zYWJsZSB7QGxpbmsgQ2RwQ29ubmVjdGlvbn0gZXhwb3NpbmcgdGhlIGNob3NlbiBDRFAgcG9ydCwgYVxuICogcmF3IHtAbGluayBDZHBDb25uZWN0aW9uLmludm9rZX0gYW5kIHRoZSByaWNoIHtAbGluayBDZHBDb25uZWN0aW9uLmV2YWxJbk9ic2lkaWFufS5cbiAqL1xuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gSW50ZWdyYXRpb24tdGltZSBjb2RlIChsYXVuY2hlcyBPYnNpZGlhbiAvIENEUCkgY292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB0eXBlIHsgRXhjZXB0IH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHR5cGUgeyBBc2FyRmFsbGJhY2sgfSBmcm9tICcuL2FzYXItZmFsbGJhY2stZGV0ZWN0aW9uLmNqcyc7XG5pbXBvcnQgdHlwZSB7IENhcHR1cmVTY3JlZW5zaG90UGFyYW1zIH0gZnJvbSAnLi9jYXB0dXJlLXNjcmVlbnNob3QuY2pzJztcbmltcG9ydCB0eXBlIHsgQ29udGV4dElkIH0gZnJvbSAnLi9jb250ZXh0LWlkLmNqcyc7XG5pbXBvcnQgdHlwZSB7IEVsZWN0cm9uQ29tcGF0aWJpbGl0eSB9IGZyb20gJy4vZWxlY3Ryb24tY29tcGF0aWJpbGl0eS5janMnO1xuaW1wb3J0IHR5cGUge1xuICBFdmFsSW5PYnNpZGlhblBhcmFtcyxcbiAgR2VuZXJpY09iamVjdFxufSBmcm9tICcuL2V2YWwtaW4tb2JzaWRpYW4uY2pzJztcbmltcG9ydCB0eXBlIHsgSW5zdGFsbGVyQ29tcGF0aWJpbGl0eSB9IGZyb20gJy4vaW5zdGFsbGVyLWNvbXBhdGliaWxpdHkuY2pzJztcbmltcG9ydCB0eXBlIHsgT2JzaWRpYW5DZHBUcmFuc3BvcnRPcHRpb25zIH0gZnJvbSAnLi90cmFuc3BvcnQtb3B0aW9ucy5janMnO1xuXG5pbXBvcnQgeyBldmFsSW5PYnNpZGlhbiB9IGZyb20gJy4vZXZhbC1pbi1vYnNpZGlhbi5janMnO1xuaW1wb3J0IHsgZW5zdXJlSGVhZGxlc3NWYXVsdENvbmZpZyB9IGZyb20gJy4vaGVhZGxlc3MtdmF1bHQtY29uZmlnLmNqcyc7XG5pbXBvcnQge1xuICByZXNvbHZlTGVmdG92ZXJNYXhBZ2VJbk1pbGxpc2Vjb25kcyxcbiAgc3dlZXBIb3N0TGVmdG92ZXJzLFxuICB3aWxsU3dlZXBMZWZ0b3ZlcnNcbn0gZnJvbSAnLi9sZWZ0b3Zlci1jbGVhbnVwLmNqcyc7XG5pbXBvcnQgeyBsb2cgfSBmcm9tICcuL2xvZy5janMnO1xuaW1wb3J0IHsgbm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzIH0gZnJvbSAnLi9ub3JtYWxpemUtb3B0aW9uYWwtcHJvcGVydGllcy5janMnO1xuaW1wb3J0IHsgVGVtcG9yYXJ5VmF1bHQgfSBmcm9tICcuL3RlbXBvcmFyeS12YXVsdC5janMnO1xuaW1wb3J0IHsgRGVza3RvcENkcFRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LWRlc2t0b3AtY2RwLmNqcyc7XG5pbXBvcnQgeyBjcmVhdGVUcmFuc3BvcnRGcm9tT3B0aW9ucyB9IGZyb20gJy4vdHJhbnNwb3J0LWZhY3RvcnkuY2pzJztcbmltcG9ydCB7IHJlc29sdmVPd25lZENvbmZpZ0RpcmVjdG9yeSB9IGZyb20gJy4vdHJhbnNwb3J0LW9wdGlvbnMuY2pzJztcblxuY29uc3QgREVGQVVMVF9DRFBfSE9TVCA9ICdsb2NhbGhvc3QnO1xuXG4vKipcbiAqIEEgbGl2ZSBjb25uZWN0aW9uIHRvIGEgQ0RQLWVuYWJsZWQgT2JzaWRpYW4gaW5zdGFuY2Ugd2l0aCB0aGUgcnVudGltZSBoZWxwZXJcbiAqIG5hbWVzcGFjZSBib290c3RyYXBwZWQuXG4gKlxuICogSW1wbGVtZW50cyBgQXN5bmNEaXNwb3NhYmxlYCwgc28gYGF3YWl0IHVzaW5nIGNvbm4gPSBhd2FpdCBjb25uZWN0VG9DZHAoXHUyMDI2KWBcbiAqIGRpc3Bvc2VzIGl0IChraWxsaW5nIGFuIG93bmVkIGluc3RhbmNlIGFuZCBcdTIwMTQgZm9yIGEgdGhyb3ctYXdheSB0ZW1wIHZhdWx0IFx1MjAxNFxuICogcmVtb3ZpbmcgaXRzIGRpcmVjdG9yeSkgYXV0b21hdGljYWxseS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDZHBDb25uZWN0aW9uIGV4dGVuZHMgQXN5bmNEaXNwb3NhYmxlIHtcbiAgLyoqXG4gICAqIFRoZSBzaWxlbnQtYXNhci1mYWxsYmFjayB2ZXJkaWN0IGZvciBhbiBvd25lZCBpbnN0YW5jZSwgcmVhZCBsaXZlIGFmdGVyIGJvb3Q6XG4gICAqIHdoZXRoZXIgdGhlIGFwcCB2ZXJzaW9uIGl0IGlzIGFjdHVhbGx5IHJ1bm5pbmcgbWF0Y2hlcyB0aGUgc3dhcHBlZC1pbiBwaW4sIG9yXG4gICAqIHRoZSBpbnN0YWxsZXIgc2lsZW50bHkgcmV2ZXJ0ZWQgdG8gaXRzIG93biBidW5kbGVkIGFzYXIuIGB1bmRlZmluZWRgIGluIGF0dGFjaFxuICAgKiBtb2RlLCB3aGVuIG5vIGFzYXIgd2FzIHN3YXBwZWQsIG9yIHdoZW4gdGhlIHJ1bm5pbmcgdmVyc2lvbiB3YXMgdW5yZWFkYWJsZS4gQVxuICAgKiBgJ2ZhbGxiYWNrJ2AgdmVyZGljdCByZWFjaGVzIGhlcmUgb25seSB3aGVuIHRoZSB0aHJvdyBpcyBkaXNhYmxlZFxuICAgKiAoe0BsaW5rIENvbm5lY3RUb0NkcE9wdGlvbnMuc2hvdWxkVGhyb3dPblNpbGVudEFzYXJGYWxsYmFja30gYGZhbHNlYCk7XG4gICAqIG90aGVyd2lzZSBpdCB0aHJvd3MgYFNpbGVudEFzYXJGYWxsYmFja0Vycm9yYCBiZWZvcmUgdGhlIGNvbm5lY3Rpb24gaXMgY3JlYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGFzYXJGYWxsYmFjaz86IEFzYXJGYWxsYmFjayB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQ2FwdHVyZXMgYSBQTkcgc2NyZWVuc2hvdCBvZiB0aGlzIGNvbm5lY3Rpb24ncyBPYnNpZGlhbiB3aW5kb3csIHdpdGggdGhlXG4gICAqIHZhdWx0IHBhdGggcHJlLWJvdW5kLlxuICAgKlxuICAgKiBQYXNzIGB3aWR0aEluUGl4ZWxzYCArIGBoZWlnaHRJblBpeGVsc2AgdG8gcGluIHRoZSB2aWV3cG9ydCBmb3IgdGhlIGR1cmF0aW9uXG4gICAqIG9mIHRoZSBjYXB0dXJlLCBzbyB0aGUgZW1pdHRlZCBQTkcgaXMgZXhhY3RseSB0aGF0IHNpemUgd2hhdGV2ZXIgc2l6ZSB0aGVcbiAgICogd2luZG93IGhhcHBlbnMgdG8gYmUuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZXhhY3Qgc2l6ZSB0byBjYXB0dXJlIGF0LiBPbWl0IHRvIGNhcHR1cmUgdGhlIHdpbmRvdyBhdCBpdHMgbmF0dXJhbCBzaXplLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSByYXcgUE5HIGJ5dGVzLlxuICAgKi9cbiAgY2FwdHVyZVNjcmVlbnNob3Q6IChwYXJhbXM/OiBFeGNlcHQ8Q2FwdHVyZVNjcmVlbnNob3RQYXJhbXMsICdjd2QnPikgPT4gUHJvbWlzZTxVaW50OEFycmF5PjtcblxuICAvKipcbiAgICogVGhlIGJhc2UgQ0RQIFVSTCwgZS5nLiBgaHR0cDovL2xvY2FsaG9zdDo1MTg4OGAuXG4gICAqL1xuICByZWFkb25seSBjZHBVcmw6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJlc29sdmVkIGluc3RhbGxlclx1MjE5NGFwcCBjb21wYXRpYmlsaXR5IHZlcmRpY3QgZm9yIGFuIG93bmVkIGluc3RhbmNlLCB3aGVuXG4gICAqIGl0IGNvdWxkIGJlIGRldGVybWluZWQuIGB1bmRlZmluZWRgIGluIGF0dGFjaCBtb2RlLCBvciB3aGVuIHRoZSB2ZXJkaWN0IGlzXG4gICAqIHVua25vd24gKHVuZGV0ZWN0YWJsZSBzaGVsbCB2ZXJzaW9uLCBvciB0aGUgYXBwIHZlcnNpb24gaXMgYWJzZW50IGZyb20gdGhlXG4gICAqIHRhYmxlKS4gQW4gYCd1bnJ1bm5hYmxlJ2AgdmVyZGljdCByZWFjaGVzIGhlcmUgb25seSB3aGVuIHRoZSBwcm9hY3RpdmUgdGhyb3dcbiAgICogaXMgZGlzYWJsZWQgKHtAbGluayBDb25uZWN0VG9DZHBPcHRpb25zLnNob3VsZFRocm93T25JbmNvbXBhdGlibGVJbnN0YWxsZXJ9XG4gICAqIGBmYWxzZWApOyBvdGhlcndpc2UgaXQgdGhyb3dzIGBJbmNvbXBhdGlibGVJbnN0YWxsZXJWZXJzaW9uRXJyb3JgIGJlZm9yZSB0aGVcbiAgICogY29ubmVjdGlvbiBpcyBjcmVhdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgY29tcGF0aWJpbGl0eT86IEluc3RhbGxlckNvbXBhdGliaWxpdHkgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIERpc3Bvc2VzIHRoZSBjb25uZWN0aW9uOiBraWxscyBhbiBvd25lZCBpbnN0YW5jZSBhbmQgcmVtb3ZlcyBpdHMgaXNvbGF0ZWRcbiAgICogdXNlci1kYXRhIGRpci4gVGhlIHZhdWx0IGRpcmVjdG9yeSBpcyByZW1vdmVkIG9ubHkgd2hlbiBpdCBpcyBhIHRocm93LWF3YXlcbiAgICogdGVtcCB2YXVsdCAoc2VlIHtAbGluayBDb25uZWN0VG9DZHBPcHRpb25zLnNob3VsZFJlbW92ZVZhdWx0T25EaXNwb3NlfSk7IGFcbiAgICogcmVhbCB2YXVsdCBwYXNzZWQgdmlhIHtAbGluayBDb25uZWN0VG9DZHBPcHRpb25zLnZhdWx0fSBpcyBuZXZlciBkZWxldGVkLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgZGlzcG9zYWwgY29tcGxldGVzLlxuICAgKi9cbiAgZGlzcG9zZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogVGhlIHJ1bnRpbWUgRWxlY3Ryb24gY29tcGF0aWJpbGl0eSB2ZXJkaWN0IGZvciBhbiBvd25lZCBpbnN0YW5jZSwgcmVhZCBsaXZlXG4gICAqIGFmdGVyIGJvb3Q6IHdoZXRoZXIgdGhlIEVsZWN0cm9uIHZlcnNpb24gaXQgaXMgYWN0dWFsbHkgcnVubmluZyBpcyBuZXcgZW5vdWdoXG4gICAqIGZvciB0aGUgcnVubmluZyBhcHAgdmVyc2lvbi4gYHVuZGVmaW5lZGAgaW4gYXR0YWNoIG1vZGUsIG9yIHdoZW4gdGhlIHZlcmRpY3RcbiAgICogaXMgdW5rbm93biAodGhlIGxpdmUgdmVyc2lvbiB3YXMgdW5yZWFkYWJsZSwgb3IgdGhlIGFwcCB2ZXJzaW9uIGNhcnJpZXMgbm9cbiAgICogcmVjb21tZW5kZWQgRWxlY3Ryb24gdmVyc2lvbikuIEFuIG9sZCBFbGVjdHJvbiBuZXZlciBibG9ja3MgXHUyMDE0IGl0IG9ubHkgd2FybnMgXHUyMDE0XG4gICAqIHNvIHVubGlrZSB7QGxpbmsgY29tcGF0aWJpbGl0eX0gdGhlcmUgaXMgbm8gdGhyb3dpbmcgdGllci5cbiAgICovXG4gIHJlYWRvbmx5IGVsZWN0cm9uQ29tcGF0aWJpbGl0eT86IEVsZWN0cm9uQ29tcGF0aWJpbGl0eSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogRXZhbHVhdGVzIGEgc2VsZi1jb250YWluZWQgZnVuY3Rpb24gaW5zaWRlIE9ic2lkaWFuIHZpYSB0aGUgcmljaCBoZWxwZXJcbiAgICogcGF0aCwgcmVjZWl2aW5nIGB7IGFwcCwgbGliLCBvYnNpZGlhbk1vZHVsZSwgY29udGV4dCB9YCBwbHVzIGFueSBgaW5wdXRgXG4gICAqIChzaGFyZWQgaGVscGVycyBsaWtlIGB0eXBlSW50b0VkaXRvcmAgLyBgd2FpdFVudGlsYCBsaXZlIG9uIGBsaWJgKS4gTWlycm9yc1xuICAgKiB0aGUgdG9wLWxldmVsIGBldmFsSW5PYnNpZGlhbmAsIHdpdGggdGhlIHRyYW5zcG9ydCBhbmQgdmF1bHQgcGF0aCBwcmUtYm91bmRcbiAgICogdG8gdGhpcyBjb25uZWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGV2YWx1YXRpb24gcGFyYW1ldGVycyAoYGNhbGxiYWNrYCwgb3B0aW9uYWwgYGlucHV0YC9gY29udGV4dElkYCkuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHJldHVybiB2YWx1ZSBvZiBgY2FsbGJhY2tgLlxuICAgKi9cbiAgZXZhbEluT2JzaWRpYW46IDxJbnB1dCBleHRlbmRzIEdlbmVyaWNPYmplY3QsIFJlc3VsdCwgVENvbnRleHRJZCBleHRlbmRzIENvbnRleHRJZDx1bmtub3duPiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZD4oXG4gICAgcGFyYW1zOiBFeGNlcHQ8RXZhbEluT2JzaWRpYW5QYXJhbXM8SW5wdXQsIFJlc3VsdCwgVENvbnRleHRJZD4sICd0cmFuc3BvcnQnIHwgJ3ZhdWx0UGF0aCc+XG4gICkgPT4gUHJvbWlzZTxSZXN1bHQ+O1xuXG4gIC8qKlxuICAgKiBFdmFsdWF0ZXMgYSByYXcgSmF2YVNjcmlwdCBleHByZXNzaW9uIGluc2lkZSBPYnNpZGlhbiBhbmQgcmV0dXJucyB0aGVcbiAgICogbm9ybWFsaXplZCBzdHJpbmcgcmVzdWx0IChlLmcuIGAnNSdgLCBhIEpTT04gc3RyaW5nLCBvciBgJyhubyBvdXRwdXQpJ2ApLlxuICAgKlxuICAgKiBAcGFyYW0gZXhwcmVzc2lvbiAtIEEgc2VsZi1jb250YWluZWQgSmF2YVNjcmlwdCBleHByZXNzaW9uLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSByYXcgcmVzdWx0IHN0cmluZy5cbiAgICovXG4gIGludm9rZTogKGV4cHJlc3Npb246IHN0cmluZykgPT4gUHJvbWlzZTxzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBUaGUgQ0RQIHBvcnQgdGhlIGluc3RhbmNlIGlzIHJlYWNoYWJsZSBvbiAodGhlIGZyZWUgcG9ydCBjaG9zZW4gZm9yIGFuXG4gICAqIG93bmVkIGluc3RhbmNlLCBvciB0aGUgYXR0YWNoZWQge0BsaW5rIENvbm5lY3RUb0NkcE9wdGlvbnMucG9ydH0pLlxuICAgKi9cbiAgcmVhZG9ubHkgcG9ydDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgb3BlbmVkIHZhdWx0LiBFeHBvc2VzIGBwYXRoYCBhbmQgYHBvcHVsYXRlKC4uLilgIGZvciBzZWVkaW5nIGZpbGVzLlxuICAgKi9cbiAgcmVhZG9ubHkgdmF1bHQ6IFRlbXBvcmFyeVZhdWx0O1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBjb25uZWN0VG9DZHB9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3RUb0NkcE9wdGlvbnMge1xuICAvKipcbiAgICogVGltZW91dCBpbiBtaWxsaXNlY29uZHMgZm9yIGluZGl2aWR1YWwgQ0RQIGNvbW1hbmRzLlxuICAgKlxuICAgKiBBIHRlc3QncyBjbG9zdXJlIHRyYXZlbHMgYXMgb25lIGBSdW50aW1lLmV2YWx1YXRlYCBjb21tYW5kLCBzbyB0aGlzIGlzIGFsc29cbiAgICogdGhlIGRlc2t0b3AgcGVyLWV2YWwgY2FwLiBUaGUgZGVmYXVsdCBpcyBgREVGQVVMVF9FVkFMX0NBUF9JTl9NSUxMSVNFQ09ORFNgLFxuICAgKiBleHBvcnRlZCBmcm9tIHRoZSBwYWNrYWdlIHJvb3QgXHUyMDE0IGltcG9ydCBpdCByYXRoZXIgdGhhbiByZXN0YXRpbmcgdGhlIG51bWJlcixcbiAgICogc28gYSBjbG9zdXJlIHNpemVkIGFnYWluc3QgdGhlIGNhcCBmb2xsb3dzIGl0IGlmIGl0IGV2ZXIgbW92ZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAzMDAwMGBcbiAgICovXG4gIHJlYWRvbmx5IGNvbW1hbmRUaW1lb3V0SW5NaWxsaXNlY29uZHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB2YXVsdCdzICoqY29uZmlnIGZvbGRlcioqIFx1MjAxNCBPYnNpZGlhbidzIHBlci12YXVsdCAqT3ZlcnJpZGUgY29uZmlnXG4gICAqIGZvbGRlciogc2V0dGluZywgZS5nLiBgJy5vYnNpZGlhbi1kZXNrdG9wJ2AuIFNldCBpdCB0byBvcGVuIGEgdmF1bHQgdGhhdFxuICAgKiBrZWVwcyBpdHMgc2V0dGluZ3Mgc29tZXdoZXJlIG90aGVyIHRoYW4gYC5vYnNpZGlhbmA7IHdpdGhvdXQgaXQgc3VjaCBhIHZhdWx0XG4gICAqIG9wZW5zIGFnYWluc3QgYC5vYnNpZGlhbmAsIHdoaWNoIGZvciBhIHZhdWx0IHRoYXQgaGFzIGEgc3RhbGUgb25lIGJlc2lkZSB0aGVcbiAgICogcmVhbCBmb2xkZXIgbWVhbnMgb3BlbmluZyBzdWNjZXNzZnVsbHkgYWdhaW5zdCB0aGUgd3Jvbmcgc2V0dGluZ3MuXG4gICAqXG4gICAqIE11c3Qgc3RhcnQgd2l0aCBhIGRvdCwgbXVzdCBub3QgYmUgdGhlIGJhcmUgZG90LCBhbmQgbXVzdCBub3QgY29udGFpbiBhIHBhdGhcbiAgICogc2VwYXJhdG9yIFx1MjAxNCBhbnl0aGluZyBlbHNlIHRocm93cyBiZWZvcmUgT2JzaWRpYW4gbGF1bmNoZXMsIHNpbmNlIE9ic2lkaWFuXG4gICAqIHdvdWxkIHNpbGVudGx5IHN1YnN0aXR1dGUgYC5vYnNpZGlhbmAuIEFmdGVyIHRoZSB2YXVsdCBvcGVucywgaXRzIGFjdHVhbFxuICAgKiBgYXBwLnZhdWx0LmNvbmZpZ0RpcmAgaXMgcmVhZCBiYWNrIGFuZCBhIG1pc21hdGNoIHRocm93c1xuICAgKiBgQ29uZmlnRGlyZWN0b3J5RmFsbGJhY2tFcnJvcmAuXG4gICAqXG4gICAqIElnbm9yZWQgaW4gYXR0YWNoIG1vZGUgKHtAbGluayBDb25uZWN0VG9DZHBPcHRpb25zLnBvcnR9IHNldCksIHdoZXJlIHRoZVxuICAgKiB2YXVsdCBpcyBvcGVuZWQgYnkgdGhlIHVzZXIncyBvd24gT2JzaWRpYW4gdW5kZXIgaXRzIG93biBjb25maWcuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB1bmRlZmluZWRgIChPYnNpZGlhbidzIG93biBkZWZhdWx0LCBgLm9ic2lkaWFuYClcbiAgICovXG4gIHJlYWRvbmx5IGNvbmZpZ0RpcmVjdG9yeT86IHN0cmluZztcblxuICAvKipcbiAgICogR3JhY2Ugd2luZG93IGluIG1pbGxpc2Vjb25kcyBmb3IgZmFzdC1mYWlsaW5nIGEgZGVhZCBib290IG9mIHRoZSBvd25lZFxuICAgKiBpbnN0YW5jZSBcdTIwMTQgdGhlIHJlbmRlcmVyIGxvYWRlZCBidXQgdGhlIGFwcCBuZXZlciBib290c3RyYXBwZWQgKGVtcHR5XG4gICAqIGA8Ym9keT5gLCBubyBgd2luZG93LmFwcGApLCB0aGUgdGVybWluYWwgc3RhdGUgd2hlbiB0aGUgYXNhciBjYW5ub3QgcnVuIG9uXG4gICAqIHRoZSBsYXVuY2hlZCBFbGVjdHJvbiBzaGVsbC4gT25jZSBpdCBoYXMgaGVsZCB0aGlzIGxvbmcgYVxuICAgKiBgUmVuZGVyZXJGYWlsZWRUb0luaXRpYWxpemVFcnJvcmAgaXMgdGhyb3duIGluc3RlYWQgb2Ygd2FpdGluZyBvdXQgdGhlIGZ1bGxcbiAgICogcmVhZGluZXNzIHRpbWVvdXQuIElnbm9yZWQgaW4gYXR0YWNoIG1vZGUgKHtAbGluayBwb3J0fSBzZXQpLiBTZXQgYDBgIHRvXG4gICAqIGRpc2FibGUgZmFzdC1mYWlsLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgMTAwMDBgXG4gICAqL1xuICByZWFkb25seSBkZWFkQm9vdEdyYWNlSW5NaWxsaXNlY29uZHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIENEUCBob3N0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgJ2xvY2FsaG9zdCdgXG4gICAqL1xuICByZWFkb25seSBob3N0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBPYnNpZGlhbiB3aW5kb3cgaXMgc2hvd24gb24gc2NyZWVuLiBEZWZhdWx0cyB0byBgdHJ1ZWA7IHNldFxuICAgKiBgZmFsc2VgIHRvIGxhdW5jaCBpdCBvZmYtc2NyZWVuLlxuICAgKiBJZ25vcmVkIGluIGF0dGFjaCBtb2RlICh7QGxpbmsgcG9ydH0gc2V0KS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBpc09ic2lkaWFuQXBwVmlzaWJsZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFBpbnMgdGhlIEVsZWN0cm9uIHNoZWxsIChpbnN0YWxsZXIgYnVpbGQpIHRoZSBvd25lZCBpbnN0YW5jZSBydW5zLiBBY2NlcHRzXG4gICAqIGAneC55LnonYCwgYCdwdWJsaWMtbGF0ZXN0J2AsIG9yIGAnY2F0YWx5c3QtbGF0ZXN0J2AuIElnbm9yZWQgd2hlblxuICAgKiB7QGxpbmsgcG9ydH0gKGF0dGFjaCBtb2RlKSBpcyBzZXQuIFdoZW4gb21pdHRlZCwgdGhlIGluc3RhbGxlZCBzaGVsbCBpcyB1c2VkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdW5kZWZpbmVkYFxuICAgKi9cbiAgcmVhZG9ubHkgb2JzaWRpYW5JbnN0YWxsZXJWZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQaW5zIHRoZSBPYnNpZGlhbiBhcHAgdmVyc2lvbiAoYXNhcikgdGhlIG93bmVkIGluc3RhbmNlIHJ1bnMuIEFjY2VwdHNcbiAgICogYCd4LnkueidgLCBgJ3B1YmxpYy1sYXRlc3QnYCwgb3IgYCdjYXRhbHlzdC1sYXRlc3QnYC4gSWdub3JlZCB3aGVuXG4gICAqIHtAbGluayBwb3J0fSAoYXR0YWNoIG1vZGUpIGlzIHNldC4gV2hlbiBvbWl0dGVkLCB0aGUgaW5zdGFsbGVkIHZlcnNpb24gaXMgdXNlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYHVuZGVmaW5lZGBcbiAgICovXG4gIHJlYWRvbmx5IG9ic2lkaWFuVmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogQ0RQIHBvcnQgb2YgYW4gYWxyZWFkeS1ydW5uaW5nIE9ic2lkaWFuIHRvICoqYXR0YWNoKiogdG8uIFdoZW4gb21pdHRlZCwgYW5cbiAgICogaXNvbGF0ZWQgaW5zdGFuY2UgaXMgbGF1bmNoZWQgb24gYW4gYXV0b21hdGljYWxseSBjaG9zZW4gZnJlZSBwb3J0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdW5kZWZpbmVkYFxuICAgKi9cbiAgcmVhZG9ubHkgcG9ydD86IG51bWJlcjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBsYXVuY2ggdGhlIG93bmVkIGluc3RhbmNlIHdpdGggQ2hyb21pdW0ncyBzYW5kYm94IGRpc2FibGVkXG4gICAqIChgLS1uby1zYW5kYm94YCkuXG4gICAqXG4gICAqIE5lZWRlZCB0byBib290IG9uIExpbnV4IHdpdGhvdXQgYSBjb3JyZWN0bHktY29uZmlndXJlZCBzZXR1aWRcbiAgICogYGNocm9tZS1zYW5kYm94YCBoZWxwZXIgKGUuZy4gYW4gaW5zdGFsbGVyLWV4dHJhY3RlZCBwb3J0YWJsZSBzaGVsbCwgb3IgQ0lcbiAgICogcnVubmluZyBhcyBhIG5vbi1yb290IHVzZXIpOyBoYXJtbGVzcyBvbiBXaW5kb3dzL21hY09TLiBJZ25vcmVkIGluIGF0dGFjaFxuICAgKiBtb2RlICh7QGxpbmsgcG9ydH0gc2V0KS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkRGlzYWJsZVNhbmRib3g/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHJlbW92ZSB0aGUgdmF1bHQgZGlyZWN0b3J5IG9uIHtAbGluayBDZHBDb25uZWN0aW9uLmRpc3Bvc2V9LlxuICAgKlxuICAgKiBXaGVuIG9taXR0ZWQsIGRlZmF1bHRzIHRvIGB0cnVlYCBmb3IgYW4gaW1wbGljaXQgdGhyb3ctYXdheSB0ZW1wIHZhdWx0XG4gICAqICh7QGxpbmsgdmF1bHR9IG5vdCBnaXZlbikgYW5kIGBmYWxzZWAgd2hlbiBhIHtAbGluayB2YXVsdH0gcGF0aCBpcyBnaXZlbiwgc29cbiAgICogYSByZWFsIHZhdWx0IGlzIG5ldmVyIGRlbGV0ZWQuIFNldCBleHBsaWNpdGx5IHRvIG92ZXJyaWRlLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkUmVtb3ZlVmF1bHRPbkRpc3Bvc2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGFuICoqdW5ydW5uYWJsZSoqIGluc3RhbGxlclx1MjE5NGFwcCB2ZXJzaW9uIHBhaXIgZmFpbHMgZmFzdCBiZWZvcmUgbGF1bmNoLlxuICAgKlxuICAgKiBXaGVuIGB0cnVlYCAodGhlIGRlZmF1bHQpLCBhbiBpbnN0YWxsZXIgYmVsb3cgdGhlIGFwcCdzIHJ1biBmbG9vciB0aHJvd3NcbiAgICogYEluY29tcGF0aWJsZUluc3RhbGxlclZlcnNpb25FcnJvcmAgZnJvbSB2ZXJzaW9uIHJlc29sdXRpb24gYmVmb3JlIGFueXRoaW5nIGlzXG4gICAqIGRvd25sb2FkZWQgb3IgbGF1bmNoZWQuIFNldCBgZmFsc2VgIHRvIGxldCB0aGUgcGluIHByb2NlZWQgdG8gbGF1bmNoIFx1MjAxNCB3aGVyZVxuICAgKiB0aGUgcmVhY3RpdmUgZGVhZC1ib290IGZhc3QtZmFpbCBzdGlsbCBjYXRjaGVzIHRoZSBibGFjay1zY3JlZW4gYm9vdCwgYW5kIHRoZVxuICAgKiBgJ3VucnVubmFibGUnYCB2ZXJkaWN0IGlzIHN1cmZhY2VkIG9uIHtAbGluayBDZHBDb25uZWN0aW9uLmNvbXBhdGliaWxpdHl9XG4gICAqIHJhdGhlciB0aGFuIHRocm93bi4gSWdub3JlZCBpbiBhdHRhY2ggbW9kZSAoe0BsaW5rIHBvcnR9IHNldCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkVGhyb3dPbkluY29tcGF0aWJsZUluc3RhbGxlcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYSBwb3N0LWJvb3QgKipzaWxlbnQgYXNhciBmYWxsYmFjayoqIGZhaWxzIGZhc3QuXG4gICAqXG4gICAqIFdoZW4gYW4gYXNhciBpcyBzd2FwcGVkIG9udG8gYW4gaW5zdGFsbGVyIHNoZWxsIHRvbyBvbGQgZm9yIGl0LCB0aGUgaW5zdGFuY2VcbiAgICogbWF5IHNpbGVudGx5IHJldmVydCB0byB0aGUgaW5zdGFsbGVyJ3Mgb3duIGJ1bmRsZWQgYXNhciBhbmQgcnVuIHRoZSAqKndyb25nXG4gICAqIChvbGRlcikqKiB2ZXJzaW9uIGJlaGluZCBhIGhlYWx0aHkgVUkuIFdoZW4gYHRydWVgICh0aGUgZGVmYXVsdCksIHRoZSBydW5uaW5nXG4gICAqIGFwcCB2ZXJzaW9uIGlzIHZlcmlmaWVkIGFnYWluc3QgdGhlIHBpbiBwb3N0LWJvb3QgYW5kIGEgbWlzbWF0Y2ggdGhyb3dzXG4gICAqIGBTaWxlbnRBc2FyRmFsbGJhY2tFcnJvcmAuIFNldCBgZmFsc2VgIHRvIGxldCB0aGUgYm9vdCBwcm9jZWVkIFx1MjAxNCB0aGUgbWlzbWF0Y2hcbiAgICogaXMgdGhlbiBzdXJmYWNlZCBvbiB7QGxpbmsgQ2RwQ29ubmVjdGlvbi5hc2FyRmFsbGJhY2t9IHJhdGhlciB0aGFuIHRocm93bi5cbiAgICogSWdub3JlZCBpbiBhdHRhY2ggbW9kZSAoe0BsaW5rIHBvcnR9IHNldCkgYW5kIHdoZW4gbm8gYXNhciBpcyBzd2FwcGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFRocm93T25TaWxlbnRBc2FyRmFsbGJhY2s/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBvd25lZC1pbnN0YW5jZSBjb21wYXRpYmlsaXR5ICoqbmFnIHdhcm5pbmdzKiogYXJlIGVtaXR0ZWQuXG4gICAqXG4gICAqIENvdmVycyBib3RoIHRoZSBvZmZsaW5lIGluc3RhbGxlclx1MjE5NGFwcCB3YXJuaW5nIGFuZCB0aGUgcG9zdC1ib290XG4gICAqIHJ1bnRpbWUtRWxlY3Ryb24gd2FybmluZy4gV2hlbiBgdHJ1ZWAgKHRoZSBkZWZhdWx0KSBlYWNoIGZpcmVzIHZpYSB0aGUgaGFybmVzc1xuICAgKiBsb2c7IHNldCBgZmFsc2VgIHRvIHNpbGVuY2UgYm90aCBcdTIwMTQgdGhlIHZlcmRpY3RzIGFyZSBzdGlsbCBzdXJmYWNlZCBvblxuICAgKiB7QGxpbmsgQ2RwQ29ubmVjdGlvbi5jb21wYXRpYmlsaXR5fSAvIHtAbGluayBDZHBDb25uZWN0aW9uLmVsZWN0cm9uQ29tcGF0aWJpbGl0eX0sXG4gICAqIG9ubHkgdGhlIGxvZyBpcyBzdXBwcmVzc2VkLiBJZ25vcmVkIGluIGF0dGFjaCBtb2RlICh7QGxpbmsgcG9ydH0gc2V0KS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRXYXJuT25Db21wYXRpYmlsaXR5SXNzdWVzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQWJzb2x1dGUgcGF0aCB0byBhbiBleGlzdGluZyB2YXVsdCB0byBvcGVuLiBXaGVuIG9taXR0ZWQsIGFuIGVtcHR5IHRlbXBvcmFyeVxuICAgKiB2YXVsdCBpcyBjcmVhdGVkIChhbmQgcmVtb3ZlZCBvbiBkaXNwb3NlIHVubGVzc1xuICAgKiB7QGxpbmsgc2hvdWxkUmVtb3ZlVmF1bHRPbkRpc3Bvc2V9IHNheXMgb3RoZXJ3aXNlKS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHVuZGVmaW5lZGBcbiAgICovXG4gIHJlYWRvbmx5IHZhdWx0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgcmVzb2x2ZWQgQ0RQIGhvc3QvcG9ydCBwYWlyLlxuICovXG5pbnRlcmZhY2UgUmVzb2x2ZWRFbmRwb2ludCB7XG4gIGhvc3Q6IHN0cmluZztcbiAgcG9ydDogbnVtYmVyO1xufVxuXG4vKipcbiAqIExhdW5jaGVzIChvciBhdHRhY2hlcyB0bykgYSBDRFAtZW5hYmxlZCBPYnNpZGlhbiBpbnN0YW5jZSwgb3BlbnMgYSB2YXVsdCwgYW5kXG4gKiBib290c3RyYXBzIHRoZSBydW50aW1lIGhlbHBlciBuYW1lc3BhY2UsIHJldHVybmluZyBhIGRpc3Bvc2FibGUgY29ubmVjdGlvbi5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIENvbm5lY3Rpb24gb3B0aW9ucy5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGxpdmUge0BsaW5rIENkcENvbm5lY3Rpb259LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29ubmVjdFRvQ2RwKG9wdGlvbnM/OiBDb25uZWN0VG9DZHBPcHRpb25zKTogUHJvbWlzZTxDZHBDb25uZWN0aW9uPiB7XG4gIGNvbnN0IHRyYW5zcG9ydE9wdGlvbnMgPSBidWlsZENkcFRyYW5zcG9ydE9wdGlvbnMob3B0aW9ucyk7XG4gIGF3YWl0IHN3ZWVwTGVmdG92ZXJzKHRyYW5zcG9ydE9wdGlvbnMpO1xuICBjb25zdCB0cmFuc3BvcnQgPSBhd2FpdCBjcmVhdGVUcmFuc3BvcnRGcm9tT3B0aW9ucyh0cmFuc3BvcnRPcHRpb25zKTtcbiAgY29uc3Qgc2hvdWxkUmVtb3ZlVmF1bHRPbkRpc3Bvc2UgPSBvcHRpb25zPy5zaG91bGRSZW1vdmVWYXVsdE9uRGlzcG9zZSA/PyAob3B0aW9ucz8udmF1bHQgPT09IHVuZGVmaW5lZCk7XG4gIGNvbnN0IHZhdWx0ID0gbmV3IFRlbXBvcmFyeVZhdWx0KG9wdGlvbnM/LnZhdWx0LCB7IHNob3VsZFJlbW92ZURpcmVjdG9yeU9uRGlzcG9zZTogc2hvdWxkUmVtb3ZlVmF1bHRPbkRpc3Bvc2UgfSk7XG5cbiAgLy8gVGhlIGhlYWRsZXNzIGRlZmF1bHRzIGdvIG9ubHkgaW50byBhIHZhdWx0IHRoZSBoYXJuZXNzIG1hZGUgXHUyMDE0IHRoZSBzYW1lXG4gIC8vIGBvcHRpb25zLnZhdWx0ID09PSB1bmRlZmluZWRgIGRpc2NyaW1pbmF0b3IgdGhlIGRpc3Bvc2FsIGFib3ZlIHR1cm5zIG9uLiBBXG4gIC8vIGNhbGxlci1zdXBwbGllZCB2YXVsdCBpcyBhIHJlYWwgb25lIHRoZSB1c2VyIGtlZXBzLCBhbmQgYSBkZWJ1Z2dpbmcgc2Vzc2lvblxuICAvLyBoYXMgbm8gYnVzaW5lc3MgcmV3cml0aW5nIGl0cyBzZXR0aW5ncy5cbiAgaWYgKG9wdGlvbnM/LnZhdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICBhd2FpdCBlbnN1cmVIZWFkbGVzc1ZhdWx0Q29uZmlnKHtcbiAgICAgIGNvbmZpZ0RpcmVjdG9yeTogcmVzb2x2ZU93bmVkQ29uZmlnRGlyZWN0b3J5KHRyYW5zcG9ydE9wdGlvbnMpLFxuICAgICAgbGFiZWw6IHRyYW5zcG9ydE9wdGlvbnMudHlwZSxcbiAgICAgIHZhdWx0UGF0aDogdmF1bHQucGF0aFxuICAgIH0pO1xuICB9XG5cbiAgLy8gUmVnaXN0ZXJpbmcgdGhlIHZhdWx0IGlzIHdoYXQgbGF1bmNoZXMgdGhlIG93bmVkIGluc3RhbmNlIChwcm92aXNpb25zIHRoZVxuICAvLyBhc2FyLCBvcGVucyB0aGUgdmF1bHQsIGFuZCBib290c3RyYXBzIHRoZSBoZWxwZXIgbmFtZXNwYWNlKSwgb3Igb3BlbnMgdGhlXG4gIC8vIHZhdWx0IGluIHRoZSBhdHRhY2hlZCBpbnN0YW5jZS5cbiAgYXdhaXQgdmF1bHQucmVnaXN0ZXIodHJhbnNwb3J0KTtcblxuICBjb25zdCB7IGhvc3QsIHBvcnQgfSA9IHJlc29sdmVFbmRwb2ludCh0cmFuc3BvcnQsIG9wdGlvbnMpO1xuICBjb25zdCBjZHBVcmwgPSBgaHR0cDovLyR7aG9zdH06JHtTdHJpbmcocG9ydCl9YDtcbiAgY29uc3QgYXNhckZhbGxiYWNrID0gdHJhbnNwb3J0IGluc3RhbmNlb2YgRGVza3RvcENkcFRyYW5zcG9ydCA/IHRyYW5zcG9ydC5nZXRBc2FyRmFsbGJhY2soKSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgY29tcGF0aWJpbGl0eSA9IHRyYW5zcG9ydCBpbnN0YW5jZW9mIERlc2t0b3BDZHBUcmFuc3BvcnQgPyB0cmFuc3BvcnQuZ2V0Q29tcGF0aWJpbGl0eSgpIDogdW5kZWZpbmVkO1xuICBjb25zdCBlbGVjdHJvbkNvbXBhdGliaWxpdHkgPSB0cmFuc3BvcnQgaW5zdGFuY2VvZiBEZXNrdG9wQ2RwVHJhbnNwb3J0ID8gdHJhbnNwb3J0LmdldEVsZWN0cm9uQ29tcGF0aWJpbGl0eSgpIDogdW5kZWZpbmVkO1xuXG4gIGNvbnN0IGNvbm5lY3Rpb246IENkcENvbm5lY3Rpb24gPSB7XG4gICAgY2RwVXJsLFxuICAgIC4uLihhc2FyRmFsbGJhY2sgJiYgeyBhc2FyRmFsbGJhY2sgfSksXG4gICAgLi4uKGNvbXBhdGliaWxpdHkgJiYgeyBjb21wYXRpYmlsaXR5IH0pLFxuICAgIC4uLihlbGVjdHJvbkNvbXBhdGliaWxpdHkgJiYgeyBlbGVjdHJvbkNvbXBhdGliaWxpdHkgfSksXG5cbiAgICBhc3luYyBjYXB0dXJlU2NyZWVuc2hvdChwYXJhbXM/OiBFeGNlcHQ8Q2FwdHVyZVNjcmVlbnNob3RQYXJhbXMsICdjd2QnPik6IFByb21pc2U8VWludDhBcnJheT4ge1xuICAgICAgLy8gRXZlcnkgdHJhbnNwb3J0IGBjb25uZWN0VG9DZHBgIGJ1aWxkcyBpcyBhIERlc2t0b3BDZHBUcmFuc3BvcnQsIHdoaWNoXG4gICAgICAvLyBpbXBsZW1lbnRzIHRoZSBvcHRpb25hbCBtZXRob2QgXHUyMDE0IGJ1dCB0aGUgaW50ZXJmYWNlIHN0aWxsIHR5cGVzIGl0XG4gICAgICAvLyBvcHRpb25hbCwgc28gdGhlIGFic2VuY2UgaXMgcmVwb3J0ZWQgcmF0aGVyIHRoYW4gc2lsZW50bHkgdGhyb3duIGF0LlxuICAgICAgaWYgKCF0cmFuc3BvcnQuY2FwdHVyZVNjcmVlbnNob3QpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb25uZWN0VG9DZHA6IHRoaXMgdHJhbnNwb3J0IGNhbm5vdCBjYXB0dXJlIHNjcmVlbnNob3RzLicpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJhbnNwb3J0LmNhcHR1cmVTY3JlZW5zaG90KHsgLi4ucGFyYW1zLCBjd2Q6IHZhdWx0LnBhdGggfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGRpc3Bvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBUaGUgdmF1bHQgY2FycmllcyBgc2hvdWxkUmVtb3ZlVmF1bHRPbkRpc3Bvc2VgIGl0c2VsZiAoaGFuZGVkIHRvIGl0cyBjb25zdHJ1Y3RvciBhYm92ZSksIHNvXG4gICAgICAgIC8vIHRoaXMgaXMgb25lIGNhbGwgcmF0aGVyIHRoYW4gYSBicmFuY2g6IGl0IGFsd2F5cyB1bnJlZ2lzdGVycywgYW5kIHJlbW92ZXMgdGhlIGRpcmVjdG9yeSBvbmx5XG4gICAgICAgIC8vIHdoZW4gdGhhdCBmbGFnIHNheXMgdG8uXG4gICAgICAgIGF3YWl0IHZhdWx0LmRpc3Bvc2UodHJhbnNwb3J0KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGF3YWl0IHRyYW5zcG9ydC5kaXNwb3NlPy4oKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgZXZhbEluT2JzaWRpYW48SW5wdXQgZXh0ZW5kcyBHZW5lcmljT2JqZWN0LCBSZXN1bHQsIFRDb250ZXh0SWQgZXh0ZW5kcyBDb250ZXh0SWQ8dW5rbm93bj4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ+KFxuICAgICAgcGFyYW1zOiBFeGNlcHQ8RXZhbEluT2JzaWRpYW5QYXJhbXM8SW5wdXQsIFJlc3VsdCwgVENvbnRleHRJZD4sICd0cmFuc3BvcnQnIHwgJ3ZhdWx0UGF0aCc+XG4gICAgKTogUHJvbWlzZTxSZXN1bHQ+IHtcbiAgICAgIHJldHVybiBldmFsSW5PYnNpZGlhbjxJbnB1dCwgUmVzdWx0LCBUQ29udGV4dElkPih7IC4uLnBhcmFtcywgdHJhbnNwb3J0LCB2YXVsdFBhdGg6IHZhdWx0LnBhdGggfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGludm9rZShleHByZXNzaW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgcmV0dXJuIHRyYW5zcG9ydC5ldmFsdWF0ZShleHByZXNzaW9uLCB7IGN3ZDogdmF1bHQucGF0aCB9KTtcbiAgICB9LFxuXG4gICAgcG9ydCxcblxuICAgIGFzeW5jIFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgIGF3YWl0IGNvbm5lY3Rpb24uZGlzcG9zZSgpO1xuICAgIH0sXG5cbiAgICB2YXVsdFxuICB9O1xuXG4gIHJldHVybiBjb25uZWN0aW9uO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUge0BsaW5rIE9ic2lkaWFuQ2RwVHJhbnNwb3J0T3B0aW9uc30gZm9yIGEgY29ubmVjdGlvbiwgdGhyZWFkaW5nIG9ubHlcbiAqIHRoZSBwcm92aWRlZCB7QGxpbmsgQ29ubmVjdFRvQ2RwT3B0aW9uc30gdGhyb3VnaCAob3duZWQtdmlzaWJsZSBkZWZhdWx0cyB0b1xuICogYHRydWVgLCB1bmxpa2UgdGhlIGhpZGRlbi1ieS1kZWZhdWx0IHRlc3QgdHJhbnNwb3J0cykuIFVuc2V0IGtub2JzIHBhc3MgdGhyb3VnaFxuICogYXMgYHVuZGVmaW5lZGAgYW5kIGFyZSByZWFkIHdpdGggYD8/IGRlZmF1bHRgIC8gYCE9PSB1bmRlZmluZWRgIGd1YXJkc1xuICogZG93bnN0cmVhbSwgc28gYW4gZXhwbGljaXQgYHVuZGVmaW5lZGAgaXMgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBhbiBhYnNlbnQga2V5LlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIGNvbm5lY3Rpb24gb3B0aW9ucy5cbiAqIEByZXR1cm5zIFRoZSB0cmFuc3BvcnQgb3B0aW9ucyB0byBjcmVhdGUgdGhlIGNvbm5lY3Rpb24ncyB0cmFuc3BvcnQgZnJvbS5cbiAqL1xuZnVuY3Rpb24gYnVpbGRDZHBUcmFuc3BvcnRPcHRpb25zKG9wdGlvbnM/OiBDb25uZWN0VG9DZHBPcHRpb25zKTogT2JzaWRpYW5DZHBUcmFuc3BvcnRPcHRpb25zIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxPYnNpZGlhbkNkcFRyYW5zcG9ydE9wdGlvbnM+KHtcbiAgICBjb21tYW5kVGltZW91dEluTWlsbGlzZWNvbmRzOiBvcHRpb25zPy5jb21tYW5kVGltZW91dEluTWlsbGlzZWNvbmRzLFxuICAgIGNvbmZpZ0RpcmVjdG9yeTogb3B0aW9ucz8uY29uZmlnRGlyZWN0b3J5LFxuICAgIGRlYWRCb290R3JhY2VJbk1pbGxpc2Vjb25kczogb3B0aW9ucz8uZGVhZEJvb3RHcmFjZUluTWlsbGlzZWNvbmRzLFxuICAgIGhvc3Q6IG9wdGlvbnM/Lmhvc3QsXG4gICAgaXNPYnNpZGlhbkFwcFZpc2libGU6IG9wdGlvbnM/LmlzT2JzaWRpYW5BcHBWaXNpYmxlID8/IHRydWUsXG4gICAgb2JzaWRpYW5JbnN0YWxsZXJWZXJzaW9uOiBvcHRpb25zPy5vYnNpZGlhbkluc3RhbGxlclZlcnNpb24sXG4gICAgb2JzaWRpYW5WZXJzaW9uOiBvcHRpb25zPy5vYnNpZGlhblZlcnNpb24sXG4gICAgcG9ydDogb3B0aW9ucz8ucG9ydCxcbiAgICBzaG91bGREaXNhYmxlU2FuZGJveDogb3B0aW9ucz8uc2hvdWxkRGlzYWJsZVNhbmRib3gsXG4gICAgc2hvdWxkVGhyb3dPbkluY29tcGF0aWJsZUluc3RhbGxlcjogb3B0aW9ucz8uc2hvdWxkVGhyb3dPbkluY29tcGF0aWJsZUluc3RhbGxlcixcbiAgICBzaG91bGRUaHJvd09uU2lsZW50QXNhckZhbGxiYWNrOiBvcHRpb25zPy5zaG91bGRUaHJvd09uU2lsZW50QXNhckZhbGxiYWNrLFxuICAgIHNob3VsZFdhcm5PbkNvbXBhdGliaWxpdHlJc3N1ZXM6IG9wdGlvbnM/LnNob3VsZFdhcm5PbkNvbXBhdGliaWxpdHlJc3N1ZXMsXG4gICAgdHlwZTogJ29ic2lkaWFuLWNkcCdcbiAgfSk7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIENEUCBob3N0L3BvcnQgZm9yIHRoZSBjb25uZWN0aW9uOiBmcm9tIHRoZSBvd25lZCBpbnN0YW5jZSdzXG4gKiBsYXVuY2hlZCBlbmRwb2ludCB3aGVuIHByZXNlbnQsIG90aGVyd2lzZSBmcm9tIHRoZSBhdHRhY2ggb3B0aW9ucy5cbiAqXG4gKiBAcGFyYW0gdHJhbnNwb3J0IC0gVGhlIHRyYW5zcG9ydCBjcmVhdGVkIGZvciB0aGlzIGNvbm5lY3Rpb24uXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBjb25uZWN0aW9uIG9wdGlvbnMuXG4gKiBAcmV0dXJucyBUaGUgcmVzb2x2ZWQgaG9zdCBhbmQgcG9ydC5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIHBvcnQgY2Fubm90IGJlIGRldGVybWluZWQuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVFbmRwb2ludCh0cmFuc3BvcnQ6IHVua25vd24sIG9wdGlvbnM6IENvbm5lY3RUb0NkcE9wdGlvbnMgfCB1bmRlZmluZWQpOiBSZXNvbHZlZEVuZHBvaW50IHtcbiAgaWYgKHRyYW5zcG9ydCBpbnN0YW5jZW9mIERlc2t0b3BDZHBUcmFuc3BvcnQpIHtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRyYW5zcG9ydC5nZXRPd25lZEluc3RhbmNlRW5kcG9pbnQoKTtcbiAgICBpZiAoZW5kcG9pbnQpIHtcbiAgICAgIHJldHVybiB7IGhvc3Q6IGVuZHBvaW50Lmhvc3QsIHBvcnQ6IGVuZHBvaW50LnBvcnQgfTtcbiAgICB9XG4gIH1cblxuICBpZiAob3B0aW9ucz8ucG9ydCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHsgaG9zdDogb3B0aW9ucy5ob3N0ID8/IERFRkFVTFRfQ0RQX0hPU1QsIHBvcnQ6IG9wdGlvbnMucG9ydCB9O1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKCdjb25uZWN0VG9DZHA6IGNvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIENEUCBwb3J0LicpO1xufVxuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGhvc3Qtc2lkZSB0ZW1wIGRpcmVjdG9yaWVzIGVhcmxpZXIgcnVucyBsZWFrZWQsIGJlZm9yZSB0aGlzXG4gKiBjb25uZWN0aW9uIGFkZHMgaXRzIG93bi5cbiAqXG4gKiBgY29ubmVjdFRvQ2RwYCBtaW50cyB0aGUgc2FtZSBgdGVtcC12YXVsdC0qYCAvIG93bmVkIGB1c2VyZGF0YS0qYCBkaXJlY3Rvcmllc1xuICogdGhlIHRlc3QgZ2xvYmFsIHNldHVwIGRvZXMsIGFuZCBhbiBhZC1ob2MgZGVidWdnaW5nIHNlc3Npb24gaXMgZXhhY3RseSB0aGVcbiAqIGtpbmQgdGhhdCBnZXRzIGtpbGxlZCB3aXRoIGEgbGVmdG92ZXIgYmVoaW5kIFx1MjAxNCBzbyBpdCBzd2VlcHMgdG9vLiBBZ2UtZ2F0ZWQgYW5kXG4gKiBiZXN0LWVmZm9ydDsgc2VlIHRoZSBjb3JlJ3MgYHN3ZWVwTGVmdG92ZXJzYC5cbiAqXG4gKiBAcGFyYW0gdHJhbnNwb3J0T3B0aW9ucyAtIFRoZSByZXNvbHZlZCB0cmFuc3BvcnQgb3B0aW9ucyAoc291cmNlIG9mIHRoZSBzd2VlcCBrbm9icykuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHN3ZWVwTGVmdG92ZXJzKHRyYW5zcG9ydE9wdGlvbnM6IE9ic2lkaWFuQ2RwVHJhbnNwb3J0T3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoIXdpbGxTd2VlcExlZnRvdmVycyh0cmFuc3BvcnRPcHRpb25zKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3dlZXBIb3N0TGVmdG92ZXJzKHtcbiAgICAgIG1heEFnZUluTWlsbGlzZWNvbmRzOiByZXNvbHZlTGVmdG92ZXJNYXhBZ2VJbk1pbGxpc2Vjb25kcyh0cmFuc3BvcnRPcHRpb25zKVxuICAgIH0pO1xuICAgIGlmIChyZXN1bHQucmVtb3ZlZENvdW50ID4gMCB8fCByZXN1bHQuZmFpbGVkQ291bnQgPiAwKSB7XG4gICAgICBsb2coXG4gICAgICAgIGBbY29ubmVjdC10by1jZHBdIFN3ZXB0ICR7U3RyaW5nKHJlc3VsdC5yZW1vdmVkQ291bnQpfSBsZWZ0b3ZlciB0ZW1wIGRpcmVjdG9yKGllcykgZnJvbSBlYXJsaWVyIHJ1bnMgYFxuICAgICAgICAgICsgYCgke1N0cmluZyhyZXN1bHQuZmFpbGVkQ291bnQpfSBzdGlsbCBpbiB1c2UpLmBcbiAgICAgICk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIGxvZyhgW2Nvbm5lY3QtdG8tY2RwXSBMZWZ0b3ZlciBzd2VlcCBlcnJvciAobm9uLWZhdGFsKTogJHtTdHJpbmcoZXJyb3IpfWApO1xuICB9XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBNEJBLDhCQUErQjtBQUMvQixtQ0FBMEM7QUFDMUMsOEJBSU87QUFDUCxpQkFBb0I7QUFDcEIsMkNBQTRDO0FBQzVDLDZCQUErQjtBQUMvQixtQ0FBb0M7QUFDcEMsK0JBQTJDO0FBQzNDLCtCQUE0QztBQUU1QyxNQUFNLG1CQUFtQjtBQThSekIsZUFBc0IsYUFBYSxTQUF1RDtBQUN4RixRQUFNLG1CQUFtQix5QkFBeUIsT0FBTztBQUN6RCxRQUFNLGVBQWUsZ0JBQWdCO0FBQ3JDLFFBQU0sWUFBWSxVQUFNLHFEQUEyQixnQkFBZ0I7QUFDbkUsUUFBTSw2QkFBNkIsU0FBUyw4QkFBK0IsU0FBUyxVQUFVO0FBQzlGLFFBQU0sUUFBUSxJQUFJLHNDQUFlLFNBQVMsT0FBTyxFQUFFLGdDQUFnQywyQkFBMkIsQ0FBQztBQU0vRyxNQUFJLFNBQVMsVUFBVSxRQUFXO0FBQ2hDLGNBQU0sd0RBQTBCO0FBQUEsTUFDOUIscUJBQWlCLHNEQUE0QixnQkFBZ0I7QUFBQSxNQUM3RCxPQUFPLGlCQUFpQjtBQUFBLE1BQ3hCLFdBQVcsTUFBTTtBQUFBLElBQ25CLENBQUM7QUFBQSxFQUNIO0FBS0EsUUFBTSxNQUFNLFNBQVMsU0FBUztBQUU5QixRQUFNLEVBQUUsTUFBTSxLQUFLLElBQUksZ0JBQWdCLFdBQVcsT0FBTztBQUN6RCxRQUFNLFNBQVMsVUFBVSxJQUFJLElBQUksT0FBTyxJQUFJLENBQUM7QUFDN0MsUUFBTSxlQUFlLHFCQUFxQixtREFBc0IsVUFBVSxnQkFBZ0IsSUFBSTtBQUM5RixRQUFNLGdCQUFnQixxQkFBcUIsbURBQXNCLFVBQVUsaUJBQWlCLElBQUk7QUFDaEcsUUFBTSx3QkFBd0IscUJBQXFCLG1EQUFzQixVQUFVLHlCQUF5QixJQUFJO0FBRWhILFFBQU0sYUFBNEI7QUFBQSxJQUNoQztBQUFBLElBQ0EsR0FBSSxnQkFBZ0IsRUFBRSxhQUFhO0FBQUEsSUFDbkMsR0FBSSxpQkFBaUIsRUFBRSxjQUFjO0FBQUEsSUFDckMsR0FBSSx5QkFBeUIsRUFBRSxzQkFBc0I7QUFBQSxJQUVyRCxNQUFNLGtCQUFrQixRQUFzRTtBQUk1RixVQUFJLENBQUMsVUFBVSxtQkFBbUI7QUFDaEMsY0FBTSxJQUFJLE1BQU0sMERBQTBEO0FBQUEsTUFDNUU7QUFFQSxhQUFPLFVBQVUsa0JBQWtCLEVBQUUsR0FBRyxRQUFRLEtBQUssTUFBTSxLQUFLLENBQUM7QUFBQSxJQUNuRTtBQUFBLElBRUEsTUFBTSxVQUF5QjtBQUM3QixVQUFJO0FBSUYsY0FBTSxNQUFNLFFBQVEsU0FBUztBQUFBLE1BQy9CLFVBQUU7QUFDQSxjQUFNLFVBQVUsVUFBVTtBQUFBLE1BQzVCO0FBQUEsSUFDRjtBQUFBLElBRUEsTUFBTSxlQUNKLFFBQ2lCO0FBQ2pCLGlCQUFPLHdDQUEwQyxFQUFFLEdBQUcsUUFBUSxXQUFXLFdBQVcsTUFBTSxLQUFLLENBQUM7QUFBQSxJQUNsRztBQUFBLElBRUEsTUFBTSxPQUFPLFlBQXFDO0FBQ2hELGFBQU8sVUFBVSxTQUFTLFlBQVksRUFBRSxLQUFLLE1BQU0sS0FBSyxDQUFDO0FBQUEsSUFDM0Q7QUFBQSxJQUVBO0FBQUEsSUFFQSxPQUFPLE9BQU8sWUFBWSxJQUFtQjtBQUMzQyxZQUFNLFdBQVcsUUFBUTtBQUFBLElBQzNCO0FBQUEsSUFFQTtBQUFBLEVBQ0Y7QUFFQSxTQUFPO0FBQ1Q7QUFZQSxTQUFTLHlCQUF5QixTQUE0RDtBQUM1RixhQUFPLGtFQUF5RDtBQUFBLElBQzlELDhCQUE4QixTQUFTO0FBQUEsSUFDdkMsaUJBQWlCLFNBQVM7QUFBQSxJQUMxQiw2QkFBNkIsU0FBUztBQUFBLElBQ3RDLE1BQU0sU0FBUztBQUFBLElBQ2Ysc0JBQXNCLFNBQVMsd0JBQXdCO0FBQUEsSUFDdkQsMEJBQTBCLFNBQVM7QUFBQSxJQUNuQyxpQkFBaUIsU0FBUztBQUFBLElBQzFCLE1BQU0sU0FBUztBQUFBLElBQ2Ysc0JBQXNCLFNBQVM7QUFBQSxJQUMvQixvQ0FBb0MsU0FBUztBQUFBLElBQzdDLGlDQUFpQyxTQUFTO0FBQUEsSUFDMUMsaUNBQWlDLFNBQVM7QUFBQSxJQUMxQyxNQUFNO0FBQUEsRUFDUixDQUFDO0FBQ0g7QUFXQSxTQUFTLGdCQUFnQixXQUFvQixTQUE0RDtBQUN2RyxNQUFJLHFCQUFxQixrREFBcUI7QUFDNUMsVUFBTSxXQUFXLFVBQVUseUJBQXlCO0FBQ3BELFFBQUksVUFBVTtBQUNaLGFBQU8sRUFBRSxNQUFNLFNBQVMsTUFBTSxNQUFNLFNBQVMsS0FBSztBQUFBLElBQ3BEO0FBQUEsRUFDRjtBQUVBLE1BQUksU0FBUyxTQUFTLFFBQVc7QUFDL0IsV0FBTyxFQUFFLE1BQU0sUUFBUSxRQUFRLGtCQUFrQixNQUFNLFFBQVEsS0FBSztBQUFBLEVBQ3RFO0FBRUEsUUFBTSxJQUFJLE1BQU0saURBQWlEO0FBQ25FO0FBYUEsZUFBZSxlQUFlLGtCQUE4RDtBQUMxRixNQUFJLEtBQUMsNENBQW1CLGdCQUFnQixHQUFHO0FBQ3pDO0FBQUEsRUFDRjtBQUVBLE1BQUk7QUFDRixVQUFNLFNBQVMsVUFBTSw0Q0FBbUI7QUFBQSxNQUN0QywwQkFBc0IsNkRBQW9DLGdCQUFnQjtBQUFBLElBQzVFLENBQUM7QUFDRCxRQUFJLE9BQU8sZUFBZSxLQUFLLE9BQU8sY0FBYyxHQUFHO0FBQ3JEO0FBQUEsUUFDRSwwQkFBMEIsT0FBTyxPQUFPLFlBQVksQ0FBQyxtREFDN0MsT0FBTyxPQUFPLFdBQVcsQ0FBQztBQUFBLE1BQ3BDO0FBQUEsSUFDRjtBQUFBLEVBQ0YsU0FBUyxPQUFnQjtBQUN2Qix3QkFBSSxzREFBc0QsT0FBTyxLQUFLLENBQUMsRUFBRTtBQUFBLEVBQzNFO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -48,7 +48,7 @@ export interface CdpConnection extends AsyncDisposable {
48
48
  * @param params - The exact size to capture at. Omit to capture the window at its natural size.
49
49
  * @returns A {@link Promise} that resolves to the raw PNG bytes.
50
50
  */
51
- captureScreenshot(params?: Except<CaptureScreenshotParams, 'cwd'>): Promise<Uint8Array>;
51
+ captureScreenshot: (params?: Except<CaptureScreenshotParams, 'cwd'>) => Promise<Uint8Array>;
52
52
  /**
53
53
  * The base CDP URL, e.g. `http://localhost:51888`.
54
54
  */
@@ -71,7 +71,7 @@ export interface CdpConnection extends AsyncDisposable {
71
71
  *
72
72
  * @returns A {@link Promise} that resolves once disposal completes.
73
73
  */
74
- dispose(): Promise<void>;
74
+ dispose: () => Promise<void>;
75
75
  /**
76
76
  * The runtime Electron compatibility verdict for an owned instance, read live
77
77
  * after boot: whether the Electron version it is actually running is new enough
@@ -91,7 +91,7 @@ export interface CdpConnection extends AsyncDisposable {
91
91
  * @param params - The evaluation parameters (`callback`, optional `input`/`contextId`).
92
92
  * @returns A {@link Promise} that resolves to the return value of `callback`.
93
93
  */
94
- evalInObsidian<Input extends GenericObject, Result, TContextId extends ContextId<unknown> | undefined = undefined>(params: Except<EvalInObsidianParams<Input, Result, TContextId>, 'transport' | 'vaultPath'>): Promise<Result>;
94
+ evalInObsidian: <Input extends GenericObject, Result, TContextId extends ContextId<unknown> | undefined = undefined>(params: Except<EvalInObsidianParams<Input, Result, TContextId>, 'transport' | 'vaultPath'>) => Promise<Result>;
95
95
  /**
96
96
  * Evaluates a raw JavaScript expression inside Obsidian and returns the
97
97
  * normalized string result (e.g. `'5'`, a JSON string, or `'(no output)'`).
@@ -99,7 +99,7 @@ export interface CdpConnection extends AsyncDisposable {
99
99
  * @param expression - A self-contained JavaScript expression.
100
100
  * @returns A {@link Promise} that resolves to the raw result string.
101
101
  */
102
- invoke(expression: string): Promise<string>;
102
+ invoke: (expression: string) => Promise<string>;
103
103
  /**
104
104
  * The CDP port the instance is reachable on (the free port chosen for an
105
105
  * owned instance, or the attached {@link ConnectToCdpOptions.port}).
@@ -145,4 +145,4 @@ async function resolvePluginRepo(plugin) {
145
145
  bootstrapDemoVaultPlugins,
146
146
  buildDemoVaultPopulateAsync
147
147
  });
148
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2RlbW8tdmF1bHQtYm9vdHN0cmFwLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogSW5zdGFsbHMgYSBkZW1vIHZhdWx0J3MgKippbmplY3RlZCBjb21tdW5pdHkgcGx1Z2lucyoqIGhlYWRsZXNzbHksIGJ5IGRvd25sb2FkaW5nXG4gKiB0aGVpciBwdWJsaXNoZWQgR2l0SHViIHJlbGVhc2UgYXNzZXRzIHN0cmFpZ2h0IGludG9cbiAqIGBkZW1vLXZhdWx0Ly5vYnNpZGlhbi9wbHVnaW5zLzxpZD4vYC5cbiAqXG4gKiBgYnVpbGREZW1vVmF1bHRQb3B1bGF0ZWAgcmVxdWlyZXMgZWFjaCBpbmplY3RlZCBwbHVnaW4ncyBgbWFpbi5qc2AgL1xuICogYG1hbmlmZXN0Lmpzb25gIHRvIGFscmVhZHkgYmUgb24gZGlzaywgYW5kIHRocm93cyB3aGVuIHRoZXkgYXJlIG5vdC4gVW50aWwgdGhpc1xuICogbW9kdWxlIGV4aXN0ZWQgdGhlIG9ubHkgZG9jdW1lbnRlZCByZW1lZHkgd2FzIGEgKipHVUkgc3RlcCoqIFx1MjAxNCBvcGVuIGBkZW1vLXZhdWx0L2BcbiAqIGluIE9ic2lkaWFuIG9uY2UgYW5kIGxldCBgZGVtby12YXVsdC1oZWxwZXJgIGluc3RhbGwgdGhlIHBsdWdpbiBhdCBydW50aW1lLlxuICogYC5vYnNpZGlhbi9wbHVnaW5zLypgIGlzIGdpdGlnbm9yZWQgaW4gYSBwbHVnaW4gcmVwbywgc28gdGhhdCBzdGF0ZVxuICogZXhpc3RzIG9uIGV4YWN0bHkgdGhlIG9uZSBtYWNoaW5lIHRoYXQgZGlkIGl0IGFuZCBpcyBpbnZpc2libGUgdG8gYSBmcmVzaCBjbG9uZSxcbiAqIGEgbmV3IG1hY2hpbmUsIG9yIENJLiBTaW5jZSBhIHBsdWdpbiByZXBvJ3MgcmVsZWFzZSBwcmVmbGlnaHQgcnVucyBpdHNcbiAqIGludGVncmF0aW9uIHRlc3RzLCB0aGF0IG1hZGUgKmN1dHRpbmcgYSByZWxlYXNlIGZyb20gYSBjbGVhbiBjbG9uZSogaW1wb3NzaWJsZVxuICogd2l0aG91dCBhIGh1bWFuIG9wZW5pbmcgYSBHVUkuXG4gKlxuICogRG93bmxvYWRpbmcgdGhlIHJlbGVhc2UgYXNzZXRzIGlzIHRoZSBleGFjdCBoZWFkbGVzcyBlcXVpdmFsZW50OiB0aGUgcmVzdWx0aW5nXG4gKiBmb2xkZXIgaXMgd2hhdCBPYnNpZGlhbiBpdHNlbGYgd291bGQgaGF2ZSBpbnN0YWxsZWQsIHNvIHRoZSBzaGlwcGVkXG4gKiBgKi1kZW1vLXZhdWx0LnppcGAgXHUyMDE0IHdoaWNoIHVuemlwcyBpbnRvIGEgc2luZ2xlIGAqLWRlbW8tdmF1bHQtPHZlcnNpb24+YCBmb2xkZXIgXHUyMDE0XG4gKiBzdGF5cyB0aGUgc3RhbmRhcmQgZGVtby12YXVsdCBhcnRpZmFjdC5cbiAqXG4gKiBUd28gZW50cnkgcG9pbnRzLCBwbHVzIHRoZSBgYm9vdHN0cmFwLWRlbW8tdmF1bHRgIENMSSBzdWJjb21tYW5kOlxuICpcbiAqIC0ge0BsaW5rIGJvb3RzdHJhcERlbW9WYXVsdFBsdWdpbnN9IFx1MjAxNCBpbnN0YWxsIHRoZSBtaXNzaW5nIG9uZXMsIGV4cGxpY2l0bHkuXG4gKiAtIHtAbGluayBidWlsZERlbW9WYXVsdFBvcHVsYXRlQXN5bmN9IFx1MjAxNCBkbyB0aGF0IGFuZCB0aGVuIGJ1aWxkIHRoZSBwb3B1bGF0ZSBtYXAsXG4gKiAgIHNvIGEgZ2xvYmFsIHNldHVwIHNlbGYtaGVhbHMgd2l0aCBubyBtYW51YWwgc3RlcCBhdCBhbGwuXG4gKlxuICogVGhlIHN5bmMgYGJ1aWxkRGVtb1ZhdWx0UG9wdWxhdGVgIGRlbGliZXJhdGVseSBrZWVwcyB0aHJvd2luZzogYGZldGNoYCBoYXMgbm9cbiAqIHN5bmNocm9ub3VzIGZvcm0sIHNvIGF1dG8taGVhbGluZyBjYW4gb25seSBsaXZlIG9uIGFuIGFzeW5jIHNpYmxpbmcuIEl0cyBtZXNzYWdlXG4gKiBub3cgbmFtZXMgYm90aCByZW1lZGllcyBhYm92ZSBpbnN0ZWFkIG9mIHRoZSBHVUkgc3RlcC5cbiAqL1xuXG5pbXBvcnQge1xuICBta2RpclN5bmMsXG4gIHdyaXRlRmlsZVN5bmNcbn0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmltcG9ydCB0eXBlIHsgQ29tbXVuaXR5UGx1Z2luUmVnaXN0cnlFbnRyeSB9IGZyb20gJy4vY29tbXVuaXR5LXBsdWdpbi1yZWdpc3RyeS5janMnO1xuaW1wb3J0IHR5cGUge1xuICBCdWlsZERlbW9WYXVsdFBvcHVsYXRlUGFyYW1zLFxuICBJbmplY3RQbHVnaW5QYXJhbXNcbn0gZnJvbSAnLi9kZW1vLXZhdWx0LXBvcHVsYXRlLmNqcyc7XG5pbXBvcnQgdHlwZSB7IFBvcHVsYXRlRmlsZXNQYXJhbXMgfSBmcm9tICcuL3RlbXBvcmFyeS12YXVsdC5janMnO1xuXG5pbXBvcnQge1xuICBidWlsZFBsdWdpbkFzc2V0VXJsLFxuICBDT01NVU5JVFlfUExVR0lOU19SRUdJU1RSWV9VUkwsXG4gIGlzVmFsaWRSZXBvUmVmZXJlbmNlLFxuICBPUFRJT05BTF9QTFVHSU5fQVNTRVRfTkFNRVMsXG4gIFJFUVVJUkVEX1BMVUdJTl9BU1NFVF9OQU1FUyxcbiAgc2VsZWN0UGx1Z2luUmVwb1xufSBmcm9tICcuL2NvbW11bml0eS1wbHVnaW4tcmVnaXN0cnkuY2pzJztcbmltcG9ydCB7XG4gIGJ1aWxkRGVtb1ZhdWx0UG9wdWxhdGUsXG4gIHJlc29sdmVJbmplY3RlZFBsdWdpblNvdXJjZURpcmVjdG9yeSxcbiAgcmVzb2x2ZU1pc3NpbmdJbmplY3RlZFBsdWdpbnNcbn0gZnJvbSAnLi9kZW1vLXZhdWx0LXBvcHVsYXRlLmNqcyc7XG5pbXBvcnQgeyBsb2cgfSBmcm9tICcuL2xvZy5janMnO1xuXG4vKipcbiAqIEJyb3dzZXIgYFVzZXItQWdlbnRgIGZvciB0aGUgYXNzZXQgZG93bmxvYWRzLCBtYXRjaGluZyBgb2JzaWRpYW4taW5zdGFsbGVyLnRzYCBcdTIwMTRcbiAqIGEgcGxhaW4gTm9kZSBmZXRjaCBpcyByZWplY3RlZCBieSBzb21lIENETiBlZGdlcy5cbiAqL1xuY29uc3QgRE9XTkxPQURfVVNFUl9BR0VOVCA9ICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTI0LjAuMC4wIFNhZmFyaS81MzcuMzYnO1xuXG5jb25zdCBIVFRQX05PVF9GT1VORCA9IDQwNDtcblxuLyoqXG4gKiBUaGUgY29tbXVuaXR5IHBsdWdpbiByZWdpc3RyeSwgZmV0Y2hlZCBhdCBtb3N0IG9uY2UgcGVyIHByb2Nlc3MuIEV2ZXJ5IGluamVjdGVkXG4gKiBwbHVnaW4gb2YgZXZlcnkgZGVtby12YXVsdCBwcm9qZWN0IGluIGEgcnVuIHJlc29sdmVzIGFnYWluc3QgdGhlIHNhbWUgdGFibGUsIGFuZFxuICogaXQgaXMgYSBtdWx0aS1tZWdhYnl0ZSBkb2N1bWVudC5cbiAqL1xubGV0IHJlZ2lzdHJ5UHJvbWlzZTogUHJvbWlzZTxyZWFkb25seSBDb21tdW5pdHlQbHVnaW5SZWdpc3RyeUVudHJ5W10+IHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBib290c3RyYXBEZW1vVmF1bHRQbHVnaW5zfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCb290c3RyYXBEZW1vVmF1bHRQbHVnaW5zUGFyYW1zIHtcbiAgLyoqXG4gIEFic29sdXRlIHBhdGggdG8gdGhlIHBsdWdpbiByZXBvJ3MgYGRlbW8tdmF1bHQvYCBkaXJlY3RvcnkuXG4gICAqL1xuICByZWFkb25seSBkZW1vVmF1bHRQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpbmplY3RlZCBwbHVnaW5zIHRvIGluc3RhbGwgXHUyMDE0IHRoZSBzYW1lIGxpc3QgcGFzc2VkIHRvIGBidWlsZERlbW9WYXVsdFBvcHVsYXRlYC4gUGx1Z2lucyB3aG9zZVxuICAgKiBiaW5hcmllcyBhcmUgYWxyZWFkeSBwcmVzZW50IGFyZSBza2lwcGVkICh1bmxlc3Mge0BsaW5rIEJvb3RzdHJhcERlbW9WYXVsdFBsdWdpbnNQYXJhbXMuc2hvdWxkRm9yY2V9KSxcbiAgICogYXMgYXJlIHBsdWdpbnMgY2FycnlpbmcgYW4gZXhwbGljaXQgYHNvdXJjZURpcmVjdG9yeWAuXG4gICAqL1xuICByZWFkb25seSBpbmplY3RQbHVnaW5zOiByZWFkb25seSBJbmplY3RQbHVnaW5QYXJhbXNbXTtcblxuICAvKipcbiAgICogV2hldGhlciB0byByZS1kb3dubG9hZCBwbHVnaW5zIHRoYXQgYXJlIGFscmVhZHkgaW5zdGFsbGVkLCByZXBsYWNpbmcgdGhlbSB3aXRoIHRoZSBjdXJyZW50IHJlbGVhc2UuXG4gICAqIERlZmF1bHRzIHRvIGBmYWxzZWAgXHUyMDE0IHRoZSBub3JtYWwgcGF0aCBpbnN0YWxscyBvbmx5IHdoYXQgaXMgbWlzc2luZywgc28gYSB3YXJtIGNoZWNrb3V0IGRvZXMgbm9cbiAgICogbmV0d29yayBJL08gYXQgYWxsLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkRm9yY2U/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFRoZSBvdXRjb21lIG9mIGEge0BsaW5rIGJvb3RzdHJhcERlbW9WYXVsdFBsdWdpbnN9IHJ1bi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCb290c3RyYXBEZW1vVmF1bHRQbHVnaW5zUmVzdWx0IHtcbiAgLyoqXG4gIFRoZSBwbHVnaW5zIHRoYXQgd2VyZSBkb3dubG9hZGVkIGFuZCB3cml0dGVuLCBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIGluc3RhbGxlZC5cbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbGxlZDogcmVhZG9ubHkgSW5zdGFsbGVkUGx1Z2luSW5mb1tdO1xuXG4gIC8qKlxuICBUaGUgaWRzIG9mIHBsdWdpbnMgbGVmdCB1bnRvdWNoZWQgXHUyMDE0IGFscmVhZHkgaW5zdGFsbGVkLCBvciBvcHRlZCBvdXQgdmlhIGFuIGV4cGxpY2l0IGBzb3VyY2VEaXJlY3RvcnlgLlxuICAgKi9cbiAgcmVhZG9ubHkgc2tpcHBlZFBsdWdpbklkczogcmVhZG9ubHkgc3RyaW5nW107XG59XG5cbi8qKlxuICogT25lIHBsdWdpbiBpbnN0YWxsZWQgYnkge0BsaW5rIGJvb3RzdHJhcERlbW9WYXVsdFBsdWdpbnN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluc3RhbGxlZFBsdWdpbkluZm8ge1xuICAvKipcbiAgVGhlIGFzc2V0IGZpbGUgbmFtZXMgYWN0dWFsbHkgd3JpdHRlbiwgZS5nLiBgWydtYWluLmpzJywgJ21hbmlmZXN0Lmpzb24nLCAnc3R5bGVzLmNzcyddYC5cbiAgICovXG4gIHJlYWRvbmx5IGFzc2V0TmFtZXM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKlxuICBUaGUgcGx1Z2luJ3MgaWQuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5JZDogc3RyaW5nO1xuXG4gIC8qKlxuICBUaGUgR2l0SHViIHJlcG9zaXRvcnkgdGhlIGFzc2V0cyBjYW1lIGZyb20sIGFzIGBvd25lci9uYW1lYC5cbiAgICovXG4gIHJlYWRvbmx5IHJlcG86IHN0cmluZztcblxuICAvKipcbiAgVGhlIHJlbGVhc2UgdGFnIGRvd25sb2FkZWQgZnJvbSwgb3IgYHVuZGVmaW5lZGAgd2hlbiB0aGUgcmVwb3NpdG9yeSdzIGxhdGVzdCByZWxlYXNlIHdhcyB1c2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEluc3RhbGxzIGV2ZXJ5IGluamVjdGVkIGNvbW11bml0eSBwbHVnaW4gd2hvc2UgYnVpbHQgZmlsZXMgYXJlIG1pc3NpbmcgZnJvbSB0aGUgZGVtbyB2YXVsdCwgYnlcbiAqIGRvd25sb2FkaW5nIGl0cyBwdWJsaXNoZWQgcmVsZWFzZSBhc3NldHMgaW50byBgZGVtby12YXVsdC8ub2JzaWRpYW4vcGx1Z2lucy88aWQ+L2AuXG4gKlxuICogRWFjaCBwbHVnaW4ncyByZXBvc2l0b3J5IGNvbWVzIGZyb20gaXRzIHtAbGluayBJbmplY3RQbHVnaW5QYXJhbXMucmVwb30gd2hlbiBnaXZlbiwgb3RoZXJ3aXNlIGZyb21cbiAqIE9ic2lkaWFuJ3Mgb3duIGNvbW11bml0eSBwbHVnaW4gcmVnaXN0cnkgXHUyMDE0IHRoZSBzYW1lIGBpZGAgXHUyMTkyIGByZXBvYCB0YWJsZSB0aGUgaW4tYXBwIGNvbW11bml0eSBicm93c2VyXG4gKiBpbnN0YWxscyBmcm9tLCBzbyBubyBwbHVnaW4tc3BlY2lmaWMgbWFwcGluZyBpcyBoYXJkY29kZWQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgQm9vdHN0cmFwRGVtb1ZhdWx0UGx1Z2luc1BhcmFtc30uXG4gKiBAcmV0dXJucyBXaGF0IHdhcyBpbnN0YWxsZWQgYW5kIHdoYXQgd2FzIHNraXBwZWQuXG4gKiBAdGhyb3dzIEVycm9yIGlmIGEgcGx1Z2luJ3MgcmVwb3NpdG9yeSBjYW5ub3QgYmUgcmVzb2x2ZWQsIG9yIGEgcmVxdWlyZWQgYXNzZXQgY2Fubm90IGJlIGRvd25sb2FkZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBib290c3RyYXBEZW1vVmF1bHRQbHVnaW5zKHBhcmFtczogQm9vdHN0cmFwRGVtb1ZhdWx0UGx1Z2luc1BhcmFtcyk6IFByb21pc2U8Qm9vdHN0cmFwRGVtb1ZhdWx0UGx1Z2luc1Jlc3VsdD4ge1xuICBjb25zdCB7IGRlbW9WYXVsdFBhdGgsIGluamVjdFBsdWdpbnMsIHNob3VsZEZvcmNlID0gZmFsc2UgfSA9IHBhcmFtcztcblxuICBjb25zdCBib290c3RyYXBwYWJsZSA9IGluamVjdFBsdWdpbnMuZmlsdGVyKChwbHVnaW4pID0+IHBsdWdpbi5zb3VyY2VEaXJlY3RvcnkgPT09IHVuZGVmaW5lZCk7XG4gIGNvbnN0IHRhcmdldHMgPSBzaG91bGRGb3JjZSA/IGJvb3RzdHJhcHBhYmxlIDogcmVzb2x2ZU1pc3NpbmdJbmplY3RlZFBsdWdpbnMoeyBkZW1vVmF1bHRQYXRoLCBpbmplY3RQbHVnaW5zIH0pO1xuICBjb25zdCB0YXJnZXRQbHVnaW5JZHMgPSBuZXcgU2V0KHRhcmdldHMubWFwKChwbHVnaW4pID0+IHBsdWdpbi5wbHVnaW5JZCkpO1xuXG4gIGNvbnN0IGluc3RhbGxlZDogSW5zdGFsbGVkUGx1Z2luSW5mb1tdID0gW107XG4gIGZvciAoY29uc3QgcGx1Z2luIG9mIHRhcmdldHMpIHtcbiAgICAvLyBTZXF1ZW50aWFsIG9uIHB1cnBvc2U6IHRoZSBpbnN0YWxscyBzaGFyZSBvbmUgbWVtb2lzZWQgcmVnaXN0cnkgZmV0Y2guXG4gICAgLy8gUGFyYWxsZWxpc20gd291bGQgYnV5IG5vdGhpbmcgYnV0IGludGVybGVhdmVkIGxvZ3MgZm9yIHRoZSBoYW5kZnVsIG9mIHBsdWdpbnMgYSBkZW1vIHZhdWx0IGluamVjdHMuXG4gICAgaW5zdGFsbGVkLnB1c2goYXdhaXQgaW5zdGFsbFBsdWdpbihkZW1vVmF1bHRQYXRoLCBwbHVnaW4pKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaW5zdGFsbGVkLFxuICAgIHNraXBwZWRQbHVnaW5JZHM6IGluamVjdFBsdWdpbnMubWFwKChwbHVnaW4pID0+IHBsdWdpbi5wbHVnaW5JZCkuZmlsdGVyKChwbHVnaW5JZCkgPT4gIXRhcmdldFBsdWdpbklkcy5oYXMocGx1Z2luSWQpKVxuICB9O1xufVxuXG4vKipcbiAqIFRoZSBzZWxmLWhlYWxpbmcgY291bnRlcnBhcnQgb2YgYGJ1aWxkRGVtb1ZhdWx0UG9wdWxhdGVgOiBpbnN0YWxscyBhbnkgaW5qZWN0ZWQgY29tbXVuaXR5IHBsdWdpbiB3aG9zZVxuICogYmluYXJpZXMgYXJlIG1pc3NpbmcgKHNlZSB7QGxpbmsgYm9vdHN0cmFwRGVtb1ZhdWx0UGx1Z2luc30pLCB0aGVuIGJ1aWxkcyB0aGUgcG9wdWxhdGUgbWFwIGV4YWN0bHkgYXMgdGhlXG4gKiBzeW5jaHJvbm91cyBidWlsZGVyIGRvZXMuXG4gKlxuICogVXNlIHRoaXMgZnJvbSBhIGdsb2JhbCBzZXR1cCdzIGBwb3B1bGF0ZWAgdGh1bmsgXHUyMDE0IGJvdGggdGhlIFZpdGVzdCBhbmQgSmVzdCBhZGFwdGVycyBhY2NlcHQgYSB0aHVua1xuICogcmV0dXJuaW5nIGEgcHJvbWlzZSBcdTIwMTQgc28gYSBmcmVzaCBjbG9uZSwgYSBuZXcgbWFjaGluZSwgb3IgQ0kgbmVlZHMgbm8gbWFudWFsIGluc3RhbGwgc3RlcC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHNhbWUgYEJ1aWxkRGVtb1ZhdWx0UG9wdWxhdGVQYXJhbXNgIHRoZSBzeW5jaHJvbm91cyBidWlsZGVyIHRha2VzLlxuICogQHJldHVybnMgVGhlIHBvcHVsYXRlIG1hcCwgcmVhZHkgdG8gaGFuZCB0byBhIGdsb2JhbCBzZXR1cCdzIGBwb3B1bGF0ZWAgb3IgYFRlbXBvcmFyeVZhdWx0LnBvcHVsYXRlYC5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG9ic2lkaWFuLWRldi11dGlscy9wYXJhbXMtb3B0aW9ucy1uYW1lLW1hdGNoIC0tIFRlbXBvcmFyeTogYEJ1aWxkRGVtb1ZhdWx0UG9wdWxhdGVQYXJhbXNgIGlzIHJlLWV4cG9ydGVkIGZyb20gYGluZGV4LnRzYCwgc28gcmVuYW1pbmcgaXQgdG8gYEJ1aWxkRGVtb1ZhdWx0UG9wdWxhdGVBc3luY1BhcmFtc2AgaXMgYSBicmVha2luZyBjaGFuZ2UgaGVsZCBmb3IgdGhlIG5leHQgbWFqb3IuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGREZW1vVmF1bHRQb3B1bGF0ZUFzeW5jKHBhcmFtczogQnVpbGREZW1vVmF1bHRQb3B1bGF0ZVBhcmFtcyk6IFByb21pc2U8UG9wdWxhdGVGaWxlc1BhcmFtcz4ge1xuICBpZiAocGFyYW1zLmluamVjdFBsdWdpbnMgIT09IHVuZGVmaW5lZCkge1xuICAgIGF3YWl0IGJvb3RzdHJhcERlbW9WYXVsdFBsdWdpbnMoeyBkZW1vVmF1bHRQYXRoOiBwYXJhbXMuZGVtb1ZhdWx0UGF0aCwgaW5qZWN0UGx1Z2luczogcGFyYW1zLmluamVjdFBsdWdpbnMgfSk7XG4gIH1cblxuICByZXR1cm4gYnVpbGREZW1vVmF1bHRQb3B1bGF0ZShwYXJhbXMpO1xufVxuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gTmV0d29yayBkb3dubG9hZCBnbHVlLCBjb3ZlcmVkIGJ5IGludGVncmF0aW9uIHRlc3RzLCBub3QgdW5pdCB0ZXN0cy4gKi9cblxuLyoqXG4gKiBCdWlsZHMgdGhlIHJlcXVlc3QgaGVhZGVycyBmb3IgYSBHaXRIdWIgZG93bmxvYWQsIHNlbmRpbmcgYSBgR0lUSFVCX1RPS0VOYCAvIGBHSF9UT0tFTmAgYmVhcmVyIHdoZW4gb25lXG4gKiBpcyBpbiB0aGUgZW52aXJvbm1lbnQgXHUyMDE0IHdpdGhvdXQgaXQgdGhlIGFub255bW91cyBxdW90YSByZXR1cm5zIEhUVFAgNDAzIG9uIHNoYXJlZCBDSSBydW5uZXIgSVBzLlxuICpcbiAqIEByZXR1cm5zIFRoZSBoZWFkZXJzIHRvIHNlbmQuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkR2l0SHViSGVhZGVycygpOiBIZWFkZXJzIHtcbiAgY29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKHsgJ1VzZXItQWdlbnQnOiBET1dOTE9BRF9VU0VSX0FHRU5UIH0pO1xuICBjb25zdCB0b2tlbiA9IHByb2Nlc3MuZW52WydHSVRIVUJfVE9LRU4nXSA/PyBwcm9jZXNzLmVudlsnR0hfVE9LRU4nXTtcbiAgaWYgKHRva2VuKSB7XG4gICAgaGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCBgQmVhcmVyICR7dG9rZW59YCk7XG4gIH1cbiAgcmV0dXJuIGhlYWRlcnM7XG59XG5cbi8qKlxuICogRG93bmxvYWRzIG9uZSByZWxlYXNlIGFzc2V0LlxuICpcbiAqIEBwYXJhbSB1cmwgLSBUaGUgYXNzZXQncyBkb3dubG9hZCBVUkwuXG4gKiBAcGFyYW0gaXNSZXF1aXJlZCAtIFdoZXRoZXIgYSBtaXNzaW5nIGFzc2V0IChIVFRQIDQwNCkgaXMgYW4gZXJyb3IgcmF0aGVyIHRoYW4gYW4gYWJzZW50IG9wdGlvbmFsIGZpbGUuXG4gKiBAcmV0dXJucyBUaGUgYXNzZXQncyBieXRlcywgb3IgYHVuZGVmaW5lZGAgd2hlbiBhbiBvcHRpb25hbCBhc3NldCBpcyBub3QgcHVibGlzaGVkLlxuICogQHRocm93cyBFcnJvciBpZiB0aGUgZG93bmxvYWQgZmFpbHMgYW5kIHRoZSBhc3NldCBpcyByZXF1aXJlZC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZG93bmxvYWRBc3NldCh1cmw6IHN0cmluZywgaXNSZXF1aXJlZDogYm9vbGVhbik6IFByb21pc2U8QnVmZmVyIHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7IGhlYWRlcnM6IGJ1aWxkR2l0SHViSGVhZGVycygpIH0pO1xuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgaWYgKCFpc1JlcXVpcmVkICYmIHJlc3BvbnNlLnN0YXR1cyA9PT0gSFRUUF9OT1RfRk9VTkQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGRvd25sb2FkICR7dXJsfTogSFRUUCAke1N0cmluZyhyZXNwb25zZS5zdGF0dXMpfSAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YCk7XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGF3YWl0IHJlc3BvbnNlLmFycmF5QnVmZmVyKCkpO1xufVxuXG4vKipcbiAqIEZldGNoZXMgT2JzaWRpYW4ncyBjb21tdW5pdHkgcGx1Z2luIHJlZ2lzdHJ5LCBtZW1vaXNlZCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBwcm9jZXNzLlxuICpcbiAqIEByZXR1cm5zIFRoZSByZWdpc3RyeSByb3dzLlxuICogQHRocm93cyBFcnJvciBpZiB0aGUgcmVnaXN0cnkgY2Fubm90IGJlIGZldGNoZWQgb3IgcGFyc2VkLlxuICovXG5hc3luYyBmdW5jdGlvbiBmZXRjaENvbW11bml0eVBsdWdpblJlZ2lzdHJ5KCk6IFByb21pc2U8cmVhZG9ubHkgQ29tbXVuaXR5UGx1Z2luUmVnaXN0cnlFbnRyeVtdPiB7XG4gIHJlZ2lzdHJ5UHJvbWlzZSA/Pz0gKGFzeW5jICgpOiBQcm9taXNlPHJlYWRvbmx5IENvbW11bml0eVBsdWdpblJlZ2lzdHJ5RW50cnlbXT4gPT4ge1xuICAgIGxvZyhgW2RlbW8tdmF1bHQtYm9vdHN0cmFwXSBGZXRjaGluZyBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW4gcmVnaXN0cnkgZnJvbSAke0NPTU1VTklUWV9QTFVHSU5TX1JFR0lTVFJZX1VSTH0uLi5gKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKENPTU1VTklUWV9QTFVHSU5TX1JFR0lTVFJZX1VSTCwgeyBoZWFkZXJzOiBidWlsZEdpdEh1YkhlYWRlcnMoKSB9KTtcbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBGYWlsZWQgdG8gZmV0Y2ggT2JzaWRpYW4ncyBjb21tdW5pdHkgcGx1Z2luIHJlZ2lzdHJ5ICgke0NPTU1VTklUWV9QTFVHSU5TX1JFR0lTVFJZX1VSTH0pOiBgXG4gICAgICAgICAgKyBgSFRUUCAke1N0cmluZyhyZXNwb25zZS5zdGF0dXMpfSAke3Jlc3BvbnNlLnN0YXR1c1RleHR9LiBgXG4gICAgICAgICAgKyAnUGFzcyBhbiBleHBsaWNpdCBgcmVwb2Agb24gdGhlIGluamVjdGVkIHBsdWdpbiB0byBza2lwIHRoZSByZWdpc3RyeSBsb29rdXAuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyByZWFkb25seSBDb21tdW5pdHlQbHVnaW5SZWdpc3RyeUVudHJ5W107XG4gIH0pKCk7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgcmVnaXN0cnlQcm9taXNlO1xuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIC8vIERvIG5vdCBtZW1vaXNlIGEgZmFpbHVyZTogYSB0cmFuc2llbnQgbmV0d29yayBlcnJvciBtdXN0IG5vdCBwb2lzb24gZXZlcnkgbGF0ZXIgbG9va3VwLlxuICAgIHJlZ2lzdHJ5UHJvbWlzZSA9IHVuZGVmaW5lZDtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG4vKipcbiAqIERvd25sb2FkcyBvbmUgcGx1Z2luJ3MgcmVsZWFzZSBhc3NldHMgYW5kIHdyaXRlcyB0aGVtIGludG8gdGhlIGRlbW8gdmF1bHQuXG4gKlxuICogQHBhcmFtIGRlbW9WYXVsdFBhdGggLSBUaGUgZGVtbyB2YXVsdCByb290LlxuICogQHBhcmFtIHBsdWdpbiAtIFRoZSBwbHVnaW4gdG8gaW5zdGFsbC5cbiAqIEByZXR1cm5zIFdoYXQgd2FzIGluc3RhbGxlZC5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIHJlcG9zaXRvcnkgY2Fubm90IGJlIHJlc29sdmVkIG9yIGEgcmVxdWlyZWQgYXNzZXQgY2Fubm90IGJlIGRvd25sb2FkZWQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGluc3RhbGxQbHVnaW4oZGVtb1ZhdWx0UGF0aDogc3RyaW5nLCBwbHVnaW46IEluamVjdFBsdWdpblBhcmFtcyk6IFByb21pc2U8SW5zdGFsbGVkUGx1Z2luSW5mbz4ge1xuICBjb25zdCB7IHBsdWdpbklkLCB2ZXJzaW9uIH0gPSBwbHVnaW47XG4gIGNvbnN0IHJlcG8gPSBhd2FpdCByZXNvbHZlUGx1Z2luUmVwbyhwbHVnaW4pO1xuICBjb25zdCB0YXJnZXREaXJlY3RvcnkgPSByZXNvbHZlSW5qZWN0ZWRQbHVnaW5Tb3VyY2VEaXJlY3RvcnkoeyBkZW1vVmF1bHRQYXRoLCBwbHVnaW4gfSk7XG5cbiAgbG9nKGBbZGVtby12YXVsdC1ib290c3RyYXBdIEluc3RhbGxpbmcgXCIke3BsdWdpbklkfVwiIGZyb20gJHtyZXBvfUAke3ZlcnNpb24gPz8gJ2xhdGVzdCd9IGludG8gJHt0YXJnZXREaXJlY3Rvcnl9Li4uYCk7XG5cbiAgY29uc3QgZG93bmxvYWRzID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIC4uLlJFUVVJUkVEX1BMVUdJTl9BU1NFVF9OQU1FUy5tYXAoYXN5bmMgKGFzc2V0TmFtZSkgPT4gKHtcbiAgICAgIGFzc2V0TmFtZSxcbiAgICAgIGNvbnRlbnQ6IGF3YWl0IGRvd25sb2FkQXNzZXQoYnVpbGRQbHVnaW5Bc3NldFVybCh7IGFzc2V0TmFtZSwgcmVwbywgdmVyc2lvbiB9KSwgdHJ1ZSlcbiAgICB9KSksXG4gICAgLi4uT1BUSU9OQUxfUExVR0lOX0FTU0VUX05BTUVTLm1hcChhc3luYyAoYXNzZXROYW1lKSA9PiAoe1xuICAgICAgYXNzZXROYW1lLFxuICAgICAgY29udGVudDogYXdhaXQgZG93bmxvYWRBc3NldChidWlsZFBsdWdpbkFzc2V0VXJsKHsgYXNzZXROYW1lLCByZXBvLCB2ZXJzaW9uIH0pLCBmYWxzZSlcbiAgICB9KSlcbiAgXSk7XG5cbiAgbWtkaXJTeW5jKHRhcmdldERpcmVjdG9yeSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgY29uc3QgYXNzZXROYW1lczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCB7IGFzc2V0TmFtZSwgY29udGVudCB9IG9mIGRvd25sb2Fkcykge1xuICAgIGlmIChjb250ZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICB3cml0ZUZpbGVTeW5jKGpvaW4odGFyZ2V0RGlyZWN0b3J5LCBhc3NldE5hbWUpLCBjb250ZW50KTtcbiAgICBhc3NldE5hbWVzLnB1c2goYXNzZXROYW1lKTtcbiAgfVxuXG4gIGxvZyhgW2RlbW8tdmF1bHQtYm9vdHN0cmFwXSBJbnN0YWxsZWQgXCIke3BsdWdpbklkfVwiOiAke2Fzc2V0TmFtZXMuam9pbignLCAnKX0uYCk7XG5cbiAgcmV0dXJuIHsgYXNzZXROYW1lcywgcGx1Z2luSWQsIHJlcG8sIHZlcnNpb24gfTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgR2l0SHViIHJlcG9zaXRvcnkgcHVibGlzaGluZyBhIHBsdWdpbiBcdTIwMTQgdGhlIGV4cGxpY2l0IG92ZXJyaWRlIHdoZW4gZ2l2ZW4sIG90aGVyd2lzZVxuICogT2JzaWRpYW4ncyBjb21tdW5pdHkgcGx1Z2luIHJlZ2lzdHJ5LlxuICpcbiAqIEBwYXJhbSBwbHVnaW4gLSBUaGUgcGx1Z2luIHRvIHJlc29sdmUuXG4gKiBAcmV0dXJucyBUaGUgYG93bmVyL25hbWVgIHJlcG9zaXRvcnkgcmVmZXJlbmNlLlxuICogQHRocm93cyBFcnJvciBpZiBhbiBleHBsaWNpdCBvdmVycmlkZSBpcyBtYWxmb3JtZWQsIG9yIHRoZSBpZCBpcyBub3QgYSByZWdpc3RlcmVkIGNvbW11bml0eSBwbHVnaW4uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVQbHVnaW5SZXBvKHBsdWdpbjogSW5qZWN0UGx1Z2luUGFyYW1zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgeyBwbHVnaW5JZCwgcmVwbyB9ID0gcGx1Z2luO1xuXG4gIGlmIChyZXBvICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoIWlzVmFsaWRSZXBvUmVmZXJlbmNlKHJlcG8pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgXFxgcmVwb1xcYCBmb3IgY29tbXVuaXR5IHBsdWdpbiBcIiR7cGx1Z2luSWR9XCI6ICR7cmVwb30uIEV4cGVjdGVkIGFuIFxcYG93bmVyL25hbWVcXGAgcmVmZXJlbmNlLmApO1xuICAgIH1cbiAgICByZXR1cm4gcmVwbztcbiAgfVxuXG4gIGNvbnN0IHJlZ2lzdHJ5UmVwbyA9IHNlbGVjdFBsdWdpblJlcG8oeyBlbnRyaWVzOiBhd2FpdCBmZXRjaENvbW11bml0eVBsdWdpblJlZ2lzdHJ5KCksIHBsdWdpbklkIH0pO1xuICBpZiAocmVnaXN0cnlSZXBvID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgQ29tbXVuaXR5IHBsdWdpbiBcIiR7cGx1Z2luSWR9XCIgaXMgbm90IGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW4gcmVnaXN0cnksIHNvIGl0cyBHaXRIdWIgYFxuICAgICAgICArICdyZXBvc2l0b3J5IGNhbm5vdCBiZSByZXNvbHZlZC4gUGFzcyBhbiBleHBsaWNpdCBgcmVwb2AgKGBvd25lci9uYW1lYCkgb24gdGhlIGluamVjdGVkIHBsdWdpbi4nXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiByZWdpc3RyeVJlcG87XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBaUNBLHFCQUdPO0FBQ1AsdUJBQXFCO0FBQ3JCLDBCQUFvQjtBQVNwQix1Q0FPTztBQUNQLGlDQUlPO0FBQ1AsaUJBQW9CO0FBTXBCLE1BQU0sc0JBQXNCO0FBRTVCLE1BQU0saUJBQWlCO0FBT3ZCLElBQUk7QUE4RUosZUFBc0IsMEJBQTBCLFFBQW1GO0FBQ2pJLFFBQU0sRUFBRSxlQUFlLGVBQWUsY0FBYyxNQUFNLElBQUk7QUFFOUQsUUFBTSxpQkFBaUIsY0FBYyxPQUFPLENBQUMsV0FBVyxPQUFPLG9CQUFvQixNQUFTO0FBQzVGLFFBQU0sVUFBVSxjQUFjLHFCQUFpQiwwREFBOEIsRUFBRSxlQUFlLGNBQWMsQ0FBQztBQUM3RyxRQUFNLGtCQUFrQixJQUFJLElBQUksUUFBUSxJQUFJLENBQUMsV0FBVyxPQUFPLFFBQVEsQ0FBQztBQUV4RSxRQUFNLFlBQW1DLENBQUM7QUFDMUMsYUFBVyxVQUFVLFNBQVM7QUFHNUIsY0FBVSxLQUFLLE1BQU0sY0FBYyxlQUFlLE1BQU0sQ0FBQztBQUFBLEVBQzNEO0FBRUEsU0FBTztBQUFBLElBQ0w7QUFBQSxJQUNBLGtCQUFrQixjQUFjLElBQUksQ0FBQyxXQUFXLE9BQU8sUUFBUSxFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLElBQUksUUFBUSxDQUFDO0FBQUEsRUFDdEg7QUFDRjtBQWNBLGVBQXNCLDRCQUE0QixRQUFvRTtBQUNwSCxNQUFJLE9BQU8sa0JBQWtCLFFBQVc7QUFDdEMsVUFBTSwwQkFBMEIsRUFBRSxlQUFlLE9BQU8sZUFBZSxlQUFlLE9BQU8sY0FBYyxDQUFDO0FBQUEsRUFDOUc7QUFFQSxhQUFPLG1EQUF1QixNQUFNO0FBQ3RDO0FBVUEsU0FBUyxxQkFBOEI7QUFDckMsUUFBTSxVQUFVLElBQUksUUFBUSxFQUFFLGNBQWMsb0JBQW9CLENBQUM7QUFDakUsUUFBTSxRQUFRLG9CQUFBQSxRQUFRLElBQUksY0FBYyxLQUFLLG9CQUFBQSxRQUFRLElBQUksVUFBVTtBQUNuRSxNQUFJLE9BQU87QUFDVCxZQUFRLElBQUksaUJBQWlCLFVBQVUsS0FBSyxFQUFFO0FBQUEsRUFDaEQ7QUFDQSxTQUFPO0FBQ1Q7QUFVQSxlQUFlLGNBQWMsS0FBYSxZQUFrRDtBQUMxRixRQUFNLFdBQVcsTUFBTSxNQUFNLEtBQUssRUFBRSxTQUFTLG1CQUFtQixFQUFFLENBQUM7QUFDbkUsTUFBSSxDQUFDLFNBQVMsSUFBSTtBQUNoQixRQUFJLENBQUMsY0FBYyxTQUFTLFdBQVcsZ0JBQWdCO0FBQ3JELGFBQU87QUFBQSxJQUNUO0FBQ0EsVUFBTSxJQUFJLE1BQU0sc0JBQXNCLEdBQUcsVUFBVSxPQUFPLFNBQVMsTUFBTSxDQUFDLElBQUksU0FBUyxVQUFVLEVBQUU7QUFBQSxFQUNyRztBQUNBLFNBQU8sT0FBTyxLQUFLLE1BQU0sU0FBUyxZQUFZLENBQUM7QUFDakQ7QUFRQSxlQUFlLCtCQUFpRjtBQUM5Rix1QkFBcUIsWUFBOEQ7QUFDakYsd0JBQUksNkVBQTZFLCtEQUE4QixLQUFLO0FBQ3BILFVBQU0sV0FBVyxNQUFNLE1BQU0saUVBQWdDLEVBQUUsU0FBUyxtQkFBbUIsRUFBRSxDQUFDO0FBQzlGLFFBQUksQ0FBQyxTQUFTLElBQUk7QUFDaEIsWUFBTSxJQUFJO0FBQUEsUUFDUix5REFBeUQsK0RBQThCLFdBQzNFLE9BQU8sU0FBUyxNQUFNLENBQUMsSUFBSSxTQUFTLFVBQVU7QUFBQSxNQUU1RDtBQUFBLElBQ0Y7QUFDQSxXQUFPLE1BQU0sU0FBUyxLQUFLO0FBQUEsRUFDN0IsR0FBRztBQUVILE1BQUk7QUFDRixXQUFPLE1BQU07QUFBQSxFQUNmLFNBQVMsT0FBZ0I7QUFFdkIsc0JBQWtCO0FBQ2xCLFVBQU07QUFBQSxFQUNSO0FBQ0Y7QUFVQSxlQUFlLGNBQWMsZUFBdUIsUUFBMEQ7QUFDNUcsUUFBTSxFQUFFLFVBQVUsUUFBUSxJQUFJO0FBQzlCLFFBQU0sT0FBTyxNQUFNLGtCQUFrQixNQUFNO0FBQzNDLFFBQU0sc0JBQWtCLGlFQUFxQyxFQUFFLGVBQWUsT0FBTyxDQUFDO0FBRXRGLHNCQUFJLHNDQUFzQyxRQUFRLFVBQVUsSUFBSSxJQUFJLFdBQVcsUUFBUSxTQUFTLGVBQWUsS0FBSztBQUVwSCxRQUFNLFlBQVksTUFBTSxRQUFRLElBQUk7QUFBQSxJQUNsQyxHQUFHLDZEQUE0QixJQUFJLE9BQU8sZUFBZTtBQUFBLE1BQ3ZEO0FBQUEsTUFDQSxTQUFTLE1BQU0sa0JBQWMsc0RBQW9CLEVBQUUsV0FBVyxNQUFNLFFBQVEsQ0FBQyxHQUFHLElBQUk7QUFBQSxJQUN0RixFQUFFO0FBQUEsSUFDRixHQUFHLDZEQUE0QixJQUFJLE9BQU8sZUFBZTtBQUFBLE1BQ3ZEO0FBQUEsTUFDQSxTQUFTLE1BQU0sa0JBQWMsc0RBQW9CLEVBQUUsV0FBVyxNQUFNLFFBQVEsQ0FBQyxHQUFHLEtBQUs7QUFBQSxJQUN2RixFQUFFO0FBQUEsRUFDSixDQUFDO0FBRUQsZ0NBQVUsaUJBQWlCLEVBQUUsV0FBVyxLQUFLLENBQUM7QUFFOUMsUUFBTSxhQUF1QixDQUFDO0FBQzlCLGFBQVcsRUFBRSxXQUFXLFFBQVEsS0FBSyxXQUFXO0FBQzlDLFFBQUksWUFBWSxRQUFXO0FBQ3pCO0FBQUEsSUFDRjtBQUNBLDBDQUFjLHVCQUFLLGlCQUFpQixTQUFTLEdBQUcsT0FBTztBQUN2RCxlQUFXLEtBQUssU0FBUztBQUFBLEVBQzNCO0FBRUEsc0JBQUkscUNBQXFDLFFBQVEsTUFBTSxXQUFXLEtBQUssSUFBSSxDQUFDLEdBQUc7QUFFL0UsU0FBTyxFQUFFLFlBQVksVUFBVSxNQUFNLFFBQVE7QUFDL0M7QUFVQSxlQUFlLGtCQUFrQixRQUE2QztBQUM1RSxRQUFNLEVBQUUsVUFBVSxLQUFLLElBQUk7QUFFM0IsTUFBSSxTQUFTLFFBQVc7QUFDdEIsUUFBSSxLQUFDLHVEQUFxQixJQUFJLEdBQUc7QUFDL0IsWUFBTSxJQUFJLE1BQU0sMENBQTBDLFFBQVEsTUFBTSxJQUFJLHlDQUF5QztBQUFBLElBQ3ZIO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLG1CQUFlLG1EQUFpQixFQUFFLFNBQVMsTUFBTSw2QkFBNkIsR0FBRyxTQUFTLENBQUM7QUFDakcsTUFBSSxpQkFBaUIsUUFBVztBQUM5QixVQUFNLElBQUk7QUFBQSxNQUNSLHFCQUFxQixRQUFRO0FBQUEsSUFFL0I7QUFBQSxFQUNGO0FBRUEsU0FBTztBQUNUOyIsCiAgIm5hbWVzIjogWyJwcm9jZXNzIl0KfQo=
148
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2RlbW8tdmF1bHQtYm9vdHN0cmFwLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogSW5zdGFsbHMgYSBkZW1vIHZhdWx0J3MgKippbmplY3RlZCBjb21tdW5pdHkgcGx1Z2lucyoqIGhlYWRsZXNzbHksIGJ5IGRvd25sb2FkaW5nXG4gKiB0aGVpciBwdWJsaXNoZWQgR2l0SHViIHJlbGVhc2UgYXNzZXRzIHN0cmFpZ2h0IGludG9cbiAqIGBkZW1vLXZhdWx0Ly5vYnNpZGlhbi9wbHVnaW5zLzxpZD4vYC5cbiAqXG4gKiBgYnVpbGREZW1vVmF1bHRQb3B1bGF0ZWAgcmVxdWlyZXMgZWFjaCBpbmplY3RlZCBwbHVnaW4ncyBgbWFpbi5qc2AgL1xuICogYG1hbmlmZXN0Lmpzb25gIHRvIGFscmVhZHkgYmUgb24gZGlzaywgYW5kIHRocm93cyB3aGVuIHRoZXkgYXJlIG5vdC4gVW50aWwgdGhpc1xuICogbW9kdWxlIGV4aXN0ZWQgdGhlIG9ubHkgZG9jdW1lbnRlZCByZW1lZHkgd2FzIGEgKipHVUkgc3RlcCoqIFx1MjAxNCBvcGVuIGBkZW1vLXZhdWx0L2BcbiAqIGluIE9ic2lkaWFuIG9uY2UgYW5kIGxldCBgZGVtby12YXVsdC1oZWxwZXJgIGluc3RhbGwgdGhlIHBsdWdpbiBhdCBydW50aW1lLlxuICogYC5vYnNpZGlhbi9wbHVnaW5zLypgIGlzIGdpdGlnbm9yZWQgaW4gYSBwbHVnaW4gcmVwbywgc28gdGhhdCBzdGF0ZVxuICogZXhpc3RzIG9uIGV4YWN0bHkgdGhlIG9uZSBtYWNoaW5lIHRoYXQgZGlkIGl0IGFuZCBpcyBpbnZpc2libGUgdG8gYSBmcmVzaCBjbG9uZSxcbiAqIGEgbmV3IG1hY2hpbmUsIG9yIENJLiBTaW5jZSBhIHBsdWdpbiByZXBvJ3MgcmVsZWFzZSBwcmVmbGlnaHQgcnVucyBpdHNcbiAqIGludGVncmF0aW9uIHRlc3RzLCB0aGF0IG1hZGUgKmN1dHRpbmcgYSByZWxlYXNlIGZyb20gYSBjbGVhbiBjbG9uZSogaW1wb3NzaWJsZVxuICogd2l0aG91dCBhIGh1bWFuIG9wZW5pbmcgYSBHVUkuXG4gKlxuICogRG93bmxvYWRpbmcgdGhlIHJlbGVhc2UgYXNzZXRzIGlzIHRoZSBleGFjdCBoZWFkbGVzcyBlcXVpdmFsZW50OiB0aGUgcmVzdWx0aW5nXG4gKiBmb2xkZXIgaXMgd2hhdCBPYnNpZGlhbiBpdHNlbGYgd291bGQgaGF2ZSBpbnN0YWxsZWQsIHNvIHRoZSBzaGlwcGVkXG4gKiBgKi1kZW1vLXZhdWx0LnppcGAgXHUyMDE0IHdoaWNoIHVuemlwcyBpbnRvIGEgc2luZ2xlIGAqLWRlbW8tdmF1bHQtPHZlcnNpb24+YCBmb2xkZXIgXHUyMDE0XG4gKiBzdGF5cyB0aGUgc3RhbmRhcmQgZGVtby12YXVsdCBhcnRpZmFjdC5cbiAqXG4gKiBUd28gZW50cnkgcG9pbnRzLCBwbHVzIHRoZSBgYm9vdHN0cmFwLWRlbW8tdmF1bHRgIENMSSBzdWJjb21tYW5kOlxuICpcbiAqIC0ge0BsaW5rIGJvb3RzdHJhcERlbW9WYXVsdFBsdWdpbnN9IFx1MjAxNCBpbnN0YWxsIHRoZSBtaXNzaW5nIG9uZXMsIGV4cGxpY2l0bHkuXG4gKiAtIHtAbGluayBidWlsZERlbW9WYXVsdFBvcHVsYXRlQXN5bmN9IFx1MjAxNCBkbyB0aGF0IGFuZCB0aGVuIGJ1aWxkIHRoZSBwb3B1bGF0ZSBtYXAsXG4gKiAgIHNvIGEgZ2xvYmFsIHNldHVwIHNlbGYtaGVhbHMgd2l0aCBubyBtYW51YWwgc3RlcCBhdCBhbGwuXG4gKlxuICogVGhlIHN5bmMgYGJ1aWxkRGVtb1ZhdWx0UG9wdWxhdGVgIGRlbGliZXJhdGVseSBrZWVwcyB0aHJvd2luZzogYGZldGNoYCBoYXMgbm9cbiAqIHN5bmNocm9ub3VzIGZvcm0sIHNvIGF1dG8taGVhbGluZyBjYW4gb25seSBsaXZlIG9uIGFuIGFzeW5jIHNpYmxpbmcuIEl0cyBtZXNzYWdlXG4gKiBub3cgbmFtZXMgYm90aCByZW1lZGllcyBhYm92ZSBpbnN0ZWFkIG9mIHRoZSBHVUkgc3RlcC5cbiAqL1xuXG5pbXBvcnQge1xuICBta2RpclN5bmMsXG4gIHdyaXRlRmlsZVN5bmNcbn0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmltcG9ydCB0eXBlIHsgQ29tbXVuaXR5UGx1Z2luUmVnaXN0cnlFbnRyeSB9IGZyb20gJy4vY29tbXVuaXR5LXBsdWdpbi1yZWdpc3RyeS5janMnO1xuaW1wb3J0IHR5cGUge1xuICBCdWlsZERlbW9WYXVsdFBvcHVsYXRlUGFyYW1zLFxuICBJbmplY3RQbHVnaW5QYXJhbXNcbn0gZnJvbSAnLi9kZW1vLXZhdWx0LXBvcHVsYXRlLmNqcyc7XG5pbXBvcnQgdHlwZSB7IFBvcHVsYXRlRmlsZXNQYXJhbXMgfSBmcm9tICcuL3RlbXBvcmFyeS12YXVsdC5janMnO1xuXG5pbXBvcnQge1xuICBidWlsZFBsdWdpbkFzc2V0VXJsLFxuICBDT01NVU5JVFlfUExVR0lOU19SRUdJU1RSWV9VUkwsXG4gIGlzVmFsaWRSZXBvUmVmZXJlbmNlLFxuICBPUFRJT05BTF9QTFVHSU5fQVNTRVRfTkFNRVMsXG4gIFJFUVVJUkVEX1BMVUdJTl9BU1NFVF9OQU1FUyxcbiAgc2VsZWN0UGx1Z2luUmVwb1xufSBmcm9tICcuL2NvbW11bml0eS1wbHVnaW4tcmVnaXN0cnkuY2pzJztcbmltcG9ydCB7XG4gIGJ1aWxkRGVtb1ZhdWx0UG9wdWxhdGUsXG4gIHJlc29sdmVJbmplY3RlZFBsdWdpblNvdXJjZURpcmVjdG9yeSxcbiAgcmVzb2x2ZU1pc3NpbmdJbmplY3RlZFBsdWdpbnNcbn0gZnJvbSAnLi9kZW1vLXZhdWx0LXBvcHVsYXRlLmNqcyc7XG5pbXBvcnQgeyBsb2cgfSBmcm9tICcuL2xvZy5janMnO1xuXG4vKipcbiAqIEJyb3dzZXIgYFVzZXItQWdlbnRgIGZvciB0aGUgYXNzZXQgZG93bmxvYWRzLCBtYXRjaGluZyBgb2JzaWRpYW4taW5zdGFsbGVyLnRzYCBcdTIwMTRcbiAqIGEgcGxhaW4gTm9kZSBmZXRjaCBpcyByZWplY3RlZCBieSBzb21lIENETiBlZGdlcy5cbiAqL1xuY29uc3QgRE9XTkxPQURfVVNFUl9BR0VOVCA9ICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTI0LjAuMC4wIFNhZmFyaS81MzcuMzYnO1xuXG5jb25zdCBIVFRQX05PVF9GT1VORCA9IDQwNDtcblxuLyoqXG4gKiBUaGUgY29tbXVuaXR5IHBsdWdpbiByZWdpc3RyeSwgZmV0Y2hlZCBhdCBtb3N0IG9uY2UgcGVyIHByb2Nlc3MuIEV2ZXJ5IGluamVjdGVkXG4gKiBwbHVnaW4gb2YgZXZlcnkgZGVtby12YXVsdCBwcm9qZWN0IGluIGEgcnVuIHJlc29sdmVzIGFnYWluc3QgdGhlIHNhbWUgdGFibGUsIGFuZFxuICogaXQgaXMgYSBtdWx0aS1tZWdhYnl0ZSBkb2N1bWVudC5cbiAqL1xubGV0IHJlZ2lzdHJ5UHJvbWlzZTogUHJvbWlzZTxyZWFkb25seSBDb21tdW5pdHlQbHVnaW5SZWdpc3RyeUVudHJ5W10+IHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBib290c3RyYXBEZW1vVmF1bHRQbHVnaW5zfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCb290c3RyYXBEZW1vVmF1bHRQbHVnaW5zUGFyYW1zIHtcbiAgLyoqXG4gIEFic29sdXRlIHBhdGggdG8gdGhlIHBsdWdpbiByZXBvJ3MgYGRlbW8tdmF1bHQvYCBkaXJlY3RvcnkuXG4gICAqL1xuICByZWFkb25seSBkZW1vVmF1bHRQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpbmplY3RlZCBwbHVnaW5zIHRvIGluc3RhbGwgXHUyMDE0IHRoZSBzYW1lIGxpc3QgcGFzc2VkIHRvIGBidWlsZERlbW9WYXVsdFBvcHVsYXRlYC4gUGx1Z2lucyB3aG9zZVxuICAgKiBiaW5hcmllcyBhcmUgYWxyZWFkeSBwcmVzZW50IGFyZSBza2lwcGVkICh1bmxlc3Mge0BsaW5rIEJvb3RzdHJhcERlbW9WYXVsdFBsdWdpbnNQYXJhbXMuc2hvdWxkRm9yY2V9KSxcbiAgICogYXMgYXJlIHBsdWdpbnMgY2FycnlpbmcgYW4gZXhwbGljaXQgYHNvdXJjZURpcmVjdG9yeWAuXG4gICAqL1xuICByZWFkb25seSBpbmplY3RQbHVnaW5zOiByZWFkb25seSBJbmplY3RQbHVnaW5QYXJhbXNbXTtcblxuICAvKipcbiAgICogV2hldGhlciB0byByZS1kb3dubG9hZCBwbHVnaW5zIHRoYXQgYXJlIGFscmVhZHkgaW5zdGFsbGVkLCByZXBsYWNpbmcgdGhlbSB3aXRoIHRoZSBjdXJyZW50IHJlbGVhc2UuXG4gICAqIERlZmF1bHRzIHRvIGBmYWxzZWAgXHUyMDE0IHRoZSBub3JtYWwgcGF0aCBpbnN0YWxscyBvbmx5IHdoYXQgaXMgbWlzc2luZywgc28gYSB3YXJtIGNoZWNrb3V0IGRvZXMgbm9cbiAgICogbmV0d29yayBJL08gYXQgYWxsLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkRm9yY2U/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFRoZSBvdXRjb21lIG9mIGEge0BsaW5rIGJvb3RzdHJhcERlbW9WYXVsdFBsdWdpbnN9IHJ1bi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCb290c3RyYXBEZW1vVmF1bHRQbHVnaW5zUmVzdWx0IHtcbiAgLyoqXG4gIFRoZSBwbHVnaW5zIHRoYXQgd2VyZSBkb3dubG9hZGVkIGFuZCB3cml0dGVuLCBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIGluc3RhbGxlZC5cbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbGxlZDogcmVhZG9ubHkgSW5zdGFsbGVkUGx1Z2luSW5mb1tdO1xuXG4gIC8qKlxuICBUaGUgaWRzIG9mIHBsdWdpbnMgbGVmdCB1bnRvdWNoZWQgXHUyMDE0IGFscmVhZHkgaW5zdGFsbGVkLCBvciBvcHRlZCBvdXQgdmlhIGFuIGV4cGxpY2l0IGBzb3VyY2VEaXJlY3RvcnlgLlxuICAgKi9cbiAgcmVhZG9ubHkgc2tpcHBlZFBsdWdpbklkczogcmVhZG9ubHkgc3RyaW5nW107XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGJ1aWxkRGVtb1ZhdWx0UG9wdWxhdGVBc3luY30gXHUyMDE0IHRoZSBzYW1lIGJhZyB7QGxpbmsgYnVpbGREZW1vVmF1bHRQb3B1bGF0ZX0gdGFrZXMsXG4gKiB1bmRlciB0aGUgbmFtZSB0aGUgYXN5bmNocm9ub3VzIGJ1aWxkZXIgZGVyaXZlcy5cbiAqXG4gKiBPbmUgZGVjbGFyYXRpb24gc2VydmVzIGJvdGggYnVpbGRlcnMuIEl0IGtlZXBzIHRoZSBzeW5jaHJvbm91cyBidWlsZGVyJ3MgbmFtZSwgYW5kIHRoaXMgYWxpYXMgZ2l2ZXMgdGhlXG4gKiBhc3luY2hyb25vdXMgb25lIGl0cyBvd24sIHNvIG5laXRoZXIgaGFzIHRvIGJlIHNwZWxsZWQgYWZ0ZXIgdGhlIG90aGVyLlxuICovXG5leHBvcnQgdHlwZSBCdWlsZERlbW9WYXVsdFBvcHVsYXRlQXN5bmNQYXJhbXMgPSBCdWlsZERlbW9WYXVsdFBvcHVsYXRlUGFyYW1zO1xuXG4vKipcbiAqIE9uZSBwbHVnaW4gaW5zdGFsbGVkIGJ5IHtAbGluayBib290c3RyYXBEZW1vVmF1bHRQbHVnaW5zfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnN0YWxsZWRQbHVnaW5JbmZvIHtcbiAgLyoqXG4gIFRoZSBhc3NldCBmaWxlIG5hbWVzIGFjdHVhbGx5IHdyaXR0ZW4sIGUuZy4gYFsnbWFpbi5qcycsICdtYW5pZmVzdC5qc29uJywgJ3N0eWxlcy5jc3MnXWAuXG4gICAqL1xuICByZWFkb25seSBhc3NldE5hbWVzOiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKipcbiAgVGhlIHBsdWdpbidzIGlkLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luSWQ6IHN0cmluZztcblxuICAvKipcbiAgVGhlIEdpdEh1YiByZXBvc2l0b3J5IHRoZSBhc3NldHMgY2FtZSBmcm9tLCBhcyBgb3duZXIvbmFtZWAuXG4gICAqL1xuICByZWFkb25seSByZXBvOiBzdHJpbmc7XG5cbiAgLyoqXG4gIFRoZSByZWxlYXNlIHRhZyBkb3dubG9hZGVkIGZyb20sIG9yIGB1bmRlZmluZWRgIHdoZW4gdGhlIHJlcG9zaXRvcnkncyBsYXRlc3QgcmVsZWFzZSB3YXMgdXNlZC5cbiAgICovXG4gIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBJbnN0YWxscyBldmVyeSBpbmplY3RlZCBjb21tdW5pdHkgcGx1Z2luIHdob3NlIGJ1aWx0IGZpbGVzIGFyZSBtaXNzaW5nIGZyb20gdGhlIGRlbW8gdmF1bHQsIGJ5XG4gKiBkb3dubG9hZGluZyBpdHMgcHVibGlzaGVkIHJlbGVhc2UgYXNzZXRzIGludG8gYGRlbW8tdmF1bHQvLm9ic2lkaWFuL3BsdWdpbnMvPGlkPi9gLlxuICpcbiAqIEVhY2ggcGx1Z2luJ3MgcmVwb3NpdG9yeSBjb21lcyBmcm9tIGl0cyB7QGxpbmsgSW5qZWN0UGx1Z2luUGFyYW1zLnJlcG99IHdoZW4gZ2l2ZW4sIG90aGVyd2lzZSBmcm9tXG4gKiBPYnNpZGlhbidzIG93biBjb21tdW5pdHkgcGx1Z2luIHJlZ2lzdHJ5IFx1MjAxNCB0aGUgc2FtZSBgaWRgIFx1MjE5MiBgcmVwb2AgdGFibGUgdGhlIGluLWFwcCBjb21tdW5pdHkgYnJvd3NlclxuICogaW5zdGFsbHMgZnJvbSwgc28gbm8gcGx1Z2luLXNwZWNpZmljIG1hcHBpbmcgaXMgaGFyZGNvZGVkLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIEJvb3RzdHJhcERlbW9WYXVsdFBsdWdpbnNQYXJhbXN9LlxuICogQHJldHVybnMgV2hhdCB3YXMgaW5zdGFsbGVkIGFuZCB3aGF0IHdhcyBza2lwcGVkLlxuICogQHRocm93cyBFcnJvciBpZiBhIHBsdWdpbidzIHJlcG9zaXRvcnkgY2Fubm90IGJlIHJlc29sdmVkLCBvciBhIHJlcXVpcmVkIGFzc2V0IGNhbm5vdCBiZSBkb3dubG9hZGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYm9vdHN0cmFwRGVtb1ZhdWx0UGx1Z2lucyhwYXJhbXM6IEJvb3RzdHJhcERlbW9WYXVsdFBsdWdpbnNQYXJhbXMpOiBQcm9taXNlPEJvb3RzdHJhcERlbW9WYXVsdFBsdWdpbnNSZXN1bHQ+IHtcbiAgY29uc3QgeyBkZW1vVmF1bHRQYXRoLCBpbmplY3RQbHVnaW5zLCBzaG91bGRGb3JjZSA9IGZhbHNlIH0gPSBwYXJhbXM7XG5cbiAgY29uc3QgYm9vdHN0cmFwcGFibGUgPSBpbmplY3RQbHVnaW5zLmZpbHRlcigocGx1Z2luKSA9PiBwbHVnaW4uc291cmNlRGlyZWN0b3J5ID09PSB1bmRlZmluZWQpO1xuICBjb25zdCB0YXJnZXRzID0gc2hvdWxkRm9yY2UgPyBib290c3RyYXBwYWJsZSA6IHJlc29sdmVNaXNzaW5nSW5qZWN0ZWRQbHVnaW5zKHsgZGVtb1ZhdWx0UGF0aCwgaW5qZWN0UGx1Z2lucyB9KTtcbiAgY29uc3QgdGFyZ2V0UGx1Z2luSWRzID0gbmV3IFNldCh0YXJnZXRzLm1hcCgocGx1Z2luKSA9PiBwbHVnaW4ucGx1Z2luSWQpKTtcblxuICBjb25zdCBpbnN0YWxsZWQ6IEluc3RhbGxlZFBsdWdpbkluZm9bXSA9IFtdO1xuICBmb3IgKGNvbnN0IHBsdWdpbiBvZiB0YXJnZXRzKSB7XG4gICAgLy8gU2VxdWVudGlhbCBvbiBwdXJwb3NlOiB0aGUgaW5zdGFsbHMgc2hhcmUgb25lIG1lbW9pc2VkIHJlZ2lzdHJ5IGZldGNoLlxuICAgIC8vIFBhcmFsbGVsaXNtIHdvdWxkIGJ1eSBub3RoaW5nIGJ1dCBpbnRlcmxlYXZlZCBsb2dzIGZvciB0aGUgaGFuZGZ1bCBvZiBwbHVnaW5zIGEgZGVtbyB2YXVsdCBpbmplY3RzLlxuICAgIGluc3RhbGxlZC5wdXNoKGF3YWl0IGluc3RhbGxQbHVnaW4oZGVtb1ZhdWx0UGF0aCwgcGx1Z2luKSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGluc3RhbGxlZCxcbiAgICBza2lwcGVkUGx1Z2luSWRzOiBpbmplY3RQbHVnaW5zLm1hcCgocGx1Z2luKSA9PiBwbHVnaW4ucGx1Z2luSWQpLmZpbHRlcigocGx1Z2luSWQpID0+ICF0YXJnZXRQbHVnaW5JZHMuaGFzKHBsdWdpbklkKSlcbiAgfTtcbn1cblxuLyoqXG4gKiBUaGUgc2VsZi1oZWFsaW5nIGNvdW50ZXJwYXJ0IG9mIGBidWlsZERlbW9WYXVsdFBvcHVsYXRlYDogaW5zdGFsbHMgYW55IGluamVjdGVkIGNvbW11bml0eSBwbHVnaW4gd2hvc2VcbiAqIGJpbmFyaWVzIGFyZSBtaXNzaW5nIChzZWUge0BsaW5rIGJvb3RzdHJhcERlbW9WYXVsdFBsdWdpbnN9KSwgdGhlbiBidWlsZHMgdGhlIHBvcHVsYXRlIG1hcCBleGFjdGx5IGFzIHRoZVxuICogc3luY2hyb25vdXMgYnVpbGRlciBkb2VzLlxuICpcbiAqIFVzZSB0aGlzIGZyb20gYSBnbG9iYWwgc2V0dXAncyBgcG9wdWxhdGVgIHRodW5rIFx1MjAxNCBib3RoIHRoZSBWaXRlc3QgYW5kIEplc3QgYWRhcHRlcnMgYWNjZXB0IGEgdGh1bmtcbiAqIHJldHVybmluZyBhIHByb21pc2UgXHUyMDE0IHNvIGEgZnJlc2ggY2xvbmUsIGEgbmV3IG1hY2hpbmUsIG9yIENJIG5lZWRzIG5vIG1hbnVhbCBpbnN0YWxsIHN0ZXAuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBzYW1lIGJhZyB0aGUgc3luY2hyb25vdXMgYnVpbGRlciB0YWtlcywgYXMge0BsaW5rIEJ1aWxkRGVtb1ZhdWx0UG9wdWxhdGVBc3luY1BhcmFtc30uXG4gKiBAcmV0dXJucyBUaGUgcG9wdWxhdGUgbWFwLCByZWFkeSB0byBoYW5kIHRvIGEgZ2xvYmFsIHNldHVwJ3MgYHBvcHVsYXRlYCBvciBgVGVtcG9yYXJ5VmF1bHQucG9wdWxhdGVgLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGREZW1vVmF1bHRQb3B1bGF0ZUFzeW5jKHBhcmFtczogQnVpbGREZW1vVmF1bHRQb3B1bGF0ZUFzeW5jUGFyYW1zKTogUHJvbWlzZTxQb3B1bGF0ZUZpbGVzUGFyYW1zPiB7XG4gIGlmIChwYXJhbXMuaW5qZWN0UGx1Z2lucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgYXdhaXQgYm9vdHN0cmFwRGVtb1ZhdWx0UGx1Z2lucyh7IGRlbW9WYXVsdFBhdGg6IHBhcmFtcy5kZW1vVmF1bHRQYXRoLCBpbmplY3RQbHVnaW5zOiBwYXJhbXMuaW5qZWN0UGx1Z2lucyB9KTtcbiAgfVxuXG4gIHJldHVybiBidWlsZERlbW9WYXVsdFBvcHVsYXRlKHBhcmFtcyk7XG59XG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBOZXR3b3JrIGRvd25sb2FkIGdsdWUsIGNvdmVyZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG4vKipcbiAqIEJ1aWxkcyB0aGUgcmVxdWVzdCBoZWFkZXJzIGZvciBhIEdpdEh1YiBkb3dubG9hZCwgc2VuZGluZyBhIGBHSVRIVUJfVE9LRU5gIC8gYEdIX1RPS0VOYCBiZWFyZXIgd2hlbiBvbmVcbiAqIGlzIGluIHRoZSBlbnZpcm9ubWVudCBcdTIwMTQgd2l0aG91dCBpdCB0aGUgYW5vbnltb3VzIHF1b3RhIHJldHVybnMgSFRUUCA0MDMgb24gc2hhcmVkIENJIHJ1bm5lciBJUHMuXG4gKlxuICogQHJldHVybnMgVGhlIGhlYWRlcnMgdG8gc2VuZC5cbiAqL1xuZnVuY3Rpb24gYnVpbGRHaXRIdWJIZWFkZXJzKCk6IEhlYWRlcnMge1xuICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoeyAnVXNlci1BZ2VudCc6IERPV05MT0FEX1VTRVJfQUdFTlQgfSk7XG4gIGNvbnN0IHRva2VuID0gcHJvY2Vzcy5lbnZbJ0dJVEhVQl9UT0tFTiddID8/IHByb2Nlc3MuZW52WydHSF9UT0tFTiddO1xuICBpZiAodG9rZW4pIHtcbiAgICBoZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsIGBCZWFyZXIgJHt0b2tlbn1gKTtcbiAgfVxuICByZXR1cm4gaGVhZGVycztcbn1cblxuLyoqXG4gKiBEb3dubG9hZHMgb25lIHJlbGVhc2UgYXNzZXQuXG4gKlxuICogQHBhcmFtIHVybCAtIFRoZSBhc3NldCdzIGRvd25sb2FkIFVSTC5cbiAqIEBwYXJhbSBpc1JlcXVpcmVkIC0gV2hldGhlciBhIG1pc3NpbmcgYXNzZXQgKEhUVFAgNDA0KSBpcyBhbiBlcnJvciByYXRoZXIgdGhhbiBhbiBhYnNlbnQgb3B0aW9uYWwgZmlsZS5cbiAqIEByZXR1cm5zIFRoZSBhc3NldCdzIGJ5dGVzLCBvciBgdW5kZWZpbmVkYCB3aGVuIGFuIG9wdGlvbmFsIGFzc2V0IGlzIG5vdCBwdWJsaXNoZWQuXG4gKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBkb3dubG9hZCBmYWlscyBhbmQgdGhlIGFzc2V0IGlzIHJlcXVpcmVkLlxuICovXG5hc3luYyBmdW5jdGlvbiBkb3dubG9hZEFzc2V0KHVybDogc3RyaW5nLCBpc1JlcXVpcmVkOiBib29sZWFuKTogUHJvbWlzZTxCdWZmZXIgfCB1bmRlZmluZWQ+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHsgaGVhZGVyczogYnVpbGRHaXRIdWJIZWFkZXJzKCkgfSk7XG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICBpZiAoIWlzUmVxdWlyZWQgJiYgcmVzcG9uc2Uuc3RhdHVzID09PSBIVFRQX05PVF9GT1VORCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZG93bmxvYWQgJHt1cmx9OiBIVFRQICR7U3RyaW5nKHJlc3BvbnNlLnN0YXR1cyl9ICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gKTtcbiAgfVxuICByZXR1cm4gQnVmZmVyLmZyb20oYXdhaXQgcmVzcG9uc2UuYXJyYXlCdWZmZXIoKSk7XG59XG5cbi8qKlxuICogRmV0Y2hlcyBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW4gcmVnaXN0cnksIG1lbW9pc2VkIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIHByb2Nlc3MuXG4gKlxuICogQHJldHVybnMgVGhlIHJlZ2lzdHJ5IHJvd3MuXG4gKiBAdGhyb3dzIEVycm9yIGlmIHRoZSByZWdpc3RyeSBjYW5ub3QgYmUgZmV0Y2hlZCBvciBwYXJzZWQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZldGNoQ29tbXVuaXR5UGx1Z2luUmVnaXN0cnkoKTogUHJvbWlzZTxyZWFkb25seSBDb21tdW5pdHlQbHVnaW5SZWdpc3RyeUVudHJ5W10+IHtcbiAgcmVnaXN0cnlQcm9taXNlID8/PSAoYXN5bmMgKCk6IFByb21pc2U8cmVhZG9ubHkgQ29tbXVuaXR5UGx1Z2luUmVnaXN0cnlFbnRyeVtdPiA9PiB7XG4gICAgbG9nKGBbZGVtby12YXVsdC1ib290c3RyYXBdIEZldGNoaW5nIE9ic2lkaWFuJ3MgY29tbXVuaXR5IHBsdWdpbiByZWdpc3RyeSBmcm9tICR7Q09NTVVOSVRZX1BMVUdJTlNfUkVHSVNUUllfVVJMfS4uLmApO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goQ09NTVVOSVRZX1BMVUdJTlNfUkVHSVNUUllfVVJMLCB7IGhlYWRlcnM6IGJ1aWxkR2l0SHViSGVhZGVycygpIH0pO1xuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEZhaWxlZCB0byBmZXRjaCBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW4gcmVnaXN0cnkgKCR7Q09NTVVOSVRZX1BMVUdJTlNfUkVHSVNUUllfVVJMfSk6IGBcbiAgICAgICAgICArIGBIVFRQICR7U3RyaW5nKHJlc3BvbnNlLnN0YXR1cyl9ICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH0uIGBcbiAgICAgICAgICArICdQYXNzIGFuIGV4cGxpY2l0IGByZXBvYCBvbiB0aGUgaW5qZWN0ZWQgcGx1Z2luIHRvIHNraXAgdGhlIHJlZ2lzdHJ5IGxvb2t1cC4nXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIHJlYWRvbmx5IENvbW11bml0eVBsdWdpblJlZ2lzdHJ5RW50cnlbXTtcbiAgfSkoKTtcblxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCByZWdpc3RyeVByb21pc2U7XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgLy8gRG8gbm90IG1lbW9pc2UgYSBmYWlsdXJlOiBhIHRyYW5zaWVudCBuZXR3b3JrIGVycm9yIG11c3Qgbm90IHBvaXNvbiBldmVyeSBsYXRlciBsb29rdXAuXG4gICAgcmVnaXN0cnlQcm9taXNlID0gdW5kZWZpbmVkO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbi8qKlxuICogRG93bmxvYWRzIG9uZSBwbHVnaW4ncyByZWxlYXNlIGFzc2V0cyBhbmQgd3JpdGVzIHRoZW0gaW50byB0aGUgZGVtbyB2YXVsdC5cbiAqXG4gKiBAcGFyYW0gZGVtb1ZhdWx0UGF0aCAtIFRoZSBkZW1vIHZhdWx0IHJvb3QuXG4gKiBAcGFyYW0gcGx1Z2luIC0gVGhlIHBsdWdpbiB0byBpbnN0YWxsLlxuICogQHJldHVybnMgV2hhdCB3YXMgaW5zdGFsbGVkLlxuICogQHRocm93cyBFcnJvciBpZiB0aGUgcmVwb3NpdG9yeSBjYW5ub3QgYmUgcmVzb2x2ZWQgb3IgYSByZXF1aXJlZCBhc3NldCBjYW5ub3QgYmUgZG93bmxvYWRlZC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gaW5zdGFsbFBsdWdpbihkZW1vVmF1bHRQYXRoOiBzdHJpbmcsIHBsdWdpbjogSW5qZWN0UGx1Z2luUGFyYW1zKTogUHJvbWlzZTxJbnN0YWxsZWRQbHVnaW5JbmZvPiB7XG4gIGNvbnN0IHsgcGx1Z2luSWQsIHZlcnNpb24gfSA9IHBsdWdpbjtcbiAgY29uc3QgcmVwbyA9IGF3YWl0IHJlc29sdmVQbHVnaW5SZXBvKHBsdWdpbik7XG4gIGNvbnN0IHRhcmdldERpcmVjdG9yeSA9IHJlc29sdmVJbmplY3RlZFBsdWdpblNvdXJjZURpcmVjdG9yeSh7IGRlbW9WYXVsdFBhdGgsIHBsdWdpbiB9KTtcblxuICBsb2coYFtkZW1vLXZhdWx0LWJvb3RzdHJhcF0gSW5zdGFsbGluZyBcIiR7cGx1Z2luSWR9XCIgZnJvbSAke3JlcG99QCR7dmVyc2lvbiA/PyAnbGF0ZXN0J30gaW50byAke3RhcmdldERpcmVjdG9yeX0uLi5gKTtcblxuICBjb25zdCBkb3dubG9hZHMgPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgLi4uUkVRVUlSRURfUExVR0lOX0FTU0VUX05BTUVTLm1hcChhc3luYyAoYXNzZXROYW1lKSA9PiAoe1xuICAgICAgYXNzZXROYW1lLFxuICAgICAgY29udGVudDogYXdhaXQgZG93bmxvYWRBc3NldChidWlsZFBsdWdpbkFzc2V0VXJsKHsgYXNzZXROYW1lLCByZXBvLCB2ZXJzaW9uIH0pLCB0cnVlKVxuICAgIH0pKSxcbiAgICAuLi5PUFRJT05BTF9QTFVHSU5fQVNTRVRfTkFNRVMubWFwKGFzeW5jIChhc3NldE5hbWUpID0+ICh7XG4gICAgICBhc3NldE5hbWUsXG4gICAgICBjb250ZW50OiBhd2FpdCBkb3dubG9hZEFzc2V0KGJ1aWxkUGx1Z2luQXNzZXRVcmwoeyBhc3NldE5hbWUsIHJlcG8sIHZlcnNpb24gfSksIGZhbHNlKVxuICAgIH0pKVxuICBdKTtcblxuICBta2RpclN5bmModGFyZ2V0RGlyZWN0b3J5LCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICBjb25zdCBhc3NldE5hbWVzOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IHsgYXNzZXROYW1lLCBjb250ZW50IH0gb2YgZG93bmxvYWRzKSB7XG4gICAgaWYgKGNvbnRlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHdyaXRlRmlsZVN5bmMoam9pbih0YXJnZXREaXJlY3RvcnksIGFzc2V0TmFtZSksIGNvbnRlbnQpO1xuICAgIGFzc2V0TmFtZXMucHVzaChhc3NldE5hbWUpO1xuICB9XG5cbiAgbG9nKGBbZGVtby12YXVsdC1ib290c3RyYXBdIEluc3RhbGxlZCBcIiR7cGx1Z2luSWR9XCI6ICR7YXNzZXROYW1lcy5qb2luKCcsICcpfS5gKTtcblxuICByZXR1cm4geyBhc3NldE5hbWVzLCBwbHVnaW5JZCwgcmVwbywgdmVyc2lvbiB9O1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBHaXRIdWIgcmVwb3NpdG9yeSBwdWJsaXNoaW5nIGEgcGx1Z2luIFx1MjAxNCB0aGUgZXhwbGljaXQgb3ZlcnJpZGUgd2hlbiBnaXZlbiwgb3RoZXJ3aXNlXG4gKiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW4gcmVnaXN0cnkuXG4gKlxuICogQHBhcmFtIHBsdWdpbiAtIFRoZSBwbHVnaW4gdG8gcmVzb2x2ZS5cbiAqIEByZXR1cm5zIFRoZSBgb3duZXIvbmFtZWAgcmVwb3NpdG9yeSByZWZlcmVuY2UuXG4gKiBAdGhyb3dzIEVycm9yIGlmIGFuIGV4cGxpY2l0IG92ZXJyaWRlIGlzIG1hbGZvcm1lZCwgb3IgdGhlIGlkIGlzIG5vdCBhIHJlZ2lzdGVyZWQgY29tbXVuaXR5IHBsdWdpbi5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVBsdWdpblJlcG8ocGx1Z2luOiBJbmplY3RQbHVnaW5QYXJhbXMpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCB7IHBsdWdpbklkLCByZXBvIH0gPSBwbHVnaW47XG5cbiAgaWYgKHJlcG8gIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICghaXNWYWxpZFJlcG9SZWZlcmVuY2UocmVwbykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBcXGByZXBvXFxgIGZvciBjb21tdW5pdHkgcGx1Z2luIFwiJHtwbHVnaW5JZH1cIjogJHtyZXBvfS4gRXhwZWN0ZWQgYW4gXFxgb3duZXIvbmFtZVxcYCByZWZlcmVuY2UuYCk7XG4gICAgfVxuICAgIHJldHVybiByZXBvO1xuICB9XG5cbiAgY29uc3QgcmVnaXN0cnlSZXBvID0gc2VsZWN0UGx1Z2luUmVwbyh7IGVudHJpZXM6IGF3YWl0IGZldGNoQ29tbXVuaXR5UGx1Z2luUmVnaXN0cnkoKSwgcGx1Z2luSWQgfSk7XG4gIGlmIChyZWdpc3RyeVJlcG8gPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBDb21tdW5pdHkgcGx1Z2luIFwiJHtwbHVnaW5JZH1cIiBpcyBub3QgbGlzdGVkIGluIE9ic2lkaWFuJ3MgY29tbXVuaXR5IHBsdWdpbiByZWdpc3RyeSwgc28gaXRzIEdpdEh1YiBgXG4gICAgICAgICsgJ3JlcG9zaXRvcnkgY2Fubm90IGJlIHJlc29sdmVkLiBQYXNzIGFuIGV4cGxpY2l0IGByZXBvYCAoYG93bmVyL25hbWVgKSBvbiB0aGUgaW5qZWN0ZWQgcGx1Z2luLidcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHJlZ2lzdHJ5UmVwbztcbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFpQ0EscUJBR087QUFDUCx1QkFBcUI7QUFDckIsMEJBQW9CO0FBU3BCLHVDQU9PO0FBQ1AsaUNBSU87QUFDUCxpQkFBb0I7QUFNcEIsTUFBTSxzQkFBc0I7QUFFNUIsTUFBTSxpQkFBaUI7QUFPdkIsSUFBSTtBQXVGSixlQUFzQiwwQkFBMEIsUUFBbUY7QUFDakksUUFBTSxFQUFFLGVBQWUsZUFBZSxjQUFjLE1BQU0sSUFBSTtBQUU5RCxRQUFNLGlCQUFpQixjQUFjLE9BQU8sQ0FBQyxXQUFXLE9BQU8sb0JBQW9CLE1BQVM7QUFDNUYsUUFBTSxVQUFVLGNBQWMscUJBQWlCLDBEQUE4QixFQUFFLGVBQWUsY0FBYyxDQUFDO0FBQzdHLFFBQU0sa0JBQWtCLElBQUksSUFBSSxRQUFRLElBQUksQ0FBQyxXQUFXLE9BQU8sUUFBUSxDQUFDO0FBRXhFLFFBQU0sWUFBbUMsQ0FBQztBQUMxQyxhQUFXLFVBQVUsU0FBUztBQUc1QixjQUFVLEtBQUssTUFBTSxjQUFjLGVBQWUsTUFBTSxDQUFDO0FBQUEsRUFDM0Q7QUFFQSxTQUFPO0FBQUEsSUFDTDtBQUFBLElBQ0Esa0JBQWtCLGNBQWMsSUFBSSxDQUFDLFdBQVcsT0FBTyxRQUFRLEVBQUUsT0FBTyxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsSUFBSSxRQUFRLENBQUM7QUFBQSxFQUN0SDtBQUNGO0FBYUEsZUFBc0IsNEJBQTRCLFFBQXlFO0FBQ3pILE1BQUksT0FBTyxrQkFBa0IsUUFBVztBQUN0QyxVQUFNLDBCQUEwQixFQUFFLGVBQWUsT0FBTyxlQUFlLGVBQWUsT0FBTyxjQUFjLENBQUM7QUFBQSxFQUM5RztBQUVBLGFBQU8sbURBQXVCLE1BQU07QUFDdEM7QUFVQSxTQUFTLHFCQUE4QjtBQUNyQyxRQUFNLFVBQVUsSUFBSSxRQUFRLEVBQUUsY0FBYyxvQkFBb0IsQ0FBQztBQUNqRSxRQUFNLFFBQVEsb0JBQUFBLFFBQVEsSUFBSSxjQUFjLEtBQUssb0JBQUFBLFFBQVEsSUFBSSxVQUFVO0FBQ25FLE1BQUksT0FBTztBQUNULFlBQVEsSUFBSSxpQkFBaUIsVUFBVSxLQUFLLEVBQUU7QUFBQSxFQUNoRDtBQUNBLFNBQU87QUFDVDtBQVVBLGVBQWUsY0FBYyxLQUFhLFlBQWtEO0FBQzFGLFFBQU0sV0FBVyxNQUFNLE1BQU0sS0FBSyxFQUFFLFNBQVMsbUJBQW1CLEVBQUUsQ0FBQztBQUNuRSxNQUFJLENBQUMsU0FBUyxJQUFJO0FBQ2hCLFFBQUksQ0FBQyxjQUFjLFNBQVMsV0FBVyxnQkFBZ0I7QUFDckQsYUFBTztBQUFBLElBQ1Q7QUFDQSxVQUFNLElBQUksTUFBTSxzQkFBc0IsR0FBRyxVQUFVLE9BQU8sU0FBUyxNQUFNLENBQUMsSUFBSSxTQUFTLFVBQVUsRUFBRTtBQUFBLEVBQ3JHO0FBQ0EsU0FBTyxPQUFPLEtBQUssTUFBTSxTQUFTLFlBQVksQ0FBQztBQUNqRDtBQVFBLGVBQWUsK0JBQWlGO0FBQzlGLHVCQUFxQixZQUE4RDtBQUNqRix3QkFBSSw2RUFBNkUsK0RBQThCLEtBQUs7QUFDcEgsVUFBTSxXQUFXLE1BQU0sTUFBTSxpRUFBZ0MsRUFBRSxTQUFTLG1CQUFtQixFQUFFLENBQUM7QUFDOUYsUUFBSSxDQUFDLFNBQVMsSUFBSTtBQUNoQixZQUFNLElBQUk7QUFBQSxRQUNSLHlEQUF5RCwrREFBOEIsV0FDM0UsT0FBTyxTQUFTLE1BQU0sQ0FBQyxJQUFJLFNBQVMsVUFBVTtBQUFBLE1BRTVEO0FBQUEsSUFDRjtBQUNBLFdBQU8sTUFBTSxTQUFTLEtBQUs7QUFBQSxFQUM3QixHQUFHO0FBRUgsTUFBSTtBQUNGLFdBQU8sTUFBTTtBQUFBLEVBQ2YsU0FBUyxPQUFnQjtBQUV2QixzQkFBa0I7QUFDbEIsVUFBTTtBQUFBLEVBQ1I7QUFDRjtBQVVBLGVBQWUsY0FBYyxlQUF1QixRQUEwRDtBQUM1RyxRQUFNLEVBQUUsVUFBVSxRQUFRLElBQUk7QUFDOUIsUUFBTSxPQUFPLE1BQU0sa0JBQWtCLE1BQU07QUFDM0MsUUFBTSxzQkFBa0IsaUVBQXFDLEVBQUUsZUFBZSxPQUFPLENBQUM7QUFFdEYsc0JBQUksc0NBQXNDLFFBQVEsVUFBVSxJQUFJLElBQUksV0FBVyxRQUFRLFNBQVMsZUFBZSxLQUFLO0FBRXBILFFBQU0sWUFBWSxNQUFNLFFBQVEsSUFBSTtBQUFBLElBQ2xDLEdBQUcsNkRBQTRCLElBQUksT0FBTyxlQUFlO0FBQUEsTUFDdkQ7QUFBQSxNQUNBLFNBQVMsTUFBTSxrQkFBYyxzREFBb0IsRUFBRSxXQUFXLE1BQU0sUUFBUSxDQUFDLEdBQUcsSUFBSTtBQUFBLElBQ3RGLEVBQUU7QUFBQSxJQUNGLEdBQUcsNkRBQTRCLElBQUksT0FBTyxlQUFlO0FBQUEsTUFDdkQ7QUFBQSxNQUNBLFNBQVMsTUFBTSxrQkFBYyxzREFBb0IsRUFBRSxXQUFXLE1BQU0sUUFBUSxDQUFDLEdBQUcsS0FBSztBQUFBLElBQ3ZGLEVBQUU7QUFBQSxFQUNKLENBQUM7QUFFRCxnQ0FBVSxpQkFBaUIsRUFBRSxXQUFXLEtBQUssQ0FBQztBQUU5QyxRQUFNLGFBQXVCLENBQUM7QUFDOUIsYUFBVyxFQUFFLFdBQVcsUUFBUSxLQUFLLFdBQVc7QUFDOUMsUUFBSSxZQUFZLFFBQVc7QUFDekI7QUFBQSxJQUNGO0FBQ0EsMENBQWMsdUJBQUssaUJBQWlCLFNBQVMsR0FBRyxPQUFPO0FBQ3ZELGVBQVcsS0FBSyxTQUFTO0FBQUEsRUFDM0I7QUFFQSxzQkFBSSxxQ0FBcUMsUUFBUSxNQUFNLFdBQVcsS0FBSyxJQUFJLENBQUMsR0FBRztBQUUvRSxTQUFPLEVBQUUsWUFBWSxVQUFVLE1BQU0sUUFBUTtBQUMvQztBQVVBLGVBQWUsa0JBQWtCLFFBQTZDO0FBQzVFLFFBQU0sRUFBRSxVQUFVLEtBQUssSUFBSTtBQUUzQixNQUFJLFNBQVMsUUFBVztBQUN0QixRQUFJLEtBQUMsdURBQXFCLElBQUksR0FBRztBQUMvQixZQUFNLElBQUksTUFBTSwwQ0FBMEMsUUFBUSxNQUFNLElBQUkseUNBQXlDO0FBQUEsSUFDdkg7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sbUJBQWUsbURBQWlCLEVBQUUsU0FBUyxNQUFNLDZCQUE2QixHQUFHLFNBQVMsQ0FBQztBQUNqRyxNQUFJLGlCQUFpQixRQUFXO0FBQzlCLFVBQU0sSUFBSTtBQUFBLE1BQ1IscUJBQXFCLFFBQVE7QUFBQSxJQUUvQjtBQUFBLEVBQ0Y7QUFFQSxTQUFPO0FBQ1Q7IiwKICAibmFtZXMiOiBbInByb2Nlc3MiXQp9Cg==
@@ -66,6 +66,14 @@ export interface BootstrapDemoVaultPluginsResult {
66
66
  */
67
67
  readonly skippedPluginIds: readonly string[];
68
68
  }
69
+ /**
70
+ * Parameters for {@link buildDemoVaultPopulateAsync} — the same bag {@link buildDemoVaultPopulate} takes,
71
+ * under the name the asynchronous builder derives.
72
+ *
73
+ * One declaration serves both builders. It keeps the synchronous builder's name, and this alias gives the
74
+ * asynchronous one its own, so neither has to be spelled after the other.
75
+ */
76
+ export type BuildDemoVaultPopulateAsyncParams = BuildDemoVaultPopulateParams;
69
77
  /**
70
78
  * One plugin installed by {@link bootstrapDemoVaultPlugins}.
71
79
  */
@@ -108,7 +116,7 @@ export declare function bootstrapDemoVaultPlugins(params: BootstrapDemoVaultPlug
108
116
  * Use this from a global setup's `populate` thunk — both the Vitest and Jest adapters accept a thunk
109
117
  * returning a promise — so a fresh clone, a new machine, or CI needs no manual install step.
110
118
  *
111
- * @param params - The same `BuildDemoVaultPopulateParams` the synchronous builder takes.
119
+ * @param params - The same bag the synchronous builder takes, as {@link BuildDemoVaultPopulateAsyncParams}.
112
120
  * @returns The populate map, ready to hand to a global setup's `populate` or `TemporaryVault.populate`.
113
121
  */
114
- export declare function buildDemoVaultPopulateAsync(params: BuildDemoVaultPopulateParams): Promise<PopulateFilesParams>;
122
+ export declare function buildDemoVaultPopulateAsync(params: BuildDemoVaultPopulateAsyncParams): Promise<PopulateFilesParams>;
@@ -85,4 +85,4 @@ async function writeDeviceSetting(params) {
85
85
  withSoftKeyboardEnabled,
86
86
  writeDeviceSetting
87
87
  });
88
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2RldmljZS1zZXR0aW5ncy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFJlYWRzIGFuZCB3cml0ZXMgQW5kcm9pZCBkZXZpY2Ugc2V0dGluZ3MgXHUyMDE0IGFuZCB3cmFwcyB0aGUgb25lIHNldHRpbmcgYVxuICogc2NyZWVuc2hvdCBzdWl0ZSBoYXMgdG8gY2hhbmdlLlxuICpcbiAqIFRoZSBzY3JlZW5zaG90IEFWRHMgYXJlIGJ1aWx0IGBody5rZXlib2FyZD15ZXNgLCBzbyBBbmRyb2lkIHN1cHByZXNzZXMgdGhlXG4gKiBvbi1zY3JlZW4ga2V5Ym9hcmQgZXZlbiB3aGVyZSB0aGUgcGFnZSBhc2tzIGZvciBvbmUuIGBzaG93X2ltZV93aXRoX2hhcmRfa2V5Ym9hcmRgXG4gKiBpcyB3aGF0IHR1cm5zIGl0IGJhY2sgb24uIHtAbGluayB3aXRoU29mdEtleWJvYXJkRW5hYmxlZH0gZmxpcHMgaXQsIHJ1bnMgdGhlXG4gKiB3b3JrLCBhbmQgcHV0cyB0aGUgZGV2aWNlIGJhY2sgZXhhY3RseSBhcyBpdCBmb3VuZCBpdCBcdTIwMTQgaW5jbHVkaW5nIHJlc3RvcmluZyBhXG4gKiBzZXR0aW5nIHRoYXQgaGFkIG5ldmVyIGJlZW4gd3JpdHRlbiwgd2hpY2ggdGFrZXMgYSBkZWxldGUgcmF0aGVyIHRoYW4gYSB3cml0ZVxuICogKHNlZSBgZGV2aWNlLXNldHRpbmctcmVzdG9yZWApLlxuICpcbiAqIEV2ZXJ5IGZ1bmN0aW9uIGhlcmUgc2hlbGxzIG91dCwgc28gdGhlIHdob2xlIG1vZHVsZSBpcyBpbnRlZ3JhdGlvbi10aW1lIGNvZGU7XG4gKiB0aGUgcmVzdG9yZSBkZWNpc2lvbiBhbmQgdGhlIGFyZ3VtZW50IGxpc3QgaXQgZGVwZW5kcyBvbiBhcmUgdW5pdC10ZXN0ZWQgaW5cbiAqIHRoZWlyIG93biBtb2R1bGVzLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIGNvZGUgKHNoZWxscyBvdXQgdG8gYSByZWFsIGRldmljZSkgY292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB0eXBlIHsgRGV2aWNlU2V0dGluZ05hbWVzcGFjZSB9IGZyb20gJy4vZGV2aWNlLXNldHRpbmdzLWNvbW1hbmQuY2pzJztcblxuaW1wb3J0IHsgcnVuQWRiVGV4dCB9IGZyb20gJy4vYWRiLmNqcyc7XG5pbXBvcnQge1xuICBEZXZpY2VTZXR0aW5nUmVzdG9yZUtpbmQsXG4gIHJlc29sdmVEZXZpY2VTZXR0aW5nUmVzdG9yZVxufSBmcm9tICcuL2RldmljZS1zZXR0aW5nLXJlc3RvcmUuY2pzJztcbmltcG9ydCB7XG4gIGJ1aWxkRGV2aWNlU2V0dGluZ3NDb21tYW5kQXJndW1lbnRzLFxuICBEZXZpY2VTZXR0aW5nVmVyYlxufSBmcm9tICcuL2RldmljZS1zZXR0aW5ncy1jb21tYW5kLmNqcyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGRlbGV0ZURldmljZVNldHRpbmd9IGFuZCB7QGxpbmsgcmVhZERldmljZVNldHRpbmd9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERldmljZVNldHRpbmdQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGRldmljZSB0byBhZGRyZXNzLlxuICAgKi9cbiAgcmVhZG9ubHkgZGV2aWNlSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNldHRpbmcncyBuYW1lIHdpdGhpbiB7QGxpbmsgbmFtZXNwYWNlfSwgZS5nLiBgc2hvd19pbWVfd2l0aF9oYXJkX2tleWJvYXJkYC5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNldHRpbmdzIG5hbWVzcGFjZSB0aGUgbmFtZSBsaXZlcyBpbi5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIERldmljZVNldHRpbmdOYW1lc3BhY2UuU2VjdXJlfVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZXNwYWNlPzogRGV2aWNlU2V0dGluZ05hbWVzcGFjZTtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgd2l0aFNvZnRLZXlib2FyZEVuYWJsZWR9LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFdoYXQgdGhlIHdyYXBwZWQgd29yayByZXR1cm5zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdpdGhTb2Z0S2V5Ym9hcmRFbmFibGVkUGFyYW1zPFQ+IHtcbiAgLyoqXG4gICAqIFRoZSB3b3JrIHRvIHJ1biB3aGlsZSB0aGUgb24tc2NyZWVuIGtleWJvYXJkIGlzIHBlcm1pdHRlZC5cbiAgICovXG4gIGNhbGxiYWNrKHRoaXM6IHZvaWQpOiBQcm9taXNlPFQ+O1xuXG4gIC8qKlxuICAgKiBUaGUgZGV2aWNlIHRvIGFkZHJlc3MuXG4gICAqL1xuICByZWFkb25seSBkZXZpY2VJZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayB3cml0ZURldmljZVNldHRpbmd9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdyaXRlRGV2aWNlU2V0dGluZ1BhcmFtcyBleHRlbmRzIERldmljZVNldHRpbmdQYXJhbXMge1xuICAvKipcbiAgICogVGhlIHZhbHVlIHRvIHdyaXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgc2V0dGluZyBkZWNpZGluZyB3aGV0aGVyIEFuZHJvaWQgZHJhd3MgYSBrZXlib2FyZCB3aGlsZSBhIGhhcmR3YXJlIG9uZSBpcyBhdHRhY2hlZC5cbiAqL1xuY29uc3QgU09GVF9LRVlCT0FSRF9TRVRUSU5HX05BTUUgPSAnc2hvd19pbWVfd2l0aF9oYXJkX2tleWJvYXJkJztcblxuY29uc3QgU09GVF9LRVlCT0FSRF9TRVRUSU5HX09OID0gJzEnO1xuXG4vKipcbiAqIENsZWFycyBhIGRldmljZSBzZXR0aW5nLCByZXR1cm5pbmcgaXQgdG8gbmV2ZXItaGF2aW5nLWJlZW4td3JpdHRlbi5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGRldmljZSwgdGhlIHNldHRpbmcgYW5kIGl0cyBuYW1lc3BhY2UuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHNldHRpbmcgaXMgZ29uZS5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG9ic2lkaWFuLWRldi11dGlscy9wYXJhbXMtb3B0aW9ucy1uYW1lLW1hdGNoIC0tIFBlcm1hbmVudDogYERldmljZVNldHRpbmdQYXJhbXNgIGlzIG9uZSBiYWcgc2hhcmVkIGJ5IHRoZSByZWFkIGFuZCBkZWxldGUgaGVscGVycywgc28gbm8gcGVyLW93bmVyIG5hbWUgY2FuIHNhdGlzZnkgYm90aC5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxldGVEZXZpY2VTZXR0aW5nKHBhcmFtczogRGV2aWNlU2V0dGluZ1BhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBydW5BZGJUZXh0KHtcbiAgICBjb21tYW5kQXJndW1lbnRzOiBidWlsZERldmljZVNldHRpbmdzQ29tbWFuZEFyZ3VtZW50cyh7XG4gICAgICBuYW1lOiBwYXJhbXMubmFtZSxcbiAgICAgIC4uLihwYXJhbXMubmFtZXNwYWNlICE9PSB1bmRlZmluZWQgJiYgeyBuYW1lc3BhY2U6IHBhcmFtcy5uYW1lc3BhY2UgfSksXG4gICAgICB2ZXJiOiBEZXZpY2VTZXR0aW5nVmVyYi5EZWxldGVcbiAgICB9KSxcbiAgICBkZXZpY2VJZDogcGFyYW1zLmRldmljZUlkXG4gIH0pO1xufVxuXG4vKipcbiAqIFJlYWRzIGEgZGV2aWNlIHNldHRpbmcuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBkZXZpY2UsIHRoZSBzZXR0aW5nIGFuZCBpdHMgbmFtZXNwYWNlLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgc2V0dGluZydzIHZhbHVlLCBvciB0aGUgbGl0ZXJhbCBgbnVsbGAgd2hlbiBpdCBoYXMgbmV2ZXJcbiAqICAgYmVlbiB3cml0dGVuLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgb2JzaWRpYW4tZGV2LXV0aWxzL3BhcmFtcy1vcHRpb25zLW5hbWUtbWF0Y2ggLS0gUGVybWFuZW50OiBgRGV2aWNlU2V0dGluZ1BhcmFtc2AgaXMgb25lIGJhZyBzaGFyZWQgYnkgdGhlIHJlYWQgYW5kIGRlbGV0ZSBoZWxwZXJzLCBzbyBubyBwZXItb3duZXIgbmFtZSBjYW4gc2F0aXNmeSBib3RoLlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWREZXZpY2VTZXR0aW5nKHBhcmFtczogRGV2aWNlU2V0dGluZ1BhcmFtcyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBhd2FpdCBydW5BZGJUZXh0KHtcbiAgICBjb21tYW5kQXJndW1lbnRzOiBidWlsZERldmljZVNldHRpbmdzQ29tbWFuZEFyZ3VtZW50cyh7XG4gICAgICBuYW1lOiBwYXJhbXMubmFtZSxcbiAgICAgIC4uLihwYXJhbXMubmFtZXNwYWNlICE9PSB1bmRlZmluZWQgJiYgeyBuYW1lc3BhY2U6IHBhcmFtcy5uYW1lc3BhY2UgfSksXG4gICAgICB2ZXJiOiBEZXZpY2VTZXR0aW5nVmVyYi5HZXRcbiAgICB9KSxcbiAgICBkZXZpY2VJZDogcGFyYW1zLmRldmljZUlkXG4gIH0pO1xufVxuXG4vKipcbiAqIFBlcm1pdHMgdGhlIG9uLXNjcmVlbiBrZXlib2FyZCBmb3IgdGhlIGR1cmF0aW9uIG9mIGEgY2FsbGJhY2ssIHRoZW4gcmVzdG9yZXMgdGhlIGRldmljZSBleGFjdGx5LlxuICpcbiAqIFRoZSByZXN0b3JlIHJ1bnMgd2hldGhlciB0aGUgY2FsbGJhY2sgc3VjY2VlZGVkIG9yIHRocmV3IFx1MjAxNCBhIHN1aXRlIHRoYXQgZGllcyBtaWQtY2FwdHVyZSBtdXN0IG5vdCBsZWF2ZVxuICogdGhlIGRldmljZSBjb25maWd1cmVkIGRpZmZlcmVudGx5IHRoYW4gaXQgZm91bmQgaXQuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gV2hhdCB0aGUgd3JhcHBlZCB3b3JrIHJldHVybnMuXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGRldmljZSBhbmQgdGhlIHdvcmsgdG8gcnVuLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB3aGF0ZXZlciB0aGUgY2FsbGJhY2sgcmV0dXJuZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3aXRoU29mdEtleWJvYXJkRW5hYmxlZDxUPihwYXJhbXM6IFdpdGhTb2Z0S2V5Ym9hcmRFbmFibGVkUGFyYW1zPFQ+KTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IHNldHRpbmdQYXJhbXM6IERldmljZVNldHRpbmdQYXJhbXMgPSB7XG4gICAgZGV2aWNlSWQ6IHBhcmFtcy5kZXZpY2VJZCxcbiAgICBuYW1lOiBTT0ZUX0tFWUJPQVJEX1NFVFRJTkdfTkFNRVxuICB9O1xuXG4gIGNvbnN0IHByZXZpb3VzVmFsdWUgPSBhd2FpdCByZWFkRGV2aWNlU2V0dGluZyhzZXR0aW5nUGFyYW1zKTtcbiAgYXdhaXQgd3JpdGVEZXZpY2VTZXR0aW5nKHsgLi4uc2V0dGluZ1BhcmFtcywgdmFsdWU6IFNPRlRfS0VZQk9BUkRfU0VUVElOR19PTiB9KTtcblxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBwYXJhbXMuY2FsbGJhY2soKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjb25zdCByZXN0b3JlID0gcmVzb2x2ZURldmljZVNldHRpbmdSZXN0b3JlKHByZXZpb3VzVmFsdWUpO1xuICAgIGlmIChyZXN0b3JlLmtpbmQgPT09IERldmljZVNldHRpbmdSZXN0b3JlS2luZC5EZWxldGUpIHtcbiAgICAgIGF3YWl0IGRlbGV0ZURldmljZVNldHRpbmcoc2V0dGluZ1BhcmFtcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHdyaXRlRGV2aWNlU2V0dGluZyh7IC4uLnNldHRpbmdQYXJhbXMsIHZhbHVlOiByZXN0b3JlLnZhbHVlIH0pO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFdyaXRlcyBhIGRldmljZSBzZXR0aW5nLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZGV2aWNlLCB0aGUgc2V0dGluZywgaXRzIG5hbWVzcGFjZSBhbmQgdGhlIHZhbHVlIHRvIHdyaXRlLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBzZXR0aW5nIGlzIHdyaXR0ZW4uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3cml0ZURldmljZVNldHRpbmcocGFyYW1zOiBXcml0ZURldmljZVNldHRpbmdQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgcnVuQWRiVGV4dCh7XG4gICAgY29tbWFuZEFyZ3VtZW50czogYnVpbGREZXZpY2VTZXR0aW5nc0NvbW1hbmRBcmd1bWVudHMoe1xuICAgICAgbmFtZTogcGFyYW1zLm5hbWUsXG4gICAgICAuLi4ocGFyYW1zLm5hbWVzcGFjZSAhPT0gdW5kZWZpbmVkICYmIHsgbmFtZXNwYWNlOiBwYXJhbXMubmFtZXNwYWNlIH0pLFxuICAgICAgdmFsdWU6IHBhcmFtcy52YWx1ZSxcbiAgICAgIHZlcmI6IERldmljZVNldHRpbmdWZXJiLlB1dFxuICAgIH0pLFxuICAgIGRldmljZUlkOiBwYXJhbXMuZGV2aWNlSWRcbiAgfSk7XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBc0JBLGlCQUEyQjtBQUMzQixvQ0FHTztBQUNQLHFDQUdPO0FBc0RQLE1BQU0sNkJBQTZCO0FBRW5DLE1BQU0sMkJBQTJCO0FBU2pDLGVBQXNCLG9CQUFvQixRQUE0QztBQUNwRixZQUFNLHVCQUFXO0FBQUEsSUFDZixzQkFBa0Isb0VBQW9DO0FBQUEsTUFDcEQsTUFBTSxPQUFPO0FBQUEsTUFDYixHQUFJLE9BQU8sY0FBYyxVQUFhLEVBQUUsV0FBVyxPQUFPLFVBQVU7QUFBQSxNQUNwRSxNQUFNLGlEQUFrQjtBQUFBLElBQzFCLENBQUM7QUFBQSxJQUNELFVBQVUsT0FBTztBQUFBLEVBQ25CLENBQUM7QUFDSDtBQVVBLGVBQXNCLGtCQUFrQixRQUE4QztBQUNwRixTQUFPLFVBQU0sdUJBQVc7QUFBQSxJQUN0QixzQkFBa0Isb0VBQW9DO0FBQUEsTUFDcEQsTUFBTSxPQUFPO0FBQUEsTUFDYixHQUFJLE9BQU8sY0FBYyxVQUFhLEVBQUUsV0FBVyxPQUFPLFVBQVU7QUFBQSxNQUNwRSxNQUFNLGlEQUFrQjtBQUFBLElBQzFCLENBQUM7QUFBQSxJQUNELFVBQVUsT0FBTztBQUFBLEVBQ25CLENBQUM7QUFDSDtBQVlBLGVBQXNCLHdCQUEyQixRQUFzRDtBQUNyRyxRQUFNLGdCQUFxQztBQUFBLElBQ3pDLFVBQVUsT0FBTztBQUFBLElBQ2pCLE1BQU07QUFBQSxFQUNSO0FBRUEsUUFBTSxnQkFBZ0IsTUFBTSxrQkFBa0IsYUFBYTtBQUMzRCxRQUFNLG1CQUFtQixFQUFFLEdBQUcsZUFBZSxPQUFPLHlCQUF5QixDQUFDO0FBRTlFLE1BQUk7QUFDRixXQUFPLE1BQU0sT0FBTyxTQUFTO0FBQUEsRUFDL0IsVUFBRTtBQUNBLFVBQU0sY0FBVSwyREFBNEIsYUFBYTtBQUN6RCxRQUFJLFFBQVEsU0FBUyx1REFBeUIsUUFBUTtBQUNwRCxZQUFNLG9CQUFvQixhQUFhO0FBQUEsSUFDekMsT0FBTztBQUNMLFlBQU0sbUJBQW1CLEVBQUUsR0FBRyxlQUFlLE9BQU8sUUFBUSxNQUFNLENBQUM7QUFBQSxJQUNyRTtBQUFBLEVBQ0Y7QUFDRjtBQVFBLGVBQXNCLG1CQUFtQixRQUFpRDtBQUN4RixZQUFNLHVCQUFXO0FBQUEsSUFDZixzQkFBa0Isb0VBQW9DO0FBQUEsTUFDcEQsTUFBTSxPQUFPO0FBQUEsTUFDYixHQUFJLE9BQU8sY0FBYyxVQUFhLEVBQUUsV0FBVyxPQUFPLFVBQVU7QUFBQSxNQUNwRSxPQUFPLE9BQU87QUFBQSxNQUNkLE1BQU0saURBQWtCO0FBQUEsSUFDMUIsQ0FBQztBQUFBLElBQ0QsVUFBVSxPQUFPO0FBQUEsRUFDbkIsQ0FBQztBQUNIOyIsCiAgIm5hbWVzIjogW10KfQo=
88
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2RldmljZS1zZXR0aW5ncy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFJlYWRzIGFuZCB3cml0ZXMgQW5kcm9pZCBkZXZpY2Ugc2V0dGluZ3MgXHUyMDE0IGFuZCB3cmFwcyB0aGUgb25lIHNldHRpbmcgYVxuICogc2NyZWVuc2hvdCBzdWl0ZSBoYXMgdG8gY2hhbmdlLlxuICpcbiAqIFRoZSBzY3JlZW5zaG90IEFWRHMgYXJlIGJ1aWx0IGBody5rZXlib2FyZD15ZXNgLCBzbyBBbmRyb2lkIHN1cHByZXNzZXMgdGhlXG4gKiBvbi1zY3JlZW4ga2V5Ym9hcmQgZXZlbiB3aGVyZSB0aGUgcGFnZSBhc2tzIGZvciBvbmUuIGBzaG93X2ltZV93aXRoX2hhcmRfa2V5Ym9hcmRgXG4gKiBpcyB3aGF0IHR1cm5zIGl0IGJhY2sgb24uIHtAbGluayB3aXRoU29mdEtleWJvYXJkRW5hYmxlZH0gZmxpcHMgaXQsIHJ1bnMgdGhlXG4gKiB3b3JrLCBhbmQgcHV0cyB0aGUgZGV2aWNlIGJhY2sgZXhhY3RseSBhcyBpdCBmb3VuZCBpdCBcdTIwMTQgaW5jbHVkaW5nIHJlc3RvcmluZyBhXG4gKiBzZXR0aW5nIHRoYXQgaGFkIG5ldmVyIGJlZW4gd3JpdHRlbiwgd2hpY2ggdGFrZXMgYSBkZWxldGUgcmF0aGVyIHRoYW4gYSB3cml0ZVxuICogKHNlZSBgZGV2aWNlLXNldHRpbmctcmVzdG9yZWApLlxuICpcbiAqIEV2ZXJ5IGZ1bmN0aW9uIGhlcmUgc2hlbGxzIG91dCwgc28gdGhlIHdob2xlIG1vZHVsZSBpcyBpbnRlZ3JhdGlvbi10aW1lIGNvZGU7XG4gKiB0aGUgcmVzdG9yZSBkZWNpc2lvbiBhbmQgdGhlIGFyZ3VtZW50IGxpc3QgaXQgZGVwZW5kcyBvbiBhcmUgdW5pdC10ZXN0ZWQgaW5cbiAqIHRoZWlyIG93biBtb2R1bGVzLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIGNvZGUgKHNoZWxscyBvdXQgdG8gYSByZWFsIGRldmljZSkgY292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB0eXBlIHsgRGV2aWNlU2V0dGluZ05hbWVzcGFjZSB9IGZyb20gJy4vZGV2aWNlLXNldHRpbmdzLWNvbW1hbmQuY2pzJztcblxuaW1wb3J0IHsgcnVuQWRiVGV4dCB9IGZyb20gJy4vYWRiLmNqcyc7XG5pbXBvcnQge1xuICBEZXZpY2VTZXR0aW5nUmVzdG9yZUtpbmQsXG4gIHJlc29sdmVEZXZpY2VTZXR0aW5nUmVzdG9yZVxufSBmcm9tICcuL2RldmljZS1zZXR0aW5nLXJlc3RvcmUuY2pzJztcbmltcG9ydCB7XG4gIGJ1aWxkRGV2aWNlU2V0dGluZ3NDb21tYW5kQXJndW1lbnRzLFxuICBEZXZpY2VTZXR0aW5nVmVyYlxufSBmcm9tICcuL2RldmljZS1zZXR0aW5ncy1jb21tYW5kLmNqcyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGRlbGV0ZURldmljZVNldHRpbmd9IGFuZCB7QGxpbmsgcmVhZERldmljZVNldHRpbmd9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERldmljZVNldHRpbmdQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGRldmljZSB0byBhZGRyZXNzLlxuICAgKi9cbiAgcmVhZG9ubHkgZGV2aWNlSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNldHRpbmcncyBuYW1lIHdpdGhpbiB7QGxpbmsgbmFtZXNwYWNlfSwgZS5nLiBgc2hvd19pbWVfd2l0aF9oYXJkX2tleWJvYXJkYC5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNldHRpbmdzIG5hbWVzcGFjZSB0aGUgbmFtZSBsaXZlcyBpbi5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIERldmljZVNldHRpbmdOYW1lc3BhY2UuU2VjdXJlfVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZXNwYWNlPzogRGV2aWNlU2V0dGluZ05hbWVzcGFjZTtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgd2l0aFNvZnRLZXlib2FyZEVuYWJsZWR9LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFdoYXQgdGhlIHdyYXBwZWQgd29yayByZXR1cm5zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdpdGhTb2Z0S2V5Ym9hcmRFbmFibGVkUGFyYW1zPFQ+IHtcbiAgLyoqXG4gICAqIFRoZSB3b3JrIHRvIHJ1biB3aGlsZSB0aGUgb24tc2NyZWVuIGtleWJvYXJkIGlzIHBlcm1pdHRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGNhbGxiYWNrOiAodGhpczogdm9pZCkgPT4gUHJvbWlzZTxUPjtcblxuICAvKipcbiAgICogVGhlIGRldmljZSB0byBhZGRyZXNzLlxuICAgKi9cbiAgcmVhZG9ubHkgZGV2aWNlSWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgd3JpdGVEZXZpY2VTZXR0aW5nfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXcml0ZURldmljZVNldHRpbmdQYXJhbXMgZXh0ZW5kcyBEZXZpY2VTZXR0aW5nUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSB0byB3cml0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHNldHRpbmcgZGVjaWRpbmcgd2hldGhlciBBbmRyb2lkIGRyYXdzIGEga2V5Ym9hcmQgd2hpbGUgYSBoYXJkd2FyZSBvbmUgaXMgYXR0YWNoZWQuXG4gKi9cbmNvbnN0IFNPRlRfS0VZQk9BUkRfU0VUVElOR19OQU1FID0gJ3Nob3dfaW1lX3dpdGhfaGFyZF9rZXlib2FyZCc7XG5cbmNvbnN0IFNPRlRfS0VZQk9BUkRfU0VUVElOR19PTiA9ICcxJztcblxuLyoqXG4gKiBDbGVhcnMgYSBkZXZpY2Ugc2V0dGluZywgcmV0dXJuaW5nIGl0IHRvIG5ldmVyLWhhdmluZy1iZWVuLXdyaXR0ZW4uXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBkZXZpY2UsIHRoZSBzZXR0aW5nIGFuZCBpdHMgbmFtZXNwYWNlLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBzZXR0aW5nIGlzIGdvbmUuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBvYnNpZGlhbi1kZXYtdXRpbHMvcGFyYW1zLW9wdGlvbnMtbmFtZS1tYXRjaCAtLSBQZXJtYW5lbnQ6IGBEZXZpY2VTZXR0aW5nUGFyYW1zYCBpcyBvbmUgYmFnIHNoYXJlZCBieSB0aGUgcmVhZCBhbmQgZGVsZXRlIGhlbHBlcnMsIHNvIG5vIHBlci1vd25lciBuYW1lIGNhbiBzYXRpc2Z5IGJvdGguXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVsZXRlRGV2aWNlU2V0dGluZyhwYXJhbXM6IERldmljZVNldHRpbmdQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgcnVuQWRiVGV4dCh7XG4gICAgY29tbWFuZEFyZ3VtZW50czogYnVpbGREZXZpY2VTZXR0aW5nc0NvbW1hbmRBcmd1bWVudHMoe1xuICAgICAgbmFtZTogcGFyYW1zLm5hbWUsXG4gICAgICAuLi4ocGFyYW1zLm5hbWVzcGFjZSAhPT0gdW5kZWZpbmVkICYmIHsgbmFtZXNwYWNlOiBwYXJhbXMubmFtZXNwYWNlIH0pLFxuICAgICAgdmVyYjogRGV2aWNlU2V0dGluZ1ZlcmIuRGVsZXRlXG4gICAgfSksXG4gICAgZGV2aWNlSWQ6IHBhcmFtcy5kZXZpY2VJZFxuICB9KTtcbn1cblxuLyoqXG4gKiBSZWFkcyBhIGRldmljZSBzZXR0aW5nLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZGV2aWNlLCB0aGUgc2V0dGluZyBhbmQgaXRzIG5hbWVzcGFjZS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHNldHRpbmcncyB2YWx1ZSwgb3IgdGhlIGxpdGVyYWwgYG51bGxgIHdoZW4gaXQgaGFzIG5ldmVyXG4gKiAgIGJlZW4gd3JpdHRlbi5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG9ic2lkaWFuLWRldi11dGlscy9wYXJhbXMtb3B0aW9ucy1uYW1lLW1hdGNoIC0tIFBlcm1hbmVudDogYERldmljZVNldHRpbmdQYXJhbXNgIGlzIG9uZSBiYWcgc2hhcmVkIGJ5IHRoZSByZWFkIGFuZCBkZWxldGUgaGVscGVycywgc28gbm8gcGVyLW93bmVyIG5hbWUgY2FuIHNhdGlzZnkgYm90aC5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkRGV2aWNlU2V0dGluZyhwYXJhbXM6IERldmljZVNldHRpbmdQYXJhbXMpOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gYXdhaXQgcnVuQWRiVGV4dCh7XG4gICAgY29tbWFuZEFyZ3VtZW50czogYnVpbGREZXZpY2VTZXR0aW5nc0NvbW1hbmRBcmd1bWVudHMoe1xuICAgICAgbmFtZTogcGFyYW1zLm5hbWUsXG4gICAgICAuLi4ocGFyYW1zLm5hbWVzcGFjZSAhPT0gdW5kZWZpbmVkICYmIHsgbmFtZXNwYWNlOiBwYXJhbXMubmFtZXNwYWNlIH0pLFxuICAgICAgdmVyYjogRGV2aWNlU2V0dGluZ1ZlcmIuR2V0XG4gICAgfSksXG4gICAgZGV2aWNlSWQ6IHBhcmFtcy5kZXZpY2VJZFxuICB9KTtcbn1cblxuLyoqXG4gKiBQZXJtaXRzIHRoZSBvbi1zY3JlZW4ga2V5Ym9hcmQgZm9yIHRoZSBkdXJhdGlvbiBvZiBhIGNhbGxiYWNrLCB0aGVuIHJlc3RvcmVzIHRoZSBkZXZpY2UgZXhhY3RseS5cbiAqXG4gKiBUaGUgcmVzdG9yZSBydW5zIHdoZXRoZXIgdGhlIGNhbGxiYWNrIHN1Y2NlZWRlZCBvciB0aHJldyBcdTIwMTQgYSBzdWl0ZSB0aGF0IGRpZXMgbWlkLWNhcHR1cmUgbXVzdCBub3QgbGVhdmVcbiAqIHRoZSBkZXZpY2UgY29uZmlndXJlZCBkaWZmZXJlbnRseSB0aGFuIGl0IGZvdW5kIGl0LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFdoYXQgdGhlIHdyYXBwZWQgd29yayByZXR1cm5zLlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBkZXZpY2UgYW5kIHRoZSB3b3JrIHRvIHJ1bi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gd2hhdGV2ZXIgdGhlIGNhbGxiYWNrIHJldHVybmVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2l0aFNvZnRLZXlib2FyZEVuYWJsZWQ8VD4ocGFyYW1zOiBXaXRoU29mdEtleWJvYXJkRW5hYmxlZFBhcmFtczxUPik6IFByb21pc2U8VD4ge1xuICBjb25zdCBzZXR0aW5nUGFyYW1zOiBEZXZpY2VTZXR0aW5nUGFyYW1zID0ge1xuICAgIGRldmljZUlkOiBwYXJhbXMuZGV2aWNlSWQsXG4gICAgbmFtZTogU09GVF9LRVlCT0FSRF9TRVRUSU5HX05BTUVcbiAgfTtcblxuICBjb25zdCBwcmV2aW91c1ZhbHVlID0gYXdhaXQgcmVhZERldmljZVNldHRpbmcoc2V0dGluZ1BhcmFtcyk7XG4gIGF3YWl0IHdyaXRlRGV2aWNlU2V0dGluZyh7IC4uLnNldHRpbmdQYXJhbXMsIHZhbHVlOiBTT0ZUX0tFWUJPQVJEX1NFVFRJTkdfT04gfSk7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgcGFyYW1zLmNhbGxiYWNrKCk7XG4gIH0gZmluYWxseSB7XG4gICAgY29uc3QgcmVzdG9yZSA9IHJlc29sdmVEZXZpY2VTZXR0aW5nUmVzdG9yZShwcmV2aW91c1ZhbHVlKTtcbiAgICBpZiAocmVzdG9yZS5raW5kID09PSBEZXZpY2VTZXR0aW5nUmVzdG9yZUtpbmQuRGVsZXRlKSB7XG4gICAgICBhd2FpdCBkZWxldGVEZXZpY2VTZXR0aW5nKHNldHRpbmdQYXJhbXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB3cml0ZURldmljZVNldHRpbmcoeyAuLi5zZXR0aW5nUGFyYW1zLCB2YWx1ZTogcmVzdG9yZS52YWx1ZSB9KTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBXcml0ZXMgYSBkZXZpY2Ugc2V0dGluZy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGRldmljZSwgdGhlIHNldHRpbmcsIGl0cyBuYW1lc3BhY2UgYW5kIHRoZSB2YWx1ZSB0byB3cml0ZS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgc2V0dGluZyBpcyB3cml0dGVuLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd3JpdGVEZXZpY2VTZXR0aW5nKHBhcmFtczogV3JpdGVEZXZpY2VTZXR0aW5nUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IHJ1bkFkYlRleHQoe1xuICAgIGNvbW1hbmRBcmd1bWVudHM6IGJ1aWxkRGV2aWNlU2V0dGluZ3NDb21tYW5kQXJndW1lbnRzKHtcbiAgICAgIG5hbWU6IHBhcmFtcy5uYW1lLFxuICAgICAgLi4uKHBhcmFtcy5uYW1lc3BhY2UgIT09IHVuZGVmaW5lZCAmJiB7IG5hbWVzcGFjZTogcGFyYW1zLm5hbWVzcGFjZSB9KSxcbiAgICAgIHZhbHVlOiBwYXJhbXMudmFsdWUsXG4gICAgICB2ZXJiOiBEZXZpY2VTZXR0aW5nVmVyYi5QdXRcbiAgICB9KSxcbiAgICBkZXZpY2VJZDogcGFyYW1zLmRldmljZUlkXG4gIH0pO1xufVxuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXNCQSxpQkFBMkI7QUFDM0Isb0NBR087QUFDUCxxQ0FHTztBQXNEUCxNQUFNLDZCQUE2QjtBQUVuQyxNQUFNLDJCQUEyQjtBQVNqQyxlQUFzQixvQkFBb0IsUUFBNEM7QUFDcEYsWUFBTSx1QkFBVztBQUFBLElBQ2Ysc0JBQWtCLG9FQUFvQztBQUFBLE1BQ3BELE1BQU0sT0FBTztBQUFBLE1BQ2IsR0FBSSxPQUFPLGNBQWMsVUFBYSxFQUFFLFdBQVcsT0FBTyxVQUFVO0FBQUEsTUFDcEUsTUFBTSxpREFBa0I7QUFBQSxJQUMxQixDQUFDO0FBQUEsSUFDRCxVQUFVLE9BQU87QUFBQSxFQUNuQixDQUFDO0FBQ0g7QUFVQSxlQUFzQixrQkFBa0IsUUFBOEM7QUFDcEYsU0FBTyxVQUFNLHVCQUFXO0FBQUEsSUFDdEIsc0JBQWtCLG9FQUFvQztBQUFBLE1BQ3BELE1BQU0sT0FBTztBQUFBLE1BQ2IsR0FBSSxPQUFPLGNBQWMsVUFBYSxFQUFFLFdBQVcsT0FBTyxVQUFVO0FBQUEsTUFDcEUsTUFBTSxpREFBa0I7QUFBQSxJQUMxQixDQUFDO0FBQUEsSUFDRCxVQUFVLE9BQU87QUFBQSxFQUNuQixDQUFDO0FBQ0g7QUFZQSxlQUFzQix3QkFBMkIsUUFBc0Q7QUFDckcsUUFBTSxnQkFBcUM7QUFBQSxJQUN6QyxVQUFVLE9BQU87QUFBQSxJQUNqQixNQUFNO0FBQUEsRUFDUjtBQUVBLFFBQU0sZ0JBQWdCLE1BQU0sa0JBQWtCLGFBQWE7QUFDM0QsUUFBTSxtQkFBbUIsRUFBRSxHQUFHLGVBQWUsT0FBTyx5QkFBeUIsQ0FBQztBQUU5RSxNQUFJO0FBQ0YsV0FBTyxNQUFNLE9BQU8sU0FBUztBQUFBLEVBQy9CLFVBQUU7QUFDQSxVQUFNLGNBQVUsMkRBQTRCLGFBQWE7QUFDekQsUUFBSSxRQUFRLFNBQVMsdURBQXlCLFFBQVE7QUFDcEQsWUFBTSxvQkFBb0IsYUFBYTtBQUFBLElBQ3pDLE9BQU87QUFDTCxZQUFNLG1CQUFtQixFQUFFLEdBQUcsZUFBZSxPQUFPLFFBQVEsTUFBTSxDQUFDO0FBQUEsSUFDckU7QUFBQSxFQUNGO0FBQ0Y7QUFRQSxlQUFzQixtQkFBbUIsUUFBaUQ7QUFDeEYsWUFBTSx1QkFBVztBQUFBLElBQ2Ysc0JBQWtCLG9FQUFvQztBQUFBLE1BQ3BELE1BQU0sT0FBTztBQUFBLE1BQ2IsR0FBSSxPQUFPLGNBQWMsVUFBYSxFQUFFLFdBQVcsT0FBTyxVQUFVO0FBQUEsTUFDcEUsT0FBTyxPQUFPO0FBQUEsTUFDZCxNQUFNLGlEQUFrQjtBQUFBLElBQzFCLENBQUM7QUFBQSxJQUNELFVBQVUsT0FBTztBQUFBLEVBQ25CLENBQUM7QUFDSDsiLAogICJuYW1lcyI6IFtdCn0K
@@ -44,7 +44,7 @@ export interface WithSoftKeyboardEnabledParams<T> {
44
44
  /**
45
45
  * The work to run while the on-screen keyboard is permitted.
46
46
  */
47
- callback(this: void): Promise<T>;
47
+ readonly callback: (this: void) => Promise<T>;
48
48
  /**
49
49
  * The device to address.
50
50
  */