obsidian-integration-testing 12.1.0 → 12.1.2
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/adb.cjs +61 -0
- package/dist/lib/cjs/adb.d.cts +61 -0
- package/dist/lib/cjs/device-screenshot.cjs +42 -0
- package/dist/lib/cjs/device-screenshot.d.cts +36 -0
- package/dist/lib/cjs/device-setting-restore.cjs +45 -0
- package/dist/lib/cjs/device-setting-restore.d.cts +60 -0
- package/dist/lib/cjs/device-settings-command.cjs +49 -0
- package/dist/lib/cjs/device-settings-command.d.cts +76 -0
- package/dist/lib/cjs/device-settings.cjs +88 -0
- package/dist/lib/cjs/device-settings.d.cts +94 -0
- package/dist/lib/cjs/emulator-device-id.cjs +32 -0
- package/dist/lib/cjs/emulator-device-id.d.cts +49 -0
- package/dist/lib/cjs/index.cjs +56 -3
- package/dist/lib/cjs/index.d.cts +18 -0
- package/dist/lib/cjs/library.cjs +1 -1
- package/dist/lib/cjs/mobile-input.cjs +14 -1
- package/dist/lib/cjs/mobile-input.d.cts +30 -0
- package/dist/lib/cjs/namespace-bootstrap.cjs +9 -1
- package/dist/lib/cjs/resolve-emulator-device-id.cjs +54 -0
- package/dist/lib/cjs/resolve-emulator-device-id.d.cts +28 -0
- package/dist/lib/cjs/soft-keyboard-geometry.cjs +75 -0
- package/dist/lib/cjs/soft-keyboard-geometry.d.cts +156 -0
- package/dist/lib/cjs/soft-keyboard.cjs +118 -0
- package/dist/lib/cjs/soft-keyboard.d.cts +82 -0
- package/dist/lib/cjs/transport-appium.cjs +5 -1
- package/dist/lib/esm/adb.d.mts +61 -0
- package/dist/lib/esm/adb.mjs +35 -0
- package/dist/lib/esm/device-screenshot.d.mts +36 -0
- package/dist/lib/esm/device-screenshot.mjs +18 -0
- package/dist/lib/esm/device-setting-restore.d.mts +60 -0
- package/dist/lib/esm/device-setting-restore.mjs +20 -0
- package/dist/lib/esm/device-settings-command.d.mts +76 -0
- package/dist/lib/esm/device-settings-command.mjs +23 -0
- package/dist/lib/esm/device-settings.d.mts +94 -0
- package/dist/lib/esm/device-settings.mjs +67 -0
- package/dist/lib/esm/emulator-device-id.d.mts +49 -0
- package/dist/lib/esm/emulator-device-id.mjs +8 -0
- package/dist/lib/esm/index.d.mts +18 -0
- package/dist/lib/esm/index.mjs +58 -2
- package/dist/lib/esm/library.mjs +1 -1
- package/dist/lib/esm/mobile-input.d.mts +30 -0
- package/dist/lib/esm/mobile-input.mjs +12 -1
- package/dist/lib/esm/namespace-bootstrap.mjs +9 -1
- package/dist/lib/esm/resolve-emulator-device-id.d.mts +28 -0
- package/dist/lib/esm/resolve-emulator-device-id.mjs +33 -0
- package/dist/lib/esm/soft-keyboard-geometry.d.mts +156 -0
- package/dist/lib/esm/soft-keyboard-geometry.mjs +47 -0
- package/dist/lib/esm/soft-keyboard.d.mts +82 -0
- package/dist/lib/esm/soft-keyboard.mjs +91 -0
- package/dist/lib/esm/transport-appium.mjs +7 -1
- package/package.json +4 -3
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file
|
|
3
|
+
*
|
|
4
|
+
* Reads and writes Android device settings — and wraps the one setting a
|
|
5
|
+
* screenshot suite has to change.
|
|
6
|
+
*
|
|
7
|
+
* The screenshot AVDs are built `hw.keyboard=yes`, so Android suppresses the
|
|
8
|
+
* on-screen keyboard even where the page asks for one. `show_ime_with_hard_keyboard`
|
|
9
|
+
* is what turns it back on. {@link withSoftKeyboardEnabled} flips it, runs the
|
|
10
|
+
* work, and puts the device back exactly as it found it — including restoring a
|
|
11
|
+
* setting that had never been written, which takes a delete rather than a write
|
|
12
|
+
* (see `device-setting-restore`).
|
|
13
|
+
*
|
|
14
|
+
* Every function here shells out, so the whole module is integration-time code;
|
|
15
|
+
* the restore decision and the argument list it depends on are unit-tested in
|
|
16
|
+
* their own modules.
|
|
17
|
+
*/
|
|
18
|
+
import type { DeviceSettingNamespace } from './device-settings-command.cjs';
|
|
19
|
+
/**
|
|
20
|
+
* Parameters for {@link deleteDeviceSetting} and {@link readDeviceSetting}.
|
|
21
|
+
*/
|
|
22
|
+
export interface DeviceSettingParams {
|
|
23
|
+
/**
|
|
24
|
+
* The device to address.
|
|
25
|
+
*/
|
|
26
|
+
readonly deviceId: string;
|
|
27
|
+
/**
|
|
28
|
+
* The setting's name within {@link namespace}, e.g. `show_ime_with_hard_keyboard`.
|
|
29
|
+
*/
|
|
30
|
+
readonly name: string;
|
|
31
|
+
/**
|
|
32
|
+
* The settings namespace the name lives in.
|
|
33
|
+
*
|
|
34
|
+
* @default {@link DeviceSettingNamespace.Secure}
|
|
35
|
+
*/
|
|
36
|
+
readonly namespace?: DeviceSettingNamespace;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Parameters for {@link withSoftKeyboardEnabled}.
|
|
40
|
+
*
|
|
41
|
+
* @typeParam T - What the wrapped work returns.
|
|
42
|
+
*/
|
|
43
|
+
export interface WithSoftKeyboardEnabledParams<T> {
|
|
44
|
+
/**
|
|
45
|
+
* The work to run while the on-screen keyboard is permitted.
|
|
46
|
+
*/
|
|
47
|
+
readonly callback: (this: void) => Promise<T>;
|
|
48
|
+
/**
|
|
49
|
+
* The device to address.
|
|
50
|
+
*/
|
|
51
|
+
readonly deviceId: string;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Parameters for {@link writeDeviceSetting}.
|
|
55
|
+
*/
|
|
56
|
+
export interface WriteDeviceSettingParams extends DeviceSettingParams {
|
|
57
|
+
/**
|
|
58
|
+
* The value to write.
|
|
59
|
+
*/
|
|
60
|
+
readonly value: string;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Clears a device setting, returning it to never-having-been-written.
|
|
64
|
+
*
|
|
65
|
+
* @param params - The device, the setting and its namespace.
|
|
66
|
+
* @returns A {@link Promise} that resolves once the setting is gone.
|
|
67
|
+
*/
|
|
68
|
+
export declare function deleteDeviceSetting(params: DeviceSettingParams): Promise<void>;
|
|
69
|
+
/**
|
|
70
|
+
* Reads a device setting.
|
|
71
|
+
*
|
|
72
|
+
* @param params - The device, the setting and its namespace.
|
|
73
|
+
* @returns A {@link Promise} that resolves to the setting's value, or the literal `null` when it has never
|
|
74
|
+
* been written.
|
|
75
|
+
*/
|
|
76
|
+
export declare function readDeviceSetting(params: DeviceSettingParams): Promise<string>;
|
|
77
|
+
/**
|
|
78
|
+
* Permits the on-screen keyboard for the duration of a callback, then restores the device exactly.
|
|
79
|
+
*
|
|
80
|
+
* The restore runs whether the callback succeeded or threw — a suite that dies mid-capture must not leave
|
|
81
|
+
* the device configured differently than it found it.
|
|
82
|
+
*
|
|
83
|
+
* @typeParam T - What the wrapped work returns.
|
|
84
|
+
* @param params - The device and the work to run.
|
|
85
|
+
* @returns A {@link Promise} that resolves to whatever the callback returned.
|
|
86
|
+
*/
|
|
87
|
+
export declare function withSoftKeyboardEnabled<T>(params: WithSoftKeyboardEnabledParams<T>): Promise<T>;
|
|
88
|
+
/**
|
|
89
|
+
* Writes a device setting.
|
|
90
|
+
*
|
|
91
|
+
* @param params - The device, the setting, its namespace and the value to write.
|
|
92
|
+
* @returns A {@link Promise} that resolves once the setting is written.
|
|
93
|
+
*/
|
|
94
|
+
export declare function writeDeviceSetting(params: WriteDeviceSettingParams): Promise<void>;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var emulator_device_id_exports = {};
|
|
20
|
+
__export(emulator_device_id_exports, {
|
|
21
|
+
selectEmulatorDeviceId: () => selectEmulatorDeviceId
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(emulator_device_id_exports);
|
|
24
|
+
function selectEmulatorDeviceId(params) {
|
|
25
|
+
const match = params.candidates.find((candidate) => candidate.avdName === params.avdName);
|
|
26
|
+
return match ? match.deviceId : null;
|
|
27
|
+
}
|
|
28
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
29
|
+
0 && (module.exports = {
|
|
30
|
+
selectEmulatorDeviceId
|
|
31
|
+
});
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2VtdWxhdG9yLWRldmljZS1pZC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFBpY2tzIHRoZSBydW5uaW5nIGVtdWxhdG9yIHRoYXQgYmVsb25ncyB0byBhIG5hbWVkIEFWRC5cbiAqXG4gKiBBIGNhcHR1cmUgc3VpdGUgbXVzdCBuZXZlciB0YWtlIFwidGhlIGZpcnN0IGRldmljZSBgYWRiIGRldmljZXNgIGxpc3RzXCIuIFR3b1xuICogdGhpbmdzIHJvdXRpbmVseSBtYWtlIHRoYXQgdGhlIHdyb25nIGRldmljZSBvbiB0aGlzIGZsZWV0OiBhIHBoeXNpY2FsIHBob25lIGlzXG4gKiBvZnRlbiBwbHVnZ2VkIGludG8gdGhlIHNhbWUgbWFjaGluZSwgYW5kIHRoZSBoYXJuZXNzJ3Mgb3duIGBvYnNpZGlhbl90ZXN0YCBBVkRcbiAqIHJ1bnMgYXQgYSBkaWZmZXJlbnQgZ2VvbWV0cnkgdGhhbiB0aGUgYG9ic2lkaWFuX3NjcmVlbnNob3RzYCBBVkQgc2l6ZWQgdG8gdGhlXG4gKiBzdG9yZSdzIGZyYW1lLiBQaWNraW5nIGJ5IHBvc2l0aW9uIHNpbGVudGx5IHBob3RvZ3JhcGhzIHRoZSB3cm9uZyBzY3JlZW4gYXRcbiAqIHRoZSB3cm9uZyBzaXplLCBhbmQgdGhlIGRpbWVuc2lvbiBhc3NlcnRpb24gdGhhdCB3b3VsZCBoYXZlIGNhdWdodCBpdCBmaXJlc1xuICogc2V2ZXJhbCBtaW51dGVzIGxhdGVyLCBhZnRlciB0aGUgcnVuLlxuICpcbiAqIFB1cmUgYW5kIHVuaXQtdGVzdGVkOyB0aGUgYGFkYmAgcm91bmQtdHJpcHMgdGhhdCBnYXRoZXIgdGhlIEFWRCBuYW1lcyBsaXZlIGluXG4gKiBgcmVzb2x2ZS1lbXVsYXRvci1kZXZpY2UtaWRgLlxuICovXG5cbi8qKlxuICogT25lIHJ1bm5pbmcgZW11bGF0b3IsIHBhaXJlZCB3aXRoIHRoZSBBVkQgaXQgd2FzIHN0YXJ0ZWQgZnJvbS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbXVsYXRvckRldmljZUNhbmRpZGF0ZSB7XG4gIC8qKlxuICAgKiBUaGUgQVZEIG5hbWUgdGhlIGVtdWxhdG9yIHJlcG9ydHMsIGUuZy4gYG9ic2lkaWFuX3NjcmVlbnNob3RzYC5cbiAgICovXG4gIHJlYWRvbmx5IGF2ZE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRldmljZSBVRElELCBlLmcuIGBlbXVsYXRvci01NTU0YC5cbiAgICovXG4gIHJlYWRvbmx5IGRldmljZUlkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHNlbGVjdEVtdWxhdG9yRGV2aWNlSWR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdEVtdWxhdG9yRGV2aWNlSWRQYXJhbXMge1xuICAvKipcbiAgICogVGhlIEFWRCBuYW1lIHRvIG1hdGNoLlxuICAgKi9cbiAgcmVhZG9ubHkgYXZkTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFdmVyeSBydW5uaW5nIGVtdWxhdG9yLCB3aXRoIHRoZSBBVkQgZWFjaCB3YXMgc3RhcnRlZCBmcm9tLlxuICAgKi9cbiAgcmVhZG9ubHkgY2FuZGlkYXRlczogcmVhZG9ubHkgRW11bGF0b3JEZXZpY2VDYW5kaWRhdGVbXTtcbn1cblxuLyoqXG4gKiBQaWNrcyB0aGUgZW11bGF0b3Igc3RhcnRlZCBmcm9tIGEgbmFtZWQgQVZELlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgQVZEIHRvIG1hdGNoIGFuZCB0aGUgcnVubmluZyBlbXVsYXRvcnMgdG8gbWF0Y2ggYWdhaW5zdC5cbiAqIEByZXR1cm5zIFRoZSBtYXRjaGluZyBkZXZpY2UgVURJRCwgb3IgYG51bGxgIHdoZW4gbm8gcnVubmluZyBlbXVsYXRvciBjYXJyaWVzIHRoYXQgQVZEIG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZWxlY3RFbXVsYXRvckRldmljZUlkKHBhcmFtczogU2VsZWN0RW11bGF0b3JEZXZpY2VJZFBhcmFtcyk6IG51bGwgfCBzdHJpbmcge1xuICBjb25zdCBtYXRjaCA9IHBhcmFtcy5jYW5kaWRhdGVzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLmF2ZE5hbWUgPT09IHBhcmFtcy5hdmROYW1lKTtcbiAgcmV0dXJuIG1hdGNoID8gbWF0Y2guZGV2aWNlSWQgOiBudWxsO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXFETyxTQUFTLHVCQUF1QixRQUFxRDtBQUMxRixRQUFNLFFBQVEsT0FBTyxXQUFXLEtBQUssQ0FBQyxjQUFjLFVBQVUsWUFBWSxPQUFPLE9BQU87QUFDeEYsU0FBTyxRQUFRLE1BQU0sV0FBVztBQUNsQzsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file
|
|
3
|
+
*
|
|
4
|
+
* Picks the running emulator that belongs to a named AVD.
|
|
5
|
+
*
|
|
6
|
+
* A capture suite must never take "the first device `adb devices` lists". Two
|
|
7
|
+
* things routinely make that the wrong device on this fleet: a physical phone is
|
|
8
|
+
* often plugged into the same machine, and the harness's own `obsidian_test` AVD
|
|
9
|
+
* runs at a different geometry than the `obsidian_screenshots` AVD sized to the
|
|
10
|
+
* store's frame. Picking by position silently photographs the wrong screen at
|
|
11
|
+
* the wrong size, and the dimension assertion that would have caught it fires
|
|
12
|
+
* several minutes later, after the run.
|
|
13
|
+
*
|
|
14
|
+
* Pure and unit-tested; the `adb` round-trips that gather the AVD names live in
|
|
15
|
+
* `resolve-emulator-device-id`.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* One running emulator, paired with the AVD it was started from.
|
|
19
|
+
*/
|
|
20
|
+
export interface EmulatorDeviceCandidate {
|
|
21
|
+
/**
|
|
22
|
+
* The AVD name the emulator reports, e.g. `obsidian_screenshots`.
|
|
23
|
+
*/
|
|
24
|
+
readonly avdName: string;
|
|
25
|
+
/**
|
|
26
|
+
* The device UDID, e.g. `emulator-5554`.
|
|
27
|
+
*/
|
|
28
|
+
readonly deviceId: string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Parameters for {@link selectEmulatorDeviceId}.
|
|
32
|
+
*/
|
|
33
|
+
export interface SelectEmulatorDeviceIdParams {
|
|
34
|
+
/**
|
|
35
|
+
* The AVD name to match.
|
|
36
|
+
*/
|
|
37
|
+
readonly avdName: string;
|
|
38
|
+
/**
|
|
39
|
+
* Every running emulator, with the AVD each was started from.
|
|
40
|
+
*/
|
|
41
|
+
readonly candidates: readonly EmulatorDeviceCandidate[];
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Picks the emulator started from a named AVD.
|
|
45
|
+
*
|
|
46
|
+
* @param params - The AVD to match and the running emulators to match against.
|
|
47
|
+
* @returns The matching device UDID, or `null` when no running emulator carries that AVD name.
|
|
48
|
+
*/
|
|
49
|
+
export declare function selectEmulatorDeviceId(params: SelectEmulatorDeviceIdParams): null | string;
|
package/dist/lib/cjs/index.cjs
CHANGED
|
@@ -23,9 +23,13 @@ __export(index_exports, {
|
|
|
23
23
|
ConfigDirectoryFallbackError: () => import_config_directory_fallback_error.ConfigDirectoryFallbackError,
|
|
24
24
|
ContextId: () => import_context_id.ContextId,
|
|
25
25
|
DEFAULT_CONFIG_DIRECTORY: () => import_config_directory.DEFAULT_CONFIG_DIRECTORY,
|
|
26
|
+
DEFAULT_MINIMUM_KEYBOARD_HEIGHT_IN_PIXELS: () => import_soft_keyboard_geometry.DEFAULT_MINIMUM_KEYBOARD_HEIGHT_IN_PIXELS,
|
|
26
27
|
DEFAULT_OBSIDIAN_VERSION_SPECS: () => import_version_matrix.DEFAULT_OBSIDIAN_VERSION_SPECS,
|
|
27
28
|
DesktopCdpTransport: () => import_transport_desktop_cdp.DesktopCdpTransport,
|
|
28
29
|
DesktopOnlyPluginSkipError: () => import_desktop_only_plugin_skip_error.DesktopOnlyPluginSkipError,
|
|
30
|
+
DeviceSettingNamespace: () => import_device_settings_command.DeviceSettingNamespace,
|
|
31
|
+
DeviceSettingRestoreKind: () => import_device_setting_restore.DeviceSettingRestoreKind,
|
|
32
|
+
DeviceSettingVerb: () => import_device_settings_command.DeviceSettingVerb,
|
|
29
33
|
IncompatibleInstallerVersionError: () => import_incompatible_installer_version_error.IncompatibleInstallerVersionError,
|
|
30
34
|
IntegrationSetupFailedError: () => import_integration_setup_failed_error.IntegrationSetupFailedError,
|
|
31
35
|
OwnedInstanceExitedError: () => import_owned_instance_exited_error.OwnedInstanceExitedError,
|
|
@@ -38,14 +42,19 @@ __export(index_exports, {
|
|
|
38
42
|
buildDemoVaultPopulate: () => import_demo_vault_populate.buildDemoVaultPopulate,
|
|
39
43
|
buildDemoVaultPopulateAsync: () => import_demo_vault_bootstrap.buildDemoVaultPopulateAsync,
|
|
40
44
|
buildDeviceMetricsOverride: () => import_capture_screenshot.buildDeviceMetricsOverride,
|
|
45
|
+
buildDeviceSettingsCommandArguments: () => import_device_settings_command.buildDeviceSettingsCommandArguments,
|
|
41
46
|
buildLabelSvg: () => import_label_screenshot.buildLabelSvg,
|
|
47
|
+
buildSoftKeyboardDiagnosticMessage: () => import_soft_keyboard_geometry.buildSoftKeyboardDiagnosticMessage,
|
|
48
|
+
captureDeviceScreenshot: () => import_device_screenshot.captureDeviceScreenshot,
|
|
42
49
|
captureObsidianScreenshot: () => import_capture_obsidian_screenshot.captureObsidianScreenshot,
|
|
43
50
|
checkIsMobileTransport: () => import_transport_options.checkIsMobileTransport,
|
|
51
|
+
checkIsSoftKeyboardUp: () => import_soft_keyboard_geometry.checkIsSoftKeyboardUp,
|
|
44
52
|
computeFitToCanvas: () => import_fit_screenshot.computeFitToCanvas,
|
|
45
53
|
computeLabelBand: () => import_label_screenshot.computeLabelBand,
|
|
46
54
|
connectToCdp: () => import_connect_to_cdp.connectToCdp,
|
|
47
55
|
createTransportFromOptions: () => import_transport_factory.createTransportFromOptions,
|
|
48
56
|
decodeBase64Png: () => import_capture_screenshot.decodeBase64Png,
|
|
57
|
+
deleteDeviceSetting: () => import_device_settings.deleteDeviceSetting,
|
|
49
58
|
escapeSvgText: () => import_label_screenshot.escapeSvgText,
|
|
50
59
|
evalInObsidian: () => import_eval_in_obsidian.evalInObsidian,
|
|
51
60
|
fitScreenshotToCanvas: () => import_fit_screenshot.fitScreenshotToCanvas,
|
|
@@ -53,22 +62,36 @@ __export(index_exports, {
|
|
|
53
62
|
isPng: () => import_capture_screenshot.isPng,
|
|
54
63
|
labelScreenshot: () => import_label_screenshot.labelScreenshot,
|
|
55
64
|
openObsidianSettingsTab: () => import_open_obsidian_settings_tab.openObsidianSettingsTab,
|
|
65
|
+
parseInputMethodState: () => import_soft_keyboard_geometry.parseInputMethodState,
|
|
56
66
|
pollInObsidian: () => import_poll_in_obsidian.pollInObsidian,
|
|
67
|
+
raiseSoftKeyboard: () => import_soft_keyboard.raiseSoftKeyboard,
|
|
57
68
|
readDemoVaultTree: () => import_demo_vault_tree.readDemoVaultTree,
|
|
69
|
+
readDeviceSetting: () => import_device_settings.readDeviceSetting,
|
|
58
70
|
readPngDimensions: () => import_capture_screenshot.readPngDimensions,
|
|
59
71
|
registerLibResolver: () => import_lib_registry.registerLibResolver,
|
|
60
72
|
registerVault: () => import_vault_registry.registerVault,
|
|
61
73
|
resolveAsarFallback: () => import_asar_fallback_detection.resolveAsarFallback,
|
|
74
|
+
resolveDeviceSettingRestore: () => import_device_setting_restore.resolveDeviceSettingRestore,
|
|
62
75
|
resolveElectronCompatibility: () => import_electron_compatibility.resolveElectronCompatibility,
|
|
76
|
+
resolveEmulatorDeviceId: () => import_resolve_emulator_device_id.resolveEmulatorDeviceId,
|
|
63
77
|
resolveInstallerCompatibility: () => import_installer_compatibility.resolveInstallerCompatibility,
|
|
64
78
|
resolveMissingInjectedPlugins: () => import_demo_vault_populate.resolveMissingInjectedPlugins,
|
|
79
|
+
resolveSoftKeyboardTapPoints: () => import_soft_keyboard_geometry.resolveSoftKeyboardTapPoints,
|
|
80
|
+
runAdbBinary: () => import_adb.runAdbBinary,
|
|
81
|
+
runAdbText: () => import_adb.runAdbText,
|
|
82
|
+
runAdbTextWithoutDevice: () => import_adb.runAdbTextWithoutDevice,
|
|
65
83
|
runObsidianVersionMatrix: () => import_run_version_matrix.runObsidianVersionMatrix,
|
|
84
|
+
selectEmulatorDeviceId: () => import_emulator_device_id.selectEmulatorDeviceId,
|
|
66
85
|
setSetupErrorResolver: () => import_context_provider.setSetupErrorResolver,
|
|
67
86
|
setTransportOptionsResolver: () => import_context_provider.setTransportOptionsResolver,
|
|
68
87
|
setVaultPathResolver: () => import_context_provider.setVaultPathResolver,
|
|
69
|
-
|
|
88
|
+
tapDevice: () => import_soft_keyboard.tapDevice,
|
|
89
|
+
unregisterVault: () => import_vault_registry.unregisterVault,
|
|
90
|
+
withSoftKeyboardEnabled: () => import_device_settings.withSoftKeyboardEnabled,
|
|
91
|
+
writeDeviceSetting: () => import_device_settings.writeDeviceSetting
|
|
70
92
|
});
|
|
71
93
|
module.exports = __toCommonJS(index_exports);
|
|
94
|
+
var import_adb = require("./adb.cjs");
|
|
72
95
|
var import_asar_fallback_detection = require("./asar-fallback-detection.cjs");
|
|
73
96
|
var import_capture_obsidian_screenshot = require("./capture-obsidian-screenshot.cjs");
|
|
74
97
|
var import_capture_screenshot = require("./capture-screenshot.cjs");
|
|
@@ -81,7 +104,12 @@ var import_demo_vault_bootstrap = require("./demo-vault-bootstrap.cjs");
|
|
|
81
104
|
var import_demo_vault_populate = require("./demo-vault-populate.cjs");
|
|
82
105
|
var import_demo_vault_tree = require("./demo-vault-tree.cjs");
|
|
83
106
|
var import_desktop_only_plugin_skip_error = require("./desktop-only-plugin-skip-error.cjs");
|
|
107
|
+
var import_device_screenshot = require("./device-screenshot.cjs");
|
|
108
|
+
var import_device_setting_restore = require("./device-setting-restore.cjs");
|
|
109
|
+
var import_device_settings_command = require("./device-settings-command.cjs");
|
|
110
|
+
var import_device_settings = require("./device-settings.cjs");
|
|
84
111
|
var import_electron_compatibility = require("./electron-compatibility.cjs");
|
|
112
|
+
var import_emulator_device_id = require("./emulator-device-id.cjs");
|
|
85
113
|
var import_eval_in_obsidian = require("./eval-in-obsidian.cjs");
|
|
86
114
|
var import_fit_screenshot = require("./fit-screenshot.cjs");
|
|
87
115
|
var import_incompatible_installer_version_error = require("./incompatible-installer-version-error.cjs");
|
|
@@ -95,8 +123,11 @@ var import_open_obsidian_settings_tab = require("./open-obsidian-settings-tab.cj
|
|
|
95
123
|
var import_owned_instance_exited_error = require("./owned-instance-exited-error.cjs");
|
|
96
124
|
var import_poll_in_obsidian = require("./poll-in-obsidian.cjs");
|
|
97
125
|
var import_renderer_failed_to_initialize_error = require("./renderer-failed-to-initialize-error.cjs");
|
|
126
|
+
var import_resolve_emulator_device_id = require("./resolve-emulator-device-id.cjs");
|
|
98
127
|
var import_run_version_matrix = require("./run-version-matrix.cjs");
|
|
99
128
|
var import_silent_asar_fallback_error = require("./silent-asar-fallback-error.cjs");
|
|
129
|
+
var import_soft_keyboard_geometry = require("./soft-keyboard-geometry.cjs");
|
|
130
|
+
var import_soft_keyboard = require("./soft-keyboard.cjs");
|
|
100
131
|
var import_temporary_vault = require("./temporary-vault.cjs");
|
|
101
132
|
var import_transport_appium = require("./transport-appium.cjs");
|
|
102
133
|
var import_transport_desktop_cdp = require("./transport-desktop-cdp.cjs");
|
|
@@ -111,9 +142,13 @@ var import_version_matrix = require("./version-matrix.cjs");
|
|
|
111
142
|
ConfigDirectoryFallbackError,
|
|
112
143
|
ContextId,
|
|
113
144
|
DEFAULT_CONFIG_DIRECTORY,
|
|
145
|
+
DEFAULT_MINIMUM_KEYBOARD_HEIGHT_IN_PIXELS,
|
|
114
146
|
DEFAULT_OBSIDIAN_VERSION_SPECS,
|
|
115
147
|
DesktopCdpTransport,
|
|
116
148
|
DesktopOnlyPluginSkipError,
|
|
149
|
+
DeviceSettingNamespace,
|
|
150
|
+
DeviceSettingRestoreKind,
|
|
151
|
+
DeviceSettingVerb,
|
|
117
152
|
IncompatibleInstallerVersionError,
|
|
118
153
|
IntegrationSetupFailedError,
|
|
119
154
|
OwnedInstanceExitedError,
|
|
@@ -126,14 +161,19 @@ var import_version_matrix = require("./version-matrix.cjs");
|
|
|
126
161
|
buildDemoVaultPopulate,
|
|
127
162
|
buildDemoVaultPopulateAsync,
|
|
128
163
|
buildDeviceMetricsOverride,
|
|
164
|
+
buildDeviceSettingsCommandArguments,
|
|
129
165
|
buildLabelSvg,
|
|
166
|
+
buildSoftKeyboardDiagnosticMessage,
|
|
167
|
+
captureDeviceScreenshot,
|
|
130
168
|
captureObsidianScreenshot,
|
|
131
169
|
checkIsMobileTransport,
|
|
170
|
+
checkIsSoftKeyboardUp,
|
|
132
171
|
computeFitToCanvas,
|
|
133
172
|
computeLabelBand,
|
|
134
173
|
connectToCdp,
|
|
135
174
|
createTransportFromOptions,
|
|
136
175
|
decodeBase64Png,
|
|
176
|
+
deleteDeviceSetting,
|
|
137
177
|
escapeSvgText,
|
|
138
178
|
evalInObsidian,
|
|
139
179
|
fitScreenshotToCanvas,
|
|
@@ -141,19 +181,32 @@ var import_version_matrix = require("./version-matrix.cjs");
|
|
|
141
181
|
isPng,
|
|
142
182
|
labelScreenshot,
|
|
143
183
|
openObsidianSettingsTab,
|
|
184
|
+
parseInputMethodState,
|
|
144
185
|
pollInObsidian,
|
|
186
|
+
raiseSoftKeyboard,
|
|
145
187
|
readDemoVaultTree,
|
|
188
|
+
readDeviceSetting,
|
|
146
189
|
readPngDimensions,
|
|
147
190
|
registerLibResolver,
|
|
148
191
|
registerVault,
|
|
149
192
|
resolveAsarFallback,
|
|
193
|
+
resolveDeviceSettingRestore,
|
|
150
194
|
resolveElectronCompatibility,
|
|
195
|
+
resolveEmulatorDeviceId,
|
|
151
196
|
resolveInstallerCompatibility,
|
|
152
197
|
resolveMissingInjectedPlugins,
|
|
198
|
+
resolveSoftKeyboardTapPoints,
|
|
199
|
+
runAdbBinary,
|
|
200
|
+
runAdbText,
|
|
201
|
+
runAdbTextWithoutDevice,
|
|
153
202
|
runObsidianVersionMatrix,
|
|
203
|
+
selectEmulatorDeviceId,
|
|
154
204
|
setSetupErrorResolver,
|
|
155
205
|
setTransportOptionsResolver,
|
|
156
206
|
setVaultPathResolver,
|
|
157
|
-
|
|
207
|
+
tapDevice,
|
|
208
|
+
unregisterVault,
|
|
209
|
+
withSoftKeyboardEnabled,
|
|
210
|
+
writeDeviceSetting
|
|
158
211
|
});
|
|
159
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgaW50ZWdyYXRpb24gdGVzdGluZyBtb2R1bGUuXG4gKi9cblxuZXhwb3J0IHR5cGUge1xuICBBc2FyRmFsbGJhY2ssXG4gIEFzYXJGYWxsYmFja1RpZXIsXG4gIFJlc29sdmVBc2FyRmFsbGJhY2tQYXJhbXNcbn0gZnJvbSAnLi9hc2FyLWZhbGxiYWNrLWRldGVjdGlvbi5janMnO1xuZXhwb3J0IHsgcmVzb2x2ZUFzYXJGYWxsYmFjayB9IGZyb20gJy4vYXNhci1mYWxsYmFjay1kZXRlY3Rpb24uY2pzJztcbmV4cG9ydCB0eXBlIHsgQ2FwdHVyZU9ic2lkaWFuU2NyZWVuc2hvdE9wdGlvbnMgfSBmcm9tICcuL2NhcHR1cmUtb2JzaWRpYW4tc2NyZWVuc2hvdC5janMnO1xuZXhwb3J0IHsgY2FwdHVyZU9ic2lkaWFuU2NyZWVuc2hvdCB9IGZyb20gJy4vY2FwdHVyZS1vYnNpZGlhbi1zY3JlZW5zaG90LmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIENhcHR1cmVTY3JlZW5zaG90UGFyYW1zLFxuICBQbmdEaW1lbnNpb25zXG59IGZyb20gJy4vY2FwdHVyZS1zY3JlZW5zaG90LmNqcyc7XG5leHBvcnQge1xuICBidWlsZERldmljZU1ldHJpY3NPdmVycmlkZSxcbiAgZGVjb2RlQmFzZTY0UG5nLFxuICBpc1BuZyxcbiAgcmVhZFBuZ0RpbWVuc2lvbnNcbn0gZnJvbSAnLi9jYXB0dXJlLXNjcmVlbnNob3QuY2pzJztcbmV4cG9ydCB0eXBlIHsgQ29uZmlnRGlyZWN0b3J5RmFsbGJhY2tFcnJvckNvbnN0cnVjdG9yUGFyYW1zIH0gZnJvbSAnLi9jb25maWctZGlyZWN0b3J5LWZhbGxiYWNrLWVycm9yLmNqcyc7XG5leHBvcnQgeyBDb25maWdEaXJlY3RvcnlGYWxsYmFja0Vycm9yIH0gZnJvbSAnLi9jb25maWctZGlyZWN0b3J5LWZhbGxiYWNrLWVycm9yLmNqcyc7XG5leHBvcnQge1xuICBhc3NlcnRWYWxpZENvbmZpZ0RpcmVjdG9yeSxcbiAgREVGQVVMVF9DT05GSUdfRElSRUNUT1JZXG59IGZyb20gJy4vY29uZmlnLWRpcmVjdG9yeS5janMnO1xuZXhwb3J0IHR5cGUge1xuICBDZHBDb25uZWN0aW9uLFxuICBDb25uZWN0VG9DZHBPcHRpb25zXG59IGZyb20gJy4vY29ubmVjdC10by1jZHAuY2pzJztcbmV4cG9ydCB7IGNvbm5lY3RUb0NkcCB9IGZyb20gJy4vY29ubmVjdC10by1jZHAuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgQ29udGV4dEFyZ3VtZW50cyxcbiAgQ29udGV4dE9mXG59IGZyb20gJy4vY29udGV4dC1pZC5janMnO1xuZXhwb3J0IHsgQ29udGV4dElkIH0gZnJvbSAnLi9jb250ZXh0LWlkLmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIFNldHVwRXJyb3JSZXNvbHZlcixcbiAgVHJhbnNwb3J0T3B0aW9uc1Jlc29sdmVyLFxuICBWYXVsdFBhdGhSZXNvbHZlclxufSBmcm9tICcuL2NvbnRleHQtcHJvdmlkZXIuY2pzJztcbmV4cG9ydCB7XG4gIHNldFNldHVwRXJyb3JSZXNvbHZlcixcbiAgc2V0VHJhbnNwb3J0T3B0aW9uc1Jlc29sdmVyLFxuICBzZXRWYXVsdFBhdGhSZXNvbHZlclxufSBmcm9tICcuL2NvbnRleHQtcHJvdmlkZXIuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgQm9vdHN0cmFwRGVtb1ZhdWx0UGx1Z2luc1BhcmFtcyxcbiAgQm9vdHN0cmFwRGVtb1ZhdWx0UGx1Z2luc1Jlc3VsdCxcbiAgSW5zdGFsbGVkUGx1Z2luSW5mb1xufSBmcm9tICcuL2RlbW8tdmF1bHQtYm9vdHN0cmFwLmNqcyc7XG5leHBvcnQge1xuICBib290c3RyYXBEZW1vVmF1bHRQbHVnaW5zLFxuICBidWlsZERlbW9WYXVsdFBvcHVsYXRlQXN5bmNcbn0gZnJvbSAnLi9kZW1vLXZhdWx0LWJvb3RzdHJhcC5janMnO1xuZXhwb3J0IHR5cGUge1xuICBCdWlsZERlbW9WYXVsdFBvcHVsYXRlUGFyYW1zLFxuICBJbmplY3RQbHVnaW5QYXJhbXMsXG4gIFJlc29sdmVNaXNzaW5nSW5qZWN0ZWRQbHVnaW5zUGFyYW1zXG59IGZyb20gJy4vZGVtby12YXVsdC1wb3B1bGF0ZS5janMnO1xuZXhwb3J0IHtcbiAgYnVpbGREZW1vVmF1bHRQb3B1bGF0ZSxcbiAgcmVzb2x2ZU1pc3NpbmdJbmplY3RlZFBsdWdpbnNcbn0gZnJvbSAnLi9kZW1vLXZhdWx0LXBvcHVsYXRlLmNqcyc7XG5leHBvcnQgdHlwZSB7IFJlYWREZW1vVmF1bHRUcmVlUGFyYW1zIH0gZnJvbSAnLi9kZW1vLXZhdWx0LXRyZWUuY2pzJztcbmV4cG9ydCB7IHJlYWREZW1vVmF1bHRUcmVlIH0gZnJvbSAnLi9kZW1vLXZhdWx0LXRyZWUuY2pzJztcbmV4cG9ydCB7IERlc2t0b3BPbmx5UGx1Z2luU2tpcEVycm9yIH0gZnJvbSAnLi9kZXNrdG9wLW9ubHktcGx1Z2luLXNraXAtZXJyb3IuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgRWxlY3Ryb25Db21wYXRpYmlsaXR5LFxuICBFbGVjdHJvbkNvbXBhdGliaWxpdHlUaWVyLFxuICBSZXNvbHZlRWxlY3Ryb25Db21wYXRpYmlsaXR5UGFyYW1zXG59IGZyb20gJy4vZWxlY3Ryb24tY29tcGF0aWJpbGl0eS5janMnO1xuZXhwb3J0IHsgcmVzb2x2ZUVsZWN0cm9uQ29tcGF0aWJpbGl0eSB9IGZyb20gJy4vZWxlY3Ryb24tY29tcGF0aWJpbGl0eS5janMnO1xuZXhwb3J0IHR5cGUge1xuICBDbGlja0VsZW1lbnRQYXJhbXMsXG4gIENsaWNrTW91c2VQYXJhbXMsXG4gIENvbW1vbkFyZ3VtZW50cyxcbiAgQ3JlYXRlTm90ZVBhcmFtcyxcbiAgRXZhbEluT2JzaWRpYW5QYXJhbXMsXG4gIEdlbmVyaWNPYmplY3QsXG4gIEhvdmVyRWxlbWVudFBhcmFtcyxcbiAgTGliLFxuICBNb3VzZUJ1dHRvbixcbiAgTW92ZU1vdXNlUGFyYW1zLFxuICBPcGVuU2V0dGluZ3NUYWJQYXJhbXMsXG4gIFByZXNzS2V5UGFyYW1zLFxuICBUeXBlSW50b0VkaXRvclBhcmFtcyxcbiAgVW5ob3ZlckVsZW1lbnRQYXJhbXMsXG4gIFdhaXRVbnRpbFBhcmFtc1xufSBmcm9tICcuL2V2YWwtaW4tb2JzaWRpYW4uY2pzJztcbmV4cG9ydCB7IGV2YWxJbk9ic2lkaWFuIH0gZnJvbSAnLi9ldmFsLWluLW9ic2lkaWFuLmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIENvbXB1dGVGaXRUb0NhbnZhc1BhcmFtcyxcbiAgRml0U2NyZWVuc2hvdFRvQ2FudmFzT3B0aW9ucyxcbiAgRml0VG9DYW52YXNHZW9tZXRyeVxufSBmcm9tICcuL2ZpdC1zY3JlZW5zaG90LmNqcyc7XG5leHBvcnQge1xuICBjb21wdXRlRml0VG9DYW52YXMsXG4gIGZpdFNjcmVlbnNob3RUb0NhbnZhc1xufSBmcm9tICcuL2ZpdC1zY3JlZW5zaG90LmNqcyc7XG5leHBvcnQgdHlwZSB7IEluY29tcGF0aWJsZUluc3RhbGxlclZlcnNpb25FcnJvckNvbnN0cnVjdG9yUGFyYW1zIH0gZnJvbSAnLi9pbmNvbXBhdGlibGUtaW5zdGFsbGVyLXZlcnNpb24tZXJyb3IuY2pzJztcbmV4cG9ydCB7IEluY29tcGF0aWJsZUluc3RhbGxlclZlcnNpb25FcnJvciB9IGZyb20gJy4vaW5jb21wYXRpYmxlLWluc3RhbGxlci12ZXJzaW9uLWVycm9yLmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIEluc3RhbGxlckNvbXBhdGliaWxpdHksXG4gIEluc3RhbGxlckNvbXBhdGliaWxpdHlUaWVyLFxuICBSZXNvbHZlSW5zdGFsbGVyQ29tcGF0aWJpbGl0eVBhcmFtc1xufSBmcm9tICcuL2luc3RhbGxlci1jb21wYXRpYmlsaXR5LmNqcyc7XG5leHBvcnQgeyByZXNvbHZlSW5zdGFsbGVyQ29tcGF0aWJpbGl0eSB9IGZyb20gJy4vaW5zdGFsbGVyLWNvbXBhdGliaWxpdHkuY2pzJztcbmV4cG9ydCB0eXBlIHsgSW50ZWdyYXRpb25TZXR1cEZhaWxlZEVycm9yQ29uc3RydWN0b3JQYXJhbXMgfSBmcm9tICcuL2ludGVncmF0aW9uLXNldHVwLWZhaWxlZC1lcnJvci5janMnO1xuZXhwb3J0IHsgSW50ZWdyYXRpb25TZXR1cEZhaWxlZEVycm9yIH0gZnJvbSAnLi9pbnRlZ3JhdGlvbi1zZXR1cC1mYWlsZWQtZXJyb3IuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgQ29tcHV0ZUxhYmVsQmFuZFBhcmFtcyxcbiAgTGFiZWxCYW5kR2VvbWV0cnksXG4gIExhYmVsU2NyZWVuc2hvdE9wdGlvbnNcbn0gZnJvbSAnLi9sYWJlbC1zY3JlZW5zaG90LmNqcyc7XG5leHBvcnQge1xuICBidWlsZExhYmVsU3ZnLFxuICBjb21wdXRlTGFiZWxCYW5kLFxuICBlc2NhcGVTdmdUZXh0LFxuICBsYWJlbFNjcmVlbnNob3Rcbn0gZnJvbSAnLi9sYWJlbC1zY3JlZW5zaG90LmNqcyc7XG5leHBvcnQgdHlwZSB7IExpYlJlc29sdmVyIH0gZnJvbSAnLi9saWItcmVnaXN0cnkuY2pzJztcbmV4cG9ydCB7IHJlZ2lzdGVyTGliUmVzb2x2ZXIgfSBmcm9tICcuL2xpYi1yZWdpc3RyeS5janMnO1xuZXhwb3J0IHR5cGUge1xuICBPYnNpZGlhblJ1bnRpbWVWZXJzaW9ucyxcbiAgT2JzaWRpYW5WZXJzaW9uQ2hhbmdlbG9nVXJscyxcbiAgT2JzaWRpYW5WZXJzaW9uRG93bmxvYWRzLFxuICBPYnNpZGlhblZlcnNpb25NZXRhZGF0YVxufSBmcm9tICcuL29ic2lkaWFuLW1ldGFkYXRhLmNqcyc7XG5leHBvcnQgeyBnZXRWZXJzaW9uTWV0YWRhdGEgfSBmcm9tICcuL29ic2lkaWFuLW1ldGFkYXRhLmNqcyc7XG5leHBvcnQge1xuICBDQVRBTFlTVF9MQVRFU1QsXG4gIFBVQkxJQ19MQVRFU1Rcbn0gZnJvbSAnLi9vYnNpZGlhbi12ZXJzaW9uLmNqcyc7XG5leHBvcnQgdHlwZSB7IE9wZW5PYnNpZGlhblNldHRpbmdzVGFiT3B0aW9ucyB9IGZyb20gJy4vb3Blbi1vYnNpZGlhbi1zZXR0aW5ncy10YWIuY2pzJztcbmV4cG9ydCB7IG9wZW5PYnNpZGlhblNldHRpbmdzVGFiIH0gZnJvbSAnLi9vcGVuLW9ic2lkaWFuLXNldHRpbmdzLXRhYi5janMnO1xuZXhwb3J0IHR5cGUgeyBPd25lZEluc3RhbmNlRXhpdGVkRXJyb3JDb25zdHJ1Y3RvclBhcmFtcyB9IGZyb20gJy4vb3duZWQtaW5zdGFuY2UtZXhpdGVkLWVycm9yLmNqcyc7XG5leHBvcnQgeyBPd25lZEluc3RhbmNlRXhpdGVkRXJyb3IgfSBmcm9tICcuL293bmVkLWluc3RhbmNlLWV4aXRlZC1lcnJvci5janMnO1xuZXhwb3J0IHR5cGUgeyBQb2xsSW5PYnNpZGlhblBhcmFtcyB9IGZyb20gJy4vcG9sbC1pbi1vYnNpZGlhbi5janMnO1xuZXhwb3J0IHsgcG9sbEluT2JzaWRpYW4gfSBmcm9tICcuL3BvbGwtaW4tb2JzaWRpYW4uY2pzJztcbmV4cG9ydCB7IFJlbmRlcmVyRmFpbGVkVG9Jbml0aWFsaXplRXJyb3IgfSBmcm9tICcuL3JlbmRlcmVyLWZhaWxlZC10by1pbml0aWFsaXplLWVycm9yLmNqcyc7XG5leHBvcnQgdHlwZSB7IFJ1bk9ic2lkaWFuVmVyc2lvbk1hdHJpeFBhcmFtcyB9IGZyb20gJy4vcnVuLXZlcnNpb24tbWF0cml4LmNqcyc7XG5leHBvcnQgeyBydW5PYnNpZGlhblZlcnNpb25NYXRyaXggfSBmcm9tICcuL3J1bi12ZXJzaW9uLW1hdHJpeC5janMnO1xuZXhwb3J0IHR5cGUgeyBTaWxlbnRBc2FyRmFsbGJhY2tFcnJvckNvbnN0cnVjdG9yUGFyYW1zIH0gZnJvbSAnLi9zaWxlbnQtYXNhci1mYWxsYmFjay1lcnJvci5janMnO1xuZXhwb3J0IHsgU2lsZW50QXNhckZhbGxiYWNrRXJyb3IgfSBmcm9tICcuL3NpbGVudC1hc2FyLWZhbGxiYWNrLWVycm9yLmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIFBvcHVsYXRlRmlsZUNvbnRlbnQsXG4gIFBvcHVsYXRlRmlsZXNQYXJhbXMsXG4gIFRlbXBvcmFyeVZhdWx0T3B0aW9uc1xufSBmcm9tICcuL3RlbXBvcmFyeS12YXVsdC5janMnO1xuZXhwb3J0IHsgVGVtcG9yYXJ5VmF1bHQgfSBmcm9tICcuL3RlbXBvcmFyeS12YXVsdC5janMnO1xuZXhwb3J0IHR5cGUge1xuICBBcHBpdW1TZXNzaW9uSW5mbyxcbiAgQXBwaXVtVHJhbnNwb3J0Q29uZmlnXG59IGZyb20gJy4vdHJhbnNwb3J0LWFwcGl1bS5janMnO1xuZXhwb3J0IHsgQXBwaXVtVHJhbnNwb3J0IH0gZnJvbSAnLi90cmFuc3BvcnQtYXBwaXVtLmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIERlc2t0b3BDZHBUcmFuc3BvcnRDb25maWcsXG4gIE93bmVkSW5zdGFuY2VBc2FyLFxuICBPd25lZEluc3RhbmNlQ29uZmlnLFxuICBPd25lZEluc3RhbmNlRW5kcG9pbnRcbn0gZnJvbSAnLi90cmFuc3BvcnQtZGVza3RvcC1jZHAuY2pzJztcbmV4cG9ydCB7IERlc2t0b3BDZHBUcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC1kZXNrdG9wLWNkcC5janMnO1xuZXhwb3J0IHsgY3JlYXRlVHJhbnNwb3J0RnJvbU9wdGlvbnMgfSBmcm9tICcuL3RyYW5zcG9ydC1mYWN0b3J5LmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIE9ic2lkaWFuQW5kcm9pZEFwcGl1bVRyYW5zcG9ydE9wdGlvbnMsXG4gIE9ic2lkaWFuQ2RwVHJhbnNwb3J0T3B0aW9ucyxcbiAgT2JzaWRpYW5UcmFuc3BvcnRPcHRpb25zXG59IGZyb20gJy4vdHJhbnNwb3J0LW9wdGlvbnMuY2pzJztcbmV4cG9ydCB7IGNoZWNrSXNNb2JpbGVUcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC1vcHRpb25zLmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIENvbnNvbGVDYXB0dXJlSGFuZGxlLFxuICBPYnNpZGlhblRyYW5zcG9ydCxcbiAgVHJhbnNwb3J0RXZhbE9wdGlvbnNcbn0gZnJvbSAnLi90cmFuc3BvcnQuY2pzJztcbmV4cG9ydCB7XG4gIHJlZ2lzdGVyVmF1bHQsXG4gIHVucmVnaXN0ZXJWYXVsdFxufSBmcm9tICcuL3ZhdWx0LXJlZ2lzdHJ5LmNqcyc7XG5leHBvcnQgdHlwZSB7IE9ic2lkaWFuVmVyc2lvbk1hdHJpeEVudHJ5IH0gZnJvbSAnLi92ZXJzaW9uLW1hdHJpeC5janMnO1xuZXhwb3J0IHsgREVGQVVMVF9PQlNJRElBTl9WRVJTSU9OX1NQRUNTIH0gZnJvbSAnLi92ZXJzaW9uLW1hdHJpeC5janMnO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVdBLHFDQUFvQztBQUVwQyx5Q0FBMEM7QUFLMUMsZ0NBS087QUFFUCw2Q0FBNkM7QUFDN0MsOEJBR087QUFLUCw0QkFBNkI7QUFLN0Isd0JBQTBCO0FBTTFCLDhCQUlPO0FBTVAsa0NBR087QUFNUCxpQ0FHTztBQUVQLDZCQUFrQztBQUNsQyw0Q0FBMkM7QUFNM0Msb0NBQTZDO0FBa0I3Qyw4QkFBK0I7QUFNL0IsNEJBR087QUFFUCxrREFBa0Q7QUFNbEQscUNBQThDO0FBRTlDLDRDQUE0QztBQU01Qyw4QkFLTztBQUVQLDBCQUFvQztBQU9wQywrQkFBbUM7QUFDbkMsOEJBR087QUFFUCx3Q0FBd0M7QUFFeEMseUNBQXlDO0FBRXpDLDhCQUErQjtBQUMvQixpREFBZ0Q7QUFFaEQsZ0NBQXlDO0FBRXpDLHdDQUF3QztBQU14Qyw2QkFBK0I7QUFLL0IsOEJBQWdDO0FBT2hDLG1DQUFvQztBQUNwQywrQkFBMkM7QUFNM0MsK0JBQXVDO0FBTXZDLDRCQUdPO0FBRVAsNEJBQStDOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
212
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgaW50ZWdyYXRpb24gdGVzdGluZyBtb2R1bGUuXG4gKi9cblxuZXhwb3J0IHR5cGUgeyBSdW5BZGJQYXJhbXMgfSBmcm9tICcuL2FkYi5janMnO1xuZXhwb3J0IHtcbiAgcnVuQWRiQmluYXJ5LFxuICBydW5BZGJUZXh0LFxuICBydW5BZGJUZXh0V2l0aG91dERldmljZVxufSBmcm9tICcuL2FkYi5janMnO1xuZXhwb3J0IHR5cGUge1xuICBBc2FyRmFsbGJhY2ssXG4gIEFzYXJGYWxsYmFja1RpZXIsXG4gIFJlc29sdmVBc2FyRmFsbGJhY2tQYXJhbXNcbn0gZnJvbSAnLi9hc2FyLWZhbGxiYWNrLWRldGVjdGlvbi5janMnO1xuZXhwb3J0IHsgcmVzb2x2ZUFzYXJGYWxsYmFjayB9IGZyb20gJy4vYXNhci1mYWxsYmFjay1kZXRlY3Rpb24uY2pzJztcbmV4cG9ydCB0eXBlIHsgQ2FwdHVyZU9ic2lkaWFuU2NyZWVuc2hvdE9wdGlvbnMgfSBmcm9tICcuL2NhcHR1cmUtb2JzaWRpYW4tc2NyZWVuc2hvdC5janMnO1xuZXhwb3J0IHsgY2FwdHVyZU9ic2lkaWFuU2NyZWVuc2hvdCB9IGZyb20gJy4vY2FwdHVyZS1vYnNpZGlhbi1zY3JlZW5zaG90LmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIENhcHR1cmVTY3JlZW5zaG90UGFyYW1zLFxuICBQbmdEaW1lbnNpb25zXG59IGZyb20gJy4vY2FwdHVyZS1zY3JlZW5zaG90LmNqcyc7XG5leHBvcnQge1xuICBidWlsZERldmljZU1ldHJpY3NPdmVycmlkZSxcbiAgZGVjb2RlQmFzZTY0UG5nLFxuICBpc1BuZyxcbiAgcmVhZFBuZ0RpbWVuc2lvbnNcbn0gZnJvbSAnLi9jYXB0dXJlLXNjcmVlbnNob3QuY2pzJztcbmV4cG9ydCB0eXBlIHsgQ29uZmlnRGlyZWN0b3J5RmFsbGJhY2tFcnJvckNvbnN0cnVjdG9yUGFyYW1zIH0gZnJvbSAnLi9jb25maWctZGlyZWN0b3J5LWZhbGxiYWNrLWVycm9yLmNqcyc7XG5leHBvcnQgeyBDb25maWdEaXJlY3RvcnlGYWxsYmFja0Vycm9yIH0gZnJvbSAnLi9jb25maWctZGlyZWN0b3J5LWZhbGxiYWNrLWVycm9yLmNqcyc7XG5leHBvcnQge1xuICBhc3NlcnRWYWxpZENvbmZpZ0RpcmVjdG9yeSxcbiAgREVGQVVMVF9DT05GSUdfRElSRUNUT1JZXG59IGZyb20gJy4vY29uZmlnLWRpcmVjdG9yeS5janMnO1xuZXhwb3J0IHR5cGUge1xuICBDZHBDb25uZWN0aW9uLFxuICBDb25uZWN0VG9DZHBPcHRpb25zXG59IGZyb20gJy4vY29ubmVjdC10by1jZHAuY2pzJztcbmV4cG9ydCB7IGNvbm5lY3RUb0NkcCB9IGZyb20gJy4vY29ubmVjdC10by1jZHAuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgQ29udGV4dEFyZ3VtZW50cyxcbiAgQ29udGV4dE9mXG59IGZyb20gJy4vY29udGV4dC1pZC5janMnO1xuZXhwb3J0IHsgQ29udGV4dElkIH0gZnJvbSAnLi9jb250ZXh0LWlkLmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIFNldHVwRXJyb3JSZXNvbHZlcixcbiAgVHJhbnNwb3J0T3B0aW9uc1Jlc29sdmVyLFxuICBWYXVsdFBhdGhSZXNvbHZlclxufSBmcm9tICcuL2NvbnRleHQtcHJvdmlkZXIuY2pzJztcbmV4cG9ydCB7XG4gIHNldFNldHVwRXJyb3JSZXNvbHZlcixcbiAgc2V0VHJhbnNwb3J0T3B0aW9uc1Jlc29sdmVyLFxuICBzZXRWYXVsdFBhdGhSZXNvbHZlclxufSBmcm9tICcuL2NvbnRleHQtcHJvdmlkZXIuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgQm9vdHN0cmFwRGVtb1ZhdWx0UGx1Z2luc1BhcmFtcyxcbiAgQm9vdHN0cmFwRGVtb1ZhdWx0UGx1Z2luc1Jlc3VsdCxcbiAgSW5zdGFsbGVkUGx1Z2luSW5mb1xufSBmcm9tICcuL2RlbW8tdmF1bHQtYm9vdHN0cmFwLmNqcyc7XG5leHBvcnQge1xuICBib290c3RyYXBEZW1vVmF1bHRQbHVnaW5zLFxuICBidWlsZERlbW9WYXVsdFBvcHVsYXRlQXN5bmNcbn0gZnJvbSAnLi9kZW1vLXZhdWx0LWJvb3RzdHJhcC5janMnO1xuZXhwb3J0IHR5cGUge1xuICBCdWlsZERlbW9WYXVsdFBvcHVsYXRlUGFyYW1zLFxuICBJbmplY3RQbHVnaW5QYXJhbXMsXG4gIFJlc29sdmVNaXNzaW5nSW5qZWN0ZWRQbHVnaW5zUGFyYW1zXG59IGZyb20gJy4vZGVtby12YXVsdC1wb3B1bGF0ZS5janMnO1xuZXhwb3J0IHtcbiAgYnVpbGREZW1vVmF1bHRQb3B1bGF0ZSxcbiAgcmVzb2x2ZU1pc3NpbmdJbmplY3RlZFBsdWdpbnNcbn0gZnJvbSAnLi9kZW1vLXZhdWx0LXBvcHVsYXRlLmNqcyc7XG5leHBvcnQgdHlwZSB7IFJlYWREZW1vVmF1bHRUcmVlUGFyYW1zIH0gZnJvbSAnLi9kZW1vLXZhdWx0LXRyZWUuY2pzJztcbmV4cG9ydCB7IHJlYWREZW1vVmF1bHRUcmVlIH0gZnJvbSAnLi9kZW1vLXZhdWx0LXRyZWUuY2pzJztcbmV4cG9ydCB7IERlc2t0b3BPbmx5UGx1Z2luU2tpcEVycm9yIH0gZnJvbSAnLi9kZXNrdG9wLW9ubHktcGx1Z2luLXNraXAtZXJyb3IuY2pzJztcbmV4cG9ydCB0eXBlIHsgQ2FwdHVyZURldmljZVNjcmVlbnNob3RQYXJhbXMgfSBmcm9tICcuL2RldmljZS1zY3JlZW5zaG90LmNqcyc7XG5leHBvcnQgeyBjYXB0dXJlRGV2aWNlU2NyZWVuc2hvdCB9IGZyb20gJy4vZGV2aWNlLXNjcmVlbnNob3QuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgRGV2aWNlU2V0dGluZ1Jlc3RvcmUsXG4gIERldmljZVNldHRpbmdSZXN0b3JlRGVsZXRlLFxuICBEZXZpY2VTZXR0aW5nUmVzdG9yZVdyaXRlXG59IGZyb20gJy4vZGV2aWNlLXNldHRpbmctcmVzdG9yZS5janMnO1xuZXhwb3J0IHtcbiAgRGV2aWNlU2V0dGluZ1Jlc3RvcmVLaW5kLFxuICByZXNvbHZlRGV2aWNlU2V0dGluZ1Jlc3RvcmVcbn0gZnJvbSAnLi9kZXZpY2Utc2V0dGluZy1yZXN0b3JlLmNqcyc7XG5leHBvcnQgdHlwZSB7IEJ1aWxkRGV2aWNlU2V0dGluZ3NDb21tYW5kQXJndW1lbnRzUGFyYW1zIH0gZnJvbSAnLi9kZXZpY2Utc2V0dGluZ3MtY29tbWFuZC5janMnO1xuZXhwb3J0IHtcbiAgYnVpbGREZXZpY2VTZXR0aW5nc0NvbW1hbmRBcmd1bWVudHMsXG4gIERldmljZVNldHRpbmdOYW1lc3BhY2UsXG4gIERldmljZVNldHRpbmdWZXJiXG59IGZyb20gJy4vZGV2aWNlLXNldHRpbmdzLWNvbW1hbmQuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgRGV2aWNlU2V0dGluZ1BhcmFtcyxcbiAgV2l0aFNvZnRLZXlib2FyZEVuYWJsZWRQYXJhbXMsXG4gIFdyaXRlRGV2aWNlU2V0dGluZ1BhcmFtc1xufSBmcm9tICcuL2RldmljZS1zZXR0aW5ncy5janMnO1xuZXhwb3J0IHtcbiAgZGVsZXRlRGV2aWNlU2V0dGluZyxcbiAgcmVhZERldmljZVNldHRpbmcsXG4gIHdpdGhTb2Z0S2V5Ym9hcmRFbmFibGVkLFxuICB3cml0ZURldmljZVNldHRpbmdcbn0gZnJvbSAnLi9kZXZpY2Utc2V0dGluZ3MuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgRWxlY3Ryb25Db21wYXRpYmlsaXR5LFxuICBFbGVjdHJvbkNvbXBhdGliaWxpdHlUaWVyLFxuICBSZXNvbHZlRWxlY3Ryb25Db21wYXRpYmlsaXR5UGFyYW1zXG59IGZyb20gJy4vZWxlY3Ryb24tY29tcGF0aWJpbGl0eS5janMnO1xuZXhwb3J0IHsgcmVzb2x2ZUVsZWN0cm9uQ29tcGF0aWJpbGl0eSB9IGZyb20gJy4vZWxlY3Ryb24tY29tcGF0aWJpbGl0eS5janMnO1xuZXhwb3J0IHR5cGUge1xuICBFbXVsYXRvckRldmljZUNhbmRpZGF0ZSxcbiAgU2VsZWN0RW11bGF0b3JEZXZpY2VJZFBhcmFtc1xufSBmcm9tICcuL2VtdWxhdG9yLWRldmljZS1pZC5janMnO1xuZXhwb3J0IHsgc2VsZWN0RW11bGF0b3JEZXZpY2VJZCB9IGZyb20gJy4vZW11bGF0b3ItZGV2aWNlLWlkLmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIENsaWNrRWxlbWVudFBhcmFtcyxcbiAgQ2xpY2tNb3VzZVBhcmFtcyxcbiAgQ29tbW9uQXJndW1lbnRzLFxuICBDcmVhdGVOb3RlUGFyYW1zLFxuICBFdmFsSW5PYnNpZGlhblBhcmFtcyxcbiAgR2VuZXJpY09iamVjdCxcbiAgSG92ZXJFbGVtZW50UGFyYW1zLFxuICBMaWIsXG4gIE1vdXNlQnV0dG9uLFxuICBNb3ZlTW91c2VQYXJhbXMsXG4gIE9wZW5TZXR0aW5nc1RhYlBhcmFtcyxcbiAgUHJlc3NLZXlQYXJhbXMsXG4gIFR5cGVJbnRvRWRpdG9yUGFyYW1zLFxuICBVbmhvdmVyRWxlbWVudFBhcmFtcyxcbiAgV2FpdFVudGlsUGFyYW1zXG59IGZyb20gJy4vZXZhbC1pbi1vYnNpZGlhbi5janMnO1xuZXhwb3J0IHsgZXZhbEluT2JzaWRpYW4gfSBmcm9tICcuL2V2YWwtaW4tb2JzaWRpYW4uY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgQ29tcHV0ZUZpdFRvQ2FudmFzUGFyYW1zLFxuICBGaXRTY3JlZW5zaG90VG9DYW52YXNPcHRpb25zLFxuICBGaXRUb0NhbnZhc0dlb21ldHJ5XG59IGZyb20gJy4vZml0LXNjcmVlbnNob3QuY2pzJztcbmV4cG9ydCB7XG4gIGNvbXB1dGVGaXRUb0NhbnZhcyxcbiAgZml0U2NyZWVuc2hvdFRvQ2FudmFzXG59IGZyb20gJy4vZml0LXNjcmVlbnNob3QuY2pzJztcbmV4cG9ydCB0eXBlIHsgSW5jb21wYXRpYmxlSW5zdGFsbGVyVmVyc2lvbkVycm9yQ29uc3RydWN0b3JQYXJhbXMgfSBmcm9tICcuL2luY29tcGF0aWJsZS1pbnN0YWxsZXItdmVyc2lvbi1lcnJvci5janMnO1xuZXhwb3J0IHsgSW5jb21wYXRpYmxlSW5zdGFsbGVyVmVyc2lvbkVycm9yIH0gZnJvbSAnLi9pbmNvbXBhdGlibGUtaW5zdGFsbGVyLXZlcnNpb24tZXJyb3IuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgSW5zdGFsbGVyQ29tcGF0aWJpbGl0eSxcbiAgSW5zdGFsbGVyQ29tcGF0aWJpbGl0eVRpZXIsXG4gIFJlc29sdmVJbnN0YWxsZXJDb21wYXRpYmlsaXR5UGFyYW1zXG59IGZyb20gJy4vaW5zdGFsbGVyLWNvbXBhdGliaWxpdHkuY2pzJztcbmV4cG9ydCB7IHJlc29sdmVJbnN0YWxsZXJDb21wYXRpYmlsaXR5IH0gZnJvbSAnLi9pbnN0YWxsZXItY29tcGF0aWJpbGl0eS5janMnO1xuZXhwb3J0IHR5cGUgeyBJbnRlZ3JhdGlvblNldHVwRmFpbGVkRXJyb3JDb25zdHJ1Y3RvclBhcmFtcyB9IGZyb20gJy4vaW50ZWdyYXRpb24tc2V0dXAtZmFpbGVkLWVycm9yLmNqcyc7XG5leHBvcnQgeyBJbnRlZ3JhdGlvblNldHVwRmFpbGVkRXJyb3IgfSBmcm9tICcuL2ludGVncmF0aW9uLXNldHVwLWZhaWxlZC1lcnJvci5janMnO1xuZXhwb3J0IHR5cGUge1xuICBDb21wdXRlTGFiZWxCYW5kUGFyYW1zLFxuICBMYWJlbEJhbmRHZW9tZXRyeSxcbiAgTGFiZWxTY3JlZW5zaG90T3B0aW9uc1xufSBmcm9tICcuL2xhYmVsLXNjcmVlbnNob3QuY2pzJztcbmV4cG9ydCB7XG4gIGJ1aWxkTGFiZWxTdmcsXG4gIGNvbXB1dGVMYWJlbEJhbmQsXG4gIGVzY2FwZVN2Z1RleHQsXG4gIGxhYmVsU2NyZWVuc2hvdFxufSBmcm9tICcuL2xhYmVsLXNjcmVlbnNob3QuY2pzJztcbmV4cG9ydCB0eXBlIHsgTGliUmVzb2x2ZXIgfSBmcm9tICcuL2xpYi1yZWdpc3RyeS5janMnO1xuZXhwb3J0IHsgcmVnaXN0ZXJMaWJSZXNvbHZlciB9IGZyb20gJy4vbGliLXJlZ2lzdHJ5LmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIE9ic2lkaWFuUnVudGltZVZlcnNpb25zLFxuICBPYnNpZGlhblZlcnNpb25DaGFuZ2Vsb2dVcmxzLFxuICBPYnNpZGlhblZlcnNpb25Eb3dubG9hZHMsXG4gIE9ic2lkaWFuVmVyc2lvbk1ldGFkYXRhXG59IGZyb20gJy4vb2JzaWRpYW4tbWV0YWRhdGEuY2pzJztcbmV4cG9ydCB7IGdldFZlcnNpb25NZXRhZGF0YSB9IGZyb20gJy4vb2JzaWRpYW4tbWV0YWRhdGEuY2pzJztcbmV4cG9ydCB7XG4gIENBVEFMWVNUX0xBVEVTVCxcbiAgUFVCTElDX0xBVEVTVFxufSBmcm9tICcuL29ic2lkaWFuLXZlcnNpb24uY2pzJztcbmV4cG9ydCB0eXBlIHsgT3Blbk9ic2lkaWFuU2V0dGluZ3NUYWJPcHRpb25zIH0gZnJvbSAnLi9vcGVuLW9ic2lkaWFuLXNldHRpbmdzLXRhYi5janMnO1xuZXhwb3J0IHsgb3Blbk9ic2lkaWFuU2V0dGluZ3NUYWIgfSBmcm9tICcuL29wZW4tb2JzaWRpYW4tc2V0dGluZ3MtdGFiLmNqcyc7XG5leHBvcnQgdHlwZSB7IE93bmVkSW5zdGFuY2VFeGl0ZWRFcnJvckNvbnN0cnVjdG9yUGFyYW1zIH0gZnJvbSAnLi9vd25lZC1pbnN0YW5jZS1leGl0ZWQtZXJyb3IuY2pzJztcbmV4cG9ydCB7IE93bmVkSW5zdGFuY2VFeGl0ZWRFcnJvciB9IGZyb20gJy4vb3duZWQtaW5zdGFuY2UtZXhpdGVkLWVycm9yLmNqcyc7XG5leHBvcnQgdHlwZSB7IFBvbGxJbk9ic2lkaWFuUGFyYW1zIH0gZnJvbSAnLi9wb2xsLWluLW9ic2lkaWFuLmNqcyc7XG5leHBvcnQgeyBwb2xsSW5PYnNpZGlhbiB9IGZyb20gJy4vcG9sbC1pbi1vYnNpZGlhbi5janMnO1xuZXhwb3J0IHsgUmVuZGVyZXJGYWlsZWRUb0luaXRpYWxpemVFcnJvciB9IGZyb20gJy4vcmVuZGVyZXItZmFpbGVkLXRvLWluaXRpYWxpemUtZXJyb3IuY2pzJztcbmV4cG9ydCB0eXBlIHsgUmVzb2x2ZUVtdWxhdG9yRGV2aWNlSWRQYXJhbXMgfSBmcm9tICcuL3Jlc29sdmUtZW11bGF0b3ItZGV2aWNlLWlkLmNqcyc7XG5leHBvcnQgeyByZXNvbHZlRW11bGF0b3JEZXZpY2VJZCB9IGZyb20gJy4vcmVzb2x2ZS1lbXVsYXRvci1kZXZpY2UtaWQuY2pzJztcbmV4cG9ydCB0eXBlIHsgUnVuT2JzaWRpYW5WZXJzaW9uTWF0cml4UGFyYW1zIH0gZnJvbSAnLi9ydW4tdmVyc2lvbi1tYXRyaXguY2pzJztcbmV4cG9ydCB7IHJ1bk9ic2lkaWFuVmVyc2lvbk1hdHJpeCB9IGZyb20gJy4vcnVuLXZlcnNpb24tbWF0cml4LmNqcyc7XG5leHBvcnQgdHlwZSB7IFNpbGVudEFzYXJGYWxsYmFja0Vycm9yQ29uc3RydWN0b3JQYXJhbXMgfSBmcm9tICcuL3NpbGVudC1hc2FyLWZhbGxiYWNrLWVycm9yLmNqcyc7XG5leHBvcnQgeyBTaWxlbnRBc2FyRmFsbGJhY2tFcnJvciB9IGZyb20gJy4vc2lsZW50LWFzYXItZmFsbGJhY2stZXJyb3IuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgQnVpbGRTb2Z0S2V5Ym9hcmREaWFnbm9zdGljTWVzc2FnZVBhcmFtcyxcbiAgQ2hlY2tJc1NvZnRLZXlib2FyZFVwUGFyYW1zLFxuICBFbGVtZW50UmVjdCxcbiAgUmVzb2x2ZVNvZnRLZXlib2FyZFRhcFBvaW50c1BhcmFtcyxcbiAgU29mdEtleWJvYXJkVGFwUG9pbnQsXG4gIFNvZnRLZXlib2FyZFZpZXdwb3J0U25hcHNob3Rcbn0gZnJvbSAnLi9zb2Z0LWtleWJvYXJkLWdlb21ldHJ5LmNqcyc7XG5leHBvcnQge1xuICBidWlsZFNvZnRLZXlib2FyZERpYWdub3N0aWNNZXNzYWdlLFxuICBjaGVja0lzU29mdEtleWJvYXJkVXAsXG4gIERFRkFVTFRfTUlOSU1VTV9LRVlCT0FSRF9IRUlHSFRfSU5fUElYRUxTLFxuICBwYXJzZUlucHV0TWV0aG9kU3RhdGUsXG4gIHJlc29sdmVTb2Z0S2V5Ym9hcmRUYXBQb2ludHNcbn0gZnJvbSAnLi9zb2Z0LWtleWJvYXJkLWdlb21ldHJ5LmNqcyc7XG5leHBvcnQgdHlwZSB7XG4gIFJhaXNlU29mdEtleWJvYXJkUGFyYW1zLFxuICBUYXBEZXZpY2VQYXJhbXNcbn0gZnJvbSAnLi9zb2Z0LWtleWJvYXJkLmNqcyc7XG5leHBvcnQge1xuICByYWlzZVNvZnRLZXlib2FyZCxcbiAgdGFwRGV2aWNlXG59IGZyb20gJy4vc29mdC1rZXlib2FyZC5janMnO1xuZXhwb3J0IHR5cGUge1xuICBQb3B1bGF0ZUZpbGVDb250ZW50LFxuICBQb3B1bGF0ZUZpbGVzUGFyYW1zLFxuICBUZW1wb3JhcnlWYXVsdE9wdGlvbnNcbn0gZnJvbSAnLi90ZW1wb3JhcnktdmF1bHQuY2pzJztcbmV4cG9ydCB7IFRlbXBvcmFyeVZhdWx0IH0gZnJvbSAnLi90ZW1wb3JhcnktdmF1bHQuY2pzJztcbmV4cG9ydCB0eXBlIHtcbiAgQXBwaXVtU2Vzc2lvbkluZm8sXG4gIEFwcGl1bVRyYW5zcG9ydENvbmZpZ1xufSBmcm9tICcuL3RyYW5zcG9ydC1hcHBpdW0uY2pzJztcbmV4cG9ydCB7IEFwcGl1bVRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LWFwcGl1bS5janMnO1xuZXhwb3J0IHR5cGUge1xuICBEZXNrdG9wQ2RwVHJhbnNwb3J0Q29uZmlnLFxuICBPd25lZEluc3RhbmNlQXNhcixcbiAgT3duZWRJbnN0YW5jZUNvbmZpZyxcbiAgT3duZWRJbnN0YW5jZUVuZHBvaW50XG59IGZyb20gJy4vdHJhbnNwb3J0LWRlc2t0b3AtY2RwLmNqcyc7XG5leHBvcnQgeyBEZXNrdG9wQ2RwVHJhbnNwb3J0IH0gZnJvbSAnLi90cmFuc3BvcnQtZGVza3RvcC1jZHAuY2pzJztcbmV4cG9ydCB7IGNyZWF0ZVRyYW5zcG9ydEZyb21PcHRpb25zIH0gZnJvbSAnLi90cmFuc3BvcnQtZmFjdG9yeS5janMnO1xuZXhwb3J0IHR5cGUge1xuICBPYnNpZGlhbkFuZHJvaWRBcHBpdW1UcmFuc3BvcnRPcHRpb25zLFxuICBPYnNpZGlhbkNkcFRyYW5zcG9ydE9wdGlvbnMsXG4gIE9ic2lkaWFuVHJhbnNwb3J0T3B0aW9uc1xufSBmcm9tICcuL3RyYW5zcG9ydC1vcHRpb25zLmNqcyc7XG5leHBvcnQgeyBjaGVja0lzTW9iaWxlVHJhbnNwb3J0IH0gZnJvbSAnLi90cmFuc3BvcnQtb3B0aW9ucy5janMnO1xuZXhwb3J0IHR5cGUge1xuICBDb25zb2xlQ2FwdHVyZUhhbmRsZSxcbiAgT2JzaWRpYW5UcmFuc3BvcnQsXG4gIFRyYW5zcG9ydEV2YWxPcHRpb25zXG59IGZyb20gJy4vdHJhbnNwb3J0LmNqcyc7XG5leHBvcnQge1xuICByZWdpc3RlclZhdWx0LFxuICB1bnJlZ2lzdGVyVmF1bHRcbn0gZnJvbSAnLi92YXVsdC1yZWdpc3RyeS5janMnO1xuZXhwb3J0IHR5cGUgeyBPYnNpZGlhblZlcnNpb25NYXRyaXhFbnRyeSB9IGZyb20gJy4vdmVyc2lvbi1tYXRyaXguY2pzJztcbmV4cG9ydCB7IERFRkFVTFRfT0JTSURJQU5fVkVSU0lPTl9TUEVDUyB9IGZyb20gJy4vdmVyc2lvbi1tYXRyaXguY2pzJztcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU9BLGlCQUlPO0FBTVAscUNBQW9DO0FBRXBDLHlDQUEwQztBQUsxQyxnQ0FLTztBQUVQLDZDQUE2QztBQUM3Qyw4QkFHTztBQUtQLDRCQUE2QjtBQUs3Qix3QkFBMEI7QUFNMUIsOEJBSU87QUFNUCxrQ0FHTztBQU1QLGlDQUdPO0FBRVAsNkJBQWtDO0FBQ2xDLDRDQUEyQztBQUUzQywrQkFBd0M7QUFNeEMsb0NBR087QUFFUCxxQ0FJTztBQU1QLDZCQUtPO0FBTVAsb0NBQTZDO0FBSzdDLGdDQUF1QztBQWtCdkMsOEJBQStCO0FBTS9CLDRCQUdPO0FBRVAsa0RBQWtEO0FBTWxELHFDQUE4QztBQUU5Qyw0Q0FBNEM7QUFNNUMsOEJBS087QUFFUCwwQkFBb0M7QUFPcEMsK0JBQW1DO0FBQ25DLDhCQUdPO0FBRVAsd0NBQXdDO0FBRXhDLHlDQUF5QztBQUV6Qyw4QkFBK0I7QUFDL0IsaURBQWdEO0FBRWhELHdDQUF3QztBQUV4QyxnQ0FBeUM7QUFFekMsd0NBQXdDO0FBU3hDLG9DQU1PO0FBS1AsMkJBR087QUFNUCw2QkFBK0I7QUFLL0IsOEJBQWdDO0FBT2hDLG1DQUFvQztBQUNwQywrQkFBMkM7QUFNM0MsK0JBQXVDO0FBTXZDLDRCQUdPO0FBRVAsNEJBQStDOyIsCiAgIm5hbWVzIjogW10KfQo=
|
package/dist/lib/cjs/index.d.cts
CHANGED
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Contains the entry point for the integration testing module.
|
|
5
5
|
*/
|
|
6
|
+
export type { RunAdbParams } from './adb.cjs';
|
|
7
|
+
export { runAdbBinary, runAdbText, runAdbTextWithoutDevice } from './adb.cjs';
|
|
6
8
|
export type { AsarFallback, AsarFallbackTier, ResolveAsarFallbackParams } from './asar-fallback-detection.cjs';
|
|
7
9
|
export { resolveAsarFallback } from './asar-fallback-detection.cjs';
|
|
8
10
|
export type { CaptureObsidianScreenshotOptions } from './capture-obsidian-screenshot.cjs';
|
|
@@ -25,8 +27,18 @@ export { buildDemoVaultPopulate, resolveMissingInjectedPlugins } from './demo-va
|
|
|
25
27
|
export type { ReadDemoVaultTreeParams } from './demo-vault-tree.cjs';
|
|
26
28
|
export { readDemoVaultTree } from './demo-vault-tree.cjs';
|
|
27
29
|
export { DesktopOnlyPluginSkipError } from './desktop-only-plugin-skip-error.cjs';
|
|
30
|
+
export type { CaptureDeviceScreenshotParams } from './device-screenshot.cjs';
|
|
31
|
+
export { captureDeviceScreenshot } from './device-screenshot.cjs';
|
|
32
|
+
export type { DeviceSettingRestore, DeviceSettingRestoreDelete, DeviceSettingRestoreWrite } from './device-setting-restore.cjs';
|
|
33
|
+
export { DeviceSettingRestoreKind, resolveDeviceSettingRestore } from './device-setting-restore.cjs';
|
|
34
|
+
export type { BuildDeviceSettingsCommandArgumentsParams } from './device-settings-command.cjs';
|
|
35
|
+
export { buildDeviceSettingsCommandArguments, DeviceSettingNamespace, DeviceSettingVerb } from './device-settings-command.cjs';
|
|
36
|
+
export type { DeviceSettingParams, WithSoftKeyboardEnabledParams, WriteDeviceSettingParams } from './device-settings.cjs';
|
|
37
|
+
export { deleteDeviceSetting, readDeviceSetting, withSoftKeyboardEnabled, writeDeviceSetting } from './device-settings.cjs';
|
|
28
38
|
export type { ElectronCompatibility, ElectronCompatibilityTier, ResolveElectronCompatibilityParams } from './electron-compatibility.cjs';
|
|
29
39
|
export { resolveElectronCompatibility } from './electron-compatibility.cjs';
|
|
40
|
+
export type { EmulatorDeviceCandidate, SelectEmulatorDeviceIdParams } from './emulator-device-id.cjs';
|
|
41
|
+
export { selectEmulatorDeviceId } from './emulator-device-id.cjs';
|
|
30
42
|
export type { ClickElementParams, ClickMouseParams, CommonArguments, CreateNoteParams, EvalInObsidianParams, GenericObject, HoverElementParams, Lib, MouseButton, MoveMouseParams, OpenSettingsTabParams, PressKeyParams, TypeIntoEditorParams, UnhoverElementParams, WaitUntilParams } from './eval-in-obsidian.cjs';
|
|
31
43
|
export { evalInObsidian } from './eval-in-obsidian.cjs';
|
|
32
44
|
export type { ComputeFitToCanvasParams, FitScreenshotToCanvasOptions, FitToCanvasGeometry } from './fit-screenshot.cjs';
|
|
@@ -51,10 +63,16 @@ export { OwnedInstanceExitedError } from './owned-instance-exited-error.cjs';
|
|
|
51
63
|
export type { PollInObsidianParams } from './poll-in-obsidian.cjs';
|
|
52
64
|
export { pollInObsidian } from './poll-in-obsidian.cjs';
|
|
53
65
|
export { RendererFailedToInitializeError } from './renderer-failed-to-initialize-error.cjs';
|
|
66
|
+
export type { ResolveEmulatorDeviceIdParams } from './resolve-emulator-device-id.cjs';
|
|
67
|
+
export { resolveEmulatorDeviceId } from './resolve-emulator-device-id.cjs';
|
|
54
68
|
export type { RunObsidianVersionMatrixParams } from './run-version-matrix.cjs';
|
|
55
69
|
export { runObsidianVersionMatrix } from './run-version-matrix.cjs';
|
|
56
70
|
export type { SilentAsarFallbackErrorConstructorParams } from './silent-asar-fallback-error.cjs';
|
|
57
71
|
export { SilentAsarFallbackError } from './silent-asar-fallback-error.cjs';
|
|
72
|
+
export type { BuildSoftKeyboardDiagnosticMessageParams, CheckIsSoftKeyboardUpParams, ElementRect, ResolveSoftKeyboardTapPointsParams, SoftKeyboardTapPoint, SoftKeyboardViewportSnapshot } from './soft-keyboard-geometry.cjs';
|
|
73
|
+
export { buildSoftKeyboardDiagnosticMessage, checkIsSoftKeyboardUp, DEFAULT_MINIMUM_KEYBOARD_HEIGHT_IN_PIXELS, parseInputMethodState, resolveSoftKeyboardTapPoints } from './soft-keyboard-geometry.cjs';
|
|
74
|
+
export type { RaiseSoftKeyboardParams, TapDeviceParams } from './soft-keyboard.cjs';
|
|
75
|
+
export { raiseSoftKeyboard, tapDevice } from './soft-keyboard.cjs';
|
|
58
76
|
export type { PopulateFileContent, PopulateFilesParams, TemporaryVaultOptions } from './temporary-vault.cjs';
|
|
59
77
|
export { TemporaryVault } from './temporary-vault.cjs';
|
|
60
78
|
export type { AppiumSessionInfo, AppiumTransportConfig } from './transport-appium.cjs';
|
package/dist/lib/cjs/library.cjs
CHANGED
|
@@ -21,7 +21,7 @@ __export(library_exports, {
|
|
|
21
21
|
LIBRARY_VERSION: () => LIBRARY_VERSION
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(library_exports);
|
|
24
|
-
const LIBRARY_VERSION = false ? "dev" : "12.1.
|
|
24
|
+
const LIBRARY_VERSION = false ? "dev" : "12.1.2";
|
|
25
25
|
// Annotate the CommonJS export names for ESM import in node:
|
|
26
26
|
0 && (module.exports = {
|
|
27
27
|
LIBRARY_VERSION
|
|
@@ -20,7 +20,9 @@ var mobile_input_exports = {};
|
|
|
20
20
|
__export(mobile_input_exports, {
|
|
21
21
|
MOBILE_INPUT_BINDING_NAME: () => MOBILE_INPUT_BINDING_NAME,
|
|
22
22
|
MOBILE_INPUT_TIMEOUT_IN_MILLISECONDS: () => MOBILE_INPUT_TIMEOUT_IN_MILLISECONDS,
|
|
23
|
+
buildClaimInputExpression: () => buildClaimInputExpression,
|
|
23
24
|
buildResolveInputExpression: () => buildResolveInputExpression,
|
|
25
|
+
checkInputClaimGranted: () => checkInputClaimGranted,
|
|
24
26
|
codePointOf: () => codePointOf,
|
|
25
27
|
toCdpInputCommands: () => toCdpInputCommands,
|
|
26
28
|
toCdpModifiers: () => toCdpModifiers
|
|
@@ -65,9 +67,18 @@ const DIGIT_ZERO_CODE_POINT = codePointOf("0");
|
|
|
65
67
|
const DIGIT_NINE_CODE_POINT = codePointOf("9");
|
|
66
68
|
const UPPERCASE_A_CODE_POINT = codePointOf("A");
|
|
67
69
|
const UPPERCASE_Z_CODE_POINT = codePointOf("Z");
|
|
70
|
+
function buildClaimInputExpression(id) {
|
|
71
|
+
return `window.__obsidianIntegrationTesting?.claimInput?.(${JSON.stringify(id)})`;
|
|
72
|
+
}
|
|
68
73
|
function buildResolveInputExpression(id, errorMessage) {
|
|
69
74
|
return `window.__obsidianIntegrationTesting?.resolveInput?.(${JSON.stringify(id)}, ${JSON.stringify(errorMessage ?? null)})`;
|
|
70
75
|
}
|
|
76
|
+
function checkInputClaimGranted(result) {
|
|
77
|
+
if (typeof result !== "object" || result === null) {
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
80
|
+
return result.result?.value !== false;
|
|
81
|
+
}
|
|
71
82
|
function codePointOf(text) {
|
|
72
83
|
const codePoint = text.codePointAt(FIRST_CODE_POINT_INDEX);
|
|
73
84
|
if (codePoint === void 0) {
|
|
@@ -165,9 +176,11 @@ function toPointerCommands(request) {
|
|
|
165
176
|
0 && (module.exports = {
|
|
166
177
|
MOBILE_INPUT_BINDING_NAME,
|
|
167
178
|
MOBILE_INPUT_TIMEOUT_IN_MILLISECONDS,
|
|
179
|
+
buildClaimInputExpression,
|
|
168
180
|
buildResolveInputExpression,
|
|
181
|
+
checkInputClaimGranted,
|
|
169
182
|
codePointOf,
|
|
170
183
|
toCdpInputCommands,
|
|
171
184
|
toCdpModifiers
|
|
172
185
|
});
|
|
173
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL21vYmlsZS1pbnB1dC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRyYW5zbGF0ZXMgYSBtb2JpbGUgdHJ1c3RlZC1pbnB1dCByZXF1ZXN0IGludG8gdGhlIG9yZGVyZWQgQ2hyb21lIERldlRvb2xzIFByb3RvY29sIGBJbnB1dC4qYCBjb21tYW5kc1xuICogdGhhdCByZWFsaXplIGl0IChzZWUgKipMMzkqKikuXG4gKlxuICogUHVyZSBhbmQgc3luY2hyb25vdXMgYnkgZGVzaWduOiB0aGUgV2ViVmlldyBjb25uZWN0aW9uICh7QGxpbmsgV2ViVmlld0NkcENvbm5lY3Rpb259KSBzZW5kcyB3aGF0ZXZlciB0aGlzXG4gKiByZXR1cm5zLCBzbyBldmVyeSBkZWNpc2lvbiB0aGF0IGlzIHdvcnRoIGEgdGVzdCBcdTIwMTQgdGhlIHRvdWNoIHBhaXIgYSB0YXAgZXhwYW5kcyBpbnRvLCB0aGUgZHdlbGwgYVxuICogbG9uZy1wcmVzcyBhZGRzLCB0aGUgYHJhd0tleURvd25gIFx1MjE5MiBgY2hhcmAgXHUyMTkyIGBrZXlVcGAgc2hhcGUgYSBrZXkgcHJlc3MgbWlycm9ycyBmcm9tIHRoZSBkZXNrdG9wIHR3aW4sIHRoZVxuICogbW9kaWZpZXIgYml0bWFzayBcdTIwMTQgbGl2ZXMgaGVyZSByYXRoZXIgdGhhbiBpbnNpZGUgdGhlIHRyYW5zcG9ydCdzIEkvTyBwYXRoLlxuICpcbiAqIFRoZSByZXF1ZXN0IHRyYXZlbHMgcmVuZGVyZXIgXHUyMTkyIGhvc3QgYXMgSlNPTiAodGhlIHJlbmRlcmVyIGNvbXB1dGVzIHRoZSBjb29yZGluYXRlcywgYmVjYXVzZSBvbmx5IGl0IGNhblxuICogc2VlIHRoZSBET00pLCBzbyBib3RoIHRoZSByZXF1ZXN0IGFuZCB0aGUgY29tbWFuZCBzaGFwZXMgYXJlIGRlbGliZXJhdGVseSBwbGFpbiBkYXRhLlxuICovXG5cbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIGBSdW50aW1lLmFkZEJpbmRpbmdgIGZ1bmN0aW9uIHRoZSBob3N0IGV4cG9zZXMgb24gdGhlIHBhZ2Ugc28gdGhlIHJlbmRlcmVyIGNhbiBoYW5kIGl0IGFuXG4gKiBpbnB1dCByZXF1ZXN0IG1pZC1jbG9zdXJlLlxuICpcbiAqIEl0IGlzIHBhc3NlZCAqaW50byogdGhlIHNlcmlhbGl6ZWQgYm9vdHN0cmFwIGNsb3N1cmUgYXMgZGF0YSByYXRoZXIgdGhhbiByZWZlcmVuY2VkIGZyb20gaXQsIGJlY2F1c2UgdGhhdFxuICogY2xvc3VyZSBtYXkgbm90IHJlYWQgb3V0ZXIgc2NvcGUgKCoqTDE1KiopIFx1MjAxNCBzbyB0aGlzIHN0YXlzIHRoZSBzaW5nbGUgZGVmaW5pdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IE1PQklMRV9JTlBVVF9CSU5ESU5HX05BTUUgPSAnX19vYnNpZGlhbkludGVncmF0aW9uVGVzdGluZ0lucHV0JztcblxuLyoqXG4gKiBIb3cgbG9uZyB0aGUgcmVuZGVyZXIgd2FpdHMgZm9yIHRoZSBob3N0IHRvIHNlcnZpY2Ugb25lIGlucHV0IHJlcXVlc3QgYmVmb3JlIGdpdmluZyB1cC5cbiAqXG4gKiBHZW5lcm91cyByZWxhdGl2ZSB0byB0aGUgd29yayAoYSB0YXAgaXMgdHdvIENEUCBjb21tYW5kczsgYSBsb25nLXByZXNzIGFkZHMgYSA2MDBtcyBkd2VsbCk6IHRoZSBwb2ludCBpc1xuICogdG8gZmFpbCB3aXRoIGEgbGVnaWJsZSBlcnJvciByYXRoZXIgdGhhbiBoYW5nIHRoZSBjbG9zdXJlIHVudGlsIHRoZSB3aG9sZSBydW4gdGltZXMgb3V0LiBQYXNzZWQgaW50byB0aGVcbiAqIGJvb3RzdHJhcCBjbG9zdXJlIGFzIGRhdGEsIGZvciB0aGUgc2FtZSByZWFzb24gYXMge0BsaW5rIE1PQklMRV9JTlBVVF9CSU5ESU5HX05BTUV9LlxuICovXG5leHBvcnQgY29uc3QgTU9CSUxFX0lOUFVUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gMTVfMDAwO1xuXG4vKipcbiAqIEEgc2luZ2xlIENocm9tZSBEZXZUb29scyBQcm90b2NvbCBjb21tYW5kLlxuICpcbiAqIEl0IG9uY2UgYWxzbyBjYXJyaWVkIGEgYGRlbGF5QmVmb3JlSW5NaWxsaXNlY29uZHNgLCBzbyB0aGUgaG9zdCB3b3VsZCBzbGVlcCBiZXR3ZWVuIHRoZSB0d28gaGFsdmVzIG9mIGFcbiAqIGxvbmctcHJlc3MuIFRoYXQgZHdlbGwgaXMgZ29uZTogdGhlIGdlc3R1cmUgaXMgbm93IG9uZSBgSW5wdXQuc3ludGhlc2l6ZVRhcEdlc3R1cmVgIHRoYXQgaG9sZHMgaXRzZWxmXG4gKiBmb3IgaXRzIG93biBgZHVyYXRpb25gLCBzbyBubyBjb21tYW5kIGluIGFueSBzZXF1ZW5jZSBuZWVkcyB0byBiZSBzcGFjZWQgZnJvbSB0aGUgb25lIGJlZm9yZSBpdCwgYW5kIGFcbiAqIGtub2Igbm90aGluZyBzZXRzIGlzIHdvcnNlIHRoYW4gbm8ga25vYi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDZHBJbnB1dENvbW1hbmQge1xuICAvKipcbiAgICogVGhlIENEUCBtZXRob2QgbmFtZSwgZS5nLiBgSW5wdXQuZGlzcGF0Y2hUb3VjaEV2ZW50YC5cbiAgICovXG4gIHJlYWRvbmx5IG1ldGhvZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQ0RQIG1ldGhvZCBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLyoqXG4gKiBXaGF0IHRoZSByZW5kZXJlciBoYW5kcyB0byB0aGUgaG9zdCBiaW5kaW5nOiBvbmUgcmVxdWVzdCwgcGx1cyB0aGUgaWQgdG8gYW5zd2VyIGl0IG9uLlxuICpcbiAqIFRoZSByZW5kZXJlciBidWlsZHMgdGhpcyBsaXRlcmFsIGluc2lkZSB0aGUgc2VyaWFsaXplZCBib290c3RyYXAgY2xvc3VyZSwgd2hpY2ggY2Fubm90IGltcG9ydCAoKipMMTUqKiksXG4gKiBzbyB0aGUgc2hhcGUgaXMgZGVjbGFyZWQgaGVyZSBhbmQgbWlycm9yZWQgdGhlcmUuIFRoZXkgYXJlIG9uZSB3aXJlIGZvcm1hdDsgY2hhbmdlIHRoZW0gdG9nZXRoZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9iaWxlSW5wdXRFbnZlbG9wZSB7XG4gIC8qKlxuICAgKiBUaGUgcmVxdWVzdCBpZCB0aGUgcmVuZGVyZXIgaXMgd2FpdGluZyBvbi5cbiAgICovXG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoYXQgdG8gaW5qZWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWVzdDogTW9iaWxlSW5wdXRSZXF1ZXN0O1xufVxuXG4vKipcbiAqIEFueXRoaW5nIHRoZSByZW5kZXJlciBjYW4gYXNrIHRoZSBob3N0IHRvIGluamVjdC5cbiAqL1xuZXhwb3J0IHR5cGUgTW9iaWxlSW5wdXRSZXF1ZXN0ID0gTW9iaWxlS2V5SW5wdXRSZXF1ZXN0IHwgTW9iaWxlUG9pbnRlcklucHV0UmVxdWVzdDtcblxuLyoqXG4gKiBBIHRydXN0ZWQga2V5IHByZXNzIHRvIGluamVjdCBvbiBtb2JpbGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9iaWxlS2V5SW5wdXRSZXF1ZXN0IHtcbiAgLyoqXG4gICAqIFRoZSBrZXkgdG8gcHJlc3MsIGluIHRoZSBzYW1lIHNwZWxsaW5nIHRoZSBkZXNrdG9wIHR3aW4gdGFrZXM6IGVpdGhlciBhIG5hbWVkIGtleVxuICAgKiAoYEVudGVyYCwgYEVzY2FwZWAsIGBUYWJgLCBgQmFja3NwYWNlYCwgYERlbGV0ZWAsIGFuIGFycm93KSBvciBhIHNpbmdsZSBwcmludGFibGUgY2hhcmFjdGVyLlxuICAgKi9cbiAgcmVhZG9ubHkga2V5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERpc2NyaW1pbmFudC5cbiAgICovXG4gIHJlYWRvbmx5IGtpbmQ6ICdrZXknO1xuXG4gIC8qKlxuICAgKiBNb2RpZmllcnMgYWxyZWFkeSByZXNvbHZlZCB0byB0aGVpciBwbGF0Zm9ybS1pbmRlcGVuZGVudCBsb3dlcmNhc2UgbmFtZXMgYnkgdGhlIHJlbmRlcmVyJ3NcbiAgICogYHRvRWxlY3Ryb25Nb2RpZmllcnNgIFx1MjAxNCB0aGUgb25lIG1hcHBpbmcgYSBrZXkgcHJlc3MgYW5kIGEgY2xpY2sgc2hhcmUsIHNvIGAnTW9kJ2AgY2Fubm90IG1lYW4gdHdvXG4gICAqIGRpZmZlcmVudCB0aGluZ3MgKCoqTDE3KiopLlxuICAgKi9cbiAgcmVhZG9ubHkgbW9kaWZpZXJzOiByZWFkb25seSBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBBIHRydXN0ZWQgcG9pbnRlciBnZXN0dXJlIHRvIGluamVjdCBvbiBtb2JpbGUsIGluIENTUyBwaXhlbHMgd2l0aGluIHRoZSBXZWJWaWV3J3Mgb3duIHZpZXdwb3J0LlxuICpcbiAqIE5vIGRldmljZS1waXhlbCBjb252ZXJzaW9uIGlzIGludm9sdmVkOiBDRFAgdGFrZXMgcGFnZSBjb29yZGluYXRlcywgc28gYGRldmljZVBpeGVsUmF0aW9gIGFuZCB0aGVcbiAqIFdlYlZpZXcncyBvZmZzZXQgdW5kZXIgdGhlIHN0YXR1cyBiYXIgbmV2ZXIgZW50ZXIgdGhlIHBpY3R1cmUgKHRoZXkgd291bGQgZm9yIG5hdGl2ZSBpbmplY3Rpb24pLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vYmlsZVBvaW50ZXJJbnB1dFJlcXVlc3Qge1xuICAvKipcbiAgICogYHRhcGAgaXMgdGhlIHRvdWNoIGFuYWxvZyBvZiBhIGxlZnQgY2xpY2s7IGBsb25nUHJlc3NgIGlzIHRoZSBtb2JpbGUgY29udGV4dC1tZW51IGdlc3R1cmUsIGkuZS4gd2hhdCBhXG4gICAqIGRlc2t0b3AgcmlnaHQgY2xpY2sgbWVhbnMgaGVyZS5cbiAgICovXG4gIHJlYWRvbmx5IGtpbmQ6ICdsb25nUHJlc3MnIHwgJ3RhcCc7XG5cbiAgLyoqXG4gICAqIFNlZSB7QGxpbmsgTW9iaWxlS2V5SW5wdXRSZXF1ZXN0Lm1vZGlmaWVyc30uXG4gICAqL1xuICByZWFkb25seSBtb2RpZmllcnM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgdmlld3BvcnQgeCBjb29yZGluYXRlLCBpbiBDU1MgcGl4ZWxzLlxuICAgKi9cbiAgcmVhZG9ubHkgeDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgdmlld3BvcnQgeSBjb29yZGluYXRlLCBpbiBDU1MgcGl4ZWxzLlxuICAgKi9cbiAgcmVhZG9ubHkgeTogbnVtYmVyO1xufVxuXG4vKipcbiAqIEhvdyBsb25nIGEgbG9uZy1wcmVzcyBob2xkcyB0aGUgdG91Y2ggZG93biBiZWZvcmUgcmVsZWFzaW5nIGl0LlxuICpcbiAqIEl0IGhhcyB0byBjbGVhciAqKkFuZHJvaWQncyoqIGxvbmctcHJlc3MgdGhyZXNob2xkLCB3aGljaCBpcyA1MDBtcyBieSBkZWZhdWx0OiB0aGUgZ2VzdHVyZSBpc1xuICogcmVjb2duaXplZCBieSB0aGUgcGxhdGZvcm0sIGFuZCB0aGUgYGNvbnRleHRtZW51YCBPYnNpZGlhbidzIG1lbnVzIGhhbmcgb2ZmIGlzIHdoYXQgdGhlIHJlY29nbml6ZXJcbiAqIGVtaXRzLiA2MDBtcyBjbGVhcnMgdGhhdCB3aXRoIG1hcmdpbiB3aXRob3V0IG1ha2luZyBldmVyeSBsb25nLXByZXNzIHRlc3Qgbm90aWNlYWJseSBzbG93ZXIuXG4gKlxuICogVGhpcyBjb3JyZWN0cyB0aGUgZm9ybWVyIHJlYWRpbmcgXHUyMDE0IHRoYXQgT2JzaWRpYW4gTW9iaWxlIGltcGxlbWVudHMgbG9uZy1wcmVzcyBpdHNlbGYsIG9uIGEgSmF2YVNjcmlwdFxuICogYHRvdWNoc3RhcnRgIHRpbWVyLCBzbyB0aGUgZHdlbGwgb25seSBoYWQgdG8gY2xlYXIgKml0cyogdGhyZXNob2xkLiBNZWFzdXJlZCBhZ2FpbnN0IGEgcmVhbFxuICogYC5uYXYtZmlsZS10aXRsZWAsIGEgNjAwbXMgZHdlbGwgYmV0d2VlbiB0d28gZGlzcGF0Y2hlZCB0b3VjaGVzIG9wZW5lZCB0aGUgbm90ZSBpbnN0ZWFkIG9mIGl0cyBtZW51O1xuICogc2VlIHtAbGluayB0b1BvaW50ZXJDb21tYW5kc30gZm9yIHdoeSB0aGUgZHdlbGwgYWxvbmUgd2FzIG5ldmVyIGdvaW5nIHRvIGJlIGVub3VnaC5cbiAqL1xuY29uc3QgTE9OR19QUkVTU19EV0VMTF9JTl9NSUxMSVNFQ09ORFMgPSA2MDA7XG5cbmNvbnN0IE5PX01PRElGSUVSUyA9IDA7XG5jb25zdCBNT0RJRklFUl9CSVRfQUxUID0gMTtcbmNvbnN0IE1PRElGSUVSX0JJVF9DT05UUk9MID0gMjtcbmNvbnN0IE1PRElGSUVSX0JJVF9NRVRBID0gNDtcbmNvbnN0IE1PRElGSUVSX0JJVF9TSElGVCA9IDg7XG5cbi8qKlxuICogQ0RQJ3MgbW9kaWZpZXIgYml0bWFzaywgd2hpY2ggaXMgbm90IHRoZSBzYW1lIHNwZWxsaW5nIGFzIEVsZWN0cm9uJ3Mgc3RyaW5nIGxpc3QuXG4gKlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9jaHJvbWVkZXZ0b29scy5naXRodWIuaW8vZGV2dG9vbHMtcHJvdG9jb2wvdG90L0lucHV0LyNtZXRob2QtZGlzcGF0Y2hLZXlFdmVudH1cbiAqL1xuY29uc3QgQ0RQX01PRElGSUVSX0JJVF9CWV9OQU1FID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oW1xuICBbJ2FsdCcsIE1PRElGSUVSX0JJVF9BTFRdLFxuICBbJ2NvbnRyb2wnLCBNT0RJRklFUl9CSVRfQ09OVFJPTF0sXG4gIFsnbWV0YScsIE1PRElGSUVSX0JJVF9NRVRBXSxcbiAgWydzaGlmdCcsIE1PRElGSUVSX0JJVF9TSElGVF1cbl0pO1xuXG5jb25zdCBLRVlfQ09ERV9CQUNLU1BBQ0UgPSA4O1xuY29uc3QgS0VZX0NPREVfVEFCID0gOTtcbmNvbnN0IEtFWV9DT0RFX0VOVEVSID0gMTM7XG5jb25zdCBLRVlfQ09ERV9FU0NBUEUgPSAyNztcbmNvbnN0IEtFWV9DT0RFX0FSUk9XX0xFRlQgPSAzNztcbmNvbnN0IEtFWV9DT0RFX0FSUk9XX1VQID0gMzg7XG5jb25zdCBLRVlfQ09ERV9BUlJPV19SSUdIVCA9IDM5O1xuY29uc3QgS0VZX0NPREVfQVJST1dfRE9XTiA9IDQwO1xuY29uc3QgS0VZX0NPREVfREVMRVRFID0gNDY7XG5cbi8qKlxuICogTmFtZWQga2V5cywgd2l0aCB0aGUgYHRleHRgIGEgcmVhbCBrZXkgcHJlc3Mgd291bGQgcHJvZHVjZSAoYWJzZW50IHdoZW4gaXQgcHJvZHVjZXMgbm9uZSkuXG4gKlxuICogT25seSBrZXlzIHRoZXNlIHN1aXRlcyBhY3R1YWxseSBwcmVzcyBhcmUgbGlzdGVkLCBwbHVzIHRoZSBlZGl0aW5nIGtleXMgYSBjYWxsZXIgd291bGQgcmVhc29uYWJseSByZWFjaFxuICogZm9yIG5leHQuIEFuIHVua25vd24gbXVsdGktY2hhcmFjdGVyIGtleSBpcyBhIGNhbGxlciBlcnJvciwgbm90IGEgc2lsZW50IG5vLW9wIFx1MjAxNCBzZWVcbiAqIHtAbGluayB0b0tleUNvbW1hbmRzfS5cbiAqL1xuY29uc3QgTkFNRURfS0VZUyA9IG5ldyBNYXA8c3RyaW5nLCBOYW1lZEtleT4oW1xuICBbJ0Fycm93RG93bicsIHsgY29kZTogJ0Fycm93RG93bicsIHdpbmRvd3NWaXJ0dWFsS2V5Q29kZTogS0VZX0NPREVfQVJST1dfRE9XTiB9XSxcbiAgWydBcnJvd0xlZnQnLCB7IGNvZGU6ICdBcnJvd0xlZnQnLCB3aW5kb3dzVmlydHVhbEtleUNvZGU6IEtFWV9DT0RFX0FSUk9XX0xFRlQgfV0sXG4gIFsnQXJyb3dSaWdodCcsIHsgY29kZTogJ0Fycm93UmlnaHQnLCB3aW5kb3dzVmlydHVhbEtleUNvZGU6IEtFWV9DT0RFX0FSUk9XX1JJR0hUIH1dLFxuICBbJ0Fycm93VXAnLCB7IGNvZGU6ICdBcnJvd1VwJywgd2luZG93c1ZpcnR1YWxLZXlDb2RlOiBLRVlfQ09ERV9BUlJPV19VUCB9XSxcbiAgWydCYWNrc3BhY2UnLCB7IGNvZGU6ICdCYWNrc3BhY2UnLCB3aW5kb3dzVmlydHVhbEtleUNvZGU6IEtFWV9DT0RFX0JBQ0tTUEFDRSB9XSxcbiAgWydEZWxldGUnLCB7IGNvZGU6ICdEZWxldGUnLCB3aW5kb3dzVmlydHVhbEtleUNvZGU6IEtFWV9DT0RFX0RFTEVURSB9XSxcbiAgWydFbnRlcicsIHsgY29kZTogJ0VudGVyJywgdGV4dDogJ1xccicsIHdpbmRvd3NWaXJ0dWFsS2V5Q29kZTogS0VZX0NPREVfRU5URVIgfV0sXG4gIFsnRXNjYXBlJywgeyBjb2RlOiAnRXNjYXBlJywgd2luZG93c1ZpcnR1YWxLZXlDb2RlOiBLRVlfQ09ERV9FU0NBUEUgfV0sXG4gIFsnVGFiJywgeyBjb2RlOiAnVGFiJywgdGV4dDogJ1xcdCcsIHdpbmRvd3NWaXJ0dWFsS2V5Q29kZTogS0VZX0NPREVfVEFCIH1dXG5dKTtcblxuY29uc3QgRklSU1RfQ09ERV9QT0lOVF9JTkRFWCA9IDA7XG5jb25zdCBESUdJVF9aRVJPX0NPREVfUE9JTlQgPSBjb2RlUG9pbnRPZignMCcpO1xuY29uc3QgRElHSVRfTklORV9DT0RFX1BPSU5UID0gY29kZVBvaW50T2YoJzknKTtcbmNvbnN0IFVQUEVSQ0FTRV9BX0NPREVfUE9JTlQgPSBjb2RlUG9pbnRPZignQScpO1xuY29uc3QgVVBQRVJDQVNFX1pfQ09ERV9QT0lOVCA9IGNvZGVQb2ludE9mKCdaJyk7XG5cbi8qKlxuICogVGhlIENEUCBzcGVsbGluZyBvZiBvbmUgbmFtZWQga2V5LlxuICovXG5pbnRlcmZhY2UgTmFtZWRLZXkge1xuICByZWFkb25seSBjb2RlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRleHQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHdpbmRvd3NWaXJ0dWFsS2V5Q29kZTogbnVtYmVyO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgZXhwcmVzc2lvbiB0aGUgaG9zdCBldmFsdWF0ZXMgdG8gYW5zd2VyIG9uZSBpbnB1dCByZXF1ZXN0LlxuICpcbiAqIE9wdGlvbmFsIGNoYWluaW5nIHRocm91Z2hvdXQ6IGJ5IHRoZSB0aW1lIHRoZSBob3N0IGFuc3dlcnMsIHRoZSBwYWdlIG1heSBoYXZlIG5hdmlnYXRlZCBhbmQgZHJvcHBlZCB0aGVcbiAqIG5hbWVzcGFjZSwgYW5kIGEgYFR5cGVFcnJvcmAgaW5zaWRlIHRoaXMgZXZhbHVhdGUgd291bGQgYmUgcmVwb3J0ZWQgYXMgYW4gaW5qZWN0aW9uIGZhaWx1cmUgdGhhdCBhbHJlYWR5XG4gKiBzdWNjZWVkZWQuXG4gKlxuICogQHBhcmFtIGlkIC0gVGhlIHJlcXVlc3QgaWQgdGhlIHJlbmRlcmVyIGlzIHdhaXRpbmcgb24uXG4gKiBAcGFyYW0gZXJyb3JNZXNzYWdlIC0gV2h5IHRoZSBpbmplY3Rpb24gZmFpbGVkLCB3aGVuIGl0IGRpZC4gT21pdCBvbiBzdWNjZXNzLlxuICogQHJldHVybnMgQSBzZWxmLWNvbnRhaW5lZCBleHByZXNzaW9uIHRvIHBhc3MgdG8gYFJ1bnRpbWUuZXZhbHVhdGVgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRSZXNvbHZlSW5wdXRFeHByZXNzaW9uKGlkOiBzdHJpbmcsIGVycm9yTWVzc2FnZT86IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgd2luZG93Ll9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3Rpbmc/LnJlc29sdmVJbnB1dD8uKCR7SlNPTi5zdHJpbmdpZnkoaWQpfSwgJHtKU09OLnN0cmluZ2lmeShlcnJvck1lc3NhZ2UgPz8gbnVsbCl9KWA7XG59XG5cbi8qKlxuICogVGhlIGZpcnN0IGNvZGUgcG9pbnQgb2YgYSBub24tZW1wdHkgc3RyaW5nLlxuICpcbiAqIGBTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0YCBpcyB0eXBlZCBgbnVtYmVyIHwgdW5kZWZpbmVkYCwgc28gZXZlcnkgY2FsbCBzaXRlIHdvdWxkIG90aGVyd2lzZSBjYXJyeSBhXG4gKiBgPz8gZmFsbGJhY2tgIHRoYXQgbm8gaW5wdXQgY2FuIGV2ZXIgcmVhY2ggXHUyMDE0IGEgZGVhZCBicmFuY2ggdW5kZXIgdGhlIDEwMCUgY292ZXJhZ2UgZ2F0ZS4gVGhyb3dpbmcgaGVyZVxuICoga2VlcHMgdGhhdCBpbXBvc3NpYmxlIGNhc2UgaW4gT05FIHBsYWNlLCB3aGVyZSBhIHVuaXQgdGVzdCBjYW4gcmVhY2ggaXQgZGlyZWN0bHksIGluc3RlYWQgb2Ygc3ByZWFkaW5nXG4gKiB1bnJlYWNoYWJsZSBmYWxsYmFja3MgKG9yIGNvdmVyYWdlIHN1cHByZXNzaW9ucykgYWNyb3NzIHRoZSBtb2R1bGUuXG4gKlxuICogQHBhcmFtIHRleHQgLSBBIG5vbi1lbXB0eSBzdHJpbmcuXG4gKiBAcmV0dXJucyBJdHMgZmlyc3QgY29kZSBwb2ludC5cbiAqIEB0aHJvd3MgV2hlbiBgdGV4dGAgaXMgZW1wdHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb2RlUG9pbnRPZih0ZXh0OiBzdHJpbmcpOiBudW1iZXIge1xuICBjb25zdCBjb2RlUG9pbnQgPSB0ZXh0LmNvZGVQb2ludEF0KEZJUlNUX0NPREVfUE9JTlRfSU5ERVgpO1xuICBpZiAoY29kZVBvaW50ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvZGVQb2ludE9mIHJlY2VpdmVkIGFuIGVtcHR5IHN0cmluZy4nKTtcbiAgfVxuXG4gIHJldHVybiBjb2RlUG9pbnQ7XG59XG5cbi8qKlxuICogVHJhbnNsYXRlcyBhIG1vYmlsZSBpbnB1dCByZXF1ZXN0IGludG8gdGhlIG9yZGVyZWQgQ0RQIGNvbW1hbmRzIHRoYXQgcmVhbGl6ZSBpdC5cbiAqXG4gKiBAcGFyYW0gcmVxdWVzdCAtIFdoYXQgdGhlIHJlbmRlcmVyIGFza2VkIHRoZSBob3N0IHRvIGluamVjdC5cbiAqIEByZXR1cm5zIFRoZSBjb21tYW5kcyB0byBzZW5kLCBpbiBvcmRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvQ2RwSW5wdXRDb21tYW5kcyhyZXF1ZXN0OiBNb2JpbGVJbnB1dFJlcXVlc3QpOiBDZHBJbnB1dENvbW1hbmRbXSB7XG4gIGlmIChyZXF1ZXN0LmtpbmQgPT09ICdrZXknKSB7XG4gICAgcmV0dXJuIHRvS2V5Q29tbWFuZHMocmVxdWVzdCk7XG4gIH1cblxuICByZXR1cm4gdG9Qb2ludGVyQ29tbWFuZHMocmVxdWVzdCk7XG59XG5cbi8qKlxuICogRm9sZHMgcmVzb2x2ZWQgbW9kaWZpZXIgbmFtZXMgaW50byBDRFAncyBiaXRtYXNrLlxuICpcbiAqIFVua25vd24gbmFtZXMgYXJlIGlnbm9yZWQgcmF0aGVyIHRoYW4gdGhyb3dpbmc6IHRoZSByZW5kZXJlcidzIGB0b0VsZWN0cm9uTW9kaWZpZXJzYCBpcyBleGhhdXN0aXZlIG92ZXJcbiAqIE9ic2lkaWFuJ3MgYE1vZGlmaWVyYCB1bmlvbiwgc28gYW4gdW5rbm93biBuYW1lIGhlcmUgd291bGQgbWVhbiB0aGUgdHdvIGNvcGllcyBoYXZlIGFscmVhZHkgZHJpZnRlZCwgYW5kXG4gKiBmYWlsaW5nIHRoZSB3aG9sZSBnZXN0dXJlIGlzIGEgd29yc2Ugb3V0Y29tZSB0aGFuIHByZXNzaW5nIGl0IHVubW9kaWZpZWQuXG4gKlxuICogQHBhcmFtIG1vZGlmaWVycyAtIFJlc29sdmVkIGxvd2VyY2FzZSBtb2RpZmllciBuYW1lcy5cbiAqIEByZXR1cm5zIFRoZSBDRFAgbW9kaWZpZXIgYml0bWFzay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvQ2RwTW9kaWZpZXJzKG1vZGlmaWVyczogcmVhZG9ubHkgc3RyaW5nW10pOiBudW1iZXIge1xuICAvLyBTdW1taW5nIERJU1RJTkNUIGJpdHMgZXF1YWxzIE9SLWluZyB0aGVtLCBhbmQgdGhlIGBTZXRgIGlzIHdoYXQgbWFrZXMgdGhhdCBob2xkIGV2ZW4gd2hlbiBhIGNhbGxlclxuICAvLyBQYXNzZXMgdGhlIHNhbWUgbW9kaWZpZXIgdHdpY2UgXHUyMDE0IHNvIHRoZSBtYXNrIGlzIGJ1aWx0IHdpdGhvdXQgYSBiaXR3aXNlIG9wZXJhdG9yLlxuICBjb25zdCBiaXRzID0gbmV3IFNldDxudW1iZXI+KCk7XG4gIGZvciAoY29uc3QgbW9kaWZpZXIgb2YgbW9kaWZpZXJzKSB7XG4gICAgY29uc3QgYml0ID0gQ0RQX01PRElGSUVSX0JJVF9CWV9OQU1FLmdldChtb2RpZmllcik7XG4gICAgaWYgKGJpdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBiaXRzLmFkZChiaXQpO1xuICAgIH1cbiAgfVxuXG4gIGxldCBiaXRtYXNrID0gTk9fTU9ESUZJRVJTO1xuICBmb3IgKGNvbnN0IGJpdCBvZiBiaXRzKSB7XG4gICAgYml0bWFzayArPSBiaXQ7XG4gIH1cblxuICByZXR1cm4gYml0bWFzaztcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyBhIGtleSBuYW1lIHRvIGl0cyBDRFAgc3BlbGxpbmcuXG4gKlxuICogQHBhcmFtIGtleSAtIEEgbmFtZWQga2V5IG9yIGEgc2luZ2xlIHByaW50YWJsZSBjaGFyYWN0ZXIuXG4gKiBAcmV0dXJucyBUaGUgQ0RQIHNwZWxsaW5nLlxuICovXG5mdW5jdGlvbiByZXNvbHZlS2V5KGtleTogc3RyaW5nKTogTmFtZWRLZXkge1xuICBjb25zdCBuYW1lZEtleSA9IE5BTUVEX0tFWVMuZ2V0KGtleSk7XG4gIGlmIChuYW1lZEtleSkge1xuICAgIHJldHVybiBuYW1lZEtleTtcbiAgfVxuXG4gIC8vIFwiRXhhY3RseSBvbmUgY29kZSBwb2ludFwiLCB0ZXN0ZWQgd2l0aG91dCBzcGxpdHRpbmcgdGhlIHN0cmluZzogYGZyb21Db2RlUG9pbnRgIHJvdW5kLXRyaXBzIG9ubHkgd2hlblxuICAvLyBga2V5YCBpcyB0aGF0IHNpbmdsZSBjb2RlIHBvaW50LCBzbyBhbiBhc3RyYWwtcGxhbmUgY2hhcmFjdGVyIGNvdW50cyBhcyBvbmUgYW5kIGAnQ3RybCtLJ2AgZG9lcyBub3QuXG4gIGNvbnN0IGNvZGVQb2ludCA9IGtleS5jb2RlUG9pbnRBdChGSVJTVF9DT0RFX1BPSU5UX0lOREVYKTtcbiAgaWYgKGNvZGVQb2ludCA9PT0gdW5kZWZpbmVkIHx8IFN0cmluZy5mcm9tQ29kZVBvaW50KGNvZGVQb2ludCkgIT09IGtleSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBwcmVzc0tleSByZWNlaXZlZCBhbiB1bmtub3duIGtleSBuYW1lIG9uIG1vYmlsZTogJHtKU09OLnN0cmluZ2lmeShrZXkpfS4gYFxuICAgICAgICArIGBQYXNzIGEgc2luZ2xlIGNoYXJhY3RlciBvciBvbmUgb2Y6ICR7Wy4uLk5BTUVEX0tFWVMua2V5cygpXS5qb2luKCcsICcpfS5gXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHVwcGVyQ2FzZWRDb2RlUG9pbnQgPSBjb2RlUG9pbnRPZihrZXkudG9VcHBlckNhc2UoKSk7XG4gIHJldHVybiB7XG4gICAgY29kZTogcmVzb2x2ZUtleUNvZGUodXBwZXJDYXNlZENvZGVQb2ludCksXG4gICAgdGV4dDoga2V5LFxuICAgIHdpbmRvd3NWaXJ0dWFsS2V5Q29kZTogdXBwZXJDYXNlZENvZGVQb2ludFxuICB9O1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBwaHlzaWNhbCBgY29kZWAgZm9yIGEgcHJpbnRhYmxlIGNoYXJhY3Rlci5cbiAqXG4gKiBDaGFyYWN0ZXJzIG91dHNpZGUgdGhlIEFTQ0lJIGxldHRlci9kaWdpdCByb3dzIGhhdmUgbm8gc3RhYmxlIHBoeXNpY2FsIGtleSwgc28gdGhleSBnZXQgYW4gZW1wdHlcbiAqIGBjb2RlYCBcdTIwMTQgdGhlIGB0ZXh0YCBzdGlsbCBjYXJyaWVzIHRoZW0sIHdoaWNoIGlzIHdoYXQgYW4gZWRpdG9yIHJlYWRzLlxuICpcbiAqIEBwYXJhbSB1cHBlckNhc2VkQ29kZVBvaW50IC0gVGhlIGNoYXJhY3RlcidzIHVwcGVyLWNhc2VkIGNvZGUgcG9pbnQuXG4gKiBAcmV0dXJucyBUaGUgQ0RQIGBjb2RlYCwgb3IgYW4gZW1wdHkgc3RyaW5nIHdoZW4gdGhlcmUgaXMgbm8gc3RhYmxlIG9uZS5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUtleUNvZGUodXBwZXJDYXNlZENvZGVQb2ludDogbnVtYmVyKTogc3RyaW5nIHtcbiAgaWYgKHVwcGVyQ2FzZWRDb2RlUG9pbnQgPj0gVVBQRVJDQVNFX0FfQ09ERV9QT0lOVCAmJiB1cHBlckNhc2VkQ29kZVBvaW50IDw9IFVQUEVSQ0FTRV9aX0NPREVfUE9JTlQpIHtcbiAgICByZXR1cm4gYEtleSR7U3RyaW5nLmZyb21Db2RlUG9pbnQodXBwZXJDYXNlZENvZGVQb2ludCl9YDtcbiAgfVxuXG4gIGlmICh1cHBlckNhc2VkQ29kZVBvaW50ID49IERJR0lUX1pFUk9fQ09ERV9QT0lOVCAmJiB1cHBlckNhc2VkQ29kZVBvaW50IDw9IERJR0lUX05JTkVfQ09ERV9QT0lOVCkge1xuICAgIHJldHVybiBgRGlnaXQke1N0cmluZy5mcm9tQ29kZVBvaW50KHVwcGVyQ2FzZWRDb2RlUG9pbnQpfWA7XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBjb21tYW5kIHNlcXVlbmNlIGZvciBhIGtleSBwcmVzcy5cbiAqXG4gKiBNaXJyb3JzIHRoZSBkZXNrdG9wIHR3aW4ncyB0cnVzdGVkIGBrZXlEb3duYCBcdTIxOTIgYGNoYXJgIFx1MjE5MiBga2V5VXBgIGluIENEUCdzIHNwZWxsaW5nOiBgcmF3S2V5RG93bmAgZmlyZXNcbiAqIGBrZXlkb3duYCBhbG9uZSwgYGNoYXJgIGZpcmVzIGBrZXlwcmVzc2AgLyBgYmVmb3JlaW5wdXRgIC8gYGlucHV0YCwgYGtleVVwYCBmaXJlcyBga2V5dXBgLiBBIGtleSB0aGF0XG4gKiBwcm9kdWNlcyBubyB0ZXh0IChgRXNjYXBlYCkgc2tpcHMgdGhlIGBjaGFyYCwgZXhhY3RseSBhcyBhIHJlYWwgb25lIGRvZXMuXG4gKlxuICogQHBhcmFtIHJlcXVlc3QgLSBUaGUga2V5IHJlcXVlc3QuXG4gKiBAcmV0dXJucyBUaGUgY29tbWFuZHMgdG8gc2VuZCwgaW4gb3JkZXIuXG4gKi9cbmZ1bmN0aW9uIHRvS2V5Q29tbWFuZHMocmVxdWVzdDogTW9iaWxlS2V5SW5wdXRSZXF1ZXN0KTogQ2RwSW5wdXRDb21tYW5kW10ge1xuICBjb25zdCB7IGNvZGUsIHRleHQsIHdpbmRvd3NWaXJ0dWFsS2V5Q29kZSB9ID0gcmVzb2x2ZUtleShyZXF1ZXN0LmtleSk7XG4gIGNvbnN0IG1vZGlmaWVycyA9IHRvQ2RwTW9kaWZpZXJzKHJlcXVlc3QubW9kaWZpZXJzKTtcbiAgY29uc3QgYmFzZSA9IHsgY29kZSwga2V5OiByZXF1ZXN0LmtleSwgbW9kaWZpZXJzLCB3aW5kb3dzVmlydHVhbEtleUNvZGUgfTtcblxuICBjb25zdCBjb21tYW5kczogQ2RwSW5wdXRDb21tYW5kW10gPSBbXG4gICAgeyBtZXRob2Q6ICdJbnB1dC5kaXNwYXRjaEtleUV2ZW50JywgcGFyYW1zOiB7IC4uLmJhc2UsIHR5cGU6ICdyYXdLZXlEb3duJyB9IH1cbiAgXTtcblxuICBpZiAodGV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29tbWFuZHMucHVzaCh7IG1ldGhvZDogJ0lucHV0LmRpc3BhdGNoS2V5RXZlbnQnLCBwYXJhbXM6IHsgLi4uYmFzZSwgdGV4dCwgdHlwZTogJ2NoYXInIH0gfSk7XG4gIH1cblxuICBjb21tYW5kcy5wdXNoKHsgbWV0aG9kOiAnSW5wdXQuZGlzcGF0Y2hLZXlFdmVudCcsIHBhcmFtczogeyAuLi5iYXNlLCB0eXBlOiAna2V5VXAnIH0gfSk7XG5cbiAgcmV0dXJuIGNvbW1hbmRzO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgY29tbWFuZCBzZXF1ZW5jZSBmb3IgYSB0YXAgb3IgYSBsb25nLXByZXNzLlxuICpcbiAqICoqVGhlIHR3byBnZXN0dXJlcyB0YWtlIGRpZmZlcmVudCBDRFAgcm91dGVzLCBhbmQgdGhhdCBhc3ltbWV0cnkgaXMgdGhlIHdob2xlIHBvaW50LioqXG4gKlxuICogQSB0YXAgaXMgYSB0cnVzdGVkIHRvdWNoIHBhaXIsIHdoaWNoIGlzIGFsbCBDaHJvbWl1bSBuZWVkcyBcdTIwMTQgaXQgc3ludGhlc2l6ZXMgYHBvaW50ZXJkb3duYCAvXG4gKiBgdG91Y2hzdGFydGAgLyBgcG9pbnRlcnVwYCAvIGB0b3VjaGVuZGAgLyBgY2xpY2tgIGZyb20gaXQsIGV2ZXJ5IG9uZSBgaXNUcnVzdGVkYC4gVGhlIHJlbGVhc2UgY2Fycmllc1xuICogYW4gZW1wdHkgYHRvdWNoUG9pbnRzYCBsaXN0LCB3aGljaCBpcyBDRFAncyBzcGVsbGluZyBmb3IgXCJhbGwgZmluZ2VycyBsaWZ0ZWRcIi5cbiAqXG4gKiBBIGxvbmctcHJlc3MgY2Fubm90IGJlIHRoYXQgc2FtZSBwYWlyIGhlbGQgYXBhcnQgYnkgYSBkd2VsbCwgYmVjYXVzZSBgSW5wdXQuZGlzcGF0Y2hUb3VjaEV2ZW50YCBpbmplY3RzXG4gKiBhIGBXZWJUb3VjaEV2ZW50YCAqKnBhc3QqKiBBbmRyb2lkJ3MgZ2VzdHVyZSByZWNvZ25pemVyOiBubyByZWNvZ25pemVyIHNlZXMgdGhlIGhvbGQsIHNvIG5vIGxvbmctcHJlc3NcbiAqIGdlc3R1cmUgaXMgZXZlciBwcm9kdWNlZCBhbmQgdGhlIHBhaXIgaXMgY2xhc3NpZmllZCBhcyBhIHRhcCBob3dldmVyIGxvbmcgdGhlIGR3ZWxsIGlzLlxuICogYElucHV0LnN5bnRoZXNpemVUYXBHZXN0dXJlYCBpbnN0ZWFkIGdvZXMgdGhyb3VnaCBDaHJvbWl1bSdzIHN5bnRoZXRpYy1nZXN0dXJlIGNvbnRyb2xsZXIsIHdoaWNoIGJ1aWxkc1xuICogcmVhbCBgTW90aW9uRXZlbnRgcyBhbmQgZmVlZHMgdGhlbSB0byB0aGUgcGxhdGZvcm0gcmVjb2duaXplciBcdTIwMTQgdGhlIHN0ZXAgdGhlIGRpc3BhdGNoIHJvdXRlIHNraXBzLlxuICpcbiAqIE1lYXN1cmVkIG9uIGEgbGl2ZSBlbXVsYXRvciAoMjAyNi0wOS0wOCk6IHRoZSBkaXNwYXRjaCBwYWlyIHdpdGggYSA2MDBtcyBkd2VsbCwgYWltZWQgYXQgYSAqKnJlYWwqKlxuICogYC5uYXYtZmlsZS10aXRsZWAgaW4gdGhlIGZpbGUgZXhwbG9yZXIsIHByb2R1Y2VkIGBwb2ludGVyZG93bmAgLyBgdG91Y2hzdGFydGAgLyBgdG91Y2hlbmRgIC8gYGNsaWNrYCBhbmRcbiAqICoqb3BlbmVkIHRoZSBub3RlKiogXHUyMDE0IGEgdGFwLiBObyBgY29udGV4dG1lbnVgLCBhbmQgbm8gT2JzaWRpYW4gbWVudS5cbiAqXG4gKiBAcGFyYW0gcmVxdWVzdCAtIFRoZSBwb2ludGVyIHJlcXVlc3QuXG4gKiBAcmV0dXJucyBUaGUgY29tbWFuZHMgdG8gc2VuZCwgaW4gb3JkZXIuXG4gKi9cbmZ1bmN0aW9uIHRvUG9pbnRlckNvbW1hbmRzKHJlcXVlc3Q6IE1vYmlsZVBvaW50ZXJJbnB1dFJlcXVlc3QpOiBDZHBJbnB1dENvbW1hbmRbXSB7XG4gIGNvbnN0IG1vZGlmaWVycyA9IHRvQ2RwTW9kaWZpZXJzKHJlcXVlc3QubW9kaWZpZXJzKTtcblxuICBpZiAocmVxdWVzdC5raW5kID09PSAnbG9uZ1ByZXNzJykge1xuICAgIC8vIGBzeW50aGVzaXplVGFwR2VzdHVyZWAgdGFrZXMgbm8gbW9kaWZpZXIgYml0bWFzayBcdTIwMTQgQ0RQJ3MgZ2VzdHVyZSBBUEkgaGFzIG5vIHBhcmFtZXRlciBmb3Igb25lIFx1MjAxNCBhbmRcbiAgICAvLyBBIHRvdWNoIHNjcmVlbiBoYXMgbm8gbW9kaWZpZXIga2V5cyB0byBob2xkIGR1cmluZyBhIHByZXNzLCBzbyB0aGVyZSBpcyBub3RoaW5nIHRvIGNhcnJ5IGhlcmUuXG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgbWV0aG9kOiAnSW5wdXQuc3ludGhlc2l6ZVRhcEdlc3R1cmUnLFxuICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICBkdXJhdGlvbjogTE9OR19QUkVTU19EV0VMTF9JTl9NSUxMSVNFQ09ORFMsXG4gICAgICAgICAgZ2VzdHVyZVNvdXJjZVR5cGU6ICd0b3VjaCcsXG4gICAgICAgICAgeDogcmVxdWVzdC54LFxuICAgICAgICAgIHk6IHJlcXVlc3QueVxuICAgICAgICB9XG4gICAgICB9XG4gICAgXTtcbiAgfVxuXG4gIHJldHVybiBbXG4gICAge1xuICAgICAgbWV0aG9kOiAnSW5wdXQuZGlzcGF0Y2hUb3VjaEV2ZW50JyxcbiAgICAgIHBhcmFtczogeyBtb2RpZmllcnMsIHRvdWNoUG9pbnRzOiBbeyB4OiByZXF1ZXN0LngsIHk6IHJlcXVlc3QueSB9XSwgdHlwZTogJ3RvdWNoU3RhcnQnIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG1ldGhvZDogJ0lucHV0LmRpc3BhdGNoVG91Y2hFdmVudCcsXG4gICAgICBwYXJhbXM6IHsgbW9kaWZpZXJzLCB0b3VjaFBvaW50czogW10sIHR5cGU6ICd0b3VjaEVuZCcgfVxuICAgIH1cbiAgXTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBc0JPLE1BQU0sNEJBQTRCO0FBU2xDLE1BQU0sdUNBQXVDO0FBNkdwRCxNQUFNLG1DQUFtQztBQUV6QyxNQUFNLGVBQWU7QUFDckIsTUFBTSxtQkFBbUI7QUFDekIsTUFBTSx1QkFBdUI7QUFDN0IsTUFBTSxvQkFBb0I7QUFDMUIsTUFBTSxxQkFBcUI7QUFPM0IsTUFBTSwyQkFBMkIsb0JBQUksSUFBb0I7QUFBQSxFQUN2RCxDQUFDLE9BQU8sZ0JBQWdCO0FBQUEsRUFDeEIsQ0FBQyxXQUFXLG9CQUFvQjtBQUFBLEVBQ2hDLENBQUMsUUFBUSxpQkFBaUI7QUFBQSxFQUMxQixDQUFDLFNBQVMsa0JBQWtCO0FBQzlCLENBQUM7QUFFRCxNQUFNLHFCQUFxQjtBQUMzQixNQUFNLGVBQWU7QUFDckIsTUFBTSxpQkFBaUI7QUFDdkIsTUFBTSxrQkFBa0I7QUFDeEIsTUFBTSxzQkFBc0I7QUFDNUIsTUFBTSxvQkFBb0I7QUFDMUIsTUFBTSx1QkFBdUI7QUFDN0IsTUFBTSxzQkFBc0I7QUFDNUIsTUFBTSxrQkFBa0I7QUFTeEIsTUFBTSxhQUFhLG9CQUFJLElBQXNCO0FBQUEsRUFDM0MsQ0FBQyxhQUFhLEVBQUUsTUFBTSxhQUFhLHVCQUF1QixvQkFBb0IsQ0FBQztBQUFBLEVBQy9FLENBQUMsYUFBYSxFQUFFLE1BQU0sYUFBYSx1QkFBdUIsb0JBQW9CLENBQUM7QUFBQSxFQUMvRSxDQUFDLGNBQWMsRUFBRSxNQUFNLGNBQWMsdUJBQXVCLHFCQUFxQixDQUFDO0FBQUEsRUFDbEYsQ0FBQyxXQUFXLEVBQUUsTUFBTSxXQUFXLHVCQUF1QixrQkFBa0IsQ0FBQztBQUFBLEVBQ3pFLENBQUMsYUFBYSxFQUFFLE1BQU0sYUFBYSx1QkFBdUIsbUJBQW1C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
|
|
186
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL21vYmlsZS1pbnB1dC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRyYW5zbGF0ZXMgYSBtb2JpbGUgdHJ1c3RlZC1pbnB1dCByZXF1ZXN0IGludG8gdGhlIG9yZGVyZWQgQ2hyb21lIERldlRvb2xzIFByb3RvY29sIGBJbnB1dC4qYCBjb21tYW5kc1xuICogdGhhdCByZWFsaXplIGl0IChzZWUgKipMMzkqKikuXG4gKlxuICogUHVyZSBhbmQgc3luY2hyb25vdXMgYnkgZGVzaWduOiB0aGUgV2ViVmlldyBjb25uZWN0aW9uICh7QGxpbmsgV2ViVmlld0NkcENvbm5lY3Rpb259KSBzZW5kcyB3aGF0ZXZlciB0aGlzXG4gKiByZXR1cm5zLCBzbyBldmVyeSBkZWNpc2lvbiB0aGF0IGlzIHdvcnRoIGEgdGVzdCBcdTIwMTQgdGhlIHRvdWNoIHBhaXIgYSB0YXAgZXhwYW5kcyBpbnRvLCB0aGUgZHdlbGwgYVxuICogbG9uZy1wcmVzcyBhZGRzLCB0aGUgYHJhd0tleURvd25gIFx1MjE5MiBgY2hhcmAgXHUyMTkyIGBrZXlVcGAgc2hhcGUgYSBrZXkgcHJlc3MgbWlycm9ycyBmcm9tIHRoZSBkZXNrdG9wIHR3aW4sIHRoZVxuICogbW9kaWZpZXIgYml0bWFzayBcdTIwMTQgbGl2ZXMgaGVyZSByYXRoZXIgdGhhbiBpbnNpZGUgdGhlIHRyYW5zcG9ydCdzIEkvTyBwYXRoLlxuICpcbiAqIFRoZSByZXF1ZXN0IHRyYXZlbHMgcmVuZGVyZXIgXHUyMTkyIGhvc3QgYXMgSlNPTiAodGhlIHJlbmRlcmVyIGNvbXB1dGVzIHRoZSBjb29yZGluYXRlcywgYmVjYXVzZSBvbmx5IGl0IGNhblxuICogc2VlIHRoZSBET00pLCBzbyBib3RoIHRoZSByZXF1ZXN0IGFuZCB0aGUgY29tbWFuZCBzaGFwZXMgYXJlIGRlbGliZXJhdGVseSBwbGFpbiBkYXRhLlxuICovXG5cbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIGBSdW50aW1lLmFkZEJpbmRpbmdgIGZ1bmN0aW9uIHRoZSBob3N0IGV4cG9zZXMgb24gdGhlIHBhZ2Ugc28gdGhlIHJlbmRlcmVyIGNhbiBoYW5kIGl0IGFuXG4gKiBpbnB1dCByZXF1ZXN0IG1pZC1jbG9zdXJlLlxuICpcbiAqIEl0IGlzIHBhc3NlZCAqaW50byogdGhlIHNlcmlhbGl6ZWQgYm9vdHN0cmFwIGNsb3N1cmUgYXMgZGF0YSByYXRoZXIgdGhhbiByZWZlcmVuY2VkIGZyb20gaXQsIGJlY2F1c2UgdGhhdFxuICogY2xvc3VyZSBtYXkgbm90IHJlYWQgb3V0ZXIgc2NvcGUgKCoqTDE1KiopIFx1MjAxNCBzbyB0aGlzIHN0YXlzIHRoZSBzaW5nbGUgZGVmaW5pdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IE1PQklMRV9JTlBVVF9CSU5ESU5HX05BTUUgPSAnX19vYnNpZGlhbkludGVncmF0aW9uVGVzdGluZ0lucHV0JztcblxuLyoqXG4gKiBIb3cgbG9uZyB0aGUgcmVuZGVyZXIgd2FpdHMgZm9yIHRoZSBob3N0IHRvIHNlcnZpY2Ugb25lIGlucHV0IHJlcXVlc3QgYmVmb3JlIGdpdmluZyB1cC5cbiAqXG4gKiBHZW5lcm91cyByZWxhdGl2ZSB0byB0aGUgd29yayAoYSB0YXAgaXMgdHdvIENEUCBjb21tYW5kczsgYSBsb25nLXByZXNzIGFkZHMgYSA2MDBtcyBkd2VsbCk6IHRoZSBwb2ludCBpc1xuICogdG8gZmFpbCB3aXRoIGEgbGVnaWJsZSBlcnJvciByYXRoZXIgdGhhbiBoYW5nIHRoZSBjbG9zdXJlIHVudGlsIHRoZSB3aG9sZSBydW4gdGltZXMgb3V0LiBQYXNzZWQgaW50byB0aGVcbiAqIGJvb3RzdHJhcCBjbG9zdXJlIGFzIGRhdGEsIGZvciB0aGUgc2FtZSByZWFzb24gYXMge0BsaW5rIE1PQklMRV9JTlBVVF9CSU5ESU5HX05BTUV9LlxuICovXG5leHBvcnQgY29uc3QgTU9CSUxFX0lOUFVUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gMTVfMDAwO1xuXG4vKipcbiAqIEEgc2luZ2xlIENocm9tZSBEZXZUb29scyBQcm90b2NvbCBjb21tYW5kLlxuICpcbiAqIEl0IG9uY2UgYWxzbyBjYXJyaWVkIGEgYGRlbGF5QmVmb3JlSW5NaWxsaXNlY29uZHNgLCBzbyB0aGUgaG9zdCB3b3VsZCBzbGVlcCBiZXR3ZWVuIHRoZSB0d28gaGFsdmVzIG9mIGFcbiAqIGxvbmctcHJlc3MuIFRoYXQgZHdlbGwgaXMgZ29uZTogdGhlIGdlc3R1cmUgaXMgbm93IG9uZSBgSW5wdXQuc3ludGhlc2l6ZVRhcEdlc3R1cmVgIHRoYXQgaG9sZHMgaXRzZWxmXG4gKiBmb3IgaXRzIG93biBgZHVyYXRpb25gLCBzbyBubyBjb21tYW5kIGluIGFueSBzZXF1ZW5jZSBuZWVkcyB0byBiZSBzcGFjZWQgZnJvbSB0aGUgb25lIGJlZm9yZSBpdCwgYW5kIGFcbiAqIGtub2Igbm90aGluZyBzZXRzIGlzIHdvcnNlIHRoYW4gbm8ga25vYi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDZHBJbnB1dENvbW1hbmQge1xuICAvKipcbiAgICogVGhlIENEUCBtZXRob2QgbmFtZSwgZS5nLiBgSW5wdXQuZGlzcGF0Y2hUb3VjaEV2ZW50YC5cbiAgICovXG4gIHJlYWRvbmx5IG1ldGhvZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQ0RQIG1ldGhvZCBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLyoqXG4gKiBXaGF0IHRoZSByZW5kZXJlciBoYW5kcyB0byB0aGUgaG9zdCBiaW5kaW5nOiBvbmUgcmVxdWVzdCwgcGx1cyB0aGUgaWQgdG8gYW5zd2VyIGl0IG9uLlxuICpcbiAqIFRoZSByZW5kZXJlciBidWlsZHMgdGhpcyBsaXRlcmFsIGluc2lkZSB0aGUgc2VyaWFsaXplZCBib290c3RyYXAgY2xvc3VyZSwgd2hpY2ggY2Fubm90IGltcG9ydCAoKipMMTUqKiksXG4gKiBzbyB0aGUgc2hhcGUgaXMgZGVjbGFyZWQgaGVyZSBhbmQgbWlycm9yZWQgdGhlcmUuIFRoZXkgYXJlIG9uZSB3aXJlIGZvcm1hdDsgY2hhbmdlIHRoZW0gdG9nZXRoZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9iaWxlSW5wdXRFbnZlbG9wZSB7XG4gIC8qKlxuICAgKiBUaGUgcmVxdWVzdCBpZCB0aGUgcmVuZGVyZXIgaXMgd2FpdGluZyBvbi5cbiAgICovXG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoYXQgdG8gaW5qZWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWVzdDogTW9iaWxlSW5wdXRSZXF1ZXN0O1xufVxuXG4vKipcbiAqIEFueXRoaW5nIHRoZSByZW5kZXJlciBjYW4gYXNrIHRoZSBob3N0IHRvIGluamVjdC5cbiAqL1xuZXhwb3J0IHR5cGUgTW9iaWxlSW5wdXRSZXF1ZXN0ID0gTW9iaWxlS2V5SW5wdXRSZXF1ZXN0IHwgTW9iaWxlUG9pbnRlcklucHV0UmVxdWVzdDtcblxuLyoqXG4gKiBBIHRydXN0ZWQga2V5IHByZXNzIHRvIGluamVjdCBvbiBtb2JpbGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9iaWxlS2V5SW5wdXRSZXF1ZXN0IHtcbiAgLyoqXG4gICAqIFRoZSBrZXkgdG8gcHJlc3MsIGluIHRoZSBzYW1lIHNwZWxsaW5nIHRoZSBkZXNrdG9wIHR3aW4gdGFrZXM6IGVpdGhlciBhIG5hbWVkIGtleVxuICAgKiAoYEVudGVyYCwgYEVzY2FwZWAsIGBUYWJgLCBgQmFja3NwYWNlYCwgYERlbGV0ZWAsIGFuIGFycm93KSBvciBhIHNpbmdsZSBwcmludGFibGUgY2hhcmFjdGVyLlxuICAgKi9cbiAgcmVhZG9ubHkga2V5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERpc2NyaW1pbmFudC5cbiAgICovXG4gIHJlYWRvbmx5IGtpbmQ6ICdrZXknO1xuXG4gIC8qKlxuICAgKiBNb2RpZmllcnMgYWxyZWFkeSByZXNvbHZlZCB0byB0aGVpciBwbGF0Zm9ybS1pbmRlcGVuZGVudCBsb3dlcmNhc2UgbmFtZXMgYnkgdGhlIHJlbmRlcmVyJ3NcbiAgICogYHRvRWxlY3Ryb25Nb2RpZmllcnNgIFx1MjAxNCB0aGUgb25lIG1hcHBpbmcgYSBrZXkgcHJlc3MgYW5kIGEgY2xpY2sgc2hhcmUsIHNvIGAnTW9kJ2AgY2Fubm90IG1lYW4gdHdvXG4gICAqIGRpZmZlcmVudCB0aGluZ3MgKCoqTDE3KiopLlxuICAgKi9cbiAgcmVhZG9ubHkgbW9kaWZpZXJzOiByZWFkb25seSBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBBIHRydXN0ZWQgcG9pbnRlciBnZXN0dXJlIHRvIGluamVjdCBvbiBtb2JpbGUsIGluIENTUyBwaXhlbHMgd2l0aGluIHRoZSBXZWJWaWV3J3Mgb3duIHZpZXdwb3J0LlxuICpcbiAqIE5vIGRldmljZS1waXhlbCBjb252ZXJzaW9uIGlzIGludm9sdmVkOiBDRFAgdGFrZXMgcGFnZSBjb29yZGluYXRlcywgc28gYGRldmljZVBpeGVsUmF0aW9gIGFuZCB0aGVcbiAqIFdlYlZpZXcncyBvZmZzZXQgdW5kZXIgdGhlIHN0YXR1cyBiYXIgbmV2ZXIgZW50ZXIgdGhlIHBpY3R1cmUgKHRoZXkgd291bGQgZm9yIG5hdGl2ZSBpbmplY3Rpb24pLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vYmlsZVBvaW50ZXJJbnB1dFJlcXVlc3Qge1xuICAvKipcbiAgICogYHRhcGAgaXMgdGhlIHRvdWNoIGFuYWxvZyBvZiBhIGxlZnQgY2xpY2s7IGBsb25nUHJlc3NgIGlzIHRoZSBtb2JpbGUgY29udGV4dC1tZW51IGdlc3R1cmUsIGkuZS4gd2hhdCBhXG4gICAqIGRlc2t0b3AgcmlnaHQgY2xpY2sgbWVhbnMgaGVyZS5cbiAgICovXG4gIHJlYWRvbmx5IGtpbmQ6ICdsb25nUHJlc3MnIHwgJ3RhcCc7XG5cbiAgLyoqXG4gICAqIFNlZSB7QGxpbmsgTW9iaWxlS2V5SW5wdXRSZXF1ZXN0Lm1vZGlmaWVyc30uXG4gICAqL1xuICByZWFkb25seSBtb2RpZmllcnM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgdmlld3BvcnQgeCBjb29yZGluYXRlLCBpbiBDU1MgcGl4ZWxzLlxuICAgKi9cbiAgcmVhZG9ubHkgeDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgdmlld3BvcnQgeSBjb29yZGluYXRlLCBpbiBDU1MgcGl4ZWxzLlxuICAgKi9cbiAgcmVhZG9ubHkgeTogbnVtYmVyO1xufVxuXG4vKipcbiAqIFRoZSBDRFAgYFJlbW90ZU9iamVjdGAgYW4gZXZhbHVhdGUgcmV0dXJucywgcmVkdWNlZCB0byB0aGUgb25lIGZpZWxkIHRoaXMgbW9kdWxlIHJlYWRzLlxuICovXG5pbnRlcmZhY2UgRXZhbHVhdGVSZW1vdGVPYmplY3Qge1xuICByZWFkb25seSB2YWx1ZT86IHVua25vd247XG59XG5cbi8qKlxuICogVGhlIHBhcnQgb2YgYSBDRFAgYFJ1bnRpbWUuZXZhbHVhdGVgIHJlcGx5IHRoaXMgbW9kdWxlIHJlYWRzLlxuICpcbiAqIERlY2xhcmVkIHJhdGhlciB0aGFuIGltcG9ydGVkOiB0aGUgaGFybmVzcyB0YWxrcyB0byB0aGUgV2ViVmlldyBkZWJ1Z2dlciBvdmVyIGEgcmF3IHNvY2tldCwgc28gdGhlcmVcbiAqIGlzIG5vIGdlbmVyYXRlZCBwcm90b2NvbCB0eXBlIHRvIHJlYWNoIGZvciwgYW5kIG9ubHkgdGhlIHJldHVybmVkIHZhbHVlIG1hdHRlcnMgaGVyZS5cbiAqL1xuaW50ZXJmYWNlIEV2YWx1YXRlUmVzdWx0IHtcbiAgcmVhZG9ubHkgcmVzdWx0PzogRXZhbHVhdGVSZW1vdGVPYmplY3Q7XG59XG5cbi8qKlxuICogSG93IGxvbmcgYSBsb25nLXByZXNzIGhvbGRzIHRoZSB0b3VjaCBkb3duIGJlZm9yZSByZWxlYXNpbmcgaXQuXG4gKlxuICogSXQgaGFzIHRvIGNsZWFyICoqQW5kcm9pZCdzKiogbG9uZy1wcmVzcyB0aHJlc2hvbGQsIHdoaWNoIGlzIDUwMG1zIGJ5IGRlZmF1bHQ6IHRoZSBnZXN0dXJlIGlzXG4gKiByZWNvZ25pemVkIGJ5IHRoZSBwbGF0Zm9ybSwgYW5kIHRoZSBgY29udGV4dG1lbnVgIE9ic2lkaWFuJ3MgbWVudXMgaGFuZyBvZmYgaXMgd2hhdCB0aGUgcmVjb2duaXplclxuICogZW1pdHMuIDYwMG1zIGNsZWFycyB0aGF0IHdpdGggbWFyZ2luIHdpdGhvdXQgbWFraW5nIGV2ZXJ5IGxvbmctcHJlc3MgdGVzdCBub3RpY2VhYmx5IHNsb3dlci5cbiAqXG4gKiBUaGlzIGNvcnJlY3RzIHRoZSBmb3JtZXIgcmVhZGluZyBcdTIwMTQgdGhhdCBPYnNpZGlhbiBNb2JpbGUgaW1wbGVtZW50cyBsb25nLXByZXNzIGl0c2VsZiwgb24gYSBKYXZhU2NyaXB0XG4gKiBgdG91Y2hzdGFydGAgdGltZXIsIHNvIHRoZSBkd2VsbCBvbmx5IGhhZCB0byBjbGVhciAqaXRzKiB0aHJlc2hvbGQuIE1lYXN1cmVkIGFnYWluc3QgYSByZWFsXG4gKiBgLm5hdi1maWxlLXRpdGxlYCwgYSA2MDBtcyBkd2VsbCBiZXR3ZWVuIHR3byBkaXNwYXRjaGVkIHRvdWNoZXMgb3BlbmVkIHRoZSBub3RlIGluc3RlYWQgb2YgaXRzIG1lbnU7XG4gKiBzZWUge0BsaW5rIHRvUG9pbnRlckNvbW1hbmRzfSBmb3Igd2h5IHRoZSBkd2VsbCBhbG9uZSB3YXMgbmV2ZXIgZ29pbmcgdG8gYmUgZW5vdWdoLlxuICovXG5jb25zdCBMT05HX1BSRVNTX0RXRUxMX0lOX01JTExJU0VDT05EUyA9IDYwMDtcblxuY29uc3QgTk9fTU9ESUZJRVJTID0gMDtcbmNvbnN0IE1PRElGSUVSX0JJVF9BTFQgPSAxO1xuY29uc3QgTU9ESUZJRVJfQklUX0NPTlRST0wgPSAyO1xuY29uc3QgTU9ESUZJRVJfQklUX01FVEEgPSA0O1xuY29uc3QgTU9ESUZJRVJfQklUX1NISUZUID0gODtcblxuLyoqXG4gKiBDRFAncyBtb2RpZmllciBiaXRtYXNrLCB3aGljaCBpcyBub3QgdGhlIHNhbWUgc3BlbGxpbmcgYXMgRWxlY3Ryb24ncyBzdHJpbmcgbGlzdC5cbiAqXG4gKiBAc2VlIHtAbGluayBodHRwczovL2Nocm9tZWRldnRvb2xzLmdpdGh1Yi5pby9kZXZ0b29scy1wcm90b2NvbC90b3QvSW5wdXQvI21ldGhvZC1kaXNwYXRjaEtleUV2ZW50fVxuICovXG5jb25zdCBDRFBfTU9ESUZJRVJfQklUX0JZX05BTUUgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPihbXG4gIFsnYWx0JywgTU9ESUZJRVJfQklUX0FMVF0sXG4gIFsnY29udHJvbCcsIE1PRElGSUVSX0JJVF9DT05UUk9MXSxcbiAgWydtZXRhJywgTU9ESUZJRVJfQklUX01FVEFdLFxuICBbJ3NoaWZ0JywgTU9ESUZJRVJfQklUX1NISUZUXVxuXSk7XG5cbmNvbnN0IEtFWV9DT0RFX0JBQ0tTUEFDRSA9IDg7XG5jb25zdCBLRVlfQ09ERV9UQUIgPSA5O1xuY29uc3QgS0VZX0NPREVfRU5URVIgPSAxMztcbmNvbnN0IEtFWV9DT0RFX0VTQ0FQRSA9IDI3O1xuY29uc3QgS0VZX0NPREVfQVJST1dfTEVGVCA9IDM3O1xuY29uc3QgS0VZX0NPREVfQVJST1dfVVAgPSAzODtcbmNvbnN0IEtFWV9DT0RFX0FSUk9XX1JJR0hUID0gMzk7XG5jb25zdCBLRVlfQ09ERV9BUlJPV19ET1dOID0gNDA7XG5jb25zdCBLRVlfQ09ERV9ERUxFVEUgPSA0NjtcblxuLyoqXG4gKiBOYW1lZCBrZXlzLCB3aXRoIHRoZSBgdGV4dGAgYSByZWFsIGtleSBwcmVzcyB3b3VsZCBwcm9kdWNlIChhYnNlbnQgd2hlbiBpdCBwcm9kdWNlcyBub25lKS5cbiAqXG4gKiBPbmx5IGtleXMgdGhlc2Ugc3VpdGVzIGFjdHVhbGx5IHByZXNzIGFyZSBsaXN0ZWQsIHBsdXMgdGhlIGVkaXRpbmcga2V5cyBhIGNhbGxlciB3b3VsZCByZWFzb25hYmx5IHJlYWNoXG4gKiBmb3IgbmV4dC4gQW4gdW5rbm93biBtdWx0aS1jaGFyYWN0ZXIga2V5IGlzIGEgY2FsbGVyIGVycm9yLCBub3QgYSBzaWxlbnQgbm8tb3AgXHUyMDE0IHNlZVxuICoge0BsaW5rIHRvS2V5Q29tbWFuZHN9LlxuICovXG5jb25zdCBOQU1FRF9LRVlTID0gbmV3IE1hcDxzdHJpbmcsIE5hbWVkS2V5PihbXG4gIFsnQXJyb3dEb3duJywgeyBjb2RlOiAnQXJyb3dEb3duJywgd2luZG93c1ZpcnR1YWxLZXlDb2RlOiBLRVlfQ09ERV9BUlJPV19ET1dOIH1dLFxuICBbJ0Fycm93TGVmdCcsIHsgY29kZTogJ0Fycm93TGVmdCcsIHdpbmRvd3NWaXJ0dWFsS2V5Q29kZTogS0VZX0NPREVfQVJST1dfTEVGVCB9XSxcbiAgWydBcnJvd1JpZ2h0JywgeyBjb2RlOiAnQXJyb3dSaWdodCcsIHdpbmRvd3NWaXJ0dWFsS2V5Q29kZTogS0VZX0NPREVfQVJST1dfUklHSFQgfV0sXG4gIFsnQXJyb3dVcCcsIHsgY29kZTogJ0Fycm93VXAnLCB3aW5kb3dzVmlydHVhbEtleUNvZGU6IEtFWV9DT0RFX0FSUk9XX1VQIH1dLFxuICBbJ0JhY2tzcGFjZScsIHsgY29kZTogJ0JhY2tzcGFjZScsIHdpbmRvd3NWaXJ0dWFsS2V5Q29kZTogS0VZX0NPREVfQkFDS1NQQUNFIH1dLFxuICBbJ0RlbGV0ZScsIHsgY29kZTogJ0RlbGV0ZScsIHdpbmRvd3NWaXJ0dWFsS2V5Q29kZTogS0VZX0NPREVfREVMRVRFIH1dLFxuICBbJ0VudGVyJywgeyBjb2RlOiAnRW50ZXInLCB0ZXh0OiAnXFxyJywgd2luZG93c1ZpcnR1YWxLZXlDb2RlOiBLRVlfQ09ERV9FTlRFUiB9XSxcbiAgWydFc2NhcGUnLCB7IGNvZGU6ICdFc2NhcGUnLCB3aW5kb3dzVmlydHVhbEtleUNvZGU6IEtFWV9DT0RFX0VTQ0FQRSB9XSxcbiAgWydUYWInLCB7IGNvZGU6ICdUYWInLCB0ZXh0OiAnXFx0Jywgd2luZG93c1ZpcnR1YWxLZXlDb2RlOiBLRVlfQ09ERV9UQUIgfV1cbl0pO1xuXG5jb25zdCBGSVJTVF9DT0RFX1BPSU5UX0lOREVYID0gMDtcbmNvbnN0IERJR0lUX1pFUk9fQ09ERV9QT0lOVCA9IGNvZGVQb2ludE9mKCcwJyk7XG5jb25zdCBESUdJVF9OSU5FX0NPREVfUE9JTlQgPSBjb2RlUG9pbnRPZignOScpO1xuY29uc3QgVVBQRVJDQVNFX0FfQ09ERV9QT0lOVCA9IGNvZGVQb2ludE9mKCdBJyk7XG5jb25zdCBVUFBFUkNBU0VfWl9DT0RFX1BPSU5UID0gY29kZVBvaW50T2YoJ1onKTtcblxuLyoqXG4gKiBUaGUgQ0RQIHNwZWxsaW5nIG9mIG9uZSBuYW1lZCBrZXkuXG4gKi9cbmludGVyZmFjZSBOYW1lZEtleSB7XG4gIHJlYWRvbmx5IGNvZGU6IHN0cmluZztcbiAgcmVhZG9ubHkgdGV4dD86IHN0cmluZztcbiAgcmVhZG9ubHkgd2luZG93c1ZpcnR1YWxLZXlDb2RlOiBudW1iZXI7XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBleHByZXNzaW9uIHRoZSBob3N0IGV2YWx1YXRlcyB0byBjbGFpbSBvbmUgaW5wdXQgcmVxdWVzdCBiZWZvcmUgaW5qZWN0aW5nIGl0LlxuICpcbiAqIENEUCBkZWxpdmVycyBgUnVudGltZS5iaW5kaW5nQ2FsbGVkYCB0byAqKmV2ZXJ5KiogYXR0YWNoZWQgc2Vzc2lvbiwgc28gZWFjaCBOb2RlIHByb2Nlc3MgaG9sZGluZyBhblxuICogaW5wdXQgY2hhbm5lbCB0byB0aGlzIFdlYlZpZXcgc2VydmljZXMgdGhlIHNhbWUgcmVxdWVzdCBhbmQgaW5qZWN0cyB0aGUgc2FtZSBnZXN0dXJlLiBUaGUgY2xhaW0gaXNcbiAqIHdoYXQgbWFrZXMgdGhlIGluamVjdGlvbiBleGFjdGx5LW9uY2UgYWNyb3NzIGFsbCBvZiB0aGVtOiB0aGUgcGFnZSBpcyB0aGUgb25seSB0aGluZyBldmVyeSBob3N0XG4gKiBzaGFyZXMsIGFuZCBpdCBydW5zIHRoZSByYWNpbmcgZXZhbHVhdGVzIG9uZSBhZnRlciBhbm90aGVyIG9uIGl0cyBzaW5nbGUgdGhyZWFkLCBzbyBleGFjdGx5IG9uZSBvZlxuICogdGhlbSBnZXRzIGB0cnVlYC5cbiAqXG4gKiBPcHRpb25hbCBjaGFpbmluZyBmb3IgdGhlIHNhbWUgcmVhc29uIGFzIHtAbGluayBidWlsZFJlc29sdmVJbnB1dEV4cHJlc3Npb259LCBhbmQgaXQgaXMgd2h5XG4gKiB7QGxpbmsgY2hlY2tJbnB1dENsYWltR3JhbnRlZH0gdHJlYXRzIGEgbm9uLWBmYWxzZWAgcmVzdWx0IGFzIGNsYWltZWQ6IGEgcGFnZSB0aGF0IGhhcyBkcm9wcGVkIHRoZVxuICogbmFtZXNwYWNlIHlpZWxkcyBgdW5kZWZpbmVkYCwgYW5kIGluamVjdGluZyB0d2ljZSBpcyBhIGZhciBiZXR0ZXIgZmFpbHVyZSB0aGFuIG5ldmVyIGluamVjdGluZy5cbiAqXG4gKiBAcGFyYW0gaWQgLSBUaGUgcmVxdWVzdCBpZCB0byBjbGFpbS5cbiAqIEByZXR1cm5zIEEgc2VsZi1jb250YWluZWQgZXhwcmVzc2lvbiB0byBwYXNzIHRvIGBSdW50aW1lLmV2YWx1YXRlYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQ2xhaW1JbnB1dEV4cHJlc3Npb24oaWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgd2luZG93Ll9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3Rpbmc/LmNsYWltSW5wdXQ/Ligke0pTT04uc3RyaW5naWZ5KGlkKX0pYDtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIGV4cHJlc3Npb24gdGhlIGhvc3QgZXZhbHVhdGVzIHRvIGFuc3dlciBvbmUgaW5wdXQgcmVxdWVzdC5cbiAqXG4gKiBPcHRpb25hbCBjaGFpbmluZyB0aHJvdWdob3V0OiBieSB0aGUgdGltZSB0aGUgaG9zdCBhbnN3ZXJzLCB0aGUgcGFnZSBtYXkgaGF2ZSBuYXZpZ2F0ZWQgYW5kIGRyb3BwZWQgdGhlXG4gKiBuYW1lc3BhY2UsIGFuZCBhIGBUeXBlRXJyb3JgIGluc2lkZSB0aGlzIGV2YWx1YXRlIHdvdWxkIGJlIHJlcG9ydGVkIGFzIGFuIGluamVjdGlvbiBmYWlsdXJlIHRoYXQgYWxyZWFkeVxuICogc3VjY2VlZGVkLlxuICpcbiAqIEBwYXJhbSBpZCAtIFRoZSByZXF1ZXN0IGlkIHRoZSByZW5kZXJlciBpcyB3YWl0aW5nIG9uLlxuICogQHBhcmFtIGVycm9yTWVzc2FnZSAtIFdoeSB0aGUgaW5qZWN0aW9uIGZhaWxlZCwgd2hlbiBpdCBkaWQuIE9taXQgb24gc3VjY2Vzcy5cbiAqIEByZXR1cm5zIEEgc2VsZi1jb250YWluZWQgZXhwcmVzc2lvbiB0byBwYXNzIHRvIGBSdW50aW1lLmV2YWx1YXRlYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkUmVzb2x2ZUlucHV0RXhwcmVzc2lvbihpZDogc3RyaW5nLCBlcnJvck1lc3NhZ2U/OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYHdpbmRvdy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nPy5yZXNvbHZlSW5wdXQ/Ligke0pTT04uc3RyaW5naWZ5KGlkKX0sICR7SlNPTi5zdHJpbmdpZnkoZXJyb3JNZXNzYWdlID8/IG51bGwpfSlgO1xufVxuXG4vKipcbiAqIFJlYWRzIGEgYFJ1bnRpbWUuZXZhbHVhdGVgIHJlc3VsdCBmb3Ige0BsaW5rIGJ1aWxkQ2xhaW1JbnB1dEV4cHJlc3Npb259IGFuZCBzYXlzIHdoZXRoZXIgdG8gaW5qZWN0LlxuICpcbiAqICoqRGVsaWJlcmF0ZWx5IGZhaWxzIE9QRU4uKiogT25seSBhIGxpdGVyYWwgYGZhbHNlYCBcdTIwMTQgdGhlIHBhZ2UgYWN0aXZlbHkgc2F5aW5nIGFub3RoZXIgaG9zdCBhbHJlYWR5XG4gKiBjbGFpbWVkIHRoaXMgaWQgXHUyMDE0IHN0b3BzIHRoZSBpbmplY3Rpb24uIEEgbWlzc2luZyBuYW1lc3BhY2UsIGEgcGFnZSBtaWQtbmF2aWdhdGlvbiwgb3IgYW55IHJlc3VsdFxuICogc2hhcGUgdGhpcyBkb2VzIG5vdCByZWNvZ25pemUgeWllbGRzIGB0cnVlYCwgYmVjYXVzZSBhIGdlc3R1cmUgaW5qZWN0ZWQgdHdpY2UgaXMgYSBmYXIgYmV0dGVyXG4gKiBmYWlsdXJlIHRoYW4gYSBnZXN0dXJlIG5ldmVyIGluamVjdGVkIGF0IGFsbDogdGhlIGZpcnN0IGlzIGEgZG91YmxlZCB0YXAsIHRoZSBzZWNvbmQgaXMgYSB0ZXN0IHRoYXRcbiAqIGhhbmdzIHVudGlsIHRoZSByZW5kZXJlcidzIHRpbWVvdXQgYW5kIHJlcG9ydHMgbm90aGluZyB1c2VmdWwuXG4gKlxuICogQHBhcmFtIHJlc3VsdCAtIFRoZSByYXcgYFJ1bnRpbWUuZXZhbHVhdGVgIHJlc3VsdCBvYmplY3QuXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoaXMgaG9zdCBzaG91bGQgcGVyZm9ybSB0aGUgaW5qZWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tJbnB1dENsYWltR3JhbnRlZChyZXN1bHQ6IHVua25vd24pOiBib29sZWFuIHtcbiAgaWYgKHR5cGVvZiByZXN1bHQgIT09ICdvYmplY3QnIHx8IHJlc3VsdCA9PT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIChyZXN1bHQgYXMgRXZhbHVhdGVSZXN1bHQpLnJlc3VsdD8udmFsdWUgIT09IGZhbHNlO1xufVxuXG4vKipcbiAqIFRoZSBmaXJzdCBjb2RlIHBvaW50IG9mIGEgbm9uLWVtcHR5IHN0cmluZy5cbiAqXG4gKiBgU3RyaW5nLnByb3RvdHlwZS5jb2RlUG9pbnRBdGAgaXMgdHlwZWQgYG51bWJlciB8IHVuZGVmaW5lZGAsIHNvIGV2ZXJ5IGNhbGwgc2l0ZSB3b3VsZCBvdGhlcndpc2UgY2FycnkgYVxuICogYD8/IGZhbGxiYWNrYCB0aGF0IG5vIGlucHV0IGNhbiBldmVyIHJlYWNoIFx1MjAxNCBhIGRlYWQgYnJhbmNoIHVuZGVyIHRoZSAxMDAlIGNvdmVyYWdlIGdhdGUuIFRocm93aW5nIGhlcmVcbiAqIGtlZXBzIHRoYXQgaW1wb3NzaWJsZSBjYXNlIGluIE9ORSBwbGFjZSwgd2hlcmUgYSB1bml0IHRlc3QgY2FuIHJlYWNoIGl0IGRpcmVjdGx5LCBpbnN0ZWFkIG9mIHNwcmVhZGluZ1xuICogdW5yZWFjaGFibGUgZmFsbGJhY2tzIChvciBjb3ZlcmFnZSBzdXBwcmVzc2lvbnMpIGFjcm9zcyB0aGUgbW9kdWxlLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gQSBub24tZW1wdHkgc3RyaW5nLlxuICogQHJldHVybnMgSXRzIGZpcnN0IGNvZGUgcG9pbnQuXG4gKiBAdGhyb3dzIFdoZW4gYHRleHRgIGlzIGVtcHR5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29kZVBvaW50T2YodGV4dDogc3RyaW5nKTogbnVtYmVyIHtcbiAgY29uc3QgY29kZVBvaW50ID0gdGV4dC5jb2RlUG9pbnRBdChGSVJTVF9DT0RFX1BPSU5UX0lOREVYKTtcbiAgaWYgKGNvZGVQb2ludCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjb2RlUG9pbnRPZiByZWNlaXZlZCBhbiBlbXB0eSBzdHJpbmcuJyk7XG4gIH1cblxuICByZXR1cm4gY29kZVBvaW50O1xufVxuXG4vKipcbiAqIFRyYW5zbGF0ZXMgYSBtb2JpbGUgaW5wdXQgcmVxdWVzdCBpbnRvIHRoZSBvcmRlcmVkIENEUCBjb21tYW5kcyB0aGF0IHJlYWxpemUgaXQuXG4gKlxuICogQHBhcmFtIHJlcXVlc3QgLSBXaGF0IHRoZSByZW5kZXJlciBhc2tlZCB0aGUgaG9zdCB0byBpbmplY3QuXG4gKiBAcmV0dXJucyBUaGUgY29tbWFuZHMgdG8gc2VuZCwgaW4gb3JkZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0NkcElucHV0Q29tbWFuZHMocmVxdWVzdDogTW9iaWxlSW5wdXRSZXF1ZXN0KTogQ2RwSW5wdXRDb21tYW5kW10ge1xuICBpZiAocmVxdWVzdC5raW5kID09PSAna2V5Jykge1xuICAgIHJldHVybiB0b0tleUNvbW1hbmRzKHJlcXVlc3QpO1xuICB9XG5cbiAgcmV0dXJuIHRvUG9pbnRlckNvbW1hbmRzKHJlcXVlc3QpO1xufVxuXG4vKipcbiAqIEZvbGRzIHJlc29sdmVkIG1vZGlmaWVyIG5hbWVzIGludG8gQ0RQJ3MgYml0bWFzay5cbiAqXG4gKiBVbmtub3duIG5hbWVzIGFyZSBpZ25vcmVkIHJhdGhlciB0aGFuIHRocm93aW5nOiB0aGUgcmVuZGVyZXIncyBgdG9FbGVjdHJvbk1vZGlmaWVyc2AgaXMgZXhoYXVzdGl2ZSBvdmVyXG4gKiBPYnNpZGlhbidzIGBNb2RpZmllcmAgdW5pb24sIHNvIGFuIHVua25vd24gbmFtZSBoZXJlIHdvdWxkIG1lYW4gdGhlIHR3byBjb3BpZXMgaGF2ZSBhbHJlYWR5IGRyaWZ0ZWQsIGFuZFxuICogZmFpbGluZyB0aGUgd2hvbGUgZ2VzdHVyZSBpcyBhIHdvcnNlIG91dGNvbWUgdGhhbiBwcmVzc2luZyBpdCB1bm1vZGlmaWVkLlxuICpcbiAqIEBwYXJhbSBtb2RpZmllcnMgLSBSZXNvbHZlZCBsb3dlcmNhc2UgbW9kaWZpZXIgbmFtZXMuXG4gKiBAcmV0dXJucyBUaGUgQ0RQIG1vZGlmaWVyIGJpdG1hc2suXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0NkcE1vZGlmaWVycyhtb2RpZmllcnM6IHJlYWRvbmx5IHN0cmluZ1tdKTogbnVtYmVyIHtcbiAgLy8gU3VtbWluZyBESVNUSU5DVCBiaXRzIGVxdWFscyBPUi1pbmcgdGhlbSwgYW5kIHRoZSBgU2V0YCBpcyB3aGF0IG1ha2VzIHRoYXQgaG9sZCBldmVuIHdoZW4gYSBjYWxsZXJcbiAgLy8gUGFzc2VzIHRoZSBzYW1lIG1vZGlmaWVyIHR3aWNlIFx1MjAxNCBzbyB0aGUgbWFzayBpcyBidWlsdCB3aXRob3V0IGEgYml0d2lzZSBvcGVyYXRvci5cbiAgY29uc3QgYml0cyA9IG5ldyBTZXQ8bnVtYmVyPigpO1xuICBmb3IgKGNvbnN0IG1vZGlmaWVyIG9mIG1vZGlmaWVycykge1xuICAgIGNvbnN0IGJpdCA9IENEUF9NT0RJRklFUl9CSVRfQllfTkFNRS5nZXQobW9kaWZpZXIpO1xuICAgIGlmIChiaXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYml0cy5hZGQoYml0KTtcbiAgICB9XG4gIH1cblxuICBsZXQgYml0bWFzayA9IE5PX01PRElGSUVSUztcbiAgZm9yIChjb25zdCBiaXQgb2YgYml0cykge1xuICAgIGJpdG1hc2sgKz0gYml0O1xuICB9XG5cbiAgcmV0dXJuIGJpdG1hc2s7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgYSBrZXkgbmFtZSB0byBpdHMgQ0RQIHNwZWxsaW5nLlxuICpcbiAqIEBwYXJhbSBrZXkgLSBBIG5hbWVkIGtleSBvciBhIHNpbmdsZSBwcmludGFibGUgY2hhcmFjdGVyLlxuICogQHJldHVybnMgVGhlIENEUCBzcGVsbGluZy5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUtleShrZXk6IHN0cmluZyk6IE5hbWVkS2V5IHtcbiAgY29uc3QgbmFtZWRLZXkgPSBOQU1FRF9LRVlTLmdldChrZXkpO1xuICBpZiAobmFtZWRLZXkpIHtcbiAgICByZXR1cm4gbmFtZWRLZXk7XG4gIH1cblxuICAvLyBcIkV4YWN0bHkgb25lIGNvZGUgcG9pbnRcIiwgdGVzdGVkIHdpdGhvdXQgc3BsaXR0aW5nIHRoZSBzdHJpbmc6IGBmcm9tQ29kZVBvaW50YCByb3VuZC10cmlwcyBvbmx5IHdoZW5cbiAgLy8gYGtleWAgaXMgdGhhdCBzaW5nbGUgY29kZSBwb2ludCwgc28gYW4gYXN0cmFsLXBsYW5lIGNoYXJhY3RlciBjb3VudHMgYXMgb25lIGFuZCBgJ0N0cmwrSydgIGRvZXMgbm90LlxuICBjb25zdCBjb2RlUG9pbnQgPSBrZXkuY29kZVBvaW50QXQoRklSU1RfQ09ERV9QT0lOVF9JTkRFWCk7XG4gIGlmIChjb2RlUG9pbnQgPT09IHVuZGVmaW5lZCB8fCBTdHJpbmcuZnJvbUNvZGVQb2ludChjb2RlUG9pbnQpICE9PSBrZXkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgcHJlc3NLZXkgcmVjZWl2ZWQgYW4gdW5rbm93biBrZXkgbmFtZSBvbiBtb2JpbGU6ICR7SlNPTi5zdHJpbmdpZnkoa2V5KX0uIGBcbiAgICAgICAgKyBgUGFzcyBhIHNpbmdsZSBjaGFyYWN0ZXIgb3Igb25lIG9mOiAke1suLi5OQU1FRF9LRVlTLmtleXMoKV0uam9pbignLCAnKX0uYFxuICAgICk7XG4gIH1cblxuICBjb25zdCB1cHBlckNhc2VkQ29kZVBvaW50ID0gY29kZVBvaW50T2Yoa2V5LnRvVXBwZXJDYXNlKCkpO1xuICByZXR1cm4ge1xuICAgIGNvZGU6IHJlc29sdmVLZXlDb2RlKHVwcGVyQ2FzZWRDb2RlUG9pbnQpLFxuICAgIHRleHQ6IGtleSxcbiAgICB3aW5kb3dzVmlydHVhbEtleUNvZGU6IHVwcGVyQ2FzZWRDb2RlUG9pbnRcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgcGh5c2ljYWwgYGNvZGVgIGZvciBhIHByaW50YWJsZSBjaGFyYWN0ZXIuXG4gKlxuICogQ2hhcmFjdGVycyBvdXRzaWRlIHRoZSBBU0NJSSBsZXR0ZXIvZGlnaXQgcm93cyBoYXZlIG5vIHN0YWJsZSBwaHlzaWNhbCBrZXksIHNvIHRoZXkgZ2V0IGFuIGVtcHR5XG4gKiBgY29kZWAgXHUyMDE0IHRoZSBgdGV4dGAgc3RpbGwgY2FycmllcyB0aGVtLCB3aGljaCBpcyB3aGF0IGFuIGVkaXRvciByZWFkcy5cbiAqXG4gKiBAcGFyYW0gdXBwZXJDYXNlZENvZGVQb2ludCAtIFRoZSBjaGFyYWN0ZXIncyB1cHBlci1jYXNlZCBjb2RlIHBvaW50LlxuICogQHJldHVybnMgVGhlIENEUCBgY29kZWAsIG9yIGFuIGVtcHR5IHN0cmluZyB3aGVuIHRoZXJlIGlzIG5vIHN0YWJsZSBvbmUuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVLZXlDb2RlKHVwcGVyQ2FzZWRDb2RlUG9pbnQ6IG51bWJlcik6IHN0cmluZyB7XG4gIGlmICh1cHBlckNhc2VkQ29kZVBvaW50ID49IFVQUEVSQ0FTRV9BX0NPREVfUE9JTlQgJiYgdXBwZXJDYXNlZENvZGVQb2ludCA8PSBVUFBFUkNBU0VfWl9DT0RFX1BPSU5UKSB7XG4gICAgcmV0dXJuIGBLZXkke1N0cmluZy5mcm9tQ29kZVBvaW50KHVwcGVyQ2FzZWRDb2RlUG9pbnQpfWA7XG4gIH1cblxuICBpZiAodXBwZXJDYXNlZENvZGVQb2ludCA+PSBESUdJVF9aRVJPX0NPREVfUE9JTlQgJiYgdXBwZXJDYXNlZENvZGVQb2ludCA8PSBESUdJVF9OSU5FX0NPREVfUE9JTlQpIHtcbiAgICByZXR1cm4gYERpZ2l0JHtTdHJpbmcuZnJvbUNvZGVQb2ludCh1cHBlckNhc2VkQ29kZVBvaW50KX1gO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgY29tbWFuZCBzZXF1ZW5jZSBmb3IgYSBrZXkgcHJlc3MuXG4gKlxuICogTWlycm9ycyB0aGUgZGVza3RvcCB0d2luJ3MgdHJ1c3RlZCBga2V5RG93bmAgXHUyMTkyIGBjaGFyYCBcdTIxOTIgYGtleVVwYCBpbiBDRFAncyBzcGVsbGluZzogYHJhd0tleURvd25gIGZpcmVzXG4gKiBga2V5ZG93bmAgYWxvbmUsIGBjaGFyYCBmaXJlcyBga2V5cHJlc3NgIC8gYGJlZm9yZWlucHV0YCAvIGBpbnB1dGAsIGBrZXlVcGAgZmlyZXMgYGtleXVwYC4gQSBrZXkgdGhhdFxuICogcHJvZHVjZXMgbm8gdGV4dCAoYEVzY2FwZWApIHNraXBzIHRoZSBgY2hhcmAsIGV4YWN0bHkgYXMgYSByZWFsIG9uZSBkb2VzLlxuICpcbiAqIEBwYXJhbSByZXF1ZXN0IC0gVGhlIGtleSByZXF1ZXN0LlxuICogQHJldHVybnMgVGhlIGNvbW1hbmRzIHRvIHNlbmQsIGluIG9yZGVyLlxuICovXG5mdW5jdGlvbiB0b0tleUNvbW1hbmRzKHJlcXVlc3Q6IE1vYmlsZUtleUlucHV0UmVxdWVzdCk6IENkcElucHV0Q29tbWFuZFtdIHtcbiAgY29uc3QgeyBjb2RlLCB0ZXh0LCB3aW5kb3dzVmlydHVhbEtleUNvZGUgfSA9IHJlc29sdmVLZXkocmVxdWVzdC5rZXkpO1xuICBjb25zdCBtb2RpZmllcnMgPSB0b0NkcE1vZGlmaWVycyhyZXF1ZXN0Lm1vZGlmaWVycyk7XG4gIGNvbnN0IGJhc2UgPSB7IGNvZGUsIGtleTogcmVxdWVzdC5rZXksIG1vZGlmaWVycywgd2luZG93c1ZpcnR1YWxLZXlDb2RlIH07XG5cbiAgY29uc3QgY29tbWFuZHM6IENkcElucHV0Q29tbWFuZFtdID0gW1xuICAgIHsgbWV0aG9kOiAnSW5wdXQuZGlzcGF0Y2hLZXlFdmVudCcsIHBhcmFtczogeyAuLi5iYXNlLCB0eXBlOiAncmF3S2V5RG93bicgfSB9XG4gIF07XG5cbiAgaWYgKHRleHQgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbW1hbmRzLnB1c2goeyBtZXRob2Q6ICdJbnB1dC5kaXNwYXRjaEtleUV2ZW50JywgcGFyYW1zOiB7IC4uLmJhc2UsIHRleHQsIHR5cGU6ICdjaGFyJyB9IH0pO1xuICB9XG5cbiAgY29tbWFuZHMucHVzaCh7IG1ldGhvZDogJ0lucHV0LmRpc3BhdGNoS2V5RXZlbnQnLCBwYXJhbXM6IHsgLi4uYmFzZSwgdHlwZTogJ2tleVVwJyB9IH0pO1xuXG4gIHJldHVybiBjb21tYW5kcztcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIGNvbW1hbmQgc2VxdWVuY2UgZm9yIGEgdGFwIG9yIGEgbG9uZy1wcmVzcy5cbiAqXG4gKiAqKlRoZSB0d28gZ2VzdHVyZXMgdGFrZSBkaWZmZXJlbnQgQ0RQIHJvdXRlcywgYW5kIHRoYXQgYXN5bW1ldHJ5IGlzIHRoZSB3aG9sZSBwb2ludC4qKlxuICpcbiAqIEEgdGFwIGlzIGEgdHJ1c3RlZCB0b3VjaCBwYWlyLCB3aGljaCBpcyBhbGwgQ2hyb21pdW0gbmVlZHMgXHUyMDE0IGl0IHN5bnRoZXNpemVzIGBwb2ludGVyZG93bmAgL1xuICogYHRvdWNoc3RhcnRgIC8gYHBvaW50ZXJ1cGAgLyBgdG91Y2hlbmRgIC8gYGNsaWNrYCBmcm9tIGl0LCBldmVyeSBvbmUgYGlzVHJ1c3RlZGAuIFRoZSByZWxlYXNlIGNhcnJpZXNcbiAqIGFuIGVtcHR5IGB0b3VjaFBvaW50c2AgbGlzdCwgd2hpY2ggaXMgQ0RQJ3Mgc3BlbGxpbmcgZm9yIFwiYWxsIGZpbmdlcnMgbGlmdGVkXCIuXG4gKlxuICogQSBsb25nLXByZXNzIGNhbm5vdCBiZSB0aGF0IHNhbWUgcGFpciBoZWxkIGFwYXJ0IGJ5IGEgZHdlbGwsIGJlY2F1c2UgYElucHV0LmRpc3BhdGNoVG91Y2hFdmVudGAgaW5qZWN0c1xuICogYSBgV2ViVG91Y2hFdmVudGAgKipwYXN0KiogQW5kcm9pZCdzIGdlc3R1cmUgcmVjb2duaXplcjogbm8gcmVjb2duaXplciBzZWVzIHRoZSBob2xkLCBzbyBubyBsb25nLXByZXNzXG4gKiBnZXN0dXJlIGlzIGV2ZXIgcHJvZHVjZWQgYW5kIHRoZSBwYWlyIGlzIGNsYXNzaWZpZWQgYXMgYSB0YXAgaG93ZXZlciBsb25nIHRoZSBkd2VsbCBpcy5cbiAqIGBJbnB1dC5zeW50aGVzaXplVGFwR2VzdHVyZWAgaW5zdGVhZCBnb2VzIHRocm91Z2ggQ2hyb21pdW0ncyBzeW50aGV0aWMtZ2VzdHVyZSBjb250cm9sbGVyLCB3aGljaCBidWlsZHNcbiAqIHJlYWwgYE1vdGlvbkV2ZW50YHMgYW5kIGZlZWRzIHRoZW0gdG8gdGhlIHBsYXRmb3JtIHJlY29nbml6ZXIgXHUyMDE0IHRoZSBzdGVwIHRoZSBkaXNwYXRjaCByb3V0ZSBza2lwcy5cbiAqXG4gKiBNZWFzdXJlZCBvbiBhIGxpdmUgZW11bGF0b3IgKDIwMjYtMDktMDgpOiB0aGUgZGlzcGF0Y2ggcGFpciB3aXRoIGEgNjAwbXMgZHdlbGwsIGFpbWVkIGF0IGEgKipyZWFsKipcbiAqIGAubmF2LWZpbGUtdGl0bGVgIGluIHRoZSBmaWxlIGV4cGxvcmVyLCBwcm9kdWNlZCBgcG9pbnRlcmRvd25gIC8gYHRvdWNoc3RhcnRgIC8gYHRvdWNoZW5kYCAvIGBjbGlja2AgYW5kXG4gKiAqKm9wZW5lZCB0aGUgbm90ZSoqIFx1MjAxNCBhIHRhcC4gTm8gYGNvbnRleHRtZW51YCwgYW5kIG5vIE9ic2lkaWFuIG1lbnUuXG4gKlxuICogQHBhcmFtIHJlcXVlc3QgLSBUaGUgcG9pbnRlciByZXF1ZXN0LlxuICogQHJldHVybnMgVGhlIGNvbW1hbmRzIHRvIHNlbmQsIGluIG9yZGVyLlxuICovXG5mdW5jdGlvbiB0b1BvaW50ZXJDb21tYW5kcyhyZXF1ZXN0OiBNb2JpbGVQb2ludGVySW5wdXRSZXF1ZXN0KTogQ2RwSW5wdXRDb21tYW5kW10ge1xuICBjb25zdCBtb2RpZmllcnMgPSB0b0NkcE1vZGlmaWVycyhyZXF1ZXN0Lm1vZGlmaWVycyk7XG5cbiAgaWYgKHJlcXVlc3Qua2luZCA9PT0gJ2xvbmdQcmVzcycpIHtcbiAgICAvLyBgc3ludGhlc2l6ZVRhcEdlc3R1cmVgIHRha2VzIG5vIG1vZGlmaWVyIGJpdG1hc2sgXHUyMDE0IENEUCdzIGdlc3R1cmUgQVBJIGhhcyBubyBwYXJhbWV0ZXIgZm9yIG9uZSBcdTIwMTQgYW5kXG4gICAgLy8gQSB0b3VjaCBzY3JlZW4gaGFzIG5vIG1vZGlmaWVyIGtleXMgdG8gaG9sZCBkdXJpbmcgYSBwcmVzcywgc28gdGhlcmUgaXMgbm90aGluZyB0byBjYXJyeSBoZXJlLlxuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIG1ldGhvZDogJ0lucHV0LnN5bnRoZXNpemVUYXBHZXN0dXJlJyxcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgZHVyYXRpb246IExPTkdfUFJFU1NfRFdFTExfSU5fTUlMTElTRUNPTkRTLFxuICAgICAgICAgIGdlc3R1cmVTb3VyY2VUeXBlOiAndG91Y2gnLFxuICAgICAgICAgIHg6IHJlcXVlc3QueCxcbiAgICAgICAgICB5OiByZXF1ZXN0LnlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIF07XG4gIH1cblxuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIG1ldGhvZDogJ0lucHV0LmRpc3BhdGNoVG91Y2hFdmVudCcsXG4gICAgICBwYXJhbXM6IHsgbW9kaWZpZXJzLCB0b3VjaFBvaW50czogW3sgeDogcmVxdWVzdC54LCB5OiByZXF1ZXN0LnkgfV0sIHR5cGU6ICd0b3VjaFN0YXJ0JyB9XG4gICAgfSxcbiAgICB7XG4gICAgICBtZXRob2Q6ICdJbnB1dC5kaXNwYXRjaFRvdWNoRXZlbnQnLFxuICAgICAgcGFyYW1zOiB7IG1vZGlmaWVycywgdG91Y2hQb2ludHM6IFtdLCB0eXBlOiAndG91Y2hFbmQnIH1cbiAgICB9XG4gIF07XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFzQk8sTUFBTSw0QkFBNEI7QUFTbEMsTUFBTSx1Q0FBdUM7QUE4SHBELE1BQU0sbUNBQW1DO0FBRXpDLE1BQU0sZUFBZTtBQUNyQixNQUFNLG1CQUFtQjtBQUN6QixNQUFNLHVCQUF1QjtBQUM3QixNQUFNLG9CQUFvQjtBQUMxQixNQUFNLHFCQUFxQjtBQU8zQixNQUFNLDJCQUEyQixvQkFBSSxJQUFvQjtBQUFBLEVBQ3ZELENBQUMsT0FBTyxnQkFBZ0I7QUFBQSxFQUN4QixDQUFDLFdBQVcsb0JBQW9CO0FBQUEsRUFDaEMsQ0FBQyxRQUFRLGlCQUFpQjtBQUFBLEVBQzFCLENBQUMsU0FBUyxrQkFBa0I7QUFDOUIsQ0FBQztBQUVELE1BQU0scUJBQXFCO0FBQzNCLE1BQU0sZUFBZTtBQUNyQixNQUFNLGlCQUFpQjtBQUN2QixNQUFNLGtCQUFrQjtBQUN4QixNQUFNLHNCQUFzQjtBQUM1QixNQUFNLG9CQUFvQjtBQUMxQixNQUFNLHVCQUF1QjtBQUM3QixNQUFNLHNCQUFzQjtBQUM1QixNQUFNLGtCQUFrQjtBQVN4QixNQUFNLGFBQWEsb0JBQUksSUFBc0I7QUFBQSxFQUMzQyxDQUFDLGFBQWEsRUFBRSxNQUFNLGFBQWEsdUJBQXVCLG9CQUFvQixDQUFDO0FBQUEsRUFDL0UsQ0FBQyxhQUFhLEVBQUUsTUFBTSxhQUFhLHVCQUF1QixvQkFBb0IsQ0FBQztBQUFBLEVBQy9FLENBQUMsY0FBYyxFQUFFLE1BQU0sY0FBYyx1QkFBdUIscUJBQXFCLENBQUM7QUFBQSxFQUNsRixDQUFDLFdBQVcsRUFBRSxNQUFNLFdBQVcsdUJBQXVCLGtCQUFrQixDQUFDO0FBQUEsRUFDekUsQ0FBQyxhQUFhLEVBQUUsTUFBTSxhQUFhLHVCQUF1QixtQkFBbUIsQ0FBQztBQUFBLEVBQzlFLENBQUMsVUFBVSxFQUFFLE1BQU0sVUFBVSx1QkFBdUIsZ0JBQWdCLENBQUM7QUFBQSxFQUNyRSxDQUFDLFNBQVMsRUFBRSxNQUFNLFNBQVMsTUFBTSxNQUFNLHVCQUF1QixlQUFlLENBQUM7QUFBQSxFQUM5RSxDQUFDLFVBQVUsRUFBRSxNQUFNLFVBQVUsdUJBQXVCLGdCQUFnQixDQUFDO0FBQUEsRUFDckUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxPQUFPLE1BQU0sS0FBTSx1QkFBdUIsYUFBYSxDQUFDO0FBQzFFLENBQUM7QUFFRCxNQUFNLHlCQUF5QjtBQUMvQixNQUFNLHdCQUF3QixZQUFZLEdBQUc7QUFDN0MsTUFBTSx3QkFBd0IsWUFBWSxHQUFHO0FBQzdDLE1BQU0seUJBQXlCLFlBQVksR0FBRztBQUM5QyxNQUFNLHlCQUF5QixZQUFZLEdBQUc7QUEyQnZDLFNBQVMsMEJBQTBCLElBQW9CO0FBQzVELFNBQU8scURBQXFELEtBQUssVUFBVSxFQUFFLENBQUM7QUFDaEY7QUFhTyxTQUFTLDRCQUE0QixJQUFZLGNBQStCO0FBQ3JGLFNBQU8sdURBQXVELEtBQUssVUFBVSxFQUFFLENBQUMsS0FBSyxLQUFLLFVBQVUsZ0JBQWdCLElBQUksQ0FBQztBQUMzSDtBQWNPLFNBQVMsdUJBQXVCLFFBQTBCO0FBQy9ELE1BQUksT0FBTyxXQUFXLFlBQVksV0FBVyxNQUFNO0FBQ2pELFdBQU87QUFBQSxFQUNUO0FBRUEsU0FBUSxPQUEwQixRQUFRLFVBQVU7QUFDdEQ7QUFjTyxTQUFTLFlBQVksTUFBc0I7QUFDaEQsUUFBTSxZQUFZLEtBQUssWUFBWSxzQkFBc0I7QUFDekQsTUFBSSxjQUFjLFFBQVc7QUFDM0IsVUFBTSxJQUFJLE1BQU0sdUNBQXVDO0FBQUEsRUFDekQ7QUFFQSxTQUFPO0FBQ1Q7QUFRTyxTQUFTLG1CQUFtQixTQUFnRDtBQUNqRixNQUFJLFFBQVEsU0FBUyxPQUFPO0FBQzFCLFdBQU8sY0FBYyxPQUFPO0FBQUEsRUFDOUI7QUFFQSxTQUFPLGtCQUFrQixPQUFPO0FBQ2xDO0FBWU8sU0FBUyxlQUFlLFdBQXNDO0FBR25FLFFBQU0sT0FBTyxvQkFBSSxJQUFZO0FBQzdCLGFBQVcsWUFBWSxXQUFXO0FBQ2hDLFVBQU0sTUFBTSx5QkFBeUIsSUFBSSxRQUFRO0FBQ2pELFFBQUksUUFBUSxRQUFXO0FBQ3JCLFdBQUssSUFBSSxHQUFHO0FBQUEsSUFDZDtBQUFBLEVBQ0Y7QUFFQSxNQUFJLFVBQVU7QUFDZCxhQUFXLE9BQU8sTUFBTTtBQUN0QixlQUFXO0FBQUEsRUFDYjtBQUVBLFNBQU87QUFDVDtBQVFBLFNBQVMsV0FBVyxLQUF1QjtBQUN6QyxRQUFNLFdBQVcsV0FBVyxJQUFJLEdBQUc7QUFDbkMsTUFBSSxVQUFVO0FBQ1osV0FBTztBQUFBLEVBQ1Q7QUFJQSxRQUFNLFlBQVksSUFBSSxZQUFZLHNCQUFzQjtBQUN4RCxNQUFJLGNBQWMsVUFBYSxPQUFPLGNBQWMsU0FBUyxNQUFNLEtBQUs7QUFDdEUsVUFBTSxJQUFJO0FBQUEsTUFDUixvREFBb0QsS0FBSyxVQUFVLEdBQUcsQ0FBQyx3Q0FDN0IsQ0FBQyxHQUFHLFdBQVcsS0FBSyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUM7QUFBQSxJQUM3RTtBQUFBLEVBQ0Y7QUFFQSxRQUFNLHNCQUFzQixZQUFZLElBQUksWUFBWSxDQUFDO0FBQ3pELFNBQU87QUFBQSxJQUNMLE1BQU0sZUFBZSxtQkFBbUI7QUFBQSxJQUN4QyxNQUFNO0FBQUEsSUFDTix1QkFBdUI7QUFBQSxFQUN6QjtBQUNGO0FBV0EsU0FBUyxlQUFlLHFCQUFxQztBQUMzRCxNQUFJLHVCQUF1QiwwQkFBMEIsdUJBQXVCLHdCQUF3QjtBQUNsRyxXQUFPLE1BQU0sT0FBTyxjQUFjLG1CQUFtQixDQUFDO0FBQUEsRUFDeEQ7QUFFQSxNQUFJLHVCQUF1Qix5QkFBeUIsdUJBQXVCLHVCQUF1QjtBQUNoRyxXQUFPLFFBQVEsT0FBTyxjQUFjLG1CQUFtQixDQUFDO0FBQUEsRUFDMUQ7QUFFQSxTQUFPO0FBQ1Q7QUFZQSxTQUFTLGNBQWMsU0FBbUQ7QUFDeEUsUUFBTSxFQUFFLE1BQU0sTUFBTSxzQkFBc0IsSUFBSSxXQUFXLFFBQVEsR0FBRztBQUNwRSxRQUFNLFlBQVksZUFBZSxRQUFRLFNBQVM7QUFDbEQsUUFBTSxPQUFPLEVBQUUsTUFBTSxLQUFLLFFBQVEsS0FBSyxXQUFXLHNCQUFzQjtBQUV4RSxRQUFNLFdBQThCO0FBQUEsSUFDbEMsRUFBRSxRQUFRLDBCQUEwQixRQUFRLEVBQUUsR0FBRyxNQUFNLE1BQU0sYUFBYSxFQUFFO0FBQUEsRUFDOUU7QUFFQSxNQUFJLFNBQVMsUUFBVztBQUN0QixhQUFTLEtBQUssRUFBRSxRQUFRLDBCQUEwQixRQUFRLEVBQUUsR0FBRyxNQUFNLE1BQU0sTUFBTSxPQUFPLEVBQUUsQ0FBQztBQUFBLEVBQzdGO0FBRUEsV0FBUyxLQUFLLEVBQUUsUUFBUSwwQkFBMEIsUUFBUSxFQUFFLEdBQUcsTUFBTSxNQUFNLFFBQVEsRUFBRSxDQUFDO0FBRXRGLFNBQU87QUFDVDtBQXdCQSxTQUFTLGtCQUFrQixTQUF1RDtBQUNoRixRQUFNLFlBQVksZUFBZSxRQUFRLFNBQVM7QUFFbEQsTUFBSSxRQUFRLFNBQVMsYUFBYTtBQUdoQyxXQUFPO0FBQUEsTUFDTDtBQUFBLFFBQ0UsUUFBUTtBQUFBLFFBQ1IsUUFBUTtBQUFBLFVBQ04sVUFBVTtBQUFBLFVBQ1YsbUJBQW1CO0FBQUEsVUFDbkIsR0FBRyxRQUFRO0FBQUEsVUFDWCxHQUFHLFFBQVE7QUFBQSxRQUNiO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUEsU0FBTztBQUFBLElBQ0w7QUFBQSxNQUNFLFFBQVE7QUFBQSxNQUNSLFFBQVEsRUFBRSxXQUFXLGFBQWEsQ0FBQyxFQUFFLEdBQUcsUUFBUSxHQUFHLEdBQUcsUUFBUSxFQUFFLENBQUMsR0FBRyxNQUFNLGFBQWE7QUFBQSxJQUN6RjtBQUFBLElBQ0E7QUFBQSxNQUNFLFFBQVE7QUFBQSxNQUNSLFFBQVEsRUFBRSxXQUFXLGFBQWEsQ0FBQyxHQUFHLE1BQU0sV0FBVztBQUFBLElBQ3pEO0FBQUEsRUFDRjtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
|