appium-android-driver 5.6.0 → 5.7.0
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.
|
@@ -85,7 +85,7 @@ helpers.defaultContextName = function defaultContextName() {
|
|
|
85
85
|
return _webviewHelpers.NATIVE_WIN;
|
|
86
86
|
};
|
|
87
87
|
helpers.defaultWebviewName = function defaultWebviewName() {
|
|
88
|
-
return _webviewHelpers.WEBVIEW_BASE + this.opts.appPackage;
|
|
88
|
+
return _webviewHelpers.WEBVIEW_BASE + (this.opts.autoWebviewName || this.opts.appPackage);
|
|
89
89
|
};
|
|
90
90
|
helpers.isWebContext = function isWebContext() {
|
|
91
91
|
return this.curContext !== null && this.curContext !== _webviewHelpers.NATIVE_WIN;
|
|
@@ -331,4 +331,4 @@ exports.setupNewChromedriver = setupNewChromedriver;
|
|
|
331
331
|
Object.assign(extensions, commands, helpers);
|
|
332
332
|
var _default = extensions;
|
|
333
333
|
exports.default = _default;
|
|
334
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDSFJPTUVEUklWRVJfQVVUT0RPV05MT0FEX0ZFQVRVUkUiLCJjb21tYW5kcyIsImhlbHBlcnMiLCJleHRlbnNpb25zIiwiZ2V0Q3VycmVudENvbnRleHQiLCJjdXJDb250ZXh0IiwiZGVmYXVsdENvbnRleHROYW1lIiwiZ2V0Q29udGV4dHMiLCJ3ZWJ2aWV3c01hcHBpbmciLCJ3ZWJ2aWV3SGVscGVycyIsImdldFdlYlZpZXdzTWFwcGluZyIsImFkYiIsIm9wdHMiLCJhc3NpZ25Db250ZXh0cyIsInNldENvbnRleHQiLCJuYW1lIiwidXRpbCIsImhhc1ZhbHVlIiwiV0VCVklFV19XSU4iLCJkZWZhdWx0V2Vidmlld05hbWUiLCJjb250ZXh0cyIsIl8iLCJpbmNsdWRlcyIsImVycm9ycyIsIk5vU3VjaENvbnRleHRFcnJvciIsInN3aXRjaENvbnRleHQiLCJtb2JpbGVHZXRDb250ZXh0cyIsImFuZHJvaWREZXZpY2VTb2NrZXQiLCJlbnN1cmVXZWJ2aWV3c0hhdmVQYWdlcyIsIndlYnZpZXdEZXZ0b29sc1BvcnQiLCJlbmFibGVXZWJ2aWV3RGV0YWlsc0NvbGxlY3Rpb24iLCJPYmplY3QiLCJhc3NpZ24iLCJpc0Nocm9tZVNlc3Npb24iLCJ3ZWJ2aWV3cyIsInBhcnNlV2Vidmlld05hbWVzIiwiTkFUSVZFX1dJTiIsImxvZyIsImRlYnVnIiwiSlNPTiIsInN0cmluZ2lmeSIsImlzQ2hyb21lZHJpdmVyQ29udGV4dCIsInN0YXJ0Q2hyb21lZHJpdmVyUHJveHkiLCJyZWNyZWF0ZUNocm9tZURyaXZlclNlc3Npb25zIiwic3RvcENocm9tZWRyaXZlclByb3hpZXMiLCJzdXNwZW5kQ2hyb21lZHJpdmVyUHJveHkiLCJFcnJvciIsIldFQlZJRVdfQkFTRSIsImFwcFBhY2thZ2UiLCJpc1dlYkNvbnRleHQiLCJjb250ZXh0IiwiY2QiLCJzZXNzaW9uQ2hyb21lZHJpdmVycyIsInNldHVwRXhpc3RpbmdDaHJvbWVkcml2ZXIiLCJjbG9uZURlZXAiLCJjaHJvbWVVc2VSdW5uaW5nQXBwIiwiZXh0cmFjdENocm9tZUFuZHJvaWRQYWNrYWdlRnJvbUNvbnRleHROYW1lIiwiYW5kcm9pZFBhY2thZ2UiLCJtYXRjaCIsImxlbmd0aCIsImNocm9tZUFuZHJvaWRQYWNrYWdlIiwiaGFzIiwibWFwIiwid20iLCJ3ZWJ2aWV3TmFtZSIsImtub3duUGFja2FnZSIsIktOT1dOX0NIUk9NRV9QQUNLQUdFX05BTUVTIiwiYXBwU3RhdGUiLCJxdWVyeUFwcFN0YXRlIiwiQVBQX1NUQVRFIiwiUlVOTklOR19JTl9CQUNLR1JPVU5EIiwiUlVOTklOR19JTl9GT1JFR1JPVU5EIiwiaW5mbyIsInNldHVwTmV3Q2hyb21lZHJpdmVyIiwiY3VyRGV2aWNlSWQiLCJvbiIsIkNocm9tZWRyaXZlciIsIkVWRU5UX0NIQU5HRUQiLCJtc2ciLCJzdGF0ZSIsIlNUQVRFX1NUT1BQRUQiLCJvbkNocm9tZWRyaXZlclN0b3AiLCJjaHJvbWVkcml2ZXIiLCJwcm94eVJlcVJlcyIsInByb3h5UmVxIiwiYmluZCIsInByb3h5Q29tbWFuZCIsImp3cHJveHkiLCJjb21tYW5kIiwiandwUHJveHlBY3RpdmUiLCJ3YXJuIiwiZXJyIiwic3RhcnRVbmV4cGVjdGVkU2h1dGRvd24iLCJrZXlzIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwic3RvcCIsIm1lc3NhZ2UiLCJ2aWV3TmFtZSIsIkNIUk9NSVVNX1dJTiIsInNob3VsZERpc21pc3NDaHJvbWVXZWxjb21lIiwiY2hyb21lT3B0aW9ucyIsImlzQXJyYXkiLCJhcmdzIiwiZGlzbWlzc0Nocm9tZVdlbGNvbWUiLCJhY3Rpdml0eSIsImdldEN1cnJlbnRBY3Rpdml0eSIsImVsIiwiZmluZEVsT3JFbHMiLCJjbGljayIsIkVMRU1FTlQiLCJlIiwic3RhcnRDaHJvbWVTZXNzaW9uIiwia25vd25QYWNrYWdlcyIsImNocm9tZUJ1bmRsZUlkIiwiY2hyb21lQW5kcm9pZEFjdGl2aXR5IiwiYXBwQWN0aXZpdHkiLCJoYXNXb3JraW5nV2VidmlldyIsInJlc3RhcnQiLCJnZXRDaHJvbWVkcml2ZXJQb3J0IiwicG9ydFNwZWMiLCJnZXRQb3J0IiwiQiIsInByb21pc2lmeSIsIlBvcnRGaW5kZXIiLCJwb3J0IiwiZm91bmRQb3J0IiwicG90ZW50aWFsUG9ydCIsInN0b3BQb3J0IiwicGFyc2VJbnQiLCJpc0Nocm9tZWRyaXZlckF1dG9kb3dubG9hZEVuYWJsZWQiLCJpc0ZlYXR1cmVFbmFibGVkIiwiY2hyb21lRHJpdmVyUG9ydCIsImNocm9tZWRyaXZlclBvcnQiLCJjaHJvbWVkcml2ZXJQb3J0cyIsImRldGFpbHMiLCJnZXRXZWJ2aWV3RGV0YWlscyIsInVuZGVmaW5lZCIsImlzRW1wdHkiLCJleGVjdXRhYmxlIiwiY2hyb21lZHJpdmVyRXhlY3V0YWJsZSIsImNtZEFyZ3MiLCJjaHJvbWVkcml2ZXJBcmdzIiwidmVyYm9zZSIsInNob3dDaHJvbWVkcml2ZXJMb2ciLCJleGVjdXRhYmxlRGlyIiwiY2hyb21lZHJpdmVyRXhlY3V0YWJsZURpciIsIm1hcHBpbmdQYXRoIiwiY2hyb21lZHJpdmVyQ2hyb21lTWFwcGluZ0ZpbGUiLCJidW5kbGVJZCIsInVzZVN5c3RlbUV4ZWN1dGFibGUiLCJjaHJvbWVkcml2ZXJVc2VTeXN0ZW1FeGVjdXRhYmxlIiwiZGlzYWJsZUJ1aWxkQ2hlY2siLCJjaHJvbWVkcml2ZXJEaXNhYmxlQnVpbGRDaGVjayIsImlzQXV0b2Rvd25sb2FkRW5hYmxlZCIsIm9wdCIsImVuZHNXaXRoIiwibWVyZ2UiLCJjYXBzIiwiY3JlYXRlQ2hyb21lZHJpdmVyQ2FwcyIsInN0YXJ0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL2NvbnRleHQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBDaHJvbWVkcml2ZXIgZnJvbSAnYXBwaXVtLWNocm9tZWRyaXZlcic7XG5pbXBvcnQgUG9ydEZpbmRlciBmcm9tICdwb3J0ZmluZGVyJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7IHV0aWwgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcbmltcG9ydCB7XG4gIGRlZmF1bHQgYXMgd2Vidmlld0hlbHBlcnMsXG4gIE5BVElWRV9XSU4sIFdFQlZJRVdfQkFTRSwgV0VCVklFV19XSU4sIENIUk9NSVVNX1dJTiwgS05PV05fQ0hST01FX1BBQ0tBR0VfTkFNRVNcbn0gZnJvbSAnLi4vd2Vidmlldy1oZWxwZXJzJztcbmltcG9ydCB7IEFQUF9TVEFURSB9IGZyb20gJy4uL2FuZHJvaWQtaGVscGVycyc7XG5cbmNvbnN0IENIUk9NRURSSVZFUl9BVVRPRE9XTkxPQURfRkVBVFVSRSA9ICdjaHJvbWVkcml2ZXJfYXV0b2Rvd25sb2FkJztcblxubGV0IGNvbW1hbmRzID0ge30sIGhlbHBlcnMgPSB7fSwgZXh0ZW5zaW9ucyA9IHt9O1xuXG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEFjdHVhbCBNSlNPTldQIGNvbW1hbmQgaGFuZGxlcnNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbmNvbW1hbmRzLmdldEN1cnJlbnRDb250ZXh0ID0gYXN5bmMgZnVuY3Rpb24gZ2V0Q3VycmVudENvbnRleHQgKCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlcXVpcmUtYXdhaXRcbiAgLy8gaWYgdGhlIGN1cnJlbnQgY29udGV4dCBpcyBgbnVsbGAsIGluZGljYXRpbmcgbm8gY29udGV4dFxuICAvLyBleHBsaWNpdGx5IHNldCwgaXQgaXMgdGhlIGRlZmF1bHQgY29udGV4dFxuICByZXR1cm4gdGhpcy5jdXJDb250ZXh0IHx8IHRoaXMuZGVmYXVsdENvbnRleHROYW1lKCk7XG59O1xuXG5jb21tYW5kcy5nZXRDb250ZXh0cyA9IGFzeW5jIGZ1bmN0aW9uIGdldENvbnRleHRzICgpIHtcbiAgY29uc3Qgd2Vidmlld3NNYXBwaW5nID0gYXdhaXQgd2Vidmlld0hlbHBlcnMuZ2V0V2ViVmlld3NNYXBwaW5nKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICByZXR1cm4gdGhpcy5hc3NpZ25Db250ZXh0cyh3ZWJ2aWV3c01hcHBpbmcpO1xufTtcblxuY29tbWFuZHMuc2V0Q29udGV4dCA9IGFzeW5jIGZ1bmN0aW9uIHNldENvbnRleHQgKG5hbWUpIHtcbiAgaWYgKCF1dGlsLmhhc1ZhbHVlKG5hbWUpKSB7XG4gICAgbmFtZSA9IHRoaXMuZGVmYXVsdENvbnRleHROYW1lKCk7XG4gIH0gZWxzZSBpZiAobmFtZSA9PT0gV0VCVklFV19XSU4pIHtcbiAgICAvLyBoYW5kbGUgc2V0Q29udGV4dCBcIldFQlZJRVdcIlxuICAgIG5hbWUgPSB0aGlzLmRlZmF1bHRXZWJ2aWV3TmFtZSgpO1xuICB9XG4gIC8vIGlmIHdlJ3JlIGFscmVhZHkgaW4gdGhlIGNvbnRleHQgd2Ugd2FudCwgZG8gbm90aGluZ1xuICBpZiAobmFtZSA9PT0gdGhpcy5jdXJDb250ZXh0KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgd2Vidmlld3NNYXBwaW5nID0gYXdhaXQgd2Vidmlld0hlbHBlcnMuZ2V0V2ViVmlld3NNYXBwaW5nKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICBjb25zdCBjb250ZXh0cyA9IHRoaXMuYXNzaWduQ29udGV4dHMod2Vidmlld3NNYXBwaW5nKTtcbiAgLy8gaWYgdGhlIGNvbnRleHQgd2Ugd2FudCBkb2Vzbid0IGV4aXN0LCBmYWlsXG4gIGlmICghXy5pbmNsdWRlcyhjb250ZXh0cywgbmFtZSkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vU3VjaENvbnRleHRFcnJvcigpO1xuICB9XG5cbiAgYXdhaXQgdGhpcy5zd2l0Y2hDb250ZXh0KG5hbWUsIHdlYnZpZXdzTWFwcGluZyk7XG4gIHRoaXMuY3VyQ29udGV4dCA9IG5hbWU7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFdlYnZpZXdzTWFwcGluZ1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHByb2MgVGhlIG5hbWUgb2YgdGhlIERldnRvb2xzIFVuaXggc29ja2V0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gd2VidmlldyBUaGUgd2ViIHZpZXcgYWxpYXMuIExvb2tzIGxpa2UgYFdFQlZJRVdfYFxuICogcHJlZml4IHBsdXMgUElEIG9yIHBhY2thZ2UgbmFtZVxuICogQHByb3BlcnR5IHs/T2JqZWN0fSBpbmZvIFdlYnZpZXcgaW5mb3JtYXRpb24gYXMgaXQgaXMgcmV0cmlldmVkIGJ5XG4gKiAvanNvbi92ZXJzaW9uIENEUCBlbmRwb2ludFxuICogQHByb3BlcnR5IHs/QXJyYXk8T2JqZWN0Pn0gcGFnZXMgV2VidmlldyBwYWdlcyBsaXN0IGFzIGl0IGlzIHJldHJpZXZlZCBieVxuICogL2pzb24vbGlzdCBDRFAgZW5kcG9pbnRcbiAqIEBwcm9wZXJ5IHs/c3RyaW5nfSB3ZWJ2aWV3TmFtZSBBbiBhY3R1YWwgd2VidmlldyBuYW1lIGZvciBzd2l0Y2hpbmcgY29udGV4dC5cbiAqIFRoaXMgdmFsdWUgYmVjb21lcyBudWxsIHdoZW4gZmFpbGluZyB0byBmaW5kIGEgUElEIGZvciBhIHdlYnZpZXcuXG4gKlxuICogVGhlIGZvbGxvd2luZyBqc29uIGRlbW9uc3RyYXRlcyB0aGUgZXhhbXBsZSBvZiBXZWJ2aWV3c01hcHBpbmcgb2JqZWN0LlxuICogTm90ZSB0aGF0IGBkZXNjcmlwdGlvbmAgaW4gYHBhZ2VgIGNhbiBiZSBhbiBlbXB0eSBzdHJpbmcgbW9zdCBsaWtlbHkgd2hlbiBpdCBjb21lcyB0byBNb2JpbGUgQ2hyb21lKVxuICoge1xuICogICBcInByb2NcIjogXCJAd2Vidmlld19kZXZ0b29sc19yZW1vdGVfMjIxMzhcIixcbiAqICAgXCJ3ZWJ2aWV3XCI6IFwiV0VCVklFV18yMjEzOFwiLFxuICogICBcImluZm9cIjoge1xuICogICAgIFwiQW5kcm9pZC1QYWNrYWdlXCI6IFwiaW8uYXBwaXVtLnNldHRpbmdzXCIsXG4gKiAgICAgXCJCcm93c2VyXCI6IFwiQ2hyb21lLzc0LjAuMzcyOS4xODVcIixcbiAqICAgICBcIlByb3RvY29sLVZlcnNpb25cIjogXCIxLjNcIixcbiAqICAgICBcIlVzZXItQWdlbnRcIjogXCJNb3ppbGxhLzUuMCAoTGludXg7IEFuZHJvaWQgMTA7IEFuZHJvaWQgU0RLIGJ1aWx0IGZvciB4ODYgQnVpbGQvUVNSMS4xOTA5MjAuMDAxOyB3dikgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi80LjAgQ2hyb21lLzc0LjAuMzcyOS4xODUgTW9iaWxlIFNhZmFyaS81MzcuMzZcIixcbiAqICAgICBcIlY4LVZlcnNpb25cIjogXCI3LjQuMjg4LjI4XCIsXG4gKiAgICAgXCJXZWJLaXQtVmVyc2lvblwiOiBcIjUzNy4zNiAoQDIyOTU1NjgyZjk0Y2UwOTMzNjE5N2JmYjhkZmZlYTk5MWZhMzJmMGQpXCIsXG4gKiAgICAgXCJ3ZWJTb2NrZXREZWJ1Z2dlclVybFwiOiBcIndzOi8vMTI3LjAuMC4xOjEwOTAwL2RldnRvb2xzL2Jyb3dzZXJcIlxuICogICB9LFxuICogICBcInBhZ2VzXCI6IFtcbiAqICAgICB7XG4gKiAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwie1xcXCJhdHRhY2hlZFxcXCI6dHJ1ZSxcXFwiZW1wdHlcXFwiOmZhbHNlLFxcXCJoZWlnaHRcXFwiOjE0NTgsXFxcInNjcmVlblhcXFwiOjAsXFxcInNjcmVlbllcXFwiOjMzNixcXFwidmlzaWJsZVxcXCI6dHJ1ZSxcXFwid2lkdGhcXFwiOjEwODB9XCIsXG4gKiAgICAgICBcImRldnRvb2xzRnJvbnRlbmRVcmxcIjogXCJodHRwOi8vY2hyb21lLWRldnRvb2xzLWZyb250ZW5kLmFwcHNwb3QuY29tL3NlcnZlX3Jldi9AMjI5NTU2ODJmOTRjZTA5MzM2MTk3YmZiOGRmZmVhOTkxZmEzMmYwZC9pbnNwZWN0b3IuaHRtbD93cz0xMjcuMC4wLjE6MTA5MDAvZGV2dG9vbHMvcGFnZS8yNzMyNUNDNTBCNjAwRDMxQjIzM0Y0NUUwOTQ4N0IxRlwiLFxuICogICAgICAgXCJpZFwiOiBcIjI3MzI1Q0M1MEI2MDBEMzFCMjMzRjQ1RTA5NDg3QjFGXCIsXG4gKiAgICAgICBcInRpdGxlXCI6IFwiUmVsZWFzZXMgwrcgYXBwaXVtL2FwcGl1bSDCtyBHaXRIdWJcIixcbiAqICAgICAgIFwidHlwZVwiOiBcInBhZ2VcIixcbiAqICAgICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vcmVsZWFzZXNcIixcbiAqICAgICAgIFwid2ViU29ja2V0RGVidWdnZXJVcmxcIjogXCJ3czovLzEyNy4wLjAuMToxMDkwMC9kZXZ0b29scy9wYWdlLzI3MzI1Q0M1MEI2MDBEMzFCMjMzRjQ1RTA5NDg3QjFGXCJcbiAqICAgICB9XG4gKiAgIF0sXG4gKiAgIFwid2Vidmlld05hbWVcIjogXCJXRUJWSUVXX2NvbS5pby5hcHBpdW0uc2V0dGluZ1wiXG4gKiB9XG4gKi9cblxuLyoqXG4gKiBSZXR1cm5zIGEgd2Vidmlld3NNYXBwaW5nIGJhc2VkIG9uIENEUCBlbmRwb2ludHNcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxXZWJ2aWV3c01hcHBpbmc+fSB3ZWJ2aWV3c01hcHBpbmdcbiAqL1xuY29tbWFuZHMubW9iaWxlR2V0Q29udGV4dHMgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVHZXRDb250ZXh0cyAoKSB7XG4gIGNvbnN0IG9wdHMgPSB7XG4gICAgYW5kcm9pZERldmljZVNvY2tldDogdGhpcy5vcHRzLmFuZHJvaWREZXZpY2VTb2NrZXQsXG4gICAgZW5zdXJlV2Vidmlld3NIYXZlUGFnZXM6IHRydWUsXG4gICAgd2Vidmlld0RldnRvb2xzUG9ydDogdGhpcy5vcHRzLndlYnZpZXdEZXZ0b29sc1BvcnQsXG4gICAgZW5hYmxlV2Vidmlld0RldGFpbHNDb2xsZWN0aW9uOiB0cnVlXG4gIH07XG4gIHJldHVybiBhd2FpdCB3ZWJ2aWV3SGVscGVycy5nZXRXZWJWaWV3c01hcHBpbmcodGhpcy5hZGIsIG9wdHMpO1xufTtcblxuaGVscGVycy5hc3NpZ25Db250ZXh0cyA9IGZ1bmN0aW9uIGFzc2lnbkNvbnRleHRzICh3ZWJ2aWV3c01hcHBpbmcpIHtcbiAgY29uc3Qgb3B0cyA9IE9iamVjdC5hc3NpZ24oe2lzQ2hyb21lU2Vzc2lvbjogdGhpcy5pc0Nocm9tZVNlc3Npb259LCB0aGlzLm9wdHMpO1xuICBjb25zdCB3ZWJ2aWV3cyA9IHdlYnZpZXdIZWxwZXJzLnBhcnNlV2Vidmlld05hbWVzKHdlYnZpZXdzTWFwcGluZywgb3B0cyk7XG4gIHRoaXMuY29udGV4dHMgPSBbTkFUSVZFX1dJTiwgLi4ud2Vidmlld3NdO1xuICB0aGlzLmxvZy5kZWJ1ZyhgQXZhaWxhYmxlIGNvbnRleHRzOiAke0pTT04uc3RyaW5naWZ5KHRoaXMuY29udGV4dHMpfWApO1xuICByZXR1cm4gdGhpcy5jb250ZXh0cztcbn07XG5cbmhlbHBlcnMuc3dpdGNoQ29udGV4dCA9IGFzeW5jIGZ1bmN0aW9uIHN3aXRjaENvbnRleHQgKG5hbWUsIHdlYnZpZXdzTWFwcGluZykge1xuICAvLyBXZSBoYXZlIHNvbWUgb3B0aW9ucyB3aGVuIGl0IGNvbWVzIHRvIHdlYnZpZXdzLiBJZiB3ZSB3YW50IGFcbiAgLy8gQ2hyb21lZHJpdmVyIHdlYnZpZXcsIHdlIGNhbiBvbmx5IGNvbnRyb2wgb25lIGF0IGEgdGltZS5cbiAgaWYgKHRoaXMuaXNDaHJvbWVkcml2ZXJDb250ZXh0KG5hbWUpKSB7XG4gICAgLy8gc3RhcnQgcHJveHlpbmcgY29tbWFuZHMgZGlyZWN0bHkgdG8gY2hyb21lZHJpdmVyXG4gICAgYXdhaXQgdGhpcy5zdGFydENocm9tZWRyaXZlclByb3h5KG5hbWUsIHdlYnZpZXdzTWFwcGluZyk7XG4gIH0gZWxzZSBpZiAodGhpcy5pc0Nocm9tZWRyaXZlckNvbnRleHQodGhpcy5jdXJDb250ZXh0KSkge1xuICAgIC8vIGlmIHdlJ3JlIG1vdmluZyB0byBhIG5vbi1jaHJvbWVkcml2ZXIgd2VidmlldywgYW5kIG91ciBjdXJyZW50IGNvbnRleHRcbiAgICAvLyBfaXNfIGEgY2hyb21lZHJpdmVyIHdlYnZpZXcsIGlmIGNhcHMgcmVjcmVhdGVDaHJvbWVEcml2ZXJTZXNzaW9ucyBpcyBzZXRcbiAgICAvLyB0byB0cnVlIHRoZW4ga2lsbCBjaHJvbWVkcml2ZXIgc2Vzc2lvbiB1c2luZyBzdG9wQ2hyb21lZHJpdmVyUHJveGllcyBvclxuICAgIC8vIGVsc2Ugc2ltcGx5IHN1c3BlbmQgcHJveHlpbmcgdG8gdGhlIGxhdHRlclxuICAgIGlmICh0aGlzLm9wdHMucmVjcmVhdGVDaHJvbWVEcml2ZXJTZXNzaW9ucykge1xuICAgICAgdGhpcy5sb2cuZGVidWcoJ3JlY3JlYXRlQ2hyb21lRHJpdmVyU2Vzc2lvbnMgc2V0IHRvIHRydWU7IGtpbGxpbmcgZXhpc3RpbmcgY2hyb21lZHJpdmVycycpO1xuICAgICAgYXdhaXQgdGhpcy5zdG9wQ2hyb21lZHJpdmVyUHJveGllcygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLnN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSgpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYERpZG4ndCBrbm93IGhvdyB0byBoYW5kbGUgc3dpdGNoaW5nIHRvIGNvbnRleHQgJyR7bmFtZX0nYCk7XG4gIH1cbn07XG5cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBPbi1vYmplY3QgY29udGV4dC1yZWxhdGVkIGhlbHBlcnNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vLyBUaGUgcmVhc29uIHRoaXMgaXMgYSBmdW5jdGlvbiBhbmQgbm90IGp1c3QgYSBjb25zdGFudCBpcyB0aGF0IGJvdGggYW5kcm9pZC1cbi8vIGRyaXZlciBhbmQgc2VsZW5kcm9pZC1kcml2ZXIgdXNlIHRoaXMgbG9naWMsIGFuZCBlYWNoIG9uZSByZXR1cm5zXG4vLyBhIGRpZmZlcmVudCBkZWZhdWx0IGNvbnRleHQgbmFtZVxuaGVscGVycy5kZWZhdWx0Q29udGV4dE5hbWUgPSBmdW5jdGlvbiBkZWZhdWx0Q29udGV4dE5hbWUgKCkge1xuICByZXR1cm4gTkFUSVZFX1dJTjtcbn07XG5cbmhlbHBlcnMuZGVmYXVsdFdlYnZpZXdOYW1lID0gZnVuY3Rpb24gZGVmYXVsdFdlYnZpZXdOYW1lICgpIHtcbiAgcmV0dXJuIFdFQlZJRVdfQkFTRSArIHRoaXMub3B0cy5hcHBQYWNrYWdlO1xufTtcblxuaGVscGVycy5pc1dlYkNvbnRleHQgPSBmdW5jdGlvbiBpc1dlYkNvbnRleHQgKCkge1xuICByZXR1cm4gdGhpcy5jdXJDb250ZXh0ICE9PSBudWxsICYmIHRoaXMuY3VyQ29udGV4dCAhPT0gTkFUSVZFX1dJTjtcbn07XG5cbi8vIFR1cm4gb24gcHJveHlpbmcgdG8gYW4gZXhpc3RpbmcgQ2hyb21lZHJpdmVyIHNlc3Npb24gb3IgYSBuZXcgb25lXG5oZWxwZXJzLnN0YXJ0Q2hyb21lZHJpdmVyUHJveHkgPSBhc3luYyBmdW5jdGlvbiBzdGFydENocm9tZWRyaXZlclByb3h5IChjb250ZXh0LCB3ZWJ2aWV3c01hcHBpbmcpIHtcbiAgdGhpcy5sb2cuZGVidWcoYENvbm5lY3RpbmcgdG8gY2hyb21lLWJhY2tlZCB3ZWJ2aWV3IGNvbnRleHQgJyR7Y29udGV4dH0nYCk7XG5cbiAgbGV0IGNkO1xuICBpZiAodGhpcy5zZXNzaW9uQ2hyb21lZHJpdmVyc1tjb250ZXh0XSkge1xuICAgIC8vIGluIHRoZSBjYXNlIHdoZXJlIHdlJ3ZlIGFscmVhZHkgc2V0IHVwIGEgY2hyb21lZHJpdmVyIGZvciBhIGNvbnRleHQsXG4gICAgLy8gd2Ugd2FudCB0byByZWNvbm5lY3QgdG8gaXQsIG5vdCBjcmVhdGUgYSB3aG9sZSBuZXcgb25lXG4gICAgdGhpcy5sb2cuZGVidWcoYEZvdW5kIGV4aXN0aW5nIENocm9tZWRyaXZlciBmb3IgY29udGV4dCAnJHtjb250ZXh0fScuIFVzaW5nIGl0LmApO1xuICAgIGNkID0gdGhpcy5zZXNzaW9uQ2hyb21lZHJpdmVyc1tjb250ZXh0XTtcbiAgICBhd2FpdCBzZXR1cEV4aXN0aW5nQ2hyb21lZHJpdmVyKHRoaXMubG9nLCBjZCk7XG4gIH0gZWxzZSB7XG4gICAgbGV0IG9wdHMgPSBfLmNsb25lRGVlcCh0aGlzLm9wdHMpO1xuICAgIG9wdHMuY2hyb21lVXNlUnVubmluZ0FwcCA9IHRydWU7XG5cbiAgICAvLyBpZiByZXF1ZXN0ZWQsIHRlbGwgY2hyb21lZHJpdmVyIHRvIGF0dGFjaCB0byB0aGUgYW5kcm9pZCBwYWNrYWdlIHdlIGhhdmVcbiAgICAvLyBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbnRleHQgbmFtZSwgcmF0aGVyIHRoYW4gdGhlIHBhY2thZ2Ugb2YgdGhlIEFVVC5cbiAgICAvLyBBbmQgdHVybiB0aGlzIG9uIGJ5IGRlZmF1bHQgZm9yIGNocm9tZS0taWYgY2hyb21lIHBvcHMgdXAgd2l0aCBhIHdlYnZpZXdcbiAgICAvLyBhbmQgc29tZW9uZSB3YW50cyB0byBzd2l0Y2ggdG8gaXQsIHdlIHNob3VsZCBsZXQgY2hyb21lZHJpdmVyIGNvbm5lY3QgdG9cbiAgICAvLyBjaHJvbWUgcmF0aGVyIHRoYW4gc3RheWluZyBzdHVjayBvbiB0aGUgQVVUXG4gICAgaWYgKG9wdHMuZXh0cmFjdENocm9tZUFuZHJvaWRQYWNrYWdlRnJvbUNvbnRleHROYW1lIHx8IGNvbnRleHQgPT09IGAke1dFQlZJRVdfQkFTRX1jaHJvbWVgKSB7XG4gICAgICBsZXQgYW5kcm9pZFBhY2thZ2UgPSBjb250ZXh0Lm1hdGNoKGAke1dFQlZJRVdfQkFTRX0oLispYCk7XG4gICAgICBpZiAoYW5kcm9pZFBhY2thZ2UgJiYgYW5kcm9pZFBhY2thZ2UubGVuZ3RoID4gMCkge1xuICAgICAgICBvcHRzLmNocm9tZUFuZHJvaWRQYWNrYWdlID0gYW5kcm9pZFBhY2thZ2VbMV07XG4gICAgICB9XG4gICAgICBpZiAoIW9wdHMuZXh0cmFjdENocm9tZUFuZHJvaWRQYWNrYWdlRnJvbUNvbnRleHROYW1lKSB7XG4gICAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsICdlbmFibGVXZWJ2aWV3RGV0YWlsc0NvbGxlY3Rpb24nKSAmJiAhdGhpcy5vcHRzLmVuYWJsZVdlYnZpZXdEZXRhaWxzQ29sbGVjdGlvbikge1xuICAgICAgICAgIC8vIFdoZW4gZW5hYmxlV2Vidmlld0RldGFpbHNDb2xsZWN0aW9uIGNhcGFiaWxpdHkgaXMgZXhwbGljaXRseSBkaXNhYmxlZCwgdHJ5IHRvIGlkZW50aWZ5XG4gICAgICAgICAgLy8gY2hyb21lQW5kcm9pZFBhY2thZ2UgYmFzZWQgb24gY29udGV4dHMsIGtub3duIGNocm9tZSB2YXJpYW50IHBhY2thZ2VzIGFuZCBxdWVyeUFwcFN0YXRlIHJlc3VsdFxuICAgICAgICAgIC8vIHNpbmNlIHdlYnZpZXdzTWFwcGluZyBkb2VzIG5vdCBoYXZlIGluZm8gb2JqZWN0XG4gICAgICAgICAgY29uc3QgY29udGV4dHMgPSB3ZWJ2aWV3c01hcHBpbmcubWFwKCh3bSkgPT4gd20ud2Vidmlld05hbWUpO1xuICAgICAgICAgIGZvciAoY29uc3Qga25vd25QYWNrYWdlIG9mIEtOT1dOX0NIUk9NRV9QQUNLQUdFX05BTUVTKSB7XG4gICAgICAgICAgICBpZiAoXy5pbmNsdWRlcyhjb250ZXh0cywgYCR7V0VCVklFV19CQVNFfSR7a25vd25QYWNrYWdlfWApKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYXBwU3RhdGUgPSBhd2FpdCB0aGlzLnF1ZXJ5QXBwU3RhdGUoa25vd25QYWNrYWdlKTtcbiAgICAgICAgICAgIGlmIChfLmluY2x1ZGVzKFtBUFBfU1RBVEUuUlVOTklOR19JTl9CQUNLR1JPVU5ELCBBUFBfU1RBVEUuUlVOTklOR19JTl9GT1JFR1JPVU5EXSwgYXBwU3RhdGUpKSB7XG4gICAgICAgICAgICAgIG9wdHMuY2hyb21lQW5kcm9pZFBhY2thZ2UgPSBrbm93blBhY2thZ2U7XG4gICAgICAgICAgICAgIHRoaXMubG9nLmRlYnVnKGBJZGVudGlmaWVkIGNocm9tZUFuZHJvaWRQYWNrYWdlIGFzICcke29wdHMuY2hyb21lQW5kcm9pZFBhY2thZ2V9JyBgICtcbiAgICAgICAgICAgICAgICBgZm9yIGNvbnRleHQgJyR7Y29udGV4dH0nIGJ5IHF1ZXJ5aW5nIHN0YXRlcyBvZiBDaHJvbWUgYXBwIHBhY2thZ2VzYCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHdtIG9mIHdlYnZpZXdzTWFwcGluZykge1xuICAgICAgICAgICAgaWYgKHdtLndlYnZpZXdOYW1lID09PSBjb250ZXh0ICYmIF8uaGFzKHdtPy5pbmZvLCAnQW5kcm9pZC1QYWNrYWdlJykpIHtcbiAgICAgICAgICAgICAgb3B0cy5jaHJvbWVBbmRyb2lkUGFja2FnZSA9IHdtLmluZm9bJ0FuZHJvaWQtUGFja2FnZSddO1xuICAgICAgICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgSWRlbnRpZmllZCBjaHJvbWVBbmRyb2lkUGFja2FnZSBhcyAnJHtvcHRzLmNocm9tZUFuZHJvaWRQYWNrYWdlfScgYCArXG4gICAgICAgICAgICAgICAgYGZvciBjb250ZXh0ICcke2NvbnRleHR9JyBieSBDRFBgKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2QgPSBhd2FpdCB0aGlzLnNldHVwTmV3Q2hyb21lZHJpdmVyKG9wdHMsIHRoaXMuYWRiLmN1ckRldmljZUlkLCB0aGlzLmFkYiwgY29udGV4dCk7XG4gICAgLy8gYmluZCBvdXIgc3RvcC9leGl0IGhhbmRsZXIsIHBhc3NpbmcgaW4gY29udGV4dCBzbyB3ZSBrbm93IHdoaWNoXG4gICAgLy8gb25lIHN0b3BwZWQgdW5leHBlY3RlZGx5XG4gICAgY2Qub24oQ2hyb21lZHJpdmVyLkVWRU5UX0NIQU5HRUQsIChtc2cpID0+IHtcbiAgICAgIGlmIChtc2cuc3RhdGUgPT09IENocm9tZWRyaXZlci5TVEFURV9TVE9QUEVEKSB7XG4gICAgICAgIHRoaXMub25DaHJvbWVkcml2ZXJTdG9wKGNvbnRleHQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8vIHNhdmUgdGhlIGNocm9tZWRyaXZlciBvYmplY3QgdW5kZXIgdGhlIGNvbnRleHRcbiAgICB0aGlzLnNlc3Npb25DaHJvbWVkcml2ZXJzW2NvbnRleHRdID0gY2Q7XG4gIH1cbiAgLy8gaG9vayB1cCB0aGUgbG9jYWwgdmFyaWFibGVzIHNvIHdlIGNhbiBwcm94eSB0aGlzIGJpelxuICB0aGlzLmNocm9tZWRyaXZlciA9IGNkO1xuICB0aGlzLnByb3h5UmVxUmVzID0gdGhpcy5jaHJvbWVkcml2ZXIucHJveHlSZXEuYmluZCh0aGlzLmNocm9tZWRyaXZlcik7XG4gIHRoaXMucHJveHlDb21tYW5kID0gdGhpcy5jaHJvbWVkcml2ZXIuandwcm94eS5jb21tYW5kLmJpbmQodGhpcy5jaHJvbWVkcml2ZXIuandwcm94eSk7XG4gIHRoaXMuandwUHJveHlBY3RpdmUgPSB0cnVlO1xufTtcblxuLy8gU3RvcCBwcm94eWluZyB0byBhbnkgQ2hyb21lZHJpdmVyXG5oZWxwZXJzLnN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSA9IGZ1bmN0aW9uIHN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSAoKSB7XG4gIHRoaXMuY2hyb21lZHJpdmVyID0gbnVsbDtcbiAgdGhpcy5wcm94eVJlcVJlcyA9IG51bGw7XG4gIHRoaXMucHJveHlDb21tYW5kID0gbnVsbDtcbiAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IGZhbHNlO1xufTtcblxuLy8gSGFuZGxlIGFuIG91dC1vZi1iYW5kIENocm9tZWRyaXZlciBzdG9wIGV2ZW50XG5oZWxwZXJzLm9uQ2hyb21lZHJpdmVyU3RvcCA9IGFzeW5jIGZ1bmN0aW9uIG9uQ2hyb21lZHJpdmVyU3RvcCAoY29udGV4dCkge1xuICB0aGlzLmxvZy53YXJuKGBDaHJvbWVkcml2ZXIgZm9yIGNvbnRleHQgJHtjb250ZXh0fSBzdG9wcGVkIHVuZXhwZWN0ZWRseWApO1xuICBpZiAoY29udGV4dCA9PT0gdGhpcy5jdXJDb250ZXh0KSB7XG4gICAgLy8gd2UgZXhpdGVkIHVuZXhwZWN0ZWRseSB3aGlsZSBhdXRvbWF0aW5nIHRoZSBjdXJyZW50IGNvbnRleHQgYW5kIHNvIHdhbnRcbiAgICAvLyB0byBzaHV0IGRvd24gdGhlIHNlc3Npb24gYW5kIHJlc3BvbmQgd2l0aCBhbiBlcnJvclxuICAgIGxldCBlcnIgPSBuZXcgRXJyb3IoJ0Nocm9tZWRyaXZlciBxdWl0IHVuZXhwZWN0ZWRseSBkdXJpbmcgc2Vzc2lvbicpO1xuICAgIGF3YWl0IHRoaXMuc3RhcnRVbmV4cGVjdGVkU2h1dGRvd24oZXJyKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBpZiBhIENocm9tZWRyaXZlciBpbiB0aGUgbm9uLWFjdGl2ZSBjb250ZXh0IGJhcmZzLCB3ZSBkb24ndCByZWFsbHlcbiAgICAvLyBjYXJlLCB3ZSdsbCBqdXN0IG1ha2UgYSBuZXcgb25lIG5leHQgdGltZSB3ZSBuZWVkIHRoZSBjb250ZXh0LlxuICAgIHRoaXMubG9nLndhcm4oXCJDaHJvbWVkcml2ZXIgcXVpdCB1bmV4cGVjdGVkbHksIGJ1dCBpdCB3YXNuJ3QgdGhlIGFjdGl2ZSBcIiArXG4gICAgICAnY29udGV4dCwgaWdub3JpbmcnKTtcbiAgICBkZWxldGUgdGhpcy5zZXNzaW9uQ2hyb21lZHJpdmVyc1tjb250ZXh0XTtcbiAgfVxufTtcblxuLy8gSW50ZW50aW9uYWxseSBzdG9wIGFsbCB0aGUgY2hyb21lZHJpdmVycyBjdXJyZW50bHkgYWN0aXZlLCBhbmQgaWdub3JlXG4vLyB0aGVpciBleGl0IGV2ZW50c1xuaGVscGVycy5zdG9wQ2hyb21lZHJpdmVyUHJveGllcyA9IGFzeW5jIGZ1bmN0aW9uIHN0b3BDaHJvbWVkcml2ZXJQcm94aWVzICgpIHtcbiAgdGhpcy5zdXNwZW5kQ2hyb21lZHJpdmVyUHJveHkoKTsgLy8gbWFrZSBzdXJlIHdlIHR1cm4gb2ZmIHRoZSBwcm94eSBmbGFnXG4gIGZvciAobGV0IGNvbnRleHQgb2YgXy5rZXlzKHRoaXMuc2Vzc2lvbkNocm9tZWRyaXZlcnMpKSB7XG4gICAgbGV0IGNkID0gdGhpcy5zZXNzaW9uQ2hyb21lZHJpdmVyc1tjb250ZXh0XTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgU3RvcHBpbmcgY2hyb21lZHJpdmVyIGZvciBjb250ZXh0ICR7Y29udGV4dH1gKTtcbiAgICAvLyBzdG9wIGxpc3RlbmluZyBmb3IgdGhlIHN0b3BwZWQgc3RhdGUgZXZlbnRcbiAgICBjZC5yZW1vdmVBbGxMaXN0ZW5lcnMoQ2hyb21lZHJpdmVyLkVWRU5UX0NIQU5HRUQpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBjZC5zdG9wKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmxvZy53YXJuKGBFcnJvciBzdG9wcGluZyBDaHJvbWVkcml2ZXI6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgfVxuICAgIGRlbGV0ZSB0aGlzLnNlc3Npb25DaHJvbWVkcml2ZXJzW2NvbnRleHRdO1xuICB9XG59O1xuXG5oZWxwZXJzLmlzQ2hyb21lZHJpdmVyQ29udGV4dCA9IGZ1bmN0aW9uIGlzQ2hyb21lZHJpdmVyQ29udGV4dCAodmlld05hbWUpIHtcbiAgcmV0dXJuIF8uaW5jbHVkZXModmlld05hbWUsIFdFQlZJRVdfV0lOKSB8fCB2aWV3TmFtZSA9PT0gQ0hST01JVU1fV0lOO1xufTtcblxuaGVscGVycy5zaG91bGREaXNtaXNzQ2hyb21lV2VsY29tZSA9IGZ1bmN0aW9uIHNob3VsZERpc21pc3NDaHJvbWVXZWxjb21lICgpIHtcbiAgcmV0dXJuICEhdGhpcy5vcHRzLmNocm9tZU9wdGlvbnMgJiZcbiAgICAgICAgIF8uaXNBcnJheSh0aGlzLm9wdHMuY2hyb21lT3B0aW9ucy5hcmdzKSAmJlxuICAgICAgICAgdGhpcy5vcHRzLmNocm9tZU9wdGlvbnMuYXJncy5pbmNsdWRlcygnLS1uby1maXJzdC1ydW4nKTtcbn07XG5cbmhlbHBlcnMuZGlzbWlzc0Nocm9tZVdlbGNvbWUgPSBhc3luYyBmdW5jdGlvbiBkaXNtaXNzQ2hyb21lV2VsY29tZSAoKSB7XG4gIHRoaXMubG9nLmluZm8oJ1RyeWluZyB0byBkaXNtaXNzIENocm9tZSB3ZWxjb21lJyk7XG4gIGxldCBhY3Rpdml0eSA9IGF3YWl0IHRoaXMuZ2V0Q3VycmVudEFjdGl2aXR5KCk7XG4gIGlmIChhY3Rpdml0eSAhPT0gJ29yZy5jaHJvbWl1bS5jaHJvbWUuYnJvd3Nlci5maXJzdHJ1bi5GaXJzdFJ1bkFjdGl2aXR5Jykge1xuICAgIHRoaXMubG9nLmluZm8oJ0Nocm9tZSB3ZWxjb21lIGRpYWxvZyBuZXZlciBzaG93ZWQgdXAhIENvbnRpbnVpbmcnKTtcbiAgICByZXR1cm47XG4gIH1cbiAgbGV0IGVsID0gYXdhaXQgdGhpcy5maW5kRWxPckVscygnaWQnLCAnY29tLmFuZHJvaWQuY2hyb21lOmlkL3Rlcm1zX2FjY2VwdCcsIGZhbHNlKTtcbiAgYXdhaXQgdGhpcy5jbGljayhlbC5FTEVNRU5UKTtcbiAgdHJ5IHtcbiAgICBsZXQgZWwgPSBhd2FpdCB0aGlzLmZpbmRFbE9yRWxzKCdpZCcsICdjb20uYW5kcm9pZC5jaHJvbWU6aWQvbmVnYXRpdmVfYnV0dG9uJywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuY2xpY2soZWwuRUxFTUVOVCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBETyBOT1RISU5HLCBUSElTIERFVklDRSBESUROVCBMQVVOQ0ggVEhFIFNJR05JTiBESUFMT0dcbiAgICAvLyBJVCBNVVNUIEJFIEEgTk9OIEdNUyBERVZJQ0VcbiAgICB0aGlzLmxvZy53YXJuKGBUaGlzIGRldmljZSBkaWQgbm90IHNob3cgQ2hyb21lIFNpZ25JbiBkaWFsb2csICR7ZS5tZXNzYWdlfWApO1xuICB9XG59O1xuXG5oZWxwZXJzLnN0YXJ0Q2hyb21lU2Vzc2lvbiA9IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0Q2hyb21lU2Vzc2lvbiAoKSB7XG4gIHRoaXMubG9nLmluZm8oJ1N0YXJ0aW5nIGEgY2hyb21lLWJhc2VkIGJyb3dzZXIgc2Vzc2lvbicpO1xuICBsZXQgb3B0cyA9IF8uY2xvbmVEZWVwKHRoaXMub3B0cyk7XG5cbiAgY29uc3Qga25vd25QYWNrYWdlcyA9IFtcbiAgICAnb3JnLmNocm9taXVtLmNocm9tZS5zaGVsbCcsXG4gICAgJ2NvbS5hbmRyb2lkLmNocm9tZScsXG4gICAgJ2NvbS5jaHJvbWUuYmV0YScsXG4gICAgJ29yZy5jaHJvbWl1bS5jaHJvbWUnLFxuICAgICdvcmcuY2hyb21pdW0ud2Vidmlld19zaGVsbCcsXG4gIF07XG5cbiAgaWYgKF8uaW5jbHVkZXMoa25vd25QYWNrYWdlcywgdGhpcy5vcHRzLmFwcFBhY2thZ2UpKSB7XG4gICAgb3B0cy5jaHJvbWVCdW5kbGVJZCA9IHRoaXMub3B0cy5hcHBQYWNrYWdlO1xuICB9IGVsc2Uge1xuICAgIG9wdHMuY2hyb21lQW5kcm9pZEFjdGl2aXR5ID0gdGhpcy5vcHRzLmFwcEFjdGl2aXR5O1xuICB9XG4gIHRoaXMuY2hyb21lZHJpdmVyID0gYXdhaXQgdGhpcy5zZXR1cE5ld0Nocm9tZWRyaXZlcihvcHRzLCB0aGlzLmFkYi5jdXJEZXZpY2VJZCwgdGhpcy5hZGIpO1xuICB0aGlzLmNocm9tZWRyaXZlci5vbihDaHJvbWVkcml2ZXIuRVZFTlRfQ0hBTkdFRCwgKG1zZykgPT4ge1xuICAgIGlmIChtc2cuc3RhdGUgPT09IENocm9tZWRyaXZlci5TVEFURV9TVE9QUEVEKSB7XG4gICAgICB0aGlzLm9uQ2hyb21lZHJpdmVyU3RvcChDSFJPTUlVTV9XSU4pO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gTm93IHRoYXQgd2UgaGF2ZSBhIENocm9tZSBzZXNzaW9uLCB3ZSBlbnN1cmUgdGhhdCB0aGUgY29udGV4dCBpc1xuICAvLyBhcHByb3ByaWF0ZWx5IHNldCBhbmQgdGhhdCB0aGlzIGNocm9tZWRyaXZlciBpcyBhZGRlZCB0byB0aGUgbGlzdFxuICAvLyBvZiBzZXNzaW9uIGNocm9tZWRyaXZlcnMgc28gd2UgY2FuIHN3aXRjaCBiYWNrIGFuZCBmb3J0aFxuICB0aGlzLmN1ckNvbnRleHQgPSBDSFJPTUlVTV9XSU47XG4gIHRoaXMuc2Vzc2lvbkNocm9tZWRyaXZlcnNbQ0hST01JVU1fV0lOXSA9IHRoaXMuY2hyb21lZHJpdmVyO1xuICB0aGlzLnByb3h5UmVxUmVzID0gdGhpcy5jaHJvbWVkcml2ZXIucHJveHlSZXEuYmluZCh0aGlzLmNocm9tZWRyaXZlcik7XG4gIHRoaXMucHJveHlDb21tYW5kID0gdGhpcy5jaHJvbWVkcml2ZXIuandwcm94eS5jb21tYW5kLmJpbmQodGhpcy5jaHJvbWVkcml2ZXIuandwcm94eSk7XG4gIHRoaXMuandwUHJveHlBY3RpdmUgPSB0cnVlO1xuXG4gIGlmICh0aGlzLnNob3VsZERpc21pc3NDaHJvbWVXZWxjb21lKCkpIHtcbiAgICAvLyBkaXNtaXNzIENocm9tZSB3ZWxjb21lIGRpYWxvZ1xuICAgIGF3YWl0IHRoaXMuZGlzbWlzc0Nocm9tZVdlbGNvbWUoKTtcbiAgfVxufTtcblxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogSW50ZXJuYWwgbGlicmFyeSBmdW5jdGlvbnNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbmFzeW5jIGZ1bmN0aW9uIHNldHVwRXhpc3RpbmdDaHJvbWVkcml2ZXIgKGxvZywgY2hyb21lZHJpdmVyKSB7XG4gIC8vIGNoZWNrIHRoZSBzdGF0dXMgYnkgc2VuZGluZyBhIHNpbXBsZSB3aW5kb3ctYmFzZWQgY29tbWFuZCB0byBDaHJvbWVEcml2ZXJcbiAgLy8gaWYgdGhlcmUgaXMgYW4gZXJyb3IsIHdlIHdhbnQgdG8gcmVjcmVhdGUgdGhlIENocm9tZURyaXZlciBzZXNzaW9uXG4gIGlmICghYXdhaXQgY2hyb21lZHJpdmVyLmhhc1dvcmtpbmdXZWJ2aWV3KCkpIHtcbiAgICBsb2cuZGVidWcoJ0Nocm9tZURyaXZlciBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIGEgd2luZG93LiAnICtcbiAgICAgICAgICAgICAgICAgJ1JlLWluaXRpYWxpemluZyB0aGUgc2Vzc2lvbi4nKTtcbiAgICBhd2FpdCBjaHJvbWVkcml2ZXIucmVzdGFydCgpO1xuICB9XG4gIHJldHVybiBjaHJvbWVkcml2ZXI7XG59XG5cbi8qKlxuICogRmluZCBhIGZyZWUgcG9ydCB0byBoYXZlIENocm9tZWRyaXZlciBsaXN0ZW4gb24uXG4gKlxuICogQHBhcmFtIHthcnJheX0gcG9ydFNwZWMgLSBBcnJheSB3aGljaCBpcyBhIGxpc3Qgb2YgcG9ydHMuIEEgbGlzdCBpdGVtIG1heVxuICogYWxzbyBpdHNlbGYgYmUgYW4gYXJyYXkgb2YgbGVuZ3RoIDIgc3BlY2lmeWluZyBhIHN0YXJ0IGFuZCBlbmQgcG9ydCBvZlxuICogYSByYW5nZS4gU29tZSB2YWxpZCBwb3J0IHNwZWNzOlxuICogICAgLSBbODAwMCwgODAwMSwgODAwMl1cbiAqICAgIC0gW1s4MDAwLCA4MDA1XV1cbiAqICAgIC0gWzgwMDAsIFs5MDAwLCA5MTAwXV1cbiAqIEBwYXJhbSB7T2JqZWN0P30gbG9nIExvZ2dlciBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm4ge251bWJlcn0gQSBmcmVlIHBvcnRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0Q2hyb21lZHJpdmVyUG9ydCAocG9ydFNwZWMsIGxvZyA9IG51bGwpIHtcbiAgY29uc3QgZ2V0UG9ydCA9IEIucHJvbWlzaWZ5KFBvcnRGaW5kZXIuZ2V0UG9ydCwge2NvbnRleHQ6IFBvcnRGaW5kZXJ9KTtcblxuICAvLyBpZiB0aGUgdXNlciBkaWRuJ3QgZ2l2ZSB1cyBhbnkgc3BlY2lmaWMgaW5mb3JtYXRpb24gYWJvdXQgY2hyb21lZHJpdmVyXG4gIC8vIHBvcnQgcmFuZ2VzLCBqdXN0IGZpbmQgYW55IGZyZWUgcG9ydFxuICBpZiAoIXBvcnRTcGVjKSB7XG4gICAgY29uc3QgcG9ydCA9IGF3YWl0IGdldFBvcnQoKTtcbiAgICBsb2c/LmRlYnVnKGBBIHBvcnQgd2FzIG5vdCBnaXZlbiwgdXNpbmcgcmFuZG9tIGZyZWUgcG9ydDogJHtwb3J0fWApO1xuICAgIHJldHVybiBwb3J0O1xuICB9XG5cbiAgLy8gb3RoZXJ3aXNlIGZpbmQgdGhlIGZyZWUgcG9ydCBiYXNlZCBvbiBhIGxpc3Qgb3IgcmFuZ2UgcHJvdmlkZWQgYnkgdGhlIHVzZXJcbiAgbG9nPy5kZWJ1ZyhgRmluZGluZyBhIGZyZWUgcG9ydCBmb3IgY2hyb21lZHJpdmVyIHVzaW5nIHNwZWMgJHtKU09OLnN0cmluZ2lmeShwb3J0U3BlYyl9YCk7XG4gIGxldCBmb3VuZFBvcnQgPSBudWxsO1xuICBmb3IgKGNvbnN0IHBvdGVudGlhbFBvcnQgb2YgcG9ydFNwZWMpIHtcbiAgICBsZXQgcG9ydCwgc3RvcFBvcnQ7XG4gICAgaWYgKF8uaXNBcnJheShwb3RlbnRpYWxQb3J0KSkge1xuICAgICAgKFtwb3J0LCBzdG9wUG9ydF0gPSBwb3RlbnRpYWxQb3J0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcG9ydCA9IHBhcnNlSW50KHBvdGVudGlhbFBvcnQsIDEwKTsgLy8gZW5zdXJlIHdlIGhhdmUgYSBudW1iZXIgYW5kIG5vdCBhIHN0cmluZ1xuICAgICAgc3RvcFBvcnQgPSBwb3J0O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgbG9nPy5kZWJ1ZyhgQ2hlY2tpbmcgcG9ydCByYW5nZSAke3BvcnR9OiR7c3RvcFBvcnR9YCk7XG4gICAgICBmb3VuZFBvcnQgPSBhd2FpdCBnZXRQb3J0KHtwb3J0LCBzdG9wUG9ydH0pO1xuICAgICAgYnJlYWs7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nPy5kZWJ1ZyhgTm90aGluZyBpbiBwb3J0IHJhbmdlICR7cG9ydH06JHtzdG9wUG9ydH0gd2FzIGF2YWlsYWJsZWApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChmb3VuZFBvcnQgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIGEgZnJlZSBwb3J0IGZvciBjaHJvbWVkcml2ZXIgdXNpbmcgYCArXG4gICAgICAgICAgICAgICAgICAgIGBjaHJvbWVkcml2ZXJQb3J0cyBzcGVjICR7SlNPTi5zdHJpbmdpZnkocG9ydFNwZWMpfWApO1xuICB9XG5cbiAgbG9nPy5kZWJ1ZyhgVXNpbmcgZnJlZSBwb3J0ICR7Zm91bmRQb3J0fSBmb3IgY2hyb21lZHJpdmVyYCk7XG4gIHJldHVybiBmb3VuZFBvcnQ7XG59XG5cbmhlbHBlcnMuaXNDaHJvbWVkcml2ZXJBdXRvZG93bmxvYWRFbmFibGVkID0gZnVuY3Rpb24gaXNDaHJvbWVkcml2ZXJBdXRvZG93bmxvYWRFbmFibGVkICgpIHtcbiAgaWYgKHRoaXMuaXNGZWF0dXJlRW5hYmxlZChDSFJPTUVEUklWRVJfQVVUT0RPV05MT0FEX0ZFQVRVUkUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdGhpcz8ubG9nPy5kZWJ1ZyhgQXV0b21hdGVkIENocm9tZWRyaXZlciBkb3dubG9hZCBpcyBkaXNhYmxlZC4gYCArXG4gICAgYFVzZSAnJHtDSFJPTUVEUklWRVJfQVVUT0RPV05MT0FEX0ZFQVRVUkV9JyBzZXJ2ZXIgZmVhdHVyZSB0byBlbmFibGUgaXRgKTtcbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuaGVscGVycy5zZXR1cE5ld0Nocm9tZWRyaXZlciA9IGFzeW5jIGZ1bmN0aW9uIHNldHVwTmV3Q2hyb21lZHJpdmVyIChvcHRzLCBjdXJEZXZpY2VJZCwgYWRiLCBjb250ZXh0ID0gbnVsbCkge1xuICBpZiAob3B0cy5jaHJvbWVEcml2ZXJQb3J0KSB7XG4gICAgdGhpcz8ubG9nPy53YXJuKGBUaGUgJ2Nocm9tZURyaXZlclBvcnQnIGNhcGFiaWxpdHkgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSAnY2hyb21lZHJpdmVyUG9ydCcgaW5zdGVhZGApO1xuICAgIG9wdHMuY2hyb21lZHJpdmVyUG9ydCA9IG9wdHMuY2hyb21lRHJpdmVyUG9ydDtcbiAgfVxuXG4gIGlmIChvcHRzLmNocm9tZWRyaXZlclBvcnQpIHtcbiAgICB0aGlzPy5sb2c/LmRlYnVnKGBVc2luZyB1c2VyLXNwZWNpZmllZCBwb3J0ICR7b3B0cy5jaHJvbWVkcml2ZXJQb3J0fSBmb3IgY2hyb21lZHJpdmVyYCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gaWYgYSBzaW5nbGUgcG9ydCB3YXNuJ3QgZ2l2ZW4sIHdlJ2xsIGxvb2sgZm9yIGEgZnJlZSBvbmVcbiAgICBvcHRzLmNocm9tZWRyaXZlclBvcnQgPSBhd2FpdCBnZXRDaHJvbWVkcml2ZXJQb3J0KG9wdHMuY2hyb21lZHJpdmVyUG9ydHMsIHRoaXM/LmxvZyk7XG4gIH1cblxuICBjb25zdCBkZXRhaWxzID0gY29udGV4dCA/IHdlYnZpZXdIZWxwZXJzLmdldFdlYnZpZXdEZXRhaWxzKGFkYiwgY29udGV4dCkgOiB1bmRlZmluZWQ7XG4gIGlmICghXy5pc0VtcHR5KGRldGFpbHMpKSB7XG4gICAgdGhpcz8ubG9nPy5kZWJ1ZygnUGFzc2luZyB3ZWIgdmlldyBkZXRhaWxzIHRvIHRoZSBDaHJvbWVkcml2ZXIgY29uc3RydWN0b3I6ICcgK1xuICAgICAgSlNPTi5zdHJpbmdpZnkoZGV0YWlscywgbnVsbCwgMikpO1xuICB9XG5cbiAgY29uc3QgY2hyb21lZHJpdmVyID0gbmV3IENocm9tZWRyaXZlcih7XG4gICAgcG9ydDogb3B0cy5jaHJvbWVkcml2ZXJQb3J0LFxuICAgIGV4ZWN1dGFibGU6IG9wdHMuY2hyb21lZHJpdmVyRXhlY3V0YWJsZSxcbiAgICBhZGIsXG4gICAgY21kQXJnczogb3B0cy5jaHJvbWVkcml2ZXJBcmdzLFxuICAgIHZlcmJvc2U6ICEhb3B0cy5zaG93Q2hyb21lZHJpdmVyTG9nLFxuICAgIGV4ZWN1dGFibGVEaXI6IG9wdHMuY2hyb21lZHJpdmVyRXhlY3V0YWJsZURpcixcbiAgICBtYXBwaW5nUGF0aDogb3B0cy5jaHJvbWVkcml2ZXJDaHJvbWVNYXBwaW5nRmlsZSxcbiAgICBidW5kbGVJZDogb3B0cy5jaHJvbWVCdW5kbGVJZCxcbiAgICB1c2VTeXN0ZW1FeGVjdXRhYmxlOiBvcHRzLmNocm9tZWRyaXZlclVzZVN5c3RlbUV4ZWN1dGFibGUsXG4gICAgZGlzYWJsZUJ1aWxkQ2hlY2s6IG9wdHMuY2hyb21lZHJpdmVyRGlzYWJsZUJ1aWxkQ2hlY2ssXG4gICAgZGV0YWlscyxcbiAgICBpc0F1dG9kb3dubG9hZEVuYWJsZWQ6IHRoaXM/LmlzQ2hyb21lZHJpdmVyQXV0b2Rvd25sb2FkRW5hYmxlZD8uKClcbiAgfSk7XG5cbiAgLy8gbWFrZSBzdXJlIHRoZXJlIGFyZSBjaHJvbWVPcHRpb25zXG4gIG9wdHMuY2hyb21lT3B0aW9ucyA9IG9wdHMuY2hyb21lT3B0aW9ucyB8fCB7fTtcbiAgLy8gdHJ5IG91dCBhbnkgcHJlZml4ZWQgY2hyb21lT3B0aW9ucyxcbiAgLy8gYW5kIHN0cmlwIHRoZSBwcmVmaXhcbiAgZm9yIChjb25zdCBvcHQgb2YgXy5rZXlzKG9wdHMpKSB7XG4gICAgaWYgKG9wdC5lbmRzV2l0aCgnOmNocm9tZU9wdGlvbnMnKSkge1xuICAgICAgdGhpcz8ubG9nPy53YXJuKGBNZXJnaW5nICcke29wdH0nIGludG8gJ2Nocm9tZU9wdGlvbnMnLiBUaGlzIG1heSBjYXVzZSB1bmV4cGVjdGVkIGJlaGF2aW9yYCk7XG4gICAgICBfLm1lcmdlKG9wdHMuY2hyb21lT3B0aW9ucywgb3B0c1tvcHRdKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBjYXBzID0gd2Vidmlld0hlbHBlcnMuY3JlYXRlQ2hyb21lZHJpdmVyQ2FwcyhvcHRzLCBjdXJEZXZpY2VJZCwgZGV0YWlscyk7XG4gIHRoaXM/LmxvZz8uZGVidWcoYEJlZm9yZSBzdGFydGluZyBjaHJvbWVkcml2ZXIsIGFuZHJvaWRQYWNrYWdlIGlzICcke2NhcHMuY2hyb21lT3B0aW9ucy5hbmRyb2lkUGFja2FnZX0nYCk7XG4gIGF3YWl0IGNocm9tZWRyaXZlci5zdGFydChjYXBzKTtcbiAgcmV0dXJuIGNocm9tZWRyaXZlcjtcbn07XG5jb25zdCBzZXR1cE5ld0Nocm9tZWRyaXZlciA9IGhlbHBlcnMuc2V0dXBOZXdDaHJvbWVkcml2ZXI7XG5cblxuT2JqZWN0LmFzc2lnbihleHRlbnNpb25zLCBjb21tYW5kcywgaGVscGVycyk7XG5leHBvcnQgeyBjb21tYW5kcywgaGVscGVycywgc2V0dXBOZXdDaHJvbWVk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
|
|
334
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDSFJPTUVEUklWRVJfQVVUT0RPV05MT0FEX0ZFQVRVUkUiLCJjb21tYW5kcyIsImhlbHBlcnMiLCJleHRlbnNpb25zIiwiZ2V0Q3VycmVudENvbnRleHQiLCJjdXJDb250ZXh0IiwiZGVmYXVsdENvbnRleHROYW1lIiwiZ2V0Q29udGV4dHMiLCJ3ZWJ2aWV3c01hcHBpbmciLCJ3ZWJ2aWV3SGVscGVycyIsImdldFdlYlZpZXdzTWFwcGluZyIsImFkYiIsIm9wdHMiLCJhc3NpZ25Db250ZXh0cyIsInNldENvbnRleHQiLCJuYW1lIiwidXRpbCIsImhhc1ZhbHVlIiwiV0VCVklFV19XSU4iLCJkZWZhdWx0V2Vidmlld05hbWUiLCJjb250ZXh0cyIsIl8iLCJpbmNsdWRlcyIsImVycm9ycyIsIk5vU3VjaENvbnRleHRFcnJvciIsInN3aXRjaENvbnRleHQiLCJtb2JpbGVHZXRDb250ZXh0cyIsImFuZHJvaWREZXZpY2VTb2NrZXQiLCJlbnN1cmVXZWJ2aWV3c0hhdmVQYWdlcyIsIndlYnZpZXdEZXZ0b29sc1BvcnQiLCJlbmFibGVXZWJ2aWV3RGV0YWlsc0NvbGxlY3Rpb24iLCJPYmplY3QiLCJhc3NpZ24iLCJpc0Nocm9tZVNlc3Npb24iLCJ3ZWJ2aWV3cyIsInBhcnNlV2Vidmlld05hbWVzIiwiTkFUSVZFX1dJTiIsImxvZyIsImRlYnVnIiwiSlNPTiIsInN0cmluZ2lmeSIsImlzQ2hyb21lZHJpdmVyQ29udGV4dCIsInN0YXJ0Q2hyb21lZHJpdmVyUHJveHkiLCJyZWNyZWF0ZUNocm9tZURyaXZlclNlc3Npb25zIiwic3RvcENocm9tZWRyaXZlclByb3hpZXMiLCJzdXNwZW5kQ2hyb21lZHJpdmVyUHJveHkiLCJFcnJvciIsIldFQlZJRVdfQkFTRSIsImF1dG9XZWJ2aWV3TmFtZSIsImFwcFBhY2thZ2UiLCJpc1dlYkNvbnRleHQiLCJjb250ZXh0IiwiY2QiLCJzZXNzaW9uQ2hyb21lZHJpdmVycyIsInNldHVwRXhpc3RpbmdDaHJvbWVkcml2ZXIiLCJjbG9uZURlZXAiLCJjaHJvbWVVc2VSdW5uaW5nQXBwIiwiZXh0cmFjdENocm9tZUFuZHJvaWRQYWNrYWdlRnJvbUNvbnRleHROYW1lIiwiYW5kcm9pZFBhY2thZ2UiLCJtYXRjaCIsImxlbmd0aCIsImNocm9tZUFuZHJvaWRQYWNrYWdlIiwiaGFzIiwibWFwIiwid20iLCJ3ZWJ2aWV3TmFtZSIsImtub3duUGFja2FnZSIsIktOT1dOX0NIUk9NRV9QQUNLQUdFX05BTUVTIiwiYXBwU3RhdGUiLCJxdWVyeUFwcFN0YXRlIiwiQVBQX1NUQVRFIiwiUlVOTklOR19JTl9CQUNLR1JPVU5EIiwiUlVOTklOR19JTl9GT1JFR1JPVU5EIiwiaW5mbyIsInNldHVwTmV3Q2hyb21lZHJpdmVyIiwiY3VyRGV2aWNlSWQiLCJvbiIsIkNocm9tZWRyaXZlciIsIkVWRU5UX0NIQU5HRUQiLCJtc2ciLCJzdGF0ZSIsIlNUQVRFX1NUT1BQRUQiLCJvbkNocm9tZWRyaXZlclN0b3AiLCJjaHJvbWVkcml2ZXIiLCJwcm94eVJlcVJlcyIsInByb3h5UmVxIiwiYmluZCIsInByb3h5Q29tbWFuZCIsImp3cHJveHkiLCJjb21tYW5kIiwiandwUHJveHlBY3RpdmUiLCJ3YXJuIiwiZXJyIiwic3RhcnRVbmV4cGVjdGVkU2h1dGRvd24iLCJrZXlzIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwic3RvcCIsIm1lc3NhZ2UiLCJ2aWV3TmFtZSIsIkNIUk9NSVVNX1dJTiIsInNob3VsZERpc21pc3NDaHJvbWVXZWxjb21lIiwiY2hyb21lT3B0aW9ucyIsImlzQXJyYXkiLCJhcmdzIiwiZGlzbWlzc0Nocm9tZVdlbGNvbWUiLCJhY3Rpdml0eSIsImdldEN1cnJlbnRBY3Rpdml0eSIsImVsIiwiZmluZEVsT3JFbHMiLCJjbGljayIsIkVMRU1FTlQiLCJlIiwic3RhcnRDaHJvbWVTZXNzaW9uIiwia25vd25QYWNrYWdlcyIsImNocm9tZUJ1bmRsZUlkIiwiY2hyb21lQW5kcm9pZEFjdGl2aXR5IiwiYXBwQWN0aXZpdHkiLCJoYXNXb3JraW5nV2VidmlldyIsInJlc3RhcnQiLCJnZXRDaHJvbWVkcml2ZXJQb3J0IiwicG9ydFNwZWMiLCJnZXRQb3J0IiwiQiIsInByb21pc2lmeSIsIlBvcnRGaW5kZXIiLCJwb3J0IiwiZm91bmRQb3J0IiwicG90ZW50aWFsUG9ydCIsInN0b3BQb3J0IiwicGFyc2VJbnQiLCJpc0Nocm9tZWRyaXZlckF1dG9kb3dubG9hZEVuYWJsZWQiLCJpc0ZlYXR1cmVFbmFibGVkIiwiY2hyb21lRHJpdmVyUG9ydCIsImNocm9tZWRyaXZlclBvcnQiLCJjaHJvbWVkcml2ZXJQb3J0cyIsImRldGFpbHMiLCJnZXRXZWJ2aWV3RGV0YWlscyIsInVuZGVmaW5lZCIsImlzRW1wdHkiLCJleGVjdXRhYmxlIiwiY2hyb21lZHJpdmVyRXhlY3V0YWJsZSIsImNtZEFyZ3MiLCJjaHJvbWVkcml2ZXJBcmdzIiwidmVyYm9zZSIsInNob3dDaHJvbWVkcml2ZXJMb2ciLCJleGVjdXRhYmxlRGlyIiwiY2hyb21lZHJpdmVyRXhlY3V0YWJsZURpciIsIm1hcHBpbmdQYXRoIiwiY2hyb21lZHJpdmVyQ2hyb21lTWFwcGluZ0ZpbGUiLCJidW5kbGVJZCIsInVzZVN5c3RlbUV4ZWN1dGFibGUiLCJjaHJvbWVkcml2ZXJVc2VTeXN0ZW1FeGVjdXRhYmxlIiwiZGlzYWJsZUJ1aWxkQ2hlY2siLCJjaHJvbWVkcml2ZXJEaXNhYmxlQnVpbGRDaGVjayIsImlzQXV0b2Rvd25sb2FkRW5hYmxlZCIsIm9wdCIsImVuZHNXaXRoIiwibWVyZ2UiLCJjYXBzIiwiY3JlYXRlQ2hyb21lZHJpdmVyQ2FwcyIsInN0YXJ0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL2NvbnRleHQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBDaHJvbWVkcml2ZXIgZnJvbSAnYXBwaXVtLWNocm9tZWRyaXZlcic7XG5pbXBvcnQgUG9ydEZpbmRlciBmcm9tICdwb3J0ZmluZGVyJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7IHV0aWwgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcbmltcG9ydCB7XG4gIGRlZmF1bHQgYXMgd2Vidmlld0hlbHBlcnMsXG4gIE5BVElWRV9XSU4sIFdFQlZJRVdfQkFTRSwgV0VCVklFV19XSU4sIENIUk9NSVVNX1dJTiwgS05PV05fQ0hST01FX1BBQ0tBR0VfTkFNRVNcbn0gZnJvbSAnLi4vd2Vidmlldy1oZWxwZXJzJztcbmltcG9ydCB7IEFQUF9TVEFURSB9IGZyb20gJy4uL2FuZHJvaWQtaGVscGVycyc7XG5cbmNvbnN0IENIUk9NRURSSVZFUl9BVVRPRE9XTkxPQURfRkVBVFVSRSA9ICdjaHJvbWVkcml2ZXJfYXV0b2Rvd25sb2FkJztcblxubGV0IGNvbW1hbmRzID0ge30sIGhlbHBlcnMgPSB7fSwgZXh0ZW5zaW9ucyA9IHt9O1xuXG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEFjdHVhbCBNSlNPTldQIGNvbW1hbmQgaGFuZGxlcnNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbmNvbW1hbmRzLmdldEN1cnJlbnRDb250ZXh0ID0gYXN5bmMgZnVuY3Rpb24gZ2V0Q3VycmVudENvbnRleHQgKCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlcXVpcmUtYXdhaXRcbiAgLy8gaWYgdGhlIGN1cnJlbnQgY29udGV4dCBpcyBgbnVsbGAsIGluZGljYXRpbmcgbm8gY29udGV4dFxuICAvLyBleHBsaWNpdGx5IHNldCwgaXQgaXMgdGhlIGRlZmF1bHQgY29udGV4dFxuICByZXR1cm4gdGhpcy5jdXJDb250ZXh0IHx8IHRoaXMuZGVmYXVsdENvbnRleHROYW1lKCk7XG59O1xuXG5jb21tYW5kcy5nZXRDb250ZXh0cyA9IGFzeW5jIGZ1bmN0aW9uIGdldENvbnRleHRzICgpIHtcbiAgY29uc3Qgd2Vidmlld3NNYXBwaW5nID0gYXdhaXQgd2Vidmlld0hlbHBlcnMuZ2V0V2ViVmlld3NNYXBwaW5nKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICByZXR1cm4gdGhpcy5hc3NpZ25Db250ZXh0cyh3ZWJ2aWV3c01hcHBpbmcpO1xufTtcblxuY29tbWFuZHMuc2V0Q29udGV4dCA9IGFzeW5jIGZ1bmN0aW9uIHNldENvbnRleHQgKG5hbWUpIHtcbiAgaWYgKCF1dGlsLmhhc1ZhbHVlKG5hbWUpKSB7XG4gICAgbmFtZSA9IHRoaXMuZGVmYXVsdENvbnRleHROYW1lKCk7XG4gIH0gZWxzZSBpZiAobmFtZSA9PT0gV0VCVklFV19XSU4pIHtcbiAgICAvLyBoYW5kbGUgc2V0Q29udGV4dCBcIldFQlZJRVdcIlxuICAgIG5hbWUgPSB0aGlzLmRlZmF1bHRXZWJ2aWV3TmFtZSgpO1xuICB9XG4gIC8vIGlmIHdlJ3JlIGFscmVhZHkgaW4gdGhlIGNvbnRleHQgd2Ugd2FudCwgZG8gbm90aGluZ1xuICBpZiAobmFtZSA9PT0gdGhpcy5jdXJDb250ZXh0KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgd2Vidmlld3NNYXBwaW5nID0gYXdhaXQgd2Vidmlld0hlbHBlcnMuZ2V0V2ViVmlld3NNYXBwaW5nKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICBjb25zdCBjb250ZXh0cyA9IHRoaXMuYXNzaWduQ29udGV4dHMod2Vidmlld3NNYXBwaW5nKTtcbiAgLy8gaWYgdGhlIGNvbnRleHQgd2Ugd2FudCBkb2Vzbid0IGV4aXN0LCBmYWlsXG4gIGlmICghXy5pbmNsdWRlcyhjb250ZXh0cywgbmFtZSkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vU3VjaENvbnRleHRFcnJvcigpO1xuICB9XG5cbiAgYXdhaXQgdGhpcy5zd2l0Y2hDb250ZXh0KG5hbWUsIHdlYnZpZXdzTWFwcGluZyk7XG4gIHRoaXMuY3VyQ29udGV4dCA9IG5hbWU7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFdlYnZpZXdzTWFwcGluZ1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHByb2MgVGhlIG5hbWUgb2YgdGhlIERldnRvb2xzIFVuaXggc29ja2V0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gd2VidmlldyBUaGUgd2ViIHZpZXcgYWxpYXMuIExvb2tzIGxpa2UgYFdFQlZJRVdfYFxuICogcHJlZml4IHBsdXMgUElEIG9yIHBhY2thZ2UgbmFtZVxuICogQHByb3BlcnR5IHs/T2JqZWN0fSBpbmZvIFdlYnZpZXcgaW5mb3JtYXRpb24gYXMgaXQgaXMgcmV0cmlldmVkIGJ5XG4gKiAvanNvbi92ZXJzaW9uIENEUCBlbmRwb2ludFxuICogQHByb3BlcnR5IHs/QXJyYXk8T2JqZWN0Pn0gcGFnZXMgV2VidmlldyBwYWdlcyBsaXN0IGFzIGl0IGlzIHJldHJpZXZlZCBieVxuICogL2pzb24vbGlzdCBDRFAgZW5kcG9pbnRcbiAqIEBwcm9wZXJ5IHs/c3RyaW5nfSB3ZWJ2aWV3TmFtZSBBbiBhY3R1YWwgd2VidmlldyBuYW1lIGZvciBzd2l0Y2hpbmcgY29udGV4dC5cbiAqIFRoaXMgdmFsdWUgYmVjb21lcyBudWxsIHdoZW4gZmFpbGluZyB0byBmaW5kIGEgUElEIGZvciBhIHdlYnZpZXcuXG4gKlxuICogVGhlIGZvbGxvd2luZyBqc29uIGRlbW9uc3RyYXRlcyB0aGUgZXhhbXBsZSBvZiBXZWJ2aWV3c01hcHBpbmcgb2JqZWN0LlxuICogTm90ZSB0aGF0IGBkZXNjcmlwdGlvbmAgaW4gYHBhZ2VgIGNhbiBiZSBhbiBlbXB0eSBzdHJpbmcgbW9zdCBsaWtlbHkgd2hlbiBpdCBjb21lcyB0byBNb2JpbGUgQ2hyb21lKVxuICoge1xuICogICBcInByb2NcIjogXCJAd2Vidmlld19kZXZ0b29sc19yZW1vdGVfMjIxMzhcIixcbiAqICAgXCJ3ZWJ2aWV3XCI6IFwiV0VCVklFV18yMjEzOFwiLFxuICogICBcImluZm9cIjoge1xuICogICAgIFwiQW5kcm9pZC1QYWNrYWdlXCI6IFwiaW8uYXBwaXVtLnNldHRpbmdzXCIsXG4gKiAgICAgXCJCcm93c2VyXCI6IFwiQ2hyb21lLzc0LjAuMzcyOS4xODVcIixcbiAqICAgICBcIlByb3RvY29sLVZlcnNpb25cIjogXCIxLjNcIixcbiAqICAgICBcIlVzZXItQWdlbnRcIjogXCJNb3ppbGxhLzUuMCAoTGludXg7IEFuZHJvaWQgMTA7IEFuZHJvaWQgU0RLIGJ1aWx0IGZvciB4ODYgQnVpbGQvUVNSMS4xOTA5MjAuMDAxOyB3dikgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi80LjAgQ2hyb21lLzc0LjAuMzcyOS4xODUgTW9iaWxlIFNhZmFyaS81MzcuMzZcIixcbiAqICAgICBcIlY4LVZlcnNpb25cIjogXCI3LjQuMjg4LjI4XCIsXG4gKiAgICAgXCJXZWJLaXQtVmVyc2lvblwiOiBcIjUzNy4zNiAoQDIyOTU1NjgyZjk0Y2UwOTMzNjE5N2JmYjhkZmZlYTk5MWZhMzJmMGQpXCIsXG4gKiAgICAgXCJ3ZWJTb2NrZXREZWJ1Z2dlclVybFwiOiBcIndzOi8vMTI3LjAuMC4xOjEwOTAwL2RldnRvb2xzL2Jyb3dzZXJcIlxuICogICB9LFxuICogICBcInBhZ2VzXCI6IFtcbiAqICAgICB7XG4gKiAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwie1xcXCJhdHRhY2hlZFxcXCI6dHJ1ZSxcXFwiZW1wdHlcXFwiOmZhbHNlLFxcXCJoZWlnaHRcXFwiOjE0NTgsXFxcInNjcmVlblhcXFwiOjAsXFxcInNjcmVlbllcXFwiOjMzNixcXFwidmlzaWJsZVxcXCI6dHJ1ZSxcXFwid2lkdGhcXFwiOjEwODB9XCIsXG4gKiAgICAgICBcImRldnRvb2xzRnJvbnRlbmRVcmxcIjogXCJodHRwOi8vY2hyb21lLWRldnRvb2xzLWZyb250ZW5kLmFwcHNwb3QuY29tL3NlcnZlX3Jldi9AMjI5NTU2ODJmOTRjZTA5MzM2MTk3YmZiOGRmZmVhOTkxZmEzMmYwZC9pbnNwZWN0b3IuaHRtbD93cz0xMjcuMC4wLjE6MTA5MDAvZGV2dG9vbHMvcGFnZS8yNzMyNUNDNTBCNjAwRDMxQjIzM0Y0NUUwOTQ4N0IxRlwiLFxuICogICAgICAgXCJpZFwiOiBcIjI3MzI1Q0M1MEI2MDBEMzFCMjMzRjQ1RTA5NDg3QjFGXCIsXG4gKiAgICAgICBcInRpdGxlXCI6IFwiUmVsZWFzZXMgwrcgYXBwaXVtL2FwcGl1bSDCtyBHaXRIdWJcIixcbiAqICAgICAgIFwidHlwZVwiOiBcInBhZ2VcIixcbiAqICAgICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vcmVsZWFzZXNcIixcbiAqICAgICAgIFwid2ViU29ja2V0RGVidWdnZXJVcmxcIjogXCJ3czovLzEyNy4wLjAuMToxMDkwMC9kZXZ0b29scy9wYWdlLzI3MzI1Q0M1MEI2MDBEMzFCMjMzRjQ1RTA5NDg3QjFGXCJcbiAqICAgICB9XG4gKiAgIF0sXG4gKiAgIFwid2Vidmlld05hbWVcIjogXCJXRUJWSUVXX2NvbS5pby5hcHBpdW0uc2V0dGluZ1wiXG4gKiB9XG4gKi9cblxuLyoqXG4gKiBSZXR1cm5zIGEgd2Vidmlld3NNYXBwaW5nIGJhc2VkIG9uIENEUCBlbmRwb2ludHNcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxXZWJ2aWV3c01hcHBpbmc+fSB3ZWJ2aWV3c01hcHBpbmdcbiAqL1xuY29tbWFuZHMubW9iaWxlR2V0Q29udGV4dHMgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVHZXRDb250ZXh0cyAoKSB7XG4gIGNvbnN0IG9wdHMgPSB7XG4gICAgYW5kcm9pZERldmljZVNvY2tldDogdGhpcy5vcHRzLmFuZHJvaWREZXZpY2VTb2NrZXQsXG4gICAgZW5zdXJlV2Vidmlld3NIYXZlUGFnZXM6IHRydWUsXG4gICAgd2Vidmlld0RldnRvb2xzUG9ydDogdGhpcy5vcHRzLndlYnZpZXdEZXZ0b29sc1BvcnQsXG4gICAgZW5hYmxlV2Vidmlld0RldGFpbHNDb2xsZWN0aW9uOiB0cnVlXG4gIH07XG4gIHJldHVybiBhd2FpdCB3ZWJ2aWV3SGVscGVycy5nZXRXZWJWaWV3c01hcHBpbmcodGhpcy5hZGIsIG9wdHMpO1xufTtcblxuaGVscGVycy5hc3NpZ25Db250ZXh0cyA9IGZ1bmN0aW9uIGFzc2lnbkNvbnRleHRzICh3ZWJ2aWV3c01hcHBpbmcpIHtcbiAgY29uc3Qgb3B0cyA9IE9iamVjdC5hc3NpZ24oe2lzQ2hyb21lU2Vzc2lvbjogdGhpcy5pc0Nocm9tZVNlc3Npb259LCB0aGlzLm9wdHMpO1xuICBjb25zdCB3ZWJ2aWV3cyA9IHdlYnZpZXdIZWxwZXJzLnBhcnNlV2Vidmlld05hbWVzKHdlYnZpZXdzTWFwcGluZywgb3B0cyk7XG4gIHRoaXMuY29udGV4dHMgPSBbTkFUSVZFX1dJTiwgLi4ud2Vidmlld3NdO1xuICB0aGlzLmxvZy5kZWJ1ZyhgQXZhaWxhYmxlIGNvbnRleHRzOiAke0pTT04uc3RyaW5naWZ5KHRoaXMuY29udGV4dHMpfWApO1xuICByZXR1cm4gdGhpcy5jb250ZXh0cztcbn07XG5cbmhlbHBlcnMuc3dpdGNoQ29udGV4dCA9IGFzeW5jIGZ1bmN0aW9uIHN3aXRjaENvbnRleHQgKG5hbWUsIHdlYnZpZXdzTWFwcGluZykge1xuICAvLyBXZSBoYXZlIHNvbWUgb3B0aW9ucyB3aGVuIGl0IGNvbWVzIHRvIHdlYnZpZXdzLiBJZiB3ZSB3YW50IGFcbiAgLy8gQ2hyb21lZHJpdmVyIHdlYnZpZXcsIHdlIGNhbiBvbmx5IGNvbnRyb2wgb25lIGF0IGEgdGltZS5cbiAgaWYgKHRoaXMuaXNDaHJvbWVkcml2ZXJDb250ZXh0KG5hbWUpKSB7XG4gICAgLy8gc3RhcnQgcHJveHlpbmcgY29tbWFuZHMgZGlyZWN0bHkgdG8gY2hyb21lZHJpdmVyXG4gICAgYXdhaXQgdGhpcy5zdGFydENocm9tZWRyaXZlclByb3h5KG5hbWUsIHdlYnZpZXdzTWFwcGluZyk7XG4gIH0gZWxzZSBpZiAodGhpcy5pc0Nocm9tZWRyaXZlckNvbnRleHQodGhpcy5jdXJDb250ZXh0KSkge1xuICAgIC8vIGlmIHdlJ3JlIG1vdmluZyB0byBhIG5vbi1jaHJvbWVkcml2ZXIgd2VidmlldywgYW5kIG91ciBjdXJyZW50IGNvbnRleHRcbiAgICAvLyBfaXNfIGEgY2hyb21lZHJpdmVyIHdlYnZpZXcsIGlmIGNhcHMgcmVjcmVhdGVDaHJvbWVEcml2ZXJTZXNzaW9ucyBpcyBzZXRcbiAgICAvLyB0byB0cnVlIHRoZW4ga2lsbCBjaHJvbWVkcml2ZXIgc2Vzc2lvbiB1c2luZyBzdG9wQ2hyb21lZHJpdmVyUHJveGllcyBvclxuICAgIC8vIGVsc2Ugc2ltcGx5IHN1c3BlbmQgcHJveHlpbmcgdG8gdGhlIGxhdHRlclxuICAgIGlmICh0aGlzLm9wdHMucmVjcmVhdGVDaHJvbWVEcml2ZXJTZXNzaW9ucykge1xuICAgICAgdGhpcy5sb2cuZGVidWcoJ3JlY3JlYXRlQ2hyb21lRHJpdmVyU2Vzc2lvbnMgc2V0IHRvIHRydWU7IGtpbGxpbmcgZXhpc3RpbmcgY2hyb21lZHJpdmVycycpO1xuICAgICAgYXdhaXQgdGhpcy5zdG9wQ2hyb21lZHJpdmVyUHJveGllcygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLnN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSgpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYERpZG4ndCBrbm93IGhvdyB0byBoYW5kbGUgc3dpdGNoaW5nIHRvIGNvbnRleHQgJyR7bmFtZX0nYCk7XG4gIH1cbn07XG5cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBPbi1vYmplY3QgY29udGV4dC1yZWxhdGVkIGhlbHBlcnNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vLyBUaGUgcmVhc29uIHRoaXMgaXMgYSBmdW5jdGlvbiBhbmQgbm90IGp1c3QgYSBjb25zdGFudCBpcyB0aGF0IGJvdGggYW5kcm9pZC1cbi8vIGRyaXZlciBhbmQgc2VsZW5kcm9pZC1kcml2ZXIgdXNlIHRoaXMgbG9naWMsIGFuZCBlYWNoIG9uZSByZXR1cm5zXG4vLyBhIGRpZmZlcmVudCBkZWZhdWx0IGNvbnRleHQgbmFtZVxuaGVscGVycy5kZWZhdWx0Q29udGV4dE5hbWUgPSBmdW5jdGlvbiBkZWZhdWx0Q29udGV4dE5hbWUgKCkge1xuICByZXR1cm4gTkFUSVZFX1dJTjtcbn07XG5cbmhlbHBlcnMuZGVmYXVsdFdlYnZpZXdOYW1lID0gZnVuY3Rpb24gZGVmYXVsdFdlYnZpZXdOYW1lICgpIHtcbiAgcmV0dXJuIFdFQlZJRVdfQkFTRSArICh0aGlzLm9wdHMuYXV0b1dlYnZpZXdOYW1lIHx8IHRoaXMub3B0cy5hcHBQYWNrYWdlKTtcbn07XG5cbmhlbHBlcnMuaXNXZWJDb250ZXh0ID0gZnVuY3Rpb24gaXNXZWJDb250ZXh0ICgpIHtcbiAgcmV0dXJuIHRoaXMuY3VyQ29udGV4dCAhPT0gbnVsbCAmJiB0aGlzLmN1ckNvbnRleHQgIT09IE5BVElWRV9XSU47XG59O1xuXG4vLyBUdXJuIG9uIHByb3h5aW5nIHRvIGFuIGV4aXN0aW5nIENocm9tZWRyaXZlciBzZXNzaW9uIG9yIGEgbmV3IG9uZVxuaGVscGVycy5zdGFydENocm9tZWRyaXZlclByb3h5ID0gYXN5bmMgZnVuY3Rpb24gc3RhcnRDaHJvbWVkcml2ZXJQcm94eSAoY29udGV4dCwgd2Vidmlld3NNYXBwaW5nKSB7XG4gIHRoaXMubG9nLmRlYnVnKGBDb25uZWN0aW5nIHRvIGNocm9tZS1iYWNrZWQgd2VidmlldyBjb250ZXh0ICcke2NvbnRleHR9J2ApO1xuXG4gIGxldCBjZDtcbiAgaWYgKHRoaXMuc2Vzc2lvbkNocm9tZWRyaXZlcnNbY29udGV4dF0pIHtcbiAgICAvLyBpbiB0aGUgY2FzZSB3aGVyZSB3ZSd2ZSBhbHJlYWR5IHNldCB1cCBhIGNocm9tZWRyaXZlciBmb3IgYSBjb250ZXh0LFxuICAgIC8vIHdlIHdhbnQgdG8gcmVjb25uZWN0IHRvIGl0LCBub3QgY3JlYXRlIGEgd2hvbGUgbmV3IG9uZVxuICAgIHRoaXMubG9nLmRlYnVnKGBGb3VuZCBleGlzdGluZyBDaHJvbWVkcml2ZXIgZm9yIGNvbnRleHQgJyR7Y29udGV4dH0nLiBVc2luZyBpdC5gKTtcbiAgICBjZCA9IHRoaXMuc2Vzc2lvbkNocm9tZWRyaXZlcnNbY29udGV4dF07XG4gICAgYXdhaXQgc2V0dXBFeGlzdGluZ0Nocm9tZWRyaXZlcih0aGlzLmxvZywgY2QpO1xuICB9IGVsc2Uge1xuICAgIGxldCBvcHRzID0gXy5jbG9uZURlZXAodGhpcy5vcHRzKTtcbiAgICBvcHRzLmNocm9tZVVzZVJ1bm5pbmdBcHAgPSB0cnVlO1xuXG4gICAgLy8gaWYgcmVxdWVzdGVkLCB0ZWxsIGNocm9tZWRyaXZlciB0byBhdHRhY2ggdG8gdGhlIGFuZHJvaWQgcGFja2FnZSB3ZSBoYXZlXG4gICAgLy8gYXNzb2NpYXRlZCB3aXRoIHRoZSBjb250ZXh0IG5hbWUsIHJhdGhlciB0aGFuIHRoZSBwYWNrYWdlIG9mIHRoZSBBVVQuXG4gICAgLy8gQW5kIHR1cm4gdGhpcyBvbiBieSBkZWZhdWx0IGZvciBjaHJvbWUtLWlmIGNocm9tZSBwb3BzIHVwIHdpdGggYSB3ZWJ2aWV3XG4gICAgLy8gYW5kIHNvbWVvbmUgd2FudHMgdG8gc3dpdGNoIHRvIGl0LCB3ZSBzaG91bGQgbGV0IGNocm9tZWRyaXZlciBjb25uZWN0IHRvXG4gICAgLy8gY2hyb21lIHJhdGhlciB0aGFuIHN0YXlpbmcgc3R1Y2sgb24gdGhlIEFVVFxuICAgIGlmIChvcHRzLmV4dHJhY3RDaHJvbWVBbmRyb2lkUGFja2FnZUZyb21Db250ZXh0TmFtZSB8fCBjb250ZXh0ID09PSBgJHtXRUJWSUVXX0JBU0V9Y2hyb21lYCkge1xuICAgICAgbGV0IGFuZHJvaWRQYWNrYWdlID0gY29udGV4dC5tYXRjaChgJHtXRUJWSUVXX0JBU0V9KC4rKWApO1xuICAgICAgaWYgKGFuZHJvaWRQYWNrYWdlICYmIGFuZHJvaWRQYWNrYWdlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgb3B0cy5jaHJvbWVBbmRyb2lkUGFja2FnZSA9IGFuZHJvaWRQYWNrYWdlWzFdO1xuICAgICAgfVxuICAgICAgaWYgKCFvcHRzLmV4dHJhY3RDaHJvbWVBbmRyb2lkUGFja2FnZUZyb21Db250ZXh0TmFtZSkge1xuICAgICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCAnZW5hYmxlV2Vidmlld0RldGFpbHNDb2xsZWN0aW9uJykgJiYgIXRoaXMub3B0cy5lbmFibGVXZWJ2aWV3RGV0YWlsc0NvbGxlY3Rpb24pIHtcbiAgICAgICAgICAvLyBXaGVuIGVuYWJsZVdlYnZpZXdEZXRhaWxzQ29sbGVjdGlvbiBjYXBhYmlsaXR5IGlzIGV4cGxpY2l0bHkgZGlzYWJsZWQsIHRyeSB0byBpZGVudGlmeVxuICAgICAgICAgIC8vIGNocm9tZUFuZHJvaWRQYWNrYWdlIGJhc2VkIG9uIGNvbnRleHRzLCBrbm93biBjaHJvbWUgdmFyaWFudCBwYWNrYWdlcyBhbmQgcXVlcnlBcHBTdGF0ZSByZXN1bHRcbiAgICAgICAgICAvLyBzaW5jZSB3ZWJ2aWV3c01hcHBpbmcgZG9lcyBub3QgaGF2ZSBpbmZvIG9iamVjdFxuICAgICAgICAgIGNvbnN0IGNvbnRleHRzID0gd2Vidmlld3NNYXBwaW5nLm1hcCgod20pID0+IHdtLndlYnZpZXdOYW1lKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IGtub3duUGFja2FnZSBvZiBLTk9XTl9DSFJPTUVfUEFDS0FHRV9OQU1FUykge1xuICAgICAgICAgICAgaWYgKF8uaW5jbHVkZXMoY29udGV4dHMsIGAke1dFQlZJRVdfQkFTRX0ke2tub3duUGFja2FnZX1gKSkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFwcFN0YXRlID0gYXdhaXQgdGhpcy5xdWVyeUFwcFN0YXRlKGtub3duUGFja2FnZSk7XG4gICAgICAgICAgICBpZiAoXy5pbmNsdWRlcyhbQVBQX1NUQVRFLlJVTk5JTkdfSU5fQkFDS0dST1VORCwgQVBQX1NUQVRFLlJVTk5JTkdfSU5fRk9SRUdST1VORF0sIGFwcFN0YXRlKSkge1xuICAgICAgICAgICAgICBvcHRzLmNocm9tZUFuZHJvaWRQYWNrYWdlID0ga25vd25QYWNrYWdlO1xuICAgICAgICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgSWRlbnRpZmllZCBjaHJvbWVBbmRyb2lkUGFja2FnZSBhcyAnJHtvcHRzLmNocm9tZUFuZHJvaWRQYWNrYWdlfScgYCArXG4gICAgICAgICAgICAgICAgYGZvciBjb250ZXh0ICcke2NvbnRleHR9JyBieSBxdWVyeWluZyBzdGF0ZXMgb2YgQ2hyb21lIGFwcCBwYWNrYWdlc2ApO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9yIChjb25zdCB3bSBvZiB3ZWJ2aWV3c01hcHBpbmcpIHtcbiAgICAgICAgICAgIGlmICh3bS53ZWJ2aWV3TmFtZSA9PT0gY29udGV4dCAmJiBfLmhhcyh3bT8uaW5mbywgJ0FuZHJvaWQtUGFja2FnZScpKSB7XG4gICAgICAgICAgICAgIG9wdHMuY2hyb21lQW5kcm9pZFBhY2thZ2UgPSB3bS5pbmZvWydBbmRyb2lkLVBhY2thZ2UnXTtcbiAgICAgICAgICAgICAgdGhpcy5sb2cuZGVidWcoYElkZW50aWZpZWQgY2hyb21lQW5kcm9pZFBhY2thZ2UgYXMgJyR7b3B0cy5jaHJvbWVBbmRyb2lkUGFja2FnZX0nIGAgK1xuICAgICAgICAgICAgICAgIGBmb3IgY29udGV4dCAnJHtjb250ZXh0fScgYnkgQ0RQYCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNkID0gYXdhaXQgdGhpcy5zZXR1cE5ld0Nocm9tZWRyaXZlcihvcHRzLCB0aGlzLmFkYi5jdXJEZXZpY2VJZCwgdGhpcy5hZGIsIGNvbnRleHQpO1xuICAgIC8vIGJpbmQgb3VyIHN0b3AvZXhpdCBoYW5kbGVyLCBwYXNzaW5nIGluIGNvbnRleHQgc28gd2Uga25vdyB3aGljaFxuICAgIC8vIG9uZSBzdG9wcGVkIHVuZXhwZWN0ZWRseVxuICAgIGNkLm9uKENocm9tZWRyaXZlci5FVkVOVF9DSEFOR0VELCAobXNnKSA9PiB7XG4gICAgICBpZiAobXNnLnN0YXRlID09PSBDaHJvbWVkcml2ZXIuU1RBVEVfU1RPUFBFRCkge1xuICAgICAgICB0aGlzLm9uQ2hyb21lZHJpdmVyU3RvcChjb250ZXh0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBzYXZlIHRoZSBjaHJvbWVkcml2ZXIgb2JqZWN0IHVuZGVyIHRoZSBjb250ZXh0XG4gICAgdGhpcy5zZXNzaW9uQ2hyb21lZHJpdmVyc1tjb250ZXh0XSA9IGNkO1xuICB9XG4gIC8vIGhvb2sgdXAgdGhlIGxvY2FsIHZhcmlhYmxlcyBzbyB3ZSBjYW4gcHJveHkgdGhpcyBiaXpcbiAgdGhpcy5jaHJvbWVkcml2ZXIgPSBjZDtcbiAgdGhpcy5wcm94eVJlcVJlcyA9IHRoaXMuY2hyb21lZHJpdmVyLnByb3h5UmVxLmJpbmQodGhpcy5jaHJvbWVkcml2ZXIpO1xuICB0aGlzLnByb3h5Q29tbWFuZCA9IHRoaXMuY2hyb21lZHJpdmVyLmp3cHJveHkuY29tbWFuZC5iaW5kKHRoaXMuY2hyb21lZHJpdmVyLmp3cHJveHkpO1xuICB0aGlzLmp3cFByb3h5QWN0aXZlID0gdHJ1ZTtcbn07XG5cbi8vIFN0b3AgcHJveHlpbmcgdG8gYW55IENocm9tZWRyaXZlclxuaGVscGVycy5zdXNwZW5kQ2hyb21lZHJpdmVyUHJveHkgPSBmdW5jdGlvbiBzdXNwZW5kQ2hyb21lZHJpdmVyUHJveHkgKCkge1xuICB0aGlzLmNocm9tZWRyaXZlciA9IG51bGw7XG4gIHRoaXMucHJveHlSZXFSZXMgPSBudWxsO1xuICB0aGlzLnByb3h5Q29tbWFuZCA9IG51bGw7XG4gIHRoaXMuandwUHJveHlBY3RpdmUgPSBmYWxzZTtcbn07XG5cbi8vIEhhbmRsZSBhbiBvdXQtb2YtYmFuZCBDaHJvbWVkcml2ZXIgc3RvcCBldmVudFxuaGVscGVycy5vbkNocm9tZWRyaXZlclN0b3AgPSBhc3luYyBmdW5jdGlvbiBvbkNocm9tZWRyaXZlclN0b3AgKGNvbnRleHQpIHtcbiAgdGhpcy5sb2cud2FybihgQ2hyb21lZHJpdmVyIGZvciBjb250ZXh0ICR7Y29udGV4dH0gc3RvcHBlZCB1bmV4cGVjdGVkbHlgKTtcbiAgaWYgKGNvbnRleHQgPT09IHRoaXMuY3VyQ29udGV4dCkge1xuICAgIC8vIHdlIGV4aXRlZCB1bmV4cGVjdGVkbHkgd2hpbGUgYXV0b21hdGluZyB0aGUgY3VycmVudCBjb250ZXh0IGFuZCBzbyB3YW50XG4gICAgLy8gdG8gc2h1dCBkb3duIHRoZSBzZXNzaW9uIGFuZCByZXNwb25kIHdpdGggYW4gZXJyb3JcbiAgICBsZXQgZXJyID0gbmV3IEVycm9yKCdDaHJvbWVkcml2ZXIgcXVpdCB1bmV4cGVjdGVkbHkgZHVyaW5nIHNlc3Npb24nKTtcbiAgICBhd2FpdCB0aGlzLnN0YXJ0VW5leHBlY3RlZFNodXRkb3duKGVycik7XG4gIH0gZWxzZSB7XG4gICAgLy8gaWYgYSBDaHJvbWVkcml2ZXIgaW4gdGhlIG5vbi1hY3RpdmUgY29udGV4dCBiYXJmcywgd2UgZG9uJ3QgcmVhbGx5XG4gICAgLy8gY2FyZSwgd2UnbGwganVzdCBtYWtlIGEgbmV3IG9uZSBuZXh0IHRpbWUgd2UgbmVlZCB0aGUgY29udGV4dC5cbiAgICB0aGlzLmxvZy53YXJuKFwiQ2hyb21lZHJpdmVyIHF1aXQgdW5leHBlY3RlZGx5LCBidXQgaXQgd2Fzbid0IHRoZSBhY3RpdmUgXCIgK1xuICAgICAgJ2NvbnRleHQsIGlnbm9yaW5nJyk7XG4gICAgZGVsZXRlIHRoaXMuc2Vzc2lvbkNocm9tZWRyaXZlcnNbY29udGV4dF07XG4gIH1cbn07XG5cbi8vIEludGVudGlvbmFsbHkgc3RvcCBhbGwgdGhlIGNocm9tZWRyaXZlcnMgY3VycmVudGx5IGFjdGl2ZSwgYW5kIGlnbm9yZVxuLy8gdGhlaXIgZXhpdCBldmVudHNcbmhlbHBlcnMuc3RvcENocm9tZWRyaXZlclByb3hpZXMgPSBhc3luYyBmdW5jdGlvbiBzdG9wQ2hyb21lZHJpdmVyUHJveGllcyAoKSB7XG4gIHRoaXMuc3VzcGVuZENocm9tZWRyaXZlclByb3h5KCk7IC8vIG1ha2Ugc3VyZSB3ZSB0dXJuIG9mZiB0aGUgcHJveHkgZmxhZ1xuICBmb3IgKGxldCBjb250ZXh0IG9mIF8ua2V5cyh0aGlzLnNlc3Npb25DaHJvbWVkcml2ZXJzKSkge1xuICAgIGxldCBjZCA9IHRoaXMuc2Vzc2lvbkNocm9tZWRyaXZlcnNbY29udGV4dF07XG4gICAgdGhpcy5sb2cuZGVidWcoYFN0b3BwaW5nIGNocm9tZWRyaXZlciBmb3IgY29udGV4dCAke2NvbnRleHR9YCk7XG4gICAgLy8gc3RvcCBsaXN0ZW5pbmcgZm9yIHRoZSBzdG9wcGVkIHN0YXRlIGV2ZW50XG4gICAgY2QucmVtb3ZlQWxsTGlzdGVuZXJzKENocm9tZWRyaXZlci5FVkVOVF9DSEFOR0VEKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgY2Quc3RvcCgpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5sb2cud2FybihgRXJyb3Igc3RvcHBpbmcgQ2hyb21lZHJpdmVyOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIH1cbiAgICBkZWxldGUgdGhpcy5zZXNzaW9uQ2hyb21lZHJpdmVyc1tjb250ZXh0XTtcbiAgfVxufTtcblxuaGVscGVycy5pc0Nocm9tZWRyaXZlckNvbnRleHQgPSBmdW5jdGlvbiBpc0Nocm9tZWRyaXZlckNvbnRleHQgKHZpZXdOYW1lKSB7XG4gIHJldHVybiBfLmluY2x1ZGVzKHZpZXdOYW1lLCBXRUJWSUVXX1dJTikgfHwgdmlld05hbWUgPT09IENIUk9NSVVNX1dJTjtcbn07XG5cbmhlbHBlcnMuc2hvdWxkRGlzbWlzc0Nocm9tZVdlbGNvbWUgPSBmdW5jdGlvbiBzaG91bGREaXNtaXNzQ2hyb21lV2VsY29tZSAoKSB7XG4gIHJldHVybiAhIXRoaXMub3B0cy5jaHJvbWVPcHRpb25zICYmXG4gICAgICAgICBfLmlzQXJyYXkodGhpcy5vcHRzLmNocm9tZU9wdGlvbnMuYXJncykgJiZcbiAgICAgICAgIHRoaXMub3B0cy5jaHJvbWVPcHRpb25zLmFyZ3MuaW5jbHVkZXMoJy0tbm8tZmlyc3QtcnVuJyk7XG59O1xuXG5oZWxwZXJzLmRpc21pc3NDaHJvbWVXZWxjb21lID0gYXN5bmMgZnVuY3Rpb24gZGlzbWlzc0Nocm9tZVdlbGNvbWUgKCkge1xuICB0aGlzLmxvZy5pbmZvKCdUcnlpbmcgdG8gZGlzbWlzcyBDaHJvbWUgd2VsY29tZScpO1xuICBsZXQgYWN0aXZpdHkgPSBhd2FpdCB0aGlzLmdldEN1cnJlbnRBY3Rpdml0eSgpO1xuICBpZiAoYWN0aXZpdHkgIT09ICdvcmcuY2hyb21pdW0uY2hyb21lLmJyb3dzZXIuZmlyc3RydW4uRmlyc3RSdW5BY3Rpdml0eScpIHtcbiAgICB0aGlzLmxvZy5pbmZvKCdDaHJvbWUgd2VsY29tZSBkaWFsb2cgbmV2ZXIgc2hvd2VkIHVwISBDb250aW51aW5nJyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxldCBlbCA9IGF3YWl0IHRoaXMuZmluZEVsT3JFbHMoJ2lkJywgJ2NvbS5hbmRyb2lkLmNocm9tZTppZC90ZXJtc19hY2NlcHQnLCBmYWxzZSk7XG4gIGF3YWl0IHRoaXMuY2xpY2soZWwuRUxFTUVOVCk7XG4gIHRyeSB7XG4gICAgbGV0IGVsID0gYXdhaXQgdGhpcy5maW5kRWxPckVscygnaWQnLCAnY29tLmFuZHJvaWQuY2hyb21lOmlkL25lZ2F0aXZlX2J1dHRvbicsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLmNsaWNrKGVsLkVMRU1FTlQpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gRE8gTk9USElORywgVEhJUyBERVZJQ0UgRElETlQgTEFVTkNIIFRIRSBTSUdOSU4gRElBTE9HXG4gICAgLy8gSVQgTVVTVCBCRSBBIE5PTiBHTVMgREVWSUNFXG4gICAgdGhpcy5sb2cud2FybihgVGhpcyBkZXZpY2UgZGlkIG5vdCBzaG93IENocm9tZSBTaWduSW4gZGlhbG9nLCAke2UubWVzc2FnZX1gKTtcbiAgfVxufTtcblxuaGVscGVycy5zdGFydENocm9tZVNlc3Npb24gPSBhc3luYyBmdW5jdGlvbiBzdGFydENocm9tZVNlc3Npb24gKCkge1xuICB0aGlzLmxvZy5pbmZvKCdTdGFydGluZyBhIGNocm9tZS1iYXNlZCBicm93c2VyIHNlc3Npb24nKTtcbiAgbGV0IG9wdHMgPSBfLmNsb25lRGVlcCh0aGlzLm9wdHMpO1xuXG4gIGNvbnN0IGtub3duUGFja2FnZXMgPSBbXG4gICAgJ29yZy5jaHJvbWl1bS5jaHJvbWUuc2hlbGwnLFxuICAgICdjb20uYW5kcm9pZC5jaHJvbWUnLFxuICAgICdjb20uY2hyb21lLmJldGEnLFxuICAgICdvcmcuY2hyb21pdW0uY2hyb21lJyxcbiAgICAnb3JnLmNocm9taXVtLndlYnZpZXdfc2hlbGwnLFxuICBdO1xuXG4gIGlmIChfLmluY2x1ZGVzKGtub3duUGFja2FnZXMsIHRoaXMub3B0cy5hcHBQYWNrYWdlKSkge1xuICAgIG9wdHMuY2hyb21lQnVuZGxlSWQgPSB0aGlzLm9wdHMuYXBwUGFja2FnZTtcbiAgfSBlbHNlIHtcbiAgICBvcHRzLmNocm9tZUFuZHJvaWRBY3Rpdml0eSA9IHRoaXMub3B0cy5hcHBBY3Rpdml0eTtcbiAgfVxuICB0aGlzLmNocm9tZWRyaXZlciA9IGF3YWl0IHRoaXMuc2V0dXBOZXdDaHJvbWVkcml2ZXIob3B0cywgdGhpcy5hZGIuY3VyRGV2aWNlSWQsIHRoaXMuYWRiKTtcbiAgdGhpcy5jaHJvbWVkcml2ZXIub24oQ2hyb21lZHJpdmVyLkVWRU5UX0NIQU5HRUQsIChtc2cpID0+IHtcbiAgICBpZiAobXNnLnN0YXRlID09PSBDaHJvbWVkcml2ZXIuU1RBVEVfU1RPUFBFRCkge1xuICAgICAgdGhpcy5vbkNocm9tZWRyaXZlclN0b3AoQ0hST01JVU1fV0lOKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIE5vdyB0aGF0IHdlIGhhdmUgYSBDaHJvbWUgc2Vzc2lvbiwgd2UgZW5zdXJlIHRoYXQgdGhlIGNvbnRleHQgaXNcbiAgLy8gYXBwcm9wcmlhdGVseSBzZXQgYW5kIHRoYXQgdGhpcyBjaHJvbWVkcml2ZXIgaXMgYWRkZWQgdG8gdGhlIGxpc3RcbiAgLy8gb2Ygc2Vzc2lvbiBjaHJvbWVkcml2ZXJzIHNvIHdlIGNhbiBzd2l0Y2ggYmFjayBhbmQgZm9ydGhcbiAgdGhpcy5jdXJDb250ZXh0ID0gQ0hST01JVU1fV0lOO1xuICB0aGlzLnNlc3Npb25DaHJvbWVkcml2ZXJzW0NIUk9NSVVNX1dJTl0gPSB0aGlzLmNocm9tZWRyaXZlcjtcbiAgdGhpcy5wcm94eVJlcVJlcyA9IHRoaXMuY2hyb21lZHJpdmVyLnByb3h5UmVxLmJpbmQodGhpcy5jaHJvbWVkcml2ZXIpO1xuICB0aGlzLnByb3h5Q29tbWFuZCA9IHRoaXMuY2hyb21lZHJpdmVyLmp3cHJveHkuY29tbWFuZC5iaW5kKHRoaXMuY2hyb21lZHJpdmVyLmp3cHJveHkpO1xuICB0aGlzLmp3cFByb3h5QWN0aXZlID0gdHJ1ZTtcblxuICBpZiAodGhpcy5zaG91bGREaXNtaXNzQ2hyb21lV2VsY29tZSgpKSB7XG4gICAgLy8gZGlzbWlzcyBDaHJvbWUgd2VsY29tZSBkaWFsb2dcbiAgICBhd2FpdCB0aGlzLmRpc21pc3NDaHJvbWVXZWxjb21lKCk7XG4gIH1cbn07XG5cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEludGVybmFsIGxpYnJhcnkgZnVuY3Rpb25zXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5hc3luYyBmdW5jdGlvbiBzZXR1cEV4aXN0aW5nQ2hyb21lZHJpdmVyIChsb2csIGNocm9tZWRyaXZlcikge1xuICAvLyBjaGVjayB0aGUgc3RhdHVzIGJ5IHNlbmRpbmcgYSBzaW1wbGUgd2luZG93LWJhc2VkIGNvbW1hbmQgdG8gQ2hyb21lRHJpdmVyXG4gIC8vIGlmIHRoZXJlIGlzIGFuIGVycm9yLCB3ZSB3YW50IHRvIHJlY3JlYXRlIHRoZSBDaHJvbWVEcml2ZXIgc2Vzc2lvblxuICBpZiAoIWF3YWl0IGNocm9tZWRyaXZlci5oYXNXb3JraW5nV2VidmlldygpKSB7XG4gICAgbG9nLmRlYnVnKCdDaHJvbWVEcml2ZXIgaXMgbm90IGFzc29jaWF0ZWQgd2l0aCBhIHdpbmRvdy4gJyArXG4gICAgICAgICAgICAgICAgICdSZS1pbml0aWFsaXppbmcgdGhlIHNlc3Npb24uJyk7XG4gICAgYXdhaXQgY2hyb21lZHJpdmVyLnJlc3RhcnQoKTtcbiAgfVxuICByZXR1cm4gY2hyb21lZHJpdmVyO1xufVxuXG4vKipcbiAqIEZpbmQgYSBmcmVlIHBvcnQgdG8gaGF2ZSBDaHJvbWVkcml2ZXIgbGlzdGVuIG9uLlxuICpcbiAqIEBwYXJhbSB7YXJyYXl9IHBvcnRTcGVjIC0gQXJyYXkgd2hpY2ggaXMgYSBsaXN0IG9mIHBvcnRzLiBBIGxpc3QgaXRlbSBtYXlcbiAqIGFsc28gaXRzZWxmIGJlIGFuIGFycmF5IG9mIGxlbmd0aCAyIHNwZWNpZnlpbmcgYSBzdGFydCBhbmQgZW5kIHBvcnQgb2ZcbiAqIGEgcmFuZ2UuIFNvbWUgdmFsaWQgcG9ydCBzcGVjczpcbiAqICAgIC0gWzgwMDAsIDgwMDEsIDgwMDJdXG4gKiAgICAtIFtbODAwMCwgODAwNV1dXG4gKiAgICAtIFs4MDAwLCBbOTAwMCwgOTEwMF1dXG4gKiBAcGFyYW0ge09iamVjdD99IGxvZyBMb2dnZXIgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtudW1iZXJ9IEEgZnJlZSBwb3J0XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldENocm9tZWRyaXZlclBvcnQgKHBvcnRTcGVjLCBsb2cgPSBudWxsKSB7XG4gIGNvbnN0IGdldFBvcnQgPSBCLnByb21pc2lmeShQb3J0RmluZGVyLmdldFBvcnQsIHtjb250ZXh0OiBQb3J0RmluZGVyfSk7XG5cbiAgLy8gaWYgdGhlIHVzZXIgZGlkbid0IGdpdmUgdXMgYW55IHNwZWNpZmljIGluZm9ybWF0aW9uIGFib3V0IGNocm9tZWRyaXZlclxuICAvLyBwb3J0IHJhbmdlcywganVzdCBmaW5kIGFueSBmcmVlIHBvcnRcbiAgaWYgKCFwb3J0U3BlYykge1xuICAgIGNvbnN0IHBvcnQgPSBhd2FpdCBnZXRQb3J0KCk7XG4gICAgbG9nPy5kZWJ1ZyhgQSBwb3J0IHdhcyBub3QgZ2l2ZW4sIHVzaW5nIHJhbmRvbSBmcmVlIHBvcnQ6ICR7cG9ydH1gKTtcbiAgICByZXR1cm4gcG9ydDtcbiAgfVxuXG4gIC8vIG90aGVyd2lzZSBmaW5kIHRoZSBmcmVlIHBvcnQgYmFzZWQgb24gYSBsaXN0IG9yIHJhbmdlIHByb3ZpZGVkIGJ5IHRoZSB1c2VyXG4gIGxvZz8uZGVidWcoYEZpbmRpbmcgYSBmcmVlIHBvcnQgZm9yIGNocm9tZWRyaXZlciB1c2luZyBzcGVjICR7SlNPTi5zdHJpbmdpZnkocG9ydFNwZWMpfWApO1xuICBsZXQgZm91bmRQb3J0ID0gbnVsbDtcbiAgZm9yIChjb25zdCBwb3RlbnRpYWxQb3J0IG9mIHBvcnRTcGVjKSB7XG4gICAgbGV0IHBvcnQsIHN0b3BQb3J0O1xuICAgIGlmIChfLmlzQXJyYXkocG90ZW50aWFsUG9ydCkpIHtcbiAgICAgIChbcG9ydCwgc3RvcFBvcnRdID0gcG90ZW50aWFsUG9ydCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBvcnQgPSBwYXJzZUludChwb3RlbnRpYWxQb3J0LCAxMCk7IC8vIGVuc3VyZSB3ZSBoYXZlIGEgbnVtYmVyIGFuZCBub3QgYSBzdHJpbmdcbiAgICAgIHN0b3BQb3J0ID0gcG9ydDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGxvZz8uZGVidWcoYENoZWNraW5nIHBvcnQgcmFuZ2UgJHtwb3J0fToke3N0b3BQb3J0fWApO1xuICAgICAgZm91bmRQb3J0ID0gYXdhaXQgZ2V0UG9ydCh7cG9ydCwgc3RvcFBvcnR9KTtcbiAgICAgIGJyZWFrO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZz8uZGVidWcoYE5vdGhpbmcgaW4gcG9ydCByYW5nZSAke3BvcnR9OiR7c3RvcFBvcnR9IHdhcyBhdmFpbGFibGVgKTtcbiAgICB9XG4gIH1cblxuICBpZiAoZm91bmRQb3J0ID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCBhIGZyZWUgcG9ydCBmb3IgY2hyb21lZHJpdmVyIHVzaW5nIGAgK1xuICAgICAgICAgICAgICAgICAgICBgY2hyb21lZHJpdmVyUG9ydHMgc3BlYyAke0pTT04uc3RyaW5naWZ5KHBvcnRTcGVjKX1gKTtcbiAgfVxuXG4gIGxvZz8uZGVidWcoYFVzaW5nIGZyZWUgcG9ydCAke2ZvdW5kUG9ydH0gZm9yIGNocm9tZWRyaXZlcmApO1xuICByZXR1cm4gZm91bmRQb3J0O1xufVxuXG5oZWxwZXJzLmlzQ2hyb21lZHJpdmVyQXV0b2Rvd25sb2FkRW5hYmxlZCA9IGZ1bmN0aW9uIGlzQ2hyb21lZHJpdmVyQXV0b2Rvd25sb2FkRW5hYmxlZCAoKSB7XG4gIGlmICh0aGlzLmlzRmVhdHVyZUVuYWJsZWQoQ0hST01FRFJJVkVSX0FVVE9ET1dOTE9BRF9GRUFUVVJFKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHRoaXM/LmxvZz8uZGVidWcoYEF1dG9tYXRlZCBDaHJvbWVkcml2ZXIgZG93bmxvYWQgaXMgZGlzYWJsZWQuIGAgK1xuICAgIGBVc2UgJyR7Q0hST01FRFJJVkVSX0FVVE9ET1dOTE9BRF9GRUFUVVJFfScgc2VydmVyIGZlYXR1cmUgdG8gZW5hYmxlIGl0YCk7XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmhlbHBlcnMuc2V0dXBOZXdDaHJvbWVkcml2ZXIgPSBhc3luYyBmdW5jdGlvbiBzZXR1cE5ld0Nocm9tZWRyaXZlciAob3B0cywgY3VyRGV2aWNlSWQsIGFkYiwgY29udGV4dCA9IG51bGwpIHtcbiAgaWYgKG9wdHMuY2hyb21lRHJpdmVyUG9ydCkge1xuICAgIHRoaXM/LmxvZz8ud2FybihgVGhlICdjaHJvbWVEcml2ZXJQb3J0JyBjYXBhYmlsaXR5IGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgJ2Nocm9tZWRyaXZlclBvcnQnIGluc3RlYWRgKTtcbiAgICBvcHRzLmNocm9tZWRyaXZlclBvcnQgPSBvcHRzLmNocm9tZURyaXZlclBvcnQ7XG4gIH1cblxuICBpZiAob3B0cy5jaHJvbWVkcml2ZXJQb3J0KSB7XG4gICAgdGhpcz8ubG9nPy5kZWJ1ZyhgVXNpbmcgdXNlci1zcGVjaWZpZWQgcG9ydCAke29wdHMuY2hyb21lZHJpdmVyUG9ydH0gZm9yIGNocm9tZWRyaXZlcmApO1xuICB9IGVsc2Uge1xuICAgIC8vIGlmIGEgc2luZ2xlIHBvcnQgd2Fzbid0IGdpdmVuLCB3ZSdsbCBsb29rIGZvciBhIGZyZWUgb25lXG4gICAgb3B0cy5jaHJvbWVkcml2ZXJQb3J0ID0gYXdhaXQgZ2V0Q2hyb21lZHJpdmVyUG9ydChvcHRzLmNocm9tZWRyaXZlclBvcnRzLCB0aGlzPy5sb2cpO1xuICB9XG5cbiAgY29uc3QgZGV0YWlscyA9IGNvbnRleHQgPyB3ZWJ2aWV3SGVscGVycy5nZXRXZWJ2aWV3RGV0YWlscyhhZGIsIGNvbnRleHQpIDogdW5kZWZpbmVkO1xuICBpZiAoIV8uaXNFbXB0eShkZXRhaWxzKSkge1xuICAgIHRoaXM/LmxvZz8uZGVidWcoJ1Bhc3Npbmcgd2ViIHZpZXcgZGV0YWlscyB0byB0aGUgQ2hyb21lZHJpdmVyIGNvbnN0cnVjdG9yOiAnICtcbiAgICAgIEpTT04uc3RyaW5naWZ5KGRldGFpbHMsIG51bGwsIDIpKTtcbiAgfVxuXG4gIGNvbnN0IGNocm9tZWRyaXZlciA9IG5ldyBDaHJvbWVkcml2ZXIoe1xuICAgIHBvcnQ6IG9wdHMuY2hyb21lZHJpdmVyUG9ydCxcbiAgICBleGVjdXRhYmxlOiBvcHRzLmNocm9tZWRyaXZlckV4ZWN1dGFibGUsXG4gICAgYWRiLFxuICAgIGNtZEFyZ3M6IG9wdHMuY2hyb21lZHJpdmVyQXJncyxcbiAgICB2ZXJib3NlOiAhIW9wdHMuc2hvd0Nocm9tZWRyaXZlckxvZyxcbiAgICBleGVjdXRhYmxlRGlyOiBvcHRzLmNocm9tZWRyaXZlckV4ZWN1dGFibGVEaXIsXG4gICAgbWFwcGluZ1BhdGg6IG9wdHMuY2hyb21lZHJpdmVyQ2hyb21lTWFwcGluZ0ZpbGUsXG4gICAgYnVuZGxlSWQ6IG9wdHMuY2hyb21lQnVuZGxlSWQsXG4gICAgdXNlU3lzdGVtRXhlY3V0YWJsZTogb3B0cy5jaHJvbWVkcml2ZXJVc2VTeXN0ZW1FeGVjdXRhYmxlLFxuICAgIGRpc2FibGVCdWlsZENoZWNrOiBvcHRzLmNocm9tZWRyaXZlckRpc2FibGVCdWlsZENoZWNrLFxuICAgIGRldGFpbHMsXG4gICAgaXNBdXRvZG93bmxvYWRFbmFibGVkOiB0aGlzPy5pc0Nocm9tZWRyaXZlckF1dG9kb3dubG9hZEVuYWJsZWQ/LigpXG4gIH0pO1xuXG4gIC8vIG1ha2Ugc3VyZSB0aGVyZSBhcmUgY2hyb21lT3B0aW9uc1xuICBvcHRzLmNocm9tZU9wdGlvbnMgPSBvcHRzLmNocm9tZU9wdGlvbnMgfHwge307XG4gIC8vIHRyeSBvdXQgYW55IHByZWZpeGVkIGNocm9tZU9wdGlvbnMsXG4gIC8vIGFuZCBzdHJpcCB0aGUgcHJlZml4XG4gIGZvciAoY29uc3Qgb3B0IG9mIF8ua2V5cyhvcHRzKSkge1xuICAgIGlmIChvcHQuZW5kc1dpdGgoJzpjaHJvbWVPcHRpb25zJykpIHtcbiAgICAgIHRoaXM/LmxvZz8ud2FybihgTWVyZ2luZyAnJHtvcHR9JyBpbnRvICdjaHJvbWVPcHRpb25zJy4gVGhpcyBtYXkgY2F1c2UgdW5leHBlY3RlZCBiZWhhdmlvcmApO1xuICAgICAgXy5tZXJnZShvcHRzLmNocm9tZU9wdGlvbnMsIG9wdHNbb3B0XSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgY2FwcyA9IHdlYnZpZXdIZWxwZXJzLmNyZWF0ZUNocm9tZWRyaXZlckNhcHMob3B0cywgY3VyRGV2aWNlSWQsIGRldGFpbHMpO1xuICB0aGlzPy5sb2c/LmRlYnVnKGBCZWZvcmUgc3RhcnRpbmcgY2hyb21lZHJpdmVyLCBhbmRyb2lkUGFja2FnZSBpcyAnJHtjYXBzLmNocm9tZU9wdGlvbnMuYW5kcm9pZFBhY2thZ2V9J2ApO1xuICBhd2FpdCBjaHJvbWVkcml2ZXIuc3RhcnQoY2Fwcyk7XG4gIHJldHVybiBjaHJvbWVkcml2ZXI7XG59O1xuY29uc3Qgc2V0dXBOZXdDaHJvbWVkcml2ZXIgPSBoZWxwZXJzLnNldHVwTmV3Q2hyb21lZHJpdmVyO1xuXG5cbk9iamVjdC5hc3NpZ24oZXh0ZW5zaW9ucywgY29tbWFuZHMsIGhlbHBlcnMpO1xuZXhwb3J0IHsgY29tbWFuZHMsIGhlbHBlcnMsIHNldHVwTmV3Q2hyb21lZHJpdmVyIH07XG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFBK0M7QUFBQTtBQUUvQyxNQUFNQSxpQ0FBaUMsR0FBRywyQkFBMkI7QUFFckUsSUFBSUMsUUFBUSxHQUFHLENBQUMsQ0FBQztFQUFFQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0VBQUVDLFVBQVUsR0FBRyxDQUFDLENBQUM7O0FBQUM7QUFBQTtBQU1qREYsUUFBUSxDQUFDRyxpQkFBaUIsR0FBRyxlQUFlQSxpQkFBaUIsR0FBSTtFQUcvRCxPQUFPLElBQUksQ0FBQ0MsVUFBVSxJQUFJLElBQUksQ0FBQ0Msa0JBQWtCLEVBQUU7QUFDckQsQ0FBQztBQUVETCxRQUFRLENBQUNNLFdBQVcsR0FBRyxlQUFlQSxXQUFXLEdBQUk7RUFDbkQsTUFBTUMsZUFBZSxHQUFHLE1BQU1DLHVCQUFjLENBQUNDLGtCQUFrQixDQUFDLElBQUksQ0FBQ0MsR0FBRyxFQUFFLElBQUksQ0FBQ0MsSUFBSSxDQUFDO0VBQ3BGLE9BQU8sSUFBSSxDQUFDQyxjQUFjLENBQUNMLGVBQWUsQ0FBQztBQUM3QyxDQUFDO0FBRURQLFFBQVEsQ0FBQ2EsVUFBVSxHQUFHLGVBQWVBLFVBQVUsQ0FBRUMsSUFBSSxFQUFFO0VBQ3JELElBQUksQ0FBQ0MsYUFBSSxDQUFDQyxRQUFRLENBQUNGLElBQUksQ0FBQyxFQUFFO0lBQ3hCQSxJQUFJLEdBQUcsSUFBSSxDQUFDVCxrQkFBa0IsRUFBRTtFQUNsQyxDQUFDLE1BQU0sSUFBSVMsSUFBSSxLQUFLRywyQkFBVyxFQUFFO0lBRS9CSCxJQUFJLEdBQUcsSUFBSSxDQUFDSSxrQkFBa0IsRUFBRTtFQUNsQztFQUVBLElBQUlKLElBQUksS0FBSyxJQUFJLENBQUNWLFVBQVUsRUFBRTtJQUM1QjtFQUNGO0VBRUEsTUFBTUcsZUFBZSxH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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","names":["CHROMEDRIVER_AUTODOWNLOAD_FEATURE","commands","helpers","extensions","getCurrentContext","curContext","defaultContextName","getContexts","webviewsMapping","webviewHelpers","getWebViewsMapping","adb","opts","assignContexts","setContext","name","util","hasValue","WEBVIEW_WIN","defaultWebviewName","contexts","_","includes","errors","NoSuchContextError","switchContext","mobileGetContexts","androidDeviceSocket","ensureWebviewsHavePages","webviewDevtoolsPort","enableWebviewDetailsCollection","Object","assign","isChromeSession","webviews","parseWebviewNames","NATIVE_WIN","log","debug","JSON","stringify","isChromedriverContext","startChromedriverProxy","recreateChromeDriverSessions","stopChromedriverProxies","suspendChromedriverProxy","Error","WEBVIEW_BASE","appPackage","isWebContext","context","cd","sessionChromedrivers","setupExistingChromedriver","cloneDeep","chromeUseRunningApp","extractChromeAndroidPackageFromContextName","androidPackage","match","length","chromeAndroidPackage","has","map","wm","webviewName","knownPackage","KNOWN_CHROME_PACKAGE_NAMES","appState","queryAppState","APP_STATE","RUNNING_IN_BACKGROUND","RUNNING_IN_FOREGROUND","info","setupNewChromedriver","curDeviceId","on","Chromedriver","EVENT_CHANGED","msg","state","STATE_STOPPED","onChromedriverStop","chromedriver","proxyReqRes","proxyReq","bind","proxyCommand","jwproxy","command","jwpProxyActive","warn","err","startUnexpectedShutdown","keys","removeAllListeners","stop","message","viewName","CHROMIUM_WIN","shouldDismissChromeWelcome","chromeOptions","isArray","args","dismissChromeWelcome","activity","getCurrentActivity","el","findElOrEls","click","ELEMENT","e","startChromeSession","knownPackages","chromeBundleId","chromeAndroidActivity","appActivity","hasWorkingWebview","restart","getChromedriverPort","portSpec","getPort","B","promisify","PortFinder","port","foundPort","potentialPort","stopPort","parseInt","isChromedriverAutodownloadEnabled","isFeatureEnabled","chromeDriverPort","chromedriverPort","chromedriverPorts","details","getWebviewDetails","undefined","isEmpty","executable","chromedriverExecutable","cmdArgs","chromedriverArgs","verbose","showChromedriverLog","executableDir","chromedriverExecutableDir","mappingPath","chromedriverChromeMappingFile","bundleId","useSystemExecutable","chromedriverUseSystemExecutable","disableBuildCheck","chromedriverDisableBuildCheck","isAutodownloadEnabled","opt","endsWith","merge","caps","createChromedriverCaps","start"],"sources":["../../../lib/commands/context.js"],"sourcesContent":["import _ from 'lodash';\nimport Chromedriver from 'appium-chromedriver';\nimport PortFinder from 'portfinder';\nimport B from 'bluebird';\nimport { util } from 'appium/support';\nimport { errors } from 'appium/driver';\nimport {\n default as webviewHelpers,\n NATIVE_WIN, WEBVIEW_BASE, WEBVIEW_WIN, CHROMIUM_WIN, KNOWN_CHROME_PACKAGE_NAMES\n} from '../webview-helpers';\nimport { APP_STATE } from '../android-helpers';\n\nconst CHROMEDRIVER_AUTODOWNLOAD_FEATURE = 'chromedriver_autodownload';\n\nlet commands = {}, helpers = {}, extensions = {};\n\n\n/* -------------------------------\n * Actual MJSONWP command handlers\n * ------------------------------- */\ncommands.getCurrentContext = async function getCurrentContext () { // eslint-disable-line require-await\n // if the current context is `null`, indicating no context\n // explicitly set, it is the default context\n return this.curContext || this.defaultContextName();\n};\n\ncommands.getContexts = async function getContexts () {\n const webviewsMapping = await webviewHelpers.getWebViewsMapping(this.adb, this.opts);\n return this.assignContexts(webviewsMapping);\n};\n\ncommands.setContext = async function setContext (name) {\n if (!util.hasValue(name)) {\n name = this.defaultContextName();\n } else if (name === WEBVIEW_WIN) {\n // handle setContext \"WEBVIEW\"\n name = this.defaultWebviewName();\n }\n // if we're already in the context we want, do nothing\n if (name === this.curContext) {\n return;\n }\n\n const webviewsMapping = await webviewHelpers.getWebViewsMapping(this.adb, this.opts);\n const contexts = this.assignContexts(webviewsMapping);\n // if the context we want doesn't exist, fail\n if (!_.includes(contexts, name)) {\n throw new errors.NoSuchContextError();\n }\n\n await this.switchContext(name, webviewsMapping);\n this.curContext = name;\n};\n\n/**\n * @typedef {Object} WebviewsMapping\n * @property {string} proc The name of the Devtools Unix socket\n * @property {string} webview The web view alias. Looks like `WEBVIEW_`\n * prefix plus PID or package name\n * @property {?Object} info Webview information as it is retrieved by\n * /json/version CDP endpoint\n * @property {?Array<Object>} pages Webview pages list as it is retrieved by\n * /json/list CDP endpoint\n * @propery {?string} webviewName An actual webview name for switching context.\n * This value becomes null when failing to find a PID for a webview.\n *\n * The following json demonstrates the example of WebviewsMapping object.\n * Note that `description` in `page` can be an empty string most likely when it comes to Mobile Chrome)\n * {\n * \"proc\": \"@webview_devtools_remote_22138\",\n * \"webview\": \"WEBVIEW_22138\",\n * \"info\": {\n * \"Android-Package\": \"io.appium.settings\",\n * \"Browser\": \"Chrome/74.0.3729.185\",\n * \"Protocol-Version\": \"1.3\",\n * \"User-Agent\": \"Mozilla/5.0 (Linux; Android 10; Android SDK built for x86 Build/QSR1.190920.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/74.0.3729.185 Mobile Safari/537.36\",\n * \"V8-Version\": \"7.4.288.28\",\n * \"WebKit-Version\": \"537.36 (@22955682f94ce09336197bfb8dffea991fa32f0d)\",\n * \"webSocketDebuggerUrl\": \"ws://127.0.0.1:10900/devtools/browser\"\n * },\n * \"pages\": [\n * {\n * \"description\": \"{\\\"attached\\\":true,\\\"empty\\\":false,\\\"height\\\":1458,\\\"screenX\\\":0,\\\"screenY\\\":336,\\\"visible\\\":true,\\\"width\\\":1080}\",\n * \"devtoolsFrontendUrl\": \"http://chrome-devtools-frontend.appspot.com/serve_rev/@22955682f94ce09336197bfb8dffea991fa32f0d/inspector.html?ws=127.0.0.1:10900/devtools/page/27325CC50B600D31B233F45E09487B1F\",\n * \"id\": \"27325CC50B600D31B233F45E09487B1F\",\n * \"title\": \"Releases · appium/appium · GitHub\",\n * \"type\": \"page\",\n * \"url\": \"https://github.com/appium/appium/releases\",\n * \"webSocketDebuggerUrl\": \"ws://127.0.0.1:10900/devtools/page/27325CC50B600D31B233F45E09487B1F\"\n * }\n * ],\n * \"webviewName\": \"WEBVIEW_com.io.appium.setting\"\n * }\n */\n\n/**\n * Returns a webviewsMapping based on CDP endpoints\n *\n * @return {Array<WebviewsMapping>} webviewsMapping\n */\ncommands.mobileGetContexts = async function mobileGetContexts () {\n const opts = {\n androidDeviceSocket: this.opts.androidDeviceSocket,\n ensureWebviewsHavePages: true,\n webviewDevtoolsPort: this.opts.webviewDevtoolsPort,\n enableWebviewDetailsCollection: true\n };\n return await webviewHelpers.getWebViewsMapping(this.adb, opts);\n};\n\nhelpers.assignContexts = function assignContexts (webviewsMapping) {\n const opts = Object.assign({isChromeSession: this.isChromeSession}, this.opts);\n const webviews = webviewHelpers.parseWebviewNames(webviewsMapping, opts);\n this.contexts = [NATIVE_WIN, ...webviews];\n this.log.debug(`Available contexts: ${JSON.stringify(this.contexts)}`);\n return this.contexts;\n};\n\nhelpers.switchContext = async function switchContext (name, webviewsMapping) {\n // We have some options when it comes to webviews. If we want a\n // Chromedriver webview, we can only control one at a time.\n if (this.isChromedriverContext(name)) {\n // start proxying commands directly to chromedriver\n await this.startChromedriverProxy(name, webviewsMapping);\n } else if (this.isChromedriverContext(this.curContext)) {\n // if we're moving to a non-chromedriver webview, and our current context\n // _is_ a chromedriver webview, if caps recreateChromeDriverSessions is set\n // to true then kill chromedriver session using stopChromedriverProxies or\n // else simply suspend proxying to the latter\n if (this.opts.recreateChromeDriverSessions) {\n this.log.debug('recreateChromeDriverSessions set to true; killing existing chromedrivers');\n await this.stopChromedriverProxies();\n } else {\n await this.suspendChromedriverProxy();\n }\n } else {\n throw new Error(`Didn't know how to handle switching to context '${name}'`);\n }\n};\n\n\n/* ---------------------------------\n * On-object context-related helpers\n * --------------------------------- */\n\n// The reason this is a function and not just a constant is that both android-\n// driver and selendroid-driver use this logic, and each one returns\n// a different default context name\nhelpers.defaultContextName = function defaultContextName () {\n return NATIVE_WIN;\n};\n\nhelpers.defaultWebviewName = function defaultWebviewName () {\n return WEBVIEW_BASE + this.opts.appPackage;\n};\n\nhelpers.isWebContext = function isWebContext () {\n return this.curContext !== null && this.curContext !== NATIVE_WIN;\n};\n\n// Turn on proxying to an existing Chromedriver session or a new one\nhelpers.startChromedriverProxy = async function startChromedriverProxy (context, webviewsMapping) {\n this.log.debug(`Connecting to chrome-backed webview context '${context}'`);\n\n let cd;\n if (this.sessionChromedrivers[context]) {\n // in the case where we've already set up a chromedriver for a context,\n // we want to reconnect to it, not create a whole new one\n this.log.debug(`Found existing Chromedriver for context '${context}'. Using it.`);\n cd = this.sessionChromedrivers[context];\n await setupExistingChromedriver(this.log, cd);\n } else {\n let opts = _.cloneDeep(this.opts);\n opts.chromeUseRunningApp = true;\n\n // if requested, tell chromedriver to attach to the android package we have\n // associated with the context name, rather than the package of the AUT.\n // And turn this on by default for chrome--if chrome pops up with a webview\n // and someone wants to switch to it, we should let chromedriver connect to\n // chrome rather than staying stuck on the AUT\n if (opts.extractChromeAndroidPackageFromContextName || context === `${WEBVIEW_BASE}chrome`) {\n let androidPackage = context.match(`${WEBVIEW_BASE}(.+)`);\n if (androidPackage && androidPackage.length > 0) {\n opts.chromeAndroidPackage = androidPackage[1];\n }\n if (!opts.extractChromeAndroidPackageFromContextName) {\n if (_.has(this.opts, 'enableWebviewDetailsCollection') && !this.opts.enableWebviewDetailsCollection) {\n // When enableWebviewDetailsCollection capability is explicitly disabled, try to identify\n // chromeAndroidPackage based on contexts, known chrome variant packages and queryAppState result\n // since webviewsMapping does not have info object\n const contexts = webviewsMapping.map((wm) => wm.webviewName);\n for (const knownPackage of KNOWN_CHROME_PACKAGE_NAMES) {\n if (_.includes(contexts, `${WEBVIEW_BASE}${knownPackage}`)) {\n continue;\n }\n const appState = await this.queryAppState(knownPackage);\n if (_.includes([APP_STATE.RUNNING_IN_BACKGROUND, APP_STATE.RUNNING_IN_FOREGROUND], appState)) {\n opts.chromeAndroidPackage = knownPackage;\n this.log.debug(`Identified chromeAndroidPackage as '${opts.chromeAndroidPackage}' ` +\n `for context '${context}' by querying states of Chrome app packages`);\n break;\n }\n }\n } else {\n for (const wm of webviewsMapping) {\n if (wm.webviewName === context && _.has(wm?.info, 'Android-Package')) {\n opts.chromeAndroidPackage = wm.info['Android-Package'];\n this.log.debug(`Identified chromeAndroidPackage as '${opts.chromeAndroidPackage}' ` +\n `for context '${context}' by CDP`);\n break;\n }\n }\n }\n }\n }\n\n cd = await this.setupNewChromedriver(opts, this.adb.curDeviceId, this.adb, context);\n // bind our stop/exit handler, passing in context so we know which\n // one stopped unexpectedly\n cd.on(Chromedriver.EVENT_CHANGED, (msg) => {\n if (msg.state === Chromedriver.STATE_STOPPED) {\n this.onChromedriverStop(context);\n }\n });\n // save the chromedriver object under the context\n this.sessionChromedrivers[context] = cd;\n }\n // hook up the local variables so we can proxy this biz\n this.chromedriver = cd;\n this.proxyReqRes = this.chromedriver.proxyReq.bind(this.chromedriver);\n this.proxyCommand = this.chromedriver.jwproxy.command.bind(this.chromedriver.jwproxy);\n this.jwpProxyActive = true;\n};\n\n// Stop proxying to any Chromedriver\nhelpers.suspendChromedriverProxy = function suspendChromedriverProxy () {\n this.chromedriver = null;\n this.proxyReqRes = null;\n this.proxyCommand = null;\n this.jwpProxyActive = false;\n};\n\n// Handle an out-of-band Chromedriver stop event\nhelpers.onChromedriverStop = async function onChromedriverStop (context) {\n this.log.warn(`Chromedriver for context ${context} stopped unexpectedly`);\n if (context === this.curContext) {\n // we exited unexpectedly while automating the current context and so want\n // to shut down the session and respond with an error\n let err = new Error('Chromedriver quit unexpectedly during session');\n await this.startUnexpectedShutdown(err);\n } else {\n // if a Chromedriver in the non-active context barfs, we don't really\n // care, we'll just make a new one next time we need the context.\n this.log.warn(\"Chromedriver quit unexpectedly, but it wasn't the active \" +\n 'context, ignoring');\n delete this.sessionChromedrivers[context];\n }\n};\n\n// Intentionally stop all the chromedrivers currently active, and ignore\n// their exit events\nhelpers.stopChromedriverProxies = async function stopChromedriverProxies () {\n this.suspendChromedriverProxy(); // make sure we turn off the proxy flag\n for (let context of _.keys(this.sessionChromedrivers)) {\n let cd = this.sessionChromedrivers[context];\n this.log.debug(`Stopping chromedriver for context ${context}`);\n // stop listening for the stopped state event\n cd.removeAllListeners(Chromedriver.EVENT_CHANGED);\n try {\n await cd.stop();\n } catch (err) {\n this.log.warn(`Error stopping Chromedriver: ${err.message}`);\n }\n delete this.sessionChromedrivers[context];\n }\n};\n\nhelpers.isChromedriverContext = function isChromedriverContext (viewName) {\n return _.includes(viewName, WEBVIEW_WIN) || viewName === CHROMIUM_WIN;\n};\n\nhelpers.shouldDismissChromeWelcome = function shouldDismissChromeWelcome () {\n return !!this.opts.chromeOptions &&\n _.isArray(this.opts.chromeOptions.args) &&\n this.opts.chromeOptions.args.includes('--no-first-run');\n};\n\nhelpers.dismissChromeWelcome = async function dismissChromeWelcome () {\n this.log.info('Trying to dismiss Chrome welcome');\n let activity = await this.getCurrentActivity();\n if (activity !== 'org.chromium.chrome.browser.firstrun.FirstRunActivity') {\n this.log.info('Chrome welcome dialog never showed up! Continuing');\n return;\n }\n let el = await this.findElOrEls('id', 'com.android.chrome:id/terms_accept', false);\n await this.click(el.ELEMENT);\n try {\n let el = await this.findElOrEls('id', 'com.android.chrome:id/negative_button', false);\n await this.click(el.ELEMENT);\n } catch (e) {\n // DO NOTHING, THIS DEVICE DIDNT LAUNCH THE SIGNIN DIALOG\n // IT MUST BE A NON GMS DEVICE\n this.log.warn(`This device did not show Chrome SignIn dialog, ${e.message}`);\n }\n};\n\nhelpers.startChromeSession = async function startChromeSession () {\n this.log.info('Starting a chrome-based browser session');\n let opts = _.cloneDeep(this.opts);\n\n const knownPackages = [\n 'org.chromium.chrome.shell',\n 'com.android.chrome',\n 'com.chrome.beta',\n 'org.chromium.chrome',\n 'org.chromium.webview_shell',\n ];\n\n if (_.includes(knownPackages, this.opts.appPackage)) {\n opts.chromeBundleId = this.opts.appPackage;\n } else {\n opts.chromeAndroidActivity = this.opts.appActivity;\n }\n this.chromedriver = await this.setupNewChromedriver(opts, this.adb.curDeviceId, this.adb);\n this.chromedriver.on(Chromedriver.EVENT_CHANGED, (msg) => {\n if (msg.state === Chromedriver.STATE_STOPPED) {\n this.onChromedriverStop(CHROMIUM_WIN);\n }\n });\n\n // Now that we have a Chrome session, we ensure that the context is\n // appropriately set and that this chromedriver is added to the list\n // of session chromedrivers so we can switch back and forth\n this.curContext = CHROMIUM_WIN;\n this.sessionChromedrivers[CHROMIUM_WIN] = this.chromedriver;\n this.proxyReqRes = this.chromedriver.proxyReq.bind(this.chromedriver);\n this.proxyCommand = this.chromedriver.jwproxy.command.bind(this.chromedriver.jwproxy);\n this.jwpProxyActive = true;\n\n if (this.shouldDismissChromeWelcome()) {\n // dismiss Chrome welcome dialog\n await this.dismissChromeWelcome();\n }\n};\n\n\n/* --------------------------\n * Internal library functions\n * -------------------------- */\n\nasync function setupExistingChromedriver (log, chromedriver) {\n // check the status by sending a simple window-based command to ChromeDriver\n // if there is an error, we want to recreate the ChromeDriver session\n if (!await chromedriver.hasWorkingWebview()) {\n log.debug('ChromeDriver is not associated with a window. ' +\n 'Re-initializing the session.');\n await chromedriver.restart();\n }\n return chromedriver;\n}\n\n/**\n * Find a free port to have Chromedriver listen on.\n *\n * @param {array} portSpec - Array which is a list of ports. A list item may\n * also itself be an array of length 2 specifying a start and end port of\n * a range. Some valid port specs:\n * - [8000, 8001, 8002]\n * - [[8000, 8005]]\n * - [8000, [9000, 9100]]\n * @param {Object?} log Logger instance\n *\n * @return {number} A free port\n */\nasync function getChromedriverPort (portSpec, log = null) {\n const getPort = B.promisify(PortFinder.getPort, {context: PortFinder});\n\n // if the user didn't give us any specific information about chromedriver\n // port ranges, just find any free port\n if (!portSpec) {\n const port = await getPort();\n log?.debug(`A port was not given, using random free port: ${port}`);\n return port;\n }\n\n // otherwise find the free port based on a list or range provided by the user\n log?.debug(`Finding a free port for chromedriver using spec ${JSON.stringify(portSpec)}`);\n let foundPort = null;\n for (const potentialPort of portSpec) {\n let port, stopPort;\n if (_.isArray(potentialPort)) {\n ([port, stopPort] = potentialPort);\n } else {\n port = parseInt(potentialPort, 10); // ensure we have a number and not a string\n stopPort = port;\n }\n try {\n log?.debug(`Checking port range ${port}:${stopPort}`);\n foundPort = await getPort({port, stopPort});\n break;\n } catch (e) {\n log?.debug(`Nothing in port range ${port}:${stopPort} was available`);\n }\n }\n\n if (foundPort === null) {\n throw new Error(`Could not find a free port for chromedriver using ` +\n `chromedriverPorts spec ${JSON.stringify(portSpec)}`);\n }\n\n log?.debug(`Using free port ${foundPort} for chromedriver`);\n return foundPort;\n}\n\nhelpers.isChromedriverAutodownloadEnabled = function isChromedriverAutodownloadEnabled () {\n if (this.isFeatureEnabled(CHROMEDRIVER_AUTODOWNLOAD_FEATURE)) {\n return true;\n }\n this?.log?.debug(`Automated Chromedriver download is disabled. ` +\n `Use '${CHROMEDRIVER_AUTODOWNLOAD_FEATURE}' server feature to enable it`);\n return false;\n};\n\nhelpers.setupNewChromedriver = async function setupNewChromedriver (opts, curDeviceId, adb, context = null) {\n if (opts.chromeDriverPort) {\n this?.log?.warn(`The 'chromeDriverPort' capability is deprecated. Please use 'chromedriverPort' instead`);\n opts.chromedriverPort = opts.chromeDriverPort;\n }\n\n if (opts.chromedriverPort) {\n this?.log?.debug(`Using user-specified port ${opts.chromedriverPort} for chromedriver`);\n } else {\n // if a single port wasn't given, we'll look for a free one\n opts.chromedriverPort = await getChromedriverPort(opts.chromedriverPorts, this?.log);\n }\n\n const details = context ? webviewHelpers.getWebviewDetails(adb, context) : undefined;\n if (!_.isEmpty(details)) {\n this?.log?.debug('Passing web view details to the Chromedriver constructor: ' +\n JSON.stringify(details, null, 2));\n }\n\n const chromedriver = new Chromedriver({\n port: opts.chromedriverPort,\n executable: opts.chromedriverExecutable,\n adb,\n cmdArgs: opts.chromedriverArgs,\n verbose: !!opts.showChromedriverLog,\n executableDir: opts.chromedriverExecutableDir,\n mappingPath: opts.chromedriverChromeMappingFile,\n bundleId: opts.chromeBundleId,\n useSystemExecutable: opts.chromedriverUseSystemExecutable,\n disableBuildCheck: opts.chromedriverDisableBuildCheck,\n details,\n isAutodownloadEnabled: this?.isChromedriverAutodownloadEnabled?.()\n });\n\n // make sure there are chromeOptions\n opts.chromeOptions = opts.chromeOptions || {};\n // try out any prefixed chromeOptions,\n // and strip the prefix\n for (const opt of _.keys(opts)) {\n if (opt.endsWith(':chromeOptions')) {\n this?.log?.warn(`Merging '${opt}' into 'chromeOptions'. This may cause unexpected behavior`);\n _.merge(opts.chromeOptions, opts[opt]);\n }\n }\n\n const caps = webviewHelpers.createChromedriverCaps(opts, curDeviceId, details);\n this?.log?.debug(`Before starting chromedriver, androidPackage is '${caps.chromeOptions.androidPackage}'`);\n await chromedriver.start(caps);\n return chromedriver;\n};\nconst setupNewChromedriver = helpers.setupNewChromedriver;\n\n\nObject.assign(extensions, commands, helpers);\nexport { commands, helpers, setupNewChromedriver };\nexport default extensions;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"context.js","names":["CHROMEDRIVER_AUTODOWNLOAD_FEATURE","commands","helpers","extensions","getCurrentContext","curContext","defaultContextName","getContexts","webviewsMapping","webviewHelpers","getWebViewsMapping","adb","opts","assignContexts","setContext","name","util","hasValue","WEBVIEW_WIN","defaultWebviewName","contexts","_","includes","errors","NoSuchContextError","switchContext","mobileGetContexts","androidDeviceSocket","ensureWebviewsHavePages","webviewDevtoolsPort","enableWebviewDetailsCollection","Object","assign","isChromeSession","webviews","parseWebviewNames","NATIVE_WIN","log","debug","JSON","stringify","isChromedriverContext","startChromedriverProxy","recreateChromeDriverSessions","stopChromedriverProxies","suspendChromedriverProxy","Error","WEBVIEW_BASE","autoWebviewName","appPackage","isWebContext","context","cd","sessionChromedrivers","setupExistingChromedriver","cloneDeep","chromeUseRunningApp","extractChromeAndroidPackageFromContextName","androidPackage","match","length","chromeAndroidPackage","has","map","wm","webviewName","knownPackage","KNOWN_CHROME_PACKAGE_NAMES","appState","queryAppState","APP_STATE","RUNNING_IN_BACKGROUND","RUNNING_IN_FOREGROUND","info","setupNewChromedriver","curDeviceId","on","Chromedriver","EVENT_CHANGED","msg","state","STATE_STOPPED","onChromedriverStop","chromedriver","proxyReqRes","proxyReq","bind","proxyCommand","jwproxy","command","jwpProxyActive","warn","err","startUnexpectedShutdown","keys","removeAllListeners","stop","message","viewName","CHROMIUM_WIN","shouldDismissChromeWelcome","chromeOptions","isArray","args","dismissChromeWelcome","activity","getCurrentActivity","el","findElOrEls","click","ELEMENT","e","startChromeSession","knownPackages","chromeBundleId","chromeAndroidActivity","appActivity","hasWorkingWebview","restart","getChromedriverPort","portSpec","getPort","B","promisify","PortFinder","port","foundPort","potentialPort","stopPort","parseInt","isChromedriverAutodownloadEnabled","isFeatureEnabled","chromeDriverPort","chromedriverPort","chromedriverPorts","details","getWebviewDetails","undefined","isEmpty","executable","chromedriverExecutable","cmdArgs","chromedriverArgs","verbose","showChromedriverLog","executableDir","chromedriverExecutableDir","mappingPath","chromedriverChromeMappingFile","bundleId","useSystemExecutable","chromedriverUseSystemExecutable","disableBuildCheck","chromedriverDisableBuildCheck","isAutodownloadEnabled","opt","endsWith","merge","caps","createChromedriverCaps","start"],"sources":["../../../lib/commands/context.js"],"sourcesContent":["import _ from 'lodash';\nimport Chromedriver from 'appium-chromedriver';\nimport PortFinder from 'portfinder';\nimport B from 'bluebird';\nimport { util } from 'appium/support';\nimport { errors } from 'appium/driver';\nimport {\n default as webviewHelpers,\n NATIVE_WIN, WEBVIEW_BASE, WEBVIEW_WIN, CHROMIUM_WIN, KNOWN_CHROME_PACKAGE_NAMES\n} from '../webview-helpers';\nimport { APP_STATE } from '../android-helpers';\n\nconst CHROMEDRIVER_AUTODOWNLOAD_FEATURE = 'chromedriver_autodownload';\n\nlet commands = {}, helpers = {}, extensions = {};\n\n\n/* -------------------------------\n * Actual MJSONWP command handlers\n * ------------------------------- */\ncommands.getCurrentContext = async function getCurrentContext () { // eslint-disable-line require-await\n // if the current context is `null`, indicating no context\n // explicitly set, it is the default context\n return this.curContext || this.defaultContextName();\n};\n\ncommands.getContexts = async function getContexts () {\n const webviewsMapping = await webviewHelpers.getWebViewsMapping(this.adb, this.opts);\n return this.assignContexts(webviewsMapping);\n};\n\ncommands.setContext = async function setContext (name) {\n if (!util.hasValue(name)) {\n name = this.defaultContextName();\n } else if (name === WEBVIEW_WIN) {\n // handle setContext \"WEBVIEW\"\n name = this.defaultWebviewName();\n }\n // if we're already in the context we want, do nothing\n if (name === this.curContext) {\n return;\n }\n\n const webviewsMapping = await webviewHelpers.getWebViewsMapping(this.adb, this.opts);\n const contexts = this.assignContexts(webviewsMapping);\n // if the context we want doesn't exist, fail\n if (!_.includes(contexts, name)) {\n throw new errors.NoSuchContextError();\n }\n\n await this.switchContext(name, webviewsMapping);\n this.curContext = name;\n};\n\n/**\n * @typedef {Object} WebviewsMapping\n * @property {string} proc The name of the Devtools Unix socket\n * @property {string} webview The web view alias. Looks like `WEBVIEW_`\n * prefix plus PID or package name\n * @property {?Object} info Webview information as it is retrieved by\n * /json/version CDP endpoint\n * @property {?Array<Object>} pages Webview pages list as it is retrieved by\n * /json/list CDP endpoint\n * @propery {?string} webviewName An actual webview name for switching context.\n * This value becomes null when failing to find a PID for a webview.\n *\n * The following json demonstrates the example of WebviewsMapping object.\n * Note that `description` in `page` can be an empty string most likely when it comes to Mobile Chrome)\n * {\n * \"proc\": \"@webview_devtools_remote_22138\",\n * \"webview\": \"WEBVIEW_22138\",\n * \"info\": {\n * \"Android-Package\": \"io.appium.settings\",\n * \"Browser\": \"Chrome/74.0.3729.185\",\n * \"Protocol-Version\": \"1.3\",\n * \"User-Agent\": \"Mozilla/5.0 (Linux; Android 10; Android SDK built for x86 Build/QSR1.190920.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/74.0.3729.185 Mobile Safari/537.36\",\n * \"V8-Version\": \"7.4.288.28\",\n * \"WebKit-Version\": \"537.36 (@22955682f94ce09336197bfb8dffea991fa32f0d)\",\n * \"webSocketDebuggerUrl\": \"ws://127.0.0.1:10900/devtools/browser\"\n * },\n * \"pages\": [\n * {\n * \"description\": \"{\\\"attached\\\":true,\\\"empty\\\":false,\\\"height\\\":1458,\\\"screenX\\\":0,\\\"screenY\\\":336,\\\"visible\\\":true,\\\"width\\\":1080}\",\n * \"devtoolsFrontendUrl\": \"http://chrome-devtools-frontend.appspot.com/serve_rev/@22955682f94ce09336197bfb8dffea991fa32f0d/inspector.html?ws=127.0.0.1:10900/devtools/page/27325CC50B600D31B233F45E09487B1F\",\n * \"id\": \"27325CC50B600D31B233F45E09487B1F\",\n * \"title\": \"Releases · appium/appium · GitHub\",\n * \"type\": \"page\",\n * \"url\": \"https://github.com/appium/appium/releases\",\n * \"webSocketDebuggerUrl\": \"ws://127.0.0.1:10900/devtools/page/27325CC50B600D31B233F45E09487B1F\"\n * }\n * ],\n * \"webviewName\": \"WEBVIEW_com.io.appium.setting\"\n * }\n */\n\n/**\n * Returns a webviewsMapping based on CDP endpoints\n *\n * @return {Array<WebviewsMapping>} webviewsMapping\n */\ncommands.mobileGetContexts = async function mobileGetContexts () {\n const opts = {\n androidDeviceSocket: this.opts.androidDeviceSocket,\n ensureWebviewsHavePages: true,\n webviewDevtoolsPort: this.opts.webviewDevtoolsPort,\n enableWebviewDetailsCollection: true\n };\n return await webviewHelpers.getWebViewsMapping(this.adb, opts);\n};\n\nhelpers.assignContexts = function assignContexts (webviewsMapping) {\n const opts = Object.assign({isChromeSession: this.isChromeSession}, this.opts);\n const webviews = webviewHelpers.parseWebviewNames(webviewsMapping, opts);\n this.contexts = [NATIVE_WIN, ...webviews];\n this.log.debug(`Available contexts: ${JSON.stringify(this.contexts)}`);\n return this.contexts;\n};\n\nhelpers.switchContext = async function switchContext (name, webviewsMapping) {\n // We have some options when it comes to webviews. If we want a\n // Chromedriver webview, we can only control one at a time.\n if (this.isChromedriverContext(name)) {\n // start proxying commands directly to chromedriver\n await this.startChromedriverProxy(name, webviewsMapping);\n } else if (this.isChromedriverContext(this.curContext)) {\n // if we're moving to a non-chromedriver webview, and our current context\n // _is_ a chromedriver webview, if caps recreateChromeDriverSessions is set\n // to true then kill chromedriver session using stopChromedriverProxies or\n // else simply suspend proxying to the latter\n if (this.opts.recreateChromeDriverSessions) {\n this.log.debug('recreateChromeDriverSessions set to true; killing existing chromedrivers');\n await this.stopChromedriverProxies();\n } else {\n await this.suspendChromedriverProxy();\n }\n } else {\n throw new Error(`Didn't know how to handle switching to context '${name}'`);\n }\n};\n\n\n/* ---------------------------------\n * On-object context-related helpers\n * --------------------------------- */\n\n// The reason this is a function and not just a constant is that both android-\n// driver and selendroid-driver use this logic, and each one returns\n// a different default context name\nhelpers.defaultContextName = function defaultContextName () {\n return NATIVE_WIN;\n};\n\nhelpers.defaultWebviewName = function defaultWebviewName () {\n return WEBVIEW_BASE + (this.opts.autoWebviewName || this.opts.appPackage);\n};\n\nhelpers.isWebContext = function isWebContext () {\n return this.curContext !== null && this.curContext !== NATIVE_WIN;\n};\n\n// Turn on proxying to an existing Chromedriver session or a new one\nhelpers.startChromedriverProxy = async function startChromedriverProxy (context, webviewsMapping) {\n this.log.debug(`Connecting to chrome-backed webview context '${context}'`);\n\n let cd;\n if (this.sessionChromedrivers[context]) {\n // in the case where we've already set up a chromedriver for a context,\n // we want to reconnect to it, not create a whole new one\n this.log.debug(`Found existing Chromedriver for context '${context}'. Using it.`);\n cd = this.sessionChromedrivers[context];\n await setupExistingChromedriver(this.log, cd);\n } else {\n let opts = _.cloneDeep(this.opts);\n opts.chromeUseRunningApp = true;\n\n // if requested, tell chromedriver to attach to the android package we have\n // associated with the context name, rather than the package of the AUT.\n // And turn this on by default for chrome--if chrome pops up with a webview\n // and someone wants to switch to it, we should let chromedriver connect to\n // chrome rather than staying stuck on the AUT\n if (opts.extractChromeAndroidPackageFromContextName || context === `${WEBVIEW_BASE}chrome`) {\n let androidPackage = context.match(`${WEBVIEW_BASE}(.+)`);\n if (androidPackage && androidPackage.length > 0) {\n opts.chromeAndroidPackage = androidPackage[1];\n }\n if (!opts.extractChromeAndroidPackageFromContextName) {\n if (_.has(this.opts, 'enableWebviewDetailsCollection') && !this.opts.enableWebviewDetailsCollection) {\n // When enableWebviewDetailsCollection capability is explicitly disabled, try to identify\n // chromeAndroidPackage based on contexts, known chrome variant packages and queryAppState result\n // since webviewsMapping does not have info object\n const contexts = webviewsMapping.map((wm) => wm.webviewName);\n for (const knownPackage of KNOWN_CHROME_PACKAGE_NAMES) {\n if (_.includes(contexts, `${WEBVIEW_BASE}${knownPackage}`)) {\n continue;\n }\n const appState = await this.queryAppState(knownPackage);\n if (_.includes([APP_STATE.RUNNING_IN_BACKGROUND, APP_STATE.RUNNING_IN_FOREGROUND], appState)) {\n opts.chromeAndroidPackage = knownPackage;\n this.log.debug(`Identified chromeAndroidPackage as '${opts.chromeAndroidPackage}' ` +\n `for context '${context}' by querying states of Chrome app packages`);\n break;\n }\n }\n } else {\n for (const wm of webviewsMapping) {\n if (wm.webviewName === context && _.has(wm?.info, 'Android-Package')) {\n opts.chromeAndroidPackage = wm.info['Android-Package'];\n this.log.debug(`Identified chromeAndroidPackage as '${opts.chromeAndroidPackage}' ` +\n `for context '${context}' by CDP`);\n break;\n }\n }\n }\n }\n }\n\n cd = await this.setupNewChromedriver(opts, this.adb.curDeviceId, this.adb, context);\n // bind our stop/exit handler, passing in context so we know which\n // one stopped unexpectedly\n cd.on(Chromedriver.EVENT_CHANGED, (msg) => {\n if (msg.state === Chromedriver.STATE_STOPPED) {\n this.onChromedriverStop(context);\n }\n });\n // save the chromedriver object under the context\n this.sessionChromedrivers[context] = cd;\n }\n // hook up the local variables so we can proxy this biz\n this.chromedriver = cd;\n this.proxyReqRes = this.chromedriver.proxyReq.bind(this.chromedriver);\n this.proxyCommand = this.chromedriver.jwproxy.command.bind(this.chromedriver.jwproxy);\n this.jwpProxyActive = true;\n};\n\n// Stop proxying to any Chromedriver\nhelpers.suspendChromedriverProxy = function suspendChromedriverProxy () {\n this.chromedriver = null;\n this.proxyReqRes = null;\n this.proxyCommand = null;\n this.jwpProxyActive = false;\n};\n\n// Handle an out-of-band Chromedriver stop event\nhelpers.onChromedriverStop = async function onChromedriverStop (context) {\n this.log.warn(`Chromedriver for context ${context} stopped unexpectedly`);\n if (context === this.curContext) {\n // we exited unexpectedly while automating the current context and so want\n // to shut down the session and respond with an error\n let err = new Error('Chromedriver quit unexpectedly during session');\n await this.startUnexpectedShutdown(err);\n } else {\n // if a Chromedriver in the non-active context barfs, we don't really\n // care, we'll just make a new one next time we need the context.\n this.log.warn(\"Chromedriver quit unexpectedly, but it wasn't the active \" +\n 'context, ignoring');\n delete this.sessionChromedrivers[context];\n }\n};\n\n// Intentionally stop all the chromedrivers currently active, and ignore\n// their exit events\nhelpers.stopChromedriverProxies = async function stopChromedriverProxies () {\n this.suspendChromedriverProxy(); // make sure we turn off the proxy flag\n for (let context of _.keys(this.sessionChromedrivers)) {\n let cd = this.sessionChromedrivers[context];\n this.log.debug(`Stopping chromedriver for context ${context}`);\n // stop listening for the stopped state event\n cd.removeAllListeners(Chromedriver.EVENT_CHANGED);\n try {\n await cd.stop();\n } catch (err) {\n this.log.warn(`Error stopping Chromedriver: ${err.message}`);\n }\n delete this.sessionChromedrivers[context];\n }\n};\n\nhelpers.isChromedriverContext = function isChromedriverContext (viewName) {\n return _.includes(viewName, WEBVIEW_WIN) || viewName === CHROMIUM_WIN;\n};\n\nhelpers.shouldDismissChromeWelcome = function shouldDismissChromeWelcome () {\n return !!this.opts.chromeOptions &&\n _.isArray(this.opts.chromeOptions.args) &&\n this.opts.chromeOptions.args.includes('--no-first-run');\n};\n\nhelpers.dismissChromeWelcome = async function dismissChromeWelcome () {\n this.log.info('Trying to dismiss Chrome welcome');\n let activity = await this.getCurrentActivity();\n if (activity !== 'org.chromium.chrome.browser.firstrun.FirstRunActivity') {\n this.log.info('Chrome welcome dialog never showed up! Continuing');\n return;\n }\n let el = await this.findElOrEls('id', 'com.android.chrome:id/terms_accept', false);\n await this.click(el.ELEMENT);\n try {\n let el = await this.findElOrEls('id', 'com.android.chrome:id/negative_button', false);\n await this.click(el.ELEMENT);\n } catch (e) {\n // DO NOTHING, THIS DEVICE DIDNT LAUNCH THE SIGNIN DIALOG\n // IT MUST BE A NON GMS DEVICE\n this.log.warn(`This device did not show Chrome SignIn dialog, ${e.message}`);\n }\n};\n\nhelpers.startChromeSession = async function startChromeSession () {\n this.log.info('Starting a chrome-based browser session');\n let opts = _.cloneDeep(this.opts);\n\n const knownPackages = [\n 'org.chromium.chrome.shell',\n 'com.android.chrome',\n 'com.chrome.beta',\n 'org.chromium.chrome',\n 'org.chromium.webview_shell',\n ];\n\n if (_.includes(knownPackages, this.opts.appPackage)) {\n opts.chromeBundleId = this.opts.appPackage;\n } else {\n opts.chromeAndroidActivity = this.opts.appActivity;\n }\n this.chromedriver = await this.setupNewChromedriver(opts, this.adb.curDeviceId, this.adb);\n this.chromedriver.on(Chromedriver.EVENT_CHANGED, (msg) => {\n if (msg.state === Chromedriver.STATE_STOPPED) {\n this.onChromedriverStop(CHROMIUM_WIN);\n }\n });\n\n // Now that we have a Chrome session, we ensure that the context is\n // appropriately set and that this chromedriver is added to the list\n // of session chromedrivers so we can switch back and forth\n this.curContext = CHROMIUM_WIN;\n this.sessionChromedrivers[CHROMIUM_WIN] = this.chromedriver;\n this.proxyReqRes = this.chromedriver.proxyReq.bind(this.chromedriver);\n this.proxyCommand = this.chromedriver.jwproxy.command.bind(this.chromedriver.jwproxy);\n this.jwpProxyActive = true;\n\n if (this.shouldDismissChromeWelcome()) {\n // dismiss Chrome welcome dialog\n await this.dismissChromeWelcome();\n }\n};\n\n\n/* --------------------------\n * Internal library functions\n * -------------------------- */\n\nasync function setupExistingChromedriver (log, chromedriver) {\n // check the status by sending a simple window-based command to ChromeDriver\n // if there is an error, we want to recreate the ChromeDriver session\n if (!await chromedriver.hasWorkingWebview()) {\n log.debug('ChromeDriver is not associated with a window. ' +\n 'Re-initializing the session.');\n await chromedriver.restart();\n }\n return chromedriver;\n}\n\n/**\n * Find a free port to have Chromedriver listen on.\n *\n * @param {array} portSpec - Array which is a list of ports. A list item may\n * also itself be an array of length 2 specifying a start and end port of\n * a range. Some valid port specs:\n * - [8000, 8001, 8002]\n * - [[8000, 8005]]\n * - [8000, [9000, 9100]]\n * @param {Object?} log Logger instance\n *\n * @return {number} A free port\n */\nasync function getChromedriverPort (portSpec, log = null) {\n const getPort = B.promisify(PortFinder.getPort, {context: PortFinder});\n\n // if the user didn't give us any specific information about chromedriver\n // port ranges, just find any free port\n if (!portSpec) {\n const port = await getPort();\n log?.debug(`A port was not given, using random free port: ${port}`);\n return port;\n }\n\n // otherwise find the free port based on a list or range provided by the user\n log?.debug(`Finding a free port for chromedriver using spec ${JSON.stringify(portSpec)}`);\n let foundPort = null;\n for (const potentialPort of portSpec) {\n let port, stopPort;\n if (_.isArray(potentialPort)) {\n ([port, stopPort] = potentialPort);\n } else {\n port = parseInt(potentialPort, 10); // ensure we have a number and not a string\n stopPort = port;\n }\n try {\n log?.debug(`Checking port range ${port}:${stopPort}`);\n foundPort = await getPort({port, stopPort});\n break;\n } catch (e) {\n log?.debug(`Nothing in port range ${port}:${stopPort} was available`);\n }\n }\n\n if (foundPort === null) {\n throw new Error(`Could not find a free port for chromedriver using ` +\n `chromedriverPorts spec ${JSON.stringify(portSpec)}`);\n }\n\n log?.debug(`Using free port ${foundPort} for chromedriver`);\n return foundPort;\n}\n\nhelpers.isChromedriverAutodownloadEnabled = function isChromedriverAutodownloadEnabled () {\n if (this.isFeatureEnabled(CHROMEDRIVER_AUTODOWNLOAD_FEATURE)) {\n return true;\n }\n this?.log?.debug(`Automated Chromedriver download is disabled. ` +\n `Use '${CHROMEDRIVER_AUTODOWNLOAD_FEATURE}' server feature to enable it`);\n return false;\n};\n\nhelpers.setupNewChromedriver = async function setupNewChromedriver (opts, curDeviceId, adb, context = null) {\n if (opts.chromeDriverPort) {\n this?.log?.warn(`The 'chromeDriverPort' capability is deprecated. Please use 'chromedriverPort' instead`);\n opts.chromedriverPort = opts.chromeDriverPort;\n }\n\n if (opts.chromedriverPort) {\n this?.log?.debug(`Using user-specified port ${opts.chromedriverPort} for chromedriver`);\n } else {\n // if a single port wasn't given, we'll look for a free one\n opts.chromedriverPort = await getChromedriverPort(opts.chromedriverPorts, this?.log);\n }\n\n const details = context ? webviewHelpers.getWebviewDetails(adb, context) : undefined;\n if (!_.isEmpty(details)) {\n this?.log?.debug('Passing web view details to the Chromedriver constructor: ' +\n JSON.stringify(details, null, 2));\n }\n\n const chromedriver = new Chromedriver({\n port: opts.chromedriverPort,\n executable: opts.chromedriverExecutable,\n adb,\n cmdArgs: opts.chromedriverArgs,\n verbose: !!opts.showChromedriverLog,\n executableDir: opts.chromedriverExecutableDir,\n mappingPath: opts.chromedriverChromeMappingFile,\n bundleId: opts.chromeBundleId,\n useSystemExecutable: opts.chromedriverUseSystemExecutable,\n disableBuildCheck: opts.chromedriverDisableBuildCheck,\n details,\n isAutodownloadEnabled: this?.isChromedriverAutodownloadEnabled?.()\n });\n\n // make sure there are chromeOptions\n opts.chromeOptions = opts.chromeOptions || {};\n // try out any prefixed chromeOptions,\n // and strip the prefix\n for (const opt of _.keys(opts)) {\n if (opt.endsWith(':chromeOptions')) {\n this?.log?.warn(`Merging '${opt}' into 'chromeOptions'. This may cause unexpected behavior`);\n _.merge(opts.chromeOptions, opts[opt]);\n }\n }\n\n const caps = webviewHelpers.createChromedriverCaps(opts, curDeviceId, details);\n this?.log?.debug(`Before starting chromedriver, androidPackage is '${caps.chromeOptions.androidPackage}'`);\n await chromedriver.start(caps);\n return chromedriver;\n};\nconst setupNewChromedriver = helpers.setupNewChromedriver;\n\n\nObject.assign(extensions, commands, helpers);\nexport { commands, helpers, setupNewChromedriver };\nexport default extensions;\n"],"mappings":"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"}
|
|
@@ -124,6 +124,9 @@ let commonCapConstraints = {
|
|
|
124
124
|
autoWebviewTimeout: {
|
|
125
125
|
isNumber: true
|
|
126
126
|
},
|
|
127
|
+
autoWebviewName: {
|
|
128
|
+
isString: true
|
|
129
|
+
},
|
|
127
130
|
intentAction: {
|
|
128
131
|
isString: true
|
|
129
132
|
},
|
|
@@ -295,4 +298,4 @@ let desiredCapConstraints = {};
|
|
|
295
298
|
Object.assign(desiredCapConstraints, commonCapConstraints, uiautomatorCapConstraints);
|
|
296
299
|
var _default = desiredCapConstraints;
|
|
297
300
|
exports.default = _default;
|
|
298
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tb25DYXBDb25zdHJhaW50cyIsInBsYXRmb3JtTmFtZSIsImlzU3RyaW5nIiwiaW5jbHVzaW9uQ2FzZUluc2Vuc2l0aXZlIiwicHJlc2VuY2UiLCJhcHAiLCJhcHBBY3Rpdml0eSIsImFwcFBhY2thZ2UiLCJhcHBXYWl0QWN0aXZpdHkiLCJhcHBXYWl0UGFja2FnZSIsImFwcFdhaXREdXJhdGlvbiIsImlzTnVtYmVyIiwiZGV2aWNlUmVhZHlUaW1lb3V0IiwiYW5kcm9pZENvdmVyYWdlIiwiYW5kcm9pZERldmljZVJlYWR5VGltZW91dCIsImFuZHJvaWREZXZpY2VTb2NrZXQiLCJhbmRyb2lkSW5zdGFsbFRpbWVvdXQiLCJhZGJQb3J0IiwicmVtb3RlQWRiSG9zdCIsImFkYkV4ZWNUaW1lb3V0IiwiYXZkIiwiYXZkTGF1bmNoVGltZW91dCIsImF2ZFJlYWR5VGltZW91dCIsImF2ZEFyZ3MiLCJhdmRFbnYiLCJpc09iamVjdCIsInVzZUtleXN0b3JlIiwiaXNCb29sZWFuIiwia2V5c3RvcmVQYXRoIiwia2V5c3RvcmVQYXNzd29yZCIsImtleUFsaWFzIiwia2V5UGFzc3dvcmQiLCJ3ZWJ2aWV3RGV2dG9vbHNQb3J0IiwiZW5zdXJlV2Vidmlld3NIYXZlUGFnZXMiLCJlbmFibGVXZWJ2aWV3RGV0YWlsc0NvbGxlY3Rpb24iLCJjaHJvbWVEcml2ZXJQb3J0IiwiY2hyb21lZHJpdmVyUG9ydCIsImNocm9tZWRyaXZlclBvcnRzIiwiaXNBcnJheSIsImNocm9tZWRyaXZlckFyZ3MiLCJjaHJvbWVkcml2ZXJFeGVjdXRhYmxlIiwiY2hyb21lZHJpdmVyRXhlY3V0YWJsZURpciIsImNocm9tZWRyaXZlckNocm9tZU1hcHBpbmdGaWxlIiwiY2hyb21lZHJpdmVyVXNlU3lzdGVtRXhlY3V0YWJsZSIsImNocm9tZWRyaXZlckRpc2FibGVCdWlsZENoZWNrIiwiY2hyb21lTG9nZ2luZ1ByZWZzIiwiYXV0b1dlYnZpZXdUaW1lb3V0IiwiaW50ZW50QWN0aW9uIiwiaW50ZW50Q2F0ZWdvcnkiLCJpbnRlbnRGbGFncyIsIm9wdGlvbmFsSW50ZW50QXJndW1lbnRzIiwiZG9udFN0b3BBcHBPblJlc2V0IiwidW5pY29kZUtleWJvYXJkIiwicmVzZXRLZXlib2FyZCIsIm5vU2lnbiIsInJlY3JlYXRlQ2hyb21lRHJpdmVyU2Vzc2lvbnMiLCJhdXRvTGF1bmNoIiwibmF0aXZlV2ViU2NyZWVuc2hvdCIsImFuZHJvaWRTY3JlZW5zaG90UGF0aCIsImFuZHJvaWRJbnN0YWxsUGF0aCIsImNsZWFyU3lzdGVtRmlsZXMiLCJleHRyYWN0Q2hyb21lQW5kcm9pZFBhY2thZ2VGcm9tQ29udGV4dE5hbWUiLCJhdXRvR3JhbnRQZXJtaXNzaW9ucyIsInNoYXJlZFByZWZlcmVuY2VzIiwibmV0d29ya1NwZWVkIiwiZ3BzRW5hYmxlZCIsImlzSGVhZGxlc3MiLCJzaG93Q2hyb21lZHJpdmVyTG9nIiwic2tpcFVubG9jayIsImNsZWFyRGV2aWNlTG9nc09uU3RhcnQiLCJ1bmxvY2tUeXBlIiwidW5sb2NrS2V5IiwidW5sb2NrU3RyYXRlZ3kiLCJvdGhlckFwcHMiLCJ1bmluc3RhbGxPdGhlclBhY2thZ2VzIiwiYWxsb3dUZXN0UGFja2FnZXMiLCJwYWdlTG9hZFN0cmF0ZWd5IiwibG9jYWxlU2NyaXB0Iiwic2tpcERldmljZUluaXRpYWxpemF0aW9uIiwicmVtb3RlQXBwc0NhY2hlTGltaXQiLCJidWlsZFRvb2xzVmVyc2lvbiIsInNraXBMb2djYXRDYXB0dXJlIiwiY2hyb21lT3B0aW9ucyIsImVuYWJsZVBlcmZvcm1hbmNlTG9nZ2luZyIsInVzZXJQcm9maWxlIiwiYnJvd3Nlck5hbWUiLCJlbmZvcmNlQXBwSW5zdGFsbCIsInN1cHByZXNzS2lsbFNlcnZlciIsImFsbG93T2ZmbGluZURldmljZXMiLCJpZ25vcmVIaWRkZW5BcGlQb2xpY3lFcnJvciIsInVubG9ja1N1Y2Nlc3NUaW1lb3V0IiwibW9ja0xvY2F0aW9uQXBwIiwibG9nY2F0Rm9ybWF0IiwibG9nY2F0RmlsdGVyU3BlY3MiLCJhbGxvd0RlbGF5QWRiIiwidWlhdXRvbWF0b3JDYXBDb25zdHJhaW50cyIsImlnbm9yZVVuaW1wb3J0YW50Vmlld3MiLCJkaXNhYmxlQW5kcm9pZFdhdGNoZXJzIiwiYWNjZXB0U3NsQ2VydHMiLCJhbmRyb2lkTmF0dXJhbE9yaWVudGF0aW9uIiwiZGlzYWJsZVdpbmRvd0FuaW1hdGlvbiIsImJvb3RzdHJhcFBvcnQiLCJkZXNpcmVkQ2FwQ29uc3RyYWludHMiLCJPYmplY3QiLCJhc3NpZ24iXSwic291cmNlcyI6WyIuLi8uLi9saWIvZGVzaXJlZC1jYXBzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImxldCBjb21tb25DYXBDb25zdHJhaW50cyA9IHtcbiAgcGxhdGZvcm1OYW1lOiB7XG4gICAgaXNTdHJpbmc6IHRydWUsXG4gICAgaW5jbHVzaW9uQ2FzZUluc2Vuc2l0aXZlOiBbJ0FuZHJvaWQnXSxcbiAgICBwcmVzZW5jZTogdHJ1ZVxuICB9LFxuICBhcHA6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBhcHBBY3Rpdml0eToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGFwcFBhY2thZ2U6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBhcHBXYWl0QWN0aXZpdHk6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBhcHBXYWl0UGFja2FnZToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGFwcFdhaXREdXJhdGlvbjoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIGRldmljZVJlYWR5VGltZW91dDoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIGFuZHJvaWRDb3ZlcmFnZToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGFuZHJvaWREZXZpY2VSZWFkeVRpbWVvdXQ6IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICBhbmRyb2lkRGV2aWNlU29ja2V0OiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgYW5kcm9pZEluc3RhbGxUaW1lb3V0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgYWRiUG9ydDoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIHJlbW90ZUFkYkhvc3Q6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBhZGJFeGVjVGltZW91dDoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIGF2ZDoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGF2ZExhdW5jaFRpbWVvdXQ6IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICBhdmRSZWFkeVRpbWVvdXQ6IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICBhdmRBcmdzOiB7XG4gICAgLy8gY291bGQgYmUgYSBzdHJpbmcgb3IgYW4gYXJyYXlcbiAgfSxcbiAgYXZkRW52OiB7XG4gICAgaXNPYmplY3Q6IHRydWVcbiAgfSxcbiAgdXNlS2V5c3RvcmU6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAga2V5c3RvcmVQYXRoOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAga2V5c3RvcmVQYXNzd29yZDoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGtleUFsaWFzOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAga2V5UGFzc3dvcmQ6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICB3ZWJ2aWV3RGV2dG9vbHNQb3J0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgZW5zdXJlV2Vidmlld3NIYXZlUGFnZXM6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgZW5hYmxlV2Vidmlld0RldGFpbHNDb2xsZWN0aW9uOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIC8vIHRoaXMgb25lIGlzIGRlcHJlY2F0ZWRcbiAgY2hyb21lRHJpdmVyUG9ydDoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIC8vIGR1cGxpY2F0ZSBvZiBhYm92ZSB3aXRoIGJldHRlciBzcGVsbGluZ1xuICBjaHJvbWVkcml2ZXJQb3J0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgY2hyb21lZHJpdmVyUG9ydHM6IHtcbiAgICBpc0FycmF5OiB0cnVlXG4gIH0sXG4gIGNocm9tZWRyaXZlckFyZ3M6IHtcbiAgICBpc09iamVjdDogdHJ1ZSxcbiAgfSxcbiAgY2hyb21lZHJpdmVyRXhlY3V0YWJsZToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGNocm9tZWRyaXZlckV4ZWN1dGFibGVEaXI6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBjaHJvbWVkcml2ZXJDaHJvbWVNYXBwaW5nRmlsZToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGNocm9tZWRyaXZlclVzZVN5c3RlbUV4ZWN1dGFibGU6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgY2hyb21lZHJpdmVyRGlzYWJsZUJ1aWxkQ2hlY2s6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgY2hyb21lTG9nZ2luZ1ByZWZzOiB7XG4gICAgaXNPYmplY3Q6IHRydWVcbiAgfSxcbiAgYXV0b1dlYnZpZXdUaW1lb3V0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgaW50ZW50QWN0aW9uOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgaW50ZW50Q2F0ZWdvcnk6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBpbnRlbnRGbGFnczoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgZG9udFN0b3BBcHBPblJlc2V0OiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIHVuaWNvZGVLZXlib2FyZDoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICByZXNldEtleWJvYXJkOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIG5vU2lnbjoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICByZWNyZWF0ZUNocm9tZURyaXZlclNlc3Npb25zOiB7XG4gICAgaXNCb29sZWFuOiBmYWxzZVxuICB9LFxuICBhdXRvTGF1bmNoOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIG5hdGl2ZVdlYlNjcmVlbnNob3Q6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgYW5kcm9pZFNjcmVlbnNob3RQYXRoOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgYW5kcm9pZEluc3RhbGxQYXRoOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgY2xlYXJTeXN0ZW1GaWxlczoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBleHRyYWN0Q2hyb21lQW5kcm9pZFBhY2thZ2VGcm9tQ29udGV4dE5hbWU6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgYXV0b0dyYW50UGVybWlzc2lvbnM6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgc2hhcmVkUHJlZmVyZW5jZXM6IHtcbiAgICBpc09iamVjdDogdHJ1ZVxuICB9LFxuICBuZXR3b3JrU3BlZWQ6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBncHNFbmFibGVkOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGlzSGVhZGxlc3M6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgc2hvd0Nocm9tZWRyaXZlckxvZzoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBza2lwVW5sb2NrOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGNsZWFyRGV2aWNlTG9nc09uU3RhcnQ6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgdW5sb2NrVHlwZToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHVubG9ja0tleToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHVubG9ja1N0cmF0ZWd5OiB7XG4gICAgaXNTdHJpbmc6IHRydWUsXG4gICAgaW5jbHVzaW9uQ2FzZUluc2Vuc2l0aXZlOiBbJ2xvY2tzZXR0aW5ncycsICd1aWF1dG9tYXRvciddLFxuICB9LFxuICBvdGhlckFwcHM6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICB1bmluc3RhbGxPdGhlclBhY2thZ2VzOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgYWxsb3dUZXN0UGFja2FnZXM6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgcGFnZUxvYWRTdHJhdGVneToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGxvY2FsZVNjcmlwdDoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHNraXBEZXZpY2VJbml0aWFsaXphdGlvbjoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICByZW1vdGVBcHBzQ2FjaGVMaW1pdDoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIGJ1aWxkVG9vbHNWZXJzaW9uOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgc2tpcExvZ2NhdENhcHR1cmU6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgY2hyb21lT3B0aW9uczoge1xuICAgIGlzT2JqZWN0OiB0cnVlXG4gIH0sXG4gIGVuYWJsZVBlcmZvcm1hbmNlTG9nZ2luZzoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICB1c2VyUHJvZmlsZToge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIGJyb3dzZXJOYW1lOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgZW5mb3JjZUFwcEluc3RhbGw6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgc3VwcHJlc3NLaWxsU2VydmVyOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGFsbG93T2ZmbGluZURldmljZXM6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgaWdub3JlSGlkZGVuQXBpUG9saWN5RXJyb3I6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgdW5sb2NrU3VjY2Vzc1RpbWVvdXQ6IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICBtb2NrTG9jYXRpb25BcHA6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBsb2djYXRGb3JtYXQ6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBsb2djYXRGaWx0ZXJTcGVjczoge1xuICAgIGlzQXJyYXk6IHRydWVcbiAgfSxcbiAgYWxsb3dEZWxheUFkYjoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9XG59O1xuXG5sZXQgdWlhdXRvbWF0b3JDYXBDb25zdHJhaW50cyA9IHtcbiAgaWdub3JlVW5pbXBvcnRhbnRWaWV3czoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBkaXNhYmxlQW5kcm9pZFdhdGNoZXJzOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGFjY2VwdFNzbENlcnRzOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGFuZHJvaWROYXR1cmFsT3JpZW50YXRpb246IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgZGlzYWJsZVdpbmRvd0FuaW1hdGlvbjoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBib290c3RyYXBQb3J0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbn07XG5cbmxldCBkZXNpcmVkQ2FwQ29uc3RyYWludHMgPSB7fTtcblxuT2JqZWN0LmFzc2lnbihkZXNpcmVkQ2FwQ29uc3RyYWludHMsIGNvbW1vbkNhcENvbnN0cmFpbnRzLFxuICAgICAgICAgICAgICB1aWF1dG9tYXRvckNhcENvbnN0cmFpbnRzKTtcblxuZXhwb3J0IGRlZmF1bHQgZGVzaXJlZENhcENvbnN0cmFpbnRzO1xuZXhwb3J0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
|
|
301
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tb25DYXBDb25zdHJhaW50cyIsInBsYXRmb3JtTmFtZSIsImlzU3RyaW5nIiwiaW5jbHVzaW9uQ2FzZUluc2Vuc2l0aXZlIiwicHJlc2VuY2UiLCJhcHAiLCJhcHBBY3Rpdml0eSIsImFwcFBhY2thZ2UiLCJhcHBXYWl0QWN0aXZpdHkiLCJhcHBXYWl0UGFja2FnZSIsImFwcFdhaXREdXJhdGlvbiIsImlzTnVtYmVyIiwiZGV2aWNlUmVhZHlUaW1lb3V0IiwiYW5kcm9pZENvdmVyYWdlIiwiYW5kcm9pZERldmljZVJlYWR5VGltZW91dCIsImFuZHJvaWREZXZpY2VTb2NrZXQiLCJhbmRyb2lkSW5zdGFsbFRpbWVvdXQiLCJhZGJQb3J0IiwicmVtb3RlQWRiSG9zdCIsImFkYkV4ZWNUaW1lb3V0IiwiYXZkIiwiYXZkTGF1bmNoVGltZW91dCIsImF2ZFJlYWR5VGltZW91dCIsImF2ZEFyZ3MiLCJhdmRFbnYiLCJpc09iamVjdCIsInVzZUtleXN0b3JlIiwiaXNCb29sZWFuIiwia2V5c3RvcmVQYXRoIiwia2V5c3RvcmVQYXNzd29yZCIsImtleUFsaWFzIiwia2V5UGFzc3dvcmQiLCJ3ZWJ2aWV3RGV2dG9vbHNQb3J0IiwiZW5zdXJlV2Vidmlld3NIYXZlUGFnZXMiLCJlbmFibGVXZWJ2aWV3RGV0YWlsc0NvbGxlY3Rpb24iLCJjaHJvbWVEcml2ZXJQb3J0IiwiY2hyb21lZHJpdmVyUG9ydCIsImNocm9tZWRyaXZlclBvcnRzIiwiaXNBcnJheSIsImNocm9tZWRyaXZlckFyZ3MiLCJjaHJvbWVkcml2ZXJFeGVjdXRhYmxlIiwiY2hyb21lZHJpdmVyRXhlY3V0YWJsZURpciIsImNocm9tZWRyaXZlckNocm9tZU1hcHBpbmdGaWxlIiwiY2hyb21lZHJpdmVyVXNlU3lzdGVtRXhlY3V0YWJsZSIsImNocm9tZWRyaXZlckRpc2FibGVCdWlsZENoZWNrIiwiY2hyb21lTG9nZ2luZ1ByZWZzIiwiYXV0b1dlYnZpZXdUaW1lb3V0IiwiYXV0b1dlYnZpZXdOYW1lIiwiaW50ZW50QWN0aW9uIiwiaW50ZW50Q2F0ZWdvcnkiLCJpbnRlbnRGbGFncyIsIm9wdGlvbmFsSW50ZW50QXJndW1lbnRzIiwiZG9udFN0b3BBcHBPblJlc2V0IiwidW5pY29kZUtleWJvYXJkIiwicmVzZXRLZXlib2FyZCIsIm5vU2lnbiIsInJlY3JlYXRlQ2hyb21lRHJpdmVyU2Vzc2lvbnMiLCJhdXRvTGF1bmNoIiwibmF0aXZlV2ViU2NyZWVuc2hvdCIsImFuZHJvaWRTY3JlZW5zaG90UGF0aCIsImFuZHJvaWRJbnN0YWxsUGF0aCIsImNsZWFyU3lzdGVtRmlsZXMiLCJleHRyYWN0Q2hyb21lQW5kcm9pZFBhY2thZ2VGcm9tQ29udGV4dE5hbWUiLCJhdXRvR3JhbnRQZXJtaXNzaW9ucyIsInNoYXJlZFByZWZlcmVuY2VzIiwibmV0d29ya1NwZWVkIiwiZ3BzRW5hYmxlZCIsImlzSGVhZGxlc3MiLCJzaG93Q2hyb21lZHJpdmVyTG9nIiwic2tpcFVubG9jayIsImNsZWFyRGV2aWNlTG9nc09uU3RhcnQiLCJ1bmxvY2tUeXBlIiwidW5sb2NrS2V5IiwidW5sb2NrU3RyYXRlZ3kiLCJvdGhlckFwcHMiLCJ1bmluc3RhbGxPdGhlclBhY2thZ2VzIiwiYWxsb3dUZXN0UGFja2FnZXMiLCJwYWdlTG9hZFN0cmF0ZWd5IiwibG9jYWxlU2NyaXB0Iiwic2tpcERldmljZUluaXRpYWxpemF0aW9uIiwicmVtb3RlQXBwc0NhY2hlTGltaXQiLCJidWlsZFRvb2xzVmVyc2lvbiIsInNraXBMb2djYXRDYXB0dXJlIiwiY2hyb21lT3B0aW9ucyIsImVuYWJsZVBlcmZvcm1hbmNlTG9nZ2luZyIsInVzZXJQcm9maWxlIiwiYnJvd3Nlck5hbWUiLCJlbmZvcmNlQXBwSW5zdGFsbCIsInN1cHByZXNzS2lsbFNlcnZlciIsImFsbG93T2ZmbGluZURldmljZXMiLCJpZ25vcmVIaWRkZW5BcGlQb2xpY3lFcnJvciIsInVubG9ja1N1Y2Nlc3NUaW1lb3V0IiwibW9ja0xvY2F0aW9uQXBwIiwibG9nY2F0Rm9ybWF0IiwibG9nY2F0RmlsdGVyU3BlY3MiLCJhbGxvd0RlbGF5QWRiIiwidWlhdXRvbWF0b3JDYXBDb25zdHJhaW50cyIsImlnbm9yZVVuaW1wb3J0YW50Vmlld3MiLCJkaXNhYmxlQW5kcm9pZFdhdGNoZXJzIiwiYWNjZXB0U3NsQ2VydHMiLCJhbmRyb2lkTmF0dXJhbE9yaWVudGF0aW9uIiwiZGlzYWJsZVdpbmRvd0FuaW1hdGlvbiIsImJvb3RzdHJhcFBvcnQiLCJkZXNpcmVkQ2FwQ29uc3RyYWludHMiLCJPYmplY3QiLCJhc3NpZ24iXSwic291cmNlcyI6WyIuLi8uLi9saWIvZGVzaXJlZC1jYXBzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImxldCBjb21tb25DYXBDb25zdHJhaW50cyA9IHtcbiAgcGxhdGZvcm1OYW1lOiB7XG4gICAgaXNTdHJpbmc6IHRydWUsXG4gICAgaW5jbHVzaW9uQ2FzZUluc2Vuc2l0aXZlOiBbJ0FuZHJvaWQnXSxcbiAgICBwcmVzZW5jZTogdHJ1ZVxuICB9LFxuICBhcHA6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBhcHBBY3Rpdml0eToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGFwcFBhY2thZ2U6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBhcHBXYWl0QWN0aXZpdHk6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBhcHBXYWl0UGFja2FnZToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGFwcFdhaXREdXJhdGlvbjoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIGRldmljZVJlYWR5VGltZW91dDoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIGFuZHJvaWRDb3ZlcmFnZToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGFuZHJvaWREZXZpY2VSZWFkeVRpbWVvdXQ6IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICBhbmRyb2lkRGV2aWNlU29ja2V0OiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgYW5kcm9pZEluc3RhbGxUaW1lb3V0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgYWRiUG9ydDoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIHJlbW90ZUFkYkhvc3Q6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBhZGJFeGVjVGltZW91dDoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIGF2ZDoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGF2ZExhdW5jaFRpbWVvdXQ6IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICBhdmRSZWFkeVRpbWVvdXQ6IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICBhdmRBcmdzOiB7XG4gICAgLy8gY291bGQgYmUgYSBzdHJpbmcgb3IgYW4gYXJyYXlcbiAgfSxcbiAgYXZkRW52OiB7XG4gICAgaXNPYmplY3Q6IHRydWVcbiAgfSxcbiAgdXNlS2V5c3RvcmU6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAga2V5c3RvcmVQYXRoOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAga2V5c3RvcmVQYXNzd29yZDoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGtleUFsaWFzOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAga2V5UGFzc3dvcmQ6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICB3ZWJ2aWV3RGV2dG9vbHNQb3J0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgZW5zdXJlV2Vidmlld3NIYXZlUGFnZXM6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgZW5hYmxlV2Vidmlld0RldGFpbHNDb2xsZWN0aW9uOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIC8vIHRoaXMgb25lIGlzIGRlcHJlY2F0ZWRcbiAgY2hyb21lRHJpdmVyUG9ydDoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIC8vIGR1cGxpY2F0ZSBvZiBhYm92ZSB3aXRoIGJldHRlciBzcGVsbGluZ1xuICBjaHJvbWVkcml2ZXJQb3J0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgY2hyb21lZHJpdmVyUG9ydHM6IHtcbiAgICBpc0FycmF5OiB0cnVlXG4gIH0sXG4gIGNocm9tZWRyaXZlckFyZ3M6IHtcbiAgICBpc09iamVjdDogdHJ1ZSxcbiAgfSxcbiAgY2hyb21lZHJpdmVyRXhlY3V0YWJsZToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGNocm9tZWRyaXZlckV4ZWN1dGFibGVEaXI6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBjaHJvbWVkcml2ZXJDaHJvbWVNYXBwaW5nRmlsZToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGNocm9tZWRyaXZlclVzZVN5c3RlbUV4ZWN1dGFibGU6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgY2hyb21lZHJpdmVyRGlzYWJsZUJ1aWxkQ2hlY2s6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgY2hyb21lTG9nZ2luZ1ByZWZzOiB7XG4gICAgaXNPYmplY3Q6IHRydWVcbiAgfSxcbiAgYXV0b1dlYnZpZXdUaW1lb3V0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgYXV0b1dlYnZpZXdOYW1lOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgaW50ZW50QWN0aW9uOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgaW50ZW50Q2F0ZWdvcnk6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBpbnRlbnRGbGFnczoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgZG9udFN0b3BBcHBPblJlc2V0OiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIHVuaWNvZGVLZXlib2FyZDoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICByZXNldEtleWJvYXJkOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIG5vU2lnbjoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICByZWNyZWF0ZUNocm9tZURyaXZlclNlc3Npb25zOiB7XG4gICAgaXNCb29sZWFuOiBmYWxzZVxuICB9LFxuICBhdXRvTGF1bmNoOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIG5hdGl2ZVdlYlNjcmVlbnNob3Q6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgYW5kcm9pZFNjcmVlbnNob3RQYXRoOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgYW5kcm9pZEluc3RhbGxQYXRoOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgY2xlYXJTeXN0ZW1GaWxlczoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBleHRyYWN0Q2hyb21lQW5kcm9pZFBhY2thZ2VGcm9tQ29udGV4dE5hbWU6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgYXV0b0dyYW50UGVybWlzc2lvbnM6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgc2hhcmVkUHJlZmVyZW5jZXM6IHtcbiAgICBpc09iamVjdDogdHJ1ZVxuICB9LFxuICBuZXR3b3JrU3BlZWQ6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBncHNFbmFibGVkOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGlzSGVhZGxlc3M6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgc2hvd0Nocm9tZWRyaXZlckxvZzoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBza2lwVW5sb2NrOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGNsZWFyRGV2aWNlTG9nc09uU3RhcnQ6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgdW5sb2NrVHlwZToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHVubG9ja0tleToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHVubG9ja1N0cmF0ZWd5OiB7XG4gICAgaXNTdHJpbmc6IHRydWUsXG4gICAgaW5jbHVzaW9uQ2FzZUluc2Vuc2l0aXZlOiBbJ2xvY2tzZXR0aW5ncycsICd1aWF1dG9tYXRvciddLFxuICB9LFxuICBvdGhlckFwcHM6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICB1bmluc3RhbGxPdGhlclBhY2thZ2VzOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgYWxsb3dUZXN0UGFja2FnZXM6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgcGFnZUxvYWRTdHJhdGVneToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGxvY2FsZVNjcmlwdDoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHNraXBEZXZpY2VJbml0aWFsaXphdGlvbjoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICByZW1vdGVBcHBzQ2FjaGVMaW1pdDoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIGJ1aWxkVG9vbHNWZXJzaW9uOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgc2tpcExvZ2NhdENhcHR1cmU6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgY2hyb21lT3B0aW9uczoge1xuICAgIGlzT2JqZWN0OiB0cnVlXG4gIH0sXG4gIGVuYWJsZVBlcmZvcm1hbmNlTG9nZ2luZzoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICB1c2VyUHJvZmlsZToge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIGJyb3dzZXJOYW1lOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgZW5mb3JjZUFwcEluc3RhbGw6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgc3VwcHJlc3NLaWxsU2VydmVyOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGFsbG93T2ZmbGluZURldmljZXM6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgaWdub3JlSGlkZGVuQXBpUG9saWN5RXJyb3I6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgdW5sb2NrU3VjY2Vzc1RpbWVvdXQ6IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICBtb2NrTG9jYXRpb25BcHA6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBsb2djYXRGb3JtYXQ6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBsb2djYXRGaWx0ZXJTcGVjczoge1xuICAgIGlzQXJyYXk6IHRydWVcbiAgfSxcbiAgYWxsb3dEZWxheUFkYjoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9XG59O1xuXG5sZXQgdWlhdXRvbWF0b3JDYXBDb25zdHJhaW50cyA9IHtcbiAgaWdub3JlVW5pbXBvcnRhbnRWaWV3czoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBkaXNhYmxlQW5kcm9pZFdhdGNoZXJzOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGFjY2VwdFNzbENlcnRzOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGFuZHJvaWROYXR1cmFsT3JpZW50YXRpb246IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgZGlzYWJsZVdpbmRvd0FuaW1hdGlvbjoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBib290c3RyYXBQb3J0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbn07XG5cbmxldCBkZXNpcmVkQ2FwQ29uc3RyYWludHMgPSB7fTtcblxuT2JqZWN0LmFzc2lnbihkZXNpcmVkQ2FwQ29uc3RyYWludHMsIGNvbW1vbkNhcENvbnN0cmFpbnRzLFxuICAgICAgICAgICAgICB1aWF1dG9tYXRvckNhcENvbnN0cmFpbnRzKTtcblxuZXhwb3J0IGRlZmF1bHQgZGVzaXJlZENhcENvbnN0cmFpbnRzO1xuZXhwb3J0IHsgY29tbW9uQ2FwQ29uc3RyYWludHMgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLElBQUlBLG9CQUFvQixHQUFHO0VBQ3pCQyxZQUFZLEVBQUU7SUFDWkMsUUFBUSxFQUFFLElBQUk7SUFDZEMsd0JBQXdCLEVBQUUsQ0FBQyxTQUFTLENBQUM7SUFDckNDLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDREMsR0FBRyxFQUFFO0lBQ0hILFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDREksV0FBVyxFQUFFO0lBQ1hKLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDREssVUFBVSxFQUFFO0lBQ1ZMLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRE0sZUFBZSxFQUFFO0lBQ2ZOLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRE8sY0FBYyxFQUFFO0lBQ2RQLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRFEsZUFBZSxFQUFFO0lBQ2ZDLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDREMsa0JBQWtCLEVBQUU7SUFDbEJELFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDREUsZUFBZSxFQUFFO0lBQ2ZYLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRFkseUJBQXlCLEVBQUU7SUFDekJILFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDREksbUJBQW1CLEVBQUU7SUFDbkJiLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRGMscUJBQXFCLEVBQUU7SUFDckJMLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRE0sT0FBTyxFQUFFO0lBQ1BOLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRE8sYUFBYSxFQUFFO0lBQ2JoQixRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0RpQixjQUFjLEVBQUU7SUFDZFIsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNEUyxHQUFHLEVBQUU7SUFDSGxCLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRG1CLGdCQUFnQixFQUFF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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"desired-caps.js","names":["commonCapConstraints","platformName","isString","inclusionCaseInsensitive","presence","app","appActivity","appPackage","appWaitActivity","appWaitPackage","appWaitDuration","isNumber","deviceReadyTimeout","androidCoverage","androidDeviceReadyTimeout","androidDeviceSocket","androidInstallTimeout","adbPort","remoteAdbHost","adbExecTimeout","avd","avdLaunchTimeout","avdReadyTimeout","avdArgs","avdEnv","isObject","useKeystore","isBoolean","keystorePath","keystorePassword","keyAlias","keyPassword","webviewDevtoolsPort","ensureWebviewsHavePages","enableWebviewDetailsCollection","chromeDriverPort","chromedriverPort","chromedriverPorts","isArray","chromedriverArgs","chromedriverExecutable","chromedriverExecutableDir","chromedriverChromeMappingFile","chromedriverUseSystemExecutable","chromedriverDisableBuildCheck","chromeLoggingPrefs","autoWebviewTimeout","intentAction","intentCategory","intentFlags","optionalIntentArguments","dontStopAppOnReset","unicodeKeyboard","resetKeyboard","noSign","recreateChromeDriverSessions","autoLaunch","nativeWebScreenshot","androidScreenshotPath","androidInstallPath","clearSystemFiles","extractChromeAndroidPackageFromContextName","autoGrantPermissions","sharedPreferences","networkSpeed","gpsEnabled","isHeadless","showChromedriverLog","skipUnlock","clearDeviceLogsOnStart","unlockType","unlockKey","unlockStrategy","otherApps","uninstallOtherPackages","allowTestPackages","pageLoadStrategy","localeScript","skipDeviceInitialization","remoteAppsCacheLimit","buildToolsVersion","skipLogcatCapture","chromeOptions","enablePerformanceLogging","userProfile","browserName","enforceAppInstall","suppressKillServer","allowOfflineDevices","ignoreHiddenApiPolicyError","unlockSuccessTimeout","mockLocationApp","logcatFormat","logcatFilterSpecs","allowDelayAdb","uiautomatorCapConstraints","ignoreUnimportantViews","disableAndroidWatchers","acceptSslCerts","androidNaturalOrientation","disableWindowAnimation","bootstrapPort","desiredCapConstraints","Object","assign"],"sources":["../../lib/desired-caps.js"],"sourcesContent":["let commonCapConstraints = {\n platformName: {\n isString: true,\n inclusionCaseInsensitive: ['Android'],\n presence: true\n },\n app: {\n isString: true\n },\n appActivity: {\n isString: true\n },\n appPackage: {\n isString: true\n },\n appWaitActivity: {\n isString: true\n },\n appWaitPackage: {\n isString: true\n },\n appWaitDuration: {\n isNumber: true\n },\n deviceReadyTimeout: {\n isNumber: true\n },\n androidCoverage: {\n isString: true\n },\n androidDeviceReadyTimeout: {\n isNumber: true\n },\n androidDeviceSocket: {\n isString: true\n },\n androidInstallTimeout: {\n isNumber: true\n },\n adbPort: {\n isNumber: true\n },\n remoteAdbHost: {\n isString: true\n },\n adbExecTimeout: {\n isNumber: true\n },\n avd: {\n isString: true\n },\n avdLaunchTimeout: {\n isNumber: true\n },\n avdReadyTimeout: {\n isNumber: true\n },\n avdArgs: {\n // could be a string or an array\n },\n avdEnv: {\n isObject: true\n },\n useKeystore: {\n isBoolean: true\n },\n keystorePath: {\n isString: true\n },\n keystorePassword: {\n isString: true\n },\n keyAlias: {\n isString: true\n },\n keyPassword: {\n isString: true\n },\n webviewDevtoolsPort: {\n isNumber: true\n },\n ensureWebviewsHavePages: {\n isBoolean: true\n },\n enableWebviewDetailsCollection: {\n isBoolean: true\n },\n // this one is deprecated\n chromeDriverPort: {\n isNumber: true\n },\n // duplicate of above with better spelling\n chromedriverPort: {\n isNumber: true\n },\n chromedriverPorts: {\n isArray: true\n },\n chromedriverArgs: {\n isObject: true,\n },\n chromedriverExecutable: {\n isString: true\n },\n chromedriverExecutableDir: {\n isString: true\n },\n chromedriverChromeMappingFile: {\n isString: true\n },\n chromedriverUseSystemExecutable: {\n isBoolean: true\n },\n chromedriverDisableBuildCheck: {\n isBoolean: true\n },\n chromeLoggingPrefs: {\n isObject: true\n },\n autoWebviewTimeout: {\n isNumber: true\n },\n intentAction: {\n isString: true\n },\n intentCategory: {\n isString: true\n },\n intentFlags: {\n isString: true\n },\n optionalIntentArguments: {\n isString: true\n },\n dontStopAppOnReset: {\n isBoolean: true\n },\n unicodeKeyboard: {\n isBoolean: true\n },\n resetKeyboard: {\n isBoolean: true\n },\n noSign: {\n isBoolean: true\n },\n recreateChromeDriverSessions: {\n isBoolean: false\n },\n autoLaunch: {\n isBoolean: true\n },\n nativeWebScreenshot: {\n isBoolean: true\n },\n androidScreenshotPath: {\n isString: true\n },\n androidInstallPath: {\n isString: true\n },\n clearSystemFiles: {\n isBoolean: true\n },\n extractChromeAndroidPackageFromContextName: {\n isBoolean: true\n },\n autoGrantPermissions: {\n isBoolean: true\n },\n sharedPreferences: {\n isObject: true\n },\n networkSpeed: {\n isString: true\n },\n gpsEnabled: {\n isBoolean: true\n },\n isHeadless: {\n isBoolean: true\n },\n showChromedriverLog: {\n isBoolean: true\n },\n skipUnlock: {\n isBoolean: true\n },\n clearDeviceLogsOnStart: {\n isBoolean: true\n },\n unlockType: {\n isString: true\n },\n unlockKey: {\n isString: true\n },\n unlockStrategy: {\n isString: true,\n inclusionCaseInsensitive: ['locksettings', 'uiautomator'],\n },\n otherApps: {\n isString: true\n },\n uninstallOtherPackages: {\n isString: true\n },\n allowTestPackages: {\n isBoolean: true\n },\n pageLoadStrategy: {\n isString: true\n },\n localeScript: {\n isString: true\n },\n skipDeviceInitialization: {\n isBoolean: true\n },\n remoteAppsCacheLimit: {\n isNumber: true\n },\n buildToolsVersion: {\n isString: true\n },\n skipLogcatCapture: {\n isBoolean: true\n },\n chromeOptions: {\n isObject: true\n },\n enablePerformanceLogging: {\n isBoolean: true\n },\n userProfile: {\n isNumber: true\n },\n browserName: {\n isString: true\n },\n enforceAppInstall: {\n isBoolean: true\n },\n suppressKillServer: {\n isBoolean: true\n },\n allowOfflineDevices: {\n isBoolean: true\n },\n ignoreHiddenApiPolicyError: {\n isBoolean: true\n },\n unlockSuccessTimeout: {\n isNumber: true\n },\n mockLocationApp: {\n isString: true\n },\n logcatFormat: {\n isString: true\n },\n logcatFilterSpecs: {\n isArray: true\n },\n allowDelayAdb: {\n isBoolean: true\n }\n};\n\nlet uiautomatorCapConstraints = {\n ignoreUnimportantViews: {\n isBoolean: true\n },\n disableAndroidWatchers: {\n isBoolean: true\n },\n acceptSslCerts: {\n isBoolean: true\n },\n androidNaturalOrientation: {\n isBoolean: true\n },\n disableWindowAnimation: {\n isBoolean: true\n },\n bootstrapPort: {\n isNumber: true\n },\n};\n\nlet desiredCapConstraints = {};\n\nObject.assign(desiredCapConstraints, commonCapConstraints,\n uiautomatorCapConstraints);\n\nexport default desiredCapConstraints;\nexport { commonCapConstraints };\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"desired-caps.js","names":["commonCapConstraints","platformName","isString","inclusionCaseInsensitive","presence","app","appActivity","appPackage","appWaitActivity","appWaitPackage","appWaitDuration","isNumber","deviceReadyTimeout","androidCoverage","androidDeviceReadyTimeout","androidDeviceSocket","androidInstallTimeout","adbPort","remoteAdbHost","adbExecTimeout","avd","avdLaunchTimeout","avdReadyTimeout","avdArgs","avdEnv","isObject","useKeystore","isBoolean","keystorePath","keystorePassword","keyAlias","keyPassword","webviewDevtoolsPort","ensureWebviewsHavePages","enableWebviewDetailsCollection","chromeDriverPort","chromedriverPort","chromedriverPorts","isArray","chromedriverArgs","chromedriverExecutable","chromedriverExecutableDir","chromedriverChromeMappingFile","chromedriverUseSystemExecutable","chromedriverDisableBuildCheck","chromeLoggingPrefs","autoWebviewTimeout","autoWebviewName","intentAction","intentCategory","intentFlags","optionalIntentArguments","dontStopAppOnReset","unicodeKeyboard","resetKeyboard","noSign","recreateChromeDriverSessions","autoLaunch","nativeWebScreenshot","androidScreenshotPath","androidInstallPath","clearSystemFiles","extractChromeAndroidPackageFromContextName","autoGrantPermissions","sharedPreferences","networkSpeed","gpsEnabled","isHeadless","showChromedriverLog","skipUnlock","clearDeviceLogsOnStart","unlockType","unlockKey","unlockStrategy","otherApps","uninstallOtherPackages","allowTestPackages","pageLoadStrategy","localeScript","skipDeviceInitialization","remoteAppsCacheLimit","buildToolsVersion","skipLogcatCapture","chromeOptions","enablePerformanceLogging","userProfile","browserName","enforceAppInstall","suppressKillServer","allowOfflineDevices","ignoreHiddenApiPolicyError","unlockSuccessTimeout","mockLocationApp","logcatFormat","logcatFilterSpecs","allowDelayAdb","uiautomatorCapConstraints","ignoreUnimportantViews","disableAndroidWatchers","acceptSslCerts","androidNaturalOrientation","disableWindowAnimation","bootstrapPort","desiredCapConstraints","Object","assign"],"sources":["../../lib/desired-caps.js"],"sourcesContent":["let commonCapConstraints = {\n platformName: {\n isString: true,\n inclusionCaseInsensitive: ['Android'],\n presence: true\n },\n app: {\n isString: true\n },\n appActivity: {\n isString: true\n },\n appPackage: {\n isString: true\n },\n appWaitActivity: {\n isString: true\n },\n appWaitPackage: {\n isString: true\n },\n appWaitDuration: {\n isNumber: true\n },\n deviceReadyTimeout: {\n isNumber: true\n },\n androidCoverage: {\n isString: true\n },\n androidDeviceReadyTimeout: {\n isNumber: true\n },\n androidDeviceSocket: {\n isString: true\n },\n androidInstallTimeout: {\n isNumber: true\n },\n adbPort: {\n isNumber: true\n },\n remoteAdbHost: {\n isString: true\n },\n adbExecTimeout: {\n isNumber: true\n },\n avd: {\n isString: true\n },\n avdLaunchTimeout: {\n isNumber: true\n },\n avdReadyTimeout: {\n isNumber: true\n },\n avdArgs: {\n // could be a string or an array\n },\n avdEnv: {\n isObject: true\n },\n useKeystore: {\n isBoolean: true\n },\n keystorePath: {\n isString: true\n },\n keystorePassword: {\n isString: true\n },\n keyAlias: {\n isString: true\n },\n keyPassword: {\n isString: true\n },\n webviewDevtoolsPort: {\n isNumber: true\n },\n ensureWebviewsHavePages: {\n isBoolean: true\n },\n enableWebviewDetailsCollection: {\n isBoolean: true\n },\n // this one is deprecated\n chromeDriverPort: {\n isNumber: true\n },\n // duplicate of above with better spelling\n chromedriverPort: {\n isNumber: true\n },\n chromedriverPorts: {\n isArray: true\n },\n chromedriverArgs: {\n isObject: true,\n },\n chromedriverExecutable: {\n isString: true\n },\n chromedriverExecutableDir: {\n isString: true\n },\n chromedriverChromeMappingFile: {\n isString: true\n },\n chromedriverUseSystemExecutable: {\n isBoolean: true\n },\n chromedriverDisableBuildCheck: {\n isBoolean: true\n },\n chromeLoggingPrefs: {\n isObject: true\n },\n autoWebviewTimeout: {\n isNumber: true\n },\n autoWebviewName: {\n isString: true\n },\n intentAction: {\n isString: true\n },\n intentCategory: {\n isString: true\n },\n intentFlags: {\n isString: true\n },\n optionalIntentArguments: {\n isString: true\n },\n dontStopAppOnReset: {\n isBoolean: true\n },\n unicodeKeyboard: {\n isBoolean: true\n },\n resetKeyboard: {\n isBoolean: true\n },\n noSign: {\n isBoolean: true\n },\n recreateChromeDriverSessions: {\n isBoolean: false\n },\n autoLaunch: {\n isBoolean: true\n },\n nativeWebScreenshot: {\n isBoolean: true\n },\n androidScreenshotPath: {\n isString: true\n },\n androidInstallPath: {\n isString: true\n },\n clearSystemFiles: {\n isBoolean: true\n },\n extractChromeAndroidPackageFromContextName: {\n isBoolean: true\n },\n autoGrantPermissions: {\n isBoolean: true\n },\n sharedPreferences: {\n isObject: true\n },\n networkSpeed: {\n isString: true\n },\n gpsEnabled: {\n isBoolean: true\n },\n isHeadless: {\n isBoolean: true\n },\n showChromedriverLog: {\n isBoolean: true\n },\n skipUnlock: {\n isBoolean: true\n },\n clearDeviceLogsOnStart: {\n isBoolean: true\n },\n unlockType: {\n isString: true\n },\n unlockKey: {\n isString: true\n },\n unlockStrategy: {\n isString: true,\n inclusionCaseInsensitive: ['locksettings', 'uiautomator'],\n },\n otherApps: {\n isString: true\n },\n uninstallOtherPackages: {\n isString: true\n },\n allowTestPackages: {\n isBoolean: true\n },\n pageLoadStrategy: {\n isString: true\n },\n localeScript: {\n isString: true\n },\n skipDeviceInitialization: {\n isBoolean: true\n },\n remoteAppsCacheLimit: {\n isNumber: true\n },\n buildToolsVersion: {\n isString: true\n },\n skipLogcatCapture: {\n isBoolean: true\n },\n chromeOptions: {\n isObject: true\n },\n enablePerformanceLogging: {\n isBoolean: true\n },\n userProfile: {\n isNumber: true\n },\n browserName: {\n isString: true\n },\n enforceAppInstall: {\n isBoolean: true\n },\n suppressKillServer: {\n isBoolean: true\n },\n allowOfflineDevices: {\n isBoolean: true\n },\n ignoreHiddenApiPolicyError: {\n isBoolean: true\n },\n unlockSuccessTimeout: {\n isNumber: true\n },\n mockLocationApp: {\n isString: true\n },\n logcatFormat: {\n isString: true\n },\n logcatFilterSpecs: {\n isArray: true\n },\n allowDelayAdb: {\n isBoolean: true\n }\n};\n\nlet uiautomatorCapConstraints = {\n ignoreUnimportantViews: {\n isBoolean: true\n },\n disableAndroidWatchers: {\n isBoolean: true\n },\n acceptSslCerts: {\n isBoolean: true\n },\n androidNaturalOrientation: {\n isBoolean: true\n },\n disableWindowAnimation: {\n isBoolean: true\n },\n bootstrapPort: {\n isNumber: true\n },\n};\n\nlet desiredCapConstraints = {};\n\nObject.assign(desiredCapConstraints, commonCapConstraints,\n uiautomatorCapConstraints);\n\nexport default desiredCapConstraints;\nexport { commonCapConstraints };\n"],"mappings":"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"}
|
package/lib/commands/context.js
CHANGED
|
@@ -151,7 +151,7 @@ helpers.defaultContextName = function defaultContextName () {
|
|
|
151
151
|
};
|
|
152
152
|
|
|
153
153
|
helpers.defaultWebviewName = function defaultWebviewName () {
|
|
154
|
-
return WEBVIEW_BASE + this.opts.appPackage;
|
|
154
|
+
return WEBVIEW_BASE + (this.opts.autoWebviewName || this.opts.appPackage);
|
|
155
155
|
};
|
|
156
156
|
|
|
157
157
|
helpers.isWebContext = function isWebContext () {
|
package/lib/desired-caps.js
CHANGED