appium-webdriveragent 5.5.0 → 5.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ ## [5.5.2](https://github.com/appium/WebDriverAgent/compare/v5.5.1...v5.5.2) (2023-07-07)
2
+
3
+
4
+ ### Miscellaneous Chores
5
+
6
+ * **deps-dev:** bump prettier from 2.8.8 to 3.0.0 ([#735](https://github.com/appium/WebDriverAgent/issues/735)) ([15614d0](https://github.com/appium/WebDriverAgent/commit/15614d030975f2b1eac5919d2353bc015f194d4c))
7
+
8
+ ## [5.5.1](https://github.com/appium/WebDriverAgent/compare/v5.5.0...v5.5.1) (2023-06-16)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * Update strongbox API name ([4977032](https://github.com/appium/WebDriverAgent/commit/49770328aeeebacd76011ff1caf13d5b4ed71420))
14
+
1
15
  ## [5.5.0](https://github.com/appium/WebDriverAgent/compare/v5.4.1...v5.5.0) (2023-06-12)
2
16
 
3
17
 
@@ -156,7 +156,7 @@ class WebDriverAgent {
156
156
  const timestampPath = _path.default.resolve(process.env.HOME, _constants.WDA_UPGRADE_TIMESTAMP_PATH);
157
157
  if (await _support.fs.exists(timestampPath)) {
158
158
  try {
159
- boxItem = await box.createItemWithContents(RECENT_MODULE_VERSION_ITEM_NAME, '5.0.0');
159
+ boxItem = await box.createItemWithValue(RECENT_MODULE_VERSION_ITEM_NAME, '5.0.0');
160
160
  } catch (e) {
161
161
  this.log.warn(`The actual module version cannot be persisted: ${e.message}`);
162
162
  return;
@@ -164,7 +164,7 @@ class WebDriverAgent {
164
164
  } else {
165
165
  this.log.info('There is no need to perform the project cleanup. A fresh install has been detected');
166
166
  try {
167
- await box.createItemWithContents(RECENT_MODULE_VERSION_ITEM_NAME, packageInfo.version);
167
+ await box.createItemWithValue(RECENT_MODULE_VERSION_ITEM_NAME, packageInfo.version);
168
168
  } catch (e) {
169
169
  this.log.warn(`The actual module version cannot be persisted: ${e.message}`);
170
170
  }
@@ -401,4 +401,4 @@ class WebDriverAgent {
401
401
  exports.WebDriverAgent = WebDriverAgent;
402
402
  var _default = WebDriverAgent;
403
403
  exports.default = _default;
404
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfcGF0aCIsIl91cmwyIiwiX2JsdWViaXJkIiwiX2Jhc2VEcml2ZXIiLCJfc3VwcG9ydCIsIl9sb2dnZXIiLCJfbm9TZXNzaW9uUHJveHkiLCJfdXRpbHMiLCJfeGNvZGVidWlsZCIsIl9hc3luY0xvY2siLCJfdGVlbl9wcm9jZXNzIiwiX2NoZWNrRGVwZW5kZW5jaWVzIiwiX2NvbnN0YW50cyIsIl9hcHBpdW1Jb3NEZXZpY2UiLCJfc3Ryb25nYm94IiwiV0RBX0xBVU5DSF9USU1FT1VUIiwiV0RBX0FHRU5UX1BPUlQiLCJXREFfQ0ZfQlVORExFX05BTUUiLCJTSEFSRURfUkVTT1VSQ0VTX0dVQVJEIiwiQXN5bmNMb2NrIiwiUkVDRU5UX01PRFVMRV9WRVJTSU9OX0lURU1fTkFNRSIsIldlYkRyaXZlckFnZW50IiwiY29uc3RydWN0b3IiLCJ4Y29kZVZlcnNpb24iLCJhcmdzIiwibG9nIiwiXyIsImNsb25lIiwiZGVmYXVsdExvZ2dlciIsImRldmljZSIsInBsYXRmb3JtVmVyc2lvbiIsInBsYXRmb3JtTmFtZSIsImlvc1Nka1ZlcnNpb24iLCJob3N0IiwiaXNSZWFsRGV2aWNlIiwicmVhbERldmljZSIsImlkYiIsIndkYUJ1bmRsZVBhdGgiLCJzZXRXREFQYXRocyIsImJvb3RzdHJhcFBhdGgiLCJhZ2VudFBhdGgiLCJ3ZGFMb2NhbFBvcnQiLCJ3ZGFSZW1vdGVQb3J0Iiwid2RhQmFzZVVybCIsIldEQV9CQVNFX1VSTCIsInByZWJ1aWxkV0RBIiwid2ViRHJpdmVyQWdlbnRVcmwiLCJzdGFydGVkIiwid2RhQ29ubmVjdGlvblRpbWVvdXQiLCJ1c2VYY3Rlc3RydW5GaWxlIiwidXNlUHJlYnVpbHRXREEiLCJkZXJpdmVkRGF0YVBhdGgiLCJtanBlZ1NlcnZlclBvcnQiLCJ1cGRhdGVkV0RBQnVuZGxlSWQiLCJ1c2VQcmVpbnN0YWxsZWRXREEiLCJ4Y3Rlc3RBcGlDbGllbnQiLCJ4Y29kZWJ1aWxkIiwiY2FuU2tpcFhjb2RlYnVpbGQiLCJYY29kZUJ1aWxkIiwic2hvd1hjb2RlTG9nIiwieGNvZGVDb25maWdGaWxlIiwieGNvZGVPcmdJZCIsInhjb2RlU2lnbmluZ0lkIiwia2V5Y2hhaW5QYXRoIiwia2V5Y2hhaW5QYXNzd29yZCIsInVzZVNpbXBsZUJ1aWxkVGVzdCIsImxhdW5jaFRpbWVvdXQiLCJ3ZGFMYXVuY2hUaW1lb3V0IiwiYWxsb3dQcm92aXNpb25pbmdEZXZpY2VSZWdpc3RyYXRpb24iLCJyZXN1bHRCdW5kbGVQYXRoIiwicmVzdWx0QnVuZGxlVmVyc2lvbiIsImJ1bmRsZUlkRm9yWGN0ZXN0IiwiV0RBX1JVTk5FUl9CVU5ETEVfSURfRk9SX1hDVEVTVCIsIkJPT1RTVFJBUF9QQVRIIiwiaW5mbyIsInBhdGgiLCJyZXNvbHZlIiwiY2xlYW51cE9ic29sZXRlUHJvY2Vzc2VzIiwib2Jzb2xldGVQaWRzIiwiZ2V0UElEc0xpc3RlbmluZ09uUG9ydCIsInVybCIsInBvcnQiLCJjbWRMaW5lIiwiaW5jbHVkZXMiLCJ0b0xvd2VyQ2FzZSIsInVkaWQiLCJpc0VtcHR5IiwiZGVidWciLCJsZW5ndGgiLCJleGVjIiwiZSIsIndhcm4iLCJtZXNzYWdlIiwiaXNSdW5uaW5nIiwiZ2V0U3RhdHVzIiwiYmFzZVBhdGgiLCJub1Nlc3Npb25Qcm94eSIsIk5vU2Vzc2lvblByb3h5Iiwic2VydmVyIiwiaG9zdG5hbWUiLCJiYXNlIiwidGltZW91dCIsImNvbW1hbmQiLCJlcnIiLCJocmVmIiwidW5pbnN0YWxsIiwiYnVuZGxlSWRzIiwiZ2V0VXNlckluc3RhbGxlZEJ1bmRsZUlkc0J5QnVuZGxlTmFtZSIsImJ1bmRsZUlkIiwicmVtb3ZlQXBwIiwiX2NsZWFudXBQcm9qZWN0SWZGcmVzaCIsInBhY2thZ2VJbmZvIiwiSlNPTiIsInBhcnNlIiwiZnMiLCJyZWFkRmlsZSIsImpvaW4iLCJib3giLCJzdHJvbmdib3giLCJuYW1lIiwiYm94SXRlbSIsImdldEl0ZW0iLCJ0aW1lc3RhbXBQYXRoIiwicHJvY2VzcyIsImVudiIsIkhPTUUiLCJXREFfVVBHUkFERV9USU1FU1RBTVBfUEFUSCIsImV4aXN0cyIsImNyZWF0ZUl0ZW1XaXRoQ29udGVudHMiLCJ2ZXJzaW9uIiwicmVjZW50TW9kdWxlVmVyc2lvbiIsInJlYWQiLCJ1dGlsIiwiY29lcmNlVmVyc2lvbiIsIndyaXRlIiwiY29tcGFyZVZlcnNpb25zIiwiY2xlYW5Qcm9qZWN0IiwibGF1bmNoV2l0aFByZWluc3RhbGxlZFdEQSIsInNlc3Npb25JZCIsInhjdGVzdEVudiIsIlVTRV9QT1JUIiwiV0RBX1BST0RVQ1RfQlVORExFX0lERU5USUZJRVIiLCJNSlBFR19TRVJWRVJfUE9SVCIsIlhjdGVzdCIsInN0YXJ0Iiwic2V0dXBQcm94aWVzIiwic3RhdHVzIiwibGF1bmNoIiwiRXJyb3IiLCJzeW5jaHJvbml6YXRpb25LZXkiLCJub3JtYWxpemUiLCJhY3F1aXJlIiwicmVzZXRUZXN0UHJvY2Vzc2VzIiwic3RhcnRXaXRoSURCIiwiaW5pdCIsInByZWJ1aWxkIiwid2RhQnVuZGxlSWQiLCJ0ZXN0QnVuZGxlSWQiLCJwcmVwYXJlV0RBIiwicnVuWENVSVRlc3QiLCJwYXJzZUJ1bmRsZUlkIiwiaW5mb1BsaXN0UGF0aCIsImluZm9QbGlzdCIsInBsaXN0IiwicGFyc2VQbGlzdCIsIkNGQnVuZGxlSWRlbnRpZmllciIsImZldGNoV0RBQnVuZGxlIiwiaXNBcHBJbnN0YWxsZWQiLCJpbnN0YWxsQXBwIiwiaW5zdGFsbFhDVGVzdEJ1bmRsZSIsImJ1bmRsZVdEQVNpbSIsIndkYUJ1bmRsZVBhdGhzIiwiZ2xvYiIsIldEQV9SVU5ORVJfQVBQIiwiYWJzb2x1dGUiLCJpc1NvdXJjZUZyZXNoIiwiZXhpc3RzUHJvbWlzZXMiLCJzZXAiLCJtYXAiLCJzdWJQYXRoIiwiQiIsImFsbCIsInNvbWUiLCJ2IiwicHJveHlPcHRzIiwia2VlcEFsaXZlIiwiandwcm94eSIsIkpXUHJveHkiLCJwcm94eVJlcVJlcyIsImJpbmQiLCJxdWl0Iiwic3RvcCIsInJlc2V0IiwiX3VybCIsInByb3RvY29sIiwiZnVsbHlTdGFydGVkIiwicmV0cmlldmVEZXJpdmVkRGF0YVBhdGgiLCJzZXR1cENhY2hpbmciLCJidWlsZCIsInByb2R1Y3RCdW5kbGVJZGVudGlmaWVyIiwidXBncmFkZWRBdCIsImhhc1ZhbHVlIiwiV0RBX1JVTk5FUl9CVU5ETEVfSUQiLCJhY3R1YWxVcGdyYWRlVGltZXN0YW1wIiwiZ2V0V0RBVXBncmFkZVRpbWVzdGFtcCIsInRvTG93ZXIiLCJxdWl0QW5kVW5pbnN0YWxsIiwiZXhwb3J0cyIsIl9kZWZhdWx0IiwiZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi93ZWJkcml2ZXJhZ2VudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgdXJsIGZyb20gJ3VybCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgeyBKV1Byb3h5IH0gZnJvbSAnQGFwcGl1bS9iYXNlLWRyaXZlcic7XG5pbXBvcnQgeyBmcywgdXRpbCwgcGxpc3QgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IGRlZmF1bHRMb2dnZXIgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgTm9TZXNzaW9uUHJveHkgfSBmcm9tICcuL25vLXNlc3Npb24tcHJveHknO1xuaW1wb3J0IHtcbiAgZ2V0V0RBVXBncmFkZVRpbWVzdGFtcCwgcmVzZXRUZXN0UHJvY2Vzc2VzLCBnZXRQSURzTGlzdGVuaW5nT25Qb3J0LCBCT09UU1RSQVBfUEFUSFxufSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBYY29kZUJ1aWxkIGZyb20gJy4veGNvZGVidWlsZCc7XG5pbXBvcnQgQXN5bmNMb2NrIGZyb20gJ2FzeW5jLWxvY2snO1xuaW1wb3J0IHsgZXhlYyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5pbXBvcnQgeyBidW5kbGVXREFTaW0gfSBmcm9tICcuL2NoZWNrLWRlcGVuZGVuY2llcyc7XG5pbXBvcnQge1xuICBXREFfUlVOTkVSX0JVTkRMRV9JRCwgV0RBX1JVTk5FUl9CVU5ETEVfSURfRk9SX1hDVEVTVCwgV0RBX1JVTk5FUl9BUFAsXG4gIFdEQV9CQVNFX1VSTCwgV0RBX1VQR1JBREVfVElNRVNUQU1QX1BBVEhcbn0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHtYY3Rlc3R9IGZyb20gJ2FwcGl1bS1pb3MtZGV2aWNlJztcbmltcG9ydCB7c3Ryb25nYm94fSBmcm9tICdAYXBwaXVtL3N0cm9uZ2JveCc7XG5cbmNvbnN0IFdEQV9MQVVOQ0hfVElNRU9VVCA9IDYwICogMTAwMDtcbmNvbnN0IFdEQV9BR0VOVF9QT1JUID0gODEwMDtcbmNvbnN0IFdEQV9DRl9CVU5ETEVfTkFNRSA9ICdXZWJEcml2ZXJBZ2VudFJ1bm5lci1SdW5uZXInO1xuY29uc3QgU0hBUkVEX1JFU09VUkNFU19HVUFSRCA9IG5ldyBBc3luY0xvY2soKTtcbmNvbnN0IFJFQ0VOVF9NT0RVTEVfVkVSU0lPTl9JVEVNX05BTUUgPSAncmVjZW50V2RhTW9kdWxlVmVyc2lvbic7XG5cbmNsYXNzIFdlYkRyaXZlckFnZW50IHtcbiAgY29uc3RydWN0b3IgKHhjb2RlVmVyc2lvbiwgYXJncyA9IHt9LCBsb2cgPSBudWxsKSB7XG4gICAgdGhpcy54Y29kZVZlcnNpb24gPSB4Y29kZVZlcnNpb247XG5cbiAgICB0aGlzLmFyZ3MgPSBfLmNsb25lKGFyZ3MpO1xuICAgIHRoaXMubG9nID0gbG9nID8/IGRlZmF1bHRMb2dnZXI7XG5cbiAgICB0aGlzLmRldmljZSA9IGFyZ3MuZGV2aWNlO1xuICAgIHRoaXMucGxhdGZvcm1WZXJzaW9uID0gYXJncy5wbGF0Zm9ybVZlcnNpb247XG4gICAgdGhpcy5wbGF0Zm9ybU5hbWUgPSBhcmdzLnBsYXRmb3JtTmFtZTtcbiAgICB0aGlzLmlvc1Nka1ZlcnNpb24gPSBhcmdzLmlvc1Nka1ZlcnNpb247XG4gICAgdGhpcy5ob3N0ID0gYXJncy5ob3N0O1xuICAgIHRoaXMuaXNSZWFsRGV2aWNlID0gISFhcmdzLnJlYWxEZXZpY2U7XG4gICAgdGhpcy5pZGIgPSAoYXJncy5kZXZpY2UgfHwge30pLmlkYjtcbiAgICB0aGlzLndkYUJ1bmRsZVBhdGggPSBhcmdzLndkYUJ1bmRsZVBhdGg7XG5cbiAgICB0aGlzLnNldFdEQVBhdGhzKGFyZ3MuYm9vdHN0cmFwUGF0aCwgYXJncy5hZ2VudFBhdGgpO1xuXG4gICAgdGhpcy53ZGFMb2NhbFBvcnQgPSBhcmdzLndkYUxvY2FsUG9ydDtcbiAgICB0aGlzLndkYVJlbW90ZVBvcnQgPSBhcmdzLndkYUxvY2FsUG9ydCB8fCBXREFfQUdFTlRfUE9SVDtcbiAgICB0aGlzLndkYUJhc2VVcmwgPSBhcmdzLndkYUJhc2VVcmwgfHwgV0RBX0JBU0VfVVJMO1xuXG4gICAgdGhpcy5wcmVidWlsZFdEQSA9IGFyZ3MucHJlYnVpbGRXREE7XG5cbiAgICAvLyB0aGlzLmFyZ3Mud2ViRHJpdmVyQWdlbnRVcmwgZ3VpYXJhbnRlZXMgdGhlIGNhcGFiaWxpdGllcyBhY3VhbGx5XG4gICAgLy8gZ2F2ZSAnYXBwaXVtOndlYkRyaXZlckFnZW50VXJsJyBidXQgJ3RoaXMud2ViRHJpdmVyQWdlbnRVcmwnXG4gICAgLy8gY291bGQgYmUgdXNlZCBmb3IgY2FjaGluZyBXREEgd2l0aCB4Y29kZWJ1aWxkLlxuICAgIHRoaXMud2ViRHJpdmVyQWdlbnRVcmwgPSBhcmdzLndlYkRyaXZlckFnZW50VXJsO1xuXG4gICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLndkYUNvbm5lY3Rpb25UaW1lb3V0ID0gYXJncy53ZGFDb25uZWN0aW9uVGltZW91dDtcblxuICAgIHRoaXMudXNlWGN0ZXN0cnVuRmlsZSA9IGFyZ3MudXNlWGN0ZXN0cnVuRmlsZTtcbiAgICB0aGlzLnVzZVByZWJ1aWx0V0RBID0gYXJncy51c2VQcmVidWlsdFdEQTtcbiAgICB0aGlzLmRlcml2ZWREYXRhUGF0aCA9IGFyZ3MuZGVyaXZlZERhdGFQYXRoO1xuICAgIHRoaXMubWpwZWdTZXJ2ZXJQb3J0ID0gYXJncy5tanBlZ1NlcnZlclBvcnQ7XG5cbiAgICB0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCA9IGFyZ3MudXBkYXRlZFdEQUJ1bmRsZUlkO1xuXG4gICAgdGhpcy51c2VQcmVpbnN0YWxsZWRXREEgPSBhcmdzLnVzZVByZWluc3RhbGxlZFdEQTtcbiAgICB0aGlzLnhjdGVzdEFwaUNsaWVudCA9IG51bGw7XG5cbiAgICB0aGlzLnhjb2RlYnVpbGQgPSB0aGlzLmNhblNraXBYY29kZWJ1aWxkXG4gICAgPyBudWxsXG4gICAgOiBuZXcgWGNvZGVCdWlsZCh0aGlzLnhjb2RlVmVyc2lvbiwgdGhpcy5kZXZpY2UsIHtcbiAgICAgICAgcGxhdGZvcm1WZXJzaW9uOiB0aGlzLnBsYXRmb3JtVmVyc2lvbixcbiAgICAgICAgcGxhdGZvcm1OYW1lOiB0aGlzLnBsYXRmb3JtTmFtZSxcbiAgICAgICAgaW9zU2RrVmVyc2lvbjogdGhpcy5pb3NTZGtWZXJzaW9uLFxuICAgICAgICBhZ2VudFBhdGg6IHRoaXMuYWdlbnRQYXRoLFxuICAgICAgICBib290c3RyYXBQYXRoOiB0aGlzLmJvb3RzdHJhcFBhdGgsXG4gICAgICAgIHJlYWxEZXZpY2U6IHRoaXMuaXNSZWFsRGV2aWNlLFxuICAgICAgICBzaG93WGNvZGVMb2c6IGFyZ3Muc2hvd1hjb2RlTG9nLFxuICAgICAgICB4Y29kZUNvbmZpZ0ZpbGU6IGFyZ3MueGNvZGVDb25maWdGaWxlLFxuICAgICAgICB4Y29kZU9yZ0lkOiBhcmdzLnhjb2RlT3JnSWQsXG4gICAgICAgIHhjb2RlU2lnbmluZ0lkOiBhcmdzLnhjb2RlU2lnbmluZ0lkLFxuICAgICAgICBrZXljaGFpblBhdGg6IGFyZ3Mua2V5Y2hhaW5QYXRoLFxuICAgICAgICBrZXljaGFpblBhc3N3b3JkOiBhcmdzLmtleWNoYWluUGFzc3dvcmQsXG4gICAgICAgIHVzZVNpbXBsZUJ1aWxkVGVzdDogYXJncy51c2VTaW1wbGVCdWlsZFRlc3QsXG4gICAgICAgIHVzZVByZWJ1aWx0V0RBOiBhcmdzLnVzZVByZWJ1aWx0V0RBLFxuICAgICAgICB1cGRhdGVkV0RBQnVuZGxlSWQ6IHRoaXMudXBkYXRlZFdEQUJ1bmRsZUlkLFxuICAgICAgICBsYXVuY2hUaW1lb3V0OiBhcmdzLndkYUxhdW5jaFRpbWVvdXQgfHwgV0RBX0xBVU5DSF9USU1FT1VULFxuICAgICAgICB3ZGFSZW1vdGVQb3J0OiB0aGlzLndkYVJlbW90ZVBvcnQsXG4gICAgICAgIHVzZVhjdGVzdHJ1bkZpbGU6IHRoaXMudXNlWGN0ZXN0cnVuRmlsZSxcbiAgICAgICAgZGVyaXZlZERhdGFQYXRoOiBhcmdzLmRlcml2ZWREYXRhUGF0aCxcbiAgICAgICAgbWpwZWdTZXJ2ZXJQb3J0OiB0aGlzLm1qcGVnU2VydmVyUG9ydCxcbiAgICAgICAgYWxsb3dQcm92aXNpb25pbmdEZXZpY2VSZWdpc3RyYXRpb246IGFyZ3MuYWxsb3dQcm92aXNpb25pbmdEZXZpY2VSZWdpc3RyYXRpb24sXG4gICAgICAgIHJlc3VsdEJ1bmRsZVBhdGg6IGFyZ3MucmVzdWx0QnVuZGxlUGF0aCxcbiAgICAgICAgcmVzdWx0QnVuZGxlVmVyc2lvbjogYXJncy5yZXN1bHRCdW5kbGVWZXJzaW9uLFxuICAgICAgfSwgdGhpcy5sb2cpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0cnVlIGlmIHRoZSBzZXNzaW9uIGRvZXMgbm90IG5lZWQgeGNvZGVidWlsZC5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHNlc3Npb24gbmVlZHMvaGFzIHhjb2RlYnVpbGQuXG4gICAqL1xuICBnZXQgY2FuU2tpcFhjb2RlYnVpbGQgKCkge1xuICAgIC8vIFVzZSB0aGlzLmFyZ3Mud2ViRHJpdmVyQWdlbnRVcmwgdG8gZ3VhcmFudGVlXG4gICAgLy8gdGhlIGNhcGFiaWxpdGllcyBzZXQgZ2F2ZSB0aGUgYGFwcGl1bTp3ZWJEcml2ZXJBZ2VudFVybGAuXG4gICAgcmV0dXJuIHRoaXMudXNlUHJlaW5zdGFsbGVkV0RBIHx8IHRoaXMuYXJncy53ZWJEcml2ZXJBZ2VudFVybDtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBCdW5kbGUgSUQgZm9yIFhjdGVzdC5cbiAgICovXG4gIGdldCBidW5kbGVJZEZvclhjdGVzdCAoKSB7XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlZFdEQUJ1bmRsZUlkID8gYCR7dGhpcy51cGRhdGVkV0RBQnVuZGxlSWR9LnhjdHJ1bm5lcmAgOiBXREFfUlVOTkVSX0JVTkRMRV9JRF9GT1JfWENURVNUO1xuICB9XG5cbiAgc2V0V0RBUGF0aHMgKGJvb3RzdHJhcFBhdGgsIGFnZW50UGF0aCkge1xuICAgIC8vIGFsbG93IHRoZSB1c2VyIHRvIHNwZWNpZnkgYSBwbGFjZSBmb3IgV0RBLiBUaGlzIGlzIHVuZG9jdW1lbnRlZCBhbmRcbiAgICAvLyBvbmx5IGhlcmUgZm9yIHRoZSBwdXJwb3NlcyBvZiB0ZXN0aW5nIGRldmVsb3BtZW50IG9mIFdEQVxuICAgIHRoaXMuYm9vdHN0cmFwUGF0aCA9IGJvb3RzdHJhcFBhdGggfHwgQk9PVFNUUkFQX1BBVEg7XG4gICAgdGhpcy5sb2cuaW5mbyhgVXNpbmcgV0RBIHBhdGg6ICcke3RoaXMuYm9vdHN0cmFwUGF0aH0nYCk7XG5cbiAgICAvLyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gc3BlY2lmeSBhZ2VudFBhdGggdG9vXG4gICAgdGhpcy5hZ2VudFBhdGggPSBhZ2VudFBhdGggfHwgcGF0aC5yZXNvbHZlKHRoaXMuYm9vdHN0cmFwUGF0aCwgJ1dlYkRyaXZlckFnZW50Lnhjb2RlcHJvaicpO1xuICAgIHRoaXMubG9nLmluZm8oYFVzaW5nIFdEQSBhZ2VudDogJyR7dGhpcy5hZ2VudFBhdGh9J2ApO1xuICB9XG5cbiAgYXN5bmMgY2xlYW51cE9ic29sZXRlUHJvY2Vzc2VzICgpIHtcbiAgICBjb25zdCBvYnNvbGV0ZVBpZHMgPSBhd2FpdCBnZXRQSURzTGlzdGVuaW5nT25Qb3J0KHRoaXMudXJsLnBvcnQsXG4gICAgICAoY21kTGluZSkgPT4gY21kTGluZS5pbmNsdWRlcygnL1dlYkRyaXZlckFnZW50UnVubmVyJykgJiZcbiAgICAgICAgIWNtZExpbmUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLmRldmljZS51ZGlkLnRvTG93ZXJDYXNlKCkpKTtcblxuICAgIGlmIChfLmlzRW1wdHkob2Jzb2xldGVQaWRzKSkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYE5vIG9ic29sZXRlIGNhY2hlZCBwcm9jZXNzZXMgZnJvbSBwcmV2aW91cyBXREEgc2Vzc2lvbnMgYCArXG4gICAgICAgIGBsaXN0ZW5pbmcgb24gcG9ydCAke3RoaXMudXJsLnBvcnR9IGhhdmUgYmVlbiBmb3VuZGApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nLmluZm8oYERldGVjdGVkICR7b2Jzb2xldGVQaWRzLmxlbmd0aH0gb2Jzb2xldGUgY2FjaGVkIHByb2Nlc3Mke29ic29sZXRlUGlkcy5sZW5ndGggPT09IDEgPyAnJyA6ICdlcyd9IGAgK1xuICAgICAgYGZyb20gcHJldmlvdXMgV0RBIHNlc3Npb25zLiBDbGVhbmluZyB0aGVtIHVwYCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGV4ZWMoJ2tpbGwnLCBvYnNvbGV0ZVBpZHMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLndhcm4oYEZhaWxlZCB0byBraWxsIG9ic29sZXRlIGNhY2hlZCBwcm9jZXNzJHtvYnNvbGV0ZVBpZHMubGVuZ3RoID09PSAxID8gJycgOiAnZXMnfSAnJHtvYnNvbGV0ZVBpZHN9Jy4gYCArXG4gICAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBib29sZWFuIGlmIFdEQSBpcyBydW5uaW5nIG9yIG5vdFxuICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIFdEQSBpcyBydW5uaW5nXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgaW52YWxpZCByZXNwb25zZSBjb2RlIG9yIGJvZHlcbiAgICovXG4gIGFzeW5jIGlzUnVubmluZyAoKSB7XG4gICAgcmV0dXJuICEhKGF3YWl0IHRoaXMuZ2V0U3RhdHVzKCkpO1xuICB9XG5cbiAgZ2V0IGJhc2VQYXRoICgpIHtcbiAgICBpZiAodGhpcy51cmwucGF0aCA9PT0gJy8nKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnVybC5wYXRoIHx8ICcnO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBjdXJyZW50IHJ1bm5pbmcgV0RBJ3Mgc3RhdHVzIGxpa2UgYmVsb3dcbiAgICoge1xuICAgKiAgIFwic3RhdGVcIjogXCJzdWNjZXNzXCIsXG4gICAqICAgXCJvc1wiOiB7XG4gICAqICAgICBcIm5hbWVcIjogXCJpT1NcIixcbiAgICogICAgIFwidmVyc2lvblwiOiBcIjExLjRcIixcbiAgICogICAgIFwic2RrVmVyc2lvblwiOiBcIjExLjNcIlxuICAgKiAgIH0sXG4gICAqICAgXCJpb3NcIjoge1xuICAgKiAgICAgXCJzaW11bGF0b3JWZXJzaW9uXCI6IFwiMTEuNFwiLFxuICAgKiAgICAgXCJpcFwiOiBcIjE3Mi4yNTQuOTkuMzRcIlxuICAgKiAgIH0sXG4gICAqICAgXCJidWlsZFwiOiB7XG4gICAqICAgICBcInRpbWVcIjogXCJKdW4gMjQgMjAxOCAxNzowODoyMVwiLFxuICAgKiAgICAgXCJwcm9kdWN0QnVuZGxlSWRlbnRpZmllclwiOiBcImNvbS5mYWNlYm9vay5XZWJEcml2ZXJBZ2VudFJ1bm5lclwiXG4gICAqICAgfVxuICAgKiB9XG4gICAqXG4gICAqIEByZXR1cm4gez9vYmplY3R9IFN0YXRlIE9iamVjdFxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGludmFsaWQgcmVzcG9uc2UgY29kZSBvciBib2R5XG4gICAqL1xuICBhc3luYyBnZXRTdGF0dXMgKCkge1xuICAgIGNvbnN0IG5vU2Vzc2lvblByb3h5ID0gbmV3IE5vU2Vzc2lvblByb3h5KHtcbiAgICAgIHNlcnZlcjogdGhpcy51cmwuaG9zdG5hbWUsXG4gICAgICBwb3J0OiB0aGlzLnVybC5wb3J0LFxuICAgICAgYmFzZTogdGhpcy5iYXNlUGF0aCxcbiAgICAgIHRpbWVvdXQ6IDMwMDAsXG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBub1Nlc3Npb25Qcm94eS5jb21tYW5kKCcvc3RhdHVzJywgJ0dFVCcpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYFdEQSBpcyBub3QgbGlzdGVuaW5nIGF0ICcke3RoaXMudXJsLmhyZWZ9J2ApO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVuaW5zdGFsbCBXREFzIGZyb20gdGhlIHRlc3QgZGV2aWNlLlxuICAgKiBPdmVyIFhjb2RlIDExLCBtdWx0aXBsZSBXREEgY2FuIGJlIGluIHRoZSBkZXZpY2Ugc2luY2UgWGNvZGUgMTEgZ2VuZXJhdGVzIGRpZmZlcmVudCBXREEuXG4gICAqIEFwcGl1bSBkb2VzIG5vdCBleHBlY3QgbXVsdGlwbGUgV0RBcyBhcmUgcnVubmluZyBvbiBhIGRldmljZS5cbiAgICovXG4gIGFzeW5jIHVuaW5zdGFsbCAoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJ1bmRsZUlkcyA9IGF3YWl0IHRoaXMuZGV2aWNlLmdldFVzZXJJbnN0YWxsZWRCdW5kbGVJZHNCeUJ1bmRsZU5hbWUoV0RBX0NGX0JVTkRMRV9OQU1FKTtcbiAgICAgIGlmIChfLmlzRW1wdHkoYnVuZGxlSWRzKSkge1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZygnTm8gV0RBcyBvbiB0aGUgZGV2aWNlLicpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMubG9nLmRlYnVnKGBVbmluc3RhbGxpbmcgV0RBczogJyR7YnVuZGxlSWRzfSdgKTtcbiAgICAgIGZvciAoY29uc3QgYnVuZGxlSWQgb2YgYnVuZGxlSWRzKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZGV2aWNlLnJlbW92ZUFwcChidW5kbGVJZCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoZSk7XG4gICAgICB0aGlzLmxvZy53YXJuKGBXZWJEcml2ZXJBZ2VudCB1bmluc3RhbGwgZmFpbGVkLiBQZXJoYXBzLCBpdCBpcyBhbHJlYWR5IHVuaW5zdGFsbGVkPyBgICtcbiAgICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBfY2xlYW51cFByb2plY3RJZkZyZXNoICgpIHtcbiAgICBpZiAodGhpcy5jYW5Ta2lwWGNvZGVidWlsZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhY2thZ2VJbmZvID0gSlNPTi5wYXJzZShhd2FpdCBmcy5yZWFkRmlsZShwYXRoLmpvaW4oQk9PVFNUUkFQX1BBVEgsICdwYWNrYWdlLmpzb24nKSwgJ3V0ZjgnKSk7XG4gICAgY29uc3QgYm94ID0gc3Ryb25nYm94KHBhY2thZ2VJbmZvLm5hbWUpO1xuICAgIGxldCBib3hJdGVtID0gYm94LmdldEl0ZW0oUkVDRU5UX01PRFVMRV9WRVJTSU9OX0lURU1fTkFNRSk7XG4gICAgaWYgKCFib3hJdGVtKSB7XG4gICAgICBjb25zdCB0aW1lc3RhbXBQYXRoID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuZW52LkhPTUUsIFdEQV9VUEdSQURFX1RJTUVTVEFNUF9QQVRIKTtcbiAgICAgIGlmIChhd2FpdCBmcy5leGlzdHModGltZXN0YW1wUGF0aCkpIHtcbiAgICAgICAgLy8gVE9ETzogSXQgaXMgcHJvYmFibHkgYSBiaXQgdWdseSB0byBoYXJkY29kZSB0aGUgcmVjZW50IHZlcnNpb24gc3RyaW5nLFxuICAgICAgICAvLyBUT0RPOiBob3Zld2VyIGl0IHNob3VsZCBkbyB0aGUgam9iIGFzIGEgdGVtcG9yYXJ5IHRyYW5zaXRpb24gdHJpY2tcbiAgICAgICAgLy8gVE9ETzogdG8gc3dpdGNoIGZyb20gYSBoYXJkY29kZWQgZmlsZSBwYXRoIHRvIHRoZSBzdHJvbmdib3ggdXNhZ2UuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYm94SXRlbSA9IGF3YWl0IGJveC5jcmVhdGVJdGVtV2l0aENvbnRlbnRzKFJFQ0VOVF9NT0RVTEVfVkVSU0lPTl9JVEVNX05BTUUsICc1LjAuMCcpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgdGhpcy5sb2cud2FybihgVGhlIGFjdHVhbCBtb2R1bGUgdmVyc2lvbiBjYW5ub3QgYmUgcGVyc2lzdGVkOiAke2UubWVzc2FnZX1gKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oJ1RoZXJlIGlzIG5vIG5lZWQgdG8gcGVyZm9ybSB0aGUgcHJvamVjdCBjbGVhbnVwLiBBIGZyZXNoIGluc3RhbGwgaGFzIGJlZW4gZGV0ZWN0ZWQnKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBib3guY3JlYXRlSXRlbVdpdGhDb250ZW50cyhSRUNFTlRfTU9EVUxFX1ZFUlNJT05fSVRFTV9OQU1FLCBwYWNrYWdlSW5mby52ZXJzaW9uKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHRoaXMubG9nLndhcm4oYFRoZSBhY3R1YWwgbW9kdWxlIHZlcnNpb24gY2Fubm90IGJlIHBlcnNpc3RlZDogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCByZWNlbnRNb2R1bGVWZXJzaW9uID0gYXdhaXQgYm94SXRlbS5yZWFkKCk7XG4gICAgdHJ5IHtcbiAgICAgIHJlY2VudE1vZHVsZVZlcnNpb24gPSB1dGlsLmNvZXJjZVZlcnNpb24ocmVjZW50TW9kdWxlVmVyc2lvbiwgdHJ1ZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2cud2FybihgVGhlIHBlcnNpc3RlZCBtb2R1bGUgdmVyc2lvbiBzdHJpbmcgaGFzIGJlZW4gZGFtYWdlZDogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBVcGRhdGluZyBpdCB0byAnJHtwYWNrYWdlSW5mby52ZXJzaW9ufScgYXNzdW1pbmcgdGhlIHByb2plY3QgY2xlbnVwIGlzIG5vdCBuZWVkZWRgKTtcbiAgICAgIGF3YWl0IGJveEl0ZW0ud3JpdGUocGFja2FnZUluZm8udmVyc2lvbik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHV0aWwuY29tcGFyZVZlcnNpb25zKHJlY2VudE1vZHVsZVZlcnNpb24sICc+PScsIHBhY2thZ2VJbmZvLnZlcnNpb24pKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKFxuICAgICAgICBgV2ViRHJpdmVyQWdlbnQgZG9lcyBub3QgbmVlZCBhIGNsZWFudXAuIFRoZSBwcm9qZWN0IHNvdXJjZXMgYXJlIHVwIHRvIGRhdGUgYCArXG4gICAgICAgIGAoJHtyZWNlbnRNb2R1bGVWZXJzaW9ufSA+PSAke3BhY2thZ2VJbmZvLnZlcnNpb259KWBcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2cuaW5mbyhcbiAgICAgIGBDbGVhbmluZyB1cCB0aGUgV2ViRHJpdmVyQWdlbnQgcHJvamVjdCBhZnRlciB0aGUgbW9kdWxlIHVwZ3JhZGUgaGFzIGhhcHBlbmVkIGAgK1xuICAgICAgYCgke3JlY2VudE1vZHVsZVZlcnNpb259IDwgJHtwYWNrYWdlSW5mby52ZXJzaW9ufSlgXG4gICAgKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy54Y29kZWJ1aWxkLmNsZWFuUHJvamVjdCgpO1xuICAgICAgYXdhaXQgYm94SXRlbS53cml0ZShwYWNrYWdlSW5mby52ZXJzaW9uKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy53YXJuKGBDYW5ub3QgcGVyZm9ybSBXZWJEcml2ZXJBZ2VudCBwcm9qZWN0IGNsZWFudXAuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTGF1bmNoIFdEQSB3aXRoIHByZWluc3RhbGxlZCBwYWNrYWdlIHdpdGhvdXQgeGNvZGVidWlsZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlc3Npb25JZCBMYXVuY2ggV0RBIGFuZCBlc3RhYmxpc2ggdGhlIHNlc3Npb24gd2l0aCB0aGlzIHNlc3Npb25JZFxuICAgKiBAcmV0dXJuIHs/b2JqZWN0fSBTdGF0ZSBPYmplY3RcbiAgICovXG4gIGFzeW5jIGxhdW5jaFdpdGhQcmVpbnN0YWxsZWRXREEoc2Vzc2lvbklkKSB7XG4gICAgY29uc3QgeGN0ZXN0RW52ID0ge1xuICAgICAgVVNFX1BPUlQ6IHRoaXMud2RhTG9jYWxQb3J0IHx8IFdEQV9BR0VOVF9QT1JULFxuICAgICAgV0RBX1BST0RVQ1RfQlVORExFX0lERU5USUZJRVI6IHRoaXMuYnVuZGxlSWRGb3JYY3Rlc3RcbiAgICB9O1xuICAgIGlmICh0aGlzLm1qcGVnU2VydmVyUG9ydCkge1xuICAgICAgeGN0ZXN0RW52Lk1KUEVHX1NFUlZFUl9QT1JUID0gdGhpcy5tanBlZ1NlcnZlclBvcnQ7XG4gICAgfVxuICAgIHRoaXMubG9nLmluZm8oJ0xhdW5jaGluZyBXZWJEcml2ZXJBZ2VudCBvbiB0aGUgZGV2aWNlIHdpdGhvdXQgeGNvZGVidWlsZCcpO1xuICAgIHRoaXMueGN0ZXN0QXBpQ2xpZW50ID0gbmV3IFhjdGVzdCh0aGlzLmRldmljZS51ZGlkLCB0aGlzLmJ1bmRsZUlkRm9yWGN0ZXN0LCBudWxsLCB7ZW52OiB4Y3Rlc3RFbnZ9KTtcblxuICAgIGF3YWl0IHRoaXMueGN0ZXN0QXBpQ2xpZW50LnN0YXJ0KCk7XG5cbiAgICB0aGlzLnNldHVwUHJveGllcyhzZXNzaW9uSWQpO1xuICAgIGNvbnN0IHN0YXR1cyA9IGF3YWl0IHRoaXMuZ2V0U3RhdHVzKCk7XG4gICAgdGhpcy5zdGFydGVkID0gdHJ1ZTtcbiAgICByZXR1cm4gc3RhdHVzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBjdXJyZW50IHJ1bm5pbmcgV0RBJ3Mgc3RhdHVzIGxpa2UgYmVsb3cgYWZ0ZXIgbGF1bmNoaW5nIFdEQVxuICAgKiB7XG4gICAqICAgXCJzdGF0ZVwiOiBcInN1Y2Nlc3NcIixcbiAgICogICBcIm9zXCI6IHtcbiAgICogICAgIFwibmFtZVwiOiBcImlPU1wiLFxuICAgKiAgICAgXCJ2ZXJzaW9uXCI6IFwiMTEuNFwiLFxuICAgKiAgICAgXCJzZGtWZXJzaW9uXCI6IFwiMTEuM1wiXG4gICAqICAgfSxcbiAgICogICBcImlvc1wiOiB7XG4gICAqICAgICBcInNpbXVsYXRvclZlcnNpb25cIjogXCIxMS40XCIsXG4gICAqICAgICBcImlwXCI6IFwiMTcyLjI1NC45OS4zNFwiXG4gICAqICAgfSxcbiAgICogICBcImJ1aWxkXCI6IHtcbiAgICogICAgIFwidGltZVwiOiBcIkp1biAyNCAyMDE4IDE3OjA4OjIxXCIsXG4gICAqICAgICBcInByb2R1Y3RCdW5kbGVJZGVudGlmaWVyXCI6IFwiY29tLmZhY2Vib29rLldlYkRyaXZlckFnZW50UnVubmVyXCJcbiAgICogICB9XG4gICAqIH1cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlc3Npb25JZCBMYXVuY2ggV0RBIGFuZCBlc3RhYmxpc2ggdGhlIHNlc3Npb24gd2l0aCB0aGlzIHNlc3Npb25JZFxuICAgKiBAcmV0dXJuIHs/b2JqZWN0fSBTdGF0ZSBPYmplY3RcbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBpbnZhbGlkIHJlc3BvbnNlIGNvZGUgb3IgYm9keVxuICAgKi9cbiAgYXN5bmMgbGF1bmNoIChzZXNzaW9uSWQpIHtcbiAgICBpZiAodGhpcy53ZWJEcml2ZXJBZ2VudFVybCkge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgVXNpbmcgcHJvdmlkZWQgV2ViZHJpdmVyQWdlbnQgYXQgJyR7dGhpcy53ZWJEcml2ZXJBZ2VudFVybH0nYCk7XG4gICAgICB0aGlzLnVybCA9IHRoaXMud2ViRHJpdmVyQWdlbnRVcmw7XG4gICAgICB0aGlzLnNldHVwUHJveGllcyhzZXNzaW9uSWQpO1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0U3RhdHVzKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudXNlUHJlaW5zdGFsbGVkV0RBKSB7XG4gICAgICBpZiAodGhpcy5pc1JlYWxEZXZpY2UpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMubGF1bmNoV2l0aFByZWluc3RhbGxlZFdEQShzZXNzaW9uSWQpO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1c2VQcmVpbnN0YWxsZWRXREEgaXMgYXZhaWxhYmxlIG9ubHkgZm9yIGEgcmVhbCBkZXZpY2UuJyk7XG4gICAgfVxuXG4gICAgdGhpcy5sb2cuaW5mbygnTGF1bmNoaW5nIFdlYkRyaXZlckFnZW50IG9uIHRoZSBkZXZpY2UnKTtcblxuICAgIHRoaXMuc2V0dXBQcm94aWVzKHNlc3Npb25JZCk7XG5cbiAgICBpZiAoIXRoaXMudXNlWGN0ZXN0cnVuRmlsZSAmJiAhYXdhaXQgZnMuZXhpc3RzKHRoaXMuYWdlbnRQYXRoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUcnlpbmcgdG8gdXNlIFdlYkRyaXZlckFnZW50IHByb2plY3QgYXQgJyR7dGhpcy5hZ2VudFBhdGh9JyBidXQgdGhlIGAgK1xuICAgICAgICAgICAgICAgICAgICAgICdmaWxlIGRvZXMgbm90IGV4aXN0Jyk7XG4gICAgfVxuXG4gICAgLy8gdXNlWGN0ZXN0cnVuRmlsZSBhbmQgdXNlUHJlYnVpbHRXREEgdXNlIGV4aXN0aW5nIGRlcGVuZGVuY2llc1xuICAgIC8vIEl0IGRlcGVuZHMgb24gdXNlciBzaWRlXG4gICAgaWYgKHRoaXMuaWRiIHx8IHRoaXMudXNlWGN0ZXN0cnVuRmlsZSB8fCAodGhpcy5kZXJpdmVkRGF0YVBhdGggJiYgdGhpcy51c2VQcmVidWlsdFdEQSkpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oJ1NraXBwZWQgV0RBIHByb2plY3QgY2xlYW51cCBhY2NvcmRpbmcgdG8gdGhlIHByb3ZpZGVkIGNhcGFiaWxpdGllcycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzeW5jaHJvbml6YXRpb25LZXkgPSBwYXRoLm5vcm1hbGl6ZSh0aGlzLmJvb3RzdHJhcFBhdGgpO1xuICAgICAgYXdhaXQgU0hBUkVEX1JFU09VUkNFU19HVUFSRC5hY3F1aXJlKHN5bmNocm9uaXphdGlvbktleSxcbiAgICAgICAgYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5fY2xlYW51cFByb2plY3RJZkZyZXNoKCkpO1xuICAgIH1cblxuICAgIC8vIFdlIG5lZWQgdG8gcHJvdmlkZSBXREEgbG9jYWwgcG9ydCwgYmVjYXVzZSBpdCBtaWdodCBiZSBvY2N1cGllZFxuICAgIGF3YWl0IHJlc2V0VGVzdFByb2Nlc3Nlcyh0aGlzLmRldmljZS51ZGlkLCAhdGhpcy5pc1JlYWxEZXZpY2UpO1xuXG4gICAgaWYgKHRoaXMuaWRiKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5zdGFydFdpdGhJREIoKTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnhjb2RlYnVpbGQuaW5pdCh0aGlzLm5vU2Vzc2lvblByb3h5KTtcblxuICAgIC8vIFN0YXJ0IHRoZSB4Y29kZWJ1aWxkIHByb2Nlc3NcbiAgICBpZiAodGhpcy5wcmVidWlsZFdEQSkge1xuICAgICAgYXdhaXQgdGhpcy54Y29kZWJ1aWxkLnByZWJ1aWxkKCk7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCB0aGlzLnhjb2RlYnVpbGQuc3RhcnQoKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0V2l0aElEQiAoKSB7XG4gICAgdGhpcy5sb2cuaW5mbygnV2lsbCBsYXVuY2ggV0RBIHdpdGggaWRiIGluc3RlYWQgb2YgeGNvZGVidWlsZCBzaW5jZSB0aGUgY29ycmVzcG9uZGluZyBmbGFnIGlzIGVuYWJsZWQnKTtcbiAgICBjb25zdCB7d2RhQnVuZGxlSWQsIHRlc3RCdW5kbGVJZH0gPSBhd2FpdCB0aGlzLnByZXBhcmVXREEoKTtcbiAgICBjb25zdCBlbnYgPSB7XG4gICAgICBVU0VfUE9SVDogdGhpcy53ZGFSZW1vdGVQb3J0LFxuICAgICAgV0RBX1BST0RVQ1RfQlVORExFX0lERU5USUZJRVI6IHRoaXMudXBkYXRlZFdEQUJ1bmRsZUlkLFxuICAgIH07XG4gICAgaWYgKHRoaXMubWpwZWdTZXJ2ZXJQb3J0KSB7XG4gICAgICBlbnYuTUpQRUdfU0VSVkVSX1BPUlQgPSB0aGlzLm1qcGVnU2VydmVyUG9ydDtcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5pZGIucnVuWENVSVRlc3Qod2RhQnVuZGxlSWQsIHdkYUJ1bmRsZUlkLCB0ZXN0QnVuZGxlSWQsIHtlbnZ9KTtcbiAgfVxuXG4gIGFzeW5jIHBhcnNlQnVuZGxlSWQgKHdkYUJ1bmRsZVBhdGgpIHtcbiAgICBjb25zdCBpbmZvUGxpc3RQYXRoID0gcGF0aC5qb2luKHdkYUJ1bmRsZVBhdGgsICdJbmZvLnBsaXN0Jyk7XG4gICAgY29uc3QgaW5mb1BsaXN0ID0gYXdhaXQgcGxpc3QucGFyc2VQbGlzdChhd2FpdCBmcy5yZWFkRmlsZShpbmZvUGxpc3RQYXRoKSk7XG4gICAgaWYgKCFpbmZvUGxpc3QuQ0ZCdW5kbGVJZGVudGlmaWVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIGJ1bmRsZSBpZCBpbiAnJHtpbmZvUGxpc3RQYXRofSdgKTtcbiAgICB9XG4gICAgcmV0dXJuIGluZm9QbGlzdC5DRkJ1bmRsZUlkZW50aWZpZXI7XG4gIH1cblxuICBhc3luYyBwcmVwYXJlV0RBICgpIHtcbiAgICBjb25zdCB3ZGFCdW5kbGVQYXRoID0gdGhpcy53ZGFCdW5kbGVQYXRoIHx8IGF3YWl0IHRoaXMuZmV0Y2hXREFCdW5kbGUoKTtcbiAgICBjb25zdCB3ZGFCdW5kbGVJZCA9IGF3YWl0IHRoaXMucGFyc2VCdW5kbGVJZCh3ZGFCdW5kbGVQYXRoKTtcbiAgICBpZiAoIWF3YWl0IHRoaXMuZGV2aWNlLmlzQXBwSW5zdGFsbGVkKHdkYUJ1bmRsZUlkKSkge1xuICAgICAgYXdhaXQgdGhpcy5kZXZpY2UuaW5zdGFsbEFwcCh3ZGFCdW5kbGVQYXRoKTtcbiAgICB9XG4gICAgY29uc3QgdGVzdEJ1bmRsZUlkID0gYXdhaXQgdGhpcy5pZGIuaW5zdGFsbFhDVGVzdEJ1bmRsZShwYXRoLmpvaW4od2RhQnVuZGxlUGF0aCwgJ1BsdWdJbnMnLCAnV2ViRHJpdmVyQWdlbnRSdW5uZXIueGN0ZXN0JykpO1xuICAgIHJldHVybiB7d2RhQnVuZGxlSWQsIHRlc3RCdW5kbGVJZCwgd2RhQnVuZGxlUGF0aH07XG4gIH1cblxuICBhc3luYyBmZXRjaFdEQUJ1bmRsZSAoKSB7XG4gICAgaWYgKCF0aGlzLmRlcml2ZWREYXRhUGF0aCkge1xuICAgICAgcmV0dXJuIGF3YWl0IGJ1bmRsZVdEQVNpbSh0aGlzLnhjb2RlYnVpbGQpO1xuICAgIH1cbiAgICBjb25zdCB3ZGFCdW5kbGVQYXRocyA9IGF3YWl0IGZzLmdsb2IoYCR7dGhpcy5kZXJpdmVkRGF0YVBhdGh9LyoqLyoke1dEQV9SVU5ORVJfQVBQfS9gLCB7XG4gICAgICBhYnNvbHV0ZTogdHJ1ZSxcbiAgICB9KTtcbiAgICBpZiAoXy5pc0VtcHR5KHdkYUJ1bmRsZVBhdGhzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCB0aGUgV0RBIGJ1bmRsZSBpbiAnJHt0aGlzLmRlcml2ZWREYXRhUGF0aH0nYCk7XG4gICAgfVxuICAgIHJldHVybiB3ZGFCdW5kbGVQYXRoc1swXTtcbiAgfVxuXG4gIGFzeW5jIGlzU291cmNlRnJlc2ggKCkge1xuICAgIGNvbnN0IGV4aXN0c1Byb21pc2VzID0gW1xuICAgICAgJ1Jlc291cmNlcycsXG4gICAgICBgUmVzb3VyY2VzJHtwYXRoLnNlcH1XZWJEcml2ZXJBZ2VudC5idW5kbGVgLFxuICAgIF0ubWFwKChzdWJQYXRoKSA9PiBmcy5leGlzdHMocGF0aC5yZXNvbHZlKHRoaXMuYm9vdHN0cmFwUGF0aCwgc3ViUGF0aCkpKTtcbiAgICByZXR1cm4gKGF3YWl0IEIuYWxsKGV4aXN0c1Byb21pc2VzKSkuc29tZSgodikgPT4gdiA9PT0gZmFsc2UpO1xuICB9XG5cbiAgc2V0dXBQcm94aWVzIChzZXNzaW9uSWQpIHtcbiAgICBjb25zdCBwcm94eU9wdHMgPSB7XG4gICAgICBsb2c6IHRoaXMubG9nLFxuICAgICAgc2VydmVyOiB0aGlzLnVybC5ob3N0bmFtZSxcbiAgICAgIHBvcnQ6IHRoaXMudXJsLnBvcnQsXG4gICAgICBiYXNlOiB0aGlzLmJhc2VQYXRoLFxuICAgICAgdGltZW91dDogdGhpcy53ZGFDb25uZWN0aW9uVGltZW91dCxcbiAgICAgIGtlZXBBbGl2ZTogdHJ1ZSxcbiAgICB9O1xuXG4gICAgdGhpcy5qd3Byb3h5ID0gbmV3IEpXUHJveHkocHJveHlPcHRzKTtcbiAgICB0aGlzLmp3cHJveHkuc2Vzc2lvbklkID0gc2Vzc2lvbklkO1xuICAgIHRoaXMucHJveHlSZXFSZXMgPSB0aGlzLmp3cHJveHkucHJveHlSZXFSZXMuYmluZCh0aGlzLmp3cHJveHkpO1xuXG4gICAgdGhpcy5ub1Nlc3Npb25Qcm94eSA9IG5ldyBOb1Nlc3Npb25Qcm94eShwcm94eU9wdHMpO1xuICB9XG5cbiAgYXN5bmMgcXVpdCAoKSB7XG4gICAgaWYgKHRoaXMudXNlUHJlaW5zdGFsbGVkV0RBKSB7XG4gICAgICBpZiAodGhpcy54Y3Rlc3RBcGlDbGllbnQpIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbygnU3RvcHBpbmcgdGhlIFhDVGVzdCBzZXNzaW9uJyk7XG4gICAgICAgIHRoaXMueGN0ZXN0QXBpQ2xpZW50LnN0b3AoKTtcbiAgICAgICAgdGhpcy54Y3Rlc3RBcGlDbGllbnQgPSBudWxsO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXRoaXMuYXJncy53ZWJEcml2ZXJBZ2VudFVybCkge1xuICAgICAgdGhpcy5sb2cuaW5mbygnU2h1dHRpbmcgZG93biBzdWItcHJvY2Vzc2VzJyk7XG4gICAgICBhd2FpdCB0aGlzLnhjb2RlYnVpbGQucXVpdCgpO1xuICAgICAgYXdhaXQgdGhpcy54Y29kZWJ1aWxkLnJlc2V0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKCdEbyBub3Qgc3RvcCB4Y29kZWJ1aWxkIG5vciBYQ1Rlc3Qgc2Vzc2lvbiAnICtcbiAgICAgICAgJ3NpbmNlIHRoZSBXREEgc2Vzc2lvbiBpcyBtYW5hZ2VkIGJ5IG91dHNpZGUgdGhpcyBkcml2ZXIuJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuandwcm94eSkge1xuICAgICAgdGhpcy5qd3Byb3h5LnNlc3Npb25JZCA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG5cbiAgICBpZiAoIXRoaXMuYXJncy53ZWJEcml2ZXJBZ2VudFVybCkge1xuICAgICAgLy8gaWYgd2UgcG9wdWxhdGVkIHRoZSB1cmwgb3Vyc2VsdmVzIChkdXJpbmcgYHNldHVwQ2FjaGluZ2AgY2FsbCwgZm9yIGluc3RhbmNlKVxuICAgICAgLy8gdGhlbiBjbGVhbiB0aGF0IHVwLiBJZiB0aGUgdXJsIHdhcyBzdXBwbGllZCwgd2Ugd2FudCB0byBrZWVwIGl0XG4gICAgICB0aGlzLndlYkRyaXZlckFnZW50VXJsID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBnZXQgdXJsICgpIHtcbiAgICBpZiAoIXRoaXMuX3VybCkge1xuICAgICAgaWYgKHRoaXMud2ViRHJpdmVyQWdlbnRVcmwpIHtcbiAgICAgICAgdGhpcy5fdXJsID0gdXJsLnBhcnNlKHRoaXMud2ViRHJpdmVyQWdlbnRVcmwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcG9ydCA9IHRoaXMud2RhTG9jYWxQb3J0IHx8IFdEQV9BR0VOVF9QT1JUO1xuICAgICAgICBjb25zdCB7cHJvdG9jb2wsIGhvc3RuYW1lfSA9IHVybC5wYXJzZSh0aGlzLndkYUJhc2VVcmwgfHwgV0RBX0JBU0VfVVJMKTtcbiAgICAgICAgdGhpcy5fdXJsID0gdXJsLnBhcnNlKGAke3Byb3RvY29sfS8vJHtob3N0bmFtZX06JHtwb3J0fWApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fdXJsO1xuICB9XG5cbiAgc2V0IHVybCAoX3VybCkge1xuICAgIHRoaXMuX3VybCA9IHVybC5wYXJzZShfdXJsKTtcbiAgfVxuXG4gIGdldCBmdWxseVN0YXJ0ZWQgKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0ZWQ7XG4gIH1cblxuICBzZXQgZnVsbHlTdGFydGVkIChzdGFydGVkID0gZmFsc2UpIHtcbiAgICB0aGlzLnN0YXJ0ZWQgPSBzdGFydGVkO1xuICB9XG5cbiAgYXN5bmMgcmV0cmlldmVEZXJpdmVkRGF0YVBhdGggKCkge1xuICAgIGlmICh0aGlzLmNhblNraXBYY29kZWJ1aWxkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCB0aGlzLnhjb2RlYnVpbGQucmV0cmlldmVEZXJpdmVkRGF0YVBhdGgoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXVzZSBydW5uaW5nIFdEQSBpZiBpdCBoYXMgdGhlIHNhbWUgYnVuZGxlIGlkIHdpdGggdXBkYXRlZFdEQUJ1bmRsZUlkLlxuICAgKiBPciByZXVzZSBpdCBpZiBpdCBoYXMgdGhlIGRlZmF1bHQgaWQgd2l0aG91dCB1cGRhdGVkV0RBQnVuZGxlSWQuXG4gICAqIFVuaW5zdGFsbCBpdCBpZiB0aGUgbWV0aG9kIGZhY2VzIGFuIGV4Y2VwdGlvbiBmb3IgdGhlIGFib3ZlIHNpdHVhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVwZGF0ZWRXREFCdW5kbGVJZCBCdW5kbGVJZCB5b3UnZCBsaWtlIHRvIHVzZVxuICAgKi9cbiAgYXN5bmMgc2V0dXBDYWNoaW5nICgpIHtcbiAgICBjb25zdCBzdGF0dXMgPSBhd2FpdCB0aGlzLmdldFN0YXR1cygpO1xuICAgIGlmICghc3RhdHVzIHx8ICFzdGF0dXMuYnVpbGQpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKCdXREEgaXMgY3VycmVudGx5IG5vdCBydW5uaW5nLiBUaGVyZSBpcyBub3RoaW5nIHRvIGNhY2hlJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qge1xuICAgICAgcHJvZHVjdEJ1bmRsZUlkZW50aWZpZXIsXG4gICAgICB1cGdyYWRlZEF0LFxuICAgIH0gPSBzdGF0dXMuYnVpbGQ7XG4gICAgLy8gZm9yIHJlYWwgZGV2aWNlXG4gICAgaWYgKHV0aWwuaGFzVmFsdWUocHJvZHVjdEJ1bmRsZUlkZW50aWZpZXIpICYmIHV0aWwuaGFzVmFsdWUodGhpcy51cGRhdGVkV0RBQnVuZGxlSWQpICYmIHRoaXMudXBkYXRlZFdEQUJ1bmRsZUlkICE9PSBwcm9kdWN0QnVuZGxlSWRlbnRpZmllcikge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgV2lsbCB1bmluc3RhbGwgcnVubmluZyBXREEgc2luY2UgaXQgaGFzIGRpZmZlcmVudCBidW5kbGUgaWQuIFRoZSBhY3R1YWwgdmFsdWUgaXMgJyR7cHJvZHVjdEJ1bmRsZUlkZW50aWZpZXJ9Jy5gKTtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnVuaW5zdGFsbCgpO1xuICAgIH1cbiAgICAvLyBmb3Igc2ltdWxhdG9yXG4gICAgaWYgKHV0aWwuaGFzVmFsdWUocHJvZHVjdEJ1bmRsZUlkZW50aWZpZXIpICYmICF1dGlsLmhhc1ZhbHVlKHRoaXMudXBkYXRlZFdEQUJ1bmRsZUlkKSAmJiBXREFfUlVOTkVSX0JVTkRMRV9JRCAhPT0gcHJvZHVjdEJ1bmRsZUlkZW50aWZpZXIpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oYFdpbGwgdW5pbnN0YWxsIHJ1bm5pbmcgV0RBIHNpbmNlIGl0cyBidW5kbGUgaWQgaXMgbm90IGVxdWFsIHRvIHRoZSBkZWZhdWx0IHZhbHVlICR7V0RBX1JVTk5FUl9CVU5ETEVfSUR9YCk7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy51bmluc3RhbGwoKTtcbiAgICB9XG5cbiAgICBjb25zdCBhY3R1YWxVcGdyYWRlVGltZXN0YW1wID0gYXdhaXQgZ2V0V0RBVXBncmFkZVRpbWVzdGFtcCgpO1xuICAgIHRoaXMubG9nLmRlYnVnKGBVcGdyYWRlIHRpbWVzdGFtcCBvZiB0aGUgY3VycmVudGx5IGJ1bmRsZWQgV0RBOiAke2FjdHVhbFVwZ3JhZGVUaW1lc3RhbXB9YCk7XG4gICAgdGhpcy5sb2cuZGVidWcoYFVwZ3JhZGUgdGltZXN0YW1wIG9mIHRoZSBXREEgb24gdGhlIGRldmljZTogJHt1cGdyYWRlZEF0fWApO1xuICAgIGlmIChhY3R1YWxVcGdyYWRlVGltZXN0YW1wICYmIHVwZ3JhZGVkQXQgJiYgXy50b0xvd2VyKGAke2FjdHVhbFVwZ3JhZGVUaW1lc3RhbXB9YCkgIT09IF8udG9Mb3dlcihgJHt1cGdyYWRlZEF0fWApKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKCdXaWxsIHVuaW5zdGFsbCBydW5uaW5nIFdEQSBzaW5jZSBpdCBoYXMgZGlmZmVyZW50IHZlcnNpb24gaW4gY29tcGFyaXNvbiB0byB0aGUgb25lICcgK1xuICAgICAgICBgd2hpY2ggaXMgYnVuZGxlZCB3aXRoIGFwcGl1bS14Y3VpdGVzdC1kcml2ZXIgbW9kdWxlICgke2FjdHVhbFVwZ3JhZGVUaW1lc3RhbXB9ICE9ICR7dXBncmFkZWRBdH0pYCk7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy51bmluc3RhbGwoKTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXNzYWdlID0gdXRpbC5oYXNWYWx1ZShwcm9kdWN0QnVuZGxlSWRlbnRpZmllcilcbiAgICAgID8gYFdpbGwgcmV1c2UgcHJldmlvdXNseSBjYWNoZWQgV0RBIGluc3RhbmNlIGF0ICcke3RoaXMudXJsLmhyZWZ9JyB3aXRoICcke3Byb2R1Y3RCdW5kbGVJZGVudGlmaWVyfSdgXG4gICAgICA6IGBXaWxsIHJldXNlIHByZXZpb3VzbHkgY2FjaGVkIFdEQSBpbnN0YW5jZSBhdCAnJHt0aGlzLnVybC5ocmVmfSdgO1xuICAgIHRoaXMubG9nLmluZm8oYCR7bWVzc2FnZX0uIFNldCB0aGUgd2RhTG9jYWxQb3J0IGNhcGFiaWxpdHkgdG8gYSB2YWx1ZSBkaWZmZXJlbnQgZnJvbSAke3RoaXMudXJsLnBvcnR9IGlmIHRoaXMgaXMgYW4gdW5kZXNpcmVkIGJlaGF2aW9yLmApO1xuICAgIHRoaXMud2ViRHJpdmVyQWdlbnRVcmwgPSB0aGlzLnVybC5ocmVmO1xuICB9XG5cbiAgLyoqXG4gICAqIFF1aXQgYW5kIHVuaW5zdGFsbCBydW5uaW5nIFdEQS5cbiAgICovXG4gIGFzeW5jIHF1aXRBbmRVbmluc3RhbGwgKCkge1xuICAgIGF3YWl0IHRoaXMucXVpdCgpO1xuICAgIGF3YWl0IHRoaXMudW5pbnN0YWxsKCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgV2ViRHJpdmVyQWdlbnQ7XG5leHBvcnQgeyBXZWJEcml2ZXJBZ2VudCB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLEtBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLEtBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLFNBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLFdBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLFFBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLE9BQUEsR0FBQVAsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFPLGVBQUEsR0FBQVAsT0FBQTtBQUNBLElBQUFRLE1BQUEsR0FBQVIsT0FBQTtBQUdBLElBQUFTLFdBQUEsR0FBQVYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFVLFVBQUEsR0FBQVgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFXLGFBQUEsR0FBQVgsT0FBQTtBQUNBLElBQUFZLGtCQUFBLEdBQUFaLE9BQUE7QUFDQSxJQUFBYSxVQUFBLEdBQUFiLE9BQUE7QUFJQSxJQUFBYyxnQkFBQSxHQUFBZCxPQUFBO0FBQ0EsSUFBQWUsVUFBQSxHQUFBZixPQUFBO0FBRUEsTUFBTWdCLGtCQUFrQixHQUFHLEVBQUUsR0FBRyxJQUFJ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
404
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfcGF0aCIsIl91cmwyIiwiX2JsdWViaXJkIiwiX2Jhc2VEcml2ZXIiLCJfc3VwcG9ydCIsIl9sb2dnZXIiLCJfbm9TZXNzaW9uUHJveHkiLCJfdXRpbHMiLCJfeGNvZGVidWlsZCIsIl9hc3luY0xvY2siLCJfdGVlbl9wcm9jZXNzIiwiX2NoZWNrRGVwZW5kZW5jaWVzIiwiX2NvbnN0YW50cyIsIl9hcHBpdW1Jb3NEZXZpY2UiLCJfc3Ryb25nYm94IiwiV0RBX0xBVU5DSF9USU1FT1VUIiwiV0RBX0FHRU5UX1BPUlQiLCJXREFfQ0ZfQlVORExFX05BTUUiLCJTSEFSRURfUkVTT1VSQ0VTX0dVQVJEIiwiQXN5bmNMb2NrIiwiUkVDRU5UX01PRFVMRV9WRVJTSU9OX0lURU1fTkFNRSIsIldlYkRyaXZlckFnZW50IiwiY29uc3RydWN0b3IiLCJ4Y29kZVZlcnNpb24iLCJhcmdzIiwibG9nIiwiXyIsImNsb25lIiwiZGVmYXVsdExvZ2dlciIsImRldmljZSIsInBsYXRmb3JtVmVyc2lvbiIsInBsYXRmb3JtTmFtZSIsImlvc1Nka1ZlcnNpb24iLCJob3N0IiwiaXNSZWFsRGV2aWNlIiwicmVhbERldmljZSIsImlkYiIsIndkYUJ1bmRsZVBhdGgiLCJzZXRXREFQYXRocyIsImJvb3RzdHJhcFBhdGgiLCJhZ2VudFBhdGgiLCJ3ZGFMb2NhbFBvcnQiLCJ3ZGFSZW1vdGVQb3J0Iiwid2RhQmFzZVVybCIsIldEQV9CQVNFX1VSTCIsInByZWJ1aWxkV0RBIiwid2ViRHJpdmVyQWdlbnRVcmwiLCJzdGFydGVkIiwid2RhQ29ubmVjdGlvblRpbWVvdXQiLCJ1c2VYY3Rlc3RydW5GaWxlIiwidXNlUHJlYnVpbHRXREEiLCJkZXJpdmVkRGF0YVBhdGgiLCJtanBlZ1NlcnZlclBvcnQiLCJ1cGRhdGVkV0RBQnVuZGxlSWQiLCJ1c2VQcmVpbnN0YWxsZWRXREEiLCJ4Y3Rlc3RBcGlDbGllbnQiLCJ4Y29kZWJ1aWxkIiwiY2FuU2tpcFhjb2RlYnVpbGQiLCJYY29kZUJ1aWxkIiwic2hvd1hjb2RlTG9nIiwieGNvZGVDb25maWdGaWxlIiwieGNvZGVPcmdJZCIsInhjb2RlU2lnbmluZ0lkIiwia2V5Y2hhaW5QYXRoIiwia2V5Y2hhaW5QYXNzd29yZCIsInVzZVNpbXBsZUJ1aWxkVGVzdCIsImxhdW5jaFRpbWVvdXQiLCJ3ZGFMYXVuY2hUaW1lb3V0IiwiYWxsb3dQcm92aXNpb25pbmdEZXZpY2VSZWdpc3RyYXRpb24iLCJyZXN1bHRCdW5kbGVQYXRoIiwicmVzdWx0QnVuZGxlVmVyc2lvbiIsImJ1bmRsZUlkRm9yWGN0ZXN0IiwiV0RBX1JVTk5FUl9CVU5ETEVfSURfRk9SX1hDVEVTVCIsIkJPT1RTVFJBUF9QQVRIIiwiaW5mbyIsInBhdGgiLCJyZXNvbHZlIiwiY2xlYW51cE9ic29sZXRlUHJvY2Vzc2VzIiwib2Jzb2xldGVQaWRzIiwiZ2V0UElEc0xpc3RlbmluZ09uUG9ydCIsInVybCIsInBvcnQiLCJjbWRMaW5lIiwiaW5jbHVkZXMiLCJ0b0xvd2VyQ2FzZSIsInVkaWQiLCJpc0VtcHR5IiwiZGVidWciLCJsZW5ndGgiLCJleGVjIiwiZSIsIndhcm4iLCJtZXNzYWdlIiwiaXNSdW5uaW5nIiwiZ2V0U3RhdHVzIiwiYmFzZVBhdGgiLCJub1Nlc3Npb25Qcm94eSIsIk5vU2Vzc2lvblByb3h5Iiwic2VydmVyIiwiaG9zdG5hbWUiLCJiYXNlIiwidGltZW91dCIsImNvbW1hbmQiLCJlcnIiLCJocmVmIiwidW5pbnN0YWxsIiwiYnVuZGxlSWRzIiwiZ2V0VXNlckluc3RhbGxlZEJ1bmRsZUlkc0J5QnVuZGxlTmFtZSIsImJ1bmRsZUlkIiwicmVtb3ZlQXBwIiwiX2NsZWFudXBQcm9qZWN0SWZGcmVzaCIsInBhY2thZ2VJbmZvIiwiSlNPTiIsInBhcnNlIiwiZnMiLCJyZWFkRmlsZSIsImpvaW4iLCJib3giLCJzdHJvbmdib3giLCJuYW1lIiwiYm94SXRlbSIsImdldEl0ZW0iLCJ0aW1lc3RhbXBQYXRoIiwicHJvY2VzcyIsImVudiIsIkhPTUUiLCJXREFfVVBHUkFERV9USU1FU1RBTVBfUEFUSCIsImV4aXN0cyIsImNyZWF0ZUl0ZW1XaXRoVmFsdWUiLCJ2ZXJzaW9uIiwicmVjZW50TW9kdWxlVmVyc2lvbiIsInJlYWQiLCJ1dGlsIiwiY29lcmNlVmVyc2lvbiIsIndyaXRlIiwiY29tcGFyZVZlcnNpb25zIiwiY2xlYW5Qcm9qZWN0IiwibGF1bmNoV2l0aFByZWluc3RhbGxlZFdEQSIsInNlc3Npb25JZCIsInhjdGVzdEVudiIsIlVTRV9QT1JUIiwiV0RBX1BST0RVQ1RfQlVORExFX0lERU5USUZJRVIiLCJNSlBFR19TRVJWRVJfUE9SVCIsIlhjdGVzdCIsInN0YXJ0Iiwic2V0dXBQcm94aWVzIiwic3RhdHVzIiwibGF1bmNoIiwiRXJyb3IiLCJzeW5jaHJvbml6YXRpb25LZXkiLCJub3JtYWxpemUiLCJhY3F1aXJlIiwicmVzZXRUZXN0UHJvY2Vzc2VzIiwic3RhcnRXaXRoSURCIiwiaW5pdCIsInByZWJ1aWxkIiwid2RhQnVuZGxlSWQiLCJ0ZXN0QnVuZGxlSWQiLCJwcmVwYXJlV0RBIiwicnVuWENVSVRlc3QiLCJwYXJzZUJ1bmRsZUlkIiwiaW5mb1BsaXN0UGF0aCIsImluZm9QbGlzdCIsInBsaXN0IiwicGFyc2VQbGlzdCIsIkNGQnVuZGxlSWRlbnRpZmllciIsImZldGNoV0RBQnVuZGxlIiwiaXNBcHBJbnN0YWxsZWQiLCJpbnN0YWxsQXBwIiwiaW5zdGFsbFhDVGVzdEJ1bmRsZSIsImJ1bmRsZVdEQVNpbSIsIndkYUJ1bmRsZVBhdGhzIiwiZ2xvYiIsIldEQV9SVU5ORVJfQVBQIiwiYWJzb2x1dGUiLCJpc1NvdXJjZUZyZXNoIiwiZXhpc3RzUHJvbWlzZXMiLCJzZXAiLCJtYXAiLCJzdWJQYXRoIiwiQiIsImFsbCIsInNvbWUiLCJ2IiwicHJveHlPcHRzIiwia2VlcEFsaXZlIiwiandwcm94eSIsIkpXUHJveHkiLCJwcm94eVJlcVJlcyIsImJpbmQiLCJxdWl0Iiwic3RvcCIsInJlc2V0IiwiX3VybCIsInByb3RvY29sIiwiZnVsbHlTdGFydGVkIiwicmV0cmlldmVEZXJpdmVkRGF0YVBhdGgiLCJzZXR1cENhY2hpbmciLCJidWlsZCIsInByb2R1Y3RCdW5kbGVJZGVudGlmaWVyIiwidXBncmFkZWRBdCIsImhhc1ZhbHVlIiwiV0RBX1JVTk5FUl9CVU5ETEVfSUQiLCJhY3R1YWxVcGdyYWRlVGltZXN0YW1wIiwiZ2V0V0RBVXBncmFkZVRpbWVzdGFtcCIsInRvTG93ZXIiLCJxdWl0QW5kVW5pbnN0YWxsIiwiZXhwb3J0cyIsIl9kZWZhdWx0IiwiZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi93ZWJkcml2ZXJhZ2VudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgdXJsIGZyb20gJ3VybCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgeyBKV1Byb3h5IH0gZnJvbSAnQGFwcGl1bS9iYXNlLWRyaXZlcic7XG5pbXBvcnQgeyBmcywgdXRpbCwgcGxpc3QgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IGRlZmF1bHRMb2dnZXIgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgTm9TZXNzaW9uUHJveHkgfSBmcm9tICcuL25vLXNlc3Npb24tcHJveHknO1xuaW1wb3J0IHtcbiAgZ2V0V0RBVXBncmFkZVRpbWVzdGFtcCwgcmVzZXRUZXN0UHJvY2Vzc2VzLCBnZXRQSURzTGlzdGVuaW5nT25Qb3J0LCBCT09UU1RSQVBfUEFUSFxufSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBYY29kZUJ1aWxkIGZyb20gJy4veGNvZGVidWlsZCc7XG5pbXBvcnQgQXN5bmNMb2NrIGZyb20gJ2FzeW5jLWxvY2snO1xuaW1wb3J0IHsgZXhlYyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5pbXBvcnQgeyBidW5kbGVXREFTaW0gfSBmcm9tICcuL2NoZWNrLWRlcGVuZGVuY2llcyc7XG5pbXBvcnQge1xuICBXREFfUlVOTkVSX0JVTkRMRV9JRCwgV0RBX1JVTk5FUl9CVU5ETEVfSURfRk9SX1hDVEVTVCwgV0RBX1JVTk5FUl9BUFAsXG4gIFdEQV9CQVNFX1VSTCwgV0RBX1VQR1JBREVfVElNRVNUQU1QX1BBVEhcbn0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHtYY3Rlc3R9IGZyb20gJ2FwcGl1bS1pb3MtZGV2aWNlJztcbmltcG9ydCB7c3Ryb25nYm94fSBmcm9tICdAYXBwaXVtL3N0cm9uZ2JveCc7XG5cbmNvbnN0IFdEQV9MQVVOQ0hfVElNRU9VVCA9IDYwICogMTAwMDtcbmNvbnN0IFdEQV9BR0VOVF9QT1JUID0gODEwMDtcbmNvbnN0IFdEQV9DRl9CVU5ETEVfTkFNRSA9ICdXZWJEcml2ZXJBZ2VudFJ1bm5lci1SdW5uZXInO1xuY29uc3QgU0hBUkVEX1JFU09VUkNFU19HVUFSRCA9IG5ldyBBc3luY0xvY2soKTtcbmNvbnN0IFJFQ0VOVF9NT0RVTEVfVkVSU0lPTl9JVEVNX05BTUUgPSAncmVjZW50V2RhTW9kdWxlVmVyc2lvbic7XG5cbmNsYXNzIFdlYkRyaXZlckFnZW50IHtcbiAgY29uc3RydWN0b3IgKHhjb2RlVmVyc2lvbiwgYXJncyA9IHt9LCBsb2cgPSBudWxsKSB7XG4gICAgdGhpcy54Y29kZVZlcnNpb24gPSB4Y29kZVZlcnNpb247XG5cbiAgICB0aGlzLmFyZ3MgPSBfLmNsb25lKGFyZ3MpO1xuICAgIHRoaXMubG9nID0gbG9nID8/IGRlZmF1bHRMb2dnZXI7XG5cbiAgICB0aGlzLmRldmljZSA9IGFyZ3MuZGV2aWNlO1xuICAgIHRoaXMucGxhdGZvcm1WZXJzaW9uID0gYXJncy5wbGF0Zm9ybVZlcnNpb247XG4gICAgdGhpcy5wbGF0Zm9ybU5hbWUgPSBhcmdzLnBsYXRmb3JtTmFtZTtcbiAgICB0aGlzLmlvc1Nka1ZlcnNpb24gPSBhcmdzLmlvc1Nka1ZlcnNpb247XG4gICAgdGhpcy5ob3N0ID0gYXJncy5ob3N0O1xuICAgIHRoaXMuaXNSZWFsRGV2aWNlID0gISFhcmdzLnJlYWxEZXZpY2U7XG4gICAgdGhpcy5pZGIgPSAoYXJncy5kZXZpY2UgfHwge30pLmlkYjtcbiAgICB0aGlzLndkYUJ1bmRsZVBhdGggPSBhcmdzLndkYUJ1bmRsZVBhdGg7XG5cbiAgICB0aGlzLnNldFdEQVBhdGhzKGFyZ3MuYm9vdHN0cmFwUGF0aCwgYXJncy5hZ2VudFBhdGgpO1xuXG4gICAgdGhpcy53ZGFMb2NhbFBvcnQgPSBhcmdzLndkYUxvY2FsUG9ydDtcbiAgICB0aGlzLndkYVJlbW90ZVBvcnQgPSBhcmdzLndkYUxvY2FsUG9ydCB8fCBXREFfQUdFTlRfUE9SVDtcbiAgICB0aGlzLndkYUJhc2VVcmwgPSBhcmdzLndkYUJhc2VVcmwgfHwgV0RBX0JBU0VfVVJMO1xuXG4gICAgdGhpcy5wcmVidWlsZFdEQSA9IGFyZ3MucHJlYnVpbGRXREE7XG5cbiAgICAvLyB0aGlzLmFyZ3Mud2ViRHJpdmVyQWdlbnRVcmwgZ3VpYXJhbnRlZXMgdGhlIGNhcGFiaWxpdGllcyBhY3VhbGx5XG4gICAgLy8gZ2F2ZSAnYXBwaXVtOndlYkRyaXZlckFnZW50VXJsJyBidXQgJ3RoaXMud2ViRHJpdmVyQWdlbnRVcmwnXG4gICAgLy8gY291bGQgYmUgdXNlZCBmb3IgY2FjaGluZyBXREEgd2l0aCB4Y29kZWJ1aWxkLlxuICAgIHRoaXMud2ViRHJpdmVyQWdlbnRVcmwgPSBhcmdzLndlYkRyaXZlckFnZW50VXJsO1xuXG4gICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLndkYUNvbm5lY3Rpb25UaW1lb3V0ID0gYXJncy53ZGFDb25uZWN0aW9uVGltZW91dDtcblxuICAgIHRoaXMudXNlWGN0ZXN0cnVuRmlsZSA9IGFyZ3MudXNlWGN0ZXN0cnVuRmlsZTtcbiAgICB0aGlzLnVzZVByZWJ1aWx0V0RBID0gYXJncy51c2VQcmVidWlsdFdEQTtcbiAgICB0aGlzLmRlcml2ZWREYXRhUGF0aCA9IGFyZ3MuZGVyaXZlZERhdGFQYXRoO1xuICAgIHRoaXMubWpwZWdTZXJ2ZXJQb3J0ID0gYXJncy5tanBlZ1NlcnZlclBvcnQ7XG5cbiAgICB0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCA9IGFyZ3MudXBkYXRlZFdEQUJ1bmRsZUlkO1xuXG4gICAgdGhpcy51c2VQcmVpbnN0YWxsZWRXREEgPSBhcmdzLnVzZVByZWluc3RhbGxlZFdEQTtcbiAgICB0aGlzLnhjdGVzdEFwaUNsaWVudCA9IG51bGw7XG5cbiAgICB0aGlzLnhjb2RlYnVpbGQgPSB0aGlzLmNhblNraXBYY29kZWJ1aWxkXG4gICAgPyBudWxsXG4gICAgOiBuZXcgWGNvZGVCdWlsZCh0aGlzLnhjb2RlVmVyc2lvbiwgdGhpcy5kZXZpY2UsIHtcbiAgICAgICAgcGxhdGZvcm1WZXJzaW9uOiB0aGlzLnBsYXRmb3JtVmVyc2lvbixcbiAgICAgICAgcGxhdGZvcm1OYW1lOiB0aGlzLnBsYXRmb3JtTmFtZSxcbiAgICAgICAgaW9zU2RrVmVyc2lvbjogdGhpcy5pb3NTZGtWZXJzaW9uLFxuICAgICAgICBhZ2VudFBhdGg6IHRoaXMuYWdlbnRQYXRoLFxuICAgICAgICBib290c3RyYXBQYXRoOiB0aGlzLmJvb3RzdHJhcFBhdGgsXG4gICAgICAgIHJlYWxEZXZpY2U6IHRoaXMuaXNSZWFsRGV2aWNlLFxuICAgICAgICBzaG93WGNvZGVMb2c6IGFyZ3Muc2hvd1hjb2RlTG9nLFxuICAgICAgICB4Y29kZUNvbmZpZ0ZpbGU6IGFyZ3MueGNvZGVDb25maWdGaWxlLFxuICAgICAgICB4Y29kZU9yZ0lkOiBhcmdzLnhjb2RlT3JnSWQsXG4gICAgICAgIHhjb2RlU2lnbmluZ0lkOiBhcmdzLnhjb2RlU2lnbmluZ0lkLFxuICAgICAgICBrZXljaGFpblBhdGg6IGFyZ3Mua2V5Y2hhaW5QYXRoLFxuICAgICAgICBrZXljaGFpblBhc3N3b3JkOiBhcmdzLmtleWNoYWluUGFzc3dvcmQsXG4gICAgICAgIHVzZVNpbXBsZUJ1aWxkVGVzdDogYXJncy51c2VTaW1wbGVCdWlsZFRlc3QsXG4gICAgICAgIHVzZVByZWJ1aWx0V0RBOiBhcmdzLnVzZVByZWJ1aWx0V0RBLFxuICAgICAgICB1cGRhdGVkV0RBQnVuZGxlSWQ6IHRoaXMudXBkYXRlZFdEQUJ1bmRsZUlkLFxuICAgICAgICBsYXVuY2hUaW1lb3V0OiBhcmdzLndkYUxhdW5jaFRpbWVvdXQgfHwgV0RBX0xBVU5DSF9USU1FT1VULFxuICAgICAgICB3ZGFSZW1vdGVQb3J0OiB0aGlzLndkYVJlbW90ZVBvcnQsXG4gICAgICAgIHVzZVhjdGVzdHJ1bkZpbGU6IHRoaXMudXNlWGN0ZXN0cnVuRmlsZSxcbiAgICAgICAgZGVyaXZlZERhdGFQYXRoOiBhcmdzLmRlcml2ZWREYXRhUGF0aCxcbiAgICAgICAgbWpwZWdTZXJ2ZXJQb3J0OiB0aGlzLm1qcGVnU2VydmVyUG9ydCxcbiAgICAgICAgYWxsb3dQcm92aXNpb25pbmdEZXZpY2VSZWdpc3RyYXRpb246IGFyZ3MuYWxsb3dQcm92aXNpb25pbmdEZXZpY2VSZWdpc3RyYXRpb24sXG4gICAgICAgIHJlc3VsdEJ1bmRsZVBhdGg6IGFyZ3MucmVzdWx0QnVuZGxlUGF0aCxcbiAgICAgICAgcmVzdWx0QnVuZGxlVmVyc2lvbjogYXJncy5yZXN1bHRCdW5kbGVWZXJzaW9uLFxuICAgICAgfSwgdGhpcy5sb2cpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0cnVlIGlmIHRoZSBzZXNzaW9uIGRvZXMgbm90IG5lZWQgeGNvZGVidWlsZC5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHNlc3Npb24gbmVlZHMvaGFzIHhjb2RlYnVpbGQuXG4gICAqL1xuICBnZXQgY2FuU2tpcFhjb2RlYnVpbGQgKCkge1xuICAgIC8vIFVzZSB0aGlzLmFyZ3Mud2ViRHJpdmVyQWdlbnRVcmwgdG8gZ3VhcmFudGVlXG4gICAgLy8gdGhlIGNhcGFiaWxpdGllcyBzZXQgZ2F2ZSB0aGUgYGFwcGl1bTp3ZWJEcml2ZXJBZ2VudFVybGAuXG4gICAgcmV0dXJuIHRoaXMudXNlUHJlaW5zdGFsbGVkV0RBIHx8IHRoaXMuYXJncy53ZWJEcml2ZXJBZ2VudFVybDtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBCdW5kbGUgSUQgZm9yIFhjdGVzdC5cbiAgICovXG4gIGdldCBidW5kbGVJZEZvclhjdGVzdCAoKSB7XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlZFdEQUJ1bmRsZUlkID8gYCR7dGhpcy51cGRhdGVkV0RBQnVuZGxlSWR9LnhjdHJ1bm5lcmAgOiBXREFfUlVOTkVSX0JVTkRMRV9JRF9GT1JfWENURVNUO1xuICB9XG5cbiAgc2V0V0RBUGF0aHMgKGJvb3RzdHJhcFBhdGgsIGFnZW50UGF0aCkge1xuICAgIC8vIGFsbG93IHRoZSB1c2VyIHRvIHNwZWNpZnkgYSBwbGFjZSBmb3IgV0RBLiBUaGlzIGlzIHVuZG9jdW1lbnRlZCBhbmRcbiAgICAvLyBvbmx5IGhlcmUgZm9yIHRoZSBwdXJwb3NlcyBvZiB0ZXN0aW5nIGRldmVsb3BtZW50IG9mIFdEQVxuICAgIHRoaXMuYm9vdHN0cmFwUGF0aCA9IGJvb3RzdHJhcFBhdGggfHwgQk9PVFNUUkFQX1BBVEg7XG4gICAgdGhpcy5sb2cuaW5mbyhgVXNpbmcgV0RBIHBhdGg6ICcke3RoaXMuYm9vdHN0cmFwUGF0aH0nYCk7XG5cbiAgICAvLyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gc3BlY2lmeSBhZ2VudFBhdGggdG9vXG4gICAgdGhpcy5hZ2VudFBhdGggPSBhZ2VudFBhdGggfHwgcGF0aC5yZXNvbHZlKHRoaXMuYm9vdHN0cmFwUGF0aCwgJ1dlYkRyaXZlckFnZW50Lnhjb2RlcHJvaicpO1xuICAgIHRoaXMubG9nLmluZm8oYFVzaW5nIFdEQSBhZ2VudDogJyR7dGhpcy5hZ2VudFBhdGh9J2ApO1xuICB9XG5cbiAgYXN5bmMgY2xlYW51cE9ic29sZXRlUHJvY2Vzc2VzICgpIHtcbiAgICBjb25zdCBvYnNvbGV0ZVBpZHMgPSBhd2FpdCBnZXRQSURzTGlzdGVuaW5nT25Qb3J0KHRoaXMudXJsLnBvcnQsXG4gICAgICAoY21kTGluZSkgPT4gY21kTGluZS5pbmNsdWRlcygnL1dlYkRyaXZlckFnZW50UnVubmVyJykgJiZcbiAgICAgICAgIWNtZExpbmUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLmRldmljZS51ZGlkLnRvTG93ZXJDYXNlKCkpKTtcblxuICAgIGlmIChfLmlzRW1wdHkob2Jzb2xldGVQaWRzKSkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYE5vIG9ic29sZXRlIGNhY2hlZCBwcm9jZXNzZXMgZnJvbSBwcmV2aW91cyBXREEgc2Vzc2lvbnMgYCArXG4gICAgICAgIGBsaXN0ZW5pbmcgb24gcG9ydCAke3RoaXMudXJsLnBvcnR9IGhhdmUgYmVlbiBmb3VuZGApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nLmluZm8oYERldGVjdGVkICR7b2Jzb2xldGVQaWRzLmxlbmd0aH0gb2Jzb2xldGUgY2FjaGVkIHByb2Nlc3Mke29ic29sZXRlUGlkcy5sZW5ndGggPT09IDEgPyAnJyA6ICdlcyd9IGAgK1xuICAgICAgYGZyb20gcHJldmlvdXMgV0RBIHNlc3Npb25zLiBDbGVhbmluZyB0aGVtIHVwYCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGV4ZWMoJ2tpbGwnLCBvYnNvbGV0ZVBpZHMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLndhcm4oYEZhaWxlZCB0byBraWxsIG9ic29sZXRlIGNhY2hlZCBwcm9jZXNzJHtvYnNvbGV0ZVBpZHMubGVuZ3RoID09PSAxID8gJycgOiAnZXMnfSAnJHtvYnNvbGV0ZVBpZHN9Jy4gYCArXG4gICAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBib29sZWFuIGlmIFdEQSBpcyBydW5uaW5nIG9yIG5vdFxuICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIFdEQSBpcyBydW5uaW5nXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgaW52YWxpZCByZXNwb25zZSBjb2RlIG9yIGJvZHlcbiAgICovXG4gIGFzeW5jIGlzUnVubmluZyAoKSB7XG4gICAgcmV0dXJuICEhKGF3YWl0IHRoaXMuZ2V0U3RhdHVzKCkpO1xuICB9XG5cbiAgZ2V0IGJhc2VQYXRoICgpIHtcbiAgICBpZiAodGhpcy51cmwucGF0aCA9PT0gJy8nKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnVybC5wYXRoIHx8ICcnO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBjdXJyZW50IHJ1bm5pbmcgV0RBJ3Mgc3RhdHVzIGxpa2UgYmVsb3dcbiAgICoge1xuICAgKiAgIFwic3RhdGVcIjogXCJzdWNjZXNzXCIsXG4gICAqICAgXCJvc1wiOiB7XG4gICAqICAgICBcIm5hbWVcIjogXCJpT1NcIixcbiAgICogICAgIFwidmVyc2lvblwiOiBcIjExLjRcIixcbiAgICogICAgIFwic2RrVmVyc2lvblwiOiBcIjExLjNcIlxuICAgKiAgIH0sXG4gICAqICAgXCJpb3NcIjoge1xuICAgKiAgICAgXCJzaW11bGF0b3JWZXJzaW9uXCI6IFwiMTEuNFwiLFxuICAgKiAgICAgXCJpcFwiOiBcIjE3Mi4yNTQuOTkuMzRcIlxuICAgKiAgIH0sXG4gICAqICAgXCJidWlsZFwiOiB7XG4gICAqICAgICBcInRpbWVcIjogXCJKdW4gMjQgMjAxOCAxNzowODoyMVwiLFxuICAgKiAgICAgXCJwcm9kdWN0QnVuZGxlSWRlbnRpZmllclwiOiBcImNvbS5mYWNlYm9vay5XZWJEcml2ZXJBZ2VudFJ1bm5lclwiXG4gICAqICAgfVxuICAgKiB9XG4gICAqXG4gICAqIEByZXR1cm4gez9vYmplY3R9IFN0YXRlIE9iamVjdFxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGludmFsaWQgcmVzcG9uc2UgY29kZSBvciBib2R5XG4gICAqL1xuICBhc3luYyBnZXRTdGF0dXMgKCkge1xuICAgIGNvbnN0IG5vU2Vzc2lvblByb3h5ID0gbmV3IE5vU2Vzc2lvblByb3h5KHtcbiAgICAgIHNlcnZlcjogdGhpcy51cmwuaG9zdG5hbWUsXG4gICAgICBwb3J0OiB0aGlzLnVybC5wb3J0LFxuICAgICAgYmFzZTogdGhpcy5iYXNlUGF0aCxcbiAgICAgIHRpbWVvdXQ6IDMwMDAsXG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBub1Nlc3Npb25Qcm94eS5jb21tYW5kKCcvc3RhdHVzJywgJ0dFVCcpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYFdEQSBpcyBub3QgbGlzdGVuaW5nIGF0ICcke3RoaXMudXJsLmhyZWZ9J2ApO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVuaW5zdGFsbCBXREFzIGZyb20gdGhlIHRlc3QgZGV2aWNlLlxuICAgKiBPdmVyIFhjb2RlIDExLCBtdWx0aXBsZSBXREEgY2FuIGJlIGluIHRoZSBkZXZpY2Ugc2luY2UgWGNvZGUgMTEgZ2VuZXJhdGVzIGRpZmZlcmVudCBXREEuXG4gICAqIEFwcGl1bSBkb2VzIG5vdCBleHBlY3QgbXVsdGlwbGUgV0RBcyBhcmUgcnVubmluZyBvbiBhIGRldmljZS5cbiAgICovXG4gIGFzeW5jIHVuaW5zdGFsbCAoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJ1bmRsZUlkcyA9IGF3YWl0IHRoaXMuZGV2aWNlLmdldFVzZXJJbnN0YWxsZWRCdW5kbGVJZHNCeUJ1bmRsZU5hbWUoV0RBX0NGX0JVTkRMRV9OQU1FKTtcbiAgICAgIGlmIChfLmlzRW1wdHkoYnVuZGxlSWRzKSkge1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZygnTm8gV0RBcyBvbiB0aGUgZGV2aWNlLicpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMubG9nLmRlYnVnKGBVbmluc3RhbGxpbmcgV0RBczogJyR7YnVuZGxlSWRzfSdgKTtcbiAgICAgIGZvciAoY29uc3QgYnVuZGxlSWQgb2YgYnVuZGxlSWRzKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZGV2aWNlLnJlbW92ZUFwcChidW5kbGVJZCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoZSk7XG4gICAgICB0aGlzLmxvZy53YXJuKGBXZWJEcml2ZXJBZ2VudCB1bmluc3RhbGwgZmFpbGVkLiBQZXJoYXBzLCBpdCBpcyBhbHJlYWR5IHVuaW5zdGFsbGVkPyBgICtcbiAgICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBfY2xlYW51cFByb2plY3RJZkZyZXNoICgpIHtcbiAgICBpZiAodGhpcy5jYW5Ta2lwWGNvZGVidWlsZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhY2thZ2VJbmZvID0gSlNPTi5wYXJzZShhd2FpdCBmcy5yZWFkRmlsZShwYXRoLmpvaW4oQk9PVFNUUkFQX1BBVEgsICdwYWNrYWdlLmpzb24nKSwgJ3V0ZjgnKSk7XG4gICAgY29uc3QgYm94ID0gc3Ryb25nYm94KHBhY2thZ2VJbmZvLm5hbWUpO1xuICAgIGxldCBib3hJdGVtID0gYm94LmdldEl0ZW0oUkVDRU5UX01PRFVMRV9WRVJTSU9OX0lURU1fTkFNRSk7XG4gICAgaWYgKCFib3hJdGVtKSB7XG4gICAgICBjb25zdCB0aW1lc3RhbXBQYXRoID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuZW52LkhPTUUsIFdEQV9VUEdSQURFX1RJTUVTVEFNUF9QQVRIKTtcbiAgICAgIGlmIChhd2FpdCBmcy5leGlzdHModGltZXN0YW1wUGF0aCkpIHtcbiAgICAgICAgLy8gVE9ETzogSXQgaXMgcHJvYmFibHkgYSBiaXQgdWdseSB0byBoYXJkY29kZSB0aGUgcmVjZW50IHZlcnNpb24gc3RyaW5nLFxuICAgICAgICAvLyBUT0RPOiBob3Zld2VyIGl0IHNob3VsZCBkbyB0aGUgam9iIGFzIGEgdGVtcG9yYXJ5IHRyYW5zaXRpb24gdHJpY2tcbiAgICAgICAgLy8gVE9ETzogdG8gc3dpdGNoIGZyb20gYSBoYXJkY29kZWQgZmlsZSBwYXRoIHRvIHRoZSBzdHJvbmdib3ggdXNhZ2UuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYm94SXRlbSA9IGF3YWl0IGJveC5jcmVhdGVJdGVtV2l0aFZhbHVlKFJFQ0VOVF9NT0RVTEVfVkVSU0lPTl9JVEVNX05BTUUsICc1LjAuMCcpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgdGhpcy5sb2cud2FybihgVGhlIGFjdHVhbCBtb2R1bGUgdmVyc2lvbiBjYW5ub3QgYmUgcGVyc2lzdGVkOiAke2UubWVzc2FnZX1gKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oJ1RoZXJlIGlzIG5vIG5lZWQgdG8gcGVyZm9ybSB0aGUgcHJvamVjdCBjbGVhbnVwLiBBIGZyZXNoIGluc3RhbGwgaGFzIGJlZW4gZGV0ZWN0ZWQnKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBib3guY3JlYXRlSXRlbVdpdGhWYWx1ZShSRUNFTlRfTU9EVUxFX1ZFUlNJT05fSVRFTV9OQU1FLCBwYWNrYWdlSW5mby52ZXJzaW9uKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHRoaXMubG9nLndhcm4oYFRoZSBhY3R1YWwgbW9kdWxlIHZlcnNpb24gY2Fubm90IGJlIHBlcnNpc3RlZDogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCByZWNlbnRNb2R1bGVWZXJzaW9uID0gYXdhaXQgYm94SXRlbS5yZWFkKCk7XG4gICAgdHJ5IHtcbiAgICAgIHJlY2VudE1vZHVsZVZlcnNpb24gPSB1dGlsLmNvZXJjZVZlcnNpb24ocmVjZW50TW9kdWxlVmVyc2lvbiwgdHJ1ZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2cud2FybihgVGhlIHBlcnNpc3RlZCBtb2R1bGUgdmVyc2lvbiBzdHJpbmcgaGFzIGJlZW4gZGFtYWdlZDogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBVcGRhdGluZyBpdCB0byAnJHtwYWNrYWdlSW5mby52ZXJzaW9ufScgYXNzdW1pbmcgdGhlIHByb2plY3QgY2xlbnVwIGlzIG5vdCBuZWVkZWRgKTtcbiAgICAgIGF3YWl0IGJveEl0ZW0ud3JpdGUocGFja2FnZUluZm8udmVyc2lvbik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHV0aWwuY29tcGFyZVZlcnNpb25zKHJlY2VudE1vZHVsZVZlcnNpb24sICc+PScsIHBhY2thZ2VJbmZvLnZlcnNpb24pKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKFxuICAgICAgICBgV2ViRHJpdmVyQWdlbnQgZG9lcyBub3QgbmVlZCBhIGNsZWFudXAuIFRoZSBwcm9qZWN0IHNvdXJjZXMgYXJlIHVwIHRvIGRhdGUgYCArXG4gICAgICAgIGAoJHtyZWNlbnRNb2R1bGVWZXJzaW9ufSA+PSAke3BhY2thZ2VJbmZvLnZlcnNpb259KWBcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2cuaW5mbyhcbiAgICAgIGBDbGVhbmluZyB1cCB0aGUgV2ViRHJpdmVyQWdlbnQgcHJvamVjdCBhZnRlciB0aGUgbW9kdWxlIHVwZ3JhZGUgaGFzIGhhcHBlbmVkIGAgK1xuICAgICAgYCgke3JlY2VudE1vZHVsZVZlcnNpb259IDwgJHtwYWNrYWdlSW5mby52ZXJzaW9ufSlgXG4gICAgKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy54Y29kZWJ1aWxkLmNsZWFuUHJvamVjdCgpO1xuICAgICAgYXdhaXQgYm94SXRlbS53cml0ZShwYWNrYWdlSW5mby52ZXJzaW9uKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy53YXJuKGBDYW5ub3QgcGVyZm9ybSBXZWJEcml2ZXJBZ2VudCBwcm9qZWN0IGNsZWFudXAuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTGF1bmNoIFdEQSB3aXRoIHByZWluc3RhbGxlZCBwYWNrYWdlIHdpdGhvdXQgeGNvZGVidWlsZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlc3Npb25JZCBMYXVuY2ggV0RBIGFuZCBlc3RhYmxpc2ggdGhlIHNlc3Npb24gd2l0aCB0aGlzIHNlc3Npb25JZFxuICAgKiBAcmV0dXJuIHs/b2JqZWN0fSBTdGF0ZSBPYmplY3RcbiAgICovXG4gIGFzeW5jIGxhdW5jaFdpdGhQcmVpbnN0YWxsZWRXREEoc2Vzc2lvbklkKSB7XG4gICAgY29uc3QgeGN0ZXN0RW52ID0ge1xuICAgICAgVVNFX1BPUlQ6IHRoaXMud2RhTG9jYWxQb3J0IHx8IFdEQV9BR0VOVF9QT1JULFxuICAgICAgV0RBX1BST0RVQ1RfQlVORExFX0lERU5USUZJRVI6IHRoaXMuYnVuZGxlSWRGb3JYY3Rlc3RcbiAgICB9O1xuICAgIGlmICh0aGlzLm1qcGVnU2VydmVyUG9ydCkge1xuICAgICAgeGN0ZXN0RW52Lk1KUEVHX1NFUlZFUl9QT1JUID0gdGhpcy5tanBlZ1NlcnZlclBvcnQ7XG4gICAgfVxuICAgIHRoaXMubG9nLmluZm8oJ0xhdW5jaGluZyBXZWJEcml2ZXJBZ2VudCBvbiB0aGUgZGV2aWNlIHdpdGhvdXQgeGNvZGVidWlsZCcpO1xuICAgIHRoaXMueGN0ZXN0QXBpQ2xpZW50ID0gbmV3IFhjdGVzdCh0aGlzLmRldmljZS51ZGlkLCB0aGlzLmJ1bmRsZUlkRm9yWGN0ZXN0LCBudWxsLCB7ZW52OiB4Y3Rlc3RFbnZ9KTtcblxuICAgIGF3YWl0IHRoaXMueGN0ZXN0QXBpQ2xpZW50LnN0YXJ0KCk7XG5cbiAgICB0aGlzLnNldHVwUHJveGllcyhzZXNzaW9uSWQpO1xuICAgIGNvbnN0IHN0YXR1cyA9IGF3YWl0IHRoaXMuZ2V0U3RhdHVzKCk7XG4gICAgdGhpcy5zdGFydGVkID0gdHJ1ZTtcbiAgICByZXR1cm4gc3RhdHVzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBjdXJyZW50IHJ1bm5pbmcgV0RBJ3Mgc3RhdHVzIGxpa2UgYmVsb3cgYWZ0ZXIgbGF1bmNoaW5nIFdEQVxuICAgKiB7XG4gICAqICAgXCJzdGF0ZVwiOiBcInN1Y2Nlc3NcIixcbiAgICogICBcIm9zXCI6IHtcbiAgICogICAgIFwibmFtZVwiOiBcImlPU1wiLFxuICAgKiAgICAgXCJ2ZXJzaW9uXCI6IFwiMTEuNFwiLFxuICAgKiAgICAgXCJzZGtWZXJzaW9uXCI6IFwiMTEuM1wiXG4gICAqICAgfSxcbiAgICogICBcImlvc1wiOiB7XG4gICAqICAgICBcInNpbXVsYXRvclZlcnNpb25cIjogXCIxMS40XCIsXG4gICAqICAgICBcImlwXCI6IFwiMTcyLjI1NC45OS4zNFwiXG4gICAqICAgfSxcbiAgICogICBcImJ1aWxkXCI6IHtcbiAgICogICAgIFwidGltZVwiOiBcIkp1biAyNCAyMDE4IDE3OjA4OjIxXCIsXG4gICAqICAgICBcInByb2R1Y3RCdW5kbGVJZGVudGlmaWVyXCI6IFwiY29tLmZhY2Vib29rLldlYkRyaXZlckFnZW50UnVubmVyXCJcbiAgICogICB9XG4gICAqIH1cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlc3Npb25JZCBMYXVuY2ggV0RBIGFuZCBlc3RhYmxpc2ggdGhlIHNlc3Npb24gd2l0aCB0aGlzIHNlc3Npb25JZFxuICAgKiBAcmV0dXJuIHs/b2JqZWN0fSBTdGF0ZSBPYmplY3RcbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBpbnZhbGlkIHJlc3BvbnNlIGNvZGUgb3IgYm9keVxuICAgKi9cbiAgYXN5bmMgbGF1bmNoIChzZXNzaW9uSWQpIHtcbiAgICBpZiAodGhpcy53ZWJEcml2ZXJBZ2VudFVybCkge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgVXNpbmcgcHJvdmlkZWQgV2ViZHJpdmVyQWdlbnQgYXQgJyR7dGhpcy53ZWJEcml2ZXJBZ2VudFVybH0nYCk7XG4gICAgICB0aGlzLnVybCA9IHRoaXMud2ViRHJpdmVyQWdlbnRVcmw7XG4gICAgICB0aGlzLnNldHVwUHJveGllcyhzZXNzaW9uSWQpO1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0U3RhdHVzKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudXNlUHJlaW5zdGFsbGVkV0RBKSB7XG4gICAgICBpZiAodGhpcy5pc1JlYWxEZXZpY2UpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMubGF1bmNoV2l0aFByZWluc3RhbGxlZFdEQShzZXNzaW9uSWQpO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1c2VQcmVpbnN0YWxsZWRXREEgaXMgYXZhaWxhYmxlIG9ubHkgZm9yIGEgcmVhbCBkZXZpY2UuJyk7XG4gICAgfVxuXG4gICAgdGhpcy5sb2cuaW5mbygnTGF1bmNoaW5nIFdlYkRyaXZlckFnZW50IG9uIHRoZSBkZXZpY2UnKTtcblxuICAgIHRoaXMuc2V0dXBQcm94aWVzKHNlc3Npb25JZCk7XG5cbiAgICBpZiAoIXRoaXMudXNlWGN0ZXN0cnVuRmlsZSAmJiAhYXdhaXQgZnMuZXhpc3RzKHRoaXMuYWdlbnRQYXRoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUcnlpbmcgdG8gdXNlIFdlYkRyaXZlckFnZW50IHByb2plY3QgYXQgJyR7dGhpcy5hZ2VudFBhdGh9JyBidXQgdGhlIGAgK1xuICAgICAgICAgICAgICAgICAgICAgICdmaWxlIGRvZXMgbm90IGV4aXN0Jyk7XG4gICAgfVxuXG4gICAgLy8gdXNlWGN0ZXN0cnVuRmlsZSBhbmQgdXNlUHJlYnVpbHRXREEgdXNlIGV4aXN0aW5nIGRlcGVuZGVuY2llc1xuICAgIC8vIEl0IGRlcGVuZHMgb24gdXNlciBzaWRlXG4gICAgaWYgKHRoaXMuaWRiIHx8IHRoaXMudXNlWGN0ZXN0cnVuRmlsZSB8fCAodGhpcy5kZXJpdmVkRGF0YVBhdGggJiYgdGhpcy51c2VQcmVidWlsdFdEQSkpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oJ1NraXBwZWQgV0RBIHByb2plY3QgY2xlYW51cCBhY2NvcmRpbmcgdG8gdGhlIHByb3ZpZGVkIGNhcGFiaWxpdGllcycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzeW5jaHJvbml6YXRpb25LZXkgPSBwYXRoLm5vcm1hbGl6ZSh0aGlzLmJvb3RzdHJhcFBhdGgpO1xuICAgICAgYXdhaXQgU0hBUkVEX1JFU09VUkNFU19HVUFSRC5hY3F1aXJlKHN5bmNocm9uaXphdGlvbktleSxcbiAgICAgICAgYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5fY2xlYW51cFByb2plY3RJZkZyZXNoKCkpO1xuICAgIH1cblxuICAgIC8vIFdlIG5lZWQgdG8gcHJvdmlkZSBXREEgbG9jYWwgcG9ydCwgYmVjYXVzZSBpdCBtaWdodCBiZSBvY2N1cGllZFxuICAgIGF3YWl0IHJlc2V0VGVzdFByb2Nlc3Nlcyh0aGlzLmRldmljZS51ZGlkLCAhdGhpcy5pc1JlYWxEZXZpY2UpO1xuXG4gICAgaWYgKHRoaXMuaWRiKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5zdGFydFdpdGhJREIoKTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnhjb2RlYnVpbGQuaW5pdCh0aGlzLm5vU2Vzc2lvblByb3h5KTtcblxuICAgIC8vIFN0YXJ0IHRoZSB4Y29kZWJ1aWxkIHByb2Nlc3NcbiAgICBpZiAodGhpcy5wcmVidWlsZFdEQSkge1xuICAgICAgYXdhaXQgdGhpcy54Y29kZWJ1aWxkLnByZWJ1aWxkKCk7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCB0aGlzLnhjb2RlYnVpbGQuc3RhcnQoKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0V2l0aElEQiAoKSB7XG4gICAgdGhpcy5sb2cuaW5mbygnV2lsbCBsYXVuY2ggV0RBIHdpdGggaWRiIGluc3RlYWQgb2YgeGNvZGVidWlsZCBzaW5jZSB0aGUgY29ycmVzcG9uZGluZyBmbGFnIGlzIGVuYWJsZWQnKTtcbiAgICBjb25zdCB7d2RhQnVuZGxlSWQsIHRlc3RCdW5kbGVJZH0gPSBhd2FpdCB0aGlzLnByZXBhcmVXREEoKTtcbiAgICBjb25zdCBlbnYgPSB7XG4gICAgICBVU0VfUE9SVDogdGhpcy53ZGFSZW1vdGVQb3J0LFxuICAgICAgV0RBX1BST0RVQ1RfQlVORExFX0lERU5USUZJRVI6IHRoaXMudXBkYXRlZFdEQUJ1bmRsZUlkLFxuICAgIH07XG4gICAgaWYgKHRoaXMubWpwZWdTZXJ2ZXJQb3J0KSB7XG4gICAgICBlbnYuTUpQRUdfU0VSVkVSX1BPUlQgPSB0aGlzLm1qcGVnU2VydmVyUG9ydDtcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5pZGIucnVuWENVSVRlc3Qod2RhQnVuZGxlSWQsIHdkYUJ1bmRsZUlkLCB0ZXN0QnVuZGxlSWQsIHtlbnZ9KTtcbiAgfVxuXG4gIGFzeW5jIHBhcnNlQnVuZGxlSWQgKHdkYUJ1bmRsZVBhdGgpIHtcbiAgICBjb25zdCBpbmZvUGxpc3RQYXRoID0gcGF0aC5qb2luKHdkYUJ1bmRsZVBhdGgsICdJbmZvLnBsaXN0Jyk7XG4gICAgY29uc3QgaW5mb1BsaXN0ID0gYXdhaXQgcGxpc3QucGFyc2VQbGlzdChhd2FpdCBmcy5yZWFkRmlsZShpbmZvUGxpc3RQYXRoKSk7XG4gICAgaWYgKCFpbmZvUGxpc3QuQ0ZCdW5kbGVJZGVudGlmaWVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIGJ1bmRsZSBpZCBpbiAnJHtpbmZvUGxpc3RQYXRofSdgKTtcbiAgICB9XG4gICAgcmV0dXJuIGluZm9QbGlzdC5DRkJ1bmRsZUlkZW50aWZpZXI7XG4gIH1cblxuICBhc3luYyBwcmVwYXJlV0RBICgpIHtcbiAgICBjb25zdCB3ZGFCdW5kbGVQYXRoID0gdGhpcy53ZGFCdW5kbGVQYXRoIHx8IGF3YWl0IHRoaXMuZmV0Y2hXREFCdW5kbGUoKTtcbiAgICBjb25zdCB3ZGFCdW5kbGVJZCA9IGF3YWl0IHRoaXMucGFyc2VCdW5kbGVJZCh3ZGFCdW5kbGVQYXRoKTtcbiAgICBpZiAoIWF3YWl0IHRoaXMuZGV2aWNlLmlzQXBwSW5zdGFsbGVkKHdkYUJ1bmRsZUlkKSkge1xuICAgICAgYXdhaXQgdGhpcy5kZXZpY2UuaW5zdGFsbEFwcCh3ZGFCdW5kbGVQYXRoKTtcbiAgICB9XG4gICAgY29uc3QgdGVzdEJ1bmRsZUlkID0gYXdhaXQgdGhpcy5pZGIuaW5zdGFsbFhDVGVzdEJ1bmRsZShwYXRoLmpvaW4od2RhQnVuZGxlUGF0aCwgJ1BsdWdJbnMnLCAnV2ViRHJpdmVyQWdlbnRSdW5uZXIueGN0ZXN0JykpO1xuICAgIHJldHVybiB7d2RhQnVuZGxlSWQsIHRlc3RCdW5kbGVJZCwgd2RhQnVuZGxlUGF0aH07XG4gIH1cblxuICBhc3luYyBmZXRjaFdEQUJ1bmRsZSAoKSB7XG4gICAgaWYgKCF0aGlzLmRlcml2ZWREYXRhUGF0aCkge1xuICAgICAgcmV0dXJuIGF3YWl0IGJ1bmRsZVdEQVNpbSh0aGlzLnhjb2RlYnVpbGQpO1xuICAgIH1cbiAgICBjb25zdCB3ZGFCdW5kbGVQYXRocyA9IGF3YWl0IGZzLmdsb2IoYCR7dGhpcy5kZXJpdmVkRGF0YVBhdGh9LyoqLyoke1dEQV9SVU5ORVJfQVBQfS9gLCB7XG4gICAgICBhYnNvbHV0ZTogdHJ1ZSxcbiAgICB9KTtcbiAgICBpZiAoXy5pc0VtcHR5KHdkYUJ1bmRsZVBhdGhzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCB0aGUgV0RBIGJ1bmRsZSBpbiAnJHt0aGlzLmRlcml2ZWREYXRhUGF0aH0nYCk7XG4gICAgfVxuICAgIHJldHVybiB3ZGFCdW5kbGVQYXRoc1swXTtcbiAgfVxuXG4gIGFzeW5jIGlzU291cmNlRnJlc2ggKCkge1xuICAgIGNvbnN0IGV4aXN0c1Byb21pc2VzID0gW1xuICAgICAgJ1Jlc291cmNlcycsXG4gICAgICBgUmVzb3VyY2VzJHtwYXRoLnNlcH1XZWJEcml2ZXJBZ2VudC5idW5kbGVgLFxuICAgIF0ubWFwKChzdWJQYXRoKSA9PiBmcy5leGlzdHMocGF0aC5yZXNvbHZlKHRoaXMuYm9vdHN0cmFwUGF0aCwgc3ViUGF0aCkpKTtcbiAgICByZXR1cm4gKGF3YWl0IEIuYWxsKGV4aXN0c1Byb21pc2VzKSkuc29tZSgodikgPT4gdiA9PT0gZmFsc2UpO1xuICB9XG5cbiAgc2V0dXBQcm94aWVzIChzZXNzaW9uSWQpIHtcbiAgICBjb25zdCBwcm94eU9wdHMgPSB7XG4gICAgICBsb2c6IHRoaXMubG9nLFxuICAgICAgc2VydmVyOiB0aGlzLnVybC5ob3N0bmFtZSxcbiAgICAgIHBvcnQ6IHRoaXMudXJsLnBvcnQsXG4gICAgICBiYXNlOiB0aGlzLmJhc2VQYXRoLFxuICAgICAgdGltZW91dDogdGhpcy53ZGFDb25uZWN0aW9uVGltZW91dCxcbiAgICAgIGtlZXBBbGl2ZTogdHJ1ZSxcbiAgICB9O1xuXG4gICAgdGhpcy5qd3Byb3h5ID0gbmV3IEpXUHJveHkocHJveHlPcHRzKTtcbiAgICB0aGlzLmp3cHJveHkuc2Vzc2lvbklkID0gc2Vzc2lvbklkO1xuICAgIHRoaXMucHJveHlSZXFSZXMgPSB0aGlzLmp3cHJveHkucHJveHlSZXFSZXMuYmluZCh0aGlzLmp3cHJveHkpO1xuXG4gICAgdGhpcy5ub1Nlc3Npb25Qcm94eSA9IG5ldyBOb1Nlc3Npb25Qcm94eShwcm94eU9wdHMpO1xuICB9XG5cbiAgYXN5bmMgcXVpdCAoKSB7XG4gICAgaWYgKHRoaXMudXNlUHJlaW5zdGFsbGVkV0RBKSB7XG4gICAgICBpZiAodGhpcy54Y3Rlc3RBcGlDbGllbnQpIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbygnU3RvcHBpbmcgdGhlIFhDVGVzdCBzZXNzaW9uJyk7XG4gICAgICAgIHRoaXMueGN0ZXN0QXBpQ2xpZW50LnN0b3AoKTtcbiAgICAgICAgdGhpcy54Y3Rlc3RBcGlDbGllbnQgPSBudWxsO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXRoaXMuYXJncy53ZWJEcml2ZXJBZ2VudFVybCkge1xuICAgICAgdGhpcy5sb2cuaW5mbygnU2h1dHRpbmcgZG93biBzdWItcHJvY2Vzc2VzJyk7XG4gICAgICBhd2FpdCB0aGlzLnhjb2RlYnVpbGQucXVpdCgpO1xuICAgICAgYXdhaXQgdGhpcy54Y29kZWJ1aWxkLnJlc2V0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKCdEbyBub3Qgc3RvcCB4Y29kZWJ1aWxkIG5vciBYQ1Rlc3Qgc2Vzc2lvbiAnICtcbiAgICAgICAgJ3NpbmNlIHRoZSBXREEgc2Vzc2lvbiBpcyBtYW5hZ2VkIGJ5IG91dHNpZGUgdGhpcyBkcml2ZXIuJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuandwcm94eSkge1xuICAgICAgdGhpcy5qd3Byb3h5LnNlc3Npb25JZCA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG5cbiAgICBpZiAoIXRoaXMuYXJncy53ZWJEcml2ZXJBZ2VudFVybCkge1xuICAgICAgLy8gaWYgd2UgcG9wdWxhdGVkIHRoZSB1cmwgb3Vyc2VsdmVzIChkdXJpbmcgYHNldHVwQ2FjaGluZ2AgY2FsbCwgZm9yIGluc3RhbmNlKVxuICAgICAgLy8gdGhlbiBjbGVhbiB0aGF0IHVwLiBJZiB0aGUgdXJsIHdhcyBzdXBwbGllZCwgd2Ugd2FudCB0byBrZWVwIGl0XG4gICAgICB0aGlzLndlYkRyaXZlckFnZW50VXJsID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBnZXQgdXJsICgpIHtcbiAgICBpZiAoIXRoaXMuX3VybCkge1xuICAgICAgaWYgKHRoaXMud2ViRHJpdmVyQWdlbnRVcmwpIHtcbiAgICAgICAgdGhpcy5fdXJsID0gdXJsLnBhcnNlKHRoaXMud2ViRHJpdmVyQWdlbnRVcmwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcG9ydCA9IHRoaXMud2RhTG9jYWxQb3J0IHx8IFdEQV9BR0VOVF9QT1JUO1xuICAgICAgICBjb25zdCB7cHJvdG9jb2wsIGhvc3RuYW1lfSA9IHVybC5wYXJzZSh0aGlzLndkYUJhc2VVcmwgfHwgV0RBX0JBU0VfVVJMKTtcbiAgICAgICAgdGhpcy5fdXJsID0gdXJsLnBhcnNlKGAke3Byb3RvY29sfS8vJHtob3N0bmFtZX06JHtwb3J0fWApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fdXJsO1xuICB9XG5cbiAgc2V0IHVybCAoX3VybCkge1xuICAgIHRoaXMuX3VybCA9IHVybC5wYXJzZShfdXJsKTtcbiAgfVxuXG4gIGdldCBmdWxseVN0YXJ0ZWQgKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0ZWQ7XG4gIH1cblxuICBzZXQgZnVsbHlTdGFydGVkIChzdGFydGVkID0gZmFsc2UpIHtcbiAgICB0aGlzLnN0YXJ0ZWQgPSBzdGFydGVkO1xuICB9XG5cbiAgYXN5bmMgcmV0cmlldmVEZXJpdmVkRGF0YVBhdGggKCkge1xuICAgIGlmICh0aGlzLmNhblNraXBYY29kZWJ1aWxkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCB0aGlzLnhjb2RlYnVpbGQucmV0cmlldmVEZXJpdmVkRGF0YVBhdGgoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXVzZSBydW5uaW5nIFdEQSBpZiBpdCBoYXMgdGhlIHNhbWUgYnVuZGxlIGlkIHdpdGggdXBkYXRlZFdEQUJ1bmRsZUlkLlxuICAgKiBPciByZXVzZSBpdCBpZiBpdCBoYXMgdGhlIGRlZmF1bHQgaWQgd2l0aG91dCB1cGRhdGVkV0RBQnVuZGxlSWQuXG4gICAqIFVuaW5zdGFsbCBpdCBpZiB0aGUgbWV0aG9kIGZhY2VzIGFuIGV4Y2VwdGlvbiBmb3IgdGhlIGFib3ZlIHNpdHVhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVwZGF0ZWRXREFCdW5kbGVJZCBCdW5kbGVJZCB5b3UnZCBsaWtlIHRvIHVzZVxuICAgKi9cbiAgYXN5bmMgc2V0dXBDYWNoaW5nICgpIHtcbiAgICBjb25zdCBzdGF0dXMgPSBhd2FpdCB0aGlzLmdldFN0YXR1cygpO1xuICAgIGlmICghc3RhdHVzIHx8ICFzdGF0dXMuYnVpbGQpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKCdXREEgaXMgY3VycmVudGx5IG5vdCBydW5uaW5nLiBUaGVyZSBpcyBub3RoaW5nIHRvIGNhY2hlJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qge1xuICAgICAgcHJvZHVjdEJ1bmRsZUlkZW50aWZpZXIsXG4gICAgICB1cGdyYWRlZEF0LFxuICAgIH0gPSBzdGF0dXMuYnVpbGQ7XG4gICAgLy8gZm9yIHJlYWwgZGV2aWNlXG4gICAgaWYgKHV0aWwuaGFzVmFsdWUocHJvZHVjdEJ1bmRsZUlkZW50aWZpZXIpICYmIHV0aWwuaGFzVmFsdWUodGhpcy51cGRhdGVkV0RBQnVuZGxlSWQpICYmIHRoaXMudXBkYXRlZFdEQUJ1bmRsZUlkICE9PSBwcm9kdWN0QnVuZGxlSWRlbnRpZmllcikge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgV2lsbCB1bmluc3RhbGwgcnVubmluZyBXREEgc2luY2UgaXQgaGFzIGRpZmZlcmVudCBidW5kbGUgaWQuIFRoZSBhY3R1YWwgdmFsdWUgaXMgJyR7cHJvZHVjdEJ1bmRsZUlkZW50aWZpZXJ9Jy5gKTtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnVuaW5zdGFsbCgpO1xuICAgIH1cbiAgICAvLyBmb3Igc2ltdWxhdG9yXG4gICAgaWYgKHV0aWwuaGFzVmFsdWUocHJvZHVjdEJ1bmRsZUlkZW50aWZpZXIpICYmICF1dGlsLmhhc1ZhbHVlKHRoaXMudXBkYXRlZFdEQUJ1bmRsZUlkKSAmJiBXREFfUlVOTkVSX0JVTkRMRV9JRCAhPT0gcHJvZHVjdEJ1bmRsZUlkZW50aWZpZXIpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oYFdpbGwgdW5pbnN0YWxsIHJ1bm5pbmcgV0RBIHNpbmNlIGl0cyBidW5kbGUgaWQgaXMgbm90IGVxdWFsIHRvIHRoZSBkZWZhdWx0IHZhbHVlICR7V0RBX1JVTk5FUl9CVU5ETEVfSUR9YCk7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy51bmluc3RhbGwoKTtcbiAgICB9XG5cbiAgICBjb25zdCBhY3R1YWxVcGdyYWRlVGltZXN0YW1wID0gYXdhaXQgZ2V0V0RBVXBncmFkZVRpbWVzdGFtcCgpO1xuICAgIHRoaXMubG9nLmRlYnVnKGBVcGdyYWRlIHRpbWVzdGFtcCBvZiB0aGUgY3VycmVudGx5IGJ1bmRsZWQgV0RBOiAke2FjdHVhbFVwZ3JhZGVUaW1lc3RhbXB9YCk7XG4gICAgdGhpcy5sb2cuZGVidWcoYFVwZ3JhZGUgdGltZXN0YW1wIG9mIHRoZSBXREEgb24gdGhlIGRldmljZTogJHt1cGdyYWRlZEF0fWApO1xuICAgIGlmIChhY3R1YWxVcGdyYWRlVGltZXN0YW1wICYmIHVwZ3JhZGVkQXQgJiYgXy50b0xvd2VyKGAke2FjdHVhbFVwZ3JhZGVUaW1lc3RhbXB9YCkgIT09IF8udG9Mb3dlcihgJHt1cGdyYWRlZEF0fWApKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKCdXaWxsIHVuaW5zdGFsbCBydW5uaW5nIFdEQSBzaW5jZSBpdCBoYXMgZGlmZmVyZW50IHZlcnNpb24gaW4gY29tcGFyaXNvbiB0byB0aGUgb25lICcgK1xuICAgICAgICBgd2hpY2ggaXMgYnVuZGxlZCB3aXRoIGFwcGl1bS14Y3VpdGVzdC1kcml2ZXIgbW9kdWxlICgke2FjdHVhbFVwZ3JhZGVUaW1lc3RhbXB9ICE9ICR7dXBncmFkZWRBdH0pYCk7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy51bmluc3RhbGwoKTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXNzYWdlID0gdXRpbC5oYXNWYWx1ZShwcm9kdWN0QnVuZGxlSWRlbnRpZmllcilcbiAgICAgID8gYFdpbGwgcmV1c2UgcHJldmlvdXNseSBjYWNoZWQgV0RBIGluc3RhbmNlIGF0ICcke3RoaXMudXJsLmhyZWZ9JyB3aXRoICcke3Byb2R1Y3RCdW5kbGVJZGVudGlmaWVyfSdgXG4gICAgICA6IGBXaWxsIHJldXNlIHByZXZpb3VzbHkgY2FjaGVkIFdEQSBpbnN0YW5jZSBhdCAnJHt0aGlzLnVybC5ocmVmfSdgO1xuICAgIHRoaXMubG9nLmluZm8oYCR7bWVzc2FnZX0uIFNldCB0aGUgd2RhTG9jYWxQb3J0IGNhcGFiaWxpdHkgdG8gYSB2YWx1ZSBkaWZmZXJlbnQgZnJvbSAke3RoaXMudXJsLnBvcnR9IGlmIHRoaXMgaXMgYW4gdW5kZXNpcmVkIGJlaGF2aW9yLmApO1xuICAgIHRoaXMud2ViRHJpdmVyQWdlbnRVcmwgPSB0aGlzLnVybC5ocmVmO1xuICB9XG5cbiAgLyoqXG4gICAqIFF1aXQgYW5kIHVuaW5zdGFsbCBydW5uaW5nIFdEQS5cbiAgICovXG4gIGFzeW5jIHF1aXRBbmRVbmluc3RhbGwgKCkge1xuICAgIGF3YWl0IHRoaXMucXVpdCgpO1xuICAgIGF3YWl0IHRoaXMudW5pbnN0YWxsKCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgV2ViRHJpdmVyQWdlbnQ7XG5leHBvcnQgeyBXZWJEcml2ZXJBZ2VudCB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLEtBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLEtBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLFNBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLFdBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLFFBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLE9BQUEsR0FBQVAsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFPLGVBQUEsR0FBQVAsT0FBQTtBQUNBLElBQUFRLE1BQUEsR0FBQVIsT0FBQTtBQUdBLElBQUFTLFdBQUEsR0FBQVYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFVLFVBQUEsR0FBQVgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFXLGFBQUEsR0FBQVgsT0FBQTtBQUNBLElBQUFZLGtCQUFBLEdBQUFaLE9BQUE7QUFDQSxJQUFBYSxVQUFBLEdBQUFiLE9BQUE7QUFJQSxJQUFBYyxnQkFBQSxHQUFBZCxPQUFBO0FBQ0EsSUFBQWUsVUFBQSxHQUFBZixPQUFBO0FBRUEsTUFBTWdCLGtCQUFrQixHQUFHLEVBQUUsR0FBRyxJQUFJO0FBQ3BDLE1B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
@@ -1 +1 @@
1
- {"version":3,"file":"webdriveragent.js","names":["_lodash","_interopRequireDefault","require","_path","_url2","_bluebird","_baseDriver","_support","_logger","_noSessionProxy","_utils","_xcodebuild","_asyncLock","_teen_process","_checkDependencies","_constants","_appiumIosDevice","_strongbox","WDA_LAUNCH_TIMEOUT","WDA_AGENT_PORT","WDA_CF_BUNDLE_NAME","SHARED_RESOURCES_GUARD","AsyncLock","RECENT_MODULE_VERSION_ITEM_NAME","WebDriverAgent","constructor","xcodeVersion","args","log","_","clone","defaultLogger","device","platformVersion","platformName","iosSdkVersion","host","isRealDevice","realDevice","idb","wdaBundlePath","setWDAPaths","bootstrapPath","agentPath","wdaLocalPort","wdaRemotePort","wdaBaseUrl","WDA_BASE_URL","prebuildWDA","webDriverAgentUrl","started","wdaConnectionTimeout","useXctestrunFile","usePrebuiltWDA","derivedDataPath","mjpegServerPort","updatedWDABundleId","usePreinstalledWDA","xctestApiClient","xcodebuild","canSkipXcodebuild","XcodeBuild","showXcodeLog","xcodeConfigFile","xcodeOrgId","xcodeSigningId","keychainPath","keychainPassword","useSimpleBuildTest","launchTimeout","wdaLaunchTimeout","allowProvisioningDeviceRegistration","resultBundlePath","resultBundleVersion","bundleIdForXctest","WDA_RUNNER_BUNDLE_ID_FOR_XCTEST","BOOTSTRAP_PATH","info","path","resolve","cleanupObsoleteProcesses","obsoletePids","getPIDsListeningOnPort","url","port","cmdLine","includes","toLowerCase","udid","isEmpty","debug","length","exec","e","warn","message","isRunning","getStatus","basePath","noSessionProxy","NoSessionProxy","server","hostname","base","timeout","command","err","href","uninstall","bundleIds","getUserInstalledBundleIdsByBundleName","bundleId","removeApp","_cleanupProjectIfFresh","packageInfo","JSON","parse","fs","readFile","join","box","strongbox","name","boxItem","getItem","timestampPath","process","env","HOME","WDA_UPGRADE_TIMESTAMP_PATH","exists","createItemWithContents","version","recentModuleVersion","read","util","coerceVersion","write","compareVersions","cleanProject","launchWithPreinstalledWDA","sessionId","xctestEnv","USE_PORT","WDA_PRODUCT_BUNDLE_IDENTIFIER","MJPEG_SERVER_PORT","Xctest","start","setupProxies","status","launch","Error","synchronizationKey","normalize","acquire","resetTestProcesses","startWithIDB","init","prebuild","wdaBundleId","testBundleId","prepareWDA","runXCUITest","parseBundleId","infoPlistPath","infoPlist","plist","parsePlist","CFBundleIdentifier","fetchWDABundle","isAppInstalled","installApp","installXCTestBundle","bundleWDASim","wdaBundlePaths","glob","WDA_RUNNER_APP","absolute","isSourceFresh","existsPromises","sep","map","subPath","B","all","some","v","proxyOpts","keepAlive","jwproxy","JWProxy","proxyReqRes","bind","quit","stop","reset","_url","protocol","fullyStarted","retrieveDerivedDataPath","setupCaching","build","productBundleIdentifier","upgradedAt","hasValue","WDA_RUNNER_BUNDLE_ID","actualUpgradeTimestamp","getWDAUpgradeTimestamp","toLower","quitAndUninstall","exports","_default","default"],"sources":["../../lib/webdriveragent.js"],"sourcesContent":["import _ from 'lodash';\nimport path from 'path';\nimport url from 'url';\nimport B from 'bluebird';\nimport { JWProxy } from '@appium/base-driver';\nimport { fs, util, plist } from '@appium/support';\nimport defaultLogger from './logger';\nimport { NoSessionProxy } from './no-session-proxy';\nimport {\n getWDAUpgradeTimestamp, resetTestProcesses, getPIDsListeningOnPort, BOOTSTRAP_PATH\n} from './utils';\nimport XcodeBuild from './xcodebuild';\nimport AsyncLock from 'async-lock';\nimport { exec } from 'teen_process';\nimport { bundleWDASim } from './check-dependencies';\nimport {\n WDA_RUNNER_BUNDLE_ID, WDA_RUNNER_BUNDLE_ID_FOR_XCTEST, WDA_RUNNER_APP,\n WDA_BASE_URL, WDA_UPGRADE_TIMESTAMP_PATH\n} from './constants';\nimport {Xctest} from 'appium-ios-device';\nimport {strongbox} from '@appium/strongbox';\n\nconst WDA_LAUNCH_TIMEOUT = 60 * 1000;\nconst WDA_AGENT_PORT = 8100;\nconst WDA_CF_BUNDLE_NAME = 'WebDriverAgentRunner-Runner';\nconst SHARED_RESOURCES_GUARD = new AsyncLock();\nconst RECENT_MODULE_VERSION_ITEM_NAME = 'recentWdaModuleVersion';\n\nclass WebDriverAgent {\n constructor (xcodeVersion, args = {}, log = null) {\n this.xcodeVersion = xcodeVersion;\n\n this.args = _.clone(args);\n this.log = log ?? defaultLogger;\n\n this.device = args.device;\n this.platformVersion = args.platformVersion;\n this.platformName = args.platformName;\n this.iosSdkVersion = args.iosSdkVersion;\n this.host = args.host;\n this.isRealDevice = !!args.realDevice;\n this.idb = (args.device || {}).idb;\n this.wdaBundlePath = args.wdaBundlePath;\n\n this.setWDAPaths(args.bootstrapPath, args.agentPath);\n\n this.wdaLocalPort = args.wdaLocalPort;\n this.wdaRemotePort = args.wdaLocalPort || WDA_AGENT_PORT;\n this.wdaBaseUrl = args.wdaBaseUrl || WDA_BASE_URL;\n\n this.prebuildWDA = args.prebuildWDA;\n\n // this.args.webDriverAgentUrl guiarantees the capabilities acually\n // gave 'appium:webDriverAgentUrl' but 'this.webDriverAgentUrl'\n // could be used for caching WDA with xcodebuild.\n this.webDriverAgentUrl = args.webDriverAgentUrl;\n\n this.started = false;\n\n this.wdaConnectionTimeout = args.wdaConnectionTimeout;\n\n this.useXctestrunFile = args.useXctestrunFile;\n this.usePrebuiltWDA = args.usePrebuiltWDA;\n this.derivedDataPath = args.derivedDataPath;\n this.mjpegServerPort = args.mjpegServerPort;\n\n this.updatedWDABundleId = args.updatedWDABundleId;\n\n this.usePreinstalledWDA = args.usePreinstalledWDA;\n this.xctestApiClient = null;\n\n this.xcodebuild = this.canSkipXcodebuild\n ? null\n : new XcodeBuild(this.xcodeVersion, this.device, {\n platformVersion: this.platformVersion,\n platformName: this.platformName,\n iosSdkVersion: this.iosSdkVersion,\n agentPath: this.agentPath,\n bootstrapPath: this.bootstrapPath,\n realDevice: this.isRealDevice,\n showXcodeLog: args.showXcodeLog,\n xcodeConfigFile: args.xcodeConfigFile,\n xcodeOrgId: args.xcodeOrgId,\n xcodeSigningId: args.xcodeSigningId,\n keychainPath: args.keychainPath,\n keychainPassword: args.keychainPassword,\n useSimpleBuildTest: args.useSimpleBuildTest,\n usePrebuiltWDA: args.usePrebuiltWDA,\n updatedWDABundleId: this.updatedWDABundleId,\n launchTimeout: args.wdaLaunchTimeout || WDA_LAUNCH_TIMEOUT,\n wdaRemotePort: this.wdaRemotePort,\n useXctestrunFile: this.useXctestrunFile,\n derivedDataPath: args.derivedDataPath,\n mjpegServerPort: this.mjpegServerPort,\n allowProvisioningDeviceRegistration: args.allowProvisioningDeviceRegistration,\n resultBundlePath: args.resultBundlePath,\n resultBundleVersion: args.resultBundleVersion,\n }, this.log);\n }\n\n /**\n * Return true if the session does not need xcodebuild.\n * @returns {boolean} Whether the session needs/has xcodebuild.\n */\n get canSkipXcodebuild () {\n // Use this.args.webDriverAgentUrl to guarantee\n // the capabilities set gave the `appium:webDriverAgentUrl`.\n return this.usePreinstalledWDA || this.args.webDriverAgentUrl;\n }\n\n /**\n *\n * @returns {string} Bundle ID for Xctest.\n */\n get bundleIdForXctest () {\n return this.updatedWDABundleId ? `${this.updatedWDABundleId}.xctrunner` : WDA_RUNNER_BUNDLE_ID_FOR_XCTEST;\n }\n\n setWDAPaths (bootstrapPath, agentPath) {\n // allow the user to specify a place for WDA. This is undocumented and\n // only here for the purposes of testing development of WDA\n this.bootstrapPath = bootstrapPath || BOOTSTRAP_PATH;\n this.log.info(`Using WDA path: '${this.bootstrapPath}'`);\n\n // for backward compatibility we need to be able to specify agentPath too\n this.agentPath = agentPath || path.resolve(this.bootstrapPath, 'WebDriverAgent.xcodeproj');\n this.log.info(`Using WDA agent: '${this.agentPath}'`);\n }\n\n async cleanupObsoleteProcesses () {\n const obsoletePids = await getPIDsListeningOnPort(this.url.port,\n (cmdLine) => cmdLine.includes('/WebDriverAgentRunner') &&\n !cmdLine.toLowerCase().includes(this.device.udid.toLowerCase()));\n\n if (_.isEmpty(obsoletePids)) {\n this.log.debug(`No obsolete cached processes from previous WDA sessions ` +\n `listening on port ${this.url.port} have been found`);\n return;\n }\n\n this.log.info(`Detected ${obsoletePids.length} obsolete cached process${obsoletePids.length === 1 ? '' : 'es'} ` +\n `from previous WDA sessions. Cleaning them up`);\n try {\n await exec('kill', obsoletePids);\n } catch (e) {\n this.log.warn(`Failed to kill obsolete cached process${obsoletePids.length === 1 ? '' : 'es'} '${obsoletePids}'. ` +\n `Original error: ${e.message}`);\n }\n }\n\n /**\n * Return boolean if WDA is running or not\n * @return {boolean} True if WDA is running\n * @throws {Error} If there was invalid response code or body\n */\n async isRunning () {\n return !!(await this.getStatus());\n }\n\n get basePath () {\n if (this.url.path === '/') {\n return '';\n }\n return this.url.path || '';\n }\n\n /**\n * Return current running WDA's status like below\n * {\n * \"state\": \"success\",\n * \"os\": {\n * \"name\": \"iOS\",\n * \"version\": \"11.4\",\n * \"sdkVersion\": \"11.3\"\n * },\n * \"ios\": {\n * \"simulatorVersion\": \"11.4\",\n * \"ip\": \"172.254.99.34\"\n * },\n * \"build\": {\n * \"time\": \"Jun 24 2018 17:08:21\",\n * \"productBundleIdentifier\": \"com.facebook.WebDriverAgentRunner\"\n * }\n * }\n *\n * @return {?object} State Object\n * @throws {Error} If there was invalid response code or body\n */\n async getStatus () {\n const noSessionProxy = new NoSessionProxy({\n server: this.url.hostname,\n port: this.url.port,\n base: this.basePath,\n timeout: 3000,\n });\n try {\n return await noSessionProxy.command('/status', 'GET');\n } catch (err) {\n this.log.debug(`WDA is not listening at '${this.url.href}'`);\n return null;\n }\n }\n\n /**\n * Uninstall WDAs from the test device.\n * Over Xcode 11, multiple WDA can be in the device since Xcode 11 generates different WDA.\n * Appium does not expect multiple WDAs are running on a device.\n */\n async uninstall () {\n try {\n const bundleIds = await this.device.getUserInstalledBundleIdsByBundleName(WDA_CF_BUNDLE_NAME);\n if (_.isEmpty(bundleIds)) {\n this.log.debug('No WDAs on the device.');\n return;\n }\n\n this.log.debug(`Uninstalling WDAs: '${bundleIds}'`);\n for (const bundleId of bundleIds) {\n await this.device.removeApp(bundleId);\n }\n } catch (e) {\n this.log.debug(e);\n this.log.warn(`WebDriverAgent uninstall failed. Perhaps, it is already uninstalled? ` +\n `Original error: ${e.message}`);\n }\n }\n\n async _cleanupProjectIfFresh () {\n if (this.canSkipXcodebuild) {\n return;\n }\n\n const packageInfo = JSON.parse(await fs.readFile(path.join(BOOTSTRAP_PATH, 'package.json'), 'utf8'));\n const box = strongbox(packageInfo.name);\n let boxItem = box.getItem(RECENT_MODULE_VERSION_ITEM_NAME);\n if (!boxItem) {\n const timestampPath = path.resolve(process.env.HOME, WDA_UPGRADE_TIMESTAMP_PATH);\n if (await fs.exists(timestampPath)) {\n // TODO: It is probably a bit ugly to hardcode the recent version string,\n // TODO: hovewer it should do the job as a temporary transition trick\n // TODO: to switch from a hardcoded file path to the strongbox usage.\n try {\n boxItem = await box.createItemWithContents(RECENT_MODULE_VERSION_ITEM_NAME, '5.0.0');\n } catch (e) {\n this.log.warn(`The actual module version cannot be persisted: ${e.message}`);\n return;\n }\n } else {\n this.log.info('There is no need to perform the project cleanup. A fresh install has been detected');\n try {\n await box.createItemWithContents(RECENT_MODULE_VERSION_ITEM_NAME, packageInfo.version);\n } catch (e) {\n this.log.warn(`The actual module version cannot be persisted: ${e.message}`);\n }\n return;\n }\n }\n\n let recentModuleVersion = await boxItem.read();\n try {\n recentModuleVersion = util.coerceVersion(recentModuleVersion, true);\n } catch (e) {\n this.log.warn(`The persisted module version string has been damaged: ${e.message}`);\n this.log.info(`Updating it to '${packageInfo.version}' assuming the project clenup is not needed`);\n await boxItem.write(packageInfo.version);\n return;\n }\n\n if (util.compareVersions(recentModuleVersion, '>=', packageInfo.version)) {\n this.log.info(\n `WebDriverAgent does not need a cleanup. The project sources are up to date ` +\n `(${recentModuleVersion} >= ${packageInfo.version})`\n );\n return;\n }\n\n this.log.info(\n `Cleaning up the WebDriverAgent project after the module upgrade has happened ` +\n `(${recentModuleVersion} < ${packageInfo.version})`\n );\n try {\n await this.xcodebuild.cleanProject();\n await boxItem.write(packageInfo.version);\n } catch (e) {\n this.log.warn(`Cannot perform WebDriverAgent project cleanup. Original error: ${e.message}`);\n }\n }\n\n /**\n * Launch WDA with preinstalled package without xcodebuild.\n * @param {string} sessionId Launch WDA and establish the session with this sessionId\n * @return {?object} State Object\n */\n async launchWithPreinstalledWDA(sessionId) {\n const xctestEnv = {\n USE_PORT: this.wdaLocalPort || WDA_AGENT_PORT,\n WDA_PRODUCT_BUNDLE_IDENTIFIER: this.bundleIdForXctest\n };\n if (this.mjpegServerPort) {\n xctestEnv.MJPEG_SERVER_PORT = this.mjpegServerPort;\n }\n this.log.info('Launching WebDriverAgent on the device without xcodebuild');\n this.xctestApiClient = new Xctest(this.device.udid, this.bundleIdForXctest, null, {env: xctestEnv});\n\n await this.xctestApiClient.start();\n\n this.setupProxies(sessionId);\n const status = await this.getStatus();\n this.started = true;\n return status;\n }\n\n /**\n * Return current running WDA's status like below after launching WDA\n * {\n * \"state\": \"success\",\n * \"os\": {\n * \"name\": \"iOS\",\n * \"version\": \"11.4\",\n * \"sdkVersion\": \"11.3\"\n * },\n * \"ios\": {\n * \"simulatorVersion\": \"11.4\",\n * \"ip\": \"172.254.99.34\"\n * },\n * \"build\": {\n * \"time\": \"Jun 24 2018 17:08:21\",\n * \"productBundleIdentifier\": \"com.facebook.WebDriverAgentRunner\"\n * }\n * }\n *\n * @param {string} sessionId Launch WDA and establish the session with this sessionId\n * @return {?object} State Object\n * @throws {Error} If there was invalid response code or body\n */\n async launch (sessionId) {\n if (this.webDriverAgentUrl) {\n this.log.info(`Using provided WebdriverAgent at '${this.webDriverAgentUrl}'`);\n this.url = this.webDriverAgentUrl;\n this.setupProxies(sessionId);\n return await this.getStatus();\n }\n\n if (this.usePreinstalledWDA) {\n if (this.isRealDevice) {\n return await this.launchWithPreinstalledWDA(sessionId);\n }\n throw new Error('usePreinstalledWDA is available only for a real device.');\n }\n\n this.log.info('Launching WebDriverAgent on the device');\n\n this.setupProxies(sessionId);\n\n if (!this.useXctestrunFile && !await fs.exists(this.agentPath)) {\n throw new Error(`Trying to use WebDriverAgent project at '${this.agentPath}' but the ` +\n 'file does not exist');\n }\n\n // useXctestrunFile and usePrebuiltWDA use existing dependencies\n // It depends on user side\n if (this.idb || this.useXctestrunFile || (this.derivedDataPath && this.usePrebuiltWDA)) {\n this.log.info('Skipped WDA project cleanup according to the provided capabilities');\n } else {\n const synchronizationKey = path.normalize(this.bootstrapPath);\n await SHARED_RESOURCES_GUARD.acquire(synchronizationKey,\n async () => await this._cleanupProjectIfFresh());\n }\n\n // We need to provide WDA local port, because it might be occupied\n await resetTestProcesses(this.device.udid, !this.isRealDevice);\n\n if (this.idb) {\n return await this.startWithIDB();\n }\n\n await this.xcodebuild.init(this.noSessionProxy);\n\n // Start the xcodebuild process\n if (this.prebuildWDA) {\n await this.xcodebuild.prebuild();\n }\n return await this.xcodebuild.start();\n }\n\n async startWithIDB () {\n this.log.info('Will launch WDA with idb instead of xcodebuild since the corresponding flag is enabled');\n const {wdaBundleId, testBundleId} = await this.prepareWDA();\n const env = {\n USE_PORT: this.wdaRemotePort,\n WDA_PRODUCT_BUNDLE_IDENTIFIER: this.updatedWDABundleId,\n };\n if (this.mjpegServerPort) {\n env.MJPEG_SERVER_PORT = this.mjpegServerPort;\n }\n\n return await this.idb.runXCUITest(wdaBundleId, wdaBundleId, testBundleId, {env});\n }\n\n async parseBundleId (wdaBundlePath) {\n const infoPlistPath = path.join(wdaBundlePath, 'Info.plist');\n const infoPlist = await plist.parsePlist(await fs.readFile(infoPlistPath));\n if (!infoPlist.CFBundleIdentifier) {\n throw new Error(`Could not find bundle id in '${infoPlistPath}'`);\n }\n return infoPlist.CFBundleIdentifier;\n }\n\n async prepareWDA () {\n const wdaBundlePath = this.wdaBundlePath || await this.fetchWDABundle();\n const wdaBundleId = await this.parseBundleId(wdaBundlePath);\n if (!await this.device.isAppInstalled(wdaBundleId)) {\n await this.device.installApp(wdaBundlePath);\n }\n const testBundleId = await this.idb.installXCTestBundle(path.join(wdaBundlePath, 'PlugIns', 'WebDriverAgentRunner.xctest'));\n return {wdaBundleId, testBundleId, wdaBundlePath};\n }\n\n async fetchWDABundle () {\n if (!this.derivedDataPath) {\n return await bundleWDASim(this.xcodebuild);\n }\n const wdaBundlePaths = await fs.glob(`${this.derivedDataPath}/**/*${WDA_RUNNER_APP}/`, {\n absolute: true,\n });\n if (_.isEmpty(wdaBundlePaths)) {\n throw new Error(`Could not find the WDA bundle in '${this.derivedDataPath}'`);\n }\n return wdaBundlePaths[0];\n }\n\n async isSourceFresh () {\n const existsPromises = [\n 'Resources',\n `Resources${path.sep}WebDriverAgent.bundle`,\n ].map((subPath) => fs.exists(path.resolve(this.bootstrapPath, subPath)));\n return (await B.all(existsPromises)).some((v) => v === false);\n }\n\n setupProxies (sessionId) {\n const proxyOpts = {\n log: this.log,\n server: this.url.hostname,\n port: this.url.port,\n base: this.basePath,\n timeout: this.wdaConnectionTimeout,\n keepAlive: true,\n };\n\n this.jwproxy = new JWProxy(proxyOpts);\n this.jwproxy.sessionId = sessionId;\n this.proxyReqRes = this.jwproxy.proxyReqRes.bind(this.jwproxy);\n\n this.noSessionProxy = new NoSessionProxy(proxyOpts);\n }\n\n async quit () {\n if (this.usePreinstalledWDA) {\n if (this.xctestApiClient) {\n this.log.info('Stopping the XCTest session');\n this.xctestApiClient.stop();\n this.xctestApiClient = null;\n }\n } else if (!this.args.webDriverAgentUrl) {\n this.log.info('Shutting down sub-processes');\n await this.xcodebuild.quit();\n await this.xcodebuild.reset();\n } else {\n this.log.debug('Do not stop xcodebuild nor XCTest session ' +\n 'since the WDA session is managed by outside this driver.');\n }\n\n if (this.jwproxy) {\n this.jwproxy.sessionId = null;\n }\n\n this.started = false;\n\n if (!this.args.webDriverAgentUrl) {\n // if we populated the url ourselves (during `setupCaching` call, for instance)\n // then clean that up. If the url was supplied, we want to keep it\n this.webDriverAgentUrl = null;\n }\n }\n\n get url () {\n if (!this._url) {\n if (this.webDriverAgentUrl) {\n this._url = url.parse(this.webDriverAgentUrl);\n } else {\n const port = this.wdaLocalPort || WDA_AGENT_PORT;\n const {protocol, hostname} = url.parse(this.wdaBaseUrl || WDA_BASE_URL);\n this._url = url.parse(`${protocol}//${hostname}:${port}`);\n }\n }\n return this._url;\n }\n\n set url (_url) {\n this._url = url.parse(_url);\n }\n\n get fullyStarted () {\n return this.started;\n }\n\n set fullyStarted (started = false) {\n this.started = started;\n }\n\n async retrieveDerivedDataPath () {\n if (this.canSkipXcodebuild) {\n return;\n }\n return await this.xcodebuild.retrieveDerivedDataPath();\n }\n\n /**\n * Reuse running WDA if it has the same bundle id with updatedWDABundleId.\n * Or reuse it if it has the default id without updatedWDABundleId.\n * Uninstall it if the method faces an exception for the above situation.\n *\n * @param {string} updatedWDABundleId BundleId you'd like to use\n */\n async setupCaching () {\n const status = await this.getStatus();\n if (!status || !status.build) {\n this.log.debug('WDA is currently not running. There is nothing to cache');\n return;\n }\n\n const {\n productBundleIdentifier,\n upgradedAt,\n } = status.build;\n // for real device\n if (util.hasValue(productBundleIdentifier) && util.hasValue(this.updatedWDABundleId) && this.updatedWDABundleId !== productBundleIdentifier) {\n this.log.info(`Will uninstall running WDA since it has different bundle id. The actual value is '${productBundleIdentifier}'.`);\n return await this.uninstall();\n }\n // for simulator\n if (util.hasValue(productBundleIdentifier) && !util.hasValue(this.updatedWDABundleId) && WDA_RUNNER_BUNDLE_ID !== productBundleIdentifier) {\n this.log.info(`Will uninstall running WDA since its bundle id is not equal to the default value ${WDA_RUNNER_BUNDLE_ID}`);\n return await this.uninstall();\n }\n\n const actualUpgradeTimestamp = await getWDAUpgradeTimestamp();\n this.log.debug(`Upgrade timestamp of the currently bundled WDA: ${actualUpgradeTimestamp}`);\n this.log.debug(`Upgrade timestamp of the WDA on the device: ${upgradedAt}`);\n if (actualUpgradeTimestamp && upgradedAt && _.toLower(`${actualUpgradeTimestamp}`) !== _.toLower(`${upgradedAt}`)) {\n this.log.info('Will uninstall running WDA since it has different version in comparison to the one ' +\n `which is bundled with appium-xcuitest-driver module (${actualUpgradeTimestamp} != ${upgradedAt})`);\n return await this.uninstall();\n }\n\n const message = util.hasValue(productBundleIdentifier)\n ? `Will reuse previously cached WDA instance at '${this.url.href}' with '${productBundleIdentifier}'`\n : `Will reuse previously cached WDA instance at '${this.url.href}'`;\n this.log.info(`${message}. Set the wdaLocalPort capability to a value different from ${this.url.port} if this is an undesired behavior.`);\n this.webDriverAgentUrl = this.url.href;\n }\n\n /**\n * Quit and uninstall running WDA.\n */\n async quitAndUninstall () {\n await this.quit();\n await this.uninstall();\n }\n}\n\nexport default WebDriverAgent;\nexport { WebDriverAgent };\n"],"mappings":"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"}
1
+ {"version":3,"file":"webdriveragent.js","names":["_lodash","_interopRequireDefault","require","_path","_url2","_bluebird","_baseDriver","_support","_logger","_noSessionProxy","_utils","_xcodebuild","_asyncLock","_teen_process","_checkDependencies","_constants","_appiumIosDevice","_strongbox","WDA_LAUNCH_TIMEOUT","WDA_AGENT_PORT","WDA_CF_BUNDLE_NAME","SHARED_RESOURCES_GUARD","AsyncLock","RECENT_MODULE_VERSION_ITEM_NAME","WebDriverAgent","constructor","xcodeVersion","args","log","_","clone","defaultLogger","device","platformVersion","platformName","iosSdkVersion","host","isRealDevice","realDevice","idb","wdaBundlePath","setWDAPaths","bootstrapPath","agentPath","wdaLocalPort","wdaRemotePort","wdaBaseUrl","WDA_BASE_URL","prebuildWDA","webDriverAgentUrl","started","wdaConnectionTimeout","useXctestrunFile","usePrebuiltWDA","derivedDataPath","mjpegServerPort","updatedWDABundleId","usePreinstalledWDA","xctestApiClient","xcodebuild","canSkipXcodebuild","XcodeBuild","showXcodeLog","xcodeConfigFile","xcodeOrgId","xcodeSigningId","keychainPath","keychainPassword","useSimpleBuildTest","launchTimeout","wdaLaunchTimeout","allowProvisioningDeviceRegistration","resultBundlePath","resultBundleVersion","bundleIdForXctest","WDA_RUNNER_BUNDLE_ID_FOR_XCTEST","BOOTSTRAP_PATH","info","path","resolve","cleanupObsoleteProcesses","obsoletePids","getPIDsListeningOnPort","url","port","cmdLine","includes","toLowerCase","udid","isEmpty","debug","length","exec","e","warn","message","isRunning","getStatus","basePath","noSessionProxy","NoSessionProxy","server","hostname","base","timeout","command","err","href","uninstall","bundleIds","getUserInstalledBundleIdsByBundleName","bundleId","removeApp","_cleanupProjectIfFresh","packageInfo","JSON","parse","fs","readFile","join","box","strongbox","name","boxItem","getItem","timestampPath","process","env","HOME","WDA_UPGRADE_TIMESTAMP_PATH","exists","createItemWithValue","version","recentModuleVersion","read","util","coerceVersion","write","compareVersions","cleanProject","launchWithPreinstalledWDA","sessionId","xctestEnv","USE_PORT","WDA_PRODUCT_BUNDLE_IDENTIFIER","MJPEG_SERVER_PORT","Xctest","start","setupProxies","status","launch","Error","synchronizationKey","normalize","acquire","resetTestProcesses","startWithIDB","init","prebuild","wdaBundleId","testBundleId","prepareWDA","runXCUITest","parseBundleId","infoPlistPath","infoPlist","plist","parsePlist","CFBundleIdentifier","fetchWDABundle","isAppInstalled","installApp","installXCTestBundle","bundleWDASim","wdaBundlePaths","glob","WDA_RUNNER_APP","absolute","isSourceFresh","existsPromises","sep","map","subPath","B","all","some","v","proxyOpts","keepAlive","jwproxy","JWProxy","proxyReqRes","bind","quit","stop","reset","_url","protocol","fullyStarted","retrieveDerivedDataPath","setupCaching","build","productBundleIdentifier","upgradedAt","hasValue","WDA_RUNNER_BUNDLE_ID","actualUpgradeTimestamp","getWDAUpgradeTimestamp","toLower","quitAndUninstall","exports","_default","default"],"sources":["../../lib/webdriveragent.js"],"sourcesContent":["import _ from 'lodash';\nimport path from 'path';\nimport url from 'url';\nimport B from 'bluebird';\nimport { JWProxy } from '@appium/base-driver';\nimport { fs, util, plist } from '@appium/support';\nimport defaultLogger from './logger';\nimport { NoSessionProxy } from './no-session-proxy';\nimport {\n getWDAUpgradeTimestamp, resetTestProcesses, getPIDsListeningOnPort, BOOTSTRAP_PATH\n} from './utils';\nimport XcodeBuild from './xcodebuild';\nimport AsyncLock from 'async-lock';\nimport { exec } from 'teen_process';\nimport { bundleWDASim } from './check-dependencies';\nimport {\n WDA_RUNNER_BUNDLE_ID, WDA_RUNNER_BUNDLE_ID_FOR_XCTEST, WDA_RUNNER_APP,\n WDA_BASE_URL, WDA_UPGRADE_TIMESTAMP_PATH\n} from './constants';\nimport {Xctest} from 'appium-ios-device';\nimport {strongbox} from '@appium/strongbox';\n\nconst WDA_LAUNCH_TIMEOUT = 60 * 1000;\nconst WDA_AGENT_PORT = 8100;\nconst WDA_CF_BUNDLE_NAME = 'WebDriverAgentRunner-Runner';\nconst SHARED_RESOURCES_GUARD = new AsyncLock();\nconst RECENT_MODULE_VERSION_ITEM_NAME = 'recentWdaModuleVersion';\n\nclass WebDriverAgent {\n constructor (xcodeVersion, args = {}, log = null) {\n this.xcodeVersion = xcodeVersion;\n\n this.args = _.clone(args);\n this.log = log ?? defaultLogger;\n\n this.device = args.device;\n this.platformVersion = args.platformVersion;\n this.platformName = args.platformName;\n this.iosSdkVersion = args.iosSdkVersion;\n this.host = args.host;\n this.isRealDevice = !!args.realDevice;\n this.idb = (args.device || {}).idb;\n this.wdaBundlePath = args.wdaBundlePath;\n\n this.setWDAPaths(args.bootstrapPath, args.agentPath);\n\n this.wdaLocalPort = args.wdaLocalPort;\n this.wdaRemotePort = args.wdaLocalPort || WDA_AGENT_PORT;\n this.wdaBaseUrl = args.wdaBaseUrl || WDA_BASE_URL;\n\n this.prebuildWDA = args.prebuildWDA;\n\n // this.args.webDriverAgentUrl guiarantees the capabilities acually\n // gave 'appium:webDriverAgentUrl' but 'this.webDriverAgentUrl'\n // could be used for caching WDA with xcodebuild.\n this.webDriverAgentUrl = args.webDriverAgentUrl;\n\n this.started = false;\n\n this.wdaConnectionTimeout = args.wdaConnectionTimeout;\n\n this.useXctestrunFile = args.useXctestrunFile;\n this.usePrebuiltWDA = args.usePrebuiltWDA;\n this.derivedDataPath = args.derivedDataPath;\n this.mjpegServerPort = args.mjpegServerPort;\n\n this.updatedWDABundleId = args.updatedWDABundleId;\n\n this.usePreinstalledWDA = args.usePreinstalledWDA;\n this.xctestApiClient = null;\n\n this.xcodebuild = this.canSkipXcodebuild\n ? null\n : new XcodeBuild(this.xcodeVersion, this.device, {\n platformVersion: this.platformVersion,\n platformName: this.platformName,\n iosSdkVersion: this.iosSdkVersion,\n agentPath: this.agentPath,\n bootstrapPath: this.bootstrapPath,\n realDevice: this.isRealDevice,\n showXcodeLog: args.showXcodeLog,\n xcodeConfigFile: args.xcodeConfigFile,\n xcodeOrgId: args.xcodeOrgId,\n xcodeSigningId: args.xcodeSigningId,\n keychainPath: args.keychainPath,\n keychainPassword: args.keychainPassword,\n useSimpleBuildTest: args.useSimpleBuildTest,\n usePrebuiltWDA: args.usePrebuiltWDA,\n updatedWDABundleId: this.updatedWDABundleId,\n launchTimeout: args.wdaLaunchTimeout || WDA_LAUNCH_TIMEOUT,\n wdaRemotePort: this.wdaRemotePort,\n useXctestrunFile: this.useXctestrunFile,\n derivedDataPath: args.derivedDataPath,\n mjpegServerPort: this.mjpegServerPort,\n allowProvisioningDeviceRegistration: args.allowProvisioningDeviceRegistration,\n resultBundlePath: args.resultBundlePath,\n resultBundleVersion: args.resultBundleVersion,\n }, this.log);\n }\n\n /**\n * Return true if the session does not need xcodebuild.\n * @returns {boolean} Whether the session needs/has xcodebuild.\n */\n get canSkipXcodebuild () {\n // Use this.args.webDriverAgentUrl to guarantee\n // the capabilities set gave the `appium:webDriverAgentUrl`.\n return this.usePreinstalledWDA || this.args.webDriverAgentUrl;\n }\n\n /**\n *\n * @returns {string} Bundle ID for Xctest.\n */\n get bundleIdForXctest () {\n return this.updatedWDABundleId ? `${this.updatedWDABundleId}.xctrunner` : WDA_RUNNER_BUNDLE_ID_FOR_XCTEST;\n }\n\n setWDAPaths (bootstrapPath, agentPath) {\n // allow the user to specify a place for WDA. This is undocumented and\n // only here for the purposes of testing development of WDA\n this.bootstrapPath = bootstrapPath || BOOTSTRAP_PATH;\n this.log.info(`Using WDA path: '${this.bootstrapPath}'`);\n\n // for backward compatibility we need to be able to specify agentPath too\n this.agentPath = agentPath || path.resolve(this.bootstrapPath, 'WebDriverAgent.xcodeproj');\n this.log.info(`Using WDA agent: '${this.agentPath}'`);\n }\n\n async cleanupObsoleteProcesses () {\n const obsoletePids = await getPIDsListeningOnPort(this.url.port,\n (cmdLine) => cmdLine.includes('/WebDriverAgentRunner') &&\n !cmdLine.toLowerCase().includes(this.device.udid.toLowerCase()));\n\n if (_.isEmpty(obsoletePids)) {\n this.log.debug(`No obsolete cached processes from previous WDA sessions ` +\n `listening on port ${this.url.port} have been found`);\n return;\n }\n\n this.log.info(`Detected ${obsoletePids.length} obsolete cached process${obsoletePids.length === 1 ? '' : 'es'} ` +\n `from previous WDA sessions. Cleaning them up`);\n try {\n await exec('kill', obsoletePids);\n } catch (e) {\n this.log.warn(`Failed to kill obsolete cached process${obsoletePids.length === 1 ? '' : 'es'} '${obsoletePids}'. ` +\n `Original error: ${e.message}`);\n }\n }\n\n /**\n * Return boolean if WDA is running or not\n * @return {boolean} True if WDA is running\n * @throws {Error} If there was invalid response code or body\n */\n async isRunning () {\n return !!(await this.getStatus());\n }\n\n get basePath () {\n if (this.url.path === '/') {\n return '';\n }\n return this.url.path || '';\n }\n\n /**\n * Return current running WDA's status like below\n * {\n * \"state\": \"success\",\n * \"os\": {\n * \"name\": \"iOS\",\n * \"version\": \"11.4\",\n * \"sdkVersion\": \"11.3\"\n * },\n * \"ios\": {\n * \"simulatorVersion\": \"11.4\",\n * \"ip\": \"172.254.99.34\"\n * },\n * \"build\": {\n * \"time\": \"Jun 24 2018 17:08:21\",\n * \"productBundleIdentifier\": \"com.facebook.WebDriverAgentRunner\"\n * }\n * }\n *\n * @return {?object} State Object\n * @throws {Error} If there was invalid response code or body\n */\n async getStatus () {\n const noSessionProxy = new NoSessionProxy({\n server: this.url.hostname,\n port: this.url.port,\n base: this.basePath,\n timeout: 3000,\n });\n try {\n return await noSessionProxy.command('/status', 'GET');\n } catch (err) {\n this.log.debug(`WDA is not listening at '${this.url.href}'`);\n return null;\n }\n }\n\n /**\n * Uninstall WDAs from the test device.\n * Over Xcode 11, multiple WDA can be in the device since Xcode 11 generates different WDA.\n * Appium does not expect multiple WDAs are running on a device.\n */\n async uninstall () {\n try {\n const bundleIds = await this.device.getUserInstalledBundleIdsByBundleName(WDA_CF_BUNDLE_NAME);\n if (_.isEmpty(bundleIds)) {\n this.log.debug('No WDAs on the device.');\n return;\n }\n\n this.log.debug(`Uninstalling WDAs: '${bundleIds}'`);\n for (const bundleId of bundleIds) {\n await this.device.removeApp(bundleId);\n }\n } catch (e) {\n this.log.debug(e);\n this.log.warn(`WebDriverAgent uninstall failed. Perhaps, it is already uninstalled? ` +\n `Original error: ${e.message}`);\n }\n }\n\n async _cleanupProjectIfFresh () {\n if (this.canSkipXcodebuild) {\n return;\n }\n\n const packageInfo = JSON.parse(await fs.readFile(path.join(BOOTSTRAP_PATH, 'package.json'), 'utf8'));\n const box = strongbox(packageInfo.name);\n let boxItem = box.getItem(RECENT_MODULE_VERSION_ITEM_NAME);\n if (!boxItem) {\n const timestampPath = path.resolve(process.env.HOME, WDA_UPGRADE_TIMESTAMP_PATH);\n if (await fs.exists(timestampPath)) {\n // TODO: It is probably a bit ugly to hardcode the recent version string,\n // TODO: hovewer it should do the job as a temporary transition trick\n // TODO: to switch from a hardcoded file path to the strongbox usage.\n try {\n boxItem = await box.createItemWithValue(RECENT_MODULE_VERSION_ITEM_NAME, '5.0.0');\n } catch (e) {\n this.log.warn(`The actual module version cannot be persisted: ${e.message}`);\n return;\n }\n } else {\n this.log.info('There is no need to perform the project cleanup. A fresh install has been detected');\n try {\n await box.createItemWithValue(RECENT_MODULE_VERSION_ITEM_NAME, packageInfo.version);\n } catch (e) {\n this.log.warn(`The actual module version cannot be persisted: ${e.message}`);\n }\n return;\n }\n }\n\n let recentModuleVersion = await boxItem.read();\n try {\n recentModuleVersion = util.coerceVersion(recentModuleVersion, true);\n } catch (e) {\n this.log.warn(`The persisted module version string has been damaged: ${e.message}`);\n this.log.info(`Updating it to '${packageInfo.version}' assuming the project clenup is not needed`);\n await boxItem.write(packageInfo.version);\n return;\n }\n\n if (util.compareVersions(recentModuleVersion, '>=', packageInfo.version)) {\n this.log.info(\n `WebDriverAgent does not need a cleanup. The project sources are up to date ` +\n `(${recentModuleVersion} >= ${packageInfo.version})`\n );\n return;\n }\n\n this.log.info(\n `Cleaning up the WebDriverAgent project after the module upgrade has happened ` +\n `(${recentModuleVersion} < ${packageInfo.version})`\n );\n try {\n await this.xcodebuild.cleanProject();\n await boxItem.write(packageInfo.version);\n } catch (e) {\n this.log.warn(`Cannot perform WebDriverAgent project cleanup. Original error: ${e.message}`);\n }\n }\n\n /**\n * Launch WDA with preinstalled package without xcodebuild.\n * @param {string} sessionId Launch WDA and establish the session with this sessionId\n * @return {?object} State Object\n */\n async launchWithPreinstalledWDA(sessionId) {\n const xctestEnv = {\n USE_PORT: this.wdaLocalPort || WDA_AGENT_PORT,\n WDA_PRODUCT_BUNDLE_IDENTIFIER: this.bundleIdForXctest\n };\n if (this.mjpegServerPort) {\n xctestEnv.MJPEG_SERVER_PORT = this.mjpegServerPort;\n }\n this.log.info('Launching WebDriverAgent on the device without xcodebuild');\n this.xctestApiClient = new Xctest(this.device.udid, this.bundleIdForXctest, null, {env: xctestEnv});\n\n await this.xctestApiClient.start();\n\n this.setupProxies(sessionId);\n const status = await this.getStatus();\n this.started = true;\n return status;\n }\n\n /**\n * Return current running WDA's status like below after launching WDA\n * {\n * \"state\": \"success\",\n * \"os\": {\n * \"name\": \"iOS\",\n * \"version\": \"11.4\",\n * \"sdkVersion\": \"11.3\"\n * },\n * \"ios\": {\n * \"simulatorVersion\": \"11.4\",\n * \"ip\": \"172.254.99.34\"\n * },\n * \"build\": {\n * \"time\": \"Jun 24 2018 17:08:21\",\n * \"productBundleIdentifier\": \"com.facebook.WebDriverAgentRunner\"\n * }\n * }\n *\n * @param {string} sessionId Launch WDA and establish the session with this sessionId\n * @return {?object} State Object\n * @throws {Error} If there was invalid response code or body\n */\n async launch (sessionId) {\n if (this.webDriverAgentUrl) {\n this.log.info(`Using provided WebdriverAgent at '${this.webDriverAgentUrl}'`);\n this.url = this.webDriverAgentUrl;\n this.setupProxies(sessionId);\n return await this.getStatus();\n }\n\n if (this.usePreinstalledWDA) {\n if (this.isRealDevice) {\n return await this.launchWithPreinstalledWDA(sessionId);\n }\n throw new Error('usePreinstalledWDA is available only for a real device.');\n }\n\n this.log.info('Launching WebDriverAgent on the device');\n\n this.setupProxies(sessionId);\n\n if (!this.useXctestrunFile && !await fs.exists(this.agentPath)) {\n throw new Error(`Trying to use WebDriverAgent project at '${this.agentPath}' but the ` +\n 'file does not exist');\n }\n\n // useXctestrunFile and usePrebuiltWDA use existing dependencies\n // It depends on user side\n if (this.idb || this.useXctestrunFile || (this.derivedDataPath && this.usePrebuiltWDA)) {\n this.log.info('Skipped WDA project cleanup according to the provided capabilities');\n } else {\n const synchronizationKey = path.normalize(this.bootstrapPath);\n await SHARED_RESOURCES_GUARD.acquire(synchronizationKey,\n async () => await this._cleanupProjectIfFresh());\n }\n\n // We need to provide WDA local port, because it might be occupied\n await resetTestProcesses(this.device.udid, !this.isRealDevice);\n\n if (this.idb) {\n return await this.startWithIDB();\n }\n\n await this.xcodebuild.init(this.noSessionProxy);\n\n // Start the xcodebuild process\n if (this.prebuildWDA) {\n await this.xcodebuild.prebuild();\n }\n return await this.xcodebuild.start();\n }\n\n async startWithIDB () {\n this.log.info('Will launch WDA with idb instead of xcodebuild since the corresponding flag is enabled');\n const {wdaBundleId, testBundleId} = await this.prepareWDA();\n const env = {\n USE_PORT: this.wdaRemotePort,\n WDA_PRODUCT_BUNDLE_IDENTIFIER: this.updatedWDABundleId,\n };\n if (this.mjpegServerPort) {\n env.MJPEG_SERVER_PORT = this.mjpegServerPort;\n }\n\n return await this.idb.runXCUITest(wdaBundleId, wdaBundleId, testBundleId, {env});\n }\n\n async parseBundleId (wdaBundlePath) {\n const infoPlistPath = path.join(wdaBundlePath, 'Info.plist');\n const infoPlist = await plist.parsePlist(await fs.readFile(infoPlistPath));\n if (!infoPlist.CFBundleIdentifier) {\n throw new Error(`Could not find bundle id in '${infoPlistPath}'`);\n }\n return infoPlist.CFBundleIdentifier;\n }\n\n async prepareWDA () {\n const wdaBundlePath = this.wdaBundlePath || await this.fetchWDABundle();\n const wdaBundleId = await this.parseBundleId(wdaBundlePath);\n if (!await this.device.isAppInstalled(wdaBundleId)) {\n await this.device.installApp(wdaBundlePath);\n }\n const testBundleId = await this.idb.installXCTestBundle(path.join(wdaBundlePath, 'PlugIns', 'WebDriverAgentRunner.xctest'));\n return {wdaBundleId, testBundleId, wdaBundlePath};\n }\n\n async fetchWDABundle () {\n if (!this.derivedDataPath) {\n return await bundleWDASim(this.xcodebuild);\n }\n const wdaBundlePaths = await fs.glob(`${this.derivedDataPath}/**/*${WDA_RUNNER_APP}/`, {\n absolute: true,\n });\n if (_.isEmpty(wdaBundlePaths)) {\n throw new Error(`Could not find the WDA bundle in '${this.derivedDataPath}'`);\n }\n return wdaBundlePaths[0];\n }\n\n async isSourceFresh () {\n const existsPromises = [\n 'Resources',\n `Resources${path.sep}WebDriverAgent.bundle`,\n ].map((subPath) => fs.exists(path.resolve(this.bootstrapPath, subPath)));\n return (await B.all(existsPromises)).some((v) => v === false);\n }\n\n setupProxies (sessionId) {\n const proxyOpts = {\n log: this.log,\n server: this.url.hostname,\n port: this.url.port,\n base: this.basePath,\n timeout: this.wdaConnectionTimeout,\n keepAlive: true,\n };\n\n this.jwproxy = new JWProxy(proxyOpts);\n this.jwproxy.sessionId = sessionId;\n this.proxyReqRes = this.jwproxy.proxyReqRes.bind(this.jwproxy);\n\n this.noSessionProxy = new NoSessionProxy(proxyOpts);\n }\n\n async quit () {\n if (this.usePreinstalledWDA) {\n if (this.xctestApiClient) {\n this.log.info('Stopping the XCTest session');\n this.xctestApiClient.stop();\n this.xctestApiClient = null;\n }\n } else if (!this.args.webDriverAgentUrl) {\n this.log.info('Shutting down sub-processes');\n await this.xcodebuild.quit();\n await this.xcodebuild.reset();\n } else {\n this.log.debug('Do not stop xcodebuild nor XCTest session ' +\n 'since the WDA session is managed by outside this driver.');\n }\n\n if (this.jwproxy) {\n this.jwproxy.sessionId = null;\n }\n\n this.started = false;\n\n if (!this.args.webDriverAgentUrl) {\n // if we populated the url ourselves (during `setupCaching` call, for instance)\n // then clean that up. If the url was supplied, we want to keep it\n this.webDriverAgentUrl = null;\n }\n }\n\n get url () {\n if (!this._url) {\n if (this.webDriverAgentUrl) {\n this._url = url.parse(this.webDriverAgentUrl);\n } else {\n const port = this.wdaLocalPort || WDA_AGENT_PORT;\n const {protocol, hostname} = url.parse(this.wdaBaseUrl || WDA_BASE_URL);\n this._url = url.parse(`${protocol}//${hostname}:${port}`);\n }\n }\n return this._url;\n }\n\n set url (_url) {\n this._url = url.parse(_url);\n }\n\n get fullyStarted () {\n return this.started;\n }\n\n set fullyStarted (started = false) {\n this.started = started;\n }\n\n async retrieveDerivedDataPath () {\n if (this.canSkipXcodebuild) {\n return;\n }\n return await this.xcodebuild.retrieveDerivedDataPath();\n }\n\n /**\n * Reuse running WDA if it has the same bundle id with updatedWDABundleId.\n * Or reuse it if it has the default id without updatedWDABundleId.\n * Uninstall it if the method faces an exception for the above situation.\n *\n * @param {string} updatedWDABundleId BundleId you'd like to use\n */\n async setupCaching () {\n const status = await this.getStatus();\n if (!status || !status.build) {\n this.log.debug('WDA is currently not running. There is nothing to cache');\n return;\n }\n\n const {\n productBundleIdentifier,\n upgradedAt,\n } = status.build;\n // for real device\n if (util.hasValue(productBundleIdentifier) && util.hasValue(this.updatedWDABundleId) && this.updatedWDABundleId !== productBundleIdentifier) {\n this.log.info(`Will uninstall running WDA since it has different bundle id. The actual value is '${productBundleIdentifier}'.`);\n return await this.uninstall();\n }\n // for simulator\n if (util.hasValue(productBundleIdentifier) && !util.hasValue(this.updatedWDABundleId) && WDA_RUNNER_BUNDLE_ID !== productBundleIdentifier) {\n this.log.info(`Will uninstall running WDA since its bundle id is not equal to the default value ${WDA_RUNNER_BUNDLE_ID}`);\n return await this.uninstall();\n }\n\n const actualUpgradeTimestamp = await getWDAUpgradeTimestamp();\n this.log.debug(`Upgrade timestamp of the currently bundled WDA: ${actualUpgradeTimestamp}`);\n this.log.debug(`Upgrade timestamp of the WDA on the device: ${upgradedAt}`);\n if (actualUpgradeTimestamp && upgradedAt && _.toLower(`${actualUpgradeTimestamp}`) !== _.toLower(`${upgradedAt}`)) {\n this.log.info('Will uninstall running WDA since it has different version in comparison to the one ' +\n `which is bundled with appium-xcuitest-driver module (${actualUpgradeTimestamp} != ${upgradedAt})`);\n return await this.uninstall();\n }\n\n const message = util.hasValue(productBundleIdentifier)\n ? `Will reuse previously cached WDA instance at '${this.url.href}' with '${productBundleIdentifier}'`\n : `Will reuse previously cached WDA instance at '${this.url.href}'`;\n this.log.info(`${message}. Set the wdaLocalPort capability to a value different from ${this.url.port} if this is an undesired behavior.`);\n this.webDriverAgentUrl = this.url.href;\n }\n\n /**\n * Quit and uninstall running WDA.\n */\n async quitAndUninstall () {\n await this.quit();\n await this.uninstall();\n }\n}\n\nexport default WebDriverAgent;\nexport { WebDriverAgent };\n"],"mappings":";;;;;;;;AAAA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,KAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,KAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,SAAA,GAAAJ,sBAAA,CAAAC,OAAA;AACA,IAAAI,WAAA,GAAAJ,OAAA;AACA,IAAAK,QAAA,GAAAL,OAAA;AACA,IAAAM,OAAA,GAAAP,sBAAA,CAAAC,OAAA;AACA,IAAAO,eAAA,GAAAP,OAAA;AACA,IAAAQ,MAAA,GAAAR,OAAA;AAGA,IAAAS,WAAA,GAAAV,sBAAA,CAAAC,OAAA;AACA,IAAAU,UAAA,GAAAX,sBAAA,CAAAC,OAAA;AACA,IAAAW,aAAA,GAAAX,OAAA;AACA,IAAAY,kBAAA,GAAAZ,OAAA;AACA,IAAAa,UAAA,GAAAb,OAAA;AAIA,IAAAc,gBAAA,GAAAd,OAAA;AACA,IAAAe,UAAA,GAAAf,OAAA;AAEA,MAAMgB,kBAAkB,GAAG,EAAE,GAAG,IAAI;AACpC,MAAMC,cAAc,GAAG,IAAI;AAC3B,MAAMC,kBAAkB,GAAG,6BAA6B;AACxD,MAAMC,sBAAsB,GAAG,IAAIC,kBAAS,CAAC,CAAC;AAC9C,MAAMC,+BAA+B,GAAG,wBAAwB;AAEhE,MAAMC,cAAc,CAAC;EACnBC,WAAWA,CAAEC,YAAY,EAAEC,IAAI,GAAG,CAAC,CAAC,EAAEC,GAAG,GAAG,IAAI,EAAE;IAChD,IAAI,CAACF,YAAY,GAAGA,YAAY;IAEhC,IAAI,CAACC,IAAI,GAAGE,eAAC,CAACC,KAAK,CAACH,IAAI,CAAC;IACzB,IAAI,CAACC,GAAG,GAAGA,GAAG,IAAIG,eAAa;IAE/B,IAAI,CAACC,MAAM,GAAGL,IAAI,CAACK,MAAM;IACzB,IAAI,CAACC,eAAe,GAAGN,IAAI,CAACM,eAAe;IAC3C,IAAI,CAACC,YAAY,GAAGP,IAAI,CAACO,YAAY;IACrC,IAAI,CAACC,aAAa,GAAGR,IAAI,CAACQ,aAAa;IACvC,IAAI,CAACC,IAAI,GAAGT,IAAI,CAACS,IAAI;IACrB,IAAI,CAACC,YAAY,GAAG,CAAC,CAACV,IAAI,CAACW,UAAU;IACrC,IAAI,CAACC,GAAG,GAAG,CAACZ,IAAI,CAACK,MAAM,IAAI,CAAC,CAAC,EAAEO,GAAG;IAClC,IAAI,CAACC,aAAa,GAAGb,IAAI,CAACa,aAAa;IAEvC,IAAI,CAACC,WAAW,CAACd,IAAI,CAACe,aAAa,EAAEf,IAAI,CAACgB,SAAS,CAAC;IAEpD,IAAI,CAACC,YAAY,GAAGjB,IAAI,CAACiB,YAAY;IACrC,IAAI,CAACC,aAAa,GAAGlB,IAAI,CAACiB,YAAY,IAAIzB,cAAc;IACxD,IAAI,CAAC2B,UAAU,GAAGnB,IAAI,CAACmB,UAAU,IAAIC,uBAAY;IAEjD,IAAI,CAACC,WAAW,GAAGrB,IAAI,CAACqB,WAAW;IAKnC,IAAI,CAACC,iBAAiB,GAAGtB,IAAI,CAACsB,iBAAiB;IAE/C,IAAI,CAACC,OAAO,GAAG,KAAK;IAEpB,IAAI,CAACC,oBAAoB,GAAGxB,IAAI,CAACwB,oBAAoB;IAErD,IAAI,CAACC,gBAAgB,GAAGzB,IAAI,CAACyB,gBAAgB;IAC7C,IAAI,CAACC,cAAc,GAAG1B,IAAI,CAAC0B,cAAc;IACzC,IAAI,CAACC,eAAe,GAAG3B,IAAI,CAAC2B,eAAe;IAC3C,IAAI,CAACC,eAAe,GAAG5B,IAAI,CAAC4B,eAAe;IAE3C,IAAI,CAACC,kBAAkB,GAAG7B,IAAI,CAAC6B,kBAAkB;IAEjD,IAAI,CAACC,kBAAkB,GAAG9B,IAAI,CAAC8B,kBAAkB;IACjD,IAAI,CAACC,eAAe,GAAG,IAAI;IAE3B,IAAI,CAACC,UAAU,GAAG,IAAI,CAACC,iBAAiB,GACtC,IAAI,GACJ,IAAIC,mBAAU,CAAC,IAAI,CAACnC,YAAY,EAAE,IAAI,CAACM,MAAM,EAAE;MAC7CC,eAAe,EAAE,IAAI,CAACA,eAAe;MACrCC,YAAY,EAAE,IAAI,CAACA,YAAY;MAC/BC,aAAa,EAAE,IAAI,CAACA,aAAa;MACjCQ,SAAS,EAAE,IAAI,CAACA,SAAS;MACzBD,aAAa,EAAE,IAAI,CAACA,aAAa;MACjCJ,UAAU,EAAE,IAAI,CAACD,YAAY;MAC7ByB,YAAY,EAAEnC,IAAI,CAACmC,YAAY;MAC/BC,eAAe,EAAEpC,IAAI,CAACoC,eAAe;MACrCC,UAAU,EAAErC,IAAI,CAACqC,UAAU;MAC3BC,cAAc,EAAEtC,IAAI,CAACsC,cAAc;MACnCC,YAAY,EAAEvC,IAAI,CAACuC,YAAY;MAC/BC,gBAAgB,EAAExC,IAAI,CAACwC,gBAAgB;MACvCC,kBAAkB,EAAEzC,IAAI,CAACyC,kBAAkB;MAC3Cf,cAAc,EAAE1B,IAAI,CAAC0B,cAAc;MACnCG,kBAAkB,EAAE,IAAI,CAACA,kBAAkB;MAC3Ca,aAAa,EAAE1C,IAAI,CAAC2C,gBAAgB,IAAIpD,kBAAkB;MAC1D2B,aAAa,EAAE,IAAI,CAACA,aAAa;MACjCO,gBAAgB,EAAE,IAAI,CAACA,gBAAgB;MACvCE,eAAe,EAAE3B,IAAI,CAAC2B,eAAe;MACrCC,eAAe,EAAE,IAAI,CAACA,eAAe;MACrCgB,mCAAmC,EAAE5C,IAAI,CAAC4C,mCAAmC;MAC7EC,gBAAgB,EAAE7C,IAAI,CAAC6C,gBAAgB;MACvCC,mBAAmB,EAAE9C,IAAI,CAAC8C;IAC5B,CAAC,EAAE,IAAI,CAAC7C,GAAG,CAAC;EAChB;EAMA,IAAIgC,iBAAiBA,CAAA,EAAI;IAGvB,OAAO,IAAI,CAACH,kBAAkB,IAAI,IAAI,CAAC9B,IAAI,CAACsB,iBAAiB;EAC/D;EAMA,IAAIyB,iBAAiBA,CAAA,EAAI;IACvB,OAAO,IAAI,CAAClB,kBAAkB,GAAI,GAAE,IAAI,CAACA,kBAAmB,YAAW,GAAGmB,0CAA+B;EAC3G;EAEAlC,WAAWA,CAAEC,aAAa,EAAEC,SAAS,EAAE;IAGrC,IAAI,CAACD,aAAa,GAAGA,aAAa,IAAIkC,qBAAc;IACpD,IAAI,CAAChD,GAAG,CAACiD,IAAI,CAAE,oBAAmB,IAAI,CAACnC,aAAc,GAAE,CAAC;IAGxD,IAAI,CAACC,SAAS,GAAGA,SAAS,IAAImC,aAAI,CAACC,OAAO,CAAC,IAAI,CAACrC,aAAa,EAAE,0BAA0B,CAAC;IAC1F,IAAI,CAACd,GAAG,CAACiD,IAAI,CAAE,qBAAoB,IAAI,CAAClC,SAAU,GAAE,CAAC;EACvD;EAEA,MAAMqC,wBAAwBA,CAAA,EAAI;IAChC,MAAMC,YAAY,GAAG,MAAM,IAAAC,6BAAsB,EAAC,IAAI,CAACC,GAAG,CAACC,IAAI,EAC5DC,OAAO,IAAKA,OAAO,CAACC,QAAQ,CAAC,uBAAuB,CAAC,IACpD,CAACD,OAAO,CAACE,WAAW,CAAC,CAAC,CAACD,QAAQ,CAAC,IAAI,CAACtD,MAAM,CAACwD,IAAI,CAACD,WAAW,CAAC,CAAC,CAAC,CAAC;IAEpE,IAAI1D,eAAC,CAAC4D,OAAO,CAACR,YAAY,CAAC,EAAE;MAC3B,IAAI,CAACrD,GAAG,CAAC8D,KAAK,CAAE,0DAAyD,GACtE,qBAAoB,IAAI,CAACP,GAAG,CAACC,IAAK,kBAAiB,CAAC;MACvD;IACF;IAEA,IAAI,CAACxD,GAAG,CAACiD,IAAI,CAAE,YAAWI,YAAY,CAACU,MAAO,2BAA0BV,YAAY,CAACU,MAAM,KAAK,CAAC,GAAG,EAAE,GAAG,IAAK,GAAE,GAC7G,8CAA6C,CAAC;IACjD,IAAI;MACF,MAAM,IAAAC,kBAAI,EAAC,MAAM,EAAEX,YAAY,CAAC;IAClC,CAAC,CAAC,OAAOY,CAAC,EAAE;MACV,IAAI,CAACjE,GAAG,CAACkE,IAAI,CAAE,yCAAwCb,YAAY,CAACU,MAAM,KAAK,CAAC,GAAG,EAAE,GAAG,IAAK,KAAIV,YAAa,KAAI,GAC/G,mBAAkBY,CAAC,CAACE,OAAQ,EAAC,CAAC;IACnC;EACF;EAOA,MAAMC,SAASA,CAAA,EAAI;IACjB,OAAO,CAAC,EAAE,MAAM,IAAI,CAACC,SAAS,CAAC,CAAC,CAAC;EACnC;EAEA,IAAIC,QAAQA,CAAA,EAAI;IACd,IAAI,IAAI,CAACf,GAAG,CAACL,IAAI,KAAK,GAAG,EAAE;MACzB,OAAO,EAAE;IACX;IACA,OAAO,IAAI,CAACK,GAAG,CAACL,IAAI,IAAI,EAAE;EAC5B;EAwBA,MAAMmB,SAASA,CAAA,EAAI;IACjB,MAAME,cAAc,GAAG,IAAIC,8BAAc,CAAC;MACxCC,MAAM,EAAE,IAAI,CAAClB,GAAG,CAACmB,QAAQ;MACzBlB,IAAI,EAAE,IAAI,CAACD,GAAG,CAACC,IAAI;MACnBmB,IAAI,EAAE,IAAI,CAACL,QAAQ;MACnBM,OAAO,EAAE;IACX,CAAC,CAAC;IACF,IAAI;MACF,OAAO,MAAML,cAAc,CAACM,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC;IACvD,CAAC,CAAC,OAAOC,GAAG,EAAE;MACZ,IAAI,CAAC9E,GAAG,CAAC8D,KAAK,CAAE,4BAA2B,IAAI,CAACP,GAAG,CAACwB,IAAK,GAAE,CAAC;MAC5D,OAAO,IAAI;IACb;EACF;EAOA,MAAMC,SAASA,CAAA,EAAI;IACjB,IAAI;MACF,MAAMC,SAAS,GAAG,MAAM,IAAI,CAAC7E,MAAM,CAAC8E,qCAAqC,CAAC1F,kBAAkB,CAAC;MAC7F,IAAIS,eAAC,CAAC4D,OAAO,CAACoB,SAAS,CAAC,EAAE;QACxB,IAAI,CAACjF,GAAG,CAAC8D,KAAK,CAAC,wBAAwB,CAAC;QACxC;MACF;MAEA,IAAI,CAAC9D,GAAG,CAAC8D,KAAK,CAAE,uBAAsBmB,SAAU,GAAE,CAAC;MACnD,KAAK,MAAME,QAAQ,IAAIF,SAAS,EAAE;QAChC,MAAM,IAAI,CAAC7E,MAAM,CAACgF,SAAS,CAACD,QAAQ,CAAC;MACvC;IACF,CAAC,CAAC,OAAOlB,CAAC,EAAE;MACV,IAAI,CAACjE,GAAG,CAAC8D,KAAK,CAACG,CAAC,CAAC;MACjB,IAAI,CAACjE,GAAG,CAACkE,IAAI,CAAE,uEAAsE,GAClF,mBAAkBD,CAAC,CAACE,OAAQ,EAAC,CAAC;IACnC;EACF;EAEA,MAAMkB,sBAAsBA,CAAA,EAAI;IAC9B,IAAI,IAAI,CAACrD,iBAAiB,EAAE;MAC1B;IACF;IAEA,MAAMsD,WAAW,GAAGC,IAAI,CAACC,KAAK,CAAC,MAAMC,WAAE,CAACC,QAAQ,CAACxC,aAAI,CAACyC,IAAI,CAAC3C,qBAAc,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC;IACpG,MAAM4C,GAAG,GAAG,IAAAC,oBAAS,EAACP,WAAW,CAACQ,IAAI,CAAC;IACvC,IAAIC,OAAO,GAAGH,GAAG,CAACI,OAAO,CAACrG,+BAA+B,CAAC;IAC1D,IAAI,CAACoG,OAAO,EAAE;MACZ,MAAME,aAAa,GAAG/C,aAAI,CAACC,OAAO,CAAC+C,OAAO,CAACC,GAAG,CAACC,IAAI,EAAEC,qCAA0B,CAAC;MAChF,IAAI,MAAMZ,WAAE,CAACa,MAAM,CAACL,aAAa,CAAC,EAAE;QAIlC,IAAI;UACFF,OAAO,GAAG,MAAMH,GAAG,CAACW,mBAAmB,CAAC5G,+BAA+B,EAAE,OAAO,CAAC;QACnF,CAAC,CAAC,OAAOsE,CAAC,EAAE;UACV,IAAI,CAACjE,GAAG,CAACkE,IAAI,CAAE,kDAAiDD,CAAC,CAACE,OAAQ,EAAC,CAAC;UAC5E;QACF;MACF,CAAC,MAAM;QACL,IAAI,CAACnE,GAAG,CAACiD,IAAI,CAAC,oFAAoF,CAAC;QACnG,IAAI;UACF,MAAM2C,GAAG,CAACW,mBAAmB,CAAC5G,+BAA+B,EAAE2F,WAAW,CAACkB,OAAO,CAAC;QACrF,CAAC,CAAC,OAAOvC,CAAC,EAAE;UACV,IAAI,CAACjE,GAAG,CAACkE,IAAI,CAAE,kDAAiDD,CAAC,CAACE,OAAQ,EAAC,CAAC;QAC9E;QACA;MACF;IACF;IAEA,IAAIsC,mBAAmB,GAAG,MAAMV,OAAO,CAACW,IAAI,CAAC,CAAC;IAC9C,IAAI;MACFD,mBAAmB,GAAGE,aAAI,CAACC,aAAa,CAACH,mBAAmB,EAAE,IAAI,CAAC;IACrE,CAAC,CAAC,OAAOxC,CAAC,EAAE;MACV,IAAI,CAACjE,GAAG,CAACkE,IAAI,CAAE,yDAAwDD,CAAC,CAACE,OAAQ,EAAC,CAAC;MACnF,IAAI,CAACnE,GAAG,CAACiD,IAAI,CAAE,mBAAkBqC,WAAW,CAACkB,OAAQ,6CAA4C,CAAC;MAClG,MAAMT,OAAO,CAACc,KAAK,CAACvB,WAAW,CAACkB,OAAO,CAAC;MACxC;IACF;IAEA,IAAIG,aAAI,CAACG,eAAe,CAACL,mBAAmB,EAAE,IAAI,EAAEnB,WAAW,CAACkB,OAAO,CAAC,EAAE;MACxE,IAAI,CAACxG,GAAG,CAACiD,IAAI,CACV,6EAA4E,GAC5E,IAAGwD,mBAAoB,OAAMnB,WAAW,CAACkB,OAAQ,GACpD,CAAC;MACD;IACF;IAEA,IAAI,CAACxG,GAAG,CAACiD,IAAI,CACV,+EAA8E,GAC9E,IAAGwD,mBAAoB,MAAKnB,WAAW,CAACkB,OAAQ,GACnD,CAAC;IACD,IAAI;MACF,MAAM,IAAI,CAACzE,UAAU,CAACgF,YAAY,CAAC,CAAC;MACpC,MAAMhB,OAAO,CAACc,KAAK,CAACvB,WAAW,CAACkB,OAAO,CAAC;IAC1C,CAAC,CAAC,OAAOvC,CAAC,EAAE;MACV,IAAI,CAACjE,GAAG,CAACkE,IAAI,CAAE,kEAAiED,CAAC,CAACE,OAAQ,EAAC,CAAC;IAC9F;EACF;EAOA,MAAM6C,yBAAyBA,CAACC,SAAS,EAAE;IACzC,MAAMC,SAAS,GAAG;MAChBC,QAAQ,EAAE,IAAI,CAACnG,YAAY,IAAIzB,cAAc;MAC7C6H,6BAA6B,EAAE,IAAI,CAACtE;IACtC,CAAC;IACD,IAAI,IAAI,CAACnB,eAAe,EAAE;MACxBuF,SAAS,CAACG,iBAAiB,GAAG,IAAI,CAAC1F,eAAe;IACpD;IACA,IAAI,CAAC3B,GAAG,CAACiD,IAAI,CAAC,2DAA2D,CAAC;IAC1E,IAAI,CAACnB,eAAe,GAAG,IAAIwF,uBAAM,CAAC,IAAI,CAAClH,MAAM,CAACwD,IAAI,EAAE,IAAI,CAACd,iBAAiB,EAAE,IAAI,EAAE;MAACqD,GAAG,EAAEe;IAAS,CAAC,CAAC;IAEnG,MAAM,IAAI,CAACpF,eAAe,CAACyF,KAAK,CAAC,CAAC;IAElC,IAAI,CAACC,YAAY,CAACP,SAAS,CAAC;IAC5B,MAAMQ,MAAM,GAAG,MAAM,IAAI,CAACpD,SAAS,CAAC,CAAC;IACrC,IAAI,CAAC/C,OAAO,GAAG,IAAI;IACnB,OAAOmG,MAAM;EACf;EAyBA,MAAMC,MAAMA,CAAET,SAAS,EAAE;IACvB,IAAI,IAAI,CAAC5F,iBAAiB,EAAE;MAC1B,IAAI,CAACrB,GAAG,CAACiD,IAAI,CAAE,qCAAoC,IAAI,CAAC5B,iBAAkB,GAAE,CAAC;MAC7E,IAAI,CAACkC,GAAG,GAAG,IAAI,CAAClC,iBAAiB;MACjC,IAAI,CAACmG,YAAY,CAACP,SAAS,CAAC;MAC5B,OAAO,MAAM,IAAI,CAAC5C,SAAS,CAAC,CAAC;IAC/B;IAEA,IAAI,IAAI,CAACxC,kBAAkB,EAAE;MAC3B,IAAI,IAAI,CAACpB,YAAY,EAAE;QACrB,OAAO,MAAM,IAAI,CAACuG,yBAAyB,CAACC,SAAS,CAAC;MACxD;MACA,MAAM,IAAIU,KAAK,CAAC,yDAAyD,CAAC;IAC5E;IAEA,IAAI,CAAC3H,GAAG,CAACiD,IAAI,CAAC,wCAAwC,CAAC;IAEvD,IAAI,CAACuE,YAAY,CAACP,SAAS,CAAC;IAE5B,IAAI,CAAC,IAAI,CAACzF,gBAAgB,IAAI,EAAC,MAAMiE,WAAE,CAACa,MAAM,CAAC,IAAI,CAACvF,SAAS,CAAC,GAAE;MAC9D,MAAM,IAAI4G,KAAK,CAAE,4CAA2C,IAAI,CAAC5G,SAAU,YAAW,GACtE,qBAAqB,CAAC;IACxC;IAIA,IAAI,IAAI,CAACJ,GAAG,IAAI,IAAI,CAACa,gBAAgB,IAAK,IAAI,CAACE,eAAe,IAAI,IAAI,CAACD,cAAe,EAAE;MACtF,IAAI,CAACzB,GAAG,CAACiD,IAAI,CAAC,oEAAoE,CAAC;IACrF,CAAC,MAAM;MACL,MAAM2E,kBAAkB,GAAG1E,aAAI,CAAC2E,SAAS,CAAC,IAAI,CAAC/G,aAAa,CAAC;MAC7D,MAAMrB,sBAAsB,CAACqI,OAAO,CAACF,kBAAkB,EACrD,YAAY,MAAM,IAAI,CAACvC,sBAAsB,CAAC,CAAC,CAAC;IACpD;IAGA,MAAM,IAAA0C,yBAAkB,EAAC,IAAI,CAAC3H,MAAM,CAACwD,IAAI,EAAE,CAAC,IAAI,CAACnD,YAAY,CAAC;IAE9D,IAAI,IAAI,CAACE,GAAG,EAAE;MACZ,OAAO,MAAM,IAAI,CAACqH,YAAY,CAAC,CAAC;IAClC;IAEA,MAAM,IAAI,CAACjG,UAAU,CAACkG,IAAI,CAAC,IAAI,CAAC1D,cAAc,CAAC;IAG/C,IAAI,IAAI,CAACnD,WAAW,EAAE;MACpB,MAAM,IAAI,CAACW,UAAU,CAACmG,QAAQ,CAAC,CAAC;IAClC;IACA,OAAO,MAAM,IAAI,CAACnG,UAAU,CAACwF,KAAK,CAAC,CAAC;EACtC;EAEA,MAAMS,YAAYA,CAAA,EAAI;IACpB,IAAI,CAAChI,GAAG,CAACiD,IAAI,CAAC,wFAAwF,CAAC;IACvG,MAAM;MAACkF,WAAW;MAAEC;IAAY,CAAC,GAAG,MAAM,IAAI,CAACC,UAAU,CAAC,CAAC;IAC3D,MAAMlC,GAAG,GAAG;MACVgB,QAAQ,EAAE,IAAI,CAAClG,aAAa;MAC5BmG,6BAA6B,EAAE,IAAI,CAACxF;IACtC,CAAC;IACD,IAAI,IAAI,CAACD,eAAe,EAAE;MACxBwE,GAAG,CAACkB,iBAAiB,GAAG,IAAI,CAAC1F,eAAe;IAC9C;IAEA,OAAO,MAAM,IAAI,CAAChB,GAAG,CAAC2H,WAAW,CAACH,WAAW,EAAEA,WAAW,EAAEC,YAAY,EAAE;MAACjC;IAAG,CAAC,CAAC;EAClF;EAEA,MAAMoC,aAAaA,CAAE3H,aAAa,EAAE;IAClC,MAAM4H,aAAa,GAAGtF,aAAI,CAACyC,IAAI,CAAC/E,aAAa,EAAE,YAAY,CAAC;IAC5D,MAAM6H,SAAS,GAAG,MAAMC,cAAK,CAACC,UAAU,CAAC,MAAMlD,WAAE,CAACC,QAAQ,CAAC8C,aAAa,CAAC,CAAC;IAC1E,IAAI,CAACC,SAAS,CAACG,kBAAkB,EAAE;MACjC,MAAM,IAAIjB,KAAK,CAAE,gCAA+Ba,aAAc,GAAE,CAAC;IACnE;IACA,OAAOC,SAAS,CAACG,kBAAkB;EACrC;EAEA,MAAMP,UAAUA,CAAA,EAAI;IAClB,MAAMzH,aAAa,GAAG,IAAI,CAACA,aAAa,KAAI,MAAM,IAAI,CAACiI,cAAc,CAAC,CAAC;IACvE,MAAMV,WAAW,GAAG,MAAM,IAAI,CAACI,aAAa,CAAC3H,aAAa,CAAC;IAC3D,IAAI,EAAC,MAAM,IAAI,CAACR,MAAM,CAAC0I,cAAc,CAACX,WAAW,CAAC,GAAE;MAClD,MAAM,IAAI,CAAC/H,MAAM,CAAC2I,UAAU,CAACnI,aAAa,CAAC;IAC7C;IACA,MAAMwH,YAAY,GAAG,MAAM,IAAI,CAACzH,GAAG,CAACqI,mBAAmB,CAAC9F,aAAI,CAACyC,IAAI,CAAC/E,aAAa,EAAE,SAAS,EAAE,6BAA6B,CAAC,CAAC;IAC3H,OAAO;MAACuH,WAAW;MAAEC,YAAY;MAAExH;IAAa,CAAC;EACnD;EAEA,MAAMiI,cAAcA,CAAA,EAAI;IACtB,IAAI,CAAC,IAAI,CAACnH,eAAe,EAAE;MACzB,OAAO,MAAM,IAAAuH,+BAAY,EAAC,IAAI,CAAClH,UAAU,CAAC;IAC5C;IACA,MAAMmH,cAAc,GAAG,MAAMzD,WAAE,CAAC0D,IAAI,CAAE,GAAE,IAAI,CAACzH,eAAgB,QAAO0H,yBAAe,GAAE,EAAE;MACrFC,QAAQ,EAAE;IACZ,CAAC,CAAC;IACF,IAAIpJ,eAAC,CAAC4D,OAAO,CAACqF,cAAc,CAAC,EAAE;MAC7B,MAAM,IAAIvB,KAAK,CAAE,qCAAoC,IAAI,CAACjG,eAAgB,GAAE,CAAC;IAC/E;IACA,OAAOwH,cAAc,CAAC,CAAC,CAAC;EAC1B;EAEA,MAAMI,aAAaA,CAAA,EAAI;IACrB,MAAMC,cAAc,GAAG,CACrB,WAAW,EACV,YAAWrG,aAAI,CAACsG,GAAI,uBAAsB,CAC5C,CAACC,GAAG,CAAEC,OAAO,IAAKjE,WAAE,CAACa,MAAM,CAACpD,aAAI,CAACC,OAAO,CAAC,IAAI,CAACrC,aAAa,EAAE4I,OAAO,CAAC,CAAC,CAAC;IACxE,OAAO,CAAC,MAAMC,iBAAC,CAACC,GAAG,CAACL,cAAc,CAAC,EAAEM,IAAI,CAAEC,CAAC,IAAKA,CAAC,KAAK,KAAK,CAAC;EAC/D;EAEAtC,YAAYA,CAAEP,SAAS,EAAE;IACvB,MAAM8C,SAAS,GAAG;MAChB/J,GAAG,EAAE,IAAI,CAACA,GAAG;MACbyE,MAAM,EAAE,IAAI,CAAClB,GAAG,CAACmB,QAAQ;MACzBlB,IAAI,EAAE,IAAI,CAACD,GAAG,CAACC,IAAI;MACnBmB,IAAI,EAAE,IAAI,CAACL,QAAQ;MACnBM,OAAO,EAAE,IAAI,CAACrD,oBAAoB;MAClCyI,SAAS,EAAE;IACb,CAAC;IAED,IAAI,CAACC,OAAO,GAAG,IAAIC,mBAAO,CAACH,SAAS,CAAC;IACrC,IAAI,CAACE,OAAO,CAAChD,SAAS,GAAGA,SAAS;IAClC,IAAI,CAACkD,WAAW,GAAG,IAAI,CAACF,OAAO,CAACE,WAAW,CAACC,IAAI,CAAC,IAAI,CAACH,OAAO,CAAC;IAE9D,IAAI,CAAC1F,cAAc,GAAG,IAAIC,8BAAc,CAACuF,SAAS,CAAC;EACrD;EAEA,MAAMM,IAAIA,CAAA,EAAI;IACZ,IAAI,IAAI,CAACxI,kBAAkB,EAAE;MAC3B,IAAI,IAAI,CAACC,eAAe,EAAE;QACxB,IAAI,CAAC9B,GAAG,CAACiD,IAAI,CAAC,6BAA6B,CAAC;QAC5C,IAAI,CAACnB,eAAe,CAACwI,IAAI,CAAC,CAAC;QAC3B,IAAI,CAACxI,eAAe,GAAG,IAAI;MAC7B;IACF,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC/B,IAAI,CAACsB,iBAAiB,EAAE;MACvC,IAAI,CAACrB,GAAG,CAACiD,IAAI,CAAC,6BAA6B,CAAC;MAC5C,MAAM,IAAI,CAAClB,UAAU,CAACsI,IAAI,CAAC,CAAC;MAC5B,MAAM,IAAI,CAACtI,UAAU,CAACwI,KAAK,CAAC,CAAC;IAC/B,CAAC,MAAM;MACL,IAAI,CAACvK,GAAG,CAAC8D,KAAK,CAAC,4CAA4C,GACzD,0DAA0D,CAAC;IAC/D;IAEA,IAAI,IAAI,CAACmG,OAAO,EAAE;MAChB,IAAI,CAACA,OAAO,CAAChD,SAAS,GAAG,IAAI;IAC/B;IAEA,IAAI,CAAC3F,OAAO,GAAG,KAAK;IAEpB,IAAI,CAAC,IAAI,CAACvB,IAAI,CAACsB,iBAAiB,EAAE;MAGhC,IAAI,CAACA,iBAAiB,GAAG,IAAI;IAC/B;EACF;EAEA,IAAIkC,GAAGA,CAAA,EAAI;IACT,IAAI,CAAC,IAAI,CAACiH,IAAI,EAAE;MACd,IAAI,IAAI,CAACnJ,iBAAiB,EAAE;QAC1B,IAAI,CAACmJ,IAAI,GAAGjH,aAAG,CAACiC,KAAK,CAAC,IAAI,CAACnE,iBAAiB,CAAC;MAC/C,CAAC,MAAM;QACL,MAAMmC,IAAI,GAAG,IAAI,CAACxC,YAAY,IAAIzB,cAAc;QAChD,MAAM;UAACkL,QAAQ;UAAE/F;QAAQ,CAAC,GAAGnB,aAAG,CAACiC,KAAK,CAAC,IAAI,CAACtE,UAAU,IAAIC,uBAAY,CAAC;QACvE,IAAI,CAACqJ,IAAI,GAAGjH,aAAG,CAACiC,KAAK,CAAE,GAAEiF,QAAS,KAAI/F,QAAS,IAAGlB,IAAK,EAAC,CAAC;MAC3D;IACF;IACA,OAAO,IAAI,CAACgH,IAAI;EAClB;EAEA,IAAIjH,GAAGA,CAAEiH,IAAI,EAAE;IACb,IAAI,CAACA,IAAI,GAAGjH,aAAG,CAACiC,KAAK,CAACgF,IAAI,CAAC;EAC7B;EAEA,IAAIE,YAAYA,CAAA,EAAI;IAClB,OAAO,IAAI,CAACpJ,OAAO;EACrB;EAEA,IAAIoJ,YAAYA,CAAEpJ,OAAO,GAAG,KAAK,EAAE;IACjC,IAAI,CAACA,OAAO,GAAGA,OAAO;EACxB;EAEA,MAAMqJ,uBAAuBA,CAAA,EAAI;IAC/B,IAAI,IAAI,CAAC3I,iBAAiB,EAAE;MAC1B;IACF;IACA,OAAO,MAAM,IAAI,CAACD,UAAU,CAAC4I,uBAAuB,CAAC,CAAC;EACxD;EASA,MAAMC,YAAYA,CAAA,EAAI;IACpB,MAAMnD,MAAM,GAAG,MAAM,IAAI,CAACpD,SAAS,CAAC,CAAC;IACrC,IAAI,CAACoD,MAAM,IAAI,CAACA,MAAM,CAACoD,KAAK,EAAE;MAC5B,IAAI,CAAC7K,GAAG,CAAC8D,KAAK,CAAC,yDAAyD,CAAC;MACzE;IACF;IAEA,MAAM;MACJgH,uBAAuB;MACvBC;IACF,CAAC,GAAGtD,MAAM,CAACoD,KAAK;IAEhB,IAAIlE,aAAI,CAACqE,QAAQ,CAACF,uBAAuB,CAAC,IAAInE,aAAI,CAACqE,QAAQ,CAAC,IAAI,CAACpJ,kBAAkB,CAAC,IAAI,IAAI,CAACA,kBAAkB,KAAKkJ,uBAAuB,EAAE;MAC3I,IAAI,CAAC9K,GAAG,CAACiD,IAAI,CAAE,qFAAoF6H,uBAAwB,IAAG,CAAC;MAC/H,OAAO,MAAM,IAAI,CAAC9F,SAAS,CAAC,CAAC;IAC/B;IAEA,IAAI2B,aAAI,CAACqE,QAAQ,CAACF,uBAAuB,CAAC,IAAI,CAACnE,aAAI,CAACqE,QAAQ,CAAC,IAAI,CAACpJ,kBAAkB,CAAC,IAAIqJ,+BAAoB,KAAKH,uBAAuB,EAAE;MACzI,IAAI,CAAC9K,GAAG,CAACiD,IAAI,CAAE,oFAAmFgI,+BAAqB,EAAC,CAAC;MACzH,OAAO,MAAM,IAAI,CAACjG,SAAS,CAAC,CAAC;IAC/B;IAEA,MAAMkG,sBAAsB,GAAG,MAAM,IAAAC,6BAAsB,EAAC,CAAC;IAC7D,IAAI,CAACnL,GAAG,CAAC8D,KAAK,CAAE,mDAAkDoH,sBAAuB,EAAC,CAAC;IAC3F,IAAI,CAAClL,GAAG,CAAC8D,KAAK,CAAE,+CAA8CiH,UAAW,EAAC,CAAC;IAC3E,IAAIG,sBAAsB,IAAIH,UAAU,IAAI9K,eAAC,CAACmL,OAAO,CAAE,GAAEF,sBAAuB,EAAC,CAAC,KAAKjL,eAAC,CAACmL,OAAO,CAAE,GAAEL,UAAW,EAAC,CAAC,EAAE;MACjH,IAAI,CAAC/K,GAAG,CAACiD,IAAI,CAAC,qFAAqF,GAChG,wDAAuDiI,sBAAuB,OAAMH,UAAW,GAAE,CAAC;MACrG,OAAO,MAAM,IAAI,CAAC/F,SAAS,CAAC,CAAC;IAC/B;IAEA,MAAMb,OAAO,GAAGwC,aAAI,CAACqE,QAAQ,CAACF,uBAAuB,CAAC,GACjD,iDAAgD,IAAI,CAACvH,GAAG,CAACwB,IAAK,WAAU+F,uBAAwB,GAAE,GAClG,iDAAgD,IAAI,CAACvH,GAAG,CAACwB,IAAK,GAAE;IACrE,IAAI,CAAC/E,GAAG,CAACiD,IAAI,CAAE,GAAEkB,OAAQ,+DAA8D,IAAI,CAACZ,GAAG,CAACC,IAAK,oCAAmC,CAAC;IACzI,IAAI,CAACnC,iBAAiB,GAAG,IAAI,CAACkC,GAAG,CAACwB,IAAI;EACxC;EAKA,MAAMsG,gBAAgBA,CAAA,EAAI;IACxB,MAAM,IAAI,CAAChB,IAAI,CAAC,CAAC;IACjB,MAAM,IAAI,CAACrF,SAAS,CAAC,CAAC;EACxB;AACF;AAACsG,OAAA,CAAA1L,cAAA,GAAAA,cAAA;AAAA,IAAA2L,QAAA,GAEc3L,cAAc;AAAA0L,OAAA,CAAAE,OAAA,GAAAD,QAAA"}
@@ -240,7 +240,7 @@ class WebDriverAgent {
240
240
  // TODO: hovewer it should do the job as a temporary transition trick
241
241
  // TODO: to switch from a hardcoded file path to the strongbox usage.
242
242
  try {
243
- boxItem = await box.createItemWithContents(RECENT_MODULE_VERSION_ITEM_NAME, '5.0.0');
243
+ boxItem = await box.createItemWithValue(RECENT_MODULE_VERSION_ITEM_NAME, '5.0.0');
244
244
  } catch (e) {
245
245
  this.log.warn(`The actual module version cannot be persisted: ${e.message}`);
246
246
  return;
@@ -248,7 +248,7 @@ class WebDriverAgent {
248
248
  } else {
249
249
  this.log.info('There is no need to perform the project cleanup. A fresh install has been detected');
250
250
  try {
251
- await box.createItemWithContents(RECENT_MODULE_VERSION_ITEM_NAME, packageInfo.version);
251
+ await box.createItemWithValue(RECENT_MODULE_VERSION_ITEM_NAME, packageInfo.version);
252
252
  } catch (e) {
253
253
  this.log.warn(`The actual module version cannot be persisted: ${e.message}`);
254
254
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "appium-webdriveragent",
3
- "version": "5.5.0",
3
+ "version": "5.5.2",
4
4
  "description": "Package bundling WebDriverAgent",
5
5
  "main": "./build/index.js",
6
6
  "scripts": {
@@ -78,7 +78,7 @@
78
78
  "lint-staged": "^13.0.3",
79
79
  "mocha": "^10.0.0",
80
80
  "pre-commit": "^1.2.2",
81
- "prettier": "^2.7.1",
81
+ "prettier": "^3.0.0",
82
82
  "semantic-release": "^20.0.2",
83
83
  "sinon": "^15.0.0"
84
84
  },