appium-remote-debugger 9.1.14 → 9.1.16

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.
@@ -131,4 +131,4 @@ class RpcClientSimulator extends _rpcClient.default {
131
131
  }
132
132
  }
133
133
  exports.default = RpcClientSimulator;
134
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9nZ2VyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfbG9kYXNoIiwiX2JsdWViaXJkIiwiX25ldCIsIl9ycGNDbGllbnQiLCJfYXBwaXVtSW9zRGV2aWNlIiwiUnBjQ2xpZW50U2ltdWxhdG9yIiwiUnBjQ2xpZW50IiwiY29uc3RydWN0b3IiLCJvcHRzIiwiT2JqZWN0IiwiYXNzaWduIiwic2hvdWxkQ2hlY2tGb3JUYXJnZXQiLCJzb2NrZXRQYXRoIiwiaG9zdCIsInBvcnQiLCJtZXNzYWdlUHJveHkiLCJzb2NrZXQiLCJjb25uZWN0IiwibG9nIiwiZGVidWciLCJuZXQiLCJvbmNlIiwid3JpdGUiLCJKU09OIiwic3RyaW5naWZ5IiwiU29ja2V0IiwidHlwZSIsInNldE5vRGVsYXkiLCJzZXRLZWVwQWxpdmUiLCJvbiIsImlzQ29ubmVjdGVkIiwic2VydmljZSIsInNlcnZpY2VzIiwic3RhcnRXZWJJbnNwZWN0b3JTZXJ2aWNlIiwidWRpZCIsImlzU2ltdWxhdG9yIiwib3NWZXJzaW9uIiwicGxhdGZvcm1WZXJzaW9uIiwidmVyYm9zZSIsImxvZ0FsbENvbW11bmljYXRpb24iLCJ2ZXJib3NlSGV4RHVtcCIsImxvZ0FsbENvbW11bmljYXRpb25IZXhEdW1wIiwibWF4RnJhbWVMZW5ndGgiLCJ3ZWJJbnNwZWN0b3JNYXhGcmFtZUxlbmd0aCIsImxpc3Rlbk1lc3NhZ2UiLCJyZWNlaXZlIiwiYmluZCIsIkIiLCJyZXNvbHZlIiwicmVqZWN0IiwiZXJyIiwiZXJyb3IiLCJtZXNzYWdlIiwiZGlzY29ubmVjdCIsImNsb3NlIiwic2VuZE1lc3NhZ2UiLCJjbWQiLCJvblNvY2tldEVycm9yIiwiZmluYWxseSIsInJlbW92ZUxpc3RlbmVyIiwiaWduIiwiZGF0YSIsImtleSIsIl8iLCJpc1VuZGVmaW5lZCIsInRvU3RyaW5nIiwibWVzc2FnZUhhbmRsZXIiLCJoYW5kbGVNZXNzYWdlIiwiZXhwb3J0cyIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvcnBjL3JwYy1jbGllbnQtc2ltdWxhdG9yLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgbmV0IGZyb20gJ25ldCc7XG5pbXBvcnQgUnBjQ2xpZW50IGZyb20gJy4vcnBjLWNsaWVudCc7XG5pbXBvcnQgeyBzZXJ2aWNlcyB9IGZyb20gJ2FwcGl1bS1pb3MtZGV2aWNlJztcblxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBScGNDbGllbnRTaW11bGF0b3IgZXh0ZW5kcyBScGNDbGllbnQge1xuICBjb25zdHJ1Y3RvciAob3B0cyA9IHt9KSB7XG4gICAgc3VwZXIoT2JqZWN0LmFzc2lnbih7XG4gICAgICBzaG91bGRDaGVja0ZvclRhcmdldDogZmFsc2UsXG4gICAgfSwgb3B0cykpO1xuXG4gICAgY29uc3Qge1xuICAgICAgc29ja2V0UGF0aCxcbiAgICAgIGhvc3QgPSAnOjoxJyxcbiAgICAgIHBvcnQsXG4gICAgICBtZXNzYWdlUHJveHksXG4gICAgfSA9IG9wdHM7XG5cbiAgICAvLyBob3N0L3BvcnQgY29uZmlnIGZvciBUQ1AgY29tbXVuaWNhdGlvbiwgc29ja2V0UGF0aCBmb3IgdW5peCBkb21haW4gc29ja2V0c1xuICAgIHRoaXMuaG9zdCA9IGhvc3Q7XG4gICAgdGhpcy5wb3J0ID0gcG9ydDtcbiAgICB0aGlzLm1lc3NhZ2VQcm94eSA9IG1lc3NhZ2VQcm94eTtcblxuICAgIHRoaXMuc29ja2V0ID0gbnVsbDtcbiAgICB0aGlzLnNvY2tldFBhdGggPSBzb2NrZXRQYXRoO1xuICB9XG5cbiAgYXN5bmMgY29ubmVjdCAoKSB7XG4gICAgLy8gY3JlYXRlIHNvY2tldCBhbmQgaGFuZGxlIGl0cyBtZXNzYWdlc1xuICAgIGlmICh0aGlzLnNvY2tldFBhdGgpIHtcbiAgICAgIGlmICh0aGlzLm1lc3NhZ2VQcm94eSkge1xuICAgICAgICAvLyB1bml4IGRvbWFpbiBzb2NrZXQgdmlhIHByb3h5XG4gICAgICAgIGxvZy5kZWJ1ZyhgQ29ubmVjdGluZyB0byByZW1vdGUgZGVidWdnZXIgdmlhIHByb3h5IHRocm91Z2ggdW5peCBkb21haW4gc29ja2V0OiAnJHt0aGlzLm1lc3NhZ2VQcm94eX0nYCk7XG4gICAgICAgIHRoaXMuc29ja2V0ID0gbmV0LmNvbm5lY3QodGhpcy5tZXNzYWdlUHJveHkpO1xuXG4gICAgICAgIC8vIEZvcndhcmQgdGhlIGFjdHVhbCBzb2NrZXRQYXRoIHRvIHRoZSBwcm94eVxuICAgICAgICB0aGlzLnNvY2tldC5vbmNlKCdjb25uZWN0JywgKCkgPT4ge1xuICAgICAgICAgIGxvZy5kZWJ1ZyhgRm9yd2FyZGluZyB0aGUgYWN0dWFsIHdlYiBpbnNwZWN0b3Igc29ja2V0IHRvIHRoZSBwcm94eTogJyR7dGhpcy5zb2NrZXRQYXRofSdgKTtcbiAgICAgICAgICB0aGlzLnNvY2tldC53cml0ZShKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBzb2NrZXRQYXRoOiB0aGlzLnNvY2tldFBhdGhcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB1bml4IGRvbWFpbiBzb2NrZXRcbiAgICAgICAgbG9nLmRlYnVnKGBDb25uZWN0aW5nIHRvIHJlbW90ZSBkZWJ1Z2dlciB0aHJvdWdoIHVuaXggZG9tYWluIHNvY2tldDogJyR7dGhpcy5zb2NrZXRQYXRofSdgKTtcbiAgICAgICAgdGhpcy5zb2NrZXQgPSBuZXQuY29ubmVjdCh0aGlzLnNvY2tldFBhdGgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5tZXNzYWdlUHJveHkpIHtcbiAgICAgICAgLy8gY29ubmVjdCB0byB0aGUgcHJveHkgaW5zdGVhZCBvZiB0aGUgcmVtb3RlIGRlYnVnZ2VyIGRpcmVjdGx5XG4gICAgICAgIHRoaXMucG9ydCA9IHRoaXMubWVzc2FnZVByb3h5O1xuICAgICAgfVxuXG4gICAgICAvLyB0Y3Agc29ja2V0XG4gICAgICBsb2cuZGVidWcoYENvbm5lY3RpbmcgdG8gcmVtb3RlIGRlYnVnZ2VyICR7dGhpcy5tZXNzYWdlUHJveHkgPyAndmlhIHByb3h5ICcgOiAnJ310aHJvdWdoIFRDUDogJHt0aGlzLmhvc3R9OiR7dGhpcy5wb3J0fWApO1xuICAgICAgdGhpcy5zb2NrZXQgPSBuZXcgbmV0LlNvY2tldCh7dHlwZTogJ3RjcDYnfSk7XG4gICAgICB0aGlzLnNvY2tldC5jb25uZWN0KHRoaXMucG9ydCwgdGhpcy5ob3N0KTtcbiAgICB9XG5cbiAgICB0aGlzLnNvY2tldC5zZXROb0RlbGF5KHRydWUpO1xuICAgIHRoaXMuc29ja2V0LnNldEtlZXBBbGl2ZSh0cnVlKTtcbiAgICB0aGlzLnNvY2tldC5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc0Nvbm5lY3RlZCkge1xuICAgICAgICBsb2cuZGVidWcoJ0RlYnVnZ2VyIHNvY2tldCBkaXNjb25uZWN0ZWQnKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaXNDb25uZWN0ZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuc29ja2V0ID0gbnVsbDtcbiAgICB9KTtcbiAgICB0aGlzLnNvY2tldC5vbignZW5kJywgKCkgPT4ge1xuICAgICAgdGhpcy5pc0Nvbm5lY3RlZCA9IGZhbHNlO1xuICAgIH0pO1xuICAgIHRoaXMuc2VydmljZSA9IGF3YWl0IHNlcnZpY2VzLnN0YXJ0V2ViSW5zcGVjdG9yU2VydmljZSh0aGlzLnVkaWQsIHtcbiAgICAgIHNvY2tldDogdGhpcy5zb2NrZXQsXG4gICAgICBpc1NpbXVsYXRvcjogdHJ1ZSxcbiAgICAgIG9zVmVyc2lvbjogdGhpcy5wbGF0Zm9ybVZlcnNpb24sXG4gICAgICB2ZXJib3NlOiB0aGlzLmxvZ0FsbENvbW11bmljYXRpb24sXG4gICAgICB2ZXJib3NlSGV4RHVtcDogdGhpcy5sb2dBbGxDb21tdW5pY2F0aW9uSGV4RHVtcCxcbiAgICAgIG1heEZyYW1lTGVuZ3RoOiB0aGlzLndlYkluc3BlY3Rvck1heEZyYW1lTGVuZ3RoLFxuICAgIH0pO1xuICAgIHRoaXMuc2VydmljZS5saXN0ZW5NZXNzYWdlKHRoaXMucmVjZWl2ZS5iaW5kKHRoaXMpKTtcblxuICAgIC8vIGNvbm5lY3QgdGhlIHNvY2tldFxuICAgIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAvLyBvbmx5IHJlc29sdmUgdGhpcyBmdW5jdGlvbiB3aGVuIHdlIGFyZSBhY3R1YWxseSBjb25uZWN0ZWRcbiAgICAgIHRoaXMuc29ja2V0Lm9uKCdjb25uZWN0JywgKCkgPT4ge1xuICAgICAgICBsb2cuZGVidWcoYERlYnVnZ2VyIHNvY2tldCBjb25uZWN0ZWRgKTtcbiAgICAgICAgdGhpcy5pc0Nvbm5lY3RlZCA9IHRydWU7XG5cbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnNvY2tldC5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmlzQ29ubmVjdGVkKSB7XG4gICAgICAgICAgbG9nLmVycm9yKGBTb2NrZXQgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgdGhpcy5pc0Nvbm5lY3RlZCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdGhlIGNvbm5lY3Rpb24gd2FzIHJlZnVzZWQsIHNvIHJlamVjdCB0aGUgY29ubmVjdCBwcm9taXNlXG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBkaXNjb25uZWN0ICgpIHtcbiAgICBpZiAoIXRoaXMuaXNDb25uZWN0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsb2cuZGVidWcoJ0Rpc2Nvbm5lY3RpbmcgZnJvbSByZW1vdGUgZGVidWdnZXInKTtcbiAgICBhd2FpdCBzdXBlci5kaXNjb25uZWN0KCk7XG4gICAgdGhpcy5zZXJ2aWNlLmNsb3NlKCk7XG4gICAgdGhpcy5pc0Nvbm5lY3RlZCA9IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgc2VuZE1lc3NhZ2UgKGNtZCkge1xuICAgIGxldCBvblNvY2tldEVycm9yO1xuXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIC8vIGhhbmRsZSBzb2NrZXQgcHJvYmxlbXNcbiAgICAgIG9uU29ja2V0RXJyb3IgPSAoZXJyKSA9PiB7XG4gICAgICAgIGxvZy5lcnJvcihgU29ja2V0IGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuXG4gICAgICAgIC8vIHRoZSBjb25uZWN0aW9uIHdhcyByZWZ1c2VkLCBzbyByZWplY3QgdGhlIGNvbm5lY3QgcHJvbWlzZVxuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuc29ja2V0Lm9uKCdlcnJvcicsIG9uU29ja2V0RXJyb3IpO1xuICAgICAgdGhpcy5zZXJ2aWNlLnNlbmRNZXNzYWdlKGNtZCk7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfSlcbiAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAvLyByZW1vdmUgdGhpcyBsaXN0ZW5lciwgc28gd2UgZG9uJ3QgZXhoYXVzdCB0aGUgc3lzdGVtXG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLnNvY2tldC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvblNvY2tldEVycm9yKTtcbiAgICAgIH0gY2F0Y2ggKGlnbikge31cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHJlY2VpdmUgKGRhdGEpIHtcbiAgICBpZiAoIXRoaXMuaXNDb25uZWN0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBbJ1dJUk1lc3NhZ2VEYXRhS2V5JywgJ1dJUkRlc3RpbmF0aW9uS2V5JywgJ1dJUlNvY2tldERhdGFLZXknXSkge1xuICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKGRhdGFba2V5XSkpIHtcbiAgICAgICAgZGF0YVtrZXldID0gZGF0YVtrZXldLnRvU3RyaW5nKCd1dGY4Jyk7XG4gICAgICB9XG4gICAgfVxuICAgIGF3YWl0IHRoaXMubWVzc2FnZUhhbmRsZXIuaGFuZGxlTWVzc2FnZShkYXRhKTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLFNBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLElBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLFVBQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFLLGdCQUFBLEdBQUFMLE9BQUE7QUFHZSxNQUFNTSxrQkFBa0IsU0FBU0Msa0JBQVMsQ0FBQztFQUN4REMsV0FBV0EsQ0FBRUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFO0lBQ3RCLEtBQUssQ0FBQ0MsTUFBTSxDQUFDQyxNQUFNLENBQUM7TUFDbEJDLG9CQUFvQixFQUFFO0lBQ3hCLENBQUMsRUFBRUgsSUFBSSxDQUFDLENBQUM7SUFFVCxNQUFNO01BQ0pJLFVBQVU7TUFDVkMsSUFBSSxHQUFHLEtBQUs7TUFDWkMsSUFBSTtNQUNKQztJQUNGLENBQUMsR0FBR1AsSUFBSTtJQUdSLElBQUksQ0FBQ0ssSUFBSSxHQUFHQSxJQUFJO0lBQ2hCLElBQUksQ0FBQ0MsSUFBSSxHQUFHQSxJQUFJO0lBQ2hCLElBQUksQ0FBQ0MsWUFBWSxHQUFHQSxZQUFZO0lBRWhDLElBQUksQ0FBQ0MsTUFBTSxHQUFHLElBQUk7SUFDbEIsSUFBSSxDQUFDSixVQUFVLEdBQUdBLFVBQVU7RUFDOUI7RUFFQSxNQUFNSyxPQUFPQSxDQUFBLEVBQUk7SUFFZixJQUFJLElBQUksQ0FBQ0wsVUFBVSxFQUFFO01BQ25CLElBQUksSUFBSSxDQUFDRyxZQUFZ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
134
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9nZ2VyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfbG9kYXNoIiwiX2JsdWViaXJkIiwiX25ldCIsIl9ycGNDbGllbnQiLCJfYXBwaXVtSW9zRGV2aWNlIiwiUnBjQ2xpZW50U2ltdWxhdG9yIiwiUnBjQ2xpZW50IiwiY29uc3RydWN0b3IiLCJvcHRzIiwiT2JqZWN0IiwiYXNzaWduIiwic2hvdWxkQ2hlY2tGb3JUYXJnZXQiLCJzb2NrZXRQYXRoIiwiaG9zdCIsInBvcnQiLCJtZXNzYWdlUHJveHkiLCJzb2NrZXQiLCJjb25uZWN0IiwibG9nIiwiZGVidWciLCJuZXQiLCJvbmNlIiwid3JpdGUiLCJKU09OIiwic3RyaW5naWZ5IiwiU29ja2V0IiwidHlwZSIsInNldE5vRGVsYXkiLCJzZXRLZWVwQWxpdmUiLCJvbiIsImlzQ29ubmVjdGVkIiwic2VydmljZSIsInNlcnZpY2VzIiwic3RhcnRXZWJJbnNwZWN0b3JTZXJ2aWNlIiwidWRpZCIsImlzU2ltdWxhdG9yIiwib3NWZXJzaW9uIiwicGxhdGZvcm1WZXJzaW9uIiwidmVyYm9zZSIsImxvZ0FsbENvbW11bmljYXRpb24iLCJ2ZXJib3NlSGV4RHVtcCIsImxvZ0FsbENvbW11bmljYXRpb25IZXhEdW1wIiwibWF4RnJhbWVMZW5ndGgiLCJ3ZWJJbnNwZWN0b3JNYXhGcmFtZUxlbmd0aCIsImxpc3Rlbk1lc3NhZ2UiLCJyZWNlaXZlIiwiYmluZCIsIkIiLCJyZXNvbHZlIiwicmVqZWN0IiwiZXJyIiwiZXJyb3IiLCJtZXNzYWdlIiwiZGlzY29ubmVjdCIsImNsb3NlIiwic2VuZE1lc3NhZ2UiLCJjbWQiLCJvblNvY2tldEVycm9yIiwiZmluYWxseSIsInJlbW92ZUxpc3RlbmVyIiwiaWduIiwiZGF0YSIsImtleSIsIl8iLCJpc1VuZGVmaW5lZCIsInRvU3RyaW5nIiwibWVzc2FnZUhhbmRsZXIiLCJoYW5kbGVNZXNzYWdlIiwiZXhwb3J0cyIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvcnBjL3JwYy1jbGllbnQtc2ltdWxhdG9yLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgbmV0IGZyb20gJ25ldCc7XG5pbXBvcnQgUnBjQ2xpZW50IGZyb20gJy4vcnBjLWNsaWVudCc7XG5pbXBvcnQgeyBzZXJ2aWNlcyB9IGZyb20gJ2FwcGl1bS1pb3MtZGV2aWNlJztcblxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBScGNDbGllbnRTaW11bGF0b3IgZXh0ZW5kcyBScGNDbGllbnQge1xuICBjb25zdHJ1Y3RvciAob3B0cyA9IHt9KSB7XG4gICAgc3VwZXIoT2JqZWN0LmFzc2lnbih7XG4gICAgICBzaG91bGRDaGVja0ZvclRhcmdldDogZmFsc2UsXG4gICAgfSwgb3B0cykpO1xuXG4gICAgY29uc3Qge1xuICAgICAgc29ja2V0UGF0aCxcbiAgICAgIGhvc3QgPSAnOjoxJyxcbiAgICAgIHBvcnQsXG4gICAgICBtZXNzYWdlUHJveHksXG4gICAgfSA9IG9wdHM7XG5cbiAgICAvLyBob3N0L3BvcnQgY29uZmlnIGZvciBUQ1AgY29tbXVuaWNhdGlvbiwgc29ja2V0UGF0aCBmb3IgdW5peCBkb21haW4gc29ja2V0c1xuICAgIHRoaXMuaG9zdCA9IGhvc3Q7XG4gICAgdGhpcy5wb3J0ID0gcG9ydDtcbiAgICB0aGlzLm1lc3NhZ2VQcm94eSA9IG1lc3NhZ2VQcm94eTtcblxuICAgIHRoaXMuc29ja2V0ID0gbnVsbDtcbiAgICB0aGlzLnNvY2tldFBhdGggPSBzb2NrZXRQYXRoO1xuICB9XG5cbiAgYXN5bmMgY29ubmVjdCAoKSB7XG4gICAgLy8gY3JlYXRlIHNvY2tldCBhbmQgaGFuZGxlIGl0cyBtZXNzYWdlc1xuICAgIGlmICh0aGlzLnNvY2tldFBhdGgpIHtcbiAgICAgIGlmICh0aGlzLm1lc3NhZ2VQcm94eSkge1xuICAgICAgICAvLyB1bml4IGRvbWFpbiBzb2NrZXQgdmlhIHByb3h5XG4gICAgICAgIGxvZy5kZWJ1ZyhgQ29ubmVjdGluZyB0byByZW1vdGUgZGVidWdnZXIgdmlhIHByb3h5IHRocm91Z2ggdW5peCBkb21haW4gc29ja2V0OiAnJHt0aGlzLm1lc3NhZ2VQcm94eX0nYCk7XG4gICAgICAgIHRoaXMuc29ja2V0ID0gbmV0LmNvbm5lY3QodGhpcy5tZXNzYWdlUHJveHkpO1xuXG4gICAgICAgIC8vIEZvcndhcmQgdGhlIGFjdHVhbCBzb2NrZXRQYXRoIHRvIHRoZSBwcm94eVxuICAgICAgICB0aGlzLnNvY2tldC5vbmNlKCdjb25uZWN0JywgKCkgPT4ge1xuICAgICAgICAgIGxvZy5kZWJ1ZyhgRm9yd2FyZGluZyB0aGUgYWN0dWFsIHdlYiBpbnNwZWN0b3Igc29ja2V0IHRvIHRoZSBwcm94eTogJyR7dGhpcy5zb2NrZXRQYXRofSdgKTtcbiAgICAgICAgICB0aGlzLnNvY2tldC53cml0ZShKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBzb2NrZXRQYXRoOiB0aGlzLnNvY2tldFBhdGhcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB1bml4IGRvbWFpbiBzb2NrZXRcbiAgICAgICAgbG9nLmRlYnVnKGBDb25uZWN0aW5nIHRvIHJlbW90ZSBkZWJ1Z2dlciB0aHJvdWdoIHVuaXggZG9tYWluIHNvY2tldDogJyR7dGhpcy5zb2NrZXRQYXRofSdgKTtcbiAgICAgICAgdGhpcy5zb2NrZXQgPSBuZXQuY29ubmVjdCh0aGlzLnNvY2tldFBhdGgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5tZXNzYWdlUHJveHkpIHtcbiAgICAgICAgLy8gY29ubmVjdCB0byB0aGUgcHJveHkgaW5zdGVhZCBvZiB0aGUgcmVtb3RlIGRlYnVnZ2VyIGRpcmVjdGx5XG4gICAgICAgIHRoaXMucG9ydCA9IHRoaXMubWVzc2FnZVByb3h5O1xuICAgICAgfVxuXG4gICAgICAvLyB0Y3Agc29ja2V0XG4gICAgICBsb2cuZGVidWcoYENvbm5lY3RpbmcgdG8gcmVtb3RlIGRlYnVnZ2VyICR7dGhpcy5tZXNzYWdlUHJveHkgPyAndmlhIHByb3h5ICcgOiAnJ310aHJvdWdoIFRDUDogJHt0aGlzLmhvc3R9OiR7dGhpcy5wb3J0fWApO1xuICAgICAgdGhpcy5zb2NrZXQgPSBuZXcgbmV0LlNvY2tldCh7dHlwZTogJ3RjcDYnfSk7XG4gICAgICB0aGlzLnNvY2tldC5jb25uZWN0KHRoaXMucG9ydCwgdGhpcy5ob3N0KTtcbiAgICB9XG5cbiAgICB0aGlzLnNvY2tldC5zZXROb0RlbGF5KHRydWUpO1xuICAgIHRoaXMuc29ja2V0LnNldEtlZXBBbGl2ZSh0cnVlKTtcbiAgICB0aGlzLnNvY2tldC5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc0Nvbm5lY3RlZCkge1xuICAgICAgICBsb2cuZGVidWcoJ0RlYnVnZ2VyIHNvY2tldCBkaXNjb25uZWN0ZWQnKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaXNDb25uZWN0ZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuc29ja2V0ID0gbnVsbDtcbiAgICB9KTtcbiAgICB0aGlzLnNvY2tldC5vbignZW5kJywgKCkgPT4ge1xuICAgICAgdGhpcy5pc0Nvbm5lY3RlZCA9IGZhbHNlO1xuICAgIH0pO1xuICAgIHRoaXMuc2VydmljZSA9IGF3YWl0IHNlcnZpY2VzLnN0YXJ0V2ViSW5zcGVjdG9yU2VydmljZSh0aGlzLnVkaWQsIHtcbiAgICAgIHNvY2tldDogdGhpcy5zb2NrZXQsXG4gICAgICBpc1NpbXVsYXRvcjogdHJ1ZSxcbiAgICAgIG9zVmVyc2lvbjogdGhpcy5wbGF0Zm9ybVZlcnNpb24sXG4gICAgICB2ZXJib3NlOiB0aGlzLmxvZ0FsbENvbW11bmljYXRpb24sXG4gICAgICB2ZXJib3NlSGV4RHVtcDogdGhpcy5sb2dBbGxDb21tdW5pY2F0aW9uSGV4RHVtcCxcbiAgICAgIG1heEZyYW1lTGVuZ3RoOiB0aGlzLndlYkluc3BlY3Rvck1heEZyYW1lTGVuZ3RoLFxuICAgIH0pO1xuICAgIHRoaXMuc2VydmljZS5saXN0ZW5NZXNzYWdlKHRoaXMucmVjZWl2ZS5iaW5kKHRoaXMpKTtcblxuICAgIC8vIGNvbm5lY3QgdGhlIHNvY2tldFxuICAgIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAvLyBvbmx5IHJlc29sdmUgdGhpcyBmdW5jdGlvbiB3aGVuIHdlIGFyZSBhY3R1YWxseSBjb25uZWN0ZWRcbiAgICAgIHRoaXMuc29ja2V0Lm9uKCdjb25uZWN0JywgKCkgPT4ge1xuICAgICAgICBsb2cuZGVidWcoYERlYnVnZ2VyIHNvY2tldCBjb25uZWN0ZWRgKTtcbiAgICAgICAgdGhpcy5pc0Nvbm5lY3RlZCA9IHRydWU7XG5cbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnNvY2tldC5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmlzQ29ubmVjdGVkKSB7XG4gICAgICAgICAgbG9nLmVycm9yKGBTb2NrZXQgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgdGhpcy5pc0Nvbm5lY3RlZCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdGhlIGNvbm5lY3Rpb24gd2FzIHJlZnVzZWQsIHNvIHJlamVjdCB0aGUgY29ubmVjdCBwcm9taXNlXG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBkaXNjb25uZWN0ICgpIHtcbiAgICBpZiAoIXRoaXMuaXNDb25uZWN0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsb2cuZGVidWcoJ0Rpc2Nvbm5lY3RpbmcgZnJvbSByZW1vdGUgZGVidWdnZXInKTtcbiAgICBhd2FpdCBzdXBlci5kaXNjb25uZWN0KCk7XG4gICAgdGhpcy5zZXJ2aWNlLmNsb3NlKCk7XG4gICAgdGhpcy5pc0Nvbm5lY3RlZCA9IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgc2VuZE1lc3NhZ2UgKGNtZCkge1xuICAgIGxldCBvblNvY2tldEVycm9yO1xuXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIC8vIGhhbmRsZSBzb2NrZXQgcHJvYmxlbXNcbiAgICAgIG9uU29ja2V0RXJyb3IgPSAoZXJyKSA9PiB7XG4gICAgICAgIGxvZy5lcnJvcihgU29ja2V0IGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuXG4gICAgICAgIC8vIHRoZSBjb25uZWN0aW9uIHdhcyByZWZ1c2VkLCBzbyByZWplY3QgdGhlIGNvbm5lY3QgcHJvbWlzZVxuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuc29ja2V0Lm9uKCdlcnJvcicsIG9uU29ja2V0RXJyb3IpO1xuICAgICAgdGhpcy5zZXJ2aWNlLnNlbmRNZXNzYWdlKGNtZCk7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfSlcbiAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAvLyByZW1vdmUgdGhpcyBsaXN0ZW5lciwgc28gd2UgZG9uJ3QgZXhoYXVzdCB0aGUgc3lzdGVtXG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLnNvY2tldC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvblNvY2tldEVycm9yKTtcbiAgICAgIH0gY2F0Y2ggKGlnbikge31cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHJlY2VpdmUgKGRhdGEpIHtcbiAgICBpZiAoIXRoaXMuaXNDb25uZWN0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBbJ1dJUk1lc3NhZ2VEYXRhS2V5JywgJ1dJUkRlc3RpbmF0aW9uS2V5JywgJ1dJUlNvY2tldERhdGFLZXknXSkge1xuICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKGRhdGFba2V5XSkpIHtcbiAgICAgICAgZGF0YVtrZXldID0gZGF0YVtrZXldLnRvU3RyaW5nKCd1dGY4Jyk7XG4gICAgICB9XG4gICAgfVxuICAgIGF3YWl0IHRoaXMubWVzc2FnZUhhbmRsZXIuaGFuZGxlTWVzc2FnZShkYXRhKTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLFNBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLElBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLFVBQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFLLGdCQUFBLEdBQUFMLE9BQUE7QUFHZSxNQUFNTSxrQkFBa0IsU0FBU0Msa0JBQVMsQ0FBQztFQUN4REMsV0FBV0EsQ0FBRUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFO0lBQ3RCLEtBQUssQ0FBQ0MsTUFBTSxDQUFDQyxNQUFNLENBQUM7TUFDbEJDLG9CQUFvQixFQUFFO0lBQ3hCLENBQUMsRUFBRUgsSUFBSSxDQUFDLENBQUM7SUFFVCxNQUFNO01BQ0pJLFVBQVU7TUFDVkMsSUFBSSxHQUFHLEtBQUs7TUFDWkMsSUFBSTtNQUNKQztJQUNGLENBQUMsR0FBR1AsSUFBSTtJQUdSLElBQUksQ0FBQ0ssSUFBSSxHQUFHQSxJQUFJO0lBQ2hCLElBQUksQ0FBQ0MsSUFBSSxHQUFHQSxJQUFJO0lBQ2hCLElBQUksQ0FBQ0MsWUFBWSxHQUFHQSxZQUFZO0lBRWhDLElBQUksQ0FBQ0MsTUFBTSxHQUFHLElBQUk7SUFDbEIsSUFBSSxDQUFDSixVQUFVLEdBQUdBLFVBQVU7RUFDOUI7RUFFQSxNQUFNSyxPQUFPQSxDQUFBLEVBQUk7SUFFZixJQUFJLElBQUksQ0FBQ0wsVUFBVSxFQUFFO01BQ25CLElBQUksSUFBSSxDQUFDRyxZQUFZ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
@@ -1 +1 @@
1
- {"version":3,"file":"rpc-client-simulator.js","names":["_logger","_interopRequireDefault","require","_lodash","_bluebird","_net","_rpcClient","_appiumIosDevice","RpcClientSimulator","RpcClient","constructor","opts","Object","assign","shouldCheckForTarget","socketPath","host","port","messageProxy","socket","connect","log","debug","net","once","write","JSON","stringify","Socket","type","setNoDelay","setKeepAlive","on","isConnected","service","services","startWebInspectorService","udid","isSimulator","osVersion","platformVersion","verbose","logAllCommunication","verboseHexDump","logAllCommunicationHexDump","maxFrameLength","webInspectorMaxFrameLength","listenMessage","receive","bind","B","resolve","reject","err","error","message","disconnect","close","sendMessage","cmd","onSocketError","finally","removeListener","ign","data","key","_","isUndefined","toString","messageHandler","handleMessage","exports","default"],"sources":["../../../lib/rpc/rpc-client-simulator.js"],"sourcesContent":["import log from '../logger';\nimport _ from 'lodash';\nimport B from 'bluebird';\nimport net from 'net';\nimport RpcClient from './rpc-client';\nimport { services } from 'appium-ios-device';\n\n\nexport default class RpcClientSimulator extends RpcClient {\n constructor (opts = {}) {\n super(Object.assign({\n shouldCheckForTarget: false,\n }, opts));\n\n const {\n socketPath,\n host = '::1',\n port,\n messageProxy,\n } = opts;\n\n // host/port config for TCP communication, socketPath for unix domain sockets\n this.host = host;\n this.port = port;\n this.messageProxy = messageProxy;\n\n this.socket = null;\n this.socketPath = socketPath;\n }\n\n async connect () {\n // create socket and handle its messages\n if (this.socketPath) {\n if (this.messageProxy) {\n // unix domain socket via proxy\n log.debug(`Connecting to remote debugger via proxy through unix domain socket: '${this.messageProxy}'`);\n this.socket = net.connect(this.messageProxy);\n\n // Forward the actual socketPath to the proxy\n this.socket.once('connect', () => {\n log.debug(`Forwarding the actual web inspector socket to the proxy: '${this.socketPath}'`);\n this.socket.write(JSON.stringify({\n socketPath: this.socketPath\n }));\n });\n\n } else {\n // unix domain socket\n log.debug(`Connecting to remote debugger through unix domain socket: '${this.socketPath}'`);\n this.socket = net.connect(this.socketPath);\n }\n } else {\n if (this.messageProxy) {\n // connect to the proxy instead of the remote debugger directly\n this.port = this.messageProxy;\n }\n\n // tcp socket\n log.debug(`Connecting to remote debugger ${this.messageProxy ? 'via proxy ' : ''}through TCP: ${this.host}:${this.port}`);\n this.socket = new net.Socket({type: 'tcp6'});\n this.socket.connect(this.port, this.host);\n }\n\n this.socket.setNoDelay(true);\n this.socket.setKeepAlive(true);\n this.socket.on('close', () => {\n if (this.isConnected) {\n log.debug('Debugger socket disconnected');\n }\n this.isConnected = false;\n this.socket = null;\n });\n this.socket.on('end', () => {\n this.isConnected = false;\n });\n this.service = await services.startWebInspectorService(this.udid, {\n socket: this.socket,\n isSimulator: true,\n osVersion: this.platformVersion,\n verbose: this.logAllCommunication,\n verboseHexDump: this.logAllCommunicationHexDump,\n maxFrameLength: this.webInspectorMaxFrameLength,\n });\n this.service.listenMessage(this.receive.bind(this));\n\n // connect the socket\n return await new B((resolve, reject) => {\n // only resolve this function when we are actually connected\n this.socket.on('connect', () => {\n log.debug(`Debugger socket connected`);\n this.isConnected = true;\n\n resolve();\n });\n this.socket.on('error', (err) => {\n if (this.isConnected) {\n log.error(`Socket error: ${err.message}`);\n this.isConnected = false;\n }\n\n // the connection was refused, so reject the connect promise\n reject(err);\n });\n });\n }\n\n async disconnect () {\n if (!this.isConnected) {\n return;\n }\n\n log.debug('Disconnecting from remote debugger');\n await super.disconnect();\n this.service.close();\n this.isConnected = false;\n }\n\n async sendMessage (cmd) {\n let onSocketError;\n\n return await new B((resolve, reject) => {\n // handle socket problems\n onSocketError = (err) => {\n log.error(`Socket error: ${err.message}`);\n\n // the connection was refused, so reject the connect promise\n reject(err);\n };\n\n this.socket.on('error', onSocketError);\n this.service.sendMessage(cmd);\n resolve();\n })\n .finally(() => {\n // remove this listener, so we don't exhaust the system\n try {\n this.socket.removeListener('error', onSocketError);\n } catch (ign) {}\n });\n }\n\n async receive (data) {\n if (!this.isConnected) {\n return;\n }\n\n if (!data) {\n return;\n }\n\n for (const key of ['WIRMessageDataKey', 'WIRDestinationKey', 'WIRSocketDataKey']) {\n if (!_.isUndefined(data[key])) {\n data[key] = data[key].toString('utf8');\n }\n }\n await this.messageHandler.handleMessage(data);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"rpc-client-simulator.js","names":["_logger","_interopRequireDefault","require","_lodash","_bluebird","_net","_rpcClient","_appiumIosDevice","RpcClientSimulator","RpcClient","constructor","opts","Object","assign","shouldCheckForTarget","socketPath","host","port","messageProxy","socket","connect","log","debug","net","once","write","JSON","stringify","Socket","type","setNoDelay","setKeepAlive","on","isConnected","service","services","startWebInspectorService","udid","isSimulator","osVersion","platformVersion","verbose","logAllCommunication","verboseHexDump","logAllCommunicationHexDump","maxFrameLength","webInspectorMaxFrameLength","listenMessage","receive","bind","B","resolve","reject","err","error","message","disconnect","close","sendMessage","cmd","onSocketError","finally","removeListener","ign","data","key","_","isUndefined","toString","messageHandler","handleMessage","exports","default"],"sources":["../../../lib/rpc/rpc-client-simulator.js"],"sourcesContent":["import log from '../logger';\nimport _ from 'lodash';\nimport B from 'bluebird';\nimport net from 'net';\nimport RpcClient from './rpc-client';\nimport { services } from 'appium-ios-device';\n\n\nexport default class RpcClientSimulator extends RpcClient {\n constructor (opts = {}) {\n super(Object.assign({\n shouldCheckForTarget: false,\n }, opts));\n\n const {\n socketPath,\n host = '::1',\n port,\n messageProxy,\n } = opts;\n\n // host/port config for TCP communication, socketPath for unix domain sockets\n this.host = host;\n this.port = port;\n this.messageProxy = messageProxy;\n\n this.socket = null;\n this.socketPath = socketPath;\n }\n\n async connect () {\n // create socket and handle its messages\n if (this.socketPath) {\n if (this.messageProxy) {\n // unix domain socket via proxy\n log.debug(`Connecting to remote debugger via proxy through unix domain socket: '${this.messageProxy}'`);\n this.socket = net.connect(this.messageProxy);\n\n // Forward the actual socketPath to the proxy\n this.socket.once('connect', () => {\n log.debug(`Forwarding the actual web inspector socket to the proxy: '${this.socketPath}'`);\n this.socket.write(JSON.stringify({\n socketPath: this.socketPath\n }));\n });\n\n } else {\n // unix domain socket\n log.debug(`Connecting to remote debugger through unix domain socket: '${this.socketPath}'`);\n this.socket = net.connect(this.socketPath);\n }\n } else {\n if (this.messageProxy) {\n // connect to the proxy instead of the remote debugger directly\n this.port = this.messageProxy;\n }\n\n // tcp socket\n log.debug(`Connecting to remote debugger ${this.messageProxy ? 'via proxy ' : ''}through TCP: ${this.host}:${this.port}`);\n this.socket = new net.Socket({type: 'tcp6'});\n this.socket.connect(this.port, this.host);\n }\n\n this.socket.setNoDelay(true);\n this.socket.setKeepAlive(true);\n this.socket.on('close', () => {\n if (this.isConnected) {\n log.debug('Debugger socket disconnected');\n }\n this.isConnected = false;\n this.socket = null;\n });\n this.socket.on('end', () => {\n this.isConnected = false;\n });\n this.service = await services.startWebInspectorService(this.udid, {\n socket: this.socket,\n isSimulator: true,\n osVersion: this.platformVersion,\n verbose: this.logAllCommunication,\n verboseHexDump: this.logAllCommunicationHexDump,\n maxFrameLength: this.webInspectorMaxFrameLength,\n });\n this.service.listenMessage(this.receive.bind(this));\n\n // connect the socket\n return await new B((resolve, reject) => {\n // only resolve this function when we are actually connected\n this.socket.on('connect', () => {\n log.debug(`Debugger socket connected`);\n this.isConnected = true;\n\n resolve();\n });\n this.socket.on('error', (err) => {\n if (this.isConnected) {\n log.error(`Socket error: ${err.message}`);\n this.isConnected = false;\n }\n\n // the connection was refused, so reject the connect promise\n reject(err);\n });\n });\n }\n\n async disconnect () {\n if (!this.isConnected) {\n return;\n }\n\n log.debug('Disconnecting from remote debugger');\n await super.disconnect();\n this.service.close();\n this.isConnected = false;\n }\n\n async sendMessage (cmd) {\n let onSocketError;\n\n return await new B((resolve, reject) => {\n // handle socket problems\n onSocketError = (err) => {\n log.error(`Socket error: ${err.message}`);\n\n // the connection was refused, so reject the connect promise\n reject(err);\n };\n\n this.socket.on('error', onSocketError);\n this.service.sendMessage(cmd);\n resolve();\n })\n .finally(() => {\n // remove this listener, so we don't exhaust the system\n try {\n this.socket.removeListener('error', onSocketError);\n } catch (ign) {}\n });\n }\n\n async receive (data) {\n if (!this.isConnected) {\n return;\n }\n\n if (!data) {\n return;\n }\n\n for (const key of ['WIRMessageDataKey', 'WIRDestinationKey', 'WIRSocketDataKey']) {\n if (!_.isUndefined(data[key])) {\n data[key] = data[key].toString('utf8');\n }\n }\n await this.messageHandler.handleMessage(data);\n }\n}\n"],"mappings":"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"}
@@ -450,4 +450,4 @@ class RpcClient {
450
450
  }
451
451
  }
452
452
  exports.default = RpcClient;
453
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVtb3RlTWVzc2FnZXMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9hc3luY2JveCIsIl9sb2dnZXIiLCJfbG9kYXNoIiwiX2JsdWViaXJkIiwiX3JwY01lc3NhZ2VIYW5kbGVyIiwiX3N1cHBvcnQiLCJEQVRBX0xPR19MRU5HVEgiLCJsZW5ndGgiLCJXQUlUX0ZPUl9UQVJHRVRfVElNRU9VVCIsIldBSVRfRk9SX1RBUkdFVF9JTlRFUlZBTCIsIk1JTl9QTEFURk9STV9GT1JfVEFSR0VUX0JBU0VEIiwiTUlOX1BMQVRGT1JNX05PX1RBUkdFVF9FWElTVFMiLCJpc1RhcmdldEJhc2VkIiwiaXNTYWZhcmkiLCJwbGF0Zm9ybVZlcnNpb24iLCJpc0hpZ2hWZXJzaW9uIiwidXRpbCIsImNvbXBhcmVWZXJzaW9ucyIsImxvZyIsImRlYnVnIiwiUnBjQ2xpZW50IiwiY29uc3RydWN0b3IiLCJvcHRzIiwiX3RhcmdldHMiLCJfc2hvdWxkQ2hlY2tGb3JUYXJnZXQiLCJzaG91bGRDaGVja0ZvclRhcmdldCIsImJ1bmRsZUlkIiwibG9nQWxsQ29tbXVuaWNhdGlvbiIsImxvZ0FsbENvbW11bmljYXRpb25IZXhEdW1wIiwid2ViSW5zcGVjdG9yTWF4RnJhbWVMZW5ndGgiLCJzb2NrZXRDaHVua1NpemUiLCJmdWxsUGFnZUluaXRpYWxpemF0aW9uIiwiaXNDb25uZWN0ZWQiLCJjb25uSWQiLCJ1dWlkVjQiLCJzZW5kZXJJZCIsIm1zZ0lkIiwiX2NvbnRleHRzIiwiY29udGV4dHMiLCJuZWVkc1RhcmdldCIsInRhcmdldHMiLCJjb25uZWN0ZWQiLCJvbiIsImV2ZW50IiwibGlzdGVuZXIiLCJtZXNzYWdlSGFuZGxlciIsIm9uY2UiLCJvZmYiLCJ3YXJuIiwiX2lzVGFyZ2V0QmFzZWQiLCJyZW1vdGVNZXNzYWdlcyIsIlJlbW90ZU1lc3NhZ2VzIiwiUnBjTWVzc2FnZUhhbmRsZXIiLCJhZGRUYXJnZXQiLCJiaW5kIiwidXBkYXRlVGFyZ2V0IiwicmVtb3ZlVGFyZ2V0Iiwib25FeGVjdXRpb25Db250ZXh0Q3JlYXRlZCIsIm9uR2FyYmFnZUNvbGxlY3RlZCIsIndhaXRGb3JUYXJnZXQiLCJhcHBJZEtleSIsInBhZ2VJZEtleSIsImZvcmNlIiwiZ2V0VGFyZ2V0Iiwid2FpdEZvckNvbmRpdGlvbiIsIl8iLCJpc0VtcHR5Iiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsImVycm9yIiwiZXJyIiwibWVzc2FnZSIsImluY2x1ZGVzIiwiRXJyb3IiLCJzZW5kIiwiY29tbWFuZCIsIndhaXRGb3JSZXNwb25zZSIsInRpbWVyIiwidGltaW5nIiwiVGltZXIiLCJzdGFydCIsInNlbmRUb0RldmljZSIsInRvTG93ZXJDYXNlIiwiaW5mbyIsImdldER1cmF0aW9uIiwiYXNNaWxsaVNlY29uZHMiLCJ0b0ZpeGVkIiwiQiIsInJlc29sdmUiLCJyZWplY3QiLCJfY21kJF9fYXJndW1lbnQiLCJfY21kJF9fYXJndW1lbnQyIiwid3JhcHBlck1zZ0lkIiwidG9TdHJpbmciLCJ0YXJnZXRJZCIsImZ1bGxPcHRzIiwiZGVmYXVsdHMiLCJpZCIsImNtZCIsImdldFJlbW90ZUNvbW1hbmQiLCJfX2FyZ3VtZW50IiwiV0lSU29ja2V0RGF0YUtleSIsImlzTmlsIiwiQnVmZmVyIiwiZnJvbSIsIkpTT04iLCJzdHJpbmdpZnkiLCJtZXNzYWdlSGFuZGxlZCIsInRydW5jYXRlIiwibGlzdGVuZXJzIiwiX19zZWxlY3RvciIsInByZXBlbmRPbmNlTGlzdGVuZXIiLCJhcmdzIiwidmFsdWUiLCJjb2RlIiwibXNnIiwicmVzIiwic2VuZE1lc3NhZ2UiLCJjb25uZWN0IiwiZGlzY29ubmVjdCIsInJlbW92ZUFsbExpc3RlbmVycyIsInJlY2VpdmUiLCJhcHAiLCJ0YXJnZXRJbmZvIiwicGVuZGluZ1RhcmdldE5vdGlmaWNhdGlvbiIsImlzUHJvdmlzaW9uYWwiLCJoYXMiLCJvbGRUYXJnZXRJZCIsIm5ld1RhcmdldElkIiwicHJvdmlzaW9uYWwiLCJfdGhpcyR0YXJnZXRzJGFwcCIsIl90aGlzJHRhcmdldHMkYXBwJHBybyIsInBhZ2UiLCJ0b1BhaXJzIiwic2VsZWN0UGFnZSIsInNlbmRPcHRzIiwiZW5hYmxlZCIsIk9iamVjdCIsImFzc2lnbiIsImluaXRpYWxpemVQYWdlRnVsbCIsImluaXRpYWxpemVQYWdlIiwiZGlzYWJsZWQiLCJpbnN0cnVtZW50cyIsImFjdGl2ZSIsInN0YXRlIiwiZGVwdGgiLCJzaG91bGRQYXVzZSIsImxvZ2dpbmdDaGFubmVscyIsInNvdXJjZSIsImNoYW5uZWxzIiwibWFwIiwiZW50cnkiLCJsZXZlbCIsInNlbGVjdEFwcCIsIm9uQXBwQ2hhbmdlIiwiZGljdCIsIm9sZEFwcElkS2V5IiwiV0lSSG9zdEFwcGxpY2F0aW9uSWRlbnRpZmllcktleSIsImNvcnJlY3RBcHBJZEtleSIsIldJUkFwcGxpY2F0aW9uSWRlbnRpZmllcktleSIsInBhZ2VEaWN0IiwiY29ubmVjdGVkQXBwSWRLZXkiLCJjb250ZXh0IiwicHVzaCIsIm9uU2NyaXB0UGFyc2VkIiwic2NyaXB0SW5mbyIsImV4cG9ydHMiLCJkZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3JwYy9ycGMtY2xpZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZW1vdGVNZXNzYWdlcyBmcm9tICcuL3JlbW90ZS1tZXNzYWdlcyc7XG5pbXBvcnQgeyB3YWl0Rm9yQ29uZGl0aW9uIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBScGNNZXNzYWdlSGFuZGxlciBmcm9tICcuL3JwYy1tZXNzYWdlLWhhbmRsZXInO1xuaW1wb3J0IHsgdXRpbCwgdGltaW5nIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcblxuXG5jb25zdCBEQVRBX0xPR19MRU5HVEggPSB7bGVuZ3RoOiAyMDB9O1xuXG5jb25zdCBXQUlUX0ZPUl9UQVJHRVRfVElNRU9VVCA9IDEwMDAwO1xuY29uc3QgV0FJVF9GT1JfVEFSR0VUX0lOVEVSVkFMID0gMTAwMDtcblxuY29uc3QgTUlOX1BMQVRGT1JNX0ZPUl9UQVJHRVRfQkFTRUQgPSAnMTIuMic7XG5cbi8vIGBUYXJnZXQuZXhpc3RzYCBwcm90b2NvbCBtZXRob2Qgd2FzIHJlbW92ZWQgZnJvbSBXZWJLaXQgaW4gMTMuNFxuY29uc3QgTUlOX1BMQVRGT1JNX05PX1RBUkdFVF9FWElTVFMgPSAnMTMuNCc7XG5cbmZ1bmN0aW9uIGlzVGFyZ2V0QmFzZWQgKGlzU2FmYXJpLCBwbGF0Zm9ybVZlcnNpb24pIHtcbiAgLy8gT24gaU9TIDEyLjIgdGhlIG1lc3NhZ2VzIGdldCBzZW50IHRocm91Z2ggdGhlIFRhcmdldCBkb21haW5cbiAgLy8gT24gaU9TIDEzLjArLCBXS1dlYlZpZXcgYWxzbyBuZWVkcyB0byBmb2xsb3cgdGhlIFRhcmdldCBkb21haW4sXG4gIC8vIHNvIGhlcmUgb25seSBjaGVjayB0aGUgdGFyZ2V0IE9TIHZlcnNpb24gYXMgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLlxuICBjb25zdCBpc0hpZ2hWZXJzaW9uID0gdXRpbC5jb21wYXJlVmVyc2lvbnMocGxhdGZvcm1WZXJzaW9uLCAnPj0nLCBNSU5fUExBVEZPUk1fRk9SX1RBUkdFVF9CQVNFRCk7XG4gIGxvZy5kZWJ1ZyhgQ2hlY2tpbmcgd2hpY2ggY29tbXVuaWNhdGlvbiBzdHlsZSB0byB1c2UgKCR7aXNTYWZhcmkgPyAnJyA6ICdub24tJ31TYWZhcmkgb24gcGxhdGZvcm0gdmVyc2lvbiAnJHtwbGF0Zm9ybVZlcnNpb259JylgKTtcbiAgbG9nLmRlYnVnKGBQbGF0Zm9ybSB2ZXJzaW9uIGVxdWFsIG9yIGhpZ2hlciB0aGFuICcke01JTl9QTEFURk9STV9GT1JfVEFSR0VUX0JBU0VEfSc6ICR7aXNIaWdoVmVyc2lvbn1gKTtcbiAgcmV0dXJuIGlzSGlnaFZlcnNpb247XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJwY0NsaWVudCB7XG4gIGNvbnN0cnVjdG9yIChvcHRzID0ge30pIHtcbiAgICB0aGlzLl90YXJnZXRzID0gW107XG4gICAgdGhpcy5fc2hvdWxkQ2hlY2tGb3JUYXJnZXQgPSAhIW9wdHMuc2hvdWxkQ2hlY2tGb3JUYXJnZXQ7XG5cbiAgICBjb25zdCB7XG4gICAgICBidW5kbGVJZCxcbiAgICAgIHBsYXRmb3JtVmVyc2lvbiA9IHt9LFxuICAgICAgaXNTYWZhcmkgPSB0cnVlLFxuICAgICAgbG9nQWxsQ29tbXVuaWNhdGlvbiA9IGZhbHNlLFxuICAgICAgbG9nQWxsQ29tbXVuaWNhdGlvbkhleER1bXAgPSBmYWxzZSxcbiAgICAgIHdlYkluc3BlY3Rvck1heEZyYW1lTGVuZ3RoLFxuICAgICAgc29ja2V0Q2h1bmtTaXplLFxuICAgICAgZnVsbFBhZ2VJbml0aWFsaXphdGlvbiA9IGZhbHNlLFxuICAgIH0gPSBvcHRzO1xuXG4gICAgdGhpcy5pc1NhZmFyaSA9IGlzU2FmYXJpO1xuXG4gICAgdGhpcy5pc0Nvbm5lY3RlZCA9IGZhbHNlO1xuICAgIHRoaXMuY29ubklkID0gdXRpbC51dWlkVjQoKTtcbiAgICB0aGlzLnNlbmRlcklkID0gdXRpbC51dWlkVjQoKTtcbiAgICB0aGlzLm1zZ0lkID0gMDtcblxuICAgIHRoaXMubG9nQWxsQ29tbXVuaWNhdGlvbiA9IGxvZ0FsbENvbW11bmljYXRpb247XG4gICAgdGhpcy5sb2dBbGxDb21tdW5pY2F0aW9uSGV4RHVtcCA9IGxvZ0FsbENvbW11bmljYXRpb25IZXhEdW1wO1xuICAgIHRoaXMuc29ja2V0Q2h1bmtTaXplID0gc29ja2V0Q2h1bmtTaXplO1xuICAgIHRoaXMud2ViSW5zcGVjdG9yTWF4RnJhbWVMZW5ndGggPSB3ZWJJbnNwZWN0b3JNYXhGcmFtZUxlbmd0aDtcblxuICAgIHRoaXMuZnVsbFBhZ2VJbml0aWFsaXphdGlvbiA9IGZ1bGxQYWdlSW5pdGlhbGl6YXRpb247XG5cbiAgICB0aGlzLmJ1bmRsZUlkID0gYnVuZGxlSWQ7XG4gICAgdGhpcy5wbGF0Zm9ybVZlcnNpb24gPSBwbGF0Zm9ybVZlcnNpb247XG5cbiAgICB0aGlzLl9jb250ZXh0cyA9IFtdO1xuICAgIHRoaXMuX3RhcmdldHMgPSB7fTtcblxuICAgIC8vIHN0YXJ0IHdpdGggYSBiZXN0IGd1ZXNzIGZvciB0aGUgcHJvdG9jb2xcbiAgICB0aGlzLmlzVGFyZ2V0QmFzZWQgPSBpc1RhcmdldEJhc2VkKGlzU2FmYXJpLCB0aGlzLnBsYXRmb3JtVmVyc2lvbik7XG4gIH1cblxuICBnZXQgY29udGV4dHMgKCkge1xuICAgIHJldHVybiB0aGlzLl9jb250ZXh0cztcbiAgfVxuXG4gIGdldCBuZWVkc1RhcmdldCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hvdWxkQ2hlY2tGb3JUYXJnZXQgJiYgdGhpcy5pc1RhcmdldEJhc2VkO1xuICB9XG5cbiAgZ2V0IHRhcmdldHMgKCkge1xuICAgIHJldHVybiB0aGlzLl90YXJnZXRzO1xuICB9XG5cbiAgZ2V0IHNob3VsZENoZWNrRm9yVGFyZ2V0ICgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2hvdWxkQ2hlY2tGb3JUYXJnZXQ7XG4gIH1cblxuICBzZXQgc2hvdWxkQ2hlY2tGb3JUYXJnZXQgKHNob3VsZENoZWNrRm9yVGFyZ2V0KSB7XG4gICAgdGhpcy5fc2hvdWxkQ2hlY2tGb3JUYXJnZXQgPSAhIXNob3VsZENoZWNrRm9yVGFyZ2V0O1xuICB9XG5cbiAgZ2V0IGlzQ29ubmVjdGVkICgpIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0ZWQ7XG4gIH1cblxuICBzZXQgaXNDb25uZWN0ZWQgKGNvbm5lY3RlZCkge1xuICAgIHRoaXMuY29ubmVjdGVkID0gISFjb25uZWN0ZWQ7XG4gIH1cblxuICBvbiAoZXZlbnQsIGxpc3RlbmVyKSB7XG4gICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbihldmVudCwgbGlzdGVuZXIpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgb25jZSAoZXZlbnQsIGxpc3RlbmVyKSB7XG4gICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbmNlKGV2ZW50LCBsaXN0ZW5lcik7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBvZmYgKGV2ZW50LCBsaXN0ZW5lcikge1xuICAgIHRoaXMubWVzc2FnZUhhbmRsZXIub2ZmKGV2ZW50LCBsaXN0ZW5lcik7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZXQgaXNUYXJnZXRCYXNlZCAoaXNUYXJnZXRCYXNlZCkge1xuICAgIGxvZy53YXJuKGBTZXR0aW5nIGNvbW11bmljYXRpb24gcHJvdG9jb2w6IHVzaW5nICR7aXNUYXJnZXRCYXNlZCA/ICdUYXJnZXQtYmFzZWQnIDogJ2Z1bGwgV2ViIEluc3BlY3RvciBwcm90b2NvbCd9IGNvbW11bmljYXRpb25gKTtcbiAgICB0aGlzLl9pc1RhcmdldEJhc2VkID0gaXNUYXJnZXRCYXNlZDtcblxuICAgIGlmICghdGhpcy5yZW1vdGVNZXNzYWdlcykge1xuICAgICAgdGhpcy5yZW1vdGVNZXNzYWdlcyA9IG5ldyBSZW1vdGVNZXNzYWdlcyhpc1RhcmdldEJhc2VkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZW1vdGVNZXNzYWdlcy5pc1RhcmdldEJhc2VkID0gaXNUYXJnZXRCYXNlZDtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubWVzc2FnZUhhbmRsZXIpIHtcbiAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIgPSBuZXcgUnBjTWVzc2FnZUhhbmRsZXIoaXNUYXJnZXRCYXNlZCk7XG5cbiAgICAgIC8vIGFkZCBoYW5kbGVycyBmb3IgaW50ZXJuYWwgZXZlbnRzXG4gICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyLm9uKCdUYXJnZXQudGFyZ2V0Q3JlYXRlZCcsIHRoaXMuYWRkVGFyZ2V0LmJpbmQodGhpcykpO1xuICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbignVGFyZ2V0LmRpZENvbW1pdFByb3Zpc2lvbmFsVGFyZ2V0JywgdGhpcy51cGRhdGVUYXJnZXQuYmluZCh0aGlzKSk7XG4gICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyLm9uKCdUYXJnZXQudGFyZ2V0RGVzdHJveWVkJywgdGhpcy5yZW1vdmVUYXJnZXQuYmluZCh0aGlzKSk7XG4gICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyLm9uKCdSdW50aW1lLmV4ZWN1dGlvbkNvbnRleHRDcmVhdGVkJywgdGhpcy5vbkV4ZWN1dGlvbkNvbnRleHRDcmVhdGVkLmJpbmQodGhpcykpO1xuICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbignSGVhcC5nYXJiYWdlQ29sbGVjdGVkJywgdGhpcy5vbkdhcmJhZ2VDb2xsZWN0ZWQuYmluZCh0aGlzKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIuaXNUYXJnZXRCYXNlZCA9IGlzVGFyZ2V0QmFzZWQ7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGlzVGFyZ2V0QmFzZWQgKCkge1xuICAgIHJldHVybiB0aGlzLl9pc1RhcmdldEJhc2VkO1xuICB9XG5cbiAgYXN5bmMgd2FpdEZvclRhcmdldCAoYXBwSWRLZXksIHBhZ2VJZEtleSwgZm9yY2UgPSBmYWxzZSkge1xuICAgIGlmICghZm9yY2UgJiYgIXRoaXMubmVlZHNUYXJnZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5nZXRUYXJnZXQoYXBwSWRLZXksIHBhZ2VJZEtleSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBvdGhlcndpc2Ugd2FpdGluZyBpcyBuZWNlc3NhcnkgdG8gc2VlIHdoYXQgdGhlIHRhcmdldCBpc1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKCgpID0+ICFfLmlzRW1wdHkodGhpcy5nZXRUYXJnZXQoYXBwSWRLZXksIHBhZ2VJZEtleSkpLCB7XG4gICAgICAgIHdhaXRNczogV0FJVF9GT1JfVEFSR0VUX1RJTUVPVVQsXG4gICAgICAgIGludGVydmFsTXM6IFdBSVRfRk9SX1RBUkdFVF9JTlRFUlZBTCxcbiAgICAgICAgZXJyb3I6ICdObyB0YXJnZXRzIGZvdW5kLCB1bmFibGUgdG8gY29tbXVuaWNhdGUgd2l0aCBkZXZpY2UnLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoIWVyci5tZXNzYWdlLmluY2x1ZGVzKCdDb25kaXRpb24gdW5tZXQnKSkge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHRhcmdldHMgZm91bmQsIHVuYWJsZSB0byBjb21tdW5pY2F0ZSB3aXRoIGRldmljZScpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNlbmQgKGNvbW1hbmQsIG9wdHMgPSB7fSwgd2FpdEZvclJlc3BvbnNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IHRpbWVyID0gbmV3IHRpbWluZy5UaW1lcigpLnN0YXJ0KCk7XG4gICAgY29uc3Qge1xuICAgICAgYXBwSWRLZXksXG4gICAgICBwYWdlSWRLZXlcbiAgICB9ID0gb3B0cztcbiAgICB0cnkge1xuICAgICAgaWYgKCFfLmlzRW1wdHkoYXBwSWRLZXkpICYmICFfLmlzRW1wdHkocGFnZUlkS2V5KSkge1xuICAgICAgICBhd2FpdCB0aGlzLndhaXRGb3JUYXJnZXQoYXBwSWRLZXksIHBhZ2VJZEtleSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5zZW5kVG9EZXZpY2UoY29tbWFuZCwgb3B0cywgd2FpdEZvclJlc3BvbnNlKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxldCB7IG1lc3NhZ2UgPSAnJyB9ID0gZXJyO1xuICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKGAndGFyZ2V0JyBkb21haW4gd2FzIG5vdCBmb3VuZGApKSB7XG4gICAgICAgIGxvZy5pbmZvKCdUaGUgdGFyZ2V0IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IFRhcmdldCBiYXNlZCBjb21tdW5pY2F0aW9uLiAnICtcbiAgICAgICAgICAnV2lsbCBmb2xsb3cgbm9uLXRhcmdldCBiYXNlZCBjb21tdW5pY2F0aW9uLicpO1xuICAgICAgICB0aGlzLmlzVGFyZ2V0QmFzZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc2VuZFRvRGV2aWNlKGNvbW1hbmQsIG9wdHMsIHdhaXRGb3JSZXNwb25zZSk7XG4gICAgICB9IGVsc2UgaWYgKG1lc3NhZ2UuaW5jbHVkZXMoYGRvbWFpbiB3YXMgbm90IGZvdW5kYCkgfHxcbiAgICAgICAgICBtZXNzYWdlLmluY2x1ZGVzKGBzb21lIGFyZ3VtZW50cyBvZiBtZXRob2RgKSB8fFxuICAgICAgICAgIG1lc3NhZ2UuaW5jbHVkZXMoYG1pc3NpbmcgdGFyZ2V0YCkpIHtcbiAgICAgICAgdGhpcy5pc1RhcmdldEJhc2VkID0gdHJ1ZTtcbiAgICAgICAgYXdhaXQgdGhpcy53YWl0Rm9yVGFyZ2V0KGFwcElkS2V5LCBwYWdlSWRLZXkpO1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5zZW5kVG9EZXZpY2UoY29tbWFuZCwgb3B0cywgd2FpdEZvclJlc3BvbnNlKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgbG9nLmRlYnVnKGBTZW5kaW5nIHRvIFdlYiBJbnNwZWN0b3IgdG9vayAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNNaWxsaVNlY29uZHMudG9GaXhlZCgwKX1tc2ApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNlbmRUb0RldmljZSAoY29tbWFuZCwgb3B0cyA9IHt9LCB3YWl0Rm9yUmVzcG9uc2UgPSB0cnVlKSB7XG4gICAgcmV0dXJuIGF3YWl0IG5ldyBCKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIC8vIHByb21pc2UgdG8gYmUgcmVzb2x2ZWQgd2hlbmV2ZXIgcmVtb3RlIGRlYnVnZ2VyXG4gICAgICAvLyByZXBsaWVzIHRvIG91ciByZXF1ZXN0XG5cbiAgICAgIC8vIGtlZXAgdHJhY2sgb2YgdGhlIG1lc3NhZ2VzIGNvbWluZyBhbmQgZ29pbmcgdXNpbmcgYSBzaW1wbGUgc2VxdWVudGlhbCBpZFxuICAgICAgY29uc3QgbXNnSWQgPSB0aGlzLm1zZ0lkKys7XG4gICAgICBsZXQgd3JhcHBlck1zZ0lkID0gbXNnSWQ7XG4gICAgICBpZiAodGhpcy5pc1RhcmdldEJhc2VkKSB7XG4gICAgICAgIC8vIGZvciB0YXJnZXQtYmFzZSBjb21tdW5pY2F0aW9uLCBldmVyeXRoaW5nIGlzIHdyYXBwZWQgdXBcbiAgICAgICAgd3JhcHBlck1zZ0lkID0gdGhpcy5tc2dJZCsrO1xuICAgICAgICAvLyBhY2tub3dsZWRnZSB3cmFwcGVyIG1lc3NhZ2VcbiAgICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbih3cmFwcGVyTXNnSWQudG9TdHJpbmcoKSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFwcElkS2V5ID0gb3B0cy5hcHBJZEtleTtcbiAgICAgIGNvbnN0IHBhZ2VJZEtleSA9IG9wdHMucGFnZUlkS2V5O1xuICAgICAgY29uc3QgdGFyZ2V0SWQgPSB0aGlzLmdldFRhcmdldChhcHBJZEtleSwgcGFnZUlkS2V5KTtcblxuICAgICAgLy8gcmV0cmlldmUgdGhlIGNvcnJlY3QgY29tbWFuZCB0byBzZW5kXG4gICAgICBjb25zdCBmdWxsT3B0cyA9IF8uZGVmYXVsdHMoe1xuICAgICAgICBjb25uSWQ6IHRoaXMuY29ubklkLFxuICAgICAgICBzZW5kZXJJZDogdGhpcy5zZW5kZXJJZCxcbiAgICAgICAgdGFyZ2V0SWQsXG4gICAgICAgIGlkOiBtc2dJZCxcbiAgICAgIH0sIG9wdHMpO1xuICAgICAgY29uc3QgY21kID0gdGhpcy5yZW1vdGVNZXNzYWdlcy5nZXRSZW1vdGVDb21tYW5kKGNvbW1hbmQsIGZ1bGxPcHRzKTtcblxuICAgICAgaWYgKGNtZD8uX19hcmd1bWVudD8uV0lSU29ja2V0RGF0YUtleSkge1xuICAgICAgICAvLyBtYWtlIHN1cmUgdGhlIG1lc3NhZ2UgYmVpbmcgc2VudCBoYXMgYWxsIHRoZSBpbmZvcm1hdGlvbiB0aGF0IGlzIG5lZWRlZFxuICAgICAgICBpZiAoXy5pc05pbChjbWQuX19hcmd1bWVudC5XSVJTb2NrZXREYXRhS2V5LmlkKSkge1xuICAgICAgICAgIGNtZC5fX2FyZ3VtZW50LldJUlNvY2tldERhdGFLZXkuaWQgPSB3cmFwcGVyTXNnSWQ7XG4gICAgICAgIH1cbiAgICAgICAgY21kLl9fYXJndW1lbnQuV0lSU29ja2V0RGF0YUtleSA9XG4gICAgICAgICAgQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoY21kLl9fYXJndW1lbnQuV0lSU29ja2V0RGF0YUtleSkpO1xuICAgICAgfVxuXG4gICAgICBsZXQgbWVzc2FnZUhhbmRsZWQgPSB0cnVlO1xuICAgICAgaWYgKCF3YWl0Rm9yUmVzcG9uc2UpIHtcbiAgICAgICAgLy8gdGhlIHByb21pc2Ugd2lsbCBiZSByZXNvbHZlZCBhcyBzb29uIGFzIHRoZSBzb2NrZXQgaGFzIGJlZW4gc2VudFxuICAgICAgICBtZXNzYWdlSGFuZGxlZCA9IGZhbHNlO1xuICAgICAgICAvLyBkbyBub3QgbG9nIHJlY2VpcHRzXG4gICAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIub25jZShtc2dJZC50b1N0cmluZygpLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgLy8gd2UgYXJlIG5vdCB3YWl0aW5nIGZvciB0aGlzLCBhbmQgaWYgaXQgZXJyb3JzIGl0IGlzIG1vc3QgbGlrZWx5XG4gICAgICAgICAgICAvLyBhIHByb3RvY29sIGNoYW5nZS4gTG9nIGFuZCBjaGVjayBkdXJpbmcgdGVzdGluZ1xuICAgICAgICAgICAgbG9nLmVycm9yKGBSZWNlaXZlZCBlcnJvciBmcm9tIHNlbmQgdGhhdCBpcyBub3QgYmVpbmcgd2FpdGVkIGZvciAoaWQ6ICR7bXNnSWR9KTogJyR7Xy50cnVuY2F0ZShKU09OLnN0cmluZ2lmeShlcnIpLCBEQVRBX0xPR19MRU5HVEgpfSdgKTtcbiAgICAgICAgICAgIC8vIHJlamVjdCwgdGhvdWdoIGl0IGlzIHZlcnkgcmFyZSB0aGF0IHRoaXMgd2lsbCBiZSB0cmlnZ2VyZWQsIHNpbmNlXG4gICAgICAgICAgICAvLyB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZCBkaXJlY3RsdHkgYWZ0ZXIgc2VuZC4gT24gdGhlIG9mZiBjaGFuY2UsXG4gICAgICAgICAgICAvLyB0aG91Z2gsIGl0IHdpbGwgYWxlcnQgb2YgYSBwcm90b2NvbCBjaGFuZ2UuXG4gICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLm1lc3NhZ2VIYW5kbGVyLmxpc3RlbmVycyhjbWQuX19zZWxlY3RvcikubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIucHJlcGVuZE9uY2VMaXN0ZW5lcihjbWQuX19zZWxlY3RvciwgZnVuY3Rpb24gKGVyciwgLi4uYXJncykge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbG9nLmRlYnVnKGBSZWNlaXZlZCByZXNwb25zZSBmcm9tIHNlbmQgKGlkOiAke21zZ0lkfSk6ICcke18udHJ1bmNhdGUoSlNPTi5zdHJpbmdpZnkoYXJncyksIERBVEFfTE9HX0xFTkdUSCl9J2ApO1xuICAgICAgICAgIHJlc29sdmUoYXJncyk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChjbWQ/Ll9fYXJndW1lbnQ/LldJUlNvY2tldERhdGFLZXkpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbmNlKG1zZ0lkLnRvU3RyaW5nKCksIGZ1bmN0aW9uIChlcnIsIHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoYFJlbW90ZSBkZWJ1Z2dlciBlcnJvciB3aXRoIGNvZGUgJyR7ZXJyLmNvZGV9JzogJHtlcnIubWVzc2FnZX1gKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxvZy5kZWJ1ZyhgUmVjZWl2ZWQgZGF0YSByZXNwb25zZSBmcm9tIHNlbmQgKGlkOiAke21zZ0lkfSk6ICcke18udHJ1bmNhdGUoSlNPTi5zdHJpbmdpZnkodmFsdWUpLCBEQVRBX0xPR19MRU5HVEgpfSdgKTtcbiAgICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBub3RoaW5nIGVsc2UgaXMgaGFuZGxpbmcgdGhpbmdzLCBzbyBqdXN0IHJlc29sdmUgd2hlbiB0aGUgbWVzc2FnZSBpcyBzZW50XG4gICAgICAgIG1lc3NhZ2VIYW5kbGVkID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1zZyA9IGBTZW5kaW5nICcke2NtZC5fX3NlbGVjdG9yfScgbWVzc2FnZWAgK1xuICAgICAgICAoZnVsbE9wdHMuYXBwSWRLZXkgPyBgIHRvIGFwcCAnJHtmdWxsT3B0cy5hcHBJZEtleX0nYCA6ICcnKSArXG4gICAgICAgIChmdWxsT3B0cy5wYWdlSWRLZXkgPyBgLCBwYWdlICcke2Z1bGxPcHRzLnBhZ2VJZEtleX0nYCA6ICcnKSArXG4gICAgICAgICh0aGlzLm5lZWRzVGFyZ2V0ICYmIHRhcmdldElkID8gYCwgdGFyZ2V0ICcke3RhcmdldElkfSdgIDogJycpICtcbiAgICAgICAgYCAoaWQ6ICR7bXNnSWR9KTogJyR7Y29tbWFuZH0nYDtcbiAgICAgIGxvZy5kZWJ1Zyhtc2cpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5zZW5kTWVzc2FnZShjbWQpO1xuICAgICAgICBpZiAoIW1lc3NhZ2VIYW5kbGVkKSB7XG4gICAgICAgICAgLy8gVGhlcmUgYXJlIG5vIGhhbmRsZXJzIHdhaXRpbmcgZm9yIGEgcmVzcG9uc2UgYmVmb3JlIHJlc29sdmluZyxcbiAgICAgICAgICAvLyBhbmQgbm8gZXJyb3JzIHNlbmRpbmcgdGhlIG1lc3NhZ2Ugb3ZlciB0aGUgc29ja2V0LCBzbyByZXNvbHZlXG4gICAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgY29ubmVjdCAoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICAgIHRocm93IG5ldyBFcnJvcihgU3ViLWNsYXNzZXMgbmVlZCB0byBpbXBsZW1lbnQgYSAnY29ubmVjdCcgZnVuY3Rpb25gKTtcbiAgfVxuXG4gIGFzeW5jIGRpc2Nvbm5lY3QgKCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlcXVpcmUtYXdhaXRcbiAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICB9XG5cbiAgYXN5bmMgc2VuZE1lc3NhZ2UgKC8qIGNvbW1hbmQgKi8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTdWItY2xhc3NlcyBuZWVkIHRvIGltcGxlbWVudCBhICdzZW5kTWVzc2FnZScgZnVuY3Rpb25gKTtcbiAgfVxuXG4gIGFzeW5jIHJlY2VpdmUgKC8qIGRhdGEgKi8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTdWItY2xhc3NlcyBuZWVkIHRvIGltcGxlbWVudCBhICdyZWNlaXZlJyBmdW5jdGlvbmApO1xuICB9XG5cbiAgYWRkVGFyZ2V0IChlcnIsIGFwcCwgdGFyZ2V0SW5mbykge1xuICAgIGlmIChfLmlzTmlsKHRhcmdldEluZm8/LnRhcmdldElkKSkge1xuICAgICAgbG9nLndhcm4oYFJlY2VpdmVkICdUYXJnZXQudGFyZ2V0Q3JlYXRlZCcgZXZlbnQgZm9yIGFwcCAnJHthcHB9JyB3aXRoIG5vIHRhcmdldC4gU2tpcHBpbmdgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKF8uaXNFbXB0eSh0aGlzLnBlbmRpbmdUYXJnZXROb3RpZmljYXRpb24pICYmICF0YXJnZXRJbmZvLmlzUHJvdmlzaW9uYWwpIHtcbiAgICAgIGxvZy53YXJuKGBSZWNlaXZlZCAnVGFyZ2V0LnRhcmdldENyZWF0ZWQnIGV2ZW50IGZvciBhcHAgJyR7YXBwfScgd2l0aCBubyBwZW5kaW5nIHJlcXVlc3Q6ICR7SlNPTi5zdHJpbmdpZnkodGFyZ2V0SW5mbyl9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRhcmdldEluZm8uaXNQcm92aXNpb25hbCkge1xuICAgICAgbG9nLmRlYnVnKGBQcm92aXNpb25hbCB0YXJnZXQgY3JlYXRlZCBmb3IgYXBwICcke2FwcH0nLCAnJHt0YXJnZXRJbmZvLnRhcmdldElkfScuIElnbm9yaW5nIHVudGlsIHRhcmdldCB1cGRhdGUgZXZlbnRgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBbYXBwSWRLZXksIHBhZ2VJZEtleV0gPSB0aGlzLnBlbmRpbmdUYXJnZXROb3RpZmljYXRpb247XG5cbiAgICBsb2cuZGVidWcoYFRhcmdldCBjcmVhdGVkIGZvciBhcHAgJyR7YXBwSWRLZXl9JyBhbmQgcGFnZSAnJHtwYWdlSWRLZXl9JzogJHtKU09OLnN0cmluZ2lmeSh0YXJnZXRJbmZvKX1gKTtcbiAgICBpZiAoXy5oYXModGhpcy50YXJnZXRzW2FwcElkS2V5XSwgcGFnZUlkS2V5KSkge1xuICAgICAgbG9nLmRlYnVnKGBUaGVyZSBpcyBhbHJlYWR5IGEgdGFyZ2V0IGZvciB0aGlzIGFwcCBhbmQgcGFnZSAoJyR7dGhpcy50YXJnZXRzW2FwcElkS2V5XVtwYWdlSWRLZXldfScpLiBUaGlzIG1pZ2h0IGNhdXNlIHByb2JsZW1zYCk7XG4gICAgfVxuICAgIHRoaXMudGFyZ2V0c1thcHBdID0gdGhpcy50YXJnZXRzW2FwcF0gfHwge307XG4gICAgdGhpcy50YXJnZXRzW2FwcElkS2V5XVtwYWdlSWRLZXldID0gdGFyZ2V0SW5mby50YXJnZXRJZDtcbiAgfVxuXG4gIHVwZGF0ZVRhcmdldCAoZXJyLCBhcHAsIG9sZFRhcmdldElkLCBuZXdUYXJnZXRJZCkge1xuICAgIGxvZy5kZWJ1ZyhgVGFyZ2V0IHVwZGF0ZWQgZm9yIGFwcCAnJHthcHB9Jy4gT2xkIHRhcmdldDogJyR7b2xkVGFyZ2V0SWR9JywgbmV3IHRhcmdldDogJyR7bmV3VGFyZ2V0SWR9J2ApO1xuICAgIGlmICghdGhpcy50YXJnZXRzW2FwcF0pIHtcbiAgICAgIGxvZy53YXJuKGBObyBleGlzdGluZyB0YXJnZXQgZm9yIGFwcCAnJHthcHB9Jy4gTm90IHN1cmUgd2hhdCB0byBkb2ApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBzYXZlIHRoaXMsIHRvIGJlIHVzZWQgaWYvd2hlbiB0aGUgZXhpc3RpbmcgdGFyZ2V0IGlzIGRlc3Ryb3llZFxuICAgIHRoaXMudGFyZ2V0c1thcHBdLnByb3Zpc2lvbmFsID0ge1xuICAgICAgb2xkVGFyZ2V0SWQsXG4gICAgICBuZXdUYXJnZXRJZCxcbiAgICB9O1xuICB9XG5cbiAgcmVtb3ZlVGFyZ2V0IChlcnIsIGFwcCwgdGFyZ2V0SW5mbykge1xuICAgIGlmIChfLmlzTmlsKHRhcmdldEluZm8/LnRhcmdldElkKSkge1xuICAgICAgbG9nLmRlYnVnKGBSZWNlaXZlZCAnVGFyZ2V0LnRhcmdldERlc3Ryb3llZCcgZXZlbnQgd2l0aCBubyB0YXJnZXQuIFNraXBwaW5nYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbG9nLmRlYnVnKGBUYXJnZXQgZGVzdHJveWVkIGZvciBhcHAgJyR7YXBwfSc6ICR7dGFyZ2V0SW5mby50YXJnZXRJZH1gKTtcblxuICAgIC8vIGdvIHRocm91Z2ggdGhlIHRhcmdldHMgYW5kIGZpbmQgdGhlIG9uZSB0aGF0IGhhcyBhIHdhaXRpbmcgcHJvdmlzaW9uYWwgdGFyZ2V0XG4gICAgaWYgKHRoaXMudGFyZ2V0c1thcHBdPy5wcm92aXNpb25hbD8ub2xkVGFyZ2V0SWQgPT09IHRhcmdldEluZm8udGFyZ2V0SWQpIHtcbiAgICAgIGNvbnN0IHtvbGRUYXJnZXRJZCwgbmV3VGFyZ2V0SWR9ID0gdGhpcy50YXJnZXRzW2FwcF0ucHJvdmlzaW9uYWw7XG4gICAgICBkZWxldGUgdGhpcy50YXJnZXRzW2FwcF0ucHJvdmlzaW9uYWw7XG5cbiAgICAgIC8vIHdlIGRvIG5vdCBrbm93IHRoZSBwYWdlLCBzbyBnbyB0aHJvdWdoIGFuZCBmaW5kIHRoZSBleGlzdGluZyB0YXJnZXRcbiAgICAgIGNvbnN0IHRhcmdldHMgPSB0aGlzLnRhcmdldHNbYXBwXTtcbiAgICAgIGZvciAoY29uc3QgW3BhZ2UsIHRhcmdldElkXSBvZiBfLnRvUGFpcnModGFyZ2V0cykpIHtcbiAgICAgICAgaWYgKHRhcmdldElkID09PSBvbGRUYXJnZXRJZCkge1xuICAgICAgICAgIGxvZy5kZWJ1ZyhgRm91bmQgcHJvdmlzaW9uYWwgdGFyZ2V0IGZvciBhcHAgJyR7YXBwfScuIE9sZCB0YXJnZXQ6ICcke29sZFRhcmdldElkfScsIG5ldyB0YXJnZXQ6ICcke25ld1RhcmdldElkfScuIFVwZGF0aW5nYCk7XG4gICAgICAgICAgdGFyZ2V0c1twYWdlXSA9IG5ld1RhcmdldElkO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbG9nLndhcm4oYFByb3Zpc2lvbmFsIHRhcmdldCBmb3IgYXBwICcke2FwcH0nIGZvdW5kLCBidXQgbm8gc3VpdGFibGUgZXhpc3RpbmcgdGFyZ2V0IGZvdW5kLiBUaGlzIG1heSBjYXVzZSBwcm9ibGVtc2ApO1xuICAgICAgbG9nLndhcm4oYE9sZCB0YXJnZXQ6ICcke29sZFRhcmdldElkfScsIG5ldyB0YXJnZXQ6ICcke25ld1RhcmdldElkfScuIEV4aXN0aW5nIHRhcmdldHM6ICR7SlNPTi5zdHJpbmdpZnkodGFyZ2V0cyl9YCk7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlcmUgaXMgbm8gd2FpdGluZyBwcm92aXNpb25hbCB0YXJnZXQsIGp1c3QgZ2V0IHJpZCBvZiB0aGUgZXhpc3Rpbmcgb25lXG4gICAgY29uc3QgdGFyZ2V0cyA9IHRoaXMudGFyZ2V0c1thcHBdO1xuICAgIGZvciAoY29uc3QgW3BhZ2UsIHRhcmdldElkXSBvZiBfLnRvUGFpcnModGFyZ2V0cykpIHtcbiAgICAgIGlmICh0YXJnZXRJZCA9PT0gdGFyZ2V0SW5mby50YXJnZXRJZCkge1xuICAgICAgICBkZWxldGUgdGFyZ2V0c1twYWdlXTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBsb2cuZGVidWcoYFRhcmdldCAnJHt0YXJnZXRJbmZvLnRhcmdldElkfScgZGVsZXRlZCBmb3IgYXBwICcke2FwcH0nLCBidXQgbm8gc3VjaCB0YXJnZXQgZXhpc3RzYCk7XG4gIH1cblxuICBnZXRUYXJnZXQgKGFwcElkS2V5LCBwYWdlSWRLZXkpIHtcbiAgICByZXR1cm4gKHRoaXMudGFyZ2V0c1thcHBJZEtleV0gfHwge30pW3BhZ2VJZEtleV07XG4gIH1cblxuICBhc3luYyBzZWxlY3RQYWdlIChhcHBJZEtleSwgcGFnZUlkS2V5KSB7XG4gICAgdGhpcy5wZW5kaW5nVGFyZ2V0Tm90aWZpY2F0aW9uID0gW2FwcElkS2V5LCBwYWdlSWRLZXldO1xuICAgIHRoaXMuc2hvdWxkQ2hlY2tGb3JUYXJnZXQgPSBmYWxzZTtcblxuICAgIC8vIGdvIHRocm91Z2ggdGhlIHN0ZXBzIHRoYXQgdGhlIERlc2t0b3AgU2FmYXJpIHN5c3RlbVxuICAgIC8vIGdvZXMgdGhyb3VnaCB0byBpbml0aWFsaXplIHRoZSBXZWIgSW5zcGVjdG9yIHNlc3Npb25cblxuICAgIGNvbnN0IHNlbmRPcHRzID0ge1xuICAgICAgYXBwSWRLZXksXG4gICAgICBwYWdlSWRLZXksXG4gICAgfTtcblxuICAgIC8vIGhpZ2hsaWdodCBhbmQgdGhlbiB1bi1oaWdobGlnaHQgdGhlIHdlYnZpZXdcbiAgICBmb3IgKGNvbnN0IGVuYWJsZWQgb2YgW3RydWUsIGZhbHNlXSkge1xuICAgICAgYXdhaXQgdGhpcy5zZW5kKCdpbmRpY2F0ZVdlYlZpZXcnLCBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgZW5hYmxlZCxcbiAgICAgIH0sIHNlbmRPcHRzKSwgZmFsc2UpO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuc2VuZCgnc2V0U2VuZGVyS2V5Jywgc2VuZE9wdHMpO1xuICAgIGxvZy5kZWJ1ZygnU2VuZGVyIGtleSBzZXQnKTtcblxuICAgIGlmICh0aGlzLmlzVGFyZ2V0QmFzZWQgJiYgdXRpbC5jb21wYXJlVmVyc2lvbnModGhpcy5wbGF0Zm9ybVZlcnNpb24sICc8JywgTUlOX1BMQVRGT1JNX05PX1RBUkdFVF9FWElTVFMpKSB7XG4gICAgICBhd2FpdCB0aGlzLnNlbmQoJ1RhcmdldC5leGlzdHMnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIH1cblxuICAgIHRoaXMuc2hvdWxkQ2hlY2tGb3JUYXJnZXQgPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMuZnVsbFBhZ2VJbml0aWFsaXphdGlvbikge1xuICAgICAgYXdhaXQgdGhpcy5pbml0aWFsaXplUGFnZUZ1bGwoYXBwSWRLZXksIHBhZ2VJZEtleSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVBhZ2UoYXBwSWRLZXksIHBhZ2VJZEtleSk7XG4gICAgfVxuICB9XG5cbiAgLypcbiAgICogUGVyZm9ybSB0aGUgbWluaW1hbCBpbml0aWFsaXphdGlvbiB0byBnZXQgdGhlIFdlYiBJbnNwZWN0b3Igd29ya2luZ1xuICAgKi9cbiAgYXN5bmMgaW5pdGlhbGl6ZVBhZ2UgKGFwcElkS2V5LCBwYWdlSWRLZXkpIHtcbiAgICBjb25zdCBzZW5kT3B0cyA9IHtcbiAgICAgIGFwcElkS2V5LFxuICAgICAgcGFnZUlkS2V5LFxuICAgIH07XG5cbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0luc3BlY3Rvci5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnUGFnZS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuXG4gICAgLy8gZ28gdGhyb3VnaCB0aGUgdGFza3MgdG8gaW5pdGlhbGl6ZVxuICAgIGF3YWl0IHRoaXMuc2VuZCgnTmV0d29yay5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnUnVudGltZS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnSGVhcC5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnRGVidWdnZXIuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0NvbnNvbGUuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0luc3BlY3Rvci5pbml0aWFsaXplZCcsIHNlbmRPcHRzLCBmYWxzZSk7XG4gIH1cblxuICAvKlxuICAgKiBNaW1pYyBldmVyeSBzdGVwIHRoYXQgRGVza3RvcCBTYWZhcmkgRGV2ZWxvcCB0b29scyB1c2VzIHRvIGluaXRpYWxpemUgYVxuICAgKiBXZWIgSW5zcGVjdG9yIHNlc3Npb25cbiAgICovXG4gIGFzeW5jIGluaXRpYWxpemVQYWdlRnVsbCAoYXBwSWRLZXksIHBhZ2VJZEtleSkge1xuICAgIGNvbnN0IHNlbmRPcHRzID0ge1xuICAgICAgYXBwSWRLZXksXG4gICAgICBwYWdlSWRLZXksXG4gICAgfTtcblxuICAgIGF3YWl0IHRoaXMuc2VuZCgnSW5zcGVjdG9yLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdQYWdlLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG5cbiAgICAvLyBnbyB0aHJvdWdoIHRoZSB0YXNrcyB0byBpbml0aWFsaXplXG4gICAgYXdhaXQgdGhpcy5zZW5kKCdQYWdlLmdldFJlc291cmNlVHJlZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdOZXR3b3JrLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdOZXR3b3JrLnNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkJywgT2JqZWN0LmFzc2lnbih7XG4gICAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgfSwgc2VuZE9wdHMpLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdET01TdG9yYWdlLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdEYXRhYmFzZS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnSW5kZXhlZERCLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdDU1MuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ1J1bnRpbWUuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0hlYXAuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ01lbW9yeS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnQXBwbGljYXRpb25DYWNoZS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnQXBwbGljYXRpb25DYWNoZS5nZXRGcmFtZXNXaXRoTWFuaWZlc3RzJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ1RpbWVsaW5lLnNldEluc3RydW1lbnRzJywgT2JqZWN0LmFzc2lnbih7XG4gICAgICBpbnN0cnVtZW50czogWydUaW1lbGluZScsICdTY3JpcHRQcm9maWxlcicsICdDUFUnXSxcbiAgICB9LCBzZW5kT3B0cyksIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ1RpbWVsaW5lLnNldEF1dG9DYXB0dXJlRW5hYmxlZCcsIE9iamVjdC5hc3NpZ24oe1xuICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgfSwgc2VuZE9wdHMpLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdEZWJ1Z2dlci5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnRGVidWdnZXIuc2V0QnJlYWtwb2ludHNBY3RpdmUnLCBPYmplY3QuYXNzaWduKHtcbiAgICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICB9LCBzZW5kT3B0cyksIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0RlYnVnZ2VyLnNldFBhdXNlT25FeGNlcHRpb25zJywgT2JqZWN0LmFzc2lnbih7XG4gICAgICBzdGF0ZTogJ25vbmUnLFxuICAgIH0sIHNlbmRPcHRzKSwgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnRGVidWdnZXIuc2V0UGF1c2VPbkFzc2VydGlvbnMnLCBPYmplY3QuYXNzaWduKHtcbiAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIH0sIHNlbmRPcHRzKSwgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnRGVidWdnZXIuc2V0QXN5bmNTdGFja1RyYWNlRGVwdGgnLCBPYmplY3QuYXNzaWduKHtcbiAgICAgIGRlcHRoOiAyMDAsXG4gICAgfSwgc2VuZE9wdHMpLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdEZWJ1Z2dlci5zZXRQYXVzZUZvckludGVybmFsU2NyaXB0cycsIE9iamVjdC5hc3NpZ24oe1xuICAgICAgc2hvdWxkUGF1c2U6IGZhbHNlLFxuICAgIH0sIHNlbmRPcHRzKSwgZmFsc2UpO1xuXG4gICAgYXdhaXQgdGhpcy5zZW5kKCdMYXllclRyZWUuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ1dvcmtlci5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnQ2FudmFzLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdDb25zb2xlLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdET00uZ2V0RG9jdW1lbnQnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGNvbnN0IGxvZ2dpbmdDaGFubmVscyA9IGF3YWl0IHRoaXMuc2VuZCgnQ29uc29sZS5nZXRMb2dnaW5nQ2hhbm5lbHMnLCBzZW5kT3B0cyk7XG4gICAgZm9yIChjb25zdCBzb3VyY2Ugb2YgKGxvZ2dpbmdDaGFubmVscy5jaGFubmVscyB8fCBbXSkubWFwKChlbnRyeSkgPT4gZW50cnkuc291cmNlKSkge1xuICAgICAgYXdhaXQgdGhpcy5zZW5kKCdDb25zb2xlLnNldExvZ2dpbmdDaGFubmVsTGV2ZWwnLCBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgc291cmNlLFxuICAgICAgICBsZXZlbDogJ3ZlcmJvc2UnLFxuICAgICAgfSwgc2VuZE9wdHMpLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5zZW5kKCdJbnNwZWN0b3IuaW5pdGlhbGl6ZWQnLCBzZW5kT3B0cywgZmFsc2UpO1xuICB9XG5cbiAgYXN5bmMgc2VsZWN0QXBwIChhcHBJZEtleSkge1xuICAgIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAvLyBsb2NhbCBjYWxsYmFjaywgdGVtcG9yYXJpbHkgYWRkZWQgYXMgY2FsbGJhY2sgdG9cbiAgICAgIC8vIGBfcnBjX2FwcGxpY2F0aW9uQ29ubmVjdGVkOmAgcmVtb3RlIGRlYnVnZ2VyIHJlc3BvbnNlXG4gICAgICAvLyB0byBoYW5kbGUgdGhlIGluaXRpYWwgY29ubmVjdGlvblxuICAgICAgY29uc3Qgb25BcHBDaGFuZ2UgPSAoZXJyLCBkaWN0KSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZnJvbSB0aGUgZGljdGlvbmFyeSByZXR1cm5lZCwgZ2V0IHRoZSBpZHNcbiAgICAgICAgY29uc3Qgb2xkQXBwSWRLZXkgPSBkaWN0LldJUkhvc3RBcHBsaWNhdGlvbklkZW50aWZpZXJLZXk7XG4gICAgICAgIGNvbnN0IGNvcnJlY3RBcHBJZEtleSA9IGRpY3QuV0lSQXBwbGljYXRpb25JZGVudGlmaWVyS2V5O1xuXG4gICAgICAgIC8vIGlmIHRoaXMgaXMgYSByZXBvcnQgb2YgYSBwcm94eSByZWRpcmVjdCBmcm9tIHRoZSByZW1vdGUgZGVidWdnZXJcbiAgICAgICAgLy8gd2Ugd2FudCB0byB1cGRhdGUgb3VyIGRpY3Rpb25hcnkgYW5kIGdldCBhIG5ldyBhcHAgaWRcbiAgICAgICAgaWYgKG9sZEFwcElkS2V5ICYmIGNvcnJlY3RBcHBJZEtleSAhPT0gb2xkQXBwSWRLZXkpIHtcbiAgICAgICAgICBsb2cuZGVidWcoYFdlIHdlcmUgbm90aWZpZWQgd2UgbWlnaHQgaGF2ZSBjb25uZWN0ZWQgdG8gdGhlIHdyb25nIGFwcC4gYCArXG4gICAgICAgICAgICAgICAgICAgIGBVc2luZyBpZCAke2NvcnJlY3RBcHBJZEtleX0gaW5zdGVhZCBvZiAke29sZEFwcElkS2V5fWApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignTmV3IGFwcGxpY2F0aW9uIGhhcyBjb25uZWN0ZWQnKSk7XG4gICAgICB9O1xuICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5wcmVwZW5kT25jZUxpc3RlbmVyKCdfcnBjX2FwcGxpY2F0aW9uQ29ubmVjdGVkOicsIG9uQXBwQ2hhbmdlKTtcblxuICAgICAgLy8gZG8gdGhlIGFjdHVhbCBjb25uZWN0aW5nIHRvIHRoZSBhcHBcbiAgICAgIHJldHVybiAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBsZXQgcGFnZURpY3QsIGNvbm5lY3RlZEFwcElkS2V5O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIChbY29ubmVjdGVkQXBwSWRLZXksIHBhZ2VEaWN0XSA9IGF3YWl0IHRoaXMuc2VuZCgnY29ubmVjdFRvQXBwJywge1xuICAgICAgICAgICAgYXBwSWRLZXlcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGxvZy53YXJuKGBVbmFibGUgdG8gY29ubmVjdCB0byBhcHA6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzb21ldGltZXMgdGhlIGNvbm5lY3QgbG9naWMgaGFwcGVucywgYnV0IHdpdGggYW4gZW1wdHkgZGljdGlvbmFyeVxuICAgICAgICAvLyB3aGljaCBsZWFkcyB0byB0aGUgcmVtb3RlIGRlYnVnZ2VyIGdldHRpbmcgZGlzY29ubmVjdGVkLCBhbmQgaW50byBhIGxvb3BcbiAgICAgICAgaWYgKF8uaXNFbXB0eShwYWdlRGljdCkpIHtcbiAgICAgICAgICBsZXQgbXNnID0gJ0VtcHR5IHBhZ2UgZGljdGlvbmFyeSByZWNlaXZlZCc7XG4gICAgICAgICAgbG9nLmRlYnVnKG1zZyk7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihtc2cpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNvbHZlKFtjb25uZWN0ZWRBcHBJZEtleSwgcGFnZURpY3RdKTtcbiAgICAgICAgfVxuICAgICAgfSkoKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uRXhlY3V0aW9uQ29udGV4dENyZWF0ZWQgKGVyciwgY29udGV4dCkge1xuICAgIC8vIHsgaWQ6IDIsIGlzUGFnZUNvbnRleHQ6IHRydWUsIG5hbWU6ICcnLCBmcmFtZUlkOiAnMC4xJyB9XG4gICAgLy8gcmlnaHQgbm93IHdlIGhhdmUgbm8gd2F5IHRvIG1hcCBjb250ZXh0cyB0byBhcHBzL3BhZ2VzXG4gICAgLy8gc28ganVzdCBzdG9yZVxuICAgIHRoaXMuY29udGV4dHMucHVzaChjb250ZXh0LmlkKTtcbiAgfVxuXG4gIG9uR2FyYmFnZUNvbGxlY3RlZCAoKSB7XG4gICAgLy8ganVzdCB3YW50IHRvIGxvZyB0aGF0IHRoaXMgaXMgaGFwcGVuaW5nLCBhcyBpdCBjYW4gYWZmZWN0IG9wZXJ0aW9uXG4gICAgbG9nLmRlYnVnKGBXZWIgSW5zcGVjdG9yIGdhcmJhZ2UgY29sbGVjdGVkYCk7XG4gIH1cblxuICBvblNjcmlwdFBhcnNlZCAoZXJyLCBzY3JpcHRJbmZvKSB7XG4gICAgLy8geyBzY3JpcHRJZDogJzEzJywgdXJsOiAnJywgc3RhcnRMaW5lOiAwLCBzdGFydENvbHVtbjogMCwgZW5kTGluZTogODIsIGVuZENvbHVtbjogMyB9XG4gICAgbG9nLmRlYnVnKGBTY3JpcHQgcGFyc2VkOiAke0pTT04uc3RyaW5naWZ5KHNjcmlwdEluZm8pfWApO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBQUEsZUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsU0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsT0FBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsT0FBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUksU0FBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUssa0JBQUEsR0FBQU4sc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFNLFFBQUEsR0FBQU4sT0FBQTtBQUdBLE1BQU1PLGVBQWUsR0FBRztFQUFDQyxNQUFNLEVBQUU7QUFBRyxDQUFDO0FBRXJDLE1BQU1DLHVCQUF1QixHQUFHLEtBQUs7QUFDckMsTUFBTUMsd0JBQXdCLEdBQUcsSUFBSTtBQUVyQyxNQUFNQyw2QkFBNkIsR0FBRyxNQUFNO0FBRzVDLE1BQU1DLDZCQUE2QixHQUFHLE1BQU07QUFFNUMsU0FBU0MsYUFBYUEsQ0FBRUMsUUFBUSxFQUFFQyxlQUFlLEVBQUU7RUFJakQsTUFBTUMsYUFBYSxHQUFHQyxhQUFJLENBQUNDLGVBQWUsQ0FBQ0gsZUFBZSxFQUFFLElBQUksRUFBRUosNkJB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
453
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVtb3RlTWVzc2FnZXMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9hc3luY2JveCIsIl9sb2dnZXIiLCJfbG9kYXNoIiwiX2JsdWViaXJkIiwiX3JwY01lc3NhZ2VIYW5kbGVyIiwiX3N1cHBvcnQiLCJEQVRBX0xPR19MRU5HVEgiLCJsZW5ndGgiLCJXQUlUX0ZPUl9UQVJHRVRfVElNRU9VVCIsIldBSVRfRk9SX1RBUkdFVF9JTlRFUlZBTCIsIk1JTl9QTEFURk9STV9GT1JfVEFSR0VUX0JBU0VEIiwiTUlOX1BMQVRGT1JNX05PX1RBUkdFVF9FWElTVFMiLCJpc1RhcmdldEJhc2VkIiwiaXNTYWZhcmkiLCJwbGF0Zm9ybVZlcnNpb24iLCJpc0hpZ2hWZXJzaW9uIiwidXRpbCIsImNvbXBhcmVWZXJzaW9ucyIsImxvZyIsImRlYnVnIiwiUnBjQ2xpZW50IiwiY29uc3RydWN0b3IiLCJvcHRzIiwiX3RhcmdldHMiLCJfc2hvdWxkQ2hlY2tGb3JUYXJnZXQiLCJzaG91bGRDaGVja0ZvclRhcmdldCIsImJ1bmRsZUlkIiwibG9nQWxsQ29tbXVuaWNhdGlvbiIsImxvZ0FsbENvbW11bmljYXRpb25IZXhEdW1wIiwid2ViSW5zcGVjdG9yTWF4RnJhbWVMZW5ndGgiLCJzb2NrZXRDaHVua1NpemUiLCJmdWxsUGFnZUluaXRpYWxpemF0aW9uIiwiaXNDb25uZWN0ZWQiLCJjb25uSWQiLCJ1dWlkVjQiLCJzZW5kZXJJZCIsIm1zZ0lkIiwiX2NvbnRleHRzIiwiY29udGV4dHMiLCJuZWVkc1RhcmdldCIsInRhcmdldHMiLCJjb25uZWN0ZWQiLCJvbiIsImV2ZW50IiwibGlzdGVuZXIiLCJtZXNzYWdlSGFuZGxlciIsIm9uY2UiLCJvZmYiLCJ3YXJuIiwiX2lzVGFyZ2V0QmFzZWQiLCJyZW1vdGVNZXNzYWdlcyIsIlJlbW90ZU1lc3NhZ2VzIiwiUnBjTWVzc2FnZUhhbmRsZXIiLCJhZGRUYXJnZXQiLCJiaW5kIiwidXBkYXRlVGFyZ2V0IiwicmVtb3ZlVGFyZ2V0Iiwib25FeGVjdXRpb25Db250ZXh0Q3JlYXRlZCIsIm9uR2FyYmFnZUNvbGxlY3RlZCIsIndhaXRGb3JUYXJnZXQiLCJhcHBJZEtleSIsInBhZ2VJZEtleSIsImZvcmNlIiwiZ2V0VGFyZ2V0Iiwid2FpdEZvckNvbmRpdGlvbiIsIl8iLCJpc0VtcHR5Iiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsImVycm9yIiwiZXJyIiwibWVzc2FnZSIsImluY2x1ZGVzIiwiRXJyb3IiLCJzZW5kIiwiY29tbWFuZCIsIndhaXRGb3JSZXNwb25zZSIsInRpbWVyIiwidGltaW5nIiwiVGltZXIiLCJzdGFydCIsInNlbmRUb0RldmljZSIsInRvTG93ZXJDYXNlIiwiaW5mbyIsImdldER1cmF0aW9uIiwiYXNNaWxsaVNlY29uZHMiLCJ0b0ZpeGVkIiwiQiIsInJlc29sdmUiLCJyZWplY3QiLCJfY21kJF9fYXJndW1lbnQiLCJfY21kJF9fYXJndW1lbnQyIiwid3JhcHBlck1zZ0lkIiwidG9TdHJpbmciLCJ0YXJnZXRJZCIsImZ1bGxPcHRzIiwiZGVmYXVsdHMiLCJpZCIsImNtZCIsImdldFJlbW90ZUNvbW1hbmQiLCJfX2FyZ3VtZW50IiwiV0lSU29ja2V0RGF0YUtleSIsImlzTmlsIiwiQnVmZmVyIiwiZnJvbSIsIkpTT04iLCJzdHJpbmdpZnkiLCJtZXNzYWdlSGFuZGxlZCIsInRydW5jYXRlIiwibGlzdGVuZXJzIiwiX19zZWxlY3RvciIsInByZXBlbmRPbmNlTGlzdGVuZXIiLCJhcmdzIiwidmFsdWUiLCJjb2RlIiwibXNnIiwicmVzIiwic2VuZE1lc3NhZ2UiLCJjb25uZWN0IiwiZGlzY29ubmVjdCIsInJlbW92ZUFsbExpc3RlbmVycyIsInJlY2VpdmUiLCJhcHAiLCJ0YXJnZXRJbmZvIiwicGVuZGluZ1RhcmdldE5vdGlmaWNhdGlvbiIsImlzUHJvdmlzaW9uYWwiLCJoYXMiLCJvbGRUYXJnZXRJZCIsIm5ld1RhcmdldElkIiwicHJvdmlzaW9uYWwiLCJfdGhpcyR0YXJnZXRzJGFwcCIsIl90aGlzJHRhcmdldHMkYXBwJHBybyIsInBhZ2UiLCJ0b1BhaXJzIiwic2VsZWN0UGFnZSIsInNlbmRPcHRzIiwiZW5hYmxlZCIsIk9iamVjdCIsImFzc2lnbiIsImluaXRpYWxpemVQYWdlRnVsbCIsImluaXRpYWxpemVQYWdlIiwiZGlzYWJsZWQiLCJpbnN0cnVtZW50cyIsImFjdGl2ZSIsInN0YXRlIiwiZGVwdGgiLCJzaG91bGRQYXVzZSIsImxvZ2dpbmdDaGFubmVscyIsInNvdXJjZSIsImNoYW5uZWxzIiwibWFwIiwiZW50cnkiLCJsZXZlbCIsInNlbGVjdEFwcCIsIm9uQXBwQ2hhbmdlIiwiZGljdCIsIm9sZEFwcElkS2V5IiwiV0lSSG9zdEFwcGxpY2F0aW9uSWRlbnRpZmllcktleSIsImNvcnJlY3RBcHBJZEtleSIsIldJUkFwcGxpY2F0aW9uSWRlbnRpZmllcktleSIsInBhZ2VEaWN0IiwiY29ubmVjdGVkQXBwSWRLZXkiLCJjb250ZXh0IiwicHVzaCIsIm9uU2NyaXB0UGFyc2VkIiwic2NyaXB0SW5mbyIsImV4cG9ydHMiLCJkZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3JwYy9ycGMtY2xpZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZW1vdGVNZXNzYWdlcyBmcm9tICcuL3JlbW90ZS1tZXNzYWdlcyc7XG5pbXBvcnQgeyB3YWl0Rm9yQ29uZGl0aW9uIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBScGNNZXNzYWdlSGFuZGxlciBmcm9tICcuL3JwYy1tZXNzYWdlLWhhbmRsZXInO1xuaW1wb3J0IHsgdXRpbCwgdGltaW5nIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcblxuXG5jb25zdCBEQVRBX0xPR19MRU5HVEggPSB7bGVuZ3RoOiAyMDB9O1xuXG5jb25zdCBXQUlUX0ZPUl9UQVJHRVRfVElNRU9VVCA9IDEwMDAwO1xuY29uc3QgV0FJVF9GT1JfVEFSR0VUX0lOVEVSVkFMID0gMTAwMDtcblxuY29uc3QgTUlOX1BMQVRGT1JNX0ZPUl9UQVJHRVRfQkFTRUQgPSAnMTIuMic7XG5cbi8vIGBUYXJnZXQuZXhpc3RzYCBwcm90b2NvbCBtZXRob2Qgd2FzIHJlbW92ZWQgZnJvbSBXZWJLaXQgaW4gMTMuNFxuY29uc3QgTUlOX1BMQVRGT1JNX05PX1RBUkdFVF9FWElTVFMgPSAnMTMuNCc7XG5cbmZ1bmN0aW9uIGlzVGFyZ2V0QmFzZWQgKGlzU2FmYXJpLCBwbGF0Zm9ybVZlcnNpb24pIHtcbiAgLy8gT24gaU9TIDEyLjIgdGhlIG1lc3NhZ2VzIGdldCBzZW50IHRocm91Z2ggdGhlIFRhcmdldCBkb21haW5cbiAgLy8gT24gaU9TIDEzLjArLCBXS1dlYlZpZXcgYWxzbyBuZWVkcyB0byBmb2xsb3cgdGhlIFRhcmdldCBkb21haW4sXG4gIC8vIHNvIGhlcmUgb25seSBjaGVjayB0aGUgdGFyZ2V0IE9TIHZlcnNpb24gYXMgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLlxuICBjb25zdCBpc0hpZ2hWZXJzaW9uID0gdXRpbC5jb21wYXJlVmVyc2lvbnMocGxhdGZvcm1WZXJzaW9uLCAnPj0nLCBNSU5fUExBVEZPUk1fRk9SX1RBUkdFVF9CQVNFRCk7XG4gIGxvZy5kZWJ1ZyhgQ2hlY2tpbmcgd2hpY2ggY29tbXVuaWNhdGlvbiBzdHlsZSB0byB1c2UgKCR7aXNTYWZhcmkgPyAnJyA6ICdub24tJ31TYWZhcmkgb24gcGxhdGZvcm0gdmVyc2lvbiAnJHtwbGF0Zm9ybVZlcnNpb259JylgKTtcbiAgbG9nLmRlYnVnKGBQbGF0Zm9ybSB2ZXJzaW9uIGVxdWFsIG9yIGhpZ2hlciB0aGFuICcke01JTl9QTEFURk9STV9GT1JfVEFSR0VUX0JBU0VEfSc6ICR7aXNIaWdoVmVyc2lvbn1gKTtcbiAgcmV0dXJuIGlzSGlnaFZlcnNpb247XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJwY0NsaWVudCB7XG4gIGNvbnN0cnVjdG9yIChvcHRzID0ge30pIHtcbiAgICB0aGlzLl90YXJnZXRzID0gW107XG4gICAgdGhpcy5fc2hvdWxkQ2hlY2tGb3JUYXJnZXQgPSAhIW9wdHMuc2hvdWxkQ2hlY2tGb3JUYXJnZXQ7XG5cbiAgICBjb25zdCB7XG4gICAgICBidW5kbGVJZCxcbiAgICAgIHBsYXRmb3JtVmVyc2lvbiA9IHt9LFxuICAgICAgaXNTYWZhcmkgPSB0cnVlLFxuICAgICAgbG9nQWxsQ29tbXVuaWNhdGlvbiA9IGZhbHNlLFxuICAgICAgbG9nQWxsQ29tbXVuaWNhdGlvbkhleER1bXAgPSBmYWxzZSxcbiAgICAgIHdlYkluc3BlY3Rvck1heEZyYW1lTGVuZ3RoLFxuICAgICAgc29ja2V0Q2h1bmtTaXplLFxuICAgICAgZnVsbFBhZ2VJbml0aWFsaXphdGlvbiA9IGZhbHNlLFxuICAgIH0gPSBvcHRzO1xuXG4gICAgdGhpcy5pc1NhZmFyaSA9IGlzU2FmYXJpO1xuXG4gICAgdGhpcy5pc0Nvbm5lY3RlZCA9IGZhbHNlO1xuICAgIHRoaXMuY29ubklkID0gdXRpbC51dWlkVjQoKTtcbiAgICB0aGlzLnNlbmRlcklkID0gdXRpbC51dWlkVjQoKTtcbiAgICB0aGlzLm1zZ0lkID0gMDtcblxuICAgIHRoaXMubG9nQWxsQ29tbXVuaWNhdGlvbiA9IGxvZ0FsbENvbW11bmljYXRpb247XG4gICAgdGhpcy5sb2dBbGxDb21tdW5pY2F0aW9uSGV4RHVtcCA9IGxvZ0FsbENvbW11bmljYXRpb25IZXhEdW1wO1xuICAgIHRoaXMuc29ja2V0Q2h1bmtTaXplID0gc29ja2V0Q2h1bmtTaXplO1xuICAgIHRoaXMud2ViSW5zcGVjdG9yTWF4RnJhbWVMZW5ndGggPSB3ZWJJbnNwZWN0b3JNYXhGcmFtZUxlbmd0aDtcblxuICAgIHRoaXMuZnVsbFBhZ2VJbml0aWFsaXphdGlvbiA9IGZ1bGxQYWdlSW5pdGlhbGl6YXRpb247XG5cbiAgICB0aGlzLmJ1bmRsZUlkID0gYnVuZGxlSWQ7XG4gICAgdGhpcy5wbGF0Zm9ybVZlcnNpb24gPSBwbGF0Zm9ybVZlcnNpb247XG5cbiAgICB0aGlzLl9jb250ZXh0cyA9IFtdO1xuICAgIHRoaXMuX3RhcmdldHMgPSB7fTtcblxuICAgIC8vIHN0YXJ0IHdpdGggYSBiZXN0IGd1ZXNzIGZvciB0aGUgcHJvdG9jb2xcbiAgICB0aGlzLmlzVGFyZ2V0QmFzZWQgPSBpc1RhcmdldEJhc2VkKGlzU2FmYXJpLCB0aGlzLnBsYXRmb3JtVmVyc2lvbik7XG4gIH1cblxuICBnZXQgY29udGV4dHMgKCkge1xuICAgIHJldHVybiB0aGlzLl9jb250ZXh0cztcbiAgfVxuXG4gIGdldCBuZWVkc1RhcmdldCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hvdWxkQ2hlY2tGb3JUYXJnZXQgJiYgdGhpcy5pc1RhcmdldEJhc2VkO1xuICB9XG5cbiAgZ2V0IHRhcmdldHMgKCkge1xuICAgIHJldHVybiB0aGlzLl90YXJnZXRzO1xuICB9XG5cbiAgZ2V0IHNob3VsZENoZWNrRm9yVGFyZ2V0ICgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2hvdWxkQ2hlY2tGb3JUYXJnZXQ7XG4gIH1cblxuICBzZXQgc2hvdWxkQ2hlY2tGb3JUYXJnZXQgKHNob3VsZENoZWNrRm9yVGFyZ2V0KSB7XG4gICAgdGhpcy5fc2hvdWxkQ2hlY2tGb3JUYXJnZXQgPSAhIXNob3VsZENoZWNrRm9yVGFyZ2V0O1xuICB9XG5cbiAgZ2V0IGlzQ29ubmVjdGVkICgpIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0ZWQ7XG4gIH1cblxuICBzZXQgaXNDb25uZWN0ZWQgKGNvbm5lY3RlZCkge1xuICAgIHRoaXMuY29ubmVjdGVkID0gISFjb25uZWN0ZWQ7XG4gIH1cblxuICBvbiAoZXZlbnQsIGxpc3RlbmVyKSB7XG4gICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbihldmVudCwgbGlzdGVuZXIpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgb25jZSAoZXZlbnQsIGxpc3RlbmVyKSB7XG4gICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbmNlKGV2ZW50LCBsaXN0ZW5lcik7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBvZmYgKGV2ZW50LCBsaXN0ZW5lcikge1xuICAgIHRoaXMubWVzc2FnZUhhbmRsZXIub2ZmKGV2ZW50LCBsaXN0ZW5lcik7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZXQgaXNUYXJnZXRCYXNlZCAoaXNUYXJnZXRCYXNlZCkge1xuICAgIGxvZy53YXJuKGBTZXR0aW5nIGNvbW11bmljYXRpb24gcHJvdG9jb2w6IHVzaW5nICR7aXNUYXJnZXRCYXNlZCA/ICdUYXJnZXQtYmFzZWQnIDogJ2Z1bGwgV2ViIEluc3BlY3RvciBwcm90b2NvbCd9IGNvbW11bmljYXRpb25gKTtcbiAgICB0aGlzLl9pc1RhcmdldEJhc2VkID0gaXNUYXJnZXRCYXNlZDtcblxuICAgIGlmICghdGhpcy5yZW1vdGVNZXNzYWdlcykge1xuICAgICAgdGhpcy5yZW1vdGVNZXNzYWdlcyA9IG5ldyBSZW1vdGVNZXNzYWdlcyhpc1RhcmdldEJhc2VkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZW1vdGVNZXNzYWdlcy5pc1RhcmdldEJhc2VkID0gaXNUYXJnZXRCYXNlZDtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubWVzc2FnZUhhbmRsZXIpIHtcbiAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIgPSBuZXcgUnBjTWVzc2FnZUhhbmRsZXIoaXNUYXJnZXRCYXNlZCk7XG5cbiAgICAgIC8vIGFkZCBoYW5kbGVycyBmb3IgaW50ZXJuYWwgZXZlbnRzXG4gICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyLm9uKCdUYXJnZXQudGFyZ2V0Q3JlYXRlZCcsIHRoaXMuYWRkVGFyZ2V0LmJpbmQodGhpcykpO1xuICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbignVGFyZ2V0LmRpZENvbW1pdFByb3Zpc2lvbmFsVGFyZ2V0JywgdGhpcy51cGRhdGVUYXJnZXQuYmluZCh0aGlzKSk7XG4gICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyLm9uKCdUYXJnZXQudGFyZ2V0RGVzdHJveWVkJywgdGhpcy5yZW1vdmVUYXJnZXQuYmluZCh0aGlzKSk7XG4gICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyLm9uKCdSdW50aW1lLmV4ZWN1dGlvbkNvbnRleHRDcmVhdGVkJywgdGhpcy5vbkV4ZWN1dGlvbkNvbnRleHRDcmVhdGVkLmJpbmQodGhpcykpO1xuICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbignSGVhcC5nYXJiYWdlQ29sbGVjdGVkJywgdGhpcy5vbkdhcmJhZ2VDb2xsZWN0ZWQuYmluZCh0aGlzKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIuaXNUYXJnZXRCYXNlZCA9IGlzVGFyZ2V0QmFzZWQ7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGlzVGFyZ2V0QmFzZWQgKCkge1xuICAgIHJldHVybiB0aGlzLl9pc1RhcmdldEJhc2VkO1xuICB9XG5cbiAgYXN5bmMgd2FpdEZvclRhcmdldCAoYXBwSWRLZXksIHBhZ2VJZEtleSwgZm9yY2UgPSBmYWxzZSkge1xuICAgIGlmICghZm9yY2UgJiYgIXRoaXMubmVlZHNUYXJnZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5nZXRUYXJnZXQoYXBwSWRLZXksIHBhZ2VJZEtleSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBvdGhlcndpc2Ugd2FpdGluZyBpcyBuZWNlc3NhcnkgdG8gc2VlIHdoYXQgdGhlIHRhcmdldCBpc1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKCgpID0+ICFfLmlzRW1wdHkodGhpcy5nZXRUYXJnZXQoYXBwSWRLZXksIHBhZ2VJZEtleSkpLCB7XG4gICAgICAgIHdhaXRNczogV0FJVF9GT1JfVEFSR0VUX1RJTUVPVVQsXG4gICAgICAgIGludGVydmFsTXM6IFdBSVRfRk9SX1RBUkdFVF9JTlRFUlZBTCxcbiAgICAgICAgZXJyb3I6ICdObyB0YXJnZXRzIGZvdW5kLCB1bmFibGUgdG8gY29tbXVuaWNhdGUgd2l0aCBkZXZpY2UnLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoIWVyci5tZXNzYWdlLmluY2x1ZGVzKCdDb25kaXRpb24gdW5tZXQnKSkge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHRhcmdldHMgZm91bmQsIHVuYWJsZSB0byBjb21tdW5pY2F0ZSB3aXRoIGRldmljZScpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNlbmQgKGNvbW1hbmQsIG9wdHMgPSB7fSwgd2FpdEZvclJlc3BvbnNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IHRpbWVyID0gbmV3IHRpbWluZy5UaW1lcigpLnN0YXJ0KCk7XG4gICAgY29uc3Qge1xuICAgICAgYXBwSWRLZXksXG4gICAgICBwYWdlSWRLZXlcbiAgICB9ID0gb3B0cztcbiAgICB0cnkge1xuICAgICAgaWYgKCFfLmlzRW1wdHkoYXBwSWRLZXkpICYmICFfLmlzRW1wdHkocGFnZUlkS2V5KSkge1xuICAgICAgICBhd2FpdCB0aGlzLndhaXRGb3JUYXJnZXQoYXBwSWRLZXksIHBhZ2VJZEtleSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5zZW5kVG9EZXZpY2UoY29tbWFuZCwgb3B0cywgd2FpdEZvclJlc3BvbnNlKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxldCB7IG1lc3NhZ2UgPSAnJyB9ID0gZXJyO1xuICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKGAndGFyZ2V0JyBkb21haW4gd2FzIG5vdCBmb3VuZGApKSB7XG4gICAgICAgIGxvZy5pbmZvKCdUaGUgdGFyZ2V0IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IFRhcmdldCBiYXNlZCBjb21tdW5pY2F0aW9uLiAnICtcbiAgICAgICAgICAnV2lsbCBmb2xsb3cgbm9uLXRhcmdldCBiYXNlZCBjb21tdW5pY2F0aW9uLicpO1xuICAgICAgICB0aGlzLmlzVGFyZ2V0QmFzZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc2VuZFRvRGV2aWNlKGNvbW1hbmQsIG9wdHMsIHdhaXRGb3JSZXNwb25zZSk7XG4gICAgICB9IGVsc2UgaWYgKG1lc3NhZ2UuaW5jbHVkZXMoYGRvbWFpbiB3YXMgbm90IGZvdW5kYCkgfHxcbiAgICAgICAgICBtZXNzYWdlLmluY2x1ZGVzKGBzb21lIGFyZ3VtZW50cyBvZiBtZXRob2RgKSB8fFxuICAgICAgICAgIG1lc3NhZ2UuaW5jbHVkZXMoYG1pc3NpbmcgdGFyZ2V0YCkpIHtcbiAgICAgICAgdGhpcy5pc1RhcmdldEJhc2VkID0gdHJ1ZTtcbiAgICAgICAgYXdhaXQgdGhpcy53YWl0Rm9yVGFyZ2V0KGFwcElkS2V5LCBwYWdlSWRLZXkpO1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5zZW5kVG9EZXZpY2UoY29tbWFuZCwgb3B0cywgd2FpdEZvclJlc3BvbnNlKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgbG9nLmRlYnVnKGBTZW5kaW5nIHRvIFdlYiBJbnNwZWN0b3IgdG9vayAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNNaWxsaVNlY29uZHMudG9GaXhlZCgwKX1tc2ApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNlbmRUb0RldmljZSAoY29tbWFuZCwgb3B0cyA9IHt9LCB3YWl0Rm9yUmVzcG9uc2UgPSB0cnVlKSB7XG4gICAgcmV0dXJuIGF3YWl0IG5ldyBCKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIC8vIHByb21pc2UgdG8gYmUgcmVzb2x2ZWQgd2hlbmV2ZXIgcmVtb3RlIGRlYnVnZ2VyXG4gICAgICAvLyByZXBsaWVzIHRvIG91ciByZXF1ZXN0XG5cbiAgICAgIC8vIGtlZXAgdHJhY2sgb2YgdGhlIG1lc3NhZ2VzIGNvbWluZyBhbmQgZ29pbmcgdXNpbmcgYSBzaW1wbGUgc2VxdWVudGlhbCBpZFxuICAgICAgY29uc3QgbXNnSWQgPSB0aGlzLm1zZ0lkKys7XG4gICAgICBsZXQgd3JhcHBlck1zZ0lkID0gbXNnSWQ7XG4gICAgICBpZiAodGhpcy5pc1RhcmdldEJhc2VkKSB7XG4gICAgICAgIC8vIGZvciB0YXJnZXQtYmFzZSBjb21tdW5pY2F0aW9uLCBldmVyeXRoaW5nIGlzIHdyYXBwZWQgdXBcbiAgICAgICAgd3JhcHBlck1zZ0lkID0gdGhpcy5tc2dJZCsrO1xuICAgICAgICAvLyBhY2tub3dsZWRnZSB3cmFwcGVyIG1lc3NhZ2VcbiAgICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbih3cmFwcGVyTXNnSWQudG9TdHJpbmcoKSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFwcElkS2V5ID0gb3B0cy5hcHBJZEtleTtcbiAgICAgIGNvbnN0IHBhZ2VJZEtleSA9IG9wdHMucGFnZUlkS2V5O1xuICAgICAgY29uc3QgdGFyZ2V0SWQgPSB0aGlzLmdldFRhcmdldChhcHBJZEtleSwgcGFnZUlkS2V5KTtcblxuICAgICAgLy8gcmV0cmlldmUgdGhlIGNvcnJlY3QgY29tbWFuZCB0byBzZW5kXG4gICAgICBjb25zdCBmdWxsT3B0cyA9IF8uZGVmYXVsdHMoe1xuICAgICAgICBjb25uSWQ6IHRoaXMuY29ubklkLFxuICAgICAgICBzZW5kZXJJZDogdGhpcy5zZW5kZXJJZCxcbiAgICAgICAgdGFyZ2V0SWQsXG4gICAgICAgIGlkOiBtc2dJZCxcbiAgICAgIH0sIG9wdHMpO1xuICAgICAgY29uc3QgY21kID0gdGhpcy5yZW1vdGVNZXNzYWdlcy5nZXRSZW1vdGVDb21tYW5kKGNvbW1hbmQsIGZ1bGxPcHRzKTtcblxuICAgICAgaWYgKGNtZD8uX19hcmd1bWVudD8uV0lSU29ja2V0RGF0YUtleSkge1xuICAgICAgICAvLyBtYWtlIHN1cmUgdGhlIG1lc3NhZ2UgYmVpbmcgc2VudCBoYXMgYWxsIHRoZSBpbmZvcm1hdGlvbiB0aGF0IGlzIG5lZWRlZFxuICAgICAgICBpZiAoXy5pc05pbChjbWQuX19hcmd1bWVudC5XSVJTb2NrZXREYXRhS2V5LmlkKSkge1xuICAgICAgICAgIGNtZC5fX2FyZ3VtZW50LldJUlNvY2tldERhdGFLZXkuaWQgPSB3cmFwcGVyTXNnSWQ7XG4gICAgICAgIH1cbiAgICAgICAgY21kLl9fYXJndW1lbnQuV0lSU29ja2V0RGF0YUtleSA9XG4gICAgICAgICAgQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoY21kLl9fYXJndW1lbnQuV0lSU29ja2V0RGF0YUtleSkpO1xuICAgICAgfVxuXG4gICAgICBsZXQgbWVzc2FnZUhhbmRsZWQgPSB0cnVlO1xuICAgICAgaWYgKCF3YWl0Rm9yUmVzcG9uc2UpIHtcbiAgICAgICAgLy8gdGhlIHByb21pc2Ugd2lsbCBiZSByZXNvbHZlZCBhcyBzb29uIGFzIHRoZSBzb2NrZXQgaGFzIGJlZW4gc2VudFxuICAgICAgICBtZXNzYWdlSGFuZGxlZCA9IGZhbHNlO1xuICAgICAgICAvLyBkbyBub3QgbG9nIHJlY2VpcHRzXG4gICAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIub25jZShtc2dJZC50b1N0cmluZygpLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgLy8gd2UgYXJlIG5vdCB3YWl0aW5nIGZvciB0aGlzLCBhbmQgaWYgaXQgZXJyb3JzIGl0IGlzIG1vc3QgbGlrZWx5XG4gICAgICAgICAgICAvLyBhIHByb3RvY29sIGNoYW5nZS4gTG9nIGFuZCBjaGVjayBkdXJpbmcgdGVzdGluZ1xuICAgICAgICAgICAgbG9nLmVycm9yKGBSZWNlaXZlZCBlcnJvciBmcm9tIHNlbmQgdGhhdCBpcyBub3QgYmVpbmcgd2FpdGVkIGZvciAoaWQ6ICR7bXNnSWR9KTogJyR7Xy50cnVuY2F0ZShKU09OLnN0cmluZ2lmeShlcnIpLCBEQVRBX0xPR19MRU5HVEgpfSdgKTtcbiAgICAgICAgICAgIC8vIHJlamVjdCwgdGhvdWdoIGl0IGlzIHZlcnkgcmFyZSB0aGF0IHRoaXMgd2lsbCBiZSB0cmlnZ2VyZWQsIHNpbmNlXG4gICAgICAgICAgICAvLyB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZCBkaXJlY3RsdHkgYWZ0ZXIgc2VuZC4gT24gdGhlIG9mZiBjaGFuY2UsXG4gICAgICAgICAgICAvLyB0aG91Z2gsIGl0IHdpbGwgYWxlcnQgb2YgYSBwcm90b2NvbCBjaGFuZ2UuXG4gICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLm1lc3NhZ2VIYW5kbGVyLmxpc3RlbmVycyhjbWQuX19zZWxlY3RvcikubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIucHJlcGVuZE9uY2VMaXN0ZW5lcihjbWQuX19zZWxlY3RvciwgZnVuY3Rpb24gKGVyciwgLi4uYXJncykge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbG9nLmRlYnVnKGBSZWNlaXZlZCByZXNwb25zZSBmcm9tIHNlbmQgKGlkOiAke21zZ0lkfSk6ICcke18udHJ1bmNhdGUoSlNPTi5zdHJpbmdpZnkoYXJncyksIERBVEFfTE9HX0xFTkdUSCl9J2ApO1xuICAgICAgICAgIHJlc29sdmUoYXJncyk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChjbWQ/Ll9fYXJndW1lbnQ/LldJUlNvY2tldERhdGFLZXkpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5vbmNlKG1zZ0lkLnRvU3RyaW5nKCksIGZ1bmN0aW9uIChlcnIsIHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoYFJlbW90ZSBkZWJ1Z2dlciBlcnJvciB3aXRoIGNvZGUgJyR7ZXJyLmNvZGV9JzogJHtlcnIubWVzc2FnZX1gKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxvZy5kZWJ1ZyhgUmVjZWl2ZWQgZGF0YSByZXNwb25zZSBmcm9tIHNlbmQgKGlkOiAke21zZ0lkfSk6ICcke18udHJ1bmNhdGUoSlNPTi5zdHJpbmdpZnkodmFsdWUpLCBEQVRBX0xPR19MRU5HVEgpfSdgKTtcbiAgICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBub3RoaW5nIGVsc2UgaXMgaGFuZGxpbmcgdGhpbmdzLCBzbyBqdXN0IHJlc29sdmUgd2hlbiB0aGUgbWVzc2FnZSBpcyBzZW50XG4gICAgICAgIG1lc3NhZ2VIYW5kbGVkID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1zZyA9IGBTZW5kaW5nICcke2NtZC5fX3NlbGVjdG9yfScgbWVzc2FnZWAgK1xuICAgICAgICAoZnVsbE9wdHMuYXBwSWRLZXkgPyBgIHRvIGFwcCAnJHtmdWxsT3B0cy5hcHBJZEtleX0nYCA6ICcnKSArXG4gICAgICAgIChmdWxsT3B0cy5wYWdlSWRLZXkgPyBgLCBwYWdlICcke2Z1bGxPcHRzLnBhZ2VJZEtleX0nYCA6ICcnKSArXG4gICAgICAgICh0aGlzLm5lZWRzVGFyZ2V0ICYmIHRhcmdldElkID8gYCwgdGFyZ2V0ICcke3RhcmdldElkfSdgIDogJycpICtcbiAgICAgICAgYCAoaWQ6ICR7bXNnSWR9KTogJyR7Y29tbWFuZH0nYDtcbiAgICAgIGxvZy5kZWJ1Zyhtc2cpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5zZW5kTWVzc2FnZShjbWQpO1xuICAgICAgICBpZiAoIW1lc3NhZ2VIYW5kbGVkKSB7XG4gICAgICAgICAgLy8gVGhlcmUgYXJlIG5vIGhhbmRsZXJzIHdhaXRpbmcgZm9yIGEgcmVzcG9uc2UgYmVmb3JlIHJlc29sdmluZyxcbiAgICAgICAgICAvLyBhbmQgbm8gZXJyb3JzIHNlbmRpbmcgdGhlIG1lc3NhZ2Ugb3ZlciB0aGUgc29ja2V0LCBzbyByZXNvbHZlXG4gICAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgY29ubmVjdCAoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICAgIHRocm93IG5ldyBFcnJvcihgU3ViLWNsYXNzZXMgbmVlZCB0byBpbXBsZW1lbnQgYSAnY29ubmVjdCcgZnVuY3Rpb25gKTtcbiAgfVxuXG4gIGFzeW5jIGRpc2Nvbm5lY3QgKCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlcXVpcmUtYXdhaXRcbiAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICB9XG5cbiAgYXN5bmMgc2VuZE1lc3NhZ2UgKC8qIGNvbW1hbmQgKi8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTdWItY2xhc3NlcyBuZWVkIHRvIGltcGxlbWVudCBhICdzZW5kTWVzc2FnZScgZnVuY3Rpb25gKTtcbiAgfVxuXG4gIGFzeW5jIHJlY2VpdmUgKC8qIGRhdGEgKi8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTdWItY2xhc3NlcyBuZWVkIHRvIGltcGxlbWVudCBhICdyZWNlaXZlJyBmdW5jdGlvbmApO1xuICB9XG5cbiAgYWRkVGFyZ2V0IChlcnIsIGFwcCwgdGFyZ2V0SW5mbykge1xuICAgIGlmIChfLmlzTmlsKHRhcmdldEluZm8/LnRhcmdldElkKSkge1xuICAgICAgbG9nLndhcm4oYFJlY2VpdmVkICdUYXJnZXQudGFyZ2V0Q3JlYXRlZCcgZXZlbnQgZm9yIGFwcCAnJHthcHB9JyB3aXRoIG5vIHRhcmdldC4gU2tpcHBpbmdgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKF8uaXNFbXB0eSh0aGlzLnBlbmRpbmdUYXJnZXROb3RpZmljYXRpb24pICYmICF0YXJnZXRJbmZvLmlzUHJvdmlzaW9uYWwpIHtcbiAgICAgIGxvZy53YXJuKGBSZWNlaXZlZCAnVGFyZ2V0LnRhcmdldENyZWF0ZWQnIGV2ZW50IGZvciBhcHAgJyR7YXBwfScgd2l0aCBubyBwZW5kaW5nIHJlcXVlc3Q6ICR7SlNPTi5zdHJpbmdpZnkodGFyZ2V0SW5mbyl9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRhcmdldEluZm8uaXNQcm92aXNpb25hbCkge1xuICAgICAgbG9nLmRlYnVnKGBQcm92aXNpb25hbCB0YXJnZXQgY3JlYXRlZCBmb3IgYXBwICcke2FwcH0nLCAnJHt0YXJnZXRJbmZvLnRhcmdldElkfScuIElnbm9yaW5nIHVudGlsIHRhcmdldCB1cGRhdGUgZXZlbnRgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBbYXBwSWRLZXksIHBhZ2VJZEtleV0gPSB0aGlzLnBlbmRpbmdUYXJnZXROb3RpZmljYXRpb247XG5cbiAgICBsb2cuZGVidWcoYFRhcmdldCBjcmVhdGVkIGZvciBhcHAgJyR7YXBwSWRLZXl9JyBhbmQgcGFnZSAnJHtwYWdlSWRLZXl9JzogJHtKU09OLnN0cmluZ2lmeSh0YXJnZXRJbmZvKX1gKTtcbiAgICBpZiAoXy5oYXModGhpcy50YXJnZXRzW2FwcElkS2V5XSwgcGFnZUlkS2V5KSkge1xuICAgICAgbG9nLmRlYnVnKGBUaGVyZSBpcyBhbHJlYWR5IGEgdGFyZ2V0IGZvciB0aGlzIGFwcCBhbmQgcGFnZSAoJyR7dGhpcy50YXJnZXRzW2FwcElkS2V5XVtwYWdlSWRLZXldfScpLiBUaGlzIG1pZ2h0IGNhdXNlIHByb2JsZW1zYCk7XG4gICAgfVxuICAgIHRoaXMudGFyZ2V0c1thcHBdID0gdGhpcy50YXJnZXRzW2FwcF0gfHwge307XG4gICAgdGhpcy50YXJnZXRzW2FwcElkS2V5XVtwYWdlSWRLZXldID0gdGFyZ2V0SW5mby50YXJnZXRJZDtcbiAgfVxuXG4gIHVwZGF0ZVRhcmdldCAoZXJyLCBhcHAsIG9sZFRhcmdldElkLCBuZXdUYXJnZXRJZCkge1xuICAgIGxvZy5kZWJ1ZyhgVGFyZ2V0IHVwZGF0ZWQgZm9yIGFwcCAnJHthcHB9Jy4gT2xkIHRhcmdldDogJyR7b2xkVGFyZ2V0SWR9JywgbmV3IHRhcmdldDogJyR7bmV3VGFyZ2V0SWR9J2ApO1xuICAgIGlmICghdGhpcy50YXJnZXRzW2FwcF0pIHtcbiAgICAgIGxvZy53YXJuKGBObyBleGlzdGluZyB0YXJnZXQgZm9yIGFwcCAnJHthcHB9Jy4gTm90IHN1cmUgd2hhdCB0byBkb2ApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBzYXZlIHRoaXMsIHRvIGJlIHVzZWQgaWYvd2hlbiB0aGUgZXhpc3RpbmcgdGFyZ2V0IGlzIGRlc3Ryb3llZFxuICAgIHRoaXMudGFyZ2V0c1thcHBdLnByb3Zpc2lvbmFsID0ge1xuICAgICAgb2xkVGFyZ2V0SWQsXG4gICAgICBuZXdUYXJnZXRJZCxcbiAgICB9O1xuICB9XG5cbiAgcmVtb3ZlVGFyZ2V0IChlcnIsIGFwcCwgdGFyZ2V0SW5mbykge1xuICAgIGlmIChfLmlzTmlsKHRhcmdldEluZm8/LnRhcmdldElkKSkge1xuICAgICAgbG9nLmRlYnVnKGBSZWNlaXZlZCAnVGFyZ2V0LnRhcmdldERlc3Ryb3llZCcgZXZlbnQgd2l0aCBubyB0YXJnZXQuIFNraXBwaW5nYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbG9nLmRlYnVnKGBUYXJnZXQgZGVzdHJveWVkIGZvciBhcHAgJyR7YXBwfSc6ICR7dGFyZ2V0SW5mby50YXJnZXRJZH1gKTtcblxuICAgIC8vIGdvIHRocm91Z2ggdGhlIHRhcmdldHMgYW5kIGZpbmQgdGhlIG9uZSB0aGF0IGhhcyBhIHdhaXRpbmcgcHJvdmlzaW9uYWwgdGFyZ2V0XG4gICAgaWYgKHRoaXMudGFyZ2V0c1thcHBdPy5wcm92aXNpb25hbD8ub2xkVGFyZ2V0SWQgPT09IHRhcmdldEluZm8udGFyZ2V0SWQpIHtcbiAgICAgIGNvbnN0IHtvbGRUYXJnZXRJZCwgbmV3VGFyZ2V0SWR9ID0gdGhpcy50YXJnZXRzW2FwcF0ucHJvdmlzaW9uYWw7XG4gICAgICBkZWxldGUgdGhpcy50YXJnZXRzW2FwcF0ucHJvdmlzaW9uYWw7XG5cbiAgICAgIC8vIHdlIGRvIG5vdCBrbm93IHRoZSBwYWdlLCBzbyBnbyB0aHJvdWdoIGFuZCBmaW5kIHRoZSBleGlzdGluZyB0YXJnZXRcbiAgICAgIGNvbnN0IHRhcmdldHMgPSB0aGlzLnRhcmdldHNbYXBwXTtcbiAgICAgIGZvciAoY29uc3QgW3BhZ2UsIHRhcmdldElkXSBvZiBfLnRvUGFpcnModGFyZ2V0cykpIHtcbiAgICAgICAgaWYgKHRhcmdldElkID09PSBvbGRUYXJnZXRJZCkge1xuICAgICAgICAgIGxvZy5kZWJ1ZyhgRm91bmQgcHJvdmlzaW9uYWwgdGFyZ2V0IGZvciBhcHAgJyR7YXBwfScuIE9sZCB0YXJnZXQ6ICcke29sZFRhcmdldElkfScsIG5ldyB0YXJnZXQ6ICcke25ld1RhcmdldElkfScuIFVwZGF0aW5nYCk7XG4gICAgICAgICAgdGFyZ2V0c1twYWdlXSA9IG5ld1RhcmdldElkO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbG9nLndhcm4oYFByb3Zpc2lvbmFsIHRhcmdldCBmb3IgYXBwICcke2FwcH0nIGZvdW5kLCBidXQgbm8gc3VpdGFibGUgZXhpc3RpbmcgdGFyZ2V0IGZvdW5kLiBUaGlzIG1heSBjYXVzZSBwcm9ibGVtc2ApO1xuICAgICAgbG9nLndhcm4oYE9sZCB0YXJnZXQ6ICcke29sZFRhcmdldElkfScsIG5ldyB0YXJnZXQ6ICcke25ld1RhcmdldElkfScuIEV4aXN0aW5nIHRhcmdldHM6ICR7SlNPTi5zdHJpbmdpZnkodGFyZ2V0cyl9YCk7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlcmUgaXMgbm8gd2FpdGluZyBwcm92aXNpb25hbCB0YXJnZXQsIGp1c3QgZ2V0IHJpZCBvZiB0aGUgZXhpc3Rpbmcgb25lXG4gICAgY29uc3QgdGFyZ2V0cyA9IHRoaXMudGFyZ2V0c1thcHBdO1xuICAgIGZvciAoY29uc3QgW3BhZ2UsIHRhcmdldElkXSBvZiBfLnRvUGFpcnModGFyZ2V0cykpIHtcbiAgICAgIGlmICh0YXJnZXRJZCA9PT0gdGFyZ2V0SW5mby50YXJnZXRJZCkge1xuICAgICAgICBkZWxldGUgdGFyZ2V0c1twYWdlXTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBsb2cuZGVidWcoYFRhcmdldCAnJHt0YXJnZXRJbmZvLnRhcmdldElkfScgZGVsZXRlZCBmb3IgYXBwICcke2FwcH0nLCBidXQgbm8gc3VjaCB0YXJnZXQgZXhpc3RzYCk7XG4gIH1cblxuICBnZXRUYXJnZXQgKGFwcElkS2V5LCBwYWdlSWRLZXkpIHtcbiAgICByZXR1cm4gKHRoaXMudGFyZ2V0c1thcHBJZEtleV0gfHwge30pW3BhZ2VJZEtleV07XG4gIH1cblxuICBhc3luYyBzZWxlY3RQYWdlIChhcHBJZEtleSwgcGFnZUlkS2V5KSB7XG4gICAgdGhpcy5wZW5kaW5nVGFyZ2V0Tm90aWZpY2F0aW9uID0gW2FwcElkS2V5LCBwYWdlSWRLZXldO1xuICAgIHRoaXMuc2hvdWxkQ2hlY2tGb3JUYXJnZXQgPSBmYWxzZTtcblxuICAgIC8vIGdvIHRocm91Z2ggdGhlIHN0ZXBzIHRoYXQgdGhlIERlc2t0b3AgU2FmYXJpIHN5c3RlbVxuICAgIC8vIGdvZXMgdGhyb3VnaCB0byBpbml0aWFsaXplIHRoZSBXZWIgSW5zcGVjdG9yIHNlc3Npb25cblxuICAgIGNvbnN0IHNlbmRPcHRzID0ge1xuICAgICAgYXBwSWRLZXksXG4gICAgICBwYWdlSWRLZXksXG4gICAgfTtcblxuICAgIC8vIGhpZ2hsaWdodCBhbmQgdGhlbiB1bi1oaWdobGlnaHQgdGhlIHdlYnZpZXdcbiAgICBmb3IgKGNvbnN0IGVuYWJsZWQgb2YgW3RydWUsIGZhbHNlXSkge1xuICAgICAgYXdhaXQgdGhpcy5zZW5kKCdpbmRpY2F0ZVdlYlZpZXcnLCBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgZW5hYmxlZCxcbiAgICAgIH0sIHNlbmRPcHRzKSwgZmFsc2UpO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuc2VuZCgnc2V0U2VuZGVyS2V5Jywgc2VuZE9wdHMpO1xuICAgIGxvZy5kZWJ1ZygnU2VuZGVyIGtleSBzZXQnKTtcblxuICAgIGlmICh0aGlzLmlzVGFyZ2V0QmFzZWQgJiYgdXRpbC5jb21wYXJlVmVyc2lvbnModGhpcy5wbGF0Zm9ybVZlcnNpb24sICc8JywgTUlOX1BMQVRGT1JNX05PX1RBUkdFVF9FWElTVFMpKSB7XG4gICAgICBhd2FpdCB0aGlzLnNlbmQoJ1RhcmdldC5leGlzdHMnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIH1cblxuICAgIHRoaXMuc2hvdWxkQ2hlY2tGb3JUYXJnZXQgPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMuZnVsbFBhZ2VJbml0aWFsaXphdGlvbikge1xuICAgICAgYXdhaXQgdGhpcy5pbml0aWFsaXplUGFnZUZ1bGwoYXBwSWRLZXksIHBhZ2VJZEtleSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVBhZ2UoYXBwSWRLZXksIHBhZ2VJZEtleSk7XG4gICAgfVxuICB9XG5cbiAgLypcbiAgICogUGVyZm9ybSB0aGUgbWluaW1hbCBpbml0aWFsaXphdGlvbiB0byBnZXQgdGhlIFdlYiBJbnNwZWN0b3Igd29ya2luZ1xuICAgKi9cbiAgYXN5bmMgaW5pdGlhbGl6ZVBhZ2UgKGFwcElkS2V5LCBwYWdlSWRLZXkpIHtcbiAgICBjb25zdCBzZW5kT3B0cyA9IHtcbiAgICAgIGFwcElkS2V5LFxuICAgICAgcGFnZUlkS2V5LFxuICAgIH07XG5cbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0luc3BlY3Rvci5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnUGFnZS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuXG4gICAgLy8gZ28gdGhyb3VnaCB0aGUgdGFza3MgdG8gaW5pdGlhbGl6ZVxuICAgIGF3YWl0IHRoaXMuc2VuZCgnTmV0d29yay5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnUnVudGltZS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnSGVhcC5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnRGVidWdnZXIuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0NvbnNvbGUuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0luc3BlY3Rvci5pbml0aWFsaXplZCcsIHNlbmRPcHRzLCBmYWxzZSk7XG4gIH1cblxuICAvKlxuICAgKiBNaW1pYyBldmVyeSBzdGVwIHRoYXQgRGVza3RvcCBTYWZhcmkgRGV2ZWxvcCB0b29scyB1c2VzIHRvIGluaXRpYWxpemUgYVxuICAgKiBXZWIgSW5zcGVjdG9yIHNlc3Npb25cbiAgICovXG4gIGFzeW5jIGluaXRpYWxpemVQYWdlRnVsbCAoYXBwSWRLZXksIHBhZ2VJZEtleSkge1xuICAgIGNvbnN0IHNlbmRPcHRzID0ge1xuICAgICAgYXBwSWRLZXksXG4gICAgICBwYWdlSWRLZXksXG4gICAgfTtcblxuICAgIGF3YWl0IHRoaXMuc2VuZCgnSW5zcGVjdG9yLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdQYWdlLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG5cbiAgICAvLyBnbyB0aHJvdWdoIHRoZSB0YXNrcyB0byBpbml0aWFsaXplXG4gICAgYXdhaXQgdGhpcy5zZW5kKCdQYWdlLmdldFJlc291cmNlVHJlZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdOZXR3b3JrLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdOZXR3b3JrLnNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkJywgT2JqZWN0LmFzc2lnbih7XG4gICAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgfSwgc2VuZE9wdHMpLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdET01TdG9yYWdlLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdEYXRhYmFzZS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnSW5kZXhlZERCLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdDU1MuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ1J1bnRpbWUuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0hlYXAuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ01lbW9yeS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnQXBwbGljYXRpb25DYWNoZS5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnQXBwbGljYXRpb25DYWNoZS5nZXRGcmFtZXNXaXRoTWFuaWZlc3RzJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ1RpbWVsaW5lLnNldEluc3RydW1lbnRzJywgT2JqZWN0LmFzc2lnbih7XG4gICAgICBpbnN0cnVtZW50czogWydUaW1lbGluZScsICdTY3JpcHRQcm9maWxlcicsICdDUFUnXSxcbiAgICB9LCBzZW5kT3B0cyksIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ1RpbWVsaW5lLnNldEF1dG9DYXB0dXJlRW5hYmxlZCcsIE9iamVjdC5hc3NpZ24oe1xuICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgfSwgc2VuZE9wdHMpLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdEZWJ1Z2dlci5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnRGVidWdnZXIuc2V0QnJlYWtwb2ludHNBY3RpdmUnLCBPYmplY3QuYXNzaWduKHtcbiAgICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICB9LCBzZW5kT3B0cyksIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ0RlYnVnZ2VyLnNldFBhdXNlT25FeGNlcHRpb25zJywgT2JqZWN0LmFzc2lnbih7XG4gICAgICBzdGF0ZTogJ25vbmUnLFxuICAgIH0sIHNlbmRPcHRzKSwgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnRGVidWdnZXIuc2V0UGF1c2VPbkFzc2VydGlvbnMnLCBPYmplY3QuYXNzaWduKHtcbiAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIH0sIHNlbmRPcHRzKSwgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnRGVidWdnZXIuc2V0QXN5bmNTdGFja1RyYWNlRGVwdGgnLCBPYmplY3QuYXNzaWduKHtcbiAgICAgIGRlcHRoOiAyMDAsXG4gICAgfSwgc2VuZE9wdHMpLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdEZWJ1Z2dlci5zZXRQYXVzZUZvckludGVybmFsU2NyaXB0cycsIE9iamVjdC5hc3NpZ24oe1xuICAgICAgc2hvdWxkUGF1c2U6IGZhbHNlLFxuICAgIH0sIHNlbmRPcHRzKSwgZmFsc2UpO1xuXG4gICAgYXdhaXQgdGhpcy5zZW5kKCdMYXllclRyZWUuZW5hYmxlJywgc2VuZE9wdHMsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnNlbmQoJ1dvcmtlci5lbmFibGUnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc2VuZCgnQ2FudmFzLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdDb25zb2xlLmVuYWJsZScsIHNlbmRPcHRzLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zZW5kKCdET00uZ2V0RG9jdW1lbnQnLCBzZW5kT3B0cywgZmFsc2UpO1xuICAgIGNvbnN0IGxvZ2dpbmdDaGFubmVscyA9IGF3YWl0IHRoaXMuc2VuZCgnQ29uc29sZS5nZXRMb2dnaW5nQ2hhbm5lbHMnLCBzZW5kT3B0cyk7XG4gICAgZm9yIChjb25zdCBzb3VyY2Ugb2YgKGxvZ2dpbmdDaGFubmVscy5jaGFubmVscyB8fCBbXSkubWFwKChlbnRyeSkgPT4gZW50cnkuc291cmNlKSkge1xuICAgICAgYXdhaXQgdGhpcy5zZW5kKCdDb25zb2xlLnNldExvZ2dpbmdDaGFubmVsTGV2ZWwnLCBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgc291cmNlLFxuICAgICAgICBsZXZlbDogJ3ZlcmJvc2UnLFxuICAgICAgfSwgc2VuZE9wdHMpLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5zZW5kKCdJbnNwZWN0b3IuaW5pdGlhbGl6ZWQnLCBzZW5kT3B0cywgZmFsc2UpO1xuICB9XG5cbiAgYXN5bmMgc2VsZWN0QXBwIChhcHBJZEtleSkge1xuICAgIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAvLyBsb2NhbCBjYWxsYmFjaywgdGVtcG9yYXJpbHkgYWRkZWQgYXMgY2FsbGJhY2sgdG9cbiAgICAgIC8vIGBfcnBjX2FwcGxpY2F0aW9uQ29ubmVjdGVkOmAgcmVtb3RlIGRlYnVnZ2VyIHJlc3BvbnNlXG4gICAgICAvLyB0byBoYW5kbGUgdGhlIGluaXRpYWwgY29ubmVjdGlvblxuICAgICAgY29uc3Qgb25BcHBDaGFuZ2UgPSAoZXJyLCBkaWN0KSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZnJvbSB0aGUgZGljdGlvbmFyeSByZXR1cm5lZCwgZ2V0IHRoZSBpZHNcbiAgICAgICAgY29uc3Qgb2xkQXBwSWRLZXkgPSBkaWN0LldJUkhvc3RBcHBsaWNhdGlvbklkZW50aWZpZXJLZXk7XG4gICAgICAgIGNvbnN0IGNvcnJlY3RBcHBJZEtleSA9IGRpY3QuV0lSQXBwbGljYXRpb25JZGVudGlmaWVyS2V5O1xuXG4gICAgICAgIC8vIGlmIHRoaXMgaXMgYSByZXBvcnQgb2YgYSBwcm94eSByZWRpcmVjdCBmcm9tIHRoZSByZW1vdGUgZGVidWdnZXJcbiAgICAgICAgLy8gd2Ugd2FudCB0byB1cGRhdGUgb3VyIGRpY3Rpb25hcnkgYW5kIGdldCBhIG5ldyBhcHAgaWRcbiAgICAgICAgaWYgKG9sZEFwcElkS2V5ICYmIGNvcnJlY3RBcHBJZEtleSAhPT0gb2xkQXBwSWRLZXkpIHtcbiAgICAgICAgICBsb2cuZGVidWcoYFdlIHdlcmUgbm90aWZpZWQgd2UgbWlnaHQgaGF2ZSBjb25uZWN0ZWQgdG8gdGhlIHdyb25nIGFwcC4gYCArXG4gICAgICAgICAgICAgICAgICAgIGBVc2luZyBpZCAke2NvcnJlY3RBcHBJZEtleX0gaW5zdGVhZCBvZiAke29sZEFwcElkS2V5fWApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignTmV3IGFwcGxpY2F0aW9uIGhhcyBjb25uZWN0ZWQnKSk7XG4gICAgICB9O1xuICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5wcmVwZW5kT25jZUxpc3RlbmVyKCdfcnBjX2FwcGxpY2F0aW9uQ29ubmVjdGVkOicsIG9uQXBwQ2hhbmdlKTtcblxuICAgICAgLy8gZG8gdGhlIGFjdHVhbCBjb25uZWN0aW5nIHRvIHRoZSBhcHBcbiAgICAgIHJldHVybiAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBsZXQgcGFnZURpY3QsIGNvbm5lY3RlZEFwcElkS2V5O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIChbY29ubmVjdGVkQXBwSWRLZXksIHBhZ2VEaWN0XSA9IGF3YWl0IHRoaXMuc2VuZCgnY29ubmVjdFRvQXBwJywge1xuICAgICAgICAgICAgYXBwSWRLZXlcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGxvZy53YXJuKGBVbmFibGUgdG8gY29ubmVjdCB0byBhcHA6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzb21ldGltZXMgdGhlIGNvbm5lY3QgbG9naWMgaGFwcGVucywgYnV0IHdpdGggYW4gZW1wdHkgZGljdGlvbmFyeVxuICAgICAgICAvLyB3aGljaCBsZWFkcyB0byB0aGUgcmVtb3RlIGRlYnVnZ2VyIGdldHRpbmcgZGlzY29ubmVjdGVkLCBhbmQgaW50byBhIGxvb3BcbiAgICAgICAgaWYgKF8uaXNFbXB0eShwYWdlRGljdCkpIHtcbiAgICAgICAgICBsZXQgbXNnID0gJ0VtcHR5IHBhZ2UgZGljdGlvbmFyeSByZWNlaXZlZCc7XG4gICAgICAgICAgbG9nLmRlYnVnKG1zZyk7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihtc2cpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNvbHZlKFtjb25uZWN0ZWRBcHBJZEtleSwgcGFnZURpY3RdKTtcbiAgICAgICAgfVxuICAgICAgfSkoKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uRXhlY3V0aW9uQ29udGV4dENyZWF0ZWQgKGVyciwgY29udGV4dCkge1xuICAgIC8vIHsgaWQ6IDIsIGlzUGFnZUNvbnRleHQ6IHRydWUsIG5hbWU6ICcnLCBmcmFtZUlkOiAnMC4xJyB9XG4gICAgLy8gcmlnaHQgbm93IHdlIGhhdmUgbm8gd2F5IHRvIG1hcCBjb250ZXh0cyB0byBhcHBzL3BhZ2VzXG4gICAgLy8gc28ganVzdCBzdG9yZVxuICAgIHRoaXMuY29udGV4dHMucHVzaChjb250ZXh0LmlkKTtcbiAgfVxuXG4gIG9uR2FyYmFnZUNvbGxlY3RlZCAoKSB7XG4gICAgLy8ganVzdCB3YW50IHRvIGxvZyB0aGF0IHRoaXMgaXMgaGFwcGVuaW5nLCBhcyBpdCBjYW4gYWZmZWN0IG9wZXJ0aW9uXG4gICAgbG9nLmRlYnVnKGBXZWIgSW5zcGVjdG9yIGdhcmJhZ2UgY29sbGVjdGVkYCk7XG4gIH1cblxuICBvblNjcmlwdFBhcnNlZCAoZXJyLCBzY3JpcHRJbmZvKSB7XG4gICAgLy8geyBzY3JpcHRJZDogJzEzJywgdXJsOiAnJywgc3RhcnRMaW5lOiAwLCBzdGFydENvbHVtbjogMCwgZW5kTGluZTogODIsIGVuZENvbHVtbjogMyB9XG4gICAgbG9nLmRlYnVnKGBTY3JpcHQgcGFyc2VkOiAke0pTT04uc3RyaW5naWZ5KHNjcmlwdEluZm8pfWApO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBQUEsZUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsU0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsT0FBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsT0FBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUksU0FBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUssa0JBQUEsR0FBQU4sc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFNLFFBQUEsR0FBQU4sT0FBQTtBQUdBLE1BQU1PLGVBQWUsR0FBRztFQUFDQyxNQUFNLEVBQUU7QUFBRyxDQUFDO0FBRXJDLE1BQU1DLHVCQUF1QixHQUFHLEtBQUs7QUFDckMsTUFBTUMsd0JBQXdCLEdBQUcsSUFBSTtBQUVyQyxNQUFNQyw2QkFBNkIsR0FBRyxNQUFNO0FBRzVDLE1BQU1DLDZCQUE2QixHQUFHLE1BQU07QUFFNUMsU0FBU0MsYUFBYUEsQ0FBRUMsUUFBUSxFQUFFQyxlQUFlLEVBQUU7RUFJakQsTUFBTUMsYUFBYSxHQUFHQyxhQUFJLENBQUNDLGVBQWUsQ0FBQ0gsZUFBZSxFQUFFLElBQUksRUFBRUosNkJBQTZCLENBQUM7RUFDaEdRLGVBQUcsQ0FBQ0MsS0FBSyxDQUFFLDhDQUE2Q04sUUFBUSxHQUFHLEVBQUUsR0FBRyxNQUFPLCtCQUE4QkMsZUFBZ0IsSUFBRyxDQUFDO0VBQ2pJSSxlQUFHLENBQUNDLEtBQUssQ0FBRSwwQ0FBeUNULDZCQUE4QixNQUFLSyxhQUFjLEVBQUMsQ0FBQztFQUN2RyxPQUFPQSxhQUFhO0FBQ3RCO0FBRWUsTUFBTUssU0FBUyxDQUFDO0VBQzdCQyxXQUFXQSxDQUFFQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUU7SUFDdEIsSUFBSSxDQUFDQyxRQUFRLEdBQUcsRUFBRTtJQUNsQixJQUFJLENBQUNDLHFCQUFxQixHQUFHLENBQUMsQ0FBQ0YsSUFBSSxDQUFDRyxvQkFBb0I7SUFFeEQsTUFBTTtNQUNKQyxRQUFRO01BQ1JaLGVBQWUsR0FBRyxDQUFDLENBQUM7TUFDcEJELFFBQVEsR0FBRyxJQUFJO01BQ2ZjLG1CQUFtQixHQUFHLEtBQUs7TUFDM0JDLDBCQUEwQixHQUFHLEtBQUs7TUFDbENDLDBCQUEwQjtNQUMxQkMsZUFBZTtNQUNmQyxzQkFBc0IsR0FBRztJQUMzQixDQUFDLEdBQUdULElBQUk7SUFFUixJQUFJLENBQUNULFFBQVEsR0FBR0EsUUFBUTtJQUV4QixJQUFJLENBQUNtQixXQUFXLEdBQUcsS0FBSztJQUN4QixJQUFJLENBQUNDLE1BQU0sR0FBR2pCLGFBQUksQ0FBQ2tCLE1BQU0sQ0FBQyxDQUFDO0lBQzNCLElBQUksQ0FBQ0MsUUFBUSxHQUFHbkIsYUFBSSxDQUFDa0IsTUFBTSxDQUFDLENBQUM7SUFDN0IsSUFBSSxDQUFDRSxLQUFLLEdBQUcsQ0FBQztJQUVkLElBQUksQ0FBQ1QsbUJBQW1CLEdBQUdBLG1CQUFtQjtJQUM5QyxJQUFJLENBQUNDLDBCQUEwQixHQUFHQSwwQkFBMEI7SUFDNUQsSUFBSSxDQUFDRSxlQUFlLEdBQUdBLGVBQWU7SUFDdEMsSUFBSSxDQUFDRCwwQkFBMEIsR0FBR0EsMEJBQTBCO0lBRTVELElBQUksQ0FBQ0Usc0JBQXNCLEdBQUdBLHNCQUFzQjtJQUVwRCxJQUFJLENBQUNMLFFBQVEsR0FBR0EsUUFBUTtJQUN4QixJQUFJLENBQUNaLGVBQWUsR0FBR0EsZUFBZTtJQUV0QyxJQUFJLENBQUN1QixTQUFTLEdBQUcsRUFBRTtJQUNuQixJQUFJLENBQUNkLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFHbEIsSUFBSSxDQUFDWCxhQUFhLEdBQUdBLGFBQWEsQ0FBQ0MsUUFBUSxFQUFFLElBQUksQ0FBQ0MsZUFBZSxDQUFDO0VBQ3BFO0VBRUEsSUFBSXdCLFFBQVFBLENBQUEsRUFBSTtJQUNkLE9BQU8sSUFBSSxDQUFDRCxTQUFTO0VBQ3ZCO0VBRUEsSUFBSUUsV0FBV0EsQ0FBQSxFQUFJO0lBQ2pCLE9BQU8sSUFBSSxDQUFDZCxvQkFBb0IsSUFBSSxJQUFJLENBQUNiLGFBQWE7RUFDeEQ7RUFFQSxJQUFJNEIsT0FBT0EsQ0FBQSxFQUFJO0lBQ2IsT0FBTyxJQUFJLENBQUNqQixRQUFRO0VBQ3RCO0VBRUEsSUFBSUUsb0JBQW9CQSxDQUFBLEVBQUk7SUFDMUIsT0FBTyxJQUFJLENBQUNELHFCQUFxQjtFQUNuQztFQUVBLElBQUlDLG9CQUFvQkEsQ0FBRUEsb0JBQW9CLEVBQUU7SUFDOUMsSUFBSSxDQUFDRCxxQkFBcUIsR0FBRyxDQUFDLENBQUNDLG9CQUFvQjtFQUNyRDtFQUVBLElBQUlPLFdBQVdBLENBQUEsRUFBSTtJQUNqQixPQUFPLElBQUksQ0FBQ1MsU0FBUztFQUN2QjtFQUVBLElBQUlULFdBQVdBLENBQUVTLFNBQVMsRUFBRTtJQUMxQixJQUFJLENBQUNBLFNBQVMsR0FBRyxDQUFDLENBQUNBLFNBQVM7RUFDOUI7RUFFQUMsRUFBRUEsQ0FBRUMsS0FBSyxFQUFFQyxRQUFRLEVBQUU7SUFDbkIsSUFBSSxDQUFDQyxjQUFjLENBQUNILEVBQUUsQ0FBQ0MsS0FBSyxFQUFFQyxRQUFRLENBQUM7SUFDdkMsT0FBTyxJQUFJO0VBQ2I7RUFFQUUsSUFBSUEsQ0FBRUgsS0FBSyxFQUFFQyxRQUFRLEVBQUU7SUFDckIsSUFBSSxDQUFDQyxjQUFjLENBQUNDLElBQUksQ0FBQ0gsS0FBSyxFQUFFQyxRQUFRLENBQUM7SUFDekMsT0FBTyxJQUFJO0VBQ2I7RUFFQUcsR0FBR0EsQ0FBRUosS0FBSyxFQUFFQyxRQUFRLEVBQUU7SUFDcEIsSUFBSSxDQUFDQyxjQUFjLENBQUNFLEdBQUcsQ0FBQ0osS0FBSyxFQUFFQyxRQUFRLENBQUM7SUFDeEMsT0FBTyxJQUFJO0VBQ2I7RUFFQSxJQUFJaEMsYUFBYUEsQ0FBRUEsYUFBYSxFQUFFO0lBQ2hDTSxlQUFHLENBQUM4QixJQUFJLENBQUUseUNBQXdDcEMsYUFBYSxHQUFHLGNBQWMsR0FBRyw2QkFBOEIsZ0JBQWUsQ0FBQztJQUNqSSxJQUFJLENBQUNxQyxjQUFjLEdBQUdyQyxhQUFhO0lBRW5DLElBQUksQ0FBQyxJQUFJLENBQUNzQyxjQUFjLEVBQUU7TUFDeEIsSUFBSSxDQUFDQSxjQUFjLEdBQUcsSUFBSUMsdUJBQWMsQ0FBQ3ZDLGFBQWEsQ0FBQztJQUN6RCxDQUFDLE1BQU07TUFDTCxJQUFJLENBQUNzQyxjQUFjLENBQUN0QyxhQUFhLEdBQUdBLGFBQWE7SUFDbkQ7SUFFQSxJQUFJLENBQUMsSUFBSSxDQUFDaUMsY0FBYyxFQUFFO01BQ3hCLElBQUksQ0FBQ0EsY0FBYyxHQUFHLElBQUlPLDBCQUFpQixDQUFDeEMsYUFBYSxDQUFDO01BRzFELElBQUksQ0FBQ2lDLGNBQWMsQ0FBQ0gsRUFBRSxDQUFDLHNCQUFzQixFQUFFLElBQUksQ0FBQ1csU0FBUyxDQUFDQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDekUsSUFBSSxDQUFDVCxjQUFjLENBQUNILEVBQUUsQ0FBQyxtQ0FBbUMsRUFBRSxJQUFJLENBQUNhLFlBQVksQ0FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQ3pGLElBQUksQ0FBQ1QsY0FBYyxDQUFDSCxFQUFFLENBQUMsd0JBQXdCLEVBQUUsSUFBSSxDQUFDYyxZQUFZLENBQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUM5RSxJQUFJLENBQUNULGNBQWMsQ0FBQ0gsRUFBRSxDQUFDLGlDQUFpQyxFQUFFLElBQUksQ0FBQ2UseUJBQXlCLENBQUNILElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUNwRyxJQUFJLENBQUNULGNBQWMsQ0FBQ0gsRUFBRSxDQUFDLHVCQUF1QixFQUFFLElBQUksQ0FBQ2dCLGtCQUFrQixDQUFDSixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckYsQ0FBQyxNQUFNO01BQ0wsSUFBSSxDQUFDVCxjQUFjLENBQUNqQyxhQUFhLEdBQUdBLGFBQWE7SUFDbkQ7RUFDRjtFQUVBLElBQUlBLGFBQWFBLENBQUEsRUFBSTtJQUNuQixPQUFPLElBQUksQ0FBQ3FDLGNBQWM7RUFDNUI7RUFFQSxNQUFNVSxhQUFhQSxDQUFFQyxRQUFRLEVBQUVDLFNBQVMsRUFBRUMsS0FBSyxHQUFHLEtBQUssRUFBRTtJQUN2RCxJQUFJLENBQUNBLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQ3ZCLFdBQVcsRUFBRTtNQUMvQjtJQUNGO0lBRUEsSUFBSSxJQUFJLENBQUN3QixTQUFTLENBQUNILFFBQVEsRUFBRUMsU0FBUyxDQUFDLEVBQUU7TUFDdkM7SUFDRjtJQUdBLElBQUk7TUFDRixNQUFNLElBQUFHLDBCQUFnQixFQUFDLE1BQU0sQ0FBQ0MsZUFBQyxDQUFDQyxPQUFPLENBQUMsSUFBSSxDQUFDSCxTQUFTLENBQUNILFFBQVEsRUFBRUMsU0FBUyxDQUFDLENBQUMsRUFBRTtRQUM1RU0sTUFBTSxFQUFFM0QsdUJBQXVCO1FBQy9CNEQsVUFBVSxFQUFFM0Qsd0JBQXdCO1FBQ3BDNEQsS0FBSyxFQUFFO01BQ1QsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxDQUFDLE9BQU9DLEdBQUcsRUFBRTtNQUNaLElBQUksQ0FBQ0EsR0FBRyxDQUFDQyxPQUFPLENBQUNDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO1FBQzVDLE1BQU1GLEdBQUc7TUFDWDtNQUNBLE1BQU0sSUFBSUcsS0FBSyxDQUFDLHFEQUFxRCxDQUFDO0lBQ3hFO0VBQ0Y7RUFFQSxNQUFNQyxJQUFJQSxDQUFFQyxPQUFPLEVBQUVyRCxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUVzRCxlQUFlLEdBQUcsSUFBSSxFQUFFO0lBQ3RELE1BQU1DLEtBQUssR0FBRyxJQUFJQyxlQUFNLENBQUNDLEtBQUssQ0FBQyxDQUFDLENBQUNDLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLE1BQU07TUFDSnBCLFFBQVE7TUFDUkM7SUFDRixDQUFDLEdBQUd2QyxJQUFJO0lBQ1IsSUFBSTtNQUNGLElBQUksQ0FBQzJDLGVBQUMsQ0FBQ0MsT0FBTyxDQUFDTixRQUFRLENBQUMsSUFBSSxDQUFDSyxlQUFDLENBQUNDLE9BQU8sQ0FBQ0wsU0FBUyxDQUFDLEVBQUU7UUFDakQsTUFBTSxJQUFJLENBQUNGLGFBQWEsQ0FBQ0MsUUFBUSxFQUFFQyxTQUFTLENBQUM7TUFDL0M7TUFDQSxPQUFPLE1BQU0sSUFBSSxDQUFDb0IsWUFBWSxDQUFDTixPQUFPLEVBQUVyRCxJQUFJLEVBQUVzRCxlQUFlLENBQUM7SUFDaEUsQ0FBQyxDQUFDLE9BQU9OLEdBQUcsRUFBRTtNQUNaLElBQUk7UUFBRUMsT0FBTyxHQUFHO01BQUcsQ0FBQyxHQUFHRCxHQUFHO01BQzFCQyxPQUFPLEdBQUdBLE9BQU8sQ0FBQ1csV0FBVyxDQUFDLENBQUM7TUFDL0IsSUFBSVgsT0FBTyxDQUFDQyxRQUFRLENBQUUsK0JBQThCLENBQUMsRUFBRTtRQUNyRHRELGVBQUcsQ0FBQ2lFLElBQUksQ0FBQyxpRUFBaUUsR0FDeEUsNkNBQTZDLENBQUM7UUFDaEQsSUFBSSxDQUFDdkUsYUFBYSxHQUFHLEtBQUs7UUFDMUIsT0FBTyxNQUFNLElBQUksQ0FBQ3FFLFlBQVksQ0FBQ04sT0FBTyxFQUFFckQsSUFBSSxFQUFFc0QsZUFBZSxDQUFDO01BQ2hFLENBQUMsTUFBTSxJQUFJTCxPQUFPLENBQUNDLFFBQVEsQ0FBRSxzQkFBcUIsQ0FBQyxJQUMvQ0QsT0FBTyxDQUFDQyxRQUFRLENBQUUsMEJBQXlCLENBQUMsSUFDNUNELE9BQU8sQ0FBQ0MsUUFBUSxDQUFFLGdCQUFlLENBQUMsRUFBRTtRQUN0QyxJQUFJLENBQUM1RCxhQUFhLEdBQUcsSUFBSTtRQUN6QixNQUFNLElBQUksQ0FBQytDLGFBQWEsQ0FBQ0MsUUFBUSxFQUFFQyxTQUFTLENBQUM7UUFDN0MsT0FBTyxNQUFNLElBQUksQ0FBQ29CLFlBQVksQ0FBQ04sT0FBTyxFQUFFckQsSUFBSSxFQUFFc0QsZUFBZSxDQUFDO01BQ2hFO01BQ0EsTUFBTU4sR0FBRztJQUNYLENBQUMsU0FBUztNQUNScEQsZUFBRyxDQUFDQyxLQUFLLENBQUUsaUNBQWdDMEQsS0FBSyxDQUFDTyxXQUFXLENBQUMsQ0FBQyxDQUFDQyxjQUFjLENBQUNDLE9BQU8sQ0FBQyxDQUFDLENBQUUsSUFBRyxDQUFDO0lBQy9GO0VBQ0Y7RUFFQSxNQUFNTCxZQUFZQSxDQUFFTixPQUFPLEVBQUVyRCxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUVzRCxlQUFlLEdBQUcsSUFBSSxFQUFFO0lBQzlELE9BQU8sTUFBTSxJQUFJVyxpQkFBQyxDQUFDLE9BQU9DLE9BQU8sRUFBRUMsTUFBTSxLQUFLO01BQUEsSUFBQUMsZUFBQSxFQUFBQyxnQkFBQTtNQUs1QyxNQUFNdkQsS0FBSyxHQUFHLElBQUksQ0FBQ0EsS0FBSyxFQUFFO01BQzFCLElBQUl3RCxZQUFZLEdBQUd4RCxLQUFLO01BQ3hCLElBQUksSUFBSSxDQUFDeEIsYUFBYSxFQUFFO1FBRXRCZ0YsWUFBWSxHQUFHLElBQUksQ0FBQ3hELEtBQUssRUFBRTtRQUUzQixJQUFJLENBQUNTLGNBQWMsQ0FBQ0gsRUFBRSxDQUFDa0QsWUFBWSxDQUFDQyxRQUFRLENBQUMsQ0FBQyxFQUFFLFVBQVV2QixHQUFHLEVBQUU7VUFDN0QsSUFBSUEsR0FBRyxFQUFFO1lBQ1BtQixNQUFNLENBQUNuQixHQUFHLENBQUM7VUFDYjtRQUNGLENBQUMsQ0FBQztNQUNKO01BRUEsTUFBTVYsUUFBUSxHQUFHdEMsSUFBSSxDQUFDc0MsUUFBUTtNQUM5QixNQUFNQyxTQUFTLEdBQUd2QyxJQUFJLENBQUN1QyxTQUFTO01BQ2hDLE1BQU1pQyxRQUFRLEdBQUcsSUFBSSxDQUFDL0IsU0FBUyxDQUFDSCxRQUFRLEVBQUVDLFNBQVMsQ0FBQztNQUdwRCxNQUFNa0MsUUFBUSxHQUFHOUIsZUFBQyxDQUFDK0IsUUFBUSxDQUFDO1FBQzFCL0QsTUFBTSxFQUFFLElBQUksQ0FBQ0EsTUFBTTtRQUNuQkUsUUFBUSxFQUFFLElBQUksQ0FBQ0EsUUFBUTtRQUN2QjJELFFBQVE7UUFDUkcsRUFBRSxFQUFFN0Q7TUFDTixDQUFDLEVBQUVkLElBQUksQ0FBQztNQUNSLE1BQU00RSxHQUFHLEdBQUcsSUFBSSxDQUFDaEQsY0FBYyxDQUFDaUQsZ0JBQWdCLENBQUN4QixPQUFPLEVBQUVvQixRQUFRLENBQUM7TUFFbkUsSUFBSUcsR0FBRyxhQUFIQSxHQUFHLGdCQUFBUixlQUFBLEdBQUhRLEdBQUcsQ0FBRUUsVUFBVSxjQUFBVixlQUFBLGVBQWZBLGVBQUEsQ0FBaUJXLGdCQUFnQixFQUFFO1FBRXJDLElBQUlwQyxlQUFDLENBQUNxQyxLQUFLLENBQUNKLEdBQUcsQ0FBQ0UsVUFBVSxDQUFDQyxnQkFBZ0IsQ0FBQ0osRUFBRSxDQUFDLEVBQUU7VUFDL0NDLEdBQUcsQ0FBQ0UsVUFBVSxDQUFDQyxnQkFBZ0IsQ0FBQ0osRUFBRSxHQUFHTCxZQUFZO1FBQ25EO1FBQ0FNLEdBQUcsQ0FBQ0UsVUFBVSxDQUFDQyxnQkFBZ0IsR0FDN0JFLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDQyxJQUFJLENBQUNDLFNBQVMsQ0FBQ1IsR0FBRyxDQUFDRSxVQUFVLENBQUNDLGdCQUFnQixDQUFDLENBQUM7TUFDaEU7TUFFQSxJQUFJTSxjQUFjLEdBQUcsSUFBSTtNQUN6QixJQUFJLENBQUMvQixlQUFlLEVBQUU7UUFFcEIrQixjQUFjLEdBQUcsS0FBSztRQUV0QixJQUFJLENBQUM5RCxjQUFjLENBQUNDLElBQUksQ0FBQ1YsS0FBSyxDQUFDeUQsUUFBUSxDQUFDLENBQUMsRUFBRSxVQUFVdkIsR0FBRyxFQUFFO1VBQ3hELElBQUlBLEdBQUcsRUFBRTtZQUdQcEQsZUFBRyxDQUFDbUQsS0FBSyxDQUFFLDhEQUE2RGpDLEtBQU0sT0FBTTZCLGVBQUMsQ0FBQzJDLFFBQVEsQ0FBQ0gsSUFBSSxDQUFDQyxTQUFTLENBQUNwQyxHQUFHLENBQUMsRUFBRWhFLGVBQWUsQ0FBRSxHQUFFLENBQUM7WUFJeEltRixNQUFNLENBQUNuQixHQUFHLENBQUM7VUFDYjtRQUNGLENBQUMsQ0FBQztNQUNKLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQ3pCLGNBQWMsQ0FBQ2dFLFNBQVMsQ0FBQ1gsR0FBRyxDQUFDWSxVQUFVLENBQUMsQ0FBQ3ZHLE1BQU0sRUFBRTtRQUMvRCxJQUFJLENBQUNzQyxjQUFjLENBQUNrRSxtQkFBbUIsQ0FBQ2IsR0FBRyxDQUFDWSxVQUFVLEVBQUUsVUFBVXhDLEdBQUcsRUFBRSxHQUFHMEMsSUFBSSxFQUFFO1VBQzlFLElBQUkxQyxHQUFHLEVBQUU7WUFDUCxPQUFPbUIsTUFBTSxDQUFDbkIsR0FBRyxDQUFDO1VBQ3BCO1VBQ0FwRCxlQUFHLENBQUNDLEtBQUssQ0FBRSxvQ0FBbUNpQixLQUFNLE9BQU02QixlQUFDLENBQUMyQyxRQUFRLENBQUNILElBQUksQ0FBQ0MsU0FBUyxDQUFDTSxJQUFJLENBQUMsRUFBRTFHLGVBQWUsQ0FBRSxHQUFFLENBQUM7VUFDL0drRixPQUFPLENBQUN3QixJQUFJLENBQUM7UUFDZixDQUFDLENBQUM7TUFDSixDQUFDLE1BQU0sSUFBSWQsR0FBRyxhQUFIQSxHQUFHLGdCQUFBUCxnQkFBQSxHQUFITyxHQUFHLENBQUVFLFVBQVUsY0FBQVQsZ0JBQUEsZUFBZkEsZ0JBQUEsQ0FBaUJVLGdCQUFnQixFQUFFO1FBQzVDLElBQUksQ0FBQ3hELGNBQWMsQ0FBQ0MsSUFBSSxDQUFDVixLQUFLLENBQUN5RCxRQUFRLENBQUMsQ0FBQyxFQUFFLFVBQVV2QixHQUFHLEVBQUUyQyxLQUFLLEVBQUU7VUFDL0QsSUFBSTNDLEdBQUcsRUFBRTtZQUNQLE9BQU9tQixNQUFNLENBQUMsSUFBSWhCLEtBQUssQ0FBRSxvQ0FBbUNILEdBQUcsQ0FBQzRDLElBQUssTUFBSzVDLEdBQUcsQ0FBQ0MsT0FBUSxFQUFDLENBQUMsQ0FBQztVQUMzRjtVQUNBckQsZUFBRyxDQUFDQyxLQUFLLENBQUUseUNBQXdDaUIsS0FBTSxPQUFNNkIsZUFBQyxDQUFDMkMsUUFBUSxDQUFDSCxJQUFJLENBQUNDLFNBQVMsQ0FBQ08sS0FBSyxDQUFDLEVBQUUzRyxlQUFlLENBQUUsR0FBRSxDQUFDO1VBQ3JIa0YsT0FBTyxDQUFDeUIsS0FBSyxDQUFDO1FBQ2hCLENBQUMsQ0FBQztNQUNKLENBQUMsTUFBTTtRQUVMTixjQUFjLEdBQUcsS0FBSztNQUN4QjtNQUVBLE1BQU1RLEdBQUcsR0FBSSxZQUFXakIsR0FBRyxDQUFDWSxVQUFXLFdBQVUsSUFDOUNmLFFBQVEsQ0FBQ25DLFFBQVEsR0FBSSxZQUFXbUMsUUFBUSxDQUFDbkMsUUFBUyxHQUFFLEdBQUcsRUFBRSxDQUFDLElBQzFEbUMsUUFBUSxDQUFDbEMsU0FBUyxHQUFJLFdBQVVrQyxRQUFRLENBQUNsQyxTQUFVLEdBQUUsR0FBRyxFQUFFLENBQUMsSUFDM0QsSUFBSSxDQUFDdEIsV0FBVyxJQUFJdUQsUUFBUSxHQUFJLGFBQVlBLFFBQVMsR0FBRSxHQUFHLEVBQUUsQ0FBQyxHQUM3RCxTQUFRMUQsS0FBTSxPQUFNdUMsT0FBUSxHQUFFO01BQ2pDekQsZUFBRyxDQUFDQyxLQUFLLENBQUNnRyxHQUFHLENBQUM7TUFDZCxJQUFJO1FBQ0YsTUFBTUMsR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDQyxXQUFXLENBQUNuQixHQUFHLENBQUM7UUFDdkMsSUFBSSxDQUFDUyxjQUFjLEVBQUU7VUFHbkJuQixPQUFPLENBQUM0QixHQUFHLENBQUM7UUFDZDtNQUNGLENBQUMsQ0FBQyxPQUFPOUMsR0FBRyxFQUFFO1FBQ1osT0FBT21CLE1BQU0sQ0FBQ25CLEdBQUcsQ0FBQztNQUNwQjtJQUNGLENBQUMsQ0FBQztFQUNKO0VBRUEsTUFBTWdELE9BQU9BLENBQUEsRUFBSTtJQUNmLE1BQU0sSUFBSTdDLEtBQUssQ0FBRSxvREFBbUQsQ0FBQztFQUN2RTtFQUVBLE1BQU04QyxVQUFVQSxDQUFBLEVBQUk7SUFDbEIsSUFBSSxDQUFDMUUsY0FBYyxDQUFDMkUsa0JBQWtCLENBQUMsQ0FBQztFQUMxQztFQUVBLE1BQU1ILFdBQVdBLENBQUEsRUFBaUI7SUFDaEMsTUFBTSxJQUFJNUMsS0FBSyxDQUFFLHdEQUF1RCxDQUFDO0VBQzNFO0VBRUEsTUFBTWdELE9BQU9BLENBQUEsRUFBYztJQUN6QixNQUFNLElBQUloRCxLQUFLLENBQUUsb0RBQW1ELENBQUM7RUFDdkU7RUFFQXBCLFNBQVNBLENBQUVpQixHQUFHLEVBQUVvRCxHQUFHLEVBQUVDLFVBQVUsRUFBRTtJQUMvQixJQUFJMUQsZUFBQyxDQUFDcUMsS0FBSyxDQUFDcUIsVUFBVSxhQUFWQSxVQUFVLHVCQUFWQSxVQUFVLENBQUU3QixRQUFRLENBQUMsRUFBRTtNQUNqQzVFLGVBQUcsQ0FBQzhCLElBQUksQ0FBRSxrREFBaUQwRSxHQUFJLDRCQUEyQixDQUFDO01BQzNGO0lBQ0Y7SUFDQSxJQUFJekQsZUFBQyxDQUFDQyxPQUFPLENBQUMsSUFBSSxDQUFDMEQseUJBQXlCLENBQUMsSUFBSSxDQUFDRCxVQUFVLENBQUNFLGFBQWEsRUFBRTtNQUMxRTNHLGVBQUcsQ0FBQzhCLElBQUksQ0FBRSxrREFBaUQwRSxHQUFJLDhCQUE2QmpCLElBQUksQ0FBQ0MsU0FBUyxDQUFDaUIsVUFBVSxDQUFFLEVBQUMsQ0FBQztNQUN6SDtJQUNGO0lBRUEsSUFBSUEsVUFBVSxDQUFDRSxhQUFhLEVBQUU7TUFDNUIzRyxlQUFHLENBQUNDLEtBQUssQ0FBRSx1Q0FBc0N1RyxHQUFJLE9BQU1DLFVBQVUsQ0FBQzdCLFFBQVMsdUNBQXNDLENBQUM7TUFDdEg7SUFDRjtJQUVBLE1BQU0sQ0FBQ2xDLFFBQVEsRUFBRUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDK0QseUJBQXlCO0lBRTVEMUcsZUFBRyxDQUFDQyxLQUFLLENBQUUsMkJBQTBCeUMsUUFBUyxlQUFjQyxTQUFVLE1BQUs0QyxJQUFJLENBQUNDLFNBQVMsQ0FBQ2lCLFVBQVUsQ0FBRSxFQUFDLENBQUM7SUFDeEcsSUFBSTFELGVBQUMsQ0FBQzZELEdBQUcsQ0FBQyxJQUFJLENBQUN0RixPQUFPLENBQUNvQixRQUFRLENBQUMsRUFBRUMsU0FBUyxDQUFDLEVBQUU7TUFDNUMzQyxlQUFHLENBQUNDLEtBQUssQ0FBRSxxREFBb0QsSUFBSSxDQUFDcUIsT0FBTyxDQUFDb0IsUUFBUSxDQUFDLENBQUNDLFNBQVMsQ0FBRSwrQkFBOEIsQ0FBQztJQUNsSTtJQUNBLElBQUksQ0FBQ3JCLE9BQU8sQ0FBQ2tGLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQ2xGLE9BQU8sQ0FBQ2tGLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQyxJQUFJLENBQUNsRixPQUFPLENBQUNvQixRQUFRLENBQUMsQ0FBQ0MsU0FBUyxDQUFDLEdBQUc4RCxVQUFVLENBQUM3QixRQUFRO0VBQ3pEO0VBRUF2QyxZQUFZQSxDQUFFZSxHQUFHLEVBQUVvRCxHQUFHLEVBQUVLLFdBQVcsRUFBRUMsV0FBVyxFQUFFO0lBQ2hEOUcsZUFBRyxDQUFDQyxLQUFLLENBQUUsMkJBQTBCdUcsR0FBSSxtQkFBa0JLLFdBQVksbUJBQWtCQyxXQUFZLEdBQUUsQ0FBQztJQUN4RyxJQUFJLENBQUMsSUFBSSxDQUFDeEYsT0FBTyxDQUFDa0YsR0FBRyxDQUFDLEVBQUU7TUFDdEJ4RyxlQUFHLENBQUM4QixJQUFJLENBQUUsK0JBQThCMEUsR0FBSSx3QkFBdUIsQ0FBQztNQUNwRTtJQUNGO0lBRUEsSUFBSSxDQUFDbEYsT0FBTyxDQUFDa0YsR0FBRyxDQUFDLENBQUNPLFdBQVcsR0FBRztNQUM5QkYsV0FBVztNQUNYQztJQUNGLENBQUM7RUFDSDtFQUVBeEUsWUFBWUEsQ0FBRWMsR0FBRyxFQUFFb0QsR0FBRyxFQUFFQyxVQUFVLEVBQUU7SUFBQSxJQUFBTyxpQkFBQSxFQUFBQyxxQkFBQTtJQUNsQyxJQUFJbEUsZUFBQyxDQUFDcUMsS0FBSyxDQUFDcUIsVUFBVSxhQUFWQSxVQUFVLHVCQUFWQSxVQUFVLENBQUU3QixRQUFRLENBQUMsRUFBRTtNQUNqQzVFLGVBQUcsQ0FBQ0MsS0FBSyxDQUFFLGtFQUFpRSxDQUFDO01BQzdFO0lBQ0Y7SUFFQUQsZUFBRyxDQUFDQyxLQUFLLENBQUUsNkJBQTRCdUcsR0FBSSxNQUFLQyxVQUFVLENBQUM3QixRQUFTLEVBQUMsQ0FBQztJQUd0RSxJQUFJLEVBQUFvQyxpQkFBQSxPQUFJLENBQUMxRixPQUFPLENBQUNrRixHQUFHLENBQUMsY0FBQVEsaUJBQUEsd0JBQUFDLHFCQUFBLEdBQWpCRCxpQkFBQSxDQUFtQkQsV0FBVyxjQUFBRSxxQkFBQSx1QkFBOUJBLHFCQUFBLENBQWdDSixXQUFXLE1BQUtKLFVBQVUsQ0FBQzdCLFFBQVEsRUFBRTtNQUN2RSxNQUFNO1FBQUNpQyxXQUFXO1FBQUVDO01BQVcsQ0FBQyxHQUFHLElBQUksQ0FBQ3hGLE9BQU8sQ0FBQ2tGLEdBQUcsQ0FBQyxDQUFDTyxXQUFXO01BQ2hFLE9BQU8sSUFBSSxDQUFDekYsT0FBTyxDQUFDa0YsR0FBRyxDQUFDLENBQUNPLFdBQVc7TUFHcEMsTUFBTXpGLE9BQU8sR0FBRyxJQUFJLENBQUNBLE9BQU8sQ0FBQ2tGLEdBQUcsQ0FBQztNQUNqQyxLQUFLLE1BQU0sQ0FBQ1UsSUFBSSxFQUFFdEMsUUFBUSxDQUFDLElBQUk3QixlQUFDLENBQUNvRSxPQUFPLENBQUM3RixPQUFPLENBQUMsRUFBRTtRQUNqRCxJQUFJc0QsUUFBUSxLQUFLaUMsV0FBVyxFQUFFO1VBQzVCN0csZUFBRyxDQUFDQyxLQUFLLENBQUUscUNBQW9DdUcsR0FBSSxtQkFBa0JLLFdBQVksbUJBQWtCQyxXQUFZLGFBQVksQ0FBQztVQUM1SHhGLE9BQU8sQ0FBQzRGLElBQUksQ0FBQyxHQUFHSixXQUFXO1VBQzNCO1FBQ0Y7TUFDRjtNQUNBOUcsZUFBRyxDQUFDOEIsSUFBSSxDQUFFLCtCQUE4QjBFLEdBQUkseUVBQXdFLENBQUM7TUFDckh4RyxlQUFHLENBQUM4QixJQUFJLENBQUUsZ0JBQWUrRSxXQUFZLG1CQUFrQkMsV0FBWSx3QkFBdUJ2QixJQUFJLENBQUNDLFNBQVMsQ0FBQ2xFLE9BQU8sQ0FBRSxFQUFDLENBQUM7SUFDdEg7SUFHQSxNQUFNQSxPQUFPLEdBQUcsSUFBSSxDQUFDQSxPQUFPLENBQUNrRixHQUFHLENBQUM7SUFDakMsS0FBSyxNQUFNLENBQUNVLElBQUksRUFBRXRDLFFBQVEsQ0FBQyxJQUFJN0IsZUFBQyxDQUFDb0UsT0FBTyxDQUFDN0YsT0FBTyxDQUFDLEVBQUU7TUFDakQsSUFBSXNELFFBQVEsS0FBSzZCLFVBQVUsQ0FBQzdCLFFBQVEsRUFBRTtRQUNwQyxPQUFPdEQsT0FBTyxDQUFDNEYsSUFBSSxDQUFDO1FBQ3BCO01BQ0Y7SUFDRjtJQUNBbEgsZUFBRyxDQUFDQyxLQUFLLENBQUUsV0FBVXdHLFVBQVUsQ0FBQzdCLFFBQVMsc0JBQXFCNEIsR0FBSSw4QkFBNkIsQ0FBQztFQUNsRztFQUVBM0QsU0FBU0EsQ0FBRUgsUUFBUSxFQUFFQyxTQUFTLEVBQUU7SUFDOUIsT0FBTyxDQUFDLElBQUksQ0FBQ3JCLE9BQU8sQ0FBQ29CLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFQyxTQUFTLENBQUM7RUFDbEQ7RUFFQSxNQUFNeUUsVUFBVUEsQ0FBRTFFLFFBQVEsRUFBRUMsU0FBUyxFQUFFO0lBQ3JDLElBQUksQ0FBQytELHlCQUF5QixHQUFHLENBQUNoRSxRQUFRLEVBQUVDLFNBQVMsQ0FBQztJQUN0RCxJQUFJLENBQUNwQyxvQkFBb0IsR0FBRyxLQUFLO0lBS2pDLE1BQU04RyxRQUFRLEdBQUc7TUFDZjNFLFFBQVE7TUFDUkM7SUFDRixDQUFDO0lBR0QsS0FBSyxNQUFNMkUsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFO01BQ25DLE1BQU0sSUFBSSxDQUFDOUQsSUFBSSxDQUFDLGlCQUFpQixFQUFFK0QsTUFBTSxDQUFDQyxNQUFNLENBQUM7UUFDL0NGO01BQ0YsQ0FBQyxFQUFFRCxRQUFRLENBQUMsRUFBRSxLQUFLLENBQUM7SUFDdEI7SUFFQSxNQUFNLElBQUksQ0FBQzdELElBQUksQ0FBQyxjQUFjLEVBQUU2RCxRQUFRLENBQUM7SUFDekNySCxlQUFHLENBQUNDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztJQUUzQixJQUFJLElBQUksQ0FBQ1AsYUFBYSxJQUFJSSxhQUFJLENBQUNDLGVBQWUsQ0FBQyxJQUFJLENBQUNILGVBQWUsRUFBRSxHQUFHLEVBQUVILDZCQUE2QixDQUFDLEVBQUU7TUFDeEcsTUFBTSxJQUFJLENBQUMrRCxJQUFJLENBQUMsZUFBZSxFQUFFNkQsUUFBUSxFQUFFLEtBQUssQ0FBQztJQUNuRDtJQUVBLElBQUksQ0FBQzlHLG9CQUFvQixHQUFHLElBQUk7SUFFaEMsSUFBSSxJQUFJLENBQUNNLHNCQUFzQixFQUFFO01BQy9CLE1BQU0sSUFBSSxDQUFDNEcsa0JBQWtCLENBQUMvRSxRQUFRLEVBQUVDLFNBQVMsQ0FBQztJQUNwRCxDQUFDLE1BQU07TUFDTCxNQUFNLElBQUksQ0FBQytFLGNBQWMsQ0FBQ2hGLFFBQVEsRUFBRUMsU0FBUyxDQUFDO0lBQ2hEO0VBQ0Y7RUFLQSxNQUFNK0UsY0FBY0EsQ0FBRWhGLFFBQVEsRUFBRUMsU0FBUyxFQUFFO0lBQ3pDLE1BQU0wRSxRQUFRLEdBQUc7TUFDZjNFLFFBQVE7TUFDUkM7SUFDRixDQUFDO0lBRUQsTUFBTSxJQUFJLENBQUNhLElBQUksQ0FBQyxrQkFBa0IsRUFBRTZELFFBQVEsRUFBRSxLQUFLLENBQUM7SUFDcEQsTUFBTSxJQUFJLENBQUM3RCxJQUFJLENBQUMsYUFBYSxFQUFFNkQsUUFBUSxFQUFFLEtBQUssQ0FBQztJQUcvQyxNQUFNLElBQUksQ0FBQzdELElBQUksQ0FBQyxnQkFBZ0IsRUFBRTZELFFBQVEsRUFBRSxLQUFLLENBQUM7SUFDbEQsTUFBTSxJQUFJLENBQUM3RCxJQUFJLENBQUMsZ0JBQWdCLEVBQUU2RCxRQUFRLEVBQUUsS0FBSyxDQUFDO0lBQ2xELE1BQU0sSUFBSSxDQUFDN0QsSUFBSSxDQUFDLGFBQWEsRUFBRTZELFFBQVEsRUFBRSxLQUFLLENBQUM7SUFDL0MsTUFBTSxJQUFJLENBQUM3RCxJQUFJLENBQUMsaUJBQWlCLEVBQUU2RCxRQUFRLEVBQUUsS0FBSyxDQUFDO0lBQ25ELE1BQU0sSUFBSSxDQUFDN0QsSUFBSSxDQUFDLGdCQUFnQixFQUFFNkQsUUFBUSxFQUFFLEtBQUssQ0FBQztJQUNsRCxNQUFNLElBQUksQ0FBQzdELElBQUksQ0FBQyx1QkFBdUIsRUFBRTZELFFBQVEsRUFBRSxLQUFLLENBQUM7RUFDM0Q7RUFNQSxNQUFNSSxrQkFBa0JBLENBQUUvRSxRQUFRLEVBQUVDLFNBQVMsRUFBRTtJQUM3QyxNQUFNMEUsUUFBUSxHQUFHO01BQ2YzRSxRQUFRO01BQ1JDO0lBQ0YsQ0FBQztJQUVELE1BQU0sSUFBSSxDQUFDYSxJQUFJLENBQUMsa0JBQWtCLEVBQUU2RCxRQUFRLEVBQUUsS0FBSyxDQUFDO0lBQ3BELE1BQU0sSUFBSSxDQUFDN0QsSUFBSSxDQUFDLGFBQWEsRUFBRTZELFFBQVEsRUFBRSxLQUFLLENBQUM7SUFHL0MsTUFBTSxJQUFJLENBQUM3RCxJQUFJLENBQUMsc0JBQXNCLEVBQUU2RCxRQUFRLEVBQUUsS0FBSyxDQUFDO0lBQ3hELE1BQU0sSUFBSSxDQUFDN0QsSUFBSSxDQUFDLGdCQUFnQixFQUFFNkQsUUFBUSxFQUFFLEtBQUssQ0FBQztJQUNsRCxNQUFNLElBQUksQ0FBQzdELElBQUksQ0FBQyxvQ0FBb0MsRUFBRStELE1BQU0sQ0FBQ0MsTUFBTSxDQUFDO01BQ2xFRyxRQUFRLEVBQUU7SUFDWixDQUFDLEVBQUVOLFFBQVEsQ0FBQyxFQUFFLEtBQUssQ0FBQztJQUNwQixNQUFNLElBQUksQ0FBQzdELElBQUksQ0FBQyxtQkFBbUIsRUFBRTZELFFBQVEsRUFBRSxLQUFLLENBQUM7SUFDckQsTUFBTSxJQUFJLENBQUM3RCxJQUFJLENBQUMsaUJBQWlCLEVBQUU2RCxRQUFRLEVBQUUsS0FBSyxDQUFDO0lBQ25ELE1BQU0sSUFBSSxDQUFDN0QsSUFBSSxDQUFDLGtCQUFrQixFQUFFNkQsUUFBUSxFQUFFLEtBQUssQ0FBQztJQUNwRCxNQUFNLElBQUksQ0FBQzdELElBQUksQ0FBQyxZQUFZLEVBQUU2RCxRQUFRLEVBQUUsS0FBSyxDQUFDO0lBQzlDLE1BQU0sSUFBSSxDQUFDN0QsSUFBSSxDQUFDLGdCQUFnQixFQUFFNkQsUUFBUSxFQUFFLEtBQUssQ0FBQztJQUNsRCxNQUFNLElBQUksQ0FBQzdELElBQUksQ0FBQyxhQUFhLEVBQUU2RCxRQUFRLEVBQUUsS0FBSyxDQUFDO0lBQy9DLE1BQU0sSUFBSSxDQUFDN0QsSUFBSSxDQUFDLGVBQWUsRUFBRTZELFFBQVEsRUFBRSxLQUFLLENBQUM7SUFDakQsTUFBTSxJQUFJLENBQUM3RCxJQUFJLENBQUMseUJBQXlCLEVBQUU2RCxRQUFRLEVBQUUsS0FBSyxDQUFDO0lBQzNELE1BQU0sSUFBSSxDQUFDN0QsSUFBSSxDQUFDLHlDQUF5QyxFQUFFNkQsUUFBUSxFQUFFLEtBQUssQ0FBQztJQUMzRSxNQUFNLElBQUksQ0FBQzdELElBQUksQ0FBQyx5QkFBeUIsRUFBRStELE1BQU0sQ0FBQ0MsTUFBTSxDQUFDO01BQ3ZESSxXQUFXLEVBQUUsQ0FBQyxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSztJQUNuRCxDQUFDLEVBQUVQLFFBQVEsQ0FBQyxFQUFFLEtBQUssQ0FBQztJQUNwQixNQUFNLElBQUksQ0FBQzdELElBQUksQ0FBQyxnQ0FBZ0MsRUFBRStELE1BQU0sQ0FBQ0MsTUFBTSxDQUFDO01BQzlERixPQUFPLEVBQUU7SUFDWCxDQUFDLEVBQUVELFFBQVEsQ0FBQyxFQUFFLEtBQUssQ0FBQztJQUNwQixNQUFNLElBQUksQ0FBQzdELElBQUksQ0FBQyxpQkFBaUIsRUFBRTZELFFBQVEsRUFBRSxLQUFLLENBQUM7SUFDbkQsTUFBTSxJQUFJLENBQUM3RCxJQUFJLENBQUMsK0JBQStCLEVBQUUrRCxNQUFNLENBQUNDLE1BQU0sQ0FBQztNQUM3REssTUFBTSxFQUFFO0lBQ1YsQ0FBQyxFQUFFUixRQUFRLENBQUMsRUFBRSxLQUFLLENBQUM7SUFDcEIsTUFBTSxJQUFJLENBQUM3RCxJQUFJLENBQUMsK0JBQStCLEVBQUUrRCxNQUFNLENBQUNDLE1BQU0sQ0FBQztNQUM3RE0sS0FBSyxFQUFFO0lBQ1QsQ0FBQyxFQUFFVCxRQUFRLENBQUMsRUFBRSxLQUFLLENBQUM7SUFDcEIsTUFBTSxJQUFJLENBQUM3RCxJQUFJLENBQUMsK0JBQStCLEVBQUUrRCxNQUFNLENBQUNDLE1BQU0sQ0FBQztNQUM3REYsT0FBTyxFQUFFO0lBQ1gsQ0FBQyxFQUFFRCxRQUFRLENBQUMsRUFBRSxLQUFLLENBQUM7SUFDcEIsTUFBTSxJQUFJLENBQUM3RCxJQUFJLENBQUMsa0NBQWtDLEVBQUUrRCxNQUFNLENBQUNDLE1BQU0sQ0FBQztNQUNoRU8sS0FBSyxFQUFFO0lBQ1QsQ0FBQyxFQUFFVixRQUFRLENBQUMsRUFBRSxLQUFLLENBQUM7SUFDcEIsTUFBTSxJQUFJLENBQUM3RCxJQUFJLENBQUMscUNBQXFDLEVBQUUrRCxNQUFNLENBQUNDLE1BQU0sQ0FBQztNQUNuRVEsV0FBVyxFQUFFO0lBQ2YsQ0FBQyxFQUFFWCxRQUFRLENBQUMsRUFBRSxLQUFLLENBQUM7SUFFcEIsTUFBTSxJQUFJLENBQUM3RCxJQUFJLENBQUMsa0JBQWtCLEVBQUU2RCxRQUFRLEVBQUUsS0FBSyxDQUFDO0lBQ3BELE1BQU0sSUFBSSxDQUFDN0QsSUFBSSxDQUFDLGVBQWUsRUFBRTZELFFBQVEsRUFBRSxLQUFLLENBQUM7SUFDakQsTUFBTSxJQUFJLENBQUM3RCxJQUFJLENBQUMsZUFBZSxFQUFFNkQsUUFBUSxFQUFFLEtBQUssQ0FBQztJQUNqRCxNQUFNLElBQUksQ0FBQzdELElBQUksQ0FBQyxnQkFBZ0IsRUFBRTZELFFBQVEsRUFBRSxLQUFLLENBQUM7SUFDbEQsTUFBTSxJQUFJLENBQUM3RCxJQUFJLENBQUMsaUJBQWlCLEVBQUU2RCxRQUFRLEVBQUUsS0FBSyxDQUFDO0lBQ25ELE1BQU1ZLGVBQWUsR0FBRyxNQUFNLElBQUksQ0FBQ3pFLElBQUksQ0FBQyw0QkFBNEIsRUFBRTZELFFBQVEsQ0FBQztJQUMvRSxLQUFLLE1BQU1hLE1BQU0sSUFBSSxDQUFDRCxlQUFlLENBQUNFLFFBQVEsSUFBSSxFQUFFLEVBQUVDLEdBQUcsQ0FBRUMsS0FBSyxJQUFLQSxLQUFLLENBQUNILE1BQU0sQ0FBQyxFQUFFO01BQ2xGLE1BQU0sSUFBSSxDQUFDMUUsSUFBSSxDQUFDLGdDQUFnQyxFQUFFK0QsTUFBTSxDQUFDQyxNQUFNLENBQUM7UUFDOURVLE1BQU07UUFDTkksS0FBSyxFQUFFO01BQ1QsQ0FBQyxFQUFFakIsUUFBUSxDQUFDLEVBQUUsS0FBSyxDQUFDO0lBQ3RCO0lBRUEsTUFBTSxJQUFJLENBQUM3RCxJQUFJLENBQUMsdUJBQXVCLEVBQUU2RCxRQUFRLEVBQUUsS0FBSyxDQUFDO0VBQzNEO0VBRUEsTUFBTWtCLFNBQVNBLENBQUU3RixRQUFRLEVBQUU7SUFDekIsT0FBTyxNQUFNLElBQUkyQixpQkFBQyxDQUFDLENBQUNDLE9BQU8sRUFBRUMsTUFBTSxLQUFLO01BSXRDLE1BQU1pRSxXQUFXLEdBQUdBLENBQUNwRixHQUFHLEVBQUVxRixJQUFJLEtBQUs7UUFDakMsSUFBSXJGLEdBQUcsRUFBRTtVQUNQLE9BQU9tQixNQUFNLENBQUNuQixHQUFHLENBQUM7UUFDcEI7UUFFQSxNQUFNc0YsV0FBVyxHQUFHRCxJQUFJLENBQUNFLCtCQUErQjtRQUN4RCxNQUFNQyxlQUFlLEdBQUdILElBQUksQ0FBQ0ksMkJBQTJCO1FBSXhELElBQUlILFdBQVcsSUFBSUUsZUFBZSxLQUFLRixXQUFXLEVBQUU7VUFDbEQxSSxlQUFHLENBQUNDLEtBQUssQ0FBRSw2REFBNEQsR0FDNUQsWUFBVzJJLGVBQWdCLGVBQWNGLFdBQVksRUFBQyxDQUFDO1FBQ3BFO1FBRUFuRSxNQUFNLENBQUMsSUFBSWhCLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO01BQ3BELENBQUM7TUFDRCxJQUFJLENBQUM1QixjQUFjLENBQUNrRSxtQkFBbUIsQ0FBQyw0QkFBNEIsRUFBRTJDLFdBQVcsQ0FBQztNQUdsRixPQUFPLENBQUMsWUFBWTtRQUNsQixJQUFJTSxRQUFRLEVBQUVDLGlCQUFpQjtRQUMvQixJQUFJO1VBQ0QsQ0FBQ0EsaUJBQWlCLEVBQUVELFFBQVEsQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDdEYsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUMvRGQ7VUFDRixDQUFDLENBQUM7UUFDSixDQUFDLENBQUMsT0FBT1UsR0FBRyxFQUFFO1VBQ1pwRCxlQUFHLENBQUM4QixJQUFJLENBQUUsNkJBQTRCc0IsR0FBRyxDQUFDQyxPQUFRLEVBQUMsQ0FBQztVQUNwRGtCLE1BQU0sQ0FBQ25CLEdBQUcsQ0FBQztRQUNiO1FBSUEsSUFBSUwsZUFBQyxDQUFDQyxPQUFPLENBQUM4RixRQUFRLENBQUMsRUFBRTtVQUN2QixJQUFJN0MsR0FBRyxHQUFHLGdDQUFnQztVQUMxQ2pHLGVBQUcsQ0FBQ0MsS0FBSyxDQUFDZ0csR0FBRyxDQUFDO1VBQ2QxQixNQUFNLENBQUMsSUFBSWhCLEtBQUssQ0FBQzBDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLENBQUMsTUFBTTtVQUNMM0IsT0FBTyxDQUFDLENBQUN5RSxpQkFBaUIsRUFBRUQsUUFBUSxDQUFDLENBQUM7UUFDeEM7TUFDRixDQUFDLEVBQUUsQ0FBQztJQUNOLENBQUMsQ0FBQztFQUNKO0VBRUF2Ryx5QkFBeUJBLENBQUVhLEdBQUcsRUFBRTRGLE9BQU8sRUFBRTtJQUl2QyxJQUFJLENBQUM1SCxRQUFRLENBQUM2SCxJQUFJLENBQUNELE9BQU8sQ0FBQ2pFLEVBQUUsQ0FBQztFQUNoQztFQUVBdkMsa0JBQWtCQSxDQUFBLEVBQUk7SUFFcEJ4QyxlQUFHLENBQUNDLEtBQUssQ0FBRSxpQ0FBZ0MsQ0FBQztFQUM5QztFQUVBaUosY0FBY0EsQ0FBRTlGLEdBQUcsRUFBRStGLFVBQVUsRUFBRTtJQUUvQm5KLGVBQUcsQ0FBQ0MsS0FBSyxDQUFFLGtCQUFpQnNGLElBQUksQ0FBQ0MsU0FBUyxDQUFDMkQsVUFBVSxDQUFFLEVBQUMsQ0FBQztFQUMzRDtBQUNGO0FBQUNDLE9BQUEsQ0FBQUMsT0FBQSxHQUFBbkosU0FBQSJ9
@@ -1 +1 @@
1
- {"version":3,"file":"rpc-client.js","names":["_remoteMessages","_interopRequireDefault","require","_asyncbox","_logger","_lodash","_bluebird","_rpcMessageHandler","_support","DATA_LOG_LENGTH","length","WAIT_FOR_TARGET_TIMEOUT","WAIT_FOR_TARGET_INTERVAL","MIN_PLATFORM_FOR_TARGET_BASED","MIN_PLATFORM_NO_TARGET_EXISTS","isTargetBased","isSafari","platformVersion","isHighVersion","util","compareVersions","log","debug","RpcClient","constructor","opts","_targets","_shouldCheckForTarget","shouldCheckForTarget","bundleId","logAllCommunication","logAllCommunicationHexDump","webInspectorMaxFrameLength","socketChunkSize","fullPageInitialization","isConnected","connId","uuidV4","senderId","msgId","_contexts","contexts","needsTarget","targets","connected","on","event","listener","messageHandler","once","off","warn","_isTargetBased","remoteMessages","RemoteMessages","RpcMessageHandler","addTarget","bind","updateTarget","removeTarget","onExecutionContextCreated","onGarbageCollected","waitForTarget","appIdKey","pageIdKey","force","getTarget","waitForCondition","_","isEmpty","waitMs","intervalMs","error","err","message","includes","Error","send","command","waitForResponse","timer","timing","Timer","start","sendToDevice","toLowerCase","info","getDuration","asMilliSeconds","toFixed","B","resolve","reject","_cmd$__argument","_cmd$__argument2","wrapperMsgId","toString","targetId","fullOpts","defaults","id","cmd","getRemoteCommand","__argument","WIRSocketDataKey","isNil","Buffer","from","JSON","stringify","messageHandled","truncate","listeners","__selector","prependOnceListener","args","value","code","msg","res","sendMessage","connect","disconnect","removeAllListeners","receive","app","targetInfo","pendingTargetNotification","isProvisional","has","oldTargetId","newTargetId","provisional","_this$targets$app","_this$targets$app$pro","page","toPairs","selectPage","sendOpts","enabled","Object","assign","initializePageFull","initializePage","disabled","instruments","active","state","depth","shouldPause","loggingChannels","source","channels","map","entry","level","selectApp","onAppChange","dict","oldAppIdKey","WIRHostApplicationIdentifierKey","correctAppIdKey","WIRApplicationIdentifierKey","pageDict","connectedAppIdKey","context","push","onScriptParsed","scriptInfo","exports","default"],"sources":["../../../lib/rpc/rpc-client.js"],"sourcesContent":["import RemoteMessages from './remote-messages';\nimport { waitForCondition } from 'asyncbox';\nimport log from '../logger';\nimport _ from 'lodash';\nimport B from 'bluebird';\nimport RpcMessageHandler from './rpc-message-handler';\nimport { util, timing } from '@appium/support';\n\n\nconst DATA_LOG_LENGTH = {length: 200};\n\nconst WAIT_FOR_TARGET_TIMEOUT = 10000;\nconst WAIT_FOR_TARGET_INTERVAL = 1000;\n\nconst MIN_PLATFORM_FOR_TARGET_BASED = '12.2';\n\n// `Target.exists` protocol method was removed from WebKit in 13.4\nconst MIN_PLATFORM_NO_TARGET_EXISTS = '13.4';\n\nfunction isTargetBased (isSafari, platformVersion) {\n // On iOS 12.2 the messages get sent through the Target domain\n // On iOS 13.0+, WKWebView also needs to follow the Target domain,\n // so here only check the target OS version as the default behaviour.\n const isHighVersion = util.compareVersions(platformVersion, '>=', MIN_PLATFORM_FOR_TARGET_BASED);\n log.debug(`Checking which communication style to use (${isSafari ? '' : 'non-'}Safari on platform version '${platformVersion}')`);\n log.debug(`Platform version equal or higher than '${MIN_PLATFORM_FOR_TARGET_BASED}': ${isHighVersion}`);\n return isHighVersion;\n}\n\nexport default class RpcClient {\n constructor (opts = {}) {\n this._targets = [];\n this._shouldCheckForTarget = !!opts.shouldCheckForTarget;\n\n const {\n bundleId,\n platformVersion = {},\n isSafari = true,\n logAllCommunication = false,\n logAllCommunicationHexDump = false,\n webInspectorMaxFrameLength,\n socketChunkSize,\n fullPageInitialization = false,\n } = opts;\n\n this.isSafari = isSafari;\n\n this.isConnected = false;\n this.connId = util.uuidV4();\n this.senderId = util.uuidV4();\n this.msgId = 0;\n\n this.logAllCommunication = logAllCommunication;\n this.logAllCommunicationHexDump = logAllCommunicationHexDump;\n this.socketChunkSize = socketChunkSize;\n this.webInspectorMaxFrameLength = webInspectorMaxFrameLength;\n\n this.fullPageInitialization = fullPageInitialization;\n\n this.bundleId = bundleId;\n this.platformVersion = platformVersion;\n\n this._contexts = [];\n this._targets = {};\n\n // start with a best guess for the protocol\n this.isTargetBased = isTargetBased(isSafari, this.platformVersion);\n }\n\n get contexts () {\n return this._contexts;\n }\n\n get needsTarget () {\n return this.shouldCheckForTarget && this.isTargetBased;\n }\n\n get targets () {\n return this._targets;\n }\n\n get shouldCheckForTarget () {\n return this._shouldCheckForTarget;\n }\n\n set shouldCheckForTarget (shouldCheckForTarget) {\n this._shouldCheckForTarget = !!shouldCheckForTarget;\n }\n\n get isConnected () {\n return this.connected;\n }\n\n set isConnected (connected) {\n this.connected = !!connected;\n }\n\n on (event, listener) {\n this.messageHandler.on(event, listener);\n return this;\n }\n\n once (event, listener) {\n this.messageHandler.once(event, listener);\n return this;\n }\n\n off (event, listener) {\n this.messageHandler.off(event, listener);\n return this;\n }\n\n set isTargetBased (isTargetBased) {\n log.warn(`Setting communication protocol: using ${isTargetBased ? 'Target-based' : 'full Web Inspector protocol'} communication`);\n this._isTargetBased = isTargetBased;\n\n if (!this.remoteMessages) {\n this.remoteMessages = new RemoteMessages(isTargetBased);\n } else {\n this.remoteMessages.isTargetBased = isTargetBased;\n }\n\n if (!this.messageHandler) {\n this.messageHandler = new RpcMessageHandler(isTargetBased);\n\n // add handlers for internal events\n this.messageHandler.on('Target.targetCreated', this.addTarget.bind(this));\n this.messageHandler.on('Target.didCommitProvisionalTarget', this.updateTarget.bind(this));\n this.messageHandler.on('Target.targetDestroyed', this.removeTarget.bind(this));\n this.messageHandler.on('Runtime.executionContextCreated', this.onExecutionContextCreated.bind(this));\n this.messageHandler.on('Heap.garbageCollected', this.onGarbageCollected.bind(this));\n } else {\n this.messageHandler.isTargetBased = isTargetBased;\n }\n }\n\n get isTargetBased () {\n return this._isTargetBased;\n }\n\n async waitForTarget (appIdKey, pageIdKey, force = false) {\n if (!force && !this.needsTarget) {\n return;\n }\n\n if (this.getTarget(appIdKey, pageIdKey)) {\n return;\n }\n\n // otherwise waiting is necessary to see what the target is\n try {\n await waitForCondition(() => !_.isEmpty(this.getTarget(appIdKey, pageIdKey)), {\n waitMs: WAIT_FOR_TARGET_TIMEOUT,\n intervalMs: WAIT_FOR_TARGET_INTERVAL,\n error: 'No targets found, unable to communicate with device',\n });\n } catch (err) {\n if (!err.message.includes('Condition unmet')) {\n throw err;\n }\n throw new Error('No targets found, unable to communicate with device');\n }\n }\n\n async send (command, opts = {}, waitForResponse = true) {\n const timer = new timing.Timer().start();\n const {\n appIdKey,\n pageIdKey\n } = opts;\n try {\n if (!_.isEmpty(appIdKey) && !_.isEmpty(pageIdKey)) {\n await this.waitForTarget(appIdKey, pageIdKey);\n }\n return await this.sendToDevice(command, opts, waitForResponse);\n } catch (err) {\n let { message = '' } = err;\n message = message.toLowerCase();\n if (message.includes(`'target' domain was not found`)) {\n log.info('The target device does not support Target based communication. ' +\n 'Will follow non-target based communication.');\n this.isTargetBased = false;\n return await this.sendToDevice(command, opts, waitForResponse);\n } else if (message.includes(`domain was not found`) ||\n message.includes(`some arguments of method`) ||\n message.includes(`missing target`)) {\n this.isTargetBased = true;\n await this.waitForTarget(appIdKey, pageIdKey);\n return await this.sendToDevice(command, opts, waitForResponse);\n }\n throw err;\n } finally {\n log.debug(`Sending to Web Inspector took ${timer.getDuration().asMilliSeconds.toFixed(0)}ms`);\n }\n }\n\n async sendToDevice (command, opts = {}, waitForResponse = true) {\n return await new B(async (resolve, reject) => {\n // promise to be resolved whenever remote debugger\n // replies to our request\n\n // keep track of the messages coming and going using a simple sequential id\n const msgId = this.msgId++;\n let wrapperMsgId = msgId;\n if (this.isTargetBased) {\n // for target-base communication, everything is wrapped up\n wrapperMsgId = this.msgId++;\n // acknowledge wrapper message\n this.messageHandler.on(wrapperMsgId.toString(), function (err) {\n if (err) {\n reject(err);\n }\n });\n }\n\n const appIdKey = opts.appIdKey;\n const pageIdKey = opts.pageIdKey;\n const targetId = this.getTarget(appIdKey, pageIdKey);\n\n // retrieve the correct command to send\n const fullOpts = _.defaults({\n connId: this.connId,\n senderId: this.senderId,\n targetId,\n id: msgId,\n }, opts);\n const cmd = this.remoteMessages.getRemoteCommand(command, fullOpts);\n\n if (cmd?.__argument?.WIRSocketDataKey) {\n // make sure the message being sent has all the information that is needed\n if (_.isNil(cmd.__argument.WIRSocketDataKey.id)) {\n cmd.__argument.WIRSocketDataKey.id = wrapperMsgId;\n }\n cmd.__argument.WIRSocketDataKey =\n Buffer.from(JSON.stringify(cmd.__argument.WIRSocketDataKey));\n }\n\n let messageHandled = true;\n if (!waitForResponse) {\n // the promise will be resolved as soon as the socket has been sent\n messageHandled = false;\n // do not log receipts\n this.messageHandler.once(msgId.toString(), function (err) {\n if (err) {\n // we are not waiting for this, and if it errors it is most likely\n // a protocol change. Log and check during testing\n log.error(`Received error from send that is not being waited for (id: ${msgId}): '${_.truncate(JSON.stringify(err), DATA_LOG_LENGTH)}'`);\n // reject, though it is very rare that this will be triggered, since\n // the promise is resolved directlty after send. On the off chance,\n // though, it will alert of a protocol change.\n reject(err);\n }\n });\n } else if (this.messageHandler.listeners(cmd.__selector).length) {\n this.messageHandler.prependOnceListener(cmd.__selector, function (err, ...args) {\n if (err) {\n return reject(err);\n }\n log.debug(`Received response from send (id: ${msgId}): '${_.truncate(JSON.stringify(args), DATA_LOG_LENGTH)}'`);\n resolve(args);\n });\n } else if (cmd?.__argument?.WIRSocketDataKey) {\n this.messageHandler.once(msgId.toString(), function (err, value) {\n if (err) {\n return reject(new Error(`Remote debugger error with code '${err.code}': ${err.message}`));\n }\n log.debug(`Received data response from send (id: ${msgId}): '${_.truncate(JSON.stringify(value), DATA_LOG_LENGTH)}'`);\n resolve(value);\n });\n } else {\n // nothing else is handling things, so just resolve when the message is sent\n messageHandled = false;\n }\n\n const msg = `Sending '${cmd.__selector}' message` +\n (fullOpts.appIdKey ? ` to app '${fullOpts.appIdKey}'` : '') +\n (fullOpts.pageIdKey ? `, page '${fullOpts.pageIdKey}'` : '') +\n (this.needsTarget && targetId ? `, target '${targetId}'` : '') +\n ` (id: ${msgId}): '${command}'`;\n log.debug(msg);\n try {\n const res = await this.sendMessage(cmd);\n if (!messageHandled) {\n // There are no handlers waiting for a response before resolving,\n // and no errors sending the message over the socket, so resolve\n resolve(res);\n }\n } catch (err) {\n return reject(err);\n }\n });\n }\n\n async connect () { // eslint-disable-line require-await\n throw new Error(`Sub-classes need to implement a 'connect' function`);\n }\n\n async disconnect () { // eslint-disable-line require-await\n this.messageHandler.removeAllListeners();\n }\n\n async sendMessage (/* command */) { // eslint-disable-line require-await\n throw new Error(`Sub-classes need to implement a 'sendMessage' function`);\n }\n\n async receive (/* data */) { // eslint-disable-line require-await\n throw new Error(`Sub-classes need to implement a 'receive' function`);\n }\n\n addTarget (err, app, targetInfo) {\n if (_.isNil(targetInfo?.targetId)) {\n log.warn(`Received 'Target.targetCreated' event for app '${app}' with no target. Skipping`);\n return;\n }\n if (_.isEmpty(this.pendingTargetNotification) && !targetInfo.isProvisional) {\n log.warn(`Received 'Target.targetCreated' event for app '${app}' with no pending request: ${JSON.stringify(targetInfo)}`);\n return;\n }\n\n if (targetInfo.isProvisional) {\n log.debug(`Provisional target created for app '${app}', '${targetInfo.targetId}'. Ignoring until target update event`);\n return;\n }\n\n const [appIdKey, pageIdKey] = this.pendingTargetNotification;\n\n log.debug(`Target created for app '${appIdKey}' and page '${pageIdKey}': ${JSON.stringify(targetInfo)}`);\n if (_.has(this.targets[appIdKey], pageIdKey)) {\n log.debug(`There is already a target for this app and page ('${this.targets[appIdKey][pageIdKey]}'). This might cause problems`);\n }\n this.targets[app] = this.targets[app] || {};\n this.targets[appIdKey][pageIdKey] = targetInfo.targetId;\n }\n\n updateTarget (err, app, oldTargetId, newTargetId) {\n log.debug(`Target updated for app '${app}'. Old target: '${oldTargetId}', new target: '${newTargetId}'`);\n if (!this.targets[app]) {\n log.warn(`No existing target for app '${app}'. Not sure what to do`);\n return;\n }\n // save this, to be used if/when the existing target is destroyed\n this.targets[app].provisional = {\n oldTargetId,\n newTargetId,\n };\n }\n\n removeTarget (err, app, targetInfo) {\n if (_.isNil(targetInfo?.targetId)) {\n log.debug(`Received 'Target.targetDestroyed' event with no target. Skipping`);\n return;\n }\n\n log.debug(`Target destroyed for app '${app}': ${targetInfo.targetId}`);\n\n // go through the targets and find the one that has a waiting provisional target\n if (this.targets[app]?.provisional?.oldTargetId === targetInfo.targetId) {\n const {oldTargetId, newTargetId} = this.targets[app].provisional;\n delete this.targets[app].provisional;\n\n // we do not know the page, so go through and find the existing target\n const targets = this.targets[app];\n for (const [page, targetId] of _.toPairs(targets)) {\n if (targetId === oldTargetId) {\n log.debug(`Found provisional target for app '${app}'. Old target: '${oldTargetId}', new target: '${newTargetId}'. Updating`);\n targets[page] = newTargetId;\n return;\n }\n }\n log.warn(`Provisional target for app '${app}' found, but no suitable existing target found. This may cause problems`);\n log.warn(`Old target: '${oldTargetId}', new target: '${newTargetId}'. Existing targets: ${JSON.stringify(targets)}`);\n }\n\n // if there is no waiting provisional target, just get rid of the existing one\n const targets = this.targets[app];\n for (const [page, targetId] of _.toPairs(targets)) {\n if (targetId === targetInfo.targetId) {\n delete targets[page];\n return;\n }\n }\n log.debug(`Target '${targetInfo.targetId}' deleted for app '${app}', but no such target exists`);\n }\n\n getTarget (appIdKey, pageIdKey) {\n return (this.targets[appIdKey] || {})[pageIdKey];\n }\n\n async selectPage (appIdKey, pageIdKey) {\n this.pendingTargetNotification = [appIdKey, pageIdKey];\n this.shouldCheckForTarget = false;\n\n // go through the steps that the Desktop Safari system\n // goes through to initialize the Web Inspector session\n\n const sendOpts = {\n appIdKey,\n pageIdKey,\n };\n\n // highlight and then un-highlight the webview\n for (const enabled of [true, false]) {\n await this.send('indicateWebView', Object.assign({\n enabled,\n }, sendOpts), false);\n }\n\n await this.send('setSenderKey', sendOpts);\n log.debug('Sender key set');\n\n if (this.isTargetBased && util.compareVersions(this.platformVersion, '<', MIN_PLATFORM_NO_TARGET_EXISTS)) {\n await this.send('Target.exists', sendOpts, false);\n }\n\n this.shouldCheckForTarget = true;\n\n if (this.fullPageInitialization) {\n await this.initializePageFull(appIdKey, pageIdKey);\n } else {\n await this.initializePage(appIdKey, pageIdKey);\n }\n }\n\n /*\n * Perform the minimal initialization to get the Web Inspector working\n */\n async initializePage (appIdKey, pageIdKey) {\n const sendOpts = {\n appIdKey,\n pageIdKey,\n };\n\n await this.send('Inspector.enable', sendOpts, false);\n await this.send('Page.enable', sendOpts, false);\n\n // go through the tasks to initialize\n await this.send('Network.enable', sendOpts, false);\n await this.send('Runtime.enable', sendOpts, false);\n await this.send('Heap.enable', sendOpts, false);\n await this.send('Debugger.enable', sendOpts, false);\n await this.send('Console.enable', sendOpts, false);\n await this.send('Inspector.initialized', sendOpts, false);\n }\n\n /*\n * Mimic every step that Desktop Safari Develop tools uses to initialize a\n * Web Inspector session\n */\n async initializePageFull (appIdKey, pageIdKey) {\n const sendOpts = {\n appIdKey,\n pageIdKey,\n };\n\n await this.send('Inspector.enable', sendOpts, false);\n await this.send('Page.enable', sendOpts, false);\n\n // go through the tasks to initialize\n await this.send('Page.getResourceTree', sendOpts, false);\n await this.send('Network.enable', sendOpts, false);\n await this.send('Network.setResourceCachingDisabled', Object.assign({\n disabled: false,\n }, sendOpts), false);\n await this.send('DOMStorage.enable', sendOpts, false);\n await this.send('Database.enable', sendOpts, false);\n await this.send('IndexedDB.enable', sendOpts, false);\n await this.send('CSS.enable', sendOpts, false);\n await this.send('Runtime.enable', sendOpts, false);\n await this.send('Heap.enable', sendOpts, false);\n await this.send('Memory.enable', sendOpts, false);\n await this.send('ApplicationCache.enable', sendOpts, false);\n await this.send('ApplicationCache.getFramesWithManifests', sendOpts, false);\n await this.send('Timeline.setInstruments', Object.assign({\n instruments: ['Timeline', 'ScriptProfiler', 'CPU'],\n }, sendOpts), false);\n await this.send('Timeline.setAutoCaptureEnabled', Object.assign({\n enabled: false,\n }, sendOpts), false);\n await this.send('Debugger.enable', sendOpts, false);\n await this.send('Debugger.setBreakpointsActive', Object.assign({\n active: true,\n }, sendOpts), false);\n await this.send('Debugger.setPauseOnExceptions', Object.assign({\n state: 'none',\n }, sendOpts), false);\n await this.send('Debugger.setPauseOnAssertions', Object.assign({\n enabled: false,\n }, sendOpts), false);\n await this.send('Debugger.setAsyncStackTraceDepth', Object.assign({\n depth: 200,\n }, sendOpts), false);\n await this.send('Debugger.setPauseForInternalScripts', Object.assign({\n shouldPause: false,\n }, sendOpts), false);\n\n await this.send('LayerTree.enable', sendOpts, false);\n await this.send('Worker.enable', sendOpts, false);\n await this.send('Canvas.enable', sendOpts, false);\n await this.send('Console.enable', sendOpts, false);\n await this.send('DOM.getDocument', sendOpts, false);\n const loggingChannels = await this.send('Console.getLoggingChannels', sendOpts);\n for (const source of (loggingChannels.channels || []).map((entry) => entry.source)) {\n await this.send('Console.setLoggingChannelLevel', Object.assign({\n source,\n level: 'verbose',\n }, sendOpts), false);\n }\n\n await this.send('Inspector.initialized', sendOpts, false);\n }\n\n async selectApp (appIdKey) {\n return await new B((resolve, reject) => {\n // local callback, temporarily added as callback to\n // `_rpc_applicationConnected:` remote debugger response\n // to handle the initial connection\n const onAppChange = (err, dict) => {\n if (err) {\n return reject(err);\n }\n // from the dictionary returned, get the ids\n const oldAppIdKey = dict.WIRHostApplicationIdentifierKey;\n const correctAppIdKey = dict.WIRApplicationIdentifierKey;\n\n // if this is a report of a proxy redirect from the remote debugger\n // we want to update our dictionary and get a new app id\n if (oldAppIdKey && correctAppIdKey !== oldAppIdKey) {\n log.debug(`We were notified we might have connected to the wrong app. ` +\n `Using id ${correctAppIdKey} instead of ${oldAppIdKey}`);\n }\n\n reject(new Error('New application has connected'));\n };\n this.messageHandler.prependOnceListener('_rpc_applicationConnected:', onAppChange);\n\n // do the actual connecting to the app\n return (async () => {\n let pageDict, connectedAppIdKey;\n try {\n ([connectedAppIdKey, pageDict] = await this.send('connectToApp', {\n appIdKey\n }));\n } catch (err) {\n log.warn(`Unable to connect to app: ${err.message}`);\n reject(err);\n }\n\n // sometimes the connect logic happens, but with an empty dictionary\n // which leads to the remote debugger getting disconnected, and into a loop\n if (_.isEmpty(pageDict)) {\n let msg = 'Empty page dictionary received';\n log.debug(msg);\n reject(new Error(msg));\n } else {\n resolve([connectedAppIdKey, pageDict]);\n }\n })();\n });\n }\n\n onExecutionContextCreated (err, context) {\n // { id: 2, isPageContext: true, name: '', frameId: '0.1' }\n // right now we have no way to map contexts to apps/pages\n // so just store\n this.contexts.push(context.id);\n }\n\n onGarbageCollected () {\n // just want to log that this is happening, as it can affect opertion\n log.debug(`Web Inspector garbage collected`);\n }\n\n onScriptParsed (err, scriptInfo) {\n // { scriptId: '13', url: '', startLine: 0, startColumn: 0, endLine: 82, endColumn: 3 }\n log.debug(`Script parsed: ${JSON.stringify(scriptInfo)}`);\n }\n}\n"],"mappings":";;;;;;;;AAAA,IAAAA,eAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,SAAA,GAAAD,OAAA;AACA,IAAAE,OAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,OAAA,GAAAJ,sBAAA,CAAAC,OAAA;AACA,IAAAI,SAAA,GAAAL,sBAAA,CAAAC,OAAA;AACA,IAAAK,kBAAA,GAAAN,sBAAA,CAAAC,OAAA;AACA,IAAAM,QAAA,GAAAN,OAAA;AAGA,MAAMO,eAAe,GAAG;EAACC,MAAM,EAAE;AAAG,CAAC;AAErC,MAAMC,uBAAuB,GAAG,KAAK;AACrC,MAAMC,wBAAwB,GAAG,IAAI;AAErC,MAAMC,6BAA6B,GAAG,MAAM;AAG5C,MAAMC,6BAA6B,GAAG,MAAM;AAE5C,SAASC,aAAaA,CAAEC,QAAQ,EAAEC,eAAe,EAAE;EAIjD,MAAMC,aAAa,GAAGC,aAAI,CAACC,eAAe,CAACH,eAAe,EAAE,IAAI,EAAEJ,6BAA6B,CAAC;EAChGQ,eAAG,CAACC,KAAK,CAAE,8CAA6CN,QAAQ,GAAG,EAAE,GAAG,MAAO,+BAA8BC,eAAgB,IAAG,CAAC;EACjII,eAAG,CAACC,KAAK,CAAE,0CAAyCT,6BAA8B,MAAKK,aAAc,EAAC,CAAC;EACvG,OAAOA,aAAa;AACtB;AAEe,MAAMK,SAAS,CAAC;EAC7BC,WAAWA,CAAEC,IAAI,GAAG,CAAC,CAAC,EAAE;IACtB,IAAI,CAACC,QAAQ,GAAG,EAAE;IAClB,IAAI,CAACC,qBAAqB,GAAG,CAAC,CAACF,IAAI,CAACG,oBAAoB;IAExD,MAAM;MACJC,QAAQ;MACRZ,eAAe,GAAG,CAAC,CAAC;MACpBD,QAAQ,GAAG,IAAI;MACfc,mBAAmB,GAAG,KAAK;MAC3BC,0BAA0B,GAAG,KAAK;MAClCC,0BAA0B;MAC1BC,eAAe;MACfC,sBAAsB,GAAG;IAC3B,CAAC,GAAGT,IAAI;IAER,IAAI,CAACT,QAAQ,GAAGA,QAAQ;IAExB,IAAI,CAACmB,WAAW,GAAG,KAAK;IACxB,IAAI,CAACC,MAAM,GAAGjB,aAAI,CAACkB,MAAM,EAAE;IAC3B,IAAI,CAACC,QAAQ,GAAGnB,aAAI,CAACkB,MAAM,EAAE;IAC7B,IAAI,CAACE,KAAK,GAAG,CAAC;IAEd,IAAI,CAACT,mBAAmB,GAAGA,mBAAmB;IAC9C,IAAI,CAACC,0BAA0B,GAAGA,0BAA0B;IAC5D,IAAI,CAACE,eAAe,GAAGA,eAAe;IACtC,IAAI,CAACD,0BAA0B,GAAGA,0BAA0B;IAE5D,IAAI,CAACE,sBAAsB,GAAGA,sBAAsB;IAEpD,IAAI,CAACL,QAAQ,GAAGA,QAAQ;IACxB,IAAI,CAACZ,eAAe,GAAGA,eAAe;IAEtC,IAAI,CAACuB,SAAS,GAAG,EAAE;IACnB,IAAI,CAACd,QAAQ,GAAG,CAAC,CAAC;IAGlB,IAAI,CAACX,aAAa,GAAGA,aAAa,CAACC,QAAQ,EAAE,IAAI,CAACC,eAAe,CAAC;EACpE;EAEA,IAAIwB,QAAQA,CAAA,EAAI;IACd,OAAO,IAAI,CAACD,SAAS;EACvB;EAEA,IAAIE,WAAWA,CAAA,EAAI;IACjB,OAAO,IAAI,CAACd,oBAAoB,IAAI,IAAI,CAACb,aAAa;EACxD;EAEA,IAAI4B,OAAOA,CAAA,EAAI;IACb,OAAO,IAAI,CAACjB,QAAQ;EACtB;EAEA,IAAIE,oBAAoBA,CAAA,EAAI;IAC1B,OAAO,IAAI,CAACD,qBAAqB;EACnC;EAEA,IAAIC,oBAAoBA,CAAEA,oBAAoB,EAAE;IAC9C,IAAI,CAACD,qBAAqB,GAAG,CAAC,CAACC,oBAAoB;EACrD;EAEA,IAAIO,WAAWA,CAAA,EAAI;IACjB,OAAO,IAAI,CAACS,SAAS;EACvB;EAEA,IAAIT,WAAWA,CAAES,SAAS,EAAE;IAC1B,IAAI,CAACA,SAAS,GAAG,CAAC,CAACA,SAAS;EAC9B;EAEAC,EAAEA,CAAEC,KAAK,EAAEC,QAAQ,EAAE;IACnB,IAAI,CAACC,cAAc,CAACH,EAAE,CAACC,KAAK,EAAEC,QAAQ,CAAC;IACvC,OAAO,IAAI;EACb;EAEAE,IAAIA,CAAEH,KAAK,EAAEC,QAAQ,EAAE;IACrB,IAAI,CAACC,cAAc,CAACC,IAAI,CAACH,KAAK,EAAEC,QAAQ,CAAC;IACzC,OAAO,IAAI;EACb;EAEAG,GAAGA,CAAEJ,KAAK,EAAEC,QAAQ,EAAE;IACpB,IAAI,CAACC,cAAc,CAACE,GAAG,CAACJ,KAAK,EAAEC,QAAQ,CAAC;IACxC,OAAO,IAAI;EACb;EAEA,IAAIhC,aAAaA,CAAEA,aAAa,EAAE;IAChCM,eAAG,CAAC8B,IAAI,CAAE,yCAAwCpC,aAAa,GAAG,cAAc,GAAG,6BAA8B,gBAAe,CAAC;IACjI,IAAI,CAACqC,cAAc,GAAGrC,aAAa;IAEnC,IAAI,CAAC,IAAI,CAACsC,cAAc,EAAE;MACxB,IAAI,CAACA,cAAc,GAAG,IAAIC,uBAAc,CAACvC,aAAa,CAAC;IACzD,CAAC,MAAM;MACL,IAAI,CAACsC,cAAc,CAACtC,aAAa,GAAGA,aAAa;IACnD;IAEA,IAAI,CAAC,IAAI,CAACiC,cAAc,EAAE;MACxB,IAAI,CAACA,cAAc,GAAG,IAAIO,0BAAiB,CAACxC,aAAa,CAAC;MAG1D,IAAI,CAACiC,cAAc,CAACH,EAAE,CAAC,sBAAsB,EAAE,IAAI,CAACW,SAAS,CAACC,IAAI,CAAC,IAAI,CAAC,CAAC;MACzE,IAAI,CAACT,cAAc,CAACH,EAAE,CAAC,mCAAmC,EAAE,IAAI,CAACa,YAAY,CAACD,IAAI,CAAC,IAAI,CAAC,CAAC;MACzF,IAAI,CAACT,cAAc,CAACH,EAAE,CAAC,wBAAwB,EAAE,IAAI,CAACc,YAAY,CAACF,IAAI,CAAC,IAAI,CAAC,CAAC;MAC9E,IAAI,CAACT,cAAc,CAACH,EAAE,CAAC,iCAAiC,EAAE,IAAI,CAACe,yBAAyB,CAACH,IAAI,CAAC,IAAI,CAAC,CAAC;MACpG,IAAI,CAACT,cAAc,CAACH,EAAE,CAAC,uBAAuB,EAAE,IAAI,CAACgB,kBAAkB,CAACJ,IAAI,CAAC,IAAI,CAAC,CAAC;IACrF,CAAC,MAAM;MACL,IAAI,CAACT,cAAc,CAACjC,aAAa,GAAGA,aAAa;IACnD;EACF;EAEA,IAAIA,aAAaA,CAAA,EAAI;IACnB,OAAO,IAAI,CAACqC,cAAc;EAC5B;EAEA,MAAMU,aAAaA,CAAEC,QAAQ,EAAEC,SAAS,EAAEC,KAAK,GAAG,KAAK,EAAE;IACvD,IAAI,CAACA,KAAK,IAAI,CAAC,IAAI,CAACvB,WAAW,EAAE;MAC/B;IACF;IAEA,IAAI,IAAI,CAACwB,SAAS,CAACH,QAAQ,EAAEC,SAAS,CAAC,EAAE;MACvC;IACF;IAGA,IAAI;MACF,MAAM,IAAAG,0BAAgB,EAAC,MAAM,CAACC,eAAC,CAACC,OAAO,CAAC,IAAI,CAACH,SAAS,CAACH,QAAQ,EAAEC,SAAS,CAAC,CAAC,EAAE;QAC5EM,MAAM,EAAE3D,uBAAuB;QAC/B4D,UAAU,EAAE3D,wBAAwB;QACpC4D,KAAK,EAAE;MACT,CAAC,CAAC;IACJ,CAAC,CAAC,OAAOC,GAAG,EAAE;MACZ,IAAI,CAACA,GAAG,CAACC,OAAO,CAACC,QAAQ,CAAC,iBAAiB,CAAC,EAAE;QAC5C,MAAMF,GAAG;MACX;MACA,MAAM,IAAIG,KAAK,CAAC,qDAAqD,CAAC;IACxE;EACF;EAEA,MAAMC,IAAIA,CAAEC,OAAO,EAAErD,IAAI,GAAG,CAAC,CAAC,EAAEsD,eAAe,GAAG,IAAI,EAAE;IACtD,MAAMC,KAAK,GAAG,IAAIC,eAAM,CAACC,KAAK,EAAE,CAACC,KAAK,EAAE;IACxC,MAAM;MACJpB,QAAQ;MACRC;IACF,CAAC,GAAGvC,IAAI;IACR,IAAI;MACF,IAAI,CAAC2C,eAAC,CAACC,OAAO,CAACN,QAAQ,CAAC,IAAI,CAACK,eAAC,CAACC,OAAO,CAACL,SAAS,CAAC,EAAE;QACjD,MAAM,IAAI,CAACF,aAAa,CAACC,QAAQ,EAAEC,SAAS,CAAC;MAC/C;MACA,OAAO,MAAM,IAAI,CAACoB,YAAY,CAACN,OAAO,EAAErD,IAAI,EAAEsD,eAAe,CAAC;IAChE,CAAC,CAAC,OAAON,GAAG,EAAE;MACZ,IAAI;QAAEC,OAAO,GAAG;MAAG,CAAC,GAAGD,GAAG;MAC1BC,OAAO,GAAGA,OAAO,CAACW,WAAW,EAAE;MAC/B,IAAIX,OAAO,CAACC,QAAQ,CAAE,+BAA8B,CAAC,EAAE;QACrDtD,eAAG,CAACiE,IAAI,CAAC,iEAAiE,GACxE,6CAA6C,CAAC;QAChD,IAAI,CAACvE,aAAa,GAAG,KAAK;QAC1B,OAAO,MAAM,IAAI,CAACqE,YAAY,CAACN,OAAO,EAAErD,IAAI,EAAEsD,eAAe,CAAC;MAChE,CAAC,MAAM,IAAIL,OAAO,CAACC,QAAQ,CAAE,sBAAqB,CAAC,IAC/CD,OAAO,CAACC,QAAQ,CAAE,0BAAyB,CAAC,IAC5CD,OAAO,CAACC,QAAQ,CAAE,gBAAe,CAAC,EAAE;QACtC,IAAI,CAAC5D,aAAa,GAAG,IAAI;QACzB,MAAM,IAAI,CAAC+C,aAAa,CAACC,QAAQ,EAAEC,SAAS,CAAC;QAC7C,OAAO,MAAM,IAAI,CAACoB,YAAY,CAACN,OAAO,EAAErD,IAAI,EAAEsD,eAAe,CAAC;MAChE;MACA,MAAMN,GAAG;IACX,CAAC,SAAS;MACRpD,eAAG,CAACC,KAAK,CAAE,iCAAgC0D,KAAK,CAACO,WAAW,EAAE,CAACC,cAAc,CAACC,OAAO,CAAC,CAAC,CAAE,IAAG,CAAC;IAC/F;EACF;EAEA,MAAML,YAAYA,CAAEN,OAAO,EAAErD,IAAI,GAAG,CAAC,CAAC,EAAEsD,eAAe,GAAG,IAAI,EAAE;IAC9D,OAAO,MAAM,IAAIW,iBAAC,CAAC,OAAOC,OAAO,EAAEC,MAAM,KAAK;MAAA,IAAAC,eAAA,EAAAC,gBAAA;MAK5C,MAAMvD,KAAK,GAAG,IAAI,CAACA,KAAK,EAAE;MAC1B,IAAIwD,YAAY,GAAGxD,KAAK;MACxB,IAAI,IAAI,CAACxB,aAAa,EAAE;QAEtBgF,YAAY,GAAG,IAAI,CAACxD,KAAK,EAAE;QAE3B,IAAI,CAACS,cAAc,CAACH,EAAE,CAACkD,YAAY,CAACC,QAAQ,EAAE,EAAE,UAAUvB,GAAG,EAAE;UAC7D,IAAIA,GAAG,EAAE;YACPmB,MAAM,CAACnB,GAAG,CAAC;UACb;QACF,CAAC,CAAC;MACJ;MAEA,MAAMV,QAAQ,GAAGtC,IAAI,CAACsC,QAAQ;MAC9B,MAAMC,SAAS,GAAGvC,IAAI,CAACuC,SAAS;MAChC,MAAMiC,QAAQ,GAAG,IAAI,CAAC/B,SAAS,CAACH,QAAQ,EAAEC,SAAS,CAAC;MAGpD,MAAMkC,QAAQ,GAAG9B,eAAC,CAAC+B,QAAQ,CAAC;QAC1B/D,MAAM,EAAE,IAAI,CAACA,MAAM;QACnBE,QAAQ,EAAE,IAAI,CAACA,QAAQ;QACvB2D,QAAQ;QACRG,EAAE,EAAE7D;MACN,CAAC,EAAEd,IAAI,CAAC;MACR,MAAM4E,GAAG,GAAG,IAAI,CAAChD,cAAc,CAACiD,gBAAgB,CAACxB,OAAO,EAAEoB,QAAQ,CAAC;MAEnE,IAAIG,GAAG,aAAHA,GAAG,gBAAAR,eAAA,GAAHQ,GAAG,CAAEE,UAAU,cAAAV,eAAA,eAAfA,eAAA,CAAiBW,gBAAgB,EAAE;QAErC,IAAIpC,eAAC,CAACqC,KAAK,CAACJ,GAAG,CAACE,UAAU,CAACC,gBAAgB,CAACJ,EAAE,CAAC,EAAE;UAC/CC,GAAG,CAACE,UAAU,CAACC,gBAAgB,CAACJ,EAAE,GAAGL,YAAY;QACnD;QACAM,GAAG,CAACE,UAAU,CAACC,gBAAgB,GAC7BE,MAAM,CAACC,IAAI,CAACC,IAAI,CAACC,SAAS,CAACR,GAAG,CAACE,UAAU,CAACC,gBAAgB,CAAC,CAAC;MAChE;MAEA,IAAIM,cAAc,GAAG,IAAI;MACzB,IAAI,CAAC/B,eAAe,EAAE;QAEpB+B,cAAc,GAAG,KAAK;QAEtB,IAAI,CAAC9D,cAAc,CAACC,IAAI,CAACV,KAAK,CAACyD,QAAQ,EAAE,EAAE,UAAUvB,GAAG,EAAE;UACxD,IAAIA,GAAG,EAAE;YAGPpD,eAAG,CAACmD,KAAK,CAAE,8DAA6DjC,KAAM,OAAM6B,eAAC,CAAC2C,QAAQ,CAACH,IAAI,CAACC,SAAS,CAACpC,GAAG,CAAC,EAAEhE,eAAe,CAAE,GAAE,CAAC;YAIxImF,MAAM,CAACnB,GAAG,CAAC;UACb;QACF,CAAC,CAAC;MACJ,CAAC,MAAM,IAAI,IAAI,CAACzB,cAAc,CAACgE,SAAS,CAACX,GAAG,CAACY,UAAU,CAAC,CAACvG,MAAM,EAAE;QAC/D,IAAI,CAACsC,cAAc,CAACkE,mBAAmB,CAACb,GAAG,CAACY,UAAU,EAAE,UAAUxC,GAAG,EAAE,GAAG0C,IAAI,EAAE;UAC9E,IAAI1C,GAAG,EAAE;YACP,OAAOmB,MAAM,CAACnB,GAAG,CAAC;UACpB;UACApD,eAAG,CAACC,KAAK,CAAE,oCAAmCiB,KAAM,OAAM6B,eAAC,CAAC2C,QAAQ,CAACH,IAAI,CAACC,SAAS,CAACM,IAAI,CAAC,EAAE1G,eAAe,CAAE,GAAE,CAAC;UAC/GkF,OAAO,CAACwB,IAAI,CAAC;QACf,CAAC,CAAC;MACJ,CAAC,MAAM,IAAId,GAAG,aAAHA,GAAG,gBAAAP,gBAAA,GAAHO,GAAG,CAAEE,UAAU,cAAAT,gBAAA,eAAfA,gBAAA,CAAiBU,gBAAgB,EAAE;QAC5C,IAAI,CAACxD,cAAc,CAACC,IAAI,CAACV,KAAK,CAACyD,QAAQ,EAAE,EAAE,UAAUvB,GAAG,EAAE2C,KAAK,EAAE;UAC/D,IAAI3C,GAAG,EAAE;YACP,OAAOmB,MAAM,CAAC,IAAIhB,KAAK,CAAE,oCAAmCH,GAAG,CAAC4C,IAAK,MAAK5C,GAAG,CAACC,OAAQ,EAAC,CAAC,CAAC;UAC3F;UACArD,eAAG,CAACC,KAAK,CAAE,yCAAwCiB,KAAM,OAAM6B,eAAC,CAAC2C,QAAQ,CAACH,IAAI,CAACC,SAAS,CAACO,KAAK,CAAC,EAAE3G,eAAe,CAAE,GAAE,CAAC;UACrHkF,OAAO,CAACyB,KAAK,CAAC;QAChB,CAAC,CAAC;MACJ,CAAC,MAAM;QAELN,cAAc,GAAG,KAAK;MACxB;MAEA,MAAMQ,GAAG,GAAI,YAAWjB,GAAG,CAACY,UAAW,WAAU,IAC9Cf,QAAQ,CAACnC,QAAQ,GAAI,YAAWmC,QAAQ,CAACnC,QAAS,GAAE,GAAG,EAAE,CAAC,IAC1DmC,QAAQ,CAAClC,SAAS,GAAI,WAAUkC,QAAQ,CAAClC,SAAU,GAAE,GAAG,EAAE,CAAC,IAC3D,IAAI,CAACtB,WAAW,IAAIuD,QAAQ,GAAI,aAAYA,QAAS,GAAE,GAAG,EAAE,CAAC,GAC7D,SAAQ1D,KAAM,OAAMuC,OAAQ,GAAE;MACjCzD,eAAG,CAACC,KAAK,CAACgG,GAAG,CAAC;MACd,IAAI;QACF,MAAMC,GAAG,GAAG,MAAM,IAAI,CAACC,WAAW,CAACnB,GAAG,CAAC;QACvC,IAAI,CAACS,cAAc,EAAE;UAGnBnB,OAAO,CAAC4B,GAAG,CAAC;QACd;MACF,CAAC,CAAC,OAAO9C,GAAG,EAAE;QACZ,OAAOmB,MAAM,CAACnB,GAAG,CAAC;MACpB;IACF,CAAC,CAAC;EACJ;EAEA,MAAMgD,OAAOA,CAAA,EAAI;IACf,MAAM,IAAI7C,KAAK,CAAE,oDAAmD,CAAC;EACvE;EAEA,MAAM8C,UAAUA,CAAA,EAAI;IAClB,IAAI,CAAC1E,cAAc,CAAC2E,kBAAkB,EAAE;EAC1C;EAEA,MAAMH,WAAWA,CAAA,EAAiB;IAChC,MAAM,IAAI5C,KAAK,CAAE,wDAAuD,CAAC;EAC3E;EAEA,MAAMgD,OAAOA,CAAA,EAAc;IACzB,MAAM,IAAIhD,KAAK,CAAE,oDAAmD,CAAC;EACvE;EAEApB,SAASA,CAAEiB,GAAG,EAAEoD,GAAG,EAAEC,UAAU,EAAE;IAC/B,IAAI1D,eAAC,CAACqC,KAAK,CAACqB,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAE7B,QAAQ,CAAC,EAAE;MACjC5E,eAAG,CAAC8B,IAAI,CAAE,kDAAiD0E,GAAI,4BAA2B,CAAC;MAC3F;IACF;IACA,IAAIzD,eAAC,CAACC,OAAO,CAAC,IAAI,CAAC0D,yBAAyB,CAAC,IAAI,CAACD,UAAU,CAACE,aAAa,EAAE;MAC1E3G,eAAG,CAAC8B,IAAI,CAAE,kDAAiD0E,GAAI,8BAA6BjB,IAAI,CAACC,SAAS,CAACiB,UAAU,CAAE,EAAC,CAAC;MACzH;IACF;IAEA,IAAIA,UAAU,CAACE,aAAa,EAAE;MAC5B3G,eAAG,CAACC,KAAK,CAAE,uCAAsCuG,GAAI,OAAMC,UAAU,CAAC7B,QAAS,uCAAsC,CAAC;MACtH;IACF;IAEA,MAAM,CAAClC,QAAQ,EAAEC,SAAS,CAAC,GAAG,IAAI,CAAC+D,yBAAyB;IAE5D1G,eAAG,CAACC,KAAK,CAAE,2BAA0ByC,QAAS,eAAcC,SAAU,MAAK4C,IAAI,CAACC,SAAS,CAACiB,UAAU,CAAE,EAAC,CAAC;IACxG,IAAI1D,eAAC,CAAC6D,GAAG,CAAC,IAAI,CAACtF,OAAO,CAACoB,QAAQ,CAAC,EAAEC,SAAS,CAAC,EAAE;MAC5C3C,eAAG,CAACC,KAAK,CAAE,qDAAoD,IAAI,CAACqB,OAAO,CAACoB,QAAQ,CAAC,CAACC,SAAS,CAAE,+BAA8B,CAAC;IAClI;IACA,IAAI,CAACrB,OAAO,CAACkF,GAAG,CAAC,GAAG,IAAI,CAAClF,OAAO,CAACkF,GAAG,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,CAAClF,OAAO,CAACoB,QAAQ,CAAC,CAACC,SAAS,CAAC,GAAG8D,UAAU,CAAC7B,QAAQ;EACzD;EAEAvC,YAAYA,CAAEe,GAAG,EAAEoD,GAAG,EAAEK,WAAW,EAAEC,WAAW,EAAE;IAChD9G,eAAG,CAACC,KAAK,CAAE,2BAA0BuG,GAAI,mBAAkBK,WAAY,mBAAkBC,WAAY,GAAE,CAAC;IACxG,IAAI,CAAC,IAAI,CAACxF,OAAO,CAACkF,GAAG,CAAC,EAAE;MACtBxG,eAAG,CAAC8B,IAAI,CAAE,+BAA8B0E,GAAI,wBAAuB,CAAC;MACpE;IACF;IAEA,IAAI,CAAClF,OAAO,CAACkF,GAAG,CAAC,CAACO,WAAW,GAAG;MAC9BF,WAAW;MACXC;IACF,CAAC;EACH;EAEAxE,YAAYA,CAAEc,GAAG,EAAEoD,GAAG,EAAEC,UAAU,EAAE;IAAA,IAAAO,iBAAA,EAAAC,qBAAA;IAClC,IAAIlE,eAAC,CAACqC,KAAK,CAACqB,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAE7B,QAAQ,CAAC,EAAE;MACjC5E,eAAG,CAACC,KAAK,CAAE,kEAAiE,CAAC;MAC7E;IACF;IAEAD,eAAG,CAACC,KAAK,CAAE,6BAA4BuG,GAAI,MAAKC,UAAU,CAAC7B,QAAS,EAAC,CAAC;IAGtE,IAAI,EAAAoC,iBAAA,OAAI,CAAC1F,OAAO,CAACkF,GAAG,CAAC,cAAAQ,iBAAA,wBAAAC,qBAAA,GAAjBD,iBAAA,CAAmBD,WAAW,cAAAE,qBAAA,uBAA9BA,qBAAA,CAAgCJ,WAAW,MAAKJ,UAAU,CAAC7B,QAAQ,EAAE;MACvE,MAAM;QAACiC,WAAW;QAAEC;MAAW,CAAC,GAAG,IAAI,CAACxF,OAAO,CAACkF,GAAG,CAAC,CAACO,WAAW;MAChE,OAAO,IAAI,CAACzF,OAAO,CAACkF,GAAG,CAAC,CAACO,WAAW;MAGpC,MAAMzF,OAAO,GAAG,IAAI,CAACA,OAAO,CAACkF,GAAG,CAAC;MACjC,KAAK,MAAM,CAACU,IAAI,EAAEtC,QAAQ,CAAC,IAAI7B,eAAC,CAACoE,OAAO,CAAC7F,OAAO,CAAC,EAAE;QACjD,IAAIsD,QAAQ,KAAKiC,WAAW,EAAE;UAC5B7G,eAAG,CAACC,KAAK,CAAE,qCAAoCuG,GAAI,mBAAkBK,WAAY,mBAAkBC,WAAY,aAAY,CAAC;UAC5HxF,OAAO,CAAC4F,IAAI,CAAC,GAAGJ,WAAW;UAC3B;QACF;MACF;MACA9G,eAAG,CAAC8B,IAAI,CAAE,+BAA8B0E,GAAI,yEAAwE,CAAC;MACrHxG,eAAG,CAAC8B,IAAI,CAAE,gBAAe+E,WAAY,mBAAkBC,WAAY,wBAAuBvB,IAAI,CAACC,SAAS,CAAClE,OAAO,CAAE,EAAC,CAAC;IACtH;IAGA,MAAMA,OAAO,GAAG,IAAI,CAACA,OAAO,CAACkF,GAAG,CAAC;IACjC,KAAK,MAAM,CAACU,IAAI,EAAEtC,QAAQ,CAAC,IAAI7B,eAAC,CAACoE,OAAO,CAAC7F,OAAO,CAAC,EAAE;MACjD,IAAIsD,QAAQ,KAAK6B,UAAU,CAAC7B,QAAQ,EAAE;QACpC,OAAOtD,OAAO,CAAC4F,IAAI,CAAC;QACpB;MACF;IACF;IACAlH,eAAG,CAACC,KAAK,CAAE,WAAUwG,UAAU,CAAC7B,QAAS,sBAAqB4B,GAAI,8BAA6B,CAAC;EAClG;EAEA3D,SAASA,CAAEH,QAAQ,EAAEC,SAAS,EAAE;IAC9B,OAAO,CAAC,IAAI,CAACrB,OAAO,CAACoB,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAEC,SAAS,CAAC;EAClD;EAEA,MAAMyE,UAAUA,CAAE1E,QAAQ,EAAEC,SAAS,EAAE;IACrC,IAAI,CAAC+D,yBAAyB,GAAG,CAAChE,QAAQ,EAAEC,SAAS,CAAC;IACtD,IAAI,CAACpC,oBAAoB,GAAG,KAAK;IAKjC,MAAM8G,QAAQ,GAAG;MACf3E,QAAQ;MACRC;IACF,CAAC;IAGD,KAAK,MAAM2E,OAAO,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;MACnC,MAAM,IAAI,CAAC9D,IAAI,CAAC,iBAAiB,EAAE+D,MAAM,CAACC,MAAM,CAAC;QAC/CF;MACF,CAAC,EAAED,QAAQ,CAAC,EAAE,KAAK,CAAC;IACtB;IAEA,MAAM,IAAI,CAAC7D,IAAI,CAAC,cAAc,EAAE6D,QAAQ,CAAC;IACzCrH,eAAG,CAACC,KAAK,CAAC,gBAAgB,CAAC;IAE3B,IAAI,IAAI,CAACP,aAAa,IAAII,aAAI,CAACC,eAAe,CAAC,IAAI,CAACH,eAAe,EAAE,GAAG,EAAEH,6BAA6B,CAAC,EAAE;MACxG,MAAM,IAAI,CAAC+D,IAAI,CAAC,eAAe,EAAE6D,QAAQ,EAAE,KAAK,CAAC;IACnD;IAEA,IAAI,CAAC9G,oBAAoB,GAAG,IAAI;IAEhC,IAAI,IAAI,CAACM,sBAAsB,EAAE;MAC/B,MAAM,IAAI,CAAC4G,kBAAkB,CAAC/E,QAAQ,EAAEC,SAAS,CAAC;IACpD,CAAC,MAAM;MACL,MAAM,IAAI,CAAC+E,cAAc,CAAChF,QAAQ,EAAEC,SAAS,CAAC;IAChD;EACF;EAKA,MAAM+E,cAAcA,CAAEhF,QAAQ,EAAEC,SAAS,EAAE;IACzC,MAAM0E,QAAQ,GAAG;MACf3E,QAAQ;MACRC;IACF,CAAC;IAED,MAAM,IAAI,CAACa,IAAI,CAAC,kBAAkB,EAAE6D,QAAQ,EAAE,KAAK,CAAC;IACpD,MAAM,IAAI,CAAC7D,IAAI,CAAC,aAAa,EAAE6D,QAAQ,EAAE,KAAK,CAAC;IAG/C,MAAM,IAAI,CAAC7D,IAAI,CAAC,gBAAgB,EAAE6D,QAAQ,EAAE,KAAK,CAAC;IAClD,MAAM,IAAI,CAAC7D,IAAI,CAAC,gBAAgB,EAAE6D,QAAQ,EAAE,KAAK,CAAC;IAClD,MAAM,IAAI,CAAC7D,IAAI,CAAC,aAAa,EAAE6D,QAAQ,EAAE,KAAK,CAAC;IAC/C,MAAM,IAAI,CAAC7D,IAAI,CAAC,iBAAiB,EAAE6D,QAAQ,EAAE,KAAK,CAAC;IACnD,MAAM,IAAI,CAAC7D,IAAI,CAAC,gBAAgB,EAAE6D,QAAQ,EAAE,KAAK,CAAC;IAClD,MAAM,IAAI,CAAC7D,IAAI,CAAC,uBAAuB,EAAE6D,QAAQ,EAAE,KAAK,CAAC;EAC3D;EAMA,MAAMI,kBAAkBA,CAAE/E,QAAQ,EAAEC,SAAS,EAAE;IAC7C,MAAM0E,QAAQ,GAAG;MACf3E,QAAQ;MACRC;IACF,CAAC;IAED,MAAM,IAAI,CAACa,IAAI,CAAC,kBAAkB,EAAE6D,QAAQ,EAAE,KAAK,CAAC;IACpD,MAAM,IAAI,CAAC7D,IAAI,CAAC,aAAa,EAAE6D,QAAQ,EAAE,KAAK,CAAC;IAG/C,MAAM,IAAI,CAAC7D,IAAI,CAAC,sBAAsB,EAAE6D,QAAQ,EAAE,KAAK,CAAC;IACxD,MAAM,IAAI,CAAC7D,IAAI,CAAC,gBAAgB,EAAE6D,QAAQ,EAAE,KAAK,CAAC;IAClD,MAAM,IAAI,CAAC7D,IAAI,CAAC,oCAAoC,EAAE+D,MAAM,CAACC,MAAM,CAAC;MAClEG,QAAQ,EAAE;IACZ,CAAC,EAAEN,QAAQ,CAAC,EAAE,KAAK,CAAC;IACpB,MAAM,IAAI,CAAC7D,IAAI,CAAC,mBAAmB,EAAE6D,QAAQ,EAAE,KAAK,CAAC;IACrD,MAAM,IAAI,CAAC7D,IAAI,CAAC,iBAAiB,EAAE6D,QAAQ,EAAE,KAAK,CAAC;IACnD,MAAM,IAAI,CAAC7D,IAAI,CAAC,kBAAkB,EAAE6D,QAAQ,EAAE,KAAK,CAAC;IACpD,MAAM,IAAI,CAAC7D,IAAI,CAAC,YAAY,EAAE6D,QAAQ,EAAE,KAAK,CAAC;IAC9C,MAAM,IAAI,CAAC7D,IAAI,CAAC,gBAAgB,EAAE6D,QAAQ,EAAE,KAAK,CAAC;IAClD,MAAM,IAAI,CAAC7D,IAAI,CAAC,aAAa,EAAE6D,QAAQ,EAAE,KAAK,CAAC;IAC/C,MAAM,IAAI,CAAC7D,IAAI,CAAC,eAAe,EAAE6D,QAAQ,EAAE,KAAK,CAAC;IACjD,MAAM,IAAI,CAAC7D,IAAI,CAAC,yBAAyB,EAAE6D,QAAQ,EAAE,KAAK,CAAC;IAC3D,MAAM,IAAI,CAAC7D,IAAI,CAAC,yCAAyC,EAAE6D,QAAQ,EAAE,KAAK,CAAC;IAC3E,MAAM,IAAI,CAAC7D,IAAI,CAAC,yBAAyB,EAAE+D,MAAM,CAACC,MAAM,CAAC;MACvDI,WAAW,EAAE,CAAC,UAAU,EAAE,gBAAgB,EAAE,KAAK;IACnD,CAAC,EAAEP,QAAQ,CAAC,EAAE,KAAK,CAAC;IACpB,MAAM,IAAI,CAAC7D,IAAI,CAAC,gCAAgC,EAAE+D,MAAM,CAACC,MAAM,CAAC;MAC9DF,OAAO,EAAE;IACX,CAAC,EAAED,QAAQ,CAAC,EAAE,KAAK,CAAC;IACpB,MAAM,IAAI,CAAC7D,IAAI,CAAC,iBAAiB,EAAE6D,QAAQ,EAAE,KAAK,CAAC;IACnD,MAAM,IAAI,CAAC7D,IAAI,CAAC,+BAA+B,EAAE+D,MAAM,CAACC,MAAM,CAAC;MAC7DK,MAAM,EAAE;IACV,CAAC,EAAER,QAAQ,CAAC,EAAE,KAAK,CAAC;IACpB,MAAM,IAAI,CAAC7D,IAAI,CAAC,+BAA+B,EAAE+D,MAAM,CAACC,MAAM,CAAC;MAC7DM,KAAK,EAAE;IACT,CAAC,EAAET,QAAQ,CAAC,EAAE,KAAK,CAAC;IACpB,MAAM,IAAI,CAAC7D,IAAI,CAAC,+BAA+B,EAAE+D,MAAM,CAACC,MAAM,CAAC;MAC7DF,OAAO,EAAE;IACX,CAAC,EAAED,QAAQ,CAAC,EAAE,KAAK,CAAC;IACpB,MAAM,IAAI,CAAC7D,IAAI,CAAC,kCAAkC,EAAE+D,MAAM,CAACC,MAAM,CAAC;MAChEO,KAAK,EAAE;IACT,CAAC,EAAEV,QAAQ,CAAC,EAAE,KAAK,CAAC;IACpB,MAAM,IAAI,CAAC7D,IAAI,CAAC,qCAAqC,EAAE+D,MAAM,CAACC,MAAM,CAAC;MACnEQ,WAAW,EAAE;IACf,CAAC,EAAEX,QAAQ,CAAC,EAAE,KAAK,CAAC;IAEpB,MAAM,IAAI,CAAC7D,IAAI,CAAC,kBAAkB,EAAE6D,QAAQ,EAAE,KAAK,CAAC;IACpD,MAAM,IAAI,CAAC7D,IAAI,CAAC,eAAe,EAAE6D,QAAQ,EAAE,KAAK,CAAC;IACjD,MAAM,IAAI,CAAC7D,IAAI,CAAC,eAAe,EAAE6D,QAAQ,EAAE,KAAK,CAAC;IACjD,MAAM,IAAI,CAAC7D,IAAI,CAAC,gBAAgB,EAAE6D,QAAQ,EAAE,KAAK,CAAC;IAClD,MAAM,IAAI,CAAC7D,IAAI,CAAC,iBAAiB,EAAE6D,QAAQ,EAAE,KAAK,CAAC;IACnD,MAAMY,eAAe,GAAG,MAAM,IAAI,CAACzE,IAAI,CAAC,4BAA4B,EAAE6D,QAAQ,CAAC;IAC/E,KAAK,MAAMa,MAAM,IAAI,CAACD,eAAe,CAACE,QAAQ,IAAI,EAAE,EAAEC,GAAG,CAAEC,KAAK,IAAKA,KAAK,CAACH,MAAM,CAAC,EAAE;MAClF,MAAM,IAAI,CAAC1E,IAAI,CAAC,gCAAgC,EAAE+D,MAAM,CAACC,MAAM,CAAC;QAC9DU,MAAM;QACNI,KAAK,EAAE;MACT,CAAC,EAAEjB,QAAQ,CAAC,EAAE,KAAK,CAAC;IACtB;IAEA,MAAM,IAAI,CAAC7D,IAAI,CAAC,uBAAuB,EAAE6D,QAAQ,EAAE,KAAK,CAAC;EAC3D;EAEA,MAAMkB,SAASA,CAAE7F,QAAQ,EAAE;IACzB,OAAO,MAAM,IAAI2B,iBAAC,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;MAItC,MAAMiE,WAAW,GAAGA,CAACpF,GAAG,EAAEqF,IAAI,KAAK;QACjC,IAAIrF,GAAG,EAAE;UACP,OAAOmB,MAAM,CAACnB,GAAG,CAAC;QACpB;QAEA,MAAMsF,WAAW,GAAGD,IAAI,CAACE,+BAA+B;QACxD,MAAMC,eAAe,GAAGH,IAAI,CAACI,2BAA2B;QAIxD,IAAIH,WAAW,IAAIE,eAAe,KAAKF,WAAW,EAAE;UAClD1I,eAAG,CAACC,KAAK,CAAE,6DAA4D,GAC5D,YAAW2I,eAAgB,eAAcF,WAAY,EAAC,CAAC;QACpE;QAEAnE,MAAM,CAAC,IAAIhB,KAAK,CAAC,+BAA+B,CAAC,CAAC;MACpD,CAAC;MACD,IAAI,CAAC5B,cAAc,CAACkE,mBAAmB,CAAC,4BAA4B,EAAE2C,WAAW,CAAC;MAGlF,OAAO,CAAC,YAAY;QAClB,IAAIM,QAAQ,EAAEC,iBAAiB;QAC/B,IAAI;UACD,CAACA,iBAAiB,EAAED,QAAQ,CAAC,GAAG,MAAM,IAAI,CAACtF,IAAI,CAAC,cAAc,EAAE;YAC/Dd;UACF,CAAC,CAAC;QACJ,CAAC,CAAC,OAAOU,GAAG,EAAE;UACZpD,eAAG,CAAC8B,IAAI,CAAE,6BAA4BsB,GAAG,CAACC,OAAQ,EAAC,CAAC;UACpDkB,MAAM,CAACnB,GAAG,CAAC;QACb;QAIA,IAAIL,eAAC,CAACC,OAAO,CAAC8F,QAAQ,CAAC,EAAE;UACvB,IAAI7C,GAAG,GAAG,gCAAgC;UAC1CjG,eAAG,CAACC,KAAK,CAACgG,GAAG,CAAC;UACd1B,MAAM,CAAC,IAAIhB,KAAK,CAAC0C,GAAG,CAAC,CAAC;QACxB,CAAC,MAAM;UACL3B,OAAO,CAAC,CAACyE,iBAAiB,EAAED,QAAQ,CAAC,CAAC;QACxC;MACF,CAAC,GAAG;IACN,CAAC,CAAC;EACJ;EAEAvG,yBAAyBA,CAAEa,GAAG,EAAE4F,OAAO,EAAE;IAIvC,IAAI,CAAC5H,QAAQ,CAAC6H,IAAI,CAACD,OAAO,CAACjE,EAAE,CAAC;EAChC;EAEAvC,kBAAkBA,CAAA,EAAI;IAEpBxC,eAAG,CAACC,KAAK,CAAE,iCAAgC,CAAC;EAC9C;EAEAiJ,cAAcA,CAAE9F,GAAG,EAAE+F,UAAU,EAAE;IAE/BnJ,eAAG,CAACC,KAAK,CAAE,kBAAiBsF,IAAI,CAACC,SAAS,CAAC2D,UAAU,CAAE,EAAC,CAAC;EAC3D;AACF;AAACC,OAAA,CAAAC,OAAA,GAAAnJ,SAAA"}
1
+ {"version":3,"file":"rpc-client.js","names":["_remoteMessages","_interopRequireDefault","require","_asyncbox","_logger","_lodash","_bluebird","_rpcMessageHandler","_support","DATA_LOG_LENGTH","length","WAIT_FOR_TARGET_TIMEOUT","WAIT_FOR_TARGET_INTERVAL","MIN_PLATFORM_FOR_TARGET_BASED","MIN_PLATFORM_NO_TARGET_EXISTS","isTargetBased","isSafari","platformVersion","isHighVersion","util","compareVersions","log","debug","RpcClient","constructor","opts","_targets","_shouldCheckForTarget","shouldCheckForTarget","bundleId","logAllCommunication","logAllCommunicationHexDump","webInspectorMaxFrameLength","socketChunkSize","fullPageInitialization","isConnected","connId","uuidV4","senderId","msgId","_contexts","contexts","needsTarget","targets","connected","on","event","listener","messageHandler","once","off","warn","_isTargetBased","remoteMessages","RemoteMessages","RpcMessageHandler","addTarget","bind","updateTarget","removeTarget","onExecutionContextCreated","onGarbageCollected","waitForTarget","appIdKey","pageIdKey","force","getTarget","waitForCondition","_","isEmpty","waitMs","intervalMs","error","err","message","includes","Error","send","command","waitForResponse","timer","timing","Timer","start","sendToDevice","toLowerCase","info","getDuration","asMilliSeconds","toFixed","B","resolve","reject","_cmd$__argument","_cmd$__argument2","wrapperMsgId","toString","targetId","fullOpts","defaults","id","cmd","getRemoteCommand","__argument","WIRSocketDataKey","isNil","Buffer","from","JSON","stringify","messageHandled","truncate","listeners","__selector","prependOnceListener","args","value","code","msg","res","sendMessage","connect","disconnect","removeAllListeners","receive","app","targetInfo","pendingTargetNotification","isProvisional","has","oldTargetId","newTargetId","provisional","_this$targets$app","_this$targets$app$pro","page","toPairs","selectPage","sendOpts","enabled","Object","assign","initializePageFull","initializePage","disabled","instruments","active","state","depth","shouldPause","loggingChannels","source","channels","map","entry","level","selectApp","onAppChange","dict","oldAppIdKey","WIRHostApplicationIdentifierKey","correctAppIdKey","WIRApplicationIdentifierKey","pageDict","connectedAppIdKey","context","push","onScriptParsed","scriptInfo","exports","default"],"sources":["../../../lib/rpc/rpc-client.js"],"sourcesContent":["import RemoteMessages from './remote-messages';\nimport { waitForCondition } from 'asyncbox';\nimport log from '../logger';\nimport _ from 'lodash';\nimport B from 'bluebird';\nimport RpcMessageHandler from './rpc-message-handler';\nimport { util, timing } from '@appium/support';\n\n\nconst DATA_LOG_LENGTH = {length: 200};\n\nconst WAIT_FOR_TARGET_TIMEOUT = 10000;\nconst WAIT_FOR_TARGET_INTERVAL = 1000;\n\nconst MIN_PLATFORM_FOR_TARGET_BASED = '12.2';\n\n// `Target.exists` protocol method was removed from WebKit in 13.4\nconst MIN_PLATFORM_NO_TARGET_EXISTS = '13.4';\n\nfunction isTargetBased (isSafari, platformVersion) {\n // On iOS 12.2 the messages get sent through the Target domain\n // On iOS 13.0+, WKWebView also needs to follow the Target domain,\n // so here only check the target OS version as the default behaviour.\n const isHighVersion = util.compareVersions(platformVersion, '>=', MIN_PLATFORM_FOR_TARGET_BASED);\n log.debug(`Checking which communication style to use (${isSafari ? '' : 'non-'}Safari on platform version '${platformVersion}')`);\n log.debug(`Platform version equal or higher than '${MIN_PLATFORM_FOR_TARGET_BASED}': ${isHighVersion}`);\n return isHighVersion;\n}\n\nexport default class RpcClient {\n constructor (opts = {}) {\n this._targets = [];\n this._shouldCheckForTarget = !!opts.shouldCheckForTarget;\n\n const {\n bundleId,\n platformVersion = {},\n isSafari = true,\n logAllCommunication = false,\n logAllCommunicationHexDump = false,\n webInspectorMaxFrameLength,\n socketChunkSize,\n fullPageInitialization = false,\n } = opts;\n\n this.isSafari = isSafari;\n\n this.isConnected = false;\n this.connId = util.uuidV4();\n this.senderId = util.uuidV4();\n this.msgId = 0;\n\n this.logAllCommunication = logAllCommunication;\n this.logAllCommunicationHexDump = logAllCommunicationHexDump;\n this.socketChunkSize = socketChunkSize;\n this.webInspectorMaxFrameLength = webInspectorMaxFrameLength;\n\n this.fullPageInitialization = fullPageInitialization;\n\n this.bundleId = bundleId;\n this.platformVersion = platformVersion;\n\n this._contexts = [];\n this._targets = {};\n\n // start with a best guess for the protocol\n this.isTargetBased = isTargetBased(isSafari, this.platformVersion);\n }\n\n get contexts () {\n return this._contexts;\n }\n\n get needsTarget () {\n return this.shouldCheckForTarget && this.isTargetBased;\n }\n\n get targets () {\n return this._targets;\n }\n\n get shouldCheckForTarget () {\n return this._shouldCheckForTarget;\n }\n\n set shouldCheckForTarget (shouldCheckForTarget) {\n this._shouldCheckForTarget = !!shouldCheckForTarget;\n }\n\n get isConnected () {\n return this.connected;\n }\n\n set isConnected (connected) {\n this.connected = !!connected;\n }\n\n on (event, listener) {\n this.messageHandler.on(event, listener);\n return this;\n }\n\n once (event, listener) {\n this.messageHandler.once(event, listener);\n return this;\n }\n\n off (event, listener) {\n this.messageHandler.off(event, listener);\n return this;\n }\n\n set isTargetBased (isTargetBased) {\n log.warn(`Setting communication protocol: using ${isTargetBased ? 'Target-based' : 'full Web Inspector protocol'} communication`);\n this._isTargetBased = isTargetBased;\n\n if (!this.remoteMessages) {\n this.remoteMessages = new RemoteMessages(isTargetBased);\n } else {\n this.remoteMessages.isTargetBased = isTargetBased;\n }\n\n if (!this.messageHandler) {\n this.messageHandler = new RpcMessageHandler(isTargetBased);\n\n // add handlers for internal events\n this.messageHandler.on('Target.targetCreated', this.addTarget.bind(this));\n this.messageHandler.on('Target.didCommitProvisionalTarget', this.updateTarget.bind(this));\n this.messageHandler.on('Target.targetDestroyed', this.removeTarget.bind(this));\n this.messageHandler.on('Runtime.executionContextCreated', this.onExecutionContextCreated.bind(this));\n this.messageHandler.on('Heap.garbageCollected', this.onGarbageCollected.bind(this));\n } else {\n this.messageHandler.isTargetBased = isTargetBased;\n }\n }\n\n get isTargetBased () {\n return this._isTargetBased;\n }\n\n async waitForTarget (appIdKey, pageIdKey, force = false) {\n if (!force && !this.needsTarget) {\n return;\n }\n\n if (this.getTarget(appIdKey, pageIdKey)) {\n return;\n }\n\n // otherwise waiting is necessary to see what the target is\n try {\n await waitForCondition(() => !_.isEmpty(this.getTarget(appIdKey, pageIdKey)), {\n waitMs: WAIT_FOR_TARGET_TIMEOUT,\n intervalMs: WAIT_FOR_TARGET_INTERVAL,\n error: 'No targets found, unable to communicate with device',\n });\n } catch (err) {\n if (!err.message.includes('Condition unmet')) {\n throw err;\n }\n throw new Error('No targets found, unable to communicate with device');\n }\n }\n\n async send (command, opts = {}, waitForResponse = true) {\n const timer = new timing.Timer().start();\n const {\n appIdKey,\n pageIdKey\n } = opts;\n try {\n if (!_.isEmpty(appIdKey) && !_.isEmpty(pageIdKey)) {\n await this.waitForTarget(appIdKey, pageIdKey);\n }\n return await this.sendToDevice(command, opts, waitForResponse);\n } catch (err) {\n let { message = '' } = err;\n message = message.toLowerCase();\n if (message.includes(`'target' domain was not found`)) {\n log.info('The target device does not support Target based communication. ' +\n 'Will follow non-target based communication.');\n this.isTargetBased = false;\n return await this.sendToDevice(command, opts, waitForResponse);\n } else if (message.includes(`domain was not found`) ||\n message.includes(`some arguments of method`) ||\n message.includes(`missing target`)) {\n this.isTargetBased = true;\n await this.waitForTarget(appIdKey, pageIdKey);\n return await this.sendToDevice(command, opts, waitForResponse);\n }\n throw err;\n } finally {\n log.debug(`Sending to Web Inspector took ${timer.getDuration().asMilliSeconds.toFixed(0)}ms`);\n }\n }\n\n async sendToDevice (command, opts = {}, waitForResponse = true) {\n return await new B(async (resolve, reject) => {\n // promise to be resolved whenever remote debugger\n // replies to our request\n\n // keep track of the messages coming and going using a simple sequential id\n const msgId = this.msgId++;\n let wrapperMsgId = msgId;\n if (this.isTargetBased) {\n // for target-base communication, everything is wrapped up\n wrapperMsgId = this.msgId++;\n // acknowledge wrapper message\n this.messageHandler.on(wrapperMsgId.toString(), function (err) {\n if (err) {\n reject(err);\n }\n });\n }\n\n const appIdKey = opts.appIdKey;\n const pageIdKey = opts.pageIdKey;\n const targetId = this.getTarget(appIdKey, pageIdKey);\n\n // retrieve the correct command to send\n const fullOpts = _.defaults({\n connId: this.connId,\n senderId: this.senderId,\n targetId,\n id: msgId,\n }, opts);\n const cmd = this.remoteMessages.getRemoteCommand(command, fullOpts);\n\n if (cmd?.__argument?.WIRSocketDataKey) {\n // make sure the message being sent has all the information that is needed\n if (_.isNil(cmd.__argument.WIRSocketDataKey.id)) {\n cmd.__argument.WIRSocketDataKey.id = wrapperMsgId;\n }\n cmd.__argument.WIRSocketDataKey =\n Buffer.from(JSON.stringify(cmd.__argument.WIRSocketDataKey));\n }\n\n let messageHandled = true;\n if (!waitForResponse) {\n // the promise will be resolved as soon as the socket has been sent\n messageHandled = false;\n // do not log receipts\n this.messageHandler.once(msgId.toString(), function (err) {\n if (err) {\n // we are not waiting for this, and if it errors it is most likely\n // a protocol change. Log and check during testing\n log.error(`Received error from send that is not being waited for (id: ${msgId}): '${_.truncate(JSON.stringify(err), DATA_LOG_LENGTH)}'`);\n // reject, though it is very rare that this will be triggered, since\n // the promise is resolved directlty after send. On the off chance,\n // though, it will alert of a protocol change.\n reject(err);\n }\n });\n } else if (this.messageHandler.listeners(cmd.__selector).length) {\n this.messageHandler.prependOnceListener(cmd.__selector, function (err, ...args) {\n if (err) {\n return reject(err);\n }\n log.debug(`Received response from send (id: ${msgId}): '${_.truncate(JSON.stringify(args), DATA_LOG_LENGTH)}'`);\n resolve(args);\n });\n } else if (cmd?.__argument?.WIRSocketDataKey) {\n this.messageHandler.once(msgId.toString(), function (err, value) {\n if (err) {\n return reject(new Error(`Remote debugger error with code '${err.code}': ${err.message}`));\n }\n log.debug(`Received data response from send (id: ${msgId}): '${_.truncate(JSON.stringify(value), DATA_LOG_LENGTH)}'`);\n resolve(value);\n });\n } else {\n // nothing else is handling things, so just resolve when the message is sent\n messageHandled = false;\n }\n\n const msg = `Sending '${cmd.__selector}' message` +\n (fullOpts.appIdKey ? ` to app '${fullOpts.appIdKey}'` : '') +\n (fullOpts.pageIdKey ? `, page '${fullOpts.pageIdKey}'` : '') +\n (this.needsTarget && targetId ? `, target '${targetId}'` : '') +\n ` (id: ${msgId}): '${command}'`;\n log.debug(msg);\n try {\n const res = await this.sendMessage(cmd);\n if (!messageHandled) {\n // There are no handlers waiting for a response before resolving,\n // and no errors sending the message over the socket, so resolve\n resolve(res);\n }\n } catch (err) {\n return reject(err);\n }\n });\n }\n\n async connect () { // eslint-disable-line require-await\n throw new Error(`Sub-classes need to implement a 'connect' function`);\n }\n\n async disconnect () { // eslint-disable-line require-await\n this.messageHandler.removeAllListeners();\n }\n\n async sendMessage (/* command */) { // eslint-disable-line require-await\n throw new Error(`Sub-classes need to implement a 'sendMessage' function`);\n }\n\n async receive (/* data */) { // eslint-disable-line require-await\n throw new Error(`Sub-classes need to implement a 'receive' function`);\n }\n\n addTarget (err, app, targetInfo) {\n if (_.isNil(targetInfo?.targetId)) {\n log.warn(`Received 'Target.targetCreated' event for app '${app}' with no target. Skipping`);\n return;\n }\n if (_.isEmpty(this.pendingTargetNotification) && !targetInfo.isProvisional) {\n log.warn(`Received 'Target.targetCreated' event for app '${app}' with no pending request: ${JSON.stringify(targetInfo)}`);\n return;\n }\n\n if (targetInfo.isProvisional) {\n log.debug(`Provisional target created for app '${app}', '${targetInfo.targetId}'. Ignoring until target update event`);\n return;\n }\n\n const [appIdKey, pageIdKey] = this.pendingTargetNotification;\n\n log.debug(`Target created for app '${appIdKey}' and page '${pageIdKey}': ${JSON.stringify(targetInfo)}`);\n if (_.has(this.targets[appIdKey], pageIdKey)) {\n log.debug(`There is already a target for this app and page ('${this.targets[appIdKey][pageIdKey]}'). This might cause problems`);\n }\n this.targets[app] = this.targets[app] || {};\n this.targets[appIdKey][pageIdKey] = targetInfo.targetId;\n }\n\n updateTarget (err, app, oldTargetId, newTargetId) {\n log.debug(`Target updated for app '${app}'. Old target: '${oldTargetId}', new target: '${newTargetId}'`);\n if (!this.targets[app]) {\n log.warn(`No existing target for app '${app}'. Not sure what to do`);\n return;\n }\n // save this, to be used if/when the existing target is destroyed\n this.targets[app].provisional = {\n oldTargetId,\n newTargetId,\n };\n }\n\n removeTarget (err, app, targetInfo) {\n if (_.isNil(targetInfo?.targetId)) {\n log.debug(`Received 'Target.targetDestroyed' event with no target. Skipping`);\n return;\n }\n\n log.debug(`Target destroyed for app '${app}': ${targetInfo.targetId}`);\n\n // go through the targets and find the one that has a waiting provisional target\n if (this.targets[app]?.provisional?.oldTargetId === targetInfo.targetId) {\n const {oldTargetId, newTargetId} = this.targets[app].provisional;\n delete this.targets[app].provisional;\n\n // we do not know the page, so go through and find the existing target\n const targets = this.targets[app];\n for (const [page, targetId] of _.toPairs(targets)) {\n if (targetId === oldTargetId) {\n log.debug(`Found provisional target for app '${app}'. Old target: '${oldTargetId}', new target: '${newTargetId}'. Updating`);\n targets[page] = newTargetId;\n return;\n }\n }\n log.warn(`Provisional target for app '${app}' found, but no suitable existing target found. This may cause problems`);\n log.warn(`Old target: '${oldTargetId}', new target: '${newTargetId}'. Existing targets: ${JSON.stringify(targets)}`);\n }\n\n // if there is no waiting provisional target, just get rid of the existing one\n const targets = this.targets[app];\n for (const [page, targetId] of _.toPairs(targets)) {\n if (targetId === targetInfo.targetId) {\n delete targets[page];\n return;\n }\n }\n log.debug(`Target '${targetInfo.targetId}' deleted for app '${app}', but no such target exists`);\n }\n\n getTarget (appIdKey, pageIdKey) {\n return (this.targets[appIdKey] || {})[pageIdKey];\n }\n\n async selectPage (appIdKey, pageIdKey) {\n this.pendingTargetNotification = [appIdKey, pageIdKey];\n this.shouldCheckForTarget = false;\n\n // go through the steps that the Desktop Safari system\n // goes through to initialize the Web Inspector session\n\n const sendOpts = {\n appIdKey,\n pageIdKey,\n };\n\n // highlight and then un-highlight the webview\n for (const enabled of [true, false]) {\n await this.send('indicateWebView', Object.assign({\n enabled,\n }, sendOpts), false);\n }\n\n await this.send('setSenderKey', sendOpts);\n log.debug('Sender key set');\n\n if (this.isTargetBased && util.compareVersions(this.platformVersion, '<', MIN_PLATFORM_NO_TARGET_EXISTS)) {\n await this.send('Target.exists', sendOpts, false);\n }\n\n this.shouldCheckForTarget = true;\n\n if (this.fullPageInitialization) {\n await this.initializePageFull(appIdKey, pageIdKey);\n } else {\n await this.initializePage(appIdKey, pageIdKey);\n }\n }\n\n /*\n * Perform the minimal initialization to get the Web Inspector working\n */\n async initializePage (appIdKey, pageIdKey) {\n const sendOpts = {\n appIdKey,\n pageIdKey,\n };\n\n await this.send('Inspector.enable', sendOpts, false);\n await this.send('Page.enable', sendOpts, false);\n\n // go through the tasks to initialize\n await this.send('Network.enable', sendOpts, false);\n await this.send('Runtime.enable', sendOpts, false);\n await this.send('Heap.enable', sendOpts, false);\n await this.send('Debugger.enable', sendOpts, false);\n await this.send('Console.enable', sendOpts, false);\n await this.send('Inspector.initialized', sendOpts, false);\n }\n\n /*\n * Mimic every step that Desktop Safari Develop tools uses to initialize a\n * Web Inspector session\n */\n async initializePageFull (appIdKey, pageIdKey) {\n const sendOpts = {\n appIdKey,\n pageIdKey,\n };\n\n await this.send('Inspector.enable', sendOpts, false);\n await this.send('Page.enable', sendOpts, false);\n\n // go through the tasks to initialize\n await this.send('Page.getResourceTree', sendOpts, false);\n await this.send('Network.enable', sendOpts, false);\n await this.send('Network.setResourceCachingDisabled', Object.assign({\n disabled: false,\n }, sendOpts), false);\n await this.send('DOMStorage.enable', sendOpts, false);\n await this.send('Database.enable', sendOpts, false);\n await this.send('IndexedDB.enable', sendOpts, false);\n await this.send('CSS.enable', sendOpts, false);\n await this.send('Runtime.enable', sendOpts, false);\n await this.send('Heap.enable', sendOpts, false);\n await this.send('Memory.enable', sendOpts, false);\n await this.send('ApplicationCache.enable', sendOpts, false);\n await this.send('ApplicationCache.getFramesWithManifests', sendOpts, false);\n await this.send('Timeline.setInstruments', Object.assign({\n instruments: ['Timeline', 'ScriptProfiler', 'CPU'],\n }, sendOpts), false);\n await this.send('Timeline.setAutoCaptureEnabled', Object.assign({\n enabled: false,\n }, sendOpts), false);\n await this.send('Debugger.enable', sendOpts, false);\n await this.send('Debugger.setBreakpointsActive', Object.assign({\n active: true,\n }, sendOpts), false);\n await this.send('Debugger.setPauseOnExceptions', Object.assign({\n state: 'none',\n }, sendOpts), false);\n await this.send('Debugger.setPauseOnAssertions', Object.assign({\n enabled: false,\n }, sendOpts), false);\n await this.send('Debugger.setAsyncStackTraceDepth', Object.assign({\n depth: 200,\n }, sendOpts), false);\n await this.send('Debugger.setPauseForInternalScripts', Object.assign({\n shouldPause: false,\n }, sendOpts), false);\n\n await this.send('LayerTree.enable', sendOpts, false);\n await this.send('Worker.enable', sendOpts, false);\n await this.send('Canvas.enable', sendOpts, false);\n await this.send('Console.enable', sendOpts, false);\n await this.send('DOM.getDocument', sendOpts, false);\n const loggingChannels = await this.send('Console.getLoggingChannels', sendOpts);\n for (const source of (loggingChannels.channels || []).map((entry) => entry.source)) {\n await this.send('Console.setLoggingChannelLevel', Object.assign({\n source,\n level: 'verbose',\n }, sendOpts), false);\n }\n\n await this.send('Inspector.initialized', sendOpts, false);\n }\n\n async selectApp (appIdKey) {\n return await new B((resolve, reject) => {\n // local callback, temporarily added as callback to\n // `_rpc_applicationConnected:` remote debugger response\n // to handle the initial connection\n const onAppChange = (err, dict) => {\n if (err) {\n return reject(err);\n }\n // from the dictionary returned, get the ids\n const oldAppIdKey = dict.WIRHostApplicationIdentifierKey;\n const correctAppIdKey = dict.WIRApplicationIdentifierKey;\n\n // if this is a report of a proxy redirect from the remote debugger\n // we want to update our dictionary and get a new app id\n if (oldAppIdKey && correctAppIdKey !== oldAppIdKey) {\n log.debug(`We were notified we might have connected to the wrong app. ` +\n `Using id ${correctAppIdKey} instead of ${oldAppIdKey}`);\n }\n\n reject(new Error('New application has connected'));\n };\n this.messageHandler.prependOnceListener('_rpc_applicationConnected:', onAppChange);\n\n // do the actual connecting to the app\n return (async () => {\n let pageDict, connectedAppIdKey;\n try {\n ([connectedAppIdKey, pageDict] = await this.send('connectToApp', {\n appIdKey\n }));\n } catch (err) {\n log.warn(`Unable to connect to app: ${err.message}`);\n reject(err);\n }\n\n // sometimes the connect logic happens, but with an empty dictionary\n // which leads to the remote debugger getting disconnected, and into a loop\n if (_.isEmpty(pageDict)) {\n let msg = 'Empty page dictionary received';\n log.debug(msg);\n reject(new Error(msg));\n } else {\n resolve([connectedAppIdKey, pageDict]);\n }\n })();\n });\n }\n\n onExecutionContextCreated (err, context) {\n // { id: 2, isPageContext: true, name: '', frameId: '0.1' }\n // right now we have no way to map contexts to apps/pages\n // so just store\n this.contexts.push(context.id);\n }\n\n onGarbageCollected () {\n // just want to log that this is happening, as it can affect opertion\n log.debug(`Web Inspector garbage collected`);\n }\n\n onScriptParsed (err, scriptInfo) {\n // { scriptId: '13', url: '', startLine: 0, startColumn: 0, endLine: 82, endColumn: 3 }\n log.debug(`Script parsed: ${JSON.stringify(scriptInfo)}`);\n }\n}\n"],"mappings":"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"}