obsidian-integration-testing 10.3.2 → 11.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/lib/cjs/desktop-only-plugin-skip-error.cjs +47 -0
- package/dist/lib/cjs/desktop-only-plugin-skip-error.d.cts +30 -0
- package/dist/lib/cjs/eval-in-obsidian.cjs +1 -1
- package/dist/lib/cjs/eval-in-obsidian.d.cts +154 -1
- package/dist/lib/cjs/global-setup-core.cjs +26 -5
- package/dist/lib/cjs/index.cjs +10 -1
- package/dist/lib/cjs/index.d.cts +9 -4
- package/dist/lib/cjs/library.cjs +1 -1
- package/dist/lib/cjs/namespace-bootstrap.cjs +87 -5
- package/dist/lib/cjs/obsidian-metadata.cjs +1135 -332
- package/dist/lib/cjs/obsidian-metadata.d.cts +57 -6
- package/dist/lib/cjs/open-obsidian-settings-tab.cjs +51 -0
- package/dist/lib/cjs/open-obsidian-settings-tab.d.cts +49 -0
- package/dist/lib/cjs/transport-desktop-cdp.cjs +1 -1
- package/dist/lib/cjs/transport-desktop-cdp.d.cts +1 -2
- package/dist/lib/cjs/transport-options.cjs +15 -1
- package/dist/lib/cjs/transport-options.d.cts +11 -0
- package/dist/lib/esm/desktop-only-plugin-skip-error.d.mts +30 -0
- package/dist/lib/esm/desktop-only-plugin-skip-error.mjs +23 -0
- package/dist/lib/esm/eval-in-obsidian.d.mts +154 -1
- package/dist/lib/esm/eval-in-obsidian.mjs +1 -1
- package/dist/lib/esm/global-setup-core.mjs +26 -5
- package/dist/lib/esm/index.d.mts +9 -4
- package/dist/lib/esm/index.mjs +7 -1
- package/dist/lib/esm/library.mjs +1 -1
- package/dist/lib/esm/namespace-bootstrap.mjs +87 -5
- package/dist/lib/esm/obsidian-metadata.d.mts +57 -6
- package/dist/lib/esm/obsidian-metadata.mjs +1135 -332
- package/dist/lib/esm/open-obsidian-settings-tab.d.mts +49 -0
- package/dist/lib/esm/open-obsidian-settings-tab.mjs +27 -0
- package/dist/lib/esm/transport-desktop-cdp.d.mts +1 -2
- package/dist/lib/esm/transport-desktop-cdp.mjs +1 -1
- package/dist/lib/esm/transport-options.d.mts +11 -0
- package/dist/lib/esm/transport-options.mjs +7 -1
- package/package.json +27 -24
- package/dist/obsidian-integration-testing-10.3.2.tgz +0 -0
|
@@ -3,6 +3,10 @@ var __defProp = Object.defineProperty;
|
|
|
3
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
6
10
|
var __copyProps = (to, from, except, desc) => {
|
|
7
11
|
if (from && typeof from === "object" || typeof from === "function") {
|
|
8
12
|
for (let key of __getOwnPropNames(from))
|
|
@@ -13,5 +17,15 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
13
17
|
};
|
|
14
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
15
19
|
var transport_options_exports = {};
|
|
20
|
+
__export(transport_options_exports, {
|
|
21
|
+
checkIsMobileTransport: () => checkIsMobileTransport
|
|
22
|
+
});
|
|
16
23
|
module.exports = __toCommonJS(transport_options_exports);
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3RyYW5zcG9ydC1vcHRpb25zLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogRGlzY3JpbWluYXRlZCB1bmlvbiB0eXBlcyBmb3IgY29uZmlndXJpbmcgdGhlIE9ic2lkaWFuIHRyYW5zcG9ydFxuICogdmlhIHZpdGVzdCBgZW52aXJvbm1lbnRPcHRpb25zYC5cbiAqL1xuXG4vKipcbiAqIFRyYW5zcG9ydCBvcHRpb25zIGZvciBBbmRyb2lkIHRlc3RpbmcgdmlhIEFwcGl1bSBXZWJWaWV3IGluamVjdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPYnNpZGlhbkFuZHJvaWRBcHBpdW1UcmFuc3BvcnRPcHRpb25zIHtcbiAgLyoqXG4gICAqIEFwcCBwYWNrYWdlIChBbmRyb2lkKSBvciBidW5kbGUgSUQgKGlPUykuXG4gICAqIERlZmF1bHRzIHRvIGAnbWQub2JzaWRpYW4nYFxuICAgKi9cbiAgcmVhZG9ubHkgYXBwSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIGZvciB0aGUgYXV0by1zdGFydGVkIEFwcGl1bSBzZXJ2ZXIgdG8gYmVjb21lIHJlYWR5XG4gICAqIChpdHMgYC9zdGF0dXNgIGVuZHBvaW50IHRvIHJlc3BvbmQpLlxuICAgKlxuICAgKiBPbmx5IGFwcGxpZXMgd2hlbiB0aGUgaGFybmVzcyBhdXRvLXN0YXJ0cyB0aGUgQXBwaXVtIHNlcnZlclxuICAgKiAoe0BsaW5rIHNob3VsZEF1dG9TdGFydEFwcGl1bX0pOyBpZ25vcmVkIHdoZW4gYXR0YWNoaW5nIHRvIGFuXG4gICAqIGFscmVhZHktcnVubmluZyBzZXJ2ZXIuIE9uIGEgY29sZCBtYWNoaW5lIHRoZSBgbnB4IGFwcGl1bWAgc2VydmVyIGNhbiB0YWtlXG4gICAqIGEgd2hpbGUgdG8gZmluaXNoIGJvb3RpbmcsIHNvIHJhaXNlIHRoaXMgaWYgc3RhcnR1cCB0aW1lcyBvdXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAxODAwMDBgXG4gICAqL1xuICByZWFkb25seSBhcHBpdW1TdGFydFRpbWVvdXRJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIEFwcGl1bSBzZXJ2ZXIgVVJMIChlLmcuIGAnaHR0cDovL2xvY2FsaG9zdDo0NzIzJ2ApLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwaXVtVXJsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBbmRyb2lkIEFWRCAoQW5kcm9pZCBWaXJ0dWFsIERldmljZSkgbmFtZS5cbiAgICpcbiAgICogVGhlIHRyYW5zcG9ydCBmYWN0b3J5IGxhdW5jaGVzIGBlbXVsYXRvciAtYXZkIDxhdmROYW1lPmAgYXMgYSBiYWNrZ3JvdW5kXG4gICAqIHByb2Nlc3MgYW5kIHBvbGxzIHVudGlsIHRoZSBkZXZpY2UgYXBwZWFycy4gVGhlIGVtdWxhdG9yIGlzIGtpbGxlZFxuICAgKiBvbiB0cmFuc3BvcnQgZGlzcG9zYWwuXG4gICAqXG4gICAqIFJ1biBgZW11bGF0b3IgLWxpc3QtYXZkc2AgdG8gc2VlIGF2YWlsYWJsZSBBVkQgbmFtZXMuXG4gICAqL1xuICByZWFkb25seSBhdmROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkZXZpY2UgVURJRCB0byByZXVzZSAoZS5nLiBgJ2VtdWxhdG9yLTU1NTQnYCkuXG4gICAqXG4gICAqIFBvcHVsYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBnbG9iYWwgc2V0dXAgYWZ0ZXIgdGhlIEFwcGl1bSBzZXNzaW9uIGlzXG4gICAqIGVzdGFibGlzaGVkLiBXaGVuIHByZXNlbnQgYWxvbmdzaWRlIHtAbGluayBzZXNzaW9uSWR9LCB0aGUgdHJhbnNwb3J0XG4gICAqIGZhY3Rvcnkgc2tpcHMgZW11bGF0b3Igc3RhcnR1cCBhbmQgYXR0YWNoZXMgdG8gdGhlIGV4aXN0aW5nIHNlc3Npb24uXG4gICAqL1xuICByZWFkb25seSBkZXZpY2VJZD86IHN0cmluZztcblxuICAvKipcbiAgICogVGltZW91dCBpbiBtaWxsaXNlY29uZHMgZm9yIHdhaXRpbmcsIGFmdGVyIGBzeXMuYm9vdF9jb21wbGV0ZWRgLCBmb3IgYVxuICAgKiBoYXJuZXNzLXN0YXJ0ZWQgZW11bGF0b3IgdG8gYmVjb21lIGlkbGUgYmVmb3JlIHRoZSBBcHBpdW0gc2Vzc2lvbiBpc1xuICAgKiBlc3RhYmxpc2hlZC5cbiAgICpcbiAgICogYHN5cy5ib290X2NvbXBsZXRlZGAgZmlyZXMgKmJlZm9yZSogdGhlIGd1ZXN0IGlzIGFjdHVhbGx5IGlkbGU6IHBhY2thZ2VcbiAgICogb3B0aW1pemF0aW9uIGFuZCBzeXN0ZW0gc2VydmljZXMga2VlcCBjaHVybmluZywgc28gZXN0YWJsaXNoaW5nIHRoZSBzZXNzaW9uXG4gICAqIGltbWVkaWF0ZWx5IG1ha2VzIGV2ZXJ5IG9uZSBvZiBVaUF1dG9tYXRvcjIncyBzZXJpYWxpemVkIGBhZGJgIHJvdW5kLXRyaXBzXG4gICAqIGNvbnRlbmQgd2l0aCB0aGF0IHdvcmsgYW5kIGluZmxhdGVzIHNlc3Npb24gZXN0YWJsaXNobWVudCB+M3guIFRoZSBmYWN0b3J5XG4gICAqIGluc3RlYWQgd2FpdHMgdW50aWwgdGhlIGJvb3QgYW5pbWF0aW9uIGhhcyBzdG9wcGVkIGFuZCB0aGUgcGFja2FnZSBtYW5hZ2VyXG4gICAqIGlzIHNlcnZpbmcsIHByb2NlZWRpbmcgZWFybHkgb25jZSBpZGxlIG9yIGFmdGVyIHRoaXMgYnVkZ2V0IChiZXN0LWVmZm9ydCBcdTIwMTQgYVxuICAgKiB0aW1lb3V0IGxvZ3MgYSB3YXJuaW5nIGFuZCBwcm9jZWVkcykuIFNldCBgMGAgdG8gc2tpcCB0aGUgd2FpdC4gT25seSBhcHBsaWVzXG4gICAqIHRvIGEgaGFybmVzcy1zdGFydGVkIGVtdWxhdG9yLCBub3QgYSByZXVzZWQgb25lLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgNjAwMDBgXG4gICAqL1xuICByZWFkb25seSBkZXZpY2VJZGxlVGltZW91dEluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBhdXRvLXN0YXJ0ZWQgQXBwaXVtIHNlcnZlciBjb25zb2xlIHdpbmRvdyBpcyBzaG93bi5cbiAgICpcbiAgICogV2hlbiBgZmFsc2VgICh0aGUgZGVmYXVsdCksIHRoZSBgbnB4IGFwcGl1bWAgc2VydmVyIHByb2Nlc3MgaXMgc3Bhd25lZCB3aXRoXG4gICAqIGl0cyBjb25zb2xlIHdpbmRvdyBoaWRkZW4gKGB3aW5kb3dzSGlkZWApIGFuZCBpdHMgb3V0cHV0IGRpc2NhcmRlZCwgc28gaXRcbiAgICogbmVpdGhlciBzdGVhbHMgZm9jdXMgbm9yIHdyaXRlcyB0byB0aGUgaW52b2tpbmcgdGVybWluYWwuIElnbm9yZWQgd2hlblxuICAgKiBhdHRhY2hpbmcgdG8gYW4gYWxyZWFkeS1ydW5uaW5nIEFwcGl1bSBzZXJ2ZXIgKHtAbGluayBzaG91bGRBdXRvU3RhcnRBcHBpdW19XG4gICAqIGBmYWxzZWAsIG9yIHRoZSBzZXJ2ZXIgYWxyZWFkeSByZWFjaGFibGUpLiBTZXQgYHRydWVgIHRvIHNlZSB0aGUgc2VydmVyIGxvZyB3aW5kb3dcbiAgICogYW5kIGl0cyBsaXZlIG91dHB1dC5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgaXNBcHBpdW1Db25zb2xlVmlzaWJsZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGF1dG8tc3RhcnRlZCBBbmRyb2lkIGVtdWxhdG9yIHdpbmRvdyBpcyBzaG93biBvbiBzY3JlZW4uXG4gICAqXG4gICAqIFdoZW4gYGZhbHNlYCAodGhlIGRlZmF1bHQpLCB0aGUgZW11bGF0b3IgaXMgc3RhcnRlZCB3aXRoIGAtbm8td2luZG93YFxuICAgKiAoaGVhZGxlc3MpLCBzbyBpdCBuZXZlciBzdGVhbHMgZm9jdXMuIElnbm9yZWQgd2hlbiByZXVzaW5nIGFuIGFscmVhZHktcnVubmluZ1xuICAgKiBkZXZpY2UgKG5vdGhpbmcgaXMgbGF1bmNoZWQgdG8gaGlkZSkuIFNldCBgdHJ1ZWAgdG8gd2F0Y2ggdGhlIGVtdWxhdG9yIFVJLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBpc0VtdWxhdG9yVmlzaWJsZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIGZvciB3YWl0aW5nIGZvciBgYXBwLndvcmtzcGFjZS5sYXlvdXRSZWFkeWAgYWZ0ZXJcbiAgICogdGhlIHZhdWx0IGlzIChyZSlvcGVuZWQuXG4gICAqXG4gICAqIFJlZ2lzdGVyaW5nIGEgdmF1bHQgdHJpZ2dlcnMgYSBmdWxsIE9ic2lkaWFuIHJlLWluaXQgKGBsb2NhdGlvbi5yZWxvYWQoKWBcbiAgICogcmVvcGVucyB0aGUgdmF1bHQgYW5kIHJlbG9hZHMgZXZlcnkgcGx1Z2luIFx1MjAxNCB0aGUgaGVhdmllc3Qgc3RhcnR1cCBzdGVwKS4gT25cbiAgICogYSBjb2xkLWJvb3RlZCBvciB1bmRlci1wcm92aXNpb25lZCBlbXVsYXRvciB0aGF0IGluaXQgY2FuIHRha2UgYSB3aGlsZSwgc29cbiAgICogdGhpcyBidWRnZXQgaXMgdGhlIGxhcmdlc3Qgb2YgdGhlIHRyYW5zcG9ydCB0aW1lb3V0cy4gUmFpc2UgaXQgZnVydGhlciBpZlxuICAgKiByZWxlYXNlcyBzdGlsbCBmbGFrZSBvbiBzbG93IENJIGVtdWxhdG9ycy5cbiAgICpcbiAgICogQGRlZmF1bHQgYDkwMDAwYFxuICAgKi9cbiAgcmVhZG9ubHkgbGF5b3V0UmVhZHlUaW1lb3V0SW5NaWxsaXNlY29uZHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEhvdyBvbGQgYSBsZWZ0b3ZlciAqKmhvc3QqKiBkaXJlY3RvcnkgbXVzdCBiZSBiZWZvcmVcbiAgICoge0BsaW5rIHNob3VsZFN3ZWVwTGVmdG92ZXJzfSByZW1vdmVzIGl0LlxuICAgKlxuICAgKiBHb3Zlcm5zIHRoZSBob3N0LXNpZGUgc3dlZXAgb25seSAodGhlIGB0ZW1wLXZhdWx0LSpgIHN0YWdpbmcgZGlyZWN0b3JpZXNcbiAgICogdGhpcyBydW4ncyBtYWNoaW5lIGFjY3VtdWxhdGVzIGluIGl0cyB0ZW1wIGRpcikuIFRoZSAqKmRldmljZSoqIHN3ZWVwIGlzXG4gICAqIHVuY29uZGl0aW9uYWw6IEFuZHJvaWQgcnVucyBob2xkIHRoZSBleGNsdXNpdmUgYGFuZHJvaWRgIHNldHVwIGxvY2ssIHNvIG5vXG4gICAqIGNvbmN1cnJlbnQgcnVuIGNhbiBvd24gYSBkZXZpY2UgdmF1bHQsIGFuZCBhbiBhZ2UgZ2F0ZSB0aGVyZSB3b3VsZCBsZXQgYVxuICAgKiB2YXVsdCBsZWFrZWQgbWludXRlcyBhZ28gc3Vydml2ZSBpbnRvIHRoZSBuZXh0IHJ1biBcdTIwMTQgd2hpY2ggaXMgdGhlIGZhaWx1cmVcbiAgICogbG9vcCB0aGUgc3dlZXAgZXhpc3RzIHRvIGJyZWFrLiBTZXQgYDBgIHRvIHJlbW92ZSBldmVyeSBob3N0IG1hdGNoIHRvby5cbiAgICpcbiAgICogQGRlZmF1bHQgYDcyMDAwMDBgXG4gICAqL1xuICByZWFkb25seSBsZWZ0b3Zlck1heEFnZUluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgZXh0cmEgYXR0ZW1wdHMgdG8gZW5hYmxlIHRoZSBwbHVnaW4gYW5kIHZlcmlmeSBpdCBsb2FkZWQsIG9uIHRvcFxuICAgKiBvZiB0aGUgZmlyc3QgYXR0ZW1wdC5cbiAgICpcbiAgICogT24gYSBmcmVzaGx5IGNvbGQtYm9vdGVkIGVtdWxhdG9yIHRoZSBwbHVnaW4gc3Vic3lzdGVtIGNhbiBzdGlsbCBiZSBzZXR0bGluZ1xuICAgKiB3aGVuIHRoZSBoYXJuZXNzIGVuYWJsZXMgdGhlIHBsdWdpbiwgc28gdGhlIGVuYWJsZSBsYW5kcyBpbiB0aGUgZW5hYmxlZCBzZXRcbiAgICogYnV0IHRoZSBsb2FkIHJhY2VzIGFuZCBmYWlscyAoYFwiPGlkPlwiIGlzIGluIHRoZSBlbmFibGVkIHNldCBidXQgbm90IGxvYWRlZGApLlxuICAgKiBEZXZpY2UtaWRsZSBhbmQgYGxheW91dFJlYWR5YCBhcmUgYWxyZWFkeSBhd2FpdGVkLCBzbyB0aGlzIGlzIHRoZSBuYXJyb3dcbiAgICogcmVzaWR1YWwgcmFjZTogdGhlIGhhcm5lc3MgcmV0cmllcyB0aGUgZW5hYmxlICsgbG9hZC12ZXJpZmljYXRpb24gdGhpcyBtYW55XG4gICAqIHRpbWVzIHdpdGggZXhwb25lbnRpYWwgYmFja29mZiAoc2VlXG4gICAqIHtAbGluayBwbHVnaW5FbmFibGVSZXRyeURlbGF5SW5NaWxsaXNlY29uZHN9KSwgZm9yY2luZyBhIGdlbnVpbmUgcmVsb2FkIGVhY2hcbiAgICogYXR0ZW1wdC4gQSBjYXB0dXJlZCBwbHVnaW4gbG9hZCBlcnJvciBpcyB0cmVhdGVkIGFzIGEgZGV0ZXJtaW5pc3RpYyBidWcgYW5kXG4gICAqIGlzICoqbm90KiogcmV0cmllZC4gU2V0IGAwYCB0byBkaXNhYmxlIHJldHJ5IChhIHNpbmdsZSBhdHRlbXB0KS5cbiAgICpcbiAgICogQGRlZmF1bHQgYDNgXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5FbmFibGVSZXRyeUNvdW50PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBCYXNlIGRlbGF5IGluIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIHBsdWdpbi1lbmFibGUgYXR0ZW1wdHMgKHNlZVxuICAgKiB7QGxpbmsgcGx1Z2luRW5hYmxlUmV0cnlDb3VudH0pLlxuICAgKlxuICAgKiBUaGUgZGVsYXkgZ3Jvd3MgZXhwb25lbnRpYWxseSBwZXIgcmV0cnk6IHRoZSBmaXJzdCByZXRyeSB3YWl0cyB0aGlzIGxvbmcsXG4gICAqIHRoZSBzZWNvbmQgdHdpY2UgYXMgbG9uZywgdGhlIHRoaXJkIGZvdXIgdGltZXMsIGFuZCBzbyBvbiBcdTIwMTQgZ2l2aW5nIGFcbiAgICogc3RpbGwtc2V0dGxpbmcgY29sZCBndWVzdCBwcm9ncmVzc2l2ZWx5IG1vcmUgdGltZSB0byBiZWNvbWUgcmVhZHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAyMDAwYFxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luRW5hYmxlUmV0cnlEZWxheUluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaW1lb3V0IGluIG1pbGxpc2Vjb25kcyBmb3IgZXN0YWJsaXNoaW5nIHRoZSBBcHBpdW0gc2Vzc2lvbiAoV2ViRHJpdmVySU9cbiAgICogYHJlbW90ZSgpYCBcdTIwMTQgVWlBdXRvbWF0b3IyIHNlcnZlciBpbnN0YWxsICsgYXBwIGxhdW5jaCkuXG4gICAqXG4gICAqIFRoaXMgaXMgdGhlIGxhcmdlc3QgYW5kIG1vc3QgbG9hZC1zZW5zaXRpdmUgc3RlcCBvZiB0aGUgQW5kcm9pZCBzZXR1cDpcbiAgICogb24gYSBjb2xkIG9yIGNvbnRlbmRlZCBlbXVsYXRvciBpdCBkb21pbmF0ZXMgc3RhcnR1cCBhbmQgY2FuIHRha2UgYSBmZXdcbiAgICogbWludXRlcy4gUmFpc2UgaXQgaWYgc2Vzc2lvbiBlc3RhYmxpc2htZW50IHRpbWVzIG91dCB1bmRlciBsb2FkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgMTgwMDAwYFxuICAgKi9cbiAgcmVhZG9ubHkgc2Vzc2lvbkNvbm5lY3Rpb25SZXRyeVRpbWVvdXRJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogQW4gZXhpc3RpbmcgQXBwaXVtIHNlc3Npb24gSUQgdG8gcmVhdHRhY2ggdG8uXG4gICAqXG4gICAqIFBvcHVsYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBnbG9iYWwgc2V0dXAgYW5kIHByb3ZpZGVkIHRvIHRlc3Qgd29ya2Vyc1xuICAgKiB2aWEgdGhlIGZyYW1ld29yaydzIGNvbnRleHQgbWVjaGFuaXNtIChlLmcuIFZpdGVzdCBgcHJvdmlkZWAvYGluamVjdGApLlxuICAgKiBXaGVuIHByZXNlbnQsIHRoZSB0cmFuc3BvcnQgZmFjdG9yeSB1c2VzIFdlYkRyaXZlcklPJ3MgYGF0dGFjaCgpYCBpbnN0ZWFkXG4gICAqIG9mIGNyZWF0aW5nIGEgbmV3IHNlc3Npb24sIGF2b2lkaW5nIGR1cGxpY2F0ZSBBcHBpdW0vQURCIGNvbm5lY3Rpb25zLlxuICAgKi9cbiAgcmVhZG9ubHkgc2Vzc2lvbklkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGF1dG9tYXRpY2FsbHkgaW5zdGFsbCBtaXNzaW5nIEFwcGl1bSBkZXBlbmRlbmNpZXMgKHRoZVxuICAgKiBgdWlhdXRvbWF0b3IyYCBkcml2ZXIsIGFuZCBBcHBpdW0gaXRzZWxmKSBiZWZvcmUgYXV0by1zdGFydGluZyB0aGUgc2VydmVyLlxuICAgKlxuICAgKiBXaGVuIGB0cnVlYCAodGhlIGRlZmF1bHQpIGFuZCB0aGUgaGFybmVzcyBpcyBhYm91dCB0byBhdXRvLXN0YXJ0IHRoZSBBcHBpdW1cbiAgICogc2VydmVyICh7QGxpbmsgc2hvdWxkQXV0b1N0YXJ0QXBwaXVtfSksIHRoZSBmYWN0b3J5IGZpcnN0IGVuc3VyZXMgQXBwaXVtIGlzXG4gICAqIGluc3RhbGxlZCAoZ2xvYmFsbHksIHZpYSBgbnBtIGluc3RhbGwgLWcgYXBwaXVtYCkgYW5kIHRoYXQgdGhlXG4gICAqIGB1aWF1dG9tYXRvcjJgIGRyaXZlciBpcyBpbnN0YWxsZWQgKGBhcHBpdW0gZHJpdmVyIGluc3RhbGwgdWlhdXRvbWF0b3IyYCksXG4gICAqIGluc3RhbGxpbmcgd2hpY2hldmVyIGlzIG1pc3NpbmcuIElnbm9yZWQgd2hlbiBhdHRhY2hpbmcgdG8gYW5cbiAgICogYWxyZWFkeS1ydW5uaW5nIHNlcnZlciAobm90aGluZyBpcyBhdXRvLXN0YXJ0ZWQsIHNvIG5vdGhpbmcgaXMgaW5zdGFsbGVkKSBvclxuICAgKiB3aGVuIHtAbGluayBzaG91bGRBdXRvU3RhcnRBcHBpdW19IGlzIGBmYWxzZWAuIFNldCBpdCB0byBgZmFsc2VgIHRvIG1hbmFnZVxuICAgKiB0aGUgQXBwaXVtIHRvb2xjaGFpbiB5b3Vyc2VsZiBhbmQgc2tpcCB0aGUgbWFjaGluZS1tdXRhdGluZyBnbG9iYWwgaW5zdGFsbC5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRBdXRvSW5zdGFsbEFwcGl1bURlcGVuZGVuY2llcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYXV0b21hdGljYWxseSBzdGFydCB0aGUgQXBwaXVtIHNlcnZlciBpZiBpdCBpcyBub3QgcmVhY2hhYmxlLlxuICAgKlxuICAgKiBXaGVuIGB0cnVlYCAodGhlIGRlZmF1bHQpLCB0aGUgdHJhbnNwb3J0IGZhY3Rvcnkgc3Bhd25zIGBucHggYXBwaXVtYFxuICAgKiBhcyBhIGJhY2tncm91bmQgcHJvY2VzcyB3aGVuIHRoZSBwcmVmbGlnaHQgY2hlY2sgZmFpbHMsIGFuZCBraWxscyBpdFxuICAgKiBvbiB0cmFuc3BvcnQgZGlzcG9zYWwuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkQXV0b1N0YXJ0QXBwaXVtPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgaGFybmVzcyByZW1vdmVzIHRoZSB0ZW1wb3JhcnkgZGlyZWN0b3JpZXMgZWFybGllciBydW5zIGxlYWtlZC5cbiAgICpcbiAgICogV2hlbiBgdHJ1ZWAgKHRoZSBkZWZhdWx0KSwgZWFjaCBydW4gc3dlZXBzIGF0IHN0YXJ0ICoqYW5kKiogYXQgZW5kOiBvbiB0aGVcbiAgICogZGV2aWNlLCBldmVyeSBgdGVtcC12YXVsdC0qYCBkaXJlY3RvcnkgdW5kZXIge0BsaW5rIHZhdWx0QmFzZVBhdGh9IChwbHVzIHRoZVxuICAgKiBzdGFsZSB2YXVsdCByZWdpc3RyYXRpb25zIGluIE9ic2lkaWFuIE1vYmlsZSdzIGBsb2NhbFN0b3JhZ2VgKTsgb24gdGhlIGhvc3QsXG4gICAqIHRoZSBsZWZ0b3ZlciBgdGVtcC12YXVsdC0qYCBhbmQgb3duZWQgYHVzZXJkYXRhLSpgIGRpcmVjdG9yaWVzIG9sZGVyIHRoYW5cbiAgICoge0BsaW5rIGxlZnRvdmVyTWF4QWdlSW5NaWxsaXNlY29uZHN9LlxuICAgKlxuICAgKiBBIHJ1biB0aGF0IGRpZXMgY2Fubm90IGNsZWFuIHVwIGFmdGVyIGl0c2VsZiBcdTIwMTQgaXRzIHRlYXJkb3duIGdvZXMgdGhyb3VnaCB0aGVcbiAgICogV2ViVmlldywgYW5kIGEgZGVhZCBXZWJWaWV3IGlzIHdoYXQgbW9zdCBBbmRyb2lkIGZhaWx1cmVzIGFyZSBcdTIwMTQgc28gdGhlXG4gICAqIHJlc2lkdWUgYWNjdW11bGF0ZXMgYW5kIHNsb3dzIHRoZSBuZXh0IHJ1bidzIHN0YXJ0dXAgZW51bWVyYXRpb24gdW50aWwgaXRcbiAgICogbWlzc2VzIHRoZSBXZWJWaWV3LXJlYWRpbmVzcyBidWRnZXQuIFRoZSBzdGFydCBzd2VlcCBpcyB0aGUgaGFsZiB0aGF0IGJyZWFrc1xuICAgKiB0aGF0IGxvb3AsIGJlY2F1c2UgaXQgcnVucyBiZWZvcmUgYW55dGhpbmcgdGhhdCBjYW4gZGllLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFN3ZWVwTGVmdG92ZXJzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRGlzY3JpbWluYW50IGZvciB0aGUgdHJhbnNwb3J0IHR5cGUuXG4gICAqL1xuICByZWFkb25seSB0eXBlOiAnb2JzaWRpYW4tYW5kcm9pZC1hcHBpdW0nO1xuXG4gIC8qKlxuICAgKiBCYXNlIHBhdGggb24gdGhlIGRldmljZSB3aGVyZSBPYnNpZGlhbiBzdG9yZXMgdmF1bHRzLlxuICAgKlxuICAgKiBEZWZhdWx0czpcbiAgICogLSBBbmRyb2lkOiBgL3NkY2FyZC9Eb2N1bWVudHMvYFxuICAgKiAtIGlPUzogYEBtZC5vYnNpZGlhbjpkb2N1bWVudHMvYFxuICAgKi9cbiAgcmVhZG9ubHkgdmF1bHRCYXNlUGF0aD86IHN0cmluZztcblxuICAvKipcbiAgICogVGltZW91dCBpbiBtaWxsaXNlY29uZHMgZm9yIHdhaXRpbmcgZm9yIHRoZSBXZWJWaWV3IGNvbnRleHQgdG8gYmVjb21lIGF2YWlsYWJsZS5cbiAgICpcbiAgICogT24gc2xvdyBlbXVsYXRvcnMsIHRoZSBDaHJvbWVEcml2ZXIgcHJveHkgdGhhdCBoYW5kbGVzIFdlYlZpZXcgY29tbWFuZHNcbiAgICogbWF5IG5vdCBiZSByZWFkeSBpbW1lZGlhdGVseSBhZnRlciB0aGUgQXBwaXVtIHNlc3Npb24gc3RhcnRzLiBUaGlzIHRpbWVvdXRcbiAgICogY29udHJvbHMgaG93IGxvbmcgdG8gcG9sbCBiZWZvcmUgZ2l2aW5nIHVwLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgNjAwMDBgXG4gICAqL1xuICByZWFkb25seSB3ZWJ2aWV3VGltZW91dEluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFRyYW5zcG9ydCBvcHRpb25zIGZvciBkZXNrdG9wIHRlc3RpbmcgdmlhIENocm9tZSBEZXZUb29scyBQcm90b2NvbC5cbiAqXG4gKiBUaGlzIGlzIHRoZSBkZWZhdWx0IGRlc2t0b3AgdHJhbnNwb3J0LiBCeSBkZWZhdWx0IHRoZSBoYXJuZXNzICoqbGF1bmNoZXMgYW5kXG4gKiBvd25zIGFuIGlzb2xhdGVkIE9ic2lkaWFuIGluc3RhbmNlKiogaW4gYSB0ZW1wb3JhcnkgdXNlci1kYXRhIGRpciAobmV2ZXJcbiAqIHRvdWNoaW5nIHRoZSB1c2VyJ3MgT2JzaWRpYW4pLCBjb25uZWN0ZWQgb3ZlciBhIGZyZWUgQ0RQIHBvcnQuIFByb3ZpZGVcbiAqIHtAbGluayBPYnNpZGlhbkNkcFRyYW5zcG9ydE9wdGlvbnMucG9ydH0gdG8gaW5zdGVhZCBhdHRhY2ggdG8gYW5cbiAqIGFscmVhZHktcnVubmluZyBPYnNpZGlhbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPYnNpZGlhbkNkcFRyYW5zcG9ydE9wdGlvbnMge1xuICAvKipcbiAgICogVGltZW91dCBpbiBtaWxsaXNlY29uZHMgZm9yIGluZGl2aWR1YWwgQ0RQIGNvbW1hbmRzLlxuICAgKiBEZWZhdWx0cyB0byAzMDAwMFxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWFuZFRpbWVvdXRJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogR3JhY2Ugd2luZG93IGluIG1pbGxpc2Vjb25kcyBmb3IgZmFzdC1mYWlsaW5nIGEgKipkZWFkIGJvb3QqKiBvZiB0aGUgb3duZWRcbiAgICogaW5zdGFuY2UuXG4gICAqXG4gICAqIFdoZW4gYW4gYXNhciBjYW5ub3QgcnVuIG9uIHRoZSBsYXVuY2hlZCBFbGVjdHJvbiBzaGVsbCAodGhlIGluc3RhbGxlclxuICAgKiB2ZXJzaW9uIGlzIHRvbyBvbGQgZm9yIHRoZSBhcHAgdmVyc2lvbiksIHRoZSByZW5kZXJlciBsb2FkcyBidXQgbmV2ZXJcbiAgICogYm9vdHN0cmFwczogYGRvY3VtZW50LmJvZHlgIHN0YXlzIGVtcHR5IGFuZCBgd2luZG93LmFwcGAgcmVtYWluc1xuICAgKiBgdW5kZWZpbmVkYCBcdTIwMTQgYSBibGFjayBzY3JlZW4uIFJhdGhlciB0aGFuIHdhaXRpbmcgb3V0IHRoZSBmdWxsIHJlYWRpbmVzc1xuICAgKiB0aW1lb3V0LCB0aGUgb3duZWQtdmF1bHQgcmVhZGluZXNzIHBvbGwgY29uY2x1ZGVzIHRoZSBib290IGlzIGRlYWQgb25jZSB0aGVcbiAgICogcmVuZGVyZXIgaGFzIGJlZW4gYGRvY3VtZW50LnJlYWR5U3RhdGVgIGAnY29tcGxldGUnYCBmb3IgdGhpcyBsb25nIHdpdGggbm9cbiAgICogYHdpbmRvdy5hcHBgIGFuZCBhbiBlbXB0eSBgPGJvZHk+YCwgYW5kIHRocm93cyBhXG4gICAqIGBSZW5kZXJlckZhaWxlZFRvSW5pdGlhbGl6ZUVycm9yYC4gT25seSBhcHBsaWVzIHRvIGFuIG93bmVkIGluc3RhbmNlXG4gICAqIChpZ25vcmVkIGluIGF0dGFjaCBtb2RlLCB7QGxpbmsgcG9ydH0gc2V0KS4gU2V0IGAwYCB0byBkaXNhYmxlIGZhc3QtZmFpbCBhbmRcbiAgICogcmVzdG9yZSB0aGUgcGxhaW4gd2FpdC1vdXQtdGhlLXJlYWRpbmVzcy10aW1lb3V0IGJlaGF2aW9yLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgMTAwMDBgXG4gICAqL1xuICByZWFkb25seSBkZWFkQm9vdEdyYWNlSW5NaWxsaXNlY29uZHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIENEUCBob3N0LlxuICAgKiBEZWZhdWx0cyB0byBgJ2xvY2FsaG9zdCdgXG4gICAqL1xuICByZWFkb25seSBob3N0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBNYXJrcyB7QGxpbmsgcG9ydH0gYXMgdGhlIENEUCBwb3J0IG9mIGEgKipoYXJuZXNzLW93bmVkLCBpc29sYXRlZCBpbnN0YW5jZSoqXG4gICAqIHRoYXQgdGhlIGdsb2JhbCBzZXR1cCBhbHJlYWR5IGxhdW5jaGVkIGFuZCBwcmVwYXJlZCAodmF1bHQgcmVnaXN0ZXJlZCxcbiAgICogcGx1Z2luIGVuYWJsZWQpLlxuICAgKlxuICAgKiBQb3B1bGF0ZWQgYXV0b21hdGljYWxseSBieSB0aGUgZ2xvYmFsIHNldHVwIGFuZCBwcm92aWRlZCB0byB0ZXN0IHdvcmtlcnMgdmlhXG4gICAqIHRoZSBmcmFtZXdvcmsncyBjb250ZXh0IG1lY2hhbmlzbSAoZS5nLiBWaXRlc3QgYHByb3ZpZGVgL2BpbmplY3RgKS4gV2hlbiBzZXQsXG4gICAqIHRoZSB3b3JrZXIgKiphdHRhY2hlcyoqIHRvIHRoZSBvd25lZCBpbnN0YW5jZSBvbiB7QGxpbmsgcG9ydH0gaW5zdGVhZCBvZlxuICAgKiBsYXVuY2hpbmcgaXRzIG93biwgYW5kIHNraXBzIHRoZSB1c2VyLXNjb3BlIHZhdWx0LXJlZ2lzdHJhdGlvbiBwcmVmbGlnaHQgXHUyMDE0XG4gICAqIHRoZSBvd25lZCBpbnN0YW5jZSdzIHZhdWx0IGxpdmVzIGluIGFuIGlzb2xhdGVkIHVzZXItZGF0YSBjb25maWcsIG5vdCB0aGVcbiAgICogdXNlci1zY29wZSByZWdpc3RyeS4gRG8gbm90IHNldCB0aGlzIG1hbnVhbGx5OyBmb3IgcGxhaW4gYXR0YWNoIG1vZGUgdXNlXG4gICAqIHtAbGluayBwb3J0fSBhbG9uZS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHVuZGVmaW5lZGBcbiAgICovXG4gIHJlYWRvbmx5IGlzSGFybmVzc093bmVkSW5zdGFuY2U/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBvd25lZCBkZXNrdG9wIE9ic2lkaWFuIHdpbmRvdyBpcyBzaG93biBvbiBzY3JlZW4uXG4gICAqXG4gICAqIFdoZW4gYGZhbHNlYCwgdGhlIGhhcm5lc3MgbGF1bmNoZXMgdGhlIG93bmVkIGluc3RhbmNlIHdpdGhcbiAgICoga2VlcC1hbGl2ZSBDaHJvbWl1bSBmbGFncyBhbmQgbW92ZXMgaXRzIHdpbmRvdyAqKm9mZi1zY3JlZW4qKiBvbmNlIEVsZWN0cm9uJ3NcbiAgICogcmVtb3RlIGJyaWRnZSBpcyBhdmFpbGFibGUsIHNvIHRoZSBydW4gbmV2ZXIgc3RlYWxzIGZvY3VzIG9yIHBvcHMgYSB3aW5kb3cgaW5cbiAgICogZnJvbnQgb2YgeW91LiBPZmYtc2NyZWVuIChub3QgbWluaW1pemVkKSBrZWVwcyB0aGUgcmVuZGVyZXIgbGl2ZSwgc29cbiAgICogYHNldFRpbWVvdXRgLCBgcmVxdWVzdEFuaW1hdGlvbkZyYW1lYCwgYDpob3ZlcmAsIGFuZCB0cnVzdGVkIGlucHV0IGJlaGF2ZVxuICAgKiBpZGVudGljYWxseSB0byBhIHZpc2libGUgd2luZG93LiBEZWZhdWx0cyB0byBgdHJ1ZWA7IGludGVncmF0aW9uIHNldHVwXG4gICAqIGV4cGxpY2l0bHkgcGFzc2VzIGBmYWxzZWAgdG8gYXZvaWQgc3RlYWxpbmcgZm9jdXMuIElnbm9yZWQgaW4gYXR0YWNoIG1vZGVcbiAgICogKHtAbGluayBwb3J0fSBzZXQpIFx1MjAxNCB0aGUgaGFybmVzcyBuZXZlclxuICAgKiBtb3ZlcyB0aGUgdXNlcidzIG93biBydW5uaW5nIHdpbmRvdy5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBpc09ic2lkaWFuQXBwVmlzaWJsZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEhvdyBvbGQgYSBsZWZ0b3ZlciBkaXJlY3RvcnkgbXVzdCBiZSBiZWZvcmUge0BsaW5rIHNob3VsZFN3ZWVwTGVmdG92ZXJzfVxuICAgKiByZW1vdmVzIGl0LlxuICAgKlxuICAgKiBUaGUgZ2F0ZSBtYXR0ZXJzIG1vc3Qgb24gZGVza3RvcDogcnVucyBhcmUgZGVsaWJlcmF0ZWx5ICoqbm90Kiogc2VyaWFsaXplZFxuICAgKiAoZWFjaCBvd25zIGFuIGlzb2xhdGVkIGluc3RhbmNlKSwgYW5kIGV2ZXJ5IHByb2plY3Qgb24gdGhlIG1hY2hpbmUgc2hhcmVzXG4gICAqIG9uZSB0ZW1wIGRpcmVjdG9yeSwgc28gYSB5b3VuZyBgdGVtcC12YXVsdC0qYCAvIGB1c2VyZGF0YS0qYCBkaXJlY3RvcnkgbWF5XG4gICAqIHdlbGwgYmVsb25nIHRvIGEgcnVuIHRoYXQgaXMgc3RpbGwgaW4gZmxpZ2h0LiBSYWlzZSBpdCBpZiBhIHJ1biBvZiB5b3VycyBjYW5cbiAgICogb3V0bGl2ZSB0aGUgZGVmYXVsdDsgc2V0IGAwYCB0byByZW1vdmUgZXZlcnkgbWF0Y2ggcmVnYXJkbGVzcyBvZiBhZ2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IGA3MjAwMDAwYFxuICAgKi9cbiAgcmVhZG9ubHkgbGVmdG92ZXJNYXhBZ2VJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogUGlucyB0aGUgKipFbGVjdHJvbiBzaGVsbCoqIChpbnN0YWxsZXIgYnVpbGQpIHRoZSBvd25lZCBpbnN0YW5jZSBydW5zLlxuICAgKlxuICAgKiBBY2NlcHRzIGFuIGV4cGxpY2l0IGAneC55LnonYCwgYCdwdWJsaWMtbGF0ZXN0J2AsIG9yIGAnY2F0YWx5c3QtbGF0ZXN0J2AuXG4gICAqIFRoZSBtYXRjaGluZyBHaXRIdWIgcmVsZWFzZSBpbnN0YWxsZXIgaXMgZG93bmxvYWRlZCBhbmQgZXh0cmFjdGVkIHRvIGFcbiAgICogcG9ydGFibGUgc2hlbGwgKGNhY2hlZCBmb3IgcmV1c2UpLiBQdWJsaWMgcmVsZWFzZXMgb25seSBcdTIwMTQgY2F0YWx5c3QgYnVpbGRzXG4gICAqIGhhdmUgbm8gcHVibGljIGluc3RhbGxlci4gSWdub3JlZCB3aGVuIHtAbGluayBwb3J0fSAoYXR0YWNoIG1vZGUpIGlzIHNldC5cbiAgICpcbiAgICogQGRlZmF1bHQgYHVuZGVmaW5lZGBcbiAgICovXG4gIHJlYWRvbmx5IG9ic2lkaWFuSW5zdGFsbGVyVmVyc2lvbj86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogUGlucyB0aGUgKipPYnNpZGlhbiBhcHAgdmVyc2lvbioqIChhc2FyKSB0aGUgb3duZWQgaW5zdGFuY2UgcnVucy5cbiAgICpcbiAgICogQWNjZXB0cyBhbiBleHBsaWNpdCBgJ3gueS56J2AsIGAncHVibGljLWxhdGVzdCdgLCBvciBgJ2NhdGFseXN0LWxhdGVzdCdgLlxuICAgKiBWZXJzaW9ucyBhdCBvciBhYm92ZSB0aGUgc2hlbGwgdmVyc2lvbiBhcmUgYXBwbGllZCBhcyBhIGNoZWFwIGFzYXIgc3dhcDtcbiAgICogb2xkZXIgdmVyc2lvbnMgdHJhbnNwYXJlbnRseSB1c2UgdGhlIG1hdGNoaW5nIGluc3RhbGxlciBzaGVsbC4gV2hlbiBvbWl0dGVkLFxuICAgKiB0aGUgdXNlcidzIGN1cnJlbnRseS1pbnN0YWxsZWQgdmVyc2lvbiBpcyB1c2VkLiBJZ25vcmVkIHdoZW4ge0BsaW5rIHBvcnR9XG4gICAqIChhdHRhY2ggbW9kZSkgaXMgc2V0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdW5kZWZpbmVkYFxuICAgKi9cbiAgcmVhZG9ubHkgb2JzaWRpYW5WZXJzaW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBDRFAgcG9ydCBvZiBhbiBhbHJlYWR5LXJ1bm5pbmcgT2JzaWRpYW4gdG8gKiphdHRhY2gqKiB0byAodGhlXG4gICAqIGAtLXJlbW90ZS1kZWJ1Z2dpbmctcG9ydGAgaXQgd2FzIGxhdW5jaGVkIHdpdGgpLiBXaGVuIHNldCwgdGhlIGhhcm5lc3NcbiAgICogYXR0YWNoZXMgaW5zdGVhZCBvZiBvd25pbmcgYW4gaW5zdGFuY2UsIGFuZCB0aGUgdmVyc2lvbiBrbm9icyBhcmUgaWdub3JlZC5cbiAgICogV2hlbiBvbWl0dGVkLCBhbiBvd25lZCBpc29sYXRlZCBpbnN0YW5jZSBpcyBsYXVuY2hlZCBvbiBhbiBhdXRvbWF0aWNhbGx5XG4gICAqIGNob3NlbiBmcmVlIHBvcnQgKG5vIHBvcnQgaXMgaGFyZGNvZGVkKS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHVuZGVmaW5lZGBcbiAgICovXG4gIHJlYWRvbmx5IHBvcnQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gbGF1bmNoIHRoZSBvd25lZCBpbnN0YW5jZSB3aXRoIENocm9taXVtJ3Mgc2FuZGJveCBkaXNhYmxlZFxuICAgKiAoYC0tbm8tc2FuZGJveGApLlxuICAgKlxuICAgKiBOZWVkZWQgdG8gYm9vdCBhbiBvd25lZCBpbnN0YW5jZSBvbiBMaW51eCB3aGVuIHRoZXJlIGlzIG5vXG4gICAqIGNvcnJlY3RseS1jb25maWd1cmVkIHNldHVpZCBgY2hyb21lLXNhbmRib3hgIGhlbHBlciBcdTIwMTQgZS5nLiBhIHBvcnRhYmxlIHNoZWxsXG4gICAqIGV4dHJhY3RlZCBmcm9tIGFuIGluc3RhbGxlciwgb3IgYSBDSSBydW5uZXIgbGF1bmNoaW5nIGFzIGEgbm9uLXJvb3QgdXNlciwgaW5cbiAgICogd2hpY2ggY2FzZSB0aGUgcmVuZGVyZXIgb3RoZXJ3aXNlIHJlZnVzZXMgdG8gc3RhcnQuIEhhcm1sZXNzIG9uXG4gICAqIFdpbmRvd3MvbWFjT1MuIElnbm9yZWQgaW4gYXR0YWNoIG1vZGUgKHtAbGluayBwb3J0fSBzZXQpIFx1MjAxNCB0aGUgaGFybmVzcyBuZXZlclxuICAgKiByZWxhdW5jaGVzIHRoZSB1c2VyJ3MgcnVubmluZyBpbnN0YW5jZS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkRGlzYWJsZVNhbmRib3g/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBoYXJuZXNzIHJlbW92ZXMgdGhlIHRlbXBvcmFyeSBkaXJlY3RvcmllcyBlYXJsaWVyIHJ1bnMgbGVha2VkLlxuICAgKlxuICAgKiBXaGVuIGB0cnVlYCAodGhlIGRlZmF1bHQpLCBlYWNoIHJ1biBzd2VlcHMgYXQgc3RhcnQgYW5kIGF0IGVuZCBmb3JcbiAgICogYHRlbXAtdmF1bHQtKmAgc3RhZ2luZyBkaXJlY3RvcmllcyBhbmQgb3duZWQgYHVzZXJkYXRhLSpgIGluc3RhbmNlIHByb2ZpbGVzXG4gICAqIG9sZGVyIHRoYW4ge0BsaW5rIGxlZnRvdmVyTWF4QWdlSW5NaWxsaXNlY29uZHN9LiBBIHJ1biBraWxsZWQgbWlkLWZsaWdodFxuICAgKiBuZXZlciByZWFjaGVzIGl0cyBvd24gY2xlYW51cCwgc28gd2l0aG91dCB0aGlzIHRoZSB0ZW1wIGRpcmVjdG9yeSBncm93c1xuICAgKiB3aXRob3V0IGJvdW5kLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFN3ZWVwTGVmdG92ZXJzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciBhbiAqKnVucnVubmFibGUqKiBpbnN0YWxsZXJcdTIxOTRhcHAgdmVyc2lvbiBwYWlyIGZhaWxzIGZhc3QgYmVmb3JlIGxhdW5jaC5cbiAgICpcbiAgICogV2hlbiBgdHJ1ZWAgKHRoZSBkZWZhdWx0KSwgYW4gaW5zdGFsbGVyIGJlbG93IHRoZSBhcHAncyBydW4gZmxvb3IgKHRoZVxuICAgKiBvbGRlc3QgaW5zdGFsbGVyIHRoZSBhcHAncyBhc2FyIGNhbiBib290IG9uKSB0aHJvd3NcbiAgICogYEluY29tcGF0aWJsZUluc3RhbGxlclZlcnNpb25FcnJvcmAgZnJvbSB2ZXJzaW9uIHJlc29sdXRpb24sIGJlZm9yZSBhbnl0aGluZ1xuICAgKiBpcyBkb3dubG9hZGVkIG9yIGxhdW5jaGVkLiBTZXQgYGZhbHNlYCB0byBsZXQgdGhlIHBpbiBwcm9jZWVkIHRvIGxhdW5jaFxuICAgKiBpbnN0ZWFkIFx1MjAxNCB3aGVyZSB0aGUgcmVhY3RpdmUgZGVhZC1ib290IGZhc3QtZmFpbFxuICAgKiAoYFJlbmRlcmVyRmFpbGVkVG9Jbml0aWFsaXplRXJyb3JgLCBzZWUge0BsaW5rIGRlYWRCb290R3JhY2VJbk1pbGxpc2Vjb25kc30pXG4gICAqIHN0aWxsIGNhdGNoZXMgdGhlIGJsYWNrLXNjcmVlbiBib290LCBhbmQgdGhlIGAndW5ydW5uYWJsZSdgIHZlcmRpY3QgaXNcbiAgICogc3VyZmFjZWQgYXMgZGF0YSByYXRoZXIgdGhhbiB0aHJvd24uIE9ubHkgYXBwbGllcyB0byBhbiBvd25lZCBpbnN0YW5jZVxuICAgKiAoaWdub3JlZCBpbiBhdHRhY2ggbW9kZSwge0BsaW5rIHBvcnR9IHNldCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkVGhyb3dPbkluY29tcGF0aWJsZUluc3RhbGxlcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYSAqKnNpbGVudCBhc2FyIGZhbGxiYWNrKiogZmFpbHMgZmFzdCBhZnRlciBib290LlxuICAgKlxuICAgKiBXaGVuIGFuIGFzYXIgaXMgc3dhcHBlZCBvbnRvIGFuIGluc3RhbGxlciBzaGVsbCB0b28gb2xkIGZvciBpdCwgdGhlIGluc3RhbmNlXG4gICAqIG1heSBub3QgZGVhZC1ib290IFx1MjAxNCBpdCBjYW4gc2lsZW50bHkgcmV2ZXJ0IHRvIHRoZSBpbnN0YWxsZXIncyBvd24gYnVuZGxlZFxuICAgKiBhc2FyIGFuZCBydW4gdGhlICoqd3JvbmcgKG9sZGVyKSoqIHZlcnNpb24gYmVoaW5kIGEgaGVhbHRoeSBVSS4gV2hlbiBgdHJ1ZWBcbiAgICogKHRoZSBkZWZhdWx0KSwgdGhlIHRyYW5zcG9ydCB2ZXJpZmllcyB0aGUgcnVubmluZyBhcHAgdmVyc2lvbiBhZ2FpbnN0IHRoZSBwaW5cbiAgICogcG9zdC1ib290IGFuZCB0aHJvd3MgYFNpbGVudEFzYXJGYWxsYmFja0Vycm9yYCBvbiBhIG1pc21hdGNoLiBTZXQgYGZhbHNlYCB0b1xuICAgKiBsZXQgdGhlIGJvb3QgcHJvY2VlZCBcdTIwMTQgdGhlIG1pc21hdGNoIGlzIHRoZW4gc3VyZmFjZWQgYXMgZGF0YSAodGhlIGZhbGxiYWNrXG4gICAqIHZlcmRpY3QpIHJhdGhlciB0aGFuIHRocm93bi4gT25seSBhcHBsaWVzIHRvIGFuIG93bmVkIGluc3RhbmNlIHJ1bm5pbmcgYVxuICAgKiBzd2FwcGVkLWluIGFzYXIgKGlnbm9yZWQgaW4gYXR0YWNoIG1vZGUsIHtAbGluayBwb3J0fSBzZXQsIGFuZCB3aGVuIG5vIGFzYXIgaXNcbiAgICogc3dhcHBlZCBcdTIwMTQgdGhlcmUgaXMgbm90aGluZyB0byB2ZXJpZnkpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFRocm93T25TaWxlbnRBc2FyRmFsbGJhY2s/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBvd25lZC1pbnN0YW5jZSBjb21wYXRpYmlsaXR5ICoqbmFnIHdhcm5pbmdzKiogYXJlIGVtaXR0ZWQuXG4gICAqXG4gICAqIENvdmVycyAqKmJvdGgqKiBjb21wYXRpYmlsaXR5IG5hZ3M6IHRoZSBvZmZsaW5lIGluc3RhbGxlclx1MjE5NGFwcCB3YXJuaW5nIChhXG4gICAqIHJ1bm5hYmxlIGluc3RhbGxlciBiZWxvdyB0aGUgcmVjb21tZW5kZWQgZmxvb3IpIGFuZCB0aGUgcG9zdC1ib290XG4gICAqIHJ1bnRpbWUtRWxlY3Ryb24gd2FybmluZyAoYSBsaXZlIEVsZWN0cm9uIGJlbG93IHRoZSBhcHAncyByZWNvbW1lbmRlZFxuICAgKiBtaW5pbXVtKS4gV2hlbiBgdHJ1ZWAgKHRoZSBkZWZhdWx0KSBlYWNoIGZpcmVzIHZpYSB0aGUgaGFybmVzcyBsb2c7IHNldFxuICAgKiBgZmFsc2VgIHRvIHNpbGVuY2UgYm90aCBcdTIwMTQgdGhlIHZlcmRpY3RzIGFyZSBzdGlsbCBjb21wdXRlZCBhbmQgc3VyZmFjZWQgYXNcbiAgICogZGF0YSAoYGNvbXBhdGliaWxpdHlgIC8gYGVsZWN0cm9uQ29tcGF0aWJpbGl0eWApLCBvbmx5IHRoZSBsb2cgaXMgc3VwcHJlc3NlZC5cbiAgICogRG9lcyBub3QgYWZmZWN0IHRoZSBgJ3VucnVubmFibGUnYCB0aHJvdyAoc2VlXG4gICAqIHtAbGluayBzaG91bGRUaHJvd09uSW5jb21wYXRpYmxlSW5zdGFsbGVyfSkuIE9ubHkgYXBwbGllcyB0byBhbiBvd25lZFxuICAgKiBpbnN0YW5jZSAoaWdub3JlZCBpbiBhdHRhY2ggbW9kZSwge0BsaW5rIHBvcnR9IHNldCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkV2Fybk9uQ29tcGF0aWJpbGl0eUlzc3Vlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERpc2NyaW1pbmFudCBmb3IgdGhlIHRyYW5zcG9ydCB0eXBlLlxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZTogJ29ic2lkaWFuLWNkcCc7XG59XG5cbi8qKlxuICogRGlzY3JpbWluYXRlZCB1bmlvbiBvZiBhbGwgc3VwcG9ydGVkIHRyYW5zcG9ydCBjb25maWd1cmF0aW9ucy5cbiAqXG4gKiBVc2VkIGluIHZpdGVzdCBgZW52aXJvbm1lbnRPcHRpb25zLm9ic2lkaWFuVHJhbnNwb3J0YCB0byBzZWxlY3QgYW5kXG4gKiBjb25maWd1cmUgdGhlIHRyYW5zcG9ydCBmb3IgaW50ZWdyYXRpb24gdGVzdHMuXG4gKi9cbmV4cG9ydCB0eXBlIE9ic2lkaWFuVHJhbnNwb3J0T3B0aW9ucyA9XG4gIHwgT2JzaWRpYW5BbmRyb2lkQXBwaXVtVHJhbnNwb3J0T3B0aW9uc1xuICB8IE9ic2lkaWFuQ2RwVHJhbnNwb3J0T3B0aW9ucztcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTsiLAogICJuYW1lcyI6IFtdCn0K
|
|
24
|
+
function checkIsMobileTransport(options) {
|
|
25
|
+
return options.type === "obsidian-android-appium";
|
|
26
|
+
}
|
|
27
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
28
|
+
0 && (module.exports = {
|
|
29
|
+
checkIsMobileTransport
|
|
30
|
+
});
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3RyYW5zcG9ydC1vcHRpb25zLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogRGlzY3JpbWluYXRlZCB1bmlvbiB0eXBlcyBmb3IgY29uZmlndXJpbmcgdGhlIE9ic2lkaWFuIHRyYW5zcG9ydFxuICogdmlhIHZpdGVzdCBgZW52aXJvbm1lbnRPcHRpb25zYC5cbiAqL1xuXG4vKipcbiAqIFRyYW5zcG9ydCBvcHRpb25zIGZvciBBbmRyb2lkIHRlc3RpbmcgdmlhIEFwcGl1bSBXZWJWaWV3IGluamVjdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPYnNpZGlhbkFuZHJvaWRBcHBpdW1UcmFuc3BvcnRPcHRpb25zIHtcbiAgLyoqXG4gICAqIEFwcCBwYWNrYWdlIChBbmRyb2lkKSBvciBidW5kbGUgSUQgKGlPUykuXG4gICAqIERlZmF1bHRzIHRvIGAnbWQub2JzaWRpYW4nYFxuICAgKi9cbiAgcmVhZG9ubHkgYXBwSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIGZvciB0aGUgYXV0by1zdGFydGVkIEFwcGl1bSBzZXJ2ZXIgdG8gYmVjb21lIHJlYWR5XG4gICAqIChpdHMgYC9zdGF0dXNgIGVuZHBvaW50IHRvIHJlc3BvbmQpLlxuICAgKlxuICAgKiBPbmx5IGFwcGxpZXMgd2hlbiB0aGUgaGFybmVzcyBhdXRvLXN0YXJ0cyB0aGUgQXBwaXVtIHNlcnZlclxuICAgKiAoe0BsaW5rIHNob3VsZEF1dG9TdGFydEFwcGl1bX0pOyBpZ25vcmVkIHdoZW4gYXR0YWNoaW5nIHRvIGFuXG4gICAqIGFscmVhZHktcnVubmluZyBzZXJ2ZXIuIE9uIGEgY29sZCBtYWNoaW5lIHRoZSBgbnB4IGFwcGl1bWAgc2VydmVyIGNhbiB0YWtlXG4gICAqIGEgd2hpbGUgdG8gZmluaXNoIGJvb3RpbmcsIHNvIHJhaXNlIHRoaXMgaWYgc3RhcnR1cCB0aW1lcyBvdXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAxODAwMDBgXG4gICAqL1xuICByZWFkb25seSBhcHBpdW1TdGFydFRpbWVvdXRJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIEFwcGl1bSBzZXJ2ZXIgVVJMIChlLmcuIGAnaHR0cDovL2xvY2FsaG9zdDo0NzIzJ2ApLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwaXVtVXJsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBbmRyb2lkIEFWRCAoQW5kcm9pZCBWaXJ0dWFsIERldmljZSkgbmFtZS5cbiAgICpcbiAgICogVGhlIHRyYW5zcG9ydCBmYWN0b3J5IGxhdW5jaGVzIGBlbXVsYXRvciAtYXZkIDxhdmROYW1lPmAgYXMgYSBiYWNrZ3JvdW5kXG4gICAqIHByb2Nlc3MgYW5kIHBvbGxzIHVudGlsIHRoZSBkZXZpY2UgYXBwZWFycy4gVGhlIGVtdWxhdG9yIGlzIGtpbGxlZFxuICAgKiBvbiB0cmFuc3BvcnQgZGlzcG9zYWwuXG4gICAqXG4gICAqIFJ1biBgZW11bGF0b3IgLWxpc3QtYXZkc2AgdG8gc2VlIGF2YWlsYWJsZSBBVkQgbmFtZXMuXG4gICAqL1xuICByZWFkb25seSBhdmROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkZXZpY2UgVURJRCB0byByZXVzZSAoZS5nLiBgJ2VtdWxhdG9yLTU1NTQnYCkuXG4gICAqXG4gICAqIFBvcHVsYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBnbG9iYWwgc2V0dXAgYWZ0ZXIgdGhlIEFwcGl1bSBzZXNzaW9uIGlzXG4gICAqIGVzdGFibGlzaGVkLiBXaGVuIHByZXNlbnQgYWxvbmdzaWRlIHtAbGluayBzZXNzaW9uSWR9LCB0aGUgdHJhbnNwb3J0XG4gICAqIGZhY3Rvcnkgc2tpcHMgZW11bGF0b3Igc3RhcnR1cCBhbmQgYXR0YWNoZXMgdG8gdGhlIGV4aXN0aW5nIHNlc3Npb24uXG4gICAqL1xuICByZWFkb25seSBkZXZpY2VJZD86IHN0cmluZztcblxuICAvKipcbiAgICogVGltZW91dCBpbiBtaWxsaXNlY29uZHMgZm9yIHdhaXRpbmcsIGFmdGVyIGBzeXMuYm9vdF9jb21wbGV0ZWRgLCBmb3IgYVxuICAgKiBoYXJuZXNzLXN0YXJ0ZWQgZW11bGF0b3IgdG8gYmVjb21lIGlkbGUgYmVmb3JlIHRoZSBBcHBpdW0gc2Vzc2lvbiBpc1xuICAgKiBlc3RhYmxpc2hlZC5cbiAgICpcbiAgICogYHN5cy5ib290X2NvbXBsZXRlZGAgZmlyZXMgKmJlZm9yZSogdGhlIGd1ZXN0IGlzIGFjdHVhbGx5IGlkbGU6IHBhY2thZ2VcbiAgICogb3B0aW1pemF0aW9uIGFuZCBzeXN0ZW0gc2VydmljZXMga2VlcCBjaHVybmluZywgc28gZXN0YWJsaXNoaW5nIHRoZSBzZXNzaW9uXG4gICAqIGltbWVkaWF0ZWx5IG1ha2VzIGV2ZXJ5IG9uZSBvZiBVaUF1dG9tYXRvcjIncyBzZXJpYWxpemVkIGBhZGJgIHJvdW5kLXRyaXBzXG4gICAqIGNvbnRlbmQgd2l0aCB0aGF0IHdvcmsgYW5kIGluZmxhdGVzIHNlc3Npb24gZXN0YWJsaXNobWVudCB+M3guIFRoZSBmYWN0b3J5XG4gICAqIGluc3RlYWQgd2FpdHMgdW50aWwgdGhlIGJvb3QgYW5pbWF0aW9uIGhhcyBzdG9wcGVkIGFuZCB0aGUgcGFja2FnZSBtYW5hZ2VyXG4gICAqIGlzIHNlcnZpbmcsIHByb2NlZWRpbmcgZWFybHkgb25jZSBpZGxlIG9yIGFmdGVyIHRoaXMgYnVkZ2V0IChiZXN0LWVmZm9ydCBcdTIwMTQgYVxuICAgKiB0aW1lb3V0IGxvZ3MgYSB3YXJuaW5nIGFuZCBwcm9jZWVkcykuIFNldCBgMGAgdG8gc2tpcCB0aGUgd2FpdC4gT25seSBhcHBsaWVzXG4gICAqIHRvIGEgaGFybmVzcy1zdGFydGVkIGVtdWxhdG9yLCBub3QgYSByZXVzZWQgb25lLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgNjAwMDBgXG4gICAqL1xuICByZWFkb25seSBkZXZpY2VJZGxlVGltZW91dEluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBhdXRvLXN0YXJ0ZWQgQXBwaXVtIHNlcnZlciBjb25zb2xlIHdpbmRvdyBpcyBzaG93bi5cbiAgICpcbiAgICogV2hlbiBgZmFsc2VgICh0aGUgZGVmYXVsdCksIHRoZSBgbnB4IGFwcGl1bWAgc2VydmVyIHByb2Nlc3MgaXMgc3Bhd25lZCB3aXRoXG4gICAqIGl0cyBjb25zb2xlIHdpbmRvdyBoaWRkZW4gKGB3aW5kb3dzSGlkZWApIGFuZCBpdHMgb3V0cHV0IGRpc2NhcmRlZCwgc28gaXRcbiAgICogbmVpdGhlciBzdGVhbHMgZm9jdXMgbm9yIHdyaXRlcyB0byB0aGUgaW52b2tpbmcgdGVybWluYWwuIElnbm9yZWQgd2hlblxuICAgKiBhdHRhY2hpbmcgdG8gYW4gYWxyZWFkeS1ydW5uaW5nIEFwcGl1bSBzZXJ2ZXIgKHtAbGluayBzaG91bGRBdXRvU3RhcnRBcHBpdW19XG4gICAqIGBmYWxzZWAsIG9yIHRoZSBzZXJ2ZXIgYWxyZWFkeSByZWFjaGFibGUpLiBTZXQgYHRydWVgIHRvIHNlZSB0aGUgc2VydmVyIGxvZyB3aW5kb3dcbiAgICogYW5kIGl0cyBsaXZlIG91dHB1dC5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgaXNBcHBpdW1Db25zb2xlVmlzaWJsZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGF1dG8tc3RhcnRlZCBBbmRyb2lkIGVtdWxhdG9yIHdpbmRvdyBpcyBzaG93biBvbiBzY3JlZW4uXG4gICAqXG4gICAqIFdoZW4gYGZhbHNlYCAodGhlIGRlZmF1bHQpLCB0aGUgZW11bGF0b3IgaXMgc3RhcnRlZCB3aXRoIGAtbm8td2luZG93YFxuICAgKiAoaGVhZGxlc3MpLCBzbyBpdCBuZXZlciBzdGVhbHMgZm9jdXMuIElnbm9yZWQgd2hlbiByZXVzaW5nIGFuIGFscmVhZHktcnVubmluZ1xuICAgKiBkZXZpY2UgKG5vdGhpbmcgaXMgbGF1bmNoZWQgdG8gaGlkZSkuIFNldCBgdHJ1ZWAgdG8gd2F0Y2ggdGhlIGVtdWxhdG9yIFVJLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBpc0VtdWxhdG9yVmlzaWJsZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIGZvciB3YWl0aW5nIGZvciBgYXBwLndvcmtzcGFjZS5sYXlvdXRSZWFkeWAgYWZ0ZXJcbiAgICogdGhlIHZhdWx0IGlzIChyZSlvcGVuZWQuXG4gICAqXG4gICAqIFJlZ2lzdGVyaW5nIGEgdmF1bHQgdHJpZ2dlcnMgYSBmdWxsIE9ic2lkaWFuIHJlLWluaXQgKGBsb2NhdGlvbi5yZWxvYWQoKWBcbiAgICogcmVvcGVucyB0aGUgdmF1bHQgYW5kIHJlbG9hZHMgZXZlcnkgcGx1Z2luIFx1MjAxNCB0aGUgaGVhdmllc3Qgc3RhcnR1cCBzdGVwKS4gT25cbiAgICogYSBjb2xkLWJvb3RlZCBvciB1bmRlci1wcm92aXNpb25lZCBlbXVsYXRvciB0aGF0IGluaXQgY2FuIHRha2UgYSB3aGlsZSwgc29cbiAgICogdGhpcyBidWRnZXQgaXMgdGhlIGxhcmdlc3Qgb2YgdGhlIHRyYW5zcG9ydCB0aW1lb3V0cy4gUmFpc2UgaXQgZnVydGhlciBpZlxuICAgKiByZWxlYXNlcyBzdGlsbCBmbGFrZSBvbiBzbG93IENJIGVtdWxhdG9ycy5cbiAgICpcbiAgICogQGRlZmF1bHQgYDkwMDAwYFxuICAgKi9cbiAgcmVhZG9ubHkgbGF5b3V0UmVhZHlUaW1lb3V0SW5NaWxsaXNlY29uZHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEhvdyBvbGQgYSBsZWZ0b3ZlciAqKmhvc3QqKiBkaXJlY3RvcnkgbXVzdCBiZSBiZWZvcmVcbiAgICoge0BsaW5rIHNob3VsZFN3ZWVwTGVmdG92ZXJzfSByZW1vdmVzIGl0LlxuICAgKlxuICAgKiBHb3Zlcm5zIHRoZSBob3N0LXNpZGUgc3dlZXAgb25seSAodGhlIGB0ZW1wLXZhdWx0LSpgIHN0YWdpbmcgZGlyZWN0b3JpZXNcbiAgICogdGhpcyBydW4ncyBtYWNoaW5lIGFjY3VtdWxhdGVzIGluIGl0cyB0ZW1wIGRpcikuIFRoZSAqKmRldmljZSoqIHN3ZWVwIGlzXG4gICAqIHVuY29uZGl0aW9uYWw6IEFuZHJvaWQgcnVucyBob2xkIHRoZSBleGNsdXNpdmUgYGFuZHJvaWRgIHNldHVwIGxvY2ssIHNvIG5vXG4gICAqIGNvbmN1cnJlbnQgcnVuIGNhbiBvd24gYSBkZXZpY2UgdmF1bHQsIGFuZCBhbiBhZ2UgZ2F0ZSB0aGVyZSB3b3VsZCBsZXQgYVxuICAgKiB2YXVsdCBsZWFrZWQgbWludXRlcyBhZ28gc3Vydml2ZSBpbnRvIHRoZSBuZXh0IHJ1biBcdTIwMTQgd2hpY2ggaXMgdGhlIGZhaWx1cmVcbiAgICogbG9vcCB0aGUgc3dlZXAgZXhpc3RzIHRvIGJyZWFrLiBTZXQgYDBgIHRvIHJlbW92ZSBldmVyeSBob3N0IG1hdGNoIHRvby5cbiAgICpcbiAgICogQGRlZmF1bHQgYDcyMDAwMDBgXG4gICAqL1xuICByZWFkb25seSBsZWZ0b3Zlck1heEFnZUluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgZXh0cmEgYXR0ZW1wdHMgdG8gZW5hYmxlIHRoZSBwbHVnaW4gYW5kIHZlcmlmeSBpdCBsb2FkZWQsIG9uIHRvcFxuICAgKiBvZiB0aGUgZmlyc3QgYXR0ZW1wdC5cbiAgICpcbiAgICogT24gYSBmcmVzaGx5IGNvbGQtYm9vdGVkIGVtdWxhdG9yIHRoZSBwbHVnaW4gc3Vic3lzdGVtIGNhbiBzdGlsbCBiZSBzZXR0bGluZ1xuICAgKiB3aGVuIHRoZSBoYXJuZXNzIGVuYWJsZXMgdGhlIHBsdWdpbiwgc28gdGhlIGVuYWJsZSBsYW5kcyBpbiB0aGUgZW5hYmxlZCBzZXRcbiAgICogYnV0IHRoZSBsb2FkIHJhY2VzIGFuZCBmYWlscyAoYFwiPGlkPlwiIGlzIGluIHRoZSBlbmFibGVkIHNldCBidXQgbm90IGxvYWRlZGApLlxuICAgKiBEZXZpY2UtaWRsZSBhbmQgYGxheW91dFJlYWR5YCBhcmUgYWxyZWFkeSBhd2FpdGVkLCBzbyB0aGlzIGlzIHRoZSBuYXJyb3dcbiAgICogcmVzaWR1YWwgcmFjZTogdGhlIGhhcm5lc3MgcmV0cmllcyB0aGUgZW5hYmxlICsgbG9hZC12ZXJpZmljYXRpb24gdGhpcyBtYW55XG4gICAqIHRpbWVzIHdpdGggZXhwb25lbnRpYWwgYmFja29mZiAoc2VlXG4gICAqIHtAbGluayBwbHVnaW5FbmFibGVSZXRyeURlbGF5SW5NaWxsaXNlY29uZHN9KSwgZm9yY2luZyBhIGdlbnVpbmUgcmVsb2FkIGVhY2hcbiAgICogYXR0ZW1wdC4gQSBjYXB0dXJlZCBwbHVnaW4gbG9hZCBlcnJvciBpcyB0cmVhdGVkIGFzIGEgZGV0ZXJtaW5pc3RpYyBidWcgYW5kXG4gICAqIGlzICoqbm90KiogcmV0cmllZC4gU2V0IGAwYCB0byBkaXNhYmxlIHJldHJ5IChhIHNpbmdsZSBhdHRlbXB0KS5cbiAgICpcbiAgICogQGRlZmF1bHQgYDNgXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5FbmFibGVSZXRyeUNvdW50PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBCYXNlIGRlbGF5IGluIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIHBsdWdpbi1lbmFibGUgYXR0ZW1wdHMgKHNlZVxuICAgKiB7QGxpbmsgcGx1Z2luRW5hYmxlUmV0cnlDb3VudH0pLlxuICAgKlxuICAgKiBUaGUgZGVsYXkgZ3Jvd3MgZXhwb25lbnRpYWxseSBwZXIgcmV0cnk6IHRoZSBmaXJzdCByZXRyeSB3YWl0cyB0aGlzIGxvbmcsXG4gICAqIHRoZSBzZWNvbmQgdHdpY2UgYXMgbG9uZywgdGhlIHRoaXJkIGZvdXIgdGltZXMsIGFuZCBzbyBvbiBcdTIwMTQgZ2l2aW5nIGFcbiAgICogc3RpbGwtc2V0dGxpbmcgY29sZCBndWVzdCBwcm9ncmVzc2l2ZWx5IG1vcmUgdGltZSB0byBiZWNvbWUgcmVhZHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAyMDAwYFxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luRW5hYmxlUmV0cnlEZWxheUluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaW1lb3V0IGluIG1pbGxpc2Vjb25kcyBmb3IgZXN0YWJsaXNoaW5nIHRoZSBBcHBpdW0gc2Vzc2lvbiAoV2ViRHJpdmVySU9cbiAgICogYHJlbW90ZSgpYCBcdTIwMTQgVWlBdXRvbWF0b3IyIHNlcnZlciBpbnN0YWxsICsgYXBwIGxhdW5jaCkuXG4gICAqXG4gICAqIFRoaXMgaXMgdGhlIGxhcmdlc3QgYW5kIG1vc3QgbG9hZC1zZW5zaXRpdmUgc3RlcCBvZiB0aGUgQW5kcm9pZCBzZXR1cDpcbiAgICogb24gYSBjb2xkIG9yIGNvbnRlbmRlZCBlbXVsYXRvciBpdCBkb21pbmF0ZXMgc3RhcnR1cCBhbmQgY2FuIHRha2UgYSBmZXdcbiAgICogbWludXRlcy4gUmFpc2UgaXQgaWYgc2Vzc2lvbiBlc3RhYmxpc2htZW50IHRpbWVzIG91dCB1bmRlciBsb2FkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgMTgwMDAwYFxuICAgKi9cbiAgcmVhZG9ubHkgc2Vzc2lvbkNvbm5lY3Rpb25SZXRyeVRpbWVvdXRJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogQW4gZXhpc3RpbmcgQXBwaXVtIHNlc3Npb24gSUQgdG8gcmVhdHRhY2ggdG8uXG4gICAqXG4gICAqIFBvcHVsYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBnbG9iYWwgc2V0dXAgYW5kIHByb3ZpZGVkIHRvIHRlc3Qgd29ya2Vyc1xuICAgKiB2aWEgdGhlIGZyYW1ld29yaydzIGNvbnRleHQgbWVjaGFuaXNtIChlLmcuIFZpdGVzdCBgcHJvdmlkZWAvYGluamVjdGApLlxuICAgKiBXaGVuIHByZXNlbnQsIHRoZSB0cmFuc3BvcnQgZmFjdG9yeSB1c2VzIFdlYkRyaXZlcklPJ3MgYGF0dGFjaCgpYCBpbnN0ZWFkXG4gICAqIG9mIGNyZWF0aW5nIGEgbmV3IHNlc3Npb24sIGF2b2lkaW5nIGR1cGxpY2F0ZSBBcHBpdW0vQURCIGNvbm5lY3Rpb25zLlxuICAgKi9cbiAgcmVhZG9ubHkgc2Vzc2lvbklkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGF1dG9tYXRpY2FsbHkgaW5zdGFsbCBtaXNzaW5nIEFwcGl1bSBkZXBlbmRlbmNpZXMgKHRoZVxuICAgKiBgdWlhdXRvbWF0b3IyYCBkcml2ZXIsIGFuZCBBcHBpdW0gaXRzZWxmKSBiZWZvcmUgYXV0by1zdGFydGluZyB0aGUgc2VydmVyLlxuICAgKlxuICAgKiBXaGVuIGB0cnVlYCAodGhlIGRlZmF1bHQpIGFuZCB0aGUgaGFybmVzcyBpcyBhYm91dCB0byBhdXRvLXN0YXJ0IHRoZSBBcHBpdW1cbiAgICogc2VydmVyICh7QGxpbmsgc2hvdWxkQXV0b1N0YXJ0QXBwaXVtfSksIHRoZSBmYWN0b3J5IGZpcnN0IGVuc3VyZXMgQXBwaXVtIGlzXG4gICAqIGluc3RhbGxlZCAoZ2xvYmFsbHksIHZpYSBgbnBtIGluc3RhbGwgLWcgYXBwaXVtYCkgYW5kIHRoYXQgdGhlXG4gICAqIGB1aWF1dG9tYXRvcjJgIGRyaXZlciBpcyBpbnN0YWxsZWQgKGBhcHBpdW0gZHJpdmVyIGluc3RhbGwgdWlhdXRvbWF0b3IyYCksXG4gICAqIGluc3RhbGxpbmcgd2hpY2hldmVyIGlzIG1pc3NpbmcuIElnbm9yZWQgd2hlbiBhdHRhY2hpbmcgdG8gYW5cbiAgICogYWxyZWFkeS1ydW5uaW5nIHNlcnZlciAobm90aGluZyBpcyBhdXRvLXN0YXJ0ZWQsIHNvIG5vdGhpbmcgaXMgaW5zdGFsbGVkKSBvclxuICAgKiB3aGVuIHtAbGluayBzaG91bGRBdXRvU3RhcnRBcHBpdW19IGlzIGBmYWxzZWAuIFNldCBpdCB0byBgZmFsc2VgIHRvIG1hbmFnZVxuICAgKiB0aGUgQXBwaXVtIHRvb2xjaGFpbiB5b3Vyc2VsZiBhbmQgc2tpcCB0aGUgbWFjaGluZS1tdXRhdGluZyBnbG9iYWwgaW5zdGFsbC5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRBdXRvSW5zdGFsbEFwcGl1bURlcGVuZGVuY2llcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYXV0b21hdGljYWxseSBzdGFydCB0aGUgQXBwaXVtIHNlcnZlciBpZiBpdCBpcyBub3QgcmVhY2hhYmxlLlxuICAgKlxuICAgKiBXaGVuIGB0cnVlYCAodGhlIGRlZmF1bHQpLCB0aGUgdHJhbnNwb3J0IGZhY3Rvcnkgc3Bhd25zIGBucHggYXBwaXVtYFxuICAgKiBhcyBhIGJhY2tncm91bmQgcHJvY2VzcyB3aGVuIHRoZSBwcmVmbGlnaHQgY2hlY2sgZmFpbHMsIGFuZCBraWxscyBpdFxuICAgKiBvbiB0cmFuc3BvcnQgZGlzcG9zYWwuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkQXV0b1N0YXJ0QXBwaXVtPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgaGFybmVzcyByZW1vdmVzIHRoZSB0ZW1wb3JhcnkgZGlyZWN0b3JpZXMgZWFybGllciBydW5zIGxlYWtlZC5cbiAgICpcbiAgICogV2hlbiBgdHJ1ZWAgKHRoZSBkZWZhdWx0KSwgZWFjaCBydW4gc3dlZXBzIGF0IHN0YXJ0ICoqYW5kKiogYXQgZW5kOiBvbiB0aGVcbiAgICogZGV2aWNlLCBldmVyeSBgdGVtcC12YXVsdC0qYCBkaXJlY3RvcnkgdW5kZXIge0BsaW5rIHZhdWx0QmFzZVBhdGh9IChwbHVzIHRoZVxuICAgKiBzdGFsZSB2YXVsdCByZWdpc3RyYXRpb25zIGluIE9ic2lkaWFuIE1vYmlsZSdzIGBsb2NhbFN0b3JhZ2VgKTsgb24gdGhlIGhvc3QsXG4gICAqIHRoZSBsZWZ0b3ZlciBgdGVtcC12YXVsdC0qYCBhbmQgb3duZWQgYHVzZXJkYXRhLSpgIGRpcmVjdG9yaWVzIG9sZGVyIHRoYW5cbiAgICoge0BsaW5rIGxlZnRvdmVyTWF4QWdlSW5NaWxsaXNlY29uZHN9LlxuICAgKlxuICAgKiBBIHJ1biB0aGF0IGRpZXMgY2Fubm90IGNsZWFuIHVwIGFmdGVyIGl0c2VsZiBcdTIwMTQgaXRzIHRlYXJkb3duIGdvZXMgdGhyb3VnaCB0aGVcbiAgICogV2ViVmlldywgYW5kIGEgZGVhZCBXZWJWaWV3IGlzIHdoYXQgbW9zdCBBbmRyb2lkIGZhaWx1cmVzIGFyZSBcdTIwMTQgc28gdGhlXG4gICAqIHJlc2lkdWUgYWNjdW11bGF0ZXMgYW5kIHNsb3dzIHRoZSBuZXh0IHJ1bidzIHN0YXJ0dXAgZW51bWVyYXRpb24gdW50aWwgaXRcbiAgICogbWlzc2VzIHRoZSBXZWJWaWV3LXJlYWRpbmVzcyBidWRnZXQuIFRoZSBzdGFydCBzd2VlcCBpcyB0aGUgaGFsZiB0aGF0IGJyZWFrc1xuICAgKiB0aGF0IGxvb3AsIGJlY2F1c2UgaXQgcnVucyBiZWZvcmUgYW55dGhpbmcgdGhhdCBjYW4gZGllLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFN3ZWVwTGVmdG92ZXJzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRGlzY3JpbWluYW50IGZvciB0aGUgdHJhbnNwb3J0IHR5cGUuXG4gICAqL1xuICByZWFkb25seSB0eXBlOiAnb2JzaWRpYW4tYW5kcm9pZC1hcHBpdW0nO1xuXG4gIC8qKlxuICAgKiBCYXNlIHBhdGggb24gdGhlIGRldmljZSB3aGVyZSBPYnNpZGlhbiBzdG9yZXMgdmF1bHRzLlxuICAgKlxuICAgKiBEZWZhdWx0czpcbiAgICogLSBBbmRyb2lkOiBgL3NkY2FyZC9Eb2N1bWVudHMvYFxuICAgKiAtIGlPUzogYEBtZC5vYnNpZGlhbjpkb2N1bWVudHMvYFxuICAgKi9cbiAgcmVhZG9ubHkgdmF1bHRCYXNlUGF0aD86IHN0cmluZztcblxuICAvKipcbiAgICogVGltZW91dCBpbiBtaWxsaXNlY29uZHMgZm9yIHdhaXRpbmcgZm9yIHRoZSBXZWJWaWV3IGNvbnRleHQgdG8gYmVjb21lIGF2YWlsYWJsZS5cbiAgICpcbiAgICogT24gc2xvdyBlbXVsYXRvcnMsIHRoZSBDaHJvbWVEcml2ZXIgcHJveHkgdGhhdCBoYW5kbGVzIFdlYlZpZXcgY29tbWFuZHNcbiAgICogbWF5IG5vdCBiZSByZWFkeSBpbW1lZGlhdGVseSBhZnRlciB0aGUgQXBwaXVtIHNlc3Npb24gc3RhcnRzLiBUaGlzIHRpbWVvdXRcbiAgICogY29udHJvbHMgaG93IGxvbmcgdG8gcG9sbCBiZWZvcmUgZ2l2aW5nIHVwLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgNjAwMDBgXG4gICAqL1xuICByZWFkb25seSB3ZWJ2aWV3VGltZW91dEluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFRyYW5zcG9ydCBvcHRpb25zIGZvciBkZXNrdG9wIHRlc3RpbmcgdmlhIENocm9tZSBEZXZUb29scyBQcm90b2NvbC5cbiAqXG4gKiBUaGlzIGlzIHRoZSBkZWZhdWx0IGRlc2t0b3AgdHJhbnNwb3J0LiBCeSBkZWZhdWx0IHRoZSBoYXJuZXNzICoqbGF1bmNoZXMgYW5kXG4gKiBvd25zIGFuIGlzb2xhdGVkIE9ic2lkaWFuIGluc3RhbmNlKiogaW4gYSB0ZW1wb3JhcnkgdXNlci1kYXRhIGRpciAobmV2ZXJcbiAqIHRvdWNoaW5nIHRoZSB1c2VyJ3MgT2JzaWRpYW4pLCBjb25uZWN0ZWQgb3ZlciBhIGZyZWUgQ0RQIHBvcnQuIFByb3ZpZGVcbiAqIHtAbGluayBPYnNpZGlhbkNkcFRyYW5zcG9ydE9wdGlvbnMucG9ydH0gdG8gaW5zdGVhZCBhdHRhY2ggdG8gYW5cbiAqIGFscmVhZHktcnVubmluZyBPYnNpZGlhbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPYnNpZGlhbkNkcFRyYW5zcG9ydE9wdGlvbnMge1xuICAvKipcbiAgICogVGltZW91dCBpbiBtaWxsaXNlY29uZHMgZm9yIGluZGl2aWR1YWwgQ0RQIGNvbW1hbmRzLlxuICAgKiBEZWZhdWx0cyB0byAzMDAwMFxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWFuZFRpbWVvdXRJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogR3JhY2Ugd2luZG93IGluIG1pbGxpc2Vjb25kcyBmb3IgZmFzdC1mYWlsaW5nIGEgKipkZWFkIGJvb3QqKiBvZiB0aGUgb3duZWRcbiAgICogaW5zdGFuY2UuXG4gICAqXG4gICAqIFdoZW4gYW4gYXNhciBjYW5ub3QgcnVuIG9uIHRoZSBsYXVuY2hlZCBFbGVjdHJvbiBzaGVsbCAodGhlIGluc3RhbGxlclxuICAgKiB2ZXJzaW9uIGlzIHRvbyBvbGQgZm9yIHRoZSBhcHAgdmVyc2lvbiksIHRoZSByZW5kZXJlciBsb2FkcyBidXQgbmV2ZXJcbiAgICogYm9vdHN0cmFwczogYGRvY3VtZW50LmJvZHlgIHN0YXlzIGVtcHR5IGFuZCBgd2luZG93LmFwcGAgcmVtYWluc1xuICAgKiBgdW5kZWZpbmVkYCBcdTIwMTQgYSBibGFjayBzY3JlZW4uIFJhdGhlciB0aGFuIHdhaXRpbmcgb3V0IHRoZSBmdWxsIHJlYWRpbmVzc1xuICAgKiB0aW1lb3V0LCB0aGUgb3duZWQtdmF1bHQgcmVhZGluZXNzIHBvbGwgY29uY2x1ZGVzIHRoZSBib290IGlzIGRlYWQgb25jZSB0aGVcbiAgICogcmVuZGVyZXIgaGFzIGJlZW4gYGRvY3VtZW50LnJlYWR5U3RhdGVgIGAnY29tcGxldGUnYCBmb3IgdGhpcyBsb25nIHdpdGggbm9cbiAgICogYHdpbmRvdy5hcHBgIGFuZCBhbiBlbXB0eSBgPGJvZHk+YCwgYW5kIHRocm93cyBhXG4gICAqIGBSZW5kZXJlckZhaWxlZFRvSW5pdGlhbGl6ZUVycm9yYC4gT25seSBhcHBsaWVzIHRvIGFuIG93bmVkIGluc3RhbmNlXG4gICAqIChpZ25vcmVkIGluIGF0dGFjaCBtb2RlLCB7QGxpbmsgcG9ydH0gc2V0KS4gU2V0IGAwYCB0byBkaXNhYmxlIGZhc3QtZmFpbCBhbmRcbiAgICogcmVzdG9yZSB0aGUgcGxhaW4gd2FpdC1vdXQtdGhlLXJlYWRpbmVzcy10aW1lb3V0IGJlaGF2aW9yLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgMTAwMDBgXG4gICAqL1xuICByZWFkb25seSBkZWFkQm9vdEdyYWNlSW5NaWxsaXNlY29uZHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIENEUCBob3N0LlxuICAgKiBEZWZhdWx0cyB0byBgJ2xvY2FsaG9zdCdgXG4gICAqL1xuICByZWFkb25seSBob3N0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBNYXJrcyB7QGxpbmsgcG9ydH0gYXMgdGhlIENEUCBwb3J0IG9mIGEgKipoYXJuZXNzLW93bmVkLCBpc29sYXRlZCBpbnN0YW5jZSoqXG4gICAqIHRoYXQgdGhlIGdsb2JhbCBzZXR1cCBhbHJlYWR5IGxhdW5jaGVkIGFuZCBwcmVwYXJlZCAodmF1bHQgcmVnaXN0ZXJlZCxcbiAgICogcGx1Z2luIGVuYWJsZWQpLlxuICAgKlxuICAgKiBQb3B1bGF0ZWQgYXV0b21hdGljYWxseSBieSB0aGUgZ2xvYmFsIHNldHVwIGFuZCBwcm92aWRlZCB0byB0ZXN0IHdvcmtlcnMgdmlhXG4gICAqIHRoZSBmcmFtZXdvcmsncyBjb250ZXh0IG1lY2hhbmlzbSAoZS5nLiBWaXRlc3QgYHByb3ZpZGVgL2BpbmplY3RgKS4gV2hlbiBzZXQsXG4gICAqIHRoZSB3b3JrZXIgKiphdHRhY2hlcyoqIHRvIHRoZSBvd25lZCBpbnN0YW5jZSBvbiB7QGxpbmsgcG9ydH0gaW5zdGVhZCBvZlxuICAgKiBsYXVuY2hpbmcgaXRzIG93biwgYW5kIHNraXBzIHRoZSB1c2VyLXNjb3BlIHZhdWx0LXJlZ2lzdHJhdGlvbiBwcmVmbGlnaHQgXHUyMDE0XG4gICAqIHRoZSBvd25lZCBpbnN0YW5jZSdzIHZhdWx0IGxpdmVzIGluIGFuIGlzb2xhdGVkIHVzZXItZGF0YSBjb25maWcsIG5vdCB0aGVcbiAgICogdXNlci1zY29wZSByZWdpc3RyeS4gRG8gbm90IHNldCB0aGlzIG1hbnVhbGx5OyBmb3IgcGxhaW4gYXR0YWNoIG1vZGUgdXNlXG4gICAqIHtAbGluayBwb3J0fSBhbG9uZS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHVuZGVmaW5lZGBcbiAgICovXG4gIHJlYWRvbmx5IGlzSGFybmVzc093bmVkSW5zdGFuY2U/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBvd25lZCBkZXNrdG9wIE9ic2lkaWFuIHdpbmRvdyBpcyBzaG93biBvbiBzY3JlZW4uXG4gICAqXG4gICAqIFdoZW4gYGZhbHNlYCwgdGhlIGhhcm5lc3MgbGF1bmNoZXMgdGhlIG93bmVkIGluc3RhbmNlIHdpdGhcbiAgICoga2VlcC1hbGl2ZSBDaHJvbWl1bSBmbGFncyBhbmQgbW92ZXMgaXRzIHdpbmRvdyAqKm9mZi1zY3JlZW4qKiBvbmNlIEVsZWN0cm9uJ3NcbiAgICogcmVtb3RlIGJyaWRnZSBpcyBhdmFpbGFibGUsIHNvIHRoZSBydW4gbmV2ZXIgc3RlYWxzIGZvY3VzIG9yIHBvcHMgYSB3aW5kb3cgaW5cbiAgICogZnJvbnQgb2YgeW91LiBPZmYtc2NyZWVuIChub3QgbWluaW1pemVkKSBrZWVwcyB0aGUgcmVuZGVyZXIgbGl2ZSwgc29cbiAgICogYHNldFRpbWVvdXRgLCBgcmVxdWVzdEFuaW1hdGlvbkZyYW1lYCwgYDpob3ZlcmAsIGFuZCB0cnVzdGVkIGlucHV0IGJlaGF2ZVxuICAgKiBpZGVudGljYWxseSB0byBhIHZpc2libGUgd2luZG93LiBEZWZhdWx0cyB0byBgdHJ1ZWA7IGludGVncmF0aW9uIHNldHVwXG4gICAqIGV4cGxpY2l0bHkgcGFzc2VzIGBmYWxzZWAgdG8gYXZvaWQgc3RlYWxpbmcgZm9jdXMuIElnbm9yZWQgaW4gYXR0YWNoIG1vZGVcbiAgICogKHtAbGluayBwb3J0fSBzZXQpIFx1MjAxNCB0aGUgaGFybmVzcyBuZXZlclxuICAgKiBtb3ZlcyB0aGUgdXNlcidzIG93biBydW5uaW5nIHdpbmRvdy5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBpc09ic2lkaWFuQXBwVmlzaWJsZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEhvdyBvbGQgYSBsZWZ0b3ZlciBkaXJlY3RvcnkgbXVzdCBiZSBiZWZvcmUge0BsaW5rIHNob3VsZFN3ZWVwTGVmdG92ZXJzfVxuICAgKiByZW1vdmVzIGl0LlxuICAgKlxuICAgKiBUaGUgZ2F0ZSBtYXR0ZXJzIG1vc3Qgb24gZGVza3RvcDogcnVucyBhcmUgZGVsaWJlcmF0ZWx5ICoqbm90Kiogc2VyaWFsaXplZFxuICAgKiAoZWFjaCBvd25zIGFuIGlzb2xhdGVkIGluc3RhbmNlKSwgYW5kIGV2ZXJ5IHByb2plY3Qgb24gdGhlIG1hY2hpbmUgc2hhcmVzXG4gICAqIG9uZSB0ZW1wIGRpcmVjdG9yeSwgc28gYSB5b3VuZyBgdGVtcC12YXVsdC0qYCAvIGB1c2VyZGF0YS0qYCBkaXJlY3RvcnkgbWF5XG4gICAqIHdlbGwgYmVsb25nIHRvIGEgcnVuIHRoYXQgaXMgc3RpbGwgaW4gZmxpZ2h0LiBSYWlzZSBpdCBpZiBhIHJ1biBvZiB5b3VycyBjYW5cbiAgICogb3V0bGl2ZSB0aGUgZGVmYXVsdDsgc2V0IGAwYCB0byByZW1vdmUgZXZlcnkgbWF0Y2ggcmVnYXJkbGVzcyBvZiBhZ2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IGA3MjAwMDAwYFxuICAgKi9cbiAgcmVhZG9ubHkgbGVmdG92ZXJNYXhBZ2VJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogUGlucyB0aGUgKipFbGVjdHJvbiBzaGVsbCoqIChpbnN0YWxsZXIgYnVpbGQpIHRoZSBvd25lZCBpbnN0YW5jZSBydW5zLlxuICAgKlxuICAgKiBBY2NlcHRzIGFuIGV4cGxpY2l0IGAneC55LnonYCwgYCdwdWJsaWMtbGF0ZXN0J2AsIG9yIGAnY2F0YWx5c3QtbGF0ZXN0J2AuXG4gICAqIFRoZSBtYXRjaGluZyBHaXRIdWIgcmVsZWFzZSBpbnN0YWxsZXIgaXMgZG93bmxvYWRlZCBhbmQgZXh0cmFjdGVkIHRvIGFcbiAgICogcG9ydGFibGUgc2hlbGwgKGNhY2hlZCBmb3IgcmV1c2UpLiBQdWJsaWMgcmVsZWFzZXMgb25seSBcdTIwMTQgY2F0YWx5c3QgYnVpbGRzXG4gICAqIGhhdmUgbm8gcHVibGljIGluc3RhbGxlci4gSWdub3JlZCB3aGVuIHtAbGluayBwb3J0fSAoYXR0YWNoIG1vZGUpIGlzIHNldC5cbiAgICpcbiAgICogQGRlZmF1bHQgYHVuZGVmaW5lZGBcbiAgICovXG4gIHJlYWRvbmx5IG9ic2lkaWFuSW5zdGFsbGVyVmVyc2lvbj86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogUGlucyB0aGUgKipPYnNpZGlhbiBhcHAgdmVyc2lvbioqIChhc2FyKSB0aGUgb3duZWQgaW5zdGFuY2UgcnVucy5cbiAgICpcbiAgICogQWNjZXB0cyBhbiBleHBsaWNpdCBgJ3gueS56J2AsIGAncHVibGljLWxhdGVzdCdgLCBvciBgJ2NhdGFseXN0LWxhdGVzdCdgLlxuICAgKiBWZXJzaW9ucyBhdCBvciBhYm92ZSB0aGUgc2hlbGwgdmVyc2lvbiBhcmUgYXBwbGllZCBhcyBhIGNoZWFwIGFzYXIgc3dhcDtcbiAgICogb2xkZXIgdmVyc2lvbnMgdHJhbnNwYXJlbnRseSB1c2UgdGhlIG1hdGNoaW5nIGluc3RhbGxlciBzaGVsbC4gV2hlbiBvbWl0dGVkLFxuICAgKiB0aGUgdXNlcidzIGN1cnJlbnRseS1pbnN0YWxsZWQgdmVyc2lvbiBpcyB1c2VkLiBJZ25vcmVkIHdoZW4ge0BsaW5rIHBvcnR9XG4gICAqIChhdHRhY2ggbW9kZSkgaXMgc2V0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdW5kZWZpbmVkYFxuICAgKi9cbiAgcmVhZG9ubHkgb2JzaWRpYW5WZXJzaW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBDRFAgcG9ydCBvZiBhbiBhbHJlYWR5LXJ1bm5pbmcgT2JzaWRpYW4gdG8gKiphdHRhY2gqKiB0byAodGhlXG4gICAqIGAtLXJlbW90ZS1kZWJ1Z2dpbmctcG9ydGAgaXQgd2FzIGxhdW5jaGVkIHdpdGgpLiBXaGVuIHNldCwgdGhlIGhhcm5lc3NcbiAgICogYXR0YWNoZXMgaW5zdGVhZCBvZiBvd25pbmcgYW4gaW5zdGFuY2UsIGFuZCB0aGUgdmVyc2lvbiBrbm9icyBhcmUgaWdub3JlZC5cbiAgICogV2hlbiBvbWl0dGVkLCBhbiBvd25lZCBpc29sYXRlZCBpbnN0YW5jZSBpcyBsYXVuY2hlZCBvbiBhbiBhdXRvbWF0aWNhbGx5XG4gICAqIGNob3NlbiBmcmVlIHBvcnQgKG5vIHBvcnQgaXMgaGFyZGNvZGVkKS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHVuZGVmaW5lZGBcbiAgICovXG4gIHJlYWRvbmx5IHBvcnQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gbGF1bmNoIHRoZSBvd25lZCBpbnN0YW5jZSB3aXRoIENocm9taXVtJ3Mgc2FuZGJveCBkaXNhYmxlZFxuICAgKiAoYC0tbm8tc2FuZGJveGApLlxuICAgKlxuICAgKiBOZWVkZWQgdG8gYm9vdCBhbiBvd25lZCBpbnN0YW5jZSBvbiBMaW51eCB3aGVuIHRoZXJlIGlzIG5vXG4gICAqIGNvcnJlY3RseS1jb25maWd1cmVkIHNldHVpZCBgY2hyb21lLXNhbmRib3hgIGhlbHBlciBcdTIwMTQgZS5nLiBhIHBvcnRhYmxlIHNoZWxsXG4gICAqIGV4dHJhY3RlZCBmcm9tIGFuIGluc3RhbGxlciwgb3IgYSBDSSBydW5uZXIgbGF1bmNoaW5nIGFzIGEgbm9uLXJvb3QgdXNlciwgaW5cbiAgICogd2hpY2ggY2FzZSB0aGUgcmVuZGVyZXIgb3RoZXJ3aXNlIHJlZnVzZXMgdG8gc3RhcnQuIEhhcm1sZXNzIG9uXG4gICAqIFdpbmRvd3MvbWFjT1MuIElnbm9yZWQgaW4gYXR0YWNoIG1vZGUgKHtAbGluayBwb3J0fSBzZXQpIFx1MjAxNCB0aGUgaGFybmVzcyBuZXZlclxuICAgKiByZWxhdW5jaGVzIHRoZSB1c2VyJ3MgcnVubmluZyBpbnN0YW5jZS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkRGlzYWJsZVNhbmRib3g/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBoYXJuZXNzIHJlbW92ZXMgdGhlIHRlbXBvcmFyeSBkaXJlY3RvcmllcyBlYXJsaWVyIHJ1bnMgbGVha2VkLlxuICAgKlxuICAgKiBXaGVuIGB0cnVlYCAodGhlIGRlZmF1bHQpLCBlYWNoIHJ1biBzd2VlcHMgYXQgc3RhcnQgYW5kIGF0IGVuZCBmb3JcbiAgICogYHRlbXAtdmF1bHQtKmAgc3RhZ2luZyBkaXJlY3RvcmllcyBhbmQgb3duZWQgYHVzZXJkYXRhLSpgIGluc3RhbmNlIHByb2ZpbGVzXG4gICAqIG9sZGVyIHRoYW4ge0BsaW5rIGxlZnRvdmVyTWF4QWdlSW5NaWxsaXNlY29uZHN9LiBBIHJ1biBraWxsZWQgbWlkLWZsaWdodFxuICAgKiBuZXZlciByZWFjaGVzIGl0cyBvd24gY2xlYW51cCwgc28gd2l0aG91dCB0aGlzIHRoZSB0ZW1wIGRpcmVjdG9yeSBncm93c1xuICAgKiB3aXRob3V0IGJvdW5kLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFN3ZWVwTGVmdG92ZXJzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciBhbiAqKnVucnVubmFibGUqKiBpbnN0YWxsZXJcdTIxOTRhcHAgdmVyc2lvbiBwYWlyIGZhaWxzIGZhc3QgYmVmb3JlIGxhdW5jaC5cbiAgICpcbiAgICogV2hlbiBgdHJ1ZWAgKHRoZSBkZWZhdWx0KSwgYW4gaW5zdGFsbGVyIGJlbG93IHRoZSBhcHAncyBydW4gZmxvb3IgKHRoZVxuICAgKiBvbGRlc3QgaW5zdGFsbGVyIHRoZSBhcHAncyBhc2FyIGNhbiBib290IG9uKSB0aHJvd3NcbiAgICogYEluY29tcGF0aWJsZUluc3RhbGxlclZlcnNpb25FcnJvcmAgZnJvbSB2ZXJzaW9uIHJlc29sdXRpb24sIGJlZm9yZSBhbnl0aGluZ1xuICAgKiBpcyBkb3dubG9hZGVkIG9yIGxhdW5jaGVkLiBTZXQgYGZhbHNlYCB0byBsZXQgdGhlIHBpbiBwcm9jZWVkIHRvIGxhdW5jaFxuICAgKiBpbnN0ZWFkIFx1MjAxNCB3aGVyZSB0aGUgcmVhY3RpdmUgZGVhZC1ib290IGZhc3QtZmFpbFxuICAgKiAoYFJlbmRlcmVyRmFpbGVkVG9Jbml0aWFsaXplRXJyb3JgLCBzZWUge0BsaW5rIGRlYWRCb290R3JhY2VJbk1pbGxpc2Vjb25kc30pXG4gICAqIHN0aWxsIGNhdGNoZXMgdGhlIGJsYWNrLXNjcmVlbiBib290LCBhbmQgdGhlIGAndW5ydW5uYWJsZSdgIHZlcmRpY3QgaXNcbiAgICogc3VyZmFjZWQgYXMgZGF0YSByYXRoZXIgdGhhbiB0aHJvd24uIE9ubHkgYXBwbGllcyB0byBhbiBvd25lZCBpbnN0YW5jZVxuICAgKiAoaWdub3JlZCBpbiBhdHRhY2ggbW9kZSwge0BsaW5rIHBvcnR9IHNldCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkVGhyb3dPbkluY29tcGF0aWJsZUluc3RhbGxlcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYSAqKnNpbGVudCBhc2FyIGZhbGxiYWNrKiogZmFpbHMgZmFzdCBhZnRlciBib290LlxuICAgKlxuICAgKiBXaGVuIGFuIGFzYXIgaXMgc3dhcHBlZCBvbnRvIGFuIGluc3RhbGxlciBzaGVsbCB0b28gb2xkIGZvciBpdCwgdGhlIGluc3RhbmNlXG4gICAqIG1heSBub3QgZGVhZC1ib290IFx1MjAxNCBpdCBjYW4gc2lsZW50bHkgcmV2ZXJ0IHRvIHRoZSBpbnN0YWxsZXIncyBvd24gYnVuZGxlZFxuICAgKiBhc2FyIGFuZCBydW4gdGhlICoqd3JvbmcgKG9sZGVyKSoqIHZlcnNpb24gYmVoaW5kIGEgaGVhbHRoeSBVSS4gV2hlbiBgdHJ1ZWBcbiAgICogKHRoZSBkZWZhdWx0KSwgdGhlIHRyYW5zcG9ydCB2ZXJpZmllcyB0aGUgcnVubmluZyBhcHAgdmVyc2lvbiBhZ2FpbnN0IHRoZSBwaW5cbiAgICogcG9zdC1ib290IGFuZCB0aHJvd3MgYFNpbGVudEFzYXJGYWxsYmFja0Vycm9yYCBvbiBhIG1pc21hdGNoLiBTZXQgYGZhbHNlYCB0b1xuICAgKiBsZXQgdGhlIGJvb3QgcHJvY2VlZCBcdTIwMTQgdGhlIG1pc21hdGNoIGlzIHRoZW4gc3VyZmFjZWQgYXMgZGF0YSAodGhlIGZhbGxiYWNrXG4gICAqIHZlcmRpY3QpIHJhdGhlciB0aGFuIHRocm93bi4gT25seSBhcHBsaWVzIHRvIGFuIG93bmVkIGluc3RhbmNlIHJ1bm5pbmcgYVxuICAgKiBzd2FwcGVkLWluIGFzYXIgKGlnbm9yZWQgaW4gYXR0YWNoIG1vZGUsIHtAbGluayBwb3J0fSBzZXQsIGFuZCB3aGVuIG5vIGFzYXIgaXNcbiAgICogc3dhcHBlZCBcdTIwMTQgdGhlcmUgaXMgbm90aGluZyB0byB2ZXJpZnkpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFRocm93T25TaWxlbnRBc2FyRmFsbGJhY2s/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBvd25lZC1pbnN0YW5jZSBjb21wYXRpYmlsaXR5ICoqbmFnIHdhcm5pbmdzKiogYXJlIGVtaXR0ZWQuXG4gICAqXG4gICAqIENvdmVycyAqKmJvdGgqKiBjb21wYXRpYmlsaXR5IG5hZ3M6IHRoZSBvZmZsaW5lIGluc3RhbGxlclx1MjE5NGFwcCB3YXJuaW5nIChhXG4gICAqIHJ1bm5hYmxlIGluc3RhbGxlciBiZWxvdyB0aGUgcmVjb21tZW5kZWQgZmxvb3IpIGFuZCB0aGUgcG9zdC1ib290XG4gICAqIHJ1bnRpbWUtRWxlY3Ryb24gd2FybmluZyAoYSBsaXZlIEVsZWN0cm9uIGJlbG93IHRoZSBhcHAncyByZWNvbW1lbmRlZFxuICAgKiBtaW5pbXVtKS4gV2hlbiBgdHJ1ZWAgKHRoZSBkZWZhdWx0KSBlYWNoIGZpcmVzIHZpYSB0aGUgaGFybmVzcyBsb2c7IHNldFxuICAgKiBgZmFsc2VgIHRvIHNpbGVuY2UgYm90aCBcdTIwMTQgdGhlIHZlcmRpY3RzIGFyZSBzdGlsbCBjb21wdXRlZCBhbmQgc3VyZmFjZWQgYXNcbiAgICogZGF0YSAoYGNvbXBhdGliaWxpdHlgIC8gYGVsZWN0cm9uQ29tcGF0aWJpbGl0eWApLCBvbmx5IHRoZSBsb2cgaXMgc3VwcHJlc3NlZC5cbiAgICogRG9lcyBub3QgYWZmZWN0IHRoZSBgJ3VucnVubmFibGUnYCB0aHJvdyAoc2VlXG4gICAqIHtAbGluayBzaG91bGRUaHJvd09uSW5jb21wYXRpYmxlSW5zdGFsbGVyfSkuIE9ubHkgYXBwbGllcyB0byBhbiBvd25lZFxuICAgKiBpbnN0YW5jZSAoaWdub3JlZCBpbiBhdHRhY2ggbW9kZSwge0BsaW5rIHBvcnR9IHNldCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkV2Fybk9uQ29tcGF0aWJpbGl0eUlzc3Vlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERpc2NyaW1pbmFudCBmb3IgdGhlIHRyYW5zcG9ydCB0eXBlLlxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZTogJ29ic2lkaWFuLWNkcCc7XG59XG5cbi8qKlxuICogRGlzY3JpbWluYXRlZCB1bmlvbiBvZiBhbGwgc3VwcG9ydGVkIHRyYW5zcG9ydCBjb25maWd1cmF0aW9ucy5cbiAqXG4gKiBVc2VkIGluIHZpdGVzdCBgZW52aXJvbm1lbnRPcHRpb25zLm9ic2lkaWFuVHJhbnNwb3J0YCB0byBzZWxlY3QgYW5kXG4gKiBjb25maWd1cmUgdGhlIHRyYW5zcG9ydCBmb3IgaW50ZWdyYXRpb24gdGVzdHMuXG4gKi9cbmV4cG9ydCB0eXBlIE9ic2lkaWFuVHJhbnNwb3J0T3B0aW9ucyA9XG4gIHwgT2JzaWRpYW5BbmRyb2lkQXBwaXVtVHJhbnNwb3J0T3B0aW9uc1xuICB8IE9ic2lkaWFuQ2RwVHJhbnNwb3J0T3B0aW9ucztcblxuLyoqXG4gKiBXaGV0aGVyIHRoZXNlIG9wdGlvbnMgZGVzY3JpYmUgYSBtb2JpbGUgdHJhbnNwb3J0LlxuICpcbiAqIFRoZSBzYW1lIGZhY3QgYXMge0BsaW5rIE9ic2lkaWFuVHJhbnNwb3J0LmlzTW9iaWxlfSwgYnV0IGtub3dhYmxlIGZyb20gdGhlIG9wdGlvbnMgYWxvbmUgXHUyMDE0IHNvIGEgY2FsbGVyXG4gKiBjYW4gYWN0IG9uIGl0IGJlZm9yZSBwYXlpbmcgZm9yIGEgZGV2aWNlLiBSZWFkaW5nIGl0IG9mZiBhIGxpdmUgdHJhbnNwb3J0IG1lYW5zIGJvb3RpbmcgdGhlIGVtdWxhdG9yXG4gKiBhbmQgdGhlIEFwcGl1bSBzZXNzaW9uIGZpcnN0LCB3aGljaCBpcyB+NzAgcyB0byBsZWFybiBzb21ldGhpbmcgdGhlIGRpc2NyaW1pbmFudCBhbHJlYWR5IHNheXMuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcmVzb2x2ZWQgdHJhbnNwb3J0IG9wdGlvbnMuXG4gKiBAcmV0dXJucyBgdHJ1ZWAgZm9yIGEgbW9iaWxlIHRyYW5zcG9ydCwgYGZhbHNlYCBmb3IgZGVza3RvcC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrSXNNb2JpbGVUcmFuc3BvcnQob3B0aW9uczogT2JzaWRpYW5UcmFuc3BvcnRPcHRpb25zKTogYm9vbGVhbiB7XG4gIHJldHVybiBvcHRpb25zLnR5cGUgPT09ICdvYnNpZGlhbi1hbmRyb2lkLWFwcGl1bSc7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBa2VPLFNBQVMsdUJBQXVCLFNBQTRDO0FBQ2pGLFNBQU8sUUFBUSxTQUFTO0FBQzFCOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
@@ -431,3 +431,14 @@ export interface ObsidianCdpTransportOptions {
|
|
|
431
431
|
* configure the transport for integration tests.
|
|
432
432
|
*/
|
|
433
433
|
export type ObsidianTransportOptions = ObsidianAndroidAppiumTransportOptions | ObsidianCdpTransportOptions;
|
|
434
|
+
/**
|
|
435
|
+
* Whether these options describe a mobile transport.
|
|
436
|
+
*
|
|
437
|
+
* The same fact as {@link ObsidianTransport.isMobile}, but knowable from the options alone — so a caller
|
|
438
|
+
* can act on it before paying for a device. Reading it off a live transport means booting the emulator
|
|
439
|
+
* and the Appium session first, which is ~70 s to learn something the discriminant already says.
|
|
440
|
+
*
|
|
441
|
+
* @param options - The resolved transport options.
|
|
442
|
+
* @returns `true` for a mobile transport, `false` for desktop.
|
|
443
|
+
*/
|
|
444
|
+
export declare function checkIsMobileTransport(options: ObsidianTransportOptions): boolean;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file
|
|
3
|
+
*
|
|
4
|
+
* The distinct error thrown when a mobile transport is asked to run integration
|
|
5
|
+
* tests for a plugin whose `manifest.json` says `isDesktopOnly: true`.
|
|
6
|
+
*
|
|
7
|
+
* This is an expected, benign outcome — a desktop-only manifest is a legitimate
|
|
8
|
+
* state, not a misconfiguration — so the error deliberately carries no stack
|
|
9
|
+
* trace. It is thrown rather than returned because the test runner's only way to
|
|
10
|
+
* skip a project's tests is a failing global setup, and a stack trace on an
|
|
11
|
+
* expected skip is what makes a green release run read as broken.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Thrown when a desktop-only plugin's mobile integration tests are skipped.
|
|
15
|
+
*
|
|
16
|
+
* Carries the plugin id so a caller can `instanceof`-match and report the skip
|
|
17
|
+
* in its own words.
|
|
18
|
+
*/
|
|
19
|
+
export declare class DesktopOnlyPluginSkipError extends Error {
|
|
20
|
+
/**
|
|
21
|
+
The id of the desktop-only plugin whose mobile tests were skipped.
|
|
22
|
+
*/
|
|
23
|
+
readonly pluginId: string;
|
|
24
|
+
/**
|
|
25
|
+
* Creates the error from the plugin id read out of `manifest.json`.
|
|
26
|
+
*
|
|
27
|
+
* @param pluginId - The id of the desktop-only plugin.
|
|
28
|
+
*/
|
|
29
|
+
constructor(pluginId: string);
|
|
30
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
class DesktopOnlyPluginSkipError extends Error {
|
|
2
|
+
/**
|
|
3
|
+
The id of the desktop-only plugin whose mobile tests were skipped.
|
|
4
|
+
*/
|
|
5
|
+
pluginId;
|
|
6
|
+
/**
|
|
7
|
+
* Creates the error from the plugin id read out of `manifest.json`.
|
|
8
|
+
*
|
|
9
|
+
* @param pluginId - The id of the desktop-only plugin.
|
|
10
|
+
*/
|
|
11
|
+
constructor(pluginId) {
|
|
12
|
+
super(
|
|
13
|
+
`Plugin "${pluginId}" has isDesktopOnly: true in manifest.json. Mobile integration tests cannot run for desktop-only plugins, so this project is skipped.`
|
|
14
|
+
);
|
|
15
|
+
this.name = "DesktopOnlyPluginSkipError";
|
|
16
|
+
this.pluginId = pluginId;
|
|
17
|
+
this.stack = `${this.name}: ${this.message}`;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export {
|
|
21
|
+
DesktopOnlyPluginSkipError
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Rlc2t0b3Atb25seS1wbHVnaW4tc2tpcC1lcnJvci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoZSBkaXN0aW5jdCBlcnJvciB0aHJvd24gd2hlbiBhIG1vYmlsZSB0cmFuc3BvcnQgaXMgYXNrZWQgdG8gcnVuIGludGVncmF0aW9uXG4gKiB0ZXN0cyBmb3IgYSBwbHVnaW4gd2hvc2UgYG1hbmlmZXN0Lmpzb25gIHNheXMgYGlzRGVza3RvcE9ubHk6IHRydWVgLlxuICpcbiAqIFRoaXMgaXMgYW4gZXhwZWN0ZWQsIGJlbmlnbiBvdXRjb21lIFx1MjAxNCBhIGRlc2t0b3Atb25seSBtYW5pZmVzdCBpcyBhIGxlZ2l0aW1hdGVcbiAqIHN0YXRlLCBub3QgYSBtaXNjb25maWd1cmF0aW9uIFx1MjAxNCBzbyB0aGUgZXJyb3IgZGVsaWJlcmF0ZWx5IGNhcnJpZXMgbm8gc3RhY2tcbiAqIHRyYWNlLiBJdCBpcyB0aHJvd24gcmF0aGVyIHRoYW4gcmV0dXJuZWQgYmVjYXVzZSB0aGUgdGVzdCBydW5uZXIncyBvbmx5IHdheSB0b1xuICogc2tpcCBhIHByb2plY3QncyB0ZXN0cyBpcyBhIGZhaWxpbmcgZ2xvYmFsIHNldHVwLCBhbmQgYSBzdGFjayB0cmFjZSBvbiBhblxuICogZXhwZWN0ZWQgc2tpcCBpcyB3aGF0IG1ha2VzIGEgZ3JlZW4gcmVsZWFzZSBydW4gcmVhZCBhcyBicm9rZW4uXG4gKi9cblxuLyoqXG4gKiBUaHJvd24gd2hlbiBhIGRlc2t0b3Atb25seSBwbHVnaW4ncyBtb2JpbGUgaW50ZWdyYXRpb24gdGVzdHMgYXJlIHNraXBwZWQuXG4gKlxuICogQ2FycmllcyB0aGUgcGx1Z2luIGlkIHNvIGEgY2FsbGVyIGNhbiBgaW5zdGFuY2VvZmAtbWF0Y2ggYW5kIHJlcG9ydCB0aGUgc2tpcFxuICogaW4gaXRzIG93biB3b3Jkcy5cbiAqL1xuZXhwb3J0IGNsYXNzIERlc2t0b3BPbmx5UGx1Z2luU2tpcEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAvKipcbiAgVGhlIGlkIG9mIHRoZSBkZXNrdG9wLW9ubHkgcGx1Z2luIHdob3NlIG1vYmlsZSB0ZXN0cyB3ZXJlIHNraXBwZWQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcGx1Z2luSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgZXJyb3IgZnJvbSB0aGUgcGx1Z2luIGlkIHJlYWQgb3V0IG9mIGBtYW5pZmVzdC5qc29uYC5cbiAgICpcbiAgICogQHBhcmFtIHBsdWdpbklkIC0gVGhlIGlkIG9mIHRoZSBkZXNrdG9wLW9ubHkgcGx1Z2luLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBsdWdpbklkOiBzdHJpbmcpIHtcbiAgICBzdXBlcihcbiAgICAgIGBQbHVnaW4gXCIke3BsdWdpbklkfVwiIGhhcyBpc0Rlc2t0b3BPbmx5OiB0cnVlIGluIG1hbmlmZXN0Lmpzb24uIGBcbiAgICAgICAgKyAnTW9iaWxlIGludGVncmF0aW9uIHRlc3RzIGNhbm5vdCBydW4gZm9yIGRlc2t0b3Atb25seSBwbHVnaW5zLCBzbyB0aGlzIHByb2plY3QgaXMgc2tpcHBlZC4nXG4gICAgKTtcbiAgICB0aGlzLm5hbWUgPSAnRGVza3RvcE9ubHlQbHVnaW5Ta2lwRXJyb3InO1xuICAgIHRoaXMucGx1Z2luSWQgPSBwbHVnaW5JZDtcbiAgICAvLyBBbiBleHBlY3RlZCBza2lwLCBub3QgYSBkZWZlY3Q6IHRoZSBtZXNzYWdlIHNheXMgZXZlcnl0aGluZywgYW5kIGEgdHJhY2UgcG9pbnRpbmcgaW50byB0aGUgaGFybmVzc1xuICAgIC8vIE9ubHkgc3VnZ2VzdHMgdGhlIGhhcm5lc3MgYnJva2UuXG4gICAgdGhpcy5zdGFjayA9IGAke3RoaXMubmFtZX06ICR7dGhpcy5tZXNzYWdlfWA7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICJBQW1CTyxNQUFNLG1DQUFtQyxNQUFNO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJcEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPVCxZQUFZLFVBQWtCO0FBQ25DO0FBQUEsTUFDRSxXQUFXLFFBQVE7QUFBQSxJQUVyQjtBQUNBLFNBQUssT0FBTztBQUNaLFNBQUssV0FBVztBQUdoQixTQUFLLFFBQVEsR0FBRyxLQUFLLElBQUksS0FBSyxLQUFLLE9BQU87QUFBQSxFQUM1QztBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
@@ -8,6 +8,56 @@ import type * as obsidian from 'obsidian';
|
|
|
8
8
|
import type { Promisable } from 'type-fest';
|
|
9
9
|
import type { ContextArguments, ContextId } from './context-id.mjs';
|
|
10
10
|
import type { ObsidianTransport } from './transport.mjs';
|
|
11
|
+
/**
|
|
12
|
+
* Parameters for {@link CommonArguments.clickElement}.
|
|
13
|
+
*/
|
|
14
|
+
export interface ClickElementParams {
|
|
15
|
+
/**
|
|
16
|
+
* The mouse button to press.
|
|
17
|
+
*
|
|
18
|
+
* @default `'left'`
|
|
19
|
+
*/
|
|
20
|
+
readonly button?: MouseButton;
|
|
21
|
+
/**
|
|
22
|
+
* The element to click. The pointer is moved to its center. This is a live
|
|
23
|
+
* renderer DOM node — the callback runs in-renderer, so no cross-process
|
|
24
|
+
* serialization is needed (same as {@link TypeIntoEditorParams.editor}).
|
|
25
|
+
*/
|
|
26
|
+
readonly element: HTMLElement;
|
|
27
|
+
/**
|
|
28
|
+
* The modifier keys to hold, using Obsidian's {@link Modifier} names. `'Mod'`
|
|
29
|
+
* resolves per-platform (Cmd on macOS, Ctrl elsewhere).
|
|
30
|
+
*
|
|
31
|
+
* @default `[]`
|
|
32
|
+
*/
|
|
33
|
+
readonly modifiers?: readonly Modifier[];
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Parameters for {@link CommonArguments.clickMouse}.
|
|
37
|
+
*/
|
|
38
|
+
export interface ClickMouseParams {
|
|
39
|
+
/**
|
|
40
|
+
* The mouse button to press.
|
|
41
|
+
*
|
|
42
|
+
* @default `'left'`
|
|
43
|
+
*/
|
|
44
|
+
readonly button?: MouseButton;
|
|
45
|
+
/**
|
|
46
|
+
* The modifier keys to hold, using Obsidian's {@link Modifier} names. `'Mod'`
|
|
47
|
+
* resolves per-platform (Cmd on macOS, Ctrl elsewhere).
|
|
48
|
+
*
|
|
49
|
+
* @default `[]`
|
|
50
|
+
*/
|
|
51
|
+
readonly modifiers?: readonly Modifier[];
|
|
52
|
+
/**
|
|
53
|
+
* The x coordinate (web-contents DIP) to click at.
|
|
54
|
+
*/
|
|
55
|
+
readonly x: number;
|
|
56
|
+
/**
|
|
57
|
+
* The y coordinate (web-contents DIP) to click at.
|
|
58
|
+
*/
|
|
59
|
+
readonly y: number;
|
|
60
|
+
}
|
|
11
61
|
/**
|
|
12
62
|
* Common arguments automatically provided to every {@link evalInObsidian} callback.
|
|
13
63
|
*/
|
|
@@ -21,7 +71,8 @@ export interface CommonArguments {
|
|
|
21
71
|
*
|
|
22
72
|
* Never empty: the harness pre-populates a **base** set of renderer-driving
|
|
23
73
|
* helpers (trusted input — `typeIntoEditor` / `pressKey` / `moveMouse` /
|
|
24
|
-
* `hoverElement` / `unhoverElement`
|
|
74
|
+
* `clickMouse` / `hoverElement` / `unhoverElement` / `clickElement` — plus
|
|
75
|
+
* `waitUntil`, `createNote` and `openSettingsTab`), and provider packages
|
|
25
76
|
* (chiefly `obsidian-dev-utils`) `Object.assign` their whole renderer-safe
|
|
26
77
|
* library on top via {@link registerLibResolver}. A serialized closure reaches
|
|
27
78
|
* every shared helper through `lib` — `lib.typeIntoEditor({ editor, text })`,
|
|
@@ -122,6 +173,50 @@ export interface HoverElementParams {
|
|
|
122
173
|
* ```
|
|
123
174
|
*/
|
|
124
175
|
export interface Lib {
|
|
176
|
+
/**
|
|
177
|
+
* Clicks the center of an element using **trusted** Electron pointer input.
|
|
178
|
+
*
|
|
179
|
+
* The element-relative counterpart of {@link Lib.clickMouse}, mirroring the
|
|
180
|
+
* {@link Lib.moveMouse} / {@link Lib.hoverElement} split. Use
|
|
181
|
+
* {@link Lib.clickMouse} directly when the point to click is **not** the
|
|
182
|
+
* element's center — the markdown editor's margin, for instance, lies inside
|
|
183
|
+
* `cm.scrollDOM` but outside `.cm-sizer`, so no element's center lands on it.
|
|
184
|
+
*
|
|
185
|
+
* Synchronous: injecting the trusted click does no real awaiting, so the
|
|
186
|
+
* caller does not need to `await` it.
|
|
187
|
+
*
|
|
188
|
+
* @param params - The element to click, the button to press and any modifiers
|
|
189
|
+
* to hold.
|
|
190
|
+
*/
|
|
191
|
+
clickElement(this: void, params: ClickElementParams): void;
|
|
192
|
+
/**
|
|
193
|
+
* Clicks at the given web-contents coordinates using **trusted** Electron
|
|
194
|
+
* pointer input, so Chromium synthesizes a real `click` (or `contextmenu`,
|
|
195
|
+
* for the right button) with `isTrusted === true`.
|
|
196
|
+
*
|
|
197
|
+
* This is what `element.dispatchEvent(new MouseEvent('click'))` cannot do:
|
|
198
|
+
* Obsidian and CodeMirror gate on `isTrusted`, so a dispatched event silently
|
|
199
|
+
* exercises nothing while the test still passes whatever weaker assertion it
|
|
200
|
+
* makes. Obsidian 1.13.7's markdown viewport (margin) menu, for example,
|
|
201
|
+
* opens from a `cm.scrollDOM` `contextmenu` listener guarded by
|
|
202
|
+
* `e.isTrusted`, which a dispatched event never gets past.
|
|
203
|
+
*
|
|
204
|
+
* It is the low-level primitive: a single trusted `mouseMove` → `mouseDown` →
|
|
205
|
+
* `mouseUp` at one point, with no waiting for any effect (callers poll their
|
|
206
|
+
* own readiness signal). The leading move is what puts the pointer over the
|
|
207
|
+
* hit-test target before the button goes down. Prefer
|
|
208
|
+
* {@link Lib.clickElement} for element-relative clicks.
|
|
209
|
+
*
|
|
210
|
+
* A real context menu actually opens, so a suite driving a right click must
|
|
211
|
+
* close it (or remove the leftover `.menu` element) before the next test.
|
|
212
|
+
*
|
|
213
|
+
* Synchronous: injecting the trusted click does no real awaiting, so the
|
|
214
|
+
* caller does not need to `await` it.
|
|
215
|
+
*
|
|
216
|
+
* @param params - The web-contents DIP coordinates to click at, the button to
|
|
217
|
+
* press and any modifiers to hold.
|
|
218
|
+
*/
|
|
219
|
+
clickMouse(this: void, params: ClickMouseParams): void;
|
|
125
220
|
/**
|
|
126
221
|
* Creates a note and does not return until its content is verifiably on
|
|
127
222
|
* disk, rewriting it if it is not.
|
|
@@ -189,6 +284,36 @@ export interface Lib {
|
|
|
189
284
|
* @param params - The web-contents DIP coordinates to move to.
|
|
190
285
|
*/
|
|
191
286
|
moveMouse(this: void, params: MoveMouseParams): void;
|
|
287
|
+
/**
|
|
288
|
+
* Opens Obsidian's settings modal on a given tab, and does not return until
|
|
289
|
+
* that tab has actually rendered.
|
|
290
|
+
*
|
|
291
|
+
* **This exists because `app.setting.open()` on its own does not work from a
|
|
292
|
+
* test.** `app.setting.containerEl` is built at startup but is never in the
|
|
293
|
+
* document, and `open()` does not attach it — so the modal builds into a
|
|
294
|
+
* detached tree, `open()` returns without throwing, and a screenshot taken
|
|
295
|
+
* afterwards shows the untouched document. That is what made the settings tab
|
|
296
|
+
* look impossible to capture, and got recorded as such in two plugins.
|
|
297
|
+
*
|
|
298
|
+
* The fix is one step, and its **order is load-bearing**: the container is
|
|
299
|
+
* appended to `document.body` **before** `open()`. Attaching afterwards is too
|
|
300
|
+
* late — whatever the modal drew on open has already gone into the detached
|
|
301
|
+
* container, so it ends up on screen showing the wrong thing. That failure
|
|
302
|
+
* looks like success until the captured frame is examined, which is the trap
|
|
303
|
+
* this helper exists to remove.
|
|
304
|
+
*
|
|
305
|
+
* Re-attaching is idempotent, so a tab closed with `app.setting.close()` can
|
|
306
|
+
* simply be re-opened.
|
|
307
|
+
*
|
|
308
|
+
* @param params - The tab to open and how long to wait for it to render.
|
|
309
|
+
* @returns A {@link Promise} resolving to the names of the setting rows the
|
|
310
|
+
* tab rendered — both the proof it rendered and what a caller asserts on. A
|
|
311
|
+
* tab that legitimately renders no `.setting-item-name` rows (Hotkeys, say)
|
|
312
|
+
* resolves to an empty array.
|
|
313
|
+
* @throws Error if no tab carries {@link OpenSettingsTabParams.tabId}, or if
|
|
314
|
+
* the tab does not render within the timeout.
|
|
315
|
+
*/
|
|
316
|
+
openSettingsTab(this: void, params: OpenSettingsTabParams): Promise<string[]>;
|
|
192
317
|
/**
|
|
193
318
|
* Presses a single key (optionally with modifiers) using **trusted** Electron
|
|
194
319
|
* keyboard input, firing the full real key pipeline —
|
|
@@ -280,6 +405,11 @@ export interface Lib {
|
|
|
280
405
|
*/
|
|
281
406
|
waitUntil(this: void, params: WaitUntilParams): Promise<void>;
|
|
282
407
|
}
|
|
408
|
+
/**
|
|
409
|
+
* The mouse button a trusted click presses, in Electron's `sendInputEvent`
|
|
410
|
+
* spelling.
|
|
411
|
+
*/
|
|
412
|
+
export type MouseButton = 'left' | 'middle' | 'right';
|
|
283
413
|
/**
|
|
284
414
|
* Parameters for {@link CommonArguments.moveMouse}.
|
|
285
415
|
*/
|
|
@@ -293,6 +423,29 @@ export interface MoveMouseParams {
|
|
|
293
423
|
*/
|
|
294
424
|
readonly y: number;
|
|
295
425
|
}
|
|
426
|
+
/**
|
|
427
|
+
* Parameters for {@link Lib.openSettingsTab}.
|
|
428
|
+
*/
|
|
429
|
+
export interface OpenSettingsTabParams {
|
|
430
|
+
/**
|
|
431
|
+
* The id of the settings tab to open — a plugin id for a plugin's own tab, or
|
|
432
|
+
* a core tab id (`'editor'`, `'hotkeys'`, …).
|
|
433
|
+
*
|
|
434
|
+
* Required, because opening the modal without naming a tab renders **nothing**
|
|
435
|
+
* on a harness-owned instance: the modal restores the last tab the profile
|
|
436
|
+
* used, and an isolated profile has never opened one, so `activeTab` stays
|
|
437
|
+
* `null` and no row is drawn. An unknown id is rejected immediately, listing
|
|
438
|
+
* the ids that do exist.
|
|
439
|
+
*/
|
|
440
|
+
readonly tabId: string;
|
|
441
|
+
/**
|
|
442
|
+
* The maximum time to wait for the modal to open and for the requested tab to
|
|
443
|
+
* render its content.
|
|
444
|
+
*
|
|
445
|
+
* @default `5000`
|
|
446
|
+
*/
|
|
447
|
+
readonly timeoutInMilliseconds?: number;
|
|
448
|
+
}
|
|
296
449
|
/**
|
|
297
450
|
* Parameters for {@link CommonArguments.pressKey}.
|
|
298
451
|
*/
|
|
@@ -48,4 +48,4 @@ ${sanitizedDetail}`);
|
|
|
48
48
|
export {
|
|
49
49
|
evalInObsidian
|
|
50
50
|
};
|
|
51
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2V2YWwtaW4tb2JzaWRpYW4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBFdmFsdWF0ZXMgYSBmdW5jdGlvbiBpbnNpZGUgYSBydW5uaW5nIE9ic2lkaWFuIGluc3RhbmNlIHZpYSBhIHBsdWdnYWJsZSB0cmFuc3BvcnQuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBBcHAsXG4gIEVkaXRvcixcbiAgTW9kaWZpZXIsXG4gIFRGaWxlXG59IGZyb20gJ29ic2lkaWFuJztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQteC9uby1uYW1lc3BhY2UgLS0gV2UgbmVlZCB0byByZWZlcmVuY2UgYG9ic2lkaWFuYCBtb2R1bGUuXG5pbXBvcnQgdHlwZSAqIGFzIG9ic2lkaWFuIGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmltcG9ydCB0eXBlIHtcbiAgQ29udGV4dEFyZ3VtZW50cyxcbiAgQ29udGV4dElkXG59IGZyb20gJy4vY29udGV4dC1pZC5tanMnO1xuaW1wb3J0IHR5cGUgeyBHZW5lcmF0ZU5hbWVzcGFjZUNhbGxQYXJhbXMgfSBmcm9tICcuL2dlbmVyYXRlLWZ1bmN0aW9uLWNhbGwubWpzJztcbmltcG9ydCB0eXBlIHsgT2JzaWRpYW5UcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC5tanMnO1xuXG5pbXBvcnQge1xuICBnZXRUcmFuc3BvcnRPcHRpb25zLFxuICBnZXRWYXVsdFBhdGhcbn0gZnJvbSAnLi9jb250ZXh0LXByb3ZpZGVyLm1qcyc7XG5pbXBvcnQgeyBnZW5lcmF0ZU5hbWVzcGFjZUNhbGwgfSBmcm9tICcuL2dlbmVyYXRlLWZ1bmN0aW9uLWNhbGwubWpzJztcbmltcG9ydCB7IGVuc3VyZU5hbWVzcGFjZUJvb3RzdHJhcHBlZCB9IGZyb20gJy4vbmFtZXNwYWNlLWJvb3RzdHJhcC5tanMnO1xuaW1wb3J0IHsgZ2V0T3JDcmVhdGVUcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC1mYWN0b3J5Lm1qcyc7XG5cbmludGVyZmFjZSBFdmFsRXJyb3JFbnZlbG9wZSB7XG4gIHR5cGU6ICdlcnJvcic7XG4gIHZhbHVlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGlzY3JpbWluYXRlZCBlbnZlbG9wZSByZXR1cm5lZCBieSB0aGUgcmVnaXN0ZXJlZCBgZXZhbFdyYXBwZXJgIGZyb20gaW5zaWRlIHRoZSBPYnNpZGlhbiBwcm9jZXNzLlxuICpcbiAqIC0gYEV2YWxFcnJvckVudmVsb3BlYCBcdTIwMTQgYGNhbGxiYWNrYCB0aHJldzsgYHZhbHVlYCBpcyB0aGUgc2VyaWFsaXplZCBlcnJvci5cbiAqIC0gYEV2YWxVbmRlZmluZWRFbnZlbG9wZWAgXHUyMDE0IGBjYWxsYmFja2AgcmV0dXJuZWQgYHVuZGVmaW5lZGAuXG4gKiAtIGBFdmFsVmFsdWVFbnZlbG9wZWAgXHUyMDE0IGBjYWxsYmFja2AgcmV0dXJuZWQgYSBKU09OLXNlcmlhbGl6YWJsZSB2YWx1ZS5cbiAqL1xudHlwZSBFdmFsUmVzdWx0RW52ZWxvcGUgPVxuICB8IEV2YWxFcnJvckVudmVsb3BlXG4gIHwgRXZhbFVuZGVmaW5lZEVudmVsb3BlXG4gIHwgRXZhbFZhbHVlRW52ZWxvcGU7XG5cbmludGVyZmFjZSBFdmFsVW5kZWZpbmVkRW52ZWxvcGUge1xuICB0eXBlOiAndW5kZWZpbmVkJztcbn1cblxuaW50ZXJmYWNlIEV2YWxWYWx1ZUVudmVsb3BlIHtcbiAgdmFsdWU6IHVua25vd247XG59XG5cbmNvbnN0IE5PX09VVFBVVCA9ICcobm8gb3V0cHV0KSc7XG5cbi8qKlxuICogQ29tbW9uIGFyZ3VtZW50cyBhdXRvbWF0aWNhbGx5IHByb3ZpZGVkIHRvIGV2ZXJ5IHtAbGluayBldmFsSW5PYnNpZGlhbn0gY2FsbGJhY2suXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbW9uQXJndW1lbnRzIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiB7QGxpbmsgQXBwfSBpbnN0YW5jZS5cbiAgICovXG4gIGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgc2hhcmVkIGxpYnJhcnkgYmFnIGluamVjdGVkIGludG8gZXZlcnkgY2FsbGJhY2sgXHUyMDE0IHNlZSB7QGxpbmsgTGlifS5cbiAgICpcbiAgICogTmV2ZXIgZW1wdHk6IHRoZSBoYXJuZXNzIHByZS1wb3B1bGF0ZXMgYSAqKmJhc2UqKiBzZXQgb2YgcmVuZGVyZXItZHJpdmluZ1xuICAgKiBoZWxwZXJzICh0cnVzdGVkIGlucHV0IFx1MjAxNCBgdHlwZUludG9FZGl0b3JgIC8gYHByZXNzS2V5YCAvIGBtb3ZlTW91c2VgIC9cbiAgICogYGhvdmVyRWxlbWVudGAgLyBgdW5ob3ZlckVsZW1lbnRgIFx1MjAxNCBhbmQgYHdhaXRVbnRpbGApLCBhbmQgcHJvdmlkZXIgcGFja2FnZXNcbiAgICogKGNoaWVmbHkgYG9ic2lkaWFuLWRldi11dGlsc2ApIGBPYmplY3QuYXNzaWduYCB0aGVpciB3aG9sZSByZW5kZXJlci1zYWZlXG4gICAqIGxpYnJhcnkgb24gdG9wIHZpYSB7QGxpbmsgcmVnaXN0ZXJMaWJSZXNvbHZlcn0uIEEgc2VyaWFsaXplZCBjbG9zdXJlIHJlYWNoZXNcbiAgICogZXZlcnkgc2hhcmVkIGhlbHBlciB0aHJvdWdoIGBsaWJgIFx1MjAxNCBgbGliLnR5cGVJbnRvRWRpdG9yKHsgZWRpdG9yLCB0ZXh0IH0pYCxcbiAgICogYGxpYi5nZXRGaWxlT3JOdWxsKHsgYXBwLCBcdTIwMjYgfSlgIFx1MjAxNCBpbnN0ZWFkIG9mIGltcG9ydGluZyBvciBoYW5kLXJvbGxpbmcgdGhlbS5cbiAgICovXG4gIGxpYjogTGliO1xuXG4gIC8qKlxuICAgKiBUaGUgYG9ic2lkaWFuYCBtb2R1bGUsIHJlc29sdmVkIGF0IHJ1bnRpbWUgaW5zaWRlIHRoZSBPYnNpZGlhbiBwcm9jZXNzLlxuICAgKi9cbiAgb2JzaWRpYW5Nb2R1bGU6IHR5cGVvZiBvYnNpZGlhbjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgQ29tbW9uQXJndW1lbnRzLmNyZWF0ZU5vdGV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZU5vdGVQYXJhbXMge1xuICAvKipcbiAgICogVGhlIG5vdGUncyBjb250ZW50LiBUaGlzIGV4YWN0IHN0cmluZyBpcyB3aGF0IHRoZSBjcmVhdGVkIG5vdGUgaXMgcmVhZCBiYWNrXG4gICAqIGFnYWluc3QsIHNvIGl0IGlzIHRoZSBkZWZpbml0aW9uIG9mIGEgc3VjY2Vzc2Z1bCB3cml0ZS5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRlbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHZhdWx0LXJlbGF0aXZlIHBhdGggdG8gY3JlYXRlLCBleHRlbnNpb24gaW5jbHVkZWQuXG4gICAqL1xuICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGV2YWxJbk9ic2lkaWFufS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmFsSW5PYnNpZGlhblBhcmFtczxJbnB1dCBleHRlbmRzIEdlbmVyaWNPYmplY3QsIFJlc3VsdCwgVENvbnRleHRJZCBleHRlbmRzIENvbnRleHRJZDx1bmtub3duPiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZD4ge1xuICAvKipcbiAgICogVGhlIGZ1bmN0aW9uIHRvIGV2YWx1YXRlIGluIHRoZSBPYnNpZGlhbiBjb250ZXh0LlxuICAgKi9cbiAgY2FsbGJhY2soaW5wdXQ6IENvbW1vbkFyZ3VtZW50cyAmIENvbnRleHRBcmd1bWVudHM8VENvbnRleHRJZD4gJiBJbnB1dCk6IFByb21pc2FibGU8UmVzdWx0PjtcblxuICAvKipcbiAgICogQSB7QGxpbmsgQ29udGV4dElkfSBsaW5raW5nIHRoaXMgY2FsbCB0byBhIHBlcnNpc3RlbnQgc3RvcmUgb24gYHdpbmRvd2BcbiAgICogaW4gdGhlIE9ic2lkaWFuIHByb2Nlc3MuIFRoZSBjYWxsYmFjayByZWNlaXZlcyBhIHR5cGVkIGBjb250ZXh0YCBvYmplY3RcbiAgICogdGhhdCBzdXJ2aXZlcyBhY3Jvc3MgY2FsbHMgc2hhcmluZyB0aGUgc2FtZSBJRC5cbiAgICpcbiAgICogV2hlbiBvbWl0dGVkLCBgY29udGV4dGAgaXMgYSBmcmVzaCBlbXB0eSBvYmplY3QgZWFjaCBjYWxsLlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGV4dElkPzogVENvbnRleHRJZDtcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgZnVuY3Rpb24uIFZhbHVlcyBtYXkgaW5jbHVkZSBmdW5jdGlvbnMgXHUyMDE0XG4gICAqIHRoZXkgYXJlIHNlcmlhbGl6ZWQgdmlhIGB0b1N0cmluZygpYC5cbiAgICovXG4gIHJlYWRvbmx5IGlucHV0PzogSW5wdXQ7XG5cbiAgLyoqXG4gICAqIFNraXBzIHByZS1mbGlnaHQgY2hlY2tzICh2YXVsdCByZWdpc3RyYXRpb24sIENMSSBhdmFpbGFiaWxpdHkpLlxuICAgKiBVc2VkIGludGVybmFsbHkgYnkgdmF1bHQgcmVnaXN0cmF0aW9uIGZ1bmN0aW9ucy5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICByZWFkb25seSBzaG91bGRTa2lwUHJlZmxpZ2h0Q2hlY2tzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3ZlcnJpZGUgdGhlIHRyYW5zcG9ydCBmb3IgdGhpcyBjYWxsLiBXaGVuIG9taXR0ZWQsIHVzZXMgdGhlIHRyYW5zcG9ydFxuICAgKiBjb25maWd1cmVkIHZpYSB0aGUgY29udGV4dCBwcm92aWRlciAoc2V0IGJ5IHRoZSBmcmFtZXdvcmsgYWRhcHRlcidzIGdsb2JhbCBzZXR1cCkuXG4gICAqL1xuICByZWFkb25seSB0cmFuc3BvcnQ/OiBPYnNpZGlhblRyYW5zcG9ydDtcblxuICAvKipcbiAgICogVGhlIHBhdGggdG8gdGhlIE9ic2lkaWFuIHZhdWx0LiBEZWZhdWx0cyB0byBgcHJvY2Vzcy5jd2QoKWAuXG4gICAqL1xuICByZWFkb25seSB2YXVsdFBhdGg/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBwbGFpbiBvYmplY3Qgd2l0aCBzdHJpbmcga2V5cy5cbiAqL1xuZXhwb3J0IHR5cGUgR2VuZXJpY09iamVjdCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBDb21tb25Bcmd1bWVudHMuaG92ZXJFbGVtZW50fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIb3ZlckVsZW1lbnRQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGVsZW1lbnQgdG8gaG92ZXIuIFRoZSBwb2ludGVyIGlzIG1vdmVkIHRvIGl0cyBjZW50ZXIuIFRoaXMgaXMgYSBsaXZlXG4gICAqIHJlbmRlcmVyIERPTSBub2RlIFx1MjAxNCB0aGUgY2FsbGJhY2sgcnVucyBpbi1yZW5kZXJlciwgc28gbm8gY3Jvc3MtcHJvY2Vzc1xuICAgKiBzZXJpYWxpemF0aW9uIGlzIG5lZWRlZCAoc2FtZSBhcyB7QGxpbmsgVHlwZUludG9FZGl0b3JQYXJhbXMuZWRpdG9yfSkuXG4gICAqL1xuICByZWFkb25seSBlbGVtZW50OiBIVE1MRWxlbWVudDtcbn1cblxuLyoqXG4gKiBUaGUgc2hhcmVkIGxpYnJhcnkgYmFnIGluamVjdGVkIGludG8gZXZlcnkge0BsaW5rIGV2YWxJbk9ic2lkaWFufSBjYWxsYmFjayBhc1xuICoge0BsaW5rIENvbW1vbkFyZ3VtZW50cy5saWJ9LlxuICpcbiAqIFR3byBsYXllcnMgY29tcG9zZSBpbnRvIHRoaXMgb25lIGJhZy4gVGhlICoqYmFzZSoqIFx1MjAxNCB0aGUgaGFybmVzcy1wcm92aWRlZFxuICogcmVuZGVyZXItZHJpdmluZyBoZWxwZXJzIGRlY2xhcmVkIGJlbG93ICh0aGUgdHJ1c3RlZC1pbnB1dCBwcmltaXRpdmVzIGFuZFxuICoge0BsaW5rIExpYi53YWl0VW50aWx9KSBcdTIwMTQgaXMgYWx3YXlzIHByZXNlbnQuIE9uIHRvcCwgcHJvdmlkZXIgcGFja2FnZXMgcmVnaXN0ZXJcbiAqIGEgcmVuZGVyZXItc2lkZSByZXNvbHZlciB2aWEge0BsaW5rIHJlZ2lzdGVyTGliUmVzb2x2ZXJ9IHRvIGBPYmplY3QuYXNzaWduYFxuICogdGhlaXIgd2hvbGUgcmVuZGVyZXItc2FmZSBsaWJyYXJ5IGF0IHJ1bnRpbWUsIGFuZCBhdWdtZW50IHRoaXMgKiphdWdtZW50YWJsZSoqXG4gKiBpbnRlcmZhY2UgKHRoZSBgaTE4bmV4dGAgYEN1c3RvbVR5cGVPcHRpb25zYCBpZGlvbSkgdmlhXG4gKiBgZGVjbGFyZSBtb2R1bGUgJ29ic2lkaWFuLWludGVncmF0aW9uLXRlc3RpbmcnYCB0byB0eXBlIGl0LiBNdWx0aXBsZSBwcm92aWRlcnNcbiAqIGNvbXBvc2U6IHRoZWlyIGV4cG9ydHMgbWVyZ2UgYXQgcnVudGltZSBhbmQgdGhlaXIgYXVnbWVudGF0aW9ucyBtZXJnZSBpbiB0aGVcbiAqIHR5cGUgc3lzdGVtIChgaW50ZXJmYWNlIExpYiBleHRlbmRzIFx1MjAyNmApLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogZGVjbGFyZSBtb2R1bGUgJ29ic2lkaWFuLWludGVncmF0aW9uLXRlc3RpbmcnIHtcbiAqICAgaW50ZXJmYWNlIExpYiBleHRlbmRzICh0eXBlb2YgaW1wb3J0KCdvYnNpZGlhbi1kZXYtdXRpbHMvX19tZXJnZWQnKSkge31cbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIExpYiB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbm90ZSBhbmQgZG9lcyBub3QgcmV0dXJuIHVudGlsIGl0cyBjb250ZW50IGlzIHZlcmlmaWFibHkgb25cbiAgICogZGlzaywgcmV3cml0aW5nIGl0IGlmIGl0IGlzIG5vdC5cbiAgICpcbiAgICogVXNlIHRoaXMgaW5zdGVhZCBvZiBgYXBwLnZhdWx0LmNyZWF0ZWAgaW4gYW55IHN1aXRlIHRoYXQgbWF5IHJ1biBvblxuICAgKiBBbmRyb2lkLiBUaGUgZW11bGF0b3IgdHJhbnNwb3J0IGxvc2VzIHJvdWdobHkgKiowLjkgJSoqIG9mIGB2YXVsdC5jcmVhdGVgXG4gICAqIHdyaXRlcyAobWVhc3VyZWQ6IDcgbG9zdCBpbiA4MDAgY3JlYXRlcyk6IHRoZSBmaWxlIGxhbmRzICoqMCBieXRlcyoqIG9uXG4gICAqIGRpc2sgd2hpbGUgT2JzaWRpYW4ncyBpbi1tZW1vcnkgYFRGaWxlLnN0YXRgIHJlcG9ydHMgdGhlIGZ1bGwgYnl0ZSBjb3VudCxcbiAgICogYW5kIGl0IGRvZXMgbm90IGhlYWwgb24gaXRzIG93bi4gQSBzdWl0ZSBkb2luZyB+MzQgY3JlYXRlcyBwZXIgcnVuXG4gICAqIHRoZXJlZm9yZSBoYXMgYSB+MjYgJSBjaGFuY2Ugb2YgYXQgbGVhc3Qgb25lIGxvc3Qgd3JpdGUsIGFuZCB3aGljaGV2ZXIgdGVzdFxuICAgKiBsb3NlcyB0aGF0IGxvdHRlcnkgZmFpbHMgb24gYSBgd2FpdFVudGlsYCBmb3IgY29udGVudCB0aGF0IHdhcyBuZXZlclxuICAgKiB3cml0dGVuIFx1MjAxNCB3aGljaCBpcyB3aHkgaXQgcmVhZHMgYXMgYW4gdW5yZWxhdGVkIHBlci10ZXN0IGZsYWtlIHJhdGhlciB0aGFuXG4gICAqIG9uZSBzaGFyZWQgY2F1c2UuXG4gICAqXG4gICAqIFZlcmlmaWNhdGlvbiBpcyBieSAqKnJlYWRpbmcgdGhlIG5vdGUgYmFjayoqLCBuZXZlciBieSBpbnNwZWN0aW5nXG4gICAqIGBURmlsZS5zdGF0YDogYHN0YXRgIGlzIGV4YWN0bHkgdGhlIGZpZWxkIHRoYXQgbGllcyBoZXJlLiBBIHJld3JpdGUgdGhyb3VnaFxuICAgKiBgdmF1bHQubW9kaWZ5YCB3aXRoIHRoZSBzYW1lIGNvbnRlbnQgbGFuZHMgY29ycmVjdGx5IChhbHNvIG1lYXN1cmVkKSwgc28gYVxuICAgKiBsb3N0IHdyaXRlIGNvc3RzIGEgcmV0cnkgcmF0aGVyIHRoYW4gYSBmYWlsdXJlLiBBIG5vdGUgd2hvc2UgY29udGVudCBzdGlsbFxuICAgKiBkb2VzIG5vdCBtYXRjaCBhZnRlciB0aGUgYm91bmRlZCByZXRyaWVzIHRocm93cywgbmFtaW5nIHRoZSBwYXRoIGFuZCBib3RoXG4gICAqIGxlbmd0aHMsIHNvIGEgZ2VudWluZWx5IGJyb2tlbiB3cml0ZSBmYWlscyBsb3VkbHkgaW5zdGVhZCBvZiBzcGlubmluZy5cbiAgICpcbiAgICogSGFybWxlc3MgZXZlcnl3aGVyZSBlbHNlIFx1MjAxNCBvbiBhIHRyYW5zcG9ydCB0aGF0IGRvZXMgbm90IGxvc2Ugd3JpdGVzIHRoZVxuICAgKiByZWFkLWJhY2sgbWF0Y2hlcyBmaXJzdCB0aW1lIGFuZCBub3RoaW5nIGlzIHJld3JpdHRlbi5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBub3RlIHBhdGggYW5kIGNvbnRlbnQuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHJlc29sdmluZyB0byB0aGUgY3JlYXRlZCBmaWxlLCBvbmNlIGl0cyBjb250ZW50XG4gICAqICAgaXMgY29uZmlybWVkLlxuICAgKi9cbiAgY3JlYXRlTm90ZSh0aGlzOiB2b2lkLCBwYXJhbXM6IENyZWF0ZU5vdGVQYXJhbXMpOiBQcm9taXNlPFRGaWxlPjtcblxuICAvKipcbiAgICogTW92ZXMgdGhlIG1vdXNlIHBvaW50ZXIgdG8gdGhlIGNlbnRlciBvZiBhbiBlbGVtZW50IHVzaW5nICoqdHJ1c3RlZCoqXG4gICAqIEVsZWN0cm9uIHBvaW50ZXIgaW5wdXQsIHRoZW4gcG9sbHMgdW50aWwgdGhlIGVsZW1lbnQgYWN0dWFsbHkgbWF0Y2hlc1xuICAgKiBgOmhvdmVyYC5cbiAgICpcbiAgICogQmVjYXVzZSB0aGUgbW92ZSBpcyB0cnVzdGVkIChzZWUge0BsaW5rIExpYi5tb3ZlTW91c2V9KSwgdGhlIHJlYWwgYDpob3ZlcmBcbiAgICogc3RhdGUgdGFrZXMgZWZmZWN0IGluIHRoZSBDU1MgZW5naW5lIFx1MjAxNCByZWFsIHRoZW1lIGB2YXIoKWAgdmFsdWVzIGFuZCByZWFsXG4gICAqIGNvbXBvc2l0aW5nIFx1MjAxNCBpbnN0ZWFkIG9mIGEgaGFuZC1zaW11bGF0ZWQgY2FzY2FkZS4gSXQgcG9sbHMgdGhlIGxpdmVcbiAgICogYGVsZW1lbnQubWF0Y2hlcygnOmhvdmVyJylgIHN0YXRlIChub3QgYSBmaXhlZCBkZWxheSksIHNvIGl0IGlzIHJvYnVzdCB1bmRlclxuICAgKiBzaGFyZWQtaW5zdGFuY2UgbG9hZC4gSXQgdGFyZ2V0cyB0aGUgc2luZ2xlIHNoYXJlZCB3aW5kb3cncyAqKmdsb2JhbCoqXG4gICAqIHBvaW50ZXIsIHNvIG9ubHkgb25lIGVsZW1lbnQgaXMgaG92ZXJlZCBhdCBhIHRpbWUuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZWxlbWVudCB0byBob3Zlci5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBlbGVtZW50IG1hdGNoZXMgYDpob3ZlcmAuXG4gICAqL1xuICBob3ZlckVsZW1lbnQodGhpczogdm9pZCwgcGFyYW1zOiBIb3ZlckVsZW1lbnRQYXJhbXMpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBNb3ZlcyB0aGUgbW91c2UgcG9pbnRlciB0byB0aGUgZ2l2ZW4gd2ViLWNvbnRlbnRzIGNvb3JkaW5hdGVzIHVzaW5nIGFcbiAgICogKip0cnVzdGVkKiogRWxlY3Ryb24gcG9pbnRlciBtb3ZlLlxuICAgKlxuICAgKiBBIHRydXN0ZWQgbW92ZSAoaW5qZWN0ZWQgdmlhIEVsZWN0cm9uJ3MgYHdlYkNvbnRlbnRzLnNlbmRJbnB1dEV2ZW50YClcbiAgICogdXBkYXRlcyB0aGUgcmVhbCBwb2ludGVyIHN0YXRlIGluIHRoZSBDU1MgZW5naW5lLCBzbyBgOmhvdmVyYCBydWxlc1xuICAgKiBnZW51aW5lbHkgYXBwbHkgXHUyMDE0IHVubGlrZSBgZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudCgnbW91c2VvdmVyJykpYCxcbiAgICogd2hpY2ggaXMgdW50cnVzdGVkIGFuZCBuZXZlciBzZXRzIGA6aG92ZXJgLiBJdCB0YXJnZXRzIHRoZSBzaW5nbGUgc2hhcmVkXG4gICAqIHdpbmRvdydzICoqZ2xvYmFsKiogcG9pbnRlciwgc28gb25seSBvbmUgZWxlbWVudCBpcyBob3ZlcmVkIGF0IGEgdGltZS5cbiAgICpcbiAgICogVGhpcyBpcyB0aGUgbG93LWxldmVsIHByaW1pdGl2ZTogaXQgcGVyZm9ybXMgYSBzaW5nbGUgbW92ZSBhbmQgZG9lcyAqKm5vdCoqXG4gICAqIHdhaXQgZm9yIGFueSBzdGF0ZSB0byBzZXR0bGUgKGNhbGxlcnMgcG9sbCB0aGVpciBvd24gcmVhZGluZXNzIHNpZ25hbCkuXG4gICAqIFByZWZlciB7QGxpbmsgTGliLmhvdmVyRWxlbWVudH0gLyB7QGxpbmsgTGliLnVuaG92ZXJFbGVtZW50fSBmb3JcbiAgICogZWxlbWVudC1yZWxhdGl2ZSBtb3ZlczsgdXNlIGBtb3ZlTW91c2VgIGRpcmVjdGx5IHdoZW4gYW4gZWxlbWVudC1yZWxhdGl2ZVxuICAgKiB0YXJnZXQgZG9lcyBub3QgZml0IChlLmcuIGFuIGVsZW1lbnQgc3Bhbm5pbmcgdGhlIGZ1bGwgdmlld3BvcnQgd2lkdGgpLlxuICAgKlxuICAgKiBTeW5jaHJvbm91czogaW5qZWN0aW5nIHRoZSB0cnVzdGVkIG1vdmUgZG9lcyBubyByZWFsIGF3YWl0aW5nLCBzbyB0aGUgY2FsbGVyXG4gICAqIGRvZXMgbm90IG5lZWQgdG8gYGF3YWl0YCBpdC5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSB3ZWItY29udGVudHMgRElQIGNvb3JkaW5hdGVzIHRvIG1vdmUgdG8uXG4gICAqL1xuICBtb3ZlTW91c2UodGhpczogdm9pZCwgcGFyYW1zOiBNb3ZlTW91c2VQYXJhbXMpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBQcmVzc2VzIGEgc2luZ2xlIGtleSAob3B0aW9uYWxseSB3aXRoIG1vZGlmaWVycykgdXNpbmcgKip0cnVzdGVkKiogRWxlY3Ryb25cbiAgICoga2V5Ym9hcmQgaW5wdXQsIGZpcmluZyB0aGUgZnVsbCByZWFsIGtleSBwaXBlbGluZSBcdTIwMTRcbiAgICogYGtleWRvd25gIFx1MjE5MiBga2V5cHJlc3NgIFx1MjE5MiBgYmVmb3JlaW5wdXRgIFx1MjE5MiBgaW5wdXRgIFx1MjE5MiBga2V5dXBgLlxuICAgKlxuICAgKiBUaGlzIGlzIHRoZSBrZXktcHJlc3MgYW5hbG9nIG9mIHtAbGluayBMaWIudHlwZUludG9FZGl0b3J9OiBpdCBpbmplY3RzIGFcbiAgICogdHJ1c3RlZCBga2V5RG93bmAgXHUyMTkyIGBjaGFyYCBcdTIxOTIgYGtleVVwYCBzZXF1ZW5jZSB2aWEgRWxlY3Ryb24nc1xuICAgKiBgd2ViQ29udGVudHMuc2VuZElucHV0RXZlbnRgLCBzbyBpdCBpcyBkZWxpdmVyZWQgdG8gdGhlIHdpbmRvdydzIERPTS1mb2N1c2VkXG4gICAqIGVsZW1lbnQgYW5kIGZsb3dzIHRocm91Z2ggdGhlIHJlYWwgaW5wdXQgcGlwZWxpbmUgXHUyMDE0IHVubGlrZVxuICAgKiBgZGlzcGF0Y2hFdmVudChuZXcgS2V5Ym9hcmRFdmVudCguLi4pKWAsIHdoaWNoIGlzIHVudHJ1c3RlZCAoYGlzVHJ1c3RlZDpcbiAgICogZmFsc2VgKSBhbmQgaWdub3JlZCBieSBDb2RlTWlycm9yIGFuZCBtb3N0IGtleSBoYW5kbGVycy4gVXNlIGl0IGZvciBzcGVjaWFsXG4gICAqIGtleXMgKGAnRW50ZXInYCwgYCdFc2NhcGUnYCwgYCdUYWInYCwgYXJyb3cga2V5cykgYW5kIG1vZGlmaWVyIGNvbWJpbmF0aW9uc1xuICAgKiAoYFNoaWZ0K0VudGVyYCwgYEN0cmwrQWApIHRoYXQge0BsaW5rIExpYi50eXBlSW50b0VkaXRvcn0gKHdoaWNoIHR5cGVzXG4gICAqIHByaW50YWJsZSB0ZXh0KSBkb2VzIG5vdCBjb3Zlci5cbiAgICpcbiAgICogVGhpcyBpcyB0aGUgbG93LWxldmVsIHByaW1pdGl2ZTogaXQgaW5qZWN0cyB0aGUga2V5IHByZXNzIGFuZCBkb2VzICoqbm90KipcbiAgICogcG9sbCBmb3IgYW55IGVmZmVjdCAoYSBrZXkgcHJlc3MgaGFzIG5vIHVuaXZlcnNhbCBvYnNlcnZhYmxlIG91dGNvbWUgXHUyMDE0XG4gICAqIGBFbnRlcmAgZWRpdHMgdGhlIGRvY3VtZW50LCBgRXNjYXBlYCBjbG9zZXMgYSBtb2RhbCwgYEFycm93RG93bmAgbW92ZXMgdGhlXG4gICAqIHNlbGVjdGlvbikuIFRoZSBjYWxsZXIgZm9jdXNlcyB0aGUgaW50ZW5kZWQgdGFyZ2V0IGZpcnN0LCB0aGVuIGF3YWl0cyB0aGVcbiAgICogZXhwZWN0ZWQgZWZmZWN0IHZpYSB7QGxpbmsgTGliLndhaXRVbnRpbH0uIEl0IHRhcmdldHMgdGhlIHNpbmdsZSBzaGFyZWRcbiAgICogd2luZG93J3MgKipnbG9iYWwqKiBmb2N1cywgc28gb25seSB0aGUgRE9NLWZvY3VzZWQgZWxlbWVudCByZWNlaXZlcyB0aGUga2V5LlxuICAgKlxuICAgKiBTeW5jaHJvbm91czogaW5qZWN0aW5nIHRoZSB0cnVzdGVkIGtleSBwcmVzcyBkb2VzIG5vIHJlYWwgYXdhaXRpbmcsIHNvIHRoZVxuICAgKiBjYWxsZXIgZG9lcyBub3QgbmVlZCB0byBgYXdhaXRgIGl0LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGtleSB0byBwcmVzcyBhbmQgYW55IG1vZGlmaWVycyB0byBob2xkLlxuICAgKi9cbiAgcHJlc3NLZXkodGhpczogdm9pZCwgcGFyYW1zOiBQcmVzc0tleVBhcmFtcyk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFR5cGVzIHRleHQgaW50byBhIENvZGVNaXJyb3Ige0BsaW5rIEVkaXRvcn0gdXNpbmcgKip0cnVzdGVkKiogRWxlY3Ryb25cbiAgICoga2V5Ym9hcmQgaW5wdXQuXG4gICAqXG4gICAqIFR5cGluZyBpcyBwcmVzc2luZyBlYWNoIGNoYXJhY3RlciBrZXkgaW4gdHVybjogdGhpcyBmb2N1c2VzIHRoZSBlZGl0b3JcbiAgICogKGNhcmV0IHRvIGVuZCkgYW5kIHByZXNzZXMgZXZlcnkgY29kZSBwb2ludCBvZiBgdGV4dGAgdmlhXG4gICAqIHtAbGluayBMaWIucHJlc3NLZXl9IFx1MjAxNCB0aGUgc2FtZSB0cnVzdGVkIGBrZXlEb3duYCBcdTIxOTIgYGNoYXJgIFx1MjE5MiBga2V5VXBgIGEgcmVhbFxuICAgKiB1c2VyIHByb2R1Y2VzLiBFYWNoIGtleXN0cm9rZSBpcyBkZWxpdmVyZWQgdG8gdGhlIHdpbmRvdydzIERPTS1mb2N1c2VkXG4gICAqIGVsZW1lbnQgYW5kIGZsb3dzIHRocm91Z2ggQ29kZU1pcnJvcidzIHJlYWwgaW5wdXQgcGlwZWxpbmUsIHNvIHRoZSB0eXBlZFxuICAgKiB0ZXh0IHJlYWNoZXMgdGhlIGRvY3VtZW50ICoqb25seSBpZiB0aGUgZWRpdG9yIGdlbnVpbmVseSBob2xkcyBmb2N1cyoqLlxuICAgKiBUaGlzIG1ha2VzIFwidGhlIHVzZXIgdHlwZWQgaW50byB0aGUgZWRpdG9yXCIgYSBmYWl0aGZ1bCBlbmQtdG8tZW5kIGNoZWNrLFxuICAgKiB1bmxpa2UgYGRpc3BhdGNoRXZlbnQobmV3IEtleWJvYXJkRXZlbnQoLi4uKSlgICh1bnRydXN0ZWQgXHUyMDE0IGlnbm9yZWQgYnlcbiAgICogQ29kZU1pcnJvcikgb3IgYGV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JylgIChtdXRhdGVzIHRoZSBzZWxlY3Rpb24gZXZlblxuICAgKiB3aGVuIHRoZSBlZGl0b3IgaXMgbm90IGZvY3VzZWQsIG1hc2tpbmcgZm9jdXMgYnVncyBhcyBmYWxzZSBwb3NpdGl2ZXMpLlxuICAgKlxuICAgKiBBZnRlciBpbmplY3RpbmcgdGhlIGtleXN0cm9rZXMgaXQgcG9sbHMgdW50aWwgdGhlIGRvY3VtZW50IHJlZmxlY3RzIHRoZVxuICAgKiBpbnB1dCwgb3IgYSBib3VuZGVkIHRpbWVvdXQgZWxhcHNlcyAodGhlIGV4cGVjdGVkIG91dGNvbWUgd2hlbiB0aGUgZWRpdG9yXG4gICAqIGlzIHJlYWQtb25seSBhbmQgcmVqZWN0cyB0aGUgaW5wdXQsIG9yIHdoZW4gZm9jdXMgd2FzIHN0b2xlbikuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZWRpdG9yIHRvIHR5cGUgaW50byBhbmQgdGhlIHRleHQgdG8gdHlwZS5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBrZXlzdHJva2VzIGhhdmUgc2V0dGxlZC5cbiAgICovXG4gIHR5cGVJbnRvRWRpdG9yKHRoaXM6IHZvaWQsIHBhcmFtczogVHlwZUludG9FZGl0b3JQYXJhbXMpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBNb3ZlcyB0aGUgbW91c2UgcG9pbnRlciB0byBhIHBvaW50IGp1c3Qgb3V0c2lkZSBhbiBlbGVtZW50J3MgYm91bmRpbmcgYm94XG4gICAqIHVzaW5nIGEgKip0cnVzdGVkKiogRWxlY3Ryb24gcG9pbnRlciBtb3ZlLCB0aGVuIHBvbGxzIHVudGlsIHRoZSBlbGVtZW50IG5vXG4gICAqIGxvbmdlciBtYXRjaGVzIGA6aG92ZXJgLlxuICAgKlxuICAgKiBUaGUgaW52ZXJzZSBvZiB7QGxpbmsgTGliLmhvdmVyRWxlbWVudH0uIEl0IHRhcmdldHMgdGhlIHNpbmdsZSBzaGFyZWRcbiAgICogd2luZG93J3MgKipnbG9iYWwqKiBwb2ludGVyLCBzbyBvbmx5IG9uZSBlbGVtZW50IGlzIGhvdmVyZWQgYXQgYSB0aW1lLiBXaGVuXG4gICAqIGFuIGVsZW1lbnQgc3BhbnMgdGhlIGZ1bGwgdmlld3BvcnQgKG5vIHBvaW50IG91dHNpZGUgaXRzIGJveCBpcyByZWFjaGFibGUpLFxuICAgKiB1c2Uge0BsaW5rIExpYi5tb3ZlTW91c2V9IGRpcmVjdGx5IHRvIG1vdmUgdGhlIHBvaW50ZXIgdG8gYSBrbm93biBlbXB0eVxuICAgKiBjb29yZGluYXRlIGluc3RlYWQuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZWxlbWVudCB0byBtb3ZlIHRoZSBwb2ludGVyIGF3YXkgZnJvbS5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBlbGVtZW50IG5vIGxvbmdlciBtYXRjaGVzXG4gICAqICAgYDpob3ZlcmAuXG4gICAqL1xuICB1bmhvdmVyRWxlbWVudCh0aGlzOiB2b2lkLCBwYXJhbXM6IFVuaG92ZXJFbGVtZW50UGFyYW1zKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogUG9sbHMgYSBwcmVkaWNhdGUgdW50aWwgaXQgYmVjb21lcyB0cnV0aHksIG9yIHJlamVjdHMgb25jZSBhIGJvdW5kZWRcbiAgICogdGltZW91dCBlbGFwc2VzLlxuICAgKlxuICAgKiBJbnRlZ3JhdGlvbi10ZXN0IGBldmFsSW5PYnNpZGlhbmAgY2FsbGJhY2tzIHJvdXRpbmVseSBuZWVkIHRvIHdhaXQgZm9yIGFuXG4gICAqIGFzeW5jaHJvbm91cyBlZmZlY3QgdG8gc2V0dGxlIChhIHZpZXcgdG8gb3BlbiwgYSBET00gbm9kZSB0byBhcHBlYXIsIGFcbiAgICogc2V0dGluZyB0byBhcHBseSkuIEJlY2F1c2UgdGhlIGNhbGxiYWNrIGlzIHNlcmlhbGl6ZWQgdmlhIGB0b1N0cmluZygpYCBhbmRcbiAgICogY2Fubm90IGltcG9ydCBtb2R1bGVzLCBpdCBjYW4ndCByZXVzZSBgb2JzaWRpYW4tZGV2LXV0aWxzYCdcbiAgICogYHJldHJ5V2l0aFRpbWVvdXRgIC8gYHJ1bldpdGhUaW1lb3V0YC4gVGhpcyBoZWxwZXIgaXMgdGhlIHNoYXJlZCwgaW5qZWN0ZWRcbiAgICogcmVwbGFjZW1lbnQgZm9yIHRoZSBwZXItY2xvc3VyZSBwb2xsIGxvb3BzIGNvbnN1bWVycyB3b3VsZCBvdGhlcndpc2VcbiAgICogaGFuZC1yb2xsLlxuICAgKlxuICAgKiBUaGUgYHByZWRpY2F0ZWAgbWF5IGJlIHN5bmNocm9ub3VzIG9yIGFzeW5jaHJvbm91cyBcdTIwMTQgaXQgaXMgYXdhaXRlZCBvbiBldmVyeVxuICAgKiBwb2xsLiBJdCBpcyBjaGVja2VkIGltbWVkaWF0ZWx5LCB0aGVuIHJlLWNoZWNrZWQgZXZlcnlcbiAgICogYGludGVydmFsSW5NaWxsaXNlY29uZHNgIHVudGlsIGl0IHJldHVybnMgdHJ1dGh5IG9yIGB0aW1lb3V0SW5NaWxsaXNlY29uZHNgXG4gICAqIGVsYXBzZXMsIGF0IHdoaWNoIHBvaW50IHRoZSByZXR1cm5lZCB7QGxpbmsgUHJvbWlzZX0gcmVqZWN0cyAodGhlIGVycm9yXG4gICAqIGluY2x1ZGVzIGBtZXNzYWdlYCB3aGVuIHByb3ZpZGVkKS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwcmVkaWNhdGUgdG8gcG9sbCBwbHVzIG9wdGlvbmFsIHRpbWVvdXQsIGludGVydmFsLCBhbmRcbiAgICogICB0aW1lb3V0IG1lc3NhZ2UuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgcHJlZGljYXRlIGlzIHRydXRoeS5cbiAgICovXG4gIHdhaXRVbnRpbCh0aGlzOiB2b2lkLCBwYXJhbXM6IFdhaXRVbnRpbFBhcmFtcyk6IFByb21pc2U8dm9pZD47XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIENvbW1vbkFyZ3VtZW50cy5tb3ZlTW91c2V9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vdmVNb3VzZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgeCBjb29yZGluYXRlICh3ZWItY29udGVudHMgRElQKSB0byBtb3ZlIHRoZSBwb2ludGVyIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgeDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgeSBjb29yZGluYXRlICh3ZWItY29udGVudHMgRElQKSB0byBtb3ZlIHRoZSBwb2ludGVyIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgeTogbnVtYmVyO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBDb21tb25Bcmd1bWVudHMucHJlc3NLZXl9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByZXNzS2V5UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBrZXkgdG8gcHJlc3MsIGdpdmVuIGFzIGFuIEVsZWN0cm9uIEFjY2VsZXJhdG9yIGtleSBuYW1lIFx1MjAxNCBlLmcuXG4gICAqIGAnRW50ZXInYCwgYCdFc2NhcGUnYCwgYCdUYWInYCwgYCdCYWNrc3BhY2UnYCwgYCdEZWxldGUnYCwgYW4gYXJyb3cga2V5XG4gICAqIChgJ1VwJ2AgLyBgJ0Rvd24nYCAvIGAnTGVmdCdgIC8gYCdSaWdodCdgKSwgb3IgYSBwcmludGFibGUgY2hhcmFjdGVyXG4gICAqIChgJ2EnYCwgYCcxJ2ApLiBUaGUgcHJvZHVjZWQgY2hhcmFjdGVyICh3aGVuIHRoZSBrZXkgaW5zZXJ0cyB0ZXh0KSBpcyB0aGVcbiAgICogbGl0ZXJhbCBga2V5YCB2YWx1ZTsgY2FzZS1jb3JyZWN0IHRleHQgYmVsb25ncyB0b1xuICAgKiB7QGxpbmsgQ29tbW9uQXJndW1lbnRzLnR5cGVJbnRvRWRpdG9yfSwgbm90IGEga2V5LXByZXNzIHByaW1pdGl2ZS5cbiAgICovXG4gIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbW9kaWZpZXIga2V5cyB0byBob2xkIHdoaWxlIHRoZSBrZXkgaXMgcHJlc3NlZCwgdXNpbmcgT2JzaWRpYW4nc1xuICAgKiB7QGxpbmsgTW9kaWZpZXJ9IG5hbWVzICh0aGUgc2FtZSB2YWx1ZXMgYXMgYW4gT2JzaWRpYW4gYEhvdGtleWApLiBgJ01vZCdgXG4gICAqIHJlc29sdmVzIHBlci1wbGF0Zm9ybSAoQ21kIG9uIG1hY09TLCBDdHJsIGVsc2V3aGVyZSk7IGVhY2ggaXMgbWFwcGVkIHRvXG4gICAqIEVsZWN0cm9uJ3MgbG93ZXJjYXNlIGBzZW5kSW5wdXRFdmVudGAgbW9kaWZpZXIgbmFtZS5cbiAgICpcbiAgICogQGRlZmF1bHQgYFtdYFxuICAgKi9cbiAgcmVhZG9ubHkgbW9kaWZpZXJzPzogcmVhZG9ubHkgTW9kaWZpZXJbXTtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgQ29tbW9uQXJndW1lbnRzLnR5cGVJbnRvRWRpdG9yfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUeXBlSW50b0VkaXRvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgZWRpdG9yIHRvIHR5cGUgaW50by4gSXQgaXMgZm9jdXNlZCAod2l0aCB0aGUgY2FyZXQgbW92ZWQgdG8gdGhlIGVuZCBvZlxuICAgKiB0aGUgZG9jdW1lbnQpIGJlZm9yZSB0aGUga2V5c3Ryb2tlcyBhcmUgaW5qZWN0ZWQuXG4gICAqL1xuICByZWFkb25seSBlZGl0b3I6IEVkaXRvcjtcblxuICAvKipcbiAgICogVGhlIHRleHQgdG8gdHlwZS4gRWFjaCBjb2RlIHBvaW50IGlzIHByZXNzZWQgdmlhIHtAbGluayBDb21tb25Bcmd1bWVudHMucHJlc3NLZXl9XG4gICAqIChhIHRydXN0ZWQgYGtleURvd25gIFx1MjE5MiBgY2hhcmAgXHUyMTkyIGBrZXlVcGApLCBleGFjdGx5IGFzIGEgcmVhbCB1c2VyIHR5cGluZy5cbiAgICovXG4gIHJlYWRvbmx5IHRleHQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgQ29tbW9uQXJndW1lbnRzLnVuaG92ZXJFbGVtZW50fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVbmhvdmVyRWxlbWVudFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgZWxlbWVudCB0byBtb3ZlIHRoZSBwb2ludGVyIGF3YXkgZnJvbS4gVGhlIHBvaW50ZXIgaXMgbW92ZWQgdG8gYSBwb2ludFxuICAgKiBqdXN0IG91dHNpZGUgaXRzIGJvdW5kaW5nIGJveC4gVGhpcyBpcyBhIGxpdmUgcmVuZGVyZXIgRE9NIG5vZGUgXHUyMDE0IHRoZVxuICAgKiBjYWxsYmFjayBydW5zIGluLXJlbmRlcmVyLCBzbyBubyBjcm9zcy1wcm9jZXNzIHNlcmlhbGl6YXRpb24gaXMgbmVlZGVkXG4gICAqIChzYW1lIGFzIHtAbGluayBUeXBlSW50b0VkaXRvclBhcmFtcy5lZGl0b3J9KS5cbiAgICovXG4gIHJlYWRvbmx5IGVsZW1lbnQ6IEhUTUxFbGVtZW50O1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBDb21tb25Bcmd1bWVudHMud2FpdFVudGlsfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXYWl0VW50aWxQYXJhbXMge1xuICAvKipcbiAgICogVGhlIHBvbGxpbmcgaW50ZXJ2YWwgYmV0d2VlbiBwcmVkaWNhdGUgY2hlY2tzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgNTBgXG4gICAqL1xuICByZWFkb25seSBpbnRlcnZhbEluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBbiBvcHRpb25hbCBkZXRhaWwgYXBwZW5kZWQgdG8gdGhlIHRpbWVvdXQgZXJyb3IgbWVzc2FnZSwgZGVzY3JpYmluZyB3aGF0XG4gICAqIHdhcyBiZWluZyB3YWl0ZWQgZm9yLlxuICAgKi9cbiAgcmVhZG9ubHkgbWVzc2FnZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGNvbmRpdGlvbiB0byB3YWl0IGZvci4gUG9sbGVkIGltbWVkaWF0ZWx5LCB0aGVuIG9uIGV2ZXJ5IGludGVydmFsIHVudGlsXG4gICAqIGl0IHJldHVybnMgYSB0cnV0aHkgdmFsdWUuIE1heSBiZSBzeW5jaHJvbm91cyBvciBhc3luY2hyb25vdXMgXHUyMDE0IGl0IGlzXG4gICAqIGF3YWl0ZWQgb24gZWFjaCBwb2xsLlxuICAgKlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBhd2FpdGVkIGNvbmRpdGlvbiBoYXMgYmVlbiBtZXQuXG4gICAqL1xuICBwcmVkaWNhdGUodGhpczogdm9pZCk6IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+O1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSB0aW1lIHRvIHdhaXQgYmVmb3JlIHJlamVjdGluZy5cbiAgICpcbiAgICogQGRlZmF1bHQgYDUwMDBgXG4gICAqL1xuICByZWFkb25seSB0aW1lb3V0SW5NaWxsaXNlY29uZHM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogRXZhbHVhdGVzIGEgZnVuY3Rpb24gaW5zaWRlIHRoZSBydW5uaW5nIE9ic2lkaWFuIGluc3RhbmNlXG4gKiB2aWEgdGhlIGFjdGl2ZSB0cmFuc3BvcnQgYW5kIHJldHVybnMgdGhlIHBhcnNlZCByZXN1bHQuXG4gKlxuICogVGhlIGZ1bmN0aW9uIHJlY2VpdmVzIGFuIGlucHV0IG9iamVjdCB0aGF0IGluY2x1ZGVzIGBhcHBgLCBgb2JzaWRpYW5Nb2R1bGVgLFxuICogYGNvbnRleHRgLCBhbmQgYW55IGFkZGl0aW9uYWwgYGlucHV0YCBwYXNzZWQgYnkgdGhlIGNhbGxlci5cbiAqIEl0IGlzIHNlcmlhbGl6ZWQgdmlhIGB0b1N0cmluZygpYCBhbmQgaW52b2tlZCBhcyBhbiBJSUZFLlxuICogVGhlIGZ1bmN0aW9uIG11c3QgYmUgc2VsZi1jb250YWluZWQgXHUyMDE0IGNsb3N1cmVzIG92ZXIgbG9jYWwgdmFyaWFibGVzIHdpbGwgbm90IHdvcmsuXG4gKiBQYXNzIGFueSBuZWVkZWQgdmFsdWVzIGFzIGBpbnB1dGAgXHUyMDE0IHRoZXkgYXJlIEpTT04tc2VyaWFsaXplZCBhbmQgZGVzZXJpYWxpemVkIG9uIHRoZSBPYnNpZGlhbiBzaWRlLlxuICpcbiAqIFRoZSByZXN1bHQgaXMgYEpTT04uc3RyaW5naWZ5YCdkIG9uIHRoZSBPYnNpZGlhbiBzaWRlIGFuZCBwYXJzZWQgYmFjay5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmdW5jdGlvbiB0byBldmFsdWF0ZS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHJldHVybiB2YWx1ZSBvZiBgY2FsbGJhY2tgLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXZhbEluT2JzaWRpYW48SW5wdXQgZXh0ZW5kcyBHZW5lcmljT2JqZWN0LCBSZXN1bHQsIFRDb250ZXh0SWQgZXh0ZW5kcyBDb250ZXh0SWQ8dW5rbm93bj4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ+KFxuICBwYXJhbXM6IEV2YWxJbk9ic2lkaWFuUGFyYW1zPElucHV0LCBSZXN1bHQsIFRDb250ZXh0SWQ+XG4pOiBQcm9taXNlPFJlc3VsdD4ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kIC0tIGBjYWxsYmFja2AgY2FuIGJlIHVuYm91bmQuXG4gIGNvbnN0IHsgY2FsbGJhY2ssIGNvbnRleHRJZCwgaW5wdXQgPSB7fSwgc2hvdWxkU2tpcFByZWZsaWdodENoZWNrcyA9IGZhbHNlLCB0cmFuc3BvcnQ6IHRyYW5zcG9ydE92ZXJyaWRlLCB2YXVsdFBhdGggfSA9IHBhcmFtcztcbiAgY29uc3QgY3dkID0gdmF1bHRQYXRoID8/IGdldFZhdWx0UGF0aCgpID8/IHByb2Nlc3MuY3dkKCk7XG5cbiAgLy8gQ2hlY2s6IFZhdWx0IHBhdGggZXhpc3RzIG9uIGRpc2suXG4gIGlmICh2YXVsdFBhdGggIT09IHVuZGVmaW5lZCAmJiAhZXhpc3RzU3luYyh2YXVsdFBhdGgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBWYXVsdCBwYXRoIGRvZXMgbm90IGV4aXN0OiAke3ZhdWx0UGF0aH1gKTtcbiAgfVxuXG4gIGNvbnN0IHRyYW5zcG9ydCA9IHRyYW5zcG9ydE92ZXJyaWRlID8/IGF3YWl0IGdldE9yQ3JlYXRlVHJhbnNwb3J0KGdldFRyYW5zcG9ydE9wdGlvbnMoKSk7XG5cbiAgaWYgKCFzaG91bGRTa2lwUHJlZmxpZ2h0Q2hlY2tzKSB7XG4gICAgYXdhaXQgdHJhbnNwb3J0LnByZWZsaWdodENoZWNrKGN3ZCk7XG4gIH1cblxuICBhd2FpdCBlbnN1cmVOYW1lc3BhY2VCb290c3RyYXBwZWQodHJhbnNwb3J0LCBjd2QpO1xuXG4gIGNvbnN0IG5hbWVzcGFjZUNhbGxQYXJhbXM6IEdlbmVyYXRlTmFtZXNwYWNlQ2FsbFBhcmFtcyA9IHtcbiAgICBjYWxsYmFjayxcbiAgICBpbnB1dCxcbiAgICAuLi4oY29udGV4dElkICE9PSB1bmRlZmluZWQgJiYgeyBjb250ZXh0SWQ6IFN0cmluZyhjb250ZXh0SWQpIH0pXG4gIH07XG5cbiAgY29uc3QgZXhwcmVzc2lvbiA9IGdlbmVyYXRlTmFtZXNwYWNlQ2FsbChuYW1lc3BhY2VDYWxsUGFyYW1zKTtcblxuICBjb25zdCByZXN1bHRTdHJpbmcgPSBhd2FpdCB0cmFuc3BvcnQuZXZhbHVhdGUoZXhwcmVzc2lvbiwgeyBjd2QgfSk7XG5cbiAgaWYgKHJlc3VsdFN0cmluZyA9PT0gJycgfHwgcmVzdWx0U3RyaW5nID09PSBOT19PVVRQVVQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkIGFzIFJlc3VsdDtcbiAgfVxuXG4gIGxldCBlbnZlbG9wZTogRXZhbFJlc3VsdEVudmVsb3BlO1xuICB0cnkge1xuICAgIGVudmVsb3BlID0gSlNPTi5wYXJzZShyZXN1bHRTdHJpbmcpIGFzIEV2YWxSZXN1bHRFbnZlbG9wZTtcbiAgfSBjYXRjaCB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBldmFsSW5PYnNpZGlhbjogT2JzaWRpYW4gcmV0dXJuZWQgbm9uLUpTT04gb3V0cHV0OiAke3Jlc3VsdFN0cmluZ31gKTtcbiAgfVxuXG4gIGlmICgndHlwZScgaW4gZW52ZWxvcGUpIHtcbiAgICBpZiAoZW52ZWxvcGUudHlwZSA9PT0gJ2Vycm9yJykge1xuICAgICAgLy8gUmV3cml0ZSBiYXJlLW9yaWdpbiBsb2NhbGhvc3Qgc3RhY2sgZnJhbWVzIGxpa2UgXCIoaHR0cDovL2xvY2FsaG9zdC86OTE1OjMyKVwiXG4gICAgICAvLyBTbyBWaXRlc3QncyBzb3VyY2UtbWFwIHJlc29sdmVyIHdvbid0IGV4dHJhY3QgXCIvXCIgYXMgdGhlIGZpbGUgcGF0aCBhbmQgY3Jhc2hcbiAgICAgIC8vIFdpdGggRUlTRElSIHdoZW4gaXQgdHJpZXMgdG8gcmVhZEZpbGVTeW5jIG9uIHRoZSByb290IGRpcmVjdG9yeS5cbiAgICAgIGNvbnN0IHNhbml0aXplZERldGFpbCA9IGVudmVsb3BlLnZhbHVlXG4gICAgICAgIC5yZXBsYWNlQWxsKC9cXChodHRwcz86XFwvXFwvbG9jYWxob3N0XFwvOig/PGxpbmU+XFxkKS9nLCAnKG9ic2lkaWFuLXdlYnZpZXc6JDxsaW5lPicpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBldmFsSW5PYnNpZGlhbjogRXJyb3IgaW5zaWRlIE9ic2lkaWFuOlxcbiR7c2FuaXRpemVkRGV0YWlsfWApO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQgYXMgUmVzdWx0O1xuICB9XG5cbiAgcmV0dXJuIGVudmVsb3BlLnZhbHVlIGFzIFJlc3VsdDtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICJBQWdCQSxTQUFTLGtCQUFrQjtBQUMzQixPQUFPLGFBQWE7QUFTcEI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLDZCQUE2QjtBQUN0QyxTQUFTLG1DQUFtQztBQUM1QyxTQUFTLDRCQUE0QjtBQTJCckMsTUFBTSxZQUFZO0FBNlpsQixlQUFzQixlQUNwQixRQUNpQjtBQUVqQixRQUFNLEVBQUUsVUFBVSxXQUFXLFFBQVEsQ0FBQyxHQUFHLDRCQUE0QixPQUFPLFdBQVcsbUJBQW1CLFVBQVUsSUFBSTtBQUN4SCxRQUFNLE1BQU0sYUFBYSxhQUFhLEtBQUssUUFBUSxJQUFJO0FBR3ZELE1BQUksY0FBYyxVQUFhLENBQUMsV0FBVyxTQUFTLEdBQUc7QUFDckQsVUFBTSxJQUFJLE1BQU0sOEJBQThCLFNBQVMsRUFBRTtBQUFBLEVBQzNEO0FBRUEsUUFBTSxZQUFZLHFCQUFxQixNQUFNLHFCQUFxQixvQkFBb0IsQ0FBQztBQUV2RixNQUFJLENBQUMsMkJBQTJCO0FBQzlCLFVBQU0sVUFBVSxlQUFlLEdBQUc7QUFBQSxFQUNwQztBQUVBLFFBQU0sNEJBQTRCLFdBQVcsR0FBRztBQUVoRCxRQUFNLHNCQUFtRDtBQUFBLElBQ3ZEO0FBQUEsSUFDQTtBQUFBLElBQ0EsR0FBSSxjQUFjLFVBQWEsRUFBRSxXQUFXLE9BQU8sU0FBUyxFQUFFO0FBQUEsRUFDaEU7QUFFQSxRQUFNLGFBQWEsc0JBQXNCLG1CQUFtQjtBQUU1RCxRQUFNLGVBQWUsTUFBTSxVQUFVLFNBQVMsWUFBWSxFQUFFLElBQUksQ0FBQztBQUVqRSxNQUFJLGlCQUFpQixNQUFNLGlCQUFpQixXQUFXO0FBQ3JELFdBQU87QUFBQSxFQUNUO0FBRUEsTUFBSTtBQUNKLE1BQUk7QUFDRixlQUFXLEtBQUssTUFBTSxZQUFZO0FBQUEsRUFDcEMsUUFBUTtBQUNOLFVBQU0sSUFBSSxNQUFNLHNEQUFzRCxZQUFZLEVBQUU7QUFBQSxFQUN0RjtBQUVBLE1BQUksVUFBVSxVQUFVO0FBQ3RCLFFBQUksU0FBUyxTQUFTLFNBQVM7QUFJN0IsWUFBTSxrQkFBa0IsU0FBUyxNQUM5QixXQUFXLHlDQUF5QywyQkFBMkI7QUFDbEYsWUFBTSxJQUFJLE1BQU07QUFBQSxFQUEyQyxlQUFlLEVBQUU7QUFBQSxJQUM5RTtBQUVBLFdBQU87QUFBQSxFQUNUO0FBRUEsU0FBTyxTQUFTO0FBQ2xCOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2V2YWwtaW4tb2JzaWRpYW4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBFdmFsdWF0ZXMgYSBmdW5jdGlvbiBpbnNpZGUgYSBydW5uaW5nIE9ic2lkaWFuIGluc3RhbmNlIHZpYSBhIHBsdWdnYWJsZSB0cmFuc3BvcnQuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBBcHAsXG4gIEVkaXRvcixcbiAgTW9kaWZpZXIsXG4gIFRGaWxlXG59IGZyb20gJ29ic2lkaWFuJztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQteC9uby1uYW1lc3BhY2UgLS0gV2UgbmVlZCB0byByZWZlcmVuY2UgYG9ic2lkaWFuYCBtb2R1bGUuXG5pbXBvcnQgdHlwZSAqIGFzIG9ic2lkaWFuIGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmltcG9ydCB0eXBlIHtcbiAgQ29udGV4dEFyZ3VtZW50cyxcbiAgQ29udGV4dElkXG59IGZyb20gJy4vY29udGV4dC1pZC5tanMnO1xuaW1wb3J0IHR5cGUgeyBHZW5lcmF0ZU5hbWVzcGFjZUNhbGxQYXJhbXMgfSBmcm9tICcuL2dlbmVyYXRlLWZ1bmN0aW9uLWNhbGwubWpzJztcbmltcG9ydCB0eXBlIHsgT2JzaWRpYW5UcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC5tanMnO1xuXG5pbXBvcnQge1xuICBnZXRUcmFuc3BvcnRPcHRpb25zLFxuICBnZXRWYXVsdFBhdGhcbn0gZnJvbSAnLi9jb250ZXh0LXByb3ZpZGVyLm1qcyc7XG5pbXBvcnQgeyBnZW5lcmF0ZU5hbWVzcGFjZUNhbGwgfSBmcm9tICcuL2dlbmVyYXRlLWZ1bmN0aW9uLWNhbGwubWpzJztcbmltcG9ydCB7IGVuc3VyZU5hbWVzcGFjZUJvb3RzdHJhcHBlZCB9IGZyb20gJy4vbmFtZXNwYWNlLWJvb3RzdHJhcC5tanMnO1xuaW1wb3J0IHsgZ2V0T3JDcmVhdGVUcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC1mYWN0b3J5Lm1qcyc7XG5cbmludGVyZmFjZSBFdmFsRXJyb3JFbnZlbG9wZSB7XG4gIHR5cGU6ICdlcnJvcic7XG4gIHZhbHVlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGlzY3JpbWluYXRlZCBlbnZlbG9wZSByZXR1cm5lZCBieSB0aGUgcmVnaXN0ZXJlZCBgZXZhbFdyYXBwZXJgIGZyb20gaW5zaWRlIHRoZSBPYnNpZGlhbiBwcm9jZXNzLlxuICpcbiAqIC0gYEV2YWxFcnJvckVudmVsb3BlYCBcdTIwMTQgYGNhbGxiYWNrYCB0aHJldzsgYHZhbHVlYCBpcyB0aGUgc2VyaWFsaXplZCBlcnJvci5cbiAqIC0gYEV2YWxVbmRlZmluZWRFbnZlbG9wZWAgXHUyMDE0IGBjYWxsYmFja2AgcmV0dXJuZWQgYHVuZGVmaW5lZGAuXG4gKiAtIGBFdmFsVmFsdWVFbnZlbG9wZWAgXHUyMDE0IGBjYWxsYmFja2AgcmV0dXJuZWQgYSBKU09OLXNlcmlhbGl6YWJsZSB2YWx1ZS5cbiAqL1xudHlwZSBFdmFsUmVzdWx0RW52ZWxvcGUgPVxuICB8IEV2YWxFcnJvckVudmVsb3BlXG4gIHwgRXZhbFVuZGVmaW5lZEVudmVsb3BlXG4gIHwgRXZhbFZhbHVlRW52ZWxvcGU7XG5cbmludGVyZmFjZSBFdmFsVW5kZWZpbmVkRW52ZWxvcGUge1xuICB0eXBlOiAndW5kZWZpbmVkJztcbn1cblxuaW50ZXJmYWNlIEV2YWxWYWx1ZUVudmVsb3BlIHtcbiAgdmFsdWU6IHVua25vd247XG59XG5cbmNvbnN0IE5PX09VVFBVVCA9ICcobm8gb3V0cHV0KSc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIENvbW1vbkFyZ3VtZW50cy5jbGlja0VsZW1lbnR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENsaWNrRWxlbWVudFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgbW91c2UgYnV0dG9uIHRvIHByZXNzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgJ2xlZnQnYFxuICAgKi9cbiAgcmVhZG9ubHkgYnV0dG9uPzogTW91c2VCdXR0b247XG5cbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50IHRvIGNsaWNrLiBUaGUgcG9pbnRlciBpcyBtb3ZlZCB0byBpdHMgY2VudGVyLiBUaGlzIGlzIGEgbGl2ZVxuICAgKiByZW5kZXJlciBET00gbm9kZSBcdTIwMTQgdGhlIGNhbGxiYWNrIHJ1bnMgaW4tcmVuZGVyZXIsIHNvIG5vIGNyb3NzLXByb2Nlc3NcbiAgICogc2VyaWFsaXphdGlvbiBpcyBuZWVkZWQgKHNhbWUgYXMge0BsaW5rIFR5cGVJbnRvRWRpdG9yUGFyYW1zLmVkaXRvcn0pLlxuICAgKi9cbiAgcmVhZG9ubHkgZWxlbWVudDogSFRNTEVsZW1lbnQ7XG5cbiAgLyoqXG4gICAqIFRoZSBtb2RpZmllciBrZXlzIHRvIGhvbGQsIHVzaW5nIE9ic2lkaWFuJ3Mge0BsaW5rIE1vZGlmaWVyfSBuYW1lcy4gYCdNb2QnYFxuICAgKiByZXNvbHZlcyBwZXItcGxhdGZvcm0gKENtZCBvbiBtYWNPUywgQ3RybCBlbHNld2hlcmUpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgW11gXG4gICAqL1xuICByZWFkb25seSBtb2RpZmllcnM/OiByZWFkb25seSBNb2RpZmllcltdO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBDb21tb25Bcmd1bWVudHMuY2xpY2tNb3VzZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2xpY2tNb3VzZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgbW91c2UgYnV0dG9uIHRvIHByZXNzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgJ2xlZnQnYFxuICAgKi9cbiAgcmVhZG9ubHkgYnV0dG9uPzogTW91c2VCdXR0b247XG5cbiAgLyoqXG4gICAqIFRoZSBtb2RpZmllciBrZXlzIHRvIGhvbGQsIHVzaW5nIE9ic2lkaWFuJ3Mge0BsaW5rIE1vZGlmaWVyfSBuYW1lcy4gYCdNb2QnYFxuICAgKiByZXNvbHZlcyBwZXItcGxhdGZvcm0gKENtZCBvbiBtYWNPUywgQ3RybCBlbHNld2hlcmUpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgW11gXG4gICAqL1xuICByZWFkb25seSBtb2RpZmllcnM/OiByZWFkb25seSBNb2RpZmllcltdO1xuXG4gIC8qKlxuICAgKiBUaGUgeCBjb29yZGluYXRlICh3ZWItY29udGVudHMgRElQKSB0byBjbGljayBhdC5cbiAgICovXG4gIHJlYWRvbmx5IHg6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHkgY29vcmRpbmF0ZSAod2ViLWNvbnRlbnRzIERJUCkgdG8gY2xpY2sgYXQuXG4gICAqL1xuICByZWFkb25seSB5OiBudW1iZXI7XG59XG5cbi8qKlxuICogQ29tbW9uIGFyZ3VtZW50cyBhdXRvbWF0aWNhbGx5IHByb3ZpZGVkIHRvIGV2ZXJ5IHtAbGluayBldmFsSW5PYnNpZGlhbn0gY2FsbGJhY2suXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbW9uQXJndW1lbnRzIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiB7QGxpbmsgQXBwfSBpbnN0YW5jZS5cbiAgICovXG4gIGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgc2hhcmVkIGxpYnJhcnkgYmFnIGluamVjdGVkIGludG8gZXZlcnkgY2FsbGJhY2sgXHUyMDE0IHNlZSB7QGxpbmsgTGlifS5cbiAgICpcbiAgICogTmV2ZXIgZW1wdHk6IHRoZSBoYXJuZXNzIHByZS1wb3B1bGF0ZXMgYSAqKmJhc2UqKiBzZXQgb2YgcmVuZGVyZXItZHJpdmluZ1xuICAgKiBoZWxwZXJzICh0cnVzdGVkIGlucHV0IFx1MjAxNCBgdHlwZUludG9FZGl0b3JgIC8gYHByZXNzS2V5YCAvIGBtb3ZlTW91c2VgIC9cbiAgICogYGNsaWNrTW91c2VgIC8gYGhvdmVyRWxlbWVudGAgLyBgdW5ob3ZlckVsZW1lbnRgIC8gYGNsaWNrRWxlbWVudGAgXHUyMDE0IHBsdXNcbiAgICogYHdhaXRVbnRpbGAsIGBjcmVhdGVOb3RlYCBhbmQgYG9wZW5TZXR0aW5nc1RhYmApLCBhbmQgcHJvdmlkZXIgcGFja2FnZXNcbiAgICogKGNoaWVmbHkgYG9ic2lkaWFuLWRldi11dGlsc2ApIGBPYmplY3QuYXNzaWduYCB0aGVpciB3aG9sZSByZW5kZXJlci1zYWZlXG4gICAqIGxpYnJhcnkgb24gdG9wIHZpYSB7QGxpbmsgcmVnaXN0ZXJMaWJSZXNvbHZlcn0uIEEgc2VyaWFsaXplZCBjbG9zdXJlIHJlYWNoZXNcbiAgICogZXZlcnkgc2hhcmVkIGhlbHBlciB0aHJvdWdoIGBsaWJgIFx1MjAxNCBgbGliLnR5cGVJbnRvRWRpdG9yKHsgZWRpdG9yLCB0ZXh0IH0pYCxcbiAgICogYGxpYi5nZXRGaWxlT3JOdWxsKHsgYXBwLCBcdTIwMjYgfSlgIFx1MjAxNCBpbnN0ZWFkIG9mIGltcG9ydGluZyBvciBoYW5kLXJvbGxpbmcgdGhlbS5cbiAgICovXG4gIGxpYjogTGliO1xuXG4gIC8qKlxuICAgKiBUaGUgYG9ic2lkaWFuYCBtb2R1bGUsIHJlc29sdmVkIGF0IHJ1bnRpbWUgaW5zaWRlIHRoZSBPYnNpZGlhbiBwcm9jZXNzLlxuICAgKi9cbiAgb2JzaWRpYW5Nb2R1bGU6IHR5cGVvZiBvYnNpZGlhbjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgQ29tbW9uQXJndW1lbnRzLmNyZWF0ZU5vdGV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZU5vdGVQYXJhbXMge1xuICAvKipcbiAgICogVGhlIG5vdGUncyBjb250ZW50LiBUaGlzIGV4YWN0IHN0cmluZyBpcyB3aGF0IHRoZSBjcmVhdGVkIG5vdGUgaXMgcmVhZCBiYWNrXG4gICAqIGFnYWluc3QsIHNvIGl0IGlzIHRoZSBkZWZpbml0aW9uIG9mIGEgc3VjY2Vzc2Z1bCB3cml0ZS5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRlbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHZhdWx0LXJlbGF0aXZlIHBhdGggdG8gY3JlYXRlLCBleHRlbnNpb24gaW5jbHVkZWQuXG4gICAqL1xuICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGV2YWxJbk9ic2lkaWFufS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmFsSW5PYnNpZGlhblBhcmFtczxJbnB1dCBleHRlbmRzIEdlbmVyaWNPYmplY3QsIFJlc3VsdCwgVENvbnRleHRJZCBleHRlbmRzIENvbnRleHRJZDx1bmtub3duPiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZD4ge1xuICAvKipcbiAgICogVGhlIGZ1bmN0aW9uIHRvIGV2YWx1YXRlIGluIHRoZSBPYnNpZGlhbiBjb250ZXh0LlxuICAgKi9cbiAgY2FsbGJhY2soaW5wdXQ6IENvbW1vbkFyZ3VtZW50cyAmIENvbnRleHRBcmd1bWVudHM8VENvbnRleHRJZD4gJiBJbnB1dCk6IFByb21pc2FibGU8UmVzdWx0PjtcblxuICAvKipcbiAgICogQSB7QGxpbmsgQ29udGV4dElkfSBsaW5raW5nIHRoaXMgY2FsbCB0byBhIHBlcnNpc3RlbnQgc3RvcmUgb24gYHdpbmRvd2BcbiAgICogaW4gdGhlIE9ic2lkaWFuIHByb2Nlc3MuIFRoZSBjYWxsYmFjayByZWNlaXZlcyBhIHR5cGVkIGBjb250ZXh0YCBvYmplY3RcbiAgICogdGhhdCBzdXJ2aXZlcyBhY3Jvc3MgY2FsbHMgc2hhcmluZyB0aGUgc2FtZSBJRC5cbiAgICpcbiAgICogV2hlbiBvbWl0dGVkLCBgY29udGV4dGAgaXMgYSBmcmVzaCBlbXB0eSBvYmplY3QgZWFjaCBjYWxsLlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGV4dElkPzogVENvbnRleHRJZDtcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgZnVuY3Rpb24uIFZhbHVlcyBtYXkgaW5jbHVkZSBmdW5jdGlvbnMgXHUyMDE0XG4gICAqIHRoZXkgYXJlIHNlcmlhbGl6ZWQgdmlhIGB0b1N0cmluZygpYC5cbiAgICovXG4gIHJlYWRvbmx5IGlucHV0PzogSW5wdXQ7XG5cbiAgLyoqXG4gICAqIFNraXBzIHByZS1mbGlnaHQgY2hlY2tzICh2YXVsdCByZWdpc3RyYXRpb24sIENMSSBhdmFpbGFiaWxpdHkpLlxuICAgKiBVc2VkIGludGVybmFsbHkgYnkgdmF1bHQgcmVnaXN0cmF0aW9uIGZ1bmN0aW9ucy5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICByZWFkb25seSBzaG91bGRTa2lwUHJlZmxpZ2h0Q2hlY2tzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3ZlcnJpZGUgdGhlIHRyYW5zcG9ydCBmb3IgdGhpcyBjYWxsLiBXaGVuIG9taXR0ZWQsIHVzZXMgdGhlIHRyYW5zcG9ydFxuICAgKiBjb25maWd1cmVkIHZpYSB0aGUgY29udGV4dCBwcm92aWRlciAoc2V0IGJ5IHRoZSBmcmFtZXdvcmsgYWRhcHRlcidzIGdsb2JhbCBzZXR1cCkuXG4gICAqL1xuICByZWFkb25seSB0cmFuc3BvcnQ/OiBPYnNpZGlhblRyYW5zcG9ydDtcblxuICAvKipcbiAgICogVGhlIHBhdGggdG8gdGhlIE9ic2lkaWFuIHZhdWx0LiBEZWZhdWx0cyB0byBgcHJvY2Vzcy5jd2QoKWAuXG4gICAqL1xuICByZWFkb25seSB2YXVsdFBhdGg/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBwbGFpbiBvYmplY3Qgd2l0aCBzdHJpbmcga2V5cy5cbiAqL1xuZXhwb3J0IHR5cGUgR2VuZXJpY09iamVjdCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBDb21tb25Bcmd1bWVudHMuaG92ZXJFbGVtZW50fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIb3ZlckVsZW1lbnRQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGVsZW1lbnQgdG8gaG92ZXIuIFRoZSBwb2ludGVyIGlzIG1vdmVkIHRvIGl0cyBjZW50ZXIuIFRoaXMgaXMgYSBsaXZlXG4gICAqIHJlbmRlcmVyIERPTSBub2RlIFx1MjAxNCB0aGUgY2FsbGJhY2sgcnVucyBpbi1yZW5kZXJlciwgc28gbm8gY3Jvc3MtcHJvY2Vzc1xuICAgKiBzZXJpYWxpemF0aW9uIGlzIG5lZWRlZCAoc2FtZSBhcyB7QGxpbmsgVHlwZUludG9FZGl0b3JQYXJhbXMuZWRpdG9yfSkuXG4gICAqL1xuICByZWFkb25seSBlbGVtZW50OiBIVE1MRWxlbWVudDtcbn1cblxuLyoqXG4gKiBUaGUgc2hhcmVkIGxpYnJhcnkgYmFnIGluamVjdGVkIGludG8gZXZlcnkge0BsaW5rIGV2YWxJbk9ic2lkaWFufSBjYWxsYmFjayBhc1xuICoge0BsaW5rIENvbW1vbkFyZ3VtZW50cy5saWJ9LlxuICpcbiAqIFR3byBsYXllcnMgY29tcG9zZSBpbnRvIHRoaXMgb25lIGJhZy4gVGhlICoqYmFzZSoqIFx1MjAxNCB0aGUgaGFybmVzcy1wcm92aWRlZFxuICogcmVuZGVyZXItZHJpdmluZyBoZWxwZXJzIGRlY2xhcmVkIGJlbG93ICh0aGUgdHJ1c3RlZC1pbnB1dCBwcmltaXRpdmVzIGFuZFxuICoge0BsaW5rIExpYi53YWl0VW50aWx9KSBcdTIwMTQgaXMgYWx3YXlzIHByZXNlbnQuIE9uIHRvcCwgcHJvdmlkZXIgcGFja2FnZXMgcmVnaXN0ZXJcbiAqIGEgcmVuZGVyZXItc2lkZSByZXNvbHZlciB2aWEge0BsaW5rIHJlZ2lzdGVyTGliUmVzb2x2ZXJ9IHRvIGBPYmplY3QuYXNzaWduYFxuICogdGhlaXIgd2hvbGUgcmVuZGVyZXItc2FmZSBsaWJyYXJ5IGF0IHJ1bnRpbWUsIGFuZCBhdWdtZW50IHRoaXMgKiphdWdtZW50YWJsZSoqXG4gKiBpbnRlcmZhY2UgKHRoZSBgaTE4bmV4dGAgYEN1c3RvbVR5cGVPcHRpb25zYCBpZGlvbSkgdmlhXG4gKiBgZGVjbGFyZSBtb2R1bGUgJ29ic2lkaWFuLWludGVncmF0aW9uLXRlc3RpbmcnYCB0byB0eXBlIGl0LiBNdWx0aXBsZSBwcm92aWRlcnNcbiAqIGNvbXBvc2U6IHRoZWlyIGV4cG9ydHMgbWVyZ2UgYXQgcnVudGltZSBhbmQgdGhlaXIgYXVnbWVudGF0aW9ucyBtZXJnZSBpbiB0aGVcbiAqIHR5cGUgc3lzdGVtIChgaW50ZXJmYWNlIExpYiBleHRlbmRzIFx1MjAyNmApLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogZGVjbGFyZSBtb2R1bGUgJ29ic2lkaWFuLWludGVncmF0aW9uLXRlc3RpbmcnIHtcbiAqICAgaW50ZXJmYWNlIExpYiBleHRlbmRzICh0eXBlb2YgaW1wb3J0KCdvYnNpZGlhbi1kZXYtdXRpbHMvX19tZXJnZWQnKSkge31cbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIExpYiB7XG4gIC8qKlxuICAgKiBDbGlja3MgdGhlIGNlbnRlciBvZiBhbiBlbGVtZW50IHVzaW5nICoqdHJ1c3RlZCoqIEVsZWN0cm9uIHBvaW50ZXIgaW5wdXQuXG4gICAqXG4gICAqIFRoZSBlbGVtZW50LXJlbGF0aXZlIGNvdW50ZXJwYXJ0IG9mIHtAbGluayBMaWIuY2xpY2tNb3VzZX0sIG1pcnJvcmluZyB0aGVcbiAgICoge0BsaW5rIExpYi5tb3ZlTW91c2V9IC8ge0BsaW5rIExpYi5ob3ZlckVsZW1lbnR9IHNwbGl0LiBVc2VcbiAgICoge0BsaW5rIExpYi5jbGlja01vdXNlfSBkaXJlY3RseSB3aGVuIHRoZSBwb2ludCB0byBjbGljayBpcyAqKm5vdCoqIHRoZVxuICAgKiBlbGVtZW50J3MgY2VudGVyIFx1MjAxNCB0aGUgbWFya2Rvd24gZWRpdG9yJ3MgbWFyZ2luLCBmb3IgaW5zdGFuY2UsIGxpZXMgaW5zaWRlXG4gICAqIGBjbS5zY3JvbGxET01gIGJ1dCBvdXRzaWRlIGAuY20tc2l6ZXJgLCBzbyBubyBlbGVtZW50J3MgY2VudGVyIGxhbmRzIG9uIGl0LlxuICAgKlxuICAgKiBTeW5jaHJvbm91czogaW5qZWN0aW5nIHRoZSB0cnVzdGVkIGNsaWNrIGRvZXMgbm8gcmVhbCBhd2FpdGluZywgc28gdGhlXG4gICAqIGNhbGxlciBkb2VzIG5vdCBuZWVkIHRvIGBhd2FpdGAgaXQuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZWxlbWVudCB0byBjbGljaywgdGhlIGJ1dHRvbiB0byBwcmVzcyBhbmQgYW55IG1vZGlmaWVyc1xuICAgKiAgIHRvIGhvbGQuXG4gICAqL1xuICBjbGlja0VsZW1lbnQodGhpczogdm9pZCwgcGFyYW1zOiBDbGlja0VsZW1lbnRQYXJhbXMpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBDbGlja3MgYXQgdGhlIGdpdmVuIHdlYi1jb250ZW50cyBjb29yZGluYXRlcyB1c2luZyAqKnRydXN0ZWQqKiBFbGVjdHJvblxuICAgKiBwb2ludGVyIGlucHV0LCBzbyBDaHJvbWl1bSBzeW50aGVzaXplcyBhIHJlYWwgYGNsaWNrYCAob3IgYGNvbnRleHRtZW51YCxcbiAgICogZm9yIHRoZSByaWdodCBidXR0b24pIHdpdGggYGlzVHJ1c3RlZCA9PT0gdHJ1ZWAuXG4gICAqXG4gICAqIFRoaXMgaXMgd2hhdCBgZWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KCdjbGljaycpKWAgY2Fubm90IGRvOlxuICAgKiBPYnNpZGlhbiBhbmQgQ29kZU1pcnJvciBnYXRlIG9uIGBpc1RydXN0ZWRgLCBzbyBhIGRpc3BhdGNoZWQgZXZlbnQgc2lsZW50bHlcbiAgICogZXhlcmNpc2VzIG5vdGhpbmcgd2hpbGUgdGhlIHRlc3Qgc3RpbGwgcGFzc2VzIHdoYXRldmVyIHdlYWtlciBhc3NlcnRpb24gaXRcbiAgICogbWFrZXMuIE9ic2lkaWFuIDEuMTMuNydzIG1hcmtkb3duIHZpZXdwb3J0IChtYXJnaW4pIG1lbnUsIGZvciBleGFtcGxlLFxuICAgKiBvcGVucyBmcm9tIGEgYGNtLnNjcm9sbERPTWAgYGNvbnRleHRtZW51YCBsaXN0ZW5lciBndWFyZGVkIGJ5XG4gICAqIGBlLmlzVHJ1c3RlZGAsIHdoaWNoIGEgZGlzcGF0Y2hlZCBldmVudCBuZXZlciBnZXRzIHBhc3QuXG4gICAqXG4gICAqIEl0IGlzIHRoZSBsb3ctbGV2ZWwgcHJpbWl0aXZlOiBhIHNpbmdsZSB0cnVzdGVkIGBtb3VzZU1vdmVgIFx1MjE5MiBgbW91c2VEb3duYCBcdTIxOTJcbiAgICogYG1vdXNlVXBgIGF0IG9uZSBwb2ludCwgd2l0aCBubyB3YWl0aW5nIGZvciBhbnkgZWZmZWN0IChjYWxsZXJzIHBvbGwgdGhlaXJcbiAgICogb3duIHJlYWRpbmVzcyBzaWduYWwpLiBUaGUgbGVhZGluZyBtb3ZlIGlzIHdoYXQgcHV0cyB0aGUgcG9pbnRlciBvdmVyIHRoZVxuICAgKiBoaXQtdGVzdCB0YXJnZXQgYmVmb3JlIHRoZSBidXR0b24gZ29lcyBkb3duLiBQcmVmZXJcbiAgICoge0BsaW5rIExpYi5jbGlja0VsZW1lbnR9IGZvciBlbGVtZW50LXJlbGF0aXZlIGNsaWNrcy5cbiAgICpcbiAgICogQSByZWFsIGNvbnRleHQgbWVudSBhY3R1YWxseSBvcGVucywgc28gYSBzdWl0ZSBkcml2aW5nIGEgcmlnaHQgY2xpY2sgbXVzdFxuICAgKiBjbG9zZSBpdCAob3IgcmVtb3ZlIHRoZSBsZWZ0b3ZlciBgLm1lbnVgIGVsZW1lbnQpIGJlZm9yZSB0aGUgbmV4dCB0ZXN0LlxuICAgKlxuICAgKiBTeW5jaHJvbm91czogaW5qZWN0aW5nIHRoZSB0cnVzdGVkIGNsaWNrIGRvZXMgbm8gcmVhbCBhd2FpdGluZywgc28gdGhlXG4gICAqIGNhbGxlciBkb2VzIG5vdCBuZWVkIHRvIGBhd2FpdGAgaXQuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgd2ViLWNvbnRlbnRzIERJUCBjb29yZGluYXRlcyB0byBjbGljayBhdCwgdGhlIGJ1dHRvbiB0b1xuICAgKiAgIHByZXNzIGFuZCBhbnkgbW9kaWZpZXJzIHRvIGhvbGQuXG4gICAqL1xuICBjbGlja01vdXNlKHRoaXM6IHZvaWQsIHBhcmFtczogQ2xpY2tNb3VzZVBhcmFtcyk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBub3RlIGFuZCBkb2VzIG5vdCByZXR1cm4gdW50aWwgaXRzIGNvbnRlbnQgaXMgdmVyaWZpYWJseSBvblxuICAgKiBkaXNrLCByZXdyaXRpbmcgaXQgaWYgaXQgaXMgbm90LlxuICAgKlxuICAgKiBVc2UgdGhpcyBpbnN0ZWFkIG9mIGBhcHAudmF1bHQuY3JlYXRlYCBpbiBhbnkgc3VpdGUgdGhhdCBtYXkgcnVuIG9uXG4gICAqIEFuZHJvaWQuIFRoZSBlbXVsYXRvciB0cmFuc3BvcnQgbG9zZXMgcm91Z2hseSAqKjAuOSAlKiogb2YgYHZhdWx0LmNyZWF0ZWBcbiAgICogd3JpdGVzIChtZWFzdXJlZDogNyBsb3N0IGluIDgwMCBjcmVhdGVzKTogdGhlIGZpbGUgbGFuZHMgKiowIGJ5dGVzKiogb25cbiAgICogZGlzayB3aGlsZSBPYnNpZGlhbidzIGluLW1lbW9yeSBgVEZpbGUuc3RhdGAgcmVwb3J0cyB0aGUgZnVsbCBieXRlIGNvdW50LFxuICAgKiBhbmQgaXQgZG9lcyBub3QgaGVhbCBvbiBpdHMgb3duLiBBIHN1aXRlIGRvaW5nIH4zNCBjcmVhdGVzIHBlciBydW5cbiAgICogdGhlcmVmb3JlIGhhcyBhIH4yNiAlIGNoYW5jZSBvZiBhdCBsZWFzdCBvbmUgbG9zdCB3cml0ZSwgYW5kIHdoaWNoZXZlciB0ZXN0XG4gICAqIGxvc2VzIHRoYXQgbG90dGVyeSBmYWlscyBvbiBhIGB3YWl0VW50aWxgIGZvciBjb250ZW50IHRoYXQgd2FzIG5ldmVyXG4gICAqIHdyaXR0ZW4gXHUyMDE0IHdoaWNoIGlzIHdoeSBpdCByZWFkcyBhcyBhbiB1bnJlbGF0ZWQgcGVyLXRlc3QgZmxha2UgcmF0aGVyIHRoYW5cbiAgICogb25lIHNoYXJlZCBjYXVzZS5cbiAgICpcbiAgICogVmVyaWZpY2F0aW9uIGlzIGJ5ICoqcmVhZGluZyB0aGUgbm90ZSBiYWNrKiosIG5ldmVyIGJ5IGluc3BlY3RpbmdcbiAgICogYFRGaWxlLnN0YXRgOiBgc3RhdGAgaXMgZXhhY3RseSB0aGUgZmllbGQgdGhhdCBsaWVzIGhlcmUuIEEgcmV3cml0ZSB0aHJvdWdoXG4gICAqIGB2YXVsdC5tb2RpZnlgIHdpdGggdGhlIHNhbWUgY29udGVudCBsYW5kcyBjb3JyZWN0bHkgKGFsc28gbWVhc3VyZWQpLCBzbyBhXG4gICAqIGxvc3Qgd3JpdGUgY29zdHMgYSByZXRyeSByYXRoZXIgdGhhbiBhIGZhaWx1cmUuIEEgbm90ZSB3aG9zZSBjb250ZW50IHN0aWxsXG4gICAqIGRvZXMgbm90IG1hdGNoIGFmdGVyIHRoZSBib3VuZGVkIHJldHJpZXMgdGhyb3dzLCBuYW1pbmcgdGhlIHBhdGggYW5kIGJvdGhcbiAgICogbGVuZ3Rocywgc28gYSBnZW51aW5lbHkgYnJva2VuIHdyaXRlIGZhaWxzIGxvdWRseSBpbnN0ZWFkIG9mIHNwaW5uaW5nLlxuICAgKlxuICAgKiBIYXJtbGVzcyBldmVyeXdoZXJlIGVsc2UgXHUyMDE0IG9uIGEgdHJhbnNwb3J0IHRoYXQgZG9lcyBub3QgbG9zZSB3cml0ZXMgdGhlXG4gICAqIHJlYWQtYmFjayBtYXRjaGVzIGZpcnN0IHRpbWUgYW5kIG5vdGhpbmcgaXMgcmV3cml0dGVuLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIG5vdGUgcGF0aCBhbmQgY29udGVudC5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gcmVzb2x2aW5nIHRvIHRoZSBjcmVhdGVkIGZpbGUsIG9uY2UgaXRzIGNvbnRlbnRcbiAgICogICBpcyBjb25maXJtZWQuXG4gICAqL1xuICBjcmVhdGVOb3RlKHRoaXM6IHZvaWQsIHBhcmFtczogQ3JlYXRlTm90ZVBhcmFtcyk6IFByb21pc2U8VEZpbGU+O1xuXG4gIC8qKlxuICAgKiBNb3ZlcyB0aGUgbW91c2UgcG9pbnRlciB0byB0aGUgY2VudGVyIG9mIGFuIGVsZW1lbnQgdXNpbmcgKip0cnVzdGVkKipcbiAgICogRWxlY3Ryb24gcG9pbnRlciBpbnB1dCwgdGhlbiBwb2xscyB1bnRpbCB0aGUgZWxlbWVudCBhY3R1YWxseSBtYXRjaGVzXG4gICAqIGA6aG92ZXJgLlxuICAgKlxuICAgKiBCZWNhdXNlIHRoZSBtb3ZlIGlzIHRydXN0ZWQgKHNlZSB7QGxpbmsgTGliLm1vdmVNb3VzZX0pLCB0aGUgcmVhbCBgOmhvdmVyYFxuICAgKiBzdGF0ZSB0YWtlcyBlZmZlY3QgaW4gdGhlIENTUyBlbmdpbmUgXHUyMDE0IHJlYWwgdGhlbWUgYHZhcigpYCB2YWx1ZXMgYW5kIHJlYWxcbiAgICogY29tcG9zaXRpbmcgXHUyMDE0IGluc3RlYWQgb2YgYSBoYW5kLXNpbXVsYXRlZCBjYXNjYWRlLiBJdCBwb2xscyB0aGUgbGl2ZVxuICAgKiBgZWxlbWVudC5tYXRjaGVzKCc6aG92ZXInKWAgc3RhdGUgKG5vdCBhIGZpeGVkIGRlbGF5KSwgc28gaXQgaXMgcm9idXN0IHVuZGVyXG4gICAqIHNoYXJlZC1pbnN0YW5jZSBsb2FkLiBJdCB0YXJnZXRzIHRoZSBzaW5nbGUgc2hhcmVkIHdpbmRvdydzICoqZ2xvYmFsKipcbiAgICogcG9pbnRlciwgc28gb25seSBvbmUgZWxlbWVudCBpcyBob3ZlcmVkIGF0IGEgdGltZS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBlbGVtZW50IHRvIGhvdmVyLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIGVsZW1lbnQgbWF0Y2hlcyBgOmhvdmVyYC5cbiAgICovXG4gIGhvdmVyRWxlbWVudCh0aGlzOiB2b2lkLCBwYXJhbXM6IEhvdmVyRWxlbWVudFBhcmFtcyk6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIE1vdmVzIHRoZSBtb3VzZSBwb2ludGVyIHRvIHRoZSBnaXZlbiB3ZWItY29udGVudHMgY29vcmRpbmF0ZXMgdXNpbmcgYVxuICAgKiAqKnRydXN0ZWQqKiBFbGVjdHJvbiBwb2ludGVyIG1vdmUuXG4gICAqXG4gICAqIEEgdHJ1c3RlZCBtb3ZlIChpbmplY3RlZCB2aWEgRWxlY3Ryb24ncyBgd2ViQ29udGVudHMuc2VuZElucHV0RXZlbnRgKVxuICAgKiB1cGRhdGVzIHRoZSByZWFsIHBvaW50ZXIgc3RhdGUgaW4gdGhlIENTUyBlbmdpbmUsIHNvIGA6aG92ZXJgIHJ1bGVzXG4gICAqIGdlbnVpbmVseSBhcHBseSBcdTIwMTQgdW5saWtlIGBkaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KCdtb3VzZW92ZXInKSlgLFxuICAgKiB3aGljaCBpcyB1bnRydXN0ZWQgYW5kIG5ldmVyIHNldHMgYDpob3ZlcmAuIEl0IHRhcmdldHMgdGhlIHNpbmdsZSBzaGFyZWRcbiAgICogd2luZG93J3MgKipnbG9iYWwqKiBwb2ludGVyLCBzbyBvbmx5IG9uZSBlbGVtZW50IGlzIGhvdmVyZWQgYXQgYSB0aW1lLlxuICAgKlxuICAgKiBUaGlzIGlzIHRoZSBsb3ctbGV2ZWwgcHJpbWl0aXZlOiBpdCBwZXJmb3JtcyBhIHNpbmdsZSBtb3ZlIGFuZCBkb2VzICoqbm90KipcbiAgICogd2FpdCBmb3IgYW55IHN0YXRlIHRvIHNldHRsZSAoY2FsbGVycyBwb2xsIHRoZWlyIG93biByZWFkaW5lc3Mgc2lnbmFsKS5cbiAgICogUHJlZmVyIHtAbGluayBMaWIuaG92ZXJFbGVtZW50fSAvIHtAbGluayBMaWIudW5ob3ZlckVsZW1lbnR9IGZvclxuICAgKiBlbGVtZW50LXJlbGF0aXZlIG1vdmVzOyB1c2UgYG1vdmVNb3VzZWAgZGlyZWN0bHkgd2hlbiBhbiBlbGVtZW50LXJlbGF0aXZlXG4gICAqIHRhcmdldCBkb2VzIG5vdCBmaXQgKGUuZy4gYW4gZWxlbWVudCBzcGFubmluZyB0aGUgZnVsbCB2aWV3cG9ydCB3aWR0aCkuXG4gICAqXG4gICAqIFN5bmNocm9ub3VzOiBpbmplY3RpbmcgdGhlIHRydXN0ZWQgbW92ZSBkb2VzIG5vIHJlYWwgYXdhaXRpbmcsIHNvIHRoZSBjYWxsZXJcbiAgICogZG9lcyBub3QgbmVlZCB0byBgYXdhaXRgIGl0LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHdlYi1jb250ZW50cyBESVAgY29vcmRpbmF0ZXMgdG8gbW92ZSB0by5cbiAgICovXG4gIG1vdmVNb3VzZSh0aGlzOiB2b2lkLCBwYXJhbXM6IE1vdmVNb3VzZVBhcmFtcyk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIE9wZW5zIE9ic2lkaWFuJ3Mgc2V0dGluZ3MgbW9kYWwgb24gYSBnaXZlbiB0YWIsIGFuZCBkb2VzIG5vdCByZXR1cm4gdW50aWxcbiAgICogdGhhdCB0YWIgaGFzIGFjdHVhbGx5IHJlbmRlcmVkLlxuICAgKlxuICAgKiAqKlRoaXMgZXhpc3RzIGJlY2F1c2UgYGFwcC5zZXR0aW5nLm9wZW4oKWAgb24gaXRzIG93biBkb2VzIG5vdCB3b3JrIGZyb20gYVxuICAgKiB0ZXN0LioqIGBhcHAuc2V0dGluZy5jb250YWluZXJFbGAgaXMgYnVpbHQgYXQgc3RhcnR1cCBidXQgaXMgbmV2ZXIgaW4gdGhlXG4gICAqIGRvY3VtZW50LCBhbmQgYG9wZW4oKWAgZG9lcyBub3QgYXR0YWNoIGl0IFx1MjAxNCBzbyB0aGUgbW9kYWwgYnVpbGRzIGludG8gYVxuICAgKiBkZXRhY2hlZCB0cmVlLCBgb3BlbigpYCByZXR1cm5zIHdpdGhvdXQgdGhyb3dpbmcsIGFuZCBhIHNjcmVlbnNob3QgdGFrZW5cbiAgICogYWZ0ZXJ3YXJkcyBzaG93cyB0aGUgdW50b3VjaGVkIGRvY3VtZW50LiBUaGF0IGlzIHdoYXQgbWFkZSB0aGUgc2V0dGluZ3MgdGFiXG4gICAqIGxvb2sgaW1wb3NzaWJsZSB0byBjYXB0dXJlLCBhbmQgZ290IHJlY29yZGVkIGFzIHN1Y2ggaW4gdHdvIHBsdWdpbnMuXG4gICAqXG4gICAqIFRoZSBmaXggaXMgb25lIHN0ZXAsIGFuZCBpdHMgKipvcmRlciBpcyBsb2FkLWJlYXJpbmcqKjogdGhlIGNvbnRhaW5lciBpc1xuICAgKiBhcHBlbmRlZCB0byBgZG9jdW1lbnQuYm9keWAgKipiZWZvcmUqKiBgb3BlbigpYC4gQXR0YWNoaW5nIGFmdGVyd2FyZHMgaXMgdG9vXG4gICAqIGxhdGUgXHUyMDE0IHdoYXRldmVyIHRoZSBtb2RhbCBkcmV3IG9uIG9wZW4gaGFzIGFscmVhZHkgZ29uZSBpbnRvIHRoZSBkZXRhY2hlZFxuICAgKiBjb250YWluZXIsIHNvIGl0IGVuZHMgdXAgb24gc2NyZWVuIHNob3dpbmcgdGhlIHdyb25nIHRoaW5nLiBUaGF0IGZhaWx1cmVcbiAgICogbG9va3MgbGlrZSBzdWNjZXNzIHVudGlsIHRoZSBjYXB0dXJlZCBmcmFtZSBpcyBleGFtaW5lZCwgd2hpY2ggaXMgdGhlIHRyYXBcbiAgICogdGhpcyBoZWxwZXIgZXhpc3RzIHRvIHJlbW92ZS5cbiAgICpcbiAgICogUmUtYXR0YWNoaW5nIGlzIGlkZW1wb3RlbnQsIHNvIGEgdGFiIGNsb3NlZCB3aXRoIGBhcHAuc2V0dGluZy5jbG9zZSgpYCBjYW5cbiAgICogc2ltcGx5IGJlIHJlLW9wZW5lZC5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSB0YWIgdG8gb3BlbiBhbmQgaG93IGxvbmcgdG8gd2FpdCBmb3IgaXQgdG8gcmVuZGVyLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSByZXNvbHZpbmcgdG8gdGhlIG5hbWVzIG9mIHRoZSBzZXR0aW5nIHJvd3MgdGhlXG4gICAqICAgdGFiIHJlbmRlcmVkIFx1MjAxNCBib3RoIHRoZSBwcm9vZiBpdCByZW5kZXJlZCBhbmQgd2hhdCBhIGNhbGxlciBhc3NlcnRzIG9uLiBBXG4gICAqICAgdGFiIHRoYXQgbGVnaXRpbWF0ZWx5IHJlbmRlcnMgbm8gYC5zZXR0aW5nLWl0ZW0tbmFtZWAgcm93cyAoSG90a2V5cywgc2F5KVxuICAgKiAgIHJlc29sdmVzIHRvIGFuIGVtcHR5IGFycmF5LlxuICAgKiBAdGhyb3dzIEVycm9yIGlmIG5vIHRhYiBjYXJyaWVzIHtAbGluayBPcGVuU2V0dGluZ3NUYWJQYXJhbXMudGFiSWR9LCBvciBpZlxuICAgKiAgIHRoZSB0YWIgZG9lcyBub3QgcmVuZGVyIHdpdGhpbiB0aGUgdGltZW91dC5cbiAgICovXG4gIG9wZW5TZXR0aW5nc1RhYih0aGlzOiB2b2lkLCBwYXJhbXM6IE9wZW5TZXR0aW5nc1RhYlBhcmFtcyk6IFByb21pc2U8c3RyaW5nW10+O1xuXG4gIC8qKlxuICAgKiBQcmVzc2VzIGEgc2luZ2xlIGtleSAob3B0aW9uYWxseSB3aXRoIG1vZGlmaWVycykgdXNpbmcgKip0cnVzdGVkKiogRWxlY3Ryb25cbiAgICoga2V5Ym9hcmQgaW5wdXQsIGZpcmluZyB0aGUgZnVsbCByZWFsIGtleSBwaXBlbGluZSBcdTIwMTRcbiAgICogYGtleWRvd25gIFx1MjE5MiBga2V5cHJlc3NgIFx1MjE5MiBgYmVmb3JlaW5wdXRgIFx1MjE5MiBgaW5wdXRgIFx1MjE5MiBga2V5dXBgLlxuICAgKlxuICAgKiBUaGlzIGlzIHRoZSBrZXktcHJlc3MgYW5hbG9nIG9mIHtAbGluayBMaWIudHlwZUludG9FZGl0b3J9OiBpdCBpbmplY3RzIGFcbiAgICogdHJ1c3RlZCBga2V5RG93bmAgXHUyMTkyIGBjaGFyYCBcdTIxOTIgYGtleVVwYCBzZXF1ZW5jZSB2aWEgRWxlY3Ryb24nc1xuICAgKiBgd2ViQ29udGVudHMuc2VuZElucHV0RXZlbnRgLCBzbyBpdCBpcyBkZWxpdmVyZWQgdG8gdGhlIHdpbmRvdydzIERPTS1mb2N1c2VkXG4gICAqIGVsZW1lbnQgYW5kIGZsb3dzIHRocm91Z2ggdGhlIHJlYWwgaW5wdXQgcGlwZWxpbmUgXHUyMDE0IHVubGlrZVxuICAgKiBgZGlzcGF0Y2hFdmVudChuZXcgS2V5Ym9hcmRFdmVudCguLi4pKWAsIHdoaWNoIGlzIHVudHJ1c3RlZCAoYGlzVHJ1c3RlZDpcbiAgICogZmFsc2VgKSBhbmQgaWdub3JlZCBieSBDb2RlTWlycm9yIGFuZCBtb3N0IGtleSBoYW5kbGVycy4gVXNlIGl0IGZvciBzcGVjaWFsXG4gICAqIGtleXMgKGAnRW50ZXInYCwgYCdFc2NhcGUnYCwgYCdUYWInYCwgYXJyb3cga2V5cykgYW5kIG1vZGlmaWVyIGNvbWJpbmF0aW9uc1xuICAgKiAoYFNoaWZ0K0VudGVyYCwgYEN0cmwrQWApIHRoYXQge0BsaW5rIExpYi50eXBlSW50b0VkaXRvcn0gKHdoaWNoIHR5cGVzXG4gICAqIHByaW50YWJsZSB0ZXh0KSBkb2VzIG5vdCBjb3Zlci5cbiAgICpcbiAgICogVGhpcyBpcyB0aGUgbG93LWxldmVsIHByaW1pdGl2ZTogaXQgaW5qZWN0cyB0aGUga2V5IHByZXNzIGFuZCBkb2VzICoqbm90KipcbiAgICogcG9sbCBmb3IgYW55IGVmZmVjdCAoYSBrZXkgcHJlc3MgaGFzIG5vIHVuaXZlcnNhbCBvYnNlcnZhYmxlIG91dGNvbWUgXHUyMDE0XG4gICAqIGBFbnRlcmAgZWRpdHMgdGhlIGRvY3VtZW50LCBgRXNjYXBlYCBjbG9zZXMgYSBtb2RhbCwgYEFycm93RG93bmAgbW92ZXMgdGhlXG4gICAqIHNlbGVjdGlvbikuIFRoZSBjYWxsZXIgZm9jdXNlcyB0aGUgaW50ZW5kZWQgdGFyZ2V0IGZpcnN0LCB0aGVuIGF3YWl0cyB0aGVcbiAgICogZXhwZWN0ZWQgZWZmZWN0IHZpYSB7QGxpbmsgTGliLndhaXRVbnRpbH0uIEl0IHRhcmdldHMgdGhlIHNpbmdsZSBzaGFyZWRcbiAgICogd2luZG93J3MgKipnbG9iYWwqKiBmb2N1cywgc28gb25seSB0aGUgRE9NLWZvY3VzZWQgZWxlbWVudCByZWNlaXZlcyB0aGUga2V5LlxuICAgKlxuICAgKiBTeW5jaHJvbm91czogaW5qZWN0aW5nIHRoZSB0cnVzdGVkIGtleSBwcmVzcyBkb2VzIG5vIHJlYWwgYXdhaXRpbmcsIHNvIHRoZVxuICAgKiBjYWxsZXIgZG9lcyBub3QgbmVlZCB0byBgYXdhaXRgIGl0LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGtleSB0byBwcmVzcyBhbmQgYW55IG1vZGlmaWVycyB0byBob2xkLlxuICAgKi9cbiAgcHJlc3NLZXkodGhpczogdm9pZCwgcGFyYW1zOiBQcmVzc0tleVBhcmFtcyk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFR5cGVzIHRleHQgaW50byBhIENvZGVNaXJyb3Ige0BsaW5rIEVkaXRvcn0gdXNpbmcgKip0cnVzdGVkKiogRWxlY3Ryb25cbiAgICoga2V5Ym9hcmQgaW5wdXQuXG4gICAqXG4gICAqIFR5cGluZyBpcyBwcmVzc2luZyBlYWNoIGNoYXJhY3RlciBrZXkgaW4gdHVybjogdGhpcyBmb2N1c2VzIHRoZSBlZGl0b3JcbiAgICogKGNhcmV0IHRvIGVuZCkgYW5kIHByZXNzZXMgZXZlcnkgY29kZSBwb2ludCBvZiBgdGV4dGAgdmlhXG4gICAqIHtAbGluayBMaWIucHJlc3NLZXl9IFx1MjAxNCB0aGUgc2FtZSB0cnVzdGVkIGBrZXlEb3duYCBcdTIxOTIgYGNoYXJgIFx1MjE5MiBga2V5VXBgIGEgcmVhbFxuICAgKiB1c2VyIHByb2R1Y2VzLiBFYWNoIGtleXN0cm9rZSBpcyBkZWxpdmVyZWQgdG8gdGhlIHdpbmRvdydzIERPTS1mb2N1c2VkXG4gICAqIGVsZW1lbnQgYW5kIGZsb3dzIHRocm91Z2ggQ29kZU1pcnJvcidzIHJlYWwgaW5wdXQgcGlwZWxpbmUsIHNvIHRoZSB0eXBlZFxuICAgKiB0ZXh0IHJlYWNoZXMgdGhlIGRvY3VtZW50ICoqb25seSBpZiB0aGUgZWRpdG9yIGdlbnVpbmVseSBob2xkcyBmb2N1cyoqLlxuICAgKiBUaGlzIG1ha2VzIFwidGhlIHVzZXIgdHlwZWQgaW50byB0aGUgZWRpdG9yXCIgYSBmYWl0aGZ1bCBlbmQtdG8tZW5kIGNoZWNrLFxuICAgKiB1bmxpa2UgYGRpc3BhdGNoRXZlbnQobmV3IEtleWJvYXJkRXZlbnQoLi4uKSlgICh1bnRydXN0ZWQgXHUyMDE0IGlnbm9yZWQgYnlcbiAgICogQ29kZU1pcnJvcikgb3IgYGV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JylgIChtdXRhdGVzIHRoZSBzZWxlY3Rpb24gZXZlblxuICAgKiB3aGVuIHRoZSBlZGl0b3IgaXMgbm90IGZvY3VzZWQsIG1hc2tpbmcgZm9jdXMgYnVncyBhcyBmYWxzZSBwb3NpdGl2ZXMpLlxuICAgKlxuICAgKiBBZnRlciBpbmplY3RpbmcgdGhlIGtleXN0cm9rZXMgaXQgcG9sbHMgdW50aWwgdGhlIGRvY3VtZW50IHJlZmxlY3RzIHRoZVxuICAgKiBpbnB1dCwgb3IgYSBib3VuZGVkIHRpbWVvdXQgZWxhcHNlcyAodGhlIGV4cGVjdGVkIG91dGNvbWUgd2hlbiB0aGUgZWRpdG9yXG4gICAqIGlzIHJlYWQtb25seSBhbmQgcmVqZWN0cyB0aGUgaW5wdXQsIG9yIHdoZW4gZm9jdXMgd2FzIHN0b2xlbikuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZWRpdG9yIHRvIHR5cGUgaW50byBhbmQgdGhlIHRleHQgdG8gdHlwZS5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBrZXlzdHJva2VzIGhhdmUgc2V0dGxlZC5cbiAgICovXG4gIHR5cGVJbnRvRWRpdG9yKHRoaXM6IHZvaWQsIHBhcmFtczogVHlwZUludG9FZGl0b3JQYXJhbXMpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBNb3ZlcyB0aGUgbW91c2UgcG9pbnRlciB0byBhIHBvaW50IGp1c3Qgb3V0c2lkZSBhbiBlbGVtZW50J3MgYm91bmRpbmcgYm94XG4gICAqIHVzaW5nIGEgKip0cnVzdGVkKiogRWxlY3Ryb24gcG9pbnRlciBtb3ZlLCB0aGVuIHBvbGxzIHVudGlsIHRoZSBlbGVtZW50IG5vXG4gICAqIGxvbmdlciBtYXRjaGVzIGA6aG92ZXJgLlxuICAgKlxuICAgKiBUaGUgaW52ZXJzZSBvZiB7QGxpbmsgTGliLmhvdmVyRWxlbWVudH0uIEl0IHRhcmdldHMgdGhlIHNpbmdsZSBzaGFyZWRcbiAgICogd2luZG93J3MgKipnbG9iYWwqKiBwb2ludGVyLCBzbyBvbmx5IG9uZSBlbGVtZW50IGlzIGhvdmVyZWQgYXQgYSB0aW1lLiBXaGVuXG4gICAqIGFuIGVsZW1lbnQgc3BhbnMgdGhlIGZ1bGwgdmlld3BvcnQgKG5vIHBvaW50IG91dHNpZGUgaXRzIGJveCBpcyByZWFjaGFibGUpLFxuICAgKiB1c2Uge0BsaW5rIExpYi5tb3ZlTW91c2V9IGRpcmVjdGx5IHRvIG1vdmUgdGhlIHBvaW50ZXIgdG8gYSBrbm93biBlbXB0eVxuICAgKiBjb29yZGluYXRlIGluc3RlYWQuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZWxlbWVudCB0byBtb3ZlIHRoZSBwb2ludGVyIGF3YXkgZnJvbS5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBlbGVtZW50IG5vIGxvbmdlciBtYXRjaGVzXG4gICAqICAgYDpob3ZlcmAuXG4gICAqL1xuICB1bmhvdmVyRWxlbWVudCh0aGlzOiB2b2lkLCBwYXJhbXM6IFVuaG92ZXJFbGVtZW50UGFyYW1zKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogUG9sbHMgYSBwcmVkaWNhdGUgdW50aWwgaXQgYmVjb21lcyB0cnV0aHksIG9yIHJlamVjdHMgb25jZSBhIGJvdW5kZWRcbiAgICogdGltZW91dCBlbGFwc2VzLlxuICAgKlxuICAgKiBJbnRlZ3JhdGlvbi10ZXN0IGBldmFsSW5PYnNpZGlhbmAgY2FsbGJhY2tzIHJvdXRpbmVseSBuZWVkIHRvIHdhaXQgZm9yIGFuXG4gICAqIGFzeW5jaHJvbm91cyBlZmZlY3QgdG8gc2V0dGxlIChhIHZpZXcgdG8gb3BlbiwgYSBET00gbm9kZSB0byBhcHBlYXIsIGFcbiAgICogc2V0dGluZyB0byBhcHBseSkuIEJlY2F1c2UgdGhlIGNhbGxiYWNrIGlzIHNlcmlhbGl6ZWQgdmlhIGB0b1N0cmluZygpYCBhbmRcbiAgICogY2Fubm90IGltcG9ydCBtb2R1bGVzLCBpdCBjYW4ndCByZXVzZSBgb2JzaWRpYW4tZGV2LXV0aWxzYCdcbiAgICogYHJldHJ5V2l0aFRpbWVvdXRgIC8gYHJ1bldpdGhUaW1lb3V0YC4gVGhpcyBoZWxwZXIgaXMgdGhlIHNoYXJlZCwgaW5qZWN0ZWRcbiAgICogcmVwbGFjZW1lbnQgZm9yIHRoZSBwZXItY2xvc3VyZSBwb2xsIGxvb3BzIGNvbnN1bWVycyB3b3VsZCBvdGhlcndpc2VcbiAgICogaGFuZC1yb2xsLlxuICAgKlxuICAgKiBUaGUgYHByZWRpY2F0ZWAgbWF5IGJlIHN5bmNocm9ub3VzIG9yIGFzeW5jaHJvbm91cyBcdTIwMTQgaXQgaXMgYXdhaXRlZCBvbiBldmVyeVxuICAgKiBwb2xsLiBJdCBpcyBjaGVja2VkIGltbWVkaWF0ZWx5LCB0aGVuIHJlLWNoZWNrZWQgZXZlcnlcbiAgICogYGludGVydmFsSW5NaWxsaXNlY29uZHNgIHVudGlsIGl0IHJldHVybnMgdHJ1dGh5IG9yIGB0aW1lb3V0SW5NaWxsaXNlY29uZHNgXG4gICAqIGVsYXBzZXMsIGF0IHdoaWNoIHBvaW50IHRoZSByZXR1cm5lZCB7QGxpbmsgUHJvbWlzZX0gcmVqZWN0cyAodGhlIGVycm9yXG4gICAqIGluY2x1ZGVzIGBtZXNzYWdlYCB3aGVuIHByb3ZpZGVkKS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwcmVkaWNhdGUgdG8gcG9sbCBwbHVzIG9wdGlvbmFsIHRpbWVvdXQsIGludGVydmFsLCBhbmRcbiAgICogICB0aW1lb3V0IG1lc3NhZ2UuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgcHJlZGljYXRlIGlzIHRydXRoeS5cbiAgICovXG4gIHdhaXRVbnRpbCh0aGlzOiB2b2lkLCBwYXJhbXM6IFdhaXRVbnRpbFBhcmFtcyk6IFByb21pc2U8dm9pZD47XG59XG5cbi8qKlxuICogVGhlIG1vdXNlIGJ1dHRvbiBhIHRydXN0ZWQgY2xpY2sgcHJlc3NlcywgaW4gRWxlY3Ryb24ncyBgc2VuZElucHV0RXZlbnRgXG4gKiBzcGVsbGluZy5cbiAqL1xuZXhwb3J0IHR5cGUgTW91c2VCdXR0b24gPSAnbGVmdCcgfCAnbWlkZGxlJyB8ICdyaWdodCc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIENvbW1vbkFyZ3VtZW50cy5tb3ZlTW91c2V9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vdmVNb3VzZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgeCBjb29yZGluYXRlICh3ZWItY29udGVudHMgRElQKSB0byBtb3ZlIHRoZSBwb2ludGVyIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgeDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgeSBjb29yZGluYXRlICh3ZWItY29udGVudHMgRElQKSB0byBtb3ZlIHRoZSBwb2ludGVyIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgeTogbnVtYmVyO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBMaWIub3BlblNldHRpbmdzVGFifS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcGVuU2V0dGluZ3NUYWJQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBzZXR0aW5ncyB0YWIgdG8gb3BlbiBcdTIwMTQgYSBwbHVnaW4gaWQgZm9yIGEgcGx1Z2luJ3Mgb3duIHRhYiwgb3JcbiAgICogYSBjb3JlIHRhYiBpZCAoYCdlZGl0b3InYCwgYCdob3RrZXlzJ2AsIFx1MjAyNikuXG4gICAqXG4gICAqIFJlcXVpcmVkLCBiZWNhdXNlIG9wZW5pbmcgdGhlIG1vZGFsIHdpdGhvdXQgbmFtaW5nIGEgdGFiIHJlbmRlcnMgKipub3RoaW5nKipcbiAgICogb24gYSBoYXJuZXNzLW93bmVkIGluc3RhbmNlOiB0aGUgbW9kYWwgcmVzdG9yZXMgdGhlIGxhc3QgdGFiIHRoZSBwcm9maWxlXG4gICAqIHVzZWQsIGFuZCBhbiBpc29sYXRlZCBwcm9maWxlIGhhcyBuZXZlciBvcGVuZWQgb25lLCBzbyBgYWN0aXZlVGFiYCBzdGF5c1xuICAgKiBgbnVsbGAgYW5kIG5vIHJvdyBpcyBkcmF3bi4gQW4gdW5rbm93biBpZCBpcyByZWplY3RlZCBpbW1lZGlhdGVseSwgbGlzdGluZ1xuICAgKiB0aGUgaWRzIHRoYXQgZG8gZXhpc3QuXG4gICAqL1xuICByZWFkb25seSB0YWJJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSB0aW1lIHRvIHdhaXQgZm9yIHRoZSBtb2RhbCB0byBvcGVuIGFuZCBmb3IgdGhlIHJlcXVlc3RlZCB0YWIgdG9cbiAgICogcmVuZGVyIGl0cyBjb250ZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgNTAwMGBcbiAgICovXG4gIHJlYWRvbmx5IHRpbWVvdXRJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgQ29tbW9uQXJndW1lbnRzLnByZXNzS2V5fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcmVzc0tleVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUga2V5IHRvIHByZXNzLCBnaXZlbiBhcyBhbiBFbGVjdHJvbiBBY2NlbGVyYXRvciBrZXkgbmFtZSBcdTIwMTQgZS5nLlxuICAgKiBgJ0VudGVyJ2AsIGAnRXNjYXBlJ2AsIGAnVGFiJ2AsIGAnQmFja3NwYWNlJ2AsIGAnRGVsZXRlJ2AsIGFuIGFycm93IGtleVxuICAgKiAoYCdVcCdgIC8gYCdEb3duJ2AgLyBgJ0xlZnQnYCAvIGAnUmlnaHQnYCksIG9yIGEgcHJpbnRhYmxlIGNoYXJhY3RlclxuICAgKiAoYCdhJ2AsIGAnMSdgKS4gVGhlIHByb2R1Y2VkIGNoYXJhY3RlciAod2hlbiB0aGUga2V5IGluc2VydHMgdGV4dCkgaXMgdGhlXG4gICAqIGxpdGVyYWwgYGtleWAgdmFsdWU7IGNhc2UtY29ycmVjdCB0ZXh0IGJlbG9uZ3MgdG9cbiAgICoge0BsaW5rIENvbW1vbkFyZ3VtZW50cy50eXBlSW50b0VkaXRvcn0sIG5vdCBhIGtleS1wcmVzcyBwcmltaXRpdmUuXG4gICAqL1xuICByZWFkb25seSBrZXk6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG1vZGlmaWVyIGtleXMgdG8gaG9sZCB3aGlsZSB0aGUga2V5IGlzIHByZXNzZWQsIHVzaW5nIE9ic2lkaWFuJ3NcbiAgICoge0BsaW5rIE1vZGlmaWVyfSBuYW1lcyAodGhlIHNhbWUgdmFsdWVzIGFzIGFuIE9ic2lkaWFuIGBIb3RrZXlgKS4gYCdNb2QnYFxuICAgKiByZXNvbHZlcyBwZXItcGxhdGZvcm0gKENtZCBvbiBtYWNPUywgQ3RybCBlbHNld2hlcmUpOyBlYWNoIGlzIG1hcHBlZCB0b1xuICAgKiBFbGVjdHJvbidzIGxvd2VyY2FzZSBgc2VuZElucHV0RXZlbnRgIG1vZGlmaWVyIG5hbWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBbXWBcbiAgICovXG4gIHJlYWRvbmx5IG1vZGlmaWVycz86IHJlYWRvbmx5IE1vZGlmaWVyW107XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIENvbW1vbkFyZ3VtZW50cy50eXBlSW50b0VkaXRvcn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZUludG9FZGl0b3JQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGVkaXRvciB0byB0eXBlIGludG8uIEl0IGlzIGZvY3VzZWQgKHdpdGggdGhlIGNhcmV0IG1vdmVkIHRvIHRoZSBlbmQgb2ZcbiAgICogdGhlIGRvY3VtZW50KSBiZWZvcmUgdGhlIGtleXN0cm9rZXMgYXJlIGluamVjdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZWRpdG9yOiBFZGl0b3I7XG5cbiAgLyoqXG4gICAqIFRoZSB0ZXh0IHRvIHR5cGUuIEVhY2ggY29kZSBwb2ludCBpcyBwcmVzc2VkIHZpYSB7QGxpbmsgQ29tbW9uQXJndW1lbnRzLnByZXNzS2V5fVxuICAgKiAoYSB0cnVzdGVkIGBrZXlEb3duYCBcdTIxOTIgYGNoYXJgIFx1MjE5MiBga2V5VXBgKSwgZXhhY3RseSBhcyBhIHJlYWwgdXNlciB0eXBpbmcuXG4gICAqL1xuICByZWFkb25seSB0ZXh0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIENvbW1vbkFyZ3VtZW50cy51bmhvdmVyRWxlbWVudH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVW5ob3ZlckVsZW1lbnRQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGVsZW1lbnQgdG8gbW92ZSB0aGUgcG9pbnRlciBhd2F5IGZyb20uIFRoZSBwb2ludGVyIGlzIG1vdmVkIHRvIGEgcG9pbnRcbiAgICoganVzdCBvdXRzaWRlIGl0cyBib3VuZGluZyBib3guIFRoaXMgaXMgYSBsaXZlIHJlbmRlcmVyIERPTSBub2RlIFx1MjAxNCB0aGVcbiAgICogY2FsbGJhY2sgcnVucyBpbi1yZW5kZXJlciwgc28gbm8gY3Jvc3MtcHJvY2VzcyBzZXJpYWxpemF0aW9uIGlzIG5lZWRlZFxuICAgKiAoc2FtZSBhcyB7QGxpbmsgVHlwZUludG9FZGl0b3JQYXJhbXMuZWRpdG9yfSkuXG4gICAqL1xuICByZWFkb25seSBlbGVtZW50OiBIVE1MRWxlbWVudDtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgQ29tbW9uQXJndW1lbnRzLndhaXRVbnRpbH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2FpdFVudGlsUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBwb2xsaW5nIGludGVydmFsIGJldHdlZW4gcHJlZGljYXRlIGNoZWNrcy5cbiAgICpcbiAgICogQGRlZmF1bHQgYDUwYFxuICAgKi9cbiAgcmVhZG9ubHkgaW50ZXJ2YWxJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogQW4gb3B0aW9uYWwgZGV0YWlsIGFwcGVuZGVkIHRvIHRoZSB0aW1lb3V0IGVycm9yIG1lc3NhZ2UsIGRlc2NyaWJpbmcgd2hhdFxuICAgKiB3YXMgYmVpbmcgd2FpdGVkIGZvci5cbiAgICovXG4gIHJlYWRvbmx5IG1lc3NhZ2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjb25kaXRpb24gdG8gd2FpdCBmb3IuIFBvbGxlZCBpbW1lZGlhdGVseSwgdGhlbiBvbiBldmVyeSBpbnRlcnZhbCB1bnRpbFxuICAgKiBpdCByZXR1cm5zIGEgdHJ1dGh5IHZhbHVlLiBNYXkgYmUgc3luY2hyb25vdXMgb3IgYXN5bmNocm9ub3VzIFx1MjAxNCBpdCBpc1xuICAgKiBhd2FpdGVkIG9uIGVhY2ggcG9sbC5cbiAgICpcbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgYXdhaXRlZCBjb25kaXRpb24gaGFzIGJlZW4gbWV0LlxuICAgKi9cbiAgcHJlZGljYXRlKHRoaXM6IHZvaWQpOiBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuPjtcblxuICAvKipcbiAgICogVGhlIG1heGltdW0gdGltZSB0byB3YWl0IGJlZm9yZSByZWplY3RpbmcuXG4gICAqXG4gICAqIEBkZWZhdWx0IGA1MDAwYFxuICAgKi9cbiAgcmVhZG9ubHkgdGltZW91dEluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEV2YWx1YXRlcyBhIGZ1bmN0aW9uIGluc2lkZSB0aGUgcnVubmluZyBPYnNpZGlhbiBpbnN0YW5jZVxuICogdmlhIHRoZSBhY3RpdmUgdHJhbnNwb3J0IGFuZCByZXR1cm5zIHRoZSBwYXJzZWQgcmVzdWx0LlxuICpcbiAqIFRoZSBmdW5jdGlvbiByZWNlaXZlcyBhbiBpbnB1dCBvYmplY3QgdGhhdCBpbmNsdWRlcyBgYXBwYCwgYG9ic2lkaWFuTW9kdWxlYCxcbiAqIGBjb250ZXh0YCwgYW5kIGFueSBhZGRpdGlvbmFsIGBpbnB1dGAgcGFzc2VkIGJ5IHRoZSBjYWxsZXIuXG4gKiBJdCBpcyBzZXJpYWxpemVkIHZpYSBgdG9TdHJpbmcoKWAgYW5kIGludm9rZWQgYXMgYW4gSUlGRS5cbiAqIFRoZSBmdW5jdGlvbiBtdXN0IGJlIHNlbGYtY29udGFpbmVkIFx1MjAxNCBjbG9zdXJlcyBvdmVyIGxvY2FsIHZhcmlhYmxlcyB3aWxsIG5vdCB3b3JrLlxuICogUGFzcyBhbnkgbmVlZGVkIHZhbHVlcyBhcyBgaW5wdXRgIFx1MjAxNCB0aGV5IGFyZSBKU09OLXNlcmlhbGl6ZWQgYW5kIGRlc2VyaWFsaXplZCBvbiB0aGUgT2JzaWRpYW4gc2lkZS5cbiAqXG4gKiBUaGUgcmVzdWx0IGlzIGBKU09OLnN0cmluZ2lmeWAnZCBvbiB0aGUgT2JzaWRpYW4gc2lkZSBhbmQgcGFyc2VkIGJhY2suXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZnVuY3Rpb24gdG8gZXZhbHVhdGUuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSByZXR1cm4gdmFsdWUgb2YgYGNhbGxiYWNrYC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV2YWxJbk9ic2lkaWFuPElucHV0IGV4dGVuZHMgR2VuZXJpY09iamVjdCwgUmVzdWx0LCBUQ29udGV4dElkIGV4dGVuZHMgQ29udGV4dElkPHVua25vd24+IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkPihcbiAgcGFyYW1zOiBFdmFsSW5PYnNpZGlhblBhcmFtczxJbnB1dCwgUmVzdWx0LCBUQ29udGV4dElkPlxuKTogUHJvbWlzZTxSZXN1bHQ+IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZCAtLSBgY2FsbGJhY2tgIGNhbiBiZSB1bmJvdW5kLlxuICBjb25zdCB7IGNhbGxiYWNrLCBjb250ZXh0SWQsIGlucHV0ID0ge30sIHNob3VsZFNraXBQcmVmbGlnaHRDaGVja3MgPSBmYWxzZSwgdHJhbnNwb3J0OiB0cmFuc3BvcnRPdmVycmlkZSwgdmF1bHRQYXRoIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGN3ZCA9IHZhdWx0UGF0aCA/PyBnZXRWYXVsdFBhdGgoKSA/PyBwcm9jZXNzLmN3ZCgpO1xuXG4gIC8vIENoZWNrOiBWYXVsdCBwYXRoIGV4aXN0cyBvbiBkaXNrLlxuICBpZiAodmF1bHRQYXRoICE9PSB1bmRlZmluZWQgJiYgIWV4aXN0c1N5bmModmF1bHRQYXRoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVmF1bHQgcGF0aCBkb2VzIG5vdCBleGlzdDogJHt2YXVsdFBhdGh9YCk7XG4gIH1cblxuICBjb25zdCB0cmFuc3BvcnQgPSB0cmFuc3BvcnRPdmVycmlkZSA/PyBhd2FpdCBnZXRPckNyZWF0ZVRyYW5zcG9ydChnZXRUcmFuc3BvcnRPcHRpb25zKCkpO1xuXG4gIGlmICghc2hvdWxkU2tpcFByZWZsaWdodENoZWNrcykge1xuICAgIGF3YWl0IHRyYW5zcG9ydC5wcmVmbGlnaHRDaGVjayhjd2QpO1xuICB9XG5cbiAgYXdhaXQgZW5zdXJlTmFtZXNwYWNlQm9vdHN0cmFwcGVkKHRyYW5zcG9ydCwgY3dkKTtcblxuICBjb25zdCBuYW1lc3BhY2VDYWxsUGFyYW1zOiBHZW5lcmF0ZU5hbWVzcGFjZUNhbGxQYXJhbXMgPSB7XG4gICAgY2FsbGJhY2ssXG4gICAgaW5wdXQsXG4gICAgLi4uKGNvbnRleHRJZCAhPT0gdW5kZWZpbmVkICYmIHsgY29udGV4dElkOiBTdHJpbmcoY29udGV4dElkKSB9KVxuICB9O1xuXG4gIGNvbnN0IGV4cHJlc3Npb24gPSBnZW5lcmF0ZU5hbWVzcGFjZUNhbGwobmFtZXNwYWNlQ2FsbFBhcmFtcyk7XG5cbiAgY29uc3QgcmVzdWx0U3RyaW5nID0gYXdhaXQgdHJhbnNwb3J0LmV2YWx1YXRlKGV4cHJlc3Npb24sIHsgY3dkIH0pO1xuXG4gIGlmIChyZXN1bHRTdHJpbmcgPT09ICcnIHx8IHJlc3VsdFN0cmluZyA9PT0gTk9fT1VUUFVUKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZCBhcyBSZXN1bHQ7XG4gIH1cblxuICBsZXQgZW52ZWxvcGU6IEV2YWxSZXN1bHRFbnZlbG9wZTtcbiAgdHJ5IHtcbiAgICBlbnZlbG9wZSA9IEpTT04ucGFyc2UocmVzdWx0U3RyaW5nKSBhcyBFdmFsUmVzdWx0RW52ZWxvcGU7XG4gIH0gY2F0Y2gge1xuICAgIHRocm93IG5ldyBFcnJvcihgZXZhbEluT2JzaWRpYW46IE9ic2lkaWFuIHJldHVybmVkIG5vbi1KU09OIG91dHB1dDogJHtyZXN1bHRTdHJpbmd9YCk7XG4gIH1cblxuICBpZiAoJ3R5cGUnIGluIGVudmVsb3BlKSB7XG4gICAgaWYgKGVudmVsb3BlLnR5cGUgPT09ICdlcnJvcicpIHtcbiAgICAgIC8vIFJld3JpdGUgYmFyZS1vcmlnaW4gbG9jYWxob3N0IHN0YWNrIGZyYW1lcyBsaWtlIFwiKGh0dHA6Ly9sb2NhbGhvc3QvOjkxNTozMilcIlxuICAgICAgLy8gU28gVml0ZXN0J3Mgc291cmNlLW1hcCByZXNvbHZlciB3b24ndCBleHRyYWN0IFwiL1wiIGFzIHRoZSBmaWxlIHBhdGggYW5kIGNyYXNoXG4gICAgICAvLyBXaXRoIEVJU0RJUiB3aGVuIGl0IHRyaWVzIHRvIHJlYWRGaWxlU3luYyBvbiB0aGUgcm9vdCBkaXJlY3RvcnkuXG4gICAgICBjb25zdCBzYW5pdGl6ZWREZXRhaWwgPSBlbnZlbG9wZS52YWx1ZVxuICAgICAgICAucmVwbGFjZUFsbCgvXFwoaHR0cHM/OlxcL1xcL2xvY2FsaG9zdFxcLzooPzxsaW5lPlxcZCkvZywgJyhvYnNpZGlhbi13ZWJ2aWV3OiQ8bGluZT4nKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgZXZhbEluT2JzaWRpYW46IEVycm9yIGluc2lkZSBPYnNpZGlhbjpcXG4ke3Nhbml0aXplZERldGFpbH1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkIGFzIFJlc3VsdDtcbiAgfVxuXG4gIHJldHVybiBlbnZlbG9wZS52YWx1ZSBhcyBSZXN1bHQ7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiQUFnQkEsU0FBUyxrQkFBa0I7QUFDM0IsT0FBTyxhQUFhO0FBU3BCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyw2QkFBNkI7QUFDdEMsU0FBUyxtQ0FBbUM7QUFDNUMsU0FBUyw0QkFBNEI7QUEyQnJDLE1BQU0sWUFBWTtBQW1rQmxCLGVBQXNCLGVBQ3BCLFFBQ2lCO0FBRWpCLFFBQU0sRUFBRSxVQUFVLFdBQVcsUUFBUSxDQUFDLEdBQUcsNEJBQTRCLE9BQU8sV0FBVyxtQkFBbUIsVUFBVSxJQUFJO0FBQ3hILFFBQU0sTUFBTSxhQUFhLGFBQWEsS0FBSyxRQUFRLElBQUk7QUFHdkQsTUFBSSxjQUFjLFVBQWEsQ0FBQyxXQUFXLFNBQVMsR0FBRztBQUNyRCxVQUFNLElBQUksTUFBTSw4QkFBOEIsU0FBUyxFQUFFO0FBQUEsRUFDM0Q7QUFFQSxRQUFNLFlBQVkscUJBQXFCLE1BQU0scUJBQXFCLG9CQUFvQixDQUFDO0FBRXZGLE1BQUksQ0FBQywyQkFBMkI7QUFDOUIsVUFBTSxVQUFVLGVBQWUsR0FBRztBQUFBLEVBQ3BDO0FBRUEsUUFBTSw0QkFBNEIsV0FBVyxHQUFHO0FBRWhELFFBQU0sc0JBQW1EO0FBQUEsSUFDdkQ7QUFBQSxJQUNBO0FBQUEsSUFDQSxHQUFJLGNBQWMsVUFBYSxFQUFFLFdBQVcsT0FBTyxTQUFTLEVBQUU7QUFBQSxFQUNoRTtBQUVBLFFBQU0sYUFBYSxzQkFBc0IsbUJBQW1CO0FBRTVELFFBQU0sZUFBZSxNQUFNLFVBQVUsU0FBUyxZQUFZLEVBQUUsSUFBSSxDQUFDO0FBRWpFLE1BQUksaUJBQWlCLE1BQU0saUJBQWlCLFdBQVc7QUFDckQsV0FBTztBQUFBLEVBQ1Q7QUFFQSxNQUFJO0FBQ0osTUFBSTtBQUNGLGVBQVcsS0FBSyxNQUFNLFlBQVk7QUFBQSxFQUNwQyxRQUFRO0FBQ04sVUFBTSxJQUFJLE1BQU0sc0RBQXNELFlBQVksRUFBRTtBQUFBLEVBQ3RGO0FBRUEsTUFBSSxVQUFVLFVBQVU7QUFDdEIsUUFBSSxTQUFTLFNBQVMsU0FBUztBQUk3QixZQUFNLGtCQUFrQixTQUFTLE1BQzlCLFdBQVcseUNBQXlDLDJCQUEyQjtBQUNsRixZQUFNLElBQUksTUFBTTtBQUFBLEVBQTJDLGVBQWUsRUFBRTtBQUFBLElBQzlFO0FBRUEsV0FBTztBQUFBLEVBQ1Q7QUFFQSxTQUFPLFNBQVM7QUFDbEI7IiwKICAibmFtZXMiOiBbXQp9Cg==
|