appium-webdriveragent 4.10.2 → 4.10.4

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.
@@ -8,7 +8,7 @@ exports.default = exports.XcodeBuild = void 0;
8
8
  require("source-map-support/register");
9
9
  var _asyncbox = require("asyncbox");
10
10
  var _teen_process = require("teen_process");
11
- var _support = require("appium/support");
11
+ var _support = require("@appium/support");
12
12
  var _logger = _interopRequireDefault(require("./logger"));
13
13
  var _bluebird = _interopRequireDefault(require("bluebird"));
14
14
  var _utils = require("./utils");
@@ -325,4 +325,4 @@ class XcodeBuild {
325
325
  exports.XcodeBuild = XcodeBuild;
326
326
  var _default = XcodeBuild;
327
327
  exports.default = _default;
328
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJERUZBVUxUX1NJR05JTkdfSUQiLCJQUkVCVUlMRF9ERUxBWSIsIlJVTk5FUl9TQ0hFTUVfSU9TIiwiTElCX1NDSEVNRV9JT1MiLCJFUlJPUl9XUklUSU5HX0FUVEFDSE1FTlQiLCJFUlJPUl9DT1BZSU5HX0FUVEFDSE1FTlQiLCJJR05PUkVEX0VSUk9SUyIsIlJVTk5FUl9TQ0hFTUVfVFYiLCJMSUJfU0NIRU1FX1RWIiwieGNvZGVMb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiLCJYY29kZUJ1aWxkIiwiY29uc3RydWN0b3IiLCJ4Y29kZVZlcnNpb24iLCJkZXZpY2UiLCJhcmdzIiwibG9nIiwiZGVmYXVsdExvZ2dlciIsInJlYWxEZXZpY2UiLCJhZ2VudFBhdGgiLCJib290c3RyYXBQYXRoIiwicGxhdGZvcm1WZXJzaW9uIiwicGxhdGZvcm1OYW1lIiwiaW9zU2RrVmVyc2lvbiIsInNob3dYY29kZUxvZyIsInhjb2RlQ29uZmlnRmlsZSIsInhjb2RlT3JnSWQiLCJ4Y29kZVNpZ25pbmdJZCIsImtleWNoYWluUGF0aCIsImtleWNoYWluUGFzc3dvcmQiLCJwcmVidWlsZFdEQSIsInVzZVByZWJ1aWx0V0RBIiwidXNlU2ltcGxlQnVpbGRUZXN0IiwidXNlWGN0ZXN0cnVuRmlsZSIsImxhdW5jaFRpbWVvdXQiLCJ3ZGFSZW1vdGVQb3J0IiwidXBkYXRlZFdEQUJ1bmRsZUlkIiwiZGVyaXZlZERhdGFQYXRoIiwibWpwZWdTZXJ2ZXJQb3J0IiwicHJlYnVpbGREZWxheSIsIl8iLCJpc051bWJlciIsImFsbG93UHJvdmlzaW9uaW5nRGV2aWNlUmVnaXN0cmF0aW9uIiwicmVzdWx0QnVuZGxlUGF0aCIsInJlc3VsdEJ1bmRsZVZlcnNpb24iLCJpbml0Iiwibm9TZXNzaW9uUHJveHkiLCJkZXZpdmVJbmZvIiwiaXNSZWFsRGV2aWNlIiwidWRpZCIsInhjdGVzdHJ1bkZpbGVQYXRoIiwic2V0WGN0ZXN0cnVuRmlsZSIsInJlc2V0UHJvamVjdEZpbGUiLCJ1cGRhdGVQcm9qZWN0RmlsZSIsInJldHJpZXZlRGVyaXZlZERhdGFQYXRoIiwiX2Rlcml2ZWREYXRhUGF0aFByb21pc2UiLCJzdGRvdXQiLCJleGVjIiwiZXJyIiwid2FybiIsIm1lc3NhZ2UiLCJwYXR0ZXJuIiwibWF0Y2giLCJ0cnVuY2F0ZSIsImxlbmd0aCIsImRlYnVnIiwicGF0aCIsImRpcm5hbWUiLCJub3JtYWxpemUiLCJyZXNldCIsInByZWJ1aWxkIiwic3RhcnQiLCJ4Y29kZWJ1aWxkIiwiQiIsImRlbGF5IiwiY2xlYW5Qcm9qZWN0IiwidG1wSXNUdk9TIiwiaXNUdk9TIiwibGliU2NoZW1lIiwicnVubmVyU2NoZW1lIiwic2NoZW1lIiwiZ2V0Q29tbWFuZCIsImJ1aWxkT25seSIsImNtZCIsImJ1aWxkQ21kIiwidGVzdENtZCIsInB1c2giLCJ2ZXJzaW9uTWF0Y2giLCJSZWdFeHAiLCJwcm9jZXNzIiwiZW52IiwiQVBQSVVNX1hDVUlURVNUX1RSRUFUX1dBUk5JTkdTX0FTX0VSUk9SUyIsImNyZWF0ZVN1YlByb2Nlc3MiLCJzZXRSZWFsRGV2aWNlU2VjdXJpdHkiLCJnZW5lcmF0ZVhjb2RlQ29uZmlnRmlsZSIsImpvaW4iLCJPYmplY3QiLCJhc3NpZ24iLCJVU0VfUE9SVCIsIldEQV9QUk9EVUNUX0JVTkRMRV9JREVOVElGSUVSIiwiV0RBX1JVTk5FUl9CVU5ETEVfSUQiLCJNSlBFR19TRVJWRVJfUE9SVCIsInVwZ3JhZGVUaW1lc3RhbXAiLCJnZXRXREFVcGdyYWRlVGltZXN0YW1wIiwiVVBHUkFERV9USU1FU1RBTVAiLCJTdWJQcm9jZXNzIiwiY3dkIiwiZGV0YWNoZWQiLCJzdGRpbyIsImxvZ1hjb2RlT3V0cHV0IiwibG9nTXNnIiwiaXNCb29sZWFuIiwib24iLCJzdGRlcnIiLCJvdXQiLCJpbmNsdWRlcyIsImxvZ0xvY2F0aW9uIiwiZmlyc3QiLCJyZW1vdmUiLCJ0cmltIiwic3BsaXQiLCJ2Iiwic3RhcnRzV2l0aCIsInNlcCIsImlnbm9yZUVycm9yIiwic29tZSIsIngiLCJfd2RhX2Vycm9yX29jY3VycmVkIiwibGluZSIsIkVPTCIsImVycm9yIiwiX3dkYV9lcnJvcl9tZXNzYWdlIiwicmVzb2x2ZSIsInJlamVjdCIsImNvZGUiLCJzaWduYWwiLCJkYXRhIiwiZnMiLCJyZWFkRmlsZSIsInByb2Nlc3NFeGl0ZWQiLCJFcnJvciIsInRpbWVyIiwidGltaW5nIiwiVGltZXIiLCJzdGF0dXMiLCJ3YWl0Rm9yU3RhcnQiLCJtc2ciLCJjdXJyZW50U3RhdHVzIiwicmV0cmllcyIsInBhcnNlSW50IiwicmV0cnlJbnRlcnZhbCIsInByb3h5VGltZW91dCIsInRpbWVvdXQiLCJjb21tYW5kIiwiaW9zIiwiaXAiLCJhZ2VudFVybCIsIkpTT04iLCJzdHJpbmdpZnkiLCJnZXREdXJhdGlvbiIsImFzTWlsbGlTZWNvbmRzIiwidG9GaXhlZCIsInF1aXQiLCJraWxsUHJvY2VzcyJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi94Y29kZWJ1aWxkLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJldHJ5SW50ZXJ2YWwgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyBTdWJQcm9jZXNzLCBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCB7IGZzLCBsb2dnZXIsIHRpbWluZyB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBkZWZhdWx0TG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7XG4gIHNldFJlYWxEZXZpY2VTZWN1cml0eSwgZ2VuZXJhdGVYY29kZUNvbmZpZ0ZpbGUsIHNldFhjdGVzdHJ1bkZpbGUsXG4gIHVwZGF0ZVByb2plY3RGaWxlLCByZXNldFByb2plY3RGaWxlLCBraWxsUHJvY2VzcyxcbiAgZ2V0V0RBVXBncmFkZVRpbWVzdGFtcCwgaXNUdk9TIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBFT0wgfSBmcm9tICdvcyc7XG5pbXBvcnQgeyBXREFfUlVOTkVSX0JVTkRMRV9JRCB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuXG5jb25zdCBERUZBVUxUX1NJR05JTkdfSUQgPSAnaVBob25lIERldmVsb3Blcic7XG5jb25zdCBQUkVCVUlMRF9ERUxBWSA9IDA7XG5jb25zdCBSVU5ORVJfU0NIRU1FX0lPUyA9ICdXZWJEcml2ZXJBZ2VudFJ1bm5lcic7XG5jb25zdCBMSUJfU0NIRU1FX0lPUyA9ICdXZWJEcml2ZXJBZ2VudExpYic7XG5cbmNvbnN0IEVSUk9SX1dSSVRJTkdfQVRUQUNITUVOVCA9ICdFcnJvciB3cml0aW5nIGF0dGFjaG1lbnQgZGF0YSB0byBmaWxlJztcbmNvbnN0IEVSUk9SX0NPUFlJTkdfQVRUQUNITUVOVCA9ICdFcnJvciBjb3B5aW5nIHRlc3RpbmcgYXR0YWNobWVudCc7XG5jb25zdCBJR05PUkVEX0VSUk9SUyA9IFtcbiAgRVJST1JfV1JJVElOR19BVFRBQ0hNRU5ULFxuICBFUlJPUl9DT1BZSU5HX0FUVEFDSE1FTlQsXG4gICdGYWlsZWQgdG8gcmVtb3ZlIHNjcmVlbnNob3QgYXQgcGF0aCcsXG5dO1xuXG5jb25zdCBSVU5ORVJfU0NIRU1FX1RWID0gJ1dlYkRyaXZlckFnZW50UnVubmVyX3R2T1MnO1xuY29uc3QgTElCX1NDSEVNRV9UViA9ICdXZWJEcml2ZXJBZ2VudExpYl90dk9TJztcblxuY29uc3QgeGNvZGVMb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKCdYY29kZScpO1xuXG5cbmNsYXNzIFhjb2RlQnVpbGQge1xuICBjb25zdHJ1Y3RvciAoeGNvZGVWZXJzaW9uLCBkZXZpY2UsIGFyZ3MgPSB7fSwgbG9nID0gbnVsbCkge1xuICAgIHRoaXMueGNvZGVWZXJzaW9uID0geGNvZGVWZXJzaW9uO1xuXG4gICAgdGhpcy5kZXZpY2UgPSBkZXZpY2U7XG4gICAgdGhpcy5sb2cgPSBsb2cgPz8gZGVmYXVsdExvZ2dlcjtcblxuICAgIHRoaXMucmVhbERldmljZSA9IGFyZ3MucmVhbERldmljZTtcblxuICAgIHRoaXMuYWdlbnRQYXRoID0gYXJncy5hZ2VudFBhdGg7XG4gICAgdGhpcy5ib290c3RyYXBQYXRoID0gYXJncy5ib290c3RyYXBQYXRoO1xuXG4gICAgdGhpcy5wbGF0Zm9ybVZlcnNpb24gPSBhcmdzLnBsYXRmb3JtVmVyc2lvbjtcbiAgICB0aGlzLnBsYXRmb3JtTmFtZSA9IGFyZ3MucGxhdGZvcm1OYW1lO1xuICAgIHRoaXMuaW9zU2RrVmVyc2lvbiA9IGFyZ3MuaW9zU2RrVmVyc2lvbjtcblxuICAgIHRoaXMuc2hvd1hjb2RlTG9nID0gYXJncy5zaG93WGNvZGVMb2c7XG5cbiAgICB0aGlzLnhjb2RlQ29uZmlnRmlsZSA9IGFyZ3MueGNvZGVDb25maWdGaWxlO1xuICAgIHRoaXMueGNvZGVPcmdJZCA9IGFyZ3MueGNvZGVPcmdJZDtcbiAgICB0aGlzLnhjb2RlU2lnbmluZ0lkID0gYXJncy54Y29kZVNpZ25pbmdJZCB8fCBERUZBVUxUX1NJR05JTkdfSUQ7XG4gICAgdGhpcy5rZXljaGFpblBhdGggPSBhcmdzLmtleWNoYWluUGF0aDtcbiAgICB0aGlzLmtleWNoYWluUGFzc3dvcmQgPSBhcmdzLmtleWNoYWluUGFzc3dvcmQ7XG5cbiAgICB0aGlzLnByZWJ1aWxkV0RBID0gYXJncy5wcmVidWlsZFdEQTtcbiAgICB0aGlzLnVzZVByZWJ1aWx0V0RBID0gYXJncy51c2VQcmVidWlsdFdEQTtcbiAgICB0aGlzLnVzZVNpbXBsZUJ1aWxkVGVzdCA9IGFyZ3MudXNlU2ltcGxlQnVpbGRUZXN0O1xuXG4gICAgdGhpcy51c2VYY3Rlc3RydW5GaWxlID0gYXJncy51c2VYY3Rlc3RydW5GaWxlO1xuXG4gICAgdGhpcy5sYXVuY2hUaW1lb3V0ID0gYXJncy5sYXVuY2hUaW1lb3V0O1xuXG4gICAgdGhpcy53ZGFSZW1vdGVQb3J0ID0gYXJncy53ZGFSZW1vdGVQb3J0O1xuXG4gICAgdGhpcy51cGRhdGVkV0RBQnVuZGxlSWQgPSBhcmdzLnVwZGF0ZWRXREFCdW5kbGVJZDtcbiAgICB0aGlzLmRlcml2ZWREYXRhUGF0aCA9IGFyZ3MuZGVyaXZlZERhdGFQYXRoO1xuXG4gICAgdGhpcy5tanBlZ1NlcnZlclBvcnQgPSBhcmdzLm1qcGVnU2VydmVyUG9ydDtcblxuICAgIHRoaXMucHJlYnVpbGREZWxheSA9IF8uaXNOdW1iZXIoYXJncy5wcmVidWlsZERlbGF5KSA/IGFyZ3MucHJlYnVpbGREZWxheSA6IFBSRUJVSUxEX0RFTEFZO1xuXG4gICAgdGhpcy5hbGxvd1Byb3Zpc2lvbmluZ0RldmljZVJlZ2lzdHJhdGlvbiA9IGFyZ3MuYWxsb3dQcm92aXNpb25pbmdEZXZpY2VSZWdpc3RyYXRpb247XG5cbiAgICB0aGlzLnJlc3VsdEJ1bmRsZVBhdGggPSBhcmdzLnJlc3VsdEJ1bmRsZVBhdGg7XG4gICAgdGhpcy5yZXN1bHRCdW5kbGVWZXJzaW9uID0gYXJncy5yZXN1bHRCdW5kbGVWZXJzaW9uO1xuICB9XG5cbiAgYXN5bmMgaW5pdCAobm9TZXNzaW9uUHJveHkpIHtcbiAgICB0aGlzLm5vU2Vzc2lvblByb3h5ID0gbm9TZXNzaW9uUHJveHk7XG5cbiAgICBpZiAodGhpcy51c2VYY3Rlc3RydW5GaWxlKSB7XG4gICAgICBjb25zdCBkZXZpdmVJbmZvID0ge1xuICAgICAgICBpc1JlYWxEZXZpY2U6IHRoaXMucmVhbERldmljZSxcbiAgICAgICAgdWRpZDogdGhpcy5kZXZpY2UudWRpZCxcbiAgICAgICAgcGxhdGZvcm1WZXJzaW9uOiB0aGlzLnBsYXRmb3JtVmVyc2lvbixcbiAgICAgICAgcGxhdGZvcm1OYW1lOiB0aGlzLnBsYXRmb3JtTmFtZVxuICAgICAgfTtcbiAgICAgIHRoaXMueGN0ZXN0cnVuRmlsZVBhdGggPSBhd2FpdCBzZXRYY3Rlc3RydW5GaWxlKGRldml2ZUluZm8sIHRoaXMuaW9zU2RrVmVyc2lvbiwgdGhpcy5ib290c3RyYXBQYXRoLCB0aGlzLndkYVJlbW90ZVBvcnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGlmIG5lY2Vzc2FyeSwgdXBkYXRlIHRoZSBidW5kbGVJZCB0byB1c2VyJ3Mgc3BlY2lmaWNhdGlvblxuICAgIGlmICh0aGlzLnJlYWxEZXZpY2UpIHtcbiAgICAgIC8vIEluIGNhc2UgdGhlIHByb2plY3Qgc3RpbGwgaGFzIHRoZSB1c2VyIHNwZWNpZmljIGJ1bmRsZSBJRCwgcmVzZXQgdGhlIHByb2plY3QgZmlsZSBmaXJzdC5cbiAgICAgIC8vIC0gV2UgZG8gdGhpcyByZXNldCBldmVuIGlmIHVwZGF0ZWRXREFCdW5kbGVJZCBpcyBub3Qgc3BlY2lmaWVkLFxuICAgICAgLy8gICBzaW5jZSB0aGUgcHJldmlvdXMgdXBkYXRlZFdEQUJ1bmRsZUlkIHRlc3QgaGFzIGdlbmVyYXRlZCB0aGUgdXNlciBzcGVjaWZpYyBidW5kbGUgSUQgcHJvamVjdCBmaWxlLlxuICAgICAgLy8gLSBXZSBkb24ndCBjYWxsIHJlc2V0UHJvamVjdEZpbGUgZm9yIHNpbXVsYXRvcixcbiAgICAgIC8vICAgc2luY2Ugc2ltdWxhdG9yIHRlc3QgcnVuIHdpbGwgd29yayB3aXRoIGFueSB1c2VyIHNwZWNpZmljIGJ1bmRsZSBJRC5cbiAgICAgIGF3YWl0IHJlc2V0UHJvamVjdEZpbGUodGhpcy5hZ2VudFBhdGgpO1xuICAgICAgaWYgKHRoaXMudXBkYXRlZFdEQUJ1bmRsZUlkKSB7XG4gICAgICAgIGF3YWl0IHVwZGF0ZVByb2plY3RGaWxlKHRoaXMuYWdlbnRQYXRoLCB0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcmV0cmlldmVEZXJpdmVkRGF0YVBhdGggKCkge1xuICAgIGlmICh0aGlzLmRlcml2ZWREYXRhUGF0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGVyaXZlZERhdGFQYXRoO1xuICAgIH1cblxuICAgIC8vIGF2b2lkIHJhY2UgY29uZGl0aW9uc1xuICAgIGlmICh0aGlzLl9kZXJpdmVkRGF0YVBhdGhQcm9taXNlKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5fZGVyaXZlZERhdGFQYXRoUHJvbWlzZTtcbiAgICB9XG5cbiAgICB0aGlzLl9kZXJpdmVkRGF0YVBhdGhQcm9taXNlID0gKGFzeW5jICgpID0+IHtcbiAgICAgIGxldCBzdGRvdXQ7XG4gICAgICB0cnkge1xuICAgICAgICAoe3N0ZG91dH0gPSBhd2FpdCBleGVjKCd4Y29kZWJ1aWxkJywgWyctcHJvamVjdCcsIHRoaXMuYWdlbnRQYXRoLCAnLXNob3dCdWlsZFNldHRpbmdzJ10pKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBDYW5ub3QgcmV0cmlldmUgV0RBIGJ1aWxkIHNldHRpbmdzLiBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwYXR0ZXJuID0gL15cXHMqQlVJTERfRElSXFxzKz1cXHMrKFxcLy4qKS9tO1xuICAgICAgY29uc3QgbWF0Y2ggPSBwYXR0ZXJuLmV4ZWMoc3Rkb3V0KTtcbiAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihgQ2Fubm90IHBhcnNlIFdEQSBidWlsZCBkaXIgZnJvbSAke18udHJ1bmNhdGUoc3Rkb3V0LCB7bGVuZ3RoOiAzMDB9KX1gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5sb2cuZGVidWcoYFBhcnNlZCBCVUlMRF9ESVIgY29uZmlndXJhdGlvbiB2YWx1ZTogJyR7bWF0Y2hbMV19J2ApO1xuICAgICAgLy8gRGVyaXZlZCBkYXRhIHJvb3QgaXMgdHdvIGxldmVscyBoaWdoZXIgb3ZlciB0aGUgYnVpbGQgZGlyXG4gICAgICB0aGlzLmRlcml2ZWREYXRhUGF0aCA9IHBhdGguZGlybmFtZShwYXRoLmRpcm5hbWUocGF0aC5ub3JtYWxpemUobWF0Y2hbMV0pKSk7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgR290IGRlcml2ZWQgZGF0YSByb290OiAnJHt0aGlzLmRlcml2ZWREYXRhUGF0aH0nYCk7XG4gICAgICByZXR1cm4gdGhpcy5kZXJpdmVkRGF0YVBhdGg7XG4gICAgfSkoKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fZGVyaXZlZERhdGFQYXRoUHJvbWlzZTtcbiAgfVxuXG4gIGFzeW5jIHJlc2V0ICgpIHtcbiAgICAvLyBpZiBuZWNlc3NhcnksIHJlc2V0IHRoZSBidW5kbGVJZCB0byBvcmlnaW5hbCB2YWx1ZVxuICAgIGlmICh0aGlzLnJlYWxEZXZpY2UgJiYgdGhpcy51cGRhdGVkV0RBQnVuZGxlSWQpIHtcbiAgICAgIGF3YWl0IHJlc2V0UHJvamVjdEZpbGUodGhpcy5hZ2VudFBhdGgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHByZWJ1aWxkICgpIHtcbiAgICAvLyBmaXJzdCBkbyBhIGJ1aWxkIHBoYXNlXG4gICAgdGhpcy5sb2cuZGVidWcoJ1ByZS1idWlsZGluZyBXREEgYmVmb3JlIGxhdW5jaGluZyB0ZXN0Jyk7XG4gICAgdGhpcy51c2VQcmVidWlsdFdEQSA9IHRydWU7XG4gICAgYXdhaXQgdGhpcy5zdGFydCh0cnVlKTtcblxuICAgIHRoaXMueGNvZGVidWlsZCA9IG51bGw7XG5cbiAgICAvLyBwYXVzZSBhIG1vbWVudFxuICAgIGF3YWl0IEIuZGVsYXkodGhpcy5wcmVidWlsZERlbGF5KTtcbiAgfVxuXG4gIGFzeW5jIGNsZWFuUHJvamVjdCAoKSB7XG4gICAgY29uc3QgdG1wSXNUdk9TID0gaXNUdk9TKHRoaXMucGxhdGZvcm1OYW1lKTtcbiAgICBjb25zdCBsaWJTY2hlbWUgPSB0bXBJc1R2T1MgPyBMSUJfU0NIRU1FX1RWIDogTElCX1NDSEVNRV9JT1M7XG4gICAgY29uc3QgcnVubmVyU2NoZW1lID0gdG1wSXNUdk9TID8gUlVOTkVSX1NDSEVNRV9UViA6IFJVTk5FUl9TQ0hFTUVfSU9TO1xuXG4gICAgZm9yIChjb25zdCBzY2hlbWUgb2YgW2xpYlNjaGVtZSwgcnVubmVyU2NoZW1lXSkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYENsZWFuaW5nIHRoZSBwcm9qZWN0IHNjaGVtZSAnJHtzY2hlbWV9JyB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIGxlZnRvdmVycyBmcm9tIHByZXZpb3VzIGluc3RhbGxzYCk7XG4gICAgICBhd2FpdCBleGVjKCd4Y29kZWJ1aWxkJywgW1xuICAgICAgICAnY2xlYW4nLFxuICAgICAgICAnLXByb2plY3QnLCB0aGlzLmFnZW50UGF0aCxcbiAgICAgICAgJy1zY2hlbWUnLCBzY2hlbWUsXG4gICAgICBdKTtcbiAgICB9XG4gIH1cblxuICBnZXRDb21tYW5kIChidWlsZE9ubHkgPSBmYWxzZSkge1xuICAgIGxldCBjbWQgPSAneGNvZGVidWlsZCc7XG4gICAgbGV0IGFyZ3M7XG5cbiAgICAvLyBmaWd1cmUgb3V0IHRoZSB0YXJnZXRzIGZvciB4Y29kZWJ1aWxkXG4gICAgY29uc3QgW2J1aWxkQ21kLCB0ZXN0Q21kXSA9IHRoaXMudXNlU2ltcGxlQnVpbGRUZXN0ID8gWydidWlsZCcsICd0ZXN0J10gOiBbJ2J1aWxkLWZvci10ZXN0aW5nJywgJ3Rlc3Qtd2l0aG91dC1idWlsZGluZyddO1xuICAgIGlmIChidWlsZE9ubHkpIHtcbiAgICAgIGFyZ3MgPSBbYnVpbGRDbWRdO1xuICAgIH0gZWxzZSBpZiAodGhpcy51c2VQcmVidWlsdFdEQSB8fCB0aGlzLnVzZVhjdGVzdHJ1bkZpbGUpIHtcbiAgICAgIGFyZ3MgPSBbdGVzdENtZF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGFyZ3MgPSBbYnVpbGRDbWQsIHRlc3RDbWRdO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmFsbG93UHJvdmlzaW9uaW5nRGV2aWNlUmVnaXN0cmF0aW9uKSB7XG4gICAgICAvLyBUbyAtYWxsb3dQcm92aXNpb25pbmdEZXZpY2VSZWdpc3RyYXRpb24gZmxhZyB0YWtlcyBlZmZlY3QsIC1hbGxvd1Byb3Zpc2lvbmluZ1VwZGF0ZXMgbmVlZHMgdG8gYmUgcGFzc2VkIGFzIHdlbGwuXG4gICAgICBhcmdzLnB1c2goJy1hbGxvd1Byb3Zpc2lvbmluZ1VwZGF0ZXMnLCAnLWFsbG93UHJvdmlzaW9uaW5nRGV2aWNlUmVnaXN0cmF0aW9uJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVzdWx0QnVuZGxlUGF0aCkge1xuICAgICAgYXJncy5wdXNoKCctcmVzdWx0QnVuZGxlUGF0aCcsIHRoaXMucmVzdWx0QnVuZGxlUGF0aCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVzdWx0QnVuZGxlVmVyc2lvbikge1xuICAgICAgYXJncy5wdXNoKCctcmVzdWx0QnVuZGxlVmVyc2lvbicsIHRoaXMucmVzdWx0QnVuZGxlVmVyc2lvbik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudXNlWGN0ZXN0cnVuRmlsZSkge1xuICAgICAgYXJncy5wdXNoKCcteGN0ZXN0cnVuJywgdGhpcy54Y3Rlc3RydW5GaWxlUGF0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJ1bm5lclNjaGVtZSA9IGlzVHZPUyh0aGlzLnBsYXRmb3JtTmFtZSkgPyBSVU5ORVJfU0NIRU1FX1RWIDogUlVOTkVSX1NDSEVNRV9JT1M7XG4gICAgICBhcmdzLnB1c2goJy1wcm9qZWN0JywgdGhpcy5hZ2VudFBhdGgsICctc2NoZW1lJywgcnVubmVyU2NoZW1lKTtcbiAgICAgIGlmICh0aGlzLmRlcml2ZWREYXRhUGF0aCkge1xuICAgICAgICBhcmdzLnB1c2goJy1kZXJpdmVkRGF0YVBhdGgnLCB0aGlzLmRlcml2ZWREYXRhUGF0aCk7XG4gICAgICB9XG4gICAgfVxuICAgIGFyZ3MucHVzaCgnLWRlc3RpbmF0aW9uJywgYGlkPSR7dGhpcy5kZXZpY2UudWRpZH1gKTtcblxuICAgIGNvbnN0IHZlcnNpb25NYXRjaCA9IG5ldyBSZWdFeHAoL14oXFxkKylcXC4oXFxkKykvKS5leGVjKHRoaXMucGxhdGZvcm1WZXJzaW9uKTtcbiAgICBpZiAodmVyc2lvbk1hdGNoKSB7XG4gICAgICBhcmdzLnB1c2goYElQSE9ORU9TX0RFUExPWU1FTlRfVEFSR0VUPSR7dmVyc2lvbk1hdGNoWzFdfS4ke3ZlcnNpb25NYXRjaFsyXX1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2cud2FybihgQ2Fubm90IHBhcnNlIG1ham9yIGFuZCBtaW5vciB2ZXJzaW9uIG51bWJlcnMgZnJvbSBwbGF0Zm9ybVZlcnNpb24gXCIke3RoaXMucGxhdGZvcm1WZXJzaW9ufVwiLiBgICtcbiAgICAgICAgJ1dpbGwgYnVpbGQgZm9yIHRoZSBkZWZhdWx0IHBsYXRmb3JtIGluc3RlYWQnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZWFsRGV2aWNlICYmIHRoaXMueGNvZGVDb25maWdGaWxlKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgVXNpbmcgWGNvZGUgY29uZmlndXJhdGlvbiBmaWxlOiAnJHt0aGlzLnhjb2RlQ29uZmlnRmlsZX0nYCk7XG4gICAgICBhcmdzLnB1c2goJy14Y2NvbmZpZycsIHRoaXMueGNvZGVDb25maWdGaWxlKTtcbiAgICB9XG5cbiAgICBpZiAoIXByb2Nlc3MuZW52LkFQUElVTV9YQ1VJVEVTVF9UUkVBVF9XQVJOSU5HU19BU19FUlJPUlMpIHtcbiAgICAgIC8vIFRoaXMgc29tZXRpbWVzIGhlbHBzIHRvIHN1cnZpdmUgWGNvZGUgdXBkYXRlc1xuICAgICAgYXJncy5wdXNoKCdHQ0NfVFJFQVRfV0FSTklOR1NfQVNfRVJST1JTPTAnKTtcbiAgICB9XG5cbiAgICAvLyBCZWxvdyBvcHRpb24gc2xpZ2h0bHkgcmVkdWNlcyBidWlsZCB0aW1lIGluIGRlYnVnIGJ1aWxkXG4gICAgLy8gd2l0aCBwcmV2ZW50aW5nIHRvIGdlbmVyYXRlIGAvSW5kZXgvRGF0YVN0b3JlYCB3aGljaCBpcyB1c2VkIGJ5IGRldmVsb3BtZW50XG4gICAgYXJncy5wdXNoKCdDT01QSUxFUl9JTkRFWF9TVE9SRV9FTkFCTEU9Tk8nKTtcblxuICAgIHJldHVybiB7Y21kLCBhcmdzfTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVN1YlByb2Nlc3MgKGJ1aWxkT25seSA9IGZhbHNlKSB7XG4gICAgaWYgKCF0aGlzLnVzZVhjdGVzdHJ1bkZpbGUgJiYgdGhpcy5yZWFsRGV2aWNlKSB7XG4gICAgICBpZiAodGhpcy5rZXljaGFpblBhdGggJiYgdGhpcy5rZXljaGFpblBhc3N3b3JkKSB7XG4gICAgICAgIGF3YWl0IHNldFJlYWxEZXZpY2VTZWN1cml0eSh0aGlzLmtleWNoYWluUGF0aCwgdGhpcy5rZXljaGFpblBhc3N3b3JkKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnhjb2RlT3JnSWQgJiYgdGhpcy54Y29kZVNpZ25pbmdJZCAmJiAhdGhpcy54Y29kZUNvbmZpZ0ZpbGUpIHtcbiAgICAgICAgdGhpcy54Y29kZUNvbmZpZ0ZpbGUgPSBhd2FpdCBnZW5lcmF0ZVhjb2RlQ29uZmlnRmlsZSh0aGlzLnhjb2RlT3JnSWQsIHRoaXMueGNvZGVTaWduaW5nSWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHtjbWQsIGFyZ3N9ID0gdGhpcy5nZXRDb21tYW5kKGJ1aWxkT25seSk7XG4gICAgdGhpcy5sb2cuZGVidWcoYEJlZ2lubmluZyAke2J1aWxkT25seSA/ICdidWlsZCcgOiAndGVzdCd9IHdpdGggY29tbWFuZCAnJHtjbWR9ICR7YXJncy5qb2luKCcgJyl9JyBgICtcbiAgICAgIGBpbiBkaXJlY3RvcnkgJyR7dGhpcy5ib290c3RyYXBQYXRofSdgKTtcbiAgICBjb25zdCBlbnYgPSBPYmplY3QuYXNzaWduKHt9LCBwcm9jZXNzLmVudiwge1xuICAgICAgVVNFX1BPUlQ6IHRoaXMud2RhUmVtb3RlUG9ydCxcbiAgICAgIFdEQV9QUk9EVUNUX0JVTkRMRV9JREVOVElGSUVSOiB0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCB8fCBXREFfUlVOTkVSX0JVTkRMRV9JRCxcbiAgICB9KTtcbiAgICBpZiAodGhpcy5tanBlZ1NlcnZlclBvcnQpIHtcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vV2ViRHJpdmVyQWdlbnQvcHVsbC8xMDVcbiAgICAgIGVudi5NSlBFR19TRVJWRVJfUE9SVCA9IHRoaXMubWpwZWdTZXJ2ZXJQb3J0O1xuICAgIH1cbiAgICBjb25zdCB1cGdyYWRlVGltZXN0YW1wID0gYXdhaXQgZ2V0V0RBVXBncmFkZVRpbWVzdGFtcCh0aGlzLmJvb3RzdHJhcFBhdGgpO1xuICAgIGlmICh1cGdyYWRlVGltZXN0YW1wKSB7XG4gICAgICBlbnYuVVBHUkFERV9USU1FU1RBTVAgPSB1cGdyYWRlVGltZXN0YW1wO1xuICAgIH1cbiAgICBjb25zdCB4Y29kZWJ1aWxkID0gbmV3IFN1YlByb2Nlc3MoY21kLCBhcmdzLCB7XG4gICAgICBjd2Q6IHRoaXMuYm9vdHN0cmFwUGF0aCxcbiAgICAgIGVudixcbiAgICAgIGRldGFjaGVkOiB0cnVlLFxuICAgICAgc3RkaW86IFsnaWdub3JlJywgJ3BpcGUnLCAncGlwZSddLFxuICAgIH0pO1xuXG4gICAgbGV0IGxvZ1hjb2RlT3V0cHV0ID0gISF0aGlzLnNob3dYY29kZUxvZztcbiAgICBjb25zdCBsb2dNc2cgPSBfLmlzQm9vbGVhbih0aGlzLnNob3dYY29kZUxvZylcbiAgICAgID8gYE91dHB1dCBmcm9tIHhjb2RlYnVpbGQgJHt0aGlzLnNob3dYY29kZUxvZyA/ICd3aWxsJyA6ICd3aWxsIG5vdCd9IGJlIGxvZ2dlZGBcbiAgICAgIDogJ091dHB1dCBmcm9tIHhjb2RlYnVpbGQgd2lsbCBvbmx5IGJlIGxvZ2dlZCBpZiBhbnkgZXJyb3JzIGFyZSBwcmVzZW50IHRoZXJlJztcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgJHtsb2dNc2d9LiBUbyBjaGFuZ2UgdGhpcywgdXNlICdzaG93WGNvZGVMb2cnIGRlc2lyZWQgY2FwYWJpbGl0eWApO1xuICAgIHhjb2RlYnVpbGQub24oJ291dHB1dCcsIChzdGRvdXQsIHN0ZGVycikgPT4ge1xuICAgICAgbGV0IG91dCA9IHN0ZG91dCB8fCBzdGRlcnI7XG4gICAgICAvLyB3ZSB3YW50IHRvIHB1bGwgb3V0IHRoZSBsb2cgZmlsZSB0aGF0IGlzIGNyZWF0ZWQsIGFuZCBoaWdobGlnaHQgaXRcbiAgICAgIC8vIGZvciBkaWFnbm9zdGljIHB1cnBvc2VzXG4gICAgICBpZiAob3V0LmluY2x1ZGVzKCdXcml0aW5nIGRpYWdub3N0aWMgbG9nIGZvciB0ZXN0IHNlc3Npb24gdG8nKSkge1xuICAgICAgICAvLyBwdWxsIG91dCB0aGUgZmlyc3QgbGluZSB0aGF0IGJlZ2lucyB3aXRoIHRoZSBwYXRoIHNlcGFyYXRvclxuICAgICAgICAvLyB3aGljaCAqc2hvdWxkKiBiZSB0aGUgbGluZSBpbmRpY2F0aW5nIHRoZSBsb2cgZmlsZSBnZW5lcmF0ZWRcbiAgICAgICAgeGNvZGVidWlsZC5sb2dMb2NhdGlvbiA9IF8uZmlyc3QoXy5yZW1vdmUob3V0LnRyaW0oKS5zcGxpdCgnXFxuJyksICh2KSA9PiB2LnN0YXJ0c1dpdGgocGF0aC5zZXApKSk7XG4gICAgICAgIHhjb2RlTG9nLmRlYnVnKGBMb2cgZmlsZSBmb3IgeGNvZGVidWlsZCB0ZXN0OiAke3hjb2RlYnVpbGQubG9nTG9jYXRpb259YCk7XG4gICAgICB9XG5cbiAgICAgIC8vIGlmIHdlIGhhdmUgYW4gZXJyb3Igd2Ugd2FudCB0byBvdXRwdXQgdGhlIGxvZ3NcbiAgICAgIC8vIG90aGVyd2lzZSB0aGUgZmFpbHVyZSBpcyBpbnNjcnV0aWJsZVxuICAgICAgLy8gYnV0IGRvIG5vdCBsb2cgcGVybWlzc2lvbiBlcnJvcnMgZnJvbSB0cnlpbmcgdG8gd3JpdGUgdG8gYXR0YWNobWVudHMgZm9sZGVyXG4gICAgICBjb25zdCBpZ25vcmVFcnJvciA9IElHTk9SRURfRVJST1JTLnNvbWUoKHgpID0+IG91dC5pbmNsdWRlcyh4KSk7XG4gICAgICBpZiAodGhpcy5zaG93WGNvZGVMb2cgIT09IGZhbHNlICYmIG91dC5pbmNsdWRlcygnRXJyb3IgRG9tYWluPScpICYmICFpZ25vcmVFcnJvcikge1xuICAgICAgICBsb2dYY29kZU91dHB1dCA9IHRydWU7XG5cbiAgICAgICAgLy8gdGVycmlibGUgaGFjayB0byBoYW5kbGUgY2FzZSB3aGVyZSB4Y29kZSByZXR1cm4gMCBidXQgaXMgZmFpbGluZ1xuICAgICAgICB4Y29kZWJ1aWxkLl93ZGFfZXJyb3Jfb2NjdXJyZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBkbyBub3QgbG9nIHBlcm1pc3Npb24gZXJyb3JzIGZyb20gdHJ5aW5nIHRvIHdyaXRlIHRvIGF0dGFjaG1lbnRzIGZvbGRlclxuICAgICAgaWYgKGxvZ1hjb2RlT3V0cHV0ICYmICFpZ25vcmVFcnJvcikge1xuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2Ygb3V0LnNwbGl0KEVPTCkpIHtcbiAgICAgICAgICB4Y29kZUxvZy5lcnJvcihsaW5lKTtcbiAgICAgICAgICBpZiAobGluZSkge1xuICAgICAgICAgICAgeGNvZGVidWlsZC5fd2RhX2Vycm9yX21lc3NhZ2UgKz0gYCR7RU9MfSR7bGluZX1gO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHhjb2RlYnVpbGQ7XG4gIH1cblxuICBhc3luYyBzdGFydCAoYnVpbGRPbmx5ID0gZmFsc2UpIHtcbiAgICB0aGlzLnhjb2RlYnVpbGQgPSBhd2FpdCB0aGlzLmNyZWF0ZVN1YlByb2Nlc3MoYnVpbGRPbmx5KTtcbiAgICAvLyBTdG9yZSB4Y29kZWJ1aWxkIG1lc3NhZ2VcbiAgICB0aGlzLnhjb2RlYnVpbGQuX3dkYV9lcnJvcl9tZXNzYWdlID0gJyc7XG5cbiAgICAvLyB3cmFwIHRoZSBzdGFydCBwcm9jZWR1cmUgaW4gYSBwcm9taXNlIHNvIHRoYXQgd2UgY2FuIGNhdGNoLCBhbmQgcmVwb3J0LFxuICAgIC8vIGFueSBzdGFydHVwIGVycm9ycyB0aGF0IGFyZSB0aHJvd24gYXMgZXZlbnRzXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMueGNvZGVidWlsZC5vbignZXhpdCcsIGFzeW5jIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgICAgeGNvZGVMb2cuZXJyb3IoYHhjb2RlYnVpbGQgZXhpdGVkIHdpdGggY29kZSAnJHtjb2RlfScgYW5kIHNpZ25hbCAnJHtzaWduYWx9J2ApO1xuICAgICAgICAvLyBwcmludCBvdXQgdGhlIHhjb2RlYnVpbGQgZmlsZSBpZiB1c2VycyBoYXZlIGFza2VkIGZvciBpdFxuICAgICAgICBpZiAodGhpcy5zaG93WGNvZGVMb2cgJiYgdGhpcy54Y29kZWJ1aWxkLmxvZ0xvY2F0aW9uKSB7XG4gICAgICAgICAgeGNvZGVMb2cuZXJyb3IoYENvbnRlbnRzIG9mIHhjb2RlYnVpbGQgbG9nIGZpbGUgJyR7dGhpcy54Y29kZWJ1aWxkLmxvZ0xvY2F0aW9ufSc6YCk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCBkYXRhID0gYXdhaXQgZnMucmVhZEZpbGUodGhpcy54Y29kZWJ1aWxkLmxvZ0xvY2F0aW9uLCAndXRmOCcpO1xuICAgICAgICAgICAgZm9yIChsZXQgbGluZSBvZiBkYXRhLnNwbGl0KCdcXG4nKSkge1xuICAgICAgICAgICAgICB4Y29kZUxvZy5lcnJvcihsaW5lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHhjb2RlTG9nLmVycm9yKGBVbmFibGUgdG8gYWNjZXNzIHhjb2RlYnVpbGQgbG9nIGZpbGU6ICcke2Vyci5tZXNzYWdlfSdgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy54Y29kZWJ1aWxkLnByb2Nlc3NFeGl0ZWQgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy54Y29kZWJ1aWxkLl93ZGFfZXJyb3Jfb2NjdXJyZWQgfHwgKCFzaWduYWwgJiYgY29kZSAhPT0gMCkpIHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihgeGNvZGVidWlsZCBmYWlsZWQgd2l0aCBjb2RlICR7Y29kZX0ke0VPTH1gICtcbiAgICAgICAgICAgIGB4Y29kZWJ1aWxkIGVycm9yIG1lc3NhZ2U6JHtFT0x9JHt0aGlzLnhjb2RlYnVpbGQuX3dkYV9lcnJvcl9tZXNzYWdlfWApKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpbiB0aGUgY2FzZSBvZiBqdXN0IGJ1aWxkaW5nLCB0aGUgcHJvY2VzcyB3aWxsIGV4aXQgYW5kIHRoYXQgaXMgb3VyIGZpbmlzaFxuICAgICAgICBpZiAoYnVpbGRPbmx5KSB7XG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiAoYXN5bmMgKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHRpbWVyID0gbmV3IHRpbWluZy5UaW1lcigpLnN0YXJ0KCk7XG4gICAgICAgICAgYXdhaXQgdGhpcy54Y29kZWJ1aWxkLnN0YXJ0KHRydWUpO1xuICAgICAgICAgIGlmICghYnVpbGRPbmx5KSB7XG4gICAgICAgICAgICBsZXQgc3RhdHVzID0gYXdhaXQgdGhpcy53YWl0Rm9yU3RhcnQodGltZXIpO1xuICAgICAgICAgICAgcmVzb2x2ZShzdGF0dXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgbGV0IG1zZyA9IGBVbmFibGUgdG8gc3RhcnQgV2ViRHJpdmVyQWdlbnQ6ICR7ZXJyfWA7XG4gICAgICAgICAgdGhpcy5sb2cuZXJyb3IobXNnKTtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKG1zZykpO1xuICAgICAgICB9XG4gICAgICB9KSgpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgd2FpdEZvclN0YXJ0ICh0aW1lcikge1xuICAgIC8vIHRyeSB0byBjb25uZWN0IG9uY2UgZXZlcnkgMC41IHNlY29uZHMsIHVudGlsIGBsYXVuY2hUaW1lb3V0YCBpcyB1cFxuICAgIHRoaXMubG9nLmRlYnVnKGBXYWl0aW5nIHVwIHRvICR7dGhpcy5sYXVuY2hUaW1lb3V0fW1zIGZvciBXZWJEcml2ZXJBZ2VudCB0byBzdGFydGApO1xuICAgIGxldCBjdXJyZW50U3RhdHVzID0gbnVsbDtcbiAgICB0cnkge1xuICAgICAgbGV0IHJldHJpZXMgPSBwYXJzZUludCh0aGlzLmxhdW5jaFRpbWVvdXQgLyA1MDAsIDEwKTtcbiAgICAgIGF3YWl0IHJldHJ5SW50ZXJ2YWwocmV0cmllcywgMTAwMCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy54Y29kZWJ1aWxkLnByb2Nlc3NFeGl0ZWQpIHtcbiAgICAgICAgICAvLyB0aGVyZSBoYXMgYmVlbiBhbiBlcnJvciBlbHNld2hlcmUgYW5kIHdlIG5lZWQgdG8gc2hvcnQtY2lyY3VpdFxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcm94eVRpbWVvdXQgPSB0aGlzLm5vU2Vzc2lvblByb3h5LnRpbWVvdXQ7XG4gICAgICAgIHRoaXMubm9TZXNzaW9uUHJveHkudGltZW91dCA9IDEwMDA7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY3VycmVudFN0YXR1cyA9IGF3YWl0IHRoaXMubm9TZXNzaW9uUHJveHkuY29tbWFuZCgnL3N0YXR1cycsICdHRVQnKTtcbiAgICAgICAgICBpZiAoY3VycmVudFN0YXR1cyAmJiBjdXJyZW50U3RhdHVzLmlvcyAmJiBjdXJyZW50U3RhdHVzLmlvcy5pcCkge1xuICAgICAgICAgICAgdGhpcy5hZ2VudFVybCA9IGN1cnJlbnRTdGF0dXMuaW9zLmlwO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgV2ViRHJpdmVyQWdlbnQgaW5mb3JtYXRpb246YCk7XG4gICAgICAgICAgdGhpcy5sb2cuZGVidWcoSlNPTi5zdHJpbmdpZnkoY3VycmVudFN0YXR1cywgbnVsbCwgMikpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBjb25uZWN0IHRvIHJ1bm5pbmcgV2ViRHJpdmVyQWdlbnQ6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdGhpcy5ub1Nlc3Npb25Qcm94eS50aW1lb3V0ID0gcHJveHlUaW1lb3V0O1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMueGNvZGVidWlsZC5wcm9jZXNzRXhpdGVkKSB7XG4gICAgICAgIC8vIHRoZXJlIGhhcyBiZWVuIGFuIGVycm9yIGVsc2V3aGVyZSBhbmQgd2UgbmVlZCB0byBzaG9ydC1jaXJjdWl0XG4gICAgICAgIHJldHVybiBjdXJyZW50U3RhdHVzO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgV2ViRHJpdmVyQWdlbnQgc3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgYWZ0ZXIgJHt0aW1lci5nZXREdXJhdGlvbigpLmFzTWlsbGlTZWNvbmRzLnRvRml4ZWQoMCl9bXNgKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIGF0IHRoaXMgcG9pbnQsIGlmIHdlIGhhdmUgbm90IGhhZCBhbnkgZXJyb3JzIGZyb20geGNvZGUgaXRzZWxmIChyZXBvcnRlZFxuICAgICAgLy8gZWxzZXdoZXJlKSwgd2UgY2FuIGxldCB0aGlzIGdvIHRocm91Z2ggYW5kIHRyeSB0byBjcmVhdGUgdGhlIHNlc3Npb25cbiAgICAgIHRoaXMubG9nLmRlYnVnKGVyci5tZXNzYWdlKTtcbiAgICAgIHRoaXMubG9nLndhcm4oYEdldHRpbmcgc3RhdHVzIG9mIFdlYkRyaXZlckFnZW50IG9uIGRldmljZSB0aW1lZCBvdXQuIENvbnRpbnVpbmdgKTtcbiAgICB9XG4gICAgcmV0dXJuIGN1cnJlbnRTdGF0dXM7XG4gIH1cblxuICBhc3luYyBxdWl0ICgpIHtcbiAgICBhd2FpdCBraWxsUHJvY2VzcygneGNvZGVidWlsZCcsIHRoaXMueGNvZGVidWlsZCk7XG4gIH1cbn1cblxuZXhwb3J0IHsgWGNvZGVCdWlsZCB9O1xuZXhwb3J0IGRlZmF1bHQgWGNvZGVCdWlsZDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUdBLE1BQU1BLGtCQUFrQixHQUFHLGtCQUFrQjtBQUM3QyxNQUFNQyxjQUFjLEdBQUcs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
328
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJERUZBVUxUX1NJR05JTkdfSUQiLCJQUkVCVUlMRF9ERUxBWSIsIlJVTk5FUl9TQ0hFTUVfSU9TIiwiTElCX1NDSEVNRV9JT1MiLCJFUlJPUl9XUklUSU5HX0FUVEFDSE1FTlQiLCJFUlJPUl9DT1BZSU5HX0FUVEFDSE1FTlQiLCJJR05PUkVEX0VSUk9SUyIsIlJVTk5FUl9TQ0hFTUVfVFYiLCJMSUJfU0NIRU1FX1RWIiwieGNvZGVMb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiLCJYY29kZUJ1aWxkIiwiY29uc3RydWN0b3IiLCJ4Y29kZVZlcnNpb24iLCJkZXZpY2UiLCJhcmdzIiwibG9nIiwiZGVmYXVsdExvZ2dlciIsInJlYWxEZXZpY2UiLCJhZ2VudFBhdGgiLCJib290c3RyYXBQYXRoIiwicGxhdGZvcm1WZXJzaW9uIiwicGxhdGZvcm1OYW1lIiwiaW9zU2RrVmVyc2lvbiIsInNob3dYY29kZUxvZyIsInhjb2RlQ29uZmlnRmlsZSIsInhjb2RlT3JnSWQiLCJ4Y29kZVNpZ25pbmdJZCIsImtleWNoYWluUGF0aCIsImtleWNoYWluUGFzc3dvcmQiLCJwcmVidWlsZFdEQSIsInVzZVByZWJ1aWx0V0RBIiwidXNlU2ltcGxlQnVpbGRUZXN0IiwidXNlWGN0ZXN0cnVuRmlsZSIsImxhdW5jaFRpbWVvdXQiLCJ3ZGFSZW1vdGVQb3J0IiwidXBkYXRlZFdEQUJ1bmRsZUlkIiwiZGVyaXZlZERhdGFQYXRoIiwibWpwZWdTZXJ2ZXJQb3J0IiwicHJlYnVpbGREZWxheSIsIl8iLCJpc051bWJlciIsImFsbG93UHJvdmlzaW9uaW5nRGV2aWNlUmVnaXN0cmF0aW9uIiwicmVzdWx0QnVuZGxlUGF0aCIsInJlc3VsdEJ1bmRsZVZlcnNpb24iLCJpbml0Iiwibm9TZXNzaW9uUHJveHkiLCJkZXZpdmVJbmZvIiwiaXNSZWFsRGV2aWNlIiwidWRpZCIsInhjdGVzdHJ1bkZpbGVQYXRoIiwic2V0WGN0ZXN0cnVuRmlsZSIsInJlc2V0UHJvamVjdEZpbGUiLCJ1cGRhdGVQcm9qZWN0RmlsZSIsInJldHJpZXZlRGVyaXZlZERhdGFQYXRoIiwiX2Rlcml2ZWREYXRhUGF0aFByb21pc2UiLCJzdGRvdXQiLCJleGVjIiwiZXJyIiwid2FybiIsIm1lc3NhZ2UiLCJwYXR0ZXJuIiwibWF0Y2giLCJ0cnVuY2F0ZSIsImxlbmd0aCIsImRlYnVnIiwicGF0aCIsImRpcm5hbWUiLCJub3JtYWxpemUiLCJyZXNldCIsInByZWJ1aWxkIiwic3RhcnQiLCJ4Y29kZWJ1aWxkIiwiQiIsImRlbGF5IiwiY2xlYW5Qcm9qZWN0IiwidG1wSXNUdk9TIiwiaXNUdk9TIiwibGliU2NoZW1lIiwicnVubmVyU2NoZW1lIiwic2NoZW1lIiwiZ2V0Q29tbWFuZCIsImJ1aWxkT25seSIsImNtZCIsImJ1aWxkQ21kIiwidGVzdENtZCIsInB1c2giLCJ2ZXJzaW9uTWF0Y2giLCJSZWdFeHAiLCJwcm9jZXNzIiwiZW52IiwiQVBQSVVNX1hDVUlURVNUX1RSRUFUX1dBUk5JTkdTX0FTX0VSUk9SUyIsImNyZWF0ZVN1YlByb2Nlc3MiLCJzZXRSZWFsRGV2aWNlU2VjdXJpdHkiLCJnZW5lcmF0ZVhjb2RlQ29uZmlnRmlsZSIsImpvaW4iLCJPYmplY3QiLCJhc3NpZ24iLCJVU0VfUE9SVCIsIldEQV9QUk9EVUNUX0JVTkRMRV9JREVOVElGSUVSIiwiV0RBX1JVTk5FUl9CVU5ETEVfSUQiLCJNSlBFR19TRVJWRVJfUE9SVCIsInVwZ3JhZGVUaW1lc3RhbXAiLCJnZXRXREFVcGdyYWRlVGltZXN0YW1wIiwiVVBHUkFERV9USU1FU1RBTVAiLCJTdWJQcm9jZXNzIiwiY3dkIiwiZGV0YWNoZWQiLCJzdGRpbyIsImxvZ1hjb2RlT3V0cHV0IiwibG9nTXNnIiwiaXNCb29sZWFuIiwib24iLCJzdGRlcnIiLCJvdXQiLCJpbmNsdWRlcyIsImxvZ0xvY2F0aW9uIiwiZmlyc3QiLCJyZW1vdmUiLCJ0cmltIiwic3BsaXQiLCJ2Iiwic3RhcnRzV2l0aCIsInNlcCIsImlnbm9yZUVycm9yIiwic29tZSIsIngiLCJfd2RhX2Vycm9yX29jY3VycmVkIiwibGluZSIsIkVPTCIsImVycm9yIiwiX3dkYV9lcnJvcl9tZXNzYWdlIiwicmVzb2x2ZSIsInJlamVjdCIsImNvZGUiLCJzaWduYWwiLCJkYXRhIiwiZnMiLCJyZWFkRmlsZSIsInByb2Nlc3NFeGl0ZWQiLCJFcnJvciIsInRpbWVyIiwidGltaW5nIiwiVGltZXIiLCJzdGF0dXMiLCJ3YWl0Rm9yU3RhcnQiLCJtc2ciLCJjdXJyZW50U3RhdHVzIiwicmV0cmllcyIsInBhcnNlSW50IiwicmV0cnlJbnRlcnZhbCIsInByb3h5VGltZW91dCIsInRpbWVvdXQiLCJjb21tYW5kIiwiaW9zIiwiaXAiLCJhZ2VudFVybCIsIkpTT04iLCJzdHJpbmdpZnkiLCJnZXREdXJhdGlvbiIsImFzTWlsbGlTZWNvbmRzIiwidG9GaXhlZCIsInF1aXQiLCJraWxsUHJvY2VzcyJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi94Y29kZWJ1aWxkLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJldHJ5SW50ZXJ2YWwgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyBTdWJQcm9jZXNzLCBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCB7IGZzLCBsb2dnZXIsIHRpbWluZyB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgZGVmYXVsdExvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQge1xuICBzZXRSZWFsRGV2aWNlU2VjdXJpdHksIGdlbmVyYXRlWGNvZGVDb25maWdGaWxlLCBzZXRYY3Rlc3RydW5GaWxlLFxuICB1cGRhdGVQcm9qZWN0RmlsZSwgcmVzZXRQcm9qZWN0RmlsZSwga2lsbFByb2Nlc3MsXG4gIGdldFdEQVVwZ3JhZGVUaW1lc3RhbXAsIGlzVHZPUyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgRU9MIH0gZnJvbSAnb3MnO1xuaW1wb3J0IHsgV0RBX1JVTk5FUl9CVU5ETEVfSUQgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cblxuY29uc3QgREVGQVVMVF9TSUdOSU5HX0lEID0gJ2lQaG9uZSBEZXZlbG9wZXInO1xuY29uc3QgUFJFQlVJTERfREVMQVkgPSAwO1xuY29uc3QgUlVOTkVSX1NDSEVNRV9JT1MgPSAnV2ViRHJpdmVyQWdlbnRSdW5uZXInO1xuY29uc3QgTElCX1NDSEVNRV9JT1MgPSAnV2ViRHJpdmVyQWdlbnRMaWInO1xuXG5jb25zdCBFUlJPUl9XUklUSU5HX0FUVEFDSE1FTlQgPSAnRXJyb3Igd3JpdGluZyBhdHRhY2htZW50IGRhdGEgdG8gZmlsZSc7XG5jb25zdCBFUlJPUl9DT1BZSU5HX0FUVEFDSE1FTlQgPSAnRXJyb3IgY29weWluZyB0ZXN0aW5nIGF0dGFjaG1lbnQnO1xuY29uc3QgSUdOT1JFRF9FUlJPUlMgPSBbXG4gIEVSUk9SX1dSSVRJTkdfQVRUQUNITUVOVCxcbiAgRVJST1JfQ09QWUlOR19BVFRBQ0hNRU5ULFxuICAnRmFpbGVkIHRvIHJlbW92ZSBzY3JlZW5zaG90IGF0IHBhdGgnLFxuXTtcblxuY29uc3QgUlVOTkVSX1NDSEVNRV9UViA9ICdXZWJEcml2ZXJBZ2VudFJ1bm5lcl90dk9TJztcbmNvbnN0IExJQl9TQ0hFTUVfVFYgPSAnV2ViRHJpdmVyQWdlbnRMaWJfdHZPUyc7XG5cbmNvbnN0IHhjb2RlTG9nID0gbG9nZ2VyLmdldExvZ2dlcignWGNvZGUnKTtcblxuXG5jbGFzcyBYY29kZUJ1aWxkIHtcbiAgY29uc3RydWN0b3IgKHhjb2RlVmVyc2lvbiwgZGV2aWNlLCBhcmdzID0ge30sIGxvZyA9IG51bGwpIHtcbiAgICB0aGlzLnhjb2RlVmVyc2lvbiA9IHhjb2RlVmVyc2lvbjtcblxuICAgIHRoaXMuZGV2aWNlID0gZGV2aWNlO1xuICAgIHRoaXMubG9nID0gbG9nID8/IGRlZmF1bHRMb2dnZXI7XG5cbiAgICB0aGlzLnJlYWxEZXZpY2UgPSBhcmdzLnJlYWxEZXZpY2U7XG5cbiAgICB0aGlzLmFnZW50UGF0aCA9IGFyZ3MuYWdlbnRQYXRoO1xuICAgIHRoaXMuYm9vdHN0cmFwUGF0aCA9IGFyZ3MuYm9vdHN0cmFwUGF0aDtcblxuICAgIHRoaXMucGxhdGZvcm1WZXJzaW9uID0gYXJncy5wbGF0Zm9ybVZlcnNpb247XG4gICAgdGhpcy5wbGF0Zm9ybU5hbWUgPSBhcmdzLnBsYXRmb3JtTmFtZTtcbiAgICB0aGlzLmlvc1Nka1ZlcnNpb24gPSBhcmdzLmlvc1Nka1ZlcnNpb247XG5cbiAgICB0aGlzLnNob3dYY29kZUxvZyA9IGFyZ3Muc2hvd1hjb2RlTG9nO1xuXG4gICAgdGhpcy54Y29kZUNvbmZpZ0ZpbGUgPSBhcmdzLnhjb2RlQ29uZmlnRmlsZTtcbiAgICB0aGlzLnhjb2RlT3JnSWQgPSBhcmdzLnhjb2RlT3JnSWQ7XG4gICAgdGhpcy54Y29kZVNpZ25pbmdJZCA9IGFyZ3MueGNvZGVTaWduaW5nSWQgfHwgREVGQVVMVF9TSUdOSU5HX0lEO1xuICAgIHRoaXMua2V5Y2hhaW5QYXRoID0gYXJncy5rZXljaGFpblBhdGg7XG4gICAgdGhpcy5rZXljaGFpblBhc3N3b3JkID0gYXJncy5rZXljaGFpblBhc3N3b3JkO1xuXG4gICAgdGhpcy5wcmVidWlsZFdEQSA9IGFyZ3MucHJlYnVpbGRXREE7XG4gICAgdGhpcy51c2VQcmVidWlsdFdEQSA9IGFyZ3MudXNlUHJlYnVpbHRXREE7XG4gICAgdGhpcy51c2VTaW1wbGVCdWlsZFRlc3QgPSBhcmdzLnVzZVNpbXBsZUJ1aWxkVGVzdDtcblxuICAgIHRoaXMudXNlWGN0ZXN0cnVuRmlsZSA9IGFyZ3MudXNlWGN0ZXN0cnVuRmlsZTtcblxuICAgIHRoaXMubGF1bmNoVGltZW91dCA9IGFyZ3MubGF1bmNoVGltZW91dDtcblxuICAgIHRoaXMud2RhUmVtb3RlUG9ydCA9IGFyZ3Mud2RhUmVtb3RlUG9ydDtcblxuICAgIHRoaXMudXBkYXRlZFdEQUJ1bmRsZUlkID0gYXJncy51cGRhdGVkV0RBQnVuZGxlSWQ7XG4gICAgdGhpcy5kZXJpdmVkRGF0YVBhdGggPSBhcmdzLmRlcml2ZWREYXRhUGF0aDtcblxuICAgIHRoaXMubWpwZWdTZXJ2ZXJQb3J0ID0gYXJncy5tanBlZ1NlcnZlclBvcnQ7XG5cbiAgICB0aGlzLnByZWJ1aWxkRGVsYXkgPSBfLmlzTnVtYmVyKGFyZ3MucHJlYnVpbGREZWxheSkgPyBhcmdzLnByZWJ1aWxkRGVsYXkgOiBQUkVCVUlMRF9ERUxBWTtcblxuICAgIHRoaXMuYWxsb3dQcm92aXNpb25pbmdEZXZpY2VSZWdpc3RyYXRpb24gPSBhcmdzLmFsbG93UHJvdmlzaW9uaW5nRGV2aWNlUmVnaXN0cmF0aW9uO1xuXG4gICAgdGhpcy5yZXN1bHRCdW5kbGVQYXRoID0gYXJncy5yZXN1bHRCdW5kbGVQYXRoO1xuICAgIHRoaXMucmVzdWx0QnVuZGxlVmVyc2lvbiA9IGFyZ3MucmVzdWx0QnVuZGxlVmVyc2lvbjtcbiAgfVxuXG4gIGFzeW5jIGluaXQgKG5vU2Vzc2lvblByb3h5KSB7XG4gICAgdGhpcy5ub1Nlc3Npb25Qcm94eSA9IG5vU2Vzc2lvblByb3h5O1xuXG4gICAgaWYgKHRoaXMudXNlWGN0ZXN0cnVuRmlsZSkge1xuICAgICAgY29uc3QgZGV2aXZlSW5mbyA9IHtcbiAgICAgICAgaXNSZWFsRGV2aWNlOiB0aGlzLnJlYWxEZXZpY2UsXG4gICAgICAgIHVkaWQ6IHRoaXMuZGV2aWNlLnVkaWQsXG4gICAgICAgIHBsYXRmb3JtVmVyc2lvbjogdGhpcy5wbGF0Zm9ybVZlcnNpb24sXG4gICAgICAgIHBsYXRmb3JtTmFtZTogdGhpcy5wbGF0Zm9ybU5hbWVcbiAgICAgIH07XG4gICAgICB0aGlzLnhjdGVzdHJ1bkZpbGVQYXRoID0gYXdhaXQgc2V0WGN0ZXN0cnVuRmlsZShkZXZpdmVJbmZvLCB0aGlzLmlvc1Nka1ZlcnNpb24sIHRoaXMuYm9vdHN0cmFwUGF0aCwgdGhpcy53ZGFSZW1vdGVQb3J0KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiBuZWNlc3NhcnksIHVwZGF0ZSB0aGUgYnVuZGxlSWQgdG8gdXNlcidzIHNwZWNpZmljYXRpb25cbiAgICBpZiAodGhpcy5yZWFsRGV2aWNlKSB7XG4gICAgICAvLyBJbiBjYXNlIHRoZSBwcm9qZWN0IHN0aWxsIGhhcyB0aGUgdXNlciBzcGVjaWZpYyBidW5kbGUgSUQsIHJlc2V0IHRoZSBwcm9qZWN0IGZpbGUgZmlyc3QuXG4gICAgICAvLyAtIFdlIGRvIHRoaXMgcmVzZXQgZXZlbiBpZiB1cGRhdGVkV0RBQnVuZGxlSWQgaXMgbm90IHNwZWNpZmllZCxcbiAgICAgIC8vICAgc2luY2UgdGhlIHByZXZpb3VzIHVwZGF0ZWRXREFCdW5kbGVJZCB0ZXN0IGhhcyBnZW5lcmF0ZWQgdGhlIHVzZXIgc3BlY2lmaWMgYnVuZGxlIElEIHByb2plY3QgZmlsZS5cbiAgICAgIC8vIC0gV2UgZG9uJ3QgY2FsbCByZXNldFByb2plY3RGaWxlIGZvciBzaW11bGF0b3IsXG4gICAgICAvLyAgIHNpbmNlIHNpbXVsYXRvciB0ZXN0IHJ1biB3aWxsIHdvcmsgd2l0aCBhbnkgdXNlciBzcGVjaWZpYyBidW5kbGUgSUQuXG4gICAgICBhd2FpdCByZXNldFByb2plY3RGaWxlKHRoaXMuYWdlbnRQYXRoKTtcbiAgICAgIGlmICh0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCkge1xuICAgICAgICBhd2FpdCB1cGRhdGVQcm9qZWN0RmlsZSh0aGlzLmFnZW50UGF0aCwgdGhpcy51cGRhdGVkV0RBQnVuZGxlSWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJldHJpZXZlRGVyaXZlZERhdGFQYXRoICgpIHtcbiAgICBpZiAodGhpcy5kZXJpdmVkRGF0YVBhdGgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlcml2ZWREYXRhUGF0aDtcbiAgICB9XG5cbiAgICAvLyBhdm9pZCByYWNlIGNvbmRpdGlvbnNcbiAgICBpZiAodGhpcy5fZGVyaXZlZERhdGFQYXRoUHJvbWlzZSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2Rlcml2ZWREYXRhUGF0aFByb21pc2U7XG4gICAgfVxuXG4gICAgdGhpcy5fZGVyaXZlZERhdGFQYXRoUHJvbWlzZSA9IChhc3luYyAoKSA9PiB7XG4gICAgICBsZXQgc3Rkb3V0O1xuICAgICAgdHJ5IHtcbiAgICAgICAgKHtzdGRvdXR9ID0gYXdhaXQgZXhlYygneGNvZGVidWlsZCcsIFsnLXByb2plY3QnLCB0aGlzLmFnZW50UGF0aCwgJy1zaG93QnVpbGRTZXR0aW5ncyddKSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihgQ2Fubm90IHJldHJpZXZlIFdEQSBidWlsZCBzZXR0aW5ncy4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGF0dGVybiA9IC9eXFxzKkJVSUxEX0RJUlxccys9XFxzKyhcXC8uKikvbTtcbiAgICAgIGNvbnN0IG1hdGNoID0gcGF0dGVybi5leGVjKHN0ZG91dCk7XG4gICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oYENhbm5vdCBwYXJzZSBXREEgYnVpbGQgZGlyIGZyb20gJHtfLnRydW5jYXRlKHN0ZG91dCwge2xlbmd0aDogMzAwfSl9YCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMubG9nLmRlYnVnKGBQYXJzZWQgQlVJTERfRElSIGNvbmZpZ3VyYXRpb24gdmFsdWU6ICcke21hdGNoWzFdfSdgKTtcbiAgICAgIC8vIERlcml2ZWQgZGF0YSByb290IGlzIHR3byBsZXZlbHMgaGlnaGVyIG92ZXIgdGhlIGJ1aWxkIGRpclxuICAgICAgdGhpcy5kZXJpdmVkRGF0YVBhdGggPSBwYXRoLmRpcm5hbWUocGF0aC5kaXJuYW1lKHBhdGgubm9ybWFsaXplKG1hdGNoWzFdKSkpO1xuICAgICAgdGhpcy5sb2cuZGVidWcoYEdvdCBkZXJpdmVkIGRhdGEgcm9vdDogJyR7dGhpcy5kZXJpdmVkRGF0YVBhdGh9J2ApO1xuICAgICAgcmV0dXJuIHRoaXMuZGVyaXZlZERhdGFQYXRoO1xuICAgIH0pKCk7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuX2Rlcml2ZWREYXRhUGF0aFByb21pc2U7XG4gIH1cblxuICBhc3luYyByZXNldCAoKSB7XG4gICAgLy8gaWYgbmVjZXNzYXJ5LCByZXNldCB0aGUgYnVuZGxlSWQgdG8gb3JpZ2luYWwgdmFsdWVcbiAgICBpZiAodGhpcy5yZWFsRGV2aWNlICYmIHRoaXMudXBkYXRlZFdEQUJ1bmRsZUlkKSB7XG4gICAgICBhd2FpdCByZXNldFByb2plY3RGaWxlKHRoaXMuYWdlbnRQYXRoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBwcmVidWlsZCAoKSB7XG4gICAgLy8gZmlyc3QgZG8gYSBidWlsZCBwaGFzZVxuICAgIHRoaXMubG9nLmRlYnVnKCdQcmUtYnVpbGRpbmcgV0RBIGJlZm9yZSBsYXVuY2hpbmcgdGVzdCcpO1xuICAgIHRoaXMudXNlUHJlYnVpbHRXREEgPSB0cnVlO1xuICAgIGF3YWl0IHRoaXMuc3RhcnQodHJ1ZSk7XG5cbiAgICB0aGlzLnhjb2RlYnVpbGQgPSBudWxsO1xuXG4gICAgLy8gcGF1c2UgYSBtb21lbnRcbiAgICBhd2FpdCBCLmRlbGF5KHRoaXMucHJlYnVpbGREZWxheSk7XG4gIH1cblxuICBhc3luYyBjbGVhblByb2plY3QgKCkge1xuICAgIGNvbnN0IHRtcElzVHZPUyA9IGlzVHZPUyh0aGlzLnBsYXRmb3JtTmFtZSk7XG4gICAgY29uc3QgbGliU2NoZW1lID0gdG1wSXNUdk9TID8gTElCX1NDSEVNRV9UViA6IExJQl9TQ0hFTUVfSU9TO1xuICAgIGNvbnN0IHJ1bm5lclNjaGVtZSA9IHRtcElzVHZPUyA/IFJVTk5FUl9TQ0hFTUVfVFYgOiBSVU5ORVJfU0NIRU1FX0lPUztcblxuICAgIGZvciAoY29uc3Qgc2NoZW1lIG9mIFtsaWJTY2hlbWUsIHJ1bm5lclNjaGVtZV0pIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBDbGVhbmluZyB0aGUgcHJvamVjdCBzY2hlbWUgJyR7c2NoZW1lfScgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBsZWZ0b3ZlcnMgZnJvbSBwcmV2aW91cyBpbnN0YWxsc2ApO1xuICAgICAgYXdhaXQgZXhlYygneGNvZGVidWlsZCcsIFtcbiAgICAgICAgJ2NsZWFuJyxcbiAgICAgICAgJy1wcm9qZWN0JywgdGhpcy5hZ2VudFBhdGgsXG4gICAgICAgICctc2NoZW1lJywgc2NoZW1lLFxuICAgICAgXSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q29tbWFuZCAoYnVpbGRPbmx5ID0gZmFsc2UpIHtcbiAgICBsZXQgY21kID0gJ3hjb2RlYnVpbGQnO1xuICAgIGxldCBhcmdzO1xuXG4gICAgLy8gZmlndXJlIG91dCB0aGUgdGFyZ2V0cyBmb3IgeGNvZGVidWlsZFxuICAgIGNvbnN0IFtidWlsZENtZCwgdGVzdENtZF0gPSB0aGlzLnVzZVNpbXBsZUJ1aWxkVGVzdCA/IFsnYnVpbGQnLCAndGVzdCddIDogWydidWlsZC1mb3ItdGVzdGluZycsICd0ZXN0LXdpdGhvdXQtYnVpbGRpbmcnXTtcbiAgICBpZiAoYnVpbGRPbmx5KSB7XG4gICAgICBhcmdzID0gW2J1aWxkQ21kXTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudXNlUHJlYnVpbHRXREEgfHwgdGhpcy51c2VYY3Rlc3RydW5GaWxlKSB7XG4gICAgICBhcmdzID0gW3Rlc3RDbWRdO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcmdzID0gW2J1aWxkQ21kLCB0ZXN0Q21kXTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hbGxvd1Byb3Zpc2lvbmluZ0RldmljZVJlZ2lzdHJhdGlvbikge1xuICAgICAgLy8gVG8gLWFsbG93UHJvdmlzaW9uaW5nRGV2aWNlUmVnaXN0cmF0aW9uIGZsYWcgdGFrZXMgZWZmZWN0LCAtYWxsb3dQcm92aXNpb25pbmdVcGRhdGVzIG5lZWRzIHRvIGJlIHBhc3NlZCBhcyB3ZWxsLlxuICAgICAgYXJncy5wdXNoKCctYWxsb3dQcm92aXNpb25pbmdVcGRhdGVzJywgJy1hbGxvd1Byb3Zpc2lvbmluZ0RldmljZVJlZ2lzdHJhdGlvbicpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlc3VsdEJ1bmRsZVBhdGgpIHtcbiAgICAgIGFyZ3MucHVzaCgnLXJlc3VsdEJ1bmRsZVBhdGgnLCB0aGlzLnJlc3VsdEJ1bmRsZVBhdGgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlc3VsdEJ1bmRsZVZlcnNpb24pIHtcbiAgICAgIGFyZ3MucHVzaCgnLXJlc3VsdEJ1bmRsZVZlcnNpb24nLCB0aGlzLnJlc3VsdEJ1bmRsZVZlcnNpb24pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnVzZVhjdGVzdHJ1bkZpbGUpIHtcbiAgICAgIGFyZ3MucHVzaCgnLXhjdGVzdHJ1bicsIHRoaXMueGN0ZXN0cnVuRmlsZVBhdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBydW5uZXJTY2hlbWUgPSBpc1R2T1ModGhpcy5wbGF0Zm9ybU5hbWUpID8gUlVOTkVSX1NDSEVNRV9UViA6IFJVTk5FUl9TQ0hFTUVfSU9TO1xuICAgICAgYXJncy5wdXNoKCctcHJvamVjdCcsIHRoaXMuYWdlbnRQYXRoLCAnLXNjaGVtZScsIHJ1bm5lclNjaGVtZSk7XG4gICAgICBpZiAodGhpcy5kZXJpdmVkRGF0YVBhdGgpIHtcbiAgICAgICAgYXJncy5wdXNoKCctZGVyaXZlZERhdGFQYXRoJywgdGhpcy5kZXJpdmVkRGF0YVBhdGgpO1xuICAgICAgfVxuICAgIH1cbiAgICBhcmdzLnB1c2goJy1kZXN0aW5hdGlvbicsIGBpZD0ke3RoaXMuZGV2aWNlLnVkaWR9YCk7XG5cbiAgICBjb25zdCB2ZXJzaW9uTWF0Y2ggPSBuZXcgUmVnRXhwKC9eKFxcZCspXFwuKFxcZCspLykuZXhlYyh0aGlzLnBsYXRmb3JtVmVyc2lvbik7XG4gICAgaWYgKHZlcnNpb25NYXRjaCkge1xuICAgICAgYXJncy5wdXNoKGBJUEhPTkVPU19ERVBMT1lNRU5UX1RBUkdFVD0ke3ZlcnNpb25NYXRjaFsxXX0uJHt2ZXJzaW9uTWF0Y2hbMl19YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9nLndhcm4oYENhbm5vdCBwYXJzZSBtYWpvciBhbmQgbWlub3IgdmVyc2lvbiBudW1iZXJzIGZyb20gcGxhdGZvcm1WZXJzaW9uIFwiJHt0aGlzLnBsYXRmb3JtVmVyc2lvbn1cIi4gYCArXG4gICAgICAgICdXaWxsIGJ1aWxkIGZvciB0aGUgZGVmYXVsdCBwbGF0Zm9ybSBpbnN0ZWFkJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVhbERldmljZSAmJiB0aGlzLnhjb2RlQ29uZmlnRmlsZSkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYFVzaW5nIFhjb2RlIGNvbmZpZ3VyYXRpb24gZmlsZTogJyR7dGhpcy54Y29kZUNvbmZpZ0ZpbGV9J2ApO1xuICAgICAgYXJncy5wdXNoKCcteGNjb25maWcnLCB0aGlzLnhjb2RlQ29uZmlnRmlsZSk7XG4gICAgfVxuXG4gICAgaWYgKCFwcm9jZXNzLmVudi5BUFBJVU1fWENVSVRFU1RfVFJFQVRfV0FSTklOR1NfQVNfRVJST1JTKSB7XG4gICAgICAvLyBUaGlzIHNvbWV0aW1lcyBoZWxwcyB0byBzdXJ2aXZlIFhjb2RlIHVwZGF0ZXNcbiAgICAgIGFyZ3MucHVzaCgnR0NDX1RSRUFUX1dBUk5JTkdTX0FTX0VSUk9SUz0wJyk7XG4gICAgfVxuXG4gICAgLy8gQmVsb3cgb3B0aW9uIHNsaWdodGx5IHJlZHVjZXMgYnVpbGQgdGltZSBpbiBkZWJ1ZyBidWlsZFxuICAgIC8vIHdpdGggcHJldmVudGluZyB0byBnZW5lcmF0ZSBgL0luZGV4L0RhdGFTdG9yZWAgd2hpY2ggaXMgdXNlZCBieSBkZXZlbG9wbWVudFxuICAgIGFyZ3MucHVzaCgnQ09NUElMRVJfSU5ERVhfU1RPUkVfRU5BQkxFPU5PJyk7XG5cbiAgICByZXR1cm4ge2NtZCwgYXJnc307XG4gIH1cblxuICBhc3luYyBjcmVhdGVTdWJQcm9jZXNzIChidWlsZE9ubHkgPSBmYWxzZSkge1xuICAgIGlmICghdGhpcy51c2VYY3Rlc3RydW5GaWxlICYmIHRoaXMucmVhbERldmljZSkge1xuICAgICAgaWYgKHRoaXMua2V5Y2hhaW5QYXRoICYmIHRoaXMua2V5Y2hhaW5QYXNzd29yZCkge1xuICAgICAgICBhd2FpdCBzZXRSZWFsRGV2aWNlU2VjdXJpdHkodGhpcy5rZXljaGFpblBhdGgsIHRoaXMua2V5Y2hhaW5QYXNzd29yZCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy54Y29kZU9yZ0lkICYmIHRoaXMueGNvZGVTaWduaW5nSWQgJiYgIXRoaXMueGNvZGVDb25maWdGaWxlKSB7XG4gICAgICAgIHRoaXMueGNvZGVDb25maWdGaWxlID0gYXdhaXQgZ2VuZXJhdGVYY29kZUNvbmZpZ0ZpbGUodGhpcy54Y29kZU9yZ0lkLCB0aGlzLnhjb2RlU2lnbmluZ0lkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB7Y21kLCBhcmdzfSA9IHRoaXMuZ2V0Q29tbWFuZChidWlsZE9ubHkpO1xuICAgIHRoaXMubG9nLmRlYnVnKGBCZWdpbm5pbmcgJHtidWlsZE9ubHkgPyAnYnVpbGQnIDogJ3Rlc3QnfSB3aXRoIGNvbW1hbmQgJyR7Y21kfSAke2FyZ3Muam9pbignICcpfScgYCArXG4gICAgICBgaW4gZGlyZWN0b3J5ICcke3RoaXMuYm9vdHN0cmFwUGF0aH0nYCk7XG4gICAgY29uc3QgZW52ID0gT2JqZWN0LmFzc2lnbih7fSwgcHJvY2Vzcy5lbnYsIHtcbiAgICAgIFVTRV9QT1JUOiB0aGlzLndkYVJlbW90ZVBvcnQsXG4gICAgICBXREFfUFJPRFVDVF9CVU5ETEVfSURFTlRJRklFUjogdGhpcy51cGRhdGVkV0RBQnVuZGxlSWQgfHwgV0RBX1JVTk5FUl9CVU5ETEVfSUQsXG4gICAgfSk7XG4gICAgaWYgKHRoaXMubWpwZWdTZXJ2ZXJQb3J0KSB7XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL1dlYkRyaXZlckFnZW50L3B1bGwvMTA1XG4gICAgICBlbnYuTUpQRUdfU0VSVkVSX1BPUlQgPSB0aGlzLm1qcGVnU2VydmVyUG9ydDtcbiAgICB9XG4gICAgY29uc3QgdXBncmFkZVRpbWVzdGFtcCA9IGF3YWl0IGdldFdEQVVwZ3JhZGVUaW1lc3RhbXAodGhpcy5ib290c3RyYXBQYXRoKTtcbiAgICBpZiAodXBncmFkZVRpbWVzdGFtcCkge1xuICAgICAgZW52LlVQR1JBREVfVElNRVNUQU1QID0gdXBncmFkZVRpbWVzdGFtcDtcbiAgICB9XG4gICAgY29uc3QgeGNvZGVidWlsZCA9IG5ldyBTdWJQcm9jZXNzKGNtZCwgYXJncywge1xuICAgICAgY3dkOiB0aGlzLmJvb3RzdHJhcFBhdGgsXG4gICAgICBlbnYsXG4gICAgICBkZXRhY2hlZDogdHJ1ZSxcbiAgICAgIHN0ZGlvOiBbJ2lnbm9yZScsICdwaXBlJywgJ3BpcGUnXSxcbiAgICB9KTtcblxuICAgIGxldCBsb2dYY29kZU91dHB1dCA9ICEhdGhpcy5zaG93WGNvZGVMb2c7XG4gICAgY29uc3QgbG9nTXNnID0gXy5pc0Jvb2xlYW4odGhpcy5zaG93WGNvZGVMb2cpXG4gICAgICA/IGBPdXRwdXQgZnJvbSB4Y29kZWJ1aWxkICR7dGhpcy5zaG93WGNvZGVMb2cgPyAnd2lsbCcgOiAnd2lsbCBub3QnfSBiZSBsb2dnZWRgXG4gICAgICA6ICdPdXRwdXQgZnJvbSB4Y29kZWJ1aWxkIHdpbGwgb25seSBiZSBsb2dnZWQgaWYgYW55IGVycm9ycyBhcmUgcHJlc2VudCB0aGVyZSc7XG4gICAgdGhpcy5sb2cuZGVidWcoYCR7bG9nTXNnfS4gVG8gY2hhbmdlIHRoaXMsIHVzZSAnc2hvd1hjb2RlTG9nJyBkZXNpcmVkIGNhcGFiaWxpdHlgKTtcbiAgICB4Y29kZWJ1aWxkLm9uKCdvdXRwdXQnLCAoc3Rkb3V0LCBzdGRlcnIpID0+IHtcbiAgICAgIGxldCBvdXQgPSBzdGRvdXQgfHwgc3RkZXJyO1xuICAgICAgLy8gd2Ugd2FudCB0byBwdWxsIG91dCB0aGUgbG9nIGZpbGUgdGhhdCBpcyBjcmVhdGVkLCBhbmQgaGlnaGxpZ2h0IGl0XG4gICAgICAvLyBmb3IgZGlhZ25vc3RpYyBwdXJwb3Nlc1xuICAgICAgaWYgKG91dC5pbmNsdWRlcygnV3JpdGluZyBkaWFnbm9zdGljIGxvZyBmb3IgdGVzdCBzZXNzaW9uIHRvJykpIHtcbiAgICAgICAgLy8gcHVsbCBvdXQgdGhlIGZpcnN0IGxpbmUgdGhhdCBiZWdpbnMgd2l0aCB0aGUgcGF0aCBzZXBhcmF0b3JcbiAgICAgICAgLy8gd2hpY2ggKnNob3VsZCogYmUgdGhlIGxpbmUgaW5kaWNhdGluZyB0aGUgbG9nIGZpbGUgZ2VuZXJhdGVkXG4gICAgICAgIHhjb2RlYnVpbGQubG9nTG9jYXRpb24gPSBfLmZpcnN0KF8ucmVtb3ZlKG91dC50cmltKCkuc3BsaXQoJ1xcbicpLCAodikgPT4gdi5zdGFydHNXaXRoKHBhdGguc2VwKSkpO1xuICAgICAgICB4Y29kZUxvZy5kZWJ1ZyhgTG9nIGZpbGUgZm9yIHhjb2RlYnVpbGQgdGVzdDogJHt4Y29kZWJ1aWxkLmxvZ0xvY2F0aW9ufWApO1xuICAgICAgfVxuXG4gICAgICAvLyBpZiB3ZSBoYXZlIGFuIGVycm9yIHdlIHdhbnQgdG8gb3V0cHV0IHRoZSBsb2dzXG4gICAgICAvLyBvdGhlcndpc2UgdGhlIGZhaWx1cmUgaXMgaW5zY3J1dGlibGVcbiAgICAgIC8vIGJ1dCBkbyBub3QgbG9nIHBlcm1pc3Npb24gZXJyb3JzIGZyb20gdHJ5aW5nIHRvIHdyaXRlIHRvIGF0dGFjaG1lbnRzIGZvbGRlclxuICAgICAgY29uc3QgaWdub3JlRXJyb3IgPSBJR05PUkVEX0VSUk9SUy5zb21lKCh4KSA9PiBvdXQuaW5jbHVkZXMoeCkpO1xuICAgICAgaWYgKHRoaXMuc2hvd1hjb2RlTG9nICE9PSBmYWxzZSAmJiBvdXQuaW5jbHVkZXMoJ0Vycm9yIERvbWFpbj0nKSAmJiAhaWdub3JlRXJyb3IpIHtcbiAgICAgICAgbG9nWGNvZGVPdXRwdXQgPSB0cnVlO1xuXG4gICAgICAgIC8vIHRlcnJpYmxlIGhhY2sgdG8gaGFuZGxlIGNhc2Ugd2hlcmUgeGNvZGUgcmV0dXJuIDAgYnV0IGlzIGZhaWxpbmdcbiAgICAgICAgeGNvZGVidWlsZC5fd2RhX2Vycm9yX29jY3VycmVkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gZG8gbm90IGxvZyBwZXJtaXNzaW9uIGVycm9ycyBmcm9tIHRyeWluZyB0byB3cml0ZSB0byBhdHRhY2htZW50cyBmb2xkZXJcbiAgICAgIGlmIChsb2dYY29kZU91dHB1dCAmJiAhaWdub3JlRXJyb3IpIHtcbiAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIG91dC5zcGxpdChFT0wpKSB7XG4gICAgICAgICAgeGNvZGVMb2cuZXJyb3IobGluZSk7XG4gICAgICAgICAgaWYgKGxpbmUpIHtcbiAgICAgICAgICAgIHhjb2RlYnVpbGQuX3dkYV9lcnJvcl9tZXNzYWdlICs9IGAke0VPTH0ke2xpbmV9YDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB4Y29kZWJ1aWxkO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQgKGJ1aWxkT25seSA9IGZhbHNlKSB7XG4gICAgdGhpcy54Y29kZWJ1aWxkID0gYXdhaXQgdGhpcy5jcmVhdGVTdWJQcm9jZXNzKGJ1aWxkT25seSk7XG4gICAgLy8gU3RvcmUgeGNvZGVidWlsZCBtZXNzYWdlXG4gICAgdGhpcy54Y29kZWJ1aWxkLl93ZGFfZXJyb3JfbWVzc2FnZSA9ICcnO1xuXG4gICAgLy8gd3JhcCB0aGUgc3RhcnQgcHJvY2VkdXJlIGluIGEgcHJvbWlzZSBzbyB0aGF0IHdlIGNhbiBjYXRjaCwgYW5kIHJlcG9ydCxcbiAgICAvLyBhbnkgc3RhcnR1cCBlcnJvcnMgdGhhdCBhcmUgdGhyb3duIGFzIGV2ZW50c1xuICAgIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLnhjb2RlYnVpbGQub24oJ2V4aXQnLCBhc3luYyAoY29kZSwgc2lnbmFsKSA9PiB7XG4gICAgICAgIHhjb2RlTG9nLmVycm9yKGB4Y29kZWJ1aWxkIGV4aXRlZCB3aXRoIGNvZGUgJyR7Y29kZX0nIGFuZCBzaWduYWwgJyR7c2lnbmFsfSdgKTtcbiAgICAgICAgLy8gcHJpbnQgb3V0IHRoZSB4Y29kZWJ1aWxkIGZpbGUgaWYgdXNlcnMgaGF2ZSBhc2tlZCBmb3IgaXRcbiAgICAgICAgaWYgKHRoaXMuc2hvd1hjb2RlTG9nICYmIHRoaXMueGNvZGVidWlsZC5sb2dMb2NhdGlvbikge1xuICAgICAgICAgIHhjb2RlTG9nLmVycm9yKGBDb250ZW50cyBvZiB4Y29kZWJ1aWxkIGxvZyBmaWxlICcke3RoaXMueGNvZGVidWlsZC5sb2dMb2NhdGlvbn0nOmApO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgZGF0YSA9IGF3YWl0IGZzLnJlYWRGaWxlKHRoaXMueGNvZGVidWlsZC5sb2dMb2NhdGlvbiwgJ3V0ZjgnKTtcbiAgICAgICAgICAgIGZvciAobGV0IGxpbmUgb2YgZGF0YS5zcGxpdCgnXFxuJykpIHtcbiAgICAgICAgICAgICAgeGNvZGVMb2cuZXJyb3IobGluZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB4Y29kZUxvZy5lcnJvcihgVW5hYmxlIHRvIGFjY2VzcyB4Y29kZWJ1aWxkIGxvZyBmaWxlOiAnJHtlcnIubWVzc2FnZX0nYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMueGNvZGVidWlsZC5wcm9jZXNzRXhpdGVkID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMueGNvZGVidWlsZC5fd2RhX2Vycm9yX29jY3VycmVkIHx8ICghc2lnbmFsICYmIGNvZGUgIT09IDApKSB7XG4gICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoYHhjb2RlYnVpbGQgZmFpbGVkIHdpdGggY29kZSAke2NvZGV9JHtFT0x9YCArXG4gICAgICAgICAgICBgeGNvZGVidWlsZCBlcnJvciBtZXNzYWdlOiR7RU9MfSR7dGhpcy54Y29kZWJ1aWxkLl93ZGFfZXJyb3JfbWVzc2FnZX1gKSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaW4gdGhlIGNhc2Ugb2YganVzdCBidWlsZGluZywgdGhlIHByb2Nlc3Mgd2lsbCBleGl0IGFuZCB0aGF0IGlzIG91ciBmaW5pc2hcbiAgICAgICAgaWYgKGJ1aWxkT25seSkge1xuICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gKGFzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB0aW1lciA9IG5ldyB0aW1pbmcuVGltZXIoKS5zdGFydCgpO1xuICAgICAgICAgIGF3YWl0IHRoaXMueGNvZGVidWlsZC5zdGFydCh0cnVlKTtcbiAgICAgICAgICBpZiAoIWJ1aWxkT25seSkge1xuICAgICAgICAgICAgbGV0IHN0YXR1cyA9IGF3YWl0IHRoaXMud2FpdEZvclN0YXJ0KHRpbWVyKTtcbiAgICAgICAgICAgIHJlc29sdmUoc3RhdHVzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGxldCBtc2cgPSBgVW5hYmxlIHRvIHN0YXJ0IFdlYkRyaXZlckFnZW50OiAke2Vycn1gO1xuICAgICAgICAgIHRoaXMubG9nLmVycm9yKG1zZyk7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihtc2cpKTtcbiAgICAgICAgfVxuICAgICAgfSkoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHdhaXRGb3JTdGFydCAodGltZXIpIHtcbiAgICAvLyB0cnkgdG8gY29ubmVjdCBvbmNlIGV2ZXJ5IDAuNSBzZWNvbmRzLCB1bnRpbCBgbGF1bmNoVGltZW91dGAgaXMgdXBcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgV2FpdGluZyB1cCB0byAke3RoaXMubGF1bmNoVGltZW91dH1tcyBmb3IgV2ViRHJpdmVyQWdlbnQgdG8gc3RhcnRgKTtcbiAgICBsZXQgY3VycmVudFN0YXR1cyA9IG51bGw7XG4gICAgdHJ5IHtcbiAgICAgIGxldCByZXRyaWVzID0gcGFyc2VJbnQodGhpcy5sYXVuY2hUaW1lb3V0IC8gNTAwLCAxMCk7XG4gICAgICBhd2FpdCByZXRyeUludGVydmFsKHJldHJpZXMsIDEwMDAsIGFzeW5jICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMueGNvZGVidWlsZC5wcm9jZXNzRXhpdGVkKSB7XG4gICAgICAgICAgLy8gdGhlcmUgaGFzIGJlZW4gYW4gZXJyb3IgZWxzZXdoZXJlIGFuZCB3ZSBuZWVkIHRvIHNob3J0LWNpcmN1aXRcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJveHlUaW1lb3V0ID0gdGhpcy5ub1Nlc3Npb25Qcm94eS50aW1lb3V0O1xuICAgICAgICB0aGlzLm5vU2Vzc2lvblByb3h5LnRpbWVvdXQgPSAxMDAwO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGN1cnJlbnRTdGF0dXMgPSBhd2FpdCB0aGlzLm5vU2Vzc2lvblByb3h5LmNvbW1hbmQoJy9zdGF0dXMnLCAnR0VUJyk7XG4gICAgICAgICAgaWYgKGN1cnJlbnRTdGF0dXMgJiYgY3VycmVudFN0YXR1cy5pb3MgJiYgY3VycmVudFN0YXR1cy5pb3MuaXApIHtcbiAgICAgICAgICAgIHRoaXMuYWdlbnRVcmwgPSBjdXJyZW50U3RhdHVzLmlvcy5pcDtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5sb2cuZGVidWcoYFdlYkRyaXZlckFnZW50IGluZm9ybWF0aW9uOmApO1xuICAgICAgICAgIHRoaXMubG9nLmRlYnVnKEpTT04uc3RyaW5naWZ5KGN1cnJlbnRTdGF0dXMsIG51bGwsIDIpKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gY29ubmVjdCB0byBydW5uaW5nIFdlYkRyaXZlckFnZW50OiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRoaXMubm9TZXNzaW9uUHJveHkudGltZW91dCA9IHByb3h5VGltZW91dDtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLnhjb2RlYnVpbGQucHJvY2Vzc0V4aXRlZCkge1xuICAgICAgICAvLyB0aGVyZSBoYXMgYmVlbiBhbiBlcnJvciBlbHNld2hlcmUgYW5kIHdlIG5lZWQgdG8gc2hvcnQtY2lyY3VpdFxuICAgICAgICByZXR1cm4gY3VycmVudFN0YXR1cztcbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2cuZGVidWcoYFdlYkRyaXZlckFnZW50IHN1Y2Nlc3NmdWxseSBzdGFydGVkIGFmdGVyICR7dGltZXIuZ2V0RHVyYXRpb24oKS5hc01pbGxpU2Vjb25kcy50b0ZpeGVkKDApfW1zYCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBhdCB0aGlzIHBvaW50LCBpZiB3ZSBoYXZlIG5vdCBoYWQgYW55IGVycm9ycyBmcm9tIHhjb2RlIGl0c2VsZiAocmVwb3J0ZWRcbiAgICAgIC8vIGVsc2V3aGVyZSksIHdlIGNhbiBsZXQgdGhpcyBnbyB0aHJvdWdoIGFuZCB0cnkgdG8gY3JlYXRlIHRoZSBzZXNzaW9uXG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhlcnIubWVzc2FnZSk7XG4gICAgICB0aGlzLmxvZy53YXJuKGBHZXR0aW5nIHN0YXR1cyBvZiBXZWJEcml2ZXJBZ2VudCBvbiBkZXZpY2UgdGltZWQgb3V0LiBDb250aW51aW5nYCk7XG4gICAgfVxuICAgIHJldHVybiBjdXJyZW50U3RhdHVzO1xuICB9XG5cbiAgYXN5bmMgcXVpdCAoKSB7XG4gICAgYXdhaXQga2lsbFByb2Nlc3MoJ3hjb2RlYnVpbGQnLCB0aGlzLnhjb2RlYnVpbGQpO1xuICB9XG59XG5cbmV4cG9ydCB7IFhjb2RlQnVpbGQgfTtcbmV4cG9ydCBkZWZhdWx0IFhjb2RlQnVpbGQ7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFHQSxNQUFNQSxrQkFBa0IsR0FBRyxrQkFBa0I7QUFDN0MsTUFBTUMsY0FBYyxHQUFHLENBQUM7QUFDeEIsTUFBTUMsaUJBQWlCLEdBQUcsc0JBQXNCO0FBQ2hELE1BQU1DLGNBQWMsR0FBRyxtQkFBbUI7QUFFMUMsTUFBTUMsd0JBQXdCLEdBQUcsdUNBQXVDO0FBQ3hFLE1BQU1DLHdCQUF3QixHQUFHLGtDQUFrQztBQUNuRSxNQUFNQyxjQUFjLEdBQUcsQ0FDckJGLHdCQUF3QixFQUN4QkMsd0JBQXdCLEVBQ3hCLHFDQUFxQyxDQUN0QztBQUVELE1BQU1FLGdCQUFnQixHQUFHLDJCQUEyQjtBQUNwRCxNQUFNQyxhQUFhLEdBQUcsd0JBQXdCO0FBRTlDLE1BQU1DLFFBQVEsR0FBR0MsZUFBTSxDQUFDQyxTQUFTLENBQUMsT0FBTyxDQUFDO0FBRzFDLE1BQU1DLFVBQVUsQ0FBQztFQUNmQyxXQUFXLENBQUVDLFlBQVksRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUVDLEdBQUcsR0FBRyxJQUFJLEVBQUU7SUFDeEQsSUFBSSxDQUFDSCxZQUFZLEdBQUdBLFlBQVk7SUFFaEMsSUFBSSxDQUFDQyxNQUFNLEdBQUdBLE1BQU07SUFDcEIsSUFBSSxDQUFDRSxHQUFHLEdBQUdBLEdBQUcsSUFBSUMsZUFBYTtJQUUvQixJQUFJLENBQUNDLFVBQVUsR0FBR0gsSUFBSSxDQUFDRyxVQUFVO0lBRWpDLElBQUksQ0FBQ0MsU0FBUyxHQUFHSixJQUFJLENBQUNJLFNBQVM7SUFDL0IsSUFBSSxDQUFDQyxhQUFhLEdBQUdMLElBQUksQ0FBQ0ssYUFBYTtJQUV2QyxJQUFJLENBQUNDLGVBQWUsR0FBR04sSUFBSSxDQUFDTSxlQUFlO0lBQzNDLElBQUksQ0FBQ0MsWUFBWSxHQUFHUCxJQUFJLENBQUNPLFlBQVk7SUFDckMsSUFBSSxDQUFDQyxhQUFhLEdBQUdSLElBQUksQ0FBQ1EsYUFBYTtJQUV2QyxJQUFJLENBQUNDLFlBQVksR0FBR1QsSUFBSSxDQUFDUyxZQUFZO0lBRXJDLElBQUksQ0FBQ0MsZUFBZSxHQUFHVixJQUFJLENBQUNVLGVBQWU7SUFDM0MsSUFBSSxDQUFDQyxVQUFVLEdBQUdYLElBQUksQ0FBQ1csVUFBVTtJQUNqQyxJQUFJLENBQUNDLGNBQWMsR0FBR1osSUFBSSxDQUFDWSxjQUFjLElBQUk1QixrQkFBa0I7SUFDL0QsSUFBSSxDQUFDNkIsWUFBWSxHQUFHYixJQUFJLENBQUNhLFlBQVk7SUFDckMsSUFBSSxDQUFDQyxnQkFBZ0IsR0FBR2QsSUFBSSxDQUFDYyxnQkFBZ0I7SUFFN0MsSUFBSSxDQUFDQyxXQUFXLEdBQUdmLElBQUksQ0FBQ2UsV0FBVztJQUNuQyxJQUFJLENBQUNDLGNBQWMsR0FBR2hCLElBQUksQ0FBQ2dCLGNBQWM7SUFDekMsSUFBSSxDQUFDQyxrQkFBa0IsR0FBR2pCLElBQUksQ0FBQ2lCLGtCQUFrQjtJQUVqRCxJQUFJLENBQUNDLGdCQUFnQixHQUFHbEIsSUFBSSxDQUFDa0IsZ0JBQWdCO0lBRTdDLElBQUksQ0FBQ0MsYUFBYSxHQUFHbkIsSUFBSSxDQUFDbUIsYUFBYTtJQUV2QyxJQUFJLENBQUNDLGFBQWEsR0FBR3BCLElBQUksQ0FBQ29CLGFBQWE7SUFFdkMsSUFBSSxDQUFDQyxrQkFBa0IsR0FBR3JCLElBQUksQ0FBQ3FCLGtCQUFrQjtJQUNqRCxJQUFJLENBQUNDLGVBQWUsR0FBR3RCLElBQUksQ0FBQ3NCLGVBQWU7SUFFM0MsSUFBSSxDQUFDQyxlQUFlLEdBQUd2QixJQUFJLENBQUN1QixlQUFlO0lBRTNDLElBQUksQ0FBQ0MsYUFBYSxHQUFHQyxlQUFDLENBQUNDLFFBQVEsQ0FBQzFCLElBQUksQ0FBQ3dCLGFBQWEsQ0FBQyxHQUFHeEIsSUFBSSxDQUFDd0IsYUFBYSxHQUFHdkMsY0FBYztJQUV6RixJQUFJLENBQUMwQyxtQ0FBbUMsR0FBRzNCLElBQUksQ0FBQzJCLG1DQUFtQztJQUVuRixJQUFJLENBQUNDLGdCQUFnQixHQUFHNUIsSUFBSSxDQUFDNEIsZ0JBQWdCO0lBQzdDLElBQUksQ0FBQ0MsbUJBQW1CLEdBQUc3QixJQUFJLENBQUM2QixtQkFBbUI7RUFDckQ7RUFFQSxNQUFNQyxJQUFJLENBQUVDLGNBQWMsRUFBRTtJQUMxQixJQUFJLENBQUNBLGNBQWMsR0FBR0EsY0FBYztJQUVwQyxJQUFJLElBQUksQ0FBQ2IsZ0JBQWdCLEVBQUU7TUFDekIsTUFBTWMsVUFBVSxHQUFHO1FBQ2pCQyxZQUFZLEVBQUUsSUFBSSxDQUFDOUIsVUFBVTtRQUM3QitCLElBQUksRUFBRSxJQUFJLENBQUNuQyxNQUFNLENBQUNtQyxJQUFJO1FBQ3RCNUIsZUFBZSxFQUFFLElBQUksQ0FBQ0EsZUFBZTtRQUNyQ0MsWUFBWSxFQUFFLElBQUksQ0FBQ0E7TUFDckIsQ0FBQztNQUNELElBQUksQ0FBQzRCLGlCQUFpQixHQUFHLE1BQU0sSUFBQUMsdUJBQWdCLEVBQUNKLFVBQVUsRUFBRSxJQUFJLENBQUN4QixhQUFhLEVBQUUsSUFBSSxDQUFDSCxhQUFhLEVBQUUsSUFBSSxDQUFDZSxhQUFhLENBQUM7TUFDdkg7SUFDRjs7SUFHQSxJQUFJLElBQUksQ0FBQ2pCLFVBQVUsRUFBRTtNQU1uQixNQUFNLElBQUFrQyx1QkFBZ0IsRUFBQyxJQUFJLENBQUNqQyxTQUFTLENBQUM7TUFDdEMsSUFBSSxJQUFJLENBQUNpQixrQkFBa0IsRUFBRTtRQUMzQixNQUFNLElBQUFpQix3QkFBaUIsRUFBQyxJQUFJLENBQUNsQyxTQUFTLEVBQUUsSUFBSSxDQUFDaUIsa0JBQWtCLENBQUM7TUFDbEU7SUFDRjtFQUNGO0VBRUEsTUFBTWtCLHVCQUF1QixHQUFJO0lBQy9CLElBQUksSUFBSSxDQUFDakIsZUFBZSxFQUFFO01BQ3hCLE9BQU8sSUFBSSxDQUFDQSxlQUFlO0lBQzdCOztJQUdBLElBQUksSUFBSSxDQUFDa0IsdUJBQXVCLEVBQUU7TUFDaEMsT0FBTyxNQUFNLElBQUksQ0FBQ0EsdUJBQXVCO0lBQzNDO0lBRUEsSUFBSSxDQUFDQSx1QkFBdUIsR0FBRyxDQUFDLFlBQVk7TUFDMUMsSUFBSUMsTUFBTTtNQUNWLElBQUk7UUFDRixDQUFDO1VBQUNBO1FBQU0sQ0FBQyxHQUFHLE1BQU0sSUFBQUMsa0JBQUksRUFBQyxZQUFZLEVBQUUsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDdEMsU0FBUyxFQUFFLG9CQUFvQixDQUFDLENBQUM7TUFDMUYsQ0FBQyxDQUFDLE9BQU91QyxHQUFHLEVBQUU7UUFDWixJQUFJLENBQUMxQyxHQUFHLENBQUMyQyxJQUFJLENBQUUsdURBQXNERCxHQUFHLENBQUNFLE9BQVEsRUFBQyxDQUFDO1FBQ25GO01BQ0Y7TUFFQSxNQUFNQyxPQUFPLEdBQUcsNkJBQTZCO01BQzdDLE1BQU1DLEtBQUssR0FBR0QsT0FBTyxDQUFDSixJQUFJLENBQUNELE1BQU0sQ0FBQztNQUNsQyxJQUFJLENBQUNNLEtBQUssRUFBRTtRQUNWLElBQUksQ0FBQzlDLEdBQUcsQ0FBQzJDLElBQUksQ0FBRSxtQ0FBa0NuQixlQUFDLENBQUN1QixRQUFRLENBQUNQLE1BQU0sRUFBRTtVQUFDUSxNQUFNLEVBQUU7UUFBRyxDQUFDLENBQUUsRUFBQyxDQUFDO1FBQ3JGO01BQ0Y7TUFDQSxJQUFJLENBQUNoRCxHQUFHLENBQUNpRCxLQUFLLENBQUUsMENBQXlDSCxLQUFLLENBQUMsQ0FBQyxDQUFFLEdBQUUsQ0FBQztNQUVyRSxJQUFJLENBQUN6QixlQUFlLEdBQUc2QixhQUFJLENBQUNDLE9BQU8sQ0FBQ0QsYUFBSSxDQUFDQyxPQUFPLENBQUNELGFBQUksQ0FBQ0UsU0FBUyxDQUFDTixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQzNFLElBQUksQ0FBQzlDLEdBQUcsQ0FBQ2lELEtBQUssQ0FBRSwyQkFBMEIsSUFBSSxDQUFDNUIsZUFBZ0IsR0FBRSxDQUFDO01BQ2xFLE9BQU8sSUFBSSxDQUFDQSxlQUFlO0lBQzdCLENBQUMsR0FBRztJQUNKLE9BQU8sTUFBTSxJQUFJLENBQUNrQix1QkFBdUI7RUFDM0M7RUFFQSxNQUFNYyxLQUFLLEdBQUk7SUFFYixJQUFJLElBQUksQ0FBQ25ELFVBQVUsSUFBSSxJQUFJLENBQUNrQixrQkFBa0IsRUFBRTtNQUM5QyxNQUFNLElBQUFnQix1QkFBZ0IsRUFBQyxJQUFJLENBQUNqQyxTQUFTLENBQUM7SUFDeEM7RUFDRjtFQUVBLE1BQU1tRCxRQUFRLEdBQUk7SUFFaEIsSUFBSSxDQUFDdEQsR0FBRyxDQUFDaUQsS0FBSyxDQUFDLHdDQUF3QyxDQUFDO0lBQ3hELElBQUksQ0FBQ2xDLGNBQWMsR0FBRyxJQUFJO0lBQzFCLE1BQU0sSUFBSSxDQUFDd0MsS0FBSyxDQUFDLElBQUksQ0FBQztJQUV0QixJQUFJLENBQUNDLFVBQVUsR0FBRyxJQUFJOztJQUd0QixNQUFNQyxpQkFBQyxDQUFDQyxLQUFLLENBQUMsSUFBSSxDQUFDbkMsYUFBYSxDQUFDO0VBQ25DO0VBRUEsTUFBTW9DLFlBQVksR0FBSTtJQUNwQixNQUFNQyxTQUFTLEdBQUcsSUFBQUMsYUFBTSxFQUFDLElBQUksQ0FBQ3ZELFlBQVksQ0FBQztJQUMzQyxNQUFNd0QsU0FBUyxHQUFHRixTQUFTLEdBQUdyRSxhQUFhLEdBQUdMLGNBQWM7SUFDNUQsTUFBTTZFLFlBQVksR0FBR0gsU0FBUyxHQUFHdEUsZ0JBQWdCLEdBQUdMLGlCQUFpQjtJQUVyRSxLQUFLLE1BQU0rRSxNQUFNLElBQUksQ0FBQ0YsU0FBUyxFQUFFQyxZQUFZLENBQUMsRUFBRTtNQUM5QyxJQUFJLENBQUMvRCxHQUFHLENBQUNpRCxLQUFLLENBQUUsZ0NBQStCZSxNQUFPLDhEQUE2RCxDQUFDO01BQ3BILE1BQU0sSUFBQXZCLGtCQUFJLEVBQUMsWUFBWSxFQUFFLENBQ3ZCLE9BQU8sRUFDUCxVQUFVLEVBQUUsSUFBSSxDQUFDdEMsU0FBUyxFQUMxQixTQUFTLEVBQUU2RCxNQUFNLENBQ2xCLENBQUM7SUFDSjtFQUNGO0VBRUFDLFVBQVUsQ0FBRUMsU0FBUyxHQUFHLEtBQUssRUFBRTtJQUM3QixJQUFJQyxHQUFHLEdBQUcsWUFBWTtJQUN0QixJQUFJcEUsSUFBSTs7SUFHUixNQUFNLENBQUNxRSxRQUFRLEVBQUVDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQ3JELGtCQUFrQixHQUFHLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsdUJBQXVCLENBQUM7SUFDeEgsSUFBSWtELFNBQVMsRUFBRTtNQUNibkUsSUFBSSxHQUFHLENBQUNxRSxRQUFRLENBQUM7SUFDbkIsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDckQsY0FBYyxJQUFJLElBQUksQ0FBQ0UsZ0JBQWdCLEVBQUU7TUFDdkRsQixJQUFJLEdBQUcsQ0FBQ3NFLE9BQU8sQ0FBQztJQUNsQixDQUFDLE1BQU07TUFDTHRFLElBQUksR0FBRyxDQUFDcUUsUUFBUSxFQUFFQyxPQUFPLENBQUM7SUFDNUI7SUFFQSxJQUFJLElBQUksQ0FBQzNDLG1DQUFtQyxFQUFFO01BRTVDM0IsSUFBSSxDQUFDdUUsSUFBSSxDQUFDLDJCQUEyQixFQUFFLHNDQUFzQyxDQUFDO0lBQ2hGO0lBRUEsSUFBSSxJQUFJLENBQUMzQyxnQkFBZ0IsRUFBRTtNQUN6QjVCLElBQUksQ0FBQ3VFLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMzQyxnQkFBZ0IsQ0FBQztJQUN2RDtJQUVBLElBQUksSUFBSSxDQUFDQyxtQkFBbUIsRUFBRTtNQUM1QjdCLElBQUksQ0FBQ3VFLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMxQyxtQkFBbUIsQ0FBQztJQUM3RDtJQUVBLElBQUksSUFBSSxDQUFDWCxnQkFBZ0IsRUFBRTtNQUN6QmxCLElBQUksQ0FBQ3VFLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDcEMsaUJBQWlCLENBQUM7SUFDakQsQ0FBQyxNQUFNO01BQ0wsTUFBTTZCLFlBQVksR0FBRyxJQUFBRixhQUFNLEVBQUMsSUFBSSxDQUFDdkQsWUFBWSxDQUFDLEdBQUdoQixnQkFBZ0IsR0FBR0wsaUJBQWlCO01BQ3JGYyxJQUFJLENBQUN1RSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQ25FLFNBQVMsRUFBRSxTQUFTLEVBQUU0RCxZQUFZLENBQUM7TUFDOUQsSUFBSSxJQUFJLENBQUMxQyxlQUFlLEVBQUU7UUFDeEJ0QixJQUFJLENBQUN1RSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDakQsZUFBZSxDQUFDO01BQ3JEO0lBQ0Y7SUFDQXRCLElBQUksQ0FBQ3VFLElBQUksQ0FBQyxjQUFjLEVBQUcsTUFBSyxJQUFJLENBQUN4RSxNQUFNLENBQUNtQyxJQUFLLEVBQUMsQ0FBQztJQUVuRCxNQUFNc0MsWUFBWSxHQUFHLElBQUlDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQy9CLElBQUksQ0FBQyxJQUFJLENBQUNwQyxlQUFlLENBQUM7SUFDM0UsSUFBSWtFLFlBQVksRUFBRTtNQUNoQnhFLElBQUksQ0FBQ3VFLElBQUksQ0FBRSw4QkFBNkJDLFlBQVksQ0FBQyxDQUFDLENBQUUsSUFBR0EsWUFBWSxDQUFDLENBQUMsQ0FBRSxFQUFDLENBQUM7SUFDL0UsQ0FBQyxNQUFNO01BQ0wsSUFBSSxDQUFDdkUsR0FBRyxDQUFDMkMsSUFBSSxDQUFFLHNFQUFxRSxJQUFJLENBQUN0QyxlQUFnQixLQUFJLEdBQzNHLDZDQUE2QyxDQUFDO0lBQ2xEO0lBRUEsSUFBSSxJQUFJLENBQUNILFVBQVUsSUFBSSxJQUFJLENBQUNPLGVBQWUsRUFBRTtNQUMzQyxJQUFJLENBQUNULEdBQUcsQ0FBQ2lELEtBQUssQ0FBRSxvQ0FBbUMsSUFBSSxDQUFDeEMsZUFBZ0IsR0FBRSxDQUFDO01BQzNFVixJQUFJLENBQUN1RSxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQzdELGVBQWUsQ0FBQztJQUM5QztJQUVBLElBQUksQ0FBQ2dFLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDQyx3Q0FBd0MsRUFBRTtNQUV6RDVFLElBQUksQ0FBQ3VFLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQztJQUM3Qzs7SUFJQXZFLElBQUksQ0FBQ3VFLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQztJQUUzQyxPQUFPO01BQUNILEdBQUc7TUFBRXBFO0lBQUksQ0FBQztFQUNwQjtFQUVBLE1BQU02RSxnQkFBZ0IsQ0FBRVYsU0FBUyxHQUFHLEtBQUssRUFBRTtJQUN6QyxJQUFJLENBQUMsSUFBSSxDQUFDakQsZ0JBQWdCLElBQUksSUFBSSxDQUFDZixVQUFVLEVBQUU7TUFDN0MsSUFBSSxJQUFJLENBQUNVLFlBQVksSUFBSSxJQUFJLENBQUNDLGdCQUFnQixFQUFFO1FBQzlDLE1BQU0sSUFBQWdFLDRCQUFxQixFQUFDLElBQUksQ0FBQ2pFLFlBQVksRUFBRSxJQUFJLENBQUNDLGdCQUFnQixDQUFDO01BQ3ZFO01BQ0EsSUFBSSxJQUFJLENBQUNILFVBQVUsSUFBSSxJQUFJLENBQUNDLGNBQWMsSUFBSSxDQUFDLElBQUksQ0FBQ0YsZUFBZSxFQUFFO1FBQ25FLElBQUksQ0FBQ0EsZUFBZSxHQUFHLE1BQU0sSUFBQXFFLDhCQUF1QixFQUFDLElBQUksQ0FBQ3BFLFVBQVUsRUFBRSxJQUFJLENBQUNDLGNBQWMsQ0FBQztNQUM1RjtJQUNGO0lBRUEsTUFBTTtNQUFDd0QsR0FBRztNQUFFcEU7SUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDa0UsVUFBVSxDQUFDQyxTQUFTLENBQUM7SUFDOUMsSUFBSSxDQUFDbEUsR0FBRyxDQUFDaUQsS0FBSyxDQUFFLGFBQVlpQixTQUFTLEdBQUcsT0FBTyxHQUFHLE1BQU8sa0JBQWlCQyxHQUFJLElBQUdwRSxJQUFJLENBQUNnRixJQUFJLENBQUMsR0FBRyxDQUFFLElBQUcsR0FDaEcsaUJBQWdCLElBQUksQ0FBQzNFLGFBQWMsR0FBRSxDQUFDO0lBQ3pDLE1BQU1zRSxHQUFHLEdBQUdNLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFUixPQUFPLENBQUNDLEdBQUcsRUFBRTtNQUN6Q1EsUUFBUSxFQUFFLElBQUksQ0FBQy9ELGFBQWE7TUFDNUJnRSw2QkFBNkIsRUFBRSxJQUFJLENBQUMvRCxrQkFBa0IsSUFBSWdFO0lBQzVELENBQUMsQ0FBQztJQUNGLElBQUksSUFBSSxDQUFDOUQsZUFBZSxFQUFFO01BRXhCb0QsR0FBRyxDQUFDVyxpQkFBaUIsR0FBRyxJQUFJLENBQUMvRCxlQUFlO0lBQzlDO0lBQ0EsTUFBTWdFLGdCQUFnQixHQUFHLE1BQU0sSUFBQUMsNkJBQXNCLEVBQUMsSUFBSSxDQUFDbkYsYUFBYSxDQUFDO0lBQ3pFLElBQUlrRixnQkFBZ0IsRUFBRTtNQUNwQlosR0FBRyxDQUFDYyxpQkFBaUIsR0FBR0YsZ0JBQWdCO0lBQzFDO0lBQ0EsTUFBTTlCLFVBQVUsR0FBRyxJQUFJaUMsd0JBQVUsQ0FBQ3RCLEdBQUcsRUFBRXBFLElBQUksRUFBRTtNQUMzQzJGLEdBQUcsRUFBRSxJQUFJLENBQUN0RixhQUFhO01BQ3ZCc0UsR0FBRztNQUNIaUIsUUFBUSxFQUFFLElBQUk7TUFDZEMsS0FBSyxFQUFFLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNO0lBQ2xDLENBQUMsQ0FBQztJQUVGLElBQUlDLGNBQWMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDckYsWUFBWTtJQUN4QyxNQUFNc0YsTUFBTSxHQUFHdEUsZUFBQyxDQUFDdUUsU0FBUyxDQUFDLElBQUksQ0FBQ3ZGLFlBQVksQ0FBQyxHQUN4QywwQkFBeUIsSUFBSSxDQUFDQSxZQUFZLEdBQUcsTUFBTSxHQUFHLFVBQVcsWUFBVyxHQUM3RSw0RUFBNEU7SUFDaEYsSUFBSSxDQUFDUixHQUFHLENBQUNpRCxLQUFLLENBQUUsR0FBRTZDLE1BQU8seURBQXdELENBQUM7SUFDbEZ0QyxVQUFVLENBQUN3QyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUN4RCxNQUFNLEVBQUV5RCxNQUFNLEtBQUs7TUFDMUMsSUFBSUMsR0FBRyxHQUFHMUQsTUFBTSxJQUFJeUQsTUFBTTtNQUcxQixJQUFJQyxHQUFHLENBQUNDLFFBQVEsQ0FBQyw0Q0FBNEMsQ0FBQyxFQUFFO1FBRzlEM0MsVUFBVSxDQUFDNEMsV0FBVyxHQUFHNUUsZUFBQyxDQUFDNkUsS0FBSyxDQUFDN0UsZUFBQyxDQUFDOEUsTUFBTSxDQUFDSixHQUFHLENBQUNLLElBQUksRUFBRSxDQUFDQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUdDLENBQUMsSUFBS0EsQ0FBQyxDQUFDQyxVQUFVLENBQUN4RCxhQUFJLENBQUN5RCxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2pHbkgsUUFBUSxDQUFDeUQsS0FBSyxDQUFFLGlDQUFnQ08sVUFBVSxDQUFDNEMsV0FBWSxFQUFDLENBQUM7TUFDM0U7O01BS0EsTUFBTVEsV0FBVyxHQUFHdkgsY0FBYyxDQUFDd0gsSUFBSSxDQUFFQyxDQUFDLElBQUtaLEdBQUcsQ0FBQ0MsUUFBUSxDQUFDVyxDQUFDLENBQUMsQ0FBQztNQUMvRCxJQUFJLElBQUksQ0FBQ3RHLFlBQVksS0FBSyxLQUFLLElBQUkwRixHQUFHLENBQUNDLFFBQVEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDUyxXQUFXLEVBQUU7UUFDaEZmLGNBQWMsR0FBRyxJQUFJOztRQUdyQnJDLFVBQVUsQ0FBQ3VELG1CQUFtQixHQUFHLElBQUk7TUFDdkM7O01BR0EsSUFBSWxCLGNBQWMsSUFBSSxDQUFDZSxXQUFXLEVBQUU7UUFDbEMsS0FBSyxNQUFNSSxJQUFJLElBQUlkLEdBQUcsQ0FBQ00sS0FBSyxDQUFDUyxPQUFHLENBQUMsRUFBRTtVQUNqQ3pILFFBQVEsQ0FBQzBILEtBQUssQ0FBQ0YsSUFBSSxDQUFDO1VBQ3BCLElBQUlBLElBQUksRUFBRTtZQUNSeEQsVUFBVSxDQUFDMkQsa0JBQWtCLElBQUssR0FBRUYsT0FBSSxHQUFFRCxJQUFLLEVBQUM7VUFDbEQ7UUFDRjtNQUNGO0lBQ0YsQ0FBQyxDQUFDO0lBRUYsT0FBT3hELFVBQVU7RUFDbkI7RUFFQSxNQUFNRCxLQUFLLENBQUVXLFNBQVMsR0FBRyxLQUFLLEVBQUU7SUFDOUIsSUFBSSxDQUFDVixVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUNvQixnQkFBZ0IsQ0FBQ1YsU0FBUyxDQUFDO0lBRXhELElBQUksQ0FBQ1YsVUFBVSxDQUFDMkQsa0JBQWtCLEdBQUcsRUFBRTs7SUFJdkMsT0FBTyxNQUFNLElBQUkxRCxpQkFBQyxDQUFDLENBQUMyRCxPQUFPLEVBQUVDLE1BQU0sS0FBSztNQUN0QyxJQUFJLENBQUM3RCxVQUFVLENBQUN3QyxFQUFFLENBQUMsTUFBTSxFQUFFLE9BQU9zQixJQUFJLEVBQUVDLE1BQU0sS0FBSztRQUNqRC9ILFFBQVEsQ0FBQzBILEtBQUssQ0FBRSxnQ0FBK0JJLElBQUssaUJBQWdCQyxNQUFPLEdBQUUsQ0FBQztRQUU5RSxJQUFJLElBQUksQ0FBQy9HLFlBQVksSUFBSSxJQUFJLENBQUNnRCxVQUFVLENBQUM0QyxXQUFXLEVBQUU7VUFDcEQ1RyxRQUFRLENBQUMwSCxLQUFLLENBQUUsb0NBQW1DLElBQUksQ0FBQzFELFVBQVUsQ0FBQzRDLFdBQVksSUFBRyxDQUFDO1VBQ25GLElBQUk7WUFDRixJQUFJb0IsSUFBSSxHQUFHLE1BQU1DLFdBQUUsQ0FBQ0MsUUFBUSxDQUFDLElBQUksQ0FBQ2xFLFVBQVUsQ0FBQzRDLFdBQVcsRUFBRSxNQUFNLENBQUM7WUFDakUsS0FBSyxJQUFJWSxJQUFJLElBQUlRLElBQUksQ0FBQ2hCLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtjQUNqQ2hILFFBQVEsQ0FBQzBILEtBQUssQ0FBQ0YsSUFBSSxDQUFDO1lBQ3RCO1VBQ0YsQ0FBQyxDQUFDLE9BQU90RSxHQUFHLEVBQUU7WUFDWmxELFFBQVEsQ0FBQzBILEtBQUssQ0FBRSwwQ0FBeUN4RSxHQUFHLENBQUNFLE9BQVEsR0FBRSxDQUFDO1VBQzFFO1FBQ0Y7UUFDQSxJQUFJLENBQUNZLFVBQVUsQ0FBQ21FLGFBQWEsR0FBRyxJQUFJO1FBQ3BDLElBQUksSUFBSSxDQUFDbkUsVUFBVSxDQUFDdUQsbUJBQW1CLElBQUssQ0FBQ1EsTUFBTSxJQUFJRCxJQUFJLEtBQUssQ0FBRSxFQUFFO1VBQ2xFLE9BQU9ELE1BQU0sQ0FBQyxJQUFJTyxLQUFLLENBQUUsK0JBQThCTixJQUFLLEdBQUVMLE9BQUksRUFBQyxHQUNoRSw0QkFBMkJBLE9BQUksR0FBRSxJQUFJLENBQUN6RCxVQUFVLENBQUMyRCxrQkFBbUIsRUFBQyxDQUFDLENBQUM7UUFDNUU7UUFFQSxJQUFJakQsU0FBUyxFQUFFO1VBQ2IsT0FBT2tELE9BQU8sRUFBRTtRQUNsQjtNQUNGLENBQUMsQ0FBQztNQUVGLE9BQU8sQ0FBQyxZQUFZO1FBQ2xCLElBQUk7VUFDRixNQUFNUyxLQUFLLEdBQUcsSUFBSUMsZUFBTSxDQUFDQyxLQUFLLEVBQUUsQ0FBQ3hFLEtBQUssRUFBRTtVQUN4QyxNQUFNLElBQUksQ0FBQ0MsVUFBVSxDQUFDRCxLQUFLLENBQUMsSUFBSSxDQUFDO1VBQ2pDLElBQUksQ0FBQ1csU0FBUyxFQUFFO1lBQ2QsSUFBSThELE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQ0MsWUFBWSxDQUFDSixLQUFLLENBQUM7WUFDM0NULE9BQU8sQ0FBQ1ksTUFBTSxDQUFDO1VBQ2pCO1FBQ0YsQ0FBQyxDQUFDLE9BQU90RixHQUFHLEVBQUU7VUFDWixJQUFJd0YsR0FBRyxHQUFJLG1DQUFrQ3hGLEdBQUksRUFBQztVQUNsRCxJQUFJLENBQUMxQyxHQUFHLENBQUNrSCxLQUFLLENBQUNnQixHQUFHLENBQUM7VUFDbkJiLE1BQU0sQ0FBQyxJQUFJTyxLQUFLLENBQUNNLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCO01BQ0YsQ0FBQyxHQUFHO0lBQ04sQ0FBQyxDQUFDO0VBQ0o7RUFFQSxNQUFNRCxZQUFZLENBQUVKLEtBQUssRUFBRTtJQUV6QixJQUFJLENBQUM3SCxHQUFHLENBQUNpRCxLQUFLLENBQUUsaUJBQWdCLElBQUksQ0FBQy9CLGFBQWMsZ0NBQStCLENBQUM7SUFDbkYsSUFBSWlILGFBQWEsR0FBRyxJQUFJO0lBQ3hCLElBQUk7TUFDRixJQUFJQyxPQUFPLEdBQUdDLFFBQVEsQ0FBQyxJQUFJLENBQUNuSCxhQUFhLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQztNQUNwRCxNQUFNLElBQUFvSCx1QkFBYSxFQUFDRixPQUFPLEVBQUUsSUFBSSxFQUFFLFlBQVk7UUFDN0MsSUFBSSxJQUFJLENBQUM1RSxVQUFVLENBQUNtRSxhQUFhLEVBQUU7VUFFakM7UUFDRjtRQUNBLE1BQU1ZLFlBQVksR0FBRyxJQUFJLENBQUN6RyxjQUFjLENBQUMwRyxPQUFPO1FBQ2hELElBQUksQ0FBQzFHLGNBQWMsQ0FBQzBHLE9BQU8sR0FBRyxJQUFJO1FBQ2xDLElBQUk7VUFDRkwsYUFBYSxHQUFHLE1BQU0sSUFBSSxDQUFDckcsY0FBYyxDQUFDMkcsT0FBTyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUM7VUFDbkUsSUFBSU4sYUFBYSxJQUFJQSxhQUFhLENBQUNPLEdBQUcsSUFBSVAsYUFBYSxDQUFDTyxHQUFHLENBQUNDLEVBQUUsRUFBRTtZQUM5RCxJQUFJLENBQUNDLFFBQVEsR0FBR1QsYUFBYSxDQUFDTyxHQUFHLENBQUNDLEVBQUU7VUFDdEM7VUFDQSxJQUFJLENBQUMzSSxHQUFHLENBQUNpRCxLQUFLLENBQUUsNkJBQTRCLENBQUM7VUFDN0MsSUFBSSxDQUFDakQsR0FBRyxDQUFDaUQsS0FBSyxDQUFDNEYsSUFBSSxDQUFDQyxTQUFTLENBQUNYLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDeEQsQ0FBQyxDQUFDLE9BQU96RixHQUFHLEVBQUU7VUFDWixNQUFNLElBQUlrRixLQUFLLENBQUUsZ0RBQStDbEYsR0FBRyxDQUFDRSxPQUFRLEVBQUMsQ0FBQztRQUNoRixDQUFDLFNBQVM7VUFDUixJQUFJLENBQUNkLGNBQWMsQ0FBQzBHLE9BQU8sR0FBR0QsWUFBWTtRQUM1QztNQUNGLENBQUMsQ0FBQztNQUVGLElBQUksSUFBSSxDQUFDL0UsVUFBVSxDQUFDbUUsYUFBYSxFQUFFO1FBRWpDLE9BQU9RLGFBQWE7TUFDdEI7TUFFQSxJQUFJLENBQUNuSSxHQUFHLENBQUNpRCxLQUFLLENBQUUsNkNBQTRDNEUsS0FBSyxDQUFDa0IsV0FBVyxFQUFFLENBQUNDLGNBQWMsQ0FBQ0MsT0FBTyxDQUFDLENBQUMsQ0FBRSxJQUFHLENBQUM7SUFDaEgsQ0FBQyxDQUFDLE9BQU92RyxHQUFHLEVBQUU7TUFHWixJQUFJLENBQUMxQyxHQUFHLENBQUNpRCxLQUFLLENBQUNQLEdBQUcsQ0FBQ0UsT0FBTyxDQUFDO01BQzNCLElBQUksQ0FBQzVDLEdBQUcsQ0FBQzJDLElBQUksQ0FBRSxrRUFBaUUsQ0FBQztJQUNuRjtJQUNBLE9BQU93RixhQUFhO0VBQ3RCO0VBRUEsTUFBTWUsSUFBSSxHQUFJO0lBQ1osTUFBTSxJQUFBQyxrQkFBVyxFQUFDLFlBQVksRUFBRSxJQUFJLENBQUMzRixVQUFVLENBQUM7RUFDbEQ7QUFDRjtBQUFDO0FBQUEsZUFHYzdELFVBQVU7QUFBQSJ9
@@ -1 +1 @@
1
- {"version":3,"file":"xcodebuild.js","names":["DEFAULT_SIGNING_ID","PREBUILD_DELAY","RUNNER_SCHEME_IOS","LIB_SCHEME_IOS","ERROR_WRITING_ATTACHMENT","ERROR_COPYING_ATTACHMENT","IGNORED_ERRORS","RUNNER_SCHEME_TV","LIB_SCHEME_TV","xcodeLog","logger","getLogger","XcodeBuild","constructor","xcodeVersion","device","args","log","defaultLogger","realDevice","agentPath","bootstrapPath","platformVersion","platformName","iosSdkVersion","showXcodeLog","xcodeConfigFile","xcodeOrgId","xcodeSigningId","keychainPath","keychainPassword","prebuildWDA","usePrebuiltWDA","useSimpleBuildTest","useXctestrunFile","launchTimeout","wdaRemotePort","updatedWDABundleId","derivedDataPath","mjpegServerPort","prebuildDelay","_","isNumber","allowProvisioningDeviceRegistration","resultBundlePath","resultBundleVersion","init","noSessionProxy","deviveInfo","isRealDevice","udid","xctestrunFilePath","setXctestrunFile","resetProjectFile","updateProjectFile","retrieveDerivedDataPath","_derivedDataPathPromise","stdout","exec","err","warn","message","pattern","match","truncate","length","debug","path","dirname","normalize","reset","prebuild","start","xcodebuild","B","delay","cleanProject","tmpIsTvOS","isTvOS","libScheme","runnerScheme","scheme","getCommand","buildOnly","cmd","buildCmd","testCmd","push","versionMatch","RegExp","process","env","APPIUM_XCUITEST_TREAT_WARNINGS_AS_ERRORS","createSubProcess","setRealDeviceSecurity","generateXcodeConfigFile","join","Object","assign","USE_PORT","WDA_PRODUCT_BUNDLE_IDENTIFIER","WDA_RUNNER_BUNDLE_ID","MJPEG_SERVER_PORT","upgradeTimestamp","getWDAUpgradeTimestamp","UPGRADE_TIMESTAMP","SubProcess","cwd","detached","stdio","logXcodeOutput","logMsg","isBoolean","on","stderr","out","includes","logLocation","first","remove","trim","split","v","startsWith","sep","ignoreError","some","x","_wda_error_occurred","line","EOL","error","_wda_error_message","resolve","reject","code","signal","data","fs","readFile","processExited","Error","timer","timing","Timer","status","waitForStart","msg","currentStatus","retries","parseInt","retryInterval","proxyTimeout","timeout","command","ios","ip","agentUrl","JSON","stringify","getDuration","asMilliSeconds","toFixed","quit","killProcess"],"sources":["../../lib/xcodebuild.js"],"sourcesContent":["import { retryInterval } from 'asyncbox';\nimport { SubProcess, exec } from 'teen_process';\nimport { fs, logger, timing } from 'appium/support';\nimport defaultLogger from './logger';\nimport B from 'bluebird';\nimport {\n setRealDeviceSecurity, generateXcodeConfigFile, setXctestrunFile,\n updateProjectFile, resetProjectFile, killProcess,\n getWDAUpgradeTimestamp, isTvOS } from './utils';\nimport _ from 'lodash';\nimport path from 'path';\nimport { EOL } from 'os';\nimport { WDA_RUNNER_BUNDLE_ID } from './constants';\n\n\nconst DEFAULT_SIGNING_ID = 'iPhone Developer';\nconst PREBUILD_DELAY = 0;\nconst RUNNER_SCHEME_IOS = 'WebDriverAgentRunner';\nconst LIB_SCHEME_IOS = 'WebDriverAgentLib';\n\nconst ERROR_WRITING_ATTACHMENT = 'Error writing attachment data to file';\nconst ERROR_COPYING_ATTACHMENT = 'Error copying testing attachment';\nconst IGNORED_ERRORS = [\n ERROR_WRITING_ATTACHMENT,\n ERROR_COPYING_ATTACHMENT,\n 'Failed to remove screenshot at path',\n];\n\nconst RUNNER_SCHEME_TV = 'WebDriverAgentRunner_tvOS';\nconst LIB_SCHEME_TV = 'WebDriverAgentLib_tvOS';\n\nconst xcodeLog = logger.getLogger('Xcode');\n\n\nclass XcodeBuild {\n constructor (xcodeVersion, device, args = {}, log = null) {\n this.xcodeVersion = xcodeVersion;\n\n this.device = device;\n this.log = log ?? defaultLogger;\n\n this.realDevice = args.realDevice;\n\n this.agentPath = args.agentPath;\n this.bootstrapPath = args.bootstrapPath;\n\n this.platformVersion = args.platformVersion;\n this.platformName = args.platformName;\n this.iosSdkVersion = args.iosSdkVersion;\n\n this.showXcodeLog = args.showXcodeLog;\n\n this.xcodeConfigFile = args.xcodeConfigFile;\n this.xcodeOrgId = args.xcodeOrgId;\n this.xcodeSigningId = args.xcodeSigningId || DEFAULT_SIGNING_ID;\n this.keychainPath = args.keychainPath;\n this.keychainPassword = args.keychainPassword;\n\n this.prebuildWDA = args.prebuildWDA;\n this.usePrebuiltWDA = args.usePrebuiltWDA;\n this.useSimpleBuildTest = args.useSimpleBuildTest;\n\n this.useXctestrunFile = args.useXctestrunFile;\n\n this.launchTimeout = args.launchTimeout;\n\n this.wdaRemotePort = args.wdaRemotePort;\n\n this.updatedWDABundleId = args.updatedWDABundleId;\n this.derivedDataPath = args.derivedDataPath;\n\n this.mjpegServerPort = args.mjpegServerPort;\n\n this.prebuildDelay = _.isNumber(args.prebuildDelay) ? args.prebuildDelay : PREBUILD_DELAY;\n\n this.allowProvisioningDeviceRegistration = args.allowProvisioningDeviceRegistration;\n\n this.resultBundlePath = args.resultBundlePath;\n this.resultBundleVersion = args.resultBundleVersion;\n }\n\n async init (noSessionProxy) {\n this.noSessionProxy = noSessionProxy;\n\n if (this.useXctestrunFile) {\n const deviveInfo = {\n isRealDevice: this.realDevice,\n udid: this.device.udid,\n platformVersion: this.platformVersion,\n platformName: this.platformName\n };\n this.xctestrunFilePath = await setXctestrunFile(deviveInfo, this.iosSdkVersion, this.bootstrapPath, this.wdaRemotePort);\n return;\n }\n\n // if necessary, update the bundleId to user's specification\n if (this.realDevice) {\n // In case the project still has the user specific bundle ID, reset the project file first.\n // - We do this reset even if updatedWDABundleId is not specified,\n // since the previous updatedWDABundleId test has generated the user specific bundle ID project file.\n // - We don't call resetProjectFile for simulator,\n // since simulator test run will work with any user specific bundle ID.\n await resetProjectFile(this.agentPath);\n if (this.updatedWDABundleId) {\n await updateProjectFile(this.agentPath, this.updatedWDABundleId);\n }\n }\n }\n\n async retrieveDerivedDataPath () {\n if (this.derivedDataPath) {\n return this.derivedDataPath;\n }\n\n // avoid race conditions\n if (this._derivedDataPathPromise) {\n return await this._derivedDataPathPromise;\n }\n\n this._derivedDataPathPromise = (async () => {\n let stdout;\n try {\n ({stdout} = await exec('xcodebuild', ['-project', this.agentPath, '-showBuildSettings']));\n } catch (err) {\n this.log.warn(`Cannot retrieve WDA build settings. Original error: ${err.message}`);\n return;\n }\n\n const pattern = /^\\s*BUILD_DIR\\s+=\\s+(\\/.*)/m;\n const match = pattern.exec(stdout);\n if (!match) {\n this.log.warn(`Cannot parse WDA build dir from ${_.truncate(stdout, {length: 300})}`);\n return;\n }\n this.log.debug(`Parsed BUILD_DIR configuration value: '${match[1]}'`);\n // Derived data root is two levels higher over the build dir\n this.derivedDataPath = path.dirname(path.dirname(path.normalize(match[1])));\n this.log.debug(`Got derived data root: '${this.derivedDataPath}'`);\n return this.derivedDataPath;\n })();\n return await this._derivedDataPathPromise;\n }\n\n async reset () {\n // if necessary, reset the bundleId to original value\n if (this.realDevice && this.updatedWDABundleId) {\n await resetProjectFile(this.agentPath);\n }\n }\n\n async prebuild () {\n // first do a build phase\n this.log.debug('Pre-building WDA before launching test');\n this.usePrebuiltWDA = true;\n await this.start(true);\n\n this.xcodebuild = null;\n\n // pause a moment\n await B.delay(this.prebuildDelay);\n }\n\n async cleanProject () {\n const tmpIsTvOS = isTvOS(this.platformName);\n const libScheme = tmpIsTvOS ? LIB_SCHEME_TV : LIB_SCHEME_IOS;\n const runnerScheme = tmpIsTvOS ? RUNNER_SCHEME_TV : RUNNER_SCHEME_IOS;\n\n for (const scheme of [libScheme, runnerScheme]) {\n this.log.debug(`Cleaning the project scheme '${scheme}' to make sure there are no leftovers from previous installs`);\n await exec('xcodebuild', [\n 'clean',\n '-project', this.agentPath,\n '-scheme', scheme,\n ]);\n }\n }\n\n getCommand (buildOnly = false) {\n let cmd = 'xcodebuild';\n let args;\n\n // figure out the targets for xcodebuild\n const [buildCmd, testCmd] = this.useSimpleBuildTest ? ['build', 'test'] : ['build-for-testing', 'test-without-building'];\n if (buildOnly) {\n args = [buildCmd];\n } else if (this.usePrebuiltWDA || this.useXctestrunFile) {\n args = [testCmd];\n } else {\n args = [buildCmd, testCmd];\n }\n\n if (this.allowProvisioningDeviceRegistration) {\n // To -allowProvisioningDeviceRegistration flag takes effect, -allowProvisioningUpdates needs to be passed as well.\n args.push('-allowProvisioningUpdates', '-allowProvisioningDeviceRegistration');\n }\n\n if (this.resultBundlePath) {\n args.push('-resultBundlePath', this.resultBundlePath);\n }\n\n if (this.resultBundleVersion) {\n args.push('-resultBundleVersion', this.resultBundleVersion);\n }\n\n if (this.useXctestrunFile) {\n args.push('-xctestrun', this.xctestrunFilePath);\n } else {\n const runnerScheme = isTvOS(this.platformName) ? RUNNER_SCHEME_TV : RUNNER_SCHEME_IOS;\n args.push('-project', this.agentPath, '-scheme', runnerScheme);\n if (this.derivedDataPath) {\n args.push('-derivedDataPath', this.derivedDataPath);\n }\n }\n args.push('-destination', `id=${this.device.udid}`);\n\n const versionMatch = new RegExp(/^(\\d+)\\.(\\d+)/).exec(this.platformVersion);\n if (versionMatch) {\n args.push(`IPHONEOS_DEPLOYMENT_TARGET=${versionMatch[1]}.${versionMatch[2]}`);\n } else {\n this.log.warn(`Cannot parse major and minor version numbers from platformVersion \"${this.platformVersion}\". ` +\n 'Will build for the default platform instead');\n }\n\n if (this.realDevice && this.xcodeConfigFile) {\n this.log.debug(`Using Xcode configuration file: '${this.xcodeConfigFile}'`);\n args.push('-xcconfig', this.xcodeConfigFile);\n }\n\n if (!process.env.APPIUM_XCUITEST_TREAT_WARNINGS_AS_ERRORS) {\n // This sometimes helps to survive Xcode updates\n args.push('GCC_TREAT_WARNINGS_AS_ERRORS=0');\n }\n\n // Below option slightly reduces build time in debug build\n // with preventing to generate `/Index/DataStore` which is used by development\n args.push('COMPILER_INDEX_STORE_ENABLE=NO');\n\n return {cmd, args};\n }\n\n async createSubProcess (buildOnly = false) {\n if (!this.useXctestrunFile && this.realDevice) {\n if (this.keychainPath && this.keychainPassword) {\n await setRealDeviceSecurity(this.keychainPath, this.keychainPassword);\n }\n if (this.xcodeOrgId && this.xcodeSigningId && !this.xcodeConfigFile) {\n this.xcodeConfigFile = await generateXcodeConfigFile(this.xcodeOrgId, this.xcodeSigningId);\n }\n }\n\n const {cmd, args} = this.getCommand(buildOnly);\n this.log.debug(`Beginning ${buildOnly ? 'build' : 'test'} with command '${cmd} ${args.join(' ')}' ` +\n `in directory '${this.bootstrapPath}'`);\n const env = Object.assign({}, process.env, {\n USE_PORT: this.wdaRemotePort,\n WDA_PRODUCT_BUNDLE_IDENTIFIER: this.updatedWDABundleId || WDA_RUNNER_BUNDLE_ID,\n });\n if (this.mjpegServerPort) {\n // https://github.com/appium/WebDriverAgent/pull/105\n env.MJPEG_SERVER_PORT = this.mjpegServerPort;\n }\n const upgradeTimestamp = await getWDAUpgradeTimestamp(this.bootstrapPath);\n if (upgradeTimestamp) {\n env.UPGRADE_TIMESTAMP = upgradeTimestamp;\n }\n const xcodebuild = new SubProcess(cmd, args, {\n cwd: this.bootstrapPath,\n env,\n detached: true,\n stdio: ['ignore', 'pipe', 'pipe'],\n });\n\n let logXcodeOutput = !!this.showXcodeLog;\n const logMsg = _.isBoolean(this.showXcodeLog)\n ? `Output from xcodebuild ${this.showXcodeLog ? 'will' : 'will not'} be logged`\n : 'Output from xcodebuild will only be logged if any errors are present there';\n this.log.debug(`${logMsg}. To change this, use 'showXcodeLog' desired capability`);\n xcodebuild.on('output', (stdout, stderr) => {\n let out = stdout || stderr;\n // we want to pull out the log file that is created, and highlight it\n // for diagnostic purposes\n if (out.includes('Writing diagnostic log for test session to')) {\n // pull out the first line that begins with the path separator\n // which *should* be the line indicating the log file generated\n xcodebuild.logLocation = _.first(_.remove(out.trim().split('\\n'), (v) => v.startsWith(path.sep)));\n xcodeLog.debug(`Log file for xcodebuild test: ${xcodebuild.logLocation}`);\n }\n\n // if we have an error we want to output the logs\n // otherwise the failure is inscrutible\n // but do not log permission errors from trying to write to attachments folder\n const ignoreError = IGNORED_ERRORS.some((x) => out.includes(x));\n if (this.showXcodeLog !== false && out.includes('Error Domain=') && !ignoreError) {\n logXcodeOutput = true;\n\n // terrible hack to handle case where xcode return 0 but is failing\n xcodebuild._wda_error_occurred = true;\n }\n\n // do not log permission errors from trying to write to attachments folder\n if (logXcodeOutput && !ignoreError) {\n for (const line of out.split(EOL)) {\n xcodeLog.error(line);\n if (line) {\n xcodebuild._wda_error_message += `${EOL}${line}`;\n }\n }\n }\n });\n\n return xcodebuild;\n }\n\n async start (buildOnly = false) {\n this.xcodebuild = await this.createSubProcess(buildOnly);\n // Store xcodebuild message\n this.xcodebuild._wda_error_message = '';\n\n // wrap the start procedure in a promise so that we can catch, and report,\n // any startup errors that are thrown as events\n return await new B((resolve, reject) => {\n this.xcodebuild.on('exit', async (code, signal) => {\n xcodeLog.error(`xcodebuild exited with code '${code}' and signal '${signal}'`);\n // print out the xcodebuild file if users have asked for it\n if (this.showXcodeLog && this.xcodebuild.logLocation) {\n xcodeLog.error(`Contents of xcodebuild log file '${this.xcodebuild.logLocation}':`);\n try {\n let data = await fs.readFile(this.xcodebuild.logLocation, 'utf8');\n for (let line of data.split('\\n')) {\n xcodeLog.error(line);\n }\n } catch (err) {\n xcodeLog.error(`Unable to access xcodebuild log file: '${err.message}'`);\n }\n }\n this.xcodebuild.processExited = true;\n if (this.xcodebuild._wda_error_occurred || (!signal && code !== 0)) {\n return reject(new Error(`xcodebuild failed with code ${code}${EOL}` +\n `xcodebuild error message:${EOL}${this.xcodebuild._wda_error_message}`));\n }\n // in the case of just building, the process will exit and that is our finish\n if (buildOnly) {\n return resolve();\n }\n });\n\n return (async () => {\n try {\n const timer = new timing.Timer().start();\n await this.xcodebuild.start(true);\n if (!buildOnly) {\n let status = await this.waitForStart(timer);\n resolve(status);\n }\n } catch (err) {\n let msg = `Unable to start WebDriverAgent: ${err}`;\n this.log.error(msg);\n reject(new Error(msg));\n }\n })();\n });\n }\n\n async waitForStart (timer) {\n // try to connect once every 0.5 seconds, until `launchTimeout` is up\n this.log.debug(`Waiting up to ${this.launchTimeout}ms for WebDriverAgent to start`);\n let currentStatus = null;\n try {\n let retries = parseInt(this.launchTimeout / 500, 10);\n await retryInterval(retries, 1000, async () => {\n if (this.xcodebuild.processExited) {\n // there has been an error elsewhere and we need to short-circuit\n return;\n }\n const proxyTimeout = this.noSessionProxy.timeout;\n this.noSessionProxy.timeout = 1000;\n try {\n currentStatus = await this.noSessionProxy.command('/status', 'GET');\n if (currentStatus && currentStatus.ios && currentStatus.ios.ip) {\n this.agentUrl = currentStatus.ios.ip;\n }\n this.log.debug(`WebDriverAgent information:`);\n this.log.debug(JSON.stringify(currentStatus, null, 2));\n } catch (err) {\n throw new Error(`Unable to connect to running WebDriverAgent: ${err.message}`);\n } finally {\n this.noSessionProxy.timeout = proxyTimeout;\n }\n });\n\n if (this.xcodebuild.processExited) {\n // there has been an error elsewhere and we need to short-circuit\n return currentStatus;\n }\n\n this.log.debug(`WebDriverAgent successfully started after ${timer.getDuration().asMilliSeconds.toFixed(0)}ms`);\n } catch (err) {\n // at this point, if we have not had any errors from xcode itself (reported\n // elsewhere), we can let this go through and try to create the session\n this.log.debug(err.message);\n this.log.warn(`Getting status of WebDriverAgent on device timed out. Continuing`);\n }\n return currentStatus;\n }\n\n async quit () {\n await killProcess('xcodebuild', this.xcodebuild);\n }\n}\n\nexport { XcodeBuild };\nexport default XcodeBuild;\n"],"mappings":"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"}
1
+ {"version":3,"file":"xcodebuild.js","names":["DEFAULT_SIGNING_ID","PREBUILD_DELAY","RUNNER_SCHEME_IOS","LIB_SCHEME_IOS","ERROR_WRITING_ATTACHMENT","ERROR_COPYING_ATTACHMENT","IGNORED_ERRORS","RUNNER_SCHEME_TV","LIB_SCHEME_TV","xcodeLog","logger","getLogger","XcodeBuild","constructor","xcodeVersion","device","args","log","defaultLogger","realDevice","agentPath","bootstrapPath","platformVersion","platformName","iosSdkVersion","showXcodeLog","xcodeConfigFile","xcodeOrgId","xcodeSigningId","keychainPath","keychainPassword","prebuildWDA","usePrebuiltWDA","useSimpleBuildTest","useXctestrunFile","launchTimeout","wdaRemotePort","updatedWDABundleId","derivedDataPath","mjpegServerPort","prebuildDelay","_","isNumber","allowProvisioningDeviceRegistration","resultBundlePath","resultBundleVersion","init","noSessionProxy","deviveInfo","isRealDevice","udid","xctestrunFilePath","setXctestrunFile","resetProjectFile","updateProjectFile","retrieveDerivedDataPath","_derivedDataPathPromise","stdout","exec","err","warn","message","pattern","match","truncate","length","debug","path","dirname","normalize","reset","prebuild","start","xcodebuild","B","delay","cleanProject","tmpIsTvOS","isTvOS","libScheme","runnerScheme","scheme","getCommand","buildOnly","cmd","buildCmd","testCmd","push","versionMatch","RegExp","process","env","APPIUM_XCUITEST_TREAT_WARNINGS_AS_ERRORS","createSubProcess","setRealDeviceSecurity","generateXcodeConfigFile","join","Object","assign","USE_PORT","WDA_PRODUCT_BUNDLE_IDENTIFIER","WDA_RUNNER_BUNDLE_ID","MJPEG_SERVER_PORT","upgradeTimestamp","getWDAUpgradeTimestamp","UPGRADE_TIMESTAMP","SubProcess","cwd","detached","stdio","logXcodeOutput","logMsg","isBoolean","on","stderr","out","includes","logLocation","first","remove","trim","split","v","startsWith","sep","ignoreError","some","x","_wda_error_occurred","line","EOL","error","_wda_error_message","resolve","reject","code","signal","data","fs","readFile","processExited","Error","timer","timing","Timer","status","waitForStart","msg","currentStatus","retries","parseInt","retryInterval","proxyTimeout","timeout","command","ios","ip","agentUrl","JSON","stringify","getDuration","asMilliSeconds","toFixed","quit","killProcess"],"sources":["../../lib/xcodebuild.js"],"sourcesContent":["import { retryInterval } from 'asyncbox';\nimport { SubProcess, exec } from 'teen_process';\nimport { fs, logger, timing } from '@appium/support';\nimport defaultLogger from './logger';\nimport B from 'bluebird';\nimport {\n setRealDeviceSecurity, generateXcodeConfigFile, setXctestrunFile,\n updateProjectFile, resetProjectFile, killProcess,\n getWDAUpgradeTimestamp, isTvOS } from './utils';\nimport _ from 'lodash';\nimport path from 'path';\nimport { EOL } from 'os';\nimport { WDA_RUNNER_BUNDLE_ID } from './constants';\n\n\nconst DEFAULT_SIGNING_ID = 'iPhone Developer';\nconst PREBUILD_DELAY = 0;\nconst RUNNER_SCHEME_IOS = 'WebDriverAgentRunner';\nconst LIB_SCHEME_IOS = 'WebDriverAgentLib';\n\nconst ERROR_WRITING_ATTACHMENT = 'Error writing attachment data to file';\nconst ERROR_COPYING_ATTACHMENT = 'Error copying testing attachment';\nconst IGNORED_ERRORS = [\n ERROR_WRITING_ATTACHMENT,\n ERROR_COPYING_ATTACHMENT,\n 'Failed to remove screenshot at path',\n];\n\nconst RUNNER_SCHEME_TV = 'WebDriverAgentRunner_tvOS';\nconst LIB_SCHEME_TV = 'WebDriverAgentLib_tvOS';\n\nconst xcodeLog = logger.getLogger('Xcode');\n\n\nclass XcodeBuild {\n constructor (xcodeVersion, device, args = {}, log = null) {\n this.xcodeVersion = xcodeVersion;\n\n this.device = device;\n this.log = log ?? defaultLogger;\n\n this.realDevice = args.realDevice;\n\n this.agentPath = args.agentPath;\n this.bootstrapPath = args.bootstrapPath;\n\n this.platformVersion = args.platformVersion;\n this.platformName = args.platformName;\n this.iosSdkVersion = args.iosSdkVersion;\n\n this.showXcodeLog = args.showXcodeLog;\n\n this.xcodeConfigFile = args.xcodeConfigFile;\n this.xcodeOrgId = args.xcodeOrgId;\n this.xcodeSigningId = args.xcodeSigningId || DEFAULT_SIGNING_ID;\n this.keychainPath = args.keychainPath;\n this.keychainPassword = args.keychainPassword;\n\n this.prebuildWDA = args.prebuildWDA;\n this.usePrebuiltWDA = args.usePrebuiltWDA;\n this.useSimpleBuildTest = args.useSimpleBuildTest;\n\n this.useXctestrunFile = args.useXctestrunFile;\n\n this.launchTimeout = args.launchTimeout;\n\n this.wdaRemotePort = args.wdaRemotePort;\n\n this.updatedWDABundleId = args.updatedWDABundleId;\n this.derivedDataPath = args.derivedDataPath;\n\n this.mjpegServerPort = args.mjpegServerPort;\n\n this.prebuildDelay = _.isNumber(args.prebuildDelay) ? args.prebuildDelay : PREBUILD_DELAY;\n\n this.allowProvisioningDeviceRegistration = args.allowProvisioningDeviceRegistration;\n\n this.resultBundlePath = args.resultBundlePath;\n this.resultBundleVersion = args.resultBundleVersion;\n }\n\n async init (noSessionProxy) {\n this.noSessionProxy = noSessionProxy;\n\n if (this.useXctestrunFile) {\n const deviveInfo = {\n isRealDevice: this.realDevice,\n udid: this.device.udid,\n platformVersion: this.platformVersion,\n platformName: this.platformName\n };\n this.xctestrunFilePath = await setXctestrunFile(deviveInfo, this.iosSdkVersion, this.bootstrapPath, this.wdaRemotePort);\n return;\n }\n\n // if necessary, update the bundleId to user's specification\n if (this.realDevice) {\n // In case the project still has the user specific bundle ID, reset the project file first.\n // - We do this reset even if updatedWDABundleId is not specified,\n // since the previous updatedWDABundleId test has generated the user specific bundle ID project file.\n // - We don't call resetProjectFile for simulator,\n // since simulator test run will work with any user specific bundle ID.\n await resetProjectFile(this.agentPath);\n if (this.updatedWDABundleId) {\n await updateProjectFile(this.agentPath, this.updatedWDABundleId);\n }\n }\n }\n\n async retrieveDerivedDataPath () {\n if (this.derivedDataPath) {\n return this.derivedDataPath;\n }\n\n // avoid race conditions\n if (this._derivedDataPathPromise) {\n return await this._derivedDataPathPromise;\n }\n\n this._derivedDataPathPromise = (async () => {\n let stdout;\n try {\n ({stdout} = await exec('xcodebuild', ['-project', this.agentPath, '-showBuildSettings']));\n } catch (err) {\n this.log.warn(`Cannot retrieve WDA build settings. Original error: ${err.message}`);\n return;\n }\n\n const pattern = /^\\s*BUILD_DIR\\s+=\\s+(\\/.*)/m;\n const match = pattern.exec(stdout);\n if (!match) {\n this.log.warn(`Cannot parse WDA build dir from ${_.truncate(stdout, {length: 300})}`);\n return;\n }\n this.log.debug(`Parsed BUILD_DIR configuration value: '${match[1]}'`);\n // Derived data root is two levels higher over the build dir\n this.derivedDataPath = path.dirname(path.dirname(path.normalize(match[1])));\n this.log.debug(`Got derived data root: '${this.derivedDataPath}'`);\n return this.derivedDataPath;\n })();\n return await this._derivedDataPathPromise;\n }\n\n async reset () {\n // if necessary, reset the bundleId to original value\n if (this.realDevice && this.updatedWDABundleId) {\n await resetProjectFile(this.agentPath);\n }\n }\n\n async prebuild () {\n // first do a build phase\n this.log.debug('Pre-building WDA before launching test');\n this.usePrebuiltWDA = true;\n await this.start(true);\n\n this.xcodebuild = null;\n\n // pause a moment\n await B.delay(this.prebuildDelay);\n }\n\n async cleanProject () {\n const tmpIsTvOS = isTvOS(this.platformName);\n const libScheme = tmpIsTvOS ? LIB_SCHEME_TV : LIB_SCHEME_IOS;\n const runnerScheme = tmpIsTvOS ? RUNNER_SCHEME_TV : RUNNER_SCHEME_IOS;\n\n for (const scheme of [libScheme, runnerScheme]) {\n this.log.debug(`Cleaning the project scheme '${scheme}' to make sure there are no leftovers from previous installs`);\n await exec('xcodebuild', [\n 'clean',\n '-project', this.agentPath,\n '-scheme', scheme,\n ]);\n }\n }\n\n getCommand (buildOnly = false) {\n let cmd = 'xcodebuild';\n let args;\n\n // figure out the targets for xcodebuild\n const [buildCmd, testCmd] = this.useSimpleBuildTest ? ['build', 'test'] : ['build-for-testing', 'test-without-building'];\n if (buildOnly) {\n args = [buildCmd];\n } else if (this.usePrebuiltWDA || this.useXctestrunFile) {\n args = [testCmd];\n } else {\n args = [buildCmd, testCmd];\n }\n\n if (this.allowProvisioningDeviceRegistration) {\n // To -allowProvisioningDeviceRegistration flag takes effect, -allowProvisioningUpdates needs to be passed as well.\n args.push('-allowProvisioningUpdates', '-allowProvisioningDeviceRegistration');\n }\n\n if (this.resultBundlePath) {\n args.push('-resultBundlePath', this.resultBundlePath);\n }\n\n if (this.resultBundleVersion) {\n args.push('-resultBundleVersion', this.resultBundleVersion);\n }\n\n if (this.useXctestrunFile) {\n args.push('-xctestrun', this.xctestrunFilePath);\n } else {\n const runnerScheme = isTvOS(this.platformName) ? RUNNER_SCHEME_TV : RUNNER_SCHEME_IOS;\n args.push('-project', this.agentPath, '-scheme', runnerScheme);\n if (this.derivedDataPath) {\n args.push('-derivedDataPath', this.derivedDataPath);\n }\n }\n args.push('-destination', `id=${this.device.udid}`);\n\n const versionMatch = new RegExp(/^(\\d+)\\.(\\d+)/).exec(this.platformVersion);\n if (versionMatch) {\n args.push(`IPHONEOS_DEPLOYMENT_TARGET=${versionMatch[1]}.${versionMatch[2]}`);\n } else {\n this.log.warn(`Cannot parse major and minor version numbers from platformVersion \"${this.platformVersion}\". ` +\n 'Will build for the default platform instead');\n }\n\n if (this.realDevice && this.xcodeConfigFile) {\n this.log.debug(`Using Xcode configuration file: '${this.xcodeConfigFile}'`);\n args.push('-xcconfig', this.xcodeConfigFile);\n }\n\n if (!process.env.APPIUM_XCUITEST_TREAT_WARNINGS_AS_ERRORS) {\n // This sometimes helps to survive Xcode updates\n args.push('GCC_TREAT_WARNINGS_AS_ERRORS=0');\n }\n\n // Below option slightly reduces build time in debug build\n // with preventing to generate `/Index/DataStore` which is used by development\n args.push('COMPILER_INDEX_STORE_ENABLE=NO');\n\n return {cmd, args};\n }\n\n async createSubProcess (buildOnly = false) {\n if (!this.useXctestrunFile && this.realDevice) {\n if (this.keychainPath && this.keychainPassword) {\n await setRealDeviceSecurity(this.keychainPath, this.keychainPassword);\n }\n if (this.xcodeOrgId && this.xcodeSigningId && !this.xcodeConfigFile) {\n this.xcodeConfigFile = await generateXcodeConfigFile(this.xcodeOrgId, this.xcodeSigningId);\n }\n }\n\n const {cmd, args} = this.getCommand(buildOnly);\n this.log.debug(`Beginning ${buildOnly ? 'build' : 'test'} with command '${cmd} ${args.join(' ')}' ` +\n `in directory '${this.bootstrapPath}'`);\n const env = Object.assign({}, process.env, {\n USE_PORT: this.wdaRemotePort,\n WDA_PRODUCT_BUNDLE_IDENTIFIER: this.updatedWDABundleId || WDA_RUNNER_BUNDLE_ID,\n });\n if (this.mjpegServerPort) {\n // https://github.com/appium/WebDriverAgent/pull/105\n env.MJPEG_SERVER_PORT = this.mjpegServerPort;\n }\n const upgradeTimestamp = await getWDAUpgradeTimestamp(this.bootstrapPath);\n if (upgradeTimestamp) {\n env.UPGRADE_TIMESTAMP = upgradeTimestamp;\n }\n const xcodebuild = new SubProcess(cmd, args, {\n cwd: this.bootstrapPath,\n env,\n detached: true,\n stdio: ['ignore', 'pipe', 'pipe'],\n });\n\n let logXcodeOutput = !!this.showXcodeLog;\n const logMsg = _.isBoolean(this.showXcodeLog)\n ? `Output from xcodebuild ${this.showXcodeLog ? 'will' : 'will not'} be logged`\n : 'Output from xcodebuild will only be logged if any errors are present there';\n this.log.debug(`${logMsg}. To change this, use 'showXcodeLog' desired capability`);\n xcodebuild.on('output', (stdout, stderr) => {\n let out = stdout || stderr;\n // we want to pull out the log file that is created, and highlight it\n // for diagnostic purposes\n if (out.includes('Writing diagnostic log for test session to')) {\n // pull out the first line that begins with the path separator\n // which *should* be the line indicating the log file generated\n xcodebuild.logLocation = _.first(_.remove(out.trim().split('\\n'), (v) => v.startsWith(path.sep)));\n xcodeLog.debug(`Log file for xcodebuild test: ${xcodebuild.logLocation}`);\n }\n\n // if we have an error we want to output the logs\n // otherwise the failure is inscrutible\n // but do not log permission errors from trying to write to attachments folder\n const ignoreError = IGNORED_ERRORS.some((x) => out.includes(x));\n if (this.showXcodeLog !== false && out.includes('Error Domain=') && !ignoreError) {\n logXcodeOutput = true;\n\n // terrible hack to handle case where xcode return 0 but is failing\n xcodebuild._wda_error_occurred = true;\n }\n\n // do not log permission errors from trying to write to attachments folder\n if (logXcodeOutput && !ignoreError) {\n for (const line of out.split(EOL)) {\n xcodeLog.error(line);\n if (line) {\n xcodebuild._wda_error_message += `${EOL}${line}`;\n }\n }\n }\n });\n\n return xcodebuild;\n }\n\n async start (buildOnly = false) {\n this.xcodebuild = await this.createSubProcess(buildOnly);\n // Store xcodebuild message\n this.xcodebuild._wda_error_message = '';\n\n // wrap the start procedure in a promise so that we can catch, and report,\n // any startup errors that are thrown as events\n return await new B((resolve, reject) => {\n this.xcodebuild.on('exit', async (code, signal) => {\n xcodeLog.error(`xcodebuild exited with code '${code}' and signal '${signal}'`);\n // print out the xcodebuild file if users have asked for it\n if (this.showXcodeLog && this.xcodebuild.logLocation) {\n xcodeLog.error(`Contents of xcodebuild log file '${this.xcodebuild.logLocation}':`);\n try {\n let data = await fs.readFile(this.xcodebuild.logLocation, 'utf8');\n for (let line of data.split('\\n')) {\n xcodeLog.error(line);\n }\n } catch (err) {\n xcodeLog.error(`Unable to access xcodebuild log file: '${err.message}'`);\n }\n }\n this.xcodebuild.processExited = true;\n if (this.xcodebuild._wda_error_occurred || (!signal && code !== 0)) {\n return reject(new Error(`xcodebuild failed with code ${code}${EOL}` +\n `xcodebuild error message:${EOL}${this.xcodebuild._wda_error_message}`));\n }\n // in the case of just building, the process will exit and that is our finish\n if (buildOnly) {\n return resolve();\n }\n });\n\n return (async () => {\n try {\n const timer = new timing.Timer().start();\n await this.xcodebuild.start(true);\n if (!buildOnly) {\n let status = await this.waitForStart(timer);\n resolve(status);\n }\n } catch (err) {\n let msg = `Unable to start WebDriverAgent: ${err}`;\n this.log.error(msg);\n reject(new Error(msg));\n }\n })();\n });\n }\n\n async waitForStart (timer) {\n // try to connect once every 0.5 seconds, until `launchTimeout` is up\n this.log.debug(`Waiting up to ${this.launchTimeout}ms for WebDriverAgent to start`);\n let currentStatus = null;\n try {\n let retries = parseInt(this.launchTimeout / 500, 10);\n await retryInterval(retries, 1000, async () => {\n if (this.xcodebuild.processExited) {\n // there has been an error elsewhere and we need to short-circuit\n return;\n }\n const proxyTimeout = this.noSessionProxy.timeout;\n this.noSessionProxy.timeout = 1000;\n try {\n currentStatus = await this.noSessionProxy.command('/status', 'GET');\n if (currentStatus && currentStatus.ios && currentStatus.ios.ip) {\n this.agentUrl = currentStatus.ios.ip;\n }\n this.log.debug(`WebDriverAgent information:`);\n this.log.debug(JSON.stringify(currentStatus, null, 2));\n } catch (err) {\n throw new Error(`Unable to connect to running WebDriverAgent: ${err.message}`);\n } finally {\n this.noSessionProxy.timeout = proxyTimeout;\n }\n });\n\n if (this.xcodebuild.processExited) {\n // there has been an error elsewhere and we need to short-circuit\n return currentStatus;\n }\n\n this.log.debug(`WebDriverAgent successfully started after ${timer.getDuration().asMilliSeconds.toFixed(0)}ms`);\n } catch (err) {\n // at this point, if we have not had any errors from xcode itself (reported\n // elsewhere), we can let this go through and try to create the session\n this.log.debug(err.message);\n this.log.warn(`Getting status of WebDriverAgent on device timed out. Continuing`);\n }\n return currentStatus;\n }\n\n async quit () {\n await killProcess('xcodebuild', this.xcodebuild);\n }\n}\n\nexport { XcodeBuild };\nexport default XcodeBuild;\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { fs } from 'appium/support';
1
+ import { fs } from '@appium/support';
2
2
  import _ from 'lodash';
3
3
  import { exec } from 'teen_process';
4
4
  import path from 'path';
package/lib/logger.js CHANGED
@@ -1,4 +1,4 @@
1
- import { logger } from 'appium/support';
1
+ import { logger } from '@appium/support';
2
2
 
3
3
  const log = logger.getLogger('WebDriverAgent');
4
4
 
@@ -1,4 +1,4 @@
1
- import { JWProxy } from 'appium/driver';
1
+ import { JWProxy } from '@appium/base-driver';
2
2
 
3
3
 
4
4
  class NoSessionProxy extends JWProxy {
package/lib/utils.js CHANGED
@@ -1,4 +1,4 @@
1
- import { fs, tempDir, plist } from 'appium/support';
1
+ import { fs, tempDir, plist } from '@appium/support';
2
2
  import { exec } from 'teen_process';
3
3
  import path from 'path';
4
4
  import log from './logger';
@@ -2,8 +2,8 @@ import _ from 'lodash';
2
2
  import path from 'path';
3
3
  import url from 'url';
4
4
  import B from 'bluebird';
5
- import { JWProxy } from 'appium/driver';
6
- import { fs, util, plist, mkdirp } from 'appium/support';
5
+ import { JWProxy } from '@appium/base-driver';
6
+ import { fs, util, plist, mkdirp } from '@appium/support';
7
7
  import defaultLogger from './logger';
8
8
  import { NoSessionProxy } from './no-session-proxy';
9
9
  import {
package/lib/xcodebuild.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { retryInterval } from 'asyncbox';
2
2
  import { SubProcess, exec } from 'teen_process';
3
- import { fs, logger, timing } from 'appium/support';
3
+ import { fs, logger, timing } from '@appium/support';
4
4
  import defaultLogger from './logger';
5
5
  import B from 'bluebird';
6
6
  import {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "appium-webdriveragent",
3
- "version": "4.10.2",
3
+ "version": "4.10.4",
4
4
  "description": "Package bundling WebDriverAgent",
5
5
  "main": "./build/index.js",
6
6
  "scripts": {
@@ -80,10 +80,9 @@
80
80
  "semantic-release": "^19.0.2",
81
81
  "sinon": "^14.0.0"
82
82
  },
83
- "peerDependencies": {
84
- "appium": "^2.0.0-beta.40"
85
- },
86
83
  "dependencies": {
84
+ "@appium/base-driver": "^8.7.3",
85
+ "@appium/support": "^2.61.0",
87
86
  "@babel/runtime": "^7.0.0",
88
87
  "appium-ios-simulator": "^4.0.0",
89
88
  "async-lock": "^1.0.0",