velocious 1.0.694 → 1.0.695

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 (52) hide show
  1. package/README.md +1 -1
  2. package/build/configuration-types.js +1 -0
  3. package/build/database/advisory-lock-runner.js +31 -0
  4. package/build/database/advisory-lock-telemetry.js +129 -0
  5. package/build/database/drivers/base.js +114 -2
  6. package/build/database/drivers/mssql/index.js +16 -0
  7. package/build/database/drivers/mysql/index.js +14 -0
  8. package/build/database/drivers/pgsql/index.js +17 -0
  9. package/build/database/drivers/sqlite/base.js +20 -0
  10. package/build/database/drivers/sqlite/index.js +33 -0
  11. package/build/database/record/index.js +28 -0
  12. package/build/src/configuration-types.d.ts +8 -0
  13. package/build/src/configuration-types.d.ts.map +1 -1
  14. package/build/src/configuration-types.js +2 -1
  15. package/build/src/database/advisory-lock-runner.d.ts +32 -0
  16. package/build/src/database/advisory-lock-runner.d.ts.map +1 -1
  17. package/build/src/database/advisory-lock-runner.js +29 -1
  18. package/build/src/database/advisory-lock-telemetry.d.ts +129 -0
  19. package/build/src/database/advisory-lock-telemetry.d.ts.map +1 -0
  20. package/build/src/database/advisory-lock-telemetry.js +122 -0
  21. package/build/src/database/drivers/base.d.ts +51 -0
  22. package/build/src/database/drivers/base.d.ts.map +1 -1
  23. package/build/src/database/drivers/base.js +104 -3
  24. package/build/src/database/drivers/mssql/index.d.ts +8 -0
  25. package/build/src/database/drivers/mssql/index.d.ts.map +1 -1
  26. package/build/src/database/drivers/mssql/index.js +13 -1
  27. package/build/src/database/drivers/mysql/index.d.ts +8 -0
  28. package/build/src/database/drivers/mysql/index.d.ts.map +1 -1
  29. package/build/src/database/drivers/mysql/index.js +13 -1
  30. package/build/src/database/drivers/pgsql/index.d.ts +8 -0
  31. package/build/src/database/drivers/pgsql/index.d.ts.map +1 -1
  32. package/build/src/database/drivers/pgsql/index.js +14 -1
  33. package/build/src/database/drivers/sqlite/base.d.ts +12 -0
  34. package/build/src/database/drivers/sqlite/base.d.ts.map +1 -1
  35. package/build/src/database/drivers/sqlite/base.js +18 -1
  36. package/build/src/database/drivers/sqlite/index.d.ts +15 -0
  37. package/build/src/database/drivers/sqlite/index.d.ts.map +1 -1
  38. package/build/src/database/drivers/sqlite/index.js +31 -1
  39. package/build/src/database/record/index.d.ts +54 -0
  40. package/build/src/database/record/index.d.ts.map +1 -1
  41. package/build/src/database/record/index.js +26 -1
  42. package/package.json +1 -1
  43. package/src/configuration-types.js +1 -0
  44. package/src/database/advisory-lock-runner.js +31 -0
  45. package/src/database/advisory-lock-telemetry.js +129 -0
  46. package/src/database/drivers/base.js +114 -2
  47. package/src/database/drivers/mssql/index.js +16 -0
  48. package/src/database/drivers/mysql/index.js +14 -0
  49. package/src/database/drivers/pgsql/index.js +17 -0
  50. package/src/database/drivers/sqlite/base.js +20 -0
  51. package/src/database/drivers/sqlite/index.js +33 -0
  52. package/src/database/record/index.js +28 -0
@@ -1 +1 @@
1
- {"version":3,"file":"configuration-types.d.ts","sourceRoot":"","sources":["../../src/configuration-types.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"configuration-types.d.ts","sourceRoot":"","sources":["../../src/configuration-types.js"],"names":[],"mappings":"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"}
@@ -59,6 +59,7 @@
59
59
  /**
60
60
  * @typedef {object} DatabaseConfigurationType
61
61
  * @property {number | null} [advisoryLockAcquireTimeoutMs] - Bound (ms) a blocking advisory-lock acquisition waits for a contended lock before reporting failure. Default: `900000` (15 minutes). `null` opts out and restores the driver's indefinite wait. A per-call `timeoutMs` argument always overrides this.
62
+ * @property {{slowAcquireMs?: number | null, slowHoldMs?: number | null}} [advisoryLockTelemetry] - Event-driven advisory-lock duration telemetry thresholds. `slowAcquireMs` (default `5000`) reports an acquire wait that completed slower than the threshold, including the eventual outcome; `advisory-lock-acquire-timeout` always fires when a wait exceeds its bound and carries the holder identity available on the tier at that moment. `slowHoldMs` (default `60000`) reports a hold that outlives the threshold at release. `null` disables that report. Reports fire on the events themselves — no periodic scanner — on `getErrorEvents()` as `framework-error` with `context: "advisory-lock-telemetry"`. See [docs/advisory-locks.md](../docs/advisory-locks.md).
62
63
  * @property {string} [databaseCharset] - Default character set applied by `db:create` via mysql/mariadb `CREATE DATABASE ... CHARACTER SET`. Distinct from `charset`, which is the client connection charset forwarded to the mysql2 driver.
63
64
  * @property {string} [databaseCollation] - Default collation applied by `db:create` via mysql/mariadb `CREATE DATABASE ... COLLATE`.
64
65
  * @property {string} [database] - Database name for this connection.
@@ -730,4 +731,4 @@
730
731
  * @property {WebsocketMessageHandlerResolverType} [websocketMessageHandlerResolver] - Resolve a raw websocket message handler for each connection.
731
732
  */
732
733
  export const nothing = {};
733
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi10eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25maWd1cmF0aW9uLXR5cGVzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWjs7R0FFRztBQUVIOzs7OztHQUtHO0FBRUg7O0dBRUc7QUFFSDs7R0FFRztBQUVIOzs7Ozs7R0FNRztBQUVIOztHQUVHO0FBRUg7Ozs7Ozs7O0dBUUc7QUFFSDs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUVIOzs7OztHQUtHO0FBRUg7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQ0c7QUFFSDs7R0FFRztBQUVIOzs7Ozs7R0FNRztBQUVIOzs7O0dBSUc7QUFFSDs7OztHQUlHO0FBRUg7O0dBRUc7QUFFSDs7Ozs7Ozs7Ozs7O0dBWUc7QUFFSDs7OztHQUlHO0FBRUg7Ozs7Ozs7Ozs7O0dBV0c7QUFFSCw0REFBNEQ7QUFDNUQseUZBQXlGO0FBQ3pGLDhKQUE4SjtBQUM5SiwrRkFBK0Y7QUFFL0Y7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBZ0ZHO0FBRUg7Ozs7Ozs7Ozs7O0dBV0c7QUFDSDs7Ozs7Ozs7R0FRRztBQUVIOzs7Ozs7OztHQVFHO0FBRUg7Ozs7OztHQU1HO0FBRUg7Ozs7OztHQU1HO0FBRUg7Ozs7O0dBS0c7QUFFSDs7OztHQUlHO0FBRUgsOEhBQThIO0FBRTlIOzs7O0dBSUc7QUFFSDs7Ozs7Ozs7Ozs7OztHQWFHO0FBRUg7OztHQUdHO0FBRUg7Ozs7Ozs7O0dBUUc7QUFFSDs7R0FFRztBQUVIOztHQUVHO0FBRUg7Ozs7O0dBS0c7QUFFSDs7Ozs7Ozs7OztHQVVHO0FBRUg7Ozs7Ozs7R0FPRztBQUVIOztHQUVHO0FBRUg7O0dBRUc7QUFFSDs7O0dBR0c7QUFFSDs7R0FFRztBQUVIOzs7OztHQUtHO0FBRUg7Ozs7OztHQU1HO0FBRUg7Ozs7OztHQU1HO0FBRUg7Ozs7OztHQU1HO0FBRUg7Ozs7OztHQU1HO0FBR0g7O0dBRUc7QUFFSDs7Ozs7O0dBTUc7QUFFSDs7Ozs7Ozs7OztHQVVHO0FBRUg7Ozs7R0FJRztBQUVIOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVIOzs7Ozs7O0dBT0c7QUFFSDs7OztHQUlHO0FBRUg7OztHQUdHO0FBRUg7Ozs7Ozs7Ozs7O0dBV0c7QUFFSDs7Ozs7R0FLRztBQUVIOzs7OztHQUtHO0FBRUg7Ozs7Ozs7R0FPRztBQUVIOzs7Ozs7R0FNRztBQUVIOzs7Ozs7R0FNRztBQUVIOzs7Ozs7Ozs7OztHQVdHO0FBRUg7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFFSDs7Ozs7Ozs7O0dBU0c7QUFFSDs7Ozs7Ozs7O0dBU0c7QUFFSDs7Ozs7Ozs7OztHQVVHO0FBRUg7OztHQUdHO0FBRUg7Ozs7O0dBS0c7QUFFSDs7OztHQUlHO0FBRUg7OztHQUdHO0FBRUg7Ozs7Ozs7R0FPRztBQUVIOzs7Ozs7Ozs7R0FTRztBQUVIOzs7Ozs7O0dBT0c7QUFFSDs7Ozs7Ozs7OztHQVVHO0FBRUg7O0dBRUc7QUFFSDs7Ozs7Ozs7O0dBU0c7QUFFSDs7Ozs7Ozs7Ozs7R0FXRztBQUVIOztHQUVHO0FBRUg7O0dBRUc7QUFFSDs7R0FFRztBQUVIOztHQUVHO0FBRUg7O0dBRUc7QUFFSDs7OztHQUlHO0FBQ0g7Ozs7R0FJRztBQUdIOzs7O0dBSUc7QUFFSDs7Ozs7Ozs7O0dBU0c7QUFFSDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThDRztBQUVILE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuLyoqXG4gKiBAbW9kdWxlIHR5cGVzXG4gKi9cblxuLyoqXG4gKiBJbW11dGFibGUgaWRlbnRpdHkgc2hhcmVkIGJ5IGFwcGxpY2F0aW9uIGluaXRpYWxpemVycyBmb3Igb25lIHByb2Nlc3MgbGlmZWN5Y2xlLlxuICogQHR5cGVkZWYge29iamVjdH0gQXBwbGljYXRpb25Qcm9jZXNzQ29udGV4dFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHR5cGUgLSBHZW5lcmljIHByb2Nlc3MgdHlwZSBzdXBwbGllZCB0byBgY29uZmlndXJhdGlvbi5pbml0aWFsaXplKClgLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGluc3RhbmNlSWQgLSBPcGFxdWUgaWRlbnRpdHkgdW5pcXVlIHRvIHRoaXMgbGlmZWN5Y2xlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgeyhhcmdzOiB7cmVxdWVzdDogaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvcmVxdWVzdC5qc1wiKS5kZWZhdWx0IHwgaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvd2Vic29ja2V0LXJlcXVlc3QuanNcIikuZGVmYXVsdCwgcmVzcG9uc2U6IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3Jlc3BvbnNlLmpzXCIpLmRlZmF1bHR9KSA9PiBQcm9taXNlPHZvaWQ+fSBDb3JzVHlwZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgeyhhcmdzOiB7cmVxdWVzdDogaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvcmVxdWVzdC5qc1wiKS5kZWZhdWx0IHwgaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvd2Vic29ja2V0LXJlcXVlc3QuanNcIikuZGVmYXVsdCB8IHVuZGVmaW5lZCwgc3Vic2NyaXB0aW9uPzoge2NoYW5uZWw6IHN0cmluZywgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fSwgY2xpZW50OiBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC9pbmRleC5qc1wiKS5kZWZhdWx0LCB3ZWJzb2NrZXRTZXNzaW9uOiBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC93ZWJzb2NrZXQtc2Vzc2lvbi5qc1wiKS5kZWZhdWx0LCBjb25maWd1cmF0aW9uOiBpbXBvcnQoXCIuL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0pID0+IHR5cGVvZiBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL3dlYnNvY2tldC1jaGFubmVsLmpzXCIpLmRlZmF1bHQgfCBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL3dlYnNvY2tldC1jaGFubmVsLmpzXCIpLmRlZmF1bHQgfCB2b2lkIHwgUHJvbWlzZTx0eXBlb2YgaW1wb3J0KFwiLi9odHRwLXNlcnZlci93ZWJzb2NrZXQtY2hhbm5lbC5qc1wiKS5kZWZhdWx0IHwgaW1wb3J0KFwiLi9odHRwLXNlcnZlci93ZWJzb2NrZXQtY2hhbm5lbC5qc1wiKS5kZWZhdWx0IHwgdm9pZD59IFdlYnNvY2tldENoYW5uZWxSZXNvbHZlclR5cGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFdlYnNvY2tldE1lc3NhZ2VIYW5kbGVyXG4gKiBAcHJvcGVydHkgeyhhcmdzOiB7bWVzc2FnZTogUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4sIHNlc3Npb246IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3dlYnNvY2tldC1zZXNzaW9uLmpzXCIpLmRlZmF1bHR9KSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZH0gW29uTWVzc2FnZV0gLSBIYW5kbGVyIGZvciBpbmNvbWluZyB3ZWJzb2NrZXQgbWVzc2FnZXMuXG4gKiBAcHJvcGVydHkgeyhhcmdzOiB7c2Vzc2lvbjogaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvd2Vic29ja2V0LXNlc3Npb24uanNcIikuZGVmYXVsdH0pID0+IFByb21pc2U8dm9pZD4gfCB2b2lkfSBbb25PcGVuXSAtIEhhbmRsZXIgd2hlbiB0aGUgd2Vic29ja2V0IHNlc3Npb24gb3BlbnMuXG4gKiBAcHJvcGVydHkgeyhhcmdzOiB7c2Vzc2lvbjogaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvd2Vic29ja2V0LXNlc3Npb24uanNcIikuZGVmYXVsdH0pID0+IFByb21pc2U8dm9pZD4gfCB2b2lkfSBbb25DbG9zZV0gLSBIYW5kbGVyIHdoZW4gdGhlIHdlYnNvY2tldCBzZXNzaW9uIGNsb3Nlcy5cbiAqIEBwcm9wZXJ0eSB7KGFyZ3M6IHtlcnJvcjogRXJyb3IsIHNlc3Npb246IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3dlYnNvY2tldC1zZXNzaW9uLmpzXCIpLmRlZmF1bHR9KSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZH0gW29uRXJyb3JdIC0gSGFuZGxlciB3aGVuIGEgd2Vic29ja2V0IG1lc3NhZ2UgZXJyb3JzLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgeyhhcmdzOiB7cmVxdWVzdDogaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvcmVxdWVzdC5qc1wiKS5kZWZhdWx0IHwgaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvd2Vic29ja2V0LXJlcXVlc3QuanNcIikuZGVmYXVsdCB8IHVuZGVmaW5lZCwgY2xpZW50OiBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC9pbmRleC5qc1wiKS5kZWZhdWx0LCBjb25maWd1cmF0aW9uOiBpbXBvcnQoXCIuL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0pID0+IFdlYnNvY2tldE1lc3NhZ2VIYW5kbGVyIHwgdm9pZCB8IFByb21pc2U8V2Vic29ja2V0TWVzc2FnZUhhbmRsZXIgfCB2b2lkPn0gV2Vic29ja2V0TWVzc2FnZUhhbmRsZXJSZXNvbHZlclR5cGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHsoaWQ6IHN0cmluZykgPT4ge2RlZmF1bHQ6IHR5cGVvZiBpbXBvcnQoXCIuL2luaXRpYWxpemVyLmpzXCIpLmRlZmF1bHR9fSBJbml0aWFsaXplcnNSZXF1aXJlQ29udGV4dFR5cGVcbiAqIEB0eXBlZGVmIHtJbml0aWFsaXplcnNSZXF1aXJlQ29udGV4dFR5cGUgJiB7XG4gKiAgIGtleXM6ICgpID0+IHN0cmluZ1tdLFxuICogICBpZDogc3RyaW5nXG4gKiB9fSBXZWJwYWNrUmVxdWlyZUNvbnRleHRcbiAqIEB0eXBlZGVmIHt7cmVxdWlyZUNvbnRleHQ6IFdlYnBhY2tSZXF1aXJlQ29udGV4dH19IEluaXRpYWxpemVyc0V4cG9ydFR5cGVcbiAqIEB0eXBlZGVmIHsoYXJnczoge2NvbmZpZ3VyYXRpb246IGltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSkgPT4gUHJvbWlzZTxJbml0aWFsaXplcnNFeHBvcnRUeXBlPn0gSW5pdGlhbGl6ZXJzVHlwZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gU3FsQ29uZmlnXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2RhdGFiYXNlXSAtIERhdGFiYXNlIG5hbWUgZm9yIHRoZSBTUUwgZHJpdmVyLlxuICogQHByb3BlcnR5IHtvYmplY3R9IFtvcHRpb25zXSAtIERyaXZlci1zcGVjaWZpYyBjb25uZWN0aW9uIG9wdGlvbnMuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtvcHRpb25zLmVuY3J5cHRdIC0gV2hldGhlciB0byBlbmNyeXB0IHRoZSBjb25uZWN0aW9uIChNU1NRTCkuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW29wdGlvbnMuc2NoZW1hXSAtIERlZmF1bHQgc2NoZW1hIGZvciB1bnF1YWxpZmllZCB0YWJsZSBsb29rdXBzIChNU1NRTCkuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW29wdGlvbnMuc2VydmVyTmFtZV0gLSBUTFMgU05JIHNlcnZlciBuYW1lIG92ZXJyaWRlIGZvciBNU1NRTCAoZW1wdHkgc3RyaW5nIGRpc2FibGVzIFNOSSkuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtvcHRpb25zLnRydXN0U2VydmVyQ2VydGlmaWNhdGVdIC0gV2hldGhlciB0byB0cnVzdCB0aGUgc2VydmVyIGNlcnRpZmljYXRlIChNU1NRTCkuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3Bhc3N3b3JkXSAtIFBhc3N3b3JkIGZvciB0aGUgU1FMIHVzZXIuXG4gKiBAcHJvcGVydHkge29iamVjdH0gW3Bvb2xdIC0gQ29ubmVjdGlvbiBwb29sIGNvbmZpZ3VyYXRpb24uXG4gKiBAcHJvcGVydHkge251bWJlciB8IG51bGx9IFtwb29sLm1heF0gLSBNYXhpbXVtIG51bWJlciBvZiBjb25uZWN0aW9ucy4gU2V0IG51bGwgdG8gZGlzYWJsZSB0aGUgY2FwLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtwb29sLm1pbl0gLSBNaW5pbXVtIG51bWJlciBvZiBjb25uZWN0aW9ucy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcG9vbC5pZGxlVGltZW91dE1pbGxpc10gLSBJZGxlIHRpbWVvdXQgYmVmb3JlIHJlbGVhc2luZyBhIGNvbm5lY3Rpb24uXG4gKiBAcHJvcGVydHkge251bWJlciB8IG51bGx9IFtwb29sLmNoZWNrb3V0VGltZW91dE1pbGxpc10gLSBUaW1lb3V0IHdoaWxlIHdhaXRpbmcgZm9yIGFuIGF2YWlsYWJsZSBjb25uZWN0aW9uIGFmdGVyIHRoZSBtYXggY29ubmVjdGlvbiBjYXAgaXMgcmVhY2hlZC4gU2V0IG51bGwgdG8gd2FpdCBpbmRlZmluaXRlbHkuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3NlcnZlcl0gLSBTUUwgc2VydmVyIGhvc3RuYW1lLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFt1c2VyXSAtIFNRTCB1c2VybmFtZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IERhdGFiYXNlUG9vbENvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgbnVsbH0gW2NoZWNrb3V0VGltZW91dE1pbGxpc10gLSBUaW1lb3V0IHdoaWxlIGEgY2hlY2tvdXQgd2FpdHMgZm9yIGFuIGF2YWlsYWJsZSBhc3luYy10cmFja2VkIGNvbm5lY3Rpb24gYWZ0ZXIgdGhlIG1heCBsaXZlIGNvbm5lY3Rpb24gY2FwIGlzIHJlYWNoZWQuIFNldCBudWxsIHRvIHdhaXQgaW5kZWZpbml0ZWx5LiBEZWZhdWx0OiAxMDAwMC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgbnVsbH0gW2lkbGVUaW1lb3V0TWlsbGlzXSAtIElkbGUgdGltZW91dCBiZWZvcmUgY2xvc2luZyBhIGNoZWNrZWQtaW4gYXN5bmMtdHJhY2tlZCBjb25uZWN0aW9uLiBTZXQgbnVsbCB0byBkaXNhYmxlIGlkbGUgcmVhcGluZy4gRGVmYXVsdDogNTAwMC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgbnVsbH0gW21heF0gLSBNYXhpbXVtIGxpdmUgYXN5bmMtdHJhY2tlZCBjb25uZWN0aW9ucyBmb3IgdGhpcyBwb29sLiBEZWZhdWx0cyB0byAxMC4gRXh0cmEgY2hlY2tvdXRzIHdhaXQgdW50aWwgYSBtYXRjaGluZyBjb25uZWN0aW9uIGlzIGNoZWNrZWQgaW4gb3IgY2FwYWNpdHkgaXMgZnJlZWQuIFNldCBudWxsIHRvIGRpc2FibGUgdGhlIGNhcC5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IERhdGFiYXNlQ29uZmlndXJhdGlvblR5cGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgbnVsbH0gW2Fkdmlzb3J5TG9ja0FjcXVpcmVUaW1lb3V0TXNdIC0gQm91bmQgKG1zKSBhIGJsb2NraW5nIGFkdmlzb3J5LWxvY2sgYWNxdWlzaXRpb24gd2FpdHMgZm9yIGEgY29udGVuZGVkIGxvY2sgYmVmb3JlIHJlcG9ydGluZyBmYWlsdXJlLiBEZWZhdWx0OiBgOTAwMDAwYCAoMTUgbWludXRlcykuIGBudWxsYCBvcHRzIG91dCBhbmQgcmVzdG9yZXMgdGhlIGRyaXZlcidzIGluZGVmaW5pdGUgd2FpdC4gQSBwZXItY2FsbCBgdGltZW91dE1zYCBhcmd1bWVudCBhbHdheXMgb3ZlcnJpZGVzIHRoaXMuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2RhdGFiYXNlQ2hhcnNldF0gLSBEZWZhdWx0IGNoYXJhY3RlciBzZXQgYXBwbGllZCBieSBgZGI6Y3JlYXRlYCB2aWEgbXlzcWwvbWFyaWFkYiBgQ1JFQVRFIERBVEFCQVNFIC4uLiBDSEFSQUNURVIgU0VUYC4gRGlzdGluY3QgZnJvbSBgY2hhcnNldGAsIHdoaWNoIGlzIHRoZSBjbGllbnQgY29ubmVjdGlvbiBjaGFyc2V0IGZvcndhcmRlZCB0byB0aGUgbXlzcWwyIGRyaXZlci5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZGF0YWJhc2VDb2xsYXRpb25dIC0gRGVmYXVsdCBjb2xsYXRpb24gYXBwbGllZCBieSBgZGI6Y3JlYXRlYCB2aWEgbXlzcWwvbWFyaWFkYiBgQ1JFQVRFIERBVEFCQVNFIC4uLiBDT0xMQVRFYC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZGF0YWJhc2VdIC0gRGF0YWJhc2UgbmFtZSBmb3IgdGhpcyBjb25uZWN0aW9uLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtkZWFkbG9ja01heFJldHJpZXNdIC0gTWF4aW11bSBhdHRlbXB0cyBmb3IgdGhlIG91dGVybW9zdCB0cmFuc2FjdGlvbiB3aGVuIGl0IGtlZXBzIGhpdHRpbmcgZGVhZGxvY2tzLiBEZWZhdWx0cyB0byA4LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtkZWFkbG9ja0Jhc2VXYWl0TXNdIC0gQmFzZSBkZWxheSAobXMpIGZvciB0aGUgZGVhZGxvY2sgcmV0cnkgYmFja29mZjsgdGhlIHBlci1hdHRlbXB0IGNlaWxpbmcgZG91YmxlcyBmcm9tIGhlcmUuIERlZmF1bHRzIHRvIDUwLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtkZWFkbG9ja01heFdhaXRNc10gLSBDYXAgKG1zKSBvbiB0aGUgZGVhZGxvY2sgcmV0cnkgYmFja29mZiBjZWlsaW5nIHNvIHRoZSBqaXR0ZXJlZCB3YWl0IHN0YXlzIGJvdW5kZWQuIERlZmF1bHRzIHRvIDEwMDAuXG4gKiBAcHJvcGVydHkge3R5cGVvZiBpbXBvcnQoXCIuL2RhdGFiYXNlL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0fSBbZHJpdmVyXSAtIERyaXZlciBjbGFzcyB0byB1c2UgZm9yIHRoaXMgZGF0YWJhc2UuXG4gKiBAcHJvcGVydHkge3R5cGVvZiBpbXBvcnQoXCIuL2RhdGFiYXNlL3Bvb2wvYmFzZS5qc1wiKS5kZWZhdWx0fSBbcG9vbFR5cGVdIC0gUG9vbCBjbGFzcyB0byB1c2UgZm9yIHRoaXMgZGF0YWJhc2UuXG4gKiBAcHJvcGVydHkgeygpID0+IFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+fSBbZ2V0Q29ubmVjdGlvbl0gLSBDdXN0b20gY29ubmVjdGlvbiBmYWN0b3J5IG92ZXJyaWRlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtob3N0XSAtIERhdGFiYXNlIGhvc3QuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFttaWdyYXRpb25zXSAtIFdoZXRoZXIgbWlncmF0aW9ucyBhcmUgZW5hYmxlZCBmb3IgdGhpcyBkYXRhYmFzZS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW211bHRpcGxlU3RhdGVtZW50c10gLSAoTXlTUUwpIE9wdCBpbiB0byBtdWx0aS1zdGF0ZW1lbnQgcXVlcmllcyBzbyBzdHJ1Y3R1cmUgU1FMIGxvYWRzIGFuZCBhbGwtdGFibGUgY2xlYW51cCBjYW4gYmF0Y2ggaW50byBvbmUgcm91bmQtdHJpcC4gT2ZmIGJ5IGRlZmF1bHQ7IG9yZGluYXJ5IHF1ZXJpZXMgb3RoZXJ3aXNlIHJlamVjdCBzdGFja2VkIHN0YXRlbWVudHMuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW21heFJvd3NQZXJJbnNlcnRdIC0gTWF4aW11bSByb3dzIHBlciBgSU5TRVJUIC4uLiBWQUxVRVMgKC4uLiksICguLi4pLCAuLi5gIHN0YXRlbWVudCBnZW5lcmF0ZWQgYnkgYFJlY29yZC5pbnNlcnRNdWx0aXBsZWAuIERlZmF1bHRzIHRvIDUwMC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbbWF4SW5zZXJ0U3FsQnl0ZXNdIC0gTWF4aW11bSBzZXJpYWxpemVkIFNRTCBzaXplLCBpbiBieXRlcywgZm9yIGEgc2luZ2xlIGBJTlNFUlQgLi4uIFZBTFVFUyAoLi4uKSwgKC4uLiksIC4uLmAgc3RhdGVtZW50LiBEZWZhdWx0cyB0byAxIE1pQiAoMTA0ODU3NikuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW21heEluQ2xhdXNlVmFsdWVzXSAtIE1heGltdW0gdmFsdWVzIGluIGEgc2luZ2xlIGBJTiAoLi4uKWAgY29ob3J0IHVzZWQgYnkgcHJlbG9hZHMsIGFzc29jaWF0aW9uIGNvdW50cywgYW5kIHF1ZXJ5RGF0YSBhZ2dyZWdhdGVzLiBEZWZhdWx0cyB0byA5OTkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW21heFF1ZXJ5U3FsQnl0ZXNdIC0gTWF4aW11bSBzZXJpYWxpemVkIFNRTCBzaXplLCBpbiBieXRlcywgZm9yIGEgc2luZ2xlIGNvaG9ydCBxdWVyeSB1c2VkIGJ5IHByZWxvYWRzLCBhc3NvY2lhdGlvbiBjb3VudHMsIGFuZCBxdWVyeURhdGEgYWdncmVnYXRlcy4gRGVmYXVsdHMgdG8gMSBNaUIgKDEwNDg1NzYpLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtwYXNzd29yZF0gLSBQYXNzd29yZCBmb3IgdGhlIGRhdGFiYXNlIHVzZXIuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3BvcnRdIC0gRGF0YWJhc2UgcG9ydC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcHJpbWFyeUtleVR5cGVdIC0gRGVmYXVsdCB0eXBlIGZvciBpbXBsaWNpdCBtaWdyYXRpb24gcHJpbWFyeSBrZXlzIGFuZCByZWZlcmVuY2VzLiBEZWZhdWx0cyB0byBgdXVpZGAuXG4gKiBAcHJvcGVydHkge0RhdGFiYXNlUG9vbENvbmZpZ3VyYXRpb259IFtwb29sXSAtIFZlbG9jaW91cyBkYXRhYmFzZSBwb29sIGxpZmVjeWNsZSBjb25maWd1cmF0aW9uLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtuYW1lXSAtIEZyaWVuZGx5IG5hbWUgZm9yIHRoZSBjb25maWd1cmF0aW9uLlxuICogQHByb3BlcnR5IHsoZmlsZTogc3RyaW5nKSA9PiBzdHJpbmd9IFtsb2NhdGVGaWxlXSAtIE9wdGlvbmFsIHNxbGl0ZS13ZWIgc3FsLmpzIHdhc20gcmVzb2x2ZXIgKGBpbml0U3FsSnMoe2xvY2F0ZUZpbGV9KWApLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbcmVhZE9ubHldIC0gV2hldGhlciB3cml0ZXMgc2hvdWxkIGJlIGJsb2NrZWQgZm9yIHRoaXMgZGF0YWJhc2UuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3NjaGVtYV0gLSBEZWZhdWx0IHNjaGVtYSBmb3IgdW5xdWFsaWZpZWQgdGFibGUgbG9va3VwcyAoTVNTUUwpLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbc2NoZW1hQ2FjaGVdIC0gV2hldGhlciBzY2hlbWEgbWV0YWRhdGEgc2hvdWxkIGJlIGNhY2hlZCBvbiB0aGUgZHJpdmVyLiBEZWZhdWx0cyB0byB0cnVlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtzY2hlbWFNZXRhZGF0YVJldHJ5RGVhZGxpbmVNc10gLSBCb3VuZGVkIGRlYWRsaW5lIChtcykgZm9yIG91dGxhc3RpbmcgYSBjYWNoZWQgc2NoZW1hLW1ldGFkYXRhIHJlYWQgdGhlIHNlcnZlciBza2lwcGVkIGJlY2F1c2UgY29uY3VycmVudCBvbmxpbmUgRERMIGlzIG1vZGlmeWluZyB0aGUgdGFibGUuIERlZmF1bHRzIHRvIDYwMDAwLlxuICogQHByb3BlcnR5IHtvYmplY3R9IFtyZWNvcmRdIC0gUmVjb3JkLWxldmVsIGNvbmZpZ3VyYXRpb24uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtyZWNvcmQudHJhbnNhY3Rpb25zXSAtIFdoZXRoZXIgcmVjb3JkIG9wZXJhdGlvbnMgc2hvdWxkIHVzZSB0cmFuc2FjdGlvbnMuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtyZXNldF0gLSBXaGV0aGVyIHRvIHJlc2V0IHRoZSBkYXRhYmFzZSBvbiBzdGFydHVwLlxuICogQHByb3BlcnR5IHtTcWxDb25maWd9IFtzcWxDb25maWddIC0gRHJpdmVyLXNwZWNpZmljIFNRTCBjb25maWcuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFt0ZW5hbnRPbmx5XSAtIFdoZXRoZXIgdGhpcyBkYXRhYmFzZSBpZGVudGlmaWVyIGlzIG9ubHkgYWN0aXZlIGluc2lkZSBhIHJlc29sdmVkIHRlbmFudCBjb250ZXh0LlxuICogQHByb3BlcnR5IHtcIm1zc3FsXCIgfCBcIm15c3FsXCIgfCBcInBnc3FsXCIgfCBcInNxbGl0ZVwifSBbdHlwZV0gLSBEYXRhYmFzZSB0eXBlIGlkZW50aWZpZXIuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3VzZURhdGFiYXNlXSAtIERhdGFiYXNlIHRvIHN3aXRjaCB0byBhZnRlciBjb25uZWN0aW5nLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFt1c2VybmFtZV0gLSBVc2VybmFtZSBmb3IgZGF0YWJhc2UgYXV0aGVudGljYXRpb24uXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7XCJkZWJ1Zy1sb3ctbGV2ZWxcIiB8IFwiZGVidWdcIiB8IFwiaW5mb1wiIHwgXCJ3YXJuXCIgfCBcImVycm9yXCJ9IExvZ0xldmVsXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBMb2dnaW5nT3V0cHV0UGF5bG9hZFxuICogQHByb3BlcnR5IHtMb2dMZXZlbH0gbGV2ZWwgLSBMb2cgbGV2ZWwuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbWVzc2FnZSAtIEZvcm1hdHRlZCBtZXNzYWdlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHN1YmplY3QgLSBMb2cgc3ViamVjdC5cbiAqIEBwcm9wZXJ0eSB7RGF0ZX0gdGltZXN0YW1wIC0gVGltZXN0YW1wLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gTG9nZ2luZ091dHB1dFxuICogQHByb3BlcnR5IHsoYXJnOiBMb2dnaW5nT3V0cHV0UGF5bG9hZCkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWR9IHdyaXRlIC0gV3JpdGUgYSBsb2cgZW50cnkuXG4gKiBAcHJvcGVydHkge0xvZ0xldmVsW119IFtsZXZlbHNdIC0gRGVmYXVsdCBsZXZlbHMgZm9yIHRoaXMgb3V0cHV0LlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gTG9nZ2luZ091dHB1dENvbmZpZ1xuICogQHByb3BlcnR5IHtMb2dnaW5nT3V0cHV0fSBvdXRwdXQgLSBPdXRwdXQgaW5zdGFuY2UuXG4gKiBAcHJvcGVydHkge0FycmF5PExvZ0xldmVsPn0gW2xldmVsc10gLSBMZXZlbHMgZW5hYmxlZCBmb3IgdGhpcyBvdXRwdXQuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7TG9nZ2luZ091dHB1dENvbmZpZyB8IExvZ2dpbmdPdXRwdXQgfCBpbXBvcnQoXCIuL2xvZ2dlci9iYXNlLWxvZ2dlci5qc1wiKS5kZWZhdWx0fSBMb2dnZXJDb25maWdcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IExvZ2dpbmdDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtjb25zb2xlXSAtIEVuYWJsZS9kaXNhYmxlIGNvbnNvbGUgbG9nZ2luZyBmb3IgcmVxdWVzdCBsb2dnaW5nLiBEZWZhdWx0cyB0byB0cnVlIG91dHNpZGUgb2YgXCJ0ZXN0XCIgYW5kIGZvciBIVFRQIHNlcnZlciBsb2dzLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbZmlsZV0gLSBFbmFibGUvZGlzYWJsZSB3cml0aW5nIGxvZ3MgdG8gYSBmaWxlLiBEZWZhdWx0cyB0byB0cnVlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtkaXJlY3RvcnldIC0gRGlyZWN0b3J5IHdoZXJlIGxvZyBmaWxlcyBhcmUgc3RvcmVkLiBEZWZhdWx0cyB0byBcIjxwcm9qZWN0Pi9sb2dcIi5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZmlsZVBhdGhdIC0gRXhwbGljaXQgcGF0aCBmb3IgdGhlIGxvZyBmaWxlLiBEZWZhdWx0cyB0byBcIjxkaXJlY3Rvcnk+LzxlbnZpcm9ubWVudD4ubG9nXCIuXG4gKiBAcHJvcGVydHkge0FycmF5PFwiZGVidWctbG93LWxldmVsXCIgfCBcImRlYnVnXCIgfCBcImluZm9cIiB8IFwid2FyblwiIHwgXCJlcnJvclwiPn0gW2xldmVsc10gLSBPdmVycmlkZSB3aGljaCBsb2cgbGV2ZWxzIGFyZSBlbWl0dGVkLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbZGVidWdMb3dMZXZlbF0gLSBDb252ZW5pZW5jZSBmbGFnIHRvIGluY2x1ZGUgdmVyeSBsb3ctbGV2ZWwgZGVidWcgbG9ncy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3F1ZXJ5TG9nZ2luZ10gLSBFbmFibGUvZGlzYWJsZSBkYXRhYmFzZSBxdWVyeSBsb2dnaW5nLiBEZWZhdWx0cyB0byB0cnVlIG91dHNpZGUgdGVzdCBhbmQgZmFsc2UgaW4gdGVzdC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFtzZW5zaXRpdmVOYW1lc10gLSBBZGRpdGlvbmFsIGNhc2UtaW5zZW5zaXRpdmUgc2Vuc2l0aXZlIGhlYWRlci9wYXJhbWV0ZXIgbmFtZXMgdG8gcmVkYWN0IGZyb20gbG9nZ2luZy5cbiAqIEBwcm9wZXJ0eSB7TG9nZ2VyQ29uZmlnW119IFtsb2dnZXJzXSAtIExvZ2dlciBpbnN0YW5jZXMgKGNvbnZlcnRlZCB0byBvdXRwdXRzIHdoZW4gY29uZmlndXJlZCkuXG4gKiBAcHJvcGVydHkge0xvZ2dpbmdPdXRwdXRDb25maWdbXX0gW291dHB1dHNdIC0gRXhwbGljaXQgbG9nZ2VyIG91dHB1dHMgKG92ZXJyaWRlcyBjb25zb2xlL2ZpbGUgZGVmYXVsdHMgd2hlbiBwcm92aWRlZCkuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBTdHJ1Y3R1cmVTcWxDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbZW5hYmxlZEVudmlyb25tZW50c10gLSBFbnZpcm9ubWVudHMgYWxsb3dlZCB0byB3cml0ZSBzdHJ1Y3R1cmUgc3FsIGZpbGVzIGR1cmluZyBhdXRvbWF0aWMgbWlncmF0aW9uIGR1bXBzLlxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gW2Rpc2FibGVkRW52aXJvbm1lbnRzXSAtIEVudmlyb25tZW50cyB0aGF0IHNob3VsZCBza2lwIHdyaXRpbmcgc3RydWN0dXJlIHNxbCBmaWxlcy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtcImJlYWNvblwiIHwgXCJwb2xsaW5nXCJ9IEJhY2tncm91bmRKb2JzRGlzcGF0Y2hTdHJhdGVneVxuICpcbiAqIC0gYFwiYmVhY29uXCJgIChkZWZhdWx0KTogZXZlbnQtZHJpdmVuIGRpc3BhdGNoLiBUaGVcbiAqICAgYGJhY2tncm91bmQtam9icy1tYWluYCBwcm9jZXNzIGRyYWlucyB0aGUgcXVldWUgb24gZW5xdWV1ZSwgb25cbiAqICAgd29ya2VyIHJlYWRpbmVzcywgb24gQmVhY29uIGJyb2FkY2FzdHMgKHNvIGNyb3NzLXByb2Nlc3MgZW5xdWV1ZXNcbiAqICAgd2FrZSBpdCksIGFuZCBhcm1zIGEgYHNldFRpbWVvdXRgIGZvciB0aGUgc29vbmVzdCBmdXR1cmUtc2NoZWR1bGVkXG4gKiAgIGpvYi4gRmFsbHMgYmFjayBncmFjZWZ1bGx5IHRvIGRpcmVjdCBpbi1wcm9jZXNzIHRyaWdnZXJpbmcgd2hlblxuICogICBCZWFjb24gaXMgbm90IGNvbmZpZ3VyZWQuXG4gKiAtIGBcInBvbGxpbmdcImA6IGxlZ2FjeSBtb2RlLCBydW5zIGEgZml4ZWQtaW50ZXJ2YWwgcG9sbCBvdmVyIHRoZVxuICogICBgYmFja2dyb3VuZF9qb2JzYCB0YWJsZSAoc2VlIGBwb2xsSW50ZXJ2YWxNc2ApLlxuICovXG5cbi8qKiBAdHlwZWRlZiB7XCJiYWNrZ3JvdW5kXCIgfCBcImlubGluZVwifSBCYWNrZ3JvdW5kSm9ic01vZGUgKi9cbi8qKiBAdHlwZWRlZiB7XCJjYW5kaWRhdGVcIiB8IFwiYWN0aXZlXCIgfCBcInJldGlyZWRcIn0gQmFja2dyb3VuZEpvYnNHZW5lcmF0aW9uSW5pdGlhbFN0YXRlICovXG4vKiogQHR5cGVkZWYgeyhhcmdzOiB7Y29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9KSA9PiBpbXBvcnQoXCIuL2JhY2tncm91bmQtam9icy9hZGFwdGVyLmpzXCIpLmRlZmF1bHR9IEJhY2tncm91bmRKb2JzQWRhcHRlckZhY3RvcnkgKi9cbi8qKiBAdHlwZWRlZiB7dHlwZW9mIGltcG9ydChcIi4vYmFja2dyb3VuZC1qb2JzL3BsYXRmb3JtLWpvYi5qc1wiKS5kZWZhdWx0fSBCYWNrZ3JvdW5kSm9iQ2xhc3MgKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBCYWNrZ3JvdW5kSm9ic0NvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi9iYWNrZ3JvdW5kLWpvYnMvYWRhcHRlci5qc1wiKS5kZWZhdWx0IHwgQmFja2dyb3VuZEpvYnNBZGFwdGVyRmFjdG9yeX0gW2FkYXB0ZXJdIC0gQWRhcHRlciBpbnN0YW5jZSBvciBzeW5jaHJvbm91cyBmYWN0b3J5LiBBIGZhY3RvcnkgY3JlYXRlcyBvbmUgYWRhcHRlciBwZXIgY29uZmlndXJhdGlvbiBsaWZlY3ljbGU7IHRoZSBmcmFtZXdvcmsgY2xvc2VzIGFkYXB0ZXJzIGl0IHJlc29sdmVzLlxuICogQHByb3BlcnR5IHtCYWNrZ3JvdW5kSm9iQ2xhc3NbXX0gW2pvYkNsYXNzZXNdIC0gU3RhdGljIHBvcnRhYmxlIGpvYiBjbGFzc2VzIGF2YWlsYWJsZSB0byBCcm93c2VyL0V4cG8gbG9jYWwgZGlzcGF0Y2guIERlZmF1bHRzIHRvIGBbXWA7IE5vZGUga2VlcHMgaXRzIGZpbGVzeXN0ZW0gcmVnaXN0cnkuXG4gKiBAcHJvcGVydHkge0JhY2tncm91bmRKb2JzTW9kZX0gW21vZGVdIC0gYFwiYmFja2dyb3VuZFwiYCB1c2VzIHRoZSBjb25maWd1cmVkIGFkYXB0ZXIvdHJhbnNwb3J0IGFuZCBkdXJhYmxlIHF1ZXVlIHNlbWFudGljczsgYFwiaW5saW5lXCJgIHBlcmZvcm1zIGltbWVkaWF0ZWx5IHdpdGhvdXQgZHVyYWJsZSBxdWV1ZSBzdGF0ZS4gRGVmYXVsdHMgdG8gYFwiYmFja2dyb3VuZFwiYC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZ2VuZXJhdGlvbklkXSAtIE9wdC1pbiByZWxlYXNlIGdlbmVyYXRpb24gaWRlbnRpdHkuIE11c3QgbWF0Y2ggYF5bQS1aYS16MC05XVtBLVphLXowLTkuXy1dezAsMTI3fSRgIGFuZCBhZ3JlZSB3aXRoIGVudmlyb25tZW50L0FQSS9DTEkgc291cmNlcy5cbiAqIEBwcm9wZXJ0eSB7QmFja2dyb3VuZEpvYnNHZW5lcmF0aW9uSW5pdGlhbFN0YXRlfSBbaW5pdGlhbEdlbmVyYXRpb25TdGF0ZV0gLSBHZW5lcmF0aW9uLWF3YXJlIGJvb3Qgc3RhdGUuIERlZmF1bHRzIHRvIGBcImNhbmRpZGF0ZVwiYDsgaW52YWxpZCB3aXRob3V0IGBnZW5lcmF0aW9uSWRgLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtsaWZlY3ljbGVTb2NrZXRQYXRoXSAtIEFic29sdXRlIHJlbGVhc2UtbG9jYWwgVW5peCBzb2NrZXQgdXNlZCBieSBhY2tub3dsZWRnZWQgYWN0aXZhdGlvbiBhbmQgcmV0aXJlbWVudCBjb21tYW5kcy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbaG9zdF0gLSBIb3N0bmFtZSBmb3IgdGhlIGJhY2tncm91bmQgam9icyBtYWluIHByb2Nlc3MuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3BvcnRdIC0gUG9ydCBmb3IgdGhlIGJhY2tncm91bmQgam9icyBtYWluIHByb2Nlc3MuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2RhdGFiYXNlSWRlbnRpZmllcl0gLSBEYXRhYmFzZSBpZGVudGlmaWVyIHVzZWQgdG8gc3RvcmUgYmFja2dyb3VuZCBqb2JzLiBCcm93c2VyL0V4cG8gbG9jYWwgZGlzcGF0Y2ggdXNlcyB0aGlzIGV4aXN0aW5nIFNRTGl0ZSBkYXRhYmFzZSBhbmQgZGVmYXVsdHMgdG8gYFwiZGVmYXVsdFwiYC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbbWF4Q29uY3VycmVudElubGluZUpvYnNdIC0gSG93IG1hbnkgYGZvcmtlZDogZmFsc2VgIGpvYnMgYSBzaW5nbGVcbiAqICAgYGJhY2tncm91bmQtam9icy13b3JrZXJgIHByb2Nlc3MgaXMgYWxsb3dlZCB0byBydW4gaW4gcGFyYWxsZWwuIENvbmN1cnJlbmN5XG4gKiAgIGlzIGF0IHRoZSBKUyBldmVudC1sb29wIGxldmVsOiBldmVyeSBjb25jdXJyZW50IGpvYiBzaGFyZXMgdGhlIHdvcmtlcidzXG4gKiAgIHByb2Nlc3MgYW5kIERCIGNvbm5lY3Rpb24gcG9vbCwgc28gdGhpcyBzaG91bGQgZml0IHRoZSBwb29sIHNpemUsIG5vdCB0aGVcbiAqICAgQ1BVIGNvdW50LiBGb3JraW5nIHJlbWFpbnMgdGhlIHJpZ2h0IHRvb2wgZm9yIG1lbW9yeSBpc29sYXRpb24gYWNyb3NzXG4gKiAgIGxvbmctcnVubmluZyBqb2JzIGFuZCBmb3IgdXNpbmcgbW9yZSBjb3Jlcy4gRGVmYXVsdDogYDRgLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFttYXhDb25jdXJyZW50Rm9ya2VkSm9ic10gLSBIb3cgbWFueSBvdXQtb2YtcHJvY2Vzc1xuICogICBgXCJmb3JrZWRcImAgb3IgYFwic3Bhd25lZFwiYCBqb2JzIGEgc2luZ2xlIGBiYWNrZ3JvdW5kLWpvYnMtd29ya2VyYCBpc1xuICogICBhbGxvd2VkIHRvIGtlZXAgaW4gZmxpZ2h0LiBEZWZhdWx0OiBgNGAuIFRoaXMgaXMgYSBwZXItd29ya2VyIHNhZmV0eSBjYXA7XG4gKiAgIGZvciB3b3JrbG9hZC1zaGFwZWQgbGltaXRzIHVzZSBwZXItcXVldWUgY2FwcyAoYHF1ZXVlc2ApIGluc3RlYWQsIHdoaWNoIGFyZVxuICogICBlbmZvcmNlZCBjbHVzdGVyLXdpZGUgYW5kIGFyZSBpbW11bmUgdG8gZHVwbGljYXRlIHdvcmtlciBwcm9jZXNzZXMuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3Bvb2xlZFJ1bm5lckNvdW50XSAtIE51bWJlciBvZiB3YXJtLCByZXVzYWJsZSBjaGlsZCBydW5uZXJzIG93bmVkIGJ5IGVhY2ggd29ya2VyLiBQb29sZWQgY2FwYWNpdHkgaXMgc2VwYXJhdGUgZnJvbSBpbmxpbmUgYW5kIGZvcmtlZC9zcGF3bmVkIGNhcGFjaXR5LiBEZWZhdWx0OiBgNGAuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3Bvb2xlZFJ1bm5lckNvbmN1cnJlbmN5XSAtIE51bWJlciBvZiBqb2JzIGVhY2ggcG9vbGVkIGNoaWxkIHJ1bnMgY29uY3VycmVudGx5IG9uIGl0cyBvd24gZXZlbnQgbG9vcC4gVG90YWwgcGVyLXdvcmtlciBwb29sZWQgY2FwYWNpdHkgaXMgYHBvb2xlZFJ1bm5lckNvdW50IMOXIHBvb2xlZFJ1bm5lckNvbmN1cnJlbmN5YC4gYDFgIChkZWZhdWx0KSBrZWVwcyBlYWNoIGNoaWxkIHNlcmlhbDsgcmFpc2UgaXQgZm9yIEkvTy1ib3VuZCBqb2JzIHNvIGEgYm91bmRlZCBzZXQgb2YgaXNvbGF0ZWQgcHJvY2Vzc2VzIGhhbmRsZXMgaGlnaCBjb25jdXJyZW5jeSAobGlrZSB0aGUgaW5saW5lIGxhbmUpIHdpdGhvdXQgb25lIHByb2Nlc3MgcGVyIGNvbmN1cnJlbnQgam9iLiBEZWZhdWx0OiBgMWAuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3Bvb2xlZFJ1bm5lck1heEpvYnNdIC0gTnVtYmVyIG9mIHNlcXVlbnRpYWwgam9icyBhIHBvb2xlZCBjaGlsZCBydW5zIGJlZm9yZSBpdCBpcyByZXBsYWNlZCwgYm91bmRpbmcgcHJvY2Vzcy1sZXZlbCByZXNvdXJjZSBhY2N1bXVsYXRpb24uIERlZmF1bHQ6IGAxMDBgLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtwb29sZWRSdW5uZXJNYXhSc3NCeXRlc10gLSBQZWFrIFJTUyAodGhlIGtlcm5lbCBgVm1IV01gIGhpZ2gtd2F0ZXIgbWFyayByZXBvcnRlZCBieSB0aGUgY2hpbGQpIGF0IHdoaWNoIGEgcG9vbGVkIGNoaWxkIGlzIHJlcGxhY2VkIGFmdGVyIGFuIGFja25vd2xlZGdlZCBqb2IuIFRoZSBjaGlsZCdzIHBlYWssIG5vdCBpdHMgc2V0dGxlZCBSU1MgYXQgam9iLW91dGNvbWUgdGltZSwgaXMgdGhlIHRyaWdnZXIsIHNvIGEgYnVyc3Qgd29ya2luZy1zZXQgdGhhdCByZWNsYWltcyBiZWZvcmUgdGhlIG91dGNvbWUgc3RpbGwgcmV0aXJlcyB0aGUgY2hpbGQuIERlZmF1bHQ6IGA1MzY4NzA5MTJgICg1MTIgTWlCKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcG9vbGVkUnVubmVyTWF4TGlmZXRpbWVNc10gLSBBZ2UgYWZ0ZXIgYW4gYWNrbm93bGVkZ2VkIGpvYiBhdCB3aGljaCBhIHBvb2xlZCBjaGlsZCBpcyByZXBsYWNlZC4gRGVmYXVsdDogYDM2MDAwMDBgIChvbmUgaG91cikuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3J1bm5lck1heE9sZFNwYWNlU2l6ZU1iXSAtIFY4IGhlYXAgY2FwIChgLS1tYXgtb2xkLXNwYWNlLXNpemVgLCBNaUIpIGFwcGxpZWQgdG8gZXZlcnkgYmFja2dyb3VuZC1qb2JzIHJ1bm5lciBjaGlsZCBwcm9jZXNzIChwb29sZWQsIGZvcmtlZCwgYW5kIHNwYXduZWQpIHNvIGEgc2luZ2xlIGNoaWxkIGNhbiBuZXZlciBjb21taXQgbXVsdGlwbGUgR0JzIG9mIGhlYXAuIERlZmF1bHQ6IGAyMDQ4YC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcnVubmVyTWFsbG9jQXJlbmFNYXhdIC0gYE1BTExPQ19BUkVOQV9NQVhgIGV4cG9ydGVkIHRvIGV2ZXJ5IGJhY2tncm91bmQtam9icyBydW5uZXIgY2hpbGQgcHJvY2VzcywgYm91bmRpbmcgZ2xpYmMgcGVyLXRocmVhZCBhcmVuYXMuIERlZmF1bHRzIHRvIGFuIGluaGVyaXRlZCBgTUFMTE9DX0FSRU5BX01BWGAsIGVsc2UgYDRgLlxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCB7bWF4Q29uY3VycmVudD86IG51bWJlciwgcHJpb3JpdHk/OiBudW1iZXJ9Pn0gW3F1ZXVlc10gLSBQZXItcXVldWVcbiAqICAgY29uY3VycmVuY3kgY2FwcyBhbmQgZGlzcGF0Y2ggcHJpb3JpdGllcywgU2lkZWtpcS1zdHlsZS4gQSBqb2IgZGVjbGFyZXMgaXRzIHF1ZXVlIChzdGF0aWNcbiAqICAgYHF1ZXVlYCBvbiB0aGUgam9iIGNsYXNzLCBvciB0aGUgYHF1ZXVlYCBlbnF1ZXVlIG9wdGlvbjsgZGVmYXVsdHMgdG8gYFwiZGVmYXVsdFwiYCksIGFuZFxuICogICBgcXVldWVzW25hbWVdLm1heENvbmN1cnJlbnRgIGJvdW5kcyBob3cgbWFueSBqb2JzIGZyb20gdGhhdCBxdWV1ZSBtYXkgYmVcbiAqICAgaW4gZmxpZ2h0IGFjcm9zcyB0aGUgd2hvbGUgY2x1c3RlciAoZW5mb3JjZWQgdmlhIGR1cmFibGUgcGVyLWtleVxuICogICBjb25jdXJyZW5jeSwgc28gaXQgaG9sZHMgcmVnYXJkbGVzcyBvZiBob3cgbWFueSB3b3JrZXIgcHJvY2Vzc2VzIHJ1bikuXG4gKiAgIFNpemUgZWFjaCBxdWV1ZSB0byBpdHMgd29ya2xvYWQ6IEkvTy1ib3VuZCBxdWV1ZXMgKGUuZy4gYnVpbGQgcnVubmVyc1xuICogICB3YWl0aW5nIG9uIHJlbW90ZSBEb2NrZXIgc2VydmVycykgY2FuIHJ1biBmYXIgYWJvdmUgdGhlIGNvcmUgY291bnQsIHdoaWxlXG4gKiAgIENQVS1ib3VuZCBxdWV1ZXMgc2hvdWxkIHN0YXkgbmVhciBpdC4gYHF1ZXVlc1tuYW1lXS5wcmlvcml0eWAgKGRlZmF1bHQgYDBgKVxuICogICBtYWtlcyB0aGUgbWFpbiBwcm9jZXNzIGRpc3BhdGNoIGhpZ2hlci1wcmlvcml0eSBxdWV1ZXMgYmVmb3JlIGxvd2VyLXByaW9yaXR5XG4gKiAgIG9uZXMgcmVnYXJkbGVzcyBvZiBlbnF1ZXVlIG9yZGVyLCBzbyBhIHNtYWxsIHRpbWUtY3JpdGljYWwgcXVldWUgY2FuIG5ldmVyIGJlXG4gKiAgIHN0YXJ2ZWQgYnkgYSBmbG9vZCBvZiBsb3ctcHJpb3JpdHkgd29yayBzaGFyaW5nIGEgd29ya2VyIHBvb2wuIFVubGlrZVxuICogICBTaWRla2lxJ3Mgc3RyaWN0IHF1ZXVlIG9yZGVyaW5nLCBwcmlvcml0eSBjb21wb3NlcyB3aXRoIHRoZSBwZXItcXVldWUgY2FwczpcbiAqICAgYSBoaWdoZXItcHJpb3JpdHkgcXVldWUgdGhhdCBpcyBhbHJlYWR5IGF0IGl0cyBgbWF4Q29uY3VycmVudGAgaXMgc2tpcHBlZCBhbmRcbiAqICAgZGlzcGF0Y2ggZmFsbHMgdGhyb3VnaCB0byB0aGUgbmV4dCBlbGlnaWJsZSBsb3dlci1wcmlvcml0eSBqb2IsIHNvIGEgYnVzeVxuICogICBoaWdoLXByaW9yaXR5IHF1ZXVlIGRvZXMgbm90IGJsb2NrIGV2ZXJ5dGhpbmcgZWxzZS4gVGhpcyBmYWxsdGhyb3VnaCBpcyBhXG4gKiAgIHByb3BlcnR5IG9mIHRoZSBxdWV1ZS1kZXJpdmVkIGNhcDsgYSBqb2IgdGhhdCBzdXBwbGllcyBpdHMgb3duIGV4cGxpY2l0XG4gKiAgIGBjb25jdXJyZW5jeUtleWAvYG1heENvbmN1cnJlbmN5YCBieXBhc3NlcyB0aGUgcXVldWUgY2FwIGVudGlyZWx5IChhblxuICogICBleHBsaWNpdCBrZXkgYWx3YXlzIHdpbnMg4oCUIHNlZSBhYm92ZSkgYW5kIGlzIGJvdW5kZWQgb25seSBieSB0aGF0IGtleSwgc28gaXRcbiAqICAgaXMgbm90IGhlbGQgYmFjayBieSB0aGUgcXVldWUncyBjYXAgYW5kIHByaW9yaXR5IHNpbXBseSBvcmRlcnMgaXQgbm9ybWFsbHkuXG4gKiAgIFByaW9yaXRpZXMgbWF5IGJlIGFueSBudW1iZXIsIGluY2x1ZGluZyBuZWdhdGl2ZSB0byBzaW5rIGEgcXVldWUgYmVsb3cgdGhlXG4gKiAgIGRlZmF1bHQuIEpvYnMgd2l0aGluIHRoZSBzYW1lIHByaW9yaXR5IGtlZXAgRklGTyAoYHNjaGVkdWxlZF9hdGAsIHRoZW5cbiAqICAgYGNyZWF0ZWRfYXRgKSBvcmRlci4gRGVmYXVsdDogYHt9YCAobm8gcXVldWUgY2FwcywgYWxsIHF1ZXVlcyBwcmlvcml0eSBgMGApLlxuICogQHByb3BlcnR5IHtudW1iZXIgfCBudWxsfSBbc2NoZWR1bGVkRW5xdWV1ZVRpbWVvdXRNc10gLSBCb3VuZHMgb25lIHNjaGVkdWxlZCBlbnF1ZXVlIGF0dGVtcHQgaW4gdGhlIG1haW4gcHJvY2Vzcy4gQSBkdXJhYmxlIGVucXVldWUgdGhhdCBuZXZlciBzZXR0bGVzICh3ZWRnZWQgREIgY29ubmVjdGlvbiwgY29udGVuZGVkIGFkdmlzb3J5IGxvY2spIHdvdWxkIG90aGVyd2lzZSBrZWVwIGl0cyBzY2hlZHVsZSBrZXkgcGVybWFuZW50bHkgaW4gZmxpZ2h0LCBzbyBldmVyeSBsYXRlciB0aWNrIHNraXBwZWQgaXRzZWxmIGFuZCBzaHV0ZG93biBjb3VsZCBuZXZlciBkcmFpbi4gT24gdGltZW91dCB0aGUgYXR0ZW1wdCBpcyByZXBvcnRlZCBhcyBgYmFja2dyb3VuZC1qb2JzLXNjaGVkdWxlZC1lbnF1ZXVlLXN0YWxsYCBhbmQgdGhlIGtleSBjbGVhcnMgZm9yIHRoZSBuZXh0IHRpY2suIERlZmF1bHQ6IDIwIG1pbnV0ZXMg4oCUIGRlbGliZXJhdGVseSA1IG1pbnV0ZXMgYWJvdmUgYGFkdmlzb3J5TG9ja0FjcXVpcmVUaW1lb3V0TXNgIHNvIHRoZSBwcmVjaXNlIGxvY2sgZXJyb3Igc3VyZmFjZXMgZmlyc3QuIGBudWxsYCBvcHRzIG91dC5cbiAqIEBwcm9wZXJ0eSB7QmFja2dyb3VuZEpvYnNEaXNwYXRjaFN0cmF0ZWd5fSBbZGlzcGF0Y2hTdHJhdGVneV0gLSBIb3cgdGhlIG1haW4gcHJvY2Vzc1xuICogICBkZXRlY3RzIG5ldyB3b3JrLiBEZWZhdWx0cyB0byBgXCJiZWFjb25cImAgKGV2ZW50LWRyaXZlbikuIFNldCB0byBgXCJwb2xsaW5nXCJgXG4gKiAgIHRvIHJlc3RvcmUgdGhlIGxlZ2FjeSBmaXhlZC1pbnRlcnZhbCBwb2xsLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtwb2xsSW50ZXJ2YWxNc10gLSBQb2xsIGludGVydmFsIGluIG1pbGxpc2Vjb25kcy4gT25seSB1c2VkXG4gKiAgIHdoZW4gYGRpc3BhdGNoU3RyYXRlZ3kgPT09IFwicG9sbGluZ1wiYC4gRGVmYXVsdDogYDEwMDBgLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtkcmFpblN0b3JlT3BlcmF0aW9uVGltZW91dE1zXSAtIEJvdW5kcyBvbmUgZHJhaW4tY3JpdGljYWxcbiAqICAgc3RvcmUgb3BlcmF0aW9uIGluIHRoZSBtYWluIHByb2Nlc3M6IHRoZSBxdWV1ZWQtam9iIGxvb2t1cCwgdGhlIGR1cmFibGVcbiAqICAgaGFuZG9mZiBjbGFpbSwgYW5kIGhhbmRvZmYtcmVjb3ZlcnkgdHJhbnNpdGlvbnMuIEEgc3RvcmUgY2FsbCB0aGF0IG5ldmVyXG4gKiAgIHNldHRsZXMgKHdlZGdlZCBEQiBjb25uZWN0aW9uLCBsb3N0IGFja25vd2xlZGdlbWVudCkgd291bGQgb3RoZXJ3aXNlIGZyZWV6ZVxuICogICB0aGUgY29hbGVzY2VkIGRyYWluIGFuZCBldmVyeSBsYXRlciBkaXNwYXRjaCBxdWV1ZWQgYmVoaW5kIGl0IHVudGlsIHRoZVxuICogICBwcm9jZXNzIGlzIGtpbGxlZDsgb24gdGltZW91dCB0aGUgZHJhaW4gZmFpbHMgaW50byBpdHMgZXhpc3RpbmdcbiAqICAgZXJyb3IvcmV0cnkgcGF0aCBhbmQgdGhlIHN0YWxsIGlzIHJlcG9ydGVkIGFzIGEgZnJhbWV3b3JrIGVycm9yLlxuICogICBEZWZhdWx0OiBgNjAwMDBgLlxuICogQHByb3BlcnR5IHtudW1iZXIgfCBudWxsfSBbam9iVGltZW91dE1zXSAtIFdhbGwtY2xvY2sgYmFja3N0b3AsIGluIG1zLCBmb3IgYVxuICogICBgXCJmb3JrZWRcImAgam9iIHJ1bm5lci4gQSBmb3JrZWQgam9iIHN0aWxsIHJ1bm5pbmcgYWZ0ZXIgdGhpcyBpcyB0ZXJtaW5hdGVkXG4gKiAgIChTSUdURVJNLCB0aGVuIFNJR0tJTEwgYWZ0ZXIgdGhlIHJlYXBpbmcgZ3JhY2UpIGFuZCByZXBvcnRlZCBmYWlsZWQsIHNvIGFcbiAqICAgc2luZ2xlIGdlbnVpbmVseS1odW5nIHJ1bm5lciBjYW4ndCBwaW4gYSBkcmFpbmluZyB3b3JrZXIg4oCUIGFuZCBpdHMgZnVsbC1hcHBcbiAqICAgYm9vdCBhbmQgREIgY29ubmVjdGlvbnMg4oCUIGluZGVmaW5pdGVseSAoZS5nLiBhY3Jvc3MgYSBkZXBsb3kgd2hlcmUgYSByZXRpcmVkXG4gKiAgIHdvcmtlciBkcmFpbnMgaW4tZmxpZ2h0IGpvYnMpLiBUaGlzIGlzIGEgY29hcnNlIHNhZmV0eSBuZXQsIG5vdCBwZXItam9iXG4gKiAgIHR1bmluZzogc2V0IGl0IHdlbGwgYWJvdmUgdGhlIGxvbmdlc3QgbGVnaXRpbWF0ZSBmb3JrZWQgam9iIChidWlsZCBydW5uZXJzLFxuICogICBsb25nIGltcG9ydHMpIHNvIG9ubHkgZ2VudWluZWx5LXN0dWNrIHJ1bm5lcnMgYXJlIGtpbGxlZC4gT21pdCwgYG51bGxgLCBvclxuICogICBgPD0gMGAgdG8gZGlzYWJsZSAoZGVmYXVsdCksIHdoaWNoIHByZXNlcnZlcyB0aGUgcHJpb3IgdW5ib3VuZGVkIGJlaGF2aW9yLlxuICogQHByb3BlcnR5IHtCYWNrZ3JvdW5kSm9ic1JldGVudGlvbkNvbmZpZ3VyYXRpb259IFtyZXRlbnRpb25dIC0gUmV0ZW50aW9uL3BydW5pbmdcbiAqICAgb2YgdGVybWluYWwgam9iIHJvd3MuIFdpdGhvdXQgcHJ1bmluZyB0aGUgam9icyB0YWJsZSBncm93cyB1bmJvdW5kZWRcbiAqICAgKGNvbXBsZXRlZCByb3dzIGFjY3VtdWxhdGUgZm9yZXZlciksIHdoaWNoIGJsb2F0cyBzdG9yYWdlIGFuZCBpbmRleGVzIGFuZFxuICogICBldmVudHVhbGx5IHNsb3dzIGRpc3BhdGNoLiBUaGUgbWFpbiBwcm9jZXNzIHN3ZWVwcyB0ZXJtaW5hbCByb3dzIHBhc3QgdGhlaXJcbiAqICAgd2luZG93IG9uIGFuIGludGVydmFsLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gQmFja2dyb3VuZEpvYnNSZXRlbnRpb25Db25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge251bWJlciB8IG51bGx9IFtjb21wbGV0ZWRUdGxNc10gLSBEZWxldGUgYGNvbXBsZXRlZGAgam9icyB3aG9zZVxuICogICBgY29tcGxldGVkX2F0X21zYCBpcyBvbGRlciB0aGFuIHRoaXMgbWFueSBtcy4gYG51bGxgIG9yIGA8PSAwYCBkaXNhYmxlc1xuICogICBjb21wbGV0ZWQgcHJ1bmluZy4gRGVmYXVsdDogYDYwNDgwMDAwMGAgKDcgZGF5cykuXG4gKiBAcHJvcGVydHkge251bWJlciB8IG51bGx9IFtmYWlsZWRUdGxNc10gLSBEZWxldGUgdGVybWluYWwgYGZhaWxlZGAvYG9ycGhhbmVkYFxuICogICBqb2JzIG9sZGVyIHRoYW4gdGhpcyBtYW55IG1zLiBgbnVsbGAgb3IgYDw9IDBgIGRpc2FibGVzIChrZWVwcyB0aGVtIGZvclxuICogICBkZWJ1Z2dpbmcpLiBEZWZhdWx0OiBgMjU5MjAwMDAwMGAgKDMwIGRheXMpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtiYXRjaFNpemVdIC0gUm93cyBkZWxldGVkIHBlciBiYXRjaC4gRGVmYXVsdDogYDEwMDBgLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtzd2VlcEludGVydmFsTXNdIC0gSG93IG9mdGVuIHRoZSByZXRlbnRpb24gc3dlZXAgcnVucy5cbiAqICAgRGVmYXVsdDogYDM2MDAwMDBgICgxIGhvdXIpLlxuICovXG4vKipcbiAqIEZ1bGx5LXJlc29sdmVkIHJldGVudGlvbiBjb25maWcgYXMgcmV0dXJuZWQgYnkgYGdldEJhY2tncm91bmRKb2JzQ29uZmlnKClgXG4gKiAoZXZlcnkgZmllbGQgZGVmYXVsdGVkKSwgYXMgb3Bwb3NlZCB0byB0aGUgcGFydGlhbCB1c2VyLXByb3ZpZGVkIGlucHV0LlxuICogQHR5cGVkZWYge29iamVjdH0gUmVzb2x2ZWRCYWNrZ3JvdW5kSm9ic1JldGVudGlvbkNvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgbnVsbH0gY29tcGxldGVkVHRsTXMgLSBSZXNvbHZlZCBjb21wbGV0ZWQtam9iIFRUTCBpbiBtcyAoYG51bGxgIGRpc2FibGVzKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgbnVsbH0gZmFpbGVkVHRsTXMgLSBSZXNvbHZlZCBmYWlsZWQvb3JwaGFuZWQgVFRMIGluIG1zIChgbnVsbGAgZGlzYWJsZXMpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJhdGNoU2l6ZSAtIFJlc29sdmVkIGRlbGV0ZSBiYXRjaCBzaXplLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHN3ZWVwSW50ZXJ2YWxNcyAtIFJlc29sdmVkIHN3ZWVwIGludGVydmFsIGluIG1zLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gQmVhY29uQ29uZmlndXJhdGlvblxuICogQHByb3BlcnR5IHtib29sZWFufSBbZW5hYmxlZF0gLSBXaGV0aGVyIHRvIGNvbm5lY3QgdG8gYSBCZWFjb24gYnJva2VyLiBEZWZhdWx0cyB0byBmYWxzZSB1bmxlc3MgYGhvc3RgL2Bwb3J0YCBvciBgaW5Qcm9jZXNzOiB0cnVlYCBhcmUgc2V0LCBvciBlbnYgdmFycyBhcmUgcHJlc2VudC4gRXhwbGljaXQgYGZhbHNlYCBkaXNhYmxlcyBCZWFjb24gZXZlbiB3aGVuIGVudiB2YXJzIGFyZSBzZXQuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtpblByb2Nlc3NdIC0gV2hlbiB0cnVlLCB1c2UgYSBtb2R1bGUtbGV2ZWwgaW4tcHJvY2VzcyBicm9rZXIgc2luZ2xldG9uIGluc3RlYWQgb2YgY29ubmVjdGluZyBvdmVyIFRDUC4gTXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggYGhvc3RgL2Bwb3J0YC4gVXNlZnVsIGZvciB0ZXN0cyBhbmQgc2luZ2xlLXByb2Nlc3MgZGVwbG95bWVudHMuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2hvc3RdIC0gSG9zdG5hbWUgb2YgdGhlIEJlYWNvbiBicm9rZXIgZGFlbW9uLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtwb3J0XSAtIFBvcnQgb2YgdGhlIEJlYWNvbiBicm9rZXIgZGFlbW9uLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtwZWVyVHlwZV0gLSBPcHRpb25hbCBodW1hbi1yZWFkYWJsZSBsYWJlbCBmb3IgdGhpcyBwZWVyIChlLmcuIFwic2VydmVyXCIsIFwiYmFja2dyb3VuZC1qb2JzLXdvcmtlclwiKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbdW5yZWFjaGFibGVSZXBvcnRNc10gLSBHcmFjZSB3aW5kb3cgKG1zKSBhIGJlYWNvbiBjb25uZWN0L2Rpc2Nvbm5lY3QgYmxpcCBtdXN0IHBlcnNpc3QgYmVmb3JlIGl0IGlzIHJlcG9ydGVkIGFzIGEgZnJhbWV3b3JrLWVycm9yLiBUcmFuc2llbnQgb3V0YWdlcyB0aGF0IHJlY292ZXIgd2l0aGluIHRoaXMgd2luZG93IChlLmcuIGEgZGVwbG95IHJlc3RhcnRpbmcgdGhlIGJyb2tlcikgYXJlIG5vdCByZXBvcnRlZC4gRGVmYXVsdHMgdG8gMzAwMDAuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBIdHRwQ29tcHJlc3Npb25Db25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtlbmFibGVkXSAtIFdoZXRoZXIgYnVmZmVyZWQgcmVzcG9uc2UgY29tcHJlc3Npb24gaXMgZW5hYmxlZC4gRGVmYXVsdHMgdG8gdHJ1ZTsgc2V0IGZhbHNlIHRvIGRpc2FibGUgZ2xvYmFsbHkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3RocmVzaG9sZF0gLSBNaW5pbXVtIGJ1ZmZlcmVkIGJvZHkgc2l6ZSBpbiBieXRlcyBiZWZvcmUgY29tcHJlc3Npb24gaXMgYXBwbGllZC4gRGVmYXVsdHMgdG8gMTAyNC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbYnJvdGxpUXVhbGl0eV0gLSBCcm90bGkgZW5jb2RlciBxdWFsaXR5ICgwLTExKS4gRGVmYXVsdHMgdG8gNC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbZ3ppcExldmVsXSAtIEd6aXAgY29tcHJlc3Npb24gbGV2ZWwgKDAtOSkuIERlZmF1bHRzIHRvIDYuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBOb3JtYWxpemVkSHR0cENvbXByZXNzaW9uQ29uZmlndXJhdGlvblxuICogQHByb3BlcnR5IHtib29sZWFufSBlbmFibGVkIC0gV2hldGhlciBidWZmZXJlZCBIVFRQIHJlc3BvbnNlIGNvbXByZXNzaW9uIGlzIGVuYWJsZWQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gdGhyZXNob2xkIC0gTWluaW11bSBidWZmZXJlZCBib2R5IHNpemUgaW4gYnl0ZXMgYmVmb3JlIGNvbXByZXNzaW9uIGlzIGFwcGxpZWQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gYnJvdGxpUXVhbGl0eSAtIEJyb3RsaSBlbmNvZGVyIHF1YWxpdHkgKDAtMTEpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGd6aXBMZXZlbCAtIEd6aXAgY29tcHJlc3Npb24gbGV2ZWwgKDAtOSkuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBIdHRwUmVxdWVzdEJvZHlQb2xpY3lSZXNvbHZlckFyZ3NcbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gaGVhZGVycyAtIENvbXBsZXRlIHJlcXVlc3QgaGVhZGVycyBhcyByZWNlaXZlZCBieSB0aGUgcGFyc2VyLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGh0dHBNZXRob2QgLSBVcHBlcmNhc2UgSFRUUCBtZXRob2QuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcGF0aCAtIFJlcXVlc3QgdGFyZ2V0LCBpbmNsdWRpbmcgaXRzIHF1ZXJ5IHN0cmluZyB3aGVuIHByZXNlbnQuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBIdHRwUmVxdWVzdEJvZHlQb2xpY3lcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbbWF4UmVxdWVzdEJvZHlCeXRlc10gLSBQZXItcmVxdWVzdCBkZWNvZGVkIGJvZHkgbGltaXQuIEZhbGxzIGJhY2sgdG8gdGhlIGdsb2JhbCBsaW1pdCB3aGVuIG9taXR0ZWQuXG4gKiBAcHJvcGVydHkge1wicGFyc2VkXCIgfCBcInJhd1wifSBbbW9kZV0gLSBQYXJzZWQgcGFyYW1zIGJ5IGRlZmF1bHQ7IHJhdyBwcmVzZXJ2ZXMgZXhhY3QgYnl0ZXMgYW5kIHNraXBzIGJvZHkgZGVjb2RpbmcuXG4gKi9cblxuLyoqIEB0eXBlZGVmIHsoYXJnczogSHR0cFJlcXVlc3RCb2R5UG9saWN5UmVzb2x2ZXJBcmdzKSA9PiBIdHRwUmVxdWVzdEJvZHlQb2xpY3kgfCB1bmRlZmluZWR9IEh0dHBSZXF1ZXN0Qm9keVBvbGljeVJlc29sdmVyICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gUmVzb2x2ZWRIdHRwUmVxdWVzdEJvZHlQb2xpY3lcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgdW5kZWZpbmVkfSBtYXhSZXF1ZXN0Qm9keUJ5dGVzIC0gRWZmZWN0aXZlIGRlY29kZWQgYm9keSBsaW1pdC5cbiAqIEBwcm9wZXJ0eSB7XCJwYXJzZWRcIiB8IFwicmF3XCJ9IG1vZGUgLSBFZmZlY3RpdmUgYm9keSBoYW5kbGluZyBtb2RlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gSHR0cFNlcnZlckNvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbiB8IEh0dHBDb21wcmVzc2lvbkNvbmZpZ3VyYXRpb259IFtjb21wcmVzc2lvbl0gLSBCdWZmZXJlZCByZXNwb25zZSBjb21wcmVzc2lvbi4gRW5hYmxlZCB3aXRoIGRvY3VtZW50ZWQgZGVmYXVsdHMgd2hlbiBhYnNlbnQ7IGZhbHNlIG9yIHtlbmFibGVkOiBmYWxzZX0gZGlzYWJsZXMgaXQgZ2xvYmFsbHkuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2hvc3RdIC0gSG9zdG5hbWUgdG8gYmluZCB0aGUgSFRUUCBzZXJ2ZXIgdG8uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtpblByb2Nlc3NdIC0gUnVuIEhUVFAgaGFuZGxlcnMgaW4gdGhlIG1haW4gdGhyZWFkIGluc3RlYWQgb2Ygd29ya2VyIHRocmVhZHMuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW21heEJ1ZmZlcmVkUmVzcG9uc2VCb2R5Qnl0ZXNdIC0gTWF4aW11bSBVVEYtOC9iaW5hcnkgYnl0ZSBsZW5ndGggYWNjZXB0ZWQgYnkgYnVmZmVyZWQgcmVzcG9uc2UgYm9kaWVzLiBVbmJvdW5kZWQgd2hlbiBhYnNlbnQ7IHN0cmVhbWVkIGZpbGUgcmVzcG9uc2VzIGFyZSB1bmFmZmVjdGVkLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFttYXhSZXF1ZXN0Qm9keUJ5dGVzXSAtIE1heGltdW0gZGVjb2RlZCByZXF1ZXN0LWJvZHkgYnl0ZXMgYWNjZXB0ZWQgYmVmb3JlIHJvdXRpbmcuIFVuYm91bmRlZCB3aGVuIGFic2VudC5cbiAqIEBwcm9wZXJ0eSB7SHR0cFJlcXVlc3RCb2R5UG9saWN5UmVzb2x2ZXJ9IFtyZXF1ZXN0Qm9keVBvbGljeVJlc29sdmVyXSAtIE9wdGlvbmFsIHN5bmNocm9ub3VzIGhlYWRlci1zdGFnZSByZXNvbHZlciBmb3IgcGVyLXJlcXVlc3QgbGltaXRzIGFuZCByYXctYm9keSBoYW5kbGluZy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbbWF4V29ya2Vyc10gLSBCYWNrd2FyZC1jb21wYXRpYmxlIGFsaWFzIGZvciB3b3JrZXJzLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtwb3J0XSAtIFBvcnQgdG8gYmluZCB0aGUgSFRUUCBzZXJ2ZXIgdG8uXG4gKiBAcHJvcGVydHkge3ttYXhQZW5kaW5nQnl0ZXM/OiBudW1iZXIsIG1heFBlbmRpbmdNZXNzYWdlcz86IG51bWJlcn19IFt3ZWJzb2NrZXRJbmJvdW5kUXVldWVdIC0gUGVyLXNlc3Npb24gcmV0YWluZWQgaW5ib3VuZCBXZWJTb2NrZXQgbWVzc2FnZSBsaW1pdHMuXG4gKiBAcHJvcGVydHkge3ttYXhQZW5kaW5nQnl0ZXM/OiBudW1iZXIsIG1heFBlbmRpbmdGcmFtZXM/OiBudW1iZXJ9fSBbd2Vic29ja2V0T3V0Ym91bmRRdWV1ZV0gLSBQZXItY2xpZW50IHJldGFpbmVkIG91dGJvdW5kIFdlYlNvY2tldCBmcmFtZSBsaW1pdHMuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3dvcmtlcnNdIC0gV29ya2VyIGhhbmRsZXJzIHRvIHN0YXJ0IGZvciB0aGUgSFRUUCBzZXJ2ZXIuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBTY2hlZHVsZWRCYWNrZ3JvdW5kSm9iRXZlcnlPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlciB8IHN0cmluZ30gW2ZpcnN0SW5dIC0gRGVsYXkgYmVmb3JlIHRoZSBmaXJzdCBlbnF1ZXVlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gU2NoZWR1bGVkQmFja2dyb3VuZEpvYkNvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8UmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fSBbYXJnc10gLSBBcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBqb2Igd2hlbiBlbnF1ZXVlZC5cbiAqIEBwcm9wZXJ0eSB7dHlwZW9mIGltcG9ydChcIi4vYmFja2dyb3VuZC1qb2JzL2pvYi5qc1wiKS5kZWZhdWx0fSBjbGFzcyAtIEpvYiBjbGFzcyB0byBlbnF1ZXVlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtjcm9uXSAtIENyb250YWIgZXhwcmVzc2lvbiAoNS1maWVsZCBQT1NJWCwgcGx1cyBgQGhvdXJseWAvYEBkYWlseWAvYEB3ZWVrbHlgL2BAbW9udGhseWAvYEB5ZWFybHlgL2BAbWlkbmlnaHRgKS4gTXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggYGV2ZXJ5YC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2VuYWJsZWRdIC0gV2hldGhlciB0aGUgc2NoZWR1bGUgaXMgZW5hYmxlZC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgc3RyaW5nIHwgW251bWJlciB8IHN0cmluZywgU2NoZWR1bGVkQmFja2dyb3VuZEpvYkV2ZXJ5T3B0aW9uc119IFtldmVyeV0gLSBSZXBlYXQgaW50ZXJ2YWwuIEVpdGhlciBgZXZlcnlgIG9yIGBjcm9uYCBtdXN0IGJlIHNldC5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi9iYWNrZ3JvdW5kLWpvYnMvdHlwZXMuanNcIikuQmFja2dyb3VuZEpvYk9wdGlvbnN9IFtvcHRpb25zXSAtIEpvYiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IFZlbG9jaW91c1BhcmFtc1xuICovXG5cbi8qKlxuICogQHR5cGVkZWYge1JlY29yZDxzdHJpbmcsIGltcG9ydChcIi4vZnJvbnRlbmQtbW9kZWxzL3F1ZXJ5LmpzXCIpLkZyb250ZW5kTW9kZWxUcmFuc3BvcnRWYWx1ZT59IENsaWVudEVycm9yUGF5bG9hZFJlcG9ydGVyUGF5bG9hZFxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gRXJyb3JSZXF1ZXN0RGV0YWlsc1xuICogQHByb3BlcnR5IHtSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0gW2JvZHldIC0gU2FuaXRpemVkIHBhcnNlZCByZXF1ZXN0IGJvZHksIHdoZW4gYXZhaWxhYmxlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGh0dHBNZXRob2QgLSBSZXF1ZXN0IEhUVFAgbWV0aG9kLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBhdGggLSBSZXF1ZXN0IHBhdGguXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBDbGllbnRFcnJvclBheWxvYWRDb250ZXh0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gY29udHJvbGxlciAtIENvbnRyb2xsZXIgY2xhc3MgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbYWN0aW9uXSAtIENvbnRyb2xsZXIgYWN0aW9uIG9yIGVuZHBvaW50IGxhYmVsLlxuICogQHByb3BlcnR5IHtcImluZGV4XCIgfCBcImZpbmRcIiB8IFwiY3JlYXRlXCIgfCBcInVwZGF0ZVwiIHwgXCJkZXN0cm95XCIgfCBcImF0dGFjaFwiIHwgXCJhdHRhY2htZW50TGlzdFwiIHwgXCJkb3dubG9hZFwiIHwgXCJ1cmxcIiB8IFwiY3VzdG9tLWNvbW1hbmRcIn0gW2NvbW1hbmRUeXBlXSAtIEZyb250ZW5kLW1vZGVsIGNvbW1hbmQgdHlwZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbY29ycmVsYXRpb25JZF0gLSBTZXJ2ZXItZ2VuZXJhdGVkIGlkZW50aWZpZXIgc2hhcmVkIGJ5IGFuIHVuZXhwZWN0ZWQgY2xpZW50IGVycm9yIGFuZCBmcmFtZXdvcmsgcmVwb3J0cy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2V4cGVjdGVkRXJyb3JdIC0gV2hldGhlciB0aGUgZXJyb3IgaXMgYW4gZXhwZWN0ZWQgdXNlci1mbG93IGZhaWx1cmUuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtmcm9udGVuZE1vZGVsRW5kcG9pbnRdIC0gV2hldGhlciB0aGUgZXJyb3IgY2FtZSBmcm9tIHRoZSBmcm9udGVuZC1tb2RlbCBlbmRwb2ludC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbW9kZWxdIC0gRnJvbnRlbmQtbW9kZWwgbmFtZSBmcm9tIHRoZSBmYWlsZWQgcmVxdWVzdC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcmVxdWVzdElkXSAtIFNoYXJlZCBmcm9udGVuZC1tb2RlbCByZXF1ZXN0IGlkLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgeyhhcmdzOiB7XG4gKiAgIGNvbnRleHQ6IENsaWVudEVycm9yUGF5bG9hZENvbnRleHQsXG4gKiAgIGVycm9yOiBFcnJvcixcbiAqICAgcmVxdWVzdDogaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvcmVxdWVzdC5qc1wiKS5kZWZhdWx0IHwgaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvd2Vic29ja2V0LXJlcXVlc3QuanNcIikuZGVmYXVsdCB8IHVuZGVmaW5lZCxcbiAqICAgcmVxdWVzdERldGFpbHM6IEVycm9yUmVxdWVzdERldGFpbHMgfCBudWxsXG4gKiB9KSA9PiBQcm9taXNlPENsaWVudEVycm9yUGF5bG9hZFJlcG9ydGVyUGF5bG9hZCB8IHZvaWQ+IHwgQ2xpZW50RXJyb3JQYXlsb2FkUmVwb3J0ZXJQYXlsb2FkIHwgdm9pZH0gQ2xpZW50RXJyb3JQYXlsb2FkUmVwb3J0ZXJUeXBlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7UmVjb3JkPHN0cmluZywgdW5rbm93bj4gJiB7Y29uZmlndXJhdGlvbj86IGltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0LCBjdXJyZW50RGV2aWNlPzogdW5rbm93biwgY3VycmVudFVzZXI/OiB1bmtub3duLCBtb2RlbFJlZ2lzdHJ5PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB7bW9kZWw6IChuYW1lOiBzdHJpbmcpID0+IHVua25vd259LCBub3c/OiBEYXRlIHwgKCgpID0+IERhdGUpLCBvZmZsaW5lR3JhbnQ/OiB1bmtub3duLCBwYXJhbXM/OiBWZWxvY2lvdXNQYXJhbXMsIHJlcXVlc3Q/OiBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC9yZXF1ZXN0LmpzXCIpLmRlZmF1bHQgfCBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC93ZWJzb2NrZXQtcmVxdWVzdC5qc1wiKS5kZWZhdWx0LCByZXNvdXJjZVJ1bnRpbWU/OiBcImJhY2tlbmRcIiB8IFwiZnJvbnRlbmRcIiB8IFwib2ZmbGluZVwifX0gVmVsb2Npb3VzTG9vc2VPYmplY3RcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtuZXcgKGFyZ3M6IHthdHRhY2htZW50TmFtZT86IHN0cmluZywgY29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHQsIG1vZGVsQ2xhc3M/OiB0eXBlb2YgaW1wb3J0KFwiLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdCwgbmFtZT86IHN0cmluZywgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0pID0+IG9iamVjdH0gQXR0YWNobWVudERyaXZlckNvbnN0cnVjdG9yXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBTY2hlZHVsZWRCYWNrZ3JvdW5kSm9ic0NvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgU2NoZWR1bGVkQmFja2dyb3VuZEpvYkNvbmZpZ3VyYXRpb24+fSBqb2JzIC0gU2NoZWR1bGVkIGpvYnMga2V5ZWQgYnkgbmFtZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHsoYXJnczoge2NvbmZpZ3VyYXRpb246IGltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSkgPT4gU2NoZWR1bGVkQmFja2dyb3VuZEpvYnNDb25maWd1cmF0aW9uIHwgUHJvbWlzZTxTY2hlZHVsZWRCYWNrZ3JvdW5kSm9ic0NvbmZpZ3VyYXRpb24+fSBTY2hlZHVsZWRCYWNrZ3JvdW5kSm9ic0xvYWRlclR5cGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEF0dGFjaG1lbnREcml2ZXJDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkgeyhhcmdzOiB7Y29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHQsIG5hbWU6IHN0cmluZywgb3B0aW9uczogUmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fSkgPT4gUmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fSBbY3JlYXRlXSAtIE9wdGlvbmFsIGZhY3RvcnkgZm9yIGEgY3VzdG9tIGF0dGFjaG1lbnQgZHJpdmVyIGluc3RhbmNlLlxuICogQHByb3BlcnR5IHtBdHRhY2htZW50RHJpdmVyQ29uc3RydWN0b3J9IFtkcml2ZXJDbGFzc10gLSBPcHRpb25hbCBjdXN0b20gYXR0YWNobWVudCBkcml2ZXIgY2xhc3MuXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0gW2luc3RhbmNlXSAtIE9wdGlvbmFsIGN1c3RvbSBhdHRhY2htZW50IGRyaXZlciBpbnN0YW5jZS5cbiAqL1xuXG4vKipcbiAqIENsaWVudC1zYWZlIHN5bmNocm9uaXphdGlvbiBwb2xpY3kgZGVjbGFyZWQgd2l0aCBhIG1vZGVsIGF0dGFjaG1lbnQuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBBdHRhY2htZW50U3luY0NvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7XCJlYWdlclwiIHwgXCJvbi1kZW1hbmRcIn0gZmV0Y2ggLSBXaGV0aGVyIGNsaWVudHMgcHJlZmV0Y2ggdGhlIGF0dGFjaG1lbnQgb3Igd2FpdCB1bnRpbCBpdCBpcyByZXF1ZXN0ZWQuXG4gKiBAcHJvcGVydHkge1wib3B0aW9uYWxcIiB8IFwicmVxdWlyZWRcIn0gb2ZmbGluZVJlcXVpcmVtZW50IC0gV2hldGhlciBhbiBvZmZsaW5lLXJlYWR5IHNjb3BlIHJlcXVpcmVzIHRoZSBhdHRhY2htZW50IGJ5dGVzLlxuICogQHByb3BlcnR5IHtcImR1cmFibGVcIiB8IFwiZXZpY3RhYmxlXCJ9IHJldGVudGlvbiAtIFdoZXRoZXIgY2xpZW50cyBtYXkgZXZpY3QgdGhlIGF0dGFjaG1lbnQgdW5kZXIgc3RvcmFnZSBwcmVzc3VyZS5cbiAqL1xuXG4vKipcbiAqIE1vZGVsIGF0dGFjaG1lbnQgZGVjbGFyYXRpb24gcmV0YWluZWQgYnkgdGhlIHJlY29yZCBjbGFzcy5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IFJlY29yZEF0dGFjaG1lbnRDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IEF0dGFjaG1lbnREcml2ZXJDb25zdHJ1Y3RvciB8IFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0gW2RyaXZlcl0gLSBBdHRhY2htZW50IGRyaXZlciBuYW1lLCBjbGFzcywgb3IgaW5zdGFuY2UuXG4gKiBAcHJvcGVydHkge0F0dGFjaG1lbnRTeW5jQ29uZmlndXJhdGlvbn0gW3N5bmNdIC0gQ2xpZW50LXNhZmUgc3luY2hyb25pemVkIGFzc2V0IHBvbGljeS5cbiAqIEBwcm9wZXJ0eSB7XCJoYXNPbmVcIiB8IFwiaGFzTWFueVwifSB0eXBlIC0gQXR0YWNobWVudCBjYXJkaW5hbGl0eS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEF0dGFjaG1lbnRzQ29uZmlndXJhdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtkZWZhdWx0RHJpdmVyXSAtIERlZmF1bHQgYXR0YWNobWVudCBzdG9yYWdlIGRyaXZlciBuYW1lLlxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBBdHRhY2htZW50RHJpdmVyQ29uZmlndXJhdGlvbiAmIFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pj59IFtkcml2ZXJzXSAtIE5hbWVkIGF0dGFjaG1lbnQgZHJpdmVyIGNvbmZpZ3VyYXRpb25zLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbYWxsb3dQYXRoSW5wdXRdIC0gV2hldGhlciBge3BhdGg6IC4uLn1gIGF0dGFjaG1lbnQgaW5wdXQgaXMgYWxsb3dlZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFthbGxvd2VkUGF0aFByZWZpeGVzXSAtIE9wdGlvbmFsIGFsbG93bGlzdCBvZiBkaXJlY3RvcmllcyBmb3IgYHtwYXRoOiAuLi59YCBpbnB1dC5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IE1haWxlckJhY2tlbmRcbiAqIEBwcm9wZXJ0eSB7KGFyZ3M6IHtwYXlsb2FkOiBpbXBvcnQoXCIuL21haWxlci5qc1wiKS5NYWlsZXJEZWxpdmVyeVBheWxvYWQsIGNvbmZpZ3VyYXRpb246IGltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSkgPT4gUHJvbWlzZTxSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj4gfCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0gZGVsaXZlciAtIERlbGl2ZXIgYSBtYWlsZXIgcGF5bG9hZC5cbiAqIEBwcm9wZXJ0eSB7KCkgPT4gaW1wb3J0KFwiLi9tYWlsZXIuanNcIikuTWFpbGVyRGVsaXZlcnlJZGVtcG90ZW5jeUNhcGFiaWxpdHl9IFtkZWxpdmVyeUlkZW1wb3RlbmN5Q2FwYWJpbGl0eV0gLSBFeHBsaWNpdCBwcm92aWRlci1iYWNrZWQgZHVwbGljYXRlLXN1cHByZXNzaW9uIGNhcGFiaWxpdHkuIEdlbmVyaWMgU01UUCBvbWl0cyB0aGlzIGFuZCByZW1haW5zIGF0LWxlYXN0LW9uY2UuXG4gKiBAcHJvcGVydHkgeyhhcmdzOiB7cGF5bG9hZDogaW1wb3J0KFwiLi9tYWlsZXIuanNcIikuTWFpbGVyRGVsaXZlcnlQYXlsb2FkfSkgPT4gaW1wb3J0KFwiLi9tYWlsZXIuanNcIikuTWFpbGVyRGVsaXZlcnlQYXlsb2FkfSBbcHJlcGFyZURlbGl2ZXJ5T3BlcmF0aW9uUGF5bG9hZF0gLSBSZXNvbHZlcyBwcm92aWRlciBkZWZhdWx0cyBpbnRvIHRoZSBpbW11dGFibGUgcGF5bG9hZCBiZWZvcmUgcmVxdWlyZWQtb3BlcmF0aW9uIGhhc2hpbmcgYW5kIGVucXVldWUuXG4gKiBAcHJvcGVydHkgeyhhcmdzOiB7ZGVsaXZlcnlPcGVyYXRpb246IGltcG9ydChcIi4vbWFpbGVyLmpzXCIpLk1haWxlckRlbGl2ZXJ5T3BlcmF0aW9uUmVxdWVzdCB8IGltcG9ydChcIi4vbWFpbGVyLmpzXCIpLk1haWxlckRlbGl2ZXJ5T3BlcmF0aW9uLCBwYXlsb2FkOiBpbXBvcnQoXCIuL21haWxlci5qc1wiKS5NYWlsZXJEZWxpdmVyeVBheWxvYWR9KSA9PiB2b2lkfSBbdmFsaWRhdGVEZWxpdmVyeU9wZXJhdGlvbl0gLSBQcm92aWRlci1zcGVjaWZpYyBvcGVyYXRpb24gYW5kIHBheWxvYWQgdmFsaWRhdGlvbiBwZXJmb3JtZWQgYmVmb3JlIGVucXVldWUgYW5kIGV2ZXJ5IG5ldHdvcmsgYXR0ZW1wdC5cbiAqL1xuXG5cbi8qKlxuICogQHR5cGVkZWYge1JlY29yZDxzdHJpbmcsIHN0cmluZ1tdPn0gTG9jYWxlRmFsbGJhY2tzVHlwZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gRnJvbnRlbmRNb2RlbFJlbGF0aW9uc2hpcENvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7XCJiZWxvbmdzVG9cIiB8IFwiaGFzT25lXCIgfCBcImhhc01hbnlcIn0gdHlwZSAtIFJlbGF0aW9uc2hpcCB0eXBlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFttb2RlbF0gLSBUYXJnZXQgbW9kZWwgY2xhc3MgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbY2xhc3NOYW1lXSAtIEFsaWFzIG9mIHRhcmdldCBtb2RlbCBjbGFzcyBuYW1lLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFttb2RlbENsYXNzTmFtZV0gLSBFeHBsaWNpdCB0YXJnZXQgbW9kZWwgY2xhc3MgbmFtZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEZyb250ZW5kTW9kZWxBdHRyaWJ1dGVDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3R5cGVdIC0gQ29sdW1uIHR5cGUgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbY29sdW1uVHlwZV0gLSBBbGlhcyBmb3IgY29sdW1uIHR5cGUgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbc3FsVHlwZV0gLSBBbGlhcyBmb3IgY29sdW1uIHR5cGUgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZGF0YVR5cGVdIC0gQWxpYXMgZm9yIGNvbHVtbiB0eXBlIG5hbWUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2pzRG9jVHlwZV0gLSBFeGFjdCBnZW5lcmF0ZWQgSlNEb2MgdHlwZSBmb3Igbm9uLWNvbHVtbiBhdHRyaWJ1dGVzLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtuYW1lXSAtIEF0dHJpYnV0ZSBuYW1lIHdoZW4gY29uZmlndXJlZCBhcyBhbiBhcnJheSBlbnRyeS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW251bGxdIC0gV2hldGhlciB2YWx1ZSBjYW4gYmUgbnVsbC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3NlbGVjdGVkQnlEZWZhdWx0XSAtIFdoZXRoZXIgaW5jbHVkZWQgaW4gZGVmYXVsdCBzZXJpYWxpemF0aW9uLiBEZWZhdWx0cyB0byB0cnVlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gRnJvbnRlbmRNb2RlbEF0dGFjaG1lbnRDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge0F0dGFjaG1lbnRTeW5jQ29uZmlndXJhdGlvbn0gW3N5bmNdIC0gQ2xpZW50LXNpZGUgc3luY2hyb25pemVkIGFzc2V0IHBvbGljeS5cbiAqIEBwcm9wZXJ0eSB7XCJoYXNPbmVcIiB8IFwiaGFzTWFueVwifSB0eXBlIC0gQXR0YWNobWVudCBjYXJkaW5hbGl0eS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nIHwgRnJvbnRlbmRNb2RlbEF0dHJpYnV0ZUNvbmZpZ3VyYXRpb24+IHwgUmVjb3JkPHN0cmluZywgRnJvbnRlbmRNb2RlbEF0dHJpYnV0ZUNvbmZpZ3VyYXRpb24gfCBpbXBvcnQoXCIuL2RhdGFiYXNlL2RyaXZlcnMvYmFzZS1jb2x1bW4uanNcIikuZGVmYXVsdCB8IGJvb2xlYW4+fSBhdHRyaWJ1dGVzIC0gQXR0cmlidXRlcyB0byBleHBvc2Ugb24gdGhlIGZyb250ZW5kIG1vZGVsLlxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gW2FiaWxpdGllc10gLSBBZGRpdGlvbmFsIGNhbWVsQ2FzZSBhYmlsaXR5IGFjdGlvbiBuYW1lcyB0byBleHBvc2UgZm9yIHBlci1yZWNvcmQgYHJlY29yZC5jYW4oYWN0aW9uKWAgcmVhZHMuIEJhc2UgQ1JVRCBhY3Rpb25zIChgcmVhZGAsIGBjcmVhdGVgLCBgdXBkYXRlYCwgYGRlc3Ryb3lgKSBhcmUgYWx3YXlzIGluY2x1ZGVkIGFuZCBtdXN0IG5vdCBiZSBsaXN0ZWQgaGVyZS5cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgRnJvbnRlbmRNb2RlbEF0dGFjaG1lbnRDb25maWd1cmF0aW9uPn0gW2F0dGFjaG1lbnRzXSAtIEF0dGFjaG1lbnQgaGVscGVycyBrZXllZCBieSBhdHRhY2htZW50IG5hbWUuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbY29tbWFuZHNdIC0gTGVnYWN5IGJ1aWx0LWluIGNvbW1hbmQgbmFtZXMgKGBpbmRleGAsIGBmaW5kYCwgYGNyZWF0ZWAsIGB1cGRhdGVgLCBgZGVzdHJveWAsIGBhdHRhY2hgLCBgZG93bmxvYWRgLCBgdXJsYCkuXG4gKiBAcHJvcGVydHkge0FycmF5PEZyb250ZW5kTW9kZWxSZXNvdXJjZUN1c3RvbUNvbW1hbmQ+fSBbY29sbGVjdGlvbkNvbW1hbmRzXSAtIEN1c3RvbSBjb2xsZWN0aW9uIGNvbW1hbmRzLiBFYWNoIGVudHJ5IGlzIGEgY2FtZWxDYXNlIG1ldGhvZCBuYW1lLCBvciBhIGB7bmFtZSwgYXJncz8sIHJldHVyblR5cGU/fWAgb2JqZWN0IGRlY2xhcmluZyB0eXBlZCBhcmd1bWVudHMgYW5kL29yIGEgcmVzcG9uc2UgdHlwZS4gVGhlIHJ1bnRpbWUgZGVyaXZlcyB0aGUga2ViYWItY2FzZSBjb21tYW5kIHNsdWcgZnJvbSB0aGUgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8RnJvbnRlbmRNb2RlbFJlc291cmNlQ3VzdG9tQ29tbWFuZD59IFttZW1iZXJDb21tYW5kc10gLSBDdXN0b20gbWVtYmVyIGNvbW1hbmRzLiBFYWNoIGVudHJ5IGlzIGEgY2FtZWxDYXNlIG1ldGhvZCBuYW1lLCBvciBhIGB7bmFtZSwgYXJncz8sIHJldHVyblR5cGU/fWAgb2JqZWN0IGRlY2xhcmluZyB0eXBlZCBhcmd1bWVudHMgYW5kL29yIGEgcmVzcG9uc2UgdHlwZS4gVGhlIHJ1bnRpbWUgZGVyaXZlcyB0aGUga2ViYWItY2FzZSBjb21tYW5kIHNsdWcgZnJvbSB0aGUgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFtidWlsdEluQ29sbGVjdGlvbkNvbW1hbmRzXSAtIEJ1aWx0LWluIGNvbGxlY3Rpb24gY29tbWFuZCBuYW1lcyAoYGluZGV4YCwgYGNyZWF0ZWApLlxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gW2J1aWx0SW5NZW1iZXJDb21tYW5kc10gLSBCdWlsdC1pbiBtZW1iZXIgY29tbWFuZCBuYW1lcyAoYGZpbmRgLCBgdXBkYXRlYCwgYGRlc3Ryb3lgLCBgYXR0YWNoYCwgYGRvd25sb2FkYCwgYHVybGApLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFttb2RlbE5hbWVdIC0gRnJvbnRlbmQgbW9kZWwgbmFtZSBvdmVycmlkZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFtyZWxhdGlvbnNoaXBzXSAtIFJlbGF0aW9uc2hpcCBuYW1lcyB0byBleHBvc2UgaW4gZnJvbnRlbmQgbW9kZWxzLiBUeXBlIGFuZCB0YXJnZXQgbW9kZWwgYXJlIGluZmVycmVkIGZyb20gdGhlIGJhY2tlbmQgbW9kZWwncyByZWdpc3RlcmVkIHJlbGF0aW9uc2hpcHMuXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IHN0cmluZ1tdfSBbcHJpbWFyeUtleV0gLSBQcmltYXJ5IGtleSBhdHRyaWJ1dGUgbmFtZSBvciBvcmRlcmVkIGNvbXBvc2l0ZSBwcmltYXJ5LWtleSBhdHRyaWJ1dGUgbmFtZXMuXG4gKiBAcHJvcGVydHkge0Zyb250ZW5kTW9kZWxSZXNvdXJjZVNlcnZlckNvbmZpZ3VyYXRpb259IFtzZXJ2ZXJdIC0gT3B0aW9uYWwgbGVnYWN5IGJhY2tlbmQgYmVoYXZpb3Igb3ZlcnJpZGVzIGZvciBidWlsdC1pbiBmcm9udGVuZCBhY3Rpb25zLlxuICogQHByb3BlcnR5IHtGcm9udGVuZE1vZGVsUmVzb3VyY2VTeW5jQ29uZmlndXJhdGlvbiB8IGJvb2xlYW59IFtzeW5jXSAtIE9wdGlvbmFsIHNhZmUgbG9jYWwvb2ZmbGluZSBzeW5jIHBvbGljeSBtZXRhZGF0YS4gYHBvbGljeWAgcGFydGljaXBhdGVzIGluIHRoZSBoYXNoIGJ1dCBpcyBub3QgZXhwb3NlZCB0byBnZW5lcmF0ZWQgZnJvbnRlbmQgY29uZmlnL21hbmlmZXN0LlxuICovXG5cbi8qKlxuICogT2JqZWN0IGZvcm0gb2YgYSBjdXN0b20gY29tbWFuZCBlbnRyeSwgZGVjbGFyaW5nIGl0cyB0eXBlZCBhcmd1bWVudHMgYW5kL29yXG4gKiByZXNwb25zZSB0eXBlIGFsb25nc2lkZSB0aGUgY29tbWFuZCBuYW1lLlxuICogQHR5cGVkZWYge29iamVjdH0gRnJvbnRlbmRNb2RlbFJlc291cmNlQ3VzdG9tQ29tbWFuZE9iamVjdFxuICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWUgLSBjYW1lbENhc2UgY29tbWFuZCBtZXRob2QgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8e25hbWU6IHN0cmluZywgdHlwZTogc3RyaW5nfT59IFthcmdzXSAtIFR5cGVkIGNvbW1hbmQgYXJndW1lbnRzOyBlYWNoIGdlbmVyYXRlcyBhIG5hbWVkLCB0eXBlZCBtZXRob2QgcGFyYW1ldGVyIG1hcHBlZCBwb3NpdGlvbmFsbHkgaW50byB0aGUgY29tbWFuZCBwYXlsb2FkLiBgdHlwZWAgaXMgYSBKU0RvYyB0eXBlIHN0cmluZy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcmV0dXJuVHlwZV0gLSBKU0RvYyB0eXBlIGZvciB0aGUgY29tbWFuZCByZXNwb25zZS4gV2hlbiBzZXQsIHRoZSBnZW5lcmF0ZWQgbWV0aG9kIGlzIHR5cGVkIGBQcm9taXNlPHJldHVyblR5cGU+YCBpbnN0ZWFkIG9mIGBQcm9taXNlPFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pj5gLiBFbWl0dGVkIHZlcmJhdGltIGludG8gdGhlIGdlbmVyYXRlZCBmcm9udGVuZCBtb2RlbCwgc28gaXQgbXVzdCByZXNvbHZlIHRoZXJlLlxuICovXG5cbi8qKlxuICogQSBjdXN0b20gY29tbWFuZCBlbnRyeTogYSBwbGFpbiBjYW1lbENhc2UgbWV0aG9kIG5hbWUsIG9yIGFuIG9iamVjdCBkZWNsYXJpbmdcbiAqIHR5cGVkIGFyZ3MgYW5kL29yIGEgcmVzcG9uc2UgdHlwZS5cbiAqIEB0eXBlZGVmIHtzdHJpbmcgfCBGcm9udGVuZE1vZGVsUmVzb3VyY2VDdXN0b21Db21tYW5kT2JqZWN0fSBGcm9udGVuZE1vZGVsUmVzb3VyY2VDdXN0b21Db21tYW5kXG4gKi9cblxuLyoqXG4gKiBKU09OIHZhbHVlIGFjY2VwdGVkIGJ5IHN5bmMgcG9saWN5IG1ldGFkYXRhL2hhc2ggaW5wdXRzLlxuICogQHR5cGVkZWYge251bGwgfCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgdW5rbm93bltdIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj59IEZyb250ZW5kTW9kZWxTeW5jSnNvblZhbHVlXG4gKi9cblxuLyoqXG4gKiBGcm9udGVuZC1tb2RlbCBsb2NhbC9vZmZsaW5lIHN5bmMgcG9saWN5IGNvbmZpZy4gYG1ldGFkYXRhYCBpcyBleHBvc2VkIHRvXG4gKiBmcm9udGVuZHMgYW5kIHBlZXJzOyBgcG9saWN5YCBpcyBoYXNoZWQgYnV0IGludGVudGlvbmFsbHkgb21pdHRlZCBmcm9tXG4gKiBmcm9udGVuZC1zYWZlIG1hbmlmZXN0cy5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IEZyb250ZW5kTW9kZWxSZXNvdXJjZVN5bmNDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge1wib3B0aW1pc3RpY1ZlcnNpb25cIiB8IFwic2VydmVyV2luc1wiIHwgXCJsYXN0V3JpdGVyV2luc1wiIHwgXCJmaWVsZFRocmVlV2F5XCIgfCBcImFwcGVuZE9ubHlcIn0gW2NvbmZsaWN0U3RyYXRlZ3ldIC0gU3RyYXRlZ3kgdXNlZCB3aGVuIHJlcGxheSBkZXRlY3RzIHNlcnZlci9jbGllbnQgZGl2ZXJnZW5jZS4gRGVmYXVsdHMgdG8gYG9wdGltaXN0aWNWZXJzaW9uYC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2VuYWJsZWRdIC0gV2hldGhlciB0aGUgcmVzb3VyY2UgaXMgc3luYy1lbmFibGVkLiBEZWZhdWx0cyB0byB0cnVlIHdoZW4gYHN5bmNgIGlzIGNvbmZpZ3VyZWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbb3BlcmF0aW9uc10gLSBTeW5jIG9wZXJhdGlvbiBuYW1lcyBzdWNoIGFzIGBpbmRleGAsIGBmaW5kYCwgYGNyZWF0ZWAsIGB1cGRhdGVgLCBjdXN0b20gZG9tYWluIGNvbW1hbmRzLCBldGMuXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IG51bWJlcn0gW3BvbGljeVZlcnNpb25dIC0gQXBwLWNvbnRyb2xsZWQgcG9saWN5IHZlcnNpb24gdXNlZCBhcyBhIHN0YWJsZSBjaGFuZ2Ugc2lnbmFsLlxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBGcm9udGVuZE1vZGVsU3luY0pzb25WYWx1ZT59IFttZXRhZGF0YV0gLSBTYWZlIGZyb250ZW5kLXZpc2libGUgbWV0YWRhdGEuXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIEZyb250ZW5kTW9kZWxTeW5jSnNvblZhbHVlPn0gW3BvbGljeV0gLSBEZXRlcm1pbmlzdGljIG5vbi1zZWNyZXQgcG9saWN5IGlucHV0cyBpbmNsdWRlZCBpbiB0aGUgcG9saWN5IGhhc2ggb25seS5cbiAqL1xuXG4vKipcbiAqIFZlbG9jaW91cyBzeW5jIEFQSSBlbmRwb2ludCBjb25maWd1cmF0aW9uLlxuICogQHR5cGVkZWYge29iamVjdH0gVmVsb2Npb3VzU3luY0FwaUNvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbW91bnRQYXRoXSAtIE1vdW50IHBhdGggZm9yIHRoZSBzeW5jIGVuZHBvaW50cy4gRGVmYXVsdHMgdG8gXCIvdmVsb2Npb3VzL3N5bmNcIi5cbiAqIEBwcm9wZXJ0eSB7RnJvbnRlbmRNb2RlbFJlc291cmNlQ2xhc3NUeXBlfSByZXNvdXJjZUNsYXNzIC0gQXBwIHN5bmMgcmVzb3VyY2UgY2xhc3Mgc2VydmVkIGJ5IHRoZSBhdXRvLW1vdW50ZWQgc3luYyBlbmRwb2ludHMuXG4gKi9cblxuLyoqXG4gKiBDbGllbnQtc2lkZSBzeW5jIHRyYW5zcG9ydCBvd25pbmcgSFRUUCBQT1NUcyB0byB0aGUgZnJhbWV3b3JrIHN5bmMgZW5kcG9pbnRzLFxuICogbWF0Y2hpbmcgdGhlIGZyb250ZW5kLW1vZGVsIHdlYnNvY2tldCBjbGllbnQgcG9zdCBjb250cmFjdC5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IFZlbG9jaW91c1N5bmNDbGllbnRUcmFuc3BvcnRcbiAqIEBwcm9wZXJ0eSB7KHBhdGg6IHN0cmluZywgYm9keT86IFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+LCBvcHRpb25zPzoge2hlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBzaWduYWw/OiBBYm9ydFNpZ25hbH0pID0+IFByb21pc2U8e2pzb246ICgpID0+IFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+fT59IHBvc3QgLSBQb3N0cyBvbmUgcmVxdWVzdCBhbmQgcmVzb2x2ZXMgYSByZXNwb25zZSB3aXRoIGEganNvbiBhY2Nlc3Nvci5cbiAqL1xuXG4vKipcbiAqIFdlYnNvY2tldCBjbGllbnQgY29udHJhY3QgcmVxdWlyZWQgZnJvbSBgc3luYy5jbGllbnQucmVhbHRpbWUuY3JlYXRlQ2xpZW50YCxcbiAqIG1hdGNoaW5nIGBWZWxvY2lvdXNXZWJzb2NrZXRDbGllbnRgIC8gc25hcHJlcSdzIHdlYnNvY2tldCBjbGllbnQuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBWZWxvY2lvdXNTeW5jUmVhbHRpbWVXZWJzb2NrZXRDbGllbnRcbiAqIEBwcm9wZXJ0eSB7KG9wdGlvbnM/OiB7c2lnbmFsPzogQWJvcnRTaWduYWx9KSA9PiBQcm9taXNlPFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0gY29ubmVjdCAtIENvbm5lY3RzIHRoZSB3ZWJzb2NrZXQuXG4gKiBAcHJvcGVydHkgeyhjaGFubmVsVHlwZTogc3RyaW5nLCBvcHRpb25zPzoge3BhcmFtcz86IFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Piwgb25NZXNzYWdlPzogKGJvZHk6IFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+KSA9PiB2b2lkLCBvblJlc3VtZT86ICgpID0+IHZvaWQsIG9uQ2xvc2U/OiAocmVhc29uOiBzdHJpbmcpID0+IHZvaWR9KSA9PiBWZWxvY2lvdXNTeW5jUmVhbHRpbWVTdWJzY3JpcHRpb259IHN1YnNjcmliZUNoYW5uZWwgLSBPcGVucyBvbmUgY2hhbm5lbCBzdWJzY3JpcHRpb24uXG4gKiBAcHJvcGVydHkgeygpID0+IFByb21pc2U8dm9pZD59IGRpc2Nvbm5lY3RBbmRTdG9wUmVjb25uZWN0IC0gQ2xvc2VzIHRoZSBzb2NrZXQgYW5kIHN0b3BzIGF1dG8tcmVjb25uZWN0LlxuICovXG5cbi8qKlxuICogQ2hhbm5lbCBzdWJzY3JpcHRpb24gaGFuZGxlIHJldHVybmVkIGJ5IGBzdWJzY3JpYmVDaGFubmVsYC5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IFZlbG9jaW91c1N5bmNSZWFsdGltZVN1YnNjcmlwdGlvblxuICogQHByb3BlcnR5IHsoKSA9PiB2b2lkfSBjbG9zZSAtIENsb3NlcyB0aGUgc3Vic2NyaXB0aW9uLlxuICogQHByb3BlcnR5IHsoKSA9PiBib29sZWFufSBpc1JlYWR5IC0gV2hldGhlciB0aGUgc3Vic2NyaXB0aW9uIGlzIGFja25vd2xlZGdlZCBhbmQgcmVhZHkuXG4gKiBAcHJvcGVydHkgeyhwYXJhbXM/OiB7c2lnbmFsPzogQWJvcnRTaWduYWwsIHRpbWVvdXRNcz86IG51bWJlcn0pID0+IFByb21pc2U8dm9pZD59IHdhaXRGb3JSZWFkeSAtIFJlc29sdmVzIG9uY2UgdGhlIHNlcnZlciBhY2tub3dsZWRnZXMgdGhlIHN1YnNjcmlwdGlvbi5cbiAqL1xuXG4vKipcbiAqIE9uZSByZWFsdGltZSBjaGFubmVsIHN1YnNjcmlwdGlvbiBkZXNjcmlwdG9yLlxuICogQHR5cGVkZWYge29iamVjdH0gVmVsb2Npb3VzU3luY1JlYWx0aW1lQ2hhbm5lbERlc2NyaXB0b3JcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjaGFubmVsIC0gU2VydmVyIGNoYW5uZWwgbmFtZSB0byBzdWJzY3JpYmUuXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0gW3BhcmFtc10gLSBTdWJzY3JpYmUgcGFyYW1zIChydW50aW1lIHNjb3BlIHZhbHVlcykuIFRoZSBmcmFtZXdvcmsgaW5qZWN0cyBgYXV0aGVudGljYXRpb25Ub2tlbmAgYXV0b21hdGljYWxseS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcmVzb3VyY2VUeXBlXSAtIERlZmF1bHQgcmVzb3VyY2UvbW9kZWwgbmFtZSBmb3IgcHVzaGVkIGNoYW5nZXMgdGhhdCBkbyBub3QgY2FycnkgdGhlaXIgb3duIHJlc291cmNlVHlwZS5cbiAqL1xuXG4vKipcbiAqIFJlYWx0aW1lIHB1c2ggY29uZmlndXJhdGlvbiBmb3IgdGhlIHN5bmMgY2xpZW50LiBPbmx5IHRoZSBnZW51aW5lbHlcbiAqIGFwcC1vd25lZCBjYWxsYmFjayBsaXZlcyBoZXJlOiBob3cgdG8gYnVpbGQgdGhlIHdlYnNvY2tldCBjbGllbnQuXG4gKiBFdmVyeXRoaW5nIGVsc2UgLSBkZXJpdmluZyB0aGUgZnJhbWV3b3JrIHN5bmMgY2hhbm5lbCBzdWJzY3JpcHRpb25zIGZyb21cbiAqIHRoZSBkZWNsYXJlZCBwdWxsIHNjb3Blcywgc3Vic2NyaWJpbmcsIGFwcGx5aW5nIHB1c2hlcyB0aHJvdWdoIHRoZSBkZXJpdmVkXG4gKiByZXNvdXJjZSBhcHBsaWVyLCBlY2hvIHN1cHByZXNzaW9uLCBhbmQgcHVsbC1vbi1yZWNvbm5lY3QgLSBpcyBkZXJpdmVkLlxuICogQHR5cGVkZWYge29iamVjdH0gVmVsb2Npb3VzU3luY0NsaWVudFJlYWx0aW1lQ29uZmlndXJhdGlvblxuICogQHByb3BlcnR5IHsoKSA9PiBWZWxvY2lvdXNTeW5jUmVhbHRpbWVXZWJzb2NrZXRDbGllbnQgfCBQcm9taXNlPFZlbG9jaW91c1N5bmNSZWFsdGltZVdlYnNvY2tldENsaWVudD59IGNyZWF0ZUNsaWVudCAtIEJ1aWxkcyB0aGUgKHVuY29ubmVjdGVkKSB3ZWJzb2NrZXQgY2xpZW50OyB0aGUgZnJhbWV3b3JrIG93bnMgY29ubmVjdC9kaXNjb25uZWN0LlxuICogQHByb3BlcnR5IHsoY29udGV4dDogUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4pID0+IEFycmF5PFZlbG9jaW91c1N5bmNSZWFsdGltZUNoYW5uZWxEZXNjcmlwdG9yPiB8IFByb21pc2U8QXJyYXk8VmVsb2Npb3VzU3luY1JlYWx0aW1lQ2hhbm5lbERlc2NyaXB0b3I+Pn0gW2NoYW5uZWxzXSAtIERlcHJlY2F0ZWQgbGVnYWN5IGVzY2FwZSBoYXRjaDogcmVzb2x2ZXMgZXh0cmEgYXBwLWNoYW5uZWwgZGVzY3JpcHRvcnMgZnJvbSB0aGUgYHN1YnNjcmliZVJlYWx0aW1lKGNvbnRleHQpYCBjb250ZXh0LiBEZWNsYXJlZCBwdWxsIHNjb3BlcyBzdWJzY3JpYmUgdGhlIGZyYW1ld29yayBzeW5jIGNoYW5uZWwgYXV0b21hdGljYWxseS5cbiAqIEBwcm9wZXJ0eSB7KCkgPT4gc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+fSBbbG9jYWxPcmlnaW5dIC0gUmVzb2x2ZXMgdGhpcyBkZXZpY2UncyBlY2hvIG9yaWdpbjsgcHVzaGVkIG1lc3NhZ2VzIHdpdGggYSBtYXRjaGluZyBgZWNob09yaWdpbmAgYXJlIGRyb3BwZWQuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtwdWxsT25SZWNvbm5lY3RdIC0gRmlyZSBhIGNvYWxlc2NlZCBgcHVsbCgpYCB3aGVuIHN1YnNjcmlwdGlvbnMgYmVjb21lIHJlYWR5IG9yIHJlc3VtZSBhZnRlciBhIGRyb3AsIGNsb3Npbmcgb2ZmbGluZSBnYXBzLiBEZWZhdWx0cyB0byB0cnVlLlxuICovXG5cbi8qKlxuICogQ2xpZW50LXNpZGUgc3luYyBjb25maWd1cmF0aW9uIGNvbnN1bWVkIGJ5IGBTeW5jQ2xpZW50LmZyb21Db25maWd1cmF0aW9uKC4uLilgLlxuICogVGhlIGZyYW1ld29yayBvd25zIHRoZSBgJHttb3VudFBhdGh9L2NoYW5nZXNgIGFuZCBgJHttb3VudFBhdGh9L3JlcGxheWBcbiAqIFBPU1RlcnMgb3ZlciB0aGUgZ2l2ZW4gdHJhbnNwb3J0LlxuICogQHR5cGVkZWYge29iamVjdH0gVmVsb2Npb3VzU3luY0NsaWVudENvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7KCkgPT4gc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+fSBhdXRoZW50aWNhdGlvblRva2VuIC0gUmVzb2x2ZXMgdGhlIGF1dGggdG9rZW4gc2VudCB3aXRoIHN5bmMgcmVxdWVzdHMuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2JhdGNoU2l6ZV0gLSBNYXggc3luY3MgcGVyIHJlcXVlc3QuXG4gKiBAcHJvcGVydHkgeygpID0+IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+fSBbaXNPbmxpbmVdIC0gQ29ubmVjdGl2aXR5IGdhdGUgZm9yIHB1bGxzIGFuZCByZXBsYXlzLiBEZWZhdWx0cyB0byBhbHdheXMgb25saW5lLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFttb3VudFBhdGhdIC0gTW91bnQgcGF0aCB0aGUgc2VydmVyIHNlcnZlcyB0aGUgc3luYyBlbmRwb2ludHMgdW5kZXIgKG1hdGNoIHRoZSBzZXJ2ZXIncyBgc3luYy5hcGkubW91bnRQYXRoYCkuIERlZmF1bHRzIHRvIFwiL3ZlbG9jaW91cy9zeW5jXCI7IG5vcm1hbGl6YXRpb24gc3RyaXBzIHRyYWlsaW5nIHNsYXNoZXMgYW5kIGFsd2F5cyBmaWxscyBpbiB0aGUgZGVmYXVsdC5cbiAqIEBwcm9wZXJ0eSB7KGVycm9yOiBFcnJvcikgPT4gdm9pZH0gW29uRXJyb3JdIC0gUmVwb3J0cyBiYWNrZ3JvdW5kIHJlcGxheS9wdWxsIGZhaWx1cmVzLiBEZWZhdWx0cyB0byByZXRocm93aW5nLlxuICogQHByb3BlcnR5IHtWZWxvY2lvdXNTeW5jQ2xpZW50UmVhbHRpbWVDb25maWd1cmF0aW9ufSBbcmVhbHRpbWVdIC0gUmVhbHRpbWUgcHVzaCBjb25maWd1cmF0aW9uIGNvbnN1bWVkIGJ5IGBzdWJzY3JpYmVSZWFsdGltZSguLi4pYC5cbiAqIEBwcm9wZXJ0eSB7VmVsb2Npb3VzU3luY0NsaWVudFRyYW5zcG9ydH0gdHJhbnNwb3J0IC0gVHJhbnNwb3J0IHBvc3RpbmcgdG8gdGhlIGZyYW1ld29yayBzeW5jIGVuZHBvaW50cyAoZS5nLiB0aGUgZnJvbnRlbmQtbW9kZWwgd2Vic29ja2V0IGNsaWVudCkuXG4gKiBAcHJvcGVydHkge1ZlbG9jaW91c1N5bmNSZWFsdGltZVdlYnNvY2tldENsaWVudH0gW3dlYnNvY2tldENsaWVudF0gLSBTaGFyZWQgYXBwLWxpZmV0aW1lIHdlYnNvY2tldCBjbGllbnQgKHRoZSBsb3ctbGV2ZWwgZm9ybSkgdGhhdCBhbGwgc3luYyB0cmFmZmljIHJpZGVzLiBQcm92aWRlIHRoZSBzYW1lIGluc3RhbmNlIHRoZSBmcm9udGVuZC1tb2RlbCB0cmFuc3BvcnQgdXNlcyBzbyBvbmUgY29ubmVjdGlvbiBjYXJyaWVzIGV2ZXJ5dGhpbmcuIFdoZW4gc2V0LCB0aGUgcmVhbHRpbWUgYnJpZGdlIHN1YnNjcmliZXMgY2hhbm5lbHMgb24gaXQgYW5kIG5ldmVyIG93bnMgaXRzIGxpZmVjeWNsZTogdW5zdWJzY3JpYmluZyBjbG9zZXMgb25seSBjaGFubmVsIHN1YnNjcmlwdGlvbnMsIGxlYXZpbmcgdGhlIHNvY2tldCBjb25uZWN0ZWQuXG4gKiBAcHJvcGVydHkge3N0cmluZyB8ICgoKSA9PiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKX0gW3dlYnNvY2tldFVybF0gLSBTaGFyZWQgYXBwLWxpZmV0aW1lIHdlYnNvY2tldCBVUkwuIFdoZW4gc2V0IChhbmQgbm8gYHdlYnNvY2tldENsaWVudGAgaXMgZ2l2ZW4pLCB0aGUgZnJhbWV3b3JrIGJ1aWxkcyBhbmQgb3ducyBvbmUgcmVjb25uZWN0aW5nIGBWZWxvY2lvdXNXZWJzb2NrZXRDbGllbnRgIGZvciBhbGwgc3luYyB0cmFmZmljLCBjb25uZWN0ZWQgb24gZmlyc3QgdXNlLlxuICovXG5cbi8qKlxuICogVmVsb2Npb3VzIHN5bmMgY29uZmlndXJhdGlvbi5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IFZlbG9jaW91c1N5bmNDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge1ZlbG9jaW91c1N5bmNBcGlDb25maWd1cmF0aW9ufSBbYXBpXSAtIEF1dG8tbW91bnRzIHRoZSBWZWxvY2lvdXMgc3luYyBjaGFuZ2VzL3JlcGxheSBlbmRwb2ludHMgZm9yIHRoaXMgcmVzb3VyY2UgY2xhc3MuXG4gKiBAcHJvcGVydHkge1ZlbG9jaW91c1N5bmNDbGllbnRDb25maWd1cmF0aW9ufSBbY2xpZW50XSAtIENsaWVudC1zaWRlIHN5bmMgY29uZmlndXJhdGlvbiBjb25zdW1lZCBieSBgU3luY0NsaWVudC5mcm9tQ29uZmlndXJhdGlvbiguLi4pYC5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi9zeW5jL2RldmljZS1pZGVudGl0eS5qc1wiKS5TeW5jSnNvbldlYktleSB8IG51bGx9IFtkZXZpY2VDZXJ0aWZpY2F0ZUJhY2tlbmRQdWJsaWNLZXldIC0gUHVibGljIGJhY2tlbmQga2V5IHVzZWQgdG8gdmVyaWZ5IG9mZmxpbmUgZGV2aWNlIGNlcnRpZmljYXRlcyBmb3Igc3luYyByZXBsYXkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2NoYW5nZUZlZWRSZXRlbnRpb25TaXplXSAtIE51bWJlciBvZiBhY2NlcHRlZCBzZXJ2ZXIgY2hhbmdlcyByZXRhaW5lZCBiZWZvcmUgY2xpZW50cyBtdXN0IHJlZnJlc2ggZnJvbSBzbmFwc2hvdC5cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8aW1wb3J0KFwiLi9zeW5jL29mZmxpbmUtZ3JhbnQuanNcIikuT2ZmbGluZUdyYW50U2lnbmluZ0tleT59IG9mZmxpbmVHcmFudFNpZ25pbmdLZXlzIC0gU2lnbmluZyBrZXlzIHVzZWQgdG8gaXNzdWUgYW5kIHZlcmlmeSBvZmZsaW5lIGdyYW50cy4gU2VjcmV0cyBtdXN0IG5ldmVyIGJlIGV4cG9zZWQgdG8gY2xpZW50cy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbb2ZmbGluZUdyYW50VHRsTXNdIC0gRGVmYXVsdCBvZmZsaW5lIGdyYW50IFRUTCBpbiBtaWxsaXNlY29uZHMuIERlZmF1bHRzIHRvIDI0IGhvdXJzLlxuICovXG5cbi8qKlxuICogRnJvbnRlbmQtc2FmZSBub3JtYWxpemVkIHN5bmMgbWV0YWRhdGEuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBOb3JtYWxpemVkRnJvbnRlbmRNb2RlbFJlc291cmNlU3luY0NvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7XCJvcHRpbWlzdGljVmVyc2lvblwiIHwgXCJzZXJ2ZXJXaW5zXCIgfCBcImxhc3RXcml0ZXJXaW5zXCIgfCBcImZpZWxkVGhyZWVXYXlcIiB8IFwiYXBwZW5kT25seVwifSBjb25mbGljdFN0cmF0ZWd5IC0gTm9ybWFsaXplZCByZXBsYXkgY29uZmxpY3Qgc3RyYXRlZ3kuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGVuYWJsZWQgLSBXaGV0aGVyIHRoZSByZXNvdXJjZSBpcyBzeW5jLWVuYWJsZWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBvcGVyYXRpb25zIC0gU29ydGVkLCBkdXBsaWNhdGUtZnJlZSBzeW5jIG9wZXJhdGlvbiBuYW1lcy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgbnVsbH0gcG9saWN5VmVyc2lvbiAtIEFwcC1jb250cm9sbGVkIHBvbGljeSB2ZXJzaW9uLCBvciBudWxsLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBvbGljeUhhc2ggLSBEZXRlcm1pbmlzdGljIHNoYTI1NiBoYXNoIG9mIHNhZmUgcG9saWN5IGlucHV0cy5cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgRnJvbnRlbmRNb2RlbFN5bmNKc29uVmFsdWU+fSBbbWV0YWRhdGFdIC0gU2FmZSBmcm9udGVuZC12aXNpYmxlIG1ldGFkYXRhLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09taXQ8RnJvbnRlbmRNb2RlbFJlc291cmNlQ29uZmlndXJhdGlvbiwgXCJhYmlsaXRpZXNcIiB8IFwiYnVpbHRJbkNvbGxlY3Rpb25Db21tYW5kc1wiIHwgXCJidWlsdEluTWVtYmVyQ29tbWFuZHNcIiB8IFwiY29sbGVjdGlvbkNvbW1hbmRzXCIgfCBcImNvbW1hbmRzXCIgfCBcIm1lbWJlckNvbW1hbmRzXCIgfCBcInN5bmNcIj4gJiB7XG4gKiAgIGFiaWxpdGllczogRnJvbnRlbmRNb2RlbFJlc291cmNlQWJpbGl0aWVzQ29uZmlndXJhdGlvblxuICogICBidWlsdEluQ29sbGVjdGlvbkNvbW1hbmRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4gKiAgIGJ1aWx0SW5NZW1iZXJDb21tYW5kczogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICogICBjb2xsZWN0aW9uQ29tbWFuZHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbiAqICAgY29tbWFuZE1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCB7YXJnczogQXJyYXk8e25hbWU6IHN0cmluZywgdHlwZTogc3RyaW5nfT4sIHJldHVyblR5cGU6IHN0cmluZyB8IG51bGx9PlxuICogICBtZW1iZXJDb21tYW5kczogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICogICBzeW5jPzogTm9ybWFsaXplZEZyb250ZW5kTW9kZWxSZXNvdXJjZVN5bmNDb25maWd1cmF0aW9uXG4gKiB9fSBOb3JtYWxpemVkRnJvbnRlbmRNb2RlbFJlc291cmNlQ29uZmlndXJhdGlvblxuICovXG5cbi8qKlxuICogVW5ib3VuZCByZXNvdXJjZSBjbGFzcyB1c2VkIGJ5IG1vZGVsLWFnbm9zdGljIHJlZ2lzdHJpZXMuXG4gKiBAdHlwZWRlZiB7T21pdDx0eXBlb2YgaW1wb3J0KFwiLi9mcm9udGVuZC1tb2RlbC1yZXNvdXJjZS9iYXNlLXJlc291cmNlLmpzXCIpLmRlZmF1bHQsIFwibW9kZWxDbGFzc1wiPiAmIHttb2RlbENsYXNzOiAoKSA9PiB0eXBlb2YgaW1wb3J0KFwiLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdCwgbmV3IChhcmdzOiBuZXZlcik6IGltcG9ydChcIi4vZnJvbnRlbmQtbW9kZWwtcmVzb3VyY2UvYmFzZS1yZXNvdXJjZS5qc1wiKS5kZWZhdWx0PHR5cGVvZiBpbXBvcnQoXCIuL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0Pn19IFVuYm91bmRGcm9udGVuZE1vZGVsUmVzb3VyY2VDbGFzc1R5cGVcbiAqL1xuXG4vKipcbiAqIFJlc291cmNlIGNsYXNzIGJvdW5kIHRvIGEgc3BlY2lmaWMgbW9kZWwgY2xhc3MuXG4gKiBAdGVtcGxhdGUge2ltcG9ydChcIi4vZnJvbnRlbmQtbW9kZWwtcmVzb3VyY2UvYmFzZS1yZXNvdXJjZS5qc1wiKS5Gcm9udGVuZE1vZGVsUmVzb3VyY2VNb2RlbENsYXNzfSBUTW9kZWxDbGFzc1xuICogQHRlbXBsYXRlIHt0eXBlb2YgaW1wb3J0KFwiLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gVERhdGFiYXNlTW9kZWxDbGFzc1xuICogQHR5cGVkZWYge09taXQ8dHlwZW9mIGltcG9ydChcIi4vZnJvbnRlbmQtbW9kZWwtcmVzb3VyY2UvYmFzZS1yZXNvdXJjZS5qc1wiKS5kZWZhdWx0LCBcIk1vZGVsQ2xhc3NcIiB8IFwibW9kZWxDbGFzc1wiPiAmIHtNb2RlbENsYXNzOiBUTW9kZWxDbGFzcyB8IHVuZGVmaW5lZCwgbW9kZWxDbGFzczogKCkgPT4gVE1vZGVsQ2xhc3MsIG5ldyAoYXJnczogaW1wb3J0KFwiLi9mcm9udGVuZC1tb2RlbC1yZXNvdXJjZS9iYXNlLXJlc291cmNlLmpzXCIpLkZyb250ZW5kTW9kZWxSZXNvdXJjZUFiaWxpdHlBcmdzPFRNb2RlbENsYXNzPiB8IGltcG9ydChcIi4vZnJvbnRlbmQtbW9kZWwtcmVzb3VyY2UvYmFzZS1yZXNvdXJjZS5qc1wiKS5Gcm9udGVuZE1vZGVsUmVzb3VyY2VDb250cm9sbGVyQXJnczxURGF0YWJhc2VNb2RlbENsYXNzPik6IGltcG9ydChcIi4vZnJvbnRlbmQtbW9kZWwtcmVzb3VyY2UvYmFzZS1yZXNvdXJjZS5qc1wiKS5kZWZhdWx0PFRNb2RlbENsYXNzLCBURGF0YWJhc2VNb2RlbENsYXNzPn19IEJvdW5kRnJvbnRlbmRNb2RlbFJlc291cmNlQ2xhc3NUeXBlXG4gKi9cblxuLyoqXG4gKiBAdGVtcGxhdGUge2ltcG9ydChcIi4vZnJvbnRlbmQtbW9kZWwtcmVzb3VyY2UvYmFzZS1yZXNvdXJjZS5qc1wiKS5Gcm9udGVuZE1vZGVsUmVzb3VyY2VNb2RlbENsYXNzfSBbVE1vZGVsQ2xhc3M9bmV2ZXJdXG4gKiBAdGVtcGxhdGUge3R5cGVvZiBpbXBvcnQoXCIuL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSBbVERhdGFiYXNlTW9kZWxDbGFzcz1FeHRyYWN0PFRNb2RlbENsYXNzLCB0eXBlb2YgaW1wb3J0KFwiLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdD5dXG4gKiBAdHlwZWRlZiB7W1RNb2RlbENsYXNzXSBleHRlbmRzIFtuZXZlcl0gPyBVbmJvdW5kRnJvbnRlbmRNb2RlbFJlc291cmNlQ2xhc3NUeXBlIDogQm91bmRGcm9udGVuZE1vZGVsUmVzb3VyY2VDbGFzc1R5cGU8VE1vZGVsQ2xhc3MsIFREYXRhYmFzZU1vZGVsQ2xhc3M+fSBGcm9udGVuZE1vZGVsUmVzb3VyY2VDbGFzc1R5cGVcbiAqL1xuXG4vKipcbiAqIEB0ZW1wbGF0ZSB7aW1wb3J0KFwiLi9mcm9udGVuZC1tb2RlbC1yZXNvdXJjZS9iYXNlLXJlc291cmNlLmpzXCIpLkZyb250ZW5kTW9kZWxSZXNvdXJjZU1vZGVsQ2xhc3N9IFtUTW9kZWxDbGFzcz1uZXZlcl1cbiAqIEB0eXBlZGVmIHtGcm9udGVuZE1vZGVsUmVzb3VyY2VDbGFzc1R5cGU8VE1vZGVsQ2xhc3M+fSBGcm9udGVuZE1vZGVsUmVzb3VyY2VEZWZpbml0aW9uXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBGcm9udGVuZE1vZGVsUmVzb3VyY2VBYmlsaXRpZXNDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2luZGV4XSAtIEFiaWxpdHkgYWN0aW9uIGZvciBmcm9udGVuZCBpbmRleC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZmluZF0gLSBBYmlsaXR5IGFjdGlvbiBmb3IgZnJvbnRlbmQgZmluZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbY3JlYXRlXSAtIEFiaWxpdHkgYWN0aW9uIGZvciBmcm9udGVuZCBjcmVhdGUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3VwZGF0ZV0gLSBBYmlsaXR5IGFjdGlvbiBmb3IgZnJvbnRlbmQgdXBkYXRlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtkZXN0cm95XSAtIEFiaWxpdHkgYWN0aW9uIGZvciBmcm9udGVuZCBkZXN0cm95LlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gRnJvbnRlbmRNb2RlbFJlc291cmNlU2VydmVyQ29uZmlndXJhdGlvblxuICogQHByb3BlcnR5IHsoYXJnczoge2FjdGlvbjogXCJpbmRleFwiIHwgXCJmaW5kXCIgfCBcImNyZWF0ZVwiIHwgXCJ1cGRhdGVcIiB8IFwiZGVzdHJveVwiIHwgXCJhdHRhY2hcIiB8IFwiYXR0YWNobWVudExpc3RcIiB8IFwiZG93bmxvYWRcIiB8IFwidXJsXCIsIGNvbnRyb2xsZXI6IGltcG9ydChcIi4vY29udHJvbGxlci5qc1wiKS5kZWZhdWx0LCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+PiwgbW9kZWxDbGFzczogdHlwZW9mIGltcG9ydChcIi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9KSA9PiAoYm9vbGVhbiB8IHZvaWQgfCBQcm9taXNlPGJvb2xlYW4gfCB2b2lkPil9IFtiZWZvcmVBY3Rpb25dIC0gT3B0aW9uYWwgY2FsbGJhY2sgcnVuIGJlZm9yZSBidWlsdC1pbiBmcm9udGVuZCBhY3Rpb25zLlxuICogQHByb3BlcnR5IHsoYXJnczoge2FjdGlvbjogXCJpbmRleFwiLCBjb250cm9sbGVyOiBpbXBvcnQoXCIuL2NvbnRyb2xsZXIuanNcIikuZGVmYXVsdCwgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj4sIG1vZGVsQ2xhc3M6IHR5cGVvZiBpbXBvcnQoXCIuL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSkgPT4gUHJvbWlzZTxpbXBvcnQoXCIuL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0W10+fSBbcmVjb3Jkc10gLSBSZWNvcmRzIGxvYWRlciBmb3IgZnJvbnRlbmRJbmRleC5cbiAqIEBwcm9wZXJ0eSB7KGFyZ3M6IHthY3Rpb246IFwiaW5kZXhcIiB8IFwiZmluZFwiIHwgXCJjcmVhdGVcIiB8IFwidXBkYXRlXCIsIGNvbnRyb2xsZXI6IGltcG9ydChcIi4vY29udHJvbGxlci5qc1wiKS5kZWZhdWx0LCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+PiwgbW9kZWxDbGFzczogdHlwZW9mIGltcG9ydChcIi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQsIG1vZGVsOiBpbXBvcnQoXCIuL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSkgPT4gUmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+IHwgUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj4+fSBbc2VyaWFsaXplXSAtIFJlY29yZCBzZXJpYWxpemVyIGZvciByZXNwb25zZSBwYXlsb2Fkcy5cbiAqIEBwcm9wZXJ0eSB7KGFyZ3M6IHthY3Rpb246IFwiZmluZFwiIHwgXCJ1cGRhdGVcIiB8IFwiZGVzdHJveVwiIHwgXCJhdHRhY2hcIiB8IFwiYXR0YWNobWVudExpc3RcIiB8IFwiZG93bmxvYWRcIiB8IFwidXJsXCIsIGNvbnRyb2xsZXI6IGltcG9ydChcIi4vY29udHJvbGxlci5qc1wiKS5kZWZhdWx0LCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+PiwgbW9kZWxDbGFzczogdHlwZW9mIGltcG9ydChcIi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQsIGlkOiBzdHJpbmcgfCBudW1iZXJ9KSA9PiBQcm9taXNlPGltcG9ydChcIi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQgfCBudWxsPn0gW2ZpbmRdIC0gUmVjb3JkIGxvYWRlciBmb3IgZmluZC91cGRhdGUvZGVzdHJveS9hdHRhY2gvZG93bmxvYWQvdXJsIGFjdGlvbnMuXG4gKiBAcHJvcGVydHkgeyhhcmdzOiB7YWN0aW9uOiBcImNyZWF0ZVwiLCBjb250cm9sbGVyOiBpbXBvcnQoXCIuL2NvbnRyb2xsZXIuanNcIikuZGVmYXVsdCwgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj4sIG1vZGVsQ2xhc3M6IHR5cGVvZiBpbXBvcnQoXCIuL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0LCBhdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj59KSA9PiBQcm9taXNlPGltcG9ydChcIi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQ+fSBbY3JlYXRlXSAtIEN1c3RvbSBjcmVhdGUgY2FsbGJhY2suXG4gKiBAcHJvcGVydHkgeyhhcmdzOiB7YWN0aW9uOiBcInVwZGF0ZVwiLCBjb250cm9sbGVyOiBpbXBvcnQoXCIuL2NvbnRyb2xsZXIuanNcIikuZGVmYXVsdCwgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj4sIG1vZGVsQ2xhc3M6IHR5cGVvZiBpbXBvcnQoXCIuL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0LCBtb2RlbDogaW1wb3J0KFwiLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdCwgYXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fSkgPT4gUHJvbWlzZTxpbXBvcnQoXCIuL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0IHwgdm9pZD59IFt1cGRhdGVdIC0gQ3VzdG9tIHVwZGF0ZSBjYWxsYmFjay5cbiAqIEBwcm9wZXJ0eSB7KGFyZ3M6IHthY3Rpb246IFwiZGVzdHJveVwiLCBjb250cm9sbGVyOiBpbXBvcnQoXCIuL2NvbnRyb2xsZXIuanNcIikuZGVmYXVsdCwgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj4sIG1vZGVsQ2xhc3M6IHR5cGVvZiBpbXBvcnQoXCIuL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0LCBtb2RlbDogaW1wb3J0KFwiLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0pID0+IFByb21pc2U8dm9pZD59IFtkZXN0cm95XSAtIEN1c3RvbSBkZXN0cm95IGNhbGxiYWNrLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gQmFja2VuZFByb2plY3RDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcGF0aCAtIFBhdGggdG8gdGhlIGJhY2tlbmQgcHJvamVjdC4gTWF5IGJlIGFuIGFwcCByb290IG9yIGEgY29udHJpYnV0aW5nIHBhY2thZ2Ugcm9vdCAocGFja2FnZSBlbnRyaWVzIGFyZSBhcHBlbmRlZCBpbnRlcm5hbGx5IGZyb20gYHBhY2thZ2VzYCkuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2Zyb250ZW5kTW9kZWxzT3V0cHV0UGF0aF0gLSBPcHRpb25hbCBvdXRwdXQgcHJvamVjdCBwYXRoIHdoZXJlIGBzcmMvZnJvbnRlbmQtbW9kZWxzYCBzaG91bGQgYmUgZ2VuZXJhdGVkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtyZXNvdXJjZXNQYXRoXSAtIE9wdGlvbmFsIG92ZXJyaWRlIGZvciB0aGUgcmVzb3VyY2VzIGRpcmVjdG9yeSB0byBhdXRvLWRpc2NvdmVyOyBkZWZhdWx0cyB0byBgPHBhdGg+L3NyYy9yZXNvdXJjZXNgLiBTZXQgaW50ZXJuYWxseSBmb3IgcGFja2FnZSBlbnRyaWVzLlxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBGcm9udGVuZE1vZGVsUmVzb3VyY2VEZWZpbml0aW9uPn0gW2Zyb250ZW5kTW9kZWxzXSAtIEF1dG8tZGlzY292ZXJlZCBmcm9udGVuZCBtb2RlbCBkZWZpbml0aW9ucyBrZXllZCBieSBtb2RlbCBjbGFzcyBuYW1lLiBTZXQgaW50ZXJuYWxseSBieSB0aGUgZW52aXJvbm1lbnQgaGFuZGxlciDigJQgZG8gbm90IHNldCBtYW51YWxseS5cbiAqIEBwcm9wZXJ0eSB7QWJpbGl0eVJlc291cmNlQ2xhc3NUeXBlW119IFthYmlsaXR5UmVzb3VyY2VzXSAtIEF1dG8tZGlzY292ZXJlZCBhYmlsaXR5IHJlc291cmNlIGNsYXNzZXMgKGZyb250ZW5kLW1vZGVsIGFuZCBhdXRob3JpemF0aW9uKSBmcm9tIHRoaXMgcHJvamVjdCdzIHJlc291cmNlcyBkaXJlY3RvcnkuIFNldCBpbnRlcm5hbGx5IGJ5IHRoZSBlbnZpcm9ubWVudCBoYW5kbGVyIOKAlCBkbyBub3Qgc2V0IG1hbnVhbGx5LlxuICovXG5cbi8qKlxuICogQSBkZXNjcmlwdG9yIGZvciBhbiBleHRlcm5hbCBWZWxvY2lvdXMgcGFja2FnZSAoZW5naW5lKSB0aGF0IGNvbnRyaWJ1dGVzIG1vZGVscyxcbiAqIHJlc291cmNlcyBhbmQgbWlncmF0aW9ucy4gQSBwYWNrYWdlIHVzdWFsbHkgZXhwb3J0cyBgbmV3IFZlbG9jaW91c1BhY2thZ2Uoe25hbWUsIHVybDogaW1wb3J0Lm1ldGEudXJsfSlgLlxuICogQHR5cGVkZWYge29iamVjdH0gVmVsb2Npb3VzUGFja2FnZURlc2NyaXB0b3JcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBuYW1lIC0gVGhlIHBhY2thZ2UgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdXJsXSAtIFRoZSBkZXNjcmlwdG9yIG1vZHVsZSdzIGBpbXBvcnQubWV0YS51cmxgOyB0aGUgcGFja2FnZSByb290IGlzIGRlcml2ZWQgZnJvbSBpdCB3aGVuIGBwYXRoYCBpcyBvbWl0dGVkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtwYXRoXSAtIFRoZSBwYWNrYWdlIHJvb3QgZGlyZWN0b3J5ICh0aGUgb25lIGNvbnRhaW5pbmcgYHNyY2ApLiBEZXJpdmVkIGZyb20gYHVybGAgd2hlbiBvbWl0dGVkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFttb2RlbHNQYXRoXSAtIE92ZXJyaWRlIGZvciB0aGUgcGFja2FnZSdzIG1vZGVscyBkaXJlY3RvcnkgKGRlZmF1bHQgYDxwYXRoPi9zcmMvbW9kZWxzYCkuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3Jlc291cmNlc1BhdGhdIC0gT3ZlcnJpZGUgZm9yIHRoZSBwYWNrYWdlJ3MgZnJvbnRlbmQtbW9kZWwgcmVzb3VyY2VzIGRpcmVjdG9yeSAoZGVmYXVsdCBgPHBhdGg+L3NyYy9yZXNvdXJjZXNgKS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbWlncmF0aW9uc1BhdGhdIC0gT3ZlcnJpZGUgZm9yIHRoZSBwYWNrYWdlJ3MgbWlncmF0aW9ucyBkaXJlY3RvcnkgKGRlZmF1bHQgYDxwYXRoPi9zcmMvZGF0YWJhc2UvbWlncmF0aW9uc2ApLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydChcIi4vcGFja2FnZXMvdmVsb2Npb3VzLXBhY2thZ2UuanNcIikuZGVmYXVsdCB8IFZlbG9jaW91c1BhY2thZ2VEZXNjcmlwdG9yfSBWZWxvY2lvdXNQYWNrYWdlQ29uZmlndXJhdGlvblxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gUm91dGVSZXNvbHZlckhvb2tBcmdzXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSBjb25maWd1cmF0aW9uIC0gQ29uZmlndXJhdGlvbiBpbnN0YW5jZS5cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fSBwYXJhbXMgLSBNdXRhYmxlIHJlcXVlc3QgcGFyYW1zIG9iamVjdC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjdXJyZW50UGF0aCAtIFJlcXVlc3QgcGF0aCB3aXRob3V0IHF1ZXJ5LlxuICogQHByb3BlcnR5IHtib29sZWFufSBbaGFzTWF0Y2hpbmdDdXN0b21Sb3V0ZV0gLSBUcnVlIHdoZW4gbWF0Y2hpbmcgYSBjb25maWd1cmVkIGN1c3RvbSByb3V0ZS5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvcmVxdWVzdC5qc1wiKS5kZWZhdWx0IHwgaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvd2Vic29ja2V0LXJlcXVlc3QuanNcIikuZGVmYXVsdH0gcmVxdWVzdCAtIFJlcXVlc3Qgb2JqZWN0LlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC9yZXNwb25zZS5qc1wiKS5kZWZhdWx0fSByZXNwb25zZSAtIFJlc3BvbnNlIG9iamVjdC5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi9yb3V0ZXMvcmVzb2x2ZXIuanNcIikuZGVmYXVsdH0gcmVzb2x2ZXIgLSBSZXNvbHZlciBpbnN0YW5jZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFJvdXRlUmVzb2x2ZXJIb29rUmVzdWx0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gYWN0aW9uIC0gRGFzaGVyaXplZCBhY3Rpb24gbmFtZSAoZm9yIGV4YW1wbGUgYGZyb250ZW5kLWluZGV4YCkuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY29udHJvbGxlciAtIENvbnRyb2xsZXIgcGF0aCAoZm9yIGV4YW1wbGUgYGFjY291bnRzYCkuXG4gKiBAcHJvcGVydHkge3R5cGVvZiBpbXBvcnQoXCIuL2NvbnRyb2xsZXIuanNcIikuZGVmYXVsdH0gW2NvbnRyb2xsZXJDbGFzc10gLSBPcHRpb25hbCBjb250cm9sbGVyIGNsYXNzIG92ZXJyaWRlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtjb250cm9sbGVyUGF0aF0gLSBPcHRpb25hbCBhYnNvbHV0ZS9yZWxhdGl2ZSBjb250cm9sbGVyIGZpbGUgcGF0aCBvdmVycmlkZS5cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fSBbcGFyYW1zXSAtIEV4dHJhIHBhcmFtcyB0byBtZXJnZSBmb3IgY29udHJvbGxlci9hY3Rpb24uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtza2lwQWJpbGl0eVJlc29sdXRpb25dIC0gV2hldGhlciB0byBydW4gdGhlIGNvbnRyb2xsZXIgYWN0aW9uIHdpdGhvdXQgcmVzb2x2aW5nIHJlcXVlc3QgYWJpbGl0eS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3NraXBDb250cm9sbGVyQ29ubmVjdGlvbnNdIC0gV2hldGhlciB0byBydW4gdGhlIGNvbnRyb2xsZXIgYWN0aW9uIHdpdGhvdXQgdGhlIGF1dG9tYXRpYyBkYXRhYmFzZSBjaGVja291dCB3cmFwcGVyLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbc2tpcFRlbmFudFJlc29sdXRpb25dIC0gV2hldGhlciB0byBydW4gdGhlIGNvbnRyb2xsZXIgYWN0aW9uIHdpdGhvdXQgcmVzb2x2aW5nIHJlcXVlc3QgdGVuYW50LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFt2aWV3UGF0aF0gLSBPcHRpb25hbCB2aWV3IHBhdGggb3ZlcnJpZGUgdXNlZCBieSBjb250cm9sbGVyIHJlbmRlciBsb29rdXBzLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgeyhhcmc6IFJvdXRlUmVzb2x2ZXJIb29rQXJncykgPT4gUm91dGVSZXNvbHZlckhvb2tSZXN1bHQgfCBudWxsIHwgUHJvbWlzZTxSb3V0ZVJlc29sdmVySG9va1Jlc3VsdCB8IG51bGw+fSBSb3V0ZVJlc29sdmVySG9va1R5cGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHt0eXBlb2YgaW1wb3J0KFwiLi9hdXRob3JpemF0aW9uL2Jhc2UtcmVzb3VyY2UuanNcIikuZGVmYXVsdH0gQWJpbGl0eVJlc291cmNlQ2xhc3NUeXBlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7KGFyZ3M6IHtjb25maWd1cmF0aW9uOiBpbXBvcnQoXCIuL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdCwgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj4sIHJlcXVlc3Q6IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3JlcXVlc3QuanNcIikuZGVmYXVsdCB8IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3dlYnNvY2tldC1yZXF1ZXN0LmpzXCIpLmRlZmF1bHQgfCB1bmRlZmluZWQsIHJlc3BvbnNlOiBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC9yZXNwb25zZS5qc1wiKS5kZWZhdWx0IHwgdW5kZWZpbmVkfSkgPT4gaW1wb3J0KFwiLi9hdXRob3JpemF0aW9uL2FiaWxpdHkuanNcIikuZGVmYXVsdCB8IHZvaWQgfCBQcm9taXNlPGltcG9ydChcIi4vYXV0aG9yaXphdGlvbi9hYmlsaXR5LmpzXCIpLmRlZmF1bHQgfCB2b2lkPn0gQWJpbGl0eVJlc29sdmVyVHlwZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgeyhhcmdzOiB7Y29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHQsIHBhcmFtczogUmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+LCByZXF1ZXN0OiBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC9yZXF1ZXN0LmpzXCIpLmRlZmF1bHQgfCBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC93ZWJzb2NrZXQtcmVxdWVzdC5qc1wiKS5kZWZhdWx0IHwgdW5kZWZpbmVkLCByZXNwb25zZTogaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvcmVzcG9uc2UuanNcIikuZGVmYXVsdCB8IHVuZGVmaW5lZCwgc3Vic2NyaXB0aW9uPzoge2NoYW5uZWw6IHN0cmluZywgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fX0pID0+IFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+IHwgdm9pZCB8IFByb21pc2U8UmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4gfCB2b2lkPn0gVGVuYW50UmVzb2x2ZXJUeXBlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7KGFyZ3M6IHtjb25maWd1cmF0aW9uOiBpbXBvcnQoXCIuL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdCwgZGF0YWJhc2VDb25maWd1cmF0aW9uOiBEYXRhYmFzZUNvbmZpZ3VyYXRpb25UeXBlLCBpZGVudGlmaWVyOiBzdHJpbmcsIHRlbmFudDogUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT59KSA9PiBEYXRhYmFzZUNvbmZpZ3VyYXRpb25UeXBlIHwgUGFydGlhbDxEYXRhYmFzZUNvbmZpZ3VyYXRpb25UeXBlPiB8IHZvaWR9IFRlbmFudERhdGFiYXNlUmVzb2x2ZXJUeXBlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBBcGlNYW5pZmVzdENvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcGF0aF0gLSBIVFRQIHBhdGggZm9yIHRoZSBidWlsdC1pbiBBUEkgbWFuaWZlc3QgZW5kcG9pbnQuIERlZmF1bHRzIHRvIGAvYXBpL21hbmlmZXN0YC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdG9rZW5dIC0gQmVhcmVyIHRva2VuIHJlcXVpcmVkIGluIHRoZSBgQXV0aG9yaXphdGlvbjogQmVhcmVyIDx0b2tlbj5gIGhlYWRlci4gV2hlbiBzZXQsIHJlcXVlc3RzIHdpdGhvdXQgYSBtYXRjaGluZyB0b2tlbiBhcmUgbm90IHJvdXRlZCAoNDA0KSwgc28gdGhlIGVuZHBvaW50IHN0YXlzIGhpZGRlbi5cbiAqL1xuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBNY3BDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3BhdGhdIC0gSFRUUCBwYXRoIGZvciB0aGUgYnVpbHQtaW4gTUNQIGVuZHBvaW50LiBEZWZhdWx0cyB0byBgL21jcGAuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3Rva2VuXSAtIEJlYXJlciB0b2tlbiByZXF1aXJlZCBpbiB0aGUgYEF1dGhvcml6YXRpb25gIGhlYWRlci4gV2hlbiBzZXQsIHJlcXVlc3RzIHdpdGhvdXQgYSBtYXRjaGluZyB0b2tlbiBhcmUgbm90IHJvdXRlZCAoNDA0KSwgc28gdGhlIGVuZHBvaW50IHN0YXlzIGhpZGRlbi5cbiAqL1xuXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gRGVidWdFbmRwb2ludENvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcGF0aF0gLSBIVFRQIHBhdGggZm9yIHRoZSBidWlsdC1pbiBkZWJ1ZyBlbmRwb2ludC4gRGVmYXVsdHMgdG8gYC92ZWxvY2lvdXMvZGVidWdgLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFt0b2tlbl0gLSBCZWFyZXIgdG9rZW4gcmVxdWlyZWQgaW4gdGhlIGBBdXRob3JpemF0aW9uOiBCZWFyZXIgPHRva2VuPmAgaGVhZGVyLiBXaGVuIHNldCwgcmVxdWVzdHMgd2l0aG91dCBhIG1hdGNoaW5nIHRva2VuIGFyZSBub3Qgcm91dGVkICg0MDQpLCBzbyB0aGUgZW5kcG9pbnQgc3RheXMgaGlkZGVuLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gVGVuYW50RGF0YWJhc2VQcm92aWRlclR5cGVcbiAqIEBwcm9wZXJ0eSB7KGFyZ3M6IHtjb25maWd1cmF0aW9uOiBpbXBvcnQoXCIuL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdCwgaWRlbnRpZmllcjogc3RyaW5nfSkgPT4gQXJyYXk8UmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+IHwgUHJvbWlzZTxBcnJheTxSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj4+fSBsaXN0VGVuYW50cyAtIExpc3RzIHRlbmFudHMgdGhhdCBzaG91bGQgYmUgY3JlYXRlZCwgY2hlY2tlZCwgb3IgbWlncmF0ZWQgZm9yIHRoaXMgZGF0YWJhc2UgaWRlbnRpZmllci5cbiAqIEBwcm9wZXJ0eSB7KGFyZ3M6IHtjb25maWd1cmF0aW9uOiBpbXBvcnQoXCIuL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdCwgaWRlbnRpZmllcjogc3RyaW5nfSkgPT4gUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4gfCB2b2lkIHwgUHJvbWlzZTxSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPiB8IHZvaWQ+fSBbcmVzb2x2ZUdlbmVyYXRpb25UZW5hbnRdIC0gUmVzb2x2ZXMgb25lIGV4cGxpY2l0IHRlbmFudCBkZXNjcmlwdG9yIGZvciBzY2hlbWEvYmFzZS1tb2RlbCBnZW5lcmF0aW9uIHdpdGhvdXQgZW51bWVyYXRpbmcgbGlmZWN5Y2xlIHRlbmFudHMuXG4gKiBAcHJvcGVydHkgeyhhcmdzOiB7Y29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHQsIGlkZW50aWZpZXI6IHN0cmluZ30pID0+IEFycmF5PFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+PiB8IFByb21pc2U8QXJyYXk8UmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+Pn0gW2xpc3RSZXN0cmljdFRlbmFudHNdIC0gTGlzdHMgZXhpc3RpbmcgdGVuYW50cyB0aGF0IHNob3VsZCBiZSBjaGVja2VkIGZvciBkZXBlbmRlbnQgcmVzdHJpY3QgZGVzdHJveXMuIERlZmF1bHRzIHRvIGxpc3RUZW5hbnRzLlxuICogQHByb3BlcnR5IHsoYXJnczoge2NvbmZpZ3VyYXRpb246IGltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0LCBkYXRhYmFzZUNvbmZpZ3VyYXRpb246IERhdGFiYXNlQ29uZmlndXJhdGlvblR5cGUsIGlkZW50aWZpZXI6IHN0cmluZywgdGVuYW50OiBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0pID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+fSBbY3JlYXRlRGF0YWJhc2VdIC0gQ3JlYXRlcyB0aGUgdGVuYW50IGRhdGFiYXNlL3NjaGVtYSBmb3Igb25lIHRlbmFudC5cbiAqIEBwcm9wZXJ0eSB7KGFyZ3M6IHtjb25maWd1cmF0aW9uOiBpbXBvcnQoXCIuL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdCwgZGF0YWJhc2VDb25maWd1cmF0aW9uOiBEYXRhYmFzZUNvbmZpZ3VyYXRpb25UeXBlLCBpZGVudGlmaWVyOiBzdHJpbmcsIHRlbmFudDogUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT59KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPn0gW2Ryb3BEYXRhYmFzZV0gLSBEcm9wcyB0aGUgdGVuYW50IGRhdGFiYXNlL3NjaGVtYSBmb3Igb25lIHRlbmFudC5cbiAqIEBwcm9wZXJ0eSB7KGFyZ3M6IHtjb25maWd1cmF0aW9uOiBpbXBvcnQoXCIuL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdCwgZGF0YWJhc2VDb25maWd1cmF0aW9uOiBEYXRhYmFzZUNvbmZpZ3VyYXRpb25UeXBlLCBpZGVudGlmaWVyOiBzdHJpbmcsIHRlbmFudDogUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT59KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPn0gW2NoZWNrVGVuYW50XSAtIENoZWNrcyBvbmUgdGVuYW50IGRhdGFiYXNlIGJlZm9yZSBnZW5lcmljIGNvbm5lY3Rpb24gdmFsaWRhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7KGFyZ3M6IHtjb25maWd1cmF0aW9uOiBpbXBvcnQoXCIuL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdCwgZGF0YWJhc2VDb25maWd1cmF0aW9uOiBEYXRhYmFzZUNvbmZpZ3VyYXRpb25UeXBlLCBpZGVudGlmaWVyOiBzdHJpbmcsIG1pZ3JhdGlvbnNBcHBsaWVkOiBudW1iZXIsIHRlbmFudDogUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT59KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPn0gW2FmdGVyTWlncmF0ZVRlbmFudF0gLSBSdW5zIGFwcC1vd25lZCB0ZW5hbnQgd29yayBhZnRlciBnZW5lcmljIG1pZ3JhdGlvbnMgZm9yIG9uZSB0ZW5hbnQuIGBtaWdyYXRpb25zQXBwbGllZGAgaXMgaG93IG1hbnkgbWlncmF0aW9ucyBhY3R1YWxseSByYW4gKDAgd2hlbiB0aGUgdGVuYW50IHdhcyBhbHJlYWR5IHVwIHRvIGRhdGUpLCBzbyB0aGUgYXBwIGNhbiBza2lwIGV4cGVuc2l2ZSBwZXItdGVuYW50IHdvcmsgb24gbm8tb3AgZGVwbG95cy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IENvbmZpZ3VyYXRpb25BcmdzVHlwZVxuICogQHByb3BlcnR5IHtib29sZWFufSBbYXV0b2xvYWRdIC0gR2xvYmFsbHkgZW5hYmxlIGF1dG8tYmF0Y2gtcHJlbG9hZCBvZiByZWxhdGlvbnNoaXBzIG9uIGxhenkgYWNjZXNzLiBEZWZhdWx0IHRydWUuXG4gKiBAcHJvcGVydHkge0NvcnNUeXBlfSBbY29yc10gLSBDT1JTIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBIVFRQIHNlcnZlci5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbY29va2llU2VjcmV0XSAtIFNlY3JldCBmb3IgZW5jcnlwdGluZyBjb29raWVzLlxuICogQHByb3BlcnR5IHtBYmlsaXR5UmVzb3VyY2VDbGFzc1R5cGVbXX0gW2FiaWxpdHlSZXNvdXJjZXNdIC0gUmVzb3VyY2UgY2xhc3NlcyB1c2VkIHRvIGRlZmluZSBhYmlsaXRpZXMgcGVyIG1vZGVsLlxuICogQHByb3BlcnR5IHtBYmlsaXR5UmVzb2x2ZXJUeXBlfSBbYWJpbGl0eVJlc29sdmVyXSAtIFJlc29sdmVyIGZvciBjcmVhdGluZyByZXF1ZXN0LXNjb3BlZCBhYmlsaXR5IGluc3RhbmNlcy5cbiAqIEBwcm9wZXJ0eSB7QXR0YWNobWVudHNDb25maWd1cmF0aW9ufSBbYXR0YWNobWVudHNdIC0gQXR0YWNobWVudCBzdG9yYWdlIGNvbmZpZ3VyYXRpb24uXG4gKiBAcHJvcGVydHkge0JhY2tlbmRQcm9qZWN0Q29uZmlndXJhdGlvbltdfSBbYmFja2VuZFByb2plY3RzXSAtIEJhY2tlbmQgcHJvamVjdCBkZWZpbml0aW9ucyB1c2VkIGZvciBmcm9udGVuZCBtb2RlbCBnZW5lcmF0aW9uLlxuICogQHByb3BlcnR5IHtWZWxvY2lvdXNQYWNrYWdlQ29uZmlndXJhdGlvbltdfSBbcGFja2FnZXNdIC0gRXh0ZXJuYWwgVmVsb2Npb3VzIHBhY2thZ2VzIHRoYXQgY29udHJpYnV0ZSBtb2RlbHMsIGZyb250ZW5kLW1vZGVsIHJlc291cmNlcyBhbmQgbWlncmF0aW9ucy5cbiAqIEBwcm9wZXJ0eSB7ZmFsc2UgfCB7W2tleTogc3RyaW5nXToge1trZXk6IHN0cmluZ106IERhdGFiYXNlQ29uZmlndXJhdGlvblR5cGV9fX0gW2RhdGFiYXNlXSAtIERhdGFiYXNlIGNvbmZpZ3VyYXRpb25zIGtleWVkIGJ5IGVudmlyb25tZW50IGFuZCBpZGVudGlmaWVyLCBvciBmYWxzZSBmb3IgYW4gZXhwbGljaXRseSBkYXRhYmFzZS1mcmVlIGFwcGxpY2F0aW9uLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbZGVidWddIC0gRW5hYmxlIGRlYnVnIGxvZ2dpbmcuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW4gfCBEZWJ1Z0VuZHBvaW50Q29uZmlndXJhdGlvbn0gW2RlYnVnRW5kcG9pbnRdIC0gRW5hYmxlIHRoZSBidWlsdC1pbiBkZWJ1ZyBlbmRwb2ludC4gRGVmYXVsdHMgdG8gZmFsc2UuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW4gfCBBcGlNYW5pZmVzdENvbmZpZ3VyYXRpb259IFthcGlNYW5pZmVzdF0gLSBFbmFibGUgdGhlIGJ1aWx0LWluIEFQSSBtYW5pZmVzdCBlbmRwb2ludC4gRGVmYXVsdHMgdG8gZmFsc2UuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW4gfCBNY3BDb25maWd1cmF0aW9ufSBbbWNwXSAtIEVuYWJsZSB0aGUgYnVpbHQtaW4gTUNQIGVuZHBvaW50IG9uIHRoZSBIVFRQIHNlcnZlciAoSlNPTi1SUEMgb3ZlciBIVFRQIGluIGFkZGl0aW9uIHRvIHRoZSBgdmVsb2Npb3VzIG1jcGAgc3RkaW8gc2VydmVyKS4gRGVmYXVsdHMgdG8gZmFsc2UuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2RpcmVjdG9yeV0gLSBCYXNlIGRpcmVjdG9yeSBmb3IgdGhlIHByb2plY3QuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtlbmZvcmNlVGVuYW50RGF0YWJhc2VTY29wZXNdIC0gUmVxdWlyZSB0ZW5hbnQtc3dpdGNoZWQgbW9kZWwgcXVlcmllcyB0byByZXNvbHZlIGEgdGVuYW50IGRhdGFiYXNlIGlkZW50aWZpZXIuIERlZmF1bHRzIHRvIHRydWUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2Vudmlyb25tZW50XSAtIEN1cnJlbnQgZW52aXJvbm1lbnQgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi9lbnZpcm9ubWVudC1oYW5kbGVycy9iYXNlLmpzXCIpLmRlZmF1bHR9IGVudmlyb25tZW50SGFuZGxlciAtIEVudmlyb25tZW50IGhhbmRsZXIgaW5zdGFuY2UuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtleHBvc2VJbnRlcm5hbEVycm9yc1RvQ2xpZW50c10gLSBSZXR1cm4gdW5leHBlY3RlZCBpbnRlcm5hbCBlcnJvciBtZXNzYWdlcyBhbmQgc3RhY2sgdHJhY2VzIGluIGZyb250ZW5kLW1vZGVsIGNsaWVudCBwYXlsb2FkcyBpbiBldmVyeSBlbnZpcm9ubWVudC4gRGVmYXVsdHMgdG8gdHJ1ZS5cbiAqIEBwcm9wZXJ0eSB7e21heE9wZW5IYW5kbGVzPzogbnVtYmVyfX0gW2Zyb250ZW5kVGVuYW50U3FsaXRlXSAtIEJvdW5kZWQgZnJvbnRlbmQgdGVuYW50IFNRTGl0ZSBsaWZlY3ljbGUgY29uZmlndXJhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3NlY3VyZUZyb250ZW5kTW9kZWxFcnJvcnNdIC0gRGVwcmVjYXRlZCBjb21wYXRpYmlsaXR5IGFsaWFzIGZvciBgZXhwb3NlSW50ZXJuYWxFcnJvcnNUb0NsaWVudHM6IGZhbHNlYCB3aGVuIHRoZSBhdXRob3JpdGF0aXZlIG9wdGlvbiBpcyBvbWl0dGVkLlxuICogQHByb3BlcnR5IHtIdHRwU2VydmVyQ29uZmlndXJhdGlvbn0gW2h0dHBTZXJ2ZXJdIC0gRGVmYXVsdCBIVFRQIHNlcnZlciBjb25maWd1cmF0aW9uIGZvciBhcHBsaWNhdGlvbnMgc3RhcnRlZCBmcm9tIHRoaXMgY29uZmlndXJhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7TG9nZ2luZ0NvbmZpZ3VyYXRpb259IFtsb2dnaW5nXSAtIExvZ2dpbmcgY29uZmlndXJhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7QmFja2dyb3VuZEpvYnNDb25maWd1cmF0aW9ufSBbYmFja2dyb3VuZEpvYnNdIC0gQmFja2dyb3VuZCBqb2JzIGNvbmZpZ3VyYXRpb24uXG4gKiBAcHJvcGVydHkge0JlYWNvbkNvbmZpZ3VyYXRpb259IFtiZWFjb25dIC0gQmVhY29uIGJyb2FkY2FzdCBidXMgY29uZmlndXJhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7U2NoZWR1bGVkQmFja2dyb3VuZEpvYnNDb25maWd1cmF0aW9uIHwgU2NoZWR1bGVkQmFja2dyb3VuZEpvYnNMb2FkZXJUeXBlfSBbc2NoZWR1bGVkQmFja2dyb3VuZEpvYnNdIC0gU2NoZWR1bGVkIGJhY2tncm91bmQgam9icyBjb25maWd1cmF0aW9uLlxuICogQHByb3BlcnR5IHtNYWlsZXJCYWNrZW5kfSBbbWFpbGVyQmFja2VuZF0gLSBNYWlsIGRlbGl2ZXJ5IGJhY2tlbmQuXG4gKiBAcHJvcGVydHkgeyhhcmdzOiB7Y29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHQsIHR5cGU6IHN0cmluZ30pID0+IHZvaWR9IGluaXRpYWxpemVNb2RlbHMgLSBIb29rIHRvIHJlZ2lzdGVyIG1vZGVscyBmb3IgYSBnaXZlbiBpbml0aWFsaXphdGlvbiB0eXBlLlxuICogQHByb3BlcnR5IHtJbml0aWFsaXplcnNUeXBlfSBbaW5pdGlhbGl6ZXJzXSAtIEluaXRpYWxpemVyIGxvYWRlciBmb3IgZW52aXJvbm1lbnQgYm9vdHN0cmFwcGluZy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgKCgpID0+IHN0cmluZyl9IGxvY2FsZSAtIERlZmF1bHQgbG9jYWxlIG9yIGxvY2FsZSByZXNvbHZlci5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IGxvY2FsZXMgLSBTdXBwb3J0ZWQgbG9jYWxlcy5cbiAqIEBwcm9wZXJ0eSB7TG9jYWxlRmFsbGJhY2tzVHlwZX0gbG9jYWxlRmFsbGJhY2tzIC0gTG9jYWxlIGZhbGxiYWNrIG1hcC5cbiAqIEBwcm9wZXJ0eSB7U3RydWN0dXJlU3FsQ29uZmlndXJhdGlvbn0gW3N0cnVjdHVyZVNxbF0gLSBTdHJ1Y3R1cmUgU1FMIGdlbmVyYXRpb24gY29uZmlndXJhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7VmVsb2Npb3VzU3luY0NvbmZpZ3VyYXRpb259IFtzeW5jXSAtIExvY2FsL29mZmxpbmUgc3luYyBmcmFtZXdvcmsgY29uZmlndXJhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7VGVuYW50UmVzb2x2ZXJUeXBlfSBbdGVuYW50UmVzb2x2ZXJdIC0gUmVzb2x2ZXIgZm9yIGNyZWF0aW5nIHJlcXVlc3Qtc2NvcGVkIHRlbmFudCBjb250ZXh0IG9iamVjdHMuXG4gKiBAcHJvcGVydHkge1RlbmFudERhdGFiYXNlUmVzb2x2ZXJUeXBlfSBbdGVuYW50RGF0YWJhc2VSZXNvbHZlcl0gLSBSZXNvbHZlciBmb3IgZGVyaXZpbmcgdGVuYW50LXNwZWNpZmljIGRhdGFiYXNlIGNvbmZpZyBvdmVycmlkZXMuXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIFRlbmFudERhdGFiYXNlUHJvdmlkZXJUeXBlPn0gW3RlbmFudERhdGFiYXNlUHJvdmlkZXJzXSAtIFRlbmFudCBkYXRhYmFzZSBsaWZlY3ljbGUgcHJvdmlkZXJzIGtleWVkIGJ5IGRhdGFiYXNlIGlkZW50aWZpZXIuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3Rlc3RpbmddIC0gUGF0aCB0byB0aGUgdGVzdGluZyBjb25maWd1cmF0aW9uIGZpbGUuXG4gKiBAcHJvcGVydHkge3N0cmluZyB8ICgoKSA9PiBzdHJpbmcgfCB1bmRlZmluZWQpfSBbdGltZVpvbmVdIC0gRGVmYXVsdCB0aW1lem9uZSBmb3IgdGltZXpvbmUtbGVzcyBkYXRldGltZSBzdHJpbmdzLlxuICogQHByb3BlcnR5IHtudW1iZXIgfCAoKCkgPT4gbnVtYmVyKX0gW3RpbWV6b25lT2Zmc2V0TWludXRlc10gLSBEZWZhdWx0IHRpbWV6b25lIG9mZnNldCBpbiBtaW51dGVzLlxuICogQHByb3BlcnR5IHtzdHJpbmcgfCBzdHJpbmdbXX0gW3RydXN0ZWRQcm94aWVzXSAtIFRydXN0ZWQgcmV2ZXJzZSBwcm94eSBhZGRyZXNzIHJhbmdlcyB1c2VkIHRvIHJlc29sdmUgcmVxdWVzdCByZW1vdGUgYWRkcmVzc2VzIGZyb20gZm9yd2FyZGluZyBoZWFkZXJzLlxuICogQHByb3BlcnR5IHtudW1iZXIgfCAoKCkgPT4gbnVtYmVyKX0gW3JlcXVlc3RUaW1lb3V0TXNdIC0gVGltZW91dCBpbiBzZWNvbmRzIGZvciBjb21wbGV0aW5nIGEgSFRUUCByZXF1ZXN0LlxuICogQHByb3BlcnR5IHtSb3V0ZVJlc29sdmVySG9va1R5cGVbXX0gW3JvdXRlUmVzb2x2ZXJIb29rc10gLSBIb29rIGNhbGxiYWNrcyB0aGF0IGNhbiBoaWphY2sgdW5yZXNvbHZlZCByb3V0ZXMuXG4gKiBAcHJvcGVydHkge1dlYnNvY2tldENoYW5uZWxSZXNvbHZlclR5cGV9IFt3ZWJzb2NrZXRDaGFubmVsUmVzb2x2ZXJdIC0gUmVzb2x2ZSBhIHdlYnNvY2tldCBjaGFubmVsIGNsYXNzL2luc3RhbmNlIGZvciBlYWNoIGNvbm5lY3Rpb24uXG4gKiBAcHJvcGVydHkge1dlYnNvY2tldE1lc3NhZ2VIYW5kbGVyUmVzb2x2ZXJUeXBlfSBbd2Vic29ja2V0TWVzc2FnZUhhbmRsZXJSZXNvbHZlcl0gLSBSZXNvbHZlIGEgcmF3IHdlYnNvY2tldCBtZXNzYWdlIGhhbmRsZXIgZm9yIGVhY2ggY29ubmVjdGlvbi5cbiAqL1xuXG5leHBvcnQgY29uc3Qgbm90aGluZyA9IHt9XG4iXX0=
734
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi10eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25maWd1cmF0aW9uLXR5cGVzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWjs7R0FFRztBQUVIOzs7OztHQUtHO0FBRUg7O0dBRUc7QUFFSDs7R0FFRztBQUVIOzs7Ozs7R0FNRztBQUVIOztHQUVHO0FBRUg7Ozs7Ozs7O0dBUUc7QUFFSDs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUVIOzs7OztHQUtHO0FBRUg7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0NHO0FBRUg7O0dBRUc7QUFFSDs7Ozs7O0dBTUc7QUFFSDs7OztHQUlHO0FBRUg7Ozs7R0FJRztBQUVIOztHQUVHO0FBRUg7Ozs7Ozs7Ozs7OztHQVlHO0FBRUg7Ozs7R0FJRztBQUVIOzs7Ozs7Ozs7OztHQVdHO0FBRUgsNERBQTREO0FBQzVELHlGQUF5RjtBQUN6Riw4SkFBOEo7QUFDOUosK0ZBQStGO0FBRS9GOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWdGRztBQUVIOzs7Ozs7Ozs7OztHQVdHO0FBQ0g7Ozs7Ozs7O0dBUUc7QUFFSDs7Ozs7Ozs7R0FRRztBQUVIOzs7Ozs7R0FNRztBQUVIOzs7Ozs7R0FNRztBQUVIOzs7OztHQUtHO0FBRUg7Ozs7R0FJRztBQUVILDhIQUE4SDtBQUU5SDs7OztHQUlHO0FBRUg7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUVIOzs7R0FHRztBQUVIOzs7Ozs7OztHQVFHO0FBRUg7O0dBRUc7QUFFSDs7R0FFRztBQUVIOzs7OztHQUtHO0FBRUg7Ozs7Ozs7Ozs7R0FVRztBQUVIOzs7Ozs7O0dBT0c7QUFFSDs7R0FFRztBQUVIOztHQUVHO0FBRUg7OztHQUdHO0FBRUg7O0dBRUc7QUFFSDs7Ozs7R0FLRztBQUVIOzs7Ozs7R0FNRztBQUVIOzs7Ozs7R0FNRztBQUVIOzs7Ozs7R0FNRztBQUVIOzs7Ozs7R0FNRztBQUdIOztHQUVHO0FBRUg7Ozs7OztHQU1HO0FBRUg7Ozs7Ozs7Ozs7R0FVRztBQUVIOzs7O0dBSUc7QUFFSDs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSDs7Ozs7OztHQU9HO0FBRUg7Ozs7R0FJRztBQUVIOzs7R0FHRztBQUVIOzs7Ozs7Ozs7OztHQVdHO0FBRUg7Ozs7O0dBS0c7QUFFSDs7Ozs7R0FLRztBQUVIOzs7Ozs7O0dBT0c7QUFFSDs7Ozs7O0dBTUc7QUFFSDs7Ozs7O0dBTUc7QUFFSDs7Ozs7Ozs7Ozs7R0FXRztBQUVIOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUg7Ozs7Ozs7OztHQVNHO0FBRUg7Ozs7Ozs7OztHQVNHO0FBRUg7Ozs7Ozs7Ozs7R0FVRztBQUVIOzs7R0FHRztBQUVIOzs7OztHQUtHO0FBRUg7Ozs7R0FJRztBQUVIOzs7R0FHRztBQUVIOzs7Ozs7O0dBT0c7QUFFSDs7Ozs7Ozs7O0dBU0c7QUFFSDs7Ozs7OztHQU9HO0FBRUg7Ozs7Ozs7Ozs7R0FVRztBQUVIOztHQUVHO0FBRUg7Ozs7Ozs7OztHQVNHO0FBRUg7Ozs7Ozs7Ozs7O0dBV0c7QUFFSDs7R0FFRztBQUVIOztHQUVHO0FBRUg7O0dBRUc7QUFFSDs7R0FFRztBQUVIOztHQUVHO0FBRUg7Ozs7R0FJRztBQUNIOzs7O0dBSUc7QUFHSDs7OztHQUlHO0FBRUg7Ozs7Ozs7OztHQVNHO0FBRUg7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Q0c7QUFFSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbi8qKlxuICogQG1vZHVsZSB0eXBlc1xuICovXG5cbi8qKlxuICogSW1tdXRhYmxlIGlkZW50aXR5IHNoYXJlZCBieSBhcHBsaWNhdGlvbiBpbml0aWFsaXplcnMgZm9yIG9uZSBwcm9jZXNzIGxpZmVjeWNsZS5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IEFwcGxpY2F0aW9uUHJvY2Vzc0NvbnRleHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlIC0gR2VuZXJpYyBwcm9jZXNzIHR5cGUgc3VwcGxpZWQgdG8gYGNvbmZpZ3VyYXRpb24uaW5pdGlhbGl6ZSgpYC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpbnN0YW5jZUlkIC0gT3BhcXVlIGlkZW50aXR5IHVuaXF1ZSB0byB0aGlzIGxpZmVjeWNsZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHsoYXJnczoge3JlcXVlc3Q6IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3JlcXVlc3QuanNcIikuZGVmYXVsdCB8IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3dlYnNvY2tldC1yZXF1ZXN0LmpzXCIpLmRlZmF1bHQsIHJlc3BvbnNlOiBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC9yZXNwb25zZS5qc1wiKS5kZWZhdWx0fSkgPT4gUHJvbWlzZTx2b2lkPn0gQ29yc1R5cGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHsoYXJnczoge3JlcXVlc3Q6IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3JlcXVlc3QuanNcIikuZGVmYXVsdCB8IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3dlYnNvY2tldC1yZXF1ZXN0LmpzXCIpLmRlZmF1bHQgfCB1bmRlZmluZWQsIHN1YnNjcmlwdGlvbj86IHtjaGFubmVsOiBzdHJpbmcsIHBhcmFtcz86IFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0sIGNsaWVudDogaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvaW5kZXguanNcIikuZGVmYXVsdCwgd2Vic29ja2V0U2Vzc2lvbjogaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvd2Vic29ja2V0LXNlc3Npb24uanNcIikuZGVmYXVsdCwgY29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9KSA9PiB0eXBlb2YgaW1wb3J0KFwiLi9odHRwLXNlcnZlci93ZWJzb2NrZXQtY2hhbm5lbC5qc1wiKS5kZWZhdWx0IHwgaW1wb3J0KFwiLi9odHRwLXNlcnZlci93ZWJzb2NrZXQtY2hhbm5lbC5qc1wiKS5kZWZhdWx0IHwgdm9pZCB8IFByb21pc2U8dHlwZW9mIGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvd2Vic29ja2V0LWNoYW5uZWwuanNcIikuZGVmYXVsdCB8IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvd2Vic29ja2V0LWNoYW5uZWwuanNcIikuZGVmYXVsdCB8IHZvaWQ+fSBXZWJzb2NrZXRDaGFubmVsUmVzb2x2ZXJUeXBlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBXZWJzb2NrZXRNZXNzYWdlSGFuZGxlclxuICogQHByb3BlcnR5IHsoYXJnczoge21lc3NhZ2U6IFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+LCBzZXNzaW9uOiBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC93ZWJzb2NrZXQtc2Vzc2lvbi5qc1wiKS5kZWZhdWx0fSkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWR9IFtvbk1lc3NhZ2VdIC0gSGFuZGxlciBmb3IgaW5jb21pbmcgd2Vic29ja2V0IG1lc3NhZ2VzLlxuICogQHByb3BlcnR5IHsoYXJnczoge3Nlc3Npb246IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3dlYnNvY2tldC1zZXNzaW9uLmpzXCIpLmRlZmF1bHR9KSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZH0gW29uT3Blbl0gLSBIYW5kbGVyIHdoZW4gdGhlIHdlYnNvY2tldCBzZXNzaW9uIG9wZW5zLlxuICogQHByb3BlcnR5IHsoYXJnczoge3Nlc3Npb246IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3dlYnNvY2tldC1zZXNzaW9uLmpzXCIpLmRlZmF1bHR9KSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZH0gW29uQ2xvc2VdIC0gSGFuZGxlciB3aGVuIHRoZSB3ZWJzb2NrZXQgc2Vzc2lvbiBjbG9zZXMuXG4gKiBAcHJvcGVydHkgeyhhcmdzOiB7ZXJyb3I6IEVycm9yLCBzZXNzaW9uOiBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC93ZWJzb2NrZXQtc2Vzc2lvbi5qc1wiKS5kZWZhdWx0fSkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWR9IFtvbkVycm9yXSAtIEhhbmRsZXIgd2hlbiBhIHdlYnNvY2tldCBtZXNzYWdlIGVycm9ycy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHsoYXJnczoge3JlcXVlc3Q6IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3JlcXVlc3QuanNcIikuZGVmYXVsdCB8IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3dlYnNvY2tldC1yZXF1ZXN0LmpzXCIpLmRlZmF1bHQgfCB1bmRlZmluZWQsIGNsaWVudDogaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvaW5kZXguanNcIikuZGVmYXVsdCwgY29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9KSA9PiBXZWJzb2NrZXRNZXNzYWdlSGFuZGxlciB8IHZvaWQgfCBQcm9taXNlPFdlYnNvY2tldE1lc3NhZ2VIYW5kbGVyIHwgdm9pZD59IFdlYnNvY2tldE1lc3NhZ2VIYW5kbGVyUmVzb2x2ZXJUeXBlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7KGlkOiBzdHJpbmcpID0+IHtkZWZhdWx0OiB0eXBlb2YgaW1wb3J0KFwiLi9pbml0aWFsaXplci5qc1wiKS5kZWZhdWx0fX0gSW5pdGlhbGl6ZXJzUmVxdWlyZUNvbnRleHRUeXBlXG4gKiBAdHlwZWRlZiB7SW5pdGlhbGl6ZXJzUmVxdWlyZUNvbnRleHRUeXBlICYge1xuICogICBrZXlzOiAoKSA9PiBzdHJpbmdbXSxcbiAqICAgaWQ6IHN0cmluZ1xuICogfX0gV2VicGFja1JlcXVpcmVDb250ZXh0XG4gKiBAdHlwZWRlZiB7e3JlcXVpcmVDb250ZXh0OiBXZWJwYWNrUmVxdWlyZUNvbnRleHR9fSBJbml0aWFsaXplcnNFeHBvcnRUeXBlXG4gKiBAdHlwZWRlZiB7KGFyZ3M6IHtjb25maWd1cmF0aW9uOiBpbXBvcnQoXCIuL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0pID0+IFByb21pc2U8SW5pdGlhbGl6ZXJzRXhwb3J0VHlwZT59IEluaXRpYWxpemVyc1R5cGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFNxbENvbmZpZ1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFtkYXRhYmFzZV0gLSBEYXRhYmFzZSBuYW1lIGZvciB0aGUgU1FMIGRyaXZlci5cbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBbb3B0aW9uc10gLSBEcml2ZXItc3BlY2lmaWMgY29ubmVjdGlvbiBvcHRpb25zLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbb3B0aW9ucy5lbmNyeXB0XSAtIFdoZXRoZXIgdG8gZW5jcnlwdCB0aGUgY29ubmVjdGlvbiAoTVNTUUwpLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtvcHRpb25zLnNjaGVtYV0gLSBEZWZhdWx0IHNjaGVtYSBmb3IgdW5xdWFsaWZpZWQgdGFibGUgbG9va3VwcyAoTVNTUUwpLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtvcHRpb25zLnNlcnZlck5hbWVdIC0gVExTIFNOSSBzZXJ2ZXIgbmFtZSBvdmVycmlkZSBmb3IgTVNTUUwgKGVtcHR5IHN0cmluZyBkaXNhYmxlcyBTTkkpLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbb3B0aW9ucy50cnVzdFNlcnZlckNlcnRpZmljYXRlXSAtIFdoZXRoZXIgdG8gdHJ1c3QgdGhlIHNlcnZlciBjZXJ0aWZpY2F0ZSAoTVNTUUwpLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtwYXNzd29yZF0gLSBQYXNzd29yZCBmb3IgdGhlIFNRTCB1c2VyLlxuICogQHByb3BlcnR5IHtvYmplY3R9IFtwb29sXSAtIENvbm5lY3Rpb24gcG9vbCBjb25maWd1cmF0aW9uLlxuICogQHByb3BlcnR5IHtudW1iZXIgfCBudWxsfSBbcG9vbC5tYXhdIC0gTWF4aW11bSBudW1iZXIgb2YgY29ubmVjdGlvbnMuIFNldCBudWxsIHRvIGRpc2FibGUgdGhlIGNhcC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcG9vbC5taW5dIC0gTWluaW11bSBudW1iZXIgb2YgY29ubmVjdGlvbnMuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3Bvb2wuaWRsZVRpbWVvdXRNaWxsaXNdIC0gSWRsZSB0aW1lb3V0IGJlZm9yZSByZWxlYXNpbmcgYSBjb25uZWN0aW9uLlxuICogQHByb3BlcnR5IHtudW1iZXIgfCBudWxsfSBbcG9vbC5jaGVja291dFRpbWVvdXRNaWxsaXNdIC0gVGltZW91dCB3aGlsZSB3YWl0aW5nIGZvciBhbiBhdmFpbGFibGUgY29ubmVjdGlvbiBhZnRlciB0aGUgbWF4IGNvbm5lY3Rpb24gY2FwIGlzIHJlYWNoZWQuIFNldCBudWxsIHRvIHdhaXQgaW5kZWZpbml0ZWx5LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtzZXJ2ZXJdIC0gU1FMIHNlcnZlciBob3N0bmFtZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdXNlcl0gLSBTUUwgdXNlcm5hbWUuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBEYXRhYmFzZVBvb2xDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge251bWJlciB8IG51bGx9IFtjaGVja291dFRpbWVvdXRNaWxsaXNdIC0gVGltZW91dCB3aGlsZSBhIGNoZWNrb3V0IHdhaXRzIGZvciBhbiBhdmFpbGFibGUgYXN5bmMtdHJhY2tlZCBjb25uZWN0aW9uIGFmdGVyIHRoZSBtYXggbGl2ZSBjb25uZWN0aW9uIGNhcCBpcyByZWFjaGVkLiBTZXQgbnVsbCB0byB3YWl0IGluZGVmaW5pdGVseS4gRGVmYXVsdDogMTAwMDAuXG4gKiBAcHJvcGVydHkge251bWJlciB8IG51bGx9IFtpZGxlVGltZW91dE1pbGxpc10gLSBJZGxlIHRpbWVvdXQgYmVmb3JlIGNsb3NpbmcgYSBjaGVja2VkLWluIGFzeW5jLXRyYWNrZWQgY29ubmVjdGlvbi4gU2V0IG51bGwgdG8gZGlzYWJsZSBpZGxlIHJlYXBpbmcuIERlZmF1bHQ6IDUwMDAuXG4gKiBAcHJvcGVydHkge251bWJlciB8IG51bGx9IFttYXhdIC0gTWF4aW11bSBsaXZlIGFzeW5jLXRyYWNrZWQgY29ubmVjdGlvbnMgZm9yIHRoaXMgcG9vbC4gRGVmYXVsdHMgdG8gMTAuIEV4dHJhIGNoZWNrb3V0cyB3YWl0IHVudGlsIGEgbWF0Y2hpbmcgY29ubmVjdGlvbiBpcyBjaGVja2VkIGluIG9yIGNhcGFjaXR5IGlzIGZyZWVkLiBTZXQgbnVsbCB0byBkaXNhYmxlIHRoZSBjYXAuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBEYXRhYmFzZUNvbmZpZ3VyYXRpb25UeXBlXG4gKiBAcHJvcGVydHkge251bWJlciB8IG51bGx9IFthZHZpc29yeUxvY2tBY3F1aXJlVGltZW91dE1zXSAtIEJvdW5kIChtcykgYSBibG9ja2luZyBhZHZpc29yeS1sb2NrIGFjcXVpc2l0aW9uIHdhaXRzIGZvciBhIGNvbnRlbmRlZCBsb2NrIGJlZm9yZSByZXBvcnRpbmcgZmFpbHVyZS4gRGVmYXVsdDogYDkwMDAwMGAgKDE1IG1pbnV0ZXMpLiBgbnVsbGAgb3B0cyBvdXQgYW5kIHJlc3RvcmVzIHRoZSBkcml2ZXIncyBpbmRlZmluaXRlIHdhaXQuIEEgcGVyLWNhbGwgYHRpbWVvdXRNc2AgYXJndW1lbnQgYWx3YXlzIG92ZXJyaWRlcyB0aGlzLlxuICogQHByb3BlcnR5IHt7c2xvd0FjcXVpcmVNcz86IG51bWJlciB8IG51bGwsIHNsb3dIb2xkTXM/OiBudW1iZXIgfCBudWxsfX0gW2Fkdmlzb3J5TG9ja1RlbGVtZXRyeV0gLSBFdmVudC1kcml2ZW4gYWR2aXNvcnktbG9jayBkdXJhdGlvbiB0ZWxlbWV0cnkgdGhyZXNob2xkcy4gYHNsb3dBY3F1aXJlTXNgIChkZWZhdWx0IGA1MDAwYCkgcmVwb3J0cyBhbiBhY3F1aXJlIHdhaXQgdGhhdCBjb21wbGV0ZWQgc2xvd2VyIHRoYW4gdGhlIHRocmVzaG9sZCwgaW5jbHVkaW5nIHRoZSBldmVudHVhbCBvdXRjb21lOyBgYWR2aXNvcnktbG9jay1hY3F1aXJlLXRpbWVvdXRgIGFsd2F5cyBmaXJlcyB3aGVuIGEgd2FpdCBleGNlZWRzIGl0cyBib3VuZCBhbmQgY2FycmllcyB0aGUgaG9sZGVyIGlkZW50aXR5IGF2YWlsYWJsZSBvbiB0aGUgdGllciBhdCB0aGF0IG1vbWVudC4gYHNsb3dIb2xkTXNgIChkZWZhdWx0IGA2MDAwMGApIHJlcG9ydHMgYSBob2xkIHRoYXQgb3V0bGl2ZXMgdGhlIHRocmVzaG9sZCBhdCByZWxlYXNlLiBgbnVsbGAgZGlzYWJsZXMgdGhhdCByZXBvcnQuIFJlcG9ydHMgZmlyZSBvbiB0aGUgZXZlbnRzIHRoZW1zZWx2ZXMg4oCUIG5vIHBlcmlvZGljIHNjYW5uZXIg4oCUIG9uIGBnZXRFcnJvckV2ZW50cygpYCBhcyBgZnJhbWV3b3JrLWVycm9yYCB3aXRoIGBjb250ZXh0OiBcImFkdmlzb3J5LWxvY2stdGVsZW1ldHJ5XCJgLiBTZWUgW2RvY3MvYWR2aXNvcnktbG9ja3MubWRdKC4uL2RvY3MvYWR2aXNvcnktbG9ja3MubWQpLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtkYXRhYmFzZUNoYXJzZXRdIC0gRGVmYXVsdCBjaGFyYWN0ZXIgc2V0IGFwcGxpZWQgYnkgYGRiOmNyZWF0ZWAgdmlhIG15c3FsL21hcmlhZGIgYENSRUFURSBEQVRBQkFTRSAuLi4gQ0hBUkFDVEVSIFNFVGAuIERpc3RpbmN0IGZyb20gYGNoYXJzZXRgLCB3aGljaCBpcyB0aGUgY2xpZW50IGNvbm5lY3Rpb24gY2hhcnNldCBmb3J3YXJkZWQgdG8gdGhlIG15c3FsMiBkcml2ZXIuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2RhdGFiYXNlQ29sbGF0aW9uXSAtIERlZmF1bHQgY29sbGF0aW9uIGFwcGxpZWQgYnkgYGRiOmNyZWF0ZWAgdmlhIG15c3FsL21hcmlhZGIgYENSRUFURSBEQVRBQkFTRSAuLi4gQ09MTEFURWAuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2RhdGFiYXNlXSAtIERhdGFiYXNlIG5hbWUgZm9yIHRoaXMgY29ubmVjdGlvbi5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbZGVhZGxvY2tNYXhSZXRyaWVzXSAtIE1heGltdW0gYXR0ZW1wdHMgZm9yIHRoZSBvdXRlcm1vc3QgdHJhbnNhY3Rpb24gd2hlbiBpdCBrZWVwcyBoaXR0aW5nIGRlYWRsb2Nrcy4gRGVmYXVsdHMgdG8gOC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbZGVhZGxvY2tCYXNlV2FpdE1zXSAtIEJhc2UgZGVsYXkgKG1zKSBmb3IgdGhlIGRlYWRsb2NrIHJldHJ5IGJhY2tvZmY7IHRoZSBwZXItYXR0ZW1wdCBjZWlsaW5nIGRvdWJsZXMgZnJvbSBoZXJlLiBEZWZhdWx0cyB0byA1MC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbZGVhZGxvY2tNYXhXYWl0TXNdIC0gQ2FwIChtcykgb24gdGhlIGRlYWRsb2NrIHJldHJ5IGJhY2tvZmYgY2VpbGluZyBzbyB0aGUgaml0dGVyZWQgd2FpdCBzdGF5cyBib3VuZGVkLiBEZWZhdWx0cyB0byAxMDAwLlxuICogQHByb3BlcnR5IHt0eXBlb2YgaW1wb3J0KFwiLi9kYXRhYmFzZS9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdH0gW2RyaXZlcl0gLSBEcml2ZXIgY2xhc3MgdG8gdXNlIGZvciB0aGlzIGRhdGFiYXNlLlxuICogQHByb3BlcnR5IHt0eXBlb2YgaW1wb3J0KFwiLi9kYXRhYmFzZS9wb29sL2Jhc2UuanNcIikuZGVmYXVsdH0gW3Bvb2xUeXBlXSAtIFBvb2wgY2xhc3MgdG8gdXNlIGZvciB0aGlzIGRhdGFiYXNlLlxuICogQHByb3BlcnR5IHsoKSA9PiBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0gW2dldENvbm5lY3Rpb25dIC0gQ3VzdG9tIGNvbm5lY3Rpb24gZmFjdG9yeSBvdmVycmlkZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbaG9zdF0gLSBEYXRhYmFzZSBob3N0LlxuICogQHByb3BlcnR5IHtib29sZWFufSBbbWlncmF0aW9uc10gLSBXaGV0aGVyIG1pZ3JhdGlvbnMgYXJlIGVuYWJsZWQgZm9yIHRoaXMgZGF0YWJhc2UuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFttdWx0aXBsZVN0YXRlbWVudHNdIC0gKE15U1FMKSBPcHQgaW4gdG8gbXVsdGktc3RhdGVtZW50IHF1ZXJpZXMgc28gc3RydWN0dXJlIFNRTCBsb2FkcyBhbmQgYWxsLXRhYmxlIGNsZWFudXAgY2FuIGJhdGNoIGludG8gb25lIHJvdW5kLXRyaXAuIE9mZiBieSBkZWZhdWx0OyBvcmRpbmFyeSBxdWVyaWVzIG90aGVyd2lzZSByZWplY3Qgc3RhY2tlZCBzdGF0ZW1lbnRzLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFttYXhSb3dzUGVySW5zZXJ0XSAtIE1heGltdW0gcm93cyBwZXIgYElOU0VSVCAuLi4gVkFMVUVTICguLi4pLCAoLi4uKSwgLi4uYCBzdGF0ZW1lbnQgZ2VuZXJhdGVkIGJ5IGBSZWNvcmQuaW5zZXJ0TXVsdGlwbGVgLiBEZWZhdWx0cyB0byA1MDAuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW21heEluc2VydFNxbEJ5dGVzXSAtIE1heGltdW0gc2VyaWFsaXplZCBTUUwgc2l6ZSwgaW4gYnl0ZXMsIGZvciBhIHNpbmdsZSBgSU5TRVJUIC4uLiBWQUxVRVMgKC4uLiksICguLi4pLCAuLi5gIHN0YXRlbWVudC4gRGVmYXVsdHMgdG8gMSBNaUIgKDEwNDg1NzYpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFttYXhJbkNsYXVzZVZhbHVlc10gLSBNYXhpbXVtIHZhbHVlcyBpbiBhIHNpbmdsZSBgSU4gKC4uLilgIGNvaG9ydCB1c2VkIGJ5IHByZWxvYWRzLCBhc3NvY2lhdGlvbiBjb3VudHMsIGFuZCBxdWVyeURhdGEgYWdncmVnYXRlcy4gRGVmYXVsdHMgdG8gOTk5LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFttYXhRdWVyeVNxbEJ5dGVzXSAtIE1heGltdW0gc2VyaWFsaXplZCBTUUwgc2l6ZSwgaW4gYnl0ZXMsIGZvciBhIHNpbmdsZSBjb2hvcnQgcXVlcnkgdXNlZCBieSBwcmVsb2FkcywgYXNzb2NpYXRpb24gY291bnRzLCBhbmQgcXVlcnlEYXRhIGFnZ3JlZ2F0ZXMuIERlZmF1bHRzIHRvIDEgTWlCICgxMDQ4NTc2KS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcGFzc3dvcmRdIC0gUGFzc3dvcmQgZm9yIHRoZSBkYXRhYmFzZSB1c2VyLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtwb3J0XSAtIERhdGFiYXNlIHBvcnQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3ByaW1hcnlLZXlUeXBlXSAtIERlZmF1bHQgdHlwZSBmb3IgaW1wbGljaXQgbWlncmF0aW9uIHByaW1hcnkga2V5cyBhbmQgcmVmZXJlbmNlcy4gRGVmYXVsdHMgdG8gYHV1aWRgLlxuICogQHByb3BlcnR5IHtEYXRhYmFzZVBvb2xDb25maWd1cmF0aW9ufSBbcG9vbF0gLSBWZWxvY2lvdXMgZGF0YWJhc2UgcG9vbCBsaWZlY3ljbGUgY29uZmlndXJhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbmFtZV0gLSBGcmllbmRseSBuYW1lIGZvciB0aGUgY29uZmlndXJhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7KGZpbGU6IHN0cmluZykgPT4gc3RyaW5nfSBbbG9jYXRlRmlsZV0gLSBPcHRpb25hbCBzcWxpdGUtd2ViIHNxbC5qcyB3YXNtIHJlc29sdmVyIChgaW5pdFNxbEpzKHtsb2NhdGVGaWxlfSlgKS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3JlYWRPbmx5XSAtIFdoZXRoZXIgd3JpdGVzIHNob3VsZCBiZSBibG9ja2VkIGZvciB0aGlzIGRhdGFiYXNlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtzY2hlbWFdIC0gRGVmYXVsdCBzY2hlbWEgZm9yIHVucXVhbGlmaWVkIHRhYmxlIGxvb2t1cHMgKE1TU1FMKS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3NjaGVtYUNhY2hlXSAtIFdoZXRoZXIgc2NoZW1hIG1ldGFkYXRhIHNob3VsZCBiZSBjYWNoZWQgb24gdGhlIGRyaXZlci4gRGVmYXVsdHMgdG8gdHJ1ZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbc2NoZW1hTWV0YWRhdGFSZXRyeURlYWRsaW5lTXNdIC0gQm91bmRlZCBkZWFkbGluZSAobXMpIGZvciBvdXRsYXN0aW5nIGEgY2FjaGVkIHNjaGVtYS1tZXRhZGF0YSByZWFkIHRoZSBzZXJ2ZXIgc2tpcHBlZCBiZWNhdXNlIGNvbmN1cnJlbnQgb25saW5lIERETCBpcyBtb2RpZnlpbmcgdGhlIHRhYmxlLiBEZWZhdWx0cyB0byA2MDAwMC5cbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBbcmVjb3JkXSAtIFJlY29yZC1sZXZlbCBjb25maWd1cmF0aW9uLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbcmVjb3JkLnRyYW5zYWN0aW9uc10gLSBXaGV0aGVyIHJlY29yZCBvcGVyYXRpb25zIHNob3VsZCB1c2UgdHJhbnNhY3Rpb25zLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbcmVzZXRdIC0gV2hldGhlciB0byByZXNldCB0aGUgZGF0YWJhc2Ugb24gc3RhcnR1cC5cbiAqIEBwcm9wZXJ0eSB7U3FsQ29uZmlnfSBbc3FsQ29uZmlnXSAtIERyaXZlci1zcGVjaWZpYyBTUUwgY29uZmlnLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbdGVuYW50T25seV0gLSBXaGV0aGVyIHRoaXMgZGF0YWJhc2UgaWRlbnRpZmllciBpcyBvbmx5IGFjdGl2ZSBpbnNpZGUgYSByZXNvbHZlZCB0ZW5hbnQgY29udGV4dC5cbiAqIEBwcm9wZXJ0eSB7XCJtc3NxbFwiIHwgXCJteXNxbFwiIHwgXCJwZ3NxbFwiIHwgXCJzcWxpdGVcIn0gW3R5cGVdIC0gRGF0YWJhc2UgdHlwZSBpZGVudGlmaWVyLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFt1c2VEYXRhYmFzZV0gLSBEYXRhYmFzZSB0byBzd2l0Y2ggdG8gYWZ0ZXIgY29ubmVjdGluZy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdXNlcm5hbWVdIC0gVXNlcm5hbWUgZm9yIGRhdGFiYXNlIGF1dGhlbnRpY2F0aW9uLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge1wiZGVidWctbG93LWxldmVsXCIgfCBcImRlYnVnXCIgfCBcImluZm9cIiB8IFwid2FyblwiIHwgXCJlcnJvclwifSBMb2dMZXZlbFxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gTG9nZ2luZ091dHB1dFBheWxvYWRcbiAqIEBwcm9wZXJ0eSB7TG9nTGV2ZWx9IGxldmVsIC0gTG9nIGxldmVsLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IG1lc3NhZ2UgLSBGb3JtYXR0ZWQgbWVzc2FnZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzdWJqZWN0IC0gTG9nIHN1YmplY3QuXG4gKiBAcHJvcGVydHkge0RhdGV9IHRpbWVzdGFtcCAtIFRpbWVzdGFtcC5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IExvZ2dpbmdPdXRwdXRcbiAqIEBwcm9wZXJ0eSB7KGFyZzogTG9nZ2luZ091dHB1dFBheWxvYWQpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkfSB3cml0ZSAtIFdyaXRlIGEgbG9nIGVudHJ5LlxuICogQHByb3BlcnR5IHtMb2dMZXZlbFtdfSBbbGV2ZWxzXSAtIERlZmF1bHQgbGV2ZWxzIGZvciB0aGlzIG91dHB1dC5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IExvZ2dpbmdPdXRwdXRDb25maWdcbiAqIEBwcm9wZXJ0eSB7TG9nZ2luZ091dHB1dH0gb3V0cHV0IC0gT3V0cHV0IGluc3RhbmNlLlxuICogQHByb3BlcnR5IHtBcnJheTxMb2dMZXZlbD59IFtsZXZlbHNdIC0gTGV2ZWxzIGVuYWJsZWQgZm9yIHRoaXMgb3V0cHV0LlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge0xvZ2dpbmdPdXRwdXRDb25maWcgfCBMb2dnaW5nT3V0cHV0IHwgaW1wb3J0KFwiLi9sb2dnZXIvYmFzZS1sb2dnZXIuanNcIikuZGVmYXVsdH0gTG9nZ2VyQ29uZmlnXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBMb2dnaW5nQ29uZmlndXJhdGlvblxuICogQHByb3BlcnR5IHtib29sZWFufSBbY29uc29sZV0gLSBFbmFibGUvZGlzYWJsZSBjb25zb2xlIGxvZ2dpbmcgZm9yIHJlcXVlc3QgbG9nZ2luZy4gRGVmYXVsdHMgdG8gdHJ1ZSBvdXRzaWRlIG9mIFwidGVzdFwiIGFuZCBmb3IgSFRUUCBzZXJ2ZXIgbG9ncy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2ZpbGVdIC0gRW5hYmxlL2Rpc2FibGUgd3JpdGluZyBsb2dzIHRvIGEgZmlsZS4gRGVmYXVsdHMgdG8gdHJ1ZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZGlyZWN0b3J5XSAtIERpcmVjdG9yeSB3aGVyZSBsb2cgZmlsZXMgYXJlIHN0b3JlZC4gRGVmYXVsdHMgdG8gXCI8cHJvamVjdD4vbG9nXCIuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2ZpbGVQYXRoXSAtIEV4cGxpY2l0IHBhdGggZm9yIHRoZSBsb2cgZmlsZS4gRGVmYXVsdHMgdG8gXCI8ZGlyZWN0b3J5Pi88ZW52aXJvbm1lbnQ+LmxvZ1wiLlxuICogQHByb3BlcnR5IHtBcnJheTxcImRlYnVnLWxvdy1sZXZlbFwiIHwgXCJkZWJ1Z1wiIHwgXCJpbmZvXCIgfCBcIndhcm5cIiB8IFwiZXJyb3JcIj59IFtsZXZlbHNdIC0gT3ZlcnJpZGUgd2hpY2ggbG9nIGxldmVscyBhcmUgZW1pdHRlZC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2RlYnVnTG93TGV2ZWxdIC0gQ29udmVuaWVuY2UgZmxhZyB0byBpbmNsdWRlIHZlcnkgbG93LWxldmVsIGRlYnVnIGxvZ3MuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtxdWVyeUxvZ2dpbmddIC0gRW5hYmxlL2Rpc2FibGUgZGF0YWJhc2UgcXVlcnkgbG9nZ2luZy4gRGVmYXVsdHMgdG8gdHJ1ZSBvdXRzaWRlIHRlc3QgYW5kIGZhbHNlIGluIHRlc3QuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbc2Vuc2l0aXZlTmFtZXNdIC0gQWRkaXRpb25hbCBjYXNlLWluc2Vuc2l0aXZlIHNlbnNpdGl2ZSBoZWFkZXIvcGFyYW1ldGVyIG5hbWVzIHRvIHJlZGFjdCBmcm9tIGxvZ2dpbmcuXG4gKiBAcHJvcGVydHkge0xvZ2dlckNvbmZpZ1tdfSBbbG9nZ2Vyc10gLSBMb2dnZXIgaW5zdGFuY2VzIChjb252ZXJ0ZWQgdG8gb3V0cHV0cyB3aGVuIGNvbmZpZ3VyZWQpLlxuICogQHByb3BlcnR5IHtMb2dnaW5nT3V0cHV0Q29uZmlnW119IFtvdXRwdXRzXSAtIEV4cGxpY2l0IGxvZ2dlciBvdXRwdXRzIChvdmVycmlkZXMgY29uc29sZS9maWxlIGRlZmF1bHRzIHdoZW4gcHJvdmlkZWQpLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gU3RydWN0dXJlU3FsQ29uZmlndXJhdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gW2VuYWJsZWRFbnZpcm9ubWVudHNdIC0gRW52aXJvbm1lbnRzIGFsbG93ZWQgdG8gd3JpdGUgc3RydWN0dXJlIHNxbCBmaWxlcyBkdXJpbmcgYXV0b21hdGljIG1pZ3JhdGlvbiBkdW1wcy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFtkaXNhYmxlZEVudmlyb25tZW50c10gLSBFbnZpcm9ubWVudHMgdGhhdCBzaG91bGQgc2tpcCB3cml0aW5nIHN0cnVjdHVyZSBzcWwgZmlsZXMuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7XCJiZWFjb25cIiB8IFwicG9sbGluZ1wifSBCYWNrZ3JvdW5kSm9ic0Rpc3BhdGNoU3RyYXRlZ3lcbiAqXG4gKiAtIGBcImJlYWNvblwiYCAoZGVmYXVsdCk6IGV2ZW50LWRyaXZlbiBkaXNwYXRjaC4gVGhlXG4gKiAgIGBiYWNrZ3JvdW5kLWpvYnMtbWFpbmAgcHJvY2VzcyBkcmFpbnMgdGhlIHF1ZXVlIG9uIGVucXVldWUsIG9uXG4gKiAgIHdvcmtlciByZWFkaW5lc3MsIG9uIEJlYWNvbiBicm9hZGNhc3RzIChzbyBjcm9zcy1wcm9jZXNzIGVucXVldWVzXG4gKiAgIHdha2UgaXQpLCBhbmQgYXJtcyBhIGBzZXRUaW1lb3V0YCBmb3IgdGhlIHNvb25lc3QgZnV0dXJlLXNjaGVkdWxlZFxuICogICBqb2IuIEZhbGxzIGJhY2sgZ3JhY2VmdWxseSB0byBkaXJlY3QgaW4tcHJvY2VzcyB0cmlnZ2VyaW5nIHdoZW5cbiAqICAgQmVhY29uIGlzIG5vdCBjb25maWd1cmVkLlxuICogLSBgXCJwb2xsaW5nXCJgOiBsZWdhY3kgbW9kZSwgcnVucyBhIGZpeGVkLWludGVydmFsIHBvbGwgb3ZlciB0aGVcbiAqICAgYGJhY2tncm91bmRfam9ic2AgdGFibGUgKHNlZSBgcG9sbEludGVydmFsTXNgKS5cbiAqL1xuXG4vKiogQHR5cGVkZWYge1wiYmFja2dyb3VuZFwiIHwgXCJpbmxpbmVcIn0gQmFja2dyb3VuZEpvYnNNb2RlICovXG4vKiogQHR5cGVkZWYge1wiY2FuZGlkYXRlXCIgfCBcImFjdGl2ZVwiIHwgXCJyZXRpcmVkXCJ9IEJhY2tncm91bmRKb2JzR2VuZXJhdGlvbkluaXRpYWxTdGF0ZSAqL1xuLyoqIEB0eXBlZGVmIHsoYXJnczoge2NvbmZpZ3VyYXRpb246IGltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSkgPT4gaW1wb3J0KFwiLi9iYWNrZ3JvdW5kLWpvYnMvYWRhcHRlci5qc1wiKS5kZWZhdWx0fSBCYWNrZ3JvdW5kSm9ic0FkYXB0ZXJGYWN0b3J5ICovXG4vKiogQHR5cGVkZWYge3R5cGVvZiBpbXBvcnQoXCIuL2JhY2tncm91bmQtam9icy9wbGF0Zm9ybS1qb2IuanNcIikuZGVmYXVsdH0gQmFja2dyb3VuZEpvYkNsYXNzICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gQmFja2dyb3VuZEpvYnNDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4vYmFja2dyb3VuZC1qb2JzL2FkYXB0ZXIuanNcIikuZGVmYXVsdCB8IEJhY2tncm91bmRKb2JzQWRhcHRlckZhY3Rvcnl9IFthZGFwdGVyXSAtIEFkYXB0ZXIgaW5zdGFuY2Ugb3Igc3luY2hyb25vdXMgZmFjdG9yeS4gQSBmYWN0b3J5IGNyZWF0ZXMgb25lIGFkYXB0ZXIgcGVyIGNvbmZpZ3VyYXRpb24gbGlmZWN5Y2xlOyB0aGUgZnJhbWV3b3JrIGNsb3NlcyBhZGFwdGVycyBpdCByZXNvbHZlcy5cbiAqIEBwcm9wZXJ0eSB7QmFja2dyb3VuZEpvYkNsYXNzW119IFtqb2JDbGFzc2VzXSAtIFN0YXRpYyBwb3J0YWJsZSBqb2IgY2xhc3NlcyBhdmFpbGFibGUgdG8gQnJvd3Nlci9FeHBvIGxvY2FsIGRpc3BhdGNoLiBEZWZhdWx0cyB0byBgW11gOyBOb2RlIGtlZXBzIGl0cyBmaWxlc3lzdGVtIHJlZ2lzdHJ5LlxuICogQHByb3BlcnR5IHtCYWNrZ3JvdW5kSm9ic01vZGV9IFttb2RlXSAtIGBcImJhY2tncm91bmRcImAgdXNlcyB0aGUgY29uZmlndXJlZCBhZGFwdGVyL3RyYW5zcG9ydCBhbmQgZHVyYWJsZSBxdWV1ZSBzZW1hbnRpY3M7IGBcImlubGluZVwiYCBwZXJmb3JtcyBpbW1lZGlhdGVseSB3aXRob3V0IGR1cmFibGUgcXVldWUgc3RhdGUuIERlZmF1bHRzIHRvIGBcImJhY2tncm91bmRcImAuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2dlbmVyYXRpb25JZF0gLSBPcHQtaW4gcmVsZWFzZSBnZW5lcmF0aW9uIGlkZW50aXR5LiBNdXN0IG1hdGNoIGBeW0EtWmEtejAtOV1bQS1aYS16MC05Ll8tXXswLDEyN30kYCBhbmQgYWdyZWUgd2l0aCBlbnZpcm9ubWVudC9BUEkvQ0xJIHNvdXJjZXMuXG4gKiBAcHJvcGVydHkge0JhY2tncm91bmRKb2JzR2VuZXJhdGlvbkluaXRpYWxTdGF0ZX0gW2luaXRpYWxHZW5lcmF0aW9uU3RhdGVdIC0gR2VuZXJhdGlvbi1hd2FyZSBib290IHN0YXRlLiBEZWZhdWx0cyB0byBgXCJjYW5kaWRhdGVcImA7IGludmFsaWQgd2l0aG91dCBgZ2VuZXJhdGlvbklkYC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbGlmZWN5Y2xlU29ja2V0UGF0aF0gLSBBYnNvbHV0ZSByZWxlYXNlLWxvY2FsIFVuaXggc29ja2V0IHVzZWQgYnkgYWNrbm93bGVkZ2VkIGFjdGl2YXRpb24gYW5kIHJldGlyZW1lbnQgY29tbWFuZHMuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2hvc3RdIC0gSG9zdG5hbWUgZm9yIHRoZSBiYWNrZ3JvdW5kIGpvYnMgbWFpbiBwcm9jZXNzLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtwb3J0XSAtIFBvcnQgZm9yIHRoZSBiYWNrZ3JvdW5kIGpvYnMgbWFpbiBwcm9jZXNzLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtkYXRhYmFzZUlkZW50aWZpZXJdIC0gRGF0YWJhc2UgaWRlbnRpZmllciB1c2VkIHRvIHN0b3JlIGJhY2tncm91bmQgam9icy4gQnJvd3Nlci9FeHBvIGxvY2FsIGRpc3BhdGNoIHVzZXMgdGhpcyBleGlzdGluZyBTUUxpdGUgZGF0YWJhc2UgYW5kIGRlZmF1bHRzIHRvIGBcImRlZmF1bHRcImAuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW21heENvbmN1cnJlbnRJbmxpbmVKb2JzXSAtIEhvdyBtYW55IGBmb3JrZWQ6IGZhbHNlYCBqb2JzIGEgc2luZ2xlXG4gKiAgIGBiYWNrZ3JvdW5kLWpvYnMtd29ya2VyYCBwcm9jZXNzIGlzIGFsbG93ZWQgdG8gcnVuIGluIHBhcmFsbGVsLiBDb25jdXJyZW5jeVxuICogICBpcyBhdCB0aGUgSlMgZXZlbnQtbG9vcCBsZXZlbDogZXZlcnkgY29uY3VycmVudCBqb2Igc2hhcmVzIHRoZSB3b3JrZXInc1xuICogICBwcm9jZXNzIGFuZCBEQiBjb25uZWN0aW9uIHBvb2wsIHNvIHRoaXMgc2hvdWxkIGZpdCB0aGUgcG9vbCBzaXplLCBub3QgdGhlXG4gKiAgIENQVSBjb3VudC4gRm9ya2luZyByZW1haW5zIHRoZSByaWdodCB0b29sIGZvciBtZW1vcnkgaXNvbGF0aW9uIGFjcm9zc1xuICogICBsb25nLXJ1bm5pbmcgam9icyBhbmQgZm9yIHVzaW5nIG1vcmUgY29yZXMuIERlZmF1bHQ6IGA0YC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbbWF4Q29uY3VycmVudEZvcmtlZEpvYnNdIC0gSG93IG1hbnkgb3V0LW9mLXByb2Nlc3NcbiAqICAgYFwiZm9ya2VkXCJgIG9yIGBcInNwYXduZWRcImAgam9icyBhIHNpbmdsZSBgYmFja2dyb3VuZC1qb2JzLXdvcmtlcmAgaXNcbiAqICAgYWxsb3dlZCB0byBrZWVwIGluIGZsaWdodC4gRGVmYXVsdDogYDRgLiBUaGlzIGlzIGEgcGVyLXdvcmtlciBzYWZldHkgY2FwO1xuICogICBmb3Igd29ya2xvYWQtc2hhcGVkIGxpbWl0cyB1c2UgcGVyLXF1ZXVlIGNhcHMgKGBxdWV1ZXNgKSBpbnN0ZWFkLCB3aGljaCBhcmVcbiAqICAgZW5mb3JjZWQgY2x1c3Rlci13aWRlIGFuZCBhcmUgaW1tdW5lIHRvIGR1cGxpY2F0ZSB3b3JrZXIgcHJvY2Vzc2VzLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtwb29sZWRSdW5uZXJDb3VudF0gLSBOdW1iZXIgb2Ygd2FybSwgcmV1c2FibGUgY2hpbGQgcnVubmVycyBvd25lZCBieSBlYWNoIHdvcmtlci4gUG9vbGVkIGNhcGFjaXR5IGlzIHNlcGFyYXRlIGZyb20gaW5saW5lIGFuZCBmb3JrZWQvc3Bhd25lZCBjYXBhY2l0eS4gRGVmYXVsdDogYDRgLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtwb29sZWRSdW5uZXJDb25jdXJyZW5jeV0gLSBOdW1iZXIgb2Ygam9icyBlYWNoIHBvb2xlZCBjaGlsZCBydW5zIGNvbmN1cnJlbnRseSBvbiBpdHMgb3duIGV2ZW50IGxvb3AuIFRvdGFsIHBlci13b3JrZXIgcG9vbGVkIGNhcGFjaXR5IGlzIGBwb29sZWRSdW5uZXJDb3VudCDDlyBwb29sZWRSdW5uZXJDb25jdXJyZW5jeWAuIGAxYCAoZGVmYXVsdCkga2VlcHMgZWFjaCBjaGlsZCBzZXJpYWw7IHJhaXNlIGl0IGZvciBJL08tYm91bmQgam9icyBzbyBhIGJvdW5kZWQgc2V0IG9mIGlzb2xhdGVkIHByb2Nlc3NlcyBoYW5kbGVzIGhpZ2ggY29uY3VycmVuY3kgKGxpa2UgdGhlIGlubGluZSBsYW5lKSB3aXRob3V0IG9uZSBwcm9jZXNzIHBlciBjb25jdXJyZW50IGpvYi4gRGVmYXVsdDogYDFgLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtwb29sZWRSdW5uZXJNYXhKb2JzXSAtIE51bWJlciBvZiBzZXF1ZW50aWFsIGpvYnMgYSBwb29sZWQgY2hpbGQgcnVucyBiZWZvcmUgaXQgaXMgcmVwbGFjZWQsIGJvdW5kaW5nIHByb2Nlc3MtbGV2ZWwgcmVzb3VyY2UgYWNjdW11bGF0aW9uLiBEZWZhdWx0OiBgMTAwYC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcG9vbGVkUnVubmVyTWF4UnNzQnl0ZXNdIC0gUGVhayBSU1MgKHRoZSBrZXJuZWwgYFZtSFdNYCBoaWdoLXdhdGVyIG1hcmsgcmVwb3J0ZWQgYnkgdGhlIGNoaWxkKSBhdCB3aGljaCBhIHBvb2xlZCBjaGlsZCBpcyByZXBsYWNlZCBhZnRlciBhbiBhY2tub3dsZWRnZWQgam9iLiBUaGUgY2hpbGQncyBwZWFrLCBub3QgaXRzIHNldHRsZWQgUlNTIGF0IGpvYi1vdXRjb21lIHRpbWUsIGlzIHRoZSB0cmlnZ2VyLCBzbyBhIGJ1cnN0IHdvcmtpbmctc2V0IHRoYXQgcmVjbGFpbXMgYmVmb3JlIHRoZSBvdXRjb21lIHN0aWxsIHJldGlyZXMgdGhlIGNoaWxkLiBEZWZhdWx0OiBgNTM2ODcwOTEyYCAoNTEyIE1pQikuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3Bvb2xlZFJ1bm5lck1heExpZmV0aW1lTXNdIC0gQWdlIGFmdGVyIGFuIGFja25vd2xlZGdlZCBqb2IgYXQgd2hpY2ggYSBwb29sZWQgY2hpbGQgaXMgcmVwbGFjZWQuIERlZmF1bHQ6IGAzNjAwMDAwYCAob25lIGhvdXIpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtydW5uZXJNYXhPbGRTcGFjZVNpemVNYl0gLSBWOCBoZWFwIGNhcCAoYC0tbWF4LW9sZC1zcGFjZS1zaXplYCwgTWlCKSBhcHBsaWVkIHRvIGV2ZXJ5IGJhY2tncm91bmQtam9icyBydW5uZXIgY2hpbGQgcHJvY2VzcyAocG9vbGVkLCBmb3JrZWQsIGFuZCBzcGF3bmVkKSBzbyBhIHNpbmdsZSBjaGlsZCBjYW4gbmV2ZXIgY29tbWl0IG11bHRpcGxlIEdCcyBvZiBoZWFwLiBEZWZhdWx0OiBgMjA0OGAuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3J1bm5lck1hbGxvY0FyZW5hTWF4XSAtIGBNQUxMT0NfQVJFTkFfTUFYYCBleHBvcnRlZCB0byBldmVyeSBiYWNrZ3JvdW5kLWpvYnMgcnVubmVyIGNoaWxkIHByb2Nlc3MsIGJvdW5kaW5nIGdsaWJjIHBlci10aHJlYWQgYXJlbmFzLiBEZWZhdWx0cyB0byBhbiBpbmhlcml0ZWQgYE1BTExPQ19BUkVOQV9NQVhgLCBlbHNlIGA0YC5cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywge21heENvbmN1cnJlbnQ/OiBudW1iZXIsIHByaW9yaXR5PzogbnVtYmVyfT59IFtxdWV1ZXNdIC0gUGVyLXF1ZXVlXG4gKiAgIGNvbmN1cnJlbmN5IGNhcHMgYW5kIGRpc3BhdGNoIHByaW9yaXRpZXMsIFNpZGVraXEtc3R5bGUuIEEgam9iIGRlY2xhcmVzIGl0cyBxdWV1ZSAoc3RhdGljXG4gKiAgIGBxdWV1ZWAgb24gdGhlIGpvYiBjbGFzcywgb3IgdGhlIGBxdWV1ZWAgZW5xdWV1ZSBvcHRpb247IGRlZmF1bHRzIHRvIGBcImRlZmF1bHRcImApLCBhbmRcbiAqICAgYHF1ZXVlc1tuYW1lXS5tYXhDb25jdXJyZW50YCBib3VuZHMgaG93IG1hbnkgam9icyBmcm9tIHRoYXQgcXVldWUgbWF5IGJlXG4gKiAgIGluIGZsaWdodCBhY3Jvc3MgdGhlIHdob2xlIGNsdXN0ZXIgKGVuZm9yY2VkIHZpYSBkdXJhYmxlIHBlci1rZXlcbiAqICAgY29uY3VycmVuY3ksIHNvIGl0IGhvbGRzIHJlZ2FyZGxlc3Mgb2YgaG93IG1hbnkgd29ya2VyIHByb2Nlc3NlcyBydW4pLlxuICogICBTaXplIGVhY2ggcXVldWUgdG8gaXRzIHdvcmtsb2FkOiBJL08tYm91bmQgcXVldWVzIChlLmcuIGJ1aWxkIHJ1bm5lcnNcbiAqICAgd2FpdGluZyBvbiByZW1vdGUgRG9ja2VyIHNlcnZlcnMpIGNhbiBydW4gZmFyIGFib3ZlIHRoZSBjb3JlIGNvdW50LCB3aGlsZVxuICogICBDUFUtYm91bmQgcXVldWVzIHNob3VsZCBzdGF5IG5lYXIgaXQuIGBxdWV1ZXNbbmFtZV0ucHJpb3JpdHlgIChkZWZhdWx0IGAwYClcbiAqICAgbWFrZXMgdGhlIG1haW4gcHJvY2VzcyBkaXNwYXRjaCBoaWdoZXItcHJpb3JpdHkgcXVldWVzIGJlZm9yZSBsb3dlci1wcmlvcml0eVxuICogICBvbmVzIHJlZ2FyZGxlc3Mgb2YgZW5xdWV1ZSBvcmRlciwgc28gYSBzbWFsbCB0aW1lLWNyaXRpY2FsIHF1ZXVlIGNhbiBuZXZlciBiZVxuICogICBzdGFydmVkIGJ5IGEgZmxvb2Qgb2YgbG93LXByaW9yaXR5IHdvcmsgc2hhcmluZyBhIHdvcmtlciBwb29sLiBVbmxpa2VcbiAqICAgU2lkZWtpcSdzIHN0cmljdCBxdWV1ZSBvcmRlcmluZywgcHJpb3JpdHkgY29tcG9zZXMgd2l0aCB0aGUgcGVyLXF1ZXVlIGNhcHM6XG4gKiAgIGEgaGlnaGVyLXByaW9yaXR5IHF1ZXVlIHRoYXQgaXMgYWxyZWFkeSBhdCBpdHMgYG1heENvbmN1cnJlbnRgIGlzIHNraXBwZWQgYW5kXG4gKiAgIGRpc3BhdGNoIGZhbGxzIHRocm91Z2ggdG8gdGhlIG5leHQgZWxpZ2libGUgbG93ZXItcHJpb3JpdHkgam9iLCBzbyBhIGJ1c3lcbiAqICAgaGlnaC1wcmlvcml0eSBxdWV1ZSBkb2VzIG5vdCBibG9jayBldmVyeXRoaW5nIGVsc2UuIFRoaXMgZmFsbHRocm91Z2ggaXMgYVxuICogICBwcm9wZXJ0eSBvZiB0aGUgcXVldWUtZGVyaXZlZCBjYXA7IGEgam9iIHRoYXQgc3VwcGxpZXMgaXRzIG93biBleHBsaWNpdFxuICogICBgY29uY3VycmVuY3lLZXlgL2BtYXhDb25jdXJyZW5jeWAgYnlwYXNzZXMgdGhlIHF1ZXVlIGNhcCBlbnRpcmVseSAoYW5cbiAqICAgZXhwbGljaXQga2V5IGFsd2F5cyB3aW5zIOKAlCBzZWUgYWJvdmUpIGFuZCBpcyBib3VuZGVkIG9ubHkgYnkgdGhhdCBrZXksIHNvIGl0XG4gKiAgIGlzIG5vdCBoZWxkIGJhY2sgYnkgdGhlIHF1ZXVlJ3MgY2FwIGFuZCBwcmlvcml0eSBzaW1wbHkgb3JkZXJzIGl0IG5vcm1hbGx5LlxuICogICBQcmlvcml0aWVzIG1heSBiZSBhbnkgbnVtYmVyLCBpbmNsdWRpbmcgbmVnYXRpdmUgdG8gc2luayBhIHF1ZXVlIGJlbG93IHRoZVxuICogICBkZWZhdWx0LiBKb2JzIHdpdGhpbiB0aGUgc2FtZSBwcmlvcml0eSBrZWVwIEZJRk8gKGBzY2hlZHVsZWRfYXRgLCB0aGVuXG4gKiAgIGBjcmVhdGVkX2F0YCkgb3JkZXIuIERlZmF1bHQ6IGB7fWAgKG5vIHF1ZXVlIGNhcHMsIGFsbCBxdWV1ZXMgcHJpb3JpdHkgYDBgKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgbnVsbH0gW3NjaGVkdWxlZEVucXVldWVUaW1lb3V0TXNdIC0gQm91bmRzIG9uZSBzY2hlZHVsZWQgZW5xdWV1ZSBhdHRlbXB0IGluIHRoZSBtYWluIHByb2Nlc3MuIEEgZHVyYWJsZSBlbnF1ZXVlIHRoYXQgbmV2ZXIgc2V0dGxlcyAod2VkZ2VkIERCIGNvbm5lY3Rpb24sIGNvbnRlbmRlZCBhZHZpc29yeSBsb2NrKSB3b3VsZCBvdGhlcndpc2Uga2VlcCBpdHMgc2NoZWR1bGUga2V5IHBlcm1hbmVudGx5IGluIGZsaWdodCwgc28gZXZlcnkgbGF0ZXIgdGljayBza2lwcGVkIGl0c2VsZiBhbmQgc2h1dGRvd24gY291bGQgbmV2ZXIgZHJhaW4uIE9uIHRpbWVvdXQgdGhlIGF0dGVtcHQgaXMgcmVwb3J0ZWQgYXMgYGJhY2tncm91bmQtam9icy1zY2hlZHVsZWQtZW5xdWV1ZS1zdGFsbGAgYW5kIHRoZSBrZXkgY2xlYXJzIGZvciB0aGUgbmV4dCB0aWNrLiBEZWZhdWx0OiAyMCBtaW51dGVzIOKAlCBkZWxpYmVyYXRlbHkgNSBtaW51dGVzIGFib3ZlIGBhZHZpc29yeUxvY2tBY3F1aXJlVGltZW91dE1zYCBzbyB0aGUgcHJlY2lzZSBsb2NrIGVycm9yIHN1cmZhY2VzIGZpcnN0LiBgbnVsbGAgb3B0cyBvdXQuXG4gKiBAcHJvcGVydHkge0JhY2tncm91bmRKb2JzRGlzcGF0Y2hTdHJhdGVneX0gW2Rpc3BhdGNoU3RyYXRlZ3ldIC0gSG93IHRoZSBtYWluIHByb2Nlc3NcbiAqICAgZGV0ZWN0cyBuZXcgd29yay4gRGVmYXVsdHMgdG8gYFwiYmVhY29uXCJgIChldmVudC1kcml2ZW4pLiBTZXQgdG8gYFwicG9sbGluZ1wiYFxuICogICB0byByZXN0b3JlIHRoZSBsZWdhY3kgZml4ZWQtaW50ZXJ2YWwgcG9sbC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcG9sbEludGVydmFsTXNdIC0gUG9sbCBpbnRlcnZhbCBpbiBtaWxsaXNlY29uZHMuIE9ubHkgdXNlZFxuICogICB3aGVuIGBkaXNwYXRjaFN0cmF0ZWd5ID09PSBcInBvbGxpbmdcImAuIERlZmF1bHQ6IGAxMDAwYC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbZHJhaW5TdG9yZU9wZXJhdGlvblRpbWVvdXRNc10gLSBCb3VuZHMgb25lIGRyYWluLWNyaXRpY2FsXG4gKiAgIHN0b3JlIG9wZXJhdGlvbiBpbiB0aGUgbWFpbiBwcm9jZXNzOiB0aGUgcXVldWVkLWpvYiBsb29rdXAsIHRoZSBkdXJhYmxlXG4gKiAgIGhhbmRvZmYgY2xhaW0sIGFuZCBoYW5kb2ZmLXJlY292ZXJ5IHRyYW5zaXRpb25zLiBBIHN0b3JlIGNhbGwgdGhhdCBuZXZlclxuICogICBzZXR0bGVzICh3ZWRnZWQgREIgY29ubmVjdGlvbiwgbG9zdCBhY2tub3dsZWRnZW1lbnQpIHdvdWxkIG90aGVyd2lzZSBmcmVlemVcbiAqICAgdGhlIGNvYWxlc2NlZCBkcmFpbiBhbmQgZXZlcnkgbGF0ZXIgZGlzcGF0Y2ggcXVldWVkIGJlaGluZCBpdCB1bnRpbCB0aGVcbiAqICAgcHJvY2VzcyBpcyBraWxsZWQ7IG9uIHRpbWVvdXQgdGhlIGRyYWluIGZhaWxzIGludG8gaXRzIGV4aXN0aW5nXG4gKiAgIGVycm9yL3JldHJ5IHBhdGggYW5kIHRoZSBzdGFsbCBpcyByZXBvcnRlZCBhcyBhIGZyYW1ld29yayBlcnJvci5cbiAqICAgRGVmYXVsdDogYDYwMDAwYC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgbnVsbH0gW2pvYlRpbWVvdXRNc10gLSBXYWxsLWNsb2NrIGJhY2tzdG9wLCBpbiBtcywgZm9yIGFcbiAqICAgYFwiZm9ya2VkXCJgIGpvYiBydW5uZXIuIEEgZm9ya2VkIGpvYiBzdGlsbCBydW5uaW5nIGFmdGVyIHRoaXMgaXMgdGVybWluYXRlZFxuICogICAoU0lHVEVSTSwgdGhlbiBTSUdLSUxMIGFmdGVyIHRoZSByZWFwaW5nIGdyYWNlKSBhbmQgcmVwb3J0ZWQgZmFpbGVkLCBzbyBhXG4gKiAgIHNpbmdsZSBnZW51aW5lbHktaHVuZyBydW5uZXIgY2FuJ3QgcGluIGEgZHJhaW5pbmcgd29ya2VyIOKAlCBhbmQgaXRzIGZ1bGwtYXBwXG4gKiAgIGJvb3QgYW5kIERCIGNvbm5lY3Rpb25zIOKAlCBpbmRlZmluaXRlbHkgKGUuZy4gYWNyb3NzIGEgZGVwbG95IHdoZXJlIGEgcmV0aXJlZFxuICogICB3b3JrZXIgZHJhaW5zIGluLWZsaWdodCBqb2JzKS4gVGhpcyBpcyBhIGNvYXJzZSBzYWZldHkgbmV0LCBub3QgcGVyLWpvYlxuICogICB0dW5pbmc6IHNldCBpdCB3ZWxsIGFib3ZlIHRoZSBsb25nZXN0IGxlZ2l0aW1hdGUgZm9ya2VkIGpvYiAoYnVpbGQgcnVubmVycyxcbiAqICAgbG9uZyBpbXBvcnRzKSBzbyBvbmx5IGdlbnVpbmVseS1zdHVjayBydW5uZXJzIGFyZSBraWxsZWQuIE9taXQsIGBudWxsYCwgb3JcbiAqICAgYDw9IDBgIHRvIGRpc2FibGUgKGRlZmF1bHQpLCB3aGljaCBwcmVzZXJ2ZXMgdGhlIHByaW9yIHVuYm91bmRlZCBiZWhhdmlvci5cbiAqIEBwcm9wZXJ0eSB7QmFja2dyb3VuZEpvYnNSZXRlbnRpb25Db25maWd1cmF0aW9ufSBbcmV0ZW50aW9uXSAtIFJldGVudGlvbi9wcnVuaW5nXG4gKiAgIG9mIHRlcm1pbmFsIGpvYiByb3dzLiBXaXRob3V0IHBydW5pbmcgdGhlIGpvYnMgdGFibGUgZ3Jvd3MgdW5ib3VuZGVkXG4gKiAgIChjb21wbGV0ZWQgcm93cyBhY2N1bXVsYXRlIGZvcmV2ZXIpLCB3aGljaCBibG9hdHMgc3RvcmFnZSBhbmQgaW5kZXhlcyBhbmRcbiAqICAgZXZlbnR1YWxseSBzbG93cyBkaXNwYXRjaC4gVGhlIG1haW4gcHJvY2VzcyBzd2VlcHMgdGVybWluYWwgcm93cyBwYXN0IHRoZWlyXG4gKiAgIHdpbmRvdyBvbiBhbiBpbnRlcnZhbC5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEJhY2tncm91bmRKb2JzUmV0ZW50aW9uQ29uZmlndXJhdGlvblxuICogQHByb3BlcnR5IHtudW1iZXIgfCBudWxsfSBbY29tcGxldGVkVHRsTXNdIC0gRGVsZXRlIGBjb21wbGV0ZWRgIGpvYnMgd2hvc2VcbiAqICAgYGNvbXBsZXRlZF9hdF9tc2AgaXMgb2xkZXIgdGhhbiB0aGlzIG1hbnkgbXMuIGBudWxsYCBvciBgPD0gMGAgZGlzYWJsZXNcbiAqICAgY29tcGxldGVkIHBydW5pbmcuIERlZmF1bHQ6IGA2MDQ4MDAwMDBgICg3IGRheXMpLlxuICogQHByb3BlcnR5IHtudW1iZXIgfCBudWxsfSBbZmFpbGVkVHRsTXNdIC0gRGVsZXRlIHRlcm1pbmFsIGBmYWlsZWRgL2BvcnBoYW5lZGBcbiAqICAgam9icyBvbGRlciB0aGFuIHRoaXMgbWFueSBtcy4gYG51bGxgIG9yIGA8PSAwYCBkaXNhYmxlcyAoa2VlcHMgdGhlbSBmb3JcbiAqICAgZGVidWdnaW5nKS4gRGVmYXVsdDogYDI1OTIwMDAwMDBgICgzMCBkYXlzKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbYmF0Y2hTaXplXSAtIFJvd3MgZGVsZXRlZCBwZXIgYmF0Y2guIERlZmF1bHQ6IGAxMDAwYC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbc3dlZXBJbnRlcnZhbE1zXSAtIEhvdyBvZnRlbiB0aGUgcmV0ZW50aW9uIHN3ZWVwIHJ1bnMuXG4gKiAgIERlZmF1bHQ6IGAzNjAwMDAwYCAoMSBob3VyKS5cbiAqL1xuLyoqXG4gKiBGdWxseS1yZXNvbHZlZCByZXRlbnRpb24gY29uZmlnIGFzIHJldHVybmVkIGJ5IGBnZXRCYWNrZ3JvdW5kSm9ic0NvbmZpZygpYFxuICogKGV2ZXJ5IGZpZWxkIGRlZmF1bHRlZCksIGFzIG9wcG9zZWQgdG8gdGhlIHBhcnRpYWwgdXNlci1wcm92aWRlZCBpbnB1dC5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IFJlc29sdmVkQmFja2dyb3VuZEpvYnNSZXRlbnRpb25Db25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge251bWJlciB8IG51bGx9IGNvbXBsZXRlZFR0bE1zIC0gUmVzb2x2ZWQgY29tcGxldGVkLWpvYiBUVEwgaW4gbXMgKGBudWxsYCBkaXNhYmxlcykuXG4gKiBAcHJvcGVydHkge251bWJlciB8IG51bGx9IGZhaWxlZFR0bE1zIC0gUmVzb2x2ZWQgZmFpbGVkL29ycGhhbmVkIFRUTCBpbiBtcyAoYG51bGxgIGRpc2FibGVzKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBiYXRjaFNpemUgLSBSZXNvbHZlZCBkZWxldGUgYmF0Y2ggc2l6ZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBzd2VlcEludGVydmFsTXMgLSBSZXNvbHZlZCBzd2VlcCBpbnRlcnZhbCBpbiBtcy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEJlYWNvbkNvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2VuYWJsZWRdIC0gV2hldGhlciB0byBjb25uZWN0IHRvIGEgQmVhY29uIGJyb2tlci4gRGVmYXVsdHMgdG8gZmFsc2UgdW5sZXNzIGBob3N0YC9gcG9ydGAgb3IgYGluUHJvY2VzczogdHJ1ZWAgYXJlIHNldCwgb3IgZW52IHZhcnMgYXJlIHByZXNlbnQuIEV4cGxpY2l0IGBmYWxzZWAgZGlzYWJsZXMgQmVhY29uIGV2ZW4gd2hlbiBlbnYgdmFycyBhcmUgc2V0LlxuICogQHByb3BlcnR5IHtib29sZWFufSBbaW5Qcm9jZXNzXSAtIFdoZW4gdHJ1ZSwgdXNlIGEgbW9kdWxlLWxldmVsIGluLXByb2Nlc3MgYnJva2VyIHNpbmdsZXRvbiBpbnN0ZWFkIG9mIGNvbm5lY3Rpbmcgb3ZlciBUQ1AuIE11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIGBob3N0YC9gcG9ydGAuIFVzZWZ1bCBmb3IgdGVzdHMgYW5kIHNpbmdsZS1wcm9jZXNzIGRlcGxveW1lbnRzLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtob3N0XSAtIEhvc3RuYW1lIG9mIHRoZSBCZWFjb24gYnJva2VyIGRhZW1vbi5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcG9ydF0gLSBQb3J0IG9mIHRoZSBCZWFjb24gYnJva2VyIGRhZW1vbi5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcGVlclR5cGVdIC0gT3B0aW9uYWwgaHVtYW4tcmVhZGFibGUgbGFiZWwgZm9yIHRoaXMgcGVlciAoZS5nLiBcInNlcnZlclwiLCBcImJhY2tncm91bmQtam9icy13b3JrZXJcIikuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3VucmVhY2hhYmxlUmVwb3J0TXNdIC0gR3JhY2Ugd2luZG93IChtcykgYSBiZWFjb24gY29ubmVjdC9kaXNjb25uZWN0IGJsaXAgbXVzdCBwZXJzaXN0IGJlZm9yZSBpdCBpcyByZXBvcnRlZCBhcyBhIGZyYW1ld29yay1lcnJvci4gVHJhbnNpZW50IG91dGFnZXMgdGhhdCByZWNvdmVyIHdpdGhpbiB0aGlzIHdpbmRvdyAoZS5nLiBhIGRlcGxveSByZXN0YXJ0aW5nIHRoZSBicm9rZXIpIGFyZSBub3QgcmVwb3J0ZWQuIERlZmF1bHRzIHRvIDMwMDAwLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gSHR0cENvbXByZXNzaW9uQ29uZmlndXJhdGlvblxuICogQHByb3BlcnR5IHtib29sZWFufSBbZW5hYmxlZF0gLSBXaGV0aGVyIGJ1ZmZlcmVkIHJlc3BvbnNlIGNvbXByZXNzaW9uIGlzIGVuYWJsZWQuIERlZmF1bHRzIHRvIHRydWU7IHNldCBmYWxzZSB0byBkaXNhYmxlIGdsb2JhbGx5LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFt0aHJlc2hvbGRdIC0gTWluaW11bSBidWZmZXJlZCBib2R5IHNpemUgaW4gYnl0ZXMgYmVmb3JlIGNvbXByZXNzaW9uIGlzIGFwcGxpZWQuIERlZmF1bHRzIHRvIDEwMjQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2Jyb3RsaVF1YWxpdHldIC0gQnJvdGxpIGVuY29kZXIgcXVhbGl0eSAoMC0xMSkuIERlZmF1bHRzIHRvIDQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2d6aXBMZXZlbF0gLSBHemlwIGNvbXByZXNzaW9uIGxldmVsICgwLTkpLiBEZWZhdWx0cyB0byA2LlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gTm9ybWFsaXplZEh0dHBDb21wcmVzc2lvbkNvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZW5hYmxlZCAtIFdoZXRoZXIgYnVmZmVyZWQgSFRUUCByZXNwb25zZSBjb21wcmVzc2lvbiBpcyBlbmFibGVkLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHRocmVzaG9sZCAtIE1pbmltdW0gYnVmZmVyZWQgYm9keSBzaXplIGluIGJ5dGVzIGJlZm9yZSBjb21wcmVzc2lvbiBpcyBhcHBsaWVkLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJyb3RsaVF1YWxpdHkgLSBCcm90bGkgZW5jb2RlciBxdWFsaXR5ICgwLTExKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBnemlwTGV2ZWwgLSBHemlwIGNvbXByZXNzaW9uIGxldmVsICgwLTkpLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gSHR0cFJlcXVlc3RCb2R5UG9saWN5UmVzb2x2ZXJBcmdzXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IGhlYWRlcnMgLSBDb21wbGV0ZSByZXF1ZXN0IGhlYWRlcnMgYXMgcmVjZWl2ZWQgYnkgdGhlIHBhcnNlci5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBodHRwTWV0aG9kIC0gVXBwZXJjYXNlIEhUVFAgbWV0aG9kLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBhdGggLSBSZXF1ZXN0IHRhcmdldCwgaW5jbHVkaW5nIGl0cyBxdWVyeSBzdHJpbmcgd2hlbiBwcmVzZW50LlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gSHR0cFJlcXVlc3RCb2R5UG9saWN5XG4gKiBAcHJvcGVydHkge251bWJlcn0gW21heFJlcXVlc3RCb2R5Qnl0ZXNdIC0gUGVyLXJlcXVlc3QgZGVjb2RlZCBib2R5IGxpbWl0LiBGYWxscyBiYWNrIHRvIHRoZSBnbG9iYWwgbGltaXQgd2hlbiBvbWl0dGVkLlxuICogQHByb3BlcnR5IHtcInBhcnNlZFwiIHwgXCJyYXdcIn0gW21vZGVdIC0gUGFyc2VkIHBhcmFtcyBieSBkZWZhdWx0OyByYXcgcHJlc2VydmVzIGV4YWN0IGJ5dGVzIGFuZCBza2lwcyBib2R5IGRlY29kaW5nLlxuICovXG5cbi8qKiBAdHlwZWRlZiB7KGFyZ3M6IEh0dHBSZXF1ZXN0Qm9keVBvbGljeVJlc29sdmVyQXJncykgPT4gSHR0cFJlcXVlc3RCb2R5UG9saWN5IHwgdW5kZWZpbmVkfSBIdHRwUmVxdWVzdEJvZHlQb2xpY3lSZXNvbHZlciAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFJlc29sdmVkSHR0cFJlcXVlc3RCb2R5UG9saWN5XG4gKiBAcHJvcGVydHkge251bWJlciB8IHVuZGVmaW5lZH0gbWF4UmVxdWVzdEJvZHlCeXRlcyAtIEVmZmVjdGl2ZSBkZWNvZGVkIGJvZHkgbGltaXQuXG4gKiBAcHJvcGVydHkge1wicGFyc2VkXCIgfCBcInJhd1wifSBtb2RlIC0gRWZmZWN0aXZlIGJvZHkgaGFuZGxpbmcgbW9kZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEh0dHBTZXJ2ZXJDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW4gfCBIdHRwQ29tcHJlc3Npb25Db25maWd1cmF0aW9ufSBbY29tcHJlc3Npb25dIC0gQnVmZmVyZWQgcmVzcG9uc2UgY29tcHJlc3Npb24uIEVuYWJsZWQgd2l0aCBkb2N1bWVudGVkIGRlZmF1bHRzIHdoZW4gYWJzZW50OyBmYWxzZSBvciB7ZW5hYmxlZDogZmFsc2V9IGRpc2FibGVzIGl0IGdsb2JhbGx5LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtob3N0XSAtIEhvc3RuYW1lIHRvIGJpbmQgdGhlIEhUVFAgc2VydmVyIHRvLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbaW5Qcm9jZXNzXSAtIFJ1biBIVFRQIGhhbmRsZXJzIGluIHRoZSBtYWluIHRocmVhZCBpbnN0ZWFkIG9mIHdvcmtlciB0aHJlYWRzLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFttYXhCdWZmZXJlZFJlc3BvbnNlQm9keUJ5dGVzXSAtIE1heGltdW0gVVRGLTgvYmluYXJ5IGJ5dGUgbGVuZ3RoIGFjY2VwdGVkIGJ5IGJ1ZmZlcmVkIHJlc3BvbnNlIGJvZGllcy4gVW5ib3VuZGVkIHdoZW4gYWJzZW50OyBzdHJlYW1lZCBmaWxlIHJlc3BvbnNlcyBhcmUgdW5hZmZlY3RlZC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbbWF4UmVxdWVzdEJvZHlCeXRlc10gLSBNYXhpbXVtIGRlY29kZWQgcmVxdWVzdC1ib2R5IGJ5dGVzIGFjY2VwdGVkIGJlZm9yZSByb3V0aW5nLiBVbmJvdW5kZWQgd2hlbiBhYnNlbnQuXG4gKiBAcHJvcGVydHkge0h0dHBSZXF1ZXN0Qm9keVBvbGljeVJlc29sdmVyfSBbcmVxdWVzdEJvZHlQb2xpY3lSZXNvbHZlcl0gLSBPcHRpb25hbCBzeW5jaHJvbm91cyBoZWFkZXItc3RhZ2UgcmVzb2x2ZXIgZm9yIHBlci1yZXF1ZXN0IGxpbWl0cyBhbmQgcmF3LWJvZHkgaGFuZGxpbmcuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW21heFdvcmtlcnNdIC0gQmFja3dhcmQtY29tcGF0aWJsZSBhbGlhcyBmb3Igd29ya2Vycy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcG9ydF0gLSBQb3J0IHRvIGJpbmQgdGhlIEhUVFAgc2VydmVyIHRvLlxuICogQHByb3BlcnR5IHt7bWF4UGVuZGluZ0J5dGVzPzogbnVtYmVyLCBtYXhQZW5kaW5nTWVzc2FnZXM/OiBudW1iZXJ9fSBbd2Vic29ja2V0SW5ib3VuZFF1ZXVlXSAtIFBlci1zZXNzaW9uIHJldGFpbmVkIGluYm91bmQgV2ViU29ja2V0IG1lc3NhZ2UgbGltaXRzLlxuICogQHByb3BlcnR5IHt7bWF4UGVuZGluZ0J5dGVzPzogbnVtYmVyLCBtYXhQZW5kaW5nRnJhbWVzPzogbnVtYmVyfX0gW3dlYnNvY2tldE91dGJvdW5kUXVldWVdIC0gUGVyLWNsaWVudCByZXRhaW5lZCBvdXRib3VuZCBXZWJTb2NrZXQgZnJhbWUgbGltaXRzLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFt3b3JrZXJzXSAtIFdvcmtlciBoYW5kbGVycyB0byBzdGFydCBmb3IgdGhlIEhUVFAgc2VydmVyLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gU2NoZWR1bGVkQmFja2dyb3VuZEpvYkV2ZXJ5T3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXIgfCBzdHJpbmd9IFtmaXJzdEluXSAtIERlbGF5IGJlZm9yZSB0aGUgZmlyc3QgZW5xdWV1ZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFNjaGVkdWxlZEJhY2tncm91bmRKb2JDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge0FycmF5PFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0gW2FyZ3NdIC0gQXJndW1lbnRzIHBhc3NlZCB0byB0aGUgam9iIHdoZW4gZW5xdWV1ZWQuXG4gKiBAcHJvcGVydHkge3R5cGVvZiBpbXBvcnQoXCIuL2JhY2tncm91bmQtam9icy9qb2IuanNcIikuZGVmYXVsdH0gY2xhc3MgLSBKb2IgY2xhc3MgdG8gZW5xdWV1ZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbY3Jvbl0gLSBDcm9udGFiIGV4cHJlc3Npb24gKDUtZmllbGQgUE9TSVgsIHBsdXMgYEBob3VybHlgL2BAZGFpbHlgL2BAd2Vla2x5YC9gQG1vbnRobHlgL2BAeWVhcmx5YC9gQG1pZG5pZ2h0YCkuIE11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIGBldmVyeWAuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtlbmFibGVkXSAtIFdoZXRoZXIgdGhlIHNjaGVkdWxlIGlzIGVuYWJsZWQuXG4gKiBAcHJvcGVydHkge251bWJlciB8IHN0cmluZyB8IFtudW1iZXIgfCBzdHJpbmcsIFNjaGVkdWxlZEJhY2tncm91bmRKb2JFdmVyeU9wdGlvbnNdfSBbZXZlcnldIC0gUmVwZWF0IGludGVydmFsLiBFaXRoZXIgYGV2ZXJ5YCBvciBgY3JvbmAgbXVzdCBiZSBzZXQuXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4vYmFja2dyb3VuZC1qb2JzL3R5cGVzLmpzXCIpLkJhY2tncm91bmRKb2JPcHRpb25zfSBbb3B0aW9uc10gLSBKb2Igb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSBWZWxvY2lvdXNQYXJhbXNcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCIuL2Zyb250ZW5kLW1vZGVscy9xdWVyeS5qc1wiKS5Gcm9udGVuZE1vZGVsVHJhbnNwb3J0VmFsdWU+fSBDbGllbnRFcnJvclBheWxvYWRSZXBvcnRlclBheWxvYWRcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEVycm9yUmVxdWVzdERldGFpbHNcbiAqIEBwcm9wZXJ0eSB7UmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT59IFtib2R5XSAtIFNhbml0aXplZCBwYXJzZWQgcmVxdWVzdCBib2R5LCB3aGVuIGF2YWlsYWJsZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBodHRwTWV0aG9kIC0gUmVxdWVzdCBIVFRQIG1ldGhvZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwYXRoIC0gUmVxdWVzdCBwYXRoLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gQ2xpZW50RXJyb3JQYXlsb2FkQ29udGV4dFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNvbnRyb2xsZXIgLSBDb250cm9sbGVyIGNsYXNzIG5hbWUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2FjdGlvbl0gLSBDb250cm9sbGVyIGFjdGlvbiBvciBlbmRwb2ludCBsYWJlbC5cbiAqIEBwcm9wZXJ0eSB7XCJpbmRleFwiIHwgXCJmaW5kXCIgfCBcImNyZWF0ZVwiIHwgXCJ1cGRhdGVcIiB8IFwiZGVzdHJveVwiIHwgXCJhdHRhY2hcIiB8IFwiYXR0YWNobWVudExpc3RcIiB8IFwiZG93bmxvYWRcIiB8IFwidXJsXCIgfCBcImN1c3RvbS1jb21tYW5kXCJ9IFtjb21tYW5kVHlwZV0gLSBGcm9udGVuZC1tb2RlbCBjb21tYW5kIHR5cGUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2NvcnJlbGF0aW9uSWRdIC0gU2VydmVyLWdlbmVyYXRlZCBpZGVudGlmaWVyIHNoYXJlZCBieSBhbiB1bmV4cGVjdGVkIGNsaWVudCBlcnJvciBhbmQgZnJhbWV3b3JrIHJlcG9ydHMuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtleHBlY3RlZEVycm9yXSAtIFdoZXRoZXIgdGhlIGVycm9yIGlzIGFuIGV4cGVjdGVkIHVzZXItZmxvdyBmYWlsdXJlLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbZnJvbnRlbmRNb2RlbEVuZHBvaW50XSAtIFdoZXRoZXIgdGhlIGVycm9yIGNhbWUgZnJvbSB0aGUgZnJvbnRlbmQtbW9kZWwgZW5kcG9pbnQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW21vZGVsXSAtIEZyb250ZW5kLW1vZGVsIG5hbWUgZnJvbSB0aGUgZmFpbGVkIHJlcXVlc3QuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3JlcXVlc3RJZF0gLSBTaGFyZWQgZnJvbnRlbmQtbW9kZWwgcmVxdWVzdCBpZC5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHsoYXJnczoge1xuICogICBjb250ZXh0OiBDbGllbnRFcnJvclBheWxvYWRDb250ZXh0LFxuICogICBlcnJvcjogRXJyb3IsXG4gKiAgIHJlcXVlc3Q6IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3JlcXVlc3QuanNcIikuZGVmYXVsdCB8IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3dlYnNvY2tldC1yZXF1ZXN0LmpzXCIpLmRlZmF1bHQgfCB1bmRlZmluZWQsXG4gKiAgIHJlcXVlc3REZXRhaWxzOiBFcnJvclJlcXVlc3REZXRhaWxzIHwgbnVsbFxuICogfSkgPT4gUHJvbWlzZTxDbGllbnRFcnJvclBheWxvYWRSZXBvcnRlclBheWxvYWQgfCB2b2lkPiB8IENsaWVudEVycm9yUGF5bG9hZFJlcG9ydGVyUGF5bG9hZCB8IHZvaWR9IENsaWVudEVycm9yUGF5bG9hZFJlcG9ydGVyVHlwZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge1JlY29yZDxzdHJpbmcsIHVua25vd24+ICYge2NvbmZpZ3VyYXRpb24/OiBpbXBvcnQoXCIuL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdCwgY3VycmVudERldmljZT86IHVua25vd24sIGN1cnJlbnRVc2VyPzogdW5rbm93biwgbW9kZWxSZWdpc3RyeT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwge21vZGVsOiAobmFtZTogc3RyaW5nKSA9PiB1bmtub3dufSwgbm93PzogRGF0ZSB8ICgoKSA9PiBEYXRlKSwgb2ZmbGluZUdyYW50PzogdW5rbm93biwgcGFyYW1zPzogVmVsb2Npb3VzUGFyYW1zLCByZXF1ZXN0PzogaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvcmVxdWVzdC5qc1wiKS5kZWZhdWx0IHwgaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvd2Vic29ja2V0LXJlcXVlc3QuanNcIikuZGVmYXVsdCwgcmVzb3VyY2VSdW50aW1lPzogXCJiYWNrZW5kXCIgfCBcImZyb250ZW5kXCIgfCBcIm9mZmxpbmVcIn19IFZlbG9jaW91c0xvb3NlT2JqZWN0XG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7bmV3IChhcmdzOiB7YXR0YWNobWVudE5hbWU/OiBzdHJpbmcsIGNvbmZpZ3VyYXRpb246IGltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0LCBtb2RlbENsYXNzPzogdHlwZW9mIGltcG9ydChcIi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQsIG5hbWU/OiBzdHJpbmcsIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj59KSA9PiBvYmplY3R9IEF0dGFjaG1lbnREcml2ZXJDb25zdHJ1Y3RvclxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gU2NoZWR1bGVkQmFja2dyb3VuZEpvYnNDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIFNjaGVkdWxlZEJhY2tncm91bmRKb2JDb25maWd1cmF0aW9uPn0gam9icyAtIFNjaGVkdWxlZCBqb2JzIGtleWVkIGJ5IG5hbWUuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7KGFyZ3M6IHtjb25maWd1cmF0aW9uOiBpbXBvcnQoXCIuL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0pID0+IFNjaGVkdWxlZEJhY2tncm91bmRKb2JzQ29uZmlndXJhdGlvbiB8IFByb21pc2U8U2NoZWR1bGVkQmFja2dyb3VuZEpvYnNDb25maWd1cmF0aW9uPn0gU2NoZWR1bGVkQmFja2dyb3VuZEpvYnNMb2FkZXJUeXBlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBBdHRhY2htZW50RHJpdmVyQ29uZmlndXJhdGlvblxuICogQHByb3BlcnR5IHsoYXJnczoge2NvbmZpZ3VyYXRpb246IGltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0LCBuYW1lOiBzdHJpbmcsIG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0pID0+IFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0gW2NyZWF0ZV0gLSBPcHRpb25hbCBmYWN0b3J5IGZvciBhIGN1c3RvbSBhdHRhY2htZW50IGRyaXZlciBpbnN0YW5jZS5cbiAqIEBwcm9wZXJ0eSB7QXR0YWNobWVudERyaXZlckNvbnN0cnVjdG9yfSBbZHJpdmVyQ2xhc3NdIC0gT3B0aW9uYWwgY3VzdG9tIGF0dGFjaG1lbnQgZHJpdmVyIGNsYXNzLlxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj59IFtpbnN0YW5jZV0gLSBPcHRpb25hbCBjdXN0b20gYXR0YWNobWVudCBkcml2ZXIgaW5zdGFuY2UuXG4gKi9cblxuLyoqXG4gKiBDbGllbnQtc2FmZSBzeW5jaHJvbml6YXRpb24gcG9saWN5IGRlY2xhcmVkIHdpdGggYSBtb2RlbCBhdHRhY2htZW50LlxuICogQHR5cGVkZWYge29iamVjdH0gQXR0YWNobWVudFN5bmNDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge1wiZWFnZXJcIiB8IFwib24tZGVtYW5kXCJ9IGZldGNoIC0gV2hldGhlciBjbGllbnRzIHByZWZldGNoIHRoZSBhdHRhY2htZW50IG9yIHdhaXQgdW50aWwgaXQgaXMgcmVxdWVzdGVkLlxuICogQHByb3BlcnR5IHtcIm9wdGlvbmFsXCIgfCBcInJlcXVpcmVkXCJ9IG9mZmxpbmVSZXF1aXJlbWVudCAtIFdoZXRoZXIgYW4gb2ZmbGluZS1yZWFkeSBzY29wZSByZXF1aXJlcyB0aGUgYXR0YWNobWVudCBieXRlcy5cbiAqIEBwcm9wZXJ0eSB7XCJkdXJhYmxlXCIgfCBcImV2aWN0YWJsZVwifSByZXRlbnRpb24gLSBXaGV0aGVyIGNsaWVudHMgbWF5IGV2aWN0IHRoZSBhdHRhY2htZW50IHVuZGVyIHN0b3JhZ2UgcHJlc3N1cmUuXG4gKi9cblxuLyoqXG4gKiBNb2RlbCBhdHRhY2htZW50IGRlY2xhcmF0aW9uIHJldGFpbmVkIGJ5IHRoZSByZWNvcmQgY2xhc3MuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBSZWNvcmRBdHRhY2htZW50Q29uZmlndXJhdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmcgfCBBdHRhY2htZW50RHJpdmVyQ29uc3RydWN0b3IgfCBSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj59IFtkcml2ZXJdIC0gQXR0YWNobWVudCBkcml2ZXIgbmFtZSwgY2xhc3MsIG9yIGluc3RhbmNlLlxuICogQHByb3BlcnR5IHtBdHRhY2htZW50U3luY0NvbmZpZ3VyYXRpb259IFtzeW5jXSAtIENsaWVudC1zYWZlIHN5bmNocm9uaXplZCBhc3NldCBwb2xpY3kuXG4gKiBAcHJvcGVydHkge1wiaGFzT25lXCIgfCBcImhhc01hbnlcIn0gdHlwZSAtIEF0dGFjaG1lbnQgY2FyZGluYWxpdHkuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBBdHRhY2htZW50c0NvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZGVmYXVsdERyaXZlcl0gLSBEZWZhdWx0IGF0dGFjaG1lbnQgc3RvcmFnZSBkcml2ZXIgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgQXR0YWNobWVudERyaXZlckNvbmZpZ3VyYXRpb24gJiBSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj4+fSBbZHJpdmVyc10gLSBOYW1lZCBhdHRhY2htZW50IGRyaXZlciBjb25maWd1cmF0aW9ucy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2FsbG93UGF0aElucHV0XSAtIFdoZXRoZXIgYHtwYXRoOiAuLi59YCBhdHRhY2htZW50IGlucHV0IGlzIGFsbG93ZWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbYWxsb3dlZFBhdGhQcmVmaXhlc10gLSBPcHRpb25hbCBhbGxvd2xpc3Qgb2YgZGlyZWN0b3JpZXMgZm9yIGB7cGF0aDogLi4ufWAgaW5wdXQuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBNYWlsZXJCYWNrZW5kXG4gKiBAcHJvcGVydHkgeyhhcmdzOiB7cGF5bG9hZDogaW1wb3J0KFwiLi9tYWlsZXIuanNcIikuTWFpbGVyRGVsaXZlcnlQYXlsb2FkLCBjb25maWd1cmF0aW9uOiBpbXBvcnQoXCIuL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0pID0+IFByb21pc2U8UmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+IHwgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT59IGRlbGl2ZXIgLSBEZWxpdmVyIGEgbWFpbGVyIHBheWxvYWQuXG4gKiBAcHJvcGVydHkgeygpID0+IGltcG9ydChcIi4vbWFpbGVyLmpzXCIpLk1haWxlckRlbGl2ZXJ5SWRlbXBvdGVuY3lDYXBhYmlsaXR5fSBbZGVsaXZlcnlJZGVtcG90ZW5jeUNhcGFiaWxpdHldIC0gRXhwbGljaXQgcHJvdmlkZXItYmFja2VkIGR1cGxpY2F0ZS1zdXBwcmVzc2lvbiBjYXBhYmlsaXR5LiBHZW5lcmljIFNNVFAgb21pdHMgdGhpcyBhbmQgcmVtYWlucyBhdC1sZWFzdC1vbmNlLlxuICogQHByb3BlcnR5IHsoYXJnczoge3BheWxvYWQ6IGltcG9ydChcIi4vbWFpbGVyLmpzXCIpLk1haWxlckRlbGl2ZXJ5UGF5bG9hZH0pID0+IGltcG9ydChcIi4vbWFpbGVyLmpzXCIpLk1haWxlckRlbGl2ZXJ5UGF5bG9hZH0gW3ByZXBhcmVEZWxpdmVyeU9wZXJhdGlvblBheWxvYWRdIC0gUmVzb2x2ZXMgcHJvdmlkZXIgZGVmYXVsdHMgaW50byB0aGUgaW1tdXRhYmxlIHBheWxvYWQgYmVmb3JlIHJlcXVpcmVkLW9wZXJhdGlvbiBoYXNoaW5nIGFuZCBlbnF1ZXVlLlxuICogQHByb3BlcnR5IHsoYXJnczoge2RlbGl2ZXJ5T3BlcmF0aW9uOiBpbXBvcnQoXCIuL21haWxlci5qc1wiKS5NYWlsZXJEZWxpdmVyeU9wZXJhdGlvblJlcXVlc3QgfCBpbXBvcnQoXCIuL21haWxlci5qc1wiKS5NYWlsZXJEZWxpdmVyeU9wZXJhdGlvbiwgcGF5bG9hZDogaW1wb3J0KFwiLi9tYWlsZXIuanNcIikuTWFpbGVyRGVsaXZlcnlQYXlsb2FkfSkgPT4gdm9pZH0gW3ZhbGlkYXRlRGVsaXZlcnlPcGVyYXRpb25dIC0gUHJvdmlkZXItc3BlY2lmaWMgb3BlcmF0aW9uIGFuZCBwYXlsb2FkIHZhbGlkYXRpb24gcGVyZm9ybWVkIGJlZm9yZSBlbnF1ZXVlIGFuZCBldmVyeSBuZXR3b3JrIGF0dGVtcHQuXG4gKi9cblxuXG4vKipcbiAqIEB0eXBlZGVmIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT59IExvY2FsZUZhbGxiYWNrc1R5cGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEZyb250ZW5kTW9kZWxSZWxhdGlvbnNoaXBDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge1wiYmVsb25nc1RvXCIgfCBcImhhc09uZVwiIHwgXCJoYXNNYW55XCJ9IHR5cGUgLSBSZWxhdGlvbnNoaXAgdHlwZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbW9kZWxdIC0gVGFyZ2V0IG1vZGVsIGNsYXNzIG5hbWUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2NsYXNzTmFtZV0gLSBBbGlhcyBvZiB0YXJnZXQgbW9kZWwgY2xhc3MgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbW9kZWxDbGFzc05hbWVdIC0gRXhwbGljaXQgdGFyZ2V0IG1vZGVsIGNsYXNzIG5hbWUuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBGcm9udGVuZE1vZGVsQXR0cmlidXRlQ29uZmlndXJhdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IFt0eXBlXSAtIENvbHVtbiB0eXBlIG5hbWUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2NvbHVtblR5cGVdIC0gQWxpYXMgZm9yIGNvbHVtbiB0eXBlIG5hbWUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3NxbFR5cGVdIC0gQWxpYXMgZm9yIGNvbHVtbiB0eXBlIG5hbWUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2RhdGFUeXBlXSAtIEFsaWFzIGZvciBjb2x1bW4gdHlwZSBuYW1lLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtqc0RvY1R5cGVdIC0gRXhhY3QgZ2VuZXJhdGVkIEpTRG9jIHR5cGUgZm9yIG5vbi1jb2x1bW4gYXR0cmlidXRlcy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbmFtZV0gLSBBdHRyaWJ1dGUgbmFtZSB3aGVuIGNvbmZpZ3VyZWQgYXMgYW4gYXJyYXkgZW50cnkuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtudWxsXSAtIFdoZXRoZXIgdmFsdWUgY2FuIGJlIG51bGwuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtzZWxlY3RlZEJ5RGVmYXVsdF0gLSBXaGV0aGVyIGluY2x1ZGVkIGluIGRlZmF1bHQgc2VyaWFsaXphdGlvbi4gRGVmYXVsdHMgdG8gdHJ1ZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEZyb250ZW5kTW9kZWxBdHRhY2htZW50Q29uZmlndXJhdGlvblxuICogQHByb3BlcnR5IHtBdHRhY2htZW50U3luY0NvbmZpZ3VyYXRpb259IFtzeW5jXSAtIENsaWVudC1zaWRlIHN5bmNocm9uaXplZCBhc3NldCBwb2xpY3kuXG4gKiBAcHJvcGVydHkge1wiaGFzT25lXCIgfCBcImhhc01hbnlcIn0gdHlwZSAtIEF0dGFjaG1lbnQgY2FyZGluYWxpdHkuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBGcm9udGVuZE1vZGVsUmVzb3VyY2VDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge0FycmF5PHN0cmluZyB8IEZyb250ZW5kTW9kZWxBdHRyaWJ1dGVDb25maWd1cmF0aW9uPiB8IFJlY29yZDxzdHJpbmcsIEZyb250ZW5kTW9kZWxBdHRyaWJ1dGVDb25maWd1cmF0aW9uIHwgaW1wb3J0KFwiLi9kYXRhYmFzZS9kcml2ZXJzL2Jhc2UtY29sdW1uLmpzXCIpLmRlZmF1bHQgfCBib29sZWFuPn0gYXR0cmlidXRlcyAtIEF0dHJpYnV0ZXMgdG8gZXhwb3NlIG9uIHRoZSBmcm9udGVuZCBtb2RlbC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFthYmlsaXRpZXNdIC0gQWRkaXRpb25hbCBjYW1lbENhc2UgYWJpbGl0eSBhY3Rpb24gbmFtZXMgdG8gZXhwb3NlIGZvciBwZXItcmVjb3JkIGByZWNvcmQuY2FuKGFjdGlvbilgIHJlYWRzLiBCYXNlIENSVUQgYWN0aW9ucyAoYHJlYWRgLCBgY3JlYXRlYCwgYHVwZGF0ZWAsIGBkZXN0cm95YCkgYXJlIGFsd2F5cyBpbmNsdWRlZCBhbmQgbXVzdCBub3QgYmUgbGlzdGVkIGhlcmUuXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIEZyb250ZW5kTW9kZWxBdHRhY2htZW50Q29uZmlndXJhdGlvbj59IFthdHRhY2htZW50c10gLSBBdHRhY2htZW50IGhlbHBlcnMga2V5ZWQgYnkgYXR0YWNobWVudCBuYW1lLlxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gW2NvbW1hbmRzXSAtIExlZ2FjeSBidWlsdC1pbiBjb21tYW5kIG5hbWVzIChgaW5kZXhgLCBgZmluZGAsIGBjcmVhdGVgLCBgdXBkYXRlYCwgYGRlc3Ryb3lgLCBgYXR0YWNoYCwgYGRvd25sb2FkYCwgYHVybGApLlxuICogQHByb3BlcnR5IHtBcnJheTxGcm9udGVuZE1vZGVsUmVzb3VyY2VDdXN0b21Db21tYW5kPn0gW2NvbGxlY3Rpb25Db21tYW5kc10gLSBDdXN0b20gY29sbGVjdGlvbiBjb21tYW5kcy4gRWFjaCBlbnRyeSBpcyBhIGNhbWVsQ2FzZSBtZXRob2QgbmFtZSwgb3IgYSBge25hbWUsIGFyZ3M/LCByZXR1cm5UeXBlP31gIG9iamVjdCBkZWNsYXJpbmcgdHlwZWQgYXJndW1lbnRzIGFuZC9vciBhIHJlc3BvbnNlIHR5cGUuIFRoZSBydW50aW1lIGRlcml2ZXMgdGhlIGtlYmFiLWNhc2UgY29tbWFuZCBzbHVnIGZyb20gdGhlIG5hbWUuXG4gKiBAcHJvcGVydHkge0FycmF5PEZyb250ZW5kTW9kZWxSZXNvdXJjZUN1c3RvbUNvbW1hbmQ+fSBbbWVtYmVyQ29tbWFuZHNdIC0gQ3VzdG9tIG1lbWJlciBjb21tYW5kcy4gRWFjaCBlbnRyeSBpcyBhIGNhbWVsQ2FzZSBtZXRob2QgbmFtZSwgb3IgYSBge25hbWUsIGFyZ3M/LCByZXR1cm5UeXBlP31gIG9iamVjdCBkZWNsYXJpbmcgdHlwZWQgYXJndW1lbnRzIGFuZC9vciBhIHJlc3BvbnNlIHR5cGUuIFRoZSBydW50aW1lIGRlcml2ZXMgdGhlIGtlYmFiLWNhc2UgY29tbWFuZCBzbHVnIGZyb20gdGhlIG5hbWUuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbYnVpbHRJbkNvbGxlY3Rpb25Db21tYW5kc10gLSBCdWlsdC1pbiBjb2xsZWN0aW9uIGNvbW1hbmQgbmFtZXMgKGBpbmRleGAsIGBjcmVhdGVgKS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFtidWlsdEluTWVtYmVyQ29tbWFuZHNdIC0gQnVpbHQtaW4gbWVtYmVyIGNvbW1hbmQgbmFtZXMgKGBmaW5kYCwgYHVwZGF0ZWAsIGBkZXN0cm95YCwgYGF0dGFjaGAsIGBkb3dubG9hZGAsIGB1cmxgKS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbW9kZWxOYW1lXSAtIEZyb250ZW5kIG1vZGVsIG5hbWUgb3ZlcnJpZGUuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbcmVsYXRpb25zaGlwc10gLSBSZWxhdGlvbnNoaXAgbmFtZXMgdG8gZXhwb3NlIGluIGZyb250ZW5kIG1vZGVscy4gVHlwZSBhbmQgdGFyZ2V0IG1vZGVsIGFyZSBpbmZlcnJlZCBmcm9tIHRoZSBiYWNrZW5kIG1vZGVsJ3MgcmVnaXN0ZXJlZCByZWxhdGlvbnNoaXBzLlxuICogQHByb3BlcnR5IHtzdHJpbmcgfCBzdHJpbmdbXX0gW3ByaW1hcnlLZXldIC0gUHJpbWFyeSBrZXkgYXR0cmlidXRlIG5hbWUgb3Igb3JkZXJlZCBjb21wb3NpdGUgcHJpbWFyeS1rZXkgYXR0cmlidXRlIG5hbWVzLlxuICogQHByb3BlcnR5IHtGcm9udGVuZE1vZGVsUmVzb3VyY2VTZXJ2ZXJDb25maWd1cmF0aW9ufSBbc2VydmVyXSAtIE9wdGlvbmFsIGxlZ2FjeSBiYWNrZW5kIGJlaGF2aW9yIG92ZXJyaWRlcyBmb3IgYnVpbHQtaW4gZnJvbnRlbmQgYWN0aW9ucy5cbiAqIEBwcm9wZXJ0eSB7RnJvbnRlbmRNb2RlbFJlc291cmNlU3luY0NvbmZpZ3VyYXRpb24gfCBib29sZWFufSBbc3luY10gLSBPcHRpb25hbCBzYWZlIGxvY2FsL29mZmxpbmUgc3luYyBwb2xpY3kgbWV0YWRhdGEuIGBwb2xpY3lgIHBhcnRpY2lwYXRlcyBpbiB0aGUgaGFzaCBidXQgaXMgbm90IGV4cG9zZWQgdG8gZ2VuZXJhdGVkIGZyb250ZW5kIGNvbmZpZy9tYW5pZmVzdC5cbiAqL1xuXG4vKipcbiAqIE9iamVjdCBmb3JtIG9mIGEgY3VzdG9tIGNvbW1hbmQgZW50cnksIGRlY2xhcmluZyBpdHMgdHlwZWQgYXJndW1lbnRzIGFuZC9vclxuICogcmVzcG9uc2UgdHlwZSBhbG9uZ3NpZGUgdGhlIGNvbW1hbmQgbmFtZS5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IEZyb250ZW5kTW9kZWxSZXNvdXJjZUN1c3RvbUNvbW1hbmRPYmplY3RcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBuYW1lIC0gY2FtZWxDYXNlIGNvbW1hbmQgbWV0aG9kIG5hbWUuXG4gKiBAcHJvcGVydHkge0FycmF5PHtuYW1lOiBzdHJpbmcsIHR5cGU6IHN0cmluZ30+fSBbYXJnc10gLSBUeXBlZCBjb21tYW5kIGFyZ3VtZW50czsgZWFjaCBnZW5lcmF0ZXMgYSBuYW1lZCwgdHlwZWQgbWV0aG9kIHBhcmFtZXRlciBtYXBwZWQgcG9zaXRpb25hbGx5IGludG8gdGhlIGNvbW1hbmQgcGF5bG9hZC4gYHR5cGVgIGlzIGEgSlNEb2MgdHlwZSBzdHJpbmcuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3JldHVyblR5cGVdIC0gSlNEb2MgdHlwZSBmb3IgdGhlIGNvbW1hbmQgcmVzcG9uc2UuIFdoZW4gc2V0LCB0aGUgZ2VuZXJhdGVkIG1ldGhvZCBpcyB0eXBlZCBgUHJvbWlzZTxyZXR1cm5UeXBlPmAgaW5zdGVhZCBvZiBgUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj4+YC4gRW1pdHRlZCB2ZXJiYXRpbSBpbnRvIHRoZSBnZW5lcmF0ZWQgZnJvbnRlbmQgbW9kZWwsIHNvIGl0IG11c3QgcmVzb2x2ZSB0aGVyZS5cbiAqL1xuXG4vKipcbiAqIEEgY3VzdG9tIGNvbW1hbmQgZW50cnk6IGEgcGxhaW4gY2FtZWxDYXNlIG1ldGhvZCBuYW1lLCBvciBhbiBvYmplY3QgZGVjbGFyaW5nXG4gKiB0eXBlZCBhcmdzIGFuZC9vciBhIHJlc3BvbnNlIHR5cGUuXG4gKiBAdHlwZWRlZiB7c3RyaW5nIHwgRnJvbnRlbmRNb2RlbFJlc291cmNlQ3VzdG9tQ29tbWFuZE9iamVjdH0gRnJvbnRlbmRNb2RlbFJlc291cmNlQ3VzdG9tQ29tbWFuZFxuICovXG5cbi8qKlxuICogSlNPTiB2YWx1ZSBhY2NlcHRlZCBieSBzeW5jIHBvbGljeSBtZXRhZGF0YS9oYXNoIGlucHV0cy5cbiAqIEB0eXBlZGVmIHtudWxsIHwgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IHVua25vd25bXSB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+fSBGcm9udGVuZE1vZGVsU3luY0pzb25WYWx1ZVxuICovXG5cbi8qKlxuICogRnJvbnRlbmQtbW9kZWwgbG9jYWwvb2ZmbGluZSBzeW5jIHBvbGljeSBjb25maWcuIGBtZXRhZGF0YWAgaXMgZXhwb3NlZCB0b1xuICogZnJvbnRlbmRzIGFuZCBwZWVyczsgYHBvbGljeWAgaXMgaGFzaGVkIGJ1dCBpbnRlbnRpb25hbGx5IG9taXR0ZWQgZnJvbVxuICogZnJvbnRlbmQtc2FmZSBtYW5pZmVzdHMuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBGcm9udGVuZE1vZGVsUmVzb3VyY2VTeW5jQ29uZmlndXJhdGlvblxuICogQHByb3BlcnR5IHtcIm9wdGltaXN0aWNWZXJzaW9uXCIgfCBcInNlcnZlcldpbnNcIiB8IFwibGFzdFdyaXRlcldpbnNcIiB8IFwiZmllbGRUaHJlZVdheVwiIHwgXCJhcHBlbmRPbmx5XCJ9IFtjb25mbGljdFN0cmF0ZWd5XSAtIFN0cmF0ZWd5IHVzZWQgd2hlbiByZXBsYXkgZGV0ZWN0cyBzZXJ2ZXIvY2xpZW50IGRpdmVyZ2VuY2UuIERlZmF1bHRzIHRvIGBvcHRpbWlzdGljVmVyc2lvbmAuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtlbmFibGVkXSAtIFdoZXRoZXIgdGhlIHJlc291cmNlIGlzIHN5bmMtZW5hYmxlZC4gRGVmYXVsdHMgdG8gdHJ1ZSB3aGVuIGBzeW5jYCBpcyBjb25maWd1cmVkLlxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gW29wZXJhdGlvbnNdIC0gU3luYyBvcGVyYXRpb24gbmFtZXMgc3VjaCBhcyBgaW5kZXhgLCBgZmluZGAsIGBjcmVhdGVgLCBgdXBkYXRlYCwgY3VzdG9tIGRvbWFpbiBjb21tYW5kcywgZXRjLlxuICogQHByb3BlcnR5IHtzdHJpbmcgfCBudW1iZXJ9IFtwb2xpY3lWZXJzaW9uXSAtIEFwcC1jb250cm9sbGVkIHBvbGljeSB2ZXJzaW9uIHVzZWQgYXMgYSBzdGFibGUgY2hhbmdlIHNpZ25hbC5cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgRnJvbnRlbmRNb2RlbFN5bmNKc29uVmFsdWU+fSBbbWV0YWRhdGFdIC0gU2FmZSBmcm9udGVuZC12aXNpYmxlIG1ldGFkYXRhLlxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBGcm9udGVuZE1vZGVsU3luY0pzb25WYWx1ZT59IFtwb2xpY3ldIC0gRGV0ZXJtaW5pc3RpYyBub24tc2VjcmV0IHBvbGljeSBpbnB1dHMgaW5jbHVkZWQgaW4gdGhlIHBvbGljeSBoYXNoIG9ubHkuXG4gKi9cblxuLyoqXG4gKiBWZWxvY2lvdXMgc3luYyBBUEkgZW5kcG9pbnQgY29uZmlndXJhdGlvbi5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IFZlbG9jaW91c1N5bmNBcGlDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW21vdW50UGF0aF0gLSBNb3VudCBwYXRoIGZvciB0aGUgc3luYyBlbmRwb2ludHMuIERlZmF1bHRzIHRvIFwiL3ZlbG9jaW91cy9zeW5jXCIuXG4gKiBAcHJvcGVydHkge0Zyb250ZW5kTW9kZWxSZXNvdXJjZUNsYXNzVHlwZX0gcmVzb3VyY2VDbGFzcyAtIEFwcCBzeW5jIHJlc291cmNlIGNsYXNzIHNlcnZlZCBieSB0aGUgYXV0by1tb3VudGVkIHN5bmMgZW5kcG9pbnRzLlxuICovXG5cbi8qKlxuICogQ2xpZW50LXNpZGUgc3luYyB0cmFuc3BvcnQgb3duaW5nIEhUVFAgUE9TVHMgdG8gdGhlIGZyYW1ld29yayBzeW5jIGVuZHBvaW50cyxcbiAqIG1hdGNoaW5nIHRoZSBmcm9udGVuZC1tb2RlbCB3ZWJzb2NrZXQgY2xpZW50IHBvc3QgY29udHJhY3QuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBWZWxvY2lvdXNTeW5jQ2xpZW50VHJhbnNwb3J0XG4gKiBAcHJvcGVydHkgeyhwYXRoOiBzdHJpbmcsIGJvZHk/OiBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPiwgb3B0aW9ucz86IHtoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgc2lnbmFsPzogQWJvcnRTaWduYWx9KSA9PiBQcm9taXNlPHtqc29uOiAoKSA9PiBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0+fSBwb3N0IC0gUG9zdHMgb25lIHJlcXVlc3QgYW5kIHJlc29sdmVzIGEgcmVzcG9uc2Ugd2l0aCBhIGpzb24gYWNjZXNzb3IuXG4gKi9cblxuLyoqXG4gKiBXZWJzb2NrZXQgY2xpZW50IGNvbnRyYWN0IHJlcXVpcmVkIGZyb20gYHN5bmMuY2xpZW50LnJlYWx0aW1lLmNyZWF0ZUNsaWVudGAsXG4gKiBtYXRjaGluZyBgVmVsb2Npb3VzV2Vic29ja2V0Q2xpZW50YCAvIHNuYXByZXEncyB3ZWJzb2NrZXQgY2xpZW50LlxuICogQHR5cGVkZWYge29iamVjdH0gVmVsb2Npb3VzU3luY1JlYWx0aW1lV2Vic29ja2V0Q2xpZW50XG4gKiBAcHJvcGVydHkgeyhvcHRpb25zPzoge3NpZ25hbD86IEFib3J0U2lnbmFsfSkgPT4gUHJvbWlzZTxSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj59IGNvbm5lY3QgLSBDb25uZWN0cyB0aGUgd2Vic29ja2V0LlxuICogQHByb3BlcnR5IHsoY2hhbm5lbFR5cGU6IHN0cmluZywgb3B0aW9ucz86IHtwYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj4sIG9uTWVzc2FnZT86IChib2R5OiBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPikgPT4gdm9pZCwgb25SZXN1bWU/OiAoKSA9PiB2b2lkLCBvbkNsb3NlPzogKHJlYXNvbjogc3RyaW5nKSA9PiB2b2lkfSkgPT4gVmVsb2Npb3VzU3luY1JlYWx0aW1lU3Vic2NyaXB0aW9ufSBzdWJzY3JpYmVDaGFubmVsIC0gT3BlbnMgb25lIGNoYW5uZWwgc3Vic2NyaXB0aW9uLlxuICogQHByb3BlcnR5IHsoKSA9PiBQcm9taXNlPHZvaWQ+fSBkaXNjb25uZWN0QW5kU3RvcFJlY29ubmVjdCAtIENsb3NlcyB0aGUgc29ja2V0IGFuZCBzdG9wcyBhdXRvLXJlY29ubmVjdC5cbiAqL1xuXG4vKipcbiAqIENoYW5uZWwgc3Vic2NyaXB0aW9uIGhhbmRsZSByZXR1cm5lZCBieSBgc3Vic2NyaWJlQ2hhbm5lbGAuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBWZWxvY2lvdXNTeW5jUmVhbHRpbWVTdWJzY3JpcHRpb25cbiAqIEBwcm9wZXJ0eSB7KCkgPT4gdm9pZH0gY2xvc2UgLSBDbG9zZXMgdGhlIHN1YnNjcmlwdGlvbi5cbiAqIEBwcm9wZXJ0eSB7KCkgPT4gYm9vbGVhbn0gaXNSZWFkeSAtIFdoZXRoZXIgdGhlIHN1YnNjcmlwdGlvbiBpcyBhY2tub3dsZWRnZWQgYW5kIHJlYWR5LlxuICogQHByb3BlcnR5IHsocGFyYW1zPzoge3NpZ25hbD86IEFib3J0U2lnbmFsLCB0aW1lb3V0TXM/OiBudW1iZXJ9KSA9PiBQcm9taXNlPHZvaWQ+fSB3YWl0Rm9yUmVhZHkgLSBSZXNvbHZlcyBvbmNlIHRoZSBzZXJ2ZXIgYWNrbm93bGVkZ2VzIHRoZSBzdWJzY3JpcHRpb24uXG4gKi9cblxuLyoqXG4gKiBPbmUgcmVhbHRpbWUgY2hhbm5lbCBzdWJzY3JpcHRpb24gZGVzY3JpcHRvci5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IFZlbG9jaW91c1N5bmNSZWFsdGltZUNoYW5uZWxEZXNjcmlwdG9yXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY2hhbm5lbCAtIFNlcnZlciBjaGFubmVsIG5hbWUgdG8gc3Vic2NyaWJlLlxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj59IFtwYXJhbXNdIC0gU3Vic2NyaWJlIHBhcmFtcyAocnVudGltZSBzY29wZSB2YWx1ZXMpLiBUaGUgZnJhbWV3b3JrIGluamVjdHMgYGF1dGhlbnRpY2F0aW9uVG9rZW5gIGF1dG9tYXRpY2FsbHkuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3Jlc291cmNlVHlwZV0gLSBEZWZhdWx0IHJlc291cmNlL21vZGVsIG5hbWUgZm9yIHB1c2hlZCBjaGFuZ2VzIHRoYXQgZG8gbm90IGNhcnJ5IHRoZWlyIG93biByZXNvdXJjZVR5cGUuXG4gKi9cblxuLyoqXG4gKiBSZWFsdGltZSBwdXNoIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBzeW5jIGNsaWVudC4gT25seSB0aGUgZ2VudWluZWx5XG4gKiBhcHAtb3duZWQgY2FsbGJhY2sgbGl2ZXMgaGVyZTogaG93IHRvIGJ1aWxkIHRoZSB3ZWJzb2NrZXQgY2xpZW50LlxuICogRXZlcnl0aGluZyBlbHNlIC0gZGVyaXZpbmcgdGhlIGZyYW1ld29yayBzeW5jIGNoYW5uZWwgc3Vic2NyaXB0aW9ucyBmcm9tXG4gKiB0aGUgZGVjbGFyZWQgcHVsbCBzY29wZXMsIHN1YnNjcmliaW5nLCBhcHBseWluZyBwdXNoZXMgdGhyb3VnaCB0aGUgZGVyaXZlZFxuICogcmVzb3VyY2UgYXBwbGllciwgZWNobyBzdXBwcmVzc2lvbiwgYW5kIHB1bGwtb24tcmVjb25uZWN0IC0gaXMgZGVyaXZlZC5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IFZlbG9jaW91c1N5bmNDbGllbnRSZWFsdGltZUNvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7KCkgPT4gVmVsb2Npb3VzU3luY1JlYWx0aW1lV2Vic29ja2V0Q2xpZW50IHwgUHJvbWlzZTxWZWxvY2lvdXNTeW5jUmVhbHRpbWVXZWJzb2NrZXRDbGllbnQ+fSBjcmVhdGVDbGllbnQgLSBCdWlsZHMgdGhlICh1bmNvbm5lY3RlZCkgd2Vic29ja2V0IGNsaWVudDsgdGhlIGZyYW1ld29yayBvd25zIGNvbm5lY3QvZGlzY29ubmVjdC5cbiAqIEBwcm9wZXJ0eSB7KGNvbnRleHQ6IFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+KSA9PiBBcnJheTxWZWxvY2lvdXNTeW5jUmVhbHRpbWVDaGFubmVsRGVzY3JpcHRvcj4gfCBQcm9taXNlPEFycmF5PFZlbG9jaW91c1N5bmNSZWFsdGltZUNoYW5uZWxEZXNjcmlwdG9yPj59IFtjaGFubmVsc10gLSBEZXByZWNhdGVkIGxlZ2FjeSBlc2NhcGUgaGF0Y2g6IHJlc29sdmVzIGV4dHJhIGFwcC1jaGFubmVsIGRlc2NyaXB0b3JzIGZyb20gdGhlIGBzdWJzY3JpYmVSZWFsdGltZShjb250ZXh0KWAgY29udGV4dC4gRGVjbGFyZWQgcHVsbCBzY29wZXMgc3Vic2NyaWJlIHRoZSBmcmFtZXdvcmsgc3luYyBjaGFubmVsIGF1dG9tYXRpY2FsbHkuXG4gKiBAcHJvcGVydHkgeygpID0+IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPn0gW2xvY2FsT3JpZ2luXSAtIFJlc29sdmVzIHRoaXMgZGV2aWNlJ3MgZWNobyBvcmlnaW47IHB1c2hlZCBtZXNzYWdlcyB3aXRoIGEgbWF0Y2hpbmcgYGVjaG9PcmlnaW5gIGFyZSBkcm9wcGVkLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbcHVsbE9uUmVjb25uZWN0XSAtIEZpcmUgYSBjb2FsZXNjZWQgYHB1bGwoKWAgd2hlbiBzdWJzY3JpcHRpb25zIGJlY29tZSByZWFkeSBvciByZXN1bWUgYWZ0ZXIgYSBkcm9wLCBjbG9zaW5nIG9mZmxpbmUgZ2Fwcy4gRGVmYXVsdHMgdG8gdHJ1ZS5cbiAqL1xuXG4vKipcbiAqIENsaWVudC1zaWRlIHN5bmMgY29uZmlndXJhdGlvbiBjb25zdW1lZCBieSBgU3luY0NsaWVudC5mcm9tQ29uZmlndXJhdGlvbiguLi4pYC5cbiAqIFRoZSBmcmFtZXdvcmsgb3ducyB0aGUgYCR7bW91bnRQYXRofS9jaGFuZ2VzYCBhbmQgYCR7bW91bnRQYXRofS9yZXBsYXlgXG4gKiBQT1NUZXJzIG92ZXIgdGhlIGdpdmVuIHRyYW5zcG9ydC5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IFZlbG9jaW91c1N5bmNDbGllbnRDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkgeygpID0+IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPn0gYXV0aGVudGljYXRpb25Ub2tlbiAtIFJlc29sdmVzIHRoZSBhdXRoIHRva2VuIHNlbnQgd2l0aCBzeW5jIHJlcXVlc3RzLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtiYXRjaFNpemVdIC0gTWF4IHN5bmNzIHBlciByZXF1ZXN0LlxuICogQHByb3BlcnR5IHsoKSA9PiBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuPn0gW2lzT25saW5lXSAtIENvbm5lY3Rpdml0eSBnYXRlIGZvciBwdWxscyBhbmQgcmVwbGF5cy4gRGVmYXVsdHMgdG8gYWx3YXlzIG9ubGluZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbW91bnRQYXRoXSAtIE1vdW50IHBhdGggdGhlIHNlcnZlciBzZXJ2ZXMgdGhlIHN5bmMgZW5kcG9pbnRzIHVuZGVyIChtYXRjaCB0aGUgc2VydmVyJ3MgYHN5bmMuYXBpLm1vdW50UGF0aGApLiBEZWZhdWx0cyB0byBcIi92ZWxvY2lvdXMvc3luY1wiOyBub3JtYWxpemF0aW9uIHN0cmlwcyB0cmFpbGluZyBzbGFzaGVzIGFuZCBhbHdheXMgZmlsbHMgaW4gdGhlIGRlZmF1bHQuXG4gKiBAcHJvcGVydHkgeyhlcnJvcjogRXJyb3IpID0+IHZvaWR9IFtvbkVycm9yXSAtIFJlcG9ydHMgYmFja2dyb3VuZCByZXBsYXkvcHVsbCBmYWlsdXJlcy4gRGVmYXVsdHMgdG8gcmV0aHJvd2luZy5cbiAqIEBwcm9wZXJ0eSB7VmVsb2Npb3VzU3luY0NsaWVudFJlYWx0aW1lQ29uZmlndXJhdGlvbn0gW3JlYWx0aW1lXSAtIFJlYWx0aW1lIHB1c2ggY29uZmlndXJhdGlvbiBjb25zdW1lZCBieSBgc3Vic2NyaWJlUmVhbHRpbWUoLi4uKWAuXG4gKiBAcHJvcGVydHkge1ZlbG9jaW91c1N5bmNDbGllbnRUcmFuc3BvcnR9IHRyYW5zcG9ydCAtIFRyYW5zcG9ydCBwb3N0aW5nIHRvIHRoZSBmcmFtZXdvcmsgc3luYyBlbmRwb2ludHMgKGUuZy4gdGhlIGZyb250ZW5kLW1vZGVsIHdlYnNvY2tldCBjbGllbnQpLlxuICogQHByb3BlcnR5IHtWZWxvY2lvdXNTeW5jUmVhbHRpbWVXZWJzb2NrZXRDbGllbnR9IFt3ZWJzb2NrZXRDbGllbnRdIC0gU2hhcmVkIGFwcC1saWZldGltZSB3ZWJzb2NrZXQgY2xpZW50ICh0aGUgbG93LWxldmVsIGZvcm0pIHRoYXQgYWxsIHN5bmMgdHJhZmZpYyByaWRlcy4gUHJvdmlkZSB0aGUgc2FtZSBpbnN0YW5jZSB0aGUgZnJvbnRlbmQtbW9kZWwgdHJhbnNwb3J0IHVzZXMgc28gb25lIGNvbm5lY3Rpb24gY2FycmllcyBldmVyeXRoaW5nLiBXaGVuIHNldCwgdGhlIHJlYWx0aW1lIGJyaWRnZSBzdWJzY3JpYmVzIGNoYW5uZWxzIG9uIGl0IGFuZCBuZXZlciBvd25zIGl0cyBsaWZlY3ljbGU6IHVuc3Vic2NyaWJpbmcgY2xvc2VzIG9ubHkgY2hhbm5lbCBzdWJzY3JpcHRpb25zLCBsZWF2aW5nIHRoZSBzb2NrZXQgY29ubmVjdGVkLlxuICogQHByb3BlcnR5IHtzdHJpbmcgfCAoKCkgPT4gc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCl9IFt3ZWJzb2NrZXRVcmxdIC0gU2hhcmVkIGFwcC1saWZldGltZSB3ZWJzb2NrZXQgVVJMLiBXaGVuIHNldCAoYW5kIG5vIGB3ZWJzb2NrZXRDbGllbnRgIGlzIGdpdmVuKSwgdGhlIGZyYW1ld29yayBidWlsZHMgYW5kIG93bnMgb25lIHJlY29ubmVjdGluZyBgVmVsb2Npb3VzV2Vic29ja2V0Q2xpZW50YCBmb3IgYWxsIHN5bmMgdHJhZmZpYywgY29ubmVjdGVkIG9uIGZpcnN0IHVzZS5cbiAqL1xuXG4vKipcbiAqIFZlbG9jaW91cyBzeW5jIGNvbmZpZ3VyYXRpb24uXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBWZWxvY2lvdXNTeW5jQ29uZmlndXJhdGlvblxuICogQHByb3BlcnR5IHtWZWxvY2lvdXNTeW5jQXBpQ29uZmlndXJhdGlvbn0gW2FwaV0gLSBBdXRvLW1vdW50cyB0aGUgVmVsb2Npb3VzIHN5bmMgY2hhbmdlcy9yZXBsYXkgZW5kcG9pbnRzIGZvciB0aGlzIHJlc291cmNlIGNsYXNzLlxuICogQHByb3BlcnR5IHtWZWxvY2lvdXNTeW5jQ2xpZW50Q29uZmlndXJhdGlvbn0gW2NsaWVudF0gLSBDbGllbnQtc2lkZSBzeW5jIGNvbmZpZ3VyYXRpb24gY29uc3VtZWQgYnkgYFN5bmNDbGllbnQuZnJvbUNvbmZpZ3VyYXRpb24oLi4uKWAuXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4vc3luYy9kZXZpY2UtaWRlbnRpdHkuanNcIikuU3luY0pzb25XZWJLZXkgfCBudWxsfSBbZGV2aWNlQ2VydGlmaWNhdGVCYWNrZW5kUHVibGljS2V5XSAtIFB1YmxpYyBiYWNrZW5kIGtleSB1c2VkIHRvIHZlcmlmeSBvZmZsaW5lIGRldmljZSBjZXJ0aWZpY2F0ZXMgZm9yIHN5bmMgcmVwbGF5LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtjaGFuZ2VGZWVkUmV0ZW50aW9uU2l6ZV0gLSBOdW1iZXIgb2YgYWNjZXB0ZWQgc2VydmVyIGNoYW5nZXMgcmV0YWluZWQgYmVmb3JlIGNsaWVudHMgbXVzdCByZWZyZXNoIGZyb20gc25hcHNob3QuXG4gKiBAcHJvcGVydHkge0FycmF5PGltcG9ydChcIi4vc3luYy9vZmZsaW5lLWdyYW50LmpzXCIpLk9mZmxpbmVHcmFudFNpZ25pbmdLZXk+fSBvZmZsaW5lR3JhbnRTaWduaW5nS2V5cyAtIFNpZ25pbmcga2V5cyB1c2VkIHRvIGlzc3VlIGFuZCB2ZXJpZnkgb2ZmbGluZSBncmFudHMuIFNlY3JldHMgbXVzdCBuZXZlciBiZSBleHBvc2VkIHRvIGNsaWVudHMuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW29mZmxpbmVHcmFudFR0bE1zXSAtIERlZmF1bHQgb2ZmbGluZSBncmFudCBUVEwgaW4gbWlsbGlzZWNvbmRzLiBEZWZhdWx0cyB0byAyNCBob3Vycy5cbiAqL1xuXG4vKipcbiAqIEZyb250ZW5kLXNhZmUgbm9ybWFsaXplZCBzeW5jIG1ldGFkYXRhLlxuICogQHR5cGVkZWYge29iamVjdH0gTm9ybWFsaXplZEZyb250ZW5kTW9kZWxSZXNvdXJjZVN5bmNDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge1wib3B0aW1pc3RpY1ZlcnNpb25cIiB8IFwic2VydmVyV2luc1wiIHwgXCJsYXN0V3JpdGVyV2luc1wiIHwgXCJmaWVsZFRocmVlV2F5XCIgfCBcImFwcGVuZE9ubHlcIn0gY29uZmxpY3RTdHJhdGVneSAtIE5vcm1hbGl6ZWQgcmVwbGF5IGNvbmZsaWN0IHN0cmF0ZWd5LlxuICogQHByb3BlcnR5IHtib29sZWFufSBlbmFibGVkIC0gV2hldGhlciB0aGUgcmVzb3VyY2UgaXMgc3luYy1lbmFibGVkLlxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gb3BlcmF0aW9ucyAtIFNvcnRlZCwgZHVwbGljYXRlLWZyZWUgc3luYyBvcGVyYXRpb24gbmFtZXMuXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IG51bGx9IHBvbGljeVZlcnNpb24gLSBBcHAtY29udHJvbGxlZCBwb2xpY3kgdmVyc2lvbiwgb3IgbnVsbC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwb2xpY3lIYXNoIC0gRGV0ZXJtaW5pc3RpYyBzaGEyNTYgaGFzaCBvZiBzYWZlIHBvbGljeSBpbnB1dHMuXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIEZyb250ZW5kTW9kZWxTeW5jSnNvblZhbHVlPn0gW21ldGFkYXRhXSAtIFNhZmUgZnJvbnRlbmQtdmlzaWJsZSBtZXRhZGF0YS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPbWl0PEZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbmZpZ3VyYXRpb24sIFwiYWJpbGl0aWVzXCIgfCBcImJ1aWx0SW5Db2xsZWN0aW9uQ29tbWFuZHNcIiB8IFwiYnVpbHRJbk1lbWJlckNvbW1hbmRzXCIgfCBcImNvbGxlY3Rpb25Db21tYW5kc1wiIHwgXCJjb21tYW5kc1wiIHwgXCJtZW1iZXJDb21tYW5kc1wiIHwgXCJzeW5jXCI+ICYge1xuICogICBhYmlsaXRpZXM6IEZyb250ZW5kTW9kZWxSZXNvdXJjZUFiaWxpdGllc0NvbmZpZ3VyYXRpb25cbiAqICAgYnVpbHRJbkNvbGxlY3Rpb25Db21tYW5kczogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICogICBidWlsdEluTWVtYmVyQ29tbWFuZHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbiAqICAgY29sbGVjdGlvbkNvbW1hbmRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4gKiAgIGNvbW1hbmRNZXRhZGF0YTogUmVjb3JkPHN0cmluZywge2FyZ3M6IEFycmF5PHtuYW1lOiBzdHJpbmcsIHR5cGU6IHN0cmluZ30+LCByZXR1cm5UeXBlOiBzdHJpbmcgfCBudWxsfT5cbiAqICAgbWVtYmVyQ29tbWFuZHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbiAqICAgc3luYz86IE5vcm1hbGl6ZWRGcm9udGVuZE1vZGVsUmVzb3VyY2VTeW5jQ29uZmlndXJhdGlvblxuICogfX0gTm9ybWFsaXplZEZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbmZpZ3VyYXRpb25cbiAqL1xuXG4vKipcbiAqIFVuYm91bmQgcmVzb3VyY2UgY2xhc3MgdXNlZCBieSBtb2RlbC1hZ25vc3RpYyByZWdpc3RyaWVzLlxuICogQHR5cGVkZWYge09taXQ8dHlwZW9mIGltcG9ydChcIi4vZnJvbnRlbmQtbW9kZWwtcmVzb3VyY2UvYmFzZS1yZXNvdXJjZS5qc1wiKS5kZWZhdWx0LCBcIm1vZGVsQ2xhc3NcIj4gJiB7bW9kZWxDbGFzczogKCkgPT4gdHlwZW9mIGltcG9ydChcIi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQsIG5ldyAoYXJnczogbmV2ZXIpOiBpbXBvcnQoXCIuL2Zyb250ZW5kLW1vZGVsLXJlc291cmNlL2Jhc2UtcmVzb3VyY2UuanNcIikuZGVmYXVsdDx0eXBlb2YgaW1wb3J0KFwiLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdD59fSBVbmJvdW5kRnJvbnRlbmRNb2RlbFJlc291cmNlQ2xhc3NUeXBlXG4gKi9cblxuLyoqXG4gKiBSZXNvdXJjZSBjbGFzcyBib3VuZCB0byBhIHNwZWNpZmljIG1vZGVsIGNsYXNzLlxuICogQHRlbXBsYXRlIHtpbXBvcnQoXCIuL2Zyb250ZW5kLW1vZGVsLXJlc291cmNlL2Jhc2UtcmVzb3VyY2UuanNcIikuRnJvbnRlbmRNb2RlbFJlc291cmNlTW9kZWxDbGFzc30gVE1vZGVsQ2xhc3NcbiAqIEB0ZW1wbGF0ZSB7dHlwZW9mIGltcG9ydChcIi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9IFREYXRhYmFzZU1vZGVsQ2xhc3NcbiAqIEB0eXBlZGVmIHtPbWl0PHR5cGVvZiBpbXBvcnQoXCIuL2Zyb250ZW5kLW1vZGVsLXJlc291cmNlL2Jhc2UtcmVzb3VyY2UuanNcIikuZGVmYXVsdCwgXCJNb2RlbENsYXNzXCIgfCBcIm1vZGVsQ2xhc3NcIj4gJiB7TW9kZWxDbGFzczogVE1vZGVsQ2xhc3MgfCB1bmRlZmluZWQsIG1vZGVsQ2xhc3M6ICgpID0+IFRNb2RlbENsYXNzLCBuZXcgKGFyZ3M6IGltcG9ydChcIi4vZnJvbnRlbmQtbW9kZWwtcmVzb3VyY2UvYmFzZS1yZXNvdXJjZS5qc1wiKS5Gcm9udGVuZE1vZGVsUmVzb3VyY2VBYmlsaXR5QXJnczxUTW9kZWxDbGFzcz4gfCBpbXBvcnQoXCIuL2Zyb250ZW5kLW1vZGVsLXJlc291cmNlL2Jhc2UtcmVzb3VyY2UuanNcIikuRnJvbnRlbmRNb2RlbFJlc291cmNlQ29udHJvbGxlckFyZ3M8VERhdGFiYXNlTW9kZWxDbGFzcz4pOiBpbXBvcnQoXCIuL2Zyb250ZW5kLW1vZGVsLXJlc291cmNlL2Jhc2UtcmVzb3VyY2UuanNcIikuZGVmYXVsdDxUTW9kZWxDbGFzcywgVERhdGFiYXNlTW9kZWxDbGFzcz59fSBCb3VuZEZyb250ZW5kTW9kZWxSZXNvdXJjZUNsYXNzVHlwZVxuICovXG5cbi8qKlxuICogQHRlbXBsYXRlIHtpbXBvcnQoXCIuL2Zyb250ZW5kLW1vZGVsLXJlc291cmNlL2Jhc2UtcmVzb3VyY2UuanNcIikuRnJvbnRlbmRNb2RlbFJlc291cmNlTW9kZWxDbGFzc30gW1RNb2RlbENsYXNzPW5ldmVyXVxuICogQHRlbXBsYXRlIHt0eXBlb2YgaW1wb3J0KFwiLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gW1REYXRhYmFzZU1vZGVsQ2xhc3M9RXh0cmFjdDxUTW9kZWxDbGFzcywgdHlwZW9mIGltcG9ydChcIi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQ+XVxuICogQHR5cGVkZWYge1tUTW9kZWxDbGFzc10gZXh0ZW5kcyBbbmV2ZXJdID8gVW5ib3VuZEZyb250ZW5kTW9kZWxSZXNvdXJjZUNsYXNzVHlwZSA6IEJvdW5kRnJvbnRlbmRNb2RlbFJlc291cmNlQ2xhc3NUeXBlPFRNb2RlbENsYXNzLCBURGF0YWJhc2VNb2RlbENsYXNzPn0gRnJvbnRlbmRNb2RlbFJlc291cmNlQ2xhc3NUeXBlXG4gKi9cblxuLyoqXG4gKiBAdGVtcGxhdGUge2ltcG9ydChcIi4vZnJvbnRlbmQtbW9kZWwtcmVzb3VyY2UvYmFzZS1yZXNvdXJjZS5qc1wiKS5Gcm9udGVuZE1vZGVsUmVzb3VyY2VNb2RlbENsYXNzfSBbVE1vZGVsQ2xhc3M9bmV2ZXJdXG4gKiBAdHlwZWRlZiB7RnJvbnRlbmRNb2RlbFJlc291cmNlQ2xhc3NUeXBlPFRNb2RlbENsYXNzPn0gRnJvbnRlbmRNb2RlbFJlc291cmNlRGVmaW5pdGlvblxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gRnJvbnRlbmRNb2RlbFJlc291cmNlQWJpbGl0aWVzQ29uZmlndXJhdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtpbmRleF0gLSBBYmlsaXR5IGFjdGlvbiBmb3IgZnJvbnRlbmQgaW5kZXguXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2ZpbmRdIC0gQWJpbGl0eSBhY3Rpb24gZm9yIGZyb250ZW5kIGZpbmQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2NyZWF0ZV0gLSBBYmlsaXR5IGFjdGlvbiBmb3IgZnJvbnRlbmQgY3JlYXRlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFt1cGRhdGVdIC0gQWJpbGl0eSBhY3Rpb24gZm9yIGZyb250ZW5kIHVwZGF0ZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZGVzdHJveV0gLSBBYmlsaXR5IGFjdGlvbiBmb3IgZnJvbnRlbmQgZGVzdHJveS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEZyb250ZW5kTW9kZWxSZXNvdXJjZVNlcnZlckNvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7KGFyZ3M6IHthY3Rpb246IFwiaW5kZXhcIiB8IFwiZmluZFwiIHwgXCJjcmVhdGVcIiB8IFwidXBkYXRlXCIgfCBcImRlc3Ryb3lcIiB8IFwiYXR0YWNoXCIgfCBcImF0dGFjaG1lbnRMaXN0XCIgfCBcImRvd25sb2FkXCIgfCBcInVybFwiLCBjb250cm9sbGVyOiBpbXBvcnQoXCIuL2NvbnRyb2xsZXIuanNcIikuZGVmYXVsdCwgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj4sIG1vZGVsQ2xhc3M6IHR5cGVvZiBpbXBvcnQoXCIuL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSkgPT4gKGJvb2xlYW4gfCB2b2lkIHwgUHJvbWlzZTxib29sZWFuIHwgdm9pZD4pfSBbYmVmb3JlQWN0aW9uXSAtIE9wdGlvbmFsIGNhbGxiYWNrIHJ1biBiZWZvcmUgYnVpbHQtaW4gZnJvbnRlbmQgYWN0aW9ucy5cbiAqIEBwcm9wZXJ0eSB7KGFyZ3M6IHthY3Rpb246IFwiaW5kZXhcIiwgY29udHJvbGxlcjogaW1wb3J0KFwiLi9jb250cm9sbGVyLmpzXCIpLmRlZmF1bHQsIHBhcmFtczogUmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+LCBtb2RlbENsYXNzOiB0eXBlb2YgaW1wb3J0KFwiLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0pID0+IFByb21pc2U8aW1wb3J0KFwiLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdFtdPn0gW3JlY29yZHNdIC0gUmVjb3JkcyBsb2FkZXIgZm9yIGZyb250ZW5kSW5kZXguXG4gKiBAcHJvcGVydHkgeyhhcmdzOiB7YWN0aW9uOiBcImluZGV4XCIgfCBcImZpbmRcIiB8IFwiY3JlYXRlXCIgfCBcInVwZGF0ZVwiLCBjb250cm9sbGVyOiBpbXBvcnQoXCIuL2NvbnRyb2xsZXIuanNcIikuZGVmYXVsdCwgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj4sIG1vZGVsQ2xhc3M6IHR5cGVvZiBpbXBvcnQoXCIuL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0LCBtb2RlbDogaW1wb3J0KFwiLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0pID0+IFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+PiB8IFByb21pc2U8UmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+Pn0gW3NlcmlhbGl6ZV0gLSBSZWNvcmQgc2VyaWFsaXplciBmb3IgcmVzcG9uc2UgcGF5bG9hZHMuXG4gKiBAcHJvcGVydHkgeyhhcmdzOiB7YWN0aW9uOiBcImZpbmRcIiB8IFwidXBkYXRlXCIgfCBcImRlc3Ryb3lcIiB8IFwiYXR0YWNoXCIgfCBcImF0dGFjaG1lbnRMaXN0XCIgfCBcImRvd25sb2FkXCIgfCBcInVybFwiLCBjb250cm9sbGVyOiBpbXBvcnQoXCIuL2NvbnRyb2xsZXIuanNcIikuZGVmYXVsdCwgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj4sIG1vZGVsQ2xhc3M6IHR5cGVvZiBpbXBvcnQoXCIuL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0LCBpZDogc3RyaW5nIHwgbnVtYmVyfSkgPT4gUHJvbWlzZTxpbXBvcnQoXCIuL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0IHwgbnVsbD59IFtmaW5kXSAtIFJlY29yZCBsb2FkZXIgZm9yIGZpbmQvdXBkYXRlL2Rlc3Ryb3kvYXR0YWNoL2Rvd25sb2FkL3VybCBhY3Rpb25zLlxuICogQHByb3BlcnR5IHsoYXJnczoge2FjdGlvbjogXCJjcmVhdGVcIiwgY29udHJvbGxlcjogaW1wb3J0KFwiLi9jb250cm9sbGVyLmpzXCIpLmRlZmF1bHQsIHBhcmFtczogUmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+LCBtb2RlbENsYXNzOiB0eXBlb2YgaW1wb3J0KFwiLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdCwgYXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fSkgPT4gUHJvbWlzZTxpbXBvcnQoXCIuL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0Pn0gW2NyZWF0ZV0gLSBDdXN0b20gY3JlYXRlIGNhbGxiYWNrLlxuICogQHByb3BlcnR5IHsoYXJnczoge2FjdGlvbjogXCJ1cGRhdGVcIiwgY29udHJvbGxlcjogaW1wb3J0KFwiLi9jb250cm9sbGVyLmpzXCIpLmRlZmF1bHQsIHBhcmFtczogUmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+LCBtb2RlbENsYXNzOiB0eXBlb2YgaW1wb3J0KFwiLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdCwgbW9kZWw6IGltcG9ydChcIi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQsIGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0pID0+IFByb21pc2U8aW1wb3J0KFwiLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdCB8IHZvaWQ+fSBbdXBkYXRlXSAtIEN1c3RvbSB1cGRhdGUgY2FsbGJhY2suXG4gKiBAcHJvcGVydHkgeyhhcmdzOiB7YWN0aW9uOiBcImRlc3Ryb3lcIiwgY29udHJvbGxlcjogaW1wb3J0KFwiLi9jb250cm9sbGVyLmpzXCIpLmRlZmF1bHQsIHBhcmFtczogUmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+LCBtb2RlbENsYXNzOiB0eXBlb2YgaW1wb3J0KFwiLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdCwgbW9kZWw6IGltcG9ydChcIi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9KSA9PiBQcm9taXNlPHZvaWQ+fSBbZGVzdHJveV0gLSBDdXN0b20gZGVzdHJveSBjYWxsYmFjay5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEJhY2tlbmRQcm9qZWN0Q29uZmlndXJhdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBhdGggLSBQYXRoIHRvIHRoZSBiYWNrZW5kIHByb2plY3QuIE1heSBiZSBhbiBhcHAgcm9vdCBvciBhIGNvbnRyaWJ1dGluZyBwYWNrYWdlIHJvb3QgKHBhY2thZ2UgZW50cmllcyBhcmUgYXBwZW5kZWQgaW50ZXJuYWxseSBmcm9tIGBwYWNrYWdlc2ApLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtmcm9udGVuZE1vZGVsc091dHB1dFBhdGhdIC0gT3B0aW9uYWwgb3V0cHV0IHByb2plY3QgcGF0aCB3aGVyZSBgc3JjL2Zyb250ZW5kLW1vZGVsc2Agc2hvdWxkIGJlIGdlbmVyYXRlZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcmVzb3VyY2VzUGF0aF0gLSBPcHRpb25hbCBvdmVycmlkZSBmb3IgdGhlIHJlc291cmNlcyBkaXJlY3RvcnkgdG8gYXV0by1kaXNjb3ZlcjsgZGVmYXVsdHMgdG8gYDxwYXRoPi9zcmMvcmVzb3VyY2VzYC4gU2V0IGludGVybmFsbHkgZm9yIHBhY2thZ2UgZW50cmllcy5cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgRnJvbnRlbmRNb2RlbFJlc291cmNlRGVmaW5pdGlvbj59IFtmcm9udGVuZE1vZGVsc10gLSBBdXRvLWRpc2NvdmVyZWQgZnJvbnRlbmQgbW9kZWwgZGVmaW5pdGlvbnMga2V5ZWQgYnkgbW9kZWwgY2xhc3MgbmFtZS4gU2V0IGludGVybmFsbHkgYnkgdGhlIGVudmlyb25tZW50IGhhbmRsZXIg4oCUIGRvIG5vdCBzZXQgbWFudWFsbHkuXG4gKiBAcHJvcGVydHkge0FiaWxpdHlSZXNvdXJjZUNsYXNzVHlwZVtdfSBbYWJpbGl0eVJlc291cmNlc10gLSBBdXRvLWRpc2NvdmVyZWQgYWJpbGl0eSByZXNvdXJjZSBjbGFzc2VzIChmcm9udGVuZC1tb2RlbCBhbmQgYXV0aG9yaXphdGlvbikgZnJvbSB0aGlzIHByb2plY3QncyByZXNvdXJjZXMgZGlyZWN0b3J5LiBTZXQgaW50ZXJuYWxseSBieSB0aGUgZW52aXJvbm1lbnQgaGFuZGxlciDigJQgZG8gbm90IHNldCBtYW51YWxseS5cbiAqL1xuXG4vKipcbiAqIEEgZGVzY3JpcHRvciBmb3IgYW4gZXh0ZXJuYWwgVmVsb2Npb3VzIHBhY2thZ2UgKGVuZ2luZSkgdGhhdCBjb250cmlidXRlcyBtb2RlbHMsXG4gKiByZXNvdXJjZXMgYW5kIG1pZ3JhdGlvbnMuIEEgcGFja2FnZSB1c3VhbGx5IGV4cG9ydHMgYG5ldyBWZWxvY2lvdXNQYWNrYWdlKHtuYW1lLCB1cmw6IGltcG9ydC5tZXRhLnVybH0pYC5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IFZlbG9jaW91c1BhY2thZ2VEZXNjcmlwdG9yXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbmFtZSAtIFRoZSBwYWNrYWdlIG5hbWUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3VybF0gLSBUaGUgZGVzY3JpcHRvciBtb2R1bGUncyBgaW1wb3J0Lm1ldGEudXJsYDsgdGhlIHBhY2thZ2Ugcm9vdCBpcyBkZXJpdmVkIGZyb20gaXQgd2hlbiBgcGF0aGAgaXMgb21pdHRlZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcGF0aF0gLSBUaGUgcGFja2FnZSByb290IGRpcmVjdG9yeSAodGhlIG9uZSBjb250YWluaW5nIGBzcmNgKS4gRGVyaXZlZCBmcm9tIGB1cmxgIHdoZW4gb21pdHRlZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbW9kZWxzUGF0aF0gLSBPdmVycmlkZSBmb3IgdGhlIHBhY2thZ2UncyBtb2RlbHMgZGlyZWN0b3J5IChkZWZhdWx0IGA8cGF0aD4vc3JjL21vZGVsc2ApLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtyZXNvdXJjZXNQYXRoXSAtIE92ZXJyaWRlIGZvciB0aGUgcGFja2FnZSdzIGZyb250ZW5kLW1vZGVsIHJlc291cmNlcyBkaXJlY3RvcnkgKGRlZmF1bHQgYDxwYXRoPi9zcmMvcmVzb3VyY2VzYCkuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW21pZ3JhdGlvbnNQYXRoXSAtIE92ZXJyaWRlIGZvciB0aGUgcGFja2FnZSdzIG1pZ3JhdGlvbnMgZGlyZWN0b3J5IChkZWZhdWx0IGA8cGF0aD4vc3JjL2RhdGFiYXNlL21pZ3JhdGlvbnNgKS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoXCIuL3BhY2thZ2VzL3ZlbG9jaW91cy1wYWNrYWdlLmpzXCIpLmRlZmF1bHQgfCBWZWxvY2lvdXNQYWNrYWdlRGVzY3JpcHRvcn0gVmVsb2Npb3VzUGFja2FnZUNvbmZpZ3VyYXRpb25cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFJvdXRlUmVzb2x2ZXJIb29rQXJnc1xuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0gY29uZmlndXJhdGlvbiAtIENvbmZpZ3VyYXRpb24gaW5zdGFuY2UuXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0gcGFyYW1zIC0gTXV0YWJsZSByZXF1ZXN0IHBhcmFtcyBvYmplY3QuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY3VycmVudFBhdGggLSBSZXF1ZXN0IHBhdGggd2l0aG91dCBxdWVyeS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2hhc01hdGNoaW5nQ3VzdG9tUm91dGVdIC0gVHJ1ZSB3aGVuIG1hdGNoaW5nIGEgY29uZmlndXJlZCBjdXN0b20gcm91dGUuXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3JlcXVlc3QuanNcIikuZGVmYXVsdCB8IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3dlYnNvY2tldC1yZXF1ZXN0LmpzXCIpLmRlZmF1bHR9IHJlcXVlc3QgLSBSZXF1ZXN0IG9iamVjdC5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvcmVzcG9uc2UuanNcIikuZGVmYXVsdH0gcmVzcG9uc2UgLSBSZXNwb25zZSBvYmplY3QuXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4vcm91dGVzL3Jlc29sdmVyLmpzXCIpLmRlZmF1bHR9IHJlc29sdmVyIC0gUmVzb2x2ZXIgaW5zdGFuY2UuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBSb3V0ZVJlc29sdmVySG9va1Jlc3VsdFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGFjdGlvbiAtIERhc2hlcml6ZWQgYWN0aW9uIG5hbWUgKGZvciBleGFtcGxlIGBmcm9udGVuZC1pbmRleGApLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNvbnRyb2xsZXIgLSBDb250cm9sbGVyIHBhdGggKGZvciBleGFtcGxlIGBhY2NvdW50c2ApLlxuICogQHByb3BlcnR5IHt0eXBlb2YgaW1wb3J0KFwiLi9jb250cm9sbGVyLmpzXCIpLmRlZmF1bHR9IFtjb250cm9sbGVyQ2xhc3NdIC0gT3B0aW9uYWwgY29udHJvbGxlciBjbGFzcyBvdmVycmlkZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbY29udHJvbGxlclBhdGhdIC0gT3B0aW9uYWwgYWJzb2x1dGUvcmVsYXRpdmUgY29udHJvbGxlciBmaWxlIHBhdGggb3ZlcnJpZGUuXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0gW3BhcmFtc10gLSBFeHRyYSBwYXJhbXMgdG8gbWVyZ2UgZm9yIGNvbnRyb2xsZXIvYWN0aW9uLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbc2tpcEFiaWxpdHlSZXNvbHV0aW9uXSAtIFdoZXRoZXIgdG8gcnVuIHRoZSBjb250cm9sbGVyIGFjdGlvbiB3aXRob3V0IHJlc29sdmluZyByZXF1ZXN0IGFiaWxpdHkuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtza2lwQ29udHJvbGxlckNvbm5lY3Rpb25zXSAtIFdoZXRoZXIgdG8gcnVuIHRoZSBjb250cm9sbGVyIGFjdGlvbiB3aXRob3V0IHRoZSBhdXRvbWF0aWMgZGF0YWJhc2UgY2hlY2tvdXQgd3JhcHBlci5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3NraXBUZW5hbnRSZXNvbHV0aW9uXSAtIFdoZXRoZXIgdG8gcnVuIHRoZSBjb250cm9sbGVyIGFjdGlvbiB3aXRob3V0IHJlc29sdmluZyByZXF1ZXN0IHRlbmFudC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdmlld1BhdGhdIC0gT3B0aW9uYWwgdmlldyBwYXRoIG92ZXJyaWRlIHVzZWQgYnkgY29udHJvbGxlciByZW5kZXIgbG9va3Vwcy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHsoYXJnOiBSb3V0ZVJlc29sdmVySG9va0FyZ3MpID0+IFJvdXRlUmVzb2x2ZXJIb29rUmVzdWx0IHwgbnVsbCB8IFByb21pc2U8Um91dGVSZXNvbHZlckhvb2tSZXN1bHQgfCBudWxsPn0gUm91dGVSZXNvbHZlckhvb2tUeXBlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7dHlwZW9mIGltcG9ydChcIi4vYXV0aG9yaXphdGlvbi9iYXNlLXJlc291cmNlLmpzXCIpLmRlZmF1bHR9IEFiaWxpdHlSZXNvdXJjZUNsYXNzVHlwZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgeyhhcmdzOiB7Y29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHQsIHBhcmFtczogUmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+LCByZXF1ZXN0OiBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC9yZXF1ZXN0LmpzXCIpLmRlZmF1bHQgfCBpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC93ZWJzb2NrZXQtcmVxdWVzdC5qc1wiKS5kZWZhdWx0IHwgdW5kZWZpbmVkLCByZXNwb25zZTogaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvcmVzcG9uc2UuanNcIikuZGVmYXVsdCB8IHVuZGVmaW5lZH0pID0+IGltcG9ydChcIi4vYXV0aG9yaXphdGlvbi9hYmlsaXR5LmpzXCIpLmRlZmF1bHQgfCB2b2lkIHwgUHJvbWlzZTxpbXBvcnQoXCIuL2F1dGhvcml6YXRpb24vYWJpbGl0eS5qc1wiKS5kZWZhdWx0IHwgdm9pZD59IEFiaWxpdHlSZXNvbHZlclR5cGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHsoYXJnczoge2NvbmZpZ3VyYXRpb246IGltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0LCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+PiwgcmVxdWVzdDogaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvcmVxdWVzdC5qc1wiKS5kZWZhdWx0IHwgaW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvd2Vic29ja2V0LXJlcXVlc3QuanNcIikuZGVmYXVsdCB8IHVuZGVmaW5lZCwgcmVzcG9uc2U6IGltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3Jlc3BvbnNlLmpzXCIpLmRlZmF1bHQgfCB1bmRlZmluZWQsIHN1YnNjcmlwdGlvbj86IHtjaGFubmVsOiBzdHJpbmcsIHBhcmFtcz86IFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn19KSA9PiBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPiB8IHZvaWQgfCBQcm9taXNlPFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+IHwgdm9pZD59IFRlbmFudFJlc29sdmVyVHlwZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgeyhhcmdzOiB7Y29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHQsIGRhdGFiYXNlQ29uZmlndXJhdGlvbjogRGF0YWJhc2VDb25maWd1cmF0aW9uVHlwZSwgaWRlbnRpZmllcjogc3RyaW5nLCB0ZW5hbnQ6IFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+fSkgPT4gRGF0YWJhc2VDb25maWd1cmF0aW9uVHlwZSB8IFBhcnRpYWw8RGF0YWJhc2VDb25maWd1cmF0aW9uVHlwZT4gfCB2b2lkfSBUZW5hbnREYXRhYmFzZVJlc29sdmVyVHlwZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gQXBpTWFuaWZlc3RDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3BhdGhdIC0gSFRUUCBwYXRoIGZvciB0aGUgYnVpbHQtaW4gQVBJIG1hbmlmZXN0IGVuZHBvaW50LiBEZWZhdWx0cyB0byBgL2FwaS9tYW5pZmVzdGAuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3Rva2VuXSAtIEJlYXJlciB0b2tlbiByZXF1aXJlZCBpbiB0aGUgYEF1dGhvcml6YXRpb246IEJlYXJlciA8dG9rZW4+YCBoZWFkZXIuIFdoZW4gc2V0LCByZXF1ZXN0cyB3aXRob3V0IGEgbWF0Y2hpbmcgdG9rZW4gYXJlIG5vdCByb3V0ZWQgKDQwNCksIHNvIHRoZSBlbmRwb2ludCBzdGF5cyBoaWRkZW4uXG4gKi9cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gTWNwQ29uZmlndXJhdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtwYXRoXSAtIEhUVFAgcGF0aCBmb3IgdGhlIGJ1aWx0LWluIE1DUCBlbmRwb2ludC4gRGVmYXVsdHMgdG8gYC9tY3BgLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFt0b2tlbl0gLSBCZWFyZXIgdG9rZW4gcmVxdWlyZWQgaW4gdGhlIGBBdXRob3JpemF0aW9uYCBoZWFkZXIuIFdoZW4gc2V0LCByZXF1ZXN0cyB3aXRob3V0IGEgbWF0Y2hpbmcgdG9rZW4gYXJlIG5vdCByb3V0ZWQgKDQwNCksIHNvIHRoZSBlbmRwb2ludCBzdGF5cyBoaWRkZW4uXG4gKi9cblxuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IERlYnVnRW5kcG9pbnRDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3BhdGhdIC0gSFRUUCBwYXRoIGZvciB0aGUgYnVpbHQtaW4gZGVidWcgZW5kcG9pbnQuIERlZmF1bHRzIHRvIGAvdmVsb2Npb3VzL2RlYnVnYC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdG9rZW5dIC0gQmVhcmVyIHRva2VuIHJlcXVpcmVkIGluIHRoZSBgQXV0aG9yaXphdGlvbjogQmVhcmVyIDx0b2tlbj5gIGhlYWRlci4gV2hlbiBzZXQsIHJlcXVlc3RzIHdpdGhvdXQgYSBtYXRjaGluZyB0b2tlbiBhcmUgbm90IHJvdXRlZCAoNDA0KSwgc28gdGhlIGVuZHBvaW50IHN0YXlzIGhpZGRlbi5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFRlbmFudERhdGFiYXNlUHJvdmlkZXJUeXBlXG4gKiBAcHJvcGVydHkgeyhhcmdzOiB7Y29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHQsIGlkZW50aWZpZXI6IHN0cmluZ30pID0+IEFycmF5PFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+PiB8IFByb21pc2U8QXJyYXk8UmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+Pn0gbGlzdFRlbmFudHMgLSBMaXN0cyB0ZW5hbnRzIHRoYXQgc2hvdWxkIGJlIGNyZWF0ZWQsIGNoZWNrZWQsIG9yIG1pZ3JhdGVkIGZvciB0aGlzIGRhdGFiYXNlIGlkZW50aWZpZXIuXG4gKiBAcHJvcGVydHkgeyhhcmdzOiB7Y29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHQsIGlkZW50aWZpZXI6IHN0cmluZ30pID0+IFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+IHwgdm9pZCB8IFByb21pc2U8UmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4gfCB2b2lkPn0gW3Jlc29sdmVHZW5lcmF0aW9uVGVuYW50XSAtIFJlc29sdmVzIG9uZSBleHBsaWNpdCB0ZW5hbnQgZGVzY3JpcHRvciBmb3Igc2NoZW1hL2Jhc2UtbW9kZWwgZ2VuZXJhdGlvbiB3aXRob3V0IGVudW1lcmF0aW5nIGxpZmVjeWNsZSB0ZW5hbnRzLlxuICogQHByb3BlcnR5IHsoYXJnczoge2NvbmZpZ3VyYXRpb246IGltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0LCBpZGVudGlmaWVyOiBzdHJpbmd9KSA9PiBBcnJheTxSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj4gfCBQcm9taXNlPEFycmF5PFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pj59IFtsaXN0UmVzdHJpY3RUZW5hbnRzXSAtIExpc3RzIGV4aXN0aW5nIHRlbmFudHMgdGhhdCBzaG91bGQgYmUgY2hlY2tlZCBmb3IgZGVwZW5kZW50IHJlc3RyaWN0IGRlc3Ryb3lzLiBEZWZhdWx0cyB0byBsaXN0VGVuYW50cy5cbiAqIEBwcm9wZXJ0eSB7KGFyZ3M6IHtjb25maWd1cmF0aW9uOiBpbXBvcnQoXCIuL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdCwgZGF0YWJhc2VDb25maWd1cmF0aW9uOiBEYXRhYmFzZUNvbmZpZ3VyYXRpb25UeXBlLCBpZGVudGlmaWVyOiBzdHJpbmcsIHRlbmFudDogUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT59KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPn0gW2NyZWF0ZURhdGFiYXNlXSAtIENyZWF0ZXMgdGhlIHRlbmFudCBkYXRhYmFzZS9zY2hlbWEgZm9yIG9uZSB0ZW5hbnQuXG4gKiBAcHJvcGVydHkgeyhhcmdzOiB7Y29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHQsIGRhdGFiYXNlQ29uZmlndXJhdGlvbjogRGF0YWJhc2VDb25maWd1cmF0aW9uVHlwZSwgaWRlbnRpZmllcjogc3RyaW5nLCB0ZW5hbnQ6IFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+fSkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD59IFtkcm9wRGF0YWJhc2VdIC0gRHJvcHMgdGhlIHRlbmFudCBkYXRhYmFzZS9zY2hlbWEgZm9yIG9uZSB0ZW5hbnQuXG4gKiBAcHJvcGVydHkgeyhhcmdzOiB7Y29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHQsIGRhdGFiYXNlQ29uZmlndXJhdGlvbjogRGF0YWJhc2VDb25maWd1cmF0aW9uVHlwZSwgaWRlbnRpZmllcjogc3RyaW5nLCB0ZW5hbnQ6IFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+fSkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD59IFtjaGVja1RlbmFudF0gLSBDaGVja3Mgb25lIHRlbmFudCBkYXRhYmFzZSBiZWZvcmUgZ2VuZXJpYyBjb25uZWN0aW9uIHZhbGlkYXRpb24uXG4gKiBAcHJvcGVydHkgeyhhcmdzOiB7Y29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHQsIGRhdGFiYXNlQ29uZmlndXJhdGlvbjogRGF0YWJhc2VDb25maWd1cmF0aW9uVHlwZSwgaWRlbnRpZmllcjogc3RyaW5nLCBtaWdyYXRpb25zQXBwbGllZDogbnVtYmVyLCB0ZW5hbnQ6IFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+fSkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD59IFthZnRlck1pZ3JhdGVUZW5hbnRdIC0gUnVucyBhcHAtb3duZWQgdGVuYW50IHdvcmsgYWZ0ZXIgZ2VuZXJpYyBtaWdyYXRpb25zIGZvciBvbmUgdGVuYW50LiBgbWlncmF0aW9uc0FwcGxpZWRgIGlzIGhvdyBtYW55IG1pZ3JhdGlvbnMgYWN0dWFsbHkgcmFuICgwIHdoZW4gdGhlIHRlbmFudCB3YXMgYWxyZWFkeSB1cCB0byBkYXRlKSwgc28gdGhlIGFwcCBjYW4gc2tpcCBleHBlbnNpdmUgcGVyLXRlbmFudCB3b3JrIG9uIG5vLW9wIGRlcGxveXMuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBDb25maWd1cmF0aW9uQXJnc1R5cGVcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2F1dG9sb2FkXSAtIEdsb2JhbGx5IGVuYWJsZSBhdXRvLWJhdGNoLXByZWxvYWQgb2YgcmVsYXRpb25zaGlwcyBvbiBsYXp5IGFjY2Vzcy4gRGVmYXVsdCB0cnVlLlxuICogQHByb3BlcnR5IHtDb3JzVHlwZX0gW2NvcnNdIC0gQ09SUyBjb25maWd1cmF0aW9uIGZvciB0aGUgSFRUUCBzZXJ2ZXIuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2Nvb2tpZVNlY3JldF0gLSBTZWNyZXQgZm9yIGVuY3J5cHRpbmcgY29va2llcy5cbiAqIEBwcm9wZXJ0eSB7QWJpbGl0eVJlc291cmNlQ2xhc3NUeXBlW119IFthYmlsaXR5UmVzb3VyY2VzXSAtIFJlc291cmNlIGNsYXNzZXMgdXNlZCB0byBkZWZpbmUgYWJpbGl0aWVzIHBlciBtb2RlbC5cbiAqIEBwcm9wZXJ0eSB7QWJpbGl0eVJlc29sdmVyVHlwZX0gW2FiaWxpdHlSZXNvbHZlcl0gLSBSZXNvbHZlciBmb3IgY3JlYXRpbmcgcmVxdWVzdC1zY29wZWQgYWJpbGl0eSBpbnN0YW5jZXMuXG4gKiBAcHJvcGVydHkge0F0dGFjaG1lbnRzQ29uZmlndXJhdGlvbn0gW2F0dGFjaG1lbnRzXSAtIEF0dGFjaG1lbnQgc3RvcmFnZSBjb25maWd1cmF0aW9uLlxuICogQHByb3BlcnR5IHtCYWNrZW5kUHJvamVjdENvbmZpZ3VyYXRpb25bXX0gW2JhY2tlbmRQcm9qZWN0c10gLSBCYWNrZW5kIHByb2plY3QgZGVmaW5pdGlvbnMgdXNlZCBmb3IgZnJvbnRlbmQgbW9kZWwgZ2VuZXJhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7VmVsb2Npb3VzUGFja2FnZUNvbmZpZ3VyYXRpb25bXX0gW3BhY2thZ2VzXSAtIEV4dGVybmFsIFZlbG9jaW91cyBwYWNrYWdlcyB0aGF0IGNvbnRyaWJ1dGUgbW9kZWxzLCBmcm9udGVuZC1tb2RlbCByZXNvdXJjZXMgYW5kIG1pZ3JhdGlvbnMuXG4gKiBAcHJvcGVydHkge2ZhbHNlIHwge1trZXk6IHN0cmluZ106IHtba2V5OiBzdHJpbmddOiBEYXRhYmFzZUNvbmZpZ3VyYXRpb25UeXBlfX19IFtkYXRhYmFzZV0gLSBEYXRhYmFzZSBjb25maWd1cmF0aW9ucyBrZXllZCBieSBlbnZpcm9ubWVudCBhbmQgaWRlbnRpZmllciwgb3IgZmFsc2UgZm9yIGFuIGV4cGxpY2l0bHkgZGF0YWJhc2UtZnJlZSBhcHBsaWNhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2RlYnVnXSAtIEVuYWJsZSBkZWJ1ZyBsb2dnaW5nLlxuICogQHByb3BlcnR5IHtib29sZWFuIHwgRGVidWdFbmRwb2ludENvbmZpZ3VyYXRpb259IFtkZWJ1Z0VuZHBvaW50XSAtIEVuYWJsZSB0aGUgYnVpbHQtaW4gZGVidWcgZW5kcG9pbnQuIERlZmF1bHRzIHRvIGZhbHNlLlxuICogQHByb3BlcnR5IHtib29sZWFuIHwgQXBpTWFuaWZlc3RDb25maWd1cmF0aW9ufSBbYXBpTWFuaWZlc3RdIC0gRW5hYmxlIHRoZSBidWlsdC1pbiBBUEkgbWFuaWZlc3QgZW5kcG9pbnQuIERlZmF1bHRzIHRvIGZhbHNlLlxuICogQHByb3BlcnR5IHtib29sZWFuIHwgTWNwQ29uZmlndXJhdGlvbn0gW21jcF0gLSBFbmFibGUgdGhlIGJ1aWx0LWluIE1DUCBlbmRwb2ludCBvbiB0aGUgSFRUUCBzZXJ2ZXIgKEpTT04tUlBDIG92ZXIgSFRUUCBpbiBhZGRpdGlvbiB0byB0aGUgYHZlbG9jaW91cyBtY3BgIHN0ZGlvIHNlcnZlcikuIERlZmF1bHRzIHRvIGZhbHNlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtkaXJlY3RvcnldIC0gQmFzZSBkaXJlY3RvcnkgZm9yIHRoZSBwcm9qZWN0LlxuICogQHByb3BlcnR5IHtib29sZWFufSBbZW5mb3JjZVRlbmFudERhdGFiYXNlU2NvcGVzXSAtIFJlcXVpcmUgdGVuYW50LXN3aXRjaGVkIG1vZGVsIHF1ZXJpZXMgdG8gcmVzb2x2ZSBhIHRlbmFudCBkYXRhYmFzZSBpZGVudGlmaWVyLiBEZWZhdWx0cyB0byB0cnVlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtlbnZpcm9ubWVudF0gLSBDdXJyZW50IGVudmlyb25tZW50IG5hbWUuXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4vZW52aXJvbm1lbnQtaGFuZGxlcnMvYmFzZS5qc1wiKS5kZWZhdWx0fSBlbnZpcm9ubWVudEhhbmRsZXIgLSBFbnZpcm9ubWVudCBoYW5kbGVyIGluc3RhbmNlLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbZXhwb3NlSW50ZXJuYWxFcnJvcnNUb0NsaWVudHNdIC0gUmV0dXJuIHVuZXhwZWN0ZWQgaW50ZXJuYWwgZXJyb3IgbWVzc2FnZXMgYW5kIHN0YWNrIHRyYWNlcyBpbiBmcm9udGVuZC1tb2RlbCBjbGllbnQgcGF5bG9hZHMgaW4gZXZlcnkgZW52aXJvbm1lbnQuIERlZmF1bHRzIHRvIHRydWUuXG4gKiBAcHJvcGVydHkge3ttYXhPcGVuSGFuZGxlcz86IG51bWJlcn19IFtmcm9udGVuZFRlbmFudFNxbGl0ZV0gLSBCb3VuZGVkIGZyb250ZW5kIHRlbmFudCBTUUxpdGUgbGlmZWN5Y2xlIGNvbmZpZ3VyYXRpb24uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtzZWN1cmVGcm9udGVuZE1vZGVsRXJyb3JzXSAtIERlcHJlY2F0ZWQgY29tcGF0aWJpbGl0eSBhbGlhcyBmb3IgYGV4cG9zZUludGVybmFsRXJyb3JzVG9DbGllbnRzOiBmYWxzZWAgd2hlbiB0aGUgYXV0aG9yaXRhdGl2ZSBvcHRpb24gaXMgb21pdHRlZC5cbiAqIEBwcm9wZXJ0eSB7SHR0cFNlcnZlckNvbmZpZ3VyYXRpb259IFtodHRwU2VydmVyXSAtIERlZmF1bHQgSFRUUCBzZXJ2ZXIgY29uZmlndXJhdGlvbiBmb3IgYXBwbGljYXRpb25zIHN0YXJ0ZWQgZnJvbSB0aGlzIGNvbmZpZ3VyYXRpb24uXG4gKiBAcHJvcGVydHkge0xvZ2dpbmdDb25maWd1cmF0aW9ufSBbbG9nZ2luZ10gLSBMb2dnaW5nIGNvbmZpZ3VyYXRpb24uXG4gKiBAcHJvcGVydHkge0JhY2tncm91bmRKb2JzQ29uZmlndXJhdGlvbn0gW2JhY2tncm91bmRKb2JzXSAtIEJhY2tncm91bmQgam9icyBjb25maWd1cmF0aW9uLlxuICogQHByb3BlcnR5IHtCZWFjb25Db25maWd1cmF0aW9ufSBbYmVhY29uXSAtIEJlYWNvbiBicm9hZGNhc3QgYnVzIGNvbmZpZ3VyYXRpb24uXG4gKiBAcHJvcGVydHkge1NjaGVkdWxlZEJhY2tncm91bmRKb2JzQ29uZmlndXJhdGlvbiB8IFNjaGVkdWxlZEJhY2tncm91bmRKb2JzTG9hZGVyVHlwZX0gW3NjaGVkdWxlZEJhY2tncm91bmRKb2JzXSAtIFNjaGVkdWxlZCBiYWNrZ3JvdW5kIGpvYnMgY29uZmlndXJhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7TWFpbGVyQmFja2VuZH0gW21haWxlckJhY2tlbmRdIC0gTWFpbCBkZWxpdmVyeSBiYWNrZW5kLlxuICogQHByb3BlcnR5IHsoYXJnczoge2NvbmZpZ3VyYXRpb246IGltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0LCB0eXBlOiBzdHJpbmd9KSA9PiB2b2lkfSBpbml0aWFsaXplTW9kZWxzIC0gSG9vayB0byByZWdpc3RlciBtb2RlbHMgZm9yIGEgZ2l2ZW4gaW5pdGlhbGl6YXRpb24gdHlwZS5cbiAqIEBwcm9wZXJ0eSB7SW5pdGlhbGl6ZXJzVHlwZX0gW2luaXRpYWxpemVyc10gLSBJbml0aWFsaXplciBsb2FkZXIgZm9yIGVudmlyb25tZW50IGJvb3RzdHJhcHBpbmcuXG4gKiBAcHJvcGVydHkge3N0cmluZyB8ICgoKSA9PiBzdHJpbmcpfSBsb2NhbGUgLSBEZWZhdWx0IGxvY2FsZSBvciBsb2NhbGUgcmVzb2x2ZXIuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBsb2NhbGVzIC0gU3VwcG9ydGVkIGxvY2FsZXMuXG4gKiBAcHJvcGVydHkge0xvY2FsZUZhbGxiYWNrc1R5cGV9IGxvY2FsZUZhbGxiYWNrcyAtIExvY2FsZSBmYWxsYmFjayBtYXAuXG4gKiBAcHJvcGVydHkge1N0cnVjdHVyZVNxbENvbmZpZ3VyYXRpb259IFtzdHJ1Y3R1cmVTcWxdIC0gU3RydWN0dXJlIFNRTCBnZW5lcmF0aW9uIGNvbmZpZ3VyYXRpb24uXG4gKiBAcHJvcGVydHkge1ZlbG9jaW91c1N5bmNDb25maWd1cmF0aW9ufSBbc3luY10gLSBMb2NhbC9vZmZsaW5lIHN5bmMgZnJhbWV3b3JrIGNvbmZpZ3VyYXRpb24uXG4gKiBAcHJvcGVydHkge1RlbmFudFJlc29sdmVyVHlwZX0gW3RlbmFudFJlc29sdmVyXSAtIFJlc29sdmVyIGZvciBjcmVhdGluZyByZXF1ZXN0LXNjb3BlZCB0ZW5hbnQgY29udGV4dCBvYmplY3RzLlxuICogQHByb3BlcnR5IHtUZW5hbnREYXRhYmFzZVJlc29sdmVyVHlwZX0gW3RlbmFudERhdGFiYXNlUmVzb2x2ZXJdIC0gUmVzb2x2ZXIgZm9yIGRlcml2aW5nIHRlbmFudC1zcGVjaWZpYyBkYXRhYmFzZSBjb25maWcgb3ZlcnJpZGVzLlxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBUZW5hbnREYXRhYmFzZVByb3ZpZGVyVHlwZT59IFt0ZW5hbnREYXRhYmFzZVByb3ZpZGVyc10gLSBUZW5hbnQgZGF0YWJhc2UgbGlmZWN5Y2xlIHByb3ZpZGVycyBrZXllZCBieSBkYXRhYmFzZSBpZGVudGlmaWVyLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFt0ZXN0aW5nXSAtIFBhdGggdG8gdGhlIHRlc3RpbmcgY29uZmlndXJhdGlvbiBmaWxlLlxuICogQHByb3BlcnR5IHtzdHJpbmcgfCAoKCkgPT4gc3RyaW5nIHwgdW5kZWZpbmVkKX0gW3RpbWVab25lXSAtIERlZmF1bHQgdGltZXpvbmUgZm9yIHRpbWV6b25lLWxlc3MgZGF0ZXRpbWUgc3RyaW5ncy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgKCgpID0+IG51bWJlcil9IFt0aW1lem9uZU9mZnNldE1pbnV0ZXNdIC0gRGVmYXVsdCB0aW1lem9uZSBvZmZzZXQgaW4gbWludXRlcy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgc3RyaW5nW119IFt0cnVzdGVkUHJveGllc10gLSBUcnVzdGVkIHJldmVyc2UgcHJveHkgYWRkcmVzcyByYW5nZXMgdXNlZCB0byByZXNvbHZlIHJlcXVlc3QgcmVtb3RlIGFkZHJlc3NlcyBmcm9tIGZvcndhcmRpbmcgaGVhZGVycy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgKCgpID0+IG51bWJlcil9IFtyZXF1ZXN0VGltZW91dE1zXSAtIFRpbWVvdXQgaW4gc2Vjb25kcyBmb3IgY29tcGxldGluZyBhIEhUVFAgcmVxdWVzdC5cbiAqIEBwcm9wZXJ0eSB7Um91dGVSZXNvbHZlckhvb2tUeXBlW119IFtyb3V0ZVJlc29sdmVySG9va3NdIC0gSG9vayBjYWxsYmFja3MgdGhhdCBjYW4gaGlqYWNrIHVucmVzb2x2ZWQgcm91dGVzLlxuICogQHByb3BlcnR5IHtXZWJzb2NrZXRDaGFubmVsUmVzb2x2ZXJUeXBlfSBbd2Vic29ja2V0Q2hhbm5lbFJlc29sdmVyXSAtIFJlc29sdmUgYSB3ZWJzb2NrZXQgY2hhbm5lbCBjbGFzcy9pbnN0YW5jZSBmb3IgZWFjaCBjb25uZWN0aW9uLlxuICogQHByb3BlcnR5IHtXZWJzb2NrZXRNZXNzYWdlSGFuZGxlclJlc29sdmVyVHlwZX0gW3dlYnNvY2tldE1lc3NhZ2VIYW5kbGVyUmVzb2x2ZXJdIC0gUmVzb2x2ZSBhIHJhdyB3ZWJzb2NrZXQgbWVzc2FnZSBoYW5kbGVyIGZvciBlYWNoIGNvbm5lY3Rpb24uXG4gKi9cblxuZXhwb3J0IGNvbnN0IG5vdGhpbmcgPSB7fVxuIl19