obsidian-integration-testing 17.0.2 → 17.1.1
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/dist/lib/cjs/capture-obsidian-screenshot.cjs +16 -6
- package/dist/lib/cjs/capture-obsidian-screenshot.d.cts +20 -2
- package/dist/lib/cjs/field-text-hold.cjs +56 -0
- package/dist/lib/cjs/field-text-hold.d.cts +81 -0
- package/dist/lib/cjs/hide-caret.cjs +78 -0
- package/dist/lib/cjs/hide-caret.d.cts +81 -0
- package/dist/lib/cjs/index.cjs +4 -1
- package/dist/lib/cjs/index.d.cts +2 -0
- package/dist/lib/cjs/library.cjs +1 -1
- package/dist/lib/cjs/soft-keyboard.cjs +45 -4
- package/dist/lib/cjs/soft-keyboard.d.cts +8 -2
- package/dist/lib/esm/capture-obsidian-screenshot.d.mts +20 -2
- package/dist/lib/esm/capture-obsidian-screenshot.mjs +16 -6
- package/dist/lib/esm/field-text-hold.d.mts +81 -0
- package/dist/lib/esm/field-text-hold.mjs +32 -0
- package/dist/lib/esm/hide-caret.d.mts +81 -0
- package/dist/lib/esm/hide-caret.mjs +54 -0
- package/dist/lib/esm/index.d.mts +2 -0
- package/dist/lib/esm/index.mjs +3 -1
- package/dist/lib/esm/library.mjs +1 -1
- package/dist/lib/esm/soft-keyboard.d.mts +8 -2
- package/dist/lib/esm/soft-keyboard.mjs +45 -4
- package/package.json +1 -1
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { evalInObsidian } from "./eval-in-obsidian.mjs";
|
|
2
|
+
import { normalizeOptionalProperties } from "./normalize-optional-properties.mjs";
|
|
3
|
+
async function hideCaret(options) {
|
|
4
|
+
const { transport, vaultPath } = options ?? {};
|
|
5
|
+
const isHidden = await evalInObsidian(normalizeOptionalProperties({
|
|
6
|
+
callback() {
|
|
7
|
+
let activeEl = document.activeElement;
|
|
8
|
+
while (activeEl?.shadowRoot?.activeElement) {
|
|
9
|
+
activeEl = activeEl.shadowRoot.activeElement;
|
|
10
|
+
}
|
|
11
|
+
if (!activeEl?.instanceOf(HTMLElement) || activeEl === document.body) {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
const holder = globalThis;
|
|
15
|
+
const existing = holder.__obsidianIntegrationTestingHiddenCaret;
|
|
16
|
+
if (existing?.el !== activeEl) {
|
|
17
|
+
existing?.el.setCssStyles({ caretColor: existing.previousCaretColor });
|
|
18
|
+
holder.__obsidianIntegrationTestingHiddenCaret = {
|
|
19
|
+
el: activeEl,
|
|
20
|
+
previousCaretColor: activeEl.style.caretColor
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
activeEl.setCssStyles({ caretColor: "transparent" });
|
|
24
|
+
return true;
|
|
25
|
+
},
|
|
26
|
+
transport,
|
|
27
|
+
vaultPath
|
|
28
|
+
}));
|
|
29
|
+
return {
|
|
30
|
+
isHidden,
|
|
31
|
+
async restore() {
|
|
32
|
+
if (!isHidden) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
await evalInObsidian(normalizeOptionalProperties({
|
|
36
|
+
callback() {
|
|
37
|
+
const holder = globalThis;
|
|
38
|
+
const record = holder.__obsidianIntegrationTestingHiddenCaret;
|
|
39
|
+
if (!record) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
record.el.setCssStyles({ caretColor: record.previousCaretColor });
|
|
43
|
+
holder.__obsidianIntegrationTestingHiddenCaret = void 0;
|
|
44
|
+
},
|
|
45
|
+
transport,
|
|
46
|
+
vaultPath
|
|
47
|
+
}));
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
export {
|
|
52
|
+
hideCaret
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2hpZGUtY2FyZXQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBIaWRlcyB0aGUgdGV4dCBjYXJldCBvZiB0aGUgZm9jdXNlZCBlbGVtZW50IGZvciB0aGUgbGVuZ3RoIG9mIGEgY2FwdHVyZSwgc29cbiAqIGEgZnJhbWUgZG9lcyBub3QgZGVwZW5kIG9uIHdoaWNoIHBoYXNlIG9mIGl0cyBibGluayB0aGUgY2FwdHVyZSBsYW5kZWQgaW4uXG4gKlxuICogQSBmb2N1c2VkIGA8aW5wdXQ+YCBvciBhIGZvY3VzZWQgZWRpdG9yIGJsaW5rcyBpdHMgY2FyZXQgYWJvdXQgdHdpY2UgYSBzZWNvbmQsXG4gKiBhbmQgYSBjYXB0dXJlIHBob3RvZ3JhcGhzIHdoaWNoZXZlciBwaGFzZSBpdCBoYXBwZW5zIHRvIGNhdGNoLiBUd28gY2FwdHVyZXNcbiAqIG9mIGFuIHVuY2hhbmdlZCB3aW5kb3cgdGhlcmVmb3JlIGFsdGVybmF0ZSBiZXR3ZWVuIHR3byBieXRlIHN0cmVhbXM6IG1lYXN1cmVkXG4gKiBhZ2FpbnN0IE9ic2lkaWFuIDEuMTQgYXQgdGhlIDEyMDB4ODAwIHN0b3JlIHNpemUsIGVpZ2h0IGNhcHR1cmVzIDE3MCBtcyBhcGFydFxuICogZ2F2ZSAyIGRpc3RpbmN0IFBOR3MgZm9yIGEgZm9jdXNlZCBtb2RhbCBpbnB1dCBhbmQgMiBmb3IgYSBmb2N1c2VkIE1hcmtkb3duXG4gKiBlZGl0b3IsIGFuZCBleGFjdGx5IDEgZWFjaCBvbmNlIHRoZSBjYXJldCB3YXMgdHJhbnNwYXJlbnQuXG4gKlxuICogKipgY2FyZXQtY29sb3I6IHRyYW5zcGFyZW50YCwgbm90IGBibHVyKClgKiosIGFuZCB0aGUgZGlmZmVyZW5jZSBpcyBub3RcbiAqIGNvc21ldGljLiBCbHVycmluZyBkb2VzIG1ha2UgdGhlIGJ5dGVzIHN0YWJsZSB0b28sIGJ1dCBpdCBpcyBhIHN0YXRlIGNoYW5nZVxuICogdGhlIGFwcCBvYnNlcnZlczogaW4gdGhlIHNhbWUgcnVuIGFuIG9wZW4gYEFic3RyYWN0SW5wdXRTdWdnZXN0YCBwb3BvdmVyIGNsb3NlZFxuICogdGhlIG1vbWVudCBpdHMgaW5wdXQgbG9zdCBmb2N1cywgc28gYSBibHVyIHdvdWxkIHBob3RvZ3JhcGggYSBkaWZmZXJlbnQgZnJhbWVcbiAqIGZyb20gdGhlIG9uZSB0aGUgdGVzdCBidWlsdC4gSXQgYWxzbyBkcm9wcyB0aGUgZm9jdXMgcmluZywgd2hpY2ggZG9lcyBub3RcbiAqIGJsaW5rIGFuZCBpcyBvZnRlbiBwYXJ0IG9mIHdoYXQgdGhlIGZyYW1lIGlzIHNob3dpbmcuIE9ic2lkaWFuIGRyYXdzIGl0c1xuICogZWRpdG9yIGNhcmV0IG5hdGl2ZWx5ICh0aGUgQ29kZU1pcnJvciBjdXJzb3IgbGF5ZXIgaXMgZW1wdHkpLCBzbyBvbmVcbiAqIGBjYXJldC1jb2xvcmAgY292ZXJzIGlucHV0cyBhbmQgdGhlIGVkaXRvciBhbGlrZS5cbiAqXG4gKiAqKlJlc3RvcmVkIGFmdGVyd2FyZHMqKiwgdW5saWtlIHRoZSB2YXVsdCBuYW1lIGBoaWRlVmF1bHROYW1lYCBoaWRlczogdGhlXG4gKiBmb2N1c2VkIGZpZWxkIGlzIGxpdmUgc3RhdGUgYSB0ZXN0IGdvZXMgb24gdHlwaW5nIGludG8sIGFuZCBhIGNhcmV0IHRoYXRcbiAqIHNpbGVudGx5IHN0YXllZCBpbnZpc2libGUgd291bGQgYmUgYSBzdXJwcmlzZSB3aXRoIG5vIGVycm9yIGF0dGFjaGVkLlxuICpcbiAqIGBjYXB0dXJlT2JzaWRpYW5TY3JlZW5zaG90YCBjYWxscyB0aGlzIGJ5IGRlZmF1bHQuIEl0IGlzIGV4cG9ydGVkIGZvciB0aGVcbiAqIGNhcHR1cmVzIHRoYXQgY2Fubm90OiBgY2FwdHVyZURldmljZVNjcmVlbnNob3RgIHJlYWRzIHRoZSBkZXZpY2UgZnJhbWVidWZmZXJcbiAqIG92ZXIgYGFkYmAgYW5kIGhhcyBubyBwYWdlIGNoYW5uZWwsIGFuZCBpdHMgdHlwaWNhbCBmcmFtZSBcdTIwMTQgYSBmaWVsZCB3aXRoIHRoZVxuICogc29mdCBrZXlib2FyZCB1bmRlciBpdCBcdTIwMTQgaXMgZXhhY3RseSB0aGUgZnJhbWUgd2hlcmUgYmx1cnJpbmcgaXMgd3JvbmcsIHNpbmNlXG4gKiBibHVycmluZyB3b3VsZCB0YWtlIHRoZSBrZXlib2FyZCBkb3duIHdpdGggdGhlIGZvY3VzLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIGNvZGUgKGRyaXZlcyBhIGxpdmUgT2JzaWRpYW4pIGNvdmVyZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQgdHlwZSB7IEV2YWxJbk9ic2lkaWFuUGFyYW1zIH0gZnJvbSAnLi9ldmFsLWluLW9ic2lkaWFuLm1qcyc7XG5pbXBvcnQgdHlwZSB7IE9ic2lkaWFuVHJhbnNwb3J0IH0gZnJvbSAnLi90cmFuc3BvcnQubWpzJztcblxuaW1wb3J0IHsgZXZhbEluT2JzaWRpYW4gfSBmcm9tICcuL2V2YWwtaW4tb2JzaWRpYW4ubWpzJztcbmltcG9ydCB7IG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllcyB9IGZyb20gJy4vbm9ybWFsaXplLW9wdGlvbmFsLXByb3BlcnRpZXMubWpzJztcblxuLyoqXG4gKiBXaGF0IHtAbGluayBoaWRlQ2FyZXR9IHJldHVybnM6IHdoZXRoZXIgYSBjYXJldCB3YXMgaGlkZGVuLCBhbmQgaG93IHRvIHB1dCBpdFxuICogYmFjay5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIaWRkZW5DYXJldCB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIGFuIGVsZW1lbnQgaGVsZCBmb2N1cywgYW5kIHNvIGhhZCBhIGNhcmV0IHRvIGhpZGUuIGBmYWxzZWAgaXMgYVxuICAgKiBsZWdpdGltYXRlIGFuc3dlciBcdTIwMTQgYSBmcmFtZSB3aXRoIG5vdGhpbmcgZm9jdXNlZCBoYXMgbm8gY2FyZXQgXHUyMDE0IGFuZFxuICAgKiB7QGxpbmsgcmVzdG9yZX0gaXMgdGhlbiBhIG5vLW9wLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNIaWRkZW46IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFB1dHMgdGhlIGZvY3VzZWQgZWxlbWVudCdzIG93biBpbmxpbmUgYGNhcmV0LWNvbG9yYCBiYWNrLCBleGFjdGx5IGFzIGl0XG4gICAqIHdhcyBcdTIwMTQgcmVtb3ZlZCB3aGVuIGl0IGhhZCBub25lLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIGNhcmV0IGlzIHJlc3RvcmVkLlxuICAgKi9cbiAgcmVzdG9yZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgaGlkZUNhcmV0fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIaWRlQ2FyZXRPcHRpb25zIHtcbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoZSB0cmFuc3BvcnQuIFdoZW4gb21pdHRlZCwgdGhlIHRyYW5zcG9ydCB0aGUgY3VycmVudCB0ZXN0XG4gICAqIGNvbnRleHQgaXMgZHJpdmluZyBpcyB1c2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgdHJhbnNwb3J0PzogT2JzaWRpYW5UcmFuc3BvcnQ7XG5cbiAgLyoqXG4gICAqIFRoZSB2YXVsdCB3aG9zZSBPYnNpZGlhbiB3aW5kb3cgdG8gaGlkZSB0aGUgY2FyZXQgaW4uIFdoZW4gb21pdHRlZCwgdGhlXG4gICAqIGN1cnJlbnQgdGVzdCBjb250ZXh0J3MgdmF1bHQgaXMgdXNlZC5cbiAgICovXG4gIHJlYWRvbmx5IHZhdWx0UGF0aD86IHN0cmluZztcbn1cblxuLy8gQSBgd2luZG93YCBwcm9wZXJ0eSByYXRoZXIgdGhhbiBhIGNsb3N1cmUgdmFyaWFibGU6IHRoZSBoaWRlIGFuZCB0aGUgcmVzdG9yZVxuLy8gYXJlIHR3byBzZXBhcmF0ZSBldmFsdWF0aW9ucywgYW5kIHRoZSBlbGVtZW50IGlzIG5vdCBzZXJpYWxpemFibGUuIFRoZSBrZXkgaXNcbi8vIHNwZWxsZWQgb3V0IGluIHRoZSBob2xkZXIgcmF0aGVyIHRoYW4gc2hhcmVkIHRocm91Z2ggYSBjb25zdGFudCwgYmVjYXVzZSBhXG4vLyBjbG9zdXJlIGlzIHNlcmlhbGl6ZWQgYW5kIGNhbm5vdCByZWFjaCBtb2R1bGUgc2NvcGUuXG4vL1xuLy8gS2VwdCBsb2NhbCByYXRoZXIgdGhhbiBkZWNsYXJlZCBnbG9iYWxseSwgbGlrZSBldmVyeSBvdGhlciBob2xkZXIgb2YgYVxuLy8gaGFybmVzcyBgd2luZG93YCBwcm9wZXJ0eSwgc28gaXQgbmV2ZXIgbGVha3MgaW50byBjb25zdW1lciB0eXBlcy5cbmludGVyZmFjZSBIaWRkZW5DYXJldEhvbGRlciB7XG4gIF9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3RpbmdIaWRkZW5DYXJldD86IEhpZGRlbkNhcmV0UmVjb3JkIHwgdW5kZWZpbmVkO1xufVxuXG5pbnRlcmZhY2UgSGlkZGVuQ2FyZXRSZWNvcmQge1xuICByZWFkb25seSBlbDogSFRNTEVsZW1lbnQ7XG4gIHJlYWRvbmx5IHByZXZpb3VzQ2FyZXRDb2xvcjogc3RyaW5nO1xufVxuXG4vKipcbiAqIE1ha2VzIHRoZSBjYXJldCBvZiB0aGUgZm9jdXNlZCBlbGVtZW50IHRyYW5zcGFyZW50LCBsZWF2aW5nIHRoZSBmb2N1cyBpdHNlbGZcbiAqIGFsb25lLlxuICpcbiAqIFRoZSBlbGVtZW50IGlzIGZvdW5kIHRocm91Z2ggbmVzdGVkIHNoYWRvdyByb290cywgc2luY2VcbiAqIGBkb2N1bWVudC5hY3RpdmVFbGVtZW50YCBzdG9wcyBhdCBhIHNoYWRvdyBob3N0IGFuZCB0aGUgY2FyZXQgYmVsb25ncyB0byB0aGVcbiAqIGVsZW1lbnQgaW5zaWRlIGl0LiBSZS1hcHBseWluZyBiZWZvcmUgYSByZXN0b3JlIGtlZXBzIHRoZSBPUklHSU5BTCB2YWx1ZSwgc29cbiAqIHR3byBoaWRlcyBhbmQgb25lIHJlc3RvcmUgc3RpbGwgbGVhdmUgdGhlIGVsZW1lbnQgYXMgaXQgd2FzIGZvdW5kOyBhIGhpZGUgb25cbiAqIGEgZGlmZmVyZW50IGVsZW1lbnQgZmlyc3QgcmVzdG9yZXMgdGhlIG9uZSBhbiB1bnJlc3RvcmVkIGhpZGUgbGVmdCBiZWhpbmQuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUcmFuc3BvcnQgYW5kIHZhdWx0IG92ZXJyaWRlcy5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHtAbGluayBIaWRkZW5DYXJldH0uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoaWRlQ2FyZXQob3B0aW9ucz86IEhpZGVDYXJldE9wdGlvbnMpOiBQcm9taXNlPEhpZGRlbkNhcmV0PiB7XG4gIGNvbnN0IHsgdHJhbnNwb3J0LCB2YXVsdFBhdGggfSA9IG9wdGlvbnMgPz8ge307XG5cbiAgY29uc3QgaXNIaWRkZW4gPSBhd2FpdCBldmFsSW5PYnNpZGlhbihub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8RXZhbEluT2JzaWRpYW5QYXJhbXM8UmVjb3JkPHN0cmluZywgbmV2ZXI+LCBib29sZWFuPj4oe1xuICAgIGNhbGxiYWNrKCk6IGJvb2xlYW4ge1xuICAgICAgbGV0IGFjdGl2ZUVsID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICAgIHdoaWxlIChhY3RpdmVFbD8uc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudCkge1xuICAgICAgICBhY3RpdmVFbCA9IGFjdGl2ZUVsLnNoYWRvd1Jvb3QuYWN0aXZlRWxlbWVudDtcbiAgICAgIH1cblxuICAgICAgaWYgKCFhY3RpdmVFbD8uaW5zdGFuY2VPZihIVE1MRWxlbWVudCkgfHwgYWN0aXZlRWwgPT09IGRvY3VtZW50LmJvZHkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXggLS0gQXBwcm92ZWQgZG91YmxlIGNhc3Q6IHRoZSBoaWRkZW4tY2FyZXQgcmVjb3JkIGlzIG91ciBpbnRlcm5hbCBXaW5kb3cgYXVnbWVudGF0aW9uLCBpbnRlbnRpb25hbGx5IGtlcHQgbG9jYWwgKG5vdCBkZWNsYXJlZCBnbG9iYWxseSkgdG8gYXZvaWQgbGVha2luZyBpbnRvIGNvbnN1bWVyIHR5cGVzLlxuICAgICAgY29uc3QgaG9sZGVyID0gZ2xvYmFsVGhpcyBhcyB1bmtub3duIGFzIEhpZGRlbkNhcmV0SG9sZGVyO1xuICAgICAgY29uc3QgZXhpc3RpbmcgPSBob2xkZXIuX19vYnNpZGlhbkludGVncmF0aW9uVGVzdGluZ0hpZGRlbkNhcmV0O1xuICAgICAgaWYgKGV4aXN0aW5nPy5lbCAhPT0gYWN0aXZlRWwpIHtcbiAgICAgICAgLy8gQSBoaWRlIHRoYXQgd2FzIG5ldmVyIHJlc3RvcmVkLCBvbiBhbiBlbGVtZW50IHRoYXQgaGFzIHNpbmNlIGxvc3RcbiAgICAgICAgLy8gZm9jdXM6IHB1dCB0aGF0IG9uZSBiYWNrIHJhdGhlciB0aGFuIG9ycGhhbiBpdCBpbnZpc2libGUuXG4gICAgICAgIGV4aXN0aW5nPy5lbC5zZXRDc3NTdHlsZXMoeyBjYXJldENvbG9yOiBleGlzdGluZy5wcmV2aW91c0NhcmV0Q29sb3IgfSk7XG4gICAgICAgIGhvbGRlci5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nSGlkZGVuQ2FyZXQgPSB7XG4gICAgICAgICAgZWw6IGFjdGl2ZUVsLFxuICAgICAgICAgIHByZXZpb3VzQ2FyZXRDb2xvcjogYWN0aXZlRWwuc3R5bGUuY2FyZXRDb2xvclxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBhY3RpdmVFbC5zZXRDc3NTdHlsZXMoeyBjYXJldENvbG9yOiAndHJhbnNwYXJlbnQnIH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICB0cmFuc3BvcnQsXG4gICAgdmF1bHRQYXRoXG4gIH0pKTtcblxuICByZXR1cm4ge1xuICAgIGlzSGlkZGVuLFxuICAgIGFzeW5jIHJlc3RvcmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICBpZiAoIWlzSGlkZGVuKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgZXZhbEluT2JzaWRpYW4obm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPEV2YWxJbk9ic2lkaWFuUGFyYW1zPFJlY29yZDxzdHJpbmcsIG5ldmVyPiwgdm9pZD4+KHtcbiAgICAgICAgY2FsbGJhY2soKTogdm9pZCB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4IC0tIEFwcHJvdmVkIGRvdWJsZSBjYXN0OiB0aGUgaGlkZGVuLWNhcmV0IHJlY29yZCBpcyBvdXIgaW50ZXJuYWwgV2luZG93IGF1Z21lbnRhdGlvbiwgaW50ZW50aW9uYWxseSBrZXB0IGxvY2FsIChub3QgZGVjbGFyZWQgZ2xvYmFsbHkpIHRvIGF2b2lkIGxlYWtpbmcgaW50byBjb25zdW1lciB0eXBlcy5cbiAgICAgICAgICBjb25zdCBob2xkZXIgPSBnbG9iYWxUaGlzIGFzIHVua25vd24gYXMgSGlkZGVuQ2FyZXRIb2xkZXI7XG4gICAgICAgICAgY29uc3QgcmVjb3JkID0gaG9sZGVyLl9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3RpbmdIaWRkZW5DYXJldDtcbiAgICAgICAgICBpZiAoIXJlY29yZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlY29yZC5lbC5zZXRDc3NTdHlsZXMoeyBjYXJldENvbG9yOiByZWNvcmQucHJldmlvdXNDYXJldENvbG9yIH0pO1xuICAgICAgICAgIGhvbGRlci5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nSGlkZGVuQ2FyZXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIHRyYW5zcG9ydCxcbiAgICAgICAgdmF1bHRQYXRoXG4gICAgICB9KSk7XG4gICAgfVxuICB9O1xufVxuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuIl0sCiAgIm1hcHBpbmdzIjogIkFBc0NBLFNBQVMsc0JBQXNCO0FBQy9CLFNBQVMsbUNBQW1DO0FBcUU1QyxlQUFzQixVQUFVLFNBQWtEO0FBQ2hGLFFBQU0sRUFBRSxXQUFXLFVBQVUsSUFBSSxXQUFXLENBQUM7QUFFN0MsUUFBTSxXQUFXLE1BQU0sZUFBZSw0QkFBa0Y7QUFBQSxJQUN0SCxXQUFvQjtBQUNsQixVQUFJLFdBQVcsU0FBUztBQUN4QixhQUFPLFVBQVUsWUFBWSxlQUFlO0FBQzFDLG1CQUFXLFNBQVMsV0FBVztBQUFBLE1BQ2pDO0FBRUEsVUFBSSxDQUFDLFVBQVUsV0FBVyxXQUFXLEtBQUssYUFBYSxTQUFTLE1BQU07QUFDcEUsZUFBTztBQUFBLE1BQ1Q7QUFHQSxZQUFNLFNBQVM7QUFDZixZQUFNLFdBQVcsT0FBTztBQUN4QixVQUFJLFVBQVUsT0FBTyxVQUFVO0FBRzdCLGtCQUFVLEdBQUcsYUFBYSxFQUFFLFlBQVksU0FBUyxtQkFBbUIsQ0FBQztBQUNyRSxlQUFPLDBDQUEwQztBQUFBLFVBQy9DLElBQUk7QUFBQSxVQUNKLG9CQUFvQixTQUFTLE1BQU07QUFBQSxRQUNyQztBQUFBLE1BQ0Y7QUFFQSxlQUFTLGFBQWEsRUFBRSxZQUFZLGNBQWMsQ0FBQztBQUNuRCxhQUFPO0FBQUEsSUFDVDtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRixDQUFDLENBQUM7QUFFRixTQUFPO0FBQUEsSUFDTDtBQUFBLElBQ0EsTUFBTSxVQUF5QjtBQUM3QixVQUFJLENBQUMsVUFBVTtBQUNiO0FBQUEsTUFDRjtBQUVBLFlBQU0sZUFBZSw0QkFBK0U7QUFBQSxRQUNsRyxXQUFpQjtBQUVmLGdCQUFNLFNBQVM7QUFDZixnQkFBTSxTQUFTLE9BQU87QUFDdEIsY0FBSSxDQUFDLFFBQVE7QUFDWDtBQUFBLFVBQ0Y7QUFFQSxpQkFBTyxHQUFHLGFBQWEsRUFBRSxZQUFZLE9BQU8sbUJBQW1CLENBQUM7QUFDaEUsaUJBQU8sMENBQTBDO0FBQUEsUUFDbkQ7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0YsQ0FBQyxDQUFDO0FBQUEsSUFDSjtBQUFBLEVBQ0Y7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
|
package/dist/lib/esm/index.d.mts
CHANGED
|
@@ -50,6 +50,8 @@ export type { ClickElementParams, ClickMouseParams, CommonArguments, CreateNoteP
|
|
|
50
50
|
export { evalInObsidian } from './eval-in-obsidian.mjs';
|
|
51
51
|
export type { ComputeFitToCanvasParams, FitScreenshotToCanvasOptions, FitToCanvasGeometry } from './fit-screenshot.mjs';
|
|
52
52
|
export { computeFitToCanvas, fitScreenshotToCanvas } from './fit-screenshot.mjs';
|
|
53
|
+
export type { HiddenCaret, HideCaretOptions } from './hide-caret.mjs';
|
|
54
|
+
export { hideCaret } from './hide-caret.mjs';
|
|
53
55
|
export type { HideVaultNameOptions } from './hide-vault-name.mjs';
|
|
54
56
|
export { hideVaultName } from './hide-vault-name.mjs';
|
|
55
57
|
export type { IncompatibleInstallerVersionErrorConstructorParams } from './incompatible-installer-version-error.mjs';
|
package/dist/lib/esm/index.mjs
CHANGED
|
@@ -68,6 +68,7 @@ import {
|
|
|
68
68
|
computeFitToCanvas,
|
|
69
69
|
fitScreenshotToCanvas
|
|
70
70
|
} from "./fit-screenshot.mjs";
|
|
71
|
+
import { hideCaret } from "./hide-caret.mjs";
|
|
71
72
|
import { hideVaultName } from "./hide-vault-name.mjs";
|
|
72
73
|
import { IncompatibleInstallerVersionError } from "./incompatible-installer-version-error.mjs";
|
|
73
74
|
import { resolveInstallerCompatibility } from "./installer-compatibility.mjs";
|
|
@@ -173,6 +174,7 @@ export {
|
|
|
173
174
|
fitScreenshotToCanvas,
|
|
174
175
|
getAppConfig,
|
|
175
176
|
getVersionMetadata,
|
|
177
|
+
hideCaret,
|
|
176
178
|
hideVaultName,
|
|
177
179
|
isPng,
|
|
178
180
|
isScriptTimeoutError,
|
|
@@ -212,4 +214,4 @@ export {
|
|
|
212
214
|
withSoftKeyboardEnabled,
|
|
213
215
|
writeDeviceSetting
|
|
214
216
|
};
|
|
215
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgaW50ZWdyYXRpb24gdGVzdGluZyBtb2R1bGUuXG4gKi9cblxuZXhwb3J0IHR5cGUgeyBSdW5BZGJQYXJhbXMgfSBmcm9tICcuL2FkYi5tanMnO1xuZXhwb3J0IHtcbiAgcnVuQWRiQmluYXJ5LFxuICBydW5BZGJUZXh0LFxuICBydW5BZGJUZXh0V2l0aG91dERldmljZVxufSBmcm9tICcuL2FkYi5tanMnO1xuZXhwb3J0IHR5cGUge1xuICBBcHBDb25maWdSZXN0b3JlLFxuICBHZXRBcHBDb25maWdQYXJhbXMsXG4gIFNldEFwcENvbmZpZ1BhcmFtcyxcbiAgV2l0aEFwcENvbmZpZ1BhcmFtc1xufSBmcm9tICcuL2FwcC1jb25maWcubWpzJztcbmV4cG9ydCB7XG4gIGdldEFwcENvbmZpZyxcbiAgcmVzdG9yZUFwcENvbmZpZyxcbiAgc2V0QXBwQ29uZmlnLFxuICB3aXRoQXBwQ29uZmlnXG59IGZyb20gJy4vYXBwLWNvbmZpZy5tanMnO1xuZXhwb3J0IHR5cGUge1xuICBBc2FyRmFsbGJhY2ssXG4gIEFzYXJGYWxsYmFja1RpZXIsXG4gIFJlc29sdmVBc2FyRmFsbGJhY2tQYXJhbXNcbn0gZnJvbSAnLi9hc2FyLWZhbGxiYWNrLWRldGVjdGlvbi5tanMnO1xuZXhwb3J0IHsgcmVzb2x2ZUFzYXJGYWxsYmFjayB9IGZyb20gJy4vYXNhci1mYWxsYmFjay1kZXRlY3Rpb24ubWpzJztcbmV4cG9ydCB0eXBlIHsgQ2FwdHVyZU9ic2lkaWFuU2NyZWVuc2hvdE9wdGlvbnMgfSBmcm9tICcuL2NhcHR1cmUtb2JzaWRpYW4tc2NyZWVuc2hvdC5tanMnO1xuZXhwb3J0IHsgY2FwdHVyZU9ic2lkaWFuU2NyZWVuc2hvdCB9IGZyb20gJy4vY2FwdHVyZS1vYnNpZGlhbi1zY3JlZW5zaG90Lm1qcyc7XG5leHBvcnQgdHlwZSB7XG4gIENhcHR1cmVTY3JlZW5zaG90UGFyYW1zLFxuICBQbmdEaW1lbnNpb25zXG59IGZyb20gJy4vY2FwdHVyZS1zY3JlZW5zaG90Lm1qcyc7XG5leHBvcnQge1xuICBidWlsZERldmljZU1ldHJpY3NPdmVycmlkZSxcbiAgZGVjb2RlQmFzZTY0UG5nLFxuICBpc1BuZyxcbiAgcmVhZFBuZ0RpbWVuc2lvbnNcbn0gZnJvbSAnLi9jYXB0dXJlLXNjcmVlbnNob3QubWpzJztcbmV4cG9ydCB0eXBlIHsgQ2RwQ29tbWFuZFRpbWVvdXRFcnJvckNvbnN0cnVjdG9yUGFyYW1zIH0gZnJvbSAnLi9jZHAtY29tbWFuZC10aW1lb3V0LWVycm9yLm1qcyc7XG5leHBvcnQgeyBDZHBDb21tYW5kVGltZW91dEVycm9yIH0gZnJvbSAnLi9jZHAtY29tbWFuZC10aW1lb3V0LWVycm9yLm1qcyc7XG5leHBvcnQgdHlwZSB7IENvbmZpZ0RpcmVjdG9yeUZhbGxiYWNrRXJyb3JDb25zdHJ1Y3RvclBhcmFtcyB9IGZyb20gJy4vY29uZmlnLWRpcmVjdG9yeS1mYWxsYmFjay1lcnJvci5tanMnO1xuZXhwb3J0IHsgQ29uZmlnRGlyZWN0b3J5RmFsbGJhY2tFcnJvciB9IGZyb20gJy4vY29uZmlnLWRpcmVjdG9yeS1mYWxsYmFjay1lcnJvci5tanMnO1xuZXhwb3J0IHtcbiAgYXNzZXJ0VmFsaWRDb25maWdEaXJlY3RvcnksXG4gIERFRkFVTFRfQ09ORklHX0RJUkVDVE9SWVxufSBmcm9tICcuL2NvbmZpZy1kaXJlY3RvcnkubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgQ2RwQ29ubmVjdGlvbixcbiAgQ29ubmVjdFRvQ2RwT3B0aW9uc1xufSBmcm9tICcuL2Nvbm5lY3QtdG8tY2RwLm1qcyc7XG5leHBvcnQgeyBjb25uZWN0VG9DZHAgfSBmcm9tICcuL2Nvbm5lY3QtdG8tY2RwLm1qcyc7XG5leHBvcnQgdHlwZSB7XG4gIENvbnRleHRBcmd1bWVudHMsXG4gIENvbnRleHRPZlxufSBmcm9tICcuL2NvbnRleHQtaWQubWpzJztcbmV4cG9ydCB7IENvbnRleHRJZCB9IGZyb20gJy4vY29udGV4dC1pZC5tanMnO1xuZXhwb3J0IHR5cGUge1xuICBTZXR1cEVycm9yUmVzb2x2ZXIsXG4gIFRyYW5zcG9ydE9wdGlvbnNSZXNvbHZlcixcbiAgVmF1bHRQYXRoUmVzb2x2ZXJcbn0gZnJvbSAnLi9jb250ZXh0LXByb3ZpZGVyLm1qcyc7XG5leHBvcnQge1xuICBzZXRTZXR1cEVycm9yUmVzb2x2ZXIsXG4gIHNldFRyYW5zcG9ydE9wdGlvbnNSZXNvbHZlcixcbiAgc2V0VmF1bHRQYXRoUmVzb2x2ZXJcbn0gZnJvbSAnLi9jb250ZXh0LXByb3ZpZGVyLm1qcyc7XG5leHBvcnQgdHlwZSB7XG4gIEJvb3RzdHJhcERlbW9WYXVsdFBsdWdpbnNQYXJhbXMsXG4gIEJvb3RzdHJhcERlbW9WYXVsdFBsdWdpbnNSZXN1bHQsXG4gIEJ1aWxkRGVtb1ZhdWx0UG9wdWxhdGVBc3luY1BhcmFtcyxcbiAgSW5zdGFsbGVkUGx1Z2luSW5mb1xufSBmcm9tICcuL2RlbW8tdmF1bHQtYm9vdHN0cmFwLm1qcyc7XG5leHBvcnQge1xuICBib290c3RyYXBEZW1vVmF1bHRQbHVnaW5zLFxuICBidWlsZERlbW9WYXVsdFBvcHVsYXRlQXN5bmNcbn0gZnJvbSAnLi9kZW1vLXZhdWx0LWJvb3RzdHJhcC5tanMnO1xuZXhwb3J0IHR5cGUge1xuICBCdWlsZERlbW9WYXVsdFBvcHVsYXRlUGFyYW1zLFxuICBJbmplY3RQbHVnaW5QYXJhbXMsXG4gIFJlc29sdmVNaXNzaW5nSW5qZWN0ZWRQbHVnaW5zUGFyYW1zXG59IGZyb20gJy4vZGVtby12YXVsdC1wb3B1bGF0ZS5tanMnO1xuZXhwb3J0IHtcbiAgYnVpbGREZW1vVmF1bHRQb3B1bGF0ZSxcbiAgcmVzb2x2ZU1pc3NpbmdJbmplY3RlZFBsdWdpbnNcbn0gZnJvbSAnLi9kZW1vLXZhdWx0LXBvcHVsYXRlLm1qcyc7XG5leHBvcnQgdHlwZSB7IFJlYWREZW1vVmF1bHRUcmVlUGFyYW1zIH0gZnJvbSAnLi9kZW1vLXZhdWx0LXRyZWUubWpzJztcbmV4cG9ydCB7IHJlYWREZW1vVmF1bHRUcmVlIH0gZnJvbSAnLi9kZW1vLXZhdWx0LXRyZWUubWpzJztcbmV4cG9ydCB7IERlc2t0b3BPbmx5UGx1Z2luU2tpcEVycm9yIH0gZnJvbSAnLi9kZXNrdG9wLW9ubHktcGx1Z2luLXNraXAtZXJyb3IubWpzJztcbmV4cG9ydCB0eXBlIHsgQ2FwdHVyZURldmljZVNjcmVlbnNob3RQYXJhbXMgfSBmcm9tICcuL2RldmljZS1zY3JlZW5zaG90Lm1qcyc7XG5leHBvcnQgeyBjYXB0dXJlRGV2aWNlU2NyZWVuc2hvdCB9IGZyb20gJy4vZGV2aWNlLXNjcmVlbnNob3QubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgRGV2aWNlU2V0dGluZ1Jlc3RvcmUsXG4gIERldmljZVNldHRpbmdSZXN0b3JlRGVsZXRlLFxuICBEZXZpY2VTZXR0aW5nUmVzdG9yZVdyaXRlXG59IGZyb20gJy4vZGV2aWNlLXNldHRpbmctcmVzdG9yZS5tanMnO1xuZXhwb3J0IHtcbiAgRGV2aWNlU2V0dGluZ1Jlc3RvcmVLaW5kLFxuICByZXNvbHZlRGV2aWNlU2V0dGluZ1Jlc3RvcmVcbn0gZnJvbSAnLi9kZXZpY2Utc2V0dGluZy1yZXN0b3JlLm1qcyc7XG5leHBvcnQgdHlwZSB7IEJ1aWxkRGV2aWNlU2V0dGluZ3NDb21tYW5kQXJndW1lbnRzUGFyYW1zIH0gZnJvbSAnLi9kZXZpY2Utc2V0dGluZ3MtY29tbWFuZC5tanMnO1xuZXhwb3J0IHtcbiAgYnVpbGREZXZpY2VTZXR0aW5nc0NvbW1hbmRBcmd1bWVudHMsXG4gIERldmljZVNldHRpbmdOYW1lc3BhY2UsXG4gIERldmljZVNldHRpbmdWZXJiXG59IGZyb20gJy4vZGV2aWNlLXNldHRpbmdzLWNvbW1hbmQubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgRGV2aWNlU2V0dGluZ1BhcmFtcyxcbiAgV2l0aFNvZnRLZXlib2FyZEVuYWJsZWRQYXJhbXMsXG4gIFdyaXRlRGV2aWNlU2V0dGluZ1BhcmFtc1xufSBmcm9tICcuL2RldmljZS1zZXR0aW5ncy5tanMnO1xuZXhwb3J0IHtcbiAgZGVsZXRlRGV2aWNlU2V0dGluZyxcbiAgcmVhZERldmljZVNldHRpbmcsXG4gIHdpdGhTb2Z0S2V5Ym9hcmRFbmFibGVkLFxuICB3cml0ZURldmljZVNldHRpbmdcbn0gZnJvbSAnLi9kZXZpY2Utc2V0dGluZ3MubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgRWxlY3Ryb25Db21wYXRpYmlsaXR5LFxuICBFbGVjdHJvbkNvbXBhdGliaWxpdHlUaWVyLFxuICBSZXNvbHZlRWxlY3Ryb25Db21wYXRpYmlsaXR5UGFyYW1zXG59IGZyb20gJy4vZWxlY3Ryb24tY29tcGF0aWJpbGl0eS5tanMnO1xuZXhwb3J0IHsgcmVzb2x2ZUVsZWN0cm9uQ29tcGF0aWJpbGl0eSB9IGZyb20gJy4vZWxlY3Ryb24tY29tcGF0aWJpbGl0eS5tanMnO1xuZXhwb3J0IHR5cGUge1xuICBFbXVsYXRvckRldmljZUNhbmRpZGF0ZSxcbiAgU2VsZWN0RW11bGF0b3JEZXZpY2VJZFBhcmFtc1xufSBmcm9tICcuL2VtdWxhdG9yLWRldmljZS1pZC5tanMnO1xuZXhwb3J0IHsgc2VsZWN0RW11bGF0b3JEZXZpY2VJZCB9IGZyb20gJy4vZW11bGF0b3ItZGV2aWNlLWlkLm1qcyc7XG5leHBvcnQgdHlwZSB7IEV2YWxDYXBFeGNlZWRlZEVycm9yQ29uc3RydWN0b3JQYXJhbXMgfSBmcm9tICcuL2V2YWwtY2FwLWV4Y2VlZGVkLWVycm9yLm1qcyc7XG5leHBvcnQge1xuICBFdmFsQ2FwRXhjZWVkZWRFcnJvcixcbiAgaXNTY3JpcHRUaW1lb3V0RXJyb3Jcbn0gZnJvbSAnLi9ldmFsLWNhcC1leGNlZWRlZC1lcnJvci5tanMnO1xuZXhwb3J0IHsgREVGQVVMVF9FVkFMX0NBUF9JTl9NSUxMSVNFQ09ORFMgfSBmcm9tICcuL2V2YWwtY2FwLm1qcyc7XG5leHBvcnQgdHlwZSB7XG4gIENsaWNrRWxlbWVudFBhcmFtcyxcbiAgQ2xpY2tNb3VzZVBhcmFtcyxcbiAgQ29tbW9uQXJndW1lbnRzLFxuICBDcmVhdGVOb3RlUGFyYW1zLFxuICBFdmFsSW5PYnNpZGlhblBhcmFtcyxcbiAgR2VuZXJpY09iamVjdCxcbiAgSG92ZXJFbGVtZW50UGFyYW1zLFxuICBMaWIsXG4gIE1vdXNlQnV0dG9uLFxuICBNb3ZlTW91c2VQYXJhbXMsXG4gIE9wZW5TZXR0aW5nc1RhYlBhcmFtcyxcbiAgUHJlc3NLZXlQYXJhbXMsXG4gIFR5cGVJbnRvRWRpdG9yUGFyYW1zLFxuICBVbmhvdmVyRWxlbWVudFBhcmFtcyxcbiAgV2FpdFVudGlsUGFyYW1zXG59IGZyb20gJy4vZXZhbC1pbi1vYnNpZGlhbi5tanMnO1xuZXhwb3J0IHsgZXZhbEluT2JzaWRpYW4gfSBmcm9tICcuL2V2YWwtaW4tb2JzaWRpYW4ubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgQ29tcHV0ZUZpdFRvQ2FudmFzUGFyYW1zLFxuICBGaXRTY3JlZW5zaG90VG9DYW52YXNPcHRpb25zLFxuICBGaXRUb0NhbnZhc0dlb21ldHJ5XG59IGZyb20gJy4vZml0LXNjcmVlbnNob3QubWpzJztcbmV4cG9ydCB7XG4gIGNvbXB1dGVGaXRUb0NhbnZhcyxcbiAgZml0U2NyZWVuc2hvdFRvQ2FudmFzXG59IGZyb20gJy4vZml0LXNjcmVlbnNob3QubWpzJztcbmV4cG9ydCB0eXBlIHsgSGlkZVZhdWx0TmFtZU9wdGlvbnMgfSBmcm9tICcuL2hpZGUtdmF1bHQtbmFtZS5tanMnO1xuZXhwb3J0IHsgaGlkZVZhdWx0TmFtZSB9IGZyb20gJy4vaGlkZS12YXVsdC1uYW1lLm1qcyc7XG5leHBvcnQgdHlwZSB7IEluY29tcGF0aWJsZUluc3RhbGxlclZlcnNpb25FcnJvckNvbnN0cnVjdG9yUGFyYW1zIH0gZnJvbSAnLi9pbmNvbXBhdGlibGUtaW5zdGFsbGVyLXZlcnNpb24tZXJyb3IubWpzJztcbmV4cG9ydCB7IEluY29tcGF0aWJsZUluc3RhbGxlclZlcnNpb25FcnJvciB9IGZyb20gJy4vaW5jb21wYXRpYmxlLWluc3RhbGxlci12ZXJzaW9uLWVycm9yLm1qcyc7XG5leHBvcnQgdHlwZSB7XG4gIEluc3RhbGxlckNvbXBhdGliaWxpdHksXG4gIEluc3RhbGxlckNvbXBhdGliaWxpdHlUaWVyLFxuICBSZXNvbHZlSW5zdGFsbGVyQ29tcGF0aWJpbGl0eVBhcmFtc1xufSBmcm9tICcuL2luc3RhbGxlci1jb21wYXRpYmlsaXR5Lm1qcyc7XG5leHBvcnQgeyByZXNvbHZlSW5zdGFsbGVyQ29tcGF0aWJpbGl0eSB9IGZyb20gJy4vaW5zdGFsbGVyLWNvbXBhdGliaWxpdHkubWpzJztcbmV4cG9ydCB0eXBlIHsgSW50ZWdyYXRpb25TZXR1cEZhaWxlZEVycm9yQ29uc3RydWN0b3JQYXJhbXMgfSBmcm9tICcuL2ludGVncmF0aW9uLXNldHVwLWZhaWxlZC1lcnJvci5tanMnO1xuZXhwb3J0IHsgSW50ZWdyYXRpb25TZXR1cEZhaWxlZEVycm9yIH0gZnJvbSAnLi9pbnRlZ3JhdGlvbi1zZXR1cC1mYWlsZWQtZXJyb3IubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgQ29tcHV0ZUxhYmVsQmFuZFBhcmFtcyxcbiAgTGFiZWxCYW5kR2VvbWV0cnksXG4gIExhYmVsQ2FwdGlvbk1lYXN1cmVtZW50LFxuICBMYWJlbFNjcmVlbnNob3RPcHRpb25zLFxuICBNZWFzdXJlTGFiZWxDYXB0aW9uUGFyYW1zXG59IGZyb20gJy4vbGFiZWwtc2NyZWVuc2hvdC5tanMnO1xuZXhwb3J0IHtcbiAgYnVpbGRMYWJlbFN2ZyxcbiAgY29tcHV0ZUxhYmVsQmFuZCxcbiAgZXNjYXBlU3ZnVGV4dCxcbiAgbGFiZWxTY3JlZW5zaG90LFxuICBtZWFzdXJlTGFiZWxDYXB0aW9uXG59IGZyb20gJy4vbGFiZWwtc2NyZWVuc2hvdC5tanMnO1xuZXhwb3J0IHR5cGUgeyBMaWJSZXNvbHZlciB9IGZyb20gJy4vbGliLXJlZ2lzdHJ5Lm1qcyc7XG5leHBvcnQgeyByZWdpc3RlckxpYlJlc29sdmVyIH0gZnJvbSAnLi9saWItcmVnaXN0cnkubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgT2JzaWRpYW5SdW50aW1lVmVyc2lvbnMsXG4gIE9ic2lkaWFuVmVyc2lvbkNoYW5nZWxvZ1VybHMsXG4gIE9ic2lkaWFuVmVyc2lvbkRvd25sb2FkcyxcbiAgT2JzaWRpYW5WZXJzaW9uTWV0YWRhdGFcbn0gZnJvbSAnLi9vYnNpZGlhbi1tZXRhZGF0YS5tanMnO1xuZXhwb3J0IHsgZ2V0VmVyc2lvbk1ldGFkYXRhIH0gZnJvbSAnLi9vYnNpZGlhbi1tZXRhZGF0YS5tanMnO1xuZXhwb3J0IHtcbiAgQ0FUQUxZU1RfTEFURVNULFxuICBQVUJMSUNfTEFURVNUXG59IGZyb20gJy4vb2JzaWRpYW4tdmVyc2lvbi5tanMnO1xuZXhwb3J0IHR5cGUgeyBPcGVuT2JzaWRpYW5TZXR0aW5nc1RhYlBhcmFtcyB9IGZyb20gJy4vb3Blbi1vYnNpZGlhbi1zZXR0aW5ncy10YWIubWpzJztcbmV4cG9ydCB7IG9wZW5PYnNpZGlhblNldHRpbmdzVGFiIH0gZnJvbSAnLi9vcGVuLW9ic2lkaWFuLXNldHRpbmdzLXRhYi5tanMnO1xuZXhwb3J0IHR5cGUgeyBPd25lZEluc3RhbmNlRXhpdGVkRXJyb3JDb25zdHJ1Y3RvclBhcmFtcyB9IGZyb20gJy4vb3duZWQtaW5zdGFuY2UtZXhpdGVkLWVycm9yLm1qcyc7XG5leHBvcnQgeyBPd25lZEluc3RhbmNlRXhpdGVkRXJyb3IgfSBmcm9tICcuL293bmVkLWluc3RhbmNlLWV4aXRlZC1lcnJvci5tanMnO1xuZXhwb3J0IHR5cGUge1xuICBCdWlsZFN0YXR1c0JhckJhbmRGYWlsdXJlTWVzc2FnZVBhcmFtcyxcbiAgUGFpbnRPdXRTdGF0dXNCYXJPcHRpb25zLFxuICBSZXNvbHZlU3RhdHVzQmFyQmFuZFBhcmFtcyxcbiAgU3RhdHVzQmFyQmFuZENvbG9yLFxuICBTdGF0dXNCYXJCYW5kVmVyZGljdFxufSBmcm9tICcuL3BhaW50LW91dC1zdGF0dXMtYmFyLm1qcyc7XG5leHBvcnQge1xuICBidWlsZFN0YXR1c0JhckJhbmRGYWlsdXJlTWVzc2FnZSxcbiAgREVGQVVMVF9TVEFUVVNfQkFSX0VER0VfTUFSR0lOX0lOX1BJWEVMUyxcbiAgREVGQVVMVF9TVEFUVVNfQkFSX1NBTVBMRV9JTlNFVF9JTl9QSVhFTFMsXG4gIHBhaW50T3V0U3RhdHVzQmFyLFxuICByZXNvbHZlU3RhdHVzQmFyQmFuZFxufSBmcm9tICcuL3BhaW50LW91dC1zdGF0dXMtYmFyLm1qcyc7XG5leHBvcnQgdHlwZSB7IFBvbGxJbk9ic2lkaWFuUGFyYW1zIH0gZnJvbSAnLi9wb2xsLWluLW9ic2lkaWFuLm1qcyc7XG5leHBvcnQgeyBwb2xsSW5PYnNpZGlhbiB9IGZyb20gJy4vcG9sbC1pbi1vYnNpZGlhbi5tanMnO1xuZXhwb3J0IHsgUmVuZGVyZXJGYWlsZWRUb0luaXRpYWxpemVFcnJvciB9IGZyb20gJy4vcmVuZGVyZXItZmFpbGVkLXRvLWluaXRpYWxpemUtZXJyb3IubWpzJztcbmV4cG9ydCB0eXBlIHsgUmVzb2x2ZUVtdWxhdG9yRGV2aWNlSWRQYXJhbXMgfSBmcm9tICcuL3Jlc29sdmUtZW11bGF0b3ItZGV2aWNlLWlkLm1qcyc7XG5leHBvcnQgeyByZXNvbHZlRW11bGF0b3JEZXZpY2VJZCB9IGZyb20gJy4vcmVzb2x2ZS1lbXVsYXRvci1kZXZpY2UtaWQubWpzJztcbmV4cG9ydCB0eXBlIHsgUnVuT2JzaWRpYW5WZXJzaW9uTWF0cml4UGFyYW1zIH0gZnJvbSAnLi9ydW4tdmVyc2lvbi1tYXRyaXgubWpzJztcbmV4cG9ydCB7IHJ1bk9ic2lkaWFuVmVyc2lvbk1hdHJpeCB9IGZyb20gJy4vcnVuLXZlcnNpb24tbWF0cml4Lm1qcyc7XG5leHBvcnQgdHlwZSB7IFNpbGVudEFzYXJGYWxsYmFja0Vycm9yQ29uc3RydWN0b3JQYXJhbXMgfSBmcm9tICcuL3NpbGVudC1hc2FyLWZhbGxiYWNrLWVycm9yLm1qcyc7XG5leHBvcnQgeyBTaWxlbnRBc2FyRmFsbGJhY2tFcnJvciB9IGZyb20gJy4vc2lsZW50LWFzYXItZmFsbGJhY2stZXJyb3IubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgQnVpbGRTb2Z0S2V5Ym9hcmREaWFnbm9zdGljTWVzc2FnZVBhcmFtcyxcbiAgQ2hlY2tJc1NvZnRLZXlib2FyZFVwUGFyYW1zLFxuICBFbGVtZW50UmVjdCxcbiAgUmVzb2x2ZVNvZnRLZXlib2FyZFRhcFBvaW50c1BhcmFtcyxcbiAgU29mdEtleWJvYXJkVGFwUG9pbnQsXG4gIFNvZnRLZXlib2FyZFZpZXdwb3J0U25hcHNob3Rcbn0gZnJvbSAnLi9zb2Z0LWtleWJvYXJkLWdlb21ldHJ5Lm1qcyc7XG5leHBvcnQge1xuICBidWlsZFNvZnRLZXlib2FyZERpYWdub3N0aWNNZXNzYWdlLFxuICBjaGVja0lzSW5wdXRNZXRob2RTaG93bixcbiAgY2hlY2tJc1NvZnRLZXlib2FyZFVwLFxuICBERUZBVUxUX01JTklNVU1fS0VZQk9BUkRfSEVJR0hUX0lOX1BJWEVMUyxcbiAgcGFyc2VJbnB1dE1ldGhvZFN0YXRlLFxuICByZXNvbHZlU29mdEtleWJvYXJkVGFwUG9pbnRzXG59IGZyb20gJy4vc29mdC1rZXlib2FyZC1nZW9tZXRyeS5tanMnO1xuZXhwb3J0IHR5cGUge1xuICBSYWlzZVNvZnRLZXlib2FyZFBhcmFtcyxcbiAgVGFwRGV2aWNlUGFyYW1zXG59IGZyb20gJy4vc29mdC1rZXlib2FyZC5tanMnO1xuZXhwb3J0IHtcbiAgcmFpc2VTb2Z0S2V5Ym9hcmQsXG4gIHRhcERldmljZVxufSBmcm9tICcuL3NvZnQta2V5Ym9hcmQubWpzJztcbmV4cG9ydCB0eXBlIHsgU3RhbGVCdWlsZEVycm9yQ29uc3RydWN0b3JQYXJhbXMgfSBmcm9tICcuL3N0YWxlLWJ1aWxkLWVycm9yLm1qcyc7XG5leHBvcnQgeyBTdGFsZUJ1aWxkRXJyb3IgfSBmcm9tICcuL3N0YWxlLWJ1aWxkLWVycm9yLm1qcyc7XG5leHBvcnQgdHlwZSB7XG4gIFBvcHVsYXRlRmlsZUNvbnRlbnQsXG4gIFBvcHVsYXRlRmlsZXNQYXJhbXMsXG4gIFRlbXBvcmFyeVZhdWx0Q29uc3RydWN0b3JPcHRpb25zXG59IGZyb20gJy4vdGVtcG9yYXJ5LXZhdWx0Lm1qcyc7XG5leHBvcnQgeyBUZW1wb3JhcnlWYXVsdCB9IGZyb20gJy4vdGVtcG9yYXJ5LXZhdWx0Lm1qcyc7XG5leHBvcnQgdHlwZSB7XG4gIEFwcGl1bVNlc3Npb25JbmZvLFxuICBBcHBpdW1UcmFuc3BvcnRDb25maWdcbn0gZnJvbSAnLi90cmFuc3BvcnQtYXBwaXVtLm1qcyc7XG5leHBvcnQgeyBBcHBpdW1UcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC1hcHBpdW0ubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgRGVza3RvcENkcFRyYW5zcG9ydENvbmZpZyxcbiAgT3duZWRJbnN0YW5jZUFzYXIsXG4gIE93bmVkSW5zdGFuY2VDb25maWcsXG4gIE93bmVkSW5zdGFuY2VFbmRwb2ludFxufSBmcm9tICcuL3RyYW5zcG9ydC1kZXNrdG9wLWNkcC5tanMnO1xuZXhwb3J0IHsgRGVza3RvcENkcFRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LWRlc2t0b3AtY2RwLm1qcyc7XG5leHBvcnQgeyBjcmVhdGVUcmFuc3BvcnRGcm9tT3B0aW9ucyB9IGZyb20gJy4vdHJhbnNwb3J0LWZhY3RvcnkubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgT2JzaWRpYW5BbmRyb2lkQXBwaXVtVHJhbnNwb3J0T3B0aW9ucyxcbiAgT2JzaWRpYW5DZHBUcmFuc3BvcnRPcHRpb25zLFxuICBPYnNpZGlhblRyYW5zcG9ydE9wdGlvbnNcbn0gZnJvbSAnLi90cmFuc3BvcnQtb3B0aW9ucy5tanMnO1xuZXhwb3J0IHsgY2hlY2tJc01vYmlsZVRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LW9wdGlvbnMubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgQ29uc29sZUNhcHR1cmVIYW5kbGUsXG4gIE9ic2lkaWFuVHJhbnNwb3J0LFxuICBUcmFuc3BvcnRFdmFsT3B0aW9uc1xufSBmcm9tICcuL3RyYW5zcG9ydC5tanMnO1xuZXhwb3J0IHtcbiAgcmVnaXN0ZXJWYXVsdCxcbiAgdW5yZWdpc3RlclZhdWx0XG59IGZyb20gJy4vdmF1bHQtcmVnaXN0cnkubWpzJztcbmV4cG9ydCB0eXBlIHsgT2JzaWRpYW5WZXJzaW9uTWF0cml4RW50cnkgfSBmcm9tICcuL3ZlcnNpb24tbWF0cml4Lm1qcyc7XG5leHBvcnQgeyBERUZBVUxUX09CU0lESUFOX1ZFUlNJT05fU1BFQ1MgfSBmcm9tICcuL3ZlcnNpb24tbWF0cml4Lm1qcyc7XG4iXSwKICAibWFwcGluZ3MiOiAiQUFPQTtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFPUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBTVAsU0FBUywyQkFBMkI7QUFFcEMsU0FBUyxpQ0FBaUM7QUFLMUM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUVQLFNBQVMsOEJBQThCO0FBRXZDLFNBQVMsb0NBQW9DO0FBQzdDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBS1AsU0FBUyxvQkFBb0I7QUFLN0IsU0FBUyxpQkFBaUI7QUFNMUI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBT1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFNUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUVQLFNBQVMseUJBQXlCO0FBQ2xDLFNBQVMsa0NBQWtDO0FBRTNDLFNBQVMsK0JBQStCO0FBTXhDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBRVA7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBTVA7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQU1QLFNBQVMsb0NBQW9DO0FBSzdDLFNBQVMsOEJBQThCO0FBRXZDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyx3Q0FBd0M7QUFrQmpELFNBQVMsc0JBQXNCO0FBTS9CO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBRVAsU0FBUyxxQkFBcUI7QUFFOUIsU0FBUyx5Q0FBeUM7QUFNbEQsU0FBUyxxQ0FBcUM7QUFFOUMsU0FBUyxtQ0FBbUM7QUFRNUM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFFUCxTQUFTLDJCQUEyQjtBQU9wQyxTQUFTLDBCQUEwQjtBQUNuQztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUVQLFNBQVMsK0JBQStCO0FBRXhDLFNBQVMsZ0NBQWdDO0FBUXpDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBRVAsU0FBUyxzQkFBc0I7QUFDL0IsU0FBUyx1Q0FBdUM7QUFFaEQsU0FBUywrQkFBK0I7QUFFeEMsU0FBUyxnQ0FBZ0M7QUFFekMsU0FBUywrQkFBK0I7QUFTeEM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBS1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFFUCxTQUFTLHVCQUF1QjtBQU1oQyxTQUFTLHNCQUFzQjtBQUsvQixTQUFTLHVCQUF1QjtBQU9oQyxTQUFTLDJCQUEyQjtBQUNwQyxTQUFTLGtDQUFrQztBQU0zQyxTQUFTLDhCQUE4QjtBQU12QztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUVQLFNBQVMsc0NBQXNDOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
217
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgaW50ZWdyYXRpb24gdGVzdGluZyBtb2R1bGUuXG4gKi9cblxuZXhwb3J0IHR5cGUgeyBSdW5BZGJQYXJhbXMgfSBmcm9tICcuL2FkYi5tanMnO1xuZXhwb3J0IHtcbiAgcnVuQWRiQmluYXJ5LFxuICBydW5BZGJUZXh0LFxuICBydW5BZGJUZXh0V2l0aG91dERldmljZVxufSBmcm9tICcuL2FkYi5tanMnO1xuZXhwb3J0IHR5cGUge1xuICBBcHBDb25maWdSZXN0b3JlLFxuICBHZXRBcHBDb25maWdQYXJhbXMsXG4gIFNldEFwcENvbmZpZ1BhcmFtcyxcbiAgV2l0aEFwcENvbmZpZ1BhcmFtc1xufSBmcm9tICcuL2FwcC1jb25maWcubWpzJztcbmV4cG9ydCB7XG4gIGdldEFwcENvbmZpZyxcbiAgcmVzdG9yZUFwcENvbmZpZyxcbiAgc2V0QXBwQ29uZmlnLFxuICB3aXRoQXBwQ29uZmlnXG59IGZyb20gJy4vYXBwLWNvbmZpZy5tanMnO1xuZXhwb3J0IHR5cGUge1xuICBBc2FyRmFsbGJhY2ssXG4gIEFzYXJGYWxsYmFja1RpZXIsXG4gIFJlc29sdmVBc2FyRmFsbGJhY2tQYXJhbXNcbn0gZnJvbSAnLi9hc2FyLWZhbGxiYWNrLWRldGVjdGlvbi5tanMnO1xuZXhwb3J0IHsgcmVzb2x2ZUFzYXJGYWxsYmFjayB9IGZyb20gJy4vYXNhci1mYWxsYmFjay1kZXRlY3Rpb24ubWpzJztcbmV4cG9ydCB0eXBlIHsgQ2FwdHVyZU9ic2lkaWFuU2NyZWVuc2hvdE9wdGlvbnMgfSBmcm9tICcuL2NhcHR1cmUtb2JzaWRpYW4tc2NyZWVuc2hvdC5tanMnO1xuZXhwb3J0IHsgY2FwdHVyZU9ic2lkaWFuU2NyZWVuc2hvdCB9IGZyb20gJy4vY2FwdHVyZS1vYnNpZGlhbi1zY3JlZW5zaG90Lm1qcyc7XG5leHBvcnQgdHlwZSB7XG4gIENhcHR1cmVTY3JlZW5zaG90UGFyYW1zLFxuICBQbmdEaW1lbnNpb25zXG59IGZyb20gJy4vY2FwdHVyZS1zY3JlZW5zaG90Lm1qcyc7XG5leHBvcnQge1xuICBidWlsZERldmljZU1ldHJpY3NPdmVycmlkZSxcbiAgZGVjb2RlQmFzZTY0UG5nLFxuICBpc1BuZyxcbiAgcmVhZFBuZ0RpbWVuc2lvbnNcbn0gZnJvbSAnLi9jYXB0dXJlLXNjcmVlbnNob3QubWpzJztcbmV4cG9ydCB0eXBlIHsgQ2RwQ29tbWFuZFRpbWVvdXRFcnJvckNvbnN0cnVjdG9yUGFyYW1zIH0gZnJvbSAnLi9jZHAtY29tbWFuZC10aW1lb3V0LWVycm9yLm1qcyc7XG5leHBvcnQgeyBDZHBDb21tYW5kVGltZW91dEVycm9yIH0gZnJvbSAnLi9jZHAtY29tbWFuZC10aW1lb3V0LWVycm9yLm1qcyc7XG5leHBvcnQgdHlwZSB7IENvbmZpZ0RpcmVjdG9yeUZhbGxiYWNrRXJyb3JDb25zdHJ1Y3RvclBhcmFtcyB9IGZyb20gJy4vY29uZmlnLWRpcmVjdG9yeS1mYWxsYmFjay1lcnJvci5tanMnO1xuZXhwb3J0IHsgQ29uZmlnRGlyZWN0b3J5RmFsbGJhY2tFcnJvciB9IGZyb20gJy4vY29uZmlnLWRpcmVjdG9yeS1mYWxsYmFjay1lcnJvci5tanMnO1xuZXhwb3J0IHtcbiAgYXNzZXJ0VmFsaWRDb25maWdEaXJlY3RvcnksXG4gIERFRkFVTFRfQ09ORklHX0RJUkVDVE9SWVxufSBmcm9tICcuL2NvbmZpZy1kaXJlY3RvcnkubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgQ2RwQ29ubmVjdGlvbixcbiAgQ29ubmVjdFRvQ2RwT3B0aW9uc1xufSBmcm9tICcuL2Nvbm5lY3QtdG8tY2RwLm1qcyc7XG5leHBvcnQgeyBjb25uZWN0VG9DZHAgfSBmcm9tICcuL2Nvbm5lY3QtdG8tY2RwLm1qcyc7XG5leHBvcnQgdHlwZSB7XG4gIENvbnRleHRBcmd1bWVudHMsXG4gIENvbnRleHRPZlxufSBmcm9tICcuL2NvbnRleHQtaWQubWpzJztcbmV4cG9ydCB7IENvbnRleHRJZCB9IGZyb20gJy4vY29udGV4dC1pZC5tanMnO1xuZXhwb3J0IHR5cGUge1xuICBTZXR1cEVycm9yUmVzb2x2ZXIsXG4gIFRyYW5zcG9ydE9wdGlvbnNSZXNvbHZlcixcbiAgVmF1bHRQYXRoUmVzb2x2ZXJcbn0gZnJvbSAnLi9jb250ZXh0LXByb3ZpZGVyLm1qcyc7XG5leHBvcnQge1xuICBzZXRTZXR1cEVycm9yUmVzb2x2ZXIsXG4gIHNldFRyYW5zcG9ydE9wdGlvbnNSZXNvbHZlcixcbiAgc2V0VmF1bHRQYXRoUmVzb2x2ZXJcbn0gZnJvbSAnLi9jb250ZXh0LXByb3ZpZGVyLm1qcyc7XG5leHBvcnQgdHlwZSB7XG4gIEJvb3RzdHJhcERlbW9WYXVsdFBsdWdpbnNQYXJhbXMsXG4gIEJvb3RzdHJhcERlbW9WYXVsdFBsdWdpbnNSZXN1bHQsXG4gIEJ1aWxkRGVtb1ZhdWx0UG9wdWxhdGVBc3luY1BhcmFtcyxcbiAgSW5zdGFsbGVkUGx1Z2luSW5mb1xufSBmcm9tICcuL2RlbW8tdmF1bHQtYm9vdHN0cmFwLm1qcyc7XG5leHBvcnQge1xuICBib290c3RyYXBEZW1vVmF1bHRQbHVnaW5zLFxuICBidWlsZERlbW9WYXVsdFBvcHVsYXRlQXN5bmNcbn0gZnJvbSAnLi9kZW1vLXZhdWx0LWJvb3RzdHJhcC5tanMnO1xuZXhwb3J0IHR5cGUge1xuICBCdWlsZERlbW9WYXVsdFBvcHVsYXRlUGFyYW1zLFxuICBJbmplY3RQbHVnaW5QYXJhbXMsXG4gIFJlc29sdmVNaXNzaW5nSW5qZWN0ZWRQbHVnaW5zUGFyYW1zXG59IGZyb20gJy4vZGVtby12YXVsdC1wb3B1bGF0ZS5tanMnO1xuZXhwb3J0IHtcbiAgYnVpbGREZW1vVmF1bHRQb3B1bGF0ZSxcbiAgcmVzb2x2ZU1pc3NpbmdJbmplY3RlZFBsdWdpbnNcbn0gZnJvbSAnLi9kZW1vLXZhdWx0LXBvcHVsYXRlLm1qcyc7XG5leHBvcnQgdHlwZSB7IFJlYWREZW1vVmF1bHRUcmVlUGFyYW1zIH0gZnJvbSAnLi9kZW1vLXZhdWx0LXRyZWUubWpzJztcbmV4cG9ydCB7IHJlYWREZW1vVmF1bHRUcmVlIH0gZnJvbSAnLi9kZW1vLXZhdWx0LXRyZWUubWpzJztcbmV4cG9ydCB7IERlc2t0b3BPbmx5UGx1Z2luU2tpcEVycm9yIH0gZnJvbSAnLi9kZXNrdG9wLW9ubHktcGx1Z2luLXNraXAtZXJyb3IubWpzJztcbmV4cG9ydCB0eXBlIHsgQ2FwdHVyZURldmljZVNjcmVlbnNob3RQYXJhbXMgfSBmcm9tICcuL2RldmljZS1zY3JlZW5zaG90Lm1qcyc7XG5leHBvcnQgeyBjYXB0dXJlRGV2aWNlU2NyZWVuc2hvdCB9IGZyb20gJy4vZGV2aWNlLXNjcmVlbnNob3QubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgRGV2aWNlU2V0dGluZ1Jlc3RvcmUsXG4gIERldmljZVNldHRpbmdSZXN0b3JlRGVsZXRlLFxuICBEZXZpY2VTZXR0aW5nUmVzdG9yZVdyaXRlXG59IGZyb20gJy4vZGV2aWNlLXNldHRpbmctcmVzdG9yZS5tanMnO1xuZXhwb3J0IHtcbiAgRGV2aWNlU2V0dGluZ1Jlc3RvcmVLaW5kLFxuICByZXNvbHZlRGV2aWNlU2V0dGluZ1Jlc3RvcmVcbn0gZnJvbSAnLi9kZXZpY2Utc2V0dGluZy1yZXN0b3JlLm1qcyc7XG5leHBvcnQgdHlwZSB7IEJ1aWxkRGV2aWNlU2V0dGluZ3NDb21tYW5kQXJndW1lbnRzUGFyYW1zIH0gZnJvbSAnLi9kZXZpY2Utc2V0dGluZ3MtY29tbWFuZC5tanMnO1xuZXhwb3J0IHtcbiAgYnVpbGREZXZpY2VTZXR0aW5nc0NvbW1hbmRBcmd1bWVudHMsXG4gIERldmljZVNldHRpbmdOYW1lc3BhY2UsXG4gIERldmljZVNldHRpbmdWZXJiXG59IGZyb20gJy4vZGV2aWNlLXNldHRpbmdzLWNvbW1hbmQubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgRGV2aWNlU2V0dGluZ1BhcmFtcyxcbiAgV2l0aFNvZnRLZXlib2FyZEVuYWJsZWRQYXJhbXMsXG4gIFdyaXRlRGV2aWNlU2V0dGluZ1BhcmFtc1xufSBmcm9tICcuL2RldmljZS1zZXR0aW5ncy5tanMnO1xuZXhwb3J0IHtcbiAgZGVsZXRlRGV2aWNlU2V0dGluZyxcbiAgcmVhZERldmljZVNldHRpbmcsXG4gIHdpdGhTb2Z0S2V5Ym9hcmRFbmFibGVkLFxuICB3cml0ZURldmljZVNldHRpbmdcbn0gZnJvbSAnLi9kZXZpY2Utc2V0dGluZ3MubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgRWxlY3Ryb25Db21wYXRpYmlsaXR5LFxuICBFbGVjdHJvbkNvbXBhdGliaWxpdHlUaWVyLFxuICBSZXNvbHZlRWxlY3Ryb25Db21wYXRpYmlsaXR5UGFyYW1zXG59IGZyb20gJy4vZWxlY3Ryb24tY29tcGF0aWJpbGl0eS5tanMnO1xuZXhwb3J0IHsgcmVzb2x2ZUVsZWN0cm9uQ29tcGF0aWJpbGl0eSB9IGZyb20gJy4vZWxlY3Ryb24tY29tcGF0aWJpbGl0eS5tanMnO1xuZXhwb3J0IHR5cGUge1xuICBFbXVsYXRvckRldmljZUNhbmRpZGF0ZSxcbiAgU2VsZWN0RW11bGF0b3JEZXZpY2VJZFBhcmFtc1xufSBmcm9tICcuL2VtdWxhdG9yLWRldmljZS1pZC5tanMnO1xuZXhwb3J0IHsgc2VsZWN0RW11bGF0b3JEZXZpY2VJZCB9IGZyb20gJy4vZW11bGF0b3ItZGV2aWNlLWlkLm1qcyc7XG5leHBvcnQgdHlwZSB7IEV2YWxDYXBFeGNlZWRlZEVycm9yQ29uc3RydWN0b3JQYXJhbXMgfSBmcm9tICcuL2V2YWwtY2FwLWV4Y2VlZGVkLWVycm9yLm1qcyc7XG5leHBvcnQge1xuICBFdmFsQ2FwRXhjZWVkZWRFcnJvcixcbiAgaXNTY3JpcHRUaW1lb3V0RXJyb3Jcbn0gZnJvbSAnLi9ldmFsLWNhcC1leGNlZWRlZC1lcnJvci5tanMnO1xuZXhwb3J0IHsgREVGQVVMVF9FVkFMX0NBUF9JTl9NSUxMSVNFQ09ORFMgfSBmcm9tICcuL2V2YWwtY2FwLm1qcyc7XG5leHBvcnQgdHlwZSB7XG4gIENsaWNrRWxlbWVudFBhcmFtcyxcbiAgQ2xpY2tNb3VzZVBhcmFtcyxcbiAgQ29tbW9uQXJndW1lbnRzLFxuICBDcmVhdGVOb3RlUGFyYW1zLFxuICBFdmFsSW5PYnNpZGlhblBhcmFtcyxcbiAgR2VuZXJpY09iamVjdCxcbiAgSG92ZXJFbGVtZW50UGFyYW1zLFxuICBMaWIsXG4gIE1vdXNlQnV0dG9uLFxuICBNb3ZlTW91c2VQYXJhbXMsXG4gIE9wZW5TZXR0aW5nc1RhYlBhcmFtcyxcbiAgUHJlc3NLZXlQYXJhbXMsXG4gIFR5cGVJbnRvRWRpdG9yUGFyYW1zLFxuICBVbmhvdmVyRWxlbWVudFBhcmFtcyxcbiAgV2FpdFVudGlsUGFyYW1zXG59IGZyb20gJy4vZXZhbC1pbi1vYnNpZGlhbi5tanMnO1xuZXhwb3J0IHsgZXZhbEluT2JzaWRpYW4gfSBmcm9tICcuL2V2YWwtaW4tb2JzaWRpYW4ubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgQ29tcHV0ZUZpdFRvQ2FudmFzUGFyYW1zLFxuICBGaXRTY3JlZW5zaG90VG9DYW52YXNPcHRpb25zLFxuICBGaXRUb0NhbnZhc0dlb21ldHJ5XG59IGZyb20gJy4vZml0LXNjcmVlbnNob3QubWpzJztcbmV4cG9ydCB7XG4gIGNvbXB1dGVGaXRUb0NhbnZhcyxcbiAgZml0U2NyZWVuc2hvdFRvQ2FudmFzXG59IGZyb20gJy4vZml0LXNjcmVlbnNob3QubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgSGlkZGVuQ2FyZXQsXG4gIEhpZGVDYXJldE9wdGlvbnNcbn0gZnJvbSAnLi9oaWRlLWNhcmV0Lm1qcyc7XG5leHBvcnQgeyBoaWRlQ2FyZXQgfSBmcm9tICcuL2hpZGUtY2FyZXQubWpzJztcbmV4cG9ydCB0eXBlIHsgSGlkZVZhdWx0TmFtZU9wdGlvbnMgfSBmcm9tICcuL2hpZGUtdmF1bHQtbmFtZS5tanMnO1xuZXhwb3J0IHsgaGlkZVZhdWx0TmFtZSB9IGZyb20gJy4vaGlkZS12YXVsdC1uYW1lLm1qcyc7XG5leHBvcnQgdHlwZSB7IEluY29tcGF0aWJsZUluc3RhbGxlclZlcnNpb25FcnJvckNvbnN0cnVjdG9yUGFyYW1zIH0gZnJvbSAnLi9pbmNvbXBhdGlibGUtaW5zdGFsbGVyLXZlcnNpb24tZXJyb3IubWpzJztcbmV4cG9ydCB7IEluY29tcGF0aWJsZUluc3RhbGxlclZlcnNpb25FcnJvciB9IGZyb20gJy4vaW5jb21wYXRpYmxlLWluc3RhbGxlci12ZXJzaW9uLWVycm9yLm1qcyc7XG5leHBvcnQgdHlwZSB7XG4gIEluc3RhbGxlckNvbXBhdGliaWxpdHksXG4gIEluc3RhbGxlckNvbXBhdGliaWxpdHlUaWVyLFxuICBSZXNvbHZlSW5zdGFsbGVyQ29tcGF0aWJpbGl0eVBhcmFtc1xufSBmcm9tICcuL2luc3RhbGxlci1jb21wYXRpYmlsaXR5Lm1qcyc7XG5leHBvcnQgeyByZXNvbHZlSW5zdGFsbGVyQ29tcGF0aWJpbGl0eSB9IGZyb20gJy4vaW5zdGFsbGVyLWNvbXBhdGliaWxpdHkubWpzJztcbmV4cG9ydCB0eXBlIHsgSW50ZWdyYXRpb25TZXR1cEZhaWxlZEVycm9yQ29uc3RydWN0b3JQYXJhbXMgfSBmcm9tICcuL2ludGVncmF0aW9uLXNldHVwLWZhaWxlZC1lcnJvci5tanMnO1xuZXhwb3J0IHsgSW50ZWdyYXRpb25TZXR1cEZhaWxlZEVycm9yIH0gZnJvbSAnLi9pbnRlZ3JhdGlvbi1zZXR1cC1mYWlsZWQtZXJyb3IubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgQ29tcHV0ZUxhYmVsQmFuZFBhcmFtcyxcbiAgTGFiZWxCYW5kR2VvbWV0cnksXG4gIExhYmVsQ2FwdGlvbk1lYXN1cmVtZW50LFxuICBMYWJlbFNjcmVlbnNob3RPcHRpb25zLFxuICBNZWFzdXJlTGFiZWxDYXB0aW9uUGFyYW1zXG59IGZyb20gJy4vbGFiZWwtc2NyZWVuc2hvdC5tanMnO1xuZXhwb3J0IHtcbiAgYnVpbGRMYWJlbFN2ZyxcbiAgY29tcHV0ZUxhYmVsQmFuZCxcbiAgZXNjYXBlU3ZnVGV4dCxcbiAgbGFiZWxTY3JlZW5zaG90LFxuICBtZWFzdXJlTGFiZWxDYXB0aW9uXG59IGZyb20gJy4vbGFiZWwtc2NyZWVuc2hvdC5tanMnO1xuZXhwb3J0IHR5cGUgeyBMaWJSZXNvbHZlciB9IGZyb20gJy4vbGliLXJlZ2lzdHJ5Lm1qcyc7XG5leHBvcnQgeyByZWdpc3RlckxpYlJlc29sdmVyIH0gZnJvbSAnLi9saWItcmVnaXN0cnkubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgT2JzaWRpYW5SdW50aW1lVmVyc2lvbnMsXG4gIE9ic2lkaWFuVmVyc2lvbkNoYW5nZWxvZ1VybHMsXG4gIE9ic2lkaWFuVmVyc2lvbkRvd25sb2FkcyxcbiAgT2JzaWRpYW5WZXJzaW9uTWV0YWRhdGFcbn0gZnJvbSAnLi9vYnNpZGlhbi1tZXRhZGF0YS5tanMnO1xuZXhwb3J0IHsgZ2V0VmVyc2lvbk1ldGFkYXRhIH0gZnJvbSAnLi9vYnNpZGlhbi1tZXRhZGF0YS5tanMnO1xuZXhwb3J0IHtcbiAgQ0FUQUxZU1RfTEFURVNULFxuICBQVUJMSUNfTEFURVNUXG59IGZyb20gJy4vb2JzaWRpYW4tdmVyc2lvbi5tanMnO1xuZXhwb3J0IHR5cGUgeyBPcGVuT2JzaWRpYW5TZXR0aW5nc1RhYlBhcmFtcyB9IGZyb20gJy4vb3Blbi1vYnNpZGlhbi1zZXR0aW5ncy10YWIubWpzJztcbmV4cG9ydCB7IG9wZW5PYnNpZGlhblNldHRpbmdzVGFiIH0gZnJvbSAnLi9vcGVuLW9ic2lkaWFuLXNldHRpbmdzLXRhYi5tanMnO1xuZXhwb3J0IHR5cGUgeyBPd25lZEluc3RhbmNlRXhpdGVkRXJyb3JDb25zdHJ1Y3RvclBhcmFtcyB9IGZyb20gJy4vb3duZWQtaW5zdGFuY2UtZXhpdGVkLWVycm9yLm1qcyc7XG5leHBvcnQgeyBPd25lZEluc3RhbmNlRXhpdGVkRXJyb3IgfSBmcm9tICcuL293bmVkLWluc3RhbmNlLWV4aXRlZC1lcnJvci5tanMnO1xuZXhwb3J0IHR5cGUge1xuICBCdWlsZFN0YXR1c0JhckJhbmRGYWlsdXJlTWVzc2FnZVBhcmFtcyxcbiAgUGFpbnRPdXRTdGF0dXNCYXJPcHRpb25zLFxuICBSZXNvbHZlU3RhdHVzQmFyQmFuZFBhcmFtcyxcbiAgU3RhdHVzQmFyQmFuZENvbG9yLFxuICBTdGF0dXNCYXJCYW5kVmVyZGljdFxufSBmcm9tICcuL3BhaW50LW91dC1zdGF0dXMtYmFyLm1qcyc7XG5leHBvcnQge1xuICBidWlsZFN0YXR1c0JhckJhbmRGYWlsdXJlTWVzc2FnZSxcbiAgREVGQVVMVF9TVEFUVVNfQkFSX0VER0VfTUFSR0lOX0lOX1BJWEVMUyxcbiAgREVGQVVMVF9TVEFUVVNfQkFSX1NBTVBMRV9JTlNFVF9JTl9QSVhFTFMsXG4gIHBhaW50T3V0U3RhdHVzQmFyLFxuICByZXNvbHZlU3RhdHVzQmFyQmFuZFxufSBmcm9tICcuL3BhaW50LW91dC1zdGF0dXMtYmFyLm1qcyc7XG5leHBvcnQgdHlwZSB7IFBvbGxJbk9ic2lkaWFuUGFyYW1zIH0gZnJvbSAnLi9wb2xsLWluLW9ic2lkaWFuLm1qcyc7XG5leHBvcnQgeyBwb2xsSW5PYnNpZGlhbiB9IGZyb20gJy4vcG9sbC1pbi1vYnNpZGlhbi5tanMnO1xuZXhwb3J0IHsgUmVuZGVyZXJGYWlsZWRUb0luaXRpYWxpemVFcnJvciB9IGZyb20gJy4vcmVuZGVyZXItZmFpbGVkLXRvLWluaXRpYWxpemUtZXJyb3IubWpzJztcbmV4cG9ydCB0eXBlIHsgUmVzb2x2ZUVtdWxhdG9yRGV2aWNlSWRQYXJhbXMgfSBmcm9tICcuL3Jlc29sdmUtZW11bGF0b3ItZGV2aWNlLWlkLm1qcyc7XG5leHBvcnQgeyByZXNvbHZlRW11bGF0b3JEZXZpY2VJZCB9IGZyb20gJy4vcmVzb2x2ZS1lbXVsYXRvci1kZXZpY2UtaWQubWpzJztcbmV4cG9ydCB0eXBlIHsgUnVuT2JzaWRpYW5WZXJzaW9uTWF0cml4UGFyYW1zIH0gZnJvbSAnLi9ydW4tdmVyc2lvbi1tYXRyaXgubWpzJztcbmV4cG9ydCB7IHJ1bk9ic2lkaWFuVmVyc2lvbk1hdHJpeCB9IGZyb20gJy4vcnVuLXZlcnNpb24tbWF0cml4Lm1qcyc7XG5leHBvcnQgdHlwZSB7IFNpbGVudEFzYXJGYWxsYmFja0Vycm9yQ29uc3RydWN0b3JQYXJhbXMgfSBmcm9tICcuL3NpbGVudC1hc2FyLWZhbGxiYWNrLWVycm9yLm1qcyc7XG5leHBvcnQgeyBTaWxlbnRBc2FyRmFsbGJhY2tFcnJvciB9IGZyb20gJy4vc2lsZW50LWFzYXItZmFsbGJhY2stZXJyb3IubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgQnVpbGRTb2Z0S2V5Ym9hcmREaWFnbm9zdGljTWVzc2FnZVBhcmFtcyxcbiAgQ2hlY2tJc1NvZnRLZXlib2FyZFVwUGFyYW1zLFxuICBFbGVtZW50UmVjdCxcbiAgUmVzb2x2ZVNvZnRLZXlib2FyZFRhcFBvaW50c1BhcmFtcyxcbiAgU29mdEtleWJvYXJkVGFwUG9pbnQsXG4gIFNvZnRLZXlib2FyZFZpZXdwb3J0U25hcHNob3Rcbn0gZnJvbSAnLi9zb2Z0LWtleWJvYXJkLWdlb21ldHJ5Lm1qcyc7XG5leHBvcnQge1xuICBidWlsZFNvZnRLZXlib2FyZERpYWdub3N0aWNNZXNzYWdlLFxuICBjaGVja0lzSW5wdXRNZXRob2RTaG93bixcbiAgY2hlY2tJc1NvZnRLZXlib2FyZFVwLFxuICBERUZBVUxUX01JTklNVU1fS0VZQk9BUkRfSEVJR0hUX0lOX1BJWEVMUyxcbiAgcGFyc2VJbnB1dE1ldGhvZFN0YXRlLFxuICByZXNvbHZlU29mdEtleWJvYXJkVGFwUG9pbnRzXG59IGZyb20gJy4vc29mdC1rZXlib2FyZC1nZW9tZXRyeS5tanMnO1xuZXhwb3J0IHR5cGUge1xuICBSYWlzZVNvZnRLZXlib2FyZFBhcmFtcyxcbiAgVGFwRGV2aWNlUGFyYW1zXG59IGZyb20gJy4vc29mdC1rZXlib2FyZC5tanMnO1xuZXhwb3J0IHtcbiAgcmFpc2VTb2Z0S2V5Ym9hcmQsXG4gIHRhcERldmljZVxufSBmcm9tICcuL3NvZnQta2V5Ym9hcmQubWpzJztcbmV4cG9ydCB0eXBlIHsgU3RhbGVCdWlsZEVycm9yQ29uc3RydWN0b3JQYXJhbXMgfSBmcm9tICcuL3N0YWxlLWJ1aWxkLWVycm9yLm1qcyc7XG5leHBvcnQgeyBTdGFsZUJ1aWxkRXJyb3IgfSBmcm9tICcuL3N0YWxlLWJ1aWxkLWVycm9yLm1qcyc7XG5leHBvcnQgdHlwZSB7XG4gIFBvcHVsYXRlRmlsZUNvbnRlbnQsXG4gIFBvcHVsYXRlRmlsZXNQYXJhbXMsXG4gIFRlbXBvcmFyeVZhdWx0Q29uc3RydWN0b3JPcHRpb25zXG59IGZyb20gJy4vdGVtcG9yYXJ5LXZhdWx0Lm1qcyc7XG5leHBvcnQgeyBUZW1wb3JhcnlWYXVsdCB9IGZyb20gJy4vdGVtcG9yYXJ5LXZhdWx0Lm1qcyc7XG5leHBvcnQgdHlwZSB7XG4gIEFwcGl1bVNlc3Npb25JbmZvLFxuICBBcHBpdW1UcmFuc3BvcnRDb25maWdcbn0gZnJvbSAnLi90cmFuc3BvcnQtYXBwaXVtLm1qcyc7XG5leHBvcnQgeyBBcHBpdW1UcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC1hcHBpdW0ubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgRGVza3RvcENkcFRyYW5zcG9ydENvbmZpZyxcbiAgT3duZWRJbnN0YW5jZUFzYXIsXG4gIE93bmVkSW5zdGFuY2VDb25maWcsXG4gIE93bmVkSW5zdGFuY2VFbmRwb2ludFxufSBmcm9tICcuL3RyYW5zcG9ydC1kZXNrdG9wLWNkcC5tanMnO1xuZXhwb3J0IHsgRGVza3RvcENkcFRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LWRlc2t0b3AtY2RwLm1qcyc7XG5leHBvcnQgeyBjcmVhdGVUcmFuc3BvcnRGcm9tT3B0aW9ucyB9IGZyb20gJy4vdHJhbnNwb3J0LWZhY3RvcnkubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgT2JzaWRpYW5BbmRyb2lkQXBwaXVtVHJhbnNwb3J0T3B0aW9ucyxcbiAgT2JzaWRpYW5DZHBUcmFuc3BvcnRPcHRpb25zLFxuICBPYnNpZGlhblRyYW5zcG9ydE9wdGlvbnNcbn0gZnJvbSAnLi90cmFuc3BvcnQtb3B0aW9ucy5tanMnO1xuZXhwb3J0IHsgY2hlY2tJc01vYmlsZVRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LW9wdGlvbnMubWpzJztcbmV4cG9ydCB0eXBlIHtcbiAgQ29uc29sZUNhcHR1cmVIYW5kbGUsXG4gIE9ic2lkaWFuVHJhbnNwb3J0LFxuICBUcmFuc3BvcnRFdmFsT3B0aW9uc1xufSBmcm9tICcuL3RyYW5zcG9ydC5tanMnO1xuZXhwb3J0IHtcbiAgcmVnaXN0ZXJWYXVsdCxcbiAgdW5yZWdpc3RlclZhdWx0XG59IGZyb20gJy4vdmF1bHQtcmVnaXN0cnkubWpzJztcbmV4cG9ydCB0eXBlIHsgT2JzaWRpYW5WZXJzaW9uTWF0cml4RW50cnkgfSBmcm9tICcuL3ZlcnNpb24tbWF0cml4Lm1qcyc7XG5leHBvcnQgeyBERUZBVUxUX09CU0lESUFOX1ZFUlNJT05fU1BFQ1MgfSBmcm9tICcuL3ZlcnNpb24tbWF0cml4Lm1qcyc7XG4iXSwKICAibWFwcGluZ3MiOiAiQUFPQTtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFPUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBTVAsU0FBUywyQkFBMkI7QUFFcEMsU0FBUyxpQ0FBaUM7QUFLMUM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUVQLFNBQVMsOEJBQThCO0FBRXZDLFNBQVMsb0NBQW9DO0FBQzdDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBS1AsU0FBUyxvQkFBb0I7QUFLN0IsU0FBUyxpQkFBaUI7QUFNMUI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBT1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFNUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUVQLFNBQVMseUJBQXlCO0FBQ2xDLFNBQVMsa0NBQWtDO0FBRTNDLFNBQVMsK0JBQStCO0FBTXhDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBRVA7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBTVA7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQU1QLFNBQVMsb0NBQW9DO0FBSzdDLFNBQVMsOEJBQThCO0FBRXZDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyx3Q0FBd0M7QUFrQmpELFNBQVMsc0JBQXNCO0FBTS9CO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBS1AsU0FBUyxpQkFBaUI7QUFFMUIsU0FBUyxxQkFBcUI7QUFFOUIsU0FBUyx5Q0FBeUM7QUFNbEQsU0FBUyxxQ0FBcUM7QUFFOUMsU0FBUyxtQ0FBbUM7QUFRNUM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFFUCxTQUFTLDJCQUEyQjtBQU9wQyxTQUFTLDBCQUEwQjtBQUNuQztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUVQLFNBQVMsK0JBQStCO0FBRXhDLFNBQVMsZ0NBQWdDO0FBUXpDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBRVAsU0FBUyxzQkFBc0I7QUFDL0IsU0FBUyx1Q0FBdUM7QUFFaEQsU0FBUywrQkFBK0I7QUFFeEMsU0FBUyxnQ0FBZ0M7QUFFekMsU0FBUywrQkFBK0I7QUFTeEM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBS1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFFUCxTQUFTLHVCQUF1QjtBQU1oQyxTQUFTLHNCQUFzQjtBQUsvQixTQUFTLHVCQUF1QjtBQU9oQyxTQUFTLDJCQUEyQjtBQUNwQyxTQUFTLGtDQUFrQztBQU0zQyxTQUFTLDhCQUE4QjtBQU12QztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUVQLFNBQVMsc0NBQXNDOyIsCiAgIm5hbWVzIjogW10KfQo=
|
package/dist/lib/esm/library.mjs
CHANGED
|
@@ -46,6 +46,11 @@
|
|
|
46
46
|
* and nothing in this module's own documentation of the touch hinted at it.
|
|
47
47
|
* See `shouldEmptyFieldForTouch`.
|
|
48
48
|
*
|
|
49
|
+
* **And the text written back has to be HELD, not just written.** The IME's input connection started from
|
|
50
|
+
* the emptied field, and about one time in five it wrote that empty state back over the harness's write,
|
|
51
|
+
* so the capture straight after showed the placeholder. The field is re-read until it holds, and written
|
|
52
|
+
* again when it does not.
|
|
53
|
+
*
|
|
49
54
|
* The geometry that decides whether it worked is unit-tested in
|
|
50
55
|
* `soft-keyboard-geometry`; everything here drives a real device, so the whole
|
|
51
56
|
* module is integration-time code.
|
|
@@ -142,8 +147,9 @@ export interface TapDeviceParams {
|
|
|
142
147
|
* @param params - The device, the field to touch, and how far it must lift.
|
|
143
148
|
* @returns A {@link Promise} that resolves to the geometry read once the keyboard is up.
|
|
144
149
|
* @throws Error if a keyboard already up would not go down, if the field never matched, if it holds text
|
|
145
|
-
* this cannot empty and put back,
|
|
146
|
-
*
|
|
150
|
+
* this cannot empty and put back, if it never lifted — after writing the device framebuffer and the
|
|
151
|
+
* device's own `input_method` state to the diagnostics directory — or if the text written back would not
|
|
152
|
+
* stay in the field. A write-back the IME undoes is written again until it holds; see `restoreFieldText`.
|
|
147
153
|
*/
|
|
148
154
|
export declare function raiseSoftKeyboard(params: RaiseSoftKeyboardParams): Promise<SoftKeyboardViewportSnapshot>;
|
|
149
155
|
/**
|
|
@@ -8,6 +8,8 @@ import { setTimeout as sleep } from "node:timers/promises";
|
|
|
8
8
|
import { runAdbText } from "./adb.mjs";
|
|
9
9
|
import { captureDeviceScreenshot } from "./device-screenshot.mjs";
|
|
10
10
|
import { evalInObsidian } from "./eval-in-obsidian.mjs";
|
|
11
|
+
import { holdFieldText } from "./field-text-hold.mjs";
|
|
12
|
+
import { log } from "./log.mjs";
|
|
11
13
|
import {
|
|
12
14
|
buildSoftKeyboardDiagnosticMessage,
|
|
13
15
|
checkIsInputMethodShown,
|
|
@@ -23,13 +25,19 @@ const KEYBOARD_SHOWN_CONFIRMATION_DELAY_IN_MILLISECONDS = KEYBOARD_RETRACT_DELAY
|
|
|
23
25
|
async function raiseSoftKeyboard(params) {
|
|
24
26
|
await lowerSoftKeyboardIfShown(params);
|
|
25
27
|
const textToRestore = await emptyFieldForTouch(params);
|
|
28
|
+
let snapshot;
|
|
26
29
|
try {
|
|
27
|
-
|
|
28
|
-
}
|
|
30
|
+
snapshot = await tapUntilKeyboardIsUp(params);
|
|
31
|
+
} catch (error) {
|
|
29
32
|
if (textToRestore !== null) {
|
|
30
|
-
await
|
|
33
|
+
await holdFieldTextBestEffort(params, textToRestore);
|
|
31
34
|
}
|
|
35
|
+
throw error;
|
|
32
36
|
}
|
|
37
|
+
if (textToRestore !== null) {
|
|
38
|
+
await restoreFieldText(params, textToRestore);
|
|
39
|
+
}
|
|
40
|
+
return snapshot;
|
|
33
41
|
}
|
|
34
42
|
async function tapDevice(params) {
|
|
35
43
|
await runAdbText({
|
|
@@ -74,6 +82,25 @@ async function emptyFieldForTouch(params) {
|
|
|
74
82
|
await writeFieldText(params, "");
|
|
75
83
|
return content.text;
|
|
76
84
|
}
|
|
85
|
+
async function holdFieldTextBestEffort(params, text) {
|
|
86
|
+
try {
|
|
87
|
+
await holdTextInField(params, text);
|
|
88
|
+
} catch {
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
async function holdTextInField(params, text) {
|
|
92
|
+
return await holdFieldText({
|
|
93
|
+
expectedText: text,
|
|
94
|
+
async readText() {
|
|
95
|
+
const content = await readFieldContent(params);
|
|
96
|
+
return content?.text ?? null;
|
|
97
|
+
},
|
|
98
|
+
sleep,
|
|
99
|
+
async writeText(value) {
|
|
100
|
+
await writeFieldText(params, value);
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
}
|
|
77
104
|
async function lowerSoftKeyboardIfShown(params) {
|
|
78
105
|
let inputMethodState = await readInputMethodState(params);
|
|
79
106
|
for (let attempt = 0; attempt < KEYBOARD_RETRACT_ATTEMPT_COUNT; attempt++) {
|
|
@@ -150,6 +177,20 @@ async function readSoftKeyboardViewport(params) {
|
|
|
150
177
|
...params.vaultPath !== void 0 && { vaultPath: params.vaultPath }
|
|
151
178
|
});
|
|
152
179
|
}
|
|
180
|
+
async function restoreFieldText(params, text) {
|
|
181
|
+
const result = await holdTextInField(params, text);
|
|
182
|
+
if (result.writeCount > 1) {
|
|
183
|
+
log(
|
|
184
|
+
`[soft-keyboard] The text written back into "${params.inputSelector}" was lost ${String(result.writeCount - 1)} time(s) and written again; reads: ${JSON.stringify(result.readTexts)}.`
|
|
185
|
+
);
|
|
186
|
+
}
|
|
187
|
+
if (!result.isHeld) {
|
|
188
|
+
throw new Error(
|
|
189
|
+
`raiseSoftKeyboard: the text written back into "${params.inputSelector}" after the touch did not stay there. Expected ${JSON.stringify(text)}; ${String(result.writeCount)} write(s), and the field read ${JSON.stringify(result.readTexts)}. A capture taken now would show the field without its text.
|
|
190
|
+
device: ${await readInputMethodState(params)}`
|
|
191
|
+
);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
153
194
|
async function tapUntilKeyboardIsUp(params) {
|
|
154
195
|
const baselineSnapshot = await readSoftKeyboardViewport(params);
|
|
155
196
|
let snapshot = baselineSnapshot;
|
|
@@ -194,4 +235,4 @@ export {
|
|
|
194
235
|
raiseSoftKeyboard,
|
|
195
236
|
tapDevice
|
|
196
237
|
};
|
|
197
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3NvZnQta2V5Ym9hcmQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBSYWlzZXMgdGhlIEFuZHJvaWQgc29mdCBrZXlib2FyZCBmb3IgYSBzY3JlZW5zaG90LCBhbmQgcHJvdmVzIGl0IGNhbWUgdXAuXG4gKlxuICogVHdvIHRoaW5ncyBoYXZlIHRvIGJlIHRydWUsIGFuZCB0aGUgc2Vjb25kIGlzIHRoZSBvbmUgdGhhdCBpcyBlYXN5IHRvIG1pc3M6XG4gKlxuICogMS4gVGhlIGRldmljZSBtdXN0IGJlIGFsbG93ZWQgdG8gZHJhdyBhIGtleWJvYXJkIGF0IGFsbC4gVGhlIHNjcmVlbnNob3QgQVZEc1xuICogICAgYXJlIGJ1aWx0IGBody5rZXlib2FyZD15ZXNgLCBzbyBBbmRyb2lkIHN1cHByZXNzZXMgdGhlIG9uLXNjcmVlbiBvbmUgXHUyMDE0XG4gKiAgICBgd2l0aFNvZnRLZXlib2FyZEVuYWJsZWRgIGluIGBkZXZpY2Utc2V0dGluZ3NgIGlzIHdoYXQgbGlmdHMgdGhhdC5cbiAqIDIuIFRoZSBJTUUgbXVzdCBiZSAqYXNrZWQqIGZvciBieSBhIGdlc3R1cmUuIEEgZmllbGQgdGhhdCB0YWtlcyBmb2N1c1xuICogICAgcHJvZ3JhbW1hdGljYWxseSBkb2VzIG5vdCBnZXQgb25lOiBhbiBBbmRyb2lkIFdlYlZpZXcgcmFpc2VzIHRoZSBJTUUgb24gYVxuICogICAgcmVhbCB0b3VjaCwgYW5kIGEgcnVuIHdpdGggdGhlIHNldHRpbmcgZmxpcHBlZCBhbmQgbm8gdG91Y2ggY29tZXMgYmFjayB3aXRoXG4gKiAgICBleGFjdGx5IHRoZSBlbXB0eSBiYW5kIGl0IGhhZCBiZWZvcmUuIGBhZGIgc2hlbGwgaW5wdXQgdGFwYCBpcyB0aGF0IGdlc3R1cmUuXG4gKlxuICogMy4gVGhlIHByb29mIHRoYXQgaXQgYXJyaXZlZCBpcyB0aGF0IHRoZSBmaWVsZCAqKm1vdmVkKiosIG1lYXN1cmVkIGFnYWluc3QgYVxuICogICAgYmFzZWxpbmUgcmVhZCBoZXJlIGJlZm9yZSB0aGUgZmlyc3QgdG91Y2guIEFuIGFic29sdXRlIG9mZnNldCBmcm9tIHRoZVxuICogICAgdmlld3BvcnQgYm90dG9tIGlzIHRoZSBzYW1lIHRlc3Qgb25seSBmb3IgYSBib3R0b20tYW5jaG9yZWQgZmllbGQ7IGZvciBhXG4gKiAgICBjZW50cmVkIG1vZGFsIGl0IGlzIGFscmVhZHkgdHJ1ZSB3aXRoIG5vIGtleWJvYXJkLCB3aGljaCB1c2VkIHRvIGJyZWFrIHRoZVxuICogICAgbG9vcCBiZWxvdyBiZWZvcmUgaXQgaGFkIGRpc3BhdGNoZWQgYSBzaW5nbGUgdG91Y2ggYW5kIHJldHVybiBzdWNjZXNzXG4gKiAgICBoYXZpbmcgZG9uZSBub3RoaW5nLiBSZWFkaW5nIHRoZSBiYXNlbGluZSBmaXJzdCBhbHNvIG1ha2VzIHRoYXQgc2hhcGVcbiAqICAgIHVucmVwcmVzZW50YWJsZSByYXRoZXIgdGhhbiBtZXJlbHkgY29ycmVjdGVkOiB0aGUgZGVsdGEgb2YgdGhlIGJhc2VsaW5lXG4gKiAgICBhZ2FpbnN0IGl0c2VsZiBpcyB6ZXJvLCBzbyB0aGUgZmlyc3QgaXRlcmF0aW9uIGFsd2F5cyB0YXBzLlxuICpcbiAqICAgICoqQSBrZXlib2FyZCBBTFJFQURZIHVwIGlzIHB1dCBkb3duIGZpcnN0KiosIGJlY2F1c2UgYSBkZWx0YSBjYW5ub3Qgc2VlXG4gKiAgICBvbmU6IHRoZSBmaWVsZCBoYXMgYWxyZWFkeSBsaWZ0ZWQsIHNvIGl0IHJlYWRzIGFzIGEgZmllbGQgdGhhdCBuZXZlciBtb3ZlZC5cbiAqICAgIFRoYXQgd2FzIGV2ZXJ5IGZyYW1lIGFmdGVyIHRoZSBmaXJzdCBvZiBhIHN1aXRlIHRoYXQgdGFrZXMgc2V2ZXJhbCBcdTIwMTQgdGhlXG4gKiAgICBrZXlib2FyZCBsZWZ0IHVwIGJ5IG9uZSBmcmFtZSwgb3IgYnJvdWdodCBiYWNrIGJ5IE9ic2lkaWFuIGZvY3VzaW5nIHRoZVxuICogICAgbmV4dCBtb2RhbCdzIGZpZWxkLCBtYWRlIHRoZSBuZXh0IGJhc2VsaW5lIGFscmVhZHktbGlmdGVkIChtZWFzdXJlZFxuICogICAgMjAyNi0wOS0yMDogZnJhbWVzIDItNSBlYWNoIGZhaWxlZCBgbGlmdD0wYCBiZXNpZGUgYG1JbnB1dFNob3duPXRydWVgLFxuICogICAgZWFjaCBmcmFtZWJ1ZmZlciBzaG93aW5nIGEgY29ycmVjdGx5IGxpZnRlZCBmaWVsZCB1bmRlciBhIGZ1bGx5IGRyYXduXG4gKiAgICBrZXlib2FyZCkuIFRoZSBhbHRlcm5hdGl2ZSB3YXMgdG8gYWNjZXB0IGBsaWZ0PTBgIHdoZW5ldmVyIHRoZSBkZXZpY2Ugc2F5c1xuICogICAgYSBrZXlib2FyZCBpcyBzaG93aW5nLCBhbmQgaXQgd2FzIHJlZnVzZWQ6IHRoYXQgaXMgYSBmcmFtZSB0aGUgaGVscGVyIGRpZFxuICogICAgbm90IHByb3ZlLCB3aGljaCBpcyB0aGUgdmFjdW91cyBwYXNzIHRoZSBkZWx0YSB3YXMgaW50cm9kdWNlZCB0byBlbmQsXG4gKiAgICByZS1vcGVuZWQgYnkgYSBkaWZmZXJlbnQgZG9vci4gU28gdGhlIGRldmljZSBpcyBhc2tlZCwgYSBzaG93aW5nIElNRSBpc1xuICogICAgcmV0cmFjdGVkIHdpdGggYEtFWUNPREVfQkFDS2AsIGFuZCB0aGUgbGlmdCBpcyBwcm92ZWQgYXMgYmVmb3JlLiBJdCBoYXMgdG9cbiAqICAgIGhhcHBlbiBIRVJFLCBub3QgYWZ0ZXIgdGhlIHByZXZpb3VzIGNhcHR1cmU6IGxvd2VyaW5nIGl0IHRoZXJlIHdhcyB0cmllZCxcbiAqICAgIGFuZCB0aGUgSU1FIGNhbWUgYmFjayBvbiBpdHMgb3duIGJlZm9yZSB0aGUgbmV4dCBiYXNlbGluZSB3YXMgcmVhZC5cbiAqXG4gKiA0LiAqKlRoYXQgdG91Y2ggZHJhd3MgYSBzZWxlY3Rpb24gaGFuZGxlIHdoZW4gaXQgbGFuZHMgaW5zaWRlIFRFWFQqKiwgYW5kIGFcbiAqICAgIGRldmljZSBjYXB0dXJlIHBob3RvZ3JhcGhzIGl0LiBDaHJvbWl1bSBzaG93cyB0aGUgaW5zZXJ0aW9uIGhhbmRsZSBvbiBhIHRhcFxuICogICAgaW50byB0ZXh0IGFuZCBub25lIG9uIGEgdGFwIGludG8gYW4gRU1QVFkgZWRpdGFibGUsIGFuZCBhIHZhbHVlIHdyaXR0ZW4gYnlcbiAqICAgIHNjcmlwdCByYWlzZXMgbm9uZSBhdCBhbGwgXHUyMDE0IHNvIHRoZSBmaWVsZCBpcyBlbXB0aWVkIGZvciB0aGUgdG91Y2ggYW5kIGl0c1xuICogICAgdGV4dCB3cml0dGVuIGJhY2sgYWZ0ZXJ3YXJkcy4gYG9ic2lkaWFuLWxpbmstcGlja2VyYCBzaGlwcGVkIGEgdGVhbCBoYW5kbGVcbiAqICAgIGluIGEgc3RvcmUgbGlzdGluZyBpbWFnZSB0d2ljZSBiZWZvcmUgYW55b25lIHdvcmtlZCBvdXQgd2hlcmUgaXQgY2FtZSBmcm9tLFxuICogICAgYW5kIG5vdGhpbmcgaW4gdGhpcyBtb2R1bGUncyBvd24gZG9jdW1lbnRhdGlvbiBvZiB0aGUgdG91Y2ggaGludGVkIGF0IGl0LlxuICogICAgU2VlIGBzaG91bGRFbXB0eUZpZWxkRm9yVG91Y2hgLlxuICpcbiAqIFRoZSBnZW9tZXRyeSB0aGF0IGRlY2lkZXMgd2hldGhlciBpdCB3b3JrZWQgaXMgdW5pdC10ZXN0ZWQgaW5cbiAqIGBzb2Z0LWtleWJvYXJkLWdlb21ldHJ5YDsgZXZlcnl0aGluZyBoZXJlIGRyaXZlcyBhIHJlYWwgZGV2aWNlLCBzbyB0aGUgd2hvbGVcbiAqIG1vZHVsZSBpcyBpbnRlZ3JhdGlvbi10aW1lIGNvZGUuXG4gKi9cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIEludGVncmF0aW9uLXRpbWUgY29kZSAoZHJpdmVzIGEgbGl2ZSBPYnNpZGlhbiBvbiBhIHJlYWwgZGV2aWNlKSBjb3ZlcmVkIGJ5IGludGVncmF0aW9uIHRlc3RzLCBub3QgdW5pdCB0ZXN0cy4gKi9cblxuaW1wb3J0IHtcbiAgbWtkaXJTeW5jLFxuICB3cml0ZUZpbGVTeW5jXG59IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IHsgc2V0VGltZW91dCBhcyBzbGVlcCB9IGZyb20gJ25vZGU6dGltZXJzL3Byb21pc2VzJztcblxuaW1wb3J0IHR5cGUge1xuICBFbGVtZW50UmVjdCxcbiAgU29mdEtleWJvYXJkVGFwUG9pbnQsXG4gIFNvZnRLZXlib2FyZFZpZXdwb3J0U25hcHNob3Rcbn0gZnJvbSAnLi9zb2Z0LWtleWJvYXJkLWdlb21ldHJ5Lm1qcyc7XG5cbmltcG9ydCB7IHJ1bkFkYlRleHQgfSBmcm9tICcuL2FkYi5tanMnO1xuaW1wb3J0IHsgY2FwdHVyZURldmljZVNjcmVlbnNob3QgfSBmcm9tICcuL2RldmljZS1zY3JlZW5zaG90Lm1qcyc7XG5pbXBvcnQgeyBldmFsSW5PYnNpZGlhbiB9IGZyb20gJy4vZXZhbC1pbi1vYnNpZGlhbi5tanMnO1xuaW1wb3J0IHtcbiAgYnVpbGRTb2Z0S2V5Ym9hcmREaWFnbm9zdGljTWVzc2FnZSxcbiAgY2hlY2tJc0lucHV0TWV0aG9kU2hvd24sXG4gIGNoZWNrSXNTb2Z0S2V5Ym9hcmRVcCxcbiAgcGFyc2VJbnB1dE1ldGhvZFN0YXRlLFxuICByZXNvbHZlU29mdEtleWJvYXJkVGFwUG9pbnRzXG59IGZyb20gJy4vc29mdC1rZXlib2FyZC1nZW9tZXRyeS5tanMnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayByYWlzZVNvZnRLZXlib2FyZH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmFpc2VTb2Z0S2V5Ym9hcmRQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGRldmljZSB0byB0b3VjaC5cbiAgICovXG4gIHJlYWRvbmx5IGRldmljZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXJlIGEgZmFpbGVkIGF0dGVtcHQgd3JpdGVzIHRoZSBkZXZpY2UgZnJhbWVidWZmZXIuXG4gICAqXG4gICAqIFdoZW4gb21pdHRlZCwgaXQgaXMgYGRpc3Qvc2NyZWVuc2hvdHNgIHVuZGVyIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBcdTIwMTQgcmVzb2x2ZWQgYXQgbG9hZCwgc28gdGhlcmUgaXMgbm9cbiAgICogbGl0ZXJhbCBkZWZhdWx0IHRvIHN0YXRlIGhlcmUuXG4gICAqL1xuICByZWFkb25seSBkaWFnbm9zdGljc0RpcmVjdG9yeT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIENTUyBzZWxlY3RvciBvZiB0aGUgZmllbGQgdG8gdG91Y2gsIGUuZy4gYC5wcm9tcHQtaW5wdXRgLlxuICAgKi9cbiAgcmVhZG9ubHkgaW5wdXRTZWxlY3Rvcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbGVhc3QgYSByYWlzZWQga2V5Ym9hcmQgbGlmdHMgdGhlIGZpZWxkIGJ5LlxuICAgKlxuICAgKiBXaGVuIG9taXR0ZWQsIGBERUZBVUxUX01JTklNVU1fS0VZQk9BUkRfSEVJR0hUX0lOX1BJWEVMU2AgZnJvbSBgc29mdC1rZXlib2FyZC1nZW9tZXRyeWAgYXBwbGllcy5cbiAgICovXG4gIHJlYWRvbmx5IG1pbmltdW1LZXlib2FyZEhlaWdodEluUGl4ZWxzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGVtcHR5IHRoZSBmaWVsZCBiZWZvcmUgdGhlIHRvdWNoLCBhbmQgd3JpdGUgaXRzIHRleHQgYmFjayBhZnRlcndhcmRzLlxuICAgKlxuICAgKiAqKk9uIGJ5IGRlZmF1bHQsIGJlY2F1c2UgdGhlIHRvdWNoIHRoYXQgcmFpc2VzIHRoZSBrZXlib2FyZCBhbHNvIGRyYXdzIGEgc2VsZWN0aW9uIGhhbmRsZSB3aGVuIGl0XG4gICAqIGxhbmRzIGluc2lkZSBURVhULioqIENocm9taXVtIHNob3dzIHRoZSBpbnNlcnRpb24gaGFuZGxlIG9uIGEgdGFwIGludG8gdGV4dCBhbmQgZHJhd3Mgbm9uZSBvbiBhIHRhcFxuICAgKiBpbnRvIGFuIEVNUFRZIGVkaXRhYmxlLCBhbmQgYSBkZXZpY2UgY2FwdHVyZSBwaG90b2dyYXBocyBpdCBcdTIwMTQgd2hpY2ggaXMgaG93IGBvYnNpZGlhbi1saW5rLXBpY2tlcmBcbiAgICogc2hpcHBlZCBhIHRlYWwgaGFuZGxlIGluIGEgc3RvcmUgbGlzdGluZyBpbWFnZSB0d2ljZSBiZWZvcmUgYW55b25lIHVuZGVyc3Rvb2Qgd2hlcmUgaXQgY2FtZSBmcm9tLiBBXG4gICAqIHZhbHVlIHdyaXR0ZW4gYnkgc2NyaXB0IHJhaXNlcyBubyBoYW5kbGUsIHNvIGVtcHR5aW5nIHRoZSBmaWVsZCwgdG91Y2hpbmcgaXQsIGFuZCB3cml0aW5nIHRoZSB0ZXh0XG4gICAqIGJhY2sgbGVhdmVzIHRoZSBmcmFtZSBzaG93aW5nIHRoZSBzYW1lIHF1ZXJ5IHdpdGggbm90aGluZyBoYW5naW5nIG9mZiBpdC5cbiAgICpcbiAgICogT25seSBhbiBgPGlucHV0PmAgb3IgYSBgPHRleHRhcmVhPmAgaXMgZW1wdGllZC4gQSBgY29udGVudGVkaXRhYmxlYCBob2xkaW5nIHRleHQgaXMgUkVGVVNFRCByYXRoZXJcbiAgICogdGhhbiB3cml0dGVuIHRvOiBpdHMgY29udGVudCB1c3VhbGx5IGJlbG9uZ3MgdG8gYW4gZWRpdG9yIHRoYXQgb3ducyBpdHMgb3duIERPTSwgYW5kIGJsYW5raW5nIHRoYXRcbiAgICogYnkgaGFuZCBkZXN0cm95cyBpdC4gRW1wdHkgc3VjaCBhIGZpZWxkIHlvdXJzZWxmLCBvciB0dXJuIHRoaXMgb2ZmLlxuICAgKlxuICAgKiBUdXJuaW5nIGl0IG9mZiByZXN0b3JlcyB0aGUgcHJlLTIwMjYtMDktMjMgYmVoYXZpb3VyIGV4YWN0bHk6IHRoZSBmaWVsZCBpcyB0b3VjaGVkIGFzIGl0IHN0YW5kcy5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkRW1wdHlGaWVsZEZvclRvdWNoPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHZhdWx0IHRvIHJlYWQgdGhlIGdlb21ldHJ5IGZyb20uIFdoZW4gb21pdHRlZCwgdGhlIGN1cnJlbnQgdGVzdCBjb250ZXh0J3MgdmF1bHQgaXMgdXNlZC5cbiAgICovXG4gIHJlYWRvbmx5IHZhdWx0UGF0aD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgdGFwRGV2aWNlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYXBEZXZpY2VQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGRldmljZSB0byB0b3VjaC5cbiAgICovXG4gIHJlYWRvbmx5IGRldmljZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXJlIHRvIHRvdWNoIGl0LlxuICAgKi9cbiAgcmVhZG9ubHkgcG9pbnQ6IFNvZnRLZXlib2FyZFRhcFBvaW50O1xufVxuXG4vKipcbiAqIFdoZXJlIGEgZmFpbGVkIGF0dGVtcHQgbGVhdmVzIGl0cyBldmlkZW5jZSBcdTIwMTQgdW5kZXIgYGRpc3QvYCwgd2hpY2ggYSBwbHVnaW4gcmVwbyB1c2luZyB0aGlzIGhhcm5lc3MgZ2l0aWdub3JlcywgbGlrZSB0aGUgY2FwdHVyZSBzY3JhdGNoIGZpbGVzLlxuICovXG5jb25zdCBERUZBVUxUX0RJQUdOT1NUSUNTX0RJUkVDVE9SWSA9IGpvaW4ocHJvY2Vzcy5jd2QoKSwgJ2Rpc3QnLCAnc2NyZWVuc2hvdHMnKTtcblxuLyoqXG4gKiBIb3cgbG9uZyB0aGUgSU1FIHRha2VzIHRvIGZpbmlzaCBhbmltYXRpbmcgaW4sIGFmdGVyIHdoaWNoIHRoZSBsYXlvdXQgaGFzIHNldHRsZWQuXG4gKi9cbmNvbnN0IEtFWUJPQVJEX1NFVFRMRV9ERUxBWV9JTl9NSUxMSVNFQ09ORFMgPSAxNTAwO1xuXG4vKipcbiAqIEhvdyBsb25nIHRoZSBJTUUgdGFrZXMgdG8gZmluaXNoIGFuaW1hdGluZyBvdXQgYWZ0ZXIgYEtFWUNPREVfQkFDS2AsIG1lYXN1cmVkIGluIHRoZSBjYXB0dXJlIHN1aXRlIHRoaXNcbiAqIHdhcyBtb3ZlZCBvdXQgb2YuXG4gKi9cbmNvbnN0IEtFWUJPQVJEX1JFVFJBQ1RfREVMQVlfSU5fTUlMTElTRUNPTkRTID0gOTAwO1xuXG4vKipcbiAqIEhvdyBtYW55IHRpbWVzIGBLRVlDT0RFX0JBQ0tgIGlzIHByZXNzZWQgYmVmb3JlIGEga2V5Ym9hcmQgdGhhdCB3aWxsIG5vdCBnbyBkb3duIGlzIHJlcG9ydGVkLlxuICpcbiAqIFR3bywgYmVjYXVzZSB0aGUgZmlyc3QgcHJlc3MgY2FuIGxhbmQgd2hpbGUgdGhlIElNRSBpcyBzdGlsbCBhbmltYXRpbmcgVVAgZnJvbSB0aGUgZm9jdXMgdGhhdCByYWlzZWRcbiAqIGl0LCBhbmQgYW4gSU1FIG1pZC1hbmltYXRpb24gc3dhbGxvd3MgdGhlIGtleSB3aXRob3V0IHJldHJhY3RpbmcuXG4gKi9cbmNvbnN0IEtFWUJPQVJEX1JFVFJBQ1RfQVRURU1QVF9DT1VOVCA9IDI7XG5cbi8qKlxuICogSG93IGxvbmcgYSBrZXlib2FyZCByZXBvcnRlZCBzaG93aW5nIGlzIHdhdGNoZWQgYmVmb3JlIGBLRVlDT0RFX0JBQ0tgIGlzIHByZXNzZWQgYXQgaXQuXG4gKlxuICogT25lIHJldHJhY3QgYW5pbWF0aW9uOiBhbiBJTUUgYWxyZWFkeSBvbiBpdHMgd2F5IGRvd24gXHUyMDE0IHRoZSBtb2RhbCB0aGF0IHJhaXNlZCBpdCBoYXMganVzdCBjbG9zZWQgXHUyMDE0IGlzXG4gKiBzdGlsbCByZXBvcnRlZCBzaG93aW5nIGJ5IGEgcmVhZCB0YWtlbiBhdCB0aGUgc3RhcnQgb2YgaXRzIHJldHJhY3QsIGFuZCBpcyBnb25lIGJ5IHRoZSBlbmQgb2YgaXQuIFByZXNzaW5nXG4gKiBhdCB0aGUgZmlyc3QgcmVhZCB0aGVuIGxhbmRzIHRoZSBrZXkgb24gdGhlIGFwcCBpbnN0ZWFkLCB3aGljaCBjbG9zZXMgdGhlIG1vZGFsIHRoZSBmcmFtZSBpcyBhYm91dCB0b1xuICogcGhvdG9ncmFwaC4gVHdvIHJlYWRzIHRoYXQgYWdyZWUgYWNyb3NzIHRoaXMgd2luZG93IHNheSB0aGUga2V5Ym9hcmQgaXMgc3RheWluZyB1cC5cbiAqL1xuY29uc3QgS0VZQk9BUkRfU0hPV05fQ09ORklSTUFUSU9OX0RFTEFZX0lOX01JTExJU0VDT05EUyA9IEtFWUJPQVJEX1JFVFJBQ1RfREVMQVlfSU5fTUlMTElTRUNPTkRTO1xuXG4vKipcbiAqIFdoYXQgYSBmaWVsZCBob2xkcywgYW5kIHdoZXRoZXIgaXQgaXMgb25lIHRoaXMgY2FuIHB1dCBiYWNrLlxuICovXG5pbnRlcmZhY2UgRmllbGRDb250ZW50IHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGZpZWxkJ3MgdmFsdWUgY2FuIGJlIHdyaXR0ZW4gXHUyMDE0IHRydWUgZm9yIGFuIGA8aW5wdXQ+YCBvciBhIGA8dGV4dGFyZWE+YCwgZmFsc2UgZm9yXG4gICAqIGFueXRoaW5nIGVsc2UsIHdob3NlIGNvbnRlbnQgdXN1YWxseSBiZWxvbmdzIHRvIGFuIGVkaXRvciB0aGF0IG93bnMgaXRzIG93biBET00uXG4gICAqL1xuICByZWFkb25seSBjYW5Xcml0ZTogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHRleHQgdGhlIGZpZWxkIGN1cnJlbnRseSBob2xkcy5cbiAgICovXG4gIHJlYWRvbmx5IHRleHQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSYWlzZXMgdGhlIG9uLXNjcmVlbiBrZXlib2FyZCB3aXRoIGEgcmVhbCB0b3VjaCBvbiBhIGZpZWxkLCBhbmQgY29uZmlybXMgaXQgY2FtZSB1cC5cbiAqXG4gKiBDYWxsIGl0IGluc2lkZSBgd2l0aFNvZnRLZXlib2FyZEVuYWJsZWRgIFx1MjAxNCB0aGUgZGV2aWNlIHNldHRpbmcgYWxvbmUgZG9lcyBub3QgcmFpc2UgdGhlIGtleWJvYXJkLCBhbmQgdGhpc1xuICogdG91Y2ggYWxvbmUgY2Fubm90IHdoaWxlIHRoZSBzZXR0aW5nIHN1cHByZXNzZXMgaXQuXG4gKlxuICogKipBIGtleWJvYXJkIHRoYXQgaXMgYWxyZWFkeSB1cCBpcyBwdXQgRE9XTiBmaXJzdC4qKiBUaGUgZmlyc3QgZ2VvbWV0cnkgcmVhZCBpcyB0aGUgYmFzZWxpbmUgZXZlcnkgbGF0ZXJcbiAqIHJlYWQgaXMgY29tcGFyZWQgYWdhaW5zdCwgc28gYSBrZXlib2FyZCBhbHJlYWR5IHVwIHdvdWxkIGxlYXZlIHRoZSBmaWVsZCBub3RoaW5nIHRvIGxpZnQgYnkgYW5kIHJlYWQgYXNcbiAqIG9uZSB0aGF0IG5ldmVyIGNhbWUuIFRoZSBkZXZpY2UgaXMgYXNrZWQgYmVmb3JlIGFueXRoaW5nIGVsc2UsIGFuZCBhIHNob3dpbmcgSU1FIGlzIHJldHJhY3RlZCB3aXRoXG4gKiBgS0VZQ09ERV9CQUNLYCBcdTIwMTQgYXNrZWQgRklSU1QgYmVjYXVzZSwgd2l0aCBubyBJTUUgc2hvd2luZywgdGhhdCBrZXkgcmVhY2hlcyB0aGUgYXBwIGFuZCBjbG9zZXMgdGhlIHZlcnlcbiAqIG1vZGFsIHRoZSBmcmFtZSBpcyBhYm91dCB0byBwaG90b2dyYXBoLiBTbyB0aGUgaGVscGVyIGlzIHNhZmUgdG8gY2FsbCBvbmNlIHBlciBmcmFtZSBvZiBhIG11bHRpLWZyYW1lXG4gKiBzdWl0ZSwgYW5kIGV2ZXJ5IGNhbGwgc3RpbGwgcHJvdmVzIGl0cyBvd24gbGlmdC4gVGhlIG90aGVyIGFuc3dlciBcdTIwMTQgYWNjZXB0aW5nIGEgemVybyBsaWZ0IHdoZW5ldmVyIHRoZVxuICogZGV2aWNlIHJlcG9ydHMgYSBrZXlib2FyZCBcdTIwMTQgd2FzIHJlZnVzZWQsIGJlY2F1c2UgaXQgYWNjZXB0cyBhIGZyYW1lIHRoZSBoZWxwZXIgZGlkIG5vdCBwcm92ZS5cbiAqXG4gKiAqKlRoZSBmaWVsZCBpcyBFTVBUSUVEIGZvciB0aGUgdG91Y2ggYW5kIHdyaXR0ZW4gYmFjayBhZnRlcndhcmRzKiosIGJlY2F1c2UgYSB0b3VjaCB0aGF0IGxhbmRzIGluc2lkZVxuICogdGV4dCBkcmF3cyBDaHJvbWl1bSdzIHNlbGVjdGlvbiBoYW5kbGUgYW5kIHRoZSBmcmFtZWJ1ZmZlciBwaG90b2dyYXBocyBpdCBcdTIwMTQgc2VlXG4gKiB7QGxpbmsgUmFpc2VTb2Z0S2V5Ym9hcmRQYXJhbXMuc2hvdWxkRW1wdHlGaWVsZEZvclRvdWNofSwgd2hpY2ggdHVybnMgdGhhdCBvZmYuXG4gKlxuICogKipUaGUgZ2VvbWV0cnkgcmV0dXJuZWQgaXMgcmVhZCB3aXRoIHRoZSBmaWVsZCBzdGlsbCBlbXB0eSoqLCBhbmQgdGhlIHRleHQgaXMgd3JpdHRlbiBiYWNrIGFmdGVyIGl0LlxuICogVGhhdCBpcyB0aGUgc3RhdGUgdGhlIHByb3ZlbiBjYXB0dXJlIHN1aXRlcyBhc3NlcnQgYWdhaW5zdCwgYW5kIGl0IGlzIGRlbGliZXJhdGUgcmF0aGVyIHRoYW5cbiAqIGluY2lkZW50YWw6IHRoZSBiYXNlbGluZSBpcyByZWFkIEFGVEVSIHRoZSBmaWVsZCBpcyBlbXB0aWVkLCBzbyB0aGUgbGlmdCBpcyBtZWFzdXJlZCBiZXR3ZWVuIHR3byByZWFkc1xuICogb2YgdGhlIHNhbWUgZmllbGQgY29udGVudC4gQSBmaWVsZCB3aG9zZSBvd24gdGV4dCBjaGFuZ2VzIHRoZSBsYXlvdXQgYXJvdW5kIGl0IFx1MjAxNCBhIHN1Z2dlc3RlciB3aG9zZSByb3dcbiAqIGNvdW50IGFuc3dlcnMgdGhlIHF1ZXJ5IFx1MjAxNCBtb3ZlcyB3aGVuIGl0IGlzIGNsZWFyZWQsIGFuZCBhIGRlbHRhIG1lYXN1cmVkIGFjcm9zcyB0aGF0IG1vdmUgaXMgbm90IGFcbiAqIGtleWJvYXJkLiBSZWFkIHRoZSBnZW9tZXRyeSBhZ2FpbiB5b3Vyc2VsZiBpZiB0aGUgcmVzdG9yZWQgdGV4dCBtb3ZlcyBhbnl0aGluZyB5b3UgYXJlIGFib3V0IHRvIGFzc2VydFxuICogb24uXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBkZXZpY2UsIHRoZSBmaWVsZCB0byB0b3VjaCwgYW5kIGhvdyBmYXIgaXQgbXVzdCBsaWZ0LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgZ2VvbWV0cnkgcmVhZCBvbmNlIHRoZSBrZXlib2FyZCBpcyB1cC5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgYSBrZXlib2FyZCBhbHJlYWR5IHVwIHdvdWxkIG5vdCBnbyBkb3duLCBpZiB0aGUgZmllbGQgbmV2ZXIgbWF0Y2hlZCwgaWYgaXQgaG9sZHMgdGV4dFxuICogICB0aGlzIGNhbm5vdCBlbXB0eSBhbmQgcHV0IGJhY2ssIG9yIGlmIGl0IG5ldmVyIGxpZnRlZCBcdTIwMTQgdGhlIGxhc3QgYWZ0ZXIgd3JpdGluZyB0aGUgZGV2aWNlIGZyYW1lYnVmZmVyXG4gKiAgIGFuZCB0aGUgZGV2aWNlJ3Mgb3duIGBpbnB1dF9tZXRob2RgIHN0YXRlIHRvIHRoZSBkaWFnbm9zdGljcyBkaXJlY3RvcnkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByYWlzZVNvZnRLZXlib2FyZChwYXJhbXM6IFJhaXNlU29mdEtleWJvYXJkUGFyYW1zKTogUHJvbWlzZTxTb2Z0S2V5Ym9hcmRWaWV3cG9ydFNuYXBzaG90PiB7XG4gIGF3YWl0IGxvd2VyU29mdEtleWJvYXJkSWZTaG93bihwYXJhbXMpO1xuXG4gIGNvbnN0IHRleHRUb1Jlc3RvcmUgPSBhd2FpdCBlbXB0eUZpZWxkRm9yVG91Y2gocGFyYW1zKTtcblxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCB0YXBVbnRpbEtleWJvYXJkSXNVcChwYXJhbXMpO1xuICB9IGZpbmFsbHkge1xuICAgIC8vIFJlc3RvcmVkIGV2ZW4gd2hlbiB0aGUgcmFpc2UgZmFpbGVkOiBhIGNhbGxlciB0aGF0IGlzIGFib3V0IHRvIHJlYWQgaXRzIG93biBkaWFnbm9zdGljIHNob3VsZCBub3RcbiAgICAvLyBhbHNvIGhhdmUgdG8gZGlzY292ZXIgdGhhdCBpdHMgcXVlcnkgaXMgZ29uZS5cbiAgICBpZiAodGV4dFRvUmVzdG9yZSAhPT0gbnVsbCkge1xuICAgICAgYXdhaXQgd3JpdGVGaWVsZFRleHQocGFyYW1zLCB0ZXh0VG9SZXN0b3JlKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBUb3VjaGVzIHRoZSBkZXZpY2UgYXQgYSBwb2ludCwgdGhlIHdheSBhIHRodW1iIHdvdWxkLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZGV2aWNlIGFuZCB3aGVyZSB0byB0b3VjaCBpdC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgdG91Y2ggaGFzIGJlZW4gZGlzcGF0Y2hlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRhcERldmljZShwYXJhbXM6IFRhcERldmljZVBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBydW5BZGJUZXh0KHtcbiAgICBjb21tYW5kQXJndW1lbnRzOiBbJ3NoZWxsJywgJ2lucHV0JywgJ3RhcCcsIFN0cmluZyhwYXJhbXMucG9pbnQueEluUGl4ZWxzKSwgU3RyaW5nKHBhcmFtcy5wb2ludC55SW5QaXhlbHMpXSxcbiAgICBkZXZpY2VJZDogcGFyYW1zLmRldmljZUlkXG4gIH0pO1xufVxuXG4vKipcbiAqIFdyaXRlcyB0aGUgZGV2aWNlIGZyYW1lYnVmZmVyIGFuZCByZWFkcyB0aGUgZGV2aWNlJ3MgYGlucHV0X21ldGhvZGAgc3RhdGUsIHRoZW4gY29tcG9zZXMgdGhlIGZhaWx1cmUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBkZXZpY2UgYW5kIHRoZSBkaWFnbm9zdGljcyBkaXJlY3RvcnkuXG4gKiBAcGFyYW0gYmFzZWxpbmVTbmFwc2hvdCAtIFRoZSBnZW9tZXRyeSByZWFkIGJlZm9yZSB0aGUgZmlyc3QgdG91Y2gsIHdoaWNoIHRoZSB2ZXJkaWN0IGlzIG1lYXN1cmVkIGFnYWluc3QuXG4gKiBAcGFyYW0gc25hcHNob3QgLSBUaGUgZ2VvbWV0cnkgcmVhZCBhZnRlciB0aGUgbGFzdCB0b3VjaC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIG1lc3NhZ2UgdG8gdGhyb3cuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkRmFpbHVyZU1lc3NhZ2UoXG4gIHBhcmFtczogUmFpc2VTb2Z0S2V5Ym9hcmRQYXJhbXMsXG4gIGJhc2VsaW5lU25hcHNob3Q6IFNvZnRLZXlib2FyZFZpZXdwb3J0U25hcHNob3QsXG4gIHNuYXBzaG90OiBTb2Z0S2V5Ym9hcmRWaWV3cG9ydFNuYXBzaG90XG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBkaWFnbm9zdGljc0RpcmVjdG9yeSA9IHBhcmFtcy5kaWFnbm9zdGljc0RpcmVjdG9yeSA/PyBERUZBVUxUX0RJQUdOT1NUSUNTX0RJUkVDVE9SWTtcbiAgbWtkaXJTeW5jKGRpYWdub3N0aWNzRGlyZWN0b3J5LCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICBjb25zdCBzY3JlZW5zaG90UGF0aCA9IGpvaW4oZGlhZ25vc3RpY3NEaXJlY3RvcnksICdrZXlib2FyZC1ub3QtcmFpc2VkLnBuZycpO1xuICB3cml0ZUZpbGVTeW5jKHNjcmVlbnNob3RQYXRoLCBhd2FpdCBjYXB0dXJlRGV2aWNlU2NyZWVuc2hvdCh7IGRldmljZUlkOiBwYXJhbXMuZGV2aWNlSWQgfSkpO1xuXG4gIHJldHVybiBidWlsZFNvZnRLZXlib2FyZERpYWdub3N0aWNNZXNzYWdlKHtcbiAgICBiYXNlbGluZVNuYXBzaG90LFxuICAgIGlucHV0TWV0aG9kU3RhdGU6IGF3YWl0IHJlYWRJbnB1dE1ldGhvZFN0YXRlKHBhcmFtcyksXG4gICAgc2NyZWVuc2hvdFBhdGgsXG4gICAgc25hcHNob3RcbiAgfSk7XG59XG5cbi8qKlxuICogV2hldGhlciBhbnl0aGluZyBpbiB0aGUgcGFnZSBtYXRjaGVzIHRoZSBmaWVsZCdzIHNlbGVjdG9yLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZmllbGQgdG8gbG9vayBmb3IuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHdoZXRoZXIgaXQgbWF0Y2hlZC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gY2hlY2tJc0ZpZWxkUHJlc2VudChwYXJhbXM6IFJhaXNlU29mdEtleWJvYXJkUGFyYW1zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIHJldHVybiBhd2FpdCBldmFsSW5PYnNpZGlhbih7XG4gICAgY2FsbGJhY2soeyBpbnB1dFNlbGVjdG9yIH0pOiBib29sZWFuIHtcbiAgICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGlucHV0U2VsZWN0b3IpICE9PSBudWxsO1xuICAgIH0sXG4gICAgaW5wdXQ6IHsgaW5wdXRTZWxlY3RvcjogcGFyYW1zLmlucHV0U2VsZWN0b3IgfSxcbiAgICAuLi4ocGFyYW1zLnZhdWx0UGF0aCAhPT0gdW5kZWZpbmVkICYmIHsgdmF1bHRQYXRoOiBwYXJhbXMudmF1bHRQYXRoIH0pXG4gIH0pO1xufVxuXG4vKipcbiAqIEVtcHRpZXMgdGhlIGZpZWxkIHRoZSB0b3VjaCBpcyBhYm91dCB0byBsYW5kIG9uLCBhbmQgcmVwb3J0cyB3aGF0IHRvIHdyaXRlIGJhY2suXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBmaWVsZCB0byBlbXB0eSwgYW5kIHdoZXRoZXIgdG8gZW1wdHkgaXQgYXQgYWxsLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgdGV4dCB0byByZXN0b3JlLCBvciBgbnVsbGAgd2hlbiBub3RoaW5nIHdhcyBlbXB0aWVkLlxuICogQHRocm93cyBFcnJvciBpZiB0aGUgZmllbGQgaG9sZHMgdGV4dCB0aGF0IGNhbm5vdCBiZSB3cml0dGVuIGJhY2sgXHUyMDE0IGEgYGNvbnRlbnRlZGl0YWJsZWAsIHdob3NlIGNvbnRlbnRcbiAqICAgYmVsb25ncyB0byBhbiBlZGl0b3IgdGhhdCBvd25zIGl0cyBvd24gRE9NLlxuICovXG5hc3luYyBmdW5jdGlvbiBlbXB0eUZpZWxkRm9yVG91Y2gocGFyYW1zOiBSYWlzZVNvZnRLZXlib2FyZFBhcmFtcyk6IFByb21pc2U8bnVsbCB8IHN0cmluZz4ge1xuICBpZiAocGFyYW1zLnNob3VsZEVtcHR5RmllbGRGb3JUb3VjaCA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCByZWFkRmllbGRDb250ZW50KHBhcmFtcyk7XG5cbiAgLy8gTm90aGluZyBtYXRjaGVkLiBUaGUgZ2VvbWV0cnkgcmVhZCBkb2VzIHRoZSByZXBvcnRpbmcsIHdpdGggdGhlIG1lc3NhZ2UgaXQgYWx3YXlzIGhhZC5cbiAgaWYgKCFjb250ZW50IHx8IGNvbnRlbnQudGV4dCA9PT0gJycpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmICghY29udGVudC5jYW5Xcml0ZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGByYWlzZVNvZnRLZXlib2FyZDogXCIke3BhcmFtcy5pbnB1dFNlbGVjdG9yfVwiIGhvbGRzIHRleHQgYnV0IGlzIG5vdCBhbiA8aW5wdXQ+IG9yIGEgPHRleHRhcmVhPiwgc28gaXQgYFxuICAgICAgICArICdjYW5ub3QgYmUgZW1wdGllZCBmb3IgdGhlIHRvdWNoIGFuZCB3cml0dGVuIGJhY2suIFRoZSB0b3VjaCB3b3VsZCBsYW5kIGluc2lkZSB0ZXh0IGFuZCBkcmF3IGEgJ1xuICAgICAgICArICdzZWxlY3Rpb24gaGFuZGxlLCB3aGljaCBhIGRldmljZSBjYXB0dXJlIHBob3RvZ3JhcGhzLiBFbXB0eSB0aGUgZmllbGQgeW91cnNlbGYgYmVmb3JlIGNhbGxpbmcsIG9yICdcbiAgICAgICAgKyAncGFzcyBzaG91bGRFbXB0eUZpZWxkRm9yVG91Y2g6IGZhbHNlIHRvIHRvdWNoIGl0IGFzIGl0IHN0YW5kcy4nXG4gICAgKTtcbiAgfVxuXG4gIGF3YWl0IHdyaXRlRmllbGRUZXh0KHBhcmFtcywgJycpO1xuXG4gIHJldHVybiBjb250ZW50LnRleHQ7XG59XG5cbi8qKlxuICogUHV0cyB0aGUga2V5Ym9hcmQgZG93biB3aGVuIHRoZSBkZXZpY2UgcmVwb3J0cyBvbmUgc2hvd2luZywgc28gdGhlIGJhc2VsaW5lIHJlYWQgbmV4dCBpcyBvbmUgdGhlIHRvdWNoXG4gKiBjYW4gbGlmdCB0aGUgZmllbGQgZnJvbS5cbiAqXG4gKiAqKkEga2V5Ym9hcmQgaXMgcHJlc3NlZCBhdCBvbmx5IG9uY2UgaXQgaGFzIGJlZW4gcmVwb3J0ZWQgc2hvd2luZyBUV0lDRSwgb25lIHJldHJhY3QgYW5pbWF0aW9uIGFwYXJ0LioqXG4gKiBgS0VZQ09ERV9CQUNLYCBpcyByZXRyYWN0ZWQgYnkgdGhlIElNRSBvbmx5IHdoaWxlIHRoZSBJTUUgaXMgdXA7IG9uY2UgaXQgaGFzIGdvbmUsIHRoZSBrZXkgcmVhY2hlcyB0aGVcbiAqIGFwcCwgYW5kIE9ic2lkaWFuIGNsb3NlcyB0aGUgbW9kYWwgb24gc2NyZWVuIFx1MjAxNCB0aGUgb25lIHRoZSBjYWxsZXIgaXMgYWJvdXQgdG8gcGhvdG9ncmFwaC4gQSBrZXlib2FyZFxuICogYWxyZWFkeSBvbiBpdHMgd2F5IGRvd24gKHRoZSBtb2RhbCB0aGF0IHJhaXNlZCBpdCBoYXMganVzdCBjbG9zZWQsIGFuZCB0aGUgY2FsbGVyIG9wZW5lZCBhIGZyZXNoIG9uZVxuICogc3RyYWlnaHQgYWZ0ZXIpIGlzIHN0aWxsIHJlcG9ydGVkIHNob3dpbmcgYXQgdGhlIHN0YXJ0IG9mIGl0cyByZXRyYWN0LCBzbyBwcmVzc2luZyBhdCB0aGUgZmlyc3QgcmVhZFxuICogcmFjZWQgaXQuIEl0IGlzIHdhdGNoZWQgZm9yIG9uZSByZXRyYWN0IGFuaW1hdGlvbiBmaXJzdCwgYW5kIGEga2V5Ym9hcmQgdGhhdCB3ZW50IGRvd24gb24gaXRzIG93biBpc1xuICogbGVmdCBhbG9uZS5cbiAqXG4gKiAqKkFuZCBhIHByZXNzIHRoYXQgcmVhY2hlZCB0aGUgYXBwIGFueXdheSBpcyBuYW1lZCBhcyB0aGF0LioqIFRoZSBmaWVsZCBpcyBsb29rZWQgdXAgYmVmb3JlIHRoZSBwcmVzc1xuICogYW5kIGFmdGVyIGl0OyBvbmUgdGhhdCBtYXRjaGVkIGJlZm9yZSBhbmQgbm90IGFmdGVyIHdhcyBjbG9zZWQgYnkgdGhlIGtleSwgYW5kIHNheWluZyBzbyBiZWF0cyB0aGVcbiAqIGBub3RoaW5nIG1hdGNoZXNgIHRoYXQgdGhlIHJhaXNlIHdvdWxkIG90aGVyd2lzZSByZXBvcnQgYSBzdGVwIGxhdGVyLCBhYm91dCBhIHNlbGVjdG9yIHRoYXQgd2FzIHJpZ2h0LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZGV2aWNlIHRvIGFzaywgYW5kIHRoZSBmaWVsZCB0aGF0IG11c3Qgc3Vydml2ZSB0aGUgcHJlc3MuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2Ugbm8ga2V5Ym9hcmQgaXMgc2hvd2luZy5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgYSBrZXlib2FyZCBpcyBzdGlsbCBzaG93aW5nIGFmdGVyIHtAbGluayBLRVlCT0FSRF9SRVRSQUNUX0FUVEVNUFRfQ09VTlR9IHByZXNzZXMgb2ZcbiAqICAgYEtFWUNPREVfQkFDS2AgXHUyMDE0IHRoZSByYWlzZSB0aGF0IGZvbGxvd3MgY291bGQgcHJvdmUgbm90aGluZywgYW5kIGl0cyBvd24gZmFpbHVyZSB3b3VsZCBibGFtZSBhIGtleWJvYXJkXG4gKiAgIHRoYXQgbmV2ZXIgY2FtZSB3aGVuIHRoZSB0cnV0aCBpcyBvbmUgdGhhdCBuZXZlciBsZWZ0IFx1MjAxNCBvciBpZiBhIHByZXNzIGNsb3NlZCB0aGUgZmllbGQncyBvd24gVUkuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGxvd2VyU29mdEtleWJvYXJkSWZTaG93bihwYXJhbXM6IFJhaXNlU29mdEtleWJvYXJkUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGxldCBpbnB1dE1ldGhvZFN0YXRlID0gYXdhaXQgcmVhZElucHV0TWV0aG9kU3RhdGUocGFyYW1zKTtcblxuICBmb3IgKGxldCBhdHRlbXB0ID0gMDsgYXR0ZW1wdCA8IEtFWUJPQVJEX1JFVFJBQ1RfQVRURU1QVF9DT1VOVDsgYXR0ZW1wdCsrKSB7XG4gICAgaWYgKCFjaGVja0lzSW5wdXRNZXRob2RTaG93bihpbnB1dE1ldGhvZFN0YXRlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGF3YWl0IHNsZWVwKEtFWUJPQVJEX1NIT1dOX0NPTkZJUk1BVElPTl9ERUxBWV9JTl9NSUxMSVNFQ09ORFMpO1xuICAgIGlucHV0TWV0aG9kU3RhdGUgPSBhd2FpdCByZWFkSW5wdXRNZXRob2RTdGF0ZShwYXJhbXMpO1xuXG4gICAgaWYgKCFjaGVja0lzSW5wdXRNZXRob2RTaG93bihpbnB1dE1ldGhvZFN0YXRlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGlzRmllbGRQcmVzZW50QmVmb3JlUHJlc3MgPSBhd2FpdCBjaGVja0lzRmllbGRQcmVzZW50KHBhcmFtcyk7XG4gICAgYXdhaXQgcnVuQWRiVGV4dCh7XG4gICAgICBjb21tYW5kQXJndW1lbnRzOiBbJ3NoZWxsJywgJ2lucHV0JywgJ2tleWV2ZW50JywgJ0tFWUNPREVfQkFDSyddLFxuICAgICAgZGV2aWNlSWQ6IHBhcmFtcy5kZXZpY2VJZFxuICAgIH0pO1xuICAgIGF3YWl0IHNsZWVwKEtFWUJPQVJEX1JFVFJBQ1RfREVMQVlfSU5fTUlMTElTRUNPTkRTKTtcblxuICAgIGlmIChpc0ZpZWxkUHJlc2VudEJlZm9yZVByZXNzICYmICFhd2FpdCBjaGVja0lzRmllbGRQcmVzZW50KHBhcmFtcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ3JhaXNlU29mdEtleWJvYXJkOiBLRVlDT0RFX0JBQ0ssIHByZXNzZWQgdG8gcHV0IGRvd24gYSBrZXlib2FyZCB0aGUgZGV2aWNlIHJlcG9ydGVkIHNob3dpbmcsIHJlYWNoZWQgdGhlIGFwcCBpbnN0ZWFkIGFuZCAnXG4gICAgICAgICAgKyBgY2xvc2VkIHRoZSBVSSBob2xkaW5nIFwiJHtwYXJhbXMuaW5wdXRTZWxlY3Rvcn1cIiBcdTIwMTQgaXQgbWF0Y2hlZCBiZWZvcmUgdGhlIHByZXNzIGFuZCBtYXRjaGVzIG5vdGhpbmcgYWZ0ZXIgaXQuIFRoZSBgXG4gICAgICAgICAgKyAna2V5Ym9hcmQgd2VudCBkb3duIGJldHdlZW4gdGhlIGxhc3QgcmVhZCBhbmQgdGhlIHByZXNzLiBMZXQgdGhlIHByZXZpb3VzIGtleWJvYXJkIHNldHRsZSBiZWZvcmUgb3BlbmluZyB0aGUgVUkgJ1xuICAgICAgICAgICsgYHRvIHJhaXNlIGl0IG9uLlxuZGV2aWNlIGJlZm9yZSB0aGUgcHJlc3M6ICR7aW5wdXRNZXRob2RTdGF0ZX1gXG4gICAgICApO1xuICAgIH1cblxuICAgIGlucHV0TWV0aG9kU3RhdGUgPSBhd2FpdCByZWFkSW5wdXRNZXRob2RTdGF0ZShwYXJhbXMpO1xuICB9XG5cbiAgaWYgKGNoZWNrSXNJbnB1dE1ldGhvZFNob3duKGlucHV0TWV0aG9kU3RhdGUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYHJhaXNlU29mdEtleWJvYXJkOiBhIGtleWJvYXJkIHdhcyBhbHJlYWR5IHVwIGFuZCBkaWQgbm90IGdvIGRvd24gYWZ0ZXIgJHtTdHJpbmcoS0VZQk9BUkRfUkVUUkFDVF9BVFRFTVBUX0NPVU5UKX0gcHJlc3NlcyBvZiBgXG4gICAgICAgICsgJ0tFWUNPREVfQkFDSywgc28gdGhlIGxpZnQgdGhhdCBwcm92ZXMgYSByYWlzZSBjb3VsZCBub3QgYmUgbWVhc3VyZWQuIFRoZSBmaWVsZCB3b3VsZCByZWFkIGFzIG9uZSB0aGF0IG5ldmVyICdcbiAgICAgICAgKyBgbW92ZWQgdW5kZXIgYSBrZXlib2FyZCB0aGF0IGlzIHBsYWlubHkgc2hvd2luZy5cbmRldmljZTogJHtpbnB1dE1ldGhvZFN0YXRlfWBcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogUmVhZHMgd2hhdCB0aGUgZmllbGQgaG9sZHMsIGFuZCB3aGV0aGVyIGl0IGlzIG9uZSB3aG9zZSB2YWx1ZSBjYW4gYmUgd3JpdHRlbiBiYWNrLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZmllbGQgdG8gcmVhZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGNvbnRlbnQsIG9yIGBudWxsYCB3aGVuIG5vdGhpbmcgbWF0Y2hlZCB0aGUgc2VsZWN0b3IuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlYWRGaWVsZENvbnRlbnQocGFyYW1zOiBSYWlzZVNvZnRLZXlib2FyZFBhcmFtcyk6IFByb21pc2U8RmllbGRDb250ZW50IHwgbnVsbD4ge1xuICByZXR1cm4gYXdhaXQgZXZhbEluT2JzaWRpYW4oe1xuICAgIGNhbGxiYWNrKHsgaW5wdXRTZWxlY3RvciB9KTogRmllbGRDb250ZW50IHwgbnVsbCB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihpbnB1dFNlbGVjdG9yKTtcblxuICAgICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjYW5Xcml0ZSA9IGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50IHx8IGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50O1xuXG4gICAgICByZXR1cm4geyBjYW5Xcml0ZSwgdGV4dDogY2FuV3JpdGUgPyBlbGVtZW50LnZhbHVlIDogZWxlbWVudC50ZXh0Q29udGVudCB9O1xuICAgIH0sXG4gICAgaW5wdXQ6IHsgaW5wdXRTZWxlY3RvcjogcGFyYW1zLmlucHV0U2VsZWN0b3IgfSxcbiAgICAuLi4ocGFyYW1zLnZhdWx0UGF0aCAhPT0gdW5kZWZpbmVkICYmIHsgdmF1bHRQYXRoOiBwYXJhbXMudmF1bHRQYXRoIH0pXG4gIH0pO1xufVxuXG4vKipcbiAqIEFza3MgdGhlIGRldmljZSB3aGF0IGl0cyBJTUUgaXMgZG9pbmcgXHUyMDE0IHRoZSBvbmx5IHBsYWNlIHRoYXQga25vd3MsIHNpbmNlIG5vdGhpbmcgaW4gdGhlIHBhZ2UgcmVwb3J0cyBpdC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGRldmljZSB0byBhc2suXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBmaWVsZHMge0BsaW5rIHBhcnNlSW5wdXRNZXRob2RTdGF0ZX0ga2VlcHMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlYWRJbnB1dE1ldGhvZFN0YXRlKHBhcmFtczogUmFpc2VTb2Z0S2V5Ym9hcmRQYXJhbXMpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBkdW1wc3lzT3V0cHV0ID0gYXdhaXQgcnVuQWRiVGV4dCh7XG4gICAgY29tbWFuZEFyZ3VtZW50czogWydzaGVsbCcsICdkdW1wc3lzJywgJ2lucHV0X21ldGhvZCddLFxuICAgIGRldmljZUlkOiBwYXJhbXMuZGV2aWNlSWRcbiAgfSk7XG5cbiAgcmV0dXJuIHBhcnNlSW5wdXRNZXRob2RTdGF0ZShkdW1wc3lzT3V0cHV0KTtcbn1cblxuLyoqXG4gKiBSZWFkcyB3aGF0IHRoZSByZW5kZXJlciBrbm93cyBhYm91dCBpdHMgb3duIGdlb21ldHJ5LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZmllbGQgdG8gbWVhc3VyZSBhbmQgdGhlIHZhdWx0IHRvIHJlYWQgaXQgZnJvbS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHZpZXdwb3J0IGFuZCB0aGUgZmllbGQncyByZWN0LCBpbiBDU1MgcGl4ZWxzLlxuICovXG5hc3luYyBmdW5jdGlvbiByZWFkU29mdEtleWJvYXJkVmlld3BvcnQocGFyYW1zOiBSYWlzZVNvZnRLZXlib2FyZFBhcmFtcyk6IFByb21pc2U8U29mdEtleWJvYXJkVmlld3BvcnRTbmFwc2hvdD4ge1xuICByZXR1cm4gYXdhaXQgZXZhbEluT2JzaWRpYW4oe1xuICAgIGNhbGxiYWNrKHsgaW5wdXRTZWxlY3RvciB9KTogU29mdEtleWJvYXJkVmlld3BvcnRTbmFwc2hvdCB7XG4gICAgICBjb25zdCBpbnB1dEVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihpbnB1dFNlbGVjdG9yKTtcblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vY29uc2lzdGVudC1mdW5jdGlvbi1zY29waW5nIC0tIFRoaXMgY2xvc3VyZSBpcyBzZXJpYWxpemVkIGFuZCBldmFsdWF0ZWQgaW4gdGhlIHJlbmRlcmVyLCBzbyBhIGhlbHBlciBob2lzdGVkIHRvIG1vZHVsZSBzY29wZSB3b3VsZCBub3QgZXhpc3QgdGhlcmUuXG4gICAgICBmdW5jdGlvbiB0b1JlY3QocmVjdDogRE9NUmVjdCk6IEVsZW1lbnRSZWN0IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0LFxuICAgICAgICAgIGxlZnQ6IHJlY3QubGVmdCxcbiAgICAgICAgICB0b3A6IHJlY3QudG9wLFxuICAgICAgICAgIHdpZHRoOiByZWN0LndpZHRoXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRldmljZVBpeGVsUmF0aW86IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvLFxuICAgICAgICBpbm5lckhlaWdodDogd2luZG93LmlubmVySGVpZ2h0LFxuICAgICAgICBpbnB1dFJlY3Q6IGlucHV0RWwgPyB0b1JlY3QoaW5wdXRFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSkgOiBudWxsLFxuICAgICAgICBzY3JlZW5ZOiB3aW5kb3cuc2NyZWVuWVxuICAgICAgfTtcbiAgICB9LFxuICAgIGlucHV0OiB7IGlucHV0U2VsZWN0b3I6IHBhcmFtcy5pbnB1dFNlbGVjdG9yIH0sXG4gICAgLi4uKHBhcmFtcy52YXVsdFBhdGggIT09IHVuZGVmaW5lZCAmJiB7IHZhdWx0UGF0aDogcGFyYW1zLnZhdWx0UGF0aCB9KVxuICB9KTtcbn1cblxuLyoqXG4gKiBUb3VjaGVzIHRoZSBmaWVsZCB1bnRpbCB0aGUga2V5Ym9hcmQgaXMgdXAsIGFuZCBzYXlzIHNvIHdoZW4gaXQgbmV2ZXIgY2FtZS5cbiAqXG4gKiBUaGUgYmFzZWxpbmUgaXMgcmVhZCBoZXJlIHJhdGhlciB0aGFuIGJ5IHRoZSBjYWxsZXIsIHNvIGl0IGlzIHJlYWQgd2l0aCB0aGUgZmllbGQgaW4gdGhlIHN0YXRlIHRoZVxuICogdGFwcyBhcmUgZGlzcGF0Y2hlZCBhZ2FpbnN0IFx1MjAxNCBzZWUge0BsaW5rIHJhaXNlU29mdEtleWJvYXJkfSBmb3Igd2h5IHRoZSB0d28gaGF2ZSB0byBtYXRjaC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGRldmljZSwgdGhlIGZpZWxkIHRvIHRvdWNoLCBhbmQgaG93IGZhciBpdCBtdXN0IGxpZnQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBnZW9tZXRyeSByZWFkIG9uY2UgdGhlIGtleWJvYXJkIGlzIHVwLlxuICogQHRocm93cyBFcnJvciBpZiB0aGUgZmllbGQgbmV2ZXIgbWF0Y2hlZCwgb3IgaWYgaXQgbmV2ZXIgbGlmdGVkLlxuICovXG5hc3luYyBmdW5jdGlvbiB0YXBVbnRpbEtleWJvYXJkSXNVcChwYXJhbXM6IFJhaXNlU29mdEtleWJvYXJkUGFyYW1zKTogUHJvbWlzZTxTb2Z0S2V5Ym9hcmRWaWV3cG9ydFNuYXBzaG90PiB7XG4gIGNvbnN0IGJhc2VsaW5lU25hcHNob3QgPSBhd2FpdCByZWFkU29mdEtleWJvYXJkVmlld3BvcnQocGFyYW1zKTtcbiAgbGV0IHNuYXBzaG90ID0gYmFzZWxpbmVTbmFwc2hvdDtcblxuICBpZiAoIXNuYXBzaG90LmlucHV0UmVjdCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgcmFpc2VTb2Z0S2V5Ym9hcmQ6IG5vdGhpbmcgbWF0Y2hlcyBcIiR7cGFyYW1zLmlucHV0U2VsZWN0b3J9XCIsIHNvIHRoZXJlIGlzIG5vIGZpZWxkIHRvIHRvdWNoLmApO1xuICB9XG5cbiAgZm9yIChjb25zdCBwb2ludCBvZiByZXNvbHZlU29mdEtleWJvYXJkVGFwUG9pbnRzKHsgc25hcHNob3QgfSkpIHtcbiAgICBpZiAoY2hlY2tJc1VwKHNuYXBzaG90KSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgYXdhaXQgdGFwRGV2aWNlKHsgZGV2aWNlSWQ6IHBhcmFtcy5kZXZpY2VJZCwgcG9pbnQgfSk7XG4gICAgYXdhaXQgc2xlZXAoS0VZQk9BUkRfU0VUVExFX0RFTEFZX0lOX01JTExJU0VDT05EUyk7XG4gICAgc25hcHNob3QgPSBhd2FpdCByZWFkU29mdEtleWJvYXJkVmlld3BvcnQocGFyYW1zKTtcbiAgfVxuXG4gIGlmICghY2hlY2tJc1VwKHNuYXBzaG90KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihhd2FpdCBidWlsZEZhaWx1cmVNZXNzYWdlKHBhcmFtcywgYmFzZWxpbmVTbmFwc2hvdCwgc25hcHNob3QpKTtcbiAgfVxuXG4gIHJldHVybiBzbmFwc2hvdDtcblxuICBmdW5jdGlvbiBjaGVja0lzVXAoY3VycmVudDogU29mdEtleWJvYXJkVmlld3BvcnRTbmFwc2hvdCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBjaGVja0lzU29mdEtleWJvYXJkVXAoe1xuICAgICAgYmFzZWxpbmVTbmFwc2hvdCxcbiAgICAgIC4uLihwYXJhbXMubWluaW11bUtleWJvYXJkSGVpZ2h0SW5QaXhlbHMgIT09IHVuZGVmaW5lZCAmJiB7IG1pbmltdW1LZXlib2FyZEhlaWdodEluUGl4ZWxzOiBwYXJhbXMubWluaW11bUtleWJvYXJkSGVpZ2h0SW5QaXhlbHMgfSksXG4gICAgICBzbmFwc2hvdDogY3VycmVudFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogV3JpdGVzIGEgZmllbGQncyB2YWx1ZSBhbmQgdGVsbHMgdGhlIHBhZ2UgaXQgY2hhbmdlZC5cbiAqXG4gKiBUaGUgYGlucHV0YCBldmVudCBpcyB3aGF0IGEgc2NyaXB0ZWQgd3JpdGUgb3dlcyB0aGUgcGFnZTogd2l0aG91dCBpdCBhIHN1Z2dlc3RlciBrZWVwcyB0aGUgcm93cyBpdCBoYWRcbiAqIGZvciB0aGUgdGV4dCB0aGF0IGlzIG5vIGxvbmdlciB0aGVyZS4gSXQgYnViYmxlcywgYmVjYXVzZSB0aGF0IGlzIGhvdyBhIGZyYW1ld29yayBsaXN0ZW5pbmcgb24gYVxuICogY29udGFpbmVyIGhlYXJzIGl0LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZmllbGQgdG8gd3JpdGUuXG4gKiBAcGFyYW0gdGV4dCAtIFdoYXQgdG8gd3JpdGUgaW50byBpdC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgd3JpdGUgaGFzIGJlZW4gbWFkZS5cbiAqIEB0aHJvd3MgVHlwZUVycm9yIGlmIHRoZSBmaWVsZCBpcyBub3Qgb25lIHdob3NlIHZhbHVlIGNhbiBiZSB3cml0dGVuLlxuICovXG5hc3luYyBmdW5jdGlvbiB3cml0ZUZpZWxkVGV4dChwYXJhbXM6IFJhaXNlU29mdEtleWJvYXJkUGFyYW1zLCB0ZXh0OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgZXZhbEluT2JzaWRpYW4oe1xuICAgIGNhbGxiYWNrKHsgaW5wdXRTZWxlY3RvciwgdGV4dDogdmFsdWUgfSk6IHZvaWQge1xuICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoaW5wdXRTZWxlY3Rvcik7XG5cbiAgICAgIGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50KSAmJiAhKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50KSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGByYWlzZVNvZnRLZXlib2FyZDogXCIke2lucHV0U2VsZWN0b3J9XCIgaXMgbm90IGEgZmllbGQgd2hvc2UgdmFsdWUgY2FuIGJlIHdyaXR0ZW4uYCk7XG4gICAgICB9XG5cbiAgICAgIGVsZW1lbnQudmFsdWUgPSB2YWx1ZTtcbiAgICAgIGVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2lucHV0JywgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgICB9LFxuICAgIGlucHV0OiB7IGlucHV0U2VsZWN0b3I6IHBhcmFtcy5pbnB1dFNlbGVjdG9yLCB0ZXh0IH0sXG4gICAgLi4uKHBhcmFtcy52YXVsdFBhdGggIT09IHVuZGVmaW5lZCAmJiB7IHZhdWx0UGF0aDogcGFyYW1zLnZhdWx0UGF0aCB9KVxuICB9KTtcbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBw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
|
|
238
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3NvZnQta2V5Ym9hcmQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBSYWlzZXMgdGhlIEFuZHJvaWQgc29mdCBrZXlib2FyZCBmb3IgYSBzY3JlZW5zaG90LCBhbmQgcHJvdmVzIGl0IGNhbWUgdXAuXG4gKlxuICogVHdvIHRoaW5ncyBoYXZlIHRvIGJlIHRydWUsIGFuZCB0aGUgc2Vjb25kIGlzIHRoZSBvbmUgdGhhdCBpcyBlYXN5IHRvIG1pc3M6XG4gKlxuICogMS4gVGhlIGRldmljZSBtdXN0IGJlIGFsbG93ZWQgdG8gZHJhdyBhIGtleWJvYXJkIGF0IGFsbC4gVGhlIHNjcmVlbnNob3QgQVZEc1xuICogICAgYXJlIGJ1aWx0IGBody5rZXlib2FyZD15ZXNgLCBzbyBBbmRyb2lkIHN1cHByZXNzZXMgdGhlIG9uLXNjcmVlbiBvbmUgXHUyMDE0XG4gKiAgICBgd2l0aFNvZnRLZXlib2FyZEVuYWJsZWRgIGluIGBkZXZpY2Utc2V0dGluZ3NgIGlzIHdoYXQgbGlmdHMgdGhhdC5cbiAqIDIuIFRoZSBJTUUgbXVzdCBiZSAqYXNrZWQqIGZvciBieSBhIGdlc3R1cmUuIEEgZmllbGQgdGhhdCB0YWtlcyBmb2N1c1xuICogICAgcHJvZ3JhbW1hdGljYWxseSBkb2VzIG5vdCBnZXQgb25lOiBhbiBBbmRyb2lkIFdlYlZpZXcgcmFpc2VzIHRoZSBJTUUgb24gYVxuICogICAgcmVhbCB0b3VjaCwgYW5kIGEgcnVuIHdpdGggdGhlIHNldHRpbmcgZmxpcHBlZCBhbmQgbm8gdG91Y2ggY29tZXMgYmFjayB3aXRoXG4gKiAgICBleGFjdGx5IHRoZSBlbXB0eSBiYW5kIGl0IGhhZCBiZWZvcmUuIGBhZGIgc2hlbGwgaW5wdXQgdGFwYCBpcyB0aGF0IGdlc3R1cmUuXG4gKlxuICogMy4gVGhlIHByb29mIHRoYXQgaXQgYXJyaXZlZCBpcyB0aGF0IHRoZSBmaWVsZCAqKm1vdmVkKiosIG1lYXN1cmVkIGFnYWluc3QgYVxuICogICAgYmFzZWxpbmUgcmVhZCBoZXJlIGJlZm9yZSB0aGUgZmlyc3QgdG91Y2guIEFuIGFic29sdXRlIG9mZnNldCBmcm9tIHRoZVxuICogICAgdmlld3BvcnQgYm90dG9tIGlzIHRoZSBzYW1lIHRlc3Qgb25seSBmb3IgYSBib3R0b20tYW5jaG9yZWQgZmllbGQ7IGZvciBhXG4gKiAgICBjZW50cmVkIG1vZGFsIGl0IGlzIGFscmVhZHkgdHJ1ZSB3aXRoIG5vIGtleWJvYXJkLCB3aGljaCB1c2VkIHRvIGJyZWFrIHRoZVxuICogICAgbG9vcCBiZWxvdyBiZWZvcmUgaXQgaGFkIGRpc3BhdGNoZWQgYSBzaW5nbGUgdG91Y2ggYW5kIHJldHVybiBzdWNjZXNzXG4gKiAgICBoYXZpbmcgZG9uZSBub3RoaW5nLiBSZWFkaW5nIHRoZSBiYXNlbGluZSBmaXJzdCBhbHNvIG1ha2VzIHRoYXQgc2hhcGVcbiAqICAgIHVucmVwcmVzZW50YWJsZSByYXRoZXIgdGhhbiBtZXJlbHkgY29ycmVjdGVkOiB0aGUgZGVsdGEgb2YgdGhlIGJhc2VsaW5lXG4gKiAgICBhZ2FpbnN0IGl0c2VsZiBpcyB6ZXJvLCBzbyB0aGUgZmlyc3QgaXRlcmF0aW9uIGFsd2F5cyB0YXBzLlxuICpcbiAqICAgICoqQSBrZXlib2FyZCBBTFJFQURZIHVwIGlzIHB1dCBkb3duIGZpcnN0KiosIGJlY2F1c2UgYSBkZWx0YSBjYW5ub3Qgc2VlXG4gKiAgICBvbmU6IHRoZSBmaWVsZCBoYXMgYWxyZWFkeSBsaWZ0ZWQsIHNvIGl0IHJlYWRzIGFzIGEgZmllbGQgdGhhdCBuZXZlciBtb3ZlZC5cbiAqICAgIFRoYXQgd2FzIGV2ZXJ5IGZyYW1lIGFmdGVyIHRoZSBmaXJzdCBvZiBhIHN1aXRlIHRoYXQgdGFrZXMgc2V2ZXJhbCBcdTIwMTQgdGhlXG4gKiAgICBrZXlib2FyZCBsZWZ0IHVwIGJ5IG9uZSBmcmFtZSwgb3IgYnJvdWdodCBiYWNrIGJ5IE9ic2lkaWFuIGZvY3VzaW5nIHRoZVxuICogICAgbmV4dCBtb2RhbCdzIGZpZWxkLCBtYWRlIHRoZSBuZXh0IGJhc2VsaW5lIGFscmVhZHktbGlmdGVkIChtZWFzdXJlZFxuICogICAgMjAyNi0wOS0yMDogZnJhbWVzIDItNSBlYWNoIGZhaWxlZCBgbGlmdD0wYCBiZXNpZGUgYG1JbnB1dFNob3duPXRydWVgLFxuICogICAgZWFjaCBmcmFtZWJ1ZmZlciBzaG93aW5nIGEgY29ycmVjdGx5IGxpZnRlZCBmaWVsZCB1bmRlciBhIGZ1bGx5IGRyYXduXG4gKiAgICBrZXlib2FyZCkuIFRoZSBhbHRlcm5hdGl2ZSB3YXMgdG8gYWNjZXB0IGBsaWZ0PTBgIHdoZW5ldmVyIHRoZSBkZXZpY2Ugc2F5c1xuICogICAgYSBrZXlib2FyZCBpcyBzaG93aW5nLCBhbmQgaXQgd2FzIHJlZnVzZWQ6IHRoYXQgaXMgYSBmcmFtZSB0aGUgaGVscGVyIGRpZFxuICogICAgbm90IHByb3ZlLCB3aGljaCBpcyB0aGUgdmFjdW91cyBwYXNzIHRoZSBkZWx0YSB3YXMgaW50cm9kdWNlZCB0byBlbmQsXG4gKiAgICByZS1vcGVuZWQgYnkgYSBkaWZmZXJlbnQgZG9vci4gU28gdGhlIGRldmljZSBpcyBhc2tlZCwgYSBzaG93aW5nIElNRSBpc1xuICogICAgcmV0cmFjdGVkIHdpdGggYEtFWUNPREVfQkFDS2AsIGFuZCB0aGUgbGlmdCBpcyBwcm92ZWQgYXMgYmVmb3JlLiBJdCBoYXMgdG9cbiAqICAgIGhhcHBlbiBIRVJFLCBub3QgYWZ0ZXIgdGhlIHByZXZpb3VzIGNhcHR1cmU6IGxvd2VyaW5nIGl0IHRoZXJlIHdhcyB0cmllZCxcbiAqICAgIGFuZCB0aGUgSU1FIGNhbWUgYmFjayBvbiBpdHMgb3duIGJlZm9yZSB0aGUgbmV4dCBiYXNlbGluZSB3YXMgcmVhZC5cbiAqXG4gKiA0LiAqKlRoYXQgdG91Y2ggZHJhd3MgYSBzZWxlY3Rpb24gaGFuZGxlIHdoZW4gaXQgbGFuZHMgaW5zaWRlIFRFWFQqKiwgYW5kIGFcbiAqICAgIGRldmljZSBjYXB0dXJlIHBob3RvZ3JhcGhzIGl0LiBDaHJvbWl1bSBzaG93cyB0aGUgaW5zZXJ0aW9uIGhhbmRsZSBvbiBhIHRhcFxuICogICAgaW50byB0ZXh0IGFuZCBub25lIG9uIGEgdGFwIGludG8gYW4gRU1QVFkgZWRpdGFibGUsIGFuZCBhIHZhbHVlIHdyaXR0ZW4gYnlcbiAqICAgIHNjcmlwdCByYWlzZXMgbm9uZSBhdCBhbGwgXHUyMDE0IHNvIHRoZSBmaWVsZCBpcyBlbXB0aWVkIGZvciB0aGUgdG91Y2ggYW5kIGl0c1xuICogICAgdGV4dCB3cml0dGVuIGJhY2sgYWZ0ZXJ3YXJkcy4gYG9ic2lkaWFuLWxpbmstcGlja2VyYCBzaGlwcGVkIGEgdGVhbCBoYW5kbGVcbiAqICAgIGluIGEgc3RvcmUgbGlzdGluZyBpbWFnZSB0d2ljZSBiZWZvcmUgYW55b25lIHdvcmtlZCBvdXQgd2hlcmUgaXQgY2FtZSBmcm9tLFxuICogICAgYW5kIG5vdGhpbmcgaW4gdGhpcyBtb2R1bGUncyBvd24gZG9jdW1lbnRhdGlvbiBvZiB0aGUgdG91Y2ggaGludGVkIGF0IGl0LlxuICogICAgU2VlIGBzaG91bGRFbXB0eUZpZWxkRm9yVG91Y2hgLlxuICpcbiAqICAgICoqQW5kIHRoZSB0ZXh0IHdyaXR0ZW4gYmFjayBoYXMgdG8gYmUgSEVMRCwgbm90IGp1c3Qgd3JpdHRlbi4qKiBUaGUgSU1FJ3MgaW5wdXQgY29ubmVjdGlvbiBzdGFydGVkIGZyb21cbiAqICAgIHRoZSBlbXB0aWVkIGZpZWxkLCBhbmQgYWJvdXQgb25lIHRpbWUgaW4gZml2ZSBpdCB3cm90ZSB0aGF0IGVtcHR5IHN0YXRlIGJhY2sgb3ZlciB0aGUgaGFybmVzcydzIHdyaXRlLFxuICogICAgc28gdGhlIGNhcHR1cmUgc3RyYWlnaHQgYWZ0ZXIgc2hvd2VkIHRoZSBwbGFjZWhvbGRlci4gVGhlIGZpZWxkIGlzIHJlLXJlYWQgdW50aWwgaXQgaG9sZHMsIGFuZCB3cml0dGVuXG4gKiAgICBhZ2FpbiB3aGVuIGl0IGRvZXMgbm90LlxuICpcbiAqIFRoZSBnZW9tZXRyeSB0aGF0IGRlY2lkZXMgd2hldGhlciBpdCB3b3JrZWQgaXMgdW5pdC10ZXN0ZWQgaW5cbiAqIGBzb2Z0LWtleWJvYXJkLWdlb21ldHJ5YDsgZXZlcnl0aGluZyBoZXJlIGRyaXZlcyBhIHJlYWwgZGV2aWNlLCBzbyB0aGUgd2hvbGVcbiAqIG1vZHVsZSBpcyBpbnRlZ3JhdGlvbi10aW1lIGNvZGUuXG4gKi9cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIEludGVncmF0aW9uLXRpbWUgY29kZSAoZHJpdmVzIGEgbGl2ZSBPYnNpZGlhbiBvbiBhIHJlYWwgZGV2aWNlKSBjb3ZlcmVkIGJ5IGludGVncmF0aW9uIHRlc3RzLCBub3QgdW5pdCB0ZXN0cy4gKi9cblxuaW1wb3J0IHtcbiAgbWtkaXJTeW5jLFxuICB3cml0ZUZpbGVTeW5jXG59IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IHsgc2V0VGltZW91dCBhcyBzbGVlcCB9IGZyb20gJ25vZGU6dGltZXJzL3Byb21pc2VzJztcblxuaW1wb3J0IHR5cGUgeyBIb2xkRmllbGRUZXh0UmVzdWx0IH0gZnJvbSAnLi9maWVsZC10ZXh0LWhvbGQubWpzJztcbmltcG9ydCB0eXBlIHtcbiAgRWxlbWVudFJlY3QsXG4gIFNvZnRLZXlib2FyZFRhcFBvaW50LFxuICBTb2Z0S2V5Ym9hcmRWaWV3cG9ydFNuYXBzaG90XG59IGZyb20gJy4vc29mdC1rZXlib2FyZC1nZW9tZXRyeS5tanMnO1xuXG5pbXBvcnQgeyBydW5BZGJUZXh0IH0gZnJvbSAnLi9hZGIubWpzJztcbmltcG9ydCB7IGNhcHR1cmVEZXZpY2VTY3JlZW5zaG90IH0gZnJvbSAnLi9kZXZpY2Utc2NyZWVuc2hvdC5tanMnO1xuaW1wb3J0IHsgZXZhbEluT2JzaWRpYW4gfSBmcm9tICcuL2V2YWwtaW4tb2JzaWRpYW4ubWpzJztcbmltcG9ydCB7IGhvbGRGaWVsZFRleHQgfSBmcm9tICcuL2ZpZWxkLXRleHQtaG9sZC5tanMnO1xuaW1wb3J0IHsgbG9nIH0gZnJvbSAnLi9sb2cubWpzJztcbmltcG9ydCB7XG4gIGJ1aWxkU29mdEtleWJvYXJkRGlhZ25vc3RpY01lc3NhZ2UsXG4gIGNoZWNrSXNJbnB1dE1ldGhvZFNob3duLFxuICBjaGVja0lzU29mdEtleWJvYXJkVXAsXG4gIHBhcnNlSW5wdXRNZXRob2RTdGF0ZSxcbiAgcmVzb2x2ZVNvZnRLZXlib2FyZFRhcFBvaW50c1xufSBmcm9tICcuL3NvZnQta2V5Ym9hcmQtZ2VvbWV0cnkubWpzJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcmFpc2VTb2Z0S2V5Ym9hcmR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJhaXNlU29mdEtleWJvYXJkUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBkZXZpY2UgdG8gdG91Y2guXG4gICAqL1xuICByZWFkb25seSBkZXZpY2VJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGVyZSBhIGZhaWxlZCBhdHRlbXB0IHdyaXRlcyB0aGUgZGV2aWNlIGZyYW1lYnVmZmVyLlxuICAgKlxuICAgKiBXaGVuIG9taXR0ZWQsIGl0IGlzIGBkaXN0L3NjcmVlbnNob3RzYCB1bmRlciB0aGUgd29ya2luZyBkaXJlY3RvcnkgXHUyMDE0IHJlc29sdmVkIGF0IGxvYWQsIHNvIHRoZXJlIGlzIG5vXG4gICAqIGxpdGVyYWwgZGVmYXVsdCB0byBzdGF0ZSBoZXJlLlxuICAgKi9cbiAgcmVhZG9ubHkgZGlhZ25vc3RpY3NEaXJlY3Rvcnk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBDU1Mgc2VsZWN0b3Igb2YgdGhlIGZpZWxkIHRvIHRvdWNoLCBlLmcuIGAucHJvbXB0LWlucHV0YC5cbiAgICovXG4gIHJlYWRvbmx5IGlucHV0U2VsZWN0b3I6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGxlYXN0IGEgcmFpc2VkIGtleWJvYXJkIGxpZnRzIHRoZSBmaWVsZCBieS5cbiAgICpcbiAgICogV2hlbiBvbWl0dGVkLCBgREVGQVVMVF9NSU5JTVVNX0tFWUJPQVJEX0hFSUdIVF9JTl9QSVhFTFNgIGZyb20gYHNvZnQta2V5Ym9hcmQtZ2VvbWV0cnlgIGFwcGxpZXMuXG4gICAqL1xuICByZWFkb25seSBtaW5pbXVtS2V5Ym9hcmRIZWlnaHRJblBpeGVscz86IG51bWJlcjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBlbXB0eSB0aGUgZmllbGQgYmVmb3JlIHRoZSB0b3VjaCwgYW5kIHdyaXRlIGl0cyB0ZXh0IGJhY2sgYWZ0ZXJ3YXJkcy5cbiAgICpcbiAgICogKipPbiBieSBkZWZhdWx0LCBiZWNhdXNlIHRoZSB0b3VjaCB0aGF0IHJhaXNlcyB0aGUga2V5Ym9hcmQgYWxzbyBkcmF3cyBhIHNlbGVjdGlvbiBoYW5kbGUgd2hlbiBpdFxuICAgKiBsYW5kcyBpbnNpZGUgVEVYVC4qKiBDaHJvbWl1bSBzaG93cyB0aGUgaW5zZXJ0aW9uIGhhbmRsZSBvbiBhIHRhcCBpbnRvIHRleHQgYW5kIGRyYXdzIG5vbmUgb24gYSB0YXBcbiAgICogaW50byBhbiBFTVBUWSBlZGl0YWJsZSwgYW5kIGEgZGV2aWNlIGNhcHR1cmUgcGhvdG9ncmFwaHMgaXQgXHUyMDE0IHdoaWNoIGlzIGhvdyBgb2JzaWRpYW4tbGluay1waWNrZXJgXG4gICAqIHNoaXBwZWQgYSB0ZWFsIGhhbmRsZSBpbiBhIHN0b3JlIGxpc3RpbmcgaW1hZ2UgdHdpY2UgYmVmb3JlIGFueW9uZSB1bmRlcnN0b29kIHdoZXJlIGl0IGNhbWUgZnJvbS4gQVxuICAgKiB2YWx1ZSB3cml0dGVuIGJ5IHNjcmlwdCByYWlzZXMgbm8gaGFuZGxlLCBzbyBlbXB0eWluZyB0aGUgZmllbGQsIHRvdWNoaW5nIGl0LCBhbmQgd3JpdGluZyB0aGUgdGV4dFxuICAgKiBiYWNrIGxlYXZlcyB0aGUgZnJhbWUgc2hvd2luZyB0aGUgc2FtZSBxdWVyeSB3aXRoIG5vdGhpbmcgaGFuZ2luZyBvZmYgaXQuXG4gICAqXG4gICAqIE9ubHkgYW4gYDxpbnB1dD5gIG9yIGEgYDx0ZXh0YXJlYT5gIGlzIGVtcHRpZWQuIEEgYGNvbnRlbnRlZGl0YWJsZWAgaG9sZGluZyB0ZXh0IGlzIFJFRlVTRUQgcmF0aGVyXG4gICAqIHRoYW4gd3JpdHRlbiB0bzogaXRzIGNvbnRlbnQgdXN1YWxseSBiZWxvbmdzIHRvIGFuIGVkaXRvciB0aGF0IG93bnMgaXRzIG93biBET00sIGFuZCBibGFua2luZyB0aGF0XG4gICAqIGJ5IGhhbmQgZGVzdHJveXMgaXQuIEVtcHR5IHN1Y2ggYSBmaWVsZCB5b3Vyc2VsZiwgb3IgdHVybiB0aGlzIG9mZi5cbiAgICpcbiAgICogVHVybmluZyBpdCBvZmYgcmVzdG9yZXMgdGhlIHByZS0yMDI2LTA5LTIzIGJlaGF2aW91ciBleGFjdGx5OiB0aGUgZmllbGQgaXMgdG91Y2hlZCBhcyBpdCBzdGFuZHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEVtcHR5RmllbGRGb3JUb3VjaD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSB2YXVsdCB0byByZWFkIHRoZSBnZW9tZXRyeSBmcm9tLiBXaGVuIG9taXR0ZWQsIHRoZSBjdXJyZW50IHRlc3QgY29udGV4dCdzIHZhdWx0IGlzIHVzZWQuXG4gICAqL1xuICByZWFkb25seSB2YXVsdFBhdGg/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHRhcERldmljZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFwRGV2aWNlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBkZXZpY2UgdG8gdG91Y2guXG4gICAqL1xuICByZWFkb25seSBkZXZpY2VJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGVyZSB0byB0b3VjaCBpdC5cbiAgICovXG4gIHJlYWRvbmx5IHBvaW50OiBTb2Z0S2V5Ym9hcmRUYXBQb2ludDtcbn1cblxuLyoqXG4gKiBXaGVyZSBhIGZhaWxlZCBhdHRlbXB0IGxlYXZlcyBpdHMgZXZpZGVuY2UgXHUyMDE0IHVuZGVyIGBkaXN0L2AsIHdoaWNoIGEgcGx1Z2luIHJlcG8gdXNpbmcgdGhpcyBoYXJuZXNzIGdpdGlnbm9yZXMsIGxpa2UgdGhlIGNhcHR1cmUgc2NyYXRjaCBmaWxlcy5cbiAqL1xuY29uc3QgREVGQVVMVF9ESUFHTk9TVElDU19ESVJFQ1RPUlkgPSBqb2luKHByb2Nlc3MuY3dkKCksICdkaXN0JywgJ3NjcmVlbnNob3RzJyk7XG5cbi8qKlxuICogSG93IGxvbmcgdGhlIElNRSB0YWtlcyB0byBmaW5pc2ggYW5pbWF0aW5nIGluLCBhZnRlciB3aGljaCB0aGUgbGF5b3V0IGhhcyBzZXR0bGVkLlxuICovXG5jb25zdCBLRVlCT0FSRF9TRVRUTEVfREVMQVlfSU5fTUlMTElTRUNPTkRTID0gMTUwMDtcblxuLyoqXG4gKiBIb3cgbG9uZyB0aGUgSU1FIHRha2VzIHRvIGZpbmlzaCBhbmltYXRpbmcgb3V0IGFmdGVyIGBLRVlDT0RFX0JBQ0tgLCBtZWFzdXJlZCBpbiB0aGUgY2FwdHVyZSBzdWl0ZSB0aGlzXG4gKiB3YXMgbW92ZWQgb3V0IG9mLlxuICovXG5jb25zdCBLRVlCT0FSRF9SRVRSQUNUX0RFTEFZX0lOX01JTExJU0VDT05EUyA9IDkwMDtcblxuLyoqXG4gKiBIb3cgbWFueSB0aW1lcyBgS0VZQ09ERV9CQUNLYCBpcyBwcmVzc2VkIGJlZm9yZSBhIGtleWJvYXJkIHRoYXQgd2lsbCBub3QgZ28gZG93biBpcyByZXBvcnRlZC5cbiAqXG4gKiBUd28sIGJlY2F1c2UgdGhlIGZpcnN0IHByZXNzIGNhbiBsYW5kIHdoaWxlIHRoZSBJTUUgaXMgc3RpbGwgYW5pbWF0aW5nIFVQIGZyb20gdGhlIGZvY3VzIHRoYXQgcmFpc2VkXG4gKiBpdCwgYW5kIGFuIElNRSBtaWQtYW5pbWF0aW9uIHN3YWxsb3dzIHRoZSBrZXkgd2l0aG91dCByZXRyYWN0aW5nLlxuICovXG5jb25zdCBLRVlCT0FSRF9SRVRSQUNUX0FUVEVNUFRfQ09VTlQgPSAyO1xuXG4vKipcbiAqIEhvdyBsb25nIGEga2V5Ym9hcmQgcmVwb3J0ZWQgc2hvd2luZyBpcyB3YXRjaGVkIGJlZm9yZSBgS0VZQ09ERV9CQUNLYCBpcyBwcmVzc2VkIGF0IGl0LlxuICpcbiAqIE9uZSByZXRyYWN0IGFuaW1hdGlvbjogYW4gSU1FIGFscmVhZHkgb24gaXRzIHdheSBkb3duIFx1MjAxNCB0aGUgbW9kYWwgdGhhdCByYWlzZWQgaXQgaGFzIGp1c3QgY2xvc2VkIFx1MjAxNCBpc1xuICogc3RpbGwgcmVwb3J0ZWQgc2hvd2luZyBieSBhIHJlYWQgdGFrZW4gYXQgdGhlIHN0YXJ0IG9mIGl0cyByZXRyYWN0LCBhbmQgaXMgZ29uZSBieSB0aGUgZW5kIG9mIGl0LiBQcmVzc2luZ1xuICogYXQgdGhlIGZpcnN0IHJlYWQgdGhlbiBsYW5kcyB0aGUga2V5IG9uIHRoZSBhcHAgaW5zdGVhZCwgd2hpY2ggY2xvc2VzIHRoZSBtb2RhbCB0aGUgZnJhbWUgaXMgYWJvdXQgdG9cbiAqIHBob3RvZ3JhcGguIFR3byByZWFkcyB0aGF0IGFncmVlIGFjcm9zcyB0aGlzIHdpbmRvdyBzYXkgdGhlIGtleWJvYXJkIGlzIHN0YXlpbmcgdXAuXG4gKi9cbmNvbnN0IEtFWUJPQVJEX1NIT1dOX0NPTkZJUk1BVElPTl9ERUxBWV9JTl9NSUxMSVNFQ09ORFMgPSBLRVlCT0FSRF9SRVRSQUNUX0RFTEFZX0lOX01JTExJU0VDT05EUztcblxuLyoqXG4gKiBXaGF0IGEgZmllbGQgaG9sZHMsIGFuZCB3aGV0aGVyIGl0IGlzIG9uZSB0aGlzIGNhbiBwdXQgYmFjay5cbiAqL1xuaW50ZXJmYWNlIEZpZWxkQ29udGVudCB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBmaWVsZCdzIHZhbHVlIGNhbiBiZSB3cml0dGVuIFx1MjAxNCB0cnVlIGZvciBhbiBgPGlucHV0PmAgb3IgYSBgPHRleHRhcmVhPmAsIGZhbHNlIGZvclxuICAgKiBhbnl0aGluZyBlbHNlLCB3aG9zZSBjb250ZW50IHVzdWFsbHkgYmVsb25ncyB0byBhbiBlZGl0b3IgdGhhdCBvd25zIGl0cyBvd24gRE9NLlxuICAgKi9cbiAgcmVhZG9ubHkgY2FuV3JpdGU6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSB0ZXh0IHRoZSBmaWVsZCBjdXJyZW50bHkgaG9sZHMuXG4gICAqL1xuICByZWFkb25seSB0ZXh0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmFpc2VzIHRoZSBvbi1zY3JlZW4ga2V5Ym9hcmQgd2l0aCBhIHJlYWwgdG91Y2ggb24gYSBmaWVsZCwgYW5kIGNvbmZpcm1zIGl0IGNhbWUgdXAuXG4gKlxuICogQ2FsbCBpdCBpbnNpZGUgYHdpdGhTb2Z0S2V5Ym9hcmRFbmFibGVkYCBcdTIwMTQgdGhlIGRldmljZSBzZXR0aW5nIGFsb25lIGRvZXMgbm90IHJhaXNlIHRoZSBrZXlib2FyZCwgYW5kIHRoaXNcbiAqIHRvdWNoIGFsb25lIGNhbm5vdCB3aGlsZSB0aGUgc2V0dGluZyBzdXBwcmVzc2VzIGl0LlxuICpcbiAqICoqQSBrZXlib2FyZCB0aGF0IGlzIGFscmVhZHkgdXAgaXMgcHV0IERPV04gZmlyc3QuKiogVGhlIGZpcnN0IGdlb21ldHJ5IHJlYWQgaXMgdGhlIGJhc2VsaW5lIGV2ZXJ5IGxhdGVyXG4gKiByZWFkIGlzIGNvbXBhcmVkIGFnYWluc3QsIHNvIGEga2V5Ym9hcmQgYWxyZWFkeSB1cCB3b3VsZCBsZWF2ZSB0aGUgZmllbGQgbm90aGluZyB0byBsaWZ0IGJ5IGFuZCByZWFkIGFzXG4gKiBvbmUgdGhhdCBuZXZlciBjYW1lLiBUaGUgZGV2aWNlIGlzIGFza2VkIGJlZm9yZSBhbnl0aGluZyBlbHNlLCBhbmQgYSBzaG93aW5nIElNRSBpcyByZXRyYWN0ZWQgd2l0aFxuICogYEtFWUNPREVfQkFDS2AgXHUyMDE0IGFza2VkIEZJUlNUIGJlY2F1c2UsIHdpdGggbm8gSU1FIHNob3dpbmcsIHRoYXQga2V5IHJlYWNoZXMgdGhlIGFwcCBhbmQgY2xvc2VzIHRoZSB2ZXJ5XG4gKiBtb2RhbCB0aGUgZnJhbWUgaXMgYWJvdXQgdG8gcGhvdG9ncmFwaC4gU28gdGhlIGhlbHBlciBpcyBzYWZlIHRvIGNhbGwgb25jZSBwZXIgZnJhbWUgb2YgYSBtdWx0aS1mcmFtZVxuICogc3VpdGUsIGFuZCBldmVyeSBjYWxsIHN0aWxsIHByb3ZlcyBpdHMgb3duIGxpZnQuIFRoZSBvdGhlciBhbnN3ZXIgXHUyMDE0IGFjY2VwdGluZyBhIHplcm8gbGlmdCB3aGVuZXZlciB0aGVcbiAqIGRldmljZSByZXBvcnRzIGEga2V5Ym9hcmQgXHUyMDE0IHdhcyByZWZ1c2VkLCBiZWNhdXNlIGl0IGFjY2VwdHMgYSBmcmFtZSB0aGUgaGVscGVyIGRpZCBub3QgcHJvdmUuXG4gKlxuICogKipUaGUgZmllbGQgaXMgRU1QVElFRCBmb3IgdGhlIHRvdWNoIGFuZCB3cml0dGVuIGJhY2sgYWZ0ZXJ3YXJkcyoqLCBiZWNhdXNlIGEgdG91Y2ggdGhhdCBsYW5kcyBpbnNpZGVcbiAqIHRleHQgZHJhd3MgQ2hyb21pdW0ncyBzZWxlY3Rpb24gaGFuZGxlIGFuZCB0aGUgZnJhbWVidWZmZXIgcGhvdG9ncmFwaHMgaXQgXHUyMDE0IHNlZVxuICoge0BsaW5rIFJhaXNlU29mdEtleWJvYXJkUGFyYW1zLnNob3VsZEVtcHR5RmllbGRGb3JUb3VjaH0sIHdoaWNoIHR1cm5zIHRoYXQgb2ZmLlxuICpcbiAqICoqVGhlIGdlb21ldHJ5IHJldHVybmVkIGlzIHJlYWQgd2l0aCB0aGUgZmllbGQgc3RpbGwgZW1wdHkqKiwgYW5kIHRoZSB0ZXh0IGlzIHdyaXR0ZW4gYmFjayBhZnRlciBpdC5cbiAqIFRoYXQgaXMgdGhlIHN0YXRlIHRoZSBwcm92ZW4gY2FwdHVyZSBzdWl0ZXMgYXNzZXJ0IGFnYWluc3QsIGFuZCBpdCBpcyBkZWxpYmVyYXRlIHJhdGhlciB0aGFuXG4gKiBpbmNpZGVudGFsOiB0aGUgYmFzZWxpbmUgaXMgcmVhZCBBRlRFUiB0aGUgZmllbGQgaXMgZW1wdGllZCwgc28gdGhlIGxpZnQgaXMgbWVhc3VyZWQgYmV0d2VlbiB0d28gcmVhZHNcbiAqIG9mIHRoZSBzYW1lIGZpZWxkIGNvbnRlbnQuIEEgZmllbGQgd2hvc2Ugb3duIHRleHQgY2hhbmdlcyB0aGUgbGF5b3V0IGFyb3VuZCBpdCBcdTIwMTQgYSBzdWdnZXN0ZXIgd2hvc2Ugcm93XG4gKiBjb3VudCBhbnN3ZXJzIHRoZSBxdWVyeSBcdTIwMTQgbW92ZXMgd2hlbiBpdCBpcyBjbGVhcmVkLCBhbmQgYSBkZWx0YSBtZWFzdXJlZCBhY3Jvc3MgdGhhdCBtb3ZlIGlzIG5vdCBhXG4gKiBrZXlib2FyZC4gUmVhZCB0aGUgZ2VvbWV0cnkgYWdhaW4geW91cnNlbGYgaWYgdGhlIHJlc3RvcmVkIHRleHQgbW92ZXMgYW55dGhpbmcgeW91IGFyZSBhYm91dCB0byBhc3NlcnRcbiAqIG9uLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZGV2aWNlLCB0aGUgZmllbGQgdG8gdG91Y2gsIGFuZCBob3cgZmFyIGl0IG11c3QgbGlmdC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGdlb21ldHJ5IHJlYWQgb25jZSB0aGUga2V5Ym9hcmQgaXMgdXAuXG4gKiBAdGhyb3dzIEVycm9yIGlmIGEga2V5Ym9hcmQgYWxyZWFkeSB1cCB3b3VsZCBub3QgZ28gZG93biwgaWYgdGhlIGZpZWxkIG5ldmVyIG1hdGNoZWQsIGlmIGl0IGhvbGRzIHRleHRcbiAqICAgdGhpcyBjYW5ub3QgZW1wdHkgYW5kIHB1dCBiYWNrLCBpZiBpdCBuZXZlciBsaWZ0ZWQgXHUyMDE0IGFmdGVyIHdyaXRpbmcgdGhlIGRldmljZSBmcmFtZWJ1ZmZlciBhbmQgdGhlXG4gKiAgIGRldmljZSdzIG93biBgaW5wdXRfbWV0aG9kYCBzdGF0ZSB0byB0aGUgZGlhZ25vc3RpY3MgZGlyZWN0b3J5IFx1MjAxNCBvciBpZiB0aGUgdGV4dCB3cml0dGVuIGJhY2sgd291bGQgbm90XG4gKiAgIHN0YXkgaW4gdGhlIGZpZWxkLiBBIHdyaXRlLWJhY2sgdGhlIElNRSB1bmRvZXMgaXMgd3JpdHRlbiBhZ2FpbiB1bnRpbCBpdCBob2xkczsgc2VlIGByZXN0b3JlRmllbGRUZXh0YC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJhaXNlU29mdEtleWJvYXJkKHBhcmFtczogUmFpc2VTb2Z0S2V5Ym9hcmRQYXJhbXMpOiBQcm9taXNlPFNvZnRLZXlib2FyZFZpZXdwb3J0U25hcHNob3Q+IHtcbiAgYXdhaXQgbG93ZXJTb2Z0S2V5Ym9hcmRJZlNob3duKHBhcmFtcyk7XG5cbiAgY29uc3QgdGV4dFRvUmVzdG9yZSA9IGF3YWl0IGVtcHR5RmllbGRGb3JUb3VjaChwYXJhbXMpO1xuXG4gIGxldCBzbmFwc2hvdDogU29mdEtleWJvYXJkVmlld3BvcnRTbmFwc2hvdDtcblxuICB0cnkge1xuICAgIHNuYXBzaG90ID0gYXdhaXQgdGFwVW50aWxLZXlib2FyZElzVXAocGFyYW1zKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAvLyBSZXN0b3JlZCBldmVuIHdoZW4gdGhlIHJhaXNlIGZhaWxlZDogYSBjYWxsZXIgdGhhdCBpcyBhYm91dCB0byByZWFkIGl0cyBvd24gZGlhZ25vc3RpYyBzaG91bGQgbm90XG4gICAgLy8gYWxzbyBoYXZlIHRvIGRpc2NvdmVyIHRoYXQgaXRzIHF1ZXJ5IGlzIGdvbmUuIEJlc3QtZWZmb3J0LCBzbyB0aGUgcmFpc2UncyBvd24gZXJyb3IgaXMgdGhlIG9uZSB0aHJvd24uXG4gICAgaWYgKHRleHRUb1Jlc3RvcmUgIT09IG51bGwpIHtcbiAgICAgIGF3YWl0IGhvbGRGaWVsZFRleHRCZXN0RWZmb3J0KHBhcmFtcywgdGV4dFRvUmVzdG9yZSk7XG4gICAgfVxuXG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cblxuICBpZiAodGV4dFRvUmVzdG9yZSAhPT0gbnVsbCkge1xuICAgIGF3YWl0IHJlc3RvcmVGaWVsZFRleHQocGFyYW1zLCB0ZXh0VG9SZXN0b3JlKTtcbiAgfVxuXG4gIHJldHVybiBzbmFwc2hvdDtcbn1cblxuLyoqXG4gKiBUb3VjaGVzIHRoZSBkZXZpY2UgYXQgYSBwb2ludCwgdGhlIHdheSBhIHRodW1iIHdvdWxkLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZGV2aWNlIGFuZCB3aGVyZSB0byB0b3VjaCBpdC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgdG91Y2ggaGFzIGJlZW4gZGlzcGF0Y2hlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRhcERldmljZShwYXJhbXM6IFRhcERldmljZVBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBydW5BZGJUZXh0KHtcbiAgICBjb21tYW5kQXJndW1lbnRzOiBbJ3NoZWxsJywgJ2lucHV0JywgJ3RhcCcsIFN0cmluZyhwYXJhbXMucG9pbnQueEluUGl4ZWxzKSwgU3RyaW5nKHBhcmFtcy5wb2ludC55SW5QaXhlbHMpXSxcbiAgICBkZXZpY2VJZDogcGFyYW1zLmRldmljZUlkXG4gIH0pO1xufVxuXG4vKipcbiAqIFdyaXRlcyB0aGUgZGV2aWNlIGZyYW1lYnVmZmVyIGFuZCByZWFkcyB0aGUgZGV2aWNlJ3MgYGlucHV0X21ldGhvZGAgc3RhdGUsIHRoZW4gY29tcG9zZXMgdGhlIGZhaWx1cmUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBkZXZpY2UgYW5kIHRoZSBkaWFnbm9zdGljcyBkaXJlY3RvcnkuXG4gKiBAcGFyYW0gYmFzZWxpbmVTbmFwc2hvdCAtIFRoZSBnZW9tZXRyeSByZWFkIGJlZm9yZSB0aGUgZmlyc3QgdG91Y2gsIHdoaWNoIHRoZSB2ZXJkaWN0IGlzIG1lYXN1cmVkIGFnYWluc3QuXG4gKiBAcGFyYW0gc25hcHNob3QgLSBUaGUgZ2VvbWV0cnkgcmVhZCBhZnRlciB0aGUgbGFzdCB0b3VjaC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIG1lc3NhZ2UgdG8gdGhyb3cuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkRmFpbHVyZU1lc3NhZ2UoXG4gIHBhcmFtczogUmFpc2VTb2Z0S2V5Ym9hcmRQYXJhbXMsXG4gIGJhc2VsaW5lU25hcHNob3Q6IFNvZnRLZXlib2FyZFZpZXdwb3J0U25hcHNob3QsXG4gIHNuYXBzaG90OiBTb2Z0S2V5Ym9hcmRWaWV3cG9ydFNuYXBzaG90XG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBkaWFnbm9zdGljc0RpcmVjdG9yeSA9IHBhcmFtcy5kaWFnbm9zdGljc0RpcmVjdG9yeSA/PyBERUZBVUxUX0RJQUdOT1NUSUNTX0RJUkVDVE9SWTtcbiAgbWtkaXJTeW5jKGRpYWdub3N0aWNzRGlyZWN0b3J5LCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICBjb25zdCBzY3JlZW5zaG90UGF0aCA9IGpvaW4oZGlhZ25vc3RpY3NEaXJlY3RvcnksICdrZXlib2FyZC1ub3QtcmFpc2VkLnBuZycpO1xuICB3cml0ZUZpbGVTeW5jKHNjcmVlbnNob3RQYXRoLCBhd2FpdCBjYXB0dXJlRGV2aWNlU2NyZWVuc2hvdCh7IGRldmljZUlkOiBwYXJhbXMuZGV2aWNlSWQgfSkpO1xuXG4gIHJldHVybiBidWlsZFNvZnRLZXlib2FyZERpYWdub3N0aWNNZXNzYWdlKHtcbiAgICBiYXNlbGluZVNuYXBzaG90LFxuICAgIGlucHV0TWV0aG9kU3RhdGU6IGF3YWl0IHJlYWRJbnB1dE1ldGhvZFN0YXRlKHBhcmFtcyksXG4gICAgc2NyZWVuc2hvdFBhdGgsXG4gICAgc25hcHNob3RcbiAgfSk7XG59XG5cbi8qKlxuICogV2hldGhlciBhbnl0aGluZyBpbiB0aGUgcGFnZSBtYXRjaGVzIHRoZSBmaWVsZCdzIHNlbGVjdG9yLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZmllbGQgdG8gbG9vayBmb3IuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHdoZXRoZXIgaXQgbWF0Y2hlZC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gY2hlY2tJc0ZpZWxkUHJlc2VudChwYXJhbXM6IFJhaXNlU29mdEtleWJvYXJkUGFyYW1zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIHJldHVybiBhd2FpdCBldmFsSW5PYnNpZGlhbih7XG4gICAgY2FsbGJhY2soeyBpbnB1dFNlbGVjdG9yIH0pOiBib29sZWFuIHtcbiAgICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGlucHV0U2VsZWN0b3IpICE9PSBudWxsO1xuICAgIH0sXG4gICAgaW5wdXQ6IHsgaW5wdXRTZWxlY3RvcjogcGFyYW1zLmlucHV0U2VsZWN0b3IgfSxcbiAgICAuLi4ocGFyYW1zLnZhdWx0UGF0aCAhPT0gdW5kZWZpbmVkICYmIHsgdmF1bHRQYXRoOiBwYXJhbXMudmF1bHRQYXRoIH0pXG4gIH0pO1xufVxuXG4vKipcbiAqIEVtcHRpZXMgdGhlIGZpZWxkIHRoZSB0b3VjaCBpcyBhYm91dCB0byBsYW5kIG9uLCBhbmQgcmVwb3J0cyB3aGF0IHRvIHdyaXRlIGJhY2suXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBmaWVsZCB0byBlbXB0eSwgYW5kIHdoZXRoZXIgdG8gZW1wdHkgaXQgYXQgYWxsLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgdGV4dCB0byByZXN0b3JlLCBvciBgbnVsbGAgd2hlbiBub3RoaW5nIHdhcyBlbXB0aWVkLlxuICogQHRocm93cyBFcnJvciBpZiB0aGUgZmllbGQgaG9sZHMgdGV4dCB0aGF0IGNhbm5vdCBiZSB3cml0dGVuIGJhY2sgXHUyMDE0IGEgYGNvbnRlbnRlZGl0YWJsZWAsIHdob3NlIGNvbnRlbnRcbiAqICAgYmVsb25ncyB0byBhbiBlZGl0b3IgdGhhdCBvd25zIGl0cyBvd24gRE9NLlxuICovXG5hc3luYyBmdW5jdGlvbiBlbXB0eUZpZWxkRm9yVG91Y2gocGFyYW1zOiBSYWlzZVNvZnRLZXlib2FyZFBhcmFtcyk6IFByb21pc2U8bnVsbCB8IHN0cmluZz4ge1xuICBpZiAocGFyYW1zLnNob3VsZEVtcHR5RmllbGRGb3JUb3VjaCA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCByZWFkRmllbGRDb250ZW50KHBhcmFtcyk7XG5cbiAgLy8gTm90aGluZyBtYXRjaGVkLiBUaGUgZ2VvbWV0cnkgcmVhZCBkb2VzIHRoZSByZXBvcnRpbmcsIHdpdGggdGhlIG1lc3NhZ2UgaXQgYWx3YXlzIGhhZC5cbiAgaWYgKCFjb250ZW50IHx8IGNvbnRlbnQudGV4dCA9PT0gJycpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmICghY29udGVudC5jYW5Xcml0ZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGByYWlzZVNvZnRLZXlib2FyZDogXCIke3BhcmFtcy5pbnB1dFNlbGVjdG9yfVwiIGhvbGRzIHRleHQgYnV0IGlzIG5vdCBhbiA8aW5wdXQ+IG9yIGEgPHRleHRhcmVhPiwgc28gaXQgYFxuICAgICAgICArICdjYW5ub3QgYmUgZW1wdGllZCBmb3IgdGhlIHRvdWNoIGFuZCB3cml0dGVuIGJhY2suIFRoZSB0b3VjaCB3b3VsZCBsYW5kIGluc2lkZSB0ZXh0IGFuZCBkcmF3IGEgJ1xuICAgICAgICArICdzZWxlY3Rpb24gaGFuZGxlLCB3aGljaCBhIGRldmljZSBjYXB0dXJlIHBob3RvZ3JhcGhzLiBFbXB0eSB0aGUgZmllbGQgeW91cnNlbGYgYmVmb3JlIGNhbGxpbmcsIG9yICdcbiAgICAgICAgKyAncGFzcyBzaG91bGRFbXB0eUZpZWxkRm9yVG91Y2g6IGZhbHNlIHRvIHRvdWNoIGl0IGFzIGl0IHN0YW5kcy4nXG4gICAgKTtcbiAgfVxuXG4gIGF3YWl0IHdyaXRlRmllbGRUZXh0KHBhcmFtcywgJycpO1xuXG4gIHJldHVybiBjb250ZW50LnRleHQ7XG59XG5cbi8qKlxuICogSG9sZHMgdGhlIHRleHQgaW4gdGhlIGZpZWxkIHdpdGhvdXQgZXZlciB0aHJvd2luZyBcdTIwMTQgdGhlIHJlc3RvcmUgb24gYSByYWlzZSB0aGF0IGFscmVhZHkgZmFpbGVkLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZmllbGQgdG8gd3JpdGUuXG4gKiBAcGFyYW0gdGV4dCAtIFdoYXQgaXQgbXVzdCBob2xkLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBob2xkIGhhcyBydW4sIHdoYXRldmVyIGl0IGZvdW5kLlxuICovXG5hc3luYyBmdW5jdGlvbiBob2xkRmllbGRUZXh0QmVzdEVmZm9ydChwYXJhbXM6IFJhaXNlU29mdEtleWJvYXJkUGFyYW1zLCB0ZXh0OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgdHJ5IHtcbiAgICBhd2FpdCBob2xkVGV4dEluRmllbGQocGFyYW1zLCB0ZXh0KTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gVGhlIHJhaXNlJ3Mgb3duIGZhaWx1cmUgaXMgd2hhdCB0aGUgY2FsbGVyIG5lZWRzIHRvIHNlZTsgYSBmaWVsZCB0aGF0IGlzIGdvbmUgYXMgd2VsbCBhZGRzIG5vdGhpbmcgdG8gaXQuXG4gIH1cbn1cblxuLyoqXG4gKiBXcml0ZXMgdGhlIHRleHQgaW50byB0aGUgZmllbGQgYW5kIGhvbGRzIGl0IHRoZXJlLCBwZXIge0BsaW5rIGhvbGRGaWVsZFRleHR9LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZmllbGQgdG8gd3JpdGUuXG4gKiBAcGFyYW0gdGV4dCAtIFdoYXQgaXQgbXVzdCBob2xkLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB3aGF0IHRoZSBob2xkIGZvdW5kLlxuICovXG5hc3luYyBmdW5jdGlvbiBob2xkVGV4dEluRmllbGQocGFyYW1zOiBSYWlzZVNvZnRLZXlib2FyZFBhcmFtcywgdGV4dDogc3RyaW5nKTogUHJvbWlzZTxIb2xkRmllbGRUZXh0UmVzdWx0PiB7XG4gIHJldHVybiBhd2FpdCBob2xkRmllbGRUZXh0KHtcbiAgICBleHBlY3RlZFRleHQ6IHRleHQsXG4gICAgYXN5bmMgcmVhZFRleHQoKTogUHJvbWlzZTxudWxsIHwgc3RyaW5nPiB7XG4gICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgcmVhZEZpZWxkQ29udGVudChwYXJhbXMpO1xuICAgICAgcmV0dXJuIGNvbnRlbnQ/LnRleHQgPz8gbnVsbDtcbiAgICB9LFxuICAgIHNsZWVwLFxuICAgIGFzeW5jIHdyaXRlVGV4dCh2YWx1ZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICBhd2FpdCB3cml0ZUZpZWxkVGV4dChwYXJhbXMsIHZhbHVlKTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIFB1dHMgdGhlIGtleWJvYXJkIGRvd24gd2hlbiB0aGUgZGV2aWNlIHJlcG9ydHMgb25lIHNob3dpbmcsIHNvIHRoZSBiYXNlbGluZSByZWFkIG5leHQgaXMgb25lIHRoZSB0b3VjaFxuICogY2FuIGxpZnQgdGhlIGZpZWxkIGZyb20uXG4gKlxuICogKipBIGtleWJvYXJkIGlzIHByZXNzZWQgYXQgb25seSBvbmNlIGl0IGhhcyBiZWVuIHJlcG9ydGVkIHNob3dpbmcgVFdJQ0UsIG9uZSByZXRyYWN0IGFuaW1hdGlvbiBhcGFydC4qKlxuICogYEtFWUNPREVfQkFDS2AgaXMgcmV0cmFjdGVkIGJ5IHRoZSBJTUUgb25seSB3aGlsZSB0aGUgSU1FIGlzIHVwOyBvbmNlIGl0IGhhcyBnb25lLCB0aGUga2V5IHJlYWNoZXMgdGhlXG4gKiBhcHAsIGFuZCBPYnNpZGlhbiBjbG9zZXMgdGhlIG1vZGFsIG9uIHNjcmVlbiBcdTIwMTQgdGhlIG9uZSB0aGUgY2FsbGVyIGlzIGFib3V0IHRvIHBob3RvZ3JhcGguIEEga2V5Ym9hcmRcbiAqIGFscmVhZHkgb24gaXRzIHdheSBkb3duICh0aGUgbW9kYWwgdGhhdCByYWlzZWQgaXQgaGFzIGp1c3QgY2xvc2VkLCBhbmQgdGhlIGNhbGxlciBvcGVuZWQgYSBmcmVzaCBvbmVcbiAqIHN0cmFpZ2h0IGFmdGVyKSBpcyBzdGlsbCByZXBvcnRlZCBzaG93aW5nIGF0IHRoZSBzdGFydCBvZiBpdHMgcmV0cmFjdCwgc28gcHJlc3NpbmcgYXQgdGhlIGZpcnN0IHJlYWRcbiAqIHJhY2VkIGl0LiBJdCBpcyB3YXRjaGVkIGZvciBvbmUgcmV0cmFjdCBhbmltYXRpb24gZmlyc3QsIGFuZCBhIGtleWJvYXJkIHRoYXQgd2VudCBkb3duIG9uIGl0cyBvd24gaXNcbiAqIGxlZnQgYWxvbmUuXG4gKlxuICogKipBbmQgYSBwcmVzcyB0aGF0IHJlYWNoZWQgdGhlIGFwcCBhbnl3YXkgaXMgbmFtZWQgYXMgdGhhdC4qKiBUaGUgZmllbGQgaXMgbG9va2VkIHVwIGJlZm9yZSB0aGUgcHJlc3NcbiAqIGFuZCBhZnRlciBpdDsgb25lIHRoYXQgbWF0Y2hlZCBiZWZvcmUgYW5kIG5vdCBhZnRlciB3YXMgY2xvc2VkIGJ5IHRoZSBrZXksIGFuZCBzYXlpbmcgc28gYmVhdHMgdGhlXG4gKiBgbm90aGluZyBtYXRjaGVzYCB0aGF0IHRoZSByYWlzZSB3b3VsZCBvdGhlcndpc2UgcmVwb3J0IGEgc3RlcCBsYXRlciwgYWJvdXQgYSBzZWxlY3RvciB0aGF0IHdhcyByaWdodC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGRldmljZSB0byBhc2ssIGFuZCB0aGUgZmllbGQgdGhhdCBtdXN0IHN1cnZpdmUgdGhlIHByZXNzLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIG5vIGtleWJvYXJkIGlzIHNob3dpbmcuXG4gKiBAdGhyb3dzIEVycm9yIGlmIGEga2V5Ym9hcmQgaXMgc3RpbGwgc2hvd2luZyBhZnRlciB7QGxpbmsgS0VZQk9BUkRfUkVUUkFDVF9BVFRFTVBUX0NPVU5UfSBwcmVzc2VzIG9mXG4gKiAgIGBLRVlDT0RFX0JBQ0tgIFx1MjAxNCB0aGUgcmFpc2UgdGhhdCBmb2xsb3dzIGNvdWxkIHByb3ZlIG5vdGhpbmcsIGFuZCBpdHMgb3duIGZhaWx1cmUgd291bGQgYmxhbWUgYSBrZXlib2FyZFxuICogICB0aGF0IG5ldmVyIGNhbWUgd2hlbiB0aGUgdHJ1dGggaXMgb25lIHRoYXQgbmV2ZXIgbGVmdCBcdTIwMTQgb3IgaWYgYSBwcmVzcyBjbG9zZWQgdGhlIGZpZWxkJ3Mgb3duIFVJLlxuICovXG5hc3luYyBmdW5jdGlvbiBsb3dlclNvZnRLZXlib2FyZElmU2hvd24ocGFyYW1zOiBSYWlzZVNvZnRLZXlib2FyZFBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBsZXQgaW5wdXRNZXRob2RTdGF0ZSA9IGF3YWl0IHJlYWRJbnB1dE1ldGhvZFN0YXRlKHBhcmFtcyk7XG5cbiAgZm9yIChsZXQgYXR0ZW1wdCA9IDA7IGF0dGVtcHQgPCBLRVlCT0FSRF9SRVRSQUNUX0FUVEVNUFRfQ09VTlQ7IGF0dGVtcHQrKykge1xuICAgIGlmICghY2hlY2tJc0lucHV0TWV0aG9kU2hvd24oaW5wdXRNZXRob2RTdGF0ZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhd2FpdCBzbGVlcChLRVlCT0FSRF9TSE9XTl9DT05GSVJNQVRJT05fREVMQVlfSU5fTUlMTElTRUNPTkRTKTtcbiAgICBpbnB1dE1ldGhvZFN0YXRlID0gYXdhaXQgcmVhZElucHV0TWV0aG9kU3RhdGUocGFyYW1zKTtcblxuICAgIGlmICghY2hlY2tJc0lucHV0TWV0aG9kU2hvd24oaW5wdXRNZXRob2RTdGF0ZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpc0ZpZWxkUHJlc2VudEJlZm9yZVByZXNzID0gYXdhaXQgY2hlY2tJc0ZpZWxkUHJlc2VudChwYXJhbXMpO1xuICAgIGF3YWl0IHJ1bkFkYlRleHQoe1xuICAgICAgY29tbWFuZEFyZ3VtZW50czogWydzaGVsbCcsICdpbnB1dCcsICdrZXlldmVudCcsICdLRVlDT0RFX0JBQ0snXSxcbiAgICAgIGRldmljZUlkOiBwYXJhbXMuZGV2aWNlSWRcbiAgICB9KTtcbiAgICBhd2FpdCBzbGVlcChLRVlCT0FSRF9SRVRSQUNUX0RFTEFZX0lOX01JTExJU0VDT05EUyk7XG5cbiAgICBpZiAoaXNGaWVsZFByZXNlbnRCZWZvcmVQcmVzcyAmJiAhYXdhaXQgY2hlY2tJc0ZpZWxkUHJlc2VudChwYXJhbXMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdyYWlzZVNvZnRLZXlib2FyZDogS0VZQ09ERV9CQUNLLCBwcmVzc2VkIHRvIHB1dCBkb3duIGEga2V5Ym9hcmQgdGhlIGRldmljZSByZXBvcnRlZCBzaG93aW5nLCByZWFjaGVkIHRoZSBhcHAgaW5zdGVhZCBhbmQgJ1xuICAgICAgICAgICsgYGNsb3NlZCB0aGUgVUkgaG9sZGluZyBcIiR7cGFyYW1zLmlucHV0U2VsZWN0b3J9XCIgXHUyMDE0IGl0IG1hdGNoZWQgYmVmb3JlIHRoZSBwcmVzcyBhbmQgbWF0Y2hlcyBub3RoaW5nIGFmdGVyIGl0LiBUaGUgYFxuICAgICAgICAgICsgJ2tleWJvYXJkIHdlbnQgZG93biBiZXR3ZWVuIHRoZSBsYXN0IHJlYWQgYW5kIHRoZSBwcmVzcy4gTGV0IHRoZSBwcmV2aW91cyBrZXlib2FyZCBzZXR0bGUgYmVmb3JlIG9wZW5pbmcgdGhlIFVJICdcbiAgICAgICAgICArIGB0byByYWlzZSBpdCBvbi5cbmRldmljZSBiZWZvcmUgdGhlIHByZXNzOiAke2lucHV0TWV0aG9kU3RhdGV9YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpbnB1dE1ldGhvZFN0YXRlID0gYXdhaXQgcmVhZElucHV0TWV0aG9kU3RhdGUocGFyYW1zKTtcbiAgfVxuXG4gIGlmIChjaGVja0lzSW5wdXRNZXRob2RTaG93bihpbnB1dE1ldGhvZFN0YXRlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGByYWlzZVNvZnRLZXlib2FyZDogYSBrZXlib2FyZCB3YXMgYWxyZWFkeSB1cCBhbmQgZGlkIG5vdCBnbyBkb3duIGFmdGVyICR7U3RyaW5nKEtFWUJPQVJEX1JFVFJBQ1RfQVRURU1QVF9DT1VOVCl9IHByZXNzZXMgb2YgYFxuICAgICAgICArICdLRVlDT0RFX0JBQ0ssIHNvIHRoZSBsaWZ0IHRoYXQgcHJvdmVzIGEgcmFpc2UgY291bGQgbm90IGJlIG1lYXN1cmVkLiBUaGUgZmllbGQgd291bGQgcmVhZCBhcyBvbmUgdGhhdCBuZXZlciAnXG4gICAgICAgICsgYG1vdmVkIHVuZGVyIGEga2V5Ym9hcmQgdGhhdCBpcyBwbGFpbmx5IHNob3dpbmcuXG5kZXZpY2U6ICR7aW5wdXRNZXRob2RTdGF0ZX1gXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlYWRzIHdoYXQgdGhlIGZpZWxkIGhvbGRzLCBhbmQgd2hldGhlciBpdCBpcyBvbmUgd2hvc2UgdmFsdWUgY2FuIGJlIHdyaXR0ZW4gYmFjay5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGZpZWxkIHRvIHJlYWQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBjb250ZW50LCBvciBgbnVsbGAgd2hlbiBub3RoaW5nIG1hdGNoZWQgdGhlIHNlbGVjdG9yLlxuICovXG5hc3luYyBmdW5jdGlvbiByZWFkRmllbGRDb250ZW50KHBhcmFtczogUmFpc2VTb2Z0S2V5Ym9hcmRQYXJhbXMpOiBQcm9taXNlPEZpZWxkQ29udGVudCB8IG51bGw+IHtcbiAgcmV0dXJuIGF3YWl0IGV2YWxJbk9ic2lkaWFuKHtcbiAgICBjYWxsYmFjayh7IGlucHV0U2VsZWN0b3IgfSk6IEZpZWxkQ29udGVudCB8IG51bGwge1xuICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoaW5wdXRTZWxlY3Rvcik7XG5cbiAgICAgIGlmICghZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2FuV3JpdGUgPSBlbGVtZW50IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCB8fCBlbGVtZW50IGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudDtcblxuICAgICAgcmV0dXJuIHsgY2FuV3JpdGUsIHRleHQ6IGNhbldyaXRlID8gZWxlbWVudC52YWx1ZSA6IGVsZW1lbnQudGV4dENvbnRlbnQgfTtcbiAgICB9LFxuICAgIGlucHV0OiB7IGlucHV0U2VsZWN0b3I6IHBhcmFtcy5pbnB1dFNlbGVjdG9yIH0sXG4gICAgLi4uKHBhcmFtcy52YXVsdFBhdGggIT09IHVuZGVmaW5lZCAmJiB7IHZhdWx0UGF0aDogcGFyYW1zLnZhdWx0UGF0aCB9KVxuICB9KTtcbn1cblxuLyoqXG4gKiBBc2tzIHRoZSBkZXZpY2Ugd2hhdCBpdHMgSU1FIGlzIGRvaW5nIFx1MjAxNCB0aGUgb25seSBwbGFjZSB0aGF0IGtub3dzLCBzaW5jZSBub3RoaW5nIGluIHRoZSBwYWdlIHJlcG9ydHMgaXQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBkZXZpY2UgdG8gYXNrLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgZmllbGRzIHtAbGluayBwYXJzZUlucHV0TWV0aG9kU3RhdGV9IGtlZXBzLlxuICovXG5hc3luYyBmdW5jdGlvbiByZWFkSW5wdXRNZXRob2RTdGF0ZShwYXJhbXM6IFJhaXNlU29mdEtleWJvYXJkUGFyYW1zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZHVtcHN5c091dHB1dCA9IGF3YWl0IHJ1bkFkYlRleHQoe1xuICAgIGNvbW1hbmRBcmd1bWVudHM6IFsnc2hlbGwnLCAnZHVtcHN5cycsICdpbnB1dF9tZXRob2QnXSxcbiAgICBkZXZpY2VJZDogcGFyYW1zLmRldmljZUlkXG4gIH0pO1xuXG4gIHJldHVybiBwYXJzZUlucHV0TWV0aG9kU3RhdGUoZHVtcHN5c091dHB1dCk7XG59XG5cbi8qKlxuICogUmVhZHMgd2hhdCB0aGUgcmVuZGVyZXIga25vd3MgYWJvdXQgaXRzIG93biBnZW9tZXRyeS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGZpZWxkIHRvIG1lYXN1cmUgYW5kIHRoZSB2YXVsdCB0byByZWFkIGl0IGZyb20uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSB2aWV3cG9ydCBhbmQgdGhlIGZpZWxkJ3MgcmVjdCwgaW4gQ1NTIHBpeGVscy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVhZFNvZnRLZXlib2FyZFZpZXdwb3J0KHBhcmFtczogUmFpc2VTb2Z0S2V5Ym9hcmRQYXJhbXMpOiBQcm9taXNlPFNvZnRLZXlib2FyZFZpZXdwb3J0U25hcHNob3Q+IHtcbiAgcmV0dXJuIGF3YWl0IGV2YWxJbk9ic2lkaWFuKHtcbiAgICBjYWxsYmFjayh7IGlucHV0U2VsZWN0b3IgfSk6IFNvZnRLZXlib2FyZFZpZXdwb3J0U25hcHNob3Qge1xuICAgICAgY29uc3QgaW5wdXRFbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoaW5wdXRTZWxlY3Rvcik7XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL2NvbnNpc3RlbnQtZnVuY3Rpb24tc2NvcGluZyAtLSBUaGlzIGNsb3N1cmUgaXMgc2VyaWFsaXplZCBhbmQgZXZhbHVhdGVkIGluIHRoZSByZW5kZXJlciwgc28gYSBoZWxwZXIgaG9pc3RlZCB0byBtb2R1bGUgc2NvcGUgd291bGQgbm90IGV4aXN0IHRoZXJlLlxuICAgICAgZnVuY3Rpb24gdG9SZWN0KHJlY3Q6IERPTVJlY3QpOiBFbGVtZW50UmVjdCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaGVpZ2h0OiByZWN0LmhlaWdodCxcbiAgICAgICAgICBsZWZ0OiByZWN0LmxlZnQsXG4gICAgICAgICAgdG9wOiByZWN0LnRvcCxcbiAgICAgICAgICB3aWR0aDogcmVjdC53aWR0aFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkZXZpY2VQaXhlbFJhdGlvOiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyxcbiAgICAgICAgaW5uZXJIZWlnaHQ6IHdpbmRvdy5pbm5lckhlaWdodCxcbiAgICAgICAgaW5wdXRSZWN0OiBpbnB1dEVsID8gdG9SZWN0KGlucHV0RWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpIDogbnVsbCxcbiAgICAgICAgc2NyZWVuWTogd2luZG93LnNjcmVlbllcbiAgICAgIH07XG4gICAgfSxcbiAgICBpbnB1dDogeyBpbnB1dFNlbGVjdG9yOiBwYXJhbXMuaW5wdXRTZWxlY3RvciB9LFxuICAgIC4uLihwYXJhbXMudmF1bHRQYXRoICE9PSB1bmRlZmluZWQgJiYgeyB2YXVsdFBhdGg6IHBhcmFtcy52YXVsdFBhdGggfSlcbiAgfSk7XG59XG5cbi8qKlxuICogV3JpdGVzIHRoZSBlbXB0aWVkIGZpZWxkJ3MgdGV4dCBiYWNrLCBhbmQgZG9lcyBub3QgcmV0dXJuIHVudGlsIGl0IGhhcyBzdGF5ZWQgdGhlcmUuXG4gKlxuICogKipXcml0aW5nIGl0IG9uY2UgaXMgbm90IGVub3VnaC4qKiBUaGUgdG91Y2ggdGhhdCByYWlzZWQgdGhlIGtleWJvYXJkIGxhbmRlZCBvbiB0aGUgRU1QVFkgZmllbGQsIHNvIHRoZVxuICogSU1FJ3MgaW5wdXQgY29ubmVjdGlvbiBzdGFydGVkIGZyb20gYW4gZW1wdHkgZmllbGQsIGFuZCBhYm91dCBvbmUgdGltZSBpbiBmaXZlIGEgbGF0ZXIgdXBkYXRlIGZyb20gaXQgd3JvdGVcbiAqIHRoYXQgZW1wdHkgc3RhdGUgYmFjayBvdmVyIHRoaXMgd3JpdGUgKG1lYXN1cmVkIDIwMjYtMDktMjUgaW4gYG9ic2lkaWFuLWFsaWFzLXF1aWNrLXN3aXRjaGVyYCdzIGNhcHR1cmVcbiAqIHN1aXRlOiAyIG9mIDEwIGZyYW1lcyBzaG93ZWQgdGhlIHBsYWNlaG9sZGVyLCB3aGlsZSB0aGUgR2JvYXJkIHN0cmlwIHN0aWxsIG9mZmVyZWQgdGhlIHdvcmQgdGhhdCBoYWQgYmVlblxuICogd3JpdHRlbikuIFRoZSBjYXB0dXJlIHRha2VuIHN0cmFpZ2h0IGFmdGVyIHBob3RvZ3JhcGhlZCB0aGUgZW1wdHkgZmllbGQsIGFuZCBub3RoaW5nIHNhaWQgc28uIFNvIHRoZSBmaWVsZCBpc1xuICogcmUtcmVhZCB1bnRpbCBzZXZlcmFsIHJlYWRzIGFncmVlLCBhbmQgd3JpdHRlbiBhZ2FpbiB3aGVuZXZlciBvbmUgZG9lcyBub3QuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBmaWVsZCB0byB3cml0ZSwgYW5kIHRoZSBkZXZpY2UgdG8gYXNrIGFib3V0IGl0cyBJTUUgd2hlbiB0aGUgdGV4dCB3aWxsIG5vdCBob2xkLlxuICogQHBhcmFtIHRleHQgLSBXaGF0IHRoZSBmaWVsZCBoZWxkIGJlZm9yZSBpdCB3YXMgZW1wdGllZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgdGV4dCBoYXMgaGVsZC5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIHRleHQgZGlkIG5vdCBob2xkIGFmdGVyIGV2ZXJ5IHJld3JpdGUsIG9yIHRoZSBmaWVsZCB3ZW50IGF3YXkgXHUyMDE0IG5hbWluZyBldmVyeSByZWFkIGFuZFxuICogICB0aGUgZGV2aWNlJ3MgYGlucHV0X21ldGhvZGAgc3RhdGUsIHJhdGhlciB0aGFuIHJldHVybmluZyB3aXRoIHRoZSBmaWVsZCBzaWxlbnRseSBlbXB0eS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzdG9yZUZpZWxkVGV4dChwYXJhbXM6IFJhaXNlU29mdEtleWJvYXJkUGFyYW1zLCB0ZXh0OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaG9sZFRleHRJbkZpZWxkKHBhcmFtcywgdGV4dCk7XG5cbiAgaWYgKHJlc3VsdC53cml0ZUNvdW50ID4gMSkge1xuICAgIGxvZyhcbiAgICAgIGBbc29mdC1rZXlib2FyZF0gVGhlIHRleHQgd3JpdHRlbiBiYWNrIGludG8gXCIke3BhcmFtcy5pbnB1dFNlbGVjdG9yfVwiIHdhcyBsb3N0ICR7U3RyaW5nKHJlc3VsdC53cml0ZUNvdW50IC0gMSl9IHRpbWUocykgYFxuICAgICAgICArIGBhbmQgd3JpdHRlbiBhZ2FpbjsgcmVhZHM6ICR7SlNPTi5zdHJpbmdpZnkocmVzdWx0LnJlYWRUZXh0cyl9LmBcbiAgICApO1xuICB9XG5cbiAgaWYgKCFyZXN1bHQuaXNIZWxkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYHJhaXNlU29mdEtleWJvYXJkOiB0aGUgdGV4dCB3cml0dGVuIGJhY2sgaW50byBcIiR7cGFyYW1zLmlucHV0U2VsZWN0b3J9XCIgYWZ0ZXIgdGhlIHRvdWNoIGRpZCBub3Qgc3RheSB0aGVyZS4gYFxuICAgICAgICArIGBFeHBlY3RlZCAke0pTT04uc3RyaW5naWZ5KHRleHQpfTsgJHtTdHJpbmcocmVzdWx0LndyaXRlQ291bnQpfSB3cml0ZShzKSwgYW5kIHRoZSBmaWVsZCByZWFkIGBcbiAgICAgICAgKyBgJHtKU09OLnN0cmluZ2lmeShyZXN1bHQucmVhZFRleHRzKX0uIEEgY2FwdHVyZSB0YWtlbiBub3cgd291bGQgc2hvdyB0aGUgZmllbGQgd2l0aG91dCBpdHMgdGV4dC5cbmRldmljZTogJHthd2FpdCByZWFkSW5wdXRNZXRob2RTdGF0ZShwYXJhbXMpfWBcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogVG91Y2hlcyB0aGUgZmllbGQgdW50aWwgdGhlIGtleWJvYXJkIGlzIHVwLCBhbmQgc2F5cyBzbyB3aGVuIGl0IG5ldmVyIGNhbWUuXG4gKlxuICogVGhlIGJhc2VsaW5lIGlzIHJlYWQgaGVyZSByYXRoZXIgdGhhbiBieSB0aGUgY2FsbGVyLCBzbyBpdCBpcyByZWFkIHdpdGggdGhlIGZpZWxkIGluIHRoZSBzdGF0ZSB0aGVcbiAqIHRhcHMgYXJlIGRpc3BhdGNoZWQgYWdhaW5zdCBcdTIwMTQgc2VlIHtAbGluayByYWlzZVNvZnRLZXlib2FyZH0gZm9yIHdoeSB0aGUgdHdvIGhhdmUgdG8gbWF0Y2guXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBkZXZpY2UsIHRoZSBmaWVsZCB0byB0b3VjaCwgYW5kIGhvdyBmYXIgaXQgbXVzdCBsaWZ0LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgZ2VvbWV0cnkgcmVhZCBvbmNlIHRoZSBrZXlib2FyZCBpcyB1cC5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIGZpZWxkIG5ldmVyIG1hdGNoZWQsIG9yIGlmIGl0IG5ldmVyIGxpZnRlZC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gdGFwVW50aWxLZXlib2FyZElzVXAocGFyYW1zOiBSYWlzZVNvZnRLZXlib2FyZFBhcmFtcyk6IFByb21pc2U8U29mdEtleWJvYXJkVmlld3BvcnRTbmFwc2hvdD4ge1xuICBjb25zdCBiYXNlbGluZVNuYXBzaG90ID0gYXdhaXQgcmVhZFNvZnRLZXlib2FyZFZpZXdwb3J0KHBhcmFtcyk7XG4gIGxldCBzbmFwc2hvdCA9IGJhc2VsaW5lU25hcHNob3Q7XG5cbiAgaWYgKCFzbmFwc2hvdC5pbnB1dFJlY3QpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHJhaXNlU29mdEtleWJvYXJkOiBub3RoaW5nIG1hdGNoZXMgXCIke3BhcmFtcy5pbnB1dFNlbGVjdG9yfVwiLCBzbyB0aGVyZSBpcyBubyBmaWVsZCB0byB0b3VjaC5gKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgcG9pbnQgb2YgcmVzb2x2ZVNvZnRLZXlib2FyZFRhcFBvaW50cyh7IHNuYXBzaG90IH0pKSB7XG4gICAgaWYgKGNoZWNrSXNVcChzbmFwc2hvdCkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGF3YWl0IHRhcERldmljZSh7IGRldmljZUlkOiBwYXJhbXMuZGV2aWNlSWQsIHBvaW50IH0pO1xuICAgIGF3YWl0IHNsZWVwKEtFWUJPQVJEX1NFVFRMRV9ERUxBWV9JTl9NSUxMSVNFQ09ORFMpO1xuICAgIHNuYXBzaG90ID0gYXdhaXQgcmVhZFNvZnRLZXlib2FyZFZpZXdwb3J0KHBhcmFtcyk7XG4gIH1cblxuICBpZiAoIWNoZWNrSXNVcChzbmFwc2hvdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYXdhaXQgYnVpbGRGYWlsdXJlTWVzc2FnZShwYXJhbXMsIGJhc2VsaW5lU25hcHNob3QsIHNuYXBzaG90KSk7XG4gIH1cblxuICByZXR1cm4gc25hcHNob3Q7XG5cbiAgZnVuY3Rpb24gY2hlY2tJc1VwKGN1cnJlbnQ6IFNvZnRLZXlib2FyZFZpZXdwb3J0U25hcHNob3QpOiBib29sZWFuIHtcbiAgICByZXR1cm4gY2hlY2tJc1NvZnRLZXlib2FyZFVwKHtcbiAgICAgIGJhc2VsaW5lU25hcHNob3QsXG4gICAgICAuLi4ocGFyYW1zLm1pbmltdW1LZXlib2FyZEhlaWdodEluUGl4ZWxzICE9PSB1bmRlZmluZWQgJiYgeyBtaW5pbXVtS2V5Ym9hcmRIZWlnaHRJblBpeGVsczogcGFyYW1zLm1pbmltdW1LZXlib2FyZEhlaWdodEluUGl4ZWxzIH0pLFxuICAgICAgc25hcHNob3Q6IGN1cnJlbnRcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFdyaXRlcyBhIGZpZWxkJ3MgdmFsdWUgYW5kIHRlbGxzIHRoZSBwYWdlIGl0IGNoYW5nZWQuXG4gKlxuICogVGhlIGBpbnB1dGAgZXZlbnQgaXMgd2hhdCBhIHNjcmlwdGVkIHdyaXRlIG93ZXMgdGhlIHBhZ2U6IHdpdGhvdXQgaXQgYSBzdWdnZXN0ZXIga2VlcHMgdGhlIHJvd3MgaXQgaGFkXG4gKiBmb3IgdGhlIHRleHQgdGhhdCBpcyBubyBsb25nZXIgdGhlcmUuIEl0IGJ1YmJsZXMsIGJlY2F1c2UgdGhhdCBpcyBob3cgYSBmcmFtZXdvcmsgbGlzdGVuaW5nIG9uIGFcbiAqIGNvbnRhaW5lciBoZWFycyBpdC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGZpZWxkIHRvIHdyaXRlLlxuICogQHBhcmFtIHRleHQgLSBXaGF0IHRvIHdyaXRlIGludG8gaXQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHdyaXRlIGhhcyBiZWVuIG1hZGUuXG4gKiBAdGhyb3dzIFR5cGVFcnJvciBpZiB0aGUgZmllbGQgaXMgbm90IG9uZSB3aG9zZSB2YWx1ZSBjYW4gYmUgd3JpdHRlbi5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gd3JpdGVGaWVsZFRleHQocGFyYW1zOiBSYWlzZVNvZnRLZXlib2FyZFBhcmFtcywgdGV4dDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGV2YWxJbk9ic2lkaWFuKHtcbiAgICBjYWxsYmFjayh7IGlucHV0U2VsZWN0b3IsIHRleHQ6IHZhbHVlIH0pOiB2b2lkIHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGlucHV0U2VsZWN0b3IpO1xuXG4gICAgICBpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCkgJiYgIShlbGVtZW50IGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgcmFpc2VTb2Z0S2V5Ym9hcmQ6IFwiJHtpbnB1dFNlbGVjdG9yfVwiIGlzIG5vdCBhIGZpZWxkIHdob3NlIHZhbHVlIGNhbiBiZSB3cml0dGVuLmApO1xuICAgICAgfVxuXG4gICAgICBlbGVtZW50LnZhbHVlID0gdmFsdWU7XG4gICAgICBlbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdpbnB1dCcsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG4gICAgfSxcbiAgICBpbnB1dDogeyBpbnB1dFNlbGVjdG9yOiBwYXJhbXMuaW5wdXRTZWxlY3RvciwgdGV4dCB9LFxuICAgIC4uLihwYXJhbXMudmF1bHRQYXRoICE9PSB1bmRlZmluZWQgJiYgeyB2YXVsdFBhdGg6IHBhcmFtcy52YXVsdFBhdGggfSlcbiAgfSk7XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiQUE0REE7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLFlBQVk7QUFDckIsT0FBTyxhQUFhO0FBQ3BCLFNBQVMsY0FBYyxhQUFhO0FBU3BDLFNBQVMsa0JBQWtCO0FBQzNCLFNBQVMsK0JBQStCO0FBQ3hDLFNBQVMsc0JBQXNCO0FBQy9CLFNBQVMscUJBQXFCO0FBQzlCLFNBQVMsV0FBVztBQUNwQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQTJFUCxNQUFNLGdDQUFn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
|