obsidian-integration-testing 3.0.4 → 3.0.5
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/library.cjs +1 -1
- package/dist/lib/cjs/transport-factory.cjs +5 -5
- package/dist/lib/esm/library.mjs +1 -1
- package/dist/lib/esm/transport-factory.mjs +5 -5
- package/dist/obsidian-integration-testing-3.0.5.tgz +0 -0
- package/package.json +1 -1
- package/dist/obsidian-integration-testing-3.0.4.tgz +0 -0
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" : "3.0.
|
|
24
|
+
const LIBRARY_VERSION = false ? "dev" : "3.0.4";
|
|
25
25
|
// Annotate the CommonJS export names for ESM import in node:
|
|
26
26
|
0 && (module.exports = {
|
|
27
27
|
LIBRARY_VERSION
|
|
@@ -45,8 +45,8 @@ var import_transport_desktop_cli = require("./transport-desktop-cli.cjs");
|
|
|
45
45
|
const APP_PACKAGE = "md.obsidian";
|
|
46
46
|
const APP_ACTIVITY = `${APP_PACKAGE}.MainActivity`;
|
|
47
47
|
const ADB_DEVICE_CHECK_TIMEOUT_IN_MILLISECONDS = 5e3;
|
|
48
|
-
const APPIUM_CONNECTION_RETRY_COUNT =
|
|
49
|
-
const APPIUM_CONNECTION_RETRY_TIMEOUT_IN_MILLISECONDS =
|
|
48
|
+
const APPIUM_CONNECTION_RETRY_COUNT = 3;
|
|
49
|
+
const APPIUM_CONNECTION_RETRY_TIMEOUT_IN_MILLISECONDS = 18e4;
|
|
50
50
|
const APPIUM_PREFLIGHT_TIMEOUT_IN_MILLISECONDS = 5e3;
|
|
51
51
|
const APPIUM_START_POLL_INTERVAL_IN_MILLISECONDS = 500;
|
|
52
52
|
const APPIUM_START_TIMEOUT_IN_MILLISECONDS = 6e4;
|
|
@@ -57,8 +57,8 @@ const EMULATOR_BOOT_POLL_INTERVAL_IN_MILLISECONDS = 2e3;
|
|
|
57
57
|
const EMULATOR_BOOT_TIMEOUT_IN_MILLISECONDS = 12e4;
|
|
58
58
|
const KEYCODE_MENU = 82;
|
|
59
59
|
const KEYCODE_WAKEUP = 224;
|
|
60
|
-
const SERVER_INSTALL_TIMEOUT_IN_MILLISECONDS =
|
|
61
|
-
const SERVER_LAUNCH_TIMEOUT_IN_MILLISECONDS =
|
|
60
|
+
const SERVER_INSTALL_TIMEOUT_IN_MILLISECONDS = 12e4;
|
|
61
|
+
const SERVER_LAUNCH_TIMEOUT_IN_MILLISECONDS = 12e4;
|
|
62
62
|
let cachedTransport;
|
|
63
63
|
class AppiumTransportFactory {
|
|
64
64
|
type;
|
|
@@ -413,4 +413,4 @@ function killProcessTree(child) {
|
|
|
413
413
|
createTransportFromOptions,
|
|
414
414
|
getOrCreateTransport
|
|
415
415
|
});
|
|
416
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3RyYW5zcG9ydC1mYWN0b3J5LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogRmFjdG9yeSBmb3IgY3JlYXRpbmcgdHJhbnNwb3J0IGluc3RhbmNlcyBmcm9tIHtAbGluayBPYnNpZGlhblRyYW5zcG9ydE9wdGlvbnN9LlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIGZhY3RvcnkgY292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB0eXBlIHsgQ2hpbGRQcm9jZXNzIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcblxuaW1wb3J0IHtcbiAgZXhlY0ZpbGUsXG4gIGV4ZWNGaWxlU3luYyxcbiAgc3Bhd25cbn0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCBodHRwIGZyb20gJ25vZGU6aHR0cCc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgeyByZW1vdGUgfSBmcm9tICd3ZWJkcml2ZXJpbyc7XG5cbmltcG9ydCB0eXBlIHtcbiAgT2JzaWRpYW5BbmRyb2lkQXBwaXVtVHJhbnNwb3J0T3B0aW9ucyxcbiAgT2JzaWRpYW5UcmFuc3BvcnRPcHRpb25zXG59IGZyb20gJy4vdHJhbnNwb3J0LW9wdGlvbnMuY2pzJztcbmltcG9ydCB0eXBlIHsgT2JzaWRpYW5UcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC5janMnO1xuXG5pbXBvcnQgeyBidWlsZEVtdWxhdG9yQXJncyB9IGZyb20gJy4vZW11bGF0b3ItYXJncy5janMnO1xuaW1wb3J0IHsgbG9nIH0gZnJvbSAnLi9sb2cuY2pzJztcbmltcG9ydCB7IEFwcGl1bVRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LWFwcGl1bS5janMnO1xuaW1wb3J0IHsgRGVza3RvcENkcFRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LWRlc2t0b3AtY2RwLmNqcyc7XG5pbXBvcnQgeyBEZXNrdG9wQ2xpVHJhbnNwb3J0IH0gZnJvbSAnLi90cmFuc3BvcnQtZGVza3RvcC1jbGkuY2pzJztcblxuY29uc3QgQVBQX1BBQ0tBR0UgPSAnbWQub2JzaWRpYW4nO1xuY29uc3QgQVBQX0FDVElWSVRZID0gYCR7QVBQX1BBQ0tBR0V9Lk1haW5BY3Rpdml0eWA7XG5jb25zdCBBREJfREVWSUNFX0NIRUNLX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gNTAwMDtcbmNvbnN0IEFQUElVTV9DT05ORUNUSU9OX1JFVFJZX0NPVU5UID0gMTtcbmNvbnN0IEFQUElVTV9DT05ORUNUSU9OX1JFVFJZX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gNjAwMDA7XG5jb25zdCBBUFBJVU1fUFJFRkxJR0hUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gNTAwMDtcbmNvbnN0IEFQUElVTV9TVEFSVF9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyA9IDUwMDtcbmNvbnN0IEFQUElVTV9TVEFSVF9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDYwMDAwO1xuY29uc3QgQ0RQX0RFRkFVTFRfUE9SVCA9IDgzMTU7XG5jb25zdCBDT01NQU5EX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gMzAwO1xuY29uc3QgREVGQVVMVF9UUkFOU1BPUlRfVFlQRSA9ICdvYnNpZGlhbi1jbGknO1xuY29uc3QgRU1VTEFUT1JfQk9PVF9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyA9IDIwMDA7XG5jb25zdCBFTVVMQVRPUl9CT09UX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gMTIwMDAwO1xuY29uc3QgS0VZQ09ERV9NRU5VID0gODI7XG5jb25zdCBLRVlDT0RFX1dBS0VVUCA9IDIyNDtcbmNvbnN0IFNFUlZFUl9JTlNUQUxMX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gNjAwMDA7XG5jb25zdCBTRVJWRVJfTEFVTkNIX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gNjAwMDA7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIEFwcGl1bVRyYW5zcG9ydEZhY3Rvcnkuc3RhcnRBcHBpdW1BbmRFbXVsYXRvcn0uXG4gKi9cbmludGVyZmFjZSBTdGFydEFwcGl1bUFuZEVtdWxhdG9yUGFyYW1zIHtcbiAgLyoqIFRoZSBBcHBpdW0gc2VydmVyIFVSTC4gKi9cbiAgYXBwaXVtVXJsOiBVUkw7XG5cbiAgLyoqIEFWRCBuYW1lIHRvIGF1dG8tc3RhcnQgaWYgdGhlIGRldmljZSBpcyBub3QgY29ubmVjdGVkLiAqL1xuICBhdmROYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKiBEZXZpY2UgVURJRC4gKi9cbiAgZGV2aWNlSWQ6IHN0cmluZztcblxuICAvKiogVGhlIEFwcGl1bSBzZXJ2ZXIgcG9ydC4gKi9cbiAgcG9ydDogbnVtYmVyO1xuXG4gIC8qKiBXaGV0aGVyIEFwcGl1bSBhdXRvLXN0YXJ0IGlzIGFsbG93ZWQuICovXG4gIHNob3VsZEF1dG9TdGFydEFwcGl1bT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59XG5cbmxldCBjYWNoZWRUcmFuc3BvcnQ6IE9ic2lkaWFuVHJhbnNwb3J0IHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIEVuY2Fwc3VsYXRlcyBhbGwgQXBwaXVtIHRyYW5zcG9ydCBjcmVhdGlvbiBsb2dpYywgaW5jbHVkaW5nIEFwcGl1bSBzZXJ2ZXJcbiAqIHN0YXJ0dXAsIGVtdWxhdG9yIG1hbmFnZW1lbnQsIGFuZCBXZWJEcml2ZXJJTyBzZXNzaW9uIGVzdGFibGlzaG1lbnQuXG4gKlxuICogVXNpbmcgYSBjbGFzcyBhdm9pZHMgdGhyZWFkaW5nIHRoZSB0cmFuc3BvcnQgYHR5cGVgIGxhYmVsIHRocm91Z2ggZXZlcnlcbiAqIGhlbHBlciBmdW5jdGlvbiBcdTIwMTQgYHRoaXMubG9nKClgIGF1dG9tYXRpY2FsbHkgcHJlZml4ZXMgaXQuXG4gKi9cbmNsYXNzIEFwcGl1bVRyYW5zcG9ydEZhY3Rvcnkge1xuICBwcml2YXRlIHJlYWRvbmx5IHR5cGU6IHN0cmluZztcblxuICBwdWJsaWMgY29uc3RydWN0b3IodHlwZTogc3RyaW5nKSB7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIEFwcGl1bSB0cmFuc3BvcnQgYnkgZXN0YWJsaXNoaW5nIGEgV2ViRHJpdmVySU8gc2Vzc2lvbi5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBbmRyb2lkIEFwcGl1bSB0cmFuc3BvcnQgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQSBjb25maWd1cmVkIEFwcGl1bSB0cmFuc3BvcnQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY3JlYXRlKG9wdGlvbnM6IE9ic2lkaWFuQW5kcm9pZEFwcGl1bVRyYW5zcG9ydE9wdGlvbnMpOiBQcm9taXNlPE9ic2lkaWFuVHJhbnNwb3J0PiB7XG4gICAgdGhpcy5sb2coYENyZWF0aW5nIEFwcGl1bVRyYW5zcG9ydCAodXJsPSR7b3B0aW9ucy5hcHBpdW1Vcmx9LCBkZXZpY2U9JHtvcHRpb25zLmRldmljZUlkfSlgKTtcblxuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwob3B0aW9ucy5hcHBpdW1VcmwpO1xuXG4gICAgY29uc3QgcG9ydCA9IE51bWJlcih1cmwucG9ydCk7XG4gICAgaWYgKGlzTmFOKHBvcnQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcG9ydCBpbiBhcHBpdW1Vcmw6ICR7dXJsLnBvcnR9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgYXBwSWQgPSBvcHRpb25zLmFwcElkID8/IEFQUF9QQUNLQUdFO1xuXG4gICAgbGV0IGFwcGl1bVByb2Nlc3M6IENoaWxkUHJvY2VzcyB8IHVuZGVmaW5lZDtcbiAgICBsZXQgZW11bGF0b3JQcm9jZXNzOiBDaGlsZFByb2Nlc3MgfCB1bmRlZmluZWQ7XG5cbiAgICB0cnkge1xuICAgICAgW2FwcGl1bVByb2Nlc3MsIGVtdWxhdG9yUHJvY2Vzc10gPSBhd2FpdCB0aGlzLnN0YXJ0QXBwaXVtQW5kRW11bGF0b3Ioe1xuICAgICAgICBhcHBpdW1Vcmw6IHVybCxcbiAgICAgICAgYXZkTmFtZTogb3B0aW9ucy5hdmROYW1lLFxuICAgICAgICBkZXZpY2VJZDogb3B0aW9ucy5kZXZpY2VJZCxcbiAgICAgICAgcG9ydCxcbiAgICAgICAgc2hvdWxkQXV0b1N0YXJ0QXBwaXVtOiBvcHRpb25zLnNob3VsZEF1dG9TdGFydEFwcGl1bVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMubG9nKFxuICAgICAgICBgQ29ubmVjdGluZyB0byBBcHBpdW0gKGRldmljZT0ke29wdGlvbnMuZGV2aWNlSWR9LCBhcHA9JHthcHBJZH0sIHJldHJ5VGltZW91dDogJHtTdHJpbmcoQVBQSVVNX0NPTk5FQ1RJT05fUkVUUllfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpfW1zLCByZXRyaWVzOiAke1xuICAgICAgICAgIFN0cmluZyhBUFBJVU1fQ09OTkVDVElPTl9SRVRSWV9DT1VOVClcbiAgICAgICAgfSkuLi5gXG4gICAgICApO1xuICAgICAgY29uc3QgYnJvd3NlciA9IGF3YWl0IHJlbW90ZSh7XG4gICAgICAgIGNhcGFiaWxpdGllczoge1xuICAgICAgICAgICdhcHBpdW06YXBwQWN0aXZpdHknOiBBUFBfQUNUSVZJVFksXG4gICAgICAgICAgJ2FwcGl1bTphcHBQYWNrYWdlJzogYXBwSWQsXG4gICAgICAgICAgJ2FwcGl1bTphdXRvR3JhbnRQZXJtaXNzaW9ucyc6IHRydWUsXG4gICAgICAgICAgJ2FwcGl1bTphdXRvbWF0aW9uTmFtZSc6ICdVaUF1dG9tYXRvcjInLFxuICAgICAgICAgICdhcHBpdW06bmV3Q29tbWFuZFRpbWVvdXQnOiBDT01NQU5EX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTLFxuICAgICAgICAgICdhcHBpdW06bm9SZXNldCc6IHRydWUsXG4gICAgICAgICAgJ2FwcGl1bTpzZXR0aW5ncyc6IHtcbiAgICAgICAgICAgICdhcHBpdW06Y2hyb21lZHJpdmVyQXV0b2Rvd25sb2FkJzogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgJ2FwcGl1bTp1ZGlkJzogb3B0aW9ucy5kZXZpY2VJZCxcbiAgICAgICAgICAnYXBwaXVtOnVpYXV0b21hdG9yMlNlcnZlckluc3RhbGxUaW1lb3V0JzogU0VSVkVSX0lOU1RBTExfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMsXG4gICAgICAgICAgJ2FwcGl1bTp1aWF1dG9tYXRvcjJTZXJ2ZXJMYXVuY2hUaW1lb3V0JzogU0VSVkVSX0xBVU5DSF9USU1FT1VUX0lOX01JTExJU0VDT05EUyxcbiAgICAgICAgICAncGxhdGZvcm1OYW1lJzogJ0FuZHJvaWQnXG4gICAgICAgIH0sXG4gICAgICAgIGNvbm5lY3Rpb25SZXRyeUNvdW50OiBBUFBJVU1fQ09OTkVDVElPTl9SRVRSWV9DT1VOVCxcbiAgICAgICAgY29ubmVjdGlvblJldHJ5VGltZW91dDogQVBQSVVNX0NPTk5FQ1RJT05fUkVUUllfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMsXG4gICAgICAgIGhvc3RuYW1lOiB1cmwuaG9zdG5hbWUsXG4gICAgICAgIGxvZ0xldmVsOiAnd2FybicsXG4gICAgICAgIHBhdGg6IHVybC5wYXRobmFtZSxcbiAgICAgICAgcG9ydFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMubG9nKCdBcHBpdW0gc2Vzc2lvbiBlc3RhYmxpc2hlZC4nKTtcbiAgICAgIGNvbnN0IGFwcGl1bVRyYW5zcG9ydCA9IG5ldyBBcHBpdW1UcmFuc3BvcnQoe1xuICAgICAgICBhcHBJZCxcbiAgICAgICAgYnJvd3NlcixcbiAgICAgICAgZGV2aWNlSWQ6IG9wdGlvbnMuZGV2aWNlSWQsXG4gICAgICAgIHBsYXRmb3JtOiAnYW5kcm9pZCcsXG4gICAgICAgIC4uLihvcHRpb25zLnZhdWx0QmFzZVBhdGggIT09IHVuZGVmaW5lZCAmJiB7IHZhdWx0QmFzZVBhdGg6IG9wdGlvbnMudmF1bHRCYXNlUGF0aCB9KSxcbiAgICAgICAgLi4uKG9wdGlvbnMud2Vidmlld1RpbWVvdXRJbk1pbGxpc2Vjb25kcyAhPT0gdW5kZWZpbmVkICYmIHsgd2Vidmlld1RpbWVvdXRJbk1pbGxpc2Vjb25kczogb3B0aW9ucy53ZWJ2aWV3VGltZW91dEluTWlsbGlzZWNvbmRzIH0pXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgb3JpZ2luYWxEaXNwb3NlID0gYXBwaXVtVHJhbnNwb3J0LmRpc3Bvc2UuYmluZChhcHBpdW1UcmFuc3BvcnQpO1xuICAgICAgY29uc3QgdHJhbnNwb3J0OiBPYnNpZGlhblRyYW5zcG9ydCA9IGFwcGl1bVRyYW5zcG9ydDtcbiAgICAgIHRyYW5zcG9ydC5kaXNwb3NlID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IG9yaWdpbmFsRGlzcG9zZSgpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGtpbGxBdXRvU3RhcnRlZFByb2Nlc3NlcygpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB0cmFuc3BvcnQuZGlzcG9zZVN5bmMgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIGtpbGxBdXRvU3RhcnRlZFByb2Nlc3NlcygpO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHRyYW5zcG9ydDtcblxuICAgICAgZnVuY3Rpb24ga2lsbEF1dG9TdGFydGVkUHJvY2Vzc2VzKCk6IHZvaWQge1xuICAgICAgICBpZiAoYXBwaXVtUHJvY2Vzcykge1xuICAgICAgICAgIGtpbGxQcm9jZXNzVHJlZShhcHBpdW1Qcm9jZXNzKTtcbiAgICAgICAgICAvLyBDYW5ub3QgdXNlIHRoaXMubG9nIGluc2lkZSBuZXN0ZWQgZnVuY3Rpb24gXHUyMDE0IGB0aGlzYCBpcyBub3QgY2FwdHVyZWQuXG4gICAgICAgICAgbG9nKGBbdHJhbnNwb3J0LWZhY3Rvcnk6JHtvcHRpb25zLnR5cGV9XSBBdXRvLXN0YXJ0ZWQgQXBwaXVtIHNlcnZlciBzdG9wcGVkLmApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbXVsYXRvclByb2Nlc3MpIHtcbiAgICAgICAgICBraWxsUHJvY2Vzc1RyZWUoZW11bGF0b3JQcm9jZXNzKTtcbiAgICAgICAgICBsb2coYFt0cmFuc3BvcnQtZmFjdG9yeToke29wdGlvbnMudHlwZX1dIEF1dG8tc3RhcnRlZCBlbXVsYXRvciBzdG9wcGVkLmApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgIGlmIChhcHBpdW1Qcm9jZXNzKSB7XG4gICAgICAgIGtpbGxQcm9jZXNzVHJlZShhcHBpdW1Qcm9jZXNzKTtcbiAgICAgICAgdGhpcy5sb2coJ0tpbGxlZCBhdXRvLXN0YXJ0ZWQgQXBwaXVtIHNlcnZlciBhZnRlciBjb25uZWN0aW9uIGZhaWx1cmUuJyk7XG4gICAgICB9XG4gICAgICBpZiAoZW11bGF0b3JQcm9jZXNzKSB7XG4gICAgICAgIGtpbGxQcm9jZXNzVHJlZShlbXVsYXRvclByb2Nlc3MpO1xuICAgICAgICB0aGlzLmxvZygnS2lsbGVkIGF1dG8tc3RhcnRlZCBlbXVsYXRvciBhZnRlciBjb25uZWN0aW9uIGZhaWx1cmUuJyk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNoZWNrQXBwaXVtUmVhY2hhYmxlKHVybDogVVJMKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHN0YXR1c1VybCA9IG5ldyBVUkwoJy9zdGF0dXMnLCB1cmwpO1xuICAgICAgY29uc3QgcmVxID0gaHR0cC5nZXQoc3RhdHVzVXJsLCB7IHRpbWVvdXQ6IEFQUElVTV9QUkVGTElHSFRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgfSwgKHJlcykgPT4ge1xuICAgICAgICByZXMucmVzdW1lKCk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0pO1xuICAgICAgcmVxLm9uKCd0aW1lb3V0JywgKCkgPT4ge1xuICAgICAgICByZXEuZGVzdHJveSgpO1xuICAgICAgICByZWplY3QoXG4gICAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgICAgYEFwcGl1bSBzZXJ2ZXIgYXQgJHt1cmwub3JpZ2lufSBkaWQgbm90IHJlc3BvbmQgd2l0aGluICR7U3RyaW5nKEFQUElVTV9QUkVGTElHSFRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpfW1zLiBJcyB0aGUgQXBwaXVtIHNlcnZlciBydW5uaW5nP2BcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIHJlcS5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIHJlamVjdChcbiAgICAgICAgICBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgQ2Fubm90IHJlYWNoIEFwcGl1bSBzZXJ2ZXIgYXQgJHt1cmwub3JpZ2lufTogJHtlcnIubWVzc2FnZX0uIElzIHRoZSBBcHBpdW0gc2VydmVyIHJ1bm5pbmc/YFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjaGVja0RldmljZUNvbm5lY3RlZChkZXZpY2VJZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgbmV3IFByb21pc2U8c3RyaW5nPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBleGVjRmlsZSgnYWRiJywgWydkZXZpY2VzJ10sIHsgdGltZW91dDogQURCX0RFVklDRV9DSEVDS19USU1FT1VUX0lOX01JTExJU0VDT05EUyB9LCAoZXJyb3IsIHN0ZG91dCwgc3RkZXJyKSA9PiB7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYEZhaWxlZCB0byBydW4gJ2FkYiBkZXZpY2VzJzogJHtlcnJvci5tZXNzYWdlfS4gSXMgQURCIGluc3RhbGxlZCBhbmQgaW4gUEFUSD9gKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGRlcnIpIHtcbiAgICAgICAgICB0aGlzLmxvZyhgQURCIHN0ZGVycjogJHtzdGRlcnIudHJpbSgpfWApO1xuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUoc3Rkb3V0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgY29uc3QgbGluZXMgPSBvdXRwdXQuc3BsaXQoJ1xcbicpLm1hcCgobGluZSkgPT4gbGluZS50cmltKCkpLmZpbHRlcigobGluZSkgPT4gbGluZS5sZW5ndGggPiAwKTtcbiAgICBjb25zdCBkZXZpY2VMaW5lID0gbGluZXMuZmluZCgobGluZSkgPT4gbGluZS5zdGFydHNXaXRoKGRldmljZUlkKSk7XG4gICAgcmV0dXJuIGRldmljZUxpbmU/LmluY2x1ZGVzKCdcXHRkZXZpY2UnKSA/PyBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZW5zdXJlRGV2aWNlQ29ubmVjdGVkKGF2ZE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCwgZGV2aWNlSWQ6IHN0cmluZyk6IFByb21pc2U8Q2hpbGRQcm9jZXNzIHwgdW5kZWZpbmVkPiB7XG4gICAgdGhpcy5sb2coYENoZWNraW5nIGRldmljZSAke2RldmljZUlkfSBpcyBjb25uZWN0ZWQgdmlhIEFEQi4uLmApO1xuXG4gICAgaWYgKGF3YWl0IHRoaXMuY2hlY2tEZXZpY2VDb25uZWN0ZWQoZGV2aWNlSWQpKSB7XG4gICAgICB0aGlzLmxvZyhgRGV2aWNlICR7ZGV2aWNlSWR9IGlzIGNvbm5lY3RlZC5gKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKCFhdmROYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBEZXZpY2UgXCIke2RldmljZUlkfVwiIGlzIG5vdCBjb25uZWN0ZWQuIFN0YXJ0IHRoZSBlbXVsYXRvciBiZWZvcmUgcnVubmluZyBpbnRlZ3JhdGlvbiB0ZXN0cyxgXG4gICAgICAgICAgKyAnIG9yIHNldCBhdmROYW1lIGluIHRyYW5zcG9ydCBvcHRpb25zIHRvIGF1dG8tc3RhcnQgaXQuJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhgRGV2aWNlICR7ZGV2aWNlSWR9IG5vdCBmb3VuZCwgc3RhcnRpbmcgZW11bGF0b3IgQVZEIFwiJHthdmROYW1lfVwiLi4uYCk7XG4gICAgY29uc3QgZW11bGF0b3JQcm9jZXNzID0gdGhpcy5zdGFydEVtdWxhdG9yKGF2ZE5hbWUpO1xuICAgIGF3YWl0IHRoaXMud2FpdEZvckRldmljZShkZXZpY2VJZCk7XG4gICAgdGhpcy5sb2coYEVtdWxhdG9yIFwiJHthdmROYW1lfVwiIHN0YXJ0ZWQsIGRldmljZSAke2RldmljZUlkfSBpcyBjb25uZWN0ZWQuYCk7XG4gICAgcmV0dXJuIGVtdWxhdG9yUHJvY2VzcztcbiAgfVxuXG4gIHByaXZhdGUgbG9nKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIGxvZyhgW3RyYW5zcG9ydC1mYWN0b3J5OiR7dGhpcy50eXBlfV0gJHttZXNzYWdlfWApO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlRW11bGF0b3JCaW5hcnkoKTogc3RyaW5nIHtcbiAgICBjb25zdCBzZGtSb290ID0gcHJvY2Vzcy5lbnZbJ0FORFJPSURfSE9NRSddID8/IHByb2Nlc3MuZW52WydBTkRST0lEX1NES19ST09UJ107XG4gICAgaWYgKCFzZGtSb290KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdDYW5ub3QgZmluZCBBbmRyb2lkIGVtdWxhdG9yOiBuZWl0aGVyIEFORFJPSURfSE9NRSBub3IgQU5EUk9JRF9TREtfUk9PVCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGpvaW4oc2RrUm9vdCwgJ2VtdWxhdG9yJywgJ2VtdWxhdG9yJyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRLZXlFdmVudChkZXZpY2VJZDogc3RyaW5nLCBrZXlDb2RlOiBudW1iZXIsIGRlc2NyaXB0aW9uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgZXhlY0ZpbGUoXG4gICAgICAgICdhZGInLFxuICAgICAgICBbJy1zJywgZGV2aWNlSWQsICdzaGVsbCcsICdpbnB1dCcsICdrZXlldmVudCcsIFN0cmluZyhrZXlDb2RlKV0sXG4gICAgICAgIHsgdGltZW91dDogQURCX0RFVklDRV9DSEVDS19USU1FT1VUX0lOX01JTExJU0VDT05EUyB9LFxuICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMubG9nKFxuICAgICAgICAgICAgICBgV2FybmluZzogZmFpbGVkIHRvICR7ZGVzY3JpcHRpb259IChrZXlldmVudCAke1N0cmluZyhrZXlDb2RlKX0pOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ3Vua25vd24gZXJyb3InfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzdGFydEFwcGl1bUFuZEVtdWxhdG9yKHBhcmFtczogU3RhcnRBcHBpdW1BbmRFbXVsYXRvclBhcmFtcyk6IFByb21pc2U8W0NoaWxkUHJvY2VzcyB8IHVuZGVmaW5lZCwgQ2hpbGRQcm9jZXNzIHwgdW5kZWZpbmVkXT4ge1xuICAgIGNvbnN0IHsgYXBwaXVtVXJsLCBhdmROYW1lLCBkZXZpY2VJZCwgcG9ydCwgc2hvdWxkQXV0b1N0YXJ0QXBwaXVtIH0gPSBwYXJhbXM7XG5cbiAgICBsZXQgbmVlZHNBcHBpdW1TdGFydCA9IGZhbHNlO1xuXG4gICAgdGhpcy5sb2coYENoZWNraW5nIEFwcGl1bSBzZXJ2ZXIgYXQgJHthcHBpdW1VcmwuaHJlZn0uLi5gKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5jaGVja0FwcGl1bVJlYWNoYWJsZShhcHBpdW1VcmwpO1xuICAgICAgdGhpcy5sb2coJ0FwcGl1bSBzZXJ2ZXIgaXMgcmVhY2hhYmxlLicpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICBpZiAoc2hvdWxkQXV0b1N0YXJ0QXBwaXVtID09PSBmYWxzZSkge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICAgIG5lZWRzQXBwaXVtU3RhcnQgPSB0cnVlO1xuICAgIH1cblxuICAgIGxldCBhcHBpdW1Qcm9jZXNzOiBDaGlsZFByb2Nlc3MgfCB1bmRlZmluZWQ7XG5cbiAgICBpZiAobmVlZHNBcHBpdW1TdGFydCkge1xuICAgICAgdGhpcy5sb2coYEFwcGl1bSBub3QgcmVhY2hhYmxlLCBhdXRvLXN0YXJ0aW5nIG9uIHBvcnQgJHtTdHJpbmcocG9ydCl9Li4uYCk7XG4gICAgICBhcHBpdW1Qcm9jZXNzID0gdGhpcy5zdGFydEFwcGl1bVNlcnZlcihwb3J0KTtcbiAgICB9XG5cbiAgICBjb25zdCBbLCBlbXVsYXRvclByb2Nlc3NdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgbmVlZHNBcHBpdW1TdGFydFxuICAgICAgICA/IHRoaXMud2FpdEZvckFwcGl1bVJlYWR5KGFwcGl1bVVybCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2coJ0F1dG8tc3RhcnRlZCBBcHBpdW0gc2VydmVyIGlzIHJlYWR5LicpO1xuICAgICAgICB9KVxuICAgICAgICA6IFByb21pc2UucmVzb2x2ZSgpLFxuICAgICAgdGhpcy5lbnN1cmVEZXZpY2VDb25uZWN0ZWQoYXZkTmFtZSwgZGV2aWNlSWQpXG4gICAgXSk7XG5cbiAgICByZXR1cm4gW2FwcGl1bVByb2Nlc3MsIGVtdWxhdG9yUHJvY2Vzc107XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0QXBwaXVtU2VydmVyKHBvcnQ6IG51bWJlcik6IENoaWxkUHJvY2VzcyB7XG4gICAgY29uc3QgY2hpbGQgPSBzcGF3bihgbnB4IGFwcGl1bSAtLWxvZy10aW1lc3RhbXAgLS1wb3J0ICR7U3RyaW5nKHBvcnQpfWAsIHtcbiAgICAgIGRldGFjaGVkOiB0cnVlLFxuICAgICAgc2hlbGw6IHRydWUsXG4gICAgICBzdGRpbzogWydpZ25vcmUnLCAnaW5oZXJpdCcsICdpbmhlcml0J11cbiAgICB9KTtcblxuICAgIGNoaWxkLnVucmVmKCk7XG4gICAgcmV0dXJuIGNoaWxkO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydEVtdWxhdG9yKGF2ZE5hbWU6IHN0cmluZyk6IENoaWxkUHJvY2VzcyB7XG4gICAgY29uc3QgZW11bGF0b3JCaW5hcnkgPSB0aGlzLnJlc29sdmVFbXVsYXRvckJpbmFyeSgpO1xuICAgIGNvbnN0IGFyZ3MgPSBidWlsZEVtdWxhdG9yQXJncyhhdmROYW1lKTtcbiAgICB0aGlzLmxvZyhgUnVubmluZzogJHtlbXVsYXRvckJpbmFyeX0gJHthcmdzLmpvaW4oJyAnKX1gKTtcbiAgICBjb25zdCBjaGlsZCA9IHNwYXduKGVtdWxhdG9yQmluYXJ5LCBhcmdzLCB7XG4gICAgICBkZXRhY2hlZDogdHJ1ZSxcbiAgICAgIHN0ZGlvOiBbJ2lnbm9yZScsICdpZ25vcmUnLCAnaWdub3JlJ11cbiAgICB9KTtcblxuICAgIGNoaWxkLnVucmVmKCk7XG4gICAgcmV0dXJuIGNoaWxkO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB3YWl0Rm9yQXBwaXVtUmVhZHkodXJsOiBVUkwpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmxvZyhcbiAgICAgIGBXYWl0aW5nIGZvciBBcHBpdW0gYXQgJHt1cmwuaHJlZn0gKHRpbWVvdXQ6ICR7U3RyaW5nKEFQUElVTV9TVEFSVF9USU1FT1VUX0lOX01JTExJU0VDT05EUyl9bXMsIHBvbGw6ICR7XG4gICAgICAgIFN0cmluZyhBUFBJVU1fU1RBUlRfUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMpXG4gICAgICB9bXMpLi4uYFxuICAgICk7XG4gICAgY29uc3QgZGVhZGxpbmUgPSBEYXRlLm5vdygpICsgQVBQSVVNX1NUQVJUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTO1xuXG4gICAgd2hpbGUgKERhdGUubm93KCkgPCBkZWFkbGluZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5jaGVja0FwcGl1bVJlYWNoYWJsZSh1cmwpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICBzZXRUaW1lb3V0KHJlc29sdmUsIEFQUElVTV9TVEFSVF9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBBdXRvLXN0YXJ0ZWQgQXBwaXVtIHNlcnZlciBkaWQgbm90IGJlY29tZSByZWFkeSB3aXRoaW4gJHtTdHJpbmcoQVBQSVVNX1NUQVJUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKX1tc2BcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB3YWl0Rm9yQm9vdChkZXZpY2VJZDogc3RyaW5nLCBkZWFkbGluZTogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcmVtYWluaW5nTXMgPSBNYXRoLm1heCgwLCBkZWFkbGluZSAtIERhdGUubm93KCkpO1xuICAgIHRoaXMubG9nKFxuICAgICAgYFdhaXRpbmcgZm9yIGRldmljZSAke2RldmljZUlkfSB0byBmaW5pc2ggYm9vdGluZyAocmVtYWluaW5nOiAke1N0cmluZyhyZW1haW5pbmdNcyl9bXMsIHBvbGw6ICR7XG4gICAgICAgIFN0cmluZyhFTVVMQVRPUl9CT09UX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTKVxuICAgICAgfW1zKS4uLmBcbiAgICApO1xuXG4gICAgd2hpbGUgKERhdGUubm93KCkgPCBkZWFkbGluZSkge1xuICAgICAgY29uc3QgaXNCb290ZWQgPSBhd2FpdCBuZXcgUHJvbWlzZTxib29sZWFuPigocmVzb2x2ZSkgPT4ge1xuICAgICAgICBleGVjRmlsZShcbiAgICAgICAgICAnYWRiJyxcbiAgICAgICAgICBbJy1zJywgZGV2aWNlSWQsICdzaGVsbCcsICdnZXRwcm9wJywgJ3N5cy5ib290X2NvbXBsZXRlZCddLFxuICAgICAgICAgIHsgdGltZW91dDogQURCX0RFVklDRV9DSEVDS19USU1FT1VUX0lOX01JTExJU0VDT05EUyB9LFxuICAgICAgICAgIChfZXJyb3IsIHN0ZG91dCkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZShzdGRvdXQudHJpbSgpID09PSAnMScpO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoaXNCb290ZWQpIHtcbiAgICAgICAgdGhpcy5sb2coYERldmljZSAke2RldmljZUlkfSBib290IGNvbXBsZXRlZC5gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KHJlc29sdmUsIEVNVUxBVE9SX0JPT1RfUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYERldmljZSBcIiR7ZGV2aWNlSWR9XCIgY29ubmVjdGVkIGJ1dCBkaWQgbm90IGZpbmlzaCBib290aW5nIHdpdGhpbiAke1N0cmluZyhFTVVMQVRPUl9CT09UX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKX1tcy5gXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgd2FpdEZvckRldmljZShkZXZpY2VJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5sb2coXG4gICAgICBgV2FpdGluZyBmb3IgZGV2aWNlICR7ZGV2aWNlSWR9IHRvIGFwcGVhciBpbiBBREIgKHRpbWVvdXQ6ICR7U3RyaW5nKEVNVUxBVE9SX0JPT1RfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpfW1zLCBwb2xsOiAke1xuICAgICAgICBTdHJpbmcoRU1VTEFUT1JfQk9PVF9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUylcbiAgICAgIH1tcykuLi5gXG4gICAgKTtcbiAgICBjb25zdCBkZWFkbGluZSA9IERhdGUubm93KCkgKyBFTVVMQVRPUl9CT09UX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTO1xuXG4gICAgd2hpbGUgKERhdGUubm93KCkgPCBkZWFkbGluZSkge1xuICAgICAgaWYgKGF3YWl0IHRoaXMuY2hlY2tEZXZpY2VDb25uZWN0ZWQoZGV2aWNlSWQpKSB7XG4gICAgICAgIHRoaXMubG9nKGBEZXZpY2UgJHtkZXZpY2VJZH0gYXBwZWFyZWQgaW4gQURCLCB3YWl0aW5nIGZvciBib290IHRvIGNvbXBsZXRlLi4uYCk7XG4gICAgICAgIGF3YWl0IHRoaXMud2FpdEZvckJvb3QoZGV2aWNlSWQsIGRlYWRsaW5lKTtcbiAgICAgICAgYXdhaXQgdGhpcy53YWtlU2NyZWVuKGRldmljZUlkKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KHJlc29sdmUsIEVNVUxBVE9SX0JPT1RfUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEVtdWxhdG9yIGRldmljZSBcIiR7ZGV2aWNlSWR9XCIgZGlkIG5vdCBhcHBlYXIgd2l0aGluICR7U3RyaW5nKEVNVUxBVE9SX0JPT1RfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpfW1zLmBcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB3YWtlU2NyZWVuKGRldmljZUlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmxvZyhgV2FraW5nIHNjcmVlbiBvbiBkZXZpY2UgJHtkZXZpY2VJZH0uLi5gKTtcblxuICAgIGF3YWl0IHRoaXMuc2VuZEtleUV2ZW50KGRldmljZUlkLCBLRVlDT0RFX1dBS0VVUCwgJ3dha2Ugc2NyZWVuJyk7XG4gICAgYXdhaXQgdGhpcy5zZW5kS2V5RXZlbnQoZGV2aWNlSWQsIEtFWUNPREVfTUVOVSwgJ2Rpc21pc3MgbG9jayBzY3JlZW4nKTtcblxuICAgIHRoaXMubG9nKGBTY3JlZW4gd2FrZSBjb21wbGV0ZSBvbiBkZXZpY2UgJHtkZXZpY2VJZH0uYCk7XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHRyYW5zcG9ydCBpbnN0YW5jZSBmcm9tIHRoZSBnaXZlbiBvcHRpb25zLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVHJhbnNwb3J0IGNvbmZpZ3VyYXRpb24uIERlZmF1bHRzIHRvIENMSSB0cmFuc3BvcnQuXG4gKiBAcmV0dXJucyBBIG5ldyB0cmFuc3BvcnQgaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVUcmFuc3BvcnRGcm9tT3B0aW9ucyhvcHRpb25zPzogT2JzaWRpYW5UcmFuc3BvcnRPcHRpb25zKTogUHJvbWlzZTxPYnNpZGlhblRyYW5zcG9ydD4ge1xuICBjb25zdCB0eXBlID0gb3B0aW9ucz8udHlwZSA/PyBERUZBVUxUX1RSQU5TUE9SVF9UWVBFO1xuXG4gIGlmICghb3B0aW9ucyB8fCBvcHRpb25zLnR5cGUgPT09ICdvYnNpZGlhbi1jbGknKSB7XG4gICAgbG9nKGBbdHJhbnNwb3J0LWZhY3Rvcnk6JHt0eXBlfV0gQ3JlYXRpbmcgRGVza3RvcENsaVRyYW5zcG9ydGApO1xuICAgIHJldHVybiBuZXcgRGVza3RvcENsaVRyYW5zcG9ydCgpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMudHlwZSA9PT0gJ29ic2lkaWFuLWNkcCcpIHtcbiAgICBsb2coYFt0cmFuc3BvcnQtZmFjdG9yeToke3R5cGV9XSBDcmVhdGluZyBEZXNrdG9wQ2RwVHJhbnNwb3J0IChob3N0PSR7b3B0aW9ucy5ob3N0ID8/ICdsb2NhbGhvc3QnfSwgcG9ydD0ke1N0cmluZyhvcHRpb25zLnBvcnQgPz8gQ0RQX0RFRkFVTFRfUE9SVCl9KWApO1xuICAgIHJldHVybiBuZXcgRGVza3RvcENkcFRyYW5zcG9ydCh7XG4gICAgICAuLi4ob3B0aW9ucy5ob3N0ICE9PSB1bmRlZmluZWQgJiYgeyBjZHBIb3N0OiBvcHRpb25zLmhvc3QgfSksXG4gICAgICAuLi4ob3B0aW9ucy5wb3J0ICE9PSB1bmRlZmluZWQgJiYgeyBjZHBQb3J0OiBvcHRpb25zLnBvcnQgfSksXG4gICAgICAuLi4ob3B0aW9ucy5jb21tYW5kVGltZW91dEluTWlsbGlzZWNvbmRzICE9PSB1bmRlZmluZWQgJiYgeyBjb21tYW5kVGltZW91dEluTWlsbGlzZWNvbmRzOiBvcHRpb25zLmNvbW1hbmRUaW1lb3V0SW5NaWxsaXNlY29uZHMgfSlcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IGZhY3RvcnkgPSBuZXcgQXBwaXVtVHJhbnNwb3J0RmFjdG9yeSh0eXBlKTtcbiAgcmV0dXJuIGZhY3RvcnkuY3JlYXRlKG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBjYWNoZWQgdHJhbnNwb3J0IGluc3RhbmNlLCBjcmVhdGluZyBvbmUgZnJvbSB0aGUgZ2l2ZW4gb3B0aW9uc1xuICogaWYgbm90IGFscmVhZHkgY2FjaGVkLlxuICpcbiAqIFRoZSB0cmFuc3BvcnQgaXMgY2FjaGVkIHBlciB3b3JrZXIgcHJvY2VzcyBzbyBXZWJTb2NrZXQvQXBwaXVtIHNlc3Npb25zXG4gKiBhcmUgcmV1c2VkIGFjcm9zcyBjYWxscyB3aXRoaW4gdGhlIHNhbWUgdGVzdCB3b3JrZXIuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUcmFuc3BvcnQgY29uZmlndXJhdGlvbi4gRGVmYXVsdHMgdG8gQ0xJIHRyYW5zcG9ydC5cbiAqIEByZXR1cm5zIFRoZSBjYWNoZWQgb3IgbmV3bHkgY3JlYXRlZCB0cmFuc3BvcnQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRPckNyZWF0ZVRyYW5zcG9ydChvcHRpb25zPzogT2JzaWRpYW5UcmFuc3BvcnRPcHRpb25zKTogUHJvbWlzZTxPYnNpZGlhblRyYW5zcG9ydD4ge1xuICBpZiAoY2FjaGVkVHJhbnNwb3J0KSB7XG4gICAgcmV0dXJuIGNhY2hlZFRyYW5zcG9ydDtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNyZWF0ZVRyYW5zcG9ydEZyb21PcHRpb25zKG9wdGlvbnMpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS1hdG9taWMtdXBkYXRlcyAtLSBTaW5nbGUtdGhyZWFkZWQgd29ya2VyOyBubyBjb25jdXJyZW50IHdyaXRlcy5cbiAgY2FjaGVkVHJhbnNwb3J0ID0gcmVzdWx0O1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEtpbGxzIGEgY2hpbGQgcHJvY2VzcyBhbmQgaXRzIGVudGlyZSBwcm9jZXNzIHRyZWUuXG4gKlxuICogT24gV2luZG93cywgYGNoaWxkLmtpbGwoKWAgb25seSBzZW5kcyBTSUdURVJNIHRvIHRoZSBkaXJlY3QgcHJvY2VzcyxcbiAqIGxlYXZpbmcgc3Bhd25lZCBncmFuZGNoaWxkcmVuIChlLmcuIFFFTVUsIFVpQXV0b21hdG9yKSBhbGl2ZS5cbiAqIGB0YXNra2lsbCAvRiAvVCAvUElEYCBmb3JjZWZ1bGx5IHRlcm1pbmF0ZXMgdGhlIGVudGlyZSB0cmVlLlxuICpcbiAqIEBwYXJhbSBjaGlsZCAtIFRoZSBjaGlsZCBwcm9jZXNzIHRvIGtpbGwuXG4gKi9cbmZ1bmN0aW9uIGtpbGxQcm9jZXNzVHJlZShjaGlsZDogQ2hpbGRQcm9jZXNzKTogdm9pZCB7XG4gIGlmIChjaGlsZC5waWQgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWNGaWxlU3luYygndGFza2tpbGwnLCBbJy9GJywgJy9UJywgJy9QSUQnLCBTdHJpbmcoY2hpbGQucGlkKV0sIHsgc3RkaW86ICdpZ25vcmUnIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICBsb2coXG4gICAgICAgIGBbdHJhbnNwb3J0LWZhY3RvcnldIHRhc2traWxsIGZvciBQSUQgJHtTdHJpbmcoY2hpbGQucGlkKX0gZmFpbGVkIChtYXkgaGF2ZSBhbHJlYWR5IGV4aXRlZCk6ICR7XG4gICAgICAgICAgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAndW5rbm93biBlcnJvcidcbiAgICAgICAgfWBcbiAgICAgICk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNoaWxkLmtpbGwoJ1NJR0tJTEwnKTtcbiAgfVxufVxuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVVBLGdDQUlPO0FBQ1AsdUJBQWlCO0FBQ2pCLHVCQUFxQjtBQUNyQiwwQkFBb0I7QUFDcEIseUJBQXVCO0FBUXZCLDJCQUFrQztBQUNsQyxpQkFBb0I7QUFDcEIsOEJBQWdDO0FBQ2hDLG1DQUFvQztBQUNwQyxtQ0FBb0M7QUFFcEMsTUFBTSxjQUFjO0FBQ3BCLE1BQU0sZUFBZSxHQUFHLFdBQVc7QUFDbkMsTUFBTSwyQ0FBMkM7QUFDakQsTUFBTSxnQ0FBZ0M7QUFDdEMsTUFBTSxrREFBa0Q7QUFDeEQsTUFBTSwyQ0FBMkM7QUFDakQsTUFBTSw2Q0FBNkM7QUFDbkQsTUFBTSx1Q0FBdUM7QUFDN0MsTUFBTSxtQkFBbUI7QUFDekIsTUFBTSxrQ0FBa0M7QUFDeEMsTUFBTSx5QkFBeUI7QUFDL0IsTUFBTSw4Q0FBOEM7QUFDcEQsTUFBTSx3Q0FBd0M7QUFDOUMsTUFBTSxlQUFlO0FBQ3JCLE1BQU0saUJBQWlCO0FBQ3ZCLE1BQU0seUNBQXlDO0FB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QUFBLE1BQzFELEdBQUksUUFBUSxpQ0FBaUMsVUFBYSxFQUFFLDhCQUE4QixRQUFRLDZCQUE2QjtBQUFBLElBQ2pJLENBQUM7QUFBQSxFQUNIO0FBRUEsUUFBTSxVQUFVLElBQUksdUJBQXVCLElBQUk7QUFDL0MsU0FBTyxRQUFRLE9BQU8sT0FBTztBQUMvQjtBQVlBLGVBQXNCLHFCQUFxQixTQUFnRTtBQUN6RyxNQUFJLGlCQUFpQjtBQUNuQixXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sU0FBUyxNQUFNLDJCQUEyQixPQUFPO0FBRXZELG9CQUFrQjtBQUNsQixTQUFPO0FBQ1Q7QUFXQSxTQUFTLGdCQUFnQixPQUEyQjtBQUNsRCxNQUFJLE1BQU0sUUFBUSxRQUFXO0FBQzNCO0FBQUEsRUFDRjtBQUVBLE1BQUksb0JBQUFBLFFBQVEsYUFBYSxTQUFTO0FBQ2hDLFFBQUk7QUFDRixrREFBYSxZQUFZLENBQUMsTUFBTSxNQUFNLFFBQVEsT0FBTyxNQUFNLEdBQUcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxTQUFTLENBQUM7QUFBQSxJQUN2RixTQUFTLE9BQWdCO0FBQ3ZCO0FBQUEsUUFDRSx3Q0FBd0MsT0FBTyxNQUFNLEdBQUcsQ0FBQyxzQ0FDdkQsaUJBQWlCLFFBQVEsTUFBTSxVQUFVLGVBQzNDO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGLE9BQU87QUFDTCxVQUFNLEtBQUssU0FBUztBQUFBLEVBQ3RCO0FBQ0Y7IiwKICAibmFtZXMiOiBbImtpbGxBdXRvU3RhcnRlZFByb2Nlc3NlcyIsICJodHRwIiwgInByb2Nlc3MiXQp9Cg==
|
|
416
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3RyYW5zcG9ydC1mYWN0b3J5LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogRmFjdG9yeSBmb3IgY3JlYXRpbmcgdHJhbnNwb3J0IGluc3RhbmNlcyBmcm9tIHtAbGluayBPYnNpZGlhblRyYW5zcG9ydE9wdGlvbnN9LlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIGZhY3RvcnkgY292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB0eXBlIHsgQ2hpbGRQcm9jZXNzIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcblxuaW1wb3J0IHtcbiAgZXhlY0ZpbGUsXG4gIGV4ZWNGaWxlU3luYyxcbiAgc3Bhd25cbn0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCBodHRwIGZyb20gJ25vZGU6aHR0cCc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgeyByZW1vdGUgfSBmcm9tICd3ZWJkcml2ZXJpbyc7XG5cbmltcG9ydCB0eXBlIHtcbiAgT2JzaWRpYW5BbmRyb2lkQXBwaXVtVHJhbnNwb3J0T3B0aW9ucyxcbiAgT2JzaWRpYW5UcmFuc3BvcnRPcHRpb25zXG59IGZyb20gJy4vdHJhbnNwb3J0LW9wdGlvbnMuY2pzJztcbmltcG9ydCB0eXBlIHsgT2JzaWRpYW5UcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC5janMnO1xuXG5pbXBvcnQgeyBidWlsZEVtdWxhdG9yQXJncyB9IGZyb20gJy4vZW11bGF0b3ItYXJncy5janMnO1xuaW1wb3J0IHsgbG9nIH0gZnJvbSAnLi9sb2cuY2pzJztcbmltcG9ydCB7IEFwcGl1bVRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LWFwcGl1bS5janMnO1xuaW1wb3J0IHsgRGVza3RvcENkcFRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LWRlc2t0b3AtY2RwLmNqcyc7XG5pbXBvcnQgeyBEZXNrdG9wQ2xpVHJhbnNwb3J0IH0gZnJvbSAnLi90cmFuc3BvcnQtZGVza3RvcC1jbGkuY2pzJztcblxuY29uc3QgQVBQX1BBQ0tBR0UgPSAnbWQub2JzaWRpYW4nO1xuY29uc3QgQVBQX0FDVElWSVRZID0gYCR7QVBQX1BBQ0tBR0V9Lk1haW5BY3Rpdml0eWA7XG5jb25zdCBBREJfREVWSUNFX0NIRUNLX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gNTAwMDtcbmNvbnN0IEFQUElVTV9DT05ORUNUSU9OX1JFVFJZX0NPVU5UID0gMztcbmNvbnN0IEFQUElVTV9DT05ORUNUSU9OX1JFVFJZX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gMTgwMDAwO1xuY29uc3QgQVBQSVVNX1BSRUZMSUdIVF9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDUwMDA7XG5jb25zdCBBUFBJVU1fU1RBUlRfUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMgPSA1MDA7XG5jb25zdCBBUFBJVU1fU1RBUlRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSA2MDAwMDtcbmNvbnN0IENEUF9ERUZBVUxUX1BPUlQgPSA4MzE1O1xuY29uc3QgQ09NTUFORF9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDMwMDtcbmNvbnN0IERFRkFVTFRfVFJBTlNQT1JUX1RZUEUgPSAnb2JzaWRpYW4tY2xpJztcbmNvbnN0IEVNVUxBVE9SX0JPT1RfUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMgPSAyMDAwO1xuY29uc3QgRU1VTEFUT1JfQk9PVF9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDEyMDAwMDtcbmNvbnN0IEtFWUNPREVfTUVOVSA9IDgyO1xuY29uc3QgS0VZQ09ERV9XQUtFVVAgPSAyMjQ7XG5jb25zdCBTRVJWRVJfSU5TVEFMTF9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDEyMDAwMDtcbmNvbnN0IFNFUlZFUl9MQVVOQ0hfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAxMjAwMDA7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIEFwcGl1bVRyYW5zcG9ydEZhY3Rvcnkuc3RhcnRBcHBpdW1BbmRFbXVsYXRvcn0uXG4gKi9cbmludGVyZmFjZSBTdGFydEFwcGl1bUFuZEVtdWxhdG9yUGFyYW1zIHtcbiAgLyoqIFRoZSBBcHBpdW0gc2VydmVyIFVSTC4gKi9cbiAgYXBwaXVtVXJsOiBVUkw7XG5cbiAgLyoqIEFWRCBuYW1lIHRvIGF1dG8tc3RhcnQgaWYgdGhlIGRldmljZSBpcyBub3QgY29ubmVjdGVkLiAqL1xuICBhdmROYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKiBEZXZpY2UgVURJRC4gKi9cbiAgZGV2aWNlSWQ6IHN0cmluZztcblxuICAvKiogVGhlIEFwcGl1bSBzZXJ2ZXIgcG9ydC4gKi9cbiAgcG9ydDogbnVtYmVyO1xuXG4gIC8qKiBXaGV0aGVyIEFwcGl1bSBhdXRvLXN0YXJ0IGlzIGFsbG93ZWQuICovXG4gIHNob3VsZEF1dG9TdGFydEFwcGl1bT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59XG5cbmxldCBjYWNoZWRUcmFuc3BvcnQ6IE9ic2lkaWFuVHJhbnNwb3J0IHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIEVuY2Fwc3VsYXRlcyBhbGwgQXBwaXVtIHRyYW5zcG9ydCBjcmVhdGlvbiBsb2dpYywgaW5jbHVkaW5nIEFwcGl1bSBzZXJ2ZXJcbiAqIHN0YXJ0dXAsIGVtdWxhdG9yIG1hbmFnZW1lbnQsIGFuZCBXZWJEcml2ZXJJTyBzZXNzaW9uIGVzdGFibGlzaG1lbnQuXG4gKlxuICogVXNpbmcgYSBjbGFzcyBhdm9pZHMgdGhyZWFkaW5nIHRoZSB0cmFuc3BvcnQgYHR5cGVgIGxhYmVsIHRocm91Z2ggZXZlcnlcbiAqIGhlbHBlciBmdW5jdGlvbiBcdTIwMTQgYHRoaXMubG9nKClgIGF1dG9tYXRpY2FsbHkgcHJlZml4ZXMgaXQuXG4gKi9cbmNsYXNzIEFwcGl1bVRyYW5zcG9ydEZhY3Rvcnkge1xuICBwcml2YXRlIHJlYWRvbmx5IHR5cGU6IHN0cmluZztcblxuICBwdWJsaWMgY29uc3RydWN0b3IodHlwZTogc3RyaW5nKSB7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIEFwcGl1bSB0cmFuc3BvcnQgYnkgZXN0YWJsaXNoaW5nIGEgV2ViRHJpdmVySU8gc2Vzc2lvbi5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBbmRyb2lkIEFwcGl1bSB0cmFuc3BvcnQgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQSBjb25maWd1cmVkIEFwcGl1bSB0cmFuc3BvcnQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY3JlYXRlKG9wdGlvbnM6IE9ic2lkaWFuQW5kcm9pZEFwcGl1bVRyYW5zcG9ydE9wdGlvbnMpOiBQcm9taXNlPE9ic2lkaWFuVHJhbnNwb3J0PiB7XG4gICAgdGhpcy5sb2coYENyZWF0aW5nIEFwcGl1bVRyYW5zcG9ydCAodXJsPSR7b3B0aW9ucy5hcHBpdW1Vcmx9LCBkZXZpY2U9JHtvcHRpb25zLmRldmljZUlkfSlgKTtcblxuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwob3B0aW9ucy5hcHBpdW1VcmwpO1xuXG4gICAgY29uc3QgcG9ydCA9IE51bWJlcih1cmwucG9ydCk7XG4gICAgaWYgKGlzTmFOKHBvcnQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcG9ydCBpbiBhcHBpdW1Vcmw6ICR7dXJsLnBvcnR9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgYXBwSWQgPSBvcHRpb25zLmFwcElkID8/IEFQUF9QQUNLQUdFO1xuXG4gICAgbGV0IGFwcGl1bVByb2Nlc3M6IENoaWxkUHJvY2VzcyB8IHVuZGVmaW5lZDtcbiAgICBsZXQgZW11bGF0b3JQcm9jZXNzOiBDaGlsZFByb2Nlc3MgfCB1bmRlZmluZWQ7XG5cbiAgICB0cnkge1xuICAgICAgW2FwcGl1bVByb2Nlc3MsIGVtdWxhdG9yUHJvY2Vzc10gPSBhd2FpdCB0aGlzLnN0YXJ0QXBwaXVtQW5kRW11bGF0b3Ioe1xuICAgICAgICBhcHBpdW1Vcmw6IHVybCxcbiAgICAgICAgYXZkTmFtZTogb3B0aW9ucy5hdmROYW1lLFxuICAgICAgICBkZXZpY2VJZDogb3B0aW9ucy5kZXZpY2VJZCxcbiAgICAgICAgcG9ydCxcbiAgICAgICAgc2hvdWxkQXV0b1N0YXJ0QXBwaXVtOiBvcHRpb25zLnNob3VsZEF1dG9TdGFydEFwcGl1bVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMubG9nKFxuICAgICAgICBgQ29ubmVjdGluZyB0byBBcHBpdW0gKGRldmljZT0ke29wdGlvbnMuZGV2aWNlSWR9LCBhcHA9JHthcHBJZH0sIHJldHJ5VGltZW91dDogJHtTdHJpbmcoQVBQSVVNX0NPTk5FQ1RJT05fUkVUUllfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpfW1zLCByZXRyaWVzOiAke1xuICAgICAgICAgIFN0cmluZyhBUFBJVU1fQ09OTkVDVElPTl9SRVRSWV9DT1VOVClcbiAgICAgICAgfSkuLi5gXG4gICAgICApO1xuICAgICAgY29uc3QgYnJvd3NlciA9IGF3YWl0IHJlbW90ZSh7XG4gICAgICAgIGNhcGFiaWxpdGllczoge1xuICAgICAgICAgICdhcHBpdW06YXBwQWN0aXZpdHknOiBBUFBfQUNUSVZJVFksXG4gICAgICAgICAgJ2FwcGl1bTphcHBQYWNrYWdlJzogYXBwSWQsXG4gICAgICAgICAgJ2FwcGl1bTphdXRvR3JhbnRQZXJtaXNzaW9ucyc6IHRydWUsXG4gICAgICAgICAgJ2FwcGl1bTphdXRvbWF0aW9uTmFtZSc6ICdVaUF1dG9tYXRvcjInLFxuICAgICAgICAgICdhcHBpdW06bmV3Q29tbWFuZFRpbWVvdXQnOiBDT01NQU5EX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTLFxuICAgICAgICAgICdhcHBpdW06bm9SZXNldCc6IHRydWUsXG4gICAgICAgICAgJ2FwcGl1bTpzZXR0aW5ncyc6IHtcbiAgICAgICAgICAgICdhcHBpdW06Y2hyb21lZHJpdmVyQXV0b2Rvd25sb2FkJzogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgJ2FwcGl1bTp1ZGlkJzogb3B0aW9ucy5kZXZpY2VJZCxcbiAgICAgICAgICAnYXBwaXVtOnVpYXV0b21hdG9yMlNlcnZlckluc3RhbGxUaW1lb3V0JzogU0VSVkVSX0lOU1RBTExfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMsXG4gICAgICAgICAgJ2FwcGl1bTp1aWF1dG9tYXRvcjJTZXJ2ZXJMYXVuY2hUaW1lb3V0JzogU0VSVkVSX0xBVU5DSF9USU1FT1VUX0lOX01JTExJU0VDT05EUyxcbiAgICAgICAgICAncGxhdGZvcm1OYW1lJzogJ0FuZHJvaWQnXG4gICAgICAgIH0sXG4gICAgICAgIGNvbm5lY3Rpb25SZXRyeUNvdW50OiBBUFBJVU1fQ09OTkVDVElPTl9SRVRSWV9DT1VOVCxcbiAgICAgICAgY29ubmVjdGlvblJldHJ5VGltZW91dDogQVBQSVVNX0NPTk5FQ1RJT05fUkVUUllfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMsXG4gICAgICAgIGhvc3RuYW1lOiB1cmwuaG9zdG5hbWUsXG4gICAgICAgIGxvZ0xldmVsOiAnd2FybicsXG4gICAgICAgIHBhdGg6IHVybC5wYXRobmFtZSxcbiAgICAgICAgcG9ydFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMubG9nKCdBcHBpdW0gc2Vzc2lvbiBlc3RhYmxpc2hlZC4nKTtcbiAgICAgIGNvbnN0IGFwcGl1bVRyYW5zcG9ydCA9IG5ldyBBcHBpdW1UcmFuc3BvcnQoe1xuICAgICAgICBhcHBJZCxcbiAgICAgICAgYnJvd3NlcixcbiAgICAgICAgZGV2aWNlSWQ6IG9wdGlvbnMuZGV2aWNlSWQsXG4gICAgICAgIHBsYXRmb3JtOiAnYW5kcm9pZCcsXG4gICAgICAgIC4uLihvcHRpb25zLnZhdWx0QmFzZVBhdGggIT09IHVuZGVmaW5lZCAmJiB7IHZhdWx0QmFzZVBhdGg6IG9wdGlvbnMudmF1bHRCYXNlUGF0aCB9KSxcbiAgICAgICAgLi4uKG9wdGlvbnMud2Vidmlld1RpbWVvdXRJbk1pbGxpc2Vjb25kcyAhPT0gdW5kZWZpbmVkICYmIHsgd2Vidmlld1RpbWVvdXRJbk1pbGxpc2Vjb25kczogb3B0aW9ucy53ZWJ2aWV3VGltZW91dEluTWlsbGlzZWNvbmRzIH0pXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgb3JpZ2luYWxEaXNwb3NlID0gYXBwaXVtVHJhbnNwb3J0LmRpc3Bvc2UuYmluZChhcHBpdW1UcmFuc3BvcnQpO1xuICAgICAgY29uc3QgdHJhbnNwb3J0OiBPYnNpZGlhblRyYW5zcG9ydCA9IGFwcGl1bVRyYW5zcG9ydDtcbiAgICAgIHRyYW5zcG9ydC5kaXNwb3NlID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IG9yaWdpbmFsRGlzcG9zZSgpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGtpbGxBdXRvU3RhcnRlZFByb2Nlc3NlcygpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB0cmFuc3BvcnQuZGlzcG9zZVN5bmMgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIGtpbGxBdXRvU3RhcnRlZFByb2Nlc3NlcygpO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHRyYW5zcG9ydDtcblxuICAgICAgZnVuY3Rpb24ga2lsbEF1dG9TdGFydGVkUHJvY2Vzc2VzKCk6IHZvaWQge1xuICAgICAgICBpZiAoYXBwaXVtUHJvY2Vzcykge1xuICAgICAgICAgIGtpbGxQcm9jZXNzVHJlZShhcHBpdW1Qcm9jZXNzKTtcbiAgICAgICAgICAvLyBDYW5ub3QgdXNlIHRoaXMubG9nIGluc2lkZSBuZXN0ZWQgZnVuY3Rpb24gXHUyMDE0IGB0aGlzYCBpcyBub3QgY2FwdHVyZWQuXG4gICAgICAgICAgbG9nKGBbdHJhbnNwb3J0LWZhY3Rvcnk6JHtvcHRpb25zLnR5cGV9XSBBdXRvLXN0YXJ0ZWQgQXBwaXVtIHNlcnZlciBzdG9wcGVkLmApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbXVsYXRvclByb2Nlc3MpIHtcbiAgICAgICAgICBraWxsUHJvY2Vzc1RyZWUoZW11bGF0b3JQcm9jZXNzKTtcbiAgICAgICAgICBsb2coYFt0cmFuc3BvcnQtZmFjdG9yeToke29wdGlvbnMudHlwZX1dIEF1dG8tc3RhcnRlZCBlbXVsYXRvciBzdG9wcGVkLmApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgIGlmIChhcHBpdW1Qcm9jZXNzKSB7XG4gICAgICAgIGtpbGxQcm9jZXNzVHJlZShhcHBpdW1Qcm9jZXNzKTtcbiAgICAgICAgdGhpcy5sb2coJ0tpbGxlZCBhdXRvLXN0YXJ0ZWQgQXBwaXVtIHNlcnZlciBhZnRlciBjb25uZWN0aW9uIGZhaWx1cmUuJyk7XG4gICAgICB9XG4gICAgICBpZiAoZW11bGF0b3JQcm9jZXNzKSB7XG4gICAgICAgIGtpbGxQcm9jZXNzVHJlZShlbXVsYXRvclByb2Nlc3MpO1xuICAgICAgICB0aGlzLmxvZygnS2lsbGVkIGF1dG8tc3RhcnRlZCBlbXVsYXRvciBhZnRlciBjb25uZWN0aW9uIGZhaWx1cmUuJyk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNoZWNrQXBwaXVtUmVhY2hhYmxlKHVybDogVVJMKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHN0YXR1c1VybCA9IG5ldyBVUkwoJy9zdGF0dXMnLCB1cmwpO1xuICAgICAgY29uc3QgcmVxID0gaHR0cC5nZXQoc3RhdHVzVXJsLCB7IHRpbWVvdXQ6IEFQUElVTV9QUkVGTElHSFRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgfSwgKHJlcykgPT4ge1xuICAgICAgICByZXMucmVzdW1lKCk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0pO1xuICAgICAgcmVxLm9uKCd0aW1lb3V0JywgKCkgPT4ge1xuICAgICAgICByZXEuZGVzdHJveSgpO1xuICAgICAgICByZWplY3QoXG4gICAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgICAgYEFwcGl1bSBzZXJ2ZXIgYXQgJHt1cmwub3JpZ2lufSBkaWQgbm90IHJlc3BvbmQgd2l0aGluICR7U3RyaW5nKEFQUElVTV9QUkVGTElHSFRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpfW1zLiBJcyB0aGUgQXBwaXVtIHNlcnZlciBydW5uaW5nP2BcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIHJlcS5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIHJlamVjdChcbiAgICAgICAgICBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgQ2Fubm90IHJlYWNoIEFwcGl1bSBzZXJ2ZXIgYXQgJHt1cmwub3JpZ2lufTogJHtlcnIubWVzc2FnZX0uIElzIHRoZSBBcHBpdW0gc2VydmVyIHJ1bm5pbmc/YFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjaGVja0RldmljZUNvbm5lY3RlZChkZXZpY2VJZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgbmV3IFByb21pc2U8c3RyaW5nPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBleGVjRmlsZSgnYWRiJywgWydkZXZpY2VzJ10sIHsgdGltZW91dDogQURCX0RFVklDRV9DSEVDS19USU1FT1VUX0lOX01JTExJU0VDT05EUyB9LCAoZXJyb3IsIHN0ZG91dCwgc3RkZXJyKSA9PiB7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYEZhaWxlZCB0byBydW4gJ2FkYiBkZXZpY2VzJzogJHtlcnJvci5tZXNzYWdlfS4gSXMgQURCIGluc3RhbGxlZCBhbmQgaW4gUEFUSD9gKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGRlcnIpIHtcbiAgICAgICAgICB0aGlzLmxvZyhgQURCIHN0ZGVycjogJHtzdGRlcnIudHJpbSgpfWApO1xuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUoc3Rkb3V0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgY29uc3QgbGluZXMgPSBvdXRwdXQuc3BsaXQoJ1xcbicpLm1hcCgobGluZSkgPT4gbGluZS50cmltKCkpLmZpbHRlcigobGluZSkgPT4gbGluZS5sZW5ndGggPiAwKTtcbiAgICBjb25zdCBkZXZpY2VMaW5lID0gbGluZXMuZmluZCgobGluZSkgPT4gbGluZS5zdGFydHNXaXRoKGRldmljZUlkKSk7XG4gICAgcmV0dXJuIGRldmljZUxpbmU/LmluY2x1ZGVzKCdcXHRkZXZpY2UnKSA/PyBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZW5zdXJlRGV2aWNlQ29ubmVjdGVkKGF2ZE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCwgZGV2aWNlSWQ6IHN0cmluZyk6IFByb21pc2U8Q2hpbGRQcm9jZXNzIHwgdW5kZWZpbmVkPiB7XG4gICAgdGhpcy5sb2coYENoZWNraW5nIGRldmljZSAke2RldmljZUlkfSBpcyBjb25uZWN0ZWQgdmlhIEFEQi4uLmApO1xuXG4gICAgaWYgKGF3YWl0IHRoaXMuY2hlY2tEZXZpY2VDb25uZWN0ZWQoZGV2aWNlSWQpKSB7XG4gICAgICB0aGlzLmxvZyhgRGV2aWNlICR7ZGV2aWNlSWR9IGlzIGNvbm5lY3RlZC5gKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKCFhdmROYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBEZXZpY2UgXCIke2RldmljZUlkfVwiIGlzIG5vdCBjb25uZWN0ZWQuIFN0YXJ0IHRoZSBlbXVsYXRvciBiZWZvcmUgcnVubmluZyBpbnRlZ3JhdGlvbiB0ZXN0cyxgXG4gICAgICAgICAgKyAnIG9yIHNldCBhdmROYW1lIGluIHRyYW5zcG9ydCBvcHRpb25zIHRvIGF1dG8tc3RhcnQgaXQuJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhgRGV2aWNlICR7ZGV2aWNlSWR9IG5vdCBmb3VuZCwgc3RhcnRpbmcgZW11bGF0b3IgQVZEIFwiJHthdmROYW1lfVwiLi4uYCk7XG4gICAgY29uc3QgZW11bGF0b3JQcm9jZXNzID0gdGhpcy5zdGFydEVtdWxhdG9yKGF2ZE5hbWUpO1xuICAgIGF3YWl0IHRoaXMud2FpdEZvckRldmljZShkZXZpY2VJZCk7XG4gICAgdGhpcy5sb2coYEVtdWxhdG9yIFwiJHthdmROYW1lfVwiIHN0YXJ0ZWQsIGRldmljZSAke2RldmljZUlkfSBpcyBjb25uZWN0ZWQuYCk7XG4gICAgcmV0dXJuIGVtdWxhdG9yUHJvY2VzcztcbiAgfVxuXG4gIHByaXZhdGUgbG9nKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIGxvZyhgW3RyYW5zcG9ydC1mYWN0b3J5OiR7dGhpcy50eXBlfV0gJHttZXNzYWdlfWApO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlRW11bGF0b3JCaW5hcnkoKTogc3RyaW5nIHtcbiAgICBjb25zdCBzZGtSb290ID0gcHJvY2Vzcy5lbnZbJ0FORFJPSURfSE9NRSddID8/IHByb2Nlc3MuZW52WydBTkRST0lEX1NES19ST09UJ107XG4gICAgaWYgKCFzZGtSb290KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdDYW5ub3QgZmluZCBBbmRyb2lkIGVtdWxhdG9yOiBuZWl0aGVyIEFORFJPSURfSE9NRSBub3IgQU5EUk9JRF9TREtfUk9PVCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGpvaW4oc2RrUm9vdCwgJ2VtdWxhdG9yJywgJ2VtdWxhdG9yJyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRLZXlFdmVudChkZXZpY2VJZDogc3RyaW5nLCBrZXlDb2RlOiBudW1iZXIsIGRlc2NyaXB0aW9uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgZXhlY0ZpbGUoXG4gICAgICAgICdhZGInLFxuICAgICAgICBbJy1zJywgZGV2aWNlSWQsICdzaGVsbCcsICdpbnB1dCcsICdrZXlldmVudCcsIFN0cmluZyhrZXlDb2RlKV0sXG4gICAgICAgIHsgdGltZW91dDogQURCX0RFVklDRV9DSEVDS19USU1FT1VUX0lOX01JTExJU0VDT05EUyB9LFxuICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMubG9nKFxuICAgICAgICAgICAgICBgV2FybmluZzogZmFpbGVkIHRvICR7ZGVzY3JpcHRpb259IChrZXlldmVudCAke1N0cmluZyhrZXlDb2RlKX0pOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ3Vua25vd24gZXJyb3InfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzdGFydEFwcGl1bUFuZEVtdWxhdG9yKHBhcmFtczogU3RhcnRBcHBpdW1BbmRFbXVsYXRvclBhcmFtcyk6IFByb21pc2U8W0NoaWxkUHJvY2VzcyB8IHVuZGVmaW5lZCwgQ2hpbGRQcm9jZXNzIHwgdW5kZWZpbmVkXT4ge1xuICAgIGNvbnN0IHsgYXBwaXVtVXJsLCBhdmROYW1lLCBkZXZpY2VJZCwgcG9ydCwgc2hvdWxkQXV0b1N0YXJ0QXBwaXVtIH0gPSBwYXJhbXM7XG5cbiAgICBsZXQgbmVlZHNBcHBpdW1TdGFydCA9IGZhbHNlO1xuXG4gICAgdGhpcy5sb2coYENoZWNraW5nIEFwcGl1bSBzZXJ2ZXIgYXQgJHthcHBpdW1VcmwuaHJlZn0uLi5gKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5jaGVja0FwcGl1bVJlYWNoYWJsZShhcHBpdW1VcmwpO1xuICAgICAgdGhpcy5sb2coJ0FwcGl1bSBzZXJ2ZXIgaXMgcmVhY2hhYmxlLicpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICBpZiAoc2hvdWxkQXV0b1N0YXJ0QXBwaXVtID09PSBmYWxzZSkge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICAgIG5lZWRzQXBwaXVtU3RhcnQgPSB0cnVlO1xuICAgIH1cblxuICAgIGxldCBhcHBpdW1Qcm9jZXNzOiBDaGlsZFByb2Nlc3MgfCB1bmRlZmluZWQ7XG5cbiAgICBpZiAobmVlZHNBcHBpdW1TdGFydCkge1xuICAgICAgdGhpcy5sb2coYEFwcGl1bSBub3QgcmVhY2hhYmxlLCBhdXRvLXN0YXJ0aW5nIG9uIHBvcnQgJHtTdHJpbmcocG9ydCl9Li4uYCk7XG4gICAgICBhcHBpdW1Qcm9jZXNzID0gdGhpcy5zdGFydEFwcGl1bVNlcnZlcihwb3J0KTtcbiAgICB9XG5cbiAgICBjb25zdCBbLCBlbXVsYXRvclByb2Nlc3NdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgbmVlZHNBcHBpdW1TdGFydFxuICAgICAgICA/IHRoaXMud2FpdEZvckFwcGl1bVJlYWR5KGFwcGl1bVVybCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2coJ0F1dG8tc3RhcnRlZCBBcHBpdW0gc2VydmVyIGlzIHJlYWR5LicpO1xuICAgICAgICB9KVxuICAgICAgICA6IFByb21pc2UucmVzb2x2ZSgpLFxuICAgICAgdGhpcy5lbnN1cmVEZXZpY2VDb25uZWN0ZWQoYXZkTmFtZSwgZGV2aWNlSWQpXG4gICAgXSk7XG5cbiAgICByZXR1cm4gW2FwcGl1bVByb2Nlc3MsIGVtdWxhdG9yUHJvY2Vzc107XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0QXBwaXVtU2VydmVyKHBvcnQ6IG51bWJlcik6IENoaWxkUHJvY2VzcyB7XG4gICAgY29uc3QgY2hpbGQgPSBzcGF3bihgbnB4IGFwcGl1bSAtLWxvZy10aW1lc3RhbXAgLS1wb3J0ICR7U3RyaW5nKHBvcnQpfWAsIHtcbiAgICAgIGRldGFjaGVkOiB0cnVlLFxuICAgICAgc2hlbGw6IHRydWUsXG4gICAgICBzdGRpbzogWydpZ25vcmUnLCAnaW5oZXJpdCcsICdpbmhlcml0J11cbiAgICB9KTtcblxuICAgIGNoaWxkLnVucmVmKCk7XG4gICAgcmV0dXJuIGNoaWxkO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydEVtdWxhdG9yKGF2ZE5hbWU6IHN0cmluZyk6IENoaWxkUHJvY2VzcyB7XG4gICAgY29uc3QgZW11bGF0b3JCaW5hcnkgPSB0aGlzLnJlc29sdmVFbXVsYXRvckJpbmFyeSgpO1xuICAgIGNvbnN0IGFyZ3MgPSBidWlsZEVtdWxhdG9yQXJncyhhdmROYW1lKTtcbiAgICB0aGlzLmxvZyhgUnVubmluZzogJHtlbXVsYXRvckJpbmFyeX0gJHthcmdzLmpvaW4oJyAnKX1gKTtcbiAgICBjb25zdCBjaGlsZCA9IHNwYXduKGVtdWxhdG9yQmluYXJ5LCBhcmdzLCB7XG4gICAgICBkZXRhY2hlZDogdHJ1ZSxcbiAgICAgIHN0ZGlvOiBbJ2lnbm9yZScsICdpZ25vcmUnLCAnaWdub3JlJ11cbiAgICB9KTtcblxuICAgIGNoaWxkLnVucmVmKCk7XG4gICAgcmV0dXJuIGNoaWxkO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB3YWl0Rm9yQXBwaXVtUmVhZHkodXJsOiBVUkwpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmxvZyhcbiAgICAgIGBXYWl0aW5nIGZvciBBcHBpdW0gYXQgJHt1cmwuaHJlZn0gKHRpbWVvdXQ6ICR7U3RyaW5nKEFQUElVTV9TVEFSVF9USU1FT1VUX0lOX01JTExJU0VDT05EUyl9bXMsIHBvbGw6ICR7XG4gICAgICAgIFN0cmluZyhBUFBJVU1fU1RBUlRfUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMpXG4gICAgICB9bXMpLi4uYFxuICAgICk7XG4gICAgY29uc3QgZGVhZGxpbmUgPSBEYXRlLm5vdygpICsgQVBQSVVNX1NUQVJUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTO1xuXG4gICAgd2hpbGUgKERhdGUubm93KCkgPCBkZWFkbGluZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5jaGVja0FwcGl1bVJlYWNoYWJsZSh1cmwpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICBzZXRUaW1lb3V0KHJlc29sdmUsIEFQUElVTV9TVEFSVF9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBBdXRvLXN0YXJ0ZWQgQXBwaXVtIHNlcnZlciBkaWQgbm90IGJlY29tZSByZWFkeSB3aXRoaW4gJHtTdHJpbmcoQVBQSVVNX1NUQVJUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKX1tc2BcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB3YWl0Rm9yQm9vdChkZXZpY2VJZDogc3RyaW5nLCBkZWFkbGluZTogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcmVtYWluaW5nTXMgPSBNYXRoLm1heCgwLCBkZWFkbGluZSAtIERhdGUubm93KCkpO1xuICAgIHRoaXMubG9nKFxuICAgICAgYFdhaXRpbmcgZm9yIGRldmljZSAke2RldmljZUlkfSB0byBmaW5pc2ggYm9vdGluZyAocmVtYWluaW5nOiAke1N0cmluZyhyZW1haW5pbmdNcyl9bXMsIHBvbGw6ICR7XG4gICAgICAgIFN0cmluZyhFTVVMQVRPUl9CT09UX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTKVxuICAgICAgfW1zKS4uLmBcbiAgICApO1xuXG4gICAgd2hpbGUgKERhdGUubm93KCkgPCBkZWFkbGluZSkge1xuICAgICAgY29uc3QgaXNCb290ZWQgPSBhd2FpdCBuZXcgUHJvbWlzZTxib29sZWFuPigocmVzb2x2ZSkgPT4ge1xuICAgICAgICBleGVjRmlsZShcbiAgICAgICAgICAnYWRiJyxcbiAgICAgICAgICBbJy1zJywgZGV2aWNlSWQsICdzaGVsbCcsICdnZXRwcm9wJywgJ3N5cy5ib290X2NvbXBsZXRlZCddLFxuICAgICAgICAgIHsgdGltZW91dDogQURCX0RFVklDRV9DSEVDS19USU1FT1VUX0lOX01JTExJU0VDT05EUyB9LFxuICAgICAgICAgIChfZXJyb3IsIHN0ZG91dCkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZShzdGRvdXQudHJpbSgpID09PSAnMScpO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoaXNCb290ZWQpIHtcbiAgICAgICAgdGhpcy5sb2coYERldmljZSAke2RldmljZUlkfSBib290IGNvbXBsZXRlZC5gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KHJlc29sdmUsIEVNVUxBVE9SX0JPT1RfUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYERldmljZSBcIiR7ZGV2aWNlSWR9XCIgY29ubmVjdGVkIGJ1dCBkaWQgbm90IGZpbmlzaCBib290aW5nIHdpdGhpbiAke1N0cmluZyhFTVVMQVRPUl9CT09UX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKX1tcy5gXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgd2FpdEZvckRldmljZShkZXZpY2VJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5sb2coXG4gICAgICBgV2FpdGluZyBmb3IgZGV2aWNlICR7ZGV2aWNlSWR9IHRvIGFwcGVhciBpbiBBREIgKHRpbWVvdXQ6ICR7U3RyaW5nKEVNVUxBVE9SX0JPT1RfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpfW1zLCBwb2xsOiAke1xuICAgICAgICBTdHJpbmcoRU1VTEFUT1JfQk9PVF9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUylcbiAgICAgIH1tcykuLi5gXG4gICAgKTtcbiAgICBjb25zdCBkZWFkbGluZSA9IERhdGUubm93KCkgKyBFTVVMQVRPUl9CT09UX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTO1xuXG4gICAgd2hpbGUgKERhdGUubm93KCkgPCBkZWFkbGluZSkge1xuICAgICAgaWYgKGF3YWl0IHRoaXMuY2hlY2tEZXZpY2VDb25uZWN0ZWQoZGV2aWNlSWQpKSB7XG4gICAgICAgIHRoaXMubG9nKGBEZXZpY2UgJHtkZXZpY2VJZH0gYXBwZWFyZWQgaW4gQURCLCB3YWl0aW5nIGZvciBib290IHRvIGNvbXBsZXRlLi4uYCk7XG4gICAgICAgIGF3YWl0IHRoaXMud2FpdEZvckJvb3QoZGV2aWNlSWQsIGRlYWRsaW5lKTtcbiAgICAgICAgYXdhaXQgdGhpcy53YWtlU2NyZWVuKGRldmljZUlkKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KHJlc29sdmUsIEVNVUxBVE9SX0JPT1RfUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEVtdWxhdG9yIGRldmljZSBcIiR7ZGV2aWNlSWR9XCIgZGlkIG5vdCBhcHBlYXIgd2l0aGluICR7U3RyaW5nKEVNVUxBVE9SX0JPT1RfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpfW1zLmBcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB3YWtlU2NyZWVuKGRldmljZUlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmxvZyhgV2FraW5nIHNjcmVlbiBvbiBkZXZpY2UgJHtkZXZpY2VJZH0uLi5gKTtcblxuICAgIGF3YWl0IHRoaXMuc2VuZEtleUV2ZW50KGRldmljZUlkLCBLRVlDT0RFX1dBS0VVUCwgJ3dha2Ugc2NyZWVuJyk7XG4gICAgYXdhaXQgdGhpcy5zZW5kS2V5RXZlbnQoZGV2aWNlSWQsIEtFWUNPREVfTUVOVSwgJ2Rpc21pc3MgbG9jayBzY3JlZW4nKTtcblxuICAgIHRoaXMubG9nKGBTY3JlZW4gd2FrZSBjb21wbGV0ZSBvbiBkZXZpY2UgJHtkZXZpY2VJZH0uYCk7XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHRyYW5zcG9ydCBpbnN0YW5jZSBmcm9tIHRoZSBnaXZlbiBvcHRpb25zLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVHJhbnNwb3J0IGNvbmZpZ3VyYXRpb24uIERlZmF1bHRzIHRvIENMSSB0cmFuc3BvcnQuXG4gKiBAcmV0dXJucyBBIG5ldyB0cmFuc3BvcnQgaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVUcmFuc3BvcnRGcm9tT3B0aW9ucyhvcHRpb25zPzogT2JzaWRpYW5UcmFuc3BvcnRPcHRpb25zKTogUHJvbWlzZTxPYnNpZGlhblRyYW5zcG9ydD4ge1xuICBjb25zdCB0eXBlID0gb3B0aW9ucz8udHlwZSA/PyBERUZBVUxUX1RSQU5TUE9SVF9UWVBFO1xuXG4gIGlmICghb3B0aW9ucyB8fCBvcHRpb25zLnR5cGUgPT09ICdvYnNpZGlhbi1jbGknKSB7XG4gICAgbG9nKGBbdHJhbnNwb3J0LWZhY3Rvcnk6JHt0eXBlfV0gQ3JlYXRpbmcgRGVza3RvcENsaVRyYW5zcG9ydGApO1xuICAgIHJldHVybiBuZXcgRGVza3RvcENsaVRyYW5zcG9ydCgpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMudHlwZSA9PT0gJ29ic2lkaWFuLWNkcCcpIHtcbiAgICBsb2coYFt0cmFuc3BvcnQtZmFjdG9yeToke3R5cGV9XSBDcmVhdGluZyBEZXNrdG9wQ2RwVHJhbnNwb3J0IChob3N0PSR7b3B0aW9ucy5ob3N0ID8/ICdsb2NhbGhvc3QnfSwgcG9ydD0ke1N0cmluZyhvcHRpb25zLnBvcnQgPz8gQ0RQX0RFRkFVTFRfUE9SVCl9KWApO1xuICAgIHJldHVybiBuZXcgRGVza3RvcENkcFRyYW5zcG9ydCh7XG4gICAgICAuLi4ob3B0aW9ucy5ob3N0ICE9PSB1bmRlZmluZWQgJiYgeyBjZHBIb3N0OiBvcHRpb25zLmhvc3QgfSksXG4gICAgICAuLi4ob3B0aW9ucy5wb3J0ICE9PSB1bmRlZmluZWQgJiYgeyBjZHBQb3J0OiBvcHRpb25zLnBvcnQgfSksXG4gICAgICAuLi4ob3B0aW9ucy5jb21tYW5kVGltZW91dEluTWlsbGlzZWNvbmRzICE9PSB1bmRlZmluZWQgJiYgeyBjb21tYW5kVGltZW91dEluTWlsbGlzZWNvbmRzOiBvcHRpb25zLmNvbW1hbmRUaW1lb3V0SW5NaWxsaXNlY29uZHMgfSlcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IGZhY3RvcnkgPSBuZXcgQXBwaXVtVHJhbnNwb3J0RmFjdG9yeSh0eXBlKTtcbiAgcmV0dXJuIGZhY3RvcnkuY3JlYXRlKG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBjYWNoZWQgdHJhbnNwb3J0IGluc3RhbmNlLCBjcmVhdGluZyBvbmUgZnJvbSB0aGUgZ2l2ZW4gb3B0aW9uc1xuICogaWYgbm90IGFscmVhZHkgY2FjaGVkLlxuICpcbiAqIFRoZSB0cmFuc3BvcnQgaXMgY2FjaGVkIHBlciB3b3JrZXIgcHJvY2VzcyBzbyBXZWJTb2NrZXQvQXBwaXVtIHNlc3Npb25zXG4gKiBhcmUgcmV1c2VkIGFjcm9zcyBjYWxscyB3aXRoaW4gdGhlIHNhbWUgdGVzdCB3b3JrZXIuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUcmFuc3BvcnQgY29uZmlndXJhdGlvbi4gRGVmYXVsdHMgdG8gQ0xJIHRyYW5zcG9ydC5cbiAqIEByZXR1cm5zIFRoZSBjYWNoZWQgb3IgbmV3bHkgY3JlYXRlZCB0cmFuc3BvcnQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRPckNyZWF0ZVRyYW5zcG9ydChvcHRpb25zPzogT2JzaWRpYW5UcmFuc3BvcnRPcHRpb25zKTogUHJvbWlzZTxPYnNpZGlhblRyYW5zcG9ydD4ge1xuICBpZiAoY2FjaGVkVHJhbnNwb3J0KSB7XG4gICAgcmV0dXJuIGNhY2hlZFRyYW5zcG9ydDtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNyZWF0ZVRyYW5zcG9ydEZyb21PcHRpb25zKG9wdGlvbnMpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS1hdG9taWMtdXBkYXRlcyAtLSBTaW5nbGUtdGhyZWFkZWQgd29ya2VyOyBubyBjb25jdXJyZW50IHdyaXRlcy5cbiAgY2FjaGVkVHJhbnNwb3J0ID0gcmVzdWx0O1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEtpbGxzIGEgY2hpbGQgcHJvY2VzcyBhbmQgaXRzIGVudGlyZSBwcm9jZXNzIHRyZWUuXG4gKlxuICogT24gV2luZG93cywgYGNoaWxkLmtpbGwoKWAgb25seSBzZW5kcyBTSUdURVJNIHRvIHRoZSBkaXJlY3QgcHJvY2VzcyxcbiAqIGxlYXZpbmcgc3Bhd25lZCBncmFuZGNoaWxkcmVuIChlLmcuIFFFTVUsIFVpQXV0b21hdG9yKSBhbGl2ZS5cbiAqIGB0YXNra2lsbCAvRiAvVCAvUElEYCBmb3JjZWZ1bGx5IHRlcm1pbmF0ZXMgdGhlIGVudGlyZSB0cmVlLlxuICpcbiAqIEBwYXJhbSBjaGlsZCAtIFRoZSBjaGlsZCBwcm9jZXNzIHRvIGtpbGwuXG4gKi9cbmZ1bmN0aW9uIGtpbGxQcm9jZXNzVHJlZShjaGlsZDogQ2hpbGRQcm9jZXNzKTogdm9pZCB7XG4gIGlmIChjaGlsZC5waWQgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWNGaWxlU3luYygndGFza2tpbGwnLCBbJy9GJywgJy9UJywgJy9QSUQnLCBTdHJpbmcoY2hpbGQucGlkKV0sIHsgc3RkaW86ICdpZ25vcmUnIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICBsb2coXG4gICAgICAgIGBbdHJhbnNwb3J0LWZhY3RvcnldIHRhc2traWxsIGZvciBQSUQgJHtTdHJpbmcoY2hpbGQucGlkKX0gZmFpbGVkIChtYXkgaGF2ZSBhbHJlYWR5IGV4aXRlZCk6ICR7XG4gICAgICAgICAgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAndW5rbm93biBlcnJvcidcbiAgICAgICAgfWBcbiAgICAgICk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNoaWxkLmtpbGwoJ1NJR0tJTEwnKTtcbiAgfVxufVxuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVVBLGdDQUlPO0FBQ1AsdUJBQWlCO0FBQ2pCLHVCQUFxQjtBQUNyQiwwQkFBb0I7QUFDcEIseUJBQXVCO0FBUXZCLDJCQUFrQztBQUNsQyxpQkFBb0I7QUFDcEIsOEJBQWdDO0FBQ2hDLG1DQUFvQztBQUNwQyxtQ0FBb0M7QUFFcEMsTUFBTSxjQUFjO0FBQ3BCLE1BQU0sZUFBZSxHQUFHLFdBQVc7QUFDbkMsTUFBTSwyQ0FBMkM7QUFDakQsTUFBTSxnQ0FBZ0M7QUFDdEMsTUFBTSxrREFBa0Q7QUFDeEQsTUFBTSwyQ0FBMkM7QUFDakQsTUFBTSw2Q0FBNkM7QUFDbkQsTUFBTSx1Q0FBdUM7QUFDN0MsTUFBTSxtQkFBbUI7QUFDekIsTUFBTSxrQ0FBa0M7QUFDeEMsTUFBTSx5QkFBeUI7QUFDL0IsTUFBTSw4Q0FBOEM7QUFDcEQsTUFBTSx3Q0FBd0M7QUFDOUMsTUFBTSxlQUFlO0FBQ3JCLE1BQU0saUJBQWlCO0FBQ3ZCLE1BQU0seUNBQXlD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SztBQUFBLE1BQzFELEdBQUksUUFBUSxpQ0FBaUMsVUFBYSxFQUFFLDhCQUE4QixRQUFRLDZCQUE2QjtBQUFBLElBQ2pJLENBQUM7QUFBQSxFQUNIO0FBRUEsUUFBTSxVQUFVLElBQUksdUJBQXVCLElBQUk7QUFDL0MsU0FBTyxRQUFRLE9BQU8sT0FBTztBQUMvQjtBQVlBLGVBQXNCLHFCQUFxQixTQUFnRTtBQUN6RyxNQUFJLGlCQUFpQjtBQUNuQixXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sU0FBUyxNQUFNLDJCQUEyQixPQUFPO0FBRXZELG9CQUFrQjtBQUNsQixTQUFPO0FBQ1Q7QUFXQSxTQUFTLGdCQUFnQixPQUEyQjtBQUNsRCxNQUFJLE1BQU0sUUFBUSxRQUFXO0FBQzNCO0FBQUEsRUFDRjtBQUVBLE1BQUksb0JBQUFBLFFBQVEsYUFBYSxTQUFTO0FBQ2hDLFFBQUk7QUFDRixrREFBYSxZQUFZLENBQUMsTUFBTSxNQUFNLFFBQVEsT0FBTyxNQUFNLEdBQUcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxTQUFTLENBQUM7QUFBQSxJQUN2RixTQUFTLE9BQWdCO0FBQ3ZCO0FBQUEsUUFDRSx3Q0FBd0MsT0FBTyxNQUFNLEdBQUcsQ0FBQyxzQ0FDdkQsaUJBQWlCLFFBQVEsTUFBTSxVQUFVLGVBQzNDO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGLE9BQU87QUFDTCxVQUFNLEtBQUssU0FBUztBQUFBLEVBQ3RCO0FBQ0Y7IiwKICAibmFtZXMiOiBbImtpbGxBdXRvU3RhcnRlZFByb2Nlc3NlcyIsICJodHRwIiwgInByb2Nlc3MiXQp9Cg==
|
package/dist/lib/esm/library.mjs
CHANGED
|
@@ -15,8 +15,8 @@ import { DesktopCliTransport } from "./transport-desktop-cli.mjs";
|
|
|
15
15
|
const APP_PACKAGE = "md.obsidian";
|
|
16
16
|
const APP_ACTIVITY = `${APP_PACKAGE}.MainActivity`;
|
|
17
17
|
const ADB_DEVICE_CHECK_TIMEOUT_IN_MILLISECONDS = 5e3;
|
|
18
|
-
const APPIUM_CONNECTION_RETRY_COUNT =
|
|
19
|
-
const APPIUM_CONNECTION_RETRY_TIMEOUT_IN_MILLISECONDS =
|
|
18
|
+
const APPIUM_CONNECTION_RETRY_COUNT = 3;
|
|
19
|
+
const APPIUM_CONNECTION_RETRY_TIMEOUT_IN_MILLISECONDS = 18e4;
|
|
20
20
|
const APPIUM_PREFLIGHT_TIMEOUT_IN_MILLISECONDS = 5e3;
|
|
21
21
|
const APPIUM_START_POLL_INTERVAL_IN_MILLISECONDS = 500;
|
|
22
22
|
const APPIUM_START_TIMEOUT_IN_MILLISECONDS = 6e4;
|
|
@@ -27,8 +27,8 @@ const EMULATOR_BOOT_POLL_INTERVAL_IN_MILLISECONDS = 2e3;
|
|
|
27
27
|
const EMULATOR_BOOT_TIMEOUT_IN_MILLISECONDS = 12e4;
|
|
28
28
|
const KEYCODE_MENU = 82;
|
|
29
29
|
const KEYCODE_WAKEUP = 224;
|
|
30
|
-
const SERVER_INSTALL_TIMEOUT_IN_MILLISECONDS =
|
|
31
|
-
const SERVER_LAUNCH_TIMEOUT_IN_MILLISECONDS =
|
|
30
|
+
const SERVER_INSTALL_TIMEOUT_IN_MILLISECONDS = 12e4;
|
|
31
|
+
const SERVER_LAUNCH_TIMEOUT_IN_MILLISECONDS = 12e4;
|
|
32
32
|
let cachedTransport;
|
|
33
33
|
class AppiumTransportFactory {
|
|
34
34
|
type;
|
|
@@ -382,4 +382,4 @@ export {
|
|
|
382
382
|
createTransportFromOptions,
|
|
383
383
|
getOrCreateTransport
|
|
384
384
|
};
|
|
385
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3RyYW5zcG9ydC1mYWN0b3J5LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogRmFjdG9yeSBmb3IgY3JlYXRpbmcgdHJhbnNwb3J0IGluc3RhbmNlcyBmcm9tIHtAbGluayBPYnNpZGlhblRyYW5zcG9ydE9wdGlvbnN9LlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIGZhY3RvcnkgY292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB0eXBlIHsgQ2hpbGRQcm9jZXNzIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcblxuaW1wb3J0IHtcbiAgZXhlY0ZpbGUsXG4gIGV4ZWNGaWxlU3luYyxcbiAgc3Bhd25cbn0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCBodHRwIGZyb20gJ25vZGU6aHR0cCc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgeyByZW1vdGUgfSBmcm9tICd3ZWJkcml2ZXJpbyc7XG5cbmltcG9ydCB0eXBlIHtcbiAgT2JzaWRpYW5BbmRyb2lkQXBwaXVtVHJhbnNwb3J0T3B0aW9ucyxcbiAgT2JzaWRpYW5UcmFuc3BvcnRPcHRpb25zXG59IGZyb20gJy4vdHJhbnNwb3J0LW9wdGlvbnMubWpzJztcbmltcG9ydCB0eXBlIHsgT2JzaWRpYW5UcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC5tanMnO1xuXG5pbXBvcnQgeyBidWlsZEVtdWxhdG9yQXJncyB9IGZyb20gJy4vZW11bGF0b3ItYXJncy5tanMnO1xuaW1wb3J0IHsgbG9nIH0gZnJvbSAnLi9sb2cubWpzJztcbmltcG9ydCB7IEFwcGl1bVRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LWFwcGl1bS5tanMnO1xuaW1wb3J0IHsgRGVza3RvcENkcFRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LWRlc2t0b3AtY2RwLm1qcyc7XG5pbXBvcnQgeyBEZXNrdG9wQ2xpVHJhbnNwb3J0IH0gZnJvbSAnLi90cmFuc3BvcnQtZGVza3RvcC1jbGkubWpzJztcblxuY29uc3QgQVBQX1BBQ0tBR0UgPSAnbWQub2JzaWRpYW4nO1xuY29uc3QgQVBQX0FDVElWSVRZID0gYCR7QVBQX1BBQ0tBR0V9Lk1haW5BY3Rpdml0eWA7XG5jb25zdCBBREJfREVWSUNFX0NIRUNLX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gNTAwMDtcbmNvbnN0IEFQUElVTV9DT05ORUNUSU9OX1JFVFJZX0NPVU5UID0gMTtcbmNvbnN0IEFQUElVTV9DT05ORUNUSU9OX1JFVFJZX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gNjAwMDA7XG5jb25zdCBBUFBJVU1fUFJFRkxJR0hUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gNTAwMDtcbmNvbnN0IEFQUElVTV9TVEFSVF9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyA9IDUwMDtcbmNvbnN0IEFQUElVTV9TVEFSVF9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDYwMDAwO1xuY29uc3QgQ0RQX0RFRkFVTFRfUE9SVCA9IDgzMTU7XG5jb25zdCBDT01NQU5EX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gMzAwO1xuY29uc3QgREVGQVVMVF9UUkFOU1BPUlRfVFlQRSA9ICdvYnNpZGlhbi1jbGknO1xuY29uc3QgRU1VTEFUT1JfQk9PVF9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyA9IDIwMDA7XG5jb25zdCBFTVVMQVRPUl9CT09UX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gMTIwMDAwO1xuY29uc3QgS0VZQ09ERV9NRU5VID0gODI7XG5jb25zdCBLRVlDT0RFX1dBS0VVUCA9IDIyNDtcbmNvbnN0IFNFUlZFUl9JTlNUQUxMX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gNjAwMDA7XG5jb25zdCBTRVJWRVJfTEFVTkNIX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gNjAwMDA7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIEFwcGl1bVRyYW5zcG9ydEZhY3Rvcnkuc3RhcnRBcHBpdW1BbmRFbXVsYXRvcn0uXG4gKi9cbmludGVyZmFjZSBTdGFydEFwcGl1bUFuZEVtdWxhdG9yUGFyYW1zIHtcbiAgLyoqIFRoZSBBcHBpdW0gc2VydmVyIFVSTC4gKi9cbiAgYXBwaXVtVXJsOiBVUkw7XG5cbiAgLyoqIEFWRCBuYW1lIHRvIGF1dG8tc3RhcnQgaWYgdGhlIGRldmljZSBpcyBub3QgY29ubmVjdGVkLiAqL1xuICBhdmROYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKiBEZXZpY2UgVURJRC4gKi9cbiAgZGV2aWNlSWQ6IHN0cmluZztcblxuICAvKiogVGhlIEFwcGl1bSBzZXJ2ZXIgcG9ydC4gKi9cbiAgcG9ydDogbnVtYmVyO1xuXG4gIC8qKiBXaGV0aGVyIEFwcGl1bSBhdXRvLXN0YXJ0IGlzIGFsbG93ZWQuICovXG4gIHNob3VsZEF1dG9TdGFydEFwcGl1bT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59XG5cbmxldCBjYWNoZWRUcmFuc3BvcnQ6IE9ic2lkaWFuVHJhbnNwb3J0IHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIEVuY2Fwc3VsYXRlcyBhbGwgQXBwaXVtIHRyYW5zcG9ydCBjcmVhdGlvbiBsb2dpYywgaW5jbHVkaW5nIEFwcGl1bSBzZXJ2ZXJcbiAqIHN0YXJ0dXAsIGVtdWxhdG9yIG1hbmFnZW1lbnQsIGFuZCBXZWJEcml2ZXJJTyBzZXNzaW9uIGVzdGFibGlzaG1lbnQuXG4gKlxuICogVXNpbmcgYSBjbGFzcyBhdm9pZHMgdGhyZWFkaW5nIHRoZSB0cmFuc3BvcnQgYHR5cGVgIGxhYmVsIHRocm91Z2ggZXZlcnlcbiAqIGhlbHBlciBmdW5jdGlvbiBcdTIwMTQgYHRoaXMubG9nKClgIGF1dG9tYXRpY2FsbHkgcHJlZml4ZXMgaXQuXG4gKi9cbmNsYXNzIEFwcGl1bVRyYW5zcG9ydEZhY3Rvcnkge1xuICBwcml2YXRlIHJlYWRvbmx5IHR5cGU6IHN0cmluZztcblxuICBwdWJsaWMgY29uc3RydWN0b3IodHlwZTogc3RyaW5nKSB7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIEFwcGl1bSB0cmFuc3BvcnQgYnkgZXN0YWJsaXNoaW5nIGEgV2ViRHJpdmVySU8gc2Vzc2lvbi5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBbmRyb2lkIEFwcGl1bSB0cmFuc3BvcnQgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQSBjb25maWd1cmVkIEFwcGl1bSB0cmFuc3BvcnQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY3JlYXRlKG9wdGlvbnM6IE9ic2lkaWFuQW5kcm9pZEFwcGl1bVRyYW5zcG9ydE9wdGlvbnMpOiBQcm9taXNlPE9ic2lkaWFuVHJhbnNwb3J0PiB7XG4gICAgdGhpcy5sb2coYENyZWF0aW5nIEFwcGl1bVRyYW5zcG9ydCAodXJsPSR7b3B0aW9ucy5hcHBpdW1Vcmx9LCBkZXZpY2U9JHtvcHRpb25zLmRldmljZUlkfSlgKTtcblxuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwob3B0aW9ucy5hcHBpdW1VcmwpO1xuXG4gICAgY29uc3QgcG9ydCA9IE51bWJlcih1cmwucG9ydCk7XG4gICAgaWYgKGlzTmFOKHBvcnQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcG9ydCBpbiBhcHBpdW1Vcmw6ICR7dXJsLnBvcnR9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgYXBwSWQgPSBvcHRpb25zLmFwcElkID8/IEFQUF9QQUNLQUdFO1xuXG4gICAgbGV0IGFwcGl1bVByb2Nlc3M6IENoaWxkUHJvY2VzcyB8IHVuZGVmaW5lZDtcbiAgICBsZXQgZW11bGF0b3JQcm9jZXNzOiBDaGlsZFByb2Nlc3MgfCB1bmRlZmluZWQ7XG5cbiAgICB0cnkge1xuICAgICAgW2FwcGl1bVByb2Nlc3MsIGVtdWxhdG9yUHJvY2Vzc10gPSBhd2FpdCB0aGlzLnN0YXJ0QXBwaXVtQW5kRW11bGF0b3Ioe1xuICAgICAgICBhcHBpdW1Vcmw6IHVybCxcbiAgICAgICAgYXZkTmFtZTogb3B0aW9ucy5hdmROYW1lLFxuICAgICAgICBkZXZpY2VJZDogb3B0aW9ucy5kZXZpY2VJZCxcbiAgICAgICAgcG9ydCxcbiAgICAgICAgc2hvdWxkQXV0b1N0YXJ0QXBwaXVtOiBvcHRpb25zLnNob3VsZEF1dG9TdGFydEFwcGl1bVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMubG9nKFxuICAgICAgICBgQ29ubmVjdGluZyB0byBBcHBpdW0gKGRldmljZT0ke29wdGlvbnMuZGV2aWNlSWR9LCBhcHA9JHthcHBJZH0sIHJldHJ5VGltZW91dDogJHtTdHJpbmcoQVBQSVVNX0NPTk5FQ1RJT05fUkVUUllfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpfW1zLCByZXRyaWVzOiAke1xuICAgICAgICAgIFN0cmluZyhBUFBJVU1fQ09OTkVDVElPTl9SRVRSWV9DT1VOVClcbiAgICAgICAgfSkuLi5gXG4gICAgICApO1xuICAgICAgY29uc3QgYnJvd3NlciA9IGF3YWl0IHJlbW90ZSh7XG4gICAgICAgIGNhcGFiaWxpdGllczoge1xuICAgICAgICAgICdhcHBpdW06YXBwQWN0aXZpdHknOiBBUFBfQUNUSVZJVFksXG4gICAgICAgICAgJ2FwcGl1bTphcHBQYWNrYWdlJzogYXBwSWQsXG4gICAgICAgICAgJ2FwcGl1bTphdXRvR3JhbnRQZXJtaXNzaW9ucyc6IHRydWUsXG4gICAgICAgICAgJ2FwcGl1bTphdXRvbWF0aW9uTmFtZSc6ICdVaUF1dG9tYXRvcjInLFxuICAgICAgICAgICdhcHBpdW06bmV3Q29tbWFuZFRpbWVvdXQnOiBDT01NQU5EX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTLFxuICAgICAgICAgICdhcHBpdW06bm9SZXNldCc6IHRydWUsXG4gICAgICAgICAgJ2FwcGl1bTpzZXR0aW5ncyc6IHtcbiAgICAgICAgICAgICdhcHBpdW06Y2hyb21lZHJpdmVyQXV0b2Rvd25sb2FkJzogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgJ2FwcGl1bTp1ZGlkJzogb3B0aW9ucy5kZXZpY2VJZCxcbiAgICAgICAgICAnYXBwaXVtOnVpYXV0b21hdG9yMlNlcnZlckluc3RhbGxUaW1lb3V0JzogU0VSVkVSX0lOU1RBTExfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMsXG4gICAgICAgICAgJ2FwcGl1bTp1aWF1dG9tYXRvcjJTZXJ2ZXJMYXVuY2hUaW1lb3V0JzogU0VSVkVSX0xBVU5DSF9USU1FT1VUX0lOX01JTExJU0VDT05EUyxcbiAgICAgICAgICAncGxhdGZvcm1OYW1lJzogJ0FuZHJvaWQnXG4gICAgICAgIH0sXG4gICAgICAgIGNvbm5lY3Rpb25SZXRyeUNvdW50OiBBUFBJVU1fQ09OTkVDVElPTl9SRVRSWV9DT1VOVCxcbiAgICAgICAgY29ubmVjdGlvblJldHJ5VGltZW91dDogQVBQSVVNX0NPTk5FQ1RJT05fUkVUUllfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMsXG4gICAgICAgIGhvc3RuYW1lOiB1cmwuaG9zdG5hbWUsXG4gICAgICAgIGxvZ0xldmVsOiAnd2FybicsXG4gICAgICAgIHBhdGg6IHVybC5wYXRobmFtZSxcbiAgICAgICAgcG9ydFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMubG9nKCdBcHBpdW0gc2Vzc2lvbiBlc3RhYmxpc2hlZC4nKTtcbiAgICAgIGNvbnN0IGFwcGl1bVRyYW5zcG9ydCA9IG5ldyBBcHBpdW1UcmFuc3BvcnQoe1xuICAgICAgICBhcHBJZCxcbiAgICAgICAgYnJvd3NlcixcbiAgICAgICAgZGV2aWNlSWQ6IG9wdGlvbnMuZGV2aWNlSWQsXG4gICAgICAgIHBsYXRmb3JtOiAnYW5kcm9pZCcsXG4gICAgICAgIC4uLihvcHRpb25zLnZhdWx0QmFzZVBhdGggIT09IHVuZGVmaW5lZCAmJiB7IHZhdWx0QmFzZVBhdGg6IG9wdGlvbnMudmF1bHRCYXNlUGF0aCB9KSxcbiAgICAgICAgLi4uKG9wdGlvbnMud2Vidmlld1RpbWVvdXRJbk1pbGxpc2Vjb25kcyAhPT0gdW5kZWZpbmVkICYmIHsgd2Vidmlld1RpbWVvdXRJbk1pbGxpc2Vjb25kczogb3B0aW9ucy53ZWJ2aWV3VGltZW91dEluTWlsbGlzZWNvbmRzIH0pXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgb3JpZ2luYWxEaXNwb3NlID0gYXBwaXVtVHJhbnNwb3J0LmRpc3Bvc2UuYmluZChhcHBpdW1UcmFuc3BvcnQpO1xuICAgICAgY29uc3QgdHJhbnNwb3J0OiBPYnNpZGlhblRyYW5zcG9ydCA9IGFwcGl1bVRyYW5zcG9ydDtcbiAgICAgIHRyYW5zcG9ydC5kaXNwb3NlID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IG9yaWdpbmFsRGlzcG9zZSgpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGtpbGxBdXRvU3RhcnRlZFByb2Nlc3NlcygpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB0cmFuc3BvcnQuZGlzcG9zZVN5bmMgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIGtpbGxBdXRvU3RhcnRlZFByb2Nlc3NlcygpO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHRyYW5zcG9ydDtcblxuICAgICAgZnVuY3Rpb24ga2lsbEF1dG9TdGFydGVkUHJvY2Vzc2VzKCk6IHZvaWQge1xuICAgICAgICBpZiAoYXBwaXVtUHJvY2Vzcykge1xuICAgICAgICAgIGtpbGxQcm9jZXNzVHJlZShhcHBpdW1Qcm9jZXNzKTtcbiAgICAgICAgICAvLyBDYW5ub3QgdXNlIHRoaXMubG9nIGluc2lkZSBuZXN0ZWQgZnVuY3Rpb24gXHUyMDE0IGB0aGlzYCBpcyBub3QgY2FwdHVyZWQuXG4gICAgICAgICAgbG9nKGBbdHJhbnNwb3J0LWZhY3Rvcnk6JHtvcHRpb25zLnR5cGV9XSBBdXRvLXN0YXJ0ZWQgQXBwaXVtIHNlcnZlciBzdG9wcGVkLmApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbXVsYXRvclByb2Nlc3MpIHtcbiAgICAgICAgICBraWxsUHJvY2Vzc1RyZWUoZW11bGF0b3JQcm9jZXNzKTtcbiAgICAgICAgICBsb2coYFt0cmFuc3BvcnQtZmFjdG9yeToke29wdGlvbnMudHlwZX1dIEF1dG8tc3RhcnRlZCBlbXVsYXRvciBzdG9wcGVkLmApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgIGlmIChhcHBpdW1Qcm9jZXNzKSB7XG4gICAgICAgIGtpbGxQcm9jZXNzVHJlZShhcHBpdW1Qcm9jZXNzKTtcbiAgICAgICAgdGhpcy5sb2coJ0tpbGxlZCBhdXRvLXN0YXJ0ZWQgQXBwaXVtIHNlcnZlciBhZnRlciBjb25uZWN0aW9uIGZhaWx1cmUuJyk7XG4gICAgICB9XG4gICAgICBpZiAoZW11bGF0b3JQcm9jZXNzKSB7XG4gICAgICAgIGtpbGxQcm9jZXNzVHJlZShlbXVsYXRvclByb2Nlc3MpO1xuICAgICAgICB0aGlzLmxvZygnS2lsbGVkIGF1dG8tc3RhcnRlZCBlbXVsYXRvciBhZnRlciBjb25uZWN0aW9uIGZhaWx1cmUuJyk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNoZWNrQXBwaXVtUmVhY2hhYmxlKHVybDogVVJMKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHN0YXR1c1VybCA9IG5ldyBVUkwoJy9zdGF0dXMnLCB1cmwpO1xuICAgICAgY29uc3QgcmVxID0gaHR0cC5nZXQoc3RhdHVzVXJsLCB7IHRpbWVvdXQ6IEFQUElVTV9QUkVGTElHSFRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgfSwgKHJlcykgPT4ge1xuICAgICAgICByZXMucmVzdW1lKCk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0pO1xuICAgICAgcmVxLm9uKCd0aW1lb3V0JywgKCkgPT4ge1xuICAgICAgICByZXEuZGVzdHJveSgpO1xuICAgICAgICByZWplY3QoXG4gICAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgICAgYEFwcGl1bSBzZXJ2ZXIgYXQgJHt1cmwub3JpZ2lufSBkaWQgbm90IHJlc3BvbmQgd2l0aGluICR7U3RyaW5nKEFQUElVTV9QUkVGTElHSFRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpfW1zLiBJcyB0aGUgQXBwaXVtIHNlcnZlciBydW5uaW5nP2BcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIHJlcS5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIHJlamVjdChcbiAgICAgICAgICBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgQ2Fubm90IHJlYWNoIEFwcGl1bSBzZXJ2ZXIgYXQgJHt1cmwub3JpZ2lufTogJHtlcnIubWVzc2FnZX0uIElzIHRoZSBBcHBpdW0gc2VydmVyIHJ1bm5pbmc/YFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjaGVja0RldmljZUNvbm5lY3RlZChkZXZpY2VJZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgbmV3IFByb21pc2U8c3RyaW5nPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBleGVjRmlsZSgnYWRiJywgWydkZXZpY2VzJ10sIHsgdGltZW91dDogQURCX0RFVklDRV9DSEVDS19USU1FT1VUX0lOX01JTExJU0VDT05EUyB9LCAoZXJyb3IsIHN0ZG91dCwgc3RkZXJyKSA9PiB7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYEZhaWxlZCB0byBydW4gJ2FkYiBkZXZpY2VzJzogJHtlcnJvci5tZXNzYWdlfS4gSXMgQURCIGluc3RhbGxlZCBhbmQgaW4gUEFUSD9gKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGRlcnIpIHtcbiAgICAgICAgICB0aGlzLmxvZyhgQURCIHN0ZGVycjogJHtzdGRlcnIudHJpbSgpfWApO1xuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUoc3Rkb3V0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgY29uc3QgbGluZXMgPSBvdXRwdXQuc3BsaXQoJ1xcbicpLm1hcCgobGluZSkgPT4gbGluZS50cmltKCkpLmZpbHRlcigobGluZSkgPT4gbGluZS5sZW5ndGggPiAwKTtcbiAgICBjb25zdCBkZXZpY2VMaW5lID0gbGluZXMuZmluZCgobGluZSkgPT4gbGluZS5zdGFydHNXaXRoKGRldmljZUlkKSk7XG4gICAgcmV0dXJuIGRldmljZUxpbmU/LmluY2x1ZGVzKCdcXHRkZXZpY2UnKSA/PyBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZW5zdXJlRGV2aWNlQ29ubmVjdGVkKGF2ZE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCwgZGV2aWNlSWQ6IHN0cmluZyk6IFByb21pc2U8Q2hpbGRQcm9jZXNzIHwgdW5kZWZpbmVkPiB7XG4gICAgdGhpcy5sb2coYENoZWNraW5nIGRldmljZSAke2RldmljZUlkfSBpcyBjb25uZWN0ZWQgdmlhIEFEQi4uLmApO1xuXG4gICAgaWYgKGF3YWl0IHRoaXMuY2hlY2tEZXZpY2VDb25uZWN0ZWQoZGV2aWNlSWQpKSB7XG4gICAgICB0aGlzLmxvZyhgRGV2aWNlICR7ZGV2aWNlSWR9IGlzIGNvbm5lY3RlZC5gKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKCFhdmROYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBEZXZpY2UgXCIke2RldmljZUlkfVwiIGlzIG5vdCBjb25uZWN0ZWQuIFN0YXJ0IHRoZSBlbXVsYXRvciBiZWZvcmUgcnVubmluZyBpbnRlZ3JhdGlvbiB0ZXN0cyxgXG4gICAgICAgICAgKyAnIG9yIHNldCBhdmROYW1lIGluIHRyYW5zcG9ydCBvcHRpb25zIHRvIGF1dG8tc3RhcnQgaXQuJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhgRGV2aWNlICR7ZGV2aWNlSWR9IG5vdCBmb3VuZCwgc3RhcnRpbmcgZW11bGF0b3IgQVZEIFwiJHthdmROYW1lfVwiLi4uYCk7XG4gICAgY29uc3QgZW11bGF0b3JQcm9jZXNzID0gdGhpcy5zdGFydEVtdWxhdG9yKGF2ZE5hbWUpO1xuICAgIGF3YWl0IHRoaXMud2FpdEZvckRldmljZShkZXZpY2VJZCk7XG4gICAgdGhpcy5sb2coYEVtdWxhdG9yIFwiJHthdmROYW1lfVwiIHN0YXJ0ZWQsIGRldmljZSAke2RldmljZUlkfSBpcyBjb25uZWN0ZWQuYCk7XG4gICAgcmV0dXJuIGVtdWxhdG9yUHJvY2VzcztcbiAgfVxuXG4gIHByaXZhdGUgbG9nKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIGxvZyhgW3RyYW5zcG9ydC1mYWN0b3J5OiR7dGhpcy50eXBlfV0gJHttZXNzYWdlfWApO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlRW11bGF0b3JCaW5hcnkoKTogc3RyaW5nIHtcbiAgICBjb25zdCBzZGtSb290ID0gcHJvY2Vzcy5lbnZbJ0FORFJPSURfSE9NRSddID8/IHByb2Nlc3MuZW52WydBTkRST0lEX1NES19ST09UJ107XG4gICAgaWYgKCFzZGtSb290KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdDYW5ub3QgZmluZCBBbmRyb2lkIGVtdWxhdG9yOiBuZWl0aGVyIEFORFJPSURfSE9NRSBub3IgQU5EUk9JRF9TREtfUk9PVCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGpvaW4oc2RrUm9vdCwgJ2VtdWxhdG9yJywgJ2VtdWxhdG9yJyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRLZXlFdmVudChkZXZpY2VJZDogc3RyaW5nLCBrZXlDb2RlOiBudW1iZXIsIGRlc2NyaXB0aW9uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgZXhlY0ZpbGUoXG4gICAgICAgICdhZGInLFxuICAgICAgICBbJy1zJywgZGV2aWNlSWQsICdzaGVsbCcsICdpbnB1dCcsICdrZXlldmVudCcsIFN0cmluZyhrZXlDb2RlKV0sXG4gICAgICAgIHsgdGltZW91dDogQURCX0RFVklDRV9DSEVDS19USU1FT1VUX0lOX01JTExJU0VDT05EUyB9LFxuICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMubG9nKFxuICAgICAgICAgICAgICBgV2FybmluZzogZmFpbGVkIHRvICR7ZGVzY3JpcHRpb259IChrZXlldmVudCAke1N0cmluZyhrZXlDb2RlKX0pOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ3Vua25vd24gZXJyb3InfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzdGFydEFwcGl1bUFuZEVtdWxhdG9yKHBhcmFtczogU3RhcnRBcHBpdW1BbmRFbXVsYXRvclBhcmFtcyk6IFByb21pc2U8W0NoaWxkUHJvY2VzcyB8IHVuZGVmaW5lZCwgQ2hpbGRQcm9jZXNzIHwgdW5kZWZpbmVkXT4ge1xuICAgIGNvbnN0IHsgYXBwaXVtVXJsLCBhdmROYW1lLCBkZXZpY2VJZCwgcG9ydCwgc2hvdWxkQXV0b1N0YXJ0QXBwaXVtIH0gPSBwYXJhbXM7XG5cbiAgICBsZXQgbmVlZHNBcHBpdW1TdGFydCA9IGZhbHNlO1xuXG4gICAgdGhpcy5sb2coYENoZWNraW5nIEFwcGl1bSBzZXJ2ZXIgYXQgJHthcHBpdW1VcmwuaHJlZn0uLi5gKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5jaGVja0FwcGl1bVJlYWNoYWJsZShhcHBpdW1VcmwpO1xuICAgICAgdGhpcy5sb2coJ0FwcGl1bSBzZXJ2ZXIgaXMgcmVhY2hhYmxlLicpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICBpZiAoc2hvdWxkQXV0b1N0YXJ0QXBwaXVtID09PSBmYWxzZSkge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICAgIG5lZWRzQXBwaXVtU3RhcnQgPSB0cnVlO1xuICAgIH1cblxuICAgIGxldCBhcHBpdW1Qcm9jZXNzOiBDaGlsZFByb2Nlc3MgfCB1bmRlZmluZWQ7XG5cbiAgICBpZiAobmVlZHNBcHBpdW1TdGFydCkge1xuICAgICAgdGhpcy5sb2coYEFwcGl1bSBub3QgcmVhY2hhYmxlLCBhdXRvLXN0YXJ0aW5nIG9uIHBvcnQgJHtTdHJpbmcocG9ydCl9Li4uYCk7XG4gICAgICBhcHBpdW1Qcm9jZXNzID0gdGhpcy5zdGFydEFwcGl1bVNlcnZlcihwb3J0KTtcbiAgICB9XG5cbiAgICBjb25zdCBbLCBlbXVsYXRvclByb2Nlc3NdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgbmVlZHNBcHBpdW1TdGFydFxuICAgICAgICA/IHRoaXMud2FpdEZvckFwcGl1bVJlYWR5KGFwcGl1bVVybCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2coJ0F1dG8tc3RhcnRlZCBBcHBpdW0gc2VydmVyIGlzIHJlYWR5LicpO1xuICAgICAgICB9KVxuICAgICAgICA6IFByb21pc2UucmVzb2x2ZSgpLFxuICAgICAgdGhpcy5lbnN1cmVEZXZpY2VDb25uZWN0ZWQoYXZkTmFtZSwgZGV2aWNlSWQpXG4gICAgXSk7XG5cbiAgICByZXR1cm4gW2FwcGl1bVByb2Nlc3MsIGVtdWxhdG9yUHJvY2Vzc107XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0QXBwaXVtU2VydmVyKHBvcnQ6IG51bWJlcik6IENoaWxkUHJvY2VzcyB7XG4gICAgY29uc3QgY2hpbGQgPSBzcGF3bihgbnB4IGFwcGl1bSAtLWxvZy10aW1lc3RhbXAgLS1wb3J0ICR7U3RyaW5nKHBvcnQpfWAsIHtcbiAgICAgIGRldGFjaGVkOiB0cnVlLFxuICAgICAgc2hlbGw6IHRydWUsXG4gICAgICBzdGRpbzogWydpZ25vcmUnLCAnaW5oZXJpdCcsICdpbmhlcml0J11cbiAgICB9KTtcblxuICAgIGNoaWxkLnVucmVmKCk7XG4gICAgcmV0dXJuIGNoaWxkO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydEVtdWxhdG9yKGF2ZE5hbWU6IHN0cmluZyk6IENoaWxkUHJvY2VzcyB7XG4gICAgY29uc3QgZW11bGF0b3JCaW5hcnkgPSB0aGlzLnJlc29sdmVFbXVsYXRvckJpbmFyeSgpO1xuICAgIGNvbnN0IGFyZ3MgPSBidWlsZEVtdWxhdG9yQXJncyhhdmROYW1lKTtcbiAgICB0aGlzLmxvZyhgUnVubmluZzogJHtlbXVsYXRvckJpbmFyeX0gJHthcmdzLmpvaW4oJyAnKX1gKTtcbiAgICBjb25zdCBjaGlsZCA9IHNwYXduKGVtdWxhdG9yQmluYXJ5LCBhcmdzLCB7XG4gICAgICBkZXRhY2hlZDogdHJ1ZSxcbiAgICAgIHN0ZGlvOiBbJ2lnbm9yZScsICdpZ25vcmUnLCAnaWdub3JlJ11cbiAgICB9KTtcblxuICAgIGNoaWxkLnVucmVmKCk7XG4gICAgcmV0dXJuIGNoaWxkO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB3YWl0Rm9yQXBwaXVtUmVhZHkodXJsOiBVUkwpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmxvZyhcbiAgICAgIGBXYWl0aW5nIGZvciBBcHBpdW0gYXQgJHt1cmwuaHJlZn0gKHRpbWVvdXQ6ICR7U3RyaW5nKEFQUElVTV9TVEFSVF9USU1FT1VUX0lOX01JTExJU0VDT05EUyl9bXMsIHBvbGw6ICR7XG4gICAgICAgIFN0cmluZyhBUFBJVU1fU1RBUlRfUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMpXG4gICAgICB9bXMpLi4uYFxuICAgICk7XG4gICAgY29uc3QgZGVhZGxpbmUgPSBEYXRlLm5vdygpICsgQVBQSVVNX1NUQVJUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTO1xuXG4gICAgd2hpbGUgKERhdGUubm93KCkgPCBkZWFkbGluZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5jaGVja0FwcGl1bVJlYWNoYWJsZSh1cmwpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICBzZXRUaW1lb3V0KHJlc29sdmUsIEFQUElVTV9TVEFSVF9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBBdXRvLXN0YXJ0ZWQgQXBwaXVtIHNlcnZlciBkaWQgbm90IGJlY29tZSByZWFkeSB3aXRoaW4gJHtTdHJpbmcoQVBQSVVNX1NUQVJUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKX1tc2BcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB3YWl0Rm9yQm9vdChkZXZpY2VJZDogc3RyaW5nLCBkZWFkbGluZTogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcmVtYWluaW5nTXMgPSBNYXRoLm1heCgwLCBkZWFkbGluZSAtIERhdGUubm93KCkpO1xuICAgIHRoaXMubG9nKFxuICAgICAgYFdhaXRpbmcgZm9yIGRldmljZSAke2RldmljZUlkfSB0byBmaW5pc2ggYm9vdGluZyAocmVtYWluaW5nOiAke1N0cmluZyhyZW1haW5pbmdNcyl9bXMsIHBvbGw6ICR7XG4gICAgICAgIFN0cmluZyhFTVVMQVRPUl9CT09UX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTKVxuICAgICAgfW1zKS4uLmBcbiAgICApO1xuXG4gICAgd2hpbGUgKERhdGUubm93KCkgPCBkZWFkbGluZSkge1xuICAgICAgY29uc3QgaXNCb290ZWQgPSBhd2FpdCBuZXcgUHJvbWlzZTxib29sZWFuPigocmVzb2x2ZSkgPT4ge1xuICAgICAgICBleGVjRmlsZShcbiAgICAgICAgICAnYWRiJyxcbiAgICAgICAgICBbJy1zJywgZGV2aWNlSWQsICdzaGVsbCcsICdnZXRwcm9wJywgJ3N5cy5ib290X2NvbXBsZXRlZCddLFxuICAgICAgICAgIHsgdGltZW91dDogQURCX0RFVklDRV9DSEVDS19USU1FT1VUX0lOX01JTExJU0VDT05EUyB9LFxuICAgICAgICAgIChfZXJyb3IsIHN0ZG91dCkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZShzdGRvdXQudHJpbSgpID09PSAnMScpO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoaXNCb290ZWQpIHtcbiAgICAgICAgdGhpcy5sb2coYERldmljZSAke2RldmljZUlkfSBib290IGNvbXBsZXRlZC5gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KHJlc29sdmUsIEVNVUxBVE9SX0JPT1RfUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYERldmljZSBcIiR7ZGV2aWNlSWR9XCIgY29ubmVjdGVkIGJ1dCBkaWQgbm90IGZpbmlzaCBib290aW5nIHdpdGhpbiAke1N0cmluZyhFTVVMQVRPUl9CT09UX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKX1tcy5gXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgd2FpdEZvckRldmljZShkZXZpY2VJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5sb2coXG4gICAgICBgV2FpdGluZyBmb3IgZGV2aWNlICR7ZGV2aWNlSWR9IHRvIGFwcGVhciBpbiBBREIgKHRpbWVvdXQ6ICR7U3RyaW5nKEVNVUxBVE9SX0JPT1RfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpfW1zLCBwb2xsOiAke1xuICAgICAgICBTdHJpbmcoRU1VTEFUT1JfQk9PVF9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUylcbiAgICAgIH1tcykuLi5gXG4gICAgKTtcbiAgICBjb25zdCBkZWFkbGluZSA9IERhdGUubm93KCkgKyBFTVVMQVRPUl9CT09UX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTO1xuXG4gICAgd2hpbGUgKERhdGUubm93KCkgPCBkZWFkbGluZSkge1xuICAgICAgaWYgKGF3YWl0IHRoaXMuY2hlY2tEZXZpY2VDb25uZWN0ZWQoZGV2aWNlSWQpKSB7XG4gICAgICAgIHRoaXMubG9nKGBEZXZpY2UgJHtkZXZpY2VJZH0gYXBwZWFyZWQgaW4gQURCLCB3YWl0aW5nIGZvciBib290IHRvIGNvbXBsZXRlLi4uYCk7XG4gICAgICAgIGF3YWl0IHRoaXMud2FpdEZvckJvb3QoZGV2aWNlSWQsIGRlYWRsaW5lKTtcbiAgICAgICAgYXdhaXQgdGhpcy53YWtlU2NyZWVuKGRldmljZUlkKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KHJlc29sdmUsIEVNVUxBVE9SX0JPT1RfUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEVtdWxhdG9yIGRldmljZSBcIiR7ZGV2aWNlSWR9XCIgZGlkIG5vdCBhcHBlYXIgd2l0aGluICR7U3RyaW5nKEVNVUxBVE9SX0JPT1RfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpfW1zLmBcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB3YWtlU2NyZWVuKGRldmljZUlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmxvZyhgV2FraW5nIHNjcmVlbiBvbiBkZXZpY2UgJHtkZXZpY2VJZH0uLi5gKTtcblxuICAgIGF3YWl0IHRoaXMuc2VuZEtleUV2ZW50KGRldmljZUlkLCBLRVlDT0RFX1dBS0VVUCwgJ3dha2Ugc2NyZWVuJyk7XG4gICAgYXdhaXQgdGhpcy5zZW5kS2V5RXZlbnQoZGV2aWNlSWQsIEtFWUNPREVfTUVOVSwgJ2Rpc21pc3MgbG9jayBzY3JlZW4nKTtcblxuICAgIHRoaXMubG9nKGBTY3JlZW4gd2FrZSBjb21wbGV0ZSBvbiBkZXZpY2UgJHtkZXZpY2VJZH0uYCk7XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHRyYW5zcG9ydCBpbnN0YW5jZSBmcm9tIHRoZSBnaXZlbiBvcHRpb25zLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVHJhbnNwb3J0IGNvbmZpZ3VyYXRpb24uIERlZmF1bHRzIHRvIENMSSB0cmFuc3BvcnQuXG4gKiBAcmV0dXJucyBBIG5ldyB0cmFuc3BvcnQgaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVUcmFuc3BvcnRGcm9tT3B0aW9ucyhvcHRpb25zPzogT2JzaWRpYW5UcmFuc3BvcnRPcHRpb25zKTogUHJvbWlzZTxPYnNpZGlhblRyYW5zcG9ydD4ge1xuICBjb25zdCB0eXBlID0gb3B0aW9ucz8udHlwZSA/PyBERUZBVUxUX1RSQU5TUE9SVF9UWVBFO1xuXG4gIGlmICghb3B0aW9ucyB8fCBvcHRpb25zLnR5cGUgPT09ICdvYnNpZGlhbi1jbGknKSB7XG4gICAgbG9nKGBbdHJhbnNwb3J0LWZhY3Rvcnk6JHt0eXBlfV0gQ3JlYXRpbmcgRGVza3RvcENsaVRyYW5zcG9ydGApO1xuICAgIHJldHVybiBuZXcgRGVza3RvcENsaVRyYW5zcG9ydCgpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMudHlwZSA9PT0gJ29ic2lkaWFuLWNkcCcpIHtcbiAgICBsb2coYFt0cmFuc3BvcnQtZmFjdG9yeToke3R5cGV9XSBDcmVhdGluZyBEZXNrdG9wQ2RwVHJhbnNwb3J0IChob3N0PSR7b3B0aW9ucy5ob3N0ID8/ICdsb2NhbGhvc3QnfSwgcG9ydD0ke1N0cmluZyhvcHRpb25zLnBvcnQgPz8gQ0RQX0RFRkFVTFRfUE9SVCl9KWApO1xuICAgIHJldHVybiBuZXcgRGVza3RvcENkcFRyYW5zcG9ydCh7XG4gICAgICAuLi4ob3B0aW9ucy5ob3N0ICE9PSB1bmRlZmluZWQgJiYgeyBjZHBIb3N0OiBvcHRpb25zLmhvc3QgfSksXG4gICAgICAuLi4ob3B0aW9ucy5wb3J0ICE9PSB1bmRlZmluZWQgJiYgeyBjZHBQb3J0OiBvcHRpb25zLnBvcnQgfSksXG4gICAgICAuLi4ob3B0aW9ucy5jb21tYW5kVGltZW91dEluTWlsbGlzZWNvbmRzICE9PSB1bmRlZmluZWQgJiYgeyBjb21tYW5kVGltZW91dEluTWlsbGlzZWNvbmRzOiBvcHRpb25zLmNvbW1hbmRUaW1lb3V0SW5NaWxsaXNlY29uZHMgfSlcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IGZhY3RvcnkgPSBuZXcgQXBwaXVtVHJhbnNwb3J0RmFjdG9yeSh0eXBlKTtcbiAgcmV0dXJuIGZhY3RvcnkuY3JlYXRlKG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBjYWNoZWQgdHJhbnNwb3J0IGluc3RhbmNlLCBjcmVhdGluZyBvbmUgZnJvbSB0aGUgZ2l2ZW4gb3B0aW9uc1xuICogaWYgbm90IGFscmVhZHkgY2FjaGVkLlxuICpcbiAqIFRoZSB0cmFuc3BvcnQgaXMgY2FjaGVkIHBlciB3b3JrZXIgcHJvY2VzcyBzbyBXZWJTb2NrZXQvQXBwaXVtIHNlc3Npb25zXG4gKiBhcmUgcmV1c2VkIGFjcm9zcyBjYWxscyB3aXRoaW4gdGhlIHNhbWUgdGVzdCB3b3JrZXIuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUcmFuc3BvcnQgY29uZmlndXJhdGlvbi4gRGVmYXVsdHMgdG8gQ0xJIHRyYW5zcG9ydC5cbiAqIEByZXR1cm5zIFRoZSBjYWNoZWQgb3IgbmV3bHkgY3JlYXRlZCB0cmFuc3BvcnQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRPckNyZWF0ZVRyYW5zcG9ydChvcHRpb25zPzogT2JzaWRpYW5UcmFuc3BvcnRPcHRpb25zKTogUHJvbWlzZTxPYnNpZGlhblRyYW5zcG9ydD4ge1xuICBpZiAoY2FjaGVkVHJhbnNwb3J0KSB7XG4gICAgcmV0dXJuIGNhY2hlZFRyYW5zcG9ydDtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNyZWF0ZVRyYW5zcG9ydEZyb21PcHRpb25zKG9wdGlvbnMpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS1hdG9taWMtdXBkYXRlcyAtLSBTaW5nbGUtdGhyZWFkZWQgd29ya2VyOyBubyBjb25jdXJyZW50IHdyaXRlcy5cbiAgY2FjaGVkVHJhbnNwb3J0ID0gcmVzdWx0O1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEtpbGxzIGEgY2hpbGQgcHJvY2VzcyBhbmQgaXRzIGVudGlyZSBwcm9jZXNzIHRyZWUuXG4gKlxuICogT24gV2luZG93cywgYGNoaWxkLmtpbGwoKWAgb25seSBzZW5kcyBTSUdURVJNIHRvIHRoZSBkaXJlY3QgcHJvY2VzcyxcbiAqIGxlYXZpbmcgc3Bhd25lZCBncmFuZGNoaWxkcmVuIChlLmcuIFFFTVUsIFVpQXV0b21hdG9yKSBhbGl2ZS5cbiAqIGB0YXNra2lsbCAvRiAvVCAvUElEYCBmb3JjZWZ1bGx5IHRlcm1pbmF0ZXMgdGhlIGVudGlyZSB0cmVlLlxuICpcbiAqIEBwYXJhbSBjaGlsZCAtIFRoZSBjaGlsZCBwcm9jZXNzIHRvIGtpbGwuXG4gKi9cbmZ1bmN0aW9uIGtpbGxQcm9jZXNzVHJlZShjaGlsZDogQ2hpbGRQcm9jZXNzKTogdm9pZCB7XG4gIGlmIChjaGlsZC5waWQgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWNGaWxlU3luYygndGFza2tpbGwnLCBbJy9GJywgJy9UJywgJy9QSUQnLCBTdHJpbmcoY2hpbGQucGlkKV0sIHsgc3RkaW86ICdpZ25vcmUnIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICBsb2coXG4gICAgICAgIGBbdHJhbnNwb3J0LWZhY3RvcnldIHRhc2traWxsIGZvciBQSUQgJHtTdHJpbmcoY2hpbGQucGlkKX0gZmFpbGVkIChtYXkgaGF2ZSBhbHJlYWR5IGV4aXRlZCk6ICR7XG4gICAgICAgICAgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAndW5rbm93biBlcnJvcidcbiAgICAgICAgfWBcbiAgICAgICk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNoaWxkLmtpbGwoJ1NJR0tJTEwnKTtcbiAgfVxufVxuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuIl0sCiAgIm1hcHBpbmdzIjogIkFBVUE7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsT0FBTyxVQUFVO0FBQ2pCLFNBQVMsWUFBWTtBQUNyQixPQUFPLGFBQWE7QUFDcEIsU0FBUyxjQUFjO0FBUXZCLFNBQVMseUJBQXlCO0FBQ2xDLFNBQVMsV0FBVztBQUNwQixTQUFTLHVCQUF1QjtBQUNoQyxTQUFTLDJCQUEyQjtBQUNwQyxTQUFTLDJCQUEyQjtBQUVwQyxNQUFNLGNBQWM7QUFDcEIsTUFBTSxlQUFlLEdBQUcsV0FBVztBQUNuQyxNQUFNLDJDQUEyQztBQUNqRCxNQUFNLGdDQUFnQztBQUN0QyxNQUFNLGtEQUFrRDtBQUN4RCxNQUFNLDJDQUEyQztBQUNqRCxNQUFNLDZDQUE2QztBQUNuRCxNQUFNLHVDQUF1QztBQUM3QyxNQUFNLG1CQUFtQjtBQUN6QixNQUFNLGtDQUFrQztBQUN4QyxNQUFNLHlCQUF5QjtBQUMvQixNQUFNLDhDQUE4QztBQUNwRCxNQUFNLHdDQUF3QztBQUM5QyxNQUFNLGVBQWU7QUFDckIsTUFBTSxpQkFBaUI7QUFDdkIsTUFBTSx5Q0FBeUM7QUFDL0MsTUFBTSx3Q0FBd0M7QUFzQjlDLElBQUk7QUFTSixNQUFNLHVCQUF1QjtBQUFBLEVBQ1Y7QUFBQSxFQUVWLFlBQVksTUFBYztBQUMvQixTQUFLLE9BQU87QUFBQSxFQUNkO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRQSxNQUFhLE9BQU8sU0FBNEU7QUFDOUYsU0FBSyxJQUFJLGlDQUFpQyxRQUFRLFNBQVMsWUFBWSxRQUFRLFFBQVEsR0FBRztBQUUxRixVQUFNLE1BQU0sSUFBSSxJQUFJLFFBQVEsU0FBUztBQUVyQyxVQUFNLE9BQU8sT0FBTyxJQUFJLElBQUk7QUFDNUIsUUFBSSxNQUFNLElBQUksR0FBRztBQUNmLFlBQU0sSUFBSSxNQUFNLDhCQUE4QixJQUFJLElBQUksRUFBRTtBQUFBLElBQzFEO0FBRUEsVUFBTSxRQUFRLFFBQVEsU0FBUztBQUUvQixRQUFJO0FBQ0osUUFBSTtBQUVKLFFBQUk7QUFnRUYsVUFBU0EsNEJBQVQsV0FBMEM7QUFDeEMsWUFBSSxlQUFlO0FBQ2pCLDBCQUFnQixhQUFhO0FBRTdCLGNBQUksc0JBQXNCLFFBQVEsSUFBSSx1Q0FBdUM7QUFBQSxRQUMvRTtBQUNBLFlBQUksaUJBQWlCO0FBQ25CLDBCQUFnQixlQUFlO0FBQy9CLGNBQUksc0JBQXNCLFFBQVEsSUFBSSxrQ0FBa0M7QUFBQSxRQUMxRTtBQUFBLE1BQ0Y7QUFWUyxxQ0FBQUE7QUEvRFQsT0FBQyxlQUFlLGVBQWUsSUFBSSxNQUFNLEtBQUssdUJBQXVCO0FBQUEsUUFDbkUsV0FBVztBQUFBLFFBQ1gsU0FBUyxRQUFRO0FBQUEsUUFDakIsVUFBVSxRQUFRO0FBQUEsUUFDbEI7QUFBQSxRQUNBLHVCQUF1QixRQUFRO0FBQUEsTUFDakMsQ0FBQztBQUVELFdBQUs7QUFBQSxRQUNILGdDQUFnQyxRQUFRLFFBQVEsU0FBUyxLQUFLLG1CQUFtQixPQUFPLCtDQUErQyxDQUFDLGdCQUN0SSxPQUFPLDZCQUE2QixDQUN0QztBQUFBLE1BQ0Y7QUFDQSxZQUFNLFVBQVUsTUFBTSxPQUFPO0FBQUEsUUFDM0IsY0FBYztBQUFBLFVBQ1osc0JBQXNCO0FBQUEsVUFDdEIscUJBQXFCO0FBQUEsVUFDckIsK0JBQStCO0FBQUEsVUFDL0IseUJBQXlCO0FBQUEsVUFDekIsNEJBQTRCO0FBQUEsVUFDNUIsa0JBQWtCO0FBQUEsVUFDbEIsbUJBQW1CO0FBQUEsWUFDakIsbUNBQW1DO0FBQUEsVUFDckM7QUFBQSxVQUNBLGVBQWUsUUFBUTtBQUFBLFVBQ3ZCLDJDQUEyQztBQUFBLFVBQzNDLDBDQUEwQztBQUFBLFVBQzFDLGdCQUFnQjtBQUFBLFFBQ2xCO0FBQUEsUUFDQSxzQkFBc0I7QUFBQSxRQUN0Qix3QkFBd0I7QUFBQSxRQUN4QixVQUFVLElBQUk7QUFBQSxRQUNkLFVBQVU7QUFBQSxRQUNWLE1BQU0sSUFBSTtBQUFBLFFBQ1Y7QUFBQSxNQUNGLENBQUM7QUFFRCxXQUFLLElBQUksNkJBQTZCO0FBQ3RDLFlBQU0sa0JBQWtCLElBQUksZ0JBQWdCO0FBQUEsUUFDMUM7QUFBQSxRQUNBO0FBQUEsUUFDQSxVQUFVLFFBQVE7QUFBQSxRQUNsQixVQUFVO0FBQUEsUUFDVixHQUFJLFFBQVEsa0JBQWtCLFVBQWEsRUFBRSxlQUFlLFFBQVEsY0FBYztBQUFBLFFBQ2xGLEdBQUksUUFBUSxpQ0FBaUMsVUFBYSxFQUFFLDhCQUE4QixRQUFRLDZCQUE2QjtBQUFBLE1BQ2pJLENBQUM7QUFFRCxZQUFNLGtCQUFrQixnQkFBZ0IsUUFBUSxLQUFLLGVBQWU7QUFDcEUsWUFBTSxZQUErQjtBQUNyQyxnQkFBVSxVQUFVLFlBQTJCO0FBQzdDLFlBQUk7QUFDRixnQkFBTSxnQkFBZ0I7QUFBQSxRQUN4QixVQUFFO0FBQ0EsVUFBQUEsMEJBQXlCO0FBQUEsUUFDM0I7QUFBQSxNQUNGO0FBRUEsZ0JBQVUsY0FBYyxNQUFZO0FBQ2xDLFFBQUFBLDBCQUF5QjtBQUFBLE1BQzNCO0FBRUEsYUFBTztBQUFBLElBYVQsU0FBUyxPQUFnQjtBQUN2QixVQUFJLGVBQWU7QUFDakIsd0JBQWdCLGFBQWE7QUFDN0IsYUFBSyxJQUFJLDZEQUE2RDtBQUFBLE1BQ3hFO0FBQ0EsVUFBSSxpQkFBaUI7QUFDbkIsd0JBQWdCLGVBQWU7QUFDL0IsYUFBSyxJQUFJLHdEQUF3RDtBQUFBLE1BQ25FO0FBQ0EsWUFBTTtBQUFBLElBQ1I7QUFBQSxFQUNGO0FBQUEsRUFFUSxxQkFBcUIsS0FBeUI7QUFDcEQsV0FBTyxJQUFJLFFBQVEsQ0FBQyxTQUFTLFdBQVc7QUFDdEMsWUFBTSxZQUFZLElBQUksSUFBSSxXQUFXLEdBQUc7QUFDeEMsWUFBTSxNQUFNLEtBQUssSUFBSSxXQUFXLEVBQUUsU0FBUyx5Q0FBeUMsR0FBRyxDQUFDLFFBQVE7QUFDOUYsWUFBSSxPQUFPO0FBQ1gsZ0JBQVE7QUFBQSxNQUNWLENBQUM7QUFDRCxVQUFJLEdBQUcsV0FBVyxNQUFNO0FBQ3RCLFlBQUksUUFBUTtBQUNaO0FBQUEsVUFDRSxJQUFJO0FBQUEsWUFDRixvQkFBb0IsSUFBSSxNQUFNLDJCQUEyQixPQUFPLHdDQUF3QyxDQUFDO0FBQUEsVUFDM0c7QUFBQSxRQUNGO0FBQUEsTUFDRixDQUFDO0FBQ0QsVUFBSSxHQUFHLFNBQVMsQ0FBQyxRQUFRO0FBQ3ZCO0FBQUEsVUFDRSxJQUFJO0FBQUEsWUFDRixpQ0FBaUMsSUFBSSxNQUFNLEtBQUssSUFBSSxPQUFPO0FBQUEsVUFDN0Q7QUFBQSxRQUNGO0FBQUEsTUFDRixDQUFDO0FBQUEsSUFDSCxDQUFDO0FBQUEsRUFDSDtBQUFBLEVBRUEsTUFBYyxxQkFBcUIsVUFBb0M7QUFDckUsVUFBTSxTQUFTLE1BQU0sSUFBSSxRQUFnQixDQUFDLFNBQVMsV0FBVztBQUM1RCxlQUFTLE9BQU8sQ0FBQyxTQUFTLEdBQUcsRUFBRSxTQUFTLHlDQUF5QyxHQUFHLENBQUMsT0FBTyxRQUFRLFdBQVc7QUFDN0csWUFBSSxPQUFPO0FBQ1QsaUJBQU8sSUFBSSxNQUFNLGdDQUFnQyxNQUFNLE9BQU8saUNBQWlDLENBQUM7QUFDaEc7QUFBQSxRQUNGO0FBQ0EsWUFBSSxRQUFRO0FBQ1YsZUFBSyxJQUFJLGVBQWUsT0FBTyxLQUFLLENBQUMsRUFBRTtBQUFBLFFBQ3pDO0FBQ0EsZ0JBQVEsTUFBTTtBQUFBLE1BQ2hCLENBQUM7QUFBQSxJQUNILENBQUM7QUFFRCxVQUFNLFFBQVEsT0FBTyxNQUFNLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxFQUFFLE9BQU8sQ0FBQyxTQUFTLEtBQUssU0FBUyxDQUFDO0FBQzVGLFVBQU0sYUFBYSxNQUFNLEtBQUssQ0FBQyxTQUFTLEtBQUssV0FBVyxRQUFRLENBQUM7QUFDakUsV0FBTyxZQUFZLFNBQVMsU0FBVSxLQUFLO0FBQUEsRUFDN0M7QUFBQSxFQUVBLE1BQWMsc0JBQXNCLFNBQTZCLFVBQXFEO0FBQ3BILFNBQUssSUFBSSxtQkFBbUIsUUFBUSwwQkFBMEI7QUFFOUQsUUFBSSxNQUFNLEtBQUsscUJBQXFCLFFBQVEsR0FBRztBQUM3QyxXQUFLLElBQUksVUFBVSxRQUFRLGdCQUFnQjtBQUMzQyxhQUFPO0FBQUEsSUFDVDtBQUVBLFFBQUksQ0FBQyxTQUFTO0FBQ1osWUFBTSxJQUFJO0FBQUEsUUFDUixXQUFXLFFBQVE7QUFBQSxNQUVyQjtBQUFBLElBQ0Y7QUFFQSxTQUFLLElBQUksVUFBVSxRQUFRLHNDQUFzQyxPQUFPLE1BQU07QUFDOUUsVUFBTSxrQkFBa0IsS0FBSyxjQUFjLE9BQU87QUFDbEQsVUFBTSxLQUFLLGNBQWMsUUFBUTtBQUNqQyxTQUFLLElBQUksYUFBYSxPQUFPLHFCQUFxQixRQUFRLGdCQUFnQjtBQUMxRSxXQUFPO0FBQUEsRUFDVDtBQUFBLEVBRVEsSUFBSSxTQUF1QjtBQUNqQyxRQUFJLHNCQUFzQixLQUFLLElBQUksS0FBSyxPQUFPLEVBQUU7QUFBQSxFQUNuRDtBQUFBLEVBRVEsd0JBQWdDO0FBQ3RDLFVBQU0sVUFBVSxRQUFRLElBQUksY0FBYyxLQUFLLFFBQVEsSUFBSSxrQkFBa0I7QUFDN0UsUUFBSSxDQUFDLFNBQVM7QUFDWixZQUFNLElBQUk7QUFBQSxRQUNSO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFDQSxXQUFPLEtBQUssU0FBUyxZQUFZLFVBQVU7QUFBQSxFQUM3QztBQUFBLEVBRUEsTUFBYyxhQUFhLFVBQWtCLFNBQWlCLGFBQW9DO0FBQ2hHLFVBQU0sSUFBSSxRQUFjLENBQUMsWUFBWTtBQUNuQztBQUFBLFFBQ0U7QUFBQSxRQUNBLENBQUMsTUFBTSxVQUFVLFNBQVMsU0FBUyxZQUFZLE9BQU8sT0FBTyxDQUFDO0FBQUEsUUFDOUQsRUFBRSxTQUFTLHlDQUF5QztBQUFBLFFBQ3BELENBQUMsVUFBVTtBQUNULGNBQUksT0FBTztBQUNULGlCQUFLO0FBQUEsY0FDSCxzQkFBc0IsV0FBVyxjQUFjLE9BQU8sT0FBTyxDQUFDLE1BQU0saUJBQWlCLFFBQVEsTUFBTSxVQUFVLGVBQWU7QUFBQSxZQUM5SDtBQUFBLFVBQ0Y7QUFFQSxrQkFBUTtBQUFBLFFBQ1Y7QUFBQSxNQUNGO0FBQUEsSUFDRixDQUFDO0FBQUEsRUFDSDtBQUFBLEVBRUEsTUFBYyx1QkFBdUIsUUFBcUc7QUFDeEksVUFBTSxFQUFFLFdBQVcsU0FBUyxVQUFVLE1BQU0sc0JBQXNCLElBQUk7QUFFdEUsUUFBSSxtQkFBbUI7QUFFdkIsU0FBSyxJQUFJLDZCQUE2QixVQUFVLElBQUksS0FBSztBQUN6RCxRQUFJO0FBQ0YsWUFBTSxLQUFLLHFCQUFxQixTQUFTO0FBQ3pDLFdBQUssSUFBSSw2QkFBNkI7QUFBQSxJQUN4QyxTQUFTLE9BQWdCO0FBQ3ZCLFVBQUksMEJBQTBCLE9BQU87QUFDbkMsY0FBTTtBQUFBLE1BQ1I7QUFDQSx5QkFBbUI7QUFBQSxJQUNyQjtBQUVBLFFBQUk7QUFFSixRQUFJLGtCQUFrQjtBQUNwQixXQUFLLElBQUksK0NBQStDLE9BQU8sSUFBSSxDQUFDLEtBQUs7QUFDekUsc0JBQWdCLEtBQUssa0JBQWtCLElBQUk7QUFBQSxJQUM3QztBQUVBLFVBQU0sQ0FBQyxFQUFFLGVBQWUsSUFBSSxNQUFNLFFBQVEsSUFBSTtBQUFBLE1BQzVDLG1CQUNJLEtBQUssbUJBQW1CLFNBQVMsRUFBRSxLQUFLLE1BQU07QUFDOUMsYUFBSyxJQUFJLHNDQUFzQztBQUFBLE1BQ2pELENBQUMsSUFDQyxRQUFRLFFBQVE7QUFBQSxNQUNwQixLQUFLLHNCQUFzQixTQUFTLFFBQVE7QUFBQSxJQUM5QyxDQUFDO0FBRUQsV0FBTyxDQUFDLGVBQWUsZUFBZTtBQUFBLEVBQ3hDO0FBQUEsRUFFUSxrQkFBa0IsTUFBNEI7QUFDcEQsVUFBTSxRQUFRLE1BQU0scUNBQXFDLE9BQU8sSUFBSSxDQUFDLElBQUk7QUFBQSxNQUN2RSxVQUFVO0FBQUEsTUFDVixPQUFPO0FBQUEsTUFDUCxPQUFPLENBQUMsVUFBVSxXQUFXLFNBQVM7QUFBQSxJQUN4QyxDQUFDO0FBRUQsVUFBTSxNQUFNO0FBQ1osV0FBTztBQUFBLEVBQ1Q7QUFBQSxFQUVRLGNBQWMsU0FBK0I7QUFDbkQsVUFBTSxpQkFBaUIsS0FBSyxzQkFBc0I7QUFDbEQsVUFBTSxPQUFPLGtCQUFrQixPQUFPO0FBQ3RDLFNBQUssSUFBSSxZQUFZLGNBQWMsSUFBSSxLQUFLLEtBQUssR0FBRyxDQUFDLEVBQUU7QUFDdkQsVUFBTSxRQUFRLE1BQU0sZ0JBQWdCLE1BQU07QUFBQSxNQUN4QyxVQUFVO0FBQUEsTUFDVixPQUFPLENBQUMsVUFBVSxVQUFVLFFBQVE7QUFBQSxJQUN0QyxDQUFDO0FBRUQsVUFBTSxNQUFNO0FBQ1osV0FBTztBQUFBLEVBQ1Q7QUFBQSxFQUVBLE1BQWMsbUJBQW1CLEtBQXlCO0FBQ3hELFNBQUs7QUFBQSxNQUNILHlCQUF5QixJQUFJLElBQUksY0FBYyxPQUFPLG9DQUFvQyxDQUFDLGFBQ3pGLE9BQU8sMENBQTBDLENBQ25EO0FBQUEsSUFDRjtBQUNBLFVBQU0sV0FBVyxLQUFLLElBQUksSUFBSTtBQUU5QixXQUFPLEtBQUssSUFBSSxJQUFJLFVBQVU7QUFDNUIsVUFBSTtBQUNGLGNBQU0sS0FBSyxxQkFBcUIsR0FBRztBQUNuQztBQUFBLE1BQ0YsUUFBUTtBQUNOLGNBQU0sSUFBSSxRQUFRLENBQUMsWUFBWTtBQUM3QixxQkFBVyxTQUFTLDBDQUEwQztBQUFBLFFBQ2hFLENBQUM7QUFBQSxNQUNIO0FBQUEsSUFDRjtBQUVBLFVBQU0sSUFBSTtBQUFBLE1BQ1IsMERBQTBELE9BQU8sb0NBQW9DLENBQUM7QUFBQSxJQUN4RztBQUFBLEVBQ0Y7QUFBQSxFQUVBLE1BQWMsWUFBWSxVQUFrQixVQUFpQztBQUMzRSxVQUFNLGNBQWMsS0FBSyxJQUFJLEdBQUcsV0FBVyxLQUFLLElBQUksQ0FBQztBQUNyRCxTQUFLO0FBQUEsTUFDSCxzQkFBc0IsUUFBUSxrQ0FBa0MsT0FBTyxXQUFXLENBQUMsYUFDakYsT0FBTywyQ0FBMkMsQ0FDcEQ7QUFBQSxJQUNGO0FBRUEsV0FBTyxLQUFLLElBQUksSUFBSSxVQUFVO0FBQzVCLFlBQU0sV0FBVyxNQUFNLElBQUksUUFBaUIsQ0FBQyxZQUFZO0FBQ3ZEO0FBQUEsVUFDRTtBQUFBLFVBQ0EsQ0FBQyxNQUFNLFVBQVUsU0FBUyxXQUFXLG9CQUFvQjtBQUFBLFVBQ3pELEVBQUUsU0FBUyx5Q0FBeUM7QUFBQSxVQUNwRCxDQUFDLFFBQVEsV0FBVztBQUNsQixvQkFBUSxPQUFPLEtBQUssTUFBTSxHQUFHO0FBQUEsVUFDL0I7QUFBQSxRQUNGO0FBQUEsTUFDRixDQUFDO0FBRUQsVUFBSSxVQUFVO0FBQ1osYUFBSyxJQUFJLFVBQVUsUUFBUSxrQkFBa0I7QUFDN0M7QUFBQSxNQUNGO0FBRUEsWUFBTSxJQUFJLFFBQVEsQ0FBQyxZQUFZO0FBQzdCLG1CQUFXLFNBQVMsMkNBQTJDO0FBQUEsTUFDakUsQ0FBQztBQUFBLElBQ0g7QUFFQSxVQUFNLElBQUk7QUFBQSxNQUNSLFdBQVcsUUFBUSxpREFBaUQsT0FBTyxxQ0FBcUMsQ0FBQztBQUFBLElBQ25IO0FBQUEsRUFDRjtBQUFBLEVBRUEsTUFBYyxjQUFjLFVBQWlDO0FBQzNELFNBQUs7QUFBQSxNQUNILHNCQUFzQixRQUFRLCtCQUErQixPQUFPLHFDQUFxQyxDQUFDLGFBQ3hHLE9BQU8sMkNBQTJDLENBQ3BEO0FBQUEsSUFDRjtBQUNBLFVBQU0sV0FBVyxLQUFLLElBQUksSUFBSTtBQUU5QixXQUFPLEtBQUssSUFBSSxJQUFJLFVBQVU7QUFDNUIsVUFBSSxNQUFNLEtBQUsscUJBQXFCLFFBQVEsR0FBRztBQUM3QyxhQUFLLElBQUksVUFBVSxRQUFRLG1EQUFtRDtBQUM5RSxjQUFNLEtBQUssWUFBWSxVQUFVLFFBQVE7QUFDekMsY0FBTSxLQUFLLFdBQVcsUUFBUTtBQUM5QjtBQUFBLE1BQ0Y7QUFFQSxZQUFNLElBQUksUUFBUSxDQUFDLFlBQVk7QUFDN0IsbUJBQVcsU0FBUywyQ0FBMkM7QUFBQSxNQUNqRSxDQUFDO0FBQUEsSUFDSDtBQUVBLFVBQU0sSUFBSTtBQUFBLE1BQ1Isb0JBQW9CLFFBQVEsMkJBQTJCLE9BQU8scUNBQXFDLENBQUM7QUFBQSxJQUN0RztBQUFBLEVBQ0Y7QUFBQSxFQUVBLE1BQWMsV0FBVyxVQUFpQztBQUN4RCxTQUFLLElBQUksMkJBQTJCLFFBQVEsS0FBSztBQUVqRCxVQUFNLEtBQUssYUFBYSxVQUFVLGdCQUFnQixhQUFhO0FBQy9ELFVBQU0sS0FBSyxhQUFhLFVBQVUsY0FBYyxxQkFBcUI7QUFFckUsU0FBSyxJQUFJLGtDQUFrQyxRQUFRLEdBQUc7QUFBQSxFQUN4RDtBQUNGO0FBUUEsZUFBc0IsMkJBQTJCLFNBQWdFO0FBQy9HLFFBQU0sT0FBTyxTQUFTLFFBQVE7QUFFOUIsTUFBSSxDQUFDLFdBQVcsUUFBUSxTQUFTLGdCQUFnQjtBQUMvQyxRQUFJLHNCQUFzQixJQUFJLGdDQUFnQztBQUM5RCxXQUFPLElBQUksb0JBQW9CO0FBQUEsRUFDakM7QUFFQSxNQUFJLFFBQVEsU0FBUyxnQkFBZ0I7QUFDbkMsUUFBSSxzQkFBc0IsSUFBSSx3Q0FBd0MsUUFBUSxRQUFRLFdBQVcsVUFBVSxPQUFPLFFBQVEsUUFBUSxnQkFBZ0IsQ0FBQyxHQUFHO0FBQ3RKLFdBQU8sSUFBSSxvQkFBb0I7QUFBQSxNQUM3QixHQUFJLFFBQVEsU0FBUyxVQUFhLEVBQUUsU0FBUyxRQUFRLEtBQUs7QUFBQSxNQUMxRCxHQUFJLFFBQVEsU0FBUyxVQUFhLEVBQUUsU0FBUyxRQUFRLEtBQUs7QUFBQSxNQUMxRCxHQUFJLFFBQVEsaUNBQWlDLFVBQWEsRUFBRSw4QkFBOEIsUUFBUSw2QkFBNkI7QUFBQSxJQUNqSSxDQUFDO0FBQUEsRUFDSDtBQUVBLFFBQU0sVUFBVSxJQUFJLHVCQUF1QixJQUFJO0FBQy9DLFNBQU8sUUFBUSxPQUFPLE9BQU87QUFDL0I7QUFZQSxlQUFzQixxQkFBcUIsU0FBZ0U7QUFDekcsTUFBSSxpQkFBaUI7QUFDbkIsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLFNBQVMsTUFBTSwyQkFBMkIsT0FBTztBQUV2RCxvQkFBa0I7QUFDbEIsU0FBTztBQUNUO0FBV0EsU0FBUyxnQkFBZ0IsT0FBMkI7QUFDbEQsTUFBSSxNQUFNLFFBQVEsUUFBVztBQUMzQjtBQUFBLEVBQ0Y7QUFFQSxNQUFJLFFBQVEsYUFBYSxTQUFTO0FBQ2hDLFFBQUk7QUFDRixtQkFBYSxZQUFZLENBQUMsTUFBTSxNQUFNLFFBQVEsT0FBTyxNQUFNLEdBQUcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxTQUFTLENBQUM7QUFBQSxJQUN2RixTQUFTLE9BQWdCO0FBQ3ZCO0FBQUEsUUFDRSx3Q0FBd0MsT0FBTyxNQUFNLEdBQUcsQ0FBQyxzQ0FDdkQsaUJBQWlCLFFBQVEsTUFBTSxVQUFVLGVBQzNDO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGLE9BQU87QUFDTCxVQUFNLEtBQUssU0FBUztBQUFBLEVBQ3RCO0FBQ0Y7IiwKICAibmFtZXMiOiBbImtpbGxBdXRvU3RhcnRlZFByb2Nlc3NlcyJdCn0K
|
|
385
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3RyYW5zcG9ydC1mYWN0b3J5LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogRmFjdG9yeSBmb3IgY3JlYXRpbmcgdHJhbnNwb3J0IGluc3RhbmNlcyBmcm9tIHtAbGluayBPYnNpZGlhblRyYW5zcG9ydE9wdGlvbnN9LlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIGZhY3RvcnkgY292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB0eXBlIHsgQ2hpbGRQcm9jZXNzIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcblxuaW1wb3J0IHtcbiAgZXhlY0ZpbGUsXG4gIGV4ZWNGaWxlU3luYyxcbiAgc3Bhd25cbn0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCBodHRwIGZyb20gJ25vZGU6aHR0cCc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgeyByZW1vdGUgfSBmcm9tICd3ZWJkcml2ZXJpbyc7XG5cbmltcG9ydCB0eXBlIHtcbiAgT2JzaWRpYW5BbmRyb2lkQXBwaXVtVHJhbnNwb3J0T3B0aW9ucyxcbiAgT2JzaWRpYW5UcmFuc3BvcnRPcHRpb25zXG59IGZyb20gJy4vdHJhbnNwb3J0LW9wdGlvbnMubWpzJztcbmltcG9ydCB0eXBlIHsgT2JzaWRpYW5UcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC5tanMnO1xuXG5pbXBvcnQgeyBidWlsZEVtdWxhdG9yQXJncyB9IGZyb20gJy4vZW11bGF0b3ItYXJncy5tanMnO1xuaW1wb3J0IHsgbG9nIH0gZnJvbSAnLi9sb2cubWpzJztcbmltcG9ydCB7IEFwcGl1bVRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LWFwcGl1bS5tanMnO1xuaW1wb3J0IHsgRGVza3RvcENkcFRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LWRlc2t0b3AtY2RwLm1qcyc7XG5pbXBvcnQgeyBEZXNrdG9wQ2xpVHJhbnNwb3J0IH0gZnJvbSAnLi90cmFuc3BvcnQtZGVza3RvcC1jbGkubWpzJztcblxuY29uc3QgQVBQX1BBQ0tBR0UgPSAnbWQub2JzaWRpYW4nO1xuY29uc3QgQVBQX0FDVElWSVRZID0gYCR7QVBQX1BBQ0tBR0V9Lk1haW5BY3Rpdml0eWA7XG5jb25zdCBBREJfREVWSUNFX0NIRUNLX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gNTAwMDtcbmNvbnN0IEFQUElVTV9DT05ORUNUSU9OX1JFVFJZX0NPVU5UID0gMztcbmNvbnN0IEFQUElVTV9DT05ORUNUSU9OX1JFVFJZX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gMTgwMDAwO1xuY29uc3QgQVBQSVVNX1BSRUZMSUdIVF9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDUwMDA7XG5jb25zdCBBUFBJVU1fU1RBUlRfUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMgPSA1MDA7XG5jb25zdCBBUFBJVU1fU1RBUlRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSA2MDAwMDtcbmNvbnN0IENEUF9ERUZBVUxUX1BPUlQgPSA4MzE1O1xuY29uc3QgQ09NTUFORF9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDMwMDtcbmNvbnN0IERFRkFVTFRfVFJBTlNQT1JUX1RZUEUgPSAnb2JzaWRpYW4tY2xpJztcbmNvbnN0IEVNVUxBVE9SX0JPT1RfUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMgPSAyMDAwO1xuY29uc3QgRU1VTEFUT1JfQk9PVF9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDEyMDAwMDtcbmNvbnN0IEtFWUNPREVfTUVOVSA9IDgyO1xuY29uc3QgS0VZQ09ERV9XQUtFVVAgPSAyMjQ7XG5jb25zdCBTRVJWRVJfSU5TVEFMTF9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDEyMDAwMDtcbmNvbnN0IFNFUlZFUl9MQVVOQ0hfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAxMjAwMDA7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIEFwcGl1bVRyYW5zcG9ydEZhY3Rvcnkuc3RhcnRBcHBpdW1BbmRFbXVsYXRvcn0uXG4gKi9cbmludGVyZmFjZSBTdGFydEFwcGl1bUFuZEVtdWxhdG9yUGFyYW1zIHtcbiAgLyoqIFRoZSBBcHBpdW0gc2VydmVyIFVSTC4gKi9cbiAgYXBwaXVtVXJsOiBVUkw7XG5cbiAgLyoqIEFWRCBuYW1lIHRvIGF1dG8tc3RhcnQgaWYgdGhlIGRldmljZSBpcyBub3QgY29ubmVjdGVkLiAqL1xuICBhdmROYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKiBEZXZpY2UgVURJRC4gKi9cbiAgZGV2aWNlSWQ6IHN0cmluZztcblxuICAvKiogVGhlIEFwcGl1bSBzZXJ2ZXIgcG9ydC4gKi9cbiAgcG9ydDogbnVtYmVyO1xuXG4gIC8qKiBXaGV0aGVyIEFwcGl1bSBhdXRvLXN0YXJ0IGlzIGFsbG93ZWQuICovXG4gIHNob3VsZEF1dG9TdGFydEFwcGl1bT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59XG5cbmxldCBjYWNoZWRUcmFuc3BvcnQ6IE9ic2lkaWFuVHJhbnNwb3J0IHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIEVuY2Fwc3VsYXRlcyBhbGwgQXBwaXVtIHRyYW5zcG9ydCBjcmVhdGlvbiBsb2dpYywgaW5jbHVkaW5nIEFwcGl1bSBzZXJ2ZXJcbiAqIHN0YXJ0dXAsIGVtdWxhdG9yIG1hbmFnZW1lbnQsIGFuZCBXZWJEcml2ZXJJTyBzZXNzaW9uIGVzdGFibGlzaG1lbnQuXG4gKlxuICogVXNpbmcgYSBjbGFzcyBhdm9pZHMgdGhyZWFkaW5nIHRoZSB0cmFuc3BvcnQgYHR5cGVgIGxhYmVsIHRocm91Z2ggZXZlcnlcbiAqIGhlbHBlciBmdW5jdGlvbiBcdTIwMTQgYHRoaXMubG9nKClgIGF1dG9tYXRpY2FsbHkgcHJlZml4ZXMgaXQuXG4gKi9cbmNsYXNzIEFwcGl1bVRyYW5zcG9ydEZhY3Rvcnkge1xuICBwcml2YXRlIHJlYWRvbmx5IHR5cGU6IHN0cmluZztcblxuICBwdWJsaWMgY29uc3RydWN0b3IodHlwZTogc3RyaW5nKSB7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIEFwcGl1bSB0cmFuc3BvcnQgYnkgZXN0YWJsaXNoaW5nIGEgV2ViRHJpdmVySU8gc2Vzc2lvbi5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBbmRyb2lkIEFwcGl1bSB0cmFuc3BvcnQgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQSBjb25maWd1cmVkIEFwcGl1bSB0cmFuc3BvcnQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY3JlYXRlKG9wdGlvbnM6IE9ic2lkaWFuQW5kcm9pZEFwcGl1bVRyYW5zcG9ydE9wdGlvbnMpOiBQcm9taXNlPE9ic2lkaWFuVHJhbnNwb3J0PiB7XG4gICAgdGhpcy5sb2coYENyZWF0aW5nIEFwcGl1bVRyYW5zcG9ydCAodXJsPSR7b3B0aW9ucy5hcHBpdW1Vcmx9LCBkZXZpY2U9JHtvcHRpb25zLmRldmljZUlkfSlgKTtcblxuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwob3B0aW9ucy5hcHBpdW1VcmwpO1xuXG4gICAgY29uc3QgcG9ydCA9IE51bWJlcih1cmwucG9ydCk7XG4gICAgaWYgKGlzTmFOKHBvcnQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcG9ydCBpbiBhcHBpdW1Vcmw6ICR7dXJsLnBvcnR9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgYXBwSWQgPSBvcHRpb25zLmFwcElkID8/IEFQUF9QQUNLQUdFO1xuXG4gICAgbGV0IGFwcGl1bVByb2Nlc3M6IENoaWxkUHJvY2VzcyB8IHVuZGVmaW5lZDtcbiAgICBsZXQgZW11bGF0b3JQcm9jZXNzOiBDaGlsZFByb2Nlc3MgfCB1bmRlZmluZWQ7XG5cbiAgICB0cnkge1xuICAgICAgW2FwcGl1bVByb2Nlc3MsIGVtdWxhdG9yUHJvY2Vzc10gPSBhd2FpdCB0aGlzLnN0YXJ0QXBwaXVtQW5kRW11bGF0b3Ioe1xuICAgICAgICBhcHBpdW1Vcmw6IHVybCxcbiAgICAgICAgYXZkTmFtZTogb3B0aW9ucy5hdmROYW1lLFxuICAgICAgICBkZXZpY2VJZDogb3B0aW9ucy5kZXZpY2VJZCxcbiAgICAgICAgcG9ydCxcbiAgICAgICAgc2hvdWxkQXV0b1N0YXJ0QXBwaXVtOiBvcHRpb25zLnNob3VsZEF1dG9TdGFydEFwcGl1bVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMubG9nKFxuICAgICAgICBgQ29ubmVjdGluZyB0byBBcHBpdW0gKGRldmljZT0ke29wdGlvbnMuZGV2aWNlSWR9LCBhcHA9JHthcHBJZH0sIHJldHJ5VGltZW91dDogJHtTdHJpbmcoQVBQSVVNX0NPTk5FQ1RJT05fUkVUUllfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpfW1zLCByZXRyaWVzOiAke1xuICAgICAgICAgIFN0cmluZyhBUFBJVU1fQ09OTkVDVElPTl9SRVRSWV9DT1VOVClcbiAgICAgICAgfSkuLi5gXG4gICAgICApO1xuICAgICAgY29uc3QgYnJvd3NlciA9IGF3YWl0IHJlbW90ZSh7XG4gICAgICAgIGNhcGFiaWxpdGllczoge1xuICAgICAgICAgICdhcHBpdW06YXBwQWN0aXZpdHknOiBBUFBfQUNUSVZJVFksXG4gICAgICAgICAgJ2FwcGl1bTphcHBQYWNrYWdlJzogYXBwSWQsXG4gICAgICAgICAgJ2FwcGl1bTphdXRvR3JhbnRQZXJtaXNzaW9ucyc6IHRydWUsXG4gICAgICAgICAgJ2FwcGl1bTphdXRvbWF0aW9uTmFtZSc6ICdVaUF1dG9tYXRvcjInLFxuICAgICAgICAgICdhcHBpdW06bmV3Q29tbWFuZFRpbWVvdXQnOiBDT01NQU5EX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTLFxuICAgICAgICAgICdhcHBpdW06bm9SZXNldCc6IHRydWUsXG4gICAgICAgICAgJ2FwcGl1bTpzZXR0aW5ncyc6IHtcbiAgICAgICAgICAgICdhcHBpdW06Y2hyb21lZHJpdmVyQXV0b2Rvd25sb2FkJzogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgJ2FwcGl1bTp1ZGlkJzogb3B0aW9ucy5kZXZpY2VJZCxcbiAgICAgICAgICAnYXBwaXVtOnVpYXV0b21hdG9yMlNlcnZlckluc3RhbGxUaW1lb3V0JzogU0VSVkVSX0lOU1RBTExfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMsXG4gICAgICAgICAgJ2FwcGl1bTp1aWF1dG9tYXRvcjJTZXJ2ZXJMYXVuY2hUaW1lb3V0JzogU0VSVkVSX0xBVU5DSF9USU1FT1VUX0lOX01JTExJU0VDT05EUyxcbiAgICAgICAgICAncGxhdGZvcm1OYW1lJzogJ0FuZHJvaWQnXG4gICAgICAgIH0sXG4gICAgICAgIGNvbm5lY3Rpb25SZXRyeUNvdW50OiBBUFBJVU1fQ09OTkVDVElPTl9SRVRSWV9DT1VOVCxcbiAgICAgICAgY29ubmVjdGlvblJldHJ5VGltZW91dDogQVBQSVVNX0NPTk5FQ1RJT05fUkVUUllfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMsXG4gICAgICAgIGhvc3RuYW1lOiB1cmwuaG9zdG5hbWUsXG4gICAgICAgIGxvZ0xldmVsOiAnd2FybicsXG4gICAgICAgIHBhdGg6IHVybC5wYXRobmFtZSxcbiAgICAgICAgcG9ydFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMubG9nKCdBcHBpdW0gc2Vzc2lvbiBlc3RhYmxpc2hlZC4nKTtcbiAgICAgIGNvbnN0IGFwcGl1bVRyYW5zcG9ydCA9IG5ldyBBcHBpdW1UcmFuc3BvcnQoe1xuICAgICAgICBhcHBJZCxcbiAgICAgICAgYnJvd3NlcixcbiAgICAgICAgZGV2aWNlSWQ6IG9wdGlvbnMuZGV2aWNlSWQsXG4gICAgICAgIHBsYXRmb3JtOiAnYW5kcm9pZCcsXG4gICAgICAgIC4uLihvcHRpb25zLnZhdWx0QmFzZVBhdGggIT09IHVuZGVmaW5lZCAmJiB7IHZhdWx0QmFzZVBhdGg6IG9wdGlvbnMudmF1bHRCYXNlUGF0aCB9KSxcbiAgICAgICAgLi4uKG9wdGlvbnMud2Vidmlld1RpbWVvdXRJbk1pbGxpc2Vjb25kcyAhPT0gdW5kZWZpbmVkICYmIHsgd2Vidmlld1RpbWVvdXRJbk1pbGxpc2Vjb25kczogb3B0aW9ucy53ZWJ2aWV3VGltZW91dEluTWlsbGlzZWNvbmRzIH0pXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgb3JpZ2luYWxEaXNwb3NlID0gYXBwaXVtVHJhbnNwb3J0LmRpc3Bvc2UuYmluZChhcHBpdW1UcmFuc3BvcnQpO1xuICAgICAgY29uc3QgdHJhbnNwb3J0OiBPYnNpZGlhblRyYW5zcG9ydCA9IGFwcGl1bVRyYW5zcG9ydDtcbiAgICAgIHRyYW5zcG9ydC5kaXNwb3NlID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IG9yaWdpbmFsRGlzcG9zZSgpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGtpbGxBdXRvU3RhcnRlZFByb2Nlc3NlcygpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB0cmFuc3BvcnQuZGlzcG9zZVN5bmMgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIGtpbGxBdXRvU3RhcnRlZFByb2Nlc3NlcygpO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHRyYW5zcG9ydDtcblxuICAgICAgZnVuY3Rpb24ga2lsbEF1dG9TdGFydGVkUHJvY2Vzc2VzKCk6IHZvaWQge1xuICAgICAgICBpZiAoYXBwaXVtUHJvY2Vzcykge1xuICAgICAgICAgIGtpbGxQcm9jZXNzVHJlZShhcHBpdW1Qcm9jZXNzKTtcbiAgICAgICAgICAvLyBDYW5ub3QgdXNlIHRoaXMubG9nIGluc2lkZSBuZXN0ZWQgZnVuY3Rpb24gXHUyMDE0IGB0aGlzYCBpcyBub3QgY2FwdHVyZWQuXG4gICAgICAgICAgbG9nKGBbdHJhbnNwb3J0LWZhY3Rvcnk6JHtvcHRpb25zLnR5cGV9XSBBdXRvLXN0YXJ0ZWQgQXBwaXVtIHNlcnZlciBzdG9wcGVkLmApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbXVsYXRvclByb2Nlc3MpIHtcbiAgICAgICAgICBraWxsUHJvY2Vzc1RyZWUoZW11bGF0b3JQcm9jZXNzKTtcbiAgICAgICAgICBsb2coYFt0cmFuc3BvcnQtZmFjdG9yeToke29wdGlvbnMudHlwZX1dIEF1dG8tc3RhcnRlZCBlbXVsYXRvciBzdG9wcGVkLmApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgIGlmIChhcHBpdW1Qcm9jZXNzKSB7XG4gICAgICAgIGtpbGxQcm9jZXNzVHJlZShhcHBpdW1Qcm9jZXNzKTtcbiAgICAgICAgdGhpcy5sb2coJ0tpbGxlZCBhdXRvLXN0YXJ0ZWQgQXBwaXVtIHNlcnZlciBhZnRlciBjb25uZWN0aW9uIGZhaWx1cmUuJyk7XG4gICAgICB9XG4gICAgICBpZiAoZW11bGF0b3JQcm9jZXNzKSB7XG4gICAgICAgIGtpbGxQcm9jZXNzVHJlZShlbXVsYXRvclByb2Nlc3MpO1xuICAgICAgICB0aGlzLmxvZygnS2lsbGVkIGF1dG8tc3RhcnRlZCBlbXVsYXRvciBhZnRlciBjb25uZWN0aW9uIGZhaWx1cmUuJyk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNoZWNrQXBwaXVtUmVhY2hhYmxlKHVybDogVVJMKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHN0YXR1c1VybCA9IG5ldyBVUkwoJy9zdGF0dXMnLCB1cmwpO1xuICAgICAgY29uc3QgcmVxID0gaHR0cC5nZXQoc3RhdHVzVXJsLCB7IHRpbWVvdXQ6IEFQUElVTV9QUkVGTElHSFRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgfSwgKHJlcykgPT4ge1xuICAgICAgICByZXMucmVzdW1lKCk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0pO1xuICAgICAgcmVxLm9uKCd0aW1lb3V0JywgKCkgPT4ge1xuICAgICAgICByZXEuZGVzdHJveSgpO1xuICAgICAgICByZWplY3QoXG4gICAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgICAgYEFwcGl1bSBzZXJ2ZXIgYXQgJHt1cmwub3JpZ2lufSBkaWQgbm90IHJlc3BvbmQgd2l0aGluICR7U3RyaW5nKEFQUElVTV9QUkVGTElHSFRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpfW1zLiBJcyB0aGUgQXBwaXVtIHNlcnZlciBydW5uaW5nP2BcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIHJlcS5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIHJlamVjdChcbiAgICAgICAgICBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgQ2Fubm90IHJlYWNoIEFwcGl1bSBzZXJ2ZXIgYXQgJHt1cmwub3JpZ2lufTogJHtlcnIubWVzc2FnZX0uIElzIHRoZSBBcHBpdW0gc2VydmVyIHJ1bm5pbmc/YFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjaGVja0RldmljZUNvbm5lY3RlZChkZXZpY2VJZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgbmV3IFByb21pc2U8c3RyaW5nPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBleGVjRmlsZSgnYWRiJywgWydkZXZpY2VzJ10sIHsgdGltZW91dDogQURCX0RFVklDRV9DSEVDS19USU1FT1VUX0lOX01JTExJU0VDT05EUyB9LCAoZXJyb3IsIHN0ZG91dCwgc3RkZXJyKSA9PiB7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYEZhaWxlZCB0byBydW4gJ2FkYiBkZXZpY2VzJzogJHtlcnJvci5tZXNzYWdlfS4gSXMgQURCIGluc3RhbGxlZCBhbmQgaW4gUEFUSD9gKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGRlcnIpIHtcbiAgICAgICAgICB0aGlzLmxvZyhgQURCIHN0ZGVycjogJHtzdGRlcnIudHJpbSgpfWApO1xuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUoc3Rkb3V0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgY29uc3QgbGluZXMgPSBvdXRwdXQuc3BsaXQoJ1xcbicpLm1hcCgobGluZSkgPT4gbGluZS50cmltKCkpLmZpbHRlcigobGluZSkgPT4gbGluZS5sZW5ndGggPiAwKTtcbiAgICBjb25zdCBkZXZpY2VMaW5lID0gbGluZXMuZmluZCgobGluZSkgPT4gbGluZS5zdGFydHNXaXRoKGRldmljZUlkKSk7XG4gICAgcmV0dXJuIGRldmljZUxpbmU/LmluY2x1ZGVzKCdcXHRkZXZpY2UnKSA/PyBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZW5zdXJlRGV2aWNlQ29ubmVjdGVkKGF2ZE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCwgZGV2aWNlSWQ6IHN0cmluZyk6IFByb21pc2U8Q2hpbGRQcm9jZXNzIHwgdW5kZWZpbmVkPiB7XG4gICAgdGhpcy5sb2coYENoZWNraW5nIGRldmljZSAke2RldmljZUlkfSBpcyBjb25uZWN0ZWQgdmlhIEFEQi4uLmApO1xuXG4gICAgaWYgKGF3YWl0IHRoaXMuY2hlY2tEZXZpY2VDb25uZWN0ZWQoZGV2aWNlSWQpKSB7XG4gICAgICB0aGlzLmxvZyhgRGV2aWNlICR7ZGV2aWNlSWR9IGlzIGNvbm5lY3RlZC5gKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKCFhdmROYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBEZXZpY2UgXCIke2RldmljZUlkfVwiIGlzIG5vdCBjb25uZWN0ZWQuIFN0YXJ0IHRoZSBlbXVsYXRvciBiZWZvcmUgcnVubmluZyBpbnRlZ3JhdGlvbiB0ZXN0cyxgXG4gICAgICAgICAgKyAnIG9yIHNldCBhdmROYW1lIGluIHRyYW5zcG9ydCBvcHRpb25zIHRvIGF1dG8tc3RhcnQgaXQuJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhgRGV2aWNlICR7ZGV2aWNlSWR9IG5vdCBmb3VuZCwgc3RhcnRpbmcgZW11bGF0b3IgQVZEIFwiJHthdmROYW1lfVwiLi4uYCk7XG4gICAgY29uc3QgZW11bGF0b3JQcm9jZXNzID0gdGhpcy5zdGFydEVtdWxhdG9yKGF2ZE5hbWUpO1xuICAgIGF3YWl0IHRoaXMud2FpdEZvckRldmljZShkZXZpY2VJZCk7XG4gICAgdGhpcy5sb2coYEVtdWxhdG9yIFwiJHthdmROYW1lfVwiIHN0YXJ0ZWQsIGRldmljZSAke2RldmljZUlkfSBpcyBjb25uZWN0ZWQuYCk7XG4gICAgcmV0dXJuIGVtdWxhdG9yUHJvY2VzcztcbiAgfVxuXG4gIHByaXZhdGUgbG9nKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIGxvZyhgW3RyYW5zcG9ydC1mYWN0b3J5OiR7dGhpcy50eXBlfV0gJHttZXNzYWdlfWApO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlRW11bGF0b3JCaW5hcnkoKTogc3RyaW5nIHtcbiAgICBjb25zdCBzZGtSb290ID0gcHJvY2Vzcy5lbnZbJ0FORFJPSURfSE9NRSddID8/IHByb2Nlc3MuZW52WydBTkRST0lEX1NES19ST09UJ107XG4gICAgaWYgKCFzZGtSb290KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdDYW5ub3QgZmluZCBBbmRyb2lkIGVtdWxhdG9yOiBuZWl0aGVyIEFORFJPSURfSE9NRSBub3IgQU5EUk9JRF9TREtfUk9PVCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGpvaW4oc2RrUm9vdCwgJ2VtdWxhdG9yJywgJ2VtdWxhdG9yJyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRLZXlFdmVudChkZXZpY2VJZDogc3RyaW5nLCBrZXlDb2RlOiBudW1iZXIsIGRlc2NyaXB0aW9uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgZXhlY0ZpbGUoXG4gICAgICAgICdhZGInLFxuICAgICAgICBbJy1zJywgZGV2aWNlSWQsICdzaGVsbCcsICdpbnB1dCcsICdrZXlldmVudCcsIFN0cmluZyhrZXlDb2RlKV0sXG4gICAgICAgIHsgdGltZW91dDogQURCX0RFVklDRV9DSEVDS19USU1FT1VUX0lOX01JTExJU0VDT05EUyB9LFxuICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMubG9nKFxuICAgICAgICAgICAgICBgV2FybmluZzogZmFpbGVkIHRvICR7ZGVzY3JpcHRpb259IChrZXlldmVudCAke1N0cmluZyhrZXlDb2RlKX0pOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ3Vua25vd24gZXJyb3InfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzdGFydEFwcGl1bUFuZEVtdWxhdG9yKHBhcmFtczogU3RhcnRBcHBpdW1BbmRFbXVsYXRvclBhcmFtcyk6IFByb21pc2U8W0NoaWxkUHJvY2VzcyB8IHVuZGVmaW5lZCwgQ2hpbGRQcm9jZXNzIHwgdW5kZWZpbmVkXT4ge1xuICAgIGNvbnN0IHsgYXBwaXVtVXJsLCBhdmROYW1lLCBkZXZpY2VJZCwgcG9ydCwgc2hvdWxkQXV0b1N0YXJ0QXBwaXVtIH0gPSBwYXJhbXM7XG5cbiAgICBsZXQgbmVlZHNBcHBpdW1TdGFydCA9IGZhbHNlO1xuXG4gICAgdGhpcy5sb2coYENoZWNraW5nIEFwcGl1bSBzZXJ2ZXIgYXQgJHthcHBpdW1VcmwuaHJlZn0uLi5gKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5jaGVja0FwcGl1bVJlYWNoYWJsZShhcHBpdW1VcmwpO1xuICAgICAgdGhpcy5sb2coJ0FwcGl1bSBzZXJ2ZXIgaXMgcmVhY2hhYmxlLicpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICBpZiAoc2hvdWxkQXV0b1N0YXJ0QXBwaXVtID09PSBmYWxzZSkge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICAgIG5lZWRzQXBwaXVtU3RhcnQgPSB0cnVlO1xuICAgIH1cblxuICAgIGxldCBhcHBpdW1Qcm9jZXNzOiBDaGlsZFByb2Nlc3MgfCB1bmRlZmluZWQ7XG5cbiAgICBpZiAobmVlZHNBcHBpdW1TdGFydCkge1xuICAgICAgdGhpcy5sb2coYEFwcGl1bSBub3QgcmVhY2hhYmxlLCBhdXRvLXN0YXJ0aW5nIG9uIHBvcnQgJHtTdHJpbmcocG9ydCl9Li4uYCk7XG4gICAgICBhcHBpdW1Qcm9jZXNzID0gdGhpcy5zdGFydEFwcGl1bVNlcnZlcihwb3J0KTtcbiAgICB9XG5cbiAgICBjb25zdCBbLCBlbXVsYXRvclByb2Nlc3NdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgbmVlZHNBcHBpdW1TdGFydFxuICAgICAgICA/IHRoaXMud2FpdEZvckFwcGl1bVJlYWR5KGFwcGl1bVVybCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2coJ0F1dG8tc3RhcnRlZCBBcHBpdW0gc2VydmVyIGlzIHJlYWR5LicpO1xuICAgICAgICB9KVxuICAgICAgICA6IFByb21pc2UucmVzb2x2ZSgpLFxuICAgICAgdGhpcy5lbnN1cmVEZXZpY2VDb25uZWN0ZWQoYXZkTmFtZSwgZGV2aWNlSWQpXG4gICAgXSk7XG5cbiAgICByZXR1cm4gW2FwcGl1bVByb2Nlc3MsIGVtdWxhdG9yUHJvY2Vzc107XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0QXBwaXVtU2VydmVyKHBvcnQ6IG51bWJlcik6IENoaWxkUHJvY2VzcyB7XG4gICAgY29uc3QgY2hpbGQgPSBzcGF3bihgbnB4IGFwcGl1bSAtLWxvZy10aW1lc3RhbXAgLS1wb3J0ICR7U3RyaW5nKHBvcnQpfWAsIHtcbiAgICAgIGRldGFjaGVkOiB0cnVlLFxuICAgICAgc2hlbGw6IHRydWUsXG4gICAgICBzdGRpbzogWydpZ25vcmUnLCAnaW5oZXJpdCcsICdpbmhlcml0J11cbiAgICB9KTtcblxuICAgIGNoaWxkLnVucmVmKCk7XG4gICAgcmV0dXJuIGNoaWxkO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydEVtdWxhdG9yKGF2ZE5hbWU6IHN0cmluZyk6IENoaWxkUHJvY2VzcyB7XG4gICAgY29uc3QgZW11bGF0b3JCaW5hcnkgPSB0aGlzLnJlc29sdmVFbXVsYXRvckJpbmFyeSgpO1xuICAgIGNvbnN0IGFyZ3MgPSBidWlsZEVtdWxhdG9yQXJncyhhdmROYW1lKTtcbiAgICB0aGlzLmxvZyhgUnVubmluZzogJHtlbXVsYXRvckJpbmFyeX0gJHthcmdzLmpvaW4oJyAnKX1gKTtcbiAgICBjb25zdCBjaGlsZCA9IHNwYXduKGVtdWxhdG9yQmluYXJ5LCBhcmdzLCB7XG4gICAgICBkZXRhY2hlZDogdHJ1ZSxcbiAgICAgIHN0ZGlvOiBbJ2lnbm9yZScsICdpZ25vcmUnLCAnaWdub3JlJ11cbiAgICB9KTtcblxuICAgIGNoaWxkLnVucmVmKCk7XG4gICAgcmV0dXJuIGNoaWxkO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB3YWl0Rm9yQXBwaXVtUmVhZHkodXJsOiBVUkwpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmxvZyhcbiAgICAgIGBXYWl0aW5nIGZvciBBcHBpdW0gYXQgJHt1cmwuaHJlZn0gKHRpbWVvdXQ6ICR7U3RyaW5nKEFQUElVTV9TVEFSVF9USU1FT1VUX0lOX01JTExJU0VDT05EUyl9bXMsIHBvbGw6ICR7XG4gICAgICAgIFN0cmluZyhBUFBJVU1fU1RBUlRfUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMpXG4gICAgICB9bXMpLi4uYFxuICAgICk7XG4gICAgY29uc3QgZGVhZGxpbmUgPSBEYXRlLm5vdygpICsgQVBQSVVNX1NUQVJUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTO1xuXG4gICAgd2hpbGUgKERhdGUubm93KCkgPCBkZWFkbGluZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5jaGVja0FwcGl1bVJlYWNoYWJsZSh1cmwpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICBzZXRUaW1lb3V0KHJlc29sdmUsIEFQUElVTV9TVEFSVF9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBBdXRvLXN0YXJ0ZWQgQXBwaXVtIHNlcnZlciBkaWQgbm90IGJlY29tZSByZWFkeSB3aXRoaW4gJHtTdHJpbmcoQVBQSVVNX1NUQVJUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKX1tc2BcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB3YWl0Rm9yQm9vdChkZXZpY2VJZDogc3RyaW5nLCBkZWFkbGluZTogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcmVtYWluaW5nTXMgPSBNYXRoLm1heCgwLCBkZWFkbGluZSAtIERhdGUubm93KCkpO1xuICAgIHRoaXMubG9nKFxuICAgICAgYFdhaXRpbmcgZm9yIGRldmljZSAke2RldmljZUlkfSB0byBmaW5pc2ggYm9vdGluZyAocmVtYWluaW5nOiAke1N0cmluZyhyZW1haW5pbmdNcyl9bXMsIHBvbGw6ICR7XG4gICAgICAgIFN0cmluZyhFTVVMQVRPUl9CT09UX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTKVxuICAgICAgfW1zKS4uLmBcbiAgICApO1xuXG4gICAgd2hpbGUgKERhdGUubm93KCkgPCBkZWFkbGluZSkge1xuICAgICAgY29uc3QgaXNCb290ZWQgPSBhd2FpdCBuZXcgUHJvbWlzZTxib29sZWFuPigocmVzb2x2ZSkgPT4ge1xuICAgICAgICBleGVjRmlsZShcbiAgICAgICAgICAnYWRiJyxcbiAgICAgICAgICBbJy1zJywgZGV2aWNlSWQsICdzaGVsbCcsICdnZXRwcm9wJywgJ3N5cy5ib290X2NvbXBsZXRlZCddLFxuICAgICAgICAgIHsgdGltZW91dDogQURCX0RFVklDRV9DSEVDS19USU1FT1VUX0lOX01JTExJU0VDT05EUyB9LFxuICAgICAgICAgIChfZXJyb3IsIHN0ZG91dCkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZShzdGRvdXQudHJpbSgpID09PSAnMScpO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoaXNCb290ZWQpIHtcbiAgICAgICAgdGhpcy5sb2coYERldmljZSAke2RldmljZUlkfSBib290IGNvbXBsZXRlZC5gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KHJlc29sdmUsIEVNVUxBVE9SX0JPT1RfUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYERldmljZSBcIiR7ZGV2aWNlSWR9XCIgY29ubmVjdGVkIGJ1dCBkaWQgbm90IGZpbmlzaCBib290aW5nIHdpdGhpbiAke1N0cmluZyhFTVVMQVRPUl9CT09UX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKX1tcy5gXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgd2FpdEZvckRldmljZShkZXZpY2VJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5sb2coXG4gICAgICBgV2FpdGluZyBmb3IgZGV2aWNlICR7ZGV2aWNlSWR9IHRvIGFwcGVhciBpbiBBREIgKHRpbWVvdXQ6ICR7U3RyaW5nKEVNVUxBVE9SX0JPT1RfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpfW1zLCBwb2xsOiAke1xuICAgICAgICBTdHJpbmcoRU1VTEFUT1JfQk9PVF9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUylcbiAgICAgIH1tcykuLi5gXG4gICAgKTtcbiAgICBjb25zdCBkZWFkbGluZSA9IERhdGUubm93KCkgKyBFTVVMQVRPUl9CT09UX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTO1xuXG4gICAgd2hpbGUgKERhdGUubm93KCkgPCBkZWFkbGluZSkge1xuICAgICAgaWYgKGF3YWl0IHRoaXMuY2hlY2tEZXZpY2VDb25uZWN0ZWQoZGV2aWNlSWQpKSB7XG4gICAgICAgIHRoaXMubG9nKGBEZXZpY2UgJHtkZXZpY2VJZH0gYXBwZWFyZWQgaW4gQURCLCB3YWl0aW5nIGZvciBib290IHRvIGNvbXBsZXRlLi4uYCk7XG4gICAgICAgIGF3YWl0IHRoaXMud2FpdEZvckJvb3QoZGV2aWNlSWQsIGRlYWRsaW5lKTtcbiAgICAgICAgYXdhaXQgdGhpcy53YWtlU2NyZWVuKGRldmljZUlkKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KHJlc29sdmUsIEVNVUxBVE9SX0JPT1RfUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEVtdWxhdG9yIGRldmljZSBcIiR7ZGV2aWNlSWR9XCIgZGlkIG5vdCBhcHBlYXIgd2l0aGluICR7U3RyaW5nKEVNVUxBVE9SX0JPT1RfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpfW1zLmBcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB3YWtlU2NyZWVuKGRldmljZUlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmxvZyhgV2FraW5nIHNjcmVlbiBvbiBkZXZpY2UgJHtkZXZpY2VJZH0uLi5gKTtcblxuICAgIGF3YWl0IHRoaXMuc2VuZEtleUV2ZW50KGRldmljZUlkLCBLRVlDT0RFX1dBS0VVUCwgJ3dha2Ugc2NyZWVuJyk7XG4gICAgYXdhaXQgdGhpcy5zZW5kS2V5RXZlbnQoZGV2aWNlSWQsIEtFWUNPREVfTUVOVSwgJ2Rpc21pc3MgbG9jayBzY3JlZW4nKTtcblxuICAgIHRoaXMubG9nKGBTY3JlZW4gd2FrZSBjb21wbGV0ZSBvbiBkZXZpY2UgJHtkZXZpY2VJZH0uYCk7XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHRyYW5zcG9ydCBpbnN0YW5jZSBmcm9tIHRoZSBnaXZlbiBvcHRpb25zLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVHJhbnNwb3J0IGNvbmZpZ3VyYXRpb24uIERlZmF1bHRzIHRvIENMSSB0cmFuc3BvcnQuXG4gKiBAcmV0dXJucyBBIG5ldyB0cmFuc3BvcnQgaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVUcmFuc3BvcnRGcm9tT3B0aW9ucyhvcHRpb25zPzogT2JzaWRpYW5UcmFuc3BvcnRPcHRpb25zKTogUHJvbWlzZTxPYnNpZGlhblRyYW5zcG9ydD4ge1xuICBjb25zdCB0eXBlID0gb3B0aW9ucz8udHlwZSA/PyBERUZBVUxUX1RSQU5TUE9SVF9UWVBFO1xuXG4gIGlmICghb3B0aW9ucyB8fCBvcHRpb25zLnR5cGUgPT09ICdvYnNpZGlhbi1jbGknKSB7XG4gICAgbG9nKGBbdHJhbnNwb3J0LWZhY3Rvcnk6JHt0eXBlfV0gQ3JlYXRpbmcgRGVza3RvcENsaVRyYW5zcG9ydGApO1xuICAgIHJldHVybiBuZXcgRGVza3RvcENsaVRyYW5zcG9ydCgpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMudHlwZSA9PT0gJ29ic2lkaWFuLWNkcCcpIHtcbiAgICBsb2coYFt0cmFuc3BvcnQtZmFjdG9yeToke3R5cGV9XSBDcmVhdGluZyBEZXNrdG9wQ2RwVHJhbnNwb3J0IChob3N0PSR7b3B0aW9ucy5ob3N0ID8/ICdsb2NhbGhvc3QnfSwgcG9ydD0ke1N0cmluZyhvcHRpb25zLnBvcnQgPz8gQ0RQX0RFRkFVTFRfUE9SVCl9KWApO1xuICAgIHJldHVybiBuZXcgRGVza3RvcENkcFRyYW5zcG9ydCh7XG4gICAgICAuLi4ob3B0aW9ucy5ob3N0ICE9PSB1bmRlZmluZWQgJiYgeyBjZHBIb3N0OiBvcHRpb25zLmhvc3QgfSksXG4gICAgICAuLi4ob3B0aW9ucy5wb3J0ICE9PSB1bmRlZmluZWQgJiYgeyBjZHBQb3J0OiBvcHRpb25zLnBvcnQgfSksXG4gICAgICAuLi4ob3B0aW9ucy5jb21tYW5kVGltZW91dEluTWlsbGlzZWNvbmRzICE9PSB1bmRlZmluZWQgJiYgeyBjb21tYW5kVGltZW91dEluTWlsbGlzZWNvbmRzOiBvcHRpb25zLmNvbW1hbmRUaW1lb3V0SW5NaWxsaXNlY29uZHMgfSlcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IGZhY3RvcnkgPSBuZXcgQXBwaXVtVHJhbnNwb3J0RmFjdG9yeSh0eXBlKTtcbiAgcmV0dXJuIGZhY3RvcnkuY3JlYXRlKG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBjYWNoZWQgdHJhbnNwb3J0IGluc3RhbmNlLCBjcmVhdGluZyBvbmUgZnJvbSB0aGUgZ2l2ZW4gb3B0aW9uc1xuICogaWYgbm90IGFscmVhZHkgY2FjaGVkLlxuICpcbiAqIFRoZSB0cmFuc3BvcnQgaXMgY2FjaGVkIHBlciB3b3JrZXIgcHJvY2VzcyBzbyBXZWJTb2NrZXQvQXBwaXVtIHNlc3Npb25zXG4gKiBhcmUgcmV1c2VkIGFjcm9zcyBjYWxscyB3aXRoaW4gdGhlIHNhbWUgdGVzdCB3b3JrZXIuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUcmFuc3BvcnQgY29uZmlndXJhdGlvbi4gRGVmYXVsdHMgdG8gQ0xJIHRyYW5zcG9ydC5cbiAqIEByZXR1cm5zIFRoZSBjYWNoZWQgb3IgbmV3bHkgY3JlYXRlZCB0cmFuc3BvcnQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRPckNyZWF0ZVRyYW5zcG9ydChvcHRpb25zPzogT2JzaWRpYW5UcmFuc3BvcnRPcHRpb25zKTogUHJvbWlzZTxPYnNpZGlhblRyYW5zcG9ydD4ge1xuICBpZiAoY2FjaGVkVHJhbnNwb3J0KSB7XG4gICAgcmV0dXJuIGNhY2hlZFRyYW5zcG9ydDtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNyZWF0ZVRyYW5zcG9ydEZyb21PcHRpb25zKG9wdGlvbnMpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS1hdG9taWMtdXBkYXRlcyAtLSBTaW5nbGUtdGhyZWFkZWQgd29ya2VyOyBubyBjb25jdXJyZW50IHdyaXRlcy5cbiAgY2FjaGVkVHJhbnNwb3J0ID0gcmVzdWx0O1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEtpbGxzIGEgY2hpbGQgcHJvY2VzcyBhbmQgaXRzIGVudGlyZSBwcm9jZXNzIHRyZWUuXG4gKlxuICogT24gV2luZG93cywgYGNoaWxkLmtpbGwoKWAgb25seSBzZW5kcyBTSUdURVJNIHRvIHRoZSBkaXJlY3QgcHJvY2VzcyxcbiAqIGxlYXZpbmcgc3Bhd25lZCBncmFuZGNoaWxkcmVuIChlLmcuIFFFTVUsIFVpQXV0b21hdG9yKSBhbGl2ZS5cbiAqIGB0YXNra2lsbCAvRiAvVCAvUElEYCBmb3JjZWZ1bGx5IHRlcm1pbmF0ZXMgdGhlIGVudGlyZSB0cmVlLlxuICpcbiAqIEBwYXJhbSBjaGlsZCAtIFRoZSBjaGlsZCBwcm9jZXNzIHRvIGtpbGwuXG4gKi9cbmZ1bmN0aW9uIGtpbGxQcm9jZXNzVHJlZShjaGlsZDogQ2hpbGRQcm9jZXNzKTogdm9pZCB7XG4gIGlmIChjaGlsZC5waWQgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWNGaWxlU3luYygndGFza2tpbGwnLCBbJy9GJywgJy9UJywgJy9QSUQnLCBTdHJpbmcoY2hpbGQucGlkKV0sIHsgc3RkaW86ICdpZ25vcmUnIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICBsb2coXG4gICAgICAgIGBbdHJhbnNwb3J0LWZhY3RvcnldIHRhc2traWxsIGZvciBQSUQgJHtTdHJpbmcoY2hpbGQucGlkKX0gZmFpbGVkIChtYXkgaGF2ZSBhbHJlYWR5IGV4aXRlZCk6ICR7XG4gICAgICAgICAgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAndW5rbm93biBlcnJvcidcbiAgICAgICAgfWBcbiAgICAgICk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNoaWxkLmtpbGwoJ1NJR0tJTEwnKTtcbiAgfVxufVxuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuIl0sCiAgIm1hcHBpbmdzIjogIkFBVUE7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsT0FBTyxVQUFVO0FBQ2pCLFNBQVMsWUFBWTtBQUNyQixPQUFPLGFBQWE7QUFDcEIsU0FBUyxjQUFjO0FBUXZCLFNBQVMseUJBQXlCO0FBQ2xDLFNBQVMsV0FBVztBQUNwQixTQUFTLHVCQUF1QjtBQUNoQyxTQUFTLDJCQUEyQjtBQUNwQyxTQUFTLDJCQUEyQjtBQUVwQyxNQUFNLGNBQWM7QUFDcEIsTUFBTSxlQUFlLEdBQUcsV0FBVztBQUNuQyxNQUFNLDJDQUEyQztBQUNqRCxNQUFNLGdDQUFnQztBQUN0QyxNQUFNLGtEQUFrRDtBQUN4RCxNQUFNLDJDQUEyQztBQUNqRCxNQUFNLDZDQUE2QztBQUNuRCxNQUFNLHVDQUF1QztBQUM3QyxNQUFNLG1CQUFtQjtBQUN6QixNQUFNLGtDQUFrQztBQUN4QyxNQUFNLHlCQUF5QjtBQUMvQixNQUFNLDhDQUE4QztBQUNwRCxNQUFNLHdDQUF3QztBQUM5QyxNQUFNLGVBQWU7QUFDckIsTUFBTSxpQkFBaUI7QUFDdkIs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
|
|
Binary file
|
package/package.json
CHANGED
|
Binary file
|